ZGlmZiAtLWdpdCBhL0NsZWFuU3BlYy5tayBiL0NsZWFuU3BlYy5tawppbmRleCBiODRlMWI2Li44NDFhZDE2IDEwMDY0NAotLS0gYS9DbGVhblNwZWMubWsKKysrIGIvQ2xlYW5TcGVjLm1rCkBAIC00NCw2ICs0NCwxMCBAQAogIyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgZmluZCAkKE9VVF9ESVIpIC10eXBlIGYgLW5hbWUgIklHVGFsa1Nlc3Npb24qIiAtcHJpbnQwIHwgeGFyZ3MgLTAgcm0gLWYpCiAjJChjYWxsIGFkZC1jbGVhbi1zdGVwLCBybSAtcmYgJChQUk9EVUNUX09VVCkvZGF0YS8qKQogCisjIFN3aXRjaGluZyB0byBqZW1hbGxvYyByZXF1aXJlcyBkZWxldGluZyB0aGVzZSBmaWxlcy4KKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoUFJPRFVDVF9PVVQpL29iai9TVEFUSUNfTElCUkFSSUVTL2xpYmNfKikKKyQoY2FsbCBhZGQtY2xlYW4tc3RlcCwgcm0gLXJmICQoUFJPRFVDVF9PVVQpL29iai9TSEFSRURfTElCUkFSSUVTL2xpYmNfKikKKwogIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICMgTkVXRVIgQ0xFQU4gU1RFUFMgTVVTVCBCRSBBVCBUSEUgRU5EIE9GIFRIRSBMSVNUCiAjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvSEFDS0lORy50eHQgYi9IQUNLSU5HLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2UxMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvSEFDS0lORy50eHQKQEAgLTAsMCArMSwxNjIgQEAKK1dvcmtpbmcgb24gYmlvbmljCis9PT09PT09PT09PT09PT09PQorCitXaGF0IGFyZSB0aGUgYmlnIHBpZWNlcyBvZiBiaW9uaWM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xpYmMvIC0tLSBsaWJjLnNvLCBsaWJjLmEKKyAgVGhlIEMgbGlicmFyeS4gU3R1ZmYgbGlrZSBmb3BlbigzKSBhbmQga2lsbCgyKS4KK2xpYm0vIC0tLSBsaWJtLnNvLCBsaWJtLmEKKyAgVGhlIG1hdGggbGlicmFyeS4gVHJhZGl0aW9uYWxseSBVbml4IHN5c3RlbXMga2VwdCBzdHVmZiBsaWtlIHNpbigzKSBhbmQKKyAgY29zKDMpIGluIGEgc2VwYXJhdGUgbGlicmFyeSB0byBzYXZlIHNwYWNlIGluIHRoZSBkYXlzIGJlZm9yZSBzaGFyZWQKKyAgbGlicmFyaWVzLgorbGliZGwvIC0tLSBsaWJkbC5zbworICBUaGUgZHluYW1pYyBsaW5rZXIgaW50ZXJmYWNlIGxpYnJhcnkuIFRoaXMgaXMgYWN0dWFsbHkganVzdCBhIGJ1bmNoIG9mCisgIHN0dWJzIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyIHJlcGxhY2VzIHdpdGggcG9pbnRlcnMgdG8gaXRzIG93bgorICBpbXBsZW1lbnRhdGlvbiBhdCBydW50aW1lLiBUaGlzIGlzIHdoZXJlIHN0dWZmIGxpa2UgZGxvcGVuKDMpIGxpdmVzLgorbGlic3RkYysrLyAtLS0gbGlic3RkYysrLnNvCisgIFRoZSBDKysgQUJJIHN1cHBvcnQgZnVuY3Rpb25zLiBUaGUgQysrIGNvbXBpbGVyIGRvZXNuJ3Qga25vdyBob3cgdG8KKyAgaW1wbGVtZW50IHRocmVhZC1zYWZlIHN0YXRpYyBpbml0aWFsaXphdGlvbiBhbmQgdGhlIGxpa2UsIHNvIGl0IGp1c3QgY2FsbHMKKyAgZnVuY3Rpb25zIHRoYXQgYXJlIHN1cHBsaWVkIGJ5IHRoZSBzeXN0ZW0uIFN0dWZmIGxpa2UgX19jeGFfZ3VhcmRfYWNxdWlyZQorICBhbmQgX19jeGFfcHVyZV92aXJ0dWFsIGxpdmUgaGVyZS4KKworbGlua2VyLyAtLS0gL3N5c3RlbS9iaW4vbGlua2VyIGFuZCAvc3lzdGVtL2Jpbi9saW5rZXI2NAorICBUaGUgZHluYW1pYyBsaW5rZXIuIFdoZW4geW91IHJ1biBhIGR5bmFtaWNhbGx5LWxpbmtlZCBleGVjdXRhYmxlLCBpdHMgRUxGCisgIGZpbGUgaGFzIGEgRFRfSU5URVJQIGVudHJ5IHRoYXQgc2F5cyAidXNlIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSB0byBzdGFydCBtZSIuCisgIE9uIEFuZHJvaWQsIHRoYXQncyBlaXRoZXIgbGlua2VyIG9yIGxpbmtlcjY0IChkZXBlbmRpbmcgb24gd2hldGhlciBpdCdzIGEKKyAgMzItYml0IG9yIDY0LWJpdCBleGVjdXRhYmxlKS4gSXQncyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyB0aGUgRUxGIGV4ZWN1dGFibGUKKyAgaW50byBtZW1vcnkgYW5kIHJlc29sdmluZyByZWZlcmVuY2VzIHRvIHN5bWJvbHMgKHNvIHRoYXQgd2hlbiB5b3VyIGNvZGUgdHJpZXMKKyAgdG8ganVtcCB0byBmb3BlbigzKSwgc2F5LCBpdCBsYW5kcyBpbiB0aGUgcmlnaHQgcGxhY2UpLgorCit0ZXN0cy8gLS0tIHVuaXQgdGVzdHMKKyAgVGhlIHRlc3RzLyBkaXJlY3RvcnkgY29udGFpbnMgdW5pdCB0ZXN0cy4gUm91Z2hseSBhcnJhbmdlZCBhcyBvbmUgZmlsZSBwZXIKKyAgcHVibGljbHktZXhwb3J0ZWQgaGVhZGVyIGZpbGUuCitiZW5jaG1hcmtzLyAtLS0gYmVuY2htYXJrcworICBUaGUgYmVuY2htYXJrcy8gZGlyZWN0b3J5IGNvbnRhaW5zIGJlbmNobWFya3MuCisKKworV2hhdCdzIGluIGxpYmMvPworLS0tLS0tLS0tLS0tLS0tLQorCitsaWJjLworICBhcmNoLWFybS8KKyAgYXJjaC1hcm02NC8KKyAgYXJjaC1jb21tb24vCisgIGFyY2gtbWlwcy8KKyAgYXJjaC1taXBzNjQvCisgIGFyY2gteDg2LworICBhcmNoLXg4Nl82NC8KKyAgICAjIEVhY2ggYXJjaGl0ZWN0dXJlIGhhcyBpdHMgb3duIHN1YmRpcmVjdG9yeSBmb3Igc3R1ZmYgdGhhdCBpc24ndCBzaGFyZWQKKyAgICAjIGJlY2F1c2UgaXQncyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIFRoZXJlIHdpbGwgYmUgYSAubWsgZmlsZSBpbiBoZXJlIHRoYXQKKyAgICAjIGRyYWdzIGluIGFsbCB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzLgorICAgIGJpb25pYy8KKyAgICAgICMgRXZlcnkgYXJjaGl0ZWN0dXJlIG5lZWRzIGEgaGFuZGZ1bCBvZiBtYWNoaW5lLXNwZWNpZmljIGFzc2VtYmxlciBmaWxlcy4KKyAgICAgICMgVGhleSBsaXZlIGhlcmUuCisgICAgaW5jbHVkZS8KKyAgICAgIG1hY2hpbmUvCisgICAgICAgICMgVGhlIG1ham9yaXR5IG9mIGhlYWRlciBmaWxlcyBhcmUgYWN0dWFsbHkgaW4gbGliYy9pbmNsdWRlLywgYnV0IG1hbnkKKyAgICAgICAgIyBvZiB0aGVtIHB1bGwgaW4gYSA8bWFjaGluZS9zb21ldGhpbmcuaD4gZm9yIHRoaW5ncyBsaWtlIGxpbWl0cywKKyAgICAgICAgIyBlbmRpYW5uZXNzLCBhbmQgaG93IGZsb2F0aW5nIHBvaW50IG51bWJlcnMgYXJlIHJlcHJlc2VudGVkLiBUaG9zZQorICAgICAgICAjIGhlYWRlcnMgbGl2ZSBoZXJlLgorICAgIHN0cmluZy8KKyAgICAgICMgTW9zdCBhcmNoaXRlY3R1cmVzIGhhdmUgYSBoYW5kZnVsIG9mIG9wdGlvbmFsIGFzc2VtYmxlciBmaWxlcworICAgICAgIyBpbXBsZW1lbnRpbmcgb3B0aW1pemVkIHZlcnNpb25zIG9mIHZhcmlvdXMgcm91dGluZXMuIFRoZSA8c3RyaW5nLmg+CisgICAgICAjIGZ1bmN0aW9ucyBhcmUgcGFydGljdWxhciBmYXZvcml0ZXMuCisgICAgc3lzY2FsbHMvCisgICAgICAjIFRoZSBzeXNjYWxscyBkaXJlY3RvcmllcyBjb250YWluIHNjcmlwdC1nZW5lcmF0ZWQgYXNzZW1ibGVyIGZpbGVzLgorICAgICAgIyBTZWUgJ0FkZGluZyBzeXN0ZW0gY2FsbHMnIGxhdGVyLgorCisgIGluY2x1ZGUvCisgICAgIyBUaGUgcHVibGljIGhlYWRlciBmaWxlcyBvbiBldmVyeW9uZSdzIGluY2x1ZGUgcGF0aC4gVGhlc2UgYXJlIGEgbWl4dHVyZSBvZgorICAgICMgZmlsZXMgd3JpdHRlbiBieSB1cyBhbmQgZmlsZXMgdGFrZW4gZnJvbSBCU0QuCisKKyAga2VybmVsLworICAgICMgVGhlIGtlcm5lbCB1YXBpIGhlYWRlciBmaWxlcy4gVGhlc2UgYXJlIHNjcnViYmVkIGNvcGllcyBvZiB0aGUgb3JpZ2luYWxzCisgICAgIyBpbiBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy8uIFRoZXNlIGZpbGVzIG11c3Qgbm90IGJlIGVkaXRlZCBkaXJlY3RseS4gVGhlCisgICAgIyBnZW5lcmF0ZV91YXBpX2hlYWRlcnMuc2ggc2NyaXB0IHNob3VsZCBiZSB1c2VkIHRvIGdvIGZyb20gYSBrZXJuZWwgdHJlZSB0bworICAgICMgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvIC0tLSB0aGlzIHRha2VzIGNhcmUgb2YgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworICAgICMgZGV0YWlscy4gVGhlIHVwZGF0ZV9hbGwucHkgc2NyaXB0IHNob3VsZCBiZSB1c2VkIHRvIHJlZ2VuZXJhdGUgYmlvbmljJ3MKKyAgICAjIHNjcnViYmVkIGhlYWRlcnMgZnJvbSBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy8uCisKKyAgcHJpdmF0ZS8KKyAgICAjIFRoZXNlIGFyZSBwcml2YXRlIGhlYWRlciBmaWxlcyBtZWFudCBmb3IgdXNlIHdpdGhpbiBiaW9uaWMgaXRzZWxmLgorCisgIGRucy8KKyAgICAjIENvbnRhaW5zIHRoZSBETlMgcmVzb2x2ZXIgKG9yaWdpbmF0ZXMgZnJvbSBOZXRCU0QgY29kZSkuCisKKyAgdXBzdHJlYW0tZGxtYWxsb2MvCisgIHVwc3RyZWFtLWZyZWVic2QvCisgIHVwc3RyZWFtLW5ldGJzZC8KKyAgdXBzdHJlYW0tb3BlbmJzZC8KKyAgICAjIFRoZXNlIGRpcmVjdG9yaWVzIGNvbnRhaW4gdW5tb2xlc3RlZCB1cHN0cmVhbSBzb3VyY2UuIEFueSB0aW1lIHdlIGNhbgorICAgICMganVzdCB1c2UgYSBCU0QgaW1wbGVtZW50YXRpb24gb2Ygc29tZXRoaW5nIHVubW9kaWZpZWQsIHdlIHNob3VsZC4KKyAgICAjIFRoZSBzdHJ1Y3R1cmUgdW5kZXIgdGhlc2UgZGlyZWN0b3JpZXMgbWltaWNzIHRoZSB1cHN0cmVhbSB0cmVlLAorICAgICMgYnV0IHRoZXJlJ3MgYWxzby4uLgorICAgIGFuZHJvaWQvCisgICAgICBpbmNsdWRlLworICAgICAgICAjIFRoaXMgaXMgd2hlcmUgd2Uga2VlcCB0aGUgaGFja3MgbmVjZXNzYXJ5IHRvIGJ1aWxkIEJTRCBzb3VyY2UKKyAgICAgICAgIyBpbiBvdXIgd29ybGQuIFRoZSAqLWNvbXBhdC5oIGZpbGVzIGFyZSBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkCisgICAgICAgICMgdXNpbmcgLWluY2x1ZGUsIGJ1dCB3ZSBhbHNvIHByb3ZpZGUgZXF1aXZhbGVudHMgZm9yIG1pc3NpbmcKKyAgICAgICAgIyBoZWFkZXIvc291cmNlIGZpbGVzIG5lZWRlZCBieSB0aGUgQlNEIGltcGxlbWVudGF0aW9uLgorCisgIGJpb25pYy8KKyAgICAjIFRoaXMgaXMgdGhlIGJpZ2dlc3QgbWVzcy4gVGhlIEMrKyBmaWxlcyBhcmUgZmlsZXMgd2Ugb3duLCB0eXBpY2FsbHkKKyAgICAjIGJlY2F1c2UgdGhlIExpbnV4IGtlcm5lbCBpbnRlcmZhY2UgaXMgc3VmZmljaWVudGx5IGRpZmZlcmVudCB0aGF0IHdlCisgICAgIyBjYW4ndCB1c2UgYW55IG9mIHRoZSBCU0QgaW1wbGVtZW50YXRpb25zLiBUaGUgQyBmaWxlcyBhcmUgdXN1YWxseQorICAgICMgbGVnYWN5IG1lc3MgdGhhdCBuZWVkcyB0byBiZSBzb3J0ZWQgb3V0LCBlaXRoZXIgYnkgcmVwbGFjaW5nIGl0IHdpdGgKKyAgICAjIGN1cnJlbnQgdXBzdHJlYW0gc291cmNlIGluIG9uZSBvZiB0aGUgdXBzdHJlYW0gZGlyZWN0b3JpZXMgb3IgYnkKKyAgICAjIHN3aXRjaGluZyB0aGUgZmlsZSB0byBDKysgYW5kIGNsZWFuaW5nIGl0IHVwLgorCisgIHN0ZGlvLworICAgICMgVGhlc2UgYXJlIGxlZ2FjeSBmaWxlcyBvZiBkdWJpb3VzIHByb3ZlbmFuY2UuIFdlJ3JlIHdvcmtpbmcgdG8gY2xlYW4KKyAgICAjIHRoaXMgbWVzcyB1cCwgYW5kIHRoaXMgZGlyZWN0b3J5IHNob3VsZCBkaXNhcHBlYXIuCisKKyAgdG9vbHMvCisgICAgIyBWYXJpb3VzIHRvb2xzIHVzZWQgdG8gbWFpbnRhaW4gYmlvbmljLgorCisgIHR6Y29kZS8KKyAgICAjIEEgbW9kaWZpZWQgc3VwZXJzZXQgb2YgdGhlIElBTkEgdHpjb2RlLiBNb3N0IG9mIHRoZSBtb2RpZmljYXRpb25zIHJlbGF0ZQorICAgICMgdG8gQW5kcm9pZCdzIHVzZSBvZiBhIHNpbmdsZSBmaWxlICh3aXRoIGNvcnJlc3BvbmRpbmcgaW5kZXgpIHRvIGNvbnRhaW4KKyAgICAjIHRpbWUgem9uZSBkYXRhLgorICB6b25laW5mby8KKyAgICAjIEFuZHJvaWQtZm9ybWF0IHRpbWUgem9uZSBkYXRhLgorICAgICMgU2VlICdVcGRhdGluZyB0emRhdGEnIGxhdGVyLgorCisKK0FkZGluZyBzeXN0ZW0gY2FsbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkaW5nIGEgc3lzdGVtIGNhbGwgdXN1YWxseSBpbnZvbHZlczoKKworICAxLiBBZGQgZW50cmllcyB0byBTWVNDQUxMUy5UWFQuCisgICAgIFNlZSBTWVNDQUxMUy5UWFQgaXRzZWxmIGZvciBkb2N1bWVudGF0aW9uIG9uIHRoZSBmb3JtYXQuCisgIDIuIFJ1biB0aGUgZ2Vuc3lzY2FsbHMucHkgc2NyaXB0LgorICAzLiBBZGQgY29uc3RhbnRzIChhbmQgcGVyaGFwcyB0eXBlcykgdG8gdGhlIGFwcHJvcHJpYXRlIGhlYWRlciBmaWxlLgorICAgICBOb3RlIHRoYXQgeW91IHNob3VsZCBjaGVjayB0byBzZWUgd2hldGhlciB0aGUgY29uc3RhbnRzIGFyZSBhbHJlYWR5IGluCisgICAgIGtlcm5lbCB1YXBpIGhlYWRlciBmaWxlcywgaW4gd2hpY2ggY2FzZSB5b3UganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgIHRoZSBhcHByb3ByaWF0ZSBQT1NJWCBoZWFkZXIgZmlsZSBpbiBsaWJjL2luY2x1ZGUvIGluY2x1ZGVzIHRoZQorICAgICByZWxldmFudCBmaWxlIG9yIGZpbGVzLgorICA0LiBBZGQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRvIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXIgZmlsZS4KKyAgNS4gQWRkIGF0IGxlYXN0IGJhc2ljIHRlc3RzLiBFdmVuIGEgdGVzdCB0aGF0IGRlbGliZXJhdGVseSBzdXBwbGllcworICAgICBhbiBpbnZhbGlkIGFyZ3VtZW50IGhlbHBzIGNoZWNrIHRoYXQgd2UncmUgZ2VuZXJhdGluZyB0aGUgcmlnaHQgc3ltYm9sCisgICAgIGFuZCBoYXZlIHRoZSByaWdodCBkZWNsYXJhdGlvbiBpbiB0aGUgaGVhZGVyIGZpbGUuIChBbmQgc3RyYWNlKDEpIGNhbgorICAgICBjb25maXJtIHRoYXQgdGhlIGNvcnJlY3Qgc3lzdGVtIGNhbGwgaXMgYmVpbmcgbWFkZS4pCisKKworVXBkYXRpbmcga2VybmVsIGhlYWRlciBmaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyBtZW50aW9uZWQgYWJvdmUsIHRoaXMgaXMgY3VycmVudGx5IGEgdHdvLXN0ZXAgcHJvY2VzczoKKworICAxLiBVc2UgZ2VuZXJhdGVfdWFwaV9oZWFkZXJzLnNoIHRvIGdvIGZyb20gYSBMaW51eCBzb3VyY2UgdHJlZSB0byBhcHByb3ByaWF0ZQorICAgICBjb250ZW50cyBmb3IgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvLgorICAyLiBSdW4gdXBkYXRlX2FsbC5weSB0byBzY3J1YiB0aG9zZSBoZWFkZXJzIGFuZCBpbXBvcnQgdGhlbSBpbnRvIGJpb25pYy4KKworCitVcGRhdGluZyB0emRhdGEKKy0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIGZ1bGx5IGF1dG9tYXRlZDoKKworICAxLiBSdW4gdXBkYXRlLXR6ZGF0YS5weS4KKwpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy9BbmRyb2lkLm1rIGIvYmVuY2htYXJrcy9BbmRyb2lkLm1rCmluZGV4IGY2NGMxMDguLjRkN2FkOTYgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3MvQW5kcm9pZC5taworKysgYi9iZW5jaG1hcmtzL0FuZHJvaWQubWsKQEAgLTI0LDcgKzI0LDcgQEAKIAogYmVuY2htYXJrX2NfZmxhZ3MgPSBcCiAgICAgLU8yIFwKLSAgICAtV2FsbCAtV2V4dHJhIFwKKyAgICAtV2FsbCAtV2V4dHJhIC1XdW51c2VkIFwKICAgICAtV2Vycm9yIFwKICAgICAtZm5vLWJ1aWx0aW4gXAogICAgIC1zdGQ9Z251KysxMSBcCkBAIC0zMywxMyArMzMsMjAgQEAKICAgICBiZW5jaG1hcmtfbWFpbi5jcHAgXAogICAgIG1hdGhfYmVuY2htYXJrLmNwcCBcCiAgICAgcHJvcGVydHlfYmVuY2htYXJrLmNwcCBcCisgICAgcHRocmVhZF9iZW5jaG1hcmsuY3BwIFwKKyAgICBzZW1hcGhvcmVfYmVuY2htYXJrLmNwcCBcCisgICAgc3RkaW9fYmVuY2htYXJrLmNwcCBcCiAgICAgc3RyaW5nX2JlbmNobWFyay5jcHAgXAogICAgIHRpbWVfYmVuY2htYXJrLmNwcCBcCisgICAgdW5pc3RkX2JlbmNobWFyay5jcHAgXAogCiAjIEJ1aWxkIGJlbmNobWFya3MgZm9yIHRoZSBkZXZpY2UgKHdpdGggYmlvbmljJ3MgLnNvKS4gUnVuIHdpdGg6CiAjICAgYWRiIHNoZWxsIGJpb25pYy1iZW5jaG1hcmtzCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIExPQ0FMX01PRFVMRSA6PSBiaW9uaWMtYmVuY2htYXJrcworTE9DQUxfTU9EVUxFX1NURU1fMzIgOj0gYmlvbmljLWJlbmNobWFya3MzMgorTE9DQUxfTU9EVUxFX1NURU1fNjQgOj0gYmlvbmljLWJlbmNobWFya3M2NAorTE9DQUxfTVVMVElMSUIgOj0gYm90aAogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCiBMT0NBTF9DRkxBR1MgKz0gJChiZW5jaG1hcmtfY19mbGFncykKIExPQ0FMX0NfSU5DTFVERVMgKz0gZXh0ZXJuYWwvc3RscG9ydC9zdGxwb3J0IGJpb25pYy8gYmlvbmljL2xpYnN0ZGMrKy9pbmNsdWRlCkBAIC00Nyw0ICs1NCwyNyBAQAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQoYmVuY2htYXJrX3NyY19maWxlcykKIGluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQogCitpZmVxICgkKEhPU1RfT1MpLSQoSE9TVF9BUkNIKSwkKGZpbHRlciAkKEhPU1RfT1MpLSQoSE9TVF9BUkNIKSxsaW51eC14ODYgbGludXgteDg2XzY0KSkKK2lmZXEgKCQoVEFSR0VUX0FSQ0gpLHg4NikKK0xJTktFUiA9IGxpbmtlcgorTkFUSVZFX1NVRkZJWD0zMgorZWxzZQorTElOS0VSID0gbGlua2VyNjQKK05BVElWRV9TVUZGSVg9NjQKK2VuZGlmCisKK2Jpb25pYy1iZW5jaG1hcmtzLXJ1bi1vbi1ob3N0OiBiaW9uaWMtYmVuY2htYXJrcyAkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpLyQoTElOS0VSKSAkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpL3NoCisJaWYgWyAhIC1kIC9zeXN0ZW0gLW8gISAtZCAvc3lzdGVtL2JpbiBdOyB0aGVuIFwKKwkgIGVjaG8gIkF0dGVtcHRpbmcgdG8gY3JlYXRlIC9zeXN0ZW0vYmluIjsgXAorCSAgc3VkbyBta2RpciAtcCAtbSAwNzc3IC9zeXN0ZW0vYmluOyBcCisJZmkKKwlta2RpciAtcCAkKFRBUkdFVF9PVVRfREFUQSkvbG9jYWwvdG1wCisJY3AgJChUQVJHRVRfT1VUX0VYRUNVVEFCTEVTKS8kKExJTktFUikgL3N5c3RlbS9iaW4KKwljcCAkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpL3NoIC9zeXN0ZW0vYmluCisJQU5EUk9JRF9EQVRBPSQoVEFSR0VUX09VVF9EQVRBKSBcCisJQU5EUk9JRF9ST09UPSQoVEFSR0VUX09VVCkgXAorCUxEX0xJQlJBUllfUEFUSD0kKFRBUkdFVF9PVVRfU0hBUkVEX0xJQlJBUklFUykgXAorCQkkKFRBUkdFVF9PVVRfRVhFQ1VUQUJMRVMpL2Jpb25pYy1iZW5jaG1hcmtzJChOQVRJVkVfU1VGRklYKSAkKEJJT05JQ19CRU5DSE1BUktTX0ZMQUdTKQorZW5kaWYgIyBsaW51eC14ODYKKwogZW5kaWYgIyAhQlVJTERfVElOWV9BTkRST0lECmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL2JlbmNobWFya19tYWluLmNwcCBiL2JlbmNobWFya3MvYmVuY2htYXJrX21haW4uY3BwCmluZGV4IGQ4YjhlNTguLmQ2MDY3MGIgMTAwNjQ0Ci0tLSBhL2JlbmNobWFya3MvYmVuY2htYXJrX21haW4uY3BwCisrKyBiL2JlbmNobWFya3MvYmVuY2htYXJrX21haW4uY3BwCkBAIC0yNSwxMyArMjUsMTQgQEAKIAogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAKLXN0YXRpYyBpbnQ2NF90IGdCeXRlc1Byb2Nlc3NlZDsKLXN0YXRpYyBpbnQ2NF90IGdCZW5jaG1hcmtUb3RhbFRpbWVOczsKLXN0YXRpYyBpbnQ2NF90IGdCZW5jaG1hcmtTdGFydFRpbWVOczsKK3N0YXRpYyBpbnQ2NF90IGdfYnl0ZXNfcHJvY2Vzc2VkOworc3RhdGljIGludDY0X3QgZ19iZW5jaG1hcmtfdG90YWxfdGltZV9uczsKK3N0YXRpYyBpbnQ2NF90IGdfYmVuY2htYXJrX3N0YXJ0X3RpbWVfbnM7CiAKIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIDo6dGVzdGluZzo6QmVuY2htYXJrKj4gQmVuY2htYXJrTWFwOwogdHlwZWRlZiBCZW5jaG1hcmtNYXA6Oml0ZXJhdG9yIEJlbmNobWFya01hcEl0Owotc3RhdGljIEJlbmNobWFya01hcCBnQmVuY2htYXJrczsKK3N0YXRpYyBCZW5jaG1hcmtNYXAgZ19iZW5jaG1hcmtzOworc3RhdGljIGludCBnX25hbWVfY29sdW1uX3dpZHRoID0gMjA7CiAKIHN0YXRpYyBpbnQgUm91bmQoaW50IG4pIHsKICAgaW50IGJhc2UgPSAxOwpAQCAtOTYsNyArOTcsNyBAQAogICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgfQogCi0gIGdCZW5jaG1hcmtzLmluc2VydChzdGQ6Om1ha2VfcGFpcihuYW1lLCB0aGlzKSk7CisgIGdfYmVuY2htYXJrcy5pbnNlcnQoc3RkOjptYWtlX3BhaXIobmFtZSwgdGhpcykpOwogfQogCiB2b2lkIEJlbmNobWFyazo6UnVuKCkgewpAQCAtMTE0LDE2ICsxMTUsMTYgQEAKIH0KIAogdm9pZCBCZW5jaG1hcms6OlJ1blJlcGVhdGVkbHlXaXRoQXJnKGludCBpdGVyYXRpb25zLCBpbnQgYXJnKSB7Ci0gIGdCeXRlc1Byb2Nlc3NlZCA9IDA7Ci0gIGdCZW5jaG1hcmtUb3RhbFRpbWVOcyA9IDA7Ci0gIGdCZW5jaG1hcmtTdGFydFRpbWVOcyA9IE5hbm9UaW1lKCk7CisgIGdfYnl0ZXNfcHJvY2Vzc2VkID0gMDsKKyAgZ19iZW5jaG1hcmtfdG90YWxfdGltZV9ucyA9IDA7CisgIGdfYmVuY2htYXJrX3N0YXJ0X3RpbWVfbnMgPSBOYW5vVGltZSgpOwogICBpZiAoZm5fICE9IE5VTEwpIHsKICAgICBmbl8oaXRlcmF0aW9ucyk7CiAgIH0gZWxzZSB7CiAgICAgZm5fcmFuZ2VfKGl0ZXJhdGlvbnMsIGFyZyk7CiAgIH0KLSAgaWYgKGdCZW5jaG1hcmtTdGFydFRpbWVOcyAhPSAwKSB7Ci0gICAgZ0JlbmNobWFya1RvdGFsVGltZU5zICs9IE5hbm9UaW1lKCkgLSBnQmVuY2htYXJrU3RhcnRUaW1lTnM7CisgIGlmIChnX2JlbmNobWFya19zdGFydF90aW1lX25zICE9IDApIHsKKyAgICBnX2JlbmNobWFya190b3RhbF90aW1lX25zICs9IE5hbm9UaW1lKCkgLSBnX2JlbmNobWFya19zdGFydF90aW1lX25zOwogICB9CiB9CiAKQEAgLTEzMSwxMiArMTMyLDEyIEBACiAgIC8vIHJ1biBvbmNlIGluIGNhc2UgaXQncyBleHBlbnNpdmUKICAgaW50IGl0ZXJhdGlvbnMgPSAxOwogICBSdW5SZXBlYXRlZGx5V2l0aEFyZyhpdGVyYXRpb25zLCBhcmcpOwotICB3aGlsZSAoZ0JlbmNobWFya1RvdGFsVGltZU5zIDwgMWU5ICYmIGl0ZXJhdGlvbnMgPCAxZTkpIHsKKyAgd2hpbGUgKGdfYmVuY2htYXJrX3RvdGFsX3RpbWVfbnMgPCAxZTkgJiYgaXRlcmF0aW9ucyA8IDFlOSkgewogICAgIGludCBsYXN0ID0gaXRlcmF0aW9uczsKLSAgICBpZiAoZ0JlbmNobWFya1RvdGFsVGltZU5zL2l0ZXJhdGlvbnMgPT0gMCkgeworICAgIGlmIChnX2JlbmNobWFya190b3RhbF90aW1lX25zL2l0ZXJhdGlvbnMgPT0gMCkgewogICAgICAgaXRlcmF0aW9ucyA9IDFlOTsKICAgICB9IGVsc2UgewotICAgICAgaXRlcmF0aW9ucyA9IDFlOSAvIChnQmVuY2htYXJrVG90YWxUaW1lTnMvaXRlcmF0aW9ucyk7CisgICAgICBpdGVyYXRpb25zID0gMWU5IC8gKGdfYmVuY2htYXJrX3RvdGFsX3RpbWVfbnMvaXRlcmF0aW9ucyk7CiAgICAgfQogICAgIGl0ZXJhdGlvbnMgPSBzdGQ6Om1heChsYXN0ICsgMSwgc3RkOjptaW4oaXRlcmF0aW9ucyArIGl0ZXJhdGlvbnMvMiwgMTAwKmxhc3QpKTsKICAgICBpdGVyYXRpb25zID0gUm91bmQoaXRlcmF0aW9ucyk7CkBAIC0xNDUsOSArMTQ2LDkgQEAKIAogICBjaGFyIHRocm91Z2hwdXRbMTAwXTsKICAgdGhyb3VnaHB1dFswXSA9ICdcMCc7Ci0gIGlmIChnQmVuY2htYXJrVG90YWxUaW1lTnMgPiAwICYmIGdCeXRlc1Byb2Nlc3NlZCA+IDApIHsKLSAgICBkb3VibGUgbWliX3Byb2Nlc3NlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oZ0J5dGVzUHJvY2Vzc2VkKS8xZTY7Ci0gICAgZG91YmxlIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGdCZW5jaG1hcmtUb3RhbFRpbWVOcykvMWU5OworICBpZiAoZ19iZW5jaG1hcmtfdG90YWxfdGltZV9ucyA+IDAgJiYgZ19ieXRlc19wcm9jZXNzZWQgPiAwKSB7CisgICAgZG91YmxlIG1pYl9wcm9jZXNzZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGdfYnl0ZXNfcHJvY2Vzc2VkKS8xZTY7CisgICAgZG91YmxlIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGdfYmVuY2htYXJrX3RvdGFsX3RpbWVfbnMpLzFlOTsKICAgICBzbnByaW50Zih0aHJvdWdocHV0LCBzaXplb2YodGhyb3VnaHB1dCksICIgJTguMmYgTWlCL3MiLCBtaWJfcHJvY2Vzc2VkL3NlY29uZHMpOwogICB9CiAKQEAgLTE2NCw0MiArMTY1LDQ3IEBACiAgICAgc25wcmludGYoZnVsbF9uYW1lLCBzaXplb2YoZnVsbF9uYW1lKSwgIiVzIiwgbmFtZV8pOwogICB9CiAKLSAgcHJpbnRmKCIlLTIwcyAlMTBkICUxMCIgUFJJZDY0ICIlc1xuIiwgZnVsbF9uYW1lLAotICAgICAgICAgaXRlcmF0aW9ucywgZ0JlbmNobWFya1RvdGFsVGltZU5zL2l0ZXJhdGlvbnMsIHRocm91Z2hwdXQpOworICBwcmludGYoIiUtKnMgJTEwZCAlMTAiIFBSSWQ2NCAiJXNcbiIsIGdfbmFtZV9jb2x1bW5fd2lkdGgsIGZ1bGxfbmFtZSwKKyAgICAgICAgIGl0ZXJhdGlvbnMsIGdfYmVuY2htYXJrX3RvdGFsX3RpbWVfbnMvaXRlcmF0aW9ucywgdGhyb3VnaHB1dCk7CiAgIGZmbHVzaChzdGRvdXQpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgdGVzdGluZwogCiB2b2lkIFNldEJlbmNobWFya0J5dGVzUHJvY2Vzc2VkKGludDY0X3QgeCkgewotICBnQnl0ZXNQcm9jZXNzZWQgPSB4OworICBnX2J5dGVzX3Byb2Nlc3NlZCA9IHg7CiB9CiAKIHZvaWQgU3RvcEJlbmNobWFya1RpbWluZygpIHsKLSAgaWYgKGdCZW5jaG1hcmtTdGFydFRpbWVOcyAhPSAwKSB7Ci0gICAgZ0JlbmNobWFya1RvdGFsVGltZU5zICs9IE5hbm9UaW1lKCkgLSBnQmVuY2htYXJrU3RhcnRUaW1lTnM7CisgIGlmIChnX2JlbmNobWFya19zdGFydF90aW1lX25zICE9IDApIHsKKyAgICBnX2JlbmNobWFya190b3RhbF90aW1lX25zICs9IE5hbm9UaW1lKCkgLSBnX2JlbmNobWFya19zdGFydF90aW1lX25zOwogICB9Ci0gIGdCZW5jaG1hcmtTdGFydFRpbWVOcyA9IDA7CisgIGdfYmVuY2htYXJrX3N0YXJ0X3RpbWVfbnMgPSAwOwogfQogCiB2b2lkIFN0YXJ0QmVuY2htYXJrVGltaW5nKCkgewotICBpZiAoZ0JlbmNobWFya1N0YXJ0VGltZU5zID09IDApIHsKLSAgICBnQmVuY2htYXJrU3RhcnRUaW1lTnMgPSBOYW5vVGltZSgpOworICBpZiAoZ19iZW5jaG1hcmtfc3RhcnRfdGltZV9ucyA9PSAwKSB7CisgICAgZ19iZW5jaG1hcmtfc3RhcnRfdGltZV9ucyA9IE5hbm9UaW1lKCk7CiAgIH0KIH0KIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgewotICBpZiAoZ0JlbmNobWFya3MuZW1wdHkoKSkgeworICBpZiAoZ19iZW5jaG1hcmtzLmVtcHR5KCkpIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIGJlbmNobWFya3MgcmVnaXN0ZXJlZCFcbiIpOwogICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgfQogCisgIGZvciAoQmVuY2htYXJrTWFwSXQgaXQgPSBnX2JlbmNobWFya3MuYmVnaW4oKTsgaXQgIT0gZ19iZW5jaG1hcmtzLmVuZCgpOyArK2l0KSB7CisgICAgaW50IG5hbWVfd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihpdC0+c2Vjb25kLT5OYW1lKCkpKTsKKyAgICBnX25hbWVfY29sdW1uX3dpZHRoID0gc3RkOjptYXgoZ19uYW1lX2NvbHVtbl93aWR0aCwgbmFtZV93aWR0aCk7CisgIH0KKwogICBib29sIG5lZWRfaGVhZGVyID0gdHJ1ZTsKLSAgZm9yIChCZW5jaG1hcmtNYXBJdCBpdCA9IGdCZW5jaG1hcmtzLmJlZ2luKCk7IGl0ICE9IGdCZW5jaG1hcmtzLmVuZCgpOyArK2l0KSB7CisgIGZvciAoQmVuY2htYXJrTWFwSXQgaXQgPSBnX2JlbmNobWFya3MuYmVnaW4oKTsgaXQgIT0gZ19iZW5jaG1hcmtzLmVuZCgpOyArK2l0KSB7CiAgICAgOjp0ZXN0aW5nOjpCZW5jaG1hcmsqIGIgPSBpdC0+c2Vjb25kOwogICAgIGlmIChiLT5TaG91bGRSdW4oYXJnYywgYXJndikpIHsKICAgICAgIGlmIChuZWVkX2hlYWRlcikgewotICAgICAgICBwcmludGYoIiUtMjBzICUxMHMgJTEwc1xuIiwgIiIsICJpdGVyYXRpb25zIiwgIm5zL29wIik7CisgICAgICAgIHByaW50ZigiJS0qcyAlMTBzICUxMHNcbiIsIGdfbmFtZV9jb2x1bW5fd2lkdGgsICIiLCAiaXRlcmF0aW9ucyIsICJucy9vcCIpOwogICAgICAgICBmZmx1c2goc3Rkb3V0KTsKICAgICAgICAgbmVlZF9oZWFkZXIgPSBmYWxzZTsKICAgICAgIH0KQEAgLTIxMCw3ICsyMTYsNyBAQAogICBpZiAobmVlZF9oZWFkZXIpIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIG1hdGNoaW5nIGJlbmNobWFya3MhXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIkF2YWlsYWJsZSBiZW5jaG1hcmtzOlxuIik7Ci0gICAgZm9yIChCZW5jaG1hcmtNYXBJdCBpdCA9IGdCZW5jaG1hcmtzLmJlZ2luKCk7IGl0ICE9IGdCZW5jaG1hcmtzLmVuZCgpOyArK2l0KSB7CisgICAgZm9yIChCZW5jaG1hcmtNYXBJdCBpdCA9IGdfYmVuY2htYXJrcy5iZWdpbigpOyBpdCAhPSBnX2JlbmNobWFya3MuZW5kKCk7ICsraXQpIHsKICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAlc1xuIiwgaXQtPnNlY29uZC0+TmFtZSgpKTsKICAgICB9CiAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy9tYXRoX2JlbmNobWFyay5jcHAgYi9iZW5jaG1hcmtzL21hdGhfYmVuY2htYXJrLmNwcAppbmRleCBhOGMxY2ZhLi5hOTc0OGNkIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL21hdGhfYmVuY2htYXJrLmNwcAorKysgYi9iZW5jaG1hcmtzL21hdGhfYmVuY2htYXJrLmNwcApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAiYmVuY2htYXJrLmgiCiAKKyNpbmNsdWRlIDxmZW52Lmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogCiAvLyBBdm9pZCBvcHRpbWl6YXRpb24uCkBAIC02MCwzICs2MSwxNTEgQEAKICAgU3RvcEJlbmNobWFya1RpbWluZygpOwogfQogQkVOQ0hNQVJLKEJNX21hdGhfbG9nYik7CisKK3N0YXRpYyB2b2lkIEJNX21hdGhfaXNpbmZfTk9STUFMKGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGQgPSAwLjA7CisgIHYgPSAxMjM0LjA7IC8vIEZQX05PUk1BTAorICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBkICs9IChpc2luZikodik7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9pc2luZl9OT1JNQUwpOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX2lzaW5mX05BTihpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMC4wOworICB2ID0gbmFuKCIiKTsgLy8gRlBfTkFOCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGQgKz0gKGlzaW5mKSh2KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9tYXRoX2lzaW5mX05BTik7CisKK3N0YXRpYyB2b2lkIEJNX21hdGhfaXNpbmZfSU5GSU5JVEUoaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZCA9IDAuMDsKKyAgdiA9IEhVR0VfVkFMOyAvLyBGUF9JTkZJTklURQorICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBkICs9IChpc2luZikodik7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9pc2luZl9JTkZJTklURSk7CisKK3N0YXRpYyB2b2lkIEJNX21hdGhfaXNpbmZfWkVSTyhpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMC4wOworICB2ID0gMC4wOyAvLyBGUF9aRVJPCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGQgKz0gKGlzaW5mKSh2KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9tYXRoX2lzaW5mX1pFUk8pOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX3Npbl9mYXN0KGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGQgPSAxLjA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGQgKz0gc2luKGQpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworfQorQkVOQ0hNQVJLKEJNX21hdGhfc2luX2Zhc3QpOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX3Npbl9mZXVwZGF0ZWVudihpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMS4wOworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBmZW52X3QgX19saWJjX3NhdmVfcm07CisgICAgZmVob2xkZXhjZXB0KCZfX2xpYmNfc2F2ZV9ybSk7CisgICAgZmVzZXRyb3VuZChGRV9UT05FQVJFU1QpOworICAgIGQgKz0gc2luKGQpOworICAgIGZldXBkYXRlZW52KCZfX2xpYmNfc2F2ZV9ybSk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9zaW5fZmV1cGRhdGVlbnYpOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX3Npbl9mZXNldGVudihpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMS4wOworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBmZW52X3QgX19saWJjX3NhdmVfcm07CisgICAgZmVob2xkZXhjZXB0KCZfX2xpYmNfc2F2ZV9ybSk7CisgICAgZmVzZXRyb3VuZChGRV9UT05FQVJFU1QpOworICAgIGQgKz0gc2luKGQpOworICAgIGZlc2V0ZW52KCZfX2xpYmNfc2F2ZV9ybSk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9zaW5fZmVzZXRlbnYpOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX2ZwY2xhc3NpZnlfTk9STUFMKGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGQgPSAwLjA7CisgIHYgPSAxMjM0LjA7IC8vIEZQX05PUk1BTAorICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBkICs9IGZwY2xhc3NpZnkodik7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9mcGNsYXNzaWZ5X05PUk1BTCk7CisKK3N0YXRpYyB2b2lkIEJNX21hdGhfZnBjbGFzc2lmeV9OQU4oaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZCA9IDAuMDsKKyAgdiA9IG5hbigiIik7IC8vIEZQX05BTgorICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBkICs9IGZwY2xhc3NpZnkodik7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9mcGNsYXNzaWZ5X05BTik7CisKK3N0YXRpYyB2b2lkIEJNX21hdGhfZnBjbGFzc2lmeV9JTkZJTklURShpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMC4wOworICB2ID0gSFVHRV9WQUw7IC8vIEZQX0lORklOSVRFCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGQgKz0gZnBjbGFzc2lmeSh2KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9tYXRoX2ZwY2xhc3NpZnlfSU5GSU5JVEUpOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX2ZwY2xhc3NpZnlfWkVSTyhpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMC4wOworICB2ID0gMC4wOyAvLyBGUF9aRVJPCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGQgKz0gZnBjbGFzc2lmeSh2KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9tYXRoX2ZwY2xhc3NpZnlfWkVSTyk7CmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3Byb3BlcnR5X2JlbmNobWFyay5jcHAgYi9iZW5jaG1hcmtzL3Byb3BlcnR5X2JlbmNobWFyay5jcHAKaW5kZXggNDMxMWExZC4uMDgwMmI0YyAxMDA2NDQKLS0tIGEvYmVuY2htYXJrcy9wcm9wZXJ0eV9iZW5jaG1hcmsuY3BwCisrKyBiL2JlbmNobWFya3MvcHJvcGVydHlfYmVuY2htYXJrLmNwcApAQCAtMTUsNiArMTUsOSBAQAogICovCiAKICNpbmNsdWRlICJiZW5jaG1hcmsuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNkZWZpbmUgX1JFQUxMWV9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSF8KQEAgLTI1LDE3ICsyOCwyNiBAQAogCiBleHRlcm4gdm9pZCAqX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOwogCisvLyBEbyBub3QgZXhjZWVkIDUxMiwgdGhhdCBpcyBhYm91dCB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgcHJvcGVydGllcworLy8gdGhhdCBjYW4gYmUgY3JlYXRlZCB3aXRoIHRoZSBjdXJyZW50IHByb3BlcnR5IGFyZWEgc2l6ZS4KICNkZWZpbmUgVEVTVF9OVU1fUFJPUFMgXAotICAgIEFyZygxKS0+QXJnKDQpLT5BcmcoMTYpLT5BcmcoNjQpLT5BcmcoMTI4KS0+QXJnKDI1NiktPkFyZyg1MTIpLT5BcmcoMTAyNCkKKyAgICBBcmcoMSktPkFyZyg0KS0+QXJnKDE2KS0+QXJnKDY0KS0+QXJnKDEyOCktPkFyZygyNTYpLT5BcmcoNTEyKQogCiBzdHJ1Y3QgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSB7CiAgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZShpbnQgbnByb3BzKSA6IG5wcm9wcyhucHJvcHMpLCB2YWxpZChmYWxzZSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBwcm9wX25hbWVfY2hhcnNbXSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLi1fIjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgcHJvcF9uYW1lX2NoYXJzW10gPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fLiI7CiAKLSAgICAgICAgY2hhciBkaXJfdGVtcGxhdGVbXSA9ICIvZGF0YS9sb2NhbC90bXAvcHJvcC1YWFhYWFgiOworICAgICAgICBjb25zdCBjaGFyKiBhbmRyb2lkX2RhdGEgPSBnZXRlbnYoIkFORFJPSURfREFUQSIpOworICAgICAgICBpZiAoYW5kcm9pZF9kYXRhID09IE5VTEwpIHsKKyAgICAgICAgICBwcmludGYoIkFORFJPSURfREFUQSBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0XG4iKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2hhciBkaXJfdGVtcGxhdGVbUEFUSF9NQVhdOworICAgICAgICBzbnByaW50ZihkaXJfdGVtcGxhdGUsIHNpemVvZihkaXJfdGVtcGxhdGUpLCAiJXMvbG9jYWwvdG1wL3Byb3AtWFhYWFhYIiwgYW5kcm9pZF9kYXRhKTsKICAgICAgICAgY2hhciAqZGlybmFtZSA9IG1rZHRlbXAoZGlyX3RlbXBsYXRlKTsKICAgICAgICAgaWYgKCFkaXJuYW1lKSB7Ci0gICAgICAgICAgICBwZXJyb3IoIm1ha2luZyB0ZW1wIGZpbGUgZm9yIHRlc3Qgc3RhdGUgZmFpbGVkIChpcyAvZGF0YS9sb2NhbC90bXAgd3JpdGFibGU/KSIpOworICAgICAgICAgICAgcHJpbnRmKCJtYWtpbmcgdGVtcCBmaWxlIGZvciB0ZXN0IHN0YXRlIGZhaWxlZCAoaXMgJXMvbG9jYWwvdG1wIHdyaXRhYmxlPyk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGFuZHJvaWRfZGF0YSwgc3RyZXJyb3IoZXJybm8pKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01NiwxOCArNjgsMzggQEAKICAgICAgICAgc3JhbmRvbShucHJvcHMpOwogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnByb3BzOyBpKyspIHsKLSAgICAgICAgICAgIG5hbWVfbGVuc1tpXSA9IHJhbmRvbSgpICUgUFJPUF9OQU1FX01BWDsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBoYXMgYXQgbGVhc3QgMTAgY2hhcmFjdGVycyB0byBtYWtlCisgICAgICAgICAgICAvLyBpdCB2ZXJ5IHVubGlrZWx5IHRvIGdlbmVyYXRlIHRoZSBzYW1lIHJhbmRvbSBuYW1lLgorICAgICAgICAgICAgbmFtZV9sZW5zW2ldID0gKHJhbmRvbSgpICUgKFBST1BfTkFNRV9NQVggLSAxMCkpICsgMTA7CiAgICAgICAgICAgICBuYW1lc1tpXSA9IG5ldyBjaGFyW1BST1BfTkFNRV9NQVggKyAxXTsKKyAgICAgICAgICAgIHNpemVfdCBwcm9wX25hbWVfbGVuID0gc2l6ZW9mKHByb3BfbmFtZV9jaGFycykgLSAxOwogICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuYW1lX2xlbnNbaV07IGorKykgewotICAgICAgICAgICAgICAgIG5hbWVzW2ldW2pdID0gcHJvcF9uYW1lX2NoYXJzW3JhbmRvbSgpICUgKHNpemVvZihwcm9wX25hbWVfY2hhcnMpIC0gMSldOworICAgICAgICAgICAgICAgIGlmIChqID09IDAgfHwgbmFtZXNbaV1bai0xXSA9PSAnLicgfHwgaiA9PSBuYW1lX2xlbnNbaV0gLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENlcnRhaW4gdmFsdWVzIGFyZSBub3QgYWxsb3dlZDoKKyAgICAgICAgICAgICAgICAgICAgLy8gLSBEb24ndCBzdGFydCBuYW1lIHdpdGggJy4nCisgICAgICAgICAgICAgICAgICAgIC8vIC0gRG9uJ3QgYWxsb3cgJy4nIHRvIGFwcGVhciB0d2ljZSBpbiBhIHJvdworICAgICAgICAgICAgICAgICAgICAvLyAtIERvbid0IGFsbG93IHRoZSBuYW1lIHRvIGVuZCB3aXRoICcuJworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCAnLicgaXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSBzbyB0aGF0IGRlY3JlbWVudGluZyB0aGUgbGVuZ3RoIGJ5IG9uZSByZW1vdmVzCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBmcm9tIHRoZSBwb3NzaWJsZSB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZV9sZW4tLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmFtZXNbaV1bal0gPSBwcm9wX25hbWVfY2hhcnNbcmFuZG9tKCkgJSBwcm9wX25hbWVfbGVuXTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5hbWVzW2ldW25hbWVfbGVuc1tpXV0gPSAwOwotICAgICAgICAgICAgdmFsdWVfbGVuc1tpXSA9IHJhbmRvbSgpICUgUFJPUF9WQUxVRV9NQVg7CisKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmFsdWUgY29udGFpbnMgYXQgbGVhc3QgMSBjaGFyYWN0ZXIuCisgICAgICAgICAgICB2YWx1ZV9sZW5zW2ldID0gKHJhbmRvbSgpICUgKFBST1BfVkFMVUVfTUFYIC0gMSkpICsgMTsKICAgICAgICAgICAgIHZhbHVlc1tpXSA9IG5ldyBjaGFyW1BST1BfVkFMVUVfTUFYXTsKICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdmFsdWVfbGVuc1tpXTsgaisrKSB7CiAgICAgICAgICAgICAgICAgdmFsdWVzW2ldW2pdID0gcHJvcF9uYW1lX2NoYXJzW3JhbmRvbSgpICUgKHNpemVvZihwcm9wX25hbWVfY2hhcnMpIC0gMSldOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgX19zeXN0ZW1fcHJvcGVydHlfYWRkKG5hbWVzW2ldLCBuYW1lX2xlbnNbaV0sIHZhbHVlc1tpXSwgdmFsdWVfbGVuc1tpXSk7CisKKyAgICAgICAgICAgIGlmIChfX3N5c3RlbV9wcm9wZXJ0eV9hZGQobmFtZXNbaV0sIG5hbWVfbGVuc1tpXSwgdmFsdWVzW2ldLCB2YWx1ZV9sZW5zW2ldKSA8IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkZhaWxlZCB0byBhZGQgYSBwcm9wZXJ0eSwgdGVybWluYXRpbmcuLi5cbiIpOworICAgICAgICAgICAgICAgIHByaW50ZigiJXMgPSAlLipzXG4iLCBuYW1lc1tpXSwgdmFsdWVfbGVuc1tpXSwgdmFsdWVzW2ldKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgdmFsaWQgPSB0cnVlOwpAQCAtMTQ2LDMgKzE3OCw1NiBAQAogICAgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKIH0KIEJFTkNITUFSSyhCTV9wcm9wZXJ0eV9maW5kKS0+VEVTVF9OVU1fUFJPUFM7CisKK3N0YXRpYyB2b2lkIEJNX3Byb3BlcnR5X3JlYWQoaW50IGl0ZXJzLCBpbnQgbnByb3BzKQoreworICAgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKworICAgIExvY2FsUHJvcGVydHlUZXN0U3RhdGUgcGEobnByb3BzKTsKKworICAgIGlmICghcGEudmFsaWQpCisgICAgICAgIHJldHVybjsKKworICAgIHNyYW5kb20oaXRlcnMgKiBucHJvcHMpOworICAgIGNvbnN0IHByb3BfaW5mbyoqIHBpbmZvID0gbmV3IGNvbnN0IHByb3BfaW5mbypbaXRlcnNdOworICAgIGNoYXIgcHJvcHZhbHVlW1BST1BfVkFMVUVfTUFYXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgeworICAgICAgICBwaW5mb1tpXSA9IF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQocGEubmFtZXNbcmFuZG9tKCkgJSBucHJvcHNdKTsKKyAgICB9CisKKyAgICBTdGFydEJlbmNobWFya1RpbWluZygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgeworICAgICAgICBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKHBpbmZvW2ldLCAwLCBwcm9wdmFsdWUpOworICAgIH0KKyAgICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisKKyAgICBkZWxldGVbXSBwaW5mbzsKK30KK0JFTkNITUFSSyhCTV9wcm9wZXJ0eV9yZWFkKS0+VEVTVF9OVU1fUFJPUFM7CisKK3N0YXRpYyB2b2lkIEJNX3Byb3BlcnR5X3NlcmlhbChpbnQgaXRlcnMsIGludCBucHJvcHMpCit7CisgICAgU3RvcEJlbmNobWFya1RpbWluZygpOworCisgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSBwYShucHJvcHMpOworCisgICAgaWYgKCFwYS52YWxpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3JhbmRvbShpdGVycyAqIG5wcm9wcyk7CisgICAgY29uc3QgcHJvcF9pbmZvKiogcGluZm8gPSBuZXcgY29uc3QgcHJvcF9pbmZvKltpdGVyc107CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKKyAgICAgICAgcGluZm9baV0gPSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKHBhLm5hbWVzW3JhbmRvbSgpICUgbnByb3BzXSk7CisgICAgfQorCisgICAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKKyAgICAgICAgX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHBpbmZvW2ldKTsKKyAgICB9CisgICAgU3RvcEJlbmNobWFya1RpbWluZygpOworCisgICAgZGVsZXRlW10gcGluZm87Cit9CitCRU5DSE1BUksoQk1fcHJvcGVydHlfc2VyaWFsKS0+VEVTVF9OVU1fUFJPUFM7CmRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL3B0aHJlYWRfYmVuY2htYXJrLmNwcCBiL2JlbmNobWFya3MvcHRocmVhZF9iZW5jaG1hcmsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMTBkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9iZW5jaG1hcmtzL3B0aHJlYWRfYmVuY2htYXJrLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJiZW5jaG1hcmsuaCIKKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworLy8gU3RvcCBHQ0Mgb3B0aW1pemluZyBvdXQgb3VyIHB1cmUgZnVuY3Rpb24uCisvKiBNdXN0IG5vdCBiZSBzdGF0aWMhICovIHB0aHJlYWRfdCAoKnB0aHJlYWRfc2VsZl9mcCkoKSA9IHB0aHJlYWRfc2VsZjsKKworc3RhdGljIHZvaWQgQk1fcHRocmVhZF9zZWxmKGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIHB0aHJlYWRfc2VsZl9mcCgpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworfQorQkVOQ0hNQVJLKEJNX3B0aHJlYWRfc2VsZik7CisKK3N0YXRpYyB2b2lkIEJNX3B0aHJlYWRfZ2V0c3BlY2lmaWMoaW50IGl0ZXJzKSB7CisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgcHRocmVhZF9rZXlfdCBrZXk7CisgIHB0aHJlYWRfa2V5X2NyZWF0ZSgma2V5LCBOVUxMKTsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBwdGhyZWFkX2dldHNwZWNpZmljKGtleSk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpOworfQorQkVOQ0hNQVJLKEJNX3B0aHJlYWRfZ2V0c3BlY2lmaWMpOworCitzdGF0aWMgdm9pZCBEdW1teVB0aHJlYWRPbmNlSW5pdEZ1bmN0aW9uKCkgeworfQorCitzdGF0aWMgdm9pZCBCTV9wdGhyZWFkX29uY2UoaW50IGl0ZXJzKSB7CisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgcHRocmVhZF9vbmNlX3Qgb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworICBwdGhyZWFkX29uY2UoJm9uY2UsIER1bW15UHRocmVhZE9uY2VJbml0RnVuY3Rpb24pOworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIHB0aHJlYWRfb25jZSgmb25jZSwgRHVtbXlQdGhyZWFkT25jZUluaXRGdW5jdGlvbik7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fcHRocmVhZF9vbmNlKTsKKworc3RhdGljIHZvaWQgQk1fcHRocmVhZF9tdXRleF9sb2NrKGludCBpdGVycykgeworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIHB0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtdXRleCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9wdGhyZWFkX211dGV4X2xvY2spOworCitzdGF0aWMgdm9pZCBCTV9wdGhyZWFkX211dGV4X2xvY2tfRVJST1JDSEVDSyhpbnQgaXRlcnMpIHsKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVElBTElaRVI7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtdXRleCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9wdGhyZWFkX211dGV4X2xvY2tfRVJST1JDSEVDSyk7CisKK3N0YXRpYyB2b2lkIEJNX3B0aHJlYWRfbXV0ZXhfbG9ja19SRUNVUlNJVkUoaW50IGl0ZXJzKSB7CisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVI7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtdXRleCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJm11dGV4KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9wdGhyZWFkX211dGV4X2xvY2tfUkVDVVJTSVZFKTsKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvc2VtYXBob3JlX2JlbmNobWFyay5jcHAgYi9iZW5jaG1hcmtzL3NlbWFwaG9yZV9iZW5jaG1hcmsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMWZjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9iZW5jaG1hcmtzL3NlbWFwaG9yZV9iZW5jaG1hcmsuY3BwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiYmVuY2htYXJrLmgiCisKKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKworc3RhdGljIHZvaWQgQk1fc2VtYXBob3JlX3NlbV9nZXR2YWx1ZShpbnQgaXRlcnMpIHsKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBzZW1fdCBzZW1hcGhvcmU7CisgIHNlbV9pbml0KCZzZW1hcGhvcmUsIDEsIDEpOworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGludCBkdW1teTsKKyAgICBzZW1fZ2V0dmFsdWUoJnNlbWFwaG9yZSwgJmR1bW15KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9zZW1hcGhvcmVfc2VtX2dldHZhbHVlKTsKKworc3RhdGljIHZvaWQgQk1fc2VtYXBob3JlX3NlbV93YWl0X3NlbV9wb3N0KGludCBpdGVycykgeworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIHNlbV90IHNlbWFwaG9yZTsKKyAgc2VtX2luaXQoJnNlbWFwaG9yZSwgMSwgMSk7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgc2VtX3dhaXQoJnNlbWFwaG9yZSk7CisgICAgc2VtX3Bvc3QoJnNlbWFwaG9yZSk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fc2VtYXBob3JlX3NlbV93YWl0X3NlbV9wb3N0KTsKZGlmZiAtLWdpdCBhL2JlbmNobWFya3Mvc3RkaW9fYmVuY2htYXJrLmNwcCBiL2JlbmNobWFya3Mvc3RkaW9fYmVuY2htYXJrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODk5ZGY3Ci0tLSAvZGV2L251bGwKKysrIGIvYmVuY2htYXJrcy9zdGRpb19iZW5jaG1hcmsuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiYmVuY2htYXJrLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIEtCIDEwMjQKKyNkZWZpbmUgTUIgMTAyNCpLQgorCisjZGVmaW5lIEFUX0NPTU1PTl9TSVpFUyBcCisgICAgQXJnKDEpLT5BcmcoMiktPkFyZygzKS0+QXJnKDQpLT5BcmcoOCktPkFyZygxNiktPkFyZygzMiktPkFyZyg2NCktPkFyZyg1MTIpLT4gXAorICAgIEFyZygxKktCKS0+QXJnKDQqS0IpLT5BcmcoOCpLQiktPkFyZygxNipLQiktPkFyZyg2NCpLQikKKworc3RhdGljIHZvaWQgQk1fc3RkaW9fZnJlYWQoaW50IGl0ZXJzLCBpbnQgY2h1bmtfc2l6ZSkgeworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIEZJTEUqIGZwID0gZm9wZW4oIi9kZXYvemVybyIsICJydyIpOworICBjaGFyKiBidWYgPSBuZXcgY2hhcltjaHVua19zaXplXTsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBmcmVhZChidWYsIGNodW5rX3NpemUsIDEsIGZwKTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgU2V0QmVuY2htYXJrQnl0ZXNQcm9jZXNzZWQoaW50NjRfdChpdGVycykgKiBpbnQ2NF90KGNodW5rX3NpemUpKTsKKyAgZGVsZXRlW10gYnVmOworICBmY2xvc2UoZnApOworfQorQkVOQ0hNQVJLKEJNX3N0ZGlvX2ZyZWFkKS0+QVRfQ09NTU9OX1NJWkVTOworCisKK3N0YXRpYyB2b2lkIEJNX3N0ZGlvX2Z3cml0ZShpbnQgaXRlcnMsIGludCBjaHVua19zaXplKSB7CisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgRklMRSogZnAgPSBmb3BlbigiL2Rldi96ZXJvIiwgInJ3Iik7CisgIGNoYXIqIGJ1ZiA9IG5ldyBjaGFyW2NodW5rX3NpemVdOworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgICAgZndyaXRlKGJ1ZiwgY2h1bmtfc2l6ZSwgMSwgZnApOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBTZXRCZW5jaG1hcmtCeXRlc1Byb2Nlc3NlZChpbnQ2NF90KGl0ZXJzKSAqIGludDY0X3QoY2h1bmtfc2l6ZSkpOworICBkZWxldGVbXSBidWY7CisgIGZjbG9zZShmcCk7Cit9CitCRU5DSE1BUksoQk1fc3RkaW9fZndyaXRlKS0+QVRfQ09NTU9OX1NJWkVTOwpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy90aW1lX2JlbmNobWFyay5jcHAgYi9iZW5jaG1hcmtzL3RpbWVfYmVuY2htYXJrLmNwcAppbmRleCA3NTEzMmU1Li4yMmY2ZThlIDEwMDY0NAotLS0gYS9iZW5jaG1hcmtzL3RpbWVfYmVuY2htYXJrLmNwcAorKysgYi9iZW5jaG1hcmtzL3RpbWVfYmVuY2htYXJrLmNwcApAQCAtMTYsMjMgKzE2LDY0IEBACiAKICNpbmNsdWRlICJiZW5jaG1hcmsuaCIKIAorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQotCi0vLyBVc2VkIGJ5IHRoZSBob3JyaWJsZSBhbmRyb2lkLnRleHQuZm9ybWF0LlRpbWUgY2xhc3MsIHdoaWNoIGlzIHVzZWQgYnkgQ2FsZW5kYXIuIGh0dHA6Ly9iLzgyNzA4NjUuCi1leHRlcm4gIkMiIHZvaWQgbG9jYWx0aW1lX3R6KGNvbnN0IHRpbWVfdCogY29uc3QgdGltZXAsIHN0cnVjdCB0bSogdG1wLCBjb25zdCBjaGFyKiB0eik7Ci0KLXN0YXRpYyB2b2lkIEJNX3RpbWVfbG9jYWx0aW1lX3R6KGludCBpdGVycykgeworc3RhdGljIHZvaWQgQk1fdGltZV9jbG9ja19nZXR0aW1lKGludCBpdGVycykgewogICBTdGFydEJlbmNobWFya1RpbWluZygpOwogCi0gIHRpbWVfdCBub3codGltZShOVUxMKSk7Ci0gIHRtIGJyb2tlbl9kb3duX3RpbWU7CisgIHRpbWVzcGVjIHQ7CiAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgewotICAgIGxvY2FsdGltZV90eigmbm93LCAmYnJva2VuX2Rvd25fdGltZSwgIkV1cm9wZS9CZXJsaW4iKTsKKyAgICBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnQpOwogICB9CiAKICAgU3RvcEJlbmNobWFya1RpbWluZygpOwogfQotQkVOQ0hNQVJLKEJNX3RpbWVfbG9jYWx0aW1lX3R6KTsKLSNlbmRpZgorQkVOQ0hNQVJLKEJNX3RpbWVfY2xvY2tfZ2V0dGltZSk7CisKK3N0YXRpYyB2b2lkIEJNX3RpbWVfY2xvY2tfZ2V0dGltZV9zeXNjYWxsKGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIHRpbWVzcGVjIHQ7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIHN5c2NhbGwoX19OUl9jbG9ja19nZXR0aW1lLCBDTE9DS19NT05PVE9OSUMsICZ0KTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV90aW1lX2Nsb2NrX2dldHRpbWVfc3lzY2FsbCk7CisKK3N0YXRpYyB2b2lkIEJNX3RpbWVfZ2V0dGltZW9mZGF5KGludCBpdGVycykgeworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIHRpbWV2YWwgdHY7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworfQorQkVOQ0hNQVJLKEJNX3RpbWVfZ2V0dGltZW9mZGF5KTsKKworc3RhdGljIHZvaWQgQk1fdGltZV9nZXR0aW1lb2ZkYXlfc3lzY2FsbChpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICB0aW1ldmFsIHR2OworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBzeXNjYWxsKF9fTlJfZ2V0dGltZW9mZGF5LCAmdHYsIE5VTEwpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworfQorQkVOQ0hNQVJLKEJNX3RpbWVfZ2V0dGltZW9mZGF5X3N5c2NhbGwpOworCitzdGF0aWMgdm9pZCBCTV90aW1lX3RpbWUoaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgdGltZShOVUxMKTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV90aW1lX3RpbWUpOwpkaWZmIC0tZ2l0IGEvYmVuY2htYXJrcy91bmlzdGRfYmVuY2htYXJrLmNwcCBiL2JlbmNobWFya3MvdW5pc3RkX2JlbmNobWFyay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyYWMzMAotLS0gL2Rldi9udWxsCisrKyBiL2JlbmNobWFya3MvdW5pc3RkX2JlbmNobWFyay5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJiZW5jaG1hcmsuaCIKKworI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyB2b2lkIEJNX3VuaXN0ZF9nZXRwaWQoaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgZ2V0cGlkKCk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fdW5pc3RkX2dldHBpZCk7CisKK3N0YXRpYyB2b2lkIEJNX3VuaXN0ZF9nZXRwaWRfc3lzY2FsbChpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBzeXNjYWxsKF9fTlJfZ2V0cGlkKTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV91bmlzdGRfZ2V0cGlkX3N5c2NhbGwpOworCisvLyBTdG9wIEdDQyBvcHRpbWl6aW5nIG91dCBvdXIgcHVyZSBmdW5jdGlvbi4KKy8qIE11c3Qgbm90IGJlIHN0YXRpYyEgKi8gcGlkX3QgKCpnZXR0aWRfZnApKCkgPSBnZXR0aWQ7CisKK3N0YXRpYyB2b2lkIEJNX3VuaXN0ZF9nZXR0aWQoaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgZ2V0dGlkX2ZwKCk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fdW5pc3RkX2dldHRpZCk7CisKK3N0YXRpYyB2b2lkIEJNX3VuaXN0ZF9nZXR0aWRfc3lzY2FsbChpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBzeXNjYWxsKF9fTlJfZ2V0dGlkKTsKKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV91bmlzdGRfZ2V0dGlkX3N5c2NhbGwpOwpkaWZmIC0tZ2l0IGEvbGliYy9BbmRyb2lkLm1rIGIvbGliYy9BbmRyb2lkLm1rCmluZGV4IDVjNjI1ZDEuLjVlYTU3YmUgMTAwNjQ0Ci0tLSBhL2xpYmMvQW5kcm9pZC5taworKysgYi9saWJjL0FuZHJvaWQubWsKQEAgLTEsMTkxICsxLDc4IEBACiBMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCiAKLWluY2x1ZGUgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL3N5c2NhbGxzLm1rCi0KICMgTWFrZSBldmVyeXRoaW5nIGRlcGVuZCBvbiBhbnkgY2hhbmdlcyB0byBpbmNsdWRlZCBtYWtlZmlsZXMuCi1saWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcyA6PSBcCi0gICAgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL3N5c2NhbGxzLm1rIFwKLSAgICAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsgXAorbGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCisKKyMgTG9hZCBjb25maWcgZm9yIFRBUkdFVF9BUkNICitteV8ybmRfYXJjaF9wcmVmaXggOj0KK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpLyQoVEFSR0VUX0FSQ0gpLm1rCitsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcyArPSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpLyQoVEFSR0VUX0FSQ0gpLm1rCisKKworaWZkZWYgVEFSR0VUXzJORF9BUkNICisjIExvYWQgY29uZmlnIGZvciBUQVJHRVRfMk5EX0FSQ0gKK215XzJuZF9hcmNoX3ByZWZpeCA6PSAkKFRBUkdFVF8yTkRfQVJDSF9WQVJfUFJFRklYKQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL2FyY2gtJChUQVJHRVRfMk5EX0FSQ0gpLyQoVEFSR0VUXzJORF9BUkNIKS5taworbXlfMm5kX2FyY2hfcHJlZml4IDo9CitsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcyArPSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUXzJORF9BUkNIKS8kKFRBUkdFVF8yTkRfQVJDSCkubWsKK2VuZGlmCisKKyMgY3J0IG9iaiBmaWxlcworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBjcnRicmFuZC5jIG5lZWRzIDxzdGRpbnQuaD4gYW5kIGEgI2RlZmluZSBmb3IgdGhlIHBsYXRmb3JtIFNESyB2ZXJzaW9uLgorbGliY19jcnRfdGFyZ2V0X2NmbGFncyA6PSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL2luY2x1ZGUgXAorICAgIC1EUExBVEZPUk1fU0RLX1ZFUlNJT049JChQTEFURk9STV9TREtfVkVSU0lPTikgXAorCitteV8ybmRfYXJjaF9wcmVmaXggOj0KK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9jcnQubWsKK2lmZGVmIFRBUkdFVF8yTkRfQVJDSAorbXlfMm5kX2FyY2hfcHJlZml4IDo9ICQoVEFSR0VUXzJORF9BUkNIX1ZBUl9QUkVGSVgpCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvY3J0Lm1rCitteV8ybmRfYXJjaF9wcmVmaXggOj0KK2VuZGlmCiAKICMgRGVmaW5lIHRoZSBjb21tb24gc291cmNlIGZpbGVzIGZvciBhbGwgdGhlIGxpYmMgaW5zdGFuY2VzCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogbGliY19jb21tb25fc3JjX2ZpbGVzIDo9IFwKLQkkKHN5c2NhbGxfc3JjKSBcCi0JdW5pc3RkL2FsYXJtLmMgXAotCXVuaXN0ZC9leGVjLmMgXAotCXVuaXN0ZC9mbm1hdGNoLmMgXAotCXVuaXN0ZC9zeXNsb2cuYyBcCi0JdW5pc3RkL3N5c3RlbS5jIFwKLQl1bmlzdGQvdGltZS5jIFwKLQlzdGRpby9hc3ByaW50Zi5jIFwKLQlzdGRpby9mZmx1c2guYyBcCi0Jc3RkaW8vZmdldGMuYyBcCi0Jc3RkaW8vZmluZGZwLmMgXAotCXN0ZGlvL2ZwcmludGYuYyBcCi0Jc3RkaW8vZnB1dGMuYyBcCi0Jc3RkaW8vZnJlYWQuYyBcCi0Jc3RkaW8vZnJlb3Blbi5jIFwKLQlzdGRpby9mc2NhbmYuYyBcCi0Jc3RkaW8vZnNlZWsuYyBcCi0Jc3RkaW8vZnRlbGwuYyBcCi0Jc3RkaW8vZnZ3cml0ZS5jIFwKLQlzdGRpby9nZXRzLmMgXAotCXN0ZGlvL3ByaW50Zi5jIFwKLQlzdGRpby9yZWZpbGwuYyBcCi0Jc3RkaW8vcmV3aW5kLmMgXAotCXN0ZGlvL3NjYW5mLmMgXAotCXN0ZGlvL3NucHJpbnRmLmNcCi0Jc3RkaW8vc3ByaW50Zi5jIFwKLQlzdGRpby9zc2NhbmYuYyBcCi0Jc3RkaW8vc3RkaW8uYyBcCi0Jc3RkaW8vdW5nZXRjLmMgXAotCXN0ZGlvL3Zhc3ByaW50Zi5jIFwKLQlzdGRpby92ZnByaW50Zi5jIFwKLQlzdGRpby92ZnNjYW5mLmMgXAotCXN0ZGlvL3ZwcmludGYuYyBcCi0Jc3RkaW8vdnNucHJpbnRmLmMgXAotCXN0ZGlvL3ZzcHJpbnRmLmMgXAotCXN0ZGlvL3ZzY2FuZi5jIFwKLQlzdGRpby92c3NjYW5mLmMgXAotCXN0ZGlvL3didWYuYyBcCi0Jc3RkbGliL2F0ZXhpdC5jIFwKLQlzdGRsaWIvY3R5cGVfLmMgXAotCXN0ZGxpYi9nZXRlbnYuYyBcCi0Jc3RkbGliL3B1dGVudi5jIFwKLQlzdGRsaWIvc2V0ZW52LmMgXAotCXN0ZGxpYi9zdHJ0b2QuYyBcCi0Jc3RkbGliL3N0cnRvaW1heC5jIFwKLQlzdGRsaWIvc3RydG9sLmMgXAotCXN0ZGxpYi9zdHJ0b2xsLmMgXAotCXN0ZGxpYi9zdHJ0b3VsLmMgXAotCXN0ZGxpYi9zdHJ0b3VsbC5jIFwKLQlzdGRsaWIvc3RydG91bWF4LmMgXAotCXN0ZGxpYi90b2xvd2VyXy5jIFwKLQlzdGRsaWIvdG91cHBlcl8uYyBcCi0Jc3RyaW5nL3N0cmNhc2VjbXAuYyBcCi0Jc3RyaW5nL3N0cmNzcG4uYyBcCi0Jc3RyaW5nL3N0cmR1cC5jIFwKLQlzdHJpbmcvc3RycGJyay5jIFwKLQlzdHJpbmcvc3Ryc2VwLmMgXAotCXN0cmluZy9zdHJzcG4uYyBcCi0Jc3RyaW5nL3N0cnN0ci5jIFwKLQlzdHJpbmcvc3RydG9rLmMgXAotCXdjaGFyL3djc3dpZHRoLmMgXAotCXdjaGFyL3djc3hmcm0uYyBcCi0JYmlvbmljL2FyYzRyYW5kb20uYyBcCi0JYmlvbmljL2F0b2kuYyBcCi0JYmlvbmljL2F0b2wuYyBcCi0JYmlvbmljL2F0b2xsLmMgXAotCWJpb25pYy9iaW5kcmVzdnBvcnQuYyBcCi0JYmlvbmljL2NsZWFyZW52LmMgXAotCWJpb25pYy9kYWVtb24uYyBcCi0JYmlvbmljL2Vyci5jIFwKLQliaW9uaWMvZXRoZXJfYXRvbi5jIFwKLQliaW9uaWMvZXRoZXJfbnRvYS5jIFwKLQliaW9uaWMvZmRwcmludGYuYyBcCi0JYmlvbmljL2Zsb2NrZmlsZS5jIFwKLQliaW9uaWMvZnRpbWUuYyBcCi0JYmlvbmljL2Z0b2suYyBcCi0JYmlvbmljL2Z0cy5jIFwKLQliaW9uaWMvZ2V0ZHRhYmxlc2l6ZS5jIFwKLQliaW9uaWMvZ2V0aG9zdG5hbWUuYyBcCi0JYmlvbmljL2dldHBncnAuYyBcCi0JYmlvbmljL2dldHByaW9yaXR5LmMgXAotCWJpb25pYy9nZXRwdC5jIFwKLQliaW9uaWMvaWZfaW5kZXh0b25hbWUuYyBcCi0JYmlvbmljL2lmX25hbWV0b2luZGV4LmMgXAotCWJpb25pYy9pbml0Z3JvdXBzLmMgXAotCWJpb25pYy9pb2N0bC5jIFwKLQliaW9uaWMvaXNhdHR5LmMgXAotCWJpb25pYy9pc3NldHVnaWQuYyBcCi0JYmlvbmljL2xkZXhwLmMgXAotCWJpb25pYy9tZDUuYyBcCi0JYmlvbmljL21lbW1lbS5jIFwKLQliaW9uaWMvbWVtc3dhcC5jIFwKLQliaW9uaWMvbmFtZV9tZW0uYyBcCi0JYmlvbmljL3BhdGhjb25mLmMgXAotCWJpb25pYy9wZXJyb3IuYyBcCi0JYmlvbmljL3B0c25hbWUuYyBcCi0JYmlvbmljL3B0c25hbWVfci5jIFwKLQliaW9uaWMvcHV0dXRsaW5lLmMgXAotCWJpb25pYy9yZWJvb3QuYyBcCi0JYmlvbmljL3JlY3YuYyBcCi0JYmlvbmljL3NjaGVkX2NwdWFsbG9jLmMgXAotCWJpb25pYy9zY2hlZF9jcHVjb3VudC5jIFwKLQliaW9uaWMvc2VtYXBob3JlLmMgXAotCWJpb25pYy9zZW5kLmMgXAotCWJpb25pYy9zZXRwZ3JwLmMgXAotCWJpb25pYy9zaWdibG9jay5jIFwKLQliaW9uaWMvc2lnaW50ZXJydXB0LmMgXAotCWJpb25pYy9zaWdsaXN0LmMgXAotCWJpb25pYy9zaWduYW1lLmMgXAotCWJpb25pYy9zaWdzZXRtYXNrLmMgXAotCWJpb25pYy9zdHJuZHVwLmMgXAotCWJpb25pYy9zdHJudG9pbWF4LmMgXAotCWJpb25pYy9zdHJudG91bWF4LmMgXAotCWJpb25pYy9zdHJ0b3RpbWV2YWwuYyBcCi0JYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzLmMgXAotCWJpb25pYy9zeXN0ZW1fcHJvcGVydGllc19jb21wYXQuYyBcCi0JYmlvbmljL3RjZ2V0cGdycC5jIFwKLQliaW9uaWMvdGNzZXRwZ3JwLmMgXAotCWJpb25pYy90aW1lNjQuYyBcCi0JYmlvbmljL3Vtb3VudC5jIFwKLQliaW9uaWMvdW5sb2NrcHQuYyBcCi0JYmlvbmljL3V0bXAuYyBcCi0JYmlvbmljL3djc2NvbGwuYyBcCi0KLQotbGliY19kbnNfc3JjX2ZpbGVzICs9IFwKLSAgICBuZXRic2QvZ2V0aG5hbWFkZHIuYyBcCi0gICAgbmV0YnNkL2luZXQvbnNhcF9hZGRyLmMgXAotICAgIG5ldGJzZC9uYW1lc2VyL25zX25hbWUuYyBcCi0gICAgbmV0YnNkL25hbWVzZXIvbnNfbmV0aW50LmMgXAotICAgIG5ldGJzZC9uYW1lc2VyL25zX3BhcnNlLmMgXAotICAgIG5ldGJzZC9uYW1lc2VyL25zX3ByaW50LmMgXAotICAgIG5ldGJzZC9uYW1lc2VyL25zX3NhbWVkb21haW4uYyBcCi0gICAgbmV0YnNkL25hbWVzZXIvbnNfdHRsLmMgXAotICAgIG5ldGJzZC9uZXQvYmFzZTY0LmMgXAotICAgIG5ldGJzZC9uZXQvZ2V0YWRkcmluZm8uYyBcCi0gICAgbmV0YnNkL25ldC9nZXRuYW1laW5mby5jIFwKLSAgICBuZXRic2QvbmV0L2dldHNlcnZieW5hbWUuYyBcCi0gICAgbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0LmMgXAotICAgIG5ldGJzZC9uZXQvZ2V0c2VydmVudC5jIFwKLSAgICBuZXRic2QvbmV0L25zZGlzcGF0Y2guYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9fX2RuX2NvbXAuYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9oZXJyb3IuYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9yZXNfY2FjaGUuYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9fX3Jlc19jbG9zZS5jIFwKLSAgICBuZXRic2QvcmVzb2x2L3Jlc19jb21wLmMgXAotICAgIG5ldGJzZC9yZXNvbHYvcmVzX2RhdGEuYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9yZXNfZGVidWcuYyBcCi0gICAgbmV0YnNkL3Jlc29sdi9yZXNfaW5pdC5jIFwKLSAgICBuZXRic2QvcmVzb2x2L3Jlc19ta3F1ZXJ5LmMgXAotICAgIG5ldGJzZC9yZXNvbHYvcmVzX3F1ZXJ5LmMgXAotICAgIG5ldGJzZC9yZXNvbHYvX19yZXNfc2VuZC5jIFwKLSAgICBuZXRic2QvcmVzb2x2L3Jlc19zZW5kLmMgXAotICAgIG5ldGJzZC9yZXNvbHYvcmVzX3N0YXRlLmMgXAotCi0KLSMgVGhlc2UgYXJlIHVzZWQgYnkgdGhlIDMyLWJpdCB0YXJnZXRzLCBidXQgbm90IHRoZSA2NC1iaXQgb25lcy4KLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLCQoZmlsdGVyICQoVEFSR0VUX0FSQ0gpLGFybSBtaXBzIHg4NikpCi1saWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAotICAgIGJpb25pYy9sZWdhY3lfMzJfYml0X3N1cHBvcnQuY3BwIFwKLSAgICBiaW9uaWMvbmRrX2NydWZ0LmNwcCBcCi0KLWVuZGlmCisgICAgYmlvbmljL2JpbmRyZXN2cG9ydC5jIFwKKyAgICBiaW9uaWMvZGFlbW9uLmMgXAorICAgIGJpb25pYy9lcnIuYyBcCisgICAgYmlvbmljL2V0aGVyX2F0b24uYyBcCisgICAgYmlvbmljL2V0aGVyX250b2EuYyBcCisgICAgYmlvbmljL2Z0cy5jIFwKKyAgICBiaW9uaWMvZ2V0aG9zdG5hbWUuYyBcCisgICAgYmlvbmljL2dldHByaW9yaXR5LmMgXAorICAgIGJpb25pYy9pZl9pbmRleHRvbmFtZS5jIFwKKyAgICBiaW9uaWMvaWZfbmFtZXRvaW5kZXguYyBcCisgICAgYmlvbmljL2luaXRncm91cHMuYyBcCisgICAgYmlvbmljL2lvY3RsLmMgXAorICAgIGJpb25pYy9pc2F0dHkuYyBcCisgICAgYmlvbmljL21lbW1lbS5jIFwKKyAgICBiaW9uaWMvcGF0aGNvbmYuYyBcCisgICAgYmlvbmljL3B1dHV0bGluZS5jIFwKKyAgICBiaW9uaWMvc2NoZWRfY3B1YWxsb2MuYyBcCisgICAgYmlvbmljL3NjaGVkX2NwdWNvdW50LmMgXAorICAgIGJpb25pYy9zZW1hcGhvcmUuYyBcCisgICAgYmlvbmljL3NpZ2Jsb2NrLmMgXAorICAgIGJpb25pYy9zaWdpbnRlcnJ1cHQuYyBcCisgICAgYmlvbmljL3NpZ3NldG1hc2suYyBcCisgICAgYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzX2NvbXBhdC5jIFwKKyAgICBzdGRpby9zbnByaW50Zi5jXAorICAgIHN0ZGlvL3NwcmludGYuYyBcCiAKICMgRm9ydGlmeSBpbXBsZW1lbnRhdGlvbnMgb2YgbGliYyBmdW5jdGlvbnMuCiBsaWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAogICAgIGJpb25pYy9fX0ZEX2Noay5jcHAgXAogICAgIGJpb25pYy9fX2ZnZXRzX2Noay5jcHAgXAotICAgIGJpb25pYy9fX21lbWNweV9jaGsuY3BwIFwKICAgICBiaW9uaWMvX19tZW1tb3ZlX2Noay5jcHAgXAotICAgIGJpb25pYy9fX21lbXNldF9jaGsuY3BwIFwKICAgICBiaW9uaWMvX19yZWFkX2Noay5jcHAgXAogICAgIGJpb25pYy9fX3JlY3Zmcm9tX2Noay5jcHAgXAotICAgIGJpb25pYy9fX3N0cmNhdF9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19zdHBjcHlfY2hrLmNwcCBcCisgICAgYmlvbmljL19fc3RwbmNweV9jaGsuY3BwIFwKICAgICBiaW9uaWMvX19zdHJjaHJfY2hrLmNwcCBcCi0gICAgYmlvbmljL19fc3RyY3B5X2Noay5jcHAgXAogICAgIGJpb25pYy9fX3N0cmxjYXRfY2hrLmNwcCBcCiAgICAgYmlvbmljL19fc3RybGNweV9jaGsuY3BwIFwKICAgICBiaW9uaWMvX19zdHJsZW5fY2hrLmNwcCBcCkBAIC0xOTgsNDAgKzg1LDY4IEBACiAKIGxpYmNfYmlvbmljX3NyY19maWxlcyA6PSBcCiAgICAgYmlvbmljL2Fib3J0LmNwcCBcCisgICAgYmlvbmljL2FjY2VwdC5jcHAgXAorICAgIGJpb25pYy9hY2NlcHQ0LmNwcCBcCiAgICAgYmlvbmljL2FjY2Vzcy5jcHAgXAogICAgIGJpb25pYy9hc3NlcnQuY3BwIFwKKyAgICBiaW9uaWMvYXRvZi5jcHAgXAogICAgIGJpb25pYy9iaW9uaWNfdGltZV9jb252ZXJzaW9ucy5jcHAgXAogICAgIGJpb25pYy9icmsuY3BwIFwKKyAgICBiaW9uaWMvYzE2cnRvbWIuY3BwIFwKKyAgICBiaW9uaWMvYzMycnRvbWIuY3BwIFwKICAgICBiaW9uaWMvY2htb2QuY3BwIFwKICAgICBiaW9uaWMvY2hvd24uY3BwIFwKKyAgICBiaW9uaWMvY2xlYXJlbnYuY3BwIFwKKyAgICBiaW9uaWMvY2xvY2suY3BwIFwKICAgICBiaW9uaWMvY2xvbmUuY3BwIFwKKyAgICBiaW9uaWMvX19jbXNnX254dGhkci5jcHAgXAorICAgIGJpb25pYy9jb25uZWN0LmNwcCBcCisgICAgYmlvbmljL2N0eXBlLmNwcCBcCiAgICAgYmlvbmljL2RpcmVudC5jcHAgXAogICAgIGJpb25pYy9kdXAyLmNwcCBcCiAgICAgYmlvbmljL2Vwb2xsX2NyZWF0ZS5jcHAgXAotICAgIGJpb25pYy9lcG9sbF93YWl0LmNwcCBcCiAgICAgYmlvbmljL2Vwb2xsX3B3YWl0LmNwcCBcCisgICAgYmlvbmljL2Vwb2xsX3dhaXQuY3BwIFwKICAgICBiaW9uaWMvX19lcnJuby5jcHAgXAogICAgIGJpb25pYy9ldmVudGZkX3JlYWQuY3BwIFwKICAgICBiaW9uaWMvZXZlbnRmZF93cml0ZS5jcHAgXAogICAgIGJpb25pYy9mZnMuY3BwIFwKKyAgICBiaW9uaWMvZmxvY2tmaWxlLmNwcCBcCiAgICAgYmlvbmljL2ZvcmsuY3BwIFwKKyAgICBiaW9uaWMvZnBjbGFzc2lmeS5jcHAgXAogICAgIGJpb25pYy9mdXRpbWVucy5jcHAgXAogICAgIGJpb25pYy9nZXRhdXh2YWwuY3BwIFwKICAgICBiaW9uaWMvZ2V0Y3dkLmNwcCBcCisgICAgYmlvbmljL2dldGVudHJvcHlfbGludXguYyBcCisgICAgYmlvbmljL2dldHBncnAuY3BwIFwKKyAgICBiaW9uaWMvZ2V0cGlkLmNwcCBcCisgICAgYmlvbmljL2dldHRpZC5jcHAgXAogICAgIGJpb25pYy9pbm90aWZ5X2luaXQuY3BwIFwKICAgICBiaW9uaWMvbGNob3duLmNwcCBcCisgICAgYmlvbmljL2xmczY0X3N1cHBvcnQuY3BwIFwKKyAgICBiaW9uaWMvX19saWJjX2N1cnJlbnRfc2lncnRtYXguY3BwIFwKKyAgICBiaW9uaWMvX19saWJjX2N1cnJlbnRfc2lncnRtaW4uY3BwIFwKICAgICBiaW9uaWMvbGliY19pbml0X2NvbW1vbi5jcHAgXAogICAgIGJpb25pYy9saWJjX2xvZ2dpbmcuY3BwIFwKICAgICBiaW9uaWMvbGliZ2VuLmNwcCBcCiAgICAgYmlvbmljL2xpbmsuY3BwIFwKKyAgICBiaW9uaWMvbG9jYWxlLmNwcCBcCiAgICAgYmlvbmljL2xzdGF0LmNwcCBcCisgICAgYmlvbmljL21icnRvYzE2LmNwcCBcCisgICAgYmlvbmljL21icnRvYzMyLmNwcCBcCisgICAgYmlvbmljL21ic3RhdGUuY3BwIFwKICAgICBiaW9uaWMvbWtkaXIuY3BwIFwKICAgICBiaW9uaWMvbWtmaWZvLmNwcCBcCiAgICAgYmlvbmljL21rbm9kLmNwcCBcCisgICAgYmlvbmljL21udGVudC5jcHAgXAorICAgIGJpb25pYy9OZXRkQ2xpZW50RGlzcGF0Y2guY3BwIFwKICAgICBiaW9uaWMvb3Blbi5jcHAgXAogICAgIGJpb25pYy9wYXVzZS5jcHAgXAogICAgIGJpb25pYy9waXBlLmNwcCBcCiAgICAgYmlvbmljL3BvbGwuY3BwIFwKKyAgICBiaW9uaWMvcG9zaXhfZmFkdmlzZS5jcHAgXAorICAgIGJpb25pYy9wb3NpeF9mYWxsb2NhdGUuY3BwIFwKKyAgICBiaW9uaWMvcG9zaXhfdGltZXJzLmNwcCBcCiAgICAgYmlvbmljL3B0aHJlYWRfYXRmb3JrLmNwcCBcCiAgICAgYmlvbmljL3B0aHJlYWRfYXR0ci5jcHAgXAogICAgIGJpb25pYy9wdGhyZWFkX2NvbmQuY3BwIFwKQEAgLTI0MSw2ICsxNTYsNyBAQAogICAgIGJpb25pYy9wdGhyZWFkX2V4aXQuY3BwIFwKICAgICBiaW9uaWMvcHRocmVhZF9nZXRjcHVjbG9ja2lkLmNwcCBcCiAgICAgYmlvbmljL3B0aHJlYWRfZ2V0c2NoZWRwYXJhbS5jcHAgXAorICAgIGJpb25pYy9wdGhyZWFkX2dldHRpZF9ucC5jcHAgXAogICAgIGJpb25pYy9wdGhyZWFkX2ludGVybmFscy5jcHAgXAogICAgIGJpb25pYy9wdGhyZWFkX2pvaW4uY3BwIFwKICAgICBiaW9uaWMvcHRocmVhZF9rZXkuY3BwIFwKQEAgLTI1MywxOSArMTY5LDIyIEBACiAgICAgYmlvbmljL3B0aHJlYWRfc2V0c2NoZWRwYXJhbS5jcHAgXAogICAgIGJpb25pYy9wdGhyZWFkX3NpZ21hc2suY3BwIFwKICAgICBiaW9uaWMvcHRyYWNlLmNwcCBcCisgICAgYmlvbmljL3B0eS5jcHAgXAogICAgIGJpb25pYy9yYWlzZS5jcHAgXAorICAgIGJpb25pYy9yYW5kLmNwcCBcCiAgICAgYmlvbmljL3JlYWRsaW5rLmNwcCBcCisgICAgYmlvbmljL3JlYm9vdC5jcHAgXAorICAgIGJpb25pYy9yZWN2LmNwcCBcCiAgICAgYmlvbmljL3JlbmFtZS5jcHAgXAogICAgIGJpb25pYy9ybWRpci5jcHAgXAotICAgIGJpb25pYy9zYnJrLmNwcCBcCiAgICAgYmlvbmljL3NjYW5kaXIuY3BwIFwKICAgICBiaW9uaWMvc2NoZWRfZ2V0YWZmaW5pdHkuY3BwIFwKICAgICBiaW9uaWMvc2NoZWRfZ2V0Y3B1LmNwcCBcCisgICAgYmlvbmljL3NlbmQuY3BwIFwKICAgICBiaW9uaWMvc2V0ZWdpZC5jcHAgXAogICAgIGJpb25pYy9fX3NldF9lcnJuby5jcHAgXAogICAgIGJpb25pYy9zZXRldWlkLmNwcCBcCi0gICAgYmlvbmljL3NldGxvY2FsZS5jcHAgXAotICAgIGJpb25pYy9zaWduYWxmZC5jcHAgXAorICAgIGJpb25pYy9zZXRwZ3JwLmNwcCBcCiAgICAgYmlvbmljL3NpZ2FjdGlvbi5jcHAgXAogICAgIGJpb25pYy9zaWdhZGRzZXQuY3BwIFwKICAgICBiaW9uaWMvc2lnZGVsc2V0LmNwcCBcCkBAIC0yNzMsNzcgKzE5Miw1NSBAQAogICAgIGJpb25pYy9zaWdmaWxsc2V0LmNwcCBcCiAgICAgYmlvbmljL3NpZ2lzbWVtYmVyLmNwcCBcCiAgICAgYmlvbmljL3NpZ25hbC5jcHAgXAorICAgIGJpb25pYy9zaWduYWxmZC5jcHAgXAogICAgIGJpb25pYy9zaWdwZW5kaW5nLmNwcCBcCiAgICAgYmlvbmljL3NpZ3Byb2NtYXNrLmNwcCBcCiAgICAgYmlvbmljL3NpZ3N1c3BlbmQuY3BwIFwKICAgICBiaW9uaWMvc2lnd2FpdC5jcHAgXAorICAgIGJpb25pYy9zb2NrZXQuY3BwIFwKICAgICBiaW9uaWMvc3RhdC5jcHAgXAogICAgIGJpb25pYy9zdGF0dmZzLmNwcCBcCisgICAgYmlvbmljL3N0cmNvbGxfbC5jcHAgXAogICAgIGJpb25pYy9zdHJlcnJvci5jcHAgXAogICAgIGJpb25pYy9zdHJlcnJvcl9yLmNwcCBcCisgICAgYmlvbmljL3N0cmZ0aW1lX2wuY3BwIFwKICAgICBiaW9uaWMvc3Ryc2lnbmFsLmNwcCBcCisgICAgYmlvbmljL3N0cnRvbGQuY3BwIFwKKyAgICBiaW9uaWMvc3RydG9sZF9sLmNwcCBcCisgICAgYmlvbmljL3N0cnRvbGxfbC5jcHAgXAorICAgIGJpb25pYy9zdHJ0b3VsbF9sLmNwcCBcCisgICAgYmlvbmljL3N0cnhmcm1fbC5jcHAgXAogICAgIGJpb25pYy9zdHVicy5jcHAgXAogICAgIGJpb25pYy9zeW1saW5rLmNwcCBcCiAgICAgYmlvbmljL3N5c2NvbmYuY3BwIFwKLSAgICBiaW9uaWMvdGhyZWFkX2F0ZXhpdC5jcHAgXAorICAgIGJpb25pYy9zeXNsb2cuY3BwIFwKKyAgICBiaW9uaWMvc3lzX3NpZ2xpc3QuYyBcCisgICAgYmlvbmljL3N5c19zaWduYW1lLmMgXAorICAgIGJpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jcHAgXAogICAgIGJpb25pYy90ZGVzdHJveS5jcHAgXAotICAgIGJpb25pYy90aW1lci5jcHAgXAorICAgIGJpb25pYy90ZXJtaW9zLmNwcCBcCisgICAgYmlvbmljL3RocmVhZF9wcml2YXRlLmNwcCBcCiAgICAgYmlvbmljL3RtcGZpbGUuY3BwIFwKKyAgICBiaW9uaWMvdW1vdW50LmNwcCBcCiAgICAgYmlvbmljL3VubGluay5jcHAgXAogICAgIGJpb25pYy91dGltZXMuY3BwIFwKKyAgICBiaW9uaWMvdmRzby5jcHAgXAogICAgIGJpb25pYy93YWl0LmNwcCBcCiAgICAgYmlvbmljL3djaGFyLmNwcCBcCisgICAgYmlvbmljL3djdHlwZS5jcHAgXAogCi0jIFRoZXNlIGFyZSBzaGFyZWQgYnkgYWxsIHRoZSAzMi1iaXQgdGFyZ2V0cywgYnV0IG5vdCB0aGUgNjQtYml0IG9uZXMuCi1pZmVxICgkKFRBUkdFVF9BUkNIKSwkKGZpbHRlciAkKFRBUkdFVF9BUkNIKSxhcm0gbWlwcyB4ODYpKQotbGliY19iaW9uaWNfc3JjX2ZpbGVzICs9IFwKLSAgICBiaW9uaWMvbW1hcC5jcHAgXAotCi1lbmRpZgotCi1saWJjX3R6Y29kZV9zcmNfZmlsZXMgOj0gXAotICAgIHR6Y29kZS9hc2N0aW1lLmMgXAotICAgIHR6Y29kZS9kaWZmdGltZS5jIFwKLSAgICB0emNvZGUvbG9jYWx0aW1lLmMgXAotICAgIHR6Y29kZS9zdHJmdGltZS5jIFwKLSAgICB0emNvZGUvc3RycHRpbWUuYyBcCitsaWJjX2N4YV9zcmNfZmlsZXMgOj0gXAorICAgIGJpb25pYy9fX2N4YV9ndWFyZC5jcHAgXAorICAgIGJpb25pYy9fX2N4YV9wdXJlX3ZpcnR1YWwuY3BwIFwKKyAgICBiaW9uaWMvbmV3LmNwcCBcCiAKIGxpYmNfdXBzdHJlYW1fZnJlZWJzZF9zcmNfZmlsZXMgOj0gXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvZ2VuL2xkZXhwLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvZ2VuL3NsZWVwLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvZ2VuL3VzbGVlcC5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2NscmVyci5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZjbG9zZS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Zkb3Blbi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Zlb2YuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZXJyb3IuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZ2V0bG4uYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZ2V0cG9zLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmdldHMuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9maWxlbm8uYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mbGFncy5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZvcGVuLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZnB1cmdlLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZnB1dHMuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mc2V0cG9zLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZnVub3Blbi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z3YWxrLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZndyaXRlLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Yy5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2dldGNoYXIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9tYWtlYnVmLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vbWt0ZW1wLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0Yy5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGNoYXIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRzLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0dy5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JlbW92ZS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JnZXQuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWYuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWZmZXIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXR2YnVmLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdGVtcG5hbS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3RtcG5hbS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3dzZXR1cC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGxpYi9hYnMuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvZ2V0b3B0X2xvbmcuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvaW1heGFicy5jIFwKQEAgLTM1MSw2ICsyNDgsNyBAQAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL2xhYnMuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvbGxhYnMuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvcXNvcnQuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvcXVpY2tfZXhpdC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGxpYi9yZWFscGF0aC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3BjcHkuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NwbmNweS5jIFwKQEAgLTM1OCw3ICsyNTYsNiBAQAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NzcG4uYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzZHVwLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xjYXQuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGNweS5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NuY2FzZWNtcC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NuY2F0LmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc25jbXAuYyBcCkBAIC0zNjYsMjM5ICsyNjMsMjY5IEBACiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2Nzbmxlbi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NwYnJrLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc3Nwbi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzdHIuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzdG9rLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jaHIuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbWNweS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtbW92ZS5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtc2V0LmMgXAogCiBsaWJjX3Vwc3RyZWFtX25ldGJzZF9zcmNfZmlsZXMgOj0gXAotICAgIHVwc3RyZWFtLW5ldGJzZC9jb21tb24vbGliL2xpYmMvaGFzaC9zaGExL3NoYTEuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9pbmV0L2luZXRfYWRkci5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9jb21wYXQtNDMvY3JlYXQuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL2Z0dy5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vbmZ0dy5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vbmljZS5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vcG9wZW4uYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3BzaWduYWwuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3NldGptcGVyci5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vdXRpbWUuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X250b2EuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X250b3AuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X3B0b24uYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3N0cmVhbXMuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3RpbWVycy5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdjb21wLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2Vycm9yLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2V4ZWMuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZnJlZS5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRkZWxpbS5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRsaW5lLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9ic2VhcmNoLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9kaXYuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2RyYW5kNDguYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2VyYW5kNDguYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2V4aXQuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2pyYW5kNDguYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2xkaXYuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2xsZGl2LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9scmFuZDQ4LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9tcmFuZDQ4LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9ucmFuZDQ4LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9fcmFuZDQ4LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9yZWFsbG9jYXJyLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9zZWVkNDguYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3NyYW5kNDguYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RkZWxldGUuYyBcCi0gICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RmaW5kLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi90c2VhcmNoLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9tZW1jY3B5LmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJjYXNlc3RyLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJjb2xsLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJ4ZnJtLmMgXAotICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3RocmVhZC1zdHViL19faXN0aHJlYWRlZC5jIFwKLSAgICB1cHN0cmVhbS1uZXRic2QvbGliYy91bmlzdGQva2lsbHBnLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9jb21tb24vbGliL2xpYmMvc3RkbGliL3JhbmRvbS5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL2Z0dy5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL25mdHcuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi9uaWNlLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vcG9wZW4uYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi9wc2lnbmFsLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vdXRpbWUuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi91dG1wLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmV0L25zYXBfYWRkci5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvcmVnY29tcC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvcmVnZXJyb3IuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3JlZ2V4ZWMuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3JlZ2ZyZWUuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9ic2VhcmNoLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvZGl2LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvZHJhbmQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2VyYW5kNDguYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9pbnNxdWUuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9qcmFuZDQ4LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbGRpdi5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2xsZGl2LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbHJhbmQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL21yYW5kNDguYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9ucmFuZDQ4LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvX3JhbmQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3JhbmRfci5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3JlYWxsb2NhcnIuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9yZW1xdWUuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9zZWVkNDguYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9zcmFuZDQ4LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdHJpbmcvbWVtY2NweS5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNhc2VzdHIuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0cmluZy9zdHJjb2xsLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdHJpbmcvc3RyeGZybS5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jIFwKIAotIyBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgc291cmNlIGZpbGVzIGdvIGhlcmUKLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1pZmVxICgkKFRBUkdFVF9BUkNIKSxhcm0pCi1saWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAotICAgIGJpb25pYy9tZW1jaHIuYyBcCi0gICAgYmlvbmljL21lbW1vdmUuYy5hcm0gXAotICAgIGJpb25pYy9tZW1yY2hyLmMgXAotICAgIGJpb25pYy9zdHJjaHIuY3BwIFwKLSAgICBiaW9uaWMvc3Rybmxlbi5jIFwKLSAgICBzdHJpbmcvYmNvcHkuYyBcCi0gICAgc3RyaW5nL2luZGV4LmMgXAotICAgIHN0cmluZy9zdHJsY2F0LmMgXAotICAgIHN0cmluZy9zdHJsY3B5LmMgXAotICAgIHN0cmluZy9zdHJuY2F0LmMgXAotICAgIHN0cmluZy9zdHJuY21wLmMgXAotICAgIHN0cmluZy9zdHJuY3B5LmMgXAotICAgIHN0cmluZy9zdHJyY2hyLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NhdC5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjaHIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY21wLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NweS5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsZW4uYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzcmNoci5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtY21wLmMgXAorbGliY191cHN0cmVhbV9vcGVuYnNkX2dkdG9hX3NyY19maWxlcyA6PSBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2dkdG9hX3N1cHBvcnQuY3BwIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2RtaXNjLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZHRvYS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9hLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZ2V0aGV4LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZ21pc2MuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9oZF9pbml0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvaGR0b2EuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9oZXhuYW4uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9sZHRvYS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL21pc2MuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zbWlzYy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvZC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvZGcuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdHJ0b2YuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdHJ0b3JkLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3VtLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvdWxwLmMgXAogCi1lbmRpZiAjIGFybQorbGliY191cHN0cmVhbV9vcGVuYnNkX2dkdG9hX3NyY19maWxlc18zMiA6PSBcCisgICAgJChsaWJjX3Vwc3RyZWFtX29wZW5ic2RfZ2R0b2Ffc3JjX2ZpbGVzKSBcCiAKLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLCBhcm02NCkKLSNUT0RPOiBSZXBsYWNlIEMgc3R1YnMgd2l0aCBvcHRpbWlzZWQgYXNzZW1ibHkKLWxpYmNfY29tbW9uX3NyY19maWxlcyArPSBcCi0gICAgYmlvbmljL21lbWNoci5jICAgXAotICAgIGJpb25pYy9tZW1jbXAuYyAgIFwKLSAgICBiaW9uaWMvbWVtY3B5LmMgICBcCi0gICAgYmlvbmljL21lbW1vdmUuYyAgXAotICAgIGJpb25pYy9tZW1yY2hyLmMgIFwKLSAgICBiaW9uaWMvbWVtc2V0LmMgICBcCi0gICAgYmlvbmljL3N0cmNoci5jcHAgXAotICAgIGJpb25pYy9zdHJubGVuLmMgIFwKLSAgICBzdHJpbmcvYmNvcHkuYyAgICBcCi0gICAgc3RyaW5nL2luZGV4LmMgICAgXAotICAgIHN0cmluZy9tZW1jbXAxNi5jIFwKLSAgICBzdHJpbmcvc3RyY2F0LmMgICBcCi0gICAgc3RyaW5nL3N0cmNtcC5jICAgXAotICAgIHN0cmluZy9zdHJjcHkuYyAgIFwKLSAgICBzdHJpbmcvc3RybGNhdC5jICBcCi0gICAgc3RyaW5nL3N0cmxjcHkuYyAgXAotICAgIHN0cmluZy9zdHJsZW4uYyAgIFwKLSAgICBzdHJpbmcvc3RybmNhdC5jICBcCi0gICAgc3RyaW5nL3N0cm5jbXAuYyAgXAotICAgIHN0cmluZy9zdHJuY3B5LmMgIFwKLSAgICBzdHJpbmcvc3RycmNoci5jICBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xlbi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NyY2hyLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYyBcCitsaWJjX3Vwc3RyZWFtX29wZW5ic2RfZ2R0b2Ffc3JjX2ZpbGVzXzY0IDo9IFwKKyAgICAkKGxpYmNfdXBzdHJlYW1fb3BlbmJzZF9nZHRvYV9zcmNfZmlsZXMpIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvclEuYyBcCiAKLWVuZGlmICMgYXJtNjQKK2xpYmNfdXBzdHJlYW1fb3BlbmJzZF9zcmNfZmlsZXMgOj0gXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvY3J5cHQvYXJjNHJhbmRvbS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2NyeXB0L2FyYzRyYW5kb21fdW5pZm9ybS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9hbGFybS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9jdHlwZV8uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vZXhlYy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9mbm1hdGNoLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2Z0b2suYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vZ2V0cHJvZ25hbWUuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vaXNjdHlwZS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9zZXRwcm9nbmFtZS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi90aW1lLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3RvbG93ZXJfLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3RvdXBwZXJfLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL2J0b3djLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL21icmxlbi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9tYnN0b3djcy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9tYnRvd2MuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzY29sbC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2QuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvaW1heC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2wuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9sZC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2xsLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvbWJzLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvdWwuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG91bGwuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG91bWF4LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3hmcm0uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2N0b2IuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2N0b21iLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2h0b25sLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2h0b25zLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfYWRkci5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X2xuYW9mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbWFrZWFkZHIuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9uZXRvZi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X25ldHdvcmsuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9udG9hLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbnRvcC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X3B0b24uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvbnRvaGwuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvbnRvaHMuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9hc3ByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2NscmVyci5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2RwcmludGYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZG9wZW4uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZW9mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmVycm9yLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmZsdXNoLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmdldGMuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0bG4uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0cG9zLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmdldHMuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0d2MuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0d3MuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9maWxlbm8uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9maW5kZnAuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHJpbnRmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1cmdlLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dGMuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHV0cy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXR3Yy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXR3cy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZyZWFkLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnJlb3Blbi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZzY2FuZi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZWVrLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnNldHBvcy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z0ZWxsLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnVub3Blbi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z2d3JpdGUuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md2Fsay5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3aWRlLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZndwcmludGYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md3JpdGUuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md3NjYW5mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0Yy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldGNoYXIuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRkZWxpbS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldGxpbmUuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRzLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0d2MuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXR3Y2hhci5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL21ha2VidWYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9ta3RlbXAuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wZXJyb3IuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wcmludGYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXRjLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0Y2hhci5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHMuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXR3Yy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHdjaGFyLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcmVmaWxsLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcmVtb3ZlLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcmV3aW5kLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcmdldC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3NjYW5mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2V0YnVmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2V0YnVmZmVyLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3NzY2FuZi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3N0ZGlvLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc3dwcmludGYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zd3NjYW5mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdGVtcG5hbS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3RtcG5hbS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3VuZ2V0Yy5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3VuZ2V0d2MuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92YXNwcmludGYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZHByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZmcHJpbnRmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZzY2FuZi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zmd3ByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zmd3NjYW5mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZzY2FuZi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZzbnByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZzcHJpbnRmLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnNzY2FuZi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zzd3ByaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zzd3NjYW5mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdndwcmludGYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92d3NjYW5mLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vd2J1Zi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3dwcmludGYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93c2NhbmYuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93c2V0dXAuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRleGl0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0b2kuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRvbC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9hdG9sbC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9leGl0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2dldGVudi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9sc2VhcmNoLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3NldGVudi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2ltYXguYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG9sLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvbGwuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG91bC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VsbC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VtYXguYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3lzdGVtLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3RmaW5kLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3RzZWFyY2guYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY2FzZWNtcC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjc3BuLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmR1cC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuZHVwLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnBicmsuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3Ryc2VwLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnNwbi5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJzdHIuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RydG9rLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3djc2xjcHkuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvd2Nzc3RyLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3djc3dpZHRoLmMgXAogCi1pZmVxICgkKFRBUkdFVF9BUkNIKSxtaXBzKQotbGliY19jb21tb25fc3JjX2ZpbGVzICs9IFwKLSAgICBiaW9uaWMvbWVtY2hyLmMgXAotICAgIGJpb25pYy9tZW1jbXAuYyBcCi0gICAgYmlvbmljL21lbXJjaHIuYyBcCi0gICAgYmlvbmljL3N0cmNoci5jcHAgXAotICAgIGJpb25pYy9zdHJubGVuLmMgXAotICAgIHN0cmluZy9iY29weS5jIFwKLSAgICBzdHJpbmcvaW5kZXguYyBcCi0gICAgc3RyaW5nL3N0cmNhdC5jIFwKLSAgICBzdHJpbmcvc3RyY21wLmMgXAotICAgIHN0cmluZy9zdHJjcHkuYyBcCi0gICAgc3RyaW5nL3N0cmxjYXQuYyBcCi0gICAgc3RyaW5nL3N0cmxjcHkuYyBcCi0gICAgc3RyaW5nL3N0cm5jYXQuYyBcCi0gICAgc3RyaW5nL3N0cm5jbXAuYyBcCi0gICAgc3RyaW5nL3N0cm5jcHkuYyBcCi0gICAgc3RyaW5nL3N0cnJjaHIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xlbi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NyY2hyLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYyBcCi0KLWVuZGlmICMgbWlwcwotCi1pZmVxICgkKFRBUkdFVF9BUkNIKSwkKGZpbHRlciAkKFRBUkdFVF9BUkNIKSx4ODZfNjQpKQotbGliY19jb21tb25fc3JjX2ZpbGVzICs9IFwKLSAgICBiaW9uaWMvbWVtY2hyLmMgXAotICAgIGJpb25pYy9tZW1jbXAuYyBcCi0gICAgYmlvbmljL21lbWNweS5jIFwKLSAgICBiaW9uaWMvbWVtbW92ZS5jIFwKLSAgICBiaW9uaWMvbWVtcmNoci5jIFwKLSAgICBiaW9uaWMvbWVtc2V0LmMgXAotICAgIGJpb25pYy9zdHJjaHIuY3BwIFwKLSAgICBiaW9uaWMvc3Rybmxlbi5jIFwKLSAgICBzdHJpbmcvYmNvcHkuYyBcCi0gICAgc3RyaW5nL2luZGV4LmMgXAotICAgIHN0cmluZy9zdHJjYXQuYyBcCi0gICAgc3RyaW5nL3N0cmNtcC5jIFwKLSAgICBzdHJpbmcvc3RyY3B5LmMgXAotICAgIHN0cmluZy9zdHJsY2F0LmMgXAotICAgIHN0cmluZy9zdHJsY3B5LmMgXAotICAgIHN0cmluZy9zdHJsZW4uYyBcCi0gICAgc3RyaW5nL3N0cm5jYXQuYyBcCi0gICAgc3RyaW5nL3N0cm5jbXAuYyBcCi0gICAgc3RyaW5nL3N0cm5jcHkuYyBcCi0gICAgc3RyaW5nL3N0cnJjaHIuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xlbi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NyY2hyLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYyBcCi0KLWVuZGlmICMgeDg2XzY0Ci0KLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLGFybSkKLSAgaWZlcSAoJChzdHJpcCAkKFRBUkdFVF9DUFVfVkFSSUFOVCkpLCkKLSAgICAkKHdhcm5pbmcgVEFSR0VUX0FSQ0ggaXMgYXJtLCBidXQgVEFSR0VUX0NQVV9WQVJJQU5UIGlzIG5vdCBkZWZpbmVkKQotICBlbmRpZgotZW5kaWYKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMjIEFkZCBjcHUgc3BlY2lmaWMgc291cmNlIGZpbGVzLgotIyMKLSMjIFRoaXMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgYnV0IGl0IHdpbGwgb25seSBhZGQKLSMjIHRoZSBmaXJzdCBzb3VyY2UgZmlsZSBmb3IgZWFjaCB1bmlxdWUgJCgxKS4KLSMjICQoMSk6IFVuaXF1ZSBpZGVudGlmaWVyIHRvIGlkZW50aWZ5IHRoZSBjcHUgdmFyaWFudAotIyMgICAgICAgaW1wbGVtZW50YXRpb24uCi0jIyAkKDIpOiBDcHUgc3BlY2lmaWMgc291cmNlIGZpbGUuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1kZWZpbmUgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjCi0kKGlmICQoZmlsdGVyIHRydWUsJChfTElCQ19BUkNIX0NQVV9WQVJJQU5UX0hBU18kKDEpKSksIFwKLQksIFwKLSAgICAgJChldmFsIF9MSUJDX0FSQ0hfQ1BVX1ZBUklBTlRfSEFTXyQoMSkgOj0gdHJ1ZSkgXAotICAgICAkKGV2YWwgX0xJQkNfQVJDSF9DUFVfVkFSSUFOVF9TUkNfRklMRS4kKDEpIDo9ICQoMikpIFwKLSAgICAgJChldmFsIF9MSUJDX0FSQ0hfQ1BVX1ZBUklBTlRfU1JDX0ZJTEVTICs9ICQoMikpIFwKLSkKLWVuZGVmCi0KLV9MSUJDX0FSQ0hfQ09NTU9OX1NSQ19GSUxFUyA6PQotX0xJQkNfQVJDSF9DUFVfVkFSSUFOVF9TUkNfRklMRVMgOj0KLV9MSUJDX0FSQ0hfU1RBVElDX1NSQ19GSUxFUyA6PQotX0xJQkNfQVJDSF9EWU5BTUlDX1NSQ19GSUxFUyA6PQotX0xJQkNfQVJDSF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PQotCi1saWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcyArPSBcCi0gICAgJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpLyQoVEFSR0VUX0FSQ0gpLm1rCi1pbmNsdWRlICQoTE9DQUxfUEFUSCkvYXJjaC0kKFRBUkdFVF9BUkNIKS8kKFRBUkdFVF9BUkNIKS5tawotCi1saWJjX2Jpb25pY19zcmNfZmlsZXMgKz0gJChfTElCQ19BUkNIX0NPTU1PTl9TUkNfRklMRVMpCi1saWJjX2Jpb25pY19zcmNfZmlsZXMgKz0gJChfTElCQ19BUkNIX0NQVV9WQVJJQU5UX1NSQ19GSUxFUykKLWxpYmNfYXJjaF9zdGF0aWNfc3JjX2ZpbGVzIDo9ICQoX0xJQkNfQVJDSF9TVEFUSUNfU1JDX0ZJTEVTKQotbGliY19hcmNoX2R5bmFtaWNfc3JjX2ZpbGVzIDo9ICQoX0xJQkNfQVJDSF9EWU5BTUlDX1NSQ19GSUxFUykKLWxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzICs9ICQoX0xJQkNfQVJDSF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUykKK2xpYmNfYXJjaF9zdGF0aWNfc3JjX2ZpbGVzIDo9IFwKKyAgICBiaW9uaWMvZGxfaXRlcmF0ZV9waGRyX3N0YXRpYy5jcHAgXAogCiAjIERlZmluZSBzb21lIGNvbW1vbiBjZmxhZ3MKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIGxpYmNfY29tbW9uX2NmbGFncyA6PSBcCi0gICAgLURBTkRST0lEX0NIQU5HRVMgXAogICAgIC1EX0xJQkM9MSBcCi0gICAgLVdhbGwgLVdleHRyYSBcCisgICAgLVdhbGwgLVdleHRyYSAtV3VudXNlZCBcCisKK2lmbmVxICgkKFRBUkdFVF9VU0VTX0xPR0QpLGZhbHNlKQorbGliY19jb21tb25fY2ZsYWdzICs9IC1EVEFSR0VUX1VTRVNfTE9HRAorZW5kaWYKKwordXNlX2NsYW5nIDo9IGZhbHNlCiAKICMgVHJ5IHRvIGNhdGNoIHR5cGljYWwgMzItYml0IGFzc3VtcHRpb25zIHRoYXQgYnJlYWsgd2l0aCA2NC1iaXQgcG9pbnRlcnMuCiBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gXAogICAgIC1XZXJyb3I9cG9pbnRlci10by1pbnQtY2FzdCBcCiAgICAgLVdlcnJvcj1pbnQtdG8tcG9pbnRlci1jYXN0IFwKICAgICAtV2Vycm9yPXR5cGUtbGltaXRzIFwKKyAgICAtV2Vycm9yIFwKIAogaWZlcSAoJChzdHJpcCAkKERFQlVHX0JJT05JQ19MSUJDKSksdHJ1ZSkKICAgbGliY19jb21tb25fY2ZsYWdzICs9IC1EREVCVUcKIGVuZGlmCiAKK2lmZXEgKCQoTUFMTE9DX0lNUEwpLGRsbWFsbG9jKQorICBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLURVU0VfRExNQUxMT0MKKyAgbGliY19tYWxsb2Nfc3JjIDo9IGJpb25pYy9kbG1hbGxvYy5jCitlbHNlCisgIGxpYmNfY29tbW9uX2NmbGFncyArPSAtRFVTRV9KRU1BTExPQworICBsaWJjX21hbGxvY19zcmMgOj0gYmlvbmljL2plbWFsbG9jX3dyYXBwZXIuY3BwCisgIGxpYmNfY29tbW9uX2NfaW5jbHVkZXMgKz0gZXh0ZXJuYWwvamVtYWxsb2MvaW5jbHVkZQorZW5kaWYKKwogIyBUbyBjdXN0b21pemUgZGxtYWxsb2MncyBhbGlnbm1lbnQsIHNldCBCT0FSRF9NQUxMT0NfQUxJR05NRU5UIGluCiAjIHRoZSBhcHByb3ByaWF0ZSBCb2FyZENvbmZpZy5tayBmaWxlLgogIwpAQCAtNjA2LDM2ICs1MzMsNiBAQAogICBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLURNQUxMT0NfQUxJR05NRU5UPSQoQk9BUkRfTUFMTE9DX0FMSUdOTUVOVCkKIGVuZGlmCiAKLSMgY3J0YnJhbmQuYyBuZWVkcyA8c3RkaW50Lmg+IGFuZCBhICNkZWZpbmUgZm9yIHRoZSBwbGF0Zm9ybSBTREsgdmVyc2lvbi4KLWxpYmNfY3J0X3RhcmdldF9jZmxhZ3MgOj0gXAotICAgIC1JJChMT0NBTF9QQVRIKS9pbmNsdWRlIFwKLSAgICAtSSQoTE9DQUxfUEFUSCkvYXJjaC0kKFRBUkdFVF9BUkNIKS9pbmNsdWRlIFwKLSAgICAtRFBMQVRGT1JNX1NES19WRVJTSU9OPSQoUExBVEZPUk1fU0RLX1ZFUlNJT04pIFwKLQotaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQotICBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLURTT0ZURkxPQVQKLSAgbGliY19jb21tb25fY2ZsYWdzICs9IC1mc3RyaWN0LWFsaWFzaW5nCi0gIGxpYmNfY3J0X3RhcmdldF9jZmxhZ3MgKz0gLW10aHVtYi1pbnRlcndvcmsKLWVuZGlmICMgYXJtCi0KLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLG1pcHMpCi0gIGlmbmVxICgkKEFSQ0hfTUlQU19IQVNfRlBVKSx0cnVlKQotICAgIGxpYmNfY29tbW9uX2NmbGFncyArPSAtRFNPRlRGTE9BVAotICBlbmRpZgotICBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLWZzdHJpY3QtYWxpYXNpbmcKLSAgbGliY19jcnRfdGFyZ2V0X2NmbGFncyArPSAkKFRBUkdFVF9HTE9CQUxfQ0ZMQUdTKQotZW5kaWYgIyBtaXBzCi0KLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLHg4NikKLSAgbGliY19jcnRfdGFyZ2V0X2NmbGFncyArPSAtbTMyCi0gIGxpYmNfY3J0X3RhcmdldF9sZGZsYWdzIDo9IC1tZWxmX2kzODYKLWVuZGlmICMgeDg2Ci0KLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLHg4Nl82NCkKLSAgbGliY19jcnRfdGFyZ2V0X2NmbGFncyArPSAtbTY0Ci0gIGxpYmNfY3J0X3RhcmdldF9sZGZsYWdzIDo9IC1tZWxmX3g4Nl82NAotZW5kaWYgIyB4ODZfNjQKLQogIyBEZWZpbmUgQU5EUk9JRF9TTVAgYXBwcm9wcmlhdGVseS4KIGlmZXEgKCQoVEFSR0VUX0NQVV9TTVApLHRydWUpCiAgICAgbGliY19jb21tb25fY2ZsYWdzICs9IC1EQU5EUk9JRF9TTVA9MQpAQCAtNjUzLDE0MSArNTUwLDI0IEBACiAKICMgRGVmaW5lIHNvbWUgY29tbW9uIGluY2x1ZGVzCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1saWJjX2NvbW1vbl9jX2luY2x1ZGVzIDo9IFwKLQkJJChMT0NBTF9QQVRIKS9zdGRsaWIgIFwKLQkJJChMT0NBTF9QQVRIKS9zdHJpbmcgIFwKLQkJJChMT0NBTF9QQVRIKS9zdGRpbyAgIFwKLQkJZXh0ZXJuYWwvc2FmZS1pb3AvaW5jbHVkZQotCi0jIERlZmluZSB0aGUgbGliYyBydW4tdGltZSAoY3J0KSBzdXBwb3J0IG9iamVjdCBmaWxlcyB0aGF0IG11c3QgYmUgYnVpbHQsCi0jIHdoaWNoIGFyZSBuZWVkZWQgdG8gYnVpbGQgYWxsIG90aGVyIG9iamVjdHMgKHNoYXJlZC9zdGF0aWMgbGlicyBhbmQKLSMgZXhlY3V0YWJsZXMpCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0jIEFSTSwgQXJtNjQsIE1JUFMsIGFuZCB4ODYgYWxsIG5lZWQgY3J0YmVnaW5fc28vY3J0ZW5kX3NvLgotIwotIyBGb3IgeDg2LCB0aGUgLmluaXQgc2VjdGlvbiBtdXN0IHBvaW50IHRvIGEgZnVuY3Rpb24gdGhhdCBjYWxscyBhbGwKLSMgZW50cmllcyBpbiB0aGUgLmN0b3JzIHNlY3Rpb24uIChvbiBBUk0gdGhpcyBpcyBkb25lIHRocm91Z2ggdGhlCi0jIC5pbml0X2FycmF5IHNlY3Rpb24gaW5zdGVhZCkuCi0jCi0jIEZvciBhbGwgdGhlIHBsYXRmb3JtcywgdGhlIC5maW5pX2FycmF5IHNlY3Rpb24gbXVzdCBwb2ludCB0byBhIGZ1bmN0aW9uCi0jIHRoYXQgd2lsbCBjYWxsIF9fY3hhX2ZpbmFsaXplKCZfX2Rzb19oYW5kbGUpIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0Ci0jIHN0YXRpYyBDKysgZGVzdHJ1Y3RvcnMgYXJlIHByb3Blcmx5IGNhbGxlZCBvbiBkbGNsb3NlKCkuCi0jCi1saWJjX2NydF90YXJnZXRfY3J0YmVnaW5fZmlsZSA6PSAkKExPQ0FMX1BBVEgpL2FyY2gtY29tbW9uL2Jpb25pYy9jcnRiZWdpbi5jCi1saWJjX2NydF90YXJnZXRfY3J0YmVnaW5fc29fZmlsZSA6PSAkKExPQ0FMX1BBVEgpL2FyY2gtY29tbW9uL2Jpb25pYy9jcnRiZWdpbl9zby5jCi0KLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLGFybSkKLSAgICBsaWJjX2NydF90YXJnZXRfc29fY2ZsYWdzIDo9Ci1lbmRpZgotaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtNjQpCi0gICAgbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncyA6PQotICAgIGxpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlIDo9ICQoTE9DQUxfUEFUSCkvYXJjaC0kKFRBUkdFVF9BUkNIKS9iaW9uaWMvY3J0YmVnaW4uYwotZW5kaWYKLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLG1pcHMpCi0gICAgbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncyA6PSAtZlBJQwotICAgIGxpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlIDo9ICQoTE9DQUxfUEFUSCkvYXJjaC0kKFRBUkdFVF9BUkNIKS9iaW9uaWMvY3J0YmVnaW4uYwotZW5kaWYKLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLCQoZmlsdGVyICQoVEFSR0VUX0FSQ0gpLHg4NiB4ODZfNjQpKQotICAgIGxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MgOj0gLWZQSUMKLWVuZGlmCi1saWJjX2NydF90YXJnZXRfc29fY2ZsYWdzICs9ICQobGliY19jcnRfdGFyZ2V0X2NmbGFncykKLQotIyBTZWUgdGhlIGNvbW1lbnQgaW4gY3J0YnJhbmQuYyBmb3IgdGhlIHJlYXNvbiB3aHkgd2UgbmVlZCB0byBnZW5lcmF0ZQotIyBjcnRicmFuZC5zIGJlZm9yZSBnZW5lcmF0aW5nIGNydGJyYW5kLm8uCi1HRU4gOj0gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJyYW5kLnMKLSQoR0VOKTogJChMT0NBTF9QQVRIKS9iaW9uaWMvY3J0YnJhbmQuYwotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkKGhpZGUpICQoVEFSR0VUX0NDKSAkKGxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MpIC1TIFwKLQkJLU1EIC1NRiAkKEA6JS5zPSUuZCkgLW8gJEAgJDwKLQkkKGhpZGUpIHNlZCAtaSAtZSAnL1wubm90ZVwuQUJJLXRhZy9zL3Byb2diaXRzL25vdGUvJyAkQAotCSQoY2FsbCB0cmFuc2Zvcm0tZC10by1wLWFyZ3MsJChAOiUucz0lLmQpLCQoQDolLnM9JS5QKSkKLS1pbmNsdWRlICQoR0VOOiUucz0lLlApCi1BTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCi0KLUdFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQubwotJChHRU4pOiAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQucwotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkKGhpZGUpICQoVEFSR0VUX0NDKSAkKGxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MpIC1vICRAIC1jICQ8Ci1BTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCi0KLUdFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc28ubwotJChHRU4pOiAkKGxpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9zb19maWxlKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkKGhpZGUpICQoVEFSR0VUX0NDKSAkKGxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MpIFwKLQkJLU1EIC1NRiAkKEA6JS5vPSUuZCkgLW8gJEAgLWMgJDwKLQkkKHRyYW5zZm9ybS1kLXRvLXApCi0taW5jbHVkZSAkKEdFTjolLm89JS5QKQotQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQotCi1HRU4gOj0gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGVuZF9zby5vCi0kKEdFTik6ICQoTE9DQUxfUEFUSCkvYXJjaC1jb21tb24vYmlvbmljL2NydGVuZF9zby5TCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQoaGlkZSkgJChUQVJHRVRfQ0MpICQobGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncykgXAotCQktTUQgLU1GICQoQDolLm89JS5kKSAtbyAkQCAtYyAkPAotCSQodHJhbnNmb3JtLWQtdG8tcCkKLS1pbmNsdWRlICQoR0VOOiUubz0lLlApCi1BTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCi0KLSMgVGhlIGZvbGxvd2luZyB0d28gYXJlIGluc3RhbGxlZCB0byBkZXZpY2UKLUdFTiA6PSAkKFRBUkdFVF9PVVRfU0hBUkVEX0xJQlJBUklFUykvY3J0YmVnaW5fc28ubwotJChHRU4pOiAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc28ubwotCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApICYmIGNwIC1mICQ8ICRACi1BTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCi0KLUdFTiA6PSAkKFRBUkdFVF9PVVRfU0hBUkVEX0xJQlJBUklFUykvY3J0ZW5kX3NvLm8KLSQoR0VOKTogJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGVuZF9zby5vCi0JJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkgJiYgY3AgLWYgJDwgJEAKLUFMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKLQotCi1HRU4gOj0gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJlZ2luX3N0YXRpYzEubwotJChHRU4pOiAkKGxpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkKGhpZGUpICQoVEFSR0VUX0NDKSAkKGxpYmNfY3J0X3RhcmdldF9jZmxhZ3MpIFwKLQkJLU1EIC1NRiAkKEA6JS5vPSUuZCkgLW8gJEAgLWMgJDwKLQkkKHRyYW5zZm9ybS1kLXRvLXApCi0taW5jbHVkZSAkKEdFTjolLm89JS5QKQotQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQotCi1HRU4gOj0gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJlZ2luX3N0YXRpYy5vCi0kKEdFTik6ICQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9zdGF0aWMxLm8gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJyYW5kLm8KLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJChoaWRlKSAkKFRBUkdFVF9MRCkgJChsaWJjX2NydF90YXJnZXRfbGRmbGFncykgLXIgLW8gJEAgJF4KLUFMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKLQotR0VOIDo9ICQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9keW5hbWljMS5vCi0kKEdFTik6ICQobGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGUpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQoaGlkZSkgJChUQVJHRVRfQ0MpICQobGliY19jcnRfdGFyZ2V0X2NmbGFncykgXAotCQktTUQgLU1GICQoQDolLm89JS5kKSAtbyAkQCAtYyAkPAotCSQodHJhbnNmb3JtLWQtdG8tcCkKLS1pbmNsdWRlICQoR0VOOiUubz0lLlApCi1BTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCi0KLUdFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fZHluYW1pYy5vCi0kKEdFTik6ICQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9keW5hbWljMS5vICQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRicmFuZC5vCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQoaGlkZSkgJChUQVJHRVRfTEQpICQobGliY19jcnRfdGFyZ2V0X2xkZmxhZ3MpIC1yIC1vICRAICReCi1BTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCi0KLSMgV2UgcmVuYW1lIGNydGVuZC5vIHRvIGNydGVuZF9hbmRyb2lkLm8gdG8gYXZvaWQgYQotIyBuYW1lIGNsYXNoIGJldHdlZW4gZ2NjIGFuZCBiaW9uaWMuCi1HRU4gOj0gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGVuZF9hbmRyb2lkLm8KLSQoR0VOKTogJChMT0NBTF9QQVRIKS9hcmNoLWNvbW1vbi9iaW9uaWMvY3J0ZW5kLlMKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJChoaWRlKSAkKFRBUkdFVF9DQykgJChsaWJjX2NydF90YXJnZXRfY2ZsYWdzKSBcCi0JCS1NRCAtTUYgJChAOiUubz0lLmQpIC1vICRAIC1jICQ8Ci0JJCh0cmFuc2Zvcm0tZC10by1wKQotLWluY2x1ZGUgJChHRU46JS5vPSUuUCkKLUFMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKLQotCi0jIFRvIGVuYWJsZSBtYWxsb2MgbGVhayBjaGVjayBmb3Igc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMsIGFkZAotIyAiV0lUSF9NQUxMT0NfQ0hFQ0tfTElCQ19BIDo9IHRydWUiIHRvIGJ1aWxkc3BlYy5tawotV0lUSF9NQUxMT0NfQ0hFQ0tfTElCQ19BIDo9ICQoc3RyaXAgJChXSVRIX01BTExPQ19DSEVDS19MSUJDX0EpKQorbGliY19jb21tb25fY19pbmNsdWRlcyArPSBcCisgICAgJChMT0NBTF9QQVRIKS9zdGRpbyAgIFwKIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBsaWJiaW9uaWNfc3NwLmEgLSBzdGFjayBwcm90ZWN0b3IgY29kZQorIyBBZGQgaW4gdGhlIGFyY2gtc3BlY2lmaWMgZmxhZ3MuCisjIE11c3QgYmUgY2FsbGVkIHdpdGggJChldmFsKS4KKyMgJCgxKTogdGhlIExPQ0FMXyB2YXJpYWJsZSBuYW1lCisjICQoMik6IHRoZSBiaW9uaWMgdmFyaWFibGUgbmFtZSB0byBwdWxsIGluCitkZWZpbmUgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncworJCgxKV8kKFRBUkdFVF9BUkNIKSArPSAkKCQoMilfJChUQVJHRVRfQVJDSCkpCitpZmRlZiBUQVJHRVRfMk5EX0FSQ0gKKyQoMSlfJChUQVJHRVRfMk5EX0FSQ0gpICs9ICQoJCgyKV8kKFRBUkdFVF8yTkRfQVJDSCkpCitlbmRpZgorZW5kZWYKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGxpYmNfc3RhY2tfcHJvdGVjdG9yLmEgLSBzdGFjayBwcm90ZWN0b3IgY29kZQogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIwogIyBUaGUgc3RhY2sgcHJvdGVjdG9yIGNvZGUgbmVlZHMgdG8gYmUgY29tcGlsZWQKQEAgLTc5NywxNCArNTc3LDE2IEBACiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAogTE9DQUxfU1JDX0ZJTEVTIDo9IGJpb25pYy9fX3N0YWNrX2Noa19mYWlsLmNwcAotTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKSAtZm5vLXN0YWNrLXByb3RlY3RvciAtV2Vycm9yCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIC1mbm8tc3RhY2stcHJvdGVjdG9yCiBMT0NBTF9DT05MWUZMQUdTIDo9ICQobGliY19jb21tb25fY29ubHlmbGFncykKIExPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCiBMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKLUxPQ0FMX01PRFVMRSA6PSBsaWJiaW9uaWNfc3NwCitMT0NBTF9NT0RVTEUgOj0gbGliY19zdGFja19wcm90ZWN0b3IKK0xPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIAogCkBAIC04MTQsMjAgKzU5NiwzNSBAQAogCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAotTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliY190emNvZGVfc3JjX2ZpbGVzKQotTE9DQUxfQ0ZMQUdTIDo9IFwKLSAgICAkKGxpYmNfY29tbW9uX2NmbGFncykgXAotICAgIC1EU1REX0lOU1BJUkVEPTEgXAotICAgIC1EVFpESVI9XCIvc3lzdGVtL3Vzci9zaGFyZS96b25laW5mb1wiIFwKLSAgICAtRFRNX0dNVE9GRj10bV9nbXRvZmYgXAotICAgIC1EVVNHX0NPTVBBVD0xCitMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1jLWZpbGVzLXVuZGVyLHR6Y29kZSkKKyMgdHpjb2RlIGRvZXNuJ3QgaW5jbHVkZSB3Y3NmdGltZSwgc28gd2UgdXNlIHRoZSBPcGVuQlNEIG9uZS4KK0xPQ0FMX1NSQ19GSUxFUyArPSB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3RpbWUvd2NzZnRpbWUuYworCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKKyAgICAtZnZpc2liaWxpdHk9aGlkZGVuIFwKKworIyBEb24ndCB1c2UgcmlkaWN1bG91cyBhbW91bnRzIG9mIHN0YWNrLgorTE9DQUxfQ0ZMQUdTICs9IC1EQUxMX1NUQVRFCisjIEluY2x1ZGUgdHpzZXR3YWxsLCB0aW1lbG9jYWwsIHRpbWVnbSwgdGltZTJwb3NpeCwgYW5kIHBvc2l4MnRpbWUuCitMT0NBTF9DRkxBR1MgKz0gLURTVERfSU5TUElSRUQKKyMgVGhlIG5hbWUgb2YgdGhlIHRtX2dtdG9mZiBmaWVsZCBpbiBvdXIgc3RydWN0IHRtLgorTE9DQUxfQ0ZMQUdTICs9IC1EVE1fR01UT0ZGPXRtX2dtdG9mZgorIyBXaGVyZSB3ZSBzdG9yZSBvdXIgdHpkYXRhLgorTE9DQUxfQ0ZMQUdTICs9IC1EVFpESVI9XCIvc3lzdGVtL3Vzci9zaGFyZS96b25laW5mb1wiCisjIEluY2x1ZGUgdGltZXpvbmUgYW5kIGRheWxpZ2h0IGdsb2JhbHMuCitMT0NBTF9DRkxBR1MgKz0gLURVU0dfQ09NUEFUPTEKK0xPQ0FMX0NGTEFHUyArPSAtRE5PX1JVTl9USU1FX1dBUk5JTkdTX0FCT1VUX1lFQVJfMjAwMF9QUk9CTEVNU19USEFOS19ZT1UKK0xPQ0FMX0NGTEFHUyArPSAtRGxpbnQKKwogTE9DQUxfQ09OTFlGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MpCiBMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQotTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykgJChMT0NBTF9QQVRIKS90emNvZGUvCiBMT0NBTF9NT0RVTEUgOj0gbGliY190emNvZGUKK0xPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIAogCkBAIC04MzcsMjAgKzYzNCwzMyBAQAogCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAotTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliY19kbnNfc3JjX2ZpbGVzKQorTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKyAgICAkKGNhbGwgYWxsLWMtZmlsZXMtdW5kZXIsZG5zKSBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2lzYy9ldl9zdHJlYW1zLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pc2MvZXZfdGltZXJzLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZXNvbHYvbXRjdHhyZXMuYyBcCisKIExPQ0FMX0NGTEFHUyA6PSBcCiAgICAgJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKKyAgICAtREFORFJPSURfQ0hBTkdFUyBcCiAgICAgLURJTkVUNiBcCisgICAgLWZ2aXNpYmlsaXR5PWhpZGRlbiBcCisgICAgLVduby11bnVzZWQtcGFyYW1ldGVyIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvZG5zL2luY2x1ZGUgXAogICAgIC1JJChMT0NBTF9QQVRIKS9wcml2YXRlIFwKLSAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZSAjIGZvciBOZXRCU0QgcHJpdmF0ZSBoZWFkZXJzCisgICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZSBcCisgICAgLWluY2x1ZGUgbmV0YnNkLWNvbXBhdC5oIFwKIAogTE9DQUxfQ09OTFlGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MpCiBMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQogTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCiBMT0NBTF9NT0RVTEUgOj0gbGliY19kbnMKK0xPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIAogCkBAIC04NjYsMTYgKzY3NiwyMCBAQAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliY191cHN0cmVhbV9mcmVlYnNkX3NyY19maWxlcykKIExPQ0FMX0NGTEFHUyA6PSBcCiAgICAgJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKLSAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tZnJlZWJzZCBcCi0gICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLWZyZWVic2QvbGliYy9pbmNsdWRlIFwKLSAgICAtaW5jbHVkZSB1cHN0cmVhbS1mcmVlYnNkL2ZyZWVic2QtY29tcGF0LmgKKyAgICAtV25vLXNpZ24tY29tcGFyZSAtV25vLXVuaW5pdGlhbGl6ZWQgXAorICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvaW5jbHVkZSBcCisgICAgLWluY2x1ZGUgZnJlZWJzZC1jb21wYXQuaCBcCisKIExPQ0FMX0NPTkxZRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jb25seWZsYWdzKQogTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKIExPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQogTE9DQUxfTU9EVUxFIDo9IGxpYmNfZnJlZWJzZAorTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQogCiAKQEAgLTg5MSwxNyArNzA1LDg1IEBACiBMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJjX3Vwc3RyZWFtX25ldGJzZF9zcmNfZmlsZXMpCiBMT0NBTF9DRkxBR1MgOj0gXAogICAgICQobGliY19jb21tb25fY2ZsYWdzKSBcCisgICAgLVduby1zaWduLWNvbXBhcmUgLVduby11bmluaXRpYWxpemVkIFwKICAgICAtRFBPU0lYX01JU1RBS0UgXAotICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1uZXRic2QgXAotICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlIFwKLSAgICAtaW5jbHVkZSB1cHN0cmVhbS1uZXRic2QvbmV0YnNkLWNvbXBhdC5oCisgICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUgXAorICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5jbHVkZSBcCisgICAgLWluY2x1ZGUgbmV0YnNkLWNvbXBhdC5oIFwKKwogTE9DQUxfQ09OTFlGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MpCiBMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQogTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCiBMT0NBTF9NT0RVTEUgOj0gbGliY19uZXRic2QKK0xPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9TUkNfRklMRVMsbGliY19uZXRic2Rfc3JjX2ZpbGVzKSkKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGxpYmNfb3BlbmJzZC5hIC0gdXBzdHJlYW0gT3BlbkJTRCBDIGxpYnJhcnkgY29kZQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworIyBUaGVzZSBmaWxlcyBhcmUgYnVpbHQgd2l0aCB0aGUgb3BlbmJzZC1jb21wYXQuaCBoZWFkZXIgZmlsZQorIyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkLgorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliY191cHN0cmVhbV9vcGVuYnNkX3NyY19maWxlcykKK0xPQ0FMX0NGTEFHUyA6PSBcCisgICAgJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKKyAgICAtV25vLXNpZ24tY29tcGFyZSAtV25vLXVuaW5pdGlhbGl6ZWQgLVduby11bnVzZWQtcGFyYW1ldGVyIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvcHJpdmF0ZSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9pbmNsdWRlIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9pbmNsdWRlIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS8gXAorICAgIC1pbmNsdWRlIG9wZW5ic2QtY29tcGF0LmggXAorCitMT0NBTF9DT05MWUZMQUdTIDo9ICQobGliY19jb21tb25fY29ubHlmbGFncykKK0xPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKK0xPQ0FMX01PRFVMRSA6PSBsaWJjX29wZW5ic2QKK0xPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQorTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CisKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGxpYmNfZ2R0b2EuYSAtIHVwc3RyZWFtIE9wZW5CU0QgQyBsaWJyYXJ5IGdkdG9hIGNvZGUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgVGhlc2UgZmlsZXMgYXJlIGJ1aWx0IHdpdGggdGhlIG9wZW5ic2QtY29tcGF0LmggaGVhZGVyIGZpbGUKKyMgYXV0b21hdGljYWxseSBpbmNsdWRlZC4KKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFU18zMiA6PSAkKGxpYmNfdXBzdHJlYW1fb3BlbmJzZF9nZHRvYV9zcmNfZmlsZXNfMzIpCitMT0NBTF9TUkNfRklMRVNfNjQgOj0gJChsaWJjX3Vwc3RyZWFtX29wZW5ic2RfZ2R0b2Ffc3JjX2ZpbGVzXzY0KQorTE9DQUxfQ0ZMQUdTIDo9IFwKKyAgICAkKGxpYmNfY29tbW9uX2NmbGFncykgXAorICAgIC1Xbm8tc2lnbi1jb21wYXJlIC1Xbm8tdW5pbml0aWFsaXplZCBcCisgICAgLWZ2aXNpYmlsaXR5PWhpZGRlbiBcCisgICAgLUkkKExPQ0FMX1BBVEgpL3ByaXZhdGUgXAorICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvaW5jbHVkZSBcCisgICAgLWluY2x1ZGUgb3BlbmJzZC1jb21wYXQuaCBcCisKK0xPQ0FMX0NPTkxZRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jb25seWZsYWdzKQorTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQorTE9DQUxfTU9EVUxFIDo9IGxpYmNfZ2R0b2EKK0xPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQorTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CisKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIAogCkBAIC05MTIsMjIgKzc5NCw4MSBAQAogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKIExPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmNfYmlvbmljX3NyY19maWxlcykKLUxPQ0FMX0NGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NmbGFncykgLVdlcnJvcgorTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKSBcCisgICAgLVdmcmFtZS1sYXJnZXItdGhhbj0yMDQ4IFwKKwogTE9DQUxfQ09OTFlGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MpCiBMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQogTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCiBMT0NBTF9NT0RVTEUgOj0gbGliY19iaW9uaWMKK0xPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKLSMgU2V0IC1EUFRIUkVBRF9ERUJVR19FTkFCTEVEPXRydWUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHB0aHJlYWQgZGVhZGxvY2sgcHJlZGljdGlvbi4KLSMgU2luY2UgdGhpcyBjb2RlIGlzIGV4cGVyaW1lbnRhbCBpdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgotTE9DQUxfQ0ZMQUdTICs9ICQobGliY19jb21tb25fY2ZsYWdzKSAtRFBUSFJFQURfREVCVUdfRU5BQkxFRD1mYWxzZQorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX0NGTEFHUyxsaWJjX2NvbW1vbl9jZmxhZ3MpKQorJChldmFsICQoY2FsbCBwYXRjaC11cC1hcmNoLXNwZWNpZmljLWZsYWdzLExPQ0FMX1NSQ19GSUxFUyxsaWJjX2Jpb25pY19zcmNfZmlsZXMpKQoraW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGliY19jeGEuYSAtIFRoaW5ncyB0cmFkaXRpb25hbGx5IGluIGxpYnN0ZGMrKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliY19jeGFfc3JjX2ZpbGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKSBcCisgICAgLWZ2aXNpYmlsaXR5PWhpZGRlbiBcCisKK0xPQ0FMX0NPTkxZRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jb25seWZsYWdzKQorTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQorTE9DQUxfTU9EVUxFIDo9IGxpYmNfY3hhCisjIEdDQyByZWZ1c2VzIHRvIGhpZGUgbmV3L2RlbGV0ZQorTE9DQUxfQ0xBTkcgOj0gdHJ1ZQorTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIAogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGxpYmNfc3lzY2FsbHMuYQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTXyQoVEFSR0VUX0FSQ0gpIDo9ICQoY2FsbCBhbGwtUy1maWxlcy11bmRlcixhcmNoLSQoVEFSR0VUX0FSQ0gpL3N5c2NhbGxzKQoraWZkZWYgVEFSR0VUXzJORF9BUkNICitMT0NBTF9TUkNfRklMRVNfJChUQVJHRVRfMk5EX0FSQ0gpIDo9ICQoY2FsbCBhbGwtUy1maWxlcy11bmRlcixhcmNoLSQoVEFSR0VUXzJORF9BUkNIKS9zeXNjYWxscykKK2VuZGlmCitMT0NBTF9NT0RVTEUgOj0gbGliY19zeXNjYWxscworTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGliY19hZWFiaS5hCisjIFRoaXMgaXMgYW4gTFAzMiBBUk0tb25seSBsaWJyYXJ5IHRoYXQgbmVlZHMgdG8gYmUgYnVpbHQgd2l0aCAtZm5vLWJ1aWx0aW4KKyMgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uLiBGb3IgdGhlIG90aGVyIGFyY2hpdGVjdHVyZXMgd2UganVzdCBidWlsZCBhbgorIyBlbXB0eSBsaWJyYXJ5IHRvIGtlZXAgdGhpcyBtYWtlZmlsZSBzaW1wbGUuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVNfYXJtIDo9IGFyY2gtYXJtL2Jpb25pYy9fX2FlYWJpLmMKK0xPQ0FMX01PRFVMRSA6PSBsaWJjX2FlYWJpCitMT0NBTF9DTEFORyA6PSAkKHVzZV9jbGFuZykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NmbGFncykgLWZuby1idWlsdGluCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIGxpYmNfY29tbW9uLmEKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtOTM5LDIwICs4ODAsMzUgQEAKIExPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCiBMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKIExPQ0FMX01PRFVMRSA6PSBsaWJjX2NvbW1vbgorTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFUyA6PSBcCi0gICAgbGliYmlvbmljX3NzcCBcCiAgICAgbGliY19iaW9uaWMgXAorICAgIGxpYmNfY3hhIFwKICAgICBsaWJjX2RucyBcCiAgICAgbGliY19mcmVlYnNkIFwKKyAgICBsaWJjX2dkdG9hIFwKKyAgICBsaWJjX21hbGxvYyBcCiAgICAgbGliY19uZXRic2QgXAorICAgIGxpYmNfb3BlbmJzZCBcCisgICAgbGliY19zdGFja19wcm90ZWN0b3IgXAorICAgIGxpYmNfc3lzY2FsbHMgXAogICAgIGxpYmNfdHpjb2RlIFwKIAorTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFU19hcm0gOj0gbGliY19hZWFiaQorCitpZm5lcSAoJChNQUxMT0NfSU1QTCksZGxtYWxsb2MpCitMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTICs9IGxpYmplbWFsbG9jCitlbmRpZgorCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQogCiAjIFRPRE86IHNwbGl0IG91dCB0aGUgYXNmbGFncy4KIExPQ0FMX0FTRkxBR1MgOj0gJChMT0NBTF9DRkxBR1MpCiAKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9TUkNfRklMRVMsbGliY19jb21tb25fc3JjX2ZpbGVzKSkKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9BU0ZMQUdTLExPQ0FMX0NGTEFHUykpCiBpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCiAKIApAQCAtOTYzLDI3ICs5MTksNDkgQEAKICMgVGhpcyBpcyBhIHZlcnNpb24gb2YgdGhlIHN0YXRpYyBDIGxpYnJhcnkgdGhhdCBkb2VzIG5vdAogIyBpbmNsdWRlIG1hbGxvYy4gSXQncyB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVuIHRoZSB1c2VyIHdhbnRzCiAjIHRvIHByb3ZpZGUgdGhlaXIgb3duIG1hbGxvYyBpbXBsZW1lbnRhdGlvbiwgb3Igd2FudHMgdG8KLSMgZXhwbGljaXRseSBkaXNhbGxvdyB0aGUgdXNlIG9mIHRoZSB1c2Ugb2YgbWFsbG9jLAotIyBzdWNoIGFzIGluIHRoZSBkeW5hbWljIGxvYWRlci4KKyMgZXhwbGljaXRseSBkaXNhbGxvdyB0aGUgdXNlIG9mIG1hbGxvYywgc3VjaCBhcyBpbiB0aGUKKyMgZHluYW1pYyBsaW5rZXIuCiAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCiBMT0NBTF9TUkNfRklMRVMgOj0gXAotCSQobGliY19hcmNoX3N0YXRpY19zcmNfZmlsZXMpIFwKLQkkKGxpYmNfc3RhdGljX2NvbW1vbl9zcmNfZmlsZXMpIFwKLQliaW9uaWMvbGliY19pbml0X3N0YXRpYy5jcHAKKyAgICAkKGxpYmNfYXJjaF9zdGF0aWNfc3JjX2ZpbGVzKSBcCisgICAgJChsaWJjX3N0YXRpY19jb21tb25fc3JjX2ZpbGVzKSBcCisgICAgYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuY3BwCiAKIExPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQogTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKSBcCi0gICAgICAgICAgICAgICAgLURMSUJDX1NUQVRJQworICAgIC1ETElCQ19TVEFUSUMgXAorCiBMT0NBTF9DT05MWUZMQUdTIDo9ICQobGliY19jb21tb25fY29ubHlmbGFncykKIExPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCiAKIExPQ0FMX01PRFVMRSA6PSBsaWJjX25vbWFsbG9jCitMT0NBTF9DTEFORyA6PSAkKHVzZV9jbGFuZykKIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQobGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCiBMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmNfY29tbW9uCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQogCiskKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfQ0ZMQUdTLGxpYmNfY29tbW9uX2NmbGFncykpCiskKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfU1JDX0ZJTEVTLGxpYmNfYXJjaF9zdGF0aWNfc3JjX2ZpbGVzKSkKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGxpYmNfbWFsbG9jLmE6IHRoZSBfcHJlZml4ZWRfIG1hbGxvYyBmdW5jdGlvbnMgKGxpa2UgZGxjYWxsb2MpLgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmNfbWFsbG9jX3NyYykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NmbGFncykgXAorICAgIC1mdmlzaWJpbGl0eT1oaWRkZW4gXAorCitMT0NBTF9DT05MWUZMQUdTIDo9ICQobGliY19jb21tb25fY29ubHlmbGFncykKK0xPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKK0xPQ0FMX01PRFVMRSA6PSBsaWJjX21hbGxvYworTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQogCiAKQEAgLTk5MywyMiArOTcxLDI1IEBACiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAogTE9DQUxfU1JDX0ZJTEVTIDo9IFwKLQkkKGxpYmNfYXJjaF9zdGF0aWNfc3JjX2ZpbGVzKSBcCi0JJChsaWJjX3N0YXRpY19jb21tb25fc3JjX2ZpbGVzKSBcCi0JYmlvbmljL2RsbWFsbG9jLmMgXAotCWJpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmNwcCBcCi0JYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuY3BwCisgICAgJChsaWJjX2FyY2hfc3RhdGljX3NyY19maWxlcykgXAorICAgICQobGliY19zdGF0aWNfY29tbW9uX3NyY19maWxlcykgXAorICAgIGJpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmNwcCBcCisgICAgYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuY3BwIFwKIAogTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKSBcCi0gICAgICAgICAgICAgICAgLURMSUJDX1NUQVRJQworICAgIC1ETElCQ19TVEFUSUMgXAorCiBMT0NBTF9DT05MWUZMQUdTIDo9ICQobGliY19jb21tb25fY29ubHlmbGFncykKIExPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCiBMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKIExPQ0FMX01PRFVMRSA6PSBsaWJjCitMT0NBTF9DTEFORyA6PSAkKHVzZV9jbGFuZykKIExPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQobGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMpCiBMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmNfY29tbW9uCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQogCiskKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfQ0ZMQUdTLGxpYmNfY29tbW9uX2NmbGFncykpCiskKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfU1JDX0ZJTEVTLGxpYmNfYXJjaF9zdGF0aWNfc3JjX2ZpbGVzKSkKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIAogCkBAIC0xMDIxLDQ0ICsxMDAyLDUyIEBACiBMT0NBTF9DT05MWUZMQUdTIDo9ICQobGliY19jb21tb25fY29ubHlmbGFncykKIExPQ0FMX0NQUEZMQUdTIDo9ICQobGliY19jb21tb25fY3BwZmxhZ3MpCiBMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKLQogTE9DQUxfU1JDX0ZJTEVTIDo9IFwKICAgICAkKGxpYmNfYXJjaF9keW5hbWljX3NyY19maWxlcykgXAogICAgICQobGliY19zdGF0aWNfY29tbW9uX3NyY19maWxlcykgXAotICAgIGJpb25pYy9kbG1hbGxvYy5jIFwKICAgICBiaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAgXAotICAgIGJpb25pYy9kZWJ1Z19tYXBpbmZvLmNwcCBcCi0gICAgYmlvbmljL2RlYnVnX3N0YWNrdHJhY2UuY3BwIFwKLSAgICBiaW9uaWMvcHRocmVhZF9kZWJ1Zy5jcHAgXAogICAgIGJpb25pYy9saWJjX2luaXRfZHluYW1pYy5jcHAgXAorICAgIGJpb25pYy9OZXRkQ2xpZW50LmNwcCBcCiAKLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLGFybSkKLQlMT0NBTF9OT19DUlQgOj0gdHJ1ZQotCUxPQ0FMX0NGTEFHUyArPSAtRENSVF9MRUdBQ1lfV09SS0FST1VORAotCi0JTE9DQUxfU1JDX0ZJTEVTIDo9IFwKLQkJYXJjaC1jb21tb24vYmlvbmljL2NydGJlZ2luX3NvLmMgXAotCQlhcmNoLWFybS9iaW9uaWMvYXRleGl0X2xlZ2FjeS5jIFwKLQkJJChMT0NBTF9TUkNfRklMRVMpIFwKLQkJYXJjaC1jb21tb24vYmlvbmljL2NydGVuZF9zby5TCi1lbmRpZgotCi1MT0NBTF9NT0RVTEU6PSBsaWJjCitMT0NBTF9NT0RVTEUgOj0gbGliYworTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSB0emRhdGEKIAorIyBMZWF2ZSB0aGUgc3ltYm9scyBpbiB0aGUgc2hhcmVkIGxpYnJhcnkgc28gdGhhdCBzdGFjayB1bndpbmRlcnMgY2FuIHByb2R1Y2UKKyMgbWVhbmluZ2Z1bCBuYW1lIHJlc29sdXRpb24uCitMT0NBTF9TVFJJUF9NT0RVTEUgOj0ga2VlcF9zeW1ib2xzCisKICMgV0FSTklORzogVGhlIG9ubHkgbGlicmFyeSBsaWJjLnNvIHNob3VsZCBkZXBlbmQgb24gaXMgbGliZGwuc28hICBJZiB5b3UgYWRkIG90aGVyIGxpYnJhcmllcywKICMgbWFrZSBzdXJlIHRvIGFkZCAtV2wsLS1leGNsdWRlLWxpYnM9bGliZ2NjLmEgdG8gdGhlIExPQ0FMX0xERkxBR1MgZm9yIHRob3NlIGxpYnJhcmllcy4gIFRoaXMKICMgZW5zdXJlcyB0aGF0IHN5bWJvbHMgdGhhdCBhcmUgcHVsbGVkIGludG8gdGhvc2UgbmV3IGxpYnJhcmllcyBmcm9tIGxpYmdjYy5hIGFyZSBub3QgZGVjbGFyZWQKICMgZXh0ZXJuYWw7IGlmIHRoYXQgd2VyZSB0aGUgY2FzZSwgdGhlbiBsaWJjIHdvdWxkIG5vdCBwdWxsIHRob3NlIHN5bWJvbHMgZnJvbSBsaWJnY2MuYSBhcyBpdAogIyBzaG91bGQsIGluc3RlYWQgcmVseWluZyBvbiB0aGUgZXh0ZXJuYWwgc3ltYm9scyBmcm9tIHRoZSBkZXBlbmRlbnQgbGlicmFyaWVzLiAgVGhhdCB3b3VsZAotIyBjcmVhdGUgYW4gImNsb2FrZWQiIGRlcGVuZGVuY3kgb24gbGliZ2NjLmEgaW4gbGliYyB0aG91Z2ggdGhlIGxpYnJhcmllcywgd2hpY2ggaXMgbm90IHdoYXQKKyMgY3JlYXRlIGEgImNsb2FrZWQiIGRlcGVuZGVuY3kgb24gbGliZ2NjLmEgaW4gbGliYyB0aG91Z2ggdGhlIGxpYnJhcmllcywgd2hpY2ggaXMgbm90IHdoYXQKICMgeW91IHdhbnRlZCEKIAogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJkbAogTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJjX2NvbW1vbgogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAorIyBXZSdkIHJlYWxseSBsaWtlIHRvIGRvIHRoaXMgZm9yIGFsbCBhcmNoaXRlY3R1cmVzLCBidXQgc2luY2UgdGhpcyB3YXNuJ3QgZG9uZQorIyBiZWZvcmUsIHRoZXNlIHN5bWJvbHMgbXVzdCBjb250aW51ZSB0byBiZSBleHBvcnRlZCBvbiBMUDMyIGZvciBiaW5hcnkKKyMgY29tcGF0aWJpbGl0eS4KK0xPQ0FMX0xERkxBR1NfYXJtNjQgOj0gLVdsLC0tZXhjbHVkZS1saWJzLGxpYmdjYy5hCitMT0NBTF9MREZMQUdTX21pcHM2NCA6PSAtV2wsLS1leGNsdWRlLWxpYnMsbGliZ2NjLmEKK0xPQ0FMX0xERkxBR1NfeDg2XzY0IDo9IC1XbCwtLWV4Y2x1ZGUtbGlicyxsaWJnY2MuYQorCiskKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfQ0ZMQUdTLGxpYmNfY29tbW9uX2NmbGFncykpCiskKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfU1JDX0ZJTEVTLGxpYmNfYXJjaF9keW5hbWljX3NyY19maWxlcykpCiskKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfU1JDX0ZJTEVTLGxpYmNfc3RhdGljX2NvbW1vbl9zcmNfZmlsZXMpKQorIyBzcGVjaWFsIGZvciBhcm0KK0xPQ0FMX05PX0NSVF9hcm0gOj0gdHJ1ZQorTE9DQUxfQ0ZMQUdTX2FybSArPSAtRENSVF9MRUdBQ1lfV09SS0FST1VORAorTE9DQUxfU1JDX0ZJTEVTX2FybSArPSBcCisgICAgYXJjaC1jb21tb24vYmlvbmljL2NydGJlZ2luX3NvLmMgXAorICAgIGFyY2gtYXJtL2Jpb25pYy9hdGV4aXRfbGVnYWN5LmMgXAorICAgIGFyY2gtY29tbW9uL2Jpb25pYy9jcnRlbmRfc28uUworCiBpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCiAKIApAQCAtMTA3NiwzMCArMTA2NSwzOCBAQAogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKIExPQ0FMX0NGTEFHUyA6PSBcCi0JJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKLQktRE1BTExPQ19MRUFLX0NIRUNLCisgICAgJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKKyAgICAtRE1BTExPQ19MRUFLX0NIRUNLIFwKKwogTE9DQUxfQ09OTFlGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2Nvbmx5ZmxhZ3MpCiBMT0NBTF9DUFBGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NwcGZsYWdzKQogCi1MT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKKyMgTWFrZSBzdXJlIHRoYXQgdW53aW5kLmggY29tZXMgZnJvbSBsaWJ1bndpbmQuCitMT0NBTF9DX0lOQ0xVREVTIDo9IFwKKyAgICAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpIFwKIAogTE9DQUxfU1JDX0ZJTEVTIDo9IFwKLQliaW9uaWMvZGVidWdfbWFwaW5mby5jcHAgXAotCWJpb25pYy9kZWJ1Z19zdGFja3RyYWNlLmNwcCBcCi0JYmlvbmljL21hbGxvY19kZWJ1Z19sZWFrLmNwcCBcCi0JYmlvbmljL21hbGxvY19kZWJ1Z19jaGVjay5jcHAgXAorICAgIGJpb25pYy9kZWJ1Z19tYXBpbmZvLmNwcCBcCisgICAgYmlvbmljL2RlYnVnX3N0YWNrdHJhY2UuY3BwIFwKKyAgICBiaW9uaWMvbGliY19sb2dnaW5nLmNwcCBcCisgICAgYmlvbmljL21hbGxvY19kZWJ1Z19sZWFrLmNwcCBcCisgICAgYmlvbmljL21hbGxvY19kZWJ1Z19jaGVjay5jcHAgXAogCi1MT0NBTF9NT0RVTEU6PSBsaWJjX21hbGxvY19kZWJ1Z19sZWFrCitMT0NBTF9NT0RVTEUgOj0gbGliY19tYWxsb2NfZGVidWdfbGVhaworTE9DQUxfQ0xBTkcgOj0gJCh1c2VfY2xhbmcpCiBMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKGxpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzKQogCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMgbGliZGwKLUxPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19jb21tb24KIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CisjIE9ubHkgbmVlZCB0aGlzIGZvciBhcm0gc2luY2UgbGliYysrIHVzZXMgaXRzIG93biB1bndpbmQgY29kZSB0aGF0CisjIGRvZXNuJ3QgbWl4IHdpdGggdGhlIG90aGVyIGRlZmF1bHQgdW53aW5kIGNvZGUuCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTX2FybSA6PSBsaWJjKysKIExPQ0FMX0FMTE9XX1VOREVGSU5FRF9TWU1CT0xTIDo9IHRydWUKIAogIyBEb24ndCBpbnN0YWxsIG9uIHJlbGVhc2UgYnVpbGQKIExPQ0FMX01PRFVMRV9UQUdTIDo9IGVuZyBkZWJ1ZwogCiskKGV2YWwgJChjYWxsIHBhdGNoLXVwLWFyY2gtc3BlY2lmaWMtZmxhZ3MsTE9DQUxfQ0ZMQUdTLGxpYmNfY29tbW9uX2NmbGFncykpCiBpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCiAKIApAQCAtMTEwOSwyOSArMTEwNiw2MiBAQAogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKIExPQ0FMX0NGTEFHUyA6PSBcCi0JJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKLQktRE1BTExPQ19RRU1VX0lOU1RSVU1FTlQKKyAgICAkKGxpYmNfY29tbW9uX2NmbGFncykgXAorICAgIC1ETUFMTE9DX1FFTVVfSU5TVFJVTUVOVCBcCisKIExPQ0FMX0NPTkxZRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jb25seWZsYWdzKQogTE9DQUxfQ1BQRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jcHBmbGFncykKIAogTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCiAKIExPQ0FMX1NSQ19GSUxFUyA6PSBcCi0JYmlvbmljL21hbGxvY19kZWJ1Z19xZW11LmNwcAorICAgIGJpb25pYy9saWJjX2xvZ2dpbmcuY3BwIFwKKyAgICBiaW9uaWMvbWFsbG9jX2RlYnVnX3FlbXUuY3BwIFwKIAotTE9DQUxfTU9EVUxFOj0gbGliY19tYWxsb2NfZGVidWdfcWVtdQorTE9DQUxfTU9EVUxFIDo9IGxpYmNfbWFsbG9jX2RlYnVnX3FlbXUKK0xPQ0FMX0NMQU5HIDo9ICQodXNlX2NsYW5nKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChsaWJjX2NvbW1vbl9hZGRpdGlvbmFsX2RlcGVuZGVuY2llcykKIAogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjIGxpYmRsCi1MT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmNfY29tbW9uCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQogCiAjIERvbid0IGluc3RhbGwgb24gcmVsZWFzZSBidWlsZAogTE9DQUxfTU9EVUxFX1RBR1MgOj0gZW5nIGRlYnVnCiAKKyQoZXZhbCAkKGNhbGwgcGF0Y2gtdXAtYXJjaC1zcGVjaWZpYy1mbGFncyxMT0NBTF9DRkxBR1MsbGliY19jb21tb25fY2ZsYWdzKSkKIGluY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKIAotZW5kaWYJIyF1c2VyCitlbmRpZiAgIyF1c2VyCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGlic3RkYysrLnNvCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitsaWJzdGRjeHhfY29tbW9uX3NyY19maWxlcyA6PSBcCisgICAgYmlvbmljL19fY3hhX2d1YXJkLmNwcCBcCisgICAgYmlvbmljL19fY3hhX3B1cmVfdmlydHVhbC5jcHAgXAorICAgIGJpb25pYy9uZXcuY3BwIFwKKyAgICBiaW9uaWMvbGliY19sb2dnaW5nLmNwcCBcCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJzdGRjeHhfY29tbW9uX3NyY19maWxlcykKK0xPQ0FMX01PRFVMRTo9IGxpYnN0ZGMrKworTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCitMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGlic3RkYysrLmEKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJzdGRjeHhfY29tbW9uX3NyY19maWxlcykKK0xPQ0FMX01PRFVMRTo9IGxpYnN0ZGMrKworTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCitMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCiAKIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvbGliYy9OT1RJQ0UgYi9saWJjL05PVElDRQppbmRleCBhNzM3MDAxLi44MGQ5YTI3IDEwMDY0NAotLS0gYS9saWJjL05PVElDRQorKysgYi9saWJjL05PVElDRQpAQCAtMSwzICsxLDkwIEBACisgICBDb3B5cmlnaHQgKGMpIDIwMTQsIExpbmFybyBMaW1pdGVkCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTGluYXJvIG5vciB0aGUKKyAgICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgc3RyY2hyIC0gZmluZCBhIGNoYXJhY3RlciBpbiBhIHN0cmluZworCisgICBDb3B5cmlnaHQgKGMpIDIwMTQsIEFSTSBMaW1pdGVkCisgICBBbGwgcmlnaHRzIFJlc2VydmVkLgorICAgQ29weXJpZ2h0IChjKSAyMDE0LCBMaW5hcm8gTHRkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29tcGFueSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICAgICAgICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBDb3B5cmlnaHQgKGMpIDE5OTMgSm9obiBCcmV6YWsKKyBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgYXJlIG1ldDoKKyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KK0FOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApAQCAtOCw2ICs5NSwzOCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0Jhc2VkIG9uIHRoZSBVQ0IgdmVyc2lvbiB3aXRoIHRoZSBJRCBhcHBlYXJpbmcgYmVsb3cuCitUaGlzIGlzIEFOU0lpc2ggb25seSB3aGVuICJtdWx0aWJ5dGUgY2hhcmFjdGVyID09IHBsYWluIGNoYXJhY3RlciIuCisKK0NvcHlyaWdodCAoYykgMTk4OSwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCBhbmQgMTk5OCBXSURFIFByb2plY3QuCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC03MiwxNCArMTkxLDc0IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIENvcHlyaWdodCAoQykgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKK09GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cit5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCitZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICAgIGRpc3RyaWJ1dGlvbi4KQEAgLTEwMSwxMyArMjgwLDE0IEBACiAKIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiBBbGwgcmlnaHRzIHJlc2VydmVkLgorQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQsIE5WSURJQSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtMTMzLDkgKzMxMyw5IEBACiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICAgIGRpc3RyaWJ1dGlvbi4KQEAgLTE1NiwxNCArMzM2LDMwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICAgIGRpc3RyaWJ1dGlvbi4KQEAgLTIwNSw5ICs0MDEsOSBAQAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6Ci1SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAgICBkaXN0cmlidXRpb24uCkBAIC0yODAsOSArNDc2LDkgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtMzI0LDkgKzUyMCw5IEBACiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICAgIGRpc3RyaWJ1dGlvbi4KQEAgLTM2OCw5ICs1NjQsMTExIEBACiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKK09GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCitDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBOVklESUEgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKK09GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCitPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitDb3B5cmlnaHQgKGMpIDIwMTQsIE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKK09GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCitPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAgICBkaXN0cmlidXRpb24uCkBAIC00NDIsMzUgKzc0MCw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChjKSAxOTgwLCAxOTkzCi0gICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1PUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi1MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi1TVUNIIERBTUFHRS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC01NjMsMzUgKzgzMiw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg4LCAxOTkzCi0gICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1PUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi1MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi1TVUNIIERBTUFHRS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5ODkKICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC02NjUsMTEgKzkwNSw3IEBACiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLTQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIApAQCAtNjg1LDYgKzkyMSwyNCBAQAogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogU1VDSCBEQU1BR0UuCiAKK1BvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAordGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKK3B1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKK1dBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCitQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCitTT0ZUV0FSRS4KKwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKQEAgLTEwOTksMzUgKzEzNTMsNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKLSAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1PUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi1MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi1TVUNIIERBTUFHRS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Db3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyMzIsNyArMTQ1Nyw3IEBACiBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBCZXJrZWxleS4gVGhlIG5hbWUgb2YgdGhlCiBVbml2ZXJzaXR5IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAogZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIApAQCAtMTM2MSwxMSArMTU4Niw5IEBACiAKIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MwogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0oYykgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCi1BbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAotdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaAotQ28uIG9yIFVuaXggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLiBhbmQgYXJlIHJlcHJvZHVjZWQgaGVyZWluIHdpdGgKLXRoZSBwZXJtaXNzaW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorCitUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CitSb2dlciBMLiBTbnlkZXIuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDAxLDkgKzE2MjQsNiBAQAogQ28uIG9yIFVuaXggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLiBhbmQgYXJlIHJlcHJvZHVjZWQgaGVyZWluIHdpdGgKIHRoZSBwZXJtaXNzaW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgogCi1UaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci1QYXVsIEJvcm1hbiBhdCBLcnlzdGFsIFRlY2hub2xvZ2llcy4KLQogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6CkBAIC0xNDEyLDcgKzE2MzIsNyBAQAogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi00LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKQEAgLTE3MDcsNiArMTkyNywzOCBAQAogCiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CitEb25uIFNlZWxleSBhdCBVVU5FVCBUZWNobm9sb2dpZXMsIEluYy4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCis0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKQEAgLTE4MDAsNiArMjA1MiwzNSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoYykgMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC0yMTMwLDQ0ICsyNDExLDYgQEAKIAogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IHRoZSBDb21wdXRlciBTeXN0ZW1zIEVuZ2luZWVyaW5nIGdyb3VwCi1hdCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IHVuZGVyIERBUlBBIGNvbnRyYWN0IEJHIDkxLTY2IGFuZAotY29udHJpYnV0ZWQgdG8gQmVya2VsZXkuCi0KLUFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICAgQ2FsaWZvcm5pYSwgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeS4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1PUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi1MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi1TVUNIIERBTUFHRS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Db3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKLSAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKQEAgLTIzNjUsOTIgKzI2MDgsMzAgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKGMpIDE5OTQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1UaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgotYnkgQ2hyaXN0b3MgWm91bGFzLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwotYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi1UTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUwotQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi1BUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ29weXJpZ2h0IChjKSAxOTk1IC0gMjAwMSBLdW5nbGlnYSBUZWtuaXNrYSBIw7Znc2tvbGFuCi0oUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4KK0NvcHlyaWdodCAoYykgMTk5NCBTaWdtYVNvZnQsIFRoLiBMb2NrZXJ0IDx0aG9sb0BzaWdtYXNvZnQuY29tPgogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6Ci0KLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnN0aXR1dGUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi1BUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1PUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi1MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi1TVUNIIERBTUFHRS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Db3B5cmlnaHQgKGMpIDE5OTUgQWxleCBUYXRtYW5qYW50cyA8YWxleEBlbHZpc3RpLmtpZXYudWE+Ci0gICAgICAgYXQgRWxlY3Ryb25uaSBWaXN0aSBJQSwgS2lldiwgVWtyYWluZS4KLSAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6CiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRQotRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1PUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi1MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi1TVUNIIERBTUFHRS4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CitPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yNTAwLDYgKzI2ODEsMjQgQEAKIAogQ29weXJpZ2h0IChjKSAxOTk2LCBEYXZpZCBNYXppZXJlcyA8ZG1AdXVuLm9yZz4KIENvcHlyaWdodCAoYykgMjAwOCwgRGFtaWVuIE1pbGxlciA8ZGptQG9wZW5ic2Qub3JnPgorQ29weXJpZ2h0IChjKSAyMDEzLCBNYXJrdXMgRnJpZWRsIDxtYXJrdXNAb3BlbmJzZC5vcmc+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OCwgMjAwOCBUaGVvIGRlIFJhYWR0CitDb3B5cmlnaHQgKGMpIDE5OTcsIDIwMDgtMjAwOSBUb2RkIEMuIE1pbGxlcgogCiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTI2NDUsNiArMjg0NCwzMyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoYykgMTk5NyBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKK0lOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwKK1RIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApAQCAtMjY5NCwxMyArMjkyMCw2IEBACiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAotICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCi00LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRApAQCAtMjc1Miw0MiArMjk3MSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4LCAyMDAzIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KLWJ5IEouVC4gQ29ua2xpbiwgYnkgTmF0aGFuIEouIFdpbGxpYW1zLCBhbmQgYnkgSmFzb24gUi4gVGhvcnBlLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAotICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCi00LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKLWBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLVBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKLUJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi1TVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi1DT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIENvcHlyaWdodCAoYykgMTk5NywgMjAwNSBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KIAogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CkBAIC0yOTgwLDM1ICszMTYzLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKGMpIDE5OTkgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1UaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgotYnkgTWljaGFlbCBHcmFmZi4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKLWBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLVBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKLUJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi1TVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi1DT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIENvcHlyaWdodCAoYykgMjAwMCBCZW4gSGFycmlzLgogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCBhbmQgMTk5OCBXSURFIFByb2plY3QuCiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMzMxNCwxMyArMzQ2OCw2IEBACiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLTMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAotICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCi00LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRApAQCAtMzM2Miw2ICszNTA5LDMyIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChjKSAyMDAyIFRpbSBKLiBSb2JiaW5zLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoYykgMjAwMiBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KIAogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CkBAIC0zMzgyLDYgKzM1NTUsODQgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgVGltIEouIFJvYmJpbnMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgVGltIEouIFJvYmJpbnMKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBUaW0gSi4gUm9iYmlucy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgKGMpIDIwMDMgQ29uc3RhbnRpbiBTLiBTdmludHNvZmYgPGtvc3Rpa0BpY2x1Yi5uc3UucnU+CiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzQxMCw2ICszNjYxLDMyIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChjKSAyMDAzIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgKGMpIDIwMDMgTmV0d29ya3MgQXNzb2NpYXRlcyBUZWNobm9sb2d5LCBJbmMuCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC0zNjUxLDYgKzM5MjgsMzIgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoYykgMjAwNSBUaW0gSi4gUm9iYmlucy4KIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTM3OTksNiArNDEwMiwyMiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoYykgMjAwOCwgRGFtaWVuIE1pbGxlciA8ZGptQG9wZW5ic2Qub3JnPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKK09SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChjKSAyMDA5CiAgICAgIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuLCBDYWxpZm9ybmlhLgogCkBAIC0zODMxLDYgKzQxNTAsMzcgQEAKIENvcHlyaWdodCAoYykgMjAwOSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5vcmc+CiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCitDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1BvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgYnkgRGF2aWQgQ2hpc25hbGwKK3VuZGVyIHNwb25zb3JzaGlwIGZyb20gdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwOSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5vcmc+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKQEAgLTM4ODksMTMgKzQyMzksMTMgQEAKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKIAotICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgogICAgICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aAogICAgICAgIHRoZSBkaXN0cmlidXRpb24uCi0gICAgTmVpdGhlciB0aGUgbmFtZSBvZiBNSVBTIFRlY2hub2xvZ2llcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBNSVBTIFRlY2hub2xvZ2llcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCkBAIC0zOTEzLDIyICs0MjYzLDM4IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChjKSAyMDEwIFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKK09SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChjKSAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEludGVsIENvcnBvcmF0aW9uCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogCi0gICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIAotICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIAotICAgTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIAogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTM5NDksMTYgKzQzMTUsMTYgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAKLSAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogCi0gICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogCi0gICBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApAQCAtMzk3MywyMiArNDMzOSw3NSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoYykgMjAxMSBEYXZpZCBDaGlzbmFsbAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAxMSBFZCBTY2hvdXRlbiA8ZWRARnJlZUJTRC5vcmc+CisgICAgICAgICAgICAgICAgICAgRGF2aWQgQ2hpc25hbGwgPHRoZXJhdmVuQEZyZWVCU0Qub3JnPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoYykgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKIAotICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAKLSAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAKLSAgIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECkBAIC00MDM4LDE2ICs0NDU3LDE2IEBACiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogCi0gICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIAotICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIAotICAgTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIAogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTQwNjgsMTYgKzQ0ODcsMTYgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAKLSAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogCi0gICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogCi0gICBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApAQCAtNDA5NywxMiArNDUxNiwxMiBAQAogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gICBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBWTXdhcmUsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBWTXdhcmUsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCiAgICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKICAgICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCkBAIC00MTE5LDYgKzQ1MzgsNjMgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb3B5cmlnaHQgKGMpIDIwMTIsIExpbmFybyBMaW1pdGVkCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTGluYXJvIG5vciB0aGUKKyAgICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDEyLCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIENvcHlyaWdodCAoYykgMjAxNCwgTlZJRElBIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoYykgMjAxMyBBUk0gTHRkCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC00MTQ3LDYzICs0NjIzLDE5IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChjKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgorQ29weXJpZ2h0IChjKSAyMDEzIEFudG9pbmUgSmFjb3V0b3QgPGFqYWNvdXRvdEBvcGVuYnNkLm9yZz4KIAotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KIAotICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCitPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTQyMTQsMTQgKzQ2NDYsMTQgQEAKICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICAgYXJlIG1ldDoKIAotICAgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogCi0gICAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogCi0gICAgIE5laXRoZXIgdGhlIG5hbWUgb2YgTGluYXJvIExpbWl0ZWQgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBMaW5hcm8gTGltaXRlZCBub3IgdGhlIG5hbWVzIG9mIGl0cwogICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAKQEAgLTQyMzksNiArNDY3MSw4NCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoYykgMjAxNCBUaGVvIGRlIFJhYWR0IDxkZXJhYWR0QG9wZW5ic2Qub3JnPgorQ29weXJpZ2h0IChjKSAyMDE0IEJvYiBCZWNrIDxiZWNrQG9idHVzZS5jb20+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworRW11bGF0aW9uIG9mIGdldGVudHJvcHkoMikgYXMgZG9jdW1lbnRlZCBhdDoKK2h0dHA6Ly93d3cub3BlbmJzZC5vcmcvY2dpLWJpbi9tYW4uY2dpL09wZW5CU0QtY3VycmVudC9tYW4yL2dldGVudHJvcHkuMgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAxNCwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgKGMpMTk5OSBDaXRydXMgUHJvamVjdCwKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTQyNjUsNiArNDc3NSwzMiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoYykxOTk5LCAyMDAwLCAyMDAxIENpdHJ1cyBQcm9qZWN0LAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoYykyMDAxIENpdHJ1cyBQcm9qZWN0LAogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApAQCAtNDI5MSwyMSArNDgyNyw5IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IDE5OTcgTmllbHMgUHJvdm9zIDxwcm92b3NAcGh5c25ldC51bmktaGFtYnVyZy5kZT4KLUNvcHlyaWdodCAyMDA4IERhbWllbiBNaWxsZXIgPGRqbUBvcGVuYnNkLm9yZz4KLUNvcHlyaWdodCAyMDA4IEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAodGhyZWFkLXNhZmV0eSkKK0NvcHlyaWdodCAoYykyMDAzIENpdHJ1cyBQcm9qZWN0LAogQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAotVGhlbyBkZSBSYWFkdCA8ZGVyYWFkdEBvcGVuYnNkLm9yZz4gY2FtZSB1cCB3aXRoIHRoZSBpZGVhIG9mIHVzaW5nCi1zdWNoIGEgbWF0aGVtYXRpY2FsIHN5c3RlbSB0byBnZW5lcmF0ZSBtb3JlIHJhbmRvbSAoeWV0IG5vbi1yZXBlYXRpbmcpCi1pZHMgdG8gc29sdmUgdGhlIHJlc29sdmVyL25hbWVkIHByb2JsZW0uICBCdXQgTmllbHMgZGVzaWduZWQgdGhlCi1hY3R1YWwgc3lzdGVtIGJhc2VkIG9uIHRoZSBjb25zdHJhaW50cy4KLQotTGF0ZXIgbW9kaWZpZWQgYnkgRGFtaWVuIE1pbGxlciB0byB3cmFwIHRoZSBMQ0cgb3V0cHV0IGluIGEgMTUtYml0Ci1wZXJtdXRhdGlvbiBnZW5lcmF0b3IgYmFzZWQgb24gYSBMdWJ5LVJhY2tvZmYgYmxvY2sgY2lwaGVyLiBUaGlzCi1lbnN1cmVzIHRoZSBvdXRwdXQgaXMgbm9uLXJlcGVhdGluZyBhbmQgcHJlc2VydmVzIHRoZSBNU0IgdHdpZGRsZQotdHJpY2ssIGJ1dCBtYWtlcyBpdCBtb3JlIHJlc2lzdGFudCB0byBMQ0cgcHJlZGljdGlvbi4KLQogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6CkBAIC00MzE1LDE2ICs0ODM5LDE3IEBACiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi1USEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLVRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC00MzUzLDMyICs0ODc4LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5Ci0gICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR29vZ2xlIEluYy4gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KLUVWRU5UIFNIQUxMIEdvb2dsZSBJbmMuIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi1TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi1QUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKLU9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAotV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKLU9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKLUFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIENvcHlyaWdodCAyMDA4ICBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKHNvdXJjZSBwb3J0IHJhbmRvbWl6YXRpb24pCiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5ODksIDE5OTMKICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtNDQxMyw2ICs0OTEyLDIzIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA4LCAyMDA5ICBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDMgIEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCitBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCitJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KK0xPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFCitPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCitQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KIAogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CkBAIC00NDg1LDE4ICs1MDAxLDE4OCBAQAogCiBUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgogCi1Db3B5cmlnaHQgKGMpIDE5OTEgYnkgQVQmVC4KK0NvcHlyaWdodCAoQykgMTk5OCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCiAKLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotcHVycG9zZSB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBub3RpY2UKLWlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgYW55IHNvZnR3YXJlIHdoaWNoIGlzIG9yIGluY2x1ZGVzIGEgY29weQotb3IgbW9kaWZpY2F0aW9uIG9mIHRoaXMgc29mdHdhcmUgYW5kIGluIGFsbCBjb3BpZXMgb2YgdGhlIHN1cHBvcnRpbmcKLWRvY3VtZW50YXRpb24gZm9yIHN1Y2ggc29mdHdhcmUuCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgogCi1USElTIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotV0FSUkFOVFkuICBJTiBQQVJUSUNVTEFSLCBORUlUSEVSIFRIRSBBVVRIT1IgTk9SIEFUJlQgTUFLRVMgQU5ZCi1SRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNRVJDSEFOVEFCSUxJVFkKLU9GIFRISVMgU09GVFdBUkUgT1IgSVRTIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDAgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OC0yMDAxIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbWVtY2hyIC0gZmluZCBhIGNoYXJhY3RlciBpbiBhIG1lbW9yeSB6b25lCisKK0NvcHlyaWdodCAoYykgMjAxNCwgQVJNIExpbWl0ZWQKK0FsbCByaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKGMpIDIwMTQsIExpbmFybyBMdGQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgICAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK0hPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvbGliYy9TWVNDQUxMUy5UWFQgYi9saWJjL1NZU0NBTExTLlRYVAppbmRleCAwOTUxNjQ4Li5jM2I3YmFiIDEwMDY0NAotLS0gYS9saWJjL1NZU0NBTExTLlRYVAorKysgYi9saWJjL1NZU0NBTExTLlRYVApAQCAtNiw3ICs2LDcgQEAKICMKICMgd2hlcmU6CiAjICAgICAgIGFyY2hfbGlzdCA6Oj0gImFsbCIgfCBhcmNoKwotIyAgICAgICBhcmNoICAgICAgOjo9ICJhcm0iIHwgImFybTY0IiB8ICJtaXBzIiB8ICJ4ODYiIHwgIng4Nl82NCIKKyMgICAgICAgYXJjaCAgICAgIDo6PSAiYXJtIiB8ICJhcm02NCIgfCAibWlwcyIgfCAibWlwczY0IiB8ICJ4ODYiIHwgIng4Nl82NCIKICMKICMgTm90ZToKICMgICAgICAtIHN5c2NhbGxfbmFtZSBjb3JyZXNwb25kcyB0byB0aGUgbmFtZSBvZiB0aGUgc3lzY2FsbCwgd2hpY2ggbWF5IGRpZmZlciBmcm9tCkBAIC0yNyw0MSArMjcsMzggQEAKIGludCAgICAgZXhlY3ZlKGNvbnN0IGNoYXIqLCBjaGFyKiBjb25zdCosIGNoYXIqIGNvbnN0KikgIGFsbAogCiB1aWRfdCAgIGdldHVpZDpnZXR1aWQzMigpICAgICAgICAgYXJtLHg4NgotdWlkX3QgICBnZXR1aWQ6Z2V0dWlkKCkgICAgICAgICAgIGFybTY0LG1pcHMseDg2XzY0Cit1aWRfdCAgIGdldHVpZDpnZXR1aWQoKSAgICAgICAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiBnaWRfdCAgIGdldGdpZDpnZXRnaWQzMigpICAgICAgICAgYXJtLHg4NgotZ2lkX3QgICBnZXRnaWQ6Z2V0Z2lkKCkgICAgICAgICAgIGFybTY0LG1pcHMseDg2XzY0CitnaWRfdCAgIGdldGdpZDpnZXRnaWQoKSAgICAgICAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiB1aWRfdCAgIGdldGV1aWQ6Z2V0ZXVpZDMyKCkgICAgICAgYXJtLHg4NgotdWlkX3QgICBnZXRldWlkOmdldGV1aWQoKSAgICAgICAgIGFybTY0LG1pcHMseDg2XzY0Cit1aWRfdCAgIGdldGV1aWQ6Z2V0ZXVpZCgpICAgICAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiBnaWRfdCAgIGdldGVnaWQ6Z2V0ZWdpZDMyKCkgICAgICAgYXJtLHg4NgotZ2lkX3QgICBnZXRlZ2lkOmdldGVnaWQoKSAgICAgICAgIGFybTY0LG1pcHMseDg2XzY0CitnaWRfdCAgIGdldGVnaWQ6Z2V0ZWdpZCgpICAgICAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiB1aWRfdCAgIGdldHJlc3VpZDpnZXRyZXN1aWQzMih1aWRfdCogcnVpZCwgdWlkX3QqIGV1aWQsIHVpZF90KiBzdWlkKSAgIGFybSx4ODYKLXVpZF90ICAgZ2V0cmVzdWlkOmdldHJlc3VpZCh1aWRfdCogcnVpZCwgdWlkX3QqIGV1aWQsIHVpZF90KiBzdWlkKSAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK3VpZF90ICAgZ2V0cmVzdWlkOmdldHJlc3VpZCh1aWRfdCogcnVpZCwgdWlkX3QqIGV1aWQsIHVpZF90KiBzdWlkKSAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiBnaWRfdCAgIGdldHJlc2dpZDpnZXRyZXNnaWQzMihnaWRfdCogcmdpZCwgZ2lkX3QqIGVnaWQsIGdpZF90KiBzZ2lkKSAgIGFybSx4ODYKLWdpZF90ICAgZ2V0cmVzZ2lkOmdldHJlc2dpZChnaWRfdCogcmdpZCwgZ2lkX3QqIGVnaWQsIGdpZF90KiBzZ2lkKSAgICAgYXJtNjQsbWlwcyx4ODZfNjQKLXBpZF90ICAgZ2V0dGlkKCkgICAgICAgICAgICAgICAgICAgYWxsCitnaWRfdCAgIGdldHJlc2dpZDpnZXRyZXNnaWQoZ2lkX3QqIHJnaWQsIGdpZF90KiBlZ2lkLCBnaWRfdCogc2dpZCkgICAgIGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAogc3NpemVfdCByZWFkYWhlYWQoaW50LCBvZmY2NF90LCBzaXplX3QpICAgICBhbGwKIGludCAgICAgZ2V0Z3JvdXBzOmdldGdyb3VwczMyKGludCwgZ2lkX3QqKSAgICBhcm0seDg2Ci1pbnQgICAgIGdldGdyb3VwczpnZXRncm91cHMoaW50LCBnaWRfdCopICAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK2ludCAgICAgZ2V0Z3JvdXBzOmdldGdyb3VwcyhpbnQsIGdpZF90KikgICAgICBhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKIHBpZF90ICAgZ2V0cGdpZChwaWRfdCkgICAgICAgICAgICAgYWxsCiBwaWRfdCAgIGdldHBwaWQoKSAgICAgICAgICAgICAgICAgIGFsbAogcGlkX3QgICBnZXRzaWQocGlkX3QpICAgICAgICAgICAgICBhbGwKIHBpZF90ICAgc2V0c2lkKCkgICAgICAgICAgICAgICAgICAgYWxsCiBpbnQgICAgIHNldGdpZDpzZXRnaWQzMihnaWRfdCkgICAgIGFybSx4ODYKLWludCAgICAgc2V0Z2lkOnNldGdpZChnaWRfdCkgICAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK2ludCAgICAgc2V0Z2lkOnNldGdpZChnaWRfdCkgICAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiBpbnQgICAgIHNldHVpZDpzZXR1aWQzMih1aWRfdCkgICAgYXJtLHg4NgotaW50ICAgICBzZXR1aWQ6c2V0dWlkKHVpZF90KSAgICAgIGFybTY0LG1pcHMseDg2XzY0CitpbnQgICAgIHNldHVpZDpzZXR1aWQodWlkX3QpICAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiBpbnQgICAgIHNldHJldWlkOnNldHJldWlkMzIodWlkX3QsIHVpZF90KSAgIGFybSx4ODYKLWludCAgICAgc2V0cmV1aWQ6c2V0cmV1aWQodWlkX3QsIHVpZF90KSAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK2ludCAgICAgc2V0cmV1aWQ6c2V0cmV1aWQodWlkX3QsIHVpZF90KSAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiBpbnQgICAgIHNldHJlc3VpZDpzZXRyZXN1aWQzMih1aWRfdCwgdWlkX3QsIHVpZF90KSAgIGFybSx4ODYKLWludCAgICAgc2V0cmVzdWlkOnNldHJlc3VpZCh1aWRfdCwgdWlkX3QsIHVpZF90KSAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK2ludCAgICAgc2V0cmVzdWlkOnNldHJlc3VpZCh1aWRfdCwgdWlkX3QsIHVpZF90KSAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiBpbnQgICAgIHNldHJlc2dpZDpzZXRyZXNnaWQzMihnaWRfdCwgZ2lkX3QsIGdpZF90KSAgIGFybSx4ODYKLWludCAgICAgc2V0cmVzZ2lkOnNldHJlc2dpZChnaWRfdCwgZ2lkX3QsIGdpZF90KSAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK2ludCAgICAgc2V0cmVzZ2lkOnNldHJlc2dpZChnaWRfdCwgZ2lkX3QsIGdpZF90KSAgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiB2b2lkKiAgIF9fYnJrOmJyayh2b2lkKikgICAgICAgICAgIGFsbAogaW50ICAgICBraWxsKHBpZF90LCBpbnQpICAgICAgICAgICBhbGwKLWludCAgICAgdGtpbGwocGlkX3QgdGlkLCBpbnQgc2lnKSAgYWxsCiBpbnQgICAgIHRna2lsbChwaWRfdCB0Z2lkLCBwaWRfdCB0aWQsIGludCBzaWcpICBhbGwKIGludCAgICAgX19wdHJhY2U6cHRyYWNlKGludCByZXF1ZXN0LCBpbnQgcGlkLCB2b2lkKiBhZGRyLCB2b2lkKiBkYXRhKSAgYWxsCi1pbnQgICAgIF9fc2V0X3RocmVhZF9hcmVhOnNldF90aHJlYWRfYXJlYSh2b2lkKiAgdXNlcl9kZXNjKSAgbWlwcyx4ODYKIAogIyA8c3lzL3Jlc291cmNlLmg+CiBpbnQgZ2V0cnVzYWdlKGludCwgc3RydWN0IHJ1c2FnZSopICBhbGwKQEAgLTcxLDIyICs2OCwyMCBAQAogIyBPbiAzMi1iaXQgc3lzdGVtcyB3ZSB1c2UgcHJsaW1pdDY0IHRvIGltcGxlbWVudCB0aGUgcmxpbWl0NjQgZnVuY3Rpb25zLgogaW50IGdldHJsaW1pdDp1Z2V0cmxpbWl0KGludCwgc3RydWN0IHJsaW1pdCopICBhcm0seDg2CiBpbnQgZ2V0cmxpbWl0KGludCwgc3RydWN0IHJsaW1pdCopICBtaXBzCi1pbnQgZ2V0cmxpbWl0fGdldHJsaW1pdDY0KGludCwgc3RydWN0IHJsaW1pdCopICBhcm02NCx4ODZfNjQKK2ludCBnZXRybGltaXR8Z2V0cmxpbWl0NjQoaW50LCBzdHJ1Y3QgcmxpbWl0KikgIGFybTY0LG1pcHM2NCx4ODZfNjQKIGludCBzZXRybGltaXQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0KikgIGFybSxtaXBzLHg4NgotaW50IHNldHJsaW1pdHxzZXRybGltaXQ2NChpbnQsIGNvbnN0IHN0cnVjdCBybGltaXQqKSAgYXJtNjQseDg2XzY0Ci1pbnQgcHJsaW1pdDY0fHBybGltaXQocGlkX3QsIGludCwgc3RydWN0IHJsaW1pdDY0KiwgY29uc3Qgc3RydWN0IHJsaW1pdDY0KikgIGFybTY0LHg4Nl82NAoraW50IHNldHJsaW1pdHxzZXRybGltaXQ2NChpbnQsIGNvbnN0IHN0cnVjdCBybGltaXQqKSAgYXJtNjQsbWlwczY0LHg4Nl82NAoraW50IHBybGltaXQ2NHxwcmxpbWl0KHBpZF90LCBpbnQsIHN0cnVjdCBybGltaXQ2NCosIGNvbnN0IHN0cnVjdCBybGltaXQ2NCopICBhcm02NCxtaXBzNjQseDg2XzY0CiBpbnQgcHJsaW1pdDY0KHBpZF90LCBpbnQsIHN0cnVjdCBybGltaXQ2NCosIGNvbnN0IHN0cnVjdCBybGltaXQ2NCopICBhcm0sbWlwcyx4ODYKIAogaW50ICAgICBzZXRncm91cHM6c2V0Z3JvdXBzMzIoaW50LCBjb25zdCBnaWRfdCopICAgYXJtLHg4NgotaW50ICAgICBzZXRncm91cHM6c2V0Z3JvdXBzKGludCwgY29uc3QgZ2lkX3QqKSAgICAgYXJtNjQsbWlwcyx4ODZfNjQKK2ludCAgICAgc2V0Z3JvdXBzOnNldGdyb3VwcyhpbnQsIGNvbnN0IGdpZF90KikgICAgIGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAogaW50ICAgICBzZXRwZ2lkKHBpZF90LCBwaWRfdCkgIGFsbAogcGlkX3QgICB2Zm9yayh2b2lkKSAgYXJtCiBpbnQgICAgIHNldHJlZ2lkOnNldHJlZ2lkMzIoZ2lkX3QsIGdpZF90KSAgYXJtLHg4NgotaW50ICAgICBzZXRyZWdpZDpzZXRyZWdpZChnaWRfdCwgZ2lkX3QpICAgIGFybTY0LG1pcHMseDg2XzY0CitpbnQgICAgIHNldHJlZ2lkOnNldHJlZ2lkKGdpZF90LCBnaWRfdCkgICAgYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CiBpbnQgICAgIGNocm9vdChjb25zdCBjaGFyKikgIGFsbAotIyBJTVBPUlRBTlQ6IEV2ZW4gdGhvdWdoIDxzeXMvcHJjdGwuaD4gZGVjbGFyZXMgcHJjdGwoaW50LCAuLi4pLCB0aGUgc3lzY2FsbCBzdHViIG11c3QgdGFrZSA2IGFyZ3VtZW50cwotIyAgICAgICAgICAgIHRvIG1hdGNoIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24uCi1pbnQgICAgIHByY3RsKGludCBvcHRpb24sIHVuc2lnbmVkIGludCBhcmcyLCB1bnNpZ25lZCBpbnQgYXJnMywgdW5zaWduZWQgaW50IGFyZzQsIHVuc2lnbmVkIGludCBhcmc1KSBhbGwKK2ludCAgICAgcHJjdGwoaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKSBhbGwKIGxvbmcgICAgX19hcmNoX3ByY3RsOmFyY2hfcHJjdGwoaW50LCB1bnNpZ25lZCBsb25nKSB4ODZfNjQKIGludCAgICAgY2FwZ2V0KGNhcF91c2VyX2hlYWRlcl90IGhlYWRlciwgY2FwX3VzZXJfZGF0YV90IGRhdGEpIGFsbAogaW50ICAgICBjYXBzZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjb25zdCBjYXBfdXNlcl9kYXRhX3QgZGF0YSkgYWxsCkBAIC05NywxMSArOTIsMTEgQEAKIHNzaXplX3QgICAgIHJlYWQoaW50LCB2b2lkKiwgc2l6ZV90KSAgICAgICAgYWxsCiBzc2l6ZV90ICAgICB3cml0ZShpbnQsIGNvbnN0IHZvaWQqLCBzaXplX3QpICAgICAgIGFsbAogc3NpemVfdCAgICAgcHJlYWQ2NChpbnQsIHZvaWQqLCBzaXplX3QsIG9mZjY0X3QpIGFybSxtaXBzLHg4Ngotc3NpemVfdCAgICAgcHJlYWQ2NHxwcmVhZChpbnQsIHZvaWQqLCBzaXplX3QsIG9mZl90KSBhcm02NCx4ODZfNjQKK3NzaXplX3QgICAgIHByZWFkNjR8cHJlYWQoaW50LCB2b2lkKiwgc2l6ZV90LCBvZmZfdCkgYXJtNjQsbWlwczY0LHg4Nl82NAogc3NpemVfdCAgICAgcHdyaXRlNjQoaW50LCB2b2lkKiwgc2l6ZV90LCBvZmY2NF90KSBhcm0sbWlwcyx4ODYKLXNzaXplX3QgICAgIHB3cml0ZTY0fHB3cml0ZShpbnQsIHZvaWQqLCBzaXplX3QsIG9mZl90KSBhcm02NCx4ODZfNjQKK3NzaXplX3QgICAgIHB3cml0ZTY0fHB3cml0ZShpbnQsIHZvaWQqLCBzaXplX3QsIG9mZl90KSBhcm02NCxtaXBzNjQseDg2XzY0CiBpbnQgICAgICAgICBjbG9zZShpbnQpICAgICAgICAgICAgICAgICAgICAgIGFsbAotcGlkX3QgICAgICAgZ2V0cGlkKCkgICAgYWxsCitwaWRfdCAgICAgICBfX2dldHBpZDpnZXRwaWQoKSAgYWxsCiBpbnQgICAgICAgICBtdW5tYXAodm9pZCosIHNpemVfdCkgIGFsbAogdm9pZCogICAgICAgbXJlbWFwKHZvaWQqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgbG9uZykgIGFsbAogaW50ICAgICAgICAgbXN5bmMoY29uc3Qgdm9pZCosIHNpemVfdCwgaW50KSAgICBhbGwKQEAgLTExNiwzMSArMTExLDMwIEBACiBpbnQgICAgICAgICByZWFkdihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyosIGludCkgICBhbGwKIGludCAgICAgICAgIHdyaXRldihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyosIGludCkgIGFsbAogaW50ICAgICAgICAgX19mY250bDY0OmZjbnRsNjQoaW50LCBpbnQsIHZvaWQqKSAgYXJtLG1pcHMseDg2Ci1pbnQgICAgICAgICBmY250bChpbnQsIGludCwgdm9pZCopICBhcm02NCx4ODZfNjQKK2ludCAgICAgICAgIGZjbnRsKGludCwgaW50LCB2b2lkKikgIGFybTY0LG1pcHM2NCx4ODZfNjQKIGludCAgICAgICAgIGZsb2NrKGludCwgaW50KSAgIGFsbAogaW50ICAgICAgICAgZmNobW9kKGludCwgbW9kZV90KSAgYWxsCiBpbnQgICAgICAgICBkdXAoaW50KSAgYWxsCiBpbnQgICAgICAgICBwaXBlMihpbnQqLCBpbnQpIGFsbAogaW50ICAgICAgICAgZHVwMyhpbnQsIGludCwgaW50KSAgIGFsbAotaW50ICAgICAgICAgZ2V0ZGVudHM6Z2V0ZGVudHM2NCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBkaXJlbnQqLCB1bnNpZ25lZCBpbnQpICAgYWxsCiBpbnQgICAgICAgICBmc3luYyhpbnQpICBhbGwKIGludCAgICAgICAgIGZkYXRhc3luYyhpbnQpIGFsbAogaW50ICAgICAgICAgZmNob3duOmZjaG93bjMyKGludCwgdWlkX3QsIGdpZF90KSAgYXJtLHg4NgotaW50ICAgICAgICAgZmNob3duOmZjaG93bihpbnQsIHVpZF90LCBnaWRfdCkgICAgYXJtNjQsbWlwcyx4ODZfNjQKK2ludCAgICAgICAgIGZjaG93bjpmY2hvd24oaW50LCB1aWRfdCwgZ2lkX3QpICAgIGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAogdm9pZCAgICAgICAgc3luYyh2b2lkKSAgYWxsCi1pbnQgICAgICAgICBfX2ZzdGF0ZnM2NDpmc3RhdGZzNjQoaW50LCBzaXplX3QsIHN0cnVjdCBzdGF0ZnMqKSAgYXJtLG1pcHMseDg2Ci1pbnQgICAgICAgICBmc3RhdGZzKGludCwgc3RydWN0IHN0YXRmcyopICBhcm02NCx4ODZfNjQKIGludCAgICAgICAgIGZzZXR4YXR0cihpbnQsIGNvbnN0IGNoYXIqLCBjb25zdCB2b2lkKiwgc2l6ZV90LCBpbnQpIGFsbAogc3NpemVfdCAgICAgZmdldHhhdHRyKGludCwgY29uc3QgY2hhciosIHZvaWQqLCBzaXplX3QpIGFsbAogc3NpemVfdCAgICAgZmxpc3R4YXR0cihpbnQsIGNoYXIqLCBzaXplX3QpIGFsbAogaW50ICAgICAgICAgZnJlbW92ZXhhdHRyKGludCwgY29uc3QgY2hhciopIGFsbAogCitpbnQgX19nZXRkZW50czY0OmdldGRlbnRzNjQodW5zaWduZWQgaW50LCBzdHJ1Y3QgZGlyZW50KiwgdW5zaWduZWQgaW50KSAgIGFybSxhcm02NCxtaXBzLG1pcHM2NCx4ODYseDg2XzY0CisKIGludCBfX29wZW5hdDpvcGVuYXQoaW50LCBjb25zdCBjaGFyKiwgaW50LCBtb2RlX3QpIGFsbAogaW50IGZhY2Nlc3NhdChpbnQsIGNvbnN0IGNoYXIqLCBpbnQsIGludCkgIGFsbAogaW50IGZjaG1vZGF0KGludCwgY29uc3QgY2hhciosIG1vZGVfdCwgaW50KSAgYWxsCiBpbnQgZmNob3duYXQoaW50LCBjb25zdCBjaGFyKiwgdWlkX3QsIGdpZF90LCBpbnQpICBhbGwKLWludCBmc3RhdGF0OmZzdGF0YXQ2NChpbnQsIGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdCosIGludCkgICBhcm0sbWlwcyx4ODYKLWludCBmc3RhdGF0Om5ld2ZzdGF0YXQoaW50LCBjb25zdCBjaGFyKiwgc3RydWN0IHN0YXQqLCBpbnQpICBhcm02NCx4ODZfNjQKK2ludCBmc3RhdGF0NjR8ZnN0YXRhdDpmc3RhdGF0NjQoaW50LCBjb25zdCBjaGFyKiwgc3RydWN0IHN0YXQqLCBpbnQpICAgYXJtLG1pcHMseDg2CitpbnQgZnN0YXRhdDY0fGZzdGF0YXQ6bmV3ZnN0YXRhdChpbnQsIGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdCosIGludCkgIGFybTY0LG1pcHM2NCx4ODZfNjQKIGludCBsaW5rYXQoaW50LCBjb25zdCBjaGFyKiwgaW50LCBjb25zdCBjaGFyKiwgaW50KSAgYWxsCiBpbnQgbWtkaXJhdChpbnQsIGNvbnN0IGNoYXIqLCBtb2RlX3QpICBhbGwKIGludCBta25vZGF0KGludCwgY29uc3QgY2hhciosIG1vZGVfdCwgZGV2X3QpICBhbGwKQEAgLTE1NiwyNiArMTUwLDQxIEBACiAjIFRoYXQgbWVhbnMgdGhhdCBldmVyeSBzeXN0ZW0gY2FsbCBpbiB0aGlzIHNlY3Rpb24gc2hvdWxkIHRha2UgdGhyZWUgbGluZXMuCiBvZmZfdCBsc2VlayhpbnQsIG9mZl90LCBpbnQpIGFybSxtaXBzLHg4NgogaW50IF9fbGxzZWVrOl9sbHNlZWsoaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBvZmY2NF90KiwgaW50KSBhcm0sbWlwcyx4ODYKLW9mZl90IGxzZWVrfGxzZWVrNjQoaW50LCBvZmZfdCwgaW50KSBhcm02NCx4ODZfNjQKK29mZl90IGxzZWVrfGxzZWVrNjQoaW50LCBvZmZfdCwgaW50KSBhcm02NCxtaXBzNjQseDg2XzY0CiBpbnQgZnRydW5jYXRlKGludCwgb2ZmX3QpIGFybSxtaXBzLHg4NgogaW50IGZ0cnVuY2F0ZTY0KGludCwgb2ZmNjRfdCkgYXJtLG1pcHMseDg2Ci1pbnQgZnRydW5jYXRlfGZ0cnVuY2F0ZTY0KGludCwgb2ZmX3QpIGFybTY0LHg4Nl82NAoraW50IGZ0cnVuY2F0ZXxmdHJ1bmNhdGU2NChpbnQsIG9mZl90KSBhcm02NCxtaXBzNjQseDg2XzY0CiBzc2l6ZV90IHNlbmRmaWxlKGludCBvdXRfZmQsIGludCBpbl9mZCwgb2ZmX3QqIG9mZnNldCwgc2l6ZV90IGNvdW50KSBhcm0sbWlwcyx4ODYKIHNzaXplX3Qgc2VuZGZpbGU2NChpbnQgb3V0X2ZkLCBpbnQgaW5fZmQsIG9mZjY0X3QqIG9mZnNldCwgc2l6ZV90IGNvdW50KSBhcm0sbWlwcyx4ODYKLXNzaXplX3Qgc2VuZGZpbGV8c2VuZGZpbGU2NChpbnQgb3V0X2ZkLCBpbnQgaW5fZmQsIG9mZl90KiBvZmZzZXQsIHNpemVfdCBjb3VudCkgYXJtNjQseDg2XzY0Citzc2l6ZV90IHNlbmRmaWxlfHNlbmRmaWxlNjQoaW50IG91dF9mZCwgaW50IGluX2ZkLCBvZmZfdCogb2Zmc2V0LCBzaXplX3QgY291bnQpIGFybTY0LG1pcHM2NCx4ODZfNjQKIGludCB0cnVuY2F0ZShjb25zdCBjaGFyKiwgb2ZmX3QpIGFybSxtaXBzLHg4NgogaW50IHRydW5jYXRlNjQoY29uc3QgY2hhciosIG9mZjY0X3QpIGFybSxtaXBzLHg4NgotaW50IHRydW5jYXRlfHRydW5jYXRlNjQoY29uc3QgY2hhciosIG9mZl90KSBhcm02NCx4ODZfNjQKK2ludCB0cnVuY2F0ZXx0cnVuY2F0ZTY0KGNvbnN0IGNoYXIqLCBvZmZfdCkgYXJtNjQsbWlwczY0LHg4Nl82NAogIyAobW1hcCBvbmx5IGdldHMgdHdvIGxpbmVzIGJlY2F1c2Ugd2Ugb25seSB1c2VkIHRoZSA2NC1iaXQgdmFyaWFudCBvbiAzMi1iaXQgc3lzdGVtcy4pCiB2b2lkKiBfX21tYXAyOm1tYXAyKHZvaWQqLCBzaXplX3QsIGludCwgaW50LCBpbnQsIGxvbmcpICAgYXJtLG1pcHMseDg2Ci12b2lkKiBtbWFwfG1tYXA2NCh2b2lkKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBvZmZfdCkgIGFybTY0LHg4Nl82NAordm9pZCogbW1hcHxtbWFwNjQodm9pZCosIHNpemVfdCwgaW50LCBpbnQsIGludCwgb2ZmX3QpICBhcm02NCxtaXBzNjQseDg2XzY0CisjIChmYWxsb2NhdGUgb25seSBnZXRzIHR3byBsaW5lcyBiZWNhdXNlIHRoZXJlIGlzIG5vIDMyLWJpdCB2YXJpYW50LikKK2ludCBmYWxsb2NhdGU2NDpmYWxsb2NhdGUoaW50LCBpbnQsIG9mZjY0X3QsIG9mZjY0X3QpIGFybSxtaXBzLHg4NgoraW50IGZhbGxvY2F0ZXxmYWxsb2NhdGU2NChpbnQsIGludCwgb2ZmX3QsIG9mZl90KSBhcm02NCxtaXBzNjQseDg2XzY0CisKKyMgcG9zaXhfZmFkdmlzZTY0IGlzIGF3a3dhcmQ6IGFybSBoYXMgc2h1ZmZsZWQgYXJndW1lbnRzLAorIyB0aGUgUE9TSVggZnVuY3Rpb25zIGRvbid0IHNldCBlcnJubywgYW5kIG5vIGFyY2hpdGVjdHVyZSBoYXMgcG9zaXhfZmFkdmlzZS4KK2ludCBfX2FybV9mYWR2aXNlNjRfNjQ6YXJtX2ZhZHZpc2U2NF82NChpbnQsIGludCwgb2ZmNjRfdCwgb2ZmNjRfdCkgYXJtCitpbnQgX19mYWR2aXNlNjQ6ZmFkdmlzZTY0XzY0KGludCwgb2ZmNjRfdCwgb2ZmNjRfdCwgaW50KSB4ODYKK2ludCBfX2ZhZHZpc2U2NDpmYWR2aXNlNjQoaW50LCBvZmY2NF90LCBvZmY2NF90LCBpbnQpIGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAorCitpbnQgX19mc3RhdGZzNjQ6ZnN0YXRmczY0KGludCwgc2l6ZV90LCBzdHJ1Y3Qgc3RhdGZzKikgIGFybSxtaXBzLHg4NgoraW50IGZzdGF0ZnM2NHxmc3RhdGZzOmZzdGF0ZnMoaW50LCBzdHJ1Y3Qgc3RhdGZzKikgIGFybTY0LG1pcHM2NCx4ODZfNjQKK2ludCBfX3N0YXRmczY0OnN0YXRmczY0KGNvbnN0IGNoYXIqLCBzaXplX3QsIHN0cnVjdCBzdGF0ZnMqKSAgYXJtLG1pcHMseDg2CitpbnQgc3RhdGZzNjR8c3RhdGZzOnN0YXRmcyhjb25zdCBjaGFyKiwgc3RydWN0IHN0YXRmcyopICBhcm02NCxtaXBzNjQseDg2XzY0CisKK2ludCAgICAgZnN0YXQ2NHxmc3RhdDpmc3RhdDY0KGludCwgc3RydWN0IHN0YXQqKSAgICBhcm0sbWlwcyx4ODYKK2ludCAgICAgZnN0YXQ2NHxmc3RhdDpmc3RhdChpbnQsIHN0cnVjdCBzdGF0KikgICAgYXJtNjQsbWlwczY0LHg4Nl82NAogCiAjIGZpbGUgc3lzdGVtCiBpbnQgICAgIGNoZGlyKGNvbnN0IGNoYXIqKSAgICAgICAgICAgICAgYWxsCiBpbnQgICAgIG1vdW50KGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQqKSAgYWxsCiBpbnQgICAgIHVtb3VudDIoY29uc3QgY2hhciosIGludCkgIGFsbAotaW50ICAgICBmc3RhdDpmc3RhdDY0KGludCwgc3RydWN0IHN0YXQqKSAgICBhcm0sbWlwcyx4ODYKLWludCAgICAgZnN0YXQoaW50LCBzdHJ1Y3Qgc3RhdCopICAgIGFybTY0LHg4Nl82NAogaW50ICAgICBfX2dldGN3ZDpnZXRjd2QoY2hhciogYnVmLCBzaXplX3Qgc2l6ZSkgIGFsbAogaW50ICAgICBmY2hkaXIoaW50KSAgICBhbGwKIGludCAgICAgc2V0eGF0dHIoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCB2b2lkKiwgc2l6ZV90LCBpbnQpIGFsbApAQCAtMTg2LDI3ICsxOTUsMjMgQEAKIHNzaXplX3QgbGxpc3R4YXR0cihjb25zdCBjaGFyKiwgY2hhciosIHNpemVfdCkgYWxsCiBpbnQgICAgIHJlbW92ZXhhdHRyKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgYWxsCiBpbnQgICAgIGxyZW1vdmV4YXR0cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIGFsbAotaW50ICAgICBfX3N0YXRmczY0OnN0YXRmczY0KGNvbnN0IGNoYXIqLCBzaXplX3QsIHN0cnVjdCBzdGF0ZnMqKSAgYXJtLG1pcHMseDg2Ci1pbnQgICAgIHN0YXRmcyhjb25zdCBjaGFyKiwgc3RydWN0IHN0YXRmcyopICBhcm02NCx4ODZfNjQKIGludCAgICAgc3dhcG9uKGNvbnN0IGNoYXIqLCBpbnQpIGFsbAogaW50ICAgICBzd2Fwb2ZmKGNvbnN0IGNoYXIqKSBhbGwKIAogIyB0aW1lCi1pbnQgICAgICAgICAgIGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCosIHN0cnVjdCB0aW1lem9uZSopICAgICAgIGFsbAogaW50ICAgICAgICAgICBzZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWV2YWwqLCBjb25zdCBzdHJ1Y3QgdGltZXpvbmUqKSAgIGFsbAogY2xvY2tfdCAgICAgICB0aW1lcyhzdHJ1Y3QgdG1zKikgICAgICAgYWxsCiBpbnQgICAgICAgICAgIG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMqLCBzdHJ1Y3QgdGltZXNwZWMqKSAgIGFsbAotaW50ICAgICAgICAgICBjbG9ja19nZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQsIHN0cnVjdCB0aW1lc3BlYyogdHApICAgIGFsbAogaW50ICAgICAgICAgICBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogdHApICBhbGwKIGludCAgICAgICAgICAgY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCBjbGtfaWQsIHN0cnVjdCB0aW1lc3BlYyogcmVzKSAgIGFsbAogaW50ICAgICAgICAgICBjbG9ja19uYW5vc2xlZXAoY2xvY2tpZF90IGNsb2NrX2lkLCBpbnQgZmxhZ3MsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogcmVxLCBzdHJ1Y3QgdGltZXNwZWMqIHJlbSkgIGFsbAogaW50ICAgICAgICAgICBnZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsKikgICBhbGwKIGludCAgICAgICAgICAgc2V0aXRpbWVyKGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnZhbCosIHN0cnVjdCBpdGltZXJ2YWwqKSAgYWxsCi1pbnQgICAgICAgICAgIF9fdGltZXJfY3JlYXRlOnRpbWVyX2NyZWF0ZShjbG9ja2lkX3QgY2xvY2tpZCwgc3RydWN0IHNpZ2V2ZW50KiBldnAsIHRpbWVyX3QqIHRpbWVyaWQpICAgIGFsbAotaW50ICAgICAgICAgICBfX3RpbWVyX3NldHRpbWU6dGltZXJfc2V0dGltZSh0aW1lcl90LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjKiwgc3RydWN0IGl0aW1lcnNwZWMqKSBhbGwKLWludCAgICAgICAgICAgX190aW1lcl9nZXR0aW1lOnRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsCi1pbnQgICAgICAgICAgIF9fdGltZXJfZ2V0b3ZlcnJ1bjp0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbAotaW50ICAgICAgICAgICBfX3RpbWVyX2RlbGV0ZTp0aW1lcl9kZWxldGUodGltZXJfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwKK2ludCAgICAgICAgICAgX190aW1lcl9jcmVhdGU6dGltZXJfY3JlYXRlKGNsb2NraWRfdCBjbG9ja2lkLCBzdHJ1Y3Qgc2lnZXZlbnQqIGV2cCwgX19rZXJuZWxfdGltZXJfdCogdGltZXJpZCkgICAgYWxsCitpbnQgICAgICAgICAgIF9fdGltZXJfc2V0dGltZTp0aW1lcl9zZXR0aW1lKF9fa2VybmVsX3RpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMqLCBzdHJ1Y3QgaXRpbWVyc3BlYyopIGFsbAoraW50ICAgICAgICAgICBfX3RpbWVyX2dldHRpbWU6dGltZXJfZ2V0dGltZShfX2tlcm5lbF90aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3BlYyopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwKK2ludCAgICAgICAgICAgX190aW1lcl9nZXRvdmVycnVuOnRpbWVyX2dldG92ZXJydW4oX19rZXJuZWxfdGltZXJfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsCitpbnQgICAgICAgICAgIF9fdGltZXJfZGVsZXRlOnRpbWVyX2RlbGV0ZShfX2tlcm5lbF90aW1lcl90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbAogaW50ICAgICAgICAgICB0aW1lcmZkX2NyZWF0ZShjbG9ja2lkX3QsIGludCkgICBhbGwKIGludCAgICAgICAgICAgdGltZXJmZF9zZXR0aW1lKGludCwgaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyosIHN0cnVjdCBpdGltZXJzcGVjKikgICBhbGwKIGludCAgICAgICAgICAgdGltZXJmZF9nZXR0aW1lKGludCwgc3RydWN0IGl0aW1lcnNwZWMqKSAgIGFsbApAQCAtMjE4LDMxICsyMjMsMzIgQEAKIGludCAgICAgX19ydF9zaWdwcm9jbWFzazpydF9zaWdwcm9jbWFzayhpbnQsIGNvbnN0IHNpZ3NldF90Kiwgc2lnc2V0X3QqLCBzaXplX3QpICBhbGwKIGludCAgICAgX19ydF9zaWdzdXNwZW5kOnJ0X3NpZ3N1c3BlbmQoY29uc3Qgc2lnc2V0X3QqLCBzaXplX3QpICBhbGwKIGludCAgICAgX19ydF9zaWd0aW1lZHdhaXQ6cnRfc2lndGltZWR3YWl0KGNvbnN0IHNpZ3NldF90Kiwgc3RydWN0IHNpZ2luZm9fdCosIHN0cnVjdCB0aW1lc3BlY190Kiwgc2l6ZV90KSAgYWxsCi1pbnQgICAgIHNpZ25hbGZkNChpbnQsIGNvbnN0IHNpZ3NldF90Kiwgc2l6ZV90LCBpbnQpICBhbGwKK2ludCAgICAgX19zaWduYWxmZDQ6c2lnbmFsZmQ0KGludCwgY29uc3Qgc2lnc2V0X3QqLCBzaXplX3QsIGludCkgIGFsbAogCiAjIHNvY2tldHMKLWludCAgICAgICAgICAgc29ja2V0KGludCwgaW50LCBpbnQpICAgICAgICAgICAgICBhcm0sYXJtNjQsbWlwcyx4ODZfNjQKLWludCAgICAgICAgICAgc29ja2V0cGFpcihpbnQsIGludCwgaW50LCBpbnQqKSAgICBhcm0sYXJtNjQsbWlwcyx4ODZfNjQKLWludCAgICAgICAgICAgYmluZChpbnQsIHN0cnVjdCBzb2NrYWRkciosIGludCkgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICBjb25uZWN0KGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KSAgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICBsaXN0ZW4oaW50LCBpbnQpICAgICAgICAgICAgICAgICAgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICBhY2NlcHQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqKSAgYXJtLGFybTY0LG1pcHMseDg2XzY0Ci1pbnQgICAgICAgICAgIGdldHNvY2tuYW1lKGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KikgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICBnZXRwZWVybmFtZShpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopICBhcm0sYXJtNjQsbWlwcyx4ODZfNjQKLWludCAgICAgICAgICAgc2VuZHRvKGludCwgY29uc3Qgdm9pZCosIHNpemVfdCwgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QpICBhcm0sYXJtNjQsbWlwcyx4ODZfNjQKLWludCAgICAgICAgICAgcmVjdmZyb20oaW50LCB2b2lkKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopICBhcm0sYXJtNjQsbWlwcyx4ODZfNjQKLWludCAgICAgICAgICAgc2h1dGRvd24oaW50LCBpbnQpICBhcm0sYXJtNjQsbWlwcyx4ODZfNjQKLWludCAgICAgICAgICAgc2V0c29ja29wdChpbnQsIGludCwgaW50LCBjb25zdCB2b2lkKiwgc29ja2xlbl90KSAgYXJtLGFybTY0LG1pcHMseDg2XzY0Ci1pbnQgICAgICAgICAgIGdldHNvY2tvcHQoaW50LCBpbnQsIGludCwgdm9pZCosIHNvY2tsZW5fdCopICAgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICBzZW5kbXNnKGludCwgY29uc3Qgc3RydWN0IG1zZ2hkciosIHVuc2lnbmVkIGludCkgIGFybSxhcm02NCxtaXBzLHg4Nl82NAotaW50ICAgICAgICAgICByZWN2bXNnKGludCwgc3RydWN0IG1zZ2hkciosIHVuc2lnbmVkIGludCkgICBhcm0sYXJtNjQsbWlwcyx4ODZfNjQKK2ludCAgICAgICAgICAgX19zb2NrZXQ6c29ja2V0KGludCwgaW50LCBpbnQpICAgICAgICAgICAgICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIHNvY2tldHBhaXIoaW50LCBpbnQsIGludCwgaW50KikgICAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICBiaW5kKGludCwgc3RydWN0IHNvY2thZGRyKiwgaW50KSAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICBfX2Nvbm5lY3Q6Y29ubmVjdChpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCkgICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIGxpc3RlbihpbnQsIGludCkgICAgICAgICAgICAgICAgICAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICBfX2FjY2VwdDQ6YWNjZXB0NChpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCosIGludCkgIGFybSxhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKK2ludCAgICAgICAgICAgZ2V0c29ja25hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqKSAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICBnZXRwZWVybmFtZShpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIHNlbmR0byhpbnQsIGNvbnN0IHZvaWQqLCBzaXplX3QsIGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KSAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICByZWN2ZnJvbShpbnQsIHZvaWQqLCBzaXplX3QsIHVuc2lnbmVkIGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KikgIGFybSxhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKK2ludCAgICAgICAgICAgc2h1dGRvd24oaW50LCBpbnQpICBhcm0sYXJtNjQsbWlwcyxtaXBzNjQseDg2XzY0CitpbnQgICAgICAgICAgIHNldHNvY2tvcHQoaW50LCBpbnQsIGludCwgY29uc3Qgdm9pZCosIHNvY2tsZW5fdCkgIGFybSxhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKK2ludCAgICAgICAgICAgZ2V0c29ja29wdChpbnQsIGludCwgaW50LCB2b2lkKiwgc29ja2xlbl90KikgICAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICBzZW5kbXNnKGludCwgY29uc3Qgc3RydWN0IG1zZ2hkciosIHVuc2lnbmVkIGludCkgIGFybSxhcm02NCxtaXBzLG1pcHM2NCx4ODZfNjQKK2ludCAgICAgICAgICAgcmVjdm1zZyhpbnQsIHN0cnVjdCBtc2doZHIqLCB1bnNpZ25lZCBpbnQpICAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICByZWN2bW1zZyhpbnQsIHN0cnVjdCBtbXNnaGRyKiwgdW5zaWduZWQgaW50LCBpbnQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyopICAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAoraW50ICAgICAgICAgICBzZW5kbW1zZyhpbnQsIHN0cnVjdCBtbXNnaGRyKiwgdW5zaWduZWQgaW50LCBpbnQpICAgYXJtLGFybTY0LG1pcHMsbWlwczY0LHg4Nl82NAogCiAjIHNvY2tldHMgZm9yIHg4Ni4gVGhlc2UgYXJlIGRvbmUgYXMgYW4gImluZGV4ZWQiIGNhbGwgdG8gc29ja2V0Y2FsbCBzeXNjYWxsLgotaW50ICAgICAgICAgICBzb2NrZXQ6c29ja2V0Y2FsbDoxKGludCwgaW50LCBpbnQpIHg4NgoraW50ICAgICAgICAgICBfX3NvY2tldDpzb2NrZXRjYWxsOjEoaW50LCBpbnQsIGludCkgeDg2CiBpbnQgICAgICAgICAgIGJpbmQ6c29ja2V0Y2FsbDoyKGludCwgc3RydWN0IHNvY2thZGRyKiwgaW50KSAgeDg2Ci1pbnQgICAgICAgICAgIGNvbm5lY3Q6c29ja2V0Y2FsbDozKGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KSAgIHg4NgoraW50ICAgICAgICAgICBfX2Nvbm5lY3Q6c29ja2V0Y2FsbDozKGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KSAgIHg4NgogaW50ICAgICAgICAgICBsaXN0ZW46c29ja2V0Y2FsbDo0KGludCwgaW50KSAgICAgICAgICAgICAgICAgICB4ODYKLWludCAgICAgICAgICAgYWNjZXB0OnNvY2tldGNhbGw6NShpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopICB4ODYKIGludCAgICAgICAgICAgZ2V0c29ja25hbWU6c29ja2V0Y2FsbDo2KGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KikgIHg4NgogaW50ICAgICAgICAgICBnZXRwZWVybmFtZTpzb2NrZXRjYWxsOjcoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqKSAgeDg2CiBpbnQgICAgICAgICAgIHNvY2tldHBhaXI6c29ja2V0Y2FsbDo4KGludCwgaW50LCBpbnQsIGludCopICAgIHg4NgpAQCAtMjUzLDYgKzI1OSw5IEBACiBpbnQgICAgICAgICAgIGdldHNvY2tvcHQ6c29ja2V0Y2FsbDoxNShpbnQsIGludCwgaW50LCB2b2lkKiwgc29ja2xlbl90KikgICAgeDg2CiBpbnQgICAgICAgICAgIHNlbmRtc2c6c29ja2V0Y2FsbDoxNihpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIqLCB1bnNpZ25lZCBpbnQpICB4ODYKIGludCAgICAgICAgICAgcmVjdm1zZzpzb2NrZXRjYWxsOjE3KGludCwgc3RydWN0IG1zZ2hkciosIHVuc2lnbmVkIGludCkgICB4ODYKK2ludCAgICAgICAgICAgX19hY2NlcHQ0OnNvY2tldGNhbGw6MTgoaW50LCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqLCBpbnQpICB4ODYKK2ludCAgICAgICAgICAgcmVjdm1tc2c6c29ja2V0Y2FsbDoxOShpbnQsIHN0cnVjdCBtbXNnaGRyKiwgdW5zaWduZWQgaW50LCBpbnQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyopICAgeDg2CitpbnQgICAgICAgICAgIHNlbmRtbXNnOnNvY2tldGNhbGw6MjAoaW50LCBzdHJ1Y3QgbW1zZ2hkciosIHVuc2lnbmVkIGludCwgaW50KSAgIHg4NgogCiAjIHNjaGVkdWxlciAmIHJlYWwtdGltZQogaW50IHNjaGVkX3NldHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSogcGFyYW0pICBhbGwKQEAgLTI2OSwyMSArMjc4LDE5IEBACiBpbnQgX19zY2hlZF9nZXRhZmZpbml0eTpzY2hlZF9nZXRhZmZpbml0eShwaWRfdCBwaWQsIHNpemVfdCBzZXRzaXplLCBjcHVfc2V0X3QqIHNldCkgIGFsbAogaW50IF9fZ2V0Y3B1OmdldGNwdSh1bnNpZ25lZCosIHVuc2lnbmVkKiwgdm9pZCopIGFsbAogCi0jIGlvIHByaW9yaXRpZXMKLWludCBpb3ByaW9fc2V0KGludCB3aGljaCwgaW50IHdobywgaW50IGlvcHJpbykgYWxsCi1pbnQgaW9wcmlvX2dldChpbnQgd2hpY2gsIGludCB3aG8pIGFsbAotCiAjIG90aGVyCiBpbnQgICAgIHVuYW1lKHN0cnVjdCB1dHNuYW1lKikgIGFsbAogbW9kZV90ICB1bWFzayhtb2RlX3QpICBhbGwKIGludCAgICAgX19yZWJvb3Q6cmVib290KGludCwgaW50LCBpbnQsIHZvaWQqKSAgYWxsCi1pbnQgICAgIF9fc3lzbG9nOnN5c2xvZyhpbnQsIGNoYXIqLCBpbnQpICBhbGwKIGludCAgICAgaW5pdF9tb2R1bGUodm9pZCosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGNoYXIqKSAgYWxsCiBpbnQgICAgIGRlbGV0ZV9tb2R1bGUoY29uc3QgY2hhciosIHVuc2lnbmVkIGludCkgICBhbGwKIGludCAgICAga2xvZ2N0bDpzeXNsb2coaW50LCBjaGFyKiwgaW50KSAgIGFsbAogaW50ICAgICBzeXNpbmZvKHN0cnVjdCBzeXNpbmZvKikgIGFsbAogaW50ICAgICBwZXJzb25hbGl0eSh1bnNpZ25lZCBsb25nKSAgYWxsCi1sb25nICAgIHBlcmZfZXZlbnRfb3BlbihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyKiBhdHRyX3VwdHIsIHBpZF90IHBpZCwgaW50IGNwdSwgaW50IGdyb3VwX2ZkLCB1bnNpZ25lZCBsb25nIGZsYWdzKSBhbGwKKworc3NpemVfdCB0ZWUoaW50LCBpbnQsIHNpemVfdCwgdW5zaWduZWQgaW50KSAgYWxsCitzc2l6ZV90IHNwbGljZShpbnQsIG9mZjY0X3QqLCBpbnQsIG9mZjY0X3QqLCBzaXplX3QsIHVuc2lnbmVkIGludCkgIGFsbAorc3NpemVfdCB2bXNwbGljZShpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyosIHNpemVfdCwgdW5zaWduZWQgaW50KSAgYWxsCiAKIGludCBlcG9sbF9jcmVhdGUxKGludCkgIGFsbAogaW50IGVwb2xsX2N0bChpbnQsIGludCBvcCwgaW50LCBzdHJ1Y3QgZXBvbGxfZXZlbnQqKSAgYWxsCkBAIC0yOTEsMTEgKzI5OCw5IEBACiAKIGludCBldmVudGZkOmV2ZW50ZmQyKHVuc2lnbmVkIGludCwgaW50KSAgYWxsCiAKLXZvaWQgX2V4aXQ6ZXhpdF9ncm91cChpbnQpICBhbGwKK3ZvaWQgX2V4aXR8X0V4aXQ6ZXhpdF9ncm91cChpbnQpICBhbGwKIHZvaWQgX19leGl0OmV4aXQoaW50KSAgYWxsCiAKLWludCBmdXRleCh2b2lkKiwgaW50LCBpbnQsIHZvaWQqLCB2b2lkKiwgaW50KSAgYWxsCi0KIGludCBpbm90aWZ5X2luaXQxKGludCkgIGFsbAogaW50IGlub3RpZnlfYWRkX3dhdGNoKGludCwgY29uc3QgY2hhciosIHVuc2lnbmVkIGludCkgIGFsbAogaW50IGlub3RpZnlfcm1fd2F0Y2goaW50LCB1bnNpZ25lZCBpbnQpICBhbGwKQEAgLTMwNSw2ICszMTAsOSBAQAogCiBpbnQgX19zZXRfdGlkX2FkZHJlc3M6c2V0X3RpZF9hZGRyZXNzKGludCopICBhbGwKIAoraW50IHNldGZzZ2lkKGdpZF90KSAgYWxsCitpbnQgc2V0ZnN1aWQodWlkX3QpICBhbGwKKwogcGlkX3Qgd2FpdDQocGlkX3QsIGludCosIGludCwgc3RydWN0IHJ1c2FnZSopICBhbGwKIGludCBfX3dhaXRpZDp3YWl0aWQoaW50LCBwaWRfdCwgc3RydWN0IHNpZ2luZm9fdCosIGludCwgdm9pZCopICBhbGwKIApAQCAtMzEzLDQgKzMyMSwxNCBAQAogaW50ICAgICBjYWNoZWZsdXNoOl9fQVJNX05SX2NhY2hlZmx1c2gobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpICBhcm0KIAogIyBNSVBTLXNwZWNpZmljCi1pbnQgICAgIF9mbHVzaF9jYWNoZTpjYWNoZWZsdXNoKGNoYXIqIGFkZHIsIGNvbnN0IGludCBuYnl0ZXMsIGNvbnN0IGludCBvcCkgbWlwcworaW50ICAgICBfZmx1c2hfY2FjaGU6Y2FjaGVmbHVzaChjaGFyKiBhZGRyLCBjb25zdCBpbnQgbmJ5dGVzLCBjb25zdCBpbnQgb3ApIG1pcHMsbWlwczY0CitpbnQgICAgIF9fc2V0X3RsczpzZXRfdGhyZWFkX2FyZWEodm9pZCopIG1pcHMsbWlwczY0CisKKyMgeDg2LXNwZWNpZmljCitpbnQgICAgIF9fc2V0X3RocmVhZF9hcmVhOnNldF90aHJlYWRfYXJlYSh2b2lkKikgeDg2CisKKyMgdmRzbyBzdHVmZi4KK2ludCBjbG9ja19nZXR0aW1lKGNsb2NraWRfdCwgdGltZXNwZWMqKSAgICAgICAgICAgICAgICAgYXJtLG1pcHMsbWlwczY0LHg4NgoraW50IF9fY2xvY2tfZ2V0dGltZTpjbG9ja19nZXR0aW1lKGNsb2NraWRfdCwgdGltZXNwZWMqKSBhcm02NCx4ODZfNjQKK2ludCBnZXR0aW1lb2ZkYXkodGltZXZhbCosIHRpbWV6b25lKikgICAgICAgICAgICAgICAgICAgYXJtLG1pcHMsbWlwczY0LHg4NgoraW50IF9fZ2V0dGltZW9mZGF5OmdldHRpbWVvZmRheSh0aW1ldmFsKiwgdGltZXpvbmUqKSAgICBhcm02NCx4ODZfNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYXJtLm1rIGIvbGliYy9hcmNoLWFybS9hcm0ubWsKaW5kZXggOTVjM2I2MS4uNzBjYzhlYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9hcm0ubWsKKysrIGIvbGliYy9hcmNoLWFybS9hcm0ubWsKQEAgLTEsNDMgKzEsOTMgQEAKLV9MSUJDX0FSQ0hfQ09NTU9OX1NSQ19GSUxFUyA6PSBcCisjIGFybSBzcGVjaWZpYyBjb25maWdzCisKKyMgVGhlc2UgYXJlIHVzZWQgYnkgdGhlIDMyLWJpdCB0YXJnZXRzLCBidXQgbm90IHRoZSA2NC1iaXQgb25lcy4KK2xpYmNfY29tbW9uX3NyY19maWxlc19hcm0gOj0gXAorICAgIGJpb25pYy9sZWdhY3lfMzJfYml0X3N1cHBvcnQuY3BwIFwKKyAgICBiaW9uaWMvbmRrX2NydWZ0LmNwcCBcCisgICAgYmlvbmljL3RpbWU2NC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHcuYyBcCisKKyMgVGhlc2UgYXJlIHNoYXJlZCBieSBhbGwgdGhlIDMyLWJpdCB0YXJnZXRzLCBidXQgbm90IHRoZSA2NC1iaXQgb25lcy4KK2xpYmNfYmlvbmljX3NyY19maWxlc19hcm0gOj0gXAorICAgIGJpb25pYy9tbWFwLmNwcAorCitsaWJjX2NvbW1vbl9zcmNfZmlsZXNfYXJtICs9IFwKKyAgICBiaW9uaWMvbWVtY2hyLmMgXAorICAgIGJpb25pYy9tZW1yY2hyLmMgXAorICAgIGJpb25pYy9zdHJjaHIuY3BwIFwKKyAgICBiaW9uaWMvc3Rybmxlbi5jIFwKKyAgICBiaW9uaWMvc3RycmNoci5jcHAgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NhdC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjaHIuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY21wLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NweS5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsZW4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzcmNoci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtY21wLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1tb3ZlLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL2Jjb3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cGNweS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHBuY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxjYXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNweS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY2F0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jbXAuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNweS5jIFwKKworIyBUaGUgQysrIGZvcnRpZnkgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIGZvciB3aGljaCB0aGVyZSBpcyBhbgorIyBhcm0gYXNzZW1ibGVyIHZlcnNpb24uCisjCisjIEZvcnRpZnkgaW1wbGVtZW50YXRpb25zIG9mIGxpYmMgZnVuY3Rpb25zLgorIyBsaWJjX2NvbW1vbl9zcmNfZmlsZXNfYXJtICs9CisjICAgIGJpb25pYy9fX21lbWNweV9jaGsuY3BwIFwKKyMgICAgYmlvbmljL19fbWVtc2V0X2Noay5jcHAgXAorIyAgICBiaW9uaWMvX19zdHJjcHlfY2hrLmNwcCBcCisjICAgIGJpb25pYy9fX3N0cmNhdF9jaGsuY3BwIFwKKworbGliY19jb21tb25fY2ZsYWdzX2FybSA6PSAtRFNPRlRGTE9BVAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBDUFUgc3BlY2lmaWMgc291cmNlIGZpbGVzCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfYXJtICs9IFwKICAgICBhcmNoLWFybS9iaW9uaWMvYWJvcnRfYXJtLlMgXAogICAgIGFyY2gtYXJtL2Jpb25pYy9hdG9taWNzX2FybS5jIFwKICAgICBhcmNoLWFybS9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUyBcCi0gICAgYXJjaC1hcm0vYmlvbmljL2VhYmkuYyBcCiAgICAgYXJjaC1hcm0vYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBcCi0gICAgYXJjaC1hcm0vYmlvbmljL2Z1dGV4X2FybS5TIFwKLSAgICBhcmNoLWFybS9iaW9uaWMvX19nZXRfc3AuUyBcCiAgICAgYXJjaC1hcm0vYmlvbmljL2xpYmdjY19jb21wYXQuYyBcCi0gICAgYXJjaC1hcm0vYmlvbmljL21lbWNtcDE2LlMgXAogICAgIGFyY2gtYXJtL2Jpb25pYy9tZW1jbXAuUyBcCiAgICAgYXJjaC1hcm0vYmlvbmljL19zZXRqbXAuUyBcCiAgICAgYXJjaC1hcm0vYmlvbmljL3NldGptcC5TIFwKICAgICBhcmNoLWFybS9iaW9uaWMvc2lnc2V0am1wLlMgXAogICAgIGFyY2gtYXJtL2Jpb25pYy9zeXNjYWxsLlMgXAogCi0jIFRoZXNlIGFyZSB1c2VkIGJ5IHRoZSBzdGF0aWMgYW5kIGR5bmFtaWMgdmVyc2lvbnMgb2YgdGhlIGxpYmMKLSMgcmVzcGVjdGl2ZWx5LgotX0xJQkNfQVJDSF9TVEFUSUNfU1JDX0ZJTEVTIDo9IFwKLSAgICBhcmNoLWFybS9iaW9uaWMvZXhpZHhfc3RhdGljLmMgXAotICAgIGJpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmMgXAorbGliY19hcmNoX3N0YXRpY19zcmNfZmlsZXNfYXJtIDo9IGFyY2gtYXJtL2Jpb25pYy9leGlkeF9zdGF0aWMuYworbGliY19hcmNoX2R5bmFtaWNfc3JjX2ZpbGVzX2FybSA6PSBhcmNoLWFybS9iaW9uaWMvZXhpZHhfZHluYW1pYy5jCiAKLV9MSUJDX0FSQ0hfRFlOQU1JQ19TUkNfRklMRVMgOj0gXAotICAgIGFyY2gtYXJtL2Jpb25pYy9leGlkeF9keW5hbWljLmMgXAorbGliY19uZXRic2Rfc3JjX2ZpbGVzX2FybSA6PSBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9oYXNoL3NoYTEvc2hhMS5jIFwKIAotIyBSZW1vdmUgdGhlIEMrKyBmb3J0aWZ5IGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgYW4KLSMgYXJtIGFzc2VtYmxlciB2ZXJzaW9uLgotX0xJQkNfRk9SVElGWV9GSUxFU19UT19SRU1PVkUgOj0gXAotICAgIGJpb25pYy9fX21lbWNweV9jaGsuY3BwIFwKLSAgICBiaW9uaWMvX19tZW1zZXRfY2hrLmNwcCBcCi0gICAgYmlvbmljL19fc3RyY3B5X2Noay5jcHAgXAotICAgIGJpb25pYy9fX3N0cmNhdF9jaGsuY3BwIFwKLQotbGliY19jb21tb25fc3JjX2ZpbGVzIDo9IFwKLSAgICAkKGZpbHRlci1vdXQgJChfTElCQ19GT1JUSUZZX0ZJTEVTX1RPX1JFTU9WRSksJChsaWJjX2NvbW1vbl9zcmNfZmlsZXMpKQotCi1pZmVxICgkKHN0cmlwICQod2lsZGNhcmQgYmlvbmljL2xpYmMvYXJjaC1hcm0vJChUQVJHRVRfQ1BVX1ZBUklBTlQpLyQoVEFSR0VUX0NQVV9WQVJJQU5UKS5taykpLCkKLSQoZXJyb3IgIlRBUkdFVF9DUFVfVkFSSUFOVCBub3Qgc2V0IG9yIHNldCB0byBhbiB1bmtub3duIHZhbHVlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGNvcnRleC1hNywgY29ydGV4LWE4LCBjb3J0ZXgtYTksIGNvcnRleC1hMTUsIGtyYWl0LiBVc2UgZ2VuZXJpYyBmb3IgZGV2aWNlcyB0aGF0IGRvIG5vdCBoYXZlIGEgQ1BVIHNpbWlsYXIgdG8gYW55IG9mIHRoZSBzdXBwb3J0ZWQgY3B1IHZhcmlhbnRzLiIpCisjIyBDUFUgdmFyaWFudCBzcGVjaWZpYyBzb3VyY2UgZmlsZXMKK2lmZXEgKCQoc3RyaXAgJChUQVJHRVRfJChteV8ybmRfYXJjaF9wcmVmaXgpQ1BVX1ZBUklBTlQpKSwpCisgICQod2FybmluZyBUQVJHRVRfJChteV8ybmRfYXJjaF9wcmVmaXgpQVJDSCBpcyBhcm0sIGJ1dCBUQVJHRVRfJChteV8ybmRfYXJjaF9wcmVmaXgpQ1BVX1ZBUklBTlQgaXMgbm90IGRlZmluZWQpCiBlbmRpZgorY3B1X3ZhcmlhbnRfbWsgOj0gJChMT0NBTF9QQVRIKS9hcmNoLWFybS8kKFRBUkdFVF8kKG15XzJuZF9hcmNoX3ByZWZpeClDUFVfVkFSSUFOVCkvJChUQVJHRVRfJChteV8ybmRfYXJjaF9wcmVmaXgpQ1BVX1ZBUklBTlQpLm1rCitpZmVxICgkKHdpbGRjYXJkICQoY3B1X3ZhcmlhbnRfbWspKSwpCiskKGVycm9yICJUQVJHRVRfJChteV8ybmRfYXJjaF9wcmVmaXgpQ1BVX1ZBUklBTlQgbm90IHNldCBvciBzZXQgdG8gYW4gdW5rbm93biB2YWx1ZS4gUG9zc2libGUgdmFsdWVzIGFyZSBjb3J0ZXgtYTcsIGNvcnRleC1hOCwgY29ydGV4LWE5LCBjb3J0ZXgtYTE1LCBrcmFpdCwgZGVudmVyLiBVc2UgZ2VuZXJpYyBmb3IgZGV2aWNlcyB0aGF0IGRvIG5vdCBoYXZlIGEgQ1BVIHNpbWlsYXIgdG8gYW55IG9mIHRoZSBzdXBwb3J0ZWQgY3B1IHZhcmlhbnRzLiIpCitlbmRpZgoraW5jbHVkZSAkKGNwdV92YXJpYW50X21rKQorbGliY19jb21tb25fYWRkaXRpb25hbF9kZXBlbmRlbmNpZXMgKz0gJChjcHVfdmFyaWFudF9taykKIAotX0xJQkNfQVJDSF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSBcCi0gICAgJChMT0NBTF9QQVRIKS9hcmNoLWFybS8kKFRBUkdFVF9DUFVfVkFSSUFOVCkvJChUQVJHRVRfQ1BVX1ZBUklBTlQpLm1rCi1pbmNsdWRlICQoTE9DQUxfUEFUSCkvYXJjaC1hcm0vJChUQVJHRVRfQ1BVX1ZBUklBTlQpLyQoVEFSR0VUX0NQVV9WQVJJQU5UKS5taworY3B1X3ZhcmlhbnRfbWsgOj0KKworCitsaWJjX2NydF90YXJnZXRfY2ZsYWdzX2FybSA6PSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL2FyY2gtYXJtL2luY2x1ZGUgXAorICAgIC1tdGh1bWItaW50ZXJ3b3JrCisKK2xpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3NfYXJtIDo9CisKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlX2FybSA6PSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLWNvbW1vbi9iaW9uaWMvY3J0YmVnaW4uYworCitsaWJjX2NydF90YXJnZXRfY3J0YmVnaW5fc29fZmlsZV9hcm0gOj0gXAorICAgICQoTE9DQUxfUEFUSCkvYXJjaC1jb21tb24vYmlvbmljL2NydGJlZ2luX3NvLmMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19fYWVhYmkuYyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL19fYWVhYmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU0ZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX19hZWFiaS5jCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKy8vIGNsYW5nIGludGVycHJldHMgLWZuby1idWlsdGluIG1vcmUgbG9vc2VseSB0aGFuIHlvdSBtaWdodCBleHBlY3QsCisvLyBhbmQgdGhpbmtzIGl0J3Mgb2theSB0byBzdGlsbCBzdWJzdGl0dXRlIGJ1aWx0aW5zIGFzIGxvbmcgYXMgdGhleSdyZQorLy8gbmFtZWQgX19hZWFiaV8qIHJhdGhlciB0aGFuIF9fYnVpbHRpbl8qLCB3aGljaCBjYXVzZXMgaW5maW5pdGUKKy8vIHJlY3Vyc2lvbiBpZiB3ZSBoYXZlIHRoZSBmb3J0aWZpZWQgbWVtY3B5IHZpc2libGUgaW4gdGhpcyBmaWxlLgorI3VuZGVmIF9GT1JUSUZZX1NPVVJDRQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworZXh0ZXJuIGludCBfX2N4YV9hdGV4aXQodm9pZCAoKikodm9pZCopLCB2b2lkKiwgdm9pZCopOworCisvKiBUaGUgIkMrKyBBQkkgZm9yIEFSTSIgZG9jdW1lbnQgc3RhdGVzIHRoYXQgc3RhdGljIEMrKyBjb25zdHJ1Y3RvcnMsCisgKiB3aGljaCBhcmUgY2FsbGVkIGZyb20gdGhlIC5pbml0X2FycmF5LCBzaG91bGQgbWFudWFsbHkgY2FsbAorICogX19hZWFiaV9hdGV4aXQoKSB0byByZWdpc3RlciBzdGF0aWMgZGVzdHJ1Y3RvcnMgZXhwbGljaXRseS4KKyAqCisgKiBOb3RlIHRoYXQgJ2Rzb19oYW5kbGUnIGlzIHRoZSBhZGRyZXNzIG9mIGEgbWFnaWMgbGlua2VyLWdlbmVyYXRlCisgKiB2YXJpYWJsZSBmcm9tIHRoZSBzaGFyZWQgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IKKyAqLworCisvLyBNYWtlIHRoaXMgYSB3ZWFrIHN5bWJvbCB0byBhdm9pZCBhIG11bHRpcGxlIGRlZmluaXRpb24gZXJyb3Igd2hlbiBsaW5raW5nIHdpdGggbGlic3RkYysrLXYzLgoraW50IF9fYXR0cmlidXRlX18oKHdlYWspKQorX19hZWFiaV9hdGV4aXQodm9pZCAqb2JqZWN0LCB2b2lkICgqZGVzdHJ1Y3RvcikgKHZvaWQgKiksIHZvaWQgKmRzb19oYW5kbGUpIHsKKyAgICByZXR1cm4gX19jeGFfYXRleGl0KGRlc3RydWN0b3IsIG9iamVjdCwgZHNvX2hhbmRsZSk7Cit9CisKKwordm9pZCBfX2FlYWJpX21lbWNweTgodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgeworICAgIG1lbWNweShkZXN0LCBzcmMsIG4pOworfQorCit2b2lkIF9fYWVhYmlfbWVtY3B5NCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7CisgICAgbWVtY3B5KGRlc3QsIHNyYywgbik7Cit9CisKK3ZvaWQgX19hZWFiaV9tZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgeworICAgIG1lbWNweShkZXN0LCBzcmMsIG4pOworfQorCisKK3ZvaWQgX19hZWFiaV9tZW1tb3ZlOCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7CisgICAgbWVtbW92ZShkZXN0LCBzcmMsIG4pOworfQorCit2b2lkIF9fYWVhYmlfbWVtbW92ZTQodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgeworICAgIG1lbW1vdmUoZGVzdCwgc3JjLCBuKTsKK30KKwordm9pZCBfX2FlYWJpX21lbW1vdmUodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgeworICAgIG1lbW1vdmUoZGVzdCwgc3JjLCBuKTsKK30KKworLyoKKyAqIF9fYWVhYmlfbWVtc2V0IGhhcyB0aGUgb3JkZXIgb2YgaXRzIHNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzIHJldmVyc2VkLgorICogIFRoaXMgYWxsb3dzIF9fYWVhYmlfbWVtY2xyIHRvIHRhaWwtY2FsbCBfX2FlYWJpX21lbXNldAorICovCisKK3ZvaWQgX19hZWFiaV9tZW1zZXQ4KHZvaWQgKmRlc3QsIHNpemVfdCBuLCBpbnQgYykgeworICAgIG1lbXNldChkZXN0LCBjLCBuKTsKK30KKwordm9pZCBfX2FlYWJpX21lbXNldDQodm9pZCAqZGVzdCwgc2l6ZV90IG4sIGludCBjKSB7CisgICAgbWVtc2V0KGRlc3QsIGMsIG4pOworfQorCit2b2lkIF9fYWVhYmlfbWVtc2V0KHZvaWQgKmRlc3QsIHNpemVfdCBuLCBpbnQgYykgeworICAgIG1lbXNldChkZXN0LCBjLCBuKTsKK30KKworCit2b2lkIF9fYWVhYmlfbWVtY2xyOCh2b2lkICpkZXN0LCBzaXplX3QgbikgeworICAgIF9fYWVhYmlfbWVtc2V0OChkZXN0LCBuLCAwKTsKK30KKwordm9pZCBfX2FlYWJpX21lbWNscjQodm9pZCAqZGVzdCwgc2l6ZV90IG4pIHsKKyAgICBfX2FlYWJpX21lbXNldDQoZGVzdCwgbiwgMCk7Cit9CisKK3ZvaWQgX19hZWFiaV9tZW1jbHIodm9pZCAqZGVzdCwgc2l6ZV90IG4pIHsKKyAgICBfX2FlYWJpX21lbXNldChkZXN0LCBuLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19fYmlvbmljX2Nsb25lLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCmluZGV4IDcyZjQ4OTIuLmY1Y2Y5ZTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19fYmlvbmljX2Nsb25lLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUwpAQCAtMzEsNyArMzEsNiBAQAogLy8gcGlkX3QgX19iaW9uaWNfY2xvbmUoaW50IGZsYWdzLCB2b2lkKiBjaGlsZF9zdGFjaywgcGlkX3QqIHBhcmVudF90aWQsIHZvaWQqIHRscywgcGlkX3QqIGNoaWxkX3RpZCwgaW50ICgqZm4pKHZvaWQqKSwgdm9pZCogYXJnKTsKIEVOVFJZKF9fYmlvbmljX2Nsb25lKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgIyBzYXZlIHJlZ2lzdGVycyB0byBwYXJlbnQgc3RhY2sKICAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKQEAgLTU1LDIwICs1NCwxNiBAQAogCiAgICAgIyBJbiB0aGUgcGFyZW50LCByZWxvYWQgc2F2ZWQgcmVnaXN0ZXJzIHRoZW4gZWl0aGVyIHJldHVybiBvciBzZXQgZXJybm8uCiAgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogMTogICMgVGhlIGNoaWxkLgotICAgICMgUmUtYWRkIHRoZSB1bndpbmQgZGlyZWN0aXZlcyB0aGF0IHdlcmUgcmVzZXQgZnJvbSBhYm92ZS4KLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IHI1LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IHI2LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IHI3LCAxMgorICAgICMgU2V0dGluZyBsciB0byAwIHdpbGwgbWFrZSB0aGUgdW53aW5kZXIgc3RvcCBhdCBfX3N0YXJ0X3RocmVhZAorICAgIG1vdiAgICBsciwgIzAKICAgICBsZHIgICAgcjAsIFtzcCwgIy00XQogICAgIGxkciAgICByMSwgW3NwLCAjLThdCi0gICAgYiAgICAgIF9fYmlvbmljX2Nsb25lX2VudHJ5CisgICAgYiAgICAgIF9fc3RhcnRfdGhyZWFkCiBFTkQoX19iaW9uaWNfY2xvbmUpCisuaGlkZGVuIF9fYmlvbmljX2Nsb25lCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9zcC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX19nZXRfc3AuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE3ZTdiNy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9zcC5TCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotRU5UUlkoX19nZXRfc3ApCi0gIG1vdiByMCwgc3AKLSAgYnggbHIKLUVORChfX2dldF9zcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwppbmRleCA2ZmE5NTBlLi4xYTY3ZmVkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIC8vIHZvaWQgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bih2b2lkKiBzdGFja0Jhc2UsIHNpemVfdCBzdGFja1NpemUpCi1FTlRSWShfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKQorRU5UUllfUFJJVkFURShfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKQogICBsZHIgcjcsID1fX05SX211bm1hcAogICBzd2kgIzAKICAgLy8gSWYgbXVubWFwIGZhaWxlZCwgd2UgaWdub3JlIHRoZSBmYWlsdXJlIGFuZCBleGl0IGFueXdheS4KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19zZXRqbXAuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL19zZXRqbXAuUwppbmRleCA2YjhhYTUwLi42NGEwYTMxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9fc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX3NldGptcC5TCkBAIC0zNCw3ICszNCw3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NldGptcC5oPgogI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+CiAKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiAJLyogdmFsaWRhdGlvbiBmYWlsZWQsIGRpZSBkaWUgZGllLiAqLwogYm90Y2g6Ci0JYmwJUElDX1NZTShfQ19MQUJFTChsb25nam1wZXJyb3IpLCBQTFQpCi0JYmwJUElDX1NZTShfQ19MQUJFTChhYm9ydCksIFBMVCkKKwlibAlQSUNfU1lNKGxvbmdqbXBlcnJvciwgUExUKQorCWJsCVBJQ19TWU0oYWJvcnQsIFBMVCkKIAliCS4gLSA4CQkvKiBDYW5ub3QgZ2V0IGhlcmUgKi8KIEVORChfbG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2Fib3J0X2FybS5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvYWJvcnRfYXJtLlMKaW5kZXggMmZjMjkxMy4uNmIxODFlZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvYWJvcnRfYXJtLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvYWJvcnRfYXJtLlMKQEAgLTI2LDcgKzI2LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAvKgogICogQ29kaW5nIHRoZSBhYm9ydCBmdW5jdGlvbiBpbiBhc3NlbWJseSBzbyB0aGF0IHJlZ2lzdGVycyBhcmUgZ3VhcmFudGVlZCB0bwpAQCAtMzYsMTAgKzM2LDkgQEAKICAqIHNlcXVlbmNlIHdoZW4gdGhlIGNyYXNoIGhhcHBlbnMuCiAgKi8KIEVOVFJZKGFib3J0KQotICAgIC5zYXZlICAge3IzLCByMTR9CiAgICAgc3RtZmQgICBzcCEsIHtyMywgcjE0fQogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCByMywgMAogICAgIC5jZmlfcmVsX29mZnNldCByMTQsIDQKLSAgICBibCAgICAgIFBJQ19TWU0oX0NfTEFCRUwoX19saWJjX2FuZHJvaWRfYWJvcnQpLCBQTFQpCisgICAgYmwgICAgICBQSUNfU1lNKF9fbGliY19hbmRyb2lkX2Fib3J0LCBQTFQpCiBFTkQoYWJvcnQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9lYWJpLmMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9lYWJpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MTFkZGQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvZWFiaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotZXh0ZXJuIGludCAgX19jeGFfYXRleGl0KHZvaWQgKCopKHZvaWQqKSwgdm9pZCosIHZvaWQqICk7Ci0KLS8qIFRoZSAiQysrIEFCSSBmb3IgQVJNIiBkb2N1bWVudCBzdGF0ZXMgdGhhdCBzdGF0aWMgQysrIGNvbnN0cnVjdG9ycywKLSAqIHdoaWNoIGFyZSBjYWxsZWQgZnJvbSB0aGUgLmluaXRfYXJyYXksIHNob3VsZCBtYW51YWxseSBjYWxsCi0gKiBfX2FlYWJpX2F0ZXhpdCgpIHRvIHJlZ2lzdGVyIHN0YXRpYyBkZXN0cnVjdG9ycyBleHBsaWNpdGx5LgotICoKLSAqIE5vdGUgdGhhdCAnZHNvX2hhbmRsZScgaXMgdGhlIGFkZHJlc3Mgb2YgYSBtYWdpYyBsaW5rZXItZ2VuZXJhdGUKLSAqIHZhcmlhYmxlIGZyb20gdGhlIHNoYXJlZCBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgY29uc3RydWN0b3IvZGVzdHJ1Y3RvcgotICovCi0KLS8qIE1ha2UgdGhpcyBhIHdlYWsgc3ltYm9sIHRvIGF2b2lkIGEgbXVsdGlwbGUgZGVmaW5pdGlvbiBlcnJvciB3aGVuIGxpbmtpbmcKLSAqIHdpdGggbGlic3RkYysrLXYzLiAgKi8KLWludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkKLV9fYWVhYmlfYXRleGl0ICh2b2lkICpvYmplY3QsIHZvaWQgKCpkZXN0cnVjdG9yKSAodm9pZCAqKSwgdm9pZCAqZHNvX2hhbmRsZSkKLXsKLSAgICByZXR1cm4gX19jeGFfYXRleGl0KGRlc3RydWN0b3IsIG9iamVjdCwgZHNvX2hhbmRsZSk7Ci19Ci0KLQotdm9pZCBfX2FlYWJpX21lbWNweTgodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgewotICAgIG1lbWNweShkZXN0LCBzcmMsIG4pOwotfQotCi12b2lkIF9fYWVhYmlfbWVtY3B5NCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7Ci0gICAgbWVtY3B5KGRlc3QsIHNyYywgbik7Ci19Ci0KLXZvaWQgX19hZWFiaV9tZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgewotICAgIG1lbWNweShkZXN0LCBzcmMsIG4pOwotfQotCi0KLXZvaWQgX19hZWFiaV9tZW1tb3ZlOCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7Ci0gICAgbWVtbW92ZShkZXN0LCBzcmMsIG4pOwotfQotCi12b2lkIF9fYWVhYmlfbWVtbW92ZTQodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgewotICAgIG1lbW1vdmUoZGVzdCwgc3JjLCBuKTsKLX0KLQotdm9pZCBfX2FlYWJpX21lbW1vdmUodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgewotICAgIG1lbW1vdmUoZGVzdCwgc3JjLCBuKTsKLX0KLQotLyoKLSAqIF9fYWVhYmlfbWVtc2V0IGhhcyB0aGUgb3JkZXIgb2YgaXRzIHNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzIHJldmVyc2VkLiAKLSAqICBUaGlzIGFsbG93cyBfX2FlYWJpX21lbWNsciB0byB0YWlsLWNhbGwgX19hZWFiaV9tZW1zZXQKLSAqLwotIAotdm9pZCBfX2FlYWJpX21lbXNldDgodm9pZCAqZGVzdCwgc2l6ZV90IG4sIGludCBjKSB7Ci0gICAgbWVtc2V0KGRlc3QsIGMsIG4pOwotfQotCi12b2lkIF9fYWVhYmlfbWVtc2V0NCh2b2lkICpkZXN0LCBzaXplX3QgbiwgaW50IGMpIHsKLSAgICBtZW1zZXQoZGVzdCwgYywgbik7Ci19Ci0KLXZvaWQgX19hZWFiaV9tZW1zZXQodm9pZCAqZGVzdCwgc2l6ZV90IG4sIGludCBjKSB7Ci0gICAgbWVtc2V0KGRlc3QsIGMsIG4pOwotfQotCi0KLXZvaWQgX19hZWFiaV9tZW1jbHI4KHZvaWQgKmRlc3QsIHNpemVfdCBuKSB7Ci0gICAgX19hZWFiaV9tZW1zZXQ4KGRlc3QsIG4sIDApOwotfQotCi12b2lkIF9fYWVhYmlfbWVtY2xyNCh2b2lkICpkZXN0LCBzaXplX3QgbikgewotICAgIF9fYWVhYmlfbWVtc2V0NChkZXN0LCBuLCAwKTsKLX0KLQotdm9pZCBfX2FlYWJpX21lbWNscih2b2lkICpkZXN0LCBzaXplX3QgbikgewotICAgIF9fYWVhYmlfbWVtc2V0KGRlc3QsIG4sIDApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvZnV0ZXhfYXJtLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9mdXRleF9hcm0uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFiYTI3OC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9mdXRleF9hcm0uUworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi0jZGVmaW5lIEZVVEVYX1dBSVQgMAotI2RlZmluZSBGVVRFWF9XQUtFIDEKLQotLy8gaW50IF9fZnV0ZXhfc3lzY2FsbDModm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgb3AsIGludCBjb3VudCkKLUVOVFJZKF9fZnV0ZXhfc3lzY2FsbDMpCi0gICAgbW92ICAgICBpcCwgcjcKLSAgICBsZHIgICAgIHI3LCA9X19OUl9mdXRleAotICAgIHN3aSAgICAgIzAKLSAgICBtb3YgICAgIHI3LCBpcAotICAgIGJ4ICAgICAgbHIKLUVORChfX2Z1dGV4X3N5c2NhbGwzKQotCi0vLyBpbnQgX19mdXRleF9zeXNjYWxsNCh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBvcCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KQotRU5UUlkoX19mdXRleF9zeXNjYWxsNCkKLSAgICBiIF9fZnV0ZXhfc3lzY2FsbDMKLUVORChfX2Z1dGV4X3N5c2NhbGw0KQotCi0vLyBpbnQgX19mdXRleF93YWl0KHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KQotRU5UUlkoX19mdXRleF93YWl0KQotICAgIG1vdiAgICAgaXAsIHI3Ci0gICAgbW92ICAgICByMywgcjIKLSAgICBtb3YgICAgIHIyLCByMQotICAgIG1vdiAgICAgcjEsICNGVVRFWF9XQUlUCi0gICAgbGRyICAgICByNywgPV9fTlJfZnV0ZXgKLSAgICBzd2kgICAgICMwCi0gICAgbW92ICAgICByNywgaXAKLSAgICBieCAgICAgIGxyCi1FTkQoX19mdXRleF93YWl0KQotCi0vLyBpbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IGNvdW50KQotRU5UUlkoX19mdXRleF93YWtlKQotICAgIG1vdiAgICAgaXAsIHI3Ci0gICAgbW92ICAgICByMiwgcjEKLSAgICBtb3YgICAgIHIxLCAjRlVURVhfV0FLRQotICAgIGxkciAgICAgcjcsID1fX05SX2Z1dGV4Ci0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgYnggICAgICBscgotRU5EKF9fZnV0ZXhfd2FrZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2xpYmdjY19jb21wYXQuYyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2xpYmdjY19jb21wYXQuYwppbmRleCBmNjk0MDYwLi4xMGZhZjJkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9saWJnY2NfY29tcGF0LmMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbGliZ2NjX2NvbXBhdC5jCkBAIC0xLDE3NyArMSwxNTkgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KKy8qIEdlbmVyYXRlZCBieSBnZW5saWJnY2NfY29tcGF0LnB5ICovCiAKLS8qIFRoaXMgZmlsZSBjb250YWlucyBkdW1teSByZWZlcmVuY2VzIHRvIGxpYmdjYy5hIGZ1bmN0aW9ucyB0byBmb3JjZSB0aGUKLSAqIGR5bmFtaWMgbGlua2VyIHRvIGNvcHkgdGhlaXIgZGVmaW5pdGlvbiBpbnRvIHRoZSBmaW5hbCBsaWJjLnNvIGJpbmFyeS4KLSAqCi0gKiBUaGV5IGFyZSByZXF1aXJlZCB0byBlbnN1cmUgYmFja3dhcmRzIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGgKLSAqIGxpYmMuc28gcHJvdmlkZWQgYnkgdGhlIHBsYXRmb3JtIGFuZCBiaW5hcmllcyBidWlsdCB3aXRoIHRoZSBOREsgb3IKLSAqIGRpZmZlcmVudCB2ZXJzaW9ucy9jb25maWd1cmF0aW9ucyBvZiB0b29sY2hhaW5zLgotICoKLSAqIE5vdywgZm9yIGEgbW9yZSBlbGFib3JhdGUgZGVzY3JpcHRpb24gb2YgdGhlIGlzc3VlOgotICoKLSAqIGxpYmdjYy5hIGlzIGEgY29tcGlsZXItc3BlY2lmaWMgbGlicmFyeSBjb250YWluaW5nIHZhcmlvdXMgaGVscGVyCi0gKiBmdW5jdGlvbnMgdXNlZCB0byBpbXBsZW1lbnQgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBuZWNlc3NhcmlseQotICogc3VwcG9ydGVkIGJ5IHRoZSB0YXJnZXQgQ1BVLiBGb3IgZXhhbXBsZSwgaW50ZWdlciBkaXZpc2lvbiBkb2Vzbid0IGhhdmUgYQotICogY29ycmVzcG9uZGluZyBDUFUgaW5zdHJ1Y3Rpb24gb24gQVJNdjUsIGFuZCBpcyBpbnN0ZWFkIGltcGxlbWVudGVkIGluIHRoZQotICogY29tcGlsZXItZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSBhcyBhIGNhbGwgdG8gYW4gX19pZGl2IGhlbHBlciBmdW5jdGlvbi4KLSAqCi0gKiBOb3JtYWxseSwgb25lIGhhcyB0byBwbGFjZSBsaWJnY2MuYSBpbiB0aGUgbGluayBjb21tYW5kIHVzZWQgdG8gZ2VuZXJhdGUKLSAqIHRhcmdldCBiaW5hcmllcyAoc2hhcmVkIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMpIGFmdGVyIGFsbCBvYmplY3RzIGFuZAotICogc3RhdGljIGxpYnJhcmllcywgYnV0IGJlZm9yZSBkZXBlbmRlbnQgc2hhcmVkIGxpYnJhcmllcywgaS5lLiBzb21ldGhpbmcKLSAqIGxpa2U6Ci0gKiAgICAgICAgIGdjYyA8b3B0aW9ucz4gLW8gbGliZm9vLnNvICBmb28uYSBsaWJnY2MuYSAtbGMgLWxtCi0gKgotICogVGhpcyBlbnN1cmVzIHRoYXQgYW55IGhlbHBlciBmdW5jdGlvbiBuZWVkZWQgYnkgdGhlIGNvZGUgaW4gZm9vLmEgaXMgY29waWVkCi0gKiBpbnRvIHRoZSBmaW5hbCBsaWJmb28uc28uIEhvd2V2ZXIsIGRvaW5nIHNvIHdpbGwgbGluayBhIGJ1bmNoIG9mIG90aGVyIF9fY3hhCi0gKiBmdW5jdGlvbnMgZnJvbSBsaWJnY2MuYSBpbnRvIGVhY2ggLnNvIGFuZCBleGVjdXRhYmxlLCBjYXVzaW5nIDRrKyBpbmNyZWFzZQotICogaW4gZXZlcnkgYmluYXJ5LiBUaGVyZWZvcmUgdGhlIEFuZHJvaWQgcGxhdGZvcm0gYnVpbGQgc3lzdGVtIGhhcyBiZWVuCi0gKiB1c2luZyB0aGlzIGluc3RlYWQ6Ci0gKgotICogICAgICAgICBnY2MgPG9wdGlvbnM+IC1vIGxpYmZvby5zbyBmb28uYSAtbGMgLWxtIGxpYmdjYy5hCi0gKgotICogVGhlIHByb2JsZW0gd2l0aCB0aGlzIGlzIHRoYXQgaWYgb25lIGhlbHBlciBmdW5jdGlvbiBuZWVkZWQgYnkgZm9vLmEgaGFzCi0gKiBhbHJlYWR5IGJlZW4gY29waWVkIGludG8gbGliYy5zbyBvciBsaWJtLnNvLCB0aGVuIG5vdGhpbmcgd2lsbCBiZSBjb3BpZWQKLSAqIGludG8gbGliZm9vLnNvLiBJbnN0ZWFkLCBhIHN5bWJvbCBpbXBvcnQgZGVmaW5pdGlvbiB3aWxsIGJlIGFkZGVkIHRvIGl0Ci0gKiBzbyBsaWJmb28uc28gY2FuIGRpcmVjdGx5IGNhbGwgdGhlIG9uZSBpbiBsaWJjLnNvIGF0IHJ1bnRpbWUuCi0gKgotICogV2hlbiByZWZyZXNoaW5nIHRvb2xjaGFpbnMgZm9yIG5ldyB2ZXJzaW9ucyBvciB1c2luZyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlCi0gKiBmbGFncywgdGhlIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGNvcGllZCB0byBsaWJjLnNvIG1heSBjaGFuZ2UsIHdoaWNoCi0gKiByZXN1bHRlZCBpbiBzb21lIG5hdGl2ZSBzaGFyZWQgbGlicmFyaWVzIGdlbmVyYXRlZCB3aXRoIHRoZSBOREsgb3IgcHJlYnVpbHRzCi0gKiBmcm9tIHZlbmRvcnMgdG8gZmFpbCB0byBsb2FkIHByb3Blcmx5LgotICoKLSAqIFRoZSBOREsgaGFzIGJlZW4gZml4ZWQgYWZ0ZXIgMS42X3IxIHRvIHVzZSB0aGUgY29ycmVjdCBsaW5rIGNvbW1hbmQsIHNvCi0gKiBhbnkgbmF0aXZlIHNoYXJlZCBsaWJyYXJ5IGdlbmVyYXRlZCB3aXRoIGl0IHNob3VsZCBub3cgYmUgc2FmZSBmcm9tIHRoYXQKLSAqIHByb2JsZW0uIE9uIHRoZSBvdGhlciBoYW5kLCBleGlzdGluZyBzaGFyZWQgbGlicmFyaWVzIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIGFwcGxpY2F0aW9ucyB0aGF0IHdlcmUgZ2VuZXJhdGVkIHdpdGggYSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBOREsKLSAqIHN0aWxsIG5lZWQgYWxsIDEuNS8xLjYgaGVscGVyIGZ1bmN0aW9ucyBpbiBsaWJjLnNvIGFuZCBsaWJtLnNvCi0gKgotICogQWZ0ZXIgMy4yLCB0aGUgdG9vbGNoYWluIHdhcyB1cGRhdGVkIGFnYWluLCBhZGRpbmcgX19hZWFiaV9mMnVpeiB0byB0aGUKLSAqIGxpc3Qgb2YgcmVxdWlyZW1lbnRzLiBUZWNobmljYWxseSwgdGhpcyBpcyBkdWUgdG8gbWlzLWxpbmtlZCBOREsgbGlicmFyaWVzCi0gKiBidXQgaXQgaXMgZWFzaWVyIHRvIGFkZCBhIHNpbmdsZSBmdW5jdGlvbiBoZXJlIHRoYW4gYXNraW5nIHNldmVyYWwgYXBwCi0gKiBkZXZlbG9wZXJzIHRvIGZpeCB0aGVpciBidWlsZC4KLSAqCi0gKiBUaGUgX19hZWFiaV9pZGl2IGZ1bmN0aW9uIGlzIGFkZGVkIHRvIHRoZSBsaXN0IHNpbmNlIGNvcnRleC1hMTUgc3VwcG9ydHMKLSAqIEhXIGlkaXYgaW5zdHJ1Y3Rpb25zIHNvIHRoZSBzeXN0ZW0gbGliYy5zbyBkb2Vzbid0IHB1bGwgaW4gdGhlIHJlZmVyZW5jZSB0bwotICogX19hZWFiaV9pZGl2IGJ1dCBsZWdhY3kgbGlicmFyaWVzIGJ1aWx0IGFnYWluc3QgY29ydGV4LWE5IHRhcmdldHMgc3RpbGwgbmVlZAotICogaXQuCi0gKgotICogRmluYWwgbm90ZTogc29tZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IHNob3VsZCByZWFsbHkgYmUgaW4gbGlibS5zbyB0bwotICogICAgICAgICAgICAgY29tcGxldGVseSByZWZsZWN0IHRoZSBzdGF0ZSBvZiAxLjUvMS42IHN5c3RlbSBpbWFnZXMuIEhvd2V2ZXIsCi0gKiAgICAgICAgICAgICBzaW5jZSBsaWJtLnNvIGRlcGVuZHMgb24gbGliYy5zbywgaXQncyBlYXNpZXIgdG8gcHV0IGFsbCBvZgotICogICAgICAgICAgICAgdGhlc2UgaW4gbGliYy5zbyBpbnN0ZWFkLCBzaW5jZSB0aGUgZHluYW1pYyBsaW5rZXIgd2lsbCBhbHdheXMKLSAqICAgICAgICAgICAgIHNlYXJjaCBpbiBsaWJjLnNvIGJlZm9yZSBsaWJtLnNvIGZvciBkZXBlbmRlbmNpZXMuCi0gKi8KK2V4dGVybiBjaGFyIF9fYWRkZGYzOworZXh0ZXJuIGNoYXIgX19hZGRzZjM7CitleHRlcm4gY2hhciBfX2FlYWJpX2NkY21wZXE7CitleHRlcm4gY2hhciBfX2FlYWJpX2NkY21wbGU7CitleHRlcm4gY2hhciBfX2FlYWJpX2NkcmNtcGxlOworZXh0ZXJuIGNoYXIgX19hZWFiaV9kMmY7CitleHRlcm4gY2hhciBfX2FlYWJpX2QyaXo7CitleHRlcm4gY2hhciBfX2FlYWJpX2RhZGQ7CitleHRlcm4gY2hhciBfX2FlYWJpX2RjbXBlcTsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZGNtcGdlOworZXh0ZXJuIGNoYXIgX19hZWFiaV9kY21wZ3Q7CitleHRlcm4gY2hhciBfX2FlYWJpX2RjbXBsZTsKK2V4dGVybiBjaGFyIF9fYWVhYmlfZGNtcGx0OworZXh0ZXJuIGNoYXIgX19hZWFiaV9kY21wdW47CitleHRlcm4gY2hhciBfX2FlYWJpX2RkaXY7CitleHRlcm4gY2hhciBfX2FlYWJpX2RtdWw7CitleHRlcm4gY2hhciBfX2FlYWJpX2Ryc3ViOworZXh0ZXJuIGNoYXIgX19hZWFiaV9kc3ViOworZXh0ZXJuIGNoYXIgX19hZWFiaV9mMmQ7CitleHRlcm4gY2hhciBfX2FlYWJpX2YyaXo7CitleHRlcm4gY2hhciBfX2FlYWJpX2YydWl6OworZXh0ZXJuIGNoYXIgX19hZWFiaV9mYWRkOworZXh0ZXJuIGNoYXIgX19hZWFiaV9mY21wdW47CitleHRlcm4gY2hhciBfX2FlYWJpX2ZkaXY7CitleHRlcm4gY2hhciBfX2FlYWJpX2ZtdWw7CitleHRlcm4gY2hhciBfX2FlYWJpX2Zyc3ViOworZXh0ZXJuIGNoYXIgX19hZWFiaV9mc3ViOworZXh0ZXJuIGNoYXIgX19hZWFiaV9pMmQ7CitleHRlcm4gY2hhciBfX2FlYWJpX2kyZjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfaWRpdjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfaWRpdm1vZDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfbDJkOworZXh0ZXJuIGNoYXIgX19hZWFiaV9sMmY7CitleHRlcm4gY2hhciBfX2FlYWJpX2xhc3I7CitleHRlcm4gY2hhciBfX2FlYWJpX2xkaXZtb2Q7CitleHRlcm4gY2hhciBfX2FlYWJpX2xsc2w7CitleHRlcm4gY2hhciBfX2FlYWJpX2xsc3I7CitleHRlcm4gY2hhciBfX2FlYWJpX2xtdWw7CitleHRlcm4gY2hhciBfX2FlYWJpX3VpMmQ7CitleHRlcm4gY2hhciBfX2FlYWJpX3VpMmY7CitleHRlcm4gY2hhciBfX2FlYWJpX3VpZGl2OworZXh0ZXJuIGNoYXIgX19hZWFiaV91aWRpdm1vZDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfdWwyZDsKK2V4dGVybiBjaGFyIF9fYWVhYmlfdWwyZjsKK2V4dGVybiBjaGFyIF9fYWVhYmlfdWxkaXZtb2Q7CitleHRlcm4gY2hhciBfX2FlYWJpX3Vud2luZF9jcHBfcHIwOworZXh0ZXJuIGNoYXIgX19hZWFiaV91bndpbmRfY3BwX3ByMTsKK2V4dGVybiBjaGFyIF9fY21wZGYyOworZXh0ZXJuIGNoYXIgX19kaXZkZjM7CitleHRlcm4gY2hhciBfX2RpdnNmMzsKK2V4dGVybiBjaGFyIF9fZXFkZjI7CitleHRlcm4gY2hhciBfX2V4dGVuZHNmZGYyOworZXh0ZXJuIGNoYXIgX19maXhkZnNpOworZXh0ZXJuIGNoYXIgX19maXhzZnNpOworZXh0ZXJuIGNoYXIgX19mbG9hdGRpZGY7CitleHRlcm4gY2hhciBfX2Zsb2F0ZGlzZjsKK2V4dGVybiBjaGFyIF9fZmxvYXRzaWRmOworZXh0ZXJuIGNoYXIgX19mbG9hdHNpc2Y7CitleHRlcm4gY2hhciBfX2Zsb2F0dW5kaWRmOworZXh0ZXJuIGNoYXIgX19mbG9hdHVuZGlzZjsKK2V4dGVybiBjaGFyIF9fZmxvYXR1bnNpZGY7CitleHRlcm4gY2hhciBfX2Zsb2F0dW5zaXNmOworZXh0ZXJuIGNoYXIgX19nZWRmMjsKK2V4dGVybiBjaGFyIF9fZ3RkZjI7CitleHRlcm4gY2hhciBfX2xlZGYyOworZXh0ZXJuIGNoYXIgX19sdGRmMjsKK2V4dGVybiBjaGFyIF9fbXVsZGYzOworZXh0ZXJuIGNoYXIgX19tdWxkaTM7CitleHRlcm4gY2hhciBfX211bHNmMzsKK2V4dGVybiBjaGFyIF9fbmVkZjI7CitleHRlcm4gY2hhciBfX3BvcGNvdW50X3RhYjsKK2V4dGVybiBjaGFyIF9fcG9wY291bnRzaTI7CitleHRlcm4gY2hhciBfX3N1YmRmMzsKK2V4dGVybiBjaGFyIF9fc3Vic2YzOworZXh0ZXJuIGNoYXIgX190cnVuY2Rmc2YyOworZXh0ZXJuIGNoYXIgX191bm9yZGRmMjsKK2V4dGVybiBjaGFyIF9fdW5vcmRzZjI7CiAKLSNkZWZpbmUgICBDT01QQVRfRlVOQ1RJT05TX0xJU1QgXAotICAgIFhYKF9fYWRkZGYzKSAgICAgICAgICAgICBcCi0gICAgWFgoX19hZGRzZjMpICAgICAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2NkY21wZXEpICAgICAgXAotICAgIFhYKF9fYWVhYmlfY2RjbXBsZSkgICAgICBcCi0gICAgWFgoX19hZWFiaV9jZHJjbXBsZSkgICAgIFwKLSAgICBYWChfX2FlYWJpX2QyZikgICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZDJpeikgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9kYWRkKSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2RjbXBlcSkgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZGNtcGdlKSAgICAgICBcCi0gICAgWFgoX19hZWFiaV9kY21wZ3QpICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2RjbXBsZSkgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZGNtcGx0KSAgICAgICBcCi0gICAgWFgoX19hZWFiaV9kY21wdW4pICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2RkaXYpICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZG11bCkgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9kcnN1YikgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2RzdWIpICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZjJkKSAgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9mMml6KSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2YydWl6KSAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZmFkZCkgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9mY21wdW4pICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2ZkaXYpICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfZm11bCkgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9mcnN1YikgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2ZzdWIpICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfaTJkKSAgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9pMmYpICAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2lkaXYpICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfaWRpdm1vZCkgICAgICBcCi0gICAgWFgoX19hZWFiaV9sMmQpICAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX2wyZikgICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfbGFzcikgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9sZGl2bW9kKSAgICAgIFwKLSAgICBYWChfX2FlYWJpX2xsc2wpICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfbGxzcikgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV9sbXVsKSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX3VpMmQpICAgICAgICAgXAotICAgIFhYKF9fYWVhYmlfdWkyZikgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV91aWRpdikgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX3VpZGl2bW9kKSAgICAgXAotICAgIFhYKF9fYWVhYmlfdWwyZCkgICAgICAgICBcCi0gICAgWFgoX19hZWFiaV91bDJmKSAgICAgICAgIFwKLSAgICBYWChfX2FlYWJpX3VsZGl2bW9kKSAgICAgXAotICAgIFhYKF9fY21wZGYyKSAgICAgICAgICAgICBcCi0gICAgWFgoX19kaXZkZjMpICAgICAgICAgICAgIFwKLSAgICBYWChfX2RpdnNmMykgICAgICAgICAgICAgXAotICAgIFhYKF9fZXFkZjIpICAgICAgICAgICAgICBcCi0gICAgWFgoX19leHRlbmRzZmRmMikgICAgICAgIFwKLSAgICBYWChfX2ZpeGRmc2kpICAgICAgICAgICAgXAotICAgIFhYKF9fZml4c2ZzaSkgICAgICAgICAgICBcCi0gICAgWFgoX19mbG9hdGRpZGYpICAgICAgICAgIFwKLSAgICBYWChfX2Zsb2F0ZGlzZikgICAgICAgICAgXAotICAgIFhYKF9fZmxvYXRzaWRmKSAgICAgICAgICBcCi0gICAgWFgoX19mbG9hdHNpc2YpICAgICAgICAgIFwKLSAgICBYWChfX2Zsb2F0dW5kaWRmKSAgICAgICAgXAotICAgIFhYKF9fZmxvYXR1bmRpc2YpICAgICAgICBcCi0gICAgWFgoX19mbG9hdHVuc2lkZikgICAgICAgIFwKLSAgICBYWChfX2Zsb2F0dW5zaXNmKSAgICAgICAgXAotICAgIFhYKF9fZ2VkZjIpICAgICAgICAgICAgICBcCi0gICAgWFgoX19ndGRmMikgICAgICAgICAgICAgIFwKLSAgICBYWChfX2xlZGYyKSAgICAgICAgICAgICAgXAotICAgIFhYKF9fbHRkZjIpICAgICAgICAgICAgICBcCi0gICAgWFgoX19tdWxkZjMpICAgICAgICAgICAgIFwKLSAgICBYWChfX211bGRpMykgICAgICAgICAgICAgXAotICAgIFhYKF9fbXVsc2YzKSAgICAgICAgICAgICBcCi0gICAgWFgoX19uZWRmMikgICAgICAgICAgICAgIFwKLSAgICBYWChfX3BvcGNvdW50c2kyKSAgICAgICAgXAotICAgIFhYKF9fcG9wY291bnRfdGFiKSAgICAgICBcCi0gICAgWFgoX19zdWJkZjMpICAgICAgICAgICAgIFwKLSAgICBYWChfX3N1YnNmMykgICAgICAgICAgICAgXAotICAgIFhYKF9fdHJ1bmNkZnNmMikgICAgICAgICBcCi0gICAgWFgoX191bm9yZGRmMikgICAgICAgICAgIFwKLSAgICBYWChfX3Vub3Jkc2YyKSAgICAgICAgICAgXAotCi0jZGVmaW5lICBYWChmKSAgICBleHRlcm4gdm9pZCBmKHZvaWQpOwotQ09NUEFUX0ZVTkNUSU9OU19MSVNUCi0jdW5kZWYgWFgKLQotdm9pZCAgX19iaW9uaWNfbGliZ2NjX2NvbXBhdF9ob29rcyh2b2lkKQotewotI2RlZmluZSBYWChmKSAgICBmKCk7Ci1DT01QQVRfRlVOQ1RJT05TX0xJU1QKLSN1bmRlZiBYWAotfQordm9pZCogX19iaW9uaWNfbGliZ2NjX2NvbXBhdF9zeW1ib2xzW10gPSB7CisgICAgJl9fYWRkZGYzLAorICAgICZfX2FkZHNmMywKKyAgICAmX19hZWFiaV9jZGNtcGVxLAorICAgICZfX2FlYWJpX2NkY21wbGUsCisgICAgJl9fYWVhYmlfY2RyY21wbGUsCisgICAgJl9fYWVhYmlfZDJmLAorICAgICZfX2FlYWJpX2QyaXosCisgICAgJl9fYWVhYmlfZGFkZCwKKyAgICAmX19hZWFiaV9kY21wZXEsCisgICAgJl9fYWVhYmlfZGNtcGdlLAorICAgICZfX2FlYWJpX2RjbXBndCwKKyAgICAmX19hZWFiaV9kY21wbGUsCisgICAgJl9fYWVhYmlfZGNtcGx0LAorICAgICZfX2FlYWJpX2RjbXB1biwKKyAgICAmX19hZWFiaV9kZGl2LAorICAgICZfX2FlYWJpX2RtdWwsCisgICAgJl9fYWVhYmlfZHJzdWIsCisgICAgJl9fYWVhYmlfZHN1YiwKKyAgICAmX19hZWFiaV9mMmQsCisgICAgJl9fYWVhYmlfZjJpeiwKKyAgICAmX19hZWFiaV9mMnVpeiwKKyAgICAmX19hZWFiaV9mYWRkLAorICAgICZfX2FlYWJpX2ZjbXB1biwKKyAgICAmX19hZWFiaV9mZGl2LAorICAgICZfX2FlYWJpX2ZtdWwsCisgICAgJl9fYWVhYmlfZnJzdWIsCisgICAgJl9fYWVhYmlfZnN1YiwKKyAgICAmX19hZWFiaV9pMmQsCisgICAgJl9fYWVhYmlfaTJmLAorICAgICZfX2FlYWJpX2lkaXYsCisgICAgJl9fYWVhYmlfaWRpdm1vZCwKKyAgICAmX19hZWFiaV9sMmQsCisgICAgJl9fYWVhYmlfbDJmLAorICAgICZfX2FlYWJpX2xhc3IsCisgICAgJl9fYWVhYmlfbGRpdm1vZCwKKyAgICAmX19hZWFiaV9sbHNsLAorICAgICZfX2FlYWJpX2xsc3IsCisgICAgJl9fYWVhYmlfbG11bCwKKyAgICAmX19hZWFiaV91aTJkLAorICAgICZfX2FlYWJpX3VpMmYsCisgICAgJl9fYWVhYmlfdWlkaXYsCisgICAgJl9fYWVhYmlfdWlkaXZtb2QsCisgICAgJl9fYWVhYmlfdWwyZCwKKyAgICAmX19hZWFiaV91bDJmLAorICAgICZfX2FlYWJpX3VsZGl2bW9kLAorICAgICZfX2FlYWJpX3Vud2luZF9jcHBfcHIwLAorICAgICZfX2FlYWJpX3Vud2luZF9jcHBfcHIxLAorICAgICZfX2NtcGRmMiwKKyAgICAmX19kaXZkZjMsCisgICAgJl9fZGl2c2YzLAorICAgICZfX2VxZGYyLAorICAgICZfX2V4dGVuZHNmZGYyLAorICAgICZfX2ZpeGRmc2ksCisgICAgJl9fZml4c2ZzaSwKKyAgICAmX19mbG9hdGRpZGYsCisgICAgJl9fZmxvYXRkaXNmLAorICAgICZfX2Zsb2F0c2lkZiwKKyAgICAmX19mbG9hdHNpc2YsCisgICAgJl9fZmxvYXR1bmRpZGYsCisgICAgJl9fZmxvYXR1bmRpc2YsCisgICAgJl9fZmxvYXR1bnNpZGYsCisgICAgJl9fZmxvYXR1bnNpc2YsCisgICAgJl9fZ2VkZjIsCisgICAgJl9fZ3RkZjIsCisgICAgJl9fbGVkZjIsCisgICAgJl9fbHRkZjIsCisgICAgJl9fbXVsZGYzLAorICAgICZfX211bGRpMywKKyAgICAmX19tdWxzZjMsCisgICAgJl9fbmVkZjIsCisgICAgJl9fcG9wY291bnRfdGFiLAorICAgICZfX3BvcGNvdW50c2kyLAorICAgICZfX3N1YmRmMywKKyAgICAmX19zdWJzZjMsCisgICAgJl9fdHJ1bmNkZnNmMiwKKyAgICAmX191bm9yZGRmMiwKKyAgICAmX191bm9yZHNmMiwKK307CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jbXAuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcC5TCmluZGV4IDkyMWY4ZWYuLjcwYTJhNTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcC5TCkBAIC0yNyw3ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogCiAjaWZkZWYgSEFWRV8zMl9CWVRFX0NBQ0hFX0xJTkUKQEAgLTEwOCw3ICsxMDgsNiBAQAogI2VuZGlmCiAKICAgICAgICAgLyogc2F2ZSByZWdpc3RlcnMgKi8KLSAgICAgICAgLnNhdmUgICAgICAge3I0LCBscn0KICAgICAgICAgc3RtZmQgICAgICAgc3AhLCB7cjQsIGxyfQogICAgICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jbXAxNi5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY21wMTYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZhMWJmMy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jbXAxNi5TCisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotLyoKLSAqIE9wdGltaXplZCBtZW1jbXAxNigpIGZvciBBUk05LgotICogVGhpcyB3b3VsZCBub3QgYmUgb3B0aW1hbCBvbiBYU2NhbGUgb3IgQVJNMTEsIHdoZXJlIG1vcmUgcHJlZmV0Y2hpbmcKLSAqIGFuZCB1c2Ugb2YgcGxkIHdpbGwgYmUgbmVlZGVkLgotICogVGhlIDIgbWFqb3Igb3B0aW16YXRpb25zIGhlcmUgYXJlCi0gKiAoMSkgVGhlIG1haW4gbG9vcCBjb21wYXJlcyAxNiBieXRlcyBhdCBhIHRpbWUKLSAqICgyKSBUaGUgbG9hZHMgYXJlIHNjaGVkdWxlZCBpbiBhIHdheSB0aGV5IHdvbid0IHN0YWxsCi0gKi8KLQotRU5UUlkoX19tZW1jbXAxNikKLSAgICAgICAgcGxkICAgICAgICAgW3IwLCAjMF0KLSAgICAgICAgcGxkICAgICAgICAgW3IxLCAjMF0KLQotICAgICAgICAvKiB0YWtlIG9mIHRoZSBjYXNlIHdoZXJlIGxlbmd0aCBpcyBudWwgb3IgdGhlIGJ1ZmZlcnMgYXJlIHRoZSBzYW1lICovCi0gICAgICAgIGNtcCAgICAgICAgIHIwLCByMQotICAgICAgICBjbXBuZSAgICAgICByMiwgIzAKLSAgICAgICAgbW92ZXEgICAgICAgcjAsICMwCi0gICAgICAgIGJ4ZXEgICAgICAgIGxyCi0KLSAgICAgICAgLyogc2luY2UgcjAgaG9sZCB0aGUgcmVzdWx0LCBtb3ZlIHRoZSBmaXJzdCBzb3VyY2UKLSAgICAgICAgICogcG9pbnRlciBzb21ld2hlcmUgZWxzZQotICAgICAgICAgKi8KLQotICAgICAgICBtb3YgICAgICAgICByMywgcjAKLQotICAgICAgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgMTIgd29yZHMsIHRoaXMgc2ltcGxpZnkgdGhpbmdzIGJlbG93Ci0gICAgICAgICAgKiBhbmQgYXZvaWQgc29tZSBvdmVyaGVhZCBmb3Igc21hbGwgYmxvY2tzCi0gICAgICAgICAgKi8KLQotICAgICAgICBjbXAgICAgICAgICByMiwgIzEyCi0gICAgICAgIGJwbCAgICAgICAgIDBmCi0KLSAgICAgICAgLyogc21hbGwgYmxvY2tzIChsZXNzIHRoZW4gMTIgd29yZHMpICovCi0gICAgICAgIHBsZCAgICAgICAgIFtyMCwgIzMyXQotICAgICAgICBwbGQgICAgICAgICBbcjEsICMzMl0KLQotMTogICAgICBsZHJoICAgICAgICByMCwgW3IzXSwgIzIKLSAgICAgICAgbGRyaCAgICAgICAgaXAsIFtyMV0sICMyCi0gICAgICAgIHN1YnMgICAgICAgIHIwLCByMCwgaXAKLSAgICAgICAgYnhuZSAgICAgICAgbHIKLSAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMQotICAgICAgICBibmUgICAgICAgICAxYgotICAgICAgICBieCAgICAgICAgICBscgotCi0KLSAgICAgICAgLyogc2F2ZSByZWdpc3RlcnMgKi8KLSAgICAgICAgLnNhdmUgICAgICAge3I0LCBscn0KLTA6ICAgICAgc3RtZmQgICAgICAgc3AhLCB7cjQsIGxyfQotICAgICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKLSAgICAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCi0gICAgICAgIC5jZmlfcmVsX29mZnNldCBsciwgNAotCi0gICAgICAgIC8qIGFsaWduIGZpcnN0IHBvaW50ZXIgdG8gd29yZCBib3VuZGFyeSAqLwotICAgICAgICB0c3QgICAgICAgICByMywgIzIKLSAgICAgICAgYmVxICAgICAgICAgMGYKLQotICAgICAgICBsZHJoICAgICAgICByMCwgW3IzXSwgIzIKLSAgICAgICAgbGRyaCAgICAgICAgaXAsIFtyMV0sICMyCi0gICAgICAgIHN1YiAgICAgICAgIHIyLCByMiwgIzEKLSAgICAgICAgc3VicyAgICAgICAgcjAsIHIwLCBpcAotICAgICAgICAvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCi0gICAgICAgIGxkbW5lZmQgICAgIHNwISwge3I0LCBscn0KLSAgICAgICAgYnhuZSAgICAgICAgbHIKLQotCi0wOiAgICAgIC8qIGhlcmUgdGhlIGZpcnN0IHBvaW50ZXIgaXMgYWxpZ25lZCwgYW5kIHdlIGhhdmUgYXQgbGVhc3QgMyB3b3JkcwotICAgICAgICAgKiB0byBwcm9jZXNzLgotICAgICAgICAgKi8KLQotICAgICAgICAvKiBzZWUgaWYgdGhlIHBvaW50ZXJzIGFyZSBjb25ncnVlbnQgKi8KLSAgICAgICAgZW9yICAgICAgICAgcjAsIHIzLCByMQotICAgICAgICBhbmRzICAgICAgICByMCwgcjAsICMyCi0gICAgICAgIGJuZSAgICAgICAgIDVmCi0KLSAgICAgICAgLyogY29uZ3J1ZW50IGNhc2UsIDE2IGhhbGYtd29yZHMgcGVyIGl0ZXJhdGlvbgotICAgICAgICAgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgYXQgbGVhc3QgMTYrMiB3b3JkcyBsZWZ0Ci0gICAgICAgICAqIGJlY2F1c2Ugd2UgZWZmZWN0aXZlbHkgcmVhZCBhaGVhZCBvbmUgbG9uZyB3b3JkLCBhbmQgd2UgY291bGQKLSAgICAgICAgICogcmVhZCBwYXN0IHRoZSBidWZmZXIgKGFuZCBzZWdmYXVsdCkgaWYgd2UncmUgbm90IGNhcmVmdWwuCi0gICAgICAgICAqLwotCi0gICAgICAgIGxkciAgICAgICAgIGlwLCBbcjFdCi0gICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIygxNiArIDIpCi0gICAgICAgIGJtaSAgICAgICAgIDFmCi0KLTA6Ci0gICAgICAgIHBsZCAgICAgICAgIFtyMywgIzY0XQotICAgICAgICBwbGQgICAgICAgICBbcjEsICM2NF0KLSAgICAgICAgbGRyICAgICAgICAgcjAsIFtyM10sICM0Ci0gICAgICAgIGxkciAgICAgICAgIGxyLCBbcjEsICM0XSEKLSAgICAgICAgZW9ycyAgICAgICAgcjAsIHIwLCBpcAotICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKLSAgICAgICAgbGRyZXEgICAgICAgaXAsIFtyMSwgIzRdIQotICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGxyCi0gICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAotICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxLCAjNF0hCi0gICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKLSAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0Ci0gICAgICAgIGxkcmVxICAgICAgIGlwLCBbcjEsICM0XSEKLSAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBscgotICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKLSAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMSwgIzRdIQotICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCi0gICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAotICAgICAgICBsZHJlcSAgICAgICBpcCwgW3IxLCAjNF0hCi0gICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgbHIKLSAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0Ci0gICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjEsICM0XSEKLSAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAotICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKLSAgICAgICAgbGRyZXEgICAgICAgaXAsIFtyMSwgIzRdIQotICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGxyCi0gICAgICAgIGJuZSAgICAgICAgIDJmCi0gICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzE2Ci0gICAgICAgIGJocyAgICAgICAgIDBiCi0KLSAgICAgICAgLyogZG8gd2UgaGF2ZSBhdCBsZWFzdCAyIHdvcmRzIGxlZnQ/ICovCi0xOiAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIygxNiAtIDIgKyAyKQotICAgICAgICBibWkgICAgICAgICA0ZgotCi0gICAgICAgIC8qIGZpbmlzaCBvZmYgMiB3b3JkcyBhdCBhIHRpbWUgKi8KLTM6ICAgICAgbGRyICAgICAgICAgcjAsIFtyM10sICM0Ci0gICAgICAgIGxkciAgICAgICAgIGlwLCBbcjFdLCAjNAotICAgICAgICBlb3JzICAgICAgICByMCwgcjAsIGlwCi0gICAgICAgIGJuZSAgICAgICAgIDJmCi0gICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzIKLSAgICAgICAgYmhzICAgICAgICAgM2IKLQotICAgICAgICAvKiBhcmUgd2UgZG9uZT8gKi8KLTQ6ICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjMgotICAgICAgICBibmUgICAgICAgICA4ZgotICAgICAgICAvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCi0gICAgICAgIG1vdiAgICAgICAgIHIwLCAjMAotICAgICAgICBsZG1mZCAgICAgICBzcCEsIHtyNCwgbHJ9Ci0gICAgICAgIGJ4ICAgICAgICAgIGxyCi0KLTI6ICAgICAgLyogdGhlIGxhc3QgMiB3b3JkcyBhcmUgZGlmZmVyZW50LCByZXN0YXJ0IHRoZW0gKi8KLSAgICAgICAgbGRyaCAgICAgICAgcjAsIFtyMywgIy00XQotICAgICAgICBsZHJoICAgICAgICBpcCwgW3IxLCAjLTRdCi0gICAgICAgIHN1YnMgICAgICAgIHIwLCByMCwgaXAKLSAgICAgICAgbGRyZXFoICAgICAgcjAsIFtyMywgIy0yXQotICAgICAgICBsZHJlcWggICAgICBpcCwgW3IxLCAjLTJdCi0gICAgICAgIHN1YmVxcyAgICAgIHIwLCByMCwgaXAKLSAgICAgICAgLyogcmVzdG9yZSByZWdpc3RlcnMgYW5kIHJldHVybiAqLwotICAgICAgICBsZG1mZCAgICAgICBzcCEsIHtyNCwgbHJ9Ci0gICAgICAgIGJ4ICAgICAgICAgIGxyCi0KLSAgICAgICAgLyogcHJvY2VzcyB0aGUgbGFzdCBmZXcgd29yZHMgKi8KLTg6ICAgICAgbGRyaCAgICAgICAgcjAsIFtyM10sICMyCi0gICAgICAgIGxkcmggICAgICAgIGlwLCBbcjFdLCAjMgotICAgICAgICBzdWJzICAgICAgICByMCwgcjAsIGlwCi0gICAgICAgIGJuZSAgICAgICAgIDlmCi0gICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzEKLSAgICAgICAgYm5lICAgICAgICAgOGIKLQotOTogICAgICAvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCi0gICAgICAgIGxkbWZkICAgICAgIHNwISwge3I0LCBscn0KLSAgICAgICAgYnggICAgICAgICAgbHIKLQotCi01OiAgICAgIC8qKioqKioqKioqKioqKiogbm9uLWNvbmdydWVudCBjYXNlICoqKioqKioqKioqKioqKi8KLQotICAgICAgICAvKiBhbGlnbiB0aGUgdW5hbGlnbmVkIHBvaW50ZXIgKi8KLSAgICAgICAgYmljICAgICAgICAgcjEsIHIxLCAjMwotICAgICAgICBsZHIgICAgICAgICBsciwgW3IxXSwgIzQKLSAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCAjOAotCi02OgotICAgICAgICBwbGQgICAgICAgICBbcjMsICM2NF0KLSAgICAgICAgcGxkICAgICAgICAgW3IxLCAjNjRdCi0gICAgICAgIG1vdiAgICAgICAgIGlwLCBsciwgbHNyICMxNgotICAgICAgICBsZHIgICAgICAgICBsciwgW3IxXSwgIzQKLSAgICAgICAgbGRyICAgICAgICAgcjAsIFtyM10sICM0Ci0gICAgICAgIG9yciAgICAgICAgIGlwLCBpcCwgbHIsIGxzbCAjMTYKLSAgICAgICAgZW9ycyAgICAgICAgcjAsIHIwLCBpcAotICAgICAgICBtb3ZlcSAgICAgICBpcCwgbHIsIGxzciAjMTYKLSAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMV0sICM0Ci0gICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAotICAgICAgICBvcnJlcSAgICAgICBpcCwgaXAsIGxyLCBsc2wgIzE2Ci0gICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKLSAgICAgICAgbW92ZXEgICAgICAgaXAsIGxyLCBsc3IgIzE2Ci0gICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjFdLCAjNAotICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKLSAgICAgICAgb3JyZXEgICAgICAgaXAsIGlwLCBsciwgbHNsICMxNgotICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCi0gICAgICAgIG1vdmVxICAgICAgIGlwLCBsciwgbHNyICMxNgotICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxXSwgIzQKLSAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0Ci0gICAgICAgIG9ycmVxICAgICAgIGlwLCBpcCwgbHIsIGxzbCAjMTYKLSAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAotICAgICAgICBibmUgICAgICAgICA3ZgotICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICM4Ci0gICAgICAgIGJocyAgICAgICAgIDZiCi0gICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzIKLSAgICAgICAgLyogYXJlIHdlIGRvbmU/ICovCi0gICAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIzgKLSAgICAgICAgbW92ZXEgICAgICAgcjAsICMwCi0gICAgICAgIGJlcSAgICAgICAgIDliCi0gICAgICAgIC8qIGZpbmlzaCBvZmYgdGhlIHJlbWFpbmluZyBieXRlcyAqLwotICAgICAgICBiICAgICAgICAgICA4YgotCi03OiAgICAgIC8qIGZpeCB1cCB0aGUgMiBwb2ludGVycyBhbmQgZmFsbHRocm91Z2guLi4gKi8KLSAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjMgotICAgICAgICBiICAgICAgICAgICAyYgotRU5EKF9fbWVtY21wMTYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNweS5TCmluZGV4IGYyNWIzZTMuLjJjOWIxMGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNweS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNweS5TCkBAIC0yNyw3ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogI2lmIGRlZmluZWQoX19BUk1fTkVPTl9fKSAmJiAhZGVmaW5lZChBUkNIX0FSTV9VU0VfTk9OX05FT05fTUVNQ1BZKQogCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jcHkuYTkuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNweS5hOS5TCmluZGV4IDJiYTFmZjUuLjI1OTcwMWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNweS5hOS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNweS5hOS5TCkBAIC00NCw3ICs0NCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogCS5zeW50YXggdW5pZmllZAogCS8qIFRoaXMgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgQVJNIHN0YXRlLiAgKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3NldGptcC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc2V0am1wLlMKaW5kZXggNjViOTNmZC4uZWQ1OWQwNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc2V0am1wLlMKQEAgLTM0LDcgKzM0LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KIApAQCAtNTYsNyArNTYsNyBAQAogCS5jZmlfcmVsX29mZnNldCByMTQsIDQKIAltb3YJcjAsICMweDAwMDAwMDAwCiAKLQlibAlQSUNfU1lNKF9DX0xBQkVMKHNpZ2Jsb2NrKSwgUExUKQorCWJsCVBJQ19TWU0oc2lnYmxvY2ssIFBMVCkKIAltb3YJcjEsIHIwCiAKIAlsZG1mZAlzcCEsIHtyMCwgcjE0fQpAQCAtMTA4LDExICsxMDgsMTEgQEAKIAkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKIAogCW1vdglyMCwgcjIKLQlibAlQSUNfU1lNKF9DX0xBQkVMKHNpZ3NldG1hc2spLCBQTFQpCisJYmwJUElDX1NZTShzaWdzZXRtYXNrLCBQTFQpCiAKIAlhZGQJc3AsIHNwLCAjNAkvKiB1bmFsaWduIHRoZSBzdGFjayAqLwogCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgLTQKLQlsZG1mZAlzcCEsIHtyMCwgcjEsIHIxNH0gCisJbGRtZmQJc3AhLCB7cjAsIHIxLCByMTR9CiAJLmNmaV9kZWZfY2ZhX29mZnNldCAwCiAKICNpZmRlZiBfX0FSTV9IQVZFX1ZGUApAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKIAkvKiB2YWxpZGF0aW9uIGZhaWxlZCwgZGllIGRpZSBkaWUuICovCiBib3RjaDoKLQlibAlQSUNfU1lNKF9DX0xBQkVMKGxvbmdqbXBlcnJvciksIFBMVCkKLQlibAlQSUNfU1lNKF9DX0xBQkVMKGFib3J0KSwgUExUKQorCWJsCVBJQ19TWU0obG9uZ2ptcGVycm9yLCBQTFQpCisJYmwJUElDX1NZTShhYm9ydCwgUExUKQogCWIJLiAtIDgJCS8qIENhbm5vdCBnZXQgaGVyZSAqLwogRU5EKGxvbmdqbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9zaWdzZXRqbXAuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3NpZ3NldGptcC5TCmluZGV4IDEyMzExZTUuLjcwMTZmNTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3NpZ3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3NpZ3NldGptcC5TCkBAIC0zNSw3ICszNSw3IEBACiAKICNkZWZpbmUgX0FMSUdOX1RFWFQgLmFsaWduIDAKIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KIAogLyoKQEAgLTUwLDggKzUwLDggQEAKIAogRU5UUlkoc2lnc2V0am1wKQogCXRlcQlyMSwgIzAKLQliZXEJUElDX1NZTShfQ19MQUJFTChfc2V0am1wKSwgUExUKQotCWIJUElDX1NZTShfQ19MQUJFTChzZXRqbXApLCBQTFQpCisJYmVxCVBJQ19TWU0oX3NldGptcCwgUExUKQorCWIJUElDX1NZTShzZXRqbXAsIFBMVCkKIEVORChzaWdzZXRqbXApCiAKIC5MX3NldGptcF9tYWdpYzoKQEAgLTYxLDYgKzYxLDYgQEAKIAlsZHIJcjIsIC5MX3NldGptcF9tYWdpYwogCWxkcglyMywgW3IwXQogCXRlcQlyMiwgcjMKLQliZXEJUElDX1NZTShfQ19MQUJFTChfbG9uZ2ptcCksIFBMVCkKLQliCVBJQ19TWU0oX0NfTEFCRUwobG9uZ2ptcCksIFBMVCkKKwliZXEJUElDX1NZTShfbG9uZ2ptcCwgUExUKQorCWIJUElDX1NZTShsb25nam1wLCBQTFQpCiBFTkQoc2lnbG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N0cmNtcC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc3RyY21wLlMKaW5kZXggNDJkNDFkMS4uNmRiYTk0MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc3RyY21wLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc3RyY21wLlMKQEAgLTI4LDcgKzI4LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAJLnRleHQKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc3lzY2FsbC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc3lzY2FsbC5TCmluZGV4IDVhNjYyN2IuLmQwZGYzNzkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N5c2NhbGwuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zeXNjYWxsLlMKQEAgLTMwLDcgKzMwLDYgQEAKIAogRU5UUlkoc3lzY2FsbCkKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtNDgsNSArNDcsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHN5c2NhbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL19fc3RyY2F0X2Noay5TIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9fX3N0cmNhdF9jaGsuUwppbmRleCBkYzg2MTUwLi4zNmRhMmQ5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL19fc3RyY2F0X2Noay5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvX19zdHJjYXRfY2hrLlMKQEAgLTI2LDggKzI2LDggQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgInByaXZhdGUvbGliY19ldmVudHMuaCIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CiAKICAgICAuc3ludGF4IHVuaWZpZWQKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9fX3N0cmNweV9jaGsuUyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvX19zdHJjcHlfY2hrLlMKaW5kZXggOTVhYWY0Zi4uYzNlM2UxNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9fX3N0cmNweV9jaGsuUworKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL19fc3RyY3B5X2Noay5TCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfZXZlbnRzLmgiCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9saWJjX2V2ZW50cy5oPgogCiAgICAgLnN5bnRheCB1bmlmaWVkCiAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtY3B5LlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL21lbWNweS5TCmluZGV4IGJhZGM5M2IuLmRhNGYzZGQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtY3B5LlMKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9tZW1jcHkuUwpAQCAtNTUsOCArNTUsOCBAQAogCiAvLyBQcm90b3R5cGU6IHZvaWQgKm1lbWNweSAodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjb3VudCkuCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgInByaXZhdGUvbGliY19ldmVudHMuaCIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CiAKICAgICAgICAgLnRleHQKICAgICAgICAgLnN5bnRheCB1bmlmaWVkCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL21lbXNldC5TIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9tZW1zZXQuUwppbmRleCA0ZTZkMzIyLi4xMmM2OGQ2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL21lbXNldC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtc2V0LlMKQEAgLTI3LDggKzI3LDggQEAKICAqLwogCiAjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgInByaXZhdGUvbGliY19ldmVudHMuaCIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CiAKICAgICAgICAgLyoKICAgICAgICAgICogT3B0aW1pemVkIG1lbXNldCgpIGZvciBBUk0uCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNhdC5TIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjYXQuUwppbmRleCA3MmQ0ZTllLi5iOTViZTk0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY2F0LlMKQEAgLTUzLDcgKzUzLDcgQEAKICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAgICAgLnN5bnRheCB1bmlmaWVkCiAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY21wLlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNtcC5TCmluZGV4IDBjY2NmMDYuLjEyZGExMTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY21wLlMKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjbXAuUwpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKICNpZmRlZiBfX0FSTUVCX18KICNkZWZpbmUgUzJMT01FTSBsc2wKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY3B5LlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNweS5TCmluZGV4IDU3NzM1NDAuLmNiODc4YzQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY3B5LlMKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjcHkuUwpAQCAtNTMsNyArNTMsNyBAQAogICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKICAgICAuc3ludGF4IHVuaWZpZWQKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJsZW4uUyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RybGVuLlMKaW5kZXggMDhmNmQxOS4uOWEwY2U2MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJsZW4uUworKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmxlbi5TCkBAIC01Myw3ICs1Myw3IEBACiAgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogICAgIC5zeW50YXggdW5pZmllZAogCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvY29ydGV4LWExNS5tayBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9jb3J0ZXgtYTE1Lm1rCmluZGV4IGM2MmU3ZTcuLjU1MjgxMWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9jb3J0ZXgtYTE1Lm1rCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9jb3J0ZXgtYTE1Lm1rCkBAIC0xLDEwICsxLDEwIEBACi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLE1FTUNQWSxhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9tZW1jcHkuUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsTUVNU0VULGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL21lbXNldC5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJDQVQsYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY2F0LlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkNNUCxhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjbXAuUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSQ1BZLGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNweS5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJMRU4sYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RybGVuLlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLF9fU1RSQ0FUX0NISyxhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9fX3N0cmNhdF9jaGsuUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsX19TVFJDUFlfQ0hLLGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL19fc3RyY3B5X2Noay5TKQotCi1pbmNsdWRlIGJpb25pYy9saWJjL2FyY2gtYXJtL2dlbmVyaWMvZ2VuZXJpYy5taworbGliY19iaW9uaWNfc3JjX2ZpbGVzX2FybSArPSBcCisgICAgYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtY3B5LlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL21lbXNldC5TIFwKKyAgICBhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjYXQuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY21wLlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNweS5TIFwKKyAgICBhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJsZW4uUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvX19zdHJjYXRfY2hrLlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL19fc3RyY3B5X2Noay5TIFwKKyAgICBiaW9uaWMvbWVtbW92ZS5jIFwKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9fX3N0cmNhdF9jaGsuUyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9fX3N0cmNhdF9jaGsuUwppbmRleCA3MDA5MTY4Li42NTFhZWZjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvX19zdHJjYXRfY2hrLlMKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL19fc3RyY2F0X2Noay5TCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfZXZlbnRzLmgiCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9saWJjX2V2ZW50cy5oPgogCiAgICAgLnN5bnRheCB1bmlmaWVkCiAgICAgLmZwdSAgICBuZW9uCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvX19zdHJjcHlfY2hrLlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvX19zdHJjcHlfY2hrLlMKaW5kZXggOTA4ZWVjNC4uMjQ0Nzc4MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL19fc3RyY3B5X2Noay5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9fX3N0cmNweV9jaGsuUwpAQCAtMjYsOCArMjYsOCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2V2ZW50cy5oIgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KIAogICAgIC5zeW50YXggdW5pZmllZAogICAgIC5mcHUgICAgbmVvbgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL21lbWNweS5TIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL21lbWNweS5TCmluZGV4IDcyYzFhNjYuLjhkY2Q5MzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9tZW1jcHkuUworKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtY3B5LlMKQEAgLTI2LDggKzI2LDggQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgInByaXZhdGUvbGliY19ldmVudHMuaCIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CiAKIC8qCiAgKiBUaGlzIGNvZGUgYXNzdW1lcyBpdCBpcyBydW5uaW5nIG9uIGEgcHJvY2Vzc29yIHRoYXQgc3VwcG9ydHMgYWxsIGFybSB2NwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL21lbXNldC5TIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL21lbXNldC5TCmluZGV4IDdmNzdkYWQuLmE1MDU3ZWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9tZW1zZXQuUworKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtc2V0LlMKQEAgLTI2LDkgKzI2LDggQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2V2ZW50cy5oIgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KIAogLyoKICAqIFRoaXMgY29kZSBhc3N1bWVzIGl0IGlzIHJ1bm5pbmcgb24gYSBwcm9jZXNzb3IgdGhhdCBzdXBwb3J0cyBhbGwgYXJtIHY3CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY2F0LlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY2F0LlMKaW5kZXggMGY1YmFlZi4uZjVhODU1ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmNhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjYXQuUwpAQCAtNTMsNyArNTMsNyBAQAogICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKICAgICAuc3ludGF4IHVuaWZpZWQKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmNtcC5TIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmNtcC5TCmluZGV4IGVhY2RiODkuLjI0MTFjNjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjbXAuUworKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY21wLlMKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAjaWZkZWYgX19BUk1FQl9fCiAjZGVmaW5lIFMyTE9NRU0gbHNsCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY3B5LlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY3B5LlMKaW5kZXggOWFhNGY4OC4uOWU5NjEwYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmNweS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjcHkuUwpAQCAtNTMsNyArNTMsNyBAQAogICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKICAgICAuc3ludGF4IHVuaWZpZWQKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmxlbi5TIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmxlbi5TCmluZGV4IDI1OWVkYTAuLmI5MmIwNDMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJsZW4uUworKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RybGVuLlMKQEAgLTUzLDcgKzUzLDcgQEAKICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAgICAgLnN5bnRheCB1bmlmaWVkCiAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2NvcnRleC1hOS5tayBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2NvcnRleC1hOS5tawppbmRleCBlZWUxYjM2Li45Yjk5Mzg3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9jb3J0ZXgtYTkubWsKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvY29ydGV4LWE5Lm1rCkBAIC0xLDEwICsxLDEwIEBACi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLE1FTUNQWSxhcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL21lbWNweS5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxNRU1TRVQsYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9tZW1zZXQuUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSQ0FULGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY2F0LlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkNNUCxhcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL3N0cmNtcC5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJDUFksYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjcHkuUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSTEVOLGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RybGVuLlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLF9fU1RSQ0FUX0NISyxhcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL19fc3RyY2F0X2Noay5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxfX1NUUkNQWV9DSEssYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9fX3N0cmNweV9jaGsuUykKLQotaW5jbHVkZSBiaW9uaWMvbGliYy9hcmNoLWFybS9nZW5lcmljL2dlbmVyaWMubWsKK2xpYmNfYmlvbmljX3NyY19maWxlc19hcm0gKz0gXAorICAgIGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtY3B5LlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtc2V0LlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY2F0LlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY21wLlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY3B5LlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RybGVuLlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvX19zdHJjYXRfY2hrLlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvX19zdHJjcHlfY2hrLlMgXAorICAgIGJpb25pYy9tZW1tb3ZlLmMgXApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL19fc3RyY2F0X2Noay5TIGIvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL19fc3RyY2F0X2Noay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZGEyZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvX19zdHJjYXRfY2hrLlMKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KKworICAgIC5zeW50YXggdW5pZmllZAorCisgICAgLnRodW1iCisgICAgLnRodW1iX2Z1bmMKKworLy8gR2V0IHRoZSBsZW5ndGggb2Ygc3JjIHN0cmluZywgdGhlbiBnZXQgdGhlIHNvdXJjZSBvZiB0aGUgZHN0IHN0cmluZy4KKy8vIENoZWNrIHRoYXQgdGhlIHR3byBsZW5ndGhzIHRvZ2V0aGVyIGRvbid0IGV4Y2VlZCB0aGUgdGhyZXNob2xkLCB0aGVuCisvLyBkbyBhIG1lbWNweSBvZiB0aGUgZGF0YS4KK0VOVFJZKF9fc3RyY2F0X2NoaykKKyAgICBwbGQgICAgIFtyMCwgIzBdCisgICAgcHVzaCAgICB7cjAsIGxyfQorICAgIC5zYXZlICAge3IwLCBscn0KKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjAsIDAKKyAgICAuY2ZpX3JlbF9vZmZzZXQgbHIsIDQKKyAgICBwdXNoICAgIHtyNCwgcjV9CisgICAgLnNhdmUgICB7cjQsIHI1fQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgOAorICAgIC5jZmlfcmVsX29mZnNldCByNCwgMAorICAgIC5jZmlfcmVsX29mZnNldCByNSwgNAorCisgICAgbW92ICAgICBsciwgcjIKKworICAgIC8vIFNhdmUgdGhlIGRzdCByZWdpc3RlciB0byByNQorICAgIG1vdiAgICAgcjUsIHIwCisKKyAgICAvLyBaZXJvIG91dCByNAorICAgIGVvciAgICAgcjQsIHI0LCByNAorCisgICAgLy8gcjEgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHN0cmluZyB0byBjb3VudC4KKy5MX3N0cmxlbl9zdGFydDoKKyAgICBtb3YgICAgIHIwLCByMQorICAgIGFuZHMgICAgcjMsIHIxLCAjNworICAgIGJlcSAgICAgLkxfbWFpbmxvb3AKKworICAgIC8vIEFsaWduIHRvIGEgZG91YmxlIHdvcmQgKDY0IGJpdHMpLgorICAgIHJzYiAgICAgcjMsIHIzLCAjOAorICAgIGxzbHMgICAgaXAsIHIzLCAjMzEKKyAgICBiZXEgICAgIC5MX2FsaWduX3RvXzMyCisKKyAgICBsZHJiICAgIHIyLCBbcjFdLCAjMQorICAgIGNieiAgICAgcjIsIC5MX3VwZGF0ZV9jb3VudF9hbmRfZmluaXNoCisKKy5MX2FsaWduX3RvXzMyOgorICAgIGJjYyAgICAgLkxfYWxpZ25fdG9fNjQKKyAgICBhbmRzICAgIGlwLCByMywgIzIKKyAgICBiZXEgICAgIC5MX2FsaWduX3RvXzY0CisKKyAgICBsZHJiICAgIHIyLCBbcjFdLCAjMQorICAgIGNieiAgICAgcjIsIC5MX3VwZGF0ZV9jb3VudF9hbmRfZmluaXNoCisgICAgbGRyYiAgICByMiwgW3IxXSwgIzEKKyAgICBjYnogICAgIHIyLCAuTF91cGRhdGVfY291bnRfYW5kX2ZpbmlzaAorCisuTF9hbGlnbl90b182NDoKKyAgICB0c3QgICAgIHIzLCAjNAorICAgIGJlcSAgICAgLkxfbWFpbmxvb3AKKyAgICBsZHIgICAgIHIzLCBbcjFdLCAjNAorCisgICAgc3ViICAgICBpcCwgcjMsICMweDAxMDEwMTAxCisgICAgYmljICAgICBpcCwgaXAsIHIzCisgICAgYW5kcyAgICBpcCwgaXAsICMweDgwODA4MDgwCisgICAgYm5lICAgICAuTF96ZXJvX2luX3NlY29uZF9yZWdpc3RlcgorCisgICAgLnAyYWxpZ24gMgorLkxfbWFpbmxvb3A6CisgICAgbGRyZCAgICByMiwgcjMsIFtyMV0sICM4CisKKyAgICBwbGQgICAgIFtyMSwgIzY0XQorCisgICAgc3ViICAgICBpcCwgcjIsICMweDAxMDEwMTAxCisgICAgYmljICAgICBpcCwgaXAsIHIyCisgICAgYW5kcyAgICBpcCwgaXAsICMweDgwODA4MDgwCisgICAgYm5lICAgICAuTF96ZXJvX2luX2ZpcnN0X3JlZ2lzdGVyCisKKyAgICBzdWIgICAgIGlwLCByMywgIzB4MDEwMTAxMDEKKyAgICBiaWMgICAgIGlwLCBpcCwgcjMKKyAgICBhbmRzICAgIGlwLCBpcCwgIzB4ODA4MDgwODAKKyAgICBibmUgICAgIC5MX3plcm9faW5fc2Vjb25kX3JlZ2lzdGVyCisgICAgYiAgICAgICAuTF9tYWlubG9vcAorCisuTF91cGRhdGVfY291bnRfYW5kX2ZpbmlzaDoKKyAgICBzdWIgICAgIHIzLCByMSwgcjAKKyAgICBzdWIgICAgIHIzLCByMywgIzEKKyAgICBiICAgICAgIC5MX2ZpbmlzaAorCisuTF96ZXJvX2luX2ZpcnN0X3JlZ2lzdGVyOgorICAgIHN1YiAgICAgcjMsIHIxLCByMAorICAgIGxzbHMgICAgcjIsIGlwLCAjMTcKKyAgICBibmUgICAgIC5MX3N1YjhfYW5kX2ZpbmlzaAorICAgIGJjcyAgICAgLkxfc3ViN19hbmRfZmluaXNoCisgICAgbHNscyAgICBpcCwgaXAsICMxCisgICAgYm5lICAgICAuTF9zdWI2X2FuZF9maW5pc2gKKworICAgIHN1YiAgICAgcjMsIHIzLCAjNQorICAgIGIgICAgICAgLkxfZmluaXNoCisKKy5MX3N1YjhfYW5kX2ZpbmlzaDoKKyAgICBzdWIgICAgIHIzLCByMywgIzgKKyAgICBiICAgICAgIC5MX2ZpbmlzaAorCisuTF9zdWI3X2FuZF9maW5pc2g6CisgICAgc3ViICAgICByMywgcjMsICM3CisgICAgYiAgICAgICAuTF9maW5pc2gKKworLkxfc3ViNl9hbmRfZmluaXNoOgorICAgIHN1YiAgICAgcjMsIHIzLCAjNgorICAgIGIgICAgICAgLkxfZmluaXNoCisKKy5MX3plcm9faW5fc2Vjb25kX3JlZ2lzdGVyOgorICAgIHN1YiAgICAgcjMsIHIxLCByMAorICAgIGxzbHMgICAgcjIsIGlwLCAjMTcKKyAgICBibmUgICAgIC5MX3N1YjRfYW5kX2ZpbmlzaAorICAgIGJjcyAgICAgLkxfc3ViM19hbmRfZmluaXNoCisgICAgbHNscyAgICBpcCwgaXAsICMxCisgICAgYm5lICAgICAuTF9zdWIyX2FuZF9maW5pc2gKKworICAgIHN1YiAgICAgcjMsIHIzLCAjMQorICAgIGIgICAgICAgLkxfZmluaXNoCisKKy5MX3N1YjRfYW5kX2ZpbmlzaDoKKyAgICBzdWIgICAgIHIzLCByMywgIzQKKyAgICBiICAgICAgIC5MX2ZpbmlzaAorCisuTF9zdWIzX2FuZF9maW5pc2g6CisgICAgc3ViICAgICByMywgcjMsICMzCisgICAgYiAgICAgICAuTF9maW5pc2gKKworLkxfc3ViMl9hbmRfZmluaXNoOgorICAgIHN1YiAgICAgcjMsIHIzLCAjMgorCisuTF9maW5pc2g6CisgICAgY21wICAgICByNCwgIzAKKyAgICBibmUgICAgIC5MX3N0cmxlbl9kb25lCisKKyAgICAvLyBUaW1lIHRvIGdldCB0aGUgZHN0IHN0cmluZyBsZW5ndGguCisgICAgbW92ICAgICByMSwgcjUKKworICAgIC8vIFNhdmUgdGhlIG9yaWdpbmFsIHNvdXJjZSBhZGRyZXNzIHRvIHI1LgorICAgIG1vdiAgICAgcjUsIHIwCisKKyAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGxlbmd0aCAoYWRkaW5nIDEgZm9yIHRoZSB0ZXJtaW5hdG9yKS4KKyAgICBhZGQgICAgIHI0LCByMywgIzEKKyAgICBiICAgICAgIC5MX3N0cmxlbl9zdGFydAorCisgICAgLy8gcjAgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGRzdCBzdHJpbmcuCisgICAgLy8gcjMgaG9sZHMgdGhlIGRzdCBzdHJpbmcgbGVuZ3RoLgorICAgIC8vIHI0IGhvbGRzIHRoZSBzcmMgc3RyaW5nIGxlbmd0aCArIDEuCisuTF9zdHJsZW5fZG9uZToKKyAgICBhZGQgICAgIHIyLCByMywgcjQKKyAgICBjbXAgICAgIHIyLCBscgorICAgIGJoaSAgICAgX19zdHJjYXRfY2hrX2ZhaWxlZAorCisgICAgLy8gU2V0IHVwIHRoZSByZWdpc3RlcnMgZm9yIHRoZSBtZW1jcHkgY29kZS4KKyAgICBtb3YgICAgIHIxLCByNQorICAgIHBsZCAgICAgW3IxLCAjNjRdCisgICAgbW92ICAgICByMiwgcjQKKyAgICBhZGQgICAgIHIwLCByMCwgcjMKKyAgICBwb3AgICAgIHtyNCwgcjV9CitFTkQoX19zdHJjYXRfY2hrKQorCisjZGVmaW5lIE1FTUNQWV9CQVNFICAgICAgICAgX19zdHJjYXRfY2hrX21lbWNweV9iYXNlCisjZGVmaW5lIE1FTUNQWV9CQVNFX0FMSUdORUQgX19zdHJjYXRfY2hrX21lbWNweV9iYXNlX2FsaWduZWQKKworI2luY2x1ZGUgIm1lbWNweV9iYXNlLlMiCisKK0VOVFJZX1BSSVZBVEUoX19zdHJjYXRfY2hrX2ZhaWxlZCkKKyAgICAuc2F2ZSAgIHtyMCwgbHJ9CisgICAgLnNhdmUgICB7cjQsIHI1fQorCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IHIwLCAwCisgICAgLmNmaV9yZWxfb2Zmc2V0IGxyLCA0CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCisgICAgLmNmaV9yZWxfb2Zmc2V0IHI1LCA0CisKKyAgICBsZHIgICAgIHIwLCBlcnJvcl9tZXNzYWdlCisgICAgbGRyICAgICByMSwgZXJyb3JfY29kZQorMToKKyAgICBhZGQgICAgIHIwLCBwYworICAgIGJsICAgICAgX19mb3J0aWZ5X2Noa19mYWlsCitlcnJvcl9jb2RlOgorICAgIC53b3JkICAgQklPTklDX0VWRU5UX1NUUkNBVF9CVUZGRVJfT1ZFUkZMT1cKK2Vycm9yX21lc3NhZ2U6CisgICAgLndvcmQgICBlcnJvcl9zdHJpbmctKDFiKzQpCitFTkQoX19zdHJjYXRfY2hrX2ZhaWxlZCkKKworICAgIC5kYXRhCitlcnJvcl9zdHJpbmc6CisgICAgLnN0cmluZyAic3RyY2F0OiBwcmV2ZW50ZWQgd3JpdGUgcGFzdCBlbmQgb2YgYnVmZmVyIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL19fc3RyY3B5X2Noay5TIGIvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL19fc3RyY3B5X2Noay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZTNlMTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvX19zdHJjcHlfY2hrLlMKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KKworICAgIC5zeW50YXggdW5pZmllZAorCisgICAgLnRodW1iCisgICAgLnRodW1iX2Z1bmMKKworLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIHNvdXJjZSBzdHJpbmcgZmlyc3QsIHRoZW4gZG8gYSBtZW1jcHkgb2YgdGhlIGRhdGEKKy8vIGluc3RlYWQgb2YgYSBzdHJjcHkuCitFTlRSWShfX3N0cmNweV9jaGspCisgICAgcGxkICAgICBbcjAsICMwXQorICAgIHB1c2ggICAge3IwLCBscn0KKyAgICAuc2F2ZSAgIHtyMCwgbHJ9CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IHIwLCAwCisgICAgLmNmaV9yZWxfb2Zmc2V0IGxyLCA0CisKKyAgICBtb3YgICAgIGxyLCByMgorICAgIG1vdiAgICAgcjAsIHIxCisKKyAgICBhbmRzICAgIHIzLCByMSwgIzcKKyAgICBiZXEgICAgIC5MX21haW5sb29wCisKKyAgICAvLyBBbGlnbiB0byBhIGRvdWJsZSB3b3JkICg2NCBiaXRzKS4KKyAgICByc2IgICAgIHIzLCByMywgIzgKKyAgICBsc2xzICAgIGlwLCByMywgIzMxCisgICAgYmVxICAgICAuTF9hbGlnbl90b18zMgorCisgICAgbGRyYiAgICByMiwgW3IwXSwgIzEKKyAgICBjYnogICAgIHIyLCAuTF91cGRhdGVfY291bnRfYW5kX2ZpbmlzaAorCisuTF9hbGlnbl90b18zMjoKKyAgICBiY2MgICAgIC5MX2FsaWduX3RvXzY0CisgICAgYW5kcyAgICBpcCwgcjMsICMyCisgICAgYmVxICAgICAuTF9hbGlnbl90b182NAorCisgICAgbGRyYiAgICByMiwgW3IwXSwgIzEKKyAgICBjYnogICAgIHIyLCAuTF91cGRhdGVfY291bnRfYW5kX2ZpbmlzaAorICAgIGxkcmIgICAgcjIsIFtyMF0sICMxCisgICAgY2J6ICAgICByMiwgLkxfdXBkYXRlX2NvdW50X2FuZF9maW5pc2gKKworLkxfYWxpZ25fdG9fNjQ6CisgICAgdHN0ICAgICByMywgIzQKKyAgICBiZXEgICAgIC5MX21haW5sb29wCisgICAgbGRyICAgICByMywgW3IwXSwgIzQKKworICAgIHN1YiAgICAgaXAsIHIzLCAjMHgwMTAxMDEwMQorICAgIGJpYyAgICAgaXAsIGlwLCByMworICAgIGFuZHMgICAgaXAsIGlwLCAjMHg4MDgwODA4MAorICAgIGJuZSAgICAgLkxfemVyb19pbl9zZWNvbmRfcmVnaXN0ZXIKKworICAgIC5wMmFsaWduIDIKKy5MX21haW5sb29wOgorICAgIGxkcmQgICAgcjIsIHIzLCBbcjBdLCAjOAorCisgICAgcGxkICAgICBbcjAsICM2NF0KKworICAgIHN1YiAgICAgaXAsIHIyLCAjMHgwMTAxMDEwMQorICAgIGJpYyAgICAgaXAsIGlwLCByMgorICAgIGFuZHMgICAgaXAsIGlwLCAjMHg4MDgwODA4MAorICAgIGJuZSAgICAgLkxfemVyb19pbl9maXJzdF9yZWdpc3RlcgorCisgICAgc3ViICAgICBpcCwgcjMsICMweDAxMDEwMTAxCisgICAgYmljICAgICBpcCwgaXAsIHIzCisgICAgYW5kcyAgICBpcCwgaXAsICMweDgwODA4MDgwCisgICAgYm5lICAgICAuTF96ZXJvX2luX3NlY29uZF9yZWdpc3RlcgorICAgIGIgICAgICAgLkxfbWFpbmxvb3AKKworLkxfdXBkYXRlX2NvdW50X2FuZF9maW5pc2g6CisgICAgc3ViICAgICByMywgcjAsIHIxCisgICAgc3ViICAgICByMywgcjMsICMxCisgICAgYiAgICAgICAuTF9jaGVja19zaXplCisKKy5MX3plcm9faW5fZmlyc3RfcmVnaXN0ZXI6CisgICAgc3ViICAgICByMywgcjAsIHIxCisgICAgbHNscyAgICByMiwgaXAsICMxNworICAgIGJuZSAgICAgLkxfc3ViOF9hbmRfZmluaXNoCisgICAgYmNzICAgICAuTF9zdWI3X2FuZF9maW5pc2gKKyAgICBsc2xzICAgIGlwLCBpcCwgIzEKKyAgICBibmUgICAgIC5MX3N1YjZfYW5kX2ZpbmlzaAorCisgICAgc3ViICAgICByMywgcjMsICM1CisgICAgYiAgICAgICAuTF9jaGVja19zaXplCisKKy5MX3N1YjhfYW5kX2ZpbmlzaDoKKyAgICBzdWIgICAgIHIzLCByMywgIzgKKyAgICBiICAgICAgIC5MX2NoZWNrX3NpemUKKworLkxfc3ViN19hbmRfZmluaXNoOgorICAgIHN1YiAgICAgcjMsIHIzLCAjNworICAgIGIgICAgICAgLkxfY2hlY2tfc2l6ZQorCisuTF9zdWI2X2FuZF9maW5pc2g6CisgICAgc3ViICAgICByMywgcjMsICM2CisgICAgYiAgICAgICAuTF9jaGVja19zaXplCisKKy5MX3plcm9faW5fc2Vjb25kX3JlZ2lzdGVyOgorICAgIHN1YiAgICAgcjMsIHIwLCByMQorICAgIGxzbHMgICAgcjIsIGlwLCAjMTcKKyAgICBibmUgICAgIC5MX3N1YjRfYW5kX2ZpbmlzaAorICAgIGJjcyAgICAgLkxfc3ViM19hbmRfZmluaXNoCisgICAgbHNscyAgICBpcCwgaXAsICMxCisgICAgYm5lICAgICAuTF9zdWIyX2FuZF9maW5pc2gKKworICAgIHN1YiAgICAgcjMsIHIzLCAjMQorICAgIGIgICAgICAgLkxfY2hlY2tfc2l6ZQorCisuTF9zdWI0X2FuZF9maW5pc2g6CisgICAgc3ViICAgICByMywgcjMsICM0CisgICAgYiAgICAgICAuTF9jaGVja19zaXplCisKKy5MX3N1YjNfYW5kX2ZpbmlzaDoKKyAgICBzdWIgICAgIHIzLCByMywgIzMKKyAgICBiICAgICAgIC5MX2NoZWNrX3NpemUKKworLkxfc3ViMl9hbmRfZmluaXNoOgorICAgIHN1YiAgICAgcjMsIHIzLCAjMgorCisuTF9jaGVja19zaXplOgorICAgIHBsZCAgICAgW3IxLCAjMF0KKyAgICBwbGQgICAgIFtyMSwgIzY0XQorICAgIGxkciAgICAgcjAsIFtzcF0KKyAgICBjbXAgICAgIHIzLCBscgorICAgIGJocyAgICAgX19zdHJjcHlfY2hrX2ZhaWxlZAorCisgICAgLy8gQWRkIDEgZm9yIGNvcHkgbGVuZ3RoIHRvIGdldCB0aGUgc3RyaW5nIHRlcm1pbmF0b3IuCisgICAgYWRkICAgICByMiwgcjMsICMxCitFTkQoX19zdHJjcHlfY2hrKQorCisjZGVmaW5lIE1FTUNQWV9CQVNFICAgICAgICAgX19zdHJjcHlfY2hrX21lbWNweV9iYXNlCisjZGVmaW5lIE1FTUNQWV9CQVNFX0FMSUdORUQgX19zdHJjcHlfY2hrX21lbWNweV9iYXNlX2FsaWduZWQKKyNpbmNsdWRlICJtZW1jcHlfYmFzZS5TIgorCitFTlRSWV9QUklWQVRFKF9fc3RyY3B5X2Noa19mYWlsZWQpCisgICAgLnNhdmUgICB7cjAsIGxyfQorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgIC5jZmlfcmVsX29mZnNldCByMCwgMAorICAgIC5jZmlfcmVsX29mZnNldCBsciwgNAorCisgICAgbGRyICAgICByMCwgZXJyb3JfbWVzc2FnZQorICAgIGxkciAgICAgcjEsIGVycm9yX2NvZGUKKzE6CisgICAgYWRkICAgICByMCwgcGMKKyAgICBibCAgICAgIF9fZm9ydGlmeV9jaGtfZmFpbAorZXJyb3JfY29kZToKKyAgICAud29yZCAgIEJJT05JQ19FVkVOVF9TVFJDUFlfQlVGRkVSX09WRVJGTE9XCitlcnJvcl9tZXNzYWdlOgorICAgIC53b3JkICAgZXJyb3Jfc3RyaW5nLSgxYis0KQorRU5EKF9fc3RyY3B5X2Noa19mYWlsZWQpCisKKyAgICAuZGF0YQorZXJyb3Jfc3RyaW5nOgorICAgIC5zdHJpbmcgInN0cmNweTogcHJldmVudGVkIHdyaXRlIHBhc3QgZW5kIG9mIGJ1ZmZlciIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1jcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTRmM2RkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbWNweS5TCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIEFSTSBMdGQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgY29tcGFueSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUk0gTFREIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBBUk0gTFREIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFByb3RvdHlwZTogdm9pZCAqbWVtY3B5ICh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KS4KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KKworICAgICAgICAudGV4dAorICAgICAgICAuc3ludGF4IHVuaWZpZWQKKyAgICAgICAgLmZwdSAgICBuZW9uCisKK0VOVFJZKF9fbWVtY3B5X2NoaykKKyAgICAgICAgY21wICAgICByMiwgcjMKKyAgICAgICAgYmhpICAgICBfX21lbWNweV9jaGtfZmFpbAorCisgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBtZW1jcHkuLi4KK0VORChfX21lbWNweV9jaGspCisKK0VOVFJZKG1lbWNweSkKKyAgICAgICAgcGxkICAgICBbcjEsICM2NF0KKyAgICAgICAgcHVzaCAgICB7cjAsIGxyfQorICAgICAgICAuc2F2ZSAgIHtyMCwgbHJ9CisgICAgICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgICAgICAuY2ZpX3JlbF9vZmZzZXQgcjAsIDAKKyAgICAgICAgLmNmaV9yZWxfb2Zmc2V0IGxyLCA0CitFTkQobWVtY3B5KQorCisjZGVmaW5lIE1FTUNQWV9CQVNFICAgICAgICAgX19tZW1jcHlfYmFzZQorI2RlZmluZSBNRU1DUFlfQkFTRV9BTElHTkVEIF9fbWVtY3B5X2Jhc2VfYWxpZ25lZAorI2luY2x1ZGUgIm1lbWNweV9iYXNlLlMiCisKK0VOVFJZX1BSSVZBVEUoX19tZW1jcHlfY2hrX2ZhaWwpCisgICAgICAgIC8vIFByZXNlcnZlIGxyIGZvciBiYWNrdHJhY2UuCisgICAgICAgIHB1c2ggICAge2xyfQorICAgICAgICAuc2F2ZSAgIHtscn0KKyAgICAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgICAgIC5jZmlfcmVsX29mZnNldCBsciwgMAorCisgICAgICAgIGxkciAgICAgcjAsIGVycm9yX21lc3NhZ2UKKyAgICAgICAgbGRyICAgICByMSwgZXJyb3JfY29kZQorMToKKyAgICAgICAgYWRkICAgICByMCwgcGMKKyAgICAgICAgYmwgICAgICBfX2ZvcnRpZnlfY2hrX2ZhaWwKK2Vycm9yX2NvZGU6CisgICAgICAgIC53b3JkICAgQklPTklDX0VWRU5UX01FTUNQWV9CVUZGRVJfT1ZFUkZMT1cKK2Vycm9yX21lc3NhZ2U6CisgICAgICAgIC53b3JkICAgZXJyb3Jfc3RyaW5nLSgxYis4KQorRU5EKF9fbWVtY3B5X2Noa19mYWlsKQorCisgICAgICAgIC5kYXRhCitlcnJvcl9zdHJpbmc6CisgICAgICAgIC5zdHJpbmcgIm1lbWNweTogcHJldmVudGVkIHdyaXRlIHBhc3QgZW5kIG9mIGJ1ZmZlciIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1jcHlfYmFzZS5TIGIvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbWNweV9iYXNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiYjQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1jcHlfYmFzZS5TCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCwgTlZJRElBIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2RlZmluZSBDQUNIRV9MSU5FX1NJWkUgICAgICAgICAoNjQpCisjZGVmaW5lIFBSRUZFVENIX0RJU1RBTkNFICAgICAgIChDQUNIRV9MSU5FX1NJWkUqNikKKworRU5UUllfUFJJVkFURShNRU1DUFlfQkFTRSkKKyAgICAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgICAgIC5jZmlfcmVsX29mZnNldCByMCwgMAorICAgICAgICAuY2ZpX3JlbF9vZmZzZXQgbHIsIDQKKworICAgICAgICBjbXAgICAgICAgICByMiwgIzAKKyAgICAgICAgYmVxICAgICAgICAgLkxfbWVtY3B5X2RvbmUKKyAgICAgICAgY21wICAgICAgICAgcjAsIHIxCisgICAgICAgIGJlcSAgICAgICAgIC5MX21lbWNweV9kb25lCisKKyAgICAgICAgLyogcHJlbG9hZCBuZXh0IGNhY2hlIGxpbmUgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjQ0FDSEVfTElORV9TSVpFKjFdCisKKyAgICAgICAgLyogRGVhbCB3aXRoIHZlcnkgc21hbGwgYmxvY2tzICg8IDMyYnl0ZXMpIGFzYXAgKi8KKyAgICAgICAgY21wICAgICAgICAgcjIsICMzMgorICAgICAgICBibG8gICAgICAgICAuTF9tZW1jcHlfbHRfMzJieXRlcworICAgICAgICAvKiBubyBuZWVkIHRvIGFsaWduIGlmIGxlbiA8IDEyOCBieXRlcyAqLworICAgICAgICBjbXAgICAgICAgICByMiwgIzEyOAorICAgICAgICBibG8gICAgICAgICAuTF9tZW1jcHlfbHRfMTI4Ynl0ZXMKKworICAgICAgICAvKiBsYXJnZSBjb3B5LCBhbGlnbiBkZXN0IHRvIDY0IGJ5dGUgYm91bmRyeSAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICNDQUNIRV9MSU5FX1NJWkUqMl0KKyAgICAgICAgcnNiICAgICAgICAgcjMsIHIwLCAjMAorICAgICAgICBhbmRzICAgICAgICByMywgcjMsICMweDNGCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgI0NBQ0hFX0xJTkVfU0laRSozXQorICAgICAgICBiZXEgICAgICAgICAuTF9tZW1jcHlfZGlzcGF0Y2gKKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCByMworICAgICAgICAvKiBjb3B5IDEgYnl0ZSAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjMsIGxzbCAjMzEKKyAgICAgICAgaXR0ICAgICAgICAgbWkKKyAgICAgICAgbGRyYm1pICAgICAgaXAsIFtyMV0sICMxCisgICAgICAgIHN0cmJtaSAgICAgIGlwLCBbcjBdLCAjMQorICAgICAgICAvKiBjb3B5IDIgYnl0ZXMgKi8KKyAgICAgICAgaXR0ICAgICAgICAgY3MKKyAgICAgICAgbGRyaGNzICAgICAgaXAsIFtyMV0sICMyCisgICAgICAgIHN0cmhjcyAgICAgIGlwLCBbcjBdLCAjMgorICAgICAgICAvKiBjb3B5IDQgYnl0ZXMgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIzLCBsc2wgIzI5CisgICAgICAgIGl0dCAgICAgICAgIG1pCisgICAgICAgIGxkcm1pICAgICAgIGlwLCBbcjFdLCAjNAorICAgICAgICBzdHJtaSAgICAgICBpcCwgW3IwXSwgIzQKKyAgICAgICAgLyogY29weSA4IGJ5dGVzICovCisgICAgICAgIGJjYyAgICAgICAgIDFmCisgICAgICAgIHZsZDEuOCAgICAgIHtkMH0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtkMH0sIFtyMCwgOjY0XSEKKzE6ICAgICAgLyogY29weSAxNiBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjMsIGxzbCAjMjcKKyAgICAgICAgYnBsICAgICAgICAgMWYKKyAgICAgICAgdmxkMS44ICAgICAge3EwfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwfSwgW3IwLCA6MTI4XSEKKzE6ICAgICAgLyogY29weSAzMiBieXRlcyAqLworICAgICAgICBiY2MgICAgICAgICAuTF9tZW1jcHlfZGlzcGF0Y2gKKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdIQorCisuTF9tZW1jcHlfZGlzcGF0Y2g6CisgICAgICAgIC8vIHByZS1kZWNyZW1lbnQgYnkgMTI4IHRvIGRldGVjdCBuZWFybHktZG9uZSBjb25kaXRpb24gZWFzaWx5LCBidXQKKyAgICAgICAgLy8gYWxzbyBuZWVkIHRvIGNoZWNrIGlmIHdlIGhhdmUgbGVzcyB0aGFuIDEyOCBieXRlcyBsZWZ0IGF0IHRoaXMKKyAgICAgICAgLy8gcG9pbnQgZHVlIHRvIGFsaWdubWVudCBjb2RlIGFib3ZlCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzEyOAorICAgICAgICBibG8gICAgICAgICAuTF9tZW1jcHlfbHRfMTI4cHJlc3ViCisKKyAgICAgICAgLy8gRGVudmVyIGRvZXMgYmV0dGVyIGlmIGJvdGggc291cmNlIGFuZCBkZXN0IGFyZSBhbGlnbmVkIHNvCisgICAgICAgIC8vIHdlJ2xsIHNwZWNpYWwtY2FzZSB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBjb2RlIGlzIHZpcnVhbGx5IGlkZW50aWNhbAorICAgICAgICB0c3QgICAgICAgICByMSwgIzB4RgorICAgICAgICBibmUgICAgICAgICAuTF9tZW1jcHlfbmVvbl91bmFsaWduX3NyY19wbGQKKworICAgICAgICAvLyBEUkFNIG1lbWNweSBzaG91bGQgYmUgdGhyb3R0bGVkIHNsaWdodGx5IHRvIGdldCBmdWxsIGJhbmR3aWR0aAorICAgICAgICAvLworICAgICAgICBjbXAgICAgICAgICByMiwgIzMyNzY4CisgICAgICAgIGJoaSAgICAgICAgIC5MX21lbWNweV9uZW9uX3VuYWxpZ25fc3JjX3BsZAorICAgICAgICAuYWxpZ24gICAgICA0CisxOgorICAgICAgICAvKiBjb3B5IDEyOCBieXRlcyBpbiBlYWNoIGxvb3AgKi8KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMTI4CisKKyAgICAgICAgLyogcHJlbG9hZCBhIGNhY2hlIGxpbmUgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjUFJFRkVUQ0hfRElTVEFOQ0VdCisgICAgICAgIC8qIGNvcHkgYSBjYWNoZSBsaW5lICovCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjEsIDoxMjhdIQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSEKKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMSwgOjEyOF0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdIQorICAgICAgICAvKiBwcmVsb2FkIGEgY2FjaGUgbGluZSAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICNQUkVGRVRDSF9ESVNUQU5DRV0KKyAgICAgICAgLyogY29weSBhIGNhY2hlIGxpbmUgKi8KKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMSwgOjEyOF0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdIQorICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxLCA6MTI4XSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0hCisKKyAgICAgICAgYmhzICAgICAgICAgMWIKKyAgICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjMTI4CisgICAgICAgIGJuZSAgICAgICAgIC5MX21lbWNweV9sdF8xMjhieXRlc19hbGlnbgorICAgICAgICBwb3AgICAgICAgICB7cjAsIHBjfQorCisgICAgICAgIC5hbGlnbiAgICAgIDQKKy5MX21lbWNweV9uZW9uX3VuYWxpZ25fc3JjX3BsZDoKKzE6CisgICAgICAgIC8qIGNvcHkgMTI4IGJ5dGVzIGluIGVhY2ggbG9vcCAqLworICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxMjgKKworICAgICAgICAvKiBwcmVsb2FkIGEgY2FjaGUgbGluZSAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICNQUkVGRVRDSF9ESVNUQU5DRV0KKyAgICAgICAgLyogY29weSBhIGNhY2hlIGxpbmUgKi8KKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdIQorICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0hCisgICAgICAgIC8qIHByZWxvYWQgYSBjYWNoZSBsaW5lICovCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgI1BSRUZFVENIX0RJU1RBTkNFXQorICAgICAgICAvKiBjb3B5IGEgY2FjaGUgbGluZSAqLworICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0hCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSEKKworICAgICAgICBiaHMgICAgICAgICAxYgorICAgICAgICBhZGRzICAgICAgICByMiwgcjIsICMxMjgKKyAgICAgICAgYm5lICAgICAgICAgLkxfbWVtY3B5X2x0XzEyOGJ5dGVzX2FsaWduCisgICAgICAgIHBvcCAgICAgICAgIHtyMCwgcGN9CisKKy5MX21lbWNweV9sdF8xMjhwcmVzdWI6CisgICAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzEyOAorLkxfbWVtY3B5X2x0XzEyOGJ5dGVzX2FsaWduOgorICAgICAgICAvKiBjb3B5IDY0IGJ5dGVzICovCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMyNgorICAgICAgICBiY2MgICAgICAgICAxZgorICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0hCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSEKKzE6ICAgICAgLyogY29weSAzMiBieXRlcyAqLworICAgICAgICBicGwgICAgICAgICAxZgorICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0hCisxOiAgICAgIC8qIGNvcHkgMTYgYnl0ZXMgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzI4CisgICAgICAgIGJjYyAgICAgICAgIDFmCisgICAgICAgIHZsZDEuOCAgICAgIHtxMH0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMH0sIFtyMCwgOjEyOF0hCisxOiAgICAgIC8qIGNvcHkgOCBieXRlcyAqLworICAgICAgICBicGwgICAgICAgICAxZgorICAgICAgICB2bGQxLjggICAgICB7ZDB9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7ZDB9LCBbcjAsIDo2NF0hCisxOiAgICAgIC8qIGNvcHkgNCBieXRlcyAqLworICAgICAgICB0c3QgICAgICAgICByMiwgIzQKKyAgICAgICAgaXR0ICAgICAgICAgbmUKKyAgICAgICAgbGRybmUgICAgICAgaXAsIFtyMV0sICM0CisgICAgICAgIHN0cm5lICAgICAgIGlwLCBbcjBdLCAjNAorICAgICAgICAvKiBjb3B5IDIgYnl0ZXMgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzMxCisgICAgICAgIGl0dCAgICAgICAgIGNzCisgICAgICAgIGxkcmhjcyAgICAgIGlwLCBbcjFdLCAjMgorICAgICAgICBzdHJoY3MgICAgICBpcCwgW3IwXSwgIzIKKyAgICAgICAgLyogY29weSAxIGJ5dGUgKi8KKyAgICAgICAgaXR0ICAgICAgICAgbWkKKyAgICAgICAgbGRyYm1pICAgICAgaXAsIFtyMV0KKyAgICAgICAgc3RyYm1pICAgICAgaXAsIFtyMF0KKworICAgICAgICBwb3AgICAgICAgICB7cjAsIHBjfQorCisuTF9tZW1jcHlfbHRfMTI4Ynl0ZXM6CisgICAgICAgIC8qIGNvcHkgNjQgYnl0ZXMgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzI2CisgICAgICAgIGJjYyAgICAgICAgIDFmCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwXSEKKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjBdIQorMTogICAgICAvKiBjb3B5IDMyIGJ5dGVzICovCisgICAgICAgIGJwbAkgICAgLkxfbWVtY3B5X2x0XzMyYnl0ZXMKKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjBdIQorLkxfbWVtY3B5X2x0XzMyYnl0ZXM6CisgICAgICAgIC8qIGNvcHkgMTYgYnl0ZXMgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzI4CisgICAgICAgIGJjYyAgICAgICAgIDFmCisgICAgICAgIHZsZDEuOCAgICAgIHtxMH0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMH0sIFtyMF0hCisxOiAgICAgIC8qIGNvcHkgOCBieXRlcyAqLworICAgICAgICBicGwgICAgICAgICAxZgorICAgICAgICB2bGQxLjggICAgICB7ZDB9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7ZDB9LCBbcjBdIQorMTogICAgICAvKiBjb3B5IDQgYnl0ZXMgKi8KKyAgICAgICAgdHN0ICAgICAgICAgcjIsICM0CisgICAgICAgIGl0dCAgICAgICAgIG5lCisgICAgICAgIGxkcm5lICAgICAgIGlwLCBbcjFdLCAjNAorICAgICAgICBzdHJuZSAgICAgICBpcCwgW3IwXSwgIzQKKyAgICAgICAgLyogY29weSAyIGJ5dGVzICovCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMzMQorICAgICAgICBpdHQgICAgICAgICBjcworICAgICAgICBsZHJoY3MgICAgICBpcCwgW3IxXSwgIzIKKyAgICAgICAgc3RyaGNzICAgICAgaXAsIFtyMF0sICMyCisgICAgICAgIC8qIGNvcHkgMSBieXRlICovCisgICAgICAgIGl0dCAgICAgICAgIG1pCisgICAgICAgIGxkcmJtaSAgICAgIGlwLCBbcjFdCisgICAgICAgIHN0cmJtaSAgICAgIGlwLCBbcjBdCisKKy5MX21lbWNweV9kb25lOgorICAgICAgICBwb3AgICAgICAgICB7cjAsIHBjfQorRU5EKE1FTUNQWV9CQVNFKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9kZW52ZXIvYmlvbmljL21lbW1vdmUuUyBiL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1tb3ZlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyMTkwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1tb3ZlLlMKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IE5WSURJQSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CisKKyAgICAgICAgLnRleHQKKyAgICAgICAgLnN5bnRheCB1bmlmaWVkCisgICAgICAgIC5mcHUgICAgbmVvbgorCisjZGVmaW5lIENBQ0hFX0xJTkVfU0laRSAgICAgICAgICg2NCkKKyNkZWZpbmUgTUVNQ1BZX0JMT0NLX1NJWkVfU01BTEwgKDMyNzY4KQorI2RlZmluZSBNRU1DUFlfQkxPQ0tfU0laRV9NSUQgICAoMTA0ODU3NikKKyNkZWZpbmUgUFJFRkVUQ0hfRElTVEFOQ0VfTkVBUiAgKENBQ0hFX0xJTkVfU0laRSo0KQorI2RlZmluZSBQUkVGRVRDSF9ESVNUQU5DRV9NSUQgICAoQ0FDSEVfTElORV9TSVpFKjQpCisjZGVmaW5lIFBSRUZFVENIX0RJU1RBTkNFX0ZBUiAgIChDQUNIRV9MSU5FX1NJWkUqMTYpCisKK0VOVFJZKG1lbW1vdmUpCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjMAorICAgICAgICBjbXBuZSAgICAgICByMCwgcjEKKyAgICAgICAgYnhlcSAgICAgICAgbHIKKyAgICAgICAgc3VicyAgICAgICAgcjMsIHIwLCByMQorICAgICAgICBibHMgICAgICAgICAuTF9qdW1wX3RvX21lbWNweQorICAgICAgICBjbXAgICAgICAgICByMiwgcjMKKyAgICAgICAgYmhpICAgICAgICAgLkxfcmV2ZXJzZWRfbWVtY3B5CisKKy5MX2p1bXBfdG9fbWVtY3B5OgorICAgICAgICBiICAgICAgICAgICBtZW1jcHkKKworLkxfcmV2ZXJzZWRfbWVtY3B5OgorICAgICAgICBwdXNoICAgICAgICB7cjAsIGxyfQorICAgICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAgICAgLmNmaV9yZWxfb2Zmc2V0IHIwLCAwCisgICAgICAgIC5jZmlfcmVsX29mZnNldCBsciwgNAorCisgICAgICAgIGFkZCAgICAgICAgIHIwLCByMCwgcjIKKyAgICAgICAgYWRkICAgICAgICAgcjEsIHIxLCByMgorCisgICAgICAgIC8qIHByZWxvYWQgbmV4dCBjYWNoZSBsaW5lICovCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIy1DQUNIRV9MSU5FX1NJWkVdCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIy1DQUNIRV9MSU5FX1NJWkUqMl0KKworLkxfcmV2ZXJzZWRfbWVtY3B5X2FsaWduX2Rlc3Q6CisgICAgICAgIC8qIERlYWwgd2l0aCB2ZXJ5IHNtYWxsIGJsb2NrcyAoPCAzMmJ5dGVzKSBhc2FwICovCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjMzIKKyAgICAgICAgYmxvICAgICAgICAgLkxfcmV2ZXJzZWRfbWVtY3B5X2x0XzMyYnl0ZXMKKyAgICAgICAgLyogbm8gbmVlZCB0byBhbGlnbiBpZiBsZW4gPCAxMjggYnl0ZXMgKi8KKyAgICAgICAgY21wICAgICAgICAgcjIsICMxMjgKKyAgICAgICAgYmxvICAgICAgICAgLkxfcmV2ZXJzZWRfbWVtY3B5X2x0XzEyOGJ5dGVzCisgICAgICAgIC8qIGFsaWduIGRlc3RpbmF0aW9uIHRvIDY0IGJ5dGVzICgxIGNhY2hlIGxpbmUpICovCisgICAgICAgIGFuZHMgICAgICAgIHIzLCByMCwgIzB4M2YKKyAgICAgICAgYmVxICAgICAgICAgLkxfcmV2ZXJzZWRfbWVtY3B5X2Rpc3BhdGNoCisgICAgICAgIHN1YiAgICAgICAgIHIyLCByMiwgcjMKKzA6ICAgICAgLyogY29weSAxIGJ5dGUgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIzLCBsc2wgIzMxCisgICAgICAgIGxkcmJtaSAgICAgIGlwLCBbcjEsICMtMV0hCisgICAgICAgIHN0cmJtaSAgICAgIGlwLCBbcjAsICMtMV0hCisxOiAgICAgIC8qIGNvcHkgMiBieXRlcyAqLworICAgICAgICBsZHJiY3MgICAgICBpcCwgW3IxLCAjLTFdIQorICAgICAgICBzdHJiY3MgICAgICBpcCwgW3IwLCAjLTFdIQorICAgICAgICBsZHJiY3MgICAgICBpcCwgW3IxLCAjLTFdIQorICAgICAgICBzdHJiY3MgICAgICBpcCwgW3IwLCAjLTFdIQorMjogICAgICAvKiBjb3B5IDQgYnl0ZXMgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIzLCBsc2wgIzI5CisgICAgICAgIGJwbCAgICAgICAgIDNmCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzQKKyAgICAgICAgc3ViICAgICAgICAgcjAsIHIwLCAjNAorICAgICAgICB2bGQ0LjggICAgICB7ZDBbMF0sIGQxWzBdLCBkMlswXSwgZDNbMF19LCBbcjFdCisgICAgICAgIHZzdDQuOCAgICAgIHtkMFswXSwgZDFbMF0sIGQyWzBdLCBkM1swXX0sIFtyMCwgOjMyXQorMzogICAgICAvKiBjb3B5IDggYnl0ZXMgKi8KKyAgICAgICAgYmNjICAgICAgICAgNGYKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjOAorICAgICAgICBzdWIgICAgICAgICByMCwgcjAsICM4CisgICAgICAgIHZsZDEuOCAgICAgIHtkMH0sIFtyMV0KKyAgICAgICAgdnN0MS44ICAgICAge2QwfSwgW3IwLCA6NjRdCis0OiAgICAgIC8qIGNvcHkgMTYgYnl0ZXMgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIzLCBsc2wgIzI3CisgICAgICAgIGJwbCAgICAgICAgIDVmCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzE2CisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzE2CisgICAgICAgIHZsZDEuOCAgICAgIHtxMH0sIFtyMV0KKyAgICAgICAgdnN0MS44ICAgICAge3EwfSwgW3IwLCA6MTI4XQorNTogICAgICAvKiBjb3B5IDMyIGJ5dGVzICovCisgICAgICAgIGJjYyAgICAgICAgIC5MX3JldmVyc2VkX21lbWNweV9kaXNwYXRjaAorICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICMzMgorICAgICAgICBzdWIgICAgICAgICByMCwgcjAsICMzMgorICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XQorCisuTF9yZXZlcnNlZF9tZW1jcHlfZGlzcGF0Y2g6CisgICAgICAgIC8qIHByZWxvYWQgbW9yZSBjYWNoZSBsaW5lcyAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICMtQ0FDSEVfTElORV9TSVpFKjNdCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIy1DQUNIRV9MSU5FX1NJWkUqNF0KKworICAgICAgICBjbXAgICAgICAgICByMiwgI01FTUNQWV9CTE9DS19TSVpFX1NNQUxMCisgICAgICAgIGJsbyAgICAgICAgIC5MX3JldmVyc2VkX21lbWNweV9uZW9uX3BsZF9uZWFyCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjTUVNQ1BZX0JMT0NLX1NJWkVfTUlECisgICAgICAgIGJsbyAgICAgICAgIC5MX3JldmVyc2VkX21lbWNweV9uZW9uX3BsZF9taWQKKyAgICAgICAgYiAgICAgICAgICAgLkxfcmV2ZXJzZWRfbWVtY3B5X25lb25fcGxkX2ZhcgorCisuTF9yZXZlcnNlZF9tZW1jcHlfbmVvbl9wbGRfbmVhcjoKKyAgICAgICAgLyogbGVzcyB0aGFuIDEyOCBieXRlcz8gKi8KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMTI4CisgICAgICAgIGJsbyAgICAgICAgIDFmCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzMyCisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzMyCisgICAgICAgIG1vdiAgICAgICAgIHIzLCAjLTMyCisgICAgICAgIC5hbGlnbiAgICAgIDQKKzA6CisgICAgICAgIC8qIGNvcHkgMTI4IGJ5dGVzIGluIGVhY2ggbG9vcCAqLworICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxMjgKKworICAgICAgICAvKiBwcmVsb2FkIHRvIGNhY2hlICovCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIy0oUFJFRkVUQ0hfRElTVEFOQ0VfTkVBUitDQUNIRV9MSU5FX1NJWkUqMikrMzJdCisgICAgICAgIC8qIGNvcHkgYSBjYWNoZSBsaW5lICovCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdLCByMworICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSwgcjMKKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0sIHIzCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdLCByMworCisgICAgICAgIC8qIHByZWxvYWQgdG8gY2FjaGUgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjLShQUkVGRVRDSF9ESVNUQU5DRV9ORUFSK0NBQ0hFX0xJTkVfU0laRSoyKSszMl0KKyAgICAgICAgLyogY29weSBhIGNhY2hlIGxpbmUgKi8KKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0sIHIzCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdLCByMworICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSwgcjMKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0sIHIzCisKKyAgICAgICAgYmhzICAgICAgICAgMGIKKyAgICAgICAgYWRkICAgICAgICAgcjEsIHIxLCAjMzIKKyAgICAgICAgYWRkICAgICAgICAgcjAsIHIwLCAjMzIKKzE6CisgICAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIzEyOAorICAgICAgICBibmUgICAgICAgICAuTF9yZXZlcnNlZF9tZW1jcHlfbHRfMTI4Ynl0ZXMKKyAgICAgICAgcG9wICAgICAgICAge3IwLCBwY30KKworLkxfcmV2ZXJzZWRfbWVtY3B5X25lb25fcGxkX21pZDoKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMTI4CisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzMyCisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzMyCisgICAgICAgIG1vdiAgICAgICAgIHIzLCAjLTMyCisgICAgICAgIC5hbGlnbiAgICAgIDQKKzA6CisgICAgICAgIC8qIGNvcHkgMTI4IGJ5dGVzIGluIGVhY2ggbG9vcCAqLworICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxMjgKKworICAgICAgICAvKiBwcmVsb2FkIHRvIGNhY2hlICovCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIy0oUFJFRkVUQ0hfRElTVEFOQ0VfTUlEK0NBQ0hFX0xJTkVfU0laRSkrMzJdCisgICAgICAgIC8qIGNvcHkgYSBjYWNoZSBsaW5lICovCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdLCByMworICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwLCA6MjU2XSwgcjMKKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0sIHIzCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdLCByMworCisgICAgICAgIC8qIHByZWxvYWQgdG8gY2FjaGUgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjLShQUkVGRVRDSF9ESVNUQU5DRV9NSUQrQ0FDSEVfTElORV9TSVpFKSszMl0KKyAgICAgICAgLyogY29weSBhIGNhY2hlIGxpbmUgKi8KKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0sIHIzCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjAsIDoyNTZdLCByMworICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXSwgcjMKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0sIHIzCisKKyAgICAgICAgYmhzICAgICAgICAgMGIKKyAgICAgICAgYWRkICAgICAgICAgcjEsIHIxLCAjMzIKKyAgICAgICAgYWRkICAgICAgICAgcjAsIHIwLCAjMzIKKzE6CisgICAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIzEyOAorICAgICAgICBibmUgICAgICAgICAuTF9yZXZlcnNlZF9tZW1jcHlfbHRfMTI4Ynl0ZXMKKyAgICAgICAgcG9wICAgICAgICAge3IwLCBwY30KKworLkxfcmV2ZXJzZWRfbWVtY3B5X25lb25fcGxkX2ZhcjoKKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCAjMTI4CisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzEyOAorICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICMxMjgKKyAgICAgICAgLmFsaWduICAgICAgNAorMDoKKyAgICAgICAgLyogY29weSAxMjggYnl0ZXMgaW4gZWFjaCBsb29wICovCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzEyOAorCisgICAgICAgIC8qIHByZWxvYWQgdG8gY2FjaGUgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjLShQUkVGRVRDSF9ESVNUQU5DRV9GQVIrQ0FDSEVfTElORV9TSVpFKjIpKzEyOF0KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjLShQUkVGRVRDSF9ESVNUQU5DRV9GQVIrQ0FDSEVfTElORV9TSVpFKSsxMjhdCisgICAgICAgIC8qIHJlYWQgKi8KKyAgICAgICAgdmxkMS44ICAgICAge3EwLCBxMX0sIFtyMV0hCisgICAgICAgIHZsZDEuOCAgICAgIHtxMiwgcTN9LCBbcjFdIQorICAgICAgICB2bGQxLjggICAgICB7cTgsIHE5fSwgW3IxXSEKKyAgICAgICAgdmxkMS44ICAgICAge3ExMCwgcTExfSwgW3IxXSEKKyAgICAgICAgLyogd3JpdGUgKi8KKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMCwgOjI1Nl0hCisgICAgICAgIHZzdDEuOCAgICAgIHtxMiwgcTN9LCBbcjAsIDoyNTZdIQorICAgICAgICB2c3QxLjggICAgICB7cTgsIHE5fSwgW3IwLCA6MjU2XSEKKyAgICAgICAgdnN0MS44ICAgICAge3ExMCwgcTExfSwgW3IwLCA6MjU2XSEKKworICAgICAgICBzdWIgICAgICAgICByMCwgcjAsICMyNTYKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjMjU2CisgICAgICAgIGJocyAgICAgICAgIDBiCisgICAgICAgIGFkZCAgICAgICAgIHIwLCByMCwgIzEyOAorICAgICAgICBhZGQgICAgICAgICByMSwgcjEsICMxMjgKKzE6CisgICAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIzEyOAorICAgICAgICBibmUgICAgICAgICAuTF9yZXZlcnNlZF9tZW1jcHlfbHRfMTI4Ynl0ZXMKKyAgICAgICAgcG9wICAgICAgICAge3IwLCBwY30KKworLkxfcmV2ZXJzZWRfbWVtY3B5X2x0XzEyOGJ5dGVzOgorNjogICAgICAvKiBjb3B5IDY0IGJ5dGVzICovCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMyNgorICAgICAgICBiY2MgICAgICAgICA1ZgorICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICMzMgorICAgICAgICBzdWIgICAgICAgICByMCwgcjAsICMzMgorICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwXQorICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICMzMgorICAgICAgICBzdWIgICAgICAgICByMCwgcjAsICMzMgorICAgICAgICB2bGQxLjggICAgICB7cTAsIHExfSwgW3IxXQorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IwXQorNTogICAgICAvKiBjb3B5IDMyIGJ5dGVzICovCisgICAgICAgIGJwbCAgICAgICAgIDRmCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzMyCisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzMyCisgICAgICAgIHZsZDEuOCAgICAgIHtxMCwgcTF9LCBbcjFdCisgICAgICAgIHZzdDEuOCAgICAgIHtxMCwgcTF9LCBbcjBdCisuTF9yZXZlcnNlZF9tZW1jcHlfbHRfMzJieXRlczoKKzQ6ICAgICAgLyogY29weSAxNiBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMjgKKyAgICAgICAgYmNjICAgICAgICAgM2YKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjMTYKKyAgICAgICAgc3ViICAgICAgICAgcjAsIHIwLCAjMTYKKyAgICAgICAgdmxkMS44ICAgICAge3EwfSwgW3IxXQorICAgICAgICB2c3QxLjggICAgICB7cTB9LCBbcjBdCiszOiAgICAgIC8qIGNvcHkgOCBieXRlcyAqLworICAgICAgICBicGwgICAgICAgICAyZgorICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICM4CisgICAgICAgIHN1YiAgICAgICAgIHIwLCByMCwgIzgKKyAgICAgICAgdmxkMS44ICAgICAge2QwfSwgW3IxXQorICAgICAgICB2c3QxLjggICAgICB7ZDB9LCBbcjBdCisyOiAgICAgIC8qIGNvcHkgNCBieXRlcyAqLworICAgICAgICBhbmRzICAgICAgICBpcCwgcjIsICMweDQKKyAgICAgICAgYmVxICAgICAgICAgMWYKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjNAorICAgICAgICBzdWIgICAgICAgICByMCwgcjAsICM0CisgICAgICAgIHZsZDQuOCAgICAgIHtkMFswXSwgZDFbMF0sIGQyWzBdLCBkM1swXX0sIFtyMV0KKyAgICAgICAgdnN0NC44ICAgICAge2QwWzBdLCBkMVswXSwgZDJbMF0sIGQzWzBdfSwgW3IwXQorMTogICAgICAvKiBjb3B5IDIgYnl0ZXMgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzMxCisgICAgICAgIGxkcmJjcyAgICAgIGlwLCBbcjEsICMtMV0hCisgICAgICAgIHN0cmJjcyAgICAgIGlwLCBbcjAsICMtMV0hCisgICAgICAgIGxkcmJjcyAgICAgIGlwLCBbcjEsICMtMV0hCisgICAgICAgIHN0cmJjcyAgICAgIGlwLCBbcjAsICMtMV0hCiswOiAgICAgIC8qIGNvcHkgMSBieXRlICovCisgICAgICAgIGxkcmJtaSAgICAgIGlwLCBbcjEsICMtMV0hCisgICAgICAgIHN0cmJtaSAgICAgIGlwLCBbcjAsICMtMV0hCisKKyAgICAgICAgcG9wICAgICAgICAge3IwLCBwY30KKworRU5EKG1lbW1vdmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvbWVtc2V0LlMgYi9saWJjL2FyY2gtYXJtL2RlbnZlci9iaW9uaWMvbWVtc2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYzZDlhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1zZXQuUwpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CisKKyAgICAgICAgLyoKKyAgICAgICAgICogT3B0aW1pemVkIG1lbXNldCgpIGZvciBBUk0uCisgICAgICAgICAqCisgICAgICAgICAqIG1lbXNldCgpIHJldHVybnMgaXRzIGZpcnN0IGFyZ3VtZW50LgorICAgICAgICAgKi8KKworICAgICAgICAuZnB1ICAgICAgICBuZW9uCisgICAgICAgIC5zeW50YXggICAgIHVuaWZpZWQKKworRU5UUlkoX19tZW1zZXRfY2hrKQorICAgICAgICBjbXAgICAgICAgICByMiwgcjMKKyAgICAgICAgYmxzICAgICAgICAgLkxfZG9uZQorCisgICAgICAgIC8vIFByZXNlcnZlIGxyIGZvciBiYWNrdHJhY2UuCisgICAgICAgIHB1c2ggICAgICAgIHtscn0KKyAgICAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgICAgIC5jZmlfcmVsX29mZnNldCBsciwgMAorCisKKyAgICAgICAgbGRyICAgICAgICAgcjAsIGVycm9yX21lc3NhZ2UKKyAgICAgICAgbGRyICAgICAgICAgcjEsIGVycm9yX2NvZGUKKzE6CisgICAgICAgIGFkZCAgICAgICAgIHIwLCBwYworICAgICAgICBibCAgICAgICAgICBfX2ZvcnRpZnlfY2hrX2ZhaWwKK2Vycm9yX2NvZGU6CisgICAgICAgIC53b3JkICAgICAgIEJJT05JQ19FVkVOVF9NRU1TRVRfQlVGRkVSX09WRVJGTE9XCitlcnJvcl9tZXNzYWdlOgorICAgICAgICAud29yZCAgICAgICBlcnJvcl9zdHJpbmctKDFiKzgpCitFTkQoX19tZW1zZXRfY2hrKQorCitFTlRSWShiemVybykKKyAgICAgICAgbW92ICAgICAgICAgcjIsIHIxCisgICAgICAgIG1vdiAgICAgICAgIHIxLCAjMAorLkxfZG9uZToKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG1lbXNldC4uLgorRU5EKGJ6ZXJvKQorCitFTlRSWShtZW1zZXQpCisgICAgICAgIHBsZHcgICAgICAgIFtyMF0KKyAgICAgICAgbW92ICAgICAgICAgcjMsIHIwCisKKyAgICAgICAgLy8gRHVwbGljYXRlIHRoZSBsb3cgYnl0ZSBvZiByMQorICAgICAgICBtb3YgICAgICAgICByMSwgcjEsIGxzbCAjMjQKKyAgICAgICAgb3JyICAgICAgICAgcjEsIHIxLCByMSwgbHNyICM4CisgICAgICAgIG9yciAgICAgICAgIHIxLCByMSwgcjEsIGxzciAjMTYKKworICAgICAgICBjbXAgICAgICAgICByMiwgIzE2CisgICAgICAgIGJsbyAgICAgICAgIC5MX2xlc3NfdGhhbl8xNgorCisgICAgICAgIC8vIFRoaXMgc2VjdGlvbiBoYW5kbGVzIHJlZ2lvbnMgMTYgYnl0ZXMgb3IgbGFyZ2VyCisgICAgICAgIC8vCisgICAgICAgIC8vIFVzZSBhbGlnbmVkIHZzdDEuOCBhbmQgdnN0bSB3aGVuIHBvc3NpYmxlLiAgUmVnaXN0ZXIgdmFsdWVzIHdpbGwgYmU6CisgICAgICAgIC8vICAgaXAgaXMgc2NyYXRjaAorICAgICAgICAvLyAgIHEwLCBxMSwgYW5kIHIxIGNvbnRhaW4gdGhlIG1lbXNldCB2YWx1ZQorICAgICAgICAvLyAgIHIyIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2V0CisgICAgICAgIC8vICAgcjMgaXMgdGhlIGFkdmFuY2luZyBkZXN0aW5hdGlvbiBwb2ludGVyCisgICAgICAgIHZkdXAuMzIgICAgIHEwLCByMQorCisgICAgICAgIGFuZHMgICAgICAgIGlwLCByMywgMHhGCisgICAgICAgIGJlcSAgICAgICAgIC5MX21lbXNldF9hbGlnbmVkCisKKyAgICAgICAgLy8gQWxpZ24gZGVzdCBwb2ludGVyIHRvIDE2LWJ5dGUgYm91bmRhcnkuCisgICAgICAgIHBsZHcgICAgICAgIFtyMCwgIzY0XQorICAgICAgICByc2IgICAgICAgICBpcCwgaXAsICMxNgorCisgICAgICAgIC8vIFByZS1hZGp1c3QgdGhlIGJ5dGUgY291bnQgdG8gcmVmbGVjdCBwb3N0LWFsaWdtZW50IHZhbHVlLiAgRXhwZWN0aW5nCisgICAgICAgIC8vIDgtYnl0ZSBhbGlnbm1lbnQgdG8gYmUgcmF0aGVyIGNvbW1vbiBzbyB3ZSBzcGVjaWFsIGNhc2UgdGhhdCBvbmUuCisgICAgICAgIHN1YiAgICAgICAgIHIyLCByMiwgaXAKKworICAgICAgICAvKiBzZXQgMSBieXRlICovCisgICAgICAgIHRzdCAgICAgICAgIGlwLCAjMQorICAgICAgICBpdCAgICAgICAgICBuZQorICAgICAgICBzdHJibmUgICAgICByMSwgW3IzXSwgIzEKKyAgICAgICAgLyogc2V0IDIgYnl0ZXMgKi8KKyAgICAgICAgdHN0ICAgICAgICAgaXAsICMyCisgICAgICAgIGl0ICAgICAgICAgIG5lCisgICAgICAgIHN0cmhuZSAgICAgIHIxLCBbcjNdLCAjMgorICAgICAgICAvKiBzZXQgNCBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgaXAsIGxzbCAjMjkKKyAgICAgICAgaXQgICAgICAgICAgbWkKKyAgICAgICAgc3RybWkgICAgICAgcjEsIFtyM10sICM0CisgICAgICAgIC8qIHNldCA4IGJ5dGVzICovCisgICAgICAgIGl0dCAgICAgICAgIGNzCisgICAgICAgIHN0cmNzICAgICAgIHIxLCBbcjNdLCAjNAorICAgICAgICBzdHJjcyAgICAgICByMSwgW3IzXSwgIzQKKworLkxfbWVtc2V0X2FsaWduZWQ6CisgICAgICAgIC8vIERlc3RpbmF0aW9uIGlzIG5vdyAxNi1ieXRlIGFsaWduZWQuICBEZXRlcm1pbmUgaG93IHRvIGhhbmRsZQorICAgICAgICAvLyByZW1haW5pbmcgYnl0ZXMuCisgICAgICAgIHZtb3YgICAgICAgIHExLCBxMAorICAgICAgICBjbXAgICAgICAgICByMiwgIzEyOAorICAgICAgICBibG8gICAgICAgICAuTF9sZXNzX3RoYW5fMTI4CisKKyAgICAgICAgLy8gV2UgbmVlZCB0byBzZXQgYSBsYXJnZXIgYmxvY2sgb2YgbWVtb3J5LiAgVXNlIGZvdXIgUSByZWdzIHRvCisgICAgICAgIC8vIHNldCBhIGZ1bGwgY2FjaGUgbGluZSBpbiBvbmUgaW5zdHJ1Y3Rpb24uICBQcmUtZGVjcmVtZW50CisgICAgICAgIC8vIHIyIHRvIHNpbXBsaWZ5IGVuZC1vZi1sb29wIGRldGVjdGlvbgorICAgICAgICB2bW92ICAgICAgICBxMiwgcTAKKyAgICAgICAgdm1vdiAgICAgICAgcTMsIHEwCisgICAgICAgIHBsZHcgICAgICAgIFtyMCwgIzEyOF0KKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCAjMTI4CisgICAgICAgIC5hbGlnbiA0CisuTF9tZW1zZXRfbG9vcF8xMjg6CisgICAgICAgIHBsZHcgICAgICAgIFtyMywgIzE5Ml0KKyAgICAgICAgdnN0bSAgICAgICAgcjMhLCB7cTAsIHExLCBxMiwgcTN9CisgICAgICAgIHZzdG0gICAgICAgIHIzISwge3EwLCBxMSwgcTIsIHEzfQorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxMjgKKyAgICAgICAgYmhzICAgICAgICAgLkxfbWVtc2V0X2xvb3BfMTI4CisKKyAgICAgICAgLy8gVW4tYmlhcyByMiBzbyBpdCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQuICBFYXJseQorICAgICAgICAvLyBleGl0IGlmIHdlIGFyZSBkb25lLgorICAgICAgICBhZGRzICAgICAgICByMiwgcjIsICMxMjgKKyAgICAgICAgYmVxICAgICAgICAgMmYKKworICAgICAgICAuYWxpZ24gNAorLkxfbGVzc190aGFuXzEyODoKKyAgICAgICAgLy8gc2V0IDY0IGJ5dGVzCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMyNgorICAgICAgICBiY2MgICAgICAgICAxZgorICAgICAgICB2c3QxLjggICAgICB7cTAsIHExfSwgW3IzLCA6MTI4XSEKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMywgOjEyOF0hCisgICAgICAgIGJlcSAgICAgICAgIDJmCisxOgorICAgICAgICAvLyBzZXQgMzIgYnl0ZXMKKyAgICAgICAgYnBsICAgICAgICAgMWYKKyAgICAgICAgdnN0MS44ICAgICAge3EwLCBxMX0sIFtyMywgOjEyOF0hCisxOgorICAgICAgICAvLyBzZXQgMTYgYnl0ZXMKKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzI4CisgICAgICAgIGJjYyAgICAgICAgIDFmCisgICAgICAgIHZzdDEuOCAgICAgIHtxMH0sIFtyMywgOjEyOF0hCisgICAgICAgIGJlcSAgICAgICAgIDJmCisxOgorICAgICAgICAvLyBzZXQgOCBieXRlcworICAgICAgICBicGwgICAgICAgICAxZgorICAgICAgICB2c3QxLjggICAgICB7ZDB9LCBbcjMsIDo2NF0hCisxOgorICAgICAgICAvLyBzZXQgNCBieXRlcworICAgICAgICB0c3QgICAgICAgICByMiwgIzQKKyAgICAgICAgaXQgICAgICAgICAgbmUKKyAgICAgICAgc3RybmUgICAgICAgcjEsIFtyM10sICM0CisxOgorICAgICAgICAvLyBzZXQgMiBieXRlcworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMzEKKyAgICAgICAgaXQgICAgICAgICAgY3MKKyAgICAgICAgc3RyaGNzICAgICAgcjEsIFtyM10sICMyCisgICAgICAgIC8vIHNldCAxIGJ5dGUKKyAgICAgICAgaXQgICAgICAgICAgbWkKKyAgICAgICAgc3RyYm1pICAgICAgcjEsIFtyM10KKzI6CisgICAgICAgIGJ4ICAgICAgICAgIGxyCisKKy5MX2xlc3NfdGhhbl8xNjoKKyAgICAgICAgLy8gU3RvcmUgdXAgdG8gMTUgYnl0ZXMgd2l0aG91dCB3b3JyeWluZyBhYm91dCBieXRlIGFsaWdubWVudAorICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMjkKKyAgICAgICAgYmNjICAgICAgICAgMWYKKyAgICAgICAgc3RyICAgICAgICAgcjEsIFtyM10sICM0CisgICAgICAgIHN0ciAgICAgICAgIHIxLCBbcjNdLCAjNAorICAgICAgICBiZXEgICAgICAgICAyZgorMToKKyAgICAgICAgaXQgICAgICAgICAgbWkKKyAgICAgICAgc3RybWkgICAgICAgcjEsIFtyM10sICM0CisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMzMQorICAgICAgICBpdCAgICAgICAgICBtaQorICAgICAgICBzdHJibWkgICAgICByMSwgW3IzXSwgIzEKKyAgICAgICAgaXR0ICAgICAgICAgY3MKKyAgICAgICAgc3RyYmNzICAgICAgcjEsIFtyM10sICMxCisgICAgICAgIHN0cmJjcyAgICAgIHIxLCBbcjNdCisyOgorICAgICAgICBieCAgICAgICAgICBscgorRU5EKG1lbXNldCkKKworICAgICAgICAuZGF0YQorZXJyb3Jfc3RyaW5nOgorICAgICAgICAuc3RyaW5nICAgICAibWVtc2V0OiBwcmV2ZW50ZWQgd3JpdGUgcGFzdCBlbmQgb2YgYnVmZmVyIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9kZW52ZXIvZGVudmVyLm1rIGIvbGliYy9hcmNoLWFybS9kZW52ZXIvZGVudmVyLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ODkxODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2RlbnZlci9kZW52ZXIubWsKQEAgLTAsMCArMSwxMyBAQAorbGliY19iaW9uaWNfc3JjX2ZpbGVzX2FybSArPSBcCisgICAgYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1jcHkuUyBcCisgICAgYXJjaC1hcm0vZGVudmVyL2Jpb25pYy9tZW1tb3ZlLlMgXAorICAgIGFyY2gtYXJtL2RlbnZlci9iaW9uaWMvbWVtc2V0LlMgXAorICAgIGFyY2gtYXJtL2RlbnZlci9iaW9uaWMvX19zdHJjYXRfY2hrLlMgXAorICAgIGFyY2gtYXJtL2RlbnZlci9iaW9uaWMvX19zdHJjcHlfY2hrLlMgXAorCisjIFVzZSBjb3J0ZXgtYTE1IHZlcnNpb25zIG9mIHN0cmNhdC9zdHJjcHkvc3RybGVuLgorbGliY19iaW9uaWNfc3JjX2ZpbGVzX2FybSArPSBcCisgICAgYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY2F0LlMgXAorICAgIGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNweS5TIFwKKyAgICBhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJsZW4uUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY21wLlMgXApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvbWVtY3B5LlMKaW5kZXggNjk5Yjg4ZC4uY2Q0YTEzZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1jcHkuUworKysgYi9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL21lbWNweS5TCkBAIC0yNyw4ICsyNyw4IEBACiAgKi8KIAogI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfZXZlbnRzLmgiCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9saWJjX2V2ZW50cy5oPgogCiAgICAgICAgIC8qCiAgICAgICAgICAqIE9wdGltaXplZCBtZW1jcHkoKSBmb3IgQVJNLgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUyBiL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvbWVtc2V0LlMKaW5kZXggYmFlYjUxOS4uYmUzNWRlOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUworKysgYi9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL21lbXNldC5TCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfZXZlbnRzLmgiCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9saWJjX2V2ZW50cy5oPgogCiAgICAgICAgIC8qCiAgICAgICAgICAqIE9wdGltaXplZCBtZW1zZXQoKSBmb3IgQVJNLgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJjbXAuUyBiL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvc3RyY21wLlMKaW5kZXggNDJkNDFkMS4uNmRiYTk0MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJjbXAuUworKysgYi9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmNtcC5TCkBAIC0yOCw3ICsyOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogCS50ZXh0CiAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvc3RyY3B5LlMgYi9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmNweS5TCmluZGV4IGNjOTk3ZjQuLjgwMmE2MmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvc3RyY3B5LlMKKysrIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJjcHkuUwpAQCAtMzAsNyArMzAsNyBAQAogICovCiAKICNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHN0cmNweSkKIAlwbGQJW3IxLCAjMF0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9nZW5lcmljLm1rIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2dlbmVyaWMubWsKaW5kZXggZTIzMDAwMy4uMjQ1NmU2ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9nZW5lcmljL2dlbmVyaWMubWsKKysrIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2dlbmVyaWMubWsKQEAgLTEsOCArMSwxMCBAQAotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxNRU1DUFksYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvbWVtY3B5LlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLE1FTVNFVCxhcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSQ0FULHN0cmluZy9zdHJjYXQuYykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSQ01QLGFyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmNtcC5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJDUFksYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvc3RyY3B5LlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkxFTixhcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJsZW4uYykKLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsX19TVFJDQVRfQ0hLLGJpb25pYy9fX3N0cmNhdF9jaGsuY3BwKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxfX1NUUkNQWV9DSEssYmlvbmljL19fc3RyY3B5X2Noay5jcHApCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfYXJtICs9IFwKKyAgICBhcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1jcHkuUyBcCisgICAgYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvbWVtc2V0LlMgXAorICAgIGFyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmNtcC5TIFwKKyAgICBhcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJjcHkuUyBcCisgICAgYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvc3RybGVuLmMgXAorICAgIGJpb25pYy9tZW1tb3ZlLmMgXAorICAgIGJpb25pYy9fX3N0cmNhdF9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19zdHJjcHlfY2hrLmNwcCBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY2F0LmMgXApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmggYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE4YjYxMC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKgkkT3BlbkJTRDogX3R5cGVzLmgsdiAxLjMgMjAwNi8wMi8xNCAxODoxMjo1OCBtaW9kIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKXR5cGVzLmgJOC4zIChCZXJrZWxleSkgMS81Lzk0Ci0gKglAKCMpYW5zaS5oCTguMiAoQmVya2VsZXkpIDEvNC85NAotICovCi0KLSNpZm5kZWYgX0FSTV9fVFlQRVNfSF8KLSNkZWZpbmUgX0FSTV9fVFlQRVNfSF8KLQotLyogNy4xOC4xLjEgRXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX3NpZ25lZCBjaGFyCQlfX2ludDhfdDsKLXR5cGVkZWYJdW5zaWduZWQgY2hhcgkJX191aW50OF90OwotdHlwZWRlZglzaG9ydAkJCV9faW50MTZfdDsKLXR5cGVkZWYJdW5zaWduZWQgc2hvcnQJCV9fdWludDE2X3Q7Ci10eXBlZGVmCWludAkJCV9faW50MzJfdDsKLXR5cGVkZWYJdW5zaWduZWQgaW50CQlfX3VpbnQzMl90OwotLyogTE9OR0xPTkcgKi8KLXR5cGVkZWYJbG9uZyBsb25nCQlfX2ludDY0X3Q7Ci0vKiBMT05HTE9ORyAqLwotdHlwZWRlZgl1bnNpZ25lZCBsb25nIGxvbmcJX191aW50NjRfdDsKLQotLyogNy4xOC4xLjIgTWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9faW50OF90CQlfX2ludF9sZWFzdDhfdDsKLXR5cGVkZWYJX191aW50OF90CQlfX3VpbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmCV9faW50MTZfdAkJX19pbnRfbGVhc3QxNl90OwotdHlwZWRlZglfX3VpbnQxNl90CQlfX3VpbnRfbGVhc3QxNl90OwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2xlYXN0MzJfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2xlYXN0MzJfdDsKLXR5cGVkZWYJX19pbnQ2NF90CQlfX2ludF9sZWFzdDY0X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludF9sZWFzdDY0X3Q7Ci0KLS8qIDcuMTguMS4zIEZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDhfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3Q4X3Q7Ci10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDE2X3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0MTZfdDsKLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0MzJfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3QzMl90OwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50X2Zhc3Q2NF90OwotdHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRfZmFzdDY0X3Q7Ci0KLS8qIDcuMTguMS40IEludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycyAqLwotdHlwZWRlZglpbnQgCQkJX19pbnRwdHJfdDsKLXR5cGVkZWYJdW5zaWduZWQgaW50IAkJX191aW50cHRyX3Q7Ci0KLS8qIDcuMTguMS41IEdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQ2NF90CQlfX2ludG1heF90OwotdHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRtYXhfdDsKLQotLyogUmVnaXN0ZXIgc2l6ZSAqLwotdHlwZWRlZiBfX2ludDMyX3QJCV9fcmVnaXN0ZXJfdDsKLQotLyogVk0gc3lzdGVtIHR5cGVzICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fdmFkZHJfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJX19wYWRkcl90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3ZzaXplX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fcHNpemVfdDsKLQotLyogU3RhbmRhcmQgc3lzdGVtIHR5cGVzICovCi10eXBlZGVmIGludAkJCV9fY2xvY2tfdDsKLXR5cGVkZWYgaW50CQkJX19jbG9ja2lkX3Q7Ci10eXBlZGVmIGRvdWJsZQkJCV9fZG91YmxlX3Q7Ci10eXBlZGVmIGZsb2F0CQkJX19mbG9hdF90OwotdHlwZWRlZiBsb25nCQkJX19wdHJkaWZmX3Q7Ci10eXBlZGVmCWludAkJCV9fdGltZV90OwotdHlwZWRlZiBpbnQJCQlfX3RpbWVyX3Q7Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwotdHlwZWRlZglfX2J1aWx0aW5fdmFfbGlzdAlfX3ZhX2xpc3Q7Ci0jZWxzZQotdHlwZWRlZgljaGFyICoJCQlfX3ZhX2xpc3Q7Ci0jZW5kaWYKLQotLyogV2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCB0eXBlcyAqLwotI2lmbmRlZiBfX2NwbHVzcGx1cwotdHlwZWRlZglpbnQJCQlfX3djaGFyX3Q7Ci0jZW5kaWYKLXR5cGVkZWYgaW50CQkJX193aW50X3Q7Ci10eXBlZGVmCWludAkJCV9fcnVuZV90OwotdHlwZWRlZgl2b2lkICoJCQlfX3djdHJhbnNfdDsKLXR5cGVkZWYJdm9pZCAqCQkJX193Y3R5cGVfdDsKLQotI2VuZGlmCS8qIF9BUk1fX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9hc20uaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2FzbS5oCmluZGV4IGYxNmJhZjguLjc5NTRmMDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2FzbS5oCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2FzbS5oCkBAIC0zOCwxMDcgKzM4LDIyIEBACiAjaWZuZGVmIF9BUk0zMl9BU01fSF8KICNkZWZpbmUgX0FSTTMyX0FTTV9IXwogCi0jaWZkZWYgX19FTEZfXwotIyBkZWZpbmUgX0NfTEFCRUwoeCkJeAotI2Vsc2UKLSMgaWZkZWYgX19TVERDX18KLSMgIGRlZmluZSBfQ19MQUJFTCh4KQlfICMjIHgKLSMgZWxzZQotIyAgZGVmaW5lIF9DX0xBQkVMKHgpCV8vKioveAotIyBlbmRpZgotI2VuZGlmCi0jZGVmaW5lCV9BU01fTEFCRUwoeCkJeAotCi0jaWZkZWYgX19TVERDX18KLSMgZGVmaW5lIF9fQ09OQ0FUKHgseSkJeCAjIyB5Ci0jIGRlZmluZSBfX1NUUklORyh4KQkjeAotI2Vsc2UKLSMgZGVmaW5lIF9fQ09OQ0FUKHgseSkJeC8qKi95Ci0jIGRlZmluZSBfX1NUUklORyh4KQkieCIKLSNlbmRpZgotCiAjaWZuZGVmIF9BTElHTl9URVhUCiAjIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gMAogI2VuZGlmCiAKLS8qCi0gKiBnYXMvYXJtIHVzZXMgQCBhcyBhIHNpbmdsZSBjb21tZW50IGNoYXJhY3RlciBhbmQgdGh1cyBjYW5ub3QgYmUgdXNlZCBoZXJlCi0gKiBJbnN0ZWFkIGl0IHJlY29nbmlzZWQgdGhlICMgaW5zdGVhZCBvZiBhbiBAIHN5bWJvbHMgaW4gLnR5cGUgZGlyZWN0aXZlcwotICogV2UgZGVmaW5lIGEgY291cGxlIG9mIG1hY3JvcyBzbyB0aGF0IGFzc2VtYmx5IGNvZGUgd2lsbCBub3QgYmUgZGVwZW5kYW50Ci0gKiBvbiBvbmUgb3IgdGhlIG90aGVyLgotICovCi0jZGVmaW5lIF9BU01fVFlQRV9GVU5DVElPTgkjZnVuY3Rpb24KLSNkZWZpbmUgX0FTTV9UWVBFX09CSkVDVAkjb2JqZWN0Ci0jZGVmaW5lIF9FTlRSWSh4KSBcCi0JLnRleHQ7IF9BTElHTl9URVhUOyAuZ2xvYmwgeDsgLnR5cGUgeCxfQVNNX1RZUEVfRlVOQ1RJT047IHg6IC5mbnN0YXJ0OyAuY2ZpX3N0YXJ0cHJvYzsKKyN1bmRlZiBfX2Jpb25pY19hc21fY3VzdG9tX2VudHJ5CisjdW5kZWYgX19iaW9uaWNfYXNtX2N1c3RvbV9lbmQKKyNkZWZpbmUgX19iaW9uaWNfYXNtX2N1c3RvbV9lbnRyeShmKSAuZm5zdGFydAorI2RlZmluZSBfX2Jpb25pY19hc21fY3VzdG9tX2VuZChmKSAuZm5lbmQKIAotI2RlZmluZSBfQVNNX1NJWkUoeCkJLnNpemUgeCwgLi14OwotCi0jZGVmaW5lIF9FTkQoeCkgXAotCS5mbmVuZDsgLmNmaV9lbmRwcm9jOyBcCi0JX0FTTV9TSVpFKHgpCi0KLSNpZmRlZiBHUFJPRgotIyBpZmRlZiBfX0VMRl9fCi0jICBkZWZpbmUgX1BST0ZfUFJPTE9HVUUJXAotCW1vdiBpcCwgbHI7IGJsIF9fbWNvdW50Ci0jIGVsc2UKLSMgIGRlZmluZSBfUFJPRl9QUk9MT0dVRQlcCi0JbW92IGlwLGxyOyBibCBtY291bnQKLSMgZW5kaWYKLSNlbHNlCi0jIGRlZmluZSBfUFJPRl9QUk9MT0dVRQotI2VuZGlmCi0KLSNkZWZpbmUJRU5UUlkoeSkJX0VOVFJZKF9DX0xBQkVMKHkpKTsgX1BST0ZfUFJPTE9HVUUKLSNkZWZpbmUJRU5UUllfTlAoeSkJX0VOVFJZKF9DX0xBQkVMKHkpKQotI2RlZmluZQlFTkQoeSkJCV9FTkQoX0NfTEFCRUwoeSkpCi0jZGVmaW5lCUFTRU5UUlkoeSkJX0VOVFJZKF9BU01fTEFCRUwoeSkpOyBfUFJPRl9QUk9MT0dVRQotI2RlZmluZQlBU0VOVFJZX05QKHkpCV9FTlRSWShfQVNNX0xBQkVMKHkpKQotI2RlZmluZQlBU0VORCh5KQlfRU5EKF9BU01fTEFCRUwoeSkpCi0KLSNpZmRlZiBfX0VMRl9fCi0jZGVmaW5lIEVOVFJZX1BSSVZBVEUoeSkgIEVOVFJZKHkpOyAuaGlkZGVuIF9DX0xBQkVMKHkpCi0jZWxzZQotI2RlZmluZSBFTlRSWV9QUklWQVRFKHkpICBFTlRSWSh5KQotI2VuZGlmCi0KLSNkZWZpbmUJQVNNU1RSCQkuYXNjaXoKKyN1bmRlZiBfX2Jpb25pY19hc21fZnVuY3Rpb25fdHlwZQorI2RlZmluZSBfX2Jpb25pY19hc21fZnVuY3Rpb25fdHlwZSAjZnVuY3Rpb24KIAogI2lmIGRlZmluZWQoX19FTEZfXykgJiYgZGVmaW5lZChQSUMpCi0jaWZkZWYgX19TVERDX18KLSNkZWZpbmUJUElDX1NZTSh4LHkpCXggIyMgKCAjIyB5ICMjICkKKyNkZWZpbmUgUElDX1NZTSh4LHkpIHggIyMgKCAjIyB5ICMjICkKICNlbHNlCi0jZGVmaW5lCVBJQ19TWU0oeCx5KQl4LyoqLygvKioveS8qKi8pCisjZGVmaW5lIFBJQ19TWU0oeCx5KSB4CiAjZW5kaWYKLSNlbHNlCi0jZGVmaW5lCVBJQ19TWU0oeCx5KQl4Ci0jZW5kaWYKLQotI2lmZGVmIF9fRUxGX18KLSNkZWZpbmUgUkNTSUQoeCkJLnNlY3Rpb24gIi5pZGVudCI7IC5hc2NpeiB4Ci0jZWxzZQotI2RlZmluZSBSQ1NJRCh4KQkudGV4dDsgLmFzY2l6IHgKLSNlbmRpZgotCi0jaWZkZWYgX19FTEZfXwotI2RlZmluZQlXRUFLX0FMSUFTKGFsaWFzLHN5bSkJCQkJCQlcCi0JLndlYWsgYWxpYXM7CQkJCQkJCVwKLQlhbGlhcyA9IHN5bQotI2VuZGlmCi0KLSNpZmRlZiBfX1NURENfXwotI2RlZmluZQlXQVJOX1JFRkVSRU5DRVMoc3ltLG1zZykJCQkJCVwKLQkuc3RhYnMgbXNnICMjICwzMCwwLDAsMCA7CQkJCQlcCi0JLnN0YWJzIF9fU1RSSU5HKF9DX0xBQkVMKHN5bSkpICMjICwxLDAsMCwwCi0jZWxpZiBkZWZpbmVkKF9fRUxGX18pCi0jZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAotCS5zdGFicyBtc2csMzAsMCwwLDAgOwkJCQkJCVwKLQkuc3RhYnMgX19TVFJJTkcoc3ltKSwxLDAsMCwwCi0jZWxzZQotI2RlZmluZQlXQVJOX1JFRkVSRU5DRVMoc3ltLG1zZykJCQkJCVwKLQkuc3RhYnMgbXNnLDMwLDAsMCwwIDsJCQkJCQlcCi0JLnN0YWJzIF9fU1RSSU5HKF8vKiovc3ltKSwxLDAsMCwwCi0jZW5kaWYgLyogX19TVERDX18gKi8KIAogI2VuZGlmIC8qICFfQVJNX0FTTV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjliODllLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2llZWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKgkkT3BlbkJTRDogaWVlZS5oLHYgMS4xIDIwMDQvMDIvMDEgMDU6MDk6NDkgZHJhaG4gRXhwICQJKi8KLS8qCSROZXRCU0Q6IGllZWUuaCx2IDEuMiAyMDAxLzAyLzIxIDE3OjQzOjUwIGJqaDIxIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSB0aGUgQ29tcHV0ZXIgU3lzdGVtcyBFbmdpbmVlcmluZyBncm91cAotICogYXQgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSB1bmRlciBEQVJQQSBjb250cmFjdCBCRyA5MS02NiBhbmQKLSAqIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5LgotICoKLSAqIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICoJQ2FsaWZvcm5pYSwgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIylpZWVlLmgJOC4xIChCZXJrZWxleSkgNi8xMS85MwotICovCi0KLS8qCi0gKiBpZWVlLmggZGVmaW5lcyB0aGUgbWFjaGluZS1kZXBlbmRlbnQgbGF5b3V0IG9mIHRoZSBtYWNoaW5lJ3MgSUVFRQotICogZmxvYXRpbmcgcG9pbnQuCi0gKi8KLQotLyoKLSAqIERlZmluZSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBmcmFjdGlvbiBhbmQgZXhwb25lbnQuCi0gKgotICoJCSAgICAgawkgICAgICAgICBrKzEKLSAqIE5vdGUgdGhhdCAgMS4wIHggMiAgPT0gMC4xIHggMiAgICAgIGFuZCB0aGF0IGRlbm9ybXMgYXJlIHJlcHJlc2VudGVkCi0gKgotICoJCQkJCSAgKC1leHBfYmlhcysxKQotICogYXMgZnJhY3Rpb25zIHRoYXQgbG9vayBsaWtlIDAuZmZmZmYgeCAyICAgICAgICAgICAgIC4gIFRoaXMgbWVhbnMgdGhhdAotICoKLSAqCQkJIC0xMjYKLSAqIHRoZSBudW1iZXIgMC4xMDAwMCB4IDIgICAgLCBmb3IgaW5zdGFuY2UsIGlzIHRoZSBzYW1lIGFzIHRoZSBub3JtYWxpemVkCi0gKgotICoJCS0xMjcJCQkgICAtMTI4Ci0gKiBmbG9hdCAxLjAgeCAyICAgIC4gIFRodXMsIHRvIHJlcHJlc2VudCAyICAgICwgd2UgbmVlZCBvbmUgbGVhZGluZyB6ZXJvCi0gKgotICoJCQkJICAtMTI5Ci0gKiBpbiB0aGUgZnJhY3Rpb247IHRvIHJlcHJlc2VudCAyICAgICwgd2UgbmVlZCB0d28sIGFuZCBzbyBvbi4gIFRoaXMKLSAqCi0gKgkJCQkJCSAgICAgKC1leHBfYmlhcy1mcmFjYml0cysxKQotICogaW1wbGllcyB0aGF0IHRoZSBzbWFsbGVzdCBkZW5vcm1hbGl6ZWQgbnVtYmVyIGlzIDIKLSAqCi0gKiBmb3Igd2hpY2hldmVyIGZvcm1hdCB3ZSBhcmUgdGFsa2luZyBhYm91dDogZm9yIHNpbmdsZSBwcmVjaXNpb24sIGZvcgotICoKLSAqCQkJCQkJLTEyNgkJLTE0OQotICogaW5zdGFuY2UsIHdlIGdldCAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgeCAyICAgICwgb3IgMS4wIHggMiAgICAsIGFuZAotICoKLSAqIC0xNDkgPT0gLTEyNyAtIDIzICsgMS4KLSAqLwotCi0vKgotICogVGhlIEFSTSBoYXMgdHdvIHNldHMgb2YgRlAgZGF0YSBmb3JtYXRzLiAgVGhlIEZQQSBzdXBwb3J0cyAzMi1iaXQsIDY0LWJpdAotICogYW5kIDk2LWJpdCBJRUVFIGZvcm1hdHMsIHdpdGggdGhlIHdvcmRzIGluIGJpZy1lbmRpYW4gb3JkZXIuICBWRlAgc3VwcG9ydHMKLSAqIDMyLWJpbiBhbmQgNjQtYml0IElFRUUgZm9ybWF0cyB3aXRoIHRoZSB3b3JkcyBpbiB0aGUgQ1BVJ3MgbmF0aXZlIGJ5dGUKLSAqIG9yZGVyLgotICoKLSAqIFRoZSBGUEEgYWxzbyBoYXMgdHdvIHBhY2tlZCBkZWNpbWFsIGZvcm1hdHMsIGJ1dCB3ZSBpZ25vcmUgdGhlbSBoZXJlLgotICovCi0KLSNkZWZpbmUJU05HX0VYUEJJVFMJOAotI2RlZmluZQlTTkdfRlJBQ0JJVFMJMjMKLQotI2RlZmluZQlEQkxfRVhQQklUUwkxMQotI2RlZmluZQlEQkxfRlJBQ0JJVFMJNTIKLQotI2lmbmRlZiBfX1ZGUF9GUF9fCi0jZGVmaW5lCUU4MF9FWFBCSVRTCTE1Ci0jZGVmaW5lCUU4MF9GUkFDQklUUwk2NAotCi0jZGVmaW5lCUVYVF9FWFBCSVRTCTE1Ci0jZGVmaW5lCUVYVF9GUkFDQklUUwkxMTIKLSNlbmRpZgotCi1zdHJ1Y3QgaWVlZV9zaW5nbGUgewotCXVfaW50CXNuZ19mcmFjOjIzOwotCXVfaW50CXNuZ19leHBvbmVudDo4OwotCXVfaW50CXNuZ19zaWduOjE7Ci19OwotCi0jaWZkZWYgX19WRlBfRlBfXwotc3RydWN0IGllZWVfZG91YmxlIHsKLSNpZmRlZiBfX0FSTUVCX18KLQl1X2ludAlkYmxfc2lnbjoxOwotCXVfaW50CWRibF9leHA6MTE7Ci0JdV9pbnQJZGJsX2ZyYWNoOjIwOwotCXVfaW50CWRibF9mcmFjbDsKLSNlbHNlIC8qICFfX0FSTUVCX18gKi8KLQl1X2ludAlkYmxfZnJhY2w7Ci0JdV9pbnQJZGJsX2ZyYWNoOjIwOwotCXVfaW50CWRibF9leHA6MTE7Ci0JdV9pbnQJZGJsX3NpZ246MTsKLSNlbmRpZiAvKiAhX19BUk1FQl9fICovCi19OwotI2Vsc2UgLyogIV9fVkZQX0ZQX18gKi8KLXN0cnVjdCBpZWVlX2RvdWJsZSB7Ci0JdV9pbnQJZGJsX2ZyYWNoOjIwOwotCXVfaW50CWRibF9leHA6MTE7Ci0JdV9pbnQJZGJsX3NpZ246MTsKLQl1X2ludAlkYmxfZnJhY2w7Ci19OwotCi11bmlvbiBpZWVlX2RvdWJsZV91IHsKLQlkb3VibGUgICAgICAgICAgICAgICAgICBkYmx1X2Q7Ci0Jc3RydWN0IGllZWVfZG91YmxlICAgICAgZGJsdV9kYmw7Ci19OwotCi0KLXN0cnVjdCBpZWVlX2U4MCB7Ci0JdV9pbnQJZTgwX2V4cDoxNTsKLQl1X2ludAllODBfemVybzoxNjsKLQl1X2ludAllODBfc2lnbjoxOwotCXVfaW50CWU4MF9mcmFjaDozMTsKLQl1X2ludAllODBfajoxOwotCXVfaW50CWU4MF9mcmFjbDsKLX07Ci0KLXN0cnVjdCBpZWVlX2V4dCB7Ci0JdV9pbnQJZXh0X2ZyYWNoOjE2OwotCXVfaW50CWV4dF9leHA6MTU7Ci0JdV9pbnQJZXh0X3NpZ246MTsKLQl1X2ludAlleHRfZnJhY2htOwotCXVfaW50CWV4dF9mcmFjbG07Ci0JdV9pbnQJZXh0X2ZyYWNsOwotfTsKLSNlbmRpZiAvKiAhX19WRlBfRlBfXyAqLwotCi0vKgotICogRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIGluIFsxLi5JTkZOQU4pIChvZiB3aGF0ZXZlciB0eXBlKSBhcmUKLSAqIGBub3JtYWwnLiAgRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIElORk5BTiBhcmUgZWl0aGVyIEluZiBvciBOYU4uCi0gKiBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgemVybyBhcmUgZWl0aGVyIHplcm8gKGlmZiBhbGwgZnJhY3Rpb24KLSAqIGJpdHMgYXJlIHplcm8pIG9yIHN1Ym5vcm1hbCB2YWx1ZXMuCi0gKgotICogQSBOYU4gaXMgYSBgc2lnbmFsbGluZyBOYU4nIGlmIGl0cyBRVUlFVE5BTiBiaXQgaXMgY2xlYXIgaW4gaXRzCi0gKiBoaWdoIGZyYWN0aW9uOyBpZiB0aGUgYml0IGlzIHNldCwgaXQgaXMgYSBgcXVpZXQgTmFOJy4KLSAqLwotI2RlZmluZQlTTkdfRVhQX0lORk5BTgkyNTUKLSNkZWZpbmUJREJMX0VYUF9JTkZOQU4JMjA0NwotI2lmbmRlZiBfX1ZGUF9GUF9fCi0jZGVmaW5lCUU4MF9FWFBfSU5GTkFOCTMyNzY3Ci0jZGVmaW5lCUVYVF9FWFBfSU5GTkFOCTMyNzY3Ci0jZW5kaWYgLyogIV9fVkZQX0ZQX18gKi8KLQotI2lmIDAKLSNkZWZpbmUJU05HX1FVSUVUTkFOCSgxIDw8IDIyKQotI2RlZmluZQlEQkxfUVVJRVROQU4JKDEgPDwgMTkpCi0jaWZuZGVmIF9fVkZQX0ZQX18KLSNkZWZpbmUJRTgwX1FVSUVUTkFOCSgxIDw8IDE1KQotI2RlZmluZQlFWFRfUVVJRVROQU4JKDEgPDwgMTUpCi0jZW5kaWYgLyogIV9fVkZQX0ZQX18gKi8KLSNlbmRpZgotCi0vKgotICogRXhwb25lbnQgYmlhc2VzLgotICovCi0jZGVmaW5lCVNOR19FWFBfQklBUwkxMjcKLSNkZWZpbmUJREJMX0VYUF9CSUFTCTEwMjMKLSNpZm5kZWYgX19WRlBfRlBfXwotI2RlZmluZQlFODBfRVhQX0JJQVMJMTYzODMKLSNkZWZpbmUJRVhUX0VYUF9CSUFTCTE2MzgzCi0jZW5kaWYgLyogIV9fVkZQX0ZQX18gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YzA0ZmEuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgkkT3BlbkJTRDogbGltaXRzLmgsdiAxLjMgMjAwNi8wMS8wNiAyMjo0ODo0NiBtaWxsZXJ0IEV4cCAkCSovCi0vKgkkTmV0QlNEOiBsaW1pdHMuaCx2IDEuNCAyMDAzLzA0LzI4IDIzOjE2OjE4IGJqaDIxIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODggVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCWZyb206IEAoIylsaW1pdHMuaAk3LjIgKEJlcmtlbGV5KSA2LzI4LzkwCi0gKi8KLQotI2lmbmRlZglfQVJNMzJfTElNSVRTX0hfCi0jZGVmaW5lCV9BUk0zMl9MSU1JVFNfSF8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotCi0jZGVmaW5lCU1CX0xFTl9NQVgJMQkJLyogbm8gbXVsdGlieXRlIGNoYXJhY3RlcnMgKi8KLQotI2lmbmRlZglTSVpFX01BWAotI2RlZmluZQlTSVpFX01BWAlVSU5UX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90ICovCi0jZW5kaWYKLSNpZm5kZWYgU1NJWkVfTUFYCi0jZGVmaW5lCVNTSVpFX01BWAlJTlRfTUFYCQkvKiBtYXggdmFsdWUgZm9yIGEgc3NpemVfdCAqLwotI2VuZGlmCi0KLSNpZiBfX0JTRF9WSVNJQkxFCi0jZGVmaW5lCVNJWkVfVF9NQVgJVUlOVF9NQVgJLyogbWF4IHZhbHVlIGZvciBhIHNpemVfdCAoaGlzdG9yaWMpICovCi0KLSNkZWZpbmUJVVFVQURfTUFYCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTAkJLyogbWF4IHVuc2lnbmVkIHF1YWQgKi8KLSNkZWZpbmUJUVVBRF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmTEwJCS8qIG1heCBzaWduZWQgcXVhZCAqLwotI2RlZmluZQlRVUFEX01JTgkoLTB4N2ZmZmZmZmZmZmZmZmZmZkxMLTEpCS8qIG1pbiBzaWduZWQgcXVhZCAqLwotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi0jZGVmaW5lIExPTkdMT05HX0JJVCAgICA2NAotI2RlZmluZSBMT05HTE9OR19NSU4gICAgKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwtMSkKLSNkZWZpbmUgTE9OR0xPTkdfTUFYICAgIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTAotI2RlZmluZSBVTE9OR0xPTkdfTUFYICAgMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwKLQotI2VuZGlmCS8qIF9BUk0zMl9MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL19fc3RyY2F0X2Noay5TIGIvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvX19zdHJjYXRfY2hrLlMKaW5kZXggYTVkMDZmMy4uMzRiZWNkYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvX19zdHJjYXRfY2hrLlMKKysrIGIvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvX19zdHJjYXRfY2hrLlMKQEAgLTI2LDggKzI2LDggQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgInByaXZhdGUvbGliY19ldmVudHMuaCIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CiAKICAgICAuc3ludGF4IHVuaWZpZWQKIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvX19zdHJjcHlfY2hrLlMgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9fX3N0cmNweV9jaGsuUwppbmRleCA5NWFhZjRmLi5jM2UzZTE0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9fX3N0cmNweV9jaGsuUworKysgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9fX3N0cmNweV9jaGsuUwpAQCAtMjYsOCArMjYsOCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2V2ZW50cy5oIgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19ldmVudHMuaD4KIAogICAgIC5zeW50YXggdW5pZmllZAogCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL21lbWNweS5TCmluZGV4IDU0NDA1ZmEuLjBiN2IyNzYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL21lbWNweS5TCisrKyBiL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL21lbWNweS5TCkBAIC0yOCw4ICsyOCw4IEBACiAKIC8qIEFzc3VtZXMgbmVvbiBpbnN0cnVjdGlvbnMgYW5kIGEgY2FjaGUgbGluZSBzaXplIG9mIDMyIGJ5dGVzLiAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfZXZlbnRzLmgiCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9saWJjX2V2ZW50cy5oPgogCiAvKgogICogVGhpcyBjb2RlIGFzc3VtZXMgaXQgaXMgcnVubmluZyBvbiBhIHByb2Nlc3NvciB0aGF0IHN1cHBvcnRzIGFsbCBhcm0gdjcKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL21lbXNldC5TIGIvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtc2V0LlMKaW5kZXggMTU2MzMyNy4uNWQxOTQzYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtc2V0LlMKKysrIGIvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtc2V0LlMKQEAgLTI3LDggKzI3LDggQEAKICAqLwogCiAjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgInByaXZhdGUvbGliY19ldmVudHMuaCIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfZXZlbnRzLmg+CiAKIC8qCiAgKiBUaGlzIGNvZGUgYXNzdW1lcyBpdCBpcyBydW5uaW5nIG9uIGEgcHJvY2Vzc29yIHRoYXQgc3VwcG9ydHMgYWxsIGFybSB2NwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvc3RyY21wLlMgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9zdHJjbXAuUwppbmRleCBmNzM1ZmI1Li5lYWNiODJhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9zdHJjbXAuUworKysgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9zdHJjbXAuUwpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKICNpZmRlZiBfX0FSTUVCX18KICNkZWZpbmUgUzJMT01FTSBsc2wKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0va3JhaXQva3JhaXQubWsgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2tyYWl0Lm1rCmluZGV4IDI5YWI3NDMuLjYzMWFiNjggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0va3JhaXQva3JhaXQubWsKKysrIGIvbGliYy9hcmNoLWFybS9rcmFpdC9rcmFpdC5tawpAQCAtMSwxMSArMSwxMyBAQAotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxNRU1DUFksYXJjaC1hcm0va3JhaXQvYmlvbmljL21lbWNweS5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxNRU1TRVQsYXJjaC1hcm0va3JhaXQvYmlvbmljL21lbXNldC5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJDTVAsYXJjaC1hcm0va3JhaXQvYmlvbmljL3N0cmNtcC5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxfX1NUUkNBVF9DSEssYXJjaC1hcm0va3JhaXQvYmlvbmljL19fc3RyY2F0X2Noay5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxfX1NUUkNQWV9DSEssYXJjaC1hcm0va3JhaXQvYmlvbmljL19fc3RyY3B5X2Noay5TKQotIyBVc2UgY29ydGV4LWExNSB2ZXJzaW9ucyBvZiBzdHJjYXQvc3RyY3B5L3N0cmxlbi4KLSQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSQ0FULGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNhdC5TKQotJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJDUFksYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY3B5LlMpCi0kKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkxFTixhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJsZW4uUykKK2xpYmNfYmlvbmljX3NyY19maWxlc19hcm0gKz0gXAorICAgIGFyY2gtYXJtL2tyYWl0L2Jpb25pYy9tZW1jcHkuUyBcCisgICAgYXJjaC1hcm0va3JhaXQvYmlvbmljL21lbXNldC5TIFwKKyAgICBhcmNoLWFybS9rcmFpdC9iaW9uaWMvc3RyY21wLlMgXAorICAgIGFyY2gtYXJtL2tyYWl0L2Jpb25pYy9fX3N0cmNhdF9jaGsuUyBcCisgICAgYXJjaC1hcm0va3JhaXQvYmlvbmljL19fc3RyY3B5X2Noay5TIFwKIAotaW5jbHVkZSBiaW9uaWMvbGliYy9hcmNoLWFybS9nZW5lcmljL2dlbmVyaWMubWsKKyMgVXNlIGNvcnRleC1hMTUgdmVyc2lvbnMgb2Ygc3RyY2F0L3N0cmNweS9zdHJsZW4gYW5kIHN0YW5kYXJkIG1lbW1vdmUKK2xpYmNfYmlvbmljX3NyY19maWxlc19hcm0gKz0gXAorICAgIGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNhdC5TIFwKKyAgICBhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjcHkuUyBcCisgICAgYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RybGVuLlMgXAorICAgIGJpb25pYy9tZW1tb3ZlLmMgXApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy5tayBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZTZhOTcuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy5taworKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0jIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuCi1zeXNjYWxsX3NyYyA6PQotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19icmsuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX2V4aXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bDY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fZnN0YXRmczY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3B1LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3dkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX2xsc2Vlay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX21tYXAyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fb3BlbmF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fcHBvbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19wc2VsZWN0Ni5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3B0cmFjZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3JlYm9vdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3NldF90bHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zaWdhY3Rpb24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zdGF0ZnM2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3N5c2xvZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3dhaXRpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fZXhpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9hY2NlcHQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvYWNjdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9iaW5kLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2NhY2hlZmx1c2guUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2FwZ2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2NhcHNldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jaGRpci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jaHJvb3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2xvc2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY29ubmVjdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2R1cC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9kdXAzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2V2ZW50ZmQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZXhlY3ZlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mY2hkaXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mY2hvd25hdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mZGF0YXN5bmMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZmdldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZmxvY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZzZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mc3RhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mc3RhdGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZzeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mdXRleC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRkZW50cy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRlZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGV1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGdyb3Vwcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRpdGltZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRwaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cHBpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRyZXNnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzdWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHJsaW1pdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRydXNhZ2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tvcHQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXR1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2lvcHJpb19nZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvaW9wcmlvX3NldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9raWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2tsb2djdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbGdldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2xpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9saXN0ZW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2xsaXN0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2xzZWVrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2xzZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tYWR2aXNlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21pbmNvcmUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9ta25vZGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21sb2NrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21sb2NrYWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21vdW50LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21wcm90ZWN0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21yZW1hcC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tdW5sb2NrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL211bmxvY2thbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbXVubWFwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL25hbm9zbGVlcC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcGVyc29uYWxpdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcGlwZTIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcHJjdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcHJlYWQ2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9wcmxpbWl0NjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcHdyaXRlNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcmVhZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9yZWFkYWhlYWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcmVhZGxpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9yZWFkdi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9yZWN2ZnJvbS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9yZWN2bXNnLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZWF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zY2hlZF95aWVsZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZW5kZmlsZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZW5kZmlsZTY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NlbmRtc2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2VuZHRvLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRncm91cHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0aXRpbWVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldG5zLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHBnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHJlc3VpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRyZXVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRybGltaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0c2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHNvY2tvcHQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zaHV0ZG93bi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zaWdhbHRzdGFjay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zaWduYWxmZDQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NvY2tldHBhaXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9mZi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zd2Fwb24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc3ltbGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3N5bmMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc3lzaW5mby5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy90Z2tpbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy90aW1lcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy90a2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZTY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3VtYXNrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3Vtb3VudDIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdW5hbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdW5saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdW5zaGFyZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy91dGltZW5zYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdmZvcmsuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvd2FpdDQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGV2LlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19hY2NlcHQ0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fYWNjZXB0NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYTU2OTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fYWNjZXB0NC5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19hY2NlcHQ0KQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfYWNjZXB0NAorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQoX19hY2NlcHQ0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2FybV9mYWR2aXNlNjRfNjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19hcm1fZmFkdmlzZTY0XzY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxYzRkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19hcm1fZmFkdmlzZTY0XzY0LlMKQEAgLTAsMCArMSwyMiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2FybV9mYWR2aXNlNjRfNjQpCisgICAgbW92ICAgICBpcCwgc3AKKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjUsIDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjYsIDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjcsIDEyCisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfYXJtX2ZhZHZpc2U2NF82NAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQoX19hcm1fZmFkdmlzZTY0XzY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Jyay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Jyay5TCmluZGV4IDMxZGUwZDIuLmJlMzA0ZGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19icmsuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fYnJrLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX2JyaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19jb25uZWN0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fY29ubmVjdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYTk5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fY29ubmVjdC5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19jb25uZWN0KQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfY29ubmVjdAorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQoX19jb25uZWN0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwppbmRleCBhOTAyNTRhLi4zNjQyZWUzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkoX19lcG9sbF9wd2FpdCkKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fZXBvbGxfcHdhaXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZXhpdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2V4aXQuUwppbmRleCBjNTM0YmIwLi42ZWJkNWIzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZXhpdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19leGl0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX2V4aXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGw2NC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZjbnRsNjQuUwppbmRleCAyMTMyY2I3Li4yMjljNWM2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGw2NC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bDY0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX2ZjbnRsNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZnN0YXRmczY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZnN0YXRmczY0LlMKaW5kZXggMTg5NDJiYy4uOWMwYzQzOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mc3RhdGZzNjQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fZnN0YXRmczY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGNwdS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGNwdS5TCmluZGV4IDFhZWE1MGEuLmQ1MjNkOGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjcHUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3B1LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX2dldGNwdSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjd2QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjd2QuUwppbmRleCAxYzJhYzZjLi40ZmY2NjY3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3dkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGN3ZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19nZXRjd2QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGRlbnRzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWMzYmZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGRlbnRzNjQuUwpAQCAtMCwwICsxLDE0IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZ2V0ZGVudHM2NCkKKyAgICBtb3YgICAgIGlwLCByNworICAgIGxkciAgICAgcjcsID1fX05SX2dldGRlbnRzNjQKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAorRU5EKF9fZ2V0ZGVudHM2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmIxOTJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldHBpZC5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXRwaWQpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRwaWQKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAorRU5EKF9fZ2V0cGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwppbmRleCA5MGNjYWVhLi5lNjM3ZDZmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fZ2V0cHJpb3JpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19faW9jdGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TCmluZGV4IDNmODE2ZGIuLmZjZDExNTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19pb2N0bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19sbHNlZWsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19sbHNlZWsuUwppbmRleCAxYTNlNGM3Li4zY2ZmMzE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fbGxzZWVrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2xsc2Vlay5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShfX2xsc2VlaykKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fbGxzZWVrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX21tYXAyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fbW1hcDIuUwppbmRleCA3ZDk4OWU5Li5mMTFlNDY3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fbW1hcDIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fbW1hcDIuUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkoX19tbWFwMikKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fbW1hcDIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fb3BlbmF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fb3BlbmF0LlMKaW5kZXggN2EzOGRjMy4uOWI3NzRkYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX29wZW5hdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19vcGVuYXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fb3BlbmF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3Bwb2xsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHBvbGwuUwppbmRleCA3Y2RiZTUxLi4wMmRlOGE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHBvbGwuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHBvbGwuUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkoX19wcG9sbCkKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fcHBvbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHNlbGVjdDYuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wc2VsZWN0Ni5TCmluZGV4IDRjNWI1MTMuLjhmMzFlMWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wc2VsZWN0Ni5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wc2VsZWN0Ni5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShfX3BzZWxlY3Q2KQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19wc2VsZWN0NikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wdHJhY2UuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wdHJhY2UuUwppbmRleCA0ZTQxZDlkLi45NzVhYjBmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHRyYWNlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3B0cmFjZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19wdHJhY2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcmVib290LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcmVib290LlMKaW5kZXggMThlMjlhNy4uMDNmOGM4OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3JlYm9vdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19yZWJvb3QuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fcmVib290KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCmluZGV4IDk3NGMwZTIuLjJjMjEwMTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX3J0X3NpZ2FjdGlvbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCmluZGV4IDRhMGY1ZDcuLjZhMzJlNTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fcnRfc2lncGVuZGluZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKaW5kZXggMTlhYmRjMS4uMTM2ZGM3OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX3J0X3NpZ3Byb2NtYXNrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKaW5kZXggYTBhZjkwNS4uMmNlZjRhNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19ydF9zaWdzdXNwZW5kKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCmluZGV4IDBiYTdjZTIuLmNiNDNhZDEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX3J0X3NpZ3RpbWVkd2FpdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKaW5kZXggZTk3N2NmYi4uNjYxM2VhNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX3NjaGVkX2dldGFmZmluaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCmluZGV4IGI0YjQyZTcuLmQzNTU4ZjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX3NldF90aWRfYWRkcmVzcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRfdGxzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2V0X3Rscy5TCmluZGV4IDk0YzdjZjQuLjRkNWQ5NjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRfdGxzLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldF90bHMuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fc2V0X3RscykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zaWdhY3Rpb24uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zaWdhY3Rpb24uUwppbmRleCA3ZTJlMDdlLi42MDA1OTNkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2lnYWN0aW9uLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NpZ2FjdGlvbi5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoX19zaWdhY3Rpb24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2lnbmFsZmQ0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2lnbmFsZmQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMwYTcxZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zaWduYWxmZDQuUwpAQCAtMCwwICsxLDE0IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fc2lnbmFsZmQ0KQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfc2lnbmFsZmQ0CisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORChfX3NpZ25hbGZkNCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zb2NrZXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zb2NrZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmZlMGNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NvY2tldC5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19zb2NrZXQpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9zb2NrZXQKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAorRU5EKF9fc29ja2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3N0YXRmczY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3RhdGZzNjQuUwppbmRleCAyNTYzNTYyLi5lYzQzMjE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3RhdGZzNjQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3RhdGZzNjQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fc3RhdGZzNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3lzbG9nLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3lzbG9nLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZTc2MWEuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3N5c2xvZy5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShfX3N5c2xvZykKLSAgICBtb3YgICAgIGlwLCByNwotICAgIGxkciAgICAgcjcsID1fX05SX3N5c2xvZwotICAgIHN3aSAgICAgIzAKLSAgICBtb3YgICAgIHI3LCBpcAotICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBieGxzICAgIGxyCi0gICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCi1FTkQoX19zeXNsb2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKaW5kZXggOWI3NTc0OS4uMmU0YzYzNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fdGltZXJfY3JlYXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCmluZGV4IGRiMzJiM2IuLjIzNzAyNGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfX3RpbWVyX2RlbGV0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCmluZGV4IDU3MDFiMTIuLmYyOWQ1YjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fdGltZXJfZ2V0b3ZlcnJ1bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCmluZGV4IGU5YTRmZjkuLmU2ZGMyZWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fdGltZXJfZ2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCmluZGV4IDJmMWFiMTkuLjRhZWEyNzkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fdGltZXJfc2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX193YWl0aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX193YWl0aWQuUwppbmRleCBhZDlhZDE2Li5mNGRmYTU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fd2FpdGlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3dhaXRpZC5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShfX3dhaXRpZCkKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKF9fd2FpdGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fZXhpdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fZXhpdC5TCmluZGV4IDFhNmIzNWQuLjMyOGE1Y2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX2V4aXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19leGl0LlMKQEAgLTEwLDUgKzEwLDggQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChfZXhpdCkKKworICAgIC5nbG9ibCBfRXhpdAorICAgIC5lcXUgX0V4aXQsIF9leGl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY2VwdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2NlcHQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJhNTFmNS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY2VwdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShhY2NlcHQpCi0gICAgbW92ICAgICBpcCwgcjcKLSAgICBsZHIgICAgIHI3LCA9X19OUl9hY2NlcHQKLSAgICBzd2kgICAgICMwCi0gICAgbW92ICAgICByNywgaXAKLSAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgYnhscyAgICBscgotICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubwotRU5EKGFjY2VwdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2N0LlMKaW5kZXggZTM2MGM1YS4uZGJjNWQ1OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2N0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2N0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChhY2N0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9iaW5kLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2JpbmQuUwppbmRleCBlMDdkZDc3Li5jOTAxNDE3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2JpbmQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2JpbmQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGJpbmQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhY2hlZmx1c2guUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2FjaGVmbHVzaC5TCmluZGV4IGFjMmEyMTguLjc2ZjQ2MjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2FjaGVmbHVzaC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2FjaGVmbHVzaC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoY2FjaGVmbHVzaCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2FwZ2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcGdldC5TCmluZGV4IGI5MTI4MzAuLjU5YTVhM2MgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2FwZ2V0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBnZXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGNhcGdldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2Fwc2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcHNldC5TCmluZGV4IGNlZjY4YzUuLmFmMjg0YWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2Fwc2V0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBzZXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGNhcHNldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hkaXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hkaXIuUwppbmRleCBlYTkzZmQ2Li4yNWYyN2JhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NoZGlyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaGRpci5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoY2hkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nocm9vdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaHJvb3QuUwppbmRleCBiMTE5OWU2Li42ZjgyOWE2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nocm9vdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hyb290LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChjaHJvb3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwppbmRleCBmMWU3ZmEyLi40OGZhMDdjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChjbG9ja19nZXRyZXMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCmluZGV4IDliM2UxMzIuLjMxNzQ4MWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoY2xvY2tfZ2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCmluZGV4IGZkYTczOTQuLjgwMjk1YmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGNsb2NrX25hbm9zbGVlcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKaW5kZXggNWEwMDU5ZS4uYmY1NDcwMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChjbG9ja19zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9zZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9zZS5TCmluZGV4IDAwYzhmODUuLmVjMDU0NDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvc2UuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb3NlLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChjbG9zZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY29ubmVjdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jb25uZWN0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YTUxODguLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jb25uZWN0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGNvbm5lY3QpCi0gICAgbW92ICAgICBpcCwgcjcKLSAgICBsZHIgICAgIHI3LCA9X19OUl9jb25uZWN0Ci0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGJ4bHMgICAgbHIKLSAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KLUVORChjb25uZWN0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwppbmRleCBhMjZiNDc4Li41NzU4MGM5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGRlbGV0ZV9tb2R1bGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2R1cC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAuUwppbmRleCBiMTg1OWQ5Li4yY2Q2OWQ3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2R1cC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChkdXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2R1cDMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwMy5TCmluZGV4IDNlNDdjMTAuLjQ2MTNkNjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwMy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwMy5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZHVwMykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKaW5kZXggMmVlYmMwYy4uMTA4YzI0ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChlcG9sbF9jcmVhdGUxKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jdGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3RsLlMKaW5kZXggN2ExY2M0MS4uNDczYWY2YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jdGwuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2N0bC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZXBvbGxfY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ldmVudGZkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2V2ZW50ZmQuUwppbmRleCAwODI3MmQzLi5jYTZiY2VlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2V2ZW50ZmQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2V2ZW50ZmQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGV2ZW50ZmQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2V4ZWN2ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9leGVjdmUuUwppbmRleCAzNjFlYzYzLi4zZWNhODEwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2V4ZWN2ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXhlY3ZlLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChleGVjdmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZhY2Nlc3NhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mYWNjZXNzYXQuUwppbmRleCBjODJiMmNlLi5hMWRmNWMwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmFjY2Vzc2F0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmYWNjZXNzYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZhbGxvY2F0ZTY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZhbGxvY2F0ZTY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmZDVlMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmFsbG9jYXRlNjQuUwpAQCAtMCwwICsxLDIyIEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZhbGxvY2F0ZTY0KQorICAgIG1vdiAgICAgaXAsIHNwCisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCisgICAgLmNmaV9yZWxfb2Zmc2V0IHI1LCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IHI2LCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IHI3LCAxMgorICAgIGxkbWZkICAgaXAsIHtyNCwgcjUsIHI2fQorICAgIGxkciAgICAgcjcsID1fX05SX2ZhbGxvY2F0ZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQoZmFsbG9jYXRlNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaGRpci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hkaXIuUwppbmRleCAxYTdlYjUxLi43MDVhZDMyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaGRpci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNoZGlyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmY2hkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2htb2QuUwppbmRleCA0MmRjNWI4Li41Njc1ZjBhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmY2htb2QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZGF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZGF0LlMKaW5kZXggZTAzZGE4Yy4uM2Y3ZTBlZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2htb2RhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kYXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGZjaG1vZGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd24uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNob3duLlMKaW5kZXggYzJjMzk4Mi4uNDVhZDliZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd24uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bi5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZmNob3duKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd25hdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd25hdC5TCmluZGV4IDQzOTdhMjIuLjJhYWMwZmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNob3duYXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bmF0LlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKGZjaG93bmF0KQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZmNob3duYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZkYXRhc3luYy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mZGF0YXN5bmMuUwppbmRleCA5YzgzMTdkLi43ZmVmZDIyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZkYXRhc3luYy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmRhdGFzeW5jLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmZGF0YXN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZnZXR4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mZ2V0eGF0dHIuUwppbmRleCBiZWY1MzZiLi4zZjFlNWZjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZnZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmdldHhhdHRyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZsaXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxpc3R4YXR0ci5TCmluZGV4IGQ5YTMwYmIuLmVlMDkyOTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxpc3R4YXR0ci5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZmxpc3R4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxvY2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxvY2suUwppbmRleCAwMTZlODI0Li5jOTQ2ZmU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Zsb2NrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbG9jay5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZmxvY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwppbmRleCBjN2ZmMDM0Li5mNGU5NTBiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmcmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzZXR4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc2V0eGF0dHIuUwppbmRleCAzOWI5N2Y5Li4wZTMzYWQyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnNldHhhdHRyLlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKGZzZXR4YXR0cikKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGZzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YwOGQwOC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGZzdGF0KQotICAgIG1vdiAgICAgaXAsIHI3Ci0gICAgbGRyICAgICByNywgPV9fTlJfZnN0YXQ2NAotICAgIHN3aSAgICAgIzAKLSAgICBtb3YgICAgIHI3LCBpcAotICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBieGxzICAgIGxyCi0gICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCi1FTkQoZnN0YXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0NjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MGU3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0NjQuUwpAQCAtMCwwICsxLDE3IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZzdGF0NjQpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9mc3RhdDY0CisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORChmc3RhdDY0KQorCisgICAgLmdsb2JsIGZzdGF0CisgICAgLmVxdSBmc3RhdCwgZnN0YXQ2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdGF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0YXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NjOWJiMC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0YXQuUworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZnN0YXRhdCkKLSAgICBtb3YgICAgIGlwLCByNwotICAgIGxkciAgICAgcjcsID1fX05SX2ZzdGF0YXQ2NAotICAgIHN3aSAgICAgIzAKLSAgICBtb3YgICAgIHI3LCBpcAotICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBieGxzICAgIGxyCi0gICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCi1FTkQoZnN0YXRhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXRhdDY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0YXQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTZjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0YXQ2NC5TCkBAIC0wLDAgKzEsMTcgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXRhdDY0KQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfZnN0YXRhdDY0CisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORChmc3RhdGF0NjQpCisKKyAgICAuZ2xvYmwgZnN0YXRhdAorICAgIC5lcXUgZnN0YXRhdCwgZnN0YXRhdDY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzeW5jLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzeW5jLlMKaW5kZXggNmI3YzRhOC4uMWRmZmYwNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3luYy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN5bmMuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGZzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnRydW5jYXRlLlMKaW5kZXggNGEzZDU2Yy4uMWJmZTJmMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZnRydW5jYXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TCmluZGV4IDkxMGNhNjguLmFjMGNhYTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnRydW5jYXRlNjQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChmdHJ1bmNhdGU2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnV0ZXguUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnV0ZXguUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVlNmZhNi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z1dGV4LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGZ1dGV4KQotICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IHI1LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IHI2LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IHI3LCAxMgotICAgIGxkbWZkICAgaXAsIHtyNCwgcjUsIHI2fQotICAgIGxkciAgICAgcjcsID1fX05SX2Z1dGV4Ci0gICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAwCi0gICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGJ4bHMgICAgbHIKLSAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KLUVORChmdXRleCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZGVudHMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZGVudHMuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYwZTgxYS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGRlbnRzLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGdldGRlbnRzKQotICAgIG1vdiAgICAgaXAsIHI3Ci0gICAgbGRyICAgICByNywgPV9fTlJfZ2V0ZGVudHM2NAotICAgIHN3aSAgICAgIzAKLSAgICBtb3YgICAgIHI3LCBpcAotICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBieGxzICAgIGxyCi0gICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCi1FTkQoZ2V0ZGVudHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGVnaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZWdpZC5TCmluZGV4IDZhZmNhOTAuLmFmYTljYzggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZWdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZWdpZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0ZWdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZXVpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRldWlkLlMKaW5kZXggNzhlNWNmNC4uMTBjOGEyNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRldWlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRldWlkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXRldWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRnaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z2lkLlMKaW5kZXggYzJkMzUzOC4uODc3Mjc2MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRnaWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdpZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0Z2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRncm91cHMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKaW5kZXggZTZiOGUxMC4uMzY2Mjk5YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRncm91cHMuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdyb3Vwcy5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0Z3JvdXBzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRpdGltZXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0aXRpbWVyLlMKaW5kZXggM2RjZTcwNy4uODBmYjBmMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRpdGltZXIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGl0aW1lci5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0aXRpbWVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwZWVybmFtZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwZWVybmFtZS5TCmluZGV4IDA2MTMyMzEuLjI1ZjAwMjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXRwZWVybmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwZ2lkLlMKaW5kZXggMTk5MmFmYy4uMzZjNGMxOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwZ2lkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXRwZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGlkLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwYmNiOGUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwaWQuUworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZ2V0cGlkKQotICAgIG1vdiAgICAgaXAsIHI3Ci0gICAgbGRyICAgICByNywgPV9fTlJfZ2V0cGlkCi0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGJ4bHMgICAgbHIKLSAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KLUVORChnZXRwaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBwaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cHBpZC5TCmluZGV4IDU5NGZjYTUuLjYwNmIyZTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cHBpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cHBpZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0cHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJlc2dpZC5TCmluZGV4IDlkY2RiMzMuLmE1ZTQ2ODkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXNnaWQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGdldHJlc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzdWlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJlc3VpZC5TCmluZGV4IDM4N2JkN2MuLjc0YzI2YTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzdWlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXN1aWQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGdldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmxpbWl0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJsaW1pdC5TCmluZGV4IDg3OWI2NjYuLjE2NmRhNjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmxpbWl0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRybGltaXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGdldHJsaW1pdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cnVzYWdlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJ1c2FnZS5TCmluZGV4IGVlODRmNDkuLjkzOTc5YzYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cnVzYWdlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRydXNhZ2UuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGdldHJ1c2FnZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNpZC5TCmluZGV4IDcxNWYyMTcuLjg3ZDM4ZmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c2lkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzaWQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGdldHNpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja25hbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja25hbWUuUwppbmRleCAyZWU2OGYzLi41ZGM0ZWFiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0c29ja25hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TCmluZGV4IDczNWVmYmIuLjQxNDNiYmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShnZXRzb2Nrb3B0KQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0c29ja29wdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpZC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTI4YmUxLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGlkLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGdldHRpZCkKLSAgICBtb3YgICAgIGlwLCByNwotICAgIGxkciAgICAgcjcsID1fX05SX2dldHRpZAotICAgIHN3aSAgICAgIzAKLSAgICBtb3YgICAgIHI3LCBpcAotICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBieGxzICAgIGxyCi0gICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCi1FTkQoZ2V0dGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKaW5kZXggNGQzM2I1ZC4uMTc0Zjk0YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0dGltZW9mZGF5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dWlkLlMKaW5kZXggNjZmNTcwZi4uM2QwN2QzYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR1aWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHVpZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoZ2V0dWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR4YXR0ci5TCmluZGV4IDcxZDAwMzUuLjY2NjFhYWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHhhdHRyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChnZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5pdF9tb2R1bGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwppbmRleCA2ODUwZGRmLi44MjUxNTMzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbml0X21vZHVsZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoaW5pdF9tb2R1bGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKaW5kZXggMzY3YTQ5Zi4uYjk0NWJkMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGlub3RpZnlfYWRkX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwppbmRleCAxM2UxNzVmLi4zMjA5MGRlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGlub3RpZnlfaW5pdDEpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCmluZGV4IGI4MGUwZjguLmU4MjMwZTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoaW5vdGlmeV9ybV93YXRjaCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW9wcmlvX2dldC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZTA0ZWQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGlvcHJpb19nZXQpCi0gICAgbW92ICAgICBpcCwgcjcKLSAgICBsZHIgICAgIHI3LCA9X19OUl9pb3ByaW9fZ2V0Ci0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGJ4bHMgICAgbHIKLSAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KLUVORChpb3ByaW9fZ2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pb3ByaW9fc2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lvcHJpb19zZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI5NGVmYi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lvcHJpb19zZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoaW9wcmlvX3NldCkKLSAgICBtb3YgICAgIGlwLCByNwotICAgIGxkciAgICAgcjcsID1fX05SX2lvcHJpb19zZXQKLSAgICBzd2kgICAgICMwCi0gICAgbW92ICAgICByNywgaXAKLSAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgYnhscyAgICBscgotICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubwotRU5EKGlvcHJpb19zZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2tpbGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMva2lsbC5TCmluZGV4IDlhNDQyMDguLjBiNWY0YTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMva2lsbC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMva2lsbC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoa2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMva2xvZ2N0bC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9rbG9nY3RsLlMKaW5kZXggODRjZTdmNi4uYjc2YjJiNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9rbG9nY3RsLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9rbG9nY3RsLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChrbG9nY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGdldHhhdHRyLlMKaW5kZXggOWVlZDY3Zi4uYjAzM2E5YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xnZXR4YXR0ci5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobGdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saW5rYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlua2F0LlMKaW5kZXggYzYxMmQwMi4uNmU3NGQwNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saW5rYXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpbmthdC5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShsaW5rYXQpCiAgICAgbW92ICAgICBpcCwgc3AKLSAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KICAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKICAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKQEAgLTE5LDUgKzE4LDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChsaW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpc3Rlbi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saXN0ZW4uUwppbmRleCAzMzBlYTU2Li4zYWFhODAxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpc3Rlbi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlzdGVuLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChsaXN0ZW4pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpc3R4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saXN0eGF0dHIuUwppbmRleCBjNjRlNDg0Li41MWZmMjY3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlzdHhhdHRyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChsaXN0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xsaXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGxpc3R4YXR0ci5TCmluZGV4IGNlYTkyNmIuLjQ2ZTgxMTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGxpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGxpc3R4YXR0ci5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobGxpc3R4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCmluZGV4IGM3YTY0NTguLmE5NDUwNjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGxyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHNlZWsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHNlZWsuUwppbmRleCA5ZWRhZTM3Li4wMGFlYWIzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzZWVrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sc2Vlay5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobHNlZWspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzZXR4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sc2V0eGF0dHIuUwppbmRleCA2NzYzOWY2Li5jNDFmYjg4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHNldHhhdHRyLlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKGxzZXR4YXR0cikKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKGxzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWFkdmlzZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tYWR2aXNlLlMKaW5kZXggZWUyYzJhNS4uNGQzY2RjZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tYWR2aXNlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tYWR2aXNlLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChtYWR2aXNlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9taW5jb3JlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21pbmNvcmUuUwppbmRleCA5ZWY5MjM3Li5mMTE1NGQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21pbmNvcmUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21pbmNvcmUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKG1pbmNvcmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rZGlyYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TCmluZGV4IDllNzdlZjAuLjFmODk1N2IgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobWtkaXJhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtub2RhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta25vZGF0LlMKaW5kZXggZGU0OTJkYS4uMWEyYmY2ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta25vZGF0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta25vZGF0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChta25vZGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tbG9jay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tbG9jay5TCmluZGV4IDA0M2IyMWIuLjhhNGZjN2EgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2suUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21sb2NrLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChtbG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2thbGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2thbGwuUwppbmRleCA5YzZjNGU0Li5iNDljYTA1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21sb2NrYWxsLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tbG9ja2FsbC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobWxvY2thbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21vdW50LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21vdW50LlMKaW5kZXggYjE4NDExNC4uZWQyOGFiMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tb3VudC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbW91bnQuUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkobW91bnQpCiAgICAgbW92ICAgICBpcCwgc3AKLSAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KICAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKICAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKQEAgLTE5LDUgKzE4LDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChtb3VudCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXByb3RlY3QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXByb3RlY3QuUwppbmRleCA5NDYxZDliLi5jYjUxMzA2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21wcm90ZWN0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcHJvdGVjdC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobXByb3RlY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21yZW1hcC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcmVtYXAuUwppbmRleCAyNDg2ZmM5Li41MDVlYTNjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21yZW1hcC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXJlbWFwLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChtcmVtYXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21zeW5jLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21zeW5jLlMKaW5kZXggM2ZjNDExOC4uMjIwZmI0ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc3luYy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXN5bmMuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKG1zeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5sb2NrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUwppbmRleCBjODlmZDNjLi4wNWJmOTQxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKG11bmxvY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2thbGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubG9ja2FsbC5TCmluZGV4IDNhYzlmMzIuLmUyYzVkZDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubG9ja2FsbC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubG9ja2FsbC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQobXVubG9ja2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubWFwLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bm1hcC5TCmluZGV4IGVkM2JiMWUuLjc0MGMzNjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubWFwLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5tYXAuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKG11bm1hcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL25hbm9zbGVlcC5TCmluZGV4IDY5NWMxMjYuLmZjZDZlOTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbmFub3NsZWVwLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9uYW5vc2xlZXAuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKG5hbm9zbGVlcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGNmOTFlLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHBlcmZfZXZlbnRfb3BlbikKLSAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgotICAgIC5jZmlfcmVsX29mZnNldCByNCwgMAotICAgIC5jZmlfcmVsX29mZnNldCByNSwgNAotICAgIC5jZmlfcmVsX29mZnNldCByNiwgOAotICAgIC5jZmlfcmVsX29mZnNldCByNywgMTIKLSAgICBsZG1mZCAgIGlwLCB7cjQsIHI1LCByNn0KLSAgICBsZHIgICAgIHI3LCA9X19OUl9wZXJmX2V2ZW50X29wZW4KLSAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDAKLSAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgYnhscyAgICBscgotICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubwotRU5EKHBlcmZfZXZlbnRfb3BlbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGVyc29uYWxpdHkuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGVyc29uYWxpdHkuUwppbmRleCBlM2Y3MzcxLi5kNDNkNzYzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wZXJzb25hbGl0eS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocGVyc29uYWxpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BpcGUyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BpcGUyLlMKaW5kZXggNDIwZGVlOS4uMWNiZGZiMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9waXBlMi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGlwZTIuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHBpcGUyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmN0bC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmN0bC5TCmluZGV4IDQwYWNiNjEuLmEyZDg2OWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJjdGwuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3ByY3RsLlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKHByY3RsKQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocHJjdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3ByZWFkNjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJlYWQ2NC5TCmluZGV4IGEzMzAxOGMuLmRjMDdiYjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJlYWQ2NC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJlYWQ2NC5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShwcmVhZDY0KQogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC0xOSw1ICsxOCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocHJlYWQ2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJsaW1pdDY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BybGltaXQ2NC5TCmluZGV4IDhkOWM0ZmYuLjNhZTllMWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJsaW1pdDY0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmxpbWl0NjQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHBybGltaXQ2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHdyaXRlNjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHdyaXRlNjQuUwppbmRleCA1YWU5OTIxLi41NzQ5ZjZiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3B3cml0ZTY0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wd3JpdGU2NC5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShwd3JpdGU2NCkKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHB3cml0ZTY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWQuUwppbmRleCBiMDFkYWY1Li4xYzNiMzk1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHJlYWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWRhaGVhZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkYWhlYWQuUwppbmRleCAzMjZlZDZmLi42OTUyYjRlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWRhaGVhZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZGFoZWFkLlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKHJlYWRhaGVhZCkKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHJlYWRhaGVhZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZGxpbmthdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkbGlua2F0LlMKaW5kZXggMjg5MjZhYi4uZTdjYzhmZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkbGlua2F0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkbGlua2F0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChyZWFkbGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkdi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkdi5TCmluZGV4IDQzM2QzM2QuLmM3ODA3YmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZHYuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWR2LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChyZWFkdikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdmZyb20uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdmZyb20uUwppbmRleCAzNjc3OTBiLi4xMTVhMDljIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3Zmcm9tLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2ZnJvbS5TCkBAIC00LDcgKzQsNiBAQAogCiBFTlRSWShyZWN2ZnJvbSkKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHJlY3Zmcm9tKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2bW1zZy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2bW1zZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjJiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3ZtbXNnLlMKQEAgLTAsMCArMSwyMiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWN2bW1zZykKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfcmVsX29mZnNldCByNCwgMAorICAgIC5jZmlfcmVsX29mZnNldCByNSwgNAorICAgIC5jZmlfcmVsX29mZnNldCByNiwgOAorICAgIC5jZmlfcmVsX29mZnNldCByNywgMTIKKyAgICBsZG1mZCAgIGlwLCB7cjQsIHI1LCByNn0KKyAgICBsZHIgICAgIHI3LCA9X19OUl9yZWN2bW1zZworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQocmVjdm1tc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3Ztc2cuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdm1zZy5TCmluZGV4IDQ3ZTgyYTcuLjk5NWE5ZTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdm1zZy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdm1zZy5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocmVjdm1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwppbmRleCBhM2ZjZGZhLi4zYTMyZTVjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQocmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZWF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZWF0LlMKaW5kZXggY2VhNjI4Ni4uOThlODZkYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW5hbWVhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lYXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHJlbmFtZWF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwppbmRleCBjOTQwYWRjLi4xODdlNjgwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNjaGVkX2dldF9wcmlvcml0eV9tYXgpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCmluZGV4IDM5ZmFlZGUuLjY4YmY3ZGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwppbmRleCA1OWRmMTA0Li4zMmI5N2I4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2NoZWRfZ2V0cGFyYW0pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwppbmRleCA5NTMzNjhkLi4zMzBjMjA4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzY2hlZF9nZXRzY2hlZHVsZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwppbmRleCAxZmE3ZDE1Li41ZDE3NmFjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKaW5kZXggNjNiZmU0ZC4uNjY1MzQ3MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNjaGVkX3NldGFmZmluaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCmluZGV4IDMyNGYwYmIuLjE2ZTE5OTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzY2hlZF9zZXRwYXJhbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCmluZGV4IDBjZTZiMTUuLjJlYzlmZWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNjaGVkX3NldHNjaGVkdWxlcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfeWllbGQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfeWllbGQuUwppbmRleCA4ZTZkNjVhLi4xZWMzMjhmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF95aWVsZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2NoZWRfeWllbGQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlLlMKaW5kZXggMjhiMjVhMy4uYWZhZTAyMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kZmlsZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZGZpbGUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNlbmRmaWxlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kZmlsZTY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlNjQuUwppbmRleCA0YTlmMjQ1Li5kMGFkMGI4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlNjQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlNjQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNlbmRmaWxlNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRtbXNnLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRtbXNnLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJiNWY4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1tc2cuUwpAQCAtMCwwICsxLDE0IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNlbmRtbXNnKQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfc2VuZG1tc2cKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAorRU5EKHNlbmRtbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kbXNnLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRtc2cuUwppbmRleCA1NTRmMzA3Li5mZDM4MTQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRtc2cuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRtc2cuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNlbmRtc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmR0by5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kdG8uUwppbmRleCA1MzNkOTVlLi4yOWI3YjBiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmR0by5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZHRvLlMKQEAgLTQsNyArNCw2IEBACiAKIEVOVFJZKHNlbmR0bykKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNlbmR0bykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0ZnNnaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0ZnNnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjc3YTk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRmc2dpZC5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2V0ZnNnaWQpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9zZXRmc2dpZAorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQoc2V0ZnNnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGZzdWlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGZzdWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQyN2E0ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0ZnN1aWQuUwpAQCAtMCwwICsxLDE0IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldGZzdWlkKQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0ZnN1aWQKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAorRU5EKHNldGZzdWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRnaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0Z2lkLlMKaW5kZXggZmIzODE0OC4uZDliMmI4OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRnaWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdpZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2V0Z2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRncm91cHMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0Z3JvdXBzLlMKaW5kZXggNTQyMGE1My4uMTY5ZGU3MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRncm91cHMuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdyb3Vwcy5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2V0Z3JvdXBzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRpdGltZXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0aXRpbWVyLlMKaW5kZXggMjM0NWU1Yi4uMzFiMjc3YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRpdGltZXIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGl0aW1lci5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2V0aXRpbWVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRucy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRucy5TCmluZGV4IDdhZmJmZjAuLjU5MjAzZWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0bnMuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldG5zLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXRucykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cGdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwZ2lkLlMKaW5kZXggMTQ3MGE5ZC4uNGE5MTUyMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwZ2lkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXRwZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwcmlvcml0eS5TCmluZGV4IGI3ZjQ3YmUuLjIwNTNjZTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cHJpb3JpdHkuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHByaW9yaXR5LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXRwcmlvcml0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVnaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVnaWQuUwppbmRleCBhNDMyM2Q0Li5mMWJkYzYwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZWdpZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2V0cmVnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlc2dpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZXNnaWQuUwppbmRleCBhNTc4NDQwLi45Yjg5NjhhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlc2dpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzZ2lkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXRyZXNnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlc3VpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZXN1aWQuUwppbmRleCA5Nzk4YmM1Li5jMjZhOTU1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlc3VpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzdWlkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXRyZXN1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJldWlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJldWlkLlMKaW5kZXggZmE4M2RjNi4uNzk2MTkxYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZXVpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmV1aWQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNldHJldWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRybGltaXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmxpbWl0LlMKaW5kZXggMDcxMWFjYS4uYzg3YjIxYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRybGltaXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJsaW1pdC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2V0cmxpbWl0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0c2lkLlMKaW5kZXggZGY2MTk2Yi4uODNiZGExYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzaWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNpZC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2V0c2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNvY2tvcHQuUwppbmRleCBjNGY3YTAxLi44ZWEzODkzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNvY2tvcHQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNvY2tvcHQuUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkoc2V0c29ja29wdCkKICAgICBtb3YgICAgIGlwLCBzcAotICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQogICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgogICAgIC5jZmlfcmVsX29mZnNldCByNCwgMApAQCAtMTksNSArMTgsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNldHNvY2tvcHQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwppbmRleCBhZjM5NzYxLi41NzYzZjQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXR0aW1lb2ZkYXkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHVpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR1aWQuUwppbmRleCAxOTk5YzJiLi41NWIzNDljIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHVpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dWlkLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXR1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHhhdHRyLlMKaW5kZXggNjk4NzIxNS4uOGJhNGI3NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0eGF0dHIuUwpAQCAtNCw3ICs0LDYgQEAKIAogRU5UUlkoc2V0eGF0dHIpCiAgICAgbW92ICAgICBpcCwgc3AKLSAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KICAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKICAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKQEAgLTE5LDUgKzE4LDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2h1dGRvd24uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2h1dGRvd24uUwppbmRleCA3NDRmMzg0Li44ODk5MzRhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NodXRkb3duLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaHV0ZG93bi5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc2h1dGRvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKaW5kZXggZDg3NzdiNC4uYjYxYjI1ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWdhbHRzdGFjay5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lnYWx0c3RhY2suUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHNpZ2FsdHN0YWNrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWduYWxmZDQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lnbmFsZmQ0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZDhhMjguLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWduYWxmZDQuUworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoc2lnbmFsZmQ0KQotICAgIG1vdiAgICAgaXAsIHI3Ci0gICAgbGRyICAgICByNywgPV9fTlJfc2lnbmFsZmQ0Ci0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGJ4bHMgICAgbHIKLSAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KLUVORChzaWduYWxmZDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zb2NrZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVmYTUyOS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShzb2NrZXQpCi0gICAgbW92ICAgICBpcCwgcjcKLSAgICBsZHIgICAgIHI3LCA9X19OUl9zb2NrZXQKLSAgICBzd2kgICAgICMwCi0gICAgbW92ICAgICByNywgaXAKLSAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgYnhscyAgICBscgotICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubwotRU5EKHNvY2tldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0cGFpci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zb2NrZXRwYWlyLlMKaW5kZXggZjg5NjMxMy4uZjNjOGE0YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zb2NrZXRwYWlyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zb2NrZXRwYWlyLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzb2NrZXRwYWlyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zcGxpY2UuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3BsaWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjM2YwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3BsaWNlLlMKQEAgLTAsMCArMSwyMiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzcGxpY2UpCisgICAgbW92ICAgICBpcCwgc3AKKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjQsIDAKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjUsIDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjYsIDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgcjcsIDEyCisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfc3BsaWNlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCAwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORChzcGxpY2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N3YXBvZmYuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9mZi5TCmluZGV4IGY3OGJjN2YuLmE3YWFhODIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9mZi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9mZi5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoc3dhcG9mZikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9uLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N3YXBvbi5TCmluZGV4IGQyODIxNmEuLjZlYTkzYzMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9uLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zd2Fwb24uUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHN3YXBvbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3ltbGlua2F0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bWxpbmthdC5TCmluZGV4IGQ4MWU0M2IuLmQzMzBhNTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3ltbGlua2F0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW1saW5rYXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHN5bWxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3luYy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW5jLlMKaW5kZXggMjc5YTE5Mi4uNDhlY2ZjMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW5jLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW5jLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORChzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeXNpbmZvLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5c2luZm8uUwppbmRleCA2YmVlNTgzLi43MDk0NzhlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5c2luZm8uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5c2luZm8uUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHN5c2luZm8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RlZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90ZWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE5YzAwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90ZWUuUwpAQCAtMCwwICsxLDE0IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHRlZSkKKyAgICBtb3YgICAgIGlwLCByNworICAgIGxkciAgICAgcjcsID1fX05SX3RlZQorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCitFTkQodGVlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90Z2tpbGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGdraWxsLlMKaW5kZXggNGVhMDRmNS4uMjA2ODQ2NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90Z2tpbGwuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Rna2lsbC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodGdraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCmluZGV4IGY1ODQyZTkuLjg5YTgwY2QgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCh0aW1lcmZkX2NyZWF0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCmluZGV4IDZmMjU0ZTUuLjRhN2RmNzYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHRpbWVyZmRfZ2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCmluZGV4IDc1ZDE3NWMuLjJlMGZlOTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHRpbWVyZmRfc2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXMuUwppbmRleCA0NzkyYWQxLi4yODljMTg1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVzLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcy5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodGltZXMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RraWxsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RraWxsLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MjZhZTcuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90a2lsbC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWSh0a2lsbCkKLSAgICBtb3YgICAgIGlwLCByNwotICAgIGxkciAgICAgcjcsID1fX05SX3RraWxsCi0gICAgc3dpICAgICAjMAotICAgIG1vdiAgICAgcjcsIGlwCi0gICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGJ4bHMgICAgbHIKLSAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KLUVORCh0a2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGUuUwppbmRleCBmZjhmZDE5Li5iYjMzYmViIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RydW5jYXRlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodHJ1bmNhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RydW5jYXRlNjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGU2NC5TCmluZGV4IDhmZDA4NTUuLjljYWZiYjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGU2NC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGU2NC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodHJ1bmNhdGU2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1hc2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1hc2suUwppbmRleCA4MzBhZjIxLi41ZGM0NDYxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VtYXNrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bWFzay5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodW1hc2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Vtb3VudDIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1vdW50Mi5TCmluZGV4IDRjMGNlNGQuLjQzNWVkYTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1vdW50Mi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1vdW50Mi5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodW1vdW50MikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5hbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5hbWUuUwppbmRleCAyMGE2ZDdkLi44YWY2MTIzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VuYW1lLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmFtZS5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQodW5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VubGlua2F0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VubGlua2F0LlMKaW5kZXggMWMyNzQxNi4uOTYyNTdlNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmxpbmthdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5saW5rYXQuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHVubGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bnNoYXJlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Vuc2hhcmUuUwppbmRleCA1ZWMxMDQ5Li44MDU0MTcxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Vuc2hhcmUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Vuc2hhcmUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHVuc2hhcmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3V0aW1lbnNhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91dGltZW5zYXQuUwppbmRleCBmMGY4MzRmLi5mM2MyZmEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3V0aW1lbnNhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdXRpbWVuc2F0LlMKQEAgLTEwLDUgKzEwLDUgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCh1dGltZW5zYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Zmb3JrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Zmb3JrLlMKaW5kZXggZTEyZmJhNS4uNWY0Y2IzZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy92Zm9yay5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdmZvcmsuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHZmb3JrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy92bXNwbGljZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy92bXNwbGljZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMTJjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Ztc3BsaWNlLlMKQEAgLTAsMCArMSwxNCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh2bXNwbGljZSkKKyAgICBtb3YgICAgIGlwLCByNworICAgIGxkciAgICAgcjcsID1fX05SX3Ztc3BsaWNlCisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKK0VORCh2bXNwbGljZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd2FpdDQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd2FpdDQuUwppbmRleCBhMTk3YzJlLi4yNmE0OTI5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dhaXQ0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy93YWl0NC5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQod2FpdDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRlLlMKaW5kZXggZWQ3Y2ZhMi4uYmY4OWQ3ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy93cml0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGUuUwpAQCAtMTAsNSArMTAsNSBAQAogICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKICAgICBieGxzICAgIGxyCiAgICAgbmVnICAgICByMCwgcjAKLSAgICBiICAgICAgIF9fc2V0X2Vycm5vCisgICAgYiAgICAgICBfX3NldF9lcnJub19pbnRlcm5hbAogRU5EKHdyaXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy93cml0ZXYuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGV2LlMKaW5kZXggOGNjNTA2Zi4uMTViNTI3NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy93cml0ZXYuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRldi5TCkBAIC0xMCw1ICsxMCw1IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQod3JpdGV2KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2FybTY0Lm1rIGIvbGliYy9hcmNoLWFybTY0L2FybTY0Lm1rCmluZGV4IDg2YmY5MWEuLjZjNGY2YTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9hcm02NC5taworKysgYi9saWJjL2FyY2gtYXJtNjQvYXJtNjQubWsKQEAgLTEsMTAgKzEsMzQgQEAKLV9MSUJDX0FSQ0hfQ09NTU9OX1NSQ19GSUxFUyA6PSBcCisjIGFybTY0IHNwZWNpZmljIGNvbmZpZ3MKKworbGliY19jb21tb25fc3JjX2ZpbGVzX2FybTY0IDo9IFwKKyAgICBiaW9uaWMvbWVtcmNoci5jIFwKKyAgICBiaW9uaWMvc3RycmNoci5jcHAgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NhdC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjaHIuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY21wLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NweS5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsZW4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzcmNoci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtY21wLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cG5jcHkuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY2F0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxjYXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNweS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY2F0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jcHkuYyBcCisKKyMgRm9ydGlmeSBpbXBsZW1lbnRhdGlvbnMgb2YgbGliYyBmdW5jdGlvbnMuCitsaWJjX2NvbW1vbl9zcmNfZmlsZXNfYXJtNjQgKz0gXAorICAgIGJpb25pYy9fX21lbWNweV9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19tZW1zZXRfY2hrLmNwcCBcCisgICAgYmlvbmljL19fc3RyY3B5X2Noay5jcHAgXAorICAgIGJpb25pYy9fX3N0cmNhdF9jaGsuY3BwIFwKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgQ1BVIHNwZWNpZmljIHNvdXJjZSBmaWxlcworbGliY19iaW9uaWNfc3JjX2ZpbGVzX2FybTY0IDo9IFwKICAgICBhcmNoLWFybTY0L2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TIFwKLSAgICBhcmNoLWFybTY0L2Jpb25pYy9iemVyb19hcm02NC5jIFwKLSAgICBhcmNoLWFybTY0L2Jpb25pYy9jYWNoZWZsdXNoX2FybTY0LmMgXAogICAgIGFyY2gtYXJtNjQvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBcCi0gICAgYXJjaC1hcm02NC9iaW9uaWMvZnV0ZXhfYXJtNjQuUyBcCi0gICAgYXJjaC1hcm02NC9iaW9uaWMvX19nZXRfc3AuUyBcCiAgICAgYXJjaC1hcm02NC9iaW9uaWMvX19ydF9zaWdyZXR1cm4uUyBcCiAgICAgYXJjaC1hcm02NC9iaW9uaWMvX3NldGptcC5TIFwKICAgICBhcmNoLWFybTY0L2Jpb25pYy9zZXRqbXAuUyBcCkBAIC0xMyw3ICszNywyNSBAQAogICAgIGFyY2gtYXJtNjQvYmlvbmljL3N5c2NhbGwuUyBcCiAgICAgYXJjaC1hcm02NC9iaW9uaWMvdmZvcmsuUyBcCiAKLV9MSUJDX0FSQ0hfU1RBVElDX1NSQ19GSUxFUyA6PSBcCi0gICAgYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYyBcCiAKLV9MSUJDX0FSQ0hfRFlOQU1JQ19TUkNfRklMRVMgOj0KK2xpYmNfY3J0X3RhcmdldF9jZmxhZ3NfYXJtNjQgOj0gXAorICAgIC1JJChMT0NBTF9QQVRIKS9hcmNoLWFybTY0L2luY2x1ZGUKKworbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGVfYXJtNjQgOj0gXAorICAgICQoTE9DQUxfUEFUSCkvYXJjaC1hcm02NC9iaW9uaWMvY3J0YmVnaW4uYworCitsaWJjX2NydF90YXJnZXRfY3J0YmVnaW5fc29fZmlsZV9hcm02NCA6PSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLWNvbW1vbi9iaW9uaWMvY3J0YmVnaW5fc28uYworCisjIyBDUFUgdmFyaWFudCBzcGVjaWZpYyBzb3VyY2UgZmlsZXMKK2lmZXEgKCQoc3RyaXAgJChUQVJHRVRfQ1BVX1ZBUklBTlQpKSwpCisgICQod2FybmluZyBUQVJHRVRfQVJDSCBpcyBhcm02NCwgYnV0IFRBUkdFVF9DUFVfVkFSSUFOVCBpcyBub3QgZGVmaW5lZCkKK2VuZGlmCitjcHVfdmFyaWFudF9tayA6PSAkKExPQ0FMX1BBVEgpL2FyY2gtYXJtNjQvJChUQVJHRVRfQ1BVX1ZBUklBTlQpLyQoVEFSR0VUX0NQVV9WQVJJQU5UKS5taworaWZlcSAoJCh3aWxkY2FyZCAkKGNwdV92YXJpYW50X21rKSksKQorJChlcnJvciAiVEFSR0VUX0NQVV9WQVJJQU5UIG5vdCBzZXQgb3Igc2V0IHRvIGFuIHVua25vd24gdmFsdWUuIFBvc3NpYmxlIHZhbHVlcyBhcmUgZ2VuZXJpYywgZ2VuZXJpYy1uZW9uLCBkZW52ZXI2NC4gVXNlIGdlbmVyaWMgZm9yIGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBhIENQVSBzaW1pbGFyIHRvIGFueSBvZiB0aGUgc3VwcG9ydGVkIGNwdSB2YXJpYW50cy4iKQorZW5kaWYKK2luY2x1ZGUgJChjcHVfdmFyaWFudF9taykKK2xpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzICs9ICQoY3B1X3ZhcmlhbmtfbWspCisKK2NwdV92YXJpYW50X21rIDo9CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMKaW5kZXggOTc5MDI5MS4uNTZhYzBmNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUwpAQCAtMzEsMzMgKzMxLDMwIEBACiAvLyBwaWRfdCBfX2Jpb25pY19jbG9uZShpbnQgZmxhZ3MsIHZvaWQqIGNoaWxkX3N0YWNrLCBwaWRfdCogcGFyZW50X3RpZCwgdm9pZCogdGxzLCBwaWRfdCogY2hpbGRfdGlkLCBpbnQgKCpmbikodm9pZCopLCB2b2lkKiBhcmcpOwogCiBFTlRSWShfX2Jpb25pY19jbG9uZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgLyogc3RvcmUgdGhyZWFkIHBvaW50ZXIgJiBhcmdzIGluIGNoaWxkIHN0YWNrICovCisgICAgIyBDb3B5ICdmbicgYW5kICdhcmcnIG9udG8gdGhlIGNoaWxkIHN0YWNrLgogICAgIHN0cCAgICAgeDUsIHg2LCBbeDEsICMtMTZdCiAKLSAgICAvKiBzeXNfY2xvbmUgKi8KLSAgICB1eHR3ICAgIHgwLCB3MAorICAgICMgTWFrZSB0aGUgc3lzdGVtIGNhbGwuCiAgICAgbW92ICAgICB4OCwgX19OUl9jbG9uZQogICAgIHN2YyAgICAgIzAKIAotICAgIC8qIGNoZWNrIGZvciBjaGlsZC9wYXJlbnQgKi8KLSAgICBjYnogICAgIHgwLDFmCisgICAgIyBBcmUgd2UgdGhlIGNoaWxkPworICAgIGNieiAgICAgeDAsIC5MX2JjX2NoaWxkCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQorICAgICMgU2V0IGVycm5vIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nLgogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiAKLSAgICAvKiB0aHJlYWQgaW5pdGlhbGl6YXRpb24gLSBzZXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUgcmVjb3JkIGNoYWluICovCi0xOgorLkxfYmNfY2hpbGQ6CisgICAgIyBXZSdyZSBpbiB0aGUgY2hpbGQgbm93LiBTZXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUgcmVjb3JkIGNoYWluLi4uCiAgICAgbW92ICAgICB4MjksIHh6cgorICAgICMgU2V0dGluZyB4MzAgdG8gMCB3aWxsIG1ha2UgdGhlIHVud2luZGVyIHN0b3AgYXQgX19zdGFydF90aHJlYWQKKyAgICBtb3YgICAgIHgzMCwgeHpyCisgICAgIyAuLi5hbmQgY2FsbCBfX3N0YXJ0X3RocmVhZCB3aXRoIHRoZSAnZm4nIGFuZCAnYXJnJyB3ZSBzdG9yZWQgb24gdGhlIGNoaWxkIHN0YWNrLgogICAgIGxkcCAgICAgeDAsIHgxLCBbc3AsICMtMTZdCi0gICAgYiAgICAgICBfX2Jpb25pY19jbG9uZV9lbnRyeQorICAgIGIgICAgICAgX19zdGFydF90aHJlYWQKIEVORChfX2Jpb25pY19jbG9uZSkKKy5oaWRkZW4gX19iaW9uaWNfY2xvbmUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX19nZXRfc3AuUyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX19nZXRfc3AuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NkNGNlYi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19fZ2V0X3NwLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1FTlRSWShfX2dldF9zcCkKLSAgICBtb3YgeDAsIHNwCi0gICAgcmV0Ci1FTkQoX19nZXRfc3ApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19fcnRfc2lncmV0dXJuLlMgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19fcnRfc2lncmV0dXJuLlMKaW5kZXggZDE3NmVhMy4uOGZiNmYwYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fX3J0X3NpZ3JldHVybi5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX19ydF9zaWdyZXR1cm4uUwpAQCAtMjYsOCArMjYsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWV9QUklWQVRFKF9fcnRfc2lncmV0dXJuKQogICBtb3YgICAgIHg4LCBfX05SX3J0X3NpZ3JldHVybgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fX3NldF90bHMuYyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX19zZXRfdGxzLmMKaW5kZXggNGViM2FkZS4uMGQ4OGQxMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fX3NldF90bHMuYworKysgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19fc2V0X3Rscy5jCkBAIC0yNiw2ICsyNiw4IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi12b2lkIF9fc2V0X3Rscyh2b2lkKiB0bHMpIHsKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19MSUJDX0hJRERFTl9fIHZvaWQgX19zZXRfdGxzKHZvaWQqIHRscykgewogICBhc20oIm1zciB0cGlkcl9lbDAsICUwIiA6IDogInIiICh0bHMpKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKaW5kZXggMDc1ZTM4OC4uNmE3YjFlNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogLy8gdm9pZCBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKHZvaWQqIHN0YWNrQmFzZSwgc2l6ZV90IHN0YWNrU2l6ZSkKLUVOVFJZKF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24pCitFTlRSWV9QUklWQVRFKF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24pCiAgIG1vdiB3OCwgX19OUl9tdW5tYXAKICAgc3ZjICMwCiAgIC8vIElmIG11bm1hcCBmYWlsZWQsIHdlIGlnbm9yZSB0aGUgZmFpbHVyZSBhbmQgZXhpdCBhbnl3YXkuCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL19zZXRqbXAuUyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX3NldGptcC5TCmluZGV4IGVhNzBhNTIuLjM4MzY4OTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX3NldGptcC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvX3NldGptcC5TCkBAIC0yNiw3ICsyNiw3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NldGptcC5oPgogCiAvKgpAQCAtNzMsNyArNzMsNyBAQAogICAgIGxkciAgICAgdzksIC5MX3NldGptcF9tYWdpYwogICAgIGxkciAgICAgdzEwLCBbeDAsICMoX0pCX01BR0lDICogNCldCiAgICAgY21wICAgICB3OSwgdzEwCi0gICAgYi5uZSAgICBib3RjaAorICAgIGIubmUgICAgLkxfZmFpbAogCiAgICAgLyogcmVzdG9yZSBjb3JlIHJlZ2lzdGVycyAqLwogICAgIGxkcCAgICAgeDMwLCB4MTAsIFt4MCwgIyhfSkJfQ09SRV9CQVNFICogNCArIDE2ICogMCldCkBAIC05MywxMCArOTMsMTAgQEAKIAogICAgIC8qIHZhbGlkYXRlIHNwIChzcCBtb2QgMTYgPSAwKSBhbmQgbHIgKGxyIG1vZCA0ID0gMCkgKi8KICAgICB0c3QgICAgIHgzMCwgIzMKLSAgICBiLm5lICAgIGJvdGNoCisgICAgYi5uZSAgICAuTF9mYWlsCiAgICAgbW92ICAgICB4MTAsIHNwCiAgICAgdHN0ICAgICB4MTAsICMxNQotICAgIGIubmUgICAgYm90Y2gKKyAgICBiLm5lICAgIC5MX2ZhaWwKIAogICAgIC8qIHNldCByZXR1cm4gdmFsdWUgKi8KICAgICBjbXAgICAgIHcxLCB3enIKQEAgLTEwNCw4ICsxMDQsOCBAQAogICAgIHJldAogCiAgICAgLyogdmFsaWRhdGlvbiBmYWlsZWQsIGRpZSBkaWUgZGllICovCi1ib3RjaDoKLSAgICBibCAgICAgIFBJQ19TWU0oX0NfTEFCRUwobG9uZ2ptcGVycm9yKSwgUExUKQotICAgIGJsICAgICAgUElDX1NZTShfQ19MQUJFTChhYm9ydCksIFBMVCkKKy5MX2ZhaWw6CisgICAgYmwgICAgICBQSUNfU1lNKGxvbmdqbXBlcnJvciwgUExUKQorICAgIGJsICAgICAgUElDX1NZTShhYm9ydCwgUExUKQogICAgIGIgICAgICAgIC4gLSA4ICAgICAgIC8qIENhbm5vdCBnZXQgaGVyZSAqLwogRU5EKF9sb25nam1wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9iemVyb19hcm02NC5jIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9iemVyb19hcm02NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWY5MjBjLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvYnplcm9fYXJtNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi12b2lkIGJ6ZXJvKHZvaWQqIHMsIHNpemVfdCBuKSB7Ci0gIG1lbXNldChzLCAnXDAnLCBuKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvY2FjaGVmbHVzaF9hcm02NC5jIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9jYWNoZWZsdXNoX2FybTY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNTRmZWUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9jYWNoZWZsdXNoX2FybTY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qIFRPRE86IFdlIGNhbiBpbXBsZW1lbnQgYSBzcGVjaWFsaXNlZCBjYWNoZWZsdXNoKCkgKi8KLWludCBjYWNoZWZsdXNoIChsb25nIHN0YXJ0LCBsb25nIGVuZCwgbG9uZyBmbGFncyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkgewotICBfX2J1aWx0aW5fX19jbGVhcl9jYWNoZSgoY2hhciopIHN0YXJ0LCAoY2hhciopIGVuZCk7Ci0gIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9mdXRleF9hcm02NC5TIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9mdXRleF9hcm02NC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDUyNzcxLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvZnV0ZXhfYXJtNjQuUworKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi0jZGVmaW5lIEZVVEVYX1dBSVQgMAotI2RlZmluZSBGVVRFWF9XQUtFIDEKLQotLy8gaW50IF9fZnV0ZXhfc3lzY2FsbDQodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgb3AsIGludCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogdGltZW91dCkKLUVOVFJZKF9fZnV0ZXhfc3lzY2FsbDQpCi0gIHN0cCB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgbW92IHgyOSwgc3AKLQotICBzdHIgeDgsIFtzcCwgIy0xNl0hCi0gIG1vdiB4OCwgX19OUl9mdXRleAotICBzdmMgIzAKLSAgbGRyIHg4LCBbc3BdLCAjMTYKLQotICBsZHAgeDI5LCB4MzAsIFtzcF0sICMxNgotICByZXQKLUVORChfX2Z1dGV4X3N5c2NhbGw0KQotCi0vLyBpbnQgX19mdXRleF9zeXNjYWxsMyh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBvcCwgaW50IGNvdW50KQotRU5UUlkoX19mdXRleF9zeXNjYWxsMykKLSAgYiBfX2Z1dGV4X3N5c2NhbGw0Ci1FTkQoX19mdXRleF9zeXNjYWxsMykKLQotLy8gaW50IF9fZnV0ZXhfd2FpdCh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogdGltZW91dCkKLUVOVFJZKF9fZnV0ZXhfd2FpdCkKLSAgc3RwIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICBtb3YgeDI5LCBzcAotCi0gIG1vdiB4MywgeDIKLSAgbW92IHgyLCB4MQotICBtb3YgeDEsICNGVVRFWF9XQUlUCi0KLSAgc3RyIHg4LCBbc3AsICMtMTZdIQotICBtb3YgeDgsIF9fTlJfZnV0ZXgKLSAgc3ZjICMwCi0gIGxkciB4OCwgW3NwXSwgIzE2Ci0KLSAgbGRwIHgyOSwgeDMwLCBbc3BdLCAjMTYKLSAgcmV0Ci1FTkQoX19mdXRleF93YWl0KQotCi0vLyBpbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IGNvdW50KQotRU5UUlkoX19mdXRleF93YWtlKQotICBzdHAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gIG1vdiB4MjksIHNwCi0KLSAgbW92IHgyLCB4MQotICBtb3YgeDEsICNGVVRFWF9XQUtFCi0KLSAgc3RyIHg4LCBbc3AsICMtMTZdIQotICBtb3YgeDgsIF9fTlJfZnV0ZXgKLSAgc3ZjICMwCi0gIGxkciB4OCwgW3NwXSwgIzE2Ci0KLSAgbGRwIHgyOSwgeDMwLCBbc3BdLCAjMTYKLSAgcmV0Ci1FTkQoX19mdXRleF93YWtlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zZXRqbXAuUyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvc2V0am1wLlMKaW5kZXggYjFlYzBhOC4uZjlkMjI2NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zZXRqbXAuUworKysgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3NldGptcC5TCkBAIC0yNiw3ICsyNiw3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NldGptcC5oPgogCiAvKgpAQCAtNDUsNyArNDUsNyBAQAogICAgIHN0cCAgICAgeDAsIHgzMCwgW3NwLCAjLTE2XSEKIAogICAgIG1vdiAgICAgeDAsIHh6cgotICAgIGJsICAgICAgUElDX1NZTShfQ19MQUJFTChzaWdibG9jayksIFBMVCkKKyAgICBibCAgICAgIFBJQ19TWU0oc2lnYmxvY2ssIFBMVCkKICAgICBtb3YgICAgIHcxLCB3MAogCiAgICAgbGRwICAgICB4MCwgeDMwLCBbc3BdLCAjMTYKQEAgLTg1LDcgKzg1LDcgQEAKICAgICBsZHIgICAgIHc5LCAuTF9zZXRqbXBfbWFnaWMKICAgICBsZHIgICAgIHcxMCwgW3gwLCAjKF9KQl9NQUdJQyAqIDQpXQogICAgIGNtcCAgICAgdzksIHcxMAotICAgIGIubmUgICAgYm90Y2gKKyAgICBiLm5lICAgIC5MX2ZhaWwKIAogICAgIC8qIHJlc3RvcmUgY29yZSByZWdpc3RlcnMgKi8KICAgICBsZHAgICAgIHgzMCwgeDEwLCBbeDAsICMoX0pCX0NPUkVfQkFTRSAqIDQgKyAxNiAqIDApXQpAQCAtMTA1LDEwICsxMDUsMTAgQEAKIAogICAgIC8qIHZhbGlkYXRlIHNwIChzcCBtb2QgMTYgPSAwKSBhbmQgbHIgKGxyIG1vZCA0ID0gMCkgKi8KICAgICB0c3QgICAgIHgzMCwgIzMKLSAgICBiLm5lICAgIGJvdGNoCisgICAgYi5uZSAgICAuTF9mYWlsCiAgICAgbW92ICAgICB4MTAsIHNwCiAgICAgdHN0ICAgICB4MTAsICMxNQotICAgIGIubmUgICAgYm90Y2gKKyAgICBiLm5lICAgIC5MX2ZhaWwKIAogICAgIC8qIHNldCByZXR1cm4gdmFsdWUgKi8KICAgICBjbXAgICAgIHcxLCB3enIKQEAgLTExNiw4ICsxMTYsOCBAQAogICAgIHJldAogCiAgICAgLyogdmFsaWRhdGlvbiBmYWlsZWQsIGRpZSBkaWUgZGllICovCi1ib3RjaDoKLSAgICBibCAgICAgIFBJQ19TWU0oX0NfTEFCRUwobG9uZ2ptcGVycm9yKSwgUExUKQotICAgIGJsICAgICAgUElDX1NZTShfQ19MQUJFTChhYm9ydCksIFBMVCkKKy5MX2ZhaWw6CisgICAgYmwgICAgICBQSUNfU1lNKGxvbmdqbXBlcnJvciwgUExUKQorICAgIGJsICAgICAgUElDX1NZTShhYm9ydCwgUExUKQogICAgIGIgICAgICAgLiAtIDggICAgICAgLyogQ2Fubm90IGdldCBoZXJlICovCiBFTkQobG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvc2lnc2V0am1wLlMgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3NpZ3NldGptcC5TCmluZGV4IDNhZmNlYWIuLjRmZGIzNjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvc2lnc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy9zaWdzZXRqbXAuUwpAQCAtMjYsNyArMjYsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KIAogLyoKQEAgLTM1LDggKzM1LDggQEAKICAqLwogCiBFTlRSWShzaWdzZXRqbXApCi0gICAgY2J6ICAgICB3MSwgUElDX1NZTShfQ19MQUJFTChfc2V0am1wKSwgUExUKQotICAgIGIgICAgICAgUElDX1NZTShfQ19MQUJFTChzZXRqbXApLCBQTFQpCisgICAgY2J6ICAgICB3MSwgUElDX1NZTShfc2V0am1wLCBQTFQpCisgICAgYiAgICAgICBQSUNfU1lNKHNldGptcCwgUExUKQogRU5EKHNpZ3NldGptcCkKIAogLkxfc2V0am1wX21hZ2ljOgpAQCAtNDYsNiArNDYsNiBAQAogICAgIGxkciAgICAgdzIsIC5MX3NldGptcF9tYWdpYwogICAgIGxkciAgICAgdzMsIFt4MF0KICAgICBjbXAgICAgIHcyLCB3MwotICAgIGIuZXEgICAgUElDX1NZTShfQ19MQUJFTChfbG9uZ2ptcCksIFBMVCkKLSAgICBiICAgICAgIFBJQ19TWU0oX0NfTEFCRUwobG9uZ2ptcCksIFBMVCkKKyAgICBiLmVxICAgIFBJQ19TWU0oX2xvbmdqbXAsIFBMVCkKKyAgICBiICAgICAgIFBJQ19TWU0obG9uZ2ptcCwgUExUKQogRU5EKHNpZ2xvbmdqbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3N5c2NhbGwuUyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvc3lzY2FsbC5TCmluZGV4IGU1YmUxZDUuLjgzODlmOTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvc3lzY2FsbC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvc3lzY2FsbC5TCkBAIC0yOSwxMyArMjksNiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzeXNjYWxsKQotICAgIC8qIGNyZWF0ZSBBQVBDUyBmcmFtZSBwb2ludGVyICovCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0KLSAgICAvKiBzdG9yZSB4OCAqLwotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICAvKiBNb3ZlIHN5c2NhbGwgTm8uIGZyb20geDAgdG8geDggKi8KICAgICBtb3YgICAgIHg4LCB4MAogICAgIC8qIE1vdmUgc3lzY2FsbCBwYXJhbWV0ZXJzIGZyb20geDEgdGhydSB4NiB0byB4MCB0aHJ1IHg1ICovCkBAIC00NywxNCArNDAsMTAgQEAKICAgICBtb3YgICAgIHg1LCB4NgogICAgIHN2YyAgICAgIzAKIAotICAgIC8qIHJlc3RvcmUgeDggKi8KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIC8qIGNoZWNrIGlmIHN5c2NhbGwgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5ICovCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzeXNjYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2Jpb25pYy92Zm9yay5TIGIvbGliYy9hcmNoLWFybTY0L2Jpb25pYy92Zm9yay5TCmluZGV4IDUyMDA5ZTIuLmI2YTY3MmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9iaW9uaWMvdmZvcmsuUworKysgYi9saWJjL2FyY2gtYXJtNjQvYmlvbmljL3Zmb3JrLlMKQEAgLTM3LDE0ICszNywxMiBAQAogICAgIG1vdiAgICAgeDMsIHh6cgogICAgIG1vdiAgICAgeDQsIHh6cgogCi0gICAgc3RyICAgICB4OCwgW3NwLCAjLTE2XSEKICAgICBtb3YgICAgIHg4LCBfX05SX2Nsb25lCiAgICAgc3ZjICAgICAjMAotICAgIGxkciAgICAgeDgsIFtzcF0sICMxNgogCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORCh2Zm9yaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9kZW52ZXI2NC9iaW9uaWMvbWVtY3B5LlMgYi9saWJjL2FyY2gtYXJtNjQvZGVudmVyNjQvYmlvbmljL21lbWNweS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMGYwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZGVudmVyNjQvYmlvbmljL21lbWNweS5TCkBAIC0wLDAgKzEsMjA1IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTIsIExpbmFybyBMaW1pdGVkCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgQ29weXJpZ2h0IChjKSAyMDE0LCBOVklESUEgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTGluYXJvIG5vciB0aGUKKyAgICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKiBBc3N1bXB0aW9uczoKKyAqCisgKiBkZW52ZXIsIEFSTXY4LWEsIEFBcmNoNjQKKyAqIFVuYWxpZ25lZCBhY2Nlc3NlcworICoKKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKyNkZWZpbmUgZHN0aW4JeDAKKyNkZWZpbmUgc3JjCXgxCisjZGVmaW5lIGNvdW50CXgyCisjZGVmaW5lIHRtcDEJeDMKKyNkZWZpbmUgdG1wMXcJdzMKKyNkZWZpbmUgdG1wMgl4NAorI2RlZmluZSB0bXAydwl3NAorI2RlZmluZSB0bXAzCXg1CisjZGVmaW5lIHRtcDN3CXc1CisjZGVmaW5lIGRzdAl4NgorCisjZGVmaW5lIEFfbAl4NworI2RlZmluZSBBX2gJeDgKKyNkZWZpbmUgQl9sCXg5CisjZGVmaW5lIEJfaAl4MTAKKyNkZWZpbmUgQ19sCXgxMQorI2RlZmluZSBDX2gJeDEyCisjZGVmaW5lIERfbAl4MTMKKyNkZWZpbmUgRF9oCXgxNAorCisjZGVmaW5lIFFBX2wJcTAKKyNkZWZpbmUgUUFfaAlxMQorI2RlZmluZSBRQl9sCXEyCisjZGVmaW5lIFFCX2gJcTMKKworRU5UUlkobWVtY3B5KQorCisJbW92CWRzdCwgZHN0aW4KKwljbXAJY291bnQsICM2NAorCWIuZ2UJLkxjcHlfbm90X3Nob3J0CisJY21wCWNvdW50LCAjMTUKKwliLmxlCS5MdGFpbDE1dGlueQorCisJLyogRGVhbCB3aXRoIHNtYWxsIGNvcGllcyBxdWlja2x5IGJ5IGRyb3BwaW5nIHN0cmFpZ2h0IGludG8gdGhlCisJICogZXhpdCBibG9jay4gICovCisuTHRhaWw2MzoKKwkvKiBDb3B5IHVwIHRvIDQ4IGJ5dGVzIG9mIGRhdGEuICBBdCB0aGlzIHBvaW50IHdlIG9ubHkgbmVlZCB0aGUKKwkgKiBib3R0b20gNiBiaXRzIG9mIGNvdW50IHRvIGJlIGFjY3VyYXRlLiAgKi8KKwlhbmRzCXRtcDEsIGNvdW50LCAjMHgzMAorCWIuZXEJLkx0YWlsMTUKKwlhZGQJZHN0LCBkc3QsIHRtcDEKKwlhZGQJc3JjLCBzcmMsIHRtcDEKKwljbXAJdG1wMXcsICMweDIwCisJYi5lcQkxZgorCWIubHQJMmYKKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMtNDhdCisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjLTQ4XQorMToKKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMtMzJdCisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjLTMyXQorMjoKKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMtMTZdCisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjLTE2XQorCisuTHRhaWwxNToKKwlhbmRzCWNvdW50LCBjb3VudCwgIzE1CisJYmVxCTFmCisJYWRkCXNyYywgc3JjLCBjb3VudAorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy0xNl0KKwlhZGQJZHN0LCBkc3QsIGNvdW50CisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjLTE2XQorMToKKwlyZXQKKworLkx0YWlsMTV0aW55OgorCS8qIENvcHkgdXAgdG8gMTUgYnl0ZXMgb2YgZGF0YS4gIERvZXMgbm90IGFzc3VtZSBhZGRpdGlvbmFsIGRhdGEKKwkgICBiZWluZyBjb3BpZWQuICAqLworCXRiegljb3VudCwgIzMsIDFmCisJbGRyCXRtcDEsIFtzcmNdLCAjOAorCXN0cgl0bXAxLCBbZHN0XSwgIzgKKzE6CisJdGJ6CWNvdW50LCAjMiwgMWYKKwlsZHIJdG1wMXcsIFtzcmNdLCAjNAorCXN0cgl0bXAxdywgW2RzdF0sICM0CisxOgorCXRiegljb3VudCwgIzEsIDFmCisJbGRyaAl0bXAxdywgW3NyY10sICMyCisJc3RyaAl0bXAxdywgW2RzdF0sICMyCisxOgorCXRiegljb3VudCwgIzAsIDFmCisJbGRyYgl0bXAxdywgW3NyY10KKwlzdHJiCXRtcDF3LCBbZHN0XQorMToKKwlyZXQKKworLkxjcHlfbm90X3Nob3J0OgorCS8qIFdlIGRvbid0IG11Y2ggY2FyZSBhYm91dCB0aGUgYWxpZ25tZW50IG9mIERTVCwgYnV0IHdlIHdhbnQgU1JDCisJICogdG8gYmUgMTI4LWJpdCAoMTYgYnl0ZSkgYWxpZ25lZCBzbyB0aGF0IHdlIGRvbid0IGNyb3NzIGNhY2hlIGxpbmUKKwkgKiBib3VuZGFyaWVzIG9uIGJvdGggbG9hZHMgYW5kIHN0b3Jlcy4gICovCisJbmVnCXRtcDIsIHNyYworCWFuZHMJdG1wMiwgdG1wMiwgIzE1CQkvKiBCeXRlcyB0byByZWFjaCBhbGlnbm1lbnQuICAqLworCWIuZXEJMmYKKwlzdWIJY291bnQsIGNvdW50LCB0bXAyCisJLyogQ29weSBtb3JlIGRhdGEgdGhhbiBuZWVkZWQ7IGl0J3MgZmFzdGVyIHRoYW4ganVtcGluZworCSAqIGFyb3VuZCBjb3B5aW5nIHN1Yi1RdWFkd29yZCBxdWFudGl0aWVzLiAgV2Uga25vdyB0aGF0CisJICogaXQgY2FuJ3Qgb3ZlcnJ1bi4gICovCisJbGRwCUFfbCwgQV9oLCBbc3JjXQorCWFkZAlzcmMsIHNyYywgdG1wMgorCXN0cAlBX2wsIEFfaCwgW2RzdF0KKwlhZGQJZHN0LCBkc3QsIHRtcDIKKwkvKiBUaGVyZSBtYXkgYmUgbGVzcyB0aGFuIDYzIGJ5dGVzIHRvIGdvIG5vdy4gICovCisJY21wCWNvdW50LCAjNjMKKwliLmxlCS5MdGFpbDYzCisyOgorCXN1YnMJY291bnQsIGNvdW50LCAjMTI4CisJYi5nZQkuTGNweV9ib2R5X2xhcmdlCisJLyogTGVzcyB0aGFuIDEyOCBieXRlcyB0byBjb3B5LCBzbyBoYW5kbGUgNjQgaGVyZSBhbmQgdGhlbiBqdW1wCisJICogdG8gdGhlIHRhaWwuICAqLworCWxkcAlRQV9sLCBRQV9oLCBbc3JjXQorCWxkcAlRQl9sLCBRQl9oLCBbc3JjLCAjMzJdCisJc3RwCVFBX2wsIFFBX2gsIFtkc3RdCisJc3RwCVFCX2wsIFFCX2gsIFtkc3QsICMzMl0KKwl0c3QJY291bnQsICMweDNmCisJYWRkCXNyYywgc3JjLCAjNjQKKwlhZGQJZHN0LCBkc3QsICM2NAorCWIubmUJLkx0YWlsNjMKKwlyZXQKKworCS8qIENyaXRpY2FsIGxvb3AuICBTdGFydCBhdCBhIG5ldyBjYWNoZSBsaW5lIGJvdW5kYXJ5LiAgQXNzdW1pbmcKKwkgKiA2NCBieXRlcyBwZXIgbGluZSB0aGlzIGVuc3VyZXMgdGhlIGVudGlyZSBsb29wIGlzIGluIG9uZSBsaW5lLiAgKi8KKwkucDJhbGlnbiA2CisuTGNweV9ib2R5X2xhcmdlOgorCWNtcAljb3VudCwgNjU1MzYKKwliaGkJLkxjcHlfYm9keV9odWdlCisJLyogVGhlcmUgYXJlIGF0IGxlYXN0IDEyOCBieXRlcyB0byBjb3B5LiAgKi8KKwlsZHAJUUFfbCwgUUFfaCwgW3NyYywgIzBdCisJc3ViCWRzdCwgZHN0LCAjMzIJCS8qIFByZS1iaWFzLiAgKi8KKwlsZHAJUUJfbCwgUUJfaCwgW3NyYywgIzMyXSEJLyogc3JjICs9IDY0IC0gUHJlLWJpYXMuICAqLworMToKKwlzdHAJUUFfbCwgUUFfaCwgW2RzdCwgIzMyXQorCWxkcAlRQV9sLCBRQV9oLCBbc3JjLCAjMzJdCisJc3RwCVFCX2wsIFFCX2gsIFtkc3QsICM2NF0hCisJbGRwCVFCX2wsIFFCX2gsIFtzcmMsICM2NF0hCisKKwlzdWJzCWNvdW50LCBjb3VudCwgIzY0CisJYi5nZQkxYgorCisJc3RwCVFBX2wsIFFBX2gsIFtkc3QsICMzMl0KKwlzdHAJUUJfbCwgUUJfaCwgW2RzdCwgIzY0XQorCWFkZAlzcmMsIHNyYywgIzMyCisJYWRkCWRzdCwgZHN0LCAjNjQgKyAzMgorCXRzdAljb3VudCwgIzB4M2YKKwliLm5lCS5MdGFpbDYzCisJcmV0CisuTGNweV9ib2R5X2h1Z2U6CisJLyogVGhlcmUgYXJlIGF0IGxlYXN0IDEyOCBieXRlcyB0byBjb3B5LiAgKi8KKwlsZHAJUUFfbCwgUUFfaCwgW3NyYywgIzBdCisJc3ViCWRzdCwgZHN0LCAjMzIJCS8qIFByZS1iaWFzLiAgKi8KKwlsZHAJUUJfbCwgUUJfaCwgW3NyYywgIzMyXSEKKzE6CisJc3RucAlRQV9sLCBRQV9oLCBbZHN0LCAjMzJdCisJc3RucAlRQl9sLCBRQl9oLCBbZHN0LCAjNjRdCisJbGRwCVFBX2wsIFFBX2gsIFtzcmMsICMzMl0KKwlsZHAJUUJfbCwgUUJfaCwgW3NyYywgIzY0XSEKKwlhZGQJZHN0LCBkc3QsICM2NAorCisJc3Vicwljb3VudCwgY291bnQsICM2NAorCWIuZ2UJMWIKKworCXN0bnAJUUFfbCwgUUFfaCwgW2RzdCwgIzMyXQorCXN0bnAJUUJfbCwgUUJfaCwgW2RzdCwgIzY0XQorCWFkZAlzcmMsIHNyYywgIzMyCisJYWRkCWRzdCwgZHN0LCAjNjQgKyAzMgorCXRzdAljb3VudCwgIzB4M2YKKwliLm5lCS5MdGFpbDYzCisJcmV0CisKK0VORChtZW1jcHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZGVudmVyNjQvYmlvbmljL21lbXNldC5TIGIvbGliYy9hcmNoLWFybTY0L2RlbnZlcjY0L2Jpb25pYy9tZW1zZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTI3ZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L2RlbnZlcjY0L2Jpb25pYy9tZW1zZXQuUwpAQCAtMCwwICsxLDI3MSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEyLCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIENvcHlyaWdodCAoYykgMjAxNCwgTlZJRElBIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogQXNzdW1wdGlvbnM6CisgKgorICogZGVudmVyLCBBUk12OC1hLCBBQXJjaDY0CisgKiBVbmFsaWduZWQgYWNjZXNzZXMKKyAqCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCisvKiBCeSBkZWZhdWx0IHdlIGFzc3VtZSB0aGF0IHRoZSBEQyBpbnN0cnVjdGlvbiBjYW4gYmUgdXNlZCB0byB6ZXJvCisgICBkYXRhIGJsb2NrcyBtb3JlIGVmZmljaWVudGx5LiAgSW4gc29tZSBjaXJjdW1zdGFuY2VzIHRoaXMgbWlnaHQgYmUKKyAgIHVuc2FmZSwgZm9yIGV4YW1wbGUgaW4gYW4gYXN5bW1ldHJpYyBtdWx0aXByb2Nlc3NvciBlbnZpcm9ubWVudCB3aXRoCisgICBkaWZmZXJlbnQgREMgY2xlYXIgbGVuZ3RocyAobmVpdGhlciB0aGUgdXBwZXIgbm9yIGxvd2VyIGxlbmd0aHMgYXJlCisgICBzYWZlIHRvIHVzZSkuICBUaGUgZmVhdHVyZSBjYW4gYmUgZGlzYWJsZWQgYnkgZGVmaW5pbmcgRE9OVF9VU0VfREMuCisKKyAgIElmIGNvZGUgbWF5IGJlIHJ1biBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB0aGVuIGRlZmluZQorICAgTUFZQkVfVklSVC4gIFRoaXMgd2lsbCBjYXVzZSB0aGUgY29kZSB0byBjYWNoZSB0aGUgc3lzdGVtIHJlZ2lzdGVyCisgICB2YWx1ZXMgcmF0aGVyIHRoYW4gcmUtcmVhZGluZyB0aGVtIGVhY2ggY2FsbC4gICovCisKKyNkZWZpbmUgZHN0aW4JCXgwCisjZGVmaW5lIHZhbAkJdzEKKyNkZWZpbmUgY291bnQJCXgyCisjZGVmaW5lIHRtcDEJCXgzCisjZGVmaW5lIHRtcDF3CQl3MworI2RlZmluZSB0bXAyCQl4NAorI2RlZmluZSB0bXAydwkJdzQKKyNkZWZpbmUgenZhX2xlbl94CXg1CisjZGVmaW5lIHp2YV9sZW4JCXc1CisjZGVmaW5lIHp2YV9iaXRzX3gJeDYKKworI2RlZmluZSBBX2wJCXg3CisjZGVmaW5lIEFfbHcJCXc3CisjZGVmaW5lIGRzdAkJeDgKKyNkZWZpbmUgdG1wM3cJCXc5CisKKyNkZWZpbmUgUUFfbAkJcTAKKworRU5UUlkobWVtc2V0KQorCisJbW92CWRzdCwgZHN0aW4JCS8qIFByZXNlcnZlIHJldHVybiB2YWx1ZS4gICovCisJYW5kcwlBX2x3LCB2YWwsICMyNTUKKyNpZm5kZWYgRE9OVF9VU0VfREMKKyMJYi5lcQkuTHplcm9fbWVtCisjZW5kaWYKKwlvcnIJQV9sdywgQV9sdywgQV9sdywgbHNsICM4CisJb3JyCUFfbHcsIEFfbHcsIEFfbHcsIGxzbCAjMTYKKwlvcnIJQV9sLCBBX2wsIEFfbCwgbHNsICMzMgorLkx0YWlsX21heWJlX2xvbmc6CisJY21wCWNvdW50LCAjMjU2CisJYi5nZQkuTG5vdF9zaG9ydAorLkx0YWlsX21heWJlX3Rpbnk6CisJY21wCWNvdW50LCAjMTUKKwliLmxlCS5MdGFpbDE1dGlueQorLkx0YWlsMjU1OgorCWFuZHMJdG1wMSwgY291bnQsICMweEMwCisJYi5lcQkuTHRhaWw2MworCWR1cAl2MC40cywgQV9sdworCWNtcAl0bXAxdywgIzB4ODAKKwliLmVxCTFmCisJYi5sdAkyZgorCXN0cAlRQV9sLCBRQV9sLCBbZHN0XSwgIzMyCisJc3RwCVFBX2wsIFFBX2wsIFtkc3RdLCAjMzIKKzE6CisJc3RwCVFBX2wsIFFBX2wsIFtkc3RdLCAjMzIKKwlzdHAJUUFfbCwgUUFfbCwgW2RzdF0sICMzMgorMjoKKwlzdHAJUUFfbCwgUUFfbCwgW2RzdF0sICMzMgorCXN0cAlRQV9sLCBRQV9sLCBbZHN0XSwgIzMyCisuTHRhaWw2MzoKKwlhbmRzCXRtcDEsIGNvdW50LCAjMHgzMAorCWIuZXEJLkx0YWlsMTUKKwlhZGQJZHN0LCBkc3QsIHRtcDEKKwljbXAJdG1wMXcsICMweDIwCisJYi5lcQkxZgorCWIubHQJMmYKKwlzdHAJQV9sLCBBX2wsIFtkc3QsICMtNDhdCisxOgorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIy0zMl0KKzI6CisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjLTE2XQorCisuTHRhaWwxNToKKwlhbmQJY291bnQsIGNvdW50LCAjMTUKKwlhZGQJZHN0LCBkc3QsIGNvdW50CisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjLTE2XQkvKiBSZXBlYXQgc29tZS9hbGwgb2YgbGFzdCBzdG9yZS4gKi8KKwlyZXQKKworLkx0YWlsMTV0aW55OgorCS8qIFNldCB1cCB0byAxNSBieXRlcy4gIERvZXMgbm90IGFzc3VtZSBlYXJsaWVyIG1lbW9yeQorCSAgIGJlaW5nIHNldC4gICovCisJdGJ6CWNvdW50LCAjMywgMWYKKwlzdHIJQV9sLCBbZHN0XSwgIzgKKzE6CisJdGJ6CWNvdW50LCAjMiwgMWYKKwlzdHIJQV9sdywgW2RzdF0sICM0CisxOgorCXRiegljb3VudCwgIzEsIDFmCisJc3RyaAlBX2x3LCBbZHN0XSwgIzIKKzE6CisJdGJ6CWNvdW50LCAjMCwgMWYKKwlzdHJiCUFfbHcsIFtkc3RdCisxOgorCXJldAorCisJLyogQ3JpdGljYWwgbG9vcC4gIFN0YXJ0IGF0IGEgbmV3IGNhY2hlIGxpbmUgYm91bmRhcnkuICBBc3N1bWluZworCSAqIDY0IGJ5dGVzIHBlciBsaW5lLCB0aGlzIGVuc3VyZXMgdGhlIGVudGlyZSBsb29wIGlzIGluIG9uZSBsaW5lLiAgKi8KKwkucDJhbGlnbiA2CisuTG5vdF9zaG9ydDoKKwlkdXAJdjAuNHMsIEFfbHcKKwluZWcJdG1wMiwgZHN0CisJYW5kcwl0bXAyLCB0bXAyLCAjMTUKKwliLmVxCTJmCisJLyogQnJpbmcgRFNUIHRvIDEyOC1iaXQgKDE2LWJ5dGUpIGFsaWdubWVudC4gIFdlIGtub3cgdGhhdCB0aGVyZSdzCisJICogbW9yZSB0aGFuIHRoYXQgdG8gc2V0LCBzbyB3ZSBzaW1wbHkgc3RvcmUgMTYgYnl0ZXMgYW5kIGFkdmFuY2UgYnkKKwkgKiB0aGUgYW1vdW50IHJlcXVpcmVkIHRvIHJlYWNoIGFsaWdubWVudC4gICovCisJc3ViCWNvdW50LCBjb3VudCwgdG1wMgorCXN0cAlBX2wsIEFfbCwgW2RzdF0KKwlhZGQJZHN0LCBkc3QsIHRtcDIKKwkvKiBUaGVyZSBtYXkgYmUgbGVzcyB0aGFuIDYzIGJ5dGVzIHRvIGdvIG5vdy4gICovCisJY21wCWNvdW50LCAjMjU1CisJYi5sZQkuTHRhaWwyNTUKKzI6CisJY21wCWNvdW50LCAjMjA5NzE1MgorCWIuZ3QJM2YKKzE6CisJc3ViCWNvdW50LCBjb3VudCwgIzI1NgorMjoKKwlzdHAJUUFfbCwgUUFfbCwgW2RzdF0sICMzMgorCXN0cAlRQV9sLCBRQV9sLCBbZHN0XSwgIzMyCisJc3RwCVFBX2wsIFFBX2wsIFtkc3RdLCAjMzIKKwlzdHAJUUFfbCwgUUFfbCwgW2RzdF0sICMzMgorCXN0cAlRQV9sLCBRQV9sLCBbZHN0XSwgIzMyCisJc3RwCVFBX2wsIFFBX2wsIFtkc3RdLCAjMzIKKwlzdHAJUUFfbCwgUUFfbCwgW2RzdF0sICMzMgorCXN0cAlRQV9sLCBRQV9sLCBbZHN0XSwgIzMyCisJc3Vicwljb3VudCwgY291bnQsICMyNTYKKwliLmdlCTJiCisJdHN0CWNvdW50LCAjMHhmZgorCWIubmUJLkx0YWlsMjU1CisJcmV0CiszOgorCXN1Ygljb3VudCwgY291bnQsICM2NAorNDoKKwlzdWJzCWNvdW50LCBjb3VudCwgIzY0CisJc3RucAlRQV9sLCBRQV9sLCBbZHN0XQorCXN0bnAJUUFfbCwgUUFfbCwgW2RzdCwgIzMyXQorCWFkZAlkc3QsIGRzdCwgIzY0CisJYi5nZQk0YgorCXRzdAljb3VudCwgIzB4M2YKKwliLm5lCS5MdGFpbDYzCisJcmV0CisKKyNpZm5kZWYgRE9OVF9VU0VfREMKKwkvKiBGb3IgemVyb2luZyBtZW1vcnksIGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gdXNlIHRoZSBaVkEgZmVhdHVyZSB0bworCSAqIHplcm8gZW50aXJlICdjYWNoZScgbGluZXMuICAqLworLkx6ZXJvX21lbToKKwltb3YJQV9sLCAjMAorCWNtcAljb3VudCwgIzYzCisJYi5sZQkuTHRhaWxfbWF5YmVfdGlueQorCW5lZwl0bXAyLCBkc3QKKwlhbmRzCXRtcDIsIHRtcDIsICMxNQorCWIuZXEJMWYKKwlzdWIJY291bnQsIGNvdW50LCB0bXAyCisJc3RwCUFfbCwgQV9sLCBbZHN0XQorCWFkZAlkc3QsIGRzdCwgdG1wMgorCWNtcAljb3VudCwgIzYzCisJYi5sZQkuTHRhaWw2MworMToKKwkvKiBGb3IgemVyb2luZyBzbWFsbCBhbW91bnRzIG9mIG1lbW9yeSwgaXQncyBub3Qgd29ydGggc2V0dGluZyB1cAorCSAqIHRoZSBsaW5lLWNsZWFyIGNvZGUuICAqLworCWNtcAljb3VudCwgIzEyOAorCWIubHQJLkxub3Rfc2hvcnQKKyNpZmRlZiBNQVlCRV9WSVJUCisJLyogRm9yIGVmZmljaWVuY3kgd2hlbiB2aXJ0dWFsaXplZCwgd2UgY2FjaGUgdGhlIFpWQSBjYXBhYmlsaXR5LiAgKi8KKwlhZHJwCXRtcDIsIC5MY2FjaGVfY2xlYXIKKwlsZHIJenZhX2xlbiwgW3RtcDIsICM6bG8xMjouTGNhY2hlX2NsZWFyXQorCXRibnoJenZhX2xlbiwgIzMxLCAuTG5vdF9zaG9ydAorCWNibnoJenZhX2xlbiwgLkx6ZXJvX2J5X2xpbmUKKwltcnMJdG1wMSwgZGN6aWRfZWwwCisJdGJ6CXRtcDEsICM0LCAxZgorCS8qIFpWQSBub3QgYXZhaWxhYmxlLiAgUmVtZW1iZXIgdGhpcyBmb3IgbmV4dCB0aW1lLiAgKi8KKwltb3YJenZhX2xlbiwgI34wCisJc3RyCXp2YV9sZW4sIFt0bXAyLCAjOmxvMTI6LkxjYWNoZV9jbGVhcl0KKwliCS5Mbm90X3Nob3J0CisxOgorCW1vdgl0bXAzdywgIzQKKwlhbmQJenZhX2xlbiwgdG1wMXcsICMxNQkvKiBTYWZldHk6IG90aGVyIGJpdHMgcmVzZXJ2ZWQuICAqLworCWxzbAl6dmFfbGVuLCB0bXAzdywgenZhX2xlbgorCXN0cgl6dmFfbGVuLCBbdG1wMiwgIzpsbzEyOi5MY2FjaGVfY2xlYXJdCisjZWxzZQorCW1ycwl0bXAxLCBkY3ppZF9lbDAKKwl0Ym56CXRtcDEsICM0LCAuTG5vdF9zaG9ydAorCW1vdgl0bXAzdywgIzQKKwlhbmQJenZhX2xlbiwgdG1wMXcsICMxNQkvKiBTYWZldHk6IG90aGVyIGJpdHMgcmVzZXJ2ZWQuICAqLworCWxzbAl6dmFfbGVuLCB0bXAzdywgenZhX2xlbgorI2VuZGlmCisKKy5MemVyb19ieV9saW5lOgorCS8qIENvbXB1dGUgaG93IGZhciB3ZSBuZWVkIHRvIGdvIHRvIGJlY29tZSBzdWl0YWJseSBhbGlnbmVkLiAgV2UncmUKKwkgKiBhbHJlYWR5IGF0IHF1YWQtd29yZCBhbGlnbm1lbnQuICAqLworCWNtcAljb3VudCwgenZhX2xlbl94CisJYi5sdAkuTG5vdF9zaG9ydAkJLyogTm90IGVub3VnaCB0byByZWFjaCBhbGlnbm1lbnQuICAqLworCXN1Ygl6dmFfYml0c194LCB6dmFfbGVuX3gsICMxCisJbmVnCXRtcDIsIGRzdAorCWFuZHMJdG1wMiwgdG1wMiwgenZhX2JpdHNfeAorCWIuZXEJMWYJCQkvKiBBbHJlYWR5IGFsaWduZWQuICAqLworCS8qIE5vdCBhbGlnbmVkLCBjaGVjayB0aGF0IHRoZXJlJ3MgZW5vdWdoIHRvIGNvcHkgYWZ0ZXIgYWxpZ25tZW50LiAgKi8KKwlzdWIJdG1wMSwgY291bnQsIHRtcDIKKwljbXAJdG1wMSwgIzY0CisJY2NtcAl0bXAxLCB6dmFfbGVuX3gsICM4LCBnZQkvKiBOWkNWPTBiMTAwMCAqLworCWIubHQJLkxub3Rfc2hvcnQKKwkvKiBXZSBrbm93IHRoYXQgdGhlcmUncyBhdCBsZWFzdCA2NCBieXRlcyB0byB6ZXJvIGFuZCB0aGF0IGl0J3Mgc2FmZQorCSAqIHRvIG92ZXJydW4gYnkgNjQgYnl0ZXMuICAqLworCW1vdgljb3VudCwgdG1wMQorMjoKKwlzdHAJQV9sLCBBX2wsIFtkc3RdCisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjMTZdCisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjMzJdCisJc3Vicwl0bXAyLCB0bXAyLCAjNjQKKwlzdHAJQV9sLCBBX2wsIFtkc3QsICM0OF0KKwlhZGQJZHN0LCBkc3QsICM2NAorCWIuZ2UJMmIKKwkvKiBXZSd2ZSBvdmVycnVuIGEgYml0LCBzbyBhZGp1c3QgZHN0IGRvd253YXJkcy4gICovCisJYWRkCWRzdCwgZHN0LCB0bXAyCisxOgorCXN1Ygljb3VudCwgY291bnQsIHp2YV9sZW5feAorMzoKKwlkYwl6dmEsIGRzdAorCWFkZAlkc3QsIGRzdCwgenZhX2xlbl94CisJc3Vicwljb3VudCwgY291bnQsIHp2YV9sZW5feAorCWIuZ2UJM2IKKwlhbmRzCWNvdW50LCBjb3VudCwgenZhX2JpdHNfeAorCWIubmUJLkx0YWlsX21heWJlX2xvbmcKKwlyZXQKK0VORChtZW1zZXQpCisKKyNpZmRlZiBNQVlCRV9WSVJUCisJLmJzcworCS5wMmFsaWduIDIKKy5MY2FjaGVfY2xlYXI6CisJLnNwYWNlIDQKKyNlbmRpZgorI2VuZGlmIC8qIERPTlRfVVNFX0RDICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZGVudmVyNjQvZGVudmVyNjQubWsgYi9saWJjL2FyY2gtYXJtNjQvZGVudmVyNjQvZGVudmVyNjQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxOWMxMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9kZW52ZXI2NC9kZW52ZXI2NC5tawpAQCAtMCwwICsxLDE0IEBACitsaWJjX2Jpb25pY19zcmNfZmlsZXNfYXJtNjQgKz0gXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY2hyLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY21wLlMgXAorICAgIGFyY2gtYXJtNjQvZGVudmVyNjQvYmlvbmljL21lbWNweS5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbW1vdmUuUyBcCisgICAgYXJjaC1hcm02NC9kZW52ZXI2NC9iaW9uaWMvbWVtc2V0LlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RwY3B5LlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyY2hyLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyY21wLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyY3B5LlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RybGVuLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RybmNtcC5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cm5sZW4uUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy93bWVtbW92ZS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy1uZW9uL2Jpb25pYy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljLW5lb24vYmlvbmljL21lbWNweS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMGY3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy1uZW9uL2Jpb25pYy9tZW1jcHkuUwpAQCAtMCwwICsxLDE3OSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEyLCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogQXNzdW1wdGlvbnM6CisgKgorICogQVJNdjgtYSwgQUFyY2g2NAorICogVW5hbGlnbmVkIGFjY2Vzc2VzCisgKgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworI2RlZmluZSBkc3Rpbgl4MAorI2RlZmluZSBzcmMJeDEKKyNkZWZpbmUgY291bnQJeDIKKyNkZWZpbmUgdG1wMQl4MworI2RlZmluZSB0bXAxdwl3MworI2RlZmluZSB0bXAyCXg0CisjZGVmaW5lIHRtcDJ3CXc0CisjZGVmaW5lIHRtcDMJeDUKKyNkZWZpbmUgdG1wM3cJdzUKKyNkZWZpbmUgZHN0CXg2CisKKyNkZWZpbmUgQV9sCXg3CisjZGVmaW5lIEFfaAl4OAorI2RlZmluZSBCX2wJeDkKKyNkZWZpbmUgQl9oCXgxMAorI2RlZmluZSBDX2wJeDExCisjZGVmaW5lIENfaAl4MTIKKyNkZWZpbmUgRF9sCXgxMworI2RlZmluZSBEX2gJeDE0CisKKyNkZWZpbmUgUUFfbCBxMAorI2RlZmluZSBRQV9oIHExCisjZGVmaW5lIFFCX2wgcTIKKyNkZWZpbmUgUUJfaCBxMworCitFTlRSWShtZW1jcHkpCisKKwltb3YJZHN0LCBkc3RpbgorCWNtcAljb3VudCwgIzY0CisJYi5nZQkuTGNweV9ub3Rfc2hvcnQKKwljbXAJY291bnQsICMxNQorCWIubGUJLkx0YWlsMTV0aW55CisKKwkvKiBEZWFsIHdpdGggc21hbGwgY29waWVzIHF1aWNrbHkgYnkgZHJvcHBpbmcgc3RyYWlnaHQgaW50byB0aGUKKwkgKiBleGl0IGJsb2NrLiAgKi8KKy5MdGFpbDYzOgorCS8qIENvcHkgdXAgdG8gNDggYnl0ZXMgb2YgZGF0YS4gIEF0IHRoaXMgcG9pbnQgd2Ugb25seSBuZWVkIHRoZQorCSAqIGJvdHRvbSA2IGJpdHMgb2YgY291bnQgdG8gYmUgYWNjdXJhdGUuICAqLworCWFuZHMJdG1wMSwgY291bnQsICMweDMwCisJYi5lcQkuTHRhaWwxNQorCWFkZAlkc3QsIGRzdCwgdG1wMQorCWFkZAlzcmMsIHNyYywgdG1wMQorCWNtcAl0bXAxdywgIzB4MjAKKwliLmVxCTFmCisJYi5sdAkyZgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy00OF0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtNDhdCisxOgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy0zMl0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMzJdCisyOgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy0xNl0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMTZdCisKKy5MdGFpbDE1OgorCWFuZHMJY291bnQsIGNvdW50LCAjMTUKKwliZXEJMWYKKwlhZGQJc3JjLCBzcmMsIGNvdW50CisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTE2XQorCWFkZAlkc3QsIGRzdCwgY291bnQKKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMTZdCisxOgorCXJldAorCisuTHRhaWwxNXRpbnk6CisJLyogQ29weSB1cCB0byAxNSBieXRlcyBvZiBkYXRhLiAgRG9lcyBub3QgYXNzdW1lIGFkZGl0aW9uYWwgZGF0YQorCSAgIGJlaW5nIGNvcGllZC4gICovCisJdGJ6CWNvdW50LCAjMywgMWYKKwlsZHIJdG1wMSwgW3NyY10sICM4CisJc3RyCXRtcDEsIFtkc3RdLCAjOAorMToKKwl0YnoJY291bnQsICMyLCAxZgorCWxkcgl0bXAxdywgW3NyY10sICM0CisJc3RyCXRtcDF3LCBbZHN0XSwgIzQKKzE6CisJdGJ6CWNvdW50LCAjMSwgMWYKKwlsZHJoCXRtcDF3LCBbc3JjXSwgIzIKKwlzdHJoCXRtcDF3LCBbZHN0XSwgIzIKKzE6CisJdGJ6CWNvdW50LCAjMCwgMWYKKwlsZHJiCXRtcDF3LCBbc3JjXQorCXN0cmIJdG1wMXcsIFtkc3RdCisxOgorCXJldAorCisuTGNweV9ub3Rfc2hvcnQ6CisJLyogV2UgZG9uJ3QgbXVjaCBjYXJlIGFib3V0IHRoZSBhbGlnbm1lbnQgb2YgRFNULCBidXQgd2Ugd2FudCBTUkMKKwkgKiB0byBiZSAxMjgtYml0ICgxNiBieXRlKSBhbGlnbmVkIHNvIHRoYXQgd2UgZG9uJ3QgY3Jvc3MgY2FjaGUgbGluZQorCSAqIGJvdW5kYXJpZXMgb24gYm90aCBsb2FkcyBhbmQgc3RvcmVzLiAgKi8KKwluZWcJdG1wMiwgc3JjCisJYW5kcwl0bXAyLCB0bXAyLCAjMTUJCS8qIEJ5dGVzIHRvIHJlYWNoIGFsaWdubWVudC4gICovCisJYi5lcQkyZgorCXN1Ygljb3VudCwgY291bnQsIHRtcDIKKwkvKiBDb3B5IG1vcmUgZGF0YSB0aGFuIG5lZWRlZDsgaXQncyBmYXN0ZXIgdGhhbiBqdW1waW5nCisJICogYXJvdW5kIGNvcHlpbmcgc3ViLVF1YWR3b3JkIHF1YW50aXRpZXMuICBXZSBrbm93IHRoYXQKKwkgKiBpdCBjYW4ndCBvdmVycnVuLiAgKi8KKwlsZHAJQV9sLCBBX2gsIFtzcmNdCisJYWRkCXNyYywgc3JjLCB0bXAyCisJc3RwCUFfbCwgQV9oLCBbZHN0XQorCWFkZAlkc3QsIGRzdCwgdG1wMgorCS8qIFRoZXJlIG1heSBiZSBsZXNzIHRoYW4gNjMgYnl0ZXMgdG8gZ28gbm93LiAgKi8KKwljbXAJY291bnQsICM2MworCWIubGUJLkx0YWlsNjMKKzI6CisJc3Vicwljb3VudCwgY291bnQsICMxMjgKKwliLmdlCS5MY3B5X2JvZHlfbGFyZ2UKKwkvKiBMZXNzIHRoYW4gMTI4IGJ5dGVzIHRvIGNvcHksIHNvIGhhbmRsZSA2NCBoZXJlIGFuZCB0aGVuIGp1bXAKKwkgKiB0byB0aGUgdGFpbC4gICovCisJbGRwIFFBX2wsIFFBX2gsIFtzcmNdCisJbGRwIFFCX2wsIFFCX2gsIFtzcmMsICMzMl0KKwlzdHAgUUFfbCwgUUFfaCwgW2RzdF0KKwlzdHAgUUJfbCwgUUJfaCwgW2RzdCwgIzMyXQorCXRzdAljb3VudCwgIzB4M2YKKwlhZGQJc3JjLCBzcmMsICM2NAorCWFkZAlkc3QsIGRzdCwgIzY0CisJYi5uZQkuTHRhaWw2MworCXJldAorCisJLyogQ3JpdGljYWwgbG9vcC4gIFN0YXJ0IGF0IGEgbmV3IGNhY2hlIGxpbmUgYm91bmRhcnkuICBBc3N1bWluZworCSAqIDY0IGJ5dGVzIHBlciBsaW5lIHRoaXMgZW5zdXJlcyB0aGUgZW50aXJlIGxvb3AgaXMgaW4gb25lIGxpbmUuICAqLworCS5wMmFsaWduIDYKKy5MY3B5X2JvZHlfbGFyZ2U6CisJLyogVGhlcmUgYXJlIGF0IGxlYXN0IDEyOCBieXRlcyB0byBjb3B5LiAgKi8KKwlsZHAgUUFfbCwgUUFfaCwgW3NyYywgIzBdCisJc3ViCWRzdCwgZHN0LCAjMzIJCS8qIFByZS1iaWFzLiAgKi8KKwlsZHAgUUJfbCwgUUJfaCwgW3NyYywgIzMyXSEJLyogc3JjICs9IDY0IC0gUHJlLWJpYXMuICAqLworMToKKwlzdHAgUUFfbCwgUUFfaCwgW2RzdCwgIzMyXQorCWxkcCBRQV9sLCBRQV9oLCBbc3JjLCAjMzJdCisJc3RwIFFCX2wsIFFCX2gsIFtkc3QsICM2NF0hCisJbGRwIFFCX2wsIFFCX2gsIFtzcmMsICM2NF0hCisKKwlzdWJzCWNvdW50LCBjb3VudCwgIzY0CisJYi5nZQkxYgorCisJc3RwIFFBX2wsIFFBX2gsIFtkc3QsICMzMl0KKwlzdHAgUUJfbCwgUUJfaCwgW2RzdCwgIzY0XQorCWFkZAlzcmMsIHNyYywgIzMyCisJYWRkCWRzdCwgZHN0LCAjNjQgKyAzMgorCXRzdAljb3VudCwgIzB4M2YKKwliLm5lCS5MdGFpbDYzCisJcmV0CitFTkQobWVtY3B5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMtbmVvbi9nZW5lcmljLW5lb24ubWsgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy1uZW9uL2dlbmVyaWMtbmVvbi5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2UzODYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMtbmVvbi9nZW5lcmljLW5lb24ubWsKQEAgLTAsMCArMSwxMyBAQAorbGliY19iaW9uaWNfc3JjX2ZpbGVzX2FybTY0ICs9IFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbWNoci5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbWNtcC5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbW1vdmUuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHBjcHkuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjaHIuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjbXAuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjcHkuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJsZW4uUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJuY21wLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3Rybmxlbi5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMtbmVvbi9iaW9uaWMvbWVtY3B5LlMgXApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbWNoci5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbWNoci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZWE1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY2hyLlMKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBtZW1jaHIgLSBmaW5kIGEgY2hhcmFjdGVyIGluIGEgbWVtb3J5IHpvbmUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEFSTSBMaW1pdGVkCisgKiBBbGwgcmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBMaW5hcm8gTHRkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBBc3N1bXB0aW9uczoKKyAqCisgKiBBUk12OC1hLCBBQXJjaDY0CisgKiBOZW9uIEF2YWlsYWJsZS4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qIEFyZ3VtZW50cyBhbmQgcmVzdWx0cy4gICovCisjZGVmaW5lIHNyY2luCQl4MAorI2RlZmluZSBjaHJpbgkJdzEKKyNkZWZpbmUgY250aW4JCXgyCisKKyNkZWZpbmUgcmVzdWx0CQl4MAorCisjZGVmaW5lIHNyYwkJeDMKKyNkZWZpbmUJdG1wCQl4NAorI2RlZmluZSB3dG1wMgkJdzUKKyNkZWZpbmUgc3luZAkJeDYKKyNkZWZpbmUgc29mZgkJeDkKKyNkZWZpbmUgY250cmVtCQl4MTAKKworI2RlZmluZSB2cmVwY2hyCQl2MAorI2RlZmluZSB2ZGF0YTEJCXYxCisjZGVmaW5lIHZkYXRhMgkJdjIKKyNkZWZpbmUgdmhhc19jaHIxCXYzCisjZGVmaW5lIHZoYXNfY2hyMgl2NAorI2RlZmluZSB2cmVwbWFzawl2NQorI2RlZmluZSB2ZW5kCQl2NgorCisvKgorICogQ29yZSBhbGdvcml0aG06CisgKgorICogRm9yIGVhY2ggMzItYnl0ZSBjaHVuayB3ZSBjYWxjdWxhdGUgYSA2NC1iaXQgc3luZHJvbWUgdmFsdWUsIHdpdGggdHdvIGJpdHMKKyAqIHBlciBieXRlLiBGb3IgZWFjaCB0dXBsZSwgYml0IDAgaXMgc2V0IGlmIHRoZSByZWxldmFudCBieXRlIG1hdGNoZWQgdGhlCisgKiByZXF1ZXN0ZWQgY2hhcmFjdGVyIGFuZCBiaXQgMSBpcyBub3QgdXNlZCAoZmFzdGVyIHRoYW4gdXNpbmcgYSAzMmJpdAorICogc3luZHJvbWUpLiBTaW5jZSB0aGUgYml0cyBpbiB0aGUgc3luZHJvbWUgcmVmbGVjdCBleGFjdGx5IHRoZSBvcmRlciBpbiB3aGljaAorICogdGhpbmdzIG9jY3VyIGluIHRoZSBvcmlnaW5hbCBzdHJpbmcsIGNvdW50aW5nIHRyYWlsaW5nIHplcm9zIGFsbG93cyB0bworICogaWRlbnRpZnkgZXhhY3RseSB3aGljaCBieXRlIGhhcyBtYXRjaGVkLgorICovCisKK0VOVFJZKG1lbWNocikKKwkvKgorCSAqIE1hZ2ljIGNvbnN0YW50IDB4NDAxMDA0MDEgYWxsb3dzIHVzIHRvIGlkZW50aWZ5IHdoaWNoIGxhbmUgbWF0Y2hlcworCSAqIHRoZSByZXF1ZXN0ZWQgYnl0ZS4KKwkgKi8KKwljYnoJY250aW4sIC5MemVyb19sZW5ndGgKKwltb3YJd3RtcDIsICMweDA0MDEKKwltb3ZrCXd0bXAyLCAjMHg0MDEwLCBsc2wgIzE2CisJZHVwCXZyZXBjaHIuMTZiLCBjaHJpbgorCS8qIFdvcmsgd2l0aCBhbGlnbmVkIDMyLWJ5dGUgY2h1bmtzICovCisJYmljCXNyYywgc3JjaW4sICMzMQorCWR1cAl2cmVwbWFzay40cywgd3RtcDIKKwlhbmRzCXNvZmYsIHNyY2luLCAjMzEKKwlhbmQJY250cmVtLCBjbnRpbiwgIzMxCisJYi5lcQkuTGxvb3AKKworCS8qCisJICogSW5wdXQgc3RyaW5nIGlzIG5vdCAzMi1ieXRlIGFsaWduZWQuIFdlIGNhbGN1bGF0ZSB0aGUgc3luZHJvbWUKKwkgKiB2YWx1ZSBmb3IgdGhlIGFsaWduZWQgMzIgYnl0ZXMgYmxvY2sgY29udGFpbmluZyB0aGUgZmlyc3QgYnl0ZXMKKwkgKiBhbmQgbWFzayB0aGUgaXJyZWxldmFudCBwYXJ0LgorCSAqLworCisJbGQxCXt2ZGF0YTEuMTZiLCB2ZGF0YTIuMTZifSwgW3NyY10sICMzMgorCXN1Ygl0bXAsIHNvZmYsICMzMgorCWFkZHMJY250aW4sIGNudGluLCB0bXAKKwljbWVxCXZoYXNfY2hyMS4xNmIsIHZkYXRhMS4xNmIsIHZyZXBjaHIuMTZiCisJY21lcQl2aGFzX2NocjIuMTZiLCB2ZGF0YTIuMTZiLCB2cmVwY2hyLjE2YgorCWFuZAl2aGFzX2NocjEuMTZiLCB2aGFzX2NocjEuMTZiLCB2cmVwbWFzay4xNmIKKwlhbmQJdmhhc19jaHIyLjE2Yiwgdmhhc19jaHIyLjE2YiwgdnJlcG1hc2suMTZiCisJYWRkcAl2ZW5kLjE2Yiwgdmhhc19jaHIxLjE2Yiwgdmhhc19jaHIyLjE2YgkJLyogMjU2LT4xMjggKi8KKwlhZGRwCXZlbmQuMTZiLCB2ZW5kLjE2YiwgdmVuZC4xNmIJCQkvKiAxMjgtPjY0ICovCisJbW92CXN5bmQsIHZlbmQuMmRbMF0KKwkvKiBDbGVhciB0aGUgc29mZioyIGxvd2VyIGJpdHMgKi8KKwlsc2wJdG1wLCBzb2ZmLCAjMQorCWxzcglzeW5kLCBzeW5kLCB0bXAKKwlsc2wJc3luZCwgc3luZCwgdG1wCisJLyogVGhlIGZpcnN0IGJsb2NrIGNhbiBhbHNvIGJlIHRoZSBsYXN0ICovCisJYi5scwkuTG1hc2tsYXN0CisJLyogSGF2ZSB3ZSBmb3VuZCBzb21ldGhpbmcgYWxyZWFkeT8gKi8KKwljYm56CXN5bmQsIC5MdGFpbAorCisuTGxvb3A6CisJbGQxCXt2ZGF0YTEuMTZiLCB2ZGF0YTIuMTZifSwgW3NyY10sICMzMgorCXN1YnMJY250aW4sIGNudGluLCAjMzIKKwljbWVxCXZoYXNfY2hyMS4xNmIsIHZkYXRhMS4xNmIsIHZyZXBjaHIuMTZiCisJY21lcQl2aGFzX2NocjIuMTZiLCB2ZGF0YTIuMTZiLCB2cmVwY2hyLjE2YgorCS8qIElmIHdlJ3JlIG91dCBvZiBkYXRhIHdlIGZpbmlzaCByZWdhcmRsZXNzIG9mIHRoZSByZXN1bHQgKi8KKwliLmxzCS5MZW5kCisJLyogVXNlIGEgZmFzdCBjaGVjayBmb3IgdGhlIHRlcm1pbmF0aW9uIGNvbmRpdGlvbiAqLworCW9ycgl2ZW5kLjE2Yiwgdmhhc19jaHIxLjE2Yiwgdmhhc19jaHIyLjE2YgorCWFkZHAJdmVuZC4yZCwgdmVuZC4yZCwgdmVuZC4yZAorCW1vdglzeW5kLCB2ZW5kLjJkWzBdCisJLyogV2UncmUgbm90IG91dCBvZiBkYXRhLCBsb29wIGlmIHdlIGhhdmVuJ3QgZm91bmQgdGhlIGNoYXJhY3RlciAqLworCWNieglzeW5kLCAuTGxvb3AKKworLkxlbmQ6CisJLyogVGVybWluYXRpb24gY29uZGl0aW9uIGZvdW5kLCBsZXQncyBjYWxjdWxhdGUgdGhlIHN5bmRyb21lIHZhbHVlICovCisJYW5kCXZoYXNfY2hyMS4xNmIsIHZoYXNfY2hyMS4xNmIsIHZyZXBtYXNrLjE2YgorCWFuZAl2aGFzX2NocjIuMTZiLCB2aGFzX2NocjIuMTZiLCB2cmVwbWFzay4xNmIKKwlhZGRwCXZlbmQuMTZiLCB2aGFzX2NocjEuMTZiLCB2aGFzX2NocjIuMTZiCQkvKiAyNTYtPjEyOCAqLworCWFkZHAJdmVuZC4xNmIsIHZlbmQuMTZiLCB2ZW5kLjE2YgkJCS8qIDEyOC0+NjQgKi8KKwltb3YJc3luZCwgdmVuZC4yZFswXQorCS8qIE9ubHkgZG8gdGhlIGNsZWFyIGZvciB0aGUgbGFzdCBwb3NzaWJsZSBibG9jayAqLworCWIuaGkJLkx0YWlsCisKKy5MbWFza2xhc3Q6CisJLyogQ2xlYXIgdGhlICgzMiAtICgoY250cmVtICsgc29mZikgJSAzMikpICogMiB1cHBlciBiaXRzICovCisJYWRkCXRtcCwgY250cmVtLCBzb2ZmCisJYW5kCXRtcCwgdG1wLCAjMzEKKwlzdWIJdG1wLCB0bXAsICMzMgorCW5lZwl0bXAsIHRtcCwgbHNsICMxCisJbHNsCXN5bmQsIHN5bmQsIHRtcAorCWxzcglzeW5kLCBzeW5kLCB0bXAKKworLkx0YWlsOgorCS8qIENvdW50IHRoZSB0cmFpbGluZyB6ZXJvcyB1c2luZyBiaXQgcmV2ZXJzaW5nICovCisJcmJpdAlzeW5kLCBzeW5kCisJLyogQ29tcGVuc2F0ZSB0aGUgbGFzdCBwb3N0LWluY3JlbWVudCAqLworCXN1YglzcmMsIHNyYywgIzMyCisJLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIGZvdW5kIGEgY2hhcmFjdGVyICovCisJY21wCXN5bmQsICMwCisJLyogQW5kIGNvdW50IHRoZSBsZWFkaW5nIHplcm9zICovCisJY2x6CXN5bmQsIHN5bmQKKwkvKiBDb21wdXRlIHRoZSBwb3RlbnRpYWwgcmVzdWx0ICovCisJYWRkCXJlc3VsdCwgc3JjLCBzeW5kLCBsc3IgIzEKKwkvKiBTZWxlY3QgcmVzdWx0IG9yIE5VTEwgKi8KKwljc2VsCXJlc3VsdCwgeHpyLCByZXN1bHQsIGVxCisJcmV0CisKKy5MemVyb19sZW5ndGg6CisJbW92CXJlc3VsdCwgeHpyCisJcmV0CitFTkQobWVtY2hyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbWNtcC5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbWNtcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDhlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY21wLlMKQEAgLTAsMCArMSwxNTUgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNCwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIEFzc3VtcHRpb25zOgorICoKKyAqIEFSTXY4LWEsIEFBcmNoNjQKKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qIFBhcmFtZXRlcnMgYW5kIHJlc3VsdC4gICovCisjZGVmaW5lIHNyYzEJCXgwCisjZGVmaW5lIHNyYzIJCXgxCisjZGVmaW5lIGxpbWl0CQl4MgorI2RlZmluZSByZXN1bHQJCXgwCisKKy8qIEludGVybmFsIHZhcmlhYmxlcy4gICovCisjZGVmaW5lIGRhdGExCQl4MworI2RlZmluZSBkYXRhMXcJCXczCisjZGVmaW5lIGRhdGEyCQl4NAorI2RlZmluZSBkYXRhMncJCXc0CisjZGVmaW5lIGhhc19udWwJCXg1CisjZGVmaW5lIGRpZmYJCXg2CisjZGVmaW5lIGVuZGxvb3AJCXg3CisjZGVmaW5lIHRtcDEJCXg4CisjZGVmaW5lIHRtcDIJCXg5CisjZGVmaW5lIHRtcDMJCXgxMAorI2RlZmluZSBwb3MJCXgxMQorI2RlZmluZSBsaW1pdF93ZAl4MTIKKyNkZWZpbmUgbWFzawkJeDEzCisKK0VOVFJZKG1lbWNtcCkKKwljYnoJbGltaXQsIC5McmV0MAorCWVvcgl0bXAxLCBzcmMxLCBzcmMyCisJdHN0CXRtcDEsICM3CisJYi5uZQkuTG1pc2FsaWduZWQ4CisJYW5kcwl0bXAxLCBzcmMxLCAjNworCWIubmUJLkxtdXR1YWxfYWxpZ24KKwlhZGQJbGltaXRfd2QsIGxpbWl0LCAjNworCWxzcglsaW1pdF93ZCwgbGltaXRfd2QsICMzCisJLyogU3RhcnQgb2YgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2VjdGlvbiAgLS0gb25lIDY0QiBjYWNoZSBsaW5lLiAgKi8KKy5MbG9vcF9hbGlnbmVkOgorCWxkcglkYXRhMSwgW3NyYzFdLCAjOAorCWxkcglkYXRhMiwgW3NyYzJdLCAjOAorLkxzdGFydF9yZWFsaWduZWQ6CisJc3VicwlsaW1pdF93ZCwgbGltaXRfd2QsICMxCisJZW9yCWRpZmYsIGRhdGExLCBkYXRhMgkvKiBOb24temVybyBpZiBkaWZmZXJlbmNlcyBmb3VuZC4gICovCisJY3NpbnYJZW5kbG9vcCwgZGlmZiwgeHpyLCBuZQkvKiBMYXN0IER3b3JkIG9yIGRpZmZlcmVuY2VzLiAgKi8KKwljYnoJZW5kbG9vcCwgLkxsb29wX2FsaWduZWQKKwkvKiBFbmQgb2YgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2VjdGlvbiAgLS0gb25lIDY0QiBjYWNoZSBsaW5lLiAgKi8KKworCS8qIE5vdCByZWFjaGVkIHRoZSBsaW1pdCwgbXVzdCBoYXZlIGZvdW5kIGEgZGlmZi4gICovCisJY2JueglsaW1pdF93ZCwgLkxub3RfbGltaXQKKworCS8qIExpbWl0ICUgOCA9PSAwID0+IGFsbCBieXRlcyBzaWduaWZpY2FudC4gICovCisJYW5kcwlsaW1pdCwgbGltaXQsICM3CisJYi5lcQkuTG5vdF9saW1pdAorCisJbHNsCWxpbWl0LCBsaW1pdCwgIzMJLyogQml0cyAtPiBieXRlcy4gICovCisJbW92CW1hc2ssICN+MAorI2lmZGVmIF9fQUFSQ0g2NEVCX18KKwlsc3IJbWFzaywgbWFzaywgbGltaXQKKyNlbHNlCisJbHNsCW1hc2ssIG1hc2ssIGxpbWl0CisjZW5kaWYKKwliaWMJZGF0YTEsIGRhdGExLCBtYXNrCisJYmljCWRhdGEyLCBkYXRhMiwgbWFzaworCisJb3JyCWRpZmYsIGRpZmYsIG1hc2sKKy5Mbm90X2xpbWl0OgorCisjaWZuZGVmCV9fQUFSQ0g2NEVCX18KKwlyZXYJZGlmZiwgZGlmZgorCXJldglkYXRhMSwgZGF0YTEKKwlyZXYJZGF0YTIsIGRhdGEyCisjZW5kaWYKKwkvKiBUaGUgTVMtbm9uLXplcm8gYml0IG9mIERJRkYgbWFya3MgZWl0aGVyIHRoZSBmaXJzdCBiaXQKKwkgICB0aGF0IGlzIGRpZmZlcmVudCwgb3IgdGhlIGVuZCBvZiB0aGUgc2lnbmlmaWNhbnQgZGF0YS4KKwkgICBTaGlmdGluZyBsZWZ0IG5vdyB3aWxsIGJyaW5nIHRoZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBpbnRvIHRoZQorCSAgIHRvcCBiaXRzLiAgKi8KKwljbHoJcG9zLCBkaWZmCisJbHNsCWRhdGExLCBkYXRhMSwgcG9zCisJbHNsCWRhdGEyLCBkYXRhMiwgcG9zCisJLyogQnV0IHdlIG5lZWQgdG8gemVyby1leHRlbmQgKGNoYXIgaXMgdW5zaWduZWQpIHRoZSB2YWx1ZSBhbmQgdGhlbgorCSAgIHBlcmZvcm0gYSBzaWduZWQgMzItYml0IHN1YnRyYWN0aW9uLiAgKi8KKwlsc3IJZGF0YTEsIGRhdGExLCAjNTYKKwlzdWIJcmVzdWx0LCBkYXRhMSwgZGF0YTIsIGxzciAjNTYKKwlyZXQKKworLkxtdXR1YWxfYWxpZ246CisJLyogU291cmNlcyBhcmUgbXV0dWFsbHkgYWxpZ25lZCwgYnV0IGFyZSBub3QgY3VycmVudGx5IGF0IGFuCisJICAgYWxpZ25tZW50IGJvdW5kYXJ5LiAgUm91bmQgZG93biB0aGUgYWRkcmVzc2VzIGFuZCB0aGVuIG1hc2sgb2ZmCisJICAgdGhlIGJ5dGVzIHRoYXQgcHJlY2VkZSB0aGUgc3RhcnQgcG9pbnQuICAqLworCWJpYwlzcmMxLCBzcmMxLCAjNworCWJpYwlzcmMyLCBzcmMyLCAjNworCWFkZAlsaW1pdCwgbGltaXQsIHRtcDEJLyogQWRqdXN0IHRoZSBsaW1pdCBmb3IgdGhlIGV4dHJhLiAgKi8KKwlsc2wJdG1wMSwgdG1wMSwgIzMJCS8qIEJ5dGVzIGJleW9uZCBhbGlnbm1lbnQgLT4gYml0cy4gICovCisJbGRyCWRhdGExLCBbc3JjMV0sICM4CisJbmVnCXRtcDEsIHRtcDEJCS8qIEJpdHMgdG8gYWxpZ25tZW50IC02NC4gICovCisJbGRyCWRhdGEyLCBbc3JjMl0sICM4CisJbW92CXRtcDIsICN+MAorI2lmZGVmIF9fQUFSQ0g2NEVCX18KKwkvKiBCaWctZW5kaWFuLiAgRWFybHkgYnl0ZXMgYXJlIGF0IE1TQi4gICovCisJbHNsCXRtcDIsIHRtcDIsIHRtcDEJLyogU2hpZnQgKHRtcDEgJiA2MykuICAqLworI2Vsc2UKKwkvKiBMaXR0bGUtZW5kaWFuLiAgRWFybHkgYnl0ZXMgYXJlIGF0IExTQi4gICovCisJbHNyCXRtcDIsIHRtcDIsIHRtcDEJLyogU2hpZnQgKHRtcDEgJiA2MykuICAqLworI2VuZGlmCisJYWRkCWxpbWl0X3dkLCBsaW1pdCwgIzcKKwlvcnIJZGF0YTEsIGRhdGExLCB0bXAyCisJb3JyCWRhdGEyLCBkYXRhMiwgdG1wMgorCWxzcglsaW1pdF93ZCwgbGltaXRfd2QsICMzCisJYgkuTHN0YXJ0X3JlYWxpZ25lZAorCisuTHJldDA6CisJbW92CXJlc3VsdCwgIzAKKwlyZXQKKworCS5wMmFsaWduIDYKKy5MbWlzYWxpZ25lZDg6CisJc3ViCWxpbWl0LCBsaW1pdCwgIzEKKzE6CisJLyogUGVyaGFwcyB3ZSBjYW4gZG8gYmV0dGVyIHRoYW4gdGhpcy4gICovCisJbGRyYglkYXRhMXcsIFtzcmMxXSwgIzEKKwlsZHJiCWRhdGEydywgW3NyYzJdLCAjMQorCXN1YnMJbGltaXQsIGxpbWl0LCAjMQorCWNjbXAJZGF0YTF3LCBkYXRhMncsICMwLCBjcwkvKiBOWkNWID0gMGIwMDAwLiAgKi8KKwliLmVxCTFiCisJc3ViCXJlc3VsdCwgZGF0YTEsIGRhdGEyCisJcmV0CitFTkQobWVtY21wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbWNweS5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbWNweS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYjFhNzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtY3B5LlMKQEAgLTAsMCArMSwxODQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMiwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIEFzc3VtcHRpb25zOgorICoKKyAqIEFSTXY4LWEsIEFBcmNoNjQKKyAqIFVuYWxpZ25lZCBhY2Nlc3NlcworICoKKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKyNkZWZpbmUgZHN0aW4JeDAKKyNkZWZpbmUgc3JjCXgxCisjZGVmaW5lIGNvdW50CXgyCisjZGVmaW5lIHRtcDEJeDMKKyNkZWZpbmUgdG1wMXcJdzMKKyNkZWZpbmUgdG1wMgl4NAorI2RlZmluZSB0bXAydwl3NAorI2RlZmluZSB0bXAzCXg1CisjZGVmaW5lIHRtcDN3CXc1CisjZGVmaW5lIGRzdAl4NgorCisjZGVmaW5lIEFfbAl4NworI2RlZmluZSBBX2gJeDgKKyNkZWZpbmUgQl9sCXg5CisjZGVmaW5lIEJfaAl4MTAKKyNkZWZpbmUgQ19sCXgxMQorI2RlZmluZSBDX2gJeDEyCisjZGVmaW5lIERfbAl4MTMKKyNkZWZpbmUgRF9oCXgxNAorCitFTlRSWShtZW1jcHkpCisKKwltb3YJZHN0LCBkc3RpbgorCWNtcAljb3VudCwgIzY0CisJYi5nZQkuTGNweV9ub3Rfc2hvcnQKKwljbXAJY291bnQsICMxNQorCWIubGUJLkx0YWlsMTV0aW55CisKKwkvKiBEZWFsIHdpdGggc21hbGwgY29waWVzIHF1aWNrbHkgYnkgZHJvcHBpbmcgc3RyYWlnaHQgaW50byB0aGUKKwkgKiBleGl0IGJsb2NrLiAgKi8KKy5MdGFpbDYzOgorCS8qIENvcHkgdXAgdG8gNDggYnl0ZXMgb2YgZGF0YS4gIEF0IHRoaXMgcG9pbnQgd2Ugb25seSBuZWVkIHRoZQorCSAqIGJvdHRvbSA2IGJpdHMgb2YgY291bnQgdG8gYmUgYWNjdXJhdGUuICAqLworCWFuZHMJdG1wMSwgY291bnQsICMweDMwCisJYi5lcQkuTHRhaWwxNQorCWFkZAlkc3QsIGRzdCwgdG1wMQorCWFkZAlzcmMsIHNyYywgdG1wMQorCWNtcAl0bXAxdywgIzB4MjAKKwliLmVxCTFmCisJYi5sdAkyZgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy00OF0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtNDhdCisxOgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy0zMl0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMzJdCisyOgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIy0xNl0KKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMTZdCisKKy5MdGFpbDE1OgorCWFuZHMJY291bnQsIGNvdW50LCAjMTUKKwliZXEJMWYKKwlhZGQJc3JjLCBzcmMsIGNvdW50CisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTE2XQorCWFkZAlkc3QsIGRzdCwgY291bnQKKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMTZdCisxOgorCXJldAorCisuTHRhaWwxNXRpbnk6CisJLyogQ29weSB1cCB0byAxNSBieXRlcyBvZiBkYXRhLiAgRG9lcyBub3QgYXNzdW1lIGFkZGl0aW9uYWwgZGF0YQorCSAgIGJlaW5nIGNvcGllZC4gICovCisJdGJ6CWNvdW50LCAjMywgMWYKKwlsZHIJdG1wMSwgW3NyY10sICM4CisJc3RyCXRtcDEsIFtkc3RdLCAjOAorMToKKwl0YnoJY291bnQsICMyLCAxZgorCWxkcgl0bXAxdywgW3NyY10sICM0CisJc3RyCXRtcDF3LCBbZHN0XSwgIzQKKzE6CisJdGJ6CWNvdW50LCAjMSwgMWYKKwlsZHJoCXRtcDF3LCBbc3JjXSwgIzIKKwlzdHJoCXRtcDF3LCBbZHN0XSwgIzIKKzE6CisJdGJ6CWNvdW50LCAjMCwgMWYKKwlsZHJiCXRtcDF3LCBbc3JjXQorCXN0cmIJdG1wMXcsIFtkc3RdCisxOgorCXJldAorCisuTGNweV9ub3Rfc2hvcnQ6CisJLyogV2UgZG9uJ3QgbXVjaCBjYXJlIGFib3V0IHRoZSBhbGlnbm1lbnQgb2YgRFNULCBidXQgd2Ugd2FudCBTUkMKKwkgKiB0byBiZSAxMjgtYml0ICgxNiBieXRlKSBhbGlnbmVkIHNvIHRoYXQgd2UgZG9uJ3QgY3Jvc3MgY2FjaGUgbGluZQorCSAqIGJvdW5kYXJpZXMgb24gYm90aCBsb2FkcyBhbmQgc3RvcmVzLiAgKi8KKwluZWcJdG1wMiwgc3JjCisJYW5kcwl0bXAyLCB0bXAyLCAjMTUJCS8qIEJ5dGVzIHRvIHJlYWNoIGFsaWdubWVudC4gICovCisJYi5lcQkyZgorCXN1Ygljb3VudCwgY291bnQsIHRtcDIKKwkvKiBDb3B5IG1vcmUgZGF0YSB0aGFuIG5lZWRlZDsgaXQncyBmYXN0ZXIgdGhhbiBqdW1waW5nCisJICogYXJvdW5kIGNvcHlpbmcgc3ViLVF1YWR3b3JkIHF1YW50aXRpZXMuICBXZSBrbm93IHRoYXQKKwkgKiBpdCBjYW4ndCBvdmVycnVuLiAgKi8KKwlsZHAJQV9sLCBBX2gsIFtzcmNdCisJYWRkCXNyYywgc3JjLCB0bXAyCisJc3RwCUFfbCwgQV9oLCBbZHN0XQorCWFkZAlkc3QsIGRzdCwgdG1wMgorCS8qIFRoZXJlIG1heSBiZSBsZXNzIHRoYW4gNjMgYnl0ZXMgdG8gZ28gbm93LiAgKi8KKwljbXAJY291bnQsICM2MworCWIubGUJLkx0YWlsNjMKKzI6CisJc3Vicwljb3VudCwgY291bnQsICMxMjgKKwliLmdlCS5MY3B5X2JvZHlfbGFyZ2UKKwkvKiBMZXNzIHRoYW4gMTI4IGJ5dGVzIHRvIGNvcHksIHNvIGhhbmRsZSA2NCBoZXJlIGFuZCB0aGVuIGp1bXAKKwkgKiB0byB0aGUgdGFpbC4gICovCisJbGRwCUFfbCwgQV9oLCBbc3JjXQorCWxkcAlCX2wsIEJfaCwgW3NyYywgIzE2XQorCWxkcAlDX2wsIENfaCwgW3NyYywgIzMyXQorCWxkcAlEX2wsIERfaCwgW3NyYywgIzQ4XQorCXN0cAlBX2wsIEFfaCwgW2RzdF0KKwlzdHAJQl9sLCBCX2gsIFtkc3QsICMxNl0KKwlzdHAJQ19sLCBDX2gsIFtkc3QsICMzMl0KKwlzdHAJRF9sLCBEX2gsIFtkc3QsICM0OF0KKwl0c3QJY291bnQsICMweDNmCisJYWRkCXNyYywgc3JjLCAjNjQKKwlhZGQJZHN0LCBkc3QsICM2NAorCWIubmUJLkx0YWlsNjMKKwlyZXQKKworCS8qIENyaXRpY2FsIGxvb3AuICBTdGFydCBhdCBhIG5ldyBjYWNoZSBsaW5lIGJvdW5kYXJ5LiAgQXNzdW1pbmcKKwkgKiA2NCBieXRlcyBwZXIgbGluZSB0aGlzIGVuc3VyZXMgdGhlIGVudGlyZSBsb29wIGlzIGluIG9uZSBsaW5lLiAgKi8KKwkucDJhbGlnbiA2CisuTGNweV9ib2R5X2xhcmdlOgorCS8qIFRoZXJlIGFyZSBhdCBsZWFzdCAxMjggYnl0ZXMgdG8gY29weS4gICovCisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjMF0KKwlzdWIJZHN0LCBkc3QsICMxNgkJLyogUHJlLWJpYXMuICAqLworCWxkcAlCX2wsIEJfaCwgW3NyYywgIzE2XQorCWxkcAlDX2wsIENfaCwgW3NyYywgIzMyXQorCWxkcAlEX2wsIERfaCwgW3NyYywgIzQ4XSEJLyogc3JjICs9IDY0IC0gUHJlLWJpYXMuICAqLworMToKKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMxNl0KKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMxNl0KKwlzdHAJQl9sLCBCX2gsIFtkc3QsICMzMl0KKwlsZHAJQl9sLCBCX2gsIFtzcmMsICMzMl0KKwlzdHAJQ19sLCBDX2gsIFtkc3QsICM0OF0KKwlsZHAJQ19sLCBDX2gsIFtzcmMsICM0OF0KKwlzdHAJRF9sLCBEX2gsIFtkc3QsICM2NF0hCisJbGRwCURfbCwgRF9oLCBbc3JjLCAjNjRdIQorCXN1YnMJY291bnQsIGNvdW50LCAjNjQKKwliLmdlCTFiCisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjMTZdCisJc3RwCUJfbCwgQl9oLCBbZHN0LCAjMzJdCisJc3RwCUNfbCwgQ19oLCBbZHN0LCAjNDhdCisJc3RwCURfbCwgRF9oLCBbZHN0LCAjNjRdCisJYWRkCXNyYywgc3JjLCAjMTYKKwlhZGQJZHN0LCBkc3QsICM2NCArIDE2CisJdHN0CWNvdW50LCAjMHgzZgorCWIubmUJLkx0YWlsNjMKKwlyZXQKK0VORChtZW1jcHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvbWVtbW92ZS5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbW1vdmUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjM2NmEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbW1vdmUuUwpAQCAtMCwwICsxLDM0MSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE0LCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogQXNzdW1wdGlvbnM6CisgKgorICogQVJNdjgtYSwgQUFyY2g2NAorICogVW5hbGlnbmVkIGFjY2Vzc2VzCisgKiB3Y2hhcl90IGlzIDQgYnl0ZXMKKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qIFBhcmFtZXRlcnMgYW5kIHJlc3VsdC4gICovCisjaWZkZWYgQkNPUFkKKyNkZWZpbmUgb3JpZ2RzdGluCXgxCisjZGVmaW5lIG9yaWdzcmMJeDAKKyNlbmRpZgorI2RlZmluZSBkc3Rpbgl4MAorI2RlZmluZSBzcmMJeDEKKyNkZWZpbmUgY291bnQJeDIKKyNkZWZpbmUgdG1wMQl4MworI2RlZmluZSB0bXAxdwl3MworI2RlZmluZSB0bXAyCXg0CisjZGVmaW5lIHRtcDJ3CXc0CisjZGVmaW5lIHRtcDMJeDUKKyNkZWZpbmUgdG1wM3cJdzUKKyNkZWZpbmUgZHN0CXg2CisKKyNkZWZpbmUgQV9sCXg3CisjZGVmaW5lIEFfaAl4OAorI2RlZmluZSBCX2wJeDkKKyNkZWZpbmUgQl9oCXgxMAorI2RlZmluZSBDX2wJeDExCisjZGVmaW5lIENfaAl4MTIKKyNkZWZpbmUgRF9sCXgxMworI2RlZmluZSBEX2gJeDE0CisKKyNpZmRlZiBCQ09QWQorRU5UUlkoYmNvcHkpCisJLyogU3dhcCBzcmMgYW5kIGRzdCBzbyB0aGF0IGEgYnJhbmNoIHRvIG1lbWNweSBkb2Vzbid0IGNhdXNlIGlzc3Vlcy4gKi8KKwltb3YJdG1wMSwgb3JpZ3NyYworCW1vdglvcmlnc3JjLCBvcmlnZHN0aW4KKwltb3YJb3JpZ2RzdGluLCB0bXAxCisjZWxpZiBkZWZpbmVkKFdNRU1NT1ZFKQorRU5UUlkod21lbW1vdmUpCisJbHNsCWNvdW50LCBjb3VudCwgIzIKKyNlbHNlCitFTlRSWShtZW1tb3ZlKQorI2VuZGlmCisJY21wCWRzdGluLCBzcmMKKwliLmxvCS5MZG93bndhcmRzCisJYWRkCXRtcDEsIHNyYywgY291bnQKKwljbXAJZHN0aW4sIHRtcDEKKwliLmhzCW1lbWNweQkJLyogTm8gb3ZlcmxhcC4gICovCisKKwkvKiBVcHdhcmRzIG1vdmUgd2l0aCBwb3RlbnRpYWwgb3ZlcmxhcC4KKwkgKiBOZWVkIHRvIG1vdmUgZnJvbSB0aGUgdGFpbCBiYWNrd2FyZHMuICBTUkMgYW5kIERTVCBwb2ludCBvbmUKKwkgKiBieXRlIGJleW9uZCB0aGUgcmVtYWluaW5nIGRhdGEgdG8gbW92ZS4gICovCisJYWRkCWRzdCwgZHN0aW4sIGNvdW50CisJYWRkCXNyYywgc3JjLCBjb3VudAorCWNtcAljb3VudCwgIzY0CisJYi5nZQkuTG1vdl9ub3Rfc2hvcnRfdXAKKworCS8qIERlYWwgd2l0aCBzbWFsbCBtb3ZlcyBxdWlja2x5IGJ5IGRyb3BwaW5nIHN0cmFpZ2h0IGludG8gdGhlCisJICogZXhpdCBibG9jay4gICovCisuTHRhaWw2M3VwOgorCS8qIE1vdmUgdXAgdG8gNDggYnl0ZXMgb2YgZGF0YS4gIEF0IHRoaXMgcG9pbnQgd2Ugb25seSBuZWVkIHRoZQorCSAqIGJvdHRvbSA2IGJpdHMgb2YgY291bnQgdG8gYmUgYWNjdXJhdGUuICAqLworCWFuZHMJdG1wMSwgY291bnQsICMweDMwCisJYi5lcQkuTHRhaWwxNXVwCisJc3ViCWRzdCwgZHN0LCB0bXAxCisJc3ViCXNyYywgc3JjLCB0bXAxCisJY21wCXRtcDF3LCAjMHgyMAorCWIuZXEJMWYKKwliLmx0CTJmCisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjMzJdCisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjMzJdCisxOgorCWxkcAlBX2wsIEFfaCwgW3NyYywgIzE2XQorCXN0cAlBX2wsIEFfaCwgW2RzdCwgIzE2XQorMjoKKwlsZHAJQV9sLCBBX2gsIFtzcmNdCisJc3RwCUFfbCwgQV9oLCBbZHN0XQorLkx0YWlsMTV1cDoKKwkvKiBNb3ZlIHVwIHRvIDE1IGJ5dGVzIG9mIGRhdGEuICBEb2VzIG5vdCBhc3N1bWUgYWRkaXRpb25hbCBkYXRhCisJICogYmVpbmcgbW92ZWQuICAqLworCXRiegljb3VudCwgIzMsIDFmCisJbGRyCXRtcDEsIFtzcmMsICMtOF0hCisJc3RyCXRtcDEsIFtkc3QsICMtOF0hCisxOgorCXRiegljb3VudCwgIzIsIDFmCisJbGRyCXRtcDF3LCBbc3JjLCAjLTRdIQorCXN0cgl0bXAxdywgW2RzdCwgIy00XSEKKzE6CisJdGJ6CWNvdW50LCAjMSwgMWYKKwlsZHJoCXRtcDF3LCBbc3JjLCAjLTJdIQorCXN0cmgJdG1wMXcsIFtkc3QsICMtMl0hCisxOgorCXRiegljb3VudCwgIzAsIDFmCisJbGRyYgl0bXAxdywgW3NyYywgIy0xXQorCXN0cmIJdG1wMXcsIFtkc3QsICMtMV0KKzE6CisJcmV0CisKKy5MbW92X25vdF9zaG9ydF91cDoKKwkvKiBXZSBkb24ndCBtdWNoIGNhcmUgYWJvdXQgdGhlIGFsaWdubWVudCBvZiBEU1QsIGJ1dCB3ZSB3YW50IFNSQworCSAqIHRvIGJlIDEyOC1iaXQgKDE2IGJ5dGUpIGFsaWduZWQgc28gdGhhdCB3ZSBkb24ndCBjcm9zcyBjYWNoZSBsaW5lCisJICogYm91bmRhcmllcyBvbiBib3RoIGxvYWRzIGFuZCBzdG9yZXMuICAqLworCWFuZHMJdG1wMiwgc3JjLCAjMTUJCS8qIEJ5dGVzIHRvIHJlYWNoIGFsaWdubWVudC4gICovCisJYi5lcQkyZgorCXN1Ygljb3VudCwgY291bnQsIHRtcDIKKwkvKiBNb3ZlIGVub3VnaCBkYXRhIHRvIHJlYWNoIGFsaWdubWVudDsgdW5saWtlIG1lbWNweSwgd2UgaGF2ZSB0bworCSAqIGJlIGF3YXJlIG9mIHRoZSBvdmVybGFwLCB3aGljaCBtZWFucyB3ZSBjYW4ndCBtb3ZlIGRhdGEgdHdpY2UuICAqLworCXRiegl0bXAyLCAjMywgMWYKKwlsZHIJdG1wMSwgW3NyYywgIy04XSEKKwlzdHIJdG1wMSwgW2RzdCwgIy04XSEKKzE6CisJdGJ6CXRtcDIsICMyLCAxZgorCWxkcgl0bXAxdywgW3NyYywgIy00XSEKKwlzdHIJdG1wMXcsIFtkc3QsICMtNF0hCisxOgorCXRiegl0bXAyLCAjMSwgMWYKKwlsZHJoCXRtcDF3LCBbc3JjLCAjLTJdIQorCXN0cmgJdG1wMXcsIFtkc3QsICMtMl0hCisxOgorCXRiegl0bXAyLCAjMCwgMWYKKwlsZHJiCXRtcDF3LCBbc3JjLCAjLTFdIQorCXN0cmIJdG1wMXcsIFtkc3QsICMtMV0hCisxOgorCisJLyogVGhlcmUgbWF5IGJlIGxlc3MgdGhhbiA2MyBieXRlcyB0byBnbyBub3cuICAqLworCWNtcAljb3VudCwgIzYzCisJYi5sZQkuTHRhaWw2M3VwCisyOgorCXN1YnMJY291bnQsIGNvdW50LCAjMTI4CisJYi5nZQkuTG1vdl9ib2R5X2xhcmdlX3VwCisJLyogTGVzcyB0aGFuIDEyOCBieXRlcyB0byBtb3ZlLCBzbyBoYW5kbGUgNjQgaGVyZSBhbmQgdGhlbiBqdW1wCisJICogdG8gdGhlIHRhaWwuICAqLworCWxkcAlBX2wsIEFfaCwgW3NyYywgIy02NF0hCisJbGRwCUJfbCwgQl9oLCBbc3JjLCAjMTZdCisJbGRwCUNfbCwgQ19oLCBbc3JjLCAjMzJdCisJbGRwCURfbCwgRF9oLCBbc3JjLCAjNDhdCisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjLTY0XSEKKwlzdHAJQl9sLCBCX2gsIFtkc3QsICMxNl0KKwlzdHAJQ19sLCBDX2gsIFtkc3QsICMzMl0KKwlzdHAJRF9sLCBEX2gsIFtkc3QsICM0OF0KKwl0c3QJY291bnQsICMweDNmCisJYi5uZQkuTHRhaWw2M3VwCisJcmV0CisKKwkvKiBDcml0aWNhbCBsb29wLiAgU3RhcnQgYXQgYSBuZXcgSWNhY2hlIGxpbmUgYm91bmRhcnkuICBBc3N1bWluZworCSAqIDY0IGJ5dGVzIHBlciBsaW5lIHRoaXMgZW5zdXJlcyB0aGUgZW50aXJlIGxvb3AgaXMgaW4gb25lIGxpbmUuICAqLworCS5wMmFsaWduIDYKKy5MbW92X2JvZHlfbGFyZ2VfdXA6CisJLyogVGhlcmUgYXJlIGF0IGxlYXN0IDEyOCBieXRlcyB0byBtb3ZlLiAgKi8KKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMtMTZdCisJbGRwCUJfbCwgQl9oLCBbc3JjLCAjLTMyXQorCWxkcAlDX2wsIENfaCwgW3NyYywgIy00OF0KKwlsZHAJRF9sLCBEX2gsIFtzcmMsICMtNjRdIQorMToKKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMTZdCisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjLTE2XQorCXN0cAlCX2wsIEJfaCwgW2RzdCwgIy0zMl0KKwlsZHAJQl9sLCBCX2gsIFtzcmMsICMtMzJdCisJc3RwCUNfbCwgQ19oLCBbZHN0LCAjLTQ4XQorCWxkcAlDX2wsIENfaCwgW3NyYywgIy00OF0KKwlzdHAJRF9sLCBEX2gsIFtkc3QsICMtNjRdIQorCWxkcAlEX2wsIERfaCwgW3NyYywgIy02NF0hCisJc3Vicwljb3VudCwgY291bnQsICM2NAorCWIuZ2UJMWIKKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMtMTZdCisJc3RwCUJfbCwgQl9oLCBbZHN0LCAjLTMyXQorCXN0cAlDX2wsIENfaCwgW2RzdCwgIy00OF0KKwlzdHAJRF9sLCBEX2gsIFtkc3QsICMtNjRdIQorCXRzdAljb3VudCwgIzB4M2YKKwliLm5lCS5MdGFpbDYzdXAKKwlyZXQKKworCisuTGRvd253YXJkczoKKwkvKiBGb3IgYSBkb3dud2FyZHMgbW92ZSB3ZSBjYW4gc2FmZWx5IHVzZSBtZW1jcHkgcHJvdmlkZWQgdGhhdAorCSAqIERTVCBpcyBtb3JlIHRoYW4gMTYgYnl0ZXMgYXdheSBmcm9tIFNSQy4gICovCisJc3ViCXRtcDEsIHNyYywgIzE2CisJY21wCWRzdGluLCB0bXAxCisJYi5scwltZW1jcHkJCS8qIE1heSBvdmVybGFwLCBidXQgbm90IGNyaXRpY2FsbHkuICAqLworCisJbW92CWRzdCwgZHN0aW4JLyogUHJlc2VydmUgRFNUSU4gZm9yIHJldHVybiB2YWx1ZS4gICovCisJY21wCWNvdW50LCAjNjQKKwliLmdlCS5MbW92X25vdF9zaG9ydF9kb3duCisKKwkvKiBEZWFsIHdpdGggc21hbGwgbW92ZXMgcXVpY2tseSBieSBkcm9wcGluZyBzdHJhaWdodCBpbnRvIHRoZQorCSAqIGV4aXQgYmxvY2suICAqLworLkx0YWlsNjNkb3duOgorCS8qIE1vdmUgdXAgdG8gNDggYnl0ZXMgb2YgZGF0YS4gIEF0IHRoaXMgcG9pbnQgd2Ugb25seSBuZWVkIHRoZQorCSAqIGJvdHRvbSA2IGJpdHMgb2YgY291bnQgdG8gYmUgYWNjdXJhdGUuICAqLworCWFuZHMJdG1wMSwgY291bnQsICMweDMwCisJYi5lcQkuTHRhaWwxNWRvd24KKwlhZGQJZHN0LCBkc3QsIHRtcDEKKwlhZGQJc3JjLCBzcmMsIHRtcDEKKwljbXAJdG1wMXcsICMweDIwCisJYi5lcQkxZgorCWIubHQJMmYKKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMtNDhdCisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjLTQ4XQorMToKKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMtMzJdCisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjLTMyXQorMjoKKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMtMTZdCisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjLTE2XQorLkx0YWlsMTVkb3duOgorCS8qIE1vdmUgdXAgdG8gMTUgYnl0ZXMgb2YgZGF0YS4gIERvZXMgbm90IGFzc3VtZSBhZGRpdGlvbmFsIGRhdGEKKwkgICBiZWluZyBtb3ZlZC4gICovCisJdGJ6CWNvdW50LCAjMywgMWYKKwlsZHIJdG1wMSwgW3NyY10sICM4CisJc3RyCXRtcDEsIFtkc3RdLCAjOAorMToKKwl0YnoJY291bnQsICMyLCAxZgorCWxkcgl0bXAxdywgW3NyY10sICM0CisJc3RyCXRtcDF3LCBbZHN0XSwgIzQKKzE6CisJdGJ6CWNvdW50LCAjMSwgMWYKKwlsZHJoCXRtcDF3LCBbc3JjXSwgIzIKKwlzdHJoCXRtcDF3LCBbZHN0XSwgIzIKKzE6CisJdGJ6CWNvdW50LCAjMCwgMWYKKwlsZHJiCXRtcDF3LCBbc3JjXQorCXN0cmIJdG1wMXcsIFtkc3RdCisxOgorCXJldAorCisuTG1vdl9ub3Rfc2hvcnRfZG93bjoKKwkvKiBXZSBkb24ndCBtdWNoIGNhcmUgYWJvdXQgdGhlIGFsaWdubWVudCBvZiBEU1QsIGJ1dCB3ZSB3YW50IFNSQworCSAqIHRvIGJlIDEyOC1iaXQgKDE2IGJ5dGUpIGFsaWduZWQgc28gdGhhdCB3ZSBkb24ndCBjcm9zcyBjYWNoZSBsaW5lCisJICogYm91bmRhcmllcyBvbiBib3RoIGxvYWRzIGFuZCBzdG9yZXMuICAqLworCW5lZwl0bXAyLCBzcmMKKwlhbmRzCXRtcDIsIHRtcDIsICMxNQkJLyogQnl0ZXMgdG8gcmVhY2ggYWxpZ25tZW50LiAgKi8KKwliLmVxCTJmCisJc3ViCWNvdW50LCBjb3VudCwgdG1wMgorCS8qIE1vdmUgZW5vdWdoIGRhdGEgdG8gcmVhY2ggYWxpZ25tZW50OyB1bmxpa2UgbWVtY3B5LCB3ZSBoYXZlIHRvCisJICogYmUgYXdhcmUgb2YgdGhlIG92ZXJsYXAsIHdoaWNoIG1lYW5zIHdlIGNhbid0IG1vdmUgZGF0YSB0d2ljZS4gICovCisJdGJ6CXRtcDIsICMzLCAxZgorCWxkcgl0bXAxLCBbc3JjXSwgIzgKKwlzdHIJdG1wMSwgW2RzdF0sICM4CisxOgorCXRiegl0bXAyLCAjMiwgMWYKKwlsZHIJdG1wMXcsIFtzcmNdLCAjNAorCXN0cgl0bXAxdywgW2RzdF0sICM0CisxOgorCXRiegl0bXAyLCAjMSwgMWYKKwlsZHJoCXRtcDF3LCBbc3JjXSwgIzIKKwlzdHJoCXRtcDF3LCBbZHN0XSwgIzIKKzE6CisJdGJ6CXRtcDIsICMwLCAxZgorCWxkcmIJdG1wMXcsIFtzcmNdLCAjMQorCXN0cmIJdG1wMXcsIFtkc3RdLCAjMQorMToKKworCS8qIFRoZXJlIG1heSBiZSBsZXNzIHRoYW4gNjMgYnl0ZXMgdG8gZ28gbm93LiAgKi8KKwljbXAJY291bnQsICM2MworCWIubGUJLkx0YWlsNjNkb3duCisyOgorCXN1YnMJY291bnQsIGNvdW50LCAjMTI4CisJYi5nZQkuTG1vdl9ib2R5X2xhcmdlX2Rvd24KKwkvKiBMZXNzIHRoYW4gMTI4IGJ5dGVzIHRvIG1vdmUsIHNvIGhhbmRsZSA2NCBoZXJlIGFuZCB0aGVuIGp1bXAKKwkgKiB0byB0aGUgdGFpbC4gICovCisJbGRwCUFfbCwgQV9oLCBbc3JjXQorCWxkcAlCX2wsIEJfaCwgW3NyYywgIzE2XQorCWxkcAlDX2wsIENfaCwgW3NyYywgIzMyXQorCWxkcAlEX2wsIERfaCwgW3NyYywgIzQ4XQorCXN0cAlBX2wsIEFfaCwgW2RzdF0KKwlzdHAJQl9sLCBCX2gsIFtkc3QsICMxNl0KKwlzdHAJQ19sLCBDX2gsIFtkc3QsICMzMl0KKwlzdHAJRF9sLCBEX2gsIFtkc3QsICM0OF0KKwl0c3QJY291bnQsICMweDNmCisJYWRkCXNyYywgc3JjLCAjNjQKKwlhZGQJZHN0LCBkc3QsICM2NAorCWIubmUJLkx0YWlsNjNkb3duCisJcmV0CisKKwkvKiBDcml0aWNhbCBsb29wLiAgU3RhcnQgYXQgYSBuZXcgY2FjaGUgbGluZSBib3VuZGFyeS4gIEFzc3VtaW5nCisJICogNjQgYnl0ZXMgcGVyIGxpbmUgdGhpcyBlbnN1cmVzIHRoZSBlbnRpcmUgbG9vcCBpcyBpbiBvbmUgbGluZS4gICovCisJLnAyYWxpZ24gNgorLkxtb3ZfYm9keV9sYXJnZV9kb3duOgorCS8qIFRoZXJlIGFyZSBhdCBsZWFzdCAxMjggYnl0ZXMgdG8gbW92ZS4gICovCisJbGRwCUFfbCwgQV9oLCBbc3JjLCAjMF0KKwlzdWIJZHN0LCBkc3QsICMxNgkJLyogUHJlLWJpYXMuICAqLworCWxkcAlCX2wsIEJfaCwgW3NyYywgIzE2XQorCWxkcAlDX2wsIENfaCwgW3NyYywgIzMyXQorCWxkcAlEX2wsIERfaCwgW3NyYywgIzQ4XSEJLyogc3JjICs9IDY0IC0gUHJlLWJpYXMuICAqLworMToKKwlzdHAJQV9sLCBBX2gsIFtkc3QsICMxNl0KKwlsZHAJQV9sLCBBX2gsIFtzcmMsICMxNl0KKwlzdHAJQl9sLCBCX2gsIFtkc3QsICMzMl0KKwlsZHAJQl9sLCBCX2gsIFtzcmMsICMzMl0KKwlzdHAJQ19sLCBDX2gsIFtkc3QsICM0OF0KKwlsZHAJQ19sLCBDX2gsIFtzcmMsICM0OF0KKwlzdHAJRF9sLCBEX2gsIFtkc3QsICM2NF0hCisJbGRwCURfbCwgRF9oLCBbc3JjLCAjNjRdIQorCXN1YnMJY291bnQsIGNvdW50LCAjNjQKKwliLmdlCTFiCisJc3RwCUFfbCwgQV9oLCBbZHN0LCAjMTZdCisJc3RwCUJfbCwgQl9oLCBbZHN0LCAjMzJdCisJc3RwCUNfbCwgQ19oLCBbZHN0LCAjNDhdCisJc3RwCURfbCwgRF9oLCBbZHN0LCAjNjRdCisJYWRkCXNyYywgc3JjLCAjMTYKKwlhZGQJZHN0LCBkc3QsICM2NCArIDE2CisJdHN0CWNvdW50LCAjMHgzZgorCWIubmUJLkx0YWlsNjNkb3duCisJcmV0CisjaWZkZWYgQkNPUFkKK0VORChiY29weSkKKyNlbGlmIGRlZmluZWQoV01FTU1PVkUpCitFTkQod21lbW1vdmUpCisjZWxzZQorRU5EKG1lbW1vdmUpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzIwNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbXNldC5TCkBAIC0wLDAgKzEsMjQ3IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTIsIExpbmFybyBMaW1pdGVkCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTGluYXJvIG5vciB0aGUKKyAgICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKiBBc3N1bXB0aW9uczoKKyAqCisgKiBBUk12OC1hLCBBQXJjaDY0CisgKiBVbmFsaWduZWQgYWNjZXNzZXMKKyAqCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCisvKiBCeSBkZWZhdWx0IHdlIGFzc3VtZSB0aGF0IHRoZSBEQyBpbnN0cnVjdGlvbiBjYW4gYmUgdXNlZCB0byB6ZXJvCisgICBkYXRhIGJsb2NrcyBtb3JlIGVmZmljaWVudGx5LiAgSW4gc29tZSBjaXJjdW1zdGFuY2VzIHRoaXMgbWlnaHQgYmUKKyAgIHVuc2FmZSwgZm9yIGV4YW1wbGUgaW4gYW4gYXN5bW1ldHJpYyBtdWx0aXByb2Nlc3NvciBlbnZpcm9ubWVudCB3aXRoCisgICBkaWZmZXJlbnQgREMgY2xlYXIgbGVuZ3RocyAobmVpdGhlciB0aGUgdXBwZXIgbm9yIGxvd2VyIGxlbmd0aHMgYXJlCisgICBzYWZlIHRvIHVzZSkuCisKKyAgIElmIGNvZGUgbWF5IGJlIHJ1biBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB0aGVuIGRlZmluZQorICAgTUFZQkVfVklSVC4gIFRoaXMgd2lsbCBjYXVzZSB0aGUgY29kZSB0byBjYWNoZSB0aGUgc3lzdGVtIHJlZ2lzdGVyCisgICB2YWx1ZXMgcmF0aGVyIHRoYW4gcmUtcmVhZGluZyB0aGVtIGVhY2ggY2FsbC4gICovCisKKyNkZWZpbmUgZHN0aW4JCXgwCisjaWZkZWYgQlpFUk8KKyNkZWZpbmUgY291bnQJCXgxCisjZWxzZQorI2RlZmluZSBjb3VudAkJeDIKKyNlbmRpZgorI2RlZmluZSB2YWwJCXcxCisjZGVmaW5lIHRtcDEJCXgzCisjZGVmaW5lIHRtcDF3CQl3MworI2RlZmluZSB0bXAyCQl4NAorI2RlZmluZSB0bXAydwkJdzQKKyNkZWZpbmUgenZhX2xlbl94CXg1CisjZGVmaW5lIHp2YV9sZW4JCXc1CisjZGVmaW5lIHp2YV9iaXRzX3gJeDYKKworI2RlZmluZSBBX2wJCXg3CisjZGVmaW5lIEFfbHcJCXc3CisjZGVmaW5lIGRzdAkJeDgKKyNkZWZpbmUgdG1wM3cJCXc5CisKKyNpZmRlZiBCWkVSTworRU5UUlkoYnplcm8pCisjZWxzZQorRU5UUlkobWVtc2V0KQorI2VuZGlmCisKKwltb3YJZHN0LCBkc3RpbgkJLyogUHJlc2VydmUgcmV0dXJuIHZhbHVlLiAgKi8KKyNpZmRlZiBCWkVSTworCWIJLkx6ZXJvX21lbQorI2VuZGlmCisJYW5kcwlBX2x3LCB2YWwsICMyNTUKKwliLmVxCS5MemVyb19tZW0KKwlvcnIJQV9sdywgQV9sdywgQV9sdywgbHNsICM4CisJb3JyCUFfbHcsIEFfbHcsIEFfbHcsIGxzbCAjMTYKKwlvcnIJQV9sLCBBX2wsIEFfbCwgbHNsICMzMgorLkx0YWlsX21heWJlX2xvbmc6CisJY21wCWNvdW50LCAjNjQKKwliLmdlCS5Mbm90X3Nob3J0CisuTHRhaWxfbWF5YmVfdGlueToKKwljbXAJY291bnQsICMxNQorCWIubGUJLkx0YWlsMTV0aW55CisuTHRhaWw2MzoKKwlhbmRzCXRtcDEsIGNvdW50LCAjMHgzMAorCWIuZXEJLkx0YWlsMTUKKwlhZGQJZHN0LCBkc3QsIHRtcDEKKwljbXAJdG1wMXcsICMweDIwCisJYi5lcQkxZgorCWIubHQJMmYKKwlzdHAJQV9sLCBBX2wsIFtkc3QsICMtNDhdCisxOgorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIy0zMl0KKzI6CisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjLTE2XQorCisuTHRhaWwxNToKKwlhbmQJY291bnQsIGNvdW50LCAjMTUKKwlhZGQJZHN0LCBkc3QsIGNvdW50CisJc3RwCUFfbCwgQV9sLCBbZHN0LCAjLTE2XQkvKiBSZXBlYXQgc29tZS9hbGwgb2YgbGFzdCBzdG9yZS4gKi8KKwlyZXQKKworLkx0YWlsMTV0aW55OgorCS8qIFNldCB1cCB0byAxNSBieXRlcy4gIERvZXMgbm90IGFzc3VtZSBlYXJsaWVyIG1lbW9yeQorCSAgIGJlaW5nIHNldC4gICovCisJdGJ6CWNvdW50LCAjMywgMWYKKwlzdHIJQV9sLCBbZHN0XSwgIzgKKzE6CisJdGJ6CWNvdW50LCAjMiwgMWYKKwlzdHIJQV9sdywgW2RzdF0sICM0CisxOgorCXRiegljb3VudCwgIzEsIDFmCisJc3RyaAlBX2x3LCBbZHN0XSwgIzIKKzE6CisJdGJ6CWNvdW50LCAjMCwgMWYKKwlzdHJiCUFfbHcsIFtkc3RdCisxOgorCXJldAorCisJLyogQ3JpdGljYWwgbG9vcC4gIFN0YXJ0IGF0IGEgbmV3IGNhY2hlIGxpbmUgYm91bmRhcnkuICBBc3N1bWluZworCSAqIDY0IGJ5dGVzIHBlciBsaW5lLCB0aGlzIGVuc3VyZXMgdGhlIGVudGlyZSBsb29wIGlzIGluIG9uZSBsaW5lLiAgKi8KKwkucDJhbGlnbiA2CisuTG5vdF9zaG9ydDoKKwluZWcJdG1wMiwgZHN0CisJYW5kcwl0bXAyLCB0bXAyLCAjMTUKKwliLmVxCTJmCisJLyogQnJpbmcgRFNUIHRvIDEyOC1iaXQgKDE2LWJ5dGUpIGFsaWdubWVudC4gIFdlIGtub3cgdGhhdCB0aGVyZSdzCisJICogbW9yZSB0aGFuIHRoYXQgdG8gc2V0LCBzbyB3ZSBzaW1wbHkgc3RvcmUgMTYgYnl0ZXMgYW5kIGFkdmFuY2UgYnkKKwkgKiB0aGUgYW1vdW50IHJlcXVpcmVkIHRvIHJlYWNoIGFsaWdubWVudC4gICovCisJc3ViCWNvdW50LCBjb3VudCwgdG1wMgorCXN0cAlBX2wsIEFfbCwgW2RzdF0KKwlhZGQJZHN0LCBkc3QsIHRtcDIKKwkvKiBUaGVyZSBtYXkgYmUgbGVzcyB0aGFuIDYzIGJ5dGVzIHRvIGdvIG5vdy4gICovCisJY21wCWNvdW50LCAjNjMKKwliLmxlCS5MdGFpbDYzCisyOgorCXN1Yglkc3QsIGRzdCwgIzE2CQkvKiBQcmUtYmlhcy4gICovCisJc3ViCWNvdW50LCBjb3VudCwgIzY0CisxOgorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIzE2XQorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIzMyXQorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIzQ4XQorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIzY0XSEKKwlzdWJzCWNvdW50LCBjb3VudCwgIzY0CisJYi5nZQkxYgorCXRzdAljb3VudCwgIzB4M2YKKwlhZGQJZHN0LCBkc3QsICMxNgorCWIubmUJLkx0YWlsNjMKKwlyZXQKKworCS8qIEZvciB6ZXJvaW5nIG1lbW9yeSwgY2hlY2sgdG8gc2VlIGlmIHdlIGNhbiB1c2UgdGhlIFpWQSBmZWF0dXJlIHRvCisJICogemVybyBlbnRpcmUgJ2NhY2hlJyBsaW5lcy4gICovCisuTHplcm9fbWVtOgorCW1vdglBX2wsICMwCisJY21wCWNvdW50LCAjNjMKKwliLmxlCS5MdGFpbF9tYXliZV90aW55CisJbmVnCXRtcDIsIGRzdAorCWFuZHMJdG1wMiwgdG1wMiwgIzE1CisJYi5lcQkxZgorCXN1Ygljb3VudCwgY291bnQsIHRtcDIKKwlzdHAJQV9sLCBBX2wsIFtkc3RdCisJYWRkCWRzdCwgZHN0LCB0bXAyCisJY21wCWNvdW50LCAjNjMKKwliLmxlCS5MdGFpbDYzCisxOgorCS8qIEZvciB6ZXJvaW5nIHNtYWxsIGFtb3VudHMgb2YgbWVtb3J5LCBpdCdzIG5vdCB3b3J0aCBzZXR0aW5nIHVwCisJICogdGhlIGxpbmUtY2xlYXIgY29kZS4gICovCisJY21wCWNvdW50LCAjMTI4CisJYi5sdAkuTG5vdF9zaG9ydAorI2lmZGVmIE1BWUJFX1ZJUlQKKwkvKiBGb3IgZWZmaWNpZW5jeSB3aGVuIHZpcnR1YWxpemVkLCB3ZSBjYWNoZSB0aGUgWlZBIGNhcGFiaWxpdHkuICAqLworCWFkcnAJdG1wMiwgLkxjYWNoZV9jbGVhcgorCWxkcgl6dmFfbGVuLCBbdG1wMiwgIzpsbzEyOi5MY2FjaGVfY2xlYXJdCisJdGJuegl6dmFfbGVuLCAjMzEsIC5Mbm90X3Nob3J0CisJY2Juegl6dmFfbGVuLCAuTHplcm9fYnlfbGluZQorCW1ycwl0bXAxLCBkY3ppZF9lbDAKKwl0YnoJdG1wMSwgIzQsIDFmCisJLyogWlZBIG5vdCBhdmFpbGFibGUuICBSZW1lbWJlciB0aGlzIGZvciBuZXh0IHRpbWUuICAqLworCW1vdgl6dmFfbGVuLCAjfjAKKwlzdHIJenZhX2xlbiwgW3RtcDIsICM6bG8xMjouTGNhY2hlX2NsZWFyXQorCWIJLkxub3Rfc2hvcnQKKzE6CisJbW92CXRtcDN3LCAjNAorCWFuZAl6dmFfbGVuLCB0bXAxdywgIzE1CS8qIFNhZmV0eTogb3RoZXIgYml0cyByZXNlcnZlZC4gICovCisJbHNsCXp2YV9sZW4sIHRtcDN3LCB6dmFfbGVuCisJc3RyCXp2YV9sZW4sIFt0bXAyLCAjOmxvMTI6LkxjYWNoZV9jbGVhcl0KKyNlbHNlCisJbXJzCXRtcDEsIGRjemlkX2VsMAorCXRibnoJdG1wMSwgIzQsIC5Mbm90X3Nob3J0CisJbW92CXRtcDN3LCAjNAorCWFuZAl6dmFfbGVuLCB0bXAxdywgIzE1CS8qIFNhZmV0eTogb3RoZXIgYml0cyByZXNlcnZlZC4gICovCisJbHNsCXp2YV9sZW4sIHRtcDN3LCB6dmFfbGVuCisjZW5kaWYKKworLkx6ZXJvX2J5X2xpbmU6CisJLyogQ29tcHV0ZSBob3cgZmFyIHdlIG5lZWQgdG8gZ28gdG8gYmVjb21lIHN1aXRhYmx5IGFsaWduZWQuICBXZSdyZQorCSAqIGFscmVhZHkgYXQgcXVhZC13b3JkIGFsaWdubWVudC4gICovCisJY21wCWNvdW50LCB6dmFfbGVuX3gKKwliLmx0CS5Mbm90X3Nob3J0CQkvKiBOb3QgZW5vdWdoIHRvIHJlYWNoIGFsaWdubWVudC4gICovCisJc3ViCXp2YV9iaXRzX3gsIHp2YV9sZW5feCwgIzEKKwluZWcJdG1wMiwgZHN0CisJYW5kcwl0bXAyLCB0bXAyLCB6dmFfYml0c194CisJYi5lcQkxZgkJCS8qIEFscmVhZHkgYWxpZ25lZC4gICovCisJLyogTm90IGFsaWduZWQsIGNoZWNrIHRoYXQgdGhlcmUncyBlbm91Z2ggdG8gY29weSBhZnRlciBhbGlnbm1lbnQuICAqLworCXN1Ygl0bXAxLCBjb3VudCwgdG1wMgorCWNtcAl0bXAxLCAjNjQKKwljY21wCXRtcDEsIHp2YV9sZW5feCwgIzgsIGdlCS8qIE5aQ1Y9MGIxMDAwICovCisJYi5sdAkuTG5vdF9zaG9ydAorCS8qIFdlIGtub3cgdGhhdCB0aGVyZSdzIGF0IGxlYXN0IDY0IGJ5dGVzIHRvIHplcm8gYW5kIHRoYXQgaXQncyBzYWZlCisJICogdG8gb3ZlcnJ1biBieSA2NCBieXRlcy4gICovCisJbW92CWNvdW50LCB0bXAxCisyOgorCXN0cAlBX2wsIEFfbCwgW2RzdF0KKwlzdHAJQV9sLCBBX2wsIFtkc3QsICMxNl0KKwlzdHAJQV9sLCBBX2wsIFtkc3QsICMzMl0KKwlzdWJzCXRtcDIsIHRtcDIsICM2NAorCXN0cAlBX2wsIEFfbCwgW2RzdCwgIzQ4XQorCWFkZAlkc3QsIGRzdCwgIzY0CisJYi5nZQkyYgorCS8qIFdlJ3ZlIG92ZXJydW4gYSBiaXQsIHNvIGFkanVzdCBkc3QgZG93bndhcmRzLiAgKi8KKwlhZGQJZHN0LCBkc3QsIHRtcDIKKzE6CisJc3ViCWNvdW50LCBjb3VudCwgenZhX2xlbl94CiszOgorCWRjCXp2YSwgZHN0CisJYWRkCWRzdCwgZHN0LCB6dmFfbGVuX3gKKwlzdWJzCWNvdW50LCBjb3VudCwgenZhX2xlbl94CisJYi5nZQkzYgorCWFuZHMJY291bnQsIGNvdW50LCB6dmFfYml0c194CisJYi5uZQkuTHRhaWxfbWF5YmVfbG9uZworCXJldAorI2lmZGVmIEJaRVJPCitFTkQoYnplcm8pCisjZWxzZQorRU5EKG1lbXNldCkKKyNlbmRpZgorCisjaWZkZWYgTUFZQkVfVklSVAorCS5ic3MKKwkucDJhbGlnbiAyCisuTGNhY2hlX2NsZWFyOgorCS5zcGFjZSA0CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHBjcHkuUyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHBjcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGE3OTkzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cGNweS5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNkZWZpbmUgU1RQQ1BZCisjaW5jbHVkZSAic3RyaW5nX2NvcHkuUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjaHIuUyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjaHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjliODNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNoci5TCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICAgc3RyY2hyIC0gZmluZCBhIGNoYXJhY3RlciBpbiBhIHN0cmluZworCisgICBDb3B5cmlnaHQgKGMpIDIwMTQsIEFSTSBMaW1pdGVkCisgICBBbGwgcmlnaHRzIFJlc2VydmVkLgorICAgQ29weXJpZ2h0IChjKSAyMDE0LCBMaW5hcm8gTHRkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29tcGFueSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICAgICAgICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogQXNzdW1wdGlvbnM6CisgKgorICogQVJNdjgtYSwgQUFyY2g2NAorICogTmVvbiBBdmFpbGFibGUuCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCisvKiBBcmd1bWVudHMgYW5kIHJlc3VsdHMuICAqLworI2RlZmluZSBzcmNpbgkJeDAKKyNkZWZpbmUgY2hyaW4JCXcxCisKKyNkZWZpbmUgcmVzdWx0CQl4MAorCisjZGVmaW5lIHNyYwkJeDIKKyNkZWZpbmUJdG1wMQkJeDMKKyNkZWZpbmUgd3RtcDIJCXc0CisjZGVmaW5lIHRtcDMJCXg1CisKKyNkZWZpbmUgdnJlcGNocgkJdjAKKyNkZWZpbmUgdmRhdGExCQl2MQorI2RlZmluZSB2ZGF0YTIJCXYyCisjZGVmaW5lIHZoYXNfbnVsMQl2MworI2RlZmluZSB2aGFzX251bDIJdjQKKyNkZWZpbmUgdmhhc19jaHIxCXY1CisjZGVmaW5lIHZoYXNfY2hyMgl2NgorI2RlZmluZSB2cmVwbWFza18wCXY3CisjZGVmaW5lIHZyZXBtYXNrX2MJdjE2CisjZGVmaW5lIHZlbmQxCQl2MTcKKyNkZWZpbmUgdmVuZDIJCXYxOAorCisvKiBDb3JlIGFsZ29yaXRobS4KKworICAgRm9yIGVhY2ggMzItYnl0ZSBodW5rIHdlIGNhbGN1bGF0ZSBhIDY0LWJpdCBzeW5kcm9tZSB2YWx1ZSwgd2l0aAorICAgdHdvIGJpdHMgcGVyIGJ5dGUgKExTQiBpcyBhbHdheXMgaW4gYml0cyAwIGFuZCAxLCBmb3IgYm90aCBiaWcKKyAgIGFuZCBsaXR0bGUtZW5kaWFuIHN5c3RlbXMpLiAgRm9yIGVhY2ggdHVwbGUsIGJpdCAwIGlzIHNldCBpZmYKKyAgIHRoZSByZWxldmFudCBieXRlIG1hdGNoZWQgdGhlIHJlcXVlc3RlZCBjaGFyYWN0ZXI7IGJpdCAxIGlzIHNldAorICAgaWZmIHRoZSByZWxldmFudCBieXRlIG1hdGNoZWQgdGhlIE5VTCBlbmQgb2Ygc3RyaW5nICh3ZSB0cmlnZ2VyCisgICBvZmYgYml0MCBmb3IgdGhlIHNwZWNpYWwgY2FzZSBvZiBsb29raW5nIGZvciBOVUwpLiAgU2luY2UgdGhlIGJpdHMKKyAgIGluIHRoZSBzeW5kcm9tZSByZWZsZWN0IGV4YWN0bHkgdGhlIG9yZGVyIGluIHdoaWNoIHRoaW5ncyBvY2N1cgorICAgaW4gdGhlIG9yaWdpbmFsIHN0cmluZyBhIGNvdW50X3RyYWlsaW5nX3plcm9zKCkgb3BlcmF0aW9uIHdpbGwKKyAgIGlkZW50aWZ5IGV4YWN0bHkgd2hpY2ggYnl0ZSBpcyBjYXVzaW5nIHRoZSB0ZXJtaW5hdGlvbiwgYW5kIHdoeS4gICovCisKKy8qIExvY2FscyBhbmQgdGVtcG9yYXJpZXMuICAqLworCitFTlRSWShzdHJjaHIpCisJLyogTWFnaWMgY29uc3RhbnQgMHg0MDEwMDQwMSB0byBhbGxvdyB1cyB0byBpZGVudGlmeSB3aGljaCBsYW5lCisJICAgbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIGJ5dGUuICBNYWdpYyBjb25zdGFudCAweDgwMjAwODAyIHVzZWQKKwkgICBzaW1pbGFybHkgZm9yIE5VTCB0ZXJtaW5hdGlvbi4gICovCisJbW92CXd0bXAyLCAjMHgwNDAxCisJbW92awl3dG1wMiwgIzB4NDAxMCwgbHNsICMxNgorCWR1cAl2cmVwY2hyLjE2YiwgY2hyaW4KKwliaWMJc3JjLCBzcmNpbiwgIzMxCQkvKiBXb3JrIHdpdGggYWxpZ25lZCAzMi1ieXRlIGh1bmtzLiAgKi8KKwlkdXAJdnJlcG1hc2tfYy40cywgd3RtcDIKKwlhbmRzCXRtcDEsIHNyY2luLCAjMzEKKwlhZGQJdnJlcG1hc2tfMC40cywgdnJlcG1hc2tfYy40cywgdnJlcG1hc2tfYy40cyAvKiBlcXVpdjogbHNsICMxICovCisJYi5lcQkuTGxvb3AKKworCS8qIElucHV0IHN0cmluZyBpcyBub3QgMzItYnl0ZSBhbGlnbmVkLiAgUmF0aGVyIHRoYW4gZm9yY2luZworCSAgIHRoZSBwYWRkaW5nIGJ5dGVzIHRvIGEgc2FmZSB2YWx1ZSwgd2UgY2FsY3VsYXRlIHRoZSBzeW5kcm9tZQorCSAgIGZvciBhbGwgdGhlIGJ5dGVzLCBidXQgdGhlbiBtYXNrIG9mZiB0aG9zZSBiaXRzIG9mIHRoZQorCSAgIHN5bmRyb21lIHRoYXQgYXJlIHJlbGF0ZWQgdG8gdGhlIHBhZGRpbmcuICAqLworCWxkMQl7dmRhdGExLjE2YiwgdmRhdGEyLjE2Yn0sIFtzcmNdLCAjMzIKKwluZWcJdG1wMSwgdG1wMQorCWNtZXEJdmhhc19udWwxLjE2YiwgdmRhdGExLjE2YiwgIzAKKwljbWVxCXZoYXNfY2hyMS4xNmIsIHZkYXRhMS4xNmIsIHZyZXBjaHIuMTZiCisJY21lcQl2aGFzX251bDIuMTZiLCB2ZGF0YTIuMTZiLCAjMAorCWNtZXEJdmhhc19jaHIyLjE2YiwgdmRhdGEyLjE2YiwgdnJlcGNoci4xNmIKKwlhbmQJdmhhc19udWwxLjE2Yiwgdmhhc19udWwxLjE2YiwgdnJlcG1hc2tfMC4xNmIKKwlhbmQJdmhhc19udWwyLjE2Yiwgdmhhc19udWwyLjE2YiwgdnJlcG1hc2tfMC4xNmIKKwlhbmQJdmhhc19jaHIxLjE2Yiwgdmhhc19jaHIxLjE2YiwgdnJlcG1hc2tfYy4xNmIKKwlhbmQJdmhhc19jaHIyLjE2Yiwgdmhhc19jaHIyLjE2YiwgdnJlcG1hc2tfYy4xNmIKKwlvcnIJdmVuZDEuMTZiLCB2aGFzX251bDEuMTZiLCB2aGFzX2NocjEuMTZiCisJb3JyCXZlbmQyLjE2Yiwgdmhhc19udWwyLjE2Yiwgdmhhc19jaHIyLjE2YgorCWxzbAl0bXAxLCB0bXAxLCAjMQorCWFkZHAJdmVuZDEuMTZiLCB2ZW5kMS4xNmIsIHZlbmQyLjE2YgkJLy8gMjU2LT4xMjgKKwltb3YJdG1wMywgI34wCisJYWRkcAl2ZW5kMS4xNmIsIHZlbmQxLjE2YiwgdmVuZDIuMTZiCQkvLyAxMjgtPjY0CisJbHNyCXRtcDEsIHRtcDMsIHRtcDEKKworCW1vdgl0bXAzLCB2ZW5kMS4yZFswXQorCWJpYwl0bXAxLCB0bXAzLCB0bXAxCS8vIE1hc2sgcGFkZGluZyBiaXRzLgorCWNibnoJdG1wMSwgLkx0YWlsCisKKy5MbG9vcDoKKwlsZDEJe3ZkYXRhMS4xNmIsIHZkYXRhMi4xNmJ9LCBbc3JjXSwgIzMyCisJY21lcQl2aGFzX251bDEuMTZiLCB2ZGF0YTEuMTZiLCAjMAorCWNtZXEJdmhhc19jaHIxLjE2YiwgdmRhdGExLjE2YiwgdnJlcGNoci4xNmIKKwljbWVxCXZoYXNfbnVsMi4xNmIsIHZkYXRhMi4xNmIsICMwCisJY21lcQl2aGFzX2NocjIuMTZiLCB2ZGF0YTIuMTZiLCB2cmVwY2hyLjE2YgorCS8qIFVzZSBhIGZhc3QgY2hlY2sgZm9yIHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24uICAqLworCW9ycgl2ZW5kMS4xNmIsIHZoYXNfbnVsMS4xNmIsIHZoYXNfY2hyMS4xNmIKKwlvcnIJdmVuZDIuMTZiLCB2aGFzX251bDIuMTZiLCB2aGFzX2NocjIuMTZiCisJb3JyCXZlbmQxLjE2YiwgdmVuZDEuMTZiLCB2ZW5kMi4xNmIKKwlhZGRwCXZlbmQxLjJkLCB2ZW5kMS4yZCwgdmVuZDEuMmQKKwltb3YJdG1wMSwgdmVuZDEuMmRbMF0KKwljYnoJdG1wMSwgLkxsb29wCisKKwkvKiBUZXJtaW5hdGlvbiBjb25kaXRpb24gZm91bmQuICBOb3cgbmVlZCB0byBlc3RhYmxpc2ggZXhhY3RseSB3aHkKKwkgICB3ZSB0ZXJtaW5hdGVkLiAgKi8KKwlhbmQJdmhhc19udWwxLjE2Yiwgdmhhc19udWwxLjE2YiwgdnJlcG1hc2tfMC4xNmIKKwlhbmQJdmhhc19udWwyLjE2Yiwgdmhhc19udWwyLjE2YiwgdnJlcG1hc2tfMC4xNmIKKwlhbmQJdmhhc19jaHIxLjE2Yiwgdmhhc19jaHIxLjE2YiwgdnJlcG1hc2tfYy4xNmIKKwlhbmQJdmhhc19jaHIyLjE2Yiwgdmhhc19jaHIyLjE2YiwgdnJlcG1hc2tfYy4xNmIKKwlvcnIJdmVuZDEuMTZiLCB2aGFzX251bDEuMTZiLCB2aGFzX2NocjEuMTZiCisJb3JyCXZlbmQyLjE2Yiwgdmhhc19udWwyLjE2Yiwgdmhhc19jaHIyLjE2YgorCWFkZHAJdmVuZDEuMTZiLCB2ZW5kMS4xNmIsIHZlbmQyLjE2YgkJLy8gMjU2LT4xMjgKKwlhZGRwCXZlbmQxLjE2YiwgdmVuZDEuMTZiLCB2ZW5kMi4xNmIJCS8vIDEyOC0+NjQKKworCW1vdgl0bXAxLCB2ZW5kMS4yZFswXQorLkx0YWlsOgorCS8qIENvdW50IHRoZSB0cmFpbGluZyB6ZXJvcywgYnkgYml0IHJldmVyc2luZy4uLiAgKi8KKwlyYml0CXRtcDEsIHRtcDEKKwkvKiBSZS1iaWFzIHNvdXJjZS4gICovCisJc3ViCXNyYywgc3JjLCAjMzIKKwljbHoJdG1wMSwgdG1wMQkvKiBBbmQgY291bnRpbmcgdGhlIGxlYWRpbmcgemVyb3MuICAqLworCS8qIFRtcDEgaXMgZXZlbiBpZiB0aGUgdGFyZ2V0IGNoYXJhZ2VyIHdhcyBmb3VuZCBmaXJzdC4gIE90aGVyd2lzZQorCSAgIHdlJ3ZlIGZvdW5kIHRoZSBlbmQgb2Ygc3RyaW5nIGFuZCB3ZSB3ZXJlbid0IGxvb2tpbmcgZm9yIE5VTC4gICovCisJdHN0CXRtcDEsICMxCisJYWRkCXJlc3VsdCwgc3JjLCB0bXAxLCBsc3IgIzEKKwljc2VsCXJlc3VsdCwgcmVzdWx0LCB4enIsIGVxCisJcmV0CitFTkQoc3RyY2hyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNtcC5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNtcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjY2U0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyY21wLlMKQEAgLTAsMCArMSwxNjIgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMiwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIEFzc3VtcHRpb25zOgorICoKKyAqIEFSTXY4LWEsIEFBcmNoNjQKKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKyNkZWZpbmUgUkVQOF8wMSAweDAxMDEwMTAxMDEwMTAxMDEKKyNkZWZpbmUgUkVQOF83ZiAweDdmN2Y3ZjdmN2Y3ZjdmN2YKKyNkZWZpbmUgUkVQOF84MCAweDgwODA4MDgwODA4MDgwODAKKworLyogUGFyYW1ldGVycyBhbmQgcmVzdWx0LiAgKi8KKyNkZWZpbmUgc3JjMQkJeDAKKyNkZWZpbmUgc3JjMgkJeDEKKyNkZWZpbmUgcmVzdWx0CQl4MAorCisvKiBJbnRlcm5hbCB2YXJpYWJsZXMuICAqLworI2RlZmluZSBkYXRhMQkJeDIKKyNkZWZpbmUgZGF0YTF3CQl3MgorI2RlZmluZSBkYXRhMgkJeDMKKyNkZWZpbmUgZGF0YTJ3CQl3MworI2RlZmluZSBoYXNfbnVsCQl4NAorI2RlZmluZSBkaWZmCQl4NQorI2RlZmluZSBzeW5kcm9tZQl4NgorI2RlZmluZSB0bXAxCQl4NworI2RlZmluZSB0bXAyCQl4OAorI2RlZmluZSB0bXAzCQl4OQorI2RlZmluZSB6ZXJvb25lcwl4MTAKKyNkZWZpbmUgcG9zCQl4MTEKKworCS8qIFN0YXJ0IG9mIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHNlY3Rpb24gIC0tIG9uZSA2NEIgY2FjaGUgbGluZS4gICovCitFTlRSWShzdHJjbXApCisJZW9yCXRtcDEsIHNyYzEsIHNyYzIKKwltb3YJemVyb29uZXMsICNSRVA4XzAxCisJdHN0CXRtcDEsICM3CisJYi5uZQkuTG1pc2FsaWduZWQ4CisJYW5kcwl0bXAxLCBzcmMxLCAjNworCWIubmUJLkxtdXR1YWxfYWxpZ24KKwkvKiBOVUwgZGV0ZWN0aW9uIHdvcmtzIG9uIHRoZSBwcmluY2lwbGUgdGhhdCAoWCAtIDEpICYgKH5YKSAmIDB4ODAKKwkgICAoPT4gKFggLSAxKSAmIH4oWCB8IDB4N2YpKSBpcyBub24temVybyBpZmYgYSBieXRlIGlzIHplcm8sIGFuZAorCSAgIGNhbiBiZSBkb25lIGluIHBhcmFsbGVsIGFjcm9zcyB0aGUgZW50aXJlIHdvcmQuICAqLworLkxsb29wX2FsaWduZWQ6CisJbGRyCWRhdGExLCBbc3JjMV0sICM4CisJbGRyCWRhdGEyLCBbc3JjMl0sICM4CisuTHN0YXJ0X3JlYWxpZ25lZDoKKwlzdWIJdG1wMSwgZGF0YTEsIHplcm9vbmVzCisJb3JyCXRtcDIsIGRhdGExLCAjUkVQOF83ZgorCWVvcglkaWZmLCBkYXRhMSwgZGF0YTIJLyogTm9uLXplcm8gaWYgZGlmZmVyZW5jZXMgZm91bmQuICAqLworCWJpYwloYXNfbnVsLCB0bXAxLCB0bXAyCS8qIE5vbi16ZXJvIGlmIE5VTCB0ZXJtaW5hdG9yLiAgKi8KKwlvcnIJc3luZHJvbWUsIGRpZmYsIGhhc19udWwKKwljYnoJc3luZHJvbWUsIC5MbG9vcF9hbGlnbmVkCisJLyogRW5kIG9mIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHNlY3Rpb24gIC0tIG9uZSA2NEIgY2FjaGUgbGluZS4gICovCisKKyNpZm5kZWYJX19BQVJDSDY0RUJfXworCXJldglzeW5kcm9tZSwgc3luZHJvbWUKKwlyZXYJZGF0YTEsIGRhdGExCisJLyogVGhlIE1TLW5vbi16ZXJvIGJpdCBvZiB0aGUgc3luZHJvbWUgbWFya3MgZWl0aGVyIHRoZSBmaXJzdCBiaXQKKwkgICB0aGF0IGlzIGRpZmZlcmVudCwgb3IgdGhlIHRvcCBiaXQgb2YgdGhlIGZpcnN0IHplcm8gYnl0ZS4KKwkgICBTaGlmdGluZyBsZWZ0IG5vdyB3aWxsIGJyaW5nIHRoZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBpbnRvIHRoZQorCSAgIHRvcCBiaXRzLiAgKi8KKwljbHoJcG9zLCBzeW5kcm9tZQorCXJldglkYXRhMiwgZGF0YTIKKwlsc2wJZGF0YTEsIGRhdGExLCBwb3MKKwlsc2wJZGF0YTIsIGRhdGEyLCBwb3MKKwkvKiBCdXQgd2UgbmVlZCB0byB6ZXJvLWV4dGVuZCAoY2hhciBpcyB1bnNpZ25lZCkgdGhlIHZhbHVlIGFuZCB0aGVuCisJICAgcGVyZm9ybSBhIHNpZ25lZCAzMi1iaXQgc3VidHJhY3Rpb24uICAqLworCWxzcglkYXRhMSwgZGF0YTEsICM1NgorCXN1YglyZXN1bHQsIGRhdGExLCBkYXRhMiwgbHNyICM1NgorCXJldAorI2Vsc2UKKwkvKiBGb3IgYmlnLWVuZGlhbiB3ZSBjYW5ub3QgdXNlIHRoZSB0cmljayB3aXRoIHRoZSBzeW5kcm9tZSB2YWx1ZQorCSAgIGFzIGNhcnJ5LXByb3BhZ2F0aW9uIGNhbiBjb3JydXB0IHRoZSB1cHBlciBiaXRzIGlmIHRoZSB0cmFpbGluZworCSAgIGJ5dGVzIGluIHRoZSBzdHJpbmcgY29udGFpbiAweDAxLiAgKi8KKwkvKiBIb3dldmVyLCBpZiB0aGVyZSBpcyBubyBOVUwgYnl0ZSBpbiB0aGUgZHdvcmQsIHdlIGNhbiBnZW5lcmF0ZQorCSAgIHRoZSByZXN1bHQgZGlyZWN0bHkuICBXZSBjYW4ndCBqdXN0IHN1YnRyYWN0IHRoZSBieXRlcyBhcyB0aGUKKwkgICBNU0IgbWlnaHQgYmUgc2lnbmlmaWNhbnQuICAqLworCWNibnoJaGFzX251bCwgMWYKKwljbXAJZGF0YTEsIGRhdGEyCisJY3NldAlyZXN1bHQsIG5lCisJY25lZwlyZXN1bHQsIHJlc3VsdCwgbG8KKwlyZXQKKzE6CisJLyogUmUtY29tcHV0ZSB0aGUgTlVMLWJ5dGUgZGV0ZWN0aW9uLCB1c2luZyBhIGJ5dGUtcmV2ZXJzZWQgdmFsdWUuICAqLworCXJldgl0bXAzLCBkYXRhMQorCXN1Ygl0bXAxLCB0bXAzLCB6ZXJvb25lcworCW9ycgl0bXAyLCB0bXAzLCAjUkVQOF83ZgorCWJpYwloYXNfbnVsLCB0bXAxLCB0bXAyCisJcmV2CWhhc19udWwsIGhhc19udWwKKwlvcnIJc3luZHJvbWUsIGRpZmYsIGhhc19udWwKKwljbHoJcG9zLCBzeW5kcm9tZQorCS8qIFRoZSBNUy1ub24temVybyBiaXQgb2YgdGhlIHN5bmRyb21lIG1hcmtzIGVpdGhlciB0aGUgZmlyc3QgYml0CisJICAgdGhhdCBpcyBkaWZmZXJlbnQsIG9yIHRoZSB0b3AgYml0IG9mIHRoZSBmaXJzdCB6ZXJvIGJ5dGUuCisJICAgU2hpZnRpbmcgbGVmdCBub3cgd2lsbCBicmluZyB0aGUgY3JpdGljYWwgaW5mb3JtYXRpb24gaW50byB0aGUKKwkgICB0b3AgYml0cy4gICovCisJbHNsCWRhdGExLCBkYXRhMSwgcG9zCisJbHNsCWRhdGEyLCBkYXRhMiwgcG9zCisJLyogQnV0IHdlIG5lZWQgdG8gemVyby1leHRlbmQgKGNoYXIgaXMgdW5zaWduZWQpIHRoZSB2YWx1ZSBhbmQgdGhlbgorCSAgIHBlcmZvcm0gYSBzaWduZWQgMzItYml0IHN1YnRyYWN0aW9uLiAgKi8KKwlsc3IJZGF0YTEsIGRhdGExLCAjNTYKKwlzdWIJcmVzdWx0LCBkYXRhMSwgZGF0YTIsIGxzciAjNTYKKwlyZXQKKyNlbmRpZgorCisuTG11dHVhbF9hbGlnbjoKKwkvKiBTb3VyY2VzIGFyZSBtdXR1YWxseSBhbGlnbmVkLCBidXQgYXJlIG5vdCBjdXJyZW50bHkgYXQgYW4KKwkgICBhbGlnbm1lbnQgYm91bmRhcnkuICBSb3VuZCBkb3duIHRoZSBhZGRyZXNzZXMgYW5kIHRoZW4gbWFzayBvZmYKKwkgICB0aGUgYnl0ZXMgdGhhdCBwcmVjZWVkIHRoZSBzdGFydCBwb2ludC4gICovCisJYmljCXNyYzEsIHNyYzEsICM3CisJYmljCXNyYzIsIHNyYzIsICM3CisJbHNsCXRtcDEsIHRtcDEsICMzCQkvKiBCeXRlcyBiZXlvbmQgYWxpZ25tZW50IC0+IGJpdHMuICAqLworCWxkcglkYXRhMSwgW3NyYzFdLCAjOAorCW5lZwl0bXAxLCB0bXAxCQkvKiBCaXRzIHRvIGFsaWdubWVudCAtNjQuICAqLworCWxkcglkYXRhMiwgW3NyYzJdLCAjOAorCW1vdgl0bXAyLCAjfjAKKyNpZmRlZiBfX0FBUkNINjRFQl9fCisJLyogQmlnLWVuZGlhbi4gIEVhcmx5IGJ5dGVzIGFyZSBhdCBNU0IuICAqLworCWxzbAl0bXAyLCB0bXAyLCB0bXAxCS8qIFNoaWZ0ICh0bXAxICYgNjMpLiAgKi8KKyNlbHNlCisJLyogTGl0dGxlLWVuZGlhbi4gIEVhcmx5IGJ5dGVzIGFyZSBhdCBMU0IuICAqLworCWxzcgl0bXAyLCB0bXAyLCB0bXAxCS8qIFNoaWZ0ICh0bXAxICYgNjMpLiAgKi8KKyNlbmRpZgorCW9ycglkYXRhMSwgZGF0YTEsIHRtcDIKKwlvcnIJZGF0YTIsIGRhdGEyLCB0bXAyCisJYgkuTHN0YXJ0X3JlYWxpZ25lZAorCisuTG1pc2FsaWduZWQ4OgorCS8qIFdlIGNhbiBkbyBiZXR0ZXIgdGhhbiB0aGlzLiAgKi8KKwlsZHJiCWRhdGExdywgW3NyYzFdLCAjMQorCWxkcmIJZGF0YTJ3LCBbc3JjMl0sICMxCisJY21wCWRhdGExdywgIzEKKwljY21wCWRhdGExdywgZGF0YTJ3LCAjMCwgY3MJLyogTlpDViA9IDBiMDAwMC4gICovCisJYi5lcQkuTG1pc2FsaWduZWQ4CisJc3ViCXJlc3VsdCwgZGF0YTEsIGRhdGEyCisJcmV0CitFTkQoc3RyY21wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNweS5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmNweS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MGMzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyY3B5LlMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2RlZmluZSBTVFJDUFkKKyNpbmNsdWRlICJzdHJpbmdfY29weS5TIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmluZ19jb3B5LlMgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RyaW5nX2NvcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmY5NjlkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmluZ19jb3B5LlMKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAgIENvcHlyaWdodCAoYykgMjAxNCwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIEFzc3VtcHRpb25zOgorICoKKyAqIEFSTXY4LWEsIEFBcmNoNjQKKyAqLworCisjaWYgIWRlZmluZWQoU1RQQ1BZKSAmJiAhZGVmaW5lZChTVFJDUFkpCisjZXJyb3IgIkVpdGhlciBTVFBDUFkgb3IgU1RSQ1BZIG11c3QgYmUgZGVmaW5lZC4iCisjZW5kaWYKKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCisvKiBBcmd1bWVudHMgYW5kIHJlc3VsdHMuICAqLworI2lmIGRlZmluZWQoU1RQQ1BZKQorI2RlZmluZSBkc3QgICAgICAgICB4MAorI2VsaWYgZGVmaW5lZChTVFJDUFkpCisjZGVmaW5lIGRzdGluICAgICAgIHgwCisjZW5kaWYKKyNkZWZpbmUgc3JjICAgICAgICAgeDEKKworLyogTG9jYWxzIGFuZCB0ZW1wb3Jhcmllcy4gICovCisjaWYgZGVmaW5lZChTVFJDUFkpCisjZGVmaW5lIGRzdCAgICAgICAgIHgyCisjZW5kaWYKKyNkZWZpbmUgZGF0YTEgICAgICAgeDMKKyNkZWZpbmUgZGF0YTFfdyAgICAgdzMKKyNkZWZpbmUgZGF0YTIgICAgICAgeDQKKyNkZWZpbmUgZGF0YTJfdyAgICAgdzQKKyNkZWZpbmUgaGFzX251bDEgICAgeDUKKyNkZWZpbmUgaGFzX251bDFfdyAgdzUKKyNkZWZpbmUgaGFzX251bDIgICAgeDYKKyNkZWZpbmUgdG1wMSAgICAgICAgeDcKKyNkZWZpbmUgdG1wMiAgICAgICAgeDgKKyNkZWZpbmUgdG1wMyAgICAgICAgeDkKKyNkZWZpbmUgdG1wNCAgICAgICAgeDEwCisjZGVmaW5lIHplcm9vbmVzICAgIHgxMQorI2RlZmluZSB6ZXJvb25lc193ICB3MTEKKyNkZWZpbmUgcG9zICAgICAgICAgeDEyCisKKyNkZWZpbmUgUkVQOF8wMSAweDAxMDEwMTAxMDEwMTAxMDEKKyNkZWZpbmUgUkVQOF83ZiAweDdmN2Y3ZjdmN2Y3ZjdmN2YKKyNkZWZpbmUgUkVQOF84MCAweDgwODA4MDgwODA4MDgwODAKKworI2lmIGRlZmluZWQoU1RQQ1BZKQorRU5UUlkoc3RwY3B5KQorI2VsaWYgZGVmaW5lZChTVFJDUFkpCitFTlRSWShzdHJjcHkpCisjZW5kaWYKKyAgICBtb3YgICAgIHplcm9vbmVzLCAjUkVQOF8wMQorI2lmIGRlZmluZWQoU1RSQ1BZKQorICAgIG1vdiAgICAgZHN0LCBkc3RpbgorI2VuZGlmCisgICAgYW5kcyAgICB0bXAxLCBzcmMsICMxNQorICAgIGIubmUgICAgLkxtaXNhbGlnbmVkCisgICAgLy8gTlVMIGRldGVjdGlvbiB3b3JrcyBvbiB0aGUgcHJpbmNpcGxlIHRoYXQgKFggLSAxKSAmICh+WCkgJiAweDgwCisgICAgLy8gKD0+IChYIC0gMSkgJiB+KFggfCAweDdmKSkgaXMgbm9uLXplcm8gaWZmIGEgYnl0ZSBpcyB6ZXJvLCBhbmQKKyAgICAvLyBjYW4gYmUgZG9uZSBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlIGVudGlyZSB3b3JkLgorICAgIC8vIFRoZSBpbm5lciBsb29wIGRlYWxzIHdpdGggdHdvIER3b3JkcyBhdCBhIHRpbWUuICBUaGlzIGhhcyBhCisgICAgLy8gc2xpZ2h0bHkgaGlnaGVyIHN0YXJ0LXVwIGNvc3QsIGJ1dCB3ZSBzaG91bGQgd2luIHF1aXRlIHF1aWNrbHksCisgICAgLy8gZXNwZWNpYWxseSBvbiBjb3JlcyB3aXRoIGEgaGlnaCBudW1iZXIgb2YgaXNzdWUgc2xvdHMgcGVyCisgICAgLy8gY3ljbGUsIGFzIHdlIGdldCBtdWNoIGJldHRlciBwYXJhbGxlbGlzbSBvdXQgb2YgdGhlIG9wZXJhdGlvbnMuCisuTGxvb3A6CisgICAgbGRwICAgICBkYXRhMSwgZGF0YTIsIFtzcmNdLCAjMTYKKyAgICBzdWIgICAgIHRtcDEsIGRhdGExLCB6ZXJvb25lcworICAgIG9yciAgICAgdG1wMiwgZGF0YTEsICNSRVA4XzdmCisgICAgYmljICAgICBoYXNfbnVsMSwgdG1wMSwgdG1wMgorICAgIGNibnogICAgaGFzX251bDEsIC5MbnVsX2luX2RhdGExCisgICAgc3ViICAgICB0bXAzLCBkYXRhMiwgemVyb29uZXMKKyAgICBvcnIgICAgIHRtcDQsIGRhdGEyLCAjUkVQOF83ZgorICAgIGJpYyAgICAgaGFzX251bDIsIHRtcDMsIHRtcDQKKyAgICBjYm56ICAgIGhhc19udWwyLCAuTG51bF9pbl9kYXRhMgorICAgIC8vIE5vIE5VTCBpbiBlaXRoZXIgcmVnaXN0ZXIsIGNvcHkgaXQgaW4gYSBzaW5nbGUgaW5zdHJ1Y3Rpb24uCisgICAgc3RwICAgICBkYXRhMSwgZGF0YTIsIFtkc3RdLCAjMTYKKyAgICBiICAgICAgIC5MbG9vcAorCisuTG51bF9pbl9kYXRhMToKKyAgICByZXYgICAgIGhhc19udWwxLCBoYXNfbnVsMQorICAgIGNseiAgICAgcG9zLCBoYXNfbnVsMQorICAgIGFkZCAgICAgdG1wMSwgcG9zLCAjMHg4CisKKyAgICB0YnogICAgIHRtcDEsICM2LCAxZgorI2lmIGRlZmluZWQoU1RQQ1BZKQorICAgIHN0ciAgICAgZGF0YTEsIFtkc3RdLCAjNworI2VsaWYgZGVmaW5lZChTVFJDUFkpCisgICAgc3RyICAgICBkYXRhMSwgW2RzdF0KKyNlbmRpZgorICAgIHJldAorMToKKyAgICB0YnogICAgIHRtcDEsICM1LCAxZgorICAgIHN0ciAgICAgZGF0YTFfdywgW2RzdF0sICM0CisgICAgbHNyICAgICBkYXRhMSwgZGF0YTEsICMzMgorMToKKyAgICB0YnogICAgIHRtcDEsICM0LCAxZgorICAgIHN0cmggICAgZGF0YTFfdywgW2RzdF0sICMyCisgICAgbHNyICAgICBkYXRhMSwgZGF0YTEsICMxNgorMToKKyAgICB0YnogICAgIHRtcDEsICMzLCAxZgorICAgIHN0cmIgICAgZGF0YTFfdywgW2RzdF0KKyNpZiBkZWZpbmVkKFNUUENQWSkKKyAgICByZXQKKyNlbmRpZgorMToKKyNpZiBkZWZpbmVkKFNUUENQWSkKKyAgICAvLyBCYWNrIHVwIG9uZSBzbyB0aGF0IGRzdCBwb2ludHMgdG8gdGhlICdcMCcgc3RyaW5nIHRlcm1pbmF0b3IuCisgICAgc3ViICAgICBkc3QsIGRzdCwgIzEKKyNlbmRpZgorICAgIHJldAorCisuTG51bF9pbl9kYXRhMjoKKyAgICBzdHIgICAgIGRhdGExLCBbZHN0XSwgIzgKKyAgICByZXYgICAgIGhhc19udWwyLCBoYXNfbnVsMgorICAgIGNseiAgICAgcG9zLCBoYXNfbnVsMgorICAgIGFkZCAgICAgdG1wMSwgcG9zLCAjMHg4CisKKyAgICB0YnogICAgIHRtcDEsICM2LCAxZgorI2lmIGRlZmluZWQoU1RQQ1BZKQorICAgIHN0ciAgICAgZGF0YTIsIFtkc3RdLCAjNworI2VsaWYgZGVmaW5lZChTVFJDUFkpCisgICAgc3RyICAgICBkYXRhMiwgW2RzdF0KKyNlbmRpZgorICAgIHJldAorMToKKyAgICB0YnogICAgIHRtcDEsICM1LCAxZgorICAgIHN0ciAgICAgZGF0YTJfdywgW2RzdF0sICM0CisgICAgbHNyICAgICBkYXRhMiwgZGF0YTIsICMzMgorMToKKyAgICB0YnogICAgIHRtcDEsICM0LCAxZgorICAgIHN0cmggICAgZGF0YTJfdywgW2RzdF0sICMyCisgICAgbHNyICAgICBkYXRhMiwgZGF0YTIsICMxNgorMToKKyAgICB0YnogICAgIHRtcDEsICMzLCAxZgorICAgIHN0cmIgICAgZGF0YTJfdywgW2RzdF0KKyNpZiBkZWZpbmVkKFNUUENQWSkKKyAgICByZXQKKyNlbmRpZgorMToKKyNpZiBkZWZpbmVkKFNUUENQWSkKKyAgICAvLyBCYWNrIHVwIG9uZSBzbyB0aGF0IGRzdCBwb2ludHMgdG8gdGhlICdcMCcgc3RyaW5nIHRlcm1pbmF0b3IuCisgICAgc3ViICAgICBkc3QsIGRzdCwgIzEKKyNlbmRpZgorICAgIHJldAorCisuTG1pc2FsaWduZWQ6CisgICAgdGJ6ICAgICBzcmMsICMwLCAxZgorICAgIGxkcmIgICAgZGF0YTFfdywgW3NyY10sICMxCisgICAgc3RyYiAgICBkYXRhMV93LCBbZHN0XSwgIzEKKyAgICBjYm56ICAgIGRhdGExX3csIDFmCisjaWYgZGVmaW5lZChTVFBDUFkpCisgICAgLy8gQmFjayB1cCBvbmUgc28gdGhhdCBkc3QgcG9pbnRzIHRvIHRoZSAnXDAnIHN0cmluZyB0ZXJtaW5hdG9yLgorICAgIHN1YiAgICAgZHN0LCBkc3QsICMxCisjZW5kaWYKKyAgICByZXQKKzE6CisgICAgdGJ6ICAgICBzcmMsICMxLCAxZgorICAgIGxkcmIgICAgZGF0YTFfdywgW3NyY10sICMxCisgICAgc3RyYiAgICBkYXRhMV93LCBbZHN0XSwgIzEKKyAgICBjYnogICAgIGRhdGExX3csIC5MZG9uZQorICAgIGxkcmIgICAgZGF0YTJfdywgW3NyY10sICMxCisgICAgc3RyYiAgICBkYXRhMl93LCBbZHN0XSwgIzEKKyAgICBjYm56ICAgIGRhdGEyX3csIDFmCisuTGRvbmU6CisjaWYgZGVmaW5lZChTVFBDUFkpCisgICAgLy8gQmFjayB1cCBvbmUgc28gdGhhdCBkc3QgcG9pbnRzIHRvIHRoZSAnXDAnIHN0cmluZyB0ZXJtaW5hdG9yLgorICAgIHN1YiAgICAgZHN0LCBkc3QsICMxCisjZW5kaWYKKyAgICByZXQKKzE6CisgICAgdGJ6ICAgICBzcmMsICMyLCAxZgorICAgIGxkciAgICAgZGF0YTFfdywgW3NyY10sICM0CisgICAgLy8gQ2hlY2sgZm9yIGEgemVyby4KKyAgICBzdWIgICAgIGhhc19udWwxX3csIGRhdGExX3csIHplcm9vbmVzX3cKKyAgICBiaWMgICAgIGhhc19udWwxX3csIGhhc19udWwxX3csIGRhdGExX3cKKyAgICBhbmRzICAgIGhhc19udWwxX3csIGhhc19udWwxX3csICMweDgwODA4MDgwCisgICAgYi5uZSAgICAuTG51bF9pbl9kYXRhMQorICAgIHN0ciAgICAgZGF0YTFfdywgW2RzdF0sICM0CisxOgorICAgIHRieiAgICAgc3JjLCAjMywgLkxsb29wCisgICAgbGRyICAgICBkYXRhMSwgW3NyY10sICM4CisgICAgLy8gQ2hlY2sgZm9yIGEgemVyby4KKyAgICBzdWIgICAgIHRtcDEsIGRhdGExLCB6ZXJvb25lcworICAgIG9yciAgICAgdG1wMiwgZGF0YTEsICNSRVA4XzdmCisgICAgYmljcyAgICBoYXNfbnVsMSwgdG1wMSwgdG1wMgorICAgIGIubmUgICAgLkxudWxfaW5fZGF0YTEKKyAgICBzdHIgICAgIGRhdGExLCBbZHN0XSwgIzgKKyAgICBiICAgICAgIC5MbG9vcAorI2lmIGRlZmluZWQoU1RQQ1BZKQorRU5EKHN0cGNweSkKKyNlbGlmIGRlZmluZWQoU1RSQ1BZKQorRU5EKHN0cmNweSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmxlbi5TIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cmxlbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZDk4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RybGVuLlMKQEAgLTAsMCArMSwxMjYgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNCwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIEFzc3VtcHRpb25zOgorICoKKyAqIEFSTXY4LWEsIEFBcmNoNjQKKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qIEFyZ3VtZW50cyBhbmQgcmVzdWx0cy4gICovCisjZGVmaW5lIHNyY2luCQl4MAorI2RlZmluZSBsZW4JCXgwCisKKy8qIExvY2FscyBhbmQgdGVtcG9yYXJpZXMuICAqLworI2RlZmluZSBzcmMJCXgxCisjZGVmaW5lIGRhdGExCQl4MgorI2RlZmluZSBkYXRhMgkJeDMKKyNkZWZpbmUgZGF0YTJhCQl4NAorI2RlZmluZSBoYXNfbnVsMQl4NQorI2RlZmluZSBoYXNfbnVsMgl4NgorI2RlZmluZSB0bXAxCQl4NworI2RlZmluZSB0bXAyCQl4OAorI2RlZmluZSB0bXAzCQl4OQorI2RlZmluZSB0bXA0CQl4MTAKKyNkZWZpbmUgemVyb29uZXMJeDExCisjZGVmaW5lIHBvcwkJeDEyCisKKyNkZWZpbmUgUkVQOF8wMSAweDAxMDEwMTAxMDEwMTAxMDEKKyNkZWZpbmUgUkVQOF83ZiAweDdmN2Y3ZjdmN2Y3ZjdmN2YKKyNkZWZpbmUgUkVQOF84MCAweDgwODA4MDgwODA4MDgwODAKKworCS8qIFN0YXJ0IG9mIGNyaXRpYWwgc2VjdGlvbiAtLSBrZWVwIHRvIG9uZSA2NEJ5dGUgY2FjaGUgbGluZS4gICovCitFTlRSWShzdHJsZW4pCisJbW92CXplcm9vbmVzLCAjUkVQOF8wMQorCWJpYwlzcmMsIHNyY2luLCAjMTUKKwlhbmRzCXRtcDEsIHNyY2luLCAjMTUKKwliLm5lCS5MbWlzYWxpZ25lZAorCS8qIE5VTCBkZXRlY3Rpb24gd29ya3Mgb24gdGhlIHByaW5jaXBsZSB0aGF0IChYIC0gMSkgJiAoflgpICYgMHg4MAorCSAgICg9PiAoWCAtIDEpICYgfihYIHwgMHg3ZikpIGlzIG5vbi16ZXJvIGlmZiBhIGJ5dGUgaXMgemVybywgYW5kCisJICAgY2FuIGJlIGRvbmUgaW4gcGFyYWxsZWwgYWNyb3NzIHRoZSBlbnRpcmUgd29yZC4gICovCisJLyogVGhlIGlubmVyIGxvb3AgZGVhbHMgd2l0aCB0d28gRHdvcmRzIGF0IGEgdGltZS4gIFRoaXMgaGFzIGEKKwkgICBzbGlnaHRseSBoaWdoZXIgc3RhcnQtdXAgY29zdCwgYnV0IHdlIHNob3VsZCB3aW4gcXVpdGUgcXVpY2tseSwKKwkgICBlc3BlY2lhbGx5IG9uIGNvcmVzIHdpdGggYSBoaWdoIG51bWJlciBvZiBpc3N1ZSBzbG90cyBwZXIKKwkgICBjeWNsZSwgYXMgd2UgZ2V0IG11Y2ggYmV0dGVyIHBhcmFsbGVsaXNtIG91dCBvZiB0aGUgb3BlcmF0aW9ucy4gICovCisuTGxvb3A6CisJbGRwCWRhdGExLCBkYXRhMiwgW3NyY10sICMxNgorLkxyZWFsaWduZWQ6CisJc3ViCXRtcDEsIGRhdGExLCB6ZXJvb25lcworCW9ycgl0bXAyLCBkYXRhMSwgI1JFUDhfN2YKKwlzdWIJdG1wMywgZGF0YTIsIHplcm9vbmVzCisJb3JyCXRtcDQsIGRhdGEyLCAjUkVQOF83ZgorCWJpYwloYXNfbnVsMSwgdG1wMSwgdG1wMgorCWJpY3MJaGFzX251bDIsIHRtcDMsIHRtcDQKKwljY21wCWhhc19udWwxLCAjMCwgIzAsIGVxCS8qIE5aQ1YgPSAwMDAwICAqLworCWIuZXEJLkxsb29wCisJLyogRW5kIG9mIGNyaXRpY2FsIHNlY3Rpb24gLS0ga2VlcCB0byBvbmUgNjRCeXRlIGNhY2hlIGxpbmUuICAqLworCisJc3ViCWxlbiwgc3JjLCBzcmNpbgorCWNiegloYXNfbnVsMSwgLkxudWxfaW5fZGF0YTIKKyNpZmRlZiBfX0FBUkNINjRFQl9fCisJbW92CWRhdGEyLCBkYXRhMQorI2VuZGlmCisJc3ViCWxlbiwgbGVuLCAjOAorCW1vdgloYXNfbnVsMiwgaGFzX251bDEKKy5MbnVsX2luX2RhdGEyOgorI2lmZGVmIF9fQUFSQ0g2NEVCX18KKwkvKiBGb3IgYmlnLWVuZGlhbiwgY2FycnkgcHJvcGFnYXRpb24gKGlmIHRoZSBmaW5hbCBieXRlIGluIHRoZQorCSAgIHN0cmluZyBpcyAweDAxKSBtZWFucyB3ZSBjYW5ub3QgdXNlIGhhc19udWwgZGlyZWN0bHkuICBUaGUKKwkgICBlYXNpZXN0IHdheSB0byBnZXQgdGhlIGNvcnJlY3QgYnl0ZSBpcyB0byBieXRlLXN3YXAgdGhlIGRhdGEKKwkgICBhbmQgY2FsY3VsYXRlIHRoZSBzeW5kcm9tZSBhIHNlY29uZCB0aW1lLiAgKi8KKwlyZXYJZGF0YTIsIGRhdGEyCisJc3ViCXRtcDEsIGRhdGEyLCB6ZXJvb25lcworCW9ycgl0bXAyLCBkYXRhMiwgI1JFUDhfN2YKKwliaWMJaGFzX251bDIsIHRtcDEsIHRtcDIKKyNlbmRpZgorCXN1YglsZW4sIGxlbiwgIzgKKwlyZXYJaGFzX251bDIsIGhhc19udWwyCisJY2x6CXBvcywgaGFzX251bDIKKwlhZGQJbGVuLCBsZW4sIHBvcywgbHNyICMzCQkvKiBCaXRzIHRvIGJ5dGVzLiAgKi8KKwlyZXQKKworLkxtaXNhbGlnbmVkOgorCWNtcAl0bXAxLCAjOAorCW5lZwl0bXAxLCB0bXAxCisJbGRwCWRhdGExLCBkYXRhMiwgW3NyY10sICMxNgorCWxzbAl0bXAxLCB0bXAxLCAjMwkJLyogQnl0ZXMgYmV5b25kIGFsaWdubWVudCAtPiBiaXRzLiAgKi8KKwltb3YJdG1wMiwgI34wCisjaWZkZWYgX19BQVJDSDY0RUJfXworCS8qIEJpZy1lbmRpYW4uICBFYXJseSBieXRlcyBhcmUgYXQgTVNCLiAgKi8KKwlsc2wJdG1wMiwgdG1wMiwgdG1wMQkvKiBTaGlmdCAodG1wMSAmIDYzKS4gICovCisjZWxzZQorCS8qIExpdHRsZS1lbmRpYW4uICBFYXJseSBieXRlcyBhcmUgYXQgTFNCLiAgKi8KKwlsc3IJdG1wMiwgdG1wMiwgdG1wMQkvKiBTaGlmdCAodG1wMSAmIDYzKS4gICovCisjZW5kaWYKKwlvcnIJZGF0YTEsIGRhdGExLCB0bXAyCisJb3JyCWRhdGEyYSwgZGF0YTIsIHRtcDIKKwljc2ludglkYXRhMSwgZGF0YTEsIHh6ciwgbGUKKwljc2VsCWRhdGEyLCBkYXRhMiwgZGF0YTJhLCBsZQorCWIJLkxyZWFsaWduZWQKKworRU5EKHN0cmxlbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJuY21wLlMgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RybmNtcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2N2Y2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3RybmNtcC5TCkBAIC0wLDAgKzEsMjE3IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTQsIExpbmFybyBMaW1pdGVkCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTGluYXJvIG5vciB0aGUKKyAgICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAgIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKiBBc3N1bXB0aW9uczoKKyAqCisgKiBBUk12OC1hLCBBQXJjaDY0CisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCisjZGVmaW5lIFJFUDhfMDEgMHgwMTAxMDEwMTAxMDEwMTAxCisjZGVmaW5lIFJFUDhfN2YgMHg3ZjdmN2Y3ZjdmN2Y3ZjdmCisjZGVmaW5lIFJFUDhfODAgMHg4MDgwODA4MDgwODA4MDgwCisKKy8qIFBhcmFtZXRlcnMgYW5kIHJlc3VsdC4gICovCisjZGVmaW5lIHNyYzEJCXgwCisjZGVmaW5lIHNyYzIJCXgxCisjZGVmaW5lIGxpbWl0CQl4MgorI2RlZmluZSByZXN1bHQJCXgwCisKKy8qIEludGVybmFsIHZhcmlhYmxlcy4gICovCisjZGVmaW5lIGRhdGExCQl4MworI2RlZmluZSBkYXRhMXcJCXczCisjZGVmaW5lIGRhdGEyCQl4NAorI2RlZmluZSBkYXRhMncJCXc0CisjZGVmaW5lIGhhc19udWwJCXg1CisjZGVmaW5lIGRpZmYJCXg2CisjZGVmaW5lIHN5bmRyb21lCXg3CisjZGVmaW5lIHRtcDEJCXg4CisjZGVmaW5lIHRtcDIJCXg5CisjZGVmaW5lIHRtcDMJCXgxMAorI2RlZmluZSB6ZXJvb25lcwl4MTEKKyNkZWZpbmUgcG9zCQl4MTIKKyNkZWZpbmUgbGltaXRfd2QJeDEzCisjZGVmaW5lIG1hc2sJCXgxNAorI2RlZmluZSBlbmRsb29wCQl4MTUKKworCS50ZXh0CisJLnAyYWxpZ24gNgorCS5yZXAgNworCW5vcAkvKiBQYWQgc28gdGhhdCB0aGUgbG9vcCBiZWxvdyBmaXRzIGEgY2FjaGUgbGluZS4gICovCisJLmVuZHIKK0VOVFJZKHN0cm5jbXApCisJY2J6CWxpbWl0LCAuTHJldDAKKwllb3IJdG1wMSwgc3JjMSwgc3JjMgorCW1vdgl6ZXJvb25lcywgI1JFUDhfMDEKKwl0c3QJdG1wMSwgIzcKKwliLm5lCS5MbWlzYWxpZ25lZDgKKwlhbmRzCXRtcDEsIHNyYzEsICM3CisJYi5uZQkuTG11dHVhbF9hbGlnbgorCS8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGZ1bGwgYW5kIHBhcnRpYWwgd29yZHMgLTEuICAqLworCXN1YglsaW1pdF93ZCwgbGltaXQsICMxCS8qIGxpbWl0ICE9IDAsIHNvIG5vIHVuZGVyZmxvdy4gICovCisJbHNyCWxpbWl0X3dkLCBsaW1pdF93ZCwgIzMJLyogQ29udmVydCB0byBEd29yZHMuICAqLworCisJLyogTlVMIGRldGVjdGlvbiB3b3JrcyBvbiB0aGUgcHJpbmNpcGxlIHRoYXQgKFggLSAxKSAmICh+WCkgJiAweDgwCisJICAgKD0+IChYIC0gMSkgJiB+KFggfCAweDdmKSkgaXMgbm9uLXplcm8gaWZmIGEgYnl0ZSBpcyB6ZXJvLCBhbmQKKwkgICBjYW4gYmUgZG9uZSBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlIGVudGlyZSB3b3JkLiAgKi8KKwkvKiBTdGFydCBvZiBwZXJmb3JtYW5jZS1jcml0aWNhbCBzZWN0aW9uICAtLSBvbmUgNjRCIGNhY2hlIGxpbmUuICAqLworLkxsb29wX2FsaWduZWQ6CisJbGRyCWRhdGExLCBbc3JjMV0sICM4CisJbGRyCWRhdGEyLCBbc3JjMl0sICM4CisuTHN0YXJ0X3JlYWxpZ25lZDoKKwlzdWJzCWxpbWl0X3dkLCBsaW1pdF93ZCwgIzEKKwlzdWIJdG1wMSwgZGF0YTEsIHplcm9vbmVzCisJb3JyCXRtcDIsIGRhdGExLCAjUkVQOF83ZgorCWVvcglkaWZmLCBkYXRhMSwgZGF0YTIJLyogTm9uLXplcm8gaWYgZGlmZmVyZW5jZXMgZm91bmQuICAqLworCWNzaW52CWVuZGxvb3AsIGRpZmYsIHh6ciwgcGwJLyogTGFzdCBEd29yZCBvciBkaWZmZXJlbmNlcy4gICovCisJYmljcwloYXNfbnVsLCB0bXAxLCB0bXAyCS8qIE5vbi16ZXJvIGlmIE5VTCB0ZXJtaW5hdG9yLiAgKi8KKwljY21wCWVuZGxvb3AsICMwLCAjMCwgZXEKKwliLmVxCS5MbG9vcF9hbGlnbmVkCisJLyogRW5kIG9mIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHNlY3Rpb24gIC0tIG9uZSA2NEIgY2FjaGUgbGluZS4gICovCisKKwkvKiBOb3QgcmVhY2hlZCB0aGUgbGltaXQsIG11c3QgaGF2ZSBmb3VuZCB0aGUgZW5kIG9yIGEgZGlmZi4gICovCisJdGJ6CWxpbWl0X3dkLCAjNjMsIC5Mbm90X2xpbWl0CisKKwkvKiBMaW1pdCAlIDggPT0gMCA9PiBhbGwgYnl0ZXMgc2lnbmlmaWNhbnQuICAqLworCWFuZHMJbGltaXQsIGxpbWl0LCAjNworCWIuZXEJLkxub3RfbGltaXQKKworCWxzbAlsaW1pdCwgbGltaXQsICMzCS8qIEJpdHMgLT4gYnl0ZXMuICAqLworCW1vdgltYXNrLCAjfjAKKyNpZmRlZiBfX0FBUkNINjRFQl9fCisJbHNyCW1hc2ssIG1hc2ssIGxpbWl0CisjZWxzZQorCWxzbAltYXNrLCBtYXNrLCBsaW1pdAorI2VuZGlmCisJYmljCWRhdGExLCBkYXRhMSwgbWFzaworCWJpYwlkYXRhMiwgZGF0YTIsIG1hc2sKKworCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBOVUwgYnl0ZSBpcyBtYXJrZWQgaW4gdGhlIHN5bmRyb21lLiAgKi8KKwlvcnIJaGFzX251bCwgaGFzX251bCwgbWFzaworCisuTG5vdF9saW1pdDoKKwlvcnIJc3luZHJvbWUsIGRpZmYsIGhhc19udWwKKworI2lmbmRlZglfX0FBUkNINjRFQl9fCisJcmV2CXN5bmRyb21lLCBzeW5kcm9tZQorCXJldglkYXRhMSwgZGF0YTEKKwkvKiBUaGUgTVMtbm9uLXplcm8gYml0IG9mIHRoZSBzeW5kcm9tZSBtYXJrcyBlaXRoZXIgdGhlIGZpcnN0IGJpdAorCSAgIHRoYXQgaXMgZGlmZmVyZW50LCBvciB0aGUgdG9wIGJpdCBvZiB0aGUgZmlyc3QgemVybyBieXRlLgorCSAgIFNoaWZ0aW5nIGxlZnQgbm93IHdpbGwgYnJpbmcgdGhlIGNyaXRpY2FsIGluZm9ybWF0aW9uIGludG8gdGhlCisJICAgdG9wIGJpdHMuICAqLworCWNseglwb3MsIHN5bmRyb21lCisJcmV2CWRhdGEyLCBkYXRhMgorCWxzbAlkYXRhMSwgZGF0YTEsIHBvcworCWxzbAlkYXRhMiwgZGF0YTIsIHBvcworCS8qIEJ1dCB3ZSBuZWVkIHRvIHplcm8tZXh0ZW5kIChjaGFyIGlzIHVuc2lnbmVkKSB0aGUgdmFsdWUgYW5kIHRoZW4KKwkgICBwZXJmb3JtIGEgc2lnbmVkIDMyLWJpdCBzdWJ0cmFjdGlvbi4gICovCisJbHNyCWRhdGExLCBkYXRhMSwgIzU2CisJc3ViCXJlc3VsdCwgZGF0YTEsIGRhdGEyLCBsc3IgIzU2CisJcmV0CisjZWxzZQorCS8qIEZvciBiaWctZW5kaWFuIHdlIGNhbm5vdCB1c2UgdGhlIHRyaWNrIHdpdGggdGhlIHN5bmRyb21lIHZhbHVlCisJICAgYXMgY2FycnktcHJvcGFnYXRpb24gY2FuIGNvcnJ1cHQgdGhlIHVwcGVyIGJpdHMgaWYgdGhlIHRyYWlsaW5nCisJICAgYnl0ZXMgaW4gdGhlIHN0cmluZyBjb250YWluIDB4MDEuICAqLworCS8qIEhvd2V2ZXIsIGlmIHRoZXJlIGlzIG5vIE5VTCBieXRlIGluIHRoZSBkd29yZCwgd2UgY2FuIGdlbmVyYXRlCisJICAgdGhlIHJlc3VsdCBkaXJlY3RseS4gIFdlIGNhbid0IGp1c3Qgc3VidHJhY3QgdGhlIGJ5dGVzIGFzIHRoZQorCSAgIE1TQiBtaWdodCBiZSBzaWduaWZpY2FudC4gICovCisJY2JuegloYXNfbnVsLCAxZgorCWNtcAlkYXRhMSwgZGF0YTIKKwljc2V0CXJlc3VsdCwgbmUKKwljbmVnCXJlc3VsdCwgcmVzdWx0LCBsbworCXJldAorMToKKwkvKiBSZS1jb21wdXRlIHRoZSBOVUwtYnl0ZSBkZXRlY3Rpb24sIHVzaW5nIGEgYnl0ZS1yZXZlcnNlZCB2YWx1ZS4gICovCisJcmV2CXRtcDMsIGRhdGExCisJc3ViCXRtcDEsIHRtcDMsIHplcm9vbmVzCisJb3JyCXRtcDIsIHRtcDMsICNSRVA4XzdmCisJYmljCWhhc19udWwsIHRtcDEsIHRtcDIKKwlyZXYJaGFzX251bCwgaGFzX251bAorCW9ycglzeW5kcm9tZSwgZGlmZiwgaGFzX251bAorCWNseglwb3MsIHN5bmRyb21lCisJLyogVGhlIE1TLW5vbi16ZXJvIGJpdCBvZiB0aGUgc3luZHJvbWUgbWFya3MgZWl0aGVyIHRoZSBmaXJzdCBiaXQKKwkgICB0aGF0IGlzIGRpZmZlcmVudCwgb3IgdGhlIHRvcCBiaXQgb2YgdGhlIGZpcnN0IHplcm8gYnl0ZS4KKwkgICBTaGlmdGluZyBsZWZ0IG5vdyB3aWxsIGJyaW5nIHRoZSBjcml0aWNhbCBpbmZvcm1hdGlvbiBpbnRvIHRoZQorCSAgIHRvcCBiaXRzLiAgKi8KKwlsc2wJZGF0YTEsIGRhdGExLCBwb3MKKwlsc2wJZGF0YTIsIGRhdGEyLCBwb3MKKwkvKiBCdXQgd2UgbmVlZCB0byB6ZXJvLWV4dGVuZCAoY2hhciBpcyB1bnNpZ25lZCkgdGhlIHZhbHVlIGFuZCB0aGVuCisJICAgcGVyZm9ybSBhIHNpZ25lZCAzMi1iaXQgc3VidHJhY3Rpb24uICAqLworCWxzcglkYXRhMSwgZGF0YTEsICM1NgorCXN1YglyZXN1bHQsIGRhdGExLCBkYXRhMiwgbHNyICM1NgorCXJldAorI2VuZGlmCisKKy5MbXV0dWFsX2FsaWduOgorCS8qIFNvdXJjZXMgYXJlIG11dHVhbGx5IGFsaWduZWQsIGJ1dCBhcmUgbm90IGN1cnJlbnRseSBhdCBhbgorCSAgIGFsaWdubWVudCBib3VuZGFyeS4gIFJvdW5kIGRvd24gdGhlIGFkZHJlc3NlcyBhbmQgdGhlbiBtYXNrIG9mZgorCSAgIHRoZSBieXRlcyB0aGF0IHByZWNlZGUgdGhlIHN0YXJ0IHBvaW50LgorCSAgIFdlIGFsc28gbmVlZCB0byBhZGp1c3QgdGhlIGxpbWl0IGNhbGN1bGF0aW9ucywgYnV0IHdpdGhvdXQKKwkgICBvdmVyZmxvd2luZyBpZiB0aGUgbGltaXQgaXMgbmVhciBVTE9OR19NQVguICAqLworCWJpYwlzcmMxLCBzcmMxLCAjNworCWJpYwlzcmMyLCBzcmMyLCAjNworCWxkcglkYXRhMSwgW3NyYzFdLCAjOAorCW5lZwl0bXAzLCB0bXAxLCBsc2wgIzMJLyogNjQgLSBiaXRzKGJ5dGVzIGJleW9uZCBhbGlnbikuICovCisJbGRyCWRhdGEyLCBbc3JjMl0sICM4CisJbW92CXRtcDIsICN+MAorCXN1YglsaW1pdF93ZCwgbGltaXQsICMxCS8qIGxpbWl0ICE9IDAsIHNvIG5vIHVuZGVyZmxvdy4gICovCisjaWZkZWYgX19BQVJDSDY0RUJfXworCS8qIEJpZy1lbmRpYW4uICBFYXJseSBieXRlcyBhcmUgYXQgTVNCLiAgKi8KKwlsc2wJdG1wMiwgdG1wMiwgdG1wMwkvKiBTaGlmdCAodG1wMSAmIDYzKS4gICovCisjZWxzZQorCS8qIExpdHRsZS1lbmRpYW4uICBFYXJseSBieXRlcyBhcmUgYXQgTFNCLiAgKi8KKwlsc3IJdG1wMiwgdG1wMiwgdG1wMwkvKiBTaGlmdCAodG1wMSAmIDYzKS4gICovCisjZW5kaWYKKwlhbmQJdG1wMywgbGltaXRfd2QsICM3CisJbHNyCWxpbWl0X3dkLCBsaW1pdF93ZCwgIzMKKwkvKiBBZGp1c3QgdGhlIGxpbWl0LiBPbmx5IGxvdyAzIGJpdHMgdXNlZCwgc28gb3ZlcmZsb3cgaXJyZWxldmFudC4gICovCisJYWRkCWxpbWl0LCBsaW1pdCwgdG1wMQorCWFkZAl0bXAzLCB0bXAzLCB0bXAxCisJb3JyCWRhdGExLCBkYXRhMSwgdG1wMgorCW9ycglkYXRhMiwgZGF0YTIsIHRtcDIKKwlhZGQJbGltaXRfd2QsIGxpbWl0X3dkLCB0bXAzLCBsc3IgIzMKKwliCS5Mc3RhcnRfcmVhbGlnbmVkCisKKy5McmV0MDoKKwltb3YJcmVzdWx0LCAjMAorCXJldAorCisJLnAyYWxpZ24gNgorLkxtaXNhbGlnbmVkODoKKwlzdWIJbGltaXQsIGxpbWl0LCAjMQorMToKKwkvKiBQZXJoYXBzIHdlIGNhbiBkbyBiZXR0ZXIgdGhhbiB0aGlzLiAgKi8KKwlsZHJiCWRhdGExdywgW3NyYzFdLCAjMQorCWxkcmIJZGF0YTJ3LCBbc3JjMl0sICMxCisJc3VicwlsaW1pdCwgbGltaXQsICMxCisJY2NtcAlkYXRhMXcsICMxLCAjMCwgY3MJLyogTlpDViA9IDBiMDAwMC4gICovCisJY2NtcAlkYXRhMXcsIGRhdGEydywgIzAsIGNzCS8qIE5aQ1YgPSAwYjAwMDAuICAqLworCWIuZXEJMWIKKwlzdWIJcmVzdWx0LCBkYXRhMSwgZGF0YTIKKwlyZXQKK0VORChzdHJuY21wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3N0cm5sZW4uUyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJubGVuLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkNDQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJubGVuLlMKQEAgLTAsMCArMSwxNzQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNCwgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBMaW5hcm8gbm9yIHRoZQorICAgICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICAgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgICBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAgIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICAgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIEFzc3VtcHRpb25zOgorICoKKyAqIEFSTXY4LWEsIEFBcmNoNjQKKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qIEFyZ3VtZW50cyBhbmQgcmVzdWx0cy4gICovCisjZGVmaW5lIHNyY2luCQl4MAorI2RlZmluZSBsZW4JCXgwCisjZGVmaW5lIGxpbWl0CQl4MQorCisvKiBMb2NhbHMgYW5kIHRlbXBvcmFyaWVzLiAgKi8KKyNkZWZpbmUgc3JjCQl4MgorI2RlZmluZSBkYXRhMQkJeDMKKyNkZWZpbmUgZGF0YTIJCXg0CisjZGVmaW5lIGRhdGEyYQkJeDUKKyNkZWZpbmUgaGFzX251bDEJeDYKKyNkZWZpbmUgaGFzX251bDIJeDcKKyNkZWZpbmUgdG1wMQkJeDgKKyNkZWZpbmUgdG1wMgkJeDkKKyNkZWZpbmUgdG1wMwkJeDEwCisjZGVmaW5lIHRtcDQJCXgxMQorI2RlZmluZSB6ZXJvb25lcwl4MTIKKyNkZWZpbmUgcG9zCQl4MTMKKyNkZWZpbmUgbGltaXRfd2QJeDE0CisKKyNkZWZpbmUgUkVQOF8wMSAweDAxMDEwMTAxMDEwMTAxMDEKKyNkZWZpbmUgUkVQOF83ZiAweDdmN2Y3ZjdmN2Y3ZjdmN2YKKyNkZWZpbmUgUkVQOF84MCAweDgwODA4MDgwODA4MDgwODAKKworCS50ZXh0CisJLnAyYWxpZ24JNgorLkxzdGFydDoKKwkvKiBQcmUtcGFkIHRvIGVuc3VyZSBjcml0aWNhbCBsb29wIGJlZ2lucyBhbiBpY2FjaGUgbGluZS4gICovCisJLnJlcCA3CisJbm9wCisJLmVuZHIKKwkvKiBQdXQgdGhpcyBjb2RlIGhlcmUgdG8gYXZvaWQgd2FzdGluZyBtb3JlIHNwYWNlIHdpdGggcHJlLXBhZGRpbmcuICAqLworLkxoaXRfbGltaXQ6CisJbW92CWxlbiwgbGltaXQKKwlyZXQKKworRU5UUlkoc3RybmxlbikKKwljYnoJbGltaXQsIC5MaGl0X2xpbWl0CisJbW92CXplcm9vbmVzLCAjUkVQOF8wMQorCWJpYwlzcmMsIHNyY2luLCAjMTUKKwlhbmRzCXRtcDEsIHNyY2luLCAjMTUKKwliLm5lCS5MbWlzYWxpZ25lZAorCS8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGZ1bGwgYW5kIHBhcnRpYWwgd29yZHMgLTEuICAqLworCXN1YglsaW1pdF93ZCwgbGltaXQsICMxCS8qIExpbWl0ICE9IDAsIHNvIG5vIHVuZGVyZmxvdy4gICovCisJbHNyCWxpbWl0X3dkLCBsaW1pdF93ZCwgIzQJLyogQ29udmVydCB0byBRd29yZHMuICAqLworCisJLyogTlVMIGRldGVjdGlvbiB3b3JrcyBvbiB0aGUgcHJpbmNpcGxlIHRoYXQgKFggLSAxKSAmICh+WCkgJiAweDgwCisJICAgKD0+IChYIC0gMSkgJiB+KFggfCAweDdmKSkgaXMgbm9uLXplcm8gaWZmIGEgYnl0ZSBpcyB6ZXJvLCBhbmQKKwkgICBjYW4gYmUgZG9uZSBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlIGVudGlyZSB3b3JkLiAgKi8KKwkvKiBUaGUgaW5uZXIgbG9vcCBkZWFscyB3aXRoIHR3byBEd29yZHMgYXQgYSB0aW1lLiAgVGhpcyBoYXMgYQorCSAgIHNsaWdodGx5IGhpZ2hlciBzdGFydC11cCBjb3N0LCBidXQgd2Ugc2hvdWxkIHdpbiBxdWl0ZSBxdWlja2x5LAorCSAgIGVzcGVjaWFsbHkgb24gY29yZXMgd2l0aCBhIGhpZ2ggbnVtYmVyIG9mIGlzc3VlIHNsb3RzIHBlcgorCSAgIGN5Y2xlLCBhcyB3ZSBnZXQgbXVjaCBiZXR0ZXIgcGFyYWxsZWxpc20gb3V0IG9mIHRoZSBvcGVyYXRpb25zLiAgKi8KKworCS8qIFN0YXJ0IG9mIGNyaXRpYWwgc2VjdGlvbiAtLSBrZWVwIHRvIG9uZSA2NEJ5dGUgY2FjaGUgbGluZS4gICovCisuTGxvb3A6CisJbGRwCWRhdGExLCBkYXRhMiwgW3NyY10sICMxNgorLkxyZWFsaWduZWQ6CisJc3ViCXRtcDEsIGRhdGExLCB6ZXJvb25lcworCW9ycgl0bXAyLCBkYXRhMSwgI1JFUDhfN2YKKwlzdWIJdG1wMywgZGF0YTIsIHplcm9vbmVzCisJb3JyCXRtcDQsIGRhdGEyLCAjUkVQOF83ZgorCWJpYwloYXNfbnVsMSwgdG1wMSwgdG1wMgorCWJpYwloYXNfbnVsMiwgdG1wMywgdG1wNAorCXN1YnMJbGltaXRfd2QsIGxpbWl0X3dkLCAjMQorCW9ycgl0bXAxLCBoYXNfbnVsMSwgaGFzX251bDIKKwljY21wCXRtcDEsICMwLCAjMCwgcGwJLyogTlpDViA9IDAwMDAgICovCisJYi5lcQkuTGxvb3AKKwkvKiBFbmQgb2YgY3JpdGljYWwgc2VjdGlvbiAtLSBrZWVwIHRvIG9uZSA2NEJ5dGUgY2FjaGUgbGluZS4gICovCisKKwlvcnIJdG1wMSwgaGFzX251bDEsIGhhc19udWwyCisJY2J6CXRtcDEsIC5MaGl0X2xpbWl0CS8qIE5vIG51bGwgaW4gZmluYWwgUXdvcmQuICAqLworCisJLyogV2Uga25vdyB0aGVyZSdzIGEgbnVsbCBpbiB0aGUgZmluYWwgUXdvcmQuICBUaGUgZWFzaWVzdCB0aGluZworCSAgIHRvIGRvIG5vdyBpcyB3b3JrIG91dCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgYW5kIHJldHVybgorCSAgIE1JTiAobGVuLCBsaW1pdCkuICAqLworCisJc3ViCWxlbiwgc3JjLCBzcmNpbgorCWNiegloYXNfbnVsMSwgLkxudWxfaW5fZGF0YTIKKyNpZmRlZiBfX0FBUkNINjRFQl9fCisJbW92CWRhdGEyLCBkYXRhMQorI2VuZGlmCisJc3ViCWxlbiwgbGVuLCAjOAorCW1vdgloYXNfbnVsMiwgaGFzX251bDEKKy5MbnVsX2luX2RhdGEyOgorI2lmZGVmIF9fQUFSQ0g2NEVCX18KKwkvKiBGb3IgYmlnLWVuZGlhbiwgY2FycnkgcHJvcGFnYXRpb24gKGlmIHRoZSBmaW5hbCBieXRlIGluIHRoZQorCSAgIHN0cmluZyBpcyAweDAxKSBtZWFucyB3ZSBjYW5ub3QgdXNlIGhhc19udWwgZGlyZWN0bHkuICBUaGUKKwkgICBlYXNpZXN0IHdheSB0byBnZXQgdGhlIGNvcnJlY3QgYnl0ZSBpcyB0byBieXRlLXN3YXAgdGhlIGRhdGEKKwkgICBhbmQgY2FsY3VsYXRlIHRoZSBzeW5kcm9tZSBhIHNlY29uZCB0aW1lLiAgKi8KKwlyZXYJZGF0YTIsIGRhdGEyCisJc3ViCXRtcDEsIGRhdGEyLCB6ZXJvb25lcworCW9ycgl0bXAyLCBkYXRhMiwgI1JFUDhfN2YKKwliaWMJaGFzX251bDIsIHRtcDEsIHRtcDIKKyNlbmRpZgorCXN1YglsZW4sIGxlbiwgIzgKKwlyZXYJaGFzX251bDIsIGhhc19udWwyCisJY2x6CXBvcywgaGFzX251bDIKKwlhZGQJbGVuLCBsZW4sIHBvcywgbHNyICMzCQkvKiBCaXRzIHRvIGJ5dGVzLiAgKi8KKwljbXAJbGVuLCBsaW1pdAorCWNzZWwJbGVuLCBsZW4sIGxpbWl0LCBscwkJLyogUmV0dXJuIHRoZSBsb3dlciB2YWx1ZS4gICovCisJcmV0CisKKy5MbWlzYWxpZ25lZDoKKwkvKiBEZWFsIHdpdGggYSBwYXJ0aWFsIGZpcnN0IHdvcmQuCisJICAgV2UncmUgZG9pbmcgdHdvIHRoaW5ncyBpbiBwYXJhbGxlbCBoZXJlOworCSAgIDEpIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHdvcmRzIChidXQgYXZvaWRpbmcgb3ZlcmZsb3cgaWYKKwkgICAgICBsaW1pdCBpcyBuZWFyIFVMT05HX01BWCkgLSB0byBkbyB0aGlzIHdlIG5lZWQgdG8gd29yayBvdXQKKwkgICAgICBsaW1pdCArIHRtcDEgLSAxIGFzIGEgNjUtYml0IHZhbHVlIGJlZm9yZSBzaGlmdGluZyBpdDsKKwkgICAyKSBMb2FkIGFuZCBtYXNrIHRoZSBpbml0aWFsIGRhdGEgd29yZHMgLSB3ZSBmb3JjZSB0aGUgYnl0ZXMKKwkgICAgICBiZWZvcmUgdGhlIG9uZXMgd2UgYXJlIGludGVyZXN0ZWQgaW4gdG8gMHhmZiAtIHRoaXMgZW5zdXJlcworCSAgICAgIGVhcmx5IGJ5dGVzIHdpbGwgbm90IGhpdCBhbnkgemVybyBkZXRlY3Rpb24uICAqLworCXN1YglsaW1pdF93ZCwgbGltaXQsICMxCisJbmVnCXRtcDQsIHRtcDEKKwljbXAJdG1wMSwgIzgKKworCWFuZAl0bXAzLCBsaW1pdF93ZCwgIzE1CisJbHNyCWxpbWl0X3dkLCBsaW1pdF93ZCwgIzQKKwltb3YJdG1wMiwgI34wCisKKwlsZHAJZGF0YTEsIGRhdGEyLCBbc3JjXSwgIzE2CisJbHNsCXRtcDQsIHRtcDQsICMzCQkvKiBCeXRlcyBiZXlvbmQgYWxpZ25tZW50IC0+IGJpdHMuICAqLworCWFkZAl0bXAzLCB0bXAzLCB0bXAxCisKKyNpZmRlZiBfX0FBUkNINjRFQl9fCisJLyogQmlnLWVuZGlhbi4gIEVhcmx5IGJ5dGVzIGFyZSBhdCBNU0IuICAqLworCWxzbAl0bXAyLCB0bXAyLCB0bXA0CS8qIFNoaWZ0ICh0bXAxICYgNjMpLiAgKi8KKyNlbHNlCisJLyogTGl0dGxlLWVuZGlhbi4gIEVhcmx5IGJ5dGVzIGFyZSBhdCBMU0IuICAqLworCWxzcgl0bXAyLCB0bXAyLCB0bXA0CS8qIFNoaWZ0ICh0bXAxICYgNjMpLiAgKi8KKyNlbmRpZgorCWFkZAlsaW1pdF93ZCwgbGltaXRfd2QsIHRtcDMsIGxzciAjNAorCisJb3JyCWRhdGExLCBkYXRhMSwgdG1wMgorCW9ycglkYXRhMmEsIGRhdGEyLCB0bXAyCisKKwljc2ludglkYXRhMSwgZGF0YTEsIHh6ciwgbGUKKwljc2VsCWRhdGEyLCBkYXRhMiwgZGF0YTJhLCBsZQorCWIJLkxyZWFsaWduZWQKK0VORChzdHJubGVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3dtZW1tb3ZlLlMgYi9saWJjL2FyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvd21lbW1vdmUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGY2N2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3dtZW1tb3ZlLlMKQEAgLTAsMCArMSwzMCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE0LCBMaW5hcm8gTGltaXRlZAorICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIExpbmFybyBub3IgdGhlCisgICAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBXTUVNTU9WRQorI2luY2x1ZGUgIm1lbW1vdmUuUyIKKyN1bmRlZiBXTUVNTU9WRQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L2dlbmVyaWMvZ2VuZXJpYy5tayBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2dlbmVyaWMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI1OTVhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9nZW5lcmljL2dlbmVyaWMubWsKQEAgLTAsMCArMSwxNCBAQAorbGliY19iaW9uaWNfc3JjX2ZpbGVzX2FybTY0ICs9IFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbWNoci5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbWNtcC5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbWNweS5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL21lbW1vdmUuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHBjcHkuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjaHIuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjbXAuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJjcHkuUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJsZW4uUyBcCisgICAgYXJjaC1hcm02NC9nZW5lcmljL2Jpb25pYy9zdHJuY21wLlMgXAorICAgIGFyY2gtYXJtNjQvZ2VuZXJpYy9iaW9uaWMvc3Rybmxlbi5TIFwKKyAgICBhcmNoLWFybTY0L2dlbmVyaWMvYmlvbmljL3dtZW1tb3ZlLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmggYi9saWJjL2FyY2gtYXJtNjQvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTQ2MmFiLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IF90eXBlcy5oLHYgMS4zIDIwMDYvMDIvMTQgMTg6MTI6NTggbWlvZCBFeHAgJAkqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIyl0eXBlcy5oCTguMyAoQmVya2VsZXkpIDEvNS85NAotICoJQCgjKWFuc2kuaAk4LjIgKEJlcmtlbGV5KSAxLzQvOTQKLSAqLwotCi0jaWZuZGVmIF9BQVJDSDY0X19UWVBFU19IXwotI2RlZmluZSBfQUFSQ0g2NF9fVFlQRVNfSF8KLQotLyogNy4xOC4xLjEgRXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX3NpZ25lZCBjaGFyCQlfX2ludDhfdDsKLXR5cGVkZWYJdW5zaWduZWQgY2hhcgkJX191aW50OF90OwotdHlwZWRlZglzaG9ydAkJCV9faW50MTZfdDsKLXR5cGVkZWYJdW5zaWduZWQgc2hvcnQJCV9fdWludDE2X3Q7Ci10eXBlZGVmCWludAkJCV9faW50MzJfdDsKLXR5cGVkZWYJdW5zaWduZWQgaW50CQlfX3VpbnQzMl90OwotdHlwZWRlZglsb25nIAkJX19pbnQ2NF90OwotdHlwZWRlZgl1bnNpZ25lZCBsb25nICBfX3VpbnQ2NF90OwotCi0vKiA3LjE4LjEuMiBNaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQ4X3QJCV9faW50X2xlYXN0OF90OwotdHlwZWRlZglfX3VpbnQ4X3QJCV9fdWludF9sZWFzdDhfdDsKLXR5cGVkZWYJX19pbnQxNl90CQlfX2ludF9sZWFzdDE2X3Q7Ci10eXBlZGVmCV9fdWludDE2X3QJCV9fdWludF9sZWFzdDE2X3Q7Ci10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfbGVhc3QzMl90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfbGVhc3QzMl90OwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50X2xlYXN0NjRfdDsKLXR5cGVkZWYJX191aW50NjRfdAkJX191aW50X2xlYXN0NjRfdDsKLQotLyogNy4xOC4xLjMgRmFzdGVzdCBtaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0OF90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDhfdDsKLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0MTZfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3QxNl90OwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3QzMl90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDMyX3Q7Ci10eXBlZGVmCV9faW50NjRfdAkJX19pbnRfZmFzdDY0X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludF9mYXN0NjRfdDsKLQotLyogNy4xOC4xLjQgSW50ZWdlciB0eXBlcyBjYXBhYmxlIG9mIGhvbGRpbmcgb2JqZWN0IHBvaW50ZXJzICovCi10eXBlZGVmCWludCAJCQlfX2ludHB0cl90OwotdHlwZWRlZgl1bnNpZ25lZCBpbnQgCQlfX3VpbnRwdHJfdDsKLQotLyogNy4xOC4xLjUgR3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50bWF4X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludG1heF90OwotCi0vKiBSZWdpc3RlciBzaXplICovCi10eXBlZGVmCV9faW50NjRfdAkJX19yZWdpc3Rlcl90OwotCi0vKiBWTSBzeXN0ZW0gdHlwZXMgKi8KLXR5cGVkZWYJdW5zaWduZWQgbG9uZwkJX192YWRkcl90OwotdHlwZWRlZgl1bnNpZ25lZCBsb25nCQlfX3BhZGRyX3Q7Ci10eXBlZGVmCXVuc2lnbmVkIGxvbmcJCV9fdnNpemVfdDsKLXR5cGVkZWYJdW5zaWduZWQgbG9uZwkJX19wc2l6ZV90OwotCi0vKiBTdGFuZGFyZCBzeXN0ZW0gdHlwZXMgKi8KLXR5cGVkZWYJbG9uZwkJCV9fY2xvY2tfdDsKLXR5cGVkZWYJaW50CSAgICAJCV9fY2xvY2tpZF90OwotdHlwZWRlZglkb3VibGUJCQlfX2RvdWJsZV90OwotdHlwZWRlZglmbG9hdAkJCV9fZmxvYXRfdDsKLXR5cGVkZWYJbG9uZwkJCV9fcHRyZGlmZl90OwotdHlwZWRlZglsb25nCQkJX190aW1lX3Q7Ci10eXBlZGVmCWludAkgICAgCQlfX3RpbWVyX3Q7Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwotdHlwZWRlZglfX2J1aWx0aW5fdmFfbGlzdAlfX3ZhX2xpc3Q7Ci0jZWxzZQotdHlwZWRlZgljaGFyICoJCQlfX3ZhX2xpc3Q7Ci0jZW5kaWYKLQotLyogV2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCB0eXBlcyAqLwotI2lmbmRlZiBfX2NwbHVzcGx1cwotdHlwZWRlZglpbnQJCQlfX3djaGFyX3Q7Ci0jZW5kaWYKLXR5cGVkZWYJaW50CQkJX193aW50X3Q7Ci10eXBlZGVmCWludAkJCV9fcnVuZV90OwotdHlwZWRlZgl2b2lkICoJCQlfX3djdHJhbnNfdDsKLXR5cGVkZWYJdm9pZCAqCQkJX193Y3R5cGVfdDsKLQotI2RlZmluZSBfQllURV9PUkRFUiBfTElUVExFX0VORElBTgotCi0jZW5kaWYgIC8qIF9BQVJDSDY0X19UWVBFU19IXyAqLwotCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oIGIvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9hc20uaAppbmRleCAzZjhiOTA4Li40YmZhYmFmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCisrKyBiL2xpYmMvYXJjaC1hcm02NC9pbmNsdWRlL21hY2hpbmUvYXNtLmgKQEAgLTM4LDkxICszOCwxNyBAQAogI2lmbmRlZiBfQUFSQ0g2NF9BU01fSF8KICNkZWZpbmUgX0FBUkNINjRfQVNNX0hfCiAKLS8qIFRPRE86IEFkZCBjZmkgZGlyZWN0aXZlcyBmb3IgY3JlYXRpbmcvcmVzdG9yaW5nIEZQICovCi0jaWZkZWYgX19FTEZfXwotIyBkZWZpbmUJX0NfTEFCRUwoeCkJeAotI2Vsc2UKLSMgaWZkZWYgX19TVERDX18KLSMgIGRlZmluZQlfQ19MQUJFTCh4KQlfICMjIHgKLSMgZWxzZQotIyAgZGVmaW5lCV9DX0xBQkVMKHgpCV8vKioveAotIyBlbmRpZgotI2VuZGlmCi0jZGVmaW5lCV9BU01fTEFCRUwoeCkJeAotCi0jaWZkZWYgX19TVERDX18KLSMgZGVmaW5lCV9fQ09OQ0FUKHgseSkJeCAjIyB5Ci0jIGRlZmluZQlfX1NUUklORyh4KQkjeAotI2Vsc2UKLSMgZGVmaW5lCV9fQ09OQ0FUKHgseSkJeC8qKi95Ci0jIGRlZmluZQlfX1NUUklORyh4KQkieCIKLSNlbmRpZgotCiAjaWZuZGVmIF9BTElHTl9URVhUCi0jIGRlZmluZQlfQUxJR05fVEVYVAkuYWxpZ24gMAorIyBkZWZpbmUgX0FMSUdOX1RFWFQgLmFsaWduIDAKICNlbmRpZgogCi0jZGVmaW5lCV9BU01fVFlQRV9GVU5DVElPTgklZnVuY3Rpb24KLSNkZWZpbmUJX0FTTV9UWVBFX09CSkVDVAklb2JqZWN0Ci0jZGVmaW5lCV9FTlRSWSh4KSBcCi0JLnRleHQ7IF9BTElHTl9URVhUOyAuZ2xvYmwgeDsgLnR5cGUgeCxfQVNNX1RZUEVfRlVOQ1RJT047IHg6IC5jZmlfc3RhcnRwcm9jCi0KLSNkZWZpbmUJX0FTTV9TSVpFKHgpCS5zaXplIHgsIC4teDsKLQotI2RlZmluZSBfRU5EKHgpIFwKLQkuY2ZpX2VuZHByb2M7IFwKLQlfQVNNX1NJWkUoeCkKLQotI2RlZmluZQlFTlRSWSh5KQlfRU5UUlkoX0NfTEFCRUwoeSkpOwotI2RlZmluZQlFTlRSWV9OUCh5KQlfRU5UUlkoX0NfTEFCRUwoeSkpCi0jZGVmaW5lCUVORCh5KQkJX0VORChfQ19MQUJFTCh5KSkKLSNkZWZpbmUJQVNFTlRSWSh5KQlfRU5UUlkoX0FTTV9MQUJFTCh5KSk7IF9QUk9GX1BST0xPR1VFCi0jZGVmaW5lCUFTRU5UUllfTlAoeSkJX0VOVFJZKF9BU01fTEFCRUwoeSkpCi0jZGVmaW5lCUFTRU5EKHkpCV9FTkQoX0FTTV9MQUJFTCh5KSkKLQotI2lmZGVmIF9fRUxGX18KLSNkZWZpbmUJRU5UUllfUFJJVkFURSh5KSAgRU5UUlkoeSk7IC5oaWRkZW4gX0NfTEFCRUwoeSkKLSNlbHNlCi0jZGVmaW5lCUVOVFJZX1BSSVZBVEUoeSkgIEVOVFJZKHkpCi0jZW5kaWYKLQotI2RlZmluZQlBU01TVFIJCS5hc2NpegorI3VuZGVmIF9fYmlvbmljX2FzbV9mdW5jdGlvbl90eXBlCisjZGVmaW5lIF9fYmlvbmljX2FzbV9mdW5jdGlvbl90eXBlICVmdW5jdGlvbgogCiAjaWYgZGVmaW5lZChfX0VMRl9fKSAmJiBkZWZpbmVkKFBJQykKLSNpZmRlZiBfX1NURENfXwotI2RlZmluZQlQSUNfU1lNKHgseSkJeCAjIyAoICMjIHkgIyMgKQorI2RlZmluZSBQSUNfU1lNKHgseSkgeCAjIyAoICMjIHkgIyMgKQogI2Vsc2UKLSNkZWZpbmUJUElDX1NZTSh4LHkpCXgvKiovKC8qKi95LyoqLykKKyNkZWZpbmUgUElDX1NZTSh4LHkpIHgKICNlbmRpZgotI2Vsc2UKLSNkZWZpbmUJUElDX1NZTSh4LHkpCXgKLSNlbmRpZgotCi0jaWZkZWYgX19FTEZfXwotI2RlZmluZQlSQ1NJRCh4KQkuc2VjdGlvbiAiLmlkZW50IjsgLmFzY2l6IHgKLSNlbHNlCi0jZGVmaW5lCVJDU0lEKHgpCS50ZXh0OyAuYXNjaXogeAotI2VuZGlmCi0KLSNpZmRlZiBfX0VMRl9fCi0jZGVmaW5lCVdFQUtfQUxJQVMoYWxpYXMsc3ltKQkJCQkJCVwKLQkud2VhayBhbGlhczsJCQkJCQkJXAotCWFsaWFzID0gc3ltCi0jZW5kaWYKLQotI2lmZGVmIF9fU1REQ19fCi0jZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAotCS5zdGFicyBtc2cgIyMgLDMwLDAsMCwwIDsJCQkJCVwKLQkuc3RhYnMgX19TVFJJTkcoX0NfTEFCRUwoc3ltKSkgIyMgLDEsMCwwLDAKLSNlbGlmIGRlZmluZWQoX19FTEZfXykKLSNkZWZpbmUJV0FSTl9SRUZFUkVOQ0VTKHN5bSxtc2cpCQkJCQlcCi0JLnN0YWJzIG1zZywzMCwwLDAsMCA7CQkJCQkJXAotCS5zdGFicyBfX1NUUklORyhzeW0pLDEsMCwwLDAKLSNlbHNlCi0jZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAotCS5zdGFicyBtc2csMzAsMCwwLDAgOwkJCQkJCVwKLQkuc3RhYnMgX19TVFJJTkcoXy8qKi9zeW0pLDEsMCwwLDAKLSNlbmRpZiAvKiBfX1NURENfXyAqLwogCiAjZW5kaWYgLyogX0FBUkNINjRfQVNNX0hfICovCi0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9pZWVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMmMxZmMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9pZWVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGllZWUuaCx2IDEuMSAyMDA0LzAyLzAxIDA1OjA5OjQ5IGRyYWhuIEV4cCAkCSovCi0vKgkkTmV0QlNEOiBpZWVlLmgsdiAxLjIgMjAwMS8wMi8yMSAxNzo0Mzo1MCBiamgyMSBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgdGhlIENvbXB1dGVyIFN5c3RlbXMgRW5naW5lZXJpbmcgZ3JvdXAKLSAqIGF0IExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgdW5kZXIgREFSUEEgY29udHJhY3QgQkcgOTEtNjYgYW5kCi0gKiBjb250cmlidXRlZCB0byBCZXJrZWxleS4KLSAqCi0gKiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAqCUNhbGlmb3JuaWEsIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpaWVlZS5oCTguMSAoQmVya2VsZXkpIDYvMTEvOTMKLSAqLwotCi0vKgotICogaWVlZS5oIGRlZmluZXMgdGhlIG1hY2hpbmUtZGVwZW5kZW50IGxheW91dCBvZiB0aGUgbWFjaGluZSdzIElFRUUKLSAqIGZsb2F0aW5nIHBvaW50LgotICovCi0KLS8qCi0gKiBEZWZpbmUgdGhlIG51bWJlciBvZiBiaXRzIGluIGVhY2ggZnJhY3Rpb24gYW5kIGV4cG9uZW50LgotICoKLSAqCQkgICAgIGsJICAgICAgICAgaysxCi0gKiBOb3RlIHRoYXQgIDEuMCB4IDIgID09IDAuMSB4IDIgICAgICBhbmQgdGhhdCBkZW5vcm1zIGFyZSByZXByZXNlbnRlZAotICoKLSAqCQkJCQkgICgtZXhwX2JpYXMrMSkKLSAqIGFzIGZyYWN0aW9ucyB0aGF0IGxvb2sgbGlrZSAwLmZmZmZmIHggMiAgICAgICAgICAgICAuICBUaGlzIG1lYW5zIHRoYXQKLSAqCi0gKgkJCSAtMTI2Ci0gKiB0aGUgbnVtYmVyIDAuMTAwMDAgeCAyICAgICwgZm9yIGluc3RhbmNlLCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsaXplZAotICoKLSAqCQktMTI3CQkJICAgLTEyOAotICogZmxvYXQgMS4wIHggMiAgICAuICBUaHVzLCB0byByZXByZXNlbnQgMiAgICAsIHdlIG5lZWQgb25lIGxlYWRpbmcgemVybwotICoKLSAqCQkJCSAgLTEyOQotICogaW4gdGhlIGZyYWN0aW9uOyB0byByZXByZXNlbnQgMiAgICAsIHdlIG5lZWQgdHdvLCBhbmQgc28gb24uICBUaGlzCi0gKgotICoJCQkJCQkgICAgICgtZXhwX2JpYXMtZnJhY2JpdHMrMSkKLSAqIGltcGxpZXMgdGhhdCB0aGUgc21hbGxlc3QgZGVub3JtYWxpemVkIG51bWJlciBpcyAyCi0gKgotICogZm9yIHdoaWNoZXZlciBmb3JtYXQgd2UgYXJlIHRhbGtpbmcgYWJvdXQ6IGZvciBzaW5nbGUgcHJlY2lzaW9uLCBmb3IKLSAqCi0gKgkJCQkJCS0xMjYJCS0xNDkKLSAqIGluc3RhbmNlLCB3ZSBnZXQgLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIHggMiAgICAsIG9yIDEuMCB4IDIgICAgLCBhbmQKLSAqCi0gKiAtMTQ5ID09IC0xMjcgLSAyMyArIDEuCi0gKi8KLQotLyoKLSAqIFRoZSBBUk0gaGFzIHR3byBzZXRzIG9mIEZQIGRhdGEgZm9ybWF0cy4gIFRoZSBGUEEgc3VwcG9ydHMgMzItYml0LCA2NC1iaXQKLSAqIGFuZCA5Ni1iaXQgSUVFRSBmb3JtYXRzLCB3aXRoIHRoZSB3b3JkcyBpbiBiaWctZW5kaWFuIG9yZGVyLiAgVkZQIHN1cHBvcnRzCi0gKiAzMi1iaW4gYW5kIDY0LWJpdCBJRUVFIGZvcm1hdHMgd2l0aCB0aGUgd29yZHMgaW4gdGhlIENQVSdzIG5hdGl2ZSBieXRlCi0gKiBvcmRlci4KLSAqCi0gKiBUaGUgRlBBIGFsc28gaGFzIHR3byBwYWNrZWQgZGVjaW1hbCBmb3JtYXRzLCBidXQgd2UgaWdub3JlIHRoZW0gaGVyZS4KLSAqLwotCi0jZGVmaW5lCVNOR19FWFBCSVRTCTgKLSNkZWZpbmUJU05HX0ZSQUNCSVRTCTIzCi0KLSNkZWZpbmUJREJMX0VYUEJJVFMJMTEKLSNkZWZpbmUJREJMX0ZSQUNCSVRTCTUyCi0KLSNpZm5kZWYgX19WRlBfRlBfXwotI2RlZmluZQlFODBfRVhQQklUUwkxNQotI2RlZmluZQlFODBfRlJBQ0JJVFMJNjQKLQotI2RlZmluZQlFWFRfRVhQQklUUwkxNQotI2RlZmluZQlFWFRfRlJBQ0JJVFMJMTEyCi0jZW5kaWYKLQotc3RydWN0IGllZWVfc2luZ2xlIHsKLQl1X2ludAlzbmdfZnJhYzoyMzsKLQl1X2ludAlzbmdfZXhwb25lbnQ6ODsKLQl1X2ludAlzbmdfc2lnbjoxOwotfTsKLQotI2lmZGVmIF9fVkZQX0ZQX18KLXN0cnVjdCBpZWVlX2RvdWJsZSB7Ci0jaWZkZWYgX19BQVJDSDY0RUJfXwotCXVfaW50CWRibF9zaWduOjE7Ci0JdV9pbnQJZGJsX2V4cDoxMTsKLQl1X2ludAlkYmxfZnJhY2g6MjA7Ci0JdV9pbnQJZGJsX2ZyYWNsOwotI2Vsc2UgLyogIV9fQUFSQ0g2NEVCX18gKi8KLQl1X2ludAlkYmxfZnJhY2w7Ci0JdV9pbnQJZGJsX2ZyYWNoOjIwOwotCXVfaW50CWRibF9leHA6MTE7Ci0JdV9pbnQJZGJsX3NpZ246MTsKLSNlbmRpZiAvKiAhX19BQVJDSDY0RUJfXyAqLwotfTsKLSNlbHNlIC8qICFfX1ZGUF9GUF9fICovCi1zdHJ1Y3QgaWVlZV9kb3VibGUgewotCXVfaW50CWRibF9mcmFjaDoyMDsKLQl1X2ludAlkYmxfZXhwOjExOwotCXVfaW50CWRibF9zaWduOjE7Ci0JdV9pbnQJZGJsX2ZyYWNsOwotfTsKLQotdW5pb24gaWVlZV9kb3VibGVfdSB7Ci0JZG91YmxlICAgICAgICAgICAgICAgICAgZGJsdV9kOwotCXN0cnVjdCBpZWVlX2RvdWJsZSAgICAgIGRibHVfZGJsOwotfTsKLQotCi1zdHJ1Y3QgaWVlZV9lODAgewotCXVfaW50CWU4MF9leHA6MTU7Ci0JdV9pbnQJZTgwX3plcm86MTY7Ci0JdV9pbnQJZTgwX3NpZ246MTsKLQl1X2ludAllODBfZnJhY2g6MzE7Ci0JdV9pbnQJZTgwX2o6MTsKLQl1X2ludAllODBfZnJhY2w7Ci19OwotCi1zdHJ1Y3QgaWVlZV9leHQgewotCXVfaW50CWV4dF9mcmFjaDoxNjsKLQl1X2ludAlleHRfZXhwOjE1OwotCXVfaW50CWV4dF9zaWduOjE7Ci0JdV9pbnQJZXh0X2ZyYWNobTsKLQl1X2ludAlleHRfZnJhY2xtOwotCXVfaW50CWV4dF9mcmFjbDsKLX07Ci0jZW5kaWYgLyogIV9fVkZQX0ZQX18gKi8KLQotLyoKLSAqIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyBpbiBbMS4uSU5GTkFOKSAob2Ygd2hhdGV2ZXIgdHlwZSkgYXJlCi0gKiBgbm9ybWFsJy4gIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyBJTkZOQU4gYXJlIGVpdGhlciBJbmYgb3IgTmFOLgotICogRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIHplcm8gYXJlIGVpdGhlciB6ZXJvIChpZmYgYWxsIGZyYWN0aW9uCi0gKiBiaXRzIGFyZSB6ZXJvKSBvciBzdWJub3JtYWwgdmFsdWVzLgotICoKLSAqIEEgTmFOIGlzIGEgYHNpZ25hbGxpbmcgTmFOJyBpZiBpdHMgUVVJRVROQU4gYml0IGlzIGNsZWFyIGluIGl0cwotICogaGlnaCBmcmFjdGlvbjsgaWYgdGhlIGJpdCBpcyBzZXQsIGl0IGlzIGEgYHF1aWV0IE5hTicuCi0gKi8KLSNkZWZpbmUJU05HX0VYUF9JTkZOQU4JMjU1Ci0jZGVmaW5lCURCTF9FWFBfSU5GTkFOCTIwNDcKLSNpZm5kZWYgX19WRlBfRlBfXwotI2RlZmluZQlFODBfRVhQX0lORk5BTgkzMjc2NwotI2RlZmluZQlFWFRfRVhQX0lORk5BTgkzMjc2NwotI2VuZGlmIC8qICFfX1ZGUF9GUF9fICovCi0KLSNpZiAwCi0jZGVmaW5lCVNOR19RVUlFVE5BTgkoMSA8PCAyMikKLSNkZWZpbmUJREJMX1FVSUVUTkFOCSgxIDw8IDE5KQotI2lmbmRlZiBfX1ZGUF9GUF9fCi0jZGVmaW5lCUU4MF9RVUlFVE5BTgkoMSA8PCAxNSkKLSNkZWZpbmUJRVhUX1FVSUVUTkFOCSgxIDw8IDE1KQotI2VuZGlmIC8qICFfX1ZGUF9GUF9fICovCi0jZW5kaWYKLQotLyoKLSAqIEV4cG9uZW50IGJpYXNlcy4KLSAqLwotI2RlZmluZQlTTkdfRVhQX0JJQVMJMTI3Ci0jZGVmaW5lCURCTF9FWFBfQklBUwkxMDIzCi0jaWZuZGVmIF9fVkZQX0ZQX18KLSNkZWZpbmUJRTgwX0VYUF9CSUFTCTE2MzgzCi0jZGVmaW5lCUVYVF9FWFBfQklBUwkxNjM4MwotI2VuZGlmIC8qICFfX1ZGUF9GUF9fICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oIGIvbGliYy9hcmNoLWFybTY0L2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNkZGIwMS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGxpbWl0cy5oLHYgMS4zIDIwMDYvMDEvMDYgMjI6NDg6NDYgbWlsbGVydCBFeHAgJAkqLwotLyoJJE5ldEJTRDogbGltaXRzLmgsdiAxLjQgMjAwMy8wNC8yOCAyMzoxNjoxOCBiamgyMSBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglmcm9tOiBAKCMpbGltaXRzLmgJNy4yIChCZXJrZWxleSkgNi8yOC85MAotICovCi0KLSNpZm5kZWYgX0FBUkNINjRfTElNSVRTX0hfCi0jZGVmaW5lIF9BQVJDSDY0X0xJTUlUU19IXwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLSNkZWZpbmUJTUJfTEVOX01BWAkxCQkvKiBubyBtdWx0aWJ5dGUgY2hhcmFjdGVycyAqLwotCi0jZGVmaW5lCUxPTkdMT05HX0JJVAk2NAotI2RlZmluZQlMT05HTE9OR19NSU4JKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwtMSkKLSNkZWZpbmUJTE9OR0xPTkdfTUFYCTkyMjMzNzIwMzY4NTQ3NzU4MDdMTAotI2RlZmluZQlVTE9OR0xPTkdfTUFYCTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMCi0KLSNpZm5kZWYJU0laRV9NQVgKLSNkZWZpbmUJU0laRV9NQVgJVUxPTkdMT05HX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90ICovCi0jZW5kaWYKLSNpZm5kZWYgU1NJWkVfTUFYCi0jZGVmaW5lCVNTSVpFX01BWAlMT05HTE9OR19NQVgJCS8qIG1heCB2YWx1ZSBmb3IgYSBzc2l6ZV90ICovCi0jZW5kaWYKLQotI2lmIF9fQlNEX1ZJU0lCTEUKLSNkZWZpbmUJU0laRV9UX01BWAlVTE9OR19NQVgJLyogbWF4IHZhbHVlIGZvciBhIHNpemVfdCAoaGlzdG9yaWMpICovCi0KLSNkZWZpbmUJVVFVQURfTUFYCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTAkJLyogbWF4IHVuc2lnbmVkIHF1YWQgKi8KLSNkZWZpbmUJUVVBRF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmTEwJCS8qIG1heCBzaWduZWQgcXVhZCAqLwotI2RlZmluZQlRVUFEX01JTgkoLTB4N2ZmZmZmZmZmZmZmZmZmZkxMLTEpCS8qIG1pbiBzaWduZWQgcXVhZCAqLwotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotI2VuZGlmIC8qIF9BQVJDSDY0X0xJTUlUU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzLm1rIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWRlNWE1Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy5taworKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0jIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuCi1zeXNjYWxsX3NyYyA6PQotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX2Jyay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX2V4aXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGNwdS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0Y3dkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19faW9jdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX29wZW5hdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fcHBvbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19wdHJhY2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3JlYm9vdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX19zeXNsb2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvX193YWl0aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9fZXhpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2FjY2VwdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2FjY3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9iaW5kLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvY2FwZ2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvY2Fwc2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvY2hkaXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9jaHJvb3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2Nsb3NlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvY29ubmVjdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9kdXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9kdXAzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2V2ZW50ZmQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9leGVjdmUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mYWNjZXNzYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mY2hkaXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mY2htb2QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mY2htb2RhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG93bi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG93bmF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZmNudGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mZGF0YXN5bmMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZmxvY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mc2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0YXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdGZzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZnN5bmMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mdHJ1bmNhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9mdXRleC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2dldGRlbnRzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0ZWdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2dldGV1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRncm91cHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRpdGltZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwZWVybmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2dldHBnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwcGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cmVzdWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0c2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0c29ja25hbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0dGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0dWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9pbml0X21vZHVsZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvaW9wcmlvX3NldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2tpbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9rbG9nY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbGdldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbGlzdGVuLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbGxpc3R4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL2xzZWVrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbHNldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbWFkdmlzZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL21pbmNvcmUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9ta2RpcmF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbWtub2RhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL21sb2NrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbWxvY2thbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9tbWFwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbW91bnQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9tcHJvdGVjdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL21yZW1hcC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL21zeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvbXVubG9jay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL211bmxvY2thbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9tdW5tYXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9uYW5vc2xlZXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9wZXJzb25hbGl0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3BpcGUyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvcHJjdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9wcmVhZDY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvcHJsaW1pdDY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvcHdyaXRlNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZGFoZWFkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZGxpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3JlYWR2LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvcmVjdmZyb20uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9yZWN2bXNnLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9yZW5hbWVhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZW5kZmlsZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRtc2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZW5kdG8uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXRnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXRncm91cHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXRpdGltZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXRucy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NldHBnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXRwcmlvcml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NldHJlZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmVzdWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmV1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXRybGltaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXRzaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2V0dWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zaHV0ZG93bi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc2lnbmFsZmQ0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc29ja2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc29ja2V0cGFpci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3N0YXRmcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3N3YXBvZmYuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zd2Fwb24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zeW1saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy9zeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvc3lzaW5mby5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3Rna2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy90a2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3RydW5jYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvdW1hc2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy91bW91bnQyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvdW5hbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy91bmxpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3Vuc2hhcmUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy91dGltZW5zYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm02NC9zeXNjYWxscy93YWl0NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLWFybTY0L3N5c2NhbGxzL3dyaXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtNjQvc3lzY2FsbHMvd3JpdGV2LlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2FjY2VwdDQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2FjY2VwdDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTllNmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fYWNjZXB0NC5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19hY2NlcHQ0KQorICAgIG1vdiAgICAgeDgsIF9fTlJfYWNjZXB0NAorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChfX2FjY2VwdDQpCisuaGlkZGVuIF9fYWNjZXB0NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fYnJrLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19icmsuUwppbmRleCA5ODA1NWNjLi5mYjc5NGJmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19icmsuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19icmsuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX2JyaykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9icmsKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19icmspCi0uaGlkZGVuIF9DX0xBQkVMKF9fYnJrKQorLmhpZGRlbiBfX2JyawpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fY2xvY2tfZ2V0dGltZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fY2xvY2tfZ2V0dGltZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OGFiMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19jbG9ja19nZXR0aW1lLlMKQEAgLTAsMCArMSwxNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2Nsb2NrX2dldHRpbWUpCisgICAgbW92ICAgICB4OCwgX19OUl9jbG9ja19nZXR0aW1lCisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKF9fY2xvY2tfZ2V0dGltZSkKKy5oaWRkZW4gX19jbG9ja19nZXR0aW1lCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19jb25uZWN0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19jb25uZWN0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4ZTZlYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2Nvbm5lY3QuUwpAQCAtMCwwICsxLDE1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fY29ubmVjdCkKKyAgICBtb3YgICAgIHg4LCBfX05SX2Nvbm5lY3QKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoX19jb25uZWN0KQorLmhpZGRlbiBfX2Nvbm5lY3QKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCmluZGV4IGQ1MTJjN2MuLmFjZjJiYmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX2Vwb2xsX3B3YWl0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2Vwb2xsX3B3YWl0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKF9fZXBvbGxfcHdhaXQpCi0uaGlkZGVuIF9DX0xBQkVMKF9fZXBvbGxfcHdhaXQpCisuaGlkZGVuIF9fZXBvbGxfcHdhaXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2V4aXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2V4aXQuUwppbmRleCA1MGNkNDVhLi5iNmIxODY2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19leGl0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZXhpdC5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fZXhpdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9leGl0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKF9fZXhpdCkKLS5oaWRkZW4gX0NfTEFCRUwoX19leGl0KQorLmhpZGRlbiBfX2V4aXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZmFkdmlzZTY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1ZDA5NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19mYWR2aXNlNjQpCisgICAgbW92ICAgICB4OCwgX19OUl9mYWR2aXNlNjQKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoX19mYWR2aXNlNjQpCisuaGlkZGVuIF9fZmFkdmlzZTY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXRjcHUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGNwdS5TCmluZGV4IDY5OGU4ZmYuLjExZWQ2OGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGNwdS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGNwdS5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fZ2V0Y3B1KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldGNwdQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX2dldGNwdSkKLS5oaWRkZW4gX0NfTEFCRUwoX19nZXRjcHUpCisuaGlkZGVuIF9fZ2V0Y3B1CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXRjd2QuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGN3ZC5TCmluZGV4IGYwNTQzZjAuLmM2NGY0ZDIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGN3ZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGN3ZC5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fZ2V0Y3dkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldGN3ZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX2dldGN3ZCkKLS5oaWRkZW4gX0NfTEFCRUwoX19nZXRjd2QpCisuaGlkZGVuIF9fZ2V0Y3dkCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXRkZW50czY0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXRkZW50czY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0MzM5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldGRlbnRzNjQuUwpAQCAtMCwwICsxLDE1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZ2V0ZGVudHM2NCkKKyAgICBtb3YgICAgIHg4LCBfX05SX2dldGRlbnRzNjQKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoX19nZXRkZW50czY0KQorLmhpZGRlbiBfX2dldGRlbnRzNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldHBpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0cGlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJjOTZkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldHBpZC5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXRwaWQpCisgICAgbW92ICAgICB4OCwgX19OUl9nZXRwaWQKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoX19nZXRwaWQpCisuaGlkZGVuIF9fZ2V0cGlkCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwppbmRleCBmN2ZkMWI4Li45ZDk4ZTIyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX19nZXRwcmlvcml0eSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXRwcmlvcml0eQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX2dldHByaW9yaXR5KQotLmhpZGRlbiBfQ19MQUJFTChfX2dldHByaW9yaXR5KQorLmhpZGRlbiBfX2dldHByaW9yaXR5CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2dldHRpbWVvZmRheS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjODIwNmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19nZXR0aW1lb2ZkYXkuUwpAQCAtMCwwICsxLDE1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZ2V0dGltZW9mZGF5KQorICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0dGltZW9mZGF5CisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKF9fZ2V0dGltZW9mZGF5KQorLmhpZGRlbiBfX2dldHRpbWVvZmRheQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19faW9jdGwuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX2lvY3RsLlMKaW5kZXggMjU2OWZkZi4uNjJiYzI4YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19faW9jdGwuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19pb2N0bC5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9faW9jdGwpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfaW9jdGwKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19pb2N0bCkKLS5oaWRkZW4gX0NfTEFCRUwoX19pb2N0bCkKKy5oaWRkZW4gX19pb2N0bApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fb3BlbmF0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19vcGVuYXQuUwppbmRleCBjY2E2NmNlLi44YjY4NTNmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19vcGVuYXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19vcGVuYXQuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX29wZW5hdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9vcGVuYXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19vcGVuYXQpCi0uaGlkZGVuIF9DX0xBQkVMKF9fb3BlbmF0KQorLmhpZGRlbiBfX29wZW5hdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcHBvbGwuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3Bwb2xsLlMKaW5kZXggNjhlZmMwOS4uMWY1NGQ2NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcHBvbGwuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19wcG9sbC5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fcHBvbGwpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcHBvbGwKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19wcG9sbCkKLS5oaWRkZW4gX0NfTEFCRUwoX19wcG9sbCkKKy5oaWRkZW4gX19wcG9sbApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcHNlbGVjdDYuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKaW5kZXggMjk1YjcxYS4uMzg4ZDg0ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcHNlbGVjdDYuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fcHNlbGVjdDYpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcHNlbGVjdDYKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19wc2VsZWN0NikKLS5oaWRkZW4gX0NfTEFCRUwoX19wc2VsZWN0NikKKy5oaWRkZW4gX19wc2VsZWN0NgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcHRyYWNlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19wdHJhY2UuUwppbmRleCBhYTQxMDcxLi5kNjhiNjc0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19wdHJhY2UuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19wdHJhY2UuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX3B0cmFjZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9wdHJhY2UKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19wdHJhY2UpCi0uaGlkZGVuIF9DX0xBQkVMKF9fcHRyYWNlKQorLmhpZGRlbiBfX3B0cmFjZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcmVib290LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19yZWJvb3QuUwppbmRleCA5NjgwYmRjLi43OWNkNWJlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19yZWJvb3QuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19yZWJvb3QuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX3JlYm9vdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9yZWJvb3QKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19yZWJvb3QpCi0uaGlkZGVuIF9DX0xBQkVMKF9fcmVib290KQorLmhpZGRlbiBfX3JlYm9vdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwppbmRleCA3N2Y4M2VhLi42NWZlYTJlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX3J0X3NpZ2FjdGlvbikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9ydF9zaWdhY3Rpb24KICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19ydF9zaWdhY3Rpb24pCi0uaGlkZGVuIF9DX0xBQkVMKF9fcnRfc2lnYWN0aW9uKQorLmhpZGRlbiBfX3J0X3NpZ2FjdGlvbgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCmluZGV4IDU5YTJlMWUuLjY1NTM3ODEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX19ydF9zaWdwZW5kaW5nKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3J0X3NpZ3BlbmRpbmcKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19ydF9zaWdwZW5kaW5nKQotLmhpZGRlbiBfQ19MQUJFTChfX3J0X3NpZ3BlbmRpbmcpCisuaGlkZGVuIF9fcnRfc2lncGVuZGluZwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKaW5kZXggYzVhNTFlZC4uOTUxMjdkNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fcnRfc2lncHJvY21hc2spCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcnRfc2lncHJvY21hc2sKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19ydF9zaWdwcm9jbWFzaykKLS5oaWRkZW4gX0NfTEFCRUwoX19ydF9zaWdwcm9jbWFzaykKKy5oaWRkZW4gX19ydF9zaWdwcm9jbWFzawpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCmluZGV4IDdhMWMyMmUuLjdjYmQ4ZDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKQEAgLTMsMjAgKzMsMTMgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX19ydF9zaWdzdXNwZW5kKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3J0X3NpZ3N1c3BlbmQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19ydF9zaWdzdXNwZW5kKQotLmhpZGRlbiBfQ19MQUJFTChfX3J0X3NpZ3N1c3BlbmQpCisuaGlkZGVuIF9fcnRfc2lnc3VzcGVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwppbmRleCBiM2Q5NTBjLi44MDAxNjM1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX3J0X3NpZ3RpbWVkd2FpdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9ydF9zaWd0aW1lZHdhaXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19ydF9zaWd0aW1lZHdhaXQpCi0uaGlkZGVuIF9DX0xBQkVMKF9fcnRfc2lndGltZWR3YWl0KQorLmhpZGRlbiBfX3J0X3NpZ3RpbWVkd2FpdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKaW5kZXggOWI3ODVhZC4uN2RhZDE1ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fc2NoZWRfZ2V0YWZmaW5pdHkpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19zY2hlZF9nZXRhZmZpbml0eSkKLS5oaWRkZW4gX0NfTEFCRUwoX19zY2hlZF9nZXRhZmZpbml0eSkKKy5oaWRkZW4gX19zY2hlZF9nZXRhZmZpbml0eQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwppbmRleCBiNzU0MWZjLi5mN2FlMTZkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX3NldF90aWRfYWRkcmVzcykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXRfdGlkX2FkZHJlc3MKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX19zZXRfdGlkX2FkZHJlc3MpCi0uaGlkZGVuIF9DX0xBQkVMKF9fc2V0X3RpZF9hZGRyZXNzKQorLmhpZGRlbiBfX3NldF90aWRfYWRkcmVzcwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fc2lnbmFsZmQ0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zaWduYWxmZDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmUzNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fc2lnbmFsZmQ0LlMKQEAgLTAsMCArMSwxNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NpZ25hbGZkNCkKKyAgICBtb3YgICAgIHg4LCBfX05SX3NpZ25hbGZkNAorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChfX3NpZ25hbGZkNCkKKy5oaWRkZW4gX19zaWduYWxmZDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3NvY2tldC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fc29ja2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ0YmIyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3NvY2tldC5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19zb2NrZXQpCisgICAgbW92ICAgICB4OCwgX19OUl9zb2NrZXQKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoX19zb2NrZXQpCisuaGlkZGVuIF9fc29ja2V0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX19zeXNsb2cuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3N5c2xvZy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjVhN2ViLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3N5c2xvZy5TCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShfX3N5c2xvZykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9zeXNsb2cKLSAgICBzdmMgICAgICMwCi0KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQotICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCi0KLSAgICByZXQKLUVORChfX3N5c2xvZykKLS5oaWRkZW4gX0NfTEFCRUwoX19zeXNsb2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCmluZGV4IGJmY2U0NDguLjQ3OTA4NDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fdGltZXJfY3JlYXRlKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3RpbWVyX2NyZWF0ZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3RpbWVyX2NyZWF0ZSkKLS5oaWRkZW4gX0NfTEFCRUwoX190aW1lcl9jcmVhdGUpCisuaGlkZGVuIF9fdGltZXJfY3JlYXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCmluZGV4IDAzZWQ0NGUuLmNlMTI2MTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fdGltZXJfZGVsZXRlKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3RpbWVyX2RlbGV0ZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3RpbWVyX2RlbGV0ZSkKLS5oaWRkZW4gX0NfTEFCRUwoX190aW1lcl9kZWxldGUpCisuaGlkZGVuIF9fdGltZXJfZGVsZXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKaW5kZXggYTQ1ODk0MS4uMmNmZGY2YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX3RpbWVyX2dldG92ZXJydW4pCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3RpbWVyX2dldG92ZXJydW4pCi0uaGlkZGVuIF9DX0xBQkVMKF9fdGltZXJfZ2V0b3ZlcnJ1bikKKy5oaWRkZW4gX190aW1lcl9nZXRvdmVycnVuCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKaW5kZXggYjZhZTI5ZS4uYTFlYTMyMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX3RpbWVyX2dldHRpbWUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdGltZXJfZ2V0dGltZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3RpbWVyX2dldHRpbWUpCi0uaGlkZGVuIF9DX0xBQkVMKF9fdGltZXJfZ2V0dGltZSkKKy5oaWRkZW4gX190aW1lcl9nZXR0aW1lCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKaW5kZXggM2M0NGI1My4uMDU5ZDcwNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwpAQCAtMywyMCArMywxMyBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfX3RpbWVyX3NldHRpbWUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdGltZXJfc2V0dGltZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3RpbWVyX3NldHRpbWUpCi0uaGlkZGVuIF9DX0xBQkVMKF9fdGltZXJfc2V0dGltZSkKKy5oaWRkZW4gX190aW1lcl9zZXR0aW1lCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX193YWl0aWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3dhaXRpZC5TCmluZGV4IDQyNDQwMTguLjhiZDY0OWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3dhaXRpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fX3dhaXRpZC5TCkBAIC0zLDIwICszLDEzIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9fd2FpdGlkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3dhaXRpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChfX3dhaXRpZCkKLS5oaWRkZW4gX0NfTEFCRUwoX193YWl0aWQpCisuaGlkZGVuIF9fd2FpdGlkCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvX2V4aXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fZXhpdC5TCmluZGV4IDI0YjdiMTcuLmVkZjY3NDQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fZXhpdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9fZXhpdC5TCkBAIC0zLDE5ICszLDE1IEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKF9leGl0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2V4aXRfZ3JvdXAKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoX2V4aXQpCisKKyAgICAuZ2xvYmwgX0V4aXQKKyAgICAuZXF1IF9FeGl0LCBfZXhpdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2FjY2VwdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2FjY2VwdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWU2MTIxLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9hY2NlcHQuUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoYWNjZXB0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX2FjY2VwdAotICAgIHN2YyAgICAgIzAKLQotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCi0gICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KLQotICAgIHJldAotRU5EKGFjY2VwdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9hY2N0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvYWNjdC5TCmluZGV4IDkwMWU0MjAuLjQ4Y2I0ZTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9hY2N0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2FjY3QuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShhY2N0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2FjY3QKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoYWNjdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9iaW5kLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvYmluZC5TCmluZGV4IDQ3MWQ3ODMuLjQ3MTcwZmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9iaW5kLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2JpbmQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShiaW5kKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2JpbmQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoYmluZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jYXBnZXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jYXBnZXQuUwppbmRleCAzM2ZlMTFjLi43ZTBkZmU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2FwZ2V0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2NhcGdldC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGNhcGdldCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9jYXBnZXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoY2FwZ2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2NhcHNldC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2NhcHNldC5TCmluZGV4IDc1ZjAzYTkuLmU3YjdhOGQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jYXBzZXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2Fwc2V0LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoY2Fwc2V0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2NhcHNldAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChjYXBzZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2hkaXIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jaGRpci5TCmluZGV4IDA1MWY4MjMuLjcyM2NkMDggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jaGRpci5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jaGRpci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGNoZGlyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2NoZGlyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGNoZGlyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nocm9vdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nocm9vdC5TCmluZGV4IGMwNjM5OWYuLmU0ZjZiZDkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jaHJvb3QuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2hyb290LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoY2hyb290KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2Nocm9vdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChjaHJvb3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKaW5kZXggYmZmYzdjYi4uMzNmZGE4ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShjbG9ja19nZXRyZXMpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfY2xvY2tfZ2V0cmVzCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGNsb2NrX2dldHJlcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzU4MjM2Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGNsb2NrX2dldHRpbWUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfY2xvY2tfZ2V0dGltZQotICAgIHN2YyAgICAgIzAKLQotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCi0gICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KLQotICAgIHJldAotRU5EKGNsb2NrX2dldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKaW5kZXggMzU3YmRhNi4uMzQ5YzVjYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShjbG9ja19uYW5vc2xlZXApCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfY2xvY2tfbmFub3NsZWVwCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGNsb2NrX25hbm9zbGVlcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCmluZGV4IDA2ZTkzOTMuLjYyMzU0ZDEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShjbG9ja19zZXR0aW1lKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2Nsb2NrX3NldHRpbWUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoY2xvY2tfc2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9jbG9zZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb3NlLlMKaW5kZXggZmVmZTE0Ny4uMzYyNDU4MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb3NlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nsb3NlLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoY2xvc2UpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfY2xvc2UKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoY2xvc2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY29ubmVjdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Nvbm5lY3QuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNjZDQzZC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvY29ubmVjdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShjb25uZWN0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX2Nvbm5lY3QKLSAgICBzdmMgICAgICMwCi0KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQotICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCi0KLSAgICByZXQKLUVORChjb25uZWN0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKaW5kZXggNGU4YjA5ZC4uZGI4ZDk0NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGRlbGV0ZV9tb2R1bGUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZGVsZXRlX21vZHVsZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChkZWxldGVfbW9kdWxlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2R1cC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2R1cC5TCmluZGV4IDlkYmU1NjIuLjRlOTUwNDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9kdXAuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZHVwLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZHVwKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2R1cAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChkdXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZHVwMy5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2R1cDMuUwppbmRleCBlZTA0NDQwLi4yZTZiZTMyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZHVwMy5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9kdXAzLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZHVwMykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9kdXAzCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGR1cDMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwppbmRleCAwZWQzNGI1Li42ZWY1MThlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZXBvbGxfY3JlYXRlMSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9lcG9sbF9jcmVhdGUxCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGVwb2xsX2NyZWF0ZTEpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZXBvbGxfY3RsLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZXBvbGxfY3RsLlMKaW5kZXggYTA5YmEyOS4uMTE4OGYzOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9lcG9sbF9jdGwuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShlcG9sbF9jdGwpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZXBvbGxfY3RsCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGVwb2xsX2N0bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9ldmVudGZkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZXZlbnRmZC5TCmluZGV4IGU2YjU5MmIuLmNhNWRmMTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9ldmVudGZkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2V2ZW50ZmQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShldmVudGZkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2V2ZW50ZmQyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGV2ZW50ZmQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZXhlY3ZlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZXhlY3ZlLlMKaW5kZXggNGYzY2RiOC4uZmM4ZmI2OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2V4ZWN2ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9leGVjdmUuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShleGVjdmUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZXhlY3ZlCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGV4ZWN2ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mYWNjZXNzYXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mYWNjZXNzYXQuUwppbmRleCBjNmI2NTU3Li40Yzk2Y2ZhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZhY2Nlc3NhdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mYWNjZXNzYXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZmFjY2Vzc2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZhbGxvY2F0ZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZhbGxvY2F0ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmM2Q0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmFsbG9jYXRlLlMKQEAgLTAsMCArMSwxNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmYWxsb2NhdGUpCisgICAgbW92ICAgICB4OCwgX19OUl9mYWxsb2NhdGUKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoZmFsbG9jYXRlKQorCisgICAgLmdsb2JsIGZhbGxvY2F0ZTY0CisgICAgLmVxdSBmYWxsb2NhdGU2NCwgZmFsbG9jYXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNoZGlyLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNoZGlyLlMKaW5kZXggYzYwODIzMS4uMmUxNjRjYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjaGRpci5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2hkaXIuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShmY2hkaXIpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZmNoZGlyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGZjaGRpcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2htb2QuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2htb2QuUwppbmRleCBhNzc3Y2RjLi44M2E4MDYwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNobW9kLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG1vZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZjaG1vZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mY2htb2QKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZmNobW9kKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG1vZGF0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNobW9kYXQuUwppbmRleCAxYTUyYzlmLi44YzViYjBlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNobW9kYXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNobW9kYXQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShmY2htb2RhdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mY2htb2RhdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmY2htb2RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2hvd24uUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY2hvd24uUwppbmRleCAwNzNlMzZmLi40NDU2ZjFiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNob3duLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG93bi5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZjaG93bikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mY2hvd24KICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZmNob3duKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjaG93bmF0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNob3duYXQuUwppbmRleCBkYjgwYWIxLi43YmE2NjExIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNob3duYXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmNob3duYXQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShmY2hvd25hdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mY2hvd25hdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmY2hvd25hdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mY250bC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjbnRsLlMKaW5kZXggMjNjZTE1NS4uZTI3ODdhZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjbnRsLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZjbnRsLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZmNudGwpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZmNudGwKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZmNudGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmRhdGFzeW5jLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmRhdGFzeW5jLlMKaW5kZXggYjRlOWFhOS4uMjI1YWIyOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZkYXRhc3luYy5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mZGF0YXN5bmMuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShmZGF0YXN5bmMpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZmRhdGFzeW5jCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGZkYXRhc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mZ2V0eGF0dHIuUwppbmRleCAzMjc4YTEyLi4wZDZhZGE3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZnZXR4YXR0ci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZnZXR4YXR0cikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mZ2V0eGF0dHIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZmdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mbGlzdHhhdHRyLlMKaW5kZXggNDBiMmEzMC4uODkyMWJiNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZsaXN0eGF0dHIpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZmxpc3R4YXR0cgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Zsb2NrLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmxvY2suUwppbmRleCA3ZTI4Nzg5Li4wYzAzNmM4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmxvY2suUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZmxvY2suUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShmbG9jaykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mbG9jawogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmbG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwppbmRleCBiZTg2ZGQwLi5jZjNhMzcxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZyZW1vdmV4YXR0cikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9mcmVtb3ZleGF0dHIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZnJlbW92ZXhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzZXR4YXR0ci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzZXR4YXR0ci5TCmluZGV4IDJjYjcyYzkuLmU2OWU3MTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnNldHhhdHRyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZnNldHhhdHRyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2ZzZXR4YXR0cgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnN0YXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGFhYTQwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShmc3RhdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9mc3RhdAotICAgIHN2YyAgICAgIzAKLQotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCi0gICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KLQotICAgIHJldAotRU5EKGZzdGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0NjQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhMDdmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdDY0LlMKQEAgLTAsMCArMSwxNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmc3RhdDY0KQorICAgIG1vdiAgICAgeDgsIF9fTlJfZnN0YXQKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoZnN0YXQ2NCkKKworICAgIC5nbG9ibCBmc3RhdAorICAgIC5lcXUgZnN0YXQsIGZzdGF0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdGF0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnN0YXRhdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGUwZmEwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdGF0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGZzdGF0YXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfbmV3ZnN0YXRhdAotICAgIHN2YyAgICAgIzAKLQotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCi0gICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KLQotICAgIHJldAotRU5EKGZzdGF0YXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnN0YXRhdDY0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnN0YXRhdDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmZDk4MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdGF0NjQuUwpAQCAtMCwwICsxLDE3IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZzdGF0YXQ2NCkKKyAgICBtb3YgICAgIHg4LCBfX05SX25ld2ZzdGF0YXQKKyAgICBzdmMgICAgICMwCisKKyAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgY25lZyAgICB4MCwgeDAsIGhpCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAorCisgICAgcmV0CitFTkQoZnN0YXRhdDY0KQorCisgICAgLmdsb2JsIGZzdGF0YXQKKyAgICAuZXF1IGZzdGF0YXQsIGZzdGF0YXQ2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0ZnMuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdGZzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZDg4NzUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0ZnMuUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZnN0YXRmcykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9mc3RhdGZzCi0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoZnN0YXRmcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3RhdGZzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2EyZGNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2ZzdGF0ZnM2NC5TCkBAIC0wLDAgKzEsMTcgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXRmczY0KQorICAgIG1vdiAgICAgeDgsIF9fTlJfZnN0YXRmcworICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChmc3RhdGZzNjQpCisKKyAgICAuZ2xvYmwgZnN0YXRmcworICAgIC5lcXUgZnN0YXRmcywgZnN0YXRmczY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnN5bmMuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3luYy5TCmluZGV4IGUxMDc2ZjIuLjJiYzBkMGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3luYy5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mc3luYy5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGZzeW5jKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2ZzeW5jCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGZzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCmluZGV4IDdlZDgwYjkuLmM2ZTk5ZjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mdHJ1bmNhdGUuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZnRydW5jYXRlLlMKQEAgLTMsMjIgKzMsMTUgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZnRydW5jYXRlKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2Z0cnVuY2F0ZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChmdHJ1bmNhdGUpCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwoZnRydW5jYXRlNjQpCi0gICAgLmVxdSBfQ19MQUJFTChmdHJ1bmNhdGU2NCksIF9DX0xBQkVMKGZ0cnVuY2F0ZSkKKyAgICAuZ2xvYmwgZnRydW5jYXRlNjQKKyAgICAuZXF1IGZ0cnVuY2F0ZTY0LCBmdHJ1bmNhdGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9mdXRleC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Z1dGV4LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNDlkNmIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2Z1dGV4LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGZ1dGV4KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX2Z1dGV4Ci0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoZnV0ZXgpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0ZGVudHMuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRkZW50cy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ5NmMyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRkZW50cy5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShnZXRkZW50cykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9nZXRkZW50czY0Ci0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoZ2V0ZGVudHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0ZWdpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGVnaWQuUwppbmRleCAxNDRmZTg4Li5mN2Q2MGQ5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0ZWdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRlZ2lkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0ZWdpZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXRlZ2lkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldGVnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0ZXVpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGV1aWQuUwppbmRleCBmY2VjOTc3Li4zMDk2YTkyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0ZXVpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRldWlkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0ZXVpZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXRldWlkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldGV1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0Z2lkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0Z2lkLlMKaW5kZXggMGZkMTcyZS4uMmY5MjFmZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRnaWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXRnaWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0Z2lkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRncm91cHMuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRncm91cHMuUwppbmRleCAzYzEyZWY0Li5hOWE4OTdlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGdyb3Vwcy5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGdldGdyb3VwcykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXRncm91cHMKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0Z3JvdXBzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGl0aW1lci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldGl0aW1lci5TCmluZGV4IGQ3OTVjZDcuLmYzNzA2M2MgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRpdGltZXIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0aXRpbWVyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldGl0aW1lcgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChnZXRpdGltZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwZWVybmFtZS5TCmluZGV4IGFlYTMxMjIuLjgzNzRkNjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwZWVybmFtZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwZWVybmFtZS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGdldHBlZXJuYW1lKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldHBlZXJuYW1lCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldHBlZXJuYW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBnaWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwZ2lkLlMKaW5kZXggMWJkYTgzZi4uZmZjMGQ5MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBnaWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cGdpZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGdldHBnaWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0cGdpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChnZXRwZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBpZC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTQwOGM4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwaWQuUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZ2V0cGlkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX2dldHBpZAotICAgIHN2YyAgICAgIzAKLQotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCi0gICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KLQotICAgIHJldAotRU5EKGdldHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwcGlkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cHBpZC5TCmluZGV4IDFiODVjZWYuLjFlMjFiZGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRwcGlkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHBwaWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXRwcGlkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldHBwaWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0cHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRyZXNnaWQuUwppbmRleCBhYjAwYjA2Li5iMTUzNTdhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHJlc2dpZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGdldHJlc2dpZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXRyZXNnaWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0cmVzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHJlc3VpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHJlc3VpZC5TCmluZGV4IDBmZjIxOGEuLjUzZGU2YjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRyZXN1aWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cmVzdWlkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0cmVzdWlkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldHJlc3VpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChnZXRyZXN1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cmxpbWl0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKaW5kZXggMjFiNDcxZS4uNTE4YWI3MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHJsaW1pdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRybGltaXQuUwpAQCAtMywyMiArMywxNSBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXRybGltaXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0cmxpbWl0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldHJsaW1pdCkKIAotICAgIC5nbG9ibCBfQ19MQUJFTChnZXRybGltaXQ2NCkKLSAgICAuZXF1IF9DX0xBQkVMKGdldHJsaW1pdDY0KSwgX0NfTEFCRUwoZ2V0cmxpbWl0KQorICAgIC5nbG9ibCBnZXRybGltaXQ2NAorICAgIC5lcXUgZ2V0cmxpbWl0NjQsIGdldHJsaW1pdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHJ1c2FnZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHJ1c2FnZS5TCmluZGV4IDVlMmJhY2UuLjY3NjIyMWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRydXNhZ2UuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0cnVzYWdlKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2dldHJ1c2FnZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChnZXRydXNhZ2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0c2lkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0c2lkLlMKaW5kZXggYzg1Y2E2MC4uY2ZiZGZkYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHNpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRzaWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXRzaWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0c2lkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldHNpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRzb2NrbmFtZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKaW5kZXggMWQwMjc5YS4uNGNjYTU1ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0c29ja25hbWUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0c29ja25hbWUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0c29ja25hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0c29ja29wdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHNvY2tvcHQuUwppbmRleCAzYmZkNWI4Li45NmI4YzBmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoZ2V0c29ja29wdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXRzb2Nrb3B0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGdldHNvY2tvcHQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0dGlkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0dGlkLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YzEyOGUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHRpZC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShnZXR0aWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfZ2V0dGlkCi0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoZ2V0dGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjlhYzI4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZ2V0dGltZW9mZGF5KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX2dldHRpbWVvZmRheQotICAgIHN2YyAgICAgIzAKLQotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCi0gICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KLQotICAgIHJldAotRU5EKGdldHRpbWVvZmRheSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXR1aWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9nZXR1aWQuUwppbmRleCA5NjE5OGI3Li5lZjk1YmE3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0dWlkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHVpZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGdldHVpZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXR1aWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoZ2V0dWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2dldHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0eGF0dHIuUwppbmRleCAxMWI5MGFhLi4yYjM4ZjNkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvZ2V0eGF0dHIuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShnZXR4YXR0cikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9nZXR4YXR0cgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChnZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pbml0X21vZHVsZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKaW5kZXggODY0OGIwNC4uOTEzYzdjYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoaW5pdF9tb2R1bGUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfaW5pdF9tb2R1bGUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoaW5pdF9tb2R1bGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCmluZGV4IDU4M2FiNzIuLjgzYTViNTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGlub3RpZnlfYWRkX3dhdGNoKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2lub3RpZnlfYWRkX3dhdGNoCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGlub3RpZnlfYWRkX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMKaW5kZXggM2VlOTQ2ZS4uZDNiYzgxYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGlub3RpZnlfaW5pdDEpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfaW5vdGlmeV9pbml0MQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChpbm90aWZ5X2luaXQxKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKaW5kZXggMzEyMWI1MS4uYzQ0NDQ1ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGlub3RpZnlfcm1fd2F0Y2gpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfaW5vdGlmeV9ybV93YXRjaAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChpbm90aWZ5X3JtX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lvcHJpb19nZXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwN2E0ZTcuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2lvcHJpb19nZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoaW9wcmlvX2dldCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9pb3ByaW9fZ2V0Ci0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoaW9wcmlvX2dldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pb3ByaW9fc2V0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvaW9wcmlvX3NldC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjdiMDI2Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9pb3ByaW9fc2V0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGlvcHJpb19zZXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfaW9wcmlvX3NldAotICAgIHN2YyAgICAgIzAKLQotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCi0gICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KLQotICAgIHJldAotRU5EKGlvcHJpb19zZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMva2lsbC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2tpbGwuUwppbmRleCAzNzg4ZGY3Li4wMzM0ZmYwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMva2lsbC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9raWxsLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoa2lsbCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9raWxsCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGtpbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMva2xvZ2N0bC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2tsb2djdGwuUwppbmRleCBlZmE4YjRhLi42MjVmMzU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMva2xvZ2N0bC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9rbG9nY3RsLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoa2xvZ2N0bCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zeXNsb2cKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoa2xvZ2N0bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sZ2V0eGF0dHIuUwppbmRleCAxZmRhMDkyLi44OWRiMjA2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xnZXR4YXR0ci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGxnZXR4YXR0cikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9sZ2V0eGF0dHIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobGdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xpbmthdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xpbmthdC5TCmluZGV4IDk5OWMwMDcuLjYyYWVhM2EgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9saW5rYXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGlua2F0LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobGlua2F0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2xpbmthdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChsaW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGlzdGVuLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGlzdGVuLlMKaW5kZXggOGI3ZmEwZi4uYmE5N2JlOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xpc3Rlbi5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9saXN0ZW4uUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShsaXN0ZW4pCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbGlzdGVuCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGxpc3RlbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9saXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9saXN0eGF0dHIuUwppbmRleCBjYzM5OWE5Li40ODIwOGU2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xpc3R4YXR0ci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGxpc3R4YXR0cikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9saXN0eGF0dHIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xsaXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sbGlzdHhhdHRyLlMKaW5kZXggODdiZmUxMC4uZWQ2NjAwNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xsaXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbGxpc3R4YXR0ci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGxsaXN0eGF0dHIpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbGxpc3R4YXR0cgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChsbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCmluZGV4IGFkODIzZTQuLmI1ZTUxYzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9scmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobHJlbW92ZXhhdHRyKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2xyZW1vdmV4YXR0cgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChscmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbHNlZWsuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sc2Vlay5TCmluZGV4IDg2N2JiNzEuLmRlOTZkZjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sc2Vlay5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sc2Vlay5TCkBAIC0zLDIyICszLDE1IEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKGxzZWVrKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX2xzZWVrCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGxzZWVrKQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKGxzZWVrNjQpCi0gICAgLmVxdSBfQ19MQUJFTChsc2VlazY0KSwgX0NfTEFCRUwobHNlZWspCisgICAgLmdsb2JsIGxzZWVrNjQKKyAgICAuZXF1IGxzZWVrNjQsIGxzZWVrCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbHNldHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbHNldHhhdHRyLlMKaW5kZXggNjgzZmMyYi4uYjg3MzUxMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL2xzZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9sc2V0eGF0dHIuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShsc2V0eGF0dHIpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbHNldHhhdHRyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKGxzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tYWR2aXNlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWFkdmlzZS5TCmluZGV4IDgxMzZlYzkuLjZmY2VkNDEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tYWR2aXNlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21hZHZpc2UuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShtYWR2aXNlKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX21hZHZpc2UKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobWFkdmlzZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9taW5jb3JlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWluY29yZS5TCmluZGV4IDhhOGU1YTUuLjU3ODFiNGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9taW5jb3JlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21pbmNvcmUuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShtaW5jb3JlKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX21pbmNvcmUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobWluY29yZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9ta2RpcmF0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWtkaXJhdC5TCmluZGV4IGIzZGQ4MzguLmZhODY4YTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9ta2RpcmF0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21rZGlyYXQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShta2RpcmF0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX21rZGlyYXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobWtkaXJhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9ta25vZGF0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWtub2RhdC5TCmluZGV4IGFjYTY3ODYuLjEzNjMyZWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9ta25vZGF0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21rbm9kYXQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShta25vZGF0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX21rbm9kYXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobWtub2RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tbG9jay5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21sb2NrLlMKaW5kZXggYmIwMTQzNS4uMWVlZTg1YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21sb2NrLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21sb2NrLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobWxvY2spCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbWxvY2sKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobWxvY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbWxvY2thbGwuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tbG9ja2FsbC5TCmluZGV4IDI3OGU2ZDMuLmQ0Y2ExODUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tbG9ja2FsbC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tbG9ja2FsbC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG1sb2NrYWxsKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX21sb2NrYWxsCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKG1sb2NrYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21tYXAuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tbWFwLlMKaW5kZXggYTJkMTgxYS4uNjRiOTU1ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21tYXAuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbW1hcC5TCkBAIC0zLDIyICszLDE1IEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG1tYXApCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfbW1hcAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChtbWFwKQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKG1tYXA2NCkKLSAgICAuZXF1IF9DX0xBQkVMKG1tYXA2NCksIF9DX0xBQkVMKG1tYXApCisgICAgLmdsb2JsIG1tYXA2NAorICAgIC5lcXUgbW1hcDY0LCBtbWFwCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbW91bnQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tb3VudC5TCmluZGV4IGQ4OGE1NGIuLmNkMzUwMTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tb3VudC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tb3VudC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG1vdW50KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX21vdW50CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKG1vdW50KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21wcm90ZWN0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXByb3RlY3QuUwppbmRleCBjOGEyZWZlLi45ZGQ4ODEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXByb3RlY3QuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXByb3RlY3QuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShtcHJvdGVjdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9tcHJvdGVjdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChtcHJvdGVjdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tcmVtYXAuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tcmVtYXAuUwppbmRleCA3YzdmZTViLi42OWI5MWQ2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXJlbWFwLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21yZW1hcC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG1yZW1hcCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9tcmVtYXAKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobXJlbWFwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL21zeW5jLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXN5bmMuUwppbmRleCBiNDVjOTlkLi43MjM4N2VhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXN5bmMuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXN5bmMuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShtc3luYykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9tc3luYwogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChtc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tdW5sb2NrLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXVubG9jay5TCmluZGV4IGQ4NGI4NTAuLmQyYTI0OGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tdW5sb2NrLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL211bmxvY2suUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShtdW5sb2NrKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX211bmxvY2sKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobXVubG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tdW5sb2NrYWxsLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXVubG9ja2FsbC5TCmluZGV4IGUwNDNmNzEuLmFjNDJjYjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tdW5sb2NrYWxsLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL211bmxvY2thbGwuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShtdW5sb2NrYWxsKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX211bmxvY2thbGwKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobXVubG9ja2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tdW5tYXAuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9tdW5tYXAuUwppbmRleCAwMmFmYmU4Li45ZDNmNmE2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbXVubWFwLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL211bm1hcC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKG11bm1hcCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9tdW5tYXAKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQobXVubWFwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL25hbm9zbGVlcC5TCmluZGV4IDhjZDlhOTUuLmQzZTZmYWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvbmFub3NsZWVwLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkobmFub3NsZWVwKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX25hbm9zbGVlcAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChuYW5vc2xlZXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NjAyNjQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShwZXJmX2V2ZW50X29wZW4pCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfcGVyZl9ldmVudF9vcGVuCi0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQocGVyZl9ldmVudF9vcGVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcGVyc29uYWxpdHkuUwppbmRleCAyNTM1NDY3Li5mOWYzYmY2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcGVyc29uYWxpdHkuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcGVyc29uYWxpdHkuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShwZXJzb25hbGl0eSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9wZXJzb25hbGl0eQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChwZXJzb25hbGl0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9waXBlMi5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3BpcGUyLlMKaW5kZXggZjcyZTcwNy4uODkxODFjZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3BpcGUyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3BpcGUyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkocGlwZTIpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcGlwZTIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQocGlwZTIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcHJjdGwuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wcmN0bC5TCmluZGV4IDc5YjNlOTIuLjg2ZjRkZjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wcmN0bC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wcmN0bC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHByY3RsKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3ByY3RsCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHByY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3ByZWFkNjQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wcmVhZDY0LlMKaW5kZXggMGQwOThmMS4uZWFmYzA0NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3ByZWFkNjQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcHJlYWQ2NC5TCkBAIC0zLDIyICszLDE1IEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHByZWFkNjQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcHJlYWQ2NAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChwcmVhZDY0KQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKHByZWFkKQotICAgIC5lcXUgX0NfTEFCRUwocHJlYWQpLCBfQ19MQUJFTChwcmVhZDY0KQorICAgIC5nbG9ibCBwcmVhZAorICAgIC5lcXUgcHJlYWQsIHByZWFkNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wcmxpbWl0NjQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wcmxpbWl0NjQuUwppbmRleCA0MzllMzU1Li4yYmVjZTk5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcHJsaW1pdDY0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3BybGltaXQ2NC5TCkBAIC0zLDIyICszLDE1IEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHBybGltaXQ2NCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9wcmxpbWl0NjQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQocHJsaW1pdDY0KQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKHBybGltaXQpCi0gICAgLmVxdSBfQ19MQUJFTChwcmxpbWl0KSwgX0NfTEFCRUwocHJsaW1pdDY0KQorICAgIC5nbG9ibCBwcmxpbWl0CisgICAgLmVxdSBwcmxpbWl0LCBwcmxpbWl0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9wd3JpdGU2NC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3B3cml0ZTY0LlMKaW5kZXggYTEwZjc2Zi4uNjk3MDk1NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3B3cml0ZTY0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3B3cml0ZTY0LlMKQEAgLTMsMjIgKzMsMTUgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkocHdyaXRlNjQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcHdyaXRlNjQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQocHdyaXRlNjQpCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwocHdyaXRlKQotICAgIC5lcXUgX0NfTEFCRUwocHdyaXRlKSwgX0NfTEFCRUwocHdyaXRlNjQpCisgICAgLmdsb2JsIHB3cml0ZQorICAgIC5lcXUgcHdyaXRlLCBwd3JpdGU2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlYWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkLlMKaW5kZXggY2Y3Y2EwNC4uZGRiODhjOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlYWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHJlYWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcmVhZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChyZWFkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlYWRhaGVhZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlYWRhaGVhZC5TCmluZGV4IGZlNDVjZjkuLjQ0NWFiZDQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkYWhlYWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZGFoZWFkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkocmVhZGFoZWFkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3JlYWRhaGVhZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChyZWFkYWhlYWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZGxpbmthdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlYWRsaW5rYXQuUwppbmRleCBlYjgyMjFjLi42MmNjOWUyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZGxpbmthdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkbGlua2F0LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkocmVhZGxpbmthdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9yZWFkbGlua2F0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHJlYWRsaW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVhZHYuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkdi5TCmluZGV4IGY0ZmE2MTIuLjZlN2YxNTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkdi5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWFkdi5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHJlYWR2KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3JlYWR2CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHJlYWR2KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlY3Zmcm9tLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVjdmZyb20uUwppbmRleCA1MWFjMjVmLi5hZWNmMTY1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVjdmZyb20uUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVjdmZyb20uUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShyZWN2ZnJvbSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9yZWN2ZnJvbQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChyZWN2ZnJvbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWN2bW1zZy5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlY3ZtbXNnLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljYWU2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWN2bW1zZy5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocmVjdm1tc2cpCisgICAgbW92ICAgICB4OCwgX19OUl9yZWN2bW1zZworICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChyZWN2bW1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWN2bXNnLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVjdm1zZy5TCmluZGV4IDRjYTQwZWEuLjJkYWZkYzkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZWN2bXNnLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlY3Ztc2cuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShyZWN2bXNnKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3JlY3Ztc2cKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQocmVjdm1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKaW5kZXggYWU1MzMwNy4uZWRlMzZhNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkocmVtb3ZleGF0dHIpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfcmVtb3ZleGF0dHIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQocmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvcmVuYW1lYXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZW5hbWVhdC5TCmluZGV4IDNmNmU0ZDQuLjk2MDI1ZGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZW5hbWVhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9yZW5hbWVhdC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHJlbmFtZWF0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3JlbmFtZWF0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHJlbmFtZWF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKaW5kZXggNzM1Y2E5My4uYzg0ODg4OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNjaGVkX2dldF9wcmlvcml0eV9tYXgpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKaW5kZXggYTQ1M2IwYi4uNzRiNzJhMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNjaGVkX2dldF9wcmlvcml0eV9taW4pCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzY2hlZF9nZXRfcHJpb3JpdHlfbWluKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwppbmRleCBmMzQ5MmI5Li43NWEzMmQ0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzY2hlZF9nZXRwYXJhbSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zY2hlZF9nZXRwYXJhbQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzY2hlZF9nZXRwYXJhbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwppbmRleCBkYjk0NGYxLi5lMjRiYWYyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNjaGVkX2dldHNjaGVkdWxlcikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2NoZWRfZ2V0c2NoZWR1bGVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCmluZGV4IGI5MWY2NDYuLjJhNjkzNmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2NoZWRfcnJfZ2V0X2ludGVydmFsKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCmluZGV4IGU4ZTFhZWMuLjMwYjU4ZjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNjaGVkX3NldGFmZmluaXR5KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NjaGVkX3NldGFmZmluaXR5CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNjaGVkX3NldGFmZmluaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwppbmRleCA1ZGY4NGYwLi5lYWYyNWJhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzY2hlZF9zZXRwYXJhbSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zY2hlZF9zZXRwYXJhbQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzY2hlZF9zZXRwYXJhbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUwppbmRleCA4M2MzMWU0Li4zMWQ1M2M0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNjaGVkX3NldHNjaGVkdWxlcikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2NoZWRfc2V0c2NoZWR1bGVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwppbmRleCA3ZDVmODhiLi40Y2ZlZWRhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfeWllbGQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzY2hlZF95aWVsZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zY2hlZF95aWVsZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzY2hlZF95aWVsZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZW5kZmlsZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRmaWxlLlMKaW5kZXggZTU0MDI5Ni4uMTdhMGQ0NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRmaWxlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRmaWxlLlMKQEAgLTMsMjIgKzMsMTUgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2VuZGZpbGUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2VuZGZpbGUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2VuZGZpbGUpCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwoc2VuZGZpbGU2NCkKLSAgICAuZXF1IF9DX0xBQkVMKHNlbmRmaWxlNjQpLCBfQ19MQUJFTChzZW5kZmlsZSkKKyAgICAuZ2xvYmwgc2VuZGZpbGU2NAorICAgIC5lcXUgc2VuZGZpbGU2NCwgc2VuZGZpbGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZW5kbW1zZy5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRtbXNnLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkxYzI0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZW5kbW1zZy5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2VuZG1tc2cpCisgICAgbW92ICAgICB4OCwgX19OUl9zZW5kbW1zZworICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChzZW5kbW1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZW5kbXNnLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2VuZG1zZy5TCmluZGV4IDJmMGNkYzguLmEzNDM1NDMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZW5kbXNnLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmRtc2cuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZW5kbXNnKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NlbmRtc2cKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2VuZG1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZW5kdG8uUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZW5kdG8uUwppbmRleCAzZmQ1NGQxLi42YTY4MTNlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2VuZHRvLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NlbmR0by5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNlbmR0bykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZW5kdG8KICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2VuZHRvKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGZzZ2lkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0ZnNnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTQ1ZGYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGZzZ2lkLlMKQEAgLTAsMCArMSwxNCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRmc2dpZCkKKyAgICBtb3YgICAgIHg4LCBfX05SX3NldGZzZ2lkCisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKHNldGZzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGZzdWlkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0ZnN1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDRlZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGZzdWlkLlMKQEAgLTAsMCArMSwxNCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRmc3VpZCkKKyAgICBtb3YgICAgIHg4LCBfX05SX3NldGZzdWlkCisgICAgc3ZjICAgICAjMAorCisgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGNuZWcgICAgeDAsIHgwLCBoaQorICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKworICAgIHJldAorRU5EKHNldGZzdWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGdpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGdpZC5TCmluZGV4IDBhODExYjAuLmMxMjhmYjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRnaWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0Z2lkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2V0Z2lkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NldGdpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZXRnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKaW5kZXggZDMxNmU1ZS4uYWVkYWJkNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGdyb3Vwcy5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRncm91cHMuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXRncm91cHMpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0Z3JvdXBzCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNldGdyb3VwcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRpdGltZXIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRpdGltZXIuUwppbmRleCA3YzJiNzE4Li43Y2U4NjE3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0aXRpbWVyLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldGl0aW1lci5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNldGl0aW1lcikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXRpdGltZXIKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2V0aXRpbWVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldG5zLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0bnMuUwppbmRleCAyY2UyYTc1Li4zODZlOGY0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0bnMuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0bnMuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXRucykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXRucwogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZXRucykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cGdpZC5TCmluZGV4IGJkMTJlNzAuLjQ1OGM4OGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRwZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHBnaWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXRwZ2lkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NldHBnaWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2V0cGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKaW5kZXggZDlhNDg1Ny4uZWQ1OGYyNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2V0cHJpb3JpdHkpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0cHJpb3JpdHkKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2V0cHJpb3JpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmVnaWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZWdpZC5TCmluZGV4IDcwMmFlOGIuLjMwZDkwMmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZWdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZWdpZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNldHJlZ2lkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NldHJlZ2lkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNldHJlZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJlc2dpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJlc2dpZC5TCmluZGV4IGM5NTAxYWMuLmY1NmU2Y2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZXNnaWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2V0cmVzZ2lkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NldHJlc2dpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZXRyZXNnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmVzdWlkLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmVzdWlkLlMKaW5kZXggNmY2ODBjMy4uZDVjNWNjNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJlc3VpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZXN1aWQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXRyZXN1aWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0cmVzdWlkCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRyZXVpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJldWlkLlMKaW5kZXggZWY4NzBmYS4uZTc2YzcyZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJldWlkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJldWlkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2V0cmV1aWQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0cmV1aWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2V0cmV1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmxpbWl0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0cmxpbWl0LlMKaW5kZXggZTcyMzgwNi4uNmNiNmI5OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHJsaW1pdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRybGltaXQuUwpAQCAtMywyMiArMywxNSBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXRybGltaXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0cmxpbWl0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNldHJsaW1pdCkKIAotICAgIC5nbG9ibCBfQ19MQUJFTChzZXRybGltaXQ2NCkKLSAgICAuZXF1IF9DX0xBQkVMKHNldHJsaW1pdDY0KSwgX0NfTEFCRUwoc2V0cmxpbWl0KQorICAgIC5nbG9ibCBzZXRybGltaXQ2NAorICAgIC5lcXUgc2V0cmxpbWl0NjQsIHNldHJsaW1pdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHNpZC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHNpZC5TCmluZGV4IGM5YmE1OTQuLjFiYjRjYzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRzaWQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0c2lkLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2V0c2lkKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NldHNpZAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZXRzaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0c29ja29wdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHNvY2tvcHQuUwppbmRleCA3YzlkNTg0Li4xNGIwMTM2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2V0c29ja29wdCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXRzb2Nrb3B0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNldHNvY2tvcHQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKaW5kZXggNGNmNmZmMi4uNGYwYTA3OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXR0aW1lb2ZkYXkpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2V0dGltZW9mZGF5CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNldHRpbWVvZmRheSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXR1aWQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zZXR1aWQuUwppbmRleCBhODg2YzE1Li41NTAwZGQ2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0dWlkLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHVpZC5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNldHVpZCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXR1aWQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2V0dWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NldHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0eGF0dHIuUwppbmRleCAxZDI1ZjNhLi41YmE5ZTNjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2V0eGF0dHIuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzZXR4YXR0cikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zZXR4YXR0cgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zaHV0ZG93bi5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NodXRkb3duLlMKaW5kZXggYjlmYzNjMy4uYWIwNjdmYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NodXRkb3duLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NodXRkb3duLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc2h1dGRvd24pCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfc2h1dGRvd24KICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc2h1dGRvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc2lnYWx0c3RhY2suUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zaWdhbHRzdGFjay5TCmluZGV4IDYwNTJjYWEuLmE5Y2JjYWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zaWdhbHRzdGFjay5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zaWdhbHRzdGFjay5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHNpZ2FsdHN0YWNrKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3NpZ2FsdHN0YWNrCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNpZ2FsdHN0YWNrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NpZ25hbGZkNC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NpZ25hbGZkNC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YThmN2Y3Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zaWduYWxmZDQuUworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoc2lnbmFsZmQ0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX3NpZ25hbGZkNAotICAgIHN2YyAgICAgIzAKLQotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCi0gICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQotICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KLQotICAgIHJldAotRU5EKHNpZ25hbGZkNCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zb2NrZXQuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zb2NrZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdhMzg1MS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc29ja2V0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHNvY2tldCkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCi0gICAgbW92ICAgICB4OCwgX19OUl9zb2NrZXQKLSAgICBzdmMgICAgICMwCi0KLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQotICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKLSAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCi0KLSAgICByZXQKLUVORChzb2NrZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc29ja2V0cGFpci5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3NvY2tldHBhaXIuUwppbmRleCAwNWU2MTdiLi5iZDcwZGFjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc29ja2V0cGFpci5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zb2NrZXRwYWlyLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc29ja2V0cGFpcikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zb2NrZXRwYWlyCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHNvY2tldHBhaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3BsaWNlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3BsaWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU0NTBkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zcGxpY2UuUwpAQCAtMCwwICsxLDE0IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNwbGljZSkKKyAgICBtb3YgICAgIHg4LCBfX05SX3NwbGljZQorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChzcGxpY2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3RhdGZzLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3RhdGZzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliZmFlNjMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N0YXRmcy5TCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShzdGF0ZnMpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQotICAgIG1vdiAgICAgeDgsIF9fTlJfc3RhdGZzCi0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQoc3RhdGZzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N0YXRmczY0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3RhdGZzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzhjNTg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N0YXRmczY0LlMKQEAgLTAsMCArMSwxNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzdGF0ZnM2NCkKKyAgICBtb3YgICAgIHg4LCBfX05SX3N0YXRmcworICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORChzdGF0ZnM2NCkKKworICAgIC5nbG9ibCBzdGF0ZnMKKyAgICAuZXF1IHN0YXRmcywgc3RhdGZzNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zd2Fwb2ZmLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3dhcG9mZi5TCmluZGV4IDc0MmI0NjAuLjAxMDNiZDcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zd2Fwb2ZmLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N3YXBvZmYuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzd2Fwb2ZmKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3N3YXBvZmYKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc3dhcG9mZikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zd2Fwb24uUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zd2Fwb24uUwppbmRleCBiODJkN2RlLi41NjBjOTYwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3dhcG9uLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N3YXBvbi5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHN3YXBvbikKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zd2Fwb24KICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQoc3dhcG9uKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N5bWxpbmthdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N5bWxpbmthdC5TCmluZGV4IGM2YTgzMTMuLjRhNGVhMjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zeW1saW5rYXQuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3ltbGlua2F0LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc3ltbGlua2F0KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3N5bWxpbmthdAogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORChzeW1saW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3luYy5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N5bmMuUwppbmRleCAxOTU0ZmU4Li5kMjg1ZDQzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3luYy5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zeW5jLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc3luYykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zeW5jCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3lzaW5mby5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3N5c2luZm8uUwppbmRleCBjYjkxNTUwLi44MGE4NjQxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvc3lzaW5mby5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy9zeXNpbmZvLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoc3lzaW5mbykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl9zeXNpbmZvCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHN5c2luZm8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGVlLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGVlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiYWEyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90ZWUuUwpAQCAtMCwwICsxLDE0IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHRlZSkKKyAgICBtb3YgICAgIHg4LCBfX05SX3RlZQorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORCh0ZWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGdraWxsLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGdraWxsLlMKaW5kZXggYTQwMTgxOS4uZmQ5ZWMzYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3Rna2lsbC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90Z2tpbGwuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWSh0Z2tpbGwpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdGdraWxsCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHRna2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKaW5kZXggZTA1NThiZS4uZWU4MDVmZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkodGltZXJmZF9jcmVhdGUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdGltZXJmZF9jcmVhdGUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQodGltZXJmZF9jcmVhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKaW5kZXggMDkyMzRjZC4uNGQ1ZTJmOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWSh0aW1lcmZkX2dldHRpbWUpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdGltZXJmZF9nZXR0aW1lCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHRpbWVyZmRfZ2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwppbmRleCBjYzIwNWFkLi5lOTI1YTBjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHRpbWVyZmRfc2V0dGltZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl90aW1lcmZkX3NldHRpbWUKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQodGltZXJmZF9zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RpbWVzLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXMuUwppbmRleCBjNWZlMzhiLi5kN2I5Yzc0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXMuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdGltZXMuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWSh0aW1lcykKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl90aW1lcwogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORCh0aW1lcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90a2lsbC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RraWxsLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOTEwZmMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3RraWxsLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHRraWxsKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KLSAgICBtb3YgICAgIHg4LCBfX05SX3RraWxsCi0gICAgc3ZjICAgICAjMAotCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KLSAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCi0gICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubwotCi0gICAgcmV0Ci1FTkQodGtpbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdHJ1bmNhdGUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90cnVuY2F0ZS5TCmluZGV4IGYyNTRjMzQuLjBlNWEzM2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90cnVuY2F0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy90cnVuY2F0ZS5TCkBAIC0zLDIyICszLDE1IEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHRydW5jYXRlKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3RydW5jYXRlCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHRydW5jYXRlKQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKHRydW5jYXRlNjQpCi0gICAgLmVxdSBfQ19MQUJFTCh0cnVuY2F0ZTY0KSwgX0NfTEFCRUwodHJ1bmNhdGUpCisgICAgLmdsb2JsIHRydW5jYXRlNjQKKyAgICAuZXF1IHRydW5jYXRlNjQsIHRydW5jYXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW1hc2suUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bWFzay5TCmluZGV4IDcwYTNlMDEuLjBkNzFmYTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bWFzay5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bWFzay5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHVtYXNrKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3VtYXNrCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHVtYXNrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3Vtb3VudDIuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bW91bnQyLlMKaW5kZXggY2RkMDM2Mi4uYzI1MzQ0ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3Vtb3VudDIuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW1vdW50Mi5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHVtb3VudDIpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdW1vdW50MgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORCh1bW91bnQyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3VuYW1lLlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW5hbWUuUwppbmRleCBjMjQyNzg2Li5kZmRjYzAzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW5hbWUuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW5hbWUuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWSh1bmFtZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl91bmFtZQogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORCh1bmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bmxpbmthdC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3VubGlua2F0LlMKaW5kZXggZjdiYjJjNS4uYjFlYmE2MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3VubGlua2F0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3VubGlua2F0LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkodW5saW5rYXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdW5saW5rYXQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQodW5saW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW5zaGFyZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3Vuc2hhcmUuUwppbmRleCBjOWJkNDk3Li43NGY1NjYzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdW5zaGFyZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91bnNoYXJlLlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkodW5zaGFyZSkKLSAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQotICAgIG1vdiAgICAgeDI5LCAgc3AKLSAgICBzdHIgICAgIHg4LCAgICAgICBbc3AsICMtMTZdIQotCiAgICAgbW92ICAgICB4OCwgX19OUl91bnNoYXJlCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHVuc2hhcmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdXRpbWVuc2F0LlMgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvdXRpbWVuc2F0LlMKaW5kZXggNjJjOThhNi4uYjhjNmIwNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3V0aW1lbnNhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy91dGltZW5zYXQuUwpAQCAtMywxOSArMywxMiBAQAogI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWSh1dGltZW5zYXQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfdXRpbWVuc2F0CiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHV0aW1lbnNhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy92bXNwbGljZS5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3Ztc3BsaWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ5MGVmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy92bXNwbGljZS5TCkBAIC0wLDAgKzEsMTQgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodm1zcGxpY2UpCisgICAgbW92ICAgICB4OCwgX19OUl92bXNwbGljZQorICAgIHN2YyAgICAgIzAKKworICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBjbmVnICAgIHgwLCB4MCwgaGkKKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisKKyAgICByZXQKK0VORCh2bXNwbGljZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy93YWl0NC5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3dhaXQ0LlMKaW5kZXggNzQzMTUzNS4uMTI5NzNiOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3dhaXQ0LlMKKysrIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3dhaXQ0LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkod2FpdDQpCi0gICAgc3RwICAgICB4MjksIHgzMCwgW3NwLCAjLTE2XSEKLSAgICBtb3YgICAgIHgyOSwgIHNwCi0gICAgc3RyICAgICB4OCwgICAgICAgW3NwLCAjLTE2XSEKLQogICAgIG1vdiAgICAgeDgsIF9fTlJfd2FpdDQKICAgICBzdmMgICAgICMwCiAKLSAgICBsZHIgICAgIHg4LCAgICAgICBbc3BdLCAjMTYKLSAgICBsZHAgICAgIHgyOSwgeDMwLCBbc3BdLCAjMTYKLQogICAgIGNtbiAgICAgeDAsICMoTUFYX0VSUk5PICsgMSkKICAgICBjbmVnICAgIHgwLCB4MCwgaGkKLSAgICBiLmhpICAgIF9fc2V0X2Vycm5vCisgICAgYi5oaSAgICBfX3NldF9lcnJub19pbnRlcm5hbAogCiAgICAgcmV0CiBFTkQod2FpdDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvd3JpdGUuUyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy93cml0ZS5TCmluZGV4IDJmOTVmNWQuLmU4YzMyNzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy93cml0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy93cml0ZS5TCkBAIC0zLDE5ICszLDEyIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIEVOVFJZKHdyaXRlKQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3dyaXRlCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKHdyaXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3dyaXRldi5TIGIvbGliYy9hcmNoLWFybTY0L3N5c2NhbGxzL3dyaXRldi5TCmluZGV4IDAxNWMxZDMuLmJhYWZmZGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm02NC9zeXNjYWxscy93cml0ZXYuUworKysgYi9saWJjL2FyY2gtYXJtNjQvc3lzY2FsbHMvd3JpdGV2LlMKQEAgLTMsMTkgKzMsMTIgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkod3JpdGV2KQotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCBfX05SX3dyaXRldgogICAgIHN2YyAgICAgIzAKIAotICAgIGxkciAgICAgeDgsICAgICAgIFtzcF0sICMxNgotICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgotCiAgICAgY21uICAgICB4MCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGNuZWcgICAgeDAsIHgwLCBoaQotICAgIGIuaGkgICAgX19zZXRfZXJybm8KKyAgICBiLmhpICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAKICAgICByZXQKIEVORCh3cml0ZXYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtY29tbW9uL2Jpb25pYy9hdGV4aXQuaCBiL2xpYmMvYXJjaC1jb21tb24vYmlvbmljL2F0ZXhpdC5oCmluZGV4IDE2YWU3YWEuLjkwYWEwMzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1jb21tb24vYmlvbmljL2F0ZXhpdC5oCisrKyBiL2xpYmMvYXJjaC1jb21tb24vYmlvbmljL2F0ZXhpdC5oCkBAIC0yNiwxMSArMjYsMjAgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogZXh0ZXJuIHZvaWQqIF9fZHNvX2hhbmRsZTsKIAogZXh0ZXJuIGludCBfX2N4YV9hdGV4aXQodm9pZCAoKikodm9pZCopLCB2b2lkKiwgdm9pZCopOwogCiBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKK3ZvaWQgX19hdGV4aXRfaGFuZGxlcl93cmFwcGVyKHZvaWQqIGZ1bmMpIHsKKyAgaWYgKGZ1bmMgIT0gTlVMTCkgeworICAgICgqKHZvaWQgKCopKHZvaWQpKWZ1bmMpKCk7CisgIH0KK30KKworX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCiBpbnQgYXRleGl0KHZvaWQgKCpmdW5jKSh2b2lkKSkgewotICByZXR1cm4gKF9fY3hhX2F0ZXhpdCgodm9pZCAoKikodm9pZCopKSBmdW5jLCAodm9pZCopIDAsICZfX2Rzb19oYW5kbGUpKTsKKyAgcmV0dXJuIChfX2N4YV9hdGV4aXQoJl9fYXRleGl0X2hhbmRsZXJfd3JhcHBlciwgZnVuYywgJl9fZHNvX2hhbmRsZSkpOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL19fYmlvbmljX2Nsb25lLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUwppbmRleCA4OTcwYjZlLi5iMjE2ZWZlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUworKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUwpAQCAtMjYsNDkgKzI2LDQ3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLy8gcGlkX3QgX19iaW9uaWNfY2xvbmUoaW50IGZsYWdzLCB2b2lkKiBjaGlsZF9zdGFjaywgcGlkX3QqIHBhcmVudF90aWQsIHZvaWQqIHRscywgcGlkX3QqIGNoaWxkX3RpZCwgaW50ICgqZm4pKHZvaWQqKSwgdm9pZCogYXJnKTsKLQkudGV4dAotCS50eXBlIF9fYmlvbmljX2Nsb25lLCBAZnVuY3Rpb24KLQkuZ2xvYmFsIF9fYmlvbmljX2Nsb25lCi0JLmFsaWduIDQKLSAgICAgICAgLmVudCBfX2Jpb25pY19jbG9uZQotX19iaW9uaWNfY2xvbmU6CitFTlRSWShfX2Jpb25pY19jbG9uZSkKICAgICAgICAgLnNldAlub3Jlb3JkZXIKLSAgICAgICAgLmNwbG9hZCAkdDkKKyAgICAgICAgLmNwbG9hZCB0OQogICAgICAgICAuc2V0CXJlb3JkZXIKIAogCSMgc2V0IHVwIGNoaWxkIHN0YWNrCi0Jc3VidQkkYTEsMTYKLQlsdwkkdDAsMjAoJHNwKSAgICAgIyBmbgotCWx3CSR0MSwyNCgkc3ApICAgICAjIGFyZwotCXN3CSR0MCwwKCRhMSkJIyBmbgotCXN3CSR0MSw0KCRhMSkJIyBhcmcKKwlzdWJ1CWExLDE2CisJbHcJdDAsMjAoc3ApICAgICAjIGZuCisJbHcJdDEsMjQoc3ApICAgICAjIGFyZworCXN3CXQwLDAoYTEpCSMgZm4KKwlzdwl0MSw0KGExKQkjIGFyZwogCiAJIyByZW1haW5kZXIgb2YgYXJndW1lbnRzIGFyZSBjb3JyZWN0IGZvciBjbG9uZSBzeXN0ZW0gY2FsbAotICAgICAgICBsaQkkdjAsX19OUl9jbG9uZQorICAgICAgICBsaQl2MCxfX05SX2Nsb25lCiAgICAgICAgIHN5c2NhbGwKIAotICAgICAgICBibmV6CSRhMywuTF9fZXJyb3JfYmMKKyAgICAgICAgYm5leglhMywuTF9fZXJyb3JfYmMKIAotICAgICAgICBiZXF6CSR2MCwuTF9fdGhyZWFkX3N0YXJ0X2JjCisgICAgICAgIGJlcXoJdjAsLkxfX3RocmVhZF9zdGFydF9iYwogCi0gICAgICAgIGogJHJhCisgICAgICAgIGogcmEKIAogLkxfX3RocmVhZF9zdGFydF9iYzoKLSAgICAgICAgbHcJJGEwLDAoJHNwKQkjICBmbgotICAgICAgICBsdwkkYTEsNCgkc3ApCSMgIGFyZworICAgICAgICAjIENsZWFyIHJldHVybiBhZGRyZXNzIGluIGNoaWxkIHNvIHdlIGRvbid0IHVud2luZCBmdXJ0aGVyLgorICAgICAgICBsaSAgICAgIHJhLDAKIAotCSMgdm9pZCBfX2Jpb25pY19jbG9uZV9lbnRyeShpbnQgKCpmdW5jKSh2b2lkKiksIHZvaWQgKmFyZykKLSAgICAgICAgbGEJJHQ5LF9fYmlvbmljX2Nsb25lX2VudHJ5Ci0gICAgICAgIGoJJHQ5CisgICAgICAgIGx3CWEwLDAoc3ApCSMgIGZuCisgICAgICAgIGx3CWExLDQoc3ApCSMgIGFyZworCisJIyB2b2lkIF9fc3RhcnRfdGhyZWFkKGludCAoKmZ1bmMpKHZvaWQqKSwgdm9pZCAqYXJnKQorICAgICAgICBsYQl0OSxfX3N0YXJ0X3RocmVhZAorICAgICAgICBqCXQ5CiAKIC5MX19lcnJvcl9iYzoKLQltb3ZlCSRhMCwkdjAKLQlsYQkkdDksX19zZXRfZXJybm8KLQlqCSR0OQotCi0gICAgICAgIC5lbmQgX19iaW9uaWNfY2xvbmUKKwltb3ZlCWEwLHYwCisJbGEJdDksX19zZXRfZXJybm9faW50ZXJuYWwKKwlqCXQ5CitFTkQoX19iaW9uaWNfY2xvbmUpCisuaGlkZGVuIF9fYmlvbmljX2Nsb25lCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX19nZXRfc3AuUyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fX2dldF9zcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzRjODlkLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fX2dldF9zcC5TCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCS50ZXh0Ci0KLS8qIHZvaWQgKl9fZ2V0X3NwKHZvaWQpICovCi0KLQkudHlwZQlfX2dldF9zcCwgQGZ1bmN0aW9uCi0JLmdsb2JhbAlfX2dldF9zcAotCS5hbGlnbgk0Ci0JLmVudAlfX2dldF9zcAotX19nZXRfc3A6Ci0JbW92ZQkkdjAsICRzcAotCWoJJHJhCi0JLmVuZAlfX2dldF9zcApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL19fc2V0X3Rscy5jIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL19fc2V0X3Rscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGUzYTUwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fX3NldF90bHMuYworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0KLWV4dGVybiBpbnQgX19zZXRfdGhyZWFkX2FyZWEodm9pZCAqdV9pbmZvKTsKLQotaW50IF9fc2V0X3Rscyh2b2lkICpwdHIpCi17Ci0gICAgcmV0dXJuIF9fc2V0X3RocmVhZF9hcmVhKHB0cik7Ci19CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwppbmRleCA4ZjYyNGMzLi43ZDQ3MTYwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKQEAgLTI2LDIzICsyNiwxNiBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLQotCS50ZXh0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIC8vIHZvaWQgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bih2b2lkKiBzdGFja0Jhc2UsIHNpemVfdCBzdGFja1NpemUpCi0KLQkudHlwZQlfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLCBAZnVuY3Rpb24KLQkuZ2xvYmFsCV9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24KLQkuYWxpZ24JNAotCS5lbnQJX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bgotX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bjoKLQlsaQkkdjAsIF9fTlJfbXVubWFwCitFTlRSWV9QUklWQVRFKF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24pCisJbGkJdjAsIF9fTlJfbXVubWFwCiAJc3lzY2FsbAogCS8vIElmIG11bm1hcCBmYWlsZWQsIHdlIGlnbm9yZSB0aGUgZmFpbHVyZSBhbmQgZXhpdCBhbnl3YXkuCiAKLQlsaQkkYTAsIDAKLQlsaQkkdjAsIF9fTlJfZXhpdAorCWxpCWEwLCAwCisJbGkJdjAsIF9fTlJfZXhpdAogCXN5c2NhbGwKICAgICAgICAgLy8gVGhlIGV4aXQgc3lzY2FsbCBkb2VzIG5vdCByZXR1cm4uCi0JLmVuZAlfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duCitFTkQoX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fc2V0am1wLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX3NldGptcC5TCmluZGV4IGU3MDgzYWUuLmQyMzdlNmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL19zZXRqbXAuUwpAQCAtMiw3ICsyLDcgQEAKIAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwMiBPcHN5Y29uIEFCICAod3d3Lm9wc3ljb24uc2UgLyB3d3cub3BzeWNvbi5jb20pCi0gKiAKKyAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKQEAgLTI5LDcgKzI5LDcgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9yZWdudW0uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NpZ25hbC5oPgogCkBAIC00NCwxNyArNDQsNiBAQAogRlJBTUVTWj0gTUtGU0laKDAsNCkKIEdQT0ZGPSBGUkFNRVNaLTIqUkVHU1oKIAotI2RlZmluZSBGUFJFRzY0X1MoRlBSLCBPRkYsIEJBU0UpICAgICAgIFwKLSAgICAgICAgc3djMSAgICBGUFIsIE9GRihCQVNFKSAgOyAgICAgICBcCi0gICAgICAgIG1maGMxICAgdDAsIEZQUiAgICAgICAgIDsgICAgICAgXAotICAgICAgICBzdyAgICAgIHQwLCBPRkYrNChCQVNFKSA7Ci0gICAgICAgIAotI2RlZmluZSBGUFJFRzY0X0woRlBSLCBPRkYsIEJBU0UpICAgICAgIFwKLSAgICAgICAgbHcgICAgICB0MCwgT0ZGKzQoQkFTRSkgOyAgICAgICBcCi0gICAgICAgIGx3ICAgICAgdDEsIE9GRihCQVNFKSAgIDsgICAgICAgXAotICAgICAgICBtdGMxICAgIHQxLCBGUFIgICAgICAgICA7ICAgICAgIFwKLSAgICAgICAgbXRoYzEgICB0MCwgRlBSICAgICAgICAgOyAgICAgICBcCi0gICAgICAgIAogTEVBRihfc2V0am1wLCBGUkFNRVNaKQogCVBUUl9TVUJVIHNwLCBGUkFNRVNaCiAJU0VUVVBfR1A2NChHUE9GRiwgX3NldGptcCkKQEAgLTg1LDMyICs3NCwxOSBAQAogCWxpCXYwLCAxCQkJCSMgYmUgbmljZSBpZiB3ZSBjb3VsZCB0ZWxsCiAJUkVHX1MJdjAsIFNDX0ZQVVNFRChhMCkJCSMgc2NfZnB1c2VkID0gMQogCWNmYzEJdjAsICQzMQorCXMuZAkkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQogI2lmIF9NSVBTX0ZQU0VUID09IDMyCi0gICAgICAgIEZQUkVHNjRfUygkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfUygkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKSwgYTApCi0jZWxzZQotICAgICAgICBzd2MxICAgICRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBzd2MxICAgICRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQogI2VuZGlmCiAJUkVHX1MJdjAsIFNDX0ZQUkVHUysoKEZTUi1GMCkqUkVHU1opKGEwKQogI2VuZGlmIC8qICFTT0ZURkxPQVQgKi8KQEAgLTE0MiwzMiArMTE4LDE5IEBACiAJUkVHX0wJc3AsIFNDX1JFR1MrU1AqUkVHU1ooYTApCiAjaWYgIWRlZmluZWQoU09GVEZMT0FUKQogCWN0YzEJdjAsICQzMQorCWwuZAkkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQogI2lmIF9NSVBTX0ZQU0VUID09IDMyCi0gICAgICAgIEZQUkVHNjRfTCgkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfTCgkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfTCgkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfTCgkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfTCgkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfTCgkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfTCgkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfTCgkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfTCgkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfTCgkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfTCgkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKSwgYTApCi0gICAgICAgIEZQUkVHNjRfTCgkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKSwgYTApCi0jZWxzZQotICAgICAgICBsd2MxICAgICRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBsd2MxICAgICRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBsd2MxICAgICRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBsd2MxICAgICRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBsd2MxICAgICRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBsd2MxICAgICRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBsd2MxICAgICRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBsd2MxICAgICRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBsd2MxICAgICRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBsd2MxICAgICRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBsd2MxICAgICRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQotICAgICAgICBsd2MxICAgICRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQogI2VuZGlmCiAjZW5kaWYgLyogIVNPRlRGTE9BVCAqLwogCWJuZQlhMSwgemVybywgMWYKQEAgLTE4NSw0ICsxNDgsMyBAQAogCVJFU1RPUkVfR1A2NAogCVBUUl9BRERVIHNwLCBGUkFNRVNaCiBFTkQoX2xvbmdqbXApCi0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9iemVyby5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2J6ZXJvLlMKaW5kZXggNjczOTM0NS4uNmU1ZDI5NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL2J6ZXJvLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2J6ZXJvLlMKQEAgLTI1LDIxICsyNSwxNSBAQAogICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqLwotCS50ZXh0CiAKLS8qCi0gKiB2b2lkIGJ6ZXJvKHZvaWQgKnMsIHNpemVfdCBuKTsKLSAqLwotCS50eXBlCWJ6ZXJvLCBAZnVuY3Rpb24KLQkuZ2xvYmFsCWJ6ZXJvCi0JLmFsaWduCTQKLQkuZW50CWJ6ZXJvCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8vIHZvaWQgYnplcm8odm9pZCosIHNpemVfdCk7CitFTlRSWShiemVybykKIAkuc2V0CW5vcmVvcmRlcgotYnplcm86Ci0JLmNwbG9hZAkkdDkKLQltb3ZlCSRhMiwkYTEKLQlsYQkkdDksbWVtc2V0Ci0JagkkdDkKLQkgbW92ZQkkYTEsJHplcm8KLQkuZW5kCWJ6ZXJvCi0KKwkuY3Bsb2FkCXQ5CisJbW92ZQlhMixhMQorCWxhCXQ5LG1lbXNldAorCWoJdDkKKwkgbW92ZQlhMSx6ZXJvCitFTkQoYnplcm8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvY2FjaGVmbHVzaC5jcHAgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvY2FjaGVmbHVzaC5jcHAKaW5kZXggNzk1NWRkNi4uOThjMGJkNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL2NhY2hlZmx1c2guY3BwCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jYWNoZWZsdXNoLmNwcApAQCAtMjUsNzUgKzI1LDM5IEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCisKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvY2FjaGVjdGwuaD4KIAotI2lmZGVmIERFQlVHCiAjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKLSNkZWZpbmUgIFhMT0coLi4uKSBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywibGliYy1jYWNoZWZsdXNoIixfX1ZBX0FSR1NfXykKLSNlbmRpZgogCi0vKgotICogTGludXggaGlzdG9yaWNhbGx5IGRlZmluZXMgYSBjYWNoZWZsdXNoKDMpIHJvdXRpbmUgZm9yIE1JUFMKLSAqIHdpdGggdGhpcyBzaWduYXR1cmU6Ci0gKiBpbnQgY2FjaGVmbHVzaChjaGFyICphZGRyLCBpbnQgbmJ5dGVzLCBpbnQgY2FjaGUpOwotICoKLSAqIEFuZHJvaWQgZGVmaW5lcyBhbiBhbHRlcm5hdGUgY2FjaGVmbHVzaCByb3V0aW5lIHdoaWNoIGV4cG9zZXMgdGhlCi0gKiBBUk0gc3lzdGVtIGNhbGwgaW50ZXJmYWNlOgotICogaW50IGNhY2hlZmx1c2ggKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCBsb25nIGZsYWdzKQotICoKLSAqIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIGhpc3RvcmljYWwgTUlQUwotICogdXNhZ2UgZm9yIHNvZnR3YXJlIHByZXZpb3VzbHkgcG9ydGVkIHRvIE1JUFMgYW5kIEFuZHJvaWQgc3BlY2lmaWMKLSAqIHVzZXMgb2YgY2FjaGVmbHVzaCgpCi0gKgotICogVXNlIHRoZSBnY2MgX19jbGVhcl9jYWNoZSBidWlsdGluIGlmIHBvc3NpYmxlLiBUaGlzIHdpbGwgZ2VuZXJhdGUgaW5saW5lIHN5bmNpCi0gKiBpbnN0cnVjdGlvbnMgaWYgYXZhaWxhYmxlIG9yIGNhbGwgX2ZsdXNoX2NhY2hlKHN0YXJ0LCBsZW4sIEJDQUNIRSkgZGlyZWN0bHkKLSAqLworLy8gTGludXggaGlzdG9yaWNhbGx5IGRlZmluZXMgYSBjYWNoZWZsdXNoKDMpIHJvdXRpbmUgZm9yIE1JUFMKKy8vIHdpdGggdGhpcyBzaWduYXR1cmU6CiAKLSNpZiBkZWZpbmVkIChfX0dOVUNfXykKLSNkZWZpbmUgR0NDX1ZFUlNJT04gKChfX0dOVUNfXyoxMDAwMCkgKyBfX0dOVUNfTUlOT1JfXyoxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQotI2VuZGlmCisvLyAgIGludCBjYWNoZWZsdXNoKGNoYXIgKmFkZHIsIGludCBuYnl0ZXMsIGludCBjYWNoZSk7CiAKLS8qIFRoaXMgaXMgdGhlIEFuZHJvaWQgc2lnbmF0dXJlICovCi1pbnQgY2FjaGVmbHVzaCAobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgLypmbGFncyovKSB7Ci0JaWYgKGVuZCA8IHN0YXJ0KSB7Ci0JCS8qCi0JCSAqIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyByZWFsbHkgTUlQUyBzdHlsZSBjYWNoZWZsdXNoIGNhbGwKLQkJICogc3RhcnQgPT4gYWRkcgotCQkgKiBlbmQgPT4gbmJ5dGVzCi0JCSAqLwotI2lmZGVmIERFQlVHCi0JCXN0YXRpYyBpbnQgd2FybmVkID0gMDsKLQkJaWYgKCF3YXJuZWQpIHsKLQkJCVhMT0coImNhbGxlZCB3aXRoIChzdGFydCxsZW4pIGluc3RlYWQgb2YgKHN0YXJ0LGVuZCkiKTsKLQkJCXdhcm5lZCA9IDE7Ci0JCX0KLSNlbmRpZgotCQllbmQgKz0gc3RhcnQ7Ci0JfQorLy8gQW5kcm9pZCBkZWZpbmVzIGFuIGFsdGVybmF0ZSBjYWNoZWZsdXNoIHJvdXRpbmUgd2hpY2ggZXhwb3NlcyB0aGUKKy8vIEFSTSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2U6CiAKLSNpZiAhZGVmaW5lZChBUkNIX01JUFNfVVNFX0ZMVVNIQ0FDSEVfU1lTQ0FMTCkgJiYgXAotCWRlZmluZWQoR0NDX1ZFUlNJT04pICYmIChHQ0NfVkVSU0lPTiA+PSA0MDMwMCkKKy8vICAgaW50IGNhY2hlZmx1c2ggKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCBsb25nIGZsYWdzKQogCi0jaWYgKF9fbWlwc19pc2FfcmV2ID49IDIpICYmIChHQ0NfVkVSU0lPTiA8IDQwNDAzKQotCS8qCi0JICogTW9kaWZ5ICJzdGFydCIgYW5kICJlbmQiIHRvIGF2b2lkIEdDQyA0LjMuMC00LjQuMiBidWcgaW4KLQkgKiBtaXBzX2V4cGFuZF9zeW5jaV9sb29wIHRoYXQgbWF5IGV4ZWN1dGUgc3luY2kgb25lIG1vcmUgdGltZS4KLQkgKiAic3RhcnQiIHBvaW50cyB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgY2FjaGUgbGluZS4KLQkgKiAiZW5kIiBwb2ludHMgdG8gdGhlIGxhc3QgYnl0ZSBvZiB0aGUgbGluZSBiZWZvcmUgdGhlIGxhc3QgY2FjaGUgbGluZS4KLQkgKiBCZWNhdXNlIHNpemUgaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgNCwgdGhpcyBpcyBzYWZlIHRvIHNldAotCSAqICJlbmQiIHRvIHRoZSBsYXN0IGJ5dGUuCi0JICovCi0JewotCQlpbnQgbGluZVNpemU7Ci0JCWFzbSgicmRod3IgJTAsICQxIiA6ICI9ciIgKGxpbmVTaXplKSk7Ci0JCXN0YXJ0ID0gc3RhcnQgJiAoLWxpbmVTaXplKTsKLQkJZW5kID0gKGVuZCAmICgtbGluZVNpemUpKSAtIDE7Ci0JfQotI2VuZGlmCi0JX19idWlsdGluX19fY2xlYXJfY2FjaGUoKGNoYXIgKilzdGFydCwgKGNoYXIgKillbmQpOwotI2Vsc2UKLQlfZmx1c2hfY2FjaGUoKGNoYXIgKilzdGFydCwgZW5kLXN0YXJ0LCBCQ0FDSEUpOwotI2VuZGlmCi0JcmV0dXJuIDA7CisvLyBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBoaXN0b3JpY2FsIE1JUFMKKy8vIHVzYWdlIGZvciBzb2Z0d2FyZSBwcmV2aW91c2x5IHBvcnRlZCB0byBNSVBTIGFuZCBBbmRyb2lkIHNwZWNpZmljCisvLyB1c2VzIG9mIGNhY2hlZmx1c2goKS4KKworaW50IGNhY2hlZmx1c2gobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgLypmbGFncyovKSB7CisgIGlmIChlbmQgPCBzdGFydCkgeworICAgIC8vIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyByZWFsbHkgYSBNSVBTLXN0eWxlIGNhY2hlZmx1c2ggY2FsbC4KKyAgICBzdGF0aWMgYm9vbCB3YXJuZWQgPSBmYWxzZTsKKyAgICBpZiAoIXdhcm5lZCkgeworICAgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfV0FSTiwgImxpYmMiLCAiY2FjaGVmbHVzaCBjYWxsZWQgd2l0aCAoc3RhcnQsbGVuKSBpbnN0ZWFkIG9mIChzdGFydCxlbmQpIik7CisgICAgICB3YXJuZWQgPSB0cnVlOworICAgIH0KKyAgICBlbmQgKz0gc3RhcnQ7CisgIH0KKworICAvLyBVc2UgdGhlIEdDQyBidWlsdGluLiBUaGlzIHdpbGwgZ2VuZXJhdGUgaW5saW5lIHN5bmNpIGluc3RydWN0aW9ucyBpZiBhdmFpbGFibGUsCisgIC8vIG9yIGNhbGwgX2ZsdXNoX2NhY2hlKHN0YXJ0LCBsZW4sIEJDQUNIRSkgZGlyZWN0bHkuCisgIF9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0YXJ0KSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZW5kKSk7CisgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL2Z1dGV4X21pcHMuUyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9mdXRleF9taXBzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNDdiNzkuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL2Z1dGV4X21pcHMuUworKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotI2RlZmluZSBGVVRFWF9XQUlUIDAKLSNkZWZpbmUgRlVURVhfV0FLRSAxCi0KLS8vIGludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQpCi0JLnR5cGUJX19mdXRleF93YWl0LCBAZnVuY3Rpb24KLQkuZ2xvYmFsCV9fZnV0ZXhfd2FpdAotCS5hbGlnbgk0Ci0JLmVudAlfX2Z1dGV4X3dhaXQKLV9fZnV0ZXhfd2FpdDoKLQlzdWJ1CSRzcCw0KjYKLQlzdwkkMCwyMCgkc3ApCS8qIHZhbDMgKi8KLQlzdwkkMCwxNigkc3ApCS8qIGFkZHIyICovCi0JbW92ZQkkYTMsJGEyCQkvKiB0aW1lc3BlYyAqLwotCW1vdmUJJGEyLCRhMQkJLyogdmFsICovCi0JbGkJJGExLEZVVEVYX1dBSVQJLyogb3AgKi8KLSMJbW92ZQkkYTAsJGEwCQkvKiBmdHggKi8KLQlsaQkkdjAsX19OUl9mdXRleAotCXN5c2NhbGwKLQkuc2V0IG5vcmVvcmRlcgotCWJuZXoJJGEzLCAxZgkJLyogQ2hlY2sgZm9yIGVycm9yICovCi0gICAgICAgICBuZWcJJHYwCQkvKiBOZWdhdGUgZXJyb3IgbnVtYmVyIGlmIGl0J3MgdmFsaWQgKi8KLQltb3ZlCSR2MCwkMAkJLyogT3RoZXJ3aXNlIHJldHVybiAwICovCi0xOgotCS5zZXQgcmVvcmRlcgotCWFkZHUJJHNwLDQqNgotCWoJJHJhCi0JLmVuZAlfX2Z1dGV4X3dhaXQKLQotLy8gaW50IF9fZnV0ZXhfd2FrZSh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBjb3VudCkKLQkudHlwZQlfX2Z1dGV4X3dha2UsIEBmdW5jdGlvbgotCS5nbG9ibAlfX2Z1dGV4X3dha2UKLQkuYWxpZ24JNAotCS5lbnQJX19mdXRleF93YWtlCi1fX2Z1dGV4X3dha2U6Ci0Jc3VidQkkc3AsNCo2Ci0Jc3cJJDAsMjAoJHNwKQkvKiB2YWwzICovCi0Jc3cJJDAsMTYoJHNwKQkvKiBhZGRyMiAqLwotCW1vdmUJJGEzLCQwCQkvKiB0aW1lc3BlYyAqLwotCW1vdmUJJGEyLCRhMQkJLyogdmFsICovCi0JbGkJJGExLEZVVEVYX1dBS0UJLyogb3AgKi8KLSMJbW92ZQkkYTAsJGEwCQkvKiBmdHggKi8KLQlsaQkkdjAsX19OUl9mdXRleAotCXN5c2NhbGwKLQkuc2V0IG5vcmVvcmRlcgotCWJuZXoJJGEzLCAxZgkJLyogQ2hlY2sgZm9yIGVycm9yICovCi0gICAgICAgICBuZWcJJHYwCQkvKiBOZWdhdGUgZXJyb3IgbnVtYmVyIGlmIGl0J3MgdmFsaWQgKi8KLQltb3ZlCSR2MCwkMAkJLyogT3RoZXJ3aXNlIHJldHVybiAwICovCi0xOgotCS5zZXQgcmVvcmRlcgotCWFkZHUJJHNwLDQqNgotCWoJJHJhCi0JLmVuZAlfX2Z1dGV4X3dha2UKLQotLy8gaW50IF9fZnV0ZXhfc3lzY2FsbDModm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgb3AsIGludCBjb3VudCkKLQkudHlwZQlfX2Z1dGV4X3N5c2NhbGwzLCBAZnVuY3Rpb24KLQkuZ2xvYmFsCV9fZnV0ZXhfc3lzY2FsbDMKLQkuYWxpZ24JNAotCS5lbnQJX19mdXRleF9zeXNjYWxsMwotX19mdXRleF9zeXNjYWxsMzoKLQlzdWJ1CSRzcCw0KjYKLQlzdwkkMCwyMCgkc3ApCS8qIHZhbDMgKi8KLQlzdwkkMCwxNigkc3ApCS8qIGFkZHIyICovCi0JbW92ZQkkYTMsJDAJCS8qIHRpbWVzcGVjICovCi0jCW1vdmUJJGEyLCRhMgkJLyogdmFsICovCi0jCWxpCSRhMSwkYTEJCS8qIG9wICovCi0jCW1vdmUJJGEwLCRhMAkJLyogZnR4ICovCi0JbGkJJHYwLF9fTlJfZnV0ZXgKLQlzeXNjYWxsCi0JLnNldCBub3Jlb3JkZXIKLQlibmV6CSRhMywgMWYJCS8qIENoZWNrIGZvciBlcnJvciAqLwotICAgICAgICAgbmVnCSR2MAkJLyogTmVnYXRlIGVycm9yIG51bWJlciBpZiBpdCdzIHZhbGlkICovCi0JbW92ZQkkdjAsJDAJCS8qIE90aGVyd2lzZSByZXR1cm4gMCAqLwotMToKLQkuc2V0IHJlb3JkZXIKLQlhZGR1CSRzcCw0KjYKLQlqCSRyYQotCS5lbmQJX19mdXRleF9zeXNjYWxsMwotCi0vLyBpbnQgX19mdXRleF9zeXNjYWxsNCh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBvcCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KQotCS50eXBlCV9fZnV0ZXhfc3lzY2FsbDQsIEBmdW5jdGlvbgotCS5nbG9iYWwJX19mdXRleF9zeXNjYWxsNAotCS5hbGlnbgk0Ci0JLmVudAlfX2Z1dGV4X3N5c2NhbGw0Ci1fX2Z1dGV4X3N5c2NhbGw0OgotCXN1YnUJJHNwLDQqNgotCXN3CSQwLDIwKCRzcCkJLyogdmFsMyAqLwotCXN3CSQwLDE2KCRzcCkJLyogYWRkcjIgKi8KLSMJbW92ZQkkYTMsJGEzCQkvKiB0aW1lc3BlYyAqLwotIwltb3ZlCSRhMiwkYTIJCS8qIHZhbCAqLwotIwlsaQkkYTEsJGExCQkvKiBvcCAqLwotIwltb3ZlCSRhMCwkYTAJCS8qIGZ0eCAqLwotCWxpCSR2MCxfX05SX2Z1dGV4Ci0Jc3lzY2FsbAotCS5zZXQgbm9yZW9yZGVyCi0JYm5legkkYTMsIDFmCQkvKiBDaGVjayBmb3IgZXJyb3IgKi8KLSAgICAgICAgIG5lZwkkdjAJCS8qIE5lZ2F0ZSBlcnJvciBudW1iZXIgaWYgaXQncyB2YWxpZCAqLwotCW1vdmUJJHYwLCQwCQkvKiBPdGhlcndpc2UgcmV0dXJuIDAgKi8KLTE6Ci0JLnNldCByZW9yZGVyCi0JYWRkdQkkc3AsNCo2Ci0JagkkcmEKLQkuZW5kCV9fZnV0ZXhfc3lzY2FsbDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9tZW1jbXAxNi5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL21lbWNtcDE2LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYjI1NDQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL21lbWNtcDE2LlMKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0JLnRleHQKLQotLyoKLSAqIHU0IF9fbWVtY21wMTYoY29uc3QgdTIqIHMwLCBjb25zdCB1MiogczEsIHNpemVfdCBjb3VudCk7Ci0gKi8KLQkudHlwZQlfX21lbWNtcDE2LCBAZnVuY3Rpb24KLQkuZ2xvYmFsCV9fbWVtY21wMTYKLQkuYWxpZ24JNAotCS5lbnQgX19tZW1jbXAxNgotX19tZW1jbXAxNjoKLQlsaQkkdDAsMAotCWxpCSR0MSwwCi0JYmVxegkkYTIsZG9uZQkJLyogMCBsZW5ndGggc3RyaW5nICovIAotCWJlcQkkYTAsJGExLGRvbmUJCS8qIHN0cmluZ3MgYXJlIGlkZW50aWNhbCAqLwotCi0JLyogVW5vcHRpbWlzZWQuLi4gKi8KLTE6CWxodQkkdDAsMCgkYTApCi0JbGh1CSR0MSwwKCRhMSkKLQlhZGR1CSRhMSwyCi0JYm5lCSR0MCwkdDEsZG9uZQotCWFkZHUJJGEwLDIKLQlzdWJ1CSRhMiwxCi0JYm5legkkYTIsMWIKLQotZG9uZToKLQlzdWJ1CSR2MCwkdDAsJHQxCi0JagkkcmEKLSAgICAgICAgLmVuZCBfX21lbWNtcDE2CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvbWVtbW92ZS5jIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL21lbW1vdmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY0NTIyYi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvbWVtbW92ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLQotdm9pZCAqbWVtbW92ZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCi17Ci0gIGNvbnN0IGNoYXIgKnAgPSBzcmM7Ci0gIGNoYXIgKnEgPSBkc3Q7Ci0gIC8qIFdlIGNhbiB1c2UgdGhlIG9wdGltaXplZCBtZW1jcHkgaWYgdGhlIGRlc3RpbmF0aW9uIGlzIGNvbXBsZXRlbHkgYmVsb3cgdGhlCi0gICAqIHNvdXJjZSAoaS5lLiBxICsgbiA8PSBwKSwgb3IgaWYgaXQgaXMgY29tcGxldGVseSBvdmVyIGl0IChpLmUuIHEgPj0gcCtuKS4KLSAgICovCi0gIGlmIChfX2J1aWx0aW5fZXhwZWN0KChxICsgbiA8IHApIHx8IChxID49IHAgKyBuKSwgMSkpIHsKLSAgICByZXR1cm4gbWVtY3B5KGRzdCwgc3JjLCBuKTsKLSAgfSBlbHNlIHsKLSAgICBiY29weShzcmMsIGRzdCwgbik7Ci0gICAgcmV0dXJuIGRzdDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL3NldGptcC5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL3NldGptcC5TCmluZGV4IDdjMjExOTUuLjMxNzg2YmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9zZXRqbXAuUworKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc2V0am1wLlMKQEAgLTI5LDcgKzI5LDcgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9yZWdudW0uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NpZ25hbC5oPgogCkBAIC00NSwxNyArNDUsNiBAQAogR1BPRkY9IEZSQU1FU1otMipSRUdTWgogUkFPRkY9IEZSQU1FU1otMSpSRUdTWgogCi0jZGVmaW5lIEZQUkVHNjRfUyhGUFIsIE9GRiwgQkFTRSkgICAgICAgXAotICAgICAgICBzd2MxICAgIEZQUiwgT0ZGKEJBU0UpICA7ICAgICAgIFwKLSAgICAgICAgbWZoYzEgICB0MCwgRlBSICAgICAgICAgOyAgICAgICBcCi0gICAgICAgIHN3ICAgICAgdDAsIE9GRis0KEJBU0UpIDsKLSAgICAgICAgCi0jZGVmaW5lIEZQUkVHNjRfTChGUFIsIE9GRiwgQkFTRSkgICAgICAgXAotICAgICAgICBsdyAgICAgIHQwLCBPRkYrNChCQVNFKSA7ICAgICAgIFwKLSAgICAgICAgbHcgICAgICB0MSwgT0ZGKEJBU0UpICAgOyAgICAgICBcCi0gICAgICAgIG10YzEgICAgdDEsIEZQUiAgICAgICAgIDsgICAgICAgXAotICAgICAgICBtdGhjMSAgIHQwLCBGUFIgICAgICAgICA7ICAgICAgIFwKLSAgICAgICAgCiBOT05fTEVBRihzZXRqbXAsIEZSQU1FU1osIHJhKQogCS5tYXNrCTB4ODAwMDAwMDAsIFJBT0ZGCiAJUFRSX1NVQlUgc3AsIEZSQU1FU1oJCQkjIGFsbG9jYXRlIHN0YWNrIGZyYW1lCkBAIC05OCwzMiArODcsMTkgQEAKIAlsaQl2MCwgMQkJCQkjIGJlIG5pY2UgaWYgd2UgY291bGQgdGVsbAogCVJFR19TCXYwLCBTQ19GUFVTRUQoYTApCQkjIHNjX2ZwdXNlZCA9IDEKIAljZmMxCXYwLCAkMzEKKwlzLmQJJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKShhMCkKICNpZiBfTUlQU19GUFNFVCA9PSAzMgotICAgICAgICBGUFJFRzY0X1MoJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X1MoJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X1MoJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X1MoJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X1MoJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X1MoJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X1MoJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X1MoJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X1MoJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X1MoJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X1MoJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCksIGEwKQotICAgICAgICBGUFJFRzY0X1MoJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCksIGEwKQotI2Vsc2UKLSAgICAgICAgc3djMSAgICAkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgc3djMSAgICAkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgc3djMSAgICAkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgc3djMSAgICAkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgc3djMSAgICAkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgc3djMSAgICAkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgc3djMSAgICAkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgc3djMSAgICAkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgc3djMSAgICAkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgc3djMSAgICAkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgc3djMSAgICAkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKShhMCkKLSAgICAgICAgc3djMSAgICAkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKShhMCkKICNlbmRpZgogCVJFR19TCXYwLCBTQ19GUFJFR1MrKChGU1ItRjApKlJFR1NaKShhMCkKICNlbmRpZiAvKiAhU09GVEZMT0FUICovCkBAIC0xNTQsNyArMTMwLDcgQEAKIAlsdwlhMCwgQTBPRkYoc3ApCiAJbHcJYTEsIEExT0ZGKHNwKQogCi0JLnNldAlub3Jlb3JkZXIJCisJLnNldAlub3Jlb3JkZXIKIAlSRUdfTAl2MCwgU0NfUkVHUytaRVJPKlJFR1NaKGEwKQogCWJuZQl2MCwgMHhBQ0VEQkFERSwgYm90Y2gJCSMganVtcCBpZiBlcnJvcgogCVJFR19MCXJhLCBTQ19QQyhhMCkKQEAgLTE2OSwzNiArMTQ1LDIzIEBACiAJUkVHX0wJczgsIFNDX1JFR1MrUzgqUkVHU1ooYTApCiAJUkVHX0wJZ3AsIFNDX1JFR1MrR1AqUkVHU1ooYTApCiAJUkVHX0wJc3AsIFNDX1JFR1MrU1AqUkVHU1ooYTApCi0JCisKICNpZiAhZGVmaW5lZChTT0ZURkxPQVQpCi0JUkVHX0wJdjAsIFNDX0ZQUkVHUysoKEZTUi1GMCkqUkVHU1opKGEwKQkKKwlSRUdfTAl2MCwgU0NfRlBSRUdTKygoRlNSLUYwKSpSRUdTWikoYTApCiAJY3RjMQl2MCwgJDMxCisJbC5kCSRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCiAjaWYgX01JUFNfRlBTRVQgPT0gMzIKLSAgICAgICAgRlBSRUc2NF9MKCRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApLCBhMCkKLSAgICAgICAgRlBSRUc2NF9MKCRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApLCBhMCkKLSNlbHNlCi0gICAgICAgIGx3YzEgICAgJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCi0gICAgICAgIGx3YzEgICAgJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCiAjZW5kaWYKICNlbmRpZiAvKiAhU09GVEZMT0FUICovCiAJYm5lCWExLCB6ZXJvLCAxZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL3NpZ3NldGptcC5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL3NpZ3NldGptcC5TCmluZGV4IGIwNTQ1NGMuLjlkMmU1ZWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9zaWdzZXRqbXAuUworKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc2lnc2V0am1wLlMKQEAgLTMxLDcgKzMxLDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvcmVnbnVtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL3N5c2NhbGwuUyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9zeXNjYWxsLlMKaW5kZXggYWY1YmNjOS4uNWZlZDBhYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL3N5c2NhbGwuUworKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc3lzY2FsbC5TCkBAIC0yNiwxMSArMjYsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzeXNjYWxsCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHN5c2NhbGwKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogLyoKICAqIFRoZSBjYWxsZXIgaXMgb25seSByZXF1aXJlZCB0byBhbGxvY2F0ZSAxNiBieXRlcyBvZiBzdGFjayBmb3IgYTAtYTMuCkBAIC0zOCwyOCArMzQsMjggQEAKICAqLwogI2RlZmluZSBTVEFDS1NJWkUgMio0CiAKLXN5c2NhbGw6CitFTlRSWShzeXNjYWxsKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBtb3ZlICAgICR2MCwgJGEwCi0gICAgbW92ZSAgICAkYTAsICRhMQotICAgIG1vdmUgICAgJGExLCAkYTIKLSAgICBtb3ZlICAgICRhMiwgJGEzCi0gICAgbHcgICAgICAkYTMsIDE2KCRzcCkKLSAgICBsdyAgICAgICR0MCwgMjAoJHNwKQotICAgIGx3ICAgICAgJHQxLCAyNCgkc3ApCi0gICAgc3VidSAgICAkc3AsIFNUQUNLU0laRQotICAgIHN3ICAgICAgJHQwLCAxNigkc3ApCi0gICAgc3cgICAgICAkdDEsIDIwKCRzcCkKKyAgICAuY3Bsb2FkIHQ5CisgICAgbW92ZSAgICB2MCwgYTAKKyAgICBtb3ZlICAgIGEwLCBhMQorICAgIG1vdmUgICAgYTEsIGEyCisgICAgbW92ZSAgICBhMiwgYTMKKyAgICBsdyAgICAgIGEzLCAxNihzcCkKKyAgICBsdyAgICAgIHQwLCAyMChzcCkKKyAgICBsdyAgICAgIHQxLCAyNChzcCkKKyAgICBzdWJ1ICAgIHNwLCBTVEFDS1NJWkUKKyAgICBzdyAgICAgIHQwLCAxNihzcCkKKyAgICBzdyAgICAgIHQxLCAyMChzcCkKICAgICBzeXNjYWxsCi0gICAgYWRkdSAgICAkc3AsIFNUQUNLU0laRQotICAgIGJuZXogICAgJGEzLCAxZgotICAgIG1vdmUgICAgJGEwLCAkdjAKLSAgICBqICAgICAgICRyYQorICAgIGFkZHUgICAgc3AsIFNUQUNLU0laRQorICAgIGJuZXogICAgYTMsIDFmCisgICAgbW92ZSAgICBhMCwgdjAKKyAgICBqICAgICAgIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICAgICAgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAgICAgICAkdDkKKyAgICBsYSAgICAgIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiAgICAgICB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc3lzY2FsbAorRU5EKHN5c2NhbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvdmZvcmsuUyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy92Zm9yay5TCmluZGV4IDQxNGNhYWYuLjE4NDk2MjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy92Zm9yay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy92Zm9yay5TCkBAIC0yNiwzOSArMjYsMzMgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLy8gVE9ETzogbWlwcycgdWFwaSBzaWduYWwuaCBpcyBtaXNzaW5nICNpZm5kZWYgX19BU1NFTUJMWV9fLgogLy8gI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KICNkZWZpbmUgU0lHQ0hMRCAxOAogCi0JLnRleHQKLQotCS50eXBlCXZmb3JrLCBAZnVuY3Rpb24KLQkuZ2xvYmFsCXZmb3JrCi0JLmFsaWduCTQKLQkuZW50CXZmb3JrCi12Zm9yazoKK0VOVFJZKHZmb3JrKQogCS5zZXQJbm9yZW9yZGVyCi0JLmNwbG9hZAkkdDkKKwkuY3Bsb2FkCXQ5CiAKLQlsaQkkYTAsIChDTE9ORV9WTSB8IENMT05FX1ZGT1JLIHwgU0lHQ0hMRCkKLQlsaQkkYTEsIDAKLQlsaQkkYTIsIDAKLQlsaQkkYTMsIDAKLQlzdWJ1CSRzcCwgOAotCXN3CSQwLCAxNigkc3ApCi0JbGkJJHYwLCBfX05SX2Nsb25lCisJbGkJYTAsIChDTE9ORV9WTSB8IENMT05FX1ZGT1JLIHwgU0lHQ0hMRCkKKwlsaQlhMSwgMAorCWxpCWEyLCAwCisJbGkJYTMsIDAKKwlzdWJ1CXNwLCA4CisJc3cJJDAsIDE2KHNwKQorCWxpCXYwLCBfX05SX2Nsb25lCiAJc3lzY2FsbAotCWFkZHUJJHNwLCA4Ci0JYm5legkkYTMsIDFmCi0JIG1vdmUJJGEwLCAkdjAKKwlhZGR1CXNwLCA4CisJYm5leglhMywgMWYKKwkgbW92ZQlhMCwgdjAKIAotCWoJJHJhCisJaglyYQogCSBub3AKIDE6Ci0JbGEJJHQ5LCBfX3NldF9lcnJubwotCWoJJHQ5CisJbGEJdDksIF9fc2V0X2Vycm5vX2ludGVybmFsCisJagl0OQogCSBub3AKLQkuZW5kCXZmb3JrCitFTkQodmZvcmspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmggYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1Zjc5ZWYuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBfdHlwZXMuaCx2IDEuNSAyMDA4LzA3LzIxIDIwOjUwOjU0IG1hcnR5bmFzIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKXR5cGVzLmgJOC4zIChCZXJrZWxleSkgMS81Lzk0Ci0gKglAKCMpYW5zaS5oCTguMiAoQmVya2VsZXkpIDEvNC85NAotICovCi0KLSNpZm5kZWYgX01JUFM2NF9fVFlQRVNfSF8KLSNkZWZpbmUgX01JUFM2NF9fVFlQRVNfSF8KLQotLyoKLSAqICBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgdmFyaW91cyBJU0EgbGV2ZWxzIGZvciBzaXplcy4KLSAqLwotI2RlZmluZQlfTUlQU19JU0FfTUlQUzEJMQkvKiBSMjAwMC9SMzAwMCAqLwotI2RlZmluZQlfTUlQU19JU0FfTUlQUzIJMgkvKiBSNDAwMC9SNjAwMCAqLwotI2RlZmluZQlfTUlQU19JU0FfTUlQUzMJMwkvKiBSNDAwMCAqLwotI2RlZmluZQlfTUlQU19JU0FfTUlQUzQJNAkvKiBURlAgKFIxeDAwMCkgKi8KLQotLyogNy4xOC4xLjEgRXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX3NpZ25lZCBjaGFyCQlfX2ludDhfdDsKLXR5cGVkZWYJdW5zaWduZWQgY2hhcgkJX191aW50OF90OwotdHlwZWRlZglzaG9ydAkJCV9faW50MTZfdDsKLXR5cGVkZWYJdW5zaWduZWQgc2hvcnQJCV9fdWludDE2X3Q7Ci10eXBlZGVmCWludAkJCV9faW50MzJfdDsKLXR5cGVkZWYJdW5zaWduZWQgaW50CQlfX3VpbnQzMl90OwotLyogTE9OR0xPTkcgKi8KLXR5cGVkZWYJbG9uZyBsb25nCQlfX2ludDY0X3Q7Ci0vKiBMT05HTE9ORyAqLwotdHlwZWRlZgl1bnNpZ25lZCBsb25nIGxvbmcJX191aW50NjRfdDsKLQotLyogNy4xOC4xLjIgTWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9faW50OF90CQlfX2ludF9sZWFzdDhfdDsKLXR5cGVkZWYJX191aW50OF90CQlfX3VpbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmCV9faW50MTZfdAkJX19pbnRfbGVhc3QxNl90OwotdHlwZWRlZglfX3VpbnQxNl90CQlfX3VpbnRfbGVhc3QxNl90OwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2xlYXN0MzJfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2xlYXN0MzJfdDsKLXR5cGVkZWYJX19pbnQ2NF90CQlfX2ludF9sZWFzdDY0X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludF9sZWFzdDY0X3Q7Ci0KLS8qIDcuMTguMS4zIEZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDhfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3Q4X3Q7Ci10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDE2X3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0MTZfdDsKLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0MzJfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3QzMl90OwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50X2Zhc3Q2NF90OwotdHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRfZmFzdDY0X3Q7Ci0KLS8qIDcuMTguMS40IEludGVnZXIgdHlwZXMgY2FwYWJsZSBvZiBob2xkaW5nIG9iamVjdCBwb2ludGVycyAqLwotdHlwZWRlZglsb25nCQkJX19pbnRwdHJfdDsKLXR5cGVkZWYJdW5zaWduZWQgbG9uZwkJX191aW50cHRyX3Q7Ci0KLS8qIDcuMTguMS41IEdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQ2NF90CQlfX2ludG1heF90OwotdHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRtYXhfdDsKLQotLyogUmVnaXN0ZXIgc2l6ZSAqLwotI2lmIChfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMzIHx8IF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzQpCi10eXBlZGVmIF9faW50NjRfdAkJX19yZWdpc3Rlcl90OwotdHlwZWRlZiBfX2ludDY0X3QJCWZfcmVnaXN0ZXJfdDsJLyogWFhYICovCi0jZWxzZQotdHlwZWRlZiBfX2ludDMyX3QJCV9fcmVnaXN0ZXJfdDsKLXR5cGVkZWYgX19pbnQzMl90CQlmX3JlZ2lzdGVyX3Q7CS8qIFhYWCAqLwotI2VuZGlmCi0KLS8qIFZNIHN5c3RlbSB0eXBlcyAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3ZhZGRyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fcGFkZHJfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJX192c2l6ZV90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3BzaXplX3Q7Ci0KLS8qIFN0YW5kYXJkIHN5c3RlbSB0eXBlcyAqLwotdHlwZWRlZiBpbnQJCQlfX2Nsb2NrX3Q7Ci10eXBlZGVmIGludAkJCV9fY2xvY2tpZF90OwotdHlwZWRlZiBkb3VibGUJCQlfX2RvdWJsZV90OwotdHlwZWRlZiBmbG9hdAkJCV9fZmxvYXRfdDsKLXR5cGVkZWYgbG9uZyBsb25nCQlfX29mZl90OwotdHlwZWRlZiBsb25nCQkJX19wdHJkaWZmX3Q7Ci10eXBlZGVmCWludAkJCV9fdGltZV90OwotdHlwZWRlZiBpbnQJCQlfX3RpbWVyX3Q7Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwotdHlwZWRlZglfX2J1aWx0aW5fdmFfbGlzdAlfX3ZhX2xpc3Q7Ci0jZWxzZQotdHlwZWRlZgljaGFyICoJCQlfX3ZhX2xpc3Q7Ci0jZW5kaWYKLQotLyogV2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCB0eXBlcyAqLwotI2lmbmRlZiBfX2NwbHVzcGx1cwotdHlwZWRlZglpbnQJCQlfX3djaGFyX3Q7Ci0jZW5kaWYKLXR5cGVkZWYgaW50CQkJX193aW50X3Q7Ci10eXBlZGVmCWludAkJCV9fcnVuZV90OwotdHlwZWRlZgl2b2lkICoJCQlfX3djdHJhbnNfdDsKLXR5cGVkZWYJdm9pZCAqCQkJX193Y3R5cGVfdDsKLQotI2lmIGRlZmluZWQoX0tFUk5FTCkKLXR5cGVkZWYgc3RydWN0IGxhYmVsX3QgewotCV9fcmVnaXN0ZXJfdCB2YWxbMTRdOwotfSBsYWJlbF90OwotI2VuZGlmCi0KLS8qIFhYWCBjaGVjayB3aHkgdGhpcyBzdGlsbCBoYXMgdG8gYmUgZGVmaW5lZC4gcG1hcC5jIGlzc3VlPyAqLwotI2RlZmluZSBfX1NXQVBfQlJPS0VOCi0KLS8qIEZlYXR1cmUgdGVzdCBtYWNyb3MgKi8KLSNkZWZpbmUgX19IQVZFX1RJTUVDT1VOVEVSCi0KLSNlbmRpZgkvKiBfTUlQUzY0X19UWVBFU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2FzbS5oIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCmluZGV4IDQzZGJjMDkuLjVlYWNkZTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9hc20uaAorKysgYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvYXNtLmgKQEAgLTI4LDI1ICsyOCwyNCBAQAogI2lmbmRlZiBfTUlQUzY0X0FTTV9ICiAjZGVmaW5lIF9NSVBTNjRfQVNNX0gKIAotI2luY2x1ZGUgPG1hY2hpbmUvcmVnZGVmLmg+Ci0KLSNpZmRlZiBORUVEX09MRF9STTdLRklYCi0jZGVmaW5lIElUTEJOT1BGSVggICAgICBub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7Ci0jZWxzZQotI2RlZmluZSBJVExCTk9QRklYICAgICAgbm9wO25vcDtub3A7bm9wCisjaWZuZGVmIF9BTElHTl9URVhUCisjIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gNAogI2VuZGlmCiAKKyN1bmRlZiBfX2Jpb25pY19hc21fY3VzdG9tX2VudHJ5CisjdW5kZWYgX19iaW9uaWNfYXNtX2N1c3RvbV9lbmQKKyNkZWZpbmUgX19iaW9uaWNfYXNtX2N1c3RvbV9lbnRyeShmKSAuZW50IGYKKyNkZWZpbmUgX19iaW9uaWNfYXNtX2N1c3RvbV9lbmQoZikgLmVuZCBmCisKKyNpbmNsdWRlIDxtYWNoaW5lL3JlZ2RlZi5oPgorCiAjZGVmaW5lCV9NSVBTX0lTQV9NSVBTMQkxCS8qIFIyMDAwL1IzMDAwICovCiAjZGVmaW5lCV9NSVBTX0lTQV9NSVBTMgkyCS8qIFI0MDAwL1I2MDAwICovCiAjZGVmaW5lCV9NSVBTX0lTQV9NSVBTMwkzCS8qIFI0MDAwICovCiAjZGVmaW5lCV9NSVBTX0lTQV9NSVBTNAk0CS8qIFRGUCAoUjF4MDAwKSAqLwotI2lmZGVmIF9fbGludXhfXwogI2RlZmluZQlfTUlQU19JU0FfTUlQUzUgNQogI2RlZmluZQlfTUlQU19JU0FfTUlQUzMyIDYKICNkZWZpbmUJX01JUFNfSVNBX01JUFM2NCA3Ci0jZWxzZQotI2RlZmluZQlfTUlQU19JU0FfTUlQUzMyIDMyCS8qIE1JUFMzMiAqLwotI2VuZGlmCiAKICNpZiAhZGVmaW5lZChBQklDQUxMUykgJiYgIWRlZmluZWQoX05PX0FCSUNBTExTKQogI2RlZmluZQlBQklDQUxMUwkuYWJpY2FsbHMKQEAgLTU2LDggKzU1LDYgQEAKIAlBQklDQUxMUwogI2VuZGlmCiAKLSNkZWZpbmUgX0NfTEFCRUwoeCkgeAkJLyogWFhYIE9ic29sZXRlIGJ1dCBrZWVwIGZvciBhIHdoaWxlICovCi0KICNpZiAhZGVmaW5lZChfX01JUFNFTF9fKSAmJiAhZGVmaW5lZChfX01JUFNFQl9fKQogI2Vycm9yICJfX01JUFNFTF9fIG9yIF9fTUlQU0VCX18gbXVzdCBiZSBkZWZpbmVkIgogI2VuZGlmCkBAIC05MCwxNSArODcsNiBAQAogICovCiAjaWYgZGVmaW5lZChBQklDQUxMUykgJiYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCiAKLSNpZm5kZWYgX01JUFNfU0lNCi0jZGVmaW5lIF9NSVBTX1NJTSAxCi0jZGVmaW5lIF9BQklPMzIJMQotI2VuZGlmCi0jaWZuZGVmIF9NSVBTX0lTQQotI2RlZmluZSBfTUlQU19JU0EgMgotI2RlZmluZSBfTUlQU19JU0FfTUlQUzIgMgotI2VuZGlmCi0KICNpZiAoX01JUFNfU0lNID09IF9BQklPMzIpIHx8IChfTUlQU19TSU0gPT0gX0FCSTMyKQogI2RlZmluZSBOQVJHU0FWRQk0CiAKQEAgLTE1MSw3ICsxMzksNyBAQAogI2RlZmluZQlDRl9SQV9PRkZTCTIwCS8qIENhbGwgcmEgc2F2ZSBvZmZzZXQgKi8KICNlbmRpZgogCi0jaWYgKF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzMgfHwgX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTNCkKKyNpZiAoX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTMyB8fCBfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFM0IHx8IF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzY0KQogI2RlZmluZSBSRUdTWgkJOAkvKiA2NCBiaXQgbW9kZSByZWdpc3RlciBzaXplICovCiAjZGVmaW5lIExPR1JFR1NaCTMJLyogbG9nIHJzaXplICovCiAjZGVmaW5lCVJFR19TCXNkCkBAIC0xOTAsMjggKzE3OCw2IEBACiAjZW5kaWYKIAogLyoKLSAqIERlZmluZSAtcGcgcHJvZmlsZSBlbnRyeSBjb2RlLgotICovCi0jaWYgZGVmaW5lZChYR1BST0YpIHx8IGRlZmluZWQoWFBST0YpCi0jZGVmaW5lCU1DT1VOVAkJCVwKLQlQVFJfU1VCVSBzcCwgc3AsIDMyOwlcCi0JU0FWRV9HUCgxNik7CQlcCi0Jc3cJcmEsIDI4KHNwKTsJXAotCXN3CWdwLCAyNChzcCk7CVwKLQkuc2V0CW5vYXQ7CQlcCi0JLnNldAlub3Jlb3JkZXI7CVwKLQltb3ZlCUFULCByYTsJCVwKLQlqYWwJX21jb3VudDsJXAotCVBUUl9TVUJVIHNwLCBzcCwgODsJXAotCWx3CXJhLCAyOChzcCk7CVwKLQlQVFJfQUREVSBzcCwgc3AsIDMyOwlcCi0JLnNldCByZW9yZGVyOwkJXAotCS5zZXQJYXQ7Ci0jZWxzZQotI2RlZmluZQlNQ09VTlQKLSNlbmRpZgotCi0vKgogICogTEVBRih4LCBmc2l6ZSkKICAqCiAgKglEZWNsYXJlIGEgbGVhZiByb3V0aW5lLgpAQCAtMjIxLDI2ICsxODcsOSBAQAogCS5nbG9ibCB4OwkJXAogCS5lbnQgeCwgMDsJCVwKIHg6IDsJCQkJXAorCS5jZmlfc3RhcnRwcm9jOyBcCiAJLmZyYW1lIHNwLCBmc2l6ZSwgcmE7CVwKIAlTRVRVUF9HUAkJXAotCU1DT1VOVAotCi0jZGVmaW5lCUFMRUFGKHgpCQlcCi0JLmdsb2JsCXg7CQlcCi14OgotCi0vKgotICogTkxFQUYoeCkKLSAqCi0gKglEZWNsYXJlIGEgbm9uLXByb2ZpbGVkIGxlYWYgcm91dGluZS4KLSAqLwotI2RlZmluZSBOTEVBRih4LCBmc2l6ZSkJCVwKLQkuYWxpZ24JMzsJCVwKLQkuZ2xvYmwgeDsJCVwKLQkuZW50IHgsIDA7CQlcCi14OiA7CQkJCVwKLQkuZnJhbWUgc3AsIGZzaXplLCByYTsJXAotCVNFVFVQX0dQCiAKIC8qCiAgKiBOT05fTEVBRih4KQpAQCAtMjUyLDU0ICsyMDEsOCBAQAogCS5nbG9ibCB4OwkJXAogCS5lbnQgeCwgMDsJCVwKIHg6IDsJCQkJXAorCS5jZmlfc3RhcnRwcm9jOyBcCiAJLmZyYW1lIHNwLCBmc2l6ZSwgcmV0cGM7IFwKIAlTRVRVUF9HUAkJXAotCU1DT1VOVAotCi0vKgotICogTk5PTl9MRUFGKHgpCi0gKgotICoJRGVjbGFyZSBhIG5vbi1wcm9maWxlZCBub24tbGVhZiByb3V0aW5lCi0gKgkoYSByb3V0aW5lIHRoYXQgbWFrZXMgb3RoZXIgQyBjYWxscykuCi0gKi8KLSNkZWZpbmUgTk5PTl9MRUFGKHgsIGZzaXplLCByZXRwYykgXAotCS5hbGlnbgkzOwkJXAotCS5nbG9ibCB4OwkJXAotCS5lbnQgeCwgMDsJCVwKLXg6IDsJCQkJXAotCS5mcmFtZSBzcCwgZnNpemUsIHJldHBjCVwKLQlTRVRVUF9HUAotCi0vKgotICogRU5EKHgpCi0gKgotICoJTWFyayBlbmQgb2YgYSBwcm9jZWR1cmUuCi0gKi8KLSNkZWZpbmUgRU5EKHgpIFwKLQkuZW5kIHgKLQotLyoKLSAqIE1hY3JvcyB0byBwYW5pYyBhbmQgcHJpbnRmIGZyb20gYXNzZW1ibHkgbGFuZ3VhZ2UuCi0gKi8KLSNkZWZpbmUgUEFOSUMobXNnKSBcCi0JTEEJYTAsIDlmOyBcCi0JamFsCXBhbmljOwlcCi0Jbm9wCTsJXAotCU1TRyhtc2cpCi0KLSNkZWZpbmUJUFJJTlRGKG1zZykgXAotCWxhCWEwLCA5ZjsgXAotCWphbAlwcmludGY7IFwKLQlub3AJOwlcCi0JTVNHKG1zZykKLQotI2RlZmluZQlNU0cobXNnKSBcCi0JLnJkYXRhOyBcCi05OgkuYXNjaWl6CW1zZzsgXAotCS50ZXh0Ci0KLSNkZWZpbmUgQVNNU1RSKHN0cikgXAotCS5hc2NpaXogc3RyOyBcCi0JLmFsaWduCTMKIAogI2VuZGlmIC8qICFfTUlQU19BU01fSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2llZWUuaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9pZWVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMGE3N2IuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2llZWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgkkT3BlbkJTRDogaWVlZS5oLHYgMS40IDIwMTAvMDEvMjMgMTk6MTE6MjEgbWlvZCBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgdGhlIENvbXB1dGVyIFN5c3RlbXMgRW5naW5lZXJpbmcgZ3JvdXAKLSAqIGF0IExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgdW5kZXIgREFSUEEgY29udHJhY3QgQkcgOTEtNjYgYW5kCi0gKiBjb250cmlidXRlZCB0byBCZXJrZWxleS4KLSAqCi0gKiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAqCUNhbGlmb3JuaWEsIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIylpZWVlLmgJOC4xIChCZXJrZWxleSkgNi8xMS85MwotICovCi0KLS8qCi0gKiBpZWVlLmggZGVmaW5lcyB0aGUgbWFjaGluZS1kZXBlbmRlbnQgbGF5b3V0IG9mIHRoZSBtYWNoaW5lJ3MgSUVFRQotICogZmxvYXRpbmcgcG9pbnQuICBJdCBkb2VzICpub3QqIGRlZmluZSAoeWV0PykgYW55IG9mIHRoZSByb3VuZGluZwotICogbW9kZSBiaXRzLCBleGNlcHRpb25zLCBhbmQgc28gZm9ydGguCi0gKi8KLQotLyoKLSAqIERlZmluZSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBmcmFjdGlvbiBhbmQgZXhwb25lbnQuCi0gKgotICoJCSAgICAgawkgICAgICAgICBrKzEKLSAqIE5vdGUgdGhhdCAgMS4wIHggMiAgPT0gMC4xIHggMiAgICAgIGFuZCB0aGF0IGRlbm9ybXMgYXJlIHJlcHJlc2VudGVkCi0gKgotICoJCQkJCSAgKC1leHBfYmlhcysxKQotICogYXMgZnJhY3Rpb25zIHRoYXQgbG9vayBsaWtlIDAuZmZmZmYgeCAyICAgICAgICAgICAgIC4gIFRoaXMgbWVhbnMgdGhhdAotICoKLSAqCQkJIC0xMjYKLSAqIHRoZSBudW1iZXIgMC4xMDAwMCB4IDIgICAgLCBmb3IgaW5zdGFuY2UsIGlzIHRoZSBzYW1lIGFzIHRoZSBub3JtYWxpemVkCi0gKgotICoJCS0xMjcJCQkgICAtMTI4Ci0gKiBmbG9hdCAxLjAgeCAyICAgIC4gIFRodXMsIHRvIHJlcHJlc2VudCAyICAgICwgd2UgbmVlZCBvbmUgbGVhZGluZyB6ZXJvCi0gKgotICoJCQkJICAtMTI5Ci0gKiBpbiB0aGUgZnJhY3Rpb247IHRvIHJlcHJlc2VudCAyICAgICwgd2UgbmVlZCB0d28sIGFuZCBzbyBvbi4gIFRoaXMKLSAqCi0gKgkJCQkJCSAgICAgKC1leHBfYmlhcy1mcmFjYml0cysxKQotICogaW1wbGllcyB0aGF0IHRoZSBzbWFsbGVzdCBkZW5vcm1hbGl6ZWQgbnVtYmVyIGlzIDIKLSAqCi0gKiBmb3Igd2hpY2hldmVyIGZvcm1hdCB3ZSBhcmUgdGFsa2luZyBhYm91dDogZm9yIHNpbmdsZSBwcmVjaXNpb24sIGZvcgotICoKLSAqCQkJCQkJLTEyNgkJLTE0OQotICogaW5zdGFuY2UsIHdlIGdldCAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgeCAyICAgICwgb3IgMS4wIHggMiAgICAsIGFuZAotICoKLSAqIC0xNDkgPT0gLTEyNyAtIDIzICsgMS4KLSAqLwotI2RlZmluZQlTTkdfRVhQQklUUwk4Ci0jZGVmaW5lCVNOR19GUkFDQklUUwkyMwotCi0jZGVmaW5lCURCTF9FWFBCSVRTCTExCi0jZGVmaW5lCURCTF9GUkFDSEJJVFMJMjAKLSNkZWZpbmUJREJMX0ZSQUNMQklUUwkzMgotI2RlZmluZQlEQkxfRlJBQ0JJVFMJNTIKLQotI2RlZmluZQlFWFRfRVhQQklUUwkxNQotI2RlZmluZQlFWFRfRlJBQ0hCSVRTCTE2Ci0jZGVmaW5lCUVYVF9GUkFDSE1CSVRTCTMyCi0jZGVmaW5lCUVYVF9GUkFDTE1CSVRTCTMyCi0jZGVmaW5lCUVYVF9GUkFDTEJJVFMJMzIKLSNkZWZpbmUJRVhUX0ZSQUNCSVRTCTExMgotCi0jZGVmaW5lCUVYVF9JTVBMSUNJVF9OQklUCi0KLSNkZWZpbmUJRVhUX1RPX0FSUkFZMzIocCwgYSkgZG8gewkJXAotCShhKVswXSA9ICh1aW50MzJfdCkocCktPmV4dF9mcmFjbDsJXAotCShhKVsxXSA9ICh1aW50MzJfdCkocCktPmV4dF9mcmFjbG07CVwKLQkoYSlbMl0gPSAodWludDMyX3QpKHApLT5leHRfZnJhY2htOwlcCi0JKGEpWzNdID0gKHVpbnQzMl90KShwKS0+ZXh0X2ZyYWNoOwlcCi19IHdoaWxlKDApCi0KLXN0cnVjdCBpZWVlX3NpbmdsZSB7Ci0jaWZkZWYgX19NSVBTRUJfXwotCXVfaW50CXNuZ19zaWduOjE7Ci0JdV9pbnQJc25nX2V4cDo4OwotCXVfaW50CXNuZ19mcmFjOjIzOwotI2Vsc2UKLQl1X2ludAlzbmdfZnJhYzoyMzsKLQl1X2ludAlzbmdfZXhwOjg7Ci0JdV9pbnQJc25nX3NpZ246MTsKLSNlbmRpZgotfTsKLQotc3RydWN0IGllZWVfZG91YmxlIHsKLSNpZmRlZiBfX01JUFNFQl9fCi0JdV9pbnQJZGJsX3NpZ246MTsKLQl1X2ludAlkYmxfZXhwOjExOwotCXVfaW50CWRibF9mcmFjaDoyMDsKLQl1X2ludAlkYmxfZnJhY2w7Ci0jZWxzZQotCXVfaW50CWRibF9mcmFjbDsKLQl1X2ludAlkYmxfZnJhY2g6MjA7Ci0JdV9pbnQJZGJsX2V4cDoxMTsKLQl1X2ludAlkYmxfc2lnbjoxOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgaWVlZV9leHQgewotI2lmZGVmIF9fTUlQU0VCX18KLQl1X2ludAlleHRfc2lnbjoxOwotCXVfaW50CWV4dF9leHA6MTU7Ci0JdV9pbnQJZXh0X2ZyYWNoOjE2OwotCXVfaW50CWV4dF9mcmFjaG07Ci0JdV9pbnQJZXh0X2ZyYWNsbTsKLQl1X2ludAlleHRfZnJhY2w7Ci0jZWxzZQotCXVfaW50CWV4dF9mcmFjbDsKLQl1X2ludAlleHRfZnJhY2xtOwotCXVfaW50CWV4dF9mcmFjaG07Ci0JdV9pbnQJZXh0X2ZyYWNoOjE2OwotCXVfaW50CWV4dF9leHA6MTU7Ci0JdV9pbnQJZXh0X3NpZ246MTsKLSNlbmRpZgotfTsKLQotLyoKLSAqIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyBpbiBbMS4uSU5GTkFOKSAob2Ygd2hhdGV2ZXIgdHlwZSkgYXJlCi0gKiBgbm9ybWFsJy4gIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyBJTkZOQU4gYXJlIGVpdGhlciBJbmYgb3IgTmFOLgotICogRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIHplcm8gYXJlIGVpdGhlciB6ZXJvIChpZmYgYWxsIGZyYWN0aW9uCi0gKiBiaXRzIGFyZSB6ZXJvKSBvciBzdWJub3JtYWwgdmFsdWVzLgotICoKLSAqIEEgTmFOIGlzIGEgYHNpZ25hbGxpbmcgTmFOJyBpZiBpdHMgUVVJRVROQU4gYml0IGlzIGNsZWFyIGluIGl0cwotICogaGlnaCBmcmFjdGlvbjsgaWYgdGhlIGJpdCBpcyBzZXQsIGl0IGlzIGEgYHF1aWV0IE5hTicuCi0gKi8KLSNkZWZpbmUJU05HX0VYUF9JTkZOQU4JMjU1Ci0jZGVmaW5lCURCTF9FWFBfSU5GTkFOCTIwNDcKLSNkZWZpbmUJRVhUX0VYUF9JTkZOQU4JMzI3NjcKLQotI2lmIDAKLSNkZWZpbmUJU05HX1FVSUVUTkFOCSgxIDw8IDIyKQotI2RlZmluZQlEQkxfUVVJRVROQU4JKDEgPDwgMTkpCi0jZGVmaW5lCUVYVF9RVUlFVE5BTgkoMSA8PCAxNSkKLSNlbmRpZgotCi0vKgotICogRXhwb25lbnQgYmlhc2VzLgotICovCi0jZGVmaW5lCVNOR19FWFBfQklBUwkxMjcKLSNkZWZpbmUJREJMX0VYUF9CSUFTCTEwMjMKLSNkZWZpbmUJRVhUX0VYUF9CSUFTCTE2MzgzCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmggYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzOTQ0NGQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGxpbWl0cy5oLHYgMS41IDIwMDcvMDUvMDcgMjA6NTE6MDcga2V0dGVuaXMgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIylsaW1pdHMuaAk4LjMgKEJlcmtlbGV5KSAxLzQvOTQKLSAqLwotCi0jaWZuZGVmIF9NSVBTX0xJTUlUU19IXwotI2RlZmluZSBfTUlQU19MSU1JVFNfSF8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotCi0jZGVmaW5lCU1CX0xFTl9NQVgJNgkJLyogQWxsb3cgMzEgYml0IFVURjIgKi8KLQotI2lmbmRlZglTSVpFX01BWAotI2RlZmluZQlTSVpFX01BWAlVTE9OR19NQVgJLyogbWF4IHZhbHVlIGZvciBhIHNpemVfdCAqLwotI2VuZGlmCi0jZGVmaW5lCVNTSVpFX01BWAlMT05HX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc3NpemVfdCAqLwotCi0jaWYgX19CU0RfVklTSUJMRQotI2RlZmluZQlTSVpFX1RfTUFYCVVMT05HX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90IChoaXN0b3JpYykgKi8KLQotLyogUXVhZHMgYW5kIGxvbmdzIGFyZSB0aGUgc2FtZSBvbiBtaXBzNjQgKi8KLSNkZWZpbmUJVVFVQURfTUFYCShVTE9OR19NQVgpCS8qIG1heCB2YWx1ZSBmb3IgYSB1cXVhZF90ICovCi0jZGVmaW5lCVFVQURfTUFYCShMT05HX01BWCkJLyogbWF4IHZhbHVlIGZvciBhIHF1YWRfdCAqLwotI2RlZmluZQlRVUFEX01JTgkoTE9OR19NSU4pCS8qIG1pbiB2YWx1ZSBmb3IgYSBxdWFkX3QgKi8KLQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotCi0jZGVmaW5lIExPTkdMT05HX0JJVCAgICA2NAotI2RlZmluZSBMT05HTE9OR19NSU4gICAgKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwtMSkKLSNkZWZpbmUgTE9OR0xPTkdfTUFYICAgIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTAotI2RlZmluZSBVTE9OR0xPTkdfTUFYICAgMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwKLQotI2VuZGlmIC8qICFfTUlQU19MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9zaWduYWwuaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9zaWduYWwuaAppbmRleCA0ZWZiODU2Li5iMzE3MTVjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvc2lnbmFsLmgKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL3NpZ25hbC5oCkBAIC0zNywxMTEgKzM3LDE1IEBACiAjaWZuZGVmIF9NSVBTX1NJR05BTF9IXwogI2RlZmluZSBfTUlQU19TSUdOQUxfSF8KIAotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotCi0jaWYgIWRlZmluZWQoX19MQU5HVUFHRV9BU1NFTUJMWSkKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotLyoKLSAqIE1hY2hpbmUtZGVwZW5kZW50IHNpZ25hbCBkZWZpbml0aW9ucwotICovCi10eXBlZGVmIGludCBzaWdfYXRvbWljX3Q7Ci0KLSNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUgPj0gNDIwCi0KLS8qCi0gKiBJbmZvcm1hdGlvbiBwdXNoZWQgb24gc3RhY2sgd2hlbiBhIHNpZ25hbCBpcyBkZWxpdmVyZWQuCi0gKiBUaGlzIGlzIHVzZWQgYnkgdGhlIGtlcm5lbCB0byByZXN0b3JlIHN0YXRlIGZvbGxvd2luZwotICogZXhlY3V0aW9uIG9mIHRoZSBzaWduYWwgaGFuZGxlci4gIEl0IGlzIGFsc28gbWFkZSBhdmFpbGFibGUKLSAqIHRvIHRoZSBoYW5kbGVyIHRvIGFsbG93IGl0IHRvIHJlc3RvcmUgc3RhdGUgcHJvcGVybHkgaWYKLSAqIGEgbm9uLXN0YW5kYXJkIGV4aXQgaXMgcGVyZm9ybWVkLgotICovCi0KLSNpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKQotCi0vKgotICogVGhlIExpbnV4IGFuZCBPcGVuQlNEIHNpZ2NvbnRleHQgc3RydWN0dXJlcyBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50Ci0gKiBUaGlzIGlzIHRoZSBMaW51eCBPMzIgQUJJIGNvbXBhdGlibGUgc2lnY29udGV4dAotICovCi0KLXN0cnVjdCBzaWdjb250ZXh0IHsKLQl1bnNpZ25lZCBpbnQgc2NfcmVnbWFzazsKLQl1bnNpZ25lZCBpbnQgc2Nfc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBzY19wYzsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc2NfcmVnc1szMl07Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNjX2ZwcmVnc1szMl07Ci0JdW5zaWduZWQgaW50IHNjX2FjeDsKLQl1bnNpZ25lZCBpbnQgc2NfZnBjX2NzcjsKLQl1bnNpZ25lZCBpbnQgc2NfZnBjX2VpcjsKLQl1bnNpZ25lZCBpbnQgc2NfdXNlZF9tYXRoOwotCXVuc2lnbmVkIGludCBzY19kc3A7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNjX21kaGk7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNjX21kbG87Ci0JdW5zaWduZWQgbG9uZyBzY19oaTE7Ci0JdW5zaWduZWQgbG9uZyBzY19sbzE7Ci0JdW5zaWduZWQgbG9uZyBzY19oaTI7Ci0JdW5zaWduZWQgbG9uZyBzY19sbzI7Ci0JdW5zaWduZWQgbG9uZyBzY19oaTM7Ci0JdW5zaWduZWQgbG9uZyBzY19sbzM7Ci19OwotCi0jZWxzZQotCi1zdHJ1Y3QJc2lnY29udGV4dCB7Ci0JbG9uZwlzY19vbnN0YWNrOwkvKiBzaWdzdGFjayBzdGF0ZSB0byByZXN0b3JlICovCi0JbG9uZwkgc2NfbWFzazsJLyogc2lnbmFsIG1hc2sgdG8gcmVzdG9yZSAqLwotCV9fcmVnaXN0ZXJfdCBzY19wYzsJLyogcGMgYXQgdGltZSBvZiBzaWduYWwgKi8KLQlfX3JlZ2lzdGVyX3Qgc2NfcmVnc1szMl07IC8qIHByb2Nlc3NvciByZWdzIDAgdG8gMzEgKi8KLQlfX3JlZ2lzdGVyX3QgbXVsbG87CS8qIG11bGxvIGFuZCBtdWxoaSByZWdpc3RlcnMuLi4gKi8KLQlfX3JlZ2lzdGVyX3QgbXVsaGk7CS8qIG11bGxvIGFuZCBtdWxoaSByZWdpc3RlcnMuLi4gKi8KLQlmX3JlZ2lzdGVyX3Qgc2NfZnByZWdzWzMzXTsgLyogZnAgcmVncyAwIHRvIDMxIGFuZCBjc3IgKi8KLQlsb25nCXNjX2ZwdXNlZDsJLyogZnAgaGFzIGJlZW4gdXNlZCAqLwotCWxvbmcJc2NfZnBjX2VpcjsJLyogZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIGluc3RydWN0aW9uIHJlZyAqLwotCWxvbmcJeHh4WzhdOwkJLyogWFhYIHJlc2VydmVkICovCi19OwotI2VuZGlmCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFID49IDQyMCAqLwotCi0jZWxzZSAvKiBfX0xBTkdVQUdFX0FTU0VNQkxZICovCi0KLSNpZmRlZiBfX0FORFJPSURfXwotCiAjZGVmaW5lCVNDX1JFR01BU0sJKDAqUkVHU1opCiAjZGVmaW5lCVNDX1NUQVRVUwkoMSpSRUdTWikKICNkZWZpbmUJU0NfUEMJCSgyKlJFR1NaKQogI2RlZmluZQlTQ19SRUdTCQkoU0NfUEMrOCkKICNkZWZpbmUJU0NfRlBSRUdTCShTQ19SRUdTKzMyKjgpCiAjZGVmaW5lCVNDX0FDWAkJKFNDX0ZQUkVHUyszMipSRUdTWl9GUCkKLSNkZWZpbmUJU0NfRlBDX0NTUgkoU0NfQUNYKzEqUkVHU1opCi0jZGVmaW5lCVNDX0ZQQ19FSVIJKFNDX0FDWCsyKlJFR1NaKQogI2RlZmluZQlTQ19VU0VEX01BVEgJKFNDX0FDWCszKlJFR1NaKQotI2RlZmluZQlTQ19EU1AJCShTQ19BQ1grNCpSRUdTWikKLSNkZWZpbmUJU0NfTURISQkJKFNDX0FDWCs1KlJFR1NaKQotI2RlZmluZQlTQ19NRExPCQkoU0NfTURISSs4KQotI2RlZmluZQlTQ19ISTEJCShTQ19NRExPKzgpCi0jZGVmaW5lCVNDX0xPMQkJKFNDX0hJMSsxKlJFR1NaKQotI2RlZmluZQlTQ19ISTIJCShTQ19ISTErMipSRUdTWikKLSNkZWZpbmUJU0NfTE8yCQkoU0NfSEkxKzMqUkVHU1opCi0jZGVmaW5lCVNDX0hJMwkJKFNDX0hJMSs0KlJFR1NaKQotI2RlZmluZQlTQ19MTzMJCShTQ19ISTErNSpSRUdTWikKIC8qIE9wZW5CU0QgY29tcGF0aWJpbGl0eSAqLwogI2RlZmluZQlTQ19NQVNLCQlTQ19SRUdNQVNLCiAjZGVmaW5lCVNDX0ZQVVNFRAlTQ19VU0VEX01BVEgKIAotI2Vsc2UKLQotI2RlZmluZSBTQ19PTlNUQUNLCSgwICogUkVHU1opCi0jZGVmaW5lCVNDX01BU0sJCSgxICogUkVHU1opCi0jZGVmaW5lCVNDX1BDCQkoMiAqIFJFR1NaKQotI2RlZmluZQlTQ19SRUdTCQkoMyAqIFJFR1NaKQotI2RlZmluZQlTQ19NVUxMTwkoMzUgKiBSRUdTWikKLSNkZWZpbmUJU0NfTVVMSEkJKDM2ICogUkVHU1opCi0jZGVmaW5lCVNDX0ZQUkVHUwkoMzcgKiBSRUdTWikKLSNkZWZpbmUJU0NfRlBVU0VECSg3MCAqIFJFR1NaKQotI2RlZmluZQlTQ19GUENfRUlSCSg3MSAqIFJFR1NaKQotCi0jZW5kaWYgLyogX19BTkRST0lEX18gKi8KLQotI2VuZGlmIC8qIF9fTEFOR1VBR0VfQVNTRU1CTFkgKi8KLQogI2VuZGlmCS8qICFfTUlQU19TSUdOQUxfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL21pcHMubWsgYi9saWJjL2FyY2gtbWlwcy9taXBzLm1rCmluZGV4IDExMTlhNjYuLjMxYTFmMzIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL21pcHMubWsKKysrIGIvbGliYy9hcmNoLW1pcHMvbWlwcy5tawpAQCAtMSwyMyArMSw5NCBAQAotX0xJQkNfQVJDSF9DT01NT05fU1JDX0ZJTEVTIDo9IFwKKyMgbWlwcyBzcGVjaWZpYyBjb25maWdzCisKKyMgVGhlc2UgYXJlIHNoYXJlZCBieSBhbGwgdGhlIDMyLWJpdCB0YXJnZXRzLCBidXQgbm90IHRoZSA2NC1iaXQgb25lcy4KK2xpYmNfY29tbW9uX3NyY19maWxlc19taXBzIDo9IFwKKyAgICBiaW9uaWMvbGVnYWN5XzMyX2JpdF9zdXBwb3J0LmNwcCBcCisgICAgYmlvbmljL25ka19jcnVmdC5jcHAgXAorICAgIGJpb25pYy90aW1lNjQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXR3LmMgXAorCisjIFRoZXNlIGFyZSBzaGFyZWQgYnkgYWxsIHRoZSAzMi1iaXQgdGFyZ2V0cywgYnV0IG5vdCB0aGUgNjQtYml0IG9uZXMuCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfbWlwcyArPSBcCisgICAgIGJpb25pYy9tbWFwLmNwcAorCitsaWJjX2NvbW1vbl9zcmNfZmlsZXNfbWlwcyArPSBcCisgICAgYmlvbmljL21lbWNoci5jIFwKKyAgICBiaW9uaWMvbWVtY21wLmMgXAorICAgIGJpb25pYy9tZW1tb3ZlLmMgXAorICAgIGJpb25pYy9tZW1yY2hyLmMgXAorICAgIGJpb25pYy9zdHJjaHIuY3BwIFwKKyAgICBiaW9uaWMvc3Rybmxlbi5jIFwKKyAgICBiaW9uaWMvc3RycmNoci5jcHAgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NhdC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjaHIuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY21wLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NweS5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsZW4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzcmNoci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtY21wLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1tb3ZlLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL2Jjb3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cGNweS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHBuY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNhdC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjbXAuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxjYXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNweS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY2F0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jbXAuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNweS5jIFwKKworIyBGb3J0aWZ5IGltcGxlbWVudGF0aW9ucyBvZiBsaWJjIGZ1bmN0aW9ucy4KK2xpYmNfY29tbW9uX3NyY19maWxlc19taXBzICs9IFwKKyAgICBiaW9uaWMvX19tZW1jcHlfY2hrLmNwcCBcCisgICAgYmlvbmljL19fbWVtc2V0X2Noay5jcHAgXAorICAgIGJpb25pYy9fX3N0cmNweV9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19zdHJjYXRfY2hrLmNwcCBcCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgQ1BVIHNwZWNpZmljIHNvdXJjZSBmaWxlcworbGliY19iaW9uaWNfc3JjX2ZpbGVzX21pcHMgKz0gXAogICAgIGFyY2gtbWlwcy9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUyBcCiAgICAgYXJjaC1taXBzL2Jpb25pYy9iemVyby5TIFwKICAgICBhcmNoLW1pcHMvYmlvbmljL2NhY2hlZmx1c2guY3BwIFwKICAgICBhcmNoLW1pcHMvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBcCi0gICAgYXJjaC1taXBzL2Jpb25pYy9mdXRleF9taXBzLlMgXAotICAgIGFyY2gtbWlwcy9iaW9uaWMvX19nZXRfc3AuUyBcCi0gICAgYXJjaC1taXBzL2Jpb25pYy9tZW1jbXAxNi5TIFwKLSAgICBhcmNoLW1pcHMvYmlvbmljL21lbW1vdmUuYyBcCiAgICAgYXJjaC1taXBzL2Jpb25pYy9fc2V0am1wLlMgXAogICAgIGFyY2gtbWlwcy9iaW9uaWMvc2V0am1wLlMgXAotICAgIGFyY2gtbWlwcy9iaW9uaWMvX19zZXRfdGxzLmMgXAogICAgIGFyY2gtbWlwcy9iaW9uaWMvc2lnc2V0am1wLlMgXAogICAgIGFyY2gtbWlwcy9iaW9uaWMvc3lzY2FsbC5TIFwKICAgICBhcmNoLW1pcHMvYmlvbmljL3Zmb3JrLlMgXAorCitpZm5kZWYgQVJDSF9NSVBTX1JFVjYKK2xpYmNfYmlvbmljX3NyY19maWxlc19taXBzICs9IFwKICAgICBhcmNoLW1pcHMvc3RyaW5nL21lbWNweS5TIFwKICAgICBhcmNoLW1pcHMvc3RyaW5nL21lbXNldC5TIFwKICAgICBhcmNoLW1pcHMvc3RyaW5nL21pcHNfc3RybGVuLmMgXAogCi1fTElCQ19BUkNIX1NUQVRJQ19TUkNfRklMRVMgOj0gXAotICAgIGJpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmMgXAorZWxzZQorbGliY19iaW9uaWNfc3JjX2ZpbGVzX21pcHMgKz0gXAorICAgIGJpb25pYy9tZW1jcHkuY3BwIFwKKyAgICBiaW9uaWMvbWVtc2V0LmMKK2xpYmNfY29tbW9uX3NyY19maWxlc19taXBzICs9IFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsZW4uYworZW5kaWYKIAotX0xJQkNfQVJDSF9EWU5BTUlDX1NSQ19GSUxFUyA6PQorbGliY19uZXRic2Rfc3JjX2ZpbGVzX21pcHMgOj0gXAorICAgIHVwc3RyZWFtLW5ldGJzZC9jb21tb24vbGliL2xpYmMvaGFzaC9zaGExL3NoYTEuYyBcCisKK2xpYmNfY3J0X3RhcmdldF9jZmxhZ3NfbWlwcyA6PSBcCisgICAgJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfR0xPQkFMX0NGTEFHUykgXAorICAgIC1JJChMT0NBTF9QQVRIKS9hcmNoLW1pcHMvaW5jbHVkZQorCitsaWJjX2NydF90YXJnZXRfY3J0YmVnaW5fZmlsZV9taXBzIDo9IFwKKyAgICAkKExPQ0FMX1BBVEgpL2FyY2gtbWlwcy9iaW9uaWMvY3J0YmVnaW4uYworCitsaWJjX2NydF90YXJnZXRfY3J0YmVnaW5fc29fZmlsZV9taXBzIDo9IFwKKyAgICAkKExPQ0FMX1BBVEgpL2FyY2gtY29tbW9uL2Jpb25pYy9jcnRiZWdpbl9zby5jCisKK2xpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3NfbWlwcyA6PSBcCisgICAgLWZQSUMKKworbGliY19jcnRfdGFyZ2V0X2xkZmxhZ3NfbWlwcyA6PSBcCisgICAgLW1lbGYzMmx0c21pcApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3RyaW5nL21lbWNweS5TIGIvbGliYy9hcmNoLW1pcHMvc3RyaW5nL21lbWNweS5TCmluZGV4IGFhYmRmY2YuLmRjOTEwOTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N0cmluZy9tZW1jcHkuUworKysgYi9saWJjL2FyY2gtbWlwcy9zdHJpbmcvbWVtY3B5LlMKQEAgLTM5LDEzICszOSwxMyBAQAogICogIEluY2x1ZGUgZmlsZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICJtYWNoaW5lL2FzbS5oIgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAKLS8qIAorLyoKICAqIFRoaXMgcm91dGluZSBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIE1JUFM2NC4gVGhlIGN1cnJlbnQgY29kZSBvbmx5CiAgKiB1c2VzIE1JUFMzMiBpbnN0cnVjdGlvbnMuCi0gKi8JCisgKi8KICNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCiAjICBkZWZpbmUgTFdISQlsd2wJCS8qIGhpZ2ggcGFydCBpcyBsZWZ0IGluIGJpZy1lbmRpYW4JKi8KICMgIGRlZmluZSBTV0hJCXN3bAkJLyogaGlnaCBwYXJ0IGlzIGxlZnQgaW4gYmlnLWVuZGlhbgkqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3RyaW5nL21lbXNldC5TIGIvbGliYy9hcmNoLW1pcHMvc3RyaW5nL21lbXNldC5TCmluZGV4IGExYzUwNTUuLjNlNjMwY2EgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N0cmluZy9tZW1zZXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zdHJpbmcvbWVtc2V0LlMKQEAgLTM5LDEyICszOSwxMiBAQAogICogIEluY2x1ZGUgZmlsZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICJtYWNoaW5lL2FzbS5oIgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi0vKiAKKy8qCiAgKiBUaGlzIHJvdXRpbmUgY291bGQgYmUgb3B0aW1pemVkIGZvciBNSVBTNjQuIFRoZSBjdXJyZW50IGNvZGUgb25seQogICogdXNlcyBNSVBTMzIgaW5zdHJ1Y3Rpb25zLgotICovCQorICovCiAKICNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCiAjICBkZWZpbmUgU1dISQlzd2wJCS8qIGhpZ2ggcGFydCBpcyBsZWZ0IGluIGJpZy1lbmRpYW4JKi8KQEAgLTIyMCw3ICsyMjAsNyBAQAogCXN3CWExLC0zNihhMCkKIAlub3AKIAlub3AJCQkjIHRoZSBleHRyYSBub3AgaW5zdHJ1Y3Rpb25zIGhlbHAgdG8gYmFsYW5jZQotCW5vcAkJCSMgY3ljbGVzIG5lZWRlZCBmb3IgInN0b3JlIiArICJmaWxsIiArICJldmljdCIgCisJbm9wCQkJIyBjeWNsZXMgbmVlZGVkIGZvciAic3RvcmUiICsgImZpbGwiICsgImV2aWN0IgogCW5vcAkJCSMgRm9yIDY0Ynl0ZSBzdG9yZSB0aGVyZSBhcmUgbmVlZGVkIDggZmlsbAogCW5vcAkJCSMgYW5kIDggZXZpY3QgY3ljbGVzLCBpLmUuIGF0IGxlYXN0IDMyIGluc3RyLgogCW5vcApAQCAtMzIwLDQgKzMyMCwzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgSW1wbGVtZW50YXRpb24gOiBTdGF0aWMgZnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy5tayBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDg3YjI5Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4KLXN5c2NhbGxfc3JjIDo9Ci1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19icmsuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fZXhpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19mY250bDY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRjcHUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0Y3dkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX2lvY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX2xsc2Vlay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19tbWFwMi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19vcGVuYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fcHBvbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fcHNlbGVjdDYuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fcHRyYWNlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3JlYm9vdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3NpZ2FjdGlvbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19zeXNsb2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX193YWl0aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19leGl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fZmx1c2hfY2FjaGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2FjY2VwdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvYWNjdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvYmluZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvY2FwZ2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9jYXBzZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2NoZGlyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9jaHJvb3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9jbG9zZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvY29ubmVjdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZHVwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9kdXAzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9lcG9sbF9jdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2V2ZW50ZmQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2V4ZWN2ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mY2hkaXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG1vZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZmNobW9kYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG93bi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZmNob3duYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2ZkYXRhc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZmdldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mbG9jay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mc2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2ZzdGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mc3RhdGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZnRydW5jYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZnV0ZXguUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldGRlbnRzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRlZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRldWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldGdyb3Vwcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRwZWVybmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRwcGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRyZXNnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc3VpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXRydXNhZ2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldHNpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c29ja25hbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldHNvY2tvcHQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldHRpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXR1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9pbml0X21vZHVsZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2lvcHJpb19nZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2lvcHJpb19zZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2tpbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2tsb2djdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2xnZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9saXN0ZW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2xpc3R4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbGxpc3R4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9sc2Vlay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbHNldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9tYWR2aXNlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9taW5jb3JlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9ta2RpcmF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9ta25vZGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9tbG9jay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbWxvY2thbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL21vdW50LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9tcHJvdGVjdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbXJlbWFwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9tc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbXVubG9jay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbXVubG9ja2FsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbXVubWFwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9uYW5vc2xlZXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvcGVyc29uYWxpdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3BpcGUyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9wcmN0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvcHJlYWQ2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvcHJsaW1pdDY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9wd3JpdGU2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvcmVhZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvcmVhZGFoZWFkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9yZWFkbGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9yZWFkdi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvcmVjdmZyb20uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3JlY3Ztc2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9yZW5hbWVhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRmaWxlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZW5kZmlsZTY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZW5kbXNnLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZW5kdG8uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXRpdGltZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldG5zLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXRwZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXRwcmlvcml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlc2dpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVzdWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmxpbWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXRzaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldHNvY2tvcHQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2V0dWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2h1dGRvd24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zaWduYWxmZDQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NvY2tldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc29ja2V0cGFpci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9mZi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9uLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zeW1saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3N5bmMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3N5c2luZm8uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3Rna2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy90aW1lcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvdGtpbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3RydW5jYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy90cnVuY2F0ZTY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy91bWFzay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvdW1vdW50Mi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvdW5hbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3VubGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy91bnNoYXJlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy91dGltZW5zYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3dhaXQ0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy93cml0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvd3JpdGV2LlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fYWNjZXB0NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19hY2NlcHQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkZjA0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fYWNjZXB0NC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19hY2NlcHQ0KQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2FjY2VwdDQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCitFTkQoX19hY2NlcHQ0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19icmsuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fYnJrLlMKaW5kZXggODdlMTNiZC4uODQ3MjY2MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19icmsuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2Jyay5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fYnJrCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fYnJrCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fYnJrOgorRU5UUlkoX19icmspCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9icmsKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfYnJrCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX2JyaworRU5EKF9fYnJrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19jb25uZWN0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2Nvbm5lY3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGMxYjliCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19jb25uZWN0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2Nvbm5lY3QpCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfY29ubmVjdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChfX2Nvbm5lY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMKaW5kZXggMGE1ZmRhZS4uM2FlZDliYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX2Vwb2xsX3B3YWl0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fZXBvbGxfcHdhaXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19lcG9sbF9wd2FpdDoKK0VOVFJZKF9fZXBvbGxfcHdhaXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9lcG9sbF9wd2FpdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9lcG9sbF9wd2FpdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19lcG9sbF9wd2FpdAorRU5EKF9fZXBvbGxfcHdhaXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2V4aXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZXhpdC5TCmluZGV4IDUyOWU0OWMuLjczNDk4MDQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZXhpdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZXhpdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fZXhpdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX2V4aXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19leGl0OgorRU5UUlkoX19leGl0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZXhpdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9leGl0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX2V4aXQKK0VORChfX2V4aXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mYWR2aXNlNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmFjYmIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mYWR2aXNlNjQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZmFkdmlzZTY0KQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZhZHZpc2U2NAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChfX2ZhZHZpc2U2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZmNudGw2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mY250bDY0LlMKaW5kZXggMzllZDRjZi4uMjczNGJlMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mY250bDY0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mY250bDY0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19mY250bDY0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fZmNudGw2NAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX2ZjbnRsNjQ6CitFTlRSWShfX2ZjbnRsNjQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mY250bDY0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZjbnRsNjQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fZmNudGw2NAorRU5EKF9fZmNudGw2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZnN0YXRmczY0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TCmluZGV4IDMzODlhOGQuLmUwOGNmN2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZnN0YXRmczY0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mc3RhdGZzNjQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX2ZzdGF0ZnM2NAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX2ZzdGF0ZnM2NAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX2ZzdGF0ZnM2NDoKK0VOVFJZKF9fZnN0YXRmczY0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZnN0YXRmczY0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZzdGF0ZnM2NAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19mc3RhdGZzNjQKK0VORChfX2ZzdGF0ZnM2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0Y3B1LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldGNwdS5TCmluZGV4IGQyOWJkNjIuLjI2MmY0NDAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0Y3B1LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRjcHUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX2dldGNwdQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX2dldGNwdQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX2dldGNwdToKK0VOVFJZKF9fZ2V0Y3B1KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0Y3B1CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldGNwdQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19nZXRjcHUKK0VORChfX2dldGNwdSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0Y3dkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldGN3ZC5TCmluZGV4IGNlMDVkOTIuLmNhNmVjN2MgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0Y3dkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRjd2QuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX2dldGN3ZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX2dldGN3ZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX2dldGN3ZDoKK0VOVFJZKF9fZ2V0Y3dkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0Y3dkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldGN3ZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19nZXRjd2QKK0VORChfX2dldGN3ZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRkZW50czY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3ZWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXRkZW50czY0KQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldGRlbnRzNjQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCitFTkQoX19nZXRkZW50czY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRwaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0cGlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhYjA0OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0cGlkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2dldHBpZCkKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXRwaWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCitFTkQoX19nZXRwaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKaW5kZXggNzY3YjZkMC4uZWY2MjM1ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX2dldHByaW9yaXR5Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fZ2V0cHJpb3JpdHkKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19nZXRwcmlvcml0eToKK0VOVFJZKF9fZ2V0cHJpb3JpdHkpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRwcmlvcml0eQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXRwcmlvcml0eQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19nZXRwcmlvcml0eQorRU5EKF9fZ2V0cHJpb3JpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2lvY3RsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2lvY3RsLlMKaW5kZXggM2Q4M2M2MC4uMjc3MTZlOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19pb2N0bC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19faW9jdGwuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX2lvY3RsCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9faW9jdGwKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19pb2N0bDoKK0VOVFJZKF9faW9jdGwpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9pb2N0bAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9pb2N0bAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19pb2N0bAorRU5EKF9faW9jdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2xsc2Vlay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19sbHNlZWsuUwppbmRleCA5YTM3NTNiLi5lMGNiMzIxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2xsc2Vlay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fbGxzZWVrLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19sbHNlZWsKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19sbHNlZWsKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19sbHNlZWs6CitFTlRSWShfX2xsc2VlaykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX19sbHNlZWsKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfX2xsc2VlawogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19sbHNlZWsKK0VORChfX2xsc2VlaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fbW1hcDIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fbW1hcDIuUwppbmRleCA3MjNlODBlZi4uODE3NWIzMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19tbWFwMi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fbW1hcDIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX21tYXAyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fbW1hcDIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19tbWFwMjoKK0VOVFJZKF9fbW1hcDIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9tbWFwMgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9tbWFwMgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19tbWFwMgorRU5EKF9fbW1hcDIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX29wZW5hdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19vcGVuYXQuUwppbmRleCBlNTVlNzFkLi5jMGMzY2RmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX29wZW5hdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fb3BlbmF0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19vcGVuYXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19vcGVuYXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19vcGVuYXQ6CitFTlRSWShfX29wZW5hdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX29wZW5hdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9vcGVuYXQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fb3BlbmF0CitFTkQoX19vcGVuYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3Bwb2xsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3Bwb2xsLlMKaW5kZXggZWY2ZDM0My4uNzVkYmJjOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19wcG9sbC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcHBvbGwuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3Bwb2xsCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fcHBvbGwKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19wcG9sbDoKK0VOVFJZKF9fcHBvbGwpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9wcG9sbAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9wcG9sbAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19wcG9sbAorRU5EKF9fcHBvbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3BzZWxlY3Q2LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKaW5kZXggMjZhZjkyYS4uZDAyODE1NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcHNlbGVjdDYuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3BzZWxlY3Q2Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fcHNlbGVjdDYKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19wc2VsZWN0NjoKK0VOVFJZKF9fcHNlbGVjdDYpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9wc2VsZWN0NgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9wc2VsZWN0NgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19wc2VsZWN0NgorRU5EKF9fcHNlbGVjdDYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3B0cmFjZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19wdHJhY2UuUwppbmRleCBmMmVhOGM3Li5jNWQ5MWZiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3B0cmFjZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcHRyYWNlLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19wdHJhY2UKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19wdHJhY2UKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19wdHJhY2U6CitFTlRSWShfX3B0cmFjZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3B0cmFjZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9wdHJhY2UKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fcHRyYWNlCitFTkQoX19wdHJhY2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3JlYm9vdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19yZWJvb3QuUwppbmRleCA5NWJhNWQ4Li5jMDFmN2ZiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3JlYm9vdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcmVib290LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19yZWJvb3QKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19yZWJvb3QKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19yZWJvb3Q6CitFTlRSWShfX3JlYm9vdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3JlYm9vdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9yZWJvb3QKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fcmVib290CitFTkQoX19yZWJvb3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwppbmRleCA3MzI1M2Q2Li43ZmEzN2ZkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19ydF9zaWdhY3Rpb24KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19ydF9zaWdhY3Rpb24KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19ydF9zaWdhY3Rpb246CitFTlRSWShfX3J0X3NpZ2FjdGlvbikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3J0X3NpZ2FjdGlvbgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9ydF9zaWdhY3Rpb24KICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fcnRfc2lnYWN0aW9uCitFTkQoX19ydF9zaWdhY3Rpb24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCmluZGV4IDkwMzU3YjMuLmI4MGIzMTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fcnRfc2lncGVuZGluZwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3J0X3NpZ3BlbmRpbmcKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19ydF9zaWdwZW5kaW5nOgorRU5UUlkoX19ydF9zaWdwZW5kaW5nKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcnRfc2lncGVuZGluZworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9ydF9zaWdwZW5kaW5nCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3J0X3NpZ3BlbmRpbmcKK0VORChfX3J0X3NpZ3BlbmRpbmcpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKaW5kZXggMGQzNGUzNy4uZTJhMzllYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3J0X3NpZ3Byb2NtYXNrCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fcnRfc2lncHJvY21hc2sKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19ydF9zaWdwcm9jbWFzazoKK0VOVFJZKF9fcnRfc2lncHJvY21hc2spCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9ydF9zaWdwcm9jbWFzaworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9ydF9zaWdwcm9jbWFzawogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19ydF9zaWdwcm9jbWFzaworRU5EKF9fcnRfc2lncHJvY21hc2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCmluZGV4IDNmZjQ3MjMuLmU5MWM1M2YgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fcnRfc2lnc3VzcGVuZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3J0X3NpZ3N1c3BlbmQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19ydF9zaWdzdXNwZW5kOgorRU5UUlkoX19ydF9zaWdzdXNwZW5kKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcnRfc2lnc3VzcGVuZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9ydF9zaWdzdXNwZW5kCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3J0X3NpZ3N1c3BlbmQKK0VORChfX3J0X3NpZ3N1c3BlbmQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwppbmRleCAxOWE1Y2U5Li4wYjQxOTVmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19ydF9zaWd0aW1lZHdhaXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19ydF9zaWd0aW1lZHdhaXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19ydF9zaWd0aW1lZHdhaXQ6CitFTlRSWShfX3J0X3NpZ3RpbWVkd2FpdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3J0X3NpZ3RpbWVkd2FpdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9ydF9zaWd0aW1lZHdhaXQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fcnRfc2lndGltZWR3YWl0CitFTkQoX19ydF9zaWd0aW1lZHdhaXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKaW5kZXggMDAzOGZmOS4uYjA5ZjQwNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3NjaGVkX2dldGFmZmluaXR5Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fc2NoZWRfZ2V0YWZmaW5pdHkKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19zY2hlZF9nZXRhZmZpbml0eToKK0VOVFJZKF9fc2NoZWRfZ2V0YWZmaW5pdHkpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zY2hlZF9nZXRhZmZpbml0eQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9nZXRhZmZpbml0eQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19zY2hlZF9nZXRhZmZpbml0eQorRU5EKF9fc2NoZWRfZ2V0YWZmaW5pdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkzODNlOS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3NldF90aHJlYWRfYXJlYQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3NldF90aHJlYWRfYXJlYQotCi1fX3NldF90aHJlYWRfYXJlYToKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldF90aHJlYWRfYXJlYQotICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKLSAgICBub3AKLTE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKLSAgICBub3AKLSAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fc2V0X3RocmVhZF9hcmVhCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwppbmRleCA0ZmNjODJhLi44Y2EwNzE2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX19zZXRfdGlkX2FkZHJlc3MKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19zZXRfdGlkX2FkZHJlc3MKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotX19zZXRfdGlkX2FkZHJlc3M6CitFTlRSWShfX3NldF90aWRfYWRkcmVzcykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldF90aWRfYWRkcmVzcworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRfdGlkX2FkZHJlc3MKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fc2V0X3RpZF9hZGRyZXNzCitFTkQoX19zZXRfdGlkX2FkZHJlc3MpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90bHMuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0X3Rscy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOWViYTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90bHMuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fc2V0X3RscykKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRfdGhyZWFkX2FyZWEKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCitFTkQoX19zZXRfdGxzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zaWdhY3Rpb24uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2lnYWN0aW9uLlMKaW5kZXggY2M1M2FiNC4uMDg4NmU5NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zaWdhY3Rpb24uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NpZ2FjdGlvbi5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fc2lnYWN0aW9uCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fc2lnYWN0aW9uCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLV9fc2lnYWN0aW9uOgorRU5UUlkoX19zaWdhY3Rpb24pCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zaWdhY3Rpb24KKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2lnYWN0aW9uCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3NpZ2FjdGlvbgorRU5EKF9fc2lnYWN0aW9uKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zaWduYWxmZDQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2lnbmFsZmQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1NzE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2lnbmFsZmQ0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NpZ25hbGZkNCkKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zaWduYWxmZDQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCitFTkQoX19zaWduYWxmZDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NvY2tldC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zb2NrZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTMzMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zb2NrZXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fc29ja2V0KQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NvY2tldAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChfX3NvY2tldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc3RhdGZzNjQuUwppbmRleCA0YjMzNTFjLi5lZDRkY2RiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3N0YXRmczY0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fc3RhdGZzNjQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX19zdGF0ZnM2NAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3N0YXRmczY0OgorRU5UUlkoX19zdGF0ZnM2NCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3N0YXRmczY0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3N0YXRmczY0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3N0YXRmczY0CitFTkQoX19zdGF0ZnM2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc3lzbG9nLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3N5c2xvZy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWEzMjQyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc3lzbG9nLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fc3lzbG9nCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fc3lzbG9nCi0KLV9fc3lzbG9nOgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc3lzbG9nCi0gICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQotICAgIG5vcAotMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQotICAgIG5vcAotICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX19zeXNsb2cKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCmluZGV4IDA1NGMxYjkuLmVmNTA3NDkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3RpbWVyX2NyZWF0ZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3RpbWVyX2NyZWF0ZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3RpbWVyX2NyZWF0ZToKK0VOVFJZKF9fdGltZXJfY3JlYXRlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdGltZXJfY3JlYXRlCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3RpbWVyX2NyZWF0ZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX190aW1lcl9jcmVhdGUKK0VORChfX3RpbWVyX2NyZWF0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCmluZGV4IDJmYTZlNTAuLjU5OTNhY2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3RpbWVyX2RlbGV0ZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3RpbWVyX2RlbGV0ZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3RpbWVyX2RlbGV0ZToKK0VOVFJZKF9fdGltZXJfZGVsZXRlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdGltZXJfZGVsZXRlCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3RpbWVyX2RlbGV0ZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX190aW1lcl9kZWxldGUKK0VORChfX3RpbWVyX2RlbGV0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKaW5kZXggMjY5YWM0ZC4uMzEyMzRlNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX190aW1lcl9nZXRvdmVycnVuCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fdGltZXJfZ2V0b3ZlcnJ1bgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3RpbWVyX2dldG92ZXJydW46CitFTlRSWShfX3RpbWVyX2dldG92ZXJydW4pCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl90aW1lcl9nZXRvdmVycnVuCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3RpbWVyX2dldG92ZXJydW4KICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fdGltZXJfZ2V0b3ZlcnJ1bgorRU5EKF9fdGltZXJfZ2V0b3ZlcnJ1bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKaW5kZXggM2ExOGUzZC4uMzg4MDBkMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX190aW1lcl9nZXR0aW1lCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fdGltZXJfZ2V0dGltZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3RpbWVyX2dldHRpbWU6CitFTlRSWShfX3RpbWVyX2dldHRpbWUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl90aW1lcl9nZXR0aW1lCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3RpbWVyX2dldHRpbWUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fdGltZXJfZ2V0dGltZQorRU5EKF9fdGltZXJfZ2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKaW5kZXggZGFmNjcxZi4uNzNjZWE3MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX190aW1lcl9zZXR0aW1lCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9fdGltZXJfc2V0dGltZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3RpbWVyX3NldHRpbWU6CitFTlRSWShfX3RpbWVyX3NldHRpbWUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl90aW1lcl9zZXR0aW1lCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3RpbWVyX3NldHRpbWUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9fdGltZXJfc2V0dGltZQorRU5EKF9fdGltZXJfc2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fd2FpdGlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3dhaXRpZC5TCmluZGV4IDk0NDJjYTYuLjlkMTdmOGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fd2FpdGlkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX193YWl0aWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfX3dhaXRpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfX3dhaXRpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fX3dhaXRpZDoKK0VOVFJZKF9fd2FpdGlkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfd2FpdGlkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3dhaXRpZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgX193YWl0aWQKK0VORChfX3dhaXRpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19leGl0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fZXhpdC5TCmluZGV4IDIyMDg3NmEuLjVhYzEzMjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19leGl0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2V4aXQuUwpAQCAtMSwyMyArMSwyMiBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBfZXhpdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBfZXhpdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fZXhpdDoKK0VOVFJZKF9leGl0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZXhpdF9ncm91cAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9leGl0X2dyb3VwCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfZXhpdAorRU5EKF9leGl0KQorCisgICAgLmdsb2JsIF9FeGl0CisgICAgLmVxdSBfRXhpdCwgX2V4aXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19mbHVzaF9jYWNoZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2ZsdXNoX2NhY2hlLlMKaW5kZXggMGFjMjU3Ni4uYTQwMzBlOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2ZsdXNoX2NhY2hlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2ZsdXNoX2NhY2hlLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgX2ZsdXNoX2NhY2hlCi0gICAgLmFsaWduIDQKLSAgICAuZW50IF9mbHVzaF9jYWNoZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fZmx1c2hfY2FjaGU6CitFTlRSWShfZmx1c2hfY2FjaGUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9jYWNoZWZsdXNoCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2NhY2hlZmx1c2gKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIF9mbHVzaF9jYWNoZQorRU5EKF9mbHVzaF9jYWNoZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2FjY2VwdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYWNjZXB0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ZGE0ZDguLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYWNjZXB0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGFjY2VwdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBhY2NlcHQKLQotYWNjZXB0OgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfYWNjZXB0Ci0gICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQotICAgIG5vcAotMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQotICAgIG5vcAotICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgYWNjZXB0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9hY2N0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9hY2N0LlMKaW5kZXggYzY0MWI5Yy4uZTNhNWNjZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYWNjdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2FjY3QuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBhY2N0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGFjY3QKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotYWNjdDoKK0VOVFJZKGFjY3QpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9hY2N0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2FjY3QKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGFjY3QKK0VORChhY2N0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYmluZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYmluZC5TCmluZGV4IDkxMmIxNjEuLjc4ZmUyYmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2JpbmQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9iaW5kLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgYmluZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBiaW5kCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWJpbmQ6CitFTlRSWShiaW5kKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfYmluZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9iaW5kCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBiaW5kCitFTkQoYmluZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2NhcGdldC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2FwZ2V0LlMKaW5kZXggNDhmN2JlMy4uMGNiYjYyNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2FwZ2V0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2FwZ2V0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgY2FwZ2V0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGNhcGdldAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1jYXBnZXQ6CitFTlRSWShjYXBnZXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9jYXBnZXQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfY2FwZ2V0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBjYXBnZXQKK0VORChjYXBnZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jYXBzZXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2NhcHNldC5TCmluZGV4IDQwMjIzYzIuLmU4MTEwODAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2NhcHNldC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2NhcHNldC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGNhcHNldAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBjYXBzZXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotY2Fwc2V0OgorRU5UUlkoY2Fwc2V0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfY2Fwc2V0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2NhcHNldAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgY2Fwc2V0CitFTkQoY2Fwc2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2hkaXIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2NoZGlyLlMKaW5kZXggNGY0MjdhMS4uODJiN2EyYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2hkaXIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jaGRpci5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGNoZGlyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGNoZGlyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWNoZGlyOgorRU5UUlkoY2hkaXIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9jaGRpcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9jaGRpcgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgY2hkaXIKK0VORChjaGRpcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nocm9vdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2hyb290LlMKaW5kZXggYTUwMTQ1OS4uZTZhMjlmYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2hyb290LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2hyb290LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgY2hyb290Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGNocm9vdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1jaHJvb3Q6CitFTlRSWShjaHJvb3QpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9jaHJvb3QKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfY2hyb290CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBjaHJvb3QKK0VORChjaHJvb3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19nZXRyZXMuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCmluZGV4IGQzOTg2ZmMuLmFjN2M1YzYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGNsb2NrX2dldHJlcwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBjbG9ja19nZXRyZXMKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotY2xvY2tfZ2V0cmVzOgorRU5UUlkoY2xvY2tfZ2V0cmVzKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfY2xvY2tfZ2V0cmVzCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2Nsb2NrX2dldHJlcwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgY2xvY2tfZ2V0cmVzCitFTkQoY2xvY2tfZ2V0cmVzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCmluZGV4IGZhMDIzMDkuLmQyMjdhMDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgY2xvY2tfZ2V0dGltZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBjbG9ja19nZXR0aW1lCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWNsb2NrX2dldHRpbWU6CitFTlRSWShjbG9ja19nZXR0aW1lKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfY2xvY2tfZ2V0dGltZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9jbG9ja19nZXR0aW1lCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBjbG9ja19nZXR0aW1lCitFTkQoY2xvY2tfZ2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKaW5kZXggOTFhMTQxOC4uNjAwMmFiNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgY2xvY2tfbmFub3NsZWVwCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGNsb2NrX25hbm9zbGVlcAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1jbG9ja19uYW5vc2xlZXA6CitFTlRSWShjbG9ja19uYW5vc2xlZXApCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9jbG9ja19uYW5vc2xlZXAKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfY2xvY2tfbmFub3NsZWVwCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBjbG9ja19uYW5vc2xlZXAKK0VORChjbG9ja19uYW5vc2xlZXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKaW5kZXggZDhlYjhmMS4uMTkzYmRjMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBjbG9ja19zZXR0aW1lCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGNsb2NrX3NldHRpbWUKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotY2xvY2tfc2V0dGltZToKK0VOVFJZKGNsb2NrX3NldHRpbWUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9jbG9ja19zZXR0aW1lCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2Nsb2NrX3NldHRpbWUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGNsb2NrX3NldHRpbWUKK0VORChjbG9ja19zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvc2UuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb3NlLlMKaW5kZXggMDk4ZmRkMi4uMjMxZjQ5NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvc2UuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9zZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGNsb3NlCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGNsb3NlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWNsb3NlOgorRU5UUlkoY2xvc2UpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9jbG9zZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9jbG9zZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgY2xvc2UKK0VORChjbG9zZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nvbm5lY3QuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNiMGNlYS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jb25uZWN0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGNvbm5lY3QKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgY29ubmVjdAotCi1jb25uZWN0OgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfY29ubmVjdAotICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKLSAgICBub3AKLTE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKLSAgICBub3AKLSAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGNvbm5lY3QKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwppbmRleCBhZTQ3Njk3Li44YzAxYzA2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGRlbGV0ZV9tb2R1bGUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZGVsZXRlX21vZHVsZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1kZWxldGVfbW9kdWxlOgorRU5UUlkoZGVsZXRlX21vZHVsZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2RlbGV0ZV9tb2R1bGUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZGVsZXRlX21vZHVsZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZGVsZXRlX21vZHVsZQorRU5EKGRlbGV0ZV9tb2R1bGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9kdXAuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2R1cC5TCmluZGV4IDZjYjkyNGYuLmI0ZGNkNzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2R1cC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2R1cC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGR1cAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBkdXAKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZHVwOgorRU5UUlkoZHVwKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZHVwCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2R1cAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZHVwCitFTkQoZHVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZHVwMy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZHVwMy5TCmluZGV4IDZhMzc1MmMuLjFkOWMyMzYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2R1cDMuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9kdXAzLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZHVwMwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBkdXAzCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWR1cDM6CitFTlRSWShkdXAzKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZHVwMworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9kdXAzCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBkdXAzCitFTkQoZHVwMykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwppbmRleCAwYWJhZWRhLi44NzU0ODc5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGVwb2xsX2NyZWF0ZTEKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZXBvbGxfY3JlYXRlMQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1lcG9sbF9jcmVhdGUxOgorRU5UUlkoZXBvbGxfY3JlYXRlMSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2Vwb2xsX2NyZWF0ZTEKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZXBvbGxfY3JlYXRlMQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZXBvbGxfY3JlYXRlMQorRU5EKGVwb2xsX2NyZWF0ZTEpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9lcG9sbF9jdGwuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2N0bC5TCmluZGV4IDIwZDQzNjcuLjE0YzkyMDIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2N0bC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2N0bC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGVwb2xsX2N0bAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBlcG9sbF9jdGwKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZXBvbGxfY3RsOgorRU5UUlkoZXBvbGxfY3RsKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZXBvbGxfY3RsCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2Vwb2xsX2N0bAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZXBvbGxfY3RsCitFTkQoZXBvbGxfY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXZlbnRmZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXZlbnRmZC5TCmluZGV4IGYxMmJjN2QuLjY0OTRkYmMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2V2ZW50ZmQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ldmVudGZkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZXZlbnRmZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBldmVudGZkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWV2ZW50ZmQ6CitFTlRSWShldmVudGZkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZXZlbnRmZDIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZXZlbnRmZDIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGV2ZW50ZmQKK0VORChldmVudGZkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXhlY3ZlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9leGVjdmUuUwppbmRleCA3NTBiNDAyLi4yZDIwYjUxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9leGVjdmUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9leGVjdmUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBleGVjdmUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZXhlY3ZlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWV4ZWN2ZToKK0VOVFJZKGV4ZWN2ZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2V4ZWN2ZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9leGVjdmUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGV4ZWN2ZQorRU5EKGV4ZWN2ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZhY2Nlc3NhdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKaW5kZXggZmZhNGY0Mi4uZTYxNjEwNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZmFjY2Vzc2F0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGZhY2Nlc3NhdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1mYWNjZXNzYXQ6CitFTlRSWShmYWNjZXNzYXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mYWNjZXNzYXQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZmFjY2Vzc2F0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmYWNjZXNzYXQKK0VORChmYWNjZXNzYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mYWxsb2NhdGU2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmFsbG9jYXRlNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjA1NTEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmFsbG9jYXRlNjQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZhbGxvY2F0ZTY0KQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZhbGxvY2F0ZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChmYWxsb2NhdGU2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaGRpci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNoZGlyLlMKaW5kZXggYWUwYjg4My4uZDY4M2JhYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNoZGlyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNoZGlyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZmNoZGlyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGZjaGRpcgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1mY2hkaXI6CitFTlRSWShmY2hkaXIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mY2hkaXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZmNoZGlyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmY2hkaXIKK0VORChmY2hkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2htb2QuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG1vZC5TCmluZGV4IDI3Mjk2NGUuLjJhOTVjYzMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG1vZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG1vZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGZjaG1vZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBmY2htb2QKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZmNobW9kOgorRU5UUlkoZmNobW9kKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZmNobW9kCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZjaG1vZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZmNobW9kCitFTkQoZmNobW9kKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNobW9kYXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG1vZGF0LlMKaW5kZXggMzg4ZDIyMS4uZDlkZTAzNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNobW9kYXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2htb2RhdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGZjaG1vZGF0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGZjaG1vZGF0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWZjaG1vZGF0OgorRU5UUlkoZmNobW9kYXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mY2htb2RhdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9mY2htb2RhdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZmNobW9kYXQKK0VORChmY2htb2RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG93bi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNob3duLlMKaW5kZXggNTJkNmU1OS4uMWFjOTQ1MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNob3duLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNob3duLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZmNob3duCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGZjaG93bgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1mY2hvd246CitFTlRSWShmY2hvd24pCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mY2hvd24KKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZmNob3duCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmY2hvd24KK0VORChmY2hvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hvd25hdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNob3duYXQuUwppbmRleCA2OTEzZDZjLi5iZTFhMDIxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hvd25hdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG93bmF0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZmNob3duYXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZmNob3duYXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZmNob3duYXQ6CitFTlRSWShmY2hvd25hdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZjaG93bmF0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZjaG93bmF0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmY2hvd25hdAorRU5EKGZjaG93bmF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmRhdGFzeW5jLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mZGF0YXN5bmMuUwppbmRleCBhMWQ0MDU2Li4yNGQ2NTQxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mZGF0YXN5bmMuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mZGF0YXN5bmMuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmZGF0YXN5bmMKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZmRhdGFzeW5jCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWZkYXRhc3luYzoKK0VOVFJZKGZkYXRhc3luYykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZkYXRhc3luYworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9mZGF0YXN5bmMKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZkYXRhc3luYworRU5EKGZkYXRhc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZnZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmdldHhhdHRyLlMKaW5kZXggMWQ2NDVhNS4uNjUxNmZlYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmdldHhhdHRyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZmdldHhhdHRyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGZnZXR4YXR0cgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1mZ2V0eGF0dHI6CitFTlRSWShmZ2V0eGF0dHIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mZ2V0eGF0dHIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZmdldHhhdHRyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmZ2V0eGF0dHIKK0VORChmZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mbGlzdHhhdHRyLlMKaW5kZXggMmNiNTNjNS4uMGI3MTUzMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmbGlzdHhhdHRyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGZsaXN0eGF0dHIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZmxpc3R4YXR0cjoKK0VOVFJZKGZsaXN0eGF0dHIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mbGlzdHhhdHRyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZsaXN0eGF0dHIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZsaXN0eGF0dHIKK0VORChmbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmxvY2suUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Zsb2NrLlMKaW5kZXggYzE3MjNhMS4uOGQ3MGM5ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmxvY2suUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mbG9jay5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGZsb2NrCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGZsb2NrCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWZsb2NrOgorRU5UUlkoZmxvY2spCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mbG9jaworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9mbG9jawogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZmxvY2sKK0VORChmbG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKaW5kZXggMjUyNmFlMC4uZmJhMmQ2ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZnJlbW92ZXhhdHRyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGZyZW1vdmV4YXR0cgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1mcmVtb3ZleGF0dHI6CitFTlRSWShmcmVtb3ZleGF0dHIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mcmVtb3ZleGF0dHIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZnJlbW92ZXhhdHRyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmcmVtb3ZleGF0dHIKK0VORChmcmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzZXR4YXR0ci5TCmluZGV4IDQ1NTJiMDcuLjY2M2MwZGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzZXR4YXR0ci5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGZzZXR4YXR0cgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBmc2V0eGF0dHIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZnNldHhhdHRyOgorRU5UUlkoZnNldHhhdHRyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZnNldHhhdHRyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZzZXR4YXR0cgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZnNldHhhdHRyCitFTkQoZnNldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzdGF0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZWFiZjguLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXQuUworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZnN0YXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZnN0YXQKLQotZnN0YXQ6Ci0gICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9mc3RhdDY0Ci0gICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQotICAgIG5vcAotMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQotICAgIG5vcAotICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZnN0YXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzdGF0NjQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzdGF0NjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjVjMjNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXQ2NC5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXQ2NCkKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9mc3RhdDY0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorRU5EKGZzdGF0NjQpCisKKyAgICAuZ2xvYmwgZnN0YXQKKyAgICAuZXF1IGZzdGF0LCBmc3RhdDY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3RhdGF0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3RhdGF0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3OGYwOTkuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXRhdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmc3RhdGF0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGZzdGF0YXQKLQotZnN0YXRhdDoKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZzdGF0YXQ2NAotICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKLSAgICBub3AKLTE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKLSAgICBub3AKLSAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZzdGF0YXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzdGF0YXQ2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXRhdDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiOGUxZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzdGF0YXQ2NC5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXRhdDY0KQorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZzdGF0YXQ2NAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChmc3RhdGF0NjQpCisKKyAgICAuZ2xvYmwgZnN0YXRhdAorICAgIC5lcXUgZnN0YXRhdCwgZnN0YXRhdDY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3luYy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN5bmMuUwppbmRleCAzODNiZDBjLi44MTlmMGYyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3luYy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzeW5jLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZnN5bmMKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZnN5bmMKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZnN5bmM6CitFTlRSWShmc3luYykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2ZzeW5jCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2ZzeW5jCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBmc3luYworRU5EKGZzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnRydW5jYXRlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdHJ1bmNhdGUuUwppbmRleCA3OTdkMjM5Li4wNTg5YzgxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdHJ1bmNhdGUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdHJ1bmNhdGUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmdHJ1bmNhdGUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZnRydW5jYXRlCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWZ0cnVuY2F0ZToKK0VOVFJZKGZ0cnVuY2F0ZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2Z0cnVuY2F0ZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9mdHJ1bmNhdGUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZ0cnVuY2F0ZQorRU5EKGZ0cnVuY2F0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TCmluZGV4IGU3ZjdmODEuLjA1OWZmNzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnRydW5jYXRlNjQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmdHJ1bmNhdGU2NAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBmdHJ1bmNhdGU2NAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1mdHJ1bmNhdGU2NDoKK0VOVFJZKGZ0cnVuY2F0ZTY0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZnRydW5jYXRlNjQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZnRydW5jYXRlNjQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGZ0cnVuY2F0ZTY0CitFTkQoZnRydW5jYXRlNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdXRleC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnV0ZXguUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVjODhjOC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdXRleC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBmdXRleAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBmdXRleAotCi1mdXRleDoKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2Z1dGV4Ci0gICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQotICAgIG5vcAotMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQotICAgIG5vcAotICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZnV0ZXgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGRlbnRzLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRkZW50cy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjgwMDZhLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGRlbnRzLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldGRlbnRzCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldGRlbnRzCi0KLWdldGRlbnRzOgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0ZGVudHM2NAotICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKLSAgICBub3AKLTE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKLSAgICBub3AKLSAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldGRlbnRzCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRlZ2lkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRlZ2lkLlMKaW5kZXggNWQ3NTQyMC4uOGFlMmQxZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZWdpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGVnaWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRlZ2lkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldGVnaWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0ZWdpZDoKK0VOVFJZKGdldGVnaWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRlZ2lkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldGVnaWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldGVnaWQKK0VORChnZXRlZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZXVpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZXVpZC5TCmluZGV4IGY4NzhlYTcuLmNmNWNmNmMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGV1aWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRldWlkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0ZXVpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBnZXRldWlkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWdldGV1aWQ6CitFTlRSWShnZXRldWlkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0ZXVpZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXRldWlkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXRldWlkCitFTkQoZ2V0ZXVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGdpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0Z2lkLlMKaW5kZXggMjA3ZDFhMS4uOWJkMWZjMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0Z2lkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0Z2lkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0Z2lkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldGdpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXRnaWQ6CitFTlRSWShnZXRnaWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRnaWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0Z2lkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXRnaWQKK0VORChnZXRnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRncm91cHMuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGdyb3Vwcy5TCmluZGV4IGQwYTEwYTMuLjJlZGExODUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGdyb3Vwcy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGdyb3Vwcy5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldGdyb3VwcwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBnZXRncm91cHMKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0Z3JvdXBzOgorRU5UUlkoZ2V0Z3JvdXBzKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0Z3JvdXBzCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldGdyb3VwcwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0Z3JvdXBzCitFTkQoZ2V0Z3JvdXBzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0aXRpbWVyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRpdGltZXIuUwppbmRleCA0MGY5MGYyLi4yZTM4MmM3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRpdGltZXIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRpdGltZXIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRpdGltZXIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0aXRpbWVyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWdldGl0aW1lcjoKK0VOVFJZKGdldGl0aW1lcikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldGl0aW1lcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXRpdGltZXIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldGl0aW1lcgorRU5EKGdldGl0aW1lcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwZWVybmFtZS5TCmluZGV4IDZkNDkxZGUuLjg2NDI3OTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRwZWVybmFtZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBnZXRwZWVybmFtZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXRwZWVybmFtZToKK0VOVFJZKGdldHBlZXJuYW1lKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0cGVlcm5hbWUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0cGVlcm5hbWUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldHBlZXJuYW1lCitFTkQoZ2V0cGVlcm5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwZ2lkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwZ2lkLlMKaW5kZXggZGM2ZWM5Ni4uNTYyYjljZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGdpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBnaWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRwZ2lkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHBnaWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0cGdpZDoKK0VOVFJZKGdldHBnaWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRwZ2lkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldHBnaWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldHBnaWQKK0VORChnZXRwZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwaWQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ0ZDI1Ni4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwaWQuUworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0cGlkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHBpZAotCi1nZXRwaWQ6Ci0gICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRwaWQKLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXRwaWQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBwaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBwaWQuUwppbmRleCAxOTczNDI0Li5hZmZmMGI5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwcGlkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cHBpZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldHBwaWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0cHBpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXRwcGlkOgorRU5UUlkoZ2V0cHBpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldHBwaWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0cHBpZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0cHBpZAorRU5EKGdldHBwaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc2dpZC5TCmluZGV4IGI3OGU5MGMuLjI0OGQzZjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc2dpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc2dpZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldHJlc2dpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBnZXRyZXNnaWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0cmVzZ2lkOgorRU5UUlkoZ2V0cmVzZ2lkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0cmVzZ2lkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldHJlc2dpZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0cmVzZ2lkCitFTkQoZ2V0cmVzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmVzdWlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRyZXN1aWQuUwppbmRleCAzMzZjMDQ5Li45MjRiNmNkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRyZXN1aWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRyZXN1aWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRyZXN1aWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0cmVzdWlkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWdldHJlc3VpZDoKK0VOVFJZKGdldHJlc3VpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldHJlc3VpZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXRyZXN1aWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldHJlc3VpZAorRU5EKGdldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJsaW1pdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKaW5kZXggNTU3YzJjMS4uMTk1NzBkNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0cmxpbWl0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHJsaW1pdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXRybGltaXQ6CitFTlRSWShnZXRybGltaXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRybGltaXQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0cmxpbWl0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXRybGltaXQKK0VORChnZXRybGltaXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRydXNhZ2UuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJ1c2FnZS5TCmluZGV4IGMyNzUwZjkuLjc1YmM4YmMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJ1c2FnZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJ1c2FnZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldHJ1c2FnZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBnZXRydXNhZ2UKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0cnVzYWdlOgorRU5UUlkoZ2V0cnVzYWdlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0cnVzYWdlCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldHJ1c2FnZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0cnVzYWdlCitFTkQoZ2V0cnVzYWdlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c2lkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzaWQuUwppbmRleCA5Y2ViNjVkLi42NDM2ZWNkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzaWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzaWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRzaWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgZ2V0c2lkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWdldHNpZDoKK0VOVFJZKGdldHNpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2dldHNpZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXRzaWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldHNpZAorRU5EKGdldHNpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCmluZGV4IDQzYjI4YzIuLmZmYWRkOTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c29ja25hbWUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRzb2NrbmFtZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBnZXRzb2NrbmFtZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXRzb2NrbmFtZToKK0VOVFJZKGdldHNvY2tuYW1lKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0c29ja25hbWUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0c29ja25hbWUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldHNvY2tuYW1lCitFTkQoZ2V0c29ja25hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKaW5kZXggYWZmZTUzOS4uNmViZTE1ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHNvY2tvcHQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBnZXRzb2Nrb3B0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHNvY2tvcHQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0c29ja29wdDoKK0VOVFJZKGdldHNvY2tvcHQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXRzb2Nrb3B0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldHNvY2tvcHQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGdldHNvY2tvcHQKK0VORChnZXRzb2Nrb3B0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dGlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR0aWQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI1OGVmMi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR0aWQuUworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0dGlkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHRpZAotCi1nZXR0aWQ6Ci0gICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXR0aWQKLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXR0aWQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKaW5kZXggMDA2NzUyZS4uNjcyZmFhMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgZ2V0dGltZW9mZGF5Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHRpbWVvZmRheQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1nZXR0aW1lb2ZkYXk6CitFTlRSWShnZXR0aW1lb2ZkYXkpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXR0aW1lb2ZkYXkKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfZ2V0dGltZW9mZGF5CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBnZXR0aW1lb2ZkYXkKK0VORChnZXR0aW1lb2ZkYXkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR1aWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHVpZC5TCmluZGV4IDc0NzMxOGEuLjU4NTg2MzIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHVpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHVpZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldHVpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBnZXR1aWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotZ2V0dWlkOgorRU5UUlkoZ2V0dWlkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfZ2V0dWlkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2dldHVpZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0dWlkCitFTkQoZ2V0dWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHhhdHRyLlMKaW5kZXggMmY4MmM0Yy4uMjhjN2ZlNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR4YXR0ci5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGdldHhhdHRyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGdldHhhdHRyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWdldHhhdHRyOgorRU5UUlkoZ2V0eGF0dHIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9nZXR4YXR0cgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9nZXR4YXR0cgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgZ2V0eGF0dHIKK0VORChnZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2luaXRfbW9kdWxlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbml0X21vZHVsZS5TCmluZGV4IGVlNjQ0YjMuLjk4OTYxNGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBpbml0X21vZHVsZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBpbml0X21vZHVsZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1pbml0X21vZHVsZToKK0VOVFJZKGluaXRfbW9kdWxlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfaW5pdF9tb2R1bGUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfaW5pdF9tb2R1bGUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGluaXRfbW9kdWxlCitFTkQoaW5pdF9tb2R1bGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwppbmRleCBmMWM0ZDkyLi43ZDMzMTVmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgaW5vdGlmeV9hZGRfd2F0Y2gKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgaW5vdGlmeV9hZGRfd2F0Y2gKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotaW5vdGlmeV9hZGRfd2F0Y2g6CitFTlRSWShpbm90aWZ5X2FkZF93YXRjaCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2lub3RpZnlfYWRkX3dhdGNoCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2lub3RpZnlfYWRkX3dhdGNoCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBpbm90aWZ5X2FkZF93YXRjaAorRU5EKGlub3RpZnlfYWRkX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCmluZGV4IGMzZmNmNDguLmU0ZWMyNjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgaW5vdGlmeV9pbml0MQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBpbm90aWZ5X2luaXQxCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWlub3RpZnlfaW5pdDE6CitFTlRSWShpbm90aWZ5X2luaXQxKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfaW5vdGlmeV9pbml0MQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9pbm90aWZ5X2luaXQxCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBpbm90aWZ5X2luaXQxCitFTkQoaW5vdGlmeV9pbml0MSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwppbmRleCAxMzE5MWFmLi5lZWM5ODU2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGlub3RpZnlfcm1fd2F0Y2gKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgaW5vdGlmeV9ybV93YXRjaAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1pbm90aWZ5X3JtX3dhdGNoOgorRU5UUlkoaW5vdGlmeV9ybV93YXRjaCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2lub3RpZnlfcm1fd2F0Y2gKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfaW5vdGlmeV9ybV93YXRjaAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgaW5vdGlmeV9ybV93YXRjaAorRU5EKGlub3RpZnlfcm1fd2F0Y2gpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pb3ByaW9fZ2V0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YmQxZDMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW9wcmlvX2dldC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBpb3ByaW9fZ2V0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGlvcHJpb19nZXQKLQotaW9wcmlvX2dldDoKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2lvcHJpb19nZXQKLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBpb3ByaW9fZ2V0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pb3ByaW9fc2V0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pb3ByaW9fc2V0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YjNiZGMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW9wcmlvX3NldC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBpb3ByaW9fc2V0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IGlvcHJpb19zZXQKLQotaW9wcmlvX3NldDoKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2lvcHJpb19zZXQKLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBpb3ByaW9fc2V0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9raWxsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9raWxsLlMKaW5kZXggMjBhNDg0ZS4uNDE1ZGE3MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMva2lsbC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2tpbGwuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBraWxsCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGtpbGwKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAota2lsbDoKK0VOVFJZKGtpbGwpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9raWxsCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2tpbGwKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGtpbGwKK0VORChraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMva2xvZ2N0bC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMva2xvZ2N0bC5TCmluZGV4IDVkMzBkYjIuLjEyM2Q4YTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2tsb2djdGwuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9rbG9nY3RsLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwga2xvZ2N0bAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBrbG9nY3RsCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWtsb2djdGw6CitFTlRSWShrbG9nY3RsKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc3lzbG9nCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3N5c2xvZwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQga2xvZ2N0bAorRU5EKGtsb2djdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xnZXR4YXR0ci5TCmluZGV4IDYyNjZhYWYuLmE5OTE2ZDkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xnZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xnZXR4YXR0ci5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGxnZXR4YXR0cgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBsZ2V0eGF0dHIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbGdldHhhdHRyOgorRU5UUlkobGdldHhhdHRyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbGdldHhhdHRyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2xnZXR4YXR0cgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbGdldHhhdHRyCitFTkQobGdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGlua2F0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saW5rYXQuUwppbmRleCBkYWUwN2RkLi5hMDVhOTk1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saW5rYXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saW5rYXQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBsaW5rYXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbGlua2F0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWxpbmthdDoKK0VOVFJZKGxpbmthdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2xpbmthdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9saW5rYXQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGxpbmthdAorRU5EKGxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpc3Rlbi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGlzdGVuLlMKaW5kZXggZjJlNjA4My4uN2JiMmVjOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGlzdGVuLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGlzdGVuLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbGlzdGVuCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGxpc3RlbgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1saXN0ZW46CitFTlRSWShsaXN0ZW4pCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9saXN0ZW4KKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbGlzdGVuCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBsaXN0ZW4KK0VORChsaXN0ZW4pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpc3R4YXR0ci5TCmluZGV4IGU3NTIzNDAuLmMxNjAxNzggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpc3R4YXR0ci5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIGxpc3R4YXR0cgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBsaXN0eGF0dHIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbGlzdHhhdHRyOgorRU5UUlkobGlzdHhhdHRyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbGlzdHhhdHRyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2xpc3R4YXR0cgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbGlzdHhhdHRyCitFTkQobGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGxpc3R4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGxpc3R4YXR0ci5TCmluZGV4IDlkYzg2OGUuLjliZjA1YjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xsaXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sbGlzdHhhdHRyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbGxpc3R4YXR0cgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBsbGlzdHhhdHRyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWxsaXN0eGF0dHI6CitFTlRSWShsbGlzdHhhdHRyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbGxpc3R4YXR0cgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9sbGlzdHhhdHRyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBsbGlzdHhhdHRyCitFTkQobGxpc3R4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKaW5kZXggZDdlNjYwOS4uZmU3M2RkYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbHJlbW92ZXhhdHRyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IGxyZW1vdmV4YXR0cgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1scmVtb3ZleGF0dHI6CitFTlRSWShscmVtb3ZleGF0dHIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9scmVtb3ZleGF0dHIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbHJlbW92ZXhhdHRyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBscmVtb3ZleGF0dHIKK0VORChscmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sc2Vlay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHNlZWsuUwppbmRleCAyNjljYzk1Li42ZDZiNGU1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sc2Vlay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xzZWVrLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbHNlZWsKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbHNlZWsKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbHNlZWs6CitFTlRSWShsc2VlaykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2xzZWVrCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX2xzZWVrCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBsc2VlaworRU5EKGxzZWVrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHNldHhhdHRyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sc2V0eGF0dHIuUwppbmRleCAyZGZkMjRhLi42OWVhMGEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sc2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sc2V0eGF0dHIuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBsc2V0eGF0dHIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbHNldHhhdHRyCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLWxzZXR4YXR0cjoKK0VOVFJZKGxzZXR4YXR0cikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX2xzZXR4YXR0cgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9sc2V0eGF0dHIKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIGxzZXR4YXR0cgorRU5EKGxzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21hZHZpc2UuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21hZHZpc2UuUwppbmRleCA4MzE4MjcyLi43ZDY3YjgwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tYWR2aXNlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWFkdmlzZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIG1hZHZpc2UKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbWFkdmlzZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1tYWR2aXNlOgorRU5UUlkobWFkdmlzZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX21hZHZpc2UKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbWFkdmlzZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbWFkdmlzZQorRU5EKG1hZHZpc2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9taW5jb3JlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9taW5jb3JlLlMKaW5kZXggNjI5YTQ2OC4uOTZmNWUyOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWluY29yZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21pbmNvcmUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBtaW5jb3JlCi0gICAgLmFsaWduIDQKLSAgICAuZW50IG1pbmNvcmUKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbWluY29yZToKK0VOVFJZKG1pbmNvcmUpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9taW5jb3JlCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX21pbmNvcmUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIG1pbmNvcmUKK0VORChtaW5jb3JlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWtkaXJhdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWtkaXJhdC5TCmluZGV4IDNmOGJjMTkuLjU1ZGQ5NzYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21rZGlyYXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ta2RpcmF0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbWtkaXJhdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBta2RpcmF0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLW1rZGlyYXQ6CitFTlRSWShta2RpcmF0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbWtkaXJhdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9ta2RpcmF0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBta2RpcmF0CitFTkQobWtkaXJhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21rbm9kYXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21rbm9kYXQuUwppbmRleCBmYzA1YmIzLi4xYTAzYThlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ta25vZGF0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWtub2RhdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIG1rbm9kYXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbWtub2RhdAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1ta25vZGF0OgorRU5UUlkobWtub2RhdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX21rbm9kYXQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbWtub2RhdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbWtub2RhdAorRU5EKG1rbm9kYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tbG9jay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWxvY2suUwppbmRleCAyMGNhY2RhLi4zY2Y3YzFiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tbG9jay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21sb2NrLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbWxvY2sKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbWxvY2sKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbWxvY2s6CitFTlRSWShtbG9jaykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX21sb2NrCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX21sb2NrCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBtbG9jaworRU5EKG1sb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWxvY2thbGwuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21sb2NrYWxsLlMKaW5kZXggMGFhYzA4Ny4uM2I5MGY0MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWxvY2thbGwuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tbG9ja2FsbC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIG1sb2NrYWxsCi0gICAgLmFsaWduIDQKLSAgICAuZW50IG1sb2NrYWxsCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLW1sb2NrYWxsOgorRU5UUlkobWxvY2thbGwpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9tbG9ja2FsbAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9tbG9ja2FsbAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbWxvY2thbGwKK0VORChtbG9ja2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21vdW50LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tb3VudC5TCmluZGV4IDFmOTUxY2UuLmZkZjI5OWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21vdW50LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbW91bnQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBtb3VudAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBtb3VudAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1tb3VudDoKK0VOVFJZKG1vdW50KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbW91bnQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbW91bnQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIG1vdW50CitFTkQobW91bnQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tcHJvdGVjdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXByb3RlY3QuUwppbmRleCA3ZDllNzg0Li41NjE4MzEwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tcHJvdGVjdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21wcm90ZWN0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbXByb3RlY3QKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbXByb3RlY3QKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbXByb3RlY3Q6CitFTlRSWShtcHJvdGVjdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX21wcm90ZWN0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX21wcm90ZWN0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBtcHJvdGVjdAorRU5EKG1wcm90ZWN0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXJlbWFwLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tcmVtYXAuUwppbmRleCAyMmRkZGE5Li43Y2JiOTRlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tcmVtYXAuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tcmVtYXAuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBtcmVtYXAKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgbXJlbWFwCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLW1yZW1hcDoKK0VOVFJZKG1yZW1hcCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX21yZW1hcAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9tcmVtYXAKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIG1yZW1hcAorRU5EKG1yZW1hcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21zeW5jLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tc3luYy5TCmluZGV4IDQ5Njk0MzMuLmZiNzQ2MmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21zeW5jLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXN5bmMuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBtc3luYwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBtc3luYworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1tc3luYzoKK0VOVFJZKG1zeW5jKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbXN5bmMKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbXN5bmMKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIG1zeW5jCitFTkQobXN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5sb2NrLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5sb2NrLlMKaW5kZXggNTlmMWQ0NC4uNmM2NWMwMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubG9jay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL211bmxvY2suUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBtdW5sb2NrCi0gICAgLmFsaWduIDQKLSAgICAuZW50IG11bmxvY2sKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbXVubG9jazoKK0VOVFJZKG11bmxvY2spCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9tdW5sb2NrCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX211bmxvY2sKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIG11bmxvY2sKK0VORChtdW5sb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubG9ja2FsbC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubG9ja2FsbC5TCmluZGV4IGQwYThlOWYuLmUzMGRkZGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL211bmxvY2thbGwuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5sb2NrYWxsLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbXVubG9ja2FsbAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBtdW5sb2NrYWxsCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLW11bmxvY2thbGw6CitFTlRSWShtdW5sb2NrYWxsKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbXVubG9ja2FsbAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9tdW5sb2NrYWxsCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBtdW5sb2NrYWxsCitFTkQobXVubG9ja2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL211bm1hcC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubWFwLlMKaW5kZXggZDRjMTA1Ny4uOTAzZWRkZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubWFwLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubWFwLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgbXVubWFwCi0gICAgLmFsaWduIDQKLSAgICAuZW50IG11bm1hcAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1tdW5tYXA6CitFTlRSWShtdW5tYXApCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9tdW5tYXAKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfbXVubWFwCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBtdW5tYXAKK0VORChtdW5tYXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL25hbm9zbGVlcC5TCmluZGV4IGFkM2IwZjkuLjhkYWU4OGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL25hbm9zbGVlcC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIG5hbm9zbGVlcAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBuYW5vc2xlZXAKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotbmFub3NsZWVwOgorRU5UUlkobmFub3NsZWVwKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfbmFub3NsZWVwCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX25hbm9zbGVlcAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgbmFub3NsZWVwCitFTkQobmFub3NsZWVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRkOGI4NS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcGVyZl9ldmVudF9vcGVuCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHBlcmZfZXZlbnRfb3BlbgotCi1wZXJmX2V2ZW50X29wZW46Ci0gICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9wZXJmX2V2ZW50X29wZW4KLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBwZXJmX2V2ZW50X29wZW4KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wZXJzb25hbGl0eS5TCmluZGV4IDU5YWFlYWMuLjJmNTFkMzkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGVyc29uYWxpdHkuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBwZXJzb25hbGl0eQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBwZXJzb25hbGl0eQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1wZXJzb25hbGl0eToKK0VOVFJZKHBlcnNvbmFsaXR5KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcGVyc29uYWxpdHkKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfcGVyc29uYWxpdHkKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHBlcnNvbmFsaXR5CitFTkQocGVyc29uYWxpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9waXBlMi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGlwZTIuUwppbmRleCA3OThiZDdiLi5iMDYzMDljIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9waXBlMi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BpcGUyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcGlwZTIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgcGlwZTIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotcGlwZTI6CitFTlRSWShwaXBlMikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3BpcGUyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3BpcGUyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBwaXBlMgorRU5EKHBpcGUyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJjdGwuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3ByY3RsLlMKaW5kZXggNWU5YTI4ZC4uNzE1NDRlZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJjdGwuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wcmN0bC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHByY3RsCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHByY3RsCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXByY3RsOgorRU5UUlkocHJjdGwpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9wcmN0bAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9wcmN0bAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgcHJjdGwKK0VORChwcmN0bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3ByZWFkNjQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3ByZWFkNjQuUwppbmRleCA4NzBiMTM4Li45ZTcyNDhiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wcmVhZDY0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJlYWQ2NC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHByZWFkNjQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgcHJlYWQ2NAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1wcmVhZDY0OgorRU5UUlkocHJlYWQ2NCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3ByZWFkNjQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfcHJlYWQ2NAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgcHJlYWQ2NAorRU5EKHByZWFkNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wcmxpbWl0NjQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BybGltaXQ2NC5TCmluZGV4IDE3ZTkxNTcuLmNhOTEzZGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BybGltaXQ2NC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BybGltaXQ2NC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHBybGltaXQ2NAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBwcmxpbWl0NjQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotcHJsaW1pdDY0OgorRU5UUlkocHJsaW1pdDY0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcHJsaW1pdDY0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3BybGltaXQ2NAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgcHJsaW1pdDY0CitFTkQocHJsaW1pdDY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHdyaXRlNjQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3B3cml0ZTY0LlMKaW5kZXggMWU4MDhmZi4uYWMyMDZhYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHdyaXRlNjQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wd3JpdGU2NC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHB3cml0ZTY0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHB3cml0ZTY0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXB3cml0ZTY0OgorRU5UUlkocHdyaXRlNjQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9wd3JpdGU2NAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9wd3JpdGU2NAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgcHdyaXRlNjQKK0VORChwd3JpdGU2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWQuUwppbmRleCBjNjQ5ODM3Li4xMzU1YjY2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHJlYWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgcmVhZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1yZWFkOgorRU5UUlkocmVhZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3JlYWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfcmVhZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgcmVhZAorRU5EKHJlYWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkYWhlYWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWRhaGVhZC5TCmluZGV4IDA5ZWFiOWUuLmIyOGRmMDggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWRhaGVhZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWRhaGVhZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHJlYWRhaGVhZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCByZWFkYWhlYWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotcmVhZGFoZWFkOgorRU5UUlkocmVhZGFoZWFkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcmVhZGFoZWFkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3JlYWRhaGVhZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgcmVhZGFoZWFkCitFTkQocmVhZGFoZWFkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZGxpbmthdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZGxpbmthdC5TCmluZGV4IDNlNWQ3MmYuLjVjZjg0YTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWRsaW5rYXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkbGlua2F0LlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcmVhZGxpbmthdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCByZWFkbGlua2F0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXJlYWRsaW5rYXQ6CitFTlRSWShyZWFkbGlua2F0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcmVhZGxpbmthdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9yZWFkbGlua2F0CiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCByZWFkbGlua2F0CitFTkQocmVhZGxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWR2LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkdi5TCmluZGV4IDFmMzY3YmUuLjU3OTUyYTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWR2LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZHYuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCByZWFkdgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCByZWFkdgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1yZWFkdjoKK0VOVFJZKHJlYWR2KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfcmVhZHYKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfcmVhZHYKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHJlYWR2CitFTkQocmVhZHYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWN2ZnJvbS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVjdmZyb20uUwppbmRleCAzYzIzMDNjLi43MDdiYTRiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWN2ZnJvbS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlY3Zmcm9tLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcmVjdmZyb20KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgcmVjdmZyb20KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotcmVjdmZyb206CitFTlRSWShyZWN2ZnJvbSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3JlY3Zmcm9tCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3JlY3Zmcm9tCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCByZWN2ZnJvbQorRU5EKHJlY3Zmcm9tKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVjdm1tc2cuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlY3ZtbXNnLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2ZDBkOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlY3ZtbXNnLlMKQEAgLTAsMCArMSwxOSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWN2bW1zZykKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9yZWN2bW1zZworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChyZWN2bW1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlY3Ztc2cuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlY3Ztc2cuUwppbmRleCBhYWYwMjJmLi5mZGNhYzMyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWN2bXNnLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVjdm1zZy5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHJlY3Ztc2cKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgcmVjdm1zZworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1yZWN2bXNnOgorRU5UUlkocmVjdm1zZykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3JlY3Ztc2cKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfcmVjdm1zZwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgcmVjdm1zZworRU5EKHJlY3Ztc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwppbmRleCAyOWRmNWQyLi5kOTllMWFlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgcmVtb3ZleGF0dHIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgcmVtb3ZleGF0dHIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotcmVtb3ZleGF0dHI6CitFTlRSWShyZW1vdmV4YXR0cikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3JlbW92ZXhhdHRyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3JlbW92ZXhhdHRyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCByZW1vdmV4YXR0cgorRU5EKHJlbW92ZXhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVuYW1lYXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlbmFtZWF0LlMKaW5kZXggYjdjMjEwZS4uYzg2NWQ3NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVuYW1lYXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZW5hbWVhdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHJlbmFtZWF0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHJlbmFtZWF0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXJlbmFtZWF0OgorRU5UUlkocmVuYW1lYXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9yZW5hbWVhdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9yZW5hbWVhdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgcmVuYW1lYXQKK0VORChyZW5hbWVhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwppbmRleCA2ZDYzZmVjLi4xYzczYWY2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNjaGVkX2dldF9wcmlvcml0eV9tYXgKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zY2hlZF9nZXRfcHJpb3JpdHlfbWF4OgorRU5UUlkoc2NoZWRfZ2V0X3ByaW9yaXR5X21heCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heAorRU5EKHNjaGVkX2dldF9wcmlvcml0eV9tYXgpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKaW5kZXggZGU4OGIzZS4uYjY5YjcyYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2NoZWRfZ2V0X3ByaW9yaXR5X21pbjoKK0VOVFJZKHNjaGVkX2dldF9wcmlvcml0eV9taW4pCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4KICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNjaGVkX2dldF9wcmlvcml0eV9taW4KK0VORChzY2hlZF9nZXRfcHJpb3JpdHlfbWluKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKaW5kZXggYWUyNjFkYi4uMzg3MjU3YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNjaGVkX2dldHBhcmFtCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNjaGVkX2dldHBhcmFtCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNjaGVkX2dldHBhcmFtOgorRU5UUlkoc2NoZWRfZ2V0cGFyYW0pCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zY2hlZF9nZXRwYXJhbQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9nZXRwYXJhbQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2NoZWRfZ2V0cGFyYW0KK0VORChzY2hlZF9nZXRwYXJhbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKaW5kZXggNmE0ZTZmNi4uOWIyOTNkYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2NoZWRfZ2V0c2NoZWR1bGVyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNjaGVkX2dldHNjaGVkdWxlcgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zY2hlZF9nZXRzY2hlZHVsZXI6CitFTlRSWShzY2hlZF9nZXRzY2hlZHVsZXIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzY2hlZF9nZXRzY2hlZHVsZXIKK0VORChzY2hlZF9nZXRzY2hlZHVsZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCmluZGV4IDQzNmY4YjMuLjNkN2I4YTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNjaGVkX3JyX2dldF9pbnRlcnZhbAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2NoZWRfcnJfZ2V0X2ludGVydmFsOgorRU5UUlkoc2NoZWRfcnJfZ2V0X2ludGVydmFsKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2NoZWRfcnJfZ2V0X2ludGVydmFsCitFTkQoc2NoZWRfcnJfZ2V0X2ludGVydmFsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKaW5kZXggOThiZjQ1OC4uYTBlOWY2YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNjaGVkX3NldGFmZmluaXR5Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHNjaGVkX3NldGFmZmluaXR5CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNjaGVkX3NldGFmZmluaXR5OgorRU5UUlkoc2NoZWRfc2V0YWZmaW5pdHkpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zY2hlZF9zZXRhZmZpbml0eQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9zZXRhZmZpbml0eQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2NoZWRfc2V0YWZmaW5pdHkKK0VORChzY2hlZF9zZXRhZmZpbml0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCmluZGV4IDJjMDNlOTMuLmE4YTg5ODIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzY2hlZF9zZXRwYXJhbQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzY2hlZF9zZXRwYXJhbQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zY2hlZF9zZXRwYXJhbToKK0VOVFJZKHNjaGVkX3NldHBhcmFtKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2NoZWRfc2V0cGFyYW0KKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2NoZWRfc2V0cGFyYW0KICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNjaGVkX3NldHBhcmFtCitFTkQoc2NoZWRfc2V0cGFyYW0pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCmluZGV4IGFkYjFmMTQuLmEyY2Q3ZmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNjaGVkX3NldHNjaGVkdWxlcgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzY2hlZF9zZXRzY2hlZHVsZXIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2NoZWRfc2V0c2NoZWR1bGVyOgorRU5UUlkoc2NoZWRfc2V0c2NoZWR1bGVyKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2NoZWRfc2V0c2NoZWR1bGVyCitFTkQoc2NoZWRfc2V0c2NoZWR1bGVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfeWllbGQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKaW5kZXggY2JlNzk5Yy4uMjk1MjY2ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfeWllbGQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF95aWVsZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNjaGVkX3lpZWxkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNjaGVkX3lpZWxkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNjaGVkX3lpZWxkOgorRU5UUlkoc2NoZWRfeWllbGQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zY2hlZF95aWVsZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zY2hlZF95aWVsZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2NoZWRfeWllbGQKK0VORChzY2hlZF95aWVsZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRmaWxlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kZmlsZS5TCmluZGV4IDIxOWEzMTEuLjVlNWU4ODcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRmaWxlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZGZpbGUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZW5kZmlsZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZW5kZmlsZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZW5kZmlsZToKK0VOVFJZKHNlbmRmaWxlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2VuZGZpbGUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2VuZGZpbGUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNlbmRmaWxlCitFTkQoc2VuZGZpbGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kZmlsZTY0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kZmlsZTY0LlMKaW5kZXggNzY2OTk3My4uNzhmMTkwOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZGZpbGU2NC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRmaWxlNjQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZW5kZmlsZTY0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHNlbmRmaWxlNjQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2VuZGZpbGU2NDoKK0VOVFJZKHNlbmRmaWxlNjQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zZW5kZmlsZTY0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NlbmRmaWxlNjQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNlbmRmaWxlNjQKK0VORChzZW5kZmlsZTY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZG1tc2cuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRtbXNnLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjNzU3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRtbXNnLlMKQEAgLTAsMCArMSwxOSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZW5kbW1zZykKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZW5kbW1zZworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChzZW5kbW1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRtc2cuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRtc2cuUwppbmRleCBmYWE0Y2YzLi44OGM2NTNlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kbXNnLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZG1zZy5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNlbmRtc2cKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2VuZG1zZworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZW5kbXNnOgorRU5UUlkoc2VuZG1zZykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NlbmRtc2cKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2VuZG1zZwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2VuZG1zZworRU5EKHNlbmRtc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kdG8uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmR0by5TCmluZGV4IDgwYTYxMTAuLmVmM2ZhOWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmR0by5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmR0by5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNlbmR0bwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZW5kdG8KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2VuZHRvOgorRU5UUlkoc2VuZHRvKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2VuZHRvCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NlbmR0bwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2VuZHRvCitFTkQoc2VuZHRvKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0ZnNnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGZzZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU4ZDJjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGZzZ2lkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRmc2dpZCkKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRmc2dpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORChzZXRmc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGZzdWlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRmc3VpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NmZkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRmc3VpZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2V0ZnN1aWQpCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0ZnN1aWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCitFTkQoc2V0ZnN1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGdpZC5TCmluZGV4IDdlNDYwYjguLjQ0MTI3Y2QgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGdpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGdpZC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNldGdpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZXRnaWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2V0Z2lkOgorRU5UUlkoc2V0Z2lkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0Z2lkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldGdpZAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2V0Z2lkCitFTkQoc2V0Z2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRncm91cHMuUwppbmRleCBmODlhNGE0Li5iZTRkYzEzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRncm91cHMuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRncm91cHMuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRncm91cHMKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0Z3JvdXBzCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNldGdyb3VwczoKK0VOVFJZKHNldGdyb3VwcykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldGdyb3VwcworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRncm91cHMKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldGdyb3VwcworRU5EKHNldGdyb3VwcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGl0aW1lci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0aXRpbWVyLlMKaW5kZXggNWExODUwYS4uOTY4YjQ1MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0aXRpbWVyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0aXRpbWVyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2V0aXRpbWVyCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNldGl0aW1lcgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZXRpdGltZXI6CitFTlRSWShzZXRpdGltZXIpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zZXRpdGltZXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0aXRpbWVyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZXRpdGltZXIKK0VORChzZXRpdGltZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRucy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0bnMuUwppbmRleCBmZDQ1MjllLi5hOTI3MGVjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRucy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldG5zLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2V0bnMKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0bnMKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2V0bnM6CitFTlRSWShzZXRucykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldG5zCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldG5zCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZXRucworRU5EKHNldG5zKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cGdpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cGdpZC5TCmluZGV4IGQ0MWUwMWMuLmQyZGI2MmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHBnaWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRwZ2lkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2V0cGdpZAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZXRwZ2lkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNldHBnaWQ6CitFTlRSWShzZXRwZ2lkKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0cGdpZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRwZ2lkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZXRwZ2lkCitFTkQoc2V0cGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHByaW9yaXR5LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRwcmlvcml0eS5TCmluZGV4IDQ0M2QwMTcuLjliNjgzMzUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHByaW9yaXR5LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRwcmlvcml0eQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzZXRwcmlvcml0eQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZXRwcmlvcml0eToKK0VOVFJZKHNldHByaW9yaXR5KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2V0cHJpb3JpdHkKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0cHJpb3JpdHkKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHByaW9yaXR5CitFTkQoc2V0cHJpb3JpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZWdpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVnaWQuUwppbmRleCBhOTFlMjFiLi42Yjc0NzRjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZWdpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlZ2lkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2V0cmVnaWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0cmVnaWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2V0cmVnaWQ6CitFTlRSWShzZXRyZWdpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldHJlZ2lkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldHJlZ2lkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZXRyZWdpZAorRU5EKHNldHJlZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXNnaWQuUwppbmRleCBkZDhhMzMwLi4yMjNhMGQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXNnaWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXNnaWQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRyZXNnaWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0cmVzZ2lkCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNldHJlc2dpZDoKK0VOVFJZKHNldHJlc2dpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldHJlc2dpZAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRyZXNnaWQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHJlc2dpZAorRU5EKHNldHJlc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlc3VpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVzdWlkLlMKaW5kZXggMTMxOWUyYy4uMWY5OTY4MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVzdWlkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVzdWlkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2V0cmVzdWlkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNldHJlc3VpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZXRyZXN1aWQ6CitFTlRSWShzZXRyZXN1aWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zZXRyZXN1aWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0cmVzdWlkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZXRyZXN1aWQKK0VORChzZXRyZXN1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXVpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmV1aWQuUwppbmRleCBlMjVmMmQ5Li5mYTljM2QyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXVpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJldWlkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2V0cmV1aWQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0cmV1aWQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2V0cmV1aWQ6CitFTlRSWShzZXRyZXVpZCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldHJldWlkCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldHJldWlkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZXRyZXVpZAorRU5EKHNldHJldWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmxpbWl0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRybGltaXQuUwppbmRleCA2NWIxY2Q4Li4wMTZlMjRjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRybGltaXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRybGltaXQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRybGltaXQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0cmxpbWl0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNldHJsaW1pdDoKK0VOVFJZKHNldHJsaW1pdCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldHJsaW1pdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXRybGltaXQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHJsaW1pdAorRU5EKHNldHJsaW1pdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHNpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0c2lkLlMKaW5kZXggYTBiYWQyYi4uOWYzY2I0OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0c2lkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0c2lkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2V0c2lkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNldHNpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZXRzaWQ6CitFTlRSWShzZXRzaWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zZXRzaWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0c2lkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZXRzaWQKK0VORChzZXRzaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKaW5kZXggMzE5MmQ5My4uYjIzNjhhMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHNvY2tvcHQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXRzb2Nrb3B0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHNldHNvY2tvcHQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2V0c29ja29wdDoKK0VOVFJZKHNldHNvY2tvcHQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zZXRzb2Nrb3B0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldHNvY2tvcHQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHNvY2tvcHQKK0VORChzZXRzb2Nrb3B0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwppbmRleCA2NzNiN2ZkLi5lM2E1YTA2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzZXR0aW1lb2ZkYXkKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0dGltZW9mZGF5CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNldHRpbWVvZmRheToKK0VOVFJZKHNldHRpbWVvZmRheSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldHRpbWVvZmRheQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zZXR0aW1lb2ZkYXkKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNldHRpbWVvZmRheQorRU5EKHNldHRpbWVvZmRheSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHVpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0dWlkLlMKaW5kZXggYWJmZGFmYi4uZmYzZGEwYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0dWlkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0dWlkLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2V0dWlkCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNldHVpZAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zZXR1aWQ6CitFTlRSWShzZXR1aWQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zZXR1aWQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2V0dWlkCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZXR1aWQKK0VORChzZXR1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0eGF0dHIuUwppbmRleCBiOWMxYWFhLi41YjNhMjQxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHhhdHRyLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc2V0eGF0dHIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2V0eGF0dHIKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc2V0eGF0dHI6CitFTlRSWShzZXR4YXR0cikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NldHhhdHRyCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3NldHhhdHRyCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzZXR4YXR0cgorRU5EKHNldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2h1dGRvd24uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NodXRkb3duLlMKaW5kZXggMGYyMjA4Zi4uNWRiMDQ2ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2h1dGRvd24uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaHV0ZG93bi5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNodXRkb3duCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHNodXRkb3duCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXNodXRkb3duOgorRU5UUlkoc2h1dGRvd24pCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zaHV0ZG93bgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zaHV0ZG93bgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc2h1dGRvd24KK0VORChzaHV0ZG93bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaWdhbHRzdGFjay5TCmluZGV4IGVjMWQ4YTEuLmY1NDM3NTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lnYWx0c3RhY2suUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzaWdhbHRzdGFjawotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzaWdhbHRzdGFjaworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zaWdhbHRzdGFjazoKK0VOVFJZKHNpZ2FsdHN0YWNrKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc2lnYWx0c3RhY2sKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc2lnYWx0c3RhY2sKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNpZ2FsdHN0YWNrCitFTkQoc2lnYWx0c3RhY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaWduYWxmZDQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ25hbGZkNC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGU2MTY4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ25hbGZkNC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCBzaWduYWxmZDQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc2lnbmFsZmQ0Ci0KLXNpZ25hbGZkNDoKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NpZ25hbGZkNAotICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKLSAgICBub3AKLTE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKLSAgICBub3AKLSAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHNpZ25hbGZkNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc29ja2V0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zb2NrZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY3NDA0ZS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zb2NrZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc29ja2V0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHNvY2tldAotCi1zb2NrZXQ6Ci0gICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zb2NrZXQKLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzb2NrZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NvY2tldHBhaXIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NvY2tldHBhaXIuUwppbmRleCBjMGY0MWUyLi43Zjg1ZGEzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zb2NrZXRwYWlyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc29ja2V0cGFpci5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHNvY2tldHBhaXIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc29ja2V0cGFpcgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zb2NrZXRwYWlyOgorRU5UUlkoc29ja2V0cGFpcikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3NvY2tldHBhaXIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc29ja2V0cGFpcgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc29ja2V0cGFpcgorRU5EKHNvY2tldHBhaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zcGxpY2UuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NwbGljZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NWI3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zcGxpY2UuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNwbGljZSkKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zcGxpY2UKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCitFTkQoc3BsaWNlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9mZi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9mZi5TCmluZGV4IDFlZDUwODMuLmNlNzgyZDAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N3YXBvZmYuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zd2Fwb2ZmLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc3dhcG9mZgotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzd2Fwb2ZmCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXN3YXBvZmY6CitFTlRSWShzd2Fwb2ZmKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc3dhcG9mZgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zd2Fwb2ZmCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzd2Fwb2ZmCitFTkQoc3dhcG9mZikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N3YXBvbi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9uLlMKaW5kZXggMDhhODViMC4uMTI3YzNhOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9uLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9uLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc3dhcG9uCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHN3YXBvbgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zd2Fwb246CitFTlRSWShzd2Fwb24pCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl9zd2Fwb24KKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc3dhcG9uCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzd2Fwb24KK0VORChzd2Fwb24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zeW1saW5rYXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5bWxpbmthdC5TCmluZGV4IDljNDMyNDEuLmIwNjkwYTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5bWxpbmthdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5bWxpbmthdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHN5bWxpbmthdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzeW1saW5rYXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotc3ltbGlua2F0OgorRU5UUlkoc3ltbGlua2F0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc3ltbGlua2F0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3N5bWxpbmthdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc3ltbGlua2F0CitFTkQoc3ltbGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3luYy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3luYy5TCmluZGV4IDBlMGVlMWYuLjg4NThlNzQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5bmMuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zeW5jLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgc3luYwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCBzeW5jCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXN5bmM6CitFTlRSWShzeW5jKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfc3luYworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl9zeW5jCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBzeW5jCitFTkQoc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5c2luZm8uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5c2luZm8uUwppbmRleCAzYWNmYmY3Li5iZWVmYzBlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zeXNpbmZvLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3lzaW5mby5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHN5c2luZm8KLSAgICAuYWxpZ24gNAotICAgIC5lbnQgc3lzaW5mbworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1zeXNpbmZvOgorRU5UUlkoc3lzaW5mbykKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3N5c2luZm8KKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfc3lzaW5mbwogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgc3lzaW5mbworRU5EKHN5c2luZm8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90ZWUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RlZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMTU5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90ZWUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHRlZSkKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl90ZWUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCitFTkQodGVlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGdraWxsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90Z2tpbGwuUwppbmRleCA1ZGUzM2QwLi5iZWEyMTFkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90Z2tpbGwuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90Z2tpbGwuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCB0Z2tpbGwKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgdGdraWxsCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXRna2lsbDoKK0VOVFJZKHRna2lsbCkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3Rna2lsbAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl90Z2tpbGwKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHRna2lsbAorRU5EKHRna2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCmluZGV4IDI1MjgzNTUuLjExNmM2MjggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCB0aW1lcmZkX2NyZWF0ZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB0aW1lcmZkX2NyZWF0ZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi10aW1lcmZkX2NyZWF0ZToKK0VOVFJZKHRpbWVyZmRfY3JlYXRlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdGltZXJmZF9jcmVhdGUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdGltZXJmZF9jcmVhdGUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHRpbWVyZmRfY3JlYXRlCitFTkQodGltZXJmZF9jcmVhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCmluZGV4IGIzOGMyZDQuLmRmNzEzOGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHRpbWVyZmRfZ2V0dGltZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB0aW1lcmZkX2dldHRpbWUKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotdGltZXJmZF9nZXR0aW1lOgorRU5UUlkodGltZXJmZF9nZXR0aW1lKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdGltZXJmZF9nZXR0aW1lCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3RpbWVyZmRfZ2V0dGltZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdGltZXJmZF9nZXR0aW1lCitFTkQodGltZXJmZF9nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwppbmRleCAxMWRjNjFiLi4yYmZhZGI5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCB0aW1lcmZkX3NldHRpbWUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgdGltZXJmZF9zZXR0aW1lCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXRpbWVyZmRfc2V0dGltZToKK0VOVFJZKHRpbWVyZmRfc2V0dGltZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3RpbWVyZmRfc2V0dGltZQorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl90aW1lcmZkX3NldHRpbWUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHRpbWVyZmRfc2V0dGltZQorRU5EKHRpbWVyZmRfc2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVzLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90aW1lcy5TCmluZGV4IDI0OGEyM2YuLjkwY2U5N2YgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVzLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXMuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCB0aW1lcwotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB0aW1lcworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi10aW1lczoKK0VOVFJZKHRpbWVzKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdGltZXMKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdGltZXMKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHRpbWVzCitFTkQodGltZXMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90a2lsbC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGtpbGwuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgwYjUwNi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90a2lsbC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCB0a2lsbAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB0a2lsbAotCi10a2lsbDoKLSAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3RraWxsCi0gICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQotICAgIG5vcAotMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQotICAgIG5vcAotICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdGtpbGwKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RydW5jYXRlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90cnVuY2F0ZS5TCmluZGV4IGE0MjU2ZGMuLjY4MDA3MDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RydW5jYXRlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdHJ1bmNhdGUuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCB0cnVuY2F0ZQotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB0cnVuY2F0ZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi10cnVuY2F0ZToKK0VOVFJZKHRydW5jYXRlKQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdHJ1bmNhdGUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdHJ1bmNhdGUKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHRydW5jYXRlCitFTkQodHJ1bmNhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90cnVuY2F0ZTY0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90cnVuY2F0ZTY0LlMKaW5kZXggOWY0OGRhMC4uODcwZTczNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdHJ1bmNhdGU2NC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RydW5jYXRlNjQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCB0cnVuY2F0ZTY0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHRydW5jYXRlNjQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotdHJ1bmNhdGU2NDoKK0VOVFJZKHRydW5jYXRlNjQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl90cnVuY2F0ZTY0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3RydW5jYXRlNjQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHRydW5jYXRlNjQKK0VORCh0cnVuY2F0ZTY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW1hc2suUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VtYXNrLlMKaW5kZXggZDc0Y2Y5MC4uY2NmNDI5MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW1hc2suUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bWFzay5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHVtYXNrCi0gICAgLmFsaWduIDQKLSAgICAuZW50IHVtYXNrCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXVtYXNrOgorRU5UUlkodW1hc2spCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl91bWFzaworICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl91bWFzawogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdW1hc2sKK0VORCh1bWFzaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Vtb3VudDIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Vtb3VudDIuUwppbmRleCA2MTY0Zjc2Li42NWE3MTI5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bW91bnQyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW1vdW50Mi5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHVtb3VudDIKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgdW1vdW50MgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi11bW91bnQyOgorRU5UUlkodW1vdW50MikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3Vtb3VudDIKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdW1vdW50MgogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdW1vdW50MgorRU5EKHVtb3VudDIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bmFtZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5hbWUuUwppbmRleCBhMTA1MWEyLi5mNTQwYjNhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bmFtZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VuYW1lLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgdW5hbWUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgdW5hbWUKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotdW5hbWU6CitFTlRSWSh1bmFtZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3VuYW1lCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3VuYW1lCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCB1bmFtZQorRU5EKHVuYW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5saW5rYXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VubGlua2F0LlMKaW5kZXggMGNhNzdmZS4uMDAxZjljZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5saW5rYXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bmxpbmthdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHVubGlua2F0Ci0gICAgLmFsaWduIDQKLSAgICAuZW50IHVubGlua2F0CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXVubGlua2F0OgorRU5UUlkodW5saW5rYXQpCiAgICAgLnNldCBub3Jlb3JkZXIKLSAgICAuY3Bsb2FkICR0OQotICAgIGxpICR2MCwgX19OUl91bmxpbmthdAorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl91bmxpbmthdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdW5saW5rYXQKK0VORCh1bmxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Vuc2hhcmUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Vuc2hhcmUuUwppbmRleCA1OTJjYzYxLi4xM2NhNDUyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bnNoYXJlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5zaGFyZS5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHVuc2hhcmUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgdW5zaGFyZQorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi11bnNoYXJlOgorRU5UUlkodW5zaGFyZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3Vuc2hhcmUKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfdW5zaGFyZQogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdW5zaGFyZQorRU5EKHVuc2hhcmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91dGltZW5zYXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3V0aW1lbnNhdC5TCmluZGV4IDQyZmU0ZjkuLjE0ZTVhMTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3V0aW1lbnNhdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3V0aW1lbnNhdC5TCkBAIC0xLDIzICsxLDE5IEBACiAvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIHV0aW1lbnNhdAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB1dGltZW5zYXQKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotdXRpbWVuc2F0OgorRU5UUlkodXRpbWVuc2F0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfdXRpbWVuc2F0CisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3V0aW1lbnNhdAogICAgIHN5c2NhbGwKLSAgICBibmV6ICRhMywgMWYKLSAgICBtb3ZlICRhMCwgJHYwCi0gICAgaiAkcmEKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQogICAgIG5vcAogMToKLSAgICBsYSAkdDksX19zZXRfZXJybm8KLSAgICBqICR0OQorICAgIGxhIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgaiB0OQogICAgIG5vcAogICAgIC5zZXQgcmVvcmRlcgotICAgIC5lbmQgdXRpbWVuc2F0CitFTkQodXRpbWVuc2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdm1zcGxpY2UuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Ztc3BsaWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5MWY1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Ztc3BsaWNlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh2bXNwbGljZSkKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl92bXNwbGljZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKK0VORCh2bXNwbGljZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dhaXQ0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93YWl0NC5TCmluZGV4IDhjNTNlY2EuLjhhMTI1MzMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dhaXQ0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvd2FpdDQuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCB3YWl0NAotICAgIC5hbGlnbiA0Ci0gICAgLmVudCB3YWl0NAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi13YWl0NDoKK0VOVFJZKHdhaXQ0KQogICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfd2FpdDQKKyAgICAuY3Bsb2FkIHQ5CisgICAgbGkgdjAsIF9fTlJfd2FpdDQKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHdhaXQ0CitFTkQod2FpdDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93cml0ZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvd3JpdGUuUwppbmRleCA4NWZlNGQwLi42MmRjMzZmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93cml0ZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dyaXRlLlMKQEAgLTEsMjMgKzEsMTkgQEAKIC8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0gICAgLnRleHQKLSAgICAuZ2xvYmwgd3JpdGUKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgd3JpdGUKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAotd3JpdGU6CitFTlRSWSh3cml0ZSkKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3dyaXRlCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCBfX05SX3dyaXRlCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCB3cml0ZQorRU5EKHdyaXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvd3JpdGV2LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93cml0ZXYuUwppbmRleCA0ZTIzMDQ5Li5kOGQ2NjE2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93cml0ZXYuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93cml0ZXYuUwpAQCAtMSwyMyArMSwxOSBAQAogLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KIAotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSAgICAudGV4dAotICAgIC5nbG9ibCB3cml0ZXYKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgd3JpdGV2CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLXdyaXRldjoKK0VOVFJZKHdyaXRldikKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCBfX05SX3dyaXRldgorICAgIC5jcGxvYWQgdDkKKyAgICBsaSB2MCwgX19OUl93cml0ZXYKICAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKICAgICBub3AKIDE6Ci0gICAgbGEgJHQ5LF9fc2V0X2Vycm5vCi0gICAgaiAkdDkKKyAgICBsYSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGogdDkKICAgICBub3AKICAgICAuc2V0IHJlb3JkZXIKLSAgICAuZW5kIHdyaXRldgorRU5EKHdyaXRldikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMjY2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpZiAoX01JUFNfU0lNID09IF9BQklPMzIpIHx8IChfTUlQU19TSU0gPT0gX0FCSTMyKQorRlJBTUVTWgkJPQlNS0ZTSVooTkFSR1NBVkUsMCkKK0ZSQU1FX0FSRwk9CTAqUkVHU1oKK0ZSQU1FX0ZOCT0JMSpSRUdTWgorI2Vsc2UKK0ZSQU1FU1oJCT0JTUtGU0laKDAsMykKK0ZSQU1FX0dQCT0JRlJBTUVTWi0xKlJFR1NaCitGUkFNRV9BUkcJPQlGUkFNRVNaLTIqUkVHU1oKK0ZSQU1FX0ZOCT0JRlJBTUVTWi0zKlJFR1NaCisjZW5kaWYKKworLy8gcGlkX3QgX19iaW9uaWNfY2xvbmUoaW50IGZsYWdzLCB2b2lkKiBjaGlsZF9zdGFjaywgcGlkX3QqIHBhcmVudF90aWQsIHZvaWQqIHRscywgcGlkX3QqIGNoaWxkX3RpZCwgaW50ICgqZm4pKHZvaWQqKSwgdm9pZCogYXJnKTsKK0xFQUYoX19iaW9uaWNfY2xvbmUsIEZSQU1FU1opCisJUFRSX1NVQlUgc3AsIEZSQU1FU1oJCQkjIGFsbG9jYXRlIHN0YWNrIGZyYW1lCisJU0VUVVBfR1A2NChGUkFNRV9HUCxfX2Jpb25pY19jbG9uZSkKKwlTQVZFX0dQKEZSQU1FX0dQKQorCisJIyBzZXQgdXAgY2hpbGQgc3RhY2sKKwlQVFJfU1VCVSBhMSxGUkFNRVNaCisjaWYgKF9NSVBTX1NJTSA9PSBfQUJJTzMyKSB8fCAoX01JUFNfU0lNID09IF9BQkkzMikKKwlQVFJfTAl0MCxGUkFNRVNaKzUqUkVHU1ooc3ApCSMgZm4KKwlQUkxfTAl0MSxGUkFNRVNaKzYqUkVHU1ooc3ApCSMgYXJnCisJUFRSX1MJdDAsRlJBTUVfRk4oYTEpCQkjIGZuCisJUFRSX1MJdDEsRlJBTUVfQVJHKGExKQkjIGFyZworI2Vsc2UKKwlQVFJfTAl0MCxGUkFNRV9HUChzcCkJCSMgY29weSBncCB0byBjaGlsZCBzdGFjaworCVBUUl9TCXQwLEZSQU1FX0dQKGExKQorCVBUUl9TCWE1LEZSQU1FX0ZOKGExKQkJIyBmbgorCVBUUl9TCWE2LEZSQU1FX0FSRyhhMSkJIyBhcmcKKyMgZW5kaWYKKworCSMgcmVtYWluZGVyIG9mIGFyZ3VtZW50cyBhcmUgY29ycmVjdCBmb3IgY2xvbmUgc3lzdGVtIGNhbGwKKwlMSQl2MCxfX05SX2Nsb25lCisJc3lzY2FsbAorCisJbW92ZSAgICBhMCx2MAorCWJuZXoJYTMsLkxfX2Vycm9yX2JjCisKKwliZXF6CXYwLC5MX190aHJlYWRfc3RhcnRfYmMKKworCVJFU1RPUkVfR1A2NAorCVBUUl9BRERVIHNwLEZSQU1FU1oKKwlqCXJhCisKKy5MX190aHJlYWRfc3RhcnRfYmM6CisJIyBDbGVhciByZXR1cm4gYWRkcmVzcyBpbiBjaGlsZCBzbyB3ZSBkb24ndCB1bndpbmQgZnVydGhlci4KKwlsaQlyYSwwCisKKwkjIHZvaWQgX19zdGFydF90aHJlYWQoaW50ICgqZnVuYykodm9pZCopLCB2b2lkICphcmcpCisJUFRSX0wJYTAsRlJBTUVfRk4oc3ApCQkjICBmbgorCVBUUl9MCWExLEZSQU1FX0FSRyhzcCkJIyAgYXJnCisJTEEJdDksX19zdGFydF90aHJlYWQKKwlSRVNUT1JFX0dQNjQKKwkvKgorCSAqIEZvciBPMzIgZXRjIHRoZSBjaGlsZCBzdGFjayBtdXN0IGhhdmUgc3BhY2UgZm9yIGEwLi5hMyB0byBiZSBzdG9yZWQKKwkgKiBGb3IgTjY0IGV0YywgdGhlIGNoaWxkIHN0YWNrIGNhbiBiZSByZXN0b3JlZCB0byB0aGUgb3JpZ2luYWwgdmFsdWUKKwkgKi8KKyNpZiAhKChfTUlQU19TSU0gPT0gX0FCSU8zMikgfHwgKF9NSVBTX1NJTSA9PSBfQUJJMzIpKQorCVBUUl9BRERVIHNwLEZSQU1FU1oKKyNlbmRpZgorCWoJdDkKKworLkxfX2Vycm9yX2JjOgorCUxBCXQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsRlJBTUVTWgorCWoJdDkKKwlFTkQoX19iaW9uaWNfY2xvbmUpCisuaGlkZGVuIF9fYmlvbmljX2Nsb25lCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmOGNjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworLy8gdm9pZCBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKHZvaWQqIHN0YWNrQmFzZSwgc2l6ZV90IHN0YWNrU2l6ZSkKK0VOVFJZX1BSSVZBVEUoX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bikKKyAgbGkJdjAsIF9fTlJfbXVubWFwCisgIHN5c2NhbGwKKyAgLy8gSWYgbXVubWFwIGZhaWxlZCwgd2UgaWdub3JlIHRoZSBmYWlsdXJlIGFuZCBleGl0IGFueXdheS4KKworICBsaQlhMCwgMAorICBsaQl2MCwgX19OUl9leGl0CisgIHN5c2NhbGwKKyAgLy8gVGhlIGV4aXQgc3lzY2FsbCBkb2VzIG5vdCByZXR1cm4uCitFTkQoX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL19zZXRqbXAuUyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL19zZXRqbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjM3ZTZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvX3NldGptcC5TCkBAIC0wLDAgKzEsMTUwIEBACisvKgkkT3BlbkJTRDogX3NldGptcC5TLHYgMS40IDIwMDUvMDgvMDcgMTY6NDA6MTUgZXNwaWUgRXhwICQgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBPcHN5Y29uIEFCICAod3d3Lm9wc3ljb24uc2UgLyB3d3cub3BzeWNvbi5jb20pCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE9wc3ljb24gQUIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCisgKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZWdudW0uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3NpZ25hbC5oPgorCisvKgorICogX3NldGptcCwgX2xvbmdqbXAgKG5vdCByZXN0b3Jpbmcgc2lnbmFsIHN0YXRlKQorICoKKyAqIFhYWCBGUFNFVCBzaG91bGQgcHJvYmFibHkgYmUgdGFrZW4gZnJvbSBTUiBzZXR0aW5nLiBobW1tLi4uCisgKiAgR1BPRkYgYW5kIEZSQU1FU0laRSBtdXN0IGJlIHRoZSBzYW1lIGZvciBib3RoIF9zZXRqbXAgYW5kIF9sb25nam1wIQorICoKKyAqLworCitGUkFNRVNaPSBNS0ZTSVooMCw0KQorR1BPRkY9IEZSQU1FU1otMipSRUdTWgorCitMRUFGKF9zZXRqbXAsIEZSQU1FU1opCisJUFRSX1NVQlUgc3AsIEZSQU1FU1oKKwlTRVRVUF9HUDY0KEdQT0ZGLCBfc2V0am1wKQorCVNBVkVfR1AoR1BPRkYpCisJLnNldAlub3Jlb3JkZXIKKyNpZiBkZWZpbmVkKF9fbWlwczY0KQorCWRsaQl2MCwgMHhBQ0VEQkFERQkJCSMgc2lnY29udGV4dCBtYWdpYyBudW1iZXIKKyNlbHNlCisJbGkJdjAsIDB4QUNFREJBREUJCQkjIHNpZ2NvbnRleHQgbWFnaWMgbnVtYmVyCisjZW5kaWYKKwlSRUdfUwl2MCwgU0NfUkVHUytaRVJPKlJFR1NaKGEwKQorCVJFR19TCXMwLCBTQ19SRUdTK1MwKlJFR1NaKGEwKQorCVJFR19TCXMxLCBTQ19SRUdTK1MxKlJFR1NaKGEwKQorCVJFR19TCXMyLCBTQ19SRUdTK1MyKlJFR1NaKGEwKQorCVJFR19TCXMzLCBTQ19SRUdTK1MzKlJFR1NaKGEwKQorCVJFR19TCXM0LCBTQ19SRUdTK1M0KlJFR1NaKGEwKQorCVJFR19TCXM1LCBTQ19SRUdTK1M1KlJFR1NaKGEwKQorCVJFR19TCXM2LCBTQ19SRUdTK1M2KlJFR1NaKGEwKQorCVJFR19TCXM3LCBTQ19SRUdTK1M3KlJFR1NaKGEwKQorCVJFR19TCXM4LCBTQ19SRUdTK1M4KlJFR1NaKGEwKQorCVJFR19MCXYwLCBHUE9GRihzcCkKKwlSRUdfUwl2MCwgU0NfUkVHUytHUCpSRUdTWihhMCkKKwlQVFJfQUREVSB2MCwgc3AsIEZSQU1FU1oKKwlSRUdfUwl2MCwgU0NfUkVHUytTUCpSRUdTWihhMCkKKwlSRUdfUwlyYSwgU0NfUEMoYTApCisKKyNpZiAhZGVmaW5lZChTT0ZURkxPQVQpCisJbGkJdjAsIDEJCQkJIyBiZSBuaWNlIGlmIHdlIGNvdWxkIHRlbGwKKwlSRUdfUwl2MCwgU0NfRlBVU0VEKGEwKQkJIyBzY19mcHVzZWQgPSAxCisJY2ZjMQl2MCwgJDMxCisJcy5kCSRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCisjaWYgX01JUFNfRlBTRVQgPT0gMzIKKwlzLmQJJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKShhMCkKKyNlbmRpZgorCVJFR19TCXYwLCBTQ19GUFJFR1MrKChGU1ItRjApKlJFR1NaKShhMCkKKyNlbmRpZiAvKiAhU09GVEZMT0FUICovCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKKwlqCXJhCisJIG1vdmUJdjAsIHplcm8KK0VORChfc2V0am1wKQorCitMRUFGKF9sb25nam1wLCBGUkFNRVNaKQorCVBUUl9TVUJVIHNwLCBGUkFNRVNaCisJU0VUVVBfR1A2NChHUE9GRiwgX2xvbmdqbXApCisJU0FWRV9HUChHUE9GRikKKwkuc2V0ICAgIG5vcmVvcmRlcgorCVJFR19MCXYwLCBTQ19SRUdTK1pFUk8qUkVHU1ooYTApCisJYm5lCXYwLCAweEFDRURCQURFLCBib3RjaAkJIyBqdW1wIGlmIGVycm9yCisJUkVHX0wJcmEsIFNDX1BDKGEwKQorCVJFR19MCXYwLCBTQ19GUFJFR1MrKChGU1ItRjApKlJFR1NaKShhMCkKKwlSRUdfTAlzMCwgU0NfUkVHUytTMCpSRUdTWihhMCkKKwlSRUdfTAlzMSwgU0NfUkVHUytTMSpSRUdTWihhMCkKKwlSRUdfTAlzMiwgU0NfUkVHUytTMipSRUdTWihhMCkKKwlSRUdfTAlzMywgU0NfUkVHUytTMypSRUdTWihhMCkKKwlSRUdfTAlzNCwgU0NfUkVHUytTNCpSRUdTWihhMCkKKwlSRUdfTAlzNSwgU0NfUkVHUytTNSpSRUdTWihhMCkKKwlSRUdfTAlzNiwgU0NfUkVHUytTNipSRUdTWihhMCkKKwlSRUdfTAlzNywgU0NfUkVHUytTNypSRUdTWihhMCkKKwlSRUdfTAlzOCwgU0NfUkVHUytTOCpSRUdTWihhMCkKKwlSRUdfTAlncCwgU0NfUkVHUytHUCpSRUdTWihhMCkKKwlSRUdfTAlzcCwgU0NfUkVHUytTUCpSRUdTWihhMCkKKyNpZiAhZGVmaW5lZChTT0ZURkxPQVQpCisJY3RjMQl2MCwgJDMxCisJbC5kCSRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCisjaWYgX01JUFNfRlBTRVQgPT0gMzIKKwlsLmQJJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKShhMCkKKyNlbmRpZgorI2VuZGlmIC8qICFTT0ZURkxPQVQgKi8KKwlibmUJYTEsIHplcm8sIDFmCisJIG5vcAorCWxpCWExLCAxCQkJIyBuZXZlciByZXR1cm4gMCEKKzE6CisJaglyYQorCSBtb3ZlCXYwLCBhMQorCitib3RjaDoKKwlqYWwJbG9uZ2ptcGVycm9yCisJbm9wCisJamFsCWFib3J0CisJbm9wCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKK0VORChfbG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL2F0ZXhpdC5oIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvYXRleGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5MDA4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL2F0ZXhpdC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworZXh0ZXJuIHZvaWQgKl9fZHNvX2hhbmRsZTsKK2V4dGVybiBpbnQgX19jeGFfYXRleGl0KHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcsIHZvaWQgKmRzbyk7CisKK19fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQoraW50IGF0ZXhpdCh2b2lkICgqZnVuYykodm9pZCkpCit7CisgIHJldHVybiAoX19jeGFfYXRleGl0KCh2b2lkICgqKSh2b2lkICopKWZ1bmMsICh2b2lkICopMCwgJl9fZHNvX2hhbmRsZSkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvY3J0YmVnaW4uYyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL2NydGJlZ2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhMzFhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL2NydGJlZ2luLmMKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiLi4vLi4vYmlvbmljL2xpYmNfaW5pdF9jb21tb24uaCIKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIucHJlaW5pdF9hcnJheSIpKSkKK3ZvaWQgKCpfX1BSRUlOSVRfQVJSQVlfXykodm9pZCkgPSAodm9pZCAoKikodm9pZCkpIC0xOworCitfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5pbml0X2FycmF5IikpKQordm9pZCAoKl9fSU5JVF9BUlJBWV9fKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSkgLTE7CisKK19fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmZpbmlfYXJyYXkiKSkpCit2b2lkICgqX19GSU5JX0FSUkFZX18pKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKSAtMTsKKworCitfX0xJQkNfSElEREVOX18gIHZvaWQgZG9fbWlwc19zdGFydCh2b2lkICpyYXdfYXJncykgeworICBzdHJ1Y3RvcnNfYXJyYXlfdCBhcnJheTsKKyAgYXJyYXkucHJlaW5pdF9hcnJheSA9ICZfX1BSRUlOSVRfQVJSQVlfXzsKKyAgYXJyYXkuaW5pdF9hcnJheSA9ICZfX0lOSVRfQVJSQVlfXzsKKyAgYXJyYXkuZmluaV9hcnJheSA9ICZfX0ZJTklfQVJSQVlfXzsKKworICBfX2xpYmNfaW5pdChyYXdfYXJncywgTlVMTCwgJm1haW4sICZhcnJheSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSByZXR1cm4gYWRkcmVzcyB3aXRoIGEgYnJhbmNoLWFuZC1saW5rCisgKiBpbnN0cnVjdGlvbiAoYmFsKSBhbmQgdGhlbiB1c2VzIGEgLmNwc2V0dXAgdG8gY29tcHV0ZSB0aGUgR2xvYmFsCisgKiBPZmZzZXQgVGFibGUgKEdPVCkgcG9pbnRlciAoJGdwKS4gVGhlICRncCBpcyB0aGVuIHVzZWQgdG8gbG9hZAorICogdGhlIGFkZHJlc3Mgb2YgX2RvX21pcHNfc3RhcnQoKSBpbnRvICR0OSBqdXN0IGJlZm9yZSBjYWxsaW5nIGl0LgorICogVGVybWluYXRpbmcgdGhlIHN0YWNrIHdpdGggYSBOVUxMIHJldHVybiBhZGRyZXNzLgorICovCitfX2FzbV9fICgKKyIgICAgICAgLnNldCBwdXNoICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIC50ZXh0ICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgLmFsaWduICA0ICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAudHlwZSBfX3N0YXJ0LEBmdW5jdGlvbiAgICAgXG4iCisiICAgICAgIC5nbG9ibCBfX3N0YXJ0ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgLmdsb2JsICBfc3RhcnQgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIC5lbnQgICAgX19zdGFydCAgICAgICAgICAgICBcbiIKKyJfX3N0YXJ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiBfc3RhcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIC5mcmFtZSAgICRzcCwzMiwkMCAgICAgICAgICBcbiIKKyIgICAgICAgLm1hc2sgICAweDgwMDAwMDAwLC04ICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIG1vdmUgICAgJGEwLCAkc3AgICAgICAgICAgICBcbiIKKyIgICAgICAgZGFkZGl1ICAkc3AsICRzcCwgLTMyICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIC5zZXQgbm9yZW9yZGVyICAgICAgICAgICAgICBcbiIKKyIgICAgICAgYmFsICAgICAxZiAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICBub3AgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgLmNwc2V0dXAgJHJhLDE2LDFiICAgICAgICAgIFxuIgorIiAgICAgICAuc2V0IHJlb3JkZXIgICAgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgc2QgICAgICAkMCwgMjQoJHNwKSAgICAgICAgIFxuIgorIiAgICAgICBqYWwgICAgIGRvX21pcHNfc3RhcnQgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIyOiAgICAgYiAgICAgICAyYiAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAuZW5kICAgIF9fc3RhcnQgICAgICAgICAgICAgXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgLnNldCBwb3AgICAgICAgICAgICAgICAgICAgIFxuIgorKTsKKworI2luY2x1ZGUgIi4uLy4uL2FyY2gtY29tbW9uL2Jpb25pYy9fX2Rzb19oYW5kbGUuaCIKKyNpbmNsdWRlICJhdGV4aXQuaCIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL2NydGJlZ2luX3NvLmMgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9jcnRiZWdpbl9zby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjRjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9jcnRiZWdpbl9zby5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworZXh0ZXJuIHZvaWQgX19jeGFfZmluYWxpemUodm9pZCAqKTsKK2V4dGVybiB2b2lkICpfX2Rzb19oYW5kbGU7CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpLGRlc3RydWN0b3IpKQordm9pZCBfX29uX2RsY2xvc2UoKSB7CisgIF9fY3hhX2ZpbmFsaXplKCZfX2Rzb19oYW5kbGUpOworfQorCisjaW5jbHVkZSAiLi4vLi4vYXJjaC1jb21tb24vYmlvbmljL19fZHNvX2hhbmRsZV9zby5oIgorI2luY2x1ZGUgImF0ZXhpdC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvc2V0am1wLlMgYi9saWJjL2FyY2gtbWlwczY0L2Jpb25pYy9zZXRqbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTc4NmJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvc2V0am1wLlMKQEAgLTAsMCArMSwxNzQgQEAKKy8qICAgICAgJE9wZW5CU0Q6IHNldGptcC5TLHYgMS41IDIwMDUvMDgvMDcgMTY6NDA6MTUgZXNwaWUgRXhwICQgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgT3BzeWNvbiBBQiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3JlZ251bS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvc2lnbmFsLmg+CisKKy8qCisgKiBzZXRqbXAsIGxvbmdqbXAgaW1wbGVtZW50YXRpb24gZm9yIGxpYmMuIHRoaXMgY29kZSBkZXBlbmRzCisgKiBvbiB0aGUgbGF5b3V0IG9mIHRoZSBzdHJ1Y3Qgc2lnY29udGV4dCBpbiBtYWNoaW5lL3NpZ25hbC5oLgorICoKKyAqLworCitGUkFNRVNaPSBNS0ZTSVooMiw2KQorQTFPRkY9IEZSQU1FU1otNCpSRUdTWgorQTBPRkY9IEZSQU1FU1otMypSRUdTWgorR1BPRkY9IEZSQU1FU1otMipSRUdTWgorUkFPRkY9IEZSQU1FU1otMSpSRUdTWgorCitOT05fTEVBRihzZXRqbXAsIEZSQU1FU1osIHJhKQorCS5tYXNrCTB4ODAwMDAwMDAsIFJBT0ZGCisJUFRSX1NVQlUgc3AsIEZSQU1FU1oJCQkjIGFsbG9jYXRlIHN0YWNrIGZyYW1lCisJU0VUVVBfR1A2NChHUE9GRiwgc2V0am1wKQorCVNBVkVfR1AoR1BPRkYpCisJLnNldAlyZW9yZGVyCisJUkVHX1MJcmEsIFJBT0ZGKHNwKQkJCSMgc2F2ZSBzdGF0ZQorCVJFR19TCWEwLCBBME9GRihzcCkKKworCW1vdmUJYTAsIHplcm8JCQkjIGdldCBjdXJyZW50IHNpZ25hbCBtYXNrCisJamFsCXNpZ2Jsb2NrCisKKwlSRUdfTAl2MSwgQTBPRkYoc3ApCQkJIyB2MSA9IGptcGJ1ZgorCVJFR19TCXYwLCBTQ19NQVNLKHYxKQkJCSMgc2F2ZSBzY19tYXNrID0gc2lnYmxvY2soMCkKKworCVJFR19MCWEwLCBBME9GRihzcCkJCQkjIHJlc3RvcmUgam1wYnVmCisJUkVHX0wJcmEsIFJBT0ZGKHNwKQorCVJFR19TCXJhLCBTQ19QQyhhMCkJCQkjIHNjX3BjID0gcmV0dXJuIGFkZHJlc3MKKyNpZiBkZWZpbmVkKF9fbWlwczY0KQorCWRsaQl2MCwgMHhBQ0VEQkFERQkJCSMgc2lnY29udGV4dCBtYWdpYyBudW1iZXIKKyNlbHNlCisJbGkJdjAsIDB4QUNFREJBREUJCQkjIHNpZ2NvbnRleHQgbWFnaWMgbnVtYmVyCisjZW5kaWYKKwlSRUdfUwl2MCwgU0NfUkVHUytaRVJPKlJFR1NaKGEwKQorCVJFR19TCXMwLCBTQ19SRUdTK1MwKlJFR1NaKGEwKQorCVJFR19TCXMxLCBTQ19SRUdTK1MxKlJFR1NaKGEwKQorCVJFR19TCXMyLCBTQ19SRUdTK1MyKlJFR1NaKGEwKQorCVJFR19TCXMzLCBTQ19SRUdTK1MzKlJFR1NaKGEwKQorCVJFR19TCXM0LCBTQ19SRUdTK1M0KlJFR1NaKGEwKQorCVJFR19TCXM1LCBTQ19SRUdTK1M1KlJFR1NaKGEwKQorCVJFR19TCXM2LCBTQ19SRUdTK1M2KlJFR1NaKGEwKQorCVJFR19TCXM3LCBTQ19SRUdTK1M3KlJFR1NaKGEwKQorCVJFR19TCXM4LCBTQ19SRUdTK1M4KlJFR1NaKGEwKQorCVJFR19MCXYwLCBHUE9GRihzcCkKKwlSRUdfUwl2MCwgU0NfUkVHUytHUCpSRUdTWihhMCkKKwlQVFJfQUREVSB2MCwgc3AsIEZSQU1FU1oKKwlSRUdfUwl2MCwgU0NfUkVHUytTUCpSRUdTWihhMCkKKworI2lmICFkZWZpbmVkKFNPRlRGTE9BVCkKKwlsaQl2MCwgMQkJCQkjIGJlIG5pY2UgaWYgd2UgY291bGQgdGVsbAorCVJFR19TCXYwLCBTQ19GUFVTRUQoYTApCQkjIHNjX2ZwdXNlZCA9IDEKKwljZmMxCXYwLCAkMzEKKwlzLmQJJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKShhMCkKKyNpZiBfTUlQU19GUFNFVCA9PSAzMgorCXMuZAkkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQorCXMuZAkkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKShhMCkKKwlzLmQJJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCisJcy5kCSRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQorI2VuZGlmCisJUkVHX1MJdjAsIFNDX0ZQUkVHUysoKEZTUi1GMCkqUkVHU1opKGEwKQorI2VuZGlmIC8qICFTT0ZURkxPQVQgKi8KKwltb3ZlCXYwLCB6ZXJvCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKKwlqCXJhCisKK2JvdGNoOgorCWphbAlsb25nam1wZXJyb3IKKwlqYWwJYWJvcnQKKwlSRVNUT1JFX0dQNjQKKwlQVFJfQUREVSBzcCwgRlJBTUVTWgorRU5EKHNldGptcCkKKworCitMRUFGKGxvbmdqbXAsIEZSQU1FU1opCisJUFRSX1NVQlUgc3AsIEZSQU1FU1oKKwlTRVRVUF9HUDY0KEdQT0ZGLCBsb25nam1wKQorCVNBVkVfR1AoR1BPRkYpCisJLnNldAlyZW9yZGVyCisJc3cJYTEsIEExT0ZGKHNwKQorCXN3CWEwLCBBME9GRihzcCkKKworCWx3CWEwLCBTQ19NQVNLKGEwKQorCWphbAlzaWdzZXRtYXNrCisKKwlsdwlhMCwgQTBPRkYoc3ApCisJbHcJYTEsIEExT0ZGKHNwKQorCisJLnNldAlub3Jlb3JkZXIKKwlSRUdfTAl2MCwgU0NfUkVHUytaRVJPKlJFR1NaKGEwKQorCWJuZQl2MCwgMHhBQ0VEQkFERSwgYm90Y2gJCSMganVtcCBpZiBlcnJvcgorCVJFR19MCXJhLCBTQ19QQyhhMCkKKwlSRUdfTAlzMCwgU0NfUkVHUytTMCpSRUdTWihhMCkKKwlSRUdfTAlzMSwgU0NfUkVHUytTMSpSRUdTWihhMCkKKwlSRUdfTAlzMiwgU0NfUkVHUytTMipSRUdTWihhMCkKKwlSRUdfTAlzMywgU0NfUkVHUytTMypSRUdTWihhMCkKKwlSRUdfTAlzNCwgU0NfUkVHUytTNCpSRUdTWihhMCkKKwlSRUdfTAlzNSwgU0NfUkVHUytTNSpSRUdTWihhMCkKKwlSRUdfTAlzNiwgU0NfUkVHUytTNipSRUdTWihhMCkKKwlSRUdfTAlzNywgU0NfUkVHUytTNypSRUdTWihhMCkKKwlSRUdfTAlzOCwgU0NfUkVHUytTOCpSRUdTWihhMCkKKwlSRUdfTAlncCwgU0NfUkVHUytHUCpSRUdTWihhMCkKKwlSRUdfTAlzcCwgU0NfUkVHUytTUCpSRUdTWihhMCkKKworI2lmICFkZWZpbmVkKFNPRlRGTE9BVCkKKwlSRUdfTAl2MCwgU0NfRlBSRUdTKygoRlNSLUYwKSpSRUdTWikoYTApCisJY3RjMQl2MCwgJDMxCisJbC5kCSRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCisjaWYgX01JUFNfRlBTRVQgPT0gMzIKKwlsLmQJJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKShhMCkKKwlsLmQJJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCisJbC5kCSRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQorCWwuZAkkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKShhMCkKKyNlbmRpZgorI2VuZGlmIC8qICFTT0ZURkxPQVQgKi8KKwlibmUJYTEsIHplcm8sIDFmCisJIG5vcAorCWxpCWExLCAxCQkJIyBuZXZlciByZXR1cm4gMCEKKzE6CisJaglyYQorCSBtb3ZlCXYwLCBhMQorCitFTkQobG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3NpZ3NldGptcC5TIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvc2lnc2V0am1wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQyZTVlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3NpZ3NldGptcC5TCkBAIC0wLDAgKzEsNzcgQEAKKy8qICRPcGVuQlNEOiBzaWdzZXRqbXAuUyx2IDEuNSAyMDA1LzA4LzA3IDE2OjQwOjE1IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MywgMTk5NSwKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEhhdmFyZCBFaWRuZXMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3JlZ251bS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CisKKy8qCisgKiB0cmFtcG9saW5lcyBmb3Igc2lnc2V0am1wIGFuZCAgc2lnbG9uZ2ptcCBzYXZlIGFuZCByZXN0b3JlIG1hc2suCisgKgorICovCitGUkFNRVNaPSBNS0ZTSVooMSwxKQorR1BPRkY9IEZSQU1FU1otMipSRUdTWgorCitMRUFGKHNpZ3NldGptcCwgRlJBTUVTWikKKwlQVFJfU1VCVSBzcCwgRlJBTUVTWgorCVNFVFVQX0dQNjQoR1BPRkYsIHNpZ3NldGptcCkKKwkuc2V0CXJlb3JkZXIKKwlSRUdfUwlhMSwgKF9KQkxFTipSRUdTWikoYTApCQkjIHNhdmUgInNhdmVtYXNrIgorCWJuZQlhMSwgMHgwLCAxZgkJCSMgZG8gc2F2aW5nIG9mIHNpZ25hbCBtYXNrPworCUxBCXQ5LCBfc2V0am1wCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKKwlqciB0OQorCisxOglMQQl0OSwgc2V0am1wCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKKwlqciB0OQorRU5EKHNpZ3NldGptcCkKKworTEVBRihzaWdsb25nam1wLCBGUkFNRVNaKQorCVBUUl9TVUJVIHNwLCBGUkFNRVNaCisJU0VUVVBfR1A2NChHUE9GRiwgc2lnbG9uZ2ptcCkKKwkuc2V0CXJlb3JkZXIKKwlSRUdfTAl0MCwgKF9KQkxFTipSRUdTWikoYTApCQkjIGdldCAic2F2ZW1hc2siCisJYm5lCXQwLCAweDAsIDFmCQkJIyByZXN0b3JlIHNpZ25hbCBtYXNrPworCUxBCXQ5LCBfbG9uZ2ptcAorCVJFU1RPUkVfR1A2NAorCVBUUl9BRERVIHNwLCBGUkFNRVNaCisJanIJdDkKKzE6CisJTEEJdDksIGxvbmdqbXAKKwlSRVNUT1JFX0dQNjQKKwlQVFJfQUREVSBzcCwgRlJBTUVTWgorCWpyCXQ5CitFTkQoc2lnbG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3N5c2NhbGwuUyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3N5c2NhbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjQ3NDFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvc3lzY2FsbC5TCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCisjaWYgKF9NSVBTX1NJTSA9PSBfQUJJTzMyKSB8fCAoX01JUFNfU0lNID09IF9BQkkzMikKK0ZSQU1FU1oJCT0JTUtGU0laKDYsMCkKKyNlbHNlCitGUkFNRVNaCQk9CU1LRlNJWigwLDEpCitGUkFNRV9HUAk9CUZSQU1FU1otMSpSRUdTWgorI2VuZGlmCisKK0xFQUYoc3lzY2FsbCxGUkFNRVNaKQorCVBUUl9TVUJVIHNwLCBGUkFNRVNaCSMgYWxsb2NhdGUgc3RhY2sgZnJhbWUKKwlTRVRVUF9HUDY0KEZSQU1FX0dQLHN5c2NhbGwpCisJU0FWRV9HUChGUkFNRV9HUCkKKwltb3ZlCXYwLCBhMAkJIyBzeXNjYWxsIG51bWJlciB0byB2MAorCW1vdmUJYTAsIGExCQkjIHNoaWZ0IGFyZ3MgZG93bgorCW1vdmUJYTEsIGEyCisJbW92ZQlhMiwgYTMKKyNpZiAoX01JUFNfU0lNID09IF9BQklPMzIpIHx8IChfTUlQU19TSU0gPT0gX0FCSTMyKQorCVJFR19MCWEzLCBGUkFNRVNaKzQqUkVHU1ooc3ApCisJUkVHX0wJdDAsIEZSQU1FU1orNSpSRUdTWihzcCkKKwlSRUdfTAl0MSwgRlJBTUVTWis2KlJFR1NaKHNwKQorCVJFR19TCXQwLCA0KlJFR1NaKHNwKQorCVJFR19TCXQxLCA1KlJFR1NaKHNwKQorI2Vsc2UKKwltb3ZlCWEzLCBhNAorCW1vdmUJYTQsIGE1CisJUkVHX0wJYTUsIEZSQU1FU1ooc3ApCisjZW5kaWYKKwlzeXNjYWxsCisJbW92ZQlhMCwgdjAKKwlibmV6CWEzLCAxZgorCVJFU1RPUkVfR1A2NAorCVBUUl9BRERVIHNwLCBGUkFNRVNaCisJaglyYQorMToKKwlMQQl0OSxfX3NldF9lcnJub19pbnRlcm5hbAorCVJFU1RPUkVfR1A2NAorCVBUUl9BRERVIHNwLCBGUkFNRVNaCisJagl0OQorCUVORChzeXNjYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9iaW9uaWMvdmZvcmsuUyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3Zmb3JrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4MGE4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvYmlvbmljL3Zmb3JrLlMKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworLy8gVE9ETzogbWlwcycgdWFwaSBzaWduYWwuaCBpcyBtaXNzaW5nICNpZm5kZWYgX19BU1NFTUJMWV9fLgorLy8gI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KKyNkZWZpbmUgU0lHQ0hMRCAxOAorCisJLnRleHQKKworI2lmIChfTUlQU19TSU0gPT0gX0FCSU8zMikgfHwgKF9NSVBTX1NJTSA9PSBfQUJJMzIpCitGUkFNRVNaCQk9CU1LRlNJWig1LDApCisjZWxzZQorRlJBTUVTWgkJPQlNS0ZTSVooMCwwKQorI2VuZGlmCisKK0xFQUYodmZvcmssRlJBTUVTWikKKyNpZiBGUkFNRVNaIT0wCisJUFRSX1NVQlUgc3AsIEZSQU1FU1oKKyNlbmRpZgorCVNFVFVQX0dQNjQoYTUsIHZmb3JrKQorCUxJCWEwLCAoQ0xPTkVfVk0gfCBDTE9ORV9WRk9SSyB8IFNJR0NITEQpCisJbW92ZQlhMSwgJDAKKwltb3ZlCWEyLCAkMAorCW1vdmUJYTMsICQwCisjaWYgKF9NSVBTX1NJTSA9PSBfQUJJTzMyKSB8fCAoX01JUFNfU0lNID09IF9BQkkzMikKKwlSRUdfUwkkMCwgNCpSRUdTWihzcCkKKyNlbHNlCisJbW92ZQlhNCwgJDAKKyNlbmRpZgorCUxJCXYwLCBfX05SX2Nsb25lCisJc3lzY2FsbAorI2lmIEZSQU1FU1ohPTAKKwlQVFJfQUREVSBzcCxGUkFNRVNaCisjZW5kaWYKKwltb3ZlCWEwLCB2MAorCWJuZXoJYTMsIDFmCisJUkVTVE9SRV9HUDY0CisJaglyYQorMToKKwlMQQl0OSxfX3NldF9lcnJub19pbnRlcm5hbAorCVJFU1RPUkVfR1A2NAorCWoJdDkKKwlFTkQodmZvcmspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9hc20uaCBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYWNkZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9hc20uaApAQCAtMCwwICsxLDIwOCBAQAorLyoJJE9wZW5CU0Q6IGFzbS5oLHYgMS43IDIwMDQvMTAvMjAgMTI6NDk6MTUgcGVmbyBFeHAgJCAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIgT3BzeWNvbiBBQiAgKHd3dy5vcHN5Y29uLnNlIC8gd3d3Lm9wc3ljb24uY29tKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCisgKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworI2lmbmRlZiBfTUlQUzY0X0FTTV9ICisjZGVmaW5lIF9NSVBTNjRfQVNNX0gKKworI2lmbmRlZiBfQUxJR05fVEVYVAorIyBkZWZpbmUgX0FMSUdOX1RFWFQgLmFsaWduIDQKKyNlbmRpZgorCisjdW5kZWYgX19iaW9uaWNfYXNtX2N1c3RvbV9lbnRyeQorI3VuZGVmIF9fYmlvbmljX2FzbV9jdXN0b21fZW5kCisjZGVmaW5lIF9fYmlvbmljX2FzbV9jdXN0b21fZW50cnkoZikgLmVudCBmCisjZGVmaW5lIF9fYmlvbmljX2FzbV9jdXN0b21fZW5kKGYpIC5lbmQgZgorCisjaW5jbHVkZSA8bWFjaGluZS9yZWdkZWYuaD4KKworI2RlZmluZQlfTUlQU19JU0FfTUlQUzEJMQkvKiBSMjAwMC9SMzAwMCAqLworI2RlZmluZQlfTUlQU19JU0FfTUlQUzIJMgkvKiBSNDAwMC9SNjAwMCAqLworI2RlZmluZQlfTUlQU19JU0FfTUlQUzMJMwkvKiBSNDAwMCAqLworI2RlZmluZQlfTUlQU19JU0FfTUlQUzQJNAkvKiBURlAgKFIxeDAwMCkgKi8KKyNkZWZpbmUJX01JUFNfSVNBX01JUFM1IDUKKyNkZWZpbmUJX01JUFNfSVNBX01JUFMzMiA2CisjZGVmaW5lCV9NSVBTX0lTQV9NSVBTNjQgNworCisjaWYgIWRlZmluZWQoQUJJQ0FMTFMpICYmICFkZWZpbmVkKF9OT19BQklDQUxMUykKKyNkZWZpbmUJQUJJQ0FMTFMJLmFiaWNhbGxzCisjZW5kaWYKKworI2lmIGRlZmluZWQoQUJJQ0FMTFMpICYmICFkZWZpbmVkKF9LRVJORUwpCisJQUJJQ0FMTFMKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19NSVBTRUxfXykgJiYgIWRlZmluZWQoX19NSVBTRUJfXykKKyNlcnJvciAiX19NSVBTRUxfXyBvciBfX01JUFNFQl9fIG11c3QgYmUgZGVmaW5lZCIKKyNlbmRpZgorLyoKKyAqIERlZmluZSBob3cgdG8gYWNjZXNzIHVuYWxpZ25lZCBkYXRhIHdvcmQKKyAqLworI2lmIGRlZmluZWQoX19NSVBTRUxfXykKKyNkZWZpbmUgTFdMTyAgICBsd2wKKyNkZWZpbmUgTFdISSAgICBsd3IKKyNkZWZpbmUJU1dMTwlzd2wKKyNkZWZpbmUJU1dISQlzd3IKKyNkZWZpbmUgTERMTyAgICBsZGwKKyNkZWZpbmUgTERISSAgICBsZHIKKyNkZWZpbmUJU0RMTwlzZGwKKyNkZWZpbmUJU0RISQlzZHIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgTFdMTyAgICBsd3IKKyNkZWZpbmUgTFdISSAgICBsd2wKKyNkZWZpbmUJU1dMTwlzd3IKKyNkZWZpbmUJU1dISQlzd2wKKyNkZWZpbmUgTERMTyAgICBsZHIKKyNkZWZpbmUgTERISSAgICBsZGwKKyNkZWZpbmUJU0RMTwlzZHIKKyNkZWZpbmUJU0RISQlzZGwKKyNlbmRpZgorCisvKgorICogIERlZmluZSBwcm9ncmFtbWluZyBlbnZpcm9ubWVudCBmb3IgQUJJLgorICovCisjaWYgZGVmaW5lZChBQklDQUxMUykgJiYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCisKKyNpZiAoX01JUFNfU0lNID09IF9BQklPMzIpIHx8IChfTUlQU19TSU0gPT0gX0FCSTMyKQorI2RlZmluZSBOQVJHU0FWRQk0CisKKyNkZWZpbmUJU0VUVVBfR1AJCVwKKwkuc2V0CW5vcmVvcmRlcjsJXAorCS5jcGxvYWQJdDk7CQlcCisJLnNldAlyZW9yZGVyOworCisjZGVmaW5lCVNBVkVfR1AoeCkJCVwKKwkuY3ByZXN0b3JlIHgKKworI2RlZmluZQlTRVRVUF9HUDY0KGdwb2ZmLCBuYW1lKQorI2RlZmluZQlSRVNUT1JFX0dQNjQKKyNlbmRpZgorCisjaWYgKF9NSVBTX1NJTSA9PSBfQUJJNjQpIHx8IChfTUlQU19TSU0gPT0gX0FCSU4zMikKKyNkZWZpbmUgTkFSR1NBVkUJMAorCisjZGVmaW5lCVNFVFVQX0dQCisjZGVmaW5lCVNBVkVfR1AoeCkKKyNkZWZpbmUJU0VUVVBfR1A2NChncG9mZiwgbmFtZSkJXAorCS5jcHNldHVwIHQ5LCBncG9mZiwgbmFtZQorI2RlZmluZQlSRVNUT1JFX0dQNjQJCVwKKwkuY3ByZXR1cm4KKyNlbmRpZgorCisjZGVmaW5lCU1LRlNJWihuYXJnLGxvY2FscykgKCgobmFyZytsb2NhbHMpKlJFR1NaKzMxKSYofjMxKSkKKworI2Vsc2UgLyogZGVmaW5lZChBQklDQUxMUykgJiYgIWRlZmluZWQoX0tFUk5FTCkgKi8KKworI2RlZmluZQlOQVJHU0FWRQk0CisjZGVmaW5lCVNFVFVQX0dQCisjZGVmaW5lCVNBVkVfR1AoeCkKKworI2RlZmluZQlBTElHTlNaCQkxNgkvKiBTdGFjayBsYXlvdXQgYWxpZ25tZW50ICovCisjZGVmaW5lCUZSQU1FU1ooc3opCSgoKHN6KSArIChBTElHTlNaLTEpKSAmIH4oQUxJR05TWi0xKSkKKworI2VuZGlmCisKKy8qCisgKiAgQmFzaWMgcmVnaXN0ZXIgb3BlcmF0aW9ucyBiYXNlZCBvbiBzZWxlY3RlZCBJU0EKKyAqLworI2lmIChfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMxIHx8IF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzIgfHwgX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTMzIpCisjZGVmaW5lIFJFR1NaCQk0CS8qIDMyIGJpdCBtb2RlIHJlZ2lzdGVyIHNpemUgKi8KKyNkZWZpbmUgTE9HUkVHU1oJMgkvKiBsb2cgcnNpemUgKi8KKyNkZWZpbmUJUkVHX1MJc3cKKyNkZWZpbmUJUkVHX0wJbHcKKyNkZWZpbmUJQ0ZfU1oJCTI0CS8qIENhbGwgZnJhbWUgc2l6ZSAqLworI2RlZmluZQlDRl9BUkdTWgkxNgkvKiBDYWxsIGZyYW1lIGFyZyBzaXplICovCisjZGVmaW5lCUNGX1JBX09GRlMJMjAJLyogQ2FsbCByYSBzYXZlIG9mZnNldCAqLworI2VuZGlmCisKKyNpZiAoX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTMyB8fCBfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFM0IHx8IF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzY0KQorI2RlZmluZSBSRUdTWgkJOAkvKiA2NCBiaXQgbW9kZSByZWdpc3RlciBzaXplICovCisjZGVmaW5lIExPR1JFR1NaCTMJLyogbG9nIHJzaXplICovCisjZGVmaW5lCVJFR19TCXNkCisjZGVmaW5lCVJFR19MCWxkCisjZGVmaW5lCUNGX1NaCQk0OAkvKiBDYWxsIGZyYW1lIHNpemUgKG11bHRpcGxlIG9mIEFMSUdOU1opICovCisjZGVmaW5lCUNGX0FSR1NaCTMyCS8qIENhbGwgZnJhbWUgYXJnIHNpemUgKi8KKyNkZWZpbmUJQ0ZfUkFfT0ZGUwk0MAkvKiBDYWxsIHJhIHNhdmUgb2Zmc2V0ICovCisjZW5kaWYKKworI2RlZmluZSBSRUdTWl9GUAkgOAkvKiA2NCBiaXQgRlAgcmVnaXN0ZXIgc2l6ZSAqLworCisjaWZuZGVmIF9fTFA2NF9fCisjZGVmaW5lCVBUUl9MCQlsdworI2RlZmluZQlQVFJfUwkJc3cKKyNkZWZpbmUJUFRSX1NVQgkJc3ViCisjZGVmaW5lCVBUUl9BREQJCWFkZAorI2RlZmluZQlQVFJfU1VCVQlzdWJ1CisjZGVmaW5lCVBUUl9BRERVCWFkZHUKKyNkZWZpbmUgTEkJCWxpCisjZGVmaW5lCUxBCQlsYQorI2RlZmluZQlQVFJfU0xMCQlzbGwKKyNkZWZpbmUJUFRSX1NSTAkJc3JsCisjZGVmaW5lCVBUUl9WQUwJCS53b3JkCisjZWxzZQorI2RlZmluZQlQVFJfTAkJbGQKKyNkZWZpbmUJUFRSX1MJCXNkCisjZGVmaW5lCVBUUl9BREQJCWRhZGQKKyNkZWZpbmUJUFRSX1NVQgkJZHN1YgorI2RlZmluZQlQVFJfU1VCVQlkc3VidQorI2RlZmluZQlQVFJfQUREVQlkYWRkdQorI2RlZmluZSBMSQkJZGxpCisjZGVmaW5lIExBCQlkbGEKKyNkZWZpbmUJUFRSX1NMTAkJZHNsbAorI2RlZmluZQlQVFJfU1JMCQlkc3JsCisjZGVmaW5lCVBUUl9WQUwJCS5kd29yZAorI2VuZGlmCisKKy8qCisgKiBMRUFGKHgsIGZzaXplKQorICoKKyAqCURlY2xhcmUgYSBsZWFmIHJvdXRpbmUuCisgKi8KKyNkZWZpbmUgTEVBRih4LCBmc2l6ZSkJCVwKKwkuYWxpZ24JMzsJCVwKKwkuZ2xvYmwgeDsJCVwKKwkuZW50IHgsIDA7CQlcCit4OiA7CQkJCVwKKwkuY2ZpX3N0YXJ0cHJvYzsgXAorCS5mcmFtZSBzcCwgZnNpemUsIHJhOwlcCisJU0VUVVBfR1AJCVwKKworLyoKKyAqIE5PTl9MRUFGKHgpCisgKgorICoJRGVjbGFyZSBhIG5vbi1sZWFmIHJvdXRpbmUgKGEgcm91dGluZSB0aGF0IG1ha2VzIG90aGVyIEMgY2FsbHMpLgorICovCisjZGVmaW5lIE5PTl9MRUFGKHgsIGZzaXplLCByZXRwYykgXAorCS5hbGlnbgkzOwkJXAorCS5nbG9ibCB4OwkJXAorCS5lbnQgeCwgMDsJCVwKK3g6IDsJCQkJXAorCS5jZmlfc3RhcnRwcm9jOyBcCisJLmZyYW1lIHNwLCBmc2l6ZSwgcmV0cGM7IFwKKwlTRVRVUF9HUAkJXAorCisjZW5kaWYgLyogIV9NSVBTX0FTTV9IICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9lbGZfbWFjaGRlcC5oIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvZWxmX21hY2hkZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjdkNDMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvZWxmX21hY2hkZXAuaApAQCAtMCwwICsxLDE5NiBAQAorLyoJJE5ldEJTRDogZWxmX21hY2hkZXAuaCx2IDEuMTUgMjAxMS8wMy8xNSAwNzozOToyMiBtYXR0IEV4cCAkCSovCisKKyNpZm5kZWYgX01JUFNfRUxGX01BQ0hERVBfSF8KKyNkZWZpbmUgIF9NSVBTX0VMRl9NQUNIREVQX0hfCisKKyNpZmRlZiBfTFA2NAorI2RlZmluZSBBUkNIX0VMRlNJWkUJCTY0CS8qIE1EIG5hdGl2ZSBiaW5hcnkgc2l6ZSAqLworI2Vsc2UKKyNkZWZpbmUgQVJDSF9FTEZTSVpFCQkzMgkvKiBNRCBuYXRpdmUgYmluYXJ5IHNpemUgKi8KKyNlbmRpZgorCisjaWYgRUxGU0laRSA9PSAzMgorI2RlZmluZQlFTEYzMl9NQUNIREVQX0lEX0NBU0VTCQkJCQkJXAorCQljYXNlIEVNX01JUFM6CQkJCQkJXAorCQkJYnJlYWs7CisKKyNkZWZpbmUJRUxGMzJfTUFDSERFUF9JRAlFTV9NSVBTCisjZWxpZiBFTEZTSVpFID09IDY0CisjZGVmaW5lCUVMRjY0X01BQ0hERVBfSURfQ0FTRVMJCQkJCQlcCisJCWNhc2UgRU1fTUlQUzoJCQkJCQlcCisJCQlicmVhazsKKworI2RlZmluZQlFTEY2NF9NQUNIREVQX0lECUVNX01JUFMKKyNlbmRpZgorCisvKiBtaXBzIHJlbG9jcy4gICovCisKKyNkZWZpbmUgUl9NSVBTX05PTkUJCTAKKyNkZWZpbmUgUl9NSVBTXzE2CQkxCisjZGVmaW5lIFJfTUlQU18zMgkJMgorI2RlZmluZSBSX01JUFNfUkVMMzIJCTMKKyNkZWZpbmUgUl9NSVBTX1JFTAkJUl9NSVBTX1JFTDMyCisjZGVmaW5lIFJfTUlQU18yNgkJNAorI2RlZmluZSBSX01JUFNfSEkxNgkJNQkvKiBoaWdoIDE2IGJpdHMgb2Ygc3ltYm9sIHZhbHVlICovCisjZGVmaW5lIFJfTUlQU19MTzE2CQk2CS8qIGxvdyAxNiBiaXRzIG9mIHN5bWJvbCB2YWx1ZSAqLworI2RlZmluZSBSX01JUFNfR1BSRUwxNgkJNyAgCS8qIEdQLXJlbGF0aXZlIHJlZmVyZW5jZSAgKi8KKyNkZWZpbmUgUl9NSVBTX0xJVEVSQUwJCTggCS8qIFJlZmVyZW5jZSB0byBsaXRlcmFsIHNlY3Rpb24gICovCisjZGVmaW5lIFJfTUlQU19HT1QxNgkJOQkvKiBSZWZlcmVuY2UgdG8gZ2xvYmFsIG9mZnNldCB0YWJsZSAqLworI2RlZmluZSBSX01JUFNfR09UCQlSX01JUFNfR09UMTYKKyNkZWZpbmUgUl9NSVBTX1BDMTYJCTEwICAJLyogMTYgYml0IFBDIHJlbGF0aXZlIHJlZmVyZW5jZSAqLworI2RlZmluZSBSX01JUFNfQ0FMTDE2IAkJMTEgIAkvKiAxNiBiaXQgY2FsbCB0aHJ1IGdsYmwgb2Zmc2V0IHRibCAqLworI2RlZmluZSBSX01JUFNfQ0FMTAkJUl9NSVBTX0NBTEwxNgorI2RlZmluZSBSX01JUFNfR1BSRUwzMgkJMTIKKworLyogMTMsIDE0LCAxNSBhcmUgbm90IGRlZmluZWQgYXQgdGhpcyBwb2ludC4gKi8KKyNkZWZpbmUgUl9NSVBTX1VOVVNFRDEJCTEzCisjZGVmaW5lIFJfTUlQU19VTlVTRUQyCQkxNAorI2RlZmluZSBSX01JUFNfVU5VU0VEMwkJMTUKKworLyoKKyAqIFRoZSByZW1haW5pbmcgcmVsb2NzIGFyZSBhcHBhcmVudGx5IHBhcnQgb2YgdGhlIDY0LWJpdCBJcml4IEVMRiBBQkkuCisgKi8KKyNkZWZpbmUgUl9NSVBTX1NISUZUNQkJMTYKKyNkZWZpbmUgUl9NSVBTX1NISUZUNgkJMTcKKworI2RlZmluZSBSX01JUFNfNjQJCTE4CisjZGVmaW5lIFJfTUlQU19HT1RfRElTUAkJMTkKKyNkZWZpbmUgUl9NSVBTX0dPVF9QQUdFCQkyMAorI2RlZmluZSBSX01JUFNfR09UX09GU1QJCTIxCisjZGVmaW5lIFJfTUlQU19HT1RfSEkxNgkJMjIKKyNkZWZpbmUgUl9NSVBTX0dPVF9MTzE2CQkyMworI2RlZmluZSBSX01JUFNfU1VCIAkJMjQKKyNkZWZpbmUgUl9NSVBTX0lOU0VSVF9BCQkyNQorI2RlZmluZSBSX01JUFNfSU5TRVJUX0IJCTI2CisjZGVmaW5lIFJfTUlQU19ERUxFVEUJCTI3CisjZGVmaW5lIFJfTUlQU19ISUdIRVIJCTI4CisjZGVmaW5lIFJfTUlQU19ISUdIRVNUCQkyOQorI2RlZmluZSBSX01JUFNfQ0FMTF9ISTE2CTMwCisjZGVmaW5lIFJfTUlQU19DQUxMX0xPMTYJMzEKKyNkZWZpbmUgUl9NSVBTX1NDTl9ESVNQCQkzMgorI2RlZmluZSBSX01JUFNfUkVMMTYJCTMzCisjZGVmaW5lIFJfTUlQU19BRERfSU1NRURJQVRFCTM0CisjZGVmaW5lIFJfTUlQU19QSlVNUAkJMzUKKyNkZWZpbmUgUl9NSVBTX1JFTEdPVAkJMzYKKyNkZWZpbmUJUl9NSVBTX0pBTFIJCTM3CisvKiBUTFMgcmVsb2NhdGlvbnMgKi8KKworI2RlZmluZSBSX01JUFNfVExTX0RUUE1PRDMyCTM4CS8qIE1vZHVsZSBudW1iZXIgMzIgYml0ICovCisjZGVmaW5lIFJfTUlQU19UTFNfRFRQUkVMMzIJMzkJLyogTW9kdWxlLXJlbGF0aXZlIG9mZnNldCAzMiBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19EVFBNT0Q2NAk0MAkvKiBNb2R1bGUgbnVtYmVyIDY0IGJpdCAqLworI2RlZmluZSBSX01JUFNfVExTX0RUUFJFTDY0CTQxCS8qIE1vZHVsZS1yZWxhdGl2ZSBvZmZzZXQgNjQgYml0ICovCisjZGVmaW5lIFJfTUlQU19UTFNfR0QJCTQyCS8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworI2RlZmluZSBSX01JUFNfVExTX0xETQkJNDMJLyogMTYgYml0IEdPVCBvZmZzZXQgZm9yIExETSAqLworI2RlZmluZSBSX01JUFNfVExTX0RUUFJFTF9ISTE2CTQ0CS8qIE1vZHVsZS1yZWxhdGl2ZSBvZmZzZXQsIGhpZ2ggMTYgYml0cyAqLworI2RlZmluZSBSX01JUFNfVExTX0RUUFJFTF9MTzE2CTQ1CS8qIE1vZHVsZS1yZWxhdGl2ZSBvZmZzZXQsIGxvdyAxNiBiaXRzICovCisjZGVmaW5lIFJfTUlQU19UTFNfR09UVFBSRUwJNDYJLyogMTYgYml0IEdPVCBvZmZzZXQgZm9yIElFICovCisjZGVmaW5lIFJfTUlQU19UTFNfVFBSRUwzMgk0NwkvKiBUUC1yZWxhdGl2ZSBvZmZzZXQsIDMyIGJpdCAqLworI2RlZmluZSBSX01JUFNfVExTX1RQUkVMNjQJNDgJLyogVFAtcmVsYXRpdmUgb2Zmc2V0LCA2NCBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19UUFJFTF9ISTE2CTQ5CS8qIFRQLXJlbGF0aXZlIG9mZnNldCwgaGlnaCAxNiBiaXRzICovCisjZGVmaW5lIFJfTUlQU19UTFNfVFBSRUxfTE8xNgk1MAkvKiBUUC1yZWxhdGl2ZSBvZmZzZXQsIGxvdyAxNiBiaXRzICovCisKKyNkZWZpbmUgUl9NSVBTX21heAkJNTEKKworI2RlZmluZSBSX1RZUEUobmFtZSkJCV9fQ09OQ0FUKFJfTUlQU18sbmFtZSkKKworI2RlZmluZQlSX01JUFMxNl9taW4JCTEwMAorI2RlZmluZQlSX01JUFMxNl8yNgkJMTAwCisjZGVmaW5lCVJfTUlQUzE2X0dQUkVMCQkxMDEKKyNkZWZpbmUJUl9NSVBTMTZfR09UMTYJCTEwMgorI2RlZmluZQlSX01JUFMxNl9DQUxMMTYJCTEwMworI2RlZmluZQlSX01JUFMxNl9ISTE2CQkxMDQKKyNkZWZpbmUJUl9NSVBTMTZfTE8xNgkJMTA1CisjZGVmaW5lCVJfTUlQUzE2X21heAkJMTA2CisKKworLyogbWlwcyBkeW5hbWljIHRhZ3MgKi8KKworI2RlZmluZSBEVF9NSVBTX1JMRF9WRVJTSU9OCTB4NzAwMDAwMDEKKyNkZWZpbmUgRFRfTUlQU19USU1FX1NUQU1QCTB4NzAwMDAwMDIKKyNkZWZpbmUgRFRfTUlQU19JQ0hFQ0tTVU0JMHg3MDAwMDAwMworI2RlZmluZSBEVF9NSVBTX0lWRVJTSU9OCTB4NzAwMDAwMDQKKyNkZWZpbmUgRFRfTUlQU19GTEFHUwkJMHg3MDAwMDAwNQorI2RlZmluZSBEVF9NSVBTX0JBU0VfQUREUkVTUwkweDcwMDAwMDA2CisjZGVmaW5lIERUX01JUFNfQ09ORkxJQ1QJMHg3MDAwMDAwOAorI2RlZmluZSBEVF9NSVBTX0xJQkxJU1QJCTB4NzAwMDAwMDkKKyNkZWZpbmUgRFRfTUlQU19DT05GTElDVE5PCTB4NzAwMDAwMGIKKyNkZWZpbmUJRFRfTUlQU19MT0NBTF9HT1ROTwkweDcwMDAwMDBhCS8qIG51bWJlciBvZiBsb2NhbCBnb3QgZW50cyAqLworI2RlZmluZSBEVF9NSVBTX0xJQkxJU1ROTwkweDcwMDAwMDEwCisjZGVmaW5lCURUX01JUFNfU1lNVEFCTk8JMHg3MDAwMDAxMQkvKiBudW1iZXIgb2YgLmR5bnN5bSBlbnRyaWVzICovCisjZGVmaW5lIERUX01JUFNfVU5SRUZFWFROTwkweDcwMDAwMDEyCisjZGVmaW5lCURUX01JUFNfR09UU1lNCQkweDcwMDAwMDEzCS8qIGZpcnN0IGR5bmFtaWMgc3ltIGluIGdvdCAqLworI2RlZmluZSBEVF9NSVBTX0hJUEFHRU5PCTB4NzAwMDAwMTQKKyNkZWZpbmUJRFRfTUlQU19STERfTUFQCQkweDcwMDAwMDE2CS8qIGFkZHJlc3Mgb2YgbG9hZGVyIG1hcCAqLworCisvKgorICogRUxGIEZsYWdzCisgKi8KKyNkZWZpbmUJRUZfTUlQU19QSUMJCTB4MDAwMDAwMDIJLyogQ29udGFpbnMgUElDIGNvZGUgKi8KKyNkZWZpbmUJRUZfTUlQU19DUElDCQkweDAwMDAwMDA0CS8qIFNURCBQSUMgY2FsbGluZyBzZXF1ZW5jZSAqLworI2RlZmluZQlFRl9NSVBTX0FCSTIJCTB4MDAwMDAwMjAJLyogTjMyICovCisKKyNkZWZpbmUJRUZfTUlQU19BUkNIX0FTRQkweDBmMDAwMDAwCS8qIEFyY2hpdGVjdHVyYWwgZXh0ZW5zaW9ucyAqLworI2RlZmluZQlFRl9NSVBTX0FSQ0hfTURNWAkweDA4MDAwMDAwCS8qIE1ETVggbXVsdGltZWRpYSBleHRlbnNpb24gKi8KKyNkZWZpbmUJRUZfTUlQU19BUkNIX00xNgkweDA0MDAwMDAwCS8qIE1JUFMtMTYgSVNBIGV4dGVuc2lvbnMgKi8KKworI2RlZmluZQlFRl9NSVBTX0FSQ0gJCTB4ZjAwMDAwMDAJLyogQXJjaGl0ZWN0dXJlIGZpZWxkICovCisjZGVmaW5lCUVGX01JUFNfQVJDSF8xCQkweDAwMDAwMDAwCS8qIC1taXBzMSBjb2RlICovCisjZGVmaW5lCUVGX01JUFNfQVJDSF8yCQkweDEwMDAwMDAwCS8qIC1taXBzMiBjb2RlICovCisjZGVmaW5lCUVGX01JUFNfQVJDSF8zCQkweDIwMDAwMDAwCS8qIC1taXBzMyBjb2RlICovCisjZGVmaW5lCUVGX01JUFNfQVJDSF80CQkweDMwMDAwMDAwCS8qIC1taXBzNCBjb2RlICovCisjZGVmaW5lCUVGX01JUFNfQVJDSF81CQkweDQwMDAwMDAwCS8qIC1taXBzNSBjb2RlICovCisjZGVmaW5lCUVGX01JUFNfQVJDSF8zMgkJMHg1MDAwMDAwMAkvKiAtbWlwczMyIGNvZGUgKi8KKyNkZWZpbmUJRUZfTUlQU19BUkNIXzY0CQkweDYwMDAwMDAwCS8qIC1taXBzNjQgY29kZSAqLworI2RlZmluZQlFRl9NSVBTX0FSQ0hfMzJSMgkweDcwMDAwMDAwCS8qIC1taXBzMzJyMiBjb2RlICovCisjZGVmaW5lCUVGX01JUFNfQVJDSF82NFIyCTB4ODAwMDAwMDAJLyogLW1pcHM2NHIyIGNvZGUgKi8KKworI2RlZmluZQlFRl9NSVBTX0FCSQkJMHgwMDAwZjAwMAorI2RlZmluZQlFRl9NSVBTX0FCSV9PMzIJCTB4MDAwMDEwMDAKKyNkZWZpbmUJRUZfTUlQU19BQklfTzY0CQkweDAwMDAyMDAwCisjZGVmaW5lCUVGX01JUFNfQUJJX0VBQkkzMgkweDAwMDAzMDAwCisjZGVmaW5lCUVGX01JUFNfQUJJX0VBQkk2NAkweDAwMDA0MDAwCisKKyNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCisjZGVmaW5lCUVMRjMyX01BQ0hERVBfRU5ESUFOTkVTUwlFTEZEQVRBMk1TQgorI2RlZmluZQlFTEY2NF9NQUNIREVQX0VORElBTk5FU1MJRUxGREFUQTJNU0IKKyNlbGlmIGRlZmluZWQoX19NSVBTRUxfXykKKyNkZWZpbmUJRUxGMzJfTUFDSERFUF9FTkRJQU5ORVNTCUVMRkRBVEEyTFNCCisjZGVmaW5lCUVMRjY0X01BQ0hERVBfRU5ESUFOTkVTUwlFTEZEQVRBMkxTQgorI2VsaWYgIWRlZmluZWQoSEFWRV9OQlRPT0xfQ09ORklHX0gpCisjZXJyb3IgbmVpdGhlciBfX01JUFNFTF9fIG5vciBfX01JUFNFQl9fIGFyZSBkZWZpbmVkLgorI2VuZGlmCisKKyNpZmRlZiBfS0VSTkVMCisjaWZkZWYgX0tFUk5FTF9PUFQKKyNpbmNsdWRlICJvcHRfY29tcGF0X25ldGJzZC5oIgorI2VuZGlmCisjaWZkZWYgQ09NUEFUXzE2CisvKgorICogVXAgdG8gMS42LCB0aGUgRUxGIGR5bmFtaWMgbG9hZGVyIChsZC5lbGZfc28pIHdhcyBub3QgcmVsb2NhdGFibGUuCisgKiBUZWxsIHRoZSBrZXJuZWwgRUxGIGV4ZWMgY29kZSBub3QgdG8gdHJ5IHJlbG9jYXRpbmcgdGhlIGludGVycHJldGVyCisgKiBmb3IgZHluYW1pY2FsbHktbGlua2VkIEVMRiBiaW5hcmllcy4KKyAqLworI2RlZmluZSBFTEZfSU5URVJQX05PTl9SRUxPQ0FUQUJMRQorI2VuZGlmIC8qIENPTVBBVF8xNiAqLworCisvKgorICogV2UgbmVlZCB0byBiZSBhYmxlIHRvIGluY2x1ZGUgdGhlIEVMRiBoZWFkZXIgc28gd2UgY2FuIHBpY2sgb3V0IHRoZQorICogQUJJIGJlaW5nIHVzZWQuCisgKi8KKyNpZmRlZiBFTEZTSVpFCisjZGVmaW5lCUVMRl9NRF9QUk9CRV9GVU5DCUVMRk5BTUUyKG1pcHNfbmV0YnNkLHByb2JlKQorI2RlZmluZQlFTEZfTURfQ09SRURVTVBfU0VUVVAJRUxGTkFNRTIoY29yZWR1bXAsc2V0dXApCisjZW5kaWYKKworc3RydWN0IGV4ZWNfcGFja2FnZTsKKworaW50IG1pcHNfbmV0YnNkX2VsZjMyX3Byb2JlKHN0cnVjdCBsd3AgKiwgc3RydWN0IGV4ZWNfcGFja2FnZSAqLCB2b2lkICosIGNoYXIgKiwKKwl2YWRkcl90ICopOwordm9pZCBjb3JlZHVtcF9lbGYzMl9zZXR1cChzdHJ1Y3QgbHdwICosIHZvaWQgKik7CisKK2ludCBtaXBzX25ldGJzZF9lbGY2NF9wcm9iZShzdHJ1Y3QgbHdwICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKiwgdm9pZCAqLCBjaGFyICosCisJdmFkZHJfdCAqKTsKK3ZvaWQgY29yZWR1bXBfZWxmNjRfc2V0dXAoc3RydWN0IGx3cCAqLCB2b2lkICopOworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2VuZGlmIC8qIF9NSVBTX0VMRl9NQUNIREVQX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaCBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYTkwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaApAQCAtMCwwICsxLDcwIEBACisvKgkkT3BlbkJTRDogZW5kaWFuLmgsdiAxLjUgMjAwNi8wMi8yNyAyMzozNTo1OSBtaW9kIEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBPcHN5Y29uIEFCICAod3d3Lm9wc3ljb24uc2UgLyB3d3cub3BzeWNvbi5jb20pCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX01JUFM2NF9FTkRJQU5fSF8KKyNkZWZpbmUgX01JUFM2NF9FTkRJQU5fSF8KKworI2lmZGVmIF9fR05VQ19fCisKKyNpZiBkZWZpbmVkKF9fbWlwc19pc2FfcmV2KSAmJiAoX19taXBzX2lzYV9yZXYgPj0gMikKKyNkZWZpbmUgX19zd2FwMTZtZCh4KSAoewkJCQkJXAorICAgIHJlZ2lzdGVyIHVpbnQxNl90IF94ID0gKHgpOwkJCQkJXAorICAgIHJlZ2lzdGVyIHVpbnQxNl90IF9yOwkJCQkJXAorICAgIF9fYXNtIHZvbGF0aWxlICgid3NiaCAlMCwgJTEiIDogIj1yIiAoX3IpIDogInIiIChfeCkpOwlcCisgICAgX3I7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fc3dhcDMybWQoeCkgKHsJCQkJCVwKKyAgICByZWdpc3RlciB1aW50MzJfdCBfeCA9ICh4KTsJCQkJCVwKKyAgICByZWdpc3RlciB1aW50MzJfdCBfcjsJCQkJCVwKKyAgICBfX2FzbSB2b2xhdGlsZSAoIndzYmggJTAsICUxOyByb3RyICUwLCAlMCwgMTYiIDogIj1yIiAoX3IpIDogInIiIChfeCkpOyBcCisgICAgX3I7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fc3dhcDY0bWQoeCkgKHsJCQkJCVwKKyAgICB1aW50NjRfdCBfc3dhcDY0bWRfeCA9ICh4KTsJCQkJCVwKKyAgICAodWludDY0X3QpIF9fc3dhcDMybWQoX3N3YXA2NG1kX3ggPj4gMzIpIHwJCQlcCisgICAgICAgICh1aW50NjRfdCkgX19zd2FwMzJtZChfc3dhcDY0bWRfeCAmIDB4ZmZmZmZmZmYpIDw8IDMyOwlcCit9KQorCisvKiBUZWxsIHN5cy9lbmRpYW4uaCB3ZSBoYXZlIE1EIHZhcmlhbnRzIG9mIHRoZSBzd2FwIG1hY3Jvcy4gICovCisjZGVmaW5lIE1EX1NXQVAKKworI2VuZGlmICAvKiBfX21pcHMzMnIyX18gKi8KKyNlbmRpZiAgLyogX19HTlVDX18gKi8KKworI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyNkZWZpbmUgX0JZVEVfT1JERVIgX0JJR19FTkRJQU4KKyNlbHNlCisjZGVmaW5lIF9CWVRFX09SREVSIF9MSVRUTEVfRU5ESUFOCisjZW5kaWYKKyNkZWZpbmUgX19TVFJJQ1RfQUxJR05NRU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorCisjZW5kaWYgLyogX01JUFM2NF9FTkRJQU5fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2V4ZWMuaCBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL2V4ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzYzZjc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvZXhlYy5oCkBAIC0wLDAgKzEsMTg4IEBACisvKgkkT3BlbkJTRDogZXhlYy5oLHYgMS4xIDIwMDQvMTAvMTggMTk6MDU6MzYgZ3JhbmdlIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNCBQZXIgRm9nZWxzdHJvbSwgT3BzeWNvbiBBQgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCisgKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9NSVBTNjRfRVhFQ19IXworI2RlZmluZSBfTUlQUzY0X0VYRUNfSF8KKworI2RlZmluZQlfX0xEUEdTWgk0MDk2CisKKy8qCisgKiAgRGVmaW5lIHdoYXQgZXhlYyAiZm9ybWF0cyIgd2Ugc2hvdWxkIGhhbmRsZS4KKyAqLworI2RlZmluZSBOQVRJVkVfRVhFQ19FTEYKKyNkZWZpbmUgTkFUSVZFX0VMRlNJWkUgNjQKKyNkZWZpbmUJRVhFQ19TQ1JJUFQKKworLyoKKyAqICBJZiBpbmNsdWRlZCBmcm9tIHN5cy9leGVjLmggZGVmaW5lIGtlcm5lbHMgRUxGIGZvcm1hdC4KKyAqLworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lCUFSQ0hfRUxGU0laRSA2NAorI2RlZmluZSBEQl9FTEZTSVpFIDY0CisjZGVmaW5lIEVMRl9UQVJHX0NMQVNTICBFTEZDTEFTUzY0CisjZWxzZQorI2RlZmluZQlBUkNIX0VMRlNJWkUgMzIKKyNkZWZpbmUgREJfRUxGU0laRSAzMgorI2RlZmluZSBFTEZfVEFSR19DTEFTUyAgRUxGQ0xBU1MzMgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCisjZGVmaW5lIEVMRl9UQVJHX0RBVEEJCUVMRkRBVEEyTVNCCisjZWxzZQorI2RlZmluZSBFTEZfVEFSR19EQVRBCQlFTEZEQVRBMkxTQgorI2VuZGlmCisjZGVmaW5lIEVMRl9UQVJHX01BQ0gJCUVNX01JUFMKKworI2RlZmluZSBfTkxJU1RfRE9fRUxGCisKKyNpZiBkZWZpbmVkKF9MUDY0KQorI2RlZmluZSBfS0VSTl9ET19FTEY2NAorI2lmIGRlZmluZWQoQ09NUEFUX08zMikKKyNkZWZpbmUgX0tFUk5fRE9fRUxGCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIF9LRVJOX0RPX0VMRgorI2VuZGlmCisKKy8qIEluZm9ybWF0aW9uIHRha2VuIGZyb20gTUlQUyBBQkkgc3VwcGxlbWVudGFsICovCisKKy8qIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgU2VnbWVudCB0eXBlcyAtIHBfdHlwZSAqLworI2RlZmluZSBQVF9NSVBTX1JFR0lORk8gMHg3MDAwMDAwMCAgICAgIC8qIFJlZ2lzdGVyIHVzYWdlIGluZm9ybWF0aW9uICovCisKKy8qIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgZF90YWcgZmllbGQgZm9yIEVsZjMyX0R5bi4gICovCisjZGVmaW5lIERUX01JUFNfUkxEX1ZFUlNJT04gIDB4NzAwMDAwMDEgLyogUnVudGltZSBMaW5rZXIgSW50ZXJmYWNlIElEICovCisjZGVmaW5lIERUX01JUFNfVElNRV9TVEFNUCAgIDB4NzAwMDAwMDIgLyogVGltZXN0YW1wICovCisjZGVmaW5lIERUX01JUFNfSUNIRUNLU1VNICAgIDB4NzAwMDAwMDMgLyogQ2tzdW0gb2YgZXh0LiBzdHIuIGFuZCBjb20uIHNpemVzICovCisjZGVmaW5lIERUX01JUFNfSVZFUlNJT04gICAgIDB4NzAwMDAwMDQgLyogVmVyc2lvbiBzdHJpbmcgKHN0cmluZyB0YmwgaW5kZXgpICovCisjZGVmaW5lIERUX01JUFNfRkxBR1MgICAgICAgIDB4NzAwMDAwMDUgLyogRmxhZ3MgKi8KKyNkZWZpbmUgRFRfTUlQU19CQVNFX0FERFJFU1MgMHg3MDAwMDAwNiAvKiBTZWdtZW50IGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBEVF9NSVBTX0NPTkZMSUNUICAgICAweDcwMDAwMDA4IC8qIEFkciBvZiAuY29uZmxpY3Qgc2VjdGlvbiAqLworI2RlZmluZSBEVF9NSVBTX0xJQkxJU1QgICAgICAweDcwMDAwMDA5IC8qIEFkZHJlc3Mgb2YgLmxpYmxpc3Qgc2VjdGlvbiAqLworI2RlZmluZSBEVF9NSVBTX0xPQ0FMX0dPVE5PICAweDcwMDAwMDBhIC8qIE51bWJlciBvZiBsb2NhbCAuR09UIGVudHJpZXMgKi8KKyNkZWZpbmUgRFRfTUlQU19DT05GTElDVE5PICAgMHg3MDAwMDAwYiAvKiBOdW1iZXIgb2YgLmNvbmZsaWN0IGVudHJpZXMgKi8KKyNkZWZpbmUgRFRfTUlQU19MSUJMSVNUTk8gICAgMHg3MDAwMDAxMCAvKiBOdW1iZXIgb2YgLmxpYmxpc3QgZW50cmllcyAqLworI2RlZmluZSBEVF9NSVBTX1NZTVRBQk5PICAgICAweDcwMDAwMDExIC8qIE51bWJlciBvZiAuZHluc3ltIGVudHJpZXMgKi8KKyNkZWZpbmUgRFRfTUlQU19VTlJFRkVYVE5PICAgMHg3MDAwMDAxMiAvKiBGaXJzdCBleHRlcm5hbCBEWU5TWU0gKi8KKyNkZWZpbmUgRFRfTUlQU19HT1RTWU0gICAgICAgMHg3MDAwMDAxMyAvKiBGaXJzdCBHT1QgZW50cnkgaW4gLmR5bnN5bSAqLworI2RlZmluZSBEVF9NSVBTX0hJUEFHRU5PICAgICAweDcwMDAwMDE0IC8qIE51bWJlciBvZiBHT1QgcGFnZSB0YWJsZSBlbnRyaWVzICovCisjZGVmaW5lIERUX01JUFNfUkxEX01BUCAgICAgIDB4NzAwMDAwMTYgLyogQWRkcmVzcyBvZiBkZWJ1ZyBtYXAgcG9pbnRlciAqLworCisjZGVmaW5lIERUX1BST0NOVU0gKERUX01JUFNfUkxEX01BUCAtIERUX0xPUFJPQyArIDEpCisKKy8qCisgKiBMZWdhbCB2YWx1ZXMgZm9yIGVfZmxhZ3MgZmllbGQgb2YgRWxmMzJfRWhkci4KKyAqLworI2RlZmluZSBFRl9NSVBTX05PUkVPUkRFUgkweDAwMDAwMDAxCS8qIC5ub3Jlb3JkZXIgd2FzIHVzZWQgKi8KKyNkZWZpbmUgRUZfTUlQU19QSUMJCTB4MDAwMDAwMDIJLyogQ29udGFpbnMgUElDIGNvZGUgKi8KKyNkZWZpbmUgRUZfTUlQU19DUElDCQkweDAwMDAwMDA0CS8qIFVzZXMgUElDIGNhbGxpbmcgc2VxdWVuY2UgKi8KKyNkZWZpbmUJRUZfTUlQU19BQkkyCQkweDAwMDAwMDIwCS8qIC1uMzIgb24gSXJpeCA2ICovCisjZGVmaW5lCUVGX01JUFNfMzJCSVRNT0RFCTB4MDAwMDAxMDAJLyogNjQgYml0IGluIDMyIGJpdCBtb2RlLi4uICovCisjZGVmaW5lIEVGX01JUFNfQVJDSAkJMHhmMDAwMDAwMAkvKiBNSVBTIGFyY2hpdGVjdHVyZSBsZXZlbCAqLworI2RlZmluZQlFX01JUFNfQVJDSF8xCQkweDAwMDAwMDAwCisjZGVmaW5lCUVfTUlQU19BUkNIXzIJCTB4MTAwMDAwMDAKKyNkZWZpbmUJRV9NSVBTX0FSQ0hfMwkJMHgyMDAwMDAwMAorI2RlZmluZQlFX01JUFNfQVJDSF80CQkweDMwMDAwMDAwCisjZGVmaW5lCUVGX01JUFNfQUJJCQkweDAwMDBmMDAwCS8qIEFCSSBsZXZlbCAqLworI2RlZmluZQlFX01JUFNfQUJJX05PTkUJCTB4MDAwMDAwMDAJLyogQUJJIGxldmVsIG5vdCBzZXQgKi8KKyNkZWZpbmUJRV9NSVBTX0FCSV9PMzIJCTB4MDAwMDEwMDAKKyNkZWZpbmUJRV9NSVBTX0FCSV9PNjQJCTB4MDAwMDIwMDAKKyNkZWZpbmUJRV9NSVBTX0FCSV9FQUJJMzIJMHgwMDAwNDAwMAorI2RlZmluZQlFX01JUFNfQUJJX0VBQkk2NAkweDAwMDA0MDAwCisKKy8qCisgKiBNaXBzIHNwZWNpYWwgc2VjdGlvbnMuCisgKi8KKyNkZWZpbmUJU0hOX01JUFNfQUNPTU1PTgkweGZmMDAJCS8qIEFsbG9jYXRlZCBjb21tb24gc3ltYm9scyAqLworI2RlZmluZQlTSE5fTUlQU19TQ09NTU9OCTB4ZmYwMwkJLyogU21hbGwgY29tbW9uIHN5bWJvbHMgKi8KKyNkZWZpbmUJU0hOX01JUFNfU1VOREVGSU5FRAkweGZmMDQJCS8qIFNtYWxsIHVuZGVmaW5lZCBzeW1ib2xzICovCisKKy8qCisgKiBMZWdhbCB2YWx1ZXMgZm9yIHNoX3R5cGUgZmllbGQgb2YgRWxmMzJfU2hkci4KKyAqLworI2RlZmluZQlTSFRfTUlQU19MSUJMSVNUICAweDcwMDAwMDAwCS8qIFNoYXJlZCBvYmplY3RzIHVzZWQgaW4gbGluayAqLworI2RlZmluZQlTSFRfTUlQU19DT05GTElDVCAweDcwMDAwMDAyCS8qIENvbmZsaWN0aW5nIHN5bWJvbHMgKi8KKyNkZWZpbmUJU0hUX01JUFNfR1BUQUIgICAgMHg3MDAwMDAwMwkvKiBHbG9iYWwgZGF0YSBhcmVhIHNpemVzICovCisjZGVmaW5lCVNIVF9NSVBTX1VDT0RFICAgIDB4NzAwMDAwMDQJLyogUmVzZXJ2ZWQgZm9yIFNHSS9NSVBTIGNvbXBpbGVycyAqLworI2RlZmluZQlTSFRfTUlQU19ERUJVRyAgICAweDcwMDAwMDA1CS8qIE1JUFMgRUNPRkYgZGVidWdnaW5nIGluZm9ybWF0aW9uICovCisjZGVmaW5lCVNIVF9NSVBTX1JFR0lORk8gIDB4NzAwMDAwMDYJLyogUmVnaXN0ZXIgdXNhZ2UgaW5mb3JtYXRpb24gKi8KKworLyoKKyAqIExlZ2FsIHZhbHVlcyBmb3Igc2hfZmxhZ3MgZmllbGQgb2YgRWxmMzJfU2hkci4KKyAqLworI2RlZmluZQlTSEZfTUlQU19HUFJFTAkweDEwMDAwMDAwCS8qIE11c3QgYmUgcGFydCBvZiBnbG9iYWwgZGF0YSBhcmVhICovCisKKyNpZiAwCisvKgorICogRW50cmllcyBmb3VuZCBpbiBzZWN0aW9ucyBvZiB0eXBlIFNIVF9NSVBTX0dQVEFCLgorICovCit0eXBlZGVmIHVuaW9uIHsKKwlzdHJ1Y3QgeworCQlFbGYzMl9Xb3JkIGd0X2N1cnJlbnRfZ192YWx1ZTsJLyogLUcgdmFsIHVzZWQgaW4gY29tcGlsYXRpb24gKi8KKwkJRWxmMzJfV29yZCBndF91bnVzZWQ7CS8qIE5vdCB1c2VkICovCisJfSBndF9oZWFkZXI7CQkJLyogRmlyc3QgZW50cnkgaW4gc2VjdGlvbiAqLworCXN0cnVjdCB7CisJCUVsZjMyX1dvcmQgZ3RfZ192YWx1ZTsJLyogSWYgdGhpcyB2YWwgd2VyZSB1c2VkIGZvciAtRyAqLworCQlFbGYzMl9Xb3JkIGd0X2J5dGVzOwkvKiBUaGlzIG1hbnkgYnl0ZXMgd291bGQgYmUgdXNlZCAqLworCX0gZ3RfZW50cnk7CQkJLyogU3Vic2VxdWVudCBlbnRyaWVzIGluIHNlY3Rpb24gKi8KK30gRWxmMzJfZ3B0YWI7CisKKy8qCisgKiBFbnRyeSBmb3VuZCBpbiBzZWN0aW9ucyBvZiB0eXBlIFNIVF9NSVBTX1JFR0lORk8uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlFbGYzMl9Xb3JkCXJpX2dwcm1hc2s7CS8qIEdlbmVyYWwgcmVnaXN0ZXJzIHVzZWQgKi8KKwlFbGYzMl9Xb3JkCXJpX2Nwcm1hc2tbNF07CS8qIENvcHJvY2Vzc29yIHJlZ2lzdGVycyB1c2VkICovCisJRWxmMzJfU3dvcmQJcmlfZ3BfdmFsdWU7CS8qICRncCByZWdpc3RlciB2YWx1ZSAqLworfSBFbGYzMl9SZWdJbmZvOworI2VuZGlmCisKKworLyoKKyAqIE1pcHMgcmVsb2NhdGlvbnMuCisgKi8KKworI2RlZmluZQlSX01JUFNfTk9ORQkwCS8qIE5vIHJlbG9jICovCisjZGVmaW5lCVJfTUlQU18xNgkxCS8qIERpcmVjdCAxNiBiaXQgKi8KKyNkZWZpbmUJUl9NSVBTXzMyCTIJLyogRGlyZWN0IDMyIGJpdCAqLworI2RlZmluZQlSX01JUFNfUkVMMzIJMwkvKiBQQyByZWxhdGl2ZSAzMiBiaXQgKi8KKyNkZWZpbmUJUl9NSVBTXzI2CTQJLyogRGlyZWN0IDI2IGJpdCBzaGlmdGVkICovCisjZGVmaW5lCVJfTUlQU19ISTE2CTUJLyogSGlnaCAxNiBiaXQgKi8KKyNkZWZpbmUJUl9NSVBTX0xPMTYJNgkvKiBMb3cgMTYgYml0ICovCisjZGVmaW5lCVJfTUlQU19HUFJFTDE2CTcJLyogR1AgcmVsYXRpdmUgMTYgYml0ICovCisjZGVmaW5lCVJfTUlQU19MSVRFUkFMCTgJLyogMTYgYml0IGxpdGVyYWwgZW50cnkgKi8KKyNkZWZpbmUJUl9NSVBTX0dPVDE2CTkJLyogMTYgYml0IEdPVCBlbnRyeSAqLworI2RlZmluZQlSX01JUFNfUEMxNgkxMAkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKyNkZWZpbmUJUl9NSVBTX0NBTEwxNgkxMQkvKiAxNiBiaXQgR09UIGVudHJ5IGZvciBmdW5jdGlvbiAqLworI2RlZmluZQlSX01JUFNfR1BSRUwzMgkxMgkvKiBHUCByZWxhdGl2ZSAzMiBiaXQgKi8KKworI2RlZmluZQlSX01JUFNfNjQJMTgKKworI2RlZmluZQlSX01JUFNfUkVMMzJfNjQJKChSX01JUFNfNjQgPDwgOCkgfCBSX01JUFNfUkVMMzIpCisKKworI2VuZGlmCS8qICFfTUlQUzY0X0VYRUNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3JlZ2RlZi5oIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvcmVnZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E3Y2Q2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3JlZ2RlZi5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCSRPcGVuQlNEOiByZWdkZWYuaCx2IDEuMyAyMDA1LzA4LzA3IDA3OjI5OjQ0IG1pb2QgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogUmFscGggQ2FtcGJlbGwuIFRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gdGhlIE1JUFMgUklTQworICogQXJjaGl0ZWN0dXJlIGJvb2sgYnkgR2VycnkgS2FuZS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXJlZ2RlZi5oCTguMSAoQmVya2VsZXkpIDYvMTAvOTMKKyAqLworI2lmbmRlZiBfTUlQU19SRUdERUZfSF8KKyNkZWZpbmUgX01JUFNfUkVHREVGX0hfCisKKyNpZiAoX01JUFNfU0lNID09IF9BQkk2NCkgJiYgIWRlZmluZWQoX19taXBzX242NCkKKyNkZWZpbmUgX19taXBzX242NCAxCisjZW5kaWYKKyNpZiAoX01JUFNfU0lNID09IF9BQklOMzIpICYmICAhZGVmaW5lZChfX21pcHNfbjMyKQorI2RlZmluZSBfX21pcHNfbjMyIDEKKyNlbmRpZgorCisjZGVmaW5lIHplcm8JJDAJLyogYWx3YXlzIHplcm8gKi8KKyNkZWZpbmUgQVQJJGF0CS8qIGFzc2VtYmxlciB0ZW1wICovCisjZGVmaW5lIHYwCSQyCS8qIHJldHVybiB2YWx1ZSAqLworI2RlZmluZSB2MQkkMworI2RlZmluZSBhMAkkNAkvKiBhcmd1bWVudCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgYTEJJDUKKyNkZWZpbmUgYTIJJDYKKyNkZWZpbmUgYTMJJDcKKyNpZiBkZWZpbmVkKF9fbWlwc19uMzIpIHx8IGRlZmluZWQoX19taXBzX242NCkKKyNkZWZpbmUgYTQJJDgJLyogZXhwYW5kZWQgcmVnaXN0ZXIgYXJndW1lbnRzICovCisjZGVmaW5lIGE1CSQ5CisjZGVmaW5lIGE2CSQxMAorI2RlZmluZSBhNwkkMTEKKyNkZWZpbmUgdGEwCSQ4CS8qIGFsaWFzICovCisjZGVmaW5lIHRhMQkkOQorI2RlZmluZSB0YTIJJDEwCisjZGVmaW5lIHRhMwkkMTEKKyNkZWZpbmUgdDAJJDEyCS8qIHRlbXAgcmVnaXN0ZXJzIChub3Qgc2F2ZWQgYWNyb3NzIHN1YnJvdXRpbmUgY2FsbHMpICovCisjZGVmaW5lIHQxCSQxMworI2RlZmluZSB0MgkkMTQKKyNkZWZpbmUgdDMJJDE1CisjZWxzZQorI2RlZmluZSB0MAkkOAkvKiB0ZW1wIHJlZ2lzdGVycyAobm90IHNhdmVkIGFjcm9zcyBzdWJyb3V0aW5lIGNhbGxzKSAqLworI2RlZmluZSB0MQkkOQorI2RlZmluZSB0MgkkMTAKKyNkZWZpbmUgdDMJJDExCisjZGVmaW5lIHQ0CSQxMgorI2RlZmluZSB0NQkkMTMKKyNkZWZpbmUgdDYJJDE0CisjZGVmaW5lIHQ3CSQxNQorI2RlZmluZSB0YTAJJDEyCS8qIGFsaWFzICovCisjZGVmaW5lIHRhMQkkMTMKKyNkZWZpbmUgdGEyCSQxNAorI2RlZmluZSB0YTMJJDE1CisjZW5kaWYKKyNkZWZpbmUgczAJJDE2CS8qIHNhdmVkIGFjcm9zcyBzdWJyb3V0aW5lIGNhbGxzIChjYWxsZWUgc2F2ZWQpICovCisjZGVmaW5lIHMxCSQxNworI2RlZmluZSBzMgkkMTgKKyNkZWZpbmUgczMJJDE5CisjZGVmaW5lIHM0CSQyMAorI2RlZmluZSBzNQkkMjEKKyNkZWZpbmUgczYJJDIyCisjZGVmaW5lIHM3CSQyMworI2RlZmluZSB0OAkkMjQJLyogdHdvIG1vcmUgdGVtcCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgdDkJJDI1CisjZGVmaW5lIGswCSQyNgkvKiBrZXJuZWwgdGVtcG9yYXJ5ICovCisjZGVmaW5lIGsxCSQyNworI2RlZmluZSBncAkkMjgJLyogZ2xvYmFsIHBvaW50ZXIgKi8KKyNkZWZpbmUgc3AJJDI5CS8qIHN0YWNrIHBvaW50ZXIgKi8KKyNkZWZpbmUgczgJJDMwCS8qIG9uZSBtb3JlIGNhbGxlZSBzYXZlZCAqLworI2RlZmluZSByYQkkMzEJLyogcmV0dXJuIGFkZHJlc3MgKi8KKworI2VuZGlmIC8qICFfTUlQU19SRUdERUZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3JlZ251bS5oIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvcmVnbnVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlMTI4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3JlZ251bS5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgkkT3BlbkJTRDogcmVnbnVtLmgsdiAxLjMgMjAwNC8wOC8xMCAyMDoyODoxMyBkZXJhYWR0IEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBPcHN5Y29uIEFCICAod3d3Lm9wc3ljb24uc2UgLyB3d3cub3BzeWNvbi5jb20pCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX01JUFM2NF9SRUdOVU1fSF8KKyNkZWZpbmUgX01JUFM2NF9SRUdOVU1fSF8KKworLyoKKyAqIExvY2F0aW9uIG9mIHRoZSBzYXZlZCByZWdpc3RlcnMgcmVsYXRpdmUgdG8gWkVSTy4KKyAqIFVzYWdlIGlzIHAtPnBfcmVnc1tYWF0uCisgKi8KKyNkZWZpbmUgWkVSTwkwCisjZGVmaW5lIEFTVAkxCisjZGVmaW5lIFYwCTIKKyNkZWZpbmUgVjEJMworI2RlZmluZSBBMAk0CisjZGVmaW5lIEExCTUKKyNkZWZpbmUgQTIJNgorI2RlZmluZSBBMwk3CisjZGVmaW5lIFQwCTgKKyNkZWZpbmUgVDEJOQorI2RlZmluZSBUMgkxMAorI2RlZmluZSBUMwkxMQorI2RlZmluZSBUNAkxMgorI2RlZmluZSBUNQkxMworI2RlZmluZSBUNgkxNAorI2RlZmluZSBUNwkxNQorI2RlZmluZSBTMAkxNgorI2RlZmluZSBTMQkxNworI2RlZmluZSBTMgkxOAorI2RlZmluZSBTMwkxOQorI2RlZmluZSBTNAkyMAorI2RlZmluZSBTNQkyMQorI2RlZmluZSBTNgkyMgorI2RlZmluZSBTNwkyMworI2RlZmluZSBUOAkyNAorI2RlZmluZSBUOQkyNQorI2RlZmluZSBLMAkyNgorI2RlZmluZSBLMQkyNworI2RlZmluZSBHUAkyOAorI2RlZmluZSBTUAkyOQorI2RlZmluZSBTOAkzMAorI2RlZmluZSBSQQkzMQorI2RlZmluZQlTUgkzMgorI2RlZmluZQlQUwlTUgkvKiBhbGlhcyBmb3IgU1IgKi8KKyNkZWZpbmUgTVVMTE8JMzMKKyNkZWZpbmUgTVVMSEkJMzQKKyNkZWZpbmUgQkFEVkFERFIgMzUKKyNkZWZpbmUgQ0FVU0UJMzYKKyNkZWZpbmUJUEMJMzcKKyNkZWZpbmUJSUMJMzgKKyNkZWZpbmUJQ1BMCTM5CisKKyNkZWZpbmUJTlVNU0FWRVJFR1MgNDAJCS8qIE51bWJlciBvZiByZWdpc3RlcnMgc2F2ZWQgaW4gdHJhcCAqLworCisjZGVmaW5lIEZQQkFTRQlOVU1TQVZFUkVHUworI2RlZmluZSBGMAkoRlBCQVNFKzApCisjZGVmaW5lIEYxCShGUEJBU0UrMSkKKyNkZWZpbmUgRjIJKEZQQkFTRSsyKQorI2RlZmluZSBGMwkoRlBCQVNFKzMpCisjZGVmaW5lIEY0CShGUEJBU0UrNCkKKyNkZWZpbmUgRjUJKEZQQkFTRSs1KQorI2RlZmluZSBGNgkoRlBCQVNFKzYpCisjZGVmaW5lIEY3CShGUEJBU0UrNykKKyNkZWZpbmUgRjgJKEZQQkFTRSs4KQorI2RlZmluZSBGOQkoRlBCQVNFKzkpCisjZGVmaW5lIEYxMAkoRlBCQVNFKzEwKQorI2RlZmluZSBGMTEJKEZQQkFTRSsxMSkKKyNkZWZpbmUgRjEyCShGUEJBU0UrMTIpCisjZGVmaW5lIEYxMwkoRlBCQVNFKzEzKQorI2RlZmluZSBGMTQJKEZQQkFTRSsxNCkKKyNkZWZpbmUgRjE1CShGUEJBU0UrMTUpCisjZGVmaW5lIEYxNgkoRlBCQVNFKzE2KQorI2RlZmluZSBGMTcJKEZQQkFTRSsxNykKKyNkZWZpbmUgRjE4CShGUEJBU0UrMTgpCisjZGVmaW5lIEYxOQkoRlBCQVNFKzE5KQorI2RlZmluZSBGMjAJKEZQQkFTRSsyMCkKKyNkZWZpbmUgRjIxCShGUEJBU0UrMjEpCisjZGVmaW5lIEYyMgkoRlBCQVNFKzIyKQorI2RlZmluZSBGMjMJKEZQQkFTRSsyMykKKyNkZWZpbmUgRjI0CShGUEJBU0UrMjQpCisjZGVmaW5lIEYyNQkoRlBCQVNFKzI1KQorI2RlZmluZSBGMjYJKEZQQkFTRSsyNikKKyNkZWZpbmUgRjI3CShGUEJBU0UrMjcpCisjZGVmaW5lIEYyOAkoRlBCQVNFKzI4KQorI2RlZmluZSBGMjkJKEZQQkFTRSsyOSkKKyNkZWZpbmUgRjMwCShGUEJBU0UrMzApCisjZGVmaW5lIEYzMQkoRlBCQVNFKzMxKQorI2RlZmluZQlGU1IJKEZQQkFTRSszMikKKworI2RlZmluZQlOVU1GUFJFR1MgMzMKKworI2RlZmluZQlOUkVHUwkoTlVNU0FWRVJFR1MgKyBOVU1GUFJFR1MpCisKKyNlbmRpZiAvKiAhX01JUFM2NF9SRUdOVU1fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3NldGptcC5oIGIvbGliYy9hcmNoLW1pcHM2NC9pbmNsdWRlL21hY2hpbmUvc2V0am1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViYTdiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3NldGptcC5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qCSRPcGVuQlNEOiBzZXRqbXAuaCx2IDEuMiAyMDA0LzA4LzEwIDIxOjEwOjU2IHBlZm8gRXhwICQJKi8KKworLyogUHVibGljIGRvbWFpbiAqLworCisjaWZuZGVmIF9NSVBTX1NFVEpNUF9IXworI2RlZmluZSBfTUlQU19TRVRKTVBfSF8KKworI2RlZmluZQlfSkJMRU4JMTU3CQkvKiBzaXplLCBpbiBsb25ncywgb2YgYSBqbXBfYnVmICovCisKKyNlbmRpZiAvKiAhX01JUFNfU0VUSk1QX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9zaWduYWwuaCBiL2xpYmMvYXJjaC1taXBzNjQvaW5jbHVkZS9tYWNoaW5lL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTcxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L2luY2x1ZGUvbWFjaGluZS9zaWduYWwuaApAQCAtMCwwICsxLDUxIEBACisvKgkkT3BlbkJTRDogc2lnbmFsLmgsdiAxLjggMjAwNi8wMS8wOSAxODoxODozNyBtaWxsZXJ0IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFJhbHBoIENhbXBiZWxsLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpc2lnbmFsLmgJOC4xIChCZXJrZWxleSkgNi8xMC85MworICovCisKKyNpZm5kZWYgX01JUFNfU0lHTkFMX0hfCisjZGVmaW5lIF9NSVBTX1NJR05BTF9IXworCisjZGVmaW5lCVNDX1JFR01BU0sJKDAqUkVHU1opCisjZGVmaW5lCVNDX1NUQVRVUwkoMSpSRUdTWikKKyNkZWZpbmUJU0NfUEMJCSgyKlJFR1NaKQorI2RlZmluZQlTQ19SRUdTCQkoU0NfUEMrOCkKKyNkZWZpbmUJU0NfRlBSRUdTCShTQ19SRUdTKzMyKjgpCisjZGVmaW5lCVNDX0FDWAkJKFNDX0ZQUkVHUyszMipSRUdTWl9GUCkKKyNkZWZpbmUJU0NfVVNFRF9NQVRICShTQ19BQ1grMypSRUdTWikKKy8qIE9wZW5CU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZQlTQ19NQVNLCQlTQ19SRUdNQVNLCisjZGVmaW5lCVNDX0ZQVVNFRAlTQ19VU0VEX01BVEgKKworI2VuZGlmCS8qICFfTUlQU19TSUdOQUxfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvbWlwczY0Lm1rIGIvbGliYy9hcmNoLW1pcHM2NC9taXBzNjQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwY2IyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvbWlwczY0Lm1rCkBAIC0wLDAgKzEsNzIgQEAKKyMgbWlwczY0IHNwZWNpZmljIGNvbmZpZ3MKKworbGliY19jb21tb25fc3JjX2ZpbGVzX21pcHM2NCA6PSBcCisgICAgYmlvbmljL21lbWNoci5jIFwKKyAgICBiaW9uaWMvbWVtY21wLmMgXAorICAgIGJpb25pYy9tZW1tb3ZlLmMgXAorICAgIGJpb25pYy9tZW1yY2hyLmMgXAorICAgIGJpb25pYy9zdHJjaHIuY3BwIFwKKyAgICBiaW9uaWMvc3Rybmxlbi5jIFwKKyAgICBiaW9uaWMvc3RycmNoci5jcHAgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NhdC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjaHIuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY21wLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NweS5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsZW4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzcmNoci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtY21wLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1tb3ZlLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cGNweS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHBuY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNhdC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjbXAuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY3B5LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxjYXQuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNweS5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsZW4uYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNhdC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY21wLmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jcHkuYyBcCisKKyMgRm9ydGlmeSBpbXBsZW1lbnRhdGlvbnMgb2YgbGliYyBmdW5jdGlvbnMuCitsaWJjX2NvbW1vbl9zcmNfZmlsZXNfbWlwczY0ICs9IFwKKyAgICBiaW9uaWMvX19tZW1jcHlfY2hrLmNwcCBcCisgICAgYmlvbmljL19fbWVtc2V0X2Noay5jcHAgXAorICAgIGJpb25pYy9fX3N0cmNweV9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19zdHJjYXRfY2hrLmNwcCBcCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgQ1BVIHNwZWNpZmljIHNvdXJjZSBmaWxlcworbGliY19iaW9uaWNfc3JjX2ZpbGVzX21pcHM2NCA6PSBcCisgICAgYXJjaC1taXBzNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMgXAorICAgIGFyY2gtbWlwczY0L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMgXAorICAgIGFyY2gtbWlwczY0L2Jpb25pYy9fX2dldF9zcC5TIFwKKyAgICBhcmNoLW1pcHM2NC9iaW9uaWMvX3NldGptcC5TIFwKKyAgICBhcmNoLW1pcHM2NC9iaW9uaWMvc2V0am1wLlMgXAorICAgIGFyY2gtbWlwczY0L2Jpb25pYy9zaWdzZXRqbXAuUyBcCisgICAgYXJjaC1taXBzNjQvYmlvbmljL3N5c2NhbGwuUyBcCisgICAgYXJjaC1taXBzNjQvYmlvbmljL3Zmb3JrLlMgXAorCisjIEZJWE1FIFRPRE8KKyMjIGxpYmNfYmlvbmljX3NyY19maWxlc19taXBzNjQgKz0gYXJjaC1taXBzNjQvc3RyaW5nL21lbWNweS5TCisjIyBsaWJjX2Jpb25pY19zcmNfZmlsZXNfbWlwczY0ICs9IGFyY2gtbWlwczY0L3N0cmluZy9tZW1zZXQuUworbGliY19iaW9uaWNfc3JjX2ZpbGVzX21pcHM2NCArPSBiaW9uaWMvbWVtY3B5LmNwcAorbGliY19iaW9uaWNfc3JjX2ZpbGVzX21pcHM2NCArPSBiaW9uaWMvbWVtc2V0LmMKKworCitsaWJjX2NydF90YXJnZXRfY2ZsYWdzX21pcHM2NCA6PSBcCisgICAgJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfR0xPQkFMX0NGTEFHUykgXAorICAgIC1JJChMT0NBTF9QQVRIKS9hcmNoLW1pcHM2NC9pbmNsdWRlCisKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlX21pcHM2NCA6PSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLW1pcHM2NC9iaW9uaWMvY3J0YmVnaW4uYworCitsaWJjX2NydF90YXJnZXRfY3J0YmVnaW5fc29fZmlsZV9taXBzNjQgOj0gXAorICAgICQoTE9DQUxfUEFUSCkvYXJjaC1jb21tb24vYmlvbmljL2NydGJlZ2luX3NvLmMKKworbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFnc19taXBzNjQgOj0gXAorICAgIC1mUElDCisKK2xpYmNfY3J0X3RhcmdldF9sZGZsYWdzX21pcHM2NCA6PSBcCisgICAgLW1lbGY2NGx0c21pcApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zdHJpbmcvbWVtY3B5LlMgYi9saWJjL2FyY2gtbWlwczY0L3N0cmluZy9tZW1jcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzkxMDk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zdHJpbmcvbWVtY3B5LlMKQEAgLTAsMCArMSw0MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkKKyAqICAgICAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4sIENhbGlmb3JuaWEuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIG1lbWNweS5TCisgKiAgVmVyc2lvbjogIjA0MzAwOSIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBJbmNsdWRlIGZpbGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKworLyoKKyAqIFRoaXMgcm91dGluZSBjb3VsZCBiZSBvcHRpbWl6ZWQgZm9yIE1JUFM2NC4gVGhlIGN1cnJlbnQgY29kZSBvbmx5CisgKiB1c2VzIE1JUFMzMiBpbnN0cnVjdGlvbnMuCisgKi8KKyNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCisjICBkZWZpbmUgTFdISQlsd2wJCS8qIGhpZ2ggcGFydCBpcyBsZWZ0IGluIGJpZy1lbmRpYW4JKi8KKyMgIGRlZmluZSBTV0hJCXN3bAkJLyogaGlnaCBwYXJ0IGlzIGxlZnQgaW4gYmlnLWVuZGlhbgkqLworIyAgZGVmaW5lIExXTE8JbHdyCQkvKiBsb3cgcGFydCBpcyByaWdodCBpbiBiaWctZW5kaWFuCSovCisjICBkZWZpbmUgU1dMTwlzd3IJCS8qIGxvdyBwYXJ0IGlzIHJpZ2h0IGluIGJpZy1lbmRpYW4JKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01JUFNFTF9fKQorIyAgZGVmaW5lIExXSEkJbHdyCQkvKiBoaWdoIHBhcnQgaXMgcmlnaHQgaW4gbGl0dGxlLWVuZGlhbgkqLworIyAgZGVmaW5lIFNXSEkJc3dyCQkvKiBoaWdoIHBhcnQgaXMgcmlnaHQgaW4gbGl0dGxlLWVuZGlhbgkqLworIyAgZGVmaW5lIExXTE8JbHdsCQkvKiBsb3cgcGFydCBpcyBsZWZ0IGluIGJpZy1lbmRpYW4JKi8KKyMgIGRlZmluZSBTV0xPCXN3bAkJLyogbG93IHBhcnQgaXMgbGVmdCBpbiBiaWctZW5kaWFuCSovCisjZW5kaWYKKworTEVBRihtZW1jcHksMCkKKworCS5zZXQJbm9yZW9yZGVyCisJLnNldAlub2F0CisvKgorICogQmVsb3cgd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1lbWNweSBpcyBjYWxsZWQgd2l0aCBvdmVybGFwcGluZyBzcmMgYW5kIGRzdC4KKyAqIEFsdGhvdWdoIG1lbWNweSBpcyBub3QgcmVxdWlyZWQgdG8gaGFuZGxlIHRoaXMgY2FzZSwgc29tZSBwYXJ0cyBvZiBBbmRyb2lkIGxpa2UgU2tpYQorICogcmVseSBvbiBzdWNoIHVzYWdlLiBXZSBjYWxsIG1lbW1vdmUgdG8gaGFuZGxlIHN1Y2ggY2FzZXMuCisgKi8KKwlzdWJ1CXQwLGEwLGExCisJc3JhCUFULHQwLDMxCisJeG9yCXQxLHQwLEFUCisJc3VidQl0MCx0MSxBVAorCXNsdHUJQVQsdDAsYTIKKwliZXEJQVQsemVybywuTG1lbWNweQorCSBsYQl0OSxtZW1tb3ZlCisJanIJdDkKKwkgbm9wCisuTG1lbWNweToKKwlzbHRpCUFULGEyLDgKKwlibmUJQVQsemVybywuTGxhc3Q4CisJIG1vdmUJdjAsYTAJIyBtZW1jcHkgcmV0dXJucyB0aGUgZHN0IHBvaW50ZXIKKworIyBUZXN0IGlmIHRoZSBzcmMgYW5kIGRzdCBhcmUgd29yZC1hbGlnbmVkLCBvciBjYW4gYmUgbWFkZSB3b3JkLWFsaWduZWQKKwl4b3IJdDgsYTEsYTAKKwlhbmRpCXQ4LHQ4LDB4MwkJIyB0OCBpcyBhMC9hMSB3b3JkLWRpc3BsYWNlbWVudAorCisJYm5lCXQ4LHplcm8sLkx1bmFsaWduZWQKKwkgbmVndQlhMyxhMAorCisJYW5kaQlhMyxhMywweDMJIyB3ZSBuZWVkIHRvIGNvcHkgYTMgYnl0ZXMgdG8gbWFrZSBhMC9hMSBhbGlnbmVkCisJYmVxCWEzLHplcm8sLkxjaGsxNncgIyB3aGVuIGEzPTAgdGhlbiB0aGUgZHN0IChhMCkgaXMgd29yZC1hbGlnbmVkCisJIHN1YnUJYTIsYTIsYTMJIyBub3cgYTIgaXMgdGhlIHJlbWluaW5nIGJ5dGVzIGNvdW50CisKKwlMV0hJCXQ4LDAoYTEpCisJYWRkdQlhMSxhMSxhMworCVNXSEkJdDgsMChhMCkKKwlhZGR1CWEwLGEwLGEzCisKKyMgTm93IHRoZSBkc3Qvc3JjIGFyZSBtdXR1YWxseSB3b3JkLWFsaWduZWQgd2l0aCB3b3JkLWFsaWduZWQgYWRkcmVzc2VzCisuTGNoazE2dzoKKwlhbmRpCXQ4LGEyLDB4M2YJIyBhbnkgd2hvbGUgNjQtYnl0ZSBjaHVua3M/CisJCQkJIyB0OCBpcyB0aGUgYnl0ZSBjb3VudCBhZnRlciA2NC1ieXRlIGNodW5rcworCisJYmVxCWEyLHQ4LC5MY2hrOHcJIyBpZiBhMj09dDgsIG5vIDY0LWJ5dGUgY2h1bmtzCisJCQkJIyBUaGVyZSB3aWxsIGJlIGF0IG1vc3QgMSAzMi1ieXRlIGNodW5rIGFmdGVyIGl0CisJIHN1YnUJYTMsYTIsdDgJIyBzdWJ0cmFjdCBmcm9tIGEyIHRoZSByZW1pbmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhlcmUgYTMgY291bnRzIGJ5dGVzIGluIDE2dyBjaHVua3MKKwlhZGR1CWEzLGEwLGEzCSMgTm93IGEzIGlzIHRoZSBmaW5hbCBkc3QgYWZ0ZXIgNjQtYnl0ZSBjaHVua3MKKworCWFkZHUJdDAsYTAsYTIJIyB0MCBpcyB0aGUgInBhc3QgdGhlIGVuZCIgYWRkcmVzcworCisjIFdoZW4gaW4gdGhlIGxvb3Agd2UgZXhlcmNpc2UgInByZWYgMzAseChhMCkiLCB0aGUgYTAreCBzaG91bGQgbm90IGJlIHBhc3QKKyMgdGhlICJ0MC0zMiIgYWRkcmVzcworIyBUaGlzIG1lYW5zOiBmb3IgeD0xMjggdGhlIGxhc3QgInNhZmUiIGEwIGFkZHJlc3MgaXMgInQwLTE2MCIKKyMgQWx0ZXJuYXRpdmVseSwgZm9yIHg9NjQgdGhlIGxhc3QgInNhZmUiIGEwIGFkZHJlc3MgaXMgInQwLTk2IgorIyBJbiB0aGUgY3VycmVudCB2ZXJzaW9uIHdlIHdpbGwgdXNlICJwcmVmIDMwLDEyOChhMCkiLCBzbyAidDAtMTYwIiBpcyB0aGUgbGltaXQKKwlzdWJ1CXQ5LHQwLDE2MAkjIHQ5IGlzIHRoZSAibGFzdCBzYWZlIHByZWYgMzAsMTI4KGEwKSIgYWRkcmVzcworCisJcHJlZiAgICAwLDAoYTEpCQkjIGJyaW5nIHRoZSBmaXJzdCBsaW5lIG9mIHNyYywgYWRkciAwCisJcHJlZiAgICAwLDMyKGExKQkjIGJyaW5nIHRoZSBzZWNvbmQgbGluZSBvZiBzcmMsIGFkZHIgMzIKKwlwcmVmICAgIDAsNjQoYTEpCSMgYnJpbmcgdGhlIHRoaXJkIGxpbmUgb2Ygc3JjLCBhZGRyIDY0CisJcHJlZgkzMCwzMihhMCkJIyBzYWZlLCBhcyB3ZSBoYXZlIGF0IGxlYXN0IDY0IGJ5dGVzIGFoZWFkCisjIEluIGNhc2UgdGhlIGEwID4gdDkgZG9uJ3QgdXNlICJwcmVmIDMwIiBhdCBhbGwKKwlzZ3R1CXYxLGEwLHQ5CisJYmd0egl2MSwuTGxvb3AxNncJIyBza2lwICJwcmVmIDMwLDY0KGEwKSIgZm9yIHRvbyBzaG9ydCBhcnJheXMKKwkgbm9wCisjIG90aGVyd2lzZSwgc3RhcnQgd2l0aCB1c2luZyBwcmVmMzAKKwlwcmVmCTMwLDY0KGEwKQorLkxsb29wMTZ3OgorCXByZWYJMCw5NihhMSkKKwlsdwl0MCwwKGExKQorCWJndHoJdjEsLkxza2lwX3ByZWYzMF85NgkjIHNraXAgInByZWYgMzAsOTYoYTApIgorCSBsdwl0MSw0KGExKQorCXByZWYgICAgMzAsOTYoYTApICAgIyBjb250aW51ZSBzZXR0aW5nIHVwIHRoZSBkZXN0LCBhZGRyIDk2CisuTHNraXBfcHJlZjMwXzk2OgorCWx3CXQyLDgoYTEpCisJbHcJdDMsMTIoYTEpCisJbHcJdDQsMTYoYTEpCisJbHcJdDUsMjAoYTEpCisJbHcJdDYsMjQoYTEpCisJbHcJdDcsMjgoYTEpCisgICAgICAgIHByZWYgICAgMCwxMjgoYTEpICAgICMgYnJpbmcgdGhlIG5leHQgbGluZXMgb2Ygc3JjLCBhZGRyIDEyOAorCisJc3cJdDAsMChhMCkKKwlzdwl0MSw0KGEwKQorCXN3CXQyLDgoYTApCisJc3cJdDMsMTIoYTApCisJc3cJdDQsMTYoYTApCisJc3cJdDUsMjAoYTApCisJc3cJdDYsMjQoYTApCisJc3cJdDcsMjgoYTApCisKKwlsdwl0MCwzMihhMSkKKwliZ3R6CXYxLC5Mc2tpcF9wcmVmMzBfMTI4CSMgc2tpcCAicHJlZiAzMCwxMjgoYTApIgorCSBsdwl0MSwzNihhMSkKKwlwcmVmICAgIDMwLDEyOChhMCkgICAjIGNvbnRpbnVlIHNldHRpbmcgdXAgdGhlIGRlc3QsIGFkZHIgMTI4CisuTHNraXBfcHJlZjMwXzEyODoKKwlsdwl0Miw0MChhMSkKKwlsdwl0Myw0NChhMSkKKwlsdwl0NCw0OChhMSkKKwlsdwl0NSw1MihhMSkKKwlsdwl0Niw1NihhMSkKKwlsdwl0Nyw2MChhMSkKKyAgICAgICAgcHJlZiAgICAwLCAxNjAoYTEpICAgICMgYnJpbmcgdGhlIG5leHQgbGluZXMgb2Ygc3JjLCBhZGRyIDE2MAorCisJc3cJdDAsMzIoYTApCisJc3cJdDEsMzYoYTApCisJc3cJdDIsNDAoYTApCisJc3cJdDMsNDQoYTApCisJc3cJdDQsNDgoYTApCisJc3cJdDUsNTIoYTApCisJc3cJdDYsNTYoYTApCisJc3cJdDcsNjAoYTApCisKKwlhZGRpdQlhMCxhMCw2NAkjIGFkZGluZyA2NCB0byBkZXN0CisJc2d0dQl2MSxhMCx0OQorCWJuZQlhMCxhMywuTGxvb3AxNncKKwkgYWRkaXUJYTEsYTEsNjQJIyBhZGRpbmcgNjQgdG8gc3JjCisJbW92ZQlhMix0OAorCisjIEhlcmUgd2UgaGF2ZSBzcmMgYW5kIGRlc3Qgd29yZC1hbGlnbmVkIGJ1dCBsZXNzIHRoYW4gNjQtYnl0ZXMgdG8gZ28KKworLkxjaGs4dzoKKwlwcmVmIDAsIDB4MChhMSkKKwlhbmRpCXQ4LGEyLDB4MWYJIyBpcyB0aGVyZSBhIDMyLWJ5dGUgY2h1bms/CisJCQkJIyB0aGUgdDggaXMgdGhlIHJlbWluZGVyIGNvdW50IHBhc3QgMzItYnl0ZXMKKwliZXEJYTIsdDgsLkxjaGsxdwkjIHdoZW4gYTI9dDgsIG5vIDMyLWJ5dGUgY2h1bmsKKwkgbm9wCisKKwlsdwl0MCwwKGExKQorCWx3CXQxLDQoYTEpCisJbHcJdDIsOChhMSkKKwlsdwl0MywxMihhMSkKKwlsdwl0NCwxNihhMSkKKwlsdwl0NSwyMChhMSkKKwlsdwl0NiwyNChhMSkKKwlsdwl0NywyOChhMSkKKwlhZGRpdQlhMSxhMSwzMgorCisJc3cJdDAsMChhMCkKKwlzdwl0MSw0KGEwKQorCXN3CXQyLDgoYTApCisJc3cJdDMsMTIoYTApCisJc3cJdDQsMTYoYTApCisJc3cJdDUsMjAoYTApCisJc3cJdDYsMjQoYTApCisJc3cJdDcsMjgoYTApCisJYWRkaXUJYTAsYTAsMzIKKworLkxjaGsxdzoKKwlhbmRpCWEyLHQ4LDB4MwkjIG5vdyBhMiBpcyB0aGUgcmVtaW5kZXIgcGFzdCAxdyBjaHVua3MKKwliZXEJYTIsdDgsLkxsYXN0OAorCSBzdWJ1CWEzLHQ4LGEyCSMgYTMgaXMgY291bnQgb2YgYnl0ZXMgaW4gMXcgY2h1bmtzCisJYWRkdQlhMyxhMCxhMwkjIG5vdyBhMyBpcyB0aGUgZHN0IGFkZHJlc3MgcGFzdCB0aGUgMXcgY2h1bmtzCisKKyMgY29weWluZyBpbiB3b3JkcyAoNC1ieXRlIGNodW5rcykKKy5Md29yZENvcHlfbG9vcDoKKwlsdwl0MywwKGExKQkjIHRoZSBmaXJzdCB0MyBtYXkgYmUgZXF1YWwgdDAgLi4uIG9wdGltaXplPworCWFkZGl1CWExLGExLDQKKwlhZGRpdQlhMCxhMCw0CisJYm5lCWEwLGEzLC5Md29yZENvcHlfbG9vcAorCSBzdwl0MywtNChhMCkKKworIyBGb3IgdGhlIGxhc3QgKDw4KSBieXRlcworLkxsYXN0ODoKKwlibGV6CWEyLC5MbGVhdmUKKwkgYWRkdQlhMyxhMCxhMgkjIGEzIGlzIHRoZSBsYXN0IGRzdCBhZGRyZXNzCisuTGxhc3Q4bG9vcDoKKwlsYgl2MSwwKGExKQorCWFkZGl1CWExLGExLDEKKwlhZGRpdQlhMCxhMCwxCisJYm5lCWEwLGEzLC5MbGFzdDhsb29wCisJIHNiCXYxLC0xKGEwKQorCisuTGxlYXZlOgorCWoJcmEKKwkgbm9wCisKKyMKKyMgVU5BTElHTkVEIGNhc2UKKyMKKworLkx1bmFsaWduZWQ6CisJIyBnb3QgaGVyZSB3aXRoIGEzPSJuZWd1IGEwIgorCWFuZGkJYTMsYTMsMHgzCSMgdGVzdCBpZiB0aGUgYTAgaXMgd29yZCBhbGlnbmVkCisJYmVxeglhMywuTHVhX2NoazE2dworCSBzdWJ1CWEyLGEyLGEzCSMgYnl0ZXMgbGVmdCBhZnRlciBpbml0aWFsIGEzIGJ5dGVzCisKKwlMV0hJCXYxLDAoYTEpCisJTFdMTwl2MSwzKGExKQorCWFkZHUJYTEsYTEsYTMJIyBhMyBtYXkgYmUgaGVyZSAxLCAyIG9yIDMKKwlTV0hJCXYxLDAoYTApCisJYWRkdQlhMCxhMCxhMwkjIGJlbG93IHRoZSBkc3Qgd2lsbCBiZSB3b3JkIGFsaWduZWQgKE5PVEUxKQorCisuTHVhX2NoazE2dzoKKwlhbmRpCXQ4LGEyLDB4M2YJIyBhbnkgd2hvbGUgNjQtYnl0ZSBjaHVua3M/CisJCQkJIyB0OCBpcyB0aGUgYnl0ZSBjb3VudCBhZnRlciA2NC1ieXRlIGNodW5rcworCWJlcQlhMix0OCwuTHVhX2Noazh3ICMgaWYgYTI9PXQ4LCBubyA2NC1ieXRlIGNodW5rcworCQkJCSMgVGhlcmUgd2lsbCBiZSBhdCBtb3N0IDEgMzItYnl0ZSBjaHVuayBhZnRlciBpdAorCSBzdWJ1CWEzLGEyLHQ4CSMgc3VidHJhY3QgZnJvbSBhMiB0aGUgcmVtaW5kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIZXJlIGEzIGNvdW50cyBieXRlcyBpbiAxNncgY2h1bmtzCisJYWRkdQlhMyxhMCxhMwkjIE5vdyBhMyBpcyB0aGUgZmluYWwgZHN0IGFmdGVyIDY0LWJ5dGUgY2h1bmtzCisKKwlhZGR1CXQwLGEwLGEyCSMgdDAgaXMgdGhlICJwYXN0IHRoZSBlbmQiIGFkZHJlc3MKKworCXN1YnUJdDksdDAsMTYwCSMgdDkgaXMgdGhlICJsYXN0IHNhZmUgcHJlZiAzMCwxMjgoYTApIiBhZGRyZXNzCisKKwlwcmVmICAgIDAsMChhMSkJCSMgYnJpbmcgdGhlIGZpcnN0IGxpbmUgb2Ygc3JjLCBhZGRyIDAKKwlwcmVmICAgIDAsMzIoYTEpCSMgYnJpbmcgdGhlIHNlY29uZCBsaW5lIG9mIHNyYywgYWRkciAzMgorCXByZWYgICAgMCw2NChhMSkJIyBicmluZyB0aGUgdGhpcmQgbGluZSBvZiBzcmMsIGFkZHIgNjQKKwlwcmVmCTMwLDMyKGEwKQkjIHNhZmUsIGFzIHdlIGhhdmUgYXQgbGVhc3QgNjQgYnl0ZXMgYWhlYWQKKyMgSW4gY2FzZSB0aGUgYTAgPiB0OSBkb24ndCB1c2UgInByZWYgMzAiIGF0IGFsbAorCXNndHUJdjEsYTAsdDkKKwliZ3R6CXYxLC5MdWFfbG9vcDE2dwkjIHNraXAgInByZWYgMzAsNjQoYTApIiBmb3IgdG9vIHNob3J0IGFycmF5cworCSBub3AKKyMgb3RoZXJ3aXNlLCBzdGFydCB3aXRoIHVzaW5nIHByZWYzMAorCXByZWYJMzAsNjQoYTApCisuTHVhX2xvb3AxNnc6CisJcHJlZgkwLDk2KGExKQorCUxXSEkJdDAsMChhMSkKKwlMV0xPCXQwLDMoYTEpCisJTFdISQl0MSw0KGExKQorCWJndHoJdjEsLkx1YV9za2lwX3ByZWYzMF85NgorCSBMV0xPCXQxLDcoYTEpCisJcHJlZiAgICAzMCw5NihhMCkgICAjIGNvbnRpbnVlIHNldHRpbmcgdXAgdGhlIGRlc3QsIGFkZHIgOTYKKy5MdWFfc2tpcF9wcmVmMzBfOTY6CisJTFdISQl0Miw4KGExKQorCUxXTE8JdDIsMTEoYTEpCisJTFdISQl0MywxMihhMSkKKwlMV0xPCXQzLDE1KGExKQorCUxXSEkJdDQsMTYoYTEpCisJTFdMTwl0NCwxOShhMSkKKwlMV0hJCXQ1LDIwKGExKQorCUxXTE8JdDUsMjMoYTEpCisJTFdISQl0NiwyNChhMSkKKwlMV0xPCXQ2LDI3KGExKQorCUxXSEkJdDcsMjgoYTEpCisJTFdMTwl0NywzMShhMSkKKyAgICAgICAgcHJlZiAgICAwLDEyOChhMSkgICAgIyBicmluZyB0aGUgbmV4dCBsaW5lcyBvZiBzcmMsIGFkZHIgMTI4CisKKwlzdwl0MCwwKGEwKQorCXN3CXQxLDQoYTApCisJc3cJdDIsOChhMCkKKwlzdwl0MywxMihhMCkKKwlzdwl0NCwxNihhMCkKKwlzdwl0NSwyMChhMCkKKwlzdwl0NiwyNChhMCkKKwlzdwl0NywyOChhMCkKKworCUxXSEkJdDAsMzIoYTEpCisJTFdMTwl0MCwzNShhMSkKKwlMV0hJCXQxLDM2KGExKQorCWJndHoJdjEsLkx1YV9za2lwX3ByZWYzMF8xMjgKKwlMV0xPCXQxLDM5KGExKQorCXByZWYgICAgMzAsMTI4KGEwKSAgICMgY29udGludWUgc2V0dGluZyB1cCB0aGUgZGVzdCwgYWRkciAxMjgKKy5MdWFfc2tpcF9wcmVmMzBfMTI4OgorCUxXSEkJdDIsNDAoYTEpCisJTFdMTwl0Miw0MyhhMSkKKwlMV0hJCXQzLDQ0KGExKQorCUxXTE8JdDMsNDcoYTEpCisJTFdISQl0NCw0OChhMSkKKwlMV0xPCXQ0LDUxKGExKQorCUxXSEkJdDUsNTIoYTEpCisJTFdMTwl0NSw1NShhMSkKKwlMV0hJCXQ2LDU2KGExKQorCUxXTE8JdDYsNTkoYTEpCisJTFdISQl0Nyw2MChhMSkKKwlMV0xPCXQ3LDYzKGExKQorICAgICAgICBwcmVmICAgIDAsIDE2MChhMSkgICAgIyBicmluZyB0aGUgbmV4dCBsaW5lcyBvZiBzcmMsIGFkZHIgMTYwCisKKwlzdwl0MCwzMihhMCkKKwlzdwl0MSwzNihhMCkKKwlzdwl0Miw0MChhMCkKKwlzdwl0Myw0NChhMCkKKwlzdwl0NCw0OChhMCkKKwlzdwl0NSw1MihhMCkKKwlzdwl0Niw1NihhMCkKKwlzdwl0Nyw2MChhMCkKKworCWFkZGl1CWEwLGEwLDY0CSMgYWRkaW5nIDY0IHRvIGRlc3QKKwlzZ3R1CXYxLGEwLHQ5CisJYm5lCWEwLGEzLC5MdWFfbG9vcDE2dworCSBhZGRpdQlhMSxhMSw2NAkjIGFkZGluZyA2NCB0byBzcmMKKwltb3ZlCWEyLHQ4CisKKyMgSGVyZSB3ZSBoYXZlIHNyYyBhbmQgZGVzdCB3b3JkLWFsaWduZWQgYnV0IGxlc3MgdGhhbiA2NC1ieXRlcyB0byBnbworCisuTHVhX2Noazh3OgorCXByZWYgMCwgMHgwKGExKQorCWFuZGkJdDgsYTIsMHgxZgkjIGlzIHRoZXJlIGEgMzItYnl0ZSBjaHVuaz8KKwkJCQkjIHRoZSB0OCBpcyB0aGUgcmVtaW5kZXIgY291bnQKKwliZXEJYTIsdDgsLkx1YV9jaGsxdyAjIHdoZW4gYTI9dDgsIG5vIDMyLWJ5dGUgY2h1bmsKKwkgbm9wCisKKwlMV0hJCXQwLDAoYTEpCisJTFdMTwl0MCwzKGExKQorCUxXSEkJdDEsNChhMSkKKwlMV0xPCXQxLDcoYTEpCisJTFdISQl0Miw4KGExKQorCUxXTE8JdDIsMTEoYTEpCisJTFdISQl0MywxMihhMSkKKwlMV0xPCXQzLDE1KGExKQorCUxXSEkJdDQsMTYoYTEpCisJTFdMTwl0NCwxOShhMSkKKwlMV0hJCXQ1LDIwKGExKQorCUxXTE8JdDUsMjMoYTEpCisJTFdISQl0NiwyNChhMSkKKwlMV0xPCXQ2LDI3KGExKQorCUxXSEkJdDcsMjgoYTEpCisJTFdMTwl0NywzMShhMSkKKwlhZGRpdQlhMSxhMSwzMgorCisJc3cJdDAsMChhMCkKKwlzdwl0MSw0KGEwKQorCXN3CXQyLDgoYTApCisJc3cJdDMsMTIoYTApCisJc3cJdDQsMTYoYTApCisJc3cJdDUsMjAoYTApCisJc3cJdDYsMjQoYTApCisJc3cJdDcsMjgoYTApCisJYWRkaXUJYTAsYTAsMzIKKworLkx1YV9jaGsxdzoKKwlhbmRpCWEyLHQ4LDB4MwkjIG5vdyBhMiBpcyB0aGUgcmVtaW5kZXIgcGFzdCAxdyBjaHVua3MKKwliZXEJYTIsdDgsLkx1YV9zbWFsbENvcHkKKwkgc3VidQlhMyx0OCxhMgkjIGEzIGlzIGNvdW50IG9mIGJ5dGVzIGluIDF3IGNodW5rcworCWFkZHUJYTMsYTAsYTMJIyBub3cgYTMgaXMgdGhlIGRzdCBhZGRyZXNzIHBhc3QgdGhlIDF3IGNodW5rcworCisjIGNvcHlpbmcgaW4gd29yZHMgKDQtYnl0ZSBjaHVua3MpCisuTHVhX3dvcmRDb3B5X2xvb3A6CisJTFdISQl2MSwwKGExKQorCUxXTE8JdjEsMyhhMSkKKwlhZGRpdQlhMSxhMSw0CisJYWRkaXUJYTAsYTAsNAkJIyBub3RlOiBkc3Q9YTAgaXMgd29yZCBhbGlnbmVkIGhlcmUsIHNlZSBOT1RFMQorCWJuZQlhMCxhMywuTHVhX3dvcmRDb3B5X2xvb3AKKwkgc3cJdjEsLTQoYTApCisKKyMgTm93IGxlc3MgdGhhbiA0IGJ5dGVzICh2YWx1ZSBpbiBhMikgbGVmdCB0byBjb3B5CisuTHVhX3NtYWxsQ29weToKKwliZXF6CWEyLC5MbGVhdmUKKwlhZGR1CWEzLGEwLGEyCSMgYTMgaXMgdGhlIGxhc3QgZHN0IGFkZHJlc3MKKy5MdWFfc21hbGxDb3B5X2xvb3A6CisJbGIJdjEsMChhMSkKKwlhZGRpdQlhMSxhMSwxCisJYWRkaXUJYTAsYTAsMQorCWJuZQlhMCxhMywuTHVhX3NtYWxsQ29weV9sb29wCisJIHNiCXYxLC0xKGEwKQorCisJaglyYQorCSBub3AKKworCS5zZXQJYXQKKwkuc2V0CXJlb3JkZXIKKworRU5EKG1lbWNweSkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgSW1wbGVtZW50YXRpb24gOiBTdGF0aWMgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zdHJpbmcvbWVtc2V0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N0cmluZy9tZW1zZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTYzMGNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zdHJpbmcvbWVtc2V0LlMKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkKKyAqICAgICAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4sIENhbGlmb3JuaWEuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogIG1lbXNldC5TLCB2ZXJzaW9uICI2NGgiIHdpdGggMSBjYWNoZSBsaW5lIGhvcml6b24gZm9yICJwcmVmIDMwIiBhbmQgMTQgbm9wcworICogIFZlcnNpb246ICIwNDMwMDkiCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgSW5jbHVkZSBmaWxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCisvKgorICogVGhpcyByb3V0aW5lIGNvdWxkIGJlIG9wdGltaXplZCBmb3IgTUlQUzY0LiBUaGUgY3VycmVudCBjb2RlIG9ubHkKKyAqIHVzZXMgTUlQUzMyIGluc3RydWN0aW9ucy4KKyAqLworCisjaWYgZGVmaW5lZChfX01JUFNFQl9fKQorIyAgZGVmaW5lIFNXSEkJc3dsCQkvKiBoaWdoIHBhcnQgaXMgbGVmdCBpbiBiaWctZW5kaWFuCSovCisjICBkZWZpbmUgU1dMTwlzd3IJCS8qIGxvdyBwYXJ0IGlzIHJpZ2h0IGluIGJpZy1lbmRpYW4JKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01JUFNFTF9fKQorIyAgZGVmaW5lIFNXSEkJc3dyCQkvKiBoaWdoIHBhcnQgaXMgcmlnaHQgaW4gbGl0dGxlLWVuZGlhbgkqLworIyAgZGVmaW5lIFNXTE8Jc3dsCQkvKiBsb3cgcGFydCBpcyBsZWZ0IGluIGxpdHRsZS1lbmRpYW4JKi8KKyNlbmRpZgorCisjaWYgIShkZWZpbmVkKFhHUFJPRikgfHwgZGVmaW5lZChYUFJPRikpCisjdW5kZWYgU0VUVVBfR1AKKyNkZWZpbmUgU0VUVVBfR1AKKyNlbmRpZgorCisjaWZkZWYgTkRFQlVHCisjZGVmaW5lIERCRyAjCisjZWxzZQorI2RlZmluZSBEQkcKKyNlbmRpZgorCisvKgorICogdm9pZCBfbWVtc2V0MTYodWludDE2X3QqIGRzdCwgdWludDE2X3QgdmFsdWUsIHNpemVfdCBzaXplKTsKKyAqLworCitMRUFGKF9tZW1zZXQxNiwwKQorCS5zZXQgbm9yZW9yZGVyCitEQkcJLyogQ2hlY2sgcGFyYW1ldGVycyAqLworREJHCWFuZGkJdDAsYTAsMQkJCSMgYTAgbXVzdCBiZSBoYWxmd29yZCBhbGlnbmVkCitEQkcJdG5lCXQwLHplcm8KK0RCRwlhbmRpCXQyLGEyLDEJCQkjIGEyIG11c3QgYmUgZXZlbgorREJHCXRuZQl0Mix6ZXJvCisKKyNpZmRlZiBGSVhBUkdTCisJIyBlbnN1cmUgY291bnQgaXMgZXZlbgorI2lmIChfX21pcHM9PTMyKSAmJiAoX19taXBzX2lzYV9yZXY+PTIpCisJaW5zCWEyLHplcm8sMCwxCisjZWxzZQorCW9yaQlhMiwxCisJeG9yaQlhMiwxCisjZW5kaWYKKyNlbmRpZgorCisjaWYgKF9fbWlwcz09MzIpICYmIChfX21pcHNfaXNhX3Jldj49MikKKwlpbnMJYTEsYTEsMTYsMTYKKyNlbHNlCisJYW5kaQlhMSwweGZmZmYKKwlzbGwJdDMsYTEsMTYKKwlvcglhMSx0MworI2VuZGlmCisKKwliZXF6CWEyLC5MZG9uZQorCSBhbmRpCXQxLGEwLDIKKwliZXF6CXQxLC5MYWxpZ25vaworCSBhZGR1CXQwLGEwLGEyCQkjIHQwIGlzIHRoZSAicGFzdCB0aGUgZW5kIiBhZGRyZXNzCisJc2gJYTEsMChhMCkJCSMgc3RvcmUgb25lIGhhbGZ3b3JkIHRvIGdldCBhbGlnbmVkCisJYWRkdQlhMCwyCisJc3VidQlhMiwyCisuTGFsaWdub2s6CisJc2x0aQl0MSxhMiw0CQkJIyAuTGFsaWduZWQgZm9yIDQgb3IgbW9yZSBieXRlcworCWJlcXoJdDEsLkxhbGlnbmVkCisJIHNuZQl0MSxhMiwyCQkJIyBvbmUgbW9yZSBoYWxmd29yZD8KKwlibmV6CXQxLC5MZG9uZQorCSBub3AKKwlzaAlhMSwwKGEwKQorLkxkb25lOgorCWoJcmEKKwkgbm9wCisJLnNldCByZW9yZGVyCitFTkQoX21lbXNldDE2KQorCisvKgorICogdm9pZCBfbWVtc2V0MzIodWludDMyX3QqIGRzdCwgdWludDMyX3QgdmFsdWUsIHNpemVfdCBzaXplKTsKKyAqLworCitMRUFGKF9tZW1zZXQzMiwwKQorCS5zZXQgbm9yZW9yZGVyCitEQkcJLyogQ2hlY2sgcGFyYW1ldGVycyAqLworREJHCWFuZGkJdDAsYTAsMwkJCSMgYTAgbXVzdCBiZSB3b3JkIGFsaWduZWQKK0RCRwl0bmUJdDAsemVybworREJHCWFuZGkJdDIsYTIsMwkJCSMgYTIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMKK0RCRwl0bmUJdDIsemVybworCisjaWZkZWYgRklYQVJHUworCSMgZW5zdXJlIGNvdW50IGlzIGEgbXVsdGlwbGUgb2YgNAorI2lmIChfX21pcHM9PTMyKSAmJiAoX19taXBzX2lzYV9yZXY+PTIpCisJaW5zCSRhMiwkMCwwLDIKKyNlbHNlCisJb3JpCWEyLDMKKwl4b3JpCWEyLDMKKyNlbmRpZgorI2VuZGlmCisKKwlibmV6CWEyLC5MYWxpZ25lZAkJIyBhbnkgd29yayB0byBkbz8KKwkgYWRkdQl0MCxhMCxhMgkJIyB0MCBpcyB0aGUgInBhc3QgdGhlIGVuZCIgYWRkcmVzcworCisJaglyYQorCSBub3AKKwkuc2V0IHJlb3JkZXIKK0VORChfbWVtc2V0MzIpCisKK0xFQUYobWVtc2V0LDApCisKKwkuc2V0CW5vcmVvcmRlcgorCS5zZXQJbm9hdAorCisJYWRkdQl0MCxhMCxhMgkJIyB0MCBpcyB0aGUgInBhc3QgdGhlIGVuZCIgYWRkcmVzcworCXNsdGkJQVQsYTIsNAkJCSMgaXMgYTIgbGVzcyB0aGFuIDQ/CisJYm5lCUFULHplcm8sLkxsYXN0NAkJIyBpZiB5ZXMsIGdvIHRvIGxhc3Q0CisJIG1vdmUJdjAsYTAJCQkjIG1lbXNldCByZXR1cm5zIHRoZSBkc3QgcG9pbnRlcgorCisJYmVxCWExLHplcm8sLkxzZXQwCisJIHN1YnUJdjEsemVybyxhMAorCisJIyBzbWVhciBieXRlIGludG8gMzIgYml0IHdvcmQKKyNpZiAoX19taXBzPT0zMikgJiYgKF9fbWlwc19pc2FfcmV2Pj0yKQorCWlucyAgICAgYTEsIGExLCA4LCA4ICAgICAgICAjIFJlcGxpY2F0ZSBmaWxsIGJ5dGUgaW50byBoYWxmLXdvcmQuCisJaW5zICAgICBhMSwgYTEsIDE2LCAxNiAgICAgICMgUmVwbGljYXRlIGZpbGwgYnl0ZSBpbnRvIHdvcmQuCisjZWxzZQorCWFuZAlhMSwweGZmCisJc2xsCUFULGExLDgKKwlvcglhMSxBVAorCXNsbAlBVCxhMSwxNgorCW9yCWExLEFUCisjZW5kaWYKKworLkxzZXQwOgorCWFuZGkJdjEsdjEsMHgzCQkjIHdvcmQtdW5hbGlnbmVkIGFkZHJlc3M/CisJYmVxCXYxLHplcm8sLkxhbGlnbmVkCSMgdjEgaXMgdGhlIHVuYWxpZ25tZW50IGNvdW50CisJIHN1YnUJYTIsYTIsdjEKKwlTV0hJCWExLDAoYTApCisJYWRkdQlhMCxhMCx2MQorCisjIEhlcmUgd2UgaGF2ZSB0aGUgIndvcmQtYWxpZ25lZCIgYTAgKHVudGlsIHRoZSAibGFzdDQiKQorLkxhbGlnbmVkOgorCWFuZGkJdDgsYTIsMHgzZgkjIGFueSA2NC1ieXRlIGNodW5rcz8KKwkJCQkjIHQ4IGlzIHRoZSBieXRlIGNvdW50IHBhc3QgNjQtYnl0ZSBjaHVua3MKKwliZXEJYTIsdDgsLkxjaGs4dwkjIHdoZW4gYTI9PXQ4LCBubyA2NC1ieXRlIGNodW5rcworCQkJCSMgVGhlcmUgd2lsbCBiZSBhdCBtb3N0IDEgMzItYnl0ZSBjaHVuayB0aGVuCisJIHN1YnUJYTMsYTIsdDgJIyBzdWJ0cmFjdCBmcm9tIGEyIHRoZSByZW1pbmRlcgorCQkJCSMgSGVyZSBhMyBjb3VudHMgYnl0ZXMgaW4gMTZ3IGNodW5rcworCWFkZHUJYTMsYTAsYTMJIyBOb3cgYTMgaXMgdGhlIGZpbmFsIGRzdCBhZnRlciA2NC1ieXRlIGNodW5rcworCisjIEZpbmQgb3V0LCBpZiB0aGVyZSBhcmUgYW55IDY0LWJ5dGUgY2h1bmtzIGFmdGVyIHdoaWNoIHdpbGwgYmUgc3RpbGwgYXQgbGVhc3QKKyMgOTYgYnl0ZXMgbGVmdC4gVGhlIHZhbHVlICI5NiIgaXMgY2FsY3VsYXRlZCBhcyBuZWVkZWQgYnVmZmVyIGZvcgorIyAicHJlZiAzMCw2NChhMCkiIHByZWZldGNoLCB3aGljaCBjYW4gYmUgdXNlZCBhcyAicHJlZiAzMCwwKGEwKSIgYWZ0ZXIKKyMgaW5jcmVtZW50aW5nICJhMCIgYnkgNjQuCisjIEZvciAiYTIiIGJlbG93IDE2MCB0aGVyZSB3aWxsIGJlIG5vIHN1Y2ggInByZWYgMzAgc2FmZSIgNjQtYnl0ZSBjaHVuay4KKyMKKwlzbHRpdQl2MSxhMiwxNjAKKwliZ3R6CXYxLC5MbG9vcDE2d19ub3ByZWYzMAkjIHNraXAgInByZWYgMzAsMChhMCkiCisJIHN1YnUJdDcsYTIsOTYJIyBzdWJ0cmFjdCAicHJlZiAzMCB1bnNhZmUiIHJlZ2lvbgorCQkjIGJlbG93IHdlIGhhdmUgYXQgbGVhc3QgMSA2NC1ieXRlIGNodW5rIHdoaWNoIGlzICJwcmVmIDMwIHNhZmUiCisJYW5kaQl0Nix0NywweDNmCSMgdDYgaXMgcGFzdCAiNjQtYnl0ZSBzYWZlIGNodW5rcyIgcmVtaW5kZXIKKwlzdWJ1CXQ1LHQ3LHQ2CSMgc3VidHJhY3QgZnJvbSB0NyB0aGUgcmVtaW5kZXIKKwkJCQkjIEhlcmUgdDUgY291bnRzIGJ5dGVzIGluIDE2dyAic2FmZSIgY2h1bmtzCisJYWRkdQl0NCxhMCx0NQkjIE5vdyB0NCBpcyB0aGUgZHN0IGFmdGVyIDY0LWJ5dGUgInNhZmUiIGNodW5rcworCisjIERvbid0IHVzZSAicHJlZiAzMCwwKGEwKSIgZm9yIGEwIGluIGEgIm1pZGRsZSIgb2YgYSBjYWNoZSBsaW5lCisjCXByZWYJMzAsMChhMCkKKyMgSGVyZSB3ZSBhcmUgaW4gdGhlIHJlZ2lvbiwgd2hlcmUgaXQgaXMgc2FmZSB0byB1c2UgInByZWYgMzAsNjQoYTApIgorLkxsb29wMTZ3OgorCWFkZGl1CWEwLGEwLDY0CisJcHJlZgkzMCwtMzIoYTApCSMgY29udGludWUgc2V0dGluZyB1cCB0aGUgZGVzdCwgYWRkciA2NC0zMgorCXN3CWExLC02NChhMCkKKwlzdwlhMSwtNjAoYTApCisJc3cJYTEsLTU2KGEwKQorCXN3CWExLC01MihhMCkKKwlzdwlhMSwtNDgoYTApCisJc3cJYTEsLTQ0KGEwKQorCXN3CWExLC00MChhMCkKKwlzdwlhMSwtMzYoYTApCisJbm9wCisJbm9wCQkJIyB0aGUgZXh0cmEgbm9wIGluc3RydWN0aW9ucyBoZWxwIHRvIGJhbGFuY2UKKwlub3AJCQkjIGN5Y2xlcyBuZWVkZWQgZm9yICJzdG9yZSIgKyAiZmlsbCIgKyAiZXZpY3QiCisJbm9wCQkJIyBGb3IgNjRieXRlIHN0b3JlIHRoZXJlIGFyZSBuZWVkZWQgOCBmaWxsCisJbm9wCQkJIyBhbmQgOCBldmljdCBjeWNsZXMsIGkuZS4gYXQgbGVhc3QgMzIgaW5zdHIuCisJbm9wCisJbm9wCisJcHJlZgkzMCwwKGEwKQkjIGNvbnRpbnVlIHNldHRpbmcgdXAgdGhlIGRlc3QsIGFkZHIgNjQtMAorCXN3CWExLC0zMihhMCkKKwlzdwlhMSwtMjgoYTApCisJc3cJYTEsLTI0KGEwKQorCXN3CWExLC0yMChhMCkKKwlzdwlhMSwtMTYoYTApCisJc3cJYTEsLTEyKGEwKQorCXN3CWExLC04KGEwKQorCXN3CWExLC00KGEwKQorCW5vcAorCW5vcAorCW5vcAorCW5vcAkJCSMgTk9URTogYWRkaW5nIDE0IG5vcC1zIGluc3RlYWQgb2YgMTIgbm9wLXMKKwlub3AJCQkjIGdpdmVzIGJldHRlciByZXN1bHRzIGZvciAiZmFzdCIgbWVtb3J5CisJbm9wCisJYm5lCWEwLHQ0LC5MbG9vcDE2dworCSBub3AKKworCWJlcQlhMCxhMywuTGNoazh3CSMgbWF5YmUgbm8gbW9yZSA2NC1ieXRlIGNodW5rcz8KKwkgbm9wCQkJIyB0aGlzICJkZWxheWVkIHNsb3QiIGlzIHVzZWxlc3MgLi4uCisKKy5MbG9vcDE2d19ub3ByZWYzMDoJIyB0aGVyZSBjb3VsZCBiZSB1cCB0byAzICI2NC1ieXRlIG5vcHJlZjMwIiBjaHVua3MKKwlhZGRpdQlhMCxhMCw2NAorCXN3CWExLC02NChhMCkKKwlzdwlhMSwtNjAoYTApCisJc3cJYTEsLTU2KGEwKQorCXN3CWExLC01MihhMCkKKwlzdwlhMSwtNDgoYTApCisJc3cJYTEsLTQ0KGEwKQorCXN3CWExLC00MChhMCkKKwlzdwlhMSwtMzYoYTApCisJc3cJYTEsLTMyKGEwKQorCXN3CWExLC0yOChhMCkKKwlzdwlhMSwtMjQoYTApCisJc3cJYTEsLTIwKGEwKQorCXN3CWExLC0xNihhMCkKKwlzdwlhMSwtMTIoYTApCisJc3cJYTEsLTgoYTApCisJYm5lCWEwLGEzLC5MbG9vcDE2d19ub3ByZWYzMAorCSBzdwlhMSwtNChhMCkKKworLkxjaGs4dzoJCSMgdDggaGVyZSBpcyB0aGUgYnl0ZSBjb3VudCBwYXN0IDY0LWJ5dGUgY2h1bmtzCisKKwlhbmRpCXQ3LHQ4LDB4MWYJIyBpcyB0aGVyZSBhIDMyLWJ5dGUgY2h1bms/CisJCQkJIyB0aGUgdDcgaXMgdGhlIHJlbWluZGVyIGNvdW50IHBhc3QgMzItYnl0ZXMKKwliZXEJdDgsdDcsLkxjaGsxdwkjIHdoZW4gdDg9PXQ3LCBubyAzMi1ieXRlIGNodW5rCisJIG1vdmUJYTIsdDcKKworCXN3CWExLDAoYTApCisJc3cJYTEsNChhMCkKKwlzdwlhMSw4KGEwKQorCXN3CWExLDEyKGEwKQorCXN3CWExLDE2KGEwKQorCXN3CWExLDIwKGEwKQorCXN3CWExLDI0KGEwKQorCXN3CWExLDI4KGEwKQorCWFkZGl1CWEwLGEwLDMyCisKKy5MY2hrMXc6CisJYW5kaQl0OCxhMiwweDMJIyBub3cgdDggaXMgdGhlIHJlbWluZGVyIHBhc3QgMXcgY2h1bmtzCisJYmVxCWEyLHQ4LC5MbGFzdDRhbGlnbmVkCisJIHN1YnUJYTMsYTIsdDgJIyBhMyBpcyB0aGUgY291bnQgb2YgYnl0ZXMgaW4gMXcgY2h1bmtzCisJYWRkdQlhMyxhMCxhMwkjIG5vdyBhMyBpcyB0aGUgZHN0IGFkZHJlc3MgcGFzdCB0aGUgMXcgY2h1bmtzCisKKyMgY29weWluZyBpbiB3b3JkcyAoNC1ieXRlIGNodW5rcykKKy5Md29yZENvcHlfbG9vcDoKKwlhZGRpdQlhMCxhMCw0CisJYm5lCWEwLGEzLC5Md29yZENvcHlfbG9vcAorCSBzdwlhMSwtNChhMCkKKworIyBzdG9yZSBsYXN0IDAtMyBieXRlcworIyB0aGlzIHdpbGwgcmVwZWF0IHRoZSBsYXN0IHN0b3JlIGlmIHRoZSBtZW1zZXQgZmluaXNoZXMgb24gYSB3b3JkIGJvdW5kYXJ5CisuTGxhc3Q0YWxpZ25lZDoKKwlqCXJhCisJIFNXTE8JYTEsLTEodDApCisKKy5MbGFzdDQ6CisJYmVxCWEwLHQwLC5MbGFzdDRlCisuTGxhc3Q0bDoKKwkgYWRkaXUJYTAsYTAsMQorCWJuZQlhMCx0MCwuTGxhc3Q0bAorCSBzYglhMSwtMShhMCkKKy5MbGFzdDRlOgorCWoJcmEKKwkgbm9wCisKKwkuc2V0CWF0CisJLnNldAlyZW9yZGVyCisKK0VORChtZW1zZXQpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIEltcGxlbWVudGF0aW9uIDogU3RhdGljIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3RyaW5nL21pcHMtc3RyaW5nLW9wcy5oIGIvbGliYy9hcmNoLW1pcHM2NC9zdHJpbmcvbWlwcy1zdHJpbmctb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYzNWJhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3RyaW5nL21pcHMtc3RyaW5nLW9wcy5oCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgICAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgKKyAqICAgICAgICB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTUlQUyBUZWNobm9sb2dpZXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX19NSVBTX1NUUklOR19PUFNfSAorI2RlZmluZSBfX01JUFNfU1RSSU5HX09QU19ICisgICAgLyogVGhpcyBkZWZpbml0aW9uIG9mIHRoZSBieXRlIGJpdGZpZWxkcyB1c2VzIHRoZQorICAgICAgIGFzc3VtcHRpb24gdGhhdCB0aGUgbGF5b3V0IG9mIHRoZSBiaXRmaWVsZHMgaXMKKyAgICAgICBlcXVpdmFsZW50IHRvIHRoZSBsYXlvdXQgaW4gbWVtb3J5LiAgR2VuZXJhbGx5LAorICAgICAgIGZvciB0aGUgTUlQUyBBQklzLCB0aGlzIGlzIHRydWUuIElmIHlvdSBjb21waWxlCisgICAgICAgdGhlIHN0cmNtcC5jIGZpbGUgd2l0aCAtRFNNT0tFX1RFU1RfTkVXX1NUUkNNUCwKKyAgICAgICB0aGlzIGFzc3VtcHRpb24gd2lsbCBiZSB0ZXN0ZWQuCisKKyAgICAgICBBbHNvLCByZWdhcmRsZXNzIG9mIGNoYXIgc2lnbmVkbmVzcywgQU5TSSBDIGRpY3RhdGVzIHRoYXQKKyAgICAgICBzdHJjbXAoKSB0cmVhdHMgZWFjaCBjaGFyYWN0ZXIgYXMgdW5zaWduZWQgY2hhci4gIEZvcgorICAgICAgIHN0cmxlbiBhbmQgdGhlIGxpa2UsIHNpZ25lZG5lc3MgZG9lc24ndCBtYXR0ZXIuCisKKyAgICAgICBBbHNvLCB0aGlzIGNvZGUgYXNzdW1lcyB0aGF0IHRoZXJlIGFyZSA4LWJpdHMgcGVyICdjaGFyJy4gICovCisKKyNpZiBfX21pcHM2NAordHlwZWRlZiBzdHJ1Y3QgYml0cworeworICB1bnNpZ25lZCBsb25nIEIwOjgsIEIxOjgsIEIyOjgsIEIzOjgsIEI0OjgsIEI1OjgsIEI2OjgsIEI3Ojg7Cit9IGJpdHNfdDsKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCBiaXRzCit7CisgIHVuc2lnbmVkIGxvbmcgQjA6OCwgQjE6OCwgQjI6OCwgQjM6ODsKK30gYml0c190OworI2VuZGlmCisKKyNpZm5kZWYgX1VMVworICAgIC8qIGZvciBNSVBTIEdDQywgdGhlcmUgaXMgbm8gdW5hbGlnbmVkIGJ1aWx0aW5zIC0gc28gdGhpcyBjb2RlIGZvcmNlcworICAgICAgIHRoZSBjb21waWxlciB0byB0cmVhdCB0aGUgcG9pbnRlciBhY2Nlc3MgYXMgdW5hbGlnbmVkLiAgKi8KK3N0cnVjdCB1bHcKK3sKKyAgdW5zaWduZWQgbG9uZyBiOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgX1VMVyhfX3gpICgoc3RydWN0IHVsdyAqKSAoKGNoYXIgKikoJl9feCkpKS0+YjsKKyNlbmRpZgorCisvKiBUaGlzIHVuaW9uIGFzc3VtZXMgdGhhdCBzbWFsbCBzdHJ1Y3R1cmVzIGNhbiBiZSBpbiByZWdpc3RlcnMuICBJZgorICAgbm90LCB0aGVuIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGJlIGRvbmUgLSBub3Qgb3B0aW1hbCwgYnV0IG9rLiAgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgdW5zaWduZWQgbG9uZyB2OworICBiaXRzX3QgYjsKK30gYml0ZmllbGRzX3Q7CisKKyNpZm5kZWYgZGV0ZWN0X3plcm8KKy8qIF9fbWlwc19kc3AsIF9fbWlwc19kc3ByMiwgYW5kIF9fbWlwczY0IGFyZSBwcmVkZWZpbmVkIGJ5CisgICB0aGUgY29tcGlsZXIsIGJhc2VkIG9uIGNvbW1hbmQgbGluZSBvcHRpb25zLiAgKi8KKyNpZiAoX19taXBzX2RzcCB8fCBfX21pcHNfZHNwcjIpICYmICFfX21pcHM2NAorI2RlZmluZSBfX21pcHNfdXNpbmdfZHNwIDEKKworLyogRFNQIDQtbGFuZSAoOCB1bnNpZ25lZCBiaXRzIHBlciBsaW5lKSBzdWJ0cmFjdCBhbmQgc2F0dXJhdGUKKyAqIEludHJpbnNpYyBvcGVyYXRpb24uIEhvdyB0aGlzIHdvcmtzOgorICogICAgIEdpdmVuIGEgNC1ieXRlIHN0cmluZyBvZiAiQUJDXDAiLCBzdWJ0cmFjdCB0aGlzIGFzCisgKiAgICAgYW4gdW5zaWduZWQgaW50ZWdlciBmcm9tIDB4MDEwMTAxMDE6CisgKgkgICAweDAxMDEwMTAxCisgKiAgICAgICAtIDB4NDE0MjQzMDAKKyAqICAgICAgICAtLS0tLS0tLS0tLQorICggICAgICAgICAweGJmYmViZTAxIDwtLSBhbnN3ZXIgd2l0aG91dCBzYXR1cmF0aW9uCisgKgkgICAweDAwMDAwMDAxIDwtLSBhbnN3ZXIgd2l0aCBzYXR1cmF0aW9uCisgKiBXaGVuIHRoaXMgNC1sYW5lIHZlY3RvciBpcyB0cmVhdGVkIGFzIGFuIHVuc2lnbmVkIGludCB2YWx1ZSwKKyAqIGEgbm9uLXplcm8gYW5zd2VyIGluZGljYXRlcyB0aGUgcHJlc2VuY2Ugb2YgYSB6ZXJvIGluIHRoZQorICogb3JpZ2luYWwgNC1ieXRlIGFyZ3VtZW50LiAgKi8KKwordHlwZWRlZiBzaWduZWQgY2hhciB2NGk4IF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoNCkpKTsKKworI2RlZmluZSBkZXRlY3RfemVybyhfX3gsX195LF9fMDFzLF9fODBzKVwKKyAgICAgICAoKHVuc2lnbmVkKSBfX2J1aWx0aW5fbWlwc19zdWJ1X3NfcWIoKHY0aTgpIF9fMDFzLCh2NGk4KSBfX3gpKQorCisgICAgLyogc2V0cyBhbGwgNCBsYW5lcyB0byByZXF1ZXN0ZWQgYnl0ZS4gICovCisjZGVmaW5lIHNldF9ieXRlX2xhbmVzKF9feCkgKCh1bnNpZ25lZCkgX19idWlsdGluX21pcHNfcmVwbF9xYihfX3gpKQorCisgICAgLyogc2V0cyBhbGwgNCBsYW5lcyB0byAweDAxLiAgKi8KKyNkZWZpbmUgZGVmX2FuZF9zZXRfMDEoX194KSB1bnNpZ25lZCBsb25nIF9feCA9ICh1bnNpZ25lZCkgX19idWlsdGluX21pcHNfcmVwbF9xYigweDAxKQorCisgICAgLyogc2V0cyBhbGwgNCBsYW5lcyB0byAweDgwLiBOb3QgbmVlZGVkIHdoZW4gc3VidV9zLnFiIHVzZWQuICovCisjZGVmaW5lIGRlZl9hbmRfc2V0XzgwKF9feCkgLyogZG8gbm90aGluZyAqLworCisjZWxzZQorICAgIC8qIHRoaXMgdmVyc2lvbiwgb3JpZ2luYWxseSBwdWJsaXNoZWQgaW4gdGhlIDgwJ3MsIHVzZXMKKyAgICAgICBhIHJldmVyc2UtY2Fycnktc2V0IGxpa2UgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgemVybyBieXRlLgorICAgICAgIFRoZSBzdGVwcyBhcmUsIGZvciBfX3ggPSAweDMxZmYwMDAxOgorICAgICAgIF9feCAtIF8wMXMgPSAweDMwZmRmZjAwCisgICAgICAgfl9feCA9IDB4Y2UwMGZmZmUKKyAgICAgICAoKF9feCAtIF8wMXMpICYgfl9feCkgPSAweDAwMDBmZjAwCisgICAgICAgeCAmIF84MHMgPSAweDAwMDA4MDAwIDwtIGJ5dGUgMyB3YXMgemVybworICAgICAgIFNvbWUgaW1wbGVtZW50YWlvbnMgbmFpdmVseSBhc3N1bWUgdGhhdCBjaGFyYWN0ZXJzIGFyZQorICAgICAgIGFsd2F5cyA3LWJpdCB1bnNpZ25lZCBBU0NJSS4gV2l0aCB0aGF0IGFzc3VtcHRpb24sIHRoZQorICAgICAgICImIH54IiBpcyB1c3VhbGx5IGRpc2NhcmRlZC4gU2luY2UgY2hhcmFjdGVyIHN0cmluZ3MKKyAgICAgICBhcmUgOC1iaXQsIHRoZSBhbmQgaXMgbmVlZGVkIHRvIGNhdGNoIHRoZSBjYXNlIG9mCisgICAgICAgYSBmYWxzZSBwb3NpdGl2ZSB3aGVuIHRoZSBieXRlIGlzIDB4ODAuICovCisKKyNkZWZpbmUgZGV0ZWN0X3plcm8oX194LF9feSxfMDFzLF84MHMpXAorCSgodW5zaWduZWQpICgoKF9feCkgLSBfMDFzKSAmIH4oX194KSkgJiBfODBzKQorCisjaWYgX19taXBzNjQKKyNkZWZpbmUgZGVmX2FuZF9zZXRfODAoX194KSB1bnNpZ25lZCBsb25nIF9feCA9ICAweDgwODA4MDgwODA4MDgwODB1bAorI2RlZmluZSBkZWZfYW5kX3NldF8wMShfX3gpICB1bnNpZ25lZCBsb25nIF9feCA9IDB4MDEwMTAxMDEwMTAxMDEwMXVsCisjZWxzZQorI2RlZmluZSBkZWZfYW5kX3NldF84MChfX3gpIHVuc2lnbmVkIGxvbmcgX194ID0gMHg4MDgwODA4MHVsCisjZGVmaW5lIGRlZl9hbmRfc2V0XzAxKF9feCkgdW5zaWduZWQgbG9uZyBfX3ggPSAweDAxMDEwMTAxdWwKKyNlbmRpZgorCisjZW5kaWYKKyNlbmRpZgorCisvKiBkZWFsaW5nIHdpdGggJ3ZvaWQgKicgY29udmVyc2lvbnMgd2l0aG91dCB1c2luZyBleHRyYSB2YXJpYWJsZXMuICovCisjZGVmaW5lIGdldF9ieXRlKF9feCxfX2lkeCkgKCgodW5zaWduZWQgY2hhciAqKSAoX194KSlbX19pZHhdKQorI2RlZmluZSBzZXRfYnl0ZShfX3gsX19pZHgsX19maWxsKSAoKHVuc2lnbmVkIGNoYXIgKikgKF9feCkpW19faWR4XSA9IChfX2ZpbGwpCisjZGVmaW5lIGdldF93b3JkKF9feCxfX2lkeCkgKCgodW5zaWduZWQgbG9uZyAqKSAoX194KSlbX19pZHhdKQorI2RlZmluZSBzZXRfd29yZChfX3gsX19pZHgsX19maWxsKSAoKHVuc2lnbmVkIGxvbmcgKikgKF9feCkpW19faWR4XSA9IChfX2ZpbGwpCisjZGVmaW5lIGluY19wdHJfYXMoX190eXBlLF9feCxfX2luYykgX194ID0gKHZvaWQgKikgKCgoX190eXBlKSBfX3gpICsgKF9faW5jKSkKKyNkZWZpbmUgY3Z0X3B0cl90byhfX3R5cGUsX194KSAoKF9fdHlwZSkgKF9feCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zdHJpbmcvbWlwc19zdHJsZW4uYyBiL2xpYmMvYXJjaC1taXBzNjQvc3RyaW5nL21pcHNfc3RybGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdlNTg2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3RyaW5nL21pcHNfc3RybGVuLmMKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aAorICogICAgICAgIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBNSVBTIFRlY2hub2xvZ2llcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIm1pcHMtc3RyaW5nLW9wcy5oIgorCisjZGVmaW5lIGRvX3N0cmxlbl93b3JkKF9fYXYpIHtcCisgICAgaWYgKGRldGVjdF96ZXJvKHgseCxfMDFzLF84MHMpKSBicmVhaztcCisgICAgeCA9IF9fYXY7XAorICAgIGNudCArPSBzaXplb2YgKHVuc2lnbmVkKTtcCisgICAgfQorCisjZGVmaW5lIGRvX3N0cmxlbl9ieXRlKF9feCkge1wKKyAgaWYgKChieC5iLkIjI19feCkgPT0gMCkgYnJlYWs7XAorICArK2NudDtcCisgIH0KKworI2lmIFNNT0tFX1RFU1RfTUlQU19TVFJMRU4KKyNkZWZpbmUgc3RybGVuIG15X3N0cmxlbgorI2VuZGlmCisKK3NpemVfdAorc3RybGVuIChjb25zdCBjaGFyICpfYSkKK3sKKyAgaW50IGNudCA9IDA7CisgIHVuc2lnbmVkIGxvbmcgeDsKKworICAvKiBhbGlnbiB0aGUgc3RyaW5nIHRvIHdvcmQgYm91bmRhcnkgc28gd2UgY2FuIGRvIHdvcmQgYXQgYSB0aW1lLiAgKi8KKyAgaWYgKChjdnRfcHRyX3RvICh1bnNpZ25lZCBsb25nLCBfYSkgJiAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAtIDEpKSAhPSAwKQorICAgIHsKKyAgICAgIGlmICgoY3Z0X3B0cl90byAodW5zaWduZWQgbG9uZywgX2EpICYgMSkgIT0gMCkKKwl7CisJICBpZiAoZ2V0X2J5dGUgKF9hLCAwKSA9PSAwKQorCSAgICByZXR1cm4gY250OworCSAgLyogc2V0IGJpdCAxIHNvIDItYnl0ZXMgYXJlIGNoZWNrZWQgYW5kIGluY3JlbWVudGVkLiAqLworCSAgaW5jX3B0cl9hcyAoY2hhciAqLCBfYSwgMSk7CisJICArK2NudDsKKwl9CisgICAgICBpZiAoKGN2dF9wdHJfdG8gKHVuc2lnbmVkIGxvbmcsIF9hKSAmIDIpICE9IDApCisJeworCSAgaWYgKGdldF9ieXRlIChfYSwgMCkgPT0gMCkKKwkgICAgcmV0dXJuIGNudCArIDA7CisJICBpZiAoZ2V0X2J5dGUgKF9hLCAxKSA9PSAwKQorCSAgICByZXR1cm4gY250ICsgMTsKKwkgIGluY19wdHJfYXMgKGNoYXIgKiwgX2EsIDIpOworCSAgY250ICs9IDI7CisJfQorICAgIH0KKworI2lmIF9fbWlwczY0CisjZXJyb3Igc3RybGVuOiBtaXBzNjQgY2hlY2sgZm9yIDQtYnl0ZSBhbGlnbm1lbnQgbm90IGltcGxlbWVudGVkLgorI2VuZGlmCisKKyAgaWYgKDEpCisgICAgeworICAgICAgZGVmX2FuZF9zZXRfMDEgKF8wMXMpOworICAgICAgZGVmX2FuZF9zZXRfODAgKF84MHMpOworCisgICAgICAvKiBhcyBhZHZhbnRhZ291cyBhcyBpdCBpcyB0byBwZXJmb3JtYW5jZSwgdGhpcyBjb2RlIGNhbm5vdCBwcmUtbG9hZAorICAgICAgICAgdGhlIGZvbGxvd2luZyB3b3JkLCBub3IgY2FuIGl0IHByZWZldGNoIHRoZSBuZXh0IGxpbmUgYXQgdGhlIHN0YXJ0CisgICAgICAgICBvZiB0aGUgbG9vcCBzaW5jZSB0aGUgc3RyaW5nIGNhbiBiZSBhdCB0aGUgZW5kIG9mIGEgcGFnZSB3aXRoIHRoZQorICAgICAgICAgZm9sbG93aW5nIHBhZ2UgdW5tYXBwZWQuIFRoZXJlIGFyZSB0ZXN0cyBpbiB0aGUgc3VpdGUgdG8gY2F0Y2gKKyAgICAgICAgIGFueSBhdHRlbXB0IHRvIGdvIGJleW9uZCB0aGUgY3VycmVudCB3b3JkLiAqLworICAgICAgeCA9IGdldF93b3JkIChfYSwgMCk7CisgICAgICB3aGlsZSAoMSkKKwl7CisJICAvKiBkb2luZyA4IHdvcmRzIHNob3VsZCBjb3ZlciBtb3N0IHN0cmluZ3MuICAqLworCSAgZG9fc3RybGVuX3dvcmQgKGdldF93b3JkIChfYSwgMSkpOworCSAgZG9fc3RybGVuX3dvcmQgKGdldF93b3JkIChfYSwgMikpOworCSAgZG9fc3RybGVuX3dvcmQgKGdldF93b3JkIChfYSwgMykpOworCSAgZG9fc3RybGVuX3dvcmQgKGdldF93b3JkIChfYSwgNCkpOworCSAgZG9fc3RybGVuX3dvcmQgKGdldF93b3JkIChfYSwgNSkpOworCSAgZG9fc3RybGVuX3dvcmQgKGdldF93b3JkIChfYSwgNikpOworCSAgZG9fc3RybGVuX3dvcmQgKGdldF93b3JkIChfYSwgNykpOworCSAgZG9fc3RybGVuX3dvcmQgKGdldF93b3JkIChfYSwgOCkpOworCSAgaW5jX3B0cl9hcyAodW5zaWduZWQgbG9uZyosIF9hLCA4KTsKKwl9CisgICAgfQorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAvKiBwdWxsIGFwYXJ0IHRoZSBsYXN0IHdvcmQgcHJvY2Vzc2VkIGFuZCBmaW5kIHRoZSB6ZXJvLiAgKi8KKyAgICAgIGJpdGZpZWxkc190IGJ4OworICAgICAgYngudiA9IHg7CisjaWYgX19taXBzNjQKKyAgICAgIGRvX3N0cmxlbl9ieXRlICgwKTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICgxKTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICgyKTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICgzKTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICg0KTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICg1KTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICg2KTsKKyNlbHNlCisgICAgICBkb19zdHJsZW5fYnl0ZSAoMCk7CisgICAgICBkb19zdHJsZW5fYnl0ZSAoMSk7CisgICAgICBkb19zdHJsZW5fYnl0ZSAoMik7CisjZW5kaWYKKyAgICAgIC8qIGxhc3QgYnl0ZSBpcyB6ZXJvICovCisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBjbnQ7Cit9CisKKyN1bmRlZiBkb19zdHJsZW5fYnl0ZQorI3VuZGVmIGRvX3N0cmxlbl93b3JkCisKKyNpZiBTTU9LRV9URVNUX01JUFNfU1RSTEVOCisjaW5jbHVkZSA8c3RkaW8uaD4KK2NoYXIgc3RyMVtdID0gIkRIUllTVE9ORSBQUk9HUkFNLCAxJ1NUIFNUUklORyI7CitjaGFyIHN0cjJbXSA9ICJESFJZU1RPTkUgUFJPR1JBTSwgMidTVCBTVFJJTkciOworCitjaGFyIHN0cjNbXSA9ICJhbm90aGVyIHN0cmluZyI7CitjaGFyIHN0cjRbXSA9ICJhbm90aGVyIjsKKworY2hhciBzdHI1W10gPSAic29tZXMgdHJpbmciOworY2hhciBzdHI2W10gPSAic29tZXNfdHJpbmciOworCitjaGFyIHN0cjdbMTZdLCBzdHI4WzE2XTsKKworc3RhdGljIGNoYXIgKgorY2hrICh1bnNpZ25lZCBsb25nIG1pbmUsIHVuc2lnbmVkIGxvbmcgbGlicywgaW50ICplcnJvcnMpCit7CisgIHN0YXRpYyBjaGFyIGFuc3dlclsxMDI0XTsKKyAgY2hhciAqcmVzdWx0ID0gbWluZSA9PSBsaWJzID8gIlBBU1MiIDogIkZBSUwiOworICBzcHJpbnRmIChhbnN3ZXIsICJuZXdfc3RybGVuPSVkOiBsaWJfc3RybGVuPSVkOiAlcyEiLCBtaW5lLCBsaWJzLCByZXN1bHQpOworICBpZiAobWluZSAhPSBsaWJzKQorICAgICgqZXJyb3JzKSsrOworICByZXR1cm4gYW5zd2VyOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgaW50IGVycm9ycyA9IDA7CisgIC8qIHNldCAtMSBpbiBvbmUgcG9zaXRpb24gKi8KKyAgc3RyNls1XSA9IDB4ZmY7CisgIC8qIHNldCB6ZXJvIGluIHNhbWUgcG9zaXRpb24gd2l0aCBqdW5rIGluIGZvbGxvd2luZyAzICovCisgIHN0cjdbMF0gPSBzdHI4WzBdID0gMDsKKyAgc3RyN1sxXSA9IDB4ZmY7CisgIHN0cjdbMl0gPSAnYSc7CisgIHN0cjdbM10gPSAyOworICBzdHI4WzFdID0gJ3MnOworICBzdHI4WzJdID0gLTI7CisgIHN0cjhbM10gPSAwOworCisgIGZwcmludGYgKHN0ZGVyciwgIj09PT09PT09PT0gbWlwc19zdHJsZW4lcyB0ZXN0Li4uXG4iLAorCSAgIGFyZ3ZbMF0gPyBhcmd2WzBdIDogInVua25vd24gc3RybGVuIik7CisjZGVmaW5lIFAoX194LF9feSkge1wKKyAgICBpbnQgYSA9IG15X3N0cmxlbihfX3ggKyBfX3kpO1wKKyAgICBpbnQgYiA9IChzdHJsZW4pKF9feCArIF9feSkgLyogbGlicmFyeSB2ZXJzaW9uICovO1wKKyAgICBmcHJpbnRmKHN0ZGVyciwiJXMrJWQ6ICVzXG4iLCNfX3gsX195LGNoayhhLGIsJmVycm9ycykpO1wKKyAgICB9CisKKyAgUCAoc3RyMSwgMCk7CisgIFAgKHN0cjEsIDEpOworICBQIChzdHIxLCAyKTsKKyAgUCAoc3RyMSwgMyk7CisKKyAgUCAoc3RyMiwgMCk7CisgIFAgKHN0cjIsIDEpOworICBQIChzdHIyLCAyKTsKKyAgUCAoc3RyMiwgMyk7CisKKyAgUCAoc3RyMywgMCk7CisgIFAgKHN0cjMsIDEpOworICBQIChzdHIzLCAyKTsKKyAgUCAoc3RyMywgMyk7CisKKyAgUCAoc3RyNCwgMCk7CisgIFAgKHN0cjQsIDEpOworICBQIChzdHI0LCAyKTsKKyAgUCAoc3RyNCwgMyk7CisKKyAgUCAoc3RyNSwgMCk7CisgIFAgKHN0cjUsIDEpOworICBQIChzdHI1LCAyKTsKKyAgUCAoc3RyNSwgMyk7CisKKyAgUCAoc3RyNiwgMCk7CisgIFAgKHN0cjYsIDEpOworICBQIChzdHI2LCAyKTsKKyAgUCAoc3RyNiwgMyk7CisKKyAgUCAoc3RyNywgMCk7CisgIFAgKHN0cjcsIDEpOworICBQIChzdHI3LCAyKTsKKyAgUCAoc3RyNywgMyk7CisKKyAgUCAoc3RyOCwgMCk7CisgIFAgKHN0cjgsIDEpOworICBQIChzdHI4LCAyKTsKKyAgUCAoc3RyOCwgMyk7CisKKyAgcmV0dXJuIGVycm9yczsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2FjY2VwdDQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19hY2NlcHQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5YjZjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19hY2NlcHQ0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2FjY2VwdDQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9hY2NlcHQ0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fYWNjZXB0NCkKKy5oaWRkZW4gX19hY2NlcHQ0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fYnJrLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fYnJrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFmODljNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19icmsuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fYnJrKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfYnJrCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fYnJrKQorLmhpZGRlbiBfX2JyawpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19jb25uZWN0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0NDQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19jb25uZWN0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2Nvbm5lY3QpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9jb25uZWN0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fY29ubmVjdCkKKy5oaWRkZW4gX19jb25uZWN0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZmIzODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZXBvbGxfcHdhaXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9lcG9sbF9wd2FpdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX2Vwb2xsX3B3YWl0KQorLmhpZGRlbiBfX2Vwb2xsX3B3YWl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZXhpdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2V4aXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDVlMDNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2V4aXQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZXhpdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2V4aXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19leGl0KQorLmhpZGRlbiBfX2V4aXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19mYWR2aXNlNjQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19mYWR2aXNlNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGFjZWIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19mYWR2aXNlNjQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mYWR2aXNlNjQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19mYWR2aXNlNjQpCisuaGlkZGVuIF9fZmFkdmlzZTY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZ2V0Y3B1LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZ2V0Y3B1LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2YzIxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19nZXRjcHUuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZ2V0Y3B1KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0Y3B1CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fZ2V0Y3B1KQorLmhpZGRlbiBfX2dldGNwdQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2dldGN3ZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2dldGN3ZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZWViNjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZ2V0Y3dkLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2dldGN3ZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldGN3ZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX2dldGN3ZCkKKy5oaWRkZW4gX19nZXRjd2QKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19nZXRkZW50czY0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MjBiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXRkZW50czY0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0ZGVudHM2NAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX2dldGRlbnRzNjQpCisuaGlkZGVuIF9fZ2V0ZGVudHM2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2dldHBpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2dldHBpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNWQ5MjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fZ2V0cGlkLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2dldHBpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldHBpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX2dldHBpZCkKKy5oaWRkZW4gX19nZXRwaWQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzMjdhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXRwcmlvcml0eSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldHByaW9yaXR5CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fZ2V0cHJpb3JpdHkpCisuaGlkZGVuIF9fZ2V0cHJpb3JpdHkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19pb2N0bC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX2lvY3RsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZhZDBkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19pb2N0bC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19pb2N0bCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2lvY3RsCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9faW9jdGwpCisuaGlkZGVuIF9faW9jdGwKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19vcGVuYXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19vcGVuYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2FjMTNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX29wZW5hdC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19vcGVuYXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9vcGVuYXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19vcGVuYXQpCisuaGlkZGVuIF9fb3BlbmF0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcHBvbGwuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19wcG9sbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNmZiOGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcHBvbGwuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fcHBvbGwpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9wcG9sbAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3Bwb2xsKQorLmhpZGRlbiBfX3Bwb2xsCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcHNlbGVjdDYuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDlkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcHNlbGVjdDYuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fcHNlbGVjdDYpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9wc2VsZWN0NgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3BzZWxlY3Q2KQorLmhpZGRlbiBfX3BzZWxlY3Q2CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcHRyYWNlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcHRyYWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEzY2UxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19wdHJhY2UuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fcHRyYWNlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcHRyYWNlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fcHRyYWNlKQorLmhpZGRlbiBfX3B0cmFjZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3JlYm9vdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3JlYm9vdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NzMxMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcmVib290LlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3JlYm9vdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3JlYm9vdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3JlYm9vdCkKKy5oaWRkZW4gX19yZWJvb3QKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGQzY2FlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19ydF9zaWdhY3Rpb24pCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9ydF9zaWdhY3Rpb24KKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19ydF9zaWdhY3Rpb24pCisuaGlkZGVuIF9fcnRfc2lnYWN0aW9uCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGFlMzlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fcnRfc2lncGVuZGluZykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3J0X3NpZ3BlbmRpbmcKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19ydF9zaWdwZW5kaW5nKQorLmhpZGRlbiBfX3J0X3NpZ3BlbmRpbmcKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2MjBlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19ydF9zaWdwcm9jbWFzaykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3J0X3NpZ3Byb2NtYXNrCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fcnRfc2lncHJvY21hc2spCisuaGlkZGVuIF9fcnRfc2lncHJvY21hc2sKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMTVkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19ydF9zaWdzdXNwZW5kKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcnRfc2lnc3VzcGVuZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3J0X3NpZ3N1c3BlbmQpCisuaGlkZGVuIF9fcnRfc2lnc3VzcGVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3N2YxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3J0X3NpZ3RpbWVkd2FpdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3J0X3NpZ3RpbWVkd2FpdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3J0X3NpZ3RpbWVkd2FpdCkKKy5oaWRkZW4gX19ydF9zaWd0aW1lZHdhaXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4MTcwNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19zY2hlZF9nZXRhZmZpbml0eSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NjaGVkX2dldGFmZmluaXR5CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fc2NoZWRfZ2V0YWZmaW5pdHkpCisuaGlkZGVuIF9fc2NoZWRfZ2V0YWZmaW5pdHkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDk2NmRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19zZXRfdGlkX2FkZHJlc3MpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZXRfdGlkX2FkZHJlc3MKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19zZXRfdGlkX2FkZHJlc3MpCisuaGlkZGVuIF9fc2V0X3RpZF9hZGRyZXNzCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fc2V0X3Rscy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NldF90bHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzk4MTUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NldF90bHMuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fc2V0X3RscykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldF90aHJlYWRfYXJlYQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3NldF90bHMpCisuaGlkZGVuIF9fc2V0X3RscwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NpZ25hbGZkNC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NpZ25hbGZkNC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNmVlZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fc2lnbmFsZmQ0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NpZ25hbGZkNCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NpZ25hbGZkNAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3NpZ25hbGZkNCkKKy5oaWRkZW4gX19zaWduYWxmZDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19zb2NrZXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX19zb2NrZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDk5MzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3NvY2tldC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19zb2NrZXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zb2NrZXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX19zb2NrZXQpCisuaGlkZGVuIF9fc29ja2V0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2ZDhmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fdGltZXJfY3JlYXRlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdGltZXJfY3JlYXRlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fdGltZXJfY3JlYXRlKQorLmhpZGRlbiBfX3RpbWVyX2NyZWF0ZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2Y1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3RpbWVyX2RlbGV0ZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3RpbWVyX2RlbGV0ZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3RpbWVyX2RlbGV0ZSkKKy5oaWRkZW4gX190aW1lcl9kZWxldGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzMxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX190aW1lcl9nZXRvdmVycnVuKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1bgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfX3RpbWVyX2dldG92ZXJydW4pCisuaGlkZGVuIF9fdGltZXJfZ2V0b3ZlcnJ1bgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlZTViZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKQEAgLTAsMCArMSwyNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3RpbWVyX2dldHRpbWUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl90aW1lcl9nZXR0aW1lCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKF9fdGltZXJfZ2V0dGltZSkKKy5oaWRkZW4gX190aW1lcl9nZXR0aW1lCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTc2NGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwpAQCAtMCwwICsxLDI2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fdGltZXJfc2V0dGltZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3RpbWVyX3NldHRpbWUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX190aW1lcl9zZXR0aW1lKQorLmhpZGRlbiBfX3RpbWVyX3NldHRpbWUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX193YWl0aWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX193YWl0aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWUwOTBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fX3dhaXRpZC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX193YWl0aWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl93YWl0aWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX193YWl0aWQpCisuaGlkZGVuIF9fd2FpdGlkCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19leGl0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19leGl0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1YTJmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvX2V4aXQuUwpAQCAtMCwwICsxLDI4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9leGl0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZXhpdF9ncm91cAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChfZXhpdCkKKworICAgIC5nbG9ibCBfRXhpdAorICAgIC5lcXUgX0V4aXQsIF9leGl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL19mbHVzaF9jYWNoZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fZmx1c2hfY2FjaGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWU0ODQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9fZmx1c2hfY2FjaGUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9mbHVzaF9jYWNoZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2NhY2hlZmx1c2gKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoX2ZsdXNoX2NhY2hlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9hY2N0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2FjY3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjcyOGRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9hY2N0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShhY2N0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfYWNjdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChhY2N0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9iaW5kLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2JpbmQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzJiNWI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9iaW5kLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShiaW5kKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfYmluZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChiaW5kKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jYXBnZXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2FwZ2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQwNTQzOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2FwZ2V0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShjYXBnZXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9jYXBnZXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoY2FwZ2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jYXBzZXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2Fwc2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0NzAyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2Fwc2V0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShjYXBzZXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9jYXBzZXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoY2Fwc2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jaGRpci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jaGRpci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjIyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2NoZGlyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShjaGRpcikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2NoZGlyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGNoZGlyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jaHJvb3QuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2hyb290LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwNWY1MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2hyb290LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShjaHJvb3QpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9jaHJvb3QKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoY2hyb290KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9ja19nZXRyZXMuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwMDNhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShjbG9ja19nZXRyZXMpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9jbG9ja19nZXRyZXMKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoY2xvY2tfZ2V0cmVzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODEzNTYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShjbG9ja19nZXR0aW1lKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfY2xvY2tfZ2V0dGltZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChjbG9ja19nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1OGExMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShjbG9ja19uYW5vc2xlZXApCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9jbG9ja19uYW5vc2xlZXAKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoY2xvY2tfbmFub3NsZWVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2I2YWU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShjbG9ja19zZXR0aW1lKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfY2xvY2tfc2V0dGltZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChjbG9ja19zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9zZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9jbG9zZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMjM3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Nsb3NlLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShjbG9zZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2Nsb3NlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGNsb3NlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzk2NTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShkZWxldGVfbW9kdWxlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZGVsZXRlX21vZHVsZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChkZWxldGVfbW9kdWxlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9kdXAuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZHVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjYTVlNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZHVwLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShkdXApCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9kdXAKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZHVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9kdXAzLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2R1cDMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjAxZjMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9kdXAzLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShkdXAzKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZHVwMworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChkdXAzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZTEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWYxY2ViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShlcG9sbF9jcmVhdGUxKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZXBvbGxfY3JlYXRlMQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChlcG9sbF9jcmVhdGUxKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9lcG9sbF9jdGwuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZXBvbGxfY3RsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWViYTYwNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZXBvbGxfY3RsLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShlcG9sbF9jdGwpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9lcG9sbF9jdGwKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZXBvbGxfY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9ldmVudGZkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2V2ZW50ZmQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Q2M2U0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9ldmVudGZkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShldmVudGZkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZXZlbnRmZDIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZXZlbnRmZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZXhlY3ZlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2V4ZWN2ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDVkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2V4ZWN2ZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZXhlY3ZlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZXhlY3ZlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGV4ZWN2ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmFjY2Vzc2F0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YmI4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZmFjY2Vzc2F0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZmFjY2Vzc2F0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGZhY2Nlc3NhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmFsbG9jYXRlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZhbGxvY2F0ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWYwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZhbGxvY2F0ZS5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZmFsbG9jYXRlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZmFsbG9jYXRlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGZhbGxvY2F0ZSkKKworICAgIC5nbG9ibCBmYWxsb2NhdGU2NAorICAgIC5lcXUgZmFsbG9jYXRlNjQsIGZhbGxvY2F0ZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2hkaXIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmNoZGlyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1NjI1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmNoZGlyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmY2hkaXIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mY2hkaXIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZmNoZGlyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2htb2QuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmNobW9kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3N2I3OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmNobW9kLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmY2htb2QpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mY2htb2QKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZmNobW9kKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2htb2RhdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2htb2RhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MTQ5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjaG1vZGF0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmY2htb2RhdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZjaG1vZGF0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGZjaG1vZGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2hvd24uUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmNob3duLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjMzNjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmNob3duLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmY2hvd24pCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mY2hvd24KKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZmNob3duKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2hvd25hdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY2hvd25hdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0Y2VmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjaG93bmF0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmY2hvd25hdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZjaG93bmF0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGZjaG93bmF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY250bC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mY250bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhYmM2NWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZjbnRsLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmY250bCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZjbnRsCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGZjbnRsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mZGF0YXN5bmMuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmRhdGFzeW5jLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJiZTExMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmRhdGFzeW5jLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmZGF0YXN5bmMpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mZGF0YXN5bmMKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZmRhdGFzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmdldHhhdHRyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjMjQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZmdldHhhdHRyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmZ2V0eGF0dHIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mZ2V0eGF0dHIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZmdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDViMWIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mbGlzdHhhdHRyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmbGlzdHhhdHRyKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZmxpc3R4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mbG9jay5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mbG9jay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NGE1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2Zsb2NrLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmbG9jaykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2Zsb2NrCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGZsb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3YmU0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmcmVtb3ZleGF0dHIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mcmVtb3ZleGF0dHIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZnJlbW92ZXhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnNldHhhdHRyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkMWY5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnNldHhhdHRyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmc2V0eGF0dHIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mc2V0eGF0dHIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZnNldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mc3RhdDY0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzdGF0NjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTRkNTFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mc3RhdDY0LlMKQEAgLTAsMCArMSwyOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmc3RhdDY0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZnN0YXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZnN0YXQ2NCkKKworICAgIC5nbG9ibCBmc3RhdAorICAgIC5lcXUgZnN0YXQsIGZzdGF0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnN0YXRhdDY0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzdGF0YXQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODhhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzdGF0YXQ2NC5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXRhdDY0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfbmV3ZnN0YXRhdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChmc3RhdGF0NjQpCisKKyAgICAuZ2xvYmwgZnN0YXRhdAorICAgIC5lcXUgZnN0YXRhdCwgZnN0YXRhdDY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzdGF0ZnM2NC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mc3RhdGZzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmU4ODVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mc3RhdGZzNjQuUwpAQCAtMCwwICsxLDI4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZzdGF0ZnM2NCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZzdGF0ZnMKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZnN0YXRmczY0KQorCisgICAgLmdsb2JsIGZzdGF0ZnMKKyAgICAuZXF1IGZzdGF0ZnMsIGZzdGF0ZnM2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mc3luYy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mc3luYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTZlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2ZzeW5jLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmc3luYykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2ZzeW5jCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGZzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9mdHJ1bmNhdGUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnRydW5jYXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThiODQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZnRydW5jYXRlLlMKQEAgLTAsMCArMSwyOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShmdHJ1bmNhdGUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9mdHJ1bmNhdGUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZnRydW5jYXRlKQorCisgICAgLmdsb2JsIGZ0cnVuY2F0ZTY0CisgICAgLmVxdSBmdHJ1bmNhdGU2NCwgZnRydW5jYXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGVnaWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0ZWdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOWM2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGVnaWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGdldGVnaWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXRlZ2lkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldGVnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGV1aWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0ZXVpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MTlkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGV1aWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGdldGV1aWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXRldWlkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldGV1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGdpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzdiZTFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRnaWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGdldGdpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldGdpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChnZXRnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGdyb3Vwcy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRncm91cHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2M0ZmExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRncm91cHMuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGdldGdyb3VwcykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldGdyb3VwcworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChnZXRncm91cHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldGl0aW1lci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRpdGltZXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTc4YTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRpdGltZXIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGdldGl0aW1lcikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldGl0aW1lcgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChnZXRpdGltZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxZjFhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGdldHBlZXJuYW1lKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0cGVlcm5hbWUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZ2V0cGVlcm5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHBnaWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cGdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZGM3N2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHBnaWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGdldHBnaWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXRwZ2lkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldHBnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHBwaWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cHBpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMGYzMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHBwaWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGdldHBwaWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXRwcGlkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldHBwaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHJlc2dpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRyZXNnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGNiNWExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRyZXNnaWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGdldHJlc2dpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldHJlc2dpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChnZXRyZXNnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHJlc3VpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRyZXN1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjE3YmY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRyZXN1aWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGdldHJlc3VpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldHJlc3VpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChnZXRyZXN1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHJsaW1pdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRybGltaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTc2YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRybGltaXQuUwpAQCAtMCwwICsxLDI4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGdldHJsaW1pdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldHJsaW1pdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChnZXRybGltaXQpCisKKyAgICAuZ2xvYmwgZ2V0cmxpbWl0NjQKKyAgICAuZXF1IGdldHJsaW1pdDY0LCBnZXRybGltaXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0cnVzYWdlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHJ1c2FnZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjU1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHJ1c2FnZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0cnVzYWdlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0cnVzYWdlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldHJ1c2FnZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0c2lkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHNpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMGM5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHNpZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0c2lkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0c2lkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldHNpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0c29ja25hbWUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0c29ja25hbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGE5NDI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0c29ja25hbWUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXRzb2NrbmFtZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChnZXRzb2NrbmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0c29ja29wdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlZTYzNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0c29ja29wdC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0c29ja29wdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2dldHNvY2tvcHQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoZ2V0c29ja29wdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNmQ0MTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0dGltZW9mZGF5KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0dGltZW9mZGF5CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldHRpbWVvZmRheSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0dWlkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHVpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNWY5NDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2dldHVpZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0dWlkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfZ2V0dWlkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGdldHVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvZ2V0eGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzQ0M2YyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9nZXR4YXR0ci5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZ2V0eGF0dHIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9nZXR4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChnZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTJmMDc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbml0X21vZHVsZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoaW5pdF9tb2R1bGUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9pbml0X21vZHVsZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChpbml0X21vZHVsZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmZkYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoaW5vdGlmeV9hZGRfd2F0Y2gpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9pbm90aWZ5X2FkZF93YXRjaAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChpbm90aWZ5X2FkZF93YXRjaCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwZDEwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvaW5vdGlmeV9pbml0MS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoaW5vdGlmeV9pbml0MSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2lub3RpZnlfaW5pdDEKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoaW5vdGlmeV9pbml0MSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg5Mzc4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoaW5vdGlmeV9ybV93YXRjaCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2lub3RpZnlfcm1fd2F0Y2gKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoaW5vdGlmeV9ybV93YXRjaCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMva2lsbC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9raWxsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1YjYxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMva2lsbC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoa2lsbCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2tpbGwKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoa2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMva2xvZ2N0bC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9rbG9nY3RsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiOWYwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMva2xvZ2N0bC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoa2xvZ2N0bCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3N5c2xvZworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChrbG9nY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9sZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbGdldHhhdHRyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVkN2M0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbGdldHhhdHRyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShsZ2V0eGF0dHIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9sZ2V0eGF0dHIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobGdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9saW5rYXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbGlua2F0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3NDllYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbGlua2F0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShsaW5rYXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9saW5rYXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9saXN0ZW4uUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbGlzdGVuLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1Y2FkZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbGlzdGVuLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShsaXN0ZW4pCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9saXN0ZW4KKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobGlzdGVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9saXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbGlzdHhhdHRyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBiMGYyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbGlzdHhhdHRyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShsaXN0eGF0dHIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9saXN0eGF0dHIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9sbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xsaXN0eGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzQ5MTE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9sbGlzdHhhdHRyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShsbGlzdHhhdHRyKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfbGxpc3R4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChsbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9scmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0ZTRkMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShscmVtb3ZleGF0dHIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9scmVtb3ZleGF0dHIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobHJlbW92ZXhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9sc2Vlay5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9sc2Vlay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOTJkNzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xzZWVrLlMKQEAgLTAsMCArMSwyOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShsc2VlaykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2xzZWVrCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKGxzZWVrKQorCisgICAgLmdsb2JsIGxzZWVrNjQKKyAgICAuZXF1IGxzZWVrNjQsIGxzZWVrCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL2xzZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9sc2V0eGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTYxZWIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9sc2V0eGF0dHIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGxzZXR4YXR0cikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX2xzZXR4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChsc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21hZHZpc2UuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWFkdmlzZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZjM4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21hZHZpc2UuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKG1hZHZpc2UpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9tYWR2aXNlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKG1hZHZpc2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21pbmNvcmUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWluY29yZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NWM5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21pbmNvcmUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKG1pbmNvcmUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9taW5jb3JlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKG1pbmNvcmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21rZGlyYXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWtkaXJhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxY2RmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21rZGlyYXQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKG1rZGlyYXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9ta2RpcmF0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKG1rZGlyYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21rbm9kYXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWtub2RhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NDNlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21rbm9kYXQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKG1rbm9kYXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9ta25vZGF0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKG1rbm9kYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21sb2NrLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21sb2NrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxZjEyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWxvY2suUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKG1sb2NrKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfbWxvY2sKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobWxvY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21sb2NrYWxsLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21sb2NrYWxsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxNThmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbWxvY2thbGwuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKG1sb2NrYWxsKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfbWxvY2thbGwKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobWxvY2thbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21tYXAuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbW1hcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MzI3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21tYXAuUwpAQCAtMCwwICsxLDI4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKG1tYXApCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9tbWFwCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKG1tYXApCisKKyAgICAuZ2xvYmwgbW1hcDY0CisgICAgLmVxdSBtbWFwNjQsIG1tYXAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbW91bnQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbW91bnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGM3NTQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tb3VudC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobW91bnQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9tb3VudAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChtb3VudCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXByb3RlY3QuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXByb3RlY3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzU1NDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tcHJvdGVjdC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobXByb3RlY3QpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9tcHJvdGVjdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChtcHJvdGVjdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXJlbWFwLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21yZW1hcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmN2YxZGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL21yZW1hcC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobXJlbWFwKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfbXJlbWFwCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKG1yZW1hcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXN5bmMuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXN5bmMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmUzMWMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tc3luYy5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobXN5bmMpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9tc3luYworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChtc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXVubG9jay5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tdW5sb2NrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiOTMwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXVubG9jay5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobXVubG9jaykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX211bmxvY2sKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobXVubG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXVubG9ja2FsbC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9tdW5sb2NrYWxsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlYjVlMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXVubG9ja2FsbC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobXVubG9ja2FsbCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX211bmxvY2thbGwKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQobXVubG9ja2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbXVubWFwLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL211bm1hcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMGMwNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL211bm1hcC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobXVubWFwKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfbXVubWFwCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKG11bm1hcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL25hbm9zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYWYyNTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL25hbm9zbGVlcC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkobmFub3NsZWVwKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfbmFub3NsZWVwCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKG5hbm9zbGVlcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcGVyc29uYWxpdHkuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcGVyc29uYWxpdHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTEyYzk1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wZXJzb25hbGl0eS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocGVyc29uYWxpdHkpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9wZXJzb25hbGl0eQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChwZXJzb25hbGl0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcGlwZTIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcGlwZTIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjA4YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9waXBlMi5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocGlwZTIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9waXBlMgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChwaXBlMikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcHJjdGwuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcHJjdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWJiN2MyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wcmN0bC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocHJjdGwpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9wcmN0bAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChwcmN0bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcHJlYWQ2NC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wcmVhZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBlMDYxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcHJlYWQ2NC5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocHJlYWQ2NCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3ByZWFkNjQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQocHJlYWQ2NCkKKworICAgIC5nbG9ibCBwcmVhZAorICAgIC5lcXUgcHJlYWQsIHByZWFkNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcHJsaW1pdDY0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3BybGltaXQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMGJhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3BybGltaXQ2NC5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocHJsaW1pdDY0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcHJsaW1pdDY0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHBybGltaXQ2NCkKKworICAgIC5nbG9ibCBwcmxpbWl0CisgICAgLmVxdSBwcmxpbWl0LCBwcmxpbWl0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcHdyaXRlNjQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcHdyaXRlNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzRmOGRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9wd3JpdGU2NC5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocHdyaXRlNjQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9wd3JpdGU2NAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChwd3JpdGU2NCkKKworICAgIC5nbG9ibCBwd3JpdGUKKyAgICAuZXF1IHB3cml0ZSwgcHdyaXRlNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVhZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkMzlkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVhZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocmVhZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3JlYWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQocmVhZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVhZGFoZWFkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3JlYWRhaGVhZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNTExZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3JlYWRhaGVhZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocmVhZGFoZWFkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfcmVhZGFoZWFkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHJlYWRhaGVhZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVhZGxpbmthdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWFkbGlua2F0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczYTk0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVhZGxpbmthdC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocmVhZGxpbmthdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3JlYWRsaW5rYXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQocmVhZGxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVhZHYuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVhZHYuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWE4MDBjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWFkdi5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocmVhZHYpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9yZWFkdgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChyZWFkdikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVjdmZyb20uUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVjdmZyb20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzliNWZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWN2ZnJvbS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocmVjdmZyb20pCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9yZWN2ZnJvbQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChyZWN2ZnJvbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVjdm1tc2cuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVjdm1tc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTcyNTBjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWN2bW1zZy5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocmVjdm1tc2cpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9yZWN2bW1zZworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChyZWN2bW1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVjdm1zZy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZWN2bXNnLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3ODk5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVjdm1zZy5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocmVjdm1zZykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3JlY3Ztc2cKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQocmVjdm1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWQ4YTBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocmVtb3ZleGF0dHIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9yZW1vdmV4YXR0cgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVuYW1lYXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvcmVuYW1lYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmI5MzMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9yZW5hbWVhdC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocmVuYW1lYXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9yZW5hbWVhdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChyZW5hbWVhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlMjY3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2NoZWRfZ2V0X3ByaW9yaXR5X21heCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2NoZWRfZ2V0X3ByaW9yaXR5X21heCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3ZjUyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4KKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2JiNGViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2NoZWRfZ2V0cGFyYW0pCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9nZXRwYXJhbQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzY2hlZF9nZXRwYXJhbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNGZhMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2NoZWRfZ2V0c2NoZWR1bGVyKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNjaGVkX2dldHNjaGVkdWxlcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMTk1NTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2NoZWRfcnJfZ2V0X2ludGVydmFsKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNjaGVkX3JyX2dldF9pbnRlcnZhbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTIwOTAyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2NoZWRfc2V0YWZmaW5pdHkpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9zZXRhZmZpbml0eQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzY2hlZF9zZXRhZmZpbml0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzdiMTVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2NoZWRfc2V0cGFyYW0pCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zY2hlZF9zZXRwYXJhbQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzY2hlZF9zZXRwYXJhbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNGM2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2NoZWRfc2V0c2NoZWR1bGVyKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNjaGVkX3NldHNjaGVkdWxlcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfeWllbGQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDg2ZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zY2hlZF95aWVsZC5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2NoZWRfeWllbGQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zY2hlZF95aWVsZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzY2hlZF95aWVsZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2VuZGZpbGUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2VuZGZpbGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzMwMjQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZW5kZmlsZS5TCkBAIC0wLDAgKzEsMjggQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2VuZGZpbGUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZW5kZmlsZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZW5kZmlsZSkKKworICAgIC5nbG9ibCBzZW5kZmlsZTY0CisgICAgLmVxdSBzZW5kZmlsZTY0LCBzZW5kZmlsZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZW5kbW1zZy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZW5kbW1zZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOGQ4NTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NlbmRtbXNnLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZW5kbW1zZykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NlbmRtbXNnCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNlbmRtbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZW5kbXNnLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NlbmRtc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTlkY2U0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZW5kbXNnLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZW5kbXNnKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2VuZG1zZworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZW5kbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZW5kdG8uUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2VuZHRvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlZmMwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2VuZHRvLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZW5kdG8pCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZW5kdG8KKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2VuZHRvKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRmc2dpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRmc2dpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMWJkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldGZzZ2lkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRmc2dpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldGZzZ2lkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNldGZzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRmc3VpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRmc3VpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNTRiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldGZzdWlkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRmc3VpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldGZzdWlkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNldGZzdWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRnaWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0Z2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2YTZkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0Z2lkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRnaWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZXRnaWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0Z2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRncm91cHMuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2NDlmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRncm91cHMpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZXRncm91cHMKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0Z3JvdXBzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRpdGltZXIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0aXRpbWVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2NDU3MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0aXRpbWVyLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRpdGltZXIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZXRpdGltZXIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0aXRpbWVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRucy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRucy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjE3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldG5zLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRucykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldG5zCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNldG5zKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHBnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzNmNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRwZ2lkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRwZ2lkKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0cGdpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZXRwZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRwcmlvcml0eS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OGEyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRwcmlvcml0eSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldHByaW9yaXR5CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNldHByaW9yaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRyZWdpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRyZWdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MmI0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHJlZ2lkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRyZWdpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldHJlZ2lkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNldHJlZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiMjkzOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRyZXNnaWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZXRyZXNnaWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0cmVzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRyZXN1aWQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0cmVzdWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxYWM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0cmVzdWlkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRyZXN1aWQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZXRyZXN1aWQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0cmVzdWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRyZXVpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRyZXVpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMzIwM2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHJldWlkLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRyZXVpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldHJldWlkCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNldHJldWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRybGltaXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0cmxpbWl0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1ZTgwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0cmxpbWl0LlMKQEAgLTAsMCArMSwyOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRybGltaXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZXRybGltaXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0cmxpbWl0KQorCisgICAgLmdsb2JsIHNldHJsaW1pdDY0CisgICAgLmVxdSBzZXRybGltaXQ2NCwgc2V0cmxpbWl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHNpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRzaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDg3MmQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXRzaWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHNpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldHNpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZXRzaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0c29ja29wdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZmM3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHNvY2tvcHQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHNvY2tvcHQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zZXRzb2Nrb3B0CisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNldHNvY2tvcHQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjFhY2ZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHRpbWVvZmRheSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldHRpbWVvZmRheQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZXR0aW1lb2ZkYXkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHVpZC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXR1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2QzOWZmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zZXR1aWQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHVpZCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NldHVpZAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzZXR1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHhhdHRyLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NldHhhdHRyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExYjg3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2V0eGF0dHIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNldHhhdHRyKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2V0eGF0dHIKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NodXRkb3duLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NodXRkb3duLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY1NDI4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2h1dGRvd24uUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNodXRkb3duKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2h1dGRvd24KKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2h1dGRvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3NzhjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc2lnYWx0c3RhY2suUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNpZ2FsdHN0YWNrKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc2lnYWx0c3RhY2sKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc2lnYWx0c3RhY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NvY2tldHBhaXIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc29ja2V0cGFpci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYmY3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NvY2tldHBhaXIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNvY2tldHBhaXIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zb2NrZXRwYWlyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHNvY2tldHBhaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3NwbGljZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zcGxpY2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTc0NWNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zcGxpY2UuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNwbGljZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3NwbGljZQorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzcGxpY2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N0YXRmczY0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N0YXRmczY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQzNTFmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc3RhdGZzNjQuUwpAQCAtMCwwICsxLDI4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHN0YXRmczY0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc3RhdGZzCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHN0YXRmczY0KQorCisgICAgLmdsb2JsIHN0YXRmcworICAgIC5lcXUgc3RhdGZzLCBzdGF0ZnM2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zd2Fwb2ZmLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N3YXBvZmYuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzAwNDhkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zd2Fwb2ZmLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzd2Fwb2ZmKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc3dhcG9mZgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzd2Fwb2ZmKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zd2Fwb24uUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc3dhcG9uLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmNmZmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc3dhcG9uLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzd2Fwb24pCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zd2Fwb24KKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc3dhcG9uKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zeW1saW5rYXQuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc3ltbGlua2F0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyYjhlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvc3ltbGlua2F0LlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzeW1saW5rYXQpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl9zeW1saW5rYXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoc3ltbGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zeW5jLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N5bmMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTk3YzFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zeW5jLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzeW5jKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc3luYworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zeXNpbmZvLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3N5c2luZm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTRlMTU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy9zeXNpbmZvLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzeXNpbmZvKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfc3lzaW5mbworICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORChzeXNpbmZvKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90ZWUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdGVlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTljZjg0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdGVlLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh0ZWUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl90ZWUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodGVlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90Z2tpbGwuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdGdraWxsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3Zjc5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdGdraWxsLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh0Z2tpbGwpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl90Z2tpbGwKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodGdraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTNhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh0aW1lcmZkX2NyZWF0ZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3RpbWVyZmRfY3JlYXRlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHRpbWVyZmRfY3JlYXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZkNjgzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh0aW1lcmZkX2dldHRpbWUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl90aW1lcmZkX2dldHRpbWUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodGltZXJmZF9nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2MjkwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh0aW1lcmZkX3NldHRpbWUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl90aW1lcmZkX3NldHRpbWUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodGltZXJmZF9zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90aW1lcy5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90aW1lcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2Y2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RpbWVzLlMKQEAgLTAsMCArMSwyNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh0aW1lcykKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3RpbWVzCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHRpbWVzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90cnVuY2F0ZS5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy90cnVuY2F0ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiM2I3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3RydW5jYXRlLlMKQEAgLTAsMCArMSwyOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh0cnVuY2F0ZSkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3RydW5jYXRlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHRydW5jYXRlKQorCisgICAgLmdsb2JsIHRydW5jYXRlNjQKKyAgICAuZXF1IHRydW5jYXRlNjQsIHRydW5jYXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3VtYXNrLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3VtYXNrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0OTAzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW1hc2suUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHVtYXNrKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdW1hc2sKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodW1hc2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3Vtb3VudDIuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW1vdW50Mi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOWFkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3Vtb3VudDIuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHVtb3VudDIpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl91bW91bnQyCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHVtb3VudDIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3VuYW1lLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3VuYW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYxNTdkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW5hbWUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHVuYW1lKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdW5hbWUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodW5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3VubGlua2F0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3VubGlua2F0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxMTY3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW5saW5rYXQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHVubGlua2F0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdW5saW5rYXQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodW5saW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3Vuc2hhcmUuUyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdW5zaGFyZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjODJmZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3Vuc2hhcmUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHVuc2hhcmUpCisgICAgLnNldCBwdXNoCisgICAgLnNldCBub3Jlb3JkZXIKKyAgICBsaSB2MCwgX19OUl91bnNoYXJlCisgICAgc3lzY2FsbAorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCisgICAgbm9wCisxOgorICAgIG1vdmUgdDAsIHJhCisgICAgYmFsICAgICAyZgorICAgIG5vcAorMjoKKyAgICAuY3BzZXR1cCByYSwgdDEsIDJiCisgICAgTEEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICAuY3ByZXR1cm4KKyAgICBqIHQ5CisgICAgbW92ZSByYSwgdDAKKyAgICAuc2V0IHBvcAorRU5EKHVuc2hhcmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3V0aW1lbnNhdC5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy91dGltZW5zYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGRhOTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy91dGltZW5zYXQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHV0aW1lbnNhdCkKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3V0aW1lbnNhdAorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh1dGltZW5zYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3Ztc3BsaWNlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3Ztc3BsaWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjYWU3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvdm1zcGxpY2UuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHZtc3BsaWNlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfdm1zcGxpY2UKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQodm1zcGxpY2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3dhaXQ0LlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3dhaXQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljMzk3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvd2FpdDQuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHdhaXQ0KQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfd2FpdDQKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQod2FpdDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3dyaXRlLlMgYi9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3dyaXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5YjE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzNjQvc3lzY2FsbHMvd3JpdGUuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHdyaXRlKQorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsIF9fTlJfd3JpdGUKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQod3JpdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwczY0L3N5c2NhbGxzL3dyaXRldi5TIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy93cml0ZXYuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTAzZDcxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHM2NC9zeXNjYWxscy93cml0ZXYuUwpAQCAtMCwwICsxLDI1IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHdyaXRldikKKyAgICAuc2V0IHB1c2gKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIGxpIHYwLCBfX05SX3dyaXRldgorICAgIHN5c2NhbGwKKyAgICBibmV6IGEzLCAxZgorICAgIG1vdmUgYTAsIHYwCisgICAgaiByYQorICAgIG5vcAorMToKKyAgICBtb3ZlIHQwLCByYQorICAgIGJhbCAgICAgMmYKKyAgICBub3AKKzI6CisgICAgLmNwc2V0dXAgcmEsIHQxLCAyYgorICAgIExBIHQ5LF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgLmNwcmV0dXJuCisgICAgaiB0OQorICAgIG1vdmUgcmEsIHQwCisgICAgLnNldCBwb3AKK0VORCh3cml0ZXYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2F0b20vYXRvbS5tayBiL2xpYmMvYXJjaC14ODYvYXRvbS9hdG9tLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMjhmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2F0b20vYXRvbS5tawpAQCAtMCwwICsxLDMyIEBACitsaWJjX2Jpb25pY19zcmNfZmlsZXNfeDg2ICs9IFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLWJ6ZXJvLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1tZW1jaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbXJjaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbXNldC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3RyY2hyLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJsZW4tYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXN0cm5sZW4tYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXN0cnJjaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc2Noci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzcmNoci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzbGVuLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NjbXAtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1iY29weS1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLW1lbWNtcC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLW1lbWNweS1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLW1lbW1vdmUtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJjYXQtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJjbXAtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJjcHktYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJsY2F0LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybGNweS1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jYXQtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJuY21wLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybmNweS1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdjc2NhdC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdjc2NweS1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdtZW1jbXAtYXRvbS5TCisKK2xpYmNfYmlvbmljX3NyY19maWxlc194ODYgKz0gXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RwY3B5LXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cG5jcHktc2xtLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvY2FjaGUuaCBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjNiYjFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9jYWNoZS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8qIFZhbHVlcyBhcmUgb3B0aW1pemVkIGZvciBBdG9tICovCisjZGVmaW5lIFNIQVJFRF9DQUNIRV9TSVpFCSg1MTIqMTAyNCkJCQkvKiBBdG9tIEwyIENhY2hlICovCisjZGVmaW5lIERBVEFfQ0FDSEVfU0laRQkJKDI0KjEwMjQpCQkJLyogQXRvbSBMMSBEYXRhIENhY2hlICovCisKKyNkZWZpbmUgU0hBUkVEX0NBQ0hFX1NJWkVfSEFMRgkoU0hBUkVEX0NBQ0hFX1NJWkUgLyAyKQorI2RlZmluZSBEQVRBX0NBQ0hFX1NJWkVfSEFMRgkoREFUQV9DQUNIRV9TSVpFIC8gMikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItYnplcm8tYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLWJ6ZXJvLWF0b20uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1iemVyby1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1iemVyby1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtY2hyLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1tZW1jaHItYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLW1lbWNoci1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1tZW1jaHItYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLW1lbXJjaHItYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbXJjaHItYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLW1lbXJjaHItYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItbWVtcmNoci1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1tZW1zZXQtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbXNldC1hdG9tLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA5NjNhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1tZW1zZXQtYXRvbS5TCkBAIC0wLDAgKzEsOTIwIEBACisvKgorQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIEFMSUdOCisjIGRlZmluZSBBTElHTihuKQkucDJhbGlnbiBuCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCQkJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkJCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsgCVwKKwkuZ2xvYmwgbmFtZTsJCQlcCisJLnAyYWxpZ24gNDsJCQlcCituYW1lOgkJCQkJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCQkJXAorCWNmaV9lbmRwcm9jOwkJCVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJCQkJCQlcCisgIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQkJCQlcCisgIGNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCQkJCQkJXAorICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCQkJCVwKKyAgY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQorCisjaWZkZWYgVVNFX0FTX0JaRVJPCisjIGRlZmluZSBERVNUCQlQQVJNUworIyBkZWZpbmUgTEVOCQlERVNUKzQKKyMgZGVmaW5lIFNFVFJUTlZBTAorI2Vsc2UKKyMgZGVmaW5lIERFU1QJCVBBUk1TCisjIGRlZmluZSBDSFIJCURFU1QrNAorIyBkZWZpbmUgTEVOCQlDSFIrNAorIyBkZWZpbmUgU0VUUlROVkFMCW1vdmwgREVTVCglZXNwKSwgJWVheAorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorIyBkZWZpbmUgRU5UUkFOQ0UJUFVTSCAoJWVieCk7CisjIGRlZmluZSBSRVRVUk5fRU5ECVBPUCAoJWVieCk7IHJldAorIyBkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5EOyBDRklfUFVTSCAoJWVieCkKKyMgZGVmaW5lIFBBUk1TCQk4CQkvKiBQcmVzZXJ2ZSBFQlguICAqLworIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkgLSBCCisKKy8qIExvYWQgYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlIGludG8gRUJYIGFuZCBicmFuY2ggdG8gaXQuICBUQUJMRSBpcyBhCisgICBqdW1wIHRhYmxlIHdpdGggcmVsYXRpdmUgb2Zmc2V0cy4gICAqLworIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSkJCQkJXAorICAgIC8qIFdlIGZpcnN0IGxvYWQgUEMgaW50byBFQlguICAqLwkJCQlcCisgICAgY2FsbAlfX3g4Ni5nZXRfcGNfdGh1bmsuYng7CQkJCVwKKyAgICAvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGp1bXAgdGFibGUuICAqLwkJCVwKKyAgICBhZGQJCSQoVEFCTEUgLSAuKSwgJWVieDsJCQkJXAorICAgIC8qIEdldCB0aGUgZW50cnkgYW5kIGNvbnZlcnQgdGhlIHJlbGF0aXZlIG9mZnNldCB0byB0aGUJXAorICAgICAgIGFic29sdXRlIGFkZHJlc3MuICAqLwkJCQkJXAorICAgIGFkZAkJKCVlYngsJWVjeCw0KSwgJWVieDsJCQkJXAorICAgIGFkZAkJJWVjeCwgJWVkeDsJCQkJCVwKKyAgICAvKiBXZSBsb2FkZWQgdGhlIGp1bXAgdGFibGUgYW5kIGFkanVlc3RlZCBFRFguIEdvLiAgKi8JXAorICAgIGptcAkJKiVlYngKKworCS5zZWN0aW9uCS5nbnUubGlua29uY2UudC5fX3g4Ni5nZXRfcGNfdGh1bmsuYngsImF4IixAcHJvZ2JpdHMKKwkuZ2xvYmwJX194ODYuZ2V0X3BjX3RodW5rLmJ4CisJLmhpZGRlbglfX3g4Ni5nZXRfcGNfdGh1bmsuYngKKwlBTElHTiAoNCkKKwkudHlwZQlfX3g4Ni5nZXRfcGNfdGh1bmsuYngsQGZ1bmN0aW9uCitfX3g4Ni5nZXRfcGNfdGh1bmsuYng6CisJbW92bAkoJWVzcCksICVlYngKKwlyZXQKKyNlbHNlCisjIGRlZmluZSBFTlRSQU5DRQorIyBkZWZpbmUgUkVUVVJOX0VORAlyZXQKKyMgZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORAorIyBkZWZpbmUgUEFSTVMJCTQKKyMgZGVmaW5lIEpNUFRCTChJLCBCKQlJCisKKy8qIEJyYW5jaCB0byBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUuICBUQUJMRSBpcyBhIGp1bXAgdGFibGUgd2l0aAorICAgYWJzb2x1dGUgb2Zmc2V0cy4gICovCisjIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFKQkJCQlcCisgICAgYWRkCQklZWN4LCAlZWR4OwkJCQkJXAorICAgIGptcAkJKlRBQkxFKCwlZWN4LDQpCisjZW5kaWYKKworI2lmbmRlZiBNRU1TRVQKKyMgZGVmaW5lIE1FTVNFVCBtZW1zZXQKKyNlbmRpZgorCisJLnNlY3Rpb24gLnRleHQuc3NlMiwiYXgiLEBwcm9nYml0cworCUFMSUdOICg0KQorRU5UUlkgKE1FTVNFVCkKKwlFTlRSQU5DRQorCisJbW92bAlMRU4oJWVzcCksICVlY3gKKyNpZmRlZiBVU0VfQVNfQlpFUk8KKwl4b3IJJWVheCwgJWVheAorI2Vsc2UKKwltb3Z6YmwJQ0hSKCVlc3ApLCAlZWF4CisJbW92YgklYWwsICVhaAorCS8qIEZpbGwgdGhlIHdob2xlIEVBWCB3aXRoIHBhdHRlcm4uICAqLworCW1vdmwJJWVheCwgJWVkeAorCXNobAkkMTYsICVlYXgKKwlvcgklZWR4LCAlZWF4CisjZW5kaWYKKwltb3ZsCURFU1QoJWVzcCksICVlZHgKKwljbXAJJDMyLCAlZWN4CisJamFlCUwoMzJieXRlc29ybW9yZSkKKworTCh3cml0ZV9sZXNzMzJieXRlcyk6CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCisKKwkucHVzaHNlY3Rpb24gLnJvZGF0YS5zc2UyLCJhIixAcHJvZ2JpdHMKKwlBTElHTiAoMikKK0wodGFibGVfbGVzc18zMmJ5dGVzKToKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8wYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzJieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8zYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfNGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzVieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV82Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfN2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzhieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV85Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMTBieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8xMWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzEyYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMTNieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8xNGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE1Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMTZieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8xN2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE4Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMTlieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8yMGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzIxYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMjJieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8yM2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI0Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMjVieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8yNmJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI3Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMjhieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8yOWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzMwYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMzFieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkucG9wc2VjdGlvbgorCisJQUxJR04gKDQpCitMKHdyaXRlXzI4Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTI4KCVlZHgpCitMKHdyaXRlXzI0Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTI0KCVlZHgpCitMKHdyaXRlXzIwYnl0ZXMpOgorCW1vdmwJJWVheCwgLTIwKCVlZHgpCitMKHdyaXRlXzE2Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTE2KCVlZHgpCitMKHdyaXRlXzEyYnl0ZXMpOgorCW1vdmwJJWVheCwgLTEyKCVlZHgpCitMKHdyaXRlXzhieXRlcyk6CisJbW92bAklZWF4LCAtOCglZWR4KQorTCh3cml0ZV80Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTQoJWVkeCkKK0wod3JpdGVfMGJ5dGVzKToKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTCh3cml0ZV8yOWJ5dGVzKToKKwltb3ZsCSVlYXgsIC0yOSglZWR4KQorTCh3cml0ZV8yNWJ5dGVzKToKKwltb3ZsCSVlYXgsIC0yNSglZWR4KQorTCh3cml0ZV8yMWJ5dGVzKToKKwltb3ZsCSVlYXgsIC0yMSglZWR4KQorTCh3cml0ZV8xN2J5dGVzKToKKwltb3ZsCSVlYXgsIC0xNyglZWR4KQorTCh3cml0ZV8xM2J5dGVzKToKKwltb3ZsCSVlYXgsIC0xMyglZWR4KQorTCh3cml0ZV85Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTkoJWVkeCkKK0wod3JpdGVfNWJ5dGVzKToKKwltb3ZsCSVlYXgsIC01KCVlZHgpCitMKHdyaXRlXzFieXRlcyk6CisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0wod3JpdGVfMzBieXRlcyk6CisJbW92bAklZWF4LCAtMzAoJWVkeCkKK0wod3JpdGVfMjZieXRlcyk6CisJbW92bAklZWF4LCAtMjYoJWVkeCkKK0wod3JpdGVfMjJieXRlcyk6CisJbW92bAklZWF4LCAtMjIoJWVkeCkKK0wod3JpdGVfMThieXRlcyk6CisJbW92bAklZWF4LCAtMTgoJWVkeCkKK0wod3JpdGVfMTRieXRlcyk6CisJbW92bAklZWF4LCAtMTQoJWVkeCkKK0wod3JpdGVfMTBieXRlcyk6CisJbW92bAklZWF4LCAtMTAoJWVkeCkKK0wod3JpdGVfNmJ5dGVzKToKKwltb3ZsCSVlYXgsIC02KCVlZHgpCitMKHdyaXRlXzJieXRlcyk6CisJbW92dwklYXgsIC0yKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0wod3JpdGVfMzFieXRlcyk6CisJbW92bAklZWF4LCAtMzEoJWVkeCkKK0wod3JpdGVfMjdieXRlcyk6CisJbW92bAklZWF4LCAtMjcoJWVkeCkKK0wod3JpdGVfMjNieXRlcyk6CisJbW92bAklZWF4LCAtMjMoJWVkeCkKK0wod3JpdGVfMTlieXRlcyk6CisJbW92bAklZWF4LCAtMTkoJWVkeCkKK0wod3JpdGVfMTVieXRlcyk6CisJbW92bAklZWF4LCAtMTUoJWVkeCkKK0wod3JpdGVfMTFieXRlcyk6CisJbW92bAklZWF4LCAtMTEoJWVkeCkKK0wod3JpdGVfN2J5dGVzKToKKwltb3ZsCSVlYXgsIC03KCVlZHgpCitMKHdyaXRlXzNieXRlcyk6CisJbW92dwklYXgsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKKy8qIEVDWCA+IDMyIGFuZCBFRFggaXMgNCBieXRlIGFsaWduZWQuICAqLworTCgzMmJ5dGVzb3Jtb3JlKToKKwkvKiBGaWxsIHhtbTAgd2l0aCB0aGUgcGF0dGVybi4gICovCisjaWZkZWYgVVNFX0FTX0JaRVJPCisJcHhvcgkleG1tMCwgJXhtbTAKKyNlbHNlCisJbW92ZAklZWF4LCAleG1tMAorCXBzaHVmZAkkMCwgJXhtbTAsICV4bW0wCisjZW5kaWYKKwl0ZXN0bAkkMHhmLCAlZWR4CisJanoJTChhbGlnbmVkXzE2KQorLyogRUNYID4gMzIgYW5kIEVEWCBpcyBub3QgMTYgYnl0ZSBhbGlnbmVkLiAgKi8KK0wobm90X2FsaWduZWRfMTYpOgorCW1vdmRxdQkleG1tMCwgKCVlZHgpCisJbW92bAklZWR4LCAlZWF4CisJYW5kCSQtMTYsICVlZHgKKwlhZGQJJDE2LCAlZWR4CisJc3ViCSVlZHgsICVlYXgKKwlhZGQJJWVheCwgJWVjeAorCW1vdmQJJXhtbTAsICVlYXgKKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2KToKKwljbXAJJDEyOCwgJWVjeAorCWphZQlMKDEyOGJ5dGVzb3Jtb3JlKQorCitMKGFsaWduZWRfMTZfbGVzczEyOGJ5dGVzKToKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKworCUFMSUdOICg0KQorTCgxMjhieXRlc29ybW9yZSk6CisjaWZkZWYgU0hBUkVEX0NBQ0hFX1NJWkUKKwlQVVNIICglZWJ4KQorCW1vdgkkU0hBUkVEX0NBQ0hFX1NJWkUsICVlYngKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJY2FsbAlfX3g4Ni5nZXRfcGNfdGh1bmsuYngKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCW1vdglfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZUBHT1RPRkYoJWVieCksICVlYngKKyMgZWxzZQorCVBVU0ggKCVlYngpCisJbW92CV9feDg2X3NoYXJlZF9jYWNoZV9zaXplLCAlZWJ4CisjIGVuZGlmCisjZW5kaWYKKwljbXAJJWVieCwgJWVjeAorCWphZQlMKDEyOGJ5dGVzb3Jtb3JlX250X3N0YXJ0KQorCisKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkUKKwlQT1AgKCVlYngpCisjIGRlZmluZSBSRVNUT1JFX0VCWF9TVEFURSBDRklfUFVTSCAoJWVieCkKKwljbXAJJERBVEFfQ0FDSEVfU0laRSwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKyMgIGRlZmluZSBSRVNUT1JFX0VCWF9TVEFURQorCWNhbGwJX194ODYuZ2V0X3BjX3RodW5rLmJ4CisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJUE9QICglZWJ4KQorIyAgZGVmaW5lIFJFU1RPUkVfRUJYX1NUQVRFIENGSV9QVVNIICglZWJ4KQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemUsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCisJamFlCUwoMTI4Ynl0ZXNfTDJfbm9ybWFsKQorCXN1YmwJJDEyOCwgJWVjeAorTCgxMjhieXRlc29ybW9yZV9ub3JtYWwpOgorCXN1YgkkMTI4LCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MzAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NTAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NjAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NzAoJWVkeCkKKwlsZWEJMTI4KCVlZHgpLCAlZWR4CisJamIJTCgxMjhieXRlc2xlc3Nfbm9ybWFsKQorCisKKwlzdWIJJDEyOCwgJWVjeAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDEwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDIwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDMwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDQwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDUwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDYwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDcwKCVlZHgpCisJbGVhCTEyOCglZWR4KSwgJWVkeAorCWphZQlMKDEyOGJ5dGVzb3Jtb3JlX25vcm1hbCkKKworTCgxMjhieXRlc2xlc3Nfbm9ybWFsKToKKwlhZGQJJDEyOCwgJWVjeAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCisJQUxJR04gKDQpCitMKDEyOGJ5dGVzX0wyX25vcm1hbCk6CisJcHJlZmV0Y2h0MAkweDM4MCglZWR4KQorCXByZWZldGNodDAJMHgzYzAoJWVkeCkKKwlzdWIJJDEyOCwgJWVjeAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDEwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDIwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDMwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDQwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDUwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDYwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDcwKCVlZHgpCisJYWRkCSQxMjgsICVlZHgKKwljbXAJJDEyOCwgJWVjeAorCWphZQlMKDEyOGJ5dGVzX0wyX25vcm1hbCkKKworTCgxMjhieXRlc2xlc3NfTDJfbm9ybWFsKToKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKworCVJFU1RPUkVfRUJYX1NUQVRFCitMKDEyOGJ5dGVzb3Jtb3JlX250X3N0YXJ0KToKKwlzdWIJJWVieCwgJWVjeAorCW1vdgklZWJ4LCAlZWF4CisJYW5kCSQweDdmLCAlZWF4CisJYWRkCSVlYXgsICVlY3gKKwltb3ZkCSV4bW0wLCAlZWF4CisJQUxJR04gKDQpCitMKDEyOGJ5dGVzb3Jtb3JlX3NoYXJlZF9jYWNoZV9sb29wKToKKwlwcmVmZXRjaHQwCTB4M2MwKCVlZHgpCisJcHJlZmV0Y2h0MAkweDM4MCglZWR4KQorCXN1YgkkMHg4MCwgJWVieAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDEwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDIwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDMwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDQwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDUwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDYwKCVlZHgpCisJbW92ZHFhCSV4bW0wLCAweDcwKCVlZHgpCisJYWRkCSQweDgwLCAlZWR4CisJY21wCSQweDgwLCAlZWJ4CisJamFlCUwoMTI4Ynl0ZXNvcm1vcmVfc2hhcmVkX2NhY2hlX2xvb3ApCisJY21wCSQweDgwLCAlZWN4CisJamIJTChzaGFyZWRfY2FjaGVfbG9vcF9lbmQpCisJQUxJR04gKDQpCitMKDEyOGJ5dGVzb3Jtb3JlX250KToKKwlzdWIJJDB4ODAsICVlY3gKKwltb3ZudGRxCSV4bW0wLCAoJWVkeCkKKwltb3ZudGRxCSV4bW0wLCAweDEwKCVlZHgpCisJbW92bnRkcQkleG1tMCwgMHgyMCglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4MzAoJWVkeCkKKwltb3ZudGRxCSV4bW0wLCAweDQwKCVlZHgpCisJbW92bnRkcQkleG1tMCwgMHg1MCglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4NjAoJWVkeCkKKwltb3ZudGRxCSV4bW0wLCAweDcwKCVlZHgpCisJYWRkCSQweDgwLCAlZWR4CisJY21wCSQweDgwLCAlZWN4CisJamFlCUwoMTI4Ynl0ZXNvcm1vcmVfbnQpCisJc2ZlbmNlCitMKHNoYXJlZF9jYWNoZV9sb29wX2VuZCk6CisjaWYgZGVmaW5lZCBEQVRBX0NBQ0hFX1NJWkUgfHwgIShkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJUE9QICglZWJ4KQorI2VuZGlmCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV8xNl8xMjhieXRlcykpCisKKworCS5wdXNoc2VjdGlvbiAucm9kYXRhLnNzZTIsImEiLEBwcm9nYml0cworCUFMSUdOICgyKQorTCh0YWJsZV8xNl8xMjhieXRlcyk6CisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8wYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzE5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzIwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzIxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzIyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzIzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzI5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzMwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzMxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzMyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzMzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzM5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzQ5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzUwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzUxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzUyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzUzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzU5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzYwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzYxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzYyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzYzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzY5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzcwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzcxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzcyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzczYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzc5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzgwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzgxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzgyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzgzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzg5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzkwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzkxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzkyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzkzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2Xzk5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTExYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTIwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTIzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLnBvcHNlY3Rpb24KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExMmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTIoJWVkeCkKK0woYWxpZ25lZF8xNl85NmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05NiglZWR4KQorTChhbGlnbmVkXzE2XzgwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTgwKCVlZHgpCitMKGFsaWduZWRfMTZfNjRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjQoJWVkeCkKK0woYWxpZ25lZF8xNl80OGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00OCglZWR4KQorTChhbGlnbmVkXzE2XzMyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTMyKCVlZHgpCitMKGFsaWduZWRfMTZfMTZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTYoJWVkeCkKK0woYWxpZ25lZF8xNl8wYnl0ZXMpOgorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTEzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExMyglZWR4KQorTChhbGlnbmVkXzE2Xzk3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTk3KCVlZHgpCitMKGFsaWduZWRfMTZfODFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODEoJWVkeCkKK0woYWxpZ25lZF8xNl82NWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02NSglZWR4KQorTChhbGlnbmVkXzE2XzQ5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ5KCVlZHgpCitMKGFsaWduZWRfMTZfMzNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzMoJWVkeCkKK0woYWxpZ25lZF8xNl8xN2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xNyglZWR4KQorTChhbGlnbmVkXzE2XzFieXRlcyk6CisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTE0KCVlZHgpCitMKGFsaWduZWRfMTZfOThieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTgoJWVkeCkKK0woYWxpZ25lZF8xNl84MmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04MiglZWR4KQorTChhbGlnbmVkXzE2XzY2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTY2KCVlZHgpCitMKGFsaWduZWRfMTZfNTBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTAoJWVkeCkKK0woYWxpZ25lZF8xNl8zNGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zNCglZWR4KQorTChhbGlnbmVkXzE2XzE4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTE4KCVlZHgpCitMKGFsaWduZWRfMTZfMmJ5dGVzKToKKwltb3Z3CSVheCwgLTIoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExNWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTUoJWVkeCkKK0woYWxpZ25lZF8xNl85OWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05OSglZWR4KQorTChhbGlnbmVkXzE2XzgzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTgzKCVlZHgpCitMKGFsaWduZWRfMTZfNjdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjcoJWVkeCkKK0woYWxpZ25lZF8xNl81MWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01MSglZWR4KQorTChhbGlnbmVkXzE2XzM1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTM1KCVlZHgpCitMKGFsaWduZWRfMTZfMTlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTkoJWVkeCkKK0woYWxpZ25lZF8xNl8zYnl0ZXMpOgorCW1vdncJJWF4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTE2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExNiglZWR4KQorTChhbGlnbmVkXzE2XzEwMGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDAoJWVkeCkKK0woYWxpZ25lZF8xNl84NGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04NCglZWR4KQorTChhbGlnbmVkXzE2XzY4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTY4KCVlZHgpCitMKGFsaWduZWRfMTZfNTJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTIoJWVkeCkKK0woYWxpZ25lZF8xNl8zNmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zNiglZWR4KQorTChhbGlnbmVkXzE2XzIwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTIwKCVlZHgpCitMKGFsaWduZWRfMTZfNGJ5dGVzKToKKwltb3ZsCSVlYXgsIC00KCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTE3KCVlZHgpCitMKGFsaWduZWRfMTZfMTAxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwMSglZWR4KQorTChhbGlnbmVkXzE2Xzg1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTg1KCVlZHgpCitMKGFsaWduZWRfMTZfNjlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjkoJWVkeCkKK0woYWxpZ25lZF8xNl81M2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01MyglZWR4KQorTChhbGlnbmVkXzE2XzM3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTM3KCVlZHgpCitMKGFsaWduZWRfMTZfMjFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjEoJWVkeCkKK0woYWxpZ25lZF8xNl81Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTUoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExOGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTgoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTAyKCVlZHgpCitMKGFsaWduZWRfMTZfODZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODYoJWVkeCkKK0woYWxpZ25lZF8xNl83MGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03MCglZWR4KQorTChhbGlnbmVkXzE2XzU0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTU0KCVlZHgpCitMKGFsaWduZWRfMTZfMzhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzgoJWVkeCkKK0woYWxpZ25lZF8xNl8yMmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yMiglZWR4KQorTChhbGlnbmVkXzE2XzZieXRlcyk6CisJbW92bAklZWF4LCAtNiglZWR4KQorCW1vdncJJWF4LCAtMiglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTE5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExOSglZWR4KQorTChhbGlnbmVkXzE2XzEwM2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDMoJWVkeCkKK0woYWxpZ25lZF8xNl84N2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04NyglZWR4KQorTChhbGlnbmVkXzE2XzcxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTcxKCVlZHgpCitMKGFsaWduZWRfMTZfNTVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTUoJWVkeCkKK0woYWxpZ25lZF8xNl8zOWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zOSglZWR4KQorTChhbGlnbmVkXzE2XzIzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTIzKCVlZHgpCitMKGFsaWduZWRfMTZfN2J5dGVzKToKKwltb3ZsCSVlYXgsIC03KCVlZHgpCisJbW92dwklYXgsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTIwKCVlZHgpCitMKGFsaWduZWRfMTZfMTA0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwNCglZWR4KQorTChhbGlnbmVkXzE2Xzg4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTg4KCVlZHgpCitMKGFsaWduZWRfMTZfNzJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzIoJWVkeCkKK0woYWxpZ25lZF8xNl81NmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01NiglZWR4KQorTChhbGlnbmVkXzE2XzQwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQwKCVlZHgpCitMKGFsaWduZWRfMTZfMjRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjQoJWVkeCkKK0woYWxpZ25lZF8xNl84Ynl0ZXMpOgorCW1vdnEJJXhtbTAsIC04KCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTIxKCVlZHgpCitMKGFsaWduZWRfMTZfMTA1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwNSglZWR4KQorTChhbGlnbmVkXzE2Xzg5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTg5KCVlZHgpCitMKGFsaWduZWRfMTZfNzNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzMoJWVkeCkKK0woYWxpZ25lZF8xNl81N2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01NyglZWR4KQorTChhbGlnbmVkXzE2XzQxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQxKCVlZHgpCitMKGFsaWduZWRfMTZfMjVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjUoJWVkeCkKK0woYWxpZ25lZF8xNl85Ynl0ZXMpOgorCW1vdnEJJXhtbTAsIC05KCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTIyKCVlZHgpCitMKGFsaWduZWRfMTZfMTA2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwNiglZWR4KQorTChhbGlnbmVkXzE2XzkwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTkwKCVlZHgpCitMKGFsaWduZWRfMTZfNzRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzQoJWVkeCkKK0woYWxpZ25lZF8xNl81OGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01OCglZWR4KQorTChhbGlnbmVkXzE2XzQyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQyKCVlZHgpCitMKGFsaWduZWRfMTZfMjZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjYoJWVkeCkKK0woYWxpZ25lZF8xNl8xMGJ5dGVzKToKKwltb3ZxCSV4bW0wLCAtMTAoJWVkeCkKKwltb3Z3CSVheCwgLTIoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyM2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjMoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTA3KCVlZHgpCitMKGFsaWduZWRfMTZfOTFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTEoJWVkeCkKK0woYWxpZ25lZF8xNl83NWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03NSglZWR4KQorTChhbGlnbmVkXzE2XzU5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTU5KCVlZHgpCitMKGFsaWduZWRfMTZfNDNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDMoJWVkeCkKK0woYWxpZ25lZF8xNl8yN2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yNyglZWR4KQorTChhbGlnbmVkXzE2XzExYnl0ZXMpOgorCW1vdnEJJXhtbTAsIC0xMSglZWR4KQorCW1vdncJJWF4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTI0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyNCglZWR4KQorTChhbGlnbmVkXzE2XzEwOGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDgoJWVkeCkKK0woYWxpZ25lZF8xNl85MmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05MiglZWR4KQorTChhbGlnbmVkXzE2Xzc2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTc2KCVlZHgpCitMKGFsaWduZWRfMTZfNjBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjAoJWVkeCkKK0woYWxpZ25lZF8xNl80NGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00NCglZWR4KQorTChhbGlnbmVkXzE2XzI4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTI4KCVlZHgpCitMKGFsaWduZWRfMTZfMTJieXRlcyk6CisJbW92cQkleG1tMCwgLTEyKCVlZHgpCisJbW92bAklZWF4LCAtNCglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTI1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyNSglZWR4KQorTChhbGlnbmVkXzE2XzEwOWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDkoJWVkeCkKK0woYWxpZ25lZF8xNl85M2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05MyglZWR4KQorTChhbGlnbmVkXzE2Xzc3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTc3KCVlZHgpCitMKGFsaWduZWRfMTZfNjFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjEoJWVkeCkKK0woYWxpZ25lZF8xNl80NWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00NSglZWR4KQorTChhbGlnbmVkXzE2XzI5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTI5KCVlZHgpCitMKGFsaWduZWRfMTZfMTNieXRlcyk6CisJbW92cQkleG1tMCwgLTEzKCVlZHgpCisJbW92bAklZWF4LCAtNSglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTI2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyNiglZWR4KQorTChhbGlnbmVkXzE2XzExMGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTAoJWVkeCkKK0woYWxpZ25lZF8xNl85NGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05NCglZWR4KQorTChhbGlnbmVkXzE2Xzc4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTc4KCVlZHgpCitMKGFsaWduZWRfMTZfNjJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjIoJWVkeCkKK0woYWxpZ25lZF8xNl80NmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00NiglZWR4KQorTChhbGlnbmVkXzE2XzMwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTMwKCVlZHgpCitMKGFsaWduZWRfMTZfMTRieXRlcyk6CisJbW92cQkleG1tMCwgLTE0KCVlZHgpCisJbW92bAklZWF4LCAtNiglZWR4KQorCW1vdncJJWF4LCAtMiglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTI3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyNyglZWR4KQorTChhbGlnbmVkXzE2XzExMWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTEoJWVkeCkKK0woYWxpZ25lZF8xNl85NWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05NSglZWR4KQorTChhbGlnbmVkXzE2Xzc5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTc5KCVlZHgpCitMKGFsaWduZWRfMTZfNjNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjMoJWVkeCkKK0woYWxpZ25lZF8xNl80N2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00NyglZWR4KQorTChhbGlnbmVkXzE2XzMxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTMxKCVlZHgpCitMKGFsaWduZWRfMTZfMTVieXRlcyk6CisJbW92cQkleG1tMCwgLTE1KCVlZHgpCisJbW92bAklZWF4LCAtNyglZWR4KQorCW1vdncJJWF4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTl9FTkQKKworRU5EIChNRU1TRVQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXN0cmNoci1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3RyY2hyLWF0b20uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJjaHItYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3RyY2hyLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJsZW4tYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXN0cmxlbi1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItc3RybGVuLWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXN0cmxlbi1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItc3Rybmxlbi1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3Rybmxlbi1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItc3Rybmxlbi1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJubGVuLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJyY2hyLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJyY2hyLWF0b20uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJyY2hyLWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXN0cnJjaHItYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXdjc2Noci1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzY2hyLWF0b20uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NjaHItYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzY2hyLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NjbXAtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc2NtcC1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzY21wLWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc2NtcC1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzbGVuLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NsZW4tYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXdjc2xlbi1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NsZW4tYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXdjc3JjaHItYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc3JjaHItYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXdjc3JjaHItYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzcmNoci1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLWJjb3B5LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtYmNvcHktYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1iY29weS1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtYmNvcHktYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jbXAtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1tZW1jbXAtYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jbXAtYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLW1lbWNtcC1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtbWVtY3B5LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtbWVtY3B5LWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzVlYzJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1tZW1jcHktYXRvbS5TCkBAIC0wLDAgKzEsMzE5OCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNpZm5kZWYgTUVNQ1BZCisjIGRlZmluZSBNRU1DUFkJbWVtY3B5CisjZW5kaWYKKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCVwKKwkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOwkJXAorCS5nbG9ibCBuYW1lOwkJXAorCS5wMmFsaWduIDQ7CQlcCituYW1lOgkJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCQlcCisJY2ZpX2VuZHByb2M7CQlcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworI2lmZGVmIFVTRV9BU19CQ09QWQorIyBkZWZpbmUgU1JDCQlQQVJNUworIyBkZWZpbmUgREVTVAkJU1JDKzQKKyMgZGVmaW5lIExFTgkJREVTVCs0CisjZWxzZQorIyBkZWZpbmUgREVTVAkJUEFSTVMKKyMgZGVmaW5lIFNSQwkJREVTVCs0CisjIGRlZmluZSBMRU4JCVNSQys0CisjZW5kaWYKKworI2RlZmluZSBDRklfUFVTSChSRUcpCQlcCisgIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQlcCisgIGNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCQlcCisgIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQpOwkJXAorICBjZmlfcmVzdG9yZSAoUkVHKQorCisjZGVmaW5lIFBVU0goUkVHKQlwdXNobCBSRUc7IENGSV9QVVNIIChSRUcpCisjZGVmaW5lIFBPUChSRUcpCXBvcGwgUkVHOyBDRklfUE9QIChSRUcpCisKKyNpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorIyBkZWZpbmUgUEFSTVMJCTgJCS8qIFByZXNlcnZlIEVCWC4gICovCisjIGRlZmluZSBFTlRSQU5DRQlQVVNIICglZWJ4KTsKKyMgZGVmaW5lIFJFVFVSTl9FTkQJUE9QICglZWJ4KTsgcmV0CisjIGRlZmluZSBSRVRVUk4JCVJFVFVSTl9FTkQ7IENGSV9QVVNIICglZWJ4KQorIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkgLSBCCisKKyMgZGVmaW5lIFNFVFVQX1BJQ19SRUcoeCkJY2FsbAlfX3g4Ni5nZXRfcGNfdGh1bmsueAorCisvKiBMb2FkIGFuIGVudHJ5IGluIGEganVtcCB0YWJsZSBpbnRvIEVCWCBhbmQgYnJhbmNoIHRvIGl0LiAgVEFCTEUgaXMgYQorCWp1bXAgdGFibGUgd2l0aCByZWxhdGl2ZSBvZmZzZXRzLiAgSU5ERVggaXMgYSByZWdpc3RlciBjb250YWlucyB0aGUKKwlpbmRleCBpbnRvIHRoZSBqdW1wIHRhYmxlLiAgIFNDQUxFIGlzIHRoZSBzY2FsZSBvZiBJTkRFWC4gKi8KKworIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSwgSU5ERVgsIFNDQUxFKQkJXAorICAgIC8qIFdlIGZpcnN0IGxvYWQgUEMgaW50byBFQlguICAqLwkJXAorCVNFVFVQX1BJQ19SRUcoYngpOwkJXAorICAgIC8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUganVtcCB0YWJsZS4gICovCQlcCisJYWRkbAkkKFRBQkxFIC0gLiksICVlYng7CQlcCisgICAgLyogR2V0IHRoZSBlbnRyeSBhbmQgY29udmVydCB0aGUgcmVsYXRpdmUgb2Zmc2V0IHRvIHRoZQkJXAorCWFic29sdXRlCWFkZHJlc3MuICAqLwkJXAorCWFkZGwJKCVlYngsIElOREVYLCBTQ0FMRSksICVlYng7CQlcCisgICAgLyogV2UgbG9hZGVkIHRoZSBqdW1wIHRhYmxlLiAgR28uICAqLwkJXAorCWptcAkqJWVieAorI2Vsc2UKKworIyBkZWZpbmUgUEFSTVMJCTQKKyMgZGVmaW5lIEVOVFJBTkNFCisjIGRlZmluZSBSRVRVUk5fRU5ECXJldAorIyBkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5ECisjIGRlZmluZSBKTVBUQkwoSSwgQikJSQorCisvKiBCcmFuY2ggdG8gYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlLiAgVEFCTEUgaXMgYSBqdW1wIHRhYmxlIHdpdGgKKwlhYnNvbHV0ZSBvZmZzZXRzLiAgSU5ERVggaXMgYSByZWdpc3RlciBjb250YWlucyB0aGUgaW5kZXggaW50byB0aGUKKwlqdW1wIHRhYmxlLiAgU0NBTEUgaXMgdGhlIHNjYWxlIG9mIElOREVYLiAqLworCisjIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFLCBJTkRFWCwgU0NBTEUpCQlcCisJam1wCSpUQUJMRSgsIElOREVYLCBTQ0FMRSkKKyNlbmRpZgorCisJLnNlY3Rpb24gLnRleHQuc3NzZTMsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChNRU1DUFkpCisJRU5UUkFOQ0UKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCW1vdmwJU1JDKCVlc3ApLCAlZWF4CisJbW92bAlERVNUKCVlc3ApLCAlZWR4CisKKyNpZmRlZiBVU0VfQVNfTUVNTU9WRQorCWNtcAklZWF4LCAlZWR4CisJamIJTChjb3B5X2ZvcndhcmQpCisJamUJTChmd2Rfd3JpdGVfMGJ5dGVzKQorCWNtcAkkMzIsICVlY3gKKwlqYWUJTChtZW1tb3ZlX2J3ZCkKKwlqbXAJTChia193cml0ZV9sZXNzMzJieXRlc18yKQorCisJLnAyYWxpZ24gNAorTChtZW1tb3ZlX2J3ZCk6CisJYWRkCSVlY3gsICVlYXgKKwljbXAJJWVheCwgJWVkeAorCW1vdmwJU1JDKCVlc3ApLCAlZWF4CisJamIJTChjb3B5X2JhY2t3YXJkKQorCitMKGNvcHlfZm9yd2FyZCk6CisjZW5kaWYKKwljbXAJJDQ4LCAlZWN4CisJamFlCUwoNDhieXRlc29ybW9yZSkKKworTChmd2Rfd3JpdGVfbGVzczMyYnl0ZXMpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCWNtcAklZGwsICVhbAorCWpiCUwoYmtfd3JpdGUpCisjZW5kaWYKKwlhZGQJJWVjeCwgJWVkeAorCWFkZAklZWN4LCAlZWF4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJLnAyYWxpZ24gNAorTChia193cml0ZSk6CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OF9ieXRlc19id2QpLCAlZWN4LCA0KQorI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKDQ4Ynl0ZXNvcm1vcmUpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmxwZAkoJWVheCksICV4bW0wCisJbW92bHBkCTgoJWVheCksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJJXhtbTEsIDgoJWVkeCkKKyNlbHNlCisJbW92ZHF1CSglZWF4KSwgJXhtbTAKKyNlbmRpZgorCVBVU0ggKCVlZGkpCisJbW92bAklZWR4LCAlZWRpCisJYW5kCSQtMTYsICVlZHgKKwlhZGQJJDE2LCAlZWR4CisJc3ViCSVlZHgsICVlZGkKKwlhZGQJJWVkaSwgJWVjeAorCXN1YgklZWRpLCAlZWF4CisKKyNpZmRlZiBTSEFSRURfQ0FDSEVfU0laRV9IQUxGCisJY21wCSRTSEFSRURfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfc2hhcmVkX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKworCW1vdgklZWF4LCAlZWRpCisJamFlCUwobGFyZ2VfcGFnZSkKKwlhbmQJJDB4ZiwgJWVkaQorCWp6CUwoc2hsXzApCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChzaGxfdGFibGUpLCAlZWRpLCA0KQorCisJLnAyYWxpZ24gNAorTChzaGxfMCk6CisjaWZkZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKwl4b3IJJWVkaSwgJWVkaQorCWNtcAkkMTI3LCAlZWN4CisJamEJTChzaGxfMF9nb2JibGUpCisJbGVhCS0zMiglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChzaGxfMF9sb29wKToKKwltb3ZkcWEJKCVlYXgsICVlZGkpLCAleG1tMAorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTEKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTEsIDE2KCVlZHgsICVlZGkpCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJamIJTChzaGxfMF9lbmQpCisKKwltb3ZkcWEJKCVlYXgsICVlZGkpLCAleG1tMAorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTEKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTEsIDE2KCVlZHgsICVlZGkpCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJamIJTChzaGxfMF9lbmQpCisKKwltb3ZkcWEJKCVlYXgsICVlZGkpLCAleG1tMAorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTEKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTEsIDE2KCVlZHgsICVlZGkpCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJamIJTChzaGxfMF9lbmQpCisKKwltb3ZkcWEJKCVlYXgsICVlZGkpLCAleG1tMAorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTEKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTEsIDE2KCVlZHgsICVlZGkpCisJbGVhCTMyKCVlZGkpLCAlZWRpCisKK0woc2hsXzBfZW5kKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJYWRkCSVlZGksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbiksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzBfZ29iYmxlKToKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJUE9QCSglZWRpKQorCWxlYQktMTI4KCVlY3gpLCAlZWN4CisJamFlCUwoc2hsXzBfZ29iYmxlX21lbV9sb29wKQorCisJLnAyYWxpZ24gNAorTChzaGxfMF9nb2JibGVfY2FjaGVfbG9vcCk6CisJbW92ZHFhCSglZWF4KSwgJXhtbTAKKwltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKKwltb3ZkcWEJMHgyMCglZWF4KSwgJXhtbTIKKwltb3ZkcWEJMHgzMCglZWF4KSwgJXhtbTMKKwltb3ZkcWEJMHg0MCglZWF4KSwgJXhtbTQKKwltb3ZkcWEJMHg1MCglZWF4KSwgJXhtbTUKKwltb3ZkcWEJMHg2MCglZWF4KSwgJXhtbTYKKwltb3ZkcWEJMHg3MCglZWF4KSwgJXhtbTcKKwlsZWEJMHg4MCglZWF4KSwgJWVheAorCXN1YgkkMTI4LCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKKwltb3ZkcWEJJXhtbTIsIDB4MjAoJWVkeCkKKwltb3ZkcWEJJXhtbTMsIDB4MzAoJWVkeCkKKwltb3ZkcWEJJXhtbTQsIDB4NDAoJWVkeCkKKwltb3ZkcWEJJXhtbTUsIDB4NTAoJWVkeCkKKwltb3ZkcWEJJXhtbTYsIDB4NjAoJWVkeCkKKwltb3ZkcWEJJXhtbTcsIDB4NzAoJWVkeCkKKwlsZWEJMHg4MCglZWR4KSwgJWVkeAorCisJamFlCUwoc2hsXzBfZ29iYmxlX2NhY2hlX2xvb3ApCisJY21wCSQtMHg0MCwgJWVjeAorCWxlYQkweDgwKCVlY3gpLCAlZWN4CisJamwJTChzaGxfMF9jYWNoZV9sZXNzXzY0Ynl0ZXMpCisKKwltb3ZkcWEJKCVlYXgpLCAleG1tMAorCXN1YgkkMHg0MCwgJWVjeAorCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCisJbW92ZHFhCTB4MjAoJWVheCksICV4bW0wCisJbW92ZHFhCTB4MzAoJWVheCksICV4bW0xCisJYWRkCSQweDQwLCAlZWF4CisJbW92ZHFhCSV4bW0wLCAweDIwKCVlZHgpCisJbW92ZHFhCSV4bW0xLCAweDMwKCVlZHgpCisJYWRkCSQweDQwLCAlZWR4CisKK0woc2hsXzBfY2FjaGVfbGVzc182NGJ5dGVzKToKKwljbXAJJDB4MjAsICVlY3gKKwlqYglMKHNobF8wX2NhY2hlX2xlc3NfMzJieXRlcykKKwltb3ZkcWEJKCVlYXgpLCAleG1tMAorCXN1YgkkMHgyMCwgJWVjeAorCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQorCWFkZAkkMHgyMCwgJWVheAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCisJYWRkCSQweDIwLCAlZWR4CisKK0woc2hsXzBfY2FjaGVfbGVzc18zMmJ5dGVzKToKKwljbXAJJDB4MTAsICVlY3gKKwlqYglMKHNobF8wX2NhY2hlX2xlc3NfMTZieXRlcykKKwlzdWIJJDB4MTAsICVlY3gKKwltb3ZkcWEJKCVlYXgpLCAleG1tMAorCWFkZAkkMHgxMCwgJWVheAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJYWRkCSQweDEwLCAlZWR4CisKK0woc2hsXzBfY2FjaGVfbGVzc18xNmJ5dGVzKToKKwlhZGQJJWVjeCwgJWVkeAorCWFkZAklZWN4LCAlZWF4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwkucDJhbGlnbiA0CitMKHNobF8wX2dvYmJsZV9tZW1fbG9vcCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgyODAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisKKwltb3ZkcWEJKCVlYXgpLCAleG1tMAorCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQorCW1vdmRxYQkweDIwKCVlYXgpLCAleG1tMgorCW1vdmRxYQkweDMwKCVlYXgpLCAleG1tMworCW1vdmRxYQkweDQwKCVlYXgpLCAleG1tNAorCW1vdmRxYQkweDUwKCVlYXgpLCAleG1tNQorCW1vdmRxYQkweDYwKCVlYXgpLCAleG1tNgorCW1vdmRxYQkweDcwKCVlYXgpLCAleG1tNworCWxlYQkweDgwKCVlYXgpLCAlZWF4CisJc3ViCSQweDgwLCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKKwltb3ZkcWEJJXhtbTIsIDB4MjAoJWVkeCkKKwltb3ZkcWEJJXhtbTMsIDB4MzAoJWVkeCkKKwltb3ZkcWEJJXhtbTQsIDB4NDAoJWVkeCkKKwltb3ZkcWEJJXhtbTUsIDB4NTAoJWVkeCkKKwltb3ZkcWEJJXhtbTYsIDB4NjAoJWVkeCkKKwltb3ZkcWEJJXhtbTcsIDB4NzAoJWVkeCkKKwlsZWEJMHg4MCglZWR4KSwgJWVkeAorCisJamFlCUwoc2hsXzBfZ29iYmxlX21lbV9sb29wKQorCWNtcAkkLTB4NDAsICVlY3gKKwlsZWEJMHg4MCglZWN4KSwgJWVjeAorCWpsCUwoc2hsXzBfbWVtX2xlc3NfNjRieXRlcykKKworCW1vdmRxYQkoJWVheCksICV4bW0wCisJc3ViCSQweDQwLCAlZWN4CisJbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCisKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQorCisJbW92ZHFhCTB4MjAoJWVheCksICV4bW0wCisJbW92ZHFhCTB4MzAoJWVheCksICV4bW0xCisJYWRkCSQweDQwLCAlZWF4CisKKwltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZkcWEJJXhtbTEsIDB4MzAoJWVkeCkKKwlhZGQJJDB4NDAsICVlZHgKKworTChzaGxfMF9tZW1fbGVzc182NGJ5dGVzKToKKwljbXAJJDB4MjAsICVlY3gKKwlqYglMKHNobF8wX21lbV9sZXNzXzMyYnl0ZXMpCisJbW92ZHFhCSglZWF4KSwgJXhtbTAKKwlzdWIJJDB4MjAsICVlY3gKKwltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKKwlhZGQJJDB4MjAsICVlYXgKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQorCWFkZAkkMHgyMCwgJWVkeAorCitMKHNobF8wX21lbV9sZXNzXzMyYnl0ZXMpOgorCWNtcAkkMHgxMCwgJWVjeAorCWpiCUwoc2hsXzBfbWVtX2xlc3NfMTZieXRlcykKKwlzdWIJJDB4MTAsICVlY3gKKwltb3ZkcWEJKCVlYXgpLCAleG1tMAorCWFkZAkkMHgxMCwgJWVheAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJYWRkCSQweDEwLCAlZWR4CisKK0woc2hsXzBfbWVtX2xlc3NfMTZieXRlcyk6CisJYWRkCSVlY3gsICVlZHgKKwlhZGQJJWVjeCwgJWVheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pLCAlZWN4LCA0KQorCisJLnAyYWxpZ24gNAorTChzaGxfMSk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS0xKCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktMSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfMV9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsMUxvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJMTUoJWVheCksICV4bW0yCisJbW92YXBzCTMxKCVlYXgpLCAleG1tMworCW1vdmFwcwk0NyglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNjMoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDEsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDEsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQxLCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQxLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDFMb29wU3RhcnQpCisKK0woU2hsMUxvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwkxNSglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMzEoJWVheCksICV4bW0zCisJcGFsaWducgkkMSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfMV9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktMSglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzFfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDEsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYglMKHNoXzFfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkMSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMSwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWphZQlMKHNoXzFfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF8xX2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTEoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfMik6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS0yKCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktMiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfMl9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsMkxvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJMTQoJWVheCksICV4bW0yCisJbW92YXBzCTMwKCVlYXgpLCAleG1tMworCW1vdmFwcwk0NiglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNjIoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDIsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDIsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQyLCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQyLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDJMb29wU3RhcnQpCisKK0woU2hsMkxvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwkxNCglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMzAoJWVheCksICV4bW0zCisJcGFsaWducgkkMiwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfMl9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktMiglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzJfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDIsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDIsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYglMKHNoXzJfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkMiwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMiwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWphZQlMKHNoXzJfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF8yX2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTIoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfMyk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS0zKCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktMyglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfM19ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsM0xvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJMTMoJWVheCksICV4bW0yCisJbW92YXBzCTI5KCVlYXgpLCAleG1tMworCW1vdmFwcwk0NSglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNjEoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDMsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDMsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQzLCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQzLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDNMb29wU3RhcnQpCisKK0woU2hsM0xvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwkxMyglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjkoJWVheCksICV4bW0zCisJcGFsaWducgkkMywgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMywgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfM19ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktMyglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzNfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDMsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDMsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKworCWpiCUwoc2hfM19lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQzLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQzLCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisKKwlqYWUJTChzaF8zX25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfM19lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQkzKCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzQpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktNCglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTQoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzRfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDRMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTEyKCVlYXgpLCAleG1tMgorCW1vdmFwcwkyOCglZWF4KSwgJXhtbTMKKwltb3ZhcHMJNDQoJWVheCksICV4bW00CisJbW92YXBzCTYwKCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQ0LCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQ0LCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkNCwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkNCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGw0TG9vcFN0YXJ0KQorCitMKFNobDRMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJMTIoJWVheCksICV4bW0yCisJbW92YXBzCTI4KCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDQsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDQsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzRfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTQoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF80X25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQ0LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ0LCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisKKwlqYglMKHNoXzRfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkNCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNCwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCisJamFlCUwoc2hfNF9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzRfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJNCglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF81KToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTUoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS01KCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF81X25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGw1TG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwkxMSglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjcoJWVheCksICV4bW0zCisJbW92YXBzCTQzKCVlYXgpLCAleG1tNAorCW1vdmFwcwk1OSglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkNSwgJXhtbTQsICV4bW01CisJcGFsaWducgkkNSwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDUsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDUsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsNUxvb3BTdGFydCkKKworTChTaGw1TG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTExKCVlYXgpLCAleG1tMgorCW1vdmFwcwkyNyglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQ1LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ1LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF81X25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS01KCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfNV9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkNSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNSwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCisJamIJTChzaF81X2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDUsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDUsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKworCWphZQlMKHNoXzVfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF81X2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTUoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfNik6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS02KCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktNiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfNl9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsNkxvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJMTAoJWVheCksICV4bW0yCisJbW92YXBzCTI2KCVlYXgpLCAleG1tMworCW1vdmFwcwk0MiglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNTgoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDYsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDYsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQ2LCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQ2LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDZMb29wU3RhcnQpCisKK0woU2hsNkxvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwkxMCglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjYoJWVheCksICV4bW0zCisJcGFsaWducgkkNiwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfNl9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktNiglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzZfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDYsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDYsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKworCWpiCUwoc2hfNl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQ2LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ2LCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisKKwlqYWUJTChzaF82X25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfNl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQk2KCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzcpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktNyglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTcoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzdfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDdMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTkoJWVheCksICV4bW0yCisJbW92YXBzCTI1KCVlYXgpLCAleG1tMworCW1vdmFwcwk0MSglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNTcoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDcsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDcsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQ3LCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQ3LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDdMb29wU3RhcnQpCisKK0woU2hsN0xvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwk5KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyNSglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQ3LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ3LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF83X25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS03KCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfN19ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkNywgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNywgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWpiCUwoc2hfN19lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQ3LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ3LCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamFlCUwoc2hfN19ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzdfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJNyglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF84KToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTgoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS04KCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF84X25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGw4TG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwk4KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyNCglZWF4KSwgJXhtbTMKKwltb3ZhcHMJNDAoJWVheCksICV4bW00CisJbW92YXBzCTU2KCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQ4LCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQ4LCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkOCwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkOCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGw4TG9vcFN0YXJ0KQorCitMKExvb3BMZWF2ZTgpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJOCglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjQoJWVheCksICV4bW0zCisJcGFsaWducgkkOCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkOCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfOF9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktOCglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzhfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDgsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDgsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYglMKHNoXzhfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkOCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkOCwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWphZQlMKHNoXzhfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF84X2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTgoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfOSk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS05KCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktOSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfOV9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsOUxvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJNyglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjMoJWVheCksICV4bW0zCisJbW92YXBzCTM5KCVlYXgpLCAleG1tNAorCW1vdmFwcwk1NSglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkOSwgJXhtbTQsICV4bW01CisJcGFsaWducgkkOSwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDksICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDksICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsOUxvb3BTdGFydCkKKworTChTaGw5TG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTcoJWVheCksICV4bW0yCisJbW92YXBzCTIzKCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDksICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDksICV4bW0xLCAleG1tMgorCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfOV9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktOSglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzlfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDksICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDksICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYglMKHNoXzlfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkOSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkOSwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWphZQlMKHNoXzlfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF85X2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTkoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfMTApOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktMTAoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS0xMCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfMTBfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDEwTG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwk2KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyMiglZWF4KSwgJXhtbTMKKwltb3ZhcHMJMzgoJWVheCksICV4bW00CisJbW92YXBzCTU0KCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQxMCwgJXhtbTQsICV4bW01CisJcGFsaWducgkkMTAsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQxMCwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkMTAsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsMTBMb29wU3RhcnQpCisKK0woU2hsMTBMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJNiglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjIoJWVheCksICV4bW0zCisJcGFsaWducgkkMTAsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEwLCAleG1tMSwgJXhtbTIKKworCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzEwX25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS0xMCglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzEwX25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQxMCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTAsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYglMKHNoXzEwX2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDEwLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMCwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWphZQlMKHNoXzEwX25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfMTBfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJMTAoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfMTEpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktMTEoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS0xMSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfMTFfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDExTG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwk1KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyMSglZWF4KSwgJXhtbTMKKwltb3ZhcHMJMzcoJWVheCksICV4bW00CisJbW92YXBzCTUzKCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQxMSwgJXhtbTQsICV4bW01CisJcGFsaWducgkkMTEsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQxMSwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkMTEsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsMTFMb29wU3RhcnQpCisKK0woU2hsMTFMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJNSglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjEoJWVheCksICV4bW0zCisJcGFsaWducgkkMTEsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDExLCAleG1tMSwgJXhtbTIKKworCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzExX25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS0xMSglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzExX25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQxMSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTEsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYglMKHNoXzExX2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDExLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMSwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWphZQlMKHNoXzExX25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfMTFfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJMTEoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfMTIpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktMTIoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS0xMiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfMTJfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDEyTG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwk0KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyMCglZWF4KSwgJXhtbTMKKwltb3ZhcHMJMzYoJWVheCksICV4bW00CisJbW92YXBzCTUyKCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQxMiwgJXhtbTQsICV4bW01CisJcGFsaWducgkkMTIsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQxMiwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkMTIsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsMTJMb29wU3RhcnQpCisKK0woU2hsMTJMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJNCglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjAoJWVheCksICV4bW0zCisJcGFsaWducgkkMTIsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEyLCAleG1tMSwgJXhtbTIKKworCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzEyX25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS0xMiglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzEyX25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQxMiwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTIsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYglMKHNoXzEyX2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDEyLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMiwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWphZQlMKHNoXzEyX25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfMTJfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJMTIoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfMTMpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktMTMoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS0xMyglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfMTNfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDEzTG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwkzKCVlYXgpLCAleG1tMgorCW1vdmFwcwkxOSglZWF4KSwgJXhtbTMKKwltb3ZhcHMJMzUoJWVheCksICV4bW00CisJbW92YXBzCTUxKCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQxMywgJXhtbTQsICV4bW01CisJcGFsaWducgkkMTMsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQxMywgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkMTMsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsMTNMb29wU3RhcnQpCisKK0woU2hsMTNMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJMyglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMTkoJWVheCksICV4bW0zCisJcGFsaWducgkkMTMsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEzLCAleG1tMSwgJXhtbTIKKworCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzEzX25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS0xMyglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzEzX25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQxMywgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTMsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYglMKHNoXzEzX2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDEzLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMywgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWphZQlMKHNoXzEzX25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfMTNfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJMTMoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfMTQpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktMTQoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS0xNCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfMTRfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDE0TG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwkyKCVlYXgpLCAleG1tMgorCW1vdmFwcwkxOCglZWF4KSwgJXhtbTMKKwltb3ZhcHMJMzQoJWVheCksICV4bW00CisJbW92YXBzCTUwKCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQxNCwgJXhtbTQsICV4bW01CisJcGFsaWducgkkMTQsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQxNCwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkMTQsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsMTRMb29wU3RhcnQpCisKK0woU2hsMTRMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJMiglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMTgoJWVheCksICV4bW0zCisJcGFsaWducgkkMTQsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDE0LCAleG1tMSwgJXhtbTIKKworCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzE0X25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS0xNCglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzE0X25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQxNCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTQsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYglMKHNoXzE0X2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDE0LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxNCwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWphZQlMKHNoXzE0X25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfMTRfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJMTQoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfMTUpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktMTUoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS0xNSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfMTVfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDE1TG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwkxKCVlYXgpLCAleG1tMgorCW1vdmFwcwkxNyglZWF4KSwgJXhtbTMKKwltb3ZhcHMJMzMoJWVheCksICV4bW00CisJbW92YXBzCTQ5KCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQxNSwgJXhtbTQsICV4bW01CisJcGFsaWducgkkMTUsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQxNSwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkMTUsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsMTVMb29wU3RhcnQpCisKK0woU2hsMTVMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJMSglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMTcoJWVheCksICV4bW0zCisJcGFsaWducgkkMTUsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDE1LCAleG1tMSwgJXhtbTIKKworCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzE1X25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS0xNSglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzE1X25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQxNSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTUsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYglMKHNoXzE1X2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDE1LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxNSwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWphZQlMKHNoXzE1X25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfMTVfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJMTUoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfZW5kXzApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWxlYQkoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80NGJ5dGVzKToKKwltb3ZxCS00NCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtNDQoJWVkeCkKK0woZndkX3dyaXRlXzM2Ynl0ZXMpOgorCW1vdnEJLTM2KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0zNiglZWR4KQorTChmd2Rfd3JpdGVfMjhieXRlcyk6CisJbW92cQktMjgoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTI4KCVlZHgpCitMKGZ3ZF93cml0ZV8yMGJ5dGVzKToKKwltb3ZxCS0yMCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMjAoJWVkeCkKK0woZndkX3dyaXRlXzEyYnl0ZXMpOgorCW1vdnEJLTEyKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xMiglZWR4KQorTChmd2Rfd3JpdGVfNGJ5dGVzKToKKwltb3ZsCS00KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNCglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80MGJ5dGVzKToKKwltb3ZxCS00MCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtNDAoJWVkeCkKK0woZndkX3dyaXRlXzMyYnl0ZXMpOgorCW1vdnEJLTMyKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0zMiglZWR4KQorTChmd2Rfd3JpdGVfMjRieXRlcyk6CisJbW92cQktMjQoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTI0KCVlZHgpCitMKGZ3ZF93cml0ZV8xNmJ5dGVzKToKKwltb3ZxCS0xNiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTYoJWVkeCkKK0woZndkX3dyaXRlXzhieXRlcyk6CisJbW92cQktOCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtOCglZWR4KQorTChmd2Rfd3JpdGVfMGJ5dGVzKToKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNWJ5dGVzKToKKwltb3ZsCS01KCVlYXgpLCAlZWN4CisJbW92bAktNCglZWF4KSwgJWVheAorCW1vdmwJJWVjeCwgLTUoJWVkeCkKKwltb3ZsCSVlYXgsIC00KCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQ1Ynl0ZXMpOgorCW1vdnEJLTQ1KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC00NSglZWR4KQorTChmd2Rfd3JpdGVfMzdieXRlcyk6CisJbW92cQktMzcoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTM3KCVlZHgpCitMKGZ3ZF93cml0ZV8yOWJ5dGVzKToKKwltb3ZxCS0yOSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMjkoJWVkeCkKK0woZndkX3dyaXRlXzIxYnl0ZXMpOgorCW1vdnEJLTIxKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0yMSglZWR4KQorTChmd2Rfd3JpdGVfMTNieXRlcyk6CisJbW92cQktMTMoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTEzKCVlZHgpCisJbW92bAktNSglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTUoJWVkeCkKKwltb3Z6YmwJLTEoJWVheCksICVlY3gKKwltb3ZiCSVjbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDFieXRlcyk6CisJbW92cQktNDEoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTQxKCVlZHgpCitMKGZ3ZF93cml0ZV8zM2J5dGVzKToKKwltb3ZxCS0zMyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMzMoJWVkeCkKK0woZndkX3dyaXRlXzI1Ynl0ZXMpOgorCW1vdnEJLTI1KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0yNSglZWR4KQorTChmd2Rfd3JpdGVfMTdieXRlcyk6CisJbW92cQktMTcoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTE3KCVlZHgpCitMKGZ3ZF93cml0ZV85Ynl0ZXMpOgorCW1vdnEJLTkoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTkoJWVkeCkKK0woZndkX3dyaXRlXzFieXRlcyk6CisJbW92emJsCS0xKCVlYXgpLCAlZWN4CisJbW92YgklY2wsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQ2Ynl0ZXMpOgorCW1vdnEJLTQ2KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC00NiglZWR4KQorTChmd2Rfd3JpdGVfMzhieXRlcyk6CisJbW92cQktMzgoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTM4KCVlZHgpCitMKGZ3ZF93cml0ZV8zMGJ5dGVzKToKKwltb3ZxCS0zMCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMzAoJWVkeCkKK0woZndkX3dyaXRlXzIyYnl0ZXMpOgorCW1vdnEJLTIyKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0yMiglZWR4KQorTChmd2Rfd3JpdGVfMTRieXRlcyk6CisJbW92cQktMTQoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTE0KCVlZHgpCitMKGZ3ZF93cml0ZV82Ynl0ZXMpOgorCW1vdmwJLTYoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC02KCVlZHgpCisJbW92endsCS0yKCVlYXgpLCAlZWN4CisJbW92dwklY3gsIC0yKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQyYnl0ZXMpOgorCW1vdnEJLTQyKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC00MiglZWR4KQorTChmd2Rfd3JpdGVfMzRieXRlcyk6CisJbW92cQktMzQoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTM0KCVlZHgpCitMKGZ3ZF93cml0ZV8yNmJ5dGVzKToKKwltb3ZxCS0yNiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMjYoJWVkeCkKK0woZndkX3dyaXRlXzE4Ynl0ZXMpOgorCW1vdnEJLTE4KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xOCglZWR4KQorTChmd2Rfd3JpdGVfMTBieXRlcyk6CisJbW92cQktMTAoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTEwKCVlZHgpCitMKGZ3ZF93cml0ZV8yYnl0ZXMpOgorCW1vdnp3bAktMiglZWF4KSwgJWVjeAorCW1vdncJJWN4LCAtMiglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80N2J5dGVzKToKKwltb3ZxCS00NyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtNDcoJWVkeCkKK0woZndkX3dyaXRlXzM5Ynl0ZXMpOgorCW1vdnEJLTM5KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0zOSglZWR4KQorTChmd2Rfd3JpdGVfMzFieXRlcyk6CisJbW92cQktMzEoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTMxKCVlZHgpCitMKGZ3ZF93cml0ZV8yM2J5dGVzKToKKwltb3ZxCS0yMyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMjMoJWVkeCkKK0woZndkX3dyaXRlXzE1Ynl0ZXMpOgorCW1vdnEJLTE1KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xNSglZWR4KQorTChmd2Rfd3JpdGVfN2J5dGVzKToKKwltb3ZsCS03KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNyglZWR4KQorCW1vdnp3bAktMyglZWF4KSwgJWVjeAorCW1vdnpibAktMSglZWF4KSwgJWVheAorCW1vdncJJWN4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80M2J5dGVzKToKKwltb3ZxCS00MyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtNDMoJWVkeCkKK0woZndkX3dyaXRlXzM1Ynl0ZXMpOgorCW1vdnEJLTM1KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0zNSglZWR4KQorTChmd2Rfd3JpdGVfMjdieXRlcyk6CisJbW92cQktMjcoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTI3KCVlZHgpCitMKGZ3ZF93cml0ZV8xOWJ5dGVzKToKKwltb3ZxCS0xOSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTkoJWVkeCkKK0woZndkX3dyaXRlXzExYnl0ZXMpOgorCW1vdnEJLTExKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xMSglZWR4KQorTChmd2Rfd3JpdGVfM2J5dGVzKToKKwltb3Z6d2wJLTMoJWVheCksICVlY3gKKwltb3Z6YmwJLTEoJWVheCksICVlYXgKKwltb3Z3CSVjeCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDBieXRlc19hbGlnbik6CisJbW92ZHFhCS00MCglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC00MCglZWR4KQorTChmd2Rfd3JpdGVfMjRieXRlc19hbGlnbik6CisJbW92ZHFhCS0yNCglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0yNCglZWR4KQorTChmd2Rfd3JpdGVfOGJ5dGVzX2FsaWduKToKKwltb3ZxCS04KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC04KCVlZHgpCitMKGZ3ZF93cml0ZV8wYnl0ZXNfYWxpZ24pOgorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV8zMmJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTMyKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTMyKCVlZHgpCitMKGZ3ZF93cml0ZV8xNmJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTE2KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTE2KCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzVieXRlc19hbGlnbik6CisJbW92bAktNSglZWF4KSwgJWVjeAorCW1vdmwJLTQoJWVheCksICVlYXgKKwltb3ZsCSVlY3gsIC01KCVlZHgpCisJbW92bAklZWF4LCAtNCglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80NWJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTQ1KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTQ1KCVlZHgpCitMKGZ3ZF93cml0ZV8yOWJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTI5KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTI5KCVlZHgpCitMKGZ3ZF93cml0ZV8xM2J5dGVzX2FsaWduKToKKwltb3ZxCS0xMyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTMoJWVkeCkKKwltb3ZsCS01KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNSglZWR4KQorCW1vdnpibAktMSglZWF4KSwgJWVjeAorCW1vdmIJJWNsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV8zN2J5dGVzX2FsaWduKToKKwltb3ZkcWEJLTM3KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTM3KCVlZHgpCitMKGZ3ZF93cml0ZV8yMWJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTIxKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTIxKCVlZHgpCisJbW92bAktNSglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTUoJWVkeCkKKwltb3Z6YmwJLTEoJWVheCksICVlY3gKKwltb3ZiCSVjbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDFieXRlc19hbGlnbik6CisJbW92ZHFhCS00MSglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC00MSglZWR4KQorTChmd2Rfd3JpdGVfMjVieXRlc19hbGlnbik6CisJbW92ZHFhCS0yNSglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0yNSglZWR4KQorTChmd2Rfd3JpdGVfOWJ5dGVzX2FsaWduKToKKwltb3ZxCS05KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC05KCVlZHgpCitMKGZ3ZF93cml0ZV8xYnl0ZXNfYWxpZ24pOgorCW1vdnpibAktMSglZWF4KSwgJWVjeAorCW1vdmIJJWNsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV8zM2J5dGVzX2FsaWduKToKKwltb3ZkcWEJLTMzKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTMzKCVlZHgpCitMKGZ3ZF93cml0ZV8xN2J5dGVzX2FsaWduKToKKwltb3ZkcWEJLTE3KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTE3KCVlZHgpCisJbW92emJsCS0xKCVlYXgpLCAlZWN4CisJbW92YgklY2wsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQ2Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktNDYoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtNDYoJWVkeCkKK0woZndkX3dyaXRlXzMwYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMzAoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMzAoJWVkeCkKK0woZndkX3dyaXRlXzE0Ynl0ZXNfYWxpZ24pOgorCW1vdnEJLTE0KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xNCglZWR4KQorTChmd2Rfd3JpdGVfNmJ5dGVzX2FsaWduKToKKwltb3ZsCS02KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNiglZWR4KQorCW1vdnp3bAktMiglZWF4KSwgJWVjeAorCW1vdncJJWN4LCAtMiglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV8zOGJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTM4KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTM4KCVlZHgpCitMKGZ3ZF93cml0ZV8yMmJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTIyKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTIyKCVlZHgpCisJbW92bAktNiglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTYoJWVkeCkKKwltb3Z6d2wJLTIoJWVheCksICVlY3gKKwltb3Z3CSVjeCwgLTIoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDJieXRlc19hbGlnbik6CisJbW92ZHFhCS00MiglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC00MiglZWR4KQorTChmd2Rfd3JpdGVfMjZieXRlc19hbGlnbik6CisJbW92ZHFhCS0yNiglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0yNiglZWR4KQorTChmd2Rfd3JpdGVfMTBieXRlc19hbGlnbik6CisJbW92cQktMTAoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTEwKCVlZHgpCitMKGZ3ZF93cml0ZV8yYnl0ZXNfYWxpZ24pOgorCW1vdnp3bAktMiglZWF4KSwgJWVjeAorCW1vdncJJWN4LCAtMiglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV8zNGJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTM0KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTM0KCVlZHgpCitMKGZ3ZF93cml0ZV8xOGJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTE4KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTE4KCVlZHgpCisJbW92endsCS0yKCVlYXgpLCAlZWN4CisJbW92dwklY3gsIC0yKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQ3Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktNDcoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtNDcoJWVkeCkKK0woZndkX3dyaXRlXzMxYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMzEoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMzEoJWVkeCkKK0woZndkX3dyaXRlXzE1Ynl0ZXNfYWxpZ24pOgorCW1vdnEJLTE1KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xNSglZWR4KQorTChmd2Rfd3JpdGVfN2J5dGVzX2FsaWduKToKKwltb3ZsCS03KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNyglZWR4KQorCW1vdnp3bAktMyglZWF4KSwgJWVjeAorCW1vdnpibAktMSglZWF4KSwgJWVheAorCW1vdncJJWN4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV8zOWJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTM5KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTM5KCVlZHgpCitMKGZ3ZF93cml0ZV8yM2J5dGVzX2FsaWduKToKKwltb3ZkcWEJLTIzKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTIzKCVlZHgpCisJbW92bAktNyglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTcoJWVkeCkKKwltb3Z6d2wJLTMoJWVheCksICVlY3gKKwltb3Z6YmwJLTEoJWVheCksICVlYXgKKwltb3Z3CSVjeCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDNieXRlc19hbGlnbik6CisJbW92ZHFhCS00MyglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC00MyglZWR4KQorTChmd2Rfd3JpdGVfMjdieXRlc19hbGlnbik6CisJbW92ZHFhCS0yNyglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0yNyglZWR4KQorTChmd2Rfd3JpdGVfMTFieXRlc19hbGlnbik6CisJbW92cQktMTEoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTExKCVlZHgpCitMKGZ3ZF93cml0ZV8zYnl0ZXNfYWxpZ24pOgorCW1vdnp3bAktMyglZWF4KSwgJWVjeAorCW1vdnpibAktMSglZWF4KSwgJWVheAorCW1vdncJJWN4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV8zNWJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTM1KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTM1KCVlZHgpCitMKGZ3ZF93cml0ZV8xOWJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTE5KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTE5KCVlZHgpCisJbW92endsCS0zKCVlYXgpLCAlZWN4CisJbW92emJsCS0xKCVlYXgpLCAlZWF4CisJbW92dwklY3gsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQ0Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktNDQoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtNDQoJWVkeCkKK0woZndkX3dyaXRlXzI4Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMjgoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMjgoJWVkeCkKK0woZndkX3dyaXRlXzEyYnl0ZXNfYWxpZ24pOgorCW1vdnEJLTEyKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xMiglZWR4KQorTChmd2Rfd3JpdGVfNGJ5dGVzX2FsaWduKToKKwltb3ZsCS00KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNCglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV8zNmJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTM2KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTM2KCVlZHgpCitMKGZ3ZF93cml0ZV8yMGJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTIwKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTIwKCVlZHgpCisJbW92bAktNCglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTQoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTl9FTkQKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChsYXJnZV9wYWdlKToKKwltb3ZkcXUJKCVlYXgpLCAleG1tMQorI2lmZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisJbGVhCTE2KCVlYXgpLCAlZWF4CisJbW92bnRkcQkleG1tMSwgKCVlZHgpCisJbGVhCTE2KCVlZHgpLCAlZWR4CisJbGVhCS0weDkwKCVlY3gpLCAlZWN4CisJUE9QICglZWRpKQorCisJLnAyYWxpZ24gNAorTChsYXJnZV9wYWdlX2xvb3ApOgorCW1vdmRxdQkoJWVheCksICV4bW0wCisJbW92ZHF1CTB4MTAoJWVheCksICV4bW0xCisJbW92ZHF1CTB4MjAoJWVheCksICV4bW0yCisJbW92ZHF1CTB4MzAoJWVheCksICV4bW0zCisJbW92ZHF1CTB4NDAoJWVheCksICV4bW00CisJbW92ZHF1CTB4NTAoJWVheCksICV4bW01CisJbW92ZHF1CTB4NjAoJWVheCksICV4bW02CisJbW92ZHF1CTB4NzAoJWVheCksICV4bW03CisJbGVhCTB4ODAoJWVheCksICVlYXgKKworCXN1YgkkMHg4MCwgJWVjeAorCW1vdm50ZHEJJXhtbTAsICglZWR4KQorCW1vdm50ZHEJJXhtbTEsIDB4MTAoJWVkeCkKKwltb3ZudGRxCSV4bW0yLCAweDIwKCVlZHgpCisJbW92bnRkcQkleG1tMywgMHgzMCglZWR4KQorCW1vdm50ZHEJJXhtbTQsIDB4NDAoJWVkeCkKKwltb3ZudGRxCSV4bW01LCAweDUwKCVlZHgpCisJbW92bnRkcQkleG1tNiwgMHg2MCglZWR4KQorCW1vdm50ZHEJJXhtbTcsIDB4NzAoJWVkeCkKKwlsZWEJMHg4MCglZWR4KSwgJWVkeAorCWphZQlMKGxhcmdlX3BhZ2VfbG9vcCkKKwljbXAJJC0weDQwLCAlZWN4CisJbGVhCTB4ODAoJWVjeCksICVlY3gKKwlqbAlMKGxhcmdlX3BhZ2VfbGVzc182NGJ5dGVzKQorCisJbW92ZHF1CSglZWF4KSwgJXhtbTAKKwltb3ZkcXUJMHgxMCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJMHgyMCglZWF4KSwgJXhtbTIKKwltb3ZkcXUJMHgzMCglZWF4KSwgJXhtbTMKKwlsZWEJMHg0MCglZWF4KSwgJWVheAorCisJbW92bnRkcQkleG1tMCwgKCVlZHgpCisJbW92bnRkcQkleG1tMSwgMHgxMCglZWR4KQorCW1vdm50ZHEJJXhtbTIsIDB4MjAoJWVkeCkKKwltb3ZudGRxCSV4bW0zLCAweDMwKCVlZHgpCisJbGVhCTB4NDAoJWVkeCksICVlZHgKKwlzdWIJJDB4NDAsICVlY3gKK0wobGFyZ2VfcGFnZV9sZXNzXzY0Ynl0ZXMpOgorCWNtcAkkMzIsICVlY3gKKwlqYglMKGxhcmdlX3BhZ2VfbGVzc18zMmJ5dGVzKQorCW1vdmRxdQkoJWVheCksICV4bW0wCisJbW92ZHF1CTB4MTAoJWVheCksICV4bW0xCisJbGVhCTB4MjAoJWVheCksICVlYXgKKwltb3ZudGRxCSV4bW0wLCAoJWVkeCkKKwltb3ZudGRxCSV4bW0xLCAweDEwKCVlZHgpCisJbGVhCTB4MjAoJWVkeCksICVlZHgKKwlzdWIJJDB4MjAsICVlY3gKK0wobGFyZ2VfcGFnZV9sZXNzXzMyYnl0ZXMpOgorCWFkZAklZWN4LCAlZWR4CisJYWRkCSVlY3gsICVlYXgKKwlzZmVuY2UKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCS5wMmFsaWduIDQKK0woYmtfd3JpdGVfNDRieXRlcyk6CisJbW92cQkzNiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAzNiglZWR4KQorTChia193cml0ZV8zNmJ5dGVzKToKKwltb3ZxCTI4KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDI4KCVlZHgpCitMKGJrX3dyaXRlXzI4Ynl0ZXMpOgorCW1vdnEJMjAoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMjAoJWVkeCkKK0woYmtfd3JpdGVfMjBieXRlcyk6CisJbW92cQkxMiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAxMiglZWR4KQorTChia193cml0ZV8xMmJ5dGVzKToKKwltb3ZxCTQoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgNCglZWR4KQorTChia193cml0ZV80Ynl0ZXMpOgorCW1vdmwJKCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAoJWVkeCkKK0woYmtfd3JpdGVfMGJ5dGVzKToKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAlMRU4oJWVzcCksICVlY3gKKwlhZGQJJWVjeCwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGJrX3dyaXRlXzQwYnl0ZXMpOgorCW1vdnEJMzIoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMzIoJWVkeCkKK0woYmtfd3JpdGVfMzJieXRlcyk6CisJbW92cQkyNCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAyNCglZWR4KQorTChia193cml0ZV8yNGJ5dGVzKToKKwltb3ZxCTE2KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDE2KCVlZHgpCitMKGJrX3dyaXRlXzE2Ynl0ZXMpOgorCW1vdnEJOCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCA4KCVlZHgpCitMKGJrX3dyaXRlXzhieXRlcyk6CisJbW92cQkoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChia193cml0ZV80NWJ5dGVzKToKKwltb3ZxCTM3KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDM3KCVlZHgpCitMKGJrX3dyaXRlXzM3Ynl0ZXMpOgorCW1vdnEJMjkoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMjkoJWVkeCkKK0woYmtfd3JpdGVfMjlieXRlcyk6CisJbW92cQkyMSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAyMSglZWR4KQorTChia193cml0ZV8yMWJ5dGVzKToKKwltb3ZxCTEzKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDEzKCVlZHgpCitMKGJrX3dyaXRlXzEzYnl0ZXMpOgorCW1vdnEJNSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCA1KCVlZHgpCitMKGJrX3dyaXRlXzVieXRlcyk6CisJbW92bAkxKCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAxKCVlZHgpCitMKGJrX3dyaXRlXzFieXRlcyk6CisJbW92emJsCSglZWF4KSwgJWVjeAorCW1vdmIJJWNsLCAoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAlMRU4oJWVzcCksICVlY3gKKwlhZGQJJWVjeCwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGJrX3dyaXRlXzQxYnl0ZXMpOgorCW1vdnEJMzMoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMzMoJWVkeCkKK0woYmtfd3JpdGVfMzNieXRlcyk6CisJbW92cQkyNSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAyNSglZWR4KQorTChia193cml0ZV8yNWJ5dGVzKToKKwltb3ZxCTE3KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDE3KCVlZHgpCitMKGJrX3dyaXRlXzE3Ynl0ZXMpOgorCW1vdnEJOSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCA5KCVlZHgpCitMKGJrX3dyaXRlXzlieXRlcyk6CisJbW92cQkxKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDEoJWVkeCkKKwltb3Z6YmwJKCVlYXgpLCAlZWN4CisJbW92YgklY2wsICglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woYmtfd3JpdGVfNDZieXRlcyk6CisJbW92cQkzOCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAzOCglZWR4KQorTChia193cml0ZV8zOGJ5dGVzKToKKwltb3ZxCTMwKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDMwKCVlZHgpCitMKGJrX3dyaXRlXzMwYnl0ZXMpOgorCW1vdnEJMjIoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMjIoJWVkeCkKK0woYmtfd3JpdGVfMjJieXRlcyk6CisJbW92cQkxNCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAxNCglZWR4KQorTChia193cml0ZV8xNGJ5dGVzKToKKwltb3ZxCTYoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgNiglZWR4KQorTChia193cml0ZV82Ynl0ZXMpOgorCW1vdmwJMiglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgMiglZWR4KQorCW1vdnp3bAkoJWVheCksICVlY3gKKwltb3Z3CSVjeCwgKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChia193cml0ZV80MmJ5dGVzKToKKwltb3ZxCTM0KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDM0KCVlZHgpCitMKGJrX3dyaXRlXzM0Ynl0ZXMpOgorCW1vdnEJMjYoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMjYoJWVkeCkKK0woYmtfd3JpdGVfMjZieXRlcyk6CisJbW92cQkxOCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAxOCglZWR4KQorTChia193cml0ZV8xOGJ5dGVzKToKKwltb3ZxCTEwKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDEwKCVlZHgpCitMKGJrX3dyaXRlXzEwYnl0ZXMpOgorCW1vdnEJMiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAyKCVlZHgpCitMKGJrX3dyaXRlXzJieXRlcyk6CisJbW92endsCSglZWF4KSwgJWVjeAorCW1vdncJJWN4LCAoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAlMRU4oJWVzcCksICVlY3gKKwlhZGQJJWVjeCwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGJrX3dyaXRlXzQ3Ynl0ZXMpOgorCW1vdnEJMzkoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMzkoJWVkeCkKK0woYmtfd3JpdGVfMzlieXRlcyk6CisJbW92cQkzMSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAzMSglZWR4KQorTChia193cml0ZV8zMWJ5dGVzKToKKwltb3ZxCTIzKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDIzKCVlZHgpCitMKGJrX3dyaXRlXzIzYnl0ZXMpOgorCW1vdnEJMTUoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMTUoJWVkeCkKK0woYmtfd3JpdGVfMTVieXRlcyk6CisJbW92cQk3KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDcoJWVkeCkKK0woYmtfd3JpdGVfN2J5dGVzKToKKwltb3ZsCTMoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIDMoJWVkeCkKKwltb3Z6d2wJMSglZWF4KSwgJWVjeAorCW1vdncJJWN4LCAxKCVlZHgpCisJbW92emJsCSglZWF4KSwgJWVheAorCW1vdmIJJWFsLCAoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAlMRU4oJWVzcCksICVlY3gKKwlhZGQJJWVjeCwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGJrX3dyaXRlXzQzYnl0ZXMpOgorCW1vdnEJMzUoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMzUoJWVkeCkKK0woYmtfd3JpdGVfMzVieXRlcyk6CisJbW92cQkyNyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAyNyglZWR4KQorTChia193cml0ZV8yN2J5dGVzKToKKwltb3ZxCTE5KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDE5KCVlZHgpCitMKGJrX3dyaXRlXzE5Ynl0ZXMpOgorCW1vdnEJMTEoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMTEoJWVkeCkKK0woYmtfd3JpdGVfMTFieXRlcyk6CisJbW92cQkzKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDMoJWVkeCkKK0woYmtfd3JpdGVfM2J5dGVzKToKKwltb3Z6d2wJMSglZWF4KSwgJWVjeAorCW1vdncJJWN4LCAxKCVlZHgpCisJbW92emJsCSglZWF4KSwgJWVheAorCW1vdmIJJWFsLCAoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAlMRU4oJWVzcCksICVlY3gKKwlhZGQJJWVjeCwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOX0VORAorCisKKwkucHVzaHNlY3Rpb24gLnJvZGF0YS5zc3NlMywiYSIsQHByb2diaXRzCisJLnAyYWxpZ24gMgorTCh0YWJsZV80OGJ5dGVzX2Z3ZCk6CisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzBieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzNieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzZieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV83Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfOGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzlieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzExYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTJieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xM2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE0Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTVieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE3Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMThieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xOWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIwYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjFieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIzYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjRieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI2Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjdieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yOGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI5Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzBieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMyYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzNieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM1Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzZieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zN2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM4Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzlieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQxYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDJieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80M2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ0Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDVieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ3Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKworCS5wMmFsaWduIDIKK0wodGFibGVfNDhieXRlc19md2RfYWxpZ24pOgorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8wYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzJieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzVieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV82Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfN2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzhieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV85Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTBieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEyYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTNieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE1Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTZieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xN2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE4Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTlieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIxYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjJieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yM2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI0Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjVieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI3Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjhieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yOWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMwYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzFieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMzYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzRieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM2Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzdieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zOGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM5Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDBieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQyYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDNieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ1Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDZieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80N2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisKKwkucDJhbGlnbiAyCitMKHNobF90YWJsZSk6CisJLmludAlKTVBUQkwgKEwoc2hsXzApLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzEpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzIpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzMpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzQpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzUpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzYpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzcpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzgpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzkpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzEwKSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF8xMSksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfMTIpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzEzKSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF8xNCksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfMTUpLCBMKHNobF90YWJsZSkpCisKKwkucDJhbGlnbiAyCitMKHRhYmxlXzQ4X2J5dGVzX2J3ZCk6CisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzFieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8yYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfM2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzRieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV81Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzdieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV84Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfOWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzEwYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTFieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8xMmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzEzYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTRieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8xNWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE2Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTdieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8xOGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE5Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjBieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8yMWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzIyYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjNieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8yNGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI1Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjZieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8yN2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI4Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjlieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8zMGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzMxYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzJieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8zM2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM0Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzVieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8zNmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM3Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzhieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8zOWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQwYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDFieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV80MmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQzYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDRieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV80NWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQ2Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDdieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKworCS5wb3BzZWN0aW9uCisKKyNpZmRlZiBVU0VfQVNfTUVNTU9WRQorCS5wMmFsaWduIDQKK0woY29weV9iYWNrd2FyZCk6CisJUFVTSCAoJWVkaSkKKwltb3ZsCSVlYXgsICVlZGkKKwlsZWEJKCVlY3gsJWVkeCwxKSwlZWR4CisJbGVhCSglZWN4LCVlZGksMSksJWVkaQorCXRlc3RsCSQweDMsICVlZHgKKwlqbnoJTChia19hbGlnbikKKworTChia19hbGlnbmVkXzQpOgorCWNtcAkkNjQsICVlY3gKKwlqYWUJTChia193cml0ZV9tb3JlNjRieXRlcykKKworTChia193cml0ZV82NGJ5dGVzbGVzcyk6CisJY21wCSQzMiwgJWVjeAorCWpiCUwoYmtfd3JpdGVfbGVzczMyYnl0ZXMpCisKK0woYmtfd3JpdGVfbW9yZTMyYnl0ZXMpOgorCS8qIENvcHkgMzIgYnl0ZXMgYXQgYSB0aW1lLiAgKi8KKwlzdWIJJDMyLCAlZWN4CisJbW92cQktOCglZWRpKSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtOCglZWR4KQorCW1vdnEJLTE2KCVlZGkpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xNiglZWR4KQorCW1vdnEJLTI0KCVlZGkpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0yNCglZWR4KQorCW1vdnEJLTMyKCVlZGkpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0zMiglZWR4KQorCXN1YgkkMzIsICVlZHgKKwlzdWIJJDMyLCAlZWRpCisKK0woYmtfd3JpdGVfbGVzczMyYnl0ZXMpOgorCW1vdmwJJWVkaSwgJWVheAorCXN1YgklZWN4LCAlZWR4CisJc3ViCSVlY3gsICVlYXgKKwlQT1AgKCVlZGkpCitMKGJrX3dyaXRlX2xlc3MzMmJ5dGVzXzIpOgorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhfYnl0ZXNfYndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChia19hbGlnbik6CisJY21wCSQ4LCAlZWN4CisJamJlCUwoYmtfd3JpdGVfbGVzczMyYnl0ZXMpCisJdGVzdGwJJDEsICVlZHgKKwkvKiBXZSBnZXQgaGVyZSBvbmx5IGlmIChFRFggJiAzICkgIT0gMCBzbyBpZiAoRURYICYgMSkgPT0wLAorCXRoZW4JKEVEWCAmIDIpIG11c3QgYmUgIT0gMC4gICovCisJanoJTChia19nb3QyKQorCXN1YgkkMSwgJWVkaQorCXN1YgkkMSwgJWVjeAorCXN1YgkkMSwgJWVkeAorCW1vdnpibAkoJWVkaSksICVlYXgKKwltb3ZiCSVhbCwgKCVlZHgpCisKKwl0ZXN0bAkkMiwgJWVkeAorCWp6CUwoYmtfYWxpZ25lZF80KQorCitMKGJrX2dvdDIpOgorCXN1YgkkMiwgJWVkaQorCXN1YgkkMiwgJWVjeAorCXN1YgkkMiwgJWVkeAorCW1vdnp3bAkoJWVkaSksICVlYXgKKwltb3Z3CSVheCwgKCVlZHgpCisJam1wCUwoYmtfYWxpZ25lZF80KQorCisJLnAyYWxpZ24gNAorTChia193cml0ZV9tb3JlNjRieXRlcyk6CisJLyogQ2hlY2sgYWxpZ25tZW50IG9mIGxhc3QgYnl0ZS4gICovCisJdGVzdGwJJDE1LCAlZWR4CisJanoJTChia19zc3NlM19jcHlfcHJlKQorCisvKiBFRFggaXMgYWxpZ25lZCA0IGJ5dGVzLCBidXQgbm90IDE2IGJ5dGVzLiAgKi8KK0woYmtfc3NzZTNfYWxpZ24pOgorCXN1YgkkNCwgJWVkaQorCXN1YgkkNCwgJWVjeAorCXN1YgkkNCwgJWVkeAorCW1vdmwJKCVlZGkpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKworCXRlc3RsCSQxNSwgJWVkeAorCWp6CUwoYmtfc3NzZTNfY3B5X3ByZSkKKworCXN1YgkkNCwgJWVkaQorCXN1YgkkNCwgJWVjeAorCXN1YgkkNCwgJWVkeAorCW1vdmwJKCVlZGkpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKworCXRlc3RsCSQxNSwgJWVkeAorCWp6CUwoYmtfc3NzZTNfY3B5X3ByZSkKKworCXN1YgkkNCwgJWVkaQorCXN1YgkkNCwgJWVjeAorCXN1YgkkNCwgJWVkeAorCW1vdmwJKCVlZGkpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKworTChia19zc3NlM19jcHlfcHJlKToKKwljbXAJJDY0LCAlZWN4CisJamIJTChia193cml0ZV9tb3JlMzJieXRlcykKKworCS5wMmFsaWduIDQKK0woYmtfc3NzZTNfY3B5KToKKwlzdWIJJDY0LCAlZWRpCisJc3ViCSQ2NCwgJWVjeAorCXN1YgkkNjQsICVlZHgKKwltb3ZkcXUJMHgzMCglZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsIDB4MzAoJWVkeCkKKwltb3ZkcXUJMHgyMCglZWRpKSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsIDB4MjAoJWVkeCkKKwltb3ZkcXUJMHgxMCglZWRpKSwgJXhtbTEKKwltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKKwltb3ZkcXUJKCVlZGkpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJY21wCSQ2NCwgJWVjeAorCWphZQlMKGJrX3Nzc2UzX2NweSkKKwlqbXAJTChia193cml0ZV82NGJ5dGVzbGVzcykKKworI2VuZGlmCisKK0VORCAoTUVNQ1BZKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtbW92ZS1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLW1lbW1vdmUtYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1tb3ZlLWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1tZW1tb3ZlLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RyY2F0LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RyY2F0LWF0b20uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RyY2F0LWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJjYXQtYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjbXAtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJjbXAtYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjbXAtYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmNtcC1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmNweS1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmNweS1hdG9tLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmNweS1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RyY3B5LWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybGNhdC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmxjYXQtYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJsY2F0LWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJsY2F0LWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybGNweS1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmxjcHktYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJsY3B5LWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJsY3B5LWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybmNhdC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jYXQtYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY2F0LWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJuY2F0LWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybmNtcC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jbXAtYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY21wLWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJuY21wLWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybmNweS1hdG9tLlMgYi9saWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jcHktYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY3B5LWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJuY3B5LWF0b20uUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd2NzY2F0LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtd2NzY2F0LWF0b20uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd2NzY2F0LWF0b20uUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13Y3NjYXQtYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy13Y3NjcHktYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13Y3NjcHktYXRvbS5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy13Y3NjcHktYXRvbS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXdjc2NweS1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXdtZW1jbXAtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13bWVtY21wLWF0b20uUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd21lbWNtcC1hdG9tLlMKcmVuYW1lIHRvIGxpYmMvYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtd21lbWNtcC1hdG9tLlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19fYmlvbmljX2Nsb25lLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCmluZGV4IDM4MjNlY2MuLmVmNzhhZWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19fYmlvbmljX2Nsb25lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUwpAQCAtMSw1ICsxLDQgQEAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogLy8gcGlkX3QgX19iaW9uaWNfY2xvbmUoaW50IGZsYWdzLCB2b2lkKiBjaGlsZF9zdGFjaywgcGlkX3QqIHBhcmVudF90aWQsIHZvaWQqIHRscywgcGlkX3QqIGNoaWxkX3RpZCwgaW50ICgqZm4pKHZvaWQqKSwgdm9pZCogYXJnKTsKIEVOVFJZKF9fYmlvbmljX2Nsb25lKQpAQCAtNyw5ICs2LDEyIEBACiAgICAgICAgIHB1c2hsICAgJWVzaQogICAgICAgICBwdXNobCAgICVlZGkKIAotICAgICAgICAjIEFsaWduIGNoaWxkIHN0YWNrLgotICAgICAgICBtb3ZsICAgIDIwKCVlc3ApLCAlZWN4Ci0gICAgICAgIGFuZGwgICAgJH4xNSwgJWVjeAorICAgICAgICAjIExvYWQgc3lzdGVtIGNhbGwgYXJndW1lbnRzIGludG8gcmVnaXN0ZXJzLgorICAgICAgICBtb3ZsICAgIDE2KCVlc3ApLCAlZWJ4ICAgIyBmbGFncworICAgICAgICBtb3ZsICAgIDIwKCVlc3ApLCAlZWN4ICAgIyBjaGlsZF9zdGFjaworICAgICAgICBtb3ZsICAgIDI0KCVlc3ApLCAlZWR4ICAgIyBwYXJlbnRfdGlkCisgICAgICAgIG1vdmwgICAgMjgoJWVzcCksICVlc2kgICAjIHRscworICAgICAgICBtb3ZsICAgIDMyKCVlc3ApLCAlZWRpICAgIyBjaGlsZF90aWQKIAogICAgICAgICAjIENvcHkgJ2ZuJyBhbmQgJ2FyZycgb250byB0aGUgY2hpbGQgc3RhY2sKICAgICAgICAgbW92bCAgICAzNiglZXNwKSwgJWVheCAgICMgUmVhZCAnZm4nLgpAQCAtMjAsMzUgKzIyLDMyIEBACiAKICAgICAgICAgIyBNYWtlIHRoZSBzeXN0ZW0gY2FsbC4KICAgICAgICAgbW92bCAgICAkX19OUl9jbG9uZSwgJWVheAotICAgICAgICBtb3ZsICAgIDE2KCVlc3ApLCAlZWJ4ICAjIGZsYWdzCi0gICAgICAgICNtb3ZsICAgJWVjeCwgJWVjeCAgICAgICMgY2hpbGQgc3RhY2sgKGFscmVhZHkgdGhlcmUpCi0gICAgICAgIG1vdmwgICAgMjQoJWVzcCksICVlZHggICMgcGFyZW50X3RpZAotICAgICAgICBtb3ZsICAgIDI4KCVlc3ApLCAlZXNpICAjIHRscwotICAgICAgICBtb3ZsICAgIDMyKCVlc3ApLCAlZWRpICAjIGNoaWxkX3RpZAogICAgICAgICBpbnQgICAgICQweDgwCiAKICAgICAgICAgIyBDaGVjayByZXN1bHQuCi0gICAgICAgIGNtcGwgICAgJDAsICVlYXgKLSAgICAgICAgamUgICAgICBiY19jaGlsZAotICAgICAgICBqZyAgICAgIGJjX3BhcmVudAorICAgICAgICB0ZXN0bCAgICAlZWF4LCAlZWF4CisgICAgICAgIGp6ICAgICAgLkxfYmNfY2hpbGQKKyAgICAgICAgamcgICAgICAuTF9iY19wYXJlbnQKIAogICAgICAgICAjIEFuIGVycm9yIG9jY3VycmVkLCBzbyBzZXQgZXJybm8gYW5kIHJldHVybiAtMS4KICAgICAgICAgbmVnbCAgICAlZWF4CiAgICAgICAgIHB1c2hsICAgJWVheAotICAgICAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgICAgICBvcmwgICAgICQtMSwgJWVheAotICAgICAgICBqbXAgICAgIGJjX3JldHVybgorICAgICAgICBqbXAgICAgIC5MX2JjX3JldHVybgogCi1iY19jaGlsZDoKLSAgICAgICAgY2FsbCAgICBfX2Jpb25pY19jbG9uZV9lbnRyeQorLkxfYmNfY2hpbGQ6CisgICAgICAgICMgV2UgZG9uJ3Qgd2FudCBhbnlvbmUgdG8gdW53aW5kIHBhc3QgdGhpcyBwb2ludC4KKyAgICAgICAgLmNmaV91bmRlZmluZWQgJWVpcAorICAgICAgICBjYWxsICAgIF9fc3RhcnRfdGhyZWFkCiAgICAgICAgIGhsdAogCi1iY19wYXJlbnQ6Ci0gICAgICAgICMgd2UncmUgdGhlIHBhcmVudDsgbm90aGluZyB0byBkby4KLWJjX3JldHVybjoKKy5MX2JjX3BhcmVudDoKKyAgICAgICAgIyBXZSdyZSB0aGUgcGFyZW50OyBub3RoaW5nIHRvIGRvLgorLkxfYmNfcmV0dXJuOgogICAgICAgICBwb3BsICAgICVlZGkKICAgICAgICAgcG9wbCAgICAlZXNpCiAgICAgICAgIHBvcGwgICAgJWVieAogICAgICAgICByZXQKIEVORChfX2Jpb25pY19jbG9uZSkKKy5oaWRkZW4gX19iaW9uaWNfY2xvbmUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19fZ2V0X3NwLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX2dldF9zcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzM5ZDc5Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19fZ2V0X3NwLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1FTlRSWShfX2dldF9zcCkKLSAgbW92ICAlZXNwLCAlZWF4Ci0gIHJldAotRU5EKF9fZ2V0X3NwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19zZXRfdGxzLmMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3NldF90bHMuYwppbmRleCA3ZWQ0YjAxLi4zOGVkM2M5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3NldF90bHMuYworKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3NldF90bHMuYwpAQCAtMjUsNzcgKzI1LDUwIEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgogCisjaW5jbHVkZSA8YXNtL2xkdC5oPgogCi1zdHJ1Y3QgdXNlcl9kZXNjIHsKLSAgICB1bnNpZ25lZCBpbnQgICAgZW50cnlfbnVtYmVyOwotICAgIHVuc2lnbmVkIGxvbmcgICBiYXNlX2FkZHI7Ci0gICAgdW5zaWduZWQgaW50ICAgIGxpbWl0OwotICAgIHVuc2lnbmVkIGludCAgICBzZWdfMzJiaXQ6MTsKLSAgICB1bnNpZ25lZCBpbnQgICAgY29udGVudHM6MjsKLSAgICB1bnNpZ25lZCBpbnQgICAgcmVhZF9leGVjX29ubHk6MTsKLSAgICB1bnNpZ25lZCBpbnQgICAgbGltaXRfaW5fcGFnZXM6MTsKLSAgICB1bnNpZ25lZCBpbnQgICAgc2VnX25vdF9wcmVzZW50OjE7Ci0gICAgdW5zaWduZWQgaW50ICAgIHVzZWFibGU6MTsKLSAgICB1bnNpZ25lZCBpbnQgICAgZW1wdHk6MjU7Ci19OworZXh0ZXJuIGludCBfX3NldF90aHJlYWRfYXJlYShzdHJ1Y3QgdXNlcl9kZXNjKik7CiAKLWV4dGVybiBpbnQgX19zZXRfdGhyZWFkX2FyZWEoc3RydWN0IHVzZXJfZGVzYyAqdV9pbmZvKTsKK19fTElCQ19ISURERU5fXyB2b2lkIF9faW5pdF91c2VyX2Rlc2Moc3RydWN0IHVzZXJfZGVzYyogcmVzdWx0LCBib29sIGFsbG9jYXRlLCB2b2lkKiBiYXNlX2FkZHIpIHsKKyAgaWYgKGFsbG9jYXRlKSB7CisgICAgLy8gTGV0IHRoZSBrZXJuZWwgY2hvb3NlLgorICAgIHJlc3VsdC0+ZW50cnlfbnVtYmVyID0gLTE7CisgIH0gZWxzZSB7CisgICAgLy8gR2V0IHRoZSBleGlzdGluZyBlbnRyeSBudW1iZXIgZnJvbSAlZ3MuCisgICAgdWludDMyX3QgZ3M7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1vdncgJSVncywgJXcwIiA6ICI9cSIoZ3MpIC8qb3V0cHV0Ki8pOworICAgIHJlc3VsdC0+ZW50cnlfbnVtYmVyID0gKGdzICYgMHhmZmZmKSA+PiAzOworICB9CiAKLS8qIHRoZSBmb2xsb3dpbmcgY2FuJ3QgYmUgY29uc3QsIHNpbmNlIHRoZSBmaXJzdCBjYWxsIHdpbGwKLSAqIHVwZGF0ZSB0aGUgJ2VudHJ5X251bWJlcicgZmllbGQKLSAqLwotc3RhdGljIHN0cnVjdCB1c2VyX2Rlc2MgIF90bHNfZGVzYyA9Ci17Ci0gICAgLTEsCi0gICAgMCwKLSAgICAweDEwMDAsCi0gICAgMSwKLSAgICAwLAotICAgIDAsCi0gICAgMSwKLSAgICAwLAotICAgIDEsCi0gICAgMAotfTsKKyAgcmVzdWx0LT5iYXNlX2FkZHIgPSAodWludHB0cl90KSBiYXNlX2FkZHI7CiAKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgIF90bHNfZGVzY19sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKyAgcmVzdWx0LT5saW1pdCA9IFBBR0VfU0laRTsKIAotc3RydWN0IF90aHJlYWRfYXJlYV9oZWFkIHsKLSAgICB2b2lkICpzZWxmOwotfTsKLQotLyogd2UgaW1wbGVtZW50IHRocmVhZCBsb2NhbCBzdG9yYWdlIHRocm91Z2ggdGhlIGdzOiBzZWdtZW50IGRlc2NyaXB0b3IKLSAqIHdlIGNyZWF0ZSBhIHNlZ21lbnQgZGVzY3JpcHRvciBmb3IgdGhlIHRscwotICovCi1pbnQgX19zZXRfdGxzKHZvaWQgKnB0cikKLXsKLSAgICBpbnQgICByYywgc2VnbWVudDsKLQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Rsc19kZXNjX2xvY2spOwotICAgIF90bHNfZGVzYy5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylwdHI7Ci0KLSAgICAvKiBXZSBhbHNvIG5lZWQgdG8gd3JpdGUgdGhlIGxvY2F0aW9uIG9mIHRoZSB0bHMgdG8gcHRyWzBdICovCi0gICAgKChzdHJ1Y3QgX3RocmVhZF9hcmVhX2hlYWQgKilwdHIpLT5zZWxmID0gcHRyOwotCi0gICAgcmMgPSBfX3NldF90aHJlYWRfYXJlYSggJl90bHNfZGVzYyApOwotICAgIGlmIChyYyAhPSAwKQotICAgIHsKLSAgICAgICAgLyogY291bGQgbm90IHNldCB0aHJlYWQgbG9jYWwgYXJlYSAqLwotICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Rsc19kZXNjX2xvY2spOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgLyogdGhpcyB3ZWlyZCBjb21wdXRhdGlvbiBjb21lcyBmcm9tIEdMaWJjICovCi0gICAgc2VnbWVudCA9IF90bHNfZGVzYy5lbnRyeV9udW1iZXIqOCArIDM7Ci0gICAgYXNtIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICIgICBtb3Z3ICV3MCwgJSVncyIgOjogInEiKHNlZ21lbnQpCi0gICAgKTsKLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Rsc19kZXNjX2xvY2spOwotCi0gICAgcmV0dXJuIDA7CisgIHJlc3VsdC0+c2VnXzMyYml0ID0gMTsKKyAgcmVzdWx0LT5jb250ZW50cyA9IE1PRElGWV9MRFRfQ09OVEVOVFNfREFUQTsKKyAgcmVzdWx0LT5yZWFkX2V4ZWNfb25seSA9IDA7CisgIHJlc3VsdC0+bGltaXRfaW5fcGFnZXMgPSAxOworICByZXN1bHQtPnNlZ19ub3RfcHJlc2VudCA9IDA7CisgIHJlc3VsdC0+dXNlYWJsZSA9IDE7CiB9CiAKK19fTElCQ19ISURERU5fXyBpbnQgX19zZXRfdGxzKHZvaWQqIHB0cikgeworICBzdHJ1Y3QgdXNlcl9kZXNjIHRsc19kZXNjcmlwdG9yOworICBfX2luaXRfdXNlcl9kZXNjKCZ0bHNfZGVzY3JpcHRvciwgdHJ1ZSwgcHRyKTsKIAorICBpbnQgcmMgPSBfX3NldF90aHJlYWRfYXJlYSgmdGxzX2Rlc2NyaXB0b3IpOworICBpZiAocmMgIT0gLTEpIHsKKyAgICAvLyBDaGFuZ2UgJWdzIHRvIGJlIG5ldyBHRFQgZW50cnkuCisgICAgdWludDE2X3QgdGFibGVfaW5kaWNhdG9yID0gMDsgIC8vIEdEVAorICAgIHVpbnQxNl90IHJwbCA9IDM7ICAvLyBSZXF1ZXN0ZWQgcHJpdmlsZWdlIGxldmVsCisgICAgdWludDE2X3Qgc2VsZWN0b3IgPSAodGxzX2Rlc2NyaXB0b3IuZW50cnlfbnVtYmVyIDw8IDMpIHwgdGFibGVfaW5kaWNhdG9yIHwgcnBsOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtb3Z3ICV3MCwgJSVncyIgOiAvKm91dHB1dCovIDogInEiKHNlbGVjdG9yKSAvKmlucHV0Ki8gOiAvKmNsb2JiZXIqLyk7CisgIH0KIAorICByZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3N0YWNrX2Noa19mYWlsX2xvY2FsLmggYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3N0YWNrX2Noa19mYWlsX2xvY2FsLmgKaW5kZXggNGYzNjk5YS4uMGIwZmQ3ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19zdGFja19jaGtfZmFpbF9sb2NhbC5oCisrKyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19fc3RhY2tfY2hrX2ZhaWxfbG9jYWwuaApAQCAtMjYsNiArMjYsNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogCiAvKgogICAgX19zdGFja19jaGtfZmFpbCByb3V0aW5lIGlzIHJ1bnRpbWUgcGFydCBvZiBzdGFjayBwcm90ZWN0b3IgY29tcGlsZXIKQEAgLTQ4LDEzICs0OSw5IEBACiAqLwogCiAjaWZkZWYgX19pMzg2X18KLSNpZmRlZiBfX1BJQ19fCiBleHRlcm4gdm9pZCBfX3N0YWNrX2Noa19mYWlsKCk7CiAKLV9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQotdm9pZCBfX3N0YWNrX2Noa19mYWlsX2xvY2FsKCkKLXsKK19fTElCQ19ISURERU5fXyB2b2lkIF9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwoKSB7CiAgIF9fc3RhY2tfY2hrX2ZhaWwoKTsKIH0KICNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKaW5kZXggZTk0YWU5MC4uY2U4YzJlYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCisrKyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwpAQCAtMSw3ICsxLDcgQEAKICNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogLy8gdm9pZCBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKHZvaWQqIHN0YWNrQmFzZSwgc2l6ZV90IHN0YWNrU2l6ZSkKLUVOVFJZKF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24pCitFTlRSWV9QUklWQVRFKF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24pCiAgIC8vIFdlIGNhbiB0cmFzaCByZWdpc3RlcnMgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIG5ldmVyIHJldHVybnMuCiAgIG1vdiA0KCVlc3ApLCAlZWJ4ICAgICAgICAgICAgIC8vIHN0YWNrQmFzZQogICBtb3YgOCglZXNwKSwgJWVjeCAgICAgICAgICAgICAvLyBzdGFja1NpemUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19zZXRqbXAuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19zZXRqbXAuUwppbmRleCA5MjIxMTM4Li4wYjI1NmEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy9fc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX3NldGptcC5TCkBAIC0zMSw3ICszMSw3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogLyoKICAqIEMgbGlicmFyeSAtLSBfc2V0am1wLCBfbG9uZ2ptcApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvZnV0ZXhfeDg2LlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9mdXRleF94ODYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRkMmFkMC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy9mdXRleF94ODYuUworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotI2RlZmluZSBGVVRFWF9XQUlUIDAKLSNkZWZpbmUgRlVURVhfV0FLRSAxCi0KLS8vIGludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQpCi1FTlRSWShfX2Z1dGV4X3dhaXQpCi0gICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgbW92ICAgICAxMiglZXNwKSwgJWVieCAgICAgICAgICAgLyogZnR4ICovCi0gICAgbW92bCAgICAkRlVURVhfV0FJVCwgJWVjeAotICAgIG1vdiAgICAgMTYoJWVzcCksICVlZHggICAgICAgICAgIC8qIHZhbCAqLwotICAgIG1vdiAgICAgMjAoJWVzcCksICVlc2kgICAgICAgICAgIC8qIHRpbWVvdXQgKi8KLSAgICBtb3ZsICAgICRfX05SX2Z1dGV4LCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIHBvcGwgICAgJWVzaQotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKF9fZnV0ZXhfd2FpdCkKLQotLy8gaW50IF9fZnV0ZXhfd2FrZSh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBjb3VudCkKLUVOVFJZKF9fZnV0ZXhfd2FrZSkKLSAgICBwdXNobCAgICVlYngKLSAgICBtb3YgICAgIDgoJWVzcCksICVlYnggICAgICAgICAgICAvKiBmdHggKi8KLSAgICBtb3ZsICAgICRGVVRFWF9XQUtFLCAlZWN4Ci0gICAgbW92ICAgICAxMiglZXNwKSwgJWVkeCAgICAgICAgICAgLyogY291bnQgKi8KLSAgICBtb3ZsICAgICRfX05SX2Z1dGV4LCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKF9fZnV0ZXhfd2FrZSkKLQotLy8gaW50IF9fZnV0ZXhfc3lzY2FsbDModm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgb3AsIGludCBjb3VudCkKLUVOVFJZKF9fZnV0ZXhfc3lzY2FsbDMpCi0gICAgcHVzaGwgICAlZWJ4Ci0gICAgbW92bCAgICA4KCVlc3ApLCAlZWJ4ICAgICAgLyogZnR4ICovCi0gICAgbW92bCAgICAxMiglZXNwKSwgJWVjeCAgICAgIC8qIG9wICovCi0gICAgbW92bCAgICAxNiglZXNwKSwgJWVkeCAgICAgIC8qIHZhbHVlICovCi0gICAgbW92bCAgICAkX19OUl9mdXRleCwgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChfX2Z1dGV4X3N5c2NhbGwzKQotCi0vLyBpbnQgX19mdXRleF9zeXNjYWxsNCh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBvcCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KQotRU5UUlkoX19mdXRleF9zeXNjYWxsNCkKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlc2kKLSAgICBtb3ZsICAgIDEyKCVlc3ApLCAlZWJ4ICAgICAgLyogZnR4ICovCi0gICAgbW92bCAgICAxNiglZXNwKSwgJWVjeCAgICAgIC8qIG9wICovCi0gICAgbW92bCAgICAyMCglZXNwKSwgJWVkeCAgICAgIC8qIHZhbCAqLwotICAgIG1vdmwgICAgMjQoJWVzcCksICVlc2kgICAgICAvKiB0aW1lb3V0ICovCi0gICAgbW92bCAgICAkX19OUl9mdXRleCwgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBwb3BsICAgICVlc2kKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChfX2Z1dGV4X3N5c2NhbGw0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvbGliZ2NjX2NvbXBhdC5jIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvbGliZ2NjX2NvbXBhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MjMyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9saWJnY2NfY29tcGF0LmMKQEAgLTAsMCArMSwxNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbmxpYmdjY19jb21wYXQucHkgKi8KKworZXh0ZXJuIGNoYXIgX19kaXZkaTM7CitleHRlcm4gY2hhciBfX21vZGRpMzsKK2V4dGVybiBjaGFyIF9fcG9wY291bnRzaTI7CitleHRlcm4gY2hhciBfX3VkaXZkaTM7CitleHRlcm4gY2hhciBfX3Vtb2RkaTM7CisKK3ZvaWQqIF9fYmlvbmljX2xpYmdjY19jb21wYXRfc3ltYm9sc1tdID0geworICAgICZfX2RpdmRpMywKKyAgICAmX19tb2RkaTMsCisgICAgJl9fcG9wY291bnRzaTIsCisgICAgJl9fdWRpdmRpMywKKyAgICAmX191bW9kZGkzLAorfTsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL3NldGptcC5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2V0am1wLlMKaW5kZXggYzBkZjY0Ny4uOGY5ZDY3YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2V0am1wLlMKQEAgLTMxLDcgKzMxLDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiAvKgogICogQyBsaWJyYXJ5IC0tIHNldGptcCwgbG9uZ2ptcApAQCAtNDYsMTEgKzQ2LDcgQEAKIEVOVFJZKHNldGptcCkKIAlQSUNfUFJPTE9HVUUKIAlwdXNobAkkMAotI2lmZGVmIFBJQwotCWNhbGwJUElDX1BMVChfQ19MQUJFTChzaWdibG9jaykpCi0jZWxzZQotCWNhbGwJX0NfTEFCRUwoc2lnYmxvY2spCi0jZW5kaWYKKwljYWxsCVBJQ19QTFQoc2lnYmxvY2spCiAJYWRkbAkkNCwlZXNwCiAJUElDX0VQSUxPR1VFCiAKQEAgLTcxLDExICs2Nyw3IEBACiAJbW92bAk0KCVlc3ApLCVlZHgKIAlQSUNfUFJPTE9HVUUKIAlwdXNobAkyNCglZWR4KQotI2lmZGVmIFBJQwotCWNhbGwJUElDX1BMVChfQ19MQUJFTChzaWdzZXRtYXNrKSkKLSNlbHNlCi0JY2FsbAlfQ19MQUJFTChzaWdzZXRtYXNrKQotI2VuZGlmCisJY2FsbAlQSUNfUExUKHNpZ3NldG1hc2spCiAJYWRkbAkkNCwlZXNwCiAJUElDX0VQSUxPR1VFCiAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL3NpZ3NldGptcC5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2lnc2V0am1wLlMKaW5kZXggNzBjYzZkYi4uMjUwYzYwNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2lnc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2lnc2V0am1wLlMKQEAgLTMxLDcgKzMxLDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShzaWdzZXRqbXApCiAJbW92bAk0KCVlc3ApLCVlY3gKQEAgLTQyLDExICs0Miw3IEBACiAKIAlQSUNfUFJPTE9HVUUKIAlwdXNobAkkMAotI2lmZGVmIFBJQwotCWNhbGwJUElDX1BMVChfQ19MQUJFTChzaWdibG9jaykpCi0jZWxzZQotCWNhbGwJX0NfTEFCRUwoc2lnYmxvY2spCi0jZW5kaWYKKwljYWxsCVBJQ19QTFQoc2lnYmxvY2spCiAJYWRkbAkkNCwlZXNwCiAJUElDX0VQSUxPR1VFCiAKQEAgLTcwLDExICs2Niw3IEBACiAKIAlQSUNfUFJPTE9HVUUKIAlwdXNobAkyNCglZWR4KQotI2lmZGVmIFBJQwotCWNhbGwJUElDX1BMVChfQ19MQUJFTChzaWdzZXRtYXNrKSkKLSNlbHNlCi0JY2FsbAlfQ19MQUJFTChzaWdzZXRtYXNrKQotI2VuZGlmCisJY2FsbAlQSUNfUExUKHNpZ3NldG1hc2spCiAJYWRkbAkkNCwlZXNwCiAJUElDX0VQSUxPR1VFCiAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL3N5c2NhbGwuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL3N5c2NhbGwuUwppbmRleCAwMTc4ZjQxLi5mODVlYzM5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy9zeXNjYWxsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc3lzY2FsbC5TCkBAIC0zOCw5ICszOCw4IEBACiAgICAgIyBZZXMsIHNvIHNldCBlcnJuby4KICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICAjIFJlc3RvcmUgdGhlIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KICAgICBwb3AgICAgJWVicApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvdmZvcmsuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL3Zmb3JrLlMKaW5kZXggZWM2ZjZjYS4uNmMwMjkxMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvdmZvcmsuUworKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy92Zm9yay5TCkBAIC0zOCw4ICszOCw3IEBACiAgIGpiICAgICAgMWYKICAgbmVnbCAgICAlZWF4CiAgIHB1c2hsICAgJWVheAotICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gIG9ybCAgICAgJC0xLCAlZWF4CisgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6Ci0gICAgam1wICAgICAqJWVjeCAgLy8gSnVtcCB0byB0aGUgc3RvcmVkIHJldHVybiBhZGRyZXNzLgorICBqbXAgICAgIColZWN4ICAvLyBKdW1wIHRvIHRoZSBzdG9yZWQgcmV0dXJuIGFkZHJlc3MuCiBFTkQodmZvcmspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2dlbmVyaWMvZ2VuZXJpYy5tayBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9nZW5lcmljLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZWU1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2dlbmVyaWMvZ2VuZXJpYy5tawpAQCAtMCwwICsxLDUyIEBACitsaWJjX2Jpb25pY19zcmNfZmlsZXNfeDg2ICs9IFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbWNoci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItbWVtcmNoci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3RyY2hyLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJubGVuLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1zdHJyY2hyLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NjaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc3JjaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc2xlbi1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzY21wLWF0b20uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1iY29weS1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1iemVyby1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1tZW1jcHktc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItbWVtbW92ZS1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1tZW1zZXQtc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RwY3B5LXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cG5jcHktc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RyY3B5LXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cmxlbi1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHJuY3B5LXNsbS5TCisKK2lmZXEgKCQoQVJDSF9YODZfSEFWRV9TU1NFMyksdHJ1ZSkKK2xpYmNfYmlvbmljX3NyY19maWxlc194ODYgKz0gXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jYXQtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJsY2F0LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybGNweS1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmNtcC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jbXAtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJjYXQtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13Y3NjYXQtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13Y3NjcHktYXRvbS5TCitlbHNlCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfeDg2ICs9IFwKKyAgICBhcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJjbXAuUyBcCisgICAgYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvc3RybmNtcC5TIFwKKyAgICBhcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJjYXQuUyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NhdC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsY2F0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxjcHkuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmNhdC5jCitlbmRpZgorCitpZmVxICgkKEFSQ0hfWDg2X0hBVkVfU1NFNCksdHJ1ZSkKKyBsaWJjX2Jpb25pY19zcmNfZmlsZXNfeDg2ICs9IFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2U0LW1lbWNtcC1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlNC13bWVtY21wLXNsbS5TCitlbHNlCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfeDg2ICs9IFwKKyAgICBhcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9tZW1jbXAuUyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbWNtcC5jCitlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9iY29weS5TIGIvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9iY29weS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MjVjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2dlbmVyaWMvc3RyaW5nL2Jjb3B5LlMKQEAgLTAsMCArMSw5OCBAQAorLyoJJE9wZW5CU0Q6IGJjb3B5LlMsdiAxLjUgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIGxvY29yZS5zLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKwkvKgorCSAqIChvdiliY29weSAoc3JjLGRzdCxjbnQpCisJICogIHdzQHRvb2xzLmRlICAgICAoV29sZmdhbmcgU29sZnJhbmssIFRvb0xzIEdtYkgpICs0OS0yMjgtOTg1ODAwCisJICovCisKKyNpZiBkZWZpbmVkKE1FTUNPUFkpCitFTlRSWShtZW1jcHkpCisjZWxpZiBkZWZpbmVkKE1FTU1PVkUpCitFTlRSWShtZW1tb3ZlKQorI2Vsc2UKK0VOVFJZKGJjb3B5KQorI2VuZGlmCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlZGkKKyNpZiBkZWZpbmVkKE1FTUNPUFkpIHx8IGRlZmluZWQoTUVNTU9WRSkKKwltb3ZsCTEyKCVlc3ApLCVlZGkKKwltb3ZsCTE2KCVlc3ApLCVlc2kKKwltb3ZsCSVlZGksICVlYXgKKyNlbHNlCisJbW92bAkxMiglZXNwKSwlZXNpCisJbW92bAkxNiglZXNwKSwlZWRpCisjZW5kaWYKKwltb3ZsCTIwKCVlc3ApLCVlY3gKKwltb3ZsCSVlY3gsJWVkeAorCWNtcGwJJWVzaSwlZWRpCS8qIHBvdGVudGlhbGx5IG92ZXJsYXBwaW5nPyAqLworCWpuYgkxZgorCWNsZAkJCS8qIG5vcGUsIGNvcHkgZm9yd2FyZHMuICovCisJc2hybAkkMiwlZWN4CQkvKiBjb3B5IGJ5IHdvcmRzICovCisJcmVwCisJbW92c2wKKwltb3ZsCSVlZHgsJWVjeAorCWFuZGwJJDMsJWVjeAkJLyogYW55IGJ5dGVzIGxlZnQ/ICovCisJcmVwCisJbW92c2IKKwlwb3BsCSVlZGkKKwlwb3BsCSVlc2kKKwlyZXQKKzE6CisJYWRkbAklZWN4LCVlZGkJLyogY29weSBiYWNrd2FyZHMuICovCisJYWRkbAklZWN4LCVlc2kKKwlzdGQKKwlhbmRsCSQzLCVlY3gJCS8qIGFueSBmcmFjdGlvbmFsIGJ5dGVzPyAqLworCWRlY2wJJWVkaQorCWRlY2wJJWVzaQorCXJlcAorCW1vdnNiCisJbW92bAklZWR4LCVlY3gKKwlzaHJsCSQyLCVlY3gKKwlzdWJsCSQzLCVlc2kKKwlzdWJsCSQzLCVlZGkKKwlyZXAKKwltb3ZzbAorCXBvcGwJJWVkaQorCXBvcGwJJWVzaQorCWNsZAorCXJldAorI2lmIGRlZmluZWQoTUVNQ09QWSkKK0VORChtZW1jcHkpCisjZWxpZiBkZWZpbmVkKE1FTU1PVkUpCitFTkQobWVtbW92ZSkKKyNlbHNlCitFTkQoYmNvcHkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvbWVtY21wLlMgYi9saWJjL2FyY2gteDg2L2dlbmVyaWMvc3RyaW5nL21lbWNtcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzZiNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2dlbmVyaWMvc3RyaW5nL21lbWNtcC5TCkBAIC0wLDAgKzEsNDQgQEAKKy8qCSRPcGVuQlNEOiBtZW1jbXAuUyx2IDEuNCAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShtZW1jbXApCisJcHVzaGwJJWVkaQorCXB1c2hsCSVlc2kKKwltb3ZsCTEyKCVlc3ApLCVlZGkKKwltb3ZsCTE2KCVlc3ApLCVlc2kKKwljbGQJCQkJLyogc2V0IGNvbXBhcmUgZGlyZWN0aW9uIGZvcndhcmQgKi8KKworCW1vdmwJMjAoJWVzcCksJWVjeAkJLyogY29tcGFyZSBieSB3b3JkcyAqLworCXNocmwJJDIsJWVjeAorCXJlcGUKKwljbXBzbAorCWpuZQlMNQkJCS8qIGRvIHdlIG1hdGNoIHNvIGZhcj8gKi8KKworCW1vdmwJMjAoJWVzcCksJWVjeAkJLyogY29tcGFyZSByZW1haW5kZXIgYnkgYnl0ZXMgKi8KKwlhbmRsCSQzLCVlY3gKKwlyZXBlCisJY21wc2IKKwlqbmUJTDYJCQkvKiBkbyB3ZSBtYXRjaD8gKi8KKworCXhvcmwJJWVheCwlZWF4CQkvKiB3ZSBtYXRjaCwgcmV0dXJuIHplcm8JKi8KKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKworTDU6CW1vdmwJJDQsJWVjeAkJCS8qIFdlIGtub3cgdGhhdCBvbmUgb2YgdGhlIG5leHQJKi8KKwlzdWJsCSVlY3gsJWVkaQkJLyogZm91ciBwYWlycyBvZiBieXRlcyBkbyBub3QJKi8KKwlzdWJsCSVlY3gsJWVzaQkJLyogbWF0Y2guCQkJKi8KKwlyZXBlCisJY21wc2IKK0w2Ogltb3Z6YmwgIC0xKCVlZGkpLCVlYXgJCS8qIFBlcmZvcm0gdW5zaWduZWQgY29tcGFyaXNvbgkqLworCW1vdnpibAktMSglZXNpKSwlZWR4CisJc3VibAklZWR4LCVlYXgKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKK0VORChtZW1jbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1jcHkuUyBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvbWVtY3B5LlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNweS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2dlbmVyaWMvc3RyaW5nL21lbWNweS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1tb3ZlLlMgYi9saWJjL2FyY2gteDg2L2dlbmVyaWMvc3RyaW5nL21lbW1vdmUuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtbW92ZS5TCnJlbmFtZSB0byBsaWJjL2FyY2gteDg2L2dlbmVyaWMvc3RyaW5nL21lbW1vdmUuUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJjYXQuUyBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvc3RyY2F0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllOGVlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvc3RyY2F0LlMKQEAgLTAsMCArMSw3NCBAQAorLyoJJE9wZW5CU0Q6IHN0cmNhdC5TLHYgMS44IDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKyNpZiBkZWZpbmVkKEFQSVdBUk4pCisjQVBQCisJLnNlY3Rpb24gLmdudS53YXJuaW5nLnN0cmNhdAorCS5hc2NpaSAid2FybmluZzogc3RyY2F0KCkgaXMgYWxtb3N0IGFsd2F5cyBtaXN1c2VkLCBwbGVhc2UgdXNlIHN0cmxjYXQoKSIKKyNOT19BUFAKKyNlbmRpZgorCisvKgorICogTk9URTogSSd2ZSB1bnJvbGxlZCB0aGUgbG9vcCBlaWdodCB0aW1lczogbGFyZ2UgZW5vdWdoIHRvIG1ha2UgYQorICogc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSwgYW5kIHNtYWxsIGVub3VnaCBub3QgdG8gdG90YWxseSB0cmFzaCB0aGUKKyAqIGNhY2hlLgorICovCisKK0VOVFJZKHN0cmNhdCkKKwlwdXNobAklZWRpCQkJLyogc2F2ZSBlZGkgKi8KKwltb3ZsCTgoJWVzcCksJWVkaQkJLyogZHN0IGFkZHJlc3MgKi8KKwltb3ZsCTEyKCVlc3ApLCVlZHgJCS8qIHNyYyBhZGRyZXNzICovCisJcHVzaGwJJWVkaQkJCS8qIHB1c2ggZGVzdGluYXRpb24gYWRkcmVzcyAqLworCisJY2xkCQkJCS8qIHNldCBzZWFyY2ggZm9yd2FyZCAqLworCXhvcmwJJWVheCwlZWF4CQkvKiBzZXQgc2VhcmNoIGZvciBudWxsIHRlcm1pbmF0b3IgKi8KKwltb3ZsCSQtMSwlZWN4CQkvKiBzZXQgc2VhcmNoIGZvciBsb3RzIG9mIGNoYXJhY3RlcnMgKi8KKwlyZXBuZQkJCQkvKiBzZWFyY2ghICovCisJc2Nhc2IKKworCWxlYWwJLTEoJWVkaSksJWVjeAkJLyogY29ycmVjdCBkc3QgYWRkcmVzcyAqLworCisJLmFsaWduIDIsMHg5MAorTDE6CW1vdmIJKCVlZHgpLCVhbAkJLyogdW5yb2xsIGxvb3AsIGJ1dCBub3QgdG9vIG11Y2ggKi8KKwltb3ZiCSVhbCwoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTEoJWVkeCksJWFsCisJbW92YgklYWwsMSglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJMiglZWR4KSwlYWwKKwltb3ZiCSVhbCwyKCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92YgkzKCVlZHgpLCVhbAorCW1vdmIJJWFsLDMoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTQoJWVkeCksJWFsCisJbW92YgklYWwsNCglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJNSglZWR4KSwlYWwKKwltb3ZiCSVhbCw1KCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92Ygk2KCVlZHgpLCVhbAorCW1vdmIJJWFsLDYoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTcoJWVkeCksJWFsCisJbW92YgklYWwsNyglZWN4KQorCWFkZGwJJDgsJWVkeAorCWFkZGwJJDgsJWVjeAorCXRlc3RiCSVhbCwlYWwKKwlqbnoJTDEKK0wyOglwb3BsCSVlYXgJCQkvKiBwb3AgZGVzdGluYXRpb24gYWRkcmVzcyAqLworCXBvcGwJJWVkaQkJCS8qIHJlc3RvcmUgZWRpICovCisJcmV0CitFTkQoc3RyY2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJjbXAuUyBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvc3RyY21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwZjRkNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvc3RyY21wLlMKQEAgLTAsMCArMSw4MiBAQAorLyoJJE9wZW5CU0Q6IHN0cmNtcC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qCisgKiBOT1RFOiBJJ3ZlIHVucm9sbGVkIHRoZSBsb29wIGVpZ2h0IHRpbWVzOiBsYXJnZSBlbm91Z2ggdG8gbWFrZSBhCisgKiBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBhbmQgc21hbGwgZW5vdWdoIG5vdCB0byB0b3RhbGx5IHRyYXNoIHRoZQorICogY2FjaGUuCisgKi8KKworRU5UUlkoc3RyY21wKQorCW1vdmwJMHgwNCglZXNwKSwlZWF4CisJbW92bAkweDA4KCVlc3ApLCVlZHgKKwlqbXAJTDIJCQkvKiBKdW1wIGludG8gdGhlIGxvb3AhICovCisKKwkuYWxpZ24JMiwweDkwCitMMToJaW5jbAklZWF4CisJaW5jbAklZWR4CitMMjoJbW92YgkoJWVheCksJWNsCisJdGVzdGIJJWNsLCVjbAkJCS8qIG51bGwgdGVybWluYXRvcj8/PyAqLworCWp6CUwzCisJY21wYgklY2wsKCVlZHgpCQkvKiBjaGFycyBtYXRjaD8/PyAqLworCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWplCUwxCisJLmFsaWduIDIsIDB4OTAKK0wzOgltb3Z6YmwJKCVlYXgpLCVlYXgJCS8qIHVuc2lnbmVkIGNvbXBhcmlzb24gKi8KKwltb3Z6YmwJKCVlZHgpLCVlZHgKKwlzdWJsCSVlZHgsJWVheAorCXJldAorRU5EKHN0cmNtcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvc3RybmNtcC5TIGIvbGliYy9hcmNoLXg4Ni9nZW5lcmljL3N0cmluZy9zdHJuY21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhODNhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvZ2VuZXJpYy9zdHJpbmcvc3RybmNtcC5TCkBAIC0wLDAgKzEsMTE0IEBACisvKgkkT3BlbkJTRDogc3RybmNtcC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKy8qCisgKiBOT1RFOiBJJ3ZlIHVucm9sbGVkIHRoZSBsb29wIGVpZ2h0IHRpbWVzOiBsYXJnZSBlbm91Z2ggdG8gbWFrZSBhCisgKiBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBhbmQgc21hbGwgZW5vdWdoIG5vdCB0byB0b3RhbGx5IHRyYXNoIHRoZQorICogY2FjaGUuCisgKi8KKworRU5UUlkoc3RybmNtcCkKKwlwdXNobAklZWJ4CisJbW92bAk4KCVlc3ApLCVlYXgKKwltb3ZsCTEyKCVlc3ApLCVlY3gKKwltb3ZsCTE2KCVlc3ApLCVlZHgKKwl0ZXN0bAklZWR4LCVlZHgKKwlqbXAJTDIJCQkvKiBKdW1wIGludG8gdGhlIGxvb3AhICovCisKKwkuYWxpZ24gMiwweDkwCitMMToJaW5jbAklZWF4CisJaW5jbAklZWN4CisJZGVjbAklZWR4CitMMjoJanoJTDQJCQkvKiBzdHJpbmdzIGFyZSBlcXVhbCAqLworCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWpuZQlMMworCisJaW5jbAklZWF4CisJaW5jbAklZWN4CisJZGVjbAklZWR4CisJanoJTDQKKwltb3ZiCSglZWF4KSwlYmwKKwl0ZXN0YgklYmwsJWJsCisJanoJTDMKKwljbXBiCSVibCwoJWVjeCkKKwlqbmUJTDMKKworCWluY2wJJWVheAorCWluY2wJJWVjeAorCWRlY2wJJWVkeAorCWp6CUw0CisJbW92YgkoJWVheCksJWJsCisJdGVzdGIJJWJsLCVibAorCWp6CUwzCisJY21wYgklYmwsKCVlY3gpCisJam5lCUwzCisKKwlpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKKwlqeglMNAorCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWpuZQlMMworCisJaW5jbAklZWF4CisJaW5jbAklZWN4CisJZGVjbAklZWR4CisJanoJTDQKKwltb3ZiCSglZWF4KSwlYmwKKwl0ZXN0YgklYmwsJWJsCisJanoJTDMKKwljbXBiCSVibCwoJWVjeCkKKwlqbmUJTDMKKworCWluY2wJJWVheAorCWluY2wJJWVjeAorCWRlY2wJJWVkeAorCWp6CUw0CisJbW92YgkoJWVheCksJWJsCisJdGVzdGIJJWJsLCVibAorCWp6CUwzCisJY21wYgklYmwsKCVlY3gpCisJam5lCUwzCisKKwlpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKKwlqeglMNAorCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWpuZQlMMworCisJaW5jbAklZWF4CisJaW5jbAklZWN4CisJZGVjbAklZWR4CisJanoJTDQKKwltb3ZiCSglZWF4KSwlYmwKKwl0ZXN0YgklYmwsJWJsCisJanoJTDMKKwljbXBiCSVibCwoJWVjeCkKKwlqZQlMMQorCisJLmFsaWduIDIsMHg5MAorTDM6CW1vdnpibAkoJWVheCksJWVheAkJLyogdW5zaWduZWQgY29tcGFyaXNpb24gKi8KKwltb3Z6YmwJKCVlY3gpLCVlY3gKKwlzdWJsCSVlY3gsJWVheAorCXBvcGwJJWVieAorCXJldAorCS5hbGlnbiAyLDB4OTAKK0w0Ogl4b3JsCSVlYXgsJWVheAorCXBvcGwJJWVieAorCXJldAorRU5EKHN0cm5jbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODA2Zjc4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBfdHlwZXMuaCx2IDEuMiAyMDA2LzAxLzEzIDE3OjUwOjA2IG1pbGxlcnQgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpdHlwZXMuaAk4LjMgKEJlcmtlbGV5KSAxLzUvOTQKLSAqCUAoIylhbnNpLmgJOC4yIChCZXJrZWxleSkgMS80Lzk0Ci0gKi8KLQotI2lmbmRlZiBfSTM4Nl9fVFlQRVNfSF8KLSNkZWZpbmUgX0kzODZfX1RZUEVTX0hfCi0KLS8qIDcuMTguMS4xIEV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19zaWduZWQgY2hhcgkJX19pbnQ4X3Q7Ci10eXBlZGVmCXVuc2lnbmVkIGNoYXIJCV9fdWludDhfdDsKLXR5cGVkZWYJc2hvcnQJCQlfX2ludDE2X3Q7Ci10eXBlZGVmCXVuc2lnbmVkIHNob3J0CQlfX3VpbnQxNl90OwotdHlwZWRlZglpbnQJCQlfX2ludDMyX3Q7Ci10eXBlZGVmCXVuc2lnbmVkIGludAkJX191aW50MzJfdDsKLS8qIExPTkdMT05HICovCi10eXBlZGVmCWxvbmcgbG9uZwkJX19pbnQ2NF90OwotLyogTE9OR0xPTkcgKi8KLXR5cGVkZWYJdW5zaWduZWQgbG9uZyBsb25nCV9fdWludDY0X3Q7Ci0KLS8qIDcuMTguMS4yIE1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX2ludDhfdAkJX19pbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmCV9fdWludDhfdAkJX191aW50X2xlYXN0OF90OwotdHlwZWRlZglfX2ludDE2X3QJCV9faW50X2xlYXN0MTZfdDsKLXR5cGVkZWYJX191aW50MTZfdAkJX191aW50X2xlYXN0MTZfdDsKLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9sZWFzdDMyX3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9sZWFzdDMyX3Q7Ci10eXBlZGVmCV9faW50NjRfdAkJX19pbnRfbGVhc3Q2NF90OwotdHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRfbGVhc3Q2NF90OwotCi0vKiA3LjE4LjEuMyBGYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3Q4X3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0OF90OwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3QxNl90OwotdHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDE2X3Q7Ci10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDMyX3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0MzJfdDsKLXR5cGVkZWYJX19pbnQ2NF90CQlfX2ludF9mYXN0NjRfdDsKLXR5cGVkZWYJX191aW50NjRfdAkJX191aW50X2Zhc3Q2NF90OwotCi0vKiA3LjE4LjEuNCBJbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMgKi8KLXR5cGVkZWYJaW50IAkJCV9faW50cHRyX3Q7Ci10eXBlZGVmCXVuc2lnbmVkIGludCAJX191aW50cHRyX3Q7Ci0KLS8qIDcuMTguMS41IEdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KLXR5cGVkZWYJX19pbnQ2NF90CQlfX2ludG1heF90OwotdHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRtYXhfdDsKLQotLyogUmVnaXN0ZXIgc2l6ZSAqLwotdHlwZWRlZiBfX2ludDMyX3QJCV9fcmVnaXN0ZXJfdDsKLQotLyogVk0gc3lzdGVtIHR5cGVzICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fdmFkZHJfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJX19wYWRkcl90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3ZzaXplX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fcHNpemVfdDsKLQotLyogU3RhbmRhcmQgc3lzdGVtIHR5cGVzICovCi10eXBlZGVmIGludAkJCV9fY2xvY2tfdDsKLXR5cGVkZWYgaW50CQkJX19jbG9ja2lkX3Q7Ci10eXBlZGVmIGRvdWJsZQkJCV9fZG91YmxlX3Q7Ci10eXBlZGVmIGZsb2F0CQkJX19mbG9hdF90OwotdHlwZWRlZiBsb25nCQkJX19wdHJkaWZmX3Q7Ci10eXBlZGVmCWludAkJCV9fdGltZV90OwotdHlwZWRlZiBpbnQJCQlfX3RpbWVyX3Q7Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwotdHlwZWRlZglfX2J1aWx0aW5fdmFfbGlzdAlfX3ZhX2xpc3Q7Ci0jZWxzZQotdHlwZWRlZgljaGFyICoJCQlfX3ZhX2xpc3Q7Ci0jZW5kaWYKLQotLyogV2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCB0eXBlcyAqLwotI2lmbmRlZiBfX2NwbHVzcGx1cwotdHlwZWRlZglpbnQJCQlfX3djaGFyX3Q7Ci0jZW5kaWYKLXR5cGVkZWYgaW50CQkJX193aW50X3Q7Ci10eXBlZGVmCWludAkJCV9fcnVuZV90OwotdHlwZWRlZgl2b2lkICoJCQlfX3djdHJhbnNfdDsKLXR5cGVkZWYJdm9pZCAqCQkJX193Y3R5cGVfdDsKLQotLyogRmVhdHVyZSB0ZXN0IG1hY3JvcyAqLwotI2RlZmluZSBfX0hBVkVfQ1BVSU5GTwotI2RlZmluZSBfX0hBVkVfTVVURVgKLQotI2VuZGlmCS8qIF9JMzg2X19UWVBFU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvYXNtLmggYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9hc20uaAppbmRleCA1Y2NmNzhmLi42NzI0OTNkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9hc20uaAorKysgYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9hc20uaApAQCAtMzcsNTAgKzM3LDE3IEBACiAjaWZuZGVmIF9JMzg2X0FTTV9IXwogI2RlZmluZSBfSTM4Nl9BU01fSF8KIAotI2lmZGVmIF9LRVJORUxfT1BUCi0jaW5jbHVkZSAib3B0X211bHRpcHJvY2Vzc29yLmgiCi0jZW5kaWYKLQotI2lmZGVmIFBJQwogI2RlZmluZSBQSUNfUFJPTE9HVUUJXAogCXB1c2hsCSVlYng7CVwKLQljYWxsCTFmOwlcCi0xOgkJCVwKKwljYWxsCTY2NmY7CVwKKzY2NjoJCQlcCiAJcG9wbAklZWJ4OwlcCi0JYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLTFiXSwgJWVieAorCWFkZGwJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi02NjZiXSwgJWVieAogI2RlZmluZSBQSUNfRVBJTE9HVUUJXAogCXBvcGwJJWVieAogI2RlZmluZSBQSUNfUExUKHgpCXhAUExUCiAjZGVmaW5lIFBJQ19HT1QoeCkJeEBHT1QoJWVieCkKICNkZWZpbmUgUElDX0dPVE9GRih4KQl4QEdPVE9GRiglZWJ4KQotI2Vsc2UKLSNkZWZpbmUgUElDX1BST0xPR1VFCi0jZGVmaW5lIFBJQ19FUElMT0dVRQotI2RlZmluZSBQSUNfUExUKHgpCXgKLSNkZWZpbmUgUElDX0dPVCh4KQl4Ci0jZGVmaW5lIFBJQ19HT1RPRkYoeCkJeAotI2VuZGlmCi0KLSNpZmRlZiBfX0VMRl9fCi0jIGRlZmluZSBfQ19MQUJFTCh4KQl4Ci0jZWxzZQotIyBpZmRlZiBfX1NURENfXwotIyAgZGVmaW5lIF9DX0xBQkVMKHgpCV8gIyMgeAotIyBlbHNlCi0jICBkZWZpbmUgX0NfTEFCRUwoeCkJXy8qKi94Ci0jIGVuZGlmCi0jZW5kaWYKLSNkZWZpbmUJX0FTTV9MQUJFTCh4KQl4Ci0KLSNkZWZpbmUgQ1ZBUk9GRih4LCB5KQkJX0NfTEFCRUwoeCkgKyB5Ci0KLSNpZmRlZiBfX1NURENfXwotIyBkZWZpbmUgX19DT05DQVQoeCx5KQl4ICMjIHkKLSMgZGVmaW5lIF9fU1RSSU5HKHgpCSN4Ci0jZWxzZQotIyBkZWZpbmUgX19DT05DQVQoeCx5KQl4LyoqL3kKLSMgZGVmaW5lIF9fU1RSSU5HKHgpCSJ4IgotI2VuZGlmCiAKIC8qIGxldCBrZXJuZWxzIGFuZCBvdGhlcnMgb3ZlcnJpZGUgZW50cnlwb2ludCBhbGlnbm1lbnQgKi8KICNpZiAhZGVmaW5lZChfQUxJR05fVEVYVCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKQEAgLTkzLDEyNiArNjAsNCBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNkZWZpbmUgX0VOVFJZKHgpIFwKLQkudGV4dDsgX0FMSUdOX1RFWFQ7IC5nbG9ibCB4OyAudHlwZSB4LEBmdW5jdGlvbjsgeDogLmNmaV9zdGFydHByb2M7Ci0jZGVmaW5lIF9MQUJFTCh4KSBcCi0JLmdsb2JsIHg7IHg6Ci0KLSNpZmRlZiBfS0VSTkVMCi0KLSNkZWZpbmUgQ1BVVkFSKG9mZikgJWZzOl9fQ09OQ0FUKENQVV9JTkZPXyxvZmYpCi0KLS8qIFhYWCBDYW4ndCB1c2UgX19DT05DQVQoKSBoZXJlLCBhcyBpdCB3b3VsZCBiZSBldmFsdWF0ZWQgaW5jb3JyZWN0bHkuICovCi0jaWZkZWYgX19FTEZfXwotI2lmZGVmIF9fU1REQ19fCi0jZGVmaW5lCUlEVFZFQyhuYW1lKSBcCi0JQUxJR05fVEVYVDsgLmdsb2JsIFggIyMgbmFtZTsgLnR5cGUgWCAjIyBuYW1lLEBmdW5jdGlvbjsgWCAjIyBuYW1lOgotI2RlZmluZQlJRFRWRUNfRU5EKG5hbWUpIFwKLQkuc2l6ZSBYICMjIG5hbWUsIC4gLSBYICMjIG5hbWUKLSNlbHNlIAotI2RlZmluZQlJRFRWRUMobmFtZSkgXAotCUFMSUdOX1RFWFQ7IC5nbG9ibCBYLyoqL25hbWU7IC50eXBlIFgvKiovbmFtZSxAZnVuY3Rpb247IFgvKiovbmFtZToKLSNkZWZpbmUJSURUVkVDX0VORChuYW1lKSBcCi0JLnNpemUgWC8qKi9uYW1lLCAuIC0gWC8qKi9uYW1lCi0jZW5kaWYgLyogX19TVERDX18gKi8gCi0jZWxzZSAKLSNpZmRlZiBfX1NURENfXwotI2RlZmluZQlJRFRWRUMobmFtZSkgXAotCUFMSUdOX1RFWFQ7IC5nbG9ibCBfWCAjIyBuYW1lOyAudHlwZSBfWCAjIyBuYW1lLEBmdW5jdGlvbjsgX1ggIyMgbmFtZTogCi0jZGVmaW5lCUlEVFZFQ19FTkQobmFtZSkgXAotCS5zaXplIF9YICMjIG5hbWUsIC4gLSBfWCAjIyBuYW1lCi0jZWxzZQotI2RlZmluZQlJRFRWRUMobmFtZSkgXAotCUFMSUdOX1RFWFQ7IC5nbG9ibCBfWC8qKi9uYW1lOyAudHlwZSBfWC8qKi9uYW1lLEBmdW5jdGlvbjsgX1gvKiovbmFtZToKLSNkZWZpbmUJSURUVkVDX0VORChuYW1lKSBcCi0JLnNpemUgX1gvKiovbmFtZSwgLiAtIF9YLyoqL25hbWUKLSNlbmRpZiAvKiBfX1NURENfXyAqLwotI2VuZGlmIC8qIF9fRUxGX18gKi8KLQotI2lmZGVmIF9TVEFOREFMT05FCi0jZGVmaW5lIEFMSUdOX0RBVEEJLmFsaWduCTQKLSNkZWZpbmUgQUxJR05fVEVYVAkuYWxpZ24JNAkvKiA0LWJ5dGUgYm91bmRhcmllcyAqLwotI2RlZmluZSBTVVBFUkFMSUdOX1RFWFQJLmFsaWduCTE2CS8qIDE1LWJ5dGUgYm91bmRhcmllcyAqLwotI2VsaWYgZGVmaW5lZCBfX0VMRl9fCi0jZGVmaW5lIEFMSUdOX0RBVEEJLmFsaWduCTQKLSNkZWZpbmUgQUxJR05fVEVYVAkuYWxpZ24JMTYJLyogMTYtYnl0ZSBib3VuZGFyaWVzICovCi0jZGVmaW5lIFNVUEVSQUxJR05fVEVYVAkuYWxpZ24JMTYJLyogMTYtYnl0ZSBib3VuZGFyaWVzICovCi0jZWxzZQotI2RlZmluZSBBTElHTl9EQVRBCS5hbGlnbgkyCi0jZGVmaW5lIEFMSUdOX1RFWFQJLmFsaWduCTQJLyogMTYtYnl0ZSBib3VuZGFyaWVzICovCi0jZGVmaW5lIFNVUEVSQUxJR05fVEVYVAkuYWxpZ24JNAkvKiAxNi1ieXRlIGJvdW5kYXJpZXMgKi8KLSNlbmRpZiAvKiBfX0VMRl9fICovCi0KLSNkZWZpbmUgX0FMSUdOX1RFWFQgQUxJR05fVEVYVAotCi0jaWZkZWYgR1BST0YKLSNpZmRlZiBfX0VMRl9fCi0jZGVmaW5lCU1DT1VOVF9BU00JY2FsbAlfQ19MQUJFTChfX21jb3VudCkKLSNlbHNlIC8qIF9fRUxGX18gKi8KLSNkZWZpbmUJTUNPVU5UX0FTTQljYWxsCV9DX0xBQkVMKG1jb3VudCkKLSNlbmRpZiAvKiBfX0VMRl9fICovCi0jZWxzZSAvKiBHUFJPRiAqLwotI2RlZmluZQlNQ09VTlRfQVNNCS8qIG5vdGhpbmcgKi8KLSNlbmRpZiAvKiBHUFJPRiAqLwotCi0jZW5kaWYgLyogX0tFUk5FTCAqLwotCi0KLQotI2lmZGVmIEdQUk9GCi0jIGlmZGVmIF9fRUxGX18KLSMgIGRlZmluZSBfUFJPRl9QUk9MT0dVRQlcCi0JcHVzaGwgJWVicDsgbW92bCAlZXNwLCVlYnA7IGNhbGwgUElDX1BMVChfX21jb3VudCk7IHBvcGwgJWVicAotIyBlbHNlIAotIyAgZGVmaW5lIF9QUk9GX1BST0xPR1VFCVwKLQlwdXNobCAlZWJwOyBtb3ZsICVlc3AsJWVicDsgY2FsbCBQSUNfUExUKG1jb3VudCk7IHBvcGwgJWVicAotIyBlbmRpZgotI2Vsc2UKLSMgZGVmaW5lIF9QUk9GX1BST0xPR1VFCi0jZW5kaWYKLQotI2RlZmluZQlFTlRSWSh5KQlfRU5UUlkoX0NfTEFCRUwoeSkpOyBfUFJPRl9QUk9MT0dVRQotI2RlZmluZQlORU5UUlkoeSkJX0VOVFJZKF9DX0xBQkVMKHkpKQotI2RlZmluZQlBU0VOVFJZKHkpCV9FTlRSWShfQVNNX0xBQkVMKHkpKTsgX1BST0ZfUFJPTE9HVUUKLSNkZWZpbmUJTEFCRUwoeSkJX0xBQkVMKF9DX0xBQkVMKHkpKQotI2RlZmluZQlFTkQoeSkJCS5jZmlfZW5kcHJvYzsgLnNpemUgeSwgLiAtIHkKLQotI2RlZmluZQlBU01TVFIJCS5hc2NpegotCi0jaWZkZWYgX19FTEZfXwotI2RlZmluZSBSQ1NJRCh4KQkucHVzaHNlY3Rpb24gIi5pZGVudCI7IC5hc2NpeiB4OyAucG9wc2VjdGlvbgotI2Vsc2UKLSNkZWZpbmUgUkNTSUQoeCkJLnRleHQ7IC5hc2NpeiB4Ci0jZW5kaWYKLQotI2lmZGVmIE5PX0tFUk5FTF9SQ1NJRFMKLSNkZWZpbmUJX19LRVJORUxfUkNTSUQoX24sIF9zKQkvKiBub3RoaW5nICovCi0jZWxzZQotI2RlZmluZQlfX0tFUk5FTF9SQ1NJRChfbiwgX3MpCVJDU0lEKF9zKQotI2VuZGlmCi0KLSNpZmRlZiBfX0VMRl9fCi0jZGVmaW5lCVdFQUtfQUxJQVMoYWxpYXMsc3ltKQkJCQkJCVwKLQkud2VhayBhbGlhczsJCQkJCQkJXAotCWFsaWFzID0gc3ltCi0jZW5kaWYKLS8qCi0gKiBTVFJPTkdfQUxJQVM6IGNyZWF0ZSBhIHN0cm9uZyBhbGlhcy4KLSAqLwotI2RlZmluZSBTVFJPTkdfQUxJQVMoYWxpYXMsc3ltKQkJCQkJCVwKLQkuZ2xvYmwgYWxpYXM7CQkJCQkJCVwKLQlhbGlhcyA9IHN5bQotCi0jaWZkZWYgX19TVERDX18KLSNkZWZpbmUJV0FSTl9SRUZFUkVOQ0VTKHN5bSxtc2cpCQkJCQlcCi0JLnB1c2hzZWN0aW9uIC5nbnUud2FybmluZy4gIyMgc3ltOwkJCQlcCi0JLmFzY2lpIG1zZzsJCQkJCQkJXAotCS5wb3BzZWN0aW9uCi0jZWxzZQotI2RlZmluZQlXQVJOX1JFRkVSRU5DRVMoc3ltLG1zZykJCQkJCVwKLQkucHVzaHNlY3Rpb24gLmdudS53YXJuaW5nLi8qKi9zeW07CQkJCVwKLQkuYXNjaWkgbXNnOwkJCQkJCQlcCi0JLnBvcHNlY3Rpb24KLSNlbmRpZiAvKiBfX1NURENfXyAqLwotCiAjZW5kaWYgLyogIV9JMzg2X0FTTV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWIzNzAzLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2llZWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgkkT3BlbkJTRDogaWVlZS5oLHYgMS4yIDIwMDMvMDYvMDIgMjM6Mjc6NDcgbWlsbGVydCBFeHAgJCAqLwotLyoJJE5ldEJTRDogaWVlZS5oLHYgMS4xIDE5OTYvMDkvMzAgMTY6MzQ6MjUgd3MgRXhwICQgKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IHRoZSBDb21wdXRlciBTeXN0ZW1zIEVuZ2luZWVyaW5nIGdyb3VwCi0gKiBhdCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IHVuZGVyIERBUlBBIGNvbnRyYWN0IEJHIDkxLTY2IGFuZAotICogY29udHJpYnV0ZWQgdG8gQmVya2VsZXkuCi0gKgotICogQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKglDYWxpZm9ybmlhLCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpaWVlZS5oCTguMSAoQmVya2VsZXkpIDYvMTEvOTMKLSAqLwotCi0vKgotICogaWVlZS5oIGRlZmluZXMgdGhlIG1hY2hpbmUtZGVwZW5kZW50IGxheW91dCBvZiB0aGUgbWFjaGluZSdzIElFRUUKLSAqIGZsb2F0aW5nIHBvaW50LiAgSXQgZG9lcyAqbm90KiBkZWZpbmUgKHlldD8pIGFueSBvZiB0aGUgcm91bmRpbmcKLSAqIG1vZGUgYml0cywgZXhjZXB0aW9ucywgYW5kIHNvIGZvcnRoLgotICovCi0KLS8qCi0gKiBEZWZpbmUgdGhlIG51bWJlciBvZiBiaXRzIGluIGVhY2ggZnJhY3Rpb24gYW5kIGV4cG9uZW50LgotICoKLSAqCQkgICAgIGsJICAgICAgICAgaysxCi0gKiBOb3RlIHRoYXQgIDEuMCB4IDIgID09IDAuMSB4IDIgICAgICBhbmQgdGhhdCBkZW5vcm1zIGFyZSByZXByZXNlbnRlZAotICoKLSAqCQkJCQkgICgtZXhwX2JpYXMrMSkKLSAqIGFzIGZyYWN0aW9ucyB0aGF0IGxvb2sgbGlrZSAwLmZmZmZmIHggMiAgICAgICAgICAgICAuICBUaGlzIG1lYW5zIHRoYXQKLSAqCi0gKgkJCSAtMTI2Ci0gKiB0aGUgbnVtYmVyIDAuMTAwMDAgeCAyICAgICwgZm9yIGluc3RhbmNlLCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsaXplZAotICoKLSAqCQktMTI3CQkJICAgLTEyOAotICogZmxvYXQgMS4wIHggMiAgICAuICBUaHVzLCB0byByZXByZXNlbnQgMiAgICAsIHdlIG5lZWQgb25lIGxlYWRpbmcgemVybwotICoKLSAqCQkJCSAgLTEyOQotICogaW4gdGhlIGZyYWN0aW9uOyB0byByZXByZXNlbnQgMiAgICAsIHdlIG5lZWQgdHdvLCBhbmQgc28gb24uICBUaGlzCi0gKgotICoJCQkJCQkgICAgICgtZXhwX2JpYXMtZnJhY2JpdHMrMSkKLSAqIGltcGxpZXMgdGhhdCB0aGUgc21hbGxlc3QgZGVub3JtYWxpemVkIG51bWJlciBpcyAyCi0gKgotICogZm9yIHdoaWNoZXZlciBmb3JtYXQgd2UgYXJlIHRhbGtpbmcgYWJvdXQ6IGZvciBzaW5nbGUgcHJlY2lzaW9uLCBmb3IKLSAqCi0gKgkJCQkJCS0xMjYJCS0xNDkKLSAqIGluc3RhbmNlLCB3ZSBnZXQgLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIHggMiAgICAsIG9yIDEuMCB4IDIgICAgLCBhbmQKLSAqCi0gKiAtMTQ5ID09IC0xMjcgLSAyMyArIDEuCi0gKi8KLSNkZWZpbmUJU05HX0VYUEJJVFMJOAotI2RlZmluZQlTTkdfRlJBQ0JJVFMJMjMKLQotI2RlZmluZQlEQkxfRVhQQklUUwkxMQotI2RlZmluZQlEQkxfRlJBQ0JJVFMJNTIKLQotI2RlZmluZQlFWFRfRVhQQklUUwkxNQotI2RlZmluZQlFWFRfRlJBQ0JJVFMJMTEyCi0KLXN0cnVjdCBpZWVlX3NpbmdsZSB7Ci0JdV9pbnQJc25nX2ZyYWM6MjM7Ci0JdV9pbnQJc25nX2V4cDo4OwotCXVfaW50CXNuZ19zaWduOjE7Ci19OwotCi1zdHJ1Y3QgaWVlZV9kb3VibGUgewotCXVfaW50CWRibF9mcmFjbDsKLQl1X2ludAlkYmxfZnJhY2g6MjA7Ci0JdV9pbnQJZGJsX2V4cDoxMTsKLQl1X2ludAlkYmxfc2lnbjoxOwotfTsKLQotc3RydWN0IGllZWVfZXh0IHsKLQl1X2ludAlleHRfZnJhY2w7Ci0JdV9pbnQJZXh0X2ZyYWNsbTsKLQl1X2ludAlleHRfZnJhY2htOwotCXVfaW50CWV4dF9mcmFjaDoxNjsKLQl1X2ludAlleHRfZXhwOjE1OwotCXVfaW50CWV4dF9zaWduOjE7Ci19OwotCi0vKgotICogRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIGluIFsxLi5JTkZOQU4pIChvZiB3aGF0ZXZlciB0eXBlKSBhcmUKLSAqIGBub3JtYWwnLiAgRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIElORk5BTiBhcmUgZWl0aGVyIEluZiBvciBOYU4uCi0gKiBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgemVybyBhcmUgZWl0aGVyIHplcm8gKGlmZiBhbGwgZnJhY3Rpb24KLSAqIGJpdHMgYXJlIHplcm8pIG9yIHN1Ym5vcm1hbCB2YWx1ZXMuCi0gKgotICogQSBOYU4gaXMgYSBgc2lnbmFsbGluZyBOYU4nIGlmIGl0cyBRVUlFVE5BTiBiaXQgaXMgY2xlYXIgaW4gaXRzCi0gKiBoaWdoIGZyYWN0aW9uOyBpZiB0aGUgYml0IGlzIHNldCwgaXQgaXMgYSBgcXVpZXQgTmFOJy4KLSAqLwotI2RlZmluZQlTTkdfRVhQX0lORk5BTgkyNTUKLSNkZWZpbmUJREJMX0VYUF9JTkZOQU4JMjA0NwotI2RlZmluZQlFWFRfRVhQX0lORk5BTgkzMjc2NwotCi0jaWYgMAotI2RlZmluZQlTTkdfUVVJRVROQU4JKDEgPDwgMjIpCi0jZGVmaW5lCURCTF9RVUlFVE5BTgkoMSA8PCAxOSkKLSNkZWZpbmUJRVhUX1FVSUVUTkFOCSgxIDw8IDE1KQotI2VuZGlmCi0KLS8qCi0gKiBFeHBvbmVudCBiaWFzZXMuCi0gKi8KLSNkZWZpbmUJU05HX0VYUF9CSUFTCTEyNwotI2RlZmluZQlEQkxfRVhQX0JJQVMJMTAyMwotI2RlZmluZQlFWFRfRVhQX0JJQVMJMTYzODMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZmQ4NTQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgkkT3BlbkJTRDogbGltaXRzLmgsdiAxLjExIDIwMDYvMDEvMDYgMjI6NDg6NDcgbWlsbGVydCBFeHAgJAkqLwotLyoJJE5ldEJTRDogbGltaXRzLmgsdiAxLjExIDE5OTUvMTIvMjEgMDE6MDg6NTkgbXljcm9mdCBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpbGltaXRzLmgJNy4yIChCZXJrZWxleSkgNi8yOC85MAotICovCi0KLSNpZm5kZWYgX01BQ0hJTkVfTElNSVRTX0hfCi0jZGVmaW5lIF9NQUNISU5FX0xJTUlUU19IXwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLSNkZWZpbmUJTUJfTEVOX01BWAkxCQkvKiBubyBtdWx0aWJ5dGUgY2hhcmFjdGVycyAqLwotCi0jaWZuZGVmCVNJWkVfTUFYCi0jZGVmaW5lCVNJWkVfTUFYCVVJTlRfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzaXplX3QgKi8KLSNlbmRpZgotI2lmbmRlZiBTU0laRV9NQVgKLSNkZWZpbmUJU1NJWkVfTUFYCUlOVF9NQVgJCS8qIG1heCB2YWx1ZSBmb3IgYSBzc2l6ZV90ICovCi0jZW5kaWYKLQotI2lmIF9fQlNEX1ZJU0lCTEUKLSNkZWZpbmUJU0laRV9UX01BWAlVSU5UX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90IChoaXN0b3JpYykgKi8KLQotI2RlZmluZQlVUVVBRF9NQVgJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCQkvKiBtYXggdW5zaWduZWQgcXVhZCAqLwotI2RlZmluZQlRVUFEX01BWAkweDdmZmZmZmZmZmZmZmZmZmZMTAkJLyogbWF4IHNpZ25lZCBxdWFkICovCi0jZGVmaW5lCVFVQURfTUlOCSgtMHg3ZmZmZmZmZmZmZmZmZmZmTEwtMSkJLyogbWluIHNpZ25lZCBxdWFkICovCi0KLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCi0KLSNkZWZpbmUgTE9OR0xPTkdfQklUICAgIDY0Ci0jZGVmaW5lIExPTkdMT05HX01JTiAgICAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTC0xKQotI2RlZmluZSBMT05HTE9OR19NQVggICAgOTIyMzM3MjAzNjg1NDc3NTgwN0xMCi0jZGVmaW5lIFVMT05HTE9OR19NQVggICAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTAotCi0jZW5kaWYgLyogX01BQ0hJTkVfTElNSVRTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc2lsdmVybW9udC5tayBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zaWx2ZXJtb250Lm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NmJlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc2lsdmVybW9udC5tawpAQCAtMCwwICsxLDMyIEBACitsaWJjX2Jpb25pY19zcmNfZmlsZXNfeDg2ICs9IFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLWJjb3B5LXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLWJ6ZXJvLXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbWNweS1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1tZW1tb3ZlLXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbXNldC1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHBjcHktc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RwbmNweS1zbG0uUyBcCisgICAgYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHJjcHktc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RybGVuLXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cm5jcHktc2xtLlMgXAorICAgIGFyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTQtbWVtY21wLXNsbS5TIFwKKyAgICBhcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2U0LXdtZW1jbXAtc2xtLlMKKworbGliY19iaW9uaWNfc3JjX2ZpbGVzX3g4NiArPSBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi1tZW1jaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLW1lbXJjaHItYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXN0cmNoci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3RycmNoci1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItc3Rybmxlbi1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3NzZTItd2NzY2hyLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NyY2hyLWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NlMi13Y3NsZW4tYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc2UyLXdjc2NtcC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jYXQtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJsY2F0LWF0b20uUyBcCisgICAgYXJjaC14ODYvYXRvbS9zdHJpbmcvc3NzZTMtc3RybGNweS1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cmNtcC1hdG9tLlMgXAorICAgIGFyY2gteDg2L2F0b20vc3RyaW5nL3Nzc2UzLXN0cm5jbXAtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy1zdHJjYXQtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13Y3NjYXQtYXRvbS5TIFwKKyAgICBhcmNoLXg4Ni9hdG9tL3N0cmluZy9zc3NlMy13Y3NjcHktYXRvbS5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL2NhY2hlLmggYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0MmIxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvY2FjaGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKiBWYWx1ZXMgYXJlIG9wdGltaXplZCBmb3IgU2lsdmVybW9udCAqLworI2RlZmluZSBTSEFSRURfQ0FDSEVfU0laRQkoMTAyNCoxMDI0KQkJCS8qIFNpbHZlcm1vbnQgTDIgQ2FjaGUgKi8KKyNkZWZpbmUgREFUQV9DQUNIRV9TSVpFCQkoMjQqMTAyNCkJCQkvKiBTaWx2ZXJtb250IEwxIERhdGEgQ2FjaGUgKi8KKworI2RlZmluZSBTSEFSRURfQ0FDSEVfU0laRV9IQUxGCShTSEFSRURfQ0FDSEVfU0laRSAvIDIpCisjZGVmaW5lIERBVEFfQ0FDSEVfU0laRV9IQUxGCShEQVRBX0NBQ0hFX1NJWkUgLyAyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLWJjb3B5LXNsbS5TIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLWJjb3B5LXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MGQ1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItYmNvcHktc2xtLlMKQEAgLTAsMCArMSwzNCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworCisjZGVmaW5lIE1FTU1PVkUJYmNvcHkKKyNkZWZpbmUgVVNFX0FTX0JDT1BZCisjaW5jbHVkZSAic3NlMi1tZW1tb3ZlLXNsbS5TIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLWJ6ZXJvLXNsbS5TIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLWJ6ZXJvLXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ODJlZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItYnplcm8tc2xtLlMKQEAgLTAsMCArMSwzMyBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBVU0VfQVNfQlpFUk8KKyNkZWZpbmUgTUVNU0VUICBiemVybworI2luY2x1ZGUgInNzZTItbWVtc2V0LXNsbS5TIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbWNweS1zbG0uUyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1tZW1jcHktc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzMDVjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1tZW1jcHktc2xtLlMKQEAgLTAsMCArMSwzMDggQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaWZuZGVmIE1FTUNQWQorIyBkZWZpbmUgTUVNQ1BZCW1lbWNweQorI2VuZGlmCisKKyNpZm5kZWYgTAorIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCS5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVsX29mZnNldAorIyBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3Jlc3RvcmUKKyMgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJLmNmaV9yZXN0b3JlIHJlZworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CisjIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgorI2VuZGlmCisKKyNpZm5kZWYgRU5UUlkKKyMgZGVmaW5lIEVOVFJZKG5hbWUpCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsJCVwKKwkuZ2xvYmwgbmFtZTsJCVwKKwkucDJhbGlnbiA0OwkJXAorbmFtZToJCVwKKwljZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTkQKKyMgZGVmaW5lIEVORChuYW1lKQkJXAorCWNmaV9lbmRwcm9jOwkJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisKKyNkZWZpbmUgREVTVAkJUEFSTVMKKyNkZWZpbmUgU1JDCQlERVNUKzQKKyNkZWZpbmUgTEVOCQlTUkMrNAorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJCVwKKyAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJCVwKKyAgY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKKworI2RlZmluZSBDRklfUE9QKFJFRykJCVwKKyAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CQlcCisgIGNmaV9yZXN0b3JlIChSRUcpCisKKyNkZWZpbmUgUFVTSChSRUcpCXB1c2hsIFJFRzsgQ0ZJX1BVU0ggKFJFRykKKyNkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKKworI2RlZmluZSBQQVJNUwkJOAkJLyogUHJlc2VydmUgRUJYLiAgKi8KKyNkZWZpbmUgRU5UUkFOQ0UJUFVTSCAoJWVieCk7CisjZGVmaW5lIFJFVFVSTl9FTkQJUE9QICglZWJ4KTsgcmV0CisjZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORDsgQ0ZJX1BVU0ggKCVlYngpCisKKwkuc2VjdGlvbiAudGV4dC5zc2UyLCJheCIsQHByb2diaXRzCitFTlRSWSAoTUVNQ1BZKQorCUVOVFJBTkNFCisJbW92bAlMRU4oJWVzcCksICVlY3gKKwltb3ZsCVNSQyglZXNwKSwgJWVheAorCW1vdmwJREVTVCglZXNwKSwgJWVkeAorCisJY21wCSVlYXgsICVlZHgKKwlqZQlMKHJldHVybikKKworCWNtcAkkMTYsICVlY3gKKwlqYmUJTChsZW5fMF8xNl9ieXRlcykKKworCWNtcCAgICAgJFNIQVJFRF9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKwlqYWUgICAgIEwobGFyZ2VfcGFnZSkKKworCW1vdmRxdQkoJWVheCksICV4bW0wCisJbW92ZHF1CS0xNiglZWF4LCAlZWN4KSwgJXhtbTEKKwljbXBsICAgICQzMiwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVlZHgpCisJbW92ZHF1CSV4bW0xLCAtMTYoJWVkeCwgJWVjeCkKKwlqYmUJTChyZXR1cm4pCisKKwltb3ZkcXUJMTYoJWVheCksICV4bW0wCisJbW92ZHF1CS0zMiglZWF4LCAlZWN4KSwgJXhtbTEKKwljbXBsICAgICQ2NCwgJWVjeAorCW1vdmRxdQkleG1tMCwgMTYoJWVkeCkKKwltb3ZkcXUJJXhtbTEsIC0zMiglZWR4LCAlZWN4KQorCWpiZQlMKHJldHVybikKKworCW1vdmRxdQkzMiglZWF4KSwgJXhtbTAKKwltb3ZkcXUJNDgoJWVheCksICV4bW0xCisJbW92ZHF1CS00OCglZWF4LCAlZWN4KSwgJXhtbTIKKwltb3ZkcXUJLTY0KCVlYXgsICVlY3gpLCAleG1tMworCWNtcGwgICAgJDEyOCwgJWVjeAorCW1vdmRxdQkleG1tMCwgMzIoJWVkeCkKKwltb3ZkcXUJJXhtbTEsIDQ4KCVlZHgpCisJbW92ZHF1CSV4bW0yLCAtNDgoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTMsIC02NCglZWR4LCAlZWN4KQorCWpiZQlMKHJldHVybikKKworLyogTm93IHRoZSBtYWluIGxvb3A6IHdlIGFsaWduIHRoZSBhZGRyZXNzIG9mIHRoZSBkZXN0aW5hdGlvbi4gICovCisJbGVhbAk2NCglZWR4KSwgJWVieAorCWFuZGwJJC02NCwgJWVieAorCisJYWRkbAklZWR4LCAlZWN4CisJYW5kbAkkLTY0LCAlZWN4CisKKwlzdWJsCSVlZHgsICVlYXgKKworLyogV2Ugc2hvdWxkIHN0b3AgdHdvIGl0ZXJhdGlvbnMgYmVmb3JlIHRoZSB0ZXJtaW5hdGlvbgorCShpbiBvcmRlciBub3QgdG8gbWlzcHJlZmV0Y2gpLiAgKi8KKwlzdWJsCSQ2NCwgJWVjeAorCWNtcGwJJWVieCwgJWVjeAorCWplCUwobWFpbl9sb29wX2p1c3Rfb25lX2l0ZXJhdGlvbikKKworCXN1YmwJJDY0LCAlZWN4CisJY21wbAklZWJ4LCAlZWN4CisJamUJTChtYWluX2xvb3BfbGFzdF90d29faXRlcmF0aW9ucykKKworCisJLnAyYWxpZ24gNAorTChtYWluX2xvb3BfY2FjaGUpOgorCisJcHJlZmV0Y2h0MCAxMjgoJWVieCwgJWVheCkKKworCW1vdmRxdQkoJWVieCwgJWVheCksICV4bW0wCisJbW92ZHF1CTE2KCVlYngsICVlYXgpLCAleG1tMQorCW1vdmRxdQkzMiglZWJ4LCAlZWF4KSwgJXhtbTIKKwltb3ZkcXUJNDgoJWVieCwgJWVheCksICV4bW0zCisJbW92ZHFhCSV4bW0wLCAoJWVieCkKKwltb3ZkcWEJJXhtbTEsIDE2KCVlYngpCisJbW92ZHFhCSV4bW0yLCAzMiglZWJ4KQorCW1vdmRxYQkleG1tMywgNDgoJWVieCkKKwlsZWEJNjQoJWVieCksICVlYngKKwljbXBsCSVlYngsICVlY3gKKwlqbmUJTChtYWluX2xvb3BfY2FjaGUpCisKK0wobWFpbl9sb29wX2xhc3RfdHdvX2l0ZXJhdGlvbnMpOgorCW1vdmRxdQkoJWVieCwgJWVheCksICV4bW0wCisJbW92ZHF1CTE2KCVlYngsICVlYXgpLCAleG1tMQorCW1vdmRxdQkzMiglZWJ4LCAlZWF4KSwgJXhtbTIKKwltb3ZkcXUJNDgoJWVieCwgJWVheCksICV4bW0zCisJbW92ZHF1CTY0KCVlYngsICVlYXgpLCAleG1tNAorCW1vdmRxdQk4MCglZWJ4LCAlZWF4KSwgJXhtbTUKKwltb3ZkcXUJOTYoJWVieCwgJWVheCksICV4bW02CisJbW92ZHF1CTExMiglZWJ4LCAlZWF4KSwgJXhtbTcKKwltb3ZkcWEJJXhtbTAsICglZWJ4KQorCW1vdmRxYQkleG1tMSwgMTYoJWVieCkKKwltb3ZkcWEJJXhtbTIsIDMyKCVlYngpCisJbW92ZHFhCSV4bW0zLCA0OCglZWJ4KQorCW1vdmRxYQkleG1tNCwgNjQoJWVieCkKKwltb3ZkcWEJJXhtbTUsIDgwKCVlYngpCisJbW92ZHFhCSV4bW02LCA5NiglZWJ4KQorCW1vdmRxYQkleG1tNywgMTEyKCVlYngpCisJam1wCUwocmV0dXJuKQorCitMKG1haW5fbG9vcF9qdXN0X29uZV9pdGVyYXRpb24pOgorCW1vdmRxdQkoJWVieCwgJWVheCksICV4bW0wCisJbW92ZHF1CTE2KCVlYngsICVlYXgpLCAleG1tMQorCW1vdmRxdQkzMiglZWJ4LCAlZWF4KSwgJXhtbTIKKwltb3ZkcXUJNDgoJWVieCwgJWVheCksICV4bW0zCisJbW92ZHFhCSV4bW0wLCAoJWVieCkKKwltb3ZkcWEJJXhtbTEsIDE2KCVlYngpCisJbW92ZHFhCSV4bW0yLCAzMiglZWJ4KQorCW1vdmRxYQkleG1tMywgNDgoJWVieCkKKwlqbXAJTChyZXR1cm4pCisKK0wobGFyZ2VfcGFnZSk6CisJbW92ZHF1CSglZWF4KSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVheCksICV4bW0xCisJbW92ZHF1CTMyKCVlYXgpLCAleG1tMgorCW1vdmRxdQk0OCglZWF4KSwgJXhtbTMKKwltb3ZkcXUJLTY0KCVlYXgsICVlY3gpLCAleG1tNAorCW1vdmRxdQktNDgoJWVheCwgJWVjeCksICV4bW01CisJbW92ZHF1CS0zMiglZWF4LCAlZWN4KSwgJXhtbTYKKwltb3ZkcXUJLTE2KCVlYXgsICVlY3gpLCAleG1tNworCW1vdmRxdQkleG1tMCwgKCVlZHgpCisJbW92ZHF1CSV4bW0xLCAxNiglZWR4KQorCW1vdmRxdQkleG1tMiwgMzIoJWVkeCkKKwltb3ZkcXUJJXhtbTMsIDQ4KCVlZHgpCisJbW92ZHF1CSV4bW00LCAtNjQoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTUsIC00OCglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tNiwgLTMyKCVlZHgsICVlY3gpCisJbW92ZHF1CSV4bW03LCAtMTYoJWVkeCwgJWVjeCkKKworCW1vdmRxdQk2NCglZWF4KSwgJXhtbTAKKwltb3ZkcXUJODAoJWVheCksICV4bW0xCisJbW92ZHF1CTk2KCVlYXgpLCAleG1tMgorCW1vdmRxdQkxMTIoJWVheCksICV4bW0zCisJbW92ZHF1CS0xMjgoJWVheCwgJWVjeCksICV4bW00CisJbW92ZHF1CS0xMTIoJWVheCwgJWVjeCksICV4bW01CisJbW92ZHF1CS05NiglZWF4LCAlZWN4KSwgJXhtbTYKKwltb3ZkcXUJLTgwKCVlYXgsICVlY3gpLCAleG1tNworCW1vdmRxdQkleG1tMCwgNjQoJWVkeCkKKwltb3ZkcXUJJXhtbTEsIDgwKCVlZHgpCisJbW92ZHF1CSV4bW0yLCA5NiglZWR4KQorCW1vdmRxdQkleG1tMywgMTEyKCVlZHgpCisJbW92ZHF1CSV4bW00LCAtMTI4KCVlZHgsICVlY3gpCisJbW92ZHF1CSV4bW01LCAtMTEyKCVlZHgsICVlY3gpCisJbW92ZHF1CSV4bW02LCAtOTYoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTcsIC04MCglZWR4LCAlZWN4KQorCisvKiBOb3cgdGhlIG1haW4gbG9vcCB3aXRoIG5vbiB0ZW1wb3JhbCBzdG9yZXMuIFdlIGFsaWduCisJdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc3RpbmF0aW9uLiAgKi8KKwlsZWFsCTEyOCglZWR4KSwgJWVieAorCWFuZGwJJC0xMjgsICVlYngKKworCWFkZGwJJWVkeCwgJWVjeAorCWFuZGwJJC0xMjgsICVlY3gKKworCXN1YmwJJWVkeCwgJWVheAorCisJLnAyYWxpZ24gNAorTChtYWluX2xvb3BfbGFyZ2VfcGFnZSk6CisJbW92ZHF1CSglZWJ4LCAlZWF4KSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVieCwgJWVheCksICV4bW0xCisJbW92ZHF1CTMyKCVlYngsICVlYXgpLCAleG1tMgorCW1vdmRxdQk0OCglZWJ4LCAlZWF4KSwgJXhtbTMKKwltb3ZkcXUJNjQoJWVieCwgJWVheCksICV4bW00CisJbW92ZHF1CTgwKCVlYngsICVlYXgpLCAleG1tNQorCW1vdmRxdQk5NiglZWJ4LCAlZWF4KSwgJXhtbTYKKwltb3ZkcXUJMTEyKCVlYngsICVlYXgpLCAleG1tNworCW1vdm50ZHEJJXhtbTAsICglZWJ4KQorCW1vdm50ZHEJJXhtbTEsIDE2KCVlYngpCisJbW92bnRkcQkleG1tMiwgMzIoJWVieCkKKwltb3ZudGRxCSV4bW0zLCA0OCglZWJ4KQorCW1vdm50ZHEJJXhtbTQsIDY0KCVlYngpCisJbW92bnRkcQkleG1tNSwgODAoJWVieCkKKwltb3ZudGRxCSV4bW02LCA5NiglZWJ4KQorCW1vdm50ZHEJJXhtbTcsIDExMiglZWJ4KQorCWxlYQkxMjgoJWVieCksICVlYngKKwljbXBsCSVlYngsICVlY3gKKwlqbmUJTChtYWluX2xvb3BfbGFyZ2VfcGFnZSkKKwlzZmVuY2UKKwlqbXAJTChyZXR1cm4pCisKK0wobGVuXzBfMTZfYnl0ZXMpOgorCXRlc3RiCSQyNCwgJWNsCisJam5lCUwobGVuXzlfMTZfYnl0ZXMpCisJdGVzdGIJJDQsICVjbAorCS5wMmFsaWduIDQsLDUKKwlqbmUJTChsZW5fNV84X2J5dGVzKQorCXRlc3RsCSVlY3gsICVlY3gKKwkucDJhbGlnbiA0LCwyCisJamUJTChyZXR1cm4pCisJbW92emJsCSglZWF4KSwgJWVieAorCXRlc3RiCSQyLCAlY2wKKwltb3ZiCSVibCwgKCVlZHgpCisJamUJTChyZXR1cm4pCisJbW92endsCS0yKCVlYXgsJWVjeCksICVlYngKKwltb3Z3CSVieCwgLTIoJWVkeCwlZWN4KQorCWptcAlMKHJldHVybikKKworTChsZW5fOV8xNl9ieXRlcyk6CisJbW92cQkoJWVheCksICV4bW0wCisJbW92cQktOCglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZxCSV4bW0wLCAoJWVkeCkKKwltb3ZxCSV4bW0xLCAtOCglZWR4LCAlZWN4KQorCWptcAlMKHJldHVybikKKworTChsZW5fNV84X2J5dGVzKToKKwltb3ZsCSglZWF4KSwgJWVieAorCW1vdmwJJWVieCwgKCVlZHgpCisJbW92bAktNCglZWF4LCVlY3gpLCAlZWJ4CisJbW92bAklZWJ4LCAtNCglZWR4LCVlY3gpCisJam1wCUwocmV0dXJuKQorCitMKHJldHVybik6CisJbW92bAklZWR4LCAlZWF4CisJUkVUVVJOCisKK0VORCAoTUVNQ1BZKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbW1vdmUtc2xtLlMgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItbWVtbW92ZS1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTcxZjBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbW1vdmUtc2xtLlMKQEAgLTAsMCArMSw1NDIgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaWZuZGVmIE1FTU1PVkUKKyMgZGVmaW5lIE1FTU1PVkUJbWVtbW92ZQorI2VuZGlmCisKKyNpZm5kZWYgTAorIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCS5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVsX29mZnNldAorIyBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3Jlc3RvcmUKKyMgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJLmNmaV9yZXN0b3JlIHJlZworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CisjIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgorI2VuZGlmCisKKyNpZm5kZWYgRU5UUlkKKyMgZGVmaW5lIEVOVFJZKG5hbWUpCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsJCVwKKwkuZ2xvYmwgbmFtZTsJCVwKKwkucDJhbGlnbiA0OwkJXAorbmFtZToJCVwKKwljZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTkQKKyMgZGVmaW5lIEVORChuYW1lKQkJXAorCWNmaV9lbmRwcm9jOwkJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisKKyNpZmRlZiBVU0VfQVNfQkNPUFkKKyMgZGVmaW5lIFNSQwkJUEFSTVMKKyMgZGVmaW5lIERFU1QJCVNSQys0CisjIGRlZmluZSBMRU4JCURFU1QrNAorI2Vsc2UKKyMgZGVmaW5lIERFU1QJCVBBUk1TCisjIGRlZmluZSBTUkMJCURFU1QrNAorIyBkZWZpbmUgTEVOCQlTUkMrNAorI2VuZGlmCisKKyNkZWZpbmUgQ0ZJX1BVU0goUkVHKQkJXAorICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOwkJXAorICBjZmlfcmVsX29mZnNldCAoUkVHLCAwKQorCisjZGVmaW5lIENGSV9QT1AoUkVHKQkJXAorICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCVwKKyAgY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQorCisjZGVmaW5lIFBBUk1TCQk4CQkvKiBQcmVzZXJ2ZSBFQlguICAqLworI2RlZmluZSBFTlRSQU5DRQlQVVNIICglZWJ4KTsKKyNkZWZpbmUgUkVUVVJOX0VORAlQT1AgKCVlYngpOyByZXQKKyNkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5EOyBDRklfUFVTSCAoJWVieCkKKworCS5zZWN0aW9uIC50ZXh0LnNzZTIsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChNRU1NT1ZFKQorCUVOVFJBTkNFCisJbW92bAlMRU4oJWVzcCksICVlY3gKKwltb3ZsCVNSQyglZXNwKSwgJWVheAorCW1vdmwJREVTVCglZXNwKSwgJWVkeAorCisvKiBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBjb3B5IGJhY2t3YXJkIG9yIGZvcndhcmQuICAqLworCWNtcAklZWF4LCAlZWR4CisJamUJTChtbV9yZXR1cm4pCisJamcJTChtbV9sZW5fMF9vcl9tb3JlX2JhY2t3YXJkKQorCisvKiBOb3cgZG8gY2hlY2tzIGZvciBsZW5ndGhzLiBXZSBkbyBbMC4uMTZdLCBbMC4uMzJdLCBbMC4uNjRdLCBbMC4uMTI4XQorCXNlcGFyYXRlbHkuICAqLworCWNtcAkkMTYsICVlY3gKKwlqYmUJTChtbV9sZW5fMF8xNl9ieXRlc19mb3J3YXJkKQorCisJY21wbAkkMzIsICVlY3gKKwlqYQlMKG1tX2xlbl8zMl9vcl9tb3JlX2ZvcndhcmQpCisKKy8qIENvcHkgWzAuLjMyXSBhbmQgcmV0dXJuLiAgKi8KKwltb3ZkcXUJKCVlYXgpLCAleG1tMAorCW1vdmRxdQktMTYoJWVheCwgJWVjeCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkeCkKKwltb3ZkcXUJJXhtbTEsIC0xNiglZWR4LCAlZWN4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fMzJfb3JfbW9yZV9mb3J3YXJkKToKKwljbXBsCSQ2NCwgJWVjeAorCWphCUwobW1fbGVuXzY0X29yX21vcmVfZm9yd2FyZCkKKworLyogQ29weSBbMC4uNjRdIGFuZCByZXR1cm4uICAqLworCW1vdmRxdQkoJWVheCksICV4bW0wCisJbW92ZHF1CTE2KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMTYoJWVheCwgJWVjeCksICV4bW0yCisJbW92ZHF1CS0zMiglZWF4LCAlZWN4KSwgJXhtbTMKKwltb3ZkcXUJJXhtbTAsICglZWR4KQorCW1vdmRxdQkleG1tMSwgMTYoJWVkeCkKKwltb3ZkcXUJJXhtbTIsIC0xNiglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tMywgLTMyKCVlZHgsICVlY3gpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl82NF9vcl9tb3JlX2ZvcndhcmQpOgorCWNtcGwJJDEyOCwgJWVjeAorCWphCUwobW1fbGVuXzEyOF9vcl9tb3JlX2ZvcndhcmQpCisKKy8qIENvcHkgWzAuLjEyOF0gYW5kIHJldHVybi4gICovCisJbW92ZHF1CSglZWF4KSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVheCksICV4bW0xCisJbW92ZHF1CTMyKCVlYXgpLCAleG1tMgorCW1vdmRxdQk0OCglZWF4KSwgJXhtbTMKKwltb3ZkcXUJLTY0KCVlYXgsICVlY3gpLCAleG1tNAorCW1vdmRxdQktNDgoJWVheCwgJWVjeCksICV4bW01CisJbW92ZHF1CS0zMiglZWF4LCAlZWN4KSwgJXhtbTYKKwltb3ZkcXUJLTE2KCVlYXgsICVlY3gpLCAleG1tNworCW1vdmRxdQkleG1tMCwgKCVlZHgpCisJbW92ZHF1CSV4bW0xLCAxNiglZWR4KQorCW1vdmRxdQkleG1tMiwgMzIoJWVkeCkKKwltb3ZkcXUJJXhtbTMsIDQ4KCVlZHgpCisJbW92ZHF1CSV4bW00LCAtNjQoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTUsIC00OCglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tNiwgLTMyKCVlZHgsICVlY3gpCisJbW92ZHF1CSV4bW03LCAtMTYoJWVkeCwgJWVjeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzEyOF9vcl9tb3JlX2ZvcndhcmQpOgorCVBVU0ggKCVlc2kpCisJUFVTSCAoJWVkaSkKKworLyogQWxpZ25pbmcgdGhlIGFkZHJlc3Mgb2YgZGVzdGluYXRpb24uICAqLworCW1vdmRxdQkoJWVheCksICV4bW0wCisJbW92ZHF1CTE2KCVlYXgpLCAleG1tMQorCW1vdmRxdQkzMiglZWF4KSwgJXhtbTIKKwltb3ZkcXUJNDgoJWVheCksICV4bW0zCisKKwlsZWFsCTY0KCVlZHgpLCAlZWRpCisJYW5kbAkkLTY0LCAlZWRpCisJc3VibAklZWR4LCAlZWF4CisKKwltb3ZkcXUJKCVlYXgsICVlZGkpLCAleG1tNAorCW1vdmRxdQkxNiglZWF4LCAlZWRpKSwgJXhtbTUKKwltb3ZkcXUJMzIoJWVheCwgJWVkaSksICV4bW02CisJbW92ZHF1CTQ4KCVlYXgsICVlZGkpLCAleG1tNworCisJbW92ZHF1CSV4bW0wLCAoJWVkeCkKKwltb3ZkcXUJJXhtbTEsIDE2KCVlZHgpCisJbW92ZHF1CSV4bW0yLCAzMiglZWR4KQorCW1vdmRxdQkleG1tMywgNDgoJWVkeCkKKwltb3ZkcWEJJXhtbTQsICglZWRpKQorCW1vdmFwcwkleG1tNSwgMTYoJWVkaSkKKwltb3ZhcHMJJXhtbTYsIDMyKCVlZGkpCisJbW92YXBzCSV4bW03LCA0OCglZWRpKQorCWFkZGwJJDY0LCAlZWRpCisKKwlsZWFsCSglZWR4LCAlZWN4KSwgJWVieAorCWFuZGwJJC02NCwgJWVieAorCWNtcAklZWRpLCAlZWJ4CisJamJlCUwobW1fY29weV9yZW1haW5pbmdfZm9yd2FyZCkKKworCWNtcAkkU0hBUkVEX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorCWphZQlMKG1tX2xhcmdlX3BhZ2VfbG9vcF9mb3J3YXJkKQorCisJLnAyYWxpZ24gNAorTChtbV9tYWluX2xvb3BfZm9yd2FyZCk6CisKKwlwcmVmZXRjaHQwIDEyOCglZWF4LCAlZWRpKQorCisJbW92ZHF1CSglZWF4LCAlZWRpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVheCwgJWVkaSksICV4bW0xCisJbW92ZHF1CTMyKCVlYXgsICVlZGkpLCAleG1tMgorCW1vdmRxdQk0OCglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTAsICglZWRpKQorCW1vdmFwcwkleG1tMSwgMTYoJWVkaSkKKwltb3ZhcHMJJXhtbTIsIDMyKCVlZGkpCisJbW92YXBzCSV4bW0zLCA0OCglZWRpKQorCWxlYWwJNjQoJWVkaSksICVlZGkKKwljbXAJJWVkaSwgJWVieAorCWphCUwobW1fbWFpbl9sb29wX2ZvcndhcmQpCisKK0wobW1fY29weV9yZW1haW5pbmdfZm9yd2FyZCk6CisJYWRkbAklZWR4LCAlZWN4CisJc3VibAklZWRpLCAlZWN4CisvKiBXZSBjb3BpZWQgYWxsIHVwIHRpbGwgJWVkaSBwb3NpdGlvbiBpbiB0aGUgZHN0LgorCUluICVlY3ggbm93IGlzIGhvdyBtYW55IGJ5dGVzIGFyZSBsZWZ0IHRvIGNvcHkuCisJTm93IHdlIG5lZWQgdG8gYWR2YW5jZSAlZXNpLiAqLworCWxlYWwJKCVlZGksICVlYXgpLCAlZXNpCisKK0wobW1fcmVtYWluaW5nXzBfNjRfYnl0ZXNfZm9yd2FyZCk6CisJY21wCSQzMiwgJWVjeAorCWphCUwobW1fcmVtYWluaW5nXzMzXzY0X2J5dGVzX2ZvcndhcmQpCisJY21wCSQxNiwgJWVjeAorCWphCUwobW1fcmVtYWluaW5nXzE3XzMyX2J5dGVzX2ZvcndhcmQpCisJdGVzdGwJJWVjeCwgJWVjeAorCS5wMmFsaWduIDQsLDIKKwlqZQlMKG1tX3JldHVybl9wb3BfYWxsKQorCisJY21wYgkkOCwgJWNsCisJamEJTChtbV9yZW1haW5pbmdfOV8xNl9ieXRlc19mb3J3YXJkKQorCWNtcGIJJDQsICVjbAorCS5wMmFsaWduIDQsLDUKKwlqYQlMKG1tX3JlbWFpbmluZ181XzhfYnl0ZXNfZm9yd2FyZCkKKwljbXBiCSQyLCAlY2wKKwkucDJhbGlnbiA0LCwxCisJamEJTChtbV9yZW1haW5pbmdfM180X2J5dGVzX2ZvcndhcmQpCisJbW92emJsCS0xKCVlc2ksJWVjeCksICVlYXgKKwltb3Z6YmwJKCVlc2kpLCAlZWJ4CisJbW92YgklYWwsIC0xKCVlZGksJWVjeCkKKwltb3ZiCSVibCwgKCVlZGkpCisJam1wCUwobW1fcmV0dXJuX3BvcF9hbGwpCisKK0wobW1fcmVtYWluaW5nXzMzXzY0X2J5dGVzX2ZvcndhcmQpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92ZHF1CTE2KCVlc2kpLCAleG1tMQorCW1vdmRxdQktMzIoJWVzaSwgJWVjeCksICV4bW0yCisJbW92ZHF1CS0xNiglZXNpLCAlZWN4KSwgJXhtbTMKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmRxdQkleG1tMSwgMTYoJWVkaSkKKwltb3ZkcXUJJXhtbTIsIC0zMiglZWRpLCAlZWN4KQorCW1vdmRxdQkleG1tMywgLTE2KCVlZGksICVlY3gpCisJam1wCUwobW1fcmV0dXJuX3BvcF9hbGwpCisKK0wobW1fcmVtYWluaW5nXzE3XzMyX2J5dGVzX2ZvcndhcmQpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92ZHF1CS0xNiglZXNpLCAlZWN4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmRxdQkleG1tMSwgLTE2KCVlZGksICVlY3gpCisJam1wCUwobW1fcmV0dXJuX3BvcF9hbGwpCisKK0wobW1fcmVtYWluaW5nXzlfMTZfYnl0ZXNfZm9yd2FyZCk6CisJbW92cQkoJWVzaSksICV4bW0wCisJbW92cQktOCglZXNpLCAlZWN4KSwgJXhtbTEKKwltb3ZxCSV4bW0wLCAoJWVkaSkKKwltb3ZxCSV4bW0xLCAtOCglZWRpLCAlZWN4KQorCWptcAlMKG1tX3JldHVybl9wb3BfYWxsKQorCitMKG1tX3JlbWFpbmluZ181XzhfYnl0ZXNfZm9yd2FyZCk6CisJbW92bAkoJWVzaSksICVlYXgKKwltb3ZsCS00KCVlc2ksJWVjeCksICVlYngKKwltb3ZsCSVlYXgsICglZWRpKQorCW1vdmwJJWVieCwgLTQoJWVkaSwlZWN4KQorCWptcAlMKG1tX3JldHVybl9wb3BfYWxsKQorCitMKG1tX3JlbWFpbmluZ18zXzRfYnl0ZXNfZm9yd2FyZCk6CisJbW92endsCS0yKCVlc2ksJWVjeCksICVlYXgKKwltb3Z6d2wJKCVlc2kpLCAlZWJ4CisJbW92dwklYXgsIC0yKCVlZGksJWVjeCkKKwltb3Z3CSVieCwgKCVlZGkpCisJam1wCUwobW1fcmV0dXJuX3BvcF9hbGwpCisKK0wobW1fbGVuXzBfMTZfYnl0ZXNfZm9yd2FyZCk6CisJdGVzdGIJJDI0LCAlY2wKKwlqbmUJTChtbV9sZW5fOV8xNl9ieXRlc19mb3J3YXJkKQorCXRlc3RiCSQ0LCAlY2wKKwkucDJhbGlnbiA0LCw1CisJam5lCUwobW1fbGVuXzVfOF9ieXRlc19mb3J3YXJkKQorCXRlc3RsCSVlY3gsICVlY3gKKwkucDJhbGlnbiA0LCwyCisJamUJTChtbV9yZXR1cm4pCisJdGVzdGIJJDIsICVjbAorCS5wMmFsaWduIDQsLDEKKwlqbmUJTChtbV9sZW5fMl80X2J5dGVzX2ZvcndhcmQpCisJbW92emJsCS0xKCVlYXgsJWVjeCksICVlYngKKwltb3Z6YmwJKCVlYXgpLCAlZWF4CisJbW92YgklYmwsIC0xKCVlZHgsJWVjeCkKKwltb3ZiCSVhbCwgKCVlZHgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl8yXzRfYnl0ZXNfZm9yd2FyZCk6CisJbW92endsCS0yKCVlYXgsJWVjeCksICVlYngKKwltb3Z6d2wJKCVlYXgpLCAlZWF4CisJbW92dwklYngsIC0yKCVlZHgsJWVjeCkKKwltb3Z3CSVheCwgKCVlZHgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl81XzhfYnl0ZXNfZm9yd2FyZCk6CisJbW92bAkoJWVheCksICVlYngKKwltb3ZsCS00KCVlYXgsJWVjeCksICVlYXgKKwltb3ZsCSVlYngsICglZWR4KQorCW1vdmwJJWVheCwgLTQoJWVkeCwlZWN4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fOV8xNl9ieXRlc19mb3J3YXJkKToKKwltb3ZxCSglZWF4KSwgJXhtbTAKKwltb3ZxCS04KCVlYXgsICVlY3gpLCAleG1tMQorCW1vdnEJJXhtbTAsICglZWR4KQorCW1vdnEJJXhtbTEsIC04KCVlZHgsICVlY3gpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX3JlY2FsY19sZW4pOgorLyogQ29tcHV0ZSBpbiAlZWN4IGhvdyBtYW55IGJ5dGVzIGFyZSBsZWZ0IHRvIGNvcHkgYWZ0ZXIKKwl0aGUgbWFpbiBsb29wIHN0b3BzLiAgKi8KKwltb3ZsCSVlYngsICVlY3gKKwlzdWJsCSVlZHgsICVlY3gKKy8qIFRoZSBjb2RlIGZvciBjb3B5aW5nIGJhY2t3YXJkcy4gICovCitMKG1tX2xlbl8wX29yX21vcmVfYmFja3dhcmQpOgorCisvKiBOb3cgZG8gY2hlY2tzIGZvciBsZW5ndGhzLiBXZSBkbyBbMC4uMTZdLCBbMTYuLjMyXSwgWzMyLi42NF0sIFs2NC4uMTI4XQorCXNlcGFyYXRlbHkuICAqLworCWNtcAkkMTYsICVlY3gKKwlqYmUJTChtbV9sZW5fMF8xNl9ieXRlc19iYWNrd2FyZCkKKworCWNtcGwJJDMyLCAlZWN4CisJamcJTChtbV9sZW5fMzJfb3JfbW9yZV9iYWNrd2FyZCkKKworLyogQ29weSBbMC4uMzJdIGFuZCByZXR1cm4uICAqLworCW1vdmRxdQkoJWVheCksICV4bW0wCisJbW92ZHF1CS0xNiglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWR4KQorCW1vdmRxdQkleG1tMSwgLTE2KCVlZHgsICVlY3gpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl8zMl9vcl9tb3JlX2JhY2t3YXJkKToKKwljbXBsCSQ2NCwgJWVjeAorCWpnCUwobW1fbGVuXzY0X29yX21vcmVfYmFja3dhcmQpCisKKy8qIENvcHkgWzAuLjY0XSBhbmQgcmV0dXJuLiAgKi8KKwltb3ZkcXUJKCVlYXgpLCAleG1tMAorCW1vdmRxdQkxNiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTE2KCVlYXgsICVlY3gpLCAleG1tMgorCW1vdmRxdQktMzIoJWVheCwgJWVjeCksICV4bW0zCisJbW92ZHF1CSV4bW0wLCAoJWVkeCkKKwltb3ZkcXUJJXhtbTEsIDE2KCVlZHgpCisJbW92ZHF1CSV4bW0yLCAtMTYoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTMsIC0zMiglZWR4LCAlZWN4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fNjRfb3JfbW9yZV9iYWNrd2FyZCk6CisJY21wbAkkMTI4LCAlZWN4CisJamcJTChtbV9sZW5fMTI4X29yX21vcmVfYmFja3dhcmQpCisKKy8qIENvcHkgWzAuLjEyOF0gYW5kIHJldHVybi4gICovCisJbW92ZHF1CSglZWF4KSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVheCksICV4bW0xCisJbW92ZHF1CTMyKCVlYXgpLCAleG1tMgorCW1vdmRxdQk0OCglZWF4KSwgJXhtbTMKKwltb3ZkcXUJLTY0KCVlYXgsICVlY3gpLCAleG1tNAorCW1vdmRxdQktNDgoJWVheCwgJWVjeCksICV4bW01CisJbW92ZHF1CS0zMiglZWF4LCAlZWN4KSwgJXhtbTYKKwltb3ZkcXUJLTE2KCVlYXgsICVlY3gpLCAleG1tNworCW1vdmRxdQkleG1tMCwgKCVlZHgpCisJbW92ZHF1CSV4bW0xLCAxNiglZWR4KQorCW1vdmRxdQkleG1tMiwgMzIoJWVkeCkKKwltb3ZkcXUJJXhtbTMsIDQ4KCVlZHgpCisJbW92ZHF1CSV4bW00LCAtNjQoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTUsIC00OCglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tNiwgLTMyKCVlZHgsICVlY3gpCisJbW92ZHF1CSV4bW03LCAtMTYoJWVkeCwgJWVjeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzEyOF9vcl9tb3JlX2JhY2t3YXJkKToKKwlQVVNIICglZXNpKQorCVBVU0ggKCVlZGkpCisKKy8qIEFsaWduaW5nIHRoZSBhZGRyZXNzIG9mIGRlc3RpbmF0aW9uLiBXZSBuZWVkIHRvIHNhdmUKKwkxNiBiaXRzIGZyb20gdGhlIHNvdXJjZSBpbiBvcmRlciBub3QgdG8gb3ZlcndyaXRlIHRoZW0uICAqLworCW1vdmRxdQktMTYoJWVheCwgJWVjeCksICV4bW0wCisJbW92ZHF1CS0zMiglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcXUJLTQ4KCVlYXgsICVlY3gpLCAleG1tMgorCW1vdmRxdQktNjQoJWVheCwgJWVjeCksICV4bW0zCisKKwlsZWFsCSglZWR4LCAlZWN4KSwgJWVkaQorCWFuZGwJJC02NCwgJWVkaQorCisJbW92bAklZWF4LCAlZXNpCisJc3VibAklZWR4LCAlZXNpCisKKwltb3ZkcXUJLTE2KCVlZGksICVlc2kpLCAleG1tNAorCW1vdmRxdQktMzIoJWVkaSwgJWVzaSksICV4bW01CisJbW92ZHF1CS00OCglZWRpLCAlZXNpKSwgJXhtbTYKKwltb3ZkcXUJLTY0KCVlZGksICVlc2kpLCAleG1tNworCisJbW92ZHF1CSV4bW0wLCAtMTYoJWVkeCwgJWVjeCkKKwltb3ZkcXUJJXhtbTEsIC0zMiglZWR4LCAlZWN4KQorCW1vdmRxdQkleG1tMiwgLTQ4KCVlZHgsICVlY3gpCisJbW92ZHF1CSV4bW0zLCAtNjQoJWVkeCwgJWVjeCkKKwltb3ZkcWEJJXhtbTQsIC0xNiglZWRpKQorCW1vdmRxYQkleG1tNSwgLTMyKCVlZGkpCisJbW92ZHFhCSV4bW02LCAtNDgoJWVkaSkKKwltb3ZkcWEJJXhtbTcsIC02NCglZWRpKQorCWxlYWwJLTY0KCVlZGkpLCAlZWRpCisKKwlsZWFsCTY0KCVlZHgpLCAlZWJ4CisJYW5kbAkkLTY0LCAlZWJ4CisKKwljbXAJJWVkaSwgJWVieAorCWphZQlMKG1tX21haW5fbG9vcF9iYWNrd2FyZF9lbmQpCisKKwljbXAJJFNIQVJFRF9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKwlqYWUJTChtbV9sYXJnZV9wYWdlX2xvb3BfYmFja3dhcmQpCisKKwkucDJhbGlnbiA0CitMKG1tX21haW5fbG9vcF9iYWNrd2FyZCk6CisKKwlwcmVmZXRjaHQwIC0xMjgoJWVkaSwgJWVzaSkKKworCW1vdmRxdQktNjQoJWVkaSwgJWVzaSksICV4bW0wCisJbW92ZHF1CS00OCglZWRpLCAlZXNpKSwgJXhtbTEKKwltb3ZkcXUJLTMyKCVlZGksICVlc2kpLCAleG1tMgorCW1vdmRxdQktMTYoJWVkaSwgJWVzaSksICV4bW0zCisJbW92ZHFhCSV4bW0wLCAtNjQoJWVkaSkKKwltb3ZkcWEJJXhtbTEsIC00OCglZWRpKQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkaSkKKwlsZWFsCS02NCglZWRpKSwgJWVkaQorCWNtcAklZWRpLCAlZWJ4CisJamIJTChtbV9tYWluX2xvb3BfYmFja3dhcmQpCitMKG1tX21haW5fbG9vcF9iYWNrd2FyZF9lbmQpOgorCVBPUCAoJWVkaSkKKwlQT1AgKCVlc2kpCisJam1wCUwobW1fcmVjYWxjX2xlbikKKworLyogQ29weSBbMC4uMTZdIGFuZCByZXR1cm4uICAqLworTChtbV9sZW5fMF8xNl9ieXRlc19iYWNrd2FyZCk6CisJdGVzdGIJJDI0LCAlY2wKKwlqbnoJTChtbV9sZW5fOV8xNl9ieXRlc19iYWNrd2FyZCkKKwl0ZXN0YgkkNCwgJWNsCisJLnAyYWxpZ24gNCwsNQorCWpueglMKG1tX2xlbl81XzhfYnl0ZXNfYmFja3dhcmQpCisJdGVzdGwJJWVjeCwgJWVjeAorCS5wMmFsaWduIDQsLDIKKwlqZQlMKG1tX3JldHVybikKKwl0ZXN0YgkkMiwgJWNsCisJLnAyYWxpZ24gNCwsMQorCWpuZQlMKG1tX2xlbl8zXzRfYnl0ZXNfYmFja3dhcmQpCisJbW92emJsCS0xKCVlYXgsJWVjeCksICVlYngKKwltb3Z6YmwJKCVlYXgpLCAlZWF4CisJbW92YgklYmwsIC0xKCVlZHgsJWVjeCkKKwltb3ZiCSVhbCwgKCVlZHgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl8zXzRfYnl0ZXNfYmFja3dhcmQpOgorCW1vdnp3bAktMiglZWF4LCVlY3gpLCAlZWJ4CisJbW92endsCSglZWF4KSwgJWVheAorCW1vdncJJWJ4LCAtMiglZWR4LCVlY3gpCisJbW92dwklYXgsICglZWR4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fOV8xNl9ieXRlc19iYWNrd2FyZCk6CisJUFVTSCAoJWVzaSkKKwltb3ZsCS00KCVlYXgsJWVjeCksICVlYngKKwltb3ZsCS04KCVlYXgsJWVjeCksICVlc2kKKwltb3ZsCSVlYngsIC00KCVlZHgsJWVjeCkKKwltb3ZsCSVlc2ksIC04KCVlZHgsJWVjeCkKKwlzdWJsCSQ4LCAlZWN4CisJUE9QICglZXNpKQorCWptcAlMKG1tX2xlbl8wXzE2X2J5dGVzX2JhY2t3YXJkKQorCitMKG1tX2xlbl81XzhfYnl0ZXNfYmFja3dhcmQpOgorCW1vdmwJKCVlYXgpLCAlZWJ4CisJbW92bAktNCglZWF4LCVlY3gpLCAlZWF4CisJbW92bAklZWJ4LCAoJWVkeCkKKwltb3ZsCSVlYXgsIC00KCVlZHgsJWVjeCkKKworTChtbV9yZXR1cm4pOgorCW1vdmwJJWVkeCwgJWVheAorCVJFVFVSTgorCitMKG1tX3JldHVybl9wb3BfYWxsKToKKwltb3ZsCSVlZHgsICVlYXgKKwlQT1AgKCVlZGkpCisJUE9QICglZXNpKQorCVJFVFVSTgorCisvKiBCaWcgbGVuZ3RoIGNvcHkgZm9yd2FyZCBwYXJ0LiAgKi8KKworCS5wMmFsaWduIDQKK0wobW1fbGFyZ2VfcGFnZV9sb29wX2ZvcndhcmQpOgorCW1vdmRxdQkoJWVheCwgJWVkaSksICV4bW0wCisJbW92ZHF1CTE2KCVlYXgsICVlZGkpLCAleG1tMQorCW1vdmRxdQkzMiglZWF4LCAlZWRpKSwgJXhtbTIKKwltb3ZkcXUJNDgoJWVheCwgJWVkaSksICV4bW0zCisJbW92bnRkcQkleG1tMCwgKCVlZGkpCisJbW92bnRkcQkleG1tMSwgMTYoJWVkaSkKKwltb3ZudGRxCSV4bW0yLCAzMiglZWRpKQorCW1vdm50ZHEJJXhtbTMsIDQ4KCVlZGkpCisJbGVhbAk2NCglZWRpKSwgJWVkaQorCWNtcAklZWRpLCAlZWJ4CisJamEJTChtbV9sYXJnZV9wYWdlX2xvb3BfZm9yd2FyZCkKKwlzZmVuY2UKKwlqbXAJTChtbV9jb3B5X3JlbWFpbmluZ19mb3J3YXJkKQorCisvKiBCaWcgbGVuZ3RoIGNvcHkgYmFja3dhcmQgcGFydC4gICovCisJLnAyYWxpZ24gNAorTChtbV9sYXJnZV9wYWdlX2xvb3BfYmFja3dhcmQpOgorCW1vdmRxdQktNjQoJWVkaSwgJWVzaSksICV4bW0wCisJbW92ZHF1CS00OCglZWRpLCAlZXNpKSwgJXhtbTEKKwltb3ZkcXUJLTMyKCVlZGksICVlc2kpLCAleG1tMgorCW1vdmRxdQktMTYoJWVkaSwgJWVzaSksICV4bW0zCisJbW92bnRkcQkleG1tMCwgLTY0KCVlZGkpCisJbW92bnRkcQkleG1tMSwgLTQ4KCVlZGkpCisJbW92bnRkcQkleG1tMiwgLTMyKCVlZGkpCisJbW92bnRkcQkleG1tMywgLTE2KCVlZGkpCisJbGVhbAktNjQoJWVkaSksICVlZGkKKwljbXAJJWVkaSwgJWVieAorCWpiCUwobW1fbGFyZ2VfcGFnZV9sb29wX2JhY2t3YXJkKQorCXNmZW5jZQorCVBPUCAoJWVkaSkKKwlQT1AgKCVlc2kpCisJam1wCUwobW1fcmVjYWxjX2xlbikKKworRU5EIChNRU1NT1ZFKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLW1lbXNldC1zbG0uUyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1tZW1zZXQtc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwYmY3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1tZW1zZXQtc2xtLlMKQEAgLTAsMCArMSw4NDEgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaWZuZGVmIE1FTVNFVAorIyBkZWZpbmUgTUVNU0VUIG1lbXNldAorI2VuZGlmCisKKyNpZm5kZWYgTAorIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjZW5kaWYKKworI2lmbmRlZiBBTElHTgorIyBkZWZpbmUgQUxJR04obikJLnAyYWxpZ24gbgorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkJCS5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MJCQkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkJLmNmaV9yZXN0b3JlIHJlZworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CisjIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgorI2VuZGlmCisKKyNpZm5kZWYgRU5UUlkKKyMgZGVmaW5lIEVOVFJZKG5hbWUpCQkJXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247CQlcCisJLmdsb2JsIG5hbWU7CQkJXAorCS5wMmFsaWduIDQ7CQkJXAorbmFtZToJCQkJCVwKKwljZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTkQKKyMgZGVmaW5lIEVORChuYW1lKQkJCVwKKwljZmlfZW5kcHJvYzsJCQlcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworI2RlZmluZSBDRklfUFVTSChSRUcpCQkJCQkJXAorICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOwkJCQkJXAorICBjZmlfcmVsX29mZnNldCAoUkVHLCAwKQorCisjZGVmaW5lIENGSV9QT1AoUkVHKQkJCQkJCVwKKyAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CQkJCQlcCisgIGNmaV9yZXN0b3JlIChSRUcpCisKKyNkZWZpbmUgUFVTSChSRUcpCXB1c2hsIFJFRzsgQ0ZJX1BVU0ggKFJFRykKKyNkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKKworI2lmZGVmIFVTRV9BU19CWkVSTworIyBkZWZpbmUgREVTVAkJUEFSTVMKKyMgZGVmaW5lIExFTgkJREVTVCs0CisjIGRlZmluZSBTRVRSVE5WQUwKKyNlbHNlCisjIGRlZmluZSBERVNUCQlQQVJNUworIyBkZWZpbmUgQ0hSCQlERVNUKzQKKyMgZGVmaW5lIExFTgkJQ0hSKzQKKyMgZGVmaW5lIFNFVFJUTlZBTAltb3ZsIERFU1QoJWVzcCksICVlYXgKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKyMgZGVmaW5lIEVOVFJBTkNFCVBVU0ggKCVlYngpOworIyBkZWZpbmUgUkVUVVJOX0VORAlQT1AgKCVlYngpOyByZXQKKyMgZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORDsgQ0ZJX1BVU0ggKCVlYngpCisjIGRlZmluZSBQQVJNUwkJOAkJLyogUHJlc2VydmUgRUJYLiAgKi8KKyMgZGVmaW5lIEpNUFRCTChJLCBCKQlJIC0gQgorCisvKiBMb2FkIGFuIGVudHJ5IGluIGEganVtcCB0YWJsZSBpbnRvIEVCWCBhbmQgYnJhbmNoIHRvIGl0LiAgVEFCTEUgaXMgYQorICAganVtcCB0YWJsZSB3aXRoIHJlbGF0aXZlIG9mZnNldHMuICAgKi8KKyMgZGVmaW5lIEJSQU5DSF9UT19KTVBUQkxfRU5UUlkoVEFCTEUpCQkJCVwKKyAgICAvKiBXZSBmaXJzdCBsb2FkIFBDIGludG8gRUJYLiAgKi8JCQkJXAorICAgIGNhbGwJX194ODYuZ2V0X3BjX3RodW5rLmJ4OwkJCQlcCisgICAgLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhYmxlLiAgKi8JCQlcCisgICAgYWRkCQkkKFRBQkxFIC0gLiksICVlYng7CQkJCVwKKyAgICAvKiBHZXQgdGhlIGVudHJ5IGFuZCBjb252ZXJ0IHRoZSByZWxhdGl2ZSBvZmZzZXQgdG8gdGhlCVwKKyAgICAgICBhYnNvbHV0ZSBhZGRyZXNzLiAgKi8JCQkJCVwKKyAgICBhZGQJCSglZWJ4LCVlY3gsNCksICVlYng7CQkJCVwKKyAgICBhZGQJCSVlY3gsICVlZHg7CQkJCQlcCisgICAgLyogV2UgbG9hZGVkIHRoZSBqdW1wIHRhYmxlIGFuZCBhZGp1ZXN0ZWQgRURYLiBHby4gICovCVwKKyAgICBqbXAJCSolZWJ4CisKKwkuc2VjdGlvbgkuZ251LmxpbmtvbmNlLnQuX194ODYuZ2V0X3BjX3RodW5rLmJ4LCJheCIsQHByb2diaXRzCisJLmdsb2JsCV9feDg2LmdldF9wY190aHVuay5ieAorCS5oaWRkZW4JX194ODYuZ2V0X3BjX3RodW5rLmJ4CisJQUxJR04gKDQpCisJLnR5cGUJX194ODYuZ2V0X3BjX3RodW5rLmJ4LEBmdW5jdGlvbgorX194ODYuZ2V0X3BjX3RodW5rLmJ4OgorCW1vdmwJKCVlc3ApLCAlZWJ4CisJcmV0CisjZWxzZQorIyBkZWZpbmUgRU5UUkFOQ0UKKyMgZGVmaW5lIFJFVFVSTl9FTkQJcmV0CisjIGRlZmluZSBSRVRVUk4JCVJFVFVSTl9FTkQKKyMgZGVmaW5lIFBBUk1TCQk0CisjIGRlZmluZSBKTVBUQkwoSSwgQikJSQorCisvKiBCcmFuY2ggdG8gYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlLiAgVEFCTEUgaXMgYSBqdW1wIHRhYmxlIHdpdGgKKyAgIGFic29sdXRlIG9mZnNldHMuICAqLworIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSkJCQkJXAorICAgIGFkZAkJJWVjeCwgJWVkeDsJCQkJCVwKKyAgICBqbXAJCSpUQUJMRSgsJWVjeCw0KQorI2VuZGlmCisKKwkuc2VjdGlvbiAudGV4dC5zc2UyLCJheCIsQHByb2diaXRzCisJQUxJR04gKDQpCitFTlRSWSAoTUVNU0VUKQorCUVOVFJBTkNFCisKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCWNtcAkkMCwgJWVjeAorCWphCUwoMWJ5dGVvcm1vcmUpCisJU0VUUlROVkFMCisJUkVUVVJOCisKK0woMWJ5dGVvcm1vcmUpOgorI2lmZGVmIFVTRV9BU19CWkVSTworCXhvcgklZWF4LCAlZWF4CisjZWxzZQorCW1vdnpibAlDSFIoJWVzcCksICVlYXgKKwltb3ZiCSVhbCwgJWFoCisJLyogRmlsbCB0aGUgd2hvbGUgRUFYIHdpdGggcGF0dGVybi4gICovCisJbW92bAklZWF4LCAlZWR4CisJc2hsCSAkMTYsICVlYXgKKwlvcgklZWR4LCAlZWF4CisjZW5kaWYKKwltb3ZsCURFU1QoJWVzcCksICVlZHgKKwljbXAJJDEsICVlY3gKKwlqZQlMKDFieXRlKQorCWNtcAkkMTYsICVlY3gKKwlqYWUJTCgxNmJ5dGVzb3Jtb3JlKQorCisJY21wCSQ0LCAlZWN4CisJamIJTCg0Ynl0ZXNsZXNzKQorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92bAklZWF4LCAtNCglZWR4LCAlZWN4KQorCWNtcAkkOCwgJWVjeAorCWpiCUwoOGJ5dGVzbGVzcykKKwltb3ZsCSVlYXgsIDQoJWVkeCkKKwltb3ZsCSVlYXgsIC04KCVlZHgsICVlY3gpCitMKDhieXRlc2xlc3MpOgorCVNFVFJUTlZBTAorCVJFVFVSTgorCitMKDRieXRlc2xlc3MpOgorCW1vdncJJWF4LCAoJWVkeCkKKwltb3Z3CSVheCwgLTIoJWVkeCwgJWVjeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworTCgxYnl0ZSk6CisJbW92YgklYWwsICglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKDE2Ynl0ZXNvcm1vcmUpOgorI2lmZGVmIFVTRV9BU19CWkVSTworCXB4b3IJJXhtbTAsICV4bW0wCisjZWxzZQorCW1vdmQJJWVheCwgJXhtbTAKKwlwc2h1ZmQJJDAsICV4bW0wLCAleG1tMAorI2VuZGlmCisKKwljbXAJJDY0LCAlZWN4CisJamEJTCg2NGJ5dGVzbW9yZSkKKwltb3ZkcXUJJXhtbTAsICglZWR4KQorCW1vdmRxdQkleG1tMCwgLTE2KCVlZHgsICVlY3gpCisJY21wCSQzMiwgJWVjeAorCWpiZQlMKDMyYnl0ZXNsZXNzKQorCW1vdmRxdQkleG1tMCwgMTYoJWVkeCkKKwltb3ZkcXUJJXhtbTAsIC0zMiglZWR4LCAlZWN4KQorTCgzMmJ5dGVzbGVzcyk6CisJU0VUUlROVkFMCisJUkVUVVJOCisKK0woNjRieXRlc21vcmUpOgorCXRlc3RsCSQweGYsICVlZHgKKwlqeglMKGFsaWduZWRfMTYpCitMKG5vdF9hbGlnbmVkXzE2KToKKwltb3ZkcXUJJXhtbTAsICglZWR4KQorCW1vdmwJJWVkeCwgJWVheAorCWFuZAkkLTE2LCAlZWR4CisJYWRkCSQxNiwgJWVkeAorCXN1YgklZWR4LCAlZWF4CisJYWRkCSVlYXgsICVlY3gKKwltb3ZkCSV4bW0wLCAlZWF4CisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNik6CisJY21wCSQxMjgsICVlY3gKKwlqYWUJTCgxMjhieXRlc29ybW9yZSkKKworTChhbGlnbmVkXzE2X2xlc3MxMjhieXRlcyk6CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV8xNl8xMjhieXRlcykpCisKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNvcm1vcmUpOgorI2lmZGVmIFNIQVJFRF9DQUNIRV9TSVpFCisJUFVTSCAoJWVieCkKKwltb3YJJFNIQVJFRF9DQUNIRV9TSVpFLCAlZWJ4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCWNhbGwJX194ODYuZ2V0X3BjX3RodW5rLmJ4CisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwltb3YJJF9feDg2X3NoYXJlZF9jYWNoZV9zaXplQEdPVE9GRiglZWJ4KSwgJWVieAorIyBlbHNlCisJUFVTSCAoJWVieCkKKwltb3YJJF9feDg2X3NoYXJlZF9jYWNoZV9zaXplLCAlZWJ4CisjIGVuZGlmCisjZW5kaWYKKwljbXAJJWVieCwgJWVjeAorCWphZQlMKDEyOGJ5dGVzb3Jtb3JlX250X3N0YXJ0KQorCisJUE9QICglZWJ4KQorCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFCisJUFVTSCAoJWVieCkKKwltb3YJJERBVEFfQ0FDSEVfU0laRSwgJWVieAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwljYWxsCV9feDg2LmdldF9wY190aHVuay5ieAorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJbW92CSRfX3g4Nl9kYXRhX2NhY2hlX3NpemVAR09UT0ZGKCVlYngpLCAlZWJ4CisjIGVsc2UKKwlQVVNIICglZWJ4KQorCW1vdgkkX194ODZfZGF0YV9jYWNoZV9zaXplLCAlZWJ4CisjIGVuZGlmCisjZW5kaWYKKworCWNtcAklZWJ4LCAlZWN4CisJamFlCUwoMTI4Ynl0ZXNfTDJfbm9ybWFsKQorCXN1YmwJJDEyOCwgJWVjeAorTCgxMjhieXRlc29ybW9yZV9ub3JtYWwpOgorCXN1YgkkMTI4LCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MzAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NTAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NjAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NzAoJWVkeCkKKwlsZWEJMTI4KCVlZHgpLCAlZWR4CisJamIJTCgxMjhieXRlc2xlc3Nfbm9ybWFsKQorCisKKwlzdWIJJDEyOCwgJWVjeAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDEwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDIwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDMwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDQwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDUwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDYwKCVlZHgpCisJbW92YXBzCSV4bW0wLCAweDcwKCVlZHgpCisJbGVhCTEyOCglZWR4KSwgJWVkeAorCWphZQlMKDEyOGJ5dGVzb3Jtb3JlX25vcm1hbCkKKworTCgxMjhieXRlc2xlc3Nfbm9ybWFsKToKKwlsZWEJMTI4KCVlY3gpLCAlZWN4CisjaWYgZGVmaW5lZCBEQVRBX0NBQ0hFX1NJWkUgfHwgIShkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJUE9QICglZWJ4KQorI2VuZGlmCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV8xNl8xMjhieXRlcykpCisKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNfTDJfbm9ybWFsKToKKwlwcmVmZXRjaG50YQkweDM4MCglZWR4KQorCXByZWZldGNobnRhCTB4M2MwKCVlZHgpCisJc3ViCSQxMjgsICVlY3gKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCW1vdmFwcwkleG1tMCwgMHgxMCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHgyMCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHgzMCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg0MCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg1MCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg2MCglZWR4KQorCW1vdmFwcwkleG1tMCwgMHg3MCglZWR4KQorCWFkZAkkMTI4LCAlZWR4CisJY21wCSQxMjgsICVlY3gKKwlqYWUJTCgxMjhieXRlc19MMl9ub3JtYWwpCisKK0woMTI4Ynl0ZXNsZXNzX0wyX25vcm1hbCk6CisjaWYgZGVmaW5lZCBEQVRBX0NBQ0hFX1NJWkUgfHwgIShkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJUE9QICglZWJ4KQorI2VuZGlmCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV8xNl8xMjhieXRlcykpCisKK0woMTI4Ynl0ZXNvcm1vcmVfbnRfc3RhcnQpOgorCXN1YgklZWJ4LCAlZWN4CisJQUxJR04gKDQpCitMKDEyOGJ5dGVzb3Jtb3JlX3NoYXJlZF9jYWNoZV9sb29wKToKKwlwcmVmZXRjaG50YQkweDNjMCglZWR4KQorCXByZWZldGNobnRhCTB4MzgwKCVlZHgpCisJc3ViCSQweDgwLCAlZWJ4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MzAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NTAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NjAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NzAoJWVkeCkKKwlhZGQJJDB4ODAsICVlZHgKKwljbXAJJDB4ODAsICVlYngKKwlqYWUJTCgxMjhieXRlc29ybW9yZV9zaGFyZWRfY2FjaGVfbG9vcCkKKwljbXAJJDB4ODAsICVlY3gKKwlqYglMKHNoYXJlZF9jYWNoZV9sb29wX2VuZCkKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNvcm1vcmVfbnQpOgorCXN1YgkkMHg4MCwgJWVjeAorCW1vdm50ZHEJJXhtbTAsICglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZudGRxCSV4bW0wLCAweDIwKCVlZHgpCisJbW92bnRkcQkleG1tMCwgMHgzMCglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZudGRxCSV4bW0wLCAweDUwKCVlZHgpCisJbW92bnRkcQkleG1tMCwgMHg2MCglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4NzAoJWVkeCkKKwlhZGQJJDB4ODAsICVlZHgKKwljbXAJJDB4ODAsICVlY3gKKwlqYWUJTCgxMjhieXRlc29ybW9yZV9udCkKKwlzZmVuY2UKK0woc2hhcmVkX2NhY2hlX2xvb3BfZW5kKToKKyNpZiBkZWZpbmVkIFNIQVJFRF9DQUNIRV9TSVpFIHx8ICEoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVBPUCAoJWVieCkKKyNlbmRpZgorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCisKKwkucHVzaHNlY3Rpb24gLnJvZGF0YS5zc2UyLCJhIixAcHJvZ2JpdHMKKwlBTElHTiAoMikKK0wodGFibGVfMTZfMTI4Ynl0ZXMpOgorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8zOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl80OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl82OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl83OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85MGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85MWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85MmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85M2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85NGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85NWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85NmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85N2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85OGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl85OWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwOGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTEwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTEzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTIyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5wb3BzZWN0aW9uCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTEyKCVlZHgpCitMKGFsaWduZWRfMTZfOTZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTYoJWVkeCkKK0woYWxpZ25lZF8xNl84MGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04MCglZWR4KQorTChhbGlnbmVkXzE2XzY0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTY0KCVlZHgpCitMKGFsaWduZWRfMTZfNDhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDgoJWVkeCkKK0woYWxpZ25lZF8xNl8zMmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zMiglZWR4KQorTChhbGlnbmVkXzE2XzE2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTE2KCVlZHgpCitMKGFsaWduZWRfMTZfMGJ5dGVzKToKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExM2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTMoJWVkeCkKK0woYWxpZ25lZF8xNl85N2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05NyglZWR4KQorTChhbGlnbmVkXzE2XzgxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTgxKCVlZHgpCitMKGFsaWduZWRfMTZfNjVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjUoJWVkeCkKK0woYWxpZ25lZF8xNl80OWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00OSglZWR4KQorTChhbGlnbmVkXzE2XzMzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTMzKCVlZHgpCitMKGFsaWduZWRfMTZfMTdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTcoJWVkeCkKK0woYWxpZ25lZF8xNl8xYnl0ZXMpOgorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTE0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExNCglZWR4KQorTChhbGlnbmVkXzE2Xzk4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTk4KCVlZHgpCitMKGFsaWduZWRfMTZfODJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODIoJWVkeCkKK0woYWxpZ25lZF8xNl82NmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02NiglZWR4KQorTChhbGlnbmVkXzE2XzUwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTUwKCVlZHgpCitMKGFsaWduZWRfMTZfMzRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzQoJWVkeCkKK0woYWxpZ25lZF8xNl8xOGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xOCglZWR4KQorTChhbGlnbmVkXzE2XzJieXRlcyk6CisJbW92dwklYXgsIC0yKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTE1KCVlZHgpCitMKGFsaWduZWRfMTZfOTlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTkoJWVkeCkKK0woYWxpZ25lZF8xNl84M2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04MyglZWR4KQorTChhbGlnbmVkXzE2XzY3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTY3KCVlZHgpCitMKGFsaWduZWRfMTZfNTFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTEoJWVkeCkKK0woYWxpZ25lZF8xNl8zNWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zNSglZWR4KQorTChhbGlnbmVkXzE2XzE5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTE5KCVlZHgpCitMKGFsaWduZWRfMTZfM2J5dGVzKToKKwltb3Z3CSVheCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExNmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTYoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTAwKCVlZHgpCitMKGFsaWduZWRfMTZfODRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODQoJWVkeCkKK0woYWxpZ25lZF8xNl82OGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02OCglZWR4KQorTChhbGlnbmVkXzE2XzUyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTUyKCVlZHgpCitMKGFsaWduZWRfMTZfMzZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzYoJWVkeCkKK0woYWxpZ25lZF8xNl8yMGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yMCglZWR4KQorTChhbGlnbmVkXzE2XzRieXRlcyk6CisJbW92bAklZWF4LCAtNCglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTE3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExNyglZWR4KQorTChhbGlnbmVkXzE2XzEwMWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDEoJWVkeCkKK0woYWxpZ25lZF8xNl84NWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04NSglZWR4KQorTChhbGlnbmVkXzE2XzY5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTY5KCVlZHgpCitMKGFsaWduZWRfMTZfNTNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTMoJWVkeCkKK0woYWxpZ25lZF8xNl8zN2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zNyglZWR4KQorTChhbGlnbmVkXzE2XzIxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTIxKCVlZHgpCitMKGFsaWduZWRfMTZfNWJ5dGVzKToKKwltb3ZsCSVlYXgsIC01KCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMThieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTE4KCVlZHgpCitMKGFsaWduZWRfMTZfMTAyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwMiglZWR4KQorTChhbGlnbmVkXzE2Xzg2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTg2KCVlZHgpCitMKGFsaWduZWRfMTZfNzBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzAoJWVkeCkKK0woYWxpZ25lZF8xNl81NGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01NCglZWR4KQorTChhbGlnbmVkXzE2XzM4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTM4KCVlZHgpCitMKGFsaWduZWRfMTZfMjJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjIoJWVkeCkKK0woYWxpZ25lZF8xNl82Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTYoJWVkeCkKKwltb3Z3CSVheCwgLTIoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExOWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTkoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTAzKCVlZHgpCitMKGFsaWduZWRfMTZfODdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODcoJWVkeCkKK0woYWxpZ25lZF8xNl83MWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03MSglZWR4KQorTChhbGlnbmVkXzE2XzU1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTU1KCVlZHgpCitMKGFsaWduZWRfMTZfMzlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzkoJWVkeCkKK0woYWxpZ25lZF8xNl8yM2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yMyglZWR4KQorTChhbGlnbmVkXzE2XzdieXRlcyk6CisJbW92bAklZWF4LCAtNyglZWR4KQorCW1vdncJJWF4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTIwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyMCglZWR4KQorTChhbGlnbmVkXzE2XzEwNGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDQoJWVkeCkKK0woYWxpZ25lZF8xNl84OGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04OCglZWR4KQorTChhbGlnbmVkXzE2XzcyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTcyKCVlZHgpCitMKGFsaWduZWRfMTZfNTZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTYoJWVkeCkKK0woYWxpZ25lZF8xNl80MGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00MCglZWR4KQorTChhbGlnbmVkXzE2XzI0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTI0KCVlZHgpCitMKGFsaWduZWRfMTZfOGJ5dGVzKToKKwltb3ZxCSV4bW0wLCAtOCglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTIxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyMSglZWR4KQorTChhbGlnbmVkXzE2XzEwNWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDUoJWVkeCkKK0woYWxpZ25lZF8xNl84OWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04OSglZWR4KQorTChhbGlnbmVkXzE2XzczYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTczKCVlZHgpCitMKGFsaWduZWRfMTZfNTdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTcoJWVkeCkKK0woYWxpZ25lZF8xNl80MWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00MSglZWR4KQorTChhbGlnbmVkXzE2XzI1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTI1KCVlZHgpCitMKGFsaWduZWRfMTZfOWJ5dGVzKToKKwltb3ZxCSV4bW0wLCAtOSglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTIyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyMiglZWR4KQorTChhbGlnbmVkXzE2XzEwNmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDYoJWVkeCkKK0woYWxpZ25lZF8xNl85MGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05MCglZWR4KQorTChhbGlnbmVkXzE2Xzc0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTc0KCVlZHgpCitMKGFsaWduZWRfMTZfNThieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTgoJWVkeCkKK0woYWxpZ25lZF8xNl80MmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00MiglZWR4KQorTChhbGlnbmVkXzE2XzI2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTI2KCVlZHgpCitMKGFsaWduZWRfMTZfMTBieXRlcyk6CisJbW92cQkleG1tMCwgLTEwKCVlZHgpCisJbW92dwklYXgsIC0yKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTIzKCVlZHgpCitMKGFsaWduZWRfMTZfMTA3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwNyglZWR4KQorTChhbGlnbmVkXzE2XzkxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTkxKCVlZHgpCitMKGFsaWduZWRfMTZfNzVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzUoJWVkeCkKK0woYWxpZ25lZF8xNl81OWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01OSglZWR4KQorTChhbGlnbmVkXzE2XzQzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQzKCVlZHgpCitMKGFsaWduZWRfMTZfMjdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjcoJWVkeCkKK0woYWxpZ25lZF8xNl8xMWJ5dGVzKToKKwltb3ZxCSV4bW0wLCAtMTEoJWVkeCkKKwltb3Z3CSVheCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyNGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjQoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTA4KCVlZHgpCitMKGFsaWduZWRfMTZfOTJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTIoJWVkeCkKK0woYWxpZ25lZF8xNl83NmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03NiglZWR4KQorTChhbGlnbmVkXzE2XzYwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTYwKCVlZHgpCitMKGFsaWduZWRfMTZfNDRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDQoJWVkeCkKK0woYWxpZ25lZF8xNl8yOGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yOCglZWR4KQorTChhbGlnbmVkXzE2XzEyYnl0ZXMpOgorCW1vdnEJJXhtbTAsIC0xMiglZWR4KQorCW1vdmwJJWVheCwgLTQoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyNWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjUoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTA5KCVlZHgpCitMKGFsaWduZWRfMTZfOTNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTMoJWVkeCkKK0woYWxpZ25lZF8xNl83N2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03NyglZWR4KQorTChhbGlnbmVkXzE2XzYxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTYxKCVlZHgpCitMKGFsaWduZWRfMTZfNDVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDUoJWVkeCkKK0woYWxpZ25lZF8xNl8yOWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yOSglZWR4KQorTChhbGlnbmVkXzE2XzEzYnl0ZXMpOgorCW1vdnEJJXhtbTAsIC0xMyglZWR4KQorCW1vdmwJJWVheCwgLTUoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyNmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjYoJWVkeCkKK0woYWxpZ25lZF8xNl8xMTBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTEwKCVlZHgpCitMKGFsaWduZWRfMTZfOTRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTQoJWVkeCkKK0woYWxpZ25lZF8xNl83OGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03OCglZWR4KQorTChhbGlnbmVkXzE2XzYyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTYyKCVlZHgpCitMKGFsaWduZWRfMTZfNDZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDYoJWVkeCkKK0woYWxpZ25lZF8xNl8zMGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zMCglZWR4KQorTChhbGlnbmVkXzE2XzE0Ynl0ZXMpOgorCW1vdnEJJXhtbTAsIC0xNCglZWR4KQorCW1vdmwJJWVheCwgLTYoJWVkeCkKKwltb3Z3CSVheCwgLTIoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyN2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjcoJWVkeCkKK0woYWxpZ25lZF8xNl8xMTFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTExKCVlZHgpCitMKGFsaWduZWRfMTZfOTVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTUoJWVkeCkKK0woYWxpZ25lZF8xNl83OWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03OSglZWR4KQorTChhbGlnbmVkXzE2XzYzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTYzKCVlZHgpCitMKGFsaWduZWRfMTZfNDdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDcoJWVkeCkKK0woYWxpZ25lZF8xNl8zMWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zMSglZWR4KQorTChhbGlnbmVkXzE2XzE1Ynl0ZXMpOgorCW1vdnEJJXhtbTAsIC0xNSglZWR4KQorCW1vdmwJJWVheCwgLTcoJWVkeCkKKwltb3Z3CSVheCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk5fRU5ECisKK0VORCAoTUVNU0VUKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cGNweS1zbG0uUyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHBjcHktc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWM0M2ZhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHBjcHktc2xtLlMKQEAgLTAsMCArMSwzMyBAQAorLyoNCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uDQorQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyovDQorDQorI2RlZmluZSBVU0VfQVNfU1RQQ1BZDQorI2RlZmluZSBTVFJDUFkgc3RwY3B5DQorI2luY2x1ZGUgInNzZTItc3RyY3B5LXNsbS5TIg0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHBuY3B5LXNsbS5TIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cG5jcHktc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1YzBkMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHBuY3B5LXNsbS5TCkBAIC0wLDAgKzEsMzQgQEAKKy8qDQorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbg0KK0FsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisqLw0KKw0KKyNkZWZpbmUgVVNFX0FTX1NUUk5DUFkNCisjZGVmaW5lIFVTRV9BU19TVFBDUFkNCisjZGVmaW5lIFNUUkNQWSBzdHBuY3B5DQorI2luY2x1ZGUgInNzZTItc3RyY3B5LXNsbS5TIg0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHJjcHktc2xtLlMgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RyY3B5LXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1ZDg0YjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTItc3RyY3B5LXNsbS5TCkBAIC0wLDAgKzEsMjE1NyBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkgICAgICAgICAgICAgXAorCS50eXBlIG5hbWUsIEBmdW5jdGlvbjsgICBcCisJLmdsb2JsIG5hbWU7ICAgICAgICAgICAgIFwKKwkucDJhbGlnbiA0OyAgICAgICAgICAgICAgXAorbmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpICAgICAgICAgICAgICAgXAorCWNmaV9lbmRwcm9jOyAgICAgICAgICAgICBcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworI2RlZmluZSBDRklfUFVTSChSRUcpICAgICAgICAgICAgICAgICAgXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7ICAgICBcCisJY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKKworI2RlZmluZSBDRklfUE9QKFJFRykgICAgICAgICAgICAgICAgICAgXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQpOyAgICBcCisJY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykgcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorI2RlZmluZSBQT1AoUkVHKSBwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQorCisjaWZuZGVmIFNUUkNQWQorIyBkZWZpbmUgU1RSQ1BZICBzdHJjcHkKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FTX1NUUE5DUFkKKyMgZGVmaW5lIFVTRV9BU19TVFJOQ1BZCisjIGRlZmluZSBVU0VfQVNfU1RQQ1BZCisjZW5kaWYKKworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjIGRlZmluZSBQQVJNUyAgMTYKKyMgZGVmaW5lIEVOVFJBTkNFIFBVU0goJWVieCk7IFBVU0goJWVzaSk7IFBVU0goJWVkaSkKKyMgZGVmaW5lIFJFVFVSTiAgUE9QKCVlZGkpOyBQT1AoJWVzaSk7IFBPUCglZWJ4KTsgcmV0OyBDRklfUFVTSCglZWJ4KTsgQ0ZJX1BVU0goJWVkaSk7IENGSV9QVVNIKCVlZGkpOworI2Vsc2UKKyMgZGVmaW5lIFBBUk1TICAxMgorIyBkZWZpbmUgRU5UUkFOQ0UgUFVTSCglZXNpKTsgUFVTSCglZWRpKQorIyBkZWZpbmUgUkVUVVJOICBQT1AoJWVkaSk7IFBPUCglZXNpKTsgcmV0OyBDRklfUFVTSCglZXNpKTsgQ0ZJX1BVU0goJWVkaSk7CisjZW5kaWYKKworI2RlZmluZSBTVFIxICBQQVJNUworI2RlZmluZSBTVFIyICBTVFIxKzQKKyNkZWZpbmUgTEVOICBTVFIyKzQKKworCisjaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKyMgZGVmaW5lIEpNUFRCTChJLCBCKQlJIC0gQgorCisvKiBMb2FkIGFuIGVudHJ5IGluIGEganVtcCB0YWJsZSBpbnRvIEVDWCBhbmQgYnJhbmNoIHRvIGl0LiAgVEFCTEUgaXMgYQorCWp1bXAJdGFibGUgd2l0aCByZWxhdGl2ZSBvZmZzZXRzLiAgSU5ERVggaXMgYSByZWdpc3RlciBjb250YWlucyB0aGUKKwlpbmRleAlpbnRvIHRoZSBqdW1wIHRhYmxlLiAgIFNDQUxFIGlzIHRoZSBzY2FsZSBvZiBJTkRFWC4gKi8KKworIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSwgSU5ERVgsIFNDQUxFKSAgICAgICAgICAgIFwKKwkvKiBXZSBmaXJzdCBsb2FkIFBDIGludG8gRUNYLiAgKi8gICAgICAgICAgICAgICAgICAgICAgIFwKKwljYWxsCV9feDg2LmdldF9wY190aHVuay5jeDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUganVtcCB0YWJsZS4gICovICAgICAgICAgICAgICAgXAorCWFkZGwJJChUQUJMRSAtIC4pLCAlZWN4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS8qIEdldCB0aGUgZW50cnkgYW5kIGNvbnZlcnQgdGhlIHJlbGF0aXZlIG9mZnNldCB0byB0aGUgXAorCWFic29sdXRlCWFkZHJlc3MuICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJYWRkbAkoJWVjeCxJTkRFWCxTQ0FMRSksICVlY3g7ICAgICAgICAgICAgICAgICAgICAgICBcCisJLyogV2UgbG9hZGVkIHRoZSBqdW1wIHRhYmxlIGFuZCBhZGp1ZXN0ZWQgRUNYLiBHby4gICovICBcCisJam1wCSolZWN4CisjZWxzZQorIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkKKworLyogQnJhbmNoIHRvIGFuIGVudHJ5IGluIGEganVtcCB0YWJsZS4gIFRBQkxFIGlzIGEganVtcCB0YWJsZSB3aXRoCisJYWJzb2x1dGUJb2Zmc2V0cy4gIElOREVYIGlzIGEgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGluZGV4IGludG8gdGhlCisJanVtcAl0YWJsZS4gIFNDQUxFIGlzIHRoZSBzY2FsZSBvZiBJTkRFWC4gKi8KKworIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSwgSU5ERVgsIFNDQUxFKQkJXAorCWptcAkqVEFCTEUoLElOREVYLFNDQUxFKQorI2VuZGlmCisKKy50ZXh0CitFTlRSWSAoU1RSQ1BZKQorCUVOVFJBTkNFCisJbW92CVNUUjEoJWVzcCksICVlZGkKKwltb3YJU1RSMiglZXNwKSwgJWVzaQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJbW92bAlMRU4oJWVzcCksICVlYngKKwl0ZXN0CSVlYngsICVlYngKKwlqeglMKEV4aXRaZXJvKQorI2VuZGlmCisKKwltb3YJJWVzaSwgJWVjeAorI2lmbmRlZiBVU0VfQVNfU1RQQ1BZCisJbW92CSVlZGksICVlYXggICAgICAvKiBzYXZlIHJlc3VsdCAqLworI2VuZGlmCisJYW5kCSQxNSwgJWVjeAorCWp6CUwoU291cmNlU3RyaW5nQWxpZ25tZW50WmVybykKKworCWFuZAkkLTE2LCAlZXNpCisJcHhvcgkleG1tMCwgJXhtbTAKKwlweG9yCSV4bW0xLCAleG1tMQorCisJcGNtcGVxYgkoJWVzaSksICV4bW0xCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlhZGQJJWVjeCwgJWVieAorI2VuZGlmCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzaHIJJWNsLCAlZWR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWxDYXNlMk9yQ2FzZTMpCisjZWxzZQorCWNtcAkkMTcsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsQ2FzZTJPckNhc2UzKQorI2VuZGlmCisjZW5kaWYKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsKQorCisJcGNtcGVxYgkxNiglZXNpKSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWNtcAkkMzIsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzMyQnl0ZXNDYXNlMk9yQ2FzZTMpCisjZWxzZQorCWNtcAkkMzMsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzMyQnl0ZXNDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKyNlbmRpZgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMzJCeXRlcykKKworCW1vdmRxdQkoJWVzaSwgJWVjeCksICV4bW0xICAgLyogY29weSAxNiBieXRlcyAqLworCW1vdmRxdQkleG1tMSwgKCVlZGkpCisKKwlzdWIJJWVjeCwgJWVkaQorCW1vdgklZWRpLCAlZWR4CisJbW92CSQxNiwgJWVjeAorCWFuZAkkMTUsICVlZHgKKwlqeglMKEFsaWduMTZCb3RoKQorCisvKiBJZiBzb3VyY2UgYWRyZXNzIGFsaWdubWVudCAhPSBkZXN0aW5hdGlvbiBhZHJlc3MgYWxpZ25tZW50ICovCisJLnAyYWxpZ24gNAorTChVbmFsaWduMTZCb3RoKToKKwltb3ZkcWEJKCVlc2ksICVlY3gpLCAleG1tMQorCW1vdmFwcwkxNiglZXNpLCAlZWN4KSwgJXhtbTIKKwltb3ZkcXUJJXhtbTEsICglZWRpLCAlZWN4KQorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlhZGQJJDE2LCAlZWN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDQ4LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTIpCisjZWxzZQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKyNlbmRpZgorCisJbW92YXBzCTE2KCVlc2ksICVlY3gpLCAleG1tMworCW1vdmRxdQkleG1tMiwgKCVlZGksICVlY3gpCisJcGNtcGVxYgkleG1tMywgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWFkZAkkMTYsICVlY3gKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMykKKyNlbHNlCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZhcHMJMTYoJWVzaSwgJWVjeCksICV4bW00CisJbW92ZHF1CSV4bW0zLCAoJWVkaSwgJWVjeCkKKwlwY21wZXFiCSV4bW00LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJYWRkCSQxNiwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW00KQorI2Vsc2UKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmFwcwkxNiglZXNpLCAlZWN4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTQsICglZWRpLCAlZWN4KQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlhZGQJJDE2LCAlZWN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTEpCisjZWxzZQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKyNlbmRpZgorCisJbW92YXBzCTE2KCVlc2ksICVlY3gpLCAleG1tMgorCW1vdmRxdQkleG1tMSwgKCVlZGksICVlY3gpCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWFkZAkkMTYsICVlY3gKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMikKKyNlbHNlCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZhcHMJMTYoJWVzaSwgJWVjeCksICV4bW0zCisJbW92ZHF1CSV4bW0yLCAoJWVkaSwgJWVjeCkKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJYWRkCSQxNiwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0zKQorI2Vsc2UKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmRxdQkleG1tMywgKCVlZGksICVlY3gpCisJbW92CSVlc2ksICVlZHgKKwlsZWEJMTYoJWVzaSwgJWVjeCksICVlc2kKKwlhbmQJJC0weDQwLCAlZXNpCisJc3ViCSVlc2ksICVlZHgKKwlzdWIJJWVkeCwgJWVkaQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJbGVhCTY0KzY0KCVlYngsICVlZHgpLCAlZWJ4CisjZW5kaWYKK0woVW5hbGlnbmVkNjRMb29wKToKKwltb3ZhcHMJKCVlc2kpLCAleG1tMgorCW1vdmFwcwkleG1tMiwgJXhtbTQKKwltb3ZhcHMJMTYoJWVzaSksICV4bW01CisJbW92YXBzCTMyKCVlc2kpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDgoJWVzaSksICV4bW03CisJcG1pbnViCSV4bW01LCAleG1tMgorCXBtaW51YgkleG1tNywgJXhtbTMKKwlwbWludWIJJXhtbTIsICV4bW0zCisJcGNtcGVxYgkleG1tMCwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ2NCwgJWVieAorCWpiZQlMKFVuYWxpZ25lZExlYXZlQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoVW5hbGlnbmVkNjRMZWF2ZSkKKworTChVbmFsaWduZWQ2NExvb3Bfc3RhcnQpOgorCWFkZAkkNjQsICVlZGkKKwlhZGQJJDY0LCAlZXNpCisJbW92ZHF1CSV4bW00LCAtNjQoJWVkaSkKKwltb3ZhcHMJKCVlc2kpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKwltb3ZkcXUJJXhtbTUsIC00OCglZWRpKQorCW1vdmFwcwkxNiglZXNpKSwgJXhtbTUKKwlwbWludWIJJXhtbTUsICV4bW0yCisJbW92YXBzCTMyKCVlc2kpLCAleG1tMworCW1vdmRxdQkleG1tNiwgLTMyKCVlZGkpCisJbW92YXBzCSV4bW0zLCAleG1tNgorCW1vdmRxdQkleG1tNywgLTE2KCVlZGkpCisJbW92YXBzCTQ4KCVlc2kpLCAleG1tNworCXBtaW51YgkleG1tNywgJXhtbTMKKwlwbWludWIJJXhtbTIsICV4bW0zCisJcGNtcGVxYgkleG1tMywgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ2NCwgJWVieAorCWpiZQlMKFVuYWxpZ25lZExlYXZlQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWR4LCAlZWR4CisJanoJTChVbmFsaWduZWQ2NExvb3Bfc3RhcnQpCisKK0woVW5hbGlnbmVkNjRMZWF2ZSk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwlweG9yCSV4bW0xLCAleG1tMQorCisJcGNtcGVxYgkleG1tNCwgJXhtbTAKKwlwY21wZXFiCSV4bW01LCAleG1tMQorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJcG1vdm1za2IgJXhtbTEsICVlY3gKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRfMCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRfMTYpCisKKwlwY21wZXFiCSV4bW02LCAleG1tMAorCXBjbXBlcWIJJXhtbTcsICV4bW0xCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlwbW92bXNrYiAleG1tMSwgJWVjeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZF8zMikKKworCWJzZgklZWN4LCAlZWR4CisJbW92ZHF1CSV4bW00LCAoJWVkaSkKKwltb3ZkcXUJJXhtbTUsIDE2KCVlZGkpCisJbW92ZHF1CSV4bW02LCAzMiglZWRpKQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk0OCglZWRpLCAlZWR4KSwgJWVheAorI2VuZGlmCisJbW92ZHF1CSV4bW03LCA0OCglZWRpKQorCWFkZAkkMTUsICVlYngKKwlzdWIJJWVkeCwgJWVieAorCWxlYQk0OSglZWRpLCAlZWR4KSwgJWVkaQorCWptcAlMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2Vsc2UKKwlhZGQJJDQ4LCAlZXNpCisJYWRkCSQ0OCwgJWVkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJWVkeCwgNCkKKyNlbmRpZgorCisvKiBJZiBzb3VyY2UgYWRyZXNzIGFsaWdubWVudCA9PSBkZXN0aW5hdGlvbiBhZHJlc3MgYWxpZ25tZW50ICovCisKK0woU291cmNlU3RyaW5nQWxpZ25tZW50WmVybyk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVlc2kpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWNtcAkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsMUNhc2UyT3JDYXNlMykKKyNlbHNlCisJY21wCSQxNywgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxQ2FzZTJPckNhc2UzKQorI2VuZGlmCisjZW5kaWYKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsMSkKKworCXBjbXBlcWIJMTYoJWVzaSksICV4bW0wCisJbW92ZHF1CSV4bW0xLCAoJWVkaSkKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wCSQzMiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMzJCeXRlczFDYXNlMk9yQ2FzZTMpCisjZWxzZQorCWNtcAkkMzMsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzMyQnl0ZXMxQ2FzZTJPckNhc2UzKQorI2VuZGlmCisjZW5kaWYKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzMyQnl0ZXMxKQorCisJbW92CSVlZGksICVlZHgKKwltb3YJJDE2LCAlZWN4CisJYW5kCSQxNSwgJWVkeAorCWpueglMKFVuYWxpZ24xNkJvdGgpCisKK0woQWxpZ24xNkJvdGgpOgorCW1vdmRxYQkoJWVzaSwgJWVjeCksICV4bW0xCisJbW92ZHFhCTE2KCVlc2ksICVlY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMSwgKCVlZGksICVlY3gpCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWFkZAkkMTYsICVlY3gKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNDgsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tMikKKyNlbHNlCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZkcWEJMTYoJWVzaSwgJWVjeCksICV4bW0zCisJbW92ZHFhCSV4bW0yLCAoJWVkaSwgJWVjeCkKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1htbTMpCisjZWxzZQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKyNlbmRpZgorCisJbW92ZHFhCTE2KCVlc2ksICVlY3gpLCAleG1tNAorCW1vdmRxYQkleG1tMywgKCVlZGksICVlY3gpCisJcGNtcGVxYgkleG1tNCwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW00KQorI2Vsc2UKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmRxYQkxNiglZXNpLCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJJXhtbTQsICglZWRpLCAlZWN4KQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlsZWEJMTYoJWVjeCksICVlY3gKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tMSkKKyNlbHNlCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZkcWEJMTYoJWVzaSwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0xLCAoJWVkaSwgJWVjeCkKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1htbTIpCisjZWxzZQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKyNlbmRpZgorCisJbW92ZHFhCTE2KCVlc2ksICVlY3gpLCAleG1tMworCW1vdmRxYQkleG1tMiwgKCVlZGksICVlY3gpCisJcGNtcGVxYgkleG1tMywgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW0zKQorI2Vsc2UKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCW1vdmRxYQkleG1tMywgKCVlZGksICVlY3gpCisJbW92CSVlc2ksICVlZHgKKwlsZWEJMTYoJWVzaSwgJWVjeCksICVlc2kKKwlhbmQJJC0weDQwLCAlZXNpCisJc3ViCSVlc2ksICVlZHgKKwlzdWIJJWVkeCwgJWVkaQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJbGVhCTY0KzY0KCVlYngsICVlZHgpLCAlZWJ4CisjZW5kaWYKK0woQWxpZ25lZDY0TG9vcCk6CisJbW92ZHFhCSglZXNpKSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisJbW92YXBzCTE2KCVlc2kpLCAleG1tNQorCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW02CisJbW92YXBzCTQ4KCVlc2kpLCAleG1tNworCXBtaW51YgkleG1tNSwgJXhtbTIKKwlwbWludWIJJXhtbTcsICV4bW0zCisJcG1pbnViCSV4bW0yLCAleG1tMworCXBjbXBlcWIJJXhtbTAsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChBbGlnbmVkTGVhdmVDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChBbGlnbmVkNjRMZWF2ZSkKKworTChBbGlnbmVkNjRMb29wX3N0YXJ0KToKKwlhZGQJJDY0LCAlZXNpCisJYWRkCSQ2NCwgJWVkaQorCW1vdmFwcwkleG1tNCwgLTY0KCVlZGkpCisJbW92ZHFhCSglZXNpKSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisJbW92YXBzCSV4bW01LCAtNDgoJWVkaSkKKwltb3ZhcHMJMTYoJWVzaSksICV4bW01CisJcG1pbnViCSV4bW01LCAleG1tMgorCW1vdmFwcwkzMiglZXNpKSwgJXhtbTMKKwltb3ZhcHMJJXhtbTYsIC0zMiglZWRpKQorCW1vdmRxYQkleG1tMywgJXhtbTYKKwltb3ZhcHMJJXhtbTcsIC0xNiglZWRpKQorCW1vdmFwcwk0OCglZXNpKSwgJXhtbTcKKwlwbWludWIJJXhtbTcsICV4bW0zCisJcG1pbnViCSV4bW0yLCAleG1tMworCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChBbGlnbmVkTGVhdmVDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlZHgsICVlZHgKKwlqeglMKEFsaWduZWQ2NExvb3Bfc3RhcnQpCisKK0woQWxpZ25lZDY0TGVhdmUpOgorCXB4b3IJJXhtbTAsICV4bW0wCisJcHhvcgkleG1tMSwgJXhtbTEKKworCXBjbXBlcWIJJXhtbTQsICV4bW0wCisJcGNtcGVxYgkleG1tNSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXBtb3Ztc2tiICV4bW0xLCAlZWN4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzXzApCisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzXzE2KQorCisJcGNtcGVxYgkleG1tNiwgJXhtbTAKKwlwY21wZXFiCSV4bW03LCAleG1tMQorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJcG1vdm1za2IgJXhtbTEsICVlY3gKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNfMzIpCisKKwlic2YJJWVjeCwgJWVkeAorCW1vdmRxYQkleG1tNCwgKCVlZGkpCisJbW92ZHFhCSV4bW01LCAxNiglZWRpKQorCW1vdmRxYQkleG1tNiwgMzIoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNDgoJWVkaSwgJWVkeCksICVlYXgKKyNlbmRpZgorCW1vdmRxYQkleG1tNywgNDgoJWVkaSkKKwlhZGQJJDE1LCAlZWJ4CisJc3ViCSVlZHgsICVlYngKKwlsZWEJNDkoJWVkaSwgJWVkeCksICVlZGkKKwlqbXAJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbHNlCisJYWRkCSQ0OCwgJWVzaQorCWFkZAkkNDgsICVlZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVlZHgsIDQpCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogQ2FzZTEgKi8KKyNpZm5kZWYgVVNFX0FTX1NUUk5DUFkKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlcyk6CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVjeCwgJWVzaQorCWJzZgklZWR4LCAlZWR4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlZWR4LCA0KQorI2VuZGlmCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsKToKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgklZWN4LCAlZWJ4CisjZW5kaWYKKwlhZGQJJWVjeCwgJWVzaQorCWJzZgklZWR4LCAlZWR4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlZWR4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzMyQnl0ZXMxKToKKwlhZGQJJDE2LCAlZXNpCisJYWRkCSQxNiwgJWVkaQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorI2VuZGlmCitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxKToKKwlic2YJJWVkeCwgJWVkeAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJWVkeCwgNCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8zMkJ5dGVzKToKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgklZWN4LCAlZWJ4CisjZW5kaWYKKwlic2YJJWVkeCwgJWVkeAorCWFkZAklZWN4LCAlZXNpCisJYWRkCSQxNiwgJWVkeAorCXN1YgklZWN4LCAlZWR4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlZWR4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNfMCk6CisJYnNmCSVlZHgsICVlZHgKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJKCVlZGksICVlZHgpLCAlZWF4CisjZW5kaWYKKwltb3ZkcWEJJXhtbTQsICglZWRpKQorCWFkZAkkNjMsICVlYngKKwlzdWIJJWVkeCwgJWVieAorCWxlYQkxKCVlZGksICVlZHgpLCAlZWRpCisJam1wCUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZWxzZQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJWVkeCwgNCkKKyNlbmRpZgorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNfMTYpOgorCWJzZgklZWN4LCAlZWR4CisJbW92ZHFhCSV4bW00LCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTYoJWVkaSwgJWVkeCksICVlYXgKKyNlbmRpZgorCW1vdmRxYQkleG1tNSwgMTYoJWVkaSkKKwlhZGQJJDQ3LCAlZWJ4CisJc3ViCSVlZHgsICVlYngKKwlsZWEJMTcoJWVkaSwgJWVkeCksICVlZGkKKwlqbXAJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbHNlCisJYWRkCSQxNiwgJWVzaQorCWFkZAkkMTYsICVlZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVlZHgsIDQpCisjZW5kaWYKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzXzMyKToKKwlic2YJJWVkeCwgJWVkeAorCW1vdmRxYQkleG1tNCwgKCVlZGkpCisJbW92ZHFhCSV4bW01LCAxNiglZWRpKQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzMiglZWRpLCAlZWR4KSwgJWVheAorI2VuZGlmCisJbW92ZHFhCSV4bW02LCAzMiglZWRpKQorCWFkZAkkMzEsICVlYngKKwlzdWIJJWVkeCwgJWVieAorCWxlYQkzMyglZWRpLCAlZWR4KSwgJWVkaQorCWptcAlMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2Vsc2UKKwlhZGQJJDMyLCAlZXNpCisJYWRkCSQzMiwgJWVkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJWVkeCwgNCkKKyNlbmRpZgorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRfMCk6CisJYnNmCSVlZHgsICVlZHgKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJKCVlZGksICVlZHgpLCAlZWF4CisjZW5kaWYKKwltb3ZkcXUJJXhtbTQsICglZWRpKQorCWFkZAkkNjMsICVlYngKKwlzdWIJJWVkeCwgJWVieAorCWxlYQkxKCVlZGksICVlZHgpLCAlZWRpCisJam1wCUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZWxzZQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJWVkeCwgNCkKKyNlbmRpZgorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRfMTYpOgorCWJzZgklZWN4LCAlZWR4CisJbW92ZHF1CSV4bW00LCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTYoJWVkaSwgJWVkeCksICVlYXgKKyNlbmRpZgorCW1vdmRxdQkleG1tNSwgMTYoJWVkaSkKKwlhZGQJJDQ3LCAlZWJ4CisJc3ViCSVlZHgsICVlYngKKwlsZWEJMTcoJWVkaSwgJWVkeCksICVlZGkKKwlqbXAJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbHNlCisJYWRkCSQxNiwgJWVzaQorCWFkZAkkMTYsICVlZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVlZHgsIDQpCisjZW5kaWYKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkXzMyKToKKwlic2YJJWVkeCwgJWVkeAorCW1vdmRxdQkleG1tNCwgKCVlZGkpCisJbW92ZHF1CSV4bW01LCAxNiglZWRpKQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzMiglZWRpLCAlZWR4KSwgJWVheAorI2VuZGlmCisJbW92ZHF1CSV4bW02LCAzMiglZWRpKQorCWFkZAkkMzEsICVlYngKKwlzdWIJJWVkeCwgJWVieAorCWxlYQkzMyglZWRpLCAlZWR4KSwgJWVkaQorCWptcAlMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2Vsc2UKKwlhZGQJJDMyLCAlZXNpCisJYWRkCSQzMiwgJWVkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJWVkeCwgNCkKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1htbTYpOgorCW1vdmRxYQkleG1tNiwgKCVlZGksICVlY3gpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzWG1tNSk6CisJbW92ZHFhCSV4bW01LCAoJWVkaSwgJWVjeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW00KToKKwltb3ZkcWEJJXhtbTQsICglZWRpLCAlZWN4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1htbTMpOgorCW1vdmRxYQkleG1tMywgKCVlZGksICVlY3gpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzWG1tMik6CisJbW92ZHFhCSV4bW0yLCAoJWVkaSwgJWVjeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW0xKToKKwltb3ZkcWEJJXhtbTEsICglZWRpLCAlZWN4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTYpOgorCW1vdmRxdQkleG1tNiwgKCVlZGksICVlY3gpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tNSk6CisJbW92ZHF1CSV4bW01LCAoJWVkaSwgJWVjeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW00KToKKwltb3ZkcXUJJXhtbTQsICglZWRpLCAlZWN4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTMpOgorCW1vdmRxdQkleG1tMywgKCVlZGksICVlY3gpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMSk6CisJbW92ZHF1CSV4bW0xLCAoJWVkaSwgJWVjeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNFeGl0KToKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVlZHgsIDQpCisKKy8qIENhc2UyICovCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKToKKwlhZGQJJDE2LCAlZWJ4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVjeCwgJWVzaQorCWJzZgklZWR4LCAlZWR4CisJY21wCSVlYngsICVlZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJWVieCwgNCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8zMkJ5dGVzQ2FzZTIpOgorCXN1YgklZWN4LCAlZWJ4CisJYWRkCSVlY3gsICVlc2kKKwlic2YJJWVkeCwgJWVkeAorCWFkZAkkMTYsICVlZHgKKwlzdWIJJWVjeCwgJWVkeAorCWNtcAklZWJ4LCAlZWR4CisJamIJTChDb3B5RnJvbTFUbzE2Qnl0ZXNFeGl0KQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVlYngsIDQpCisKK0woQ29weUZyb20xVG8xNkJ5dGVzVGFpbENhc2UyKToKKwlzdWIJJWVjeCwgJWVieAorCWFkZAklZWN4LCAlZXNpCisJYnNmCSVlZHgsICVlZHgKKwljbXAJJWVieCwgJWVkeAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzRXhpdCkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlZWJ4LCA0KQorCitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxQ2FzZTIpOgorCWJzZgklZWR4LCAlZWR4CisJY21wCSVlYngsICVlZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJWVieCwgNCkKKworLyogQ2FzZTIgb3IgQ2FzZTMsICBDYXNlMyAqLworCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpOgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKQorTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMyk6CisJYWRkCSQxNiwgJWVieAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlY3gsICVlc2kKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlZWJ4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzMyQnl0ZXNDYXNlMk9yQ2FzZTMpOgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMzJCeXRlc0Nhc2UyKQorCXN1YgklZWN4LCAlZWJ4CisJYWRkCSVlY3gsICVlc2kKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlZWJ4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsQ2FzZTJPckNhc2UzKToKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsQ2FzZTIpCisJc3ViCSVlY3gsICVlYngKKwlhZGQJJWVjeCwgJWVzaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVlYngsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMzJCeXRlczFDYXNlMk9yQ2FzZTMpOgorCWFkZAkkMTYsICVlZGkKKwlhZGQJJDE2LCAlZXNpCisJc3ViCSQxNiwgJWVieAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsMUNhc2UyT3JDYXNlMyk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVGFpbDFDYXNlMikKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlZWJ4LCA0KQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJLnAyYWxpZ24gNAorTChFeGl0MCk6CisjaWZkZWYgVVNFX0FTX1NUUENQWQorCW1vdgklZWRpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDEpOgorCW1vdmIJJWRoLCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCSglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDEsICVlYngKKwlsZWEJMSglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyKToKKwltb3Z3CSglZXNpKSwgJWR4CisJbW92dwklZHgsICglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMSglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDIsICVlYngKKwlsZWEJMiglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQzKToKKwltb3Z3CSglZXNpKSwgJWN4CisJbW92dwklY3gsICglZWRpKQorCW1vdmIJJWRoLCAyKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyKCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMywgJWVieAorCWxlYQkzKCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDQpOgorCW1vdmwJKCVlc2kpLCAlZWR4CisJbW92bAklZWR4LCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ0LCAlZWJ4CisJbGVhCTQoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0NSk6CisJbW92bAkoJWVzaSksICVlY3gKKwltb3ZiCSVkaCwgNCglZWRpKQorCW1vdmwJJWVjeCwgKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk0KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNSwgJWVieAorCWxlYQk1KCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDYpOgorCW1vdmwJKCVlc2kpLCAlZWN4CisJbW92dwk0KCVlc2kpLCAlZHgKKwltb3ZsCSVlY3gsICglZWRpKQorCW1vdncJJWR4LCA0KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk1KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNiwgJWVieAorCWxlYQk2KCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDcpOgorCW1vdmwJKCVlc2kpLCAlZWN4CisJbW92bAkzKCVlc2kpLCAlZWR4CisJbW92bAklZWN4LCAoJWVkaSkKKwltb3ZsCSVlZHgsIDMoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTYoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ3LCAlZWJ4CisJbGVhCTcoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0OCk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNyglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDgsICVlYngKKwlsZWEJOCglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ5KToKKwltb3ZscGQJKCVlc2kpLCAleG1tMAorCW1vdmIJJWRoLCA4KCVlZGkpCisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTgoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ5LCAlZWJ4CisJbGVhCTkoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTApOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92dwk4KCVlc2kpLCAlZHgKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdncJJWR4LCA4KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk5KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTAsICVlYngKKwlsZWEJMTAoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTEpOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92bAk3KCVlc2kpLCAlZWR4CisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZsCSVlZHgsIDcoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEwKCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTEsICVlYngKKwlsZWEJMTEoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTIpOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92bAk4KCVlc2kpLCAlZWR4CisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZsCSVlZHgsIDgoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTExKCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTIsICVlYngKKwlsZWEJMTIoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTMpOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92bHBkCTUoJWVzaSksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTEsIDUoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEyKCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTMsICVlYngKKwlsZWEJMTMoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTQpOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92bHBkCTYoJWVzaSksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTEsIDYoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEzKCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTQsICVlYngKKwlsZWEJMTQoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTUpOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92bHBkCTcoJWVzaSksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTEsIDcoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE0KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTUsICVlYngKKwlsZWEJMTUoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTYpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE1KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlsZWEJMTYoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTcpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJeG9yCSVjbCwgJWNsCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZiCSVjbCwgMTYoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE2KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTcsICVlYngKKwlsZWEJMTcoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTgpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92dwkxNiglZXNpKSwgJWN4CisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3Z3CSVjeCwgMTYoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE3KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTgsICVlYngKKwlsZWEJMTgoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTkpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bAkxNSglZXNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bAklZWN4LCAxNSglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTgoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxOSwgJWVieAorCWxlYQkxOSglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyMCk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZsCTE2KCVlc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZsCSVlY3gsIDE2KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxOSglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDIwLCAlZWJ4CisJbGVhCTIwKCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDIxKToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmwJMTYoJWVzaSksICVlY3gKKwl4b3IJJWRsLCAlZGwKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmwJJWVjeCwgMTYoJWVkaSkKKwltb3ZiCSVkbCwgMjAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTIwKCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMjEsICVlYngKKwlsZWEJMjEoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MjIpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bHBkCTE0KCVlc2kpLCAleG1tMworCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0zLCAxNCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjEoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQyMiwgJWVieAorCWxlYQkyMiglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyMyk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZscGQJMTUoJWVzaSksICV4bW0zCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTMsIDE1KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyMiglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDIzLCAlZWJ4CisJbGVhCTIzKCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDI0KToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmxwZAkxNiglZXNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMiwgMTYoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTIzKCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMjQsICVlYngKKwlsZWEJMjQoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MjUpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bHBkCTE2KCVlc2kpLCAleG1tMgorCXhvcgklY2wsICVjbAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0yLCAxNiglZWRpKQorCW1vdmIJJWNsLCAyNCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjQoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQyNSwgJWVieAorCWxlYQkyNSglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyNik6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZscGQJMTYoJWVzaSksICV4bW0yCisJbW92dwkyNCglZXNpKSwgJWN4CisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTIsIDE2KCVlZGkpCisJbW92dwklY3gsIDI0KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNSglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDI2LCAlZWJ4CisJbGVhCTI2KCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDI3KToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmxwZAkxNiglZXNpKSwgJXhtbTIKKwltb3ZsCTIzKCVlc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTIsIDE2KCVlZGkpCisJbW92bAklZWN4LCAyMyglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjYoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQyNywgJWVieAorCWxlYQkyNyglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyOCk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZscGQJMTYoJWVzaSksICV4bW0yCisJbW92bAkyNCglZXNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0yLCAxNiglZWRpKQorCW1vdmwJJWVjeCwgMjQoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI3KCVlZGkpLCAlZWF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMjgsICVlYngKKwlsZWEJMjgoJWVkaSksICVlZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MjkpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92ZHF1CTEzKCVlc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92ZHF1CSV4bW0yLCAxMyglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjgoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQyOSwgJWVieAorCWxlYQkyOSglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQzMCk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJMTQoJWVzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZkcXUJJXhtbTIsIDE0KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyOSglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDMwLCAlZWJ4CisJbGVhCTMwKCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCisJLnAyYWxpZ24gNAorTChFeGl0MzEpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92ZHF1CTE1KCVlc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92ZHF1CSV4bW0yLCAxNSglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMzAoJWVkaSksICVlYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQzMSwgJWVieAorCWxlYQkzMSglZWRpKSwgJWVkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQzMik6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZkcXUJJXhtbTIsIDE2KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzMSglZWRpKSwgJWVheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDMyLCAlZWJ4CisJbGVhCTMyKCVlZGkpLCAlZWRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MSk6CisJbW92YgkoJWVzaSksICVkbAorCW1vdmIJJWRsLCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDIpOgorCW1vdncJKCVlc2kpLCAlZHgKKwltb3Z3CSVkeCwgKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyKCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0Myk6CisJbW92dwkoJWVzaSksICVjeAorCW1vdmIJMiglZXNpKSwgJWRsCisJbW92dwklY3gsICglZWRpKQorCW1vdmIJJWRsLCAyKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzKCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQ0KToKKwltb3ZsCSglZXNpKSwgJWVkeAorCW1vdmwJJWVkeCwgKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk0KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQ1KToKKwltb3ZsCSglZXNpKSwgJWVjeAorCW1vdmIJNCglZXNpKSwgJWRsCisJbW92bAklZWN4LCAoJWVkaSkKKwltb3ZiCSVkbCwgNCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNSglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0Nik6CisJbW92bAkoJWVzaSksICVlY3gKKwltb3Z3CTQoJWVzaSksICVkeAorCW1vdmwJJWVjeCwgKCVlZGkpCisJbW92dwklZHgsIDQoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTYoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDcpOgorCW1vdmwJKCVlc2kpLCAlZWN4CisJbW92bAkzKCVlc2kpLCAlZWR4CisJbW92bAklZWN4LCAoJWVkaSkKKwltb3ZsCSVlZHgsIDMoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTcoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDgpOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTgoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDkpOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92Ygk4KCVlc2kpLCAlZGwKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmIJJWRsLCA4KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk5KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxMCk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3Z3CTgoJWVzaSksICVkeAorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisJbW92dwklZHgsIDgoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEwKCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxMSk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3ZsCTcoJWVzaSksICVlZHgKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmwJJWVkeCwgNyglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTEoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDEyKToKKwltb3ZscGQJKCVlc2kpLCAleG1tMAorCW1vdmwJOCglZXNpKSwgJWVkeAorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisJbW92bAklZWR4LCA4KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxMiglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTMpOgorCW1vdmxwZAkoJWVzaSksICV4bW0wCisJbW92bHBkCTUoJWVzaSksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTEsIDUoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEzKCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxNCk6CisJbW92bHBkCSglZXNpKSwgJXhtbTAKKwltb3ZscGQJNiglZXNpKSwgJXhtbTEKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMSwgNiglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTQoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDE1KToKKwltb3ZscGQJKCVlc2kpLCAleG1tMAorCW1vdmxwZAk3KCVlc2kpLCAleG1tMQorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0xLCA3KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxNSglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTYpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE2KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxNyk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZiCTE2KCVlc2kpLCAlY2wKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmIJJWNsLCAxNiglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTcoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDE4KToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdncJMTYoJWVzaSksICVjeAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92dwklY3gsIDE2KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxOCglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTkpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bAkxNSglZXNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bAklZWN4LCAxNSglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTkoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDIwKToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmwJMTYoJWVzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmwJJWVjeCwgMTYoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTIwKCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyMSk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZsCTE2KCVlc2kpLCAlZWN4CisJbW92YgkyMCglZXNpKSwgJWRsCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZsCSVlY3gsIDE2KCVlZGkpCisJbW92YgklZGwsIDIwKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyMSglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjIpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bHBkCTE0KCVlc2kpLCAleG1tMworCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0zLCAxNCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjIoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDIzKToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmxwZAkxNSglZXNpKSwgJXhtbTMKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMywgMTUoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTIzKCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyNCk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZscGQJMTYoJWVzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTIsIDE2KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNCglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjUpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92bHBkCTE2KCVlc2kpLCAleG1tMgorCW1vdmIJMjQoJWVzaSksICVjbAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0yLCAxNiglZWRpKQorCW1vdmIJJWNsLCAyNCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjUoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDI2KToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmxwZAkxNiglZXNpKSwgJXhtbTIKKwltb3Z3CTI0KCVlc2kpLCAlY3gKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmxwZAkleG1tMiwgMTYoJWVkaSkKKwltb3Z3CSVjeCwgMjQoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI2KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyNyk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZscGQJMTYoJWVzaSksICV4bW0yCisJbW92bAkyMyglZXNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0yLCAxNiglZWRpKQorCW1vdmwJJWVjeCwgMjMoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI3KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyOCk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZscGQJMTYoJWVzaSksICV4bW0yCisJbW92bAkyNCglZXNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0yLCAxNiglZWRpKQorCW1vdmwJJWVjeCwgMjQoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI4KCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyOSk6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJMTMoJWVzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZkcXUJJXhtbTIsIDEzKCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyOSglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MzApOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92ZHF1CTE0KCVlc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92ZHF1CSV4bW0yLCAxNCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMzAoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDMxKToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMAorCW1vdmRxdQkxNSglZXNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCW1vdmRxdQkleG1tMiwgMTUoJWVkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMxKCVlZGkpLCAlZWF4CisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQzMik6CisJbW92ZHF1CSglZXNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJWVzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwltb3ZkcXUJJXhtbTIsIDE2KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzMiglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MzMpOgorCW1vdmRxdQkoJWVzaSksICV4bW0wCisJbW92ZHF1CTE2KCVlc2kpLCAleG1tMgorCW1vdmIJMzIoJWVzaSksICVjbAorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisJbW92ZHF1CSV4bW0yLCAxNiglZWRpKQorCW1vdmIJJWNsLCAzMiglZWRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMCk6CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxKToKKwltb3ZiCSVkbCwgKCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwyKToKKwltb3Z3CSVkeCwgKCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwzKToKKwltb3ZsCSVlZHgsIC0xKCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGw0KToKKwltb3ZsCSVlZHgsICglZWRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsNSk6CisJbW92bAklZWR4LCAoJWVkaSkKKwltb3ZiCSVkbCwgNCglZWRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsNik6CisJbW92bAklZWR4LCAoJWVkaSkKKwltb3Z3CSVkeCwgNCglZWRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsNyk6CisJbW92bHBkCSV4bW0wLCAtMSglZWRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsOCk6CisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDkpOgorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisJbW92YgklZGwsIDgoJWVkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDEwKToKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdncJJWR4LCA4KCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxMSk6CisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZsCSVlZHgsIDcoJWVkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDEyKToKKwltb3ZscGQJJXhtbTAsICglZWRpKQorCW1vdmwJJWVkeCwgOCglZWRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMTMpOgorCW1vdmxwZAkleG1tMCwgKCVlZGkpCisJbW92bHBkCSV4bW0wLCA1KCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxNCk6CisJbW92bHBkCSV4bW0wLCAoJWVkaSkKKwltb3ZscGQJJXhtbTAsIDYoJWVkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDE1KToKKwltb3ZkcXUJJXhtbTAsIC0xKCVlZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxNik6CisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMik6CisJbW92ZHF1CSV4bW0yLCAoJWVkaSwgJWVjeCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCk6CisJYnNmCSVlZHgsICVlZHgKKwlhZGQJJDE1LCAlZWJ4CisJYWRkCSVlY3gsICVlZGkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCSglZWRpLCAlZWR4KSwgJWVheAorI2VuZGlmCisJc3ViCSVlZHgsICVlYngKKwlsZWEJMSglZWRpLCAlZWR4KSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybyk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwl4b3IJJWVkeCwgJWVkeAorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RmlsbEV4aXQpCisKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorCWFkZAkkMTYsICVlZGkKKworCW1vdgklZWRpLCAlZXNpCisJYW5kCSQweGYsICVlc2kKKwlzdWIJJWVzaSwgJWVkaQorCWFkZAklZXNpLCAlZWJ4CisJc3ViCSQ2NCwgJWVieAorCWpiCUwoU3RybmNweUZpbGxMZXNzNjQpCisKK0woU3RybmNweUZpbGxMb29wTW92ZHFhKToKKwltb3ZkcWEJJXhtbTAsICglZWRpKQorCW1vdmRxYQkleG1tMCwgMTYoJWVkaSkKKwltb3ZkcWEJJXhtbTAsIDMyKCVlZGkpCisJbW92ZHFhCSV4bW0wLCA0OCglZWRpKQorCWFkZAkkNjQsICVlZGkKKwlzdWIJJDY0LCAlZWJ4CisJamFlCUwoU3RybmNweUZpbGxMb29wTW92ZHFhKQorCitMKFN0cm5jcHlGaWxsTGVzczY0KToKKwlhZGQJJDMyLCAlZWJ4CisJamwJTChTdHJuY3B5RmlsbExlc3MzMikKKwltb3ZkcWEJJXhtbTAsICglZWRpKQorCW1vdmRxYQkleG1tMCwgMTYoJWVkaSkKKwlhZGQJJDMyLCAlZWRpCisJc3ViCSQxNiwgJWVieAorCWpsCUwoU3RybmNweUZpbGxFeGl0KQorCW1vdmRxYQkleG1tMCwgKCVlZGkpCisJYWRkCSQxNiwgJWVkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRmlsbFRhYmxlKSwgJWVieCwgNCkKKworTChTdHJuY3B5RmlsbExlc3MzMik6CisJYWRkCSQxNiwgJWVieAorCWpsCUwoU3RybmNweUZpbGxFeGl0KQorCW1vdmRxYQkleG1tMCwgKCVlZGkpCisJYWRkCSQxNiwgJWVkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRmlsbFRhYmxlKSwgJWVieCwgNCkKKworTChTdHJuY3B5RmlsbEV4aXQpOgorCWFkZAkkMTYsICVlYngKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEZpbGxUYWJsZSksICVlYngsIDQpCisKKwkucDJhbGlnbiA0CitMKEFsaWduZWRMZWF2ZUNhc2UyT3JDYXNlMyk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQWxpZ25lZDY0TGVhdmVDYXNlMikKK0woQWxpZ25lZDY0TGVhdmVDYXNlMyk6CisJbGVhCTY0KCVlYngpLCAlZWN4CisJYW5kCSQtMTYsICVlY3gKKwlhZGQJJDQ4LCAlZWJ4CisJamwJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKwltb3ZkcWEJJXhtbTQsICglZWRpKQorCXN1YgkkMTYsICVlYngKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCW1vdmRxYQkleG1tNSwgMTYoJWVkaSkKKwlzdWIJJDE2LCAlZWJ4CisJamIJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKwltb3ZkcWEJJXhtbTYsIDMyKCVlZGkpCisJc3ViCSQxNiwgJWVieAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisJbW92ZHFhCSV4bW03LCA0OCglZWRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNjQoJWVkaSksICVlYXgKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChBbGlnbmVkNjRMZWF2ZUNhc2UyKToKKwlweG9yCSV4bW0wLCAleG1tMAorCXhvcgklZWN4LCAlZWN4CisJcGNtcGVxYgkleG1tNCwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWFkZAkkNDgsICVlYngKKwlqbGUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tNCkKKworCXBjbXBlcWIJJXhtbTUsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwltb3ZkcWEJJXhtbTQsICglZWRpKQorCWFkZAkkMTYsICVlY3gKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1htbTUpCisKKwlwY21wZXFiCSV4bW02LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJbW92ZHFhCSV4bW01LCAxNiglZWRpKQorCWFkZAkkMTYsICVlY3gKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1htbTYpCisKKwlwY21wZXFiCSV4bW03LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJbW92ZHFhCSV4bW02LCAzMiglZWRpKQorCWxlYQkxNiglZWRpLCAlZWN4KSwgJWVkaQorCWxlYQkxNiglZXNpLCAlZWN4KSwgJWVzaQorCWJzZgklZWR4LCAlZWR4CisJY21wCSVlYngsICVlZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJWVieCwgNCkKKworCS5wMmFsaWduIDQKK0woVW5hbGlnbmVkTGVhdmVDYXNlMk9yQ2FzZTMpOgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKFVuYWxpZ25lZDY0TGVhdmVDYXNlMikKK0woVW5hbGlnbmVkNjRMZWF2ZUNhc2UzKToKKwlsZWEJNjQoJWVieCksICVlY3gKKwlhbmQJJC0xNiwgJWVjeAorCWFkZAkkNDgsICVlYngKKwlqbAlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCW1vdmRxdQkleG1tNCwgKCVlZGkpCisJc3ViCSQxNiwgJWVieAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisJbW92ZHF1CSV4bW01LCAxNiglZWRpKQorCXN1YgkkMTYsICVlYngKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCW1vdmRxdQkleG1tNiwgMzIoJWVkaSkKKwlzdWIJJDE2LCAlZWJ4CisJamIJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKwltb3ZkcXUJJXhtbTcsIDQ4KCVlZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk2NCglZWRpKSwgJWVheAorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFVuYWxpZ25lZDY0TGVhdmVDYXNlMik6CisJcHhvcgkleG1tMCwgJXhtbTAKKwl4b3IJJWVjeCwgJWVjeAorCXBjbXBlcWIJJXhtbTQsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlhZGQJJDQ4LCAlZWJ4CisJamxlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTQpCisKKwlwY21wZXFiCSV4bW01LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJbW92ZHF1CSV4bW00LCAoJWVkaSkKKwlhZGQJJDE2LCAlZWN4CisJc3ViCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW01KQorCisJcGNtcGVxYgkleG1tNiwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCW1vdmRxdQkleG1tNSwgMTYoJWVkaSkKKwlhZGQJJDE2LCAlZWN4CisJc3ViCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW02KQorCisJcGNtcGVxYgkleG1tNywgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCW1vdmRxdQkleG1tNiwgMzIoJWVkaSkKKwlsZWEJMTYoJWVkaSwgJWVjeCksICVlZGkKKwlsZWEJMTYoJWVzaSwgJWVjeCksICVlc2kKKwlic2YJJWVkeCwgJWVkeAorCWNtcAklZWJ4LCAlZWR4CisJamIJTChDb3B5RnJvbTFUbzE2Qnl0ZXNFeGl0KQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVlYngsIDQpCisKKwkucDJhbGlnbiA0CitMKEV4aXRaZXJvKToKKwltb3ZsCSVlZGksICVlYXgKKwlSRVRVUk4KKyNlbmRpZgorCitFTkQgKFNUUkNQWSkKKworCS5wMmFsaWduIDQKKwkuc2VjdGlvbiAucm9kYXRhCitMKEV4aXRUYWJsZSk6CisJLmludAlKTVBUQkwoTChFeGl0MSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyKSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDMpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0NCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQ1KSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDYpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0NyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQ4KSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDkpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTApLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTEpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTIpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTMpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTQpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTUpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTYpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTcpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTgpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTkpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjApLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjEpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjIpLCBMKEV4aXRUYWJsZSkpCisJLmludCAgICBKTVBUQkwoTChFeGl0MjMpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjQpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjUpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjYpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjcpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjgpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjkpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MzApLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MzEpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MzIpLCBMKEV4aXRUYWJsZSkpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKK0woRXhpdFN0cm5jcHlUYWJsZSk6CisJLmludAlKTVBUQkwoTChFeGl0MCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDEpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MyksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDQpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQ1KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0NiksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDcpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQ4KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0OSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDEwKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTEpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxMiksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDEzKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTQpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxNSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDE2KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTcpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxOCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDE5KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjApLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyMSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDIyKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50ICAgIEpNUFRCTChMKFN0cm5jcHlFeGl0MjMpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyNCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDI1KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjYpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyNyksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDI4KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjkpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQzMCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDMxKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MzIpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQzMyksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisKKwkucDJhbGlnbiA0CitMKEZpbGxUYWJsZSk6CisJLmludAlKTVBUQkwoTChGaWxsMCksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGwxKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDIpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsMyksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGw0KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDUpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsNiksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGw3KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDgpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsOSksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGwxMCksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGwxMSksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGwxMiksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGwxMyksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGwxNCksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGwxNSksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGwxNiksIEwoRmlsbFRhYmxlKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cmxlbi1zbG0uUyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHJsZW4tc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjdjYzAyNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHJsZW4tc2xtLlMKQEAgLTAsMCArMSwzMjggQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgU1RSTEVOCisjIGRlZmluZSBTVFJMRU4gc3RybGVuCisjZW5kaWYKKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkgICAgICAgICAgICAgXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247ICBcCisJLmdsb2JsIG5hbWU7ICAgICAgICAgICAgIFwKKwkucDJhbGlnbiA0OyAgICAgICAgICAgICAgXAorbmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpICAgICAgICAgICAgICAgXAorCWNmaV9lbmRwcm9jOyAgICAgICAgICAgICBcCisJLnNpemUgbmFtZSwJLi1uYW1lCisjZW5kaWYKKworI2RlZmluZSBDRklfUFVTSChSRUcpICAgICAgICAgICAgICAgICAgIFwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOyAgICAgIFwKKwljZmlfcmVsX29mZnNldCAoUkVHLCAwKQorCisjZGVmaW5lIENGSV9QT1AoUkVHKSAgICAgICAgICAgICAgICAgICAgXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQpOyAgICAgXAorCWNmaV9yZXN0b3JlIChSRUcpCisKKyNkZWZpbmUgUFVTSChSRUcpIHB1c2hsIFJFRzsgQ0ZJX1BVU0ggKFJFRykKKyNkZWZpbmUgUE9QKFJFRykgcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKKworCS5zZWN0aW9uIC50ZXh0LnNzZTIsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChTVFJMRU4pCisJbW92CTQoJWVzcCksICVlZHgKKwltb3YJJWVkeCwgJWVjeAorCWFuZAkkMHgzZiwgJWVjeAorCXB4b3IJJXhtbTAsICV4bW0wCisJY21wCSQweDMwLCAlZWN4CisJamEJTChuZXh0KQorCW1vdmRxdQkoJWVkeCksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXRfbGVzczE2KQorCW1vdgklZWR4LCAlZWF4CisJYW5kCSQtMTYsICVlYXgKKwlqbXAJTChhbGlnbjE2X3N0YXJ0KQorTChuZXh0KToKKwltb3YJJWVkeCwgJWVheAorCWFuZAkkLTE2LCAlZWF4CisJUFVTSAkoJWVkaSkKKwlwY21wZXFiCSglZWF4KSwgJXhtbTAKKwltb3YJJC0xLCAlZWRpCisJc3ViCSVlYXgsICVlY3gKKwlzaGwJJWNsLCAlZWRpCisJcG1vdm1za2IgJXhtbTAsICVlY3gKKwlhbmQJJWVkaSwgJWVjeAorCVBPUAkoJWVkaSkKKwlqbnoJTChleGl0X3VuYWxpZ25lZCkKKwlweG9yCSV4bW0wLCAleG1tMAorTChhbGlnbjE2X3N0YXJ0KToKKwlweG9yCSV4bW0xLCAleG1tMQorCXB4b3IJJXhtbTIsICV4bW0yCisJcHhvcgkleG1tMywgJXhtbTMKKwlwY21wZXFiCTE2KCVlYXgpLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDE2KQorCisJcGNtcGVxYgkzMiglZWF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQzMikKKworCXBjbXBlcWIJNDgoJWVheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0NDgpCisKKwlwY21wZXFiCTY0KCVlYXgpLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDY0KQorCisJcGNtcGVxYgk4MCglZWF4KSwgJXhtbTAKKwlhZGQJJDY0LCAlZWF4CisJcG1vdm1za2IgJXhtbTAsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0MTYpCisKKwlwY21wZXFiCTMyKCVlYXgpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDMyKQorCisJcGNtcGVxYgk0OCglZWF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQ0OCkKKworCXBjbXBlcWIJNjQoJWVheCksICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0NjQpCisKKwlwY21wZXFiCTgwKCVlYXgpLCAleG1tMAorCWFkZAkkNjQsICVlYXgKKwlwbW92bXNrYiAleG1tMCwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQxNikKKworCXBjbXBlcWIJMzIoJWVheCksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0MzIpCisKKwlwY21wZXFiCTQ4KCVlYXgpLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDQ4KQorCisJcGNtcGVxYgk2NCglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQ2NCkKKworCXBjbXBlcWIJODAoJWVheCksICV4bW0wCisJYWRkCSQ2NCwgJWVheAorCXBtb3Ztc2tiICV4bW0wLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDE2KQorCisJcGNtcGVxYgkzMiglZWF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQzMikKKworCXBjbXBlcWIJNDgoJWVheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0NDgpCisKKwlwY21wZXFiCTY0KCVlYXgpLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDY0KQorCisKKwl0ZXN0CSQweDNmLCAlZWF4CisJanoJTChhbGlnbjY0X2xvb3ApCisKKwlwY21wZXFiCTgwKCVlYXgpLCAleG1tMAorCWFkZAkkODAsICVlYXgKKwlwbW92bXNrYiAleG1tMCwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQpCisKKwl0ZXN0CSQweDNmLCAlZWF4CisJanoJTChhbGlnbjY0X2xvb3ApCisKKwlwY21wZXFiCTE2KCVlYXgpLCAleG1tMQorCWFkZAkkMTYsICVlYXgKKwlwbW92bXNrYiAleG1tMSwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQpCisKKwl0ZXN0CSQweDNmLCAlZWF4CisJanoJTChhbGlnbjY0X2xvb3ApCisKKwlwY21wZXFiCTE2KCVlYXgpLCAleG1tMgorCWFkZAkkMTYsICVlYXgKKwlwbW92bXNrYiAleG1tMiwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQpCisKKwl0ZXN0CSQweDNmLCAlZWF4CisJanoJTChhbGlnbjY0X2xvb3ApCisKKwlwY21wZXFiCTE2KCVlYXgpLCAleG1tMworCWFkZAkkMTYsICVlYXgKKwlwbW92bXNrYiAleG1tMywgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQpCisKKwlhZGQJJDE2LCAlZWF4CisJLnAyYWxpZ24gNAorTChhbGlnbjY0X2xvb3ApOgorCW1vdmFwcwkoJWVheCksCSV4bW00CisJcG1pbnViCTE2KCVlYXgpLCAJJXhtbTQKKwltb3ZhcHMJMzIoJWVheCksIAkleG1tNQorCXBtaW51Ygk0OCglZWF4KSwgCSV4bW01CisJYWRkCSQ2NCwgCSVlYXgKKwlwbWludWIJJXhtbTQsCSV4bW01CisJcGNtcGVxYgkleG1tMCwJJXhtbTUKKwlwbW92bXNrYiAleG1tNSwJJWVjeAorCXRlc3QJJWVjeCwJJWVjeAorCWp6CUwoYWxpZ242NF9sb29wKQorCisKKwlwY21wZXFiCS02NCglZWF4KSwgJXhtbTAKKwlzdWIJJDgwLCAJJWVheAorCXBtb3Ztc2tiICV4bW0wLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwoZXhpdDE2KQorCisJcGNtcGVxYgkzMiglZWF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGV4aXQzMikKKworCXBjbXBlcWIJNDgoJWVheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChleGl0NDgpCisKKwlwY21wZXFiCTY0KCVlYXgpLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWN4CisJc3ViCSVlZHgsICVlYXgKKwlic2YJJWVjeCwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisJYWRkCSQ2NCwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChleGl0KToKKwlzdWIJJWVkeCwgJWVheAorCWJzZgklZWN4LCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKwlyZXQKKworTChleGl0X2xlc3MxNik6CisJYnNmCSVlY3gsICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF91bmFsaWduZWQpOgorCXN1YgklZWR4LCAlZWF4CisJYnNmCSVlY3gsICVlY3gKKwlhZGQJJWVjeCwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChleGl0MTYpOgorCXN1YgklZWR4LCAlZWF4CisJYnNmCSVlY3gsICVlY3gKKwlhZGQJJWVjeCwgJWVheAorCWFkZAkkMTYsICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdDMyKToKKwlzdWIJJWVkeCwgJWVheAorCWJzZgklZWN4LCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKwlhZGQJJDMyLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXQ0OCk6CisJc3ViCSVlZHgsICVlYXgKKwlic2YJJWVjeCwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisJYWRkCSQ0OCwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChleGl0NjQpOgorCXN1YgklZWR4LCAlZWF4CisJYnNmCSVlY3gsICVlY3gKKwlhZGQJJWVjeCwgJWVheAorCWFkZAkkNjQsICVlYXgKKwlyZXQKKworRU5EIChTVFJMRU4pCisKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHJuY3B5LXNsbS5TIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2UyLXN0cm5jcHktc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTkxNDE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlMi1zdHJuY3B5LXNsbS5TCkBAIC0wLDAgKzEsMzMgQEAKKy8qDQorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbg0KK0FsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisqLw0KKw0KKyNkZWZpbmUgVVNFX0FTX1NUUk5DUFkNCisjZGVmaW5lIFNUUkNQWSBzdHJuY3B5DQorI2luY2x1ZGUgInNzZTItc3RyY3B5LXNsbS5TIg0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlNC1tZW1jbXAtc2xtLlMgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTQtbWVtY21wLXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU1MDI4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3NpbHZlcm1vbnQvc3RyaW5nL3NzZTQtbWVtY21wLXNsbS5TCkBAIC0wLDAgKzEsMTI3OCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVtZW1iZXJfc3RhdGUKKyMgZGVmaW5lIGNmaV9yZW1lbWJlcl9zdGF0ZQkuY2ZpX3JlbWVtYmVyX3N0YXRlCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZV9zdGF0ZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmVfc3RhdGUJLmNmaV9yZXN0b3JlX3N0YXRlCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkgICAgICAgICAgICAgXAorCS50eXBlIG5hbWUsIEBmdW5jdGlvbjsgICBcCisJLmdsb2JsIG5hbWU7ICAgICAgICAgICAgIFwKKwkucDJhbGlnbiA0OyAgICAgICAgICAgICAgXAorbmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpICAgICAgICAgICAgICAgXAorCWNmaV9lbmRwcm9jOyAgICAgICAgICAgICBcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworI2lmbmRlZiBNRU1DTVAKKyMgZGVmaW5lIE1FTUNNUAltZW1jbXAKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CVwKKwljZmlfcmVsX29mZnNldCAoUkVHLCAwKQorCisjZGVmaW5lIENGSV9QT1AoUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CVwKKwljZmlfcmVzdG9yZSAoUkVHKQorCisjZGVmaW5lIFBVU0goUkVHKQlwdXNobCBSRUc7IENGSV9QVVNIIChSRUcpCisjZGVmaW5lIFBPUChSRUcpCXBvcGwgUkVHOyBDRklfUE9QIChSRUcpCisKKyNkZWZpbmUgUEFSTVMJNAorI2RlZmluZSBCTEsxCVBBUk1TCisjZGVmaW5lIEJMSzIJQkxLMSArIDQKKyNkZWZpbmUgTEVOCUJMSzIgKyA0CisjZGVmaW5lIFJFVFVSTglQT1AgKCVlYngpOyByZXQ7IENGSV9QVVNIICglZWJ4KQorCisKKyNpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkgLSBCCisKKy8qIExvYWQgYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlIGludG8gRUJYIGFuZCBicmFuY2ggdG8gaXQuICBUQUJMRSBpcyBhCisJanVtcAl0YWJsZSB3aXRoIHJlbGF0aXZlIG9mZnNldHMuICBJTkRFWCBpcyBhIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZQorCWluZGV4CWludG8gdGhlIGp1bXAgdGFibGUuICAgU0NBTEUgaXMgdGhlIHNjYWxlIG9mIElOREVYLiAqLworCisjIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFLCBJTkRFWCwgU0NBTEUpCVwKKy8qIFdlIGZpcnN0IGxvYWQgUEMgaW50byBFQlguICAqLwlcCisJY2FsbAlfX3g4Ni5nZXRfcGNfdGh1bmsuYng7CVwKKy8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUganVtcCB0YWJsZS4gICovCVwKKwlhZGRsCSQoVEFCTEUgLSAuKSwgJWVieDsJXAorLyogR2V0IHRoZSBlbnRyeSBhbmQgY29udmVydCB0aGUgcmVsYXRpdmUgb2Zmc2V0IHRvIHRoZQlcCisJYWJzb2x1dGUJYWRkcmVzcy4gICovCVwKKwlhZGRsCSglZWJ4LElOREVYLFNDQUxFKSwgJWVieDsJXAorLyogV2UgbG9hZGVkIHRoZSBqdW1wIHRhYmxlIGFuZCBhZGp1ZXN0ZWQgRURYL0VTSS4gR28uICAqLwlcCisJam1wCSolZWJ4CisjZWxzZQorIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkKKworLyogTG9hZCBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUgaW50byBFQlggYW5kIGJyYW5jaCB0byBpdC4gIFRBQkxFIGlzIGEKKwlqdW1wCXRhYmxlIHdpdGggcmVsYXRpdmUgb2Zmc2V0cy4gIElOREVYIGlzIGEgcmVnaXN0ZXIgY29udGFpbnMgdGhlCisJaW5kZXgJaW50byB0aGUganVtcCB0YWJsZS4gICBTQ0FMRSBpcyB0aGUgc2NhbGUgb2YgSU5ERVguICovCisjIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFLCBJTkRFWCwgU0NBTEUpCVwKKwlqbXAJKlRBQkxFKCxJTkRFWCxTQ0FMRSkKKyNlbmRpZgorCisKKy8qIFdhcm5pbmchCisgICAgICAgICAgIHdtZW1jbXAgaGFzIHRvIHVzZSBTSUdORUQgY29tcGFyaXNvbiBmb3IgZWxlbWVudHMuCisgICAgICAgICAgIG1lbWNtcCBoYXMgdG8gdXNlIFVOU0lHTkVEIGNvbXBhcmlzb24gZm9yIGVsZW1udHMuCisqLworCisJLnNlY3Rpb24gLnRleHQuc3NlNC4yLCJheCIsQHByb2diaXRzCitFTlRSWSAoTUVNQ01QKQorCW1vdmwJQkxLMSglZXNwKSwgJWVheAorCW1vdmwJQkxLMiglZXNwKSwgJWVkeAorCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisKKyNpZmRlZiBVU0VfQVNfV01FTUNNUAorCXNobAkkMiwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWp6CUwocmV0dXJuMCkKKyNlbHNlCisJY21wCSQxLCAlZWN4CisJamJlCUwobGVzczFieXRlcykKKyNlbmRpZgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwljbXAJJDY0LCAlZWN4CisJamEJTCg2NGJ5dGVzb3Jtb3JlKQorCWNtcAkkOCwgJWVjeAorCisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJUFVTSAkoJWVieCkKKwlqYglMKGxlc3M4Ynl0ZXMpCisjZWxzZQorCWpiCUwobGVzczhieXRlcykKKwlQVVNICSglZWJ4KQorI2VuZGlmCisKKwlhZGQJJWVjeCwgJWVkeAorCWFkZAklZWN4LCAlZWF4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzY0Ynl0ZXMpLCAlZWN4LCA0KQorCisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJLnAyYWxpZ24gNAorTChsZXNzOGJ5dGVzKToKKwltb3YJKCVlYXgpLCAlYmwKKwljbXBiCSglZWR4KSwgJWJsCisJam5lCUwobm9uemVybykKKworCW1vdgkxKCVlYXgpLCAlYmwKKwljbXBiCTEoJWVkeCksICVibAorCWpuZQlMKG5vbnplcm8pCisKKwljbXAJJDIsICVlY3gKKwlqeglMKDBieXRlcykKKworCW1vdgkyKCVlYXgpLCAlYmwKKwljbXBiCTIoJWVkeCksICVibAorCWpuZQlMKG5vbnplcm8pCisKKwljbXAJJDMsICVlY3gKKwlqeglMKDBieXRlcykKKworCW1vdgkzKCVlYXgpLCAlYmwKKwljbXBiCTMoJWVkeCksICVibAorCWpuZQlMKG5vbnplcm8pCisKKwljbXAJJDQsICVlY3gKKwlqeglMKDBieXRlcykKKworCW1vdgk0KCVlYXgpLCAlYmwKKwljbXBiCTQoJWVkeCksICVibAorCWpuZQlMKG5vbnplcm8pCisKKwljbXAJJDUsICVlY3gKKwlqeglMKDBieXRlcykKKworCW1vdgk1KCVlYXgpLCAlYmwKKwljbXBiCTUoJWVkeCksICVibAorCWpuZQlMKG5vbnplcm8pCisKKwljbXAJJDYsICVlY3gKKwlqeglMKDBieXRlcykKKworCW1vdgk2KCVlYXgpLCAlYmwKKwljbXBiCTYoJWVkeCksICVibAorCWplCUwoMGJ5dGVzKQorCitMKG5vbnplcm8pOgorCVBPUAkoJWVieCkKKwltb3YJJDEsICVlYXgKKwlqYQlMKGFib3ZlKQorCW5lZwklZWF4CitMKGFib3ZlKToKKwlyZXQKKwlDRklfUFVTSCAoJWVieCkKKyNlbmRpZgorCisJLnAyYWxpZ24gNAorTCgwYnl0ZXMpOgorCVBPUAkoJWVieCkKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisjaWZkZWYgVVNFX0FTX1dNRU1DTVAKKworLyogZm9yIHdtZW1jbXAsIGNhc2UgTiA9PSAxICovCisKKwkucDJhbGlnbiA0CitMKGxlc3M4Ynl0ZXMpOgorCW1vdgkoJWVheCksICVlY3gKKwljbXAJKCVlZHgpLCAlZWN4CisJamUJTChyZXR1cm4wKQorCW1vdgkkMSwgJWVheAorCWpnCUwoZmluZF9kaWZmX2JpZ2dlcikKKwluZWcJJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChmaW5kX2RpZmZfYmlnZ2VyKToKKwlyZXQKKworCS5wMmFsaWduIDQKK0wocmV0dXJuMCk6CisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJLnAyYWxpZ24gNAorTChsZXNzMWJ5dGVzKToKKwlqYglMKDBieXRlc2VuZCkKKwltb3Z6YmwJKCVlYXgpLCAlZWF4CisJbW92emJsCSglZWR4KSwgJWVkeAorCXN1YgklZWR4LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKDBieXRlc2VuZCk6CisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKyNlbmRpZgorCS5wMmFsaWduIDQKK0woNjRieXRlc29ybW9yZSk6CisJUFVTSAkoJWVieCkKKwltb3YJJWVjeCwgJWVieAorCW1vdgkkNjQsICVlY3gKKwlzdWIJJDY0LCAlZWJ4CitMKDY0Ynl0ZXNvcm1vcmVfbG9vcCk6CisJbW92ZHF1CSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJKCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoZmluZF8xNmRpZmYpCisKKwltb3ZkcXUJMTYoJWVheCksICV4bW0xCisJbW92ZHF1CTE2KCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoZmluZF8zMmRpZmYpCisKKwltb3ZkcXUJMzIoJWVheCksICV4bW0xCisJbW92ZHF1CTMyKCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoZmluZF80OGRpZmYpCisKKwltb3ZkcXUJNDgoJWVheCksICV4bW0xCisJbW92ZHF1CTQ4KCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoZmluZF82NGRpZmYpCisJYWRkCSVlY3gsICVlYXgKKwlhZGQJJWVjeCwgJWVkeAorCXN1YgklZWN4LCAlZWJ4CisJamFlCUwoNjRieXRlc29ybW9yZV9sb29wKQorCWFkZAklZWJ4LCAlZWN4CisJYWRkCSVlY3gsICVlZHgKKwlhZGQJJWVjeCwgJWVheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV82NGJ5dGVzKSwgJWVjeCwgNCkKKworI2lmZGVmIFVTRV9BU19XTUVNQ01QCisKKy8qIExhYmVsIG5lZWRzIG9ubHkgZm9yIHRhYmxlXzY0Ynl0ZXMgZmlsbGluZyAqLworTCh1bnJlYWxfY2FzZSk6CisvKiBubyBjb2RlIGhlcmUgKi8KKworI2VuZGlmCisJLnAyYWxpZ24gNAorTChmaW5kXzE2ZGlmZik6CisJc3ViCSQxNiwgJWVjeAorTChmaW5kXzMyZGlmZik6CisJc3ViCSQxNiwgJWVjeAorTChmaW5kXzQ4ZGlmZik6CisJc3ViCSQxNiwgJWVjeAorTChmaW5kXzY0ZGlmZik6CisJYWRkCSVlY3gsICVlZHgKKwlhZGQJJWVjeCwgJWVheAorCisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJLnAyYWxpZ24gNAorTCgxNmJ5dGVzKToKKwltb3YJLTE2KCVlYXgpLCAlZWN4CisJbW92CS0xNiglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCgxMmJ5dGVzKToKKwltb3YJLTEyKCVlYXgpLCAlZWN4CisJbW92CS0xMiglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCg4Ynl0ZXMpOgorCW1vdgktOCglZWF4KSwgJWVjeAorCW1vdgktOCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCg0Ynl0ZXMpOgorCW1vdgktNCglZWF4KSwgJWVjeAorCW1vdgktNCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJbW92CSQwLCAlZWF4CisJam5lCUwoZmluZF9kaWZmKQorCVJFVFVSTgorI2Vsc2UKKwkucDJhbGlnbiA0CitMKDE2Ynl0ZXMpOgorCW1vdgktMTYoJWVheCksICVlY3gKKwljbXAJLTE2KCVlZHgpLCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCgxMmJ5dGVzKToKKwltb3YJLTEyKCVlYXgpLCAlZWN4CisJY21wCS0xMiglZWR4KSwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woOGJ5dGVzKToKKwltb3YJLTgoJWVheCksICVlY3gKKwljbXAJLTgoJWVkeCksICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDRieXRlcyk6CisJbW92CS00KCVlYXgpLCAlZWN4CisJY21wCS00KCVlZHgpLCAlZWN4CisJbW92CSQwLCAlZWF4CisJam5lCUwoZmluZF9kaWZmKQorCVJFVFVSTgorI2VuZGlmCisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwkucDJhbGlnbiA0CitMKDQ5Ynl0ZXMpOgorCW1vdmRxdQktNDkoJWVheCksICV4bW0xCisJbW92ZHF1CS00OSglZWR4KSwgJXhtbTIKKwltb3YJJC00OSwgJWVieAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDMzYnl0ZXMpOgorCW1vdmRxdQktMzMoJWVheCksICV4bW0xCisJbW92ZHF1CS0zMyglZWR4KSwgJXhtbTIKKwltb3YJJC0zMywgJWVieAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDE3Ynl0ZXMpOgorCW1vdgktMTcoJWVheCksICVlY3gKKwltb3YJLTE3KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDEzYnl0ZXMpOgorCW1vdgktMTMoJWVheCksICVlY3gKKwltb3YJLTEzKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDlieXRlcyk6CisJbW92CS05KCVlYXgpLCAlZWN4CisJbW92CS05KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDVieXRlcyk6CisJbW92CS01KCVlYXgpLCAlZWN4CisJbW92CS01KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisJbW92emJsCS0xKCVlYXgpLCAlZWN4CisJY21wCS0xKCVlZHgpLCAlY2wKKwltb3YJJDAsICVlYXgKKwlqbmUJTChlbmQpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKDUwYnl0ZXMpOgorCW1vdgkkLTUwLCAlZWJ4CisJbW92ZHF1CS01MCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTUwKCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDM0Ynl0ZXMpOgorCW1vdgkkLTM0LCAlZWJ4CisJbW92ZHF1CS0zNCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTM0KCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDE4Ynl0ZXMpOgorCW1vdgktMTgoJWVheCksICVlY3gKKwltb3YJLTE4KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDE0Ynl0ZXMpOgorCW1vdgktMTQoJWVheCksICVlY3gKKwltb3YJLTE0KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDEwYnl0ZXMpOgorCW1vdgktMTAoJWVheCksICVlY3gKKwltb3YJLTEwKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDZieXRlcyk6CisJbW92CS02KCVlYXgpLCAlZWN4CisJbW92CS02KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDJieXRlcyk6CisJbW92endsCS0yKCVlYXgpLCAlZWN4CisJbW92endsCS0yKCVlZHgpLCAlZWJ4CisJY21wCSVibCwgJWNsCisJam5lCUwoZW5kKQorCWNtcAklYmgsICVjaAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woNTFieXRlcyk6CisJbW92CSQtNTEsICVlYngKKwltb3ZkcXUJLTUxKCVlYXgpLCAleG1tMQorCW1vdmRxdQktNTEoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzVieXRlcyk6CisJbW92CSQtMzUsICVlYngKKwltb3ZkcXUJLTM1KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMzUoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMTlieXRlcyk6CisJbW92bAktMTkoJWVheCksICVlY3gKKwltb3ZsCS0xOSglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCgxNWJ5dGVzKToKKwltb3ZsCS0xNSglZWF4KSwgJWVjeAorCW1vdmwJLTE1KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDExYnl0ZXMpOgorCW1vdmwJLTExKCVlYXgpLCAlZWN4CisJbW92bAktMTEoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woN2J5dGVzKToKKwltb3ZsCS03KCVlYXgpLCAlZWN4CisJbW92bAktNyglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCgzYnl0ZXMpOgorCW1vdnp3bAktMyglZWF4KSwgJWVjeAorCW1vdnp3bAktMyglZWR4KSwgJWVieAorCWNtcGIJJWJsLCAlY2wKKwlqbmUJTChlbmQpCisJY21wCSVieCwgJWN4CisJam5lCUwoZW5kKQorTCgxYnl0ZXMpOgorCW1vdnpibAktMSglZWF4KSwgJWVheAorCWNtcGIJLTEoJWVkeCksICVhbAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlSRVRVUk4KKyNlbmRpZgorCS5wMmFsaWduIDQKK0woNTJieXRlcyk6CisJbW92ZHF1CS01MiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTUyKCVlZHgpLCAleG1tMgorCW1vdgkkLTUyLCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzZieXRlcyk6CisJbW92ZHF1CS0zNiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTM2KCVlZHgpLCAleG1tMgorCW1vdgkkLTM2LCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjBieXRlcyk6CisJbW92ZHF1CS0yMCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTIwKCVlZHgpLCAleG1tMgorCW1vdgkkLTIwLCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKwltb3YJLTQoJWVheCksICVlY3gKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwltb3YJLTQoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorI2Vsc2UKKwljbXAJLTQoJWVkeCksICVlY3gKKyNlbmRpZgorCW1vdgkkMCwgJWVheAorCWpuZQlMKGZpbmRfZGlmZikKKwlSRVRVUk4KKworI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCS5wMmFsaWduIDQKK0woNTNieXRlcyk6CisJbW92ZHF1CS01MyglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTUzKCVlZHgpLCAleG1tMgorCW1vdgkkLTUzLCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzdieXRlcyk6CisJbW92CSQtMzcsICVlYngKKwltb3ZkcXUJLTM3KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMzcoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjFieXRlcyk6CisJbW92CSQtMjEsICVlYngKKwltb3ZkcXUJLTIxKCVlYXgpLCAleG1tMQorCW1vdmRxdQktMjEoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKwltb3YJLTUoJWVheCksICVlY3gKKwltb3YJLTUoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3Z6YmwJLTEoJWVheCksICVlY3gKKwljbXAJLTEoJWVkeCksICVjbAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woNTRieXRlcyk6CisJbW92ZHF1CS01NCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTU0KCVlZHgpLCAleG1tMgorCW1vdgkkLTU0LCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzhieXRlcyk6CisJbW92CSQtMzgsICVlYngKKwltb3ZkcXUJLTM4KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMzgoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjJieXRlcyk6CisJbW92CSQtMjIsICVlYngKKwltb3ZkcXUJLTIyKCVlYXgpLCAleG1tMQorCW1vdmRxdQktMjIoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKworCW1vdgktNiglZWF4KSwgJWVjeAorCW1vdgktNiglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCW1vdnp3bAktMiglZWF4KSwgJWVjeAorCW1vdnp3bAktMiglZWR4KSwgJWVieAorCWNtcAklYmwsICVjbAorCWpuZQlMKGVuZCkKKwljbXAJJWJoLCAlY2gKKwltb3YJJDAsICVlYXgKKwlqbmUJTChlbmQpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKDU1Ynl0ZXMpOgorCW1vdmRxdQktNTUoJWVheCksICV4bW0xCisJbW92ZHF1CS01NSglZWR4KSwgJXhtbTIKKwltb3YJJC01NSwgJWVieAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDM5Ynl0ZXMpOgorCW1vdgkkLTM5LCAlZWJ4CisJbW92ZHF1CS0zOSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTM5KCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDIzYnl0ZXMpOgorCW1vdgkkLTIzLCAlZWJ4CisJbW92ZHF1CS0yMyglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTIzKCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisJbW92bAktNyglZWF4KSwgJWVjeAorCW1vdmwJLTcoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3Z6d2wJLTMoJWVheCksICVlY3gKKwltb3Z6d2wJLTMoJWVkeCksICVlYngKKwljbXBiCSVibCwgJWNsCisJam5lCUwoZW5kKQorCWNtcAklYngsICVjeAorCWpuZQlMKGVuZCkKKwltb3Z6YmwJLTEoJWVheCksICVlYXgKKwljbXBiCS0xKCVlZHgpLCAlYWwKKwltb3YJJDAsICVlYXgKKwlqbmUJTChlbmQpCisJUkVUVVJOCisjZW5kaWYKKwkucDJhbGlnbiA0CitMKDU2Ynl0ZXMpOgorCW1vdmRxdQktNTYoJWVheCksICV4bW0xCisJbW92ZHF1CS01NiglZWR4KSwgJXhtbTIKKwltb3YJJC01NiwgJWVieAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQwYnl0ZXMpOgorCW1vdgkkLTQwLCAlZWJ4CisJbW92ZHF1CS00MCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTQwKCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDI0Ynl0ZXMpOgorCW1vdgkkLTI0LCAlZWJ4CisJbW92ZHF1CS0yNCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTI0KCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisKKwltb3YJLTgoJWVheCksICVlY3gKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwltb3YJLTgoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorI2Vsc2UKKwljbXAJLTgoJWVkeCksICVlY3gKKyNlbmRpZgorCWpuZQlMKGZpbmRfZGlmZikKKworCW1vdgktNCglZWF4KSwgJWVjeAorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCW1vdgktNCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisjZWxzZQorCWNtcAktNCglZWR4KSwgJWVjeAorI2VuZGlmCisJbW92CSQwLCAlZWF4CisJam5lCUwoZmluZF9kaWZmKQorCVJFVFVSTgorCisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJLnAyYWxpZ24gNAorTCg1N2J5dGVzKToKKwltb3ZkcXUJLTU3KCVlYXgpLCAleG1tMQorCW1vdmRxdQktNTcoJWVkeCksICV4bW0yCisJbW92CSQtNTcsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg0MWJ5dGVzKToKKwltb3YJJC00MSwgJWVieAorCW1vdmRxdQktNDEoJWVheCksICV4bW0xCisJbW92ZHF1CS00MSglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyNWJ5dGVzKToKKwltb3YJJC0yNSwgJWVieAorCW1vdmRxdQktMjUoJWVheCksICV4bW0xCisJbW92ZHF1CS0yNSglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktOSglZWF4KSwgJWVjeAorCW1vdgktOSglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCW1vdgktNSglZWF4KSwgJWVjeAorCW1vdgktNSglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCW1vdnpibAktMSglZWF4KSwgJWVjeAorCWNtcAktMSglZWR4KSwgJWNsCisJbW92CSQwLCAlZWF4CisJam5lCUwoZW5kKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTCg1OGJ5dGVzKToKKwltb3ZkcXUJLTU4KCVlYXgpLCAleG1tMQorCW1vdmRxdQktNTgoJWVkeCksICV4bW0yCisJbW92CSQtNTgsICVlYngKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg0MmJ5dGVzKToKKwltb3YJJC00MiwgJWVieAorCW1vdmRxdQktNDIoJWVheCksICV4bW0xCisJbW92ZHF1CS00MiglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyNmJ5dGVzKToKKwltb3YJJC0yNiwgJWVieAorCW1vdmRxdQktMjYoJWVheCksICV4bW0xCisJbW92ZHF1CS0yNiglZWR4KSwgJXhtbTIKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCisJbW92CS0xMCglZWF4KSwgJWVjeAorCW1vdgktMTAoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKworCW1vdgktNiglZWF4KSwgJWVjeAorCW1vdgktNiglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCisJbW92endsCS0yKCVlYXgpLCAlZWN4CisJbW92endsCS0yKCVlZHgpLCAlZWJ4CisJY21wCSVibCwgJWNsCisJam5lCUwoZW5kKQorCWNtcAklYmgsICVjaAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woNTlieXRlcyk6CisJbW92ZHF1CS01OSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTU5KCVlZHgpLCAleG1tMgorCW1vdgkkLTU5LCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDNieXRlcyk6CisJbW92CSQtNDMsICVlYngKKwltb3ZkcXUJLTQzKCVlYXgpLCAleG1tMQorCW1vdmRxdQktNDMoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjdieXRlcyk6CisJbW92CSQtMjcsICVlYngKKwltb3ZkcXUJLTI3KCVlYXgpLCAleG1tMQorCW1vdmRxdQktMjcoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKwltb3ZsCS0xMSglZWF4KSwgJWVjeAorCW1vdmwJLTExKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisJbW92bAktNyglZWF4KSwgJWVjeAorCW1vdmwJLTcoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3Z6d2wJLTMoJWVheCksICVlY3gKKwltb3Z6d2wJLTMoJWVkeCksICVlYngKKwljbXBiCSVibCwgJWNsCisJam5lCUwoZW5kKQorCWNtcAklYngsICVjeAorCWpuZQlMKGVuZCkKKwltb3Z6YmwJLTEoJWVheCksICVlYXgKKwljbXBiCS0xKCVlZHgpLCAlYWwKKwltb3YJJDAsICVlYXgKKwlqbmUJTChlbmQpCisJUkVUVVJOCisjZW5kaWYKKwkucDJhbGlnbiA0CitMKDYwYnl0ZXMpOgorCW1vdmRxdQktNjAoJWVheCksICV4bW0xCisJbW92ZHF1CS02MCglZWR4KSwgJXhtbTIKKwltb3YJJC02MCwgJWVieAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQ0Ynl0ZXMpOgorCW1vdgkkLTQ0LCAlZWJ4CisJbW92ZHF1CS00NCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTQ0KCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDI4Ynl0ZXMpOgorCW1vdgkkLTI4LCAlZWJ4CisJbW92ZHF1CS0yOCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTI4KCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisKKwltb3YJLTEyKCVlYXgpLCAlZWN4CisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJbW92CS0xMiglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisjZWxzZQorCWNtcAktMTIoJWVkeCksICVlY3gKKyNlbmRpZgorCWpuZQlMKGZpbmRfZGlmZikKKworCW1vdgktOCglZWF4KSwgJWVjeAorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCW1vdgktOCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisjZWxzZQorCWNtcAktOCglZWR4KSwgJWVjeAorI2VuZGlmCisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CS00KCVlYXgpLCAlZWN4CisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJbW92CS00KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKyNlbHNlCisJY21wCS00KCVlZHgpLCAlZWN4CisjZW5kaWYKKwltb3YJJDAsICVlYXgKKwlqbmUJTChmaW5kX2RpZmYpCisJUkVUVVJOCisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwkucDJhbGlnbiA0CitMKDYxYnl0ZXMpOgorCW1vdmRxdQktNjEoJWVheCksICV4bW0xCisJbW92ZHF1CS02MSglZWR4KSwgJXhtbTIKKwltb3YJJC02MSwgJWVieAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQ1Ynl0ZXMpOgorCW1vdgkkLTQ1LCAlZWJ4CisJbW92ZHF1CS00NSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTQ1KCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDI5Ynl0ZXMpOgorCW1vdgkkLTI5LCAlZWJ4CisJbW92ZHF1CS0yOSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTI5KCVlZHgpLCAleG1tMgorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisKKwltb3YJLTEzKCVlYXgpLCAlZWN4CisJbW92CS0xMyglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CS05KCVlYXgpLCAlZWN4CisJbW92CS05KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisKKwltb3YJLTUoJWVheCksICVlY3gKKwltb3YJLTUoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3Z6YmwJLTEoJWVheCksICVlY3gKKwljbXAJLTEoJWVkeCksICVjbAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woNjJieXRlcyk6CisJbW92ZHF1CS02MiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTYyKCVlZHgpLCAleG1tMgorCW1vdgkkLTYyLCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDZieXRlcyk6CisJbW92CSQtNDYsICVlYngKKwltb3ZkcXUJLTQ2KCVlYXgpLCAleG1tMQorCW1vdmRxdQktNDYoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzBieXRlcyk6CisJbW92CSQtMzAsICVlYngKKwltb3ZkcXUJLTMwKCVlYXgpLCAleG1tMQorCW1vdmRxdQktMzAoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKwltb3YJLTE0KCVlYXgpLCAlZWN4CisJbW92CS0xNCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCW1vdgktMTAoJWVheCksICVlY3gKKwltb3YJLTEwKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisJbW92CS02KCVlYXgpLCAlZWN4CisJbW92CS02KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisJbW92endsCS0yKCVlYXgpLCAlZWN4CisJbW92endsCS0yKCVlZHgpLCAlZWJ4CisJY21wCSVibCwgJWNsCisJam5lCUwoZW5kKQorCWNtcAklYmgsICVjaAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woNjNieXRlcyk6CisJbW92ZHF1CS02MyglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTYzKCVlZHgpLCAleG1tMgorCW1vdgkkLTYzLCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDdieXRlcyk6CisJbW92CSQtNDcsICVlYngKKwltb3ZkcXUJLTQ3KCVlYXgpLCAleG1tMQorCW1vdmRxdQktNDcoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzFieXRlcyk6CisJbW92CSQtMzEsICVlYngKKwltb3ZkcXUJLTMxKCVlYXgpLCAleG1tMQorCW1vdmRxdQktMzEoJWVkeCksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKworCW1vdmwJLTE1KCVlYXgpLCAlZWN4CisJbW92bAktMTUoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3ZsCS0xMSglZWF4KSwgJWVjeAorCW1vdmwJLTExKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisJbW92bAktNyglZWF4KSwgJWVjeAorCW1vdmwJLTcoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3Z6d2wJLTMoJWVheCksICVlY3gKKwltb3Z6d2wJLTMoJWVkeCksICVlYngKKwljbXBiCSVibCwgJWNsCisJam5lCUwoZW5kKQorCWNtcAklYngsICVjeAorCWpuZQlMKGVuZCkKKwltb3Z6YmwJLTEoJWVheCksICVlYXgKKwljbXBiCS0xKCVlZHgpLCAlYWwKKwltb3YJJDAsICVlYXgKKwlqbmUJTChlbmQpCisJUkVUVVJOCisjZW5kaWYKKworCS5wMmFsaWduIDQKK0woNjRieXRlcyk6CisJbW92ZHF1CS02NCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTY0KCVlZHgpLCAleG1tMgorCW1vdgkkLTY0LCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNDhieXRlcyk6CisJbW92ZHF1CS00OCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTQ4KCVlZHgpLCAleG1tMgorCW1vdgkkLTQ4LCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzJieXRlcyk6CisJbW92ZHF1CS0zMiglZWF4KSwgJXhtbTEKKwltb3ZkcXUJLTMyKCVlZHgpLCAleG1tMgorCW1vdgkkLTMyLCAlZWJ4CisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKworCW1vdgktMTYoJWVheCksICVlY3gKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwltb3YJLTE2KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKyNlbHNlCisJY21wCS0xNiglZWR4KSwgJWVjeAorI2VuZGlmCisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CS0xMiglZWF4KSwgJWVjeAorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCW1vdgktMTIoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorI2Vsc2UKKwljbXAJLTEyKCVlZHgpLCAlZWN4CisjZW5kaWYKKwlqbmUJTChmaW5kX2RpZmYpCisKKwltb3YJLTgoJWVheCksICVlY3gKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwltb3YJLTgoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorI2Vsc2UKKwljbXAJLTgoJWVkeCksICVlY3gKKyNlbmRpZgorCWpuZQlMKGZpbmRfZGlmZikKKworCW1vdgktNCglZWF4KSwgJWVjeAorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCW1vdgktNCglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisjZWxzZQorCWNtcAktNCglZWR4KSwgJWVjeAorI2VuZGlmCisJbW92CSQwLCAlZWF4CisJam5lCUwoZmluZF9kaWZmKQorCVJFVFVSTgorCisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisJLnAyYWxpZ24gNAorTChsZXNzMTZieXRlcyk6CisJYWRkCSVlYngsICVlYXgKKwlhZGQJJWVieCwgJWVkeAorCisJbW92CSglZWF4KSwgJWVjeAorCW1vdgkoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKworCW1vdgk0KCVlYXgpLCAlZWN4CisJbW92CTQoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKworCW1vdgk4KCVlYXgpLCAlZWN4CisJbW92CTgoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKworCW1vdgkxMiglZWF4KSwgJWVjeAorCW1vdgkxMiglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJbW92CSQwLCAlZWF4CisJam5lCUwoZmluZF9kaWZmKQorCVJFVFVSTgorI2Vsc2UKKwkucDJhbGlnbiA0CitMKGxlc3MxNmJ5dGVzKToKKwlhZGQJJWVieCwgJWVheAorCWFkZAklZWJ4LCAlZWR4CisKKwltb3YJKCVlYXgpLCAlZWN4CisJY21wCSglZWR4KSwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKworCW1vdgk0KCVlYXgpLCAlZWN4CisJY21wCTQoJWVkeCksICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCisKKwltb3YJOCglZWF4KSwgJWVjeAorCWNtcAk4KCVlZHgpLCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorCisJbW92CTEyKCVlYXgpLCAlZWN4CisJY21wCTEyKCVlZHgpLCAlZWN4CisKKwltb3YJJDAsICVlYXgKKwlqbmUJTChmaW5kX2RpZmYpCisJUkVUVVJOCisjZW5kaWYKKworCS5wMmFsaWduIDQKK0woZmluZF9kaWZmKToKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwljbXBiCSVibCwgJWNsCisJam5lCUwoZW5kKQorCWNtcAklYngsICVjeAorCWpuZQlMKGVuZCkKKwlzaHIJJDE2LCVlY3gKKwlzaHIJJDE2LCVlYngKKwljbXAJJWJsLCAlY2wKKwlqbmUJTChlbmQpCisJY21wCSVieCwgJWN4CitMKGVuZCk6CisJUE9QCSglZWJ4KQorCW1vdgkkMSwgJWVheAorCWphCUwoYmlnZ2VyKQorCW5lZwklZWF4CitMKGJpZ2dlcik6CisJcmV0CisjZWxzZQorCVBPUAkoJWVieCkKKwltb3YJJDEsICVlYXgKKwlqZwlMKGJpZ2dlcikKKwluZWcJJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChiaWdnZXIpOgorCXJldAorI2VuZGlmCitFTkQgKE1FTUNNUCkKKworCS5zZWN0aW9uIC5yb2RhdGEuc3NlNC4yLCJhIixAcHJvZ2JpdHMKKwkucDJhbGlnbiAyCisJLnR5cGUJTCh0YWJsZV82NGJ5dGVzKSwgQG9iamVjdAorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorTCh0YWJsZV82NGJ5dGVzKToKKwkuaW50CUpNUFRCTCAoTCgwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNWJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoOGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDEwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDExYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDEyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDEzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDIwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDIxYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDIyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDIzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDMwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDMxYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDMyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDMzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQxYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDUwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDUxYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDUyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDUzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDYwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDYxYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDYyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDYzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDY0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorI2Vsc2UKK0wodGFibGVfNjRieXRlcyk6CisJLmludAlKTVBUQkwgKEwoMGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlNC13bWVtY21wLXNsbS5TIGIvbGliYy9hcmNoLXg4Ni9zaWx2ZXJtb250L3N0cmluZy9zc2U0LXdtZW1jbXAtc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmMzNTBiYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc2lsdmVybW9udC9zdHJpbmcvc3NlNC13bWVtY21wLXNsbS5TCkBAIC0wLDAgKzEsMzMgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNkZWZpbmUgVVNFX0FTX1dNRU1DTVAKKyNkZWZpbmUgTUVNQ01QIHdtZW1jbXAKKyNpbmNsdWRlICJzc2U0LW1lbWNtcC1zbG0uUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2Jjb3B5LlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iY29weS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGRmMWQwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2Jjb3B5LlMKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgkkT3BlbkJTRDogYmNvcHkuUyx2IDEuNSAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gbG9jb3JlLnMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi0JLyoKLQkgKiAob3YpYmNvcHkgKHNyYyxkc3QsY250KQotCSAqICB3c0B0b29scy5kZSAgICAgKFdvbGZnYW5nIFNvbGZyYW5rLCBUb29McyBHbWJIKSArNDktMjI4LTk4NTgwMAotCSAqLwotCi0jaWYgZGVmaW5lZChNRU1DT1BZKQotRU5UUlkobWVtY3B5KQotI2VsaWYgZGVmaW5lZChNRU1NT1ZFKQotRU5UUlkobWVtbW92ZSkKLSNlbHNlCi1FTlRSWShiY29weSkKLSNlbmRpZgotCXB1c2hsCSVlc2kKLQlwdXNobAklZWRpCi0jaWYgZGVmaW5lZChNRU1DT1BZKSB8fCBkZWZpbmVkKE1FTU1PVkUpCi0JbW92bAkxMiglZXNwKSwlZWRpCi0JbW92bAkxNiglZXNwKSwlZXNpCi0JbW92bAklZWRpLCAlZWF4Ci0jZWxzZQotCW1vdmwJMTIoJWVzcCksJWVzaQotCW1vdmwJMTYoJWVzcCksJWVkaQotI2VuZGlmCi0JbW92bAkyMCglZXNwKSwlZWN4Ci0JbW92bAklZWN4LCVlZHgKLQljbXBsCSVlc2ksJWVkaQkvKiBwb3RlbnRpYWxseSBvdmVybGFwcGluZz8gKi8KLQlqbmIJMWYKLQljbGQJCQkvKiBub3BlLCBjb3B5IGZvcndhcmRzLiAqLwotCXNocmwJJDIsJWVjeAkJLyogY29weSBieSB3b3JkcyAqLwotCXJlcAotCW1vdnNsCi0JbW92bAklZWR4LCVlY3gKLQlhbmRsCSQzLCVlY3gJCS8qIGFueSBieXRlcyBsZWZ0PyAqLwotCXJlcAotCW1vdnNiCi0JcG9wbAklZWRpCi0JcG9wbAklZXNpCi0JcmV0Ci0xOgotCWFkZGwJJWVjeCwlZWRpCS8qIGNvcHkgYmFja3dhcmRzLiAqLwotCWFkZGwJJWVjeCwlZXNpCi0Jc3RkCi0JYW5kbAkkMywlZWN4CQkvKiBhbnkgZnJhY3Rpb25hbCBieXRlcz8gKi8KLQlkZWNsCSVlZGkKLQlkZWNsCSVlc2kKLQlyZXAKLQltb3ZzYgotCW1vdmwJJWVkeCwlZWN4Ci0Jc2hybAkkMiwlZWN4Ci0Jc3VibAkkMywlZXNpCi0Jc3VibAkkMywlZWRpCi0JcmVwCi0JbW92c2wKLQlwb3BsCSVlZGkKLQlwb3BsCSVlc2kKLQljbGQKLQlyZXQKLSNpZiBkZWZpbmVkKE1FTUNPUFkpCi1FTkQobWVtY3B5KQotI2VsaWYgZGVmaW5lZChNRU1NT1ZFKQotRU5EKG1lbW1vdmUpCi0jZWxzZQotRU5EKGJjb3B5KQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9jYWNoZS5oIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvY2FjaGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlhZmY1Yy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLUNvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi1BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLVNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotLyogVmFsdWVzIGFyZSBvcHRpbWl6ZWQgZm9yIEF0b20gKi8KLSNkZWZpbmUgU0hBUkVEX0NBQ0hFX1NJWkUJKDUxMioxMDI0KQkJCS8qIEF0b20gTDIgQ2FjaGUgKi8KLSNkZWZpbmUgREFUQV9DQUNIRV9TSVpFCQkoMjQqMTAyNCkJCQkvKiBBdG9tIEwxIERhdGEgQ2FjaGUgKi8KLSNkZWZpbmUgU0hBUkVEX0NBQ0hFX1NJWkVfSEFMRgkoU0hBUkVEX0NBQ0hFX1NJWkUgLyAyKQotI2RlZmluZSBEQVRBX0NBQ0hFX1NJWkVfSEFMRgkoREFUQV9DQUNIRV9TSVpFIC8gMikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNtcC5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtY21wLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNTA1MzAuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtY21wLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgkkT3BlbkJTRDogbWVtY21wLlMsdiAxLjQgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCi0gKiBQdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1FTlRSWShtZW1jbXApCi0JcHVzaGwJJWVkaQotCXB1c2hsCSVlc2kKLQltb3ZsCTEyKCVlc3ApLCVlZGkKLQltb3ZsCTE2KCVlc3ApLCVlc2kKLQljbGQJCQkJLyogc2V0IGNvbXBhcmUgZGlyZWN0aW9uIGZvcndhcmQgKi8KLQotCW1vdmwJMjAoJWVzcCksJWVjeAkJLyogY29tcGFyZSBieSB3b3JkcyAqLwotCXNocmwJJDIsJWVjeAotCXJlcGUKLQljbXBzbAotCWpuZQlMNQkJCS8qIGRvIHdlIG1hdGNoIHNvIGZhcj8gKi8KLQotCW1vdmwJMjAoJWVzcCksJWVjeAkJLyogY29tcGFyZSByZW1haW5kZXIgYnkgYnl0ZXMgKi8KLQlhbmRsCSQzLCVlY3gKLQlyZXBlCi0JY21wc2IKLQlqbmUJTDYJCQkvKiBkbyB3ZSBtYXRjaD8gKi8KLQotCXhvcmwJJWVheCwlZWF4CQkvKiB3ZSBtYXRjaCwgcmV0dXJuIHplcm8JKi8KLQlwb3BsCSVlc2kKLQlwb3BsCSVlZGkKLQlyZXQKLQotTDU6CW1vdmwJJDQsJWVjeAkJCS8qIFdlIGtub3cgdGhhdCBvbmUgb2YgdGhlIG5leHQJKi8KLQlzdWJsCSVlY3gsJWVkaQkJLyogZm91ciBwYWlycyBvZiBieXRlcyBkbyBub3QJKi8KLQlzdWJsCSVlY3gsJWVzaQkJLyogbWF0Y2guCQkJKi8KLQlyZXBlCi0JY21wc2IKLUw2Ogltb3Z6YmwgIC0xKCVlZGkpLCVlYXgJCS8qIFBlcmZvcm0gdW5zaWduZWQgY29tcGFyaXNvbgkqLwotCW1vdnpibAktMSglZXNpKSwlZWR4Ci0Jc3VibAklZWR4LCVlYXgKLQlwb3BsCSVlc2kKLQlwb3BsCSVlZGkKLQlyZXQKLUVORChtZW1jbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLWluZGV4LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItaW5kZXgtYXRvbS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTFlMWQ0Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItaW5kZXgtYXRvbS5TCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLUNvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi1BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLVNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2RlZmluZSBzdHJjaHIgIGluZGV4Ci0jaW5jbHVkZSAic3NlMi1zdHJjaHItYXRvbS5TIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1tZW1zZXQtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1tZW1zZXQtYXRvbS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTRiZjUxLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtc2V0LWF0b20uUworKysgL2Rldi9udWxsCkBAIC0xLDkyMSArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSAiY2FjaGUuaCIKLSN1bmRlZiBfX2k2ODYKLQotI2lmbmRlZiBMCi0jIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKLSNlbmRpZgotCi0jaWZuZGVmIEFMSUdOCi0jIGRlZmluZSBBTElHTihuKQkucDJhbGlnbiBuCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfc3RhcnRwcm9jCi0jIGRlZmluZSBjZmlfc3RhcnRwcm9jCQkJLmNmaV9zdGFydHByb2MKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9lbmRwcm9jCi0jIGRlZmluZSBjZmlfZW5kcHJvYwkJCS5jZmlfZW5kcHJvYwotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKLSMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9yZXN0b3JlCi0jIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCQkuY2ZpX3Jlc3RvcmUgcmVnCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKLSMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCi0jZW5kaWYKLQotI2lmbmRlZiBFTlRSWQotIyBkZWZpbmUgRU5UUlkobmFtZSkJCQlcCi0JLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsgCVwKLQkuZ2xvYmwgbmFtZTsJCQlcCi0JLnAyYWxpZ24gNDsJCQlcCi1uYW1lOgkJCQkJXAotCWNmaV9zdGFydHByb2MKLSNlbmRpZgotCi0jaWZuZGVmIEVORAotIyBkZWZpbmUgRU5EKG5hbWUpCQkJXAotCWNmaV9lbmRwcm9jOwkJCVwKLQkuc2l6ZSBuYW1lLCAuLW5hbWUKLSNlbmRpZgotCi0jZGVmaW5lIENGSV9QVVNIKFJFRykJCQkJCQlcCi0gIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQkJCQlcCi0gIGNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCi0KLSNkZWZpbmUgQ0ZJX1BPUChSRUcpCQkJCQkJXAotICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCQkJCVwKLSAgY2ZpX3Jlc3RvcmUgKFJFRykKLQotI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQotI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQotCi0jaWZkZWYgVVNFX0FTX0JaRVJPCi0jIGRlZmluZSBERVNUCQlQQVJNUwotIyBkZWZpbmUgTEVOCQlERVNUKzQKLSMgZGVmaW5lIFNFVFJUTlZBTAotI2Vsc2UKLSMgZGVmaW5lIERFU1QJCVBBUk1TCi0jIGRlZmluZSBDSFIJCURFU1QrNAotIyBkZWZpbmUgTEVOCQlDSFIrNAotIyBkZWZpbmUgU0VUUlROVkFMCW1vdmwgREVTVCglZXNwKSwgJWVheAotI2VuZGlmCi0KLSNpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotIyBkZWZpbmUgRU5UUkFOQ0UJUFVTSCAoJWVieCk7Ci0jIGRlZmluZSBSRVRVUk5fRU5ECVBPUCAoJWVieCk7IHJldAotIyBkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5EOyBDRklfUFVTSCAoJWVieCkKLSMgZGVmaW5lIFBBUk1TCQk4CQkvKiBQcmVzZXJ2ZSBFQlguICAqLwotIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkgLSBCCi0KLS8qIExvYWQgYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlIGludG8gRUJYIGFuZCBicmFuY2ggdG8gaXQuICBUQUJMRSBpcyBhCi0gICBqdW1wIHRhYmxlIHdpdGggcmVsYXRpdmUgb2Zmc2V0cy4gICAqLwotIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSkJCQkJXAotICAgIC8qIFdlIGZpcnN0IGxvYWQgUEMgaW50byBFQlguICAqLwkJCQlcCi0gICAgY2FsbAlfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4OwkJCQlcCi0gICAgLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhYmxlLiAgKi8JCQlcCi0gICAgYWRkCQkkKFRBQkxFIC0gLiksICVlYng7CQkJCVwKLSAgICAvKiBHZXQgdGhlIGVudHJ5IGFuZCBjb252ZXJ0IHRoZSByZWxhdGl2ZSBvZmZzZXQgdG8gdGhlCVwKLSAgICAgICBhYnNvbHV0ZSBhZGRyZXNzLiAgKi8JCQkJCVwKLSAgICBhZGQJCSglZWJ4LCVlY3gsNCksICVlYng7CQkJCVwKLSAgICBhZGQJCSVlY3gsICVlZHg7CQkJCQlcCi0gICAgLyogV2UgbG9hZGVkIHRoZSBqdW1wIHRhYmxlIGFuZCBhZGp1ZXN0ZWQgRURYLiBHby4gICovCVwKLSAgICBqbXAJCSolZWJ4Ci0KLQkuc2VjdGlvbgkuZ251LmxpbmtvbmNlLnQuX19pNjg2LmdldF9wY190aHVuay5ieCwiYXgiLEBwcm9nYml0cwotCS5nbG9ibAlfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4Ci0JLmhpZGRlbglfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4Ci0JQUxJR04gKDQpCi0JLnR5cGUJX19pNjg2LmdldF9wY190aHVuay5ieCxAZnVuY3Rpb24KLV9faTY4Ni5nZXRfcGNfdGh1bmsuYng6Ci0JbW92bAkoJWVzcCksICVlYngKLQlyZXQKLSNlbHNlCi0jIGRlZmluZSBFTlRSQU5DRQotIyBkZWZpbmUgUkVUVVJOX0VORAlyZXQKLSMgZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORAotIyBkZWZpbmUgUEFSTVMJCTQKLSMgZGVmaW5lIEpNUFRCTChJLCBCKQlJCi0KLS8qIEJyYW5jaCB0byBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUuICBUQUJMRSBpcyBhIGp1bXAgdGFibGUgd2l0aAotICAgYWJzb2x1dGUgb2Zmc2V0cy4gICovCi0jIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFKQkJCQlcCi0gICAgYWRkCQklZWN4LCAlZWR4OwkJCQkJXAotICAgIGptcAkJKlRBQkxFKCwlZWN4LDQpCi0jZW5kaWYKLQotI2lmbmRlZiBNRU1TRVQKLSMgZGVmaW5lIE1FTVNFVCBtZW1zZXQKLSNlbmRpZgotCi0JLnNlY3Rpb24gLnRleHQuc3NlMiwiYXgiLEBwcm9nYml0cwotCUFMSUdOICg0KQotRU5UUlkgKE1FTVNFVCkKLQlFTlRSQU5DRQotCi0JbW92bAlMRU4oJWVzcCksICVlY3gKLSNpZmRlZiBVU0VfQVNfQlpFUk8KLQl4b3IJJWVheCwgJWVheAotI2Vsc2UKLQltb3Z6YmwJQ0hSKCVlc3ApLCAlZWF4Ci0JbW92YgklYWwsICVhaAotCS8qIEZpbGwgdGhlIHdob2xlIEVBWCB3aXRoIHBhdHRlcm4uICAqLwotCW1vdmwJJWVheCwgJWVkeAotCXNobAkkMTYsICVlYXgKLQlvcgklZWR4LCAlZWF4Ci0jZW5kaWYKLQltb3ZsCURFU1QoJWVzcCksICVlZHgKLQljbXAJJDMyLCAlZWN4Ci0JamFlCUwoMzJieXRlc29ybW9yZSkKLQotTCh3cml0ZV9sZXNzMzJieXRlcyk6Ci0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCi0KLQkucHVzaHNlY3Rpb24gLnJvZGF0YS5zc2UyLCJhIixAcHJvZ2JpdHMKLQlBTElHTiAoMikKLUwodGFibGVfbGVzc18zMmJ5dGVzKToKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8wYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzJieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8zYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfNGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzVieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV82Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfN2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzhieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV85Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMTBieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8xMWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzEyYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMTNieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8xNGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE1Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMTZieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8xN2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE4Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMTlieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8yMGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzIxYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMjJieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8yM2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI0Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMjVieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8yNmJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI3Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMjhieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8yOWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzMwYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMzFieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkucG9wc2VjdGlvbgotCi0JQUxJR04gKDQpCi1MKHdyaXRlXzI4Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTI4KCVlZHgpCi1MKHdyaXRlXzI0Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTI0KCVlZHgpCi1MKHdyaXRlXzIwYnl0ZXMpOgotCW1vdmwJJWVheCwgLTIwKCVlZHgpCi1MKHdyaXRlXzE2Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTE2KCVlZHgpCi1MKHdyaXRlXzEyYnl0ZXMpOgotCW1vdmwJJWVheCwgLTEyKCVlZHgpCi1MKHdyaXRlXzhieXRlcyk6Ci0JbW92bAklZWF4LCAtOCglZWR4KQotTCh3cml0ZV80Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTQoJWVkeCkKLUwod3JpdGVfMGJ5dGVzKToKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTCh3cml0ZV8yOWJ5dGVzKToKLQltb3ZsCSVlYXgsIC0yOSglZWR4KQotTCh3cml0ZV8yNWJ5dGVzKToKLQltb3ZsCSVlYXgsIC0yNSglZWR4KQotTCh3cml0ZV8yMWJ5dGVzKToKLQltb3ZsCSVlYXgsIC0yMSglZWR4KQotTCh3cml0ZV8xN2J5dGVzKToKLQltb3ZsCSVlYXgsIC0xNyglZWR4KQotTCh3cml0ZV8xM2J5dGVzKToKLQltb3ZsCSVlYXgsIC0xMyglZWR4KQotTCh3cml0ZV85Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTkoJWVkeCkKLUwod3JpdGVfNWJ5dGVzKToKLQltb3ZsCSVlYXgsIC01KCVlZHgpCi1MKHdyaXRlXzFieXRlcyk6Ci0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwod3JpdGVfMzBieXRlcyk6Ci0JbW92bAklZWF4LCAtMzAoJWVkeCkKLUwod3JpdGVfMjZieXRlcyk6Ci0JbW92bAklZWF4LCAtMjYoJWVkeCkKLUwod3JpdGVfMjJieXRlcyk6Ci0JbW92bAklZWF4LCAtMjIoJWVkeCkKLUwod3JpdGVfMThieXRlcyk6Ci0JbW92bAklZWF4LCAtMTgoJWVkeCkKLUwod3JpdGVfMTRieXRlcyk6Ci0JbW92bAklZWF4LCAtMTQoJWVkeCkKLUwod3JpdGVfMTBieXRlcyk6Ci0JbW92bAklZWF4LCAtMTAoJWVkeCkKLUwod3JpdGVfNmJ5dGVzKToKLQltb3ZsCSVlYXgsIC02KCVlZHgpCi1MKHdyaXRlXzJieXRlcyk6Ci0JbW92dwklYXgsIC0yKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwod3JpdGVfMzFieXRlcyk6Ci0JbW92bAklZWF4LCAtMzEoJWVkeCkKLUwod3JpdGVfMjdieXRlcyk6Ci0JbW92bAklZWF4LCAtMjcoJWVkeCkKLUwod3JpdGVfMjNieXRlcyk6Ci0JbW92bAklZWF4LCAtMjMoJWVkeCkKLUwod3JpdGVfMTlieXRlcyk6Ci0JbW92bAklZWF4LCAtMTkoJWVkeCkKLUwod3JpdGVfMTVieXRlcyk6Ci0JbW92bAklZWF4LCAtMTUoJWVkeCkKLUwod3JpdGVfMTFieXRlcyk6Ci0JbW92bAklZWF4LCAtMTEoJWVkeCkKLUwod3JpdGVfN2J5dGVzKToKLQltb3ZsCSVlYXgsIC03KCVlZHgpCi1MKHdyaXRlXzNieXRlcyk6Ci0JbW92dwklYXgsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLS8qIEVDWCA+IDMyIGFuZCBFRFggaXMgNCBieXRlIGFsaWduZWQuICAqLwotTCgzMmJ5dGVzb3Jtb3JlKToKLQkvKiBGaWxsIHhtbTAgd2l0aCB0aGUgcGF0dGVybi4gICovCi0jaWZkZWYgVVNFX0FTX0JaRVJPCi0JcHhvcgkleG1tMCwgJXhtbTAKLSNlbHNlCi0JbW92ZAklZWF4LCAleG1tMAotCXBzaHVmZAkkMCwgJXhtbTAsICV4bW0wCi0jZW5kaWYKLQl0ZXN0bAkkMHhmLCAlZWR4Ci0JanoJTChhbGlnbmVkXzE2KQotLyogRUNYID4gMzIgYW5kIEVEWCBpcyBub3QgMTYgYnl0ZSBhbGlnbmVkLiAgKi8KLUwobm90X2FsaWduZWRfMTYpOgotCW1vdmRxdQkleG1tMCwgKCVlZHgpCi0JbW92bAklZWR4LCAlZWF4Ci0JYW5kCSQtMTYsICVlZHgKLQlhZGQJJDE2LCAlZWR4Ci0Jc3ViCSVlZHgsICVlYXgKLQlhZGQJJWVheCwgJWVjeAotCW1vdmQJJXhtbTAsICVlYXgKLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2KToKLQljbXAJJDEyOCwgJWVjeAotCWphZQlMKDEyOGJ5dGVzb3Jtb3JlKQotCi1MKGFsaWduZWRfMTZfbGVzczEyOGJ5dGVzKToKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQotCUFMSUdOICg0KQotTCgxMjhieXRlc29ybW9yZSk6Ci0jaWZkZWYgU0hBUkVEX0NBQ0hFX1NJWkUKLQlQVVNIICglZWJ4KQotCW1vdgkkU0hBUkVEX0NBQ0hFX1NJWkUsICVlYngKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JY2FsbAlfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4Ci0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQltb3YJX194ODZfc2hhcmVkX2NhY2hlX3NpemVAR09UT0ZGKCVlYngpLCAlZWJ4Ci0jIGVsc2UKLQlQVVNIICglZWJ4KQotCW1vdglfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZSwgJWVieAotIyBlbmRpZgotI2VuZGlmCi0JY21wCSVlYngsICVlY3gKLQlqYWUJTCgxMjhieXRlc29ybW9yZV9udF9zdGFydCkKLQotCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFCi0JUE9QICglZWJ4KQotIyBkZWZpbmUgUkVTVE9SRV9FQlhfU1RBVEUgQ0ZJX1BVU0ggKCVlYngpCi0JY21wCSREQVRBX0NBQ0hFX1NJWkUsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0jICBkZWZpbmUgUkVTVE9SRV9FQlhfU1RBVEUKLQljYWxsCV9faTY4Ni5nZXRfcGNfdGh1bmsuYngKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQlQT1AgKCVlYngpCi0jICBkZWZpbmUgUkVTVE9SRV9FQlhfU1RBVEUgQ0ZJX1BVU0ggKCVlYngpCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZSwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0KLQlqYWUJTCgxMjhieXRlc19MMl9ub3JtYWwpCi0Jc3VibAkkMTI4LCAlZWN4Ci1MKDEyOGJ5dGVzb3Jtb3JlX25vcm1hbCk6Ci0Jc3ViCSQxMjgsICVlY3gKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgxMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgyMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgzMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg0MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg1MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg2MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg3MCglZWR4KQotCWxlYQkxMjgoJWVkeCksICVlZHgKLQlqYglMKDEyOGJ5dGVzbGVzc19ub3JtYWwpCi0KLQotCXN1YgkkMTI4LCAlZWN4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MTAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MzAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NDAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NTAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NjAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NzAoJWVkeCkKLQlsZWEJMTI4KCVlZHgpLCAlZWR4Ci0JamFlCUwoMTI4Ynl0ZXNvcm1vcmVfbm9ybWFsKQotCi1MKDEyOGJ5dGVzbGVzc19ub3JtYWwpOgotCWFkZAkkMTI4LCAlZWN4Ci0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV8xNl8xMjhieXRlcykpCi0KLQlBTElHTiAoNCkKLUwoMTI4Ynl0ZXNfTDJfbm9ybWFsKToKLQlwcmVmZXRjaHQwCTB4MzgwKCVlZHgpCi0JcHJlZmV0Y2h0MAkweDNjMCglZWR4KQotCXN1YgkkMTI4LCAlZWN4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4MTAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4MjAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4MzAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4NDAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4NTAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4NjAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4NzAoJWVkeCkKLQlhZGQJJDEyOCwgJWVkeAotCWNtcAkkMTI4LCAlZWN4Ci0JamFlCUwoMTI4Ynl0ZXNfTDJfbm9ybWFsKQotCi1MKDEyOGJ5dGVzbGVzc19MMl9ub3JtYWwpOgotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCi0JUkVTVE9SRV9FQlhfU1RBVEUKLUwoMTI4Ynl0ZXNvcm1vcmVfbnRfc3RhcnQpOgotCXN1YgklZWJ4LCAlZWN4Ci0JbW92CSVlYngsICVlYXgKLQlhbmQJJDB4N2YsICVlYXgKLQlhZGQJJWVheCwgJWVjeAotCW1vdmQJJXhtbTAsICVlYXgKLQlBTElHTiAoNCkKLUwoMTI4Ynl0ZXNvcm1vcmVfc2hhcmVkX2NhY2hlX2xvb3ApOgotCXByZWZldGNodDAJMHgzYzAoJWVkeCkKLQlwcmVmZXRjaHQwCTB4MzgwKCVlZHgpCi0Jc3ViCSQweDgwLCAlZWJ4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MTAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MzAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NDAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NTAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NjAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NzAoJWVkeCkKLQlhZGQJJDB4ODAsICVlZHgKLQljbXAJJDB4ODAsICVlYngKLQlqYWUJTCgxMjhieXRlc29ybW9yZV9zaGFyZWRfY2FjaGVfbG9vcCkKLQljbXAJJDB4ODAsICVlY3gKLQlqYglMKHNoYXJlZF9jYWNoZV9sb29wX2VuZCkKLQlBTElHTiAoNCkKLUwoMTI4Ynl0ZXNvcm1vcmVfbnQpOgotCXN1YgkkMHg4MCwgJWVjeAotCW1vdm50ZHEJJXhtbTAsICglZWR4KQotCW1vdm50ZHEJJXhtbTAsIDB4MTAoJWVkeCkKLQltb3ZudGRxCSV4bW0wLCAweDIwKCVlZHgpCi0JbW92bnRkcQkleG1tMCwgMHgzMCglZWR4KQotCW1vdm50ZHEJJXhtbTAsIDB4NDAoJWVkeCkKLQltb3ZudGRxCSV4bW0wLCAweDUwKCVlZHgpCi0JbW92bnRkcQkleG1tMCwgMHg2MCglZWR4KQotCW1vdm50ZHEJJXhtbTAsIDB4NzAoJWVkeCkKLQlhZGQJJDB4ODAsICVlZHgKLQljbXAJJDB4ODAsICVlY3gKLQlqYWUJTCgxMjhieXRlc29ybW9yZV9udCkKLQlzZmVuY2UKLUwoc2hhcmVkX2NhY2hlX2xvb3BfZW5kKToKLSNpZiBkZWZpbmVkIERBVEFfQ0FDSEVfU0laRSB8fCAhKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlQT1AgKCVlYngpCi0jZW5kaWYKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQotCi0JLnB1c2hzZWN0aW9uIC5yb2RhdGEuc3NlMiwiYSIsQHByb2diaXRzCi0JQUxJR04gKDIpCi1MKHRhYmxlXzE2XzEyOGJ5dGVzKToKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTEyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTIxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkucG9wc2VjdGlvbgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTEyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExMiglZWR4KQotTChhbGlnbmVkXzE2Xzk2Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTk2KCVlZHgpCi1MKGFsaWduZWRfMTZfODBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODAoJWVkeCkKLUwoYWxpZ25lZF8xNl82NGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02NCglZWR4KQotTChhbGlnbmVkXzE2XzQ4Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTQ4KCVlZHgpCi1MKGFsaWduZWRfMTZfMzJieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzIoJWVkeCkKLUwoYWxpZ25lZF8xNl8xNmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xNiglZWR4KQotTChhbGlnbmVkXzE2XzBieXRlcyk6Ci0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMTNieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTEzKCVlZHgpCi1MKGFsaWduZWRfMTZfOTdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtOTcoJWVkeCkKLUwoYWxpZ25lZF8xNl84MWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC04MSglZWR4KQotTChhbGlnbmVkXzE2XzY1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTY1KCVlZHgpCi1MKGFsaWduZWRfMTZfNDlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDkoJWVkeCkKLUwoYWxpZ25lZF8xNl8zM2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0zMyglZWR4KQotTChhbGlnbmVkXzE2XzE3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTE3KCVlZHgpCi1MKGFsaWduZWRfMTZfMWJ5dGVzKToKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzExNGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMTQoJWVkeCkKLUwoYWxpZ25lZF8xNl85OGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC05OCglZWR4KQotTChhbGlnbmVkXzE2XzgyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTgyKCVlZHgpCi1MKGFsaWduZWRfMTZfNjZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNjYoJWVkeCkKLUwoYWxpZ25lZF8xNl81MGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC01MCglZWR4KQotTChhbGlnbmVkXzE2XzM0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTM0KCVlZHgpCi1MKGFsaWduZWRfMTZfMThieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTgoJWVkeCkKLUwoYWxpZ25lZF8xNl8yYnl0ZXMpOgotCW1vdncJJWF4LCAtMiglZWR4KQotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTE1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExNSglZWR4KQotTChhbGlnbmVkXzE2Xzk5Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTk5KCVlZHgpCi1MKGFsaWduZWRfMTZfODNieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODMoJWVkeCkKLUwoYWxpZ25lZF8xNl82N2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02NyglZWR4KQotTChhbGlnbmVkXzE2XzUxYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTUxKCVlZHgpCi1MKGFsaWduZWRfMTZfMzVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzUoJWVkeCkKLUwoYWxpZ25lZF8xNl8xOWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xOSglZWR4KQotTChhbGlnbmVkXzE2XzNieXRlcyk6Ci0JbW92dwklYXgsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMTZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTE2KCVlZHgpCi1MKGFsaWduZWRfMTZfMTAwYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEwMCglZWR4KQotTChhbGlnbmVkXzE2Xzg0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTg0KCVlZHgpCi1MKGFsaWduZWRfMTZfNjhieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNjgoJWVkeCkKLUwoYWxpZ25lZF8xNl81MmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC01MiglZWR4KQotTChhbGlnbmVkXzE2XzM2Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTM2KCVlZHgpCi1MKGFsaWduZWRfMTZfMjBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMjAoJWVkeCkKLUwoYWxpZ25lZF8xNl80Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTQoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzExN2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMTcoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDFieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTAxKCVlZHgpCi1MKGFsaWduZWRfMTZfODVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODUoJWVkeCkKLUwoYWxpZ25lZF8xNl82OWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02OSglZWR4KQotTChhbGlnbmVkXzE2XzUzYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTUzKCVlZHgpCi1MKGFsaWduZWRfMTZfMzdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzcoJWVkeCkKLUwoYWxpZ25lZF8xNl8yMWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yMSglZWR4KQotTChhbGlnbmVkXzE2XzVieXRlcyk6Ci0JbW92bAklZWF4LCAtNSglZWR4KQotCW1vdmIJJWFsLCAtMSglZWR4KQotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTE4Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExOCglZWR4KQotTChhbGlnbmVkXzE2XzEwMmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMDIoJWVkeCkKLUwoYWxpZ25lZF8xNl84NmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC04NiglZWR4KQotTChhbGlnbmVkXzE2XzcwYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTcwKCVlZHgpCi1MKGFsaWduZWRfMTZfNTRieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNTQoJWVkeCkKLUwoYWxpZ25lZF8xNl8zOGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0zOCglZWR4KQotTChhbGlnbmVkXzE2XzIyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTIyKCVlZHgpCi1MKGFsaWduZWRfMTZfNmJ5dGVzKToKLQltb3ZsCSVlYXgsIC02KCVlZHgpCi0JbW92dwklYXgsIC0yKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMTlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTE5KCVlZHgpCi1MKGFsaWduZWRfMTZfMTAzYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEwMyglZWR4KQotTChhbGlnbmVkXzE2Xzg3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTg3KCVlZHgpCi1MKGFsaWduZWRfMTZfNzFieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzEoJWVkeCkKLUwoYWxpZ25lZF8xNl81NWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC01NSglZWR4KQotTChhbGlnbmVkXzE2XzM5Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTM5KCVlZHgpCi1MKGFsaWduZWRfMTZfMjNieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMjMoJWVkeCkKLUwoYWxpZ25lZF8xNl83Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTcoJWVkeCkKLQltb3Z3CSVheCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzEyMGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMjAoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDRieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTA0KCVlZHgpCi1MKGFsaWduZWRfMTZfODhieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODgoJWVkeCkKLUwoYWxpZ25lZF8xNl83MmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC03MiglZWR4KQotTChhbGlnbmVkXzE2XzU2Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTU2KCVlZHgpCi1MKGFsaWduZWRfMTZfNDBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDAoJWVkeCkKLUwoYWxpZ25lZF8xNl8yNGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yNCglZWR4KQotTChhbGlnbmVkXzE2XzhieXRlcyk6Ci0JbW92cQkleG1tMCwgLTgoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzEyMWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMjEoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTA1KCVlZHgpCi1MKGFsaWduZWRfMTZfODlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODkoJWVkeCkKLUwoYWxpZ25lZF8xNl83M2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC03MyglZWR4KQotTChhbGlnbmVkXzE2XzU3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTU3KCVlZHgpCi1MKGFsaWduZWRfMTZfNDFieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDEoJWVkeCkKLUwoYWxpZ25lZF8xNl8yNWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yNSglZWR4KQotTChhbGlnbmVkXzE2XzlieXRlcyk6Ci0JbW92cQkleG1tMCwgLTkoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzEyMmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMjIoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTA2KCVlZHgpCi1MKGFsaWduZWRfMTZfOTBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtOTAoJWVkeCkKLUwoYWxpZ25lZF8xNl83NGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC03NCglZWR4KQotTChhbGlnbmVkXzE2XzU4Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTU4KCVlZHgpCi1MKGFsaWduZWRfMTZfNDJieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDIoJWVkeCkKLUwoYWxpZ25lZF8xNl8yNmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yNiglZWR4KQotTChhbGlnbmVkXzE2XzEwYnl0ZXMpOgotCW1vdnEJJXhtbTAsIC0xMCglZWR4KQotCW1vdncJJWF4LCAtMiglZWR4KQotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTIzYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEyMyglZWR4KQotTChhbGlnbmVkXzE2XzEwN2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMDcoJWVkeCkKLUwoYWxpZ25lZF8xNl85MWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC05MSglZWR4KQotTChhbGlnbmVkXzE2Xzc1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTc1KCVlZHgpCi1MKGFsaWduZWRfMTZfNTlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNTkoJWVkeCkKLUwoYWxpZ25lZF8xNl80M2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC00MyglZWR4KQotTChhbGlnbmVkXzE2XzI3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTI3KCVlZHgpCi1MKGFsaWduZWRfMTZfMTFieXRlcyk6Ci0JbW92cQkleG1tMCwgLTExKCVlZHgpCi0JbW92dwklYXgsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMjRieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTI0KCVlZHgpCi1MKGFsaWduZWRfMTZfMTA4Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEwOCglZWR4KQotTChhbGlnbmVkXzE2XzkyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTkyKCVlZHgpCi1MKGFsaWduZWRfMTZfNzZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzYoJWVkeCkKLUwoYWxpZ25lZF8xNl82MGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02MCglZWR4KQotTChhbGlnbmVkXzE2XzQ0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTQ0KCVlZHgpCi1MKGFsaWduZWRfMTZfMjhieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMjgoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMmJ5dGVzKToKLQltb3ZxCSV4bW0wLCAtMTIoJWVkeCkKLQltb3ZsCSVlYXgsIC00KCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMjVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTI1KCVlZHgpCi1MKGFsaWduZWRfMTZfMTA5Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEwOSglZWR4KQotTChhbGlnbmVkXzE2XzkzYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTkzKCVlZHgpCi1MKGFsaWduZWRfMTZfNzdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzcoJWVkeCkKLUwoYWxpZ25lZF8xNl82MWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02MSglZWR4KQotTChhbGlnbmVkXzE2XzQ1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTQ1KCVlZHgpCi1MKGFsaWduZWRfMTZfMjlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMjkoJWVkeCkKLUwoYWxpZ25lZF8xNl8xM2J5dGVzKToKLQltb3ZxCSV4bW0wLCAtMTMoJWVkeCkKLQltb3ZsCSVlYXgsIC01KCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMjZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTI2KCVlZHgpCi1MKGFsaWduZWRfMTZfMTEwYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExMCglZWR4KQotTChhbGlnbmVkXzE2Xzk0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTk0KCVlZHgpCi1MKGFsaWduZWRfMTZfNzhieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzgoJWVkeCkKLUwoYWxpZ25lZF8xNl82MmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02MiglZWR4KQotTChhbGlnbmVkXzE2XzQ2Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTQ2KCVlZHgpCi1MKGFsaWduZWRfMTZfMzBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzAoJWVkeCkKLUwoYWxpZ25lZF8xNl8xNGJ5dGVzKToKLQltb3ZxCSV4bW0wLCAtMTQoJWVkeCkKLQltb3ZsCSVlYXgsIC02KCVlZHgpCi0JbW92dwklYXgsIC0yKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMjdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTI3KCVlZHgpCi1MKGFsaWduZWRfMTZfMTExYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExMSglZWR4KQotTChhbGlnbmVkXzE2Xzk1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTk1KCVlZHgpCi1MKGFsaWduZWRfMTZfNzlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzkoJWVkeCkKLUwoYWxpZ25lZF8xNl82M2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02MyglZWR4KQotTChhbGlnbmVkXzE2XzQ3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTQ3KCVlZHgpCi1MKGFsaWduZWRfMTZfMzFieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzEoJWVkeCkKLUwoYWxpZ25lZF8xNl8xNWJ5dGVzKToKLQltb3ZxCSV4bW0wLCAtMTUoJWVkeCkKLQltb3ZsCSVlYXgsIC03KCVlZHgpCi0JbW92dwklYXgsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOX0VORAotCi1FTkQgKE1FTVNFVCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNtcDE2LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNtcDE2LWF0b20uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJlOGYzZC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jbXAxNi1hdG9tLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDEzLCBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jZGVmaW5lIE1FTUNNUCAgX19tZW1jbXAxNgotCi0vKiBpbnQgX19tZW1jbXAxNihjb25zdCB1bnNpZ25lZCBzaG9ydCAqcHRyMSwgY29uc3QgdW5zaWduZWQgc2hvcnQgKnB0cjIsIHNpemVfdCBuKTsgKi8KLQotI2RlZmluZSBVU0VfVVRGMTYKLSNkZWZpbmUgVVNFX0FTX01FTUNNUDE2IDEKLSNpbmNsdWRlICJzc3NlMy1tZW1jbXAtYXRvbS5TIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY3B5LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNweS1hdG9tLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwODBhMzguLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY3B5LWF0b20uUworKysgL2Rldi9udWxsCkBAIC0xLDMyMDAgKzAsMCBAQAotLyoKLUNvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi1BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLVNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2luY2x1ZGUgImNhY2hlLmgiCi0jdW5kZWYgX19pNjg2Ci0KLSNpZm5kZWYgTUVNQ1BZCi0jIGRlZmluZSBNRU1DUFkJbWVtY3B5Ci0jZW5kaWYKLQotI2lmbmRlZiBMCi0jIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9zdGFydHByb2MKLSMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9lbmRwcm9jCi0jIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9yZWxfb2Zmc2V0Ci0jIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfcmVzdG9yZQotIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKLSMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCi0jZW5kaWYKLQotI2lmbmRlZiBFTlRSWQotIyBkZWZpbmUgRU5UUlkobmFtZSkJCVwKLQkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOwkJXAotCS5nbG9ibCBuYW1lOwkJXAotCS5wMmFsaWduIDQ7CQlcCi1uYW1lOgkJXAotCWNmaV9zdGFydHByb2MKLSNlbmRpZgotCi0jaWZuZGVmIEVORAotIyBkZWZpbmUgRU5EKG5hbWUpCQlcCi0JY2ZpX2VuZHByb2M7CQlcCi0JLnNpemUgbmFtZSwgLi1uYW1lCi0jZW5kaWYKLQotI2lmZGVmIFVTRV9BU19CQ09QWQotIyBkZWZpbmUgU1JDCQlQQVJNUwotIyBkZWZpbmUgREVTVAkJU1JDKzQKLSMgZGVmaW5lIExFTgkJREVTVCs0Ci0jZWxzZQotIyBkZWZpbmUgREVTVAkJUEFSTVMKLSMgZGVmaW5lIFNSQwkJREVTVCs0Ci0jIGRlZmluZSBMRU4JCVNSQys0Ci0jZW5kaWYKLQotI2RlZmluZSBDRklfUFVTSChSRUcpCQlcCi0gIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQlcCi0gIGNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCi0KLSNkZWZpbmUgQ0ZJX1BPUChSRUcpCQlcCi0gIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQpOwkJXAotICBjZmlfcmVzdG9yZSAoUkVHKQotCi0jZGVmaW5lIFBVU0goUkVHKQlwdXNobCBSRUc7IENGSV9QVVNIIChSRUcpCi0jZGVmaW5lIFBPUChSRUcpCXBvcGwgUkVHOyBDRklfUE9QIChSRUcpCi0KLSNpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotIyBkZWZpbmUgUEFSTVMJCTgJCS8qIFByZXNlcnZlIEVCWC4gICovCi0jIGRlZmluZSBFTlRSQU5DRQlQVVNIICglZWJ4KTsKLSMgZGVmaW5lIFJFVFVSTl9FTkQJUE9QICglZWJ4KTsgcmV0Ci0jIGRlZmluZSBSRVRVUk4JCVJFVFVSTl9FTkQ7IENGSV9QVVNIICglZWJ4KQotIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkgLSBCCi0jIHVuZGVmIF9faTY4NgotCi0jIGRlZmluZSBTRVRVUF9QSUNfUkVHKHgpCWNhbGwJX19pNjg2LmdldF9wY190aHVuay54Ci0KLS8qIExvYWQgYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlIGludG8gRUJYIGFuZCBicmFuY2ggdG8gaXQuICBUQUJMRSBpcyBhCi0JanVtcCB0YWJsZSB3aXRoIHJlbGF0aXZlIG9mZnNldHMuICBJTkRFWCBpcyBhIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZQotCWluZGV4IGludG8gdGhlIGp1bXAgdGFibGUuICAgU0NBTEUgaXMgdGhlIHNjYWxlIG9mIElOREVYLiAqLwotCi0jIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFLCBJTkRFWCwgU0NBTEUpCQlcCi0gICAgLyogV2UgZmlyc3QgbG9hZCBQQyBpbnRvIEVCWC4gICovCQlcCi0JU0VUVVBfUElDX1JFRyhieCk7CQlcCi0gICAgLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhYmxlLiAgKi8JCVwKLQlhZGRsCSQoVEFCTEUgLSAuKSwgJWVieDsJCVwKLSAgICAvKiBHZXQgdGhlIGVudHJ5IGFuZCBjb252ZXJ0IHRoZSByZWxhdGl2ZSBvZmZzZXQgdG8gdGhlCQlcCi0JYWJzb2x1dGUJYWRkcmVzcy4gICovCQlcCi0JYWRkbAkoJWVieCwgSU5ERVgsIFNDQUxFKSwgJWVieDsJCVwKLSAgICAvKiBXZSBsb2FkZWQgdGhlIGp1bXAgdGFibGUuICBHby4gICovCQlcCi0Jam1wCSolZWJ4Ci0jZWxzZQotCi0jIGRlZmluZSBQQVJNUwkJNAotIyBkZWZpbmUgRU5UUkFOQ0UKLSMgZGVmaW5lIFJFVFVSTl9FTkQJcmV0Ci0jIGRlZmluZSBSRVRVUk4JCVJFVFVSTl9FTkQKLSMgZGVmaW5lIEpNUFRCTChJLCBCKQlJCi0KLS8qIEJyYW5jaCB0byBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUuICBUQUJMRSBpcyBhIGp1bXAgdGFibGUgd2l0aAotCWFic29sdXRlIG9mZnNldHMuICBJTkRFWCBpcyBhIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBpbmRleCBpbnRvIHRoZQotCWp1bXAgdGFibGUuICBTQ0FMRSBpcyB0aGUgc2NhbGUgb2YgSU5ERVguICovCi0KLSMgZGVmaW5lIEJSQU5DSF9UT19KTVBUQkxfRU5UUlkoVEFCTEUsIElOREVYLCBTQ0FMRSkJCVwKLQlqbXAJKlRBQkxFKCwgSU5ERVgsIFNDQUxFKQotI2VuZGlmCi0KLQkuc2VjdGlvbiAudGV4dC5zc3NlMywiYXgiLEBwcm9nYml0cwotRU5UUlkgKE1FTUNQWSkKLQlFTlRSQU5DRQotCW1vdmwJTEVOKCVlc3ApLCAlZWN4Ci0JbW92bAlTUkMoJWVzcCksICVlYXgKLQltb3ZsCURFU1QoJWVzcCksICVlZHgKLQotI2lmZGVmIFVTRV9BU19NRU1NT1ZFCi0JY21wCSVlYXgsICVlZHgKLQlqYglMKGNvcHlfZm9yd2FyZCkKLQlqZQlMKGZ3ZF93cml0ZV8wYnl0ZXMpCi0JY21wCSQzMiwgJWVjeAotCWphZQlMKG1lbW1vdmVfYndkKQotCWptcAlMKGJrX3dyaXRlX2xlc3MzMmJ5dGVzXzIpCi0KLQkucDJhbGlnbiA0Ci1MKG1lbW1vdmVfYndkKToKLQlhZGQJJWVjeCwgJWVheAotCWNtcAklZWF4LCAlZWR4Ci0JbW92bAlTUkMoJWVzcCksICVlYXgKLQlqYglMKGNvcHlfYmFja3dhcmQpCi0KLUwoY29weV9mb3J3YXJkKToKLSNlbmRpZgotCWNtcAkkNDgsICVlY3gKLQlqYWUJTCg0OGJ5dGVzb3Jtb3JlKQotCi1MKGZ3ZF93cml0ZV9sZXNzMzJieXRlcyk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JY21wCSVkbCwgJWFsCi0JamIJTChia193cml0ZSkKLSNlbmRpZgotCWFkZAklZWN4LCAlZWR4Ci0JYWRkCSVlY3gsICVlYXgKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQkucDJhbGlnbiA0Ci1MKGJrX3dyaXRlKToKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4X2J5dGVzX2J3ZCksICVlY3gsIDQpCi0jZW5kaWYKLQotCS5wMmFsaWduIDQKLUwoNDhieXRlc29ybW9yZSk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92bHBkCSglZWF4KSwgJXhtbTAKLQltb3ZscGQJOCglZWF4KSwgJXhtbTEKLQltb3ZscGQJJXhtbTAsICglZWR4KQotCW1vdmxwZAkleG1tMSwgOCglZWR4KQotI2Vsc2UKLQltb3ZkcXUJKCVlYXgpLCAleG1tMAotI2VuZGlmCi0JUFVTSCAoJWVkaSkKLQltb3ZsCSVlZHgsICVlZGkKLQlhbmQJJC0xNiwgJWVkeAotCWFkZAkkMTYsICVlZHgKLQlzdWIJJWVkeCwgJWVkaQotCWFkZAklZWRpLCAlZWN4Ci0Jc3ViCSVlZGksICVlYXgKLQotI2lmZGVmIFNIQVJFRF9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJFNIQVJFRF9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X3NoYXJlZF9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCi0JbW92CSVlYXgsICVlZGkKLQlqYWUJTChsYXJnZV9wYWdlKQotCWFuZAkkMHhmLCAlZWRpCi0JanoJTChzaGxfMCkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHNobF90YWJsZSksICVlZGksIDQpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8wKToKLSNpZmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotCXhvcgklZWRpLCAlZWRpCi0JY21wCSQxMjcsICVlY3gKLQlqYQlMKHNobF8wX2dvYmJsZSkKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKHNobF8wX2xvb3ApOgotCW1vdmRxYQkoJWVheCwgJWVkaSksICV4bW0wCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMQotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJJXhtbTAsICglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMSwgMTYoJWVkeCwgJWVkaSkKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlqYglMKHNobF8wX2VuZCkKLQotCW1vdmRxYQkoJWVheCwgJWVkaSksICV4bW0wCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMQotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJJXhtbTAsICglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMSwgMTYoJWVkeCwgJWVkaSkKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlqYglMKHNobF8wX2VuZCkKLQotCW1vdmRxYQkoJWVheCwgJWVkaSksICV4bW0wCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMQotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJJXhtbTAsICglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMSwgMTYoJWVkeCwgJWVkaSkKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlqYglMKHNobF8wX2VuZCkKLQotCW1vdmRxYQkoJWVheCwgJWVkaSksICV4bW0wCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMQotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJJXhtbTAsICglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMSwgMTYoJWVkeCwgJWVkaSkKLQlsZWEJMzIoJWVkaSksICVlZGkKLQotTChzaGxfMF9lbmQpOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlhZGQJJWVkaSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfMF9nb2JibGUpOgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlQT1AJKCVlZGkpCi0JbGVhCS0xMjgoJWVjeCksICVlY3gKLQlqYWUJTChzaGxfMF9nb2JibGVfbWVtX2xvb3ApCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8wX2dvYmJsZV9jYWNoZV9sb29wKToKLQltb3ZkcWEJKCVlYXgpLCAleG1tMAotCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQotCW1vdmRxYQkweDIwKCVlYXgpLCAleG1tMgotCW1vdmRxYQkweDMwKCVlYXgpLCAleG1tMwotCW1vdmRxYQkweDQwKCVlYXgpLCAleG1tNAotCW1vdmRxYQkweDUwKCVlYXgpLCAleG1tNQotCW1vdmRxYQkweDYwKCVlYXgpLCAleG1tNgotCW1vdmRxYQkweDcwKCVlYXgpLCAleG1tNwotCWxlYQkweDgwKCVlYXgpLCAlZWF4Ci0Jc3ViCSQxMjgsICVlY3gKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQotCW1vdmRxYQkleG1tMiwgMHgyMCglZWR4KQotCW1vdmRxYQkleG1tMywgMHgzMCglZWR4KQotCW1vdmRxYQkleG1tNCwgMHg0MCglZWR4KQotCW1vdmRxYQkleG1tNSwgMHg1MCglZWR4KQotCW1vdmRxYQkleG1tNiwgMHg2MCglZWR4KQotCW1vdmRxYQkleG1tNywgMHg3MCglZWR4KQotCWxlYQkweDgwKCVlZHgpLCAlZWR4Ci0KLQlqYWUJTChzaGxfMF9nb2JibGVfY2FjaGVfbG9vcCkKLQljbXAJJC0weDQwLCAlZWN4Ci0JbGVhCTB4ODAoJWVjeCksICVlY3gKLQlqbAlMKHNobF8wX2NhY2hlX2xlc3NfNjRieXRlcykKLQotCW1vdmRxYQkoJWVheCksICV4bW0wCi0Jc3ViCSQweDQwLCAlZWN4Ci0JbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCi0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKLQltb3ZkcWEJMHgyMCglZWF4KSwgJXhtbTAKLQltb3ZkcWEJMHgzMCglZWF4KSwgJXhtbTEKLQlhZGQJJDB4NDAsICVlYXgKLQltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKLQltb3ZkcWEJJXhtbTEsIDB4MzAoJWVkeCkKLQlhZGQJJDB4NDAsICVlZHgKLQotTChzaGxfMF9jYWNoZV9sZXNzXzY0Ynl0ZXMpOgotCWNtcAkkMHgyMCwgJWVjeAotCWpiCUwoc2hsXzBfY2FjaGVfbGVzc18zMmJ5dGVzKQotCW1vdmRxYQkoJWVheCksICV4bW0wCi0Jc3ViCSQweDIwLCAlZWN4Ci0JbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCi0JYWRkCSQweDIwLCAlZWF4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKLQlhZGQJJDB4MjAsICVlZHgKLQotTChzaGxfMF9jYWNoZV9sZXNzXzMyYnl0ZXMpOgotCWNtcAkkMHgxMCwgJWVjeAotCWpiCUwoc2hsXzBfY2FjaGVfbGVzc18xNmJ5dGVzKQotCXN1YgkkMHgxMCwgJWVjeAotCW1vdmRxYQkoJWVheCksICV4bW0wCi0JYWRkCSQweDEwLCAlZWF4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQlhZGQJJDB4MTAsICVlZHgKLQotTChzaGxfMF9jYWNoZV9sZXNzXzE2Ynl0ZXMpOgotCWFkZAklZWN4LCAlZWR4Ci0JYWRkCSVlY3gsICVlYXgKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzBfZ29iYmxlX21lbV9sb29wKToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDI4MCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQotCW1vdmRxYQkoJWVheCksICV4bW0wCi0JbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCi0JbW92ZHFhCTB4MjAoJWVheCksICV4bW0yCi0JbW92ZHFhCTB4MzAoJWVheCksICV4bW0zCi0JbW92ZHFhCTB4NDAoJWVheCksICV4bW00Ci0JbW92ZHFhCTB4NTAoJWVheCksICV4bW01Ci0JbW92ZHFhCTB4NjAoJWVheCksICV4bW02Ci0JbW92ZHFhCTB4NzAoJWVheCksICV4bW03Ci0JbGVhCTB4ODAoJWVheCksICVlYXgKLQlzdWIJJDB4ODAsICVlY3gKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQotCW1vdmRxYQkleG1tMiwgMHgyMCglZWR4KQotCW1vdmRxYQkleG1tMywgMHgzMCglZWR4KQotCW1vdmRxYQkleG1tNCwgMHg0MCglZWR4KQotCW1vdmRxYQkleG1tNSwgMHg1MCglZWR4KQotCW1vdmRxYQkleG1tNiwgMHg2MCglZWR4KQotCW1vdmRxYQkleG1tNywgMHg3MCglZWR4KQotCWxlYQkweDgwKCVlZHgpLCAlZWR4Ci0KLQlqYWUJTChzaGxfMF9nb2JibGVfbWVtX2xvb3ApCi0JY21wCSQtMHg0MCwgJWVjeAotCWxlYQkweDgwKCVlY3gpLCAlZWN4Ci0JamwJTChzaGxfMF9tZW1fbGVzc182NGJ5dGVzKQotCi0JbW92ZHFhCSglZWF4KSwgJXhtbTAKLQlzdWIJJDB4NDAsICVlY3gKLQltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKLQotCW1vdmRxYQkleG1tMCwgKCVlZHgpCi0JbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCi0KLQltb3ZkcWEJMHgyMCglZWF4KSwgJXhtbTAKLQltb3ZkcWEJMHgzMCglZWF4KSwgJXhtbTEKLQlhZGQJJDB4NDAsICVlYXgKLQotCW1vdmRxYQkleG1tMCwgMHgyMCglZWR4KQotCW1vdmRxYQkleG1tMSwgMHgzMCglZWR4KQotCWFkZAkkMHg0MCwgJWVkeAotCi1MKHNobF8wX21lbV9sZXNzXzY0Ynl0ZXMpOgotCWNtcAkkMHgyMCwgJWVjeAotCWpiCUwoc2hsXzBfbWVtX2xlc3NfMzJieXRlcykKLQltb3ZkcWEJKCVlYXgpLCAleG1tMAotCXN1YgkkMHgyMCwgJWVjeAotCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQotCWFkZAkkMHgyMCwgJWVheAotCW1vdmRxYQkleG1tMCwgKCVlZHgpCi0JbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCi0JYWRkCSQweDIwLCAlZWR4Ci0KLUwoc2hsXzBfbWVtX2xlc3NfMzJieXRlcyk6Ci0JY21wCSQweDEwLCAlZWN4Ci0JamIJTChzaGxfMF9tZW1fbGVzc18xNmJ5dGVzKQotCXN1YgkkMHgxMCwgJWVjeAotCW1vdmRxYQkoJWVheCksICV4bW0wCi0JYWRkCSQweDEwLCAlZWF4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQlhZGQJJDB4MTAsICVlZHgKLQotTChzaGxfMF9tZW1fbGVzc18xNmJ5dGVzKToKLQlhZGQJJWVjeCwgJWVkeAotCWFkZAklZWN4LCAlZWF4Ci0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbiksICVlY3gsIDQpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8xKToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTEoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS0xKCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF8xX25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGwxTG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwkxNSglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMzEoJWVheCksICV4bW0zCi0JbW92YXBzCTQ3KCVlYXgpLCAleG1tNAotCW1vdmFwcwk2MyglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkMSwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkMSwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDEsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDEsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsMUxvb3BTdGFydCkKLQotTChTaGwxTG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTE1KCVlYXgpLCAleG1tMgotCW1vdmFwcwkzMSglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQxLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxLCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF8xX25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS0xKCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfMV9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkMSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMSwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWpiCUwoc2hfMV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQxLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxLCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamFlCUwoc2hfMV9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzFfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJMSglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8yKToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTIoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS0yKCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF8yX25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGwyTG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwkxNCglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMzAoJWVheCksICV4bW0zCi0JbW92YXBzCTQ2KCVlYXgpLCAleG1tNAotCW1vdmFwcwk2MiglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkMiwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkMiwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDIsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDIsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsMkxvb3BTdGFydCkKLQotTChTaGwyTG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTE0KCVlYXgpLCAleG1tMgotCW1vdmFwcwkzMCglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQyLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQyLCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF8yX25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS0yKCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfMl9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkMiwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMiwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWpiCUwoc2hfMl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQyLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQyLCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamFlCUwoc2hfMl9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzJfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJMiglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8zKToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTMoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS0zKCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF8zX25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGwzTG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwkxMyglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjkoJWVheCksICV4bW0zCi0JbW92YXBzCTQ1KCVlYXgpLCAleG1tNAotCW1vdmFwcwk2MSglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkMywgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkMywgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDMsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDMsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsM0xvb3BTdGFydCkKLQotTChTaGwzTG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTEzKCVlYXgpLCAleG1tMgotCW1vdmFwcwkyOSglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQzLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQzLCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF8zX25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS0zKCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfM19ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkMywgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMywgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCi0JamIJTChzaF8zX2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDMsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDMsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQotCWphZQlMKHNoXzNfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF8zX2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTMoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfNCk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS00KCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktNCglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfNF9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsNExvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJMTIoJWVheCksICV4bW0yCi0JbW92YXBzCTI4KCVlYXgpLCAleG1tMwotCW1vdmFwcwk0NCglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNjAoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDQsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDQsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQ0LCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQ0LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDRMb29wU3RhcnQpCi0KLUwoU2hsNExvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwkxMiglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjgoJWVheCksICV4bW0zCi0JcGFsaWducgkkNCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNCwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfNF9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktNCglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDQsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDQsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQotCWpiCUwoc2hfNF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQ0LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ0LCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0KLQlqYWUJTChzaF80X25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfNF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQk0KCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzUpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktNSglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTUoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzVfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDVMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTExKCVlYXgpLCAleG1tMgotCW1vdmFwcwkyNyglZWF4KSwgJXhtbTMKLQltb3ZhcHMJNDMoJWVheCksICV4bW00Ci0JbW92YXBzCTU5KCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQ1LCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQ1LCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkNSwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkNSwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGw1TG9vcFN0YXJ0KQotCi1MKFNobDVMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJMTEoJWVheCksICV4bW0yCi0JbW92YXBzCTI3KCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDUsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDUsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzVfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTUoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF81X25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQ1LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ1LCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0KLQlqYglMKHNoXzVfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkNSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNSwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCi0JamFlCUwoc2hfNV9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzVfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJNSglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF82KToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTYoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS02KCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF82X25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGw2TG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwkxMCglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjYoJWVheCksICV4bW0zCi0JbW92YXBzCTQyKCVlYXgpLCAleG1tNAotCW1vdmFwcwk1OCglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkNiwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkNiwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDYsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDYsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsNkxvb3BTdGFydCkKLQotTChTaGw2TG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTEwKCVlYXgpLCAleG1tMgotCW1vdmFwcwkyNiglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQ2LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ2LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF82X25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS02KCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfNl9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkNiwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNiwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCi0JamIJTChzaF82X2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDYsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDYsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQotCWphZQlMKHNoXzZfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF82X2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTYoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfNyk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS03KCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktNyglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfN19ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsN0xvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJOSglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjUoJWVheCksICV4bW0zCi0JbW92YXBzCTQxKCVlYXgpLCAleG1tNAotCW1vdmFwcwk1NyglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkNywgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkNywgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDcsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDcsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsN0xvb3BTdGFydCkKLQotTChTaGw3TG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTkoJWVheCksICV4bW0yCi0JbW92YXBzCTI1KCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDcsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDcsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzdfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTcoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF83X25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQ3LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ3LCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamIJTChzaF83X2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDcsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDcsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYWUJTChzaF83X25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfN19lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQk3KCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzgpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktOCglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTgoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzhfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDhMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTgoJWVheCksICV4bW0yCi0JbW92YXBzCTI0KCVlYXgpLCAleG1tMwotCW1vdmFwcwk0MCglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNTYoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDgsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDgsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQ4LCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQ4LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDhMb29wU3RhcnQpCi0KLUwoTG9vcExlYXZlOCk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwk4KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyNCglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQ4LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ4LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF84X25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS04KCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfOF9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkOCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkOCwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWpiCUwoc2hfOF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQ4LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ4LCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamFlCUwoc2hfOF9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzhfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJOCglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF85KToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTkoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS05KCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF85X25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGw5TG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwk3KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyMyglZWF4KSwgJXhtbTMKLQltb3ZhcHMJMzkoJWVheCksICV4bW00Ci0JbW92YXBzCTU1KCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQ5LCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQ5LCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkOSwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkOSwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGw5TG9vcFN0YXJ0KQotCi1MKFNobDlMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJNyglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjMoJWVheCksICV4bW0zCi0JcGFsaWducgkkOSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkOSwgJXhtbTEsICV4bW0yCi0KLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF85X25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS05KCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfOV9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkOSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkOSwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWpiCUwoc2hfOV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQ5LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ5LCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamFlCUwoc2hfOV9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzlfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJOSglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8xMCk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS0xMCglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTEwKCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF8xMF9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsMTBMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTYoJWVheCksICV4bW0yCi0JbW92YXBzCTIyKCVlYXgpLCAleG1tMwotCW1vdmFwcwkzOCglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNTQoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDEwLCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQxMCwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDEwLCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQxMCwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGwxMExvb3BTdGFydCkKLQotTChTaGwxMExvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwk2KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyMiglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQxMCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTAsICV4bW0xLCAleG1tMgotCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTBfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTEwKCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTBfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDEwLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMCwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWpiCUwoc2hfMTBfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkMTAsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEwLCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamFlCUwoc2hfMTBfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF8xMF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQkxMCglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8xMSk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS0xMSglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTExKCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF8xMV9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsMTFMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTUoJWVheCksICV4bW0yCi0JbW92YXBzCTIxKCVlYXgpLCAleG1tMwotCW1vdmFwcwkzNyglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNTMoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDExLCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQxMSwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDExLCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQxMSwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGwxMUxvb3BTdGFydCkKLQotTChTaGwxMUxvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwk1KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyMSglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQxMSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTEsICV4bW0xLCAleG1tMgotCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTFfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTExKCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTFfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDExLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMSwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWpiCUwoc2hfMTFfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkMTEsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDExLCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamFlCUwoc2hfMTFfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF8xMV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQkxMSglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8xMik6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS0xMiglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTEyKCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF8xMl9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsMTJMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTQoJWVheCksICV4bW0yCi0JbW92YXBzCTIwKCVlYXgpLCAleG1tMwotCW1vdmFwcwkzNiglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNTIoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDEyLCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQxMiwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDEyLCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQxMiwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGwxMkxvb3BTdGFydCkKLQotTChTaGwxMkxvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwk0KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyMCglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQxMiwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTIsICV4bW0xLCAleG1tMgotCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTJfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTEyKCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTJfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDEyLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMiwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWpiCUwoc2hfMTJfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkMTIsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEyLCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamFlCUwoc2hfMTJfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF8xMl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQkxMiglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8xMyk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS0xMyglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTEzKCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF8xM19ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsMTNMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTMoJWVheCksICV4bW0yCi0JbW92YXBzCTE5KCVlYXgpLCAleG1tMwotCW1vdmFwcwkzNSglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNTEoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDEzLCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQxMywgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDEzLCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQxMywgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGwxM0xvb3BTdGFydCkKLQotTChTaGwxM0xvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwkzKCVlYXgpLCAleG1tMgotCW1vdmFwcwkxOSglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQxMywgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTMsICV4bW0xLCAleG1tMgotCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTNfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTEzKCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTNfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDEzLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMywgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWpiCUwoc2hfMTNfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkMTMsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEzLCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamFlCUwoc2hfMTNfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF8xM19lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQkxMyglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8xNCk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS0xNCglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTE0KCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF8xNF9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsMTRMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTIoJWVheCksICV4bW0yCi0JbW92YXBzCTE4KCVlYXgpLCAleG1tMwotCW1vdmFwcwkzNCglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNTAoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDE0LCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQxNCwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDE0LCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQxNCwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGwxNExvb3BTdGFydCkKLQotTChTaGwxNExvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwkyKCVlYXgpLCAleG1tMgotCW1vdmFwcwkxOCglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQxNCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTQsICV4bW0xLCAleG1tMgotCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTRfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTE0KCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDE0LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxNCwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWpiCUwoc2hfMTRfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkMTQsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDE0LCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamFlCUwoc2hfMTRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF8xNF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQkxNCglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8xNSk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS0xNSglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTE1KCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF8xNV9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsMTVMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTEoJWVheCksICV4bW0yCi0JbW92YXBzCTE3KCVlYXgpLCAleG1tMwotCW1vdmFwcwkzMyglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNDkoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDE1LCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQxNSwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDE1LCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQxNSwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGwxNUxvb3BTdGFydCkKLQotTChTaGwxNUxvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwkxKCVlYXgpLCAleG1tMgotCW1vdmFwcwkxNyglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQxNSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTUsICV4bW0xLCAleG1tMgotCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTVfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTE1KCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfMTVfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDE1LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxNSwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWpiCUwoc2hfMTVfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkMTUsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDE1LCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamFlCUwoc2hfMTVfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF8xNV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQkxNSglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF9lbmRfMCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JbGVhCSglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkoJWVheCwgJWVjeCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQ0Ynl0ZXMpOgotCW1vdnEJLTQ0KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC00NCglZWR4KQotTChmd2Rfd3JpdGVfMzZieXRlcyk6Ci0JbW92cQktMzYoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTM2KCVlZHgpCi1MKGZ3ZF93cml0ZV8yOGJ5dGVzKToKLQltb3ZxCS0yOCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMjgoJWVkeCkKLUwoZndkX3dyaXRlXzIwYnl0ZXMpOgotCW1vdnEJLTIwKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0yMCglZWR4KQotTChmd2Rfd3JpdGVfMTJieXRlcyk6Ci0JbW92cQktMTIoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTEyKCVlZHgpCi1MKGZ3ZF93cml0ZV80Ynl0ZXMpOgotCW1vdmwJLTQoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC00KCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQwYnl0ZXMpOgotCW1vdnEJLTQwKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC00MCglZWR4KQotTChmd2Rfd3JpdGVfMzJieXRlcyk6Ci0JbW92cQktMzIoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTMyKCVlZHgpCi1MKGZ3ZF93cml0ZV8yNGJ5dGVzKToKLQltb3ZxCS0yNCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMjQoJWVkeCkKLUwoZndkX3dyaXRlXzE2Ynl0ZXMpOgotCW1vdnEJLTE2KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xNiglZWR4KQotTChmd2Rfd3JpdGVfOGJ5dGVzKToKLQltb3ZxCS04KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC04KCVlZHgpCi1MKGZ3ZF93cml0ZV8wYnl0ZXMpOgotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV81Ynl0ZXMpOgotCW1vdmwJLTUoJWVheCksICVlY3gKLQltb3ZsCS00KCVlYXgpLCAlZWF4Ci0JbW92bAklZWN4LCAtNSglZWR4KQotCW1vdmwJJWVheCwgLTQoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDVieXRlcyk6Ci0JbW92cQktNDUoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTQ1KCVlZHgpCi1MKGZ3ZF93cml0ZV8zN2J5dGVzKToKLQltb3ZxCS0zNyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMzcoJWVkeCkKLUwoZndkX3dyaXRlXzI5Ynl0ZXMpOgotCW1vdnEJLTI5KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0yOSglZWR4KQotTChmd2Rfd3JpdGVfMjFieXRlcyk6Ci0JbW92cQktMjEoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTIxKCVlZHgpCi1MKGZ3ZF93cml0ZV8xM2J5dGVzKToKLQltb3ZxCS0xMyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTMoJWVkeCkKLQltb3ZsCS01KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNSglZWR4KQotCW1vdnpibAktMSglZWF4KSwgJWVjeAotCW1vdmIJJWNsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80MWJ5dGVzKToKLQltb3ZxCS00MSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtNDEoJWVkeCkKLUwoZndkX3dyaXRlXzMzYnl0ZXMpOgotCW1vdnEJLTMzKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0zMyglZWR4KQotTChmd2Rfd3JpdGVfMjVieXRlcyk6Ci0JbW92cQktMjUoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTI1KCVlZHgpCi1MKGZ3ZF93cml0ZV8xN2J5dGVzKToKLQltb3ZxCS0xNyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTcoJWVkeCkKLUwoZndkX3dyaXRlXzlieXRlcyk6Ci0JbW92cQktOSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtOSglZWR4KQotTChmd2Rfd3JpdGVfMWJ5dGVzKToKLQltb3Z6YmwJLTEoJWVheCksICVlY3gKLQltb3ZiCSVjbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDZieXRlcyk6Ci0JbW92cQktNDYoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTQ2KCVlZHgpCi1MKGZ3ZF93cml0ZV8zOGJ5dGVzKToKLQltb3ZxCS0zOCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMzgoJWVkeCkKLUwoZndkX3dyaXRlXzMwYnl0ZXMpOgotCW1vdnEJLTMwKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0zMCglZWR4KQotTChmd2Rfd3JpdGVfMjJieXRlcyk6Ci0JbW92cQktMjIoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTIyKCVlZHgpCi1MKGZ3ZF93cml0ZV8xNGJ5dGVzKToKLQltb3ZxCS0xNCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTQoJWVkeCkKLUwoZndkX3dyaXRlXzZieXRlcyk6Ci0JbW92bAktNiglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTYoJWVkeCkKLQltb3Z6d2wJLTIoJWVheCksICVlY3gKLQltb3Z3CSVjeCwgLTIoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDJieXRlcyk6Ci0JbW92cQktNDIoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTQyKCVlZHgpCi1MKGZ3ZF93cml0ZV8zNGJ5dGVzKToKLQltb3ZxCS0zNCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMzQoJWVkeCkKLUwoZndkX3dyaXRlXzI2Ynl0ZXMpOgotCW1vdnEJLTI2KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0yNiglZWR4KQotTChmd2Rfd3JpdGVfMThieXRlcyk6Ci0JbW92cQktMTgoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTE4KCVlZHgpCi1MKGZ3ZF93cml0ZV8xMGJ5dGVzKToKLQltb3ZxCS0xMCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTAoJWVkeCkKLUwoZndkX3dyaXRlXzJieXRlcyk6Ci0JbW92endsCS0yKCVlYXgpLCAlZWN4Ci0JbW92dwklY3gsIC0yKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQ3Ynl0ZXMpOgotCW1vdnEJLTQ3KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC00NyglZWR4KQotTChmd2Rfd3JpdGVfMzlieXRlcyk6Ci0JbW92cQktMzkoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTM5KCVlZHgpCi1MKGZ3ZF93cml0ZV8zMWJ5dGVzKToKLQltb3ZxCS0zMSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMzEoJWVkeCkKLUwoZndkX3dyaXRlXzIzYnl0ZXMpOgotCW1vdnEJLTIzKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0yMyglZWR4KQotTChmd2Rfd3JpdGVfMTVieXRlcyk6Ci0JbW92cQktMTUoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTE1KCVlZHgpCi1MKGZ3ZF93cml0ZV83Ynl0ZXMpOgotCW1vdmwJLTcoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC03KCVlZHgpCi0JbW92endsCS0zKCVlYXgpLCAlZWN4Ci0JbW92emJsCS0xKCVlYXgpLCAlZWF4Ci0JbW92dwklY3gsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQzYnl0ZXMpOgotCW1vdnEJLTQzKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC00MyglZWR4KQotTChmd2Rfd3JpdGVfMzVieXRlcyk6Ci0JbW92cQktMzUoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTM1KCVlZHgpCi1MKGZ3ZF93cml0ZV8yN2J5dGVzKToKLQltb3ZxCS0yNyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMjcoJWVkeCkKLUwoZndkX3dyaXRlXzE5Ynl0ZXMpOgotCW1vdnEJLTE5KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xOSglZWR4KQotTChmd2Rfd3JpdGVfMTFieXRlcyk6Ci0JbW92cQktMTEoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTExKCVlZHgpCi1MKGZ3ZF93cml0ZV8zYnl0ZXMpOgotCW1vdnp3bAktMyglZWF4KSwgJWVjeAotCW1vdnpibAktMSglZWF4KSwgJWVheAotCW1vdncJJWN4LCAtMyglZWR4KQotCW1vdmIJJWFsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80MGJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTQwKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTQwKCVlZHgpCi1MKGZ3ZF93cml0ZV8yNGJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTI0KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTI0KCVlZHgpCi1MKGZ3ZF93cml0ZV84Ynl0ZXNfYWxpZ24pOgotCW1vdnEJLTgoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTgoJWVkeCkKLUwoZndkX3dyaXRlXzBieXRlc19hbGlnbik6Ci0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzMyYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMzIoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMzIoJWVkeCkKLUwoZndkX3dyaXRlXzE2Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMTYoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMTYoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNWJ5dGVzX2FsaWduKToKLQltb3ZsCS01KCVlYXgpLCAlZWN4Ci0JbW92bAktNCglZWF4KSwgJWVheAotCW1vdmwJJWVjeCwgLTUoJWVkeCkKLQltb3ZsCSVlYXgsIC00KCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQ1Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktNDUoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtNDUoJWVkeCkKLUwoZndkX3dyaXRlXzI5Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMjkoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMjkoJWVkeCkKLUwoZndkX3dyaXRlXzEzYnl0ZXNfYWxpZ24pOgotCW1vdnEJLTEzKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xMyglZWR4KQotCW1vdmwJLTUoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC01KCVlZHgpCi0JbW92emJsCS0xKCVlYXgpLCAlZWN4Ci0JbW92YgklY2wsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzM3Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMzcoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMzcoJWVkeCkKLUwoZndkX3dyaXRlXzIxYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMjEoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMjEoJWVkeCkKLQltb3ZsCS01KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNSglZWR4KQotCW1vdnpibAktMSglZWF4KSwgJWVjeAotCW1vdmIJJWNsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80MWJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTQxKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTQxKCVlZHgpCi1MKGZ3ZF93cml0ZV8yNWJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTI1KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTI1KCVlZHgpCi1MKGZ3ZF93cml0ZV85Ynl0ZXNfYWxpZ24pOgotCW1vdnEJLTkoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTkoJWVkeCkKLUwoZndkX3dyaXRlXzFieXRlc19hbGlnbik6Ci0JbW92emJsCS0xKCVlYXgpLCAlZWN4Ci0JbW92YgklY2wsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzMzYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMzMoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMzMoJWVkeCkKLUwoZndkX3dyaXRlXzE3Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMTcoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMTcoJWVkeCkKLQltb3Z6YmwJLTEoJWVheCksICVlY3gKLQltb3ZiCSVjbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDZieXRlc19hbGlnbik6Ci0JbW92ZHFhCS00NiglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC00NiglZWR4KQotTChmd2Rfd3JpdGVfMzBieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0zMCglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0zMCglZWR4KQotTChmd2Rfd3JpdGVfMTRieXRlc19hbGlnbik6Ci0JbW92cQktMTQoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTE0KCVlZHgpCi1MKGZ3ZF93cml0ZV82Ynl0ZXNfYWxpZ24pOgotCW1vdmwJLTYoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC02KCVlZHgpCi0JbW92endsCS0yKCVlYXgpLCAlZWN4Ci0JbW92dwklY3gsIC0yKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzM4Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMzgoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMzgoJWVkeCkKLUwoZndkX3dyaXRlXzIyYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMjIoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMjIoJWVkeCkKLQltb3ZsCS02KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNiglZWR4KQotCW1vdnp3bAktMiglZWF4KSwgJWVjeAotCW1vdncJJWN4LCAtMiglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80MmJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTQyKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTQyKCVlZHgpCi1MKGZ3ZF93cml0ZV8yNmJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTI2KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTI2KCVlZHgpCi1MKGZ3ZF93cml0ZV8xMGJ5dGVzX2FsaWduKToKLQltb3ZxCS0xMCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTAoJWVkeCkKLUwoZndkX3dyaXRlXzJieXRlc19hbGlnbik6Ci0JbW92endsCS0yKCVlYXgpLCAlZWN4Ci0JbW92dwklY3gsIC0yKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzM0Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMzQoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMzQoJWVkeCkKLUwoZndkX3dyaXRlXzE4Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMTgoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMTgoJWVkeCkKLQltb3Z6d2wJLTIoJWVheCksICVlY3gKLQltb3Z3CSVjeCwgLTIoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDdieXRlc19hbGlnbik6Ci0JbW92ZHFhCS00NyglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC00NyglZWR4KQotTChmd2Rfd3JpdGVfMzFieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0zMSglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0zMSglZWR4KQotTChmd2Rfd3JpdGVfMTVieXRlc19hbGlnbik6Ci0JbW92cQktMTUoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTE1KCVlZHgpCi1MKGZ3ZF93cml0ZV83Ynl0ZXNfYWxpZ24pOgotCW1vdmwJLTcoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC03KCVlZHgpCi0JbW92endsCS0zKCVlYXgpLCAlZWN4Ci0JbW92emJsCS0xKCVlYXgpLCAlZWF4Ci0JbW92dwklY3gsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzM5Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMzkoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMzkoJWVkeCkKLUwoZndkX3dyaXRlXzIzYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMjMoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMjMoJWVkeCkKLQltb3ZsCS03KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNyglZWR4KQotCW1vdnp3bAktMyglZWF4KSwgJWVjeAotCW1vdnpibAktMSglZWF4KSwgJWVheAotCW1vdncJJWN4LCAtMyglZWR4KQotCW1vdmIJJWFsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80M2J5dGVzX2FsaWduKToKLQltb3ZkcWEJLTQzKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTQzKCVlZHgpCi1MKGZ3ZF93cml0ZV8yN2J5dGVzX2FsaWduKToKLQltb3ZkcWEJLTI3KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTI3KCVlZHgpCi1MKGZ3ZF93cml0ZV8xMWJ5dGVzX2FsaWduKToKLQltb3ZxCS0xMSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTEoJWVkeCkKLUwoZndkX3dyaXRlXzNieXRlc19hbGlnbik6Ci0JbW92endsCS0zKCVlYXgpLCAlZWN4Ci0JbW92emJsCS0xKCVlYXgpLCAlZWF4Ci0JbW92dwklY3gsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzM1Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMzUoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMzUoJWVkeCkKLUwoZndkX3dyaXRlXzE5Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMTkoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMTkoJWVkeCkKLQltb3Z6d2wJLTMoJWVheCksICVlY3gKLQltb3Z6YmwJLTEoJWVheCksICVlYXgKLQltb3Z3CSVjeCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDRieXRlc19hbGlnbik6Ci0JbW92ZHFhCS00NCglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC00NCglZWR4KQotTChmd2Rfd3JpdGVfMjhieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0yOCglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0yOCglZWR4KQotTChmd2Rfd3JpdGVfMTJieXRlc19hbGlnbik6Ci0JbW92cQktMTIoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTEyKCVlZHgpCi1MKGZ3ZF93cml0ZV80Ynl0ZXNfYWxpZ24pOgotCW1vdmwJLTQoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC00KCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzM2Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMzYoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMzYoJWVkeCkKLUwoZndkX3dyaXRlXzIwYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMjAoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMjAoJWVkeCkKLQltb3ZsCS00KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNCglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOX0VORAotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKGxhcmdlX3BhZ2UpOgotCW1vdmRxdQkoJWVheCksICV4bW0xCi0jaWZkZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLQlsZWEJMTYoJWVheCksICVlYXgKLQltb3ZudGRxCSV4bW0xLCAoJWVkeCkKLQlsZWEJMTYoJWVkeCksICVlZHgKLQlsZWEJLTB4OTAoJWVjeCksICVlY3gKLQlQT1AgKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKGxhcmdlX3BhZ2VfbG9vcCk6Ci0JbW92ZHF1CSglZWF4KSwgJXhtbTAKLQltb3ZkcXUJMHgxMCglZWF4KSwgJXhtbTEKLQltb3ZkcXUJMHgyMCglZWF4KSwgJXhtbTIKLQltb3ZkcXUJMHgzMCglZWF4KSwgJXhtbTMKLQltb3ZkcXUJMHg0MCglZWF4KSwgJXhtbTQKLQltb3ZkcXUJMHg1MCglZWF4KSwgJXhtbTUKLQltb3ZkcXUJMHg2MCglZWF4KSwgJXhtbTYKLQltb3ZkcXUJMHg3MCglZWF4KSwgJXhtbTcKLQlsZWEJMHg4MCglZWF4KSwgJWVheAotCi0Jc3ViCSQweDgwLCAlZWN4Ci0JbW92bnRkcQkleG1tMCwgKCVlZHgpCi0JbW92bnRkcQkleG1tMSwgMHgxMCglZWR4KQotCW1vdm50ZHEJJXhtbTIsIDB4MjAoJWVkeCkKLQltb3ZudGRxCSV4bW0zLCAweDMwKCVlZHgpCi0JbW92bnRkcQkleG1tNCwgMHg0MCglZWR4KQotCW1vdm50ZHEJJXhtbTUsIDB4NTAoJWVkeCkKLQltb3ZudGRxCSV4bW02LCAweDYwKCVlZHgpCi0JbW92bnRkcQkleG1tNywgMHg3MCglZWR4KQotCWxlYQkweDgwKCVlZHgpLCAlZWR4Ci0JamFlCUwobGFyZ2VfcGFnZV9sb29wKQotCWNtcAkkLTB4NDAsICVlY3gKLQlsZWEJMHg4MCglZWN4KSwgJWVjeAotCWpsCUwobGFyZ2VfcGFnZV9sZXNzXzY0Ynl0ZXMpCi0KLQltb3ZkcXUJKCVlYXgpLCAleG1tMAotCW1vdmRxdQkweDEwKCVlYXgpLCAleG1tMQotCW1vdmRxdQkweDIwKCVlYXgpLCAleG1tMgotCW1vdmRxdQkweDMwKCVlYXgpLCAleG1tMwotCWxlYQkweDQwKCVlYXgpLCAlZWF4Ci0KLQltb3ZudGRxCSV4bW0wLCAoJWVkeCkKLQltb3ZudGRxCSV4bW0xLCAweDEwKCVlZHgpCi0JbW92bnRkcQkleG1tMiwgMHgyMCglZWR4KQotCW1vdm50ZHEJJXhtbTMsIDB4MzAoJWVkeCkKLQlsZWEJMHg0MCglZWR4KSwgJWVkeAotCXN1YgkkMHg0MCwgJWVjeAotTChsYXJnZV9wYWdlX2xlc3NfNjRieXRlcyk6Ci0JY21wCSQzMiwgJWVjeAotCWpiCUwobGFyZ2VfcGFnZV9sZXNzXzMyYnl0ZXMpCi0JbW92ZHF1CSglZWF4KSwgJXhtbTAKLQltb3ZkcXUJMHgxMCglZWF4KSwgJXhtbTEKLQlsZWEJMHgyMCglZWF4KSwgJWVheAotCW1vdm50ZHEJJXhtbTAsICglZWR4KQotCW1vdm50ZHEJJXhtbTEsIDB4MTAoJWVkeCkKLQlsZWEJMHgyMCglZWR4KSwgJWVkeAotCXN1YgkkMHgyMCwgJWVjeAotTChsYXJnZV9wYWdlX2xlc3NfMzJieXRlcyk6Ci0JYWRkCSVlY3gsICVlZHgKLQlhZGQJJWVjeCwgJWVheAotCXNmZW5jZQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JLnAyYWxpZ24gNAotTChia193cml0ZV80NGJ5dGVzKToKLQltb3ZxCTM2KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDM2KCVlZHgpCi1MKGJrX3dyaXRlXzM2Ynl0ZXMpOgotCW1vdnEJMjgoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMjgoJWVkeCkKLUwoYmtfd3JpdGVfMjhieXRlcyk6Ci0JbW92cQkyMCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAyMCglZWR4KQotTChia193cml0ZV8yMGJ5dGVzKToKLQltb3ZxCTEyKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDEyKCVlZHgpCi1MKGJrX3dyaXRlXzEyYnl0ZXMpOgotCW1vdnEJNCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCA0KCVlZHgpCi1MKGJrX3dyaXRlXzRieXRlcyk6Ci0JbW92bAkoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsICglZWR4KQotTChia193cml0ZV8wYnl0ZXMpOgotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCUxFTiglZXNwKSwgJWVjeAotCWFkZAklZWN4LCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoYmtfd3JpdGVfNDBieXRlcyk6Ci0JbW92cQkzMiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAzMiglZWR4KQotTChia193cml0ZV8zMmJ5dGVzKToKLQltb3ZxCTI0KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDI0KCVlZHgpCi1MKGJrX3dyaXRlXzI0Ynl0ZXMpOgotCW1vdnEJMTYoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMTYoJWVkeCkKLUwoYmtfd3JpdGVfMTZieXRlcyk6Ci0JbW92cQk4KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDgoJWVkeCkKLUwoYmtfd3JpdGVfOGJ5dGVzKToKLQltb3ZxCSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAlMRU4oJWVzcCksICVlY3gKLQlhZGQJJWVjeCwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGJrX3dyaXRlXzQ1Ynl0ZXMpOgotCW1vdnEJMzcoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMzcoJWVkeCkKLUwoYmtfd3JpdGVfMzdieXRlcyk6Ci0JbW92cQkyOSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAyOSglZWR4KQotTChia193cml0ZV8yOWJ5dGVzKToKLQltb3ZxCTIxKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDIxKCVlZHgpCi1MKGJrX3dyaXRlXzIxYnl0ZXMpOgotCW1vdnEJMTMoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMTMoJWVkeCkKLUwoYmtfd3JpdGVfMTNieXRlcyk6Ci0JbW92cQk1KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDUoJWVkeCkKLUwoYmtfd3JpdGVfNWJ5dGVzKToKLQltb3ZsCTEoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIDEoJWVkeCkKLUwoYmtfd3JpdGVfMWJ5dGVzKToKLQltb3Z6YmwJKCVlYXgpLCAlZWN4Ci0JbW92YgklY2wsICglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCUxFTiglZXNwKSwgJWVjeAotCWFkZAklZWN4LCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoYmtfd3JpdGVfNDFieXRlcyk6Ci0JbW92cQkzMyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAzMyglZWR4KQotTChia193cml0ZV8zM2J5dGVzKToKLQltb3ZxCTI1KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDI1KCVlZHgpCi1MKGJrX3dyaXRlXzI1Ynl0ZXMpOgotCW1vdnEJMTcoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMTcoJWVkeCkKLUwoYmtfd3JpdGVfMTdieXRlcyk6Ci0JbW92cQk5KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDkoJWVkeCkKLUwoYmtfd3JpdGVfOWJ5dGVzKToKLQltb3ZxCTEoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMSglZWR4KQotCW1vdnpibAkoJWVheCksICVlY3gKLQltb3ZiCSVjbCwgKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJTEVOKCVlc3ApLCAlZWN4Ci0JYWRkCSVlY3gsICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChia193cml0ZV80NmJ5dGVzKToKLQltb3ZxCTM4KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDM4KCVlZHgpCi1MKGJrX3dyaXRlXzM4Ynl0ZXMpOgotCW1vdnEJMzAoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMzAoJWVkeCkKLUwoYmtfd3JpdGVfMzBieXRlcyk6Ci0JbW92cQkyMiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAyMiglZWR4KQotTChia193cml0ZV8yMmJ5dGVzKToKLQltb3ZxCTE0KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDE0KCVlZHgpCi1MKGJrX3dyaXRlXzE0Ynl0ZXMpOgotCW1vdnEJNiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCA2KCVlZHgpCi1MKGJrX3dyaXRlXzZieXRlcyk6Ci0JbW92bAkyKCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAyKCVlZHgpCi0JbW92endsCSglZWF4KSwgJWVjeAotCW1vdncJJWN4LCAoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAlMRU4oJWVzcCksICVlY3gKLQlhZGQJJWVjeCwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGJrX3dyaXRlXzQyYnl0ZXMpOgotCW1vdnEJMzQoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMzQoJWVkeCkKLUwoYmtfd3JpdGVfMzRieXRlcyk6Ci0JbW92cQkyNiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAyNiglZWR4KQotTChia193cml0ZV8yNmJ5dGVzKToKLQltb3ZxCTE4KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDE4KCVlZHgpCi1MKGJrX3dyaXRlXzE4Ynl0ZXMpOgotCW1vdnEJMTAoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMTAoJWVkeCkKLUwoYmtfd3JpdGVfMTBieXRlcyk6Ci0JbW92cQkyKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDIoJWVkeCkKLUwoYmtfd3JpdGVfMmJ5dGVzKToKLQltb3Z6d2wJKCVlYXgpLCAlZWN4Ci0JbW92dwklY3gsICglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCUxFTiglZXNwKSwgJWVjeAotCWFkZAklZWN4LCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoYmtfd3JpdGVfNDdieXRlcyk6Ci0JbW92cQkzOSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAzOSglZWR4KQotTChia193cml0ZV8zOWJ5dGVzKToKLQltb3ZxCTMxKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDMxKCVlZHgpCi1MKGJrX3dyaXRlXzMxYnl0ZXMpOgotCW1vdnEJMjMoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMjMoJWVkeCkKLUwoYmtfd3JpdGVfMjNieXRlcyk6Ci0JbW92cQkxNSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAxNSglZWR4KQotTChia193cml0ZV8xNWJ5dGVzKToKLQltb3ZxCTcoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgNyglZWR4KQotTChia193cml0ZV83Ynl0ZXMpOgotCW1vdmwJMyglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgMyglZWR4KQotCW1vdnp3bAkxKCVlYXgpLCAlZWN4Ci0JbW92dwklY3gsIDEoJWVkeCkKLQltb3Z6YmwJKCVlYXgpLCAlZWF4Ci0JbW92YgklYWwsICglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCUxFTiglZXNwKSwgJWVjeAotCWFkZAklZWN4LCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoYmtfd3JpdGVfNDNieXRlcyk6Ci0JbW92cQkzNSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAzNSglZWR4KQotTChia193cml0ZV8zNWJ5dGVzKToKLQltb3ZxCTI3KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDI3KCVlZHgpCi1MKGJrX3dyaXRlXzI3Ynl0ZXMpOgotCW1vdnEJMTkoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMTkoJWVkeCkKLUwoYmtfd3JpdGVfMTlieXRlcyk6Ci0JbW92cQkxMSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAxMSglZWR4KQotTChia193cml0ZV8xMWJ5dGVzKToKLQltb3ZxCTMoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMyglZWR4KQotTChia193cml0ZV8zYnl0ZXMpOgotCW1vdnp3bAkxKCVlYXgpLCAlZWN4Ci0JbW92dwklY3gsIDEoJWVkeCkKLQltb3Z6YmwJKCVlYXgpLCAlZWF4Ci0JbW92YgklYWwsICglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCUxFTiglZXNwKSwgJWVjeAotCWFkZAklZWN4LCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk5fRU5ECi0KLQotCS5wdXNoc2VjdGlvbiAucm9kYXRhLnNzc2UzLCJhIixAcHJvZ2JpdHMKLQkucDJhbGlnbiAyCi1MKHRhYmxlXzQ4Ynl0ZXNfZndkKToKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzFieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfM2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzRieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV81Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzdieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV84Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfOWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEwYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTFieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEzYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTRieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE2Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTdieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xOGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE5Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjBieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIyYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjNieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI1Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjZieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yN2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI4Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjlieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMxYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzJieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zM2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM0Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzVieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM3Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzhieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zOWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQwYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDFieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQzYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDRieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ2Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDdieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCi0JLnAyYWxpZ24gMgotTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbik6Ci0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzBieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzNieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzZieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV83Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfOGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzlieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzExYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTJieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xM2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE0Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTVieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE3Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMThieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xOWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIwYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjFieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIzYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjRieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI2Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjdieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yOGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI5Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzBieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMyYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzNieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM1Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzZieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zN2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM4Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzlieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQxYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDJieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80M2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ0Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDVieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ3Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQotCS5wMmFsaWduIDIKLUwoc2hsX3RhYmxlKToKLQkuaW50CUpNUFRCTCAoTChzaGxfMCksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfMSksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfMiksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfMyksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfNCksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfNSksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfNiksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfNyksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfOCksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfOSksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfMTApLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzExKSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF8xMiksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfMTMpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzE0KSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF8xNSksIEwoc2hsX3RhYmxlKSkKLQotCS5wMmFsaWduIDIKLUwodGFibGVfNDhfYnl0ZXNfYndkKToKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8wYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzJieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8zYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzVieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV82Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfN2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzhieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV85Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTBieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8xMWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzEyYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTNieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8xNGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE1Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTZieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8xN2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE4Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTlieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8yMGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzIxYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjJieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8yM2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI0Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjVieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8yNmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI3Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjhieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8yOWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzMwYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzFieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8zMmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzMzYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzRieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8zNWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM2Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzdieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8zOGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM5Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDBieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV80MWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQyYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDNieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV80NGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQ1Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDZieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV80N2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCi0JLnBvcHNlY3Rpb24KLQotI2lmZGVmIFVTRV9BU19NRU1NT1ZFCi0JLnAyYWxpZ24gNAotTChjb3B5X2JhY2t3YXJkKToKLQlQVVNIICglZWRpKQotCW1vdmwJJWVheCwgJWVkaQotCWxlYQkoJWVjeCwlZWR4LDEpLCVlZHgKLQlsZWEJKCVlY3gsJWVkaSwxKSwlZWRpCi0JdGVzdGwJJDB4MywgJWVkeAotCWpueglMKGJrX2FsaWduKQotCi1MKGJrX2FsaWduZWRfNCk6Ci0JY21wCSQ2NCwgJWVjeAotCWphZQlMKGJrX3dyaXRlX21vcmU2NGJ5dGVzKQotCi1MKGJrX3dyaXRlXzY0Ynl0ZXNsZXNzKToKLQljbXAJJDMyLCAlZWN4Ci0JamIJTChia193cml0ZV9sZXNzMzJieXRlcykKLQotTChia193cml0ZV9tb3JlMzJieXRlcyk6Ci0JLyogQ29weSAzMiBieXRlcyBhdCBhIHRpbWUuICAqLwotCXN1YgkkMzIsICVlY3gKLQltb3ZxCS04KCVlZGkpLCAleG1tMAotCW1vdnEJJXhtbTAsIC04KCVlZHgpCi0JbW92cQktMTYoJWVkaSksICV4bW0wCi0JbW92cQkleG1tMCwgLTE2KCVlZHgpCi0JbW92cQktMjQoJWVkaSksICV4bW0wCi0JbW92cQkleG1tMCwgLTI0KCVlZHgpCi0JbW92cQktMzIoJWVkaSksICV4bW0wCi0JbW92cQkleG1tMCwgLTMyKCVlZHgpCi0Jc3ViCSQzMiwgJWVkeAotCXN1YgkkMzIsICVlZGkKLQotTChia193cml0ZV9sZXNzMzJieXRlcyk6Ci0JbW92bAklZWRpLCAlZWF4Ci0Jc3ViCSVlY3gsICVlZHgKLQlzdWIJJWVjeCwgJWVheAotCVBPUCAoJWVkaSkKLUwoYmtfd3JpdGVfbGVzczMyYnl0ZXNfMik6Ci0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OF9ieXRlc19id2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKGJrX2FsaWduKToKLQljbXAJJDgsICVlY3gKLQlqYmUJTChia193cml0ZV9sZXNzMzJieXRlcykKLQl0ZXN0bAkkMSwgJWVkeAotCS8qIFdlIGdldCBoZXJlIG9ubHkgaWYgKEVEWCAmIDMgKSAhPSAwIHNvIGlmIChFRFggJiAxKSA9PTAsCi0JdGhlbgkoRURYICYgMikgbXVzdCBiZSAhPSAwLiAgKi8KLQlqeglMKGJrX2dvdDIpCi0Jc3ViCSQxLCAlZWRpCi0Jc3ViCSQxLCAlZWN4Ci0Jc3ViCSQxLCAlZWR4Ci0JbW92emJsCSglZWRpKSwgJWVheAotCW1vdmIJJWFsLCAoJWVkeCkKLQotCXRlc3RsCSQyLCAlZWR4Ci0JanoJTChia19hbGlnbmVkXzQpCi0KLUwoYmtfZ290Mik6Ci0Jc3ViCSQyLCAlZWRpCi0Jc3ViCSQyLCAlZWN4Ci0Jc3ViCSQyLCAlZWR4Ci0JbW92endsCSglZWRpKSwgJWVheAotCW1vdncJJWF4LCAoJWVkeCkKLQlqbXAJTChia19hbGlnbmVkXzQpCi0KLQkucDJhbGlnbiA0Ci1MKGJrX3dyaXRlX21vcmU2NGJ5dGVzKToKLQkvKiBDaGVjayBhbGlnbm1lbnQgb2YgbGFzdCBieXRlLiAgKi8KLQl0ZXN0bAkkMTUsICVlZHgKLQlqeglMKGJrX3Nzc2UzX2NweV9wcmUpCi0KLS8qIEVEWCBpcyBhbGlnbmVkIDQgYnl0ZXMsIGJ1dCBub3QgMTYgYnl0ZXMuICAqLwotTChia19zc3NlM19hbGlnbik6Ci0Jc3ViCSQ0LCAlZWRpCi0Jc3ViCSQ0LCAlZWN4Ci0Jc3ViCSQ0LCAlZWR4Ci0JbW92bAkoJWVkaSksICVlYXgKLQltb3ZsCSVlYXgsICglZWR4KQotCi0JdGVzdGwJJDE1LCAlZWR4Ci0JanoJTChia19zc3NlM19jcHlfcHJlKQotCi0Jc3ViCSQ0LCAlZWRpCi0Jc3ViCSQ0LCAlZWN4Ci0Jc3ViCSQ0LCAlZWR4Ci0JbW92bAkoJWVkaSksICVlYXgKLQltb3ZsCSVlYXgsICglZWR4KQotCi0JdGVzdGwJJDE1LCAlZWR4Ci0JanoJTChia19zc3NlM19jcHlfcHJlKQotCi0Jc3ViCSQ0LCAlZWRpCi0Jc3ViCSQ0LCAlZWN4Ci0Jc3ViCSQ0LCAlZWR4Ci0JbW92bAkoJWVkaSksICVlYXgKLQltb3ZsCSVlYXgsICglZWR4KQotCi1MKGJrX3Nzc2UzX2NweV9wcmUpOgotCWNtcAkkNjQsICVlY3gKLQlqYglMKGJrX3dyaXRlX21vcmUzMmJ5dGVzKQotCi0JLnAyYWxpZ24gNAotTChia19zc3NlM19jcHkpOgotCXN1YgkkNjQsICVlZGkKLQlzdWIJJDY0LCAlZWN4Ci0Jc3ViCSQ2NCwgJWVkeAotCW1vdmRxdQkweDMwKCVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgMHgzMCglZWR4KQotCW1vdmRxdQkweDIwKCVlZGkpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgMHgyMCglZWR4KQotCW1vdmRxdQkweDEwKCVlZGkpLCAleG1tMQotCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQotCW1vdmRxdQkoJWVkaSksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQljbXAJJDY0LCAlZWN4Ci0JamFlCUwoYmtfc3NzZTNfY3B5KQotCWptcAlMKGJrX3dyaXRlXzY0Ynl0ZXNsZXNzKQotCi0jZW5kaWYKLQotRU5EIChNRU1DUFkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJjYXQuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNhdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzVmMzhhLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNhdC5TCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cmNhdC5TLHYgMS44IDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotI2lmIGRlZmluZWQoQVBJV0FSTikKLSNBUFAKLQkuc2VjdGlvbiAuZ251Lndhcm5pbmcuc3RyY2F0Ci0JLmFzY2lpICJ3YXJuaW5nOiBzdHJjYXQoKSBpcyBhbG1vc3QgYWx3YXlzIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc3RybGNhdCgpIgotI05PX0FQUAotI2VuZGlmCi0KLS8qCi0gKiBOT1RFOiBJJ3ZlIHVucm9sbGVkIHRoZSBsb29wIGVpZ2h0IHRpbWVzOiBsYXJnZSBlbm91Z2ggdG8gbWFrZSBhCi0gKiBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBhbmQgc21hbGwgZW5vdWdoIG5vdCB0byB0b3RhbGx5IHRyYXNoIHRoZQotICogY2FjaGUuCi0gKi8KLQotRU5UUlkoc3RyY2F0KQotCXB1c2hsCSVlZGkJCQkvKiBzYXZlIGVkaSAqLwotCW1vdmwJOCglZXNwKSwlZWRpCQkvKiBkc3QgYWRkcmVzcyAqLwotCW1vdmwJMTIoJWVzcCksJWVkeAkJLyogc3JjIGFkZHJlc3MgKi8KLQlwdXNobAklZWRpCQkJLyogcHVzaCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0KLQljbGQJCQkJLyogc2V0IHNlYXJjaCBmb3J3YXJkICovCi0JeG9ybAklZWF4LCVlYXgJCS8qIHNldCBzZWFyY2ggZm9yIG51bGwgdGVybWluYXRvciAqLwotCW1vdmwJJC0xLCVlY3gJCS8qIHNldCBzZWFyY2ggZm9yIGxvdHMgb2YgY2hhcmFjdGVycyAqLwotCXJlcG5lCQkJCS8qIHNlYXJjaCEgKi8KLQlzY2FzYgotCi0JbGVhbAktMSglZWRpKSwlZWN4CQkvKiBjb3JyZWN0IGRzdCBhZGRyZXNzICovCi0KLQkuYWxpZ24gMiwweDkwCi1MMToJbW92YgkoJWVkeCksJWFsCQkvKiB1bnJvbGwgbG9vcCwgYnV0IG5vdCB0b28gbXVjaCAqLwotCW1vdmIJJWFsLCglZWN4KQotCXRlc3RiCSVhbCwlYWwKLQlqeglMMgotCW1vdmIJMSglZWR4KSwlYWwKLQltb3ZiCSVhbCwxKCVlY3gpCi0JdGVzdGIJJWFsLCVhbAotCWp6CUwyCi0JbW92YgkyKCVlZHgpLCVhbAotCW1vdmIJJWFsLDIoJWVjeCkKLQl0ZXN0YgklYWwsJWFsCi0JanoJTDIKLQltb3ZiCTMoJWVkeCksJWFsCi0JbW92YgklYWwsMyglZWN4KQotCXRlc3RiCSVhbCwlYWwKLQlqeglMMgotCW1vdmIJNCglZWR4KSwlYWwKLQltb3ZiCSVhbCw0KCVlY3gpCi0JdGVzdGIJJWFsLCVhbAotCWp6CUwyCi0JbW92Ygk1KCVlZHgpLCVhbAotCW1vdmIJJWFsLDUoJWVjeCkKLQl0ZXN0YgklYWwsJWFsCi0JanoJTDIKLQltb3ZiCTYoJWVkeCksJWFsCi0JbW92YgklYWwsNiglZWN4KQotCXRlc3RiCSVhbCwlYWwKLQlqeglMMgotCW1vdmIJNyglZWR4KSwlYWwKLQltb3ZiCSVhbCw3KCVlY3gpCi0JYWRkbAkkOCwlZWR4Ci0JYWRkbAkkOCwlZWN4Ci0JdGVzdGIJJWFsLCVhbAotCWpueglMMQotTDI6CXBvcGwJJWVheAkJCS8qIHBvcCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0JcG9wbAklZWRpCQkJLyogcmVzdG9yZSBlZGkgKi8KLQlyZXQKLUVORChzdHJjYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJjbXAuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNtcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDNmNGZjLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNtcC5TCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cmNtcC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotLyoKLSAqIE5PVEU6IEkndmUgdW5yb2xsZWQgdGhlIGxvb3AgZWlnaHQgdGltZXM6IGxhcmdlIGVub3VnaCB0byBtYWtlIGEKLSAqIHNpZ25pZmljYW50IGRpZmZlcmVuY2UsIGFuZCBzbWFsbCBlbm91Z2ggbm90IHRvIHRvdGFsbHkgdHJhc2ggdGhlCi0gKiBjYWNoZS4KLSAqLwotCi1FTlRSWShzdHJjbXApCi0JbW92bAkweDA0KCVlc3ApLCVlYXgKLQltb3ZsCTB4MDgoJWVzcCksJWVkeAotCWptcAlMMgkJCS8qIEp1bXAgaW50byB0aGUgbG9vcCEgKi8KLQotCS5hbGlnbgkyLDB4OTAKLUwxOglpbmNsCSVlYXgKLQlpbmNsCSVlZHgKLUwyOgltb3ZiCSglZWF4KSwlY2wKLQl0ZXN0YgklY2wsJWNsCQkJLyogbnVsbCB0ZXJtaW5hdG9yPz8/ICovCi0JanoJTDMKLQljbXBiCSVjbCwoJWVkeCkJCS8qIGNoYXJzIG1hdGNoPz8/ICovCi0Jam5lCUwzCi0JaW5jbAklZWF4Ci0JaW5jbAklZWR4Ci0JbW92YgkoJWVheCksJWNsCi0JdGVzdGIJJWNsLCVjbAotCWp6CUwzCi0JY21wYgklY2wsKCVlZHgpCi0Jam5lCUwzCi0JaW5jbAklZWF4Ci0JaW5jbAklZWR4Ci0JbW92YgkoJWVheCksJWNsCi0JdGVzdGIJJWNsLCVjbAotCWp6CUwzCi0JY21wYgklY2wsKCVlZHgpCi0Jam5lCUwzCi0JaW5jbAklZWF4Ci0JaW5jbAklZWR4Ci0JbW92YgkoJWVheCksJWNsCi0JdGVzdGIJJWNsLCVjbAotCWp6CUwzCi0JY21wYgklY2wsKCVlZHgpCi0Jam5lCUwzCi0JaW5jbAklZWF4Ci0JaW5jbAklZWR4Ci0JbW92YgkoJWVheCksJWNsCi0JdGVzdGIJJWNsLCVjbAotCWp6CUwzCi0JY21wYgklY2wsKCVlZHgpCi0Jam5lCUwzCi0JaW5jbAklZWF4Ci0JaW5jbAklZWR4Ci0JbW92YgkoJWVheCksJWNsCi0JdGVzdGIJJWNsLCVjbAotCWp6CUwzCi0JY21wYgklY2wsKCVlZHgpCi0Jam5lCUwzCi0JaW5jbAklZWF4Ci0JaW5jbAklZWR4Ci0JbW92YgkoJWVheCksJWNsCi0JdGVzdGIJJWNsLCVjbAotCWp6CUwzCi0JY21wYgklY2wsKCVlZHgpCi0Jam5lCUwzCi0JaW5jbAklZWF4Ci0JaW5jbAklZWR4Ci0JbW92YgkoJWVheCksJWNsCi0JdGVzdGIJJWNsLCVjbAotCWp6CUwzCi0JY21wYgklY2wsKCVlZHgpCi0JamUJTDEKLQkuYWxpZ24gMiwgMHg5MAotTDM6CW1vdnpibAkoJWVheCksJWVheAkJLyogdW5zaWduZWQgY29tcGFyaXNvbiAqLwotCW1vdnpibAkoJWVkeCksJWVkeAotCXN1YmwJJWVkeCwlZWF4Ci0JcmV0Ci1FTkQoc3RyY21wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RybmNtcC5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RybmNtcC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjQ5NDczLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cm5jbXAuUworKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RybmNtcC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotLyoKLSAqIE5PVEU6IEkndmUgdW5yb2xsZWQgdGhlIGxvb3AgZWlnaHQgdGltZXM6IGxhcmdlIGVub3VnaCB0byBtYWtlIGEKLSAqIHNpZ25pZmljYW50IGRpZmZlcmVuY2UsIGFuZCBzbWFsbCBlbm91Z2ggbm90IHRvIHRvdGFsbHkgdHJhc2ggdGhlCi0gKiBjYWNoZS4KLSAqLwotCi1FTlRSWShzdHJuY21wKQotCXB1c2hsCSVlYngKLQltb3ZsCTgoJWVzcCksJWVheAotCW1vdmwJMTIoJWVzcCksJWVjeAotCW1vdmwJMTYoJWVzcCksJWVkeAotCXRlc3RsCSVlZHgsJWVkeAotCWptcAlMMgkJCS8qIEp1bXAgaW50byB0aGUgbG9vcCEgKi8KLQotCS5hbGlnbiAyLDB4OTAKLUwxOglpbmNsCSVlYXgKLQlpbmNsCSVlY3gKLQlkZWNsCSVlZHgKLUwyOglqeglMNAkJCS8qIHN0cmluZ3MgYXJlIGVxdWFsICovCi0JbW92YgkoJWVheCksJWJsCi0JdGVzdGIJJWJsLCVibAotCWp6CUwzCi0JY21wYgklYmwsKCVlY3gpCi0Jam5lCUwzCi0KLQlpbmNsCSVlYXgKLQlpbmNsCSVlY3gKLQlkZWNsCSVlZHgKLQlqeglMNAotCW1vdmIJKCVlYXgpLCVibAotCXRlc3RiCSVibCwlYmwKLQlqeglMMwotCWNtcGIJJWJsLCglZWN4KQotCWpuZQlMMwotCi0JaW5jbAklZWF4Ci0JaW5jbAklZWN4Ci0JZGVjbAklZWR4Ci0JanoJTDQKLQltb3ZiCSglZWF4KSwlYmwKLQl0ZXN0YgklYmwsJWJsCi0JanoJTDMKLQljbXBiCSVibCwoJWVjeCkKLQlqbmUJTDMKLQotCWluY2wJJWVheAotCWluY2wJJWVjeAotCWRlY2wJJWVkeAotCWp6CUw0Ci0JbW92YgkoJWVheCksJWJsCi0JdGVzdGIJJWJsLCVibAotCWp6CUwzCi0JY21wYgklYmwsKCVlY3gpCi0Jam5lCUwzCi0KLQlpbmNsCSVlYXgKLQlpbmNsCSVlY3gKLQlkZWNsCSVlZHgKLQlqeglMNAotCW1vdmIJKCVlYXgpLCVibAotCXRlc3RiCSVibCwlYmwKLQlqeglMMwotCWNtcGIJJWJsLCglZWN4KQotCWpuZQlMMwotCi0JaW5jbAklZWF4Ci0JaW5jbAklZWN4Ci0JZGVjbAklZWR4Ci0JanoJTDQKLQltb3ZiCSglZWF4KSwlYmwKLQl0ZXN0YgklYmwsJWJsCi0JanoJTDMKLQljbXBiCSVibCwoJWVjeCkKLQlqbmUJTDMKLQotCWluY2wJJWVheAotCWluY2wJJWVjeAotCWRlY2wJJWVkeAotCWp6CUw0Ci0JbW92YgkoJWVheCksJWJsCi0JdGVzdGIJJWJsLCVibAotCWp6CUwzCi0JY21wYgklYmwsKCVlY3gpCi0Jam5lCUwzCi0KLQlpbmNsCSVlYXgKLQlpbmNsCSVlY3gKLQlkZWNsCSVlZHgKLQlqeglMNAotCW1vdmIJKCVlYXgpLCVibAotCXRlc3RiCSVibCwlYmwKLQlqeglMMwotCWNtcGIJJWJsLCglZWN4KQotCWplCUwxCi0KLQkuYWxpZ24gMiwweDkwCi1MMzoJbW92emJsCSglZWF4KSwlZWF4CQkvKiB1bnNpZ25lZCBjb21wYXJpc2lvbiAqLwotCW1vdnpibAkoJWVjeCksJWVjeAotCXN1YmwJJWVjeCwlZWF4Ci0JcG9wbAklZWJ4Ci0JcmV0Ci0JLmFsaWduIDIsMHg5MAotTDQ6CXhvcmwJJWVheCwlZWF4Ci0JcG9wbAklZWJ4Ci0JcmV0Ci1FTkQoc3RybmNtcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N3YWIuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N3YWIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY2Y2ZiMi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9zd2FiLlMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgkkT3BlbkJTRDogc3dhYi5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotLyoKLSAqIE9uIHRoZSBpNDg2LCB0aGlzIGNvZGUgaXMgbmVnbGlnaWJseSBmYXN0ZXIgdGhhbiB0aGUgY29kZSBnZW5lcmF0ZWQKLSAqIGJ5IGdjYyBhdCBhYm91dCBoYWxmIHRoZSBzaXplLiAgSWYgbXkgaTM4NiBkYXRhYm9vayBpcyBjb3JyZWN0LCBpdAotICogc2hvdWxkIGJlIGNvbnNpZGVyYWJseSBmYXN0ZXIgdGhhbiB0aGUgZ2NjIGNvZGUgb24gYSBpMzg2LgotICovCi0KLUVOVFJZKHN3YWIpCi0JcHVzaGwJJWVzaQotCXB1c2hsCSVlZGkKLQltb3ZsCTEyKCVlc3ApLCVlc2kKLQltb3ZsCTE2KCVlc3ApLCVlZGkKLQltb3ZsCTIwKCVlc3ApLCVlY3gKLQotCWNsZAkJCQkjIHNldCBkaXJlY3Rpb24gZm9yd2FyZAotCi0Jc2hybAkkMSwlZWN4Ci0JdGVzdGwJJDcsJWVjeAkJCSMgY29weSBmaXJzdCBncm91cCBvZiAxIHRvIDcgd29yZHMKLQlqeglMMgkJCSMgd2hpbGUgc3dhcGluZyBhbHRlcm5hdGUgYnl0ZXMuCi0JLmFsaWduCTIsMHg5MAotTDE6CWxvZHN3Ci0Jcm9ydwkkOCwlYXgKLQlzdG9zdwotCWRlY2wJJWVjeAotCXRlc3RsCSQ3LCVlY3gKLQlqbnoJTDEKLQotTDI6CXNocmwJJDMsJWVjeAkJCSMgY29weSByZW1haW5kZXIgOCB3b3JkcyBhdCBhIHRpbWUKLQlqeglMNAkJCSMgd2hpbGUgc3dhcHBpbmcgYWx0ZXJuYXRlIGJ5dGVzLgotCS5hbGlnbgkyLDB4OTAKLUwzOglsb2RzdwotCXJvcncJJDgsJWF4Ci0Jc3Rvc3cKLQlsb2RzdwotCXJvcncJJDgsJWF4Ci0Jc3Rvc3cKLQlsb2RzdwotCXJvcncJJDgsJWF4Ci0Jc3Rvc3cKLQlsb2RzdwotCXJvcncJJDgsJWF4Ci0Jc3Rvc3cKLQlsb2RzdwotCXJvcncJJDgsJWF4Ci0Jc3Rvc3cKLQlsb2RzdwotCXJvcncJJDgsJWF4Ci0Jc3Rvc3cKLQlsb2RzdwotCXJvcncJJDgsJWF4Ci0Jc3Rvc3cKLQlsb2RzdwotCXJvcncJJDgsJWF4Ci0Jc3Rvc3cKLQlkZWNsCSVlY3gKLQlqbnoJTDMKLQotTDQ6CXBvcGwJJWVkaQotCXBvcGwJJWVzaQotCXJldAotRU5EKHN3YWIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzLm1rIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdkMWUwOC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4KLXN5c2NhbGxfc3JjIDo9Ci1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2Jyay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fZXhpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2ZjbnRsNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19mc3RhdGZzNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjcHUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjd2QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2lvY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fbGxzZWVrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fbW1hcDIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19vcGVuYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19wcG9sbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3BzZWxlY3Q2LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fcHRyYWNlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fcmVib290LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fc2V0X3RocmVhZF9hcmVhLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fc2lnYWN0aW9uLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fc3RhdGZzNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19zeXNsb2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX193YWl0aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX2V4aXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvYWNjZXB0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2FjY3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvYmluZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9jYXBnZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvY2Fwc2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2NoZGlyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Nocm9vdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9jbG9zZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9jb25uZWN0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZHVwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2R1cDMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZXZlbnRmZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9leGVjdmUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZjaGRpci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mY2htb2QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZmNob3duLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZjaG93bmF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZkYXRhc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mbG9jay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZnNldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZzdGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZzdGF0YXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZnN5bmMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZnRydW5jYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Z1dGV4LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldGRlbnRzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldGVnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZXVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldGl0aW1lci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRwZWVybmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRwZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHBpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRwcGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHJlc2dpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXN1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHJ1c2FnZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRzaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0c29ja25hbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0c29ja29wdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXR0aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHVpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9pbml0X21vZHVsZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvaW9wcmlvX2dldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9pb3ByaW9fc2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2tpbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMva2xvZ2N0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9sZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2xpc3Rlbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9saXN0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbGxpc3R4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbHNlZWsuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbHNldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL21hZHZpc2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbWluY29yZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9ta2RpcmF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL21rbm9kYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbWxvY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbWxvY2thbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbW91bnQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbXByb3RlY3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbXJlbWFwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL21zeW5jLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL211bmxvY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbXVubG9ja2FsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tdW5tYXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbmFub3NsZWVwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9wZXJzb25hbGl0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9waXBlMi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9wcmN0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9wcmVhZDY0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3BybGltaXQ2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9wd3JpdGU2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9yZWFkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3JlYWRhaGVhZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9yZWFkbGlua2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3JlYWR2LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3JlY3Zmcm9tLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3JlY3Ztc2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1zZy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZW5kdG8uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0Z2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldGdyb3Vwcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRpdGltZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0bnMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0cGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRwcmlvcml0eS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRyZWdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXNnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVzdWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHJldWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHJsaW1pdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRzaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0c29ja29wdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0dWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NodXRkb3duLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NpZ25hbGZkNC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zb2NrZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc29ja2V0cGFpci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zd2Fwb2ZmLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3N3YXBvbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zeW1saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zeXNpbmZvLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3Rna2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3RpbWVzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3RraWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3RydW5jYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3RydW5jYXRlNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdW1hc2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdW1vdW50Mi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy91bmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy91bmxpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy91bnNoYXJlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3V0aW1lbnNhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy93YWl0NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy93cml0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy93cml0ZXYuUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2FjY2VwdDQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19hY2NlcHQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxNmRkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19hY2NlcHQ0LlMKQEAgLTAsMCArMSwyNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2FjY2VwdDQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBtb3YgICAgICQxOCwgJWVieAorICAgIG1vdiAgICAgJWVzcCwgJWVjeAorICAgIGFkZGwgICAgJDEyLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoX19hY2NlcHQ0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Jyay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Jyay5TCmluZGV4IDcyOGJmODEuLjIyYWNkYWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19icmsuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fYnJrLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKF9fYnJrKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2JyaywgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19jb25uZWN0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fY29ubmVjdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NWQ0NTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fY29ubmVjdC5TCkBAIC0wLDAgKzEsMjcgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19jb25uZWN0KQorICAgIHB1c2hsICAgJWVieAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgbW92ICAgICAkMywgJWVieAorICAgIG1vdiAgICAgJWVzcCwgJWVjeAorICAgIGFkZGwgICAgJDEyLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoX19jb25uZWN0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Vwb2xsX3B3YWl0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwppbmRleCA5YmNjMTQyLi4xNzFjYWE1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwpAQCAtNCwxOCArNCwyMyBAQAogCiBFTlRSWShfX2Vwb2xsX3B3YWl0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIHB1c2hsICAgJWVkaQotICAgIHB1c2hsICAgJWVicAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMjQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDE2Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVicCwgMjAKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCisgICAgcHVzaGwgICAlZWJwCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVicCwgMAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlYngKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAzNiglZXNwKSwgJWVkeApAQCAtMjgsOSArMzMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYnAKICAgICBwb3BsICAgICVlZGkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19leGl0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZXhpdC5TCmluZGV4IGVhZGRjNWUuLjhjZjM2NjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19leGl0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2V4aXQuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoX19leGl0KQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2V4aXQsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmFkdmlzZTY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmFkdmlzZTY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0Mjk4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mYWR2aXNlNjQuUwpAQCAtMCwwICsxLDQ2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZmFkdmlzZTY0KQorICAgIHB1c2hsICAgJWVieAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCisgICAgcHVzaGwgICAlZWJwCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVicCwgMAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAzNiglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgNDAoJWVzcCksICVlc2kKKyAgICBtb3YgICAgIDQ0KCVlc3ApLCAlZWRpCisgICAgbW92ICAgICA0OCglZXNwKSwgJWVicAorICAgIG1vdmwgICAgJF9fTlJfZmFkdmlzZTY0XzY0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZWJwCisgICAgcG9wbCAgICAlZWRpCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoX19mYWR2aXNlNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGw2NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZjbnRsNjQuUwppbmRleCBmYWVmYTY1Li5kOTAwYTUyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGw2NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mY250bDY0LlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoX19mY250bDY0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mc3RhdGZzNjQuUwppbmRleCBkZmQwNGFmLi45YjQ0NzQzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZnN0YXRmczY0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKF9fZnN0YXRmczY0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjcHUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjcHUuUwppbmRleCBkMWRhODcxLi5iYjRjNDFmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0Y3B1LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGNwdS5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKF9fZ2V0Y3B1KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjd2QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjd2QuUwppbmRleCBhOTgzNGUyLi44ZGVjZDk5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0Y3dkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGN3ZC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKF9fZ2V0Y3dkKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9nZXRjd2QsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0ZGVudHM2NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGRlbnRzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTkwYTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGRlbnRzNjQuUwpAQCAtMCwwICsxLDMxIEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZ2V0ZGVudHM2NCkKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX2dldGRlbnRzNjQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChfX2dldGRlbnRzNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0cGlkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0cGlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk3MjAyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwaWQuUwpAQCAtMCwwICsxLDE2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fZ2V0cGlkKQorICAgIG1vdmwgICAgJF9fTlJfZ2V0cGlkLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcmV0CitFTkQoX19nZXRwaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCmluZGV4IDk5ZDMzYmIuLmRkNTU5MWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKF9fZ2V0cHJpb3JpdHkpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2dldHByaW9yaXR5LCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2lvY3RsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19faW9jdGwuUwppbmRleCBhZDYxN2YwLi5iNmVlOWYyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19faW9jdGwuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19faW9jdGwuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShfX2lvY3RsKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19sbHNlZWsuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19sbHNlZWsuUwppbmRleCAyZGFiOGE5Li41Y2M5MDdhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbGxzZWVrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2xsc2Vlay5TCkBAIC00LDE2ICs0LDIwIEBACiAKIEVOVFJZKF9fbGxzZWVrKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIHB1c2hsICAgJWVkaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMjAKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDE2CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCisgICAgcHVzaGwgICAlZWRpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVkeApAQCAtMjUsOSArMjksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZGkKICAgICBwb3BsICAgICVlc2kKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19tbWFwMi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX21tYXAyLlMKaW5kZXggOTYzYWJmMy4uMDgzMTRjOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX21tYXAyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX21tYXAyLlMKQEAgLTQsMTggKzQsMjMgQEAKIAogRU5UUlkoX19tbWFwMikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICBwdXNobCAgICVlZGkKLSAgICBwdXNobCAgICVlYnAKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDI0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAxNgotICAgIC5jZmlfcmVsX29mZnNldCBlYnAsIDIwCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCisgICAgcHVzaGwgICAlZWRpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMAorICAgIHB1c2hsICAgJWVicAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlYnAsIDAKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMzYoJWVzcCksICVlZHgKQEAgLTI4LDkgKzMzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJwCiAgICAgcG9wbCAgICAlZWRpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3BlbmF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3BlbmF0LlMKaW5kZXggNmIwNWJlYy4uNGMxMTcwOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX29wZW5hdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19vcGVuYXQuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWShfX29wZW5hdCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcHBvbGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wcG9sbC5TCmluZGV4IGU1YWY5M2MuLjJhMWY3NmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wcG9sbC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wcG9sbC5TCkBAIC00LDE2ICs0LDIwIEBACiAKIEVOVFJZKF9fcHBvbGwpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyMAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CkBAIC0yNSw5ICsyOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkaQogICAgIHBvcGwgICAgJWVzaQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3BzZWxlY3Q2LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcHNlbGVjdDYuUwppbmRleCA5ODRhNjdlLi44ZmYxMDJhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcHNlbGVjdDYuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcHNlbGVjdDYuUwpAQCAtNCwxOCArNCwyMyBAQAogCiBFTlRSWShfX3BzZWxlY3Q2KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIHB1c2hsICAgJWVkaQotICAgIHB1c2hsICAgJWVicAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMjQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDE2Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVicCwgMjAKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCisgICAgcHVzaGwgICAlZWJwCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVicCwgMAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlYngKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAzNiglZXNwKSwgJWVkeApAQCAtMjgsOSArMzMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYnAKICAgICBwb3BsICAgICVlZGkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wdHJhY2UuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wdHJhY2UuUwppbmRleCBkM2I4MDMxLi5kOTgyY2VjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcHRyYWNlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3B0cmFjZS5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKF9fcHRyYWNlKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19yZWJvb3QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19yZWJvb3QuUwppbmRleCBiNjQ0OTA2Li4zZDE2OWJmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcmVib290LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3JlYm9vdC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKF9fcmVib290KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwppbmRleCAxYzVmZGNjLi41OWMzODgyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKF9fcnRfc2lnYWN0aW9uKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCmluZGV4IDU1MjIxOTUuLjljNmExMDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShfX3J0X3NpZ3BlbmRpbmcpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3J0X3NpZ3BlbmRpbmcsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCmluZGV4IDBkZjczMDEuLjliMTUzMmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKF9fcnRfc2lncHJvY21hc2spCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKaW5kZXggMGU3ZGJkZi4uYjA1YWNkOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKF9fcnRfc2lnc3VzcGVuZCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfcnRfc2lnc3VzcGVuZCwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwppbmRleCBjZmJjN2E2Li4xNGNiNzBmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKF9fcnRfc2lndGltZWR3YWl0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKaW5kZXggYTliOWY3OS4uMGIwYTk3MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoX19zY2hlZF9nZXRhZmZpbml0eSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2V0X3RocmVhZF9hcmVhLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2V0X3RocmVhZF9hcmVhLlMKaW5kZXggY2UwNjIzMy4uOGNkNjg4MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoX19zZXRfdGhyZWFkX2FyZWEpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc2V0X3RocmVhZF9hcmVhLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCmluZGV4IDZhMzk0M2QuLjA4YWNjZTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKF9fc2V0X3RpZF9hZGRyZXNzKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3NldF90aWRfYWRkcmVzcywgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zaWdhY3Rpb24uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zaWdhY3Rpb24uUwppbmRleCA4ODI0YTg1Li4wMjM4MjQ3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2lnYWN0aW9uLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NpZ2FjdGlvbi5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKF9fc2lnYWN0aW9uKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zaWduYWxmZDQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zaWduYWxmZDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmRkYzczCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NpZ25hbGZkNC5TCkBAIC0wLDAgKzEsMzYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19zaWduYWxmZDQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX3NpZ25hbGZkNCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBhZGRsICAgICQ0LCAlZXNwCisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKF9fc2lnbmFsZmQ0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NvY2tldC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NvY2tldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTUyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc29ja2V0LlMKQEAgLTAsMCArMSwyNyBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NvY2tldCkKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIG1vdiAgICAgJDEsICVlYngKKyAgICBtb3YgICAgICVlc3AsICVlY3gKKyAgICBhZGRsICAgICQxMiwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBhZGRsICAgICQ0LCAlZXNwCisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKF9fc29ja2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3N0YXRmczY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3RhdGZzNjQuUwppbmRleCA3YTkxZjFkLi5iOWJjY2IwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3RhdGZzNjQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3RhdGZzNjQuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShfX3N0YXRmczY0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zeXNsb2cuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zeXNsb2cuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRhMDFiZS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3lzbG9nLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKF9fc3lzbG9nKQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4Ci0gICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAotICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKLSAgICBtb3ZsICAgICRfX05SX3N5c2xvZywgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKLTE6Ci0gICAgcG9wbCAgICAlZWR4Ci0gICAgcG9wbCAgICAlZWN4Ci0gICAgcG9wbCAgICAlZWJ4Ci0gICAgcmV0Ci1FTkQoX19zeXNsb2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKaW5kZXggNjg0ODBkMS4uYjIyZjQwOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShfX3RpbWVyX2NyZWF0ZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKaW5kZXggYTI3MzJlMS4uZDc3YWUzZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoX190aW1lcl9kZWxldGUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfdGltZXJfZGVsZXRlLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKaW5kZXggYTM0MGJmZS4uZjIxYjA4ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShfX3RpbWVyX2dldG92ZXJydW4pCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfdGltZXJfZ2V0b3ZlcnJ1biwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCmluZGV4IDRhZWI4ZWIuLjczYzg1MzkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShfX3RpbWVyX2dldHRpbWUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3RpbWVyX2dldHRpbWUsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwppbmRleCBmOTNiY2E0Li4xYTZhOGVjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkoX190aW1lcl9zZXR0aW1lKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX193YWl0aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX193YWl0aWQuUwppbmRleCBjZGE1MjM4Li4yMDYxYWJjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fd2FpdGlkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3dhaXRpZC5TCkBAIC00LDE2ICs0LDIwIEBACiAKIEVOVFJZKF9fd2FpdGlkKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIHB1c2hsICAgJWVkaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMjAKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDE2CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCisgICAgcHVzaGwgICAlZWRpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVkeApAQCAtMjUsOSArMjksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZGkKICAgICBwb3BsICAgICVlc2kKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX2V4aXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX2V4aXQuUwppbmRleCAyZmY1ZmFmLi44NTI4ZWU0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19leGl0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fZXhpdC5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShfZXhpdCkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9leGl0X2dyb3VwLCAlZWF4CkBAIC0xMywxMCArMTMsMTIgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CiBFTkQoX2V4aXQpCisKKyAgICAuZ2xvYmwgX0V4aXQKKyAgICAuZXF1IF9FeGl0LCBfZXhpdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2NlcHQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjZXB0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZThhNTguLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2NlcHQuUworKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoYWNjZXB0KQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAotICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgbW92ICAgICAkNSwgJWVieAotICAgIG1vdiAgICAgJWVzcCwgJWVjeAotICAgIGFkZGwgICAgJDEyLCAlZWN4Ci0gICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChhY2NlcHQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2FjY3QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjdC5TCmluZGV4IDZhYmFmZmMuLmQ4MzE3NzEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjdC5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShhY2N0KQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2FjY3QsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2JpbmQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYmluZC5TCmluZGV4IDdjMmFjYjUuLjllZjgxN2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYmluZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYmluZC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGJpbmQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAkMiwgJWVieAogICAgIG1vdiAgICAgJWVzcCwgJWVjeAogICAgIGFkZGwgICAgJDEyLCAlZWN4CkBAIC0xNyw5ICsxOCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBnZXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2FwZ2V0LlMKaW5kZXggYWE3YjQzMi4uODFjMjRlOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBnZXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcGdldC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGNhcGdldCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfY2FwZ2V0LCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBzZXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2Fwc2V0LlMKaW5kZXggNmMzMTA4My4uNGUzMTFlOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBzZXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcHNldC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGNhcHNldCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfY2Fwc2V0LCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaGRpci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaGRpci5TCmluZGV4IGE1MWFjNmUuLjIyMjZhMWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2hkaXIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NoZGlyLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKGNoZGlyKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2NoZGlyLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaHJvb3QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2hyb290LlMKaW5kZXggYmU4ZjY4Ni4uOTVlZDBiNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaHJvb3QuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nocm9vdC5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShjaHJvb3QpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfY2hyb290LCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXRyZXMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKaW5kZXggY2U3ZTZmNy4uOTUwMTc5OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXRyZXMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGNsb2NrX2dldHJlcykKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfY2xvY2tfZ2V0cmVzLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwppbmRleCBiMWNkYjFhLi4wODc1Y2ZiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShjbG9ja19nZXR0aW1lKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9jbG9ja19nZXR0aW1lLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKaW5kZXggNmMwMjVlMy4uNWUyY2MwMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKGNsb2NrX25hbm9zbGVlcCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCmluZGV4IDdjODYzZTEuLjk2ZmFmZWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGNsb2NrX3NldHRpbWUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2Nsb2NrX3NldHRpbWUsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb3NlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb3NlLlMKaW5kZXggM2ViM2JlMS4uZjZjY2U2MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9zZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvc2UuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoY2xvc2UpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfY2xvc2UsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY29ubmVjdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGQ3M2NhLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY29ubmVjdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShjb25uZWN0KQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAotICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgbW92ICAgICAkMywgJWVieAotICAgIG1vdiAgICAgJWVzcCwgJWVjeAotICAgIGFkZGwgICAgJDEyLCAlZWN4Ci0gICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChjb25uZWN0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwppbmRleCAxMWZmNzYyLi41OGI4ZDZiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShkZWxldGVfbW9kdWxlKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9kZWxldGVfbW9kdWxlLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kdXAuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZHVwLlMKaW5kZXggOTgwNzBlMi4uMGZkOWNjZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kdXAuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cC5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShkdXApCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfZHVwLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kdXAzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cDMuUwppbmRleCA0MzgwZTZhLi44MzQ4NjYwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cDMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cDMuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShkdXAzKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKaW5kZXggY2E1ZDRkMS4uMGZjZDA5YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKGVwb2xsX2NyZWF0ZTEpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfZXBvbGxfY3JlYXRlMSwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfY3RsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCmluZGV4IGRmMzQ1Y2QuLjA5MmMxZTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfY3RsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jdGwuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWShlcG9sbF9jdGwpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ldmVudGZkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2V2ZW50ZmQuUwppbmRleCAzMzNiY2E0Li5jYzE2NWU1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2V2ZW50ZmQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2V2ZW50ZmQuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShldmVudGZkKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9ldmVudGZkMiwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXhlY3ZlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2V4ZWN2ZS5TCmluZGV4IDk1NTIzYmMuLmUxYzAyNTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXhlY3ZlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9leGVjdmUuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShleGVjdmUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mYWNjZXNzYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKaW5kZXggMGFkNjIyNC4uOWQ1MjIzMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mYWNjZXNzYXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKGZhY2Nlc3NhdCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZhbGxvY2F0ZTY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZhbGxvY2F0ZTY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhN2MzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmFsbG9jYXRlNjQuUwpAQCAtMCwwICsxLDQ2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZhbGxvY2F0ZTY0KQorICAgIHB1c2hsICAgJWVieAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCisgICAgcHVzaGwgICAlZWJwCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVicCwgMAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAzNiglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgNDAoJWVzcCksICVlc2kKKyAgICBtb3YgICAgIDQ0KCVlc3ApLCAlZWRpCisgICAgbW92ICAgICA0OCglZXNwKSwgJWVicAorICAgIG1vdmwgICAgJF9fTlJfZmFsbG9jYXRlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZWJwCisgICAgcG9wbCAgICAlZWRpCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoZmFsbG9jYXRlNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaGRpci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hkaXIuUwppbmRleCA0Mjk4YzJhLi5jNDBjMmMxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaGRpci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNoZGlyLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKGZjaGRpcikKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9mY2hkaXIsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2QuUwppbmRleCBkNGVmMzZmLi4zNzg1MWZmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoZmNobW9kKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9mY2htb2QsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZGF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZGF0LlMKaW5kZXggNGZiNjk5NS4uZjUxNTUxMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2RhdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kYXQuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWShmY2htb2RhdCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hvd24uUwppbmRleCAzMjZmZTE2Li4xYTRmNzQ5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoZmNob3duKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duYXQuUwppbmRleCA4MDJkYzQ0Li5jMmIzNThlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bmF0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hvd25hdC5TCkBAIC00LDE2ICs0LDIwIEBACiAKIEVOVFJZKGZjaG93bmF0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIHB1c2hsICAgJWVkaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMjAKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDE2CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCisgICAgcHVzaGwgICAlZWRpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVkeApAQCAtMjUsOSArMjksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZGkKICAgICBwb3BsICAgICVlc2kKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmRhdGFzeW5jLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZkYXRhc3luYy5TCmluZGV4IDAyZTA5YmUuLmRlYmQ0ZTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmRhdGFzeW5jLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mZGF0YXN5bmMuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoZmRhdGFzeW5jKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2ZkYXRhc3luYywgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmdldHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZnZXR4YXR0ci5TCmluZGV4IDk5YTkyMGQuLjFlZmY5MzEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mZ2V0eGF0dHIuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWShmZ2V0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwppbmRleCBhMTY5MWZjLi5mYzgxYTM3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShmbGlzdHhhdHRyKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxvY2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxvY2suUwppbmRleCBhNDM4OGU5Li4wZmM3NmE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Zsb2NrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mbG9jay5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGZsb2NrKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9mbG9jaywgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCmluZGV4IDYzNzc5NzQuLjIwNTNhOWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShmcmVtb3ZleGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2ZyZW1vdmV4YXR0ciwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnNldHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzZXR4YXR0ci5TCmluZGV4IDJmOTI2YTUuLjdhZjBlZjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnNldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc2V0eGF0dHIuUwpAQCAtNCwxNiArNCwyMCBAQAogCiBFTlRSWShmc2V0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyMAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CkBAIC0yNSw5ICsyOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkaQogICAgIHBvcGwgICAgJWVzaQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWE0ZDdmLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXQuUworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZnN0YXQpCi0gICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4Ci0gICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAotICAgIG1vdmwgICAgJF9fTlJfZnN0YXQ2NCwgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKLTE6Ci0gICAgcG9wbCAgICAlZWN4Ci0gICAgcG9wbCAgICAlZWJ4Ci0gICAgcmV0Ci1FTkQoZnN0YXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0NjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMTYyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0NjQuUwpAQCAtMCwwICsxLDI5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZzdGF0NjQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfZnN0YXQ2NCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBhZGRsICAgICQ0LCAlZXNwCisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKGZzdGF0NjQpCisKKyAgICAuZ2xvYmwgZnN0YXQKKyAgICAuZXF1IGZzdGF0LCBmc3RhdDY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0YXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXRhdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmU4NjhjLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXRhdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShmc3RhdGF0KQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKLSAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4Ci0gICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAotICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKLSAgICBtb3ZsICAgICRfX05SX2ZzdGF0YXQ2NCwgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKLTE6Ci0gICAgcG9wbCAgICAlZXNpCi0gICAgcG9wbCAgICAlZWR4Ci0gICAgcG9wbCAgICAlZWN4Ci0gICAgcG9wbCAgICAlZWJ4Ci0gICAgcmV0Ci1FTkQoZnN0YXRhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXRhdDY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0YXQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNjk3ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0YXQ2NC5TCkBAIC0wLDAgKzEsMzkgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoZnN0YXRhdDY0KQorICAgIHB1c2hsICAgJWVieAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9mc3RhdGF0NjQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChmc3RhdGF0NjQpCisKKyAgICAuZ2xvYmwgZnN0YXRhdAorICAgIC5lcXUgZnN0YXRhdCwgZnN0YXRhdDY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzeW5jLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzeW5jLlMKaW5kZXggNzExODNjYi4uYjE5YTNhYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3luYy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN5bmMuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoZnN5bmMpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfZnN5bmMsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGUuUwppbmRleCAxMDAzMDc3Li43OGQxZTE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnRydW5jYXRlLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoZnRydW5jYXRlKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9mdHJ1bmNhdGUsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKaW5kZXggNTg2MDg2ZC4uNzIzMzQ0NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnRydW5jYXRlNjQuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShmdHJ1bmNhdGU2NCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z1dGV4LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z1dGV4LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNTI5MTMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdXRleC5TCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShmdXRleCkKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICBwdXNobCAgICVlZGkKLSAgICBwdXNobCAgICVlYnAKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDI0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAxNgotICAgIC5jZmlfcmVsX29mZnNldCBlYnAsIDIwCi0gICAgbW92ICAgICAyOCglZXNwKSwgJWVieAotICAgIG1vdiAgICAgMzIoJWVzcCksICVlY3gKLSAgICBtb3YgICAgIDM2KCVlc3ApLCAlZWR4Ci0gICAgbW92ICAgICA0MCglZXNwKSwgJWVzaQotICAgIG1vdiAgICAgNDQoJWVzcCksICVlZGkKLSAgICBtb3YgICAgIDQ4KCVlc3ApLCAlZWJwCi0gICAgbW92bCAgICAkX19OUl9mdXRleCwgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKLTE6Ci0gICAgcG9wbCAgICAlZWJwCi0gICAgcG9wbCAgICAlZWRpCi0gICAgcG9wbCAgICAlZXNpCi0gICAgcG9wbCAgICAlZWR4Ci0gICAgcG9wbCAgICAlZWN4Ci0gICAgcG9wbCAgICAlZWJ4Ci0gICAgcmV0Ci1FTkQoZnV0ZXgpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGRlbnRzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGRlbnRzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MjNmZWIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRkZW50cy5TCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShnZXRkZW50cykKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgbW92ICAgICAxNiglZXNwKSwgJWVieAotICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKLSAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4Ci0gICAgbW92bCAgICAkX19OUl9nZXRkZW50czY0LCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlZHgKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChnZXRkZW50cykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZWdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRlZ2lkLlMKaW5kZXggNjFlNzgzOS4uNzI5YjdhZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRlZ2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRlZ2lkLlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHJldAogRU5EKGdldGVnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGV1aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZXVpZC5TCmluZGV4IDgwYmNmN2EuLmRjYzc2YjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZXVpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZXVpZC5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICByZXQKIEVORChnZXRldWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z2lkLlMKaW5kZXggODdkMzFhNy4uYjM2YTJjOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRnaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdpZC5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICByZXQKIEVORChnZXRnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdyb3Vwcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRncm91cHMuUwppbmRleCBlNDI0N2U3Li4wYTVkZTM1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdyb3Vwcy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoZ2V0Z3JvdXBzKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9nZXRncm91cHMzMiwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0aXRpbWVyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGl0aW1lci5TCmluZGV4IDJkZWViYzkuLmEwY2I3NjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRpdGltZXIuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShnZXRpdGltZXIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2dldGl0aW1lciwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwppbmRleCBlODk0MDkzLi42NzczZTZhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZWVybmFtZS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGdldHBlZXJuYW1lKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgJDcsICVlYngKICAgICBtb3YgICAgICVlc3AsICVlY3gKICAgICBhZGRsICAgICQxMiwgJWVjeApAQCAtMTcsOSArMTgsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZ2lkLlMKaW5kZXggYzUwYTA5Zi4uZjcwMmNmZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZ2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZ2lkLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKGdldHBnaWQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfZ2V0cGdpZCwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGlkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBpZC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWNhZjc0Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGlkLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGdldHBpZCkKLSAgICBtb3ZsICAgICRfX05SX2dldHBpZCwgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKLTE6Ci0gICAgcmV0Ci1FTkQoZ2V0cGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwcGlkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBwaWQuUwppbmRleCBiOTMyMDQ0Li5lZGJlMzg0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBwaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBwaWQuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcmV0CiBFTkQoZ2V0cHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJlc2dpZC5TCmluZGV4IGFkNzRlNTYuLjlmMWE5ZGQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXNnaWQuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShnZXRyZXNnaWQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXN1aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzdWlkLlMKaW5kZXggNmNmNjBiMy4uNjFlMTM3MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXN1aWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJlc3VpZC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKGdldHJlc3VpZCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJsaW1pdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRybGltaXQuUwppbmRleCA1ZTc1YjZiLi5jM2FjZmYzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJsaW1pdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoZ2V0cmxpbWl0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl91Z2V0cmxpbWl0LCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRydXNhZ2UuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKaW5kZXggMmRmZDAwNS4uMGQ3MTVjZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRydXNhZ2UuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJ1c2FnZS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGdldHJ1c2FnZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfZ2V0cnVzYWdlLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c2lkLlMKaW5kZXggMWY2MDMwOS4uZTE0MmMwNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNpZC5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShnZXRzaWQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfZ2V0c2lkLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2NrbmFtZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCmluZGV4IDVjMjJiZGYuLjYwNTAxOTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c29ja25hbWUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoZ2V0c29ja25hbWUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAkNiwgJWVieAogICAgIG1vdiAgICAgJWVzcCwgJWVjeAogICAgIGFkZGwgICAgJDEyLCAlZWN4CkBAIC0xNyw5ICsxOCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tvcHQuUwppbmRleCA5YzAyZDIzLi5hZWM0MGNmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tvcHQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tvcHQuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShnZXRzb2Nrb3B0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgJDE1LCAlZWJ4CiAgICAgbW92ICAgICAlZXNwLCAlZWN4CiAgICAgYWRkbCAgICAkMTIsICVlY3gKQEAgLTE3LDkgKzE4LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHRpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR0aWQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYyNjRiMS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHRpZC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShnZXR0aWQpCi0gICAgbW92bCAgICAkX19OUl9nZXR0aWQsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0xOgotICAgIHJldAotRU5EKGdldHRpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCmluZGV4IDEwYzVkZTkuLmE1MDhjMTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShnZXR0aW1lb2ZkYXkpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2dldHRpbWVvZmRheSwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dWlkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHVpZC5TCmluZGV4IGU5MTMwNWEuLmNjNjI4ODQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dWlkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR1aWQuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcmV0CiBFTkQoZ2V0dWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR4YXR0ci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR4YXR0ci5TCmluZGV4IGY0OTFhMGMuLmEyY2YxMzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHhhdHRyLlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkoZ2V0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbml0X21vZHVsZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbml0X21vZHVsZS5TCmluZGV4IDFhMTU5ZDMuLjFkMGYxMTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoaW5pdF9tb2R1bGUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCmluZGV4IDQyNDY5OGQuLjhjYWRjNmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoaW5vdGlmeV9hZGRfd2F0Y2gpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwppbmRleCAxYjQzN2M2Li4yMzY3MWUwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoaW5vdGlmeV9pbml0MSkKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9pbm90aWZ5X2luaXQxLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwppbmRleCAxOGVjM2NhLi5jMjQ2YzAwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShpbm90aWZ5X3JtX3dhdGNoKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9pbm90aWZ5X3JtX3dhdGNoLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pb3ByaW9fZ2V0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lvcHJpb19nZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRmYzc2Ny4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lvcHJpb19nZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoaW9wcmlvX2dldCkKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKLSAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4Ci0gICAgbW92bCAgICAkX19OUl9pb3ByaW9fZ2V0LCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChpb3ByaW9fZ2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pb3ByaW9fc2V0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lvcHJpb19zZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlZmFjYi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lvcHJpb19zZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoaW9wcmlvX3NldCkKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgbW92ICAgICAxNiglZXNwKSwgJWVieAotICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKLSAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4Ci0gICAgbW92bCAgICAkX19OUl9pb3ByaW9fc2V0LCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlZHgKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChpb3ByaW9fc2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9raWxsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tpbGwuUwppbmRleCA0OTkxNThiLi5lZGM5Y2RlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tpbGwuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tpbGwuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShraWxsKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9raWxsLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9rbG9nY3RsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tsb2djdGwuUwppbmRleCBmNDIyYWM4Li41ZGU5YTMxZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9rbG9nY3RsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9rbG9nY3RsLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoa2xvZ2N0bCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xnZXR4YXR0ci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sZ2V0eGF0dHIuUwppbmRleCBkZWY3YzY2Li41NTY5N2EwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xnZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGdldHhhdHRyLlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkobGdldHhhdHRyKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlua2F0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpbmthdC5TCmluZGV4IGZmYjFiNWQuLjhiMjY0NmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlua2F0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saW5rYXQuUwpAQCAtNCwxNiArNCwyMCBAQAogCiBFTlRSWShsaW5rYXQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyMAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CkBAIC0yNSw5ICsyOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkaQogICAgIHBvcGwgICAgJWVzaQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saXN0ZW4uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlzdGVuLlMKaW5kZXggN2U0ZDJmMy4uOGFlNDE4NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saXN0ZW4uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpc3Rlbi5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKGxpc3RlbikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgICQ0LCAlZWJ4CiAgICAgbW92ICAgICAlZXNwLCAlZWN4CiAgICAgYWRkbCAgICAkMTIsICVlY3gKQEAgLTE3LDkgKzE4LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpc3R4YXR0ci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saXN0eGF0dHIuUwppbmRleCA1Yjk0YTcyLi5hNzNkYzFhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlzdHhhdHRyLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkobGlzdHhhdHRyKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGxpc3R4YXR0ci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sbGlzdHhhdHRyLlMKaW5kZXggMWM2NDU5MS4uNjNkNDQ4OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sbGlzdHhhdHRyLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkobGxpc3R4YXR0cikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwppbmRleCBkNjdiMjIxLi40MmM3ZTBmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkobHJlbW92ZXhhdHRyKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9scmVtb3ZleGF0dHIsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzZWVrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzZWVrLlMKaW5kZXggNWE1OGI4MS4uYmZlOWU2MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sc2Vlay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNlZWsuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShsc2VlaykKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzZXR4YXR0ci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sc2V0eGF0dHIuUwppbmRleCBmMmRiYTM5Li5mMzZmYzZhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNldHhhdHRyLlMKQEAgLTQsMTYgKzQsMjAgQEAKIAogRU5UUlkobHNldHhhdHRyKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIHB1c2hsICAgJWVkaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMjAKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgotICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDE2CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCisgICAgcHVzaGwgICAlZWRpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVkeApAQCAtMjUsOSArMjksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZGkKICAgICBwb3BsICAgICVlc2kKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWFkdmlzZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tYWR2aXNlLlMKaW5kZXggZWRkMzdiNS4uYjY5ZjVkNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tYWR2aXNlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tYWR2aXNlLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkobWFkdmlzZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21pbmNvcmUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWluY29yZS5TCmluZGV4IDQ0ZWEzNjQuLjZkMWRmNjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWluY29yZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWluY29yZS5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKG1pbmNvcmUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta2RpcmF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyYXQuUwppbmRleCBkODBlM2ZiLi41YjZhZTE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyYXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyYXQuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShta2RpcmF0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtub2RhdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta25vZGF0LlMKaW5kZXggMjA1NjBkZi4uYjE5ZDk3MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta25vZGF0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta25vZGF0LlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkobWtub2RhdCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21sb2NrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21sb2NrLlMKaW5kZXggNzhjZmE1OC4uNTE3ZTVhNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tbG9jay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2suUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShtbG9jaykKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfbWxvY2ssICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21sb2NrYWxsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21sb2NrYWxsLlMKaW5kZXggNGU3OGZlZi4uNzU2Y2ExNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tbG9ja2FsbC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2thbGwuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkobWxvY2thbGwpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfbWxvY2thbGwsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21vdW50LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21vdW50LlMKaW5kZXggY2MxYTUxOC4uMDUzNzUyOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tb3VudC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbW91bnQuUwpAQCAtNCwxNiArNCwyMCBAQAogCiBFTlRSWShtb3VudCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICBwdXNobCAgICVlZGkKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDIwCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAxNgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKQEAgLTI1LDkgKzI5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWRpCiAgICAgcG9wbCAgICAlZXNpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21wcm90ZWN0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21wcm90ZWN0LlMKaW5kZXggOWMzMGFmNC4uMWJhMTg2YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tcHJvdGVjdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXByb3RlY3QuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShtcHJvdGVjdCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21yZW1hcC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tcmVtYXAuUwppbmRleCAxNDM5ZWY1Li44NjllZjVkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21yZW1hcC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXJlbWFwLlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkobXJlbWFwKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXN5bmMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXN5bmMuUwppbmRleCBkMzMwOTY3Li44MWJkNTk4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21zeW5jLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tc3luYy5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKG1zeW5jKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubG9jay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrLlMKaW5kZXggY2U2MTk3ZC4uNjdjYTNmZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkobXVubG9jaykKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfbXVubG9jaywgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubG9ja2FsbC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrYWxsLlMKaW5kZXggMjM4ZjgxMi4uYmYwYmZhMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrYWxsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrYWxsLlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHJldAogRU5EKG11bmxvY2thbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bm1hcC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5tYXAuUwppbmRleCBiZTdlZWM2Li4yNzJjYjUyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bm1hcC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubWFwLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkobXVubWFwKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9tdW5tYXAsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9uYW5vc2xlZXAuUwppbmRleCA5ZmFhMDZiLi41YzQ2YTRhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbmFub3NsZWVwLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkobmFub3NsZWVwKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9uYW5vc2xlZXAsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiZTFmMC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShwZXJmX2V2ZW50X29wZW4pCi0gICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyMAotICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKLSAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4Ci0gICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAotICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKLSAgICBtb3YgICAgIDM2KCVlc3ApLCAlZXNpCi0gICAgbW92ICAgICA0MCglZXNwKSwgJWVkaQotICAgIG1vdmwgICAgJF9fTlJfcGVyZl9ldmVudF9vcGVuLCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlZGkKLSAgICBwb3BsICAgICVlc2kKLSAgICBwb3BsICAgICVlZHgKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORChwZXJmX2V2ZW50X29wZW4pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKaW5kZXggODExNmUyZC4uZDYwY2VkMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wZXJzb25hbGl0eS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGVyc29uYWxpdHkuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkocGVyc29uYWxpdHkpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfcGVyc29uYWxpdHksICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BpcGUyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BpcGUyLlMKaW5kZXggYzJlMTFhMi4uZWU0OWZmOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9waXBlMi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGlwZTIuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShwaXBlMikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfcGlwZTIsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3ByY3RsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3ByY3RsLlMKaW5kZXggMWE1ZGFjYS4uNDk2NTkxZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmN0bC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJjdGwuUwpAQCAtNCwxNiArNCwyMCBAQAogCiBFTlRSWShwcmN0bCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICBwdXNobCAgICVlZGkKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDIwCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAxNgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKQEAgLTI1LDkgKzI5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWRpCiAgICAgcG9wbCAgICAlZXNpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3ByZWFkNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJlYWQ2NC5TCmluZGV4IDMyYTc2YzUuLjQyZTU0ZWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJlYWQ2NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJlYWQ2NC5TCkBAIC00LDE2ICs0LDIwIEBACiAKIEVOVFJZKHByZWFkNjQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyMAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CkBAIC0yNSw5ICsyOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkaQogICAgIHBvcGwgICAgJWVzaQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmxpbWl0NjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJsaW1pdDY0LlMKaW5kZXggMjI1NjQyNS4uMDdiNTU4NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmxpbWl0NjQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BybGltaXQ2NC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKHBybGltaXQ2NCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3B3cml0ZTY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3B3cml0ZTY0LlMKaW5kZXggYjAwMzQzNS4uZDVjOWIzMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wd3JpdGU2NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHdyaXRlNjQuUwpAQCAtNCwxNiArNCwyMCBAQAogCiBFTlRSWShwd3JpdGU2NCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICBwdXNobCAgICVlZGkKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDIwCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAxNgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIHB1c2hsICAgJWVkaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZGksIDAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKQEAgLTI1LDkgKzI5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWRpCiAgICAgcG9wbCAgICAlZXNpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZC5TCmluZGV4IGFkMWMxOWEuLmMxMGE4M2IgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKHJlYWQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkYWhlYWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZGFoZWFkLlMKaW5kZXggYTRkNjM0Zi4uMWMwY2NmYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkYWhlYWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWRhaGVhZC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKHJlYWRhaGVhZCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWRsaW5rYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZGxpbmthdC5TCmluZGV4IDM3ZGY4ZDguLjRhMjRjMmMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZGxpbmthdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZGxpbmthdC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKHJlYWRsaW5rYXQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkdi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkdi5TCmluZGV4IDA1NDQ1YzAuLmMxOGMxYjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZHYuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWR2LlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkocmVhZHYpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2ZnJvbS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2ZnJvbS5TCmluZGV4IGRmNDg5YzguLjg4YzlkMGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdmZyb20uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlY3Zmcm9tLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkocmVjdmZyb20pCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAkMTIsICVlYngKICAgICBtb3YgICAgICVlc3AsICVlY3gKICAgICBhZGRsICAgICQxMiwgJWVjeApAQCAtMTcsOSArMTgsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdm1tc2cuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdm1tc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTQwNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2bW1zZy5TCkBAIC0wLDAgKzEsMjcgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkocmVjdm1tc2cpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBtb3YgICAgICQxOSwgJWVieAorICAgIG1vdiAgICAgJWVzcCwgJWVjeAorICAgIGFkZGwgICAgJDEyLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQocmVjdm1tc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlY3Ztc2cuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdm1zZy5TCmluZGV4IGE1ODdiMDAuLjZjZmNkNjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdm1zZy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdm1zZy5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHJlY3Ztc2cpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAkMTcsICVlYngKICAgICBtb3YgICAgICVlc3AsICVlY3gKICAgICBhZGRsICAgICQxMiwgJWVjeApAQCAtMTcsOSArMTgsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwppbmRleCA5OTE5MmYwLi5iMDY3YTlmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHJlbW92ZXhhdHRyKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9yZW1vdmV4YXR0ciwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lYXQuUwppbmRleCA4MzFiMjRjLi5iYjIxODFlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlbmFtZWF0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW5hbWVhdC5TCkBAIC00LDE0ICs0LDE3IEBACiAKIEVOVFJZKHJlbmFtZWF0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKaW5kZXggMGI3YzI2OS4uYmU2NmNmYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKHNjaGVkX2dldF9wcmlvcml0eV9tYXgpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKaW5kZXggY2UyOGY4Yy4uOGRkZTY3YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKHNjaGVkX2dldF9wcmlvcml0eV9taW4pCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwppbmRleCAyYzNiN2I5Li5kMDU1MWVmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNjaGVkX2dldHBhcmFtKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zY2hlZF9nZXRwYXJhbSwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCmluZGV4IDZhMzg0MmEuLjViN2M4MTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoc2NoZWRfZ2V0c2NoZWR1bGVyKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3NjaGVkX2dldHNjaGVkdWxlciwgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCmluZGV4IGMxMDU1ZGEuLjA3M2YzYzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwppbmRleCBiZDNkMGFiLi43OWVjMTEzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKHNjaGVkX3NldGFmZmluaXR5KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwppbmRleCAyMzI5MjY4Li45NzA3NDdkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNjaGVkX3NldHBhcmFtKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zY2hlZF9zZXRwYXJhbSwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCmluZGV4IGEzY2U4YWIuLmRhNTBhYWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWShzY2hlZF9zZXRzY2hlZHVsZXIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxMgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CkBAIC0xOSw5ICsyMSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkeAogICAgIHBvcGwgICAgJWVjeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF95aWVsZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF95aWVsZC5TCmluZGV4IGZiNTYzYzQuLmUzODc4ZTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfeWllbGQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKQEAgLTQsNyArNCw3IEBACiAKIEVOVFJZKHNjaGVkX3lpZWxkKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3NjaGVkX3lpZWxkLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kZmlsZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kZmlsZS5TCmluZGV4IDI4MGE0YWUuLmM1ZjlhMmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZGZpbGUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlLlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkoc2VuZGZpbGUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAxNgorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CkBAIC0yMiw5ICsyNSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVzaQogICAgIHBvcGwgICAgJWVkeApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kZmlsZTY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlNjQuUwppbmRleCAzODNjOGM2Li5iYzVkMGRkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlNjQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlNjQuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWShzZW5kZmlsZTY0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1tc2cuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1tc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODRjNmI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kbW1zZy5TCkBAIC0wLDAgKzEsMjcgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2VuZG1tc2cpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBtb3YgICAgICQyMCwgJWVieAorICAgIG1vdiAgICAgJWVzcCwgJWVjeAorICAgIGFkZGwgICAgJDEyLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoc2VuZG1tc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRtc2cuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1zZy5TCmluZGV4IDcwYmFkMjkuLmJmMGQxZmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1zZy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1zZy5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNlbmRtc2cpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAkMTYsICVlYngKICAgICBtb3YgICAgICVlc3AsICVlY3gKICAgICBhZGRsICAgICQxMiwgJWVjeApAQCAtMTcsOSArMTgsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZHRvLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmR0by5TCmluZGV4IGRiZTUyMGQuLmIzOWVhZjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZHRvLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kdG8uUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShzZW5kdG8pCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAkMTEsICVlYngKICAgICBtb3YgICAgICVlc3AsICVlY3gKICAgICBhZGRsICAgICQxMiwgJWVjeApAQCAtMTcsOSArMTgsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0ZnNnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0ZnNnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzgxZjcyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRmc2dpZC5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2V0ZnNnaWQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfc2V0ZnNnaWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChzZXRmc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0ZnN1aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0ZnN1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGY3ODUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRmc3VpZC5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2V0ZnN1aWQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfc2V0ZnN1aWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisgICAgYWRkbCAgICAkNCwgJWVzcAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChzZXRmc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGdpZC5TCmluZGV4IDY5YWMxNWIuLmNlNmVlMjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRnaWQuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoc2V0Z2lkKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3NldGdpZDMyLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRncm91cHMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKaW5kZXggZjcwNGM0Ni4uN2U0NmFkMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRncm91cHMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGdyb3Vwcy5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNldGdyb3VwcykKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc2V0Z3JvdXBzMzIsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGl0aW1lci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRpdGltZXIuUwppbmRleCAxNTczODE2Li4zNzBhYjVlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGl0aW1lci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0aXRpbWVyLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoc2V0aXRpbWVyKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0bnMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0bnMuUwppbmRleCAyYzM5YTIxLi43MzZkZjU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldG5zLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRucy5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNldG5zKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zZXRucywgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cGdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwZ2lkLlMKaW5kZXggYWU2OTYzMy4uMGJmZjEwYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwZ2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwZ2lkLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2V0cGdpZCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc2V0cGdpZCwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwppbmRleCBiNThjZDEzLi40MjMzODcxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwcmlvcml0eS5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKHNldHByaW9yaXR5KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVnaWQuUwppbmRleCA1NjFhNjU4Li5hNTZjY2ZkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlZ2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZWdpZC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNldHJlZ2lkKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zZXRyZWdpZDMyLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKaW5kZXggYTIxMDk3NS4uMjI5OTgzMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXNnaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc2dpZC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKHNldHJlc2dpZCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc3VpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXN1aWQuUwppbmRleCA5MjBlNjhiLi44NjI0ZTE1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc3VpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVzdWlkLlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkoc2V0cmVzdWlkKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmV1aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmV1aWQuUwppbmRleCA3ZjkxMWFkLi45ZjZlMTE3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJldWlkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXVpZC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNldHJldWlkKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zZXRyZXVpZDMyLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRybGltaXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmxpbWl0LlMKaW5kZXggZTEwM2VjZi4uMjAyNDY4OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRybGltaXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJsaW1pdC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNldHJsaW1pdCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc2V0cmxpbWl0LCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0c2lkLlMKaW5kZXggMzgyYWQwYy4uZGRhNmFkOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNpZC5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICByZXQKIEVORChzZXRzaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0c29ja29wdC5TCmluZGV4IGY1NmY4MTIuLjI5ZTczYmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0c29ja29wdC5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNldHNvY2tvcHQpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAkMTQsICVlYngKICAgICBtb3YgICAgICVlc3AsICVlY3gKICAgICBhZGRsICAgICQxMiwgJWVjeApAQCAtMTcsOSArMTgsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCmluZGV4IDFhZTRkNTguLjRhODYxYWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShzZXR0aW1lb2ZkYXkpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NldHRpbWVvZmRheSwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0dWlkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHVpZC5TCmluZGV4IDY1NDlmZDQuLjA0OGUwYzEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0dWlkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR1aWQuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoc2V0dWlkKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3NldHVpZDMyLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR4YXR0ci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR4YXR0ci5TCmluZGV4IGZhZTA0ZGYuLjFlODdiZjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHhhdHRyLlMKQEAgLTQsMTYgKzQsMjAgQEAKIAogRU5UUlkoc2V0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgcHVzaGwgICAlZWRpCi0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCAyMAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgOAotICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDEyCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVkaSwgMTYKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CkBAIC0yNSw5ICsyOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVkaQogICAgIHBvcGwgICAgJWVzaQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaHV0ZG93bi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaHV0ZG93bi5TCmluZGV4IDEzZThmZDkuLmYyMjRmYzYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2h1dGRvd24uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NodXRkb3duLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkoc2h1dGRvd24pCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAkMTMsICVlYngKICAgICBtb3YgICAgICVlc3AsICVlY3gKICAgICBhZGRsICAgICQxMiwgJWVjeApAQCAtMTcsOSArMTgsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnYWx0c3RhY2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnYWx0c3RhY2suUwppbmRleCA3MWZkYjEyLi44NzVlZjhjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdhbHRzdGFjay5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHNpZ2FsdHN0YWNrKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zaWdhbHRzdGFjaywgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnbmFsZmQ0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ25hbGZkNC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmU2YzY4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnbmFsZmQ0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHNpZ25hbGZkNCkKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKLSAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4Ci0gICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAotICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKLSAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCi0gICAgbW92bCAgICAkX19OUl9zaWduYWxmZDQsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0xOgotICAgIHBvcGwgICAgJWVzaQotICAgIHBvcGwgICAgJWVkeAotICAgIHBvcGwgICAgJWVjeAotICAgIHBvcGwgICAgJWVieAotICAgIHJldAotRU5EKHNpZ25hbGZkNCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc29ja2V0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NvY2tldC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODI2ODFlLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc29ja2V0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHNvY2tldCkKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIG1vdiAgICAgJDEsICVlYngKLSAgICBtb3YgICAgICVlc3AsICVlY3gKLSAgICBhZGRsICAgICQxMiwgJWVjeAotICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKLTE6Ci0gICAgcG9wbCAgICAlZWN4Ci0gICAgcG9wbCAgICAlZWJ4Ci0gICAgcmV0Ci1FTkQoc29ja2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zb2NrZXRwYWlyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NvY2tldHBhaXIuUwppbmRleCAzNjgxYzRmLi40YzUxNTRlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NvY2tldHBhaXIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NvY2tldHBhaXIuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWShzb2NrZXRwYWlyKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgJDgsICVlYngKICAgICBtb3YgICAgICVlc3AsICVlY3gKICAgICBhZGRsICAgICQxMiwgJWVjeApAQCAtMTcsOSArMTgsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3BsaWNlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NwbGljZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzkwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NwbGljZS5TCkBAIC0wLDAgKzEsNDYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc3BsaWNlKQorICAgIHB1c2hsICAgJWVieAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAorICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKKyAgICBwdXNobCAgICVlZGkKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWRpLCAwCisgICAgcHVzaGwgICAlZWJwCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVicCwgMAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAzNiglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgNDAoJWVzcCksICVlc2kKKyAgICBtb3YgICAgIDQ0KCVlc3ApLCAlZWRpCisgICAgbW92ICAgICA0OCglZXNwKSwgJWVicAorICAgIG1vdmwgICAgJF9fTlJfc3BsaWNlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZWJwCisgICAgcG9wbCAgICAlZWRpCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoc3BsaWNlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zd2Fwb2ZmLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N3YXBvZmYuUwppbmRleCAzMWY4YmUxLi4wNzg4NTI5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N3YXBvZmYuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N3YXBvZmYuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkoc3dhcG9mZikKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9zd2Fwb2ZmLCAlZWF4CkBAIC0xMyw5ICsxMyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zd2Fwb24uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3dhcG9uLlMKaW5kZXggNjg3YzQ5Mi4uMTA3MGQ4ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zd2Fwb24uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N3YXBvbi5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHN3YXBvbikKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc3dhcG9uLCAlZWF4CkBAIC0xNiw5ICsxNyw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAotICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAgICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeW1saW5rYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3ltbGlua2F0LlMKaW5kZXggMWYzM2Y3Yi4uZTdmZTY5ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeW1saW5rYXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bWxpbmthdC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKHN5bWxpbmthdCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bmMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3luYy5TCmluZGV4IGY4MDI5NmYuLjI1MmM2NjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3luYy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3luYy5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShzeW5jKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3N5bmMsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5c2luZm8uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3lzaW5mby5TCmluZGV4IDhiOWEyM2UuLmY1OWEwYzMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3lzaW5mby5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3lzaW5mby5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWShzeXNpbmZvKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3N5c2luZm8sICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RlZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90ZWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdjNDYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90ZWUuUwpAQCAtMCwwICsxLDM2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHRlZSkKKyAgICBwdXNobCAgICVlYngKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKKyAgICBwdXNobCAgICVlc2kKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAwCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfdGVlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQodGVlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90Z2tpbGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGdraWxsLlMKaW5kZXggZTU3NjQ1Yy4uN2E0M2EwMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90Z2tpbGwuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3Rna2lsbC5TCkBAIC00LDEyICs0LDE0IEBACiAKIEVOVFJZKHRna2lsbCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKaW5kZXggMzNiMjk4MC4uYWQwOTlhNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwpAQCAtNCwxMCArNCwxMSBAQAogCiBFTlRSWSh0aW1lcmZkX2NyZWF0ZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfdGltZXJmZF9jcmVhdGUsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwppbmRleCA2NmIwMDRiLi5jNjc5YjdjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKQEAgLTQsMTAgKzQsMTEgQEAKIAogRU5UUlkodGltZXJmZF9nZXR0aW1lKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl90aW1lcmZkX2dldHRpbWUsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUwppbmRleCAzZjQwMzVlLi40ZTg4OWVhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkodGltZXJmZF9zZXR0aW1lKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXMuUwppbmRleCBiOWUyODQ1Li4wYmEwYjZmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVzLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcy5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWSh0aW1lcykKICAgICBwdXNobCAgICVlYngKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl90aW1lcywgJWVheApAQCAtMTMsOSArMTMsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGtpbGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGtpbGwuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhkYTM2OS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RraWxsLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHRraWxsKQotICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAotICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0Ci0gICAgbW92ICAgICAxMiglZXNwKSwgJWVieAotICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKLSAgICBtb3ZsICAgICRfX05SX3RraWxsLCAlZWF4Ci0gICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAotMToKLSAgICBwb3BsICAgICVlY3gKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLUVORCh0a2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdHJ1bmNhdGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdHJ1bmNhdGUuUwppbmRleCAwMTk4OTRjLi4zMWZlYzE3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RydW5jYXRlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZS5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHRydW5jYXRlKQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAogICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl90cnVuY2F0ZSwgJWVheApAQCAtMTYsOSArMTcsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdHJ1bmNhdGU2NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZTY0LlMKaW5kZXggOTliNzFiMC4uNDVlMjRkMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZTY0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZTY0LlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkodHJ1bmNhdGU2NCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VtYXNrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VtYXNrLlMKaW5kZXggNDg1YjMyNi4uOWI0ZDNjNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bWFzay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1hc2suUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkodW1hc2spCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfdW1hc2ssICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3Vtb3VudDIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1vdW50Mi5TCmluZGV4IDEwMGQzOGMuLjEzNzU3YWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1vdW50Mi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1vdW50Mi5TCkBAIC00LDEwICs0LDExIEBACiAKIEVOVFJZKHVtb3VudDIpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4CiAgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3Vtb3VudDIsICVlYXgKQEAgLTE2LDkgKzE3LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VuYW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VuYW1lLlMKaW5kZXggZjFiYTNiOS4uZGFiN2UwZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmFtZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5hbWUuUwpAQCAtNCw3ICs0LDcgQEAKIAogRU5UUlkodW5hbWUpCiAgICAgcHVzaGwgICAlZWJ4Ci0gICAgLmNmaV9kZWZfY2ZhX29mZnNldCA0CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfdW5hbWUsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGlua2F0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGlua2F0LlMKaW5kZXggMWE1NzNkNC4uNmZhZjcxZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmxpbmthdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5saW5rYXQuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWSh1bmxpbmthdCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3Vuc2hhcmUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5zaGFyZS5TCmluZGV4IDk1ZmRiZjYuLmI3MjQ3OTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5zaGFyZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5zaGFyZS5TCkBAIC00LDcgKzQsNyBAQAogCiBFTlRSWSh1bnNoYXJlKQogICAgIHB1c2hsICAgJWVieAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgNAorICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOAogICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDAKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3Vuc2hhcmUsICVlYXgKQEAgLTEzLDkgKzEzLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3V0aW1lbnNhdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91dGltZW5zYXQuUwppbmRleCAwOTlmNTUxLi4wN2VjYTQ1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3V0aW1lbnNhdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdXRpbWVuc2F0LlMKQEAgLTQsMTQgKzQsMTcgQEAKIAogRU5UUlkodXRpbWVuc2F0KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIHB1c2hsICAgJWVzaQotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTYKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZXNpLCAxMgorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAogICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeApAQCAtMjIsOSArMjUsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlc2kKICAgICBwb3BsICAgICVlZHgKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdm1zcGxpY2UuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdm1zcGxpY2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTJjYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy92bXNwbGljZS5TCkBAIC0wLDAgKzEsMzYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodm1zcGxpY2UpCisgICAgcHVzaGwgICAlZWJ4CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAorICAgIHB1c2hsICAgJWVjeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDAKKyAgICBwdXNobCAgICVlZHgKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCAwCisgICAgcHVzaGwgICAlZXNpCisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX3Ztc3BsaWNlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgIGFkZGwgICAgJDQsICVlc3AKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQodm1zcGxpY2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dhaXQ0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dhaXQ0LlMKaW5kZXggYjYxOTZmOC4uYmVkN2M0MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93YWl0NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd2FpdDQuUwpAQCAtNCwxNCArNCwxNyBAQAogCiBFTlRSWSh3YWl0NCkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICBwdXNobCAgICVlc2kKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4Ci0gICAgLmNmaV9yZWxfb2Zmc2V0IGVzaSwgMTIKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAorICAgIHB1c2hsICAgJWVzaQorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlc2ksIDAKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKQEAgLTIyLDkgKzI1LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZXNpCiAgICAgcG9wbCAgICAlZWR4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRlLlMKaW5kZXggOTcxY2IzMC4uZTE0NzIwOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93cml0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGUuUwpAQCAtNCwxMiArNCwxNCBAQAogCiBFTlRSWSh3cml0ZSkKICAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlY3gKLSAgICBwdXNobCAgICVlZHgKLSAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisgICAgLmNmaV9kZWZfY2ZhX29mZnNldCA4CiAgICAgLmNmaV9yZWxfb2Zmc2V0IGVieCwgMAotICAgIC5jZmlfcmVsX29mZnNldCBlY3gsIDQKLSAgICAuY2ZpX3JlbF9vZmZzZXQgZWR4LCA4CisgICAgcHVzaGwgICAlZWN4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMAorICAgIHB1c2hsICAgJWVkeAorICAgIC5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgNAorICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDAKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKQEAgLTE5LDkgKzIxLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4Ci0gICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKICAgICBhZGRsICAgICQ0LCAlZXNwCi0gICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcG9wbCAgICAlZWR4CiAgICAgcG9wbCAgICAlZWN4CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRldi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93cml0ZXYuUwppbmRleCBhYjhlNzA1Li4wN2JhN2I1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRldi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGV2LlMKQEAgLTQsMTIgKzQsMTQgQEAKIAogRU5UUlkod3JpdGV2KQogICAgIHB1c2hsICAgJWVieAotICAgIHB1c2hsICAgJWVjeAotICAgIHB1c2hsICAgJWVkeAotICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKyAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDgKICAgICAuY2ZpX3JlbF9vZmZzZXQgZWJ4LCAwCi0gICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgNAotICAgIC5jZmlfcmVsX29mZnNldCBlZHgsIDgKKyAgICBwdXNobCAgICVlY3gKKyAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDQKKyAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCAwCisgICAgcHVzaGwgICAlZWR4CisgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0CisgICAgLmNmaV9yZWxfb2Zmc2V0IGVkeCwgMAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKICAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeApAQCAtMTksOSArMjEsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICVlc3AKLSAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICBwb3BsICAgICVlZHgKICAgICBwb3BsICAgICVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYveDg2Lm1rIGIvbGliYy9hcmNoLXg4Ni94ODYubWsKaW5kZXggOWM3NDA4NC4uMmEwNjA5ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni94ODYubWsKKysrIGIvbGliYy9hcmNoLXg4Ni94ODYubWsKQEAgLTEsOCArMSwzMSBAQAotX0xJQkNfQVJDSF9DT01NT05fU1JDX0ZJTEVTIDo9IFwKKyMgeDg2IHNwZWNpZmljIGNvbmZpZ3MKKworIyBUaGVzZSBhcmUgc2hhcmVkIGJ5IGFsbCB0aGUgMzItYml0IHRhcmdldHMsIGJ1dCBub3QgdGhlIDY0LWJpdCBvbmVzLgorbGliY19jb21tb25fc3JjX2ZpbGVzX3g4NiA6PSBcCisgICAgYmlvbmljL2xlZ2FjeV8zMl9iaXRfc3VwcG9ydC5jcHAgXAorICAgIGJpb25pYy9uZGtfY3J1ZnQuY3BwIFwKKyAgICBiaW9uaWMvdGltZTY0LmMgXAorICAgIHVwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0dy5jIFwKKworIyBGb3J0aWZ5IGltcGxlbWVudGF0aW9ucyBvZiBsaWJjIGZ1bmN0aW9ucy4KK2xpYmNfY29tbW9uX3NyY19maWxlc194ODYgKz0gXAorICAgIGJpb25pYy9fX21lbWNweV9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19tZW1zZXRfY2hrLmNwcCBcCisgICAgYmlvbmljL19fc3RyY3B5X2Noay5jcHAgXAorICAgIGJpb25pYy9fX3N0cmNhdF9jaGsuY3BwIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtbW92ZS5jIFwKKworCisjIFRoZXNlIGFyZSBzaGFyZWQgYnkgYWxsIHRoZSAzMi1iaXQgdGFyZ2V0cywgYnV0IG5vdCB0aGUgNjQtYml0IG9uZXMuCitsaWJjX2Jpb25pY19zcmNfZmlsZXNfeDg2IDo9IFwKKyAgICBiaW9uaWMvbW1hcC5jcHAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgQ1BVIHNwZWNpZmljIHNvdXJjZSBmaWxlcworbGliY19iaW9uaWNfc3JjX2ZpbGVzX3g4NiArPSBcCiAgICAgYXJjaC14ODYvYmlvbmljL19fYmlvbmljX2Nsb25lLlMgXAogICAgIGFyY2gteDg2L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMgXAotICAgIGFyY2gteDg2L2Jpb25pYy9mdXRleF94ODYuUyBcCi0gICAgYXJjaC14ODYvYmlvbmljL19fZ2V0X3NwLlMgXAorICAgIGFyY2gteDg2L2Jpb25pYy9saWJnY2NfY29tcGF0LmMgXAogICAgIGFyY2gteDg2L2Jpb25pYy9fc2V0am1wLlMgXAogICAgIGFyY2gteDg2L2Jpb25pYy9zZXRqbXAuUyBcCiAgICAgYXJjaC14ODYvYmlvbmljL19fc2V0X3Rscy5jIFwKQEAgLTEwLDYwICszMywzMCBAQAogICAgIGFyY2gteDg2L2Jpb25pYy9zeXNjYWxsLlMgXAogICAgIGFyY2gteDg2L2Jpb25pYy92Zm9yay5TIFwKIAotaWZlcSAoJChBUkNIX1g4Nl9IQVZFX1NTU0UzKSx0cnVlKQotX0xJQkNfQVJDSF9DT01NT05fU1JDX0ZJTEVTICs9IFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY3B5LWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbW1vdmUtYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtYmNvcHktYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybmNhdC1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY3B5LWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmxjYXQtYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybGNweS1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjbXAtYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybmNtcC1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjYXQtYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RyY3B5LWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNtcC1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc3NlMy13bWVtY21wLWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNtcDE2LWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXdjc2NhdC1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc3NlMy13Y3NjcHktYXRvbS5TCi1lbHNlCi1fTElCQ19BUkNIX0NPTU1PTl9TUkNfRklMRVMgKz0gXAotCWFyY2gteDg2L3N0cmluZy9tZW1jcHkuUyBcCi0JYXJjaC14ODYvc3RyaW5nL21lbW1vdmUuUyBcCi0JYXJjaC14ODYvc3RyaW5nL2Jjb3B5LlMgXAotCWFyY2gteDg2L3N0cmluZy9zdHJjbXAuUyBcCi0JYXJjaC14ODYvc3RyaW5nL3N0cm5jbXAuUyBcCi0JYXJjaC14ODYvc3RyaW5nL3N0cmNhdC5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvbWVtY21wLlMgXAotCXN0cmluZy9tZW1jbXAxNi5jIFwKLQlzdHJpbmcvc3RyY3B5LmMgXAotCXN0cmluZy9zdHJuY2F0LmMgXAotCXN0cmluZy9zdHJuY3B5LmMgXAotCXN0cmluZy9zdHJsY2F0LmMgXAotCXN0cmluZy9zdHJsY3B5LmMgXAotCXVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NweS5jIFwKLQl1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjYXQuYyBcCi0JdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbWNtcC5jCisjIyBBUkNIIHZhcmlhbnQgc3BlY2lmaWMgc291cmNlIGZpbGVzCithcmNoX3ZhcmlhbnRfbWsgOj0gJChMT0NBTF9QQVRIKS9hcmNoLXg4Ni8kKFRBUkdFVF9BUkNIX1ZBUklBTlQpLyQoVEFSR0VUX0FSQ0hfVkFSSUFOVCkubWsKK2lmZXEgKCQod2lsZGNhcmQgJChhcmNoX3ZhcmlhbnRfbWspKSwpCisgICAgYXJjaF92YXJpYW50X21rIDo9ICQoTE9DQUxfUEFUSCkvYXJjaC14ODYvZ2VuZXJpYy9nZW5lcmljLm1rCiBlbmRpZgoraW5jbHVkZSAkKGFyY2hfdmFyaWFudF9taykKK2xpYmNfY29tbW9uX2FkZGl0aW9uYWxfZGVwZW5kZW5jaWVzICs9ICQoYXJjaF92YXJpYW50X21rKQogCi1fTElCQ19BUkNIX0NPTU1PTl9TUkNfRklMRVMgKz0gXAotCWFyY2gteDg2L3N0cmluZy9zc2UyLW1lbXNldC1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc2UyLWJ6ZXJvLWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtY2hyLWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtcmNoci1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc2UyLXN0cmNoci1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc2UyLXN0cnJjaHItYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NlMi1pbmRleC1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc2UyLXN0cmxlbi1hdG9tLlMgXAotCWFyY2gteDg2L3N0cmluZy9zc2UyLXN0cm5sZW4tYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NjaHItYXRvbS5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NyY2hyLWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzbGVuLWF0b20uUyBcCi0JYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzY21wLWF0b20uUyBcCitsaWJjX25ldGJzZF9zcmNfZmlsZXNfeDg2IDo9IFwKKyAgICB1cHN0cmVhbS1uZXRic2QvY29tbW9uL2xpYi9saWJjL2hhc2gvc2hhMS9zaGExLmMgXAogCi1fTElCQ19BUkNIX1NUQVRJQ19TUkNfRklMRVMgOj0gXAotICAgIGJpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmMgXAorYXJjaF92YXJpYW50X21rIDo9CiAKLV9MSUJDX0FSQ0hfRFlOQU1JQ19TUkNfRklMRVMgOj0KK2xpYmNfY3J0X3RhcmdldF9jZmxhZ3NfeDg2IDo9IFwKKyAgICAtbTMyIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvYXJjaC14ODYvaW5jbHVkZQorCitsaWJjX2NydF90YXJnZXRfbGRmbGFnc194ODYgOj0gLW1lbGZfaTM4NgorCitsaWJjX2NydF90YXJnZXRfY3J0YmVnaW5fZmlsZV94ODYgOj0gXAorICAgICAkKExPQ0FMX1BBVEgpL2FyY2gtY29tbW9uL2Jpb25pYy9jcnRiZWdpbi5jCisKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9zb19maWxlX3g4NiA6PSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLWNvbW1vbi9iaW9uaWMvY3J0YmVnaW5fc28uYworCitsaWJjX2NydF90YXJnZXRfc29fY2ZsYWdzX3g4NiA6PSBcCisgICAgLWZQSUMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TCmluZGV4IDc2OTIwMTMuLjBjNzNlNWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19fYmlvbmljX2Nsb25lLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX19iaW9uaWNfY2xvbmUuUwpAQCAtMjYsMTQgKzI2LDEwIEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIC8vIHBpZF90IF9fYmlvbmljX2Nsb25lKGludCBmbGFncywgdm9pZCogY2hpbGRfc3RhY2ssIHBpZF90KiBwYXJlbnRfdGlkLCB2b2lkKiB0bHMsIHBpZF90KiBjaGlsZF90aWQsIGludCAoKmZuKSh2b2lkKiksIHZvaWQqIGFyZyk7CiBFTlRSWShfX2Jpb25pY19jbG9uZSkKLSAgICAgICAgIyBFbmZvcmNlIDE2LWJ5dGUgYWxpZ25tZW50IGZvciBjaGlsZCBzdGFjay4KLSAgICAgICAgYW5kcSAgICAkfjE1LCAlcnNpCi0KICAgICAgICAgIyBDb3B5ICdmbicgYW5kICdhcmcnIG9udG8gdGhlIGNoaWxkIHN0YWNrLgogICAgICAgICBtb3ZxICAgICVyOSwgLTE2KCVyc2kpICAjIGZuCiAgICAgICAgIG1vdnEgICAgOCglcnNwKSwgJXJheCAgICMgUmVhZCAnYXJnJy4KQEAgLTQ5LDI1ICs0NSwzMyBAQAogICAgICAgICAjIE1ha2UgdGhlIHN5c3RlbSBjYWxsLgogICAgICAgICBtb3ZsICAgICRfX05SX2Nsb25lLCAlZWF4CiAgICAgICAgIHN5c2NhbGwKLSAgICAgICAgdGVzdGwgICAlZWF4LCAlZWF4Ci0gICAgICAgIGpucyAgICAgMWYKKworICAgICAgICAjIENoZWNrIHJlc3VsdC4KKyAgICAgICAgdGVzdHEgICAlcmF4LCAlcmF4CisgICAgICAgIGp6ICAgICAgLkxfYmNfY2hpbGQKKyAgICAgICAgamcgICAgICAuTF9iY19wYXJlbnQKIAogICAgICAgICAjIEFuIGVycm9yIG9jY3VycmVkLCBzZXQgZXJybm8gYW5kIHJldHVybiAtMS4KICAgICAgICAgbmVnbCAgICAlZWF4CiAgICAgICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgICAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0gICAgICAgIGptcCAgICAgMmYKLTE6Ci0gICAgICAgIGpueiAgICAgMmYKKyAgICAgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorICAgICAgICByZXQKIAotICAgICAgICAjIFdlJ3JlIGluIHRoZSBjaGlsZCBub3csIHNvIGNhbGwgX19iaW9uaWNfY2xvbmVfZW50cnkKKy5MX2JjX2NoaWxkOgorICAgICAgICAjIFdlIGRvbid0IHdhbnQgYW55b25lIHRvIHVud2luZCBwYXN0IHRoaXMgcG9pbnQuCisgICAgICAgIC5jZmlfdW5kZWZpbmVkICVyaXAKKyAgICAgICAgLmNmaV91bmRlZmluZWQgJXJicAorCisgICAgICAgICMgV2UncmUgaW4gdGhlIGNoaWxkIG5vdywgc28gY2FsbCBfX3N0YXJ0X3RocmVhZAogICAgICAgICAjIHdpdGggdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBjaGlsZCBzdGFjayBtb3ZlZCBpbnRvCiAgICAgICAgICMgdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdGVycy4KICAgICAgICAgcG9wcSAgICAlcmRpICAjIGZuCiAgICAgICAgIHBvcHEgICAgJXJzaSAgIyBhcmcKLSAgICAgICAgY2FsbCAgICBfX2Jpb25pY19jbG9uZV9lbnRyeQorICAgICAgICBjYWxsICAgIF9fc3RhcnRfdGhyZWFkCiAgICAgICAgIGhsdAotMjoKKworLkxfYmNfcGFyZW50OgorICAgICAgICAjIFdlJ3JlIHRoZSBwYXJlbnQ7IG5vdGhpbmcgdG8gZG8uCiAgICAgICAgIHJldAogRU5EKF9fYmlvbmljX2Nsb25lKQorLmhpZGRlbiBfX2Jpb25pY19jbG9uZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX19nZXRfc3AuUyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19fZ2V0X3NwLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNjkzYjMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX19nZXRfc3AuUworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLUVOVFJZKF9fZ2V0X3NwKQotICBtb3YgICVyc3AsICVyYXgKLSAgcmV0Ci1FTkQoX19nZXRfc3ApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fX3J0X3NpZ3JldHVybi5TIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX19ydF9zaWdyZXR1cm4uUwppbmRleCBlMDNiYjg4Li5lZGRjZWIxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fX3J0X3NpZ3JldHVybi5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19fcnRfc2lncmV0dXJuLlMKQEAgLTI2LDExICsyNiw5IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKLUVOVFJZKF9fcnRfc2lncmV0dXJuKQotICAuaGlkZGVuIF9DX0xBQkVMKF9fcnRfc2lncmV0dXJuKSAvLyBUT0RPOiBhZGQgYW4gRU5UUllfUFJJVkFURSBtYWNybyBmb3IgeDg2XzY0LgorRU5UUllfUFJJVkFURShfX3J0X3NpZ3JldHVybikKICAgbW92bCAkX19OUl9ydF9zaWdyZXR1cm4sICVlYXgKICAgc3lzY2FsbAogRU5EKF9fcnRfc2lncmV0dXJuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX19zZXRfdGxzLmMgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fX3NldF90bHMuYwppbmRleCA5YTY5NDQ5Li4xMGZkMzZmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fX3NldF90bHMuYworKysgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fX3NldF90bHMuYwpAQCAtMjYsMTMgKzI2LDEyIEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8YXNtL3ByY3RsLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKIGV4dGVybiBpbnQgX19hcmNoX3ByY3RsKGludCwgdW5zaWduZWQgbG9uZyk7CiAKLWludCBfX3NldF90bHModm9pZCogcHRyKSB7Ci0gIC8vIFdlIGFsc28gbmVlZCB0byB3cml0ZSB0aGUgbG9jYXRpb24gb2YgdGhlIHRscyB0byBwdHJbMF0uCi0gICoodm9pZCoqKSBwdHIgPSBwdHI7CitfX0xJQkNfSElEREVOX18gaW50IF9fc2V0X3Rscyh2b2lkKiBwdHIpIHsKICAgcmV0dXJuIF9fYXJjaF9wcmN0bChBUkNIX1NFVF9GUywgKHVpbnRwdHJfdCkgcHRyKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwppbmRleCBmN2JjOTYyLi5kMWY1M2FmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAKIC8vIHZvaWQgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bih2b2lkKiBzdGFja0Jhc2UsIHNpemVfdCBzdGFja1NpemUpCi1FTlRSWShfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKQorRU5UUllfUFJJVkFURShfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKQogICBtb3YgJF9fTlJfbXVubWFwLCAlZWF4CiAgIHN5c2NhbGwKICAgLy8gSWYgbXVubWFwIGZhaWxlZCwgd2UgaWdub3JlIHRoZSBmYWlsdXJlIGFuZCBleGl0IGFueXdheS4KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19zZXRqbXAuUyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL19zZXRqbXAuUwppbmRleCBlOWI4ZGJiLi5jNjE3MDMwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9fc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvX3NldGptcC5TCkBAIC0zNiw4ICszNiw3IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9mdXRleF94ODZfNjQuUyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL2Z1dGV4X3g4Nl82NC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODVkNTgzLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL2Z1dGV4X3g4Nl82NC5TCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLSNkZWZpbmUgRlVURVhfV0FJVCAwCi0jZGVmaW5lIEZVVEVYX1dBS0UgMQotCi0vLyBpbnQgX19mdXRleF93YWl0KHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KQotRU5UUlkoX19mdXRleF93YWl0KQotICAgIG1vdiAgICAgJXJkeCwgJXIxMCAgICAgICAgICAgLyogdGltZW91dCAqLwotICAgIG1vdiAgICAgJWVzaSwgJWVkeCAgICAgICAgICAgLyogdmFsICovCi0gICAgbW92ICAgICAkRlVURVhfV0FJVCwgJWVzaSAgICAvKiBvcCAqLwotICAgIG1vdiAgICAgJF9fTlJfZnV0ZXgsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgcmV0Ci1FTkQoX19mdXRleF93YWl0KQotCi0vLyBpbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IGNvdW50KQotRU5UUlkoX19mdXRleF93YWtlKQotICAgIG1vdiAgICAgJWVzaSwgJWVkeAotICAgIG1vdiAgICAgJEZVVEVYX1dBS0UsICVlc2kKLSAgICBtb3YgICAgICRfX05SX2Z1dGV4LCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIHJldAotRU5EKF9fZnV0ZXhfd2FrZSkKLQotLy8gaW50IF9fZnV0ZXhfc3lzY2FsbDModm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgb3AsIGludCBjb3VudCkKLUVOVFJZKF9fZnV0ZXhfc3lzY2FsbDMpCi0gICAgbW92ICAgICAkX19OUl9mdXRleCwgJWVheAotICAgIHN5c2NhbGwKLSAgICByZXQKLUVORChfX2Z1dGV4X3N5c2NhbGwzKQotCi0vLyBpbnQgX19mdXRleF9zeXNjYWxsNCh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBvcCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KQotRU5UUlkoX19mdXRleF9zeXNjYWxsNCkKLSAgICBtb3YgICAgICVyY3gsICVyMTAgICAgICAvKiB0aW1lb3V0ICovCi0gICAgbW92ICAgICAkX19OUl9mdXRleCwgJWVheAotICAgIHN5c2NhbGwKLSAgICByZXQKLUVORChfX2Z1dGV4X3N5c2NhbGw0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvc2V0am1wLlMgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9zZXRqbXAuUwppbmRleCA0ZGQ5MDI4Li5mMzU2ODc3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9zZXRqbXAuUworKysgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9zZXRqbXAuUwpAQCAtMzYsOCArMzYsNyBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KICNpbmNsdWRlIDxtYWNoaW5lL3NldGptcC5oPgogCiAvKgpAQCAtNTMsMTEgKzUyLDcgQEAKIEVOVFJZKHNldGptcCkKIAlwdXNocQklcmRpCiAJeG9ycQklcmRpLCVyZGkKLSNpZmRlZiBfX1BJQ19fCi0JY2FsbAlQSUNfUExUKF9DX0xBQkVMKHNpZ2Jsb2NrKSkKLSNlbHNlCi0JY2FsbAlfQ19MQUJFTChzaWdibG9jaykKLSNlbmRpZgorCWNhbGwJUElDX1BMVChzaWdibG9jaykKIAlwb3BxCSVyZGkKIAltb3ZxCSVyYXgsKF9KQl9TSUdNQVNLICogOCkoJXJkaSkKIApAQCAtODEsMTEgKzc2LDcgQEAKIAogCW1vdnEJKF9KQl9TSUdNQVNLICogOCkoJXJkaSksJXJkaQogCXB1c2hxCSVyOAotI2lmZGVmIF9fUElDX18KLQljYWxsCVBJQ19QTFQoX0NfTEFCRUwoc2lnc2V0bWFzaykpCi0jZWxzZQotCWNhbGwJX0NfTEFCRUwoc2lnc2V0bWFzaykKLSNlbmRpZgorCWNhbGwJUElDX1BMVChzaWdzZXRtYXNrKQogCXBvcHEJJXI4CiAJbW92cQkoX0pCX1JCWCAqIDgpKCVyMTIpLCVyYngKIAltb3ZxCShfSkJfUkJQICogOCkoJXIxMiksJXJicApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvc2lnc2V0am1wLlMgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9zaWdzZXRqbXAuUwppbmRleCA4NDJkNmZmLi41NzFmZWEzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9zaWdzZXRqbXAuUworKysgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9zaWdzZXRqbXAuUwpAQCAtMzcsNyArMzcsNyBAQAogICovCiAKIAotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KIAogLyoKQEAgLTU3LDExICs1Nyw3IEBACiAKIAlwdXNocQklcmRpCiAJeG9ycQklcmRpLCVyZGkKLSNpZmRlZiBfX1BJQ19fCi0JY2FsbAlQSUNfUExUKF9DX0xBQkVMKHNpZ2Jsb2NrKSkKLSNlbHNlCi0JY2FsbAlfQ19MQUJFTChzaWdibG9jaykKLSNlbmRpZgorCWNhbGwJUElDX1BMVChzaWdibG9jaykKIAlwb3BxCSVyZGkKIAltb3ZxCSVyYXgsKF9KQl9TSUdNQVNLICogOCkoJXJkaSkKIApAQCAtODYsMTEgKzgyLDcgQEAKIAlqeiAgICAgIDJmCiAKIAltb3ZxCShfSkJfU0lHTUFTSyAqIDgpKCVyZGkpLCVyZGkKLSNpZmRlZiBfX1BJQ19fCi0JY2FsbAlQSUNfUExUKF9DX0xBQkVMKHNpZ3NldG1hc2spKQotI2Vsc2UKLQljYWxsCV9DX0xBQkVMKHNpZ3NldG1hc2spCi0jZW5kaWYKKwljYWxsCVBJQ19QTFQoc2lnc2V0bWFzaykKIDI6CXBvcHEJJXJheAogCW1vdnEJKF9KQl9SQlggKiA4KSglcjEyKSwlcmJ4CiAJbW92cQkoX0pCX1JCUCAqIDgpKCVyMTIpLCVyYnAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3N5c2NhbGwuUyBiL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3N5c2NhbGwuUwppbmRleCBhOThhNDM2Li44NzkzOWJhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy9zeXNjYWxsLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvc3lzY2FsbC5TCkBAIC01Nyw4ICs1Nyw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc3lzY2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3Zmb3JrLlMgYi9saWJjL2FyY2gteDg2XzY0L2Jpb25pYy92Zm9yay5TCmluZGV4IGIzMjNmMzAuLjEyOWYxZGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvYmlvbmljL3Zmb3JrLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9iaW9uaWMvdmZvcmsuUwpAQCAtMzksOCArMzksNyBAQAogICBqYiAgICAgIDFmCiAgIG5lZ2wgICAgJWVheAogICBtb3ZsICAgICVlYXgsICVlZGkKLSAgY2FsbCAgICBfX3NldF9lcnJubwotICBvcnEgICAgICQtMSwgJXJheAorICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICByZXQKIEVORCh2Zm9yaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oIGIvbGliYy9hcmNoLXg4Nl82NC9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNGU2NTIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IF90eXBlcy5oLHYgMS4xMyAyMDEzLzA3LzA1IDE5OjQ2OjI3IGd1ZW50aGVyIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKXR5cGVzLmgJOC4zIChCZXJrZWxleSkgMS81Lzk0Ci0gKglAKCMpYW5zaS5oCTguMiAoQmVya2VsZXkpIDEvNC85NAotICovCi0KLSNpZm5kZWYgX01BQ0hJTkVfX1RZUEVTX0hfCi0jZGVmaW5lIF9NQUNISU5FX19UWVBFU19IXwotCi0vKgotICogX0FMSUdOKHApIHJvdW5kcyBwIChwb2ludGVyIG9yIGJ5dGUgaW5kZXgpIHVwIHRvIGEgY29ycmVjdGx5LWFsaWduZWQKLSAqIHZhbHVlIGZvciBhbGwgZGF0YSB0eXBlcyAoaW50LCBsb25nLCAuLi4pLiAgIFRoZSByZXN1bHQgaXMgYW4KLSAqIHVuc2lnbmVkIGxvbmcgYW5kIG11c3QgYmUgY2FzdCB0byBhbnkgZGVzaXJlZCBwb2ludGVyIHR5cGUuCi0gKgotICogX0FMSUdORURfUE9JTlRFUiBpcyBhIGJvb2xlYW4gbWFjcm8gdGhhdCBjaGVja3Mgd2hldGhlciBhbiBhZGRyZXNzCi0gKiBpcyB2YWxpZCB0byBmZXRjaCBkYXRhIGVsZW1lbnRzIG9mIHR5cGUgdCBmcm9tIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLgotICogVGhpcyBkb2VzIG5vdCByZWZsZWN0IHRoZSBvcHRpbWFsIGFsaWdubWVudCwganVzdCB0aGUgcG9zc2liaWxpdHkKLSAqICh3aXRoaW4gcmVhc29uYWJsZSBsaW1pdHMpLiAKLSAqLwotI2RlZmluZQlfQUxJR05CWVRFUwkoc2l6ZW9mKGxvbmcpIC0gMSkKLSNkZWZpbmUJX0FMSUdOKHApCSgoKHVuc2lnbmVkIGxvbmcpKHApICsgX0FMSUdOQllURVMpICZ+X0FMSUdOQllURVMpCi0jZGVmaW5lCV9BTElHTkVEX1BPSU5URVIocCx0KQkxCi0KLSNpZiBkZWZpbmVkKF9LRVJORUwpCi10eXBlZGVmIHN0cnVjdCBsYWJlbF90IHsKLQlsb25nIHZhbFs4XTsKLX0gbGFiZWxfdDsKLSNlbmRpZgotCi0vKiA3LjE4LjEuMSBFeGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9fc2lnbmVkIGNoYXIJCV9faW50OF90OwotdHlwZWRlZgl1bnNpZ25lZCBjaGFyCQlfX3VpbnQ4X3Q7Ci10eXBlZGVmCXNob3J0CQkJX19pbnQxNl90OwotdHlwZWRlZgl1bnNpZ25lZCBzaG9ydAkJX191aW50MTZfdDsKLXR5cGVkZWYJaW50CQkJX19pbnQzMl90OwotdHlwZWRlZgl1bnNpZ25lZCBpbnQJCV9fdWludDMyX3Q7Ci10eXBlZGVmCWxvbmcgICAgICAgICAgICAgICAgICAgIF9faW50NjRfdDsKLXR5cGVkZWYJdW5zaWduZWQgbG9uZyAgICAgICAgICAgX191aW50NjRfdDsKLQotLyogNy4xOC4xLjIgTWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9faW50OF90CQlfX2ludF9sZWFzdDhfdDsKLXR5cGVkZWYJX191aW50OF90CQlfX3VpbnRfbGVhc3Q4X3Q7Ci10eXBlZGVmCV9faW50MTZfdAkJX19pbnRfbGVhc3QxNl90OwotdHlwZWRlZglfX3VpbnQxNl90CQlfX3VpbnRfbGVhc3QxNl90OwotdHlwZWRlZglfX2ludDMyX3QJCV9faW50X2xlYXN0MzJfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2xlYXN0MzJfdDsKLXR5cGVkZWYJX19pbnQ2NF90CQlfX2ludF9sZWFzdDY0X3Q7Ci10eXBlZGVmCV9fdWludDY0X3QJCV9fdWludF9sZWFzdDY0X3Q7Ci0KLS8qIDcuMTguMS4zIEZhc3Rlc3QgbWluaW11bS13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDhfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3Q4X3Q7Ci10eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDE2X3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0MTZfdDsKLXR5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0MzJfdDsKLXR5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3QzMl90OwotdHlwZWRlZglfX2ludDY0X3QJCV9faW50X2Zhc3Q2NF90OwotdHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRfZmFzdDY0X3Q7Ci0jZGVmaW5lCV9fSU5UX0ZBU1Q4X01JTgkJSU5UMzJfTUlOCi0jZGVmaW5lCV9fSU5UX0ZBU1QxNl9NSU4JSU5UMzJfTUlOCi0jZGVmaW5lCV9fSU5UX0ZBU1QzMl9NSU4JSU5UMzJfTUlOCi0jZGVmaW5lCV9fSU5UX0ZBU1Q2NF9NSU4JSU5UNjRfTUlOCi0jZGVmaW5lCV9fSU5UX0ZBU1Q4X01BWAkJSU5UMzJfTUFYCi0jZGVmaW5lCV9fSU5UX0ZBU1QxNl9NQVgJSU5UMzJfTUFYCi0jZGVmaW5lCV9fSU5UX0ZBU1QzMl9NQVgJSU5UMzJfTUFYCi0jZGVmaW5lCV9fSU5UX0ZBU1Q2NF9NQVgJSU5UNjRfTUFYCi0jZGVmaW5lCV9fVUlOVF9GQVNUOF9NQVgJVUlOVDMyX01BWAotI2RlZmluZQlfX1VJTlRfRkFTVDE2X01BWAlVSU5UMzJfTUFYCi0jZGVmaW5lCV9fVUlOVF9GQVNUMzJfTUFYCVVJTlQzMl9NQVgKLSNkZWZpbmUJX19VSU5UX0ZBU1Q2NF9NQVgJVUlOVDY0X01BWAotCi0vKiA3LjE4LjEuNCBJbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMgKi8KLXR5cGVkZWYJbG9uZwkJCV9faW50cHRyX3Q7Ci10eXBlZGVmCXVuc2lnbmVkIGxvbmcJCV9fdWludHB0cl90OwotCi0vKiA3LjE4LjEuNSBHcmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCi10eXBlZGVmCV9faW50NjRfdAkJX19pbnRtYXhfdDsKLXR5cGVkZWYJX191aW50NjRfdAkJX191aW50bWF4X3Q7Ci0KLS8qIFJlZ2lzdGVyIHNpemUgKi8KLXR5cGVkZWYgbG9uZwkJCV9fcmVnaXN0ZXJfdDsKLQotLyogVk0gc3lzdGVtIHR5cGVzICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fdmFkZHJfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJX19wYWRkcl90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3ZzaXplX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fcHNpemVfdDsKLQotLyogU3RhbmRhcmQgc3lzdGVtIHR5cGVzICovCi10eXBlZGVmCWRvdWJsZQkJCV9fZG91YmxlX3Q7Ci10eXBlZGVmCWZsb2F0CQkJX19mbG9hdF90OwotdHlwZWRlZiBsb25nCQkJX19wdHJkaWZmX3Q7Ci10eXBlZGVmCWxvbmcJCQlfX3NzaXplX3Q7Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwotdHlwZWRlZglfX2J1aWx0aW5fdmFfbGlzdAlfX3ZhX2xpc3Q7Ci0jZWxzZQotdHlwZWRlZiBjaGFyICoJCQlfX3ZhX2xpc3Q7Ci0jZW5kaWYKLQotLyogV2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCB0eXBlcyAqLwotI2lmbmRlZiBfX2NwbHVzcGx1cwotdHlwZWRlZglpbnQJCQlfX3djaGFyX3Q7Ci0jZW5kaWYKLXR5cGVkZWYgaW50CQkJX193aW50X3Q7Ci10eXBlZGVmCWludAkJCV9fcnVuZV90OwotdHlwZWRlZgl2b2lkICoJCQlfX3djdHJhbnNfdDsKLXR5cGVkZWYJdm9pZCAqCQkJX193Y3R5cGVfdDsKLQotI2VuZGlmCS8qIF9NQUNISU5FX19UWVBFU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9pbmNsdWRlL21hY2hpbmUvYXNtLmggYi9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9hc20uaAppbmRleCAzMTBiMjMwLi4wNmRhMzlhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9hc20uaAorKysgYi9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9hc20uaApAQCAtMzcsMjggKzM3LDggQEAKICNpZm5kZWYgX0FNRDY0X0FTTV9IXwogI2RlZmluZSBfQU1ENjRfQVNNX0hfCiAKLSNpZmRlZiBfX3g4Nl82NF9fCi0KLSNpZmRlZiBfX1BJQ19fCiAjZGVmaW5lIFBJQ19QTFQoeCkJeEBQTFQKICNkZWZpbmUgUElDX0dPVCh4KQl4QEdPVFBDUkVMKCVyaXApCi0jZWxzZQotI2RlZmluZSBQSUNfUExUKHgpCXgKLSNkZWZpbmUgUElDX0dPVCh4KQl4Ci0jZW5kaWYKLQotIyBkZWZpbmUgX0NfTEFCRUwoeCkJeAotI2RlZmluZQlfQVNNX0xBQkVMKHgpCXgKLQotI2RlZmluZSBDVkFST0ZGKHgseSkJCShfQ19MQUJFTCh4KSt5KSglcmlwKQotCi0jaWZkZWYgX19TVERDX18KLSMgZGVmaW5lIF9fQ09OQ0FUKHgseSkJeCAjIyB5Ci0jIGRlZmluZSBfX1NUUklORyh4KQkjeAotI2Vsc2UKLSMgZGVmaW5lIF9fQ09OQ0FUKHgseSkJeC8qKi95Ci0jIGRlZmluZSBfX1NUUklORyh4KQkieCIKLSNlbmRpZgogCiAvKiBsZXQga2VybmVscyBhbmQgb3RoZXJzIG92ZXJyaWRlIGVudHJ5cG9pbnQgYWxpZ25tZW50ICovCiAjaWZuZGVmIF9BTElHTl9URVhUCkBAIC02OSw3OCArNDksNCBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNkZWZpbmUgX0VOVFJZKHgpIFwKLQkudGV4dDsgX0FMSUdOX1RFWFQ7IC5nbG9ibCB4OyAudHlwZSB4LEBmdW5jdGlvbjsgeDogLmNmaV9zdGFydHByb2M7Ci0jZGVmaW5lIF9MQUJFTCh4KSBcCi0JLmdsb2JsIHg7IHg6Ci0KLSNpZmRlZiBfS0VSTkVMCi0vKiBYWFggQ2FuJ3QgdXNlIF9fQ09OQ0FUKCkgaGVyZSwgYXMgaXQgd291bGQgYmUgZXZhbHVhdGVkIGluY29ycmVjdGx5LiAqLwotI2lmZGVmIF9fU1REQ19fCi0jZGVmaW5lCUlEVFZFQyhuYW1lKSBcCi0JQUxJR05fVEVYVDsgLmdsb2JsIFggIyMgbmFtZTsgLnR5cGUgWCAjIyBuYW1lLEBmdW5jdGlvbjsgWCAjIyBuYW1lOgotI2RlZmluZQlJRFRWRUNfRU5EKG5hbWUpIFwKLQkuc2l6ZSBYICMjIG5hbWUsIC4gLSBYICMjIG5hbWUKLSNlbHNlIAotI2RlZmluZQlJRFRWRUMobmFtZSkgXAotCUFMSUdOX1RFWFQ7IC5nbG9ibCBYLyoqL25hbWU7IC50eXBlIFgvKiovbmFtZSxAZnVuY3Rpb247IFgvKiovbmFtZToKLSNkZWZpbmUJSURUVkVDX0VORChuYW1lKSBcCi0JLnNpemUgWC8qKi9uYW1lLCAuIC0gWC8qKi9uYW1lCi0jZW5kaWYgLyogX19TVERDX18gKi8gCi0jZW5kaWYgLyogX0tFUk5FTCAqLwotCi0jaWZkZWYgX19TVERDX18KLSNkZWZpbmUgQ1BVVkFSKG9mZikJJWdzOkNQVV9JTkZPXyAjIyBvZmYKLSNlbHNlCi0jZGVmaW5lIENQVVZBUihvZmYpICAgICAlZ3M6Q1BVX0lORk9fLyoqL29mZgotI2VuZGlmCi0KLQotI2lmZGVmIEdQUk9GCi0jIGRlZmluZSBfUFJPRl9QUk9MT0dVRQlcCi0JcHVzaHEgJXJicDsgbGVhcSAoJXJzcCksJXJicDsgY2FsbCBQSUNfUExUKF9fbWNvdW50KTsgcG9wcSAlcmJwCi0jZWxzZQotIyBkZWZpbmUgX1BST0ZfUFJPTE9HVUUKLSNlbmRpZgotCi0jZGVmaW5lCUVOVFJZKHkpCV9FTlRSWShfQ19MQUJFTCh5KSk7IF9QUk9GX1BST0xPR1VFCi0jZGVmaW5lCU5FTlRSWSh5KQlfRU5UUlkoX0NfTEFCRUwoeSkpCi0jZGVmaW5lCUFMVEVOVFJZKHgpCU5FTlRSWSh4KQotI2RlZmluZQlBU0VOVFJZKHkpCV9FTlRSWShfQVNNX0xBQkVMKHkpKTsgX1BST0ZfUFJPTE9HVUUKLSNkZWZpbmUJTEFCRUwoeSkJX0xBQkVMKF9DX0xBQkVMKHkpKQotI2RlZmluZQlFTkQoeSkJCS5jZmlfZW5kcHJvYzsgLnNpemUgeSwgLiAtIHkKLQotI2RlZmluZQlBU01TVFIJCS5hc2NpegotCi0jZGVmaW5lIFJDU0lEKHgpCS5wdXNoc2VjdGlvbiAiLmlkZW50IjsgLmFzY2l6IHg7IC5wb3BzZWN0aW9uCi0KLSNkZWZpbmUJV0VBS19BTElBUyhhbGlhcyxzeW0pCQkJCQkJXAotCS53ZWFrIGFsaWFzOwkJCQkJCQlcCi0JYWxpYXMgPSBzeW0KLQotLyoKLSAqIFNUUk9OR19BTElBUzogY3JlYXRlIGEgc3Ryb25nIGFsaWFzLgotICovCi0jZGVmaW5lIFNUUk9OR19BTElBUyhhbGlhcyxzeW0pCQkJCQkJXAotCS5nbG9ibCBhbGlhczsJCQkJCQkJXAotCWFsaWFzID0gc3ltCi0KLSNpZmRlZiBfX1NURENfXwotI2RlZmluZQlXQVJOX1JFRkVSRU5DRVMoc3ltLG1zZykJCQkJCVwKLQkucHVzaHNlY3Rpb24gLmdudS53YXJuaW5nLiAjIyBzeW07CQkJCVwKLQkuYXNjaWkgbXNnOwkJCQkJCQlcCi0JLnBvcHNlY3Rpb24KLSNlbHNlCi0jZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAotCS5wdXNoc2VjdGlvbiAuZ251Lndhcm5pbmcuLyoqL3N5bTsJCQkJXAotCS5hc2NpaSBtc2c7CQkJCQkJCVwKLQkucG9wc2VjdGlvbgotI2VuZGlmIC8qIF9fU1REQ19fICovCi0KLSNlbHNlCS8qCV9feDg2XzY0X18JKi8KLQotI2luY2x1ZGUgPGkzODYvYXNtLmg+Ci0KLSNlbmRpZgkvKglfX3g4Nl82NF9fCSovCi0KICNlbmRpZiAvKiAhX0FNRDY0X0FTTV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbGliYy9hcmNoLXg4Nl82NC9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDg1NmIyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvaW5jbHVkZS9tYWNoaW5lL2llZWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKgkkT3BlbkJTRDogaWVlZS5oLHYgMS4yIDIwMDgvMDkvMDcgMjA6MzY6MDYgbWFydHluYXMgRXhwICQgKi8KLS8qCSROZXRCU0Q6IGllZWUuaCx2IDEuMSAxOTk2LzA5LzMwIDE2OjM0OjI1IHdzIEV4cCAkICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSB0aGUgQ29tcHV0ZXIgU3lzdGVtcyBFbmdpbmVlcmluZyBncm91cAotICogYXQgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSB1bmRlciBEQVJQQSBjb250cmFjdCBCRyA5MS02NiBhbmQKLSAqIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5LgotICoKLSAqIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICoJQ2FsaWZvcm5pYSwgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKWllZWUuaAk4LjEgKEJlcmtlbGV5KSA2LzExLzkzCi0gKi8KLQotLyoKLSAqIGllZWUuaCBkZWZpbmVzIHRoZSBtYWNoaW5lLWRlcGVuZGVudCBsYXlvdXQgb2YgdGhlIG1hY2hpbmUncyBJRUVFCi0gKiBmbG9hdGluZyBwb2ludC4gIEl0IGRvZXMgKm5vdCogZGVmaW5lICh5ZXQ/KSBhbnkgb2YgdGhlIHJvdW5kaW5nCi0gKiBtb2RlIGJpdHMsIGV4Y2VwdGlvbnMsIGFuZCBzbyBmb3J0aC4KLSAqLwotCi0vKgotICogRGVmaW5lIHRoZSBudW1iZXIgb2YgYml0cyBpbiBlYWNoIGZyYWN0aW9uIGFuZCBleHBvbmVudC4KLSAqCi0gKgkJICAgICBrCSAgICAgICAgIGsrMQotICogTm90ZSB0aGF0ICAxLjAgeCAyICA9PSAwLjEgeCAyICAgICAgYW5kIHRoYXQgZGVub3JtcyBhcmUgcmVwcmVzZW50ZWQKLSAqCi0gKgkJCQkJICAoLWV4cF9iaWFzKzEpCi0gKiBhcyBmcmFjdGlvbnMgdGhhdCBsb29rIGxpa2UgMC5mZmZmZiB4IDIgICAgICAgICAgICAgLiAgVGhpcyBtZWFucyB0aGF0Ci0gKgotICoJCQkgLTEyNgotICogdGhlIG51bWJlciAwLjEwMDAwIHggMiAgICAsIGZvciBpbnN0YW5jZSwgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbGl6ZWQKLSAqCi0gKgkJLTEyNwkJCSAgIC0xMjgKLSAqIGZsb2F0IDEuMCB4IDIgICAgLiAgVGh1cywgdG8gcmVwcmVzZW50IDIgICAgLCB3ZSBuZWVkIG9uZSBsZWFkaW5nIHplcm8KLSAqCi0gKgkJCQkgIC0xMjkKLSAqIGluIHRoZSBmcmFjdGlvbjsgdG8gcmVwcmVzZW50IDIgICAgLCB3ZSBuZWVkIHR3bywgYW5kIHNvIG9uLiAgVGhpcwotICoKLSAqCQkJCQkJICAgICAoLWV4cF9iaWFzLWZyYWNiaXRzKzEpCi0gKiBpbXBsaWVzIHRoYXQgdGhlIHNtYWxsZXN0IGRlbm9ybWFsaXplZCBudW1iZXIgaXMgMgotICoKLSAqIGZvciB3aGljaGV2ZXIgZm9ybWF0IHdlIGFyZSB0YWxraW5nIGFib3V0OiBmb3Igc2luZ2xlIHByZWNpc2lvbiwgZm9yCi0gKgotICoJCQkJCQktMTI2CQktMTQ5Ci0gKiBpbnN0YW5jZSwgd2UgZ2V0IC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSB4IDIgICAgLCBvciAxLjAgeCAyICAgICwgYW5kCi0gKgotICogLTE0OSA9PSAtMTI3IC0gMjMgKyAxLgotICovCi0jZGVmaW5lCVNOR19FWFBCSVRTCTgKLSNkZWZpbmUJU05HX0ZSQUNCSVRTCTIzCi0KLSNkZWZpbmUJREJMX0VYUEJJVFMJMTEKLSNkZWZpbmUJREJMX0ZSQUNIQklUUwkyMAotI2RlZmluZQlEQkxfRlJBQ0xCSVRTCTMyCi0jZGVmaW5lCURCTF9GUkFDQklUUwk1MgotCi0jZGVmaW5lCUVYVF9FWFBCSVRTCTE1Ci0jZGVmaW5lCUVYVF9GUkFDSEJJVFMJMzIKLSNkZWZpbmUJRVhUX0ZSQUNMQklUUwkzMgotI2RlZmluZQlFWFRfRlJBQ0JJVFMJNjQKLQotI2RlZmluZQlFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7CQlcCi0JKGEpWzBdID0gKHVpbnQzMl90KShwKS0+ZXh0X2ZyYWNsOwlcCi0JKGEpWzFdID0gKHVpbnQzMl90KShwKS0+ZXh0X2ZyYWNoOwlcCi19IHdoaWxlKDApCi0KLXN0cnVjdCBpZWVlX3NpbmdsZSB7Ci0JdV9pbnQJc25nX2ZyYWM6MjM7Ci0JdV9pbnQJc25nX2V4cDo4OwotCXVfaW50CXNuZ19zaWduOjE7Ci19OwotCi1zdHJ1Y3QgaWVlZV9kb3VibGUgewotCXVfaW50CWRibF9mcmFjbDsKLQl1X2ludAlkYmxfZnJhY2g6MjA7Ci0JdV9pbnQJZGJsX2V4cDoxMTsKLQl1X2ludAlkYmxfc2lnbjoxOwotfTsKLQotc3RydWN0IGllZWVfZXh0IHsKLQl1X2ludAlleHRfZnJhY2w7Ci0JdV9pbnQJZXh0X2ZyYWNoOwotCXVfaW50CWV4dF9leHA6MTU7Ci0JdV9pbnQJZXh0X3NpZ246MTsKLQl1X2ludAlleHRfcGFkbDoxNjsKLQl1X2ludAlleHRfcGFkaDsKLX07Ci0KLS8qCi0gKiBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgaW4gWzEuLklORk5BTikgKG9mIHdoYXRldmVyIHR5cGUpIGFyZQotICogYG5vcm1hbCcuICBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgSU5GTkFOIGFyZSBlaXRoZXIgSW5mIG9yIE5hTi4KLSAqIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyB6ZXJvIGFyZSBlaXRoZXIgemVybyAoaWZmIGFsbCBmcmFjdGlvbgotICogYml0cyBhcmUgemVybykgb3Igc3Vibm9ybWFsIHZhbHVlcy4KLSAqCi0gKiBBIE5hTiBpcyBhIGBzaWduYWxsaW5nIE5hTicgaWYgaXRzIFFVSUVUTkFOIGJpdCBpcyBjbGVhciBpbiBpdHMKLSAqIGhpZ2ggZnJhY3Rpb247IGlmIHRoZSBiaXQgaXMgc2V0LCBpdCBpcyBhIGBxdWlldCBOYU4nLgotICovCi0jZGVmaW5lCVNOR19FWFBfSU5GTkFOCTI1NQotI2RlZmluZQlEQkxfRVhQX0lORk5BTgkyMDQ3Ci0jZGVmaW5lCUVYVF9FWFBfSU5GTkFOCTMyNzY3Ci0KLSNpZiAwCi0jZGVmaW5lCVNOR19RVUlFVE5BTgkoMSA8PCAyMikKLSNkZWZpbmUJREJMX1FVSUVUTkFOCSgxIDw8IDE5KQotI2RlZmluZQlFWFRfUVVJRVROQU4JKDEgPDwgMTUpCi0jZW5kaWYKLQotLyoKLSAqIEV4cG9uZW50IGJpYXNlcy4KLSAqLwotI2RlZmluZQlTTkdfRVhQX0JJQVMJMTI3Ci0jZGVmaW5lCURCTF9FWFBfQklBUwkxMDIzCi0jZGVmaW5lCUVYVF9FWFBfQklBUwkxNjM4MwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmggYi9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjNGE4OC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBsaW1pdHMuaCx2IDEuNSAyMDA5LzExLzI3IDE5OjU0OjM1IGd1ZW50aGVyIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODggVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIylsaW1pdHMuaAk3LjIgKEJlcmtlbGV5KSA2LzI4LzkwCi0gKi8KLQotI2lmbmRlZglfTUFDSElORV9MSU1JVFNfSF8KLSNkZWZpbmUJX01BQ0hJTkVfTElNSVRTX0hfCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotI2lmIF9fUE9TSVhfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFCi0jaWZuZGVmCVNJWkVfTUFYCi0jZGVmaW5lIFNJWkVfTUFYCVVMT05HX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90ICovCi0jZW5kaWYKLSNkZWZpbmUgU1NJWkVfTUFYCUxPTkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzc2l6ZV90ICovCi0jZW5kaWYKLQotI2lmIF9fQlNEX1ZJU0lCTEUKLSNkZWZpbmUJU0laRV9UX01BWAlVTE9OR19NQVgJLyogbWF4IHZhbHVlIGZvciBhIHNpemVfdCAoaGlzdG9yaWMpICovCi0KLSNkZWZpbmUJVVFVQURfTUFYCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTAkJLyogbWF4IHVuc2lnbmVkIHF1YWQgKi8KLSNkZWZpbmUJUVVBRF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmTEwJCS8qIG1heCBzaWduZWQgcXVhZCAqLwotI2RlZmluZQlRVUFEX01JTgkoLTB4N2ZmZmZmZmZmZmZmZmZmZkxMLTEpCS8qIG1pbiBzaWduZWQgcXVhZCAqLwotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi0jZW5kaWYgLyogX01BQ0hJTkVfTElNSVRTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9jYWNoZS5oIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGFjYzZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvY2FjaGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKiBWYWx1ZXMgYXJlIG9wdGltaXplZCBmb3IgU2lsdmVybW9udCAqLworI2RlZmluZSBTSEFSRURfQ0FDSEVfU0laRQkoMTAyNCoxMDI0KQkJCS8qIFNpbHZlcm1vbnQgTDIgQ2FjaGUgKi8KKyNkZWZpbmUgREFUQV9DQUNIRV9TSVpFCQkoMjQqMTAyNCkJCQkvKiBTaWx2ZXJtb250IEwxIERhdGEgQ2FjaGUgKi8KKworI2RlZmluZSBTSEFSRURfQ0FDSEVfU0laRV9IQUxGCShTSEFSRURfQ0FDSEVfU0laRSAvIDIpCisjZGVmaW5lIERBVEFfQ0FDSEVfU0laRV9IQUxGCShEQVRBX0NBQ0hFX1NJWkUgLyAyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1tZW1jcHktc2xtLlMgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLW1lbWNweS1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzMwZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1tZW1jcHktc2xtLlMKQEAgLTAsMCArMSwyOTkgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaWZuZGVmIE1FTUNQWQorIyBkZWZpbmUgTUVNQ1BZCQltZW1jcHkKKyNlbmRpZgorCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKQkJXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247CQlcCisJLmdsb2JsIG5hbWU7CQlcCisJLnAyYWxpZ24gNDsJCVwKK25hbWU6CQlcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkJCVwKKwljZmlfZW5kcHJvYzsJCVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOwkJXAorCWNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CQlcCisJY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykJcHVzaCBSRUc7CisjZGVmaW5lIFBPUChSRUcpCXBvcCBSRUc7CisKKyNkZWZpbmUgRU5UUkFOQ0UJUFVTSCAoJXJieCk7CisjZGVmaW5lIFJFVFVSTl9FTkQJUE9QICglcmJ4KTsgcmV0CisjZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORDsKKworCS5zZWN0aW9uIC50ZXh0LnNzZTIsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChNRU1DUFkpCisJRU5UUkFOQ0UKKwljbXAJJXJzaSwgJXJkaQorCWplCUwocmV0dXJuKQorCisJY21wCSQxNiwgJXJkeAorCWpiZQlMKGxlbl8wXzE2X2J5dGVzKQorCisJY21wCSRTSEFSRURfQ0FDSEVfU0laRV9IQUxGLCAlcmR4CisJamFlCUwobGFyZ2VfcGFnZSkKKworCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CS0xNiglcnNpLCAlcmR4KSwgJXhtbTEKKwljbXAJJDMyLCAlcmR4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTEsIC0xNiglcmRpLCAlcmR4KQorCWpiZQlMKHJldHVybikKKworCW1vdmRxdQkxNiglcnNpKSwgJXhtbTAKKwltb3ZkcXUJLTMyKCVyc2ksICVyZHgpLCAleG1tMQorCWNtcAkkNjQsICVyZHgKKwltb3ZkcXUJJXhtbTAsIDE2KCVyZGkpCisJbW92ZHF1CSV4bW0xLCAtMzIoJXJkaSwgJXJkeCkKKwlqYmUJTChyZXR1cm4pCisKKwltb3ZkcXUJMzIoJXJzaSksICV4bW0wCisJbW92ZHF1CTQ4KCVyc2kpLCAleG1tMQorCW1vdmRxdQktNDgoJXJzaSwgJXJkeCksICV4bW0yCisJbW92ZHF1CS02NCglcnNpLCAlcmR4KSwgJXhtbTMKKwljbXAJJDEyOCwgJXJkeAorCW1vdmRxdQkleG1tMCwgMzIoJXJkaSkKKwltb3ZkcXUJJXhtbTEsIDQ4KCVyZGkpCisJbW92ZHF1CSV4bW0yLCAtNDgoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTMsIC02NCglcmRpLCAlcmR4KQorCWpiZQlMKHJldHVybikKKworLyogTm93IHRoZSBtYWluIGxvb3A6IHdlIGFsaWduIHRoZSBhZGRyZXNzIG9mIHRoZSBkZXN0aW5hdGlvbi4gICovCisJbGVhCTY0KCVyZGkpLCAlcjgKKwlhbmQJJC02NCwgJXI4CisKKwlhZGQJJXJkaSwgJXJkeAorCWFuZAkkLTY0LCAlcmR4CisKKwlzdWIJJXJkaSwgJXJzaQorCisvKiBXZSBzaG91bGQgc3RvcCB0d28gaXRlcmF0aW9ucyBiZWZvcmUgdGhlIHRlcm1pbmF0aW9uCisJKGluIG9yZGVyIG5vdCB0byBtaXNwcmVmZXRjaCkuICAqLworCXN1YgkkNjQsICVyZHgKKwljbXAJJXI4LCAlcmR4CisJamUJTChtYWluX2xvb3BfanVzdF9vbmVfaXRlcmF0aW9uKQorCisJc3ViCSQ2NCwgJXJkeAorCWNtcAklcjgsICVyZHgKKwlqZQlMKG1haW5fbG9vcF9sYXN0X3R3b19pdGVyYXRpb25zKQorCisKKwkucDJhbGlnbiA0CitMKG1haW5fbG9vcF9jYWNoZSk6CisKKwlwcmVmZXRjaHQwIDEyOCglcjgsICVyc2kpCisKKwltb3ZkcXUJKCVyOCwgJXJzaSksICV4bW0wCisJbW92ZHF1CTE2KCVyOCwgJXJzaSksICV4bW0xCisJbW92ZHF1CTMyKCVyOCwgJXJzaSksICV4bW0yCisJbW92ZHF1CTQ4KCVyOCwgJXJzaSksICV4bW0zCisJbW92ZHFhCSV4bW0wLCAoJXI4KQorCW1vdmRxYQkleG1tMSwgMTYoJXI4KQorCW1vdmRxYQkleG1tMiwgMzIoJXI4KQorCW1vdmRxYQkleG1tMywgNDgoJXI4KQorCWxlYQk2NCglcjgpLCAlcjgKKwljbXAJJXI4LCAlcmR4CisJam5lCUwobWFpbl9sb29wX2NhY2hlKQorCitMKG1haW5fbG9vcF9sYXN0X3R3b19pdGVyYXRpb25zKToKKwltb3ZkcXUJKCVyOCwgJXJzaSksICV4bW0wCisJbW92ZHF1CTE2KCVyOCwgJXJzaSksICV4bW0xCisJbW92ZHF1CTMyKCVyOCwgJXJzaSksICV4bW0yCisJbW92ZHF1CTQ4KCVyOCwgJXJzaSksICV4bW0zCisJbW92ZHF1CTY0KCVyOCwgJXJzaSksICV4bW00CisJbW92ZHF1CTgwKCVyOCwgJXJzaSksICV4bW01CisJbW92ZHF1CTk2KCVyOCwgJXJzaSksICV4bW02CisJbW92ZHF1CTExMiglcjgsICVyc2kpLCAleG1tNworCW1vdmRxYQkleG1tMCwgKCVyOCkKKwltb3ZkcWEJJXhtbTEsIDE2KCVyOCkKKwltb3ZkcWEJJXhtbTIsIDMyKCVyOCkKKwltb3ZkcWEJJXhtbTMsIDQ4KCVyOCkKKwltb3ZkcWEJJXhtbTQsIDY0KCVyOCkKKwltb3ZkcWEJJXhtbTUsIDgwKCVyOCkKKwltb3ZkcWEJJXhtbTYsIDk2KCVyOCkKKwltb3ZkcWEJJXhtbTcsIDExMiglcjgpCisJam1wCUwocmV0dXJuKQorCitMKG1haW5fbG9vcF9qdXN0X29uZV9pdGVyYXRpb24pOgorCW1vdmRxdQkoJXI4LCAlcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXI4LCAlcnNpKSwgJXhtbTEKKwltb3ZkcXUJMzIoJXI4LCAlcnNpKSwgJXhtbTIKKwltb3ZkcXUJNDgoJXI4LCAlcnNpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTAsICglcjgpCisJbW92ZHFhCSV4bW0xLCAxNiglcjgpCisJbW92ZHFhCSV4bW0yLCAzMiglcjgpCisJbW92ZHFhCSV4bW0zLCA0OCglcjgpCisJam1wCUwocmV0dXJuKQorCitMKGxhcmdlX3BhZ2UpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE2KCVyc2kpLCAleG1tMQorCW1vdmRxdQkzMiglcnNpKSwgJXhtbTIKKwltb3ZkcXUJNDgoJXJzaSksICV4bW0zCisJbW92ZHF1CS02NCglcnNpLCAlcmR4KSwgJXhtbTQKKwltb3ZkcXUJLTQ4KCVyc2ksICVyZHgpLCAleG1tNQorCW1vdmRxdQktMzIoJXJzaSwgJXJkeCksICV4bW02CisJbW92ZHF1CS0xNiglcnNpLCAlcmR4KSwgJXhtbTcKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMSwgMTYoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIDMyKCVyZGkpCisJbW92ZHF1CSV4bW0zLCA0OCglcmRpKQorCW1vdmRxdQkleG1tNCwgLTY0KCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW01LCAtNDgoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTYsIC0zMiglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tNywgLTE2KCVyZGksICVyZHgpCisKKwltb3ZkcXUJNjQoJXJzaSksICV4bW0wCisJbW92ZHF1CTgwKCVyc2kpLCAleG1tMQorCW1vdmRxdQk5NiglcnNpKSwgJXhtbTIKKwltb3ZkcXUJMTEyKCVyc2kpLCAleG1tMworCW1vdmRxdQktMTI4KCVyc2ksICVyZHgpLCAleG1tNAorCW1vdmRxdQktMTEyKCVyc2ksICVyZHgpLCAleG1tNQorCW1vdmRxdQktOTYoJXJzaSwgJXJkeCksICV4bW02CisJbW92ZHF1CS04MCglcnNpLCAlcmR4KSwgJXhtbTcKKwltb3ZkcXUJJXhtbTAsIDY0KCVyZGkpCisJbW92ZHF1CSV4bW0xLCA4MCglcmRpKQorCW1vdmRxdQkleG1tMiwgOTYoJXJkaSkKKwltb3ZkcXUJJXhtbTMsIDExMiglcmRpKQorCW1vdmRxdQkleG1tNCwgLTEyOCglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tNSwgLTExMiglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tNiwgLTk2KCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW03LCAtODAoJXJkaSwgJXJkeCkKKworLyogTm93IHRoZSBtYWluIGxvb3Agd2l0aCBub24gdGVtcG9yYWwgc3RvcmVzLiBXZSBhbGlnbgorCXRoZSBhZGRyZXNzIG9mIHRoZSBkZXN0aW5hdGlvbi4gICovCisJbGVhCTEyOCglcmRpKSwgJXI4CisJYW5kCSQtMTI4LCAlcjgKKworCWFkZAklcmRpLCAlcmR4CisJYW5kCSQtMTI4LCAlcmR4CisKKwlzdWIJJXJkaSwgJXJzaQorCisJLnAyYWxpZ24gNAorTChtYWluX2xvb3BfbGFyZ2VfcGFnZSk6CisJbW92ZHF1CSglcjgsICVyc2kpLCAleG1tMAorCW1vdmRxdQkxNiglcjgsICVyc2kpLCAleG1tMQorCW1vdmRxdQkzMiglcjgsICVyc2kpLCAleG1tMgorCW1vdmRxdQk0OCglcjgsICVyc2kpLCAleG1tMworCW1vdmRxdQk2NCglcjgsICVyc2kpLCAleG1tNAorCW1vdmRxdQk4MCglcjgsICVyc2kpLCAleG1tNQorCW1vdmRxdQk5NiglcjgsICVyc2kpLCAleG1tNgorCW1vdmRxdQkxMTIoJXI4LCAlcnNpKSwgJXhtbTcKKwltb3ZudGRxCSV4bW0wLCAoJXI4KQorCW1vdm50ZHEJJXhtbTEsIDE2KCVyOCkKKwltb3ZudGRxCSV4bW0yLCAzMiglcjgpCisJbW92bnRkcQkleG1tMywgNDgoJXI4KQorCW1vdm50ZHEJJXhtbTQsIDY0KCVyOCkKKwltb3ZudGRxCSV4bW01LCA4MCglcjgpCisJbW92bnRkcQkleG1tNiwgOTYoJXI4KQorCW1vdm50ZHEJJXhtbTcsIDExMiglcjgpCisJbGVhCTEyOCglcjgpLCAlcjgKKwljbXAJJXI4LCAlcmR4CisJam5lCUwobWFpbl9sb29wX2xhcmdlX3BhZ2UpCisJc2ZlbmNlCisJam1wCUwocmV0dXJuKQorCitMKGxlbl8wXzE2X2J5dGVzKToKKwl0ZXN0YgkkMjQsICVkbAorCWpuZQlMKGxlbl85XzE2X2J5dGVzKQorCXRlc3RiCSQ0LCAlZGwKKwkucDJhbGlnbiA0LCw1CisJam5lCUwobGVuXzVfOF9ieXRlcykKKwl0ZXN0CSVyZHgsICVyZHgKKwkucDJhbGlnbiA0LCwyCisJamUJTChyZXR1cm4pCisJbW92emJsCSglcnNpKSwgJWVieAorCXRlc3RiCSQyLCAlZGwKKwltb3ZiCSVibCwgKCVyZGkpCisJamUJTChyZXR1cm4pCisJbW92endsCS0yKCVyc2ksJXJkeCksICVlYngKKwltb3Z3CSVieCwgLTIoJXJkaSwlcmR4KQorCWptcAlMKHJldHVybikKKworTChsZW5fOV8xNl9ieXRlcyk6CisJbW92cQkoJXJzaSksICV4bW0wCisJbW92cQktOCglcnNpLCAlcmR4KSwgJXhtbTEKKwltb3ZxCSV4bW0wLCAoJXJkaSkKKwltb3ZxCSV4bW0xLCAtOCglcmRpLCAlcmR4KQorCWptcAlMKHJldHVybikKKworTChsZW5fNV84X2J5dGVzKToKKwltb3ZsCSglcnNpKSwgJWVieAorCW1vdmwJJWVieCwgKCVyZGkpCisJbW92bAktNCglcnNpLCVyZHgpLCAlZWJ4CisJbW92bAklZWJ4LCAtNCglcmRpLCVyZHgpCisJam1wCUwocmV0dXJuKQorCitMKHJldHVybik6CisJbW92IAklcmRpLCAlcmF4CisJUkVUVVJOCisKK0VORCAoTUVNQ1BZKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1tZW1tb3ZlLXNsbS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1tZW1tb3ZlLXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYmZmYWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLW1lbW1vdmUtc2xtLlMKQEAgLTAsMCArMSw1MTMgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaWZuZGVmIE1FTU1PVkUKKyMgZGVmaW5lIE1FTU1PVkUJCW1lbW1vdmUKKyNlbmRpZgorCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKQkJXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247CQlcCisJLmdsb2JsIG5hbWU7CQlcCisJLnAyYWxpZ24gNDsJCVwKK25hbWU6CQlcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkJCVwKKwljZmlfZW5kcHJvYzsJCVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOwkJXAorCWNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CQlcCisJY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykJcHVzaCBSRUc7CisjZGVmaW5lIFBPUChSRUcpCXBvcCBSRUc7CisKKyNkZWZpbmUgRU5UUkFOQ0UJUFVTSCAoJXJieCk7CisjZGVmaW5lIFJFVFVSTl9FTkQJUE9QICglcmJ4KTsgcmV0CisjZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORDsKKworCS5zZWN0aW9uIC50ZXh0LnNzZTIsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChNRU1NT1ZFKQorCUVOVFJBTkNFCisjaWZkZWYgVVNFX0FTX0JDT1BZCisJeGNoZwklcnNpLCAlcmRpCisjZW5kaWYKKwltb3YJJXJkaSwgJXJheAorCisvKiBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBjb3B5IGJhY2t3YXJkIG9yIGZvcndhcmQuICAqLworCWNtcAklcnNpLCAlcmRpCisJamUJTChtbV9yZXR1cm4pCisJamcJTChtbV9sZW5fMF9vcl9tb3JlX2JhY2t3YXJkKQorCisvKiBOb3cgZG8gY2hlY2tzIGZvciBsZW5ndGhzLiBXZSBkbyBbMC4uMTZdLCBbMC4uMzJdLCBbMC4uNjRdLCBbMC4uMTI4XQorCXNlcGFyYXRlbHkuICAqLworCWNtcAkkMTYsICVyZHgKKwlqYmUJTChtbV9sZW5fMF8xNl9ieXRlc19mb3J3YXJkKQorCisJY21wCSQzMiwgJXJkeAorCWphCUwobW1fbGVuXzMyX29yX21vcmVfZm9yd2FyZCkKKworLyogQ29weSBbMC4uMzJdIGFuZCByZXR1cm4uICAqLworCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CS0xNiglcnNpLCAlcmR4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMSwgLTE2KCVyZGksICVyZHgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl8zMl9vcl9tb3JlX2ZvcndhcmQpOgorCWNtcAkkNjQsICVyZHgKKwlqYQlMKG1tX2xlbl82NF9vcl9tb3JlX2ZvcndhcmQpCisKKy8qIENvcHkgWzAuLjY0XSBhbmQgcmV0dXJuLiAgKi8KKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxNiglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTE2KCVyc2ksICVyZHgpLCAleG1tMgorCW1vdmRxdQktMzIoJXJzaSwgJXJkeCksICV4bW0zCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTEsIDE2KCVyZGkpCisJbW92ZHF1CSV4bW0yLCAtMTYoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTMsIC0zMiglcmRpLCAlcmR4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fNjRfb3JfbW9yZV9mb3J3YXJkKToKKwljbXAJJDEyOCwgJXJkeAorCWphCUwobW1fbGVuXzEyOF9vcl9tb3JlX2ZvcndhcmQpCisKKy8qIENvcHkgWzAuLjEyOF0gYW5kIHJldHVybi4gICovCisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXJzaSksICV4bW0xCisJbW92ZHF1CTMyKCVyc2kpLCAleG1tMgorCW1vdmRxdQk0OCglcnNpKSwgJXhtbTMKKwltb3ZkcXUJLTY0KCVyc2ksICVyZHgpLCAleG1tNAorCW1vdmRxdQktNDgoJXJzaSwgJXJkeCksICV4bW01CisJbW92ZHF1CS0zMiglcnNpLCAlcmR4KSwgJXhtbTYKKwltb3ZkcXUJLTE2KCVyc2ksICVyZHgpLCAleG1tNworCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0xLCAxNiglcmRpKQorCW1vdmRxdQkleG1tMiwgMzIoJXJkaSkKKwltb3ZkcXUJJXhtbTMsIDQ4KCVyZGkpCisJbW92ZHF1CSV4bW00LCAtNjQoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTUsIC00OCglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tNiwgLTMyKCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW03LCAtMTYoJXJkaSwgJXJkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzEyOF9vcl9tb3JlX2ZvcndhcmQpOgorLyogQWxpZ25pbmcgdGhlIGFkZHJlc3Mgb2YgZGVzdGluYXRpb24uICAqLworLyogIHNhdmUgZmlyc3QgdW5hbGlnbmVkIDY0IGJ5dGVzICovCisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXJzaSksICV4bW0xCisJbW92ZHF1CTMyKCVyc2kpLCAleG1tMgorCW1vdmRxdQk0OCglcnNpKSwgJXhtbTMKKworCWxlYQk2NCglcmRpKSwgJXI4CisJYW5kCSQtNjQsICVyOCAgLyogcjggbm93IGFsaWduZWQgdG8gbmV4dCA2NCBieXRlIGJvdW5kYXJ5ICovCisJc3ViCSVyZGksICVyc2kgLyogcnNpID0gc3JjIC0gZHN0ID0gZGlmZiAqLworCisJbW92ZHF1CSglcjgsICVyc2kpLCAleG1tNAorCW1vdmRxdQkxNiglcjgsICVyc2kpLCAleG1tNQorCW1vdmRxdQkzMiglcjgsICVyc2kpLCAleG1tNgorCW1vdmRxdQk0OCglcjgsICVyc2kpLCAleG1tNworCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTEsIDE2KCVyZGkpCisJbW92ZHF1CSV4bW0yLCAzMiglcmRpKQorCW1vdmRxdQkleG1tMywgNDgoJXJkaSkKKwltb3ZkcWEJJXhtbTQsICglcjgpCisJbW92YXBzCSV4bW01LCAxNiglcjgpCisJbW92YXBzCSV4bW02LCAzMiglcjgpCisJbW92YXBzCSV4bW03LCA0OCglcjgpCisJYWRkCSQ2NCwgJXI4CisKKwlsZWEJKCVyZGksICVyZHgpLCAlcmJ4CisJYW5kCSQtNjQsICVyYngKKwljbXAJJXI4LCAlcmJ4CisJamJlCUwobW1fY29weV9yZW1haW5pbmdfZm9yd2FyZCkKKworCWNtcAkkU0hBUkVEX0NBQ0hFX1NJWkVfSEFMRiwgJXJkeAorCWphZQlMKG1tX2xhcmdlX3BhZ2VfbG9vcF9mb3J3YXJkKQorCisJLnAyYWxpZ24gNAorTChtbV9tYWluX2xvb3BfZm9yd2FyZCk6CisKKwlwcmVmZXRjaHQwIDEyOCglcjgsICVyc2kpCisKKwltb3ZkcXUJKCVyOCwgJXJzaSksICV4bW0wCisJbW92ZHF1CTE2KCVyOCwgJXJzaSksICV4bW0xCisJbW92ZHF1CTMyKCVyOCwgJXJzaSksICV4bW0yCisJbW92ZHF1CTQ4KCVyOCwgJXJzaSksICV4bW0zCisJbW92ZHFhCSV4bW0wLCAoJXI4KQorCW1vdmFwcwkleG1tMSwgMTYoJXI4KQorCW1vdmFwcwkleG1tMiwgMzIoJXI4KQorCW1vdmFwcwkleG1tMywgNDgoJXI4KQorCWxlYQk2NCglcjgpLCAlcjgKKwljbXAJJXI4LCAlcmJ4CisJamEJTChtbV9tYWluX2xvb3BfZm9yd2FyZCkKKworTChtbV9jb3B5X3JlbWFpbmluZ19mb3J3YXJkKToKKwlhZGQJJXJkaSwgJXJkeAorCXN1YgklcjgsICVyZHgKKy8qIFdlIGNvcGllZCBhbGwgdXAgdGlsbCAlcmRpIHBvc2l0aW9uIGluIHRoZSBkc3QuCisJSW4gJXJkeCBub3cgaXMgaG93IG1hbnkgYnl0ZXMgYXJlIGxlZnQgdG8gY29weS4KKwlOb3cgd2UgbmVlZCB0byBhZHZhbmNlICVyOC4gKi8KKwlsZWEJKCVyOCwgJXJzaSksICVyOQorCitMKG1tX3JlbWFpbmluZ18wXzY0X2J5dGVzX2ZvcndhcmQpOgorCWNtcAkkMzIsICVyZHgKKwlqYQlMKG1tX3JlbWFpbmluZ18zM182NF9ieXRlc19mb3J3YXJkKQorCWNtcAkkMTYsICVyZHgKKwlqYQlMKG1tX3JlbWFpbmluZ18xN18zMl9ieXRlc19mb3J3YXJkKQorCXRlc3QJJXJkeCwgJXJkeAorCS5wMmFsaWduIDQsLDIKKwlqZQlMKG1tX3JldHVybikKKworCWNtcGIJJDgsICVkbAorCWphCUwobW1fcmVtYWluaW5nXzlfMTZfYnl0ZXNfZm9yd2FyZCkKKwljbXBiCSQ0LCAlZGwKKwkucDJhbGlnbiA0LCw1CisJamEJTChtbV9yZW1haW5pbmdfNV84X2J5dGVzX2ZvcndhcmQpCisJY21wYgkkMiwgJWRsCisJLnAyYWxpZ24gNCwsMQorCWphCUwobW1fcmVtYWluaW5nXzNfNF9ieXRlc19mb3J3YXJkKQorCW1vdnpibAktMSglcjksJXJkeCksICVlc2kKKwltb3Z6YmwJKCVyOSksICVlYngKKwltb3ZiCSVzaWwsIC0xKCVyOCwlcmR4KQorCW1vdmIJJWJsLCAoJXI4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9yZW1haW5pbmdfMzNfNjRfYnl0ZXNfZm9yd2FyZCk6CisJbW92ZHF1CSglcjkpLCAleG1tMAorCW1vdmRxdQkxNiglcjkpLCAleG1tMQorCW1vdmRxdQktMzIoJXI5LCAlcmR4KSwgJXhtbTIKKwltb3ZkcXUJLTE2KCVyOSwgJXJkeCksICV4bW0zCisJbW92ZHF1CSV4bW0wLCAoJXI4KQorCW1vdmRxdQkleG1tMSwgMTYoJXI4KQorCW1vdmRxdQkleG1tMiwgLTMyKCVyOCwgJXJkeCkKKwltb3ZkcXUJJXhtbTMsIC0xNiglcjgsICVyZHgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX3JlbWFpbmluZ18xN18zMl9ieXRlc19mb3J3YXJkKToKKwltb3ZkcXUJKCVyOSksICV4bW0wCisJbW92ZHF1CS0xNiglcjksICVyZHgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVyOCkKKwltb3ZkcXUJJXhtbTEsIC0xNiglcjgsICVyZHgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX3JlbWFpbmluZ181XzhfYnl0ZXNfZm9yd2FyZCk6CisJbW92bAkoJXI5KSwgJWVzaQorCW1vdmwJLTQoJXI5LCVyZHgpLCAlZWJ4CisJbW92bAklZXNpLCAoJXI4KQorCW1vdmwJJWVieCwgLTQoJXI4LCVyZHgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX3JlbWFpbmluZ185XzE2X2J5dGVzX2ZvcndhcmQpOgorCW1vdgkoJXI5KSwgJXJzaQorCW1vdgktOCglcjksICVyZHgpLCAlcmJ4CisJbW92CSVyc2ksICglcjgpCisJbW92CSVyYngsIC04KCVyOCwgJXJkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fcmVtYWluaW5nXzNfNF9ieXRlc19mb3J3YXJkKToKKwltb3Z6d2wJLTIoJXI5LCVyZHgpLCAlZXNpCisJbW92endsCSglcjkpLCAlZWJ4CisJbW92dwklc2ksIC0yKCVyOCwlcmR4KQorCW1vdncJJWJ4LCAoJXI4KQorCWptcAlMKG1tX3JldHVybikKKworTChtbV9sZW5fMF8xNl9ieXRlc19mb3J3YXJkKToKKwl0ZXN0YgkkMjQsICVkbAorCWpuZQlMKG1tX2xlbl85XzE2X2J5dGVzX2ZvcndhcmQpCisJdGVzdGIJJDQsICVkbAorCS5wMmFsaWduIDQsLDUKKwlqbmUJTChtbV9sZW5fNV84X2J5dGVzX2ZvcndhcmQpCisJdGVzdAklcmR4LCAlcmR4CisJLnAyYWxpZ24gNCwsMgorCWplCUwobW1fcmV0dXJuKQorCXRlc3RiCSQyLCAlZGwKKwkucDJhbGlnbiA0LCwxCisJam5lCUwobW1fbGVuXzJfNF9ieXRlc19mb3J3YXJkKQorCW1vdnpibAktMSglcnNpLCVyZHgpLCAlZWJ4CisJbW92emJsCSglcnNpKSwgJWVzaQorCW1vdmIJJWJsLCAtMSglcmRpLCVyZHgpCisJbW92Ygklc2lsLCAoJXJkaSkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzJfNF9ieXRlc19mb3J3YXJkKToKKwltb3Z6d2wJLTIoJXJzaSwlcmR4KSwgJWVieAorCW1vdnp3bAkoJXJzaSksICVlc2kKKwltb3Z3CSVieCwgLTIoJXJkaSwlcmR4KQorCW1vdncJJXNpLCAoJXJkaSkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzVfOF9ieXRlc19mb3J3YXJkKToKKwltb3ZsCSglcnNpKSwgJWVieAorCW1vdmwJLTQoJXJzaSwlcmR4KSwgJWVzaQorCW1vdmwJJWVieCwgKCVyZGkpCisJbW92bAklZXNpLCAtNCglcmRpLCVyZHgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl85XzE2X2J5dGVzX2ZvcndhcmQpOgorCW1vdgkoJXJzaSksICVyYngKKwltb3YJLTgoJXJzaSwgJXJkeCksICVyc2kKKwltb3YJJXJieCwgKCVyZGkpCisJbW92CSVyc2ksIC04KCVyZGksICVyZHgpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX3JlY2FsY19sZW4pOgorLyogQ29tcHV0ZSBpbiAlcmR4IGhvdyBtYW55IGJ5dGVzIGFyZSBsZWZ0IHRvIGNvcHkgYWZ0ZXIKKwl0aGUgbWFpbiBsb29wIHN0b3BzLiAgKi8KKwltb3YgCSVyYngsICVyZHgKKwlzdWIgCSVyZGksICVyZHgKKy8qIFRoZSBjb2RlIGZvciBjb3B5aW5nIGJhY2t3YXJkcy4gICovCitMKG1tX2xlbl8wX29yX21vcmVfYmFja3dhcmQpOgorCisvKiBOb3cgZG8gY2hlY2tzIGZvciBsZW5ndGhzLiBXZSBkbyBbMC4uMTZdLCBbMTYuLjMyXSwgWzMyLi42NF0sIFs2NC4uMTI4XQorCXNlcGFyYXRlbHkuICAqLworCWNtcAkkMTYsICVyZHgKKwlqYmUJTChtbV9sZW5fMF8xNl9ieXRlc19iYWNrd2FyZCkKKworCWNtcAkkMzIsICVyZHgKKwlqYQlMKG1tX2xlbl8zMl9vcl9tb3JlX2JhY2t3YXJkKQorCisvKiBDb3B5IFswLi4zMl0gYW5kIHJldHVybi4gICovCisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJLTE2KCVyc2ksICVyZHgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0xLCAtMTYoJXJkaSwgJXJkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzMyX29yX21vcmVfYmFja3dhcmQpOgorCWNtcAkkNjQsICVyZHgKKwlqYQlMKG1tX2xlbl82NF9vcl9tb3JlX2JhY2t3YXJkKQorCisvKiBDb3B5IFswLi42NF0gYW5kIHJldHVybi4gICovCisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXJzaSksICV4bW0xCisJbW92ZHF1CS0xNiglcnNpLCAlcmR4KSwgJXhtbTIKKwltb3ZkcXUJLTMyKCVyc2ksICVyZHgpLCAleG1tMworCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0xLCAxNiglcmRpKQorCW1vdmRxdQkleG1tMiwgLTE2KCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW0zLCAtMzIoJXJkaSwgJXJkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzY0X29yX21vcmVfYmFja3dhcmQpOgorCWNtcAkkMTI4LCAlcmR4CisJamEJTChtbV9sZW5fMTI4X29yX21vcmVfYmFja3dhcmQpCisKKy8qIENvcHkgWzAuLjEyOF0gYW5kIHJldHVybi4gICovCisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXJzaSksICV4bW0xCisJbW92ZHF1CTMyKCVyc2kpLCAleG1tMgorCW1vdmRxdQk0OCglcnNpKSwgJXhtbTMKKwltb3ZkcXUJLTY0KCVyc2ksICVyZHgpLCAleG1tNAorCW1vdmRxdQktNDgoJXJzaSwgJXJkeCksICV4bW01CisJbW92ZHF1CS0zMiglcnNpLCAlcmR4KSwgJXhtbTYKKwltb3ZkcXUJLTE2KCVyc2ksICVyZHgpLCAleG1tNworCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0xLCAxNiglcmRpKQorCW1vdmRxdQkleG1tMiwgMzIoJXJkaSkKKwltb3ZkcXUJJXhtbTMsIDQ4KCVyZGkpCisJbW92ZHF1CSV4bW00LCAtNjQoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTUsIC00OCglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tNiwgLTMyKCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW03LCAtMTYoJXJkaSwgJXJkeCkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzEyOF9vcl9tb3JlX2JhY2t3YXJkKToKKy8qIEFsaWduaW5nIHRoZSBhZGRyZXNzIG9mIGRlc3RpbmF0aW9uLiBXZSBuZWVkIHRvIHNhdmUKKwkxNiBiaXRzIGZyb20gdGhlIHNvdXJjZSBpbiBvcmRlciBub3QgdG8gb3ZlcndyaXRlIHRoZW0uICAqLworCW1vdmRxdQktMTYoJXJzaSwgJXJkeCksICV4bW0wCisJbW92ZHF1CS0zMiglcnNpLCAlcmR4KSwgJXhtbTEKKwltb3ZkcXUJLTQ4KCVyc2ksICVyZHgpLCAleG1tMgorCW1vdmRxdQktNjQoJXJzaSwgJXJkeCksICV4bW0zCisKKwlsZWEJKCVyZGksICVyZHgpLCAlcjkKKwlhbmQJJC02NCwgJXI5IC8qIHI5ID0gYWxpZ25lZCBkc3QgKi8KKworCW1vdgklcnNpLCAlcjgKKwlzdWIJJXJkaSwgJXI4IC8qIHI4ID0gc3JjIC0gZHN0LCBkaWZmICovCisKKwltb3ZkcXUJLTE2KCVyOSwgJXI4KSwgJXhtbTQKKwltb3ZkcXUJLTMyKCVyOSwgJXI4KSwgJXhtbTUKKwltb3ZkcXUJLTQ4KCVyOSwgJXI4KSwgJXhtbTYKKwltb3ZkcXUJLTY0KCVyOSwgJXI4KSwgJXhtbTcKKworCW1vdmRxdQkleG1tMCwgLTE2KCVyZGksICVyZHgpCisJbW92ZHF1CSV4bW0xLCAtMzIoJXJkaSwgJXJkeCkKKwltb3ZkcXUJJXhtbTIsIC00OCglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tMywgLTY0KCVyZGksICVyZHgpCisJbW92ZHFhCSV4bW00LCAtMTYoJXI5KQorCW1vdmFwcwkleG1tNSwgLTMyKCVyOSkKKwltb3ZhcHMJJXhtbTYsIC00OCglcjkpCisJbW92YXBzCSV4bW03LCAtNjQoJXI5KQorCWxlYQktNjQoJXI5KSwgJXI5CisKKwlsZWEJNjQoJXJkaSksICVyYngKKwlhbmQJJC02NCwgJXJieAorCisJY21wCSVyOSwgJXJieAorCWphZQlMKG1tX3JlY2FsY19sZW4pCisKKwljbXAJJFNIQVJFRF9DQUNIRV9TSVpFX0hBTEYsICVyZHgKKwlqYWUJTChtbV9sYXJnZV9wYWdlX2xvb3BfYmFja3dhcmQpCisKKwkucDJhbGlnbiA0CitMKG1tX21haW5fbG9vcF9iYWNrd2FyZCk6CisKKwlwcmVmZXRjaHQwIC0xMjgoJXI5LCAlcjgpCisKKwltb3ZkcXUJLTY0KCVyOSwgJXI4KSwgJXhtbTAKKwltb3ZkcXUJLTQ4KCVyOSwgJXI4KSwgJXhtbTEKKwltb3ZkcXUJLTMyKCVyOSwgJXI4KSwgJXhtbTIKKwltb3ZkcXUJLTE2KCVyOSwgJXI4KSwgJXhtbTMKKwltb3ZkcWEJJXhtbTAsIC02NCglcjkpCisJbW92YXBzCSV4bW0xLCAtNDgoJXI5KQorCW1vdmFwcwkleG1tMiwgLTMyKCVyOSkKKwltb3ZhcHMJJXhtbTMsIC0xNiglcjkpCisJbGVhCS02NCglcjkpLCAlcjkKKwljbXAJJXI5LCAlcmJ4CisJamIJTChtbV9tYWluX2xvb3BfYmFja3dhcmQpCisJam1wCUwobW1fcmVjYWxjX2xlbikKKworLyogQ29weSBbMC4uMTZdIGFuZCByZXR1cm4uICAqLworTChtbV9sZW5fMF8xNl9ieXRlc19iYWNrd2FyZCk6CisJdGVzdGIJJDI0LCAlZGwKKwlqbnoJTChtbV9sZW5fOV8xNl9ieXRlc19iYWNrd2FyZCkKKwl0ZXN0YgkkNCwgJWRsCisJLnAyYWxpZ24gNCwsNQorCWpueglMKG1tX2xlbl81XzhfYnl0ZXNfYmFja3dhcmQpCisJdGVzdAklcmR4LCAlcmR4CisJLnAyYWxpZ24gNCwsMgorCWplCUwobW1fcmV0dXJuKQorCXRlc3RiCSQyLCAlZGwKKwkucDJhbGlnbiA0LCwxCisJam5lCUwobW1fbGVuXzNfNF9ieXRlc19iYWNrd2FyZCkKKwltb3Z6YmwJLTEoJXJzaSwlcmR4KSwgJWVieAorCW1vdnpibAkoJXJzaSksICVlY3gKKwltb3ZiCSVibCwgLTEoJXJkaSwlcmR4KQorCW1vdmIJJWNsLCAoJXJkaSkKKwlqbXAJTChtbV9yZXR1cm4pCisKK0wobW1fbGVuXzNfNF9ieXRlc19iYWNrd2FyZCk6CisJbW92endsCS0yKCVyc2ksJXJkeCksICVlYngKKwltb3Z6d2wJKCVyc2kpLCAlZWN4CisJbW92dwklYngsIC0yKCVyZGksJXJkeCkKKwltb3Z3CSVjeCwgKCVyZGkpCisJam1wCUwobW1fcmV0dXJuKQorCitMKG1tX2xlbl85XzE2X2J5dGVzX2JhY2t3YXJkKToKKwltb3ZsCS00KCVyc2ksJXJkeCksICVlYngKKwltb3ZsCS04KCVyc2ksJXJkeCksICVlY3gKKwltb3ZsCSVlYngsIC00KCVyZGksJXJkeCkKKwltb3ZsCSVlY3gsIC04KCVyZGksJXJkeCkKKwlzdWIJJDgsICVyZHgKKwlqbXAJTChtbV9sZW5fMF8xNl9ieXRlc19iYWNrd2FyZCkKKworTChtbV9sZW5fNV84X2J5dGVzX2JhY2t3YXJkKToKKwltb3ZsCSglcnNpKSwgJWVieAorCW1vdmwJLTQoJXJzaSwlcmR4KSwgJWVjeAorCW1vdmwJJWVieCwgKCVyZGkpCisJbW92bAklZWN4LCAtNCglcmRpLCVyZHgpCisKK0wobW1fcmV0dXJuKToKKwlSRVRVUk4KKworLyogQmlnIGxlbmd0aCBjb3B5IGZvcndhcmQgcGFydC4gICovCisKKwkucDJhbGlnbiA0CitMKG1tX2xhcmdlX3BhZ2VfbG9vcF9mb3J3YXJkKToKKwltb3ZkcXUJKCVyOCwgJXJzaSksICV4bW0wCisJbW92ZHF1CTE2KCVyOCwgJXJzaSksICV4bW0xCisJbW92ZHF1CTMyKCVyOCwgJXJzaSksICV4bW0yCisJbW92ZHF1CTQ4KCVyOCwgJXJzaSksICV4bW0zCisJbW92bnRkcQkleG1tMCwgKCVyOCkKKwltb3ZudGRxCSV4bW0xLCAxNiglcjgpCisJbW92bnRkcQkleG1tMiwgMzIoJXI4KQorCW1vdm50ZHEJJXhtbTMsIDQ4KCVyOCkKKwlsZWEgCTY0KCVyOCksICVyOAorCWNtcAklcjgsICVyYngKKwlqYQlMKG1tX2xhcmdlX3BhZ2VfbG9vcF9mb3J3YXJkKQorCXNmZW5jZQorCWptcAlMKG1tX2NvcHlfcmVtYWluaW5nX2ZvcndhcmQpCisKKy8qIEJpZyBsZW5ndGggY29weSBiYWNrd2FyZCBwYXJ0LiAgKi8KKwkucDJhbGlnbiA0CitMKG1tX2xhcmdlX3BhZ2VfbG9vcF9iYWNrd2FyZCk6CisJbW92ZHF1CS02NCglcjksICVyOCksICV4bW0wCisJbW92ZHF1CS00OCglcjksICVyOCksICV4bW0xCisJbW92ZHF1CS0zMiglcjksICVyOCksICV4bW0yCisJbW92ZHF1CS0xNiglcjksICVyOCksICV4bW0zCisJbW92bnRkcQkleG1tMCwgLTY0KCVyOSkKKwltb3ZudGRxCSV4bW0xLCAtNDgoJXI5KQorCW1vdm50ZHEJJXhtbTIsIC0zMiglcjkpCisJbW92bnRkcQkleG1tMywgLTE2KCVyOSkKKwlsZWEgCS02NCglcjkpLCAlcjkKKwljbXAJJXI5LCAlcmJ4CisJamIJTChtbV9sYXJnZV9wYWdlX2xvb3BfYmFja3dhcmQpCisJc2ZlbmNlCisJam1wCUwobW1fcmVjYWxjX2xlbikKKworRU5EIChNRU1NT1ZFKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1tZW1zZXQtc2xtLlMgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLW1lbXNldC1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmNhZmFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1tZW1zZXQtc2xtLlMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaWZuZGVmIE1FTVNFVAorIyBkZWZpbmUgTUVNU0VUCQltZW1zZXQKKyNlbmRpZgorCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgQUxJR04KKyMgZGVmaW5lIEFMSUdOKG4pCS5wMmFsaWduIG4KKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJCQkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCQkJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsJXAorCS5nbG9ibCBuYW1lOwkJCVwKK25hbWU6CQkJCQlcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkJCQlcCisJY2ZpX2VuZHByb2M7CQkJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisKKwkuc2VjdGlvbiAudGV4dC5zc2UyLCJheCIsQHByb2diaXRzCitFTlRSWSAoTUVNU0VUKQorCW1vdnEJJXJkaSwgJXJheAorI2lmZGVmIFVTRV9BU19CWkVST19QCisJbW92CSVyc2ksICVyZHgKKwl4b3IJJXJjeCwgJXJjeAorI2Vsc2UKKwlhbmQJJDB4ZmYsICVyc2kKKwltb3YJJDB4MDEwMTAxMDEwMTAxMDEwMSwgJXJjeAorCWltdWwJJXJzaSwgJXJjeAorI2VuZGlmCisJY21wcQkkMTYsICVyZHgKKwlqYWUJTCgxNmJ5dGVzb3Jtb3JlKQorCXRlc3RiCSQ4LCAlZGwKKwlqbnoJTCg4XzE1Ynl0ZXMpCisJdGVzdGIJJDQsICVkbAorCWpueglMKDRfN2J5dGVzKQorCXRlc3RiCSQyLCAlZGwKKwlqbnoJTCgyXzNieXRlcykKKwl0ZXN0YgkkMSwgJWRsCisJanoJTChyZXR1cm4pCisJbW92YgklY2wsICglcmRpKQorTChyZXR1cm4pOgorCXJldAorCitMKDhfMTVieXRlcyk6CisJbW92cQklcmN4LCAoJXJkaSkKKwltb3ZxCSVyY3gsIC04KCVyZGksICVyZHgpCisJcmV0CisKK0woNF83Ynl0ZXMpOgorCW1vdmwJJWVjeCwgKCVyZGkpCisJbW92bAklZWN4LCAtNCglcmRpLCAlcmR4KQorCXJldAorCitMKDJfM2J5dGVzKToKKwltb3Z3CSVjeCwgKCVyZGkpCisJbW92dwklY3gsIC0yKCVyZGksICVyZHgpCisJcmV0CisKKwlBTElHTiAoNCkKK0woMTZieXRlc29ybW9yZSk6CisjaWZkZWYgVVNFX0FTX0JaRVJPX1AKKwlweG9yCSV4bW0wLCAleG1tMAorI2Vsc2UKKwltb3ZkCSVyY3gsICV4bW0wCisJcHNodWZkCSQwLCAleG1tMCwgJXhtbTAKKyNlbmRpZgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0wLCAtMTYoJXJkaSwgJXJkeCkKKwljbXBxCSQzMiwgJXJkeAorCWpiZQlMKDMyYnl0ZXNsZXNzKQorCW1vdmRxdQkleG1tMCwgMTYoJXJkaSkKKwltb3ZkcXUJJXhtbTAsIC0zMiglcmRpLCAlcmR4KQorCWNtcHEJJDY0LCAlcmR4CisJamJlCUwoNjRieXRlc2xlc3MpCisJbW92ZHF1CSV4bW0wLCAzMiglcmRpKQorCW1vdmRxdQkleG1tMCwgNDgoJXJkaSkKKwltb3ZkcXUJJXhtbTAsIC02NCglcmRpLCAlcmR4KQorCW1vdmRxdQkleG1tMCwgLTQ4KCVyZGksICVyZHgpCisJY21wcQkkMTI4LCAlcmR4CisJamEJTCgxMjhieXRlc21vcmUpCitMKDMyYnl0ZXNsZXNzKToKK0woNjRieXRlc2xlc3MpOgorCXJldAorCisJQUxJR04gKDQpCitMKDEyOGJ5dGVzbW9yZSk6CisJbGVhcQk2NCglcmRpKSwgJXJjeAorCWFuZHEJJC02NCwgJXJjeAorCW1vdnEJJXJkeCwgJXI4CisJYWRkcQklcmRpLCAlcmR4CisJYW5kcQkkLTY0LCAlcmR4CisJY21wcQklcmN4LCAlcmR4CisJamUJTChyZXR1cm4pCisKKyNpZmRlZiBTSEFSRURfQ0FDSEVfU0laRQorCWNtcAkkU0hBUkVEX0NBQ0hFX1NJWkUsICVyOAorI2Vsc2UKKwljbXAJX194ODZfNjRfc2hhcmVkX2NhY2hlX3NpemUoJXJpcCksICVyOAorI2VuZGlmCisJamEJTCgxMjhieXRlc21vcmVfbnQpCisKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNtb3JlX25vcm1hbCk6CisJbW92ZHFhCSV4bW0wLCAoJXJjeCkKKwltb3ZhcHMJJXhtbTAsIDB4MTAoJXJjeCkKKwltb3ZhcHMJJXhtbTAsIDB4MjAoJXJjeCkKKwltb3ZhcHMJJXhtbTAsIDB4MzAoJXJjeCkKKwlhZGRxCSQ2NCwgJXJjeAorCWNtcHEJJXJjeCwgJXJkeAorCWpuZQlMKDEyOGJ5dGVzbW9yZV9ub3JtYWwpCisJcmV0CisKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNtb3JlX250KToKKwltb3ZudGRxCSV4bW0wLCAoJXJjeCkKKwltb3ZudGRxCSV4bW0wLCAweDEwKCVyY3gpCisJbW92bnRkcQkleG1tMCwgMHgyMCglcmN4KQorCW1vdm50ZHEJJXhtbTAsIDB4MzAoJXJjeCkKKwlsZWFxCTY0KCVyY3gpLCAlcmN4CisJY21wcQklcmN4LCAlcmR4CisJam5lCUwoMTI4Ynl0ZXNtb3JlX250KQorCXNmZW5jZQorCXJldAorCitFTkQgKE1FTVNFVCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RwY3B5LXNsbS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHBjcHktc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkMmQ0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RwY3B5LXNsbS5TCkBAIC0wLDAgKzEsMzMgQEAKKy8qDQorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbg0KK0FsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisqLw0KKw0KKyNkZWZpbmUgVVNFX0FTX1NUUENQWQ0KKyNkZWZpbmUgU1RSQ1BZCQlzdHBjcHkNCisjaW5jbHVkZSAic3NlMi1zdHJjcHktc2xtLlMiDQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHBuY3B5LXNsbS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHBuY3B5LXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjY2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cG5jcHktc2xtLlMKQEAgLTAsMCArMSwzNCBAQAorLyoNCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uDQorQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisNCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorDQorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORA0KK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7DQorTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUw0KK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyovDQorDQorI2RlZmluZSBVU0VfQVNfU1RSTkNQWQ0KKyNkZWZpbmUgVVNFX0FTX1NUUENQWQ0KKyNkZWZpbmUgU1RSQ1BZCQlzdHBuY3B5DQorI2luY2x1ZGUgInNzZTItc3RyY3B5LXNsbS5TIg0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RyY2F0LXNsbS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJjYXQtc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4MjA3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RyY2F0LXNsbS5TCkBAIC0wLDAgKzEsODcgQEAKKy8qDQorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbg0KK0FsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisqLw0KKw0KKyNpZm5kZWYgU1RSQ0FUDQorIyBkZWZpbmUgU1RSQ0FUCQlzdHJjYXQNCisjZW5kaWYNCisNCisjaWZuZGVmIEwNCisjIGRlZmluZSBMKGxhYmVsKQkJLkwjI2xhYmVsDQorI2VuZGlmDQorDQorI2lmbmRlZiBjZmlfc3RhcnRwcm9jDQorIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkJIC5jZmlfc3RhcnRwcm9jDQorI2VuZGlmDQorDQorI2lmbmRlZiBjZmlfZW5kcHJvYw0KKyMgZGVmaW5lIGNmaV9lbmRwcm9jCQkuY2ZpX2VuZHByb2MNCisjZW5kaWYNCisNCisjaWZuZGVmIEVOVFJZDQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCVwNCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsJCVwNCisJLmdsb2JsIG5hbWU7CQlcDQorCS5wMmFsaWduIDQ7CQlcDQorbmFtZToJCVwNCisJY2ZpX3N0YXJ0cHJvYw0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgRU5EDQorIyBkZWZpbmUgRU5EKG5hbWUpCQlcDQorCWNmaV9lbmRwcm9jOwkJXA0KKwkuc2l6ZSBuYW1lLCAuLW5hbWUNCisjZW5kaWYNCisNCisjZGVmaW5lIFVTRV9BU19TVFJDQVQNCisNCisudGV4dA0KK0VOVFJZIChTVFJDQVQpDQorCW1vdgklcmRpLCAlcjkNCisjaWZkZWYgVVNFX0FTX1NUUk5DQVQNCisJbW92CSVyZHgsICVyOA0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgUkVUVVJOIGptcCBMKFN0cmNweSkNCisjaW5jbHVkZSAic3NlMi1zdHJsZW4tc2xtLlMiDQorDQorI3VuZGVmIFJFVFVSTg0KKyNkZWZpbmUgUkVUVVJOIHJldA0KKw0KK0woU3RyY3B5KToNCisJbGVhCSglcjksICVyYXgpLCAlcmRpDQorCW1vdgklcnNpLCAlcmN4DQorCW1vdgklcjksICVyYXgJLyogc2F2ZSByZXN1bHQgKi8NCisNCisjaWZkZWYgVVNFX0FTX1NUUk5DQVQNCisJdGVzdAklcjgsICVyOA0KKwlqeglMKEV4aXRaZXJvKQ0KKyMgZGVmaW5lIFVTRV9BU19TVFJOQ1BZDQorI2VuZGlmDQorI2luY2x1ZGUgInNzZTItc3RyY3B5LXNsbS5TIg0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RyY3B5LXNsbS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJjcHktc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxNDZiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RyY3B5LXNsbS5TCkBAIC0wLDAgKzEsMTkyMSBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBVU0VfQVNfU1RSQ0FUCisKKyMgaWZuZGVmIFNUUkNQWQorIyAgZGVmaW5lIFNUUkNQWQlzdHJjcHkKKyMgZW5kaWYKKworIyBpZm5kZWYgTAorIyAgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorIyBlbmRpZgorCisjIGlmbmRlZiBjZmlfc3RhcnRwcm9jCisjICBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYworIyBlbmRpZgorCisjIGlmbmRlZiBjZmlfZW5kcHJvYworIyAgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYworIyBlbmRpZgorCisjIGlmbmRlZiBFTlRSWQorIyAgZGVmaW5lIEVOVFJZKG5hbWUpCVwKKwkudHlwZSBuYW1lLCBAZnVuY3Rpb247CVwKKwkuZ2xvYmwgbmFtZTsJXAorCS5wMmFsaWduIDQ7CVwKK25hbWU6CVwKKwljZmlfc3RhcnRwcm9jCisjIGVuZGlmCisKKyMgaWZuZGVmIEVORAorIyAgZGVmaW5lIEVORChuYW1lKQlcCisJY2ZpX2VuZHByb2M7CVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyMgZW5kaWYKKworI2VuZGlmCisKKyNkZWZpbmUgSk1QVEJMKEksIEIpCUkgLSBCCisjZGVmaW5lIEJSQU5DSF9UT19KTVBUQkxfRU5UUlkoVEFCTEUsIElOREVYLCBTQ0FMRSkJXAorCWxlYQlUQUJMRSglcmlwKSwgJXIxMTsJXAorCW1vdnNscQkoJXIxMSwgSU5ERVgsIFNDQUxFKSwgJXJjeDsJXAorCWxlYQkoJXIxMSwgJXJjeCksICVyY3g7CVwKKwlqbXAJKiVyY3gKKworI2lmbmRlZiBVU0VfQVNfU1RSQ0FUCisKKyMgZGVmaW5lIFJFVFVSTiByZXQKKworLnRleHQKK0VOVFJZIChTVFJDUFkpCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJbW92CSVyZHgsICVyOAorCXRlc3QJJXI4LCAlcjgKKwlqeglMKEV4aXRaZXJvKQorIyBlbmRpZgorCW1vdgklcnNpLCAlcmN4CisjIGlmbmRlZiBVU0VfQVNfU1RQQ1BZCisJbW92CSVyZGksICVyYXggICAgICAvKiBzYXZlIHJlc3VsdCAqLworIyBlbmRpZgorCisjZW5kaWYKKwlhbmQJJDYzLCAlcmN4CisJY21wCSQzMiwgJXJjeAorCWpiZQlMKFNvdXJjZVN0cmluZ0FsaWdubWVudExlc3MzMikKKworCWFuZAkkLTE2LCAlcnNpCisJYW5kCSQxNSwgJXJjeAorCXB4b3IJJXhtbTAsICV4bW0wCisJcHhvcgkleG1tMSwgJXhtbTEKKworCXBjbXBlcWIJKCVyc2kpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlcmR4CisJc2hyCSVjbCwgJXJkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjIGlmIGRlZmluZWQgVVNFX0FTX1NUUENQWSB8fCBkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwltb3YJJDE2LCAlcjEwCisJc3ViCSVyY3gsICVyMTAKKwljbXAJJXIxMCwgJXI4CisjIGVsc2UKKwltb3YJJDE3LCAlcjEwCisJc3ViCSVyY3gsICVyMTAKKwljbXAJJXIxMCwgJXI4CisjIGVuZGlmCisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzVGFpbENhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwpCisKKwlwY21wZXFiCTE2KCVyc2kpLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlhZGQJJDE2LCAlcjEwCisJY21wCSVyMTAsICVyOAorCWpiZQlMKENvcHlGcm9tMVRvMzJCeXRlc0Nhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKENvcHlGcm9tMVRvMzJCeXRlcykKKworCW1vdmRxdQkoJXJzaSwgJXJjeCksICV4bW0xICAgLyogY29weSAxNiBieXRlcyAqLworCW1vdmRxdQkleG1tMSwgKCVyZGkpCisKKy8qIElmIHNvdXJjZSBhZHJlc3MgYWxpZ25tZW50ICE9IGRlc3RpbmF0aW9uIGFkcmVzcyBhbGlnbm1lbnQgKi8KKwkucDJhbGlnbiA0CitMKFVuYWxpZ24xNkJvdGgpOgorCXN1YgklcmN4LCAlcmRpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlhZGQJJXJjeCwgJXI4CisjZW5kaWYKKwltb3YJJDE2LCAlcmN4CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZhcHMJMTYoJXJzaSwgJXJjeCksICV4bW0yCisJbW92ZHF1CSV4bW0xLCAoJXJkaSwgJXJjeCkKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJYWRkCSQxNiwgJXJjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ0OCwgJXI4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklcmR4LCAlcmR4CisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMikKKyNlbHNlCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZhcHMJMTYoJXJzaSwgJXJjeCksICV4bW0zCisJbW92ZHF1CSV4bW0yLCAoJXJkaSwgJXJjeCkKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJYWRkCSQxNiwgJXJjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJXI4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklcmR4LCAlcmR4CisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMykKKyNlbHNlCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZhcHMJMTYoJXJzaSwgJXJjeCksICV4bW00CisJbW92ZHF1CSV4bW0zLCAoJXJkaSwgJXJjeCkKKwlwY21wZXFiCSV4bW00LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJYWRkCSQxNiwgJXJjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJXI4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklcmR4LCAlcmR4CisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tNCkKKyNlbHNlCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZhcHMJMTYoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHF1CSV4bW00LCAoJXJkaSwgJXJjeCkKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJYWRkCSQxNiwgJXJjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJXI4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklcmR4LCAlcmR4CisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMSkKKyNlbHNlCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZhcHMJMTYoJXJzaSwgJXJjeCksICV4bW0yCisJbW92ZHF1CSV4bW0xLCAoJXJkaSwgJXJjeCkKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJYWRkCSQxNiwgJXJjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJXI4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklcmR4LCAlcmR4CisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMikKKyNlbHNlCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZhcHMJMTYoJXJzaSwgJXJjeCksICV4bW0zCisJbW92ZHF1CSV4bW0yLCAoJXJkaSwgJXJjeCkKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJYWRkCSQxNiwgJXJjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJXI4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklcmR4LCAlcmR4CisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMykKKyNlbHNlCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwltb3ZkcXUJJXhtbTMsICglcmRpLCAlcmN4KQorCW1vdgklcnNpLCAlcmR4CisJbGVhCTE2KCVyc2ksICVyY3gpLCAlcnNpCisJYW5kCSQtMHg0MCwgJXJzaQorCXN1YgklcnNpLCAlcmR4CisJc3ViCSVyZHgsICVyZGkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCWxlYQkxMjgoJXI4LCAlcmR4KSwgJXI4CisjZW5kaWYKK0woVW5hbGlnbmVkNjRMb29wKToKKwltb3ZhcHMJKCVyc2kpLCAleG1tMgorCW1vdmFwcwkleG1tMiwgJXhtbTQKKwltb3ZhcHMJMTYoJXJzaSksICV4bW01CisJbW92YXBzCTMyKCVyc2kpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDgoJXJzaSksICV4bW03CisJcG1pbnViCSV4bW01LCAleG1tMgorCXBtaW51YgkleG1tNywgJXhtbTMKKwlwbWludWIJJXhtbTIsICV4bW0zCisJcGNtcGVxYgkleG1tMCwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJXJkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ2NCwgJXI4CisJamJlCUwoVW5hbGlnbmVkTGVhdmVDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChVbmFsaWduZWQ2NExlYXZlKQorCitMKFVuYWxpZ25lZDY0TG9vcF9zdGFydCk6CisJYWRkCSQ2NCwgJXJkaQorCWFkZAkkNjQsICVyc2kKKwltb3ZkcXUJJXhtbTQsIC02NCglcmRpKQorCW1vdmFwcwkoJXJzaSksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCW1vdmRxdQkleG1tNSwgLTQ4KCVyZGkpCisJbW92YXBzCTE2KCVyc2kpLCAleG1tNQorCXBtaW51YgkleG1tNSwgJXhtbTIKKwltb3ZhcHMJMzIoJXJzaSksICV4bW0zCisJbW92ZHF1CSV4bW02LCAtMzIoJXJkaSkKKwltb3ZhcHMJJXhtbTMsICV4bW02CisJbW92ZHF1CSV4bW03LCAtMTYoJXJkaSkKKwltb3ZhcHMJNDgoJXJzaSksICV4bW03CisJcG1pbnViCSV4bW03LCAleG1tMworCXBtaW51YgkleG1tMiwgJXhtbTMKKwlwY21wZXFiCSV4bW0wLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlcmR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDY0LCAlcjgKKwlqYmUJTChVbmFsaWduZWRMZWF2ZUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJXJkeCwgJXJkeAorCWp6CUwoVW5hbGlnbmVkNjRMb29wX3N0YXJ0KQorCitMKFVuYWxpZ25lZDY0TGVhdmUpOgorCXB4b3IJJXhtbTEsICV4bW0xCisKKwlwY21wZXFiCSV4bW00LCAleG1tMAorCXBjbXBlcWIJJXhtbTUsICV4bW0xCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKwlwbW92bXNrYiAleG1tMSwgJXJjeAorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZF8wKQorCXRlc3QJJXJjeCwgJXJjeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZF8xNikKKworCXBjbXBlcWIJJXhtbTYsICV4bW0wCisJcGNtcGVxYgkleG1tNywgJXhtbTEKKwlwbW92bXNrYiAleG1tMCwgJXJkeAorCXBtb3Ztc2tiICV4bW0xLCAlcmN4CisJdGVzdAklcmR4LCAlcmR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkXzMyKQorCisJYnNmCSVyY3gsICVyZHgKKwltb3ZkcXUJJXhtbTQsICglcmRpKQorCW1vdmRxdQkleG1tNSwgMTYoJXJkaSkKKwltb3ZkcXUJJXhtbTYsIDMyKCVyZGkpCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisjIGlmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNDgoJXJkaSwgJXJkeCksICVyYXgKKyMgZW5kaWYKKwltb3ZkcXUJJXhtbTcsIDQ4KCVyZGkpCisJYWRkCSQxNSwgJXI4CisJc3ViCSVyZHgsICVyOAorCWxlYQk0OSglcmRpLCAlcmR4KSwgJXJkaQorCWptcAlMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2Vsc2UKKwlhZGQJJDQ4LCAlcnNpCisJYWRkCSQ0OCwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXJkeCwgNCkKKyNlbmRpZgorCisvKiBJZiBzb3VyY2UgYWRyZXNzIGFsaWdubWVudCA9PSBkZXN0aW5hdGlvbiBhZHJlc3MgYWxpZ25tZW50ICovCisKK0woU291cmNlU3RyaW5nQWxpZ25tZW50TGVzczMyKToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxdQkoJXJzaSksICV4bW0xCisJbW92ZHF1CTE2KCVyc2kpLCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjIGlmIGRlZmluZWQgVVNFX0FTX1NUUENQWSB8fCBkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwljbXAJJDE2LCAlcjgKKyMgZWxzZQorCWNtcAkkMTcsICVyOAorIyBlbmRpZgorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklcmR4LCAlcmR4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVGFpbDEpCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCW1vdmRxdQkleG1tMSwgKCVyZGkpCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjIGlmIGRlZmluZWQgVVNFX0FTX1NUUENQWSB8fCBkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwljbXAJJDMyLCAlcjgKKyMgZWxzZQorCWNtcAkkMzMsICVyOAorIyBlbmRpZgorCWpiZQlMKENvcHlGcm9tMVRvMzJCeXRlczFDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChDb3B5RnJvbTFUbzMyQnl0ZXMxKQorCisJYW5kCSQxNSwgJXJjeAorCWFuZAkkLTE2LCAlcnNpCisKKwlqbXAJTChVbmFsaWduMTZCb3RoKQorCisvKi0tLS0tLUVuZCBvZiBtYWluIHBhcnQgd2l0aCBsb29wcy0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIENhc2UxICovCisKKyNpZiAoIWRlZmluZWQgVVNFX0FTX1NUUk5DUFkpIHx8IChkZWZpbmVkIFVTRV9BU19TVFJDQVQpCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXMpOgorCWFkZAklcmN4LCAlcmRpCisJYWRkCSVyY3gsICVyc2kKKwlic2YJJXJkeCwgJXJkeAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXJkeCwgNCkKKyNlbmRpZgorCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVGFpbCk6CisJYWRkCSVyY3gsICVyc2kKKwlic2YJJXJkeCwgJXJkeAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXJkeCwgNCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8zMkJ5dGVzMSk6CisJYWRkCSQxNiwgJXJzaQorCWFkZAkkMTYsICVyZGkKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDE2LCAlcjgKKyNlbmRpZgorTChDb3B5RnJvbTFUbzE2Qnl0ZXNUYWlsMSk6CisJYnNmCSVyZHgsICVyZHgKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVyZHgsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMzJCeXRlcyk6CisJYnNmCSVyZHgsICVyZHgKKwlhZGQJJXJjeCwgJXJzaQorCWFkZAkkMTYsICVyZHgKKwlzdWIJJXJjeCwgJXJkeAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXJkeCwgNCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkXzApOgorCWJzZgklcmR4LCAlcmR4CisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisjIGlmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJKCVyZGksICVyZHgpLCAlcmF4CisjIGVuZGlmCisJbW92ZHF1CSV4bW00LCAoJXJkaSkKKwlhZGQJJDYzLCAlcjgKKwlzdWIJJXJkeCwgJXI4CisJbGVhCTEoJXJkaSwgJXJkeCksICVyZGkKKwlqbXAJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbHNlCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0VGFibGUpLCAlcmR4LCA0KQorI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZF8xNik6CisJYnNmCSVyY3gsICVyZHgKKwltb3ZkcXUJJXhtbTQsICglcmRpKQorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorIyBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE2KCVyZGksICVyZHgpLCAlcmF4CisjIGVuZGlmCisJbW92ZHF1CSV4bW01LCAxNiglcmRpKQorCWFkZAkkNDcsICVyOAorCXN1YgklcmR4LCAlcjgKKwlsZWEJMTcoJXJkaSwgJXJkeCksICVyZGkKKwlqbXAJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbHNlCisJYWRkCSQxNiwgJXJzaQorCWFkZAkkMTYsICVyZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVyZHgsIDQpCisjZW5kaWYKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkXzMyKToKKwlic2YJJXJkeCwgJXJkeAorCW1vdmRxdQkleG1tNCwgKCVyZGkpCisJbW92ZHF1CSV4bW01LCAxNiglcmRpKQorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorIyBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMyKCVyZGksICVyZHgpLCAlcmF4CisjIGVuZGlmCisJbW92ZHF1CSV4bW02LCAzMiglcmRpKQorCWFkZAkkMzEsICVyOAorCXN1YgklcmR4LCAlcjgKKwlsZWEJMzMoJXJkaSwgJXJkeCksICVyZGkKKwlqbXAJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbHNlCisJYWRkCSQzMiwgJXJzaQorCWFkZAkkMzIsICVyZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRUYWJsZSksICVyZHgsIDQpCisjZW5kaWYKKworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisjIGlmbmRlZiBVU0VfQVNfU1RSQ0FUIAorCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tNik6CisJbW92ZHF1CSV4bW02LCAoJXJkaSwgJXJjeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW01KToKKwltb3ZkcXUJJXhtbTUsICglcmRpLCAlcmN4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTQpOgorCW1vdmRxdQkleG1tNCwgKCVyZGksICVyY3gpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzWG1tRXhpdCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tMyk6CisJbW92ZHF1CSV4bW0zLCAoJXJkaSwgJXJjeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNYbW1FeGl0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW0xKToKKwltb3ZkcXUJJXhtbTEsICglcmRpLCAlcmN4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpCisjIGVuZGlmCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpOgorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFRhYmxlKSwgJXJkeCwgNCkKKworLyogQ2FzZTIgKi8KKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTIpOgorCWFkZAkkMTYsICVyOAorCWFkZAklcmN4LCAlcmRpCisJYWRkCSVyY3gsICVyc2kKKwlic2YJJXJkeCwgJXJkeAorCWNtcAklcjgsICVyZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJXI4LCA0KQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzMyQnl0ZXNDYXNlMik6CisJYWRkCSVyY3gsICVyc2kKKwlic2YJJXJkeCwgJXJkeAorCWFkZAkkMTYsICVyZHgKKwlzdWIJJXJjeCwgJXJkeAorCWNtcAklcjgsICVyZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJXI4LCA0KQorCitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWxDYXNlMik6CisJYWRkCSVyY3gsICVyc2kKKwlic2YJJXJkeCwgJXJkeAorCWNtcAklcjgsICVyZHgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0V4aXQpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJXI4LCA0KQorCitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxQ2FzZTIpOgorCWJzZgklcmR4LCAlcmR4CisJY21wCSVyOCwgJXJkeAorCWpiCUwoQ29weUZyb20xVG8xNkJ5dGVzRXhpdCkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlcjgsIDQpCisKKy8qIENhc2UyIG9yIENhc2UzLCAgQ2FzZTMgKi8KKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKToKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMikKK0woQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpOgorCWFkZAkkMTYsICVyOAorCWFkZAklcmN4LCAlcmRpCisJYWRkCSVyY3gsICVyc2kKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlcjgsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMzJCeXRlc0Nhc2UyT3JDYXNlMyk6CisJdGVzdAklcmR4LCAlcmR4CisJam56CUwoQ29weUZyb20xVG8zMkJ5dGVzQ2FzZTIpCisJYWRkCSVyY3gsICVyc2kKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKEV4aXRTdHJuY3B5VGFibGUpLCAlcjgsIDQpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWxDYXNlMk9yQ2FzZTMpOgorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWxDYXNlMikKKwlhZGQJJXJjeCwgJXJzaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVyOCwgNCkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8zMkJ5dGVzMUNhc2UyT3JDYXNlMyk6CisJYWRkCSQxNiwgJXJkaQorCWFkZAkkMTYsICVyc2kKKwlzdWIJJDE2LCAlcjgKK0woQ29weUZyb20xVG8xNkJ5dGVzVGFpbDFDYXNlMk9yQ2FzZTMpOgorCXRlc3QJJXJkeCwgJXJkeAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc1RhaWwxQ2FzZTIpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChFeGl0U3RybmNweVRhYmxlKSwgJXI4LCA0KQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS1FbmQgbGFiZWxzIHJlZ2FyZGluZyB3aXRoIGNvcHlpbmcgMS0xNiBieXRlcy0tYW5kIDEtMzIgYnl0ZXMtLS0tKi8KKworCS5wMmFsaWduIDQKK0woRXhpdDEpOgorCW1vdgklZGgsICglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDEsICVyOAorCWxlYQkxKCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDIpOgorCW1vdgkoJXJzaSksICVkeAorCW1vdgklZHgsICglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMSglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQyLCAlcjgKKwlsZWEJMiglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQzKToKKwltb3YJKCVyc2kpLCAlY3gKKwltb3YJJWN4LCAoJXJkaSkKKwltb3YJJWRoLCAyKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDMsICVyOAorCWxlYQkzKCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDQpOgorCW1vdgkoJXJzaSksICVlZHgKKwltb3YJJWVkeCwgKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDQsICVyOAorCWxlYQk0KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDUpOgorCW1vdgkoJXJzaSksICVlY3gKKwltb3YJJWRoLCA0KCVyZGkpCisJbW92CSVlY3gsICglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNCglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQ1LCAlcjgKKwlsZWEJNSglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ2KToKKwltb3YJKCVyc2kpLCAlZWN4CisJbW92CTQoJXJzaSksICVkeAorCW1vdgklZWN4LCAoJXJkaSkKKwltb3YJJWR4LCA0KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk1KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDYsICVyOAorCWxlYQk2KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDcpOgorCW1vdgkoJXJzaSksICVlY3gKKwltb3YJMyglcnNpKSwgJWVkeAorCW1vdgklZWN4LCAoJXJkaSkKKwltb3YJJWVkeCwgMyglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNiglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQ3LCAlcjgKKwlsZWEJNyglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ4KToKKwltb3YJKCVyc2kpLCAlcmR4CisJbW92CSVyZHgsICglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNyglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQ4LCAlcjgKKwlsZWEJOCglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ5KToKKwltb3YJKCVyc2kpLCAlcmN4CisJbW92CSVkaCwgOCglcmRpKQorCW1vdgklcmN4LCAoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTgoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkOSwgJXI4CisJbGVhCTkoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTApOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJOCglcnNpKSwgJWR4CisJbW92CSVyY3gsICglcmRpKQorCW1vdgklZHgsIDgoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTkoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMTAsICVyOAorCWxlYQkxMCglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMSk6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk3KCVyc2kpLCAlZWR4CisJbW92CSVyY3gsICglcmRpKQorCW1vdgklZWR4LCA3KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxMCglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQxMSwgJXI4CisJbGVhCTExKCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDEyKToKKwltb3YJKCVyc2kpLCAlcmN4CisJbW92CTgoJXJzaSksICVlZHgKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVlZHgsIDgoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTExKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDEyLCAlcjgKKwlsZWEJMTIoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTMpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJNSglcnNpKSwgJXJkeAorCW1vdgklcmN4LCAoJXJkaSkKKwltb3YJJXJkeCwgNSglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTIoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMTMsICVyOAorCWxlYQkxMyglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxNCk6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk2KCVyc2kpLCAlcmR4CisJbW92CSVyY3gsICglcmRpKQorCW1vdgklcmR4LCA2KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxMyglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQxNCwgJXI4CisJbGVhCTE0KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDE1KToKKwltb3YJKCVyc2kpLCAlcmN4CisJbW92CTcoJXJzaSksICVyZHgKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVyZHgsIDcoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE0KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDE1LCAlcjgKKwlsZWEJMTUoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTYpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE1KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDE2LCAlcjgKKwlsZWEJMTYoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTcpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJWRoLCAxNiglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTYoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMTcsICVyOAorCWxlYQkxNyglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxOCk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVjeCwgMTYoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE3KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDE4LCAlcjgKKwlsZWEJMTgoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTkpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE1KCVyc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJWVjeCwgMTUoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE4KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDE5LCAlcjgKKwlsZWEJMTkoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MjApOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJWVjeCwgMTYoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE5KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDIwLCAlcjgKKwlsZWEJMjAoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MjEpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJWVjeCwgMTYoJXJkaSkKKwltb3YJJWRoLCAyMCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjAoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMjEsICVyOAorCWxlYQkyMSglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyMik6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTQoJXJzaSksICVyY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmN4LCAxNCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjEoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMjIsICVyOAorCWxlYQkyMiglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyMyk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTUoJXJzaSksICVyY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmN4LCAxNSglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjIoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMjMsICVyOAorCWxlYQkyMyglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyNCk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVyY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmN4LCAxNiglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjMoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMjQsICVyOAorCWxlYQkyNCglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyNSk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVyY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmN4LCAxNiglcmRpKQorCW1vdgklZGgsIDI0KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNCglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQyNSwgJXI4CisJbGVhCTI1KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDI2KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJXJkeAorCW1vdgkyNCglcnNpKSwgJWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJXJkeCwgMTYoJXJkaSkKKwltb3YJJWN4LCAyNCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjUoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMjYsICVyOAorCWxlYQkyNiglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyNyk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVyZHgKKwltb3YJMjMoJXJzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmR4LCAxNiglcmRpKQorCW1vdgklZWN4LCAyMyglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjYoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMjcsICVyOAorCWxlYQkyNyglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyOCk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVyZHgKKwltb3YJMjQoJXJzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmR4LCAxNiglcmRpKQorCW1vdgklZWN4LCAyNCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjcoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMjgsICVyOAorCWxlYQkyOCglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyOSk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTMoJXJzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIDEzKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyOCglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQyOSwgJXI4CisJbGVhCTI5KCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDMwKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxNCglcnNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMiwgMTQoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI5KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZiBkZWZpbmVkIFVTRV9BU19TVFJOQ1BZICYmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQKKwlzdWIJJDMwLCAlcjgKKwlsZWEJMzAoJXJkaSksICVyZGkKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MzEpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE1KCVyc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxNSglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMzAoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVAorCXN1YgkkMzEsICVyOAorCWxlYQkzMSglcmRpKSwgJXJkaQorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQzMik6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXJzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIDE2KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzMSglcmRpKSwgJXJheAorI2VuZGlmCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSTkNQWSAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSQ0FUCisJc3ViCSQzMiwgJXI4CisJbGVhCTMyKCVyZGkpLCAlcmRpCisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjZW5kaWYKKwlSRVRVUk4KKworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MCk6CisjaWZkZWYgVVNFX0FTX1NUUENQWQorCW1vdgklcmRpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsICglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MSk6CisJbW92CSglcnNpKSwgJWRsCisJbW92CSVkbCwgKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDEoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDIpOgorCW1vdgkoJXJzaSksICVkeAorCW1vdgklZHgsICglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMiglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAyKCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQzKToKKwltb3YJKCVyc2kpLCAlY3gKKwltb3YJMiglcnNpKSwgJWRsCisJbW92CSVjeCwgKCVyZGkpCisJbW92CSVkbCwgMiglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMyglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAzKCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQ0KToKKwltb3YJKCVyc2kpLCAlZWR4CisJbW92CSVlZHgsICglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJNCglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCA0KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQ1KToKKwltb3YJKCVyc2kpLCAlZWN4CisJbW92CTQoJXJzaSksICVkbAorCW1vdgklZWN4LCAoJXJkaSkKKwltb3YJJWRsLCA0KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk1KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDUoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDYpOgorCW1vdgkoJXJzaSksICVlY3gKKwltb3YJNCglcnNpKSwgJWR4CisJbW92CSVlY3gsICglcmRpKQorCW1vdgklZHgsIDQoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTYoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgNiglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0Nyk6CisJbW92CSglcnNpKSwgJWVjeAorCW1vdgkzKCVyc2kpLCAlZWR4CisJbW92CSVlY3gsICglcmRpKQorCW1vdgklZWR4LCAzKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk3KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDcoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDgpOgorCW1vdgkoJXJzaSksICVyZHgKKwltb3YJJXJkeCwgKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk4KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDgoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDkpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJOCglcnNpKSwgJWRsCisJbW92CSVyY3gsICglcmRpKQorCW1vdgklZGwsIDgoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTkoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgOSglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTApOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJOCglcnNpKSwgJWR4CisJbW92CSVyY3gsICglcmRpKQorCW1vdgklZHgsIDgoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEwKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDEwKCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxMSk6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk3KCVyc2kpLCAlZWR4CisJbW92CSVyY3gsICglcmRpKQorCW1vdgklZWR4LCA3KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxMSglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAxMSglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTIpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJOCglcnNpKSwgJWVkeAorCW1vdgklcmN4LCAoJXJkaSkKKwltb3YJJWVkeCwgOCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTIoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMTIoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDEzKToKKwltb3YJKCVyc2kpLCAlcmN4CisJbW92CTUoJXJzaSksICVyZHgKKwltb3YJJXJjeCwgKCVyZGkpCisJbW92CSVyZHgsIDUoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTEzKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDEzKCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxNCk6CisJbW92CSglcnNpKSwgJXJjeAorCW1vdgk2KCVyc2kpLCAlcmR4CisJbW92CSVyY3gsICglcmRpKQorCW1vdgklcmR4LCA2KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxNCglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAxNCglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTUpOgorCW1vdgkoJXJzaSksICVyY3gKKwltb3YJNyglcnNpKSwgJXJkeAorCW1vdgklcmN4LCAoJXJkaSkKKwltb3YJJXJkeCwgNyglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTUoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMTUoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDE2KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxNiglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAxNiglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTcpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlY2wKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklY2wsIDE2KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxNyglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAxNyglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTgpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklY3gsIDE2KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkxOCglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAxOCglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTkpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE1KCVyc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJWVjeCwgMTUoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTE5KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDE5KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyMCk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVlY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklZWN4LCAxNiglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjAoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMjAoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDIxKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJWVjeAorCW1vdgkyMCglcnNpKSwgJWRsCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJWVjeCwgMTYoJXJkaSkKKwltb3YJJWRsLCAyMCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjEoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMjEoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDIyKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNCglcnNpKSwgJXJjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyY3gsIDE0KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyMiglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAyMiglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjMpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE1KCVyc2kpLCAlcmN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJXJjeCwgMTUoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTIzKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDIzKCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyNCk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3YJMTYoJXJzaSksICVyY3gKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdgklcmN4LCAxNiglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjQoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMjQoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDI1KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJXJkeAorCW1vdgkyNCglcnNpKSwgJWNsCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJXJkeCwgMTYoJXJkaSkKKwltb3YJJWNsLCAyNCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjUoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMjUoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDI2KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJXJkeAorCW1vdgkyNCglcnNpKSwgJWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJXJkeCwgMTYoJXJkaSkKKwltb3YJJWN4LCAyNCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMjYoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMjYoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDI3KToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdgkxNiglcnNpKSwgJXJkeAorCW1vdgkyMyglcnNpKSwgJWVjeAorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92CSVyZHgsIDE2KCVyZGkpCisJbW92CSVlY3gsIDIzKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyNyglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAyNyglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MjgpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92CTE2KCVyc2kpLCAlcmR4CisJbW92CTI0KCVyc2kpLCAlZWN4CisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3YJJXJkeCwgMTYoJXJkaSkKKwltb3YJJWVjeCwgMjQoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTI4KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDI4KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyOSk6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTMoJXJzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIDEzKCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkyOSglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAyOSglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MzApOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE0KCVyc2kpLCAleG1tMgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJbW92ZHF1CSV4bW0yLCAxNCglcmRpKQorI2lmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMzAoJXJkaSksICVyYXgKKyNlbmRpZgorI2lmZGVmIFVTRV9BU19TVFJDQVQKKwl4b3IJJWNoLCAlY2gKKwltb3ZiCSVjaCwgMzAoJXJkaSkKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDMxKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMAorCW1vdmRxdQkxNSglcnNpKSwgJXhtbTIKKwltb3ZkcXUJJXhtbTAsICglcmRpKQorCW1vdmRxdQkleG1tMiwgMTUoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTMxKCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDMxKCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQzMik6CisJbW92ZHF1CSglcnNpKSwgJXhtbTAKKwltb3ZkcXUJMTYoJXJzaSksICV4bW0yCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIDE2KCVyZGkpCisjaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQkzMiglcmRpKSwgJXJheAorI2VuZGlmCisjaWZkZWYgVVNFX0FTX1NUUkNBVAorCXhvcgklY2gsICVjaAorCW1vdmIJJWNoLCAzMiglcmRpKQorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MzMpOgorCW1vdmRxdQkoJXJzaSksICV4bW0wCisJbW92ZHF1CTE2KCVyc2kpLCAleG1tMgorCW1vdgkzMiglcnNpKSwgJWNsCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwltb3ZkcXUJJXhtbTIsIDE2KCVyZGkpCisJbW92CSVjbCwgMzIoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDMzKCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworI2lmbmRlZiBVU0VfQVNfU1RSQ0FUCisKKwkucDJhbGlnbiA0CitMKEZpbGwwKToKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDEpOgorCW1vdgklZGwsICglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMik6CisJbW92CSVkeCwgKCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwzKToKKwltb3YJJWVkeCwgLTEoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDQpOgorCW1vdgklZWR4LCAoJXJkaSkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDUpOgorCW1vdgklZWR4LCAoJXJkaSkKKwltb3YJJWRsLCA0KCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGw2KToKKwltb3YJJWVkeCwgKCVyZGkpCisJbW92CSVkeCwgNCglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsNyk6CisJbW92CSVyZHgsIC0xKCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGw4KToKKwltb3YJJXJkeCwgKCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGw5KToKKwltb3YJJXJkeCwgKCVyZGkpCisJbW92CSVkbCwgOCglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMTApOgorCW1vdgklcmR4LCAoJXJkaSkKKwltb3YJJWR4LCA4KCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxMSk6CisJbW92CSVyZHgsICglcmRpKQorCW1vdgklZWR4LCA3KCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxMik6CisJbW92CSVyZHgsICglcmRpKQorCW1vdgklZWR4LCA4KCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxMyk6CisJbW92CSVyZHgsICglcmRpKQorCW1vdgklcmR4LCA1KCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxNCk6CisJbW92CSVyZHgsICglcmRpKQorCW1vdgklcmR4LCA2KCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxNSk6CisJbW92ZHF1CSV4bW0wLCAtMSglcmRpKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMTYpOgorCW1vdmRxdQkleG1tMCwgKCVyZGkpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1VuYWxpZ25lZFhtbTIpOgorCW1vdmRxdQkleG1tMiwgKCVyZGksICVyY3gpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc1htbUV4aXQpOgorCWJzZgklcmR4LCAlcmR4CisJYWRkCSQxNSwgJXI4CisJYWRkCSVyY3gsICVyZGkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCSglcmRpLCAlcmR4KSwgJXJheAorI2VuZGlmCisJc3ViCSVyZHgsICVyOAorCWxlYQkxKCVyZGksICVyZHgpLCAlcmRpCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKToKKwlweG9yCSV4bW0wLCAleG1tMAorCXhvcgklcmR4LCAlcmR4CisJc3ViCSQxNiwgJXI4CisJamJlCUwoU3RybmNweUZpbGxFeGl0KQorCisJbW92ZHF1CSV4bW0wLCAoJXJkaSkKKwlhZGQJJDE2LCAlcmRpCisKKwltb3YJJXJkaSwgJXJzaQorCWFuZAkkMHhmLCAlcnNpCisJc3ViCSVyc2ksICVyZGkKKwlhZGQJJXJzaSwgJXI4CisJc3ViCSQ2NCwgJXI4CisJamIJTChTdHJuY3B5RmlsbExlc3M2NCkKKworTChTdHJuY3B5RmlsbExvb3BNb3ZkcWEpOgorCW1vdmRxYQkleG1tMCwgKCVyZGkpCisJbW92ZHFhCSV4bW0wLCAxNiglcmRpKQorCW1vdmRxYQkleG1tMCwgMzIoJXJkaSkKKwltb3ZkcWEJJXhtbTAsIDQ4KCVyZGkpCisJYWRkCSQ2NCwgJXJkaQorCXN1YgkkNjQsICVyOAorCWphZQlMKFN0cm5jcHlGaWxsTG9vcE1vdmRxYSkKKworTChTdHJuY3B5RmlsbExlc3M2NCk6CisJYWRkCSQzMiwgJXI4CisJamwJTChTdHJuY3B5RmlsbExlc3MzMikKKwltb3ZkcWEJJXhtbTAsICglcmRpKQorCW1vdmRxYQkleG1tMCwgMTYoJXJkaSkKKwlhZGQJJDMyLCAlcmRpCisJc3ViCSQxNiwgJXI4CisJamwJTChTdHJuY3B5RmlsbEV4aXQpCisJbW92ZHFhCSV4bW0wLCAoJXJkaSkKKwlhZGQJJDE2LCAlcmRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChGaWxsVGFibGUpLCAlcjgsIDQpCisKK0woU3RybmNweUZpbGxMZXNzMzIpOgorCWFkZAkkMTYsICVyOAorCWpsCUwoU3RybmNweUZpbGxFeGl0KQorCW1vdmRxYQkleG1tMCwgKCVyZGkpCisJYWRkCSQxNiwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRmlsbFRhYmxlKSwgJXI4LCA0KQorCitMKFN0cm5jcHlGaWxsRXhpdCk6CisJYWRkCSQxNiwgJXI4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChGaWxsVGFibGUpLCAlcjgsIDQpCisKKy8qIGVuZCBvZiBpZm5kZWYgVVNFX0FTX1NUUkNBVCAqLworI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKFVuYWxpZ25lZExlYXZlQ2FzZTJPckNhc2UzKToKKwl0ZXN0CSVyZHgsICVyZHgKKwlqbnoJTChVbmFsaWduZWQ2NExlYXZlQ2FzZTIpCitMKFVuYWxpZ25lZDY0TGVhdmVDYXNlMyk6CisJbGVhCTY0KCVyOCksICVyY3gKKwlhbmQJJC0xNiwgJXJjeAorCWFkZAkkNDgsICVyOAorCWpsCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisJbW92ZHF1CSV4bW00LCAoJXJkaSkKKwlzdWIJJDE2LCAlcjgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCW1vdmRxdQkleG1tNSwgMTYoJXJkaSkKKwlzdWIJJDE2LCAlcjgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCW1vdmRxdQkleG1tNiwgMzIoJXJkaSkKKwlzdWIJJDE2LCAlcjgKKwlqYglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCW1vdmRxdQkleG1tNywgNDgoJXJkaSkKKyNpZmRlZiBVU0VfQVNfU1RQQ1BZCisJbGVhCTY0KCVyZGkpLCAlcmF4CisjZW5kaWYKKyNpZmRlZiBVU0VfQVNfU1RSQ0FUCisJeG9yCSVjaCwgJWNoCisJbW92YgklY2gsIDY0KCVyZGkpCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woVW5hbGlnbmVkNjRMZWF2ZUNhc2UyKToKKwl4b3IJJXJjeCwgJXJjeAorCXBjbXBlcWIJJXhtbTQsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKwlhZGQJJDQ4LCAlcjgKKwlqbGUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklcmR4LCAlcmR4CisjaWZuZGVmIFVTRV9BU19TVFJDQVQKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW00KQorI2Vsc2UKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKwlwY21wZXFiCSV4bW01LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJbW92ZHF1CSV4bW00LCAoJXJkaSkKKwlhZGQJJDE2LCAlcmN4CisJc3ViCSQxNiwgJXI4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJXJkeCwgJXJkeAorI2lmbmRlZiBVU0VfQVNfU1RSQ0FUCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzVW5hbGlnbmVkWG1tNSkKKyNlbHNlCisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorI2VuZGlmCisKKwlwY21wZXFiCSV4bW02LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlcmR4CisJbW92ZHF1CSV4bW01LCAxNiglcmRpKQorCWFkZAkkMTYsICVyY3gKKwlzdWIJJDE2LCAlcjgKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklcmR4LCAlcmR4CisjaWZuZGVmIFVTRV9BU19TVFJDQVQKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNVbmFsaWduZWRYbW02KQorI2Vsc2UKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCXBjbXBlcWIJJXhtbTcsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVyZHgKKwltb3ZkcXUJJXhtbTYsIDMyKCVyZGkpCisJbGVhCTE2KCVyZGksICVyY3gpLCAlcmRpCisJbGVhCTE2KCVyc2ksICVyY3gpLCAlcnNpCisJYnNmCSVyZHgsICVyZHgKKwljbXAJJXI4LCAlcmR4CisJamIJTChDb3B5RnJvbTFUbzE2Qnl0ZXNFeGl0KQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoRXhpdFN0cm5jcHlUYWJsZSksICVyOCwgNCkKKworCS5wMmFsaWduIDQKK0woRXhpdFplcm8pOgorI2lmbmRlZiBVU0VfQVNfU1RSQ0FUCisJbW92CSVyZGksICVyYXgKKyNlbmRpZgorCVJFVFVSTgorCisjZW5kaWYKKworI2lmbmRlZiBVU0VfQVNfU1RSQ0FUCitFTkQgKFNUUkNQWSkKKyNlbHNlCitFTkQgKFNUUkNBVCkKKyNlbmRpZgorCS5wMmFsaWduIDQKKwkuc2VjdGlvbiAucm9kYXRhCitMKEV4aXRUYWJsZSk6CisJLmludAlKTVBUQkwoTChFeGl0MSksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQyKSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDMpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0NCksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQ1KSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDYpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0NyksIEwoRXhpdFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEV4aXQ4KSwgTChFeGl0VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRXhpdDkpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTApLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTEpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTIpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTMpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTQpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTUpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTYpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTcpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTgpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MTkpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjApLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjEpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjIpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjMpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjQpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjUpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjYpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjcpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjgpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MjkpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MzApLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MzEpLCBMKEV4aXRUYWJsZSkpCisJLmludAlKTVBUQkwoTChFeGl0MzIpLCBMKEV4aXRUYWJsZSkpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKK0woRXhpdFN0cm5jcHlUYWJsZSk6CisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDApLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MiksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDMpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQ0KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0NSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDYpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQ3KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0OCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDkpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxMCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDExKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTIpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxMyksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDE0KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTUpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxNiksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDE3KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MTgpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQxOSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDIwKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjEpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyMiksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDIzKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjQpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyNSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDI2KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MjcpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQyOCksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDI5KSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MzApLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorCS5pbnQJSk1QVEJMKEwoU3RybmNweUV4aXQzMSksIEwoRXhpdFN0cm5jcHlUYWJsZSkpCisJLmludAlKTVBUQkwoTChTdHJuY3B5RXhpdDMyKSwgTChFeGl0U3RybmNweVRhYmxlKSkKKwkuaW50CUpNUFRCTChMKFN0cm5jcHlFeGl0MzMpLCBMKEV4aXRTdHJuY3B5VGFibGUpKQorIyBpZm5kZWYgVVNFX0FTX1NUUkNBVAorCS5wMmFsaWduIDQKK0woRmlsbFRhYmxlKToKKwkuaW50CUpNUFRCTChMKEZpbGwwKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDEpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsMiksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGwzKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDQpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsNSksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGw2KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDcpLCBMKEZpbGxUYWJsZSkpCisJLmludAlKTVBUQkwoTChGaWxsOCksIEwoRmlsbFRhYmxlKSkKKwkuaW50CUpNUFRCTChMKEZpbGw5KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDEwKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDExKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDEyKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDEzKSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDE0KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDE1KSwgTChGaWxsVGFibGUpKQorCS5pbnQJSk1QVEJMKEwoRmlsbDE2KSwgTChGaWxsVGFibGUpKQorIyBlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cmxlbi1zbG0uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybGVuLXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NzJmZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cmxlbi1zbG0uUwpAQCAtMCwwICsxLDI5NCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBVU0VfQVNfU1RSQ0FUCisKKyNpZm5kZWYgU1RSTEVOCisjIGRlZmluZSBTVFJMRU4JCXN0cmxlbgorI2VuZGlmCisKKyNpZm5kZWYgTAorIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCQkJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkJCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5UUlkKKyMgZGVmaW5lIEVOVFJZKG5hbWUpCQkJXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247IAlcCisJLmdsb2JsIG5hbWU7CQkJXAorCS5wMmFsaWduIDQ7CQkJXAorbmFtZToJCQkJCVwKKwljZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTkQKKyMgZGVmaW5lIEVORChuYW1lKQkJCVwKKwljZmlfZW5kcHJvYzsJCQlcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKyNkZWZpbmUgUkVUVVJOIHJldAorCS5zZWN0aW9uIC50ZXh0LnNzZTIsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChTVFJMRU4pCisvKiBlbmQgaWZuZGVmIFVTRV9BU19TVFJDQVQgKi8KKyNlbmRpZgorCXhvcgklcmF4LCAlcmF4CisJbW92CSVlZGksICVlY3gKKwlhbmQJJDB4M2YsICVlY3gKKwlweG9yCSV4bW0wLCAleG1tMAorCWNtcAkkMHgzMCwgJWVjeAorCWphCUwobmV4dCkKKwltb3ZkcXUJKCVyZGkpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0X2xlc3MxNikKKwltb3YJJXJkaSwgJXJheAorCWFuZAkkLTE2LCAlcmF4CisJam1wCUwoYWxpZ24xNl9zdGFydCkKK0wobmV4dCk6CisJbW92CSVyZGksICVyYXgKKwlhbmQJJC0xNiwgJXJheAorCXBjbXBlcWIJKCVyYXgpLCAleG1tMAorCW1vdgkkLTEsICVyMTBkCisJc3ViCSVyYXgsICVyY3gKKwlzaGwJJWNsLCAlcjEwZAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJYW5kCSVyMTBkLCAlZWR4CisJam56CUwoZXhpdCkKK0woYWxpZ24xNl9zdGFydCk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwlweG9yCSV4bW0xLCAleG1tMQorCXB4b3IJJXhtbTIsICV4bW0yCisJcHhvcgkleG1tMywgJXhtbTMKKwlwY21wZXFiCTE2KCVyYXgpLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDE2KQorCisJcGNtcGVxYgkzMiglcmF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQzMikKKworCXBjbXBlcWIJNDgoJXJheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0NDgpCisKKwlwY21wZXFiCTY0KCVyYXgpLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDY0KQorCisJcGNtcGVxYgk4MCglcmF4KSwgJXhtbTAKKwlhZGQJJDY0LCAlcmF4CisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0MTYpCisKKwlwY21wZXFiCTMyKCVyYXgpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDMyKQorCisJcGNtcGVxYgk0OCglcmF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQ0OCkKKworCXBjbXBlcWIJNjQoJXJheCksICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0NjQpCisKKwlwY21wZXFiCTgwKCVyYXgpLCAleG1tMAorCWFkZAkkNjQsICVyYXgKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQxNikKKworCXBjbXBlcWIJMzIoJXJheCksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0MzIpCisKKwlwY21wZXFiCTQ4KCVyYXgpLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDQ4KQorCisJcGNtcGVxYgk2NCglcmF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQ2NCkKKwkKKwlwY21wZXFiCTgwKCVyYXgpLCAleG1tMAorCWFkZAkkNjQsICVyYXgKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQxNikKKworCXBjbXBlcWIJMzIoJXJheCksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0MzIpCisKKwlwY21wZXFiCTQ4KCVyYXgpLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDQ4KQorCisJcGNtcGVxYgk2NCglcmF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQ2NCkKKwkKKworCXRlc3QJJDB4M2YsICVyYXgKKwlqeglMKGFsaWduNjRfbG9vcCkKKworCXBjbXBlcWIJODAoJXJheCksICV4bW0wCisJYWRkCSQ4MCwgJXJheAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXRlc3QJJDB4M2YsICVyYXgKKwlqeglMKGFsaWduNjRfbG9vcCkKKworCXBjbXBlcWIJMTYoJXJheCksICV4bW0xCisJYWRkCSQxNiwgJXJheAorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXRlc3QJJDB4M2YsICVyYXgKKwlqeglMKGFsaWduNjRfbG9vcCkKKworCXBjbXBlcWIJMTYoJXJheCksICV4bW0yCisJYWRkCSQxNiwgJXJheAorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXRlc3QJJDB4M2YsICVyYXgKKwlqeglMKGFsaWduNjRfbG9vcCkKKworCXBjbXBlcWIJMTYoJXJheCksICV4bW0zCisJYWRkCSQxNiwgJXJheAorCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCWFkZAkkMTYsICVyYXgKKwkucDJhbGlnbiA0CisJTChhbGlnbjY0X2xvb3ApOgorCW1vdmFwcwkoJXJheCksCSV4bW00CisJcG1pbnViCTE2KCVyYXgpLCAJJXhtbTQKKwltb3ZhcHMJMzIoJXJheCksIAkleG1tNQorCXBtaW51Ygk0OCglcmF4KSwgCSV4bW01CisJYWRkCSQ2NCwgCSVyYXgKKwlwbWludWIJJXhtbTQsCSV4bW01CisJcGNtcGVxYgkleG1tMCwJJXhtbTUKKwlwbW92bXNrYiAleG1tNSwJJWVkeAorCXRlc3QJJWVkeCwJJWVkeAorCWp6CUwoYWxpZ242NF9sb29wKQorCisKKwlwY21wZXFiCS02NCglcmF4KSwgJXhtbTAKKwlzdWIJJDgwLCAJJXJheAorCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdDE2KQorCisJcGNtcGVxYgkzMiglcmF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQzMikKKworCXBjbXBlcWIJNDgoJXJheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0NDgpCisKKwlwY21wZXFiCTY0KCVyYXgpLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJc3ViCSVyZGksICVyYXgKKwlic2YJJXJkeCwgJXJkeAorCWFkZAklcmR4LCAlcmF4CisJYWRkCSQ2NCwgJXJheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0KToKKwlzdWIJJXJkaSwgJXJheAorTChleGl0X2xlc3MxNik6CisJYnNmCSVyZHgsICVyZHgKKwlhZGQJJXJkeCwgJXJheAorCVJFVFVSTgorCS5wMmFsaWduIDQKK0woZXhpdDE2KToKKwlzdWIJJXJkaSwgJXJheAorCWJzZgklcmR4LCAlcmR4CisJYWRkCSVyZHgsICVyYXgKKwlhZGQJJDE2LCAlcmF4CisJUkVUVVJOCisJLnAyYWxpZ24gNAorTChleGl0MzIpOgorCXN1YgklcmRpLCAlcmF4CisJYnNmCSVyZHgsICVyZHgKKwlhZGQJJXJkeCwgJXJheAorCWFkZAkkMzIsICVyYXgKKwlSRVRVUk4KKwkucDJhbGlnbiA0CitMKGV4aXQ0OCk6CisJc3ViCSVyZGksICVyYXgKKwlic2YJJXJkeCwgJXJkeAorCWFkZAklcmR4LCAlcmF4CisJYWRkCSQ0OCwgJXJheAorCVJFVFVSTgorCS5wMmFsaWduIDQKK0woZXhpdDY0KToKKwlzdWIJJXJkaSwgJXJheAorCWJzZgklcmR4LCAlcmR4CisJYWRkCSVyZHgsICVyYXgKKwlhZGQJJDY0LCAlcmF4CisjaWZuZGVmIFVTRV9BU19TVFJDQVQKKwlSRVRVUk4KKworRU5EIChTVFJMRU4pCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybmNhdC1zbG0uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybmNhdC1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjRhNDMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJuY2F0LXNsbS5TCkBAIC0wLDAgKzEsMzMgQEAKKy8qDQorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbg0KK0FsbCByaWdodHMgcmVzZXJ2ZWQuDQorDQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQorDQorICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorDQorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisNCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQNCitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SDQorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQorKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTg0KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisqLw0KKw0KKyNkZWZpbmUgVVNFX0FTX1NUUk5DQVQNCisjZGVmaW5lIFNUUkNBVAkJc3RybmNhdA0KKyNpbmNsdWRlICJzc2UyLXN0cmNhdC1zbG0uUyINCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cm5jcHktc2xtLlMgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cm5jcHktc2xtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk0ZTc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybmNweS1zbG0uUwpAQCAtMCwwICsxLDMzIEBACisvKg0KK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24NCitBbGwgcmlnaHRzIHJlc2VydmVkLg0KKw0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KKw0KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKw0KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uDQorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorDQorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMNCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisNCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EDQorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFDQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsNCitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04NCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTDQorU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorKi8NCisNCisjZGVmaW5lIFVTRV9BU19TVFJOQ1BZDQorI2RlZmluZSBTVFJDUFkJCXN0cm5jcHkNCisjaW5jbHVkZSAic3NlMi1zdHJjcHktc2xtLlMiDQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlNC1tZW1jbXAtc2xtLlMgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc2U0LW1lbWNtcC1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YThiMTgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NlNC1tZW1jbXAtc2xtLlMKQEAgLTAsMCArMSwxNzk5IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKworI2lmbmRlZiBNRU1DTVAKKyMgZGVmaW5lIE1FTUNNUAkJbWVtY21wCisjZW5kaWYKKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIEFMSUdOCisjIGRlZmluZSBBTElHTihuKQkucDJhbGlnbiBuCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCQkJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkJCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5UUlkKKyMgZGVmaW5lIEVOVFJZKG5hbWUpCQkJXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247IAlcCisJLmdsb2JsIG5hbWU7CQkJXAorCS5wMmFsaWduIDQ7CQkJXAorbmFtZToJCQkJCVwKKwljZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTkQKKyMgZGVmaW5lIEVORChuYW1lKQkJCVwKKwljZmlfZW5kcHJvYzsJCQlcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworI2lmbmRlZiBBTElHTgorIyBkZWZpbmUgQUxJR04obikJLnAyYWxpZ24gbgorI2VuZGlmCisKKyNkZWZpbmUgSk1QVEJMKEksIEIpCShJIC0gQikKKworI2RlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFLCBJTkRFWCwgU0NBTEUpCQlcCisgIGxlYQkJVEFCTEUoJXJpcCksICVyMTE7CQkJCVwKKyAgbW92c2xxCSglcjExLCBJTkRFWCwgU0NBTEUpLCAlcmN4OwkJCVwKKyAgYWRkCQklcjExLCAlcmN4OwkJCQkJXAorICBqbXAJCSolcmN4OwkJCQkJCVwKKyAgdWQyCisKKwkuc2VjdGlvbiAudGV4dC5zc2U0LjEsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChNRU1DTVApCisjaWZkZWYgVVNFX0FTX1dNRU1DTVAKKwlzaGwJJDIsICVyZHgKKyNlbmRpZgorCXB4b3IJJXhtbTAsICV4bW0wCisJY21wCSQ3OSwgJXJkeAorCWphCUwoNzlieXRlc29ybW9yZSkKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwljbXAJJDEsICVyZHgKKwlqZQlMKGZpcnN0Ynl0ZSkKKyNlbmRpZgorCWFkZAklcmR4LCAlcnNpCisJYWRkCSVyZHgsICVyZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNjRieXRlcyksICVyZHgsIDQpCisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKwlBTElHTiAoNCkKK0woZmlyc3RieXRlKToKKwltb3Z6YmwJKCVyZGkpLCAlZWF4CisJbW92emJsCSglcnNpKSwgJWVjeAorCXN1YgklZWN4LCAlZWF4CisJcmV0CisjZW5kaWYKKworCUFMSUdOICg0KQorTCg3OWJ5dGVzb3Jtb3JlKToKKwltb3ZkcXUJKCVyc2kpLCAleG1tMQorCW1vdmRxdQkoJXJkaSksICV4bW0yCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzaW4yNTYpCisJbW92CSVyc2ksICVyY3gKKwlhbmQJJC0xNiwgJXJzaQorCWFkZAkkMTYsICVyc2kKKwlzdWIJJXJzaSwgJXJjeAorCisJc3ViCSVyY3gsICVyZGkKKwlhZGQJJXJjeCwgJXJkeAorCXRlc3QJJDB4ZiwgJXJkaQorCWp6CUwoMmFsaWduZWQpCisKKwljbXAJJDEyOCwgJXJkeAorCWphCUwoMTI4Ynl0ZXNvcm1vcmUpCitMKGxlc3MxMjhieXRlcyk6CisJc3ViCSQ2NCwgJXJkeAorCisJbW92ZHF1CSglcmRpKSwgJXhtbTIKKwlweG9yCSglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJMTYoJXJkaSksICV4bW0yCisJcHhvcgkxNiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgzMmJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJMzIoJXJkaSksICV4bW0yCisJcHhvcgkzMiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg0OGJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJNDgoJXJkaSksICV4bW0yCisJcHhvcgk0OCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg2NGJ5dGVzaW4yNTYpCisJY21wCSQzMiwgJXJkeAorCWpiCUwobGVzczMyYnl0ZXNpbjY0KQorCisJbW92ZHF1CTY0KCVyZGkpLCAleG1tMgorCXB4b3IJNjQoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoODBieXRlc2luMjU2KQorCisJbW92ZHF1CTgwKCVyZGkpLCAleG1tMgorCXB4b3IJODAoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoOTZieXRlc2luMjU2KQorCXN1YgkkMzIsICVyZHgKKwlhZGQJJDMyLCAlcmRpCisJYWRkCSQzMiwgJXJzaQorTChsZXNzMzJieXRlc2luNjQpOgorCWFkZAkkNjQsICVyZGkKKwlhZGQJJDY0LCAlcnNpCisJYWRkCSVyZHgsICVyc2kKKwlhZGQJJXJkeCwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV82NGJ5dGVzKSwgJXJkeCwgNCkKKworTCgxMjhieXRlc29ybW9yZSk6CisJY21wCSQ1MTIsICVyZHgKKwlqYQlMKDUxMmJ5dGVzb3Jtb3JlKQorCWNtcAkkMjU2LCAlcmR4CisJamEJTChsZXNzNTEyYnl0ZXMpCitMKGxlc3MyNTZieXRlcyk6CisJc3ViCSQxMjgsICVyZHgKKworCW1vdmRxdQkoJXJkaSksICV4bW0yCisJcHhvcgkoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTZieXRlc2luMjU2KQorCisJbW92ZHF1CTE2KCVyZGkpLCAleG1tMgorCXB4b3IJMTYoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMzJieXRlc2luMjU2KQorCisJbW92ZHF1CTMyKCVyZGkpLCAleG1tMgorCXB4b3IJMzIoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoNDhieXRlc2luMjU2KQorCisJbW92ZHF1CTQ4KCVyZGkpLCAleG1tMgorCXB4b3IJNDgoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoNjRieXRlc2luMjU2KQorCisJbW92ZHF1CTY0KCVyZGkpLCAleG1tMgorCXB4b3IJNjQoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoODBieXRlc2luMjU2KQorCisJbW92ZHF1CTgwKCVyZGkpLCAleG1tMgorCXB4b3IJODAoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoOTZieXRlc2luMjU2KQorCisJbW92ZHF1CTk2KCVyZGkpLCAleG1tMgorCXB4b3IJOTYoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTEyYnl0ZXNpbjI1NikKKworCW1vdmRxdQkxMTIoJXJkaSksICV4bW0yCisJcHhvcgkxMTIoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTI4Ynl0ZXNpbjI1NikKKworCWFkZAkkMTI4LCAlcnNpCisJYWRkCSQxMjgsICVyZGkKKworCWNtcAkkNjQsICVyZHgKKwlqYWUJTChsZXNzMTI4Ynl0ZXMpCisKKwljbXAJJDMyLCAlcmR4CisJamIJTChsZXNzMzJieXRlc2luMTI4KQorCisJbW92ZHF1CSglcmRpKSwgJXhtbTIKKwlweG9yCSglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJMTYoJXJkaSksICV4bW0yCisJcHhvcgkxNiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgzMmJ5dGVzaW4yNTYpCisJc3ViCSQzMiwgJXJkeAorCWFkZAkkMzIsICVyZGkKKwlhZGQJJDMyLCAlcnNpCitMKGxlc3MzMmJ5dGVzaW4xMjgpOgorCWFkZAklcmR4LCAlcnNpCisJYWRkCSVyZHgsICVyZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNjRieXRlcyksICVyZHgsIDQpCisKK0wobGVzczUxMmJ5dGVzKToKKwlzdWIJJDI1NiwgJXJkeAorCW1vdmRxdQkoJXJkaSksICV4bW0yCisJcHhvcgkoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTZieXRlc2luMjU2KQorCisJbW92ZHF1CTE2KCVyZGkpLCAleG1tMgorCXB4b3IJMTYoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMzJieXRlc2luMjU2KQorCisJbW92ZHF1CTMyKCVyZGkpLCAleG1tMgorCXB4b3IJMzIoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoNDhieXRlc2luMjU2KQorCisJbW92ZHF1CTQ4KCVyZGkpLCAleG1tMgorCXB4b3IJNDgoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoNjRieXRlc2luMjU2KQorCisJbW92ZHF1CTY0KCVyZGkpLCAleG1tMgorCXB4b3IJNjQoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoODBieXRlc2luMjU2KQorCisJbW92ZHF1CTgwKCVyZGkpLCAleG1tMgorCXB4b3IJODAoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoOTZieXRlc2luMjU2KQorCisJbW92ZHF1CTk2KCVyZGkpLCAleG1tMgorCXB4b3IJOTYoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTEyYnl0ZXNpbjI1NikKKworCW1vdmRxdQkxMTIoJXJkaSksICV4bW0yCisJcHhvcgkxMTIoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTI4Ynl0ZXNpbjI1NikKKworCW1vdmRxdQkxMjgoJXJkaSksICV4bW0yCisJcHhvcgkxMjgoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTQ0Ynl0ZXNpbjI1NikKKworCW1vdmRxdQkxNDQoJXJkaSksICV4bW0yCisJcHhvcgkxNDQoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTYwYnl0ZXNpbjI1NikKKworCW1vdmRxdQkxNjAoJXJkaSksICV4bW0yCisJcHhvcgkxNjAoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTc2Ynl0ZXNpbjI1NikKKworCW1vdmRxdQkxNzYoJXJkaSksICV4bW0yCisJcHhvcgkxNzYoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTkyYnl0ZXNpbjI1NikKKworCW1vdmRxdQkxOTIoJXJkaSksICV4bW0yCisJcHhvcgkxOTIoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMjA4Ynl0ZXNpbjI1NikKKworCW1vdmRxdQkyMDgoJXJkaSksICV4bW0yCisJcHhvcgkyMDgoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMjI0Ynl0ZXNpbjI1NikKKworCW1vdmRxdQkyMjQoJXJkaSksICV4bW0yCisJcHhvcgkyMjQoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMjQwYnl0ZXNpbjI1NikKKworCW1vdmRxdQkyNDAoJXJkaSksICV4bW0yCisJcHhvcgkyNDAoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMjU2Ynl0ZXNpbjI1NikKKworCWFkZAkkMjU2LCAlcnNpCisJYWRkCSQyNTYsICVyZGkKKworCWNtcAkkMTI4LCAlcmR4CisJamFlCUwobGVzczI1NmJ5dGVzKQorCisJY21wCSQ2NCwgJXJkeAorCWphZQlMKGxlc3MxMjhieXRlcykKKworCWNtcAkkMzIsICVyZHgKKwlqYglMKGxlc3MzMmJ5dGVzaW4yNTYpCisKKwltb3ZkcXUJKCVyZGkpLCAleG1tMgorCXB4b3IJKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDE2Ynl0ZXNpbjI1NikKKworCW1vdmRxdQkxNiglcmRpKSwgJXhtbTIKKwlweG9yCTE2KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDMyYnl0ZXNpbjI1NikKKwlzdWIJJDMyLCAlcmR4CisJYWRkCSQzMiwgJXJkaQorCWFkZAkkMzIsICVyc2kKK0wobGVzczMyYnl0ZXNpbjI1Nik6CisJYWRkCSVyZHgsICVyc2kKKwlhZGQJJXJkeCwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV82NGJ5dGVzKSwgJXJkeCwgNCkKKworCUFMSUdOICg0KQorTCg1MTJieXRlc29ybW9yZSk6CisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwltb3YJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlcjgKKyNlbHNlCisJbW92CV9feDg2XzY0X2RhdGFfY2FjaGVfc2l6ZV9oYWxmKCVyaXApLCAlcjgKKyNlbmRpZgorCW1vdgklcjgsICVyOQorCXNocgkkMSwgJXI4CisJYWRkCSVyOSwgJXI4CisJY21wCSVyOCwgJXJkeAorCWphCUwoTDJfTDNfY2FjaGVfdW5hZ2xpbmVkKQorCXN1YgkkNjQsICVyZHgKKwlBTElHTiAoNCkKK0woNjRieXRlc29ybW9yZV9sb29wKToKKwltb3ZkcXUJKCVyZGkpLCAleG1tMgorCXB4b3IJKCVyc2kpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTEKKworCW1vdmRxdQkxNiglcmRpKSwgJXhtbTMKKwlweG9yCTE2KCVyc2kpLCAleG1tMworCXBvcgkleG1tMywgJXhtbTEKKworCW1vdmRxdQkzMiglcmRpKSwgJXhtbTQKKwlweG9yCTMyKCVyc2kpLCAleG1tNAorCXBvcgkleG1tNCwgJXhtbTEKKworCW1vdmRxdQk0OCglcmRpKSwgJXhtbTUKKwlweG9yCTQ4KCVyc2kpLCAleG1tNQorCXBvcgkleG1tNSwgJXhtbTEKKworCXB0ZXN0CSV4bW0xLCAleG1tMAorCWpuYwlMKDY0Ynl0ZXNvcm1vcmVfbG9vcF9lbmQpCisJYWRkCSQ2NCwgJXJzaQorCWFkZAkkNjQsICVyZGkKKwlzdWIJJDY0LCAlcmR4CisJamFlCUwoNjRieXRlc29ybW9yZV9sb29wKQorCisJYWRkCSQ2NCwgJXJkeAorCWFkZAklcmR4LCAlcnNpCisJYWRkCSVyZHgsICVyZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNjRieXRlcyksICVyZHgsIDQpCisKK0woTDJfTDNfY2FjaGVfdW5hZ2xpbmVkKToKKwlzdWIJJDY0LCAlcmR4CisJQUxJR04gKDQpCitMKEwyX0wzX3VuYWxpZ25lZF8xMjhieXRlc19sb29wKToKKwlwcmVmZXRjaG50YSAweDFjMCglcmRpKQorCXByZWZldGNobnRhIDB4MWMwKCVyc2kpCisJbW92ZHF1CSglcmRpKSwgJXhtbTIKKwlweG9yCSglcnNpKSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW0xCisKKwltb3ZkcXUJMTYoJXJkaSksICV4bW0zCisJcHhvcgkxNiglcnNpKSwgJXhtbTMKKwlwb3IJJXhtbTMsICV4bW0xCisKKwltb3ZkcXUJMzIoJXJkaSksICV4bW00CisJcHhvcgkzMiglcnNpKSwgJXhtbTQKKwlwb3IJJXhtbTQsICV4bW0xCisKKwltb3ZkcXUJNDgoJXJkaSksICV4bW01CisJcHhvcgk0OCglcnNpKSwgJXhtbTUKKwlwb3IJJXhtbTUsICV4bW0xCisKKwlwdGVzdAkleG1tMSwgJXhtbTAKKwlqbmMJTCg2NGJ5dGVzb3Jtb3JlX2xvb3BfZW5kKQorCWFkZAkkNjQsICVyc2kKKwlhZGQJJDY0LCAlcmRpCisJc3ViCSQ2NCwgJXJkeAorCWphZQlMKEwyX0wzX3VuYWxpZ25lZF8xMjhieXRlc19sb29wKQorCisJYWRkCSQ2NCwgJXJkeAorCWFkZAklcmR4LCAlcnNpCisJYWRkCSVyZHgsICVyZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNjRieXRlcyksICVyZHgsIDQpCisKKy8qCisgKiBUaGlzIGNhc2UgaXMgZm9yIG1hY2hpbmVzIHdoaWNoIGFyZSBzZW5zaXRpdmUgZm9yIHVuYWxpZ25lZCBpbnN0cnVjdGlvbnMuCisgKi8KKwlBTElHTiAoNCkKK0woMmFsaWduZWQpOgorCWNtcAkkMTI4LCAlcmR4CisJamEJTCgxMjhieXRlc29ybW9yZWluMmFsaWduZWQpCitMKGxlc3MxMjhieXRlc2luMmFsaWduZWQpOgorCXN1YgkkNjQsICVyZHgKKworCW1vdmRxYQkoJXJkaSksICV4bW0yCisJcHhvcgkoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTZieXRlc2luMjU2KQorCisJbW92ZHFhCTE2KCVyZGkpLCAleG1tMgorCXB4b3IJMTYoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMzJieXRlc2luMjU2KQorCisJbW92ZHFhCTMyKCVyZGkpLCAleG1tMgorCXB4b3IJMzIoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoNDhieXRlc2luMjU2KQorCisJbW92ZHFhCTQ4KCVyZGkpLCAleG1tMgorCXB4b3IJNDgoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoNjRieXRlc2luMjU2KQorCWNtcAkkMzIsICVyZHgKKwlqYglMKGxlc3MzMmJ5dGVzaW42NGluMmFsaW5nZWQpCisKKwltb3ZkcWEJNjQoJXJkaSksICV4bW0yCisJcHhvcgk2NCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg4MGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJODAoJXJkaSksICV4bW0yCisJcHhvcgk4MCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg5NmJ5dGVzaW4yNTYpCisJc3ViCSQzMiwgJXJkeAorCWFkZAkkMzIsICVyZGkKKwlhZGQJJDMyLCAlcnNpCitMKGxlc3MzMmJ5dGVzaW42NGluMmFsaW5nZWQpOgorCWFkZAkkNjQsICVyZGkKKwlhZGQJJDY0LCAlcnNpCisJYWRkCSVyZHgsICVyc2kKKwlhZGQJJXJkeCwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV82NGJ5dGVzKSwgJXJkeCwgNCkKKworCUFMSUdOICg0KQorTCgxMjhieXRlc29ybW9yZWluMmFsaWduZWQpOgorCWNtcAkkNTEyLCAlcmR4CisJamEJTCg1MTJieXRlc29ybW9yZWluMmFsaWduZWQpCisJY21wCSQyNTYsICVyZHgKKwlqYQlMKDI1NmJ5dGVzb3Jtb3JlaW4yYWxpZ25lZCkKK0wobGVzczI1NmJ5dGVzaW4yYWxpbmdlZCk6CisJc3ViCSQxMjgsICVyZHgKKworCW1vdmRxYQkoJXJkaSksICV4bW0yCisJcHhvcgkoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTZieXRlc2luMjU2KQorCisJbW92ZHFhCTE2KCVyZGkpLCAleG1tMgorCXB4b3IJMTYoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMzJieXRlc2luMjU2KQorCisJbW92ZHFhCTMyKCVyZGkpLCAleG1tMgorCXB4b3IJMzIoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoNDhieXRlc2luMjU2KQorCisJbW92ZHFhCTQ4KCVyZGkpLCAleG1tMgorCXB4b3IJNDgoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoNjRieXRlc2luMjU2KQorCisJbW92ZHFhCTY0KCVyZGkpLCAleG1tMgorCXB4b3IJNjQoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoODBieXRlc2luMjU2KQorCisJbW92ZHFhCTgwKCVyZGkpLCAleG1tMgorCXB4b3IJODAoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoOTZieXRlc2luMjU2KQorCisJbW92ZHFhCTk2KCVyZGkpLCAleG1tMgorCXB4b3IJOTYoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTEyYnl0ZXNpbjI1NikKKworCW1vdmRxYQkxMTIoJXJkaSksICV4bW0yCisJcHhvcgkxMTIoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTI4Ynl0ZXNpbjI1NikKKworCWFkZAkkMTI4LCAlcnNpCisJYWRkCSQxMjgsICVyZGkKKworCWNtcAkkNjQsICVyZHgKKwlqYWUJTChsZXNzMTI4Ynl0ZXNpbjJhbGlnbmVkKQorCisJY21wCSQzMiwgJXJkeAorCWpiCUwobGVzczMyYnl0ZXNpbjEyOGluMmFsaWduZWQpCisKKwltb3ZkcXUJKCVyZGkpLCAleG1tMgorCXB4b3IJKCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDE2Ynl0ZXNpbjI1NikKKworCW1vdmRxdQkxNiglcmRpKSwgJXhtbTIKKwlweG9yCTE2KCVyc2kpLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKDMyYnl0ZXNpbjI1NikKKwlzdWIJJDMyLCAlcmR4CisJYWRkCSQzMiwgJXJkaQorCWFkZAkkMzIsICVyc2kKK0wobGVzczMyYnl0ZXNpbjEyOGluMmFsaWduZWQpOgorCWFkZAklcmR4LCAlcnNpCisJYWRkCSVyZHgsICVyZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNjRieXRlcyksICVyZHgsIDQpCisKKwlBTElHTiAoNCkKK0woMjU2Ynl0ZXNvcm1vcmVpbjJhbGlnbmVkKToKKworCXN1YgkkMjU2LCAlcmR4CisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwlweG9yCSglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMTYoJXJkaSksICV4bW0yCisJcHhvcgkxNiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgzMmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJMzIoJXJkaSksICV4bW0yCisJcHhvcgkzMiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg0OGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJNDgoJXJkaSksICV4bW0yCisJcHhvcgk0OCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg2NGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJNjQoJXJkaSksICV4bW0yCisJcHhvcgk2NCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg4MGJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJODAoJXJkaSksICV4bW0yCisJcHhvcgk4MCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCg5NmJ5dGVzaW4yNTYpCisKKwltb3ZkcWEJOTYoJXJkaSksICV4bW0yCisJcHhvcgk5NiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxMTJieXRlc2luMjU2KQorCisJbW92ZHFhCTExMiglcmRpKSwgJXhtbTIKKwlweG9yCTExMiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxMjhieXRlc2luMjU2KQorCisJbW92ZHFhCTEyOCglcmRpKSwgJXhtbTIKKwlweG9yCTEyOCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNDRieXRlc2luMjU2KQorCisJbW92ZHFhCTE0NCglcmRpKSwgJXhtbTIKKwlweG9yCTE0NCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNjBieXRlc2luMjU2KQorCisJbW92ZHFhCTE2MCglcmRpKSwgJXhtbTIKKwlweG9yCTE2MCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNzZieXRlc2luMjU2KQorCisJbW92ZHFhCTE3NiglcmRpKSwgJXhtbTIKKwlweG9yCTE3NiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxOTJieXRlc2luMjU2KQorCisJbW92ZHFhCTE5MiglcmRpKSwgJXhtbTIKKwlweG9yCTE5MiglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgyMDhieXRlc2luMjU2KQorCisJbW92ZHFhCTIwOCglcmRpKSwgJXhtbTIKKwlweG9yCTIwOCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgyMjRieXRlc2luMjU2KQorCisJbW92ZHFhCTIyNCglcmRpKSwgJXhtbTIKKwlweG9yCTIyNCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgyNDBieXRlc2luMjU2KQorCisJbW92ZHFhCTI0MCglcmRpKSwgJXhtbTIKKwlweG9yCTI0MCglcnNpKSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgyNTZieXRlc2luMjU2KQorCisJYWRkCSQyNTYsICVyc2kKKwlhZGQJJDI1NiwgJXJkaQorCisJY21wCSQxMjgsICVyZHgKKwlqYWUJTChsZXNzMjU2Ynl0ZXNpbjJhbGluZ2VkKQorCisJY21wCSQ2NCwgJXJkeAorCWphZQlMKGxlc3MxMjhieXRlc2luMmFsaWduZWQpCisKKwljbXAJJDMyLCAlcmR4CisJamIJTChsZXNzMzJieXRlc2luMjU2aW4yYWxpbmdlZCkKKworCW1vdmRxYQkoJXJkaSksICV4bW0yCisJcHhvcgkoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMTZieXRlc2luMjU2KQorCisJbW92ZHFhCTE2KCVyZGkpLCAleG1tMgorCXB4b3IJMTYoJXJzaSksICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwoMzJieXRlc2luMjU2KQorCXN1YgkkMzIsICVyZHgKKwlhZGQJJDMyLCAlcmRpCisJYWRkCSQzMiwgJXJzaQorTChsZXNzMzJieXRlc2luMjU2aW4yYWxpbmdlZCk6CisJYWRkCSVyZHgsICVyc2kKKwlhZGQJJXJkeCwgJXJkaQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV82NGJ5dGVzKSwgJXJkeCwgNCkKKworCUFMSUdOICg0KQorTCg1MTJieXRlc29ybW9yZWluMmFsaWduZWQpOgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJbW92CSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJXI4CisjZWxzZQorCW1vdglfX3g4Nl82NF9kYXRhX2NhY2hlX3NpemVfaGFsZiglcmlwKSwgJXI4CisjZW5kaWYKKwltb3YJJXI4LCAlcjkKKwlzaHIJJDEsICVyOAorCWFkZAklcjksICVyOAorCWNtcAklcjgsICVyZHgKKwlqYQlMKEwyX0wzX2NhY2hlX2FnbGluZWQpCisKKwlzdWIJJDY0LCAlcmR4CisJQUxJR04gKDQpCitMKDY0Ynl0ZXNvcm1vcmVfbG9vcGluMmFsaWduZWQpOgorCW1vdmRxYQkoJXJkaSksICV4bW0yCisJcHhvcgkoJXJzaSksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tMQorCisJbW92ZHFhCTE2KCVyZGkpLCAleG1tMworCXB4b3IJMTYoJXJzaSksICV4bW0zCisJcG9yCSV4bW0zLCAleG1tMQorCisJbW92ZHFhCTMyKCVyZGkpLCAleG1tNAorCXB4b3IJMzIoJXJzaSksICV4bW00CisJcG9yCSV4bW00LCAleG1tMQorCisJbW92ZHFhCTQ4KCVyZGkpLCAleG1tNQorCXB4b3IJNDgoJXJzaSksICV4bW01CisJcG9yCSV4bW01LCAleG1tMQorCisJcHRlc3QJJXhtbTEsICV4bW0wCisJam5jCUwoNjRieXRlc29ybW9yZV9sb29wX2VuZCkKKwlhZGQJJDY0LCAlcnNpCisJYWRkCSQ2NCwgJXJkaQorCXN1YgkkNjQsICVyZHgKKwlqYWUJTCg2NGJ5dGVzb3Jtb3JlX2xvb3BpbjJhbGlnbmVkKQorCisJYWRkCSQ2NCwgJXJkeAorCWFkZAklcmR4LCAlcnNpCisJYWRkCSVyZHgsICVyZGkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNjRieXRlcyksICVyZHgsIDQpCitMKEwyX0wzX2NhY2hlX2FnbGluZWQpOgorCXN1YgkkNjQsICVyZHgKKwlBTElHTiAoNCkKK0woTDJfTDNfYWxpZ25lZF8xMjhieXRlc19sb29wKToKKwlwcmVmZXRjaG50YSAweDFjMCglcmRpKQorCXByZWZldGNobnRhIDB4MWMwKCVyc2kpCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwlweG9yCSglcnNpKSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW0xCisKKwltb3ZkcWEJMTYoJXJkaSksICV4bW0zCisJcHhvcgkxNiglcnNpKSwgJXhtbTMKKwlwb3IJJXhtbTMsICV4bW0xCisKKwltb3ZkcWEJMzIoJXJkaSksICV4bW00CisJcHhvcgkzMiglcnNpKSwgJXhtbTQKKwlwb3IJJXhtbTQsICV4bW0xCisKKwltb3ZkcWEJNDgoJXJkaSksICV4bW01CisJcHhvcgk0OCglcnNpKSwgJXhtbTUKKwlwb3IJJXhtbTUsICV4bW0xCisKKwlwdGVzdAkleG1tMSwgJXhtbTAKKwlqbmMJTCg2NGJ5dGVzb3Jtb3JlX2xvb3BfZW5kKQorCWFkZAkkNjQsICVyc2kKKwlhZGQJJDY0LCAlcmRpCisJc3ViCSQ2NCwgJXJkeAorCWphZQlMKEwyX0wzX2FsaWduZWRfMTI4Ynl0ZXNfbG9vcCkKKworCWFkZAkkNjQsICVyZHgKKwlhZGQJJXJkeCwgJXJzaQorCWFkZAklcmR4LCAlcmRpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzY0Ynl0ZXMpLCAlcmR4LCA0KQorCisKKwlBTElHTiAoNCkKK0woNjRieXRlc29ybW9yZV9sb29wX2VuZCk6CisJYWRkCSQxNiwgJXJkaQorCWFkZAkkMTYsICVyc2kKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzKQorCisJYWRkCSQxNiwgJXJkaQorCWFkZAkkMTYsICVyc2kKKwlwdGVzdAkleG1tMywgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzKQorCisJYWRkCSQxNiwgJXJkaQorCWFkZAkkMTYsICVyc2kKKwlwdGVzdAkleG1tNCwgJXhtbTAKKwlqbmMJTCgxNmJ5dGVzKQorCisJYWRkCSQxNiwgJXJkaQorCWFkZAkkMTYsICVyc2kKKwlqbXAJTCgxNmJ5dGVzKQorCitMKDI1NmJ5dGVzaW4yNTYpOgorCWFkZAkkMjU2LCAlcmRpCisJYWRkCSQyNTYsICVyc2kKKwlqbXAJTCgxNmJ5dGVzKQorTCgyNDBieXRlc2luMjU2KToKKwlhZGQJJDI0MCwgJXJkaQorCWFkZAkkMjQwLCAlcnNpCisJam1wCUwoMTZieXRlcykKK0woMjI0Ynl0ZXNpbjI1Nik6CisJYWRkCSQyMjQsICVyZGkKKwlhZGQJJDIyNCwgJXJzaQorCWptcAlMKDE2Ynl0ZXMpCitMKDIwOGJ5dGVzaW4yNTYpOgorCWFkZAkkMjA4LCAlcmRpCisJYWRkCSQyMDgsICVyc2kKKwlqbXAJTCgxNmJ5dGVzKQorTCgxOTJieXRlc2luMjU2KToKKwlhZGQJJDE5MiwgJXJkaQorCWFkZAkkMTkyLCAlcnNpCisJam1wCUwoMTZieXRlcykKK0woMTc2Ynl0ZXNpbjI1Nik6CisJYWRkCSQxNzYsICVyZGkKKwlhZGQJJDE3NiwgJXJzaQorCWptcAlMKDE2Ynl0ZXMpCitMKDE2MGJ5dGVzaW4yNTYpOgorCWFkZAkkMTYwLCAlcmRpCisJYWRkCSQxNjAsICVyc2kKKwlqbXAJTCgxNmJ5dGVzKQorTCgxNDRieXRlc2luMjU2KToKKwlhZGQJJDE0NCwgJXJkaQorCWFkZAkkMTQ0LCAlcnNpCisJam1wCUwoMTZieXRlcykKK0woMTI4Ynl0ZXNpbjI1Nik6CisJYWRkCSQxMjgsICVyZGkKKwlhZGQJJDEyOCwgJXJzaQorCWptcAlMKDE2Ynl0ZXMpCitMKDExMmJ5dGVzaW4yNTYpOgorCWFkZAkkMTEyLCAlcmRpCisJYWRkCSQxMTIsICVyc2kKKwlqbXAJTCgxNmJ5dGVzKQorTCg5NmJ5dGVzaW4yNTYpOgorCWFkZAkkOTYsICVyZGkKKwlhZGQJJDk2LCAlcnNpCisJam1wCUwoMTZieXRlcykKK0woODBieXRlc2luMjU2KToKKwlhZGQJJDgwLCAlcmRpCisJYWRkCSQ4MCwgJXJzaQorCWptcAlMKDE2Ynl0ZXMpCitMKDY0Ynl0ZXNpbjI1Nik6CisJYWRkCSQ2NCwgJXJkaQorCWFkZAkkNjQsICVyc2kKKwlqbXAJTCgxNmJ5dGVzKQorTCg0OGJ5dGVzaW4yNTYpOgorCWFkZAkkMTYsICVyZGkKKwlhZGQJJDE2LCAlcnNpCitMKDMyYnl0ZXNpbjI1Nik6CisJYWRkCSQxNiwgJXJkaQorCWFkZAkkMTYsICVyc2kKK0woMTZieXRlc2luMjU2KToKKwlhZGQJJDE2LCAlcmRpCisJYWRkCSQxNiwgJXJzaQorTCgxNmJ5dGVzKToKKwltb3YJLTE2KCVyZGkpLCAlcmF4CisJbW92CS0xNiglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorTCg4Ynl0ZXMpOgorCW1vdgktOCglcmRpKSwgJXJheAorCW1vdgktOCglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKwlBTElHTiAoNCkKK0woMTJieXRlcyk6CisJbW92CS0xMiglcmRpKSwgJXJheAorCW1vdgktMTIoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKK0woNGJ5dGVzKToKKwltb3YJLTQoJXJzaSksICVlY3gKKwltb3YJLTQoJXJkaSksICVlYXgKKwljbXAJJWVheCwgJWVjeAorCWpuZQlMKGRpZmZpbjRieXRlcykKK0woMGJ5dGVzKToKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisvKiB1bnJlYWwgY2FzZSBmb3Igd21lbWNtcCAqLworCUFMSUdOICg0KQorTCg2NWJ5dGVzKToKKwltb3ZkcXUJLTY1KCVyZGkpLCAleG1tMQorCW1vdmRxdQktNjUoJXJzaSksICV4bW0yCisJbW92CSQtNjUsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQ5Ynl0ZXMpOgorCW1vdmRxdQktNDkoJXJkaSksICV4bW0xCisJbW92ZHF1CS00OSglcnNpKSwgJXhtbTIKKwltb3YJJC00OSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzNieXRlcyk6CisJbW92ZHF1CS0zMyglcmRpKSwgJXhtbTEKKwltb3ZkcXUJLTMzKCVyc2kpLCAleG1tMgorCW1vdgkkLTMzLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgxN2J5dGVzKToKKwltb3YJLTE3KCVyZGkpLCAlcmF4CisJbW92CS0xNyglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorTCg5Ynl0ZXMpOgorCW1vdgktOSglcmRpKSwgJXJheAorCW1vdgktOSglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCW1vdnpibAktMSglcmRpKSwgJWVheAorCW1vdnpibAktMSglcnNpKSwgJWVkeAorCXN1YgklZWR4LCAlZWF4CisJcmV0CisKKwlBTElHTiAoNCkKK0woMTNieXRlcyk6CisJbW92CS0xMyglcmRpKSwgJXJheAorCW1vdgktMTMoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwltb3YJLTgoJXJkaSksICVyYXgKKwltb3YJLTgoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisJQUxJR04gKDQpCitMKDVieXRlcyk6CisJbW92CS01KCVyZGkpLCAlZWF4CisJbW92CS01KCVyc2kpLCAlZWN4CisJY21wCSVlYXgsICVlY3gKKwlqbmUJTChkaWZmaW40Ynl0ZXMpCisJbW92emJsCS0xKCVyZGkpLCAlZWF4CisJbW92emJsCS0xKCVyc2kpLCAlZWR4CisJc3ViCSVlZHgsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCg2NmJ5dGVzKToKKwltb3ZkcXUJLTY2KCVyZGkpLCAleG1tMQorCW1vdmRxdQktNjYoJXJzaSksICV4bW0yCisJbW92CSQtNjYsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDUwYnl0ZXMpOgorCW1vdmRxdQktNTAoJXJkaSksICV4bW0xCisJbW92ZHF1CS01MCglcnNpKSwgJXhtbTIKKwltb3YJJC01MCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzRieXRlcyk6CisJbW92ZHF1CS0zNCglcmRpKSwgJXhtbTEKKwltb3ZkcXUJLTM0KCVyc2kpLCAleG1tMgorCW1vdgkkLTM0LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgxOGJ5dGVzKToKKwltb3YJLTE4KCVyZGkpLCAlcmF4CisJbW92CS0xOCglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorTCgxMGJ5dGVzKToKKwltb3YJLTEwKCVyZGkpLCAlcmF4CisJbW92CS0xMCglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCW1vdnp3bAktMiglcmRpKSwgJWVheAorCW1vdnp3bAktMiglcnNpKSwgJWVjeAorCWNtcAklY2wsICVhbAorCWpuZQlMKGVuZCkKKwlhbmQJJDB4ZmZmZiwgJWVheAorCWFuZAkkMHhmZmZmLCAlZWN4CisJc3ViCSVlY3gsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCgxNGJ5dGVzKToKKwltb3YJLTE0KCVyZGkpLCAlcmF4CisJbW92CS0xNCglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCW1vdgktOCglcmRpKSwgJXJheAorCW1vdgktOCglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKwlBTElHTiAoNCkKK0woNmJ5dGVzKToKKwltb3YJLTYoJXJkaSksICVlYXgKKwltb3YJLTYoJXJzaSksICVlY3gKKwljbXAJJWVheCwgJWVjeAorCWpuZQlMKGRpZmZpbjRieXRlcykKK0woMmJ5dGVzKToKKwltb3Z6d2wJLTIoJXJzaSksICVlY3gKKwltb3Z6d2wJLTIoJXJkaSksICVlYXgKKwljbXAJJWNsLCAlYWwKKwlqbmUJTChlbmQpCisJYW5kCSQweGZmZmYsICVlYXgKKwlhbmQJJDB4ZmZmZiwgJWVjeAorCXN1YgklZWN4LCAlZWF4CisJcmV0CisKKwlBTElHTiAoNCkKK0woNjdieXRlcyk6CisJbW92ZHF1CS02NyglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTY3KCVyc2kpLCAleG1tMQorCW1vdgkkLTY3LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg1MWJ5dGVzKToKKwltb3ZkcXUJLTUxKCVyZGkpLCAleG1tMgorCW1vdmRxdQktNTEoJXJzaSksICV4bW0xCisJbW92CSQtNTEsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDM1Ynl0ZXMpOgorCW1vdmRxdQktMzUoJXJzaSksICV4bW0xCisJbW92ZHF1CS0zNSglcmRpKSwgJXhtbTIKKwltb3YJJC0zNSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMTlieXRlcyk6CisJbW92CS0xOSglcmRpKSwgJXJheAorCW1vdgktMTkoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKK0woMTFieXRlcyk6CisJbW92CS0xMSglcmRpKSwgJXJheAorCW1vdgktMTEoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwltb3YJLTQoJXJkaSksICVlYXgKKwltb3YJLTQoJXJzaSksICVlY3gKKwljbXAJJWVheCwgJWVjeAorCWpuZQlMKGRpZmZpbjRieXRlcykKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisJQUxJR04gKDQpCitMKDE1Ynl0ZXMpOgorCW1vdgktMTUoJXJkaSksICVyYXgKKwltb3YJLTE1KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJbW92CS04KCVyZGkpLCAlcmF4CisJbW92CS04KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCg3Ynl0ZXMpOgorCW1vdgktNyglcmRpKSwgJWVheAorCW1vdgktNyglcnNpKSwgJWVjeAorCWNtcAklZWF4LCAlZWN4CisJam5lCUwoZGlmZmluNGJ5dGVzKQorCW1vdgktNCglcmRpKSwgJWVheAorCW1vdgktNCglcnNpKSwgJWVjeAorCWNtcAklZWF4LCAlZWN4CisJam5lCUwoZGlmZmluNGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKwlBTElHTiAoNCkKK0woM2J5dGVzKToKKwltb3Z6d2wJLTMoJXJkaSksICVlYXgKKwltb3Z6d2wJLTMoJXJzaSksICVlY3gKKwljbXAJJWVheCwgJWVjeAorCWpuZQlMKGRpZmZpbjJieXRlcykKK0woMWJ5dGVzKToKKwltb3Z6YmwJLTEoJXJkaSksICVlYXgKKwltb3Z6YmwJLTEoJXJzaSksICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCXJldAorI2VuZGlmCisKKwlBTElHTiAoNCkKK0woNjhieXRlcyk6CisJbW92ZHF1CS02OCglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTY4KCVyc2kpLCAleG1tMQorCW1vdgkkLTY4LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg1MmJ5dGVzKToKKwltb3ZkcXUJLTUyKCVyZGkpLCAleG1tMgorCW1vdmRxdQktNTIoJXJzaSksICV4bW0xCisJbW92CSQtNTIsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDM2Ynl0ZXMpOgorCW1vdmRxdQktMzYoJXJkaSksICV4bW0yCisJbW92ZHF1CS0zNiglcnNpKSwgJXhtbTEKKwltb3YJJC0zNiwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjBieXRlcyk6CisJbW92ZHF1CS0yMCglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTIwKCVyc2kpLCAleG1tMQorCW1vdgkkLTIwLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktNCglcmRpKSwgJWVheAorCW1vdgktNCglcnNpKSwgJWVjeAorCWNtcAklZWF4LCAlZWN4CisJam5lCUwoZGlmZmluNGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKyNpZm5kZWYgVVNFX0FTX1dNRU1DTVAKKy8qIHVucmVhbCBjYXNlcyBmb3Igd21lbWNtcCAqLworCUFMSUdOICg0KQorTCg2OWJ5dGVzKToKKwltb3ZkcXUJLTY5KCVyc2kpLCAleG1tMQorCW1vdmRxdQktNjkoJXJkaSksICV4bW0yCisJbW92CSQtNjksICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDUzYnl0ZXMpOgorCW1vdmRxdQktNTMoJXJzaSksICV4bW0xCisJbW92ZHF1CS01MyglcmRpKSwgJXhtbTIKKwltb3YJJC01MywgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzdieXRlcyk6CisJbW92ZHF1CS0zNyglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTM3KCVyZGkpLCAleG1tMgorCW1vdgkkLTM3LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyMWJ5dGVzKToKKwltb3ZkcXUJLTIxKCVyc2kpLCAleG1tMQorCW1vdmRxdQktMjEoJXJkaSksICV4bW0yCisJbW92CSQtMjEsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisJbW92CS04KCVyZGkpLCAlcmF4CisJbW92CS04KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCg3MGJ5dGVzKToKKwltb3ZkcXUJLTcwKCVyc2kpLCAleG1tMQorCW1vdmRxdQktNzAoJXJkaSksICV4bW0yCisJbW92CSQtNzAsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDU0Ynl0ZXMpOgorCW1vdmRxdQktNTQoJXJzaSksICV4bW0xCisJbW92ZHF1CS01NCglcmRpKSwgJXhtbTIKKwltb3YJJC01NCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzhieXRlcyk6CisJbW92ZHF1CS0zOCglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTM4KCVyZGkpLCAleG1tMgorCW1vdgkkLTM4LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyMmJ5dGVzKToKKwltb3ZkcXUJLTIyKCVyc2kpLCAleG1tMQorCW1vdmRxdQktMjIoJXJkaSksICV4bW0yCisJbW92CSQtMjIsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisJbW92CS04KCVyZGkpLCAlcmF4CisJbW92CS04KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworCUFMSUdOICg0KQorTCg3MWJ5dGVzKToKKwltb3ZkcXUJLTcxKCVyc2kpLCAleG1tMQorCW1vdmRxdQktNzEoJXJkaSksICV4bW0yCisJbW92CSQtNzEsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDU1Ynl0ZXMpOgorCW1vdmRxdQktNTUoJXJkaSksICV4bW0yCisJbW92ZHF1CS01NSglcnNpKSwgJXhtbTEKKwltb3YJJC01NSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzlieXRlcyk6CisJbW92ZHF1CS0zOSglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTM5KCVyc2kpLCAleG1tMQorCW1vdgkkLTM5LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCgyM2J5dGVzKToKKwltb3ZkcXUJLTIzKCVyZGkpLCAleG1tMgorCW1vdmRxdQktMjMoJXJzaSksICV4bW0xCisJbW92CSQtMjMsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCisJbW92CS04KCVyZGkpLCAlcmF4CisJbW92CS04KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKyNlbmRpZgorCisJQUxJR04gKDQpCitMKDcyYnl0ZXMpOgorCW1vdmRxdQktNzIoJXJzaSksICV4bW0xCisJbW92ZHF1CS03MiglcmRpKSwgJXhtbTIKKwltb3YJJC03MiwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNTZieXRlcyk6CisJbW92ZHF1CS01NiglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTU2KCVyc2kpLCAleG1tMQorCW1vdgkkLTU2LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg0MGJ5dGVzKToKKwltb3ZkcXUJLTQwKCVyZGkpLCAleG1tMgorCW1vdmRxdQktNDAoJXJzaSksICV4bW0xCisJbW92CSQtNDAsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDI0Ynl0ZXMpOgorCW1vdmRxdQktMjQoJXJkaSksICV4bW0yCisJbW92ZHF1CS0yNCglcnNpKSwgJXhtbTEKKwltb3YJJC0yNCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKwltb3YJLTgoJXJkaSksICVyYXgKKwltb3YJLTgoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisjaWZuZGVmIFVTRV9BU19XTUVNQ01QCisvKiB1bnJlYWwgY2FzZXMgZm9yIHdtZW1jbXAgKi8KKwlBTElHTiAoNCkKK0woNzNieXRlcyk6CisJbW92ZHF1CS03MyglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTczKCVyZGkpLCAleG1tMgorCW1vdgkkLTczLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg1N2J5dGVzKToKKwltb3ZkcXUJLTU3KCVyZGkpLCAleG1tMgorCW1vdmRxdQktNTcoJXJzaSksICV4bW0xCisJbW92CSQtNTcsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQxYnl0ZXMpOgorCW1vdmRxdQktNDEoJXJkaSksICV4bW0yCisJbW92ZHF1CS00MSglcnNpKSwgJXhtbTEKKwltb3YJJC00MSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjVieXRlcyk6CisJbW92ZHF1CS0yNSglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTI1KCVyc2kpLCAleG1tMQorCW1vdgkkLTI1LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktOSglcmRpKSwgJXJheAorCW1vdgktOSglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCW1vdnpibAktMSglcmRpKSwgJWVheAorCW1vdnpibAktMSglcnNpKSwgJWVjeAorCXN1YgklZWN4LCAlZWF4CisJcmV0CisKKwlBTElHTiAoNCkKK0woNzRieXRlcyk6CisJbW92ZHF1CS03NCglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTc0KCVyZGkpLCAleG1tMgorCW1vdgkkLTc0LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg1OGJ5dGVzKToKKwltb3ZkcXUJLTU4KCVyZGkpLCAleG1tMgorCW1vdmRxdQktNTgoJXJzaSksICV4bW0xCisJbW92CSQtNTgsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQyYnl0ZXMpOgorCW1vdmRxdQktNDIoJXJkaSksICV4bW0yCisJbW92ZHF1CS00MiglcnNpKSwgJXhtbTEKKwltb3YJJC00MiwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjZieXRlcyk6CisJbW92ZHF1CS0yNiglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTI2KCVyc2kpLCAleG1tMQorCW1vdgkkLTI2LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktMTAoJXJkaSksICVyYXgKKwltb3YJLTEwKCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJbW92endsCS0yKCVyZGkpLCAlZWF4CisJbW92endsCS0yKCVyc2kpLCAlZWN4CisJam1wCUwoZGlmZmluMmJ5dGVzKQorCisJQUxJR04gKDQpCitMKDc1Ynl0ZXMpOgorCW1vdmRxdQktNzUoJXJzaSksICV4bW0xCisJbW92ZHF1CS03NSglcmRpKSwgJXhtbTIKKwltb3YJJC03NSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNTlieXRlcyk6CisJbW92ZHF1CS01OSglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTU5KCVyc2kpLCAleG1tMQorCW1vdgkkLTU5LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg0M2J5dGVzKToKKwltb3ZkcXUJLTQzKCVyZGkpLCAleG1tMgorCW1vdmRxdQktNDMoJXJzaSksICV4bW0xCisJbW92CSQtNDMsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDI3Ynl0ZXMpOgorCW1vdmRxdQktMjcoJXJkaSksICV4bW0yCisJbW92ZHF1CS0yNyglcnNpKSwgJXhtbTEKKwltb3YJJC0yNywgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKwltb3YJLTExKCVyZGkpLCAlcmF4CisJbW92CS0xMSglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCW1vdgktNCglcmRpKSwgJWVheAorCW1vdgktNCglcnNpKSwgJWVjeAorCWNtcAklZWF4LCAlZWN4CisJam5lCUwoZGlmZmluNGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisjZW5kaWYKKwlBTElHTiAoNCkKK0woNzZieXRlcyk6CisJbW92ZHF1CS03NiglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTc2KCVyZGkpLCAleG1tMgorCW1vdgkkLTc2LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg2MGJ5dGVzKToKKwltb3ZkcXUJLTYwKCVyZGkpLCAleG1tMgorCW1vdmRxdQktNjAoJXJzaSksICV4bW0xCisJbW92CSQtNjAsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQ0Ynl0ZXMpOgorCW1vdmRxdQktNDQoJXJkaSksICV4bW0yCisJbW92ZHF1CS00NCglcnNpKSwgJXhtbTEKKwltb3YJJC00NCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMjhieXRlcyk6CisJbW92ZHF1CS0yOCglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTI4KCVyc2kpLCAleG1tMQorCW1vdgkkLTI4LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktMTIoJXJkaSksICVyYXgKKwltb3YJLTEyKCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJbW92CS00KCVyZGkpLCAlZWF4CisJbW92CS00KCVyc2kpLCAlZWN4CisJY21wCSVlYXgsICVlY3gKKwlqbmUJTChkaWZmaW40Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorLyogdW5yZWFsIGNhc2VzIGZvciB3bWVtY21wICovCisJQUxJR04gKDQpCitMKDc3Ynl0ZXMpOgorCW1vdmRxdQktNzcoJXJzaSksICV4bW0xCisJbW92ZHF1CS03NyglcmRpKSwgJXhtbTIKKwltb3YJJC03NywgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNjFieXRlcyk6CisJbW92ZHF1CS02MSglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTYxKCVyc2kpLCAleG1tMQorCW1vdgkkLTYxLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg0NWJ5dGVzKToKKwltb3ZkcXUJLTQ1KCVyZGkpLCAleG1tMgorCW1vdmRxdQktNDUoJXJzaSksICV4bW0xCisJbW92CSQtNDUsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDI5Ynl0ZXMpOgorCW1vdmRxdQktMjkoJXJkaSksICV4bW0yCisJbW92ZHF1CS0yOSglcnNpKSwgJXhtbTEKKwltb3YJJC0yOSwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKworCW1vdgktMTMoJXJkaSksICVyYXgKKwltb3YJLTEzKCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisKKwltb3YJLTgoJXJkaSksICVyYXgKKwltb3YJLTgoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisJQUxJR04gKDQpCitMKDc4Ynl0ZXMpOgorCW1vdmRxdQktNzgoJXJzaSksICV4bW0xCisJbW92ZHF1CS03OCglcmRpKSwgJXhtbTIKKwltb3YJJC03OCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woNjJieXRlcyk6CisJbW92ZHF1CS02MiglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTYyKCVyc2kpLCAleG1tMQorCW1vdgkkLTYyLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg0NmJ5dGVzKToKKwltb3ZkcXUJLTQ2KCVyZGkpLCAleG1tMgorCW1vdmRxdQktNDYoJXJzaSksICV4bW0xCisJbW92CSQtNDYsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDMwYnl0ZXMpOgorCW1vdmRxdQktMzAoJXJkaSksICV4bW0yCisJbW92ZHF1CS0zMCglcnNpKSwgJXhtbTEKKwltb3YJJC0zMCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKKwltb3YJLTE0KCVyZGkpLCAlcmF4CisJbW92CS0xNCglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCW1vdgktOCglcmRpKSwgJXJheAorCW1vdgktOCglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKwlBTElHTiAoNCkKK0woNzlieXRlcyk6CisJbW92ZHF1CS03OSglcnNpKSwgJXhtbTEKKwltb3ZkcXUJLTc5KCVyZGkpLCAleG1tMgorCW1vdgkkLTc5LCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorTCg2M2J5dGVzKToKKwltb3ZkcXUJLTYzKCVyZGkpLCAleG1tMgorCW1vdmRxdQktNjMoJXJzaSksICV4bW0xCisJbW92CSQtNjMsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQ3Ynl0ZXMpOgorCW1vdmRxdQktNDcoJXJkaSksICV4bW0yCisJbW92ZHF1CS00NyglcnNpKSwgJXhtbTEKKwltb3YJJC00NywgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzFieXRlcyk6CisJbW92ZHF1CS0zMSglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTMxKCVyc2kpLCAleG1tMQorCW1vdgkkLTMxLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCW1vdgktMTUoJXJkaSksICVyYXgKKwltb3YJLTE1KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJbW92CS04KCVyZGkpLCAlcmF4CisJbW92CS04KCVyc2kpLCAlcmN4CisJY21wCSVyYXgsICVyY3gKKwlqbmUJTChkaWZmaW44Ynl0ZXMpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKyNlbmRpZgorCUFMSUdOICg0KQorTCg2NGJ5dGVzKToKKwltb3ZkcXUJLTY0KCVyZGkpLCAleG1tMgorCW1vdmRxdQktNjQoJXJzaSksICV4bW0xCisJbW92CSQtNjQsICVkbAorCXB4b3IJJXhtbTEsICV4bW0yCisJcHRlc3QJJXhtbTIsICV4bW0wCisJam5jCUwobGVzczE2Ynl0ZXMpCitMKDQ4Ynl0ZXMpOgorCW1vdmRxdQktNDgoJXJkaSksICV4bW0yCisJbW92ZHF1CS00OCglcnNpKSwgJXhtbTEKKwltb3YJJC00OCwgJWRsCisJcHhvcgkleG1tMSwgJXhtbTIKKwlwdGVzdAkleG1tMiwgJXhtbTAKKwlqbmMJTChsZXNzMTZieXRlcykKK0woMzJieXRlcyk6CisJbW92ZHF1CS0zMiglcmRpKSwgJXhtbTIKKwltb3ZkcXUJLTMyKCVyc2kpLCAleG1tMQorCW1vdgkkLTMyLCAlZGwKKwlweG9yCSV4bW0xLCAleG1tMgorCXB0ZXN0CSV4bW0yLCAleG1tMAorCWpuYwlMKGxlc3MxNmJ5dGVzKQorCisJbW92CS0xNiglcmRpKSwgJXJheAorCW1vdgktMTYoJXJzaSksICVyY3gKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKworCW1vdgktOCglcmRpKSwgJXJheAorCW1vdgktOCglcnNpKSwgJXJjeAorCWNtcAklcmF4LCAlcmN4CisJam5lCUwoZGlmZmluOGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKy8qCisgKiBBbGlnbmVkIDggYnl0ZXMgdG8gYXZvaWQgMiBicmFuY2ggInRha2VuIiBpbiBvbmUgMTYgYWxpbmdlZCBjb2RlIGJsb2NrLgorICovCisJQUxJR04gKDMpCitMKGxlc3MxNmJ5dGVzKToKKwltb3ZzYnEJJWRsLCAlcmR4CisJbW92CSglcnNpLCAlcmR4KSwgJXJjeAorCW1vdgkoJXJkaSwgJXJkeCksICVyYXgKKwljbXAJJXJheCwgJXJjeAorCWpuZQlMKGRpZmZpbjhieXRlcykKKwltb3YJOCglcnNpLCAlcmR4KSwgJXJjeAorCW1vdgk4KCVyZGksICVyZHgpLCAlcmF4CitMKGRpZmZpbjhieXRlcyk6CisJY21wCSVlYXgsICVlY3gKKwlqbmUJTChkaWZmaW40Ynl0ZXMpCisJc2hyCSQzMiwgJXJjeAorCXNocgkkMzIsICVyYXgKKworI2lmZGVmIFVTRV9BU19XTUVNQ01QCisvKiBmb3Igd21lbWNtcCAqLworCWNtcAklZWF4LCAlZWN4CisJam5lCUwoZGlmZmluNGJ5dGVzKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisjZW5kaWYKKworTChkaWZmaW40Ynl0ZXMpOgorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorCWNtcAklY3gsICVheAorCWpuZQlMKGRpZmZpbjJieXRlcykKKwlzaHIJJDE2LCAlZWN4CisJc2hyCSQxNiwgJWVheAorTChkaWZmaW4yYnl0ZXMpOgorCWNtcAklY2wsICVhbAorCWpuZQlMKGVuZCkKKwlhbmQJJDB4ZmZmZiwgJWVheAorCWFuZAkkMHhmZmZmLCAlZWN4CisJc3ViCSVlY3gsICVlYXgKKwlyZXQKKyNlbHNlCisKKy8qIGZvciB3bWVtY21wICovCisJbW92CSQxLCAlZWF4CisJamwJTChuZXF1YWxfYmlnZ2VyKQorCW5lZwklZWF4CisJcmV0CisKKwlBTElHTiAoNCkKK0wobmVxdWFsX2JpZ2dlcik6CisJcmV0CisKK0wodW5yZWFsX2Nhc2UpOgorCXhvcgklZWF4LCAlZWF4CisJcmV0CisjZW5kaWYKKworCUFMSUdOICg0KQorTChlbmQpOgorCWFuZAkkMHhmZiwgJWVheAorCWFuZAkkMHhmZiwgJWVjeAorCXN1YgklZWN4LCAlZWF4CisJcmV0CisKK0VORCAoTUVNQ01QKQorCisJLnNlY3Rpb24gLnJvZGF0YS5zc2U0LjEsImEiLEBwcm9nYml0cworCUFMSUdOICgzKQorI2lmbmRlZiBVU0VfQVNfV01FTUNNUAorTCh0YWJsZV82NGJ5dGVzKToKKwkuaW50CUpNUFRCTCAoTCgwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDFieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMmJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCgzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNWJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDdieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoOGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDEwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDExYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDEyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDEzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDE5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDIwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDIxYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDIyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDIzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDI5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDMwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDMxYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDMyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDMzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDM5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQxYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDQ5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDUwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDUxYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDUyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDUzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDU5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDYwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDYxYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDYyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDYzYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDY0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDY1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDY2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDY3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDY4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDY5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDcwYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDcxYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDcyYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDczYnl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDc0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDc1Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDc2Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDc3Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDc4Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDc5Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorI2Vsc2UKK0wodGFibGVfNjRieXRlcyk6CisJLmludAlKTVBUQkwgKEwoMGJ5dGVzKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCg0Ynl0ZXMpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKDhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMTZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMjhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoMzZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNDhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNTZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjBieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjRieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNjhieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzJieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwoNzZieXRlcyksIEwodGFibGVfNjRieXRlcykpCisJLmludAlKTVBUQkwgKEwodW5yZWFsX2Nhc2UpLCBMKHRhYmxlXzY0Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHVucmVhbF9jYXNlKSwgTCh0YWJsZV82NGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh1bnJlYWxfY2FzZSksIEwodGFibGVfNjRieXRlcykpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3Nzc2UzLXN0cmNtcC1zbG0uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3Nzc2UzLXN0cmNtcC1zbG0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGQ4YzI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zdHJpbmcvc3NzZTMtc3RyY21wLXNsbS5TCkBAIC0wLDAgKzEsMTkyNSBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisvKiBTaW5jZSB0aGUgY291bnRlciwgJXIxMSwgaXMgdW5zaWduZWQsIHdlIGJyYW5jaCB0byBzdHJjbXBfZXhpdHoKKyAgIGlmIHRoZSBuZXcgY291bnRlciA+IHRoZSBvbGQgb25lIG9yIGlzIDAuICAqLworI2RlZmluZSBVUERBVEVfU1RSTkNNUF9DT1VOVEVSCQkJCVwKKwkvKiBjYWxjdWxhdGUgbGVmdCBudW1iZXIgdG8gY29tcGFyZSAqLwkJXAorCWxlYQktMTYoJXJjeCwgJXIxMSksICVyOTsJCQlcCisJY21wCSVyOSwgJXIxMTsJCQkJXAorCWpiCUwoc3RyY21wX2V4aXR6KTsJCQlcCisJdGVzdAklcjksICVyOTsJCQkJXAorCWplCUwoc3RyY21wX2V4aXR6KTsJCQlcCisJbW92CSVyOSwgJXIxMQorCisjZWxzZQorI2RlZmluZSBVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisjaWZuZGVmIFNUUkNNUAorI2RlZmluZSBTVFJDTVAJCXN0cmNtcAorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJCQkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCQkJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsgCVwKKwkuZ2xvYmwgbmFtZTsJCQlcCisJLnAyYWxpZ24gNDsJCQlcCituYW1lOgkJCQkJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCQkJXAorCWNmaV9lbmRwcm9jOwkJCVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorI2RlZmluZSBSRVRVUk4gcmV0CisJLnNlY3Rpb24gLnRleHQuc3NzZTMsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChTVFJDTVApCisvKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIFNTRSB0byBjb21wYXJlIHVwIHRvIDE2IGJ5dGVzIGF0IGEgdGltZS4KKyAqLworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJdGVzdAklcmR4LCAlcmR4CisJamUJTChzdHJjbXBfZXhpdHopCisJY21wCSQxLCAlcmR4CisJamUJTChCeXRlMCkKKwltb3YJJXJkeCwgJXIxMQorI2VuZGlmCisJbW92CSVlc2ksICVlY3gKKwltb3YJJWVkaSwgJWVheAorLyogVXNlIDY0Yml0IEFORCBoZXJlIHRvIGF2b2lkIGxvbmcgTk9QIHBhZGRpbmcuICAqLworCWFuZAkkMHgzZiwgJXJjeAkJLyogcnNpIGFsaWdubWVudCBpbiBjYWNoZSBsaW5lICovCisJYW5kCSQweDNmLCAlcmF4CQkvKiByZGkgYWxpZ25tZW50IGluIGNhY2hlIGxpbmUgKi8KKwljbXAJJDB4MzAsICVlY3gKKwlqYQlMKGNyb3NzY2FjaGUpCS8qIHJzaTogMTYtYnl0ZSBsb2FkIHdpbGwgY3Jvc3MgY2FjaGUgbGluZSAqLworCWNtcAkkMHgzMCwgJWVheAorCWphCUwoY3Jvc3NjYWNoZSkJLyogcmRpOiAxNi1ieXRlIGxvYWQgd2lsbCBjcm9zcyBjYWNoZSBsaW5lICovCisJbW92bHBkCSglcmRpKSwgJXhtbTEKKwltb3ZscGQJKCVyc2kpLCAleG1tMgorCW1vdmhwZAk4KCVyZGkpLCAleG1tMQorCW1vdmhwZAk4KCVyc2kpLCAleG1tMgorCXB4b3IJJXhtbTAsICV4bW0wCQkvKiBjbGVhciAleG1tMCBmb3IgbnVsbCBjaGFyIGNoZWNrcyAqLworCXBjbXBlcWIJJXhtbTEsICV4bW0wCQkvKiBBbnkgbnVsbCBjaGFycz8gKi8KKwlwY21wZXFiCSV4bW0yLCAleG1tMQkJLyogY29tcGFyZSBmaXJzdCAxNiBieXRlcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTEJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCAxNiBieXRlcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3MxNmJ5dGVzKQkvKiBJZiBub3QsIGZpbmQgZGlmZmVyZW50IHZhbHVlIG9yIG51bGwgY2hhciAqLworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikJLyogZmluaXNoIGNvbXBhcmlzaW9uICovCisjZW5kaWYKKwlhZGQJJDE2LCAlcnNpCQkvKiBwcmVwYXJlIHRvIHNlYXJjaCBuZXh0IDE2IGJ5dGVzICovCisJYWRkCSQxNiwgJXJkaQkJLyogcHJlcGFyZSB0byBzZWFyY2ggbmV4dCAxNiBieXRlcyAqLworCisJLyoKKwkgKiBEZXRlcm1pbmUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBzdHJpbmcgb2Zmc2V0cyBmcm9tIDE2LWJ5dGUgYWxpZ25tZW50LgorCSAqIFVzZSByZWxhdGl2ZSBvZmZzZXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gdG8gZGV0ZXJtaW5lIHdoaWNoIGNhc2UKKwkgKiBiZWxvdyB0byB1c2UuCisJICovCisJLnAyYWxpZ24gNAorTChjcm9zc2NhY2hlKToKKwlhbmQJJDB4ZmZmZmZmZmZmZmZmZmZmMCwgJXJzaQkvKiBmb3JjZSAlcnNpIGlzIDE2IGJ5dGUgYWxpZ25lZCAqLworCWFuZAkkMHhmZmZmZmZmZmZmZmZmZmYwLCAlcmRpCS8qIGZvcmNlICVyZGkgaXMgMTYgYnl0ZSBhbGlnbmVkICovCisJbW92CSQweGZmZmYsICVlZHgJCQkvKiBmb3IgZXF1aXZhbGVudCBvZmZzZXQgKi8KKwl4b3IJJXI4ZCwgJXI4ZAorCWFuZAkkMHhmLCAlZWN4CQkJLyogb2Zmc2V0IG9mIHJzaSAqLworCWFuZAkkMHhmLCAlZWF4CQkJLyogb2Zmc2V0IG9mIHJkaSAqLworCWNtcAklZWF4LCAlZWN4CisJamUJTChhc2hyXzApCQkJLyogcnNpIGFuZCByZGkgcmVsYXRpdmUgb2Zmc2V0IHNhbWUgKi8KKwlqYQlMKGJpZ2dlcikKKwltb3YJJWVkeCwgJXI4ZAkJCS8qIHI4ZCBpcyBvZmZzZXQgZmxhZyBmb3IgZXhpdCB0YWlsICovCisJeGNoZwklZWN4LCAlZWF4CisJeGNoZwklcnNpLCAlcmRpCitMKGJpZ2dlcik6CisJbGVhCTE1KCVyYXgpLCAlcjkKKwlzdWIJJXJjeCwgJXI5CisJbGVhCUwodW5hbGlnbmVkX3RhYmxlKSglcmlwKSwgJXIxMAorCW1vdnNscQkoJXIxMCwgJXI5LDQpLCAlcjkKKwlsZWEJKCVyMTAsICVyOSksICVyMTAKKwlqbXAJKiVyMTAJCQkJLyoganVtcCB0byBjb3JyZXNwb25kaW5nIGNhc2UgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMAorICogIHJjeChvZmZzZXQgb2YgcnNpKSAgcmF4KG9mZnNldCBvZiByZGkpICByZWxhdGl2ZSBvZmZzZXQgIGNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oMH4xNSkgICAgICAgICAgICBuKDB+MTUpICAgICAgICAgICAxNSgxNSsgbi1uKSAgICAgICAgIGFzaHJfMAorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzApOgorCisJbW92ZHFhCSglcnNpKSwgJXhtbTEKKwlweG9yCSV4bW0wLCAleG1tMAkJCS8qIGNsZWFyICV4bW0wIGZvciBudWxsIGNoYXIgY2hlY2sgKi8KKwlwY21wZXFiCSV4bW0xLCAleG1tMAkJCS8qIEFueSBudWxsIGNoYXJzPyAqLworCXBjbXBlcWIJKCVyZGkpLCAleG1tMQkJCS8qIGNvbXBhcmUgMTYgYnl0ZXMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0xLCAlcjlkCisJc2hyCSVjbCwgJWVkeAkJCS8qIGFkanVzdCAweGZmZmYgZm9yIG9mZnNldCAqLworCXNocgklY2wsICVyOWQJCQkvKiBhZGp1c3QgZm9yIDE2LWJ5dGUgb2Zmc2V0ICovCisJc3ViCSVyOWQsICVlZHgKKwkvKgorCSAqIGVkeCBtdXN0IGJlIHRoZSBzYW1lIHdpdGggcjlkIGlmIGluIGxlZnQgYnl0ZSAoMTYtcmN4KSBpcyBlcXVhbCB0bworCSAqIHRoZSBzdGFydCBmcm9tICgxNi1yYXgpIGFuZCBubyBudWxsIGNoYXIgd2FzIHNlZW4uCisJICovCisJam5lCUwobGVzczMyYnl0ZXMpCQkvKiBtaXNtYXRjaCBvciBudWxsIGNoYXIgKi8KKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisJbW92CSQxNiwgJXJjeAorCW1vdgkkMTYsICVyOQorCXB4b3IJJXhtbTAsICV4bW0wCQkJLyogY2xlYXIgeG1tMCwgbWF5IGhhdmUgY2hhbmdlZCBhYm92ZSAqLworCisJLyoKKwkgKiBOb3cgYm90aCBzdHJpbmdzIGFyZSBhbGlnbmVkIGF0IDE2LWJ5dGUgYm91bmRhcnkuIExvb3Agb3ZlciBzdHJpbmdzCisJICogY2hlY2tpbmcgMzItYnl0ZXMgcGVyIGl0ZXJhdGlvbi4KKwkgKi8KKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8wKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCQkvKiBtaXNtYXRjaCBvciBudWxsIGNoYXIgc2VlbiAqLworCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKwlhZGQJJDE2LCAlcmN4CisJam1wCUwobG9vcF9hc2hyXzApCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzEKKyAqIHJjeChvZmZzZXQgb2YgcnNpKSAgcmF4KG9mZnNldCBvZiByZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oMTUpICAgICAgICAgICAgbiAtMTUgICAgICAgICAgICAwKDE1ICsobi0xNSkgLSBuKSAgICAgICAgIGFzaHJfMQorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzEpOgorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwltb3ZkcWEJKCVyc2kpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCQkvKiBBbnkgbnVsbCBjaGFycz8gKi8KKwlwc2xsZHEJJDE1LCAleG1tMgkJLyogc2hpZnQgZmlyc3Qgc3RyaW5nIHRvIGFsaWduIHdpdGggc2Vjb25kICovCisJcGNtcGVxYgkleG1tMSwgJXhtbTIJCS8qIGNvbXBhcmUgMTYgYnl0ZXMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0yCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CQkvKiBhZGp1c3QgMHhmZmZmIGZvciBvZmZzZXQgKi8KKwlzaHIJJWNsLCAlcjlkCQkvKiBhZGp1c3QgZm9yIDE2LWJ5dGUgb2Zmc2V0ICovCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykJLyogbWlzbWF0Y2ggb3IgbnVsbCBjaGFyIHNlZW4gKi8KKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkJLyogaW5kZXggZm9yIGxvYWRzKi8KKwltb3YJJDEsICVyOWQJCS8qIGJ5dGUgcG9zaXRpb24gbGVmdCBvdmVyIGZyb20gbGVzczMyYnl0ZXMgY2FzZSAqLworCS8qCisJICogU2V0dXAgJXIxMCB2YWx1ZSBhbGxvd3MgdXMgdG8gZGV0ZWN0IGNyb3NzaW5nIGEgcGFnZSBib3VuZGFyeS4KKwkgKiBXaGVuICVyMTAgZ29lcyBwb3NpdGl2ZSB3ZSBoYXZlIGNyb3NzZWQgYSBwYWdlIGJvdW5kYXJ5IGFuZAorCSAqIG5lZWQgdG8gZG8gYSBuaWJibGUuCisJICovCisJbGVhCTEoJXJkaSksICVyMTAKKwlhbmQJJDB4ZmZmLCAlcjEwCQkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8xKToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8xKQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKK0woZ29iYmxlX2FzaHJfMSk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQJCSAvKiBzdG9yZSBmb3IgbmV4dCBjeWNsZSAqLworCisJcGFsaWduciAkMSwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8xKQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAkJLyogc3RvcmUgZm9yIG5leHQgY3ljbGUgKi8KKworCXBhbGlnbnIgJDEsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCWptcAlMKGxvb3BfYXNocl8xKQorCisJLyoKKwkgKiBOaWJibGUgYXZvaWRzIGxvYWRzIGFjcm9zcyBwYWdlIGJvdW5kYXJ5LiBUaGlzIGlzIHRvIGF2b2lkIGEgcG90ZW50aWFsCisJICogYWNjZXNzIGludG8gdW5tYXBwZWQgbWVtb3J5LgorCSAqLworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfMSk6CisJcGNtcGVxYgkleG1tMywgJXhtbTAJCSAvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciovCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSQweGZmZmUsICVlZHgKKwlqbnoJTChhc2hyXzFfZXhpdHRhaWwpCS8qIGZpbmQgbnVsbCBjaGFyKi8KKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wCSQxNCwgJXIxMQorCWpiZQlMKGFzaHJfMV9leGl0dGFpbCkKKyNlbmRpZgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJXIxMAkJLyogc3Vic3RyYWN0IDRLIGZyb20gJXIxMCAqLworCWptcAlMKGdvYmJsZV9hc2hyXzEpCisKKwkvKgorCSAqIE9uY2UgZmluZCBudWxsIGNoYXIsIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIHN0cmluZyBtaXNtYXRjaAorCSAqIGJlZm9yZSB0aGUgbnVsbCBjaGFyLgorCSAqLworCS5wMmFsaWduIDQKK0woYXNocl8xX2V4aXR0YWlsKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCXBzcmxkcQkkMSwgJXhtbTAKKwlwc3JsZHEJJDEsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8yCisgKiByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgIHJlbGF0aXZlIG9mZnNldCAgIAljb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDE0fjE1KSAgICAgICAgICAgIG4gLTE0ICAgICAgICAgMSgxNSArKG4tMTQpIC0gbikgICAgICAgICBhc2hyXzIKKyAqLworCS5wMmFsaWduIDQKK0woYXNocl8yKToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJXJkaSksICV4bW0yCisJbW92ZHFhCSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkMTQsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDIsICVyOWQJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJMiglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCXN1YgkkMHgxMDAwLCAlcjEwCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8yKToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8yKQorCitMKGdvYmJsZV9hc2hyXzIpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQyLCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfMikJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDIsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzIpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzIpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHhmZmZjLCAlZWR4CisJam56CUwoYXNocl8yX2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDEzLCAlcjExCisJamJlCUwoYXNocl8yX2V4aXR0YWlsKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlcjEwCisJam1wCUwoZ29iYmxlX2FzaHJfMikKKworCS5wMmFsaWduIDQKK0woYXNocl8yX2V4aXR0YWlsKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCXBzcmxkcQkkMiwgJXhtbTAKKwlwc3JsZHEJJDIsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8zCisgKiAgcmN4KG9mZnNldCBvZiByc2kpICByYXgob2Zmc2V0IG9mIHJkaSkgIHJlbGF0aXZlIG9mZnNldAkgY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbigxM34xNSkgICAgICAgICAgICBuIC0xMyAgICAgICAgIDIoMTUgKyhuLTEzKSAtIG4pICAgICAgICAgYXNocl8zCisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfMyk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDEzLCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJXI5ZAorCXN1YgklcjlkLCAlZWR4CisJam56CUwobGVzczMyYnl0ZXMpCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDMsICVyOWQJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJMyglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCXN1YgkkMHgxMDAwLCAlcjEwCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8zKToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8zKQorCitMKGdvYmJsZV9hc2hyXzMpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQzLCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfMykJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDMsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzMpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzMpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHhmZmY4LCAlZWR4CisJam56CUwoYXNocl8zX2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDEyLCAlcjExCisJamJlCUwoYXNocl8zX2V4aXR0YWlsKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlcjEwCisJam1wCUwoZ29iYmxlX2FzaHJfMykKKworCS5wMmFsaWduIDQKK0woYXNocl8zX2V4aXR0YWlsKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCXBzcmxkcQkkMywgJXhtbTAKKwlwc3JsZHEJJDMsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl80CisgKiAgcmN4KG9mZnNldCBvZiByc2kpICByYXgob2Zmc2V0IG9mIHJkaSkgIHJlbGF0aXZlIG9mZnNldAkgY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbigxMn4xNSkgICAgICAgICAgICBuIC0xMiAgICAgICAgIDMoMTUgKyhuLTEyKSAtIG4pICAgICAgICAgYXNocl80CisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfNCk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDEyLCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJXI5ZAorCXN1YgklcjlkLCAlZWR4CisJam56CUwobGVzczMyYnl0ZXMpCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDQsICVyOWQJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJNCglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCXN1YgkkMHgxMDAwLCAlcjEwCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl80KToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl80KQorCitMKGdvYmJsZV9hc2hyXzQpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQ0LCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfNCkJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDQsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzQpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzQpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHhmZmYwLCAlZWR4CisJam56CUwoYXNocl80X2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDExLCAlcjExCisJamJlCUwoYXNocl80X2V4aXR0YWlsKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlcjEwCisJam1wCUwoZ29iYmxlX2FzaHJfNCkKKworCS5wMmFsaWduIDQKK0woYXNocl80X2V4aXR0YWlsKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCXBzcmxkcQkkNCwgJXhtbTAKKwlwc3JsZHEJJDQsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl81CisgKiAgcmN4KG9mZnNldCBvZiByc2kpICByYXgob2Zmc2V0IG9mIHJkaSkgICAgICAgIHJlbGF0aXZlIG9mZnNldCAgICAgIGNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oMTF+MTUpICAgICAgICAgIG4gLSAxMSAgICAgIAkgIDQoMTUgKyhuLTExKSAtIG4pICAgICAgICAgYXNocl81CisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfNSk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDExLCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJXI5ZAorCXN1YgklcjlkLCAlZWR4CisJam56CUwobGVzczMyYnl0ZXMpCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDUsICVyOWQJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJNSglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCXN1YgkkMHgxMDAwLCAlcjEwCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl81KToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl81KQorCitMKGdvYmJsZV9hc2hyXzUpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQ1LCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfNSkJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDUsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzUpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzUpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHhmZmUwLCAlZWR4CisJam56CUwoYXNocl81X2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDEwLCAlcjExCisJamJlCUwoYXNocl81X2V4aXR0YWlsKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlcjEwCisJam1wCUwoZ29iYmxlX2FzaHJfNSkKKworCS5wMmFsaWduIDQKK0woYXNocl81X2V4aXR0YWlsKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCXBzcmxkcQkkNSwgJXhtbTAKKwlwc3JsZHEJJDUsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl82CisgKiAgcmN4KG9mZnNldCBvZiByc2kpICByYXgob2Zmc2V0IG9mIHJkaSkgICAgICAgIHJlbGF0aXZlIG9mZnNldCAgICAgIGNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oMTB+MTUpICAgICAgICAgIG4gLSAxMCAgICAgIAkgIDUoMTUgKyhuLTEwKSAtIG4pICAgICAgICAgYXNocl82CisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfNik6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDEwLCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJXI5ZAorCXN1YgklcjlkLCAlZWR4CisJam56CUwobGVzczMyYnl0ZXMpCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDYsICVyOWQJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJNiglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCXN1YgkkMHgxMDAwLCAlcjEwCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl82KToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl82KQorCitMKGdvYmJsZV9hc2hyXzYpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQ2LCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfNikJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDYsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzYpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzYpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHhmZmMwLCAlZWR4CisJam56CUwoYXNocl82X2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDksICVyMTEKKwlqYmUJTChhc2hyXzZfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl82KQorCisJLnAyYWxpZ24gNAorTChhc2hyXzZfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQ2LCAleG1tMAorCXBzcmxkcQkkNiwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzcKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgICAgICAgcmVsYXRpdmUgb2Zmc2V0ICAgICAgY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbig5fjE1KSAgICAgICAgICBuIC0gOSAgICAgIAkgICAgICAgIDYoMTUgKyhuIC0gOSkgLSBuKSAgICAgICAgIGFzaHJfNworICovCisJLnAyYWxpZ24gNAorTChhc2hyXzcpOgorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwltb3ZkcWEJKCVyc2kpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcHNsbGRxCSQ5LCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJXI5ZAorCXN1YgklcjlkLCAlZWR4CisJam56CUwobGVzczMyYnl0ZXMpCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDcsICVyOWQJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJNyglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCXN1YgkkMHgxMDAwLCAlcjEwCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl83KToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl83KQorCitMKGdvYmJsZV9hc2hyXzcpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQ3LCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfNykJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDcsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzcpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzcpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHhmZjgwLCAlZWR4CisJam56CUwoYXNocl83X2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDgsICVyMTEKKwlqYmUJTChhc2hyXzdfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl83KQorCisJLnAyYWxpZ24gNAorTChhc2hyXzdfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQ3LCAleG1tMAorCXBzcmxkcQkkNywgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl84CisgKiAgcmN4KG9mZnNldCBvZiByc2kpICByYXgob2Zmc2V0IG9mIHJkaSkgICAgICAgIHJlbGF0aXZlIG9mZnNldAkgY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbig4fjE1KSAgICAgICAgICBuIC0gOCAgICAgIAkgICAgICAgIDcoMTUgKyhuIC0gOCkgLSBuKSAgICAgICAgIGFzaHJfOAorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzgpOgorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwltb3ZkcWEJKCVyc2kpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcHNsbGRxCSQ4LCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJXI5ZAorCXN1YgklcjlkLCAlZWR4CisJam56CUwobGVzczMyYnl0ZXMpCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDgsICVyOWQJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJOCglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCXN1YgkkMHgxMDAwLCAlcjEwCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl84KToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl84KQorCitMKGdvYmJsZV9hc2hyXzgpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQ4LCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfOCkJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDgsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzgpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzgpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHhmZjAwLCAlZWR4CisJam56CUwoYXNocl84X2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDcsICVyMTEKKwlqYmUJTChhc2hyXzhfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl84KQorCisJLnAyYWxpZ24gNAorTChhc2hyXzhfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQ4LCAleG1tMAorCXBzcmxkcQkkOCwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl85CisgKiAgcmN4KG9mZnNldCBvZiByc2kpICByYXgob2Zmc2V0IG9mIHJkaSkgICAgICAgIHJlbGF0aXZlIG9mZnNldAkgY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbig3fjE1KSAgICAgICAgICBuIC0gNyAgICAgIAkgICAgICAgIDgoMTUgKyhuIC0gNykgLSBuKSAgICAgICAgIGFzaHJfOQorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzkpOgorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwltb3ZkcWEJKCVyc2kpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcHNsbGRxCSQ3LCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJXI5ZAorCXN1YgklcjlkLCAlZWR4CisJam56CUwobGVzczMyYnl0ZXMpCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDksICVyOWQJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJOSglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCXN1YgkkMHgxMDAwLCAlcjEwCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl85KToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl85KQorCitMKGdvYmJsZV9hc2hyXzkpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQ5LCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfOSkJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDksICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCQkvKiBzdG9yZSBmb3IgbmV4dCBjeWNsZSAqLworCWptcAlMKGxvb3BfYXNocl85KQorCisJLnAyYWxpZ24gNAorTChuaWJibGVfYXNocl85KToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAkJLyogY2hlY2sgbmliYmxlIGZvciBudWxsIGNoYXIgKi8KKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXRlc3QJJDB4ZmUwMCwgJWVkeAorCWpueglMKGFzaHJfOV9leGl0dGFpbCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wCSQ2LCAlcjExCisJamJlCUwoYXNocl85X2V4aXR0YWlsKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlcjEwCisJam1wCUwoZ29iYmxlX2FzaHJfOSkKKworCS5wMmFsaWduIDQKK0woYXNocl85X2V4aXR0YWlsKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCXBzcmxkcQkkOSwgJXhtbTAKKwlwc3JsZHEJJDksICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMTAKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgICAgICAgcmVsYXRpdmUgb2Zmc2V0CSBjb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDZ+MTUpICAgICAgICAgIG4gLSA2ICAgICAgCSAgICAgICAgOSgxNSArKG4gLSA2KSAtIG4pICAgICAgICAgYXNocl8xMAorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzEwKToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJXJkaSksICV4bW0yCisJbW92ZHFhCSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkNiwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBzdWJiCSV4bW0wLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlcjlkCisJc2hyCSVjbCwgJWVkeAorCXNocgklY2wsICVyOWQKKwlzdWIJJXI5ZCwgJWVkeAorCWpueglMKGxlc3MzMmJ5dGVzKQorCW1vdmRxYQkoJXJkaSksICV4bW0zCisKKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdgkkMTYsICVyY3gJLyogaW5kZXggZm9yIGxvYWRzICovCisJbW92CSQxMCwgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQkxMCglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCXN1YgkkMHgxMDAwLCAlcjEwCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8xMCk6CisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfMTApCisKK0woZ29iYmxlX2FzaHJfMTApOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQxMCwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKworCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzEwKQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkMTAsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzEwKQorCisJLnAyYWxpZ24gNAorTChuaWJibGVfYXNocl8xMCk6CisJcGNtcGVxYgkleG1tMywgJXhtbTAJCS8qIGNoZWNrIG5pYmJsZSBmb3IgbnVsbCBjaGFyICovCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSQweGZjMDAsICVlZHgKKwlqbnoJTChhc2hyXzEwX2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDUsICVyMTEKKwlqYmUJTChhc2hyXzEwX2V4aXR0YWlsKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlcjEwCisJam1wCUwoZ29iYmxlX2FzaHJfMTApCisKKwkucDJhbGlnbiA0CitMKGFzaHJfMTBfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxCSQxMCwgJXhtbTAKKwlwc3JsZHEJJDEwLCAleG1tMworCWptcAlMKGFmdGVydGFpbCkKKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzExCisgKiAgcmN4KG9mZnNldCBvZiByc2kpICByYXgob2Zmc2V0IG9mIHJkaSkgICAgICAgIHJlbGF0aXZlIG9mZnNldAkgY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbig1fjE1KSAgICAgICAgICBuIC0gNSAgICAgIAkgICAgICAgIDEwKDE1ICsobiAtIDUpIC0gbikgICAgICAgICBhc2hyXzExCisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfMTEpOgorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglcmRpKSwgJXhtbTIKKwltb3ZkcWEJKCVyc2kpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcHNsbGRxCSQ1LCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJXI5ZAorCXN1YgklcjlkLCAlZWR4CisJam56CUwobGVzczMyYnl0ZXMpCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDExLCAlcjlkCS8qIGJ5dGUgcG9zaXRpb24gbGVmdCBvdmVyIGZyb20gbGVzczMyYnl0ZXMgY2FzZSAqLworCS8qCisJICogU2V0dXAgJXIxMCB2YWx1ZSBhbGxvd3MgdXMgdG8gZGV0ZWN0IGNyb3NzaW5nIGEgcGFnZSBib3VuZGFyeS4KKwkgKiBXaGVuICVyMTAgZ29lcyBwb3NpdGl2ZSB3ZSBoYXZlIGNyb3NzZWQgYSBwYWdlIGJvdW5kYXJ5IGFuZAorCSAqIG5lZWQgdG8gZG8gYSBuaWJibGUuCisJICovCisJbGVhCTExKCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzExKToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8xMSkKKworTChnb2JibGVfYXNocl8xMSk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDExLCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfMTEpCS8qIGNyb3NzIHBhZ2UgYm91bmRhcnkgKi8KKworCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQxMSwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfMTEpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzExKToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAkJLyogY2hlY2sgbmliYmxlIGZvciBudWxsIGNoYXIgKi8KKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXRlc3QJJDB4ZjgwMCwgJWVkeAorCWpueglMKGFzaHJfMTFfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcAkkNCwgJXIxMQorCWpiZQlMKGFzaHJfMTFfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl8xMSkKKworCS5wMmFsaWduIDQKK0woYXNocl8xMV9leGl0dGFpbCk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwlwc3JsZHEJJDExLCAleG1tMAorCXBzcmxkcQkkMTEsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMTIKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgICAgICAgcmVsYXRpdmUgb2Zmc2V0CSBjb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDR+MTUpICAgICAgICAgIG4gLSA0ICAgICAgCSAgICAgICAgMTEoMTUgKyhuIC0gNCkgLSBuKSAgICAgICAgIGFzaHJfMTIKKyAqLworCS5wMmFsaWduIDQKK0woYXNocl8xMik6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDQsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKwltb3ZkcWEJKCVyZGkpLCAleG1tMworCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlcmN4CS8qIGluZGV4IGZvciBsb2FkcyAqLworCW1vdgkkMTIsICVyOWQJLyogYnl0ZSBwb3NpdGlvbiBsZWZ0IG92ZXIgZnJvbSBsZXNzMzJieXRlcyBjYXNlICovCisJLyoKKwkgKiBTZXR1cCAlcjEwIHZhbHVlIGFsbG93cyB1cyB0byBkZXRlY3QgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5LgorCSAqIFdoZW4gJXIxMCBnb2VzIHBvc2l0aXZlIHdlIGhhdmUgY3Jvc3NlZCBhIHBhZ2UgYm91bmRhcnkgYW5kCisJICogbmVlZCB0byBkbyBhIG5pYmJsZS4KKwkgKi8KKwlsZWEJMTIoJXJkaSksICVyMTAKKwlhbmQJJDB4ZmZmLCAlcjEwCS8qIG9mZnNldCBpbnRvIDRLIHBhZ2UgKi8KKwlzdWIJJDB4MTAwMCwgJXIxMAkvKiBzdWJ0cmFjdCA0SyBwYWdlc2l6ZSAqLworCisJLnAyYWxpZ24gNAorTChsb29wX2FzaHJfMTIpOgorCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzEyKQorCitMKGdvYmJsZV9hc2hyXzEyKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkMTIsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8xMikJLyogY3Jvc3MgcGFnZSBib3VuZGFyeSAqLworCisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDEyLCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCWptcAlMKGxvb3BfYXNocl8xMikKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfMTIpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCQkvKiBjaGVjayBuaWJibGUgZm9yIG51bGwgY2hhciAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWR4CisJdGVzdAkkMHhmMDAwLCAlZWR4CisJam56CUwoYXNocl8xMl9leGl0dGFpbCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wCSQzLCAlcjExCisJamJlCUwoYXNocl8xMl9leGl0dGFpbCkKKyNlbmRpZgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJXIxMAorCWptcAlMKGdvYmJsZV9hc2hyXzEyKQorCisJLnAyYWxpZ24gNAorTChhc2hyXzEyX2V4aXR0YWlsKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCXBzcmxkcQkkMTIsICV4bW0wCisJcHNybGRxCSQxMiwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8xMworICogIHJjeChvZmZzZXQgb2YgcnNpKSAgcmF4KG9mZnNldCBvZiByZGkpICAgICAgICByZWxhdGl2ZSBvZmZzZXQJIGNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oM34xNSkgICAgICAgICAgbiAtIDMgICAgICAJICAgICAgICAxMigxNSArKG4gLSAzKSAtIG4pICAgICAgICAgYXNocl8xMworICovCisJLnAyYWxpZ24gNAorTChhc2hyXzEzKToKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJXJkaSksICV4bW0yCisJbW92ZHFhCSglcnNpKSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkMywgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBzdWJiCSV4bW0wLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlcjlkCisJc2hyCSVjbCwgJWVkeAorCXNocgklY2wsICVyOWQKKwlzdWIJJXI5ZCwgJWVkeAorCWpueglMKGxlc3MzMmJ5dGVzKQorCW1vdmRxYQkoJXJkaSksICV4bW0zCisKKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdgkkMTYsICVyY3gJLyogaW5kZXggZm9yIGxvYWRzICovCisJbW92CSQxMywgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQkxMyglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCXN1YgkkMHgxMDAwLCAlcjEwCS8qIHN1YnRyYWN0IDRLIHBhZ2VzaXplICovCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8xMyk6CisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfMTMpCisKK0woZ29iYmxlX2FzaHJfMTMpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQxMywgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKworCWFkZAkkMTYsICVyMTAKKwlqZwlMKG5pYmJsZV9hc2hyXzEzKQkvKiBjcm9zcyBwYWdlIGJvdW5kYXJ5ICovCisKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCW1vdmRxYQkoJXJkaSwgJXJjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWduciAkMTMsICV4bW0zLCAleG1tMiAgICAgICAgLyogbWVyZ2UgaW50byBvbmUgMTZieXRlIHZhbHVlICovCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgkkMTYsICVyMTEKKwlqYmUJTChzdHJjbXBfZXhpdHopCisjZW5kaWYKKworCWFkZAkkMTYsICVyY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzEzKQorCisJLnAyYWxpZ24gNAorTChuaWJibGVfYXNocl8xMyk6CisJcGNtcGVxYgkleG1tMywgJXhtbTAJCS8qIGNoZWNrIG5pYmJsZSBmb3IgbnVsbCBjaGFyICovCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwl0ZXN0CSQweGUwMDAsICVlZHgKKwlqbnoJTChhc2hyXzEzX2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXAJJDIsICVyMTEKKwlqYmUJTChhc2hyXzEzX2V4aXR0YWlsKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlcjEwCisJam1wCUwoZ29iYmxlX2FzaHJfMTMpCisKKwkucDJhbGlnbiA0CitMKGFzaHJfMTNfZXhpdHRhaWwpOgorCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJcHNybGRxICAkMTMsICV4bW0wCisJcHNybGRxICAkMTMsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMTQKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgICAgICAgcmVsYXRpdmUgb2Zmc2V0CSBjb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDJ+MTUpICAgICAgICAgIG4gLSAyICAgICAgCSAgICAgICAgMTMoMTUgKyhuIC0gMikgLSBuKSAgICAgICAgIGFzaHJfMTQKKyAqLworCS5wMmFsaWduIDQKK0woYXNocl8xNCk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEgICQyLCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVyOWQKKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJXI5ZAorCXN1YgklcjlkLCAlZWR4CisJam56CUwobGVzczMyYnl0ZXMpCisJbW92ZHFhCSglcmRpKSwgJXhtbTMKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJXJjeAkvKiBpbmRleCBmb3IgbG9hZHMgKi8KKwltb3YJJDE0LCAlcjlkCS8qIGJ5dGUgcG9zaXRpb24gbGVmdCBvdmVyIGZyb20gbGVzczMyYnl0ZXMgY2FzZSAqLworCS8qCisJICogU2V0dXAgJXIxMCB2YWx1ZSBhbGxvd3MgdXMgdG8gZGV0ZWN0IGNyb3NzaW5nIGEgcGFnZSBib3VuZGFyeS4KKwkgKiBXaGVuICVyMTAgZ29lcyBwb3NpdGl2ZSB3ZSBoYXZlIGNyb3NzZWQgYSBwYWdlIGJvdW5kYXJ5IGFuZAorCSAqIG5lZWQgdG8gZG8gYSBuaWJibGUuCisJICovCisJbGVhCTE0KCVyZGkpLCAlcjEwCisJYW5kCSQweGZmZiwgJXIxMAkvKiBvZmZzZXQgaW50byA0SyBwYWdlICovCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzE0KToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8xNCkKKworTChnb2JibGVfYXNocl8xNCk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDE0LCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfMTQpCS8qIGNyb3NzIHBhZ2UgYm91bmRhcnkgKi8KKworCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQxNCwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfMTQpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzE0KToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAkJLyogY2hlY2sgbmliYmxlIGZvciBudWxsIGNoYXIgKi8KKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXRlc3QJJDB4YzAwMCwgJWVkeAorCWpueglMKGFzaHJfMTRfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcAkkMSwgJXIxMQorCWpiZQlMKGFzaHJfMTRfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVyMTAKKwlqbXAJTChnb2JibGVfYXNocl8xNCkKKworCS5wMmFsaWduIDQKK0woYXNocl8xNF9leGl0dGFpbCk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwlwc3JsZHEJJDE0LCAleG1tMAorCXBzcmxkcQkkMTQsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMTUKKyAqICByY3gob2Zmc2V0IG9mIHJzaSkgIHJheChvZmZzZXQgb2YgcmRpKSAgICAgICAgcmVsYXRpdmUgb2Zmc2V0CSBjb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDF+MTUpICAgICAgICAgIG4gLSAxICAgICAgCSAgICAgICAgMTQoMTUgKyhuIC0gMSkgLSBuKSAgICAgICAgIGFzaHJfMTUKKyAqLworCS5wMmFsaWduIDQKK0woYXNocl8xNSk6CisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVyZGkpLCAleG1tMgorCW1vdmRxYQkoJXJzaSksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDEsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJXI5ZAorCXNocgklY2wsICVlZHgKKwlzaHIJJWNsLCAlcjlkCisJc3ViCSVyOWQsICVlZHgKKwlqbnoJTChsZXNzMzJieXRlcykKKworCW1vdmRxYQkoJXJkaSksICV4bW0zCisKKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdgkkMTYsICVyY3gJLyogaW5kZXggZm9yIGxvYWRzICovCisJbW92CSQxNSwgJXI5ZAkvKiBieXRlIHBvc2l0aW9uIGxlZnQgb3ZlciBmcm9tIGxlc3MzMmJ5dGVzIGNhc2UgKi8KKwkvKgorCSAqIFNldHVwICVyMTAgdmFsdWUgYWxsb3dzIHVzIHRvIGRldGVjdCBjcm9zc2luZyBhIHBhZ2UgYm91bmRhcnkuCisJICogV2hlbiAlcjEwIGdvZXMgcG9zaXRpdmUgd2UgaGF2ZSBjcm9zc2VkIGEgcGFnZSBib3VuZGFyeSBhbmQKKwkgKiBuZWVkIHRvIGRvIGEgbmliYmxlLgorCSAqLworCWxlYQkxNSglcmRpKSwgJXIxMAorCWFuZAkkMHhmZmYsICVyMTAJLyogb2Zmc2V0IGludG8gNEsgcGFnZSAqLworCisJc3ViCSQweDEwMDAsICVyMTAJLyogc3VidHJhY3QgNEsgcGFnZXNpemUgKi8KKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzE1KToKKwlhZGQJJDE2LCAlcjEwCisJamcJTChuaWJibGVfYXNocl8xNSkKKworTChnb2JibGVfYXNocl8xNSk6CisJbW92ZHFhCSglcnNpLCAlcmN4KSwgJXhtbTEKKwltb3ZkcWEJKCVyZGksICVyY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIgJDE1LCAleG1tMywgJXhtbTIgICAgICAgIC8qIG1lcmdlIGludG8gb25lIDE2Ynl0ZSB2YWx1ZSAqLworCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlzdWIJJDE2LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisKKwlhZGQJJDE2LCAlcmN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJXIxMAorCWpnCUwobmliYmxlX2FzaHJfMTUpCS8qIGNyb3NzIHBhZ2UgYm91bmRhcnkgKi8KKworCW1vdmRxYQkoJXJzaSwgJXJjeCksICV4bW0xCisJbW92ZHFhCSglcmRpLCAlcmN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yICQxNSwgJXhtbTMsICV4bW0yICAgICAgICAvKiBtZXJnZSBpbnRvIG9uZSAxNmJ5dGUgdmFsdWUgKi8KKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJc3ViCSQxNiwgJXIxMQorCWpiZQlMKHN0cmNtcF9leGl0eikKKyNlbmRpZgorCisJYWRkCSQxNiwgJXJjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfMTUpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzE1KToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAkJLyogY2hlY2sgbmliYmxlIGZvciBudWxsIGNoYXIgKi8KKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXRlc3QJJDB4ODAwMCwgJWVkeAorCWpueglMKGFzaHJfMTVfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXRlc3QJJXIxMSwgJXIxMQorCWplCUwoYXNocl8xNV9leGl0dGFpbCkKKyNlbmRpZgorCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJXIxMAorCWptcAlMKGdvYmJsZV9hc2hyXzE1KQorCisJLnAyYWxpZ24gNAorTChhc2hyXzE1X2V4aXR0YWlsKToKKwltb3ZkcWEJKCVyc2ksICVyY3gpLCAleG1tMQorCXBzcmxkcQkkMTUsICV4bW0zCisJcHNybGRxCSQxNSwgJXhtbTAKKworCS5wMmFsaWduIDQKK0woYWZ0ZXJ0YWlsKToKKwlwY21wZXFiCSV4bW0zLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJbm90CSVlZHgKKworCS5wMmFsaWduIDQKK0woZXhpdCk6CisJbGVhCS0xNiglcjksICVyY3gpLCAlcmF4CS8qIGxvY2F0ZSB0aGUgZXhhY3Qgb2Zmc2V0IGZvciByZGkgKi8KK0wobGVzczMyYnl0ZXMpOgorCWxlYQkoJXJkaSwgJXJheCksICVyZGkJLyogbG9jYXRlIHRoZSBleGFjdCBhZGRyZXNzIGZvciBmaXJzdCBvcGVyYW5kKHJkaSkgKi8KKwlsZWEJKCVyc2ksICVyY3gpLCAlcnNpCS8qIGxvY2F0ZSB0aGUgZXhhY3QgYWRkcmVzcyBmb3Igc2Vjb25kIG9wZXJhbmQocnNpKSAqLworCXRlc3QJJXI4ZCwgJXI4ZAorCWp6CUwocmV0KQorCXhjaGcJJXJzaSwgJXJkaQkJLyogcmVjb3ZlciBvcmlnaW5hbCBvcmRlciBhY2NvcmRpbmcgdG8gZmxhZyglcjhkKSAqLworCisJLnAyYWxpZ24gNAorTChyZXQpOgorTChsZXNzMTZieXRlcyk6CisJYnNmCSVyZHgsICVyZHgJCS8qIGZpbmQgYW5kIHN0b3JlIGJpdCBpbmRleCBpbiAlcmR4ICovCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCXN1YgklcmR4LCAlcjExCisJamJlCUwoc3RyY21wX2V4aXR6KQorI2VuZGlmCisJbW92emJsCSglcnNpLCAlcmR4KSwgJWVjeAorCW1vdnpibAkoJXJkaSwgJXJkeCksICVlYXgKKworCXN1YgklZWN4LCAlZWF4CisJcmV0CisKK0woc3RyY21wX2V4aXR6KToKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChCeXRlMCk6CisJbW92engJKCVyc2kpLCAlZWN4CisJbW92engJKCVyZGkpLCAlZWF4CisKKwlzdWIJJWVjeCwgJWVheAorCXJldAorRU5EIChTVFJDTVApCisKKwkuc2VjdGlvbiAucm9kYXRhLCJhIixAcHJvZ2JpdHMKKwkucDJhbGlnbiAzCitMKHVuYWxpZ25lZF90YWJsZSk6CisJLmludAlMKGFzaHJfMSkgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl8yKSAtIEwodW5hbGlnbmVkX3RhYmxlKQorCS5pbnQJTChhc2hyXzMpIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfNCkgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl81KSAtIEwodW5hbGlnbmVkX3RhYmxlKQorCS5pbnQJTChhc2hyXzYpIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfNykgLSBMKHVuYWxpZ25lZF90YWJsZSkKKwkuaW50CUwoYXNocl84KSAtIEwodW5hbGlnbmVkX3RhYmxlKQorCS5pbnQJTChhc2hyXzkpIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfMTApIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfMTEpIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfMTIpIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfMTMpIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfMTQpIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfMTUpIC0gTCh1bmFsaWduZWRfdGFibGUpCisJLmludAlMKGFzaHJfMCkgLSBMKHVuYWxpZ25lZF90YWJsZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3RyaW5nL3Nzc2UzLXN0cm5jbXAtc2xtLlMgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc3NlMy1zdHJuY21wLXNsbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDA3NzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N0cmluZy9zc3NlMy1zdHJuY21wLXNsbS5TCkBAIC0wLDAgKzEsMzMgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTQsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNkZWZpbmUgVVNFX0FTX1NUUk5DTVAKKyNkZWZpbmUgU1RSQ01QCQlzdHJuY21wCisjaW5jbHVkZSAic3NzZTMtc3RyY21wLXNsbS5TIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy5tayBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMDllNzcuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy5taworKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0jIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuCi1zeXNjYWxsX3NyYyA6PQotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19hcmNoX3ByY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fYnJrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19leGl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0Y3B1LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0Y3dkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19pb2N0bC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX29wZW5hdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3Bwb2xsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fcHNlbGVjdDYuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19wdHJhY2UuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19yZWJvb3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zeXNsb2cuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX193YWl0aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvX2V4aXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvYWNjZXB0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2FjY3QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvYmluZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9jYXBnZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvY2Fwc2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2NoZGlyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2Nocm9vdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9zZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9jb25uZWN0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZHVwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2R1cDMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9lcG9sbF9jdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZXZlbnRmZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9leGVjdmUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaGRpci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mY2htb2QuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNobW9kYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNob3duLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG93bmF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2ZjbnRsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2ZkYXRhc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mZ2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mbG9jay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZnNldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0YXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXRmcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9mdHJ1bmNhdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZnV0ZXguUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0ZGVudHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0ZWdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRldWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldGdpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRncm91cHMuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cGlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBwaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJlc3VpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRybGltaXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldHNpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldHRpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0dWlkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2dldHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2lvcHJpb19zZXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMva2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9rbG9nY3RsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2xnZXR4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbGlzdGVuLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2xpc3R4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9sbGlzdHhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9sc2Vlay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9sc2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbWFkdmlzZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9taW5jb3JlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL21rZGlyYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbWtub2RhdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9tbG9jay5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9tbG9ja2FsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9tbWFwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL21vdW50LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL21wcm90ZWN0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL21yZW1hcC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9tc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5sb2NrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL211bmxvY2thbGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvbXVubWFwLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL25hbm9zbGVlcC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvcGVyc29uYWxpdHkuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvcGlwZTIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvcHJjdGwuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvcHJlYWQ2NC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9wcmxpbWl0NjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvcHdyaXRlNjQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVhZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkYWhlYWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVhZGxpbmthdC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkdi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9yZWN2ZnJvbS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9yZWN2bXNnLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3JlbmFtZWF0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF95aWVsZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZW5kZmlsZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZW5kbXNnLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmR0by5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRnaWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldGl0aW1lci5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRucy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRwZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlZ2lkLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlc2dpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZXN1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmV1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmxpbWl0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldHNpZC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zZXR1aWQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0eGF0dHIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2h1dGRvd24uUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2lnYWx0c3RhY2suUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc2lnbmFsZmQ0LlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3NvY2tldC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zb2NrZXRwYWlyLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3N0YXRmcy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zd2Fwb2ZmLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3N3YXBvbi5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zeW1saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvc3luYy5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy9zeXNpbmZvLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3Rna2lsbC5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVzLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3RraWxsLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3RydW5jYXRlLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3VtYXNrLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2XzY0L3N5c2NhbGxzL3Vtb3VudDIuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5hbWUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5saW5rYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5zaGFyZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLXg4Nl82NC9zeXNjYWxscy91dGltZW5zYXQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvd2FpdDQuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvd3JpdGUuUwotc3lzY2FsbF9zcmMgKz0gYXJjaC14ODZfNjQvc3lzY2FsbHMvd3JpdGV2LlMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19hY2NlcHQ0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fYWNjZXB0NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNWJlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fYWNjZXB0NC5TCkBAIC0wLDAgKzEsMTcgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19hY2NlcHQ0KQorICAgIG1vdnEgICAgJXJjeCwgJXIxMAorICAgIG1vdmwgICAgJF9fTlJfYWNjZXB0NCwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoX19hY2NlcHQ0KQorLmhpZGRlbiBfX2FjY2VwdDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19hcmNoX3ByY3RsLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fYXJjaF9wcmN0bC5TCmluZGV4IGU4Nzg2NzkuLjBhNjA0ZjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19hcmNoX3ByY3RsLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2FyY2hfcHJjdGwuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX2FyY2hfcHJjdGwpCi0uaGlkZGVuIF9DX0xBQkVMKF9fYXJjaF9wcmN0bCkKKy5oaWRkZW4gX19hcmNoX3ByY3RsCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fYnJrLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fYnJrLlMKaW5kZXggMThjMjk5Ny4uYjZjMGYyZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2Jyay5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19icmsuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX2JyaykKLS5oaWRkZW4gX0NfTEFCRUwoX19icmspCisuaGlkZGVuIF9fYnJrCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fY2xvY2tfZ2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2Nsb2NrX2dldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2FjZGIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2Nsb2NrX2dldHRpbWUuUwpAQCAtMCwwICsxLDE2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fY2xvY2tfZ2V0dGltZSkKKyAgICBtb3ZsICAgICRfX05SX2Nsb2NrX2dldHRpbWUsICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKF9fY2xvY2tfZ2V0dGltZSkKKy5oaWRkZW4gX19jbG9ja19nZXR0aW1lCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fY29ubmVjdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2Nvbm5lY3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzUzMWFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2Nvbm5lY3QuUwpAQCAtMCwwICsxLDE2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKF9fY29ubmVjdCkKKyAgICBtb3ZsICAgICRfX05SX2Nvbm5lY3QsICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKF9fY29ubmVjdCkKKy5oaWRkZW4gX19jb25uZWN0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZXBvbGxfcHdhaXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCmluZGV4IGVkOTEzYjAuLmI0ODZjNGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19lcG9sbF9wd2FpdC5TCkBAIC0xMCw5ICsxMCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19lcG9sbF9wd2FpdCkKLS5oaWRkZW4gX0NfTEFCRUwoX19lcG9sbF9wd2FpdCkKKy5oaWRkZW4gX19lcG9sbF9wd2FpdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2V4aXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19leGl0LlMKaW5kZXggZGExZjlmOC4uOTliMTFmYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2V4aXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZXhpdC5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fZXhpdCkKLS5oaWRkZW4gX0NfTEFCRUwoX19leGl0KQorLmhpZGRlbiBfX2V4aXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19mYWR2aXNlNjQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19mYWR2aXNlNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODEwZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2ZhZHZpc2U2NC5TCkBAIC0wLDAgKzEsMTcgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19mYWR2aXNlNjQpCisgICAgbW92cSAgICAlcmN4LCAlcjEwCisgICAgbW92bCAgICAkX19OUl9mYWR2aXNlNjQsICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKF9fZmFkdmlzZTY0KQorLmhpZGRlbiBfX2ZhZHZpc2U2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldGNwdS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldGNwdS5TCmluZGV4IDVhMTg0OTQuLjM5MDNlOWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRjcHUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0Y3B1LlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19nZXRjcHUpCi0uaGlkZGVuIF9DX0xBQkVMKF9fZ2V0Y3B1KQorLmhpZGRlbiBfX2dldGNwdQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldGN3ZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldGN3ZC5TCmluZGV4IGM5ZTk5NDIuLmQzOWMxZDcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRjd2QuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0Y3dkLlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19nZXRjd2QpCi0uaGlkZGVuIF9DX0xBQkVMKF9fZ2V0Y3dkKQorLmhpZGRlbiBfX2dldGN3ZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldGRlbnRzNjQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRkZW50czY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVlYjk0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRkZW50czY0LlMKQEAgLTAsMCArMSwxNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2dldGRlbnRzNjQpCisgICAgbW92bCAgICAkX19OUl9nZXRkZW50czY0LCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORChfX2dldGRlbnRzNjQpCisuaGlkZGVuIF9fZ2V0ZGVudHM2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldHBpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldHBpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNDMxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0cGlkLlMKQEAgLTAsMCArMSwxNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX2dldHBpZCkKKyAgICBtb3ZsICAgICRfX05SX2dldHBpZCwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoX19nZXRwaWQpCisuaGlkZGVuIF9fZ2V0cGlkCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCmluZGV4IGY1MjMwZTEuLjdjNjE4YTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fZ2V0cHJpb3JpdHkpCi0uaGlkZGVuIF9DX0xBQkVMKF9fZ2V0cHJpb3JpdHkpCisuaGlkZGVuIF9fZ2V0cHJpb3JpdHkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19nZXR0aW1lb2ZkYXkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWI5YjZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2dldHRpbWVvZmRheS5TCkBAIC0wLDAgKzEsMTYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19nZXR0aW1lb2ZkYXkpCisgICAgbW92bCAgICAkX19OUl9nZXR0aW1lb2ZkYXksICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKF9fZ2V0dGltZW9mZGF5KQorLmhpZGRlbiBfX2dldHRpbWVvZmRheQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX2lvY3RsLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19faW9jdGwuUwppbmRleCA4ZjMwZWI2Li4wZWIzNGYwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19faW9jdGwuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19faW9jdGwuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX2lvY3RsKQotLmhpZGRlbiBfQ19MQUJFTChfX2lvY3RsKQorLmhpZGRlbiBfX2lvY3RsCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fb3BlbmF0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fb3BlbmF0LlMKaW5kZXggY2Q2YTA3Zi4uMTRmNTNjYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX29wZW5hdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19vcGVuYXQuUwpAQCAtMTAsOSArMTAsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fb3BlbmF0KQotLmhpZGRlbiBfQ19MQUJFTChfX29wZW5hdCkKKy5oaWRkZW4gX19vcGVuYXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19wcG9sbC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3Bwb2xsLlMKaW5kZXggZGQ2MzlhZS4uODJiOTdkZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3Bwb2xsLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3Bwb2xsLlMKQEAgLTEwLDkgKzEwLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX3Bwb2xsKQotLmhpZGRlbiBfQ19MQUJFTChfX3Bwb2xsKQorLmhpZGRlbiBfX3Bwb2xsCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcHNlbGVjdDYuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCmluZGV4IGMzNzQ4M2EuLmMxMWQ4MTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19wc2VsZWN0Ni5TCkBAIC0xMCw5ICsxMCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19wc2VsZWN0NikKLS5oaWRkZW4gX0NfTEFCRUwoX19wc2VsZWN0NikKKy5oaWRkZW4gX19wc2VsZWN0NgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3B0cmFjZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3B0cmFjZS5TCmluZGV4IGJlNDJiOTEuLjcyOWUwMDcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19wdHJhY2UuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcHRyYWNlLlMKQEAgLTEwLDkgKzEwLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX3B0cmFjZSkKLS5oaWRkZW4gX0NfTEFCRUwoX19wdHJhY2UpCisuaGlkZGVuIF9fcHRyYWNlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcmVib290LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcmVib290LlMKaW5kZXggZmM4ZTU4ZC4uYjQ2MmRjNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3JlYm9vdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19yZWJvb3QuUwpAQCAtMTAsOSArMTAsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fcmVib290KQotLmhpZGRlbiBfQ19MQUJFTChfX3JlYm9vdCkKKy5oaWRkZW4gX19yZWJvb3QKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwppbmRleCA3MDYwMmRmLi4xN2M1OTk1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCkBAIC0xMCw5ICsxMCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19ydF9zaWdhY3Rpb24pCi0uaGlkZGVuIF9DX0xBQkVMKF9fcnRfc2lnYWN0aW9uKQorLmhpZGRlbiBfX3J0X3NpZ2FjdGlvbgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdwZW5kaW5nLlMKaW5kZXggMWNhZjEzMS4uYjViODFiYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3BlbmRpbmcuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lncGVuZGluZy5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fcnRfc2lncGVuZGluZykKLS5oaWRkZW4gX0NfTEFCRUwoX19ydF9zaWdwZW5kaW5nKQorLmhpZGRlbiBfX3J0X3NpZ3BlbmRpbmcKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKaW5kZXggZDdlNDRhNy4uZThiM2YyYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKQEAgLTEwLDkgKzEwLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX3J0X3NpZ3Byb2NtYXNrKQotLmhpZGRlbiBfQ19MQUJFTChfX3J0X3NpZ3Byb2NtYXNrKQorLmhpZGRlbiBfX3J0X3NpZ3Byb2NtYXNrCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3N1c3BlbmQuUwppbmRleCA4NTFiOTNlLi5mNjM2NmEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lnc3VzcGVuZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWdzdXNwZW5kLlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX19ydF9zaWdzdXNwZW5kKQotLmhpZGRlbiBfQ19MQUJFTChfX3J0X3NpZ3N1c3BlbmQpCisuaGlkZGVuIF9fcnRfc2lnc3VzcGVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCmluZGV4IDY5NjJkNGEuLjliY2I4MTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKQEAgLTEwLDkgKzEwLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX3J0X3NpZ3RpbWVkd2FpdCkKLS5oaWRkZW4gX0NfTEFCRUwoX19ydF9zaWd0aW1lZHdhaXQpCisuaGlkZGVuIF9fcnRfc2lndGltZWR3YWl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCmluZGV4IDg2MWYwNmIuLjBjYTY4MTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fc2NoZWRfZ2V0YWZmaW5pdHkpCi0uaGlkZGVuIF9DX0xBQkVMKF9fc2NoZWRfZ2V0YWZmaW5pdHkpCisuaGlkZGVuIF9fc2NoZWRfZ2V0YWZmaW5pdHkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zZXRfdGlkX2FkZHJlc3MuUwppbmRleCBmZTcyNjBmLi4zZGFkNjYwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fc2V0X3RpZF9hZGRyZXNzLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NldF90aWRfYWRkcmVzcy5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fc2V0X3RpZF9hZGRyZXNzKQotLmhpZGRlbiBfQ19MQUJFTChfX3NldF90aWRfYWRkcmVzcykKKy5oaWRkZW4gX19zZXRfdGlkX2FkZHJlc3MKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zaWduYWxmZDQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX19zaWduYWxmZDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDRiZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NpZ25hbGZkNC5TCkBAIC0wLDAgKzEsMTcgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoX19zaWduYWxmZDQpCisgICAgbW92cSAgICAlcmN4LCAlcjEwCisgICAgbW92bCAgICAkX19OUl9zaWduYWxmZDQsICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKF9fc2lnbmFsZmQ0KQorLmhpZGRlbiBfX3NpZ25hbGZkNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NvY2tldC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3NvY2tldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjNkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fc29ja2V0LlMKQEAgLTAsMCArMSwxNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShfX3NvY2tldCkKKyAgICBtb3ZsICAgICRfX05SX3NvY2tldCwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoX19zb2NrZXQpCisuaGlkZGVuIF9fc29ja2V0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fc3lzbG9nLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fc3lzbG9nLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlNDExNDkuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3N5c2xvZy5TCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShfX3N5c2xvZykKLSAgICBtb3ZsICAgICRfX05SX3N5c2xvZywgJWVheAotICAgIHN5c2NhbGwKLSAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAotMToKLSAgICByZXQKLUVORChfX3N5c2xvZykKLS5oaWRkZW4gX0NfTEFCRUwoX19zeXNsb2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKaW5kZXggMWM1YzY4ZS4uY2I5NTVhNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX3RpbWVyX2NyZWF0ZSkKLS5oaWRkZW4gX0NfTEFCRUwoX190aW1lcl9jcmVhdGUpCisuaGlkZGVuIF9fdGltZXJfY3JlYXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKaW5kZXggYzgyNjc1Ny4uN2FiYzdkOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwpAQCAtOSw5ICs5LDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChfX3RpbWVyX2RlbGV0ZSkKLS5oaWRkZW4gX0NfTEFCRUwoX190aW1lcl9kZWxldGUpCisuaGlkZGVuIF9fdGltZXJfZGVsZXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwppbmRleCA3NzJiMDVlLi5mMmEwZTI0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKQEAgLTksOSArOSw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX190aW1lcl9nZXRvdmVycnVuKQotLmhpZGRlbiBfQ19MQUJFTChfX3RpbWVyX2dldG92ZXJydW4pCisuaGlkZGVuIF9fdGltZXJfZ2V0b3ZlcnJ1bgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKaW5kZXggMTgxMDY5Yi4uNjJjMmI0NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCkBAIC05LDkgKzksOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fdGltZXJfZ2V0dGltZSkKLS5oaWRkZW4gX0NfTEFCRUwoX190aW1lcl9nZXR0aW1lKQorLmhpZGRlbiBfX3RpbWVyX2dldHRpbWUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCmluZGV4IDExZmUwNGUuLjIyNWZhOGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwpAQCAtMTAsOSArMTAsOCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9fdGltZXJfc2V0dGltZSkKLS5oaWRkZW4gX0NfTEFCRUwoX190aW1lcl9zZXR0aW1lKQorLmhpZGRlbiBfX3RpbWVyX3NldHRpbWUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX193YWl0aWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX193YWl0aWQuUwppbmRleCA0MzE3ZDc4Li5mZjhhM2M1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19fd2FpdGlkLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fX3dhaXRpZC5TCkBAIC0xMCw5ICsxMCw4IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoX193YWl0aWQpCi0uaGlkZGVuIF9DX0xBQkVMKF9fd2FpdGlkKQorLmhpZGRlbiBfX3dhaXRpZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fZXhpdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9fZXhpdC5TCmluZGV4IGY0MGNmZTMuLmM3OTA5MWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvX2V4aXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL19leGl0LlMKQEAgLTksOCArOSwxMCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKF9leGl0KQorCisgICAgLmdsb2JsIF9FeGl0CisgICAgLmVxdSBfRXhpdCwgX2V4aXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvYWNjZXB0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2FjY2VwdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODhmYjgyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvYWNjZXB0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGFjY2VwdCkKLSAgICBtb3ZsICAgICRfX05SX2FjY2VwdCwgJWVheAotICAgIHN5c2NhbGwKLSAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAotMToKLSAgICByZXQKLUVORChhY2NlcHQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2FjY3QuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvYWNjdC5TCmluZGV4IDU5YWYxN2QuLmE3Mzk3MDcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvYWNjdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvYWNjdC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGFjY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2JpbmQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvYmluZC5TCmluZGV4IDIwZGZhMmQuLmU1YmMyNjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvYmluZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvYmluZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGJpbmQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2NhcGdldC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jYXBnZXQuUwppbmRleCA5Y2Y3M2ZiLi45Y2UxNTgzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2NhcGdldC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2FwZ2V0LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoY2FwZ2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jYXBzZXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2Fwc2V0LlMKaW5kZXggZjZjZjJlYi4uMjc3Njc1NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jYXBzZXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2NhcHNldC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGNhcHNldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2hkaXIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2hkaXIuUwppbmRleCBhMDRmM2FhLi4yNjk5MDVjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2NoZGlyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jaGRpci5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGNoZGlyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jaHJvb3QuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2hyb290LlMKaW5kZXggNDkxMDg2ZC4uNzEzYjFiMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jaHJvb3QuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nocm9vdC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGNocm9vdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCmluZGV4IGQxZDQ5MWUuLmY2NWQxMjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChjbG9ja19nZXRyZXMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWFlNjE2Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShjbG9ja19nZXR0aW1lKQotICAgIG1vdmwgICAgJF9fTlJfY2xvY2tfZ2V0dGltZSwgJWVheAotICAgIHN5c2NhbGwKLSAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAotMToKLSAgICByZXQKLUVORChjbG9ja19nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKaW5kZXggMzgzMzExMy4uMmE3OWJkZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoY2xvY2tfbmFub3NsZWVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwppbmRleCAxNWIyN2FhLi4yNjA3MGE0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChjbG9ja19zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9zZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9jbG9zZS5TCmluZGV4IDM2MWQ4MmYuLjhhN2FkYTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY2xvc2UuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nsb3NlLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoY2xvc2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY29ubmVjdC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2NkYmFlLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvY29ubmVjdC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShjb25uZWN0KQotICAgIG1vdmwgICAgJF9fTlJfY29ubmVjdCwgJWVheAotICAgIHN5c2NhbGwKLSAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAotMToKLSAgICByZXQKLUVORChjb25uZWN0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwppbmRleCAzM2YyMzU0Li42M2YxN2FkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChkZWxldGVfbW9kdWxlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9kdXAuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZHVwLlMKaW5kZXggZGZjMGRlZi4uNTAxNmY3NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9kdXAuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2R1cC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGR1cCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZHVwMy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9kdXAzLlMKaW5kZXggZGNiNDE1NS4uOWFiZDE2OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9kdXAzLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9kdXAzLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZHVwMykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZXBvbGxfY3JlYXRlMS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKaW5kZXggZmEzYzZkNy4uZDFlNGJmYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9lcG9sbF9jcmVhdGUxLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZXBvbGxfY3JlYXRlMSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZXBvbGxfY3RsLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCmluZGV4IDcyZGY5N2YuLmY0MjliOTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZXBvbGxfY3RsLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9lcG9sbF9jdGwuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGVwb2xsX2N0bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZXZlbnRmZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9ldmVudGZkLlMKaW5kZXggOTlmNTg1Yy4uZGNjNTEwNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9ldmVudGZkLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9ldmVudGZkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZXZlbnRmZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZXhlY3ZlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2V4ZWN2ZS5TCmluZGV4IGVhODlkN2QuLjk0N2JhYTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZXhlY3ZlLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9leGVjdmUuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChleGVjdmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mYWNjZXNzYXQuUwppbmRleCAyMzhhNGUxLi4wNWE2ZTc4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChmYWNjZXNzYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZhbGxvY2F0ZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mYWxsb2NhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA3ZjdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mYWxsb2NhdGUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZhbGxvY2F0ZSkKKyAgICBtb3ZxICAgICVyY3gsICVyMTAKKyAgICBtb3ZsICAgICRfX05SX2ZhbGxvY2F0ZSwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoZmFsbG9jYXRlKQorCisgICAgLmdsb2JsIGZhbGxvY2F0ZTY0CisgICAgLmVxdSBmYWxsb2NhdGU2NCwgZmFsbG9jYXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaGRpci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2hkaXIuUwppbmRleCBkYTE0ZWRkLi5kMDA1YzE0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaGRpci5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNoZGlyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZmNoZGlyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2htb2QuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNobW9kLlMKaW5kZXggYTZkMTVmYy4uYjM1YmQyMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2htb2QuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG1vZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGZjaG1vZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNobW9kYXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNobW9kYXQuUwppbmRleCBkYWY3MWFiLi4yZDc4ZDhlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG1vZGF0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2htb2RhdC5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZmNobW9kYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG93bi5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2hvd24uUwppbmRleCA4YzY4YTE1Li5kNWJkYzcxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG93bi5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNob3duLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZmNob3duKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2hvd25hdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY2hvd25hdC5TCmluZGV4IGU1MjY1ZGQuLmZmMDVlOWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNob3duYXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjaG93bmF0LlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChmY2hvd25hdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNudGwuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmNudGwuUwppbmRleCBjNTYyMzg1Li5mMjgxOTViIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZjbnRsLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mY250bC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGZjbnRsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mZGF0YXN5bmMuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmRhdGFzeW5jLlMKaW5kZXggM2Y5ZWU3Mi4uMjcyMzliOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mZGF0YXN5bmMuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZkYXRhc3luYy5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGZkYXRhc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmdldHhhdHRyLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZnZXR4YXR0ci5TCmluZGV4IDc3ZjA5NWIuLjc3NjI0NzQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mZ2V0eGF0dHIuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGZnZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmxpc3R4YXR0ci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mbGlzdHhhdHRyLlMKaW5kZXggY2QzOTI5OC4uYWEwMmRiMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mbGlzdHhhdHRyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZmxpc3R4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmxvY2suUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZmxvY2suUwppbmRleCBhZjJkYmVmLi4xYmM2Njc4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Zsb2NrLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mbG9jay5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGZsb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKaW5kZXggNDM4NzU2My4uNTE3MDk0YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGZyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnNldHhhdHRyLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzZXR4YXR0ci5TCmluZGV4IDYxMDg5MGMuLjk3ODIyYzQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnNldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc2V0eGF0dHIuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGZzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVmNDg3ZC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGZzdGF0KQotICAgIG1vdmwgICAgJF9fTlJfZnN0YXQsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQoZnN0YXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0NjQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXQ2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTc2NjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0NjQuUwpAQCAtMCwwICsxLDE4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZzdGF0NjQpCisgICAgbW92bCAgICAkX19OUl9mc3RhdCwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoZnN0YXQ2NCkKKworICAgIC5nbG9ibCBmc3RhdAorICAgIC5lcXUgZnN0YXQsIGZzdGF0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXRhdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdGF0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZDc5YmQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdGF0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGZzdGF0YXQpCi0gICAgbW92cSAgICAlcmN4LCAlcjEwCi0gICAgbW92bCAgICAkX19OUl9uZXdmc3RhdGF0LCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKGZzdGF0YXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0YXQ2NC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdGF0NjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzc4NWJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdGF0NjQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZzdGF0YXQ2NCkKKyAgICBtb3ZxICAgICVyY3gsICVyMTAKKyAgICBtb3ZsICAgICRfX05SX25ld2ZzdGF0YXQsICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKGZzdGF0YXQ2NCkKKworICAgIC5nbG9ibCBmc3RhdGF0CisgICAgLmVxdSBmc3RhdGF0LCBmc3RhdGF0NjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN0YXRmcy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdGZzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YTkwZmIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdGZzLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGZzdGF0ZnMpCi0gICAgbW92bCAgICAkX19OUl9mc3RhdGZzLCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKGZzdGF0ZnMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzdGF0ZnM2NC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdGZzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzI3MzUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3RhdGZzNjQuUwpAQCAtMCwwICsxLDE4IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKGZzdGF0ZnM2NCkKKyAgICBtb3ZsICAgICRfX05SX2ZzdGF0ZnMsICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKGZzdGF0ZnM2NCkKKworICAgIC5nbG9ibCBmc3RhdGZzCisgICAgLmVxdSBmc3RhdGZzLCBmc3RhdGZzNjQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN5bmMuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnN5bmMuUwppbmRleCAwMzkyNjIwLi5lN2VjNmRhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2ZzeW5jLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mc3luYy5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGZzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mdHJ1bmNhdGUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZnRydW5jYXRlLlMKaW5kZXggODBjYmU3OS4uMDM2NTM2OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mdHJ1bmNhdGUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCkBAIC05LDExICs5LDEwIEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZnRydW5jYXRlKQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKGZ0cnVuY2F0ZTY0KQotICAgIC5lcXUgX0NfTEFCRUwoZnRydW5jYXRlNjQpLCBfQ19MQUJFTChmdHJ1bmNhdGUpCisgICAgLmdsb2JsIGZ0cnVuY2F0ZTY0CisgICAgLmVxdSBmdHJ1bmNhdGU2NCwgZnRydW5jYXRlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Z1dGV4LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2Z1dGV4LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZjY0YmQuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9mdXRleC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShmdXRleCkKLSAgICBtb3ZxICAgICVyY3gsICVyMTAKLSAgICBtb3ZsICAgICRfX05SX2Z1dGV4LCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKGZ1dGV4KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRkZW50cy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRkZW50cy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDdjMjZiLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0ZGVudHMuUworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoZ2V0ZGVudHMpCi0gICAgbW92bCAgICAkX19OUl9nZXRkZW50czY0LCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKGdldGRlbnRzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRlZ2lkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGVnaWQuUwppbmRleCBjMWI4ZmFlLi44NGJhMjQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGVnaWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGVnaWQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRlZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRldWlkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGV1aWQuUwppbmRleCBmMmYxMDM1Li4xOGE5OTFhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGV1aWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGV1aWQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRldWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRnaWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0Z2lkLlMKaW5kZXggZTliMzhjNy4uNWU0YjBlZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRnaWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGdpZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGdldGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGdyb3Vwcy5TCmluZGV4IGIxMjgzNmUuLmI1ZGQ4MWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRncm91cHMuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRncm91cHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGl0aW1lci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRpdGltZXIuUwppbmRleCA3OTQ4NGQxLi5jNGJiMTIwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldGl0aW1lci5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZ2V0aXRpbWVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRwZWVybmFtZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRwZWVybmFtZS5TCmluZGV4IGEyNzZjYWMuLjBiMjEyYmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZ2V0cGVlcm5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBnaWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cGdpZC5TCmluZGV4IGMyZjVjMDkuLmQxYjBlOGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cGdpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cGdpZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGdldHBnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRwaWQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjViOGRmNC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBpZC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShnZXRwaWQpCi0gICAgbW92bCAgICAkX19OUl9nZXRwaWQsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQoZ2V0cGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRwcGlkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBwaWQuUwppbmRleCBjZTNkYmRhLi5lMWNmZWUwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBwaWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHBwaWQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRwcGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKaW5kZXggMGVkYzIwYS4uMGI3ZWE3YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRyZXNnaWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJlc2dpZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGdldHJlc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cmVzdWlkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJlc3VpZC5TCmluZGV4IGI5MDBjOTkuLjBkN2EwNTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cmVzdWlkLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRyZXN1aWQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRyZXN1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJsaW1pdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRybGltaXQuUwppbmRleCAwYjM1MzZjLi4yZDI3MmExIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJsaW1pdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKQEAgLTksMTEgKzksMTAgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRybGltaXQpCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwoZ2V0cmxpbWl0NjQpCi0gICAgLmVxdSBfQ19MQUJFTChnZXRybGltaXQ2NCksIF9DX0xBQkVMKGdldHJsaW1pdCkKKyAgICAuZ2xvYmwgZ2V0cmxpbWl0NjQKKyAgICAuZXF1IGdldHJsaW1pdDY0LCBnZXRybGltaXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cnVzYWdlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHJ1c2FnZS5TCmluZGV4IDIxMGQ1ODYuLmVlZjdmYjggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRydXNhZ2UuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChnZXRydXNhZ2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHNpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRzaWQuUwppbmRleCBkZTNlM2MwLi4wMjJmOTU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHNpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0c2lkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZ2V0c2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRzb2NrbmFtZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCmluZGV4IGNjYWJmNzEuLjM2ZmRjZjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0c29ja25hbWUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZ2V0c29ja25hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0c29ja29wdC5TCmluZGV4IGM0ZjQ1NmUuLmMxZTExZTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0c29ja29wdC5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZ2V0c29ja29wdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0dGlkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHRpZC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWVjYzE2Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0dGlkLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGdldHRpZCkKLSAgICBtb3ZsICAgICRfX05SX2dldHRpZCwgJWVheAotICAgIHN5c2NhbGwKLSAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAotMToKLSAgICByZXQKLUVORChnZXR0aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYxYmI2ZS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShnZXR0aW1lb2ZkYXkpCi0gICAgbW92bCAgICAkX19OUl9nZXR0aW1lb2ZkYXksICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQoZ2V0dGltZW9mZGF5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXR1aWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0dWlkLlMKaW5kZXggNGNiOWVmZC4uOTNjZDBmOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXR1aWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHVpZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGdldHVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvZ2V0eGF0dHIuUwppbmRleCA2YmRiNzYyLi4wMTM3OGIwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2dldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9nZXR4YXR0ci5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKaW5kZXggZWIwNDhjMC4uYzAwNWRlNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9pbml0X21vZHVsZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChpbml0X21vZHVsZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwppbmRleCAzZTEyNGU3Li5lZGYyOTMwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGlub3RpZnlfYWRkX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9pbm90aWZ5X2luaXQxLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwppbmRleCA4ZDgyMTE1Li5iMTU4MDE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfaW5pdDEuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChpbm90aWZ5X2luaXQxKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwppbmRleCBlY2UxNTEwLi5mMmZjMTBlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChpbm90aWZ5X3JtX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9pb3ByaW9fZ2V0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lvcHJpb19nZXQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhjMTQwMi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2lvcHJpb19nZXQuUworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoaW9wcmlvX2dldCkKLSAgICBtb3ZsICAgICRfX05SX2lvcHJpb19nZXQsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQoaW9wcmlvX2dldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvaW9wcmlvX3NldC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9pb3ByaW9fc2V0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZGM4YjMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9pb3ByaW9fc2V0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKGlvcHJpb19zZXQpCi0gICAgbW92bCAgICAkX19OUl9pb3ByaW9fc2V0LCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKGlvcHJpb19zZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2tpbGwuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMva2lsbC5TCmluZGV4IDUxY2EzNWMuLmZlOTNmMzQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMva2lsbC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMva2lsbC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGtpbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2tsb2djdGwuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMva2xvZ2N0bC5TCmluZGV4IDhjMGNjY2UuLmZiMmFjYTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMva2xvZ2N0bC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMva2xvZ2N0bC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGtsb2djdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xnZXR4YXR0ci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9sZ2V0eGF0dHIuUwppbmRleCA2ZjE5NWVhLi4zNjIwMmEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xnZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGdldHhhdHRyLlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChsZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xpbmthdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9saW5rYXQuUwppbmRleCBiOWEyYjE0Li5kMTk1ZTE5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xpbmthdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGlua2F0LlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChsaW5rYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xpc3Rlbi5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9saXN0ZW4uUwppbmRleCAxMDRiNTE0Li43NTZiNjI5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xpc3Rlbi5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGlzdGVuLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobGlzdGVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9saXN0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGlzdHhhdHRyLlMKaW5kZXggZmU1N2UzOS4uZDBiMjExMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9saXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xpc3R4YXR0ci5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGxpc3R4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbGxpc3R4YXR0ci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9sbGlzdHhhdHRyLlMKaW5kZXggYWEwYTU0ZC4uNDlmYjk2OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9sbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9sbGlzdHhhdHRyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobGxpc3R4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCmluZGV4IDRiNWVlNjUuLjFlMWJjMzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9scmVtb3ZleGF0dHIuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChscmVtb3ZleGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xzZWVrLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xzZWVrLlMKaW5kZXggYTA2YjNlYy4uMTUzYjkzNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9sc2Vlay5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbHNlZWsuUwpAQCAtOSwxMSArOSwxMCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKGxzZWVrKQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKGxzZWVrNjQpCi0gICAgLmVxdSBfQ19MQUJFTChsc2VlazY0KSwgX0NfTEFCRUwobHNlZWspCisgICAgLmdsb2JsIGxzZWVrNjQKKyAgICAuZXF1IGxzZWVrNjQsIGxzZWVrCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xzZXR4YXR0ci5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9sc2V0eGF0dHIuUwppbmRleCA2N2Q5M2ViLi45NjVlZTAzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL2xzZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbHNldHhhdHRyLlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChsc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21hZHZpc2UuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWFkdmlzZS5TCmluZGV4IGU0ZWY5MjMuLjc1ZDQ3ZjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWFkdmlzZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWFkdmlzZS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKG1hZHZpc2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21pbmNvcmUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWluY29yZS5TCmluZGV4IGQ5Mjc1NWMuLjJkOGEyOGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWluY29yZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWluY29yZS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKG1pbmNvcmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21rZGlyYXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWtkaXJhdC5TCmluZGV4IDllNWRiZDYuLjhhNzYwMTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWtkaXJhdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWtkaXJhdC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKG1rZGlyYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21rbm9kYXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWtub2RhdC5TCmluZGV4IDQ5YWFjMzUuLmE4ODU5ZDQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWtub2RhdC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWtub2RhdC5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobWtub2RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWxvY2suUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWxvY2suUwppbmRleCBmMGIwYzZlLi5kMzRiM2FlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21sb2NrLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tbG9jay5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKG1sb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tbG9ja2FsbC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tbG9ja2FsbC5TCmluZGV4IDQyMGNiMDMuLjMxY2NhYTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbWxvY2thbGwuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21sb2NrYWxsLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobWxvY2thbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21tYXAuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbW1hcC5TCmluZGV4IGQ2Zjk2ODcuLjhhYTQ3ODAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbW1hcC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbW1hcC5TCkBAIC0xMCwxMSArMTAsMTAgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChtbWFwKQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKG1tYXA2NCkKLSAgICAuZXF1IF9DX0xBQkVMKG1tYXA2NCksIF9DX0xBQkVMKG1tYXApCisgICAgLmdsb2JsIG1tYXA2NAorICAgIC5lcXUgbW1hcDY0LCBtbWFwCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21vdW50LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21vdW50LlMKaW5kZXggZGY0ODhjMy4uZGNiZDQ3MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tb3VudC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbW91bnQuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKG1vdW50KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tcHJvdGVjdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tcHJvdGVjdC5TCmluZGV4IDllZjYxYjUuLjJhZDRiMjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXByb3RlY3QuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21wcm90ZWN0LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobXByb3RlY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21yZW1hcC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tcmVtYXAuUwppbmRleCA1NWUyNGJmLi5hNjA0MmNiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21yZW1hcC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXJlbWFwLlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChtcmVtYXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21zeW5jLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL21zeW5jLlMKaW5kZXggNDA1MjRlMy4uMDk5ZGJiZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tc3luYy5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXN5bmMuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChtc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXVubG9jay5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5sb2NrLlMKaW5kZXggYjUwODI1OS4uYmI1OTQwYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5sb2NrLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5sb2NrLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobXVubG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXVubG9ja2FsbC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5sb2NrYWxsLlMKaW5kZXggNDMxNGUyYi4uZjk1NzlkZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5sb2NrYWxsLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5sb2NrYWxsLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobXVubG9ja2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXVubWFwLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL211bm1hcC5TCmluZGV4IDE1ZDUwM2MuLmQxYzU4MGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbXVubWFwLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9tdW5tYXAuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChtdW5tYXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9uYW5vc2xlZXAuUwppbmRleCBkMzAzZmNiLi5iMTlmN2Y1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvbmFub3NsZWVwLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQobmFub3NsZWVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ZmM3MWUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkocGVyZl9ldmVudF9vcGVuKQotICAgIG1vdnEgICAgJXJjeCwgJXIxMAotICAgIG1vdmwgICAgJF9fTlJfcGVyZl9ldmVudF9vcGVuLCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKHBlcmZfZXZlbnRfb3BlbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcGVyc29uYWxpdHkuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcGVyc29uYWxpdHkuUwppbmRleCAwMzc5NzA3Li42OTM3ZTRjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wZXJzb25hbGl0eS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHBlcnNvbmFsaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9waXBlMi5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9waXBlMi5TCmluZGV4IGQwYTY3NjguLmQ0ODhjODcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcGlwZTIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3BpcGUyLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQocGlwZTIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3ByY3RsLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3ByY3RsLlMKaW5kZXggZjdmNTYxYi4uNGYzZDJhZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wcmN0bC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHJjdGwuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHByY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wcmVhZDY0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3ByZWFkNjQuUwppbmRleCA1OGIzMTc2Li4zYWE1NmU1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3ByZWFkNjQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3ByZWFkNjQuUwpAQCAtMTAsMTEgKzEwLDEwIEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQocHJlYWQ2NCkKIAotICAgIC5nbG9ibCBfQ19MQUJFTChwcmVhZCkKLSAgICAuZXF1IF9DX0xBQkVMKHByZWFkKSwgX0NfTEFCRUwocHJlYWQ2NCkKKyAgICAuZ2xvYmwgcHJlYWQKKyAgICAuZXF1IHByZWFkLCBwcmVhZDY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3BybGltaXQ2NC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wcmxpbWl0NjQuUwppbmRleCBiNDUxZThmLi42M2VjNDkyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3BybGltaXQ2NC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHJsaW1pdDY0LlMKQEAgLTEwLDExICsxMCwxMCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHBybGltaXQ2NCkKIAotICAgIC5nbG9ibCBfQ19MQUJFTChwcmxpbWl0KQotICAgIC5lcXUgX0NfTEFCRUwocHJsaW1pdCksIF9DX0xBQkVMKHBybGltaXQ2NCkKKyAgICAuZ2xvYmwgcHJsaW1pdAorICAgIC5lcXUgcHJsaW1pdCwgcHJsaW1pdDY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3B3cml0ZTY0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3B3cml0ZTY0LlMKaW5kZXggOTYyMTVjZS4uMjc3OWZiNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9wd3JpdGU2NC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcHdyaXRlNjQuUwpAQCAtMTAsMTEgKzEwLDEwIEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQocHdyaXRlNjQpCiAKLSAgICAuZ2xvYmwgX0NfTEFCRUwocHdyaXRlKQotICAgIC5lcXUgX0NfTEFCRUwocHdyaXRlKSwgX0NfTEFCRUwocHdyaXRlNjQpCisgICAgLmdsb2JsIHB3cml0ZQorICAgIC5lcXUgcHdyaXRlLCBwd3JpdGU2NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWQuUwppbmRleCAwZmY2YzJhLi5kZjcwZTdmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWQuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChyZWFkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkYWhlYWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVhZGFoZWFkLlMKaW5kZXggYTMyYzFjMi4uMzhjYjFjMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkYWhlYWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWRhaGVhZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHJlYWRhaGVhZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVhZGxpbmthdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkbGlua2F0LlMKaW5kZXggYTFjM2FkZS4uOWZkNjRlNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkbGlua2F0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkbGlua2F0LlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChyZWFkbGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkdi5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWFkdi5TCmluZGV4IGE2ZjUxY2YuLjI1MTBjNTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVhZHYuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlYWR2LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQocmVhZHYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlY3Zmcm9tLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlY3Zmcm9tLlMKaW5kZXggZmViM2E2My4uNmMwOTA3OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWN2ZnJvbS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVjdmZyb20uUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHJlY3Zmcm9tKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWN2bW1zZy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWN2bW1zZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZGE2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlY3ZtbXNnLlMKQEAgLTAsMCArMSwxNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShyZWN2bW1zZykKKyAgICBtb3ZxICAgICVyY3gsICVyMTAKKyAgICBtb3ZsICAgICRfX05SX3JlY3ZtbXNnLCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORChyZWN2bW1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVjdm1zZy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWN2bXNnLlMKaW5kZXggNjcxNmFjYS4uOTQ1ZjE3YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWN2bXNnLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZWN2bXNnLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQocmVjdm1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwppbmRleCA4OWIyYzRmLi45YjQ3NjE1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHJlbW92ZXhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZW5hbWVhdC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9yZW5hbWVhdC5TCmluZGV4IDlkNjljM2UuLjNhOTRhNzUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvcmVuYW1lYXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3JlbmFtZWF0LlMKQEAgLTEwLDggKzEwLDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChyZW5hbWVhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKaW5kZXggNDFiMmQxZC4uMWEwZGEyMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2NoZWRfZ2V0X3ByaW9yaXR5X21heCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKaW5kZXggNjFiNzQ2Zi4uMzc4NTg3NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwppbmRleCAyM2QzNGIyLi40MDliNTAxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNjaGVkX2dldHBhcmFtKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKaW5kZXggMTJmMGJhMC4uNTIwMDUwNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNjaGVkX2dldHNjaGVkdWxlcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCmluZGV4IDBmZjg1MmYuLjI3NmZlYjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKaW5kZXggMjUwZWNiNi4uMWZiODdlNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzY2hlZF9zZXRhZmZpbml0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwppbmRleCAzMGE3OTYzLi45MWNhODNiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNjaGVkX3NldHBhcmFtKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKaW5kZXggMTM3ZjlmMC4uN2ZhNDk5YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNjaGVkX3NldHNjaGVkdWxlcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfeWllbGQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwppbmRleCAwOTdjN2RjLi44ZWIxMGY2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zY2hlZF95aWVsZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNjaGVkX3lpZWxkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZW5kZmlsZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZW5kZmlsZS5TCmluZGV4IGI1NmY0ODcuLjExN2IwYWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2VuZGZpbGUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmRmaWxlLlMKQEAgLTEwLDExICsxMCwxMCBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNlbmRmaWxlKQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKHNlbmRmaWxlNjQpCi0gICAgLmVxdSBfQ19MQUJFTChzZW5kZmlsZTY0KSwgX0NfTEFCRUwoc2VuZGZpbGUpCisgICAgLmdsb2JsIHNlbmRmaWxlNjQKKyAgICAuZXF1IHNlbmRmaWxlNjQsIHNlbmRmaWxlCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmRtbXNnLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmRtbXNnLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0YTc4ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2VuZG1tc2cuUwpAQCAtMCwwICsxLDE2IEBACisvKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKK0VOVFJZKHNlbmRtbXNnKQorICAgIG1vdnEgICAgJXJjeCwgJXIxMAorICAgIG1vdmwgICAgJF9fTlJfc2VuZG1tc2csICVlYXgKKyAgICBzeXNjYWxsCisgICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBtb3ZsICAgICVlYXgsICVlZGkKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCisxOgorICAgIHJldAorRU5EKHNlbmRtbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZW5kbXNnLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmRtc2cuUwppbmRleCBlNTZlNThjLi44NDU2NmI1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmRtc2cuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmRtc2cuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZW5kbXNnKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZW5kdG8uUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2VuZHRvLlMKaW5kZXggZjBjMTRiMC4uYmUzYmFjZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZW5kdG8uUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NlbmR0by5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2VuZHRvKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRmc2dpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRmc2dpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYTM2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGZzZ2lkLlMKQEAgLTAsMCArMSwxNSBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzZXRmc2dpZCkKKyAgICBtb3ZsICAgICRfX05SX3NldGZzZ2lkLCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORChzZXRmc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0ZnN1aWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0ZnN1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmQwYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRmc3VpZC5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc2V0ZnN1aWQpCisgICAgbW92bCAgICAkX19OUl9zZXRmc3VpZCwgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoc2V0ZnN1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGdpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRnaWQuUwppbmRleCBhYmFmMzQzLi42NTBmOGUyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGdpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0Z2lkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0Z2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRncm91cHMuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKaW5kZXggNGJiYzdlYy4uYzc5OGMxNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRncm91cHMuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGdyb3Vwcy5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNldGdyb3VwcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0aXRpbWVyLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldGl0aW1lci5TCmluZGV4IGRhODFkMGIuLmM1ZmFiYjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0aXRpbWVyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRpdGltZXIuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZXRpdGltZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldG5zLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldG5zLlMKaW5kZXggYmFiMTQ3Yi4uYzJhZTk3ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRucy5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0bnMuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzZXRucykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cGdpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRwZ2lkLlMKaW5kZXggNmRmZWZhMy4uNGQ0MzEzYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRwZ2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRwZ2lkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0cGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwppbmRleCA4OTc3MGU5Li4zYzUwOGMzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRwcmlvcml0eS5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNldHByaW9yaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZWdpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZWdpZC5TCmluZGV4IDllYWE3ZTkuLjE4MWE4YjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmVnaWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlZ2lkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0cmVnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlc2dpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZXNnaWQuUwppbmRleCA5NTIwNmIzLi5mZTQ0Nzg2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlc2dpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0cmVzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZXN1aWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmVzdWlkLlMKaW5kZXggYzQyZGRhOS4uNThjZDJjYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZXN1aWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJlc3VpZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmV1aWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmV1aWQuUwppbmRleCA5MzVmNzUxLi5lMjU2NThiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJldWlkLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRyZXVpZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNldHJldWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRybGltaXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0cmxpbWl0LlMKaW5kZXggZTQ0NWVjMC4uZWYwMzA2OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRybGltaXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHJsaW1pdC5TCkBAIC05LDExICs5LDEwIEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0cmxpbWl0KQogCi0gICAgLmdsb2JsIF9DX0xBQkVMKHNldHJsaW1pdDY0KQotICAgIC5lcXUgX0NfTEFCRUwoc2V0cmxpbWl0NjQpLCBfQ19MQUJFTChzZXRybGltaXQpCisgICAgLmdsb2JsIHNldHJsaW1pdDY0CisgICAgLmVxdSBzZXRybGltaXQ2NCwgc2V0cmxpbWl0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHNpZC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRzaWQuUwppbmRleCA5YzUwYTg5Li4wMWQ5MjY5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHNpZC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0c2lkLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0c2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHNvY2tvcHQuUwppbmRleCAyMzMyZWM5Li42MjlmZGYwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHNvY2tvcHQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHNvY2tvcHQuUwpAQCAtMTAsOCArMTAsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNldHNvY2tvcHQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwppbmRleCAxMjFjMGI2Li5hYzViOWIxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0dGltZW9mZGF5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXR1aWQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0dWlkLlMKaW5kZXggZjQyNjcwNS4uZjMzNWE3NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXR1aWQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHVpZC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNldHVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2V0eGF0dHIuUwppbmRleCBjMDJhYTg0Li5kNzUwNDIzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zZXR4YXR0ci5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NodXRkb3duLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NodXRkb3duLlMKaW5kZXggOTZhNjVmOC4uYTAzMGM5NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zaHV0ZG93bi5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2h1dGRvd24uUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORChzaHV0ZG93bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2lnYWx0c3RhY2suUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2lnYWx0c3RhY2suUwppbmRleCA1N2RjNDFhLi43MWNlNTM3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zaWdhbHRzdGFjay5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHNpZ2FsdHN0YWNrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zaWduYWxmZDQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc2lnbmFsZmQ0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOGExYjYuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zaWduYWxmZDQuUworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCi0KLSNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KLQotRU5UUlkoc2lnbmFsZmQ0KQotICAgIG1vdnEgICAgJXJjeCwgJXIxMAotICAgIG1vdmwgICAgJF9fTlJfc2lnbmFsZmQ0LCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKHNpZ25hbGZkNCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc29ja2V0LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NvY2tldC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjY1ZWU0Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc29ja2V0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKiBHZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkuIERvIG5vdCBlZGl0LiAqLwotCi0jaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+Ci0KLUVOVFJZKHNvY2tldCkKLSAgICBtb3ZsICAgICRfX05SX3NvY2tldCwgJWVheAotICAgIHN5c2NhbGwKLSAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4Ci0gICAgamIgICAgICAxZgotICAgIG5lZ2wgICAgJWVheAotICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAotMToKLSAgICByZXQKLUVORChzb2NrZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NvY2tldHBhaXIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc29ja2V0cGFpci5TCmluZGV4IDRlNzZlODMuLmRiY2Y1MGQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc29ja2V0cGFpci5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc29ja2V0cGFpci5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc29ja2V0cGFpcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3BsaWNlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NwbGljZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmVjODQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3NwbGljZS5TCkBAIC0wLDAgKzEsMTYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkoc3BsaWNlKQorICAgIG1vdnEgICAgJXJjeCwgJXIxMAorICAgIG1vdmwgICAgJF9fTlJfc3BsaWNlLCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORChzcGxpY2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N0YXRmcy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zdGF0ZnMuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI0YjJlNS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N0YXRmcy5TCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWShzdGF0ZnMpCi0gICAgbW92bCAgICAkX19OUl9zdGF0ZnMsICVlYXgKLSAgICBzeXNjYWxsCi0gICAgY21wcSAgICAkLU1BWF9FUlJOTywgJXJheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKLTE6Ci0gICAgcmV0Ci1FTkQoc3RhdGZzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zdGF0ZnM2NC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zdGF0ZnM2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZjZiZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N0YXRmczY0LlMKQEAgLTAsMCArMSwxOCBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWShzdGF0ZnM2NCkKKyAgICBtb3ZsICAgICRfX05SX3N0YXRmcywgJWVheAorICAgIHN5c2NhbGwKKyAgICBjbXBxICAgICQtTUFYX0VSUk5PLCAlcmF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIG1vdmwgICAgJWVheCwgJWVkaQorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKKzE6CisgICAgcmV0CitFTkQoc3RhdGZzNjQpCisKKyAgICAuZ2xvYmwgc3RhdGZzCisgICAgLmVxdSBzdGF0ZnMsIHN0YXRmczY0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N3YXBvZmYuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3dhcG9mZi5TCmluZGV4IDJmMmRhZmUuLmRmOTIyYTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3dhcG9mZi5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3dhcG9mZi5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHN3YXBvZmYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N3YXBvbi5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zd2Fwb24uUwppbmRleCAzZGI3OTIxLi4wMzZiNDIyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N3YXBvbi5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3dhcG9uLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc3dhcG9uKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zeW1saW5rYXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3ltbGlua2F0LlMKaW5kZXggNTRiNGQ0ZS4uZmRiY2VkNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zeW1saW5rYXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3N5bWxpbmthdC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHN5bWxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3luYy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zeW5jLlMKaW5kZXggZjU4Yzc4OC4uYTQxNTNmZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zeW5jLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zeW5jLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvc3lzaW5mby5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zeXNpbmZvLlMKaW5kZXggZDQ4MzY5My4uNzU0ZWY2MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zeXNpbmZvLlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy9zeXNpbmZvLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQoc3lzaW5mbykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGVlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RlZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZDY2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RlZS5TCkBAIC0wLDAgKzEsMTYgQEAKKy8qIEdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weS4gRG8gbm90IGVkaXQuICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KKworRU5UUlkodGVlKQorICAgIG1vdnEgICAgJXJjeCwgJXIxMAorICAgIG1vdmwgICAgJF9fTlJfdGVlLCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORCh0ZWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3Rna2lsbC5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90Z2tpbGwuUwppbmRleCA3ZDIxN2IwLi45YzQ2ODg3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3Rna2lsbC5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGdraWxsLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQodGdraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCmluZGV4IGE1MThlNGYuLjU2YjQ1ZTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQodGltZXJmZF9jcmVhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwppbmRleCAxZDA4NTNhLi44YzliNWQ2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQodGltZXJmZF9nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKaW5kZXggYTIzYWY0ZS4uYTUyNGMwYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQodGltZXJmZF9zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcy5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90aW1lcy5TCmluZGV4IDUyMGQwNjIuLjg5NTAyYmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdGltZXMuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RpbWVzLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQodGltZXMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RraWxsLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RraWxsLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NTI5ZWYuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90a2lsbC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KLQotI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgotCi1FTlRSWSh0a2lsbCkKLSAgICBtb3ZsICAgICRfX05SX3RraWxsLCAlZWF4Ci0gICAgc3lzY2FsbAotICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKLSAgICBqYiAgICAgIDFmCi0gICAgbmVnbCAgICAlZWF4Ci0gICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4Ci0xOgotICAgIHJldAotRU5EKHRraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90cnVuY2F0ZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy90cnVuY2F0ZS5TCmluZGV4IDVlNWViOGUuLjJlY2QwNWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdHJ1bmNhdGUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3RydW5jYXRlLlMKQEAgLTksMTEgKzksMTAgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh0cnVuY2F0ZSkKIAotICAgIC5nbG9ibCBfQ19MQUJFTCh0cnVuY2F0ZTY0KQotICAgIC5lcXUgX0NfTEFCRUwodHJ1bmNhdGU2NCksIF9DX0xBQkVMKHRydW5jYXRlKQorICAgIC5nbG9ibCB0cnVuY2F0ZTY0CisgICAgLmVxdSB0cnVuY2F0ZTY0LCB0cnVuY2F0ZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bWFzay5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bWFzay5TCmluZGV4IDM2MGFkNzEuLmFjZDM3ZTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW1hc2suUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3VtYXNrLlMKQEAgLTksOCArOSw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQodW1hc2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3Vtb3VudDIuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW1vdW50Mi5TCmluZGV4IGUyZGU0NGIuLjQzOGFlZGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW1vdW50Mi5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW1vdW50Mi5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHVtb3VudDIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3VuYW1lLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3VuYW1lLlMKaW5kZXggOGFkNDBmYS4uNmYwNzdkZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bmFtZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5hbWUuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh1bmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5saW5rYXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdW5saW5rYXQuUwppbmRleCA4M2JiNTlmLi44MGYwMjUxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3VubGlua2F0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bmxpbmthdC5TCkBAIC05LDggKzksNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBtb3ZsICAgICVlYXgsICVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICVyYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiAxOgogICAgIHJldAogRU5EKHVubGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91bnNoYXJlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3Vuc2hhcmUuUwppbmRleCAwNDRhZjk5Li44MzE2ZDIwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3Vuc2hhcmUuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3Vuc2hhcmUuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh1bnNoYXJlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91dGltZW5zYXQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvdXRpbWVuc2F0LlMKaW5kZXggNGQyNjNmZi4uM2U0MzgyNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy91dGltZW5zYXQuUworKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3V0aW1lbnNhdC5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQodXRpbWVuc2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy92bXNwbGljZS5TIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy92bXNwbGljZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzc1YzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3Ztc3BsaWNlLlMKQEAgLTAsMCArMSwxNiBAQAorLyogR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LiBEbyBub3QgZWRpdC4gKi8KKworI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgorCitFTlRSWSh2bXNwbGljZSkKKyAgICBtb3ZxICAgICVyY3gsICVyMTAKKyAgICBtb3ZsICAgICRfX05SX3Ztc3BsaWNlLCAlZWF4CisgICAgc3lzY2FsbAorICAgIGNtcHEgICAgJC1NQVhfRVJSTk8sICVyYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgbW92bCAgICAlZWF4LCAlZWRpCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAorMToKKyAgICByZXQKK0VORCh2bXNwbGljZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvd2FpdDQuUyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvd2FpdDQuUwppbmRleCA3ZGU3OGFjLi5kMzkyZGM3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3dhaXQ0LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy93YWl0NC5TCkBAIC0xMCw4ICsxMCw3IEBACiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIG1vdmwgICAgJWVheCwgJWVkaQotICAgIGNhbGwgICAgX19zZXRfZXJybm8KLSAgICBvcnEgICAgICQtMSwgJXJheAorICAgIGNhbGwgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIDE6CiAgICAgcmV0CiBFTkQod2FpdDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3dyaXRlLlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3dyaXRlLlMKaW5kZXggZWFiMzkwNC4uMTQ1Yzc5MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy93cml0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvd3JpdGUuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh3cml0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvd3JpdGV2LlMgYi9saWJjL2FyY2gteDg2XzY0L3N5c2NhbGxzL3dyaXRldi5TCmluZGV4IGIyMWUzZDYuLjhmODk1NmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQvc3lzY2FsbHMvd3JpdGV2LlMKKysrIGIvbGliYy9hcmNoLXg4Nl82NC9zeXNjYWxscy93cml0ZXYuUwpAQCAtOSw4ICs5LDcgQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgbW92bCAgICAlZWF4LCAlZWRpCi0gICAgY2FsbCAgICBfX3NldF9lcnJubwotICAgIG9ycSAgICAgJC0xLCAlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCh3cml0ZXYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2XzY0L3g4Nl82NC5tayBiL2xpYmMvYXJjaC14ODZfNjQveDg2XzY0Lm1rCmluZGV4IDI2MTQ1MzcuLmIwMDFiNWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODZfNjQveDg2XzY0Lm1rCisrKyBiL2xpYmMvYXJjaC14ODZfNjQveDg2XzY0Lm1rCkBAIC0xLDggKzEsMzUgQEAKLV9MSUJDX0FSQ0hfQ09NTU9OX1NSQ19GSUxFUyA6PSBcCisjIHg4Nl82NCBzcGVjaWZpYyBjb25maWdzCisKK2xpYmNfY29tbW9uX3NyY19maWxlc194ODZfNjQgOj0gXAorICAgIGJpb25pYy9tZW1jaHIuYyBcCisgICAgYmlvbmljL21lbXJjaHIuYyBcCisgICAgYmlvbmljL3N0cmNoci5jcHAgXAorICAgIGJpb25pYy9zdHJubGVuLmMgXAorICAgIGJpb25pYy9zdHJyY2hyLmNwcCBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xlbi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NyY2hyLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbW1vdmUuYyBcCisgICAgdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNhdC5jIFwKKyAgICB1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsY3B5LmMgXAorCisjIEZvcnRpZnkgaW1wbGVtZW50YXRpb25zIG9mIGxpYmMgZnVuY3Rpb25zLgorbGliY19jb21tb25fc3JjX2ZpbGVzX3g4Nl82NCArPSBcCisgICAgYmlvbmljL19fbWVtY3B5X2Noay5jcHAgXAorICAgIGJpb25pYy9fX21lbXNldF9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19zdHJjcHlfY2hrLmNwcCBcCisgICAgYmlvbmljL19fc3RyY2F0X2Noay5jcHAgXAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIENQVSBzcGVjaWZpYyBzb3VyY2UgZmlsZXMKK2xpYmNfYmlvbmljX3NyY19maWxlc194ODZfNjQgOj0gXAogICAgIGFyY2gteDg2XzY0L2Jpb25pYy9fX2Jpb25pY19jbG9uZS5TIFwKICAgICBhcmNoLXg4Nl82NC9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIFwKLSAgICBhcmNoLXg4Nl82NC9iaW9uaWMvZnV0ZXhfeDg2XzY0LlMgXAotICAgIGFyY2gteDg2XzY0L2Jpb25pYy9fX2dldF9zcC5TIFwKICAgICBhcmNoLXg4Nl82NC9iaW9uaWMvX19ydF9zaWdyZXR1cm4uUyBcCiAgICAgYXJjaC14ODZfNjQvYmlvbmljL19zZXRqbXAuUyBcCiAgICAgYXJjaC14ODZfNjQvYmlvbmljL3NldGptcC5TIFwKQEAgLTEwLDkgKzM3LDMzIEBACiAgICAgYXJjaC14ODZfNjQvYmlvbmljL3NpZ3NldGptcC5TIFwKICAgICBhcmNoLXg4Nl82NC9iaW9uaWMvc3lzY2FsbC5TIFwKICAgICBhcmNoLXg4Nl82NC9iaW9uaWMvdmZvcmsuUyBcCi0gICAgc3RyaW5nL21lbWNtcDE2LmMgXAogCi1fTElCQ19BUkNIX1NUQVRJQ19TUkNfRklMRVMgOj0gXAotICAgIGJpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmMgXAorbGliY19iaW9uaWNfc3JjX2ZpbGVzX3g4Nl82NCArPSBcCisgICAgYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItbWVtY3B5LXNsbS5TIFwKKyAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1tZW1tb3ZlLXNsbS5TIFwKKyAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1tZW1zZXQtc2xtLlMgXAorICAgIGFyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cGNweS1zbG0uUyBcCisgICAgYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RwbmNweS1zbG0uUyBcCisgICAgYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RyY2F0LXNsbS5TIFwKKyAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NlMi1zdHJjcHktc2xtLlMgXAorICAgIGFyY2gteDg2XzY0L3N0cmluZy9zc2UyLXN0cmxlbi1zbG0uUyBcCisgICAgYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybmNhdC1zbG0uUyBcCisgICAgYXJjaC14ODZfNjQvc3RyaW5nL3NzZTItc3RybmNweS1zbG0uUyBcCisgICAgYXJjaC14ODZfNjQvc3RyaW5nL3NzZTQtbWVtY21wLXNsbS5TIFwKKyAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NzZTMtc3RyY21wLXNsbS5TIFwKKyAgICBhcmNoLXg4Nl82NC9zdHJpbmcvc3NzZTMtc3RybmNtcC1zbG0uUyBcCiAKLV9MSUJDX0FSQ0hfRFlOQU1JQ19TUkNfRklMRVMgOj0KK2xpYmNfY3J0X3RhcmdldF9jZmxhZ3NfeDg2XzY0ICs9IFwKKyAgICAtbTY0IFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvYXJjaC14ODZfNjQvaW5jbHVkZQorCitsaWJjX2NydF90YXJnZXRfbGRmbGFnc194ODZfNjQgOj0gLW1lbGZfeDg2XzY0CisKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlX3g4Nl82NCA6PSBcCisgICAgJChMT0NBTF9QQVRIKS9hcmNoLWNvbW1vbi9iaW9uaWMvY3J0YmVnaW4uYworCitsaWJjX2NydF90YXJnZXRfY3J0YmVnaW5fc29fZmlsZV94ODZfNjQgOj0gXAorICAgICQoTE9DQUxfUEFUSCkvYXJjaC1jb21tb24vYmlvbmljL2NydGJlZ2luX3NvLmMKKworbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFnc194ODZfNjQgOj0gXAorICAgIC1mUElDCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9OZXRkQ2xpZW50LmNwcCBiL2xpYmMvYmlvbmljL05ldGRDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMGY0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9OZXRkQ2xpZW50LmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmZGVmIExJQkNfU1RBVElDCisjZXJyb3IgTmV0ZENsaWVudC5jcHAgc2hvdWxkIE5PVCBiZSBpbmNsdWRlZCBpbiBzdGF0aWMgbGliYyBidWlsZHMuCisjZW5kaWYKKworI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9OZXRkQ2xpZW50RGlzcGF0Y2guaCIKKworI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgorc3RhdGljIHZvaWQgbmV0ZENsaWVudEluaXRGdW5jdGlvbih2b2lkKiBoYW5kbGUsIGNvbnN0IGNoYXIqIHN5bWJvbCwgRnVuY3Rpb25UeXBlKiBmdW5jdGlvbikgeworICAgIHR5cGVkZWYgdm9pZCAoKkluaXRGdW5jdGlvblR5cGUpKEZ1bmN0aW9uVHlwZSopOworICAgIEluaXRGdW5jdGlvblR5cGUgaW5pdEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxJbml0RnVuY3Rpb25UeXBlPihkbHN5bShoYW5kbGUsIHN5bWJvbCkpOworICAgIGlmIChpbml0RnVuY3Rpb24gIT0gTlVMTCkgeworICAgICAgICBpbml0RnVuY3Rpb24oZnVuY3Rpb24pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbmV0ZENsaWVudEluaXRJbXBsKCkgeworICAgIHZvaWQqIG5ldGRDbGllbnRIYW5kbGUgPSBkbG9wZW4oImxpYm5ldGRfY2xpZW50LnNvIiwgUlRMRF9MQVpZKTsKKyAgICBpZiAobmV0ZENsaWVudEhhbmRsZSA9PSBOVUxMKSB7CisgICAgICAgIC8vIElmIHRoZSBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUsIGl0J3Mgbm90IGFuIGVycm9yLiBXZSdsbCBqdXN0IHVzZQorICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBvZiBmdW5jdGlvbnMgdGhhdCBpdCB3b3VsZCd2ZSBvdmVycmlkZGVuLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIG5ldGRDbGllbnRJbml0RnVuY3Rpb24obmV0ZENsaWVudEhhbmRsZSwgIm5ldGRDbGllbnRJbml0QWNjZXB0NCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19uZXRkQ2xpZW50RGlzcGF0Y2guYWNjZXB0NCk7CisgICAgbmV0ZENsaWVudEluaXRGdW5jdGlvbihuZXRkQ2xpZW50SGFuZGxlLCAibmV0ZENsaWVudEluaXRDb25uZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX25ldGRDbGllbnREaXNwYXRjaC5jb25uZWN0KTsKKyAgICBuZXRkQ2xpZW50SW5pdEZ1bmN0aW9uKG5ldGRDbGllbnRIYW5kbGUsICJuZXRkQ2xpZW50SW5pdE5ldElkRm9yUmVzb2x2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX25ldGRDbGllbnREaXNwYXRjaC5uZXRJZEZvclJlc29sdik7CisgICAgbmV0ZENsaWVudEluaXRGdW5jdGlvbihuZXRkQ2xpZW50SGFuZGxlLCAibmV0ZENsaWVudEluaXRTb2NrZXQiLCAmX19uZXRkQ2xpZW50RGlzcGF0Y2guc29ja2V0KTsKK30KKworc3RhdGljIHB0aHJlYWRfb25jZV90IG5ldGRDbGllbnRJbml0T25jZSA9IFBUSFJFQURfT05DRV9JTklUOworCitleHRlcm4gIkMiIF9fTElCQ19ISURERU5fXyB2b2lkIG5ldGRDbGllbnRJbml0KCkgeworICAgIGlmIChwdGhyZWFkX29uY2UoJm5ldGRDbGllbnRJbml0T25jZSwgbmV0ZENsaWVudEluaXRJbXBsKSkgeworICAgICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19FUlJPUiwgIm5ldGRDbGllbnQiLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgbmV0ZF9jbGllbnQiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9OZXRkQ2xpZW50RGlzcGF0Y2guY3BwIGIvbGliYy9iaW9uaWMvTmV0ZENsaWVudERpc3BhdGNoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2ZhMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvTmV0ZENsaWVudERpc3BhdGNoLmNwcApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgInByaXZhdGUvTmV0ZENsaWVudERpc3BhdGNoLmgiCisKKyNpZmRlZiBfX2kzODZfXworI2RlZmluZSBfX3NvY2tldGNhbGwgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkKKyNlbHNlCisjZGVmaW5lIF9fc29ja2V0Y2FsbAorI2VuZGlmCisKK2V4dGVybiAiQyIgX19zb2NrZXRjYWxsIGludCBfX2FjY2VwdDQoaW50LCBzb2NrYWRkciosIHNvY2tsZW5fdCosIGludCk7CitleHRlcm4gIkMiIF9fc29ja2V0Y2FsbCBpbnQgX19jb25uZWN0KGludCwgY29uc3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QpOworZXh0ZXJuICJDIiBfX3NvY2tldGNhbGwgaW50IF9fc29ja2V0KGludCwgaW50LCBpbnQpOworCitzdGF0aWMgdW5zaWduZWQgZmFsbEJhY2tOZXRJZEZvclJlc29sdih1bnNpZ25lZCBuZXRJZCkgeworICAgIHJldHVybiBuZXRJZDsKK30KKworLy8gVGhpcyBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQgb25seSBhdCBzdGFydHVwICh3aGVuIGxpYmMuc28gaXMgbG9hZGVkKSBhbmQgbmV2ZXIKKy8vIGFmdGVyd2FyZHMsIHNvIGl0J3Mgb2theSB0aGF0IGl0J3MgcmVhZCBsYXRlciBhdCBydW50aW1lIHdpdGhvdXQgYSBsb2NrLgorX19MSUJDX0hJRERFTl9fIE5ldGRDbGllbnREaXNwYXRjaCBfX25ldGRDbGllbnREaXNwYXRjaCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDMyKSkpID0geworICAgIF9fYWNjZXB0NCwKKyAgICBfX2Nvbm5lY3QsCisgICAgX19zb2NrZXQsCisgICAgZmFsbEJhY2tOZXRJZEZvclJlc29sdiwKK307CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX2Ntc2dfbnh0aGRyLmNwcCBiL2xpYmMvYmlvbmljL19fY21zZ19ueHRoZHIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjI3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9fX2Ntc2dfbnh0aGRyLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKK2Ntc2doZHIqIF9fY21zZ19ueHRoZHIobXNnaGRyKiBtc2csIGNtc2doZHIqIGNtc2cpIHsKKyAgY21zZ2hkciogcHRyOworICBwdHIgPSByZWludGVycHJldF9jYXN0PGNtc2doZHIqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihjbXNnKSArIENNU0dfQUxJR04oY21zZy0+Y21zZ19sZW4pKTsKKyAgc2l6ZV90IGxlbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHB0cisxKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1zZy0+bXNnX2NvbnRyb2wpOworICBpZiAobGVuID4gbXNnLT5tc2dfY29udHJvbGxlbikgeworICAgIHJldHVybiBOVUxMOworICB9CisgIHJldHVybiBwdHI7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX2N4YV9ndWFyZC5jcHAgYi9saWJjL2Jpb25pYy9fX2N4YV9ndWFyZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwZDU3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fY3hhX2d1YXJkLmNwcApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxlbmRpYW4uaD4KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2F0b21pY19pbmxpbmUuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19mdXRleC5oIgorCisvLyBUaGlzIGZpbGUgY29udGFpbnMgQysrIEFCSSBzdXBwb3J0IGZ1bmN0aW9ucyBmb3Igb25lIHRpbWUKKy8vIGNvbnN0cnVjdG9ycyBhcyBkZWZpbmVkIGluIHRoZSAiUnVuLXRpbWUgQUJJIGZvciB0aGUgQVJNIEFyY2hpdGVjdHVyZSIKKy8vIHNlY3Rpb24gNC40LjIKKy8vCisvLyBBUk0gQysrIEFCSSBhbmQgSXRhbml1bS94ODYgQysrIEFCSSBoYXMgZGlmZmVyZW50IGRlZmluaXRpb24gZm9yCisvLyBvbmUgdGltZSBjb25zdHJ1Y3Rpb246CisvLworLy8gICAgQVJNIEMrKyBBQkkgZGVmaW5lcyB0aGUgTFNCIG9mIGd1YXJkIHZhcmlhYmxlIHNob3VsZCBiZSB0ZXN0ZWQKKy8vICAgIGJ5IGNvbXBpbGVyLWdlbmVyYXRlZCBjb2RlIGJlZm9yZSBjYWxsaW5nIF9fY3hhX2d1YXJkX2FjcXVpcmUgZXQgYWwuCisvLworLy8gICAgVGhlIEl0YW5pdW0veDg2IEMrKyBBQkkgZGVmaW5lcyB0aGUgbG93LW9yZGVyIF9ieXRlXyBzaG91bGQgYmUKKy8vICAgIHRlc3RlZCBpbnN0ZWFkLgorLy8KKy8vICAgIE1lYW53aGlsZSwgZ3VhcmQgdmFyaWFibGUgYXJlIDMyYml0IGFsaWduZWQgZm9yIEFSTSwgYW5kIDY0Yml0CisvLyAgICBhbGlnbmVkIGZvciB4ODYuCisvLworLy8gUmVmZXJlbmNlIGRvY3VtZW50YXRpb246CisvLworLy8gICAgc2VjdGlvbiAzLjIuMyBvZiBBUk0gSUhJIDAwNDFDIChmb3IgQVJNKQorLy8gICAgc2VjdGlvbiAzLjMuMiBvZiB0aGUgSXRhbml1bSBDKysgQUJJIHNwZWNpZmljYXRpb24gdjEuODMgKGZvciB4ODYpLgorLy8KKy8vIFRoZXJlIGlzIG5vIEMrKyBBQkkgYXZhaWxhYmxlIGZvciBvdGhlciBBUkNILiBCdXQgdGhlIGdjYyBzb3VyY2UKKy8vIHNob3dzIGFsbCBvdGhlciBBUkNIIGZvbGxvdyB0aGUgZGVmaW5pdGlvbiBvZiBJdGFuaXVtL3g4NiBDKysgQUJJLgorCisjaWYgZGVmaW5lZChfX2FybV9fKQorLy8gVGhlIEFSTSBDKysgQUJJIG1hbmRhdGVzIHRoYXQgZ3VhcmQgdmFyaWFibGVzIGFyZSAzMi1iaXQgYWxpZ25lZCwgMzItYml0CisvLyB2YWx1ZXMuIFRoZSBMU0IgaXMgdGVzdGVkIGJ5IHRoZSBjb21waWxlci1nZW5lcmF0ZWQgY29kZSBiZWZvcmUgY2FsbGluZworLy8gX19jeGFfZ3VhcmRfYWNxdWlyZS4KK3VuaW9uIF9ndWFyZF90IHsKKyAgICBpbnQgdm9sYXRpbGUgc3RhdGU7CisgICAgaW50MzJfdCBhbGlnbmVyOworfTsKKworY29uc3Qgc3RhdGljIGludCByZWFkeSA9IDB4MTsKK2NvbnN0IHN0YXRpYyBpbnQgcGVuZGluZyA9IDB4MjsKK2NvbnN0IHN0YXRpYyBpbnQgd2FpdGluZyA9IDB4NjsKKworI2Vsc2UKKy8vIFRoZSBJdGFuaXVtL3g4NiBDKysgQUJJICh1c2VkIGJ5IGFsbCBvdGhlciBhcmNoaXRlY3R1cmVzKSBtYW5kYXRlcyB0aGF0CisvLyBndWFyZCB2YXJpYWJsZXMgYXJlIDY0LWJpdCBhbGlnbmVkLCA2NC1iaXQgdmFsdWVzLiBUaGUgTFNCIGlzIHRlc3RlZCBieQorLy8gdGhlIGNvbXBpbGVyLWdlbmVyYXRlZCBjb2RlIGJlZm9yZSBjYWxsaW5nIF9fY3hhX2d1YXJkX2FjcXVpcmUuCit1bmlvbiBfZ3VhcmRfdCB7CisgICAgaW50IHZvbGF0aWxlIHN0YXRlOworICAgIGludDY0X3QgYWxpZ25lcjsKK307CisKK2NvbnN0IHN0YXRpYyBpbnQgcmVhZHkgICAgID0gbGV0b2gzMigweDEpOworY29uc3Qgc3RhdGljIGludCBwZW5kaW5nICAgPSBsZXRvaDMyKDB4MTAwKTsKK2NvbnN0IHN0YXRpYyBpbnQgd2FpdGluZyAgID0gbGV0b2gzMigweDEwMDAwKTsKKyNlbmRpZgorCitleHRlcm4gIkMiIGludCBfX2N4YV9ndWFyZF9hY3F1aXJlKF9ndWFyZF90KiBndikgeworICAgIC8vIDAgLT4gcGVuZGluZywgcmV0dXJuIDEKKyAgICAvLyBwZW5kaW5nIC0+IHdhaXRpbmcsIHdhaXQgYW5kIHJldHVybiAwCisgICAgLy8gd2FpdGluZzogdW50b3VjaGVkLCB3YWl0IGFuZCByZXR1cm4gMAorICAgIC8vIHJlYWR5OiB1bnRvdWNoZWQsIHJldHVybiAwCisKK3JldHJ5OgorICAgIGlmIChfX2Jpb25pY19jbXB4Y2hnKDAsIHBlbmRpbmcsICZndi0+c3RhdGUpID09IDApIHsKKyAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgX19iaW9uaWNfY21weGNoZyhwZW5kaW5nLCB3YWl0aW5nLCAmZ3YtPnN0YXRlKTsgLy8gSW5kaWNhdGUgdGhlcmUgaXMgYSB3YWl0ZXIKKyAgICBfX2Z1dGV4X3dhaXQoJmd2LT5zdGF0ZSwgd2FpdGluZywgTlVMTCk7CisKKyAgICBpZiAoZ3YtPnN0YXRlICE9IHJlYWR5KSB7CisgICAgICAgIC8vIF9fY3hhX2d1YXJkX2Fib3J0IHdhcyBjYWxsZWQsIGxldCBldmVyeSB0aHJlYWQgdHJ5IHNpbmNlIHRoZXJlIGlzIG5vIHJldHVybiBjb2RlIGZvciB0aGlzIGNvbmRpdGlvbgorICAgICAgICBnb3RvIHJldHJ5OworICAgIH0KKworICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKKyAgICByZXR1cm4gMDsKK30KKworZXh0ZXJuICJDIiB2b2lkIF9fY3hhX2d1YXJkX3JlbGVhc2UoX2d1YXJkX3QqIGd2KSB7CisgICAgLy8gcGVuZGluZyAtPiByZWFkeQorICAgIC8vIHdhaXRpbmcgLT4gcmVhZHksIGFuZCB3YWtlCisKKyAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CisgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcocGVuZGluZywgcmVhZHksICZndi0+c3RhdGUpID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGd2LT5zdGF0ZSA9IHJlYWR5OworICAgIF9fZnV0ZXhfd2FrZSgmZ3YtPnN0YXRlLCAweDdmZmZmZmZmKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIF9fY3hhX2d1YXJkX2Fib3J0KF9ndWFyZF90KiBndikgeworICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKKyAgICBndi0+c3RhdGU9IDA7CisgICAgX19mdXRleF93YWtlKCZndi0+c3RhdGUsIDB4N2ZmZmZmZmYpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvX19jeGFfcHVyZV92aXJ0dWFsLmNwcCBiL2xpYmMvYmlvbmljL19fY3hhX3B1cmVfdmlydHVhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBiNTgxZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fY3hhX3B1cmVfdmlydHVhbC5jcHAKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfbG9nZ2luZy5oPgorCitleHRlcm4gIkMiIHZvaWQgX19jeGFfcHVyZV92aXJ0dWFsKCkgeworICBfX2xpYmNfZmF0YWwoIlB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsZWQuIEFyZSB5b3UgY2FsbGluZyB2aXJ0dWFsIG1ldGhvZHMgZnJvbSBhIGRlc3RydWN0b3I/Iik7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX2xpYmNfY3VycmVudF9zaWdydG1heC5jcHAgYi9saWJjL2Jpb25pYy9fX2xpYmNfY3VycmVudF9zaWdydG1heC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmY2IzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fbGliY19jdXJyZW50X3NpZ3J0bWF4LmNwcApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworaW50IF9fbGliY19jdXJyZW50X3NpZ3J0bWF4KHZvaWQpIHsKKyAgcmV0dXJuIF9fU0lHUlRNQVg7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX2xpYmNfY3VycmVudF9zaWdydG1pbi5jcHAgYi9saWJjL2Jpb25pYy9fX2xpYmNfY3VycmVudF9zaWdydG1pbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZiMDM3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fbGliY19jdXJyZW50X3NpZ3J0bWluLmNwcApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworLy8gUE9TSVggdGltZXJzIHVzZSBfX1NJR1JUTUlOICsgMC4KKy8vIGxpYmJhY2t0cmFjZSB1c2VzIF9fU0lHUlRNSU4gKyAxLgorLy8gbGliY29yZSB1c2VzIF9fU0lHUlRNSU4gKyAyLgorCitpbnQgX19saWJjX2N1cnJlbnRfc2lncnRtaW4odm9pZCkgeworICByZXR1cm4gX19TSUdSVE1JTiArIDM7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX3NldF9lcnJuby5jcHAgYi9saWJjL2Jpb25pYy9fX3NldF9lcnJuby5jcHAKaW5kZXggYWY2YTY4ZS4uMzBkZjM1MCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvX19zZXRfZXJybm8uY3BwCisrKyBiL2xpYmMvYmlvbmljL19fc2V0X2Vycm5vLmNwcApAQCAtMzEsOCArMzEsMjUgQEAKIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gb3VyIGFzc2VtYmxlciBzeXNjYWxsIHN0dWJzLgogLy8gQy9DKysgY29kZSBzaG91bGQganVzdCBhc3NpZ24gJ2Vycm5vJyBpbnN0ZWFkLgogCi0vLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBfX0xJQkNfSElEREVOX18gYnV0IHdhcyBleHBvc2VkIGluIDxlcnJuby5oPiBpbiB0aGUgTkRLLgotZXh0ZXJuICJDIiBpbnQgX19zZXRfZXJybm8oaW50IG4pIHsKKy8vIFRoZSByZXR1cm4gdHlwZSBpcyAnbG9uZycgYmVjYXVzZSB3ZSB1c2UgdGhlIHNhbWUgcm91dGluZSBpbiBjYWxscworLy8gdGhhdCByZXR1cm4gYW4gaW50IGFzIGluIG9uZXMgdGhhdCByZXR1cm4gYSBzc2l6ZV90LiBPbiBhIDMyLWJpdAorLy8gc3lzdGVtIHRoZXNlIGFyZSB0aGUgc2FtZSBzaXplLCBidXQgb24gYSA2NC1iaXQgc3lzdGVtIHRoZXkncmUgbm90LgorLy8gJ2xvbmcnIGdpdmVzIHVzIDMyLWJpdCBvbiAzMi1iaXQgc3lzdGVtcywgNjQtYml0IG9uIDY0LWJpdCBzeXN0ZW1zLgorCisvLyBfX3NldF9lcnJubyB3YXMgbWlzdGFrZW5seSBleHBvc2VkIGluIDxlcnJuby5oPiBpbiB0aGUgMzItYml0IE5ESy4KKy8vIFdlIG5lZWQgdGhlIGV4dHJhIGxldmVsIG9mIGluZGlyZWN0aW9uIHNvIHRoYXQgdGhlIC5oaWRkZW4gZGlyZWN0aXZlcworLy8gaW4gdGhlIHN5c3RlbSBjYWxsIHN0dWJzIGRvbid0IGNhdXNlIF9fc2V0X2Vycm5vIHRvIGJlIGhpZGRlbiwgYnJlYWtpbmcKKy8vIG9sZCBOREsgYXBwcy4KKworLy8gVGhpcyBvbmUgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5IGFuZCB1c2VkIGJ5IGJvdGggTFAzMiBhbmQgTFA2NCBhc3NlbWJsZXIuCitleHRlcm4gIkMiIF9fTElCQ19ISURERU5fXyBsb25nIF9fc2V0X2Vycm5vX2ludGVybmFsKGludCBuKSB7CiAgIGVycm5vID0gbjsKICAgcmV0dXJuIC0xOwogfQorCisvLyBUaGlzIG9uZSBleGlzdHMgZm9yIHRoZSBMUDMyIE5ESyBhbmQgaXMgbm90IHByZXNlbnQgYXQgYWxsIGluIExQNjQuCisjaWYgIWRlZmluZWQoX19MUDY0X18pCitleHRlcm4gIkMiIGxvbmcgX19zZXRfZXJybm8oaW50IG4pIHsKKyAgcmV0dXJuIF9fc2V0X2Vycm5vX2ludGVybmFsKG4pOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX3N0cGNweV9jaGsuY3BwIGIvbGliYy9iaW9uaWMvX19zdHBjcHlfY2hrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2U4MWVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19zdHBjcHlfY2hrLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyN1bmRlZiBfRk9SVElGWV9TT1VSQ0UKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCisKKy8qCisgKiBSdW50aW1lIGltcGxlbWVudGF0aW9uIG9mIF9fYnVpbHRpbl9fX19zdHBjcHlfY2hrLgorICoKKyAqIFNlZQorICogICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbAorICogICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwNC0wOS9tc2cwMjA1NS5odG1sCisgKiBmb3IgZGV0YWlscy4KKyAqCisgKiBUaGlzIHN0cGNweSBjaGVjayBpcyBjYWxsZWQgaWYgX0ZPUlRJRllfU09VUkNFIGlzIGRlZmluZWQgYW5kCisgKiBncmVhdGVyIHRoYW4gMC4KKyAqLworZXh0ZXJuICJDIiBjaGFyKiBfX3N0cGNweV9jaGsoY2hhciogZGVzdCwgY29uc3QgY2hhciogc3JjLCBzaXplX3QgZGVzdF9sZW4pIHsKKyAgLy8gVE9ETzogb3B0aW1pemUgc28gd2UgZG9uJ3Qgc2NhbiBzcmMgdHdpY2UuCisgIHNpemVfdCBzcmNfbGVuID0gc3RybGVuKHNyYykgKyAxOworICBpZiAoX19wcmVkaWN0X2ZhbHNlKHNyY19sZW4gPiBkZXN0X2xlbikpIHsKKyAgICBfX2ZvcnRpZnlfY2hrX2ZhaWwoInN0cGNweTogcHJldmVudGVkIHdyaXRlIHBhc3QgZW5kIG9mIGJ1ZmZlciIsCisgICAgICAgICAgICAgICAgICAgICAgIEJJT05JQ19FVkVOVF9TVFBDUFlfQlVGRkVSX09WRVJGTE9XKTsKKyAgfQorCisgIHJldHVybiBzdHBjcHkoZGVzdCwgc3JjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fc3RwbmNweV9jaGsuY3BwIGIvbGliYy9iaW9uaWMvX19zdHBuY3B5X2Noay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5MjE1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fc3RwbmNweV9jaGsuY3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI3VuZGVmIF9GT1JUSUZZX1NPVVJDRQorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKKworLyoKKyAqIFJ1bnRpbWUgaW1wbGVtZW50YXRpb24gb2YgX19idWlsdGluX19fX3N0cG5jcHlfY2hrLgorICoKKyAqIFNlZQorICogICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbAorICogICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwNC0wOS9tc2cwMjA1NS5odG1sCisgKiBmb3IgZGV0YWlscy4KKyAqCisgKiBUaGlzIHN0cG5jcHkgY2hlY2sgaXMgY2FsbGVkIGlmIF9GT1JUSUZZX1NPVVJDRSBpcyBkZWZpbmVkIGFuZAorICogZ3JlYXRlciB0aGFuIDAuCisgKi8KK2V4dGVybiAiQyIgY2hhciogX19zdHBuY3B5X2NoayhjaGFyKiBfX3Jlc3RyaWN0IGRlc3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3Qgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIHNpemVfdCBkZXN0X2xlbikgeworICBpZiAoX19wcmVkaWN0X2ZhbHNlKGxlbiA+IGRlc3RfbGVuKSkgeworICAgIF9fZm9ydGlmeV9jaGtfZmFpbCgic3RwbmNweTogcHJldmVudGVkIHdyaXRlIHBhc3QgZW5kIG9mIGJ1ZmZlciIsCisgICAgICAgICAgICAgICAgICAgICAgIEJJT05JQ19FVkVOVF9TVFBOQ1BZX0JVRkZFUl9PVkVSRkxPVyk7CisgIH0KKworICByZXR1cm4gc3RwbmNweShkZXN0LCBzcmMsIGxlbik7Cit9CisKKy8qCisgKiBfX3N0cG5jcHlfY2hrMgorICoKKyAqIFRoaXMgaXMgYSB2YXJpYW50IG9mIF9fc3RwbmNweV9jaGssIGJ1dCBpdCBhbHNvIGNoZWNrcyB0byBtYWtlCisgKiBzdXJlIHdlIGRvbid0IHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgInNyYyIuIFRoZSBjb2RlIGZvciB0aGlzIGlzCisgKiBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiBzdHBuY3B5LCBidXQgbW9kaWZpZWQgdG8gY2hlY2sKKyAqIGhvdyBtdWNoIHdlIHJlYWQgZnJvbSAic3JjIiBhdCB0aGUgZW5kIG9mIHRoZSBjb3B5IG9wZXJhdGlvbi4KKyAqLworZXh0ZXJuICJDIiBjaGFyKiBfX3N0cG5jcHlfY2hrMihjaGFyKiBfX3Jlc3RyaWN0IGRzdCwgY29uc3QgY2hhciogX19yZXN0cmljdCBzcmMsCisgICAgICAgICAgICAgIHNpemVfdCBuLCBzaXplX3QgZGVzdF9sZW4sIHNpemVfdCBzcmNfbGVuKQoreworICBpZiAoX19wcmVkaWN0X2ZhbHNlKG4gPiBkZXN0X2xlbikpIHsKKyAgICBfX2ZvcnRpZnlfY2hrX2ZhaWwoInN0cG5jcHk6IHByZXZlbnRlZCB3cml0ZSBwYXN0IGVuZCBvZiBidWZmZXIiLAorICAgICAgICAgICAgICAgICAgICAgICBCSU9OSUNfRVZFTlRfU1RQTkNQWV9CVUZGRVJfT1ZFUkZMT1cpOworICB9CisgIGlmIChuICE9IDApIHsKKyAgICBjaGFyKiBkID0gZHN0OworICAgIGNvbnN0IGNoYXIqIHMgPSBzcmM7CisKKyAgICBkbyB7CisgICAgICBpZiAoKCpkKysgPSAqcysrKSA9PSAwKSB7CisgICAgICAgIC8qIE5VTCBwYWQgdGhlIHJlbWFpbmluZyBuLTEgYnl0ZXMgKi8KKyAgICAgICAgd2hpbGUgKC0tbiAhPSAwKSB7CisgICAgICAgICAgKmQrKyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfSB3aGlsZSAoLS1uICE9IDApOworCisgICAgc2l6ZV90IHNfY29weV9sZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHMgLSBzcmMpOworICAgIGlmIChfX3ByZWRpY3RfZmFsc2Uoc19jb3B5X2xlbiA+IHNyY19sZW4pKSB7CisgICAgICBfX2ZvcnRpZnlfY2hrX2ZhaWwoInN0cG5jcHk6IHByZXZlbnRlZCByZWFkIHBhc3QgZW5kIG9mIGJ1ZmZlciIsIDApOworICAgIH0KKyAgfQorCisgIHJldHVybiBkc3Q7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX3N0cmNweV9jaGsuY3BwIGIvbGliYy9iaW9uaWMvX19zdHJjcHlfY2hrLmNwcAppbmRleCAxZjZiYzgwLi5hZDNlZjUwIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9fX3N0cmNweV9jaGsuY3BwCisrKyBiL2xpYmMvYmlvbmljL19fc3RyY3B5X2Noay5jcHAKQEAgLTI2LDYgKzI2LDggQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKKyN1bmRlZiBfRk9SVElGWV9TT1VSQ0UKKwogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCkBAIC00MSw3ICs0Myw3IEBACiAgKiBUaGlzIHN0cmNweSBjaGVjayBpcyBjYWxsZWQgaWYgX0ZPUlRJRllfU09VUkNFIGlzIGRlZmluZWQgYW5kCiAgKiBncmVhdGVyIHRoYW4gMC4KICAqLwotZXh0ZXJuICJDIiBjaGFyKiBfX3N0cmNweV9jaGsgKGNoYXIqIGRlc3QsIGNvbnN0IGNoYXIqIHNyYywgc2l6ZV90IGRlc3RfbGVuKSB7CitleHRlcm4gIkMiIGNoYXIqIF9fc3RyY3B5X2NoayhjaGFyKiBkZXN0LCBjb25zdCBjaGFyKiBzcmMsIHNpemVfdCBkZXN0X2xlbikgewogICAvLyBUT0RPOiBvcHRpbWl6ZSBzbyB3ZSBkb24ndCBzY2FuIHNyYyB0d2ljZS4KICAgc2l6ZV90IHNyY19sZW4gPSBzdHJsZW4oc3JjKSArIDE7CiAgIGlmIChfX3ByZWRpY3RfZmFsc2Uoc3JjX2xlbiA+IGRlc3RfbGVuKSkgewpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvX19zdHJyY2hyX2Noay5jcHAgYi9saWJjL2Jpb25pYy9fX3N0cnJjaHJfY2hrLmNwcAppbmRleCA0MDM3MjA3Li42OTE5OGMwIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9fX3N0cnJjaHJfY2hrLmNwcAorKysgYi9saWJjL2Jpb25pYy9fX3N0cnJjaHJfY2hrLmNwcApAQCAtMSw0ICsxLDMgQEAKLS8qCSRPcGVuQlNEOiByaW5kZXguYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCiAvKgogICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9hYm9ydC5jcHAgYi9saWJjL2Jpb25pYy9hYm9ydC5jcHAKaW5kZXggNmZjZGZkYS4uNzU0MTNjNiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvYWJvcnQuY3BwCisrKyBiL2xpYmMvYmlvbmljL2Fib3J0LmNwcApAQCAtMzAsOSArMzAsNiBAQAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgImF0ZXhpdC5oIgotCi1fX0xJQkNfSElEREVOX18gdm9pZCAoKl9fY2xlYW51cCkoKTsKIAogI2lmZGVmIF9fYXJtX18KIGV4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIHZvaWQgX19saWJjX2FuZHJvaWRfYWJvcnQoKQpAQCAtNDcsMTEgKzQ0LDYgQEAKICAgc2lnZGVsc2V0KCZtYXNrLCBTSUdBQlJUKTsKICAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZtYXNrLCBOVUxMKTsKIAotICAvLyBQT1NJWCByZXF1aXJlcyB3ZSBmbHVzaCBzdGRpbyBidWZmZXJzIG9uIGFib3J0LgotICBpZiAoX19jbGVhbnVwKSB7Ci0gICAgKCpfX2NsZWFudXApKCk7Ci0gIH0KLQogICByYWlzZShTSUdBQlJUKTsKIAogICAvLyBJZiBTSUdBQlJUIGlnbm9yZWQsIG9yIGNhdWdodCBhbmQgdGhlIGhhbmRsZXIgcmV0dXJucywKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2FjY2VwdC5jcHAgYi9saWJjL2Jpb25pYy9hY2NlcHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2FhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9hY2NlcHQuY3BwCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCitpbnQgYWNjZXB0KGludCBzb2NrZmQsIHNvY2thZGRyKiBhZGRyLCBzb2NrbGVuX3QqIGFkZHJsZW4pIHsKKyAgICByZXR1cm4gYWNjZXB0NChzb2NrZmQsIGFkZHIsIGFkZHJsZW4sIDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYWNjZXB0NC5jcHAgYi9saWJjL2Jpb25pYy9hY2NlcHQ0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU4ZGMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvYWNjZXB0NC5jcHAKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJwcml2YXRlL05ldGRDbGllbnREaXNwYXRjaC5oIgorCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCitpbnQgYWNjZXB0NChpbnQgc29ja2ZkLCBzb2NrYWRkciogYWRkciwgc29ja2xlbl90KiBhZGRybGVuLCBpbnQgZmxhZ3MpIHsKKyAgICByZXR1cm4gX19uZXRkQ2xpZW50RGlzcGF0Y2guYWNjZXB0NChzb2NrZmQsIGFkZHIsIGFkZHJsZW4sIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2FyYzRyYW5kb20uYyBiL2xpYmMvYmlvbmljL2FyYzRyYW5kb20uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFjNGIwYy4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9hcmM0cmFuZG9tLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyogICAgICAkT3BlbkJTRDogYXJjNHJhbmRvbS5jLHYgMS4xOSAyMDA4LzA2LzA0IDAwOjUwOjIzIGRqbSBFeHAgJCAgICAgICAgKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NiwgRGF2aWQgTWF6aWVyZXMgPGRtQHV1bi5vcmc+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIERhbWllbiBNaWxsZXIgPGRqbUBvcGVuYnNkLm9yZz4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0vKgotICogQXJjNCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBmb3IgT3BlbkJTRC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNlY3Rpb24gMTcuMSBvZiBBcHBsaWVkIENyeXB0b2dyYXBoeSwKLSAqIHNlY29uZCBlZGl0aW9uLCB3aGljaCBkZXNjcmliZXMgYSBzdHJlYW0gY2lwaGVyIGFsbGVnZWRseQotICogY29tcGF0aWJsZSB3aXRoIFJTQSBMYWJzICJSQzQiIGNpcGhlciAodGhlIGFjdHVhbCBkZXNjcmlwdGlvbiBvZgotICogd2hpY2ggaXMgYSB0cmFkZSBzZWNyZXQpLiAgVGhlIHNhbWUgYWxnb3JpdGhtIGlzIHVzZWQgYXMgYSBzdHJlYW0KLSAqIGNpcGhlciBjYWxsZWQgImFyY2ZvdXIiIGluIFRhdHUgWWxvbmVuJ3Mgc3NoIHBhY2thZ2UuCi0gKgotICogSGVyZSB0aGUgc3RyZWFtIGNpcGhlciBoYXMgYmVlbiBtb2RpZmllZCBhbHdheXMgdG8gaW5jbHVkZSB0aGUgdGltZQotICogd2hlbiBpbml0aWFsaXppbmcgdGhlIHN0YXRlLiAgVGhhdCBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvCi0gKiByZWdlbmVyYXRlIHRoZSBzYW1lIHJhbmRvbSBzZXF1ZW5jZSB0d2ljZSwgc28gdGhpcyBjYW4ndCBiZSB1c2VkCi0gKiBmb3IgZW5jcnlwdGlvbiwgYnV0IHdpbGwgZ2VuZXJhdGUgZ29vZCByYW5kb20gbnVtYmVycy4KLSAqCi0gKiBSQzQgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBSU0EgTGFib3JhdG9yaWVzLgotICovCi0KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSAicHJpdmF0ZS90aHJlYWRfcHJpdmF0ZS5oIgotCi0vKiBCSU9OSUMtQkVHSU4gKi8KLS8qIHRoaXMgbG9jayBzaG91bGQgcHJvdGVjdCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBpbiB0aGlzIGZpbGUgKi8KLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgIF9hcmM0X2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwotI2RlZmluZSAgX0FSQzRfTE9DSygpICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfYXJjNF9sb2NrKQotI2RlZmluZSAgX0FSQzRfVU5MT0NLKCkgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9hcmM0X2xvY2spCi0vKiBCSU9OSUMtRU5EICovCi0KLSNpZmRlZiBfX0dOVUNfXwotI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIV9fR05VQ19fICovCi0jZGVmaW5lIGlubGluZQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhX19HTlVDX18gKi8KLQotc3RydWN0IGFyYzRfc3RyZWFtIHsKLSAgICAgICAgdV9pbnQ4X3QgaTsKLSAgICAgICAgdV9pbnQ4X3QgajsKLSAgICAgICAgdV9pbnQ4X3Qgc1syNTZdOwotfTsKLQotc3RhdGljIGludCByc19pbml0aWFsaXplZDsKLXN0YXRpYyBzdHJ1Y3QgYXJjNF9zdHJlYW0gcnM7Ci1zdGF0aWMgcGlkX3QgYXJjNF9zdGlyX3BpZDsKLXN0YXRpYyBpbnQgYXJjNF9jb3VudDsKLQotc3RhdGljIGlubGluZSB1X2ludDhfdCBhcmM0X2dldGJ5dGUodm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYXJjNF9pbml0KHZvaWQpCi17Ci0gICAgICAgIGludCAgICAgbjsKLQotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspCi0gICAgICAgICAgICAgICAgcnMuc1tuXSA9IG47Ci0gICAgICAgIHJzLmkgPSAwOwotICAgICAgICBycy5qID0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1hcmM0X2FkZHJhbmRvbSh1X2NoYXIgKmRhdCwgaW50IGRhdGxlbikKLXsKLSAgICAgICAgaW50ICAgICBuOwotICAgICAgICB1X2ludDhfdCBzaTsKLQotICAgICAgICBycy5pLS07Ci0gICAgICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykgewotICAgICAgICAgICAgICAgIHJzLmkgPSAocnMuaSArIDEpOwotICAgICAgICAgICAgICAgIHNpID0gcnMuc1tycy5pXTsKLSAgICAgICAgICAgICAgICBycy5qID0gKHJzLmogKyBzaSArIGRhdFtuICUgZGF0bGVuXSk7Ci0gICAgICAgICAgICAgICAgcnMuc1tycy5pXSA9IHJzLnNbcnMual07Ci0gICAgICAgICAgICAgICAgcnMuc1tycy5qXSA9IHNpOwotICAgICAgICB9Ci0gICAgICAgIHJzLmogPSBycy5pOwotfQotCi1zdGF0aWMgdm9pZAotYXJjNF9zdGlyKHZvaWQpCi17Ci0jaWYgMSAgLyogQklPTklDLUJFR0lOICovCi0JaW50ICAgICBpLCBmZDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB0aW1ldmFsIHR2OwotCQl1X2ludCBybmRbMTI4IC8gc2l6ZW9mKHVfaW50KV07Ci0JfSAgICAgICByZGF0OwotCWludAluOwotCi0gICAgICAgIGlmICghcnNfaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgICAgICBhcmM0X2luaXQoKTsKLSAgICAgICAgICAgICAgICByc19pbml0aWFsaXplZCA9IDE7Ci0gICAgICAgIH0KLQotCWZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOwotCWlmIChmZCAhPSAtMSkgewotCQlyZWFkKGZkLCByZGF0LnJuZCwgc2l6ZW9mKHJkYXQucm5kKSk7Ci0JCWNsb3NlKGZkKTsKLQl9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotCSAgICAvKiBmZCA8IDAgPyAgQWgsIHdoYXQgdGhlIGhlY2suIFdlJ2xsIGp1c3QgdGFrZQotCSAgICAgKiB3aGF0ZXZlciB3YXMgb24gdGhlIHN0YWNrLiBqdXN0IGFkZCBhIGxpdHRsZSBtb3JlCi0gICAgICAgICAgICAgKiB0aW1lLWJhc2VkIHJhbmRvbW5lc3MgdGhvdWdoCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGdldHRpbWVvZmRheSgmcmRhdC50diwgTlVMTCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhcmM0X3N0aXJfcGlkID0gZ2V0cGlkKCk7Ci0JYXJjNF9hZGRyYW5kb20oKHZvaWQgKikgJnJkYXQsIHNpemVvZihyZGF0KSk7Ci0jZWxzZSAgLyogQklPTklDLUVORCAqLwotICAgICAgICBpbnQgICAgIGksIG1pYlsyXTsKLSAgICAgICAgc2l6ZV90ICAgICAgICBsZW47Ci0gICAgICAgIHVfY2hhciBybmRbMTI4XTsKLQotICAgICAgICBpZiAoIXJzX2luaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgYXJjNF9pbml0KCk7Ci0gICAgICAgICAgICAgICAgcnNfaW5pdGlhbGl6ZWQgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgbWliWzBdID0gQ1RMX0tFUk47Ci0gICAgICAgIG1pYlsxXSA9IEtFUk5fQVJORDsKLQotICAgICAgICBsZW4gPSBzaXplb2Yocm5kKTsKLSAgICAgICAgc3lzY3RsKG1pYiwgMiwgcm5kLCAmbGVuLCBOVUxMLCAwKTsKLQotICAgICAgICBhcmM0X3N0aXJfcGlkID0gZ2V0cGlkKCk7Ci0gICAgICAgIGFyYzRfYWRkcmFuZG9tKHJuZCwgc2l6ZW9mKHJuZCkpOwotI2VuZGlmCi0gICAgICAgIC8qCi0gICAgICAgICAqIERpc2NhcmQgZWFybHkga2V5c3RyZWFtLCBhcyBwZXIgcmVjb21tZW5kYXRpb25zIGluOgotICAgICAgICAgKiBodHRwOi8vd3d3Lndpc2RvbS53ZWl6bWFubi5hYy5pbC9+aXRzaWsvUkM0L1BhcGVycy9SYzRfa3NhLnBzCi0gICAgICAgICAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgICAgICAgICAgICAgKHZvaWQpYXJjNF9nZXRieXRlKCk7Ci0gICAgICAgIGFyYzRfY291bnQgPSAxNjAwMDAwOwotfQotCi1zdGF0aWMgaW5saW5lIHVfaW50OF90Ci1hcmM0X2dldGJ5dGUodm9pZCkKLXsKLSAgICAgICAgdV9pbnQ4X3Qgc2ksIHNqOwotCi0gICAgICAgIHJzLmkgPSAocnMuaSArIDEpOwotICAgICAgICBzaSA9IHJzLnNbcnMuaV07Ci0gICAgICAgIHJzLmogPSAocnMuaiArIHNpKTsKLSAgICAgICAgc2ogPSBycy5zW3JzLmpdOwotICAgICAgICBycy5zW3JzLmldID0gc2o7Ci0gICAgICAgIHJzLnNbcnMual0gPSBzaTsKLSAgICAgICAgcmV0dXJuIChycy5zWyhzaSArIHNqKSAmIDB4ZmZdKTsKLX0KLQotdV9pbnQ4X3QKLV9fYXJjNF9nZXRieXRlKHZvaWQpCi17Ci0gICAgICAgIHVfaW50OF90IHZhbDsKLQotICAgICAgICBfQVJDNF9MT0NLKCk7Ci0gICAgICAgIGlmICgtLWFyYzRfY291bnQgPT0gMCB8fCAhcnNfaW5pdGlhbGl6ZWQpCi0gICAgICAgICAgICAgICAgYXJjNF9zdGlyKCk7Ci0gICAgICAgIHZhbCA9IGFyYzRfZ2V0Ynl0ZSgpOwotICAgICAgICBfQVJDNF9VTkxPQ0soKTsKLSAgICAgICAgcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIGlubGluZSB1X2ludDMyX3QKLWFyYzRfZ2V0d29yZCh2b2lkKQotewotICAgICAgICB1X2ludDMyX3QgdmFsOwotICAgICAgICB2YWwgPSBhcmM0X2dldGJ5dGUoKSA8PCAyNDsKLSAgICAgICAgdmFsIHw9IGFyYzRfZ2V0Ynl0ZSgpIDw8IDE2OwotICAgICAgICB2YWwgfD0gYXJjNF9nZXRieXRlKCkgPDwgODsKLSAgICAgICAgdmFsIHw9IGFyYzRfZ2V0Ynl0ZSgpOwotICAgICAgICByZXR1cm4gdmFsOwotfQotCi12b2lkCi1hcmM0cmFuZG9tX3N0aXIodm9pZCkKLXsKLSAgICAgICAgX0FSQzRfTE9DSygpOwotICAgICAgICBhcmM0X3N0aXIoKTsKLSAgICAgICAgX0FSQzRfVU5MT0NLKCk7Ci19Ci0KLXZvaWQKLWFyYzRyYW5kb21fYWRkcmFuZG9tKHVfY2hhciAqZGF0LCBpbnQgZGF0bGVuKQotewotICAgICAgICBfQVJDNF9MT0NLKCk7Ci0gICAgICAgIGlmICghcnNfaW5pdGlhbGl6ZWQpCi0gICAgICAgICAgICAgICAgYXJjNF9zdGlyKCk7Ci0gICAgICAgIGFyYzRfYWRkcmFuZG9tKGRhdCwgZGF0bGVuKTsKLSAgICAgICAgX0FSQzRfVU5MT0NLKCk7Ci19Ci0KLXVfaW50MzJfdAotYXJjNHJhbmRvbSh2b2lkKQotewotICAgICAgICB1X2ludDMyX3QgdmFsOwotICAgICAgICBfQVJDNF9MT0NLKCk7Ci0gICAgICAgIGFyYzRfY291bnQgLT0gNDsKLSAgICAgICAgaWYgKGFyYzRfY291bnQgPD0gMCB8fCAhcnNfaW5pdGlhbGl6ZWQgfHwgYXJjNF9zdGlyX3BpZCAhPSBnZXRwaWQoKSkKLSAgICAgICAgICAgICAgICBhcmM0X3N0aXIoKTsKLSAgICAgICAgdmFsID0gYXJjNF9nZXR3b3JkKCk7Ci0gICAgICAgIF9BUkM0X1VOTE9DSygpOwotICAgICAgICByZXR1cm4gdmFsOwotfQotCi12b2lkCi1hcmM0cmFuZG9tX2J1Zih2b2lkICpfYnVmLCBzaXplX3QgbikKLXsKLSAgICAgICAgdV9jaGFyICpidWYgPSAodV9jaGFyICopX2J1ZjsKLSAgICAgICAgX0FSQzRfTE9DSygpOwotICAgICAgICBpZiAoIXJzX2luaXRpYWxpemVkIHx8IGFyYzRfc3Rpcl9waWQgIT0gZ2V0cGlkKCkpCi0gICAgICAgICAgICAgICAgYXJjNF9zdGlyKCk7Ci0gICAgICAgIHdoaWxlIChuLS0pIHsKLSAgICAgICAgICAgICAgICBpZiAoLS1hcmM0X2NvdW50IDw9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmM0X3N0aXIoKTsKLSAgICAgICAgICAgICAgICBidWZbbl0gPSBhcmM0X2dldGJ5dGUoKTsKLSAgICAgICAgfQotICAgICAgICBfQVJDNF9VTkxPQ0soKTsKLX0KLQotLyoKLSAqIENhbGN1bGF0ZSBhIHVuaWZvcm1seSBkaXN0cmlidXRlZCByYW5kb20gbnVtYmVyIGxlc3MgdGhhbiB1cHBlcl9ib3VuZAotICogYXZvaWRpbmcgIm1vZHVsbyBiaWFzIi4KLSAqCi0gKiBVbmlmb3JtaXR5IGlzIGFjaGlldmVkIGJ5IGdlbmVyYXRpbmcgbmV3IHJhbmRvbSBudW1iZXJzIHVudGlsIHRoZSBvbmUKLSAqIHJldHVybmVkIGlzIG91dHNpZGUgdGhlIHJhbmdlIFswLCAyKiozMiAlIHVwcGVyX2JvdW5kKS4gIFRoaXMKLSAqIGd1YXJhbnRlZXMgdGhlIHNlbGVjdGVkIHJhbmRvbSBudW1iZXIgd2lsbCBiZSBpbnNpZGUKLSAqIFsyKiozMiAlIHVwcGVyX2JvdW5kLCAyKiozMikgd2hpY2ggbWFwcyBiYWNrIHRvIFswLCB1cHBlcl9ib3VuZCkKLSAqIGFmdGVyIHJlZHVjdGlvbiBtb2R1bG8gdXBwZXJfYm91bmQuCi0gKi8KLXVfaW50MzJfdAotYXJjNHJhbmRvbV91bmlmb3JtKHVfaW50MzJfdCB1cHBlcl9ib3VuZCkKLXsKLSAgICAgICAgdV9pbnQzMl90IHIsIG1pbjsKLQotICAgICAgICBpZiAodXBwZXJfYm91bmQgPCAyKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0jaWYgKFVMT05HX01BWCA+IDB4ZmZmZmZmZmZVTCkKLSAgICAgICAgbWluID0gMHgxMDAwMDAwMDBVTCAlIHVwcGVyX2JvdW5kOwotI2Vsc2UKLSAgICAgICAgLyogQ2FsY3VsYXRlICgyKiozMiAlIHVwcGVyX2JvdW5kKSBhdm9pZGluZyA2NC1iaXQgbWF0aCAqLwotICAgICAgICBpZiAodXBwZXJfYm91bmQgPiAweDgwMDAwMDAwKQotICAgICAgICAgICAgICAgIG1pbiA9IDEgKyB+dXBwZXJfYm91bmQ7ICAgICAgICAgICAgICAgIC8qIDIqKjMyIC0gdXBwZXJfYm91bmQgKi8KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogKDIqKjMyIC0gKHggKiAyKSkgJSB4ID09IDIqKjMyICUgeCB3aGVuIHggPD0gMioqMzEgKi8KLSAgICAgICAgICAgICAgICBtaW4gPSAoKDB4ZmZmZmZmZmYgLSAodXBwZXJfYm91bmQgKiAyKSkgKyAxKSAlIHVwcGVyX2JvdW5kOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIGNvdWxkIHRoZW9yZXRpY2FsbHkgbG9vcCBmb3JldmVyIGJ1dCBlYWNoIHJldHJ5IGhhcwotICAgICAgICAgKiBwID4gMC41ICh3b3JzdCBjYXNlLCB1c3VhbGx5IGZhciBiZXR0ZXIpIG9mIHNlbGVjdGluZyBhCi0gICAgICAgICAqIG51bWJlciBpbnNpZGUgdGhlIHJhbmdlIHdlIG5lZWQsIHNvIGl0IHNob3VsZCByYXJlbHkgbmVlZAotICAgICAgICAgKiB0byByZS1yb2xsLgotICAgICAgICAgKi8KLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIHIgPSBhcmM0cmFuZG9tKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHIgPj0gbWluKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gciAlIHVwcGVyX2JvdW5kOwotfQotCi0jaWYgMAotLyotLS0tLS0tLSBUZXN0IGNvZGUgZm9yIGkzODYgLS0tLS0tLS0qLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9wY3RyLmg+Ci1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgICAgICBjb25zdCBpbnQgaXRlciA9IDEwMDAwMDA7Ci0gICAgICAgIGludCAgICAgaTsKLSAgICAgICAgcGN0cnZhbCB2OwotCi0gICAgICAgIHYgPSByZHRzYygpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlcjsgaSsrKQotICAgICAgICAgICAgICAgIGFyYzRyYW5kb20oKTsKLSAgICAgICAgdiA9IHJkdHNjKCkgLSB2OwotICAgICAgICB2IC89IGl0ZXI7Ci0KLSAgICAgICAgcHJpbnRmKCIlcWQgY3ljbGVzXG4iLCB2KTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYXNzZXJ0LmNwcCBiL2xpYmMvYmlvbmljL2Fzc2VydC5jcHAKaW5kZXggYmE2NzE0My4uOTg1ZmMzOCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvYXNzZXJ0LmNwcAorKysgYi9saWJjL2Jpb25pYy9hc3NlcnQuY3BwCkBAIC0zNCwxMCArMzQsMTIgQEAKIAogdm9pZCBfX2Fzc2VydChjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZmFpbGVkX2V4cHJlc3Npb24pIHsKICAgX19saWJjX2ZhdGFsKCIlczolZDogYXNzZXJ0aW9uIFwiJXNcIiBmYWlsZWQiLCBmaWxlLCBsaW5lLCBmYWlsZWRfZXhwcmVzc2lvbik7Ci0gIC8qIE5PVFJFQUNIRUQgKi8KIH0KIAogdm9pZCBfX2Fzc2VydDIoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBmYWlsZWRfZXhwcmVzc2lvbikgewogICBfX2xpYmNfZmF0YWwoIiVzOiVkOiAlczogYXNzZXJ0aW9uIFwiJXNcIiBmYWlsZWQiLCBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgZmFpbGVkX2V4cHJlc3Npb24pOwotICAvKiBOT1RSRUFDSEVEICovCit9CisKK2V4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIHZvaWQgbG9uZ2ptcGVycm9yKCkgeworICBfX2xpYmNfZmF0YWwoImxvbmdqbXAgYm90Y2giKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2F0b2YuY3BwIGIvbGliYy9iaW9uaWMvYXRvZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3Y2NkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2F0b2YuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitkb3VibGUgYXRvZihjb25zdCBjaGFyKiBzKSB7CisgIC8vIERlc3BpdGUgdGhlICdmJyBpbiB0aGUgbmFtZSwgdGhpcyByZXR1cm5zIGEgZG91YmxlIGFuZCBpcworICAvLyBzcGVjaWZpZWQgdG8gYmUgZXF1aXZhbGVudCB0byBzdHJ0b2QuCisgIHJldHVybiBzdHJ0b2QocywgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9hdG9pLmMgYi9saWJjL2Jpb25pYy9hdG9pLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNjU1NDMuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvYXRvaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0KLWludCAgYXRvaShjb25zdCBjaGFyKiAgcykKLXsKLSAgICByZXR1cm4gKGludClzdHJ0b2ltYXgocywgTlVMTCwgMTApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYXRvbC5jIGIvbGliYy9iaW9uaWMvYXRvbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2RjMDVjLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL2F0b2wuYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotCi1sb25nICBhdG9sKGNvbnN0IGNoYXIqICBzKQotewotICAgIHJldHVybiAobG9uZylzdHJ0b2ltYXgocywgTlVMTCwgMTApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYXRvbGwuYyBiL2xpYmMvYmlvbmljL2F0b2xsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1Mzg3OGYuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvYXRvbGwuYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotCi1sb25nIGxvbmcgYXRvbGwoY29uc3QgY2hhciogIHMpCi17Ci0gICAgcmV0dXJuIChsb25nIGxvbmcpc3RydG9pbWF4KHMsIE5VTEwsIDEwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Jyay5jcHAgYi9saWJjL2Jpb25pYy9icmsuY3BwCmluZGV4IDYzM2I5MTQuLjRlNDYxOTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2Jyay5jcHAKKysrIGIvbGliYy9iaW9uaWMvYnJrLmNwcApAQCAtMjYsMTYgKzI2LDQ5IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotLyogU2hhcmVkIHdpdGggc2Jyay5jLiAqLwotZXh0ZXJuICJDIiB2b2lkKiBfX2Jpb25pY19icms7IC8vIFRPRE86IHNob3VsZCBiZSBfX0xJQkNfSElEREVOX18gYnV0IGFjY2lkZW50YWxseSBleHBvcnRlZCBieSBOREsgOi0oCisjaWYgX19MUDY0X18KK3N0YXRpYyB2b2lkKiBfX2Jpb25pY19icms7CisjZWxzZQordm9pZCogX19iaW9uaWNfYnJrOyAvLyBBY2NpZGVudGFsbHkgZXhwb3J0ZWQgYnkgdGhlIE5ESy4KKyNlbmRpZgogCiBpbnQgYnJrKHZvaWQqIGVuZF9kYXRhKSB7Ci0gIHZvaWQqIG5ld19icmsgPSBfX2JyayhlbmRfZGF0YSk7Ci0gIGlmIChuZXdfYnJrICE9IGVuZF9kYXRhKSB7CisgIF9fYmlvbmljX2JyayA9IF9fYnJrKGVuZF9kYXRhKTsKKyAgaWYgKF9fYmlvbmljX2JyayA8IGVuZF9kYXRhKSB7CisgICAgZXJybm8gPSBFTk9NRU07CiAgICAgcmV0dXJuIC0xOwogICB9Ci0gIF9fYmlvbmljX2JyayA9IG5ld19icms7CiAgIHJldHVybiAwOwogfQorCit2b2lkKiBzYnJrKHB0cmRpZmZfdCBpbmNyZW1lbnQpIHsKKyAgLy8gSW5pdGlhbGl6ZSBfX2Jpb25pY19icmsgaWYgbmVjZXNzYXJ5LgorICBpZiAoX19iaW9uaWNfYnJrID09IE5VTEwpIHsKKyAgICBfX2Jpb25pY19icmsgPSBfX2JyayhOVUxMKTsKKyAgfQorCisgIC8vIERvbid0IGFzayB0aGUga2VybmVsIGlmIHdlIGFscmVhZHkga25vdyB0aGUgYW5zd2VyLgorICBpZiAoaW5jcmVtZW50ID09IDApIHsKKyAgICByZXR1cm4gX19iaW9uaWNfYnJrOworICB9CisKKyAgLy8gQXZvaWQgb3ZlcmZsb3cuCisgIHVpbnRwdHJfdCBvbGRfYnJrID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KF9fYmlvbmljX2Jyayk7CisgIGlmICgoaW5jcmVtZW50ID4gMCAmJiBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGluY3JlbWVudCkgPiAoVUlOVFBUUl9NQVggLSBvbGRfYnJrKSkgfHwKKyAgICAgIChpbmNyZW1lbnQgPCAwICYmIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLWluY3JlbWVudCkgPiBvbGRfYnJrKSkgeworICAgIGVycm5vID0gRU5PTUVNOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSk7CisgIH0KKworICB2b2lkKiBkZXNpcmVkX2JyayA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9sZF9icmsgKyBpbmNyZW1lbnQpOworICBfX2Jpb25pY19icmsgPSBfX2JyayhkZXNpcmVkX2Jyayk7CisgIGlmIChfX2Jpb25pY19icmsgPCBkZXNpcmVkX2JyaykgeworICAgIGVycm5vID0gRU5PTUVNOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSk7CisgIH0KKworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob2xkX2Jyayk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9jMTZydG9tYi5jcHAgYi9saWJjL2Jpb25pYy9jMTZydG9tYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1MTJiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2MxNnJ0b21iLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVjaGFyLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21ic3RhdGUuaCIKKworc3RhdGljIGlubGluZSBjb25zdGV4cHIgYm9vbCBpc19oaWdoX3N1cnJvZ2F0ZShjaGFyMTZfdCBjMTYpIHsKKyAgcmV0dXJuIGMxNiA+PSAweGQ4MDAgJiYgYzE2IDwgMHhkYzAwOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0ZXhwciBib29sIGlzX2xvd19zdXJyb2dhdGUoY2hhcjE2X3QgYzE2KSB7CisgIHJldHVybiBjMTYgPj0gMHhkYzAwICYmIGMxNiA8IDB4ZTAwMDsKK30KKworc2l6ZV90IGMxNnJ0b21iKGNoYXIqIHMsIGNoYXIxNl90IGMxNiwgbWJzdGF0ZV90KiBwcykgeworICBzdGF0aWMgbWJzdGF0ZV90IF9fcHJpdmF0ZV9zdGF0ZTsKKyAgbWJzdGF0ZV90KiBzdGF0ZSA9IChwcyA9PSBOVUxMKSA/ICZfX3ByaXZhdGVfc3RhdGUgOiBwczsKKyAgaWYgKG1ic2luaXQoc3RhdGUpKSB7CisgICAgaWYgKGlzX2hpZ2hfc3Vycm9nYXRlKGMxNikpIHsKKyAgICAgIGNoYXIzMl90IGMzMiA9IChjMTYgJiB+MHhkODAwKSA8PCAxMDsKKyAgICAgIG1ic3RhdGVfc2V0X2J5dGUoc3RhdGUsIDMsIChjMzIgJiAweGZmMDAwMCkgPj4gMTYpOworICAgICAgbWJzdGF0ZV9zZXRfYnl0ZShzdGF0ZSwgMiwgKGMzMiAmIDB4MDBmZjAwKSA+PiA4KTsKKyAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoaXNfbG93X3N1cnJvZ2F0ZShjMTYpKSB7CisgICAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKEVJTlZBTCwgc3RhdGUpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gYzMycnRvbWIocywgc3RhdGljX2Nhc3Q8Y2hhcjMyX3Q+KGMxNiksIHN0YXRlKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKCFpc19sb3dfc3Vycm9nYXRlKGMxNikpIHsKKyAgICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuX2lsbGVnYWwoRUlOVkFMLCBzdGF0ZSk7CisgICAgfQorCisgICAgY2hhcjMyX3QgYzMyID0gKChtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAzKSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAobWJzdGF0ZV9nZXRfYnl0ZShzdGF0ZSwgMikgPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAoYzE2ICYgfjB4ZGMwMCkpICsgMHgxMDAwMDsKKyAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybihjMzJydG9tYihzLCBjMzIsIE5VTEwpLCBzdGF0ZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2MzMnJ0b21iLmNwcCBiL2xpYmMvYmlvbmljL2MzMnJ0b21iLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzIzMWMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvYzMycnRvbWIuY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dWNoYXIuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWJzdGF0ZS5oIgorCitzaXplX3QgYzMycnRvbWIoY2hhciogcywgY2hhcjMyX3QgYzMyLCBtYnN0YXRlX3QqIHBzKSB7CisgIHN0YXRpYyBtYnN0YXRlX3QgX19wcml2YXRlX3N0YXRlOworICBtYnN0YXRlX3QqIHN0YXRlID0gKHBzID09IE5VTEwpID8gJl9fcHJpdmF0ZV9zdGF0ZSA6IHBzOworCisgIGlmIChzID09IE5VTEwpIHsKKyAgICAvLyBFcXVpdmFsZW50IHRvIGMzMnJ0b21iKGJ1ZiwgVSdcMCcsIHBzKS4KKyAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybigxLCBzdGF0ZSk7CisgIH0KKworICAvLyBQT1NJWCBzdGF0ZXMgdGhhdCBpZiBjaGFyMzJfdCBpcyBhIG51bGwgd2lkZSBjaGFyYWN0ZXIsIGEgbnVsbCBieXRlIHNoYWxsCisgIC8vIGJlIHN0b3JlZCwgcHJlY2VkZWQgYnkgYW55IHNoaWZ0IHNlcXVlbmNlIG5lZWRlZCB0byByZXN0b3JlIHRoZSBpbml0aWFsCisgIC8vIHNoaWZ0IHN0YXRlLiBTaW5jZSBzaGlmdCBzdGF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQsIG9ubHkgdGhlIG51bGwgYnl0ZSBpcworICAvLyBzdG9yZWQuCisgIGlmIChjMzIgPT0gVSdcMCcpIHsKKyAgICAqcyA9ICdcMCc7CisgICAgcmVzZXRfYW5kX3JldHVybigxLCBzdGF0ZSk7CisgIH0KKworICBpZiAoIW1ic2luaXQoc3RhdGUpKSB7CisgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSUxTRVEsIHN0YXRlKTsKKyAgfQorCisgIGlmICgoYzMyICYgfjB4N2YpID09IDApIHsKKyAgICAvLyBGYXN0IHBhdGggZm9yIHBsYWluIEFTQ0lJIGNoYXJhY3RlcnMuCisgICAgKnMgPSBjMzI7CisgICAgcmV0dXJuIDE7CisgIH0KKworICAvLyBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBvY3RldHMgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGlzIGNoYXJhY3Rlci4KKyAgLy8gV2UgYWx3YXlzIG91dHB1dCB0aGUgc2hvcnRlc3Qgc2VxdWVuY2UgcG9zc2libGUuIEFsc28gc3BlY2lmeSB0aGUKKyAgLy8gZmlyc3QgZmV3IGJpdHMgb2YgdGhlIGZpcnN0IG9jdGV0LCB3aGljaCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24KKyAgLy8gYWJvdXQgdGhlIHNlcXVlbmNlIGxlbmd0aC4KKyAgdWludDhfdCBsZWFkOworICBzaXplX3QgbGVuZ3RoOworICBpZiAoKGMzMiAmIH4weDdmKSA9PSAwKSB7CisgICAgbGVhZCA9IDA7CisgICAgbGVuZ3RoID0gMTsKKyAgfSBlbHNlIGlmICgoYzMyICYgfjB4N2ZmKSA9PSAwKSB7CisgICAgbGVhZCA9IDB4YzA7CisgICAgbGVuZ3RoID0gMjsKKyAgfSBlbHNlIGlmICgoYzMyICYgfjB4ZmZmZikgPT0gMCkgeworICAgIGxlYWQgPSAweGUwOworICAgIGxlbmd0aCA9IDM7CisgIH0gZWxzZSBpZiAoKGMzMiAmIH4weDFmZmZmZikgPT0gMCkgeworICAgIGxlYWQgPSAweGYwOworICAgIGxlbmd0aCA9IDQ7CisgIH0gZWxzZSB7CisgICAgZXJybm8gPSBFSUxTRVE7CisgICAgcmV0dXJuIF9fTUJfRVJSX0lMTEVHQUxfU0VRVUVOQ0U7CisgIH0KKworICAvLyBPdXRwdXQgdGhlIG9jdGV0cyByZXByZXNlbnRpbmcgdGhlIGNoYXJhY3RlciBpbiBjaHVua3MKKyAgLy8gb2YgNiBiaXRzLCBsZWFzdCBzaWduaWZpY2FudCBsYXN0LiBUaGUgZmlyc3Qgb2N0ZXQgaXMKKyAgLy8gYSBzcGVjaWFsIGNhc2UgYmVjYXVzZSBpdCBjb250YWlucyB0aGUgc2VxdWVuY2UgbGVuZ3RoCisgIC8vIGluZm9ybWF0aW9uLgorICBmb3IgKHNpemVfdCBpID0gbGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgeworICAgIHNbaV0gPSAoYzMyICYgMHgzZikgfCAweDgwOworICAgIGMzMiA+Pj0gNjsKKyAgfQorICAqcyA9IChjMzIgJiAweGZmKSB8IGxlYWQ7CisKKyAgcmV0dXJuIGxlbmd0aDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2NsZWFyZW52LmMgYi9saWJjL2Jpb25pYy9jbGVhcmVudi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjZmMDY2Li4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL2NsZWFyZW52LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotZXh0ZXJuIGNoYXIqKiBlbnZpcm9uOwotCi1pbnQgY2xlYXJlbnYodm9pZCkKLXsKLSAgICBjaGFyICoqUCA9IGVudmlyb247Ci0KLSAgICBpZiAoUCAhPSBOVUxMKSB7Ci0gICAgICAgIGZvciAoOyAqUDsgKytQKQotICAgICAgICAgICAgKlAgPSBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2NsZWFyZW52LmNwcCBiL2xpYmMvYmlvbmljL2NsZWFyZW52LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzBjYzNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvY2xlYXJlbnYuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitpbnQgY2xlYXJlbnYoKSB7CisgIGNoYXIqKiBlID0gZW52aXJvbjsKKyAgaWYgKGUgIT0gTlVMTCkgeworICAgIGZvciAoOyAqZTsgKytlKSB7CisgICAgICAqZSA9IE5VTEw7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvY2xvY2suY3BwIGIvbGliYy9iaW9uaWMvY2xvY2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZDMyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9jbG9jay5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy9zeXNjb25mLmg+CisjaW5jbHVkZSA8c3lzL3RpbWVzLmg+CisKKyNkZWZpbmUgTlNfUEVSX1MgMTAwMDAwMDAwMCAvLyBObyAicHJpdmF0ZS9iaW9uaWNfY29uc3RhbnRzLmgiIGluIGxtcC1kZXYuCisKKy8vIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Z1bmN0aW9ucy9jbG9jay5odG1sCitjbG9ja190IGNsb2NrKCkgeworICB0aW1lc3BlYyB0czsKKyAgaWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lELCAmdHMpID09IC0xKSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiAodHMudHZfc2VjICogQ0xPQ0tTX1BFUl9TRUMpICsgKHRzLnR2X25zZWMgLyAoTlNfUEVSX1MgLyBDTE9DS1NfUEVSX1NFQykpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvY2xvbmUuY3BwIGIvbGliYy9iaW9uaWMvY2xvbmUuY3BwCmluZGV4IDFkOTk3ZmUuLjBhMGZkZDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2Nsb25lLmNwcAorKysgYi9saWJjL2Jpb25pYy9jbG9uZS5jcHAKQEAgLTMxLDExICszMSwxMyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorCiBleHRlcm4gIkMiIHBpZF90IF9fYmlvbmljX2Nsb25lKHVpbnQzMl90IGZsYWdzLCB2b2lkKiBjaGlsZF9zdGFjaywgaW50KiBwYXJlbnRfdGlkLCB2b2lkKiB0bHMsIGludCogY2hpbGRfdGlkLCBpbnQgKCpmbikodm9pZCopLCB2b2lkKiBhcmcpOwotZXh0ZXJuICJDIiB2b2lkIF9fZXhpdChpbnQgc3RhdHVzKTsKK2V4dGVybiAiQyIgX19ub3JldHVybiB2b2lkIF9fZXhpdChpbnQgc3RhdHVzKTsKIAogLy8gQ2FsbGVkIGZyb20gdGhlIF9fYmlvbmljX2Nsb25lIGFzc2VtYmxlciB0byBjYWxsIHRoZSB0aHJlYWQgZnVuY3Rpb24gdGhlbiBleGl0LgotZXh0ZXJuICJDIiB2b2lkIF9fYmlvbmljX2Nsb25lX2VudHJ5KGludCAoKmZuKSh2b2lkKiksIHZvaWQqIGFyZykgeworZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gdm9pZCBfX3N0YXJ0X3RocmVhZChpbnQgKCpmbikodm9pZCopLCB2b2lkKiBhcmcpIHsKICAgaW50IHN0YXR1cyA9ICgqZm4pKGFyZyk7CiAgIF9fZXhpdChzdGF0dXMpOwogfQpAQCAtNTksNSArNjEsMjMgQEAKICAgfQogICB2YV9lbmQoYXJncyk7CiAKLSAgcmV0dXJuIF9fYmlvbmljX2Nsb25lKGZsYWdzLCBjaGlsZF9zdGFjaywgcGFyZW50X3RpZCwgbmV3X3RscywgY2hpbGRfdGlkLCBmbiwgYXJnKTsKKyAgLy8gQWxpZ24gJ2NoaWxkX3N0YWNrJyB0byAxNiBieXRlcy4KKyAgdWludHB0cl90IGNoaWxkX3N0YWNrX2FkZHIgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2hpbGRfc3RhY2spOworICBjaGlsZF9zdGFja19hZGRyICY9IH4weGY7CisgIGNoaWxkX3N0YWNrID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2hpbGRfc3RhY2tfYWRkcik7CisKKyAgLy8gUmVtZW1iZXIgdGhlIHBhcmVudCBwaWQgYW5kIGludmFsaWRhdGUgdGhlIGNhY2hlZCB2YWx1ZSB3aGlsZSB3ZSBjbG9uZS4KKyAgcHRocmVhZF9pbnRlcm5hbF90KiBzZWxmID0gX19nZXRfdGhyZWFkKCk7CisgIHBpZF90IHBhcmVudF9waWQgPSBzZWxmLT5pbnZhbGlkYXRlX2NhY2hlZF9waWQoKTsKKworICAvLyBBY3R1YWxseSBkbyB0aGUgY2xvbmUuCisgIGludCBjbG9uZV9yZXN1bHQgPSBfX2Jpb25pY19jbG9uZShmbGFncywgY2hpbGRfc3RhY2ssIHBhcmVudF90aWQsIG5ld190bHMsIGNoaWxkX3RpZCwgZm4sIGFyZyk7CisKKyAgLy8gV2UncmUgdGhlIHBhcmVudCwgc28gcHV0IG91ciBrbm93biBwaWQgYmFjayBpbiBwbGFjZS4KKyAgLy8gV2UgbGVhdmUgdGhlIGNoaWxkIHdpdGhvdXQgYSBjYWNoZWQgcGlkLCBidXQ6CisgIC8vIDEuIHB0aHJlYWRfY3JlYXRlIGdpdmVzIGl0cyBjaGlsZHJlbiB0aGVpciBvd24gcHRocmVhZF9pbnRlcm5hbF90IHdpdGggdGhlIGNvcnJlY3QgcGlkLgorICAvLyAyLiBmb3JrIG1ha2VzIGEgY2xvbmUgc3lzdGVtIGNhbGwgZGlyZWN0bHkuCisgIC8vIElmIGFueSBvdGhlciBjYXNlcyBiZWNvbWUgaW1wb3J0YW50LCB3ZSBjb3VsZCB1c2UgYSBkb3VibGUgdHJhbXBvbGluZSBsaWtlIF9fcHRocmVhZF9zdGFydC4KKyAgc2VsZi0+c2V0X2NhY2hlZF9waWQocGFyZW50X3BpZCk7CisgIHJldHVybiBjbG9uZV9yZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9jb25uZWN0LmNwcCBiL2xpYmMvYmlvbmljL2Nvbm5lY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NzNmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9jb25uZWN0LmNwcApAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgInByaXZhdGUvTmV0ZENsaWVudERpc3BhdGNoLmgiCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKK2ludCBjb25uZWN0KGludCBzb2NrZmQsIGNvbnN0IHNvY2thZGRyKiBhZGRyLCBzb2NrbGVuX3QgYWRkcmxlbikgeworICAgIHJldHVybiBfX25ldGRDbGllbnREaXNwYXRjaC5jb25uZWN0KHNvY2tmZCwgYWRkciwgYWRkcmxlbik7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9jdHlwZS5jcHAgYi9saWJjL2Jpb25pYy9jdHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIzMWQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2N0eXBlLmNwcApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgaXNhbG51bV9sKGludCBjLCBsb2NhbGVfdCkgeworICByZXR1cm4gaXNhbG51bShjKTsKK30KKworaW50IGlzYWxwaGFfbChpbnQgYywgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIGlzYWxwaGEoYyk7Cit9CisKK2ludCBpc2JsYW5rX2woaW50IGMsIGxvY2FsZV90KSB7CisgIHJldHVybiBpc2JsYW5rKGMpOworfQorCitpbnQgaXNjbnRybF9sKGludCBjLCBsb2NhbGVfdCkgeworICByZXR1cm4gaXNjbnRybChjKTsKK30KKworaW50IGlzZGlnaXRfbChpbnQgYywgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIGlzZGlnaXQoYyk7Cit9CisKK2ludCBpc2dyYXBoX2woaW50IGMsIGxvY2FsZV90KSB7CisgIHJldHVybiBpc2dyYXBoKGMpOworfQorCitpbnQgaXNsb3dlcl9sKGludCBjLCBsb2NhbGVfdCkgeworICByZXR1cm4gaXNsb3dlcihjKTsKK30KKworaW50IGlzcHJpbnRfbChpbnQgYywgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIGlzcHJpbnQoYyk7Cit9CisKK2ludCBpc3B1bmN0X2woaW50IGMsIGxvY2FsZV90KSB7CisgIHJldHVybiBpc3B1bmN0KGMpOworfQorCitpbnQgaXNzcGFjZV9sKGludCBjLCBsb2NhbGVfdCkgeworICByZXR1cm4gaXNzcGFjZShjKTsKK30KKworaW50IGlzdXBwZXJfbChpbnQgYywgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIGlzdXBwZXIoYyk7Cit9CisKK2ludCBpc3hkaWdpdF9sKGludCBjLCBsb2NhbGVfdCkgeworICByZXR1cm4gaXN4ZGlnaXQoYyk7Cit9CisKK2ludCB0b3VwcGVyX2woaW50IGMsIGxvY2FsZV90KSB7CisgIHJldHVybiB0b3VwcGVyKGMpOworfQorCitpbnQgdG9sb3dlcl9sKGludCBjLCBsb2NhbGVfdCkgeworICByZXR1cm4gdG9sb3dlcihjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RlYnVnX21hcGluZm8uY3BwIGIvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5jcHAKaW5kZXggYzViOWFhNy4uZDgzNzk5YSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5jcHAKKysrIGIvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5jcHAKQEAgLTI2LDM4ICsyNiw0OCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jaW5jbHVkZSAiZGxtYWxsb2MuaCIKICNpbmNsdWRlICJkZWJ1Z19tYXBpbmZvLmgiCisjaW5jbHVkZSAibWFsbG9jX2RlYnVnX2Rpc2FibGUuaCIKIAotLy8gNmYwMDAwMDAtNmYwMWUwMDAgcnd4cCAwMDAwMDAwMCAwMDowYyAxNjM4OTQxOSAgIC9zeXN0ZW0vbGliL2xpYmNvbXBvc2VyLnNvCi0vLyAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKLS8vIDAgICAgICAgICAxICAgICAgICAgMiAgICAgICAgIDMgICAgICAgICA0ICAgICAgICAgNQotCisvLyBGb3JtYXQgb2YgL3Byb2MvPFBJRD4vbWFwczoKKy8vICAgNmYwMDAwMDAtNmYwMWUwMDAgcnd4cCAwMDAwMDAwMCAwMDowYyAxNjM4OTQxOSAgIC9zeXN0ZW0vbGliL2xpYmNvbXBvc2VyLnNvCiBzdGF0aWMgbWFwaW5mb190KiBwYXJzZV9tYXBzX2xpbmUoY2hhciogbGluZSkgewotICBpbnQgbGVuID0gc3RybGVuKGxpbmUpOworICB1aW50cHRyX3Qgc3RhcnQ7CisgIHVpbnRwdHJfdCBlbmQ7CisgIGludCBuYW1lX3BvczsKKyAgaWYgKHNzY2FuZihsaW5lLCAiJSIgUFJJeFBUUiAiLSUiIFBSSXhQVFIgIiAlKjRzICUqeCAlKng6JSp4ICUqZCVuIiwgJnN0YXJ0LAorICAgICAgICAgICAgICZlbmQsICZuYW1lX3BvcykgPCAyKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KIAotICBpZiAobGVuIDwgMSkgcmV0dXJuIDA7Ci0gIGxpbmVbLS1sZW5dID0gMDsKKyAgd2hpbGUgKGlzc3BhY2UobGluZVtuYW1lX3Bvc10pKSB7CisgICAgbmFtZV9wb3MgKz0gMTsKKyAgfQorICBjb25zdCBjaGFyKiBuYW1lID0gbGluZSArIG5hbWVfcG9zOworICBzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisgIGlmIChuYW1lX2xlbiAmJiBuYW1lW25hbWVfbGVuIC0gMV0gPT0gJ1xuJykgeworICAgIG5hbWVfbGVuIC09IDE7CisgIH0KIAotICBpZiAobGVuIDwgNTApIHJldHVybiAwOwotICBpZiAobGluZVsyMF0gIT0gJ3gnKSByZXR1cm4gMDsKLQotICBtYXBpbmZvX3QqIG1pID0gc3RhdGljX2Nhc3Q8bWFwaW5mb190Kj4oZGxtYWxsb2Moc2l6ZW9mKG1hcGluZm9fdCkgKyAobGVuIC0gNDcpKSk7Ci0gIGlmIChtaSA9PSAwKSByZXR1cm4gMDsKLQotICBtaS0+c3RhcnQgPSBzdHJ0b3VsKGxpbmUsIDAsIDE2KTsKLSAgbWktPmVuZCA9IHN0cnRvdWwobGluZSArIDksIDAsIDE2KTsKLSAgbWktPm5leHQgPSAwOwotICBzdHJjcHkobWktPm5hbWUsIGxpbmUgKyA0OSk7Ci0KKyAgbWFwaW5mb190KiBtaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWFwaW5mb190Kj4oY2FsbG9jKDEsIHNpemVvZihtYXBpbmZvX3QpICsgbmFtZV9sZW4gKyAxKSk7CisgIGlmIChtaSkgeworICAgIG1pLT5zdGFydCA9IHN0YXJ0OworICAgIG1pLT5lbmQgPSBlbmQ7CisgICAgbWVtY3B5KG1pLT5uYW1lLCBuYW1lLCBuYW1lX2xlbik7CisgICAgbWktPm5hbWVbbmFtZV9sZW5dID0gJ1wwJzsKKyAgfQogICByZXR1cm4gbWk7CiB9CiAKIF9fTElCQ19ISURERU5fXyBtYXBpbmZvX3QqIG1hcGluZm9fY3JlYXRlKHBpZF90IHBpZCkgeworICBTY29wZWREaXNhYmxlRGVidWdDYWxscyBkaXNhYmxlOworCiAgIHN0cnVjdCBtYXBpbmZvX3QqIG1pbGlzdCA9IE5VTEw7CiAgIGNoYXIgZGF0YVsxMDI0XTsgLy8gVXNlZCB0byByZWFkIGxpbmVzIGFzIHdlbGwgYXMgdG8gY29uc3RydWN0IHRoZSBmaWxlbmFtZS4KICAgc25wcmludGYoZGF0YSwgc2l6ZW9mKGRhdGEpLCAiL3Byb2MvJWQvbWFwcyIsIHBpZCk7CkBAIC03NiwxMCArODYsMTIgQEAKIH0KIAogX19MSUJDX0hJRERFTl9fIHZvaWQgbWFwaW5mb19kZXN0cm95KG1hcGluZm9fdCogbWkpIHsKKyAgU2NvcGVkRGlzYWJsZURlYnVnQ2FsbHMgZGlzYWJsZTsKKwogICB3aGlsZSAobWkgIT0gTlVMTCkgewogICAgIG1hcGluZm9fdCogZGVsID0gbWk7CiAgICAgbWkgPSBtaS0+bmV4dDsKLSAgICBkbGZyZWUoZGVsKTsKKyAgICBmcmVlKGRlbCk7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5oIGIvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5oCmluZGV4IGNjY2QyZTMuLjkyNmIzNzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2RlYnVnX21hcGluZm8uaAorKysgYi9saWJjL2Jpb25pYy9kZWJ1Z19tYXBpbmZvLmgKQEAgLTMzLDggKzMzLDggQEAKIAogc3RydWN0IG1hcGluZm9fdCB7CiAgIHN0cnVjdCBtYXBpbmZvX3QqIG5leHQ7Ci0gIHVuc2lnbmVkIHN0YXJ0OwotICB1bnNpZ25lZCBlbmQ7CisgIHVpbnRwdHJfdCBzdGFydDsKKyAgdWludHB0cl90IGVuZDsKICAgY2hhciBuYW1lW107CiB9OwogCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kZWJ1Z19zdGFja3RyYWNlLmNwcCBiL2xpYmMvYmlvbmljL2RlYnVnX3N0YWNrdHJhY2UuY3BwCmluZGV4IDVkZGMwMGMuLmI4NmUyYWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2RlYnVnX3N0YWNrdHJhY2UuY3BwCisrKyBiL2xpYmMvYmlvbmljL2RlYnVnX3N0YWNrdHJhY2UuY3BwCkBAIC0zNSw4ICszNSwxNSBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCiAjaW5jbHVkZSAiZGVidWdfbWFwaW5mby5oIgorI2luY2x1ZGUgIm1hbGxvY19kZWJ1Z19kaXNhYmxlLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKIAorI2lmIGRlZmluZWQoX19MUDY0X18pCisjZGVmaW5lIFBBRF9QVFIgIjAxNiIgUFJJeFBUUgorI2Vsc2UKKyNkZWZpbmUgUEFEX1BUUiAiMDgiIFBSSXhQVFIKKyNlbmRpZgorCiAvKiBkZXBlbmRzIGhvdyB0aGUgc3lzdGVtIGluY2x1ZGVzIGRlZmluZSB0aGlzICovCiAjaWZkZWYgSEFWRV9VTldJTkRfQ09OVEVYVF9TVFJVQ1QKIHR5cGVkZWYgc3RydWN0IF9VbndpbmRfQ29udGV4dCBfX3Vud2luZF9jb250ZXh0OwpAQCAtNDQsMzAgKzUxLDM0IEBACiB0eXBlZGVmIF9VbndpbmRfQ29udGV4dCBfX3Vud2luZF9jb250ZXh0OwogI2VuZGlmCiAKLXN0YXRpYyBtYXBpbmZvX3QqIGdNYXBJbmZvID0gTlVMTDsKLXN0YXRpYyB2b2lkKiBnRGVtYW5nbGVyOworc3RhdGljIG1hcGluZm9fdCogZ19tYXBfaW5mbyA9IE5VTEw7CitzdGF0aWMgdm9pZCogZ19kZW1hbmdsZXI7CiB0eXBlZGVmIGNoYXIqICgqRGVtYW5nbGVyRm4pKGNvbnN0IGNoYXIqLCBjaGFyKiwgc2l6ZV90KiwgaW50Kik7Ci1zdGF0aWMgRGVtYW5nbGVyRm4gZ0RlbWFuZ2xlckZuID0gTlVMTDsKK3N0YXRpYyBEZW1hbmdsZXJGbiBnX2RlbWFuZ2xlcl9mbiA9IE5VTEw7CiAKIF9fTElCQ19ISURERU5fXyB2b2lkIGJhY2t0cmFjZV9zdGFydHVwKCkgewotICBnTWFwSW5mbyA9IG1hcGluZm9fY3JlYXRlKGdldHBpZCgpKTsKLSAgZ0RlbWFuZ2xlciA9IGRsb3BlbigibGliZ2NjZGVtYW5nbGUuc28iLCBSVExEX05PVyk7Ci0gIGlmIChnRGVtYW5nbGVyICE9IE5VTEwpIHsKLSAgICB2b2lkKiBzeW0gPSBkbHN5bShnRGVtYW5nbGVyLCAiX19jeGFfZGVtYW5nbGUiKTsKLSAgICBnRGVtYW5nbGVyRm4gPSByZWludGVycHJldF9jYXN0PERlbWFuZ2xlckZuPihzeW0pOworICBTY29wZWREaXNhYmxlRGVidWdDYWxscyBkaXNhYmxlOworCisgIGdfbWFwX2luZm8gPSBtYXBpbmZvX2NyZWF0ZShnZXRwaWQoKSk7CisgIGdfZGVtYW5nbGVyID0gZGxvcGVuKCJsaWJnY2NkZW1hbmdsZS5zbyIsIFJUTERfTk9XKTsKKyAgaWYgKGdfZGVtYW5nbGVyICE9IE5VTEwpIHsKKyAgICB2b2lkKiBzeW0gPSBkbHN5bShnX2RlbWFuZ2xlciwgIl9fY3hhX2RlbWFuZ2xlIik7CisgICAgZ19kZW1hbmdsZXJfZm4gPSByZWludGVycHJldF9jYXN0PERlbWFuZ2xlckZuPihzeW0pOwogICB9CiB9CiAKIF9fTElCQ19ISURERU5fXyB2b2lkIGJhY2t0cmFjZV9zaHV0ZG93bigpIHsKLSAgbWFwaW5mb19kZXN0cm95KGdNYXBJbmZvKTsKLSAgZGxjbG9zZShnRGVtYW5nbGVyKTsKKyAgU2NvcGVkRGlzYWJsZURlYnVnQ2FsbHMgZGlzYWJsZTsKKworICBtYXBpbmZvX2Rlc3Ryb3koZ19tYXBfaW5mbyk7CisgIGRsY2xvc2UoZ19kZW1hbmdsZXIpOwogfQogCiBzdGF0aWMgY2hhciogZGVtYW5nbGUoY29uc3QgY2hhciogc3ltYm9sKSB7Ci0gIGlmIChnRGVtYW5nbGVyRm4gPT0gTlVMTCkgeworICBpZiAoZ19kZW1hbmdsZXJfZm4gPT0gTlVMTCkgewogICAgIHJldHVybiBOVUxMOwogICB9Ci0gIHJldHVybiAoKmdEZW1hbmdsZXJGbikoc3ltYm9sLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgcmV0dXJuICgqZ19kZW1hbmdsZXJfZm4pKHN5bWJvbCwgTlVMTCwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0cnVjdCBzdGFja19jcmF3bF9zdGF0ZV90IHsKQEAgLTgxLDE4ICs5Miw2IEBACiAgIH0KIH07CiAKLSNpZiBkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9VbndpbmRfR2V0SVApCi0vLyBPbGRlciB2ZXJzaW9ucyBvZiBDbGFuZyBkb24ndCBwcm92aWRlIGEgZGVmaW5pdGlvbiBvZiBfVW53aW5kX0dldElQKCksIHNvCi0vLyB3ZSBpbmNsdWRlIGFuIGFwcHJvcHJpYXRlIHZlcnNpb24gb2Ygb3VyIG93bi4gT25jZSB3ZSBoYXZlIHVwZGF0ZWQgdG8KLS8vIENsYW5nIDMuNCwgdGhpcyBjb2RlIGNhbiBiZSByZW1vdmVkLgotc3RhdGljIF9faW5saW5lX18KLXVpbnRwdHJfdCBfVW53aW5kX0dldElQKHN0cnVjdCBfVW53aW5kX0NvbnRleHQgKl9fY29udGV4dCkgewotICB1aW50cHRyX3QgX19pcCA9IDA7Ci0gIF9VbndpbmRfVlJTX0dldChfX2NvbnRleHQsIF9VVlJTQ19DT1JFLCAxNSwgX1VWUlNEX1VJTlQzMiwgJl9faXApOwotICByZXR1cm4gX19pcCAmIH4weDE7Ci19Ci0jZW5kaWYKLQogc3RhdGljIF9VbndpbmRfUmVhc29uX0NvZGUgdHJhY2VfZnVuY3Rpb24oX191bndpbmRfY29udGV4dCogY29udGV4dCwgdm9pZCogYXJnKSB7CiAgIHN0YWNrX2NyYXdsX3N0YXRlX3QqIHN0YXRlID0gc3RhdGljX2Nhc3Q8c3RhY2tfY3Jhd2xfc3RhdGVfdCo+KGFyZyk7CiAKQEAgLTEwNCw3ICsxMDMsNyBAQAogICAgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKICAgfQogCi0jaWZkZWYgX19hcm1fXworI2lmIGRlZmluZWQoX19hcm1fXykKICAgLyoKICAgICogVGhlIGluc3RydWN0aW9uIHBvaW50ZXIgaXMgcG9pbnRpbmcgYXQgdGhlIGluc3RydWN0aW9uIGFmdGVyIHRoZSBibCh4KSwgYW5kCiAgICAqIHRoZSBfVW53aW5kX0JhY2t0cmFjZSByb3V0aW5lIGFscmVhZHkgbWFza3MgdGhlIFRodW1iIG1vZGUgaW5kaWNhdG9yIChMU0IKQEAgLTEyNywxMiArMTI2LDE2IEBACiB9CiAKIF9fTElCQ19ISURERU5fXyBpbnQgZ2V0X2JhY2t0cmFjZSh1aW50cHRyX3QqIGZyYW1lcywgc2l6ZV90IG1heF9kZXB0aCkgeworICBTY29wZWREaXNhYmxlRGVidWdDYWxscyBkaXNhYmxlOworCiAgIHN0YWNrX2NyYXdsX3N0YXRlX3Qgc3RhdGUoZnJhbWVzLCBtYXhfZGVwdGgpOwogICBfVW53aW5kX0JhY2t0cmFjZSh0cmFjZV9mdW5jdGlvbiwgJnN0YXRlKTsKICAgcmV0dXJuIHN0YXRlLmZyYW1lX2NvdW50OwogfQogCiBfX0xJQkNfSElEREVOX18gdm9pZCBsb2dfYmFja3RyYWNlKHVpbnRwdHJfdCogZnJhbWVzLCBzaXplX3QgZnJhbWVfY291bnQpIHsKKyAgU2NvcGVkRGlzYWJsZURlYnVnQ2FsbHMgZGlzYWJsZTsKKwogICB1aW50cHRyX3Qgc2VsZl9idFsxNl07CiAgIGlmIChmcmFtZXMgPT0gTlVMTCkgewogICAgIGZyYW1lX2NvdW50ID0gZ2V0X2JhY2t0cmFjZShzZWxmX2J0LCAxNik7CkBAIC0xNTIsOCArMTU1LDggQEAKICAgICAgIHN5bWJvbCA9IGluZm8uZGxpX3NuYW1lOwogICAgIH0KIAotICAgIHVpbnRwdHJfdCByZWxfcGM7Ci0gICAgY29uc3QgbWFwaW5mb190KiBtaSA9IChnTWFwSW5mbyAhPSBOVUxMKSA/IG1hcGluZm9fZmluZChnTWFwSW5mbywgZnJhbWVzW2ldLCAmcmVsX3BjKSA6IE5VTEw7CisgICAgdWludHB0cl90IHJlbF9wYyA9IG9mZnNldDsKKyAgICBjb25zdCBtYXBpbmZvX3QqIG1pID0gKGdfbWFwX2luZm8gIT0gTlVMTCkgPyBtYXBpbmZvX2ZpbmQoZ19tYXBfaW5mbywgZnJhbWVzW2ldLCAmcmVsX3BjKSA6IE5VTEw7CiAgICAgY29uc3QgY2hhciogc29uYW1lID0gKG1pICE9IE5VTEwpID8gbWktPm5hbWUgOiBpbmZvLmRsaV9mbmFtZTsKICAgICBpZiAoc29uYW1lID09IE5VTEwpIHsKICAgICAgIHNvbmFtZSA9ICI8dW5rbm93bj4iOwpAQCAtMTY0LDE5ICsxNjcsMTQgQEAKICAgICAgIGNvbnN0IGNoYXIqIGJlc3RfbmFtZSA9IChkZW1hbmdsZWRfc3ltYm9sICE9IE5VTEwpID8gZGVtYW5nbGVkX3N5bWJvbCA6IHN5bWJvbDsKIAogICAgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfRVJST1IsICJsaWJjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgIyUwMnpkICBwYyAlMCoiIFBSSXhQVFIgIiAgJXMgKCVzKyUiIFBSSXVQVFIgIikiLAotICAgICAgICAgICAgICAgICAgICAgICAgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oMiAqIHNpemVvZih2b2lkKikpLCByZWxfcGMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzb25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBiZXN0X25hbWUsIGZyYW1lc1tpXSAtIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICMlMDJ6ZCAgcGMgJSIgUEFEX1BUUiAiICAlcyAoJXMrJSIgUFJJdVBUUiAiKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpLCByZWxfcGMsIHNvbmFtZSwgYmVzdF9uYW1lLCBmcmFtZXNbaV0gLSBvZmZzZXQpOwogCiAgICAgICBmcmVlKGRlbWFuZ2xlZF9zeW1ib2wpOwogICAgIH0gZWxzZSB7CiAgICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19FUlJPUiwgImxpYmMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAjJTAyemQgIHBjICUwKiIgUFJJeFBUUiAiICAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PigyICogc2l6ZW9mKHZvaWQqKSksIHJlbF9wYywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICMlMDJ6ZCAgcGMgJSIgUEFEX1BUUiAiICAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBpLCByZWxfcGMsIHNvbmFtZSk7CiAgICAgfQogICB9CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kaXJlbnQuY3BwIGIvbGliYy9iaW9uaWMvZGlyZW50LmNwcAppbmRleCAwNTY1Njk4Li43YWJjN2YzIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9kaXJlbnQuY3BwCisrKyBiL2xpYmMvYmlvbmljL2RpcmVudC5jcHAKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJwcml2YXRlL0Vycm5vUmVzdG9yZXIuaCIKICNpbmNsdWRlICJwcml2YXRlL1Njb3BlZFB0aHJlYWRNdXRleExvY2tlci5oIgogCitleHRlcm4gIkMiIGludCBfX2dldGRlbnRzNjQodW5zaWduZWQgaW50LCBkaXJlbnQqLCB1bnNpZ25lZCBpbnQpOworCiBzdHJ1Y3QgRElSIHsKICAgaW50IGZkXzsKICAgc2l6ZV90IGF2YWlsYWJsZV9ieXRlc187CkBAIC04MSw3ICs4Myw3IEBACiB9CiAKIHN0YXRpYyBib29sIF9fZmlsbF9ESVIoRElSKiBkKSB7Ci0gIGludCByYyA9IFRFTVBfRkFJTFVSRV9SRVRSWShnZXRkZW50cyhkLT5mZF8sIGQtPmJ1ZmZfLCBzaXplb2YoZC0+YnVmZl8pKSk7CisgIGludCByYyA9IFRFTVBfRkFJTFVSRV9SRVRSWShfX2dldGRlbnRzNjQoZC0+ZmRfLCBkLT5idWZmXywgc2l6ZW9mKGQtPmJ1ZmZfKSkpOwogICBpZiAocmMgPD0gMCkgewogICAgIHJldHVybiBmYWxzZTsKICAgfQpAQCAtMTA1LDYgKzEwNyw3IEBACiAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmQtPm11dGV4Xyk7CiAgIHJldHVybiBfX3JlYWRkaXJfbG9ja2VkKGQpOwogfQorX19zdHJvbmdfYWxpYXMocmVhZGRpcjY0LCByZWFkZGlyKTsKIAogaW50IHJlYWRkaXJfcihESVIqIGQsIGRpcmVudCogZW50cnksIGRpcmVudCoqIHJlc3VsdCkgewogICBFcnJub1Jlc3RvcmVyIGVycm5vX3Jlc3RvcmVyOwpAQCAtMTI1LDYgKzEyOCw3IEBACiAgIH0KICAgcmV0dXJuIDA7CiB9CitfX3N0cm9uZ19hbGlhcyhyZWFkZGlyNjRfciwgcmVhZGRpcl9yKTsKIAogaW50IGNsb3NlZGlyKERJUiogZCkgewogICBpZiAoZCA9PSBOVUxMKSB7CkBAIC0xNDcsMyArMTUxLDQgQEAKIGludCBhbHBoYXNvcnQoY29uc3QgZGlyZW50KiogYSwgY29uc3QgZGlyZW50KiogYikgewogICByZXR1cm4gc3RyY29sbCgoKmEpLT5kX25hbWUsICgqYiktPmRfbmFtZSk7CiB9CitfX3N0cm9uZ19hbGlhcyhhbHBoYXNvcnQ2NCwgYWxwaGFzb3J0KTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYyBiL2xpYmMvYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAzZDNkMi4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxlbGYuaD4KLSNpbmNsdWRlIDxzeXMvYXV4di5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGxpbmsuaD4KLQotLyogbGQgcHJvdmlkZXMgdGhpcyB0byB1cyBpbiB0aGUgZGVmYXVsdCBsaW5rIHNjcmlwdCAqLwotZXh0ZXJuIHZvaWQqIF9fZXhlY3V0YWJsZV9zdGFydDsKLQotaW50IGRsX2l0ZXJhdGVfcGhkcihpbnQgKCpjYikoc3RydWN0IGRsX3BoZHJfaW5mbyogaW5mbywgc2l6ZV90IHNpemUsIHZvaWQqIGRhdGEpLCB2b2lkKiBkYXRhKSB7Ci0gICAgRWxmX0VoZHIqIGVoZHIgPSAoRWxmX0VoZHIqKSAmX19leGVjdXRhYmxlX3N0YXJ0OwotCi0gICAgLy8gVE9ETzogYWdhaW4sIGNvcGllZCBmcm9tIGxpbmtlci5jLiBGaW5kIGEgYmV0dGVyIGhvbWUgZm9yIHRoaXMgbGF0ZXIuCi0gICAgaWYgKGVoZHItPmVfaWRlbnRbRUlfTUFHMF0gIT0gRUxGTUFHMCkgcmV0dXJuIC0xOwotICAgIGlmIChlaGRyLT5lX2lkZW50W0VJX01BRzFdICE9IEVMRk1BRzEpIHJldHVybiAtMTsKLSAgICBpZiAoZWhkci0+ZV9pZGVudFtFSV9NQUcyXSAhPSBFTEZNQUcyKSByZXR1cm4gLTE7Ci0gICAgaWYgKGVoZHItPmVfaWRlbnRbRUlfTUFHM10gIT0gRUxGTUFHMykgcmV0dXJuIC0xOwotCi0gICAgLy8gRHluYW1pYyBiaW5hcmllcyBnZXQgdGhlaXIgZGxfaXRlcmF0ZV9waGRyIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyLCBidXQKLSAgICAvLyBzdGF0aWMgYmluYXJpZXMgZ2V0IHRoaXMuIFdlIGRvbid0IGhhdmUgYSBsaXN0IG9mIHNoYXJlZCBvYmplY3RzIHRvCi0gICAgLy8gaXRlcmF0ZSBvdmVyLCBzaW5jZSB0aGVyZSdzIHJlYWxseSBvbmx5IGEgc2luZ2xlIG1vbm9saXRoaWMgYmxvYiBvZgotICAgIC8vIGNvZGUvZGF0YSwgcGx1cyBvcHRpb25hbGx5IGEgVkRTTy4KLQotICAgIHN0cnVjdCBkbF9waGRyX2luZm8gZXhlX2luZm87Ci0gICAgZXhlX2luZm8uZGxwaV9hZGRyID0gMDsKLSAgICBleGVfaW5mby5kbHBpX25hbWUgPSBOVUxMOwotICAgIGV4ZV9pbmZvLmRscGlfcGhkciA9IChFbGZfUGhkciopICgodW5zaWduZWQgbG9uZykgZWhkciArIGVoZHItPmVfcGhvZmYpOwotICAgIGV4ZV9pbmZvLmRscGlfcGhudW0gPSBlaGRyLT5lX3BobnVtOwotCi0jaWZkZWYgQVRfU1lTSU5GT19FSERSCi0gICAgLy8gVHJ5IHRoZSBleGVjdXRhYmxlIGZpcnN0LgotICAgIGludCByYyA9IGNiKCZleGVfaW5mbywgc2l6ZW9mKGV4ZV9pbmZvKSwgZGF0YSk7Ci0gICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIC8vIFRyeSB0aGUgVkRTTyBpZiB0aGF0IGRpZG4ndCB3b3JrLgotICAgIEVsZl9FaGRyKiBlaGRyX3Zkc28gPSAoRWxmX0VoZHIqKSBnZXRhdXh2YWwoQVRfU1lTSU5GT19FSERSKTsKLSAgICBzdHJ1Y3QgZGxfcGhkcl9pbmZvIHZkc29faW5mbzsKLSAgICB2ZHNvX2luZm8uZGxwaV9hZGRyID0gMDsKLSAgICB2ZHNvX2luZm8uZGxwaV9uYW1lID0gTlVMTDsKLSAgICB2ZHNvX2luZm8uZGxwaV9waGRyID0gKEVsZl9QaGRyKikgKChjaGFyKikgZWhkcl92ZHNvICsgZWhkcl92ZHNvLT5lX3Bob2ZmKTsKLSAgICB2ZHNvX2luZm8uZGxwaV9waG51bSA9IGVoZHJfdmRzby0+ZV9waG51bTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZkc29faW5mby5kbHBpX3BobnVtOyArK2kpIHsKLSAgICAgICAgaWYgKHZkc29faW5mby5kbHBpX3BoZHJbaV0ucF90eXBlID09IFBUX0xPQUQpIHsKLSAgICAgICAgICAgIHZkc29faW5mby5kbHBpX2FkZHIgPSAoRWxmX0FkZHIpIGVoZHJfdmRzbyAtIHZkc29faW5mby5kbHBpX3BoZHJbaV0ucF92YWRkcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjYigmdmRzb19pbmZvLCBzaXplb2YodmRzb19pbmZvKSwgZGF0YSk7Ci0jZWxzZQotICAgIC8vIFRoZXJlJ3Mgb25seSB0aGUgZXhlY3V0YWJsZSB0byB0cnkuCi0gICAgcmV0dXJuIGNiKCZleGVfaW5mbywgc2l6ZW9mKGV4ZV9pbmZvKSwgZGF0YSk7Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuY3BwIGIvbGliYy9iaW9uaWMvZGxfaXRlcmF0ZV9waGRyX3N0YXRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU1YTdhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVsZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9hdXh2Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGluay5oPgorCisvKiBsZCBwcm92aWRlcyB0aGlzIHRvIHVzIGluIHRoZSBkZWZhdWx0IGxpbmsgc2NyaXB0ICovCitleHRlcm4gIkMiIHZvaWQqIF9fZXhlY3V0YWJsZV9zdGFydDsKKworaW50IGRsX2l0ZXJhdGVfcGhkcihpbnQgKCpjYikoc3RydWN0IGRsX3BoZHJfaW5mbyogaW5mbywgc2l6ZV90IHNpemUsIHZvaWQqIGRhdGEpLCB2b2lkKiBkYXRhKSB7CisgIEVsZlcoRWhkcikqIGVoZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoRWhkcikqPigmX19leGVjdXRhYmxlX3N0YXJ0KTsKKworICBpZiAobWVtY21wKGVoZHItPmVfaWRlbnQsIEVMRk1BRywgU0VMRk1BRykgIT0gMCkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIC8vIER5bmFtaWMgYmluYXJpZXMgZ2V0IHRoZWlyIGRsX2l0ZXJhdGVfcGhkciBmcm9tIHRoZSBkeW5hbWljIGxpbmtlciwgYnV0CisgIC8vIHN0YXRpYyBiaW5hcmllcyBnZXQgdGhpcy4gV2UgZG9uJ3QgaGF2ZSBhIGxpc3Qgb2Ygc2hhcmVkIG9iamVjdHMgdG8KKyAgLy8gaXRlcmF0ZSBvdmVyLCBzaW5jZSB0aGVyZSdzIHJlYWxseSBvbmx5IGEgc2luZ2xlIG1vbm9saXRoaWMgYmxvYiBvZgorICAvLyBjb2RlL2RhdGEsIHBsdXMgb3B0aW9uYWxseSBhIFZEU08uCisKKyAgc3RydWN0IGRsX3BoZHJfaW5mbyBleGVfaW5mbzsKKyAgZXhlX2luZm8uZGxwaV9hZGRyID0gMDsKKyAgZXhlX2luZm8uZGxwaV9uYW1lID0gTlVMTDsKKyAgZXhlX2luZm8uZGxwaV9waGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFBoZHIpKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVoZHIpICsgZWhkci0+ZV9waG9mZik7CisgIGV4ZV9pbmZvLmRscGlfcGhudW0gPSBlaGRyLT5lX3BobnVtOworCisjaWYgZGVmaW5lZChBVF9TWVNJTkZPX0VIRFIpCisgIC8vIFRyeSB0aGUgZXhlY3V0YWJsZSBmaXJzdC4KKyAgaW50IHJjID0gY2IoJmV4ZV9pbmZvLCBzaXplb2YoZXhlX2luZm8pLCBkYXRhKTsKKyAgaWYgKHJjICE9IDApIHsKKyAgICByZXR1cm4gcmM7CisgIH0KKworICAvLyBUcnkgdGhlIFZEU08gaWYgdGhhdCBkaWRuJ3Qgd29yay4KKyAgRWxmVyhFaGRyKSogZWhkcl92ZHNvID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEVoZHIpKj4oZ2V0YXV4dmFsKEFUX1NZU0lORk9fRUhEUikpOworICBzdHJ1Y3QgZGxfcGhkcl9pbmZvIHZkc29faW5mbzsKKyAgdmRzb19pbmZvLmRscGlfYWRkciA9IDA7CisgIHZkc29faW5mby5kbHBpX25hbWUgPSBOVUxMOworICB2ZHNvX2luZm8uZGxwaV9waGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFBoZHIpKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZWhkcl92ZHNvKSArIGVoZHJfdmRzby0+ZV9waG9mZik7CisgIHZkc29faW5mby5kbHBpX3BobnVtID0gZWhkcl92ZHNvLT5lX3BobnVtOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZkc29faW5mby5kbHBpX3BobnVtOyArK2kpIHsKKyAgICBpZiAodmRzb19pbmZvLmRscGlfcGhkcltpXS5wX3R5cGUgPT0gUFRfTE9BRCkgeworICAgICAgdmRzb19pbmZvLmRscGlfYWRkciA9IChFbGZXKEFkZHIpKSBlaGRyX3Zkc28gLSB2ZHNvX2luZm8uZGxwaV9waGRyW2ldLnBfdmFkZHI7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGNiKCZ2ZHNvX2luZm8sIHNpemVvZih2ZHNvX2luZm8pLCBkYXRhKTsKKyNlbHNlCisgIC8vIFRoZXJlJ3Mgb25seSB0aGUgZXhlY3V0YWJsZSB0byB0cnkuCisgIHJldHVybiBjYigmZXhlX2luZm8sIHNpemVvZihleGVfaW5mbyksIGRhdGEpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kbG1hbGxvYy5jIGIvbGliYy9iaW9uaWMvZGxtYWxsb2MuYwppbmRleCA2NmE4MjViLi5lODljNWQxIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9kbG1hbGxvYy5jCisrKyBiL2xpYmMvYmlvbmljL2RsbWFsbG9jLmMKQEAgLTE2LDcgKzE2LDcgQEAKIAogI2luY2x1ZGUgImRsbWFsbG9jLmgiCiAKLSNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19uYW1lX21lbS5oIgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3ByY3RsLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKIAogLy8gU2VuZCBkbG1hbGxvYyBlcnJvcnMgdG8gdGhlIGxvZy4KQEAgLTI2LDcgKzI2LDcgQEAKICNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgX19iaW9uaWNfaGVhcF9jb3JydXB0aW9uX2Vycm9yKF9fRlVOQ1RJT05fXykKICNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0scCkgX19iaW9uaWNfaGVhcF91c2FnZV9lcnJvcihfX0ZVTkNUSU9OX18sIHApCiAKLS8qIEJpb25pYyBuYW1lZCBhbm9ueW1vdXMgbWVtb3J5IGRlY2xhcmF0aW9ucyAqLworLy8gQmlvbmljIG5hbWVkIGFub255bW91cyBtZW1vcnkgZGVjbGFyYXRpb25zLgogc3RhdGljIHZvaWQqIG5hbWVkX2Fub255bW91c19tbWFwKHNpemVfdCBsZW5ndGgpOwogI2RlZmluZSBNTUFQKHMpIG5hbWVkX2Fub255bW91c19tbWFwKHMpCiAjZGVmaW5lIERJUkVDVF9NTUFQKHMpIG5hbWVkX2Fub255bW91c19tbWFwKHMpCkBAIC0zNCwxMCArMzQsNyBAQAogLy8gVWdseSBpbmNsdXNpb24gb2YgQyBmaWxlIHNvIHRoYXQgYmlvbmljIHNwZWNpZmljICNkZWZpbmVzIGNvbmZpZ3VyZSBkbG1hbGxvYy4KICNpbmNsdWRlICIuLi91cHN0cmVhbS1kbG1hbGxvYy9tYWxsb2MuYyIKIAotZXh0ZXJuIHZvaWQgKCpfX2NsZWFudXApKCk7Ci0KIHN0YXRpYyB2b2lkIF9fYmlvbmljX2hlYXBfY29ycnVwdGlvbl9lcnJvcihjb25zdCBjaGFyKiBmdW5jdGlvbikgewotICBfX2NsZWFudXAgPSBOVUxMOyAvLyBUaGUgaGVhcCBpcyBjb3JydXB0LiBXZSBjYW4gZm9yZ2V0IHRyeWluZyB0byBzaHV0IGRvd24gc3RkaW8uCiAgIF9fbGliY19mYXRhbCgiaGVhcCBjb3JydXB0aW9uIGRldGVjdGVkIGJ5ICVzIiwgZnVuY3Rpb24pOwogfQogCkBAIC00OSwxNCArNDYsMTEgQEAKICAgKigoaW50KiopIDB4ZGVhZGJhYWQpID0gKGludCopIGFkZHJlc3M7CiB9CiAKLXN0YXRpYyB2b2lkKiBuYW1lZF9hbm9ueW1vdXNfbW1hcChzaXplX3QgbGVuZ3RoKQotewotICAgIHZvaWQqIHJldDsKLSAgICByZXQgPSBtbWFwKE5VTEwsIGxlbmd0aCwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKLSAgICBpZiAocmV0ID09IE1BUF9GQUlMRUQpCi0gICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICBfX2Jpb25pY19uYW1lX21lbShyZXQsIGxlbmd0aCwgImxpYmNfbWFsbG9jIik7Ci0KLSAgICByZXR1cm4gcmV0Oworc3RhdGljIHZvaWQqIG5hbWVkX2Fub255bW91c19tbWFwKHNpemVfdCBsZW5ndGgpIHsKKyAgdm9pZCogbWFwID0gbW1hcChOVUxMLCBsZW5ndGgsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCk7CisgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgeworICAgIHJldHVybiBtYXA7CisgIH0KKyAgcHJjdGwoUFJfU0VUX1ZNQSwgUFJfU0VUX1ZNQV9BTk9OX05BTUUsIG1hcCwgbGVuZ3RoLCAibGliY19tYWxsb2MiKTsKKyAgcmV0dXJuIG1hcDsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RsbWFsbG9jLmggYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5oCmluZGV4IDcxYjNiZTguLjJmNTNjMWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2RsbWFsbG9jLmgKKysrIGIvbGliYy9iaW9uaWMvZGxtYWxsb2MuaApAQCAtMTcsNiArMTcsOSBAQAogI2lmbmRlZiBMSUJDX0JJT05JQ19ETE1BTExPQ19IXwogI2RlZmluZSBMSUJDX0JJT05JQ19ETE1BTExPQ19IXwogCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKIC8qIENvbmZpZ3VyZSBkbG1hbGxvYy4gKi8KICNkZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxCiAjZGVmaW5lIE1BTExPQ19JTlNQRUNUX0FMTCAxCkBAIC0yOSw2ICszMiwyNCBAQAogI2RlZmluZSBVU0VfU1BJTl9MT0NLUyAwCiAjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKDY0VSAqIDEwMjRVKQogCisjZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCisKKyNpZiAhZGVmaW5lZChfX0xQNjRfXykKKy8qIGRsbWFsbG9jX3VzYWJsZV9zaXplIGFuZCBkbG1hbGxvYyB3ZXJlIGV4cG9zZWQgaW4gdGhlIE5ESyBhbmQgc29tZQorICogYXBwcyBhY3R1YWxseSB1c2VkIHRoZW0uIFJlbmFtZSB0aGVzZSBmdW5jdGlvbnMgb3V0IG9mIHRoZSB3YXkKKyAqIGZvciAzMiBiaXQgYXJjaGl0ZWN0dXJlcyBzbyB0aGF0IG5ka19jcnVmdC5jcHAgY2FuIGV4cG9zZQorICogY29tcGF0aWJpbGl0eSBzaGltcyB3aXRoIHRoZXNlIG5hbWVzLgorICovCisjZGVmaW5lIGRsbWFsbG9jX3VzYWJsZV9zaXplIGRsbWFsbG9jX3VzYWJsZV9zaXplX3JlYWwKKyNkZWZpbmUgZGxtYWxsb2MgZGxtYWxsb2NfcmVhbAorI2VuZGlmCisKKy8qIEV4cG9ydCB0d28gc3ltYm9scyB1c2VkIGJ5IHRoZSBWTS4gKi8KK19fQkVHSU5fREVDTFMKK2ludCBkbG1hbGxvY190cmltKHNpemVfdCkgX19MSUJDX0FCSV9QVUJMSUNfXzsKK3ZvaWQgZGxtYWxsb2NfaW5zcGVjdF9hbGwodm9pZCAoKmhhbmRsZXIpKHZvaWQqLCB2b2lkKiwgc2l6ZV90LCB2b2lkKiksIHZvaWQqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworX19FTkRfREVDTFMKKwogLyogSW5jbHVkZSB0aGUgcHJvcGVyIGRlZmluaXRpb25zLiAqLwogI2luY2x1ZGUgIi4uL3Vwc3RyZWFtLWRsbWFsbG9jL21hbGxvYy5oIgogCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9mZHByaW50Zi5jIGIvbGliYy9iaW9uaWMvZmRwcmludGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFkMDVhZC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9mZHByaW50Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotaW50IHZmZHByaW50ZihpbnQgZmQsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IGZvcm1hdCwgX192YV9saXN0IGFwKQotewotCWNoYXIgKmJ1Zj0wOwotCWludCByZXQ7Ci0JcmV0ID0gdmFzcHJpbnRmKCZidWYsIGZvcm1hdCwgYXApOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVuZDsKLQotCXJldCA9IHdyaXRlKGZkLCBidWYsIHJldCk7Ci0JZnJlZShidWYpOwotZW5kOgotCXJldHVybiByZXQ7Ci19Ci0KLWludCBmZHByaW50ZihpbnQgZmQsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IGZvcm1hdCwgLi4uKQotewotCV9fdmFfbGlzdCBhcDsKLQlpbnQgcmV0OwotCi0JdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0JcmV0ID0gdmZkcHJpbnRmKGZkLCBmb3JtYXQsIGFwKTsKLQl2YV9lbmQoYXApOwotCi0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Zsb2NrZmlsZS5jIGIvbGliYy9iaW9uaWMvZmxvY2tmaWxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2OGZiMTUuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvZmxvY2tmaWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qIGltcGxlbWVudCBmbG9ja2ZpbGUoKSwgZnRyeWxvY2tmaWxlKCkgYW5kIGZ1bmxvY2tmaWxlKCkKLSAqCi0gKiB3ZSBjYW4ndCB1c2UgdGhlIE9wZW5CU0QgaW1wbGVtZW50YXRpb24gd2hpY2ggdXNlcyBrZXJuZWwtc3BlY2lmaWMKLSAqIEFQSXMgbm90IGF2YWlsYWJsZSBvbiBMaW51eC4KLSAqCi0gKiBJbnN0ZWFkLCB3ZSB1c2UgYSBwdGhyZWFkX211dGV4X3Qgd2l0aGluIHRoZSBGSUxFKiBpbnRlcm5hbCBzdGF0ZS4KLSAqIFNlZSBmaWxlZXh0LmggZm9yIGRldGFpbHMuCi0gKgotICogdGhlIGJlaGF2aW91ciwgaWYgZmNsb3NlKCkgaXMgY2FsbGVkIHdoaWxlIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBmaWxlIGlzIGxvY2tlZCBpcyB0b3RhbGx5IHVuZGVmaW5lZC4KLSAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJmaWxlZXh0LmgiCi0KLQotdm9pZAotZmxvY2tmaWxlKEZJTEUgKiBmcCkKLXsKLSAgICBpZiAoZnAgIT0gTlVMTCkgewotICAgICAgICBfRkxPQ0tfTE9DSyhmcCk7Ci0gICAgfQotfQotCi0KLWludAotZnRyeWxvY2tmaWxlKEZJTEUgKmZwKQotewotICAgIC8qIFRoZSBzcGVjaWZpY2F0aW9uIGZvciBmdHJ5bG9ja2ZpbGUoKSBzYXlzIGl0IHJldHVybnMgMCBvbiBzdWNjZXNzLAotICAgICAqIG9yIG5vbi16ZXJvIG9uIGVycm9yLiBTbyByZXR1cm4gYW4gZXJybm8gY29kZSBkaXJlY3RseSBvbiBlcnJvci4KLSAgICAgKi8KLSAgICBpbnQgIHJldCA9IEVJTlZBTDsKLQotICAgIGlmIChmcCAhPSBOVUxMKSB7Ci0gICAgICAgIHJldCA9IF9GTE9DS19UUllMT0NLKGZwKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotdm9pZAotZnVubG9ja2ZpbGUoRklMRSAqIGZwKQotewotICAgIGlmIChmcCAhPSBOVUxMKSB7Ci0gICAgICAgIF9GTE9DS19VTkxPQ0soZnApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Zsb2NrZmlsZS5jcHAgYi9saWJjL2Jpb25pYy9mbG9ja2ZpbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzODFlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9mbG9ja2ZpbGUuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxvY2FsLmgiCisKKy8vIFdlIGNhbid0IHVzZSB0aGUgT3BlbkJTRCBpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIGtlcm5lbC1zcGVjaWZpYworLy8gQVBJcyBub3QgYXZhaWxhYmxlIG9uIExpbnV4LiBJbnN0ZWFkIHdlIHVzZSBhIHB0aHJlYWRfbXV0ZXhfdCB3aXRoaW4KKy8vIHN0cnVjdCBfX3NmaWxlZXh0IChzZWUgZmlsZWV4dC5oKS4KKwordm9pZCBmbG9ja2ZpbGUoRklMRSogZnApIHsKKyAgaWYgKGZwICE9IE5VTEwpIHsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJl9GTE9DSyhmcCkpOworICB9Cit9CisKK2ludCBmdHJ5bG9ja2ZpbGUoRklMRSogZnApIHsKKyAgLy8gVGhlIHNwZWNpZmljYXRpb24gZm9yIGZ0cnlsb2NrZmlsZSgpIHNheXMgaXQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsCisgIC8vIG9yIG5vbi16ZXJvIG9uIGVycm9yLiBTbyByZXR1cm4gYW4gZXJybm8gY29kZSBkaXJlY3RseSBvbiBlcnJvci4KKyAgaWYgKGZwID09IE5VTEwpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisKKyAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmX0ZMT0NLKGZwKSk7Cit9CisKK3ZvaWQgZnVubG9ja2ZpbGUoRklMRSogZnApIHsKKyAgaWYgKGZwICE9IE5VTEwpIHsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX0ZMT0NLKGZwKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2ZvcmsuY3BwIGIvbGliYy9iaW9uaWMvZm9yay5jcHAKaW5kZXggOWZhNWZjZi4uNmNmYzczNiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvZm9yay5jcHAKKysrIGIvbGliYy9iaW9uaWMvZm9yay5jcHAKQEAgLTI5LDI4ICsyOSwyOCBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAKLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKIAorI2RlZmluZSBGT1JLX0ZMQUdTIChDTE9ORV9DSElMRF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8IFNJR0NITEQpCisKIGludCBmb3JrKCkgewotICAvLyBQT1NJWCBtYW5kYXRlcyB0aGF0IHRoZSB0aW1lcnMgb2YgYSBmb3JrIGNoaWxkIHByb2Nlc3MgYmUKLSAgLy8gZGlzYXJtZWQsIGJ1dCBub3QgZGVzdHJveWVkLiBUbyBhdm9pZCBhIHJhY2UgY29uZGl0aW9uLCB3ZSdyZQotICAvLyBnb2luZyB0byBzdG9wIGFsbCB0aW1lcnMgbm93LCBhbmQgb25seSByZS1zdGFydCB0aGVtIGluIGNhc2UKLSAgLy8gb2YgZXJyb3IsIG9yIGluIHRoZSBwYXJlbnQgcHJvY2VzcwotICBfX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AoMSk7CiAgIF9fYmlvbmljX2F0Zm9ya19ydW5fcHJlcGFyZSgpOwogCiAgIHB0aHJlYWRfaW50ZXJuYWxfdCogc2VsZiA9IF9fZ2V0X3RocmVhZCgpOwotICBpbnQgZmxhZ3MgPSBDTE9ORV9DSElMRF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8IFNJR0NITEQ7CisKKyAgLy8gUmVtZW1iZXIgdGhlIHBhcmVudCBwaWQgYW5kIGludmFsaWRhdGUgdGhlIGNhY2hlZCB2YWx1ZSB3aGlsZSB3ZSBmb3JrLgorICBwaWRfdCBwYXJlbnRfcGlkID0gc2VsZi0+aW52YWxpZGF0ZV9jYWNoZWRfcGlkKCk7CisKICNpZiBkZWZpbmVkKF9feDg2XzY0X18pIC8vIHN5c19jbG9uZSdzIGxhc3QgdHdvIGFyZ3VtZW50cyBhcmUgZmxpcHBlZCBvbiB4ODYtNjQuCi0gIGludCByZXN1bHQgPSBzeXNjYWxsKF9fTlJfY2xvbmUsIGZsYWdzLCBOVUxMLCBOVUxMLCAmKHNlbGYtPnRpZCksIE5VTEwpOworICBpbnQgcmVzdWx0ID0gc3lzY2FsbChfX05SX2Nsb25lLCBGT1JLX0ZMQUdTLCBOVUxMLCBOVUxMLCAmKHNlbGYtPnRpZCksIE5VTEwpOwogI2Vsc2UKLSAgaW50IHJlc3VsdCA9IHN5c2NhbGwoX19OUl9jbG9uZSwgZmxhZ3MsIE5VTEwsIE5VTEwsIE5VTEwsICYoc2VsZi0+dGlkKSk7CisgIGludCByZXN1bHQgPSBzeXNjYWxsKF9fTlJfY2xvbmUsIEZPUktfRkxBR1MsIE5VTEwsIE5VTEwsIE5VTEwsICYoc2VsZi0+dGlkKSk7CiAjZW5kaWYKICAgaWYgKHJlc3VsdCA9PSAwKSB7CisgICAgc2VsZi0+c2V0X2NhY2hlZF9waWQoZ2V0dGlkKCkpOwogICAgIF9fYmlvbmljX2F0Zm9ya19ydW5fY2hpbGQoKTsKICAgfSBlbHNlIHsKLSAgICBfX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AoMCk7CisgICAgc2VsZi0+c2V0X2NhY2hlZF9waWQocGFyZW50X3BpZCk7CiAgICAgX19iaW9uaWNfYXRmb3JrX3J1bl9wYXJlbnQoKTsKICAgfQogICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZnBjbGFzc2lmeS5jcHAgYi9saWJjL2Jpb25pYy9mcGNsYXNzaWZ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWZmOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZnBjbGFzc2lmeS5jcHAKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaWVlZS5oPgorCisvLyBUaGVzZSBhcmVuJ3QgZGVjbGFyZWQgaW4gb3VyIDxtYXRoLmg+LgorZXh0ZXJuICJDIiBpbnQgX19pc2luZihkb3VibGUpOworZXh0ZXJuICJDIiBpbnQgX19pc25hbihkb3VibGUpOworCit1bmlvbiBmbG9hdF91IHsKKyAgZmxvYXQgZjsKKyAgaWVlZV9zaW5nbGUgYml0czsKK307CisKK3VuaW9uIGRvdWJsZV91IHsKKyAgZG91YmxlIGQ7CisgIGllZWVfZG91YmxlIGJpdHM7Cit9OworCitpbnQgX19mcGNsYXNzaWZ5ZChkb3VibGUgZCkgeworICBkb3VibGVfdSB1OworICB1LmQgPSBkOworICBpZiAodS5iaXRzLmRibF9leHAgPT0gMCkgeworICAgIHJldHVybiAoKHUuYml0cy5kYmxfZnJhY2wgfCB1LmJpdHMuZGJsX2ZyYWNoKSA9PSAwKSA/IEZQX1pFUk8gOiBGUF9TVUJOT1JNQUw7CisgIH0KKyAgaWYgKHUuYml0cy5kYmxfZXhwID09IERCTF9FWFBfSU5GTkFOKSB7CisgICAgcmV0dXJuICgodS5iaXRzLmRibF9mcmFjbCB8IHUuYml0cy5kYmxfZnJhY2gpID09IDApID8gRlBfSU5GSU5JVEUgOiBGUF9OQU47CisgIH0KKyAgcmV0dXJuIEZQX05PUk1BTDsKK30KK19fc3Ryb25nX2FsaWFzKF9fZnBjbGFzc2lmeSwgX19mcGNsYXNzaWZ5ZCk7IC8vIGdsaWJjIHVzZXMgX19mcGNsYXNzaWZ5LCBCU0QgX19mcGNsYXNzaWZ5ZC4KKworaW50IF9fZnBjbGFzc2lmeWYoZmxvYXQgZikgeworICBmbG9hdF91IHU7CisgIHUuZiA9IGY7CisgIGlmICh1LmJpdHMuc25nX2V4cCA9PSAwKSB7CisgICAgcmV0dXJuICh1LmJpdHMuc25nX2ZyYWMgPT0gMCkgPyBGUF9aRVJPIDogRlBfU1VCTk9STUFMOworICB9CisgIGlmICh1LmJpdHMuc25nX2V4cCA9PSBTTkdfRVhQX0lORk5BTikgeworICAgIHJldHVybiAodS5iaXRzLnNuZ19mcmFjID09IDApID8gRlBfSU5GSU5JVEUgOiBGUF9OQU47CisgIH0KKyAgcmV0dXJuIEZQX05PUk1BTDsKK30KKworaW50IF9faXNpbmYoZG91YmxlIGQpIHsKKyAgcmV0dXJuIChfX2ZwY2xhc3NpZnlkKGQpID09IEZQX0lORklOSVRFKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzaW5mLCBfX2lzaW5mKTsKKworaW50IF9faXNpbmZmKGZsb2F0IGYpIHsKKyAgcmV0dXJuIChfX2ZwY2xhc3NpZnlmKGYpID09IEZQX0lORklOSVRFKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzaW5mZiwgX19pc2luZmYpOworCitpbnQgX19pc25hbihkb3VibGUgZCkgeworICByZXR1cm4gKF9fZnBjbGFzc2lmeWQoZCkgPT0gRlBfTkFOKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzbmFuLCBfX2lzbmFuKTsKKworaW50IF9faXNuYW5mKGZsb2F0IGYpIHsKKyAgcmV0dXJuIChfX2ZwY2xhc3NpZnlmKGYpID09IEZQX05BTik7Cit9CitfX3N0cm9uZ19hbGlhcyhpc25hbmYsIF9faXNuYW5mKTsKKworaW50IF9faXNmaW5pdGUoZG91YmxlIGQpIHsKKyAgaW50IHR5cGUgPSBfX2ZwY2xhc3NpZnlkKGQpOworICByZXR1cm4gKCh0eXBlICE9IEZQX05BTikgJiYgKHR5cGUgIT0gRlBfSU5GSU5JVEUpKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzZmluaXRlLCBfX2lzZmluaXRlKTsKKworaW50IF9faXNmaW5pdGVmKGZsb2F0IGYpIHsKKyAgaW50IHR5cGUgPSBfX2ZwY2xhc3NpZnlmKGYpOworICByZXR1cm4gKCh0eXBlICE9IEZQX05BTikgJiYgKHR5cGUgIT0gRlBfSU5GSU5JVEUpKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzZmluaXRlZiwgX19pc2Zpbml0ZWYpOworCitpbnQgX19pc25vcm1hbChkb3VibGUgZCkgeworICByZXR1cm4gKF9fZnBjbGFzc2lmeWQoZCkgPT0gRlBfTk9STUFMKTsKK30KK19fc3Ryb25nX2FsaWFzKGlzbm9ybWFsLCBfX2lzbm9ybWFsKTsKKworaW50IF9faXNub3JtYWxmKGZsb2F0IGYpIHsKKyAgcmV0dXJuIChfX2ZwY2xhc3NpZnlmKGYpID09IEZQX05PUk1BTCk7Cit9CitfX3N0cm9uZ19hbGlhcyhpc25vcm1hbGYsIF9faXNub3JtYWxmKTsKKworI2lmIF9fTFA2NF9fCisKKy8vIExQNjQgdXNlcyAxMjgtYml0IGxvbmcgZG91Ymxlcy4KKwordW5pb24gbG9uZ19kb3VibGVfdSB7CisgIGxvbmcgZG91YmxlIGxkOworICBpZWVlX2V4dCBiaXRzOworfTsKKworI2RlZmluZSB6ZXJvX2ZyYWMoYikgKChiLmV4dF9mcmFjbCB8IGIuZXh0X2ZyYWNsbSB8IGIuZXh0X2ZyYWNobSB8IGIuZXh0X2ZyYWNoKSA9PSAwKQorCitpbnQgX19mcGNsYXNzaWZ5bChsb25nIGRvdWJsZSBsZCkgeworICBsb25nX2RvdWJsZV91IHU7CisgIHUubGQgPSBsZDsKKyAgaWYgKHUuYml0cy5leHRfZXhwID09IDApIHsKKyAgICByZXR1cm4gemVyb19mcmFjKHUuYml0cykgPyBGUF9aRVJPIDogRlBfU1VCTk9STUFMOworICB9CisgIGlmICh1LmJpdHMuZXh0X2V4cCA9PSBFWFRfRVhQX0lORk5BTikgeworICAgIHJldHVybiB6ZXJvX2ZyYWModS5iaXRzKSA/IEZQX0lORklOSVRFIDogRlBfTkFOOworICB9CisgIHJldHVybiBGUF9OT1JNQUw7Cit9CisKK2ludCBfX2lzaW5mbChsb25nIGRvdWJsZSBsZCkgeworICByZXR1cm4gKF9fZnBjbGFzc2lmeWwobGQpID09IEZQX0lORklOSVRFKTsKK30KKworaW50IF9faXNuYW5sKGxvbmcgZG91YmxlIGxkKSB7CisgIHJldHVybiAoX19mcGNsYXNzaWZ5bChsZCkgPT0gRlBfTkFOKTsKK30KKworaW50IF9faXNmaW5pdGVsKGxvbmcgZG91YmxlIGxkKSB7CisgIGludCB0eXBlID0gX19mcGNsYXNzaWZ5bChsZCk7CisgIHJldHVybiAoKHR5cGUgIT0gRlBfTkFOKSAmJiAodHlwZSAhPSBGUF9JTkZJTklURSkpOworfQorCitpbnQgX19pc25vcm1hbGwobG9uZyBkb3VibGUgbGQpIHsKKyAgcmV0dXJuIChfX2ZwY2xhc3NpZnlsKGxkKSA9PSBGUF9OT1JNQUwpOworfQorCisjZWxzZQorCisvLyBMUDMyIHVzZXMgZG91YmxlIGFzIGxvbmcgZG91YmxlLgorCitfX3N0cm9uZ19hbGlhcyhfX2ZwY2xhc3NpZnlsLCBfX2ZwY2xhc3NpZnkpOworX19zdHJvbmdfYWxpYXMoX19pc2luZmwsIF9faXNpbmYpOworX19zdHJvbmdfYWxpYXMoX19pc25hbmwsIF9faXNuYW4pOworX19zdHJvbmdfYWxpYXMoX19pc2Zpbml0ZWwsIF9faXNmaW5pdGUpOworX19zdHJvbmdfYWxpYXMoX19pc25vcm1hbGwsIF9faXNub3JtYWwpOworCisjZW5kaWYKKworX19zdHJvbmdfYWxpYXMoaXNpbmZsLCBfX2lzaW5mbCk7CitfX3N0cm9uZ19hbGlhcyhpc25hbmwsIF9faXNuYW5sKTsKK19fc3Ryb25nX2FsaWFzKGlzZmluaXRlbCwgX19pc2Zpbml0ZWwpOworX19zdHJvbmdfYWxpYXMoaXNub3JtYWxsLCBfX2lzbm9ybWFsbCk7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9mdGltZS5jIGIvbGliYy9iaW9uaWMvZnRpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUxMzU5My4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9mdGltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN5cy90aW1lYi5oPgotCi1pbnQgZnRpbWUoc3RydWN0IHRpbWViICp0YikKLXsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgdHY7Ci0gICAgc3RydWN0IHRpbWV6b25lIHR6OwotCi0gICAgaWYgKGdldHRpbWVvZmRheSAoJnR2LCAmdHopIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgdGItPnRpbWUgICAgPSB0di50dl9zZWM7Ci0gICAgdGItPm1pbGxpdG0gPSAodHYudHZfdXNlYyArIDUwMCkgLyAxMDAwOwotCi0gICAgaWYgKHRiLT5taWxsaXRtID09IDEwMDApIHsKLSAgICAgICAgKyt0Yi0+dGltZTsKLSAgICAgICAgdGItPm1pbGxpdG0gPSAwOwotICAgIH0KLSAgICB0Yi0+dGltZXpvbmUgPSB0ei50el9taW51dGVzd2VzdDsKLSAgICB0Yi0+ZHN0ZmxhZyAgPSB0ei50el9kc3R0aW1lOwotCi0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9mdG9rLmMgYi9saWJjL2Jpb25pYy9mdG9rLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOGJkMGEuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvZnRvay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy9pcGMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotCi1rZXlfdCAgZnRvayhjb25zdCBjaGFyKiAgcGF0aCwgaW50ICBpZCkKLXsKLSAgICBzdHJ1Y3Qgc3RhdCAgIHN0OwotCi0gICAgaWYgKCBsc3RhdChwYXRoLCAmc3QpIDwgMCApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHJldHVybiAoa2V5X3QpKCAoc3Quc3RfaW5vICYgMHhmZmZmKSB8ICgoc3Quc3RfZGV2ICYgMHhmZikgPDwgMTYpIHwgKChpZCAmIDI1NSkgPDwgMjQpICk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9mdHMuYyBiL2xpYmMvYmlvbmljL2Z0cy5jCmluZGV4IGM3NzcwYjYuLmM0OTFiNmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2Z0cy5jCisrKyBiL2xpYmMvYmlvbmljL2Z0cy5jCkBAIC0xLDQgKzEsNCBAQAotLyoJJE9wZW5CU0Q6IGZ0cy5jLHYgMS40MyAyMDA5LzA4LzI3IDE2OjE5OjI3IG1pbGxlcnQgRXhwICQJKi8KKy8qCSRPcGVuQlNEOiBmdHMuYyx2IDEuNDYgMjAxNC8wNS8yNSAxNzo0NzowNCB0ZWR1IEV4cCAkCSovCiAKIC8qLQogICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzLCAxOTk0CkBAIC0zNiwxMiArMzYsMTEgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8ZnRzLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNkZWZpbmUgTUFYKGEsYikgKChhKT4oYik/KGEpOihiKSkKLQogc3RhdGljIEZUU0VOVAkqZnRzX2FsbG9jKEZUUyAqLCBjaGFyICosIHNpemVfdCk7CiBzdGF0aWMgRlRTRU5UCSpmdHNfYnVpbGQoRlRTICosIGludCk7CiBzdGF0aWMgdm9pZAkgZnRzX2xmcmVlKEZUU0VOVCAqKTsKQEAgLTUzLDYgKzUyLDkgQEAKIHN0YXRpYyB1X3Nob3J0CSBmdHNfc3RhdChGVFMgKiwgRlRTRU5UICosIGludCk7CiBzdGF0aWMgaW50CSBmdHNfc2FmZV9jaGFuZ2VkaXIoRlRTICosIEZUU0VOVCAqLCBpbnQsIGNoYXIgKik7CiAKKyNkZWZpbmUgQUxJR05CWVRFUyAoc2l6ZW9mKHVpbnRwdHJfdCkgLSAxKQorI2RlZmluZSBBTElHTihwKSAoKCh1aW50cHRyX3QpKHApICsgQUxJR05CWVRFUykgJn4gQUxJR05CWVRFUykKKwogI2RlZmluZQlJU0RPVChhKQkoYVswXSA9PSAnLicgJiYgKCFhWzFdIHx8IChhWzFdID09ICcuJyAmJiAhYVsyXSkpKQogCiAjZGVmaW5lCUNMUihvcHQpCShzcC0+ZnRzX29wdGlvbnMgJj0gfihvcHQpKQpAQCAtOTYsNyArOTgsNyBAQAogCSAqIFN0YXJ0IG91dCB3aXRoIDFLIG9mIHBhdGggc3BhY2UsIGFuZCBlbm91Z2gsIGluIGFueSBjYXNlLAogCSAqIHRvIGhvbGQgdGhlIHVzZXIncyBwYXRocy4KIAkgKi8KLQlpZiAoZnRzX3BhbGxvYyhzcCwgTUFYKGZ0c19tYXhhcmdsZW4oYXJndiksIE1BWFBBVEhMRU4pKSkKKwlpZiAoZnRzX3BhbGxvYyhzcCwgTUFYKGZ0c19tYXhhcmdsZW4oYXJndiksIFBBVEhfTUFYKSkpCiAJCWdvdG8gbWVtMTsKIAogCS8qIEFsbG9jYXRlL2luaXRpYWxpemUgcm9vdCdzIHBhcmVudC4gKi8KQEAgLTQ0Niw3ICs0NDgsNyBAQAogICovCiAvKiBBUkdTVVNFRCAqLwogaW50Ci1mdHNfc2V0KEZUUyAqc3AsIEZUU0VOVCAqcCwgaW50IGluc3RyKQorZnRzX3NldChGVFMgKnNwIF9fdW51c2VkLCBGVFNFTlQgKnAsIGludCBpbnN0cikKIHsKIAlpZiAoaW5zdHIgJiYgaW5zdHIgIT0gRlRTX0FHQUlOICYmIGluc3RyICE9IEZUU19GT0xMT1cgJiYKIAkgICAgaW5zdHIgIT0gRlRTX05PSU5TVFIgJiYgaW5zdHIgIT0gRlRTX1NLSVApIHsKQEAgLTYzNiw3ICs2MzgsNyBAQAogCW1heGxlbiA9IHNwLT5mdHNfcGF0aGxlbiAtIGxlbjsKIAogCS8qCi0JICogZnRzX2xldmVsIGlzIGEgc2hvcnQgc28gd2UgbXVzdCBwcmV2ZW50IGl0IGZyb20gd3JhcHBpbmcKKwkgKiBmdHNfbGV2ZWwgaXMgc2lnbmVkIHNvIHdlIG11c3QgcHJldmVudCBpdCBmcm9tIHdyYXBwaW5nCiAJICogYXJvdW5kIHRvIEZUU19ST09UTEVWRUwgYW5kIEZUU19ST09UUEFSRU5UTEVWRUwuCiAJICovCiAJbGV2ZWwgPSBjdXItPmZ0c19sZXZlbDsKQEAgLTkwNywxMCArOTA5LDkgQEAKIAlsZW4gPSBzaXplb2YoRlRTRU5UKSArIG5hbWVsZW47CiAJaWYgKCFJU1NFVChGVFNfTk9TVEFUKSkKIAkJbGVuICs9IHNpemVvZihzdHJ1Y3Qgc3RhdCkgKyBBTElHTkJZVEVTOwotCWlmICgocCA9IG1hbGxvYyhsZW4pKSA9PSBOVUxMKQorCWlmICgocCA9IGNhbGxvYygxLCBsZW4pKSA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCi0JbWVtc2V0KHAsIDAsIGxlbik7CiAJcC0+ZnRzX3BhdGggPSBzcC0+ZnRzX3BhdGg7CiAJcC0+ZnRzX25hbWVsZW4gPSBuYW1lbGVuOwogCXAtPmZ0c19pbnN0ciA9IEZUU19OT0lOU1RSOwpAQCAtOTM1LDcgKzkzNiw3IEBACiAKIC8qCiAgKiBBbGxvdyBlc3NlbnRpYWxseSB1bmxpbWl0ZWQgcGF0aHM7IGZpbmQsIHJtLCBscyBzaG91bGQgYWxsIHdvcmsgb24gYW55IHRyZWUuCi0gKiBNb3N0IHN5c3RlbXMgd2lsbCBhbGxvdyBjcmVhdGlvbiBvZiBwYXRocyBtdWNoIGxvbmdlciB0aGFuIE1BWFBBVEhMRU4sIGV2ZW4KKyAqIE1vc3Qgc3lzdGVtcyB3aWxsIGFsbG93IGNyZWF0aW9uIG9mIHBhdGhzIG11Y2ggbG9uZ2VyIHRoYW4gUEFUSF9NQVgsIGV2ZW4KICAqIHRob3VnaCB0aGUga2VybmVsIHdvbid0IHJlc29sdmUgdGhlbS4gIEFkZCB0aGUgc2l6ZSAobm90IGp1c3Qgd2hhdCdzIG5lZWRlZCkKICAqIHBsdXMgMjU2IGJ5dGVzIHNvIGRvbid0IHJlYWxsb2MgdGhlIHBhdGggMiBieXRlcyBhdCBhIHRpbWUuCiAgKi8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2dldGF1eHZhbC5jcHAgYi9saWJjL2Jpb25pYy9nZXRhdXh2YWwuY3BwCmluZGV4IDNlZTMxZDYuLmJjNDE4MjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2dldGF1eHZhbC5jcHAKKysrIGIvbGliYy9iaW9uaWMvZ2V0YXV4dmFsLmNwcApAQCAtMzIsMTAgKzMyLDEwIEBACiAjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXV4di5oPgogI2luY2x1ZGUgPGVsZi5oPgogCi1fX0xJQkNfSElEREVOX18gRWxmX2F1eHZfdCogX19saWJjX2F1eHYgPSBOVUxMOworX19MSUJDX0hJRERFTl9fIEVsZlcoYXV4dl90KSogX19saWJjX2F1eHYgPSBOVUxMOwogCiBleHRlcm4gIkMiIHVuc2lnbmVkIGxvbmcgaW50IGdldGF1eHZhbCh1bnNpZ25lZCBsb25nIGludCB0eXBlKSB7Ci0gIGZvciAoRWxmX2F1eHZfdCogdiA9IF9fbGliY19hdXh2OyB2LT5hX3R5cGUgIT0gQVRfTlVMTDsgKyt2KSB7CisgIGZvciAoRWxmVyhhdXh2X3QpKiB2ID0gX19saWJjX2F1eHY7IHYtPmFfdHlwZSAhPSBBVF9OVUxMOyArK3YpIHsKICAgICBpZiAodi0+YV90eXBlID09IHR5cGUpIHsKICAgICAgIHJldHVybiB2LT5hX3VuLmFfdmFsOwogICAgIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2dldGR0YWJsZXNpemUuYyBiL2xpYmMvYmlvbmljL2dldGR0YWJsZXNpemUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzMTVhNS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9nZXRkdGFibGVzaXplLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+Ci0jaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KLQotaW50IGdldGR0YWJsZXNpemUoKQotewotICAgIHN0cnVjdCBybGltaXQgcjsKLQotICAgIGlmIChnZXRybGltaXQoUkxJTUlUX05PRklMRSwgJnIpIDwgMCkgewotICAgICAgICByZXR1cm4gc3lzY29uZihfU0NfT1BFTl9NQVgpOwotICAgIH0KLSAgICByZXR1cm4gci5ybGltX2N1cjsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2dldGVudHJvcHlfbGludXguYyBiL2xpYmMvYmlvbmljL2dldGVudHJvcHlfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDliZDdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZ2V0ZW50cm9weV9saW51eC5jCkBAIC0wLDAgKzEsNTY1IEBACisvKgkkT3BlbkJTRDogZ2V0ZW50cm9weV9saW51eC5jLHYgMS4yOCAyMDE0LzA3LzIwIDAzOjI0OjEwIGRlcmFhZHQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUaGVvIGRlIFJhYWR0IDxkZXJhYWR0QG9wZW5ic2Qub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDE0IEJvYiBCZWNrIDxiZWNrQG9idHVzZS5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogRW11bGF0aW9uIG9mIGdldGVudHJvcHkoMikgYXMgZG9jdW1lbnRlZCBhdDoKKyAqIGh0dHA6Ly93d3cub3BlbmJzZC5vcmcvY2dpLWJpbi9tYW4uY2dpL09wZW5CU0QtY3VycmVudC9tYW4yL2dldGVudHJvcHkuMgorICovCisKKyNkZWZpbmUJX1BPU0lYX0NfU09VUkNFCTE5OTMwOUwKKyNkZWZpbmUJX0dOVV9TT1VSQ0UJMQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaWZkZWYgSEFWRV9TWVNfU1lTQ1RMX0gKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGxpbmsuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZmRlZiBIQVZFX09QRU5TU0wKKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpZmRlZiBIQVZFX0dFVEFVWFZBTAorI2luY2x1ZGUgPHN5cy9hdXh2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdmZzLmg+CisKKyNkZWZpbmUgUkVQRUFUIDUKKyNkZWZpbmUgbWluKGEsIGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkKKworI2RlZmluZSBIWChhLCBiKSBcCisJZG8geyBcCisJCWlmICgoYSkpIFwKKwkJCUhEKGVycm5vKTsgXAorCQllbHNlIFwKKwkJCUhEKGIpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBIUih4LCBsKSAoU0hBNTEyX1VwZGF0ZSgmY3R4LCAoY2hhciAqKSh4KSwgKGwpKSkKKyNkZWZpbmUgSEQoeCkJIChTSEE1MTJfVXBkYXRlKCZjdHgsIChjaGFyICopJih4KSwgc2l6ZW9mICh4KSkpCisjZGVmaW5lIEhGKHgpICAgIChTSEE1MTJfVXBkYXRlKCZjdHgsIChjaGFyICopJih4KSwgc2l6ZW9mICh2b2lkKikpKQorCitpbnQJZ2V0ZW50cm9weSh2b2lkICpidWYsIHNpemVfdCBsZW4pOworCitzdGF0aWMgaW50IGdvdGRhdGEoY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKKyNpZmRlZiBTWVNfX2dldHJhbmRvbQorc3RhdGljIGludCBnZXRlbnRyb3B5X2dldHJhbmRvbSh2b2lkICpidWYsIHNpemVfdCBsZW4pOworI2VuZGlmCitzdGF0aWMgaW50IGdldGVudHJvcHlfdXJhbmRvbSh2b2lkICpidWYsIHNpemVfdCBsZW4pOworI2lmZGVmIFNZU19fc3lzY3RsCitzdGF0aWMgaW50IGdldGVudHJvcHlfc3lzY3RsKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CisjZW5kaWYKKyNpZmRlZiBIQVZFX09QRU5TU0wKK3N0YXRpYyBpbnQgZ2V0ZW50cm9weV9mYWxsYmFjayh2b2lkICpidWYsIHNpemVfdCBsZW4pOworc3RhdGljIGludCBnZXRlbnRyb3B5X3BoZHIoc3RydWN0IGRsX3BoZHJfaW5mbyAqaW5mbywgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpOworI2VuZGlmCisKK2ludAorZ2V0ZW50cm9weSh2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJaW50IHJldCA9IC0xOworCisJaWYgKGxlbiA+IDI1NikgeworCQllcnJubyA9IEVJTzsKKwkJcmV0dXJuIC0xOworCX0KKworI2lmZGVmIFNZU19fZ2V0cmFuZG9tCisJLyoKKwkgKiBUcnkgZGVzY3JpcHRvci1sZXNzIGdldHJhbmRvbSgpCisJICovCisJcmV0ID0gZ2V0ZW50cm9weV9nZXRyYW5kb20oYnVmLCBsZW4pOworCWlmIChyZXQgIT0gLTEpCisJCXJldHVybiAocmV0KTsKKyNlbmRpZgorCisJLyoKKwkgKiBUcnkgdG8gZ2V0IGVudHJvcHkgd2l0aCAvZGV2L3VyYW5kb20KKwkgKgorCSAqIFRoaXMgY2FuIGZhaWwgaWYgdGhlIHByb2Nlc3MgaXMgaW5zaWRlIGEgY2hyb290IG9yIGlmIGZpbGUKKwkgKiBkZXNjcmlwdG9ycyBhcmUgZXhoYXVzdGVkLgorCSAqLworCXJldCA9IGdldGVudHJvcHlfdXJhbmRvbShidWYsIGxlbik7CisJaWYgKHJldCAhPSAtMSkKKwkJcmV0dXJuIChyZXQpOworCisjaWZkZWYgU1lTX19zeXNjdGwKKwkvKgorCSAqIFRyeSB0byB1c2Ugc3lzY3RsIENUTF9LRVJOLCBLRVJOX1JBTkRPTSwgUkFORE9NX1VVSUQuCisJICogc3lzY3RsIGlzIGEgZmFpbHNhZmUgQVBJLCBzbyBpdCBndWFyYW50ZWVzIGEgcmVzdWx0LiAgVGhpcworCSAqIHNob3VsZCB3b3JrIGluc2lkZSBhIGNocm9vdCwgb3Igd2hlbiBmaWxlIGRlc2NyaXB0b3JzIGFyZQorCSAqIGV4aHVhc3RlZC4KKwkgKgorCSAqIEhvd2V2ZXIgdGhpcyBjYW4gZmFpbCBpZiB0aGUgTGludXgga2VybmVsIHJlbW92ZXMgc3VwcG9ydAorCSAqIGZvciBzeXNjdGwuICBTdGFydGluZyBpbiAyMDA3LCB0aGVyZSBoYXZlIGJlZW4gZWZmb3J0cyB0bworCSAqIGRlcHJlY2F0ZSB0aGUgc3lzY3RsIEFQSS9BQkksIGFuZCBwdXNoIGNhbGxlcnMgdG93YXJkcyB1c2UKKwkgKiBvZiB0aGUgY2hyb290LXVuYXZhaWxhYmxlIGZkLXVzaW5nIC9wcm9jIG1lY2hhbmlzbSAtLQorCSAqIGVzc2VudGlhbGx5IHRoZSBzYW1lIHByb2JsZW1zIGFzIC9kZXYvdXJhbmRvbS4KKwkgKgorCSAqIE51bWVyb3VzIHNldGJhY2tzIGhhdmUgYmVlbiBlbmNvdW50ZXJlZCBpbiB0aGVpciBkZXByZWNhdGlvbgorCSAqIHNjaGVkdWxlLCBzbyBhcyBvZiBKdW5lIDIwMTQgdGhlIGtlcm5lbCBBQkkgc3RpbGwgZXhpc3RzIG9uCisJICogbW9zdCBMaW51eCBhcmNoaXRlY3R1cmVzLiBUaGUgc3lzY3RsKCkgc3R1YiBpbiBsaWJjIGlzIG1pc3NpbmcKKwkgKiBvbiBzb21lIHN5c3RlbXMuICBUaGVyZSBhcmUgYWxzbyByZXBvcnRzIHRoYXQgc29tZSBrZXJuZWxzCisJICogc3BldyBtZXNzYWdlcyB0byB0aGUgY29uc29sZS4KKwkgKi8KKwlyZXQgPSBnZXRlbnRyb3B5X3N5c2N0bChidWYsIGxlbik7CisJaWYgKHJldCAhPSAtMSkKKwkJcmV0dXJuIChyZXQpOworI2VuZGlmIC8qIFNZU19fc3lzY3RsICovCisKKwkvKgorCSAqIEVudHJvcHkgY29sbGVjdGlvbiB2aWEgL2Rldi91cmFuZG9tIGFuZCBzeXNjdGwgaGF2ZSBmYWlsZWQuCisJICoKKwkgKiBObyBvdGhlciBBUEkgZXhpc3RzIGZvciBjb2xsZWN0aW5nIGVudHJvcHkuICBTZWUgdGhlIGxhcmdlCisJICogY29tbWVudCBibG9jayBhYm92ZS4KKwkgKgorCSAqIFdlIGhhdmUgdmVyeSBmZXcgb3B0aW9uczoKKwkgKiAgICAgLSBFdmVuIHN5c2xvZ19yIGlzIHVuc2FmZSB0byBjYWxsIGF0IHRoaXMgbG93IGxldmVsLCBzbworCSAqCSB0aGVyZSBpcyBubyB3YXkgdG8gYWxlcnQgdGhlIHVzZXIgb3IgcHJvZ3JhbS4KKwkgKiAgICAgLSBDYW5ub3QgY2FsbCBhYm9ydCgpIGJlY2F1c2Ugc29tZSBzeXN0ZW1zIGhhdmUgdW5zYWZlCisJICoJIGNvcmVmaWxlcy4KKwkgKiAgICAgLSBDb3VsZCByYWlzZShTSUdLSUxMKSByZXN1bHRpbmcgaW4gc2lsZW50IHByb2dyYW0gdGVybWluYXRpb24uCisJICogICAgIC0gUmV0dXJuIEVJTywgdG8gaGludCB0aGF0IGFyYzRyYW5kb20ncyBzdGlyIGZ1bmN0aW9uCisJICogICAgICAgc2hvdWxkIHJhaXNlKFNJR0tJTEwpCisJICogICAgIC0gRG8gdGhlIGJlc3QgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMuLi4uCisJICoKKwkgKiBUaGlzIGNvZGUgcGF0aCBleGlzdHMgdG8gYnJpbmcgbGlnaHQgdG8gdGhlIGlzc3VlIHRoYXQgTGludXgKKwkgKiBkb2VzIG5vdCBwcm92aWRlIGEgZmFpbHNhZmUgQVBJIGZvciBlbnRyb3B5IGNvbGxlY3Rpb24uCisJICoKKwkgKiBXZSBob3BlIHRoaXMgZGVtb25zdHJhdGVzIHRoYXQgTGludXggc2hvdWxkIGVpdGhlciByZXRhaW4gdGhlaXIKKwkgKiBzeXNjdGwgQUJJLCBvciBjb25zaWRlciBwcm92aWRpbmcgYSBuZXcgZmFpbHNhZmUgQVBJIHdoaWNoCisJICogd29ya3MgaW4gYSBjaHJvb3Qgb3Igd2hlbiBmaWxlIGRlc2NyaXB0b3JzIGFyZSBleGhhdXN0ZWQuCisJICovCisjdW5kZWYgRkFJTF9JTlNURUFEX09GX1RSWUlOR19GQUxMQkFDSworI2lmZGVmIEZBSUxfSU5TVEVBRF9PRl9UUllJTkdfRkFMTEJBQ0sKKwlyYWlzZShTSUdLSUxMKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfT1BFTlNTTAorCXJldCA9IGdldGVudHJvcHlfZmFsbGJhY2soYnVmLCBsZW4pOworCWlmIChyZXQgIT0gLTEpCisJCXJldHVybiAocmV0KTsKKyNlbmRpZgorCisJZXJybm8gPSBFSU87CisJcmV0dXJuIChyZXQpOworfQorCisvKgorICogQmFzaWMgc2FuaXR5IGNoZWNraW5nOyB3aXNoIHdlIGNvdWxkIGRvIGJldHRlci4KKyAqLworc3RhdGljIGludAorZ290ZGF0YShjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJY2hhcglhbnlfc2V0ID0gMDsKKwlzaXplX3QJaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkKKwkJYW55X3NldCB8PSBidWZbaV07CisJaWYgKGFueV9zZXQgPT0gMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisjaWZkZWYgU1lTX19nZXRyYW5kb20KK3N0YXRpYyBpbnQKK2dldGVudHJvcHlfZ2V0cmFuZG9tKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKyNpZiAwCisKKy8qIEhhbmQtZGVmaW5pdGlvbnMgdW50aWwgdGhlIEFQSSBiZWNvbWVzIGNvbW1vbnBsYWNlICovCisjaWZuZGVmIFNZU19fZ2V0cmFuZG9tCisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUgU1lTX19nZXRyYW5kb20gMzE3CisjZWxzZQorI2RlZmluZSBTWVNfX2dldHJhbmRvbSAzNTQKKyNlbmRpZgorI2VuZGlmCisJc3RydWN0IF9fZ2V0cmFuZG9tX2FyZ3MgYXJncyA9IHsKKwkJLmJ1ZiA9IGJ1ZjsKKwkJLmxlbiA9IGxlbjsKKwkJLmZsYWdzID0gMDsKKwl9OworCisJaWYgKGxlbiA+IDI1NikKKwkJcmV0dXJuICgtMSk7CisJcmV0ID0gc3lzY2FsbChTWVNfX2dldHJhbmRvbSwgJmFyZ3MpOworCWlmIChyZXQgPT0gbGVuKQorCQlyZXR1cm4gKDApOworI2VuZGlmCisJcmV0dXJuIC0xOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2dldGVudHJvcHlfdXJhbmRvbSh2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc2l6ZV90IGk7CisJaW50IGZkLCBjbnQsIGZsYWdzOworCWludCBzYXZlX2Vycm5vID0gZXJybm87CisKK3N0YXJ0OgorCisJZmxhZ3MgPSBPX1JET05MWTsKKyNpZmRlZiBPX05PRk9MTE9XCisJZmxhZ3MgfD0gT19OT0ZPTExPVzsKKyNlbmRpZgorI2lmZGVmIE9fQ0xPRVhFQworCWZsYWdzIHw9IE9fQ0xPRVhFQzsKKyNlbmRpZgorCWZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgZmxhZ3MsIDApOworCWlmIChmZCA9PSAtMSkgeworCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQlnb3RvIHN0YXJ0OworCQlnb3RvIG5vZGV2cmFuZG9tOworCX0KKyNpZm5kZWYgT19DTE9FWEVDCisJZmNudGwoZmQsIEZfU0VURkQsIGZjbnRsKGZkLCBGX0dFVEZEKSB8IEZEX0NMT0VYRUMpOworI2VuZGlmCisKKwkvKiBMaWdodGx5IHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugbm9kZSBsb29rcyBzYW5lICovCisJaWYgKGZzdGF0KGZkLCAmc3QpID09IC0xIHx8ICFTX0lTQ0hSKHN0LnN0X21vZGUpKSB7CisJCWNsb3NlKGZkKTsKKwkJZ290byBub2RldnJhbmRvbTsKKwl9CisJaWYgKGlvY3RsKGZkLCBSTkRHRVRFTlRDTlQsICZjbnQpID09IC0xKSB7CisJCWNsb3NlKGZkKTsKKwkJZ290byBub2RldnJhbmRvbTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGxlbjsgKSB7CisJCXNpemVfdCB3YW50ZWQgPSBsZW4gLSBpOworCQlzc2l6ZV90IHJldCA9IHJlYWQoZmQsIChjaGFyICopYnVmICsgaSwgd2FudGVkKTsKKworCQlpZiAocmV0ID09IC0xKSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQorCQkJCWNvbnRpbnVlOworCQkJY2xvc2UoZmQpOworCQkJZ290byBub2RldnJhbmRvbTsKKwkJfQorCQlpICs9IHJldDsKKwl9CisJY2xvc2UoZmQpOworCWlmIChnb3RkYXRhKGJ1ZiwgbGVuKSA9PSAwKSB7CisJCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJcmV0dXJuIDA7CQkvKiBzYXRpc2ZpZWQgKi8KKwl9Citub2RldnJhbmRvbToKKwllcnJubyA9IEVJTzsKKwlyZXR1cm4gLTE7Cit9CisKKyNpZmRlZiBTWVNfX3N5c2N0bAorc3RhdGljIGludAorZ2V0ZW50cm9weV9zeXNjdGwodm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0YXRpYyBpbnQgbWliW10gPSB7IENUTF9LRVJOLCBLRVJOX1JBTkRPTSwgUkFORE9NX1VVSUQgfTsKKwlzaXplX3QgaTsKKwlpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgKSB7CisJCXNpemVfdCBjaHVuayA9IG1pbihsZW4gLSBpLCAxNik7CisKKwkJLyogU1lTX19zeXNjdGwgYmVjYXVzZSBzb21lIHN5c3RlbXMgYWxyZWFkeSByZW1vdmVkIHN5c2N0bCgpICovCisJCXN0cnVjdCBfX3N5c2N0bF9hcmdzIGFyZ3MgPSB7CisJCQkubmFtZSA9IG1pYiwKKwkJCS5ubGVuID0gMywKKwkJCS5vbGR2YWwgPSAoY2hhciopIGJ1ZiArIGksCisJCQkub2xkbGVucCA9ICZjaHVuaywKKwkJfTsKKwkJaWYgKHN5c2NhbGwoU1lTX19zeXNjdGwsICZhcmdzKSAhPSAwKQorCQkJZ290byBzeXNjdGxmYWlsZWQ7CisJCWkgKz0gY2h1bms7CisJfQorCWlmIChnb3RkYXRhKGJ1ZiwgbGVuKSA9PSAwKSB7CisJCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJcmV0dXJuICgwKTsJCQkvKiBzYXRpc2ZpZWQgKi8KKwl9CitzeXNjdGxmYWlsZWQ6CisJZXJybm8gPSBFSU87CisJcmV0dXJuIC0xOworfQorI2VuZGlmIC8qIFNZU19fc3lzY3RsICovCisKKyNpZmRlZiBIQVZFX09QRU5TU0wKKworc3RhdGljIGludCBjbFtdID0geworCUNMT0NLX1JFQUxUSU1FLAorI2lmZGVmIENMT0NLX01PTk9UT05JQworCUNMT0NLX01PTk9UT05JQywKKyNlbmRpZgorI2lmZGVmIENMT0NLX01PTk9UT05JQ19SQVcKKwlDTE9DS19NT05PVE9OSUNfUkFXLAorI2VuZGlmCisjaWZkZWYgQ0xPQ0tfVEFJCisJQ0xPQ0tfVEFJLAorI2VuZGlmCisjaWZkZWYgQ0xPQ0tfVklSVFVBTAorCUNMT0NLX1ZJUlRVQUwsCisjZW5kaWYKKyNpZmRlZiBDTE9DS19VUFRJTUUKKwlDTE9DS19VUFRJTUUsCisjZW5kaWYKKyNpZmRlZiBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQKKwlDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQsCisjZW5kaWYKKyNpZmRlZiBDTE9DS19USFJFQURfQ1BVVElNRV9JRAorCUNMT0NLX1RIUkVBRF9DUFVUSU1FX0lELAorI2VuZGlmCit9OworCitzdGF0aWMgaW50CitnZXRlbnRyb3B5X3BoZHIoc3RydWN0IGRsX3BoZHJfaW5mbyAqaW5mbywgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpCit7CisJU0hBNTEyX0NUWCAqY3R4ID0gZGF0YTsKKworCVNIQTUxMl9VcGRhdGUoY3R4LCAmaW5mby0+ZGxwaV9hZGRyLCBzaXplb2YgKGluZm8tPmRscGlfYWRkcikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitnZXRlbnRyb3B5X2ZhbGxiYWNrKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwl1aW50OF90IHJlc3VsdHNbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOworCWludCBzYXZlX2Vycm5vID0gZXJybm8sIGUsIHBncyA9IGdldHBhZ2VzaXplKCksIGZhc3RlciA9IDAsIHJlcGVhdDsKKwlzdGF0aWMgaW50IGNudDsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJc3RydWN0IHJ1c2FnZSBydTsKKwlzaWdzZXRfdCBzaWdzZXQ7CisJc3RydWN0IHN0YXQgc3Q7CisJU0hBNTEyX0NUWCBjdHg7CisJc3RhdGljIHBpZF90IGxhc3RwaWQ7CisJcGlkX3QgcGlkOworCXNpemVfdCBpLCBpaSwgbTsKKwljaGFyICpwOworCisJcGlkID0gZ2V0cGlkKCk7CisJaWYgKGxhc3RwaWQgPT0gcGlkKSB7CisJCWZhc3RlciA9IDE7CisJCXJlcGVhdCA9IDI7CisJfSBlbHNlIHsKKwkJZmFzdGVyID0gMDsKKwkJbGFzdHBpZCA9IHBpZDsKKwkJcmVwZWF0ID0gUkVQRUFUOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyApIHsKKwkJaW50IGo7CisJCVNIQTUxMl9Jbml0KCZjdHgpOworCQlmb3IgKGogPSAwOyBqIDwgcmVwZWF0OyBqKyspIHsKKwkJCUhYKChlID0gZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCkpID09IC0xLCB0dik7CisJCQlpZiAoZSAhPSAtMSkgeworCQkJCWNudCArPSAoaW50KXR2LnR2X3NlYzsKKwkJCQljbnQgKz0gKGludCl0di50dl91c2VjOworCQkJfQorCisJCQlkbF9pdGVyYXRlX3BoZHIoZ2V0ZW50cm9weV9waGRyLCAmY3R4KTsKKworCQkJZm9yIChpaSA9IDA7IGlpIDwgc2l6ZW9mKGNsKS9zaXplb2YoY2xbMF0pOyBpaSsrKQorCQkJCUhYKGNsb2NrX2dldHRpbWUoY2xbaWldLCAmdHMpID09IC0xLCB0cyk7CisKKwkJCUhYKChwaWQgPSBnZXRwaWQoKSkgPT0gLTEsIHBpZCk7CisJCQlIWCgocGlkID0gZ2V0c2lkKHBpZCkpID09IC0xLCBwaWQpOworCQkJSFgoKHBpZCA9IGdldHBwaWQoKSkgPT0gLTEsIHBpZCk7CisJCQlIWCgocGlkID0gZ2V0cGdpZCgwKSkgPT0gLTEsIHBpZCk7CisJCQlIWCgoZSA9IGdldHByaW9yaXR5KDAsIDApKSA9PSAtMSwgZSk7CisKKwkJCWlmICghZmFzdGVyKSB7CisJCQkJdHMudHZfc2VjID0gMDsKKwkJCQl0cy50dl9uc2VjID0gMTsKKwkJCQkodm9pZCkgbmFub3NsZWVwKCZ0cywgTlVMTCk7CisJCQl9CisKKwkJCUhYKHNpZ3BlbmRpbmcoJnNpZ3NldCkgPT0gLTEsIHNpZ3NldCk7CisJCQlIWChzaWdwcm9jbWFzayhTSUdfQkxPQ0ssIE5VTEwsICZzaWdzZXQpID09IC0xLAorCQkJICAgIHNpZ3NldCk7CisKKwkJCUhGKGdldGVudHJvcHkpOwkvKiBhbiBhZGRyIGluIHRoaXMgbGlicmFyeSAqLworCQkJSEYocHJpbnRmKTsJCS8qIGFuIGFkZHIgaW4gbGliYyAqLworCQkJcCA9IChjaGFyICopJnA7CisJCQlIRChwKTsJCS8qIGFuIGFkZHIgb24gc3RhY2sgKi8KKwkJCXAgPSAoY2hhciAqKSZlcnJubzsKKwkJCUhEKHApOwkJLyogdGhlIGFkZHIgb2YgZXJybm8gKi8KKworCQkJaWYgKGkgPT0gMCkgeworCQkJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOworCQkJCXN0cnVjdCBzdGF0dmZzIHN0dmZzOworCQkJCXN0cnVjdCB0ZXJtaW9zIHRpb3M7CisJCQkJc3RydWN0IHN0YXRmcyBzdGZzOworCQkJCXNvY2tsZW5fdCBzc2w7CisJCQkJb2ZmX3Qgb2ZmOworCisJCQkJLyoKKwkJCQkgKiBQcmltZS1zaXplZCBtYXBwaW5ncyBlbmNvdXJhZ2UgZnJhZ21lbnRhdGlvbjsKKwkJCQkgKiB0aHVzIGV4cG9zaW5nIHNvbWUgYWRkcmVzcyBlbnRyb3B5LgorCQkJCSAqLworCQkJCXN0cnVjdCBtbSB7CisJCQkJCXNpemVfdAlucGc7CisJCQkJCXZvaWQJKnA7CisJCQkJfSBtbVtdID0JIHsKKwkJCQkJeyAxNywgTUFQX0ZBSUxFRCB9LCB7IDMsIE1BUF9GQUlMRUQgfSwKKwkJCQkJeyAxMSwgTUFQX0ZBSUxFRCB9LCB7IDIsIE1BUF9GQUlMRUQgfSwKKwkJCQkJeyA1LCBNQVBfRkFJTEVEIH0sIHsgMywgTUFQX0ZBSUxFRCB9LAorCQkJCQl7IDcsIE1BUF9GQUlMRUQgfSwgeyAxLCBNQVBfRkFJTEVEIH0sCisJCQkJCXsgNTcsIE1BUF9GQUlMRUQgfSwgeyAzLCBNQVBfRkFJTEVEIH0sCisJCQkJCXsgMTMxLCBNQVBfRkFJTEVEIH0sIHsgMSwgTUFQX0ZBSUxFRCB9LAorCQkJCX07CisKKwkJCQlmb3IgKG0gPSAwOyBtIDwgc2l6ZW9mIG1tL3NpemVvZihtbVswXSk7IG0rKykgeworCQkJCQlIWChtbVttXS5wID0gbW1hcChOVUxMLAorCQkJCQkgICAgbW1bbV0ubnBnICogcGdzLAorCQkJCQkgICAgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisJCQkJCSAgICBNQVBfUFJJVkFURXxNQVBfQU5PTiwgLTEsCisJCQkJCSAgICAob2ZmX3QpMCksIG1tW21dLnApOworCQkJCQlpZiAobW1bbV0ucCAhPSBNQVBfRkFJTEVEKSB7CisJCQkJCQlzaXplX3QgbW87CisKKwkJCQkJCS8qIFRvdWNoIHNvbWUgbWVtb3J5Li4uICovCisJCQkJCQlwID0gbW1bbV0ucDsKKwkJCQkJCW1vID0gY250ICUKKwkJCQkJCSAgICAobW1bbV0ubnBnICogcGdzIC0gMSk7CisJCQkJCQlwW21vXSA9IDE7CisJCQkJCQljbnQgKz0gKGludCkoKGxvbmcpKG1tW21dLnApCisJCQkJCQkgICAgLyBwZ3MpOworCQkJCQl9CisKKwkJCQkJLyogQ2hlY2sgY250cyBhbmQgdGltZXMuLi4gKi8KKwkJCQkJZm9yIChpaSA9IDA7IGlpIDwgc2l6ZW9mKGNsKS9zaXplb2YoY2xbMF0pOworCQkJCQkgICAgaWkrKykgeworCQkJCQkJSFgoKGUgPSBjbG9ja19nZXR0aW1lKGNsW2lpXSwKKwkJCQkJCSAgICAmdHMpKSA9PSAtMSwgdHMpOworCQkJCQkJaWYgKGUgIT0gLTEpCisJCQkJCQkJY250ICs9IChpbnQpdHMudHZfbnNlYzsKKwkJCQkJfQorCisJCQkJCUhYKChlID0gZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLAorCQkJCQkgICAgJnJ1KSkgPT0gLTEsIHJ1KTsKKwkJCQkJaWYgKGUgIT0gLTEpIHsKKwkJCQkJCWNudCArPSAoaW50KXJ1LnJ1X3V0aW1lLnR2X3NlYzsKKwkJCQkJCWNudCArPSAoaW50KXJ1LnJ1X3V0aW1lLnR2X3VzZWM7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlmb3IgKG0gPSAwOyBtIDwgc2l6ZW9mIG1tL3NpemVvZihtbVswXSk7IG0rKykgeworCQkJCQlpZiAobW1bbV0ucCAhPSBNQVBfRkFJTEVEKQorCQkJCQkJbXVubWFwKG1tW21dLnAsIG1tW21dLm5wZyAqIHBncyk7CisJCQkJCW1tW21dLnAgPSBNQVBfRkFJTEVEOworCQkJCX0KKworCQkJCUhYKHN0YXQoIi4iLCAmc3QpID09IC0xLCBzdCk7CisJCQkJSFgoc3RhdHZmcygiLiIsICZzdHZmcykgPT0gLTEsIHN0dmZzKTsKKwkJCQlIWChzdGF0ZnMoIi4iLCAmc3RmcykgPT0gLTEsIHN0ZnMpOworCisJCQkJSFgoc3RhdCgiLyIsICZzdCkgPT0gLTEsIHN0KTsKKwkJCQlIWChzdGF0dmZzKCIvIiwgJnN0dmZzKSA9PSAtMSwgc3R2ZnMpOworCQkJCUhYKHN0YXRmcygiLyIsICZzdGZzKSA9PSAtMSwgc3Rmcyk7CisKKwkJCQlIWCgoZSA9IGZzdGF0KDAsICZzdCkpID09IC0xLCBzdCk7CisJCQkJaWYgKGUgPT0gLTEpIHsKKwkJCQkJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkgfHwKKwkJCQkJICAgIFNfSVNGSUZPKHN0LnN0X21vZGUpIHx8CisJCQkJCSAgICBTX0lTU09DSyhzdC5zdF9tb2RlKSkgeworCQkJCQkJSFgoZnN0YXR2ZnMoMCwgJnN0dmZzKSA9PSAtMSwKKwkJCQkJCSAgICBzdHZmcyk7CisJCQkJCQlIWChmc3RhdGZzKDAsICZzdGZzKSA9PSAtMSwKKwkJCQkJCSAgICBzdGZzKTsKKwkJCQkJCUhYKChvZmYgPSBsc2VlaygwLCAob2ZmX3QpMCwKKwkJCQkJCSAgICBTRUVLX0NVUikpIDwgMCwgb2ZmKTsKKwkJCQkJfQorCQkJCQlpZiAoU19JU0NIUihzdC5zdF9tb2RlKSkgeworCQkJCQkJSFgodGNnZXRhdHRyKDAsICZ0aW9zKSA9PSAtMSwKKwkJCQkJCSAgICB0aW9zKTsKKwkJCQkJfSBlbHNlIGlmIChTX0lTU09DSyhzdC5zdF9tb2RlKSkgeworCQkJCQkJbWVtc2V0KCZzcywgMCwgc2l6ZW9mIHNzKTsKKwkJCQkJCXNzbCA9IHNpemVvZihzcyk7CisJCQkJCQlIWChnZXRwZWVybmFtZSgwLAorCQkJCQkJICAgICh2b2lkICopJnNzLCAmc3NsKSA9PSAtMSwKKwkJCQkJCSAgICBzcyk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlIWCgoZSA9IGdldHJ1c2FnZShSVVNBR0VfQ0hJTERSRU4sCisJCQkJICAgICZydSkpID09IC0xLCBydSk7CisJCQkJaWYgKGUgIT0gLTEpIHsKKwkJCQkJY250ICs9IChpbnQpcnUucnVfdXRpbWUudHZfc2VjOworCQkJCQljbnQgKz0gKGludClydS5ydV91dGltZS50dl91c2VjOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogU3Vic2VxdWVudCBoYXNoZXMgYWJzb3JiIHByZXZpb3VzIHJlc3VsdCAqLworCQkJCUhEKHJlc3VsdHMpOworCQkJfQorCisJCQlIWCgoZSA9IGdldHRpbWVvZmRheSgmdHYsIE5VTEwpKSA9PSAtMSwgdHYpOworCQkJaWYgKGUgIT0gLTEpIHsKKwkJCQljbnQgKz0gKGludCl0di50dl9zZWM7CisJCQkJY250ICs9IChpbnQpdHYudHZfdXNlYzsKKwkJCX0KKworCQkJSEQoY250KTsKKwkJfQorI2lmZGVmIEhBVkVfR0VUQVVYVkFMCisjaWZkZWYgQVRfUkFORE9NCisJCS8qIE5vdCBhcyByYW5kb20gYXMgeW91IHRoaW5rIGJ1dCB3ZSB0YWtlIHdoYXQgd2UgYXJlIGdpdmVuICovCisJCXAgPSAoY2hhciAqKSBnZXRhdXh2YWwoQVRfUkFORE9NKTsKKwkJaWYgKHApCisJCQlIUihwLCAxNik7CisjZW5kaWYKKyNpZmRlZiBBVF9TWVNJTkZPX0VIRFIKKwkJcCA9IChjaGFyICopIGdldGF1eHZhbChBVF9TWVNJTkZPX0VIRFIpOworCQlpZiAocCkKKwkJCUhSKHAsIHBncyk7CisjZW5kaWYKKyNpZmRlZiBBVF9CQVNFCisJCXAgPSAoY2hhciAqKSBnZXRhdXh2YWwoQVRfQkFTRSk7CisJCWlmIChwKQorCQkJSEQocCk7CisjZW5kaWYKKyNlbmRpZgorCisJCVNIQTUxMl9GaW5hbChyZXN1bHRzLCAmY3R4KTsKKwkJbWVtY3B5KChjaGFyICopYnVmICsgaSwgcmVzdWx0cywgbWluKHNpemVvZihyZXN1bHRzKSwgbGVuIC0gaSkpOworCQlpICs9IG1pbihzaXplb2YocmVzdWx0cyksIGxlbiAtIGkpOworCX0KKwltZW1zZXQocmVzdWx0cywgMCwgc2l6ZW9mIHJlc3VsdHMpOworCWlmIChnb3RkYXRhKGJ1ZiwgbGVuKSA9PSAwKSB7CisJCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJcmV0dXJuIDA7CQkvKiBzYXRpc2ZpZWQgKi8KKwl9CisJZXJybm8gPSBFSU87CisJcmV0dXJuIC0xOworfQorCisjZW5kaWYgLyogSEFWRV9PUEVOU1NMICovCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9nZXRwZ3JwLmMgYi9saWJjL2Jpb25pYy9nZXRwZ3JwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmN2NlZDUuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvZ2V0cGdycC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1waWRfdCAgZ2V0cGdycCh2b2lkKSAKLXsKLSAgcmV0dXJuIGdldHBnaWQoMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9nZXRwZ3JwLmNwcCBiL2xpYmMvYmlvbmljL2dldHBncnAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYWNiYjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9nZXRwZ3JwLmNwcApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworcGlkX3QgZ2V0cGdycCgpIHsKKyAgcmV0dXJuIGdldHBnaWQoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9nZXRwaWQuY3BwIGIvbGliYy9iaW9uaWMvZ2V0cGlkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2Q1YjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZ2V0cGlkLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKKworZXh0ZXJuICJDIiBwaWRfdCBfX2dldHBpZCgpOworCitwaWRfdCBnZXRwaWQoKSB7CisgIHB0aHJlYWRfaW50ZXJuYWxfdCogc2VsZiA9IF9fZ2V0X3RocmVhZCgpOworCisgIC8vIERvIHdlIGhhdmUgYSB2YWxpZCBjYWNoZWQgcGlkPworICBwaWRfdCBjYWNoZWRfcGlkOworICBpZiAoX19wcmVkaWN0X3RydWUoc2VsZi0+Z2V0X2NhY2hlZF9waWQoJmNhY2hlZF9waWQpKSkgeworICAgIHJldHVybiBjYWNoZWRfcGlkOworICB9CisKKyAgLy8gV2UncmUgc3RpbGwgaW4gdGhlIGR5bmFtaWMgbGlua2VyIG9yIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgZm9ya2luZywgc28gYXNrIHRoZSBrZXJuZWwuCisgIC8vIFdlIGRvbid0IGtub3cgd2hldGhlciBpdCdzIHNhZmUgdG8gdXBkYXRlIHRoZSBjYWNoZWQgdmFsdWUsIHNvIGRvbid0IHRyeS4KKyAgcmV0dXJuIF9fZ2V0cGlkKCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9nZXRwdC5jIGIvbGliYy9iaW9uaWMvZ2V0cHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJiNWMxMS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9nZXRwdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0KLWludCBnZXRwdCh2b2lkKQotewotICByZXR1cm4gb3BlbigiL2Rldi9wdG14IiwgT19SRFdSfE9fTk9DVFRZKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2dldHRpZC5jcHAgYi9saWJjL2Jpb25pYy9nZXR0aWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MmUzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9nZXR0aWQuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorCitwaWRfdCBnZXR0aWQoKSB7CisgIHJldHVybiBfX2dldF90aHJlYWQoKS0+dGlkOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvaWZfaW5kZXh0b25hbWUuYyBiL2xpYmMvYmlvbmljL2lmX2luZGV4dG9uYW1lLmMKaW5kZXggZGMwOGIyOC4uZjBkYjUxMiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvaWZfaW5kZXh0b25hbWUuYworKysgYi9saWJjL2Jpb25pYy9pZl9pbmRleHRvbmFtZS5jCkBAIC00MSw3ICs0MSw2IEBACiBjaGFyKgogaWZfaW5kZXh0b25hbWUodW5zaWduZWQgaWZpbmRleCwgY2hhciAqaWZuYW1lKQogewotICAgIGludCBpbmRleDsKICAgICBpbnQgY3RsX3NvY2s7CiAgICAgc3RydWN0IGlmcmVxIGlmcjsKICAgICBjaGFyKiAgcmV0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2lzc2V0dWdpZC5jIGIvbGliYy9iaW9uaWMvaXNzZXR1Z2lkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZjhlNDEuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvaXNzZXR1Z2lkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLWludCAgaXNzZXR1Z2lkKHZvaWQpCi17Ci0gICAgLyogZm9yIEJpb25pYywgdGhpcyBpcyBzdWZmaWNpZW50ICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2plbWFsbG9jLmggYi9saWJjL2Jpb25pYy9qZW1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYjFmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9qZW1hbGxvYy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIExJQkNfQklPTklDX0pFTUFMTE9DX0hfCisjZGVmaW5lIExJQkNfQklPTklDX0pFTUFMTE9DX0hfCisKKyNpbmNsdWRlIDxqZW1hbGxvYy9qZW1hbGxvYy5oPgorCisvLyBOZWVkIHRvIHdyYXAgbWVtYWxpZ24gc2luY2UgamVfbWVtYWxpZ24gZmFpbHMgb24gbm9uLXBvd2VyIG9mIDIgYWxpZ25tZW50cy4KKyNkZWZpbmUgamVfbWVtYWxpZ24gamVfbWVtYWxpZ25fcm91bmRfdXBfYm91bmRhcnkKKworX19CRUdJTl9ERUNMUworCitzdHJ1Y3QgbWFsbGluZm8gamVfbWFsbGluZm8oKTsKK3ZvaWQqIGplX21lbWFsaWduX3JvdW5kX3VwX2JvdW5kYXJ5KHNpemVfdCwgc2l6ZV90KTsKK3ZvaWQqIGplX3B2YWxsb2Moc2l6ZV90KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmICAvLyBMSUJDX0JJT05JQ19ETE1BTExPQ19IXwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvamVtYWxsb2Nfd3JhcHBlci5jcHAgYi9saWJjL2Jpb25pYy9qZW1hbGxvY193cmFwcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNkNTYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvamVtYWxsb2Nfd3JhcHBlci5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImplbWFsbG9jLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgiCisKK3ZvaWQqIGplX3B2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgIHNpemVfdCBzaXplID0gQklPTklDX0FMSUdOKGJ5dGVzLCBwYWdlc2l6ZSk7CisgIGlmIChzaXplIDwgYnl0ZXMpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gamVfbWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOworfQorCisjaWZkZWYgamVfbWVtYWxpZ24KKyN1bmRlZiBqZV9tZW1hbGlnbgorI2VuZGlmCisKKy8vIFRoZSBtYW4gcGFnZSBmb3IgbWVtYWxpZ24gc2F5cyBpdCBmYWlscyBpZiBib3VuZGFyeSBpcyBub3QgYSBwb3dlciBvZiAyLAorLy8gYnV0IHRoaXMgaXMgbm90IHRydWUuIEJvdGggZ2xpYmMgYW5kIGRsbWFsbG9jIHJvdW5kIHVwIHRvIHRoZSBuZXh0IHBvd2VyCisvLyBvZiAyLCBzbyB3ZSdsbCBkbyB0aGUgc2FtZS4KK3ZvaWQqIGplX21lbWFsaWduX3JvdW5kX3VwX2JvdW5kYXJ5KHNpemVfdCBib3VuZGFyeSwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKGJvdW5kYXJ5ICE9IDApIHsKKyAgICBpZiAoIXBvd2Vyb2YyKGJvdW5kYXJ5KSkgeworICAgICAgYm91bmRhcnkgPSBCSU9OSUNfUk9VTkRfVVBfUE9XRVJfT0ZfMihib3VuZGFyeSk7CisgICAgfQorICB9IGVsc2UgeworICAgIGJvdW5kYXJ5ID0gMTsKKyAgfQorICByZXR1cm4gamVfbWVtYWxpZ24oYm91bmRhcnksIHNpemUpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGRleHAuYyBiL2xpYmMvYmlvbmljL2xkZXhwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjMWYzZGQuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvbGRleHAuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKiBAKCMpc19zY2FsYm4uYyA1LjEgOTMvMDkvMjQgKi8KLS8qIEAoIylmZGxpYm0uaCA1LjEgOTMvMDkvMjQgKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZW5kaWFuLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0vKiBCaXQgZmlkZGxpbmcgcm91dGluZXMgY29waWVkIGZyb20gbXN1bi9zcmMvbWF0aF9wcml2YXRlLmgsdiAxLjE1ICovCi0KLSNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KLQotdHlwZWRlZiB1bmlvbgotewotICBkb3VibGUgdmFsdWU7Ci0gIHN0cnVjdAotICB7Ci0gICAgdV9pbnQzMl90IG1zdzsKLSAgICB1X2ludDMyX3QgbHN3OwotICB9IHBhcnRzOwotfSBpZWVlX2RvdWJsZV9zaGFwZV90eXBlOwotCi0jZW5kaWYKLQotI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgotCi10eXBlZGVmIHVuaW9uCi17Ci0gIGRvdWJsZSB2YWx1ZTsKLSAgc3RydWN0Ci0gIHsKLSAgICB1X2ludDMyX3QgbHN3OwotICAgIHVfaW50MzJfdCBtc3c7Ci0gIH0gcGFydHM7Ci19IGllZWVfZG91YmxlX3NoYXBlX3R5cGU7Ci0KLSNlbmRpZgotCi0vKiBHZXQgdHdvIDMyIGJpdCBpbnRzIGZyb20gYSBkb3VibGUuICAqLwotCi0jZGVmaW5lIEVYVFJBQ1RfV09SRFMoaXgwLGl4MSxkKQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0gIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgZXdfdTsJCQkJCVwKLSAgZXdfdS52YWx1ZSA9IChkKTsJCQkJCQlcCi0gIChpeDApID0gZXdfdS5wYXJ0cy5tc3c7CQkJCQlcCi0gIChpeDEpID0gZXdfdS5wYXJ0cy5sc3c7CQkJCQlcCi19IHdoaWxlICgwKQotCi0vKiBHZXQgdGhlIG1vcmUgc2lnbmlmaWNhbnQgMzIgYml0IGludCBmcm9tIGEgZG91YmxlLiAgKi8KLQotI2RlZmluZSBHRVRfSElHSF9XT1JEKGksZCkJCQkJCVwKLWRvIHsJCQkJCQkJCVwKLSAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBnaF91OwkJCQkJXAotICBnaF91LnZhbHVlID0gKGQpOwkJCQkJCVwKLSAgKGkpID0gZ2hfdS5wYXJ0cy5tc3c7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotLyogU2V0IHRoZSBtb3JlIHNpZ25pZmljYW50IDMyIGJpdHMgb2YgYSBkb3VibGUgZnJvbSBhbiBpbnQuICAqLwotCi0jZGVmaW5lIFNFVF9ISUdIX1dPUkQoZCx2KQkJCQkJXAotZG8gewkJCQkJCQkJXAotICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHNoX3U7CQkJCQlcCi0gIHNoX3UudmFsdWUgPSAoZCk7CQkJCQkJXAotICBzaF91LnBhcnRzLm1zdyA9ICh2KTsJCQkJCQlcCi0gIChkKSA9IHNoX3UudmFsdWU7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotCi1zdGF0aWMgY29uc3QgZG91YmxlCi10d281NCAgID0gIDEuODAxNDM5ODUwOTQ4MTk4NDAwMDBlKzE2LCAvKiAweDQzNTAwMDAwLCAweDAwMDAwMDAwICovCi10d29tNTQgID0gIDUuNTUxMTE1MTIzMTI1NzgyNzAyMTJlLTE3LCAvKiAweDNDOTAwMDAwLCAweDAwMDAwMDAwICovCi1odWdlICAgPSAxLjBlKzMwMCwKLXRpbnkgICA9IDEuMGUtMzAwOwotCi1zdGF0aWMgZG91YmxlCi1fY29weXNpZ24oZG91YmxlIHgsIGRvdWJsZSB5KQotewotCXVfaW50MzJfdCBoeCxoeTsKLQlHRVRfSElHSF9XT1JEKGh4LHgpOwotCUdFVF9ISUdIX1dPUkQoaHkseSk7Ci0JU0VUX0hJR0hfV09SRCh4LChoeCYweDdmZmZmZmZmKXwoaHkmMHg4MDAwMDAwMCkpOwotCXJldHVybiB4OwotfQotCi1kb3VibGUKLWxkZXhwKGRvdWJsZSB4LCBpbnQgbikKLXsKLQlpbnQzMl90IGssaHgsbHg7Ci0JRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKLSAgICAgICAgayA9IChoeCYweDdmZjAwMDAwKT4+MjA7CQkvKiBleHRyYWN0IGV4cG9uZW50ICovCi0gICAgICAgIGlmIChrPT0wKSB7CQkJCS8qIDAgb3Igc3Vibm9ybWFsIHggKi8KLSAgICAgICAgICAgIGlmICgobHh8KGh4JjB4N2ZmZmZmZmYpKT09MCkgcmV0dXJuIHg7IC8qICstMCAqLwotCSAgICB4ICo9IHR3bzU0OwotCSAgICBHRVRfSElHSF9XT1JEKGh4LHgpOwotCSAgICBrID0gKChoeCYweDdmZjAwMDAwKT4+MjApIC0gNTQ7Ci0gICAgICAgICAgICBpZiAobjwgLTUwMDAwKSByZXR1cm4gdGlueSp4OyAJLyp1bmRlcmZsb3cqLwotCSAgICB9Ci0gICAgICAgIGlmIChrPT0weDdmZikgcmV0dXJuIHgreDsJCS8qIE5hTiBvciBJbmYgKi8KLSAgICAgICAgayA9IGsrbjsKLSAgICAgICAgaWYgKGsgPiAgMHg3ZmUpIHJldHVybiBodWdlKl9jb3B5c2lnbihodWdlLHgpOyAvKiBvdmVyZmxvdyAgKi8KLSAgICAgICAgaWYgKGsgPiAwKSAJCQkJLyogbm9ybWFsIHJlc3VsdCAqLwotCSAgICB7U0VUX0hJR0hfV09SRCh4LChoeCYweDgwMGZmZmZmKXwoazw8MjApKTsgcmV0dXJuIHg7fQotICAgICAgICBpZiAoayA8PSAtNTQpIHsKLSAgICAgICAgICAgIGlmIChuID4gNTAwMDApIAkvKiBpbiBjYXNlIGludGVnZXIgb3ZlcmZsb3cgaW4gbitrICovCi0JCXJldHVybiBodWdlKl9jb3B5c2lnbihodWdlLHgpOwkvKm92ZXJmbG93Ki8KLQkgICAgZWxzZSByZXR1cm4gdGlueSpfY29weXNpZ24odGlueSx4KTsgCS8qdW5kZXJmbG93Ki8KLQl9Ci0gICAgICAgIGsgKz0gNTQ7CQkJCS8qIHN1Ym5vcm1hbCByZXN1bHQgKi8KLQlTRVRfSElHSF9XT1JEKHgsKGh4JjB4ODAwZmZmZmYpfChrPDwyMCkpOwotICAgICAgICByZXR1cm4geCp0d29tNTQ7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9sZWdhY3lfMzJfYml0X3N1cHBvcnQuY3BwIGIvbGliYy9iaW9uaWMvbGVnYWN5XzMyX2JpdF9zdXBwb3J0LmNwcAppbmRleCBkN2NjZGI5Li43M2Y3N2JlIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9sZWdhY3lfMzJfYml0X3N1cHBvcnQuY3BwCisrKyBiL2xpYmMvYmlvbmljL2xlZ2FjeV8zMl9iaXRfc3VwcG9ydC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtNTgsMTEgKzU5LDEzIEBACiBpbnQgZnN0YXRmcyhpbnQgZmQsIHN0cnVjdCBzdGF0ZnMqIHN0YXQpIHsKICAgcmV0dXJuIF9fZnN0YXRmczY0KGZkLCBzaXplb2YoKnN0YXQpLCBzdGF0KTsKIH0KK19fc3Ryb25nX2FsaWFzKGZzdGF0ZnM2NCwgZnN0YXRmcyk7CiAKIC8vIEZvciBzdGF0ZnMgd2UgbmVlZCB0byBhZGQgdGhlIGV4dHJhIGFyZ3VtZW50IGdpdmluZyB0aGUga2VybmVsIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuCiBpbnQgc3RhdGZzKGNvbnN0IGNoYXIqIHBhdGgsIHN0cnVjdCBzdGF0ZnMqIHN0YXQpIHsKICAgcmV0dXJuIF9fc3RhdGZzNjQocGF0aCwgc2l6ZW9mKCpzdGF0KSwgc3RhdCk7CiB9CitfX3N0cm9uZ19hbGlhcyhzdGF0ZnM2NCwgc3RhdGZzKTsKIAogLy8gRm9yIGxzZWVrNjQgd2UgbmVlZCB0byB1c2UgdGhlIGxsc2VlayBzeXN0ZW0gY2FsbCB3aGljaCBzcGxpdHMgdGhlIG9mZjY0X3QgaW4gdHdvIGFuZAogLy8gcmV0dXJucyB0aGUgb2ZmNjRfdCByZXN1bHQgdmlhIGEgcG9pbnRlciBiZWNhdXNlIDMyLWJpdCBrZXJuZWxzIGNhbid0IHJldHVybiA2NC1iaXQgcmVzdWx0cy4KQEAgLTg2LDYgKzg5LDExIEBACiAgIHJldHVybiBwd3JpdGU2NChmZCwgYnVmLCBieXRlX2NvdW50LCBzdGF0aWNfY2FzdDxvZmY2NF90PihvZmZzZXQpKTsKIH0KIAorLy8gVGhlcmUgaXMgbm8gZmFsbG9jYXRlIGZvciAzMi1iaXQgb2ZmX3QsIHNvIHdlIG5lZWQgdG8gd2lkZW4gYW5kIGNhbGwgZmFsbG9jYXRlNjQuCitpbnQgZmFsbG9jYXRlKGludCBmZCwgaW50IG1vZGUsIG9mZl90IG9mZnNldCwgb2ZmX3QgbGVuZ3RoKSB7CisgIHJldHVybiBmYWxsb2NhdGU2NChmZCwgbW9kZSwgc3RhdGljX2Nhc3Q8b2ZmNjRfdD4ob2Zmc2V0KSwgc3RhdGljX2Nhc3Q8b2ZmNjRfdD4obGVuZ3RoKSk7Cit9CisKIC8vIFRoZXJlIGlzIG5vIGdldHJsaW1pdDY0IHN5c3RlbSBjYWxsLCBzbyB3ZSBuZWVkIHRvIHVzZSBwcmxpbWl0NjQuCiBpbnQgZ2V0cmxpbWl0NjQoaW50IHJlc291cmNlLCBybGltaXQ2NCogbGltaXRzNjQpIHsKICAgcmV0dXJuIHBybGltaXQ2NCgwLCByZXNvdXJjZSwgTlVMTCwgbGltaXRzNjQpOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGZzNjRfc3VwcG9ydC5jcHAgYi9saWJjL2Jpb25pYy9sZnM2NF9zdXBwb3J0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjc5NWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbGZzNjRfc3VwcG9ydC5jcHAKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxmdHcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50IG1rc3RlbXA2NChjaGFyKiBmaWxlbmFtZSkgeworICAvLyBEZWxlZ2F0aW9uIHdpbGwgd29yayBpbiB0aGlzIGNhc2UgYmVjYXVzZSBhbGwgdGhlIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzCisgIC8vIGFyZSBhbHJlYWR5IDY0LWJpdCByZWFkeS4gSW4gcGFydGljdWxhciwgd2UgZG9uJ3QgaGF2ZSBub24tT19MQVJHRUZJTEUKKyAgLy8gb3BlbiAob3VyIG9wZW4gaXMgYWN0dWFsbHkgb3BlbjY0KSBhbmQgc3RhdCBhbmQgc3RhdDY0IGFyZSB0aGUgc2FtZS4KKyAgcmV0dXJuIG1rc3RlbXAoZmlsZW5hbWUpOworfQorCit0eXBlZGVmIGludCAoKmZ0d19mbikoY29uc3QgY2hhciosIGNvbnN0IHN0cnVjdCBzdGF0KiwgaW50KTsKK3R5cGVkZWYgaW50ICgqbmZ0d19mbikoY29uc3QgY2hhciosIGNvbnN0IHN0cnVjdCBzdGF0KiwgaW50LCBzdHJ1Y3QgRlRXKik7CisKK2ludCBmdHc2NChjb25zdCBjaGFyICpkaXJwYXRoLAorICAgIGludCAoKmZuKShjb25zdCBjaGFyKiwgY29uc3Qgc3RydWN0IHN0YXQ2NCosIGludCksIGludCBub3BlbmZkKSB7CisgIHJldHVybiBmdHcoZGlycGF0aCwgcmVpbnRlcnByZXRfY2FzdDxmdHdfZm4+KGZuKSwgbm9wZW5mZCk7Cit9CisKK2ludCBuZnR3NjQoY29uc3QgY2hhciAqIGRpcnBhdGgsCisgICAgaW50ICgqZm4pKGNvbnN0IGNoYXIqLCBjb25zdCBzdHJ1Y3Qgc3RhdDY0KiwgaW50LCBzdHJ1Y3QgRlRXKiksCisgICAgaW50IG5vcGVuZmQsIGludCBmbGFncykgeworICByZXR1cm4gbmZ0dyhkaXJwYXRoLCByZWludGVycHJldF9jYXN0PG5mdHdfZm4+KGZuKSwgbm9wZW5mZCwgZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGliY19pbml0X2NvbW1vbi5jcHAgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmNwcAppbmRleCAxY2ZhZjUwLi45NTAwNzNhIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmNwcAorKysgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmNwcApAQCAtMzYsMTAgKzM2LDggQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzeXMvYXV4di5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNpbmNsdWRlICJhdGV4aXQuaCIKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19hdXh2LmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfc3NwLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfdGxzLmgiCkBAIC00NywxMSArNDUsMTIgQEAKICNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCiAKIGV4dGVybiAiQyIgYWJvcnRfbXNnX3QqKiBfX2Fib3J0X21lc3NhZ2VfcHRyOwotZXh0ZXJuICJDIiB1aW50cHRyX3QgX19nZXRfc3Aodm9pZCk7CiBleHRlcm4gIkMiIGludCBfX3N5c3RlbV9wcm9wZXJ0aWVzX2luaXQodm9pZCk7CiBleHRlcm4gIkMiIGludCBfX3NldF90bHModm9pZCogcHRyKTsKIGV4dGVybiAiQyIgaW50IF9fc2V0X3RpZF9hZGRyZXNzKGludCogdGlkX2FkZHJlc3MpOwogCit2b2lkIF9fbGliY19pbml0X3Zkc28oKTsKKwogLy8gTm90IHB1YmxpYywgYnV0IHdlbGwta25vd24gaW4gdGhlIEJTRHMuCiBjb25zdCBjaGFyKiBfX3Byb2duYW1lOwogCkBAIC02MSwyMyArNjAsMTIgQEAKIC8vIERlY2xhcmVkIGluICJwcml2YXRlL2Jpb25pY19zc3AuaCIuCiB1aW50cHRyX3QgX19zdGFja19jaGtfZ3VhcmQgPSAwOwogCi1zdGF0aWMgc2l6ZV90IGdldF9tYWluX3RocmVhZF9zdGFja19zaXplKCkgewotICBybGltaXQgc3RhY2tfbGltaXQ7Ci0gIGludCBybGltaXRfcmVzdWx0ID0gZ2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJnN0YWNrX2xpbWl0KTsKLSAgaWYgKChybGltaXRfcmVzdWx0ID09IDApICYmCi0gICAgICAoc3RhY2tfbGltaXQucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkgJiYKLSAgICAgIChzdGFja19saW1pdC5ybGltX2N1ciA+IFBUSFJFQURfU1RBQ0tfTUlOKSkgewotICAgIHJldHVybiAoc3RhY2tfbGltaXQucmxpbV9jdXIgJiB+KFBBR0VfU0laRSAtIDEpKTsKLSAgfQotICByZXR1cm4gUFRIUkVBRF9TVEFDS19TSVpFX0RFRkFVTFQ7Ci19Ci0KIC8qIEluaXQgVExTIGZvciB0aGUgaW5pdGlhbCB0aHJlYWQuIENhbGxlZCBieSB0aGUgbGlua2VyIF9iZWZvcmVfIGxpYmMgaXMgbWFwcGVkCiAgKiBpbiBtZW1vcnkuIEJld2FyZTogYWxsIHdyaXRlcyB0byBsaWJjIGdsb2JhbHMgZnJvbSB0aGlzIGZ1bmN0aW9uIHdpbGwKICAqIGFwcGx5IHRvIGxpbmtlci1wcml2YXRlIGNvcGllcyBhbmQgd2lsbCBub3QgYmUgdmlzaWJsZSBmcm9tIGxpYmMgbGF0ZXIgb24uCiAgKgogICogTm90ZTogdGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgcHRocmVhZF9pbnRlcm5hbF90IGZvciB0aGUgaW5pdGlhbCB0aHJlYWQgYW5kCi0gKiBzdG9yZXMgdGhlIHBvaW50ZXIgaW4gVExTLCBidXQgZG9lcyBub3QgYWRkIGl0IHRvIHB0aHJlYWQncyBnVGhyZWFkTGlzdC4gVGhpcworICogc3RvcmVzIHRoZSBwb2ludGVyIGluIFRMUywgYnV0IGRvZXMgbm90IGFkZCBpdCB0byBwdGhyZWFkJ3MgdGhyZWFkIGxpc3QuIFRoaXMKICAqIGhhcyB0byBiZSBkb25lIGxhdGVyIGZyb20gbGliYyBpdHNlbGYgKHNlZSBfX2xpYmNfaW5pdF9jb21tb24pLgogICoKICAqIFRoaXMgZnVuY3Rpb24gYWxzbyBzdG9yZXMgYSBwb2ludGVyIHRvIHRoZSBrZXJuZWwgYXJndW1lbnQgYmxvY2sgaW4gYSBUTFMgc2xvdCB0byBiZQpAQCAtODYsMjIgKzc0LDI0IEBACiB2b2lkIF9fbGliY19pbml0X3RscyhLZXJuZWxBcmd1bWVudEJsb2NrJiBhcmdzKSB7CiAgIF9fbGliY19hdXh2ID0gYXJncy5hdXh2OwogCi0gIHVpbnRwdHJfdCBzdGFja190b3AgPSAoX19nZXRfc3AoKSAmIH4oUEFHRV9TSVpFIC0gMSkpICsgUEFHRV9TSVpFOwotICBzaXplX3Qgc3RhY2tfc2l6ZSA9IGdldF9tYWluX3RocmVhZF9zdGFja19zaXplKCk7Ci0gIHVpbnRwdHJfdCBzdGFja19ib3R0b20gPSBzdGFja190b3AgLSBzdGFja19zaXplOwotCiAgIHN0YXRpYyB2b2lkKiB0bHNbQklPTklDX1RMU19TTE9UU107CiAgIHN0YXRpYyBwdGhyZWFkX2ludGVybmFsX3QgbWFpbl90aHJlYWQ7CiAgIG1haW5fdGhyZWFkLnRscyA9IHRsczsKIAogICAvLyBUZWxsIHRoZSBrZXJuZWwgdG8gY2xlYXIgb3VyIHRpZCBmaWVsZCB3aGVuIHdlIGV4aXQsIHNvIHdlJ3JlIGxpa2UgYW55IG90aGVyIHB0aHJlYWQuCisgIC8vIEFzIGEgc2lkZS1lZmZlY3QsIHRoaXMgdGVsbHMgdXMgb3VyIHBpZCAod2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIG1haW4gdGhyZWFkJ3MgdGlkKS4KICAgbWFpbl90aHJlYWQudGlkID0gX19zZXRfdGlkX2FkZHJlc3MoJm1haW5fdGhyZWFkLnRpZCk7CisgIG1haW5fdGhyZWFkLnNldF9jYWNoZWRfcGlkKG1haW5fdGhyZWFkLnRpZCk7CiAKLSAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgc3RhY2ssIGFuZCB3ZSBkb24ndCB3YW50IHRvIGZyZWUgaXQgdXAgb24gZXhpdCAoYmVjYXVzZSB0aGluZ3MgbGlrZQotICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBnbG9iYWwgc2NvcGUgbGl2ZSBvbiBpdCkuCisgIC8vIFdlIGRvbid0IHdhbnQgdG8gZnJlZSB0aGUgbWFpbiB0aHJlYWQncyBzdGFjayBldmVuIHdoZW4gdGhlIG1haW4gdGhyZWFkIGV4aXRzCisgIC8vIGJlY2F1c2UgdGhpbmdzIGxpa2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggZ2xvYmFsIHNjb3BlIGxpdmUgb24gaXQuCisgIC8vIFdlIGFsc28gY2FuJ3QgZnJlZSB0aGUgcHRocmVhZF9pbnRlcm5hbF90IGl0c2VsZiwgc2luY2UgdGhhdCBsaXZlcyBvbiB0aGUgbWFpbgorICAvLyB0aHJlYWQncyBzdGFjayByYXRoZXIgdGhhbiBvbiB0aGUgaGVhcC4KICAgcHRocmVhZF9hdHRyX2luaXQoJm1haW5fdGhyZWFkLmF0dHIpOwotICBwdGhyZWFkX2F0dHJfc2V0c3RhY2soJm1haW5fdGhyZWFkLmF0dHIsICh2b2lkKikgc3RhY2tfYm90dG9tLCBzdGFja19zaXplKTsKICAgbWFpbl90aHJlYWQuYXR0ci5mbGFncyA9IFBUSFJFQURfQVRUUl9GTEFHX1VTRVJfQUxMT0NBVEVEX1NUQUNLIHwgUFRIUkVBRF9BVFRSX0ZMQUdfTUFJTl9USFJFQUQ7CisgIG1haW5fdGhyZWFkLmF0dHIuZ3VhcmRfc2l6ZSA9IDA7IC8vIFRoZSBtYWluIHRocmVhZCBoYXMgbm8gZ3VhcmQgcGFnZS4KKyAgbWFpbl90aHJlYWQuYXR0ci5zdGFja19zaXplID0gMDsgLy8gVXNlciBjb2RlIHNob3VsZCBuZXZlciBzZWUgdGhpczsgd2UnbGwgY29tcHV0ZSBpdCB3aGVuIGFza2VkLgorICAvLyBUT0RPOiB0aGUgbWFpbiB0aHJlYWQncyBzY2hlZF9wb2xpY3kgYW5kIHNjaGVkX3ByaW9yaXR5IG5lZWQgdG8gYmUgcXVlcmllZC4KIAogICBfX2luaXRfdGhyZWFkKCZtYWluX3RocmVhZCwgZmFsc2UpOwogICBfX2luaXRfdGxzKCZtYWluX3RocmVhZCk7CkBAIC0xMjcsNiArMTE3LDggQEAKICAgX3B0aHJlYWRfaW50ZXJuYWxfYWRkKG1haW5fdGhyZWFkKTsKIAogICBfX3N5c3RlbV9wcm9wZXJ0aWVzX2luaXQoKTsgLy8gUmVxdWlyZXMgJ2Vudmlyb24nLgorCisgIF9fbGliY19pbml0X3Zkc28oKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgbm9ybWFsIHByb2dyYW0gdGVybWluYXRpb24KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uaCBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uaAppbmRleCA1OWRjN2RmLi4zMDMyZjk5IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmgKKysrIGIvbGliYy9iaW9uaWMvbGliY19pbml0X2NvbW1vbi5oCkBAIC00MywxNCArNDMsMTQgQEAKIF9fbm9yZXR1cm4gdm9pZCBfX2xpYmNfaW5pdCh2b2lkKiByYXdfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpzbGluZ3Nob3QpKGludCwgY2hhcioqLCBjaGFyKiopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdG9yc19hcnJheV90IGNvbnN0ICogY29uc3Qgc3RydWN0b3JzKTsKLXZvaWQgX19saWJjX2Zpbmkodm9pZCogZmluaXRfYXJyYXkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdG9yc19hcnJheV90IGNvbnN0KiBjb25zdCBzdHJ1Y3RvcnMpOworX19MSUJDX0hJRERFTl9fIHZvaWQgX19saWJjX2Zpbmkodm9pZCogZmluaXRfYXJyYXkpOwogCiBfX0VORF9ERUNMUwogCiAjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKIGNsYXNzIEtlcm5lbEFyZ3VtZW50QmxvY2s7Ci12b2lkIF9fTElCQ19ISURERU5fXyBfX2xpYmNfaW5pdF9jb21tb24oS2VybmVsQXJndW1lbnRCbG9jayYgYXJncyk7CitfX0xJQkNfSElEREVOX18gdm9pZCBfX2xpYmNfaW5pdF9jb21tb24oS2VybmVsQXJndW1lbnRCbG9jayYgYXJncyk7CiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9saWJjX2luaXRfZHluYW1pYy5jcHAgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfZHluYW1pYy5jcHAKaW5kZXggNjFmYjg4Ny4uNzgxMjVmOSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbGliY19pbml0X2R5bmFtaWMuY3BwCisrKyBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9keW5hbWljLmNwcApAQCAtNDgsMTYgKzQ4LDE2IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8ZWxmLmg+Ci0jaW5jbHVkZSAiYXRleGl0LmgiCiAjaW5jbHVkZSAibGliY19pbml0X2NvbW1vbi5oIgogCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfdGxzLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9LZXJuZWxBcmd1bWVudEJsb2NrLmgiCiAKIGV4dGVybiAiQyIgewotICBleHRlcm4gdm9pZCBwdGhyZWFkX2RlYnVnX2luaXQodm9pZCk7CiAgIGV4dGVybiB2b2lkIG1hbGxvY19kZWJ1Z19pbml0KHZvaWQpOwogICBleHRlcm4gdm9pZCBtYWxsb2NfZGVidWdfZmluaSh2b2lkKTsKKyAgZXh0ZXJuIHZvaWQgbmV0ZENsaWVudEluaXQodm9pZCk7CisgIGV4dGVybiBpbnQgX19jeGFfYXRleGl0KHZvaWQgKCopKHZvaWQgKiksIHZvaWQgKiwgdm9pZCAqKTsKIH07CiAKIC8vIFdlIGZsYWcgdGhlIF9fbGliY19wcmVpbml0IGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3IgdG8gZW5zdXJlCkBAIC03Niw5ICs3Niw5IEBACiAKICAgX19saWJjX2luaXRfY29tbW9uKCphcmdzKTsKIAotICAvLyBIb29rcyBmb3IgdGhlIGRlYnVnIG1hbGxvYyBhbmQgcHRocmVhZCBsaWJyYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0aGF0IHdlJ3JlIHN0YXJ0aW5nIHVwLgotICBwdGhyZWFkX2RlYnVnX2luaXQoKTsKKyAgLy8gSG9va3MgZm9yIHZhcmlvdXMgbGlicmFyaWVzIHRvIGxldCB0aGVtIGtub3cgdGhhdCB3ZSdyZSBzdGFydGluZyB1cC4KICAgbWFsbG9jX2RlYnVnX2luaXQoKTsKKyAgbmV0ZENsaWVudEluaXQoKTsKIH0KIAogX19MSUJDX0hJRERFTl9fIHZvaWQgX19saWJjX3Bvc3RmaW5pKCkgewpAQCAtOTQsNyArOTQsNyBAQAogLy8gTm90ZSB0aGF0IHRoZSBkeW5hbWljIGxpbmtlciBoYXMgYWxzbyBydW4gYWxsIGNvbnN0cnVjdG9ycyBpbiB0aGUKIC8vIGV4ZWN1dGFibGUgYXQgdGhpcyBwb2ludC4KIF9fbm9yZXR1cm4gdm9pZCBfX2xpYmNfaW5pdCh2b2lkKiByYXdfYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSBfX3VudXNlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpzbGluZ3Nob3QpKGludCwgY2hhcioqLCBjaGFyKiopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdG9yc19hcnJheV90IGNvbnN0ICogY29uc3Qgc3RydWN0b3JzKSB7CiAKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuY3BwIGIvbGliYy9iaW9uaWMvbGliY19pbml0X3N0YXRpYy5jcHAKaW5kZXggMTgyNTE2Ny4uYmMxMWYzZCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbGliY19pbml0X3N0YXRpYy5jcHAKKysrIGIvbGliYy9iaW9uaWMvbGliY19pbml0X3N0YXRpYy5jcHAKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxzeXMvYXV4di5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAKLSNpbmNsdWRlICJhdGV4aXQuaCIKICNpbmNsdWRlICJsaWJjX2luaXRfY29tbW9uLmgiCiAjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgogCkBAIC02MCw2ICs1OSw4IEBACiAvLyBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIGEgcGFnZS4KICNkZWZpbmUgUEFHRV9FTkQoeCkgICAgUEFHRV9TVEFSVCgoeCkgKyAoUEFHRV9TSVpFLTEpKQogCitleHRlcm4gIkMiIGludCBfX2N4YV9hdGV4aXQodm9pZCAoKikodm9pZCAqKSwgdm9pZCAqLCB2b2lkICopOworCiBzdGF0aWMgdm9pZCBjYWxsX2FycmF5KHZvaWQoKipsaXN0KSgpKSB7CiAgIC8vIEZpcnN0IGVsZW1lbnQgaXMgLTEsIGxpc3QgaXMgbnVsbC10ZXJtaW5hdGVkCiAgIHdoaWxlICgqKytsaXN0KSB7CkBAIC02OCwxNiArNjksMTYgQEAKIH0KIAogc3RhdGljIHZvaWQgYXBwbHlfZ251X3JlbHJvKCkgewotICBFbGZfUGhkciogcGhkcl9zdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmX1BoZHIqPihnZXRhdXh2YWwoQVRfUEhEUikpOworICBFbGZXKFBoZHIpKiBwaGRyX3N0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFBoZHIpKj4oZ2V0YXV4dmFsKEFUX1BIRFIpKTsKICAgdW5zaWduZWQgbG9uZyBpbnQgcGhkcl9jdCA9IGdldGF1eHZhbChBVF9QSE5VTSk7CiAKLSAgZm9yIChFbGZfUGhkciogcGhkciA9IHBoZHJfc3RhcnQ7IHBoZHIgPCAocGhkcl9zdGFydCArIHBoZHJfY3QpOyBwaGRyKyspIHsKKyAgZm9yIChFbGZXKFBoZHIpKiBwaGRyID0gcGhkcl9zdGFydDsgcGhkciA8IChwaGRyX3N0YXJ0ICsgcGhkcl9jdCk7IHBoZHIrKykgewogICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfR05VX1JFTFJPKSB7CiAgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgICBFbGZfQWRkciBzZWdfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQocGhkci0+cF92YWRkcik7Ci0gICAgRWxmX0FkZHIgc2VnX3BhZ2VfZW5kID0gUEFHRV9FTkQocGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3opOworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2Vfc3RhcnQgPSBQQUdFX1NUQVJUKHBoZHItPnBfdmFkZHIpOworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2VfZW5kID0gUEFHRV9FTkQocGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3opOwogCiAgICAgLy8gQ2hlY2sgcmV0dXJuIHZhbHVlIGhlcmU/IFdoYXQgZG8gd2UgZG8gaWYgd2UgZmFpbD8KICAgICBtcHJvdGVjdChyZWludGVycHJldF9jYXN0PHZvaWQqPihzZWdfcGFnZV9zdGFydCksIHNlZ19wYWdlX2VuZCAtIHNlZ19wYWdlX3N0YXJ0LCBQUk9UX1JFQUQpOwpAQCAtODUsNyArODYsNyBAQAogfQogCiBfX25vcmV0dXJuIHZvaWQgX19saWJjX2luaXQodm9pZCogcmF3X2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKm9uZXhpdCkodm9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKm9uZXhpdCkodm9pZCkgX191bnVzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqc2xpbmdzaG90KShpbnQsIGNoYXIqKiwgY2hhcioqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RvcnNfYXJyYXlfdCBjb25zdCAqIGNvbnN0IHN0cnVjdG9ycykgewogICBLZXJuZWxBcmd1bWVudEJsb2NrIGFyZ3MocmF3X2FyZ3MpOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGliY19sb2dnaW5nLmNwcCBiL2xpYmMvYmlvbmljL2xpYmNfbG9nZ2luZy5jcHAKaW5kZXggMmQwMDU5Ni4uNTY1NTUyNiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbGliY19sb2dnaW5nLmNwcAorKysgYi9saWJjL2Jpb25pYy9saWJjX2xvZ2dpbmcuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiLi4vcHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIgLy8gUmVsYXRpdmUgcGF0aCBzbyB3ZSBjYW4gI2luY2x1ZGUgdGhpcyAuY3BwIGZpbGUgZm9yIHRlc3RpbmcuCiAjaW5jbHVkZSAiLi4vcHJpdmF0ZS9TY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIuaCIKIAorI2luY2x1ZGUgPGFuZHJvaWQvc2V0X2Fib3J0X21lc3NhZ2UuaD4KICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CkBAIC0zOCwxMCArMzksMTQgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IGdBYm9ydE1zZ0xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnX2Fib3J0X21zZ19sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKIAogX19MSUJDX0hJRERFTl9fIGFib3J0X21zZ190KiogX19hYm9ydF9tZXNzYWdlX3B0cjsgLy8gQWNjZXNzaWJsZSB0byBfX2xpYmNfaW5pdF9jb21tb24uCiAKQEAgLTEzNiw3ICsxNDEsNyBAQAogCiAgICAgZm9yICg7OykgewogICAgICAgICBpbnQgY2ggPSAqcDsKLSAgICAgICAgdW5zaWduZWQgZCA9ICh1bnNpZ25lZCkoY2ggLSAnMCcpOworICAgICAgICB1bnNpZ25lZCBkID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoIC0gJzAnKTsKIAogICAgICAgICBpZiAoZCA+PSAxMFUpIHsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjg5LDEzICsyOTQsMTMgQEAKICAgICAgICAgLyogcGFyc2UgZmllbGQgd2lkdGggKi8KICAgICAgICAgaWYgKChjID49ICcwJyAmJiBjIDw9ICc5JykpIHsKICAgICAgICAgICAgIG5uIC0tOwotICAgICAgICAgICAgd2lkdGggPSAoaW50KXBhcnNlX2RlY2ltYWwoZm9ybWF0LCAmbm4pOworICAgICAgICAgICAgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlX2RlY2ltYWwoZm9ybWF0LCAmbm4pKTsKICAgICAgICAgICAgIGMgPSBmb3JtYXRbbm4rK107CiAgICAgICAgIH0KIAogICAgICAgICAvKiBwYXJzZSBwcmVjaXNpb24gKi8KICAgICAgICAgaWYgKGMgPT0gJy4nKSB7Ci0gICAgICAgICAgICBwcmVjID0gKGludClwYXJzZV9kZWNpbWFsKGZvcm1hdCwgJm5uKTsKKyAgICAgICAgICAgIHByZWMgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlX2RlY2ltYWwoZm9ybWF0LCAmbm4pKTsKICAgICAgICAgICAgIGMgPSBmb3JtYXRbbm4rK107CiAgICAgICAgIH0KIApAQCAtMzQwLDEwICszNDUsMTAgQEAKICAgICAgICAgfSBlbHNlIGlmIChjID09ICdjJykgewogICAgICAgICAgICAgLyogY2hhcmFjdGVyICovCiAgICAgICAgICAgICAvKiBOT1RFOiBjaGFyIGlzIHByb21vdGVkIHRvIGludCB3aGVuIHBhc3NlZCB0aHJvdWdoIHRoZSBzdGFjayAqLwotICAgICAgICAgICAgYnVmZmVyWzBdID0gKGNoYXIpIHZhX2FyZyhhcmdzLCBpbnQpOworICAgICAgICAgICAgYnVmZmVyWzBdID0gc3RhdGljX2Nhc3Q8Y2hhcj4odmFfYXJnKGFyZ3MsIGludCkpOwogICAgICAgICAgICAgYnVmZmVyWzFdID0gJ1wwJzsKICAgICAgICAgfSBlbHNlIGlmIChjID09ICdwJykgewotICAgICAgICAgICAgdWludDY0X3QgIHZhbHVlID0gKHVpbnRwdHJfdCkgdmFfYXJnKGFyZ3MsIHZvaWQqKTsKKyAgICAgICAgICAgIHVpbnQ2NF90ICB2YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YV9hcmcoYXJncywgdm9pZCopKTsKICAgICAgICAgICAgIGJ1ZmZlclswXSA9ICcwJzsKICAgICAgICAgICAgIGJ1ZmZlclsxXSA9ICd4JzsKICAgICAgICAgICAgIGZvcm1hdF9pbnRlZ2VyKGJ1ZmZlciArIDIsIHNpemVvZihidWZmZXIpIC0gMiwgdmFsdWUsICd4Jyk7CkBAIC0zNTYsOCArMzYxLDggQEAKICAgICAgICAgICAgICAqICAgICAgIHRocm91Z2ggdGhlIHN0YWNrCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHN3aXRjaCAoYnl0ZWxlbikgewotICAgICAgICAgICAgY2FzZSAxOiB2YWx1ZSA9ICh1aW50OF90KSAgdmFfYXJnKGFyZ3MsIGludCk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyOiB2YWx1ZSA9ICh1aW50MTZfdCkgdmFfYXJnKGFyZ3MsIGludCk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOiB2YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhX2FyZyhhcmdzLCBpbnQpKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6IHZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHZhX2FyZyhhcmdzLCBpbnQpKTsgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIDQ6IHZhbHVlID0gdmFfYXJnKGFyZ3MsIHVpbnQzMl90KTsgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIDg6IHZhbHVlID0gdmFfYXJnKGFyZ3MsIHVpbnQ2NF90KTsgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm47ICAvKiBzaG91bGQgbm90IGhhcHBlbiAqLwpAQCAtMzY2LDcgKzM3MSw3IEBACiAgICAgICAgICAgICAvKiBzaWduIGV4dGVuc2lvbiwgaWYgbmVlZGVkICovCiAgICAgICAgICAgICBpZiAoaXNfc2lnbmVkKSB7CiAgICAgICAgICAgICAgICAgaW50IHNoaWZ0ID0gNjQgLSA4KmJ5dGVsZW47Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAodWludDY0X3QpKCgoaW50NjRfdCkodmFsdWUgPDwgc2hpZnQpKSA+PiBzaGlmdCk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oKHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlIDw8IHNoaWZ0KSkgPj4gc2hpZnQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBmb3JtYXQgdGhlIG51bWJlciBwcm9wZXJseSBpbnRvIG91ciBidWZmZXIgKi8KQEAgLTQ0MCw3ICs0NDUsNzggQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmZGVmIFRBUkdFVF9VU0VTX0xPR0QKK3N0YXRpYyBpbnQgX19saWJjX29wZW5fbG9nX3NvY2tldCgpCit7CisgIC8vIFRvRG86IElkZWFsbHkgd2Ugd2FudCB0aGlzIHRvIGZhaWwgaWYgdGhlIGdpZCBvZiB0aGUgY3VycmVudAorICAvLyBwcm9jZXNzIGlzIEFJRF9MT0dELCBidXQgd2lsbCBoYXZlIHRvIHdhaXQgdW50aWwgd2UgaGF2ZQorICAvLyByZWdpc3RlcmVkIHRoaXMgaW4gcHJpdmF0ZS9hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnLmguIFdlIGhhdmUKKyAgLy8gZm91bmQgdGhhdCBhbGwgbG9nZCBjcmFzaGVzIHRodXMgZmFyIGhhdmUgaGFkIG5vIHByb2JsZW0gc3R1ZmZpbmcKKyAgLy8gdGhlIFVOSVggZG9tYWluIHNvY2tldCBhbmQgbW92aW5nIG9uIHNvIG5vdCBjcml0aWNhbCAqdG9kYXkqLgorCisgIGludCBsb2dfZmQgPSBURU1QX0ZBSUxVUkVfUkVUUlkoc29ja2V0KFBGX1VOSVgsIFNPQ0tfREdSQU0gfCBTT0NLX0NMT0VYRUMsIDApKTsKKyAgaWYgKGxvZ19mZCA8IDApIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAoZmNudGwobG9nX2ZkLCBGX1NFVEZMLCBPX05PTkJMT0NLKSA9PSAtMSkgeworICAgIGNsb3NlKGxvZ19mZCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgdW5pb24geworICAgIHN0cnVjdCBzb2NrYWRkciAgICBhZGRyOworICAgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyVW47CisgIH0gdTsKKyAgbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOworICB1LmFkZHJVbi5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgc3RybGNweSh1LmFkZHJVbi5zdW5fcGF0aCwgIi9kZXYvc29ja2V0L2xvZ2R3Iiwgc2l6ZW9mKHUuYWRkclVuLnN1bl9wYXRoKSk7CisKKyAgaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShjb25uZWN0KGxvZ19mZCwgJnUuYWRkciwgc2l6ZW9mKHUuYWRkclVuKSkpICE9IDApIHsKKyAgICBjbG9zZShsb2dfZmQpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIHJldHVybiBsb2dfZmQ7Cit9CisKK3N0cnVjdCBsb2dfdGltZSB7IC8vIFdpcmUgZm9ybWF0CisgIHVpbnQzMl90IHR2X3NlYzsKKyAgdWludDMyX3QgdHZfbnNlYzsKK307CisjZW5kaWYKKwogc3RhdGljIGludCBfX2xpYmNfd3JpdGVfbG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciogdGFnLCBjb25zdCBjaGFyKiBtc2cpIHsKKyNpZmRlZiBUQVJHRVRfVVNFU19MT0dECisgIGludCBtYWluX2xvZ19mZCA9IF9fbGliY19vcGVuX2xvZ19zb2NrZXQoKTsKKworICBpZiAobWFpbl9sb2dfZmQgPT0gLTEpIHsKKyAgICAvLyBUcnkgc3RkZXJyIGluc3RlYWQuCisgICAgcmV0dXJuIF9fbGliY193cml0ZV9zdGRlcnIodGFnLCBtc2cpOworICB9CisKKyAgaW92ZWMgdmVjWzZdOworICBjaGFyIGxvZ19pZCA9IChwcmlvcml0eSA9PSBBTkRST0lEX0xPR19GQVRBTCkgPyBMT0dfSURfQ1JBU0ggOiBMT0dfSURfTUFJTjsKKyAgdmVjWzBdLmlvdl9iYXNlID0gJmxvZ19pZDsKKyAgdmVjWzBdLmlvdl9sZW4gPSBzaXplb2YobG9nX2lkKTsKKyAgdWludDE2X3QgdGlkID0gZ2V0dGlkKCk7CisgIHZlY1sxXS5pb3ZfYmFzZSA9ICZ0aWQ7CisgIHZlY1sxXS5pb3ZfbGVuID0gc2l6ZW9mKHRpZCk7CisgIHRpbWVzcGVjIHRzOworICBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOworICBsb2dfdGltZSByZWFsdGltZV90czsKKyAgcmVhbHRpbWVfdHMudHZfc2VjID0gdHMudHZfc2VjOworICByZWFsdGltZV90cy50dl9uc2VjID0gdHMudHZfbnNlYzsKKyAgdmVjWzJdLmlvdl9iYXNlID0gJnJlYWx0aW1lX3RzOworICB2ZWNbMl0uaW92X2xlbiA9IHNpemVvZihyZWFsdGltZV90cyk7CisKKyAgdmVjWzNdLmlvdl9iYXNlID0gJnByaW9yaXR5OworICB2ZWNbM10uaW92X2xlbiA9IDE7CisgIHZlY1s0XS5pb3ZfYmFzZSA9IGNvbnN0X2Nhc3Q8Y2hhcio+KHRhZyk7CisgIHZlY1s0XS5pb3ZfbGVuID0gc3RybGVuKHRhZykgKyAxOworICB2ZWNbNV0uaW92X2Jhc2UgPSBjb25zdF9jYXN0PGNoYXIqPihtc2cpOworICB2ZWNbNV0uaW92X2xlbiA9IHN0cmxlbihtc2cpICsgMTsKKyNlbHNlCiAgIGludCBtYWluX2xvZ19mZCA9IFRFTVBfRkFJTFVSRV9SRVRSWShvcGVuKCIvZGV2L2xvZy9tYWluIiwgT19DTE9FWEVDIHwgT19XUk9OTFkpKTsKICAgaWYgKG1haW5fbG9nX2ZkID09IC0xKSB7CiAgICAgaWYgKGVycm5vID09IEVOT1RESVIpIHsKQEAgLTQ1Nyw4ICs1MzMsOSBAQAogICB2ZWNbMV0uaW92X2xlbiA9IHN0cmxlbih0YWcpICsgMTsKICAgdmVjWzJdLmlvdl9iYXNlID0gY29uc3RfY2FzdDxjaGFyKj4obXNnKTsKICAgdmVjWzJdLmlvdl9sZW4gPSBzdHJsZW4obXNnKSArIDE7CisjZW5kaWYKIAotICBpbnQgcmVzdWx0ID0gVEVNUF9GQUlMVVJFX1JFVFJZKHdyaXRldihtYWluX2xvZ19mZCwgdmVjLCAzKSk7CisgIGludCByZXN1bHQgPSBURU1QX0ZBSUxVUkVfUkVUUlkod3JpdGV2KG1haW5fbG9nX2ZkLCB2ZWMsIHNpemVvZih2ZWMpIC8gc2l6ZW9mKHZlY1swXSkpKTsKICAgY2xvc2UobWFpbl9sb2dfZmQpOwogICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDc5LDYgKzU1NiwzMSBAQAogfQogCiBzdGF0aWMgaW50IF9fbGliY19hbmRyb2lkX2xvZ19ldmVudChpbnQzMl90IHRhZywgY2hhciB0eXBlLCBjb25zdCB2b2lkKiBwYXlsb2FkLCBzaXplX3QgbGVuKSB7CisjaWZkZWYgVEFSR0VUX1VTRVNfTE9HRAorICBpb3ZlYyB2ZWNbNl07CisgIGNoYXIgbG9nX2lkID0gTE9HX0lEX0VWRU5UUzsKKyAgdmVjWzBdLmlvdl9iYXNlID0gJmxvZ19pZDsKKyAgdmVjWzBdLmlvdl9sZW4gPSBzaXplb2YobG9nX2lkKTsKKyAgdWludDE2X3QgdGlkID0gZ2V0dGlkKCk7CisgIHZlY1sxXS5pb3ZfYmFzZSA9ICZ0aWQ7CisgIHZlY1sxXS5pb3ZfbGVuID0gc2l6ZW9mKHRpZCk7CisgIHRpbWVzcGVjIHRzOworICBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOworICBsb2dfdGltZSByZWFsdGltZV90czsKKyAgcmVhbHRpbWVfdHMudHZfc2VjID0gdHMudHZfc2VjOworICByZWFsdGltZV90cy50dl9uc2VjID0gdHMudHZfbnNlYzsKKyAgdmVjWzJdLmlvdl9iYXNlID0gJnJlYWx0aW1lX3RzOworICB2ZWNbMl0uaW92X2xlbiA9IHNpemVvZihyZWFsdGltZV90cyk7CisKKyAgdmVjWzNdLmlvdl9iYXNlID0gJnRhZzsKKyAgdmVjWzNdLmlvdl9sZW4gPSBzaXplb2YodGFnKTsKKyAgdmVjWzRdLmlvdl9iYXNlID0gJnR5cGU7CisgIHZlY1s0XS5pb3ZfbGVuID0gc2l6ZW9mKHR5cGUpOworICB2ZWNbNV0uaW92X2Jhc2UgPSBjb25zdF9jYXN0PHZvaWQqPihwYXlsb2FkKTsKKyAgdmVjWzVdLmlvdl9sZW4gPSBsZW47CisKKyAgaW50IGV2ZW50X2xvZ19mZCA9IF9fbGliY19vcGVuX2xvZ19zb2NrZXQoKTsKKyNlbHNlCiAgIGlvdmVjIHZlY1szXTsKICAgdmVjWzBdLmlvdl9iYXNlID0gJnRhZzsKICAgdmVjWzBdLmlvdl9sZW4gPSBzaXplb2YodGFnKTsKQEAgLTQ4OCwxMCArNTkwLDEyIEBACiAgIHZlY1syXS5pb3ZfbGVuID0gbGVuOwogCiAgIGludCBldmVudF9sb2dfZmQgPSBURU1QX0ZBSUxVUkVfUkVUUlkob3BlbigiL2Rldi9sb2cvZXZlbnRzIiwgT19DTE9FWEVDIHwgT19XUk9OTFkpKTsKKyNlbmRpZgorCiAgIGlmIChldmVudF9sb2dfZmQgPT0gLTEpIHsKICAgICByZXR1cm4gLTE7CiAgIH0KLSAgaW50IHJlc3VsdCA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZXYoZXZlbnRfbG9nX2ZkLCB2ZWMsIDMpKTsKKyAgaW50IHJlc3VsdCA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZXYoZXZlbnRfbG9nX2ZkLCB2ZWMsIHNpemVvZih2ZWMpIC8gc2l6ZW9mKHZlY1swXSkpKTsKICAgY2xvc2UoZXZlbnRfbG9nX2ZkKTsKICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTUxNiwxMiArNjIwLDE3IEBACiAgIEJ1ZmZlck91dHB1dFN0cmVhbSBvcyhtc2csIHNpemVvZihtc2cpKTsKICAgb3V0X3Zmb3JtYXQob3MsIGZvcm1hdCwgYXJncyk7CiAKLSAgLy8gVE9ETzogbG9nIHRvIHN0ZGVyciBmb3IgdGhlIGJlbmVmaXQgb2YgImFkYiBzaGVsbCIgdXNlcnMuCisgIC8vIGxvZyB0byBzdGRlcnIgZm9yIHRoZSBiZW5lZml0IG9mICJhZGIgc2hlbGwiIHVzZXJzLgorICBzdHJ1Y3QgaW92ZWMgaW92WzJdID0geworICAgIHttc2csIHN0cmxlbihtc2cpfSwKKyAgICB7Y29uc3RfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KCJcbiIpKSwgMX0sCisgIH07CisgIHdyaXRldigyLCBpb3YsIDIpOwogCiAgIC8vIExvZyB0byB0aGUgbG9nIGZvciB0aGUgYmVuZWZpdCBvZiByZWd1bGFyIGFwcCBkZXZlbG9wZXJzICh3aG9zZSBzdGRvdXQgYW5kIHN0ZGVyciBhcmUgY2xvc2VkKS4KICAgX19saWJjX3dyaXRlX2xvZyhBTkRST0lEX0xPR19GQVRBTCwgImxpYmMiLCBtc2cpOwogCi0gIF9fbGliY19zZXRfYWJvcnRfbWVzc2FnZShtc2cpOworICBhbmRyb2lkX3NldF9hYm9ydF9tZXNzYWdlKG1zZyk7CiB9CiAKIHZvaWQgX19saWJjX2ZhdGFsX25vX2Fib3J0KGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSB7CkBAIC01MzksMjEgKzY0OCwzMyBAQAogICBhYm9ydCgpOwogfQogCi12b2lkIF9fbGliY19zZXRfYWJvcnRfbWVzc2FnZShjb25zdCBjaGFyKiBtc2cpIHsKK3ZvaWQgYW5kcm9pZF9zZXRfYWJvcnRfbWVzc2FnZShjb25zdCBjaGFyKiBtc2cpIHsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ19hYm9ydF9tc2dfbG9jayk7CisKKyAgaWYgKF9fYWJvcnRfbWVzc2FnZV9wdHIgPT0gTlVMTCkgeworICAgIC8vIFdlIG11c3QgaGF2ZSBjcmFzaGVkIF92ZXJ5XyBlYXJseS4KKyAgICByZXR1cm47CisgIH0KKworICBpZiAoKl9fYWJvcnRfbWVzc2FnZV9wdHIgIT0gTlVMTCkgeworICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBhYm9ydCBtZXNzYWdlLgorICAgIC8vIEFzc3VtZSB0aGF0IHRoZSBmaXJzdCBjcmFzaCBpcyB0aGUgb25lIG1vc3Qgd29ydGggcmVwb3J0aW5nLgorICAgIHJldHVybjsKKyAgfQorCiAgIHNpemVfdCBzaXplID0gc2l6ZW9mKGFib3J0X21zZ190KSArIHN0cmxlbihtc2cpICsgMTsKICAgdm9pZCogbWFwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfQU5PTiB8IE1BUF9QUklWQVRFLCAtMSwgMCk7CiAgIGlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewogICAgIHJldHVybjsKICAgfQogCi0gIGlmIChfX2Fib3J0X21lc3NhZ2VfcHRyICE9IE5VTEwpIHsKLSAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnQWJvcnRNc2dMb2NrKTsKLSAgICBpZiAoKl9fYWJvcnRfbWVzc2FnZV9wdHIgIT0gTlVMTCkgewotICAgICAgbXVubWFwKCpfX2Fib3J0X21lc3NhZ2VfcHRyLCAoKl9fYWJvcnRfbWVzc2FnZV9wdHIpLT5zaXplKTsKLSAgICB9Ci0gICAgYWJvcnRfbXNnX3QqIG5ld19hYm9ydF9tZXNzYWdlID0gcmVpbnRlcnByZXRfY2FzdDxhYm9ydF9tc2dfdCo+KG1hcCk7Ci0gICAgbmV3X2Fib3J0X21lc3NhZ2UtPnNpemUgPSBzaXplOwotICAgIHN0cmNweShuZXdfYWJvcnRfbWVzc2FnZS0+bXNnLCBtc2cpOwotICAgICpfX2Fib3J0X21lc3NhZ2VfcHRyID0gbmV3X2Fib3J0X21lc3NhZ2U7CisgIC8vIFRPRE86IGlmIHdlIHN0aWNrIHRvIHRoZSBjdXJyZW50ICJvbmUtc2hvdCIgc2NoZW1lLCB3ZSBjYW4gcmVtb3ZlIHRoaXMgY29kZSBhbmQKKyAgLy8gc3RvcCBzdG9yaW5nIHRoZSBzaXplLgorICBpZiAoKl9fYWJvcnRfbWVzc2FnZV9wdHIgIT0gTlVMTCkgeworICAgIG11bm1hcCgqX19hYm9ydF9tZXNzYWdlX3B0ciwgKCpfX2Fib3J0X21lc3NhZ2VfcHRyKS0+c2l6ZSk7CiAgIH0KKyAgYWJvcnRfbXNnX3QqIG5ld19hYm9ydF9tZXNzYWdlID0gcmVpbnRlcnByZXRfY2FzdDxhYm9ydF9tc2dfdCo+KG1hcCk7CisgIG5ld19hYm9ydF9tZXNzYWdlLT5zaXplID0gc2l6ZTsKKyAgc3RyY3B5KG5ld19hYm9ydF9tZXNzYWdlLT5tc2csIG1zZyk7CisgICpfX2Fib3J0X21lc3NhZ2VfcHRyID0gbmV3X2Fib3J0X21lc3NhZ2U7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9saWJnZW4uY3BwIGIvbGliYy9iaW9uaWMvbGliZ2VuLmNwcAppbmRleCBkOGRmNDk0Li5iOThmNTA0IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9saWJnZW4uY3BwCisrKyBiL2xpYmMvYmlvbmljL2xpYmdlbi5jcHAKQEAgLTM2LDIyICszNiw3IEBACiAKICNpbmNsdWRlICJwcml2YXRlL1RocmVhZExvY2FsQnVmZmVyLmgiCiAKLUdMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoYmFzZW5hbWUpOwotR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUihkaXJuYW1lKTsKLQotY2hhciogYmFzZW5hbWUoY29uc3QgY2hhciogcGF0aCkgewotICBMT0NBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoY2hhciosIGJhc2VuYW1lLCBNQVhQQVRITEVOKTsKLSAgaW50IHJjID0gYmFzZW5hbWVfcihwYXRoLCBiYXNlbmFtZV90bHNfYnVmZmVyLCBiYXNlbmFtZV90bHNfYnVmZmVyX3NpemUpOwotICByZXR1cm4gKHJjIDwgMCkgPyBOVUxMIDogYmFzZW5hbWVfdGxzX2J1ZmZlcjsKLX0KLQotY2hhciogZGlybmFtZShjb25zdCBjaGFyKiBwYXRoKSB7Ci0gIExPQ0FMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUihjaGFyKiwgZGlybmFtZSwgTUFYUEFUSExFTik7Ci0gIGludCByYyA9IGRpcm5hbWVfcihwYXRoLCBkaXJuYW1lX3Rsc19idWZmZXIsIGRpcm5hbWVfdGxzX2J1ZmZlcl9zaXplKTsKLSAgcmV0dXJuIChyYyA8IDApID8gTlVMTCA6IGRpcm5hbWVfdGxzX2J1ZmZlcjsKLX0KLQotaW50IGJhc2VuYW1lX3IoY29uc3QgY2hhciogcGF0aCwgY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpIHsKK19fTElCQzY0X0hJRERFTl9fIGludCBiYXNlbmFtZV9yKGNvbnN0IGNoYXIqIHBhdGgsIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplKSB7CiAgIGNvbnN0IGNoYXIqIHN0YXJ0cCA9IE5VTEw7CiAgIGNvbnN0IGNoYXIqIGVuZHAgPSBOVUxMOwogICBpbnQgbGVuOwpAQCAtMTAzLDcgKzg4LDcgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW50IGRpcm5hbWVfcihjb25zdCBjaGFyKiBwYXRoLCBjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkgeworX19MSUJDNjRfSElEREVOX18gaW50IGRpcm5hbWVfcihjb25zdCBjaGFyKiBwYXRoLCBjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkgewogICBjb25zdCBjaGFyKiBlbmRwID0gTlVMTDsKICAgaW50IGxlbjsKICAgaW50IHJlc3VsdDsKQEAgLTE2MSwzICsxNDYsMTggQEAKICAgfQogICByZXR1cm4gcmVzdWx0OwogfQorCitHTE9CQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSKGJhc2VuYW1lKTsKK0dMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoZGlybmFtZSk7CisKK2NoYXIqIGJhc2VuYW1lKGNvbnN0IGNoYXIqIHBhdGgpIHsKKyAgTE9DQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSKGNoYXIqLCBiYXNlbmFtZSwgTUFYUEFUSExFTik7CisgIGludCByYyA9IGJhc2VuYW1lX3IocGF0aCwgYmFzZW5hbWVfdGxzX2J1ZmZlciwgYmFzZW5hbWVfdGxzX2J1ZmZlcl9zaXplKTsKKyAgcmV0dXJuIChyYyA8IDApID8gTlVMTCA6IGJhc2VuYW1lX3Rsc19idWZmZXI7Cit9CisKK2NoYXIqIGRpcm5hbWUoY29uc3QgY2hhciogcGF0aCkgeworICBMT0NBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoY2hhciosIGRpcm5hbWUsIE1BWFBBVEhMRU4pOworICBpbnQgcmMgPSBkaXJuYW1lX3IocGF0aCwgZGlybmFtZV90bHNfYnVmZmVyLCBkaXJuYW1lX3Rsc19idWZmZXJfc2l6ZSk7CisgIHJldHVybiAocmMgPCAwKSA/IE5VTEwgOiBkaXJuYW1lX3Rsc19idWZmZXI7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9sb2NhbGUuY3BwIGIvbGliYy9iaW9uaWMvbG9jYWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGI0OWNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbG9jYWxlLmNwcApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgiCisKKy8vIFdlIGN1cnJlbnRseSBzdXBwb3J0IGEgc2luZ2xlIGxvY2FsZSwgdGhlICJDIiBsb2NhbGUgKGFsc28ga25vd24gYXMgIlBPU0lYIikuCisKK3N0YXRpYyBib29sIF9fYmlvbmljX2N1cnJlbnRfbG9jYWxlX2lzX3V0ZjggPSB0cnVlOworCitzdHJ1Y3QgX19sb2NhbGVfdCB7CisgIHNpemVfdCBtYl9jdXJfbWF4OworCisgIF9fbG9jYWxlX3Qoc2l6ZV90IG1iX2N1cl9tYXgpIDogbWJfY3VyX21heChtYl9jdXJfbWF4KSB7CisgIH0KKworICBfX2xvY2FsZV90KGNvbnN0IF9fbG9jYWxlX3QqIG90aGVyKSB7CisgICAgaWYgKG90aGVyID09IExDX0dMT0JBTF9MT0NBTEUpIHsKKyAgICAgIG1iX2N1cl9tYXggPSBfX2Jpb25pY19jdXJyZW50X2xvY2FsZV9pc191dGY4ID8gNCA6IDE7CisgICAgfSBlbHNlIHsKKyAgICAgIG1iX2N1cl9tYXggPSBvdGhlci0+bWJfY3VyX21heDsKKyAgICB9CisgIH0KKworICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oX19sb2NhbGVfdCk7Cit9OworCitzdGF0aWMgcHRocmVhZF9vbmNlX3QgZ19sb2NhbGVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworc3RhdGljIGxjb252IGdfbG9jYWxlOworCisvLyBXZSBkb24ndCB1c2UgcHRocmVhZF9vbmNlIGZvciB0aGlzIHNvIHRoYXQgd2Uga25vdyB3aGVuIHRoZSByZXNvdXJjZSAoYSBUTFMgc2xvdCkgd2lsbCBiZSB0YWtlbi4KK3N0YXRpYyBwdGhyZWFkX2tleV90IGdfdXNlbG9jYWxlX2tleTsKK19fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgc3RhdGljIHZvaWQgX19iaW9uaWNfdGxzX3VzZWxvY2FsZV9rZXlfaW5pdCgpIHsKKyAgcHRocmVhZF9rZXlfY3JlYXRlKCZnX3VzZWxvY2FsZV9rZXksIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBfX2xvY2FsZV9pbml0KCkgeworICBnX2xvY2FsZS5kZWNpbWFsX3BvaW50ID0gY29uc3RfY2FzdDxjaGFyKj4oIi4iKTsKKworICBjaGFyKiBub3RfYXZhaWxhYmxlID0gY29uc3RfY2FzdDxjaGFyKj4oIiIpOworICBnX2xvY2FsZS50aG91c2FuZHNfc2VwID0gbm90X2F2YWlsYWJsZTsKKyAgZ19sb2NhbGUuZ3JvdXBpbmcgPSBub3RfYXZhaWxhYmxlOworICBnX2xvY2FsZS5pbnRfY3Vycl9zeW1ib2wgPSBub3RfYXZhaWxhYmxlOworICBnX2xvY2FsZS5jdXJyZW5jeV9zeW1ib2wgPSBub3RfYXZhaWxhYmxlOworICBnX2xvY2FsZS5tb25fZGVjaW1hbF9wb2ludCA9IG5vdF9hdmFpbGFibGU7CisgIGdfbG9jYWxlLm1vbl90aG91c2FuZHNfc2VwID0gbm90X2F2YWlsYWJsZTsKKyAgZ19sb2NhbGUubW9uX2dyb3VwaW5nID0gbm90X2F2YWlsYWJsZTsKKyAgZ19sb2NhbGUucG9zaXRpdmVfc2lnbiA9IG5vdF9hdmFpbGFibGU7CisgIGdfbG9jYWxlLm5lZ2F0aXZlX3NpZ24gPSBub3RfYXZhaWxhYmxlOworCisgIGdfbG9jYWxlLmludF9mcmFjX2RpZ2l0cyA9IENIQVJfTUFYOworICBnX2xvY2FsZS5mcmFjX2RpZ2l0cyA9IENIQVJfTUFYOworICBnX2xvY2FsZS5wX2NzX3ByZWNlZGVzID0gQ0hBUl9NQVg7CisgIGdfbG9jYWxlLnBfc2VwX2J5X3NwYWNlID0gQ0hBUl9NQVg7CisgIGdfbG9jYWxlLm5fY3NfcHJlY2VkZXMgPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUubl9zZXBfYnlfc3BhY2UgPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUucF9zaWduX3Bvc24gPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUubl9zaWduX3Bvc24gPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUuaW50X3BfY3NfcHJlY2VkZXMgPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUuaW50X3Bfc2VwX2J5X3NwYWNlID0gQ0hBUl9NQVg7CisgIGdfbG9jYWxlLmludF9uX2NzX3ByZWNlZGVzID0gQ0hBUl9NQVg7CisgIGdfbG9jYWxlLmludF9uX3NlcF9ieV9zcGFjZSA9IENIQVJfTUFYOworICBnX2xvY2FsZS5pbnRfcF9zaWduX3Bvc24gPSBDSEFSX01BWDsKKyAgZ19sb2NhbGUuaW50X25fc2lnbl9wb3NuID0gQ0hBUl9NQVg7Cit9CisKK3NpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4KCkgeworICBsb2NhbGVfdCBsID0gcmVpbnRlcnByZXRfY2FzdDxsb2NhbGVfdD4ocHRocmVhZF9nZXRzcGVjaWZpYyhnX3VzZWxvY2FsZV9rZXkpKTsKKyAgaWYgKGwgPT0gbnVsbHB0ciB8fCBsID09IExDX0dMT0JBTF9MT0NBTEUpIHsKKyAgICByZXR1cm4gX19iaW9uaWNfY3VycmVudF9sb2NhbGVfaXNfdXRmOCA/IDQgOiAxOworICB9IGVsc2UgeworICAgIHJldHVybiBsLT5tYl9jdXJfbWF4OworICB9Cit9CisKK3N0YXRpYyBib29sIF9faXNfc3VwcG9ydGVkX2xvY2FsZShjb25zdCBjaGFyKiBsb2NhbGUpIHsKKyAgcmV0dXJuIChzdHJjbXAobG9jYWxlLCAiIikgPT0gMCB8fAorICAgICAgICAgIHN0cmNtcChsb2NhbGUsICJDIikgPT0gMCB8fAorICAgICAgICAgIHN0cmNtcChsb2NhbGUsICJDLlVURi04IikgPT0gMCB8fAorICAgICAgICAgIHN0cmNtcChsb2NhbGUsICJlbl9VUy5VVEYtOCIpID09IDAgfHwKKyAgICAgICAgICBzdHJjbXAobG9jYWxlLCAiUE9TSVgiKSA9PSAwKTsKK30KKworbGNvbnYqIGxvY2FsZWNvbnYoKSB7CisgIHB0aHJlYWRfb25jZSgmZ19sb2NhbGVfb25jZSwgX19sb2NhbGVfaW5pdCk7CisgIHJldHVybiAmZ19sb2NhbGU7Cit9CisKK2xvY2FsZV90IGR1cGxvY2FsZShsb2NhbGVfdCBsKSB7CisgIHJldHVybiBuZXcgX19sb2NhbGVfdChsKTsKK30KKwordm9pZCBmcmVlbG9jYWxlKGxvY2FsZV90IGwpIHsKKyAgZGVsZXRlIGw7Cit9CisKK2xvY2FsZV90IG5ld2xvY2FsZShpbnQgY2F0ZWdvcnlfbWFzaywgY29uc3QgY2hhciogbG9jYWxlX25hbWUsIGxvY2FsZV90IC8qYmFzZSovKSB7CisgIC8vIElzICdjYXRlZ29yeV9tYXNrJyB2YWxpZD8KKyAgaWYgKChjYXRlZ29yeV9tYXNrICYgfkxDX0FMTF9NQVNLKSAhPSAwKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpZiAoIV9faXNfc3VwcG9ydGVkX2xvY2FsZShsb2NhbGVfbmFtZSkpIHsKKyAgICBlcnJubyA9IEVOT0VOVDsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHJldHVybiBuZXcgX19sb2NhbGVfdChzdHJzdHIobG9jYWxlX25hbWUsICJVVEYtOCIpICE9IE5VTEwgPyA0IDogMSk7Cit9CisKK2NoYXIqIHNldGxvY2FsZShpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIqIGxvY2FsZV9uYW1lKSB7CisgIC8vIElzICdjYXRlZ29yeScgdmFsaWQ/CisgIGlmIChjYXRlZ29yeSA8IExDX0NUWVBFIHx8IGNhdGVnb3J5ID4gTENfSURFTlRJRklDQVRJT04pIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIC8vIENhbGxlciB3YW50cyB0byBzZXQgdGhlIGxvY2FsZSByYXRoZXIgdGhhbiBqdXN0IHF1ZXJ5PworICBpZiAobG9jYWxlX25hbWUgIT0gTlVMTCkgeworICAgIGlmICghX19pc19zdXBwb3J0ZWRfbG9jYWxlKGxvY2FsZV9uYW1lKSkgeworICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIGxvY2FsZS4KKyAgICAgIGVycm5vID0gRU5PRU5UOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIF9fYmlvbmljX2N1cnJlbnRfbG9jYWxlX2lzX3V0ZjggPSAoc3Ryc3RyKGxvY2FsZV9uYW1lLCAiVVRGLTgiKSAhPSBOVUxMKTsKKyAgfQorCisgIHJldHVybiBjb25zdF9jYXN0PGNoYXIqPihfX2Jpb25pY19jdXJyZW50X2xvY2FsZV9pc191dGY4ID8gIkMuVVRGLTgiIDogIkMiKTsKK30KKworbG9jYWxlX3QgdXNlbG9jYWxlKGxvY2FsZV90IG5ld19sb2NhbGUpIHsKKyAgbG9jYWxlX3Qgb2xkX2xvY2FsZSA9IHN0YXRpY19jYXN0PGxvY2FsZV90PihwdGhyZWFkX2dldHNwZWNpZmljKGdfdXNlbG9jYWxlX2tleSkpOworCisgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gdXNlbG9jYWxlKDMpIG9uIHRoaXMgdGhyZWFkLCB3ZSByZXR1cm4gTENfR0xPQkFMX0xPQ0FMRS4KKyAgaWYgKG9sZF9sb2NhbGUgPT0gTlVMTCkgeworICAgIG9sZF9sb2NhbGUgPSBMQ19HTE9CQUxfTE9DQUxFOworICB9CisKKyAgaWYgKG5ld19sb2NhbGUgIT0gTlVMTCkgeworICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoZ191c2Vsb2NhbGVfa2V5LCBuZXdfbG9jYWxlKTsKKyAgfQorCisgIHJldHVybiBvbGRfbG9jYWxlOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbHN0YXQuY3BwIGIvbGliYy9iaW9uaWMvbHN0YXQuY3BwCmluZGV4IDMwMGQ3ZmEuLjg0ZDE3ZTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL2xzdGF0LmNwcAorKysgYi9saWJjL2Jpb25pYy9sc3RhdC5jcHAKQEAgLTM0LDMgKzM0LDQgQEAKIGludCBsc3RhdChjb25zdCBjaGFyKiBwYXRoLCBzdHJ1Y3Qgc3RhdCogc2IpIHsKICAgcmV0dXJuIGZzdGF0YXQoQVRfRkRDV0QsIHBhdGgsIHNiLCBBVF9TWU1MSU5LX05PRk9MTE9XKTsKIH0KK19fc3Ryb25nX2FsaWFzKGxzdGF0NjQsIGxzdGF0KTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19iYWNrdHJhY2UuaCBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19iYWNrdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQ1NDhiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2JhY2t0cmFjZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNQUxMT0NfREVCVUdfQkFDS1RSQUNFX0gKKyNkZWZpbmUgTUFMTE9DX0RFQlVHX0JBQ0tUUkFDRV9ICisKK2V4dGVybiBib29sIGdfYmFja3RyYWNlX2VuYWJsZWQ7CisKKyNkZWZpbmUgR0VUX0JBQ0tUUkFDRShidCwgZGVwdGgpIFwKKyAgKGdfYmFja3RyYWNlX2VuYWJsZWQgPyBnZXRfYmFja3RyYWNlKGJ0LCBkZXB0aCkgOiAwKQorCisjZW5kaWYgIC8vIE1BTExPQ19ERUJVR19CQUNLVFJBQ0VfSApkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NoZWNrLmNwcCBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19jaGVjay5jcHAKaW5kZXggN2RkOGUzYy4uZGVlMDNmYSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NoZWNrLmNwcAorKysgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY2hlY2suY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC00NywxNSArNDgsMTMgQEAKIAogI2luY2x1ZGUgImRlYnVnX21hcGluZm8uaCIKICNpbmNsdWRlICJkZWJ1Z19zdGFja3RyYWNlLmgiCi0jaW5jbHVkZSAiZGxtYWxsb2MuaCIKLSNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgorI2luY2x1ZGUgIm1hbGxvY19kZWJ1Z19iYWNrdHJhY2UuaCIKICNpbmNsdWRlICJtYWxsb2NfZGVidWdfY29tbW9uLmgiCisjaW5jbHVkZSAibWFsbG9jX2RlYnVnX2Rpc2FibGUuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKKyNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgiCiAKLS8qIGxpYmMuZGVidWcubWFsbG9jLmJhY2tsb2cgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgZ01hbGxvY0RlYnVnQmFja2xvZzsKLWV4dGVybiBpbnQgZ01hbGxvY0RlYnVnTGV2ZWw7Ci0KICNkZWZpbmUgTUFYX0JBQ0tUUkFDRV9ERVBUSCAxNgogI2RlZmluZSBBTExPQ0FUSU9OX1RBRyAgICAgIDB4MWVlN2QwMGQKICNkZWZpbmUgQkFDS0xPR19UQUcgICAgICAgICAweGJhYmVjYWZlCkBAIC03NCw3ICs3Myw3IEBACiAKIHN0cnVjdCBoZHJfdCB7CiAgICAgdWludDMyX3QgdGFnOwotICAgIHZvaWQqIGJhc2U7ICAvLyBBbHdheXMgcG9pbnRzIHRvIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nIGRsbWFsbG9jLgorICAgIHZvaWQqIGJhc2U7ICAvLyBBbHdheXMgcG9pbnRzIHRvIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nIG1hbGxvYy4KICAgICAgICAgICAgICAgICAgLy8gRm9yIG1lbW9yeSBhbGxvY2F0ZWQgaW4gY2hrX21lbWFsaWduLCB0aGlzIHZhbHVlIHdpbGwKICAgICAgICAgICAgICAgICAgLy8gbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhpcwogICAgICAgICAgICAgICAgICAvLyBzdHJ1Y3R1cmUuCkBAIC0xMDgsOCArMTA3LDEwIEBACiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaGRyX3QqPih1c2VyKSAtIDE7CiB9CiAKLQotc3RhdGljIHVuc2lnbmVkIGdBbGxvY2F0ZWRCbG9ja0NvdW50OworLy8gVE9ETzogaW50cm9kdWNlIGEgc3RydWN0IGZvciB0aGlzIGdsb2JhbCBzdGF0ZS4KKy8vIFRoZXJlIGFyZSBiYXNpY2FsbHkgdHdvIGxpc3RzIGhlcmUsIHRoZSByZWd1bGFyIGxpc3QgYW5kIHRoZSBiYWNrbG9nIGxpc3QuCisvLyBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhlIGR1cGxpY2F0aW9uLgorc3RhdGljIHVuc2lnbmVkIGdfYWxsb2NhdGVkX2Jsb2NrX2NvdW50Owogc3RhdGljIGhkcl90KiB0YWlsOwogc3RhdGljIGhkcl90KiBoZWFkOwogc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBsb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKQEAgLTExOSw2ICsxMjAsMTcgQEAKIHN0YXRpYyBoZHJfdCogYmFja2xvZ19oZWFkOwogc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBiYWNrbG9nX2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwogCisvLyBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgcHJvcGVydHkgbGliYy5kZWJ1Zy5tYWxsb2MuYmFja2xvZy4KKy8vIEl0IGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGJhY2tsb2cgd2UgdXNlIHRvIGRldGVjdCBtdWx0aXBsZSBmcmVlcy4KK3N0YXRpYyB1bnNpZ25lZCBnX21hbGxvY19kZWJ1Z19iYWNrbG9nID0gMTAwOworCisvLyBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byBmYWxzZSBpZiB0aGUgcHJvcGVydHkgbGliYy5kZWJ1Zy5tYWxsb2Mubm9iYWNrdHJhY2UKKy8vIGlzIHNldCB0byBub24temVyby4KK19fTElCQ19ISURERU5fXyBib29sIGdfYmFja3RyYWNlX2VuYWJsZWQgPSB0cnVlOworCitfX0xJQkNfSElEREVOX18gSGFzaFRhYmxlKiBnX2hhc2hfdGFibGU7CitfX0xJQkNfSElEREVOX18gY29uc3QgTWFsbG9jRGVidWcqIGdfbWFsbG9jX2Rpc3BhdGNoOworCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9mcm9udF9ndWFyZChoZHJfdCogaGRyKSB7CiAgICAgbWVtc2V0KGhkci0+ZnJvbnRfZ3VhcmQsIEZST05UX0dVQVJELCBGUk9OVF9HVUFSRF9MRU4pOwogfQpAQCAtMTg4LDcgKzIwMCw3IEBACiAgICAgaGRyLT5zaXplID0gc2l6ZTsKICAgICBpbml0X2Zyb250X2d1YXJkKGhkcik7CiAgICAgaW5pdF9yZWFyX2d1YXJkKGhkcik7Ci0gICAgKytnQWxsb2NhdGVkQmxvY2tDb3VudDsKKyAgICArK2dfYWxsb2NhdGVkX2Jsb2NrX2NvdW50OwogICAgIGFkZF9sb2NrZWQoaGRyLCAmdGFpbCwgJmhlYWQpOwogfQogCkBAIC0xOTksNyArMjExLDcgQEAKIAogICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmxvY2spOwogICAgIGRlbF9sb2NrZWQoaGRyLCAmdGFpbCwgJmhlYWQpOwotICAgIC0tZ0FsbG9jYXRlZEJsb2NrQ291bnQ7CisgICAgLS1nX2FsbG9jYXRlZF9ibG9ja19jb3VudDsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjY2LDcgKzI3OCw3IEBACiAgICAgICAgIHZhbGlkID0gY2hlY2tfZ3VhcmRzKGhkciwgc2FmZSk7CiAgICAgfQogCi0gICAgaWYgKCF2YWxpZCAmJiAqc2FmZSkgeworICAgIGlmICghdmFsaWQgJiYgKnNhZmUgJiYgZ19iYWNrdHJhY2VfZW5hYmxlZCkgewogICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBBTExPQ0FURUQgSEVSRTpcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CiAgICAgICAgIGxvZ19iYWNrdHJhY2UoaGRyLT5idCwgaGRyLT5idF9kZXB0aCk7CkBAIC0zMDYsNyArMzE4LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZGVsX2xlYWsoaGRyX3QqIGhkciwgaW50KiBzYWZlKSB7CiAgICAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmbG9jayk7Ci0gICAgcmV0dXJuIGRlbF9hbmRfY2hlY2tfbG9ja2VkKGhkciwgJnRhaWwsICZoZWFkLCAmZ0FsbG9jYXRlZEJsb2NrQ291bnQsIHNhZmUpOworICAgIHJldHVybiBkZWxfYW5kX2NoZWNrX2xvY2tlZChoZHIsICZ0YWlsLCAmaGVhZCwgJmdfYWxsb2NhdGVkX2Jsb2NrX2NvdW50LCBzYWZlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFkZF90b19iYWNrbG9nKGhkcl90KiBoZHIpIHsKQEAgLTMxNiwzNCArMzI4LDQ2IEBACiAgICAgYWRkX2xvY2tlZChoZHIsICZiYWNrbG9nX3RhaWwsICZiYWNrbG9nX2hlYWQpOwogICAgIHBvaXNvbihoZHIpOwogICAgIC8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGJhY2tsb2csIGNsZWFyIGl0IHVwICovCi0gICAgd2hpbGUgKGJhY2tsb2dfbnVtID4gZ01hbGxvY0RlYnVnQmFja2xvZykgeworICAgIHdoaWxlIChiYWNrbG9nX251bSA+IGdfbWFsbG9jX2RlYnVnX2JhY2tsb2cpIHsKICAgICAgICAgaGRyX3QqIGdvbmUgPSBiYWNrbG9nX3RhaWw7CiAgICAgICAgIGRlbF9mcm9tX2JhY2tsb2dfbG9ja2VkKGdvbmUpOwotICAgICAgICBkbGZyZWUoZ29uZS0+YmFzZSk7CisgICAgICAgIGdfbWFsbG9jX2Rpc3BhdGNoLT5mcmVlKGdvbmUtPmJhc2UpOwogICAgIH0KIH0KIAotZXh0ZXJuICJDIiB2b2lkKiBjaGtfbWFsbG9jKHNpemVfdCBzaXplKSB7CitleHRlcm4gIkMiIHZvaWQqIGNoa19tYWxsb2Moc2l6ZV90IGJ5dGVzKSB7CiAvLyAgbG9nX21lc3NhZ2UoIiVzOiAlc1xuIiwgX19GSUxFX18sIF9fRlVOQ1RJT05fXyk7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+bWFsbG9jKGJ5dGVzKTsKKyAgICB9CiAKLSAgICBoZHJfdCogaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihkbG1hbGxvYyhzaXplb2YoaGRyX3QpICsgc2l6ZSArIHNpemVvZihmdHJfdCkpKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihoZHJfdCkgKyBieXRlcyArIHNpemVvZihmdHJfdCk7CisgICAgaWYgKHNpemUgPCBieXRlcykgeyAvLyBPdmVyZmxvdworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGhkcl90KiBoZHIgPSBzdGF0aWNfY2FzdDxoZHJfdCo+KGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2Moc2l6ZSkpOwogICAgIGlmIChoZHIpIHsKICAgICAgICAgaGRyLT5iYXNlID0gaGRyOwotICAgICAgICBoZHItPmJ0X2RlcHRoID0gZ2V0X2JhY2t0cmFjZShoZHItPmJ0LCBNQVhfQkFDS1RSQUNFX0RFUFRIKTsKLSAgICAgICAgYWRkKGhkciwgc2l6ZSk7CisgICAgICAgIGhkci0+YnRfZGVwdGggPSBHRVRfQkFDS1RSQUNFKGhkci0+YnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICAgICAgICBhZGQoaGRyLCBieXRlcyk7CiAgICAgICAgIHJldHVybiB1c2VyKGhkcik7CiAgICAgfQogICAgIHJldHVybiBOVUxMOwogfQogCiBleHRlcm4gIkMiIHZvaWQqIGNoa19tZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgICBpZiAoRGVidWdDYWxsc0Rpc2FibGVkKCkpIHsKKyAgICAgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5tZW1hbGlnbihhbGlnbm1lbnQsIGJ5dGVzKTsKKyAgICB9CisKICAgICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpIHsKICAgICAgICAgcmV0dXJuIGNoa19tYWxsb2MoYnl0ZXMpOwogICAgIH0KIAogICAgIC8vIE1ha2UgdGhlIGFsaWdubWVudCBhIHBvd2VyIG9mIHR3by4KLSAgICBpZiAoYWxpZ25tZW50ICYgKGFsaWdubWVudC0xKSkgewotICAgICAgICBhbGlnbm1lbnQgPSAxTCA8PCAoMzEgLSBfX2J1aWx0aW5fY2x6KGFsaWdubWVudCkpOworICAgIGlmICghcG93ZXJvZjIoYWxpZ25tZW50KSkgeworICAgICAgICBhbGlnbm1lbnQgPSBCSU9OSUNfUk9VTkRfVVBfUE9XRVJfT0ZfMihhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIC8vIGhlcmUsIGFsaWdubWVudCBpcyBhdCBsZWFzdCBNQUxMT0NfQUxJR05NRU5UPDwxIGJ5dGVzCkBAIC0zNTQsNyArMzc4LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdm9pZCogYmFzZSA9IGRsbWFsbG9jKHNpemVvZihoZHJfdCkgKyBzaXplICsgc2l6ZW9mKGZ0cl90KSk7CisgICAgdm9pZCogYmFzZSA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2Moc2l6ZW9mKGhkcl90KSArIHNpemUgKyBzaXplb2YoZnRyX3QpKTsKICAgICBpZiAoYmFzZSAhPSBOVUxMKSB7CiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGFjdHVhbCBwb2ludGVyIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBpcyBhbGlnbmVkCiAgICAgICAgIC8vIHByb3Blcmx5LgpAQCAtMzY2LDcgKzM5MCw3IEBACiAKICAgICAgICAgaGRyX3QqIGhkciA9IG1ldGEocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyKSk7CiAgICAgICAgIGhkci0+YmFzZSA9IGJhc2U7Ci0gICAgICAgIGhkci0+YnRfZGVwdGggPSBnZXRfYmFja3RyYWNlKGhkci0+YnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICAgICAgICBoZHItPmJ0X2RlcHRoID0gR0VUX0JBQ0tUUkFDRShoZHItPmJ0LCBNQVhfQkFDS1RSQUNFX0RFUFRIKTsKICAgICAgICAgYWRkKGhkciwgYnl0ZXMpOwogICAgICAgICByZXR1cm4gdXNlcihoZHIpOwogICAgIH0KQEAgLTM3NSw2ICszOTksOSBAQAogCiBleHRlcm4gIkMiIHZvaWQgY2hrX2ZyZWUodm9pZCogcHRyKSB7CiAvLyAgbG9nX21lc3NhZ2UoIiVzOiAlc1xuIiwgX19GSUxFX18sIF9fRlVOQ1RJT05fXyk7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShwdHIpOworICAgIH0KIAogICAgIGlmICghcHRyKSAvKiBpZ25vcmUgZnJlZShOVUxMKSAqLwogICAgICAgICByZXR1cm47CkBAIC0zODMsNDAgKzQxMCw0NyBAQAogCiAgICAgaWYgKGRlbChoZHIpIDwgMCkgewogICAgICAgICB1aW50cHRyX3QgYnRbTUFYX0JBQ0tUUkFDRV9ERVBUSF07Ci0gICAgICAgIGludCBkZXB0aCA9IGdldF9iYWNrdHJhY2UoYnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICAgICAgICBpbnQgZGVwdGggPSBHRVRfQkFDS1RSQUNFKGJ0LCBNQVhfQkFDS1RSQUNFX0RFUFRIKTsKICAgICAgICAgaWYgKGhkci0+dGFnID09IEJBQ0tMT0dfVEFHKSB7CiAgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBCWVRFUyBNVUxUSVBMWSBGUkVFRCFcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19tZXNzYWdlKCIrKysgQUxMT0NBVElPTiAlcCBTSVpFICVkIEFMTE9DQVRFRCBIRVJFOlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOwotICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShoZHItPmJ0LCBoZHItPmJ0X2RlcHRoKTsKLSAgICAgICAgICAgIC8qIGhkci0+ZnJlZWRfYnRfZGVwdGggc2hvdWxkIGJlIG5vbnplcm8gaGVyZSAqLwotICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgRklSU1QgRlJFRUQgSEVSRTpcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoaGRyLT5mcmVlZF9idCwgaGRyLT5mcmVlZF9idF9kZXB0aCk7Ci0gICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBOT1cgQkVJTkcgRlJFRUQgSEVSRTpcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoYnQsIGRlcHRoKTsKKyAgICAgICAgICAgIGlmIChnX2JhY2t0cmFjZV9lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgQUxMT0NBVEVEIEhFUkU6XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShoZHItPmJ0LCBoZHItPmJ0X2RlcHRoKTsKKyAgICAgICAgICAgICAgICAvKiBoZHItPmZyZWVkX2J0X2RlcHRoIHNob3VsZCBiZSBub256ZXJvIGhlcmUgKi8KKyAgICAgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBGSVJTVCBGUkVFRCBIRVJFOlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOworICAgICAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoaGRyLT5mcmVlZF9idCwgaGRyLT5mcmVlZF9idF9kZXB0aCk7CisgICAgICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgTk9XIEJFSU5HIEZSRUVEIEhFUkU6XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShidCwgZGVwdGgpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIElTIENPUlJVUFRFRCBPUiBOT1QgQUxMT0NBVEVEIFZJQSBUUkFDS0VSIVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpKTsKLSAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoYnQsIGRlcHRoKTsKKyAgICAgICAgICAgIGlmIChnX2JhY2t0cmFjZV9lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShidCwgZGVwdGgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaGRyLT5mcmVlZF9idF9kZXB0aCA9IGdldF9iYWNrdHJhY2UoaGRyLT5mcmVlZF9idCwgTUFYX0JBQ0tUUkFDRV9ERVBUSCk7CisgICAgICAgIGhkci0+ZnJlZWRfYnRfZGVwdGggPSBHRVRfQkFDS1RSQUNFKGhkci0+ZnJlZWRfYnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOwogICAgICAgICBhZGRfdG9fYmFja2xvZyhoZHIpOwogICAgIH0KIH0KIAotZXh0ZXJuICJDIiB2b2lkKiBjaGtfcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSB7CitleHRlcm4gIkMiIHZvaWQqIGNoa19yZWFsbG9jKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKSB7CiAvLyAgbG9nX21lc3NhZ2UoIiVzOiAlc1xuIiwgX19GSUxFX18sIF9fRlVOQ1RJT05fXyk7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+cmVhbGxvYyhwdHIsIGJ5dGVzKTsKKyAgICB9CiAKICAgICBpZiAoIXB0cikgewotICAgICAgICByZXR1cm4gY2hrX21hbGxvYyhzaXplKTsKKyAgICAgICAgcmV0dXJuIGNoa19tYWxsb2MoYnl0ZXMpOwogICAgIH0KIAogI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFCi0gICAgaWYgKCFzaXplKSB7CisgICAgaWYgKCFieXRlcykgewogICAgICAgICBjaGtfZnJlZShwdHIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC00MjYsNzYgKzQ2MCw5NSBAQAogCiAgICAgaWYgKGRlbChoZHIpIDwgMCkgewogICAgICAgICB1aW50cHRyX3QgYnRbTUFYX0JBQ0tUUkFDRV9ERVBUSF07Ci0gICAgICAgIGludCBkZXB0aCA9IGdldF9iYWNrdHJhY2UoYnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICAgICAgICBpbnQgZGVwdGggPSBHRVRfQkFDS1RSQUNFKGJ0LCBNQVhfQkFDS1RSQUNFX0RFUFRIKTsKICAgICAgICAgaWYgKGhkci0+dGFnID09IEJBQ0tMT0dfVEFHKSB7CiAgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIFJFQUxMT0NBVElPTiAlcCBTSVpFICVkIE9GIEZSRUVEIE1FTU9SWSFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgc2l6ZSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19tZXNzYWdlKCIrKysgQUxMT0NBVElPTiAlcCBTSVpFICVkIEFMTE9DQVRFRCBIRVJFOlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOwotICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShoZHItPmJ0LCBoZHItPmJ0X2RlcHRoKTsKLSAgICAgICAgICAgIC8qIGhkci0+ZnJlZWRfYnRfZGVwdGggc2hvdWxkIGJlIG5vbnplcm8gaGVyZSAqLwotICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgRklSU1QgRlJFRUQgSEVSRTpcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoaGRyLT5mcmVlZF9idCwgaGRyLT5mcmVlZF9idF9kZXB0aCk7Ci0gICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBOT1cgQkVJTkcgUkVBTExPQ0FURUQgSEVSRTpcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKLSAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoYnQsIGRlcHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBieXRlcywgaGRyLT5zaXplKTsKKyAgICAgICAgICAgIGlmIChnX2JhY2t0cmFjZV9lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgQUxMT0NBVEVEIEhFUkU6XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShoZHItPmJ0LCBoZHItPmJ0X2RlcHRoKTsKKyAgICAgICAgICAgICAgICAvKiBoZHItPmZyZWVkX2J0X2RlcHRoIHNob3VsZCBiZSBub256ZXJvIGhlcmUgKi8KKyAgICAgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBGSVJTVCBGUkVFRCBIRVJFOlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOworICAgICAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoaGRyLT5mcmVlZF9idCwgaGRyLT5mcmVlZF9idF9kZXB0aCk7CisgICAgICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgTk9XIEJFSU5HIFJFQUxMT0NBVEVEIEhFUkU6XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShidCwgZGVwdGgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgLyogV2UgdGFrZSB0aGUgbWVtb3J5IG91dCBvZiB0aGUgYmFja2xvZyBhbmQgZmFsbCB0aHJvdWdoIHNvIHRoZQorICAgICAgICAgICAgLyogV2UgdGFrZSB0aGUgbWVtb3J5IG91dCBvZiB0aGUgYmFja2xvZyBhbmQgZmFsbCB0aHJvdWdoIHNvIHRoZQogICAgICAgICAgICAgICogcmVhbGxvY2F0aW9uIGJlbG93IHN1Y2NlZWRzLiAgU2luY2Ugd2UgZGlkbid0IHJlYWxseSBmcmVlIGl0LCB3ZQogICAgICAgICAgICAgICogY2FuIGRlZmF1bHQgdG8gdGhpcyBiZWhhdmlvci4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZGVsX2Zyb21fYmFja2xvZyhoZHIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBSRUFMTE9DQVRJT04gJXAgU0laRSAlZCBJUyBDT1JSVVBURUQgT1IgTk9UIEFMTE9DQVRFRCBWSUEgVFJBQ0tFUiFcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgc2l6ZSk7Ci0gICAgICAgICAgICBsb2dfYmFja3RyYWNlKGJ0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgYnl0ZXMpOworICAgICAgICAgICAgaWYgKGdfYmFja3RyYWNlX2VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBsb2dfYmFja3RyYWNlKGJ0LCBkZXB0aCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBqdXN0IGdldCBhIHdob2xlIG5ldyBhbGxvY2F0aW9uIGFuZCBsZWFrIHRoZSBvbGQgb25lCi0gICAgICAgICAgICByZXR1cm4gZGxyZWFsbG9jKDAsIHNpemUpOwotICAgICAgICAgICAgLy8gcmV0dXJuIGRscmVhbGxvYyh1c2VyKGhkciksIHNpemUpOyAvLyBhc3N1bWluZyBpdCB3YXMgYWxsb2NhdGVkIGV4dGVybmFsbHkKKyAgICAgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+cmVhbGxvYygwLCBieXRlcyk7CisgICAgICAgICAgICAvLyByZXR1cm4gcmVhbGxvYyh1c2VyKGhkciksIGJ5dGVzKTsgLy8gYXNzdW1pbmcgaXQgd2FzIGFsbG9jYXRlZCBleHRlcm5hbGx5CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihoZHJfdCkgKyBieXRlcyArIHNpemVvZihmdHJfdCk7CisgICAgaWYgKHNpemUgPCBieXRlcykgeyAvLyBPdmVyZmxvdworICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGlmIChoZHItPmJhc2UgIT0gaGRyKSB7CiAgICAgICAgIC8vIEFuIGFsbG9jYXRpb24gZnJvbSBtZW1hbGlnbiwgc28gY3JlYXRlIGFub3RoZXIgYWxsb2NhdGlvbiBhbmQKICAgICAgICAgLy8gY29weSB0aGUgZGF0YSBvdXQuCi0gICAgICAgIHZvaWQqIG5ld01lbSA9IGRsbWFsbG9jKHNpemVvZihoZHJfdCkgKyBzaXplICsgc2l6ZW9mKGZ0cl90KSk7Ci0gICAgICAgIGlmIChuZXdNZW0pIHsKLSAgICAgICAgICAgIG1lbWNweShuZXdNZW0sIGhkciwgc2l6ZW9mKGhkcl90KSArIGhkci0+c2l6ZSk7Ci0gICAgICAgICAgICBkbGZyZWUoaGRyLT5iYXNlKTsKLSAgICAgICAgICAgIGhkciA9IHN0YXRpY19jYXN0PGhkcl90Kj4obmV3TWVtKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRsZnJlZShoZHItPmJhc2UpOwotICAgICAgICAgICAgaGRyID0gTlVMTDsKKyAgICAgICAgdm9pZCogbmV3TWVtID0gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvYyhzaXplKTsKKyAgICAgICAgaWYgKG5ld01lbSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBtZW1jcHkobmV3TWVtLCBoZHIsIHNpemVvZihoZHJfdCkgKyBoZHItPnNpemUpOworICAgICAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShoZHItPmJhc2UpOworICAgICAgICBoZHIgPSBzdGF0aWNfY2FzdDxoZHJfdCo+KG5ld01lbSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihkbHJlYWxsb2MoaGRyLCBzaXplb2YoaGRyX3QpICsgc2l6ZSArIHNpemVvZihmdHJfdCkpKTsKKyAgICAgICAgaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihnX21hbGxvY19kaXNwYXRjaC0+cmVhbGxvYyhoZHIsIHNpemUpKTsKICAgICB9CiAgICAgaWYgKGhkcikgewogICAgICAgICBoZHItPmJhc2UgPSBoZHI7Ci0gICAgICAgIGhkci0+YnRfZGVwdGggPSBnZXRfYmFja3RyYWNlKGhkci0+YnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOwotICAgICAgICBhZGQoaGRyLCBzaXplKTsKKyAgICAgICAgaGRyLT5idF9kZXB0aCA9IEdFVF9CQUNLVFJBQ0UoaGRyLT5idCwgTUFYX0JBQ0tUUkFDRV9ERVBUSCk7CisgICAgICAgIGFkZChoZHIsIGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIHVzZXIoaGRyKTsKICAgICB9Ci0KICAgICByZXR1cm4gTlVMTDsKIH0KIAotZXh0ZXJuICJDIiB2b2lkKiBjaGtfY2FsbG9jKGludCBubWVtYiwgc2l6ZV90IHNpemUpIHsKK2V4dGVybiAiQyIgdm9pZCogY2hrX2NhbGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBieXRlcykgewogLy8gIGxvZ19tZXNzYWdlKCIlczogJXNcbiIsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18pOwotICAgIHNpemVfdCB0b3RhbF9zaXplID0gbm1lbWIgKiBzaXplOwotICAgIGhkcl90KiBoZHIgPSBzdGF0aWNfY2FzdDxoZHJfdCo+KGRsY2FsbG9jKDEsIHNpemVvZihoZHJfdCkgKyB0b3RhbF9zaXplICsgc2l6ZW9mKGZ0cl90KSkpOworICAgIGlmIChEZWJ1Z0NhbGxzRGlzYWJsZWQoKSkgeworICAgICAgICByZXR1cm4gZ19tYWxsb2NfZGlzcGF0Y2gtPmNhbGxvYyhubWVtYiwgYnl0ZXMpOworICAgIH0KKworICAgIHNpemVfdCB0b3RhbF9ieXRlcyA9IG5tZW1iICogYnl0ZXM7CisgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoaGRyX3QpICsgdG90YWxfYnl0ZXMgKyBzaXplb2YoZnRyX3QpOworICAgIGlmIChzaXplIDwgdG90YWxfYnl0ZXMgfHwgKG5tZW1iICYmIFNJWkVfTUFYIC8gbm1lbWIgPCBieXRlcykpIHsgLy8gT3ZlcmZsb3cKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBoZHJfdCogaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihnX21hbGxvY19kaXNwYXRjaC0+Y2FsbG9jKDEsIHNpemUpKTsKICAgICBpZiAoaGRyKSB7CiAgICAgICAgIGhkci0+YmFzZSA9IGhkcjsKLSAgICAgICAgaGRyLT5idF9kZXB0aCA9IGdldF9iYWNrdHJhY2UoaGRyLT5idCwgTUFYX0JBQ0tUUkFDRV9ERVBUSCk7Ci0gICAgICAgIGFkZChoZHIsIHRvdGFsX3NpemUpOworICAgICAgICBoZHItPmJ0X2RlcHRoID0gR0VUX0JBQ0tUUkFDRShoZHItPmJ0LCBNQVhfQkFDS1RSQUNFX0RFUFRIKTsKKyAgICAgICAgYWRkKGhkciwgdG90YWxfYnl0ZXMpOwogICAgICAgICByZXR1cm4gdXNlcihoZHIpOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKIH0KIAogZXh0ZXJuICJDIiBzaXplX3QgY2hrX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBwdHIpIHsKLSAgICAvLyBkbG1hbGxvY191c2FibGVfc2l6ZSByZXR1cm5zIDAgZm9yIE5VTEwgYW5kIHVua25vd24gYmxvY2tzLgorICAgIGlmIChEZWJ1Z0NhbGxzRGlzYWJsZWQoKSkgeworICAgICAgICByZXR1cm4gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvY191c2FibGVfc2l6ZShwdHIpOworICAgIH0KKworICAgIC8vIG1hbGxvY191c2FibGVfc2l6ZSByZXR1cm5zIDAgZm9yIE5VTEwgYW5kIHVua25vd24gYmxvY2tzLgogICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTUwNiwxMiArNTU5LDQ5IEBACiAgICAgcmV0dXJuIGhkci0+c2l6ZTsKIH0KIAotc3RhdGljIHZvaWQgUmVwb3J0TWVtb3J5TGVha3MoKSB7Ci0gIC8vIFdlIG9ubHkgdHJhY2sgbGVha3MgYXQgbGV2ZWwgMTAuCi0gIGlmIChnTWFsbG9jRGVidWdMZXZlbCAhPSAxMCkgewotICAgIHJldHVybjsKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIGNoa19tYWxsaW5mbygpIHsKKyAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsaW5mbygpOworfQorCitleHRlcm4gIkMiIGludCBjaGtfcG9zaXhfbWVtYWxpZ24odm9pZCoqIG1lbXB0ciwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5wb3NpeF9tZW1hbGlnbihtZW1wdHIsIGFsaWdubWVudCwgc2l6ZSk7CiAgIH0KIAorICBpZiAoIXBvd2Vyb2YyKGFsaWdubWVudCkpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAqbWVtcHRyID0gY2hrX21lbWFsaWduKGFsaWdubWVudCwgc2l6ZSk7CisgIGVycm5vID0gc2F2ZWRfZXJybm87CisgIHJldHVybiAoKm1lbXB0ciAhPSBOVUxMKSA/IDAgOiBFTk9NRU07Cit9CisKKyNpZiBkZWZpbmVkKEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MpCitleHRlcm4gIkMiIHZvaWQqIGNoa19wdmFsbG9jKHNpemVfdCBieXRlcykgeworICBpZiAoRGVidWdDYWxsc0Rpc2FibGVkKCkpIHsKKyAgICByZXR1cm4gZ19tYWxsb2NfZGlzcGF0Y2gtPnB2YWxsb2MoYnl0ZXMpOworICB9CisKKyAgc2l6ZV90IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKKyAgc2l6ZV90IHNpemUgPSBCSU9OSUNfQUxJR04oYnl0ZXMsIHBhZ2VzaXplKTsKKyAgaWYgKHNpemUgPCBieXRlcykgeyAvLyBPdmVyZmxvdworICAgIHJldHVybiBOVUxMOworICB9CisgIHJldHVybiBjaGtfbWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOworfQorCitleHRlcm4gIkMiIHZvaWQqIGNoa192YWxsb2Moc2l6ZV90IHNpemUpIHsKKyAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT52YWxsb2Moc2l6ZSk7CisgIH0KKyAgcmV0dXJuIGNoa19tZW1hbGlnbihnZXRwYWdlc2l6ZSgpLCBzaXplKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBSZXBvcnRNZW1vcnlMZWFrcygpIHsKKyAgU2NvcGVkRGlzYWJsZURlYnVnQ2FsbHMgZGlzYWJsZTsKKwogICAvLyBVc2UgL3Byb2Mvc2VsZi9leGUgbGluayB0byBvYnRhaW4gdGhlIHByb2dyYW0gbmFtZSBmb3IgbG9nZ2luZwogICAvLyBwdXJwb3Nlcy4gSWYgaXQncyBub3QgYXZhaWxhYmxlLCB3ZSBzZXQgaXQgdG8gIjx1bmtub3duPiIuCiAgIGNoYXIgZXhlW1BBVEhfTUFYXTsKQEAgLTUyMiwxOSArNjEyLDE5IEBACiAgICAgZXhlW2NvdW50XSA9ICdcMCc7CiAgIH0KIAotICBpZiAoZ0FsbG9jYXRlZEJsb2NrQ291bnQgPT0gMCkgeworICBpZiAoZ19hbGxvY2F0ZWRfYmxvY2tfY291bnQgPT0gMCkgewogICAgIGxvZ19tZXNzYWdlKCIrKysgJXMgZGlkIG5vdCBsZWFrIiwgZXhlKTsKICAgICByZXR1cm47CiAgIH0KIAogICBzaXplX3QgaW5kZXggPSAxOwotICBjb25zdCBzaXplX3QgdG90YWwgPSBnQWxsb2NhdGVkQmxvY2tDb3VudDsKKyAgY29uc3Qgc2l6ZV90IHRvdGFsID0gZ19hbGxvY2F0ZWRfYmxvY2tfY291bnQ7CiAgIHdoaWxlIChoZWFkICE9IE5VTEwpIHsKICAgICBpbnQgc2FmZTsKICAgICBoZHJfdCogYmxvY2sgPSBoZWFkOwogICAgIGxvZ19tZXNzYWdlKCIrKysgJXMgbGVha2VkIGJsb2NrIG9mIHNpemUgJWQgYXQgJXAgKGxlYWsgJWQgb2YgJWQpIiwKICAgICAgICAgICAgICAgICBleGUsIGJsb2NrLT5zaXplLCB1c2VyKGJsb2NrKSwgaW5kZXgrKywgdG90YWwpOwotICAgIGlmIChkZWxfbGVhayhibG9jaywgJnNhZmUpKSB7CisgICAgaWYgKGRlbF9sZWFrKGJsb2NrLCAmc2FmZSkgJiYgZ19iYWNrdHJhY2VfZW5hYmxlZCkgewogICAgICAgLyogc2FmZSA9PSAxLCBiZWNhdXNlIHRoZSBhbGxvY2F0aW9uIGlzIHZhbGlkICovCiAgICAgICBsb2dfYmFja3RyYWNlKGJsb2NrLT5idCwgYmxvY2stPmJ0X2RlcHRoKTsKICAgICB9CkBAIC01NDUsMTIgKzYzNSw0MiBAQAogICB9CiB9CiAKLWV4dGVybiAiQyIgaW50IG1hbGxvY19kZWJ1Z19pbml0aWFsaXplKCkgewotICBiYWNrdHJhY2Vfc3RhcnR1cCgpOwotICByZXR1cm4gMDsKK3B0aHJlYWRfa2V5X3QgZ19kZWJ1Z19jYWxsc19kaXNhYmxlZDsKKworZXh0ZXJuICJDIiBib29sIG1hbGxvY19kZWJ1Z19pbml0aWFsaXplKEhhc2hUYWJsZSogaGFzaF90YWJsZSwgY29uc3QgTWFsbG9jRGVidWcqIG1hbGxvY19kaXNwYXRjaCkgeworICBnX2hhc2hfdGFibGUgPSBoYXNoX3RhYmxlOworICBnX21hbGxvY19kaXNwYXRjaCA9IG1hbGxvY19kaXNwYXRjaDsKKworICBwdGhyZWFkX2tleV9jcmVhdGUoJmdfZGVidWdfY2FsbHNfZGlzYWJsZWQsIE5VTEwpOworCisgIGNoYXIgZGVidWdfYmFja2xvZ1tQUk9QX1ZBTFVFX01BWF07CisgIGlmIChfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoImxpYmMuZGVidWcubWFsbG9jLmJhY2tsb2ciLCBkZWJ1Z19iYWNrbG9nKSkgeworICAgIGdfbWFsbG9jX2RlYnVnX2JhY2tsb2cgPSBhdG9pKGRlYnVnX2JhY2tsb2cpOworICAgIGluZm9fbG9nKCIlczogc2V0dGluZyBiYWNrbG9nIGxlbmd0aCB0byAlZFxuIiwgZ2V0cHJvZ25hbWUoKSwgZ19tYWxsb2NfZGVidWdfYmFja2xvZyk7CisgIH0KKworICAvLyBDaGVjayBpZiBiYWNrdHJhY2luZyBzaG91bGQgYmUgZGlzYWJsZWQuCisgIGNoYXIgZW52W1BST1BfVkFMVUVfTUFYXTsKKyAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldCgibGliYy5kZWJ1Zy5tYWxsb2Mubm9iYWNrdHJhY2UiLCBlbnYpICYmIGF0b2koZW52KSAhPSAwKSB7CisgICAgZ19iYWNrdHJhY2VfZW5hYmxlZCA9IGZhbHNlOworICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0lORk8sICJsaWJjIiwgIm5vdCBnYXRoZXJpbmcgYmFja3RyYWNlIGluZm9ybWF0aW9uXG4iKTsKKyAgfQorCisgIGlmIChnX2JhY2t0cmFjZV9lbmFibGVkKSB7CisgICAgYmFja3RyYWNlX3N0YXJ0dXAoKTsKKyAgfQorCisgIHJldHVybiB0cnVlOwogfQogCi1leHRlcm4gIkMiIHZvaWQgbWFsbG9jX2RlYnVnX2ZpbmFsaXplKCkgewotICBSZXBvcnRNZW1vcnlMZWFrcygpOwotICBiYWNrdHJhY2Vfc2h1dGRvd24oKTsKK2V4dGVybiAiQyIgdm9pZCBtYWxsb2NfZGVidWdfZmluYWxpemUoaW50IG1hbGxvY19kZWJ1Z19sZXZlbCkgeworICAvLyBXZSBvbmx5IHRyYWNrIGxlYWtzIGF0IGxldmVsIDEwLgorICBpZiAobWFsbG9jX2RlYnVnX2xldmVsID09IDEwKSB7CisgICAgUmVwb3J0TWVtb3J5TGVha3MoKTsKKyAgfQorICBpZiAoZ19iYWNrdHJhY2VfZW5hYmxlZCkgeworICAgIGJhY2t0cmFjZV9zaHV0ZG93bigpOworICB9CisKKyAgcHRocmVhZF9zZXRzcGVjaWZpYyhnX2RlYnVnX2NhbGxzX2Rpc2FibGVkLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19jb21tb24uY3BwIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAKaW5kZXggODVmNzc5MS4uMGI2YTE0MiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAKQEAgLTI2LDE5ICsyNiwxNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotLyoKLSAqIENvbnRhaW5zIGRlZmluaXRpb24gb2Ygc3RydWN0dXJlcywgZ2xvYmFsIHZhcmlhYmxlcywgYW5kIGltcGxlbWVudGF0aW9uIG9mCi0gKiByb3V0aW5lcyB0aGF0IGFyZSB1c2VkIGJ5IG1hbGxvYyBsZWFrIGRldGVjdGlvbiBjb2RlIGFuZCBvdGhlciBjb21wb25lbnRzIGluCi0gKiB0aGUgc3lzdGVtLiBUaGUgdHJpY2sgaXMgdGhhdCBzb21lIGNvbXBvbmVudHMgZXhwZWN0IHRoZXNlIGRhdGEgYW5kCi0gKiByb3V0aW5lcyB0byBiZSBkZWZpbmVkIC8gaW1wbGVtZW50ZWQgaW4gbGliYy5zbyBsaWJyYXJ5LCByZWdhcmRsZXNzCi0gKiB3aGV0aGVyIG9yIG5vdCBNQUxMT0NfTEVBS19DSEVDSyBtYWNybyBpcyBkZWZpbmVkLiBUbyBtYWtlIHRoaW5ncyBldmVuCi0gKiBtb3JlIHRyaWNreSwgbWFsbG9jIGxlYWsgZGV0ZWN0aW9uIGNvZGUsIGltcGxlbWVudGVkIGluCi0gKiBsaWJjX21hbGxvY19kZWJ1Zy5zbyBhbHNvIHJlcXVpcmVzIGFjY2VzcyB0byB0aGVzZSB2YXJpYWJsZXMgYW5kIHJvdXRpbmVzCi0gKiAodG8gZmlsbCBhbGxvY2F0aW9uIGVudHJ5IGhhc2ggdGFibGUsIGZvciBleGFtcGxlKS4gU28sIGFsbCByZWxldmFudAotICogdmFyaWFibGVzIGFuZCByb3V0aW5lcyBhcmUgZGVmaW5lZCAvIGltcGxlbWVudGVkIGhlcmUgYW5kIGV4cG9ydGVkCi0gKiB0byBhbGwsIGxlYWsgZGV0ZWN0aW9uIGNvZGUgYW5kIG90aGVyIGNvbXBvbmVudHMgdmlhIGR5bmFtaWMgKGxpYmMuc28pLAotICogb3Igc3RhdGljIChsaWJjLmEpIGxpbmtpbmcuCi0gKi8KKy8vIENvbnRhaW5zIGRlZmluaXRpb24gb2Ygc3RydWN0dXJlcywgZ2xvYmFsIHZhcmlhYmxlcywgYW5kIGltcGxlbWVudGF0aW9uIG9mCisvLyByb3V0aW5lcyB0aGF0IGFyZSB1c2VkIGJ5IG1hbGxvYyBsZWFrIGRldGVjdGlvbiBjb2RlIGFuZCBvdGhlciBjb21wb25lbnRzIGluCisvLyB0aGUgc3lzdGVtLiBUaGUgdHJpY2sgaXMgdGhhdCBzb21lIGNvbXBvbmVudHMgZXhwZWN0IHRoZXNlIGRhdGEgYW5kCisvLyByb3V0aW5lcyB0byBiZSBkZWZpbmVkIC8gaW1wbGVtZW50ZWQgaW4gbGliYy5zbyBsaWJyYXJ5LCByZWdhcmRsZXNzCisvLyB3aGV0aGVyIG9yIG5vdCBNQUxMT0NfTEVBS19DSEVDSyBtYWNybyBpcyBkZWZpbmVkLiBUbyBtYWtlIHRoaW5ncyBldmVuCisvLyBtb3JlIHRyaWNreSwgbWFsbG9jIGxlYWsgZGV0ZWN0aW9uIGNvZGUsIGltcGxlbWVudGVkIGluCisvLyBsaWJjX21hbGxvY19kZWJ1Zy5zbyBhbHNvIHJlcXVpcmVzIGFjY2VzcyB0byB0aGVzZSB2YXJpYWJsZXMgYW5kIHJvdXRpbmVzCisvLyAodG8gZmlsbCBhbGxvY2F0aW9uIGVudHJ5IGhhc2ggdGFibGUsIGZvciBleGFtcGxlKS4gU28sIGFsbCByZWxldmFudAorLy8gdmFyaWFibGVzIGFuZCByb3V0aW5lcyBhcmUgZGVmaW5lZCAvIGltcGxlbWVudGVkIGhlcmUgYW5kIGV4cG9ydGVkCisvLyB0byBhbGwsIGxlYWsgZGV0ZWN0aW9uIGNvZGUgYW5kIG90aGVyIGNvbXBvbmVudHMgdmlhIGR5bmFtaWMgKGxpYmMuc28pLAorLy8gb3Igc3RhdGljIChsaWJjLmEpIGxpbmtpbmcuCiAKICNpbmNsdWRlICJtYWxsb2NfZGVidWdfY29tbW9uLmgiCiAKQEAgLTQ2LDQ4MyArNDQsNDg0IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNpbmNsdWRlICJkbG1hbGxvYy5oIgogI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgiCiAKLS8qCi0gKiBJbiBhIFZNIHByb2Nlc3MsIHRoaXMgaXMgc2V0IHRvIDEgYWZ0ZXIgZm9yaygpaW5nIG91dCBvZiB6eWdvdGUuCi0gKi8KKyNpZiBkZWZpbmVkKFVTRV9KRU1BTExPQykKKyNpbmNsdWRlICJqZW1hbGxvYy5oIgorI2RlZmluZSBNYWxsb2MoZnVuY3Rpb24pICBqZV8gIyMgZnVuY3Rpb24KKyNlbGlmIGRlZmluZWQoVVNFX0RMTUFMTE9DKQorI2luY2x1ZGUgImRsbWFsbG9jLmgiCisjZGVmaW5lIE1hbGxvYyhmdW5jdGlvbikgIGRsICMjIGZ1bmN0aW9uCisjZWxzZQorI2Vycm9yICJFaXRoZXIgb25lIG9mIFVTRV9ETE1BTExPQyBvciBVU0VfSkVNQUxMT0MgbXVzdCBiZSBkZWZpbmVkLiIKKyNlbmRpZgorCisvLyBJbiBhIFZNIHByb2Nlc3MsIHRoaXMgaXMgc2V0IHRvIDEgYWZ0ZXIgZm9yaygpaW5nIG91dCBvZiB6eWdvdGUuCiBpbnQgZ01hbGxvY0xlYWtaeWdvdGVDaGlsZCA9IDA7CiAKLXB0aHJlYWRfbXV0ZXhfdCBnQWxsb2NhdGlvbnNNdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci1IYXNoVGFibGUgZ0hhc2hUYWJsZTsKK3N0YXRpYyBIYXNoVGFibGUgZ19oYXNoX3RhYmxlOworCisvLyBTdXBwb3J0IGZvciBtYWxsb2MgZGVidWdnaW5nLgorLy8gVGFibGUgZm9yIGRpc3BhdGNoaW5nIG1hbGxvYyBjYWxscywgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IGRpc3BhdGNoZXJzLgorc3RhdGljIGNvbnN0IE1hbGxvY0RlYnVnIF9fbGliY19tYWxsb2NfZGVmYXVsdF9kaXNwYXRjaCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDMyKSkpID0geworICBNYWxsb2MoY2FsbG9jKSwKKyAgTWFsbG9jKGZyZWUpLAorICBNYWxsb2MobWFsbGluZm8pLAorICBNYWxsb2MobWFsbG9jKSwKKyAgTWFsbG9jKG1hbGxvY191c2FibGVfc2l6ZSksCisgIE1hbGxvYyhtZW1hbGlnbiksCisgIE1hbGxvYyhwb3NpeF9tZW1hbGlnbiksCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorICBNYWxsb2MocHZhbGxvYyksCisjZW5kaWYKKyAgTWFsbG9jKHJlYWxsb2MpLAorI2lmIGRlZmluZWQoSEFWRV9ERVBSRUNBVEVEX01BTExPQ19GVU5DUykKKyAgTWFsbG9jKHZhbGxvYyksCisjZW5kaWYKK307CisKKy8vIFNlbGVjdG9yIG9mIGRpc3BhdGNoIHRhYmxlIHRvIHVzZSBmb3IgZGlzcGF0Y2hpbmcgbWFsbG9jIGNhbGxzLgorc3RhdGljIGNvbnN0IE1hbGxvY0RlYnVnKiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoID0gJl9fbGliY19tYWxsb2NfZGVmYXVsdF9kaXNwYXRjaDsKKworLy8gSGFuZGxlIHRvIHNoYXJlZCBsaWJyYXJ5IHdoZXJlIGFjdHVhbCBtZW1vcnkgYWxsb2NhdGlvbiBpcyBpbXBsZW1lbnRlZC4KKy8vIFRoaXMgbGlicmFyeSBpcyBsb2FkZWQgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzIGFyZSByZWRpcmVjdGVkIHRoZXJlCisvLyB3aGVuIGxpYmMuZGVidWcubWFsbG9jIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRhaW5zIHZhbHVlIG90aGVyIHRoYW4KKy8vIHplcm86CisvLyAxICAtIEZvciBtZW1vcnkgbGVhayBkZXRlY3Rpb25zLgorLy8gNSAgLSBGb3IgZmlsbGluZyBhbGxvY2F0ZWQgLyBmcmVlZCBtZW1vcnkgd2l0aCBwYXR0ZXJucyBkZWZpbmVkIGJ5CisvLyAgICAgIENIS19TRU5USU5FTF9WQUxVRSwgYW5kIENIS19GSUxMX0ZSRUUgbWFjcm9zLgorLy8gMTAgLSBGb3IgYWRkaW5nIHByZS0sIGFuZCBwb3N0LSBhbGxvY2F0aW9uIHN0dWJzIGluIG9yZGVyIHRvIGRldGVjdAorLy8gICAgICBidWZmZXIgb3ZlcnJ1bnMuCisvLyBOb3RlIHRoYXQgZW11bGF0b3IncyBtZW1vcnkgYWxsb2NhdGlvbiBpbnN0cnVtZW50YXRpb24gaXMgbm90IGNvbnRyb2xsZWQgYnkKKy8vIGxpYmMuZGVidWcubWFsbG9jIHZhbHVlLCBidXQgcmF0aGVyIGJ5IGVtdWxhdG9yLCBzdGFydGVkIHdpdGggLW1lbWNoZWNrCisvLyBvcHRpb24uIE5vdGUgYWxzbywgdGhhdCBpZiBlbXVsYXRvciBoYXMgc3RhcnRlZCB3aXRoIC1tZW1jaGVjayBvcHRpb24sCisvLyBlbXVsYXRvcidzIGluc3RydW1lbnRlZCBtZW1vcnkgYWxsb2NhdGlvbiB3aWxsIHRha2Ugb3ZlciB2YWx1ZSBzYXZlZCBpbgorLy8gbGliYy5kZWJ1Zy5tYWxsb2MuIEluIG90aGVyIHdvcmRzLCBpZiBlbXVsYXRvciBoYXMgc3RhcnRlZCB3aXRoIC1tZW1jaGVjaworLy8gb3B0aW9uLCBsaWJjLmRlYnVnLm1hbGxvYyB2YWx1ZSBpcyBpZ25vcmVkLgorLy8gQWN0dWFsIGZ1bmN0aW9uYWxpdHkgZm9yIGRlYnVnIGxldmVscyAxLTEwIGlzIGltcGxlbWVudGVkIGluCisvLyBsaWJjX21hbGxvY19kZWJ1Z19sZWFrLnNvLCB3aGlsZSBmdW5jdGlvbmFsaXR5IGZvciBlbXVsYXRvcidzIGluc3RydW1lbnRlZAorLy8gYWxsb2NhdGlvbnMgaXMgaW1wbGVtZW50ZWQgaW4gbGliY19tYWxsb2NfZGVidWdfcWVtdS5zbyBhbmQgY2FuIGJlIHJ1biBpbnNpZGUKKy8vIHRoZSBlbXVsYXRvciBvbmx5LgorI2lmICFkZWZpbmVkKExJQkNfU1RBVElDKQorc3RhdGljIHZvaWQqIGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlID0gTlVMTDsKKyNlbmRpZgorCisKKy8vIFRoZSB2YWx1ZSBvZiBsaWJjLmRlYnVnLm1hbGxvYy4KKyNpZiAhZGVmaW5lZChMSUJDX1NUQVRJQykKK3N0YXRpYyBpbnQgZ19tYWxsb2NfZGVidWdfbGV2ZWwgPSAwOworI2VuZGlmCiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBvdXRwdXQgZnVuY3Rpb25zCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBzdGF0aWMgaW50IGhhc2hfZW50cnlfY29tcGFyZShjb25zdCB2b2lkKiBhcmcxLCBjb25zdCB2b2lkKiBhcmcyKSB7Ci0gICAgaW50IHJlc3VsdDsKKyAgaW50IHJlc3VsdDsKIAotICAgIGNvbnN0IEhhc2hFbnRyeSogZTEgPSAqc3RhdGljX2Nhc3Q8SGFzaEVudHJ5KiBjb25zdCo+KGFyZzEpOwotICAgIGNvbnN0IEhhc2hFbnRyeSogZTIgPSAqc3RhdGljX2Nhc3Q8SGFzaEVudHJ5KiBjb25zdCo+KGFyZzIpOworICBjb25zdCBIYXNoRW50cnkqIGUxID0gKnN0YXRpY19jYXN0PEhhc2hFbnRyeSogY29uc3QqPihhcmcxKTsKKyAgY29uc3QgSGFzaEVudHJ5KiBlMiA9ICpzdGF0aWNfY2FzdDxIYXNoRW50cnkqIGNvbnN0Kj4oYXJnMik7CiAKLSAgICAvLyBpZiBvbmUgb3IgYm90aCBhcmcgcG9pbnRlcnMgYXJlIG51bGwsIGRlYWwgZ3JhY2VmdWxseQotICAgIGlmIChlMSA9PSBOVUxMKSB7Ci0gICAgICAgIHJlc3VsdCA9IChlMiA9PSBOVUxMKSA/IDAgOiAxOwotICAgIH0gZWxzZSBpZiAoZTIgPT0gTlVMTCkgewotICAgICAgICByZXN1bHQgPSAtMTsKKyAgLy8gaWYgb25lIG9yIGJvdGggYXJnIHBvaW50ZXJzIGFyZSBudWxsLCBkZWFsIGdyYWNlZnVsbHkKKyAgaWYgKGUxID09IE5VTEwpIHsKKyAgICByZXN1bHQgPSAoZTIgPT0gTlVMTCkgPyAwIDogMTsKKyAgfSBlbHNlIGlmIChlMiA9PSBOVUxMKSB7CisgICAgcmVzdWx0ID0gLTE7CisgIH0gZWxzZSB7CisgICAgc2l6ZV90IG5iQWxsb2MxID0gZTEtPmFsbG9jYXRpb25zOworICAgIHNpemVfdCBuYkFsbG9jMiA9IGUyLT5hbGxvY2F0aW9uczsKKyAgICBzaXplX3Qgc2l6ZTEgPSBlMS0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICBzaXplX3Qgc2l6ZTIgPSBlMi0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICBzaXplX3QgYWxsb2MxID0gbmJBbGxvYzEgKiBzaXplMTsKKyAgICBzaXplX3QgYWxsb2MyID0gbmJBbGxvYzIgKiBzaXplMjsKKworICAgIC8vIHNvcnQgaW4gZGVzY2VuZGluZyBvcmRlciBieToKKyAgICAvLyAxKSB0b3RhbCBzaXplCisgICAgLy8gMikgbnVtYmVyIG9mIGFsbG9jYXRpb25zCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHVzZWQgZm9yIHNvcnRpbmcsIG5vdCBkZXRlcm1pbmF0aW9uIG9mIGVxdWFsaXR5LCBzbyB3ZSBkb24ndAorICAgIC8vIG5lZWQgdG8gY29tcGFyZSB0aGUgYml0IGZsYWdzLgorICAgIGlmIChhbGxvYzEgPiBhbGxvYzIpIHsKKyAgICAgIHJlc3VsdCA9IC0xOworICAgIH0gZWxzZSBpZiAoYWxsb2MxIDwgYWxsb2MyKSB7CisgICAgICByZXN1bHQgPSAxOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpemVfdCBuYkFsbG9jMSA9IGUxLT5hbGxvY2F0aW9uczsKLSAgICAgICAgc2l6ZV90IG5iQWxsb2MyID0gZTItPmFsbG9jYXRpb25zOwotICAgICAgICBzaXplX3Qgc2l6ZTEgPSBlMS0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKLSAgICAgICAgc2l6ZV90IHNpemUyID0gZTItPnNpemUgJiB+U0laRV9GTEFHX01BU0s7Ci0gICAgICAgIHNpemVfdCBhbGxvYzEgPSBuYkFsbG9jMSAqIHNpemUxOwotICAgICAgICBzaXplX3QgYWxsb2MyID0gbmJBbGxvYzIgKiBzaXplMjsKLQotICAgICAgICAvLyBzb3J0IGluIGRlc2NlbmRpbmcgb3JkZXIgYnk6Ci0gICAgICAgIC8vIDEpIHRvdGFsIHNpemUKLSAgICAgICAgLy8gMikgbnVtYmVyIG9mIGFsbG9jYXRpb25zCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBmb3Igc29ydGluZywgbm90IGRldGVybWluYXRpb24gb2YgZXF1YWxpdHksIHNvIHdlIGRvbid0Ci0gICAgICAgIC8vIG5lZWQgdG8gY29tcGFyZSB0aGUgYml0IGZsYWdzLgotICAgICAgICBpZiAoYWxsb2MxID4gYWxsb2MyKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSAtMTsKLSAgICAgICAgfSBlbHNlIGlmIChhbGxvYzEgPCBhbGxvYzIpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobmJBbGxvYzEgPiBuYkFsbG9jMikgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IC0xOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYkFsbG9jMSA8IG5iQWxsb2MyKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgaWYgKG5iQWxsb2MxID4gbmJBbGxvYzIpIHsKKyAgICAgICAgcmVzdWx0ID0gLTE7CisgICAgICB9IGVsc2UgaWYgKG5iQWxsb2MxIDwgbmJBbGxvYzIpIHsKKyAgICAgICAgcmVzdWx0ID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICB9CiAgICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLyoKLSAqIFJldHJpZXZlIG5hdGl2ZSBoZWFwIGluZm9ybWF0aW9uLgotICoKLSAqICIqaW5mbyIgaXMgc2V0IHRvIGEgYnVmZmVyIHdlIGFsbG9jYXRlCi0gKiAiKm92ZXJhbGxTaXplIiBpcyBzZXQgdG8gdGhlIHNpemUgb2YgdGhlICJpbmZvIiBidWZmZXIKLSAqICIqaW5mb1NpemUiIGlzIHNldCB0byB0aGUgc2l6ZSBvZiBhIHNpbmdsZSBlbnRyeQotICogIip0b3RhbE1lbW9yeSIgaXMgc2V0IHRvIHRoZSBzdW0gb2YgYWxsIGFsbG9jYXRpb25zIHdlJ3JlIHRyYWNraW5nOyBkb2VzCi0gKiAgIG5vdCBpbmNsdWRlIGhlYXAgb3ZlcmhlYWQKLSAqICIqYmFja3RyYWNlU2l6ZSIgaXMgc2V0IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBiYWNrIHRyYWNlCi0gKi8KKy8vIFJldHJpZXZlIG5hdGl2ZSBoZWFwIGluZm9ybWF0aW9uLgorLy8KKy8vICIqaW5mbyIgaXMgc2V0IHRvIGEgYnVmZmVyIHdlIGFsbG9jYXRlCisvLyAiKm92ZXJhbGxTaXplIiBpcyBzZXQgdG8gdGhlIHNpemUgb2YgdGhlICJpbmZvIiBidWZmZXIKKy8vICIqaW5mb1NpemUiIGlzIHNldCB0byB0aGUgc2l6ZSBvZiBhIHNpbmdsZSBlbnRyeQorLy8gIip0b3RhbE1lbW9yeSIgaXMgc2V0IHRvIHRoZSBzdW0gb2YgYWxsIGFsbG9jYXRpb25zIHdlJ3JlIHRyYWNraW5nOyBkb2VzCisvLyAgIG5vdCBpbmNsdWRlIGhlYXAgb3ZlcmhlYWQKKy8vICIqYmFja3RyYWNlU2l6ZSIgaXMgc2V0IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBiYWNrIHRyYWNlCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBFeHBvcnRlZCBmb3IgdXNlIGJ5IGRkbXMuCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogZXh0ZXJuICJDIiB2b2lkIGdldF9tYWxsb2NfbGVha19pbmZvKHVpbnQ4X3QqKiBpbmZvLCBzaXplX3QqIG92ZXJhbGxTaXplLAotICAgICAgICBzaXplX3QqIGluZm9TaXplLCBzaXplX3QqIHRvdGFsTWVtb3J5LCBzaXplX3QqIGJhY2t0cmFjZVNpemUpIHsKLSAgICAvLyBkb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIGludmFsaWQgYXJndW1lbnRzCi0gICAgaWYgKGluZm8gPT0gTlVMTCB8fCBvdmVyYWxsU2l6ZSA9PSBOVUxMIHx8IGluZm9TaXplID09IE5VTEwgfHwKLSAgICAgICAgICAgIHRvdGFsTWVtb3J5ID09IE5VTEwgfHwgYmFja3RyYWNlU2l6ZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybjsKKyAgICBzaXplX3QqIGluZm9TaXplLCBzaXplX3QqIHRvdGFsTWVtb3J5LCBzaXplX3QqIGJhY2t0cmFjZVNpemUpIHsKKyAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBpbnZhbGlkIGFyZ3VtZW50cy4KKyAgaWYgKGluZm8gPT0gTlVMTCB8fCBvdmVyYWxsU2l6ZSA9PSBOVUxMIHx8IGluZm9TaXplID09IE5VTEwgfHwKKyAgICB0b3RhbE1lbW9yeSA9PSBOVUxMIHx8IGJhY2t0cmFjZVNpemUgPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQorICAqdG90YWxNZW1vcnkgPSAwOworCisgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdfaGFzaF90YWJsZS5sb2NrKTsKKyAgaWYgKGdfaGFzaF90YWJsZS5jb3VudCA9PSAwKSB7CisgICAgKmluZm8gPSBOVUxMOworICAgICpvdmVyYWxsU2l6ZSA9IDA7CisgICAgKmluZm9TaXplID0gMDsKKyAgICAqYmFja3RyYWNlU2l6ZSA9IDA7CisgICAgcmV0dXJuOworICB9CisKKyAgSGFzaEVudHJ5KiogbGlzdCA9IHN0YXRpY19jYXN0PEhhc2hFbnRyeSoqPihNYWxsb2MobWFsbG9jKShzaXplb2Yodm9pZCopICogZ19oYXNoX3RhYmxlLmNvdW50KSk7CisKKyAgLy8gR2V0IHRoZSBlbnRyaWVzIGludG8gYW4gYXJyYXkgdG8gYmUgc29ydGVkLgorICBzaXplX3QgaW5kZXggPSAwOworICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBIQVNIVEFCTEVfU0laRSA7ICsraSkgeworICAgIEhhc2hFbnRyeSogZW50cnkgPSBnX2hhc2hfdGFibGUuc2xvdHNbaV07CisgICAgd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgIGxpc3RbaW5kZXhdID0gZW50cnk7CisgICAgICAqdG90YWxNZW1vcnkgPSAqdG90YWxNZW1vcnkgKyAoKGVudHJ5LT5zaXplICYgflNJWkVfRkxBR19NQVNLKSAqIGVudHJ5LT5hbGxvY2F0aW9ucyk7CisgICAgICBpbmRleCsrOworICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKICAgICB9Ci0gICAgKnRvdGFsTWVtb3J5ID0gMDsKKyAgfQogCi0gICAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ0FsbG9jYXRpb25zTXV0ZXgpOworICAvLyBYWFg6IHRoZSBwcm90b2NvbCBkb2Vzbid0IGFsbG93IHZhcmlhYmxlIHNpemUgZm9yIHRoZSBzdGFjayB0cmFjZSAoeWV0KQorICAqaW5mb1NpemUgPSAoc2l6ZW9mKHNpemVfdCkgKiAyKSArIChzaXplb2YodWludHB0cl90KSAqIEJBQ0tUUkFDRV9TSVpFKTsKKyAgKm92ZXJhbGxTaXplID0gKmluZm9TaXplICogZ19oYXNoX3RhYmxlLmNvdW50OworICAqYmFja3RyYWNlU2l6ZSA9IEJBQ0tUUkFDRV9TSVpFOwogCi0gICAgaWYgKGdIYXNoVGFibGUuY291bnQgPT0gMCkgewotICAgICAgICAqaW5mbyA9IE5VTEw7Ci0gICAgICAgICpvdmVyYWxsU2l6ZSA9IDA7Ci0gICAgICAgICppbmZvU2l6ZSA9IDA7Ci0gICAgICAgICpiYWNrdHJhY2VTaXplID0gMDsKLSAgICAgICAgcmV0dXJuOworICAvLyBub3cgZ2V0IGEgYnl0ZSBhcnJheSBiaWcgZW5vdWdoIGZvciB0aGlzCisgICppbmZvID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KE1hbGxvYyhtYWxsb2MpKCpvdmVyYWxsU2l6ZSkpOworICBpZiAoKmluZm8gPT0gTlVMTCkgeworICAgICpvdmVyYWxsU2l6ZSA9IDA7CisgICAgTWFsbG9jKGZyZWUpKGxpc3QpOworICAgIHJldHVybjsKKyAgfQorCisgIHFzb3J0KGxpc3QsIGdfaGFzaF90YWJsZS5jb3VudCwgc2l6ZW9mKHZvaWQqKSwgaGFzaF9lbnRyeV9jb21wYXJlKTsKKworICB1aW50OF90KiBoZWFkID0gKmluZm87CisgIGNvbnN0IHNpemVfdCBjb3VudCA9IGdfaGFzaF90YWJsZS5jb3VudDsKKyAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgY291bnQgOyArK2kpIHsKKyAgICBIYXNoRW50cnkqIGVudHJ5ID0gbGlzdFtpXTsKKyAgICBzaXplX3QgZW50cnlTaXplID0gKHNpemVvZihzaXplX3QpICogMikgKyAoc2l6ZW9mKHVpbnRwdHJfdCkgKiBlbnRyeS0+bnVtRW50cmllcyk7CisgICAgaWYgKGVudHJ5U2l6ZSA8ICppbmZvU2l6ZSkgeworICAgICAgLy8gV2UncmUgd3JpdGluZyBsZXNzIHRoYW4gYSBmdWxsIGVudHJ5LCBjbGVhciBvdXQgdGhlIHJlc3QuCisgICAgICBtZW1zZXQoaGVhZCArIGVudHJ5U2l6ZSwgMCwgKmluZm9TaXplIC0gZW50cnlTaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gTWFrZSBzdXJlIHRoZSBhbW91bnQgd2UncmUgY29weWluZyBkb2Vzbid0IGV4Y2VlZCB0aGUgbGltaXQuCisgICAgICBlbnRyeVNpemUgPSAqaW5mb1NpemU7CiAgICAgfQorICAgIG1lbWNweShoZWFkLCAmKGVudHJ5LT5zaXplKSwgZW50cnlTaXplKTsKKyAgICBoZWFkICs9ICppbmZvU2l6ZTsKKyAgfQogCi0gICAgSGFzaEVudHJ5KiogbGlzdCA9IHN0YXRpY19jYXN0PEhhc2hFbnRyeSoqPihkbG1hbGxvYyhzaXplb2Yodm9pZCopICogZ0hhc2hUYWJsZS5jb3VudCkpOwotCi0gICAgLy8gZ2V0IHRoZSBlbnRyaWVzIGludG8gYW4gYXJyYXkgdG8gYmUgc29ydGVkCi0gICAgaW50IGluZGV4ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBIQVNIVEFCTEVfU0laRSA7ICsraSkgewotICAgICAgICBIYXNoRW50cnkqIGVudHJ5ID0gZ0hhc2hUYWJsZS5zbG90c1tpXTsKLSAgICAgICAgd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGxpc3RbaW5kZXhdID0gZW50cnk7Ci0gICAgICAgICAgICAqdG90YWxNZW1vcnkgPSAqdG90YWxNZW1vcnkgKwotICAgICAgICAgICAgICAgICgoZW50cnktPnNpemUgJiB+U0laRV9GTEFHX01BU0spICogZW50cnktPmFsbG9jYXRpb25zKTsKLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICBlbnRyeSA9IGVudHJ5LT5uZXh0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gWFhYOiB0aGUgcHJvdG9jb2wgZG9lc24ndCBhbGxvdyB2YXJpYWJsZSBzaXplIGZvciB0aGUgc3RhY2sgdHJhY2UgKHlldCkKLSAgICAqaW5mb1NpemUgPSAoc2l6ZW9mKHNpemVfdCkgKiAyKSArIChzaXplb2YodWludHB0cl90KSAqIEJBQ0tUUkFDRV9TSVpFKTsKLSAgICAqb3ZlcmFsbFNpemUgPSAqaW5mb1NpemUgKiBnSGFzaFRhYmxlLmNvdW50OwotICAgICpiYWNrdHJhY2VTaXplID0gQkFDS1RSQUNFX1NJWkU7Ci0KLSAgICAvLyBub3cgZ2V0IGEgYnl0ZSBhcnJheSBiaWcgZW5vdWdoIGZvciB0aGlzCi0gICAgKmluZm8gPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGxtYWxsb2MoKm92ZXJhbGxTaXplKSk7Ci0KLSAgICBpZiAoKmluZm8gPT0gTlVMTCkgewotICAgICAgICAqb3ZlcmFsbFNpemUgPSAwOwotICAgICAgICBkbGZyZWUobGlzdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBxc29ydChsaXN0LCBnSGFzaFRhYmxlLmNvdW50LCBzaXplb2Yodm9pZCopLCBoYXNoX2VudHJ5X2NvbXBhcmUpOwotCi0gICAgdWludDhfdCogaGVhZCA9ICppbmZvOwotICAgIGNvbnN0IGludCBjb3VudCA9IGdIYXNoVGFibGUuY291bnQ7Ci0gICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgY291bnQgOyArK2kpIHsKLSAgICAgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGxpc3RbaV07Ci0gICAgICAgIHNpemVfdCBlbnRyeVNpemUgPSAoc2l6ZW9mKHNpemVfdCkgKiAyKSArIChzaXplb2YodWludHB0cl90KSAqIGVudHJ5LT5udW1FbnRyaWVzKTsKLSAgICAgICAgaWYgKGVudHJ5U2l6ZSA8ICppbmZvU2l6ZSkgewotICAgICAgICAgICAgLyogd2UncmUgd3JpdGluZyBsZXNzIHRoYW4gYSBmdWxsIGVudHJ5LCBjbGVhciBvdXQgdGhlIHJlc3QgKi8KLSAgICAgICAgICAgIG1lbXNldChoZWFkICsgZW50cnlTaXplLCAwLCAqaW5mb1NpemUgLSBlbnRyeVNpemUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogbWFrZSBzdXJlIHRoZSBhbW91bnQgd2UncmUgY29weWluZyBkb2Vzbid0IGV4Y2VlZCB0aGUgbGltaXQgKi8KLSAgICAgICAgICAgIGVudHJ5U2l6ZSA9ICppbmZvU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoaGVhZCwgJihlbnRyeS0+c2l6ZSksIGVudHJ5U2l6ZSk7Ci0gICAgICAgIGhlYWQgKz0gKmluZm9TaXplOwotICAgIH0KLQotICAgIGRsZnJlZShsaXN0KTsKKyAgTWFsbG9jKGZyZWUpKGxpc3QpOwogfQogCiBleHRlcm4gIkMiIHZvaWQgZnJlZV9tYWxsb2NfbGVha19pbmZvKHVpbnQ4X3QqIGluZm8pIHsKLSAgICBkbGZyZWUoaW5mbyk7CisgIE1hbGxvYyhmcmVlKShpbmZvKTsKIH0KIAotZXh0ZXJuICJDIiBzdHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8oKSB7Ci0gICAgcmV0dXJuIGRsbWFsbGluZm8oKTsKLX0KLQotZXh0ZXJuICJDIiB2b2lkKiB2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7Ci0gICAgcmV0dXJuIGRsdmFsbG9jKGJ5dGVzKTsKLX0KLQotZXh0ZXJuICJDIiB2b2lkKiBwdmFsbG9jKHNpemVfdCBieXRlcykgewotICAgIHJldHVybiBkbHB2YWxsb2MoYnl0ZXMpOwotfQotCi1leHRlcm4gIkMiIGludCBwb3NpeF9tZW1hbGlnbih2b2lkKiogbWVtcHRyLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgewotICAgIHJldHVybiBkbHBvc2l4X21lbWFsaWduKG1lbXB0ciwgYWxpZ25tZW50LCBzaXplKTsKLX0KLQotLyogU3VwcG9ydCBmb3IgbWFsbG9jIGRlYnVnZ2luZy4KLSAqIE5vdGUgdGhhdCBpZiBVU0VfRExfUFJFRklYIGlzIG5vdCBkZWZpbmVkLCBpdCdzIGFzc3VtZWQgdGhhdCBtZW1vcnkKLSAqIGFsbG9jYXRpb24gcm91dGluZXMgYXJlIGltcGxlbWVudGVkIHNvbWV3aGVyZSBlbHNlLCBzbyBhbGwgb3VyIGN1c3RvbQotICogbWFsbG9jIHJvdXRpbmVzIHNob3VsZCBub3QgYmUgY29tcGlsZWQgYXQgYWxsLgotICovCi0jaWZkZWYgVVNFX0RMX1BSRUZJWAotCi0vKiBUYWJsZSBmb3IgZGlzcGF0Y2hpbmcgbWFsbG9jIGNhbGxzLCBpbml0aWFsaXplZCB3aXRoIGRlZmF1bHQgZGlzcGF0Y2hlcnMuICovCi1leHRlcm4gY29uc3QgTWFsbG9jRGVidWcgX19saWJjX21hbGxvY19kZWZhdWx0X2Rpc3BhdGNoOwotY29uc3QgTWFsbG9jRGVidWcgX19saWJjX21hbGxvY19kZWZhdWx0X2Rpc3BhdGNoIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMzIpKSkgPQotewotICAgIGRsbWFsbG9jLCBkbGZyZWUsIGRsY2FsbG9jLCBkbHJlYWxsb2MsIGRsbWVtYWxpZ24sIGRsbWFsbG9jX3VzYWJsZV9zaXplLAotfTsKLQotLyogU2VsZWN0b3Igb2YgZGlzcGF0Y2ggdGFibGUgdG8gdXNlIGZvciBkaXNwYXRjaGluZyBtYWxsb2MgY2FsbHMuICovCi1jb25zdCBNYWxsb2NEZWJ1ZyogX19saWJjX21hbGxvY19kaXNwYXRjaCA9ICZfX2xpYmNfbWFsbG9jX2RlZmF1bHRfZGlzcGF0Y2g7Ci0KLWV4dGVybiAiQyIgdm9pZCogbWFsbG9jKHNpemVfdCBieXRlcykgewotICAgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2MoYnl0ZXMpOworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEFsbG9jYXRpb24gZnVuY3Rpb25zCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZXh0ZXJuICJDIiB2b2lkKiBjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPmNhbGxvYyhuX2VsZW1lbnRzLCBlbGVtX3NpemUpOwogfQogCiBleHRlcm4gIkMiIHZvaWQgZnJlZSh2b2lkKiBtZW0pIHsKLSAgICBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5mcmVlKG1lbSk7CisgIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPmZyZWUobWVtKTsKIH0KIAotZXh0ZXJuICJDIiB2b2lkKiBjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKLSAgICByZXR1cm4gX19saWJjX21hbGxvY19kaXNwYXRjaC0+Y2FsbG9jKG5fZWxlbWVudHMsIGVsZW1fc2l6ZSk7CitleHRlcm4gIkMiIHN0cnVjdCBtYWxsaW5mbyBtYWxsaW5mbygpIHsKKyAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxpbmZvKCk7CiB9CiAKLWV4dGVybiAiQyIgdm9pZCogcmVhbGxvYyh2b2lkKiBvbGRNZW0sIHNpemVfdCBieXRlcykgewotICAgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5yZWFsbG9jKG9sZE1lbSwgYnl0ZXMpOwotfQotCi1leHRlcm4gIkMiIHZvaWQqIG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgewotICAgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5tZW1hbGlnbihhbGlnbm1lbnQsIGJ5dGVzKTsKK2V4dGVybiAiQyIgdm9pZCogbWFsbG9jKHNpemVfdCBieXRlcykgeworICByZXR1cm4gX19saWJjX21hbGxvY19kaXNwYXRjaC0+bWFsbG9jKGJ5dGVzKTsKIH0KIAogZXh0ZXJuICJDIiBzaXplX3QgbWFsbG9jX3VzYWJsZV9zaXplKGNvbnN0IHZvaWQqIG1lbSkgewotICAgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2NfdXNhYmxlX3NpemUobWVtKTsKKyAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvY191c2FibGVfc2l6ZShtZW0pOwogfQogCi0vKiBXZSBpbXBsZW1lbnQgbWFsbG9jIGRlYnVnZ2luZyBvbmx5IGluIGxpYmMuc28sIHNvIGNvZGUgYmVsb3cKLSAqIG11c3QgYmUgZXhjbHVkZWQgaWYgd2UgY29tcGlsZSB0aGlzIGZpbGUgZm9yIHN0YXRpYyBsaWJjLmEKLSAqLworZXh0ZXJuICJDIiB2b2lkKiBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPm1lbWFsaWduKGFsaWdubWVudCwgYnl0ZXMpOworfQorCitleHRlcm4gIkMiIGludCBwb3NpeF9tZW1hbGlnbih2b2lkKiogbWVtcHRyLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gX19saWJjX21hbGxvY19kaXNwYXRjaC0+cG9zaXhfbWVtYWxpZ24obWVtcHRyLCBhbGlnbm1lbnQsIHNpemUpOworfQorCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorZXh0ZXJuICJDIiB2b2lkKiBwdmFsbG9jKHNpemVfdCBieXRlcykgeworICByZXR1cm4gX19saWJjX21hbGxvY19kaXNwYXRjaC0+cHZhbGxvYyhieXRlcyk7Cit9CisjZW5kaWYKKworZXh0ZXJuICJDIiB2b2lkKiByZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5yZWFsbG9jKG9sZE1lbSwgYnl0ZXMpOworfQorCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorZXh0ZXJuICJDIiB2b2lkKiB2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT52YWxsb2MoYnl0ZXMpOworfQorI2VuZGlmCisKKy8vIFdlIGltcGxlbWVudCBtYWxsb2MgZGVidWdnaW5nIG9ubHkgaW4gbGliYy5zbywgc28gdGhlIGNvZGUgYmVsb3cKKy8vIG11c3QgYmUgZXhjbHVkZWQgaWYgd2UgY29tcGlsZSB0aGlzIGZpbGUgZm9yIHN0YXRpYyBsaWJjLmEKICNpZm5kZWYgTElCQ19TVEFUSUMKICNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KICNpbmNsdWRlIDxkbGZjbi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKIAotLyogVGFibGUgZm9yIGRpc3BhdGNoaW5nIG1hbGxvYyBjYWxscywgZGVwZW5kaW5nIG9uIGVudmlyb25tZW50LiAqLwotc3RhdGljIE1hbGxvY0RlYnVnIGdNYWxsb2NVc2UgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKSA9IHsKLSAgICBkbG1hbGxvYywgZGxmcmVlLCBkbGNhbGxvYywgZGxyZWFsbG9jLCBkbG1lbWFsaWduLCBkbG1hbGxvY191c2FibGVfc2l6ZQotfTsKLQotZXh0ZXJuIGNvbnN0IGNoYXIqIF9fcHJvZ25hbWU7Ci0KLS8qIEhhbmRsZSB0byBzaGFyZWQgbGlicmFyeSB3aGVyZSBhY3R1YWwgbWVtb3J5IGFsbG9jYXRpb24gaXMgaW1wbGVtZW50ZWQuCi0gKiBUaGlzIGxpYnJhcnkgaXMgbG9hZGVkIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscyBhcmUgcmVkaXJlY3RlZCB0aGVyZQotICogd2hlbiBsaWJjLmRlYnVnLm1hbGxvYyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWlucyB2YWx1ZSBvdGhlciB0aGFuCi0gKiB6ZXJvOgotICogMSAgLSBGb3IgbWVtb3J5IGxlYWsgZGV0ZWN0aW9ucy4KLSAqIDUgIC0gRm9yIGZpbGxpbmcgYWxsb2NhdGVkIC8gZnJlZWQgbWVtb3J5IHdpdGggcGF0dGVybnMgZGVmaW5lZCBieQotICogICAgICBDSEtfU0VOVElORUxfVkFMVUUsIGFuZCBDSEtfRklMTF9GUkVFIG1hY3Jvcy4KLSAqIDEwIC0gRm9yIGFkZGluZyBwcmUtLCBhbmQgcG9zdC0gYWxsb2NhdGlvbiBzdHVicyBpbiBvcmRlciB0byBkZXRlY3QKLSAqICAgICAgYnVmZmVyIG92ZXJydW5zLgotICogTm90ZSB0aGF0IGVtdWxhdG9yJ3MgbWVtb3J5IGFsbG9jYXRpb24gaW5zdHJ1bWVudGF0aW9uIGlzIG5vdCBjb250cm9sbGVkIGJ5Ci0gKiBsaWJjLmRlYnVnLm1hbGxvYyB2YWx1ZSwgYnV0IHJhdGhlciBieSBlbXVsYXRvciwgc3RhcnRlZCB3aXRoIC1tZW1jaGVjawotICogb3B0aW9uLiBOb3RlIGFsc28sIHRoYXQgaWYgZW11bGF0b3IgaGFzIHN0YXJ0ZWQgd2l0aCAtbWVtY2hlY2sgb3B0aW9uLAotICogZW11bGF0b3IncyBpbnN0cnVtZW50ZWQgbWVtb3J5IGFsbG9jYXRpb24gd2lsbCB0YWtlIG92ZXIgdmFsdWUgc2F2ZWQgaW4KLSAqIGxpYmMuZGVidWcubWFsbG9jLiBJbiBvdGhlciB3b3JkcywgaWYgZW11bGF0b3IgaGFzIHN0YXJ0ZWQgd2l0aCAtbWVtY2hlY2sKLSAqIG9wdGlvbiwgbGliYy5kZWJ1Zy5tYWxsb2MgdmFsdWUgaXMgaWdub3JlZC4KLSAqIEFjdHVhbCBmdW5jdGlvbmFsaXR5IGZvciBkZWJ1ZyBsZXZlbHMgMS0xMCBpcyBpbXBsZW1lbnRlZCBpbgotICogbGliY19tYWxsb2NfZGVidWdfbGVhay5zbywgd2hpbGUgZnVuY3Rpb25hbGl0eSBmb3IgZW11bHRvcidzIGluc3RydW1lbnRlZAotICogYWxsb2NhdGlvbnMgaXMgaW1wbGVtZW50ZWQgaW4gbGliY19tYWxsb2NfZGVidWdfcWVtdS5zbyBhbmQgY2FuIGJlIHJ1biBpbnNpZGUKLSAqIHRoZSBlbXVsYXRvciBvbmx5LgotICovCi1zdGF0aWMgdm9pZCogbGliY19tYWxsb2NfaW1wbF9oYW5kbGUgPSBOVUxMOwotCi0vKiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgcHJvcGVydHkgbGliYy5kZWJ1Zy5tYWxsb2MuYmFja2xvZywKLSAqIHdoZW4gdGhlIHZhbHVlIG9mIGxpYmMuZGVidWcubWFsbG9jID0gMTAuICBJdCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZQotICogYmFja2xvZyB3ZSB1c2UgdG8gZGV0ZWN0IG11bHRpcGxlIGZyZWVzLiAgSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBzZXQsIHRoZQotICogYmFja2xvZyBsZW5ndGggZGVmYXVsdHMgdG8gQkFDS0xPR19ERUZBVUxUX0xFTi4KLSAqLwotdW5zaWduZWQgaW50IGdNYWxsb2NEZWJ1Z0JhY2tsb2c7Ci0jZGVmaW5lIEJBQ0tMT0dfREVGQVVMVF9MRU4gMTAwCi0KLS8qIFRoZSB2YWx1ZSBvZiBsaWJjLmRlYnVnLm1hbGxvYy4gKi8KLWludCBnTWFsbG9jRGVidWdMZXZlbDsKLQogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgogc3RhdGljIHZvaWQgSW5pdE1hbGxvY0Z1bmN0aW9uKHZvaWQqIG1hbGxvY19pbXBsX2hhbmRsZXIsIEZ1bmN0aW9uVHlwZSogZnVuYywgY29uc3QgY2hhciogcHJlZml4LCBjb25zdCBjaGFyKiBzdWZmaXgpIHsKLSAgICBjaGFyIHN5bWJvbFsxMjhdOwotICAgIHNucHJpbnRmKHN5bWJvbCwgc2l6ZW9mKHN5bWJvbCksICIlc18lcyIsIHByZWZpeCwgc3VmZml4KTsKLSAgICAqZnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihkbHN5bShtYWxsb2NfaW1wbF9oYW5kbGVyLCBzeW1ib2wpKTsKLSAgICBpZiAoKmZ1bmMgPT0gTlVMTCkgewotICAgICAgICBlcnJvcl9sb2coIiVzOiBkbHN5bShcIiVzXCIpIGZhaWxlZCIsIF9fcHJvZ25hbWUsIHN5bWJvbCk7Ci0gICAgfQorICBjaGFyIHN5bWJvbFsxMjhdOworICBzbnByaW50ZihzeW1ib2wsIHNpemVvZihzeW1ib2wpLCAiJXNfJXMiLCBwcmVmaXgsIHN1ZmZpeCk7CisgICpmdW5jID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KGRsc3ltKG1hbGxvY19pbXBsX2hhbmRsZXIsIHN5bWJvbCkpOworICBpZiAoKmZ1bmMgPT0gTlVMTCkgeworICAgIGVycm9yX2xvZygiJXM6IGRsc3ltKFwiJXNcIikgZmFpbGVkIiwgZ2V0cHJvZ25hbWUoKSwgc3ltYm9sKTsKKyAgfQogfQogCiBzdGF0aWMgdm9pZCBJbml0TWFsbG9jKHZvaWQqIG1hbGxvY19pbXBsX2hhbmRsZXIsIE1hbGxvY0RlYnVnKiB0YWJsZSwgY29uc3QgY2hhciogcHJlZml4KSB7Ci0gICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfSU5GTywgImxpYmMiLCAiJXM6IHVzaW5nIGxpYmMuZGVidWcubWFsbG9jICVkICglcylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgX19wcm9nbmFtZSwgZ01hbGxvY0RlYnVnTGV2ZWwsIHByZWZpeCk7CisgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0lORk8sICJsaWJjIiwgIiVzOiB1c2luZyBsaWJjLmRlYnVnLm1hbGxvYyAlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICBnZXRwcm9nbmFtZSgpLCBnX21hbGxvY19kZWJ1Z19sZXZlbCwgcHJlZml4KTsKIAotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z01hbGxvYz4obWFsbG9jX2ltcGxfaGFuZGxlciwgJnRhYmxlLT5tYWxsb2MsIHByZWZpeCwgIm1hbGxvYyIpOwotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z0ZyZWU+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+ZnJlZSwgcHJlZml4LCAiZnJlZSIpOwotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z0NhbGxvYz4obWFsbG9jX2ltcGxfaGFuZGxlciwgJnRhYmxlLT5jYWxsb2MsIHByZWZpeCwgImNhbGxvYyIpOwotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z1JlYWxsb2M+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+cmVhbGxvYywgcHJlZml4LCAicmVhbGxvYyIpOwotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z01lbWFsaWduPihtYWxsb2NfaW1wbF9oYW5kbGVyLCAmdGFibGUtPm1lbWFsaWduLCBwcmVmaXgsICJtZW1hbGlnbiIpOwotICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z01hbGxvY1VzYWJsZVNpemU+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+bWFsbG9jX3VzYWJsZV9zaXplLCBwcmVmaXgsICJtYWxsb2NfdXNhYmxlX3NpemUiKTsKKyAgSW5pdE1hbGxvY0Z1bmN0aW9uPE1hbGxvY0RlYnVnQ2FsbG9jPihtYWxsb2NfaW1wbF9oYW5kbGVyLCAmdGFibGUtPmNhbGxvYywgcHJlZml4LCAiY2FsbG9jIik7CisgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z0ZyZWU+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+ZnJlZSwgcHJlZml4LCAiZnJlZSIpOworICBJbml0TWFsbG9jRnVuY3Rpb248TWFsbG9jRGVidWdNYWxsaW5mbz4obWFsbG9jX2ltcGxfaGFuZGxlciwgJnRhYmxlLT5tYWxsaW5mbywgcHJlZml4LCAibWFsbGluZm8iKTsKKyAgSW5pdE1hbGxvY0Z1bmN0aW9uPE1hbGxvY0RlYnVnTWFsbG9jPihtYWxsb2NfaW1wbF9oYW5kbGVyLCAmdGFibGUtPm1hbGxvYywgcHJlZml4LCAibWFsbG9jIik7CisgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z01hbGxvY1VzYWJsZVNpemU+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+bWFsbG9jX3VzYWJsZV9zaXplLCBwcmVmaXgsICJtYWxsb2NfdXNhYmxlX3NpemUiKTsKKyAgSW5pdE1hbGxvY0Z1bmN0aW9uPE1hbGxvY0RlYnVnTWVtYWxpZ24+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+bWVtYWxpZ24sIHByZWZpeCwgIm1lbWFsaWduIik7CisgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z1Bvc2l4TWVtYWxpZ24+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+cG9zaXhfbWVtYWxpZ24sIHByZWZpeCwgInBvc2l4X21lbWFsaWduIik7CisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorICBJbml0TWFsbG9jRnVuY3Rpb248TWFsbG9jRGVidWdQdmFsbG9jPihtYWxsb2NfaW1wbF9oYW5kbGVyLCAmdGFibGUtPnB2YWxsb2MsIHByZWZpeCwgInB2YWxsb2MiKTsKKyNlbmRpZgorICBJbml0TWFsbG9jRnVuY3Rpb248TWFsbG9jRGVidWdSZWFsbG9jPihtYWxsb2NfaW1wbF9oYW5kbGVyLCAmdGFibGUtPnJlYWxsb2MsIHByZWZpeCwgInJlYWxsb2MiKTsKKyNpZiBkZWZpbmVkKEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MpCisgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z1ZhbGxvYz4obWFsbG9jX2ltcGxfaGFuZGxlciwgJnRhYmxlLT52YWxsb2MsIHByZWZpeCwgInZhbGxvYyIpOworI2VuZGlmCiB9CiAKLS8qIEluaXRpYWxpemVzIG1lbW9yeSBhbGxvY2F0aW9uIGZyYW1ld29yayBvbmNlIHBlciBwcm9jZXNzLiAqLworLy8gSW5pdGlhbGl6ZXMgbWVtb3J5IGFsbG9jYXRpb24gZnJhbWV3b3JrIG9uY2UgcGVyIHByb2Nlc3MuCiBzdGF0aWMgdm9pZCBtYWxsb2NfaW5pdF9pbXBsKCkgewotICAgIGNvbnN0IGNoYXIqIHNvX25hbWUgPSBOVUxMOwotICAgIE1hbGxvY0RlYnVnSW5pdCBtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IHFlbXVfcnVubmluZyA9IDA7Ci0gICAgdW5zaWduZWQgaW50IG1lbWNoZWNrX2VuYWJsZWQgPSAwOwotICAgIGNoYXIgZW52W1BST1BfVkFMVUVfTUFYXTsKLSAgICBjaGFyIG1lbWNoZWNrX3RyYWNpbmdbUFJPUF9WQUxVRV9NQVhdOwotICAgIGNoYXIgZGVidWdfcHJvZ3JhbVtQUk9QX1ZBTFVFX01BWF07CisgIGNvbnN0IGNoYXIqIHNvX25hbWUgPSBOVUxMOworICBNYWxsb2NEZWJ1Z0luaXQgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUgPSBOVUxMOworICB1bnNpZ25lZCBpbnQgcWVtdV9ydW5uaW5nID0gMDsKKyAgdW5zaWduZWQgaW50IG1lbWNoZWNrX2VuYWJsZWQgPSAwOworICBjaGFyIGVudltQUk9QX1ZBTFVFX01BWF07CisgIGNoYXIgbWVtY2hlY2tfdHJhY2luZ1tQUk9QX1ZBTFVFX01BWF07CisgIGNoYXIgZGVidWdfcHJvZ3JhbVtQUk9QX1ZBTFVFX01BWF07CiAKLSAgICAvKiBHZXQgY3VzdG9tIG1hbGxvYyBkZWJ1ZyBsZXZlbC4gTm90ZSB0aGF0IGVtdWxhdG9yIHN0YXJ0ZWQgd2l0aAotICAgICAqIG1lbW9yeSBjaGVja2luZyBvcHRpb24gd2lsbCBoYXZlIHByaW9yaXR5IG92ZXIgZGVidWcgbGV2ZWwgc2V0IGluCi0gICAgICogbGliYy5kZWJ1Zy5tYWxsb2Mgc3lzdGVtIHByb3BlcnR5LiAqLwotICAgIGlmIChfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoInJvLmtlcm5lbC5xZW11IiwgZW52KSAmJiBhdG9pKGVudikpIHsKLSAgICAgICAgcWVtdV9ydW5uaW5nID0gMTsKLSAgICAgICAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldCgicm8ua2VybmVsLm1lbWNoZWNrIiwgbWVtY2hlY2tfdHJhY2luZykpIHsKLSAgICAgICAgICAgIGlmIChtZW1jaGVja190cmFjaW5nWzBdICE9ICcwJykgewotICAgICAgICAgICAgICAgIC8vIEVtdWxhdG9yIGhhcyBzdGFydGVkIHdpdGggbWVtb3J5IHRyYWNpbmcgZW5hYmxlZC4gRW5mb3JjZSBpdC4KLSAgICAgICAgICAgICAgICBnTWFsbG9jRGVidWdMZXZlbCA9IDIwOwotICAgICAgICAgICAgICAgIG1lbWNoZWNrX2VuYWJsZWQgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgIC8vIEdldCBjdXN0b20gbWFsbG9jIGRlYnVnIGxldmVsLiBOb3RlIHRoYXQgZW11bGF0b3Igc3RhcnRlZCB3aXRoCisgIC8vIG1lbW9yeSBjaGVja2luZyBvcHRpb24gd2lsbCBoYXZlIHByaW9yaXR5IG92ZXIgZGVidWcgbGV2ZWwgc2V0IGluCisgIC8vIGxpYmMuZGVidWcubWFsbG9jIHN5c3RlbSBwcm9wZXJ0eS4KKyAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldCgicm8ua2VybmVsLnFlbXUiLCBlbnYpICYmIGF0b2koZW52KSkgeworICAgIHFlbXVfcnVubmluZyA9IDE7CisgICAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldCgicm8ua2VybmVsLm1lbWNoZWNrIiwgbWVtY2hlY2tfdHJhY2luZykpIHsKKyAgICAgIGlmIChtZW1jaGVja190cmFjaW5nWzBdICE9ICcwJykgeworICAgICAgICAvLyBFbXVsYXRvciBoYXMgc3RhcnRlZCB3aXRoIG1lbW9yeSB0cmFjaW5nIGVuYWJsZWQuIEVuZm9yY2UgaXQuCisgICAgICAgIGdfbWFsbG9jX2RlYnVnX2xldmVsID0gMjA7CisgICAgICAgIG1lbWNoZWNrX2VuYWJsZWQgPSAxOworICAgICAgfQogICAgIH0KKyAgfQogCi0gICAgLyogSWYgZGVidWcgbGV2ZWwgaGFzIG5vdCBiZWVuIHNldCBieSBtZW1jaGVjayBvcHRpb24gaW4gdGhlIGVtdWxhdG9yLAotICAgICAqIGxldHMgZ3JhYiBpdCBmcm9tIGxpYmMuZGVidWcubWFsbG9jIHN5c3RlbSBwcm9wZXJ0eS4gKi8KLSAgICBpZiAoZ01hbGxvY0RlYnVnTGV2ZWwgPT0gMCAmJiBfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoImxpYmMuZGVidWcubWFsbG9jIiwgZW52KSkgewotICAgICAgICBnTWFsbG9jRGVidWdMZXZlbCA9IGF0b2koZW52KTsKKyAgLy8gSWYgZGVidWcgbGV2ZWwgaGFzIG5vdCBiZWVuIHNldCBieSBtZW1jaGVjayBvcHRpb24gaW4gdGhlIGVtdWxhdG9yLAorICAvLyBsZXRzIGdyYWIgaXQgZnJvbSBsaWJjLmRlYnVnLm1hbGxvYyBzeXN0ZW0gcHJvcGVydHkuCisgIGlmIChnX21hbGxvY19kZWJ1Z19sZXZlbCA9PSAwICYmIF9fc3lzdGVtX3Byb3BlcnR5X2dldCgibGliYy5kZWJ1Zy5tYWxsb2MiLCBlbnYpKSB7CisgICAgZ19tYWxsb2NfZGVidWdfbGV2ZWwgPSBhdG9pKGVudik7CisgIH0KKworICAvLyBEZWJ1ZyBsZXZlbCAwIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIHVzZSBkZWZhdWx0IGFsbG9jYXRpb24gcm91dGluZXMuCisgIGlmIChnX21hbGxvY19kZWJ1Z19sZXZlbCA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gSWYgbGliYy5kZWJ1Zy5tYWxsb2MucHJvZ3JhbSBpcyBzZXQgYW5kIGlzIG5vdCBhIHN1YnN0cmluZyBvZiBwcm9nbmFtZSwKKyAgLy8gdGhlbiBleGl0LgorICBpZiAoX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJsaWJjLmRlYnVnLm1hbGxvYy5wcm9ncmFtIiwgZGVidWdfcHJvZ3JhbSkpIHsKKyAgICBpZiAoIXN0cnN0cihnZXRwcm9nbmFtZSgpLCBkZWJ1Z19wcm9ncmFtKSkgeworICAgICAgcmV0dXJuOwogICAgIH0KKyAgfQogCi0gICAgLyogRGVidWcgbGV2ZWwgMCBtZWFucyB0aGF0IHdlIHNob3VsZCB1c2UgZGx4eHggYWxsb2NhdGlvbgotICAgICAqIHJvdXRpbmVzIChkZWZhdWx0KS4gKi8KLSAgICBpZiAoZ01hbGxvY0RlYnVnTGV2ZWwgPT0gMCkgeworICAvLyBta3NoIGlzIHdheSB0b28gbGVha3kuIGh0dHA6Ly9iLzcyOTEyODcuCisgIGlmIChnX21hbGxvY19kZWJ1Z19sZXZlbCA+PSAxMCkgeworICAgIGlmIChzdHJjbXAoZ2V0cHJvZ25hbWUoKSwgInNoIikgPT0gMCB8fCBzdHJjbXAoZ2V0cHJvZ25hbWUoKSwgIi9zeXN0ZW0vYmluL3NoIikgPT0gMCkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgIC8vIENob29zZSB0aGUgYXBwcm9wcmlhdGUgLnNvIGZvciB0aGUgcmVxdWVzdGVkIGRlYnVnIGxldmVsLgorICBzd2l0Y2ggKGdfbWFsbG9jX2RlYnVnX2xldmVsKSB7CisgICAgY2FzZSAxOgorICAgIGNhc2UgNToKKyAgICBjYXNlIDEwOgorICAgICAgc29fbmFtZSA9ICJsaWJjX21hbGxvY19kZWJ1Z19sZWFrLnNvIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjA6CisgICAgICAvLyBRdWljayBjaGVjazogZGVidWcgbGV2ZWwgMjAgY2FuIG9ubHkgYmUgaGFuZGxlZCBpbiBlbXVsYXRvci4KKyAgICAgIGlmICghcWVtdV9ydW5uaW5nKSB7CisgICAgICAgIGVycm9yX2xvZygiJXM6IERlYnVnIGxldmVsICVkIGNhbiBvbmx5IGJlIHNldCBpbiBlbXVsYXRvclxuIiwKKyAgICAgICAgICAgICAgICAgIGdldHByb2duYW1lKCksIGdfbWFsbG9jX2RlYnVnX2xldmVsKTsKICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8qIElmIGxpYmMuZGVidWcubWFsbG9jLnByb2dyYW0gaXMgc2V0IGFuZCBpcyBub3QgYSBzdWJzdHJpbmcgb2YgcHJvZ25hbWUsCi0gICAgICogdGhlbiBleGl0LgotICAgICAqLwotICAgIGlmIChfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoImxpYmMuZGVidWcubWFsbG9jLnByb2dyYW0iLCBkZWJ1Z19wcm9ncmFtKSkgewotICAgICAgICBpZiAoIXN0cnN0cihfX3Byb2duYW1lLCBkZWJ1Z19wcm9ncmFtKSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gbWtzaCBpcyB3YXkgdG9vIGxlYWt5LiBodHRwOi8vYi83MjkxMjg3LgotICAgIGlmIChnTWFsbG9jRGVidWdMZXZlbCA+PSAxMCkgewotICAgICAgICBpZiAoc3RyY21wKF9fcHJvZ25hbWUsICJzaCIpID09IDAgfHwgc3RyY21wKF9fcHJvZ25hbWUsICIvc3lzdGVtL2Jpbi9zaCIpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENob29zZSB0aGUgYXBwcm9wcmlhdGUgLnNvIGZvciB0aGUgcmVxdWVzdGVkIGRlYnVnIGxldmVsLgotICAgIHN3aXRjaCAoZ01hbGxvY0RlYnVnTGV2ZWwpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICBjYXNlIDU6Ci0gICAgICAgIGNhc2UgMTA6IHsKLSAgICAgICAgICAgIGNoYXIgZGVidWdfYmFja2xvZ1tQUk9QX1ZBTFVFX01BWF07Ci0gICAgICAgICAgICBpZiAoX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJsaWJjLmRlYnVnLm1hbGxvYy5iYWNrbG9nIiwgZGVidWdfYmFja2xvZykpIHsKLSAgICAgICAgICAgICAgICBnTWFsbG9jRGVidWdCYWNrbG9nID0gYXRvaShkZWJ1Z19iYWNrbG9nKTsKLSAgICAgICAgICAgICAgICBpbmZvX2xvZygiJXM6IHNldHRpbmcgYmFja2xvZyBsZW5ndGggdG8gJWRcbiIsIF9fcHJvZ25hbWUsIGdNYWxsb2NEZWJ1Z0JhY2tsb2cpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGdNYWxsb2NEZWJ1Z0JhY2tsb2cgPT0gMCkgewotICAgICAgICAgICAgICAgIGdNYWxsb2NEZWJ1Z0JhY2tsb2cgPSBCQUNLTE9HX0RFRkFVTFRfTEVOOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc29fbmFtZSA9ICIvc3lzdGVtL2xpYi9saWJjX21hbGxvY19kZWJ1Z19sZWFrLnNvIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgMjA6Ci0gICAgICAgICAgICAvLyBRdWljayBjaGVjazogZGVidWcgbGV2ZWwgMjAgY2FuIG9ubHkgYmUgaGFuZGxlZCBpbiBlbXVsYXRvci4KLSAgICAgICAgICAgIGlmICghcWVtdV9ydW5uaW5nKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JfbG9nKCIlczogRGVidWcgbGV2ZWwgJWQgY2FuIG9ubHkgYmUgc2V0IGluIGVtdWxhdG9yXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBnTWFsbG9jRGVidWdMZXZlbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbWVtb3J5IGNoZWNraW5nIGhhcyBiZWVuIGVuYWJsZWQgaW4gZW11bGF0b3IuCi0gICAgICAgICAgICBpZiAoIW1lbWNoZWNrX2VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBlcnJvcl9sb2coIiVzOiBNZW1vcnkgY2hlY2tpbmcgaXMgbm90IGVuYWJsZWQgaW4gdGhlIGVtdWxhdG9yXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Byb2duYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzb19uYW1lID0gIi9zeXN0ZW0vbGliL2xpYmNfbWFsbG9jX2RlYnVnX3FlbXUuc28iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcl9sb2coIiVzOiBEZWJ1ZyBsZXZlbCAlZCBpcyB1bmtub3duXG4iLCBfX3Byb2duYW1lLCBnTWFsbG9jRGVidWdMZXZlbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gTG9hZCAuc28gdGhhdCBpbXBsZW1lbnRzIHRoZSByZXF1aXJlZCBtYWxsb2MgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkuCi0gICAgdm9pZCogbWFsbG9jX2ltcGxfaGFuZGxlID0gZGxvcGVuKHNvX25hbWUsIFJUTERfTEFaWSk7Ci0gICAgaWYgKG1hbGxvY19pbXBsX2hhbmRsZSA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yX2xvZygiJXM6IE1pc3NpbmcgbW9kdWxlICVzIHJlcXVpcmVkIGZvciBtYWxsb2MgZGVidWcgbGV2ZWwgJWQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIHNvX25hbWUsIGdNYWxsb2NEZWJ1Z0xldmVsLCBkbGVycm9yKCkpOworICAgICAgfQorICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbWVtb3J5IGNoZWNraW5nIGhhcyBiZWVuIGVuYWJsZWQgaW4gZW11bGF0b3IuCisgICAgICBpZiAoIW1lbWNoZWNrX2VuYWJsZWQpIHsKKyAgICAgICAgZXJyb3JfbG9nKCIlczogTWVtb3J5IGNoZWNraW5nIGlzIG5vdCBlbmFibGVkIGluIHRoZSBlbXVsYXRvclxuIiwgZ2V0cHJvZ25hbWUoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIHNvX25hbWUgPSAibGliY19tYWxsb2NfZGVidWdfcWVtdS5zbyI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgZXJyb3JfbG9nKCIlczogRGVidWcgbGV2ZWwgJWQgaXMgdW5rbm93blxuIiwgZ2V0cHJvZ25hbWUoKSwgZ19tYWxsb2NfZGVidWdfbGV2ZWwpOworICAgICAgcmV0dXJuOworICB9CisKKyAgLy8gTG9hZCAuc28gdGhhdCBpbXBsZW1lbnRzIHRoZSByZXF1aXJlZCBtYWxsb2MgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkuCisgIHZvaWQqIG1hbGxvY19pbXBsX2hhbmRsZSA9IGRsb3Blbihzb19uYW1lLCBSVExEX0xBWlkpOworICBpZiAobWFsbG9jX2ltcGxfaGFuZGxlID09IE5VTEwpIHsKKyAgICBlcnJvcl9sb2coIiVzOiBNaXNzaW5nIG1vZHVsZSAlcyByZXF1aXJlZCBmb3IgbWFsbG9jIGRlYnVnIGxldmVsICVkOiAlcyIsCisgICAgICAgICAgICAgIGdldHByb2duYW1lKCksIHNvX25hbWUsIGdfbWFsbG9jX2RlYnVnX2xldmVsLCBkbGVycm9yKCkpOworICAgIHJldHVybjsKKyAgfQorCisgIC8vIEluaXRpYWxpemUgbWFsbG9jIGRlYnVnZ2luZyBpbiB0aGUgbG9hZGVkIG1vZHVsZS4KKyAgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUgPSByZWludGVycHJldF9jYXN0PE1hbGxvY0RlYnVnSW5pdD4oZGxzeW0obWFsbG9jX2ltcGxfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFsbG9jX2RlYnVnX2luaXRpYWxpemUiKSk7CisgIGlmIChtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSA9PSBOVUxMKSB7CisgICAgZXJyb3JfbG9nKCIlczogSW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyBub3QgZm91bmQgaW4gJXNcbiIsIGdldHByb2duYW1lKCksIHNvX25hbWUpOworICAgIGRsY2xvc2UobWFsbG9jX2ltcGxfaGFuZGxlKTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKCFtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSgmZ19oYXNoX3RhYmxlLCAmX19saWJjX21hbGxvY19kZWZhdWx0X2Rpc3BhdGNoKSkgeworICAgIGRsY2xvc2UobWFsbG9jX2ltcGxfaGFuZGxlKTsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAoZ19tYWxsb2NfZGVidWdfbGV2ZWwgPT0gMjApIHsKKyAgICAvLyBGb3IgbWVtb3J5IGNoZWNrZXIgd2UgbmVlZCB0byBkbyBleHRyYSBpbml0aWFsaXphdGlvbi4KKyAgICB0eXBlZGVmIGludCAoKk1lbUNoZWNrSW5pdCkoaW50LCBjb25zdCBjaGFyKik7CisgICAgTWVtQ2hlY2tJbml0IG1lbWNoZWNrX2luaXRpYWxpemUgPQorICAgICAgcmVpbnRlcnByZXRfY2FzdDxNZW1DaGVja0luaXQ+KGRsc3ltKG1hbGxvY19pbXBsX2hhbmRsZSwgIm1lbWNoZWNrX2luaXRpYWxpemUiKSk7CisgICAgaWYgKG1lbWNoZWNrX2luaXRpYWxpemUgPT0gTlVMTCkgeworICAgICAgZXJyb3JfbG9nKCIlczogbWVtY2hlY2tfaW5pdGlhbGl6ZSByb3V0aW5lIGlzIG5vdCBmb3VuZCBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICBnZXRwcm9nbmFtZSgpLCBzb19uYW1lKTsKKyAgICAgIGRsY2xvc2UobWFsbG9jX2ltcGxfaGFuZGxlKTsKKyAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBJbml0aWFsaXplIG1hbGxvYyBkZWJ1Z2dpbmcgaW4gdGhlIGxvYWRlZCBtb2R1bGUuCi0gICAgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUgPSByZWludGVycHJldF9jYXN0PE1hbGxvY0RlYnVnSW5pdD4oZGxzeW0obWFsbG9jX2ltcGxfaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSIpKTsKLSAgICBpZiAobWFsbG9jX2RlYnVnX2luaXRpYWxpemUgPT0gTlVMTCkgewotICAgICAgICBlcnJvcl9sb2coIiVzOiBJbml0aWFsaXphdGlvbiByb3V0aW5lIGlzIG5vdCBmb3VuZCBpbiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIHNvX25hbWUpOwotICAgICAgICBkbGNsb3NlKG1hbGxvY19pbXBsX2hhbmRsZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobWVtY2hlY2tfaW5pdGlhbGl6ZShNQUxMT0NfQUxJR05NRU5ULCBtZW1jaGVja190cmFjaW5nKSkgeworICAgICAgZGxjbG9zZShtYWxsb2NfaW1wbF9oYW5kbGUpOworICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobWFsbG9jX2RlYnVnX2luaXRpYWxpemUoKSA9PSAtMSkgewotICAgICAgICBkbGNsb3NlKG1hbGxvY19pbXBsX2hhbmRsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgIH0KIAotICAgIGlmIChnTWFsbG9jRGVidWdMZXZlbCA9PSAyMCkgewotICAgICAgICAvLyBGb3IgbWVtb3J5IGNoZWNrZXIgd2UgbmVlZCB0byBkbyBleHRyYSBpbml0aWFsaXphdGlvbi4KLSAgICAgICAgdHlwZWRlZiBpbnQgKCpNZW1DaGVja0luaXQpKGludCwgY29uc3QgY2hhciopOwotICAgICAgICBNZW1DaGVja0luaXQgbWVtY2hlY2tfaW5pdGlhbGl6ZSA9Ci0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PE1lbUNoZWNrSW5pdD4oZGxzeW0obWFsbG9jX2ltcGxfaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1jaGVja19pbml0aWFsaXplIikpOwotICAgICAgICBpZiAobWVtY2hlY2tfaW5pdGlhbGl6ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBlcnJvcl9sb2coIiVzOiBtZW1jaGVja19pbml0aWFsaXplIHJvdXRpbmUgaXMgbm90IGZvdW5kIGluICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIHNvX25hbWUpOwotICAgICAgICAgICAgZGxjbG9zZShtYWxsb2NfaW1wbF9oYW5kbGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgIC8vIE5vIG5lZWQgdG8gaW5pdCB0aGUgZGlzcGF0Y2ggdGFibGUgYmVjYXVzZSB3ZSBjYW4gb25seSBnZXQKKyAgLy8gaGVyZSBpZiBkZWJ1ZyBsZXZlbCBpcyAxLCA1LCAxMCwgb3IgMjAuCisgIHN0YXRpYyBNYWxsb2NEZWJ1ZyBtYWxsb2NfZGlzcGF0Y2hfdGFibGUgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsKKyAgc3dpdGNoIChnX21hbGxvY19kZWJ1Z19sZXZlbCkgeworICAgIGNhc2UgMToKKyAgICAgIEluaXRNYWxsb2MobWFsbG9jX2ltcGxfaGFuZGxlLCAmbWFsbG9jX2Rpc3BhdGNoX3RhYmxlLCAibGVhayIpOworICAgICAgYnJlYWs7CisgICAgY2FzZSA1OgorICAgICAgSW5pdE1hbGxvYyhtYWxsb2NfaW1wbF9oYW5kbGUsICZtYWxsb2NfZGlzcGF0Y2hfdGFibGUsICJmaWxsIik7CisgICAgICBicmVhazsKKyAgICBjYXNlIDEwOgorICAgICAgSW5pdE1hbGxvYyhtYWxsb2NfaW1wbF9oYW5kbGUsICZtYWxsb2NfZGlzcGF0Y2hfdGFibGUsICJjaGsiKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjA6CisgICAgICBJbml0TWFsbG9jKG1hbGxvY19pbXBsX2hhbmRsZSwgJm1hbGxvY19kaXNwYXRjaF90YWJsZSwgInFlbXVfaW5zdHJ1bWVudGVkIik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgIH0KIAotICAgICAgICBpZiAobWVtY2hlY2tfaW5pdGlhbGl6ZShNQUxMT0NfQUxJR05NRU5ULCBtZW1jaGVja190cmFjaW5nKSkgewotICAgICAgICAgICAgZGxjbG9zZShtYWxsb2NfaW1wbF9oYW5kbGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvLyBJbml0aWFsaXplIG1hbGxvYyBkaXNwYXRjaCB0YWJsZSB3aXRoIGFwcHJvcHJpYXRlIHJvdXRpbmVzLgotICAgIHN3aXRjaCAoZ01hbGxvY0RlYnVnTGV2ZWwpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgSW5pdE1hbGxvYyhtYWxsb2NfaW1wbF9oYW5kbGUsICZnTWFsbG9jVXNlLCAibGVhayIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIEluaXRNYWxsb2MobWFsbG9jX2ltcGxfaGFuZGxlLCAmZ01hbGxvY1VzZSwgImZpbGwiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDEwOgotICAgICAgICAgICAgSW5pdE1hbGxvYyhtYWxsb2NfaW1wbF9oYW5kbGUsICZnTWFsbG9jVXNlLCAiY2hrIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyMDoKLSAgICAgICAgICAgIEluaXRNYWxsb2MobWFsbG9jX2ltcGxfaGFuZGxlLCAmZ01hbGxvY1VzZSwgInFlbXVfaW5zdHJ1bWVudGVkIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSBkaXNwYXRjaCB0YWJsZSBpcyBpbml0aWFsaXplZAotICAgIGlmICgoZ01hbGxvY1VzZS5tYWxsb2MgPT0gTlVMTCkgfHwKLSAgICAgICAgKGdNYWxsb2NVc2UuZnJlZSA9PSBOVUxMKSB8fAotICAgICAgICAoZ01hbGxvY1VzZS5jYWxsb2MgPT0gTlVMTCkgfHwKLSAgICAgICAgKGdNYWxsb2NVc2UucmVhbGxvYyA9PSBOVUxMKSB8fAotICAgICAgICAoZ01hbGxvY1VzZS5tZW1hbGlnbiA9PSBOVUxMKSB8fAotICAgICAgICAoZ01hbGxvY1VzZS5tYWxsb2NfdXNhYmxlX3NpemUgPT0gTlVMTCkpIHsKLSAgICAgICAgZXJyb3JfbG9nKCIlczogc29tZSBzeW1ib2xzIGZvciBsaWJjLmRlYnVnLm1hbGxvYyBsZXZlbCAlZCB3ZXJlIG5vdCBmb3VuZCAoc2VlIGFib3ZlKSIsCi0gICAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBnTWFsbG9jRGVidWdMZXZlbCk7Ci0gICAgICAgIGRsY2xvc2UobWFsbG9jX2ltcGxfaGFuZGxlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoID0gJmdNYWxsb2NVc2U7Ci0gICAgICAgIGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlID0gbWFsbG9jX2ltcGxfaGFuZGxlOwotICAgIH0KKyAgLy8gTWFrZSBzdXJlIGRpc3BhdGNoIHRhYmxlIGlzIGluaXRpYWxpemVkCisgIGlmICgobWFsbG9jX2Rpc3BhdGNoX3RhYmxlLmNhbGxvYyA9PSBOVUxMKSB8fAorICAgICAgKG1hbGxvY19kaXNwYXRjaF90YWJsZS5mcmVlID09IE5VTEwpIHx8CisgICAgICAobWFsbG9jX2Rpc3BhdGNoX3RhYmxlLm1hbGxpbmZvID09IE5VTEwpIHx8CisgICAgICAobWFsbG9jX2Rpc3BhdGNoX3RhYmxlLm1hbGxvYyA9PSBOVUxMKSB8fAorICAgICAgKG1hbGxvY19kaXNwYXRjaF90YWJsZS5tYWxsb2NfdXNhYmxlX3NpemUgPT0gTlVMTCkgfHwKKyAgICAgIChtYWxsb2NfZGlzcGF0Y2hfdGFibGUubWVtYWxpZ24gPT0gTlVMTCkgfHwKKyAgICAgIChtYWxsb2NfZGlzcGF0Y2hfdGFibGUucG9zaXhfbWVtYWxpZ24gPT0gTlVMTCkgfHwKKyNpZiBkZWZpbmVkKEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MpCisgICAgICAobWFsbG9jX2Rpc3BhdGNoX3RhYmxlLnB2YWxsb2MgPT0gTlVMTCkgfHwKKyNlbmRpZgorICAgICAgKG1hbGxvY19kaXNwYXRjaF90YWJsZS5yZWFsbG9jID09IE5VTEwpCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorICAgICAgfHwgKG1hbGxvY19kaXNwYXRjaF90YWJsZS52YWxsb2MgPT0gTlVMTCkKKyNlbmRpZgorICAgICAgKSB7CisgICAgZXJyb3JfbG9nKCIlczogc29tZSBzeW1ib2xzIGZvciBsaWJjLmRlYnVnLm1hbGxvYyBsZXZlbCAlZCB3ZXJlIG5vdCBmb3VuZCAoc2VlIGFib3ZlKSIsCisgICAgICAgICAgICAgIGdldHByb2duYW1lKCksIGdfbWFsbG9jX2RlYnVnX2xldmVsKTsKKyAgICBkbGNsb3NlKG1hbGxvY19pbXBsX2hhbmRsZSk7CisgIH0gZWxzZSB7CisgICAgX19saWJjX21hbGxvY19kaXNwYXRjaCA9ICZtYWxsb2NfZGlzcGF0Y2hfdGFibGU7CisgICAgbGliY19tYWxsb2NfaW1wbF9oYW5kbGUgPSBtYWxsb2NfaW1wbF9oYW5kbGU7CisgIH0KIH0KIAogc3RhdGljIHZvaWQgbWFsbG9jX2ZpbmlfaW1wbCgpIHsKLSAgICAvLyBPdXIgQlNEIHN0ZGlvIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY2xvc2UgdGhlIHN0YW5kYXJkIHN0cmVhbXMsIGl0IG9ubHkgZmx1c2hlcyB0aGVtLgotICAgIC8vIEFuZCBpdCBkb2Vzbid0IGRvIHRoYXQgdW50aWwgaXRzIGF0ZXhpdCBoYW5kbGVyIChfY2xlYW51cCkgaXMgcnVuLCBhbmQgd2UgcnVuIGZpcnN0IQotICAgIC8vIEl0J3MgZ3JlYXQgdGhhdCBvdGhlciB1bmNsb3NlZCBGSUxFKnMgc2hvdyB1cCBhcyBtYWxsb2MgbGVha3MsIGJ1dCB3ZSBuZWVkIHRvIG1hbnVhbGx5Ci0gICAgLy8gY2xlYW4gdXAgdGhlIHN0YW5kYXJkIHN0cmVhbXMgb3Vyc2VsdmVzLgotICAgIGZjbG9zZShzdGRpbik7Ci0gICAgZmNsb3NlKHN0ZG91dCk7Ci0gICAgZmNsb3NlKHN0ZGVycik7CisgIC8vIE91ciBCU0Qgc3RkaW8gaW1wbGVtZW50YXRpb24gZG9lc24ndCBjbG9zZSB0aGUgc3RhbmRhcmQgc3RyZWFtcywgaXQgb25seSBmbHVzaGVzIHRoZW0uCisgIC8vIEFuZCBpdCBkb2Vzbid0IGRvIHRoYXQgdW50aWwgaXRzIGF0ZXhpdCBoYW5kbGVyIGlzIHJ1biwgYW5kIHdlIHJ1biBmaXJzdCEKKyAgLy8gSXQncyBncmVhdCB0aGF0IG90aGVyIHVuY2xvc2VkIEZJTEUqcyBzaG93IHVwIGFzIG1hbGxvYyBsZWFrcywgYnV0IHdlIG5lZWQgdG8gbWFudWFsbHkKKyAgLy8gY2xlYW4gdXAgdGhlIHN0YW5kYXJkIHN0cmVhbXMgb3Vyc2VsdmVzLgorICBmY2xvc2Uoc3RkaW4pOworICBmY2xvc2Uoc3Rkb3V0KTsKKyAgZmNsb3NlKHN0ZGVycik7CiAKLSAgICBpZiAobGliY19tYWxsb2NfaW1wbF9oYW5kbGUgIT0gTlVMTCkgewotICAgICAgICBNYWxsb2NEZWJ1Z0ZpbmkgbWFsbG9jX2RlYnVnX2ZpbmFsaXplID0KLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TWFsbG9jRGVidWdGaW5pPihkbHN5bShsaWJjX21hbGxvY19pbXBsX2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFsbG9jX2RlYnVnX2ZpbmFsaXplIikpOwotICAgICAgICBpZiAobWFsbG9jX2RlYnVnX2ZpbmFsaXplICE9IE5VTEwpIHsKLSAgICAgICAgICAgIG1hbGxvY19kZWJ1Z19maW5hbGl6ZSgpOwotICAgICAgICB9CisgIGlmIChsaWJjX21hbGxvY19pbXBsX2hhbmRsZSAhPSBOVUxMKSB7CisgICAgTWFsbG9jRGVidWdGaW5pIG1hbGxvY19kZWJ1Z19maW5hbGl6ZSA9CisgICAgICByZWludGVycHJldF9jYXN0PE1hbGxvY0RlYnVnRmluaT4oZGxzeW0obGliY19tYWxsb2NfaW1wbF9oYW5kbGUsICJtYWxsb2NfZGVidWdfZmluYWxpemUiKSk7CisgICAgaWYgKG1hbGxvY19kZWJ1Z19maW5hbGl6ZSAhPSBOVUxMKSB7CisgICAgICBtYWxsb2NfZGVidWdfZmluYWxpemUoZ19tYWxsb2NfZGVidWdfbGV2ZWwpOwogICAgIH0KKyAgfQogfQogCi1zdGF0aWMgcHRocmVhZF9vbmNlX3QgIG1hbGxvY19pbml0X29uY2VfY3RsID0gUFRIUkVBRF9PTkNFX0lOSVQ7Ci1zdGF0aWMgcHRocmVhZF9vbmNlX3QgIG1hbGxvY19maW5pX29uY2VfY3RsID0gUFRIUkVBRF9PTkNFX0lOSVQ7Ci0KICNlbmRpZiAgLy8gIUxJQkNfU1RBVElDCi0jZW5kaWYgIC8vIFVTRV9ETF9QUkVGSVgKIAotLyogSW5pdGlhbGl6ZXMgbWVtb3J5IGFsbG9jYXRpb24gZnJhbWV3b3JrLgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIF9fbGliY19pbml0IHJvdXRpbmVzIGltcGxlbWVudGVkCi0gKiBpbiBsaWJjX2luaXRfc3RhdGljLmMgYW5kIGxpYmNfaW5pdF9keW5hbWljLmMgZmlsZXMuCi0gKi8KKy8vIEluaXRpYWxpemVzIG1lbW9yeSBhbGxvY2F0aW9uIGZyYW1ld29yay4KKy8vIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSBfX2xpYmNfaW5pdCByb3V0aW5lcyBpbXBsZW1lbnRlZAorLy8gaW4gbGliY19pbml0X3N0YXRpYy5jIGFuZCBsaWJjX2luaXRfZHluYW1pYy5jIGZpbGVzLgogZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gdm9pZCBtYWxsb2NfZGVidWdfaW5pdCgpIHsKLSAgICAvKiBXZSBuZWVkIHRvIGluaXRpYWxpemUgbWFsbG9jIGlmZiB3ZSBpbXBsZW1lbnQgaGVyZSBjdXN0b20KLSAgICAgKiBtYWxsb2Mgcm91dGluZXMgKGkuZS4gVVNFX0RMX1BSRUZJWCBpcyBkZWZpbmVkKSBmb3IgbGliYy5zbyAqLwotI2lmIGRlZmluZWQoVVNFX0RMX1BSRUZJWCkgJiYgIWRlZmluZWQoTElCQ19TVEFUSUMpCi0gICAgaWYgKHB0aHJlYWRfb25jZSgmbWFsbG9jX2luaXRfb25jZV9jdGwsIG1hbGxvY19pbml0X2ltcGwpKSB7Ci0gICAgICAgIGVycm9yX2xvZygiVW5hYmxlIHRvIGluaXRpYWxpemUgbWFsbG9jX2RlYnVnIGNvbXBvbmVudC4iKTsKLSAgICB9Ci0jZW5kaWYgIC8vIFVTRV9ETF9QUkVGSVggJiYgIUxJQkNfU1RBVElDCisjaWYgIWRlZmluZWQoTElCQ19TVEFUSUMpCisgIHN0YXRpYyBwdGhyZWFkX29uY2VfdCBtYWxsb2NfaW5pdF9vbmNlX2N0bCA9IFBUSFJFQURfT05DRV9JTklUOworICBpZiAocHRocmVhZF9vbmNlKCZtYWxsb2NfaW5pdF9vbmNlX2N0bCwgbWFsbG9jX2luaXRfaW1wbCkpIHsKKyAgICBlcnJvcl9sb2coIlVuYWJsZSB0byBpbml0aWFsaXplIG1hbGxvY19kZWJ1ZyBjb21wb25lbnQuIik7CisgIH0KKyNlbmRpZiAgLy8gIUxJQkNfU1RBVElDCiB9CiAKIGV4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIHZvaWQgbWFsbG9jX2RlYnVnX2ZpbmkoKSB7Ci0gICAgLyogV2UgbmVlZCB0byBmaW5hbGl6ZSBtYWxsb2MgaWZmIHdlIGltcGxlbWVudCBoZXJlIGN1c3RvbQotICAgICAqIG1hbGxvYyByb3V0aW5lcyAoaS5lLiBVU0VfRExfUFJFRklYIGlzIGRlZmluZWQpIGZvciBsaWJjLnNvICovCi0jaWYgZGVmaW5lZChVU0VfRExfUFJFRklYKSAmJiAhZGVmaW5lZChMSUJDX1NUQVRJQykKLSAgICBpZiAocHRocmVhZF9vbmNlKCZtYWxsb2NfZmluaV9vbmNlX2N0bCwgbWFsbG9jX2ZpbmlfaW1wbCkpIHsKLSAgICAgICAgZXJyb3JfbG9nKCJVbmFibGUgdG8gZmluYWxpemUgbWFsbG9jX2RlYnVnIGNvbXBvbmVudC4iKTsKLSAgICB9Ci0jZW5kaWYgIC8vIFVTRV9ETF9QUkVGSVggJiYgIUxJQkNfU1RBVElDCisjaWYgIWRlZmluZWQoTElCQ19TVEFUSUMpCisgIHN0YXRpYyBwdGhyZWFkX29uY2VfdCBtYWxsb2NfZmluaV9vbmNlX2N0bCA9IFBUSFJFQURfT05DRV9JTklUOworICBpZiAocHRocmVhZF9vbmNlKCZtYWxsb2NfZmluaV9vbmNlX2N0bCwgbWFsbG9jX2ZpbmlfaW1wbCkpIHsKKyAgICBlcnJvcl9sb2coIlVuYWJsZSB0byBmaW5hbGl6ZSBtYWxsb2NfZGVidWcgY29tcG9uZW50LiIpOworICB9CisjZW5kaWYgIC8vICFMSUJDX1NUQVRJQwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5oIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5oCmluZGV4IDI4YmUwNDIuLjVjNzNkYTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19jb21tb24uaAorKysgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmgKQEAgLTMzLDggKzMzLDExIEBACiAjaWZuZGVmIE1BTExPQ19ERUJVR19DT01NT05fSAogI2RlZmluZSBNQUxMT0NfREVCVUdfQ09NTU9OX0gKIAorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KIAorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2NvbmZpZy5oIgogI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCiAKICNkZWZpbmUgSEFTSFRBQkxFX1NJWkUgICAgICAxNTQzCkBAIC00Myw5ICs0Niw3IEBACiAjZGVmaW5lIFNJWkVfRkxBR19aWUdPVEVfQ0hJTEQgICgxPDwzMSkKICNkZWZpbmUgU0laRV9GTEFHX01BU0sgICAgICAgICAgKFNJWkVfRkxBR19aWUdPVEVfQ0hJTEQpCiAKLSNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApCi0KLS8vIFRoaXMgbXVzdCBtYXRjaCB0aGUgYWxpZ25tZW50IHVzZWQgYnkgZGxtYWxsb2MuCisvLyBUaGlzIG11c3QgbWF0Y2ggdGhlIGFsaWdubWVudCB1c2VkIGJ5IHRoZSBtYWxsb2MgaW1wbGVtZW50YXRpb24uCiAjaWZuZGVmIE1BTExPQ19BTElHTk1FTlQKICNkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCAoKHNpemVfdCkoMiAqIHNpemVvZih2b2lkICopKSkKICNlbmRpZgpAQCAtNjYsNDAgKzY3LDQ2IEBACiB9OwogCiBzdHJ1Y3QgSGFzaFRhYmxlIHsKKyAgICBwdGhyZWFkX211dGV4X3QgbG9jazsKICAgICBzaXplX3QgY291bnQ7CiAgICAgSGFzaEVudHJ5KiBzbG90c1tIQVNIVEFCTEVfU0laRV07CiB9OwogCiAvKiBFbnRyeSBpbiBtYWxsb2MgZGlzcGF0Y2ggdGFibGUuICovCi10eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdNYWxsb2MpKHNpemVfdCk7Ci10eXBlZGVmIHZvaWQgKCpNYWxsb2NEZWJ1Z0ZyZWUpKHZvaWQqKTsKIHR5cGVkZWYgdm9pZCogKCpNYWxsb2NEZWJ1Z0NhbGxvYykoc2l6ZV90LCBzaXplX3QpOwotdHlwZWRlZiB2b2lkKiAoKk1hbGxvY0RlYnVnUmVhbGxvYykodm9pZCosIHNpemVfdCk7Ci10eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdNZW1hbGlnbikoc2l6ZV90LCBzaXplX3QpOwordHlwZWRlZiB2b2lkICgqTWFsbG9jRGVidWdGcmVlKSh2b2lkKik7Cit0eXBlZGVmIHN0cnVjdCBtYWxsaW5mbyAoKk1hbGxvY0RlYnVnTWFsbGluZm8pKCk7Cit0eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdNYWxsb2MpKHNpemVfdCk7CiB0eXBlZGVmIHNpemVfdCAoKk1hbGxvY0RlYnVnTWFsbG9jVXNhYmxlU2l6ZSkoY29uc3Qgdm9pZCopOwordHlwZWRlZiB2b2lkKiAoKk1hbGxvY0RlYnVnTWVtYWxpZ24pKHNpemVfdCwgc2l6ZV90KTsKK3R5cGVkZWYgaW50ICgqTWFsbG9jRGVidWdQb3NpeE1lbWFsaWduKSh2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKKyNpZiBkZWZpbmVkKEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MpCit0eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdQdmFsbG9jKShzaXplX3QpOworI2VuZGlmCit0eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdSZWFsbG9jKSh2b2lkKiwgc2l6ZV90KTsKKyNpZiBkZWZpbmVkKEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MpCit0eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdWYWxsb2MpKHNpemVfdCk7CisjZW5kaWYKKwogc3RydWN0IE1hbGxvY0RlYnVnIHsKLSAgTWFsbG9jRGVidWdNYWxsb2MgbWFsbG9jOwotICBNYWxsb2NEZWJ1Z0ZyZWUgZnJlZTsKICAgTWFsbG9jRGVidWdDYWxsb2MgY2FsbG9jOwotICBNYWxsb2NEZWJ1Z1JlYWxsb2MgcmVhbGxvYzsKLSAgTWFsbG9jRGVidWdNZW1hbGlnbiBtZW1hbGlnbjsKKyAgTWFsbG9jRGVidWdGcmVlIGZyZWU7CisgIE1hbGxvY0RlYnVnTWFsbGluZm8gbWFsbGluZm87CisgIE1hbGxvY0RlYnVnTWFsbG9jIG1hbGxvYzsKICAgTWFsbG9jRGVidWdNYWxsb2NVc2FibGVTaXplIG1hbGxvY191c2FibGVfc2l6ZTsKKyAgTWFsbG9jRGVidWdNZW1hbGlnbiBtZW1hbGlnbjsKKyAgTWFsbG9jRGVidWdQb3NpeE1lbWFsaWduIHBvc2l4X21lbWFsaWduOworI2lmIGRlZmluZWQoSEFWRV9ERVBSRUNBVEVEX01BTExPQ19GVU5DUykKKyAgTWFsbG9jRGVidWdQdmFsbG9jIHB2YWxsb2M7CisjZW5kaWYKKyAgTWFsbG9jRGVidWdSZWFsbG9jIHJlYWxsb2M7CisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorICBNYWxsb2NEZWJ1Z1ZhbGxvYyB2YWxsb2M7CisjZW5kaWYKIH07CiAKLS8qIE1hbGxvYyBkZWJ1Z2dpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiByb3V0aW5lcy4KLSAqCi0gKiBUaGVzZSByb3V0aW5lcyBtdXN0IGJlIGltcGxlbWVudGVkIGluIC5zbyBtb2R1bGVzIHRoYXQgaW1wbGVtZW50IG1hbGxvYwotICogZGVidWdnaW5nLiBUaGUgYXJlIGlzIGNhbGxlZCBvbmNlIHBlciBwcm9jZXNzIGZyb20gbWFsbG9jX2luaXRfaW1wbCBhbmQKLSAqIG1hbGxvY19maW5pX2ltcGwgcmVzcGVjdGl2ZWx5LgotICoKLSAqIFRoZXkgYXJlIGltcGxlbWVudGVkIGluIGJpb25pYy9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmMgd2hlbiBtYWxsb2MKLSAqIGRlYnVnZ2luZyBnZXRzIGluaXRpYWxpemVkIGZvciB0aGUgcHJvY2Vzcy4KLSAqCi0gKiBNYWxsb2NEZWJ1Z0luaXQgcmV0dXJuczoKLSAqICAgIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KLSAqLwotdHlwZWRlZiBpbnQgKCpNYWxsb2NEZWJ1Z0luaXQpKCk7Ci10eXBlZGVmIHZvaWQgKCpNYWxsb2NEZWJ1Z0ZpbmkpKCk7Cit0eXBlZGVmIGJvb2wgKCpNYWxsb2NEZWJ1Z0luaXQpKEhhc2hUYWJsZSosIGNvbnN0IE1hbGxvY0RlYnVnKik7Cit0eXBlZGVmIHZvaWQgKCpNYWxsb2NEZWJ1Z0ZpbmkpKGludCk7CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBsb2cgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfZGlzYWJsZS5oIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2Rpc2FibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTAzMTI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2Rpc2FibGUuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTUFMTE9DX0RFQlVHX0RJU0FCTEVfSAorI2RlZmluZSBNQUxMT0NfREVCVUdfRElTQUJMRV9ICisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFVzZWQgdG8gZGlzYWJsZSB0aGUgZGVidWcgYWxsb2NhdGlvbiBjYWxscy4KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitleHRlcm4gcHRocmVhZF9rZXlfdCBnX2RlYnVnX2NhbGxzX2Rpc2FibGVkOworCitzdGF0aWMgaW5saW5lIGJvb2wgRGVidWdDYWxsc0Rpc2FibGVkKCkgeworICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyhnX2RlYnVnX2NhbGxzX2Rpc2FibGVkKSAhPSBOVUxMOworfQorCitjbGFzcyBTY29wZWREaXNhYmxlRGVidWdDYWxscyB7CisgcHVibGljOgorICBTY29wZWREaXNhYmxlRGVidWdDYWxscygpIDogZGlzYWJsZWRfKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgaWYgKCFkaXNhYmxlZF8pIHsKKyAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoZ19kZWJ1Z19jYWxsc19kaXNhYmxlZCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4oMSkpOworICAgIH0KKyAgfQorICB+U2NvcGVkRGlzYWJsZURlYnVnQ2FsbHMoKSB7CisgICAgaWYgKCFkaXNhYmxlZF8pIHsKKyAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoZ19kZWJ1Z19jYWxsc19kaXNhYmxlZCwgTlVMTCk7CisgICAgfQorICB9CisKKyBwcml2YXRlOgorICBib29sIGRpc2FibGVkXzsKKworICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2NvcGVkRGlzYWJsZURlYnVnQ2FsbHMpOworfTsKKworI2VuZGlmICAvLyBNQUxMT0NfREVCVUdfRElTQUJMRV9ICmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfbGVhay5jcHAgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfbGVhay5jcHAKaW5kZXggMzM5N2RlZi4uZGYwZjk5NyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2xlYWsuY3BwCisrKyBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19sZWFrLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KQEAgLTQ2LDkgKzQ3LDExIEBACiAjaW5jbHVkZSA8dW53aW5kLmg+CiAKICNpbmNsdWRlICJkZWJ1Z19zdGFja3RyYWNlLmgiCi0jaW5jbHVkZSAiZGxtYWxsb2MuaCIKKyNpbmNsdWRlICJtYWxsb2NfZGVidWdfYmFja3RyYWNlLmgiCiAjaW5jbHVkZSAibWFsbG9jX2RlYnVnX2NvbW1vbi5oIgorI2luY2x1ZGUgIm1hbGxvY19kZWJ1Z19kaXNhYmxlLmgiCiAKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKICNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgiCiAKQEAgLTU5LDEwICs2Miw5IEBACiAjZXJyb3IgTUFMTE9DX0xFQUtfQ0hFQ0sgaXMgbm90IGRlZmluZWQuCiAjZW5kaWYgIC8vICFNQUxMT0NfTEVBS19DSEVDSwogCi0vLyBHbG9iYWwgdmFyaWFibGVzIGRlZmluZWQgaW4gbWFsbG9jX2RlYnVnX2NvbW1vbi5jCiBleHRlcm4gaW50IGdNYWxsb2NMZWFrWnlnb3RlQ2hpbGQ7Ci1leHRlcm4gcHRocmVhZF9tdXRleF90IGdBbGxvY2F0aW9uc011dGV4OwotZXh0ZXJuIEhhc2hUYWJsZSBnSGFzaFRhYmxlOworZXh0ZXJuIEhhc2hUYWJsZSogZ19oYXNoX3RhYmxlOworZXh0ZXJuIGNvbnN0IE1hbGxvY0RlYnVnKiBnX21hbGxvY19kaXNwYXRjaDsKIAogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIHN0YWNrIHRyYWNlIGZ1bmN0aW9ucwpAQCAtMTM4LDcxICsxNDAsNjcgQEAKICAgICAgICAgc2l6ZSB8PSBTSVpFX0ZMQUdfWllHT1RFX0NISUxEOwogICAgIH0KIAotICAgIEhhc2hFbnRyeSogZW50cnkgPSBmaW5kX2VudHJ5KCZnSGFzaFRhYmxlLCBzbG90LCBiYWNrdHJhY2UsIG51bUVudHJpZXMsIHNpemUpOworICAgIEhhc2hFbnRyeSogZW50cnkgPSBmaW5kX2VudHJ5KGdfaGFzaF90YWJsZSwgc2xvdCwgYmFja3RyYWNlLCBudW1FbnRyaWVzLCBzaXplKTsKIAogICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7CiAgICAgICAgIGVudHJ5LT5hbGxvY2F0aW9ucysrOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBlbnRyeQotICAgICAgICBlbnRyeSA9IHN0YXRpY19jYXN0PEhhc2hFbnRyeSo+KGRsbWFsbG9jKHNpemVvZihIYXNoRW50cnkpICsgbnVtRW50cmllcypzaXplb2YodWludHB0cl90KSkpOworICAgICAgICBlbnRyeSA9IHN0YXRpY19jYXN0PEhhc2hFbnRyeSo+KGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2Moc2l6ZW9mKEhhc2hFbnRyeSkgKyBudW1FbnRyaWVzKnNpemVvZih1aW50cHRyX3QpKSk7CiAgICAgICAgIGlmICghZW50cnkpIHsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGVudHJ5LT5hbGxvY2F0aW9ucyA9IDE7CiAgICAgICAgIGVudHJ5LT5zbG90ID0gc2xvdDsKICAgICAgICAgZW50cnktPnByZXYgPSBOVUxMOwotICAgICAgICBlbnRyeS0+bmV4dCA9IGdIYXNoVGFibGUuc2xvdHNbc2xvdF07CisgICAgICAgIGVudHJ5LT5uZXh0ID0gZ19oYXNoX3RhYmxlLT5zbG90c1tzbG90XTsKICAgICAgICAgZW50cnktPm51bUVudHJpZXMgPSBudW1FbnRyaWVzOwogICAgICAgICBlbnRyeS0+c2l6ZSA9IHNpemU7CiAKICAgICAgICAgbWVtY3B5KGVudHJ5LT5iYWNrdHJhY2UsIGJhY2t0cmFjZSwgbnVtRW50cmllcyAqIHNpemVvZih1aW50cHRyX3QpKTsKIAotICAgICAgICBnSGFzaFRhYmxlLnNsb3RzW3Nsb3RdID0gZW50cnk7CisgICAgICAgIGdfaGFzaF90YWJsZS0+c2xvdHNbc2xvdF0gPSBlbnRyeTsKIAogICAgICAgICBpZiAoZW50cnktPm5leHQgIT0gTlVMTCkgewogICAgICAgICAgICAgZW50cnktPm5leHQtPnByZXYgPSBlbnRyeTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIHdlIGp1c3QgYWRkZWQgYW4gZW50cnksIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBoYXNodGFibGUKLSAgICAgICAgZ0hhc2hUYWJsZS5jb3VudCsrOworICAgICAgICBnX2hhc2hfdGFibGUtPmNvdW50Kys7CiAgICAgfQogCiAgICAgcmV0dXJuIGVudHJ5OwogfQogCiBzdGF0aWMgaW50IGlzX3ZhbGlkX2VudHJ5KEhhc2hFbnRyeSogZW50cnkpIHsKLSAgICBpZiAoZW50cnkgIT0gTlVMTCkgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgZm9yIChpID0gMCA7IGkgPCBIQVNIVEFCTEVfU0laRSA7IGkrKykgewotICAgICAgICAgICAgSGFzaEVudHJ5KiBlMSA9IGdIYXNoVGFibGUuc2xvdHNbaV07Ci0KLSAgICAgICAgICAgIHdoaWxlIChlMSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGUxID09IGVudHJ5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGUxID0gZTEtPm5leHQ7Ci0gICAgICAgICAgICB9CisgIGlmIChlbnRyeSAhPSBOVUxMKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBIQVNIVEFCTEVfU0laRTsgKytpKSB7CisgICAgICBIYXNoRW50cnkqIGUxID0gZ19oYXNoX3RhYmxlLT5zbG90c1tpXTsKKyAgICAgIHdoaWxlIChlMSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChlMSA9PSBlbnRyeSkgeworICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CisgICAgICAgIGUxID0gZTEtPm5leHQ7CisgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZV9lbnRyeShIYXNoRW50cnkqIGVudHJ5KSB7Ci0gICAgSGFzaEVudHJ5KiBwcmV2ID0gZW50cnktPnByZXY7Ci0gICAgSGFzaEVudHJ5KiBuZXh0ID0gZW50cnktPm5leHQ7CisgIEhhc2hFbnRyeSogcHJldiA9IGVudHJ5LT5wcmV2OworICBIYXNoRW50cnkqIG5leHQgPSBlbnRyeS0+bmV4dDsKIAotICAgIGlmIChwcmV2ICE9IE5VTEwpIGVudHJ5LT5wcmV2LT5uZXh0ID0gbmV4dDsKLSAgICBpZiAobmV4dCAhPSBOVUxMKSBlbnRyeS0+bmV4dC0+cHJldiA9IHByZXY7CisgIGlmIChwcmV2ICE9IE5VTEwpIGVudHJ5LT5wcmV2LT5uZXh0ID0gbmV4dDsKKyAgaWYgKG5leHQgIT0gTlVMTCkgZW50cnktPm5leHQtPnByZXYgPSBwcmV2OwogCi0gICAgaWYgKHByZXYgPT0gTlVMTCkgewotICAgICAgICAvLyB3ZSBhcmUgdGhlIGhlYWQgb2YgdGhlIGxpc3QuIHNldCB0aGUgaGVhZCB0byBiZSBuZXh0Ci0gICAgICAgIGdIYXNoVGFibGUuc2xvdHNbZW50cnktPnNsb3RdID0gZW50cnktPm5leHQ7Ci0gICAgfQorICBpZiAocHJldiA9PSBOVUxMKSB7CisgICAgLy8gd2UgYXJlIHRoZSBoZWFkIG9mIHRoZSBsaXN0LiBzZXQgdGhlIGhlYWQgdG8gYmUgbmV4dAorICAgIGdfaGFzaF90YWJsZS0+c2xvdHNbZW50cnktPnNsb3RdID0gZW50cnktPm5leHQ7CisgIH0KIAotICAgIC8vIHdlIGp1c3QgcmVtb3ZlZCBhbmQgZW50cnksIGRlY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBoYXNodGFibGUKLSAgICBnSGFzaFRhYmxlLmNvdW50LS07CisgIC8vIHdlIGp1c3QgcmVtb3ZlZCBhbmQgZW50cnksIGRlY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBoYXNodGFibGUKKyAgZ19oYXNoX3RhYmxlLT5jb3VudC0tOwogfQogCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjEzLDExICsyMTEsMTEgQEAKICNkZWZpbmUgQ0hLX1NFTlRJTkVMX1ZBTFVFICAgICAgMHhlYgogCiBleHRlcm4gIkMiIHZvaWQqIGZpbGxfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7Ci0gICAgcmV0dXJuIGRsY2FsbG9jKG5fZWxlbWVudHMsIGVsZW1fc2l6ZSk7CisgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5jYWxsb2Mobl9lbGVtZW50cywgZWxlbV9zaXplKTsKIH0KIAogZXh0ZXJuICJDIiB2b2lkKiBmaWxsX21hbGxvYyhzaXplX3QgYnl0ZXMpIHsKLSAgICB2b2lkKiBidWZmZXIgPSBkbG1hbGxvYyhieXRlcyk7CisgICAgdm9pZCogYnVmZmVyID0gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvYyhieXRlcyk7CiAgICAgaWYgKGJ1ZmZlcikgewogICAgICAgICBtZW1zZXQoYnVmZmVyLCBDSEtfU0VOVElORUxfVkFMVUUsIGJ5dGVzKTsKICAgICB9CkBAIC0yMjUsMTcgKzIyMywxNyBAQAogfQogCiBleHRlcm4gIkMiIHZvaWQgZmlsbF9mcmVlKHZvaWQqIG1lbSkgewotICAgIHNpemVfdCBieXRlcyA9IGRsbWFsbG9jX3VzYWJsZV9zaXplKG1lbSk7CisgICAgc2l6ZV90IGJ5dGVzID0gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvY191c2FibGVfc2l6ZShtZW0pOwogICAgIG1lbXNldChtZW0sIENIS19GSUxMX0ZSRUUsIGJ5dGVzKTsKLSAgICBkbGZyZWUobWVtKTsKKyAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShtZW0pOwogfQogCiBleHRlcm4gIkMiIHZvaWQqIGZpbGxfcmVhbGxvYyh2b2lkKiBtZW0sIHNpemVfdCBieXRlcykgewotICAgIHNpemVfdCBvbGRTaXplID0gZGxtYWxsb2NfdXNhYmxlX3NpemUobWVtKTsKLSAgICB2b2lkKiBuZXdNZW0gPSBkbHJlYWxsb2MobWVtLCBieXRlcyk7CisgICAgc2l6ZV90IG9sZFNpemUgPSBnX21hbGxvY19kaXNwYXRjaC0+bWFsbG9jX3VzYWJsZV9zaXplKG1lbSk7CisgICAgdm9pZCogbmV3TWVtID0gZ19tYWxsb2NfZGlzcGF0Y2gtPnJlYWxsb2MobWVtLCBieXRlcyk7CiAgICAgaWYgKG5ld01lbSkgewogICAgICAgICAvLyBJZiB0aGlzIGlzIGxhcmdlciB0aGFuIGJlZm9yZSwgZmlsbCB0aGUgZXh0cmEgd2l0aCBvdXIgcGF0dGVybi4KLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBkbG1hbGxvY191c2FibGVfc2l6ZShuZXdNZW0pOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2NfdXNhYmxlX3NpemUobmV3TWVtKTsKICAgICAgICAgaWYgKG5ld1NpemUgPiBvbGRTaXplKSB7CiAgICAgICAgICAgICBtZW1zZXQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5ld01lbSkrb2xkU2l6ZSksIENIS19GSUxMX0ZSRUUsIG5ld1NpemUtb2xkU2l6ZSk7CiAgICAgICAgIH0KQEAgLTI0NCw3ICsyNDIsNyBAQAogfQogCiBleHRlcm4gIkMiIHZvaWQqIGZpbGxfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7Ci0gICAgdm9pZCogYnVmZmVyID0gZGxtZW1hbGlnbihhbGlnbm1lbnQsIGJ5dGVzKTsKKyAgICB2b2lkKiBidWZmZXIgPSBnX21hbGxvY19kaXNwYXRjaC0+bWVtYWxpZ24oYWxpZ25tZW50LCBieXRlcyk7CiAgICAgaWYgKGJ1ZmZlcikgewogICAgICAgICBtZW1zZXQoYnVmZmVyLCBDSEtfU0VOVElORUxfVkFMVUUsIGJ5dGVzKTsKICAgICB9CkBAIC0yNTQsOSArMjUyLDM4IEBACiBleHRlcm4gIkMiIHNpemVfdCBmaWxsX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBtZW0pIHsKICAgICAvLyBTaW5jZSB3ZSBkaWRuJ3QgYWxsb2NhdGUgZXh0cmEgYnl0ZXMgYmVmb3JlIG9yIGFmdGVyLCB3ZSBjYW4KICAgICAvLyByZXBvcnQgdGhlIG5vcm1hbCB1c2FibGUgc2l6ZSBoZXJlLgotICAgIHJldHVybiBkbG1hbGxvY191c2FibGVfc2l6ZShtZW0pOworICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+bWFsbG9jX3VzYWJsZV9zaXplKG1lbSk7CiB9CiAKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIGZpbGxfbWFsbGluZm8oKSB7CisgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+bWFsbGluZm8oKTsKK30KKworZXh0ZXJuICJDIiBpbnQgZmlsbF9wb3NpeF9tZW1hbGlnbih2b2lkKiogbWVtcHRyLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkgeworICBpZiAoIXBvd2Vyb2YyKGFsaWdubWVudCkpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAqbWVtcHRyID0gZmlsbF9tZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworICBlcnJubyA9IHNhdmVkX2Vycm5vOworICByZXR1cm4gKCptZW1wdHIgIT0gTlVMTCkgPyAwIDogRU5PTUVNOworfQorCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorZXh0ZXJuICJDIiB2b2lkKiBmaWxsX3B2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgIHNpemVfdCBzaXplID0gQklPTklDX0FMSUdOKGJ5dGVzLCBwYWdlc2l6ZSk7CisgIGlmIChzaXplIDwgYnl0ZXMpIHsgLy8gT3ZlcmZsb3cKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gZmlsbF9tZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCogZmlsbF92YWxsb2Moc2l6ZV90IHNpemUpIHsKKyAgcmV0dXJuIGZpbGxfbWVtYWxpZ24oZ2V0cGFnZXNpemUoKSwgc2l6ZSk7Cit9CisjZW5kaWYKKwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIG1hbGxvYyBsZWFrIGZ1bmN0aW9ucwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTI2NCw2ICsyOTEsMTAgQEAKIHN0YXRpYyB1aW50MzJfdCBNRU1BTElHTl9HVUFSRCAgICAgID0gMHhBMUE0MTUyMDsKIAogZXh0ZXJuICJDIiB2b2lkKiBsZWFrX21hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICBpZiAoRGVidWdDYWxsc0Rpc2FibGVkKCkpIHsKKyAgICAgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2MoYnl0ZXMpOworICAgIH0KKwogICAgIC8vIGFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbmZyb250IG9mIHRoZSBhbGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBwb2ludGVyIGZvcgogICAgIC8vIHRoZSBhbGxvYyBzdHJ1Y3R1cmUuIFRoaXMgd2lsbCBtYWtpbmcgZnJlZSdpbmcgdGhlIHN0cnVjdGVyIHJlYWxseSBmYXN0IQogCkBAIC0yNzIsMTUgKzMwMywxNiBAQAogCiAgICAgc2l6ZV90IHNpemUgPSBieXRlcyArIHNpemVvZihBbGxvY2F0aW9uRW50cnkpOwogICAgIGlmIChzaXplIDwgYnl0ZXMpIHsgLy8gT3ZlcmZsb3cuCisgICAgICAgIGVycm5vID0gRU5PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICB2b2lkKiBiYXNlID0gZGxtYWxsb2Moc2l6ZSk7CisgICAgdm9pZCogYmFzZSA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2Moc2l6ZSk7CiAgICAgaWYgKGJhc2UgIT0gTlVMTCkgewotICAgICAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnQWxsb2NhdGlvbnNNdXRleCk7CisgICAgICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdfaGFzaF90YWJsZS0+bG9jayk7CiAKICAgICAgICAgdWludHB0cl90IGJhY2t0cmFjZVtCQUNLVFJBQ0VfU0laRV07Ci0gICAgICAgIHNpemVfdCBudW1FbnRyaWVzID0gZ2V0X2JhY2t0cmFjZShiYWNrdHJhY2UsIEJBQ0tUUkFDRV9TSVpFKTsKKyAgICAgICAgc2l6ZV90IG51bUVudHJpZXMgPSBHRVRfQkFDS1RSQUNFKGJhY2t0cmFjZSwgQkFDS1RSQUNFX1NJWkUpOwogCiAgICAgICAgIEFsbG9jYXRpb25FbnRyeSogaGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxBbGxvY2F0aW9uRW50cnkqPihiYXNlKTsKICAgICAgICAgaGVhZGVyLT5lbnRyeSA9IHJlY29yZF9iYWNrdHJhY2UoYmFja3RyYWNlLCBudW1FbnRyaWVzLCBieXRlcyk7CkBAIC0yOTUsNDMgKzMyNyw1NCBAQAogfQogCiBleHRlcm4gIkMiIHZvaWQgbGVha19mcmVlKHZvaWQqIG1lbSkgewotICAgIGlmIChtZW0gIT0gTlVMTCkgewotICAgICAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnQWxsb2NhdGlvbnNNdXRleCk7CisgIGlmIChEZWJ1Z0NhbGxzRGlzYWJsZWQoKSkgeworICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShtZW0pOworICB9CiAKLSAgICAgICAgLy8gY2hlY2sgdGhlIGd1YXJkIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZAotICAgICAgICBBbGxvY2F0aW9uRW50cnkqIGhlYWRlciA9IHRvX2hlYWRlcihtZW0pOworICBpZiAobWVtID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KIAotICAgICAgICBpZiAoaGVhZGVyLT5ndWFyZCAhPSBHVUFSRCkgewotICAgICAgICAgICAgLy8gY291bGQgYmUgYSBtZW1hbGlnbmVkIGJsb2NrCi0gICAgICAgICAgICBpZiAoaGVhZGVyLT5ndWFyZCA9PSBNRU1BTElHTl9HVUFSRCkgewotICAgICAgICAgICAgICAgIC8vIEZvciBtZW1hbGlnbmVkIGJsb2NrcywgaGVhZGVyLT5lbnRyeSBwb2ludHMgdG8gdGhlIG1lbW9yeQotICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlZCB0aHJvdWdoIGxlYWtfbWFsbG9jLgotICAgICAgICAgICAgICAgIGhlYWRlciA9IHRvX2hlYWRlcihoZWFkZXItPmVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnX2hhc2hfdGFibGUtPmxvY2spOwogCi0gICAgICAgIGlmIChoZWFkZXItPmd1YXJkID09IEdVQVJEIHx8IGlzX3ZhbGlkX2VudHJ5KGhlYWRlci0+ZW50cnkpKSB7Ci0gICAgICAgICAgICAvLyBkZWNyZW1lbnQgdGhlIGFsbG9jYXRpb25zCi0gICAgICAgICAgICBIYXNoRW50cnkqIGVudHJ5ID0gaGVhZGVyLT5lbnRyeTsKLSAgICAgICAgICAgIGVudHJ5LT5hbGxvY2F0aW9ucy0tOwotICAgICAgICAgICAgaWYgKGVudHJ5LT5hbGxvY2F0aW9ucyA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlX2VudHJ5KGVudHJ5KTsKLSAgICAgICAgICAgICAgICBkbGZyZWUoZW50cnkpOwotICAgICAgICAgICAgfQorICAvLyBjaGVjayB0aGUgZ3VhcmQgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkCisgIEFsbG9jYXRpb25FbnRyeSogaGVhZGVyID0gdG9faGVhZGVyKG1lbSk7CiAKLSAgICAgICAgICAgIC8vIG5vdyBmcmVlIHRoZSBtZW1vcnkhCi0gICAgICAgICAgICBkbGZyZWUoaGVhZGVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRlYnVnX2xvZygiV0FSTklORyBiYWQgaGVhZGVyIGd1YXJkOiAnMHgleCchIGFuZCBpbnZhbGlkIGVudHJ5OiAlcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5ndWFyZCwgaGVhZGVyLT5lbnRyeSk7Ci0gICAgICAgIH0KKyAgaWYgKGhlYWRlci0+Z3VhcmQgIT0gR1VBUkQpIHsKKyAgICAvLyBjb3VsZCBiZSBhIG1lbWFsaWduZWQgYmxvY2sKKyAgICBpZiAoaGVhZGVyLT5ndWFyZCA9PSBNRU1BTElHTl9HVUFSRCkgeworICAgICAgLy8gRm9yIG1lbWFsaWduZWQgYmxvY2tzLCBoZWFkZXItPmVudHJ5IHBvaW50cyB0byB0aGUgbWVtb3J5CisgICAgICAvLyBhbGxvY2F0ZWQgdGhyb3VnaCBsZWFrX21hbGxvYy4KKyAgICAgIGhlYWRlciA9IHRvX2hlYWRlcihoZWFkZXItPmVudHJ5KTsKICAgICB9CisgIH0KKworICBpZiAoaGVhZGVyLT5ndWFyZCA9PSBHVUFSRCB8fCBpc192YWxpZF9lbnRyeShoZWFkZXItPmVudHJ5KSkgeworICAgIC8vIGRlY3JlbWVudCB0aGUgYWxsb2NhdGlvbnMKKyAgICBIYXNoRW50cnkqIGVudHJ5ID0gaGVhZGVyLT5lbnRyeTsKKyAgICBlbnRyeS0+YWxsb2NhdGlvbnMtLTsKKyAgICBpZiAoZW50cnktPmFsbG9jYXRpb25zIDw9IDApIHsKKyAgICAgIHJlbW92ZV9lbnRyeShlbnRyeSk7CisgICAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShlbnRyeSk7CisgICAgfQorCisgICAgLy8gbm93IGZyZWUgdGhlIG1lbW9yeSEKKyAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShoZWFkZXIpOworICB9IGVsc2UgeworICAgIGRlYnVnX2xvZygiV0FSTklORyBiYWQgaGVhZGVyIGd1YXJkOiAnMHgleCchIGFuZCBpbnZhbGlkIGVudHJ5OiAlcFxuIiwKKyAgICAgICAgICAgICAgaGVhZGVyLT5ndWFyZCwgaGVhZGVyLT5lbnRyeSk7CisgIH0KIH0KIAogZXh0ZXJuICJDIiB2b2lkKiBsZWFrX2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgewotICAgIC8qIEZhaWwgb24gb3ZlcmZsb3cgLSBqdXN0IHRvIGJlIHNhZmUgZXZlbiB0aG91Z2ggdGhpcyBjb2RlIHJ1bnMgb25seQotICAgICAqIHdpdGhpbiB0aGUgZGVidWdnaW5nIEMgbGlicmFyeSwgbm90IHRoZSBwcm9kdWN0aW9uIG9uZSAqLwotICAgIGlmIChuX2VsZW1lbnRzICYmIE1BWF9TSVpFX1QgLyBuX2VsZW1lbnRzIDwgZWxlbV9zaXplKSB7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+Y2FsbG9jKG5fZWxlbWVudHMsIGVsZW1fc2l6ZSk7CisgICAgfQorCisgICAgLy8gRmFpbCBvbiBvdmVyZmxvdyAtIGp1c3QgdG8gYmUgc2FmZSBldmVuIHRob3VnaCB0aGlzIGNvZGUgcnVucyBvbmx5CisgICAgLy8gd2l0aGluIHRoZSBkZWJ1Z2dpbmcgQyBsaWJyYXJ5LCBub3QgdGhlIHByb2R1Y3Rpb24gb25lLgorICAgIGlmIChuX2VsZW1lbnRzICYmIFNJWkVfTUFYIC8gbl9lbGVtZW50cyA8IGVsZW1fc2l6ZSkgeworICAgICAgICBlcnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHNpemVfdCBzaXplID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKQEAgLTM0Miw3ICszODUsNDEgQEAKICAgICByZXR1cm4gcHRyOwogfQogCitleHRlcm4gIkMiIHNpemVfdCBsZWFrX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBtZW0pIHsKKyAgICBpZiAoRGVidWdDYWxsc0Rpc2FibGVkKCkpIHsKKyAgICAgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2NfdXNhYmxlX3NpemUobWVtKTsKKyAgICB9CisKKyAgICBpZiAobWVtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gQ2hlY2sgdGhlIGd1YXJkIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KKyAgICBjb25zdCBBbGxvY2F0aW9uRW50cnkqIGhlYWRlciA9IGNvbnN0X3RvX2hlYWRlcihtZW0pOworCisgICAgaWYgKGhlYWRlci0+Z3VhcmQgPT0gTUVNQUxJR05fR1VBUkQpIHsKKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG1lbWFsaWduJ2QgcG9pbnRlciwgdGhlbiBncmFiIHRoZSBoZWFkZXIgZnJvbQorICAgICAgICAvLyBlbnRyeS4KKyAgICAgICAgaGVhZGVyID0gY29uc3RfdG9faGVhZGVyKGhlYWRlci0+ZW50cnkpOworICAgIH0gZWxzZSBpZiAoaGVhZGVyLT5ndWFyZCAhPSBHVUFSRCkgeworICAgICAgICBkZWJ1Z19sb2coIldBUk5JTkcgYmFkIGhlYWRlciBndWFyZDogJzB4JXgnISBhbmQgaW52YWxpZCBlbnRyeTogJXBcbiIsCisgICAgICAgICAgICAgICAgICBoZWFkZXItPmd1YXJkLCBoZWFkZXItPmVudHJ5KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc2l6ZV90IHJldCA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2NfdXNhYmxlX3NpemUoaGVhZGVyKTsKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgLy8gVGhlIHVzYWJsZSBhcmVhIHN0YXJ0cyBhdCAnbWVtJyBhbmQgc3RvcHMgYXQgJ2hlYWRlcityZXQnLgorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhlYWRlcikgKyByZXQgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obWVtKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIGV4dGVybiAiQyIgdm9pZCogbGVha19yZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+cmVhbGxvYyhvbGRNZW0sIGJ5dGVzKTsKKyAgICB9CisKICAgICBpZiAob2xkTWVtID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIGxlYWtfbWFsbG9jKGJ5dGVzKTsKICAgICB9CkBAIC0zNTUsMjkgKzQzMiwzNCBAQAogICAgIH0gZWxzZSBpZiAoaGVhZGVyLT5ndWFyZCAhPSBHVUFSRCkgewogICAgICAgICBkZWJ1Z19sb2coIldBUk5JTkcgYmFkIGhlYWRlciBndWFyZDogJzB4JXgnISBhbmQgaW52YWxpZCBlbnRyeTogJXBcbiIsCiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5ndWFyZCwgaGVhZGVyLT5lbnRyeSk7CisgICAgICAgIGVycm5vID0gRU5PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBuZXdNZW0gPSBsZWFrX21hbGxvYyhieXRlcyk7CiAgICAgaWYgKG5ld01lbSAhPSBOVUxMKSB7Ci0gICAgICAgIHNpemVfdCBvbGRTaXplID0gaGVhZGVyLT5lbnRyeS0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBsZWFrX21hbGxvY191c2FibGVfc2l6ZShvbGRNZW0pOwogICAgICAgICBzaXplX3QgY29weVNpemUgPSAob2xkU2l6ZSA8PSBieXRlcykgPyBvbGRTaXplIDogYnl0ZXM7CiAgICAgICAgIG1lbWNweShuZXdNZW0sIG9sZE1lbSwgY29weVNpemUpOworICAgICAgICBsZWFrX2ZyZWUob2xkTWVtKTsKICAgICB9Ci0gICAgbGVha19mcmVlKG9sZE1lbSk7CiAKICAgICByZXR1cm4gbmV3TWVtOwogfQogCiBleHRlcm4gIkMiIHZvaWQqIGxlYWtfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgICAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+bWVtYWxpZ24oYWxpZ25tZW50LCBieXRlcyk7CisgICAgfQorCiAgICAgLy8gd2UgY2FuIGp1c3QgdXNlIG1hbGxvYwogICAgIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkgewogICAgICAgICByZXR1cm4gbGVha19tYWxsb2MoYnl0ZXMpOwogICAgIH0KIAogICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJlIGl0J3MgYSBwb3dlciBvZiB0d28KLSAgICBpZiAoYWxpZ25tZW50ICYgKGFsaWdubWVudC0xKSkgewotICAgICAgICBhbGlnbm1lbnQgPSAxTCA8PCAoMzEgLSBfX2J1aWx0aW5fY2x6KGFsaWdubWVudCkpOworICAgIGlmICghcG93ZXJvZjIoYWxpZ25tZW50KSkgeworICAgICAgICBhbGlnbm1lbnQgPSBCSU9OSUNfUk9VTkRfVVBfUE9XRVJfT0ZfMihhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIC8vIGhlcmUsIGFsaWdubWVudCBpcyBhdCBsZWFzdCBNQUxMT0NfQUxJR05NRU5UPDwxIGJ5dGVzCkBAIC00MTAsMjYgKzQ5Miw0MyBAQAogICAgIHJldHVybiBiYXNlOwogfQogCi1leHRlcm4gIkMiIHNpemVfdCBsZWFrX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBtZW0pIHsKLSAgICBpZiAobWVtICE9IE5VTEwpIHsKLSAgICAgICAgLy8gQ2hlY2sgdGhlIGd1YXJkIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KLSAgICAgICAgY29uc3QgQWxsb2NhdGlvbkVudHJ5KiBoZWFkZXIgPSBjb25zdF90b19oZWFkZXIoKHZvaWQqKW1lbSk7Ci0KLSAgICAgICAgaWYgKGhlYWRlci0+Z3VhcmQgPT0gTUVNQUxJR05fR1VBUkQpIHsKLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBtZW1hbGlnbidkIHBvaW50ZXIsIHRoZW4gZ3JhYiB0aGUgaGVhZGVyIGZyb20KLSAgICAgICAgICAgIC8vIGVudHJ5LgotICAgICAgICAgICAgaGVhZGVyID0gY29uc3RfdG9faGVhZGVyKGhlYWRlci0+ZW50cnkpOwotICAgICAgICB9IGVsc2UgaWYgKGhlYWRlci0+Z3VhcmQgIT0gR1VBUkQpIHsKLSAgICAgICAgICAgIGRlYnVnX2xvZygiV0FSTklORyBiYWQgaGVhZGVyIGd1YXJkOiAnMHgleCchIGFuZCBpbnZhbGlkIGVudHJ5OiAlcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICBoZWFkZXItPmd1YXJkLCBoZWFkZXItPmVudHJ5KTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgc2l6ZV90IHJldCA9IGRsbWFsbG9jX3VzYWJsZV9zaXplKGhlYWRlcik7Ci0gICAgICAgIGlmIChyZXQgIT0gMCkgewotICAgICAgICAgICAgLy8gVGhlIHVzYWJsZSBhcmVhIHN0YXJ0cyBhdCAnbWVtJyBhbmQgc3RvcHMgYXQgJ2hlYWRlcityZXQnLgotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoZWFkZXIpICsgcmV0IC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1lbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7CitleHRlcm4gIkMiIHN0cnVjdCBtYWxsaW5mbyBsZWFrX21hbGxpbmZvKCkgeworICByZXR1cm4gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxpbmZvKCk7CiB9CisKK2V4dGVybiAiQyIgaW50IGxlYWtfcG9zaXhfbWVtYWxpZ24odm9pZCoqIG1lbXB0ciwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsKKyAgaWYgKERlYnVnQ2FsbHNEaXNhYmxlZCgpKSB7CisgICAgcmV0dXJuIGdfbWFsbG9jX2Rpc3BhdGNoLT5wb3NpeF9tZW1hbGlnbihtZW1wdHIsIGFsaWdubWVudCwgc2l6ZSk7CisgIH0KKworICBpZiAoIXBvd2Vyb2YyKGFsaWdubWVudCkpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOworICAqbWVtcHRyID0gbGVha19tZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworICBlcnJubyA9IHNhdmVkX2Vycm5vOworICByZXR1cm4gKCptZW1wdHIgIT0gTlVMTCkgPyAwIDogRU5PTUVNOworfQorCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorZXh0ZXJuICJDIiB2b2lkKiBsZWFrX3B2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChEZWJ1Z0NhbGxzRGlzYWJsZWQoKSkgeworICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+cHZhbGxvYyhieXRlcyk7CisgIH0KKworICBzaXplX3QgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOworICBzaXplX3Qgc2l6ZSA9IEJJT05JQ19BTElHTihieXRlcywgcGFnZXNpemUpOworICBpZiAoc2l6ZSA8IGJ5dGVzKSB7IC8vIE92ZXJmbG93CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcmV0dXJuIGxlYWtfbWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOworfQorCitleHRlcm4gIkMiIHZvaWQqIGxlYWtfdmFsbG9jKHNpemVfdCBzaXplKSB7CisgIGlmIChEZWJ1Z0NhbGxzRGlzYWJsZWQoKSkgeworICAgIHJldHVybiBnX21hbGxvY19kaXNwYXRjaC0+dmFsbG9jKHNpemUpOworICB9CisKKyAgcmV0dXJuIGxlYWtfbWVtYWxpZ24oZ2V0cGFnZXNpemUoKSwgc2l6ZSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19xZW11LmNwcCBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19xZW11LmNwcAppbmRleCA1YTkxZGFhLi5iM2I2MDRkIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfcWVtdS5jcHAKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX3FlbXUuY3BwCkBAIC00NywxMiArNDcsMTMgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJkbG1hbGxvYy5oIgotI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCiAjaW5jbHVkZSAibWFsbG9jX2RlYnVnX2NvbW1vbi5oIgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21hY3Jvcy5oIgorI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCiAKIC8qIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgaW50byB0aGUgYnVpbGQgb25seSB3aGVuCiAgKiBNQUxMT0NfUUVNVV9JTlNUUlVNRU5UIG1hY3JvIGlzIGRlZmluZWQuICovCkBAIC0zMzUsNiArMzM2LDkgQEAKIC8vIFN0YXRpYyBkYXRhCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisvLyBUaGUgdW5kZXJseWluZyBtYWxsb2MgaW1wbGVtZW50YXRpb24gdG8gdXNlIHRvIGdldCBtZW1vcnkuCitzdGF0aWMgY29uc3QgTWFsbG9jRGVidWcqIGdfbWFsbG9jX2Rpc3BhdGNoID0gTlVMTDsKKwogLyogRW11bGF0b3IncyBtYWdpYyBwYWdlIGFkZHJlc3MuCiAgKiBUaGlzIHBhZ2UgKG1hcHBlZCBvbiAvZGV2L3FlbXVfdHJhY2UgZGV2aWNlKSBpcyB1c2VkIHRvIGZpcmUgdXAgZXZlbnRzCiAgKiBpbiB0aGUgZW11bGF0b3IuICovCkBAIC0zNDQsNyArMzQ4LDcgQEAKICAqIGhhcyBiZWVuIGluaXRpYWxpemVkLiAqLwogc3RhdGljIHVpbnQzMl90IG1hbGxvY19waWQgPSAwOwogCi0vKiBNZW1vcnkgYWxsb2NhdGlvbiBhbGlnbm1lbnQgdGhhdCBpcyB1c2VkIGluIGRsbWFsbG9jLgorLyogTWVtb3J5IGFsbG9jYXRpb24gYWxpZ25tZW50IHRoYXQgaXMgdXNlZCBpbiB0aGUgbWFsbG9jIGltcGxlbWVudGF0aW9uLgogICogVGhpcyB2YXJpYWJsZSBpcyB1cGRhdGVkIGJ5IG1lbWNoZWNrX2luaXRpYWxpemUgcm91dGluZS4gKi8KIHN0YXRpYyB1aW50MzJfdCBtYWxsb2NfYWxpZ25tZW50ID0gODsKIApAQCAtNTc0LDEyICs1NzgsMTYgQEAKIC8vIEFQSSByb3V0aW5lcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotZXh0ZXJuICJDIiB2b2lkKiBxZW11X2luc3RydW1lbnRlZF9tYWxsb2Moc2l6ZV90IGJ5dGVzKTsKLWV4dGVybiAiQyIgdm9pZCAgcWVtdV9pbnN0cnVtZW50ZWRfZnJlZSh2b2lkKiBtZW0pOwotZXh0ZXJuICJDIiB2b2lkKiBxZW11X2luc3RydW1lbnRlZF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOwotZXh0ZXJuICJDIiB2b2lkKiBxZW11X2luc3RydW1lbnRlZF9yZWFsbG9jKHZvaWQqIG1lbSwgc2l6ZV90IGJ5dGVzKTsKLWV4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsKLWV4dGVybiAiQyIgc2l6ZV90IHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBtZW0pOworZXh0ZXJuICJDIiB2b2lkKiBxZW11X2luc3RydW1lbnRlZF9jYWxsb2Moc2l6ZV90LCBzaXplX3QpOworZXh0ZXJuICJDIiB2b2lkICBxZW11X2luc3RydW1lbnRlZF9mcmVlKHZvaWQqKTsKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxpbmZvKCk7CitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvYyhzaXplX3QpOworZXh0ZXJuICJDIiBzaXplX3QgcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jX3VzYWJsZV9zaXplKGNvbnN0IHZvaWQqKTsKK2V4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworZXh0ZXJuICJDIiBpbnQgcWVtdV9pbnN0cnVtZW50ZWRfcG9zaXhfbWVtYWxpZ24odm9pZCoqLCBzaXplX3QsIHNpemVfdCk7CitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX3B2YWxsb2Moc2l6ZV90KTsKK2V4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKK2V4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfdmFsbG9jKHNpemVfdCk7CiAKIC8qIEluaXRpYWxpemVzIG1hbGxvYyBkZWJ1Z2dpbmcgaW5zdHJ1bWVudGF0aW9uIGZvciB0aGUgZW11bGF0b3IuCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZyb20gbWFsbG9jX2luaXRfaW1wbCByb3V0aW5lIGltcGxlbWVudGVkIGluCkBAIC01OTAsNyArNTk4LDkgQEAKICAqIFJldHVybjoKICAqICAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUuCiAqLwotZXh0ZXJuICJDIiBpbnQgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUoKSB7CitleHRlcm4gIkMiIGJvb2wgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUoSGFzaFRhYmxlKiwgY29uc3QgTWFsbG9jRGVidWcqIG1hbGxvY19kaXNwYXRjaCkgeworICAgIGdfbWFsbG9jX2Rpc3BhdGNoID0gbWFsbG9jX2Rpc3BhdGNoOworCiAgICAgLyogV2Ugd2lsbCBiZSB1c2luZyBlbXVsYXRvcidzIG1hZ2ljIHBhZ2UgdG8gcmVwb3J0IG1lbW9yeSBhbGxvY2F0aW9uCiAgICAgICogYWN0aXZpdGllcy4gSW4gZXNzZW5jZSwgd2hhdCBtYWdpYyBwYWdlIGRvZXMsIGl0IHRyYW5zbGF0ZXMgd3JpdGVzIHRvCiAgICAgICogdGhlIG1lbW9yeSBtYXBwZWQgc3BhY2VzIGludG8gd3JpdGVzIHRvIGFuIEkvTyBwb3J0IHRoYXQgZW11bGF0b3IKQEAgLTU5OSw3ICs2MDksNyBAQAogICAgIGludCBmZCA9IG9wZW4oIi9kZXYvcWVtdV90cmFjZSIsIE9fUkRXUik7CiAgICAgaWYgKGZkIDwgMCkgewogICAgICAgICBlcnJvcl9sb2coIlVuYWJsZSB0byBvcGVuIC9kZXYvcWVtdV90cmFjZSIpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgewogICAgICAgICBxdHJhY2UgPSBtbWFwKE5VTEwsIFBBR0VTSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7CiAgICAgICAgIGNsb3NlKGZkKTsKQEAgLTYwNywxNCArNjE3LDEzIEBACiAgICAgICAgIGlmIChxdHJhY2UgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICAgICAgcXRyYWNlID0gTlVMTDsKICAgICAgICAgICAgIGVycm9yX2xvZygiVW5hYmxlIHRvIG1tYXAgL2Rldi9xZW11X3RyYWNlIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBDYWNoZSBwaWQgb2YgdGhlIHByb2Nlc3MgdGhpcyBsaWJyYXJ5IGhhcyBiZWVuIGluaXRpYWxpemVkIGZvci4gKi8KICAgICBtYWxsb2NfcGlkID0gZ2V0cGlkKCk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLyogQ29tcGxldGVzIG1hbGxvYyBkZWJ1Z2dpbmcgaW5zdHJ1bWVudGF0aW9uIGZvciB0aGUgZW11bGF0b3IuCkBAIC02NzcsMTUgKzY4NiwyMiBAQAogZXh0ZXJuICJDIiB2b2lkKiBxZW11X2luc3RydW1lbnRlZF9tYWxsb2Moc2l6ZV90IGJ5dGVzKSB7CiAgICAgTWFsbG9jRGVzYyBkZXNjOwogCi0gICAgLyogSW5pdGlhbGl6ZSBibG9jayBkZXNjcmlwdG9yIGFuZCBhbGxvY2F0ZSBtZW1vcnkuIE5vdGUgdGhhdCBkbG1hbGxvYworICAgIC8qIEluaXRpYWxpemUgYmxvY2sgZGVzY3JpcHRvciBhbmQgYWxsb2NhdGUgbWVtb3J5LiBOb3RlIHRoYXQgbWFsbG9jCiAgICAgICogcmV0dXJucyBhIHZhbGlkIHBvaW50ZXIgb24gemVybyBhbGxvY2F0aW9uLiBMZXRzIG1pbWljIHRoaXMgYmVoYXZpb3IuICovCiAgICAgZGVzYy5wcmVmaXhfc2l6ZSA9IERFRkFVTFRfUFJFRklYX1NJWkU7CiAgICAgZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPSBieXRlczsKICAgICBkZXNjLnN1ZmZpeF9zaXplID0gREVGQVVMVF9TVUZGSVhfU0laRTsKLSAgICBkZXNjLnB0ciA9IGRsbWFsbG9jKG1hbGxvY2Rlc2NfYWxsb2Nfc2l6ZSgmZGVzYykpOworICAgIHNpemVfdCBzaXplID0gbWFsbG9jZGVzY19hbGxvY19zaXplKCZkZXNjKTsKKyAgICBpZiAoc2l6ZSA8IGJ5dGVzKSB7IC8vIE92ZXJmbG93CisgICAgICAgIHFlbXVfZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IG1hbGxvYzogbWFsbG9jKCV6dSkgb3ZlcmZsb3cgY2F1c2VkIGZhaWx1cmUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGJ5dGVzKTsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBkZXNjLnB0ciA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5tYWxsb2Moc2l6ZSk7CiAgICAgaWYgKGRlc2MucHRyID09IE5VTEwpIHsKLSAgICAgICAgcWVtdV9lcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gbWFsbG9jKCV6ZCk6IGRsbWFsbG9jKCV1KSBmYWlsZWQuIiwKLSAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBieXRlcywgbWFsbG9jZGVzY19hbGxvY19zaXplKCZkZXNjKSk7CisgICAgICAgIHFlbXVfZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IG1hbGxvYyglenUpOiBtYWxsb2MoJXp1KSBmYWlsZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGJ5dGVzLCBzaXplKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC02OTMsMTMgKzcwOSwxNCBAQAogICAgIGlmIChub3RpZnlfcWVtdV9tYWxsb2MoJmRlc2MpKSB7CiAgICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmRlc2MsICI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiBtYWxsb2M6IG5vdGlmeV9tYWxsb2MgZmFpbGVkIGZvciAiLAogICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCkpOwotICAgICAgICBkbGZyZWUoZGVzYy5wdHIpOworICAgICAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShkZXNjLnB0cik7CisgICAgICAgIGVycm5vID0gRU5PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewogI2lmIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKICAgICAgICAgdGVzdF9hY2Nlc3NfdmlvbGF0aW9uKCZkZXNjKTsKICNlbmRpZiAgLy8gVEVTVF9BQ0NFU1NfVklPTEFUSU9OUwotICAgICAgICBsb2dfbWRlc2MoaW5mbywgJmRlc2MsICIrKysgPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBtYWxsb2MoJXpkKSAtPiAiLAorICAgICAgICBsb2dfbWRlc2MoaW5mbywgJmRlc2MsICIrKysgPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBtYWxsb2MoJXp1KSAtPiAiLAogICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIG1hbGxvY2Rlc2NfdXNlcl9wdHIoJmRlc2MpOwogICAgIH0KQEAgLTcxNCw3ICs3MzEsNyBAQAogCiAgICAgaWYgKG1lbSA9PSBOVUxMKSB7CiAgICAgICAgIC8vIEp1c3QgbGV0IGdvIE5VTEwgZnJlZQotICAgICAgICBkbGZyZWUobWVtKTsKKyAgICAgICAgZ19tYWxsb2NfZGlzcGF0Y2gtPmZyZWUobWVtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzQ1LDcgKzc2Miw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiLS0tIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gZnJlZSglcCkgLT4gIiwKICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0pOwotICAgICAgICBkbGZyZWUoZGVzYy5wdHIpOworICAgICAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShkZXNjLnB0cik7CiAgICAgfQogfQogCkBAIC03NTYsMTMgKzc3MywxNiBAQAogICAgIGlmIChuX2VsZW1lbnRzID09IDAgfHwgZWxlbV9zaXplID09IDApIHsKICAgICAgICAgLy8gSnVzdCBsZXQgZ28gemVybyBieXRlcyBhbGxvY2F0aW9uLgogICAgICAgICBxZW11X2luZm9fbG9nKCI6OjogPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogWmVybyBjYWxsb2MgcmVkaXIgdG8gbWFsbG9jIiwKLSAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCkpOworICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpKTsKICAgICAgICAgcmV0dXJuIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvYygwKTsKICAgICB9CiAKLSAgICAvKiBGYWlsIG9uIG92ZXJmbG93IC0ganVzdCB0byBiZSBzYWZlIGV2ZW4gdGhvdWdoIHRoaXMgY29kZSBydW5zIG9ubHkKLSAgICAgKiB3aXRoaW4gdGhlIGRlYnVnZ2luZyBDIGxpYnJhcnksIG5vdCB0aGUgcHJvZHVjdGlvbiBvbmUgKi8KLSAgICBpZiAobl9lbGVtZW50cyAmJiBNQVhfU0laRV9UIC8gbl9lbGVtZW50cyA8IGVsZW1fc2l6ZSkgeworICAgIC8vIEZhaWwgb24gb3ZlcmZsb3cgLSBqdXN0IHRvIGJlIHNhZmUgZXZlbiB0aG91Z2ggdGhpcyBjb2RlIHJ1bnMgb25seQorICAgIC8vIHdpdGhpbiB0aGUgZGVidWdnaW5nIEMgbGlicmFyeSwgbm90IHRoZSBwcm9kdWN0aW9uIG9uZS4KKyAgICBpZiAobl9lbGVtZW50cyAmJiBTSVpFX01BWCAvIG5fZWxlbWVudHMgPCBlbGVtX3NpemUpIHsKKyAgICAgICAgcWVtdV9lcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gY2FsbG9jOiBjYWxsb2MoJXp1LCAlenUpIG92ZXJmbG93IGNhdXNlZCBmYWlsdXJlLiIsCisgICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBuX2VsZW1lbnRzLCBlbGVtX3NpemUpOworICAgICAgICBlcnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC03ODgsNiArODA4LDEyIEBACiAgICAgfQogICAgIGRlc2MucmVxdWVzdGVkX2J5dGVzID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKICAgICBzaXplX3QgdG90YWxfc2l6ZSA9IGRlc2MucmVxdWVzdGVkX2J5dGVzICsgZGVzYy5wcmVmaXhfc2l6ZSArIGRlc2Muc3VmZml4X3NpemU7CisgICAgaWYgKHRvdGFsX3NpemUgPCBkZXNjLnJlcXVlc3RlZF9ieXRlcykgeyAvLyBPdmVyZmxvdworICAgICAgICBxZW11X2Vycm9yX2xvZygiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBjYWxsb2M6IGNhbGxvYyglenUsICV6dSkgb3ZlcmZsb3cgY2F1c2VkIGZhaWx1cmUuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG5fZWxlbWVudHMsIGVsZW1fc2l6ZSk7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgc2l6ZV90IHRvdGFsX2VsZW1lbnRzID0gdG90YWxfc2l6ZSAvIGVsZW1fc2l6ZTsKICAgICB0b3RhbF9zaXplICU9IGVsZW1fc2l6ZTsKICAgICBpZiAodG90YWxfc2l6ZSAhPSAwKSB7CkBAIC03OTUsMjQgKzgyMSwyNSBAQAogICAgICAgICB0b3RhbF9lbGVtZW50cysrOwogICAgICAgICBkZXNjLnN1ZmZpeF9zaXplICs9IChlbGVtX3NpemUgLSB0b3RhbF9zaXplKTsKICAgICB9Ci0gICAgZGVzYy5wdHIgPSBkbGNhbGxvYyh0b3RhbF9lbGVtZW50cywgZWxlbV9zaXplKTsKKyAgICBkZXNjLnB0ciA9IGdfbWFsbG9jX2Rpc3BhdGNoLT5jYWxsb2ModG90YWxfZWxlbWVudHMsIGVsZW1fc2l6ZSk7CiAgICAgaWYgKGRlc2MucHRyID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IGNhbGxvYzogZGxjYWxsb2MoJXpkKCV6ZCksICV6ZCkgKHByeD0ldSwgc2Z4PSV1KSBmYWlsZWQuIiwKKyAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IGNhbGxvYzogY2FsbG9jKCV6dSglenUpLCAlenUpIChwcng9JXUsIHNmeD0ldSkgZmFpbGVkLiIsCiAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG5fZWxlbWVudHMsIHRvdGFsX2VsZW1lbnRzLCBlbGVtX3NpemUsCiAgICAgICAgICAgICAgICAgICAgZGVzYy5wcmVmaXhfc2l6ZSwgZGVzYy5zdWZmaXhfc2l6ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGlmIChub3RpZnlfcWVtdV9tYWxsb2MoJmRlc2MpKSB7Ci0gICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmRlc2MsICI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiBjYWxsb2MoJXpkKCV6ZCksICV6ZCk6IG5vdGlmeV9tYWxsb2MgZmFpbGVkIGZvciAiLAorICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZkZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogY2FsbG9jKCV6dSglenUpLCAlenUpOiBub3RpZnlfbWFsbG9jIGZhaWxlZCBmb3IgIiwKICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBuX2VsZW1lbnRzLCB0b3RhbF9lbGVtZW50cywgZWxlbV9zaXplKTsKLSAgICAgICAgZGxmcmVlKGRlc2MucHRyKTsKKyAgICAgICAgZ19tYWxsb2NfZGlzcGF0Y2gtPmZyZWUoZGVzYy5wdHIpOworICAgICAgICBlcnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKICNpZiBURVNUX0FDQ0VTU19WSU9MQVRJT05TCiAgICAgICAgIHRlc3RfYWNjZXNzX3Zpb2xhdGlvbigmZGVzYyk7CiAjZW5kaWYgIC8vIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKLSAgICAgICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiIyMjIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gY2FsbG9jKCV6ZCglemQpLCAlemQpIC0+ICIsCisgICAgICAgIGxvZ19tZGVzYyhpbmZvLCAmZGVzYywgIiMjIyA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IGNhbGxvYyglenUoJXp1KSwgJXp1KSAtPiAiLAogICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG5fZWxlbWVudHMsIHRvdGFsX2VsZW1lbnRzLCBlbGVtX3NpemUpOwogICAgICAgICByZXR1cm4gbWFsbG9jZGVzY191c2VyX3B0cigmZGVzYyk7CiAgICAgfQpAQCAtODI1LDMzICs4NTIsMzAgQEAKICAqIHNob3VsZCBub3QgZXhwZWN0IHRoYXQgcG9pbnRlciByZXR1cm5lZCBhZnRlciBzaHJpbmtpbmcgd2lsbCByZW1haW4gdGhlIHNhbWUuCiAgKi8KIGV4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfcmVhbGxvYyh2b2lkKiBtZW0sIHNpemVfdCBieXRlcykgewotICAgIE1hbGxvY0Rlc2MgbmV3X2Rlc2M7Ci0gICAgTWFsbG9jRGVzYyBjdXJfZGVzYzsKLSAgICBzaXplX3QgdG9fY29weTsKLSAgICB2b2lkKiByZXQ7Ci0KICAgICBpZiAobWVtID09IE5VTEwpIHsKICAgICAgICAgLy8gTm90aGluZyB0byByZWFsbG9jLiBqdXN0IGRvIHJlZ3VsYXIgbWFsbG9jLgotICAgICAgICBxZW11X2luZm9fbG9nKCI6OjogPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXpkKSByZWRpciB0byBtYWxsb2MiLAotICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtLCBieXRlcyk7CisgICAgICAgIHFlbXVfaW5mb19sb2coIjo6OiA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlenUpIHJlZGlyIHRvIG1hbGxvYyIsCisgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOwogICAgICAgICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jKGJ5dGVzKTsKICAgICB9CiAKICAgICBpZiAoYnl0ZXMgPT0gMCkgewogICAgICAgICAvLyBUaGlzIGlzIGEgImZyZWUiIGNvbmRpdGlvbi4KLSAgICAgICAgcWVtdV9pbmZvX2xvZygiOjo6IDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV6ZCkgcmVkaXIgdG8gZnJlZSBhbmQgbWFsbG9jIiwKLSAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOworICAgICAgICBxZW11X2luZm9fbG9nKCI6OjogPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXp1KSByZWRpciB0byBmcmVlIGFuZCBtYWxsb2MiLAorICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzKTsKICAgICAgICAgcWVtdV9pbnN0cnVtZW50ZWRfZnJlZShtZW0pOwogCi0gICAgICAgIC8vIFRoaXMgaXMgd2hhdCBkbHJlYWxsb2MgZG9lcyBmb3IgYSAiZnJlZSIgcmVhbGxvYy4KKyAgICAgICAgLy8gVGhpcyBpcyB3aGF0IHJlYWxsb2MgZG9lcyBmb3IgYSAiZnJlZSIgcmVhbGxvYy4KICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLy8gUXVlcnkgZW11bGF0b3IgZm9yIHRoZSByZWFsbG9jYXRpbmcgYmxvY2sgaW5mb3JtYXRpb24uCisgICAgTWFsbG9jRGVzYyBjdXJfZGVzYzsKICAgICBpZiAocXVlcnlfcWVtdV9tYWxsb2NfaW5mbyhtZW0sICZjdXJfZGVzYywgMikpIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdmlvbGF0aW9uIHNob3VsZCBiZSBhbHJlYWR5IGNhdWdodCBpbiB0aGUgZW11bGF0b3IuCi0gICAgICAgIGVycm9yX2xvZygiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXpkKSBxdWVyeV9pbmZvIGZhaWxlZC4iLAorICAgICAgICBlcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV6dSkgcXVlcnlfaW5mbyBmYWlsZWQuIiwKICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzKTsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtODYzLDggKzg4Nyw5IEBACiAgICAgICogZm9yIHRoaXMgbWVtb3J5IGJsb2NrLiBOb3RlIHRoYXQgdGhpcyB2aW9sYXRpb24gc2hvdWxkIGJlIGFscmVhZHkgY2F1Z2h0CiAgICAgICogaW4gdGhlIGVtdWxhdG9yLiovCiAgICAgaWYgKG1lbSAhPSBtYWxsb2NkZXNjX3VzZXJfcHRyKCZjdXJfZGVzYykpIHsKLSAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmY3VyX2Rlc2MsICI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlemQpIGlzIGludmFsaWQgZm9yICIsCisgICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmN1cl9kZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXp1KSBpcyBpbnZhbGlkIGZvciAiLAogICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOworICAgICAgICBlcnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC04NzQsMzEgKzg5OSwzOCBAQAogICAgICAqIGZvciB0aGlzIGJsb2NrIHRoYXQgaXMgc3RvcmVkIGluIHRoZSBlbXVsYXRvci4gKi8KIAogICAgIC8vIEluaXRpYWxpemUgZGVzY3JpcHRvciBmb3IgdGhlIG5ldyBibG9jay4KKyAgICBNYWxsb2NEZXNjIG5ld19kZXNjOwogICAgIG5ld19kZXNjLnByZWZpeF9zaXplID0gREVGQVVMVF9QUkVGSVhfU0laRTsKICAgICBuZXdfZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPSBieXRlczsKICAgICBuZXdfZGVzYy5zdWZmaXhfc2l6ZSA9IERFRkFVTFRfU1VGRklYX1NJWkU7Ci0gICAgbmV3X2Rlc2MucHRyID0gZGxtYWxsb2MobWFsbG9jZGVzY19hbGxvY19zaXplKCZuZXdfZGVzYykpOwotICAgIGlmIChuZXdfZGVzYy5wdHIgPT0gTlVMTCkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZjdXJfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV6ZCk6IGRsbWFsbG9jKCV1KSBmYWlsZWQgb24gIiwKLSAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzLAotICAgICAgICAgICAgICAgICAgbWFsbG9jZGVzY19hbGxvY19zaXplKCZuZXdfZGVzYykpOworICAgIHNpemVfdCBuZXdfc2l6ZSA9IG1hbGxvY2Rlc2NfYWxsb2Nfc2l6ZSgmbmV3X2Rlc2MpOworICAgIGlmIChuZXdfc2l6ZSA8IGJ5dGVzKSB7IC8vIE92ZXJmbG93CisgICAgICAgIHFlbXVfZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlenUpOiBtYWxsb2MoJXp1KSBmYWlsZWQgZHVlIHRvIG92ZXJmbG93IiwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMsIG5ld19zaXplKTsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXQgPSBtYWxsb2NkZXNjX3VzZXJfcHRyKCZuZXdfZGVzYyk7CisgICAgbmV3X2Rlc2MucHRyID0gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvYyhuZXdfc2l6ZSk7CisgICAgaWYgKG5ld19kZXNjLnB0ciA9PSBOVUxMKSB7CisgICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmN1cl9kZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXp1KTogbWFsbG9jKCV6dSkgZmFpbGVkIG9uICIsCisgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtLCBieXRlcywgbmV3X3NpemUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdm9pZCogbmV3X21lbSA9IG1hbGxvY2Rlc2NfdXNlcl9wdHIoJm5ld19kZXNjKTsKIAogICAgIC8vIENvcHkgdXNlciBkYXRhIGZyb20gb2xkIGJsb2NrIHRvIHRoZSBuZXcgb25lLgotICAgIHRvX2NvcHkgPSBieXRlcyA8IGN1cl9kZXNjLnJlcXVlc3RlZF9ieXRlcyA/IGJ5dGVzIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfZGVzYy5yZXF1ZXN0ZWRfYnl0ZXM7CisgICAgc2l6ZV90IHRvX2NvcHkgPSBieXRlcyA8IGN1cl9kZXNjLnJlcXVlc3RlZF9ieXRlcyA/IGJ5dGVzIDogY3VyX2Rlc2MucmVxdWVzdGVkX2J5dGVzOwogICAgIGlmICh0b19jb3B5ICE9IDApIHsKLSAgICAgICAgbWVtY3B5KHJldCwgbWFsbG9jZGVzY191c2VyX3B0cigmY3VyX2Rlc2MpLCB0b19jb3B5KTsKKyAgICAgICAgbWVtY3B5KG5ld19tZW0sIG1hbGxvY2Rlc2NfdXNlcl9wdHIoJmN1cl9kZXNjKSwgdG9fY29weSk7CiAgICAgfQogCiAgICAgLy8gUmVnaXN0ZXIgbmV3IGJsb2NrIHdpdGggZW11bGF0b3IuCiAgICAgaWYgKG5vdGlmeV9xZW11X21hbGxvYygmbmV3X2Rlc2MpKSB7Ci0gICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJm5ld19kZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXpkKSBub3RpZnlfbWFsbG9jIGZhaWxlZCAtPiAiLAorICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZuZXdfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV6dSkgbm90aWZ5X21hbGxvYyBmYWlsZWQgLT4gIiwKICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzKTsKICAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmY3VyX2Rlc2MsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0gIik7Ci0gICAgICAgIGRsZnJlZShuZXdfZGVzYy5wdHIpOworICAgICAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShuZXdfZGVzYy5wdHIpOworICAgICAgICBlcnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC05MDgsMjEgKzk0MCwyMiBAQAogCiAgICAgLy8gRnJlZSBvbGQgYmxvY2suCiAgICAgaWYgKG5vdGlmeV9xZW11X2ZyZWUobWVtKSkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZjdXJfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV6ZCk6IG5vdGlmeV9mcmVlIGZhaWxlZCBmb3IgIiwKKyAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmY3VyX2Rlc2MsICI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlenUpOiBub3RpZnlfZnJlZSBmYWlsZWQgZm9yICIsCiAgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtLCBieXRlcyk7CiAgICAgICAgIC8qIFNpbmNlIHdlIHJlZ2lzdGVyZWQgbmV3IGRlY3JpcHRvciB3aXRoIHRoZSBlbXVsYXRvciwgd2UgbmVlZAogICAgICAgICAgKiB0byB1bnJlZ2lzdGVyIGl0IGJlZm9yZSBmcmVlaW5nIG5ld2x5IGFsbG9jYXRlZCBibG9jay4gKi8KICAgICAgICAgbm90aWZ5X3FlbXVfZnJlZShtYWxsb2NkZXNjX3VzZXJfcHRyKCZuZXdfZGVzYykpOwotICAgICAgICBkbGZyZWUobmV3X2Rlc2MucHRyKTsKKyAgICAgICAgZ19tYWxsb2NfZGlzcGF0Y2gtPmZyZWUobmV3X2Rlc2MucHRyKTsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBkbGZyZWUoY3VyX2Rlc2MucHRyKTsKKyAgICBnX21hbGxvY19kaXNwYXRjaC0+ZnJlZShjdXJfZGVzYy5wdHIpOwogCi0gICAgbG9nX21kZXNjKGluZm8sICZuZXdfZGVzYywgIj09PSA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlemQpIC0+ICIsCisgICAgbG9nX21kZXNjKGluZm8sICZuZXdfZGVzYywgIj09PSA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAlenUpIC0+ICIsCiAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzKTsKICAgICBsb2dfbWRlc2MoaW5mbywgJmN1cl9kZXNjLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LSAiKTsKIAotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIG5ld19tZW07CiB9CiAKIC8qIFRoaXMgcm91dGluZSBzZXJ2ZXMgYXMgZW50cnkgcG9pbnQgZm9yICdtZW1hbGlnbicuCkBAIC05MzMsMzAgKzk2Niw0MCBAQAogCiAgICAgaWYgKGJ5dGVzID09IDApIHsKICAgICAgICAgLy8gSnVzdCBsZXQgZ28gemVybyBieXRlcyBhbGxvY2F0aW9uLgotICAgICAgICBxZW11X2luZm9fbG9nKCI6OjogPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogbWVtYWxpZ24oJXp4LCAlemQpIHJlZGlyIHRvIG1hbGxvYyIsCisgICAgICAgIHFlbXVfaW5mb19sb2coIjo6OiA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiBtZW1hbGlnbiglengsICV6dSkgcmVkaXIgdG8gbWFsbG9jIiwKICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGFsaWdubWVudCwgYnl0ZXMpOwogICAgICAgICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jKDApOwogICAgIH0KIAotICAgIC8qIFByZWZpeCBzaXplIGZvciBhbGlnbmVkIGFsbG9jYXRpb24gbXVzdCBiZSBlcXVhbCB0byB0aGUgYWxpZ25tZW50IHVzZWQKLSAgICAgKiBmb3IgYWxsb2NhdGlvbiBpbiBvcmRlciB0byBlbnN1cmUgcHJvcGVyIGFsaWdubWVudCBvZiB0aGUgcmV0dXJuZWQKLSAgICAgKiBwb2ludGVyLCBpbiBjYXNlIHRoYXQgYWxpZ25tZW50IHJlcXVpcmVtZW50IGlzIGdyZWF0ZXIgdGhhbiBwcmVmaXgKLSAgICAgKiBzaXplLiAqLwotICAgIGRlc2MucHJlZml4X3NpemUgPSBhbGlnbm1lbnQgPiBERUZBVUxUX1BSRUZJWF9TSVpFID8gYWxpZ25tZW50IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfUFJFRklYX1NJWkU7CisgICAgLy8gUHJlZml4IHNpemUgZm9yIGFsaWduZWQgYWxsb2NhdGlvbiBtdXN0IGJlIGVxdWFsIHRvIHRoZSBhbGlnbm1lbnQgdXNlZAorICAgIC8vIGZvciBhbGxvY2F0aW9uIGluIG9yZGVyIHRvIGVuc3VyZSBwcm9wZXIgYWxpZ25tZW50IG9mIHRoZSByZXR1cm5lZAorICAgIC8vIHBvaW50ZXIuIGluIGNhc2UgdGhhdCBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgaXMgZ3JlYXRlciB0aGFuIHByZWZpeAorICAgIC8vIHNpemUuCisgICAgaWYgKGFsaWdubWVudCA8IERFRkFVTFRfUFJFRklYX1NJWkUpIHsKKyAgICAgICAgYWxpZ25tZW50ID0gREVGQVVMVF9QUkVGSVhfU0laRTsKKyAgICB9IGVsc2UgaWYgKCFwb3dlcm9mMihhbGlnbm1lbnQpKSB7CisgICAgICAgIGFsaWdubWVudCA9IEJJT05JQ19ST1VORF9VUF9QT1dFUl9PRl8yKGFsaWdubWVudCk7CisgICAgfQorICAgIGRlc2MucHJlZml4X3NpemUgPSBhbGlnbm1lbnQ7CiAgICAgZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPSBieXRlczsKICAgICBkZXNjLnN1ZmZpeF9zaXplID0gREVGQVVMVF9TVUZGSVhfU0laRTsKLSAgICBkZXNjLnB0ciA9IGRsbWVtYWxpZ24oZGVzYy5wcmVmaXhfc2l6ZSwgbWFsbG9jZGVzY19hbGxvY19zaXplKCZkZXNjKSk7CisgICAgc2l6ZV90IHNpemUgPSBtYWxsb2NkZXNjX2FsbG9jX3NpemUoJmRlc2MpOworICAgIGlmIChzaXplIDwgYnl0ZXMpIHsgLy8gT3ZlcmZsb3cKKyAgICAgICAgcWVtdV9lcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gbWVtYWxpZ24oJXp4LCAlenUpOiBtYWxsb2MoJXp1KSBmYWlsZWQgZHVlIHRvIG92ZXJmbG93LiIsCisgICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBhbGlnbm1lbnQsIGJ5dGVzLCBzaXplKTsKKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZGVzYy5wdHIgPSBnX21hbGxvY19kaXNwYXRjaC0+bWVtYWxpZ24oZGVzYy5wcmVmaXhfc2l6ZSwgc2l6ZSk7CiAgICAgaWYgKGRlc2MucHRyID09IE5VTEwpIHsKLSAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IG1lbWFsaWduKCV6eCwgJXpkKTogZGxtYWxsb2MoJXUpIGZhaWxlZC4iLAotICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGFsaWdubWVudCwgYnl0ZXMsCi0gICAgICAgICAgICAgICAgICBtYWxsb2NkZXNjX2FsbG9jX3NpemUoJmRlc2MpKTsKKyAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IG1lbWFsaWduKCV6eCwgJXp1KTogbWFsbG9jKCV6dSkgZmFpbGVkLiIsCisgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgYWxpZ25tZW50LCBieXRlcywgc2l6ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAobm90aWZ5X3FlbXVfbWFsbG9jKCZkZXNjKSkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZkZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogbWVtYWxpZ24oJXp4LCAlemQpOiBub3RpZnlfbWFsbG9jIGZhaWxlZCBmb3IgIiwKKyAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IG1lbWFsaWduKCV6eCwgJXp1KTogbm90aWZ5X21hbGxvYyBmYWlsZWQgZm9yICIsCiAgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgYWxpZ25tZW50LCBieXRlcyk7Ci0gICAgICAgIGRsZnJlZShkZXNjLnB0cik7CisgICAgICAgIGdfbWFsbG9jX2Rpc3BhdGNoLT5mcmVlKGRlc2MucHRyKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC05NjQsNyArMTAwNyw3IEBACiAgICAgdGVzdF9hY2Nlc3NfdmlvbGF0aW9uKCZkZXNjKTsKICNlbmRpZiAgLy8gVEVTVF9BQ0NFU1NfVklPTEFUSU9OUwogCi0gICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiQEBAIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gbWVtYWxpZ24oJXp4LCAlemQpIC0+ICIsCisgICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiQEBAIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gbWVtYWxpZ24oJXp4LCAlenUpIC0+ICIsCiAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBhbGlnbm1lbnQsIGJ5dGVzKTsKICAgICByZXR1cm4gbWFsbG9jZGVzY191c2VyX3B0cigmZGVzYyk7CiB9CkBAIC05OTIsMyArMTAzNSwzNCBAQAogICAgIC8qIGR1cmluZyBpbnN0cnVtZW50YXRpb24sIHdlIGNhbid0IHJlYWxseSByZXBvcnQgYW55dGhpbmcgbW9yZSB0aGFuIHJlcXVlc3RlZF9ieXRlcyAqLwogICAgIHJldHVybiBjdXJfZGVzYy5yZXF1ZXN0ZWRfYnl0ZXM7CiB9CisKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxpbmZvKCkgeworICByZXR1cm4gZ19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxpbmZvKCk7Cit9CisKK2V4dGVybiAiQyIgaW50IHFlbXVfaW5zdHJ1bWVudGVkX3Bvc2l4X21lbWFsaWduKHZvaWQqKiBtZW1wdHIsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKSB7CisgIGlmICgoYWxpZ25tZW50ICYgKGFsaWdubWVudCAtIDEpKSAhPSAwKSB7CisgICAgcWVtdV9lcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gcG9zaXhfbWVtYWxpZ24oJXAsICV6dSwgJXp1KTogaW52YWxpZCBhbGlnbm1lbnQuIiwKKyAgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtcHRyLCBhbGlnbm1lbnQsIHNpemUpOworICAgIHJldHVybiBFSU5WQUw7CisgIH0KKyAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisgICptZW1wdHIgPSBxZW11X2luc3RydW1lbnRlZF9tZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOworICBlcnJubyA9IHNhdmVkX2Vycm5vOworICByZXR1cm4gKCptZW1wdHIgIT0gTlVMTCkgPyAwIDogRU5PTUVNOworfQorCitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX3B2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgIHNpemVfdCBzaXplID0gQklPTklDX0FMSUdOKGJ5dGVzLCBwYWdlc2l6ZSk7CisgIGlmIChzaXplIDwgYnl0ZXMpIHsgLy8gT3ZlcmZsb3cKKyAgICBxZW11X2Vycm9yX2xvZygiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBwdmFsbG9jKCV6dSk6IG92ZXJmbG93ICglenUpLiIsCisgICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGJ5dGVzLCBzaXplKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24ocGFnZXNpemUsIHNpemUpOworfQorCitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX3ZhbGxvYyhzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24oZ2V0cGFnZXNpemUoKSwgc2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tYnJ0b2MxNi5jcHAgYi9saWJjL2Jpb25pYy9tYnJ0b2MxNi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3OGExMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL21icnRvYzE2LmNwcApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVjaGFyLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21ic3RhdGUuaCIKKworc3RhdGljIGlubGluZSBib29sIG1ic3BhcnRpYWxjMTYoY29uc3QgbWJzdGF0ZV90KiBzdGF0ZSkgeworICByZXR1cm4gbWJzdGF0ZV9nZXRfYnl0ZShzdGF0ZSwgMykgIT0gMDsKK30KKworc3RhdGljIHNpemVfdCBiZWdpbl9zdXJyb2dhdGUoY2hhcjMyX3QgYzMyLCBjaGFyMTZfdCogcGMxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuY29udiwgbWJzdGF0ZV90KiBzdGF0ZSkgeworICBjMzIgLT0gMHgxMDAwMDsKKyAgY2hhcjE2X3QgdHJhaWwgPSAoYzMyICYgMHgzZmYpIHwgMHhkYzAwOworCisgIG1ic3RhdGVfc2V0X2J5dGUoc3RhdGUsIDAsIHRyYWlsICYgMHgwMGZmKTsKKyAgbWJzdGF0ZV9zZXRfYnl0ZShzdGF0ZSwgMSwgKHRyYWlsICYgMHhmZjAwKSA+PiA4KTsKKyAgbWJzdGF0ZV9zZXRfYnl0ZShzdGF0ZSwgMywgbmNvbnYgJiAweGZmKTsKKworICAqcGMxNiA9ICgoYzMyICYgMHhmZmMwMCkgPj4gMTApIHwgMHhkODAwOworICAvLyBEZWZpbmVkIGJ5IFBPU0lYIGFzIHJldHVybiB2YWx1ZSBmb3IgZmlyc3Qgc3Vycm9nYXRlIGNoYXJhY3Rlci4KKyAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oLTMpOworfQorCitzdGF0aWMgc2l6ZV90IGZpbmlzaF9zdXJyb2dhdGUoY2hhcjE2X3QqIHBjMTYsIG1ic3RhdGVfdCogc3RhdGUpIHsKKyAgY2hhcjE2X3QgdHJhaWwgPSBtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAxKSA8PCA4IHwKKyAgICAgICAgICAgICAgICAgICBtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAwKTsKKyAgKnBjMTYgPSB0cmFpbDsKKyAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm4obWJzdGF0ZV9nZXRfYnl0ZShzdGF0ZSwgMyksIHN0YXRlKTsKK30KKworc2l6ZV90IG1icnRvYzE2KGNoYXIxNl90KiBwYzE2LCBjb25zdCBjaGFyKiBzLCBzaXplX3QgbiwgbWJzdGF0ZV90KiBwcykgeworICBzdGF0aWMgbWJzdGF0ZV90IF9fcHJpdmF0ZV9zdGF0ZTsKKyAgbWJzdGF0ZV90KiBzdGF0ZSA9IChwcyA9PSBOVUxMKSA/ICZfX3ByaXZhdGVfc3RhdGUgOiBwczsKKworICBjaGFyMTZfdCBfX3ByaXZhdGVfcGMxNjsKKyAgaWYgKHBjMTYgPT0gTlVMTCkgeworICAgIHBjMTYgPSAmX19wcml2YXRlX3BjMTY7CisgIH0KKworICBpZiAobWJzcGFydGlhbGMxNihzdGF0ZSkpIHsKKyAgICByZXR1cm4gZmluaXNoX3N1cnJvZ2F0ZShwYzE2LCBzdGF0ZSk7CisgIH0KKworICBjaGFyMzJfdCBjMzI7CisgIHNpemVfdCBuY29udiA9IG1icnRvYzMyKCZjMzIsIHMsIG4sIHN0YXRlKTsKKyAgaWYgKF9fTUJfSVNfRVJSKG5jb252KSkgeworICAgIHJldHVybiBuY29udjsKKyAgfSBlbHNlIGlmIChuY29udiA9PSAwKSB7CisgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm4obmNvbnYsIHN0YXRlKTsKKyAgfSBlbHNlIGlmIChjMzIgPiAweDEwZmZmZikgeworICAgIC8vIElucHV0IGNhbm5vdCBiZSBlbmNvZGVkIGFzIFVURi0xNi4KKyAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKEVJTFNFUSwgc3RhdGUpOworICB9IGVsc2UgaWYgKGMzMiA8IDB4MTAwMDApIHsKKyAgICAqcGMxNiA9IHN0YXRpY19jYXN0PGNoYXIxNl90PihjMzIpOworICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuKG5jb252LCBzdGF0ZSk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGJlZ2luX3N1cnJvZ2F0ZShjMzIsIHBjMTYsIG5jb252LCBzdGF0ZSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21icnRvYzMyLmNwcCBiL2xpYmMvYmlvbmljL21icnRvYzMyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDQwZWNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbWJydG9jMzIuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHVjaGFyLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21ic3RhdGUuaCIKKworc2l6ZV90IG1icnRvYzMyKGNoYXIzMl90KiBwYzMyLCBjb25zdCBjaGFyKiBzLCBzaXplX3QgbiwgbWJzdGF0ZV90KiBwcykgeworICBzdGF0aWMgbWJzdGF0ZV90IF9fcHJpdmF0ZV9zdGF0ZTsKKyAgbWJzdGF0ZV90KiBzdGF0ZSA9IChwcyA9PSBOVUxMKSA/ICZfX3ByaXZhdGVfc3RhdGUgOiBwczsKKworICAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IHRvIGEgc3RhdGUgd2hpY2ggaGFzIGFsbCA0IGJ5dGVzIG9mIHRoZSBzZXF1ZW5jZSBzZXQuCisgIC8vIEZ1bGwgc3RhdGUgdmVyaWZpY2F0aW9uIGlzIGRvbmUgd2hlbiBkZWNvZGluZyB0aGUgc2VxdWVuY2UgKGFmdGVyIHdlIGhhdmUKKyAgLy8gYWxsIHRoZSBieXRlcykuCisgIGlmIChtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAzKSAhPSAwKSB7CisgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSU5WQUwsIHN0YXRlKTsKKyAgfQorCisgIGlmIChzID09IE5VTEwpIHsKKyAgICBzID0gIiI7CisgICAgbiA9IDE7CisgICAgcGMzMiA9IE5VTEw7CisgIH0KKworICBpZiAobiA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICB1aW50OF90IGNoOworICBpZiAobWJzaW5pdChzdGF0ZSkgJiYgKCgoY2ggPSBzdGF0aWNfY2FzdDx1aW50OF90PigqcykpICYgfjB4N2YpID09IDApKSB7CisgICAgLy8gRmFzdCBwYXRoIGZvciBwbGFpbiBBU0NJSSBjaGFyYWN0ZXJzLgorICAgIGlmIChwYzMyICE9IE5VTEwpIHsKKyAgICAgICpwYzMyID0gY2g7CisgICAgfQorICAgIHJldHVybiAoY2ggIT0gJ1wwJyA/IDEgOiAwKTsKKyAgfQorCisgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIG9jdGV0cyB0aGF0IG1ha2UgdXAgdGhpcyBjaGFyYWN0ZXIKKyAgLy8gZnJvbSB0aGUgZmlyc3Qgb2N0ZXQsIGFuZCBhIG1hc2sgdGhhdCBleHRyYWN0cyB0aGUKKyAgLy8gaW50ZXJlc3RpbmcgYml0cyBvZiB0aGUgZmlyc3Qgb2N0ZXQuIFdlIGFscmVhZHkga25vdworICAvLyB0aGUgY2hhcmFjdGVyIGlzIGF0IGxlYXN0IHR3byBieXRlcyBsb25nLgorICBzaXplX3QgbGVuZ3RoOworICBpbnQgbWFzazsKKworICAvLyBXZSBhbHNvIHNwZWNpZnkgYSBsb3dlciBib3VuZCBmb3IgdGhlIGNoYXJhY3RlciBjb2RlIHRvCisgIC8vIGRldGVjdCByZWR1bmRhbnQsIG5vbi0ic2hvcnRlc3QgZm9ybSIgZW5jb2RpbmdzLiBGb3IKKyAgLy8gZXhhbXBsZSwgdGhlIHNlcXVlbmNlIEMwIDgwIGlzIF9ub3RfIGEgbGVnYWwgcmVwcmVzZW50YXRpb24KKyAgLy8gb2YgdGhlIG51bGwgY2hhcmFjdGVyLiBUaGlzIGVuZm9yY2VzIGEgMS10by0xIG1hcHBpbmcKKyAgLy8gYmV0d2VlbiBjaGFyYWN0ZXIgY29kZXMgYW5kIHRoZWlyIG11bHRpYnl0ZSByZXByZXNlbnRhdGlvbnMuCisgIGNoYXIzMl90IGxvd2VyX2JvdW5kOworCisgIC8vIFRoZSBmaXJzdCBieXRlIGluIHRoZSBzdGF0ZSAoaWYgYW55KSB0ZWxscyB0aGUgbGVuZ3RoLgorICBzaXplX3QgYnl0ZXNfc29fZmFyID0gbWJzdGF0ZV9ieXRlc19zb19mYXIoc3RhdGUpOworICBjaCA9IGJ5dGVzX3NvX2ZhciA+IDAgPyBtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAwKSA6IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCpzKTsKKyAgaWYgKChjaCAmIDB4ODApID09IDApIHsKKyAgICBtYXNrID0gMHg3ZjsKKyAgICBsZW5ndGggPSAxOworICAgIGxvd2VyX2JvdW5kID0gMDsKKyAgfSBlbHNlIGlmICgoY2ggJiAweGUwKSA9PSAweGMwKSB7CisgICAgbWFzayA9IDB4MWY7CisgICAgbGVuZ3RoID0gMjsKKyAgICBsb3dlcl9ib3VuZCA9IDB4ODA7CisgIH0gZWxzZSBpZiAoKGNoICYgMHhmMCkgPT0gMHhlMCkgeworICAgIG1hc2sgPSAweDBmOworICAgIGxlbmd0aCA9IDM7CisgICAgbG93ZXJfYm91bmQgPSAweDgwMDsKKyAgfSBlbHNlIGlmICgoY2ggJiAweGY4KSA9PSAweGYwKSB7CisgICAgbWFzayA9IDB4MDc7CisgICAgbGVuZ3RoID0gNDsKKyAgICBsb3dlcl9ib3VuZCA9IDB4MTAwMDA7CisgIH0gZWxzZSB7CisgICAgLy8gTWFsZm9ybWVkIGlucHV0OyBpbnB1dCBpcyBub3QgVVRGLTguIFNlZSBSRkMgMzYyOS4KKyAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKEVJTFNFUSwgc3RhdGUpOworICB9CisKKyAgLy8gRmlsbCBpbiB0aGUgc3RhdGUuCisgIHNpemVfdCBieXRlc193YW50ZWQgPSBsZW5ndGggLSBieXRlc19zb19mYXI7CisgIHNpemVfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgTUlOKGJ5dGVzX3dhbnRlZCwgbik7IGkrKykgeworICAgIGlmICghbWJzaW5pdChzdGF0ZSkgJiYgKCgqcyAmIDB4YzApICE9IDB4ODApKSB7CisgICAgICAvLyBNYWxmb3JtZWQgaW5wdXQ7IGJhZCBjaGFyYWN0ZXJzIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFyYWN0ZXIuCisgICAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKEVJTFNFUSwgc3RhdGUpOworICAgIH0KKyAgICBtYnN0YXRlX3NldF9ieXRlKHN0YXRlLCBieXRlc19zb19mYXIgKyBpLCAqcysrKTsKKyAgfQorICBpZiAoaSA8IGJ5dGVzX3dhbnRlZCkgeworICAgIHJldHVybiBfX01CX0VSUl9JTkNPTVBMRVRFX1NFUVVFTkNFOworICB9CisKKyAgLy8gRGVjb2RlIHRoZSBvY3RldCBzZXF1ZW5jZSByZXByZXNlbnRpbmcgdGhlIGNoYXJhY3RlciBpbiBjaHVua3MKKyAgLy8gb2YgNiBiaXRzLCBtb3N0IHNpZ25pZmljYW50IGZpcnN0LgorICBjaGFyMzJfdCBjMzIgPSBtYnN0YXRlX2dldF9ieXRlKHN0YXRlLCAwKSAmIG1hc2s7CisgIGZvciAoaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgeworICAgIGMzMiA8PD0gNjsKKyAgICBjMzIgfD0gbWJzdGF0ZV9nZXRfYnl0ZShzdGF0ZSwgaSkgJiAweDNmOworICB9CisKKyAgaWYgKGMzMiA8IGxvd2VyX2JvdW5kKSB7CisgICAgLy8gTWFsZm9ybWVkIGlucHV0OyByZWR1bmRhbnQgZW5jb2RpbmcuCisgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSUxTRVEsIHN0YXRlKTsKKyAgfQorICBpZiAoKGMzMiA+PSAweGQ4MDAgJiYgYzMyIDw9IDB4ZGZmZikgfHwgYzMyID09IDB4ZmZmZSB8fCBjMzIgPT0gMHhmZmZmKSB7CisgICAgLy8gTWFsZm9ybWVkIGlucHV0OyBpbnZhbGlkIGNvZGUgcG9pbnRzLgorICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuX2lsbGVnYWwoRUlMU0VRLCBzdGF0ZSk7CisgIH0KKyAgaWYgKHBjMzIgIT0gTlVMTCkgeworICAgICpwYzMyID0gYzMyOworICB9CisgIHJldHVybiByZXNldF9hbmRfcmV0dXJuKGMzMiA9PSBVJ1wwJyA/IDAgOiBieXRlc193YW50ZWQsIHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21ic3RhdGUuY3BwIGIvbGliYy9iaW9uaWMvbWJzdGF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzMjdkOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL21ic3RhdGUuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21ic3RhdGUuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisKK19fTElCQ19ISURERU5fXyBzaXplX3QgbWJzdGF0ZV9ieXRlc19zb19mYXIoY29uc3QgbWJzdGF0ZV90KiBwcykgeworICByZXR1cm4KKyAgICAocHMtPl9fc2VxWzJdICE9IDApID8gMyA6CisgICAgKHBzLT5fX3NlcVsxXSAhPSAwKSA/IDIgOgorICAgIChwcy0+X19zZXFbMF0gIT0gMCkgPyAxIDogMDsKK30KKworX19MSUJDX0hJRERFTl9fIHZvaWQgbWJzdGF0ZV9zZXRfYnl0ZShtYnN0YXRlX3QqIHBzLCBpbnQgaSwgY2hhciBieXRlKSB7CisgIHBzLT5fX3NlcVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGJ5dGUpOworfQorCitfX0xJQkNfSElEREVOX18gdWludDhfdCBtYnN0YXRlX2dldF9ieXRlKGNvbnN0IG1ic3RhdGVfdCogcHMsIGludCBuKSB7CisgIHJldHVybiBwcy0+X19zZXFbbl07Cit9CisKK19fTElCQ19ISURERU5fXyBzaXplX3QgcmVzZXRfYW5kX3JldHVybl9pbGxlZ2FsKGludCBfZXJybm8sIG1ic3RhdGVfdCogcHMpIHsKKyAgZXJybm8gPSBfZXJybm87CisgICoocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHBzLT5fX3NlcSkpID0gMDsKKyAgcmV0dXJuIF9fTUJfRVJSX0lMTEVHQUxfU0VRVUVOQ0U7Cit9CisKK19fTElCQ19ISURERU5fXyBzaXplX3QgcmVzZXRfYW5kX3JldHVybihpbnQgX3JldHVybiwgbWJzdGF0ZV90KiBwcykgeworICAqKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihwcy0+X19zZXEpKSA9IDA7CisgIHJldHVybiBfcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWQ1LmMgYi9saWJjL2Jpb25pYy9tZDUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE0YWFlZC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9tZDUuYworKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk1IC0gMjAwMSBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KLSAqIChSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnN0aXR1dGUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotCi1fX1JDU0lEKCIkSGVpbWRhbDogbWQ1LmMsdiAxLjE1IDIwMDEvMDEvMjkgMDQ6MzM6NDQgYXNzYXIgRXhwICQiCi0gICAgICAgICIkTmV0QlNEOiBtZDUuYyx2IDEuMS4xLjQgMjAwMi8wOS8xMiAxMjo0MTo0MiBqb2RhIEV4cCAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGVuZGlhbi5oPgotI2luY2x1ZGUgIm1kNS5oIgotI2luY2x1ZGUgImhhc2guaCIKLQotI2RlZmluZSBBIG0tPmNvdW50ZXJbMF0KLSNkZWZpbmUgQiBtLT5jb3VudGVyWzFdCi0jZGVmaW5lIEMgbS0+Y291bnRlclsyXQotI2RlZmluZSBEIG0tPmNvdW50ZXJbM10KLSNkZWZpbmUgWCBkYXRhCi0KLXZvaWQKLU1ENV9Jbml0IChzdHJ1Y3QgbWQ1ICptKQotewotICBtLT5zelswXSA9IDA7Ci0gIG0tPnN6WzFdID0gMDsKLSAgRCA9IDB4MTAzMjU0NzY7Ci0gIEMgPSAweDk4YmFkY2ZlOwotICBCID0gMHhlZmNkYWI4OTsKLSAgQSA9IDB4Njc0NTIzMDE7Ci19Ci0KLSNkZWZpbmUgRih4LHkseikgQ1JBWUZJWCgoeCAmIHkpIHwgKH54ICYgeikpCi0jZGVmaW5lIEcoeCx5LHopIENSQVlGSVgoKHggJiB6KSB8ICh5ICYgfnopKQotI2RlZmluZSBIKHgseSx6KSAoeCBeIHkgXiB6KQotI2RlZmluZSBJKHgseSx6KSBDUkFZRklYKHkgXiAoeCB8IH56KSkKLQotI2RlZmluZSBET0lUKGEsYixjLGQsayxzLGksT1ApIFwKLWEgPSBiICsgY3NoaWZ0KGEgKyBPUChiLGMsZCkgKyBYW2tdICsgKGkpLCBzKQotCi0jZGVmaW5lIERPMShhLGIsYyxkLGsscyxpKSBET0lUKGEsYixjLGQsayxzLGksRikKLSNkZWZpbmUgRE8yKGEsYixjLGQsayxzLGkpIERPSVQoYSxiLGMsZCxrLHMsaSxHKQotI2RlZmluZSBETzMoYSxiLGMsZCxrLHMsaSkgRE9JVChhLGIsYyxkLGsscyxpLEgpCi0jZGVmaW5lIERPNChhLGIsYyxkLGsscyxpKSBET0lUKGEsYixjLGQsayxzLGksSSkKLQotc3RhdGljIGlubGluZSB2b2lkCi1jYWxjIChzdHJ1Y3QgbWQ1ICptLCB1X2ludDMyX3QgKmRhdGEpCi17Ci0gIHVfaW50MzJfdCBBQSwgQkIsIENDLCBERDsKLQotICBBQSA9IEE7Ci0gIEJCID0gQjsKLSAgQ0MgPSBDOwotICBERCA9IEQ7Ci0KLSAgLyogUm91bmQgMSAqLwotCi0gIERPMShBLEIsQyxELDAsNywweGQ3NmFhNDc4KTsKLSAgRE8xKEQsQSxCLEMsMSwxMiwweGU4YzdiNzU2KTsKLSAgRE8xKEMsRCxBLEIsMiwxNywweDI0MjA3MGRiKTsKLSAgRE8xKEIsQyxELEEsMywyMiwweGMxYmRjZWVlKTsKLQotICBETzEoQSxCLEMsRCw0LDcsMHhmNTdjMGZhZik7Ci0gIERPMShELEEsQixDLDUsMTIsMHg0Nzg3YzYyYSk7Ci0gIERPMShDLEQsQSxCLDYsMTcsMHhhODMwNDYxMyk7Ci0gIERPMShCLEMsRCxBLDcsMjIsMHhmZDQ2OTUwMSk7Ci0KLSAgRE8xKEEsQixDLEQsOCw3LDB4Njk4MDk4ZDgpOwotICBETzEoRCxBLEIsQyw5LDEyLDB4OGI0NGY3YWYpOwotICBETzEoQyxELEEsQiwxMCwxNywweGZmZmY1YmIxKTsKLSAgRE8xKEIsQyxELEEsMTEsMjIsMHg4OTVjZDdiZSk7Ci0KLSAgRE8xKEEsQixDLEQsMTIsNywweDZiOTAxMTIyKTsKLSAgRE8xKEQsQSxCLEMsMTMsMTIsMHhmZDk4NzE5Myk7Ci0gIERPMShDLEQsQSxCLDE0LDE3LDB4YTY3OTQzOGUpOwotICBETzEoQixDLEQsQSwxNSwyMiwweDQ5YjQwODIxKTsKLQotICAvKiBSb3VuZCAyICovCi0KLSAgRE8yKEEsQixDLEQsMSw1LDB4ZjYxZTI1NjIpOwotICBETzIoRCxBLEIsQyw2LDksMHhjMDQwYjM0MCk7Ci0gIERPMihDLEQsQSxCLDExLDE0LDB4MjY1ZTVhNTEpOwotICBETzIoQixDLEQsQSwwLDIwLDB4ZTliNmM3YWEpOwotCi0gIERPMihBLEIsQyxELDUsNSwweGQ2MmYxMDVkKTsKLSAgRE8yKEQsQSxCLEMsMTAsOSwweDI0NDE0NTMpOwotICBETzIoQyxELEEsQiwxNSwxNCwweGQ4YTFlNjgxKTsKLSAgRE8yKEIsQyxELEEsNCwyMCwweGU3ZDNmYmM4KTsKLQotICBETzIoQSxCLEMsRCw5LDUsMHgyMWUxY2RlNik7Ci0gIERPMihELEEsQixDLDE0LDksMHhjMzM3MDdkNik7Ci0gIERPMihDLEQsQSxCLDMsMTQsMHhmNGQ1MGQ4Nyk7Ci0gIERPMihCLEMsRCxBLDgsMjAsMHg0NTVhMTRlZCk7Ci0KLSAgRE8yKEEsQixDLEQsMTMsNSwweGE5ZTNlOTA1KTsKLSAgRE8yKEQsQSxCLEMsMiw5LDB4ZmNlZmEzZjgpOwotICBETzIoQyxELEEsQiw3LDE0LDB4Njc2ZjAyZDkpOwotICBETzIoQixDLEQsQSwxMiwyMCwweDhkMmE0YzhhKTsKLQotICAvKiBSb3VuZCAzICovCi0KLSAgRE8zKEEsQixDLEQsNSw0LDB4ZmZmYTM5NDIpOwotICBETzMoRCxBLEIsQyw4LDExLDB4ODc3MWY2ODEpOwotICBETzMoQyxELEEsQiwxMSwxNiwweDZkOWQ2MTIyKTsKLSAgRE8zKEIsQyxELEEsMTQsMjMsMHhmZGU1MzgwYyk7Ci0KLSAgRE8zKEEsQixDLEQsMSw0LDB4YTRiZWVhNDQpOwotICBETzMoRCxBLEIsQyw0LDExLDB4NGJkZWNmYTkpOwotICBETzMoQyxELEEsQiw3LDE2LDB4ZjZiYjRiNjApOwotICBETzMoQixDLEQsQSwxMCwyMywweGJlYmZiYzcwKTsKLQotICBETzMoQSxCLEMsRCwxMyw0LDB4Mjg5YjdlYzYpOwotICBETzMoRCxBLEIsQywwLDExLDB4ZWFhMTI3ZmEpOwotICBETzMoQyxELEEsQiwzLDE2LDB4ZDRlZjMwODUpOwotICBETzMoQixDLEQsQSw2LDIzLDB4NDg4MWQwNSk7Ci0KLSAgRE8zKEEsQixDLEQsOSw0LDB4ZDlkNGQwMzkpOwotICBETzMoRCxBLEIsQywxMiwxMSwweGU2ZGI5OWU1KTsKLSAgRE8zKEMsRCxBLEIsMTUsMTYsMHgxZmEyN2NmOCk7Ci0gIERPMyhCLEMsRCxBLDIsMjMsMHhjNGFjNTY2NSk7Ci0KLSAgLyogUm91bmQgNCAqLwotCi0gIERPNChBLEIsQyxELDAsNiwweGY0MjkyMjQ0KTsKLSAgRE80KEQsQSxCLEMsNywxMCwweDQzMmFmZjk3KTsKLSAgRE80KEMsRCxBLEIsMTQsMTUsMHhhYjk0MjNhNyk7Ci0gIERPNChCLEMsRCxBLDUsMjEsMHhmYzkzYTAzOSk7Ci0KLSAgRE80KEEsQixDLEQsMTIsNiwweDY1NWI1OWMzKTsKLSAgRE80KEQsQSxCLEMsMywxMCwweDhmMGNjYzkyKTsKLSAgRE80KEMsRCxBLEIsMTAsMTUsMHhmZmVmZjQ3ZCk7Ci0gIERPNChCLEMsRCxBLDEsMjEsMHg4NTg0NWRkMSk7Ci0KLSAgRE80KEEsQixDLEQsOCw2LDB4NmZhODdlNGYpOwotICBETzQoRCxBLEIsQywxNSwxMCwweGZlMmNlNmUwKTsKLSAgRE80KEMsRCxBLEIsNiwxNSwweGEzMDE0MzE0KTsKLSAgRE80KEIsQyxELEEsMTMsMjEsMHg0ZTA4MTFhMSk7Ci0KLSAgRE80KEEsQixDLEQsNCw2LDB4Zjc1MzdlODIpOwotICBETzQoRCxBLEIsQywxMSwxMCwweGJkM2FmMjM1KTsKLSAgRE80KEMsRCxBLEIsMiwxNSwweDJhZDdkMmJiKTsKLSAgRE80KEIsQyxELEEsOSwyMSwweGViODZkMzkxKTsKLQotICBBICs9IEFBOwotICBCICs9IEJCOwotICBDICs9IENDOwotICBEICs9IEREOwotfQotCi0vKgotICogRnJvbSBgUGVyZm9ybWFuY2UgYW5hbHlzaXMgb2YgTUQ1JyBieSBKb3NlcGggRC4gVG91Y2ggPHRvdWNoQGlzaS5lZHU+Ci0gKi8KLSNpZiAhZGVmaW5lZChfX0JZVEVfT1JERVIpIHx8ICFkZWZpbmVkIChfX0JJR19FTkRJQU4pCi0jZXJyb3IgX19CWVRFX09SREVSIG1hY3JvcyBub3QgZGVmaW5lZAotI2VuZGlmCi0KLSNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi1zdGF0aWMgaW5saW5lIHVfaW50MzJfdAotc3dhcF91X2ludDMyX3QgKHVfaW50MzJfdCB0KQotewotICB1X2ludDMyX3QgdGVtcDEsIHRlbXAyOwotCi0gIHRlbXAxICAgPSBjc2hpZnQodCwgMTYpOwotICB0ZW1wMiAgID0gdGVtcDEgPj4gODsKLSAgdGVtcDEgICY9IDB4MDBmZjAwZmY7Ci0gIHRlbXAyICAmPSAweDAwZmYwMGZmOwotICB0ZW1wMSA8PD0gODsKLSAgcmV0dXJuIHRlbXAxIHwgdGVtcDI7Ci19Ci0jZW5kaWYKLQotc3RydWN0IHgzMnsKLSAgdW5zaWduZWQgaW50IGE6MzI7Ci0gIHVuc2lnbmVkIGludCBiOjMyOwotfTsKLQotdm9pZAotTUQ1X1VwZGF0ZSAoc3RydWN0IG1kNSAqbSwgY29uc3Qgdm9pZCAqdiwgc2l6ZV90IGxlbikKLXsKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHY7Ci0gIHNpemVfdCBvbGRfc3ogPSBtLT5zelswXTsKLSAgc2l6ZV90IG9mZnNldDsKLQotICBtLT5zelswXSArPSBsZW4gKiA4OwotICBpZiAobS0+c3pbMF0gPCBvbGRfc3opCi0gICAgICArK20tPnN6WzFdOwotICBvZmZzZXQgPSAob2xkX3N6IC8gOCkgICUgNjQ7Ci0gIHdoaWxlKGxlbiA+IDApewotICAgIHNpemVfdCBsID0gbWluKGxlbiwgNjQgLSBvZmZzZXQpOwotICAgIG1lbWNweShtLT5zYXZlICsgb2Zmc2V0LCBwLCBsKTsKLSAgICBvZmZzZXQgKz0gbDsKLSAgICBwICs9IGw7Ci0gICAgbGVuIC09IGw7Ci0gICAgaWYob2Zmc2V0ID09IDY0KXsKLSNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi0gICAgICBpbnQgaTsKLSAgICAgIHVfaW50MzJfdCBjdXJyZW50WzE2XTsKLSAgICAgIHN0cnVjdCB4MzIgKnUgPSAoc3RydWN0IHgzMiopbS0+c2F2ZTsKLSAgICAgIGZvcihpID0gMDsgaSA8IDg7IGkrKyl7Ci0JY3VycmVudFsyKmkrMF0gPSBzd2FwX3VfaW50MzJfdCh1W2ldLmEpOwotCWN1cnJlbnRbMippKzFdID0gc3dhcF91X2ludDMyX3QodVtpXS5iKTsKLSAgICAgIH0KLSAgICAgIGNhbGMobSwgY3VycmVudCk7Ci0jZWxzZQotICAgICAgY2FsYyhtLCAodV9pbnQzMl90KiltLT5zYXZlKTsKLSNlbmRpZgotICAgICAgb2Zmc2V0ID0gMDsKLSAgICB9Ci0gIH0KLX0KLQotdm9pZAotTUQ1X0ZpbmFsICh2b2lkICpyZXMsIHN0cnVjdCBtZDUgKm0pCi17Ci0gIHVuc2lnbmVkIGNoYXIgemVyb3NbNzJdOwotICB1bnNpZ25lZCBvZmZzZXQgPSAobS0+c3pbMF0gLyA4KSAlIDY0OwotICB1bnNpZ25lZCBpbnQgZHN0YXJ0ID0gKDEyMCAtIG9mZnNldCAtIDEpICUgNjQgKyAxOwotCi0gICp6ZXJvcyA9IDB4ODA7Ci0gIG1lbXNldCAoemVyb3MgKyAxLCAwLCBzaXplb2YoemVyb3MpIC0gMSk7Ci0gIHplcm9zW2RzdGFydCswXSA9IChtLT5zelswXSA+PiAwKSAmIDB4ZmY7Ci0gIHplcm9zW2RzdGFydCsxXSA9IChtLT5zelswXSA+PiA4KSAmIDB4ZmY7Ci0gIHplcm9zW2RzdGFydCsyXSA9IChtLT5zelswXSA+PiAxNikgJiAweGZmOwotICB6ZXJvc1tkc3RhcnQrM10gPSAobS0+c3pbMF0gPj4gMjQpICYgMHhmZjsKLSAgemVyb3NbZHN0YXJ0KzRdID0gKG0tPnN6WzFdID4+IDApICYgMHhmZjsKLSAgemVyb3NbZHN0YXJ0KzVdID0gKG0tPnN6WzFdID4+IDgpICYgMHhmZjsKLSAgemVyb3NbZHN0YXJ0KzZdID0gKG0tPnN6WzFdID4+IDE2KSAmIDB4ZmY7Ci0gIHplcm9zW2RzdGFydCs3XSA9IChtLT5zelsxXSA+PiAyNCkgJiAweGZmOwotICBNRDVfVXBkYXRlIChtLCB6ZXJvcywgZHN0YXJ0ICsgOCk7Ci0gIHsKLSAgICAgIGludCBpOwotICAgICAgdW5zaWduZWQgY2hhciAqciA9ICh1bnNpZ25lZCBjaGFyICopcmVzOwotCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0JICByWzQqaV0gICA9IG0tPmNvdW50ZXJbaV0gJiAweEZGOwotCSAgcls0KmkrMV0gPSAobS0+Y291bnRlcltpXSA+PiA4KSAmIDB4RkY7Ci0JICByWzQqaSsyXSA9IChtLT5jb3VudGVyW2ldID4+IDE2KSAmIDB4RkY7Ci0JICByWzQqaSszXSA9IChtLT5jb3VudGVyW2ldID4+IDI0KSAmIDB4RkY7Ci0gICAgICB9Ci0gIH0KLSNpZiAwCi0gIHsKLSAgICBpbnQgaTsKLSAgICB1X2ludDMyX3QgKnIgPSAodV9pbnQzMl90ICopcmVzOwotCi0gICAgZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgIHJbaV0gPSBzd2FwX3VfaW50MzJfdCAobS0+Y291bnRlcltpXSk7Ci0gIH0KLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWQ1LmggYi9saWJjL2Jpb25pYy9tZDUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM4MTk5NC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9tZDUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTUgLSAyMDAxIEt1bmdsaWdhIFRla25pc2thIEj2Z3Nrb2xhbgotICogKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIAotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIAotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEluc3RpdHV0ZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIElOU1RJVFVURSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIElOU1RJVFVURSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qICRIZWltZGFsOiBtZDUuaCx2IDEuOCAyMDAxLzAxLzI5IDAyOjA4OjU3IGFzc2FyIEV4cCAkCi0gICAkTmV0QlNEOiBtZDUuaCx2IDEuMS4xLjQgMjAwMi8wOS8xMiAxMjo0MTo0MiBqb2RhIEV4cCAkICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotc3RydWN0IG1kNSB7Ci0gIHVuc2lnbmVkIGludCBzelsyXTsKLSAgdV9pbnQzMl90IGNvdW50ZXJbNF07Ci0gIHVuc2lnbmVkIGNoYXIgc2F2ZVs2NF07Ci19OwotCi10eXBlZGVmIHN0cnVjdCBtZDUgTUQ1X0NUWDsKLQotdm9pZCBNRDVfSW5pdCAoc3RydWN0IG1kNSAqbSk7Ci12b2lkIE1ENV9VcGRhdGUgKHN0cnVjdCBtZDUgKm0sIGNvbnN0IHZvaWQgKnAsIHNpemVfdCBsZW4pOwotdm9pZCBNRDVfRmluYWwgKHZvaWQgKnJlcywgc3RydWN0IG1kNSAqbSk7IC8qIHVfaW50MzJfdCByZXNbNF0gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21lbWNweS5jIGIvbGliYy9iaW9uaWMvbWVtY3B5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYTc4YjIuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvbWVtY3B5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jZGVmaW5lIE1FTUNPUFkKLSNpbmNsdWRlICJiY29weS5jIgpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWVtY3B5LmNwcCBiL2xpYmMvYmlvbmljL21lbWNweS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyN2U4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL21lbWNweS5jcHAKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjdW5kZWYgX0ZPUlRJRllfU09VUkNFCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorCisvLyBPdXIgdW5vcHRpbWl6ZWQgbWVtY3B5IGp1c3QgY2FsbHMgdGhlIGJlc3QgYmNvcHkgYXZhaWxhYmxlLgorLy8gKEl0J3MgdGhpcyB3YXkgcm91bmQgcmF0aGVyIHRoYW4gdGhlIG9wcG9zaXRlIGJlY2F1c2Ugd2UncmUgYmFzZWQgb24gQlNEIHNvdXJjZS4pCit2b2lkKiBtZW1jcHkodm9pZCogZHN0LCBjb25zdCB2b2lkKiBzcmMsIHNpemVfdCBuKSB7CisgIGJjb3B5KHNyYywgZHN0LCBuKTsKKyAgcmV0dXJuIGRzdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21lbW1vdmUuYyBiL2xpYmMvYmlvbmljL21lbW1vdmUuYwppbmRleCBhOWZjMWI1Li4zOWM3NjZlIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9tZW1tb3ZlLmMKKysrIGIvbGliYy9iaW9uaWMvbWVtbW92ZS5jCkBAIC0yNSwyMiArMjUsNiBAQAogICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqLwotI3VuZGVmIF9GT1JUSUZZX1NPVVJDRQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KIAotdm9pZCAqbWVtbW92ZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCi17Ci0gIGNvbnN0IGNoYXIgKnAgPSBzcmM7Ci0gIGNoYXIgKnEgPSBkc3Q7Ci0gIC8qIFdlIGNhbiB1c2UgdGhlIG9wdGltaXplZCBtZW1jcHkgaWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24KLSAgICogZG9uJ3Qgb3ZlcmxhcC4KLSAgICovCi0gIGlmIChfX2J1aWx0aW5fZXhwZWN0KCgocSA8IHApICYmICgoc2l6ZV90KShwIC0gcSkgPj0gbikpCi0gICAgICAgICAgICAgICAgICAgIHx8ICgocCA8IHEpICYmICgoc2l6ZV90KShxIC0gcCkgPj0gbikpLCAxKSkgewotICAgIHJldHVybiBtZW1jcHkoZHN0LCBzcmMsIG4pOwotICB9IGVsc2UgewotICAgIGJjb3B5KHNyYywgZHN0LCBuKTsKLSAgICByZXR1cm4gZHN0OwotICB9Ci19CisjZGVmaW5lIE1FTU1PVkUKKyNpbmNsdWRlICJ1cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9iY29weS5jIgpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWVtc3dhcC5jIGIvbGliYy9iaW9uaWMvbWVtc3dhcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWIwYjMyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL21lbXN3YXAuYworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotdm9pZCBtZW1zd2FwKHZvaWQgKm0xLCB2b2lkICptMiwgc2l6ZV90IG4pCi17Ci0gICAgY2hhciogIHAgICAgID0gbTE7Ci0gICAgY2hhciogIHBfZW5kID0gcCArIG47Ci0gICAgY2hhciogIHEgICAgID0gbTI7Ci0KLSAgICB3aGlsZSAocCA8IHBfZW5kKSB7Ci0gICAgICAgIGNoYXIgIHRtcCA9ICpwOwotICAgICAgICAqcCA9ICpxOwotICAgICAgICAqcSA9IHRtcDsKLSAgICAgICAgcCsrOwotICAgICAgICBxKys7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbW1hcC5jcHAgYi9saWJjL2Jpb25pYy9tbWFwLmNwcAppbmRleCAyOGE0N2NjLi44ZjI1YTg5IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9tbWFwLmNwcAorKysgYi9saWJjL2Jpb25pYy9tbWFwLmNwcApAQCAtMzcsMTYgKzM3LDIzIEBACiAKICNkZWZpbmUgTU1BUDJfU0hJRlQgMTIgLy8gMioqMTIgPT0gNDA5NgogCitzdGF0aWMgYm9vbCBrZXJuZWxfaGFzX01BRFZfTUVSR0VBQkxFID0gdHJ1ZTsKKwogdm9pZCogbW1hcDY0KHZvaWQqIGFkZHIsIHNpemVfdCBzaXplLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0KSB7CiAgIGlmIChvZmZzZXQgPCAwIHx8IChvZmZzZXQgJiAoKDFVTCA8PCBNTUFQMl9TSElGVCktMSkpICE9IDApIHsKICAgICBlcnJubyA9IEVJTlZBTDsKICAgICByZXR1cm4gTUFQX0ZBSUxFRDsKICAgfQogCisgIGJvb2wgaXNfcHJpdmF0ZV9hbm9ueW1vdXMgPSAoZmxhZ3MgJiAoTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTKSkgIT0gMDsKICAgdm9pZCogcmVzdWx0ID0gX19tbWFwMihhZGRyLCBzaXplLCBwcm90LCBmbGFncywgZmQsIG9mZnNldCA+PiBNTUFQMl9TSElGVCk7Ci0gIGlmIChyZXN1bHQgIT0gTUFQX0ZBSUxFRCAmJiAoZmxhZ3MgJiAoTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTKSkgIT0gMCkgeworCisgIGlmIChyZXN1bHQgIT0gTUFQX0ZBSUxFRCAmJiBrZXJuZWxfaGFzX01BRFZfTUVSR0VBQkxFICYmIGlzX3ByaXZhdGVfYW5vbnltb3VzKSB7CiAgICAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKLSAgICBtYWR2aXNlKHJlc3VsdCwgc2l6ZSwgTUFEVl9NRVJHRUFCTEUpOworICAgIGludCByYyA9IG1hZHZpc2UocmVzdWx0LCBzaXplLCBNQURWX01FUkdFQUJMRSk7CisgICAgaWYgKHJjID09IC0xICYmIGVycm5vID09IEVJTlZBTCkgeworICAgICAga2VybmVsX2hhc19NQURWX01FUkdFQUJMRSA9IGZhbHNlOworICAgIH0KICAgfQogCiAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tbnRlbnQuY3BwIGIvbGliYy9iaW9uaWMvbW50ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2I2OTE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbW50ZW50LmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxtbnRlbnQuaD4KKworbW50ZW50KiBnZXRtbnRlbnQoRklMRSopIHsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK21udGVudCogZ2V0bW50ZW50X3IoRklMRSosIHN0cnVjdCBtbnRlbnQqLCBjaGFyKiwgaW50KSB7CisgIHJldHVybiBOVUxMOworfQorCitGSUxFKiBzZXRtbnRlbnQoY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciogbW9kZSkgeworICByZXR1cm4gZm9wZW4ocGF0aCwgbW9kZSk7Cit9CisKK2ludCBlbmRtbnRlbnQoRklMRSogZnApIHsKKyAgaWYgKGZwICE9IE5VTEwpIHsKKyAgICBmY2xvc2UoZnApOworICB9CisgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbmFtZV9tZW0uYyBiL2xpYmMvYmlvbmljL25hbWVfbWVtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZTEwYzIuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvbmFtZV9tZW0uYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX25hbWVfbWVtLmgiCi0KLS8qCi0gKiBMb2NhbCBkZWZpbml0aW9ucyBvZiBjdXN0b20gcHJjdGwgYXJndW1lbnRzIHRvIHNldCBhIHZtYSBuYW1lIGluIHNvbWUga2VybmVscwotICovCi0jZGVmaW5lIEJJT05JQ19QUl9TRVRfVk1BICAgICAgICAgICAgICAgMHg1MzU2NGQ0MQotI2RlZmluZSBCSU9OSUNfUFJfU0VUX1ZNQV9BTk9OX05BTUUgICAgIDAKLQotLyoKLSAqIE5hbWVzIGEgcmVnaW9uIG9mIG1lbW9yeS4gIFRoZSBuYW1lIGlzIGV4cGVjdGVkIHRvIHNob3cgdXAgaW4gL3Byb2MvcGlkL21hcHMKLSAqIGFuZCAvcHJvYy9waWQvc21hcHMuICBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIHdvcmssIGFuZCBpdCBpZiBpdAotICogZG9lcyB3b3JrIGl0IGlzIGxpa2VseSB0byBvbmx5IHdvcmsgb24gbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRlZCB3aXRoCi0gKiBtbWFwKE1BUF9BTk9OWU1PVVMpLCBhbmQgb25seSBvbiByZWdpb25zIHRoYXQgYXJlIHBhZ2UgYWxpZ25lZC4gIG5hbWUgc2hvdWxkCi0gKiBiZSBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgdGhhdCBpcyB2YWxpZCBmb3IgYXMgbG9uZyBhcyB0aGUgbWVtb3J5IGlzIG1hcHBlZCwKLSAqIHByZWZlcmFibHkgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgc3RyaW5nLgotICoKLSAqIFJldHVybnMgLTEgb24gZXJyb3IgYW5kIHNldHMgZXJybm8uICBJZiBpdCByZXR1cm5zIGFuIGVycm9yIG5hbWluZyBwYWdlCi0gKiBhbGlnbmVkIGFub255bW91cyBtZW1vcnkgdGhlIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgbmFtaW5nLCBhbmQgYW4gYWx0ZXJuYXRlCi0gKiBtZXRob2Qgb2YgbmFtaW5nIG1lbW9yeSBzaG91bGQgYmUgdXNlZCAobGlrZSBhc2htZW0pLgotICovCi1pbnQgX19iaW9uaWNfbmFtZV9tZW0odm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICByZXR1cm4gcHJjdGwoQklPTklDX1BSX1NFVF9WTUEsIEJJT05JQ19QUl9TRVRfVk1BX0FOT05fTkFNRSwKLSAgICAgICAgICAgICAgICAgYWRkciwgbGVuLCBuYW1lKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL25ka19jcnVmdC5jcHAgYi9saWJjL2Jpb25pYy9uZGtfY3J1ZnQuY3BwCmluZGV4IDM2MzdjM2UuLjc2MDA4MTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL25ka19jcnVmdC5jcHAKKysrIGIvbGliYy9iaW9uaWMvbmRrX2NydWZ0LmNwcApAQCAtMjksMTggKzI5LDI3IEBACiAvLyBUaGlzIGZpbGUgcGVycGV0dWF0ZXMgdGhlIG1pc3Rha2VzIG9mIHRoZSBwYXN0LCBidXQgb25seSBmb3IgMzItYml0IHRhcmdldHMuCiAjaWYgIWRlZmluZWQoX19MUDY0X18pCiAKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KIAogLy8gVGhlc2Ugd2VyZSBhY2NpZGVudGFsbHkgZGVjbGFyZWQgaW4gPHVuaXN0ZC5oPiBiZWNhdXNlIHdlIHN0dXBpZGx5IHVzZWQgdG8gaW5saW5lCiAvLyBnZXRwYWdlc2l6ZSgpIGFuZCBfX2dldHBhZ2VzaGlmdCgpLiBOZWVkZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkIE5ESyBhcHBzLgogZXh0ZXJuICJDIiB7CiAgIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKLSAgdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7CisgIHVuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQgPSAxMjsKIH0KIAogLy8gVE9ETzogcmVtb3ZlIHRoaXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBoYWNrIChmb3IgamItbXIxIHN0cmFjZSBiaW5hcmllcykuCkBAIC01OSw0ICs2OCwyNjIgQEAKICAgcmV0dXJuIF9fZ2V0X3RscygpOwogfQogCisvLyBUaGlzIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiB3YXMgaW4gb3VyIDxzdHJpbmcuaD4gZm9yIHNvbWUgcmVhc29uLgorZXh0ZXJuICJDIiB2b2lkIG1lbXN3YXAodm9pZCogbTEsIHZvaWQqIG0yLCBzaXplX3QgbikgeworICBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obTEpOworICBjaGFyKiBwX2VuZCA9IHAgKyBuOworICBjaGFyKiBxID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obTIpOworICB3aGlsZSAocCA8IHBfZW5kKSB7CisgICAgY2hhciB0bXAgPSAqcDsKKyAgICAqcCA9ICpxOworICAgICpxID0gdG1wOworICAgIHArKzsKKyAgICBxKys7CisgIH0KK30KKworZXh0ZXJuICJDIiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkcihwdGhyZWFkX2F0dHJfdCosIHZvaWQqKSB7CisgIC8vIFRoaXMgd2FzIHJlbW92ZWQgZnJvbSBQT1NJWC4xLTIwMDgsIGFuZCBpcyBub3QgaW1wbGVtZW50ZWQgb24gYmlvbmljLgorICAvLyBOZWVkZWQgZm9yIEFCSSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE5ESy4KKyAgcmV0dXJuIEVOT1NZUzsKK30KKworZXh0ZXJuICJDIiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihjb25zdCBwdGhyZWFkX2F0dHJfdCogYXR0ciwgdm9pZCoqIHN0YWNrX2FkZHIpIHsKKyAgLy8gVGhpcyB3YXMgcmVtb3ZlZCBmcm9tIFBPU0lYLjEtMjAwOC4KKyAgLy8gTmVlZGVkIGZvciBBQkkgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBOREsuCisgICpzdGFja19hZGRyID0gKGNoYXIqKWF0dHItPnN0YWNrX2Jhc2UgKyBhdHRyLT5zdGFja19zaXplOworICByZXR1cm4gMDsKK30KKworLy8gTm9uLXN0YW5kYXJkIGNydWZ0IHRoYXQgc2hvdWxkIG9ubHkgZXZlciBoYXZlIGJlZW4gaW4gc3lzdGVtL2NvcmUvdG9vbGJveC4KK2V4dGVybiAiQyIgY2hhciogc3RydG90aW1ldmFsKGNvbnN0IGNoYXIqIHN0ciwgc3RydWN0IHRpbWV2YWwqIHRzKSB7CisgIGNoYXIqIHM7CisgIHRzLT50dl9zZWMgPSBzdHJ0b3VtYXgoc3RyLCAmcywgMTApOworCisgIGxvbmcgZnJhY3Rpb25hbF9zZWNvbmRzID0gMDsKKyAgaWYgKCpzID09ICcuJykgeworICAgIHMrKzsKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgLy8gUmVhZCB1cCB0byA2IGRpZ2l0cyAobWljcm9zZWNvbmRzKS4KKyAgICB3aGlsZSAoKnMgJiYgaXNkaWdpdCgqcykpIHsKKyAgICAgIGlmICgrK2NvdW50IDwgNykgeworICAgICAgICBmcmFjdGlvbmFsX3NlY29uZHMgPSBmcmFjdGlvbmFsX3NlY29uZHMqMTAgKyAoKnMgLSAnMCcpOworICAgICAgfQorICAgICAgcysrOworICAgIH0KKworICAgIGZvciAoOyBjb3VudCA8IDY7IGNvdW50KyspIHsKKyAgICAgIGZyYWN0aW9uYWxfc2Vjb25kcyAqPSAxMDsKKyAgICB9CisgIH0KKworICB0cy0+dHZfdXNlYyA9IGZyYWN0aW9uYWxfc2Vjb25kczsKKyAgcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRpZ2l0dmFsKGludCBjaCkgeworICB1bnNpZ25lZCBkOworCisgIGQgPSAodW5zaWduZWQpKGNoIC0gJzAnKTsKKyAgaWYgKGQgPCAxMCkgcmV0dXJuIChpbnQpZDsKKworICBkID0gKHVuc2lnbmVkKShjaCAtICdhJyk7CisgIGlmIChkIDwgNikgcmV0dXJuIChpbnQpKGQrMTApOworCisgIGQgPSAodW5zaWduZWQpKGNoIC0gJ0EnKTsKKyAgaWYgKGQgPCA2KSByZXR1cm4gKGludCkoZCsxMCk7CisKKyAgcmV0dXJuIC0xOworfQorCisvLyBUaGlzIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiB3YXMgaW4gb3VyIDxpbnR0eXBlcy5oPiBmb3Igc29tZSByZWFzb24uCitleHRlcm4gIkMiIHVpbnRtYXhfdCBzdHJudG91bWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlLCBzaXplX3QgbikgeworICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgcCAgID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilucHRyOworICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgZW5kID0gcCArIG47CisgIGludCAgICAgICAgICAgICAgICAgICBtaW51cyA9IDA7CisgIHVpbnRtYXhfdCAgICAgICAgICAgICB2ID0gMDsKKyAgaW50ICAgICAgICAgICAgICAgICAgIGQ7CisKKyAgd2hpbGUgKHAgPCBlbmQgJiYgaXNzcGFjZSgqcCkpIHsKKyAgICBwKys7CisgIH0KKworICBpZiAocCA8IGVuZCkgeworICAgIGNoYXIgYyA9IHBbMF07CisgICAgaWYgKGMgPT0gJy0nIHx8IGMgPT0gJysnKSB7CisgICAgICBtaW51cyA9IChjID09ICctJyk7CisgICAgICBwKys7CisgICAgfQorICB9CisKKyAgaWYgKGJhc2UgPT0gMCkgeworICAgIGlmIChwKzIgPCBlbmQgJiYgcFswXSA9PSAnMCcgJiYgKHBbMV0gPT0gJ3gnIHx8IHBbMV0gPT0gJ1gnKSkgeworICAgICAgcCArPSAyOworICAgICAgYmFzZSA9IDE2OworICAgIH0gZWxzZSBpZiAocCsxIDwgZW5kICYmIHBbMF0gPT0gJzAnKSB7CisgICAgICBwICAgKz0gMTsKKyAgICAgIGJhc2UgPSA4OworICAgIH0gZWxzZSB7CisgICAgICBiYXNlID0gMTA7CisgICAgfQorICB9IGVsc2UgaWYgKGJhc2UgPT0gMTYpIHsKKyAgICBpZiAocCsyIDwgZW5kICYmIHBbMF0gPT0gJzAnICYmIChwWzFdID09ICd4JyB8fCBwWzFdID09ICdYJykpIHsKKyAgICAgIHAgKz0gMjsKKyAgICB9CisgIH0KKworICB3aGlsZSAocCA8IGVuZCAmJiAoZCA9IGRpZ2l0dmFsKCpwKSkgPj0gMCAmJiBkIDwgYmFzZSkgeworICAgIHYgPSB2KmJhc2UgKyBkOworICAgIHAgKz0gMTsKKyAgfQorCisgIGlmIChlbmRwdHIpIHsKKyAgICAqZW5kcHRyID0gKGNoYXIqKSBwOworICB9CisKKyAgcmV0dXJuIG1pbnVzID8gLXYgOiB2OworfQorCisvLyBUaGlzIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiB3YXMgaW4gb3VyIDxpbnR0eXBlcy5oPiBmb3Igc29tZSByZWFzb24uCitleHRlcm4gIkMiIGludG1heF90IHN0cm50b2ltYXgoY29uc3QgY2hhciogbnB0ciwgY2hhcioqIGVuZHB0ciwgaW50IGJhc2UsIHNpemVfdCBuKSB7CisgIHJldHVybiAoaW50bWF4X3QpIHN0cm50b3VtYXgobnB0ciwgZW5kcHRyLCBiYXNlLCBuKTsKK30KKworLy8gUE9TSVggY2FsbHMgdGhpcyBkcHJpbnRmLCBidXQgTFAzMiBBbmRyb2lkIGhhZCBmZHByaW50ZiBpbnN0ZWFkLgorZXh0ZXJuICJDIiBpbnQgZmRwcmludGYoaW50IGZkLCBjb25zdCBjaGFyKiBmbXQsIC4uLikgeworICB2YV9saXN0IGFwOworICB2YV9zdGFydChhcCwgZm10KTsKKyAgaW50IHJjID0gdmRwcmludGYoZmQsIGZtdCwgYXApOworICB2YV9lbmQoYXApOworICByZXR1cm4gcmM7Cit9CisKKy8vIFBPU0lYIGNhbGxzIHRoaXMgdmRwcmludGYsIGJ1dCBMUDMyIEFuZHJvaWQgaGFkIGZkcHJpbnRmIGluc3RlYWQuCitleHRlcm4gIkMiIGludCB2ZmRwcmludGYoaW50IGZkLCBjb25zdCBjaGFyKiBmbXQsIHZhX2xpc3QgYXApIHsKKyAgcmV0dXJuIHZkcHJpbnRmKGZkLCBmbXQsIGFwKTsKK30KKworI2RlZmluZSBfX2Z1dGV4X3dha2UgX19yZWFsX2Z1dGV4X3dha2UKKyNkZWZpbmUgX19mdXRleF93YWl0IF9fcmVhbF9mdXRleF93YWl0CisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfZnV0ZXguaCIKKyN1bmRlZiBfX2Z1dGV4X3dha2UKKyN1bmRlZiBfX2Z1dGV4X3dhaXQKKworLy8gVGhpcyB1c2VkIHRvIGJlIGluIDxzeXMvYXRvbWljcy5oPi4KK2V4dGVybiAiQyIgaW50IF9fZnV0ZXhfd2FrZSh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBjb3VudCkgeworICByZXR1cm4gX19yZWFsX2Z1dGV4X3dha2UoZnR4LCBjb3VudCk7Cit9CisKKy8vIFRoaXMgdXNlZCB0byBiZSBpbiA8c3lzL2F0b21pY3MuaD4uCitleHRlcm4gIkMiIGludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgdmFsdWUsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogdGltZW91dCkgeworICByZXR1cm4gX19yZWFsX2Z1dGV4X3dhaXQoZnR4LCB2YWx1ZSwgdGltZW91dCk7Cit9CisKKy8vIFVuaXR5J3MgbGlibW9ubyB1c2VzIHRoaXMuCitleHRlcm4gIkMiIGludCB0a2lsbChwaWRfdCB0aWQsIGludCBzaWcpIHsKKyAgcmV0dXJuIHN5c2NhbGwoX19OUl90a2lsbCwgdGlkLCBzaWcpOworfQorCisvLyBUaGlzIHdhcyByZW1vdmVkIGZyb20gUE9TSVggMjAwOC4KK2V4dGVybiAiQyIgd2NoYXJfdCogd2Nzd2NzKHdjaGFyX3QqIGhheXN0YWNrLCB3Y2hhcl90KiBuZWVkbGUpIHsKKyAgcmV0dXJuIHdjc3N0cihoYXlzdGFjaywgbmVlZGxlKTsKK30KKworLy8gVGhpcyB3YXMgcmVtb3ZlZCBmcm9tIFBPU0lYIDIwMDguCitleHRlcm4gIkMiIHNpZ2hhbmRsZXJfdCBic2Rfc2lnbmFsKGludCBzaWdudW0sIHNpZ2hhbmRsZXJfdCBoYW5kbGVyKSB7CisgIHJldHVybiBzaWduYWwoc2lnbnVtLCBoYW5kbGVyKTsKK30KKworLy8gc3lzdl9zaWduYWwoKSB3YXMgbmV2ZXIgaW4gUE9TSVguCitleHRlcm4gc2lnaGFuZGxlcl90IF9zaWduYWwoaW50IHNpZ251bSwgc2lnaGFuZGxlcl90IGhhbmRsZXIsIGludCBmbGFncyk7CitleHRlcm4gIkMiIHNpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbChpbnQgc2lnbnVtLCBzaWdoYW5kbGVyX3QgaGFuZGxlcikgeworICByZXR1cm4gX3NpZ25hbChzaWdudW0sIGhhbmRsZXIsIFNBX1JFU0VUSEFORCk7Cit9CisKKy8vIFRoaXMgaXMgYSBzeXN0ZW0gY2FsbCB0aGF0IHdhcyBuZXZlciBpbiBQT1NJWC4gVXNlIHJlYWRkaXIoMykgaW5zdGVhZC4KK2V4dGVybiAiQyIgaW50IF9fZ2V0ZGVudHM2NCh1bnNpZ25lZCBpbnQsIGRpcmVudCosIHVuc2lnbmVkIGludCk7CitleHRlcm4gIkMiIGludCBnZXRkZW50cyh1bnNpZ25lZCBpbnQgZmQsIGRpcmVudCogZGlycCwgdW5zaWduZWQgaW50IGNvdW50KSB7CisgIHJldHVybiBfX2dldGRlbnRzNjQoZmQsIGRpcnAsIGNvdW50KTsKK30KKworLy8gVGhpcyBpcyBhIEJTRGlzbSB0aGF0IHdlIG5ldmVyIGltcGxlbWVudGVkIGNvcnJlY3RseS4gVXNlZCBieSBGaXJlZm94LgorZXh0ZXJuICJDIiBpbnQgaXNzZXR1Z2lkKCkgeworICByZXR1cm4gMDsKK30KKworLy8gVGhpcyB3YXMgcmVtb3ZlZCBmcm9tIFBPU0lYIDIwMDQuCitleHRlcm4gIkMiIHBpZF90IHdhaXQzKGludCogc3RhdHVzLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSogcnVzYWdlKSB7CisgIHJldHVybiB3YWl0NCgtMSwgc3RhdHVzLCBvcHRpb25zLCBydXNhZ2UpOworfQorCisvLyBUaGlzIHdhcyByZW1vdmVkIGZyb20gUE9TSVggMjAwNC4KK2V4dGVybiAiQyIgaW50IGdldGR0YWJsZXNpemUoKSB7CisgIHN0cnVjdCBybGltaXQgcjsKKworICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZyKSA8IDApIHsKKyAgICByZXR1cm4gc3lzY29uZihfU0NfT1BFTl9NQVgpOworICB9CisKKyAgcmV0dXJuIHIucmxpbV9jdXI7Cit9CisKKy8vIE9ubHkgdXNlZCBieSBmdGltZSwgd2hpY2ggd2FzIHJlbW92ZWQgZnJvbSBQT1NJWCAyMDA4Lgorc3RydWN0IHRpbWViIHsKKyAgdGltZV90ICAgICAgICAgIHRpbWU7CisgIHVuc2lnbmVkIHNob3J0ICBtaWxsaXRtOworICBzaG9ydCAgICAgICAgICAgdGltZXpvbmU7CisgIHNob3J0ICAgICAgICAgICBkc3RmbGFnOworfTsKKworLy8gVGhpcyB3YXMgcmVtb3ZlZCBmcm9tIFBPU0lYIDIwMDguCitleHRlcm4gIkMiIGludCBmdGltZShzdHJ1Y3QgdGltZWIqIHRiKSB7CisgIHN0cnVjdCB0aW1ldmFsICB0djsKKyAgc3RydWN0IHRpbWV6b25lIHR6OworCisgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LCAmdHopIDwgMCkKKyAgICByZXR1cm4gLTE7CisKKyAgdGItPnRpbWUgICAgPSB0di50dl9zZWM7CisgIHRiLT5taWxsaXRtID0gKHR2LnR2X3VzZWMgKyA1MDApIC8gMTAwMDsKKworICBpZiAodGItPm1pbGxpdG0gPT0gMTAwMCkgeworICAgICsrdGItPnRpbWU7CisgICAgdGItPm1pbGxpdG0gPSAwOworICB9CisKKyAgdGItPnRpbWV6b25lID0gdHoudHpfbWludXRlc3dlc3Q7CisgIHRiLT5kc3RmbGFnICA9IHR6LnR6X2RzdHRpbWU7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8vIFRoaXMgd2FzIHJlbW92ZWQgZnJvbSBQT1NJWCAyMDA4LgorZXh0ZXJuICJDIiBjaGFyKiBpbmRleChjb25zdCBjaGFyKiBzdHIsIGludCBjaCkgeworICByZXR1cm4gc3RyY2hyKHN0ciwgY2gpOworfQorCisvLyBUaGlzIHdhcyByZW1vdmVkIGZyb20gQlNELgorZXh0ZXJuICJDIiB2b2lkIGFyYzRyYW5kb21fc3Rpcih2b2lkKSB7CisgIC8vIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHN0aXJzIGl0c2VsZiBhcyBuZWVkZWQuCit9CisKKy8vIFRoaXMgd2FzIHJlbW92ZWQgZnJvbSBCU0QuCitleHRlcm4gIkMiIHZvaWQgYXJjNHJhbmRvbV9hZGRyYW5kb20odW5zaWduZWQgY2hhciosIGludCkgeworICAvLyBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhZGRzIHJhbmRvbW5lc3MgYXMgbmVlZGVkLgorfQorCisvLyBPbGQgdmVyc2lvbnMgb2YgdGhlIE5ESyBkaWQgbm90IGV4cG9ydCBtYWxsb2NfdXNhYmxlX3NpemUsIGJ1dCBkaWQKKy8vIGV4cG9ydCBkbG1hbGxvY191c2FibGVfc2l6ZS4gV2UgYXJlIG1vdmluZyBhd2F5IGZyb20gZGxtYWxsb2MgaW4gTAorLy8gc28gbWFrZSB0aGlzIGNhbGwgbWFsbG9jX3VzYWJsZV9zaXplLgorZXh0ZXJuICJDIiBzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcHRyKSB7CisgIHJldHVybiBtYWxsb2NfdXNhYmxlX3NpemUocHRyKTsKK30KKworLy8gT2xkZXIgdmVyc2lvbnMgb2YgYXBwcG9ydGFibGUgdXNlZCBkbG1hbGxvYyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1hbGxvYywKKy8vIHNvIGV4cG9ydCB0aGlzIGNvbXBhdGliaWxpdHkgc2hpbSB0aGF0IHNpbXBseSBjYWxscyBtYWxsb2MuCitleHRlcm4gIkMiIHZvaWQqIGRsbWFsbG9jKHNpemVfdCBzaXplKSB7CisgIHJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbmV3LmNwcCBiL2xpYmMvYmlvbmljL25ldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmZDFiZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL25ldy5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCisKK2NvbnN0IHN0ZDo6bm90aHJvd190IHN0ZDo6bm90aHJvdyA9IHt9OworCit2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3Qgc2l6ZSkgeworICAgIHZvaWQqIHAgPSBtYWxsb2Moc2l6ZSk7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICBfX2xpYmNfZmF0YWwoIm5ldyBmYWlsZWQgdG8gYWxsb2NhdGUgJXp1IGJ5dGVzIiwgc2l6ZSk7CisgICAgfQorICAgIHJldHVybiBwOworfQorCit2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCBzaXplKSB7CisgICAgdm9pZCogcCA9IG1hbGxvYyhzaXplKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgIF9fbGliY19mYXRhbCgibmV3W10gZmFpbGVkIHRvIGFsbG9jYXRlICV6dSBieXRlcyIsIHNpemUpOworICAgIH0KKyAgICByZXR1cm4gcDsKK30KKwordm9pZCAgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0cikgeworICAgIGZyZWUocHRyKTsKK30KKwordm9pZCAgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcHRyKSB7CisgICAgZnJlZShwdHIpOworfQorCit2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3Qgc2l6ZSwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB7CisgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKwordm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qgc2l6ZSwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB7CisgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKwordm9pZCAgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0ciwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB7CisgICAgZnJlZShwdHIpOworfQorCit2b2lkICBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwdHIsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgeworICAgIGZyZWUocHRyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL29wZW4uY3BwIGIvbGliYy9iaW9uaWMvb3Blbi5jcHAKaW5kZXggOTg2ZWQxYy4uYmQ4MzJjMCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvb3Blbi5jcHAKKysrIGIvbGliYy9iaW9uaWMvb3Blbi5jcHAKQEAgLTQzLDYgKzQzLDExIEBACiAjZW5kaWYKIH0KIAoraW50IGNyZWF0KGNvbnN0IGNoYXIqIHBhdGhuYW1lLCBtb2RlX3QgbW9kZSkgeworICByZXR1cm4gb3BlbihwYXRobmFtZSwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX1dST05MWSwgbW9kZSk7Cit9CitfX3N0cm9uZ19hbGlhcyhjcmVhdDY0LCBjcmVhdCk7CisKIGludCBvcGVuKGNvbnN0IGNoYXIqIHBhdGhuYW1lLCBpbnQgZmxhZ3MsIC4uLikgewogICBtb2RlX3QgbW9kZSA9IDA7CiAKQEAgLTU1LDYgKzYwLDcgQEAKIAogICByZXR1cm4gX19vcGVuYXQoQVRfRkRDV0QsIHBhdGhuYW1lLCBmb3JjZV9PX0xBUkdFRklMRShmbGFncyksIG1vZGUpOwogfQorX19zdHJvbmdfYWxpYXMob3BlbjY0LCBvcGVuKTsKIAogaW50IF9fb3Blbl8yKGNvbnN0IGNoYXIqIHBhdGhuYW1lLCBpbnQgZmxhZ3MpIHsKICAgaWYgKF9fcHJlZGljdF9mYWxzZSgoZmxhZ3MgJiBPX0NSRUFUKSAhPSAwKSkgewpAQCAtNzYsNiArODIsNyBAQAogCiAgIHJldHVybiBfX29wZW5hdChmZCwgcGF0aG5hbWUsIGZvcmNlX09fTEFSR0VGSUxFKGZsYWdzKSwgbW9kZSk7CiB9CitfX3N0cm9uZ19hbGlhcyhvcGVuYXQ2NCwgb3BlbmF0KTsKIAogaW50IF9fb3BlbmF0XzIoaW50IGZkLCBjb25zdCBjaGFyKiBwYXRobmFtZSwgaW50IGZsYWdzKSB7CiAgIGlmICgoZmxhZ3MgJiBPX0NSRUFUKSAhPSAwKSB7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wZXJyb3IuYyBiL2xpYmMvYmlvbmljL3BlcnJvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTU1ZjcyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3BlcnJvci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXZvaWQgcGVycm9yKGNvbnN0IGNoYXIgKnByZWZpeCkKLXsKLSAgICBjaGFyICAgYnVmZlsyNTZdOwotCi0gICAgc3RyZXJyb3JfciggZXJybm8sIGJ1ZmYsIHNpemVvZihidWZmKSApOwotCi0gICAgaWYgKHByZWZpeCkgewotICAgICAgICB3cml0ZSggMiwgcHJlZml4LCBzdHJsZW4ocHJlZml4KSApOwotICAgICAgICB3cml0ZSggMiwgIjogIiwgMiApOwotICAgIH0KLSAgICB3cml0ZSggMiwgYnVmZiwgc3RybGVuKGJ1ZmYpICk7Ci0gICAgd3JpdGUoIDIsICJcbiIsIDEgKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3Bvc2l4X2ZhZHZpc2UuY3BwIGIvbGliYy9iaW9uaWMvcG9zaXhfZmFkdmlzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E3NGFmMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3Bvc2l4X2ZhZHZpc2UuY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL0Vycm5vUmVzdG9yZXIuaCIKKworZXh0ZXJuICJDIiBpbnQgX19hcm1fZmFkdmlzZTY0XzY0KGludCwgaW50LCBvZmY2NF90LCBvZmY2NF90KTsKK2V4dGVybiAiQyIgaW50IF9fZmFkdmlzZTY0KGludCwgb2ZmNjRfdCwgb2ZmNjRfdCwgaW50KTsKKworLy8gTm8gYXJjaGl0ZWN0dXJlIGFjdHVhbGx5IGhhcyB0aGUgMzItYml0IG9mZl90IHN5c3RlbSBjYWxsLgoraW50IHBvc2l4X2ZhZHZpc2UoaW50IGZkLCBvZmZfdCBvZmZzZXQsIG9mZl90IGxlbmd0aCwgaW50IGFkdmljZSkgeworICByZXR1cm4gcG9zaXhfZmFkdmlzZTY0KGZkLCBvZmZzZXQsIGxlbmd0aCwgYWR2aWNlKTsKK30KKworI2lmIGRlZmluZWQoX19hcm1fXykKK2ludCBwb3NpeF9mYWR2aXNlNjQoaW50IGZkLCBvZmY2NF90IG9mZnNldCwgb2ZmNjRfdCBsZW5ndGgsIGludCBhZHZpY2UpIHsKKyAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKKyAgcmV0dXJuIChfX2FybV9mYWR2aXNlNjRfNjQoZmQsIGFkdmljZSwgb2Zmc2V0LCBsZW5ndGgpID09IDApID8gMCA6IGVycm5vOworfQorI2Vsc2UKK2ludCBwb3NpeF9mYWR2aXNlNjQoaW50IGZkLCBvZmY2NF90IG9mZnNldCwgb2ZmNjRfdCBsZW5ndGgsIGludCBhZHZpY2UpIHsKKyAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKKyAgcmV0dXJuIChfX2ZhZHZpc2U2NChmZCwgb2Zmc2V0LCBsZW5ndGgsIGFkdmljZSkgPT0gMCkgPyAwIDogZXJybm87Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3Bvc2l4X2ZhbGxvY2F0ZS5jcHAgYi9saWJjL2Jpb25pYy9wb3NpeF9mYWxsb2NhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYzE2MzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9wb3NpeF9mYWxsb2NhdGUuY3BwCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL0Vycm5vUmVzdG9yZXIuaCIKKworaW50IHBvc2l4X2ZhbGxvY2F0ZShpbnQgZmQsIG9mZl90IG9mZnNldCwgb2ZmX3QgbGVuZ3RoKSB7CisgIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7CisgIHJldHVybiAoZmFsbG9jYXRlKGZkLCAwLCBvZmZzZXQsIGxlbmd0aCkgPT0gMCkgPyAwIDogZXJybm87Cit9CisKK2ludCBwb3NpeF9mYWxsb2NhdGU2NChpbnQgZmQsIG9mZjY0X3Qgb2Zmc2V0LCBvZmY2NF90IGxlbmd0aCkgeworICBFcnJub1Jlc3RvcmVyIGVycm5vX3Jlc3RvcmVyOworICByZXR1cm4gKGZhbGxvY2F0ZTY0KGZkLCAwLCBvZmZzZXQsIGxlbmd0aCkgPT0gMCkgPyAwIDogZXJybm87Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wb3NpeF90aW1lcnMuY3BwIGIvbGliYy9iaW9uaWMvcG9zaXhfdGltZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWQwZWYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcG9zaXhfdGltZXJzLmNwcApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2Z1dGV4LmgiCisjaW5jbHVkZSAicHJpdmF0ZS9rZXJuZWxfc2lnc2V0X3QuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLy8gU3lzdGVtIGNhbGxzLgorZXh0ZXJuICJDIiBpbnQgX19ydF9zaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QqLCBzaWdpbmZvX3QqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqLCBzaXplX3QpOworZXh0ZXJuICJDIiBpbnQgX190aW1lcl9jcmVhdGUoY2xvY2tpZF90LCBzaWdldmVudCosIF9fa2VybmVsX3RpbWVyX3QqKTsKK2V4dGVybiAiQyIgaW50IF9fdGltZXJfZGVsZXRlKF9fa2VybmVsX3RpbWVyX3QpOworZXh0ZXJuICJDIiBpbnQgX190aW1lcl9nZXRvdmVycnVuKF9fa2VybmVsX3RpbWVyX3QpOworZXh0ZXJuICJDIiBpbnQgX190aW1lcl9nZXR0aW1lKF9fa2VybmVsX3RpbWVyX3QsIGl0aW1lcnNwZWMqKTsKK2V4dGVybiAiQyIgaW50IF9fdGltZXJfc2V0dGltZShfX2tlcm5lbF90aW1lcl90LCBpbnQsIGNvbnN0IGl0aW1lcnNwZWMqLCBpdGltZXJzcGVjKik7CisKKy8vIE1vc3QgUE9TSVggdGltZXJzIGFyZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IHRoZSBrZXJuZWwuIFdlIHRyYW5zbGF0ZSBTSUdFVl9USFJFQUQgdGltZXJzCisvLyBpbnRvIFNJR0VWX1RIUkVBRF9JRCB0aW1lcnMgc28gdGhlIGtlcm5lbCBoYW5kbGVzIGFsbCB0aGUgdGltZS1yZWxhdGVkIHN0dWZmIGFuZCB3ZSBqdXN0CisvLyBuZWVkIHRvIHdvcnJ5IGFib3V0IHJ1bm5pbmcgdXNlciBjb2RlIG9uIGEgdGhyZWFkLgorCisvLyBXZSBjYW4ndCB1c2UgU0lHQUxSTSBiZWNhdXNlIHRvbyBtYW55IG90aGVyIEMgbGlicmFyeSBmdW5jdGlvbnMgdGhyb3cgdGhhdCBhcm91bmQsIGFuZCBzaW5jZQorLy8gdGhleSBkb24ndCBzZW5kIHRvIGEgc3BlY2lmaWMgdGhyZWFkLCBhbGwgdGhyZWFkcyBhcmUgZWxpZ2libGUgdG8gaGFuZGxlIHRoZSBzaWduYWwgYW5kIHdlIGNhbgorLy8gZW5kIHVwIHdpdGggb25lIG9mIG91ciBQT1NJWCB0aW1lciB0aHJlYWRzIGhhbmRsaW5nIGl0IChtZWFuaW5nIHRoYXQgdGhlIGludGVuZGVkIHJlY2lwaWVudAorLy8gZG9lc24ndCkuIGdsaWJjIHVzZXMgU0lHUlRNSU4gZm9yIGl0cyBQT1NJWCB0aW1lciBpbXBsZW1lbnRhdGlvbiwgc28gaW4gdGhlIGFic2VuY2Ugb2YgYW55CisvLyByZWFzb24gdG8gdXNlIGFueXRoaW5nIGVsc2UsIHdlIHVzZSB0aGF0IHRvby4KK3N0YXRpYyBjb25zdCBpbnQgVElNRVJfU0lHTkFMID0gKF9fU0lHUlRNSU4gKyAwKTsKKworc3RydWN0IFBvc2l4VGltZXIgeworICBfX2tlcm5lbF90aW1lcl90IGtlcm5lbF90aW1lcl9pZDsKKworICBpbnQgc2lnZXZfbm90aWZ5OworCisgIC8vIFRoZXNlIGZpZWxkcyBhcmUgb25seSBuZWVkZWQgZm9yIGEgU0lHRVZfVEhSRUFEIHRpbWVyLgorICBwdGhyZWFkX3QgY2FsbGJhY2tfdGhyZWFkOworICB2b2lkICgqY2FsbGJhY2spKHNpZ3ZhbF90KTsKKyAgc2lndmFsX3QgY2FsbGJhY2tfYXJndW1lbnQ7Cit9OworCitzdGF0aWMgX19rZXJuZWxfdGltZXJfdCB0b19rZXJuZWxfdGltZXJfaWQodGltZXJfdCB0aW1lcikgeworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQb3NpeFRpbWVyKj4odGltZXIpLT5rZXJuZWxfdGltZXJfaWQ7Cit9CisKK3N0YXRpYyB2b2lkKiBfX3RpbWVyX3RocmVhZF9zdGFydCh2b2lkKiBhcmcpIHsKKyAgUG9zaXhUaW1lciogdGltZXIgPSByZWludGVycHJldF9jYXN0PFBvc2l4VGltZXIqPihhcmcpOworCisgIGtlcm5lbF9zaWdzZXRfdCBzaWdzZXQ7CisgIHNpZ2FkZHNldChzaWdzZXQuZ2V0KCksIFRJTUVSX1NJR05BTCk7CisKKyAgd2hpbGUgKHRydWUpIHsKKyAgICAvLyBXYWl0IGZvciBhIHNpZ25hbC4uLgorICAgIHNpZ2luZm9fdCBzaTsKKyAgICBtZW1zZXQoJnNpLCAwLCBzaXplb2Yoc2kpKTsKKyAgICBpbnQgcmMgPSBfX3J0X3NpZ3RpbWVkd2FpdChzaWdzZXQuZ2V0KCksICZzaSwgTlVMTCwgc2l6ZW9mKHNpZ3NldCkpOworICAgIGlmIChyYyA9PSAtMSkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgaWYgKHNpLnNpX2NvZGUgPT0gU0lfVElNRVIpIHsKKyAgICAgIC8vIFRoaXMgc2lnbmFsIHdhcyBzZW50IGJlY2F1c2UgYSB0aW1lciBmaXJlZCwgc28gY2FsbCB0aGUgY2FsbGJhY2suCisgICAgICB0aW1lci0+Y2FsbGJhY2sodGltZXItPmNhbGxiYWNrX2FyZ3VtZW50KTsKKyAgICB9IGVsc2UgaWYgKHNpLnNpX2NvZGUgPT0gU0lfVEtJTEwpIHsKKyAgICAgIC8vIFRoaXMgc2lnbmFsIHdhcyBzZW50IGJlY2F1c2Ugc29tZW9uZSB3YW50cyB1cyB0byBleGl0LgorICAgICAgZnJlZSh0aW1lcik7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0KK30KKworc3RhdGljIHZvaWQgX190aW1lcl90aHJlYWRfc3RvcChQb3NpeFRpbWVyKiB0aW1lcikgeworICBwdGhyZWFkX2tpbGwodGltZXItPmNhbGxiYWNrX3RocmVhZCwgVElNRVJfU0lHTkFMKTsKK30KKworLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL3RpbWVyX2NyZWF0ZS5odG1sCitpbnQgdGltZXJfY3JlYXRlKGNsb2NraWRfdCBjbG9ja19pZCwgc2lnZXZlbnQqIGV2cCwgdGltZXJfdCogdGltZXJfaWQpIHsKKyAgUG9zaXhUaW1lciogdGltZXIgPSByZWludGVycHJldF9jYXN0PFBvc2l4VGltZXIqPihtYWxsb2Moc2l6ZW9mKFBvc2l4VGltZXIpKSk7CisgIGlmICh0aW1lciA9PSBOVUxMKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgdGltZXItPnNpZ2V2X25vdGlmeSA9IChldnAgPT0gTlVMTCkgPyBTSUdFVl9TSUdOQUwgOiBldnAtPnNpZ2V2X25vdGlmeTsKKworICAvLyBJZiBub3QgYSBTSUdFVl9USFJFQUQgdGltZXIsIHRoZSBrZXJuZWwgY2FuIGhhbmRsZSBpdCB3aXRob3V0IG91ciBoZWxwLgorICBpZiAodGltZXItPnNpZ2V2X25vdGlmeSAhPSBTSUdFVl9USFJFQUQpIHsKKyAgICBpZiAoX190aW1lcl9jcmVhdGUoY2xvY2tfaWQsIGV2cCwgJnRpbWVyLT5rZXJuZWxfdGltZXJfaWQpID09IC0xKSB7CisgICAgICBmcmVlKHRpbWVyKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAqdGltZXJfaWQgPSB0aW1lcjsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIC8vIE90aGVyd2lzZSwgdGhpcyBtdXN0IGJlIFNJR0VWX1RIUkVBRCB0aW1lci4uLgorICB0aW1lci0+Y2FsbGJhY2sgPSBldnAtPnNpZ2V2X25vdGlmeV9mdW5jdGlvbjsKKyAgdGltZXItPmNhbGxiYWNrX2FyZ3VtZW50ID0gZXZwLT5zaWdldl92YWx1ZTsKKworICAvLyBDaGVjayBhcmd1bWVudHMgdGhhdCB0aGUga2VybmVsIGRvZXNuJ3QgY2FyZSBhYm91dCBidXQgd2UgZG8uCisgIGlmICh0aW1lci0+Y2FsbGJhY2sgPT0gTlVMTCkgeworICAgIGZyZWUodGltZXIpOworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIC8vIENyZWF0ZSB0aGlzIHRpbWVyJ3MgdGhyZWFkLgorICBwdGhyZWFkX2F0dHJfdCB0aHJlYWRfYXR0cmlidXRlczsKKyAgaWYgKGV2cC0+c2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXMgPT0gTlVMTCkgeworICAgIHB0aHJlYWRfYXR0cl9pbml0KCZ0aHJlYWRfYXR0cmlidXRlcyk7CisgIH0gZWxzZSB7CisgICAgdGhyZWFkX2F0dHJpYnV0ZXMgPSAqcmVpbnRlcnByZXRfY2FzdDxwdGhyZWFkX2F0dHJfdCo+KGV2cC0+c2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXMpOworICB9CisgIHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSgmdGhyZWFkX2F0dHJpYnV0ZXMsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTsKKworICAvLyBXZSBzdGFydCB0aGUgdGhyZWFkIHdpdGggVElNRVJfU0lHTkFMIGJsb2NrZWQgYnkgYmxvY2tpbmcgdGhlIHNpZ25hbCBoZXJlIGFuZCBsZXR0aW5nIGl0CisgIC8vIGluaGVyaXQuIElmIGl0IHRyaWVkIHRvIGJsb2NrIHRoZSBzaWduYWwgaXRzZWxmLCB0aGVyZSB3b3VsZCBiZSBhIHJhY2UuCisgIGtlcm5lbF9zaWdzZXRfdCBzaWdzZXQ7CisgIHNpZ2FkZHNldChzaWdzZXQuZ2V0KCksIFRJTUVSX1NJR05BTCk7CisgIGtlcm5lbF9zaWdzZXRfdCBvbGRfc2lnc2V0OworICBwdGhyZWFkX3NpZ21hc2soU0lHX0JMT0NLLCBzaWdzZXQuZ2V0KCksIG9sZF9zaWdzZXQuZ2V0KCkpOworCisgIGludCByYyA9IHB0aHJlYWRfY3JlYXRlKCZ0aW1lci0+Y2FsbGJhY2tfdGhyZWFkLCAmdGhyZWFkX2F0dHJpYnV0ZXMsIF9fdGltZXJfdGhyZWFkX3N0YXJ0LCB0aW1lcik7CisKKyAgcHRocmVhZF9zaWdtYXNrKFNJR19TRVRNQVNLLCBvbGRfc2lnc2V0LmdldCgpLCBOVUxMKTsKKworICBpZiAocmMgIT0gMCkgeworICAgIGZyZWUodGltZXIpOworICAgIGVycm5vID0gcmM7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgc2lnZXZlbnQgc2UgPSAqZXZwOworICBzZS5zaWdldl9zaWdubyA9IFRJTUVSX1NJR05BTDsKKyAgc2Uuc2lnZXZfbm90aWZ5ID0gU0lHRVZfVEhSRUFEX0lEOworICBzZS5zaWdldl9ub3RpZnlfdGhyZWFkX2lkID0gcHRocmVhZF9nZXR0aWRfbnAodGltZXItPmNhbGxiYWNrX3RocmVhZCk7CisgIGlmIChfX3RpbWVyX2NyZWF0ZShjbG9ja19pZCwgJnNlLCAmdGltZXItPmtlcm5lbF90aW1lcl9pZCkgPT0gLTEpIHsKKyAgICBfX3RpbWVyX3RocmVhZF9zdG9wKHRpbWVyKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICAvLyBHaXZlIHRoZSB0aHJlYWQgYSBtZWFuaW5nZnVsIG5hbWUuCisgIC8vIEl0IGNhbid0IGRvIHRoaXMgaXRzZWxmIGJlY2F1c2UgdGhlIGtlcm5lbCB0aW1lciBpc24ndCBjcmVhdGVkIHVudGlsIGFmdGVyIGl0J3MgcnVubmluZy4KKyAgY2hhciBuYW1lWzMyXTsKKyAgc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiUE9TSVggaW50ZXJ2YWwgdGltZXIgJWQiLCB0b19rZXJuZWxfdGltZXJfaWQodGltZXIpKTsKKyAgcHRocmVhZF9zZXRuYW1lX25wKHRpbWVyLT5jYWxsYmFja190aHJlYWQsIG5hbWUpOworCisgICp0aW1lcl9pZCA9IHRpbWVyOworICByZXR1cm4gMDsKK30KKworLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL3RpbWVyX2RlbGV0ZS5odG1sCitpbnQgdGltZXJfZGVsZXRlKHRpbWVyX3QgaWQpIHsKKyAgaW50IHJjID0gX190aW1lcl9kZWxldGUodG9fa2VybmVsX3RpbWVyX2lkKGlkKSk7CisgIGlmIChyYyA9PSAtMSkgeworICAgIHJldHVybiAtMTsKKyAgfQorCisgIFBvc2l4VGltZXIqIHRpbWVyID0gcmVpbnRlcnByZXRfY2FzdDxQb3NpeFRpbWVyKj4oaWQpOworICBpZiAodGltZXItPnNpZ2V2X25vdGlmeSA9PSBTSUdFVl9USFJFQUQpIHsKKyAgICAvLyBTdG9wcGluZyB0aGUgdGltZXIncyB0aHJlYWQgZnJlZXMgdGhlIHRpbWVyIGRhdGEgd2hlbiBpdCdzIHNhZmUuCisgICAgX190aW1lcl90aHJlYWRfc3RvcCh0aW1lcik7CisgIH0gZWxzZSB7CisgICAgLy8gRm9yIHRpbWVycyB3aXRob3V0IHRocmVhZHMsIHdlIGNhbiBqdXN0IGZyZWUgcmlnaHQgYXdheS4KKyAgICBmcmVlKHRpbWVyKTsKKyAgfQorCisgIHJldHVybiAwOworfQorCisvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvdGltZXJfZ2V0b3ZlcnJ1bi5odG1sCitpbnQgdGltZXJfZ2V0dGltZSh0aW1lcl90IGlkLCBpdGltZXJzcGVjKiB0cykgeworICByZXR1cm4gX190aW1lcl9nZXR0aW1lKHRvX2tlcm5lbF90aW1lcl9pZChpZCksIHRzKTsKK30KKworLy8gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL3RpbWVyX2dldG92ZXJydW4uaHRtbAoraW50IHRpbWVyX3NldHRpbWUodGltZXJfdCBpZCwgaW50IGZsYWdzLCBjb25zdCBpdGltZXJzcGVjKiB0cywgaXRpbWVyc3BlYyogb3RzKSB7CisgIHJldHVybiBfX3RpbWVyX3NldHRpbWUodG9fa2VybmVsX3RpbWVyX2lkKGlkKSwgZmxhZ3MsIHRzLCBvdHMpOworfQorCisvLyBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvdGltZXJfZ2V0b3ZlcnJ1bi5odG1sCitpbnQgdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90IGlkKSB7CisgIHJldHVybiBfX3RpbWVyX2dldG92ZXJydW4odG9fa2VybmVsX3RpbWVyX2lkKGlkKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2FjY2Vzc29yLmggYi9saWJjL2Jpb25pYy9wdGhyZWFkX2FjY2Vzc29yLmgKaW5kZXggMmEzMjBmNi4uZGY0YTVhMiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9hY2Nlc3Nvci5oCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfYWNjZXNzb3IuaApAQCAtMTksMTMgKzE5LDE0IEBACiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKICNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCiAKIGNsYXNzIHB0aHJlYWRfYWNjZXNzb3IgewogIHB1YmxpYzoKICAgZXhwbGljaXQgcHRocmVhZF9hY2Nlc3NvcihwdGhyZWFkX3QgZGVzaXJlZF90aHJlYWQpIHsKICAgICBMb2NrKCk7Ci0gICAgZm9yICh0aHJlYWRfID0gZ1RocmVhZExpc3Q7IHRocmVhZF8gIT0gTlVMTDsgdGhyZWFkXyA9IHRocmVhZF8tPm5leHQpIHsKKyAgICBmb3IgKHRocmVhZF8gPSBnX3RocmVhZF9saXN0OyB0aHJlYWRfICE9IE5VTEw7IHRocmVhZF8gPSB0aHJlYWRfLT5uZXh0KSB7CiAgICAgICBpZiAodGhyZWFkXyA9PSByZWludGVycHJldF9jYXN0PHB0aHJlYWRfaW50ZXJuYWxfdCo+KGRlc2lyZWRfdGhyZWFkKSkgewogICAgICAgICBicmVhazsKICAgICAgIH0KQEAgLTQwLDcgKzQxLDcgQEAKICAgICBpZiAoaXNfbG9ja2VkXykgewogICAgICAgaXNfbG9ja2VkXyA9IGZhbHNlOwogICAgICAgdGhyZWFkXyA9IE5VTEw7Ci0gICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnX3RocmVhZF9saXN0X2xvY2spOwogICAgIH0KICAgfQogCkBAIC01MywxMyArNTQsMTEgQEAKICAgYm9vbCBpc19sb2NrZWRfOwogCiAgIHZvaWQgTG9jaygpIHsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmdUaHJlYWRMaXN0TG9jayk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnX3RocmVhZF9saXN0X2xvY2spOwogICAgIGlzX2xvY2tlZF8gPSB0cnVlOwogICB9CiAKLSAgLy8gRGlzYWxsb3cgY29weSBhbmQgYXNzaWdubWVudC4KLSAgcHRocmVhZF9hY2Nlc3Nvcihjb25zdCBwdGhyZWFkX2FjY2Vzc29yJik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IHB0aHJlYWRfYWNjZXNzb3ImKTsKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKHB0aHJlYWRfYWNjZXNzb3IpOwogfTsKIAogI2VuZGlmIC8vIFBUSFJFQURfQUNDRVNTT1JfSApkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9hdGZvcmsuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9hdGZvcmsuY3BwCmluZGV4IDViZjYzZmIuLmI4NDVmN2QgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B0aHJlYWRfYXRmb3JrLmNwcAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2F0Zm9yay5jcHAKQEAgLTI5LDggKzI5LDYgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KIAotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnQXRGb3JrTGlzdE11dGV4ID0gUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVI7Ci0KIHN0cnVjdCBhdGZvcmtfdCB7CiAgIGF0Zm9ya190KiBuZXh0OwogICBhdGZvcmtfdCogcHJldjsKQEAgLTQ1LDIzICs0MywyMiBAQAogICBhdGZvcmtfdCogbGFzdDsKIH07CiAKLXN0YXRpYyBhdGZvcmtfbGlzdF90IGdBdEZvcmtMaXN0ID0geyBOVUxMLCBOVUxMIH07CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdfYXRmb3JrX2xpc3RfbXV0ZXggPSBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUjsKK3N0YXRpYyBhdGZvcmtfbGlzdF90IGdfYXRmb3JrX2xpc3QgPSB7IE5VTEwsIE5VTEwgfTsKIAogdm9pZCBfX2Jpb25pY19hdGZvcmtfcnVuX3ByZXBhcmUoKSB7Ci0gIC8vIFdlIHdpbGwgbG9jayB0aGlzIGhlcmUsIGFuZCB1bmxvY2sgaXQgaW4gdGhlIHBhcmVudCBhbmQgY2hpbGQgZnVuY3Rpb25zLgorICAvLyBXZSBsb2NrIHRoZSBhdGZvcmsgbGlzdCBoZXJlLCB1bmxvY2sgaXQgaW4gdGhlIHBhcmVudCwgYW5kIHJlc2V0IGl0IGluIHRoZSBjaGlsZC4KICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgbm9ib2R5IGNhbiBtb2RpZnkgdGhlIGhhbmRsZXIgYXJyYXkgYmV0d2VlbiB0aGUgY2FsbHMKICAgLy8gdG8gdGhlIHByZXBhcmUgYW5kIHBhcmVudC9jaGlsZCBoYW5kbGVycy4KICAgLy8KLSAgLy8gVE9ETzogSWYgYSBoYW5kbGVyIG11Y2tzIHdpdGggdGhlIGxpc3QsIGl0IGNvdWxkIGNhdXNlIHByb2JsZW1zLiAgUmlnaHQKLSAgLy8gICAgICAgbm93IGl0J3Mgb2sgYmVjYXVzZSBhbGwgdGhleSBjYW4gZG8gaXMgYWRkIG5ldyBpdGVtcyB0byB0aGUgZW5kCi0gIC8vICAgICAgIG9mIHRoZSBsaXN0LCBidXQgaWYvd2hlbiB3ZSBpbXBsZW1lbnQgY2xlYW51cCBpbiBkbGNsb3NlKCkgdGhpbmdzCi0gIC8vICAgICAgIHdpbGwgZ2V0IG1vcmUgaW50ZXJlc3RpbmcuLi4KLSAgcHRocmVhZF9tdXRleF9sb2NrKCZnQXRGb3JrTGlzdE11dGV4KTsKKyAgLy8gVE9ETzogSWYgYSBoYW5kbGVyIHRyaWVzIHRvIG11dGF0ZSB0aGUgbGlzdCwgdGhleSdsbCBibG9jay4gV2Ugc2hvdWxkIHByb2JhYmx5IGNvcHkKKyAgLy8gdGhlIGxpc3QgYmVmb3JlIGZvcmtpbmcsIGFuZCBoYXZlIHByZXBhcmUsIHBhcmVudCwgYW5kIGNoaWxkIGFsbCB3b3JrIG9uIHRoZSBjb25zaXN0ZW50IGNvcHkuCisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ19hdGZvcmtfbGlzdF9tdXRleCk7CiAKICAgLy8gQ2FsbCBwdGhyZWFkX2F0Zm9yaygpIHByZXBhcmUgaGFuZGxlcnMuIFBPU0lYIHN0YXRlcyB0aGF0IHRoZSBwcmVwYXJlCiAgIC8vIGhhbmRsZXJzIHNob3VsZCBiZSBjYWxsZWQgaW4gdGhlIHJldmVyc2Ugb3JkZXIgb2YgdGhlIHBhcmVudC9jaGlsZAogICAvLyBoYW5kbGVycywgc28gd2UgaXRlcmF0ZSBiYWNrd2FyZHMuCi0gIGZvciAoYXRmb3JrX3QqIGl0ID0gZ0F0Rm9ya0xpc3QubGFzdDsgaXQgIT0gTlVMTDsgaXQgPSBpdC0+cHJldikgeworICBmb3IgKGF0Zm9ya190KiBpdCA9IGdfYXRmb3JrX2xpc3QubGFzdDsgaXQgIT0gTlVMTDsgaXQgPSBpdC0+cHJldikgewogICAgIGlmIChpdC0+cHJlcGFyZSAhPSBOVUxMKSB7CiAgICAgICBpdC0+cHJlcGFyZSgpOwogICAgIH0KQEAgLTY5LDI2ICs2NiwyMyBAQAogfQogCiB2b2lkIF9fYmlvbmljX2F0Zm9ya19ydW5fY2hpbGQoKSB7Ci0gIGZvciAoYXRmb3JrX3QqIGl0ID0gZ0F0Rm9ya0xpc3QuZmlyc3Q7IGl0ICE9IE5VTEw7IGl0ID0gaXQtPm5leHQpIHsKKyAgZm9yIChhdGZvcmtfdCogaXQgPSBnX2F0Zm9ya19saXN0LmZpcnN0OyBpdCAhPSBOVUxMOyBpdCA9IGl0LT5uZXh0KSB7CiAgICAgaWYgKGl0LT5jaGlsZCAhPSBOVUxMKSB7CiAgICAgICBpdC0+Y2hpbGQoKTsKICAgICB9CiAgIH0KIAotICBwdGhyZWFkX211dGV4YXR0cl90IGF0dHI7Ci0gIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpOwotICBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZhdHRyLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7Ci0gIHB0aHJlYWRfbXV0ZXhfaW5pdCgmZ0F0Rm9ya0xpc3RNdXRleCwgJmF0dHIpOworICBnX2F0Zm9ya19saXN0X211dGV4ID0gUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVI7CiB9CiAKIHZvaWQgX19iaW9uaWNfYXRmb3JrX3J1bl9wYXJlbnQoKSB7Ci0gIGZvciAoYXRmb3JrX3QqIGl0ID0gZ0F0Rm9ya0xpc3QuZmlyc3Q7IGl0ICE9IE5VTEw7IGl0ID0gaXQtPm5leHQpIHsKKyAgZm9yIChhdGZvcmtfdCogaXQgPSBnX2F0Zm9ya19saXN0LmZpcnN0OyBpdCAhPSBOVUxMOyBpdCA9IGl0LT5uZXh0KSB7CiAgICAgaWYgKGl0LT5wYXJlbnQgIT0gTlVMTCkgewogICAgICAgaXQtPnBhcmVudCgpOwogICAgIH0KICAgfQogCi0gIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnQXRGb3JrTGlzdE11dGV4KTsKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmdfYXRmb3JrX2xpc3RfbXV0ZXgpOwogfQogCiBpbnQgcHRocmVhZF9hdGZvcmsodm9pZCAoKnByZXBhcmUpKHZvaWQpLCB2b2lkICgqcGFyZW50KSh2b2lkKSwgdm9pZCgqY2hpbGQpKHZvaWQpKSB7CkBAIC0xMDEsMjAgKzk1LDIwIEBACiAgIGVudHJ5LT5wYXJlbnQgPSBwYXJlbnQ7CiAgIGVudHJ5LT5jaGlsZCA9IGNoaWxkOwogCi0gIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ0F0Rm9ya0xpc3RNdXRleCk7CisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ19hdGZvcmtfbGlzdF9tdXRleCk7CiAKICAgLy8gQXBwZW5kICdlbnRyeScgdG8gdGhlIGxpc3QuCiAgIGVudHJ5LT5uZXh0ID0gTlVMTDsKLSAgZW50cnktPnByZXYgPSBnQXRGb3JrTGlzdC5sYXN0OworICBlbnRyeS0+cHJldiA9IGdfYXRmb3JrX2xpc3QubGFzdDsKICAgaWYgKGVudHJ5LT5wcmV2ICE9IE5VTEwpIHsKICAgICBlbnRyeS0+cHJldi0+bmV4dCA9IGVudHJ5OwogICB9Ci0gIGlmIChnQXRGb3JrTGlzdC5maXJzdCA9PSBOVUxMKSB7Ci0gICAgZ0F0Rm9ya0xpc3QuZmlyc3QgPSBlbnRyeTsKKyAgaWYgKGdfYXRmb3JrX2xpc3QuZmlyc3QgPT0gTlVMTCkgeworICAgIGdfYXRmb3JrX2xpc3QuZmlyc3QgPSBlbnRyeTsKICAgfQotICBnQXRGb3JrTGlzdC5sYXN0ID0gZW50cnk7CisgIGdfYXRmb3JrX2xpc3QubGFzdCA9IGVudHJ5OwogCi0gIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnQXRGb3JrTGlzdE11dGV4KTsKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmdfYXRmb3JrX2xpc3RfbXV0ZXgpOwogCiAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9hdHRyLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfYXR0ci5jcHAKaW5kZXggZmRmMjk2NS4uYzkzOTcwYSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9hdHRyLmNwcAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2F0dHIuY3BwCkBAIC0yOCw2ICsyOCwxMyBAQAogCiAjaW5jbHVkZSA8cHRocmVhZC5oPgogCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfc3RyaW5nX3V0aWxzLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9FcnJub1Jlc3RvcmVyLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKICNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCiAKIGludCBwdGhyZWFkX2F0dHJfaW5pdChwdGhyZWFkX2F0dHJfdCogYXR0cikgewpAQCAtOTAsMjEgKzk3LDggQEAKIH0KIAogaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUoY29uc3QgcHRocmVhZF9hdHRyX3QqIGF0dHIsIHNpemVfdCogc3RhY2tfc2l6ZSkgewotICAqc3RhY2tfc2l6ZSA9IGF0dHItPnN0YWNrX3NpemU7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkcihwdGhyZWFkX2F0dHJfdCosIHZvaWQqKSB7Ci0gIC8vIFRoaXMgd2FzIHJlbW92ZWQgZnJvbSBQT1NJWC4xLTIwMDgsIGFuZCBpcyBub3QgaW1wbGVtZW50ZWQgb24gYmlvbmljLgotICAvLyBOZWVkZWQgZm9yIEFCSSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE5ESy4KLSAgcmV0dXJuIEVOT1NZUzsKLX0KLQotaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIoY29uc3QgcHRocmVhZF9hdHRyX3QqIGF0dHIsIHZvaWQqKiBzdGFja19hZGRyKSB7Ci0gIC8vIFRoaXMgd2FzIHJlbW92ZWQgZnJvbSBQT1NJWC4xLTIwMDguCi0gIC8vIE5lZWRlZCBmb3IgQUJJIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTkRLLgotICAqc3RhY2tfYWRkciA9IChjaGFyKilhdHRyLT5zdGFja19iYXNlICsgYXR0ci0+c3RhY2tfc2l6ZTsKLSAgcmV0dXJuIDA7CisgIHZvaWQqIHVudXNlZDsKKyAgcmV0dXJuIHB0aHJlYWRfYXR0cl9nZXRzdGFjayhhdHRyLCAmdW51c2VkLCBzdGFja19zaXplKTsKIH0KIAogaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFjayhwdGhyZWFkX2F0dHJfdCogYXR0ciwgdm9pZCogc3RhY2tfYmFzZSwgc2l6ZV90IHN0YWNrX3NpemUpIHsKQEAgLTExOSw3ICsxMTMsNDMgQEAKICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgX19wdGhyZWFkX2F0dHJfZ2V0c3RhY2tfbWFpbl90aHJlYWQodm9pZCoqIHN0YWNrX2Jhc2UsIHNpemVfdCogc3RhY2tfc2l6ZSkgeworICBFcnJub1Jlc3RvcmVyIGVycm5vX3Jlc3RvcmVyOworCisgIHJsaW1pdCBzdGFja19saW1pdDsKKyAgaWYgKGdldHJsaW1pdChSTElNSVRfU1RBQ0ssICZzdGFja19saW1pdCkgPT0gLTEpIHsKKyAgICByZXR1cm4gZXJybm87CisgIH0KKworICAvLyBJZiB0aGUgY3VycmVudCBSTElNSVRfU1RBQ0sgaXMgUkxJTV9JTkZJTklUWSwgb25seSBhZG1pdCB0byBhbiA4TWlCIHN0YWNrIGZvciBzYW5pdHkncyBzYWtlLgorICBpZiAoc3RhY2tfbGltaXQucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkgeworICAgIHN0YWNrX2xpbWl0LnJsaW1fY3VyID0gOCAqIDEwMjQgKiAxMDI0OworICB9CisKKyAgLy8gSXQgZG9lc24ndCBtYXR0ZXIgd2hpY2ggdGhyZWFkIHdlIGFyZTsgd2UncmUganVzdCBsb29raW5nIGZvciAiW3N0YWNrXSIuCisgIEZJTEUqIGZwID0gZm9wZW4oIi9wcm9jL3NlbGYvbWFwcyIsICJyZSIpOworICBpZiAoZnAgPT0gTlVMTCkgeworICAgIHJldHVybiBlcnJubzsKKyAgfQorICBjaGFyIGxpbmVbQlVGU0laXTsKKyAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApICE9IE5VTEwpIHsKKyAgICBpZiAoZW5kc193aXRoKGxpbmUsICIgW3N0YWNrXVxuIikpIHsKKyAgICAgIHVpbnRwdHJfdCBsbywgaGk7CisgICAgICBpZiAoc3NjYW5mKGxpbmUsICIlIiBTQ054UFRSICItJSIgU0NOeFBUUiwgJmxvLCAmaGkpID09IDIpIHsKKyAgICAgICAgKnN0YWNrX3NpemUgPSBzdGFja19saW1pdC5ybGltX2N1cjsKKyAgICAgICAgKnN0YWNrX2Jhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihoaSAtICpzdGFja19zaXplKTsKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICB9CisgIF9fbGliY19mYXRhbCgiTm8gW3N0YWNrXSBsaW5lIGZvdW5kIGluIC9wcm9jL3NlbGYvbWFwcyEiKTsKK30KKwogaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFjayhjb25zdCBwdGhyZWFkX2F0dHJfdCogYXR0ciwgdm9pZCoqIHN0YWNrX2Jhc2UsIHNpemVfdCogc3RhY2tfc2l6ZSkgeworICBpZiAoKGF0dHItPmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfTUFJTl9USFJFQUQpICE9IDApIHsKKyAgICByZXR1cm4gX19wdGhyZWFkX2F0dHJfZ2V0c3RhY2tfbWFpbl90aHJlYWQoc3RhY2tfYmFzZSwgc3RhY2tfc2l6ZSk7CisgIH0KICAgKnN0YWNrX2Jhc2UgPSBhdHRyLT5zdGFja19iYXNlOwogICAqc3RhY2tfc2l6ZSA9IGF0dHItPnN0YWNrX3NpemU7CiAgIHJldHVybiAwOwpAQCAtMTM1LDkgKzE2NSw4IEBACiAgIHJldHVybiAwOwogfQogCi1pbnQgcHRocmVhZF9nZXRhdHRyX25wKHB0aHJlYWRfdCB0aGlkLCBwdGhyZWFkX2F0dHJfdCogYXR0cikgewotICBwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QqKSB0aGlkOwotICAqYXR0ciA9IHRocmVhZC0+YXR0cjsKK2ludCBwdGhyZWFkX2dldGF0dHJfbnAocHRocmVhZF90IHQsIHB0aHJlYWRfYXR0cl90KiBhdHRyKSB7CisgICphdHRyID0gcmVpbnRlcnByZXRfY2FzdDxwdGhyZWFkX2ludGVybmFsX3QqPih0KS0+YXR0cjsKICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfY29uZC5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2NvbmQuY3BwCmluZGV4IDQ1ODNjZWYuLmU2MjNiNjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B0aHJlYWRfY29uZC5jcHAKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9jb25kLmNwcApAQCAtMzAsOCArMzAsOCBAQAogCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzeXMvYXRvbWljcy5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgpAQCAtNDAsNTAgKzQwLDY0IEBACiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfZnV0ZXguaCIKICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190aW1lX2NvbnZlcnNpb25zLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfdGxzLmgiCi0jaW5jbHVkZSAicHJpdmF0ZS90aHJlYWRfcHJpdmF0ZS5oIgorCisvLyBXZSB1c2Ugb25lIGJpdCBpbiBwdGhyZWFkX2NvbmRhdHRyX3QgKGxvbmcpIHZhbHVlcyBhcyB0aGUgJ3NoYXJlZCcgZmxhZworLy8gYW5kIG9uZSBiaXQgZm9yIHRoZSBjbG9jayB0eXBlIChDTE9DS19SRUFMVElNRSBpcyAoKGNsb2NraWRfdCkgMSksIGFuZAorLy8gQ0xPQ0tfTU9OT1RPTklDIGlzICgoY2xvY2tpZF90KSAwKS4pLiBUaGUgcmVzdCBvZiB0aGUgYml0cyBhcmUgYSBjb3VudGVyLgorLy8KKy8vIFRoZSAndmFsdWUnIGZpZWxkIHB0aHJlYWRfY29uZF90IGhhcyB0aGUgc2FtZSBsYXlvdXQuCisKKyNkZWZpbmUgQ09ORF9TSEFSRURfTUFTSyAweDAwMDEKKyNkZWZpbmUgQ09ORF9DTE9DS19NQVNLIDB4MDAwMgorI2RlZmluZSBDT05EX0NPVU5URVJfU1RFUCAweDAwMDQKKyNkZWZpbmUgQ09ORF9GTEFHU19NQVNLIChDT05EX1NIQVJFRF9NQVNLIHwgQ09ORF9DTE9DS19NQVNLKQorI2RlZmluZSBDT05EX0NPVU5URVJfTUFTSyAofkNPTkRfRkxBR1NfTUFTSykKKworI2RlZmluZSBDT05EX0lTX1NIQVJFRChjKSAoKChjKSAmIENPTkRfU0hBUkVEX01BU0spICE9IDApCisjZGVmaW5lIENPTkRfR0VUX0NMT0NLKGMpICgoKGMpICYgQ09ORF9DTE9DS19NQVNLKSA+PiAxKQorI2RlZmluZSBDT05EX1NFVF9DTE9DSyhhdHRyLCBjKSAoKGF0dHIpIHwgKGMgPDwgMSkpCisKIAogaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdChwdGhyZWFkX2NvbmRhdHRyX3QqIGF0dHIpIHsKLSAgaWYgKGF0dHIgPT0gTlVMTCkgewotICAgIHJldHVybiBFSU5WQUw7Ci0gIH0KLSAgKmF0dHIgPSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURTsKKyAgKmF0dHIgPSAwOworICAqYXR0ciB8PSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURTsKKyAgKmF0dHIgfD0gKENMT0NLX1JFQUxUSU1FIDw8IDEpOwogICByZXR1cm4gMDsKIH0KIAogaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZChjb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QqIGF0dHIsIGludCogcHNoYXJlZCkgewotICBpZiAoYXR0ciA9PSBOVUxMIHx8IHBzaGFyZWQgPT0gTlVMTCkgewotICAgIHJldHVybiBFSU5WQUw7Ci0gIH0KLSAgKnBzaGFyZWQgPSAqYXR0cjsKKyAgKnBzaGFyZWQgPSBzdGF0aWNfY2FzdDxpbnQ+KENPTkRfSVNfU0hBUkVEKCphdHRyKSk7CiAgIHJldHVybiAwOwogfQogCiBpbnQgcHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkKHB0aHJlYWRfY29uZGF0dHJfdCogYXR0ciwgaW50IHBzaGFyZWQpIHsKLSAgaWYgKGF0dHIgPT0gTlVMTCkgewotICAgIHJldHVybiBFSU5WQUw7Ci0gIH0KICAgaWYgKHBzaGFyZWQgIT0gUFRIUkVBRF9QUk9DRVNTX1NIQVJFRCAmJiBwc2hhcmVkICE9IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFKSB7CiAgICAgcmV0dXJuIEVJTlZBTDsKICAgfQotICAqYXR0ciA9IHBzaGFyZWQ7CisKKyAgKmF0dHIgfD0gcHNoYXJlZDsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2NvbmRhdHRyX2dldGNsb2NrKGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCogYXR0ciwgY2xvY2tpZF90KiBjbG9jaykgeworICAqY2xvY2sgPSBDT05EX0dFVF9DTE9DSygqYXR0cik7CisgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9jb25kYXR0cl9zZXRjbG9jayhwdGhyZWFkX2NvbmRhdHRyX3QqIGF0dHIsIGNsb2NraWRfdCBjbG9jaykgeworICBpZiAoY2xvY2sgIT0gQ0xPQ0tfTU9OT1RPTklDICYmIGNsb2NrICE9IENMT0NLX1JFQUxUSU1FKSB7CisgICAgcmV0dXJuIEVJTlZBTDsKKyAgfQorCisgICphdHRyID0gQ09ORF9TRVRfQ0xPQ0soKmF0dHIsIGNsb2NrKTsKICAgcmV0dXJuIDA7CiB9CiAKIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kocHRocmVhZF9jb25kYXR0cl90KiBhdHRyKSB7Ci0gIGlmIChhdHRyID09IE5VTEwpIHsKLSAgICByZXR1cm4gRUlOVkFMOwotICB9CiAgICphdHRyID0gMHhkZWFkYTExZDsKICAgcmV0dXJuIDA7CiB9CiAKLS8vIFdlIHVzZSBvbmUgYml0IGluIGNvbmRpdGlvbiB2YXJpYWJsZSB2YWx1ZXMgYXMgdGhlICdzaGFyZWQnIGZsYWcKLS8vIFRoZSByZXN0IGlzIGEgY291bnRlci4KLSNkZWZpbmUgQ09ORF9TSEFSRURfTUFTSyAgICAgICAgMHgwMDAxCi0jZGVmaW5lIENPTkRfQ09VTlRFUl9JTkNSRU1FTlQgIDB4MDAwMgotI2RlZmluZSBDT05EX0NPVU5URVJfTUFTSyAgICAgICAofkNPTkRfU0hBUkVEX01BU0spCi0KLSNkZWZpbmUgQ09ORF9JU19TSEFSRUQoYykgICgoKGMpLT52YWx1ZSAmIENPTkRfU0hBUkVEX01BU0spICE9IDApCiAKIC8vIFhYWCAqdGVjaG5pY2FsbHkqIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBhbGxvdwogLy8gWFhYIGEgc2lnbmFsIHRvIGJlIG1pc3NlZC4gIElmIHRocmVhZCBBIGlzIHByZWVtcHRlZCBpbiBfd2FpdCgpCkBAIC05MywyNCArMTA3LDE2IEBACiAvLyBYWFggdGhlbiB0aGUgc2lnbmFsIHdpbGwgYmUgbG9zdC4KIAogaW50IHB0aHJlYWRfY29uZF9pbml0KHB0aHJlYWRfY29uZF90KiBjb25kLCBjb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QqIGF0dHIpIHsKLSAgaWYgKGNvbmQgPT0gTlVMTCkgewotICAgIHJldHVybiBFSU5WQUw7Ci0gIH0KLQotICBjb25kLT52YWx1ZSA9IDA7Ci0KLSAgaWYgKGF0dHIgIT0gTlVMTCAmJiAqYXR0ciA9PSBQVEhSRUFEX1BST0NFU1NfU0hBUkVEKSB7Ci0gICAgY29uZC0+dmFsdWUgfD0gQ09ORF9TSEFSRURfTUFTSzsKKyAgaWYgKGF0dHIgIT0gTlVMTCkgeworICAgIGNvbmQtPnZhbHVlID0gKCphdHRyICYgQ09ORF9GTEFHU19NQVNLKTsKKyAgfSBlbHNlIHsKKyAgICBjb25kLT52YWx1ZSA9IDA7CiAgIH0KIAogICByZXR1cm4gMDsKIH0KIAogaW50IHB0aHJlYWRfY29uZF9kZXN0cm95KHB0aHJlYWRfY29uZF90KiBjb25kKSB7Ci0gIGlmIChjb25kID09IE5VTEwpIHsKLSAgICByZXR1cm4gRUlOVkFMOwotICB9Ci0KICAgY29uZC0+dmFsdWUgPSAweGRlYWRjMDRkOwogICByZXR1cm4gMDsKIH0KQEAgLTExOSwxNCArMTI1LDEwIEBACiAvLyBwdGhyZWFkX2NvbmRfc2lnbmFsIHRvIGF0b21pY2FsbHkgZGVjcmVtZW50IHRoZSBjb3VudGVyCiAvLyB0aGVuIHdha2UgdXAgJ2NvdW50ZXInIHRocmVhZHMuCiBzdGF0aWMgaW50IF9fcHRocmVhZF9jb25kX3B1bHNlKHB0aHJlYWRfY29uZF90KiBjb25kLCBpbnQgY291bnRlcikgewotICBpZiAoX19wcmVkaWN0X2ZhbHNlKGNvbmQgPT0gTlVMTCkpIHsKLSAgICByZXR1cm4gRUlOVkFMOwotICB9Ci0KLSAgbG9uZyBmbGFncyA9IChjb25kLT52YWx1ZSAmIH5DT05EX0NPVU5URVJfTUFTSyk7CisgIGludCBmbGFncyA9IChjb25kLT52YWx1ZSAmIENPTkRfRkxBR1NfTUFTSyk7CiAgIHdoaWxlICh0cnVlKSB7Ci0gICAgbG9uZyBvbGRfdmFsdWUgPSBjb25kLT52YWx1ZTsKLSAgICBsb25nIG5ld192YWx1ZSA9ICgob2xkX3ZhbHVlIC0gQ09ORF9DT1VOVEVSX0lOQ1JFTUVOVCkgJiBDT05EX0NPVU5URVJfTUFTSykgfCBmbGFnczsKKyAgICBpbnQgb2xkX3ZhbHVlID0gY29uZC0+dmFsdWU7CisgICAgaW50IG5ld192YWx1ZSA9ICgob2xkX3ZhbHVlIC0gQ09ORF9DT1VOVEVSX1NURVApICYgQ09ORF9DT1VOVEVSX01BU0spIHwgZmxhZ3M7CiAgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcob2xkX3ZhbHVlLCBuZXdfdmFsdWUsICZjb25kLT52YWx1ZSkgPT0gMCkgewogICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQyLDcgKzE0NCw3IEBACiAgIC8vIGhvbGQgdGhlIG11dGV4LCB0aGV5J3JlIHN1YmplY3QgdG8gcmFjZSBjb25kaXRpb25zIGFueXdheS4KICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwogCi0gIF9fZnV0ZXhfd2FrZV9leCgmY29uZC0+dmFsdWUsIENPTkRfSVNfU0hBUkVEKGNvbmQpLCBjb3VudGVyKTsKKyAgX19mdXRleF93YWtlX2V4KCZjb25kLT52YWx1ZSwgQ09ORF9JU19TSEFSRUQoY29uZC0+dmFsdWUpLCBjb3VudGVyKTsKICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE1MSw3ICsxNTMsNyBAQAogICBpbnQgb2xkX3ZhbHVlID0gY29uZC0+dmFsdWU7CiAKICAgcHRocmVhZF9tdXRleF91bmxvY2sobXV0ZXgpOwotICBpbnQgc3RhdHVzID0gX19mdXRleF93YWl0X2V4KCZjb25kLT52YWx1ZSwgQ09ORF9JU19TSEFSRUQoY29uZCksIG9sZF92YWx1ZSwgcmVsdGltZSk7CisgIGludCBzdGF0dXMgPSBfX2Z1dGV4X3dhaXRfZXgoJmNvbmQtPnZhbHVlLCBDT05EX0lTX1NIQVJFRChjb25kLT52YWx1ZSksIG9sZF92YWx1ZSwgcmVsdGltZSk7CiAgIHB0aHJlYWRfbXV0ZXhfbG9jayhtdXRleCk7CiAKICAgaWYgKHN0YXR1cyA9PSAtRVRJTUVET1VUKSB7CkBAIC0xNjYsNyArMTY4LDcgQEAKICAgdGltZXNwZWMqIHRzcDsKIAogICBpZiAoYWJzdGltZSAhPSBOVUxMKSB7Ci0gICAgaWYgKF9fdGltZXNwZWNfdG9fYWJzb2x1dGUoJnRzLCBhYnN0aW1lLCBjbG9jaykgPCAwKSB7CisgICAgaWYgKF9fdGltZXNwZWNfZnJvbV9hYnNvbHV0ZSgmdHMsIGFic3RpbWUsIGNsb2NrKSA8IDApIHsKICAgICAgIHJldHVybiBFVElNRURPVVQ7CiAgICAgfQogICAgIHRzcCA9ICZ0czsKQEAgLTE4NiwyOCArMTg4LDMwIEBACiB9CiAKIGludCBwdGhyZWFkX2NvbmRfd2FpdChwdGhyZWFkX2NvbmRfdCogY29uZCwgcHRocmVhZF9tdXRleF90KiBtdXRleCkgewotICByZXR1cm4gX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0KGNvbmQsIG11dGV4LCBOVUxMLCBDTE9DS19SRUFMVElNRSk7CisgIHJldHVybiBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXQoY29uZCwgbXV0ZXgsIE5VTEwsIENPTkRfR0VUX0NMT0NLKGNvbmQtPnZhbHVlKSk7CiB9CiAKIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KHB0aHJlYWRfY29uZF90ICpjb25kLCBwdGhyZWFkX211dGV4X3QgKiBtdXRleCwgY29uc3QgdGltZXNwZWMgKmFic3RpbWUpIHsKLSAgcmV0dXJuIF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdChjb25kLCBtdXRleCwgYWJzdGltZSwgQ0xPQ0tfUkVBTFRJTUUpOworICByZXR1cm4gX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0KGNvbmQsIG11dGV4LCBhYnN0aW1lLCBDT05EX0dFVF9DTE9DSyhjb25kLT52YWx1ZSkpOwogfQogCi0vLyBUT0RPOiB0aGlzIGV4aXN0cyBvbmx5IGZvciBiYWNrd2FyZCBiaW5hcnkgY29tcGF0aWJpbGl0eS4KLWludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0X21vbm90b25pYyhwdGhyZWFkX2NvbmRfdCogY29uZCwgcHRocmVhZF9tdXRleF90KiBtdXRleCwgY29uc3QgdGltZXNwZWMqIGFic3RpbWUpIHsKKyNpZiAhZGVmaW5lZChfX0xQNjRfXykKKy8vIFRPRE86IHRoaXMgZXhpc3RzIG9ubHkgZm9yIGJhY2t3YXJkIGJpbmFyeSBjb21wYXRpYmlsaXR5IG9uIDMyIGJpdCBwbGF0Zm9ybXMuCitleHRlcm4gIkMiIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0X21vbm90b25pYyhwdGhyZWFkX2NvbmRfdCogY29uZCwgcHRocmVhZF9tdXRleF90KiBtdXRleCwgY29uc3QgdGltZXNwZWMqIGFic3RpbWUpIHsKICAgcmV0dXJuIF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdChjb25kLCBtdXRleCwgYWJzdGltZSwgQ0xPQ0tfTU9OT1RPTklDKTsKIH0KIAotaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXRfbW9ub3RvbmljX25wKHB0aHJlYWRfY29uZF90KiBjb25kLCBwdGhyZWFkX211dGV4X3QqIG11dGV4LCBjb25zdCB0aW1lc3BlYyogYWJzdGltZSkgeworZXh0ZXJuICJDIiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdF9tb25vdG9uaWNfbnAocHRocmVhZF9jb25kX3QqIGNvbmQsIHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIGNvbnN0IHRpbWVzcGVjKiBhYnN0aW1lKSB7CiAgIHJldHVybiBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXQoY29uZCwgbXV0ZXgsIGFic3RpbWUsIENMT0NLX01PTk9UT05JQyk7CiB9CiAKLWludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlbGF0aXZlX25wKHB0aHJlYWRfY29uZF90KiBjb25kLCBwdGhyZWFkX211dGV4X3QqIG11dGV4LCBjb25zdCB0aW1lc3BlYyogcmVsdGltZSkgeworZXh0ZXJuICJDIiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdF9yZWxhdGl2ZV9ucChwdGhyZWFkX2NvbmRfdCogY29uZCwgcHRocmVhZF9tdXRleF90KiBtdXRleCwgY29uc3QgdGltZXNwZWMqIHJlbHRpbWUpIHsKICAgcmV0dXJuIF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdF9yZWxhdGl2ZShjb25kLCBtdXRleCwgcmVsdGltZSk7CiB9CiAKLWludCBwdGhyZWFkX2NvbmRfdGltZW91dF9ucChwdGhyZWFkX2NvbmRfdCogY29uZCwgcHRocmVhZF9tdXRleF90KiBtdXRleCwgdW5zaWduZWQgbXMpIHsKK2V4dGVybiAiQyIgaW50IHB0aHJlYWRfY29uZF90aW1lb3V0X25wKHB0aHJlYWRfY29uZF90KiBjb25kLCBwdGhyZWFkX211dGV4X3QqIG11dGV4LCB1bnNpZ25lZCBtcykgewogICB0aW1lc3BlYyB0czsKICAgdGltZXNwZWNfZnJvbV9tcyh0cywgbXMpOwogICByZXR1cm4gX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlbGF0aXZlKGNvbmQsIG11dGV4LCAmdHMpOwogfQorI2VuZGlmIC8vICFkZWZpbmVkKF9fTFA2NF9fKQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9jcmVhdGUuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9jcmVhdGUuY3BwCmluZGV4IGI3OTBlMmIuLmZjOGFmYTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B0aHJlYWRfY3JlYXRlLmNwcAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2NyZWF0ZS5jcHAKQEAgLTMwLDQxICszMCwzMiBAQAogCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgogCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfc3NwLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfdGxzLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJwcml2YXRlL3RocmVhZF9wcml2YXRlLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9FcnJub1Jlc3RvcmVyLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9TY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIuaCIKIAotZXh0ZXJuICJDIiBwaWRfdCBfX2Jpb25pY19jbG9uZSh1aW50MzJfdCBmbGFncywgdm9pZCogY2hpbGRfc3RhY2ssIGludCogcGFyZW50X3RpZCwgdm9pZCogdGxzLCBpbnQqIGNoaWxkX3RpZCwgaW50ICgqZm4pKHZvaWQqKSwgdm9pZCogYXJnKTsKLWV4dGVybiAiQyIgaW50IF9fc2V0X3Rscyh2b2lkKik7Ci0KLS8vIFVzZWQgYnkgZ2RiIHRvIHRyYWNrIHRocmVhZCBjcmVhdGlvbi4gU2VlIGxpYnRocmVhZF9kYi4KLSNpZmRlZiBfX2kzODZfXwotZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpIF9fYXR0cmlidXRlX18oKGZhc3RjYWxsKSkgdm9pZCBfdGhyZWFkX2NyZWF0ZWRfaG9vayhwaWRfdCkge30KLSNlbHNlCi1leHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgdm9pZCBfdGhyZWFkX2NyZWF0ZWRfaG9vayhwaWRfdCkge30KKy8vIHg4NiB1c2VzIHNlZ21lbnQgZGVzY3JpcHRvcnMgcmF0aGVyIHRoYW4gYSBkaXJlY3QgcG9pbnRlciB0byBUTFMuCisjaWYgX19pMzg2X18KKyNpbmNsdWRlIDxhc20vbGR0Lmg+CitleHRlcm4gIkMiIF9fTElCQ19ISURERU5fXyB2b2lkIF9faW5pdF91c2VyX2Rlc2Moc3RydWN0IHVzZXJfZGVzYyosIGludCwgdm9pZCopOwogI2VuZGlmCiAKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgZ1B0aHJlYWRTdGFja0NyZWF0aW9uTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0KLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgZ0RlYnVnZ2VyTm90aWZpY2F0aW9uTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CitleHRlcm4gIkMiIGludCBfX2lzdGhyZWFkZWQ7CiAKIC8vIFRoaXMgY29kZSBpcyB1c2VkIGJvdGggYnkgZWFjaCBuZXcgcHRocmVhZCBhbmQgdGhlIGNvZGUgdGhhdCBpbml0aWFsaXplcyB0aGUgbWFpbiB0aHJlYWQuCiB2b2lkIF9faW5pdF90bHMocHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQpIHsKLSAgLy8gWmVyby1pbml0aWFsaXplIGFsbCB0aGUgc2xvdHMgYWZ0ZXIgVExTX1NMT1RfU0VMRiBhbmQgVExTX1NMT1RfVEhSRUFEX0lELgotICBmb3IgKHNpemVfdCBpID0gVExTX1NMT1RfRVJSTk87IGkgPCBCSU9OSUNfVExTX1NMT1RTOyArK2kpIHsKLSAgICB0aHJlYWQtPnRsc1tpXSA9IE5VTEw7CisgIGlmICh0aHJlYWQtPnVzZXJfYWxsb2NhdGVkX3N0YWNrKCkpIHsKKyAgICAvLyBXZSBkb24ndCBrbm93IHdoZXJlIHRoZSB1c2VyIGdvdCB0aGVpciBzdGFjaywgc28gYXNzdW1lIHRoZSB3b3JzdCBhbmQgemVybyB0aGUgVExTIGFyZWEuCisgICAgbWVtc2V0KCZ0aHJlYWQtPnRsc1swXSwgMCwgQklPTklDX1RMU19TTE9UUyAqIHNpemVvZih2b2lkKikpOwogICB9CiAKLSNpZiBkZWZpbmVkKF9faTM4Nl9fKQotICBfX3NldF90bHModGhyZWFkLT50bHMpOwotI2VuZGlmCi0KICAgLy8gU2xvdCAwIG11c3QgcG9pbnQgdG8gaXRzZWxmLiBUaGUgeDg2IExpbnV4IGtlcm5lbCByZWFkcyB0aGUgVExTIGZyb20gJWZzOjAuCiAgIHRocmVhZC0+dGxzW1RMU19TTE9UX1NFTEZdID0gdGhyZWFkLT50bHM7CiAgIHRocmVhZC0+dGxzW1RMU19TTE9UX1RIUkVBRF9JRF0gPSB0aHJlYWQ7CkBAIC03NSw3ICs2Niw3IEBACiB2b2lkIF9faW5pdF9hbHRlcm5hdGVfc2lnbmFsX3N0YWNrKHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkKSB7CiAgIC8vIENyZWF0ZSBhbmQgc2V0IGFuIGFsdGVybmF0ZSBzaWduYWwgc3RhY2suCiAgIHN0YWNrX3Qgc3M7Ci0gIHNzLnNzX3NwID0gbW1hcChOVUxMLCBTSUdTVEtTWiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIDAsIDApOworICBzcy5zc19zcCA9IG1tYXAoTlVMTCwgU0lHU1RLU1osIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCk7CiAgIGlmIChzcy5zc19zcCAhPSBNQVBfRkFJTEVEKSB7CiAgICAgc3Muc3Nfc2l6ZSA9IFNJR1NUS1NaOwogICAgIHNzLnNzX2ZsYWdzID0gMDsKQEAgLTExMSw4ICsxMDIsNiBAQAogfQogCiBzdGF0aWMgdm9pZCogX19jcmVhdGVfdGhyZWFkX3N0YWNrKHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkKSB7Ci0gIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrKCZnUHRocmVhZFN0YWNrQ3JlYXRpb25Mb2NrKTsKLQogICAvLyBDcmVhdGUgYSBuZXcgcHJpdmF0ZSBhbm9ueW1vdXMgbWFwLgogICBpbnQgcHJvdCA9IFBST1RfUkVBRCB8IFBST1RfV1JJVEU7CiAgIGludCBmbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkU7CkBAIC0xNDQsMTEgKzEzMyw4IEBACiAgIC8vIG5vdGlmeSBnZGIgYWJvdXQgdGhpcyB0aHJlYWQgYmVmb3JlIHdlIHN0YXJ0IGRvaW5nIGFueXRoaW5nLgogICAvLyBUaGlzIGFsc28gcHJvdmlkZXMgdGhlIG1lbW9yeSBiYXJyaWVyIG5lZWRlZCB0byBlbnN1cmUgdGhhdCBhbGwgbWVtb3J5CiAgIC8vIGFjY2Vzc2VzIHByZXZpb3VzbHkgbWFkZSBieSB0aGUgY3JlYXRpbmcgdGhyZWFkIGFyZSB2aXNpYmxlIHRvIHVzLgotICBwdGhyZWFkX211dGV4X3QqIHN0YXJ0X211dGV4ID0gKHB0aHJlYWRfbXV0ZXhfdCopICZ0aHJlYWQtPnRsc1tUTFNfU0xPVF9TVEFSVF9NVVRFWF07Ci0gIHB0aHJlYWRfbXV0ZXhfbG9jayhzdGFydF9tdXRleCk7Ci0gIHB0aHJlYWRfbXV0ZXhfZGVzdHJveShzdGFydF9tdXRleCk7Ci0KLSAgX19pbml0X3Rscyh0aHJlYWQpOworICBwdGhyZWFkX211dGV4X2xvY2soJnRocmVhZC0+c3RhcnR1cF9oYW5kc2hha2VfbXV0ZXgpOworICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJnRocmVhZC0+c3RhcnR1cF9oYW5kc2hha2VfbXV0ZXgpOwogCiAgIF9faW5pdF9hbHRlcm5hdGVfc2lnbmFsX3N0YWNrKHRocmVhZCk7CiAKQEAgLTE2OSwxMSArMTU1LDcgQEAKICAgICAgICAgICAgICAgICAgICB2b2lkKiAoKnN0YXJ0X3JvdXRpbmUpKHZvaWQqKSwgdm9pZCogYXJnKSB7CiAgIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7CiAKLSAgLy8gSW5mb3JtIHRoZSByZXN0IG9mIHRoZSBDIGxpYnJhcnkgdGhhdCBhdCBsZWFzdCBvbmUgdGhyZWFkCi0gIC8vIHdhcyBjcmVhdGVkLiBUaGlzIHdpbGwgZW5mb3JjZSBjZXJ0YWluIGZ1bmN0aW9ucyB0byBhY3F1aXJlL3JlbGVhc2UKLSAgLy8gbG9ja3MgKGUuZy4gYXRleGl0KCkpIHRvIHByb3RlY3Qgc2hhcmVkIGdsb2JhbCBzdHJ1Y3R1cmVzLgotICAvLyBUaGlzIHdvcmtzIGJlY2F1c2UgcHRocmVhZF9jcmVhdGUoKSBpcyBub3QgY2FsbGVkIGJ5IHRoZSBDIGxpYnJhcnkKLSAgLy8gaW5pdGlhbGl6YXRpb24gcm91dGluZSB0aGF0IHNldHMgdXAgdGhlIG1haW4gdGhyZWFkJ3MgZGF0YSBzdHJ1Y3R1cmVzLgorICAvLyBJbmZvcm0gdGhlIHJlc3Qgb2YgdGhlIEMgbGlicmFyeSB0aGF0IGF0IGxlYXN0IG9uZSB0aHJlYWQgd2FzIGNyZWF0ZWQuCiAgIF9faXN0aHJlYWRlZCA9IDE7CiAKICAgcHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQgPSByZWludGVycHJldF9jYXN0PHB0aHJlYWRfaW50ZXJuYWxfdCo+KGNhbGxvYyhzaXplb2YoKnRocmVhZCksIDEpKTsKQEAgLTE5MCw4ICsxNzIsOCBAQAogICB9CiAKICAgLy8gTWFrZSBzdXJlIHRoZSBzdGFjayBzaXplIGFuZCBndWFyZCBzaXplIGFyZSBtdWx0aXBsZXMgb2YgUEFHRV9TSVpFLgotICB0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZSA9ICh0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZSArIChQQUdFX1NJWkUtMSkpICYgfihQQUdFX1NJWkUtMSk7Ci0gIHRocmVhZC0+YXR0ci5ndWFyZF9zaXplID0gKHRocmVhZC0+YXR0ci5ndWFyZF9zaXplICsgKFBBR0VfU0laRS0xKSkgJiB+KFBBR0VfU0laRS0xKTsKKyAgdGhyZWFkLT5hdHRyLnN0YWNrX3NpemUgPSBCSU9OSUNfQUxJR04odGhyZWFkLT5hdHRyLnN0YWNrX3NpemUsIFBBR0VfU0laRSk7CisgIHRocmVhZC0+YXR0ci5ndWFyZF9zaXplID0gQklPTklDX0FMSUdOKHRocmVhZC0+YXR0ci5ndWFyZF9zaXplLCBQQUdFX1NJWkUpOwogCiAgIGlmICh0aHJlYWQtPmF0dHIuc3RhY2tfYmFzZSA9PSBOVUxMKSB7CiAgICAgLy8gVGhlIGNhbGxlciBkaWRuJ3QgcHJvdmlkZSBhIHN0YWNrLCBzbyBhbGxvY2F0ZSBvbmUuCkBAIC0yMDksOCArMTkxLDEwIEBACiAgIC8vIFRoZSBjaGlsZCBzdGFjayBpcyB0aGUgc2FtZSBhZGRyZXNzLCBqdXN0IGdyb3dpbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4KICAgLy8gQXQgb2Zmc2V0cyA+PSAwLCB3ZSBoYXZlIHRoZSBUTFMgc2xvdHMuCiAgIC8vIEF0IG9mZnNldHMgPCAwLCB3ZSBoYXZlIHRoZSBjaGlsZCBzdGFjay4KLSAgdGhyZWFkLT50bHMgPSAodm9pZCoqKSgodWludDhfdCopKHRocmVhZC0+YXR0ci5zdGFja19iYXNlKSArIHRocmVhZC0+YXR0ci5zdGFja19zaXplIC0gQklPTklDX1RMU19TTE9UUyAqIHNpemVvZih2b2lkKikpOworICB0aHJlYWQtPnRscyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih0aHJlYWQtPmF0dHIuc3RhY2tfYmFzZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZSAtIEJJT05JQ19UTFNfU0xPVFMgKiBzaXplb2Yodm9pZCopKTsKICAgdm9pZCogY2hpbGRfc3RhY2sgPSB0aHJlYWQtPnRsczsKKyAgX19pbml0X3Rscyh0aHJlYWQpOwogCiAgIC8vIENyZWF0ZSBhIG11dGV4IGZvciB0aGUgdGhyZWFkIGluIFRMUyB0byB3YWl0IG9uIG9uY2UgaXQgc3RhcnRzIHNvIHdlIGNhbiBrZWVwCiAgIC8vIGl0IGZyb20gZG9pbmcgYW55dGhpbmcgdW50aWwgYWZ0ZXIgd2Ugbm90aWZ5IHRoZSBkZWJ1Z2dlciBhYm91dCBpdApAQCAtMjE4LDMxICsyMDIsMzIgQEAKICAgLy8gVGhpcyBhbHNvIHByb3ZpZGVzIHRoZSBtZW1vcnkgYmFycmllciB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFsbAogICAvLyBtZW1vcnkgYWNjZXNzZXMgcHJldmlvdXNseSBwZXJmb3JtZWQgYnkgdGhpcyB0aHJlYWQgYXJlIHZpc2libGUgdG8KICAgLy8gdGhlIG5ldyB0aHJlYWQuCi0gIHB0aHJlYWRfbXV0ZXhfdCogc3RhcnRfbXV0ZXggPSAocHRocmVhZF9tdXRleF90KikgJnRocmVhZC0+dGxzW1RMU19TTE9UX1NUQVJUX01VVEVYXTsKLSAgcHRocmVhZF9tdXRleF9pbml0KHN0YXJ0X211dGV4LCBOVUxMKTsKLSAgcHRocmVhZF9tdXRleF9sb2NrKHN0YXJ0X211dGV4KTsKLQotICB0aHJlYWQtPnRsc1tUTFNfU0xPVF9USFJFQURfSURdID0gdGhyZWFkOworICBwdGhyZWFkX211dGV4X2luaXQoJnRocmVhZC0+c3RhcnR1cF9oYW5kc2hha2VfbXV0ZXgsIE5VTEwpOworICBwdGhyZWFkX211dGV4X2xvY2soJnRocmVhZC0+c3RhcnR1cF9oYW5kc2hha2VfbXV0ZXgpOwogCiAgIHRocmVhZC0+c3RhcnRfcm91dGluZSA9IHN0YXJ0X3JvdXRpbmU7CiAgIHRocmVhZC0+c3RhcnRfcm91dGluZV9hcmcgPSBhcmc7CiAKKyAgdGhyZWFkLT5zZXRfY2FjaGVkX3BpZChnZXRwaWQoKSk7CisKICAgaW50IGZsYWdzID0gQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfAogICAgICAgQ0xPTkVfU0VUVExTIHwgQ0xPTkVfUEFSRU5UX1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEOworICB2b2lkKiB0bHMgPSB0aHJlYWQtPnRsczsKICNpZiBkZWZpbmVkKF9faTM4Nl9fKQogICAvLyBPbiB4ODYgKGJ1dCBub3QgeDg2LTY0KSwgQ0xPTkVfU0VUVExTIHRha2VzIGEgcG9pbnRlciB0byBhIHN0cnVjdCB1c2VyX2Rlc2MgcmF0aGVyIHRoYW4KLSAgLy8gYSBwb2ludGVyIHRvIHRoZSBUTFMgaXRzZWxmLiBSYXRoZXIgdGhhbiB0cnkgdG8gZGVhbCB3aXRoIHRoYXQgaGVyZSwgd2UganVzdCBsZXQgeDg2IHNldAotICAvLyB0aGUgVExTIG1hbnVhbGx5IGluIF9faW5pdF90bHMsIGxpa2UgYWxsIGFyY2hpdGVjdHVyZXMgdXNlZCB0by4KLSAgZmxhZ3MgJj0gfkNMT05FX1NFVFRMUzsKKyAgLy8gYSBwb2ludGVyIHRvIHRoZSBUTFMgaXRzZWxmLgorICB1c2VyX2Rlc2MgdGxzX2Rlc2NyaXB0b3I7CisgIF9faW5pdF91c2VyX2Rlc2MoJnRsc19kZXNjcmlwdG9yLCBmYWxzZSwgdGxzKTsKKyAgdGxzID0gJnRsc19kZXNjcmlwdG9yOwogI2VuZGlmCi0gIGludCByYyA9IF9fYmlvbmljX2Nsb25lKGZsYWdzLCBjaGlsZF9zdGFjaywgJih0aHJlYWQtPnRpZCksIHRocmVhZC0+dGxzLCAmKHRocmVhZC0+dGlkKSwgX19wdGhyZWFkX3N0YXJ0LCB0aHJlYWQpOworICBpbnQgcmMgPSBjbG9uZShfX3B0aHJlYWRfc3RhcnQsIGNoaWxkX3N0YWNrLCBmbGFncywgdGhyZWFkLCAmKHRocmVhZC0+dGlkKSwgdGxzLCAmKHRocmVhZC0+dGlkKSk7CiAgIGlmIChyYyA9PSAtMSkgewogICAgIGludCBjbG9uZV9lcnJubyA9IGVycm5vOwogICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gdW5sb2NrIHRoZSBtdXRleCBhdCBhbGwgYmVjYXVzZSBjbG9uZSgyKSBmYWlsZWQgc28gdGhlcmUncyBubyBjaGlsZCB3YWl0aW5nIHRvCiAgICAgLy8gYmUgdW5ibG9ja2VkLCBidXQgd2UncmUgYWJvdXQgdG8gdW5tYXAgdGhlIG1lbW9yeSB0aGUgbXV0ZXggaXMgc3RvcmVkIGluLCBzbyB0aGlzIHNlcnZlcyBhcyBhCiAgICAgLy8gcmVtaW5kZXIgdGhhdCB5b3UgY2FuJ3QgcmV3cml0ZSB0aGlzIGZ1bmN0aW9uIHRvIHVzZSBhIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlci4KLSAgICBwdGhyZWFkX211dGV4X3VubG9jayhzdGFydF9tdXRleCk7Ci0gICAgaWYgKCh0aHJlYWQtPmF0dHIuZmxhZ3MgJiBQVEhSRUFEX0FUVFJfRkxBR19VU0VSX0FMTE9DQVRFRF9TVEFDSykgPT0gMCkgeworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0aHJlYWQtPnN0YXJ0dXBfaGFuZHNoYWtlX211dGV4KTsKKyAgICBpZiAoIXRocmVhZC0+dXNlcl9hbGxvY2F0ZWRfc3RhY2soKSkgewogICAgICAgbXVubWFwKHRocmVhZC0+YXR0ci5zdGFja19iYXNlLCB0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZSk7CiAgICAgfQogICAgIGZyZWUodGhyZWFkKTsKQEAgLTI1NiwxOSArMjQxLDEzIEBACiAgICAgLy8gTGV0dGluZyB0aGUgdGhyZWFkIHJ1biBpcyB0aGUgZWFzaWVzdCB3YXkgdG8gY2xlYW4gdXAgaXRzIHJlc291cmNlcy4KICAgICB0aHJlYWQtPmF0dHIuZmxhZ3MgfD0gUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQ7CiAgICAgdGhyZWFkLT5zdGFydF9yb3V0aW5lID0gX19kb19ub3RoaW5nOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHN0YXJ0X211dGV4KTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmdGhyZWFkLT5zdGFydHVwX2hhbmRzaGFrZV9tdXRleCk7CiAgICAgcmV0dXJuIGluaXRfZXJybm87CiAgIH0KIAotICAvLyBOb3RpZnkgYW55IGRlYnVnZ2VycyBhYm91dCB0aGUgbmV3IHRocmVhZC4KLSAgewotICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBkZWJ1Z2dlcl9sb2NrZXIoJmdEZWJ1Z2dlck5vdGlmaWNhdGlvbkxvY2spOwotICAgIF90aHJlYWRfY3JlYXRlZF9ob29rKHRocmVhZC0+dGlkKTsKLSAgfQotCiAgIC8vIFB1Ymxpc2ggdGhlIHB0aHJlYWRfdCBhbmQgdW5sb2NrIHRoZSBtdXRleCB0byBsZXQgdGhlIG5ldyB0aHJlYWQgc3RhcnQgcnVubmluZy4KICAgKnRocmVhZF9vdXQgPSByZWludGVycHJldF9jYXN0PHB0aHJlYWRfdD4odGhyZWFkKTsKLSAgcHRocmVhZF9tdXRleF91bmxvY2soc3RhcnRfbXV0ZXgpOworICBwdGhyZWFkX211dGV4X3VubG9jaygmdGhyZWFkLT5zdGFydHVwX2hhbmRzaGFrZV9tdXRleCk7CiAKICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2RlYnVnLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfZGVidWcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDFmMDQwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3B0aHJlYWRfZGVidWcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+Ci0jaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8dW53aW5kLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190bHMuaCIKLSNpbmNsdWRlICJkZWJ1Z19tYXBpbmZvLmgiCi0jaW5jbHVkZSAiZGVidWdfc3RhY2t0cmFjZS5oIgotI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgRGVhZGxvY2sgcHJlZGljdGlvbgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLS8qCi1UaGUgaWRlYSBpcyB0byBwcmVkaWN0IHRoZSBwb3NzaWJpbGl0eSBvZiBkZWFkbG9jayBieSByZWNvcmRpbmcgdGhlIG9yZGVyCi1pbiB3aGljaCBsb2NrcyBhcmUgYWNxdWlyZWQuICBJZiB3ZSBzZWUgYW4gYXR0ZW1wdCB0byBhY3F1aXJlIGEgbG9jawotb3V0IG9mIG9yZGVyLCB3ZSBjYW4gaWRlbnRpZnkgdGhlIGxvY2tzIGFuZCBvZmZlbmRpbmcgY29kZS4KLQotVG8gbWFrZSB0aGlzIHdvcmssIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbG9ja3MgaGVsZCBieSBlYWNoIHRocmVhZCwKLWFuZCBjcmVhdGUgaGlzdG9yeSB0cmVlcyBmb3IgZWFjaCBsb2NrLiAgV2hlbiBhIHRocmVhZCB0cmllcyB0byBhY3F1aXJlCi1hIG5ldyBsb2NrLCB3ZSB3YWxrIHRocm91Z2ggdGhlICJoaXN0b3J5IGNoaWxkcmVuIiBvZiB0aGUgbG9jaywgbG9va2luZwotZm9yIGEgbWF0Y2ggd2l0aCBsb2NrcyB0aGUgdGhyZWFkIGFscmVhZHkgaG9sZHMuICBJZiB3ZSBmaW5kIGEgbWF0Y2gsCi1pdCBtZWFucyB0aGUgdGhyZWFkIGhhcyBtYWRlIGEgcmVxdWVzdCB0aGF0IGNvdWxkIHJlc3VsdCBpbiBhIGRlYWRsb2NrLgotCi1UbyBzdXBwb3J0IHJlY3Vyc2l2ZSBsb2Nrcywgd2UgYWx3YXlzIGFsbG93IHJlLWxvY2tpbmcgYSBjdXJyZW50bHktaGVsZAotbG9jaywgYW5kIG1haW50YWluIGEgcmVjdXJzaW9uIGRlcHRoIGNvdW50LgotCi1BbiBBU0NJSS1hcnQgZXhhbXBsZSwgd2hlcmUgbGV0dGVycyByZXByZXNlbnQgbG9ja3M6Ci0KLSAgICAgICAgQQotICAgICAgIC98XAotICAgICAgLyB8IFwKLSAgICAgQiAgfCAgRAotICAgICAgXCB8Ci0gICAgICAgXHwKLSAgICAgICAgQwotCi1UaGUgYWJvdmUgaXMgdGhlIHRyZWUgd2UnZCBoYXZlIGFmdGVyIGhhbmRsaW5nIGxvY2sgc3luY2hyb25pemF0aW9uCi1zZXF1ZW5jZXMgIkFCQyIsICJBQyIsICJBRCIuICBBIGhhcyB0aHJlZSBjaGlsZHJlbiwge0IsIEMsIER9LiAgQyBpcyBhbHNvCi1hIGNoaWxkIG9mIEIuICAoVGhlIGxpbmVzIHJlcHJlc2VudCBwb2ludGVycyBiZXR3ZWVuIHBhcmVudCBhbmQgY2hpbGQuCi1FdmVyeSBub2RlIGNhbiBoYXZlIG11bHRpcGxlIHBhcmVudHMgYW5kIG11bHRpcGxlIGNoaWxkcmVuLikKLQotSWYgd2UgaG9sZCBBQywgYW5kIHdhbnQgdG8gbG9jayBCLCB3ZSByZWN1cnNpdmVseSBzZWFyY2ggdGhyb3VnaCBCJ3MKLWNoaWxkcmVuIHRvIHNlZSBpZiBBIG9yIEMgYXBwZWFycy4gIEl0IGRvZXMsIHNvIHdlIHJlamVjdCB0aGUgYXR0ZW1wdC4KLShBIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gaW1wbGVtZW50IGl0OiBhZGQgYSBsaW5rIGZyb20gQyB0byBCLCB0aGVuCi1kZXRlcm1pbmUgd2hldGhlciB0aGUgZ3JhcGggc3RhcnRpbmcgYXQgQiBjb250YWlucyBhIGN5Y2xlLikKLQotSWYgd2UgaG9sZCBBQyBhbmQgd2FudCB0byBsb2NrIEQsIHdlIHdvdWxkIHN1Y2NlZWQsIGNyZWF0aW5nIGEgbmV3IGxpbmsKLWZyb20gQyB0byBELgotCi1VcGRhdGVzIHRvIE11dGV4SW5mbyBzdHJ1Y3RzIGFyZSBvbmx5IGFsbG93ZWQgZm9yIHRoZSB0aHJlYWQgdGhhdCBob2xkcwotdGhlIGxvY2ssIHNvIHdlIGFjdHVhbGx5IGRvIG1vc3Qgb2Ygb3VyIGRlYWRsb2NrIHByZWRpY3Rpb24gd29yayBhZnRlcgotdGhlIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQuCi0qLwotCi0jaWYgUFRIUkVBRF9ERUJVR19FTkFCTEVECi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBsb2cgZnVuY3Rpb25zCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jZGVmaW5lIExPR0QoZm9ybWF0LCAuLi4pICBcCi0gICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJwdGhyZWFkX2RlYnVnIiwgKGZvcm1hdCksICMjX19WQV9BUkdTX18gKQotCi0jZGVmaW5lIExPR1coZm9ybWF0LCAuLi4pICBcCi0gICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfV0FSTiwgInB0aHJlYWRfZGVidWciLCAoZm9ybWF0KSwgIyNfX1ZBX0FSR1NfXyApCi0KLSNkZWZpbmUgTE9HRShmb3JtYXQsIC4uLikgIFwKLSAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19FUlJPUiwgInB0aHJlYWRfZGVidWciLCAoZm9ybWF0KSwgIyNfX1ZBX0FSR1NfXyApCi0KLSNkZWZpbmUgTE9HSShmb3JtYXQsIC4uLikgIFwKLSAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19JTkZPLCAicHRocmVhZF9kZWJ1ZyIsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICkKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGtTdGFydEJhbm5lciA9Ci0gICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qga0VuZEJhbm5lciA9Ci0gICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iOwotCi1leHRlcm4gY29uc3QgY2hhciogX19wcm9nbmFtZTsKLQotI2RlZmluZSBTVEFDS19UUkFDRV9ERVBUSCAxNgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIGxldmVsIDw9IDAgOiBkZWFkbG9jayBwcmVkaWN0aW9uIGRpc2FibGVkCi0gKiBsZXZlbCAgICAxIDogZGVhZGxvY2sgcHJlZGljdGlvbiBlbmFibGVkLCB3L28gY2FsbCBzdGFja3MKLSAqIGxldmVsICAgIDIgOiBkZWFkbG9jayBwcmVkaWN0aW9uIGVuYWJsZWQgdy8gY2FsbCBzdGFja3MKLSAqLwotI2RlZmluZSBDQVBUVVJFX0NBTExTVEFDSyAyCi1zdGF0aWMgaW50IHNQdGhyZWFkRGVidWdMZXZlbCA9IDA7Ci1zdGF0aWMgcGlkX3Qgc1B0aHJlYWREZWJ1Z0Rpc2FibGVkVGhyZWFkID0gLTE7Ci1zdGF0aWMgcHRocmVhZF9tdXRleF90IHNEYmdMb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHNvbWUgc2ltcGxlL2xhbWUgbWFsbG9jIHJlcGxhY2VtZW50Ci0gKiBOT1QgdGhyZWFkLXNhZmUgYW5kIGxlYWtzIGV2ZXJ5dGhpbmcKLSAqLwotCi0jZGVmaW5lIERCR19BTExPQ19CTE9DS19TSVpFIFBBR0VTSVpFCi1zdGF0aWMgc2l6ZV90IHNEYmdBbGxvY09mZnNldCA9IERCR19BTExPQ19CTE9DS19TSVpFOwotc3RhdGljIGNoYXIqIHNEYmdBbGxvY1B0ciA9IE5VTEw7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIFQqIERiZ0FsbG9jTG9ja2VkKHNpemVfdCBjb3VudCA9IDEpIHsKLSAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihUKSAqIGNvdW50OwotICAgIGlmICgoc0RiZ0FsbG9jT2Zmc2V0ICsgc2l6ZSkgPiBEQkdfQUxMT0NfQkxPQ0tfU0laRSkgewotICAgICAgICBzRGJnQWxsb2NPZmZzZXQgPSAwOwotICAgICAgICBzRGJnQWxsb2NQdHIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtbWFwKE5VTEwsIERCR19BTExPQ19CTE9DS19TSVpFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRHxQUk9UX1dSSVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9BTk9OIHwgTUFQX1BSSVZBVEUsIDAsIDApKTsKLSAgICAgICAgaWYgKHNEYmdBbGxvY1B0ciA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICB2b2lkKiBhZGRyID0gc0RiZ0FsbG9jUHRyICsgc0RiZ0FsbG9jT2Zmc2V0OwotICAgIHNEYmdBbGxvY09mZnNldCArPSBzaXplOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihhZGRyKTsKLX0KLQotc3RhdGljIHZvaWQqIGRlYnVnX3JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9sZF9zaXplKSB7Ci0gICAgdm9pZCogYWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCi0gICAgICAgICAgICBNQVBfQU5PTiB8IE1BUF9QUklWQVRFLCAwLCAwKTsKLSAgICBpZiAoYWRkciAhPSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIGlmIChwdHIpIHsKLSAgICAgICAgICAgIG1lbWNweShhZGRyLCBwdHIsIG9sZF9zaXplKTsKLSAgICAgICAgICAgIG11bm1hcChwdHIsIG9sZF9zaXplKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFkZHIgPSBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gYWRkcjsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgTXV0ZXhJbmZvOwotCi10eXBlZGVmIHN0cnVjdCBDYWxsU3RhY2sgewotICAgIHVpbnRwdHJfdCAgICBkZXB0aDsKLSAgICB1aW50cHRyX3QqICAgYWRkcnM7Ci19IENhbGxTdGFjazsKLQotdHlwZWRlZiBzdHJ1Y3QgTXV0ZXhJbmZvKiBNdXRleEluZm9MaXN0RW50cnk7Ci10eXBlZGVmIHN0cnVjdCBDYWxsU3RhY2sgIENhbGxTdGFja0xpc3RFbnRyeTsKLQotdHlwZWRlZiBzdHJ1Y3QgR3Jvd2luZ0xpc3QgewotICAgIGludCBhbGxvYzsKLSAgICBpbnQgY291bnQ7Ci0gICAgdW5pb24gewotICAgICAgICB2b2lkKiAgICAgICAgICAgICAgIGRhdGE7Ci0gICAgICAgIE11dGV4SW5mb0xpc3RFbnRyeSogbGlzdDsKLSAgICAgICAgQ2FsbFN0YWNrTGlzdEVudHJ5KiBzdGFjazsKLSAgICB9OwotfSBHcm93aW5nTGlzdDsKLQotdHlwZWRlZiBHcm93aW5nTGlzdCBNdXRleEluZm9MaXN0OwotdHlwZWRlZiBHcm93aW5nTGlzdCBDYWxsU3RhY2tMaXN0OwotCi10eXBlZGVmIHN0cnVjdCBNdXRleEluZm8gewotICAgIC8vIHRocmVhZCBjdXJyZW50bHkgaG9sZGluZyB0aGUgbG9jayBvciAwCi0gICAgcGlkX3QgICAgICAgICAgICAgICBvd25lcjsKLQotICAgIC8vIG1vc3QtcmVjZW50bHktbG9ja2VkIGRvdWJseS1saW5rZWQgbGlzdAotICAgIHN0cnVjdCBNdXRleEluZm8qICAgcHJldjsKLSAgICBzdHJ1Y3QgTXV0ZXhJbmZvKiAgIG5leHQ7Ci0KLSAgICAvLyBmb3IgcmVlbnRyYW50IGxvY2tzCi0gICAgaW50ICAgICAgICAgICAgICAgICBsb2NrQ291bnQ7Ci0gICAgLy8gd2hlbiBsb29raW5nIGZvciBsb29wcyBpbiB0aGUgZ3JhcGgsIG1hcmtzIHZpc2l0ZWQgbm9kZXMKLSAgICBpbnQgICAgICAgICAgICAgICAgIGhpc3RvcnlNYXJrOwotICAgIC8vIHRoZSBhY3R1YWwgbXV0ZXgKLSAgICBwdGhyZWFkX211dGV4X3QqICAgIG11dGV4OwotICAgIC8vIGxpc3Qgb2YgbG9ja3MgZGlyZWN0bHkgYWNxdWlyZWQgQUZURVIgdGhpcyBvbmUgaW4gdGhlIHNhbWUgdGhyZWFkCi0gICAgTXV0ZXhJbmZvTGlzdCAgICAgICBjaGlsZHJlbjsKLSAgICAvLyBsaXN0IG9mIGxvY2tzIGRpcmVjdGx5IGFjcXVpcmVkIEJFRk9SRSB0aGlzIG9uZSBpbiB0aGUgc2FtZSB0aHJlYWQKLSAgICBNdXRleEluZm9MaXN0ICAgICAgIHBhcmVudHM7Ci0gICAgLy8gbGlzdCBvZiBjYWxsIHN0YWNrcyB3aGVuIGEgbmV3IGxpbmsgaXMgZXN0YWJsaXNoZWQgdG8gdGhpcyBsb2NrIGZvcm0gaXRzIHBhcmVudAotICAgIENhbGxTdGFja0xpc3QgICAgICAgc3RhY2tzOwotICAgIC8vIGNhbGwgc3RhY2sgd2hlbiB0aGlzIGxvY2sgd2FzIGFjcXVpcmVkIGxhc3QKLSAgICBpbnQgICAgICAgICAgICAgICAgIHN0YWNrRGVwdGg7Ci0gICAgdWludHB0cl90ICAgICAgICAgICBzdGFja1RyYWNlW1NUQUNLX1RSQUNFX0RFUFRIXTsKLX0gTXV0ZXhJbmZvOwotCi1zdGF0aWMgdm9pZCBncm93aW5nTGlzdEluaXQoR3Jvd2luZ0xpc3QqIGxpc3QpIHsKLSAgICBsaXN0LT5hbGxvYyA9IDA7Ci0gICAgbGlzdC0+Y291bnQgPSAwOwotICAgIGxpc3QtPmRhdGEgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBncm93aW5nTGlzdEFkZChHcm93aW5nTGlzdCogcExpc3QsIHNpemVfdCBvYmpTaXplKSB7Ci0gICAgaWYgKHBMaXN0LT5jb3VudCA9PSBwTGlzdC0+YWxsb2MpIHsKLSAgICAgICAgc2l6ZV90IG9sZHNpemUgPSBwTGlzdC0+YWxsb2MgKiBvYmpTaXplOwotICAgICAgICBwTGlzdC0+YWxsb2MgKz0gUEFHRVNJWkUgLyBvYmpTaXplOwotICAgICAgICBzaXplX3Qgc2l6ZSA9IHBMaXN0LT5hbGxvYyAqIG9ialNpemU7Ci0gICAgICAgIHBMaXN0LT5kYXRhID0gZGVidWdfcmVhbGxvYyhwTGlzdC0+ZGF0YSwgc2l6ZSwgb2xkc2l6ZSk7Ci0gICAgfQotICAgIHBMaXN0LT5jb3VudCsrOwotfQotCi1zdGF0aWMgdm9pZCBpbml0TXV0ZXhJbmZvKE11dGV4SW5mbyogb2JqZWN0LCBwdGhyZWFkX211dGV4X3QqIG11dGV4KSB7Ci0gICAgb2JqZWN0LT5vd25lciA9IDA7Ci0gICAgb2JqZWN0LT5wcmV2ID0gMDsKLSAgICBvYmplY3QtPm5leHQgPSAwOwotICAgIG9iamVjdC0+bG9ja0NvdW50ID0gMDsKLSAgICBvYmplY3QtPmhpc3RvcnlNYXJrID0gMDsKLSAgICBvYmplY3QtPm11dGV4ID0gbXV0ZXg7Ci0gICAgZ3Jvd2luZ0xpc3RJbml0KCZvYmplY3QtPmNoaWxkcmVuKTsKLSAgICBncm93aW5nTGlzdEluaXQoJm9iamVjdC0+cGFyZW50cyk7Ci0gICAgZ3Jvd2luZ0xpc3RJbml0KCZvYmplY3QtPnN0YWNrcyk7Ci0gICAgb2JqZWN0LT5zdGFja0RlcHRoID0gMDsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QgVGhyZWFkSW5mbyB7Ci0gICAgcGlkX3QgICAgICAgcGlkOwotICAgIE11dGV4SW5mbyogIG1ybDsKLX0gVGhyZWFkSW5mbzsKLQotc3RhdGljIHZvaWQgaW5pdFRocmVhZEluZm8oVGhyZWFkSW5mbyogb2JqZWN0LCBwaWRfdCBwaWQpIHsKLSAgICBvYmplY3QtPnBpZCA9IHBpZDsKLSAgICBvYmplY3QtPm1ybCA9IE5VTEw7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgTXV0ZXhJbmZvKiBnZXRfbXV0ZXhfaW5mbyhwdGhyZWFkX211dGV4X3QgKm11dGV4KTsKLXN0YXRpYyB2b2lkIG11dGV4X2xvY2tfY2hlY2tlZChNdXRleEluZm8qIG1ybCwgTXV0ZXhJbmZvKiBvYmplY3QpOwotc3RhdGljIHZvaWQgbXV0ZXhfdW5sb2NrX2NoZWNrZWQoTXV0ZXhJbmZvKiBvYmplY3QpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotZXh0ZXJuICJDIiBpbnQgcHRocmVhZF9tdXRleF9sb2NrX2ltcGwocHRocmVhZF9tdXRleF90ICptdXRleCk7Ci1leHRlcm4gIkMiIGludCBwdGhyZWFkX211dGV4X3VubG9ja19pbXBsKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOwotCi1zdGF0aWMgaW50IHB0aHJlYWRfbXV0ZXhfbG9ja191bmNoZWNrZWQocHRocmVhZF9tdXRleF90ICptdXRleCkgewotICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2tfaW1wbChtdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgcHRocmVhZF9tdXRleF91bmxvY2tfdW5jaGVja2VkKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpIHsKLSAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2tfaW1wbChtdXRleCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCBkdXBfYmFja3RyYWNlKENhbGxTdGFjayogc3RhY2ssIHNpemVfdCBjb3VudCwgdWludHB0cl90IGNvbnN0KiBhZGRycykgewotICAgIHN0YWNrLT5kZXB0aCA9IGNvdW50OwotICAgIHN0YWNrLT5hZGRycyA9IERiZ0FsbG9jTG9ja2VkPHVpbnRwdHJfdD4oY291bnQpOwotICAgIG1lbWNweShzdGFjay0+YWRkcnMsIGFkZHJzLCBjb3VudCAqIHNpemVvZih1aW50cHRyX3QpKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgaGlzdG9yeUxpc3RIYXMoCi0gICAgICAgIGNvbnN0IE11dGV4SW5mb0xpc3QqIGxpc3QsIE11dGV4SW5mbyBjb25zdCAqIG9iaikgewotICAgIGludCBpOwotICAgIGZvciAoaT0wOyBpPGxpc3QtPmNvdW50OyBpKyspIHsKLSAgICAgICAgaWYgKGxpc3QtPmxpc3RbaV0gPT0gb2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpc3RvcnlMaXN0QWRkKE11dGV4SW5mb0xpc3QqIHBMaXN0LCBNdXRleEluZm8qIG9iaikgewotICAgIGdyb3dpbmdMaXN0QWRkKHBMaXN0LCBzaXplb2YoTXV0ZXhJbmZvTGlzdEVudHJ5KSk7Ci0gICAgcExpc3QtPmxpc3RbcExpc3QtPmNvdW50IC0gMV0gPSBvYmo7Ci19Ci0KLXN0YXRpYyBpbnQgaGlzdG9yeUxpc3RSZW1vdmUoTXV0ZXhJbmZvTGlzdCogcExpc3QsIE11dGV4SW5mbyogb2JqKSB7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gcExpc3QtPmNvdW50LTE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIGlmIChwTGlzdC0+bGlzdFtpXSA9PSBvYmopIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChpIDwgMCkgewotICAgICAgICAvLyBub3QgZm91bmQhCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChpICE9IHBMaXN0LT5jb3VudC0xKSB7Ci0gICAgICAgIC8vIGNvcHkgdGhlIGxhc3QgZW50cnkgdG8gdGhlIG5ldyBmcmVlIHNsb3QKLSAgICAgICAgcExpc3QtPmxpc3RbaV0gPSBwTGlzdC0+bGlzdFtwTGlzdC0+Y291bnQtMV07Ci0gICAgfQotICAgIHBMaXN0LT5jb3VudC0tOwotICAgIG1lbXNldCgmcExpc3QtPmxpc3RbcExpc3QtPmNvdW50XSwgMCwgc2l6ZW9mKE11dGV4SW5mb0xpc3RFbnRyeSkpOwotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rUGFyZW50VG9DaGlsZChNdXRleEluZm8qIHBhcmVudCwgTXV0ZXhJbmZvKiBjaGlsZCkgewotICAgIGhpc3RvcnlMaXN0QWRkKCZwYXJlbnQtPmNoaWxkcmVuLCBjaGlsZCk7Ci0gICAgaGlzdG9yeUxpc3RBZGQoJmNoaWxkLT5wYXJlbnRzLCBwYXJlbnQpOwotfQotCi1zdGF0aWMgdm9pZCB1bmxpbmtQYXJlbnRGcm9tQ2hpbGQoTXV0ZXhJbmZvKiBwYXJlbnQsIE11dGV4SW5mbyogY2hpbGQpIHsKLSAgICBoaXN0b3J5TGlzdFJlbW92ZSgmcGFyZW50LT5jaGlsZHJlbiwgY2hpbGQpOwotICAgIGhpc3RvcnlMaXN0UmVtb3ZlKCZjaGlsZC0+cGFyZW50cywgcGFyZW50KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGNhbGxzdGFja0xpc3RBZGQoQ2FsbFN0YWNrTGlzdCogcExpc3QsCi0gICAgICAgIGludCBjb3VudCwgdWludHB0cl90IGNvbnN0KiBhZGRycykgewotICAgIGdyb3dpbmdMaXN0QWRkKHBMaXN0LCBzaXplb2YoQ2FsbFN0YWNrTGlzdEVudHJ5KSk7Ci0gICAgZHVwX2JhY2t0cmFjZSgmcExpc3QtPnN0YWNrW3BMaXN0LT5jb3VudCAtIDFdLCBjb3VudCwgYWRkcnMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIHRoZSBvYmplY3QgaGllcmFyY2h5IHN0YXJ0aW5nIGF0ICJvYmoiLiAgV2UgbWFyawotICogb3Vyc2VsdmVzIG9uIGVudHJ5IGFuZCBjbGVhciB0aGUgbWFyayBvbiBleGl0LiAgSWYgd2UgZXZlciBlbmNvdW50ZXIKLSAqIGEgbWFya2VkIG9iamVjdCwgd2UgaGF2ZSBhIGN5Y2xlLgotICoKLSAqIFJldHVybnMgInRydWUiIGlmIGFsbCBpcyB3ZWxsLCAiZmFsc2UiIGlmIHdlIGZvdW5kIGEgY3ljbGUuCi0gKi8KLQotc3RhdGljIGludCB0cmF2ZXJzZVRyZWUoTXV0ZXhJbmZvKiBvYmosIE11dGV4SW5mbyBjb25zdCogb2JqUGFyZW50KQotewotICAgIC8qCi0gICAgICogSGF2ZSB3ZSBiZWVuIGhlcmUgYmVmb3JlPwotICAgICAqLwotICAgIGlmIChvYmotPmhpc3RvcnlNYXJrKSB7Ci0gICAgICAgIGludCBzdGFja0RlcHRoOwotICAgICAgICB1aW50cHRyX3QgYWRkcnNbU1RBQ0tfVFJBQ0VfREVQVEhdOwotCi0gICAgICAgIC8qIFR1cm4gb2ZmIHByZWRpY3Rpb24gdGVtcG9yYXJpbHkgaW4gdGhpcyB0aHJlYWQgd2hpbGUgbG9nZ2luZyAqLwotICAgICAgICBzUHRocmVhZERlYnVnRGlzYWJsZWRUaHJlYWQgPSBnZXR0aWQoKTsKLQotICAgICAgICBiYWNrdHJhY2Vfc3RhcnR1cCgpOwotCi0gICAgICAgIExPR1coIiVzXG4iLCBrU3RhcnRCYW5uZXIpOwotICAgICAgICBMT0dXKCJwaWQ6ICVkLCB0aWQ6ICVkID4+PiAlcyA8PDwiLCBnZXRwaWQoKSwgZ2V0dGlkKCksIF9fcHJvZ25hbWUpOwotICAgICAgICBMT0dXKCJJbGxlZ2FsIGxvY2sgYXR0ZW1wdDpcbiIpOwotICAgICAgICBMT0dXKCItLS0gcHRocmVhZF9tdXRleF90IGF0ICVwXG4iLCBvYmotPm11dGV4KTsKLSAgICAgICAgc3RhY2tEZXB0aCA9IGdldF9iYWNrdHJhY2UoYWRkcnMsIFNUQUNLX1RSQUNFX0RFUFRIKTsKLSAgICAgICAgbG9nX2JhY2t0cmFjZShhZGRycywgc3RhY2tEZXB0aCk7Ci0KLSAgICAgICAgTE9HVygiKysrIEN1cnJlbnRseSBoZWxkIGxvY2tzIGluIHRoaXMgdGhyZWFkIChpbiByZXZlcnNlIG9yZGVyKToiKTsKLSAgICAgICAgTXV0ZXhJbmZvKiBjdXIgPSBvYmo7Ci0gICAgICAgIHBpZF90IG91cnRpZCA9IGdldHRpZCgpOwotICAgICAgICBpbnQgaTsKLSAgICAgICAgZm9yIChpPTAgOyBpPGN1ci0+cGFyZW50cy5jb3VudCA7IGkrKykgewotICAgICAgICAgICAgTXV0ZXhJbmZvKiBwYXJlbnQgPSBjdXItPnBhcmVudHMubGlzdFtpXTsKLSAgICAgICAgICAgIGlmIChwYXJlbnQtPm93bmVyID09IG91cnRpZCkgewotICAgICAgICAgICAgICAgIExPR1coIi0tLSBwdGhyZWFkX211dGV4X3QgYXQgJXBcbiIsIHBhcmVudC0+bXV0ZXgpOwotICAgICAgICAgICAgICAgIGlmIChzUHRocmVhZERlYnVnTGV2ZWwgPj0gQ0FQVFVSRV9DQUxMU1RBQ0spIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShwYXJlbnQtPnN0YWNrVHJhY2UsIHBhcmVudC0+c3RhY2tEZXB0aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN1ciA9IHBhcmVudDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExPR1coIisrKyBFYXJsaWVyLCB0aGUgZm9sbG93aW5nIGxvY2sgb3JkZXIgKGZyb20gbGFzdCB0byBmaXJzdCkgd2FzIGVzdGFibGlzaGVkXG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgb2JqLT5oaXN0b3J5TWFyayA9IDE7Ci0KLSAgICBNdXRleEluZm9MaXN0KiBwTGlzdCA9ICZvYmotPmNoaWxkcmVuOwotICAgIGludCByZXN1bHQgPSAxOwotICAgIGludCBpOwotICAgIGZvciAoaSA9IHBMaXN0LT5jb3VudC0xOyBpID49IDA7IGktLSkgewotICAgICAgICBNdXRleEluZm8qIGNoaWxkID0gcExpc3QtPmxpc3RbaV07Ci0gICAgICAgIGlmICghdHJhdmVyc2VUcmVlKGNoaWxkLCAgb2JqKSkgewotICAgICAgICAgICAgTE9HVygiLS0tIHB0aHJlYWRfbXV0ZXhfdCBhdCAlcFxuIiwgb2JqLT5tdXRleCk7Ci0gICAgICAgICAgICBpZiAoc1B0aHJlYWREZWJ1Z0xldmVsID49IENBUFRVUkVfQ0FMTFNUQUNLKSB7Ci0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gaGlzdG9yeUxpc3RIYXMoJm9iai0+cGFyZW50cywgb2JqUGFyZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoKHNpemVfdClpbmRleCA8IChzaXplX3Qpb2JqLT5zdGFja3MuY291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShvYmotPnN0YWNrcy5zdGFja1tpbmRleF0uYWRkcnMsIG9iai0+c3RhY2tzLnN0YWNrW2luZGV4XS5kZXB0aCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShvYmotPnN0YWNrVHJhY2UsIG9iai0+c3RhY2tEZXB0aCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgb2JqLT5oaXN0b3J5TWFyayA9IDA7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIG11dGV4X2xvY2tfY2hlY2tlZChNdXRleEluZm8qIG1ybCwgTXV0ZXhJbmZvKiBvYmplY3QpCi17Ci0gICAgcGlkX3QgdGlkID0gZ2V0dGlkKCk7Ci0gICAgaWYgKG9iamVjdC0+b3duZXIgPT0gdGlkKSB7Ci0gICAgICAgIG9iamVjdC0+bG9ja0NvdW50Kys7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBvYmplY3QtPm93bmVyID0gdGlkOwotICAgIG9iamVjdC0+bG9ja0NvdW50ID0gMDsKLQotICAgIGlmIChzUHRocmVhZERlYnVnTGV2ZWwgPj0gQ0FQVFVSRV9DQUxMU1RBQ0spIHsKLSAgICAgICAgLy8gYWx3YXlzIHJlY29yZCB0aGUgY2FsbCBzdGFjayB3aGVuIGFjcXVpcmluZyBhIGxvY2suCi0gICAgICAgIC8vIGl0J3Mgbm90IGVmZmljaWVudCwgYnV0IGlzIHVzZWZ1bCBkdXJpbmcgZGlhZ25vc3RpY3MKLSAgICAgICAgb2JqZWN0LT5zdGFja0RlcHRoID0gZ2V0X2JhY2t0cmFjZShvYmplY3QtPnN0YWNrVHJhY2UsIFNUQUNLX1RSQUNFX0RFUFRIKTsKLSAgICB9Ci0KLSAgICAvLyBubyBvdGhlciBsb2NrcyBoZWxkIGluIHRoaXMgdGhyZWFkIC0tIG5vIGRlYWRsb2NrIHBvc3NpYmxlIQotICAgIGlmIChtcmwgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gY2hlY2sgaWYgdGhlIGxvY2sgd2UncmUgdHJ5aW5nIHRvIGFjcXVpcmUgaXMgYSBkaXJlY3QgZGVzY2VuZGFudCBvZgotICAgIC8vIHRoZSBtb3N0IHJlY2VudGx5IGxvY2tlZCBtdXRleCBpbiB0aGlzIHRocmVhZCwgaW4gd2hpY2ggY2FzZSB3ZSdyZQotICAgIC8vIGluIGEgZ29vZCBzaXR1YXRpb24gLS0gbm8gZGVhZGxvY2sgcG9zc2libGUKLSAgICBpZiAoaGlzdG9yeUxpc3RIYXMoJm1ybC0+Y2hpbGRyZW4sIG9iamVjdCkgPj0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHRocmVhZF9tdXRleF9sb2NrX3VuY2hlY2tlZCgmc0RiZ0xvY2spOwotCi0gICAgbGlua1BhcmVudFRvQ2hpbGQobXJsLCBvYmplY3QpOwotICAgIGlmICghdHJhdmVyc2VUcmVlKG9iamVjdCwgbXJsKSkgewotICAgICAgICBiYWNrdHJhY2Vfc2h1dGRvd24oKTsKLSAgICAgICAgTE9HVygiJXNcbiIsIGtFbmRCYW5uZXIpOwotICAgICAgICB1bmxpbmtQYXJlbnRGcm9tQ2hpbGQobXJsLCBvYmplY3QpOwotICAgICAgICAvLyByZWVuYWJsZSBwdGhyZWFkIGRlYnVnZ2luZyBmb3IgdGhpcyB0aHJlYWQKLSAgICAgICAgc1B0aHJlYWREZWJ1Z0Rpc2FibGVkVGhyZWFkID0gLTE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gcmVjb3JkIHRoZSBjYWxsIHN0YWNrIGZvciB0aGlzIGxpbmsKLSAgICAgICAgLy8gTk9URTogdGhlIGNhbGwgc3RhY2sgaXMgYWRkZWQgYXQgdGhlIHNhbWUgaW5kZXgKLSAgICAgICAgLy8gYXMgbXJsIGluIG9iamVjdC0+cGFyZW50c1tdCi0gICAgICAgIC8vIGllOiBvYmplY3QtPnBhcmVudHMuY291bnQgPT0gb2JqZWN0LT5zdGFja3MuY291bnQsIHdoaWNoIGlzCi0gICAgICAgIC8vIGFsc28gdGhlIGluZGV4LgotICAgICAgICBpZiAoc1B0aHJlYWREZWJ1Z0xldmVsID49IENBUFRVUkVfQ0FMTFNUQUNLKSB7Ci0gICAgICAgICAgICBjYWxsc3RhY2tMaXN0QWRkKCZvYmplY3QtPnN0YWNrcywKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5zdGFja0RlcHRoLCBvYmplY3QtPnN0YWNrVHJhY2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHRocmVhZF9tdXRleF91bmxvY2tfdW5jaGVja2VkKCZzRGJnTG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIG11dGV4X3VubG9ja19jaGVja2VkKE11dGV4SW5mbyogb2JqZWN0KQotewotICAgIHBpZF90IHRpZCA9IGdldHRpZCgpOwotICAgIGlmIChvYmplY3QtPm93bmVyID09IHRpZCkgewotICAgICAgICBpZiAob2JqZWN0LT5sb2NrQ291bnQgPT0gMCkgewotICAgICAgICAgICAgb2JqZWN0LT5vd25lciA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBvYmplY3QtPmxvY2tDb3VudC0tOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBIYXNoIFRhYmxlIGZ1bmN0aW9ucwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSEFTSFRBQkxFX1NJWkUgICAgICAyNTYKLQotdHlwZWRlZiBzdHJ1Y3QgSGFzaEVudHJ5IEhhc2hFbnRyeTsKLXN0cnVjdCBIYXNoRW50cnkgewotICAgIHNpemVfdCBzbG90OwotICAgIEhhc2hFbnRyeSogcHJldjsKLSAgICBIYXNoRW50cnkqIG5leHQ7Ci0gICAgdm9pZCogZGF0YTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IEhhc2hUYWJsZSBIYXNoVGFibGU7Ci1zdHJ1Y3QgSGFzaFRhYmxlIHsKLSAgICBIYXNoRW50cnkqIHNsb3RzW0hBU0hUQUJMRV9TSVpFXTsKLX07Ci0KLXN0YXRpYyBIYXNoVGFibGUgc011dGV4TWFwOwotc3RhdGljIEhhc2hUYWJsZSBzVGhyZWFkTWFwOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHVpbnQzMl90IGdldF9oYXNoY29kZSh2b2lkIGNvbnN0ICoga2V5LCBzaXplX3Qga2V5U2l6ZSkKLXsKLSAgICB1aW50MzJfdCBoID0ga2V5U2l6ZTsKLSAgICBjaGFyIGNvbnN0KiBkYXRhID0gKGNoYXIgY29uc3QqKWtleTsKLSAgICBzaXplX3QgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwga2V5U2l6ZTsgaSsrKSB7Ci0gICAgICAgIGggPSBoICogMzEgKyAqZGF0YTsKLSAgICAgICAgZGF0YSsrOwotICAgIH0KLSAgICByZXR1cm4gKHVpbnQzMl90KWg7Ci19Ci0KLXN0YXRpYyBzaXplX3QgZ2V0X2luZGV4KHVpbnQzMl90IGgpCi17Ci0gICAgLy8gV2UgYXBwbHkgdGhpcyBzZWNvbmRhcnkgaGFzaGluZyBkaXNjb3ZlcmVkIGJ5IERvdWcgTGVhIHRvIGRlZmVuZAotICAgIC8vIGFnYWluc3QgYmFkIGhhc2hlcy4KLSAgICBoICs9IH4oaCA8PCA5KTsKLSAgICBoIF49ICgoKHVuc2lnbmVkIGludCkgaCkgPj4gMTQpOwotICAgIGggKz0gKGggPDwgNCk7Ci0gICAgaCBePSAoKCh1bnNpZ25lZCBpbnQpIGgpID4+IDEwKTsKLSAgICByZXR1cm4gKHNpemVfdCloICYgKEhBU0hUQUJMRV9TSVpFIC0gMSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCBoYXNobWFwX2luaXQoSGFzaFRhYmxlKiB0YWJsZSkgewotICAgIG1lbXNldCh0YWJsZSwgMCwgc2l6ZW9mKEhhc2hUYWJsZSkpOwotfQotCi1zdGF0aWMgdm9pZCBoYXNobWFwX3JlbW92ZUVudHJ5KEhhc2hUYWJsZSogdGFibGUsIEhhc2hFbnRyeSogZW50cnkpCi17Ci0gICAgSGFzaEVudHJ5KiBwcmV2ID0gZW50cnktPnByZXY7Ci0gICAgSGFzaEVudHJ5KiBuZXh0ID0gZW50cnktPm5leHQ7Ci0gICAgaWYgKHByZXYgIT0gTlVMTCkgZW50cnktPnByZXYtPm5leHQgPSBuZXh0OwotICAgIGlmIChuZXh0ICE9IE5VTEwpIGVudHJ5LT5uZXh0LT5wcmV2ID0gcHJldjsKLSAgICBpZiAocHJldiA9PSBOVUxMKSB7Ci0gICAgICAgIC8vIHdlIGFyZSB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gc2V0IHRoZSBoZWFkIHRvIGJlIG5leHQKLSAgICAgICAgdGFibGUtPnNsb3RzW2VudHJ5LT5zbG90XSA9IGVudHJ5LT5uZXh0OwotICAgIH0KLX0KLQotc3RhdGljIEhhc2hFbnRyeSogaGFzaG1hcF9sb29rdXAoSGFzaFRhYmxlKiB0YWJsZSwKLSAgICAgICAgdm9pZCBjb25zdCoga2V5LCBzaXplX3Qga3NpemUsCi0gICAgICAgIGludCAoKmVxdWFscykodm9pZCBjb25zdCogZGF0YSwgdm9pZCBjb25zdCoga2V5KSkKLXsKLSAgICBjb25zdCB1aW50MzJfdCBoYXNoID0gZ2V0X2hhc2hjb2RlKGtleSwga3NpemUpOwotICAgIGNvbnN0IHNpemVfdCBzbG90ID0gZ2V0X2luZGV4KGhhc2gpOwotCi0gICAgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5zbG90c1tzbG90XTsKLSAgICB3aGlsZSAoZW50cnkpIHsKLSAgICAgICAgaWYgKGVxdWFscyhlbnRyeS0+ZGF0YSwga2V5KSkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKLSAgICB9Ci0KLSAgICBpZiAoZW50cnkgPT0gTlVMTCkgewotICAgICAgICAvLyBjcmVhdGUgYSBuZXcgZW50cnkKLSAgICAgICAgZW50cnkgPSBEYmdBbGxvY0xvY2tlZDxIYXNoRW50cnk+KCk7Ci0gICAgICAgIGVudHJ5LT5kYXRhID0gTlVMTDsKLSAgICAgICAgZW50cnktPnNsb3QgPSBzbG90OwotICAgICAgICBlbnRyeS0+cHJldiA9IE5VTEw7Ci0gICAgICAgIGVudHJ5LT5uZXh0ID0gdGFibGUtPnNsb3RzW3Nsb3RdOwotICAgICAgICBpZiAoZW50cnktPm5leHQgIT0gTlVMTCkgewotICAgICAgICAgICAgZW50cnktPm5leHQtPnByZXYgPSBlbnRyeTsKLSAgICAgICAgfQotICAgICAgICB0YWJsZS0+c2xvdHNbc2xvdF0gPSBlbnRyeTsKLSAgICB9Ci0gICAgcmV0dXJuIGVudHJ5OwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBNdXRleEluZm9fZXF1YWxzKHZvaWQgY29uc3QqIGRhdGEsIHZvaWQgY29uc3QqIGtleSkgewotICAgIHJldHVybiAoKE11dGV4SW5mbyBjb25zdCAqKWRhdGEpLT5tdXRleCA9PSAqKHB0aHJlYWRfbXV0ZXhfdCAqKilrZXk7Ci19Ci0KLXN0YXRpYyBNdXRleEluZm8qIGdldF9tdXRleF9pbmZvKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCi17Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrX3VuY2hlY2tlZCgmc0RiZ0xvY2spOwotCi0gICAgSGFzaEVudHJ5KiBlbnRyeSA9IGhhc2htYXBfbG9va3VwKCZzTXV0ZXhNYXAsCi0gICAgICAgICAgICAmbXV0ZXgsIHNpemVvZihtdXRleCksCi0gICAgICAgICAgICAmTXV0ZXhJbmZvX2VxdWFscyk7Ci0gICAgaWYgKGVudHJ5LT5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgTXV0ZXhJbmZvKiBtdXRleF9pbmZvID0gRGJnQWxsb2NMb2NrZWQ8TXV0ZXhJbmZvPigpOwotICAgICAgICBlbnRyeS0+ZGF0YSA9IG11dGV4X2luZm87Ci0gICAgICAgIGluaXRNdXRleEluZm8obXV0ZXhfaW5mbywgbXV0ZXgpOwotICAgIH0KLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrX3VuY2hlY2tlZCgmc0RiZ0xvY2spOwotCi0gICAgcmV0dXJuIChNdXRleEluZm8gKillbnRyeS0+ZGF0YTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgVGhyZWFkSW5mb19lcXVhbHModm9pZCBjb25zdCogZGF0YSwgdm9pZCBjb25zdCoga2V5KSB7Ci0gICAgcmV0dXJuICgoVGhyZWFkSW5mbyBjb25zdCAqKWRhdGEpLT5waWQgPT0gKihwaWRfdCAqKWtleTsKLX0KLQotc3RhdGljIFRocmVhZEluZm8qIGdldF90aHJlYWRfaW5mbyhwaWRfdCBwaWQpCi17Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrX3VuY2hlY2tlZCgmc0RiZ0xvY2spOwotCi0gICAgSGFzaEVudHJ5KiBlbnRyeSA9IGhhc2htYXBfbG9va3VwKCZzVGhyZWFkTWFwLAotICAgICAgICAgICAgJnBpZCwgc2l6ZW9mKHBpZCksCi0gICAgICAgICAgICAmVGhyZWFkSW5mb19lcXVhbHMpOwotICAgIGlmIChlbnRyeS0+ZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIFRocmVhZEluZm8qIHRocmVhZF9pbmZvID0gRGJnQWxsb2NMb2NrZWQ8VGhyZWFkSW5mbz4oKTsKLSAgICAgICAgZW50cnktPmRhdGEgPSB0aHJlYWRfaW5mbzsKLSAgICAgICAgaW5pdFRocmVhZEluZm8odGhyZWFkX2luZm8sIHBpZCk7Ci0gICAgfQotCi0gICAgcHRocmVhZF9tdXRleF91bmxvY2tfdW5jaGVja2VkKCZzRGJnTG9jayk7Ci0KLSAgICByZXR1cm4gKFRocmVhZEluZm8gKillbnRyeS0+ZGF0YTsKLX0KLQotc3RhdGljIHZvaWQgcHVzaF9tb3N0X3JlY2VudGx5X2xvY2tlZChNdXRleEluZm8qIG1ybCkgewotICAgIFRocmVhZEluZm8qIHRpbmZvID0gZ2V0X3RocmVhZF9pbmZvKGdldHRpZCgpKTsKLSAgICBtcmwtPm5leHQgPSBOVUxMOwotICAgIG1ybC0+cHJldiA9IHRpbmZvLT5tcmw7Ci0gICAgdGluZm8tPm1ybCA9IG1ybDsKLX0KLQotc3RhdGljIHZvaWQgcmVtb3ZlX21vc3RfcmVjZW50bHlfbG9ja2VkKE11dGV4SW5mbyogbXJsKSB7Ci0gICAgVGhyZWFkSW5mbyogdGluZm8gPSBnZXRfdGhyZWFkX2luZm8oZ2V0dGlkKCkpOwotICAgIGlmIChtcmwtPm5leHQpIHsKLSAgICAgICAgKG1ybC0+bmV4dCktPnByZXYgPSBtcmwtPnByZXY7Ci0gICAgfQotICAgIGlmIChtcmwtPnByZXYpIHsKLSAgICAgICAgKG1ybC0+cHJldiktPm5leHQgPSBtcmwtPm5leHQ7Ci0gICAgfQotICAgIGlmICh0aW5mby0+bXJsID09IG1ybCkgewotICAgICAgICB0aW5mby0+bXJsID0gbXJsLT5uZXh0OwotICAgIH0KLX0KLQotc3RhdGljIE11dGV4SW5mbyogZ2V0X21vc3RfcmVjZW50bHlfbG9ja2VkKCkgewotICAgIFRocmVhZEluZm8qIHRpbmZvID0gZ2V0X3RocmVhZF9pbmZvKGdldHRpZCgpKTsKLSAgICByZXR1cm4gdGluZm8tPm1ybDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBTZWUgaWYgd2Ugd2VyZSBhbGxvd2VkIHRvIGdyYWIgdGhlIGxvY2sgYXQgdGhpcyB0aW1lLiAgV2UgZG8gaXQKLSAqICphZnRlciogYWNxdWlyaW5nIHRoZSBsb2NrLCByYXRoZXIgdGhhbiBiZWZvcmUsIHNvIHRoYXQgd2UgY2FuCi0gKiBmcmVlbHkgdXBkYXRlIHRoZSBNdXRleEluZm8gc3RydWN0LiAgVGhpcyBzZWVtcyBjb3VudGVyLWludHVpdGl2ZSwKLSAqIGJ1dCBvdXIgZ29hbCBpcyBkZWFkbG9jayAqcHJlZGljdGlvbiogbm90IGRlYWRsb2NrICpwcmV2ZW50aW9uKi4KLSAqIChJZiB3ZSBhY3R1YWxseSBkZWFkbG9jaywgdGhlIHNpdHVhdGlvbiBpcyBlYXN5IHRvIGRpYWdub3NlIGZyb20KLSAqIGEgdGhyZWFkIGR1bXAsIHNvIHRoZXJlJ3Mgbm8gcG9pbnQgbWFraW5nIGEgc3BlY2lhbCBlZmZvcnQgdG8gZG8KLSAqIHRoZSBjaGVja3MgYmVmb3JlIHRoZSBsb2NrIGlzIGhlbGQuKQotICovCi0KLWV4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIHZvaWQgcHRocmVhZF9kZWJ1Z19tdXRleF9sb2NrX2NoZWNrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCi17Ci0gICAgaWYgKHNQdGhyZWFkRGVidWdMZXZlbCA9PSAwKSByZXR1cm47Ci0gICAgLy8gcHJlZGljdGlvbiBkaXNhYmxlZCBmb3IgdGhpcyB0aHJlYWQKLSAgICBpZiAoc1B0aHJlYWREZWJ1Z0Rpc2FibGVkVGhyZWFkID09IGdldHRpZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgTXV0ZXhJbmZvKiBvYmplY3QgPSBnZXRfbXV0ZXhfaW5mbyhtdXRleCk7Ci0gICAgTXV0ZXhJbmZvKiBtcmwgPSBnZXRfbW9zdF9yZWNlbnRseV9sb2NrZWQoKTsKLSAgICBtdXRleF9sb2NrX2NoZWNrZWQobXJsLCBvYmplY3QpOwotICAgIHB1c2hfbW9zdF9yZWNlbnRseV9sb2NrZWQob2JqZWN0KTsKLX0KLQotLyoKLSAqIHB0aHJlYWRfZGVidWdfbXV0ZXhfdW5sb2NrX2NoZWNrKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbXV0ZXgKLSAqIHN0aWxsIGhlbGQgKGllOiBiZWZvcmUgY2FsbGluZyB0aGUgcmVhbCB1bmxvY2spCi0gKi8KLQotZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gdm9pZCBwdGhyZWFkX2RlYnVnX211dGV4X3VubG9ja19jaGVjayhwdGhyZWFkX211dGV4X3QgKm11dGV4KQotewotICAgIGlmIChzUHRocmVhZERlYnVnTGV2ZWwgPT0gMCkgcmV0dXJuOwotICAgIC8vIHByZWRpY3Rpb24gZGlzYWJsZWQgZm9yIHRoaXMgdGhyZWFkCi0gICAgaWYgKHNQdGhyZWFkRGVidWdEaXNhYmxlZFRocmVhZCA9PSBnZXR0aWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIE11dGV4SW5mbyogb2JqZWN0ID0gZ2V0X211dGV4X2luZm8obXV0ZXgpOwotICAgIHJlbW92ZV9tb3N0X3JlY2VudGx5X2xvY2tlZChvYmplY3QpOwotICAgIG11dGV4X3VubG9ja19jaGVja2VkKG9iamVjdCk7Ci19Ci0KLSNlbmRpZiAvLyBQVEhSRUFEX0RFQlVHX0VOQUJMRUQKLQotLy8gQ2FsbGVkIGZyb20gbGliY19pbml0X2R5bmFtaWMoKSBqdXN0IGFmdGVyIHN5c3RlbSBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBpbml0aWFsaXplZC4KLWV4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIHZvaWQgcHRocmVhZF9kZWJ1Z19pbml0KCkgewotI2lmIFBUSFJFQURfREVCVUdfRU5BQkxFRAotICAgIGNoYXIgZW52W1BST1BfVkFMVUVfTUFYXTsKLSAgICBpZiAoX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJkZWJ1Zy5saWJjLnB0aHJlYWQiLCBlbnYpKSB7Ci0gICAgICAgIGludCBsZXZlbCA9IGF0b2koZW52KTsKLSAgICAgICAgaWYgKGxldmVsKSB7Ci0gICAgICAgICAgICBMT0dJKCJwdGhyZWFkIGRlYWRsb2NrIGRldGVjdGlvbiBsZXZlbCAlZCBlbmFibGVkIGZvciBwaWQgJWQgKCVzKSIsCi0gICAgICAgICAgICAgICAgICAgIGxldmVsLCBnZXRwaWQoKSwgX19wcm9nbmFtZSk7Ci0gICAgICAgICAgICBoYXNobWFwX2luaXQoJnNNdXRleE1hcCk7Ci0gICAgICAgICAgICBzUHRocmVhZERlYnVnTGV2ZWwgPSBsZXZlbDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9kZXRhY2guY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9kZXRhY2guY3BwCmluZGV4IDk1ZjExYWMuLmE4NjA4ZTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B0aHJlYWRfZGV0YWNoLmNwcAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2RldGFjaC5jcHAKQEAgLTQ0LDYgKzQ0LDEyIEBACiAgICAgcmV0dXJuIDA7IC8vIEFscmVhZHkgYmVpbmcgam9pbmVkOyBzaWxlbnRseSBkbyBub3RoaW5nLCBsaWtlIGdsaWJjLgogICB9CiAKKyAgaWYgKHRocmVhZC0+dGlkID09IDApIHsKKyAgICAvLyBBbHJlYWR5IGV4aXRlZDsgY2xlYW4gdXAuCisgICAgX3B0aHJlYWRfaW50ZXJuYWxfcmVtb3ZlX2xvY2tlZCh0aHJlYWQuZ2V0KCkpOworICAgIHJldHVybiAwOworICB9CisKICAgdGhyZWFkLT5hdHRyLmZsYWdzIHw9IFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVEOwogICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfZXhpdC5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2V4aXQuY3BwCmluZGV4IDI2OTI3NjIuLjZjZDUzMTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B0aHJlYWRfZXhpdC5jcHAKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9leGl0LmNwcApAQCAtMzQsOCArMzQsOCBAQAogCiAjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgogCi1leHRlcm4gIkMiIHZvaWQgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bih2b2lkKiwgc2l6ZV90KTsKLWV4dGVybiAiQyIgdm9pZCBfX2V4aXQoaW50KTsKK2V4dGVybiAiQyIgX19ub3JldHVybiB2b2lkIF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24odm9pZCosIHNpemVfdCk7CitleHRlcm4gIkMiIF9fbm9yZXR1cm4gdm9pZCBfX2V4aXQoaW50KTsKIGV4dGVybiAiQyIgaW50IF9fc2V0X3RpZF9hZGRyZXNzKGludCopOwogCiAvKiBDQVZFQVQ6IG91ciBpbXBsZW1lbnRhdGlvbiBvZiBwdGhyZWFkX2NsZWFudXBfcHVzaC9wb3AgZG9lc24ndCBzdXBwb3J0IEMrKyBleGNlcHRpb25zCkBAIC05MCw5ICs5MCw5IEBACiAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hhdCB3ZSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIHN0YWNrIGJlZm9yZSB3ZSBsb3NlIHRoZSBwdGhyZWFkX2ludGVybmFsX3QuCiAgIHZvaWQqIHN0YWNrX2Jhc2UgPSB0aHJlYWQtPmF0dHIuc3RhY2tfYmFzZTsKICAgc2l6ZV90IHN0YWNrX3NpemUgPSB0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZTsKLSAgYm9vbCB1c2VyX2FsbG9jYXRlZF9zdGFjayA9ICgodGhyZWFkLT5hdHRyLmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfVVNFUl9BTExPQ0FURURfU1RBQ0spICE9IDApOworICBib29sIHVzZXJfYWxsb2NhdGVkX3N0YWNrID0gdGhyZWFkLT51c2VyX2FsbG9jYXRlZF9zdGFjaygpOwogCi0gIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZnX3RocmVhZF9saXN0X2xvY2spOwogICBpZiAoKHRocmVhZC0+YXR0ci5mbGFncyAmIFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVEKSAhPSAwKSB7CiAgICAgLy8gVGhlIHRocmVhZCBpcyBkZXRhY2hlZCwgc28gd2UgY2FuIGZyZWUgdGhlIHB0aHJlYWRfaW50ZXJuYWxfdC4KICAgICAvLyBGaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUga2VybmVsIGRvZXMgbm90IHRyeSB0byBjbGVhciB0aGUgdGlkIGZpZWxkCkBAIC0xMTAsNyArMTEwLDEzIEBACiAgICAgLy8gcHRocmVhZF9qb2luIGlzIHJlc3BvbnNpYmxlIGZvciBkZXN0cm95aW5nIHRoZSBwdGhyZWFkX2ludGVybmFsX3QgZm9yIG5vbi1kZXRhY2hlZCB0aHJlYWRzLgogICAgIC8vIFRoZSBrZXJuZWwgd2lsbCBmdXRleF93YWtlIG9uIHRoZSBwdGhyZWFkX2ludGVybmFsX3Q6OnRpZCBmaWVsZCB0byB3YWtlIHB0aHJlYWRfam9pbi4KICAgfQotICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmdfdGhyZWFkX2xpc3RfbG9jayk7CisKKyAgLy8gUGVyZm9ybSBhIHNlY29uZCBrZXkgY2xlYW51cC4gV2hlbiB1c2luZyBqZW1hbGxvYywgYSBjYWxsIHRvIGZyZWUgZnJvbQorICAvLyBfcHRocmVhZF9pbnRlcm5hbF9yZW1vdmVfbG9ja2VkIGNhdXNlcyB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIGtleQorICAvLyB0byBiZSByZWFsbG9jYXRlZC4KKyAgLy8gVE9ETzogV2hlbiBiLzE2ODQ3Mjg0IGlzIGZpeGVkIHRoaXMgY2FsbCBjYW4gYmUgcmVtb3ZlZC4KKyAgcHRocmVhZF9rZXlfY2xlYW5fYWxsKCk7CiAKICAgaWYgKHVzZXJfYWxsb2NhdGVkX3N0YWNrKSB7CiAgICAgLy8gQ2xlYW5pbmcgdXAgdGhpcyB0aHJlYWQncyBzdGFjayBpcyB0aGUgY3JlYXRvcidzIHJlc3BvbnNpYmlsaXR5LCBub3Qgb3Vycy4KQEAgLTEyNyw3ICsxMzMsNCBAQAogCiAgICAgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bihzdGFja19iYXNlLCBzdGFja19zaXplKTsKICAgfQotCi0gIC8vIE5PVFJFQUNIRUQsIGJ1dCB3ZSB0b2xkIHRoZSBjb21waWxlciB0aGlzIGZ1bmN0aW9uIGlzIG5vcmV0dXJuLCBhbmQgaXQgZG9lc24ndCBiZWxpZXZlIHVzLgotICBhYm9ydCgpOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9nZXR0aWRfbnAuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9nZXR0aWRfbnAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NjYzYTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2dldHRpZF9ucC5jcHAKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3B0aHJlYWQuaCIKKworcGlkX3QgcHRocmVhZF9nZXR0aWRfbnAocHRocmVhZF90IHQpIHsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cHRocmVhZF9pbnRlcm5hbF90Kj4odCktPnRpZDsKK30KKworLy8gVE9ETzogbW92ZSBjYWxsZXJzIG92ZXIgdG8gcHRocmVhZF9nZXR0aWRfbnAgYW5kIHJlbW92ZSB0aGlzLgorcGlkX3QgX19wdGhyZWFkX2dldHRpZChwdGhyZWFkX3QgdCkgeworICByZXR1cm4gcHRocmVhZF9nZXR0aWRfbnAodCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFsLmggYi9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFsLmgKaW5kZXggMzFlZDA3Yy4uYTViMzAwMiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9pbnRlcm5hbC5oCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWwuaApAQCAtMzAsMTIgKzMwLDQ4IEBACiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKKy8qIEhhcyB0aGUgdGhyZWFkIGJlZW4gZGV0YWNoZWQgYnkgYSBwdGhyZWFkX2pvaW4gb3IgcHRocmVhZF9kZXRhY2ggY2FsbD8gKi8KKyNkZWZpbmUgUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQgMHgwMDAwMDAwMQorCisvKiBXYXMgdGhlIHRocmVhZCdzIHN0YWNrIGFsbG9jYXRlZCBieSB0aGUgdXNlciByYXRoZXIgdGhhbiBieSB1cz8gKi8KKyNkZWZpbmUgUFRIUkVBRF9BVFRSX0ZMQUdfVVNFUl9BTExPQ0FURURfU1RBQ0sgMHgwMDAwMDAwMgorCisvKiBIYXMgdGhlIHRocmVhZCBiZWVuIGpvaW5lZCBieSBhbm90aGVyIHRocmVhZD8gKi8KKyNkZWZpbmUgUFRIUkVBRF9BVFRSX0ZMQUdfSk9JTkVEIDB4MDAwMDAwMDQKKworLyogSXMgdGhpcyB0aGUgbWFpbiB0aHJlYWQ/ICovCisjZGVmaW5lIFBUSFJFQURfQVRUUl9GTEFHX01BSU5fVEhSRUFEIDB4ODAwMDAwMDAKKwogc3RydWN0IHB0aHJlYWRfaW50ZXJuYWxfdCB7CiAgIHN0cnVjdCBwdGhyZWFkX2ludGVybmFsX3QqIG5leHQ7CiAgIHN0cnVjdCBwdGhyZWFkX2ludGVybmFsX3QqIHByZXY7CiAKICAgcGlkX3QgdGlkOwogCisgcHJpdmF0ZToKKyAgcGlkX3QgY2FjaGVkX3BpZF87CisKKyBwdWJsaWM6CisgIHBpZF90IGludmFsaWRhdGVfY2FjaGVkX3BpZCgpIHsKKyAgICBwaWRfdCBvbGRfdmFsdWU7CisgICAgZ2V0X2NhY2hlZF9waWQoJm9sZF92YWx1ZSk7CisgICAgc2V0X2NhY2hlZF9waWQoMCk7CisgICAgcmV0dXJuIG9sZF92YWx1ZTsKKyAgfQorCisgIHZvaWQgc2V0X2NhY2hlZF9waWQocGlkX3QgdmFsdWUpIHsKKyAgICBjYWNoZWRfcGlkXyA9IHZhbHVlOworICB9CisKKyAgYm9vbCBnZXRfY2FjaGVkX3BpZChwaWRfdCogY2FjaGVkX3BpZCkgeworICAgICpjYWNoZWRfcGlkID0gY2FjaGVkX3BpZF87CisgICAgcmV0dXJuICgqY2FjaGVkX3BpZCAhPSAwKTsKKyAgfQorCisgIGJvb2wgdXNlcl9hbGxvY2F0ZWRfc3RhY2soKSB7CisgICAgcmV0dXJuIChhdHRyLmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfVVNFUl9BTExPQ0FURURfU1RBQ0spICE9IDA7CisgIH0KKwogICB2b2lkKiogdGxzOwogCiAgIHB0aHJlYWRfYXR0cl90IGF0dHI7CkBAIC00OCw2ICs4NCw4IEBACiAKICAgdm9pZCogYWx0ZXJuYXRlX3NpZ25hbF9zdGFjazsKIAorICBwdGhyZWFkX211dGV4X3Qgc3RhcnR1cF9oYW5kc2hha2VfbXV0ZXg7CisKICAgLyoKICAgICogVGhlIGR5bmFtaWMgbGlua2VyIGltcGxlbWVudHMgZGxlcnJvcigzKSwgd2hpY2ggbWFrZXMgaXQgaGFyZCBmb3IgdXMgdG8gaW1wbGVtZW50IHRoaXMKICAgICogcGVyLXRocmVhZCBidWZmZXIgYnkgc2ltcGx5IHVzaW5nIG1hbGxvYygzKSBhbmQgZnJlZSgzKS4KQEAgLTYwLDI1ICs5OCwxNSBAQAogX19MSUJDX0hJRERFTl9fIHZvaWQgX19pbml0X3RscyhwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCk7CiBfX0xJQkNfSElEREVOX18gdm9pZCBfX2luaXRfYWx0ZXJuYXRlX3NpZ25hbF9zdGFjayhwdGhyZWFkX2ludGVybmFsX3QqKTsKIF9fTElCQ19ISURERU5fXyB2b2lkIF9wdGhyZWFkX2ludGVybmFsX2FkZChwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCk7Ci1fX0xJQkNfSElEREVOX18gcHRocmVhZF9pbnRlcm5hbF90KiBfX2dldF90aHJlYWQodm9pZCk7CisKKy8qIFZhcmlvdXMgdGhpcmQtcGFydHkgYXBwcyBjb250YWluIGEgYmFja3BvcnQgb2Ygb3VyIHB0aHJlYWRfcndsb2NrIGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcyB0aGlzLiAqLworZXh0ZXJuICJDIiBfX0xJQkM2NF9ISURERU5fXyBwdGhyZWFkX2ludGVybmFsX3QqIF9fZ2V0X3RocmVhZCh2b2lkKTsKIAogX19MSUJDX0hJRERFTl9fIHZvaWQgcHRocmVhZF9rZXlfY2xlYW5fYWxsKHZvaWQpOwogX19MSUJDX0hJRERFTl9fIHZvaWQgX3B0aHJlYWRfaW50ZXJuYWxfcmVtb3ZlX2xvY2tlZChwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCk7CiAKLS8qIEhhcyB0aGUgdGhyZWFkIGJlZW4gZGV0YWNoZWQgYnkgYSBwdGhyZWFkX2pvaW4gb3IgcHRocmVhZF9kZXRhY2ggY2FsbD8gKi8KLSNkZWZpbmUgUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQgMHgwMDAwMDAwMQotCi0vKiBXYXMgdGhlIHRocmVhZCdzIHN0YWNrIGFsbG9jYXRlZCBieSB0aGUgdXNlciByYXRoZXIgdGhhbiBieSB1cz8gKi8KLSNkZWZpbmUgUFRIUkVBRF9BVFRSX0ZMQUdfVVNFUl9BTExPQ0FURURfU1RBQ0sgMHgwMDAwMDAwMgotCi0vKiBIYXMgdGhlIHRocmVhZCBiZWVuIGpvaW5lZCBieSBhbm90aGVyIHRocmVhZD8gKi8KLSNkZWZpbmUgUFRIUkVBRF9BVFRSX0ZMQUdfSk9JTkVEIDB4MDAwMDAwMDQKLQotLyogSXMgdGhpcyB0aGUgbWFpbiB0aHJlYWQ/ICovCi0jZGVmaW5lIFBUSFJFQURfQVRUUl9GTEFHX01BSU5fVEhSRUFEIDB4ODAwMDAwMDAKLQogLyoKLSAqIFRyYWRpdGlvbmFsbHkgd2UgZ2l2ZSB0aHJlYWRzIGEgMU1pQiBzdGFjay4gV2hlbiB3ZSBzdGFydGVkCisgKiBUcmFkaXRpb25hbGx5IHdlIGdhdmUgdGhyZWFkcyBhIDFNaUIgc3RhY2suIFdoZW4gd2Ugc3RhcnRlZAogICogYWxsb2NhdGluZyBwZXItdGhyZWFkIGFsdGVybmF0ZSBzaWduYWwgc3RhY2tzIHRvIGVhc2UgZGVidWdnaW5nIG9mCiAgKiBzdGFjayBvdmVyZmxvd3MsIHdlIHN1YnRyYWN0ZWQgdGhlIHNhbWUgYW1vdW50IHdlIHdlcmUgdXNpbmcgdGhlcmUKICAqIGZyb20gdGhlIGRlZmF1bHQgdGhyZWFkIHN0YWNrIHNpemUuIFRoaXMgc2hvdWxkIGtlZXAgbWVtb3J5IHVzYWdlCkBAIC04NiwxMyArMTE0LDEyIEBACiAgKi8KICNkZWZpbmUgUFRIUkVBRF9TVEFDS19TSVpFX0RFRkFVTFQgKCgxICogMTAyNCAqIDEwMjQpIC0gU0lHU1RLU1opCiAKLV9fTElCQ19ISURERU5fXyBleHRlcm4gcHRocmVhZF9pbnRlcm5hbF90KiBnVGhyZWFkTGlzdDsKLV9fTElCQ19ISURERU5fXyBleHRlcm4gcHRocmVhZF9tdXRleF90IGdUaHJlYWRMaXN0TG9jazsKK19fTElCQ19ISURERU5fXyBleHRlcm4gcHRocmVhZF9pbnRlcm5hbF90KiBnX3RocmVhZF9saXN0OworX19MSUJDX0hJRERFTl9fIGV4dGVybiBwdGhyZWFkX211dGV4X3QgZ190aHJlYWRfbGlzdF9sb2NrOwogCi1fX0xJQkNfSElEREVOX18gaW50IF9fdGltZXNwZWNfdG9fYWJzb2x1dGUodGltZXNwZWMqLCBjb25zdCB0aW1lc3BlYyosIGNsb2NraWRfdCk7CitfX0xJQkNfSElEREVOX18gaW50IF9fdGltZXNwZWNfZnJvbV9hYnNvbHV0ZSh0aW1lc3BlYyosIGNvbnN0IHRpbWVzcGVjKiwgY2xvY2tpZF90KTsKIAotLyogbmVlZGVkIGJ5IGZvcmsuYyAqLwotX19MSUJDX0hJRERFTl9fIGV4dGVybiB2b2lkIF9fdGltZXJfdGFibGVfc3RhcnRfc3RvcChpbnQpOworLyogTmVlZGVkIGJ5IGZvcmsuICovCiBfX0xJQkNfSElEREVOX18gZXh0ZXJuIHZvaWQgX19iaW9uaWNfYXRmb3JrX3J1bl9wcmVwYXJlKCk7CiBfX0xJQkNfSElEREVOX18gZXh0ZXJuIHZvaWQgX19iaW9uaWNfYXRmb3JrX3J1bl9jaGlsZCgpOwogX19MSUJDX0hJRERFTl9fIGV4dGVybiB2b2lkIF9fYmlvbmljX2F0Zm9ya19ydW5fcGFyZW50KCk7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFscy5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFscy5jcHAKaW5kZXggMDljNDhkYy4uNGMwOGJhOCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9pbnRlcm5hbHMuY3BwCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWxzLmNwcApAQCAtMjksMTIgKzI5LDExIEBACiAjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgogCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfZnV0ZXguaCIKLSNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19wdGhyZWFkLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfdGxzLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9TY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIuaCIKIAotcHRocmVhZF9pbnRlcm5hbF90KiBnVGhyZWFkTGlzdCA9IE5VTEw7Ci1wdGhyZWFkX211dGV4X3QgZ1RocmVhZExpc3RMb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK3B0aHJlYWRfaW50ZXJuYWxfdCogZ190aHJlYWRfbGlzdCA9IE5VTEw7CitwdGhyZWFkX211dGV4X3QgZ190aHJlYWRfbGlzdF9sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKIAogdm9pZCBfcHRocmVhZF9pbnRlcm5hbF9yZW1vdmVfbG9ja2VkKHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkKSB7CiAgIGlmICh0aHJlYWQtPm5leHQgIT0gTlVMTCkgewpAQCAtNDMsNyArNDIsNyBAQAogICBpZiAodGhyZWFkLT5wcmV2ICE9IE5VTEwpIHsKICAgICB0aHJlYWQtPnByZXYtPm5leHQgPSB0aHJlYWQtPm5leHQ7CiAgIH0gZWxzZSB7Ci0gICAgZ1RocmVhZExpc3QgPSB0aHJlYWQtPm5leHQ7CisgICAgZ190aHJlYWRfbGlzdCA9IHRocmVhZC0+bmV4dDsKICAgfQogCiAgIC8vIFRoZSBtYWluIHRocmVhZCBpcyBub3QgaGVhcC1hbGxvY2F0ZWQuIFNlZSBfX2xpYmNfaW5pdF90bHMgZm9yIHRoZSBkZWNsYXJhdGlvbiwKQEAgLTU0LDI4ICs1MywyNCBAQAogfQogCiB2b2lkIF9wdGhyZWFkX2ludGVybmFsX2FkZChwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCkgewotICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnVGhyZWFkTGlzdExvY2spOworICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnX3RocmVhZF9saXN0X2xvY2spOwogCiAgIC8vIFdlIGluc2VydCBhdCB0aGUgaGVhZC4KLSAgdGhyZWFkLT5uZXh0ID0gZ1RocmVhZExpc3Q7CisgIHRocmVhZC0+bmV4dCA9IGdfdGhyZWFkX2xpc3Q7CiAgIHRocmVhZC0+cHJldiA9IE5VTEw7CiAgIGlmICh0aHJlYWQtPm5leHQgIT0gTlVMTCkgewogICAgIHRocmVhZC0+bmV4dC0+cHJldiA9IHRocmVhZDsKICAgfQotICBnVGhyZWFkTGlzdCA9IHRocmVhZDsKKyAgZ190aHJlYWRfbGlzdCA9IHRocmVhZDsKIH0KIAogcHRocmVhZF9pbnRlcm5hbF90KiBfX2dldF90aHJlYWQodm9pZCkgewogICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwdGhyZWFkX2ludGVybmFsX3QqPihfX2dldF90bHMoKVtUTFNfU0xPVF9USFJFQURfSURdKTsKIH0KIAotcGlkX3QgX19wdGhyZWFkX2dldHRpZChwdGhyZWFkX3QgdCkgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwdGhyZWFkX2ludGVybmFsX3QqPih0KS0+dGlkOwotfQotCiAvLyBJbml0aWFsaXplICd0cycgd2l0aCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuICdhYnN0aW1lJyBhbmQgdGhlIGN1cnJlbnQgdGltZQogLy8gYWNjb3JkaW5nIHRvICdjbG9jaycuIFJldHVybnMgLTEgaWYgYWJzdGltZSBhbHJlYWR5IGV4cGlyZWQsIG9yIDAgb3RoZXJ3aXNlLgotaW50IF9fdGltZXNwZWNfdG9fYWJzb2x1dGUodGltZXNwZWMqIHRzLCBjb25zdCB0aW1lc3BlYyogYWJzdGltZSwgY2xvY2tpZF90IGNsb2NrKSB7CitpbnQgX190aW1lc3BlY19mcm9tX2Fic29sdXRlKHRpbWVzcGVjKiB0cywgY29uc3QgdGltZXNwZWMqIGFic3RpbWUsIGNsb2NraWRfdCBjbG9jaykgewogICBjbG9ja19nZXR0aW1lKGNsb2NrLCB0cyk7CiAgIHRzLT50dl9zZWMgID0gYWJzdGltZS0+dHZfc2VjIC0gdHMtPnR2X3NlYzsKICAgdHMtPnR2X25zZWMgPSBhYnN0aW1lLT50dl9uc2VjIC0gdHMtPnR2X25zZWM7CkBAIC04OCwxMSArODMsMyBAQAogICB9CiAgIHJldHVybiAwOwogfQotCi1pbnQgX19mdXRleF93YWtlX2V4KHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IHBzaGFyZWQsIGludCB2YWwpIHsKLSAgcmV0dXJuIF9fZnV0ZXhfc3lzY2FsbDMoZnR4LCBwc2hhcmVkID8gRlVURVhfV0FLRSA6IEZVVEVYX1dBS0VfUFJJVkFURSwgdmFsKTsKLX0KLQotaW50IF9fZnV0ZXhfd2FpdF9leCh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCBwc2hhcmVkLCBpbnQgdmFsLCBjb25zdCB0aW1lc3BlYyogdGltZW91dCkgewotICByZXR1cm4gX19mdXRleF9zeXNjYWxsNChmdHgsIHBzaGFyZWQgPyBGVVRFWF9XQUlUIDogRlVURVhfV0FJVF9QUklWQVRFLCB2YWwsIHRpbWVvdXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9rZXkuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9rZXkuY3BwCmluZGV4IDZjYzY4YWYuLjI3ZWFiMjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B0aHJlYWRfa2V5LmNwcAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2tleS5jcHAKQEAgLTIxMCw4ICsyMTAsOCBAQAogICB9CiAKICAgLy8gQ2xlYXIgdmFsdWUgaW4gYWxsIHRocmVhZHMuCi0gIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ1RocmVhZExpc3RMb2NrKTsKLSAgZm9yIChwdGhyZWFkX2ludGVybmFsX3QqICB0ID0gZ1RocmVhZExpc3Q7IHQgIT0gTlVMTDsgdCA9IHQtPm5leHQpIHsKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZnX3RocmVhZF9saXN0X2xvY2spOworICBmb3IgKHB0aHJlYWRfaW50ZXJuYWxfdCogIHQgPSBnX3RocmVhZF9saXN0OyB0ICE9IE5VTEw7IHQgPSB0LT5uZXh0KSB7CiAgICAgLy8gU2tpcCB6b21iaWUgdGhyZWFkcy4gVGhleSBkb24ndCBoYXZlIGEgdmFsaWQgVExTIGFyZWEgYW55IG1vcmUuCiAgICAgLy8gU2ltaWxhcmx5LCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIHQtPnRscyA9PSBOVUxMIGZvciB0aHJlYWRzIHRoYXQKICAgICAvLyB3ZXJlIGp1c3QgcmVjZW50bHkgY3JlYXRlZCB0aHJvdWdoIHB0aHJlYWRfY3JlYXRlKCkgYnV0IHdob3NlCkBAIC0yMjYsNyArMjI2LDcgQEAKICAgfQogICB0bHNfbWFwLkRlbGV0ZUtleShrZXkpOwogCi0gIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICBwdGhyZWFkX211dGV4X3VubG9jaygmZ190aHJlYWRfbGlzdF9sb2NrKTsKICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfbXV0ZXguY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9tdXRleC5jcHAKaW5kZXggMGQ5OTJiMy4uYWUyNTU3ZiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvcHRocmVhZF9tdXRleC5jcHAKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9tdXRleC5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCkBAIC0zOSw3ICszOCw2IEBACiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfYXRvbWljX2lubGluZS5oIgogI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2Z1dGV4LmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfdGxzLmgiCi0jaW5jbHVkZSAicHJpdmF0ZS90aHJlYWRfcHJpdmF0ZS5oIgogCiBleHRlcm4gdm9pZCBwdGhyZWFkX2RlYnVnX211dGV4X2xvY2tfY2hlY2socHRocmVhZF9tdXRleF90ICptdXRleCk7CiBleHRlcm4gdm9pZCBwdGhyZWFkX2RlYnVnX211dGV4X3VubG9ja19jaGVjayhwdGhyZWFkX211dGV4X3QgKm11dGV4KTsKQEAgLTIwNyw1NSArMjA1LDQyIEBACiAKIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIpCiB7Ci0gICAgaWYgKGF0dHIpIHsKLSAgICAgICAgKmF0dHIgPSBQVEhSRUFEX01VVEVYX0RFRkFVTFQ7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0gICAgfQorICAgICphdHRyID0gUFRIUkVBRF9NVVRFWF9ERUZBVUxUOworICAgIHJldHVybiAwOwogfQogCiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveShwdGhyZWFkX211dGV4YXR0cl90ICphdHRyKQogewotICAgIGlmIChhdHRyKSB7Ci0gICAgICAgICphdHRyID0gLTE7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0gICAgfQorICAgICphdHRyID0gLTE7CisgICAgcmV0dXJuIDA7CiB9CiAKLWludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBlKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIsIGludCAqdHlwZSkKK2ludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBlKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIsIGludCAqdHlwZV9wKQogewotICAgIGlmIChhdHRyKSB7Ci0gICAgICAgIGludCAgYXR5cGUgPSAoKmF0dHIgJiBNVVRFWEFUVFJfVFlQRV9NQVNLKTsKKyAgICBpbnQgdHlwZSA9ICgqYXR0ciAmIE1VVEVYQVRUUl9UWVBFX01BU0spOwogCi0gICAgICAgICBpZiAoYXR5cGUgPj0gUFRIUkVBRF9NVVRFWF9OT1JNQUwgJiYKLSAgICAgICAgICAgICBhdHlwZSA8PSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0spIHsKLSAgICAgICAgICAgICp0eXBlID0gYXR5cGU7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorICAgIGlmICh0eXBlIDwgUFRIUkVBRF9NVVRFWF9OT1JNQUwgfHwgdHlwZSA+IFBUSFJFQURfTVVURVhfRVJST1JDSEVDSykgeworICAgICAgICByZXR1cm4gRUlOVkFMOwogICAgIH0KLSAgICByZXR1cm4gRUlOVkFMOworCisgICAgKnR5cGVfcCA9IHR5cGU7CisgICAgcmV0dXJuIDA7CiB9CiAKIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIsIGludCB0eXBlKQogewotICAgIGlmIChhdHRyICYmIHR5cGUgPj0gUFRIUkVBRF9NVVRFWF9OT1JNQUwgJiYKLSAgICAgICAgICAgICAgICB0eXBlIDw9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyApIHsKLSAgICAgICAgKmF0dHIgPSAoKmF0dHIgJiB+TVVURVhBVFRSX1RZUEVfTUFTSykgfCB0eXBlOwotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAodHlwZSA8IFBUSFJFQURfTVVURVhfTk9STUFMIHx8IHR5cGUgPiBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgKSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CiAgICAgfQotICAgIHJldHVybiBFSU5WQUw7CisKKyAgICAqYXR0ciA9ICgqYXR0ciAmIH5NVVRFWEFUVFJfVFlQRV9NQVNLKSB8IHR5cGU7CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qIHByb2Nlc3Mtc2hhcmVkIG11dGV4ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudCAqLwogCiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZChwdGhyZWFkX211dGV4YXR0cl90ICphdHRyLCBpbnQgIHBzaGFyZWQpCiB7Ci0gICAgaWYgKCFhdHRyKQotICAgICAgICByZXR1cm4gRUlOVkFMOwotCiAgICAgc3dpdGNoIChwc2hhcmVkKSB7CiAgICAgY2FzZSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURToKICAgICAgICAgKmF0dHIgJj0gfk1VVEVYQVRUUl9TSEFSRURfTUFTSzsKQEAgLTI3NCwxMSArMjU5LDcgQEAKIH0KIAogaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCogYXR0ciwgaW50KiBwc2hhcmVkKSB7Ci0gICAgaWYgKCFhdHRyIHx8ICFwc2hhcmVkKQotICAgICAgICByZXR1cm4gRUlOVkFMOwotCi0gICAgKnBzaGFyZWQgPSAoKmF0dHIgJiBNVVRFWEFUVFJfU0hBUkVEX01BU0spID8gUFRIUkVBRF9QUk9DRVNTX1NIQVJFRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFOworICAgICpwc2hhcmVkID0gKCphdHRyICYgTVVURVhBVFRSX1NIQVJFRF9NQVNLKSA/IFBUSFJFQURfUFJPQ0VTU19TSEFSRUQgOiBQVEhSRUFEX1BST0NFU1NfUFJJVkFURTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzI0LDkgKzMwNSw3IEBACiAgKiAidHlwZSIgdmFsdWUgaXMgemVybywgc28gdGhlIG9ubHkgYml0cyB0aGF0IHdpbGwgYmUgc2V0IGFyZSB0aGUgb25lcyBpbgogICogdGhlIGxvY2sgc3RhdGUgZmllbGQuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLV9ub3JtYWxfbG9jayhwdGhyZWFkX211dGV4X3QqICBtdXRleCwgaW50IHNoYXJlZCkKLXsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfbm9ybWFsX2xvY2socHRocmVhZF9tdXRleF90KiBtdXRleCwgaW50IHNoYXJlZCkgewogICAgIC8qIGNvbnZlbmllbmNlIHNob3J0Y3V0cyAqLwogICAgIGNvbnN0IGludCB1bmxvY2tlZCAgICAgICAgICAgPSBzaGFyZWQgfCBNVVRFWF9TVEFURV9CSVRTX1VOTE9DS0VEOwogICAgIGNvbnN0IGludCBsb2NrZWRfdW5jb250ZW5kZWQgPSBzaGFyZWQgfCBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9VTkNPTlRFTkRFRDsKQEAgLTM1NCw4ICszMzMsOSBAQAogICAgICAgICAgKiB0aGF0IHRoZSBtdXRleCBpcyBpbiBzdGF0ZSAyIHdoZW4gd2UgZ28gdG8gc2xlZXAgb24gaXQsIHdoaWNoCiAgICAgICAgICAqIGd1YXJhbnRlZXMgYSB3YWtlLXVwIGNhbGwuCiAgICAgICAgICAqLwotICAgICAgICB3aGlsZSAoX19iaW9uaWNfc3dhcChsb2NrZWRfY29udGVuZGVkLCAmbXV0ZXgtPnZhbHVlKSAhPSB1bmxvY2tlZCkKLSAgICAgICAgICAgIF9fZnV0ZXhfd2FpdF9leCgmbXV0ZXgtPnZhbHVlLCBzaGFyZWQsIGxvY2tlZF9jb250ZW5kZWQsIDApOworICAgICAgICB3aGlsZSAoX19iaW9uaWNfc3dhcChsb2NrZWRfY29udGVuZGVkLCAmbXV0ZXgtPnZhbHVlKSAhPSB1bmxvY2tlZCkgeworICAgICAgICAgICAgX19mdXRleF93YWl0X2V4KCZtdXRleC0+dmFsdWUsIHNoYXJlZCwgbG9ja2VkX2NvbnRlbmRlZCwgTlVMTCk7CisgICAgICAgIH0KICAgICB9CiAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwogfQpAQCAtMzY0LDkgKzM0NCw3IEBACiAgKiBSZWxlYXNlIGEgbm9uLXJlY3Vyc2l2ZSBtdXRleC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nCiAgKiB0aGF0IHdlIGFyZSBpbiBmYWN0IHRoZSBvd25lciBvZiB0aGlzIGxvY2suCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLV9ub3JtYWxfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCogIG11dGV4LCBpbnQgc2hhcmVkKQoteworc3RhdGljIGlubGluZSB2b2lkIF9ub3JtYWxfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIGludCBzaGFyZWQpIHsKICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CiAKICAgICAvKgpAQCAtNDI4LDkgKzQwNiw3IEBACiAgKiBtdmFsdWUgaXMgdGhlIGN1cnJlbnQgbXV0ZXggdmFsdWUgKGFscmVhZHkgbG9hZGVkKQogICogbXV0ZXggcG9pbnRlcnMgdG8gdGhlIG11dGV4LgogICovCi1zdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW50Ci1fcmVjdXJzaXZlX2luY3JlbWVudChwdGhyZWFkX211dGV4X3QqIG11dGV4LCBpbnQgbXZhbHVlLCBpbnQgbXR5cGUpCi17CitzdGF0aWMgaW5saW5lIF9fYWx3YXlzX2lubGluZSBpbnQgX3JlY3Vyc2l2ZV9pbmNyZW1lbnQocHRocmVhZF9tdXRleF90KiBtdXRleCwgaW50IG12YWx1ZSwgaW50IG10eXBlKSB7CiAgICAgaWYgKG10eXBlID09IE1VVEVYX1RZUEVfQklUU19FUlJPUkNIRUNLKSB7CiAgICAgICAgIC8qIHRyeWluZyB0byByZS1sb2NrIGEgbXV0ZXggd2UgYWxyZWFkeSBhY3F1aXJlZCAqLwogICAgICAgICByZXR1cm4gRURFQURMSzsKQEAgLTQ2MywxNiArNDM5LDIwIEBACiAgICAgfQogfQogCi1fX0xJQkNfSElEREVOX18KLWludCBwdGhyZWFkX211dGV4X2xvY2tfaW1wbChwdGhyZWFkX211dGV4X3QgKm11dGV4KQoteworaW50IHB0aHJlYWRfbXV0ZXhfbG9jayhwdGhyZWFkX211dGV4X3QqIG11dGV4KSB7CisjaWYgIWRlZmluZWQoX19MUDY0X18pCisgICAgaWYgKG11dGV4ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgICB9CisjZW5kaWYKKwogICAgIGludCBtdmFsdWUsIG10eXBlLCB0aWQsIHNoYXJlZDsKIAogICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKICAgICBtdHlwZSA9IChtdmFsdWUgJiBNVVRFWF9UWVBFX01BU0spOwogICAgIHNoYXJlZCA9IChtdmFsdWUgJiBNVVRFWF9TSEFSRURfTUFTSyk7CiAKLSAgICAvKiBIYW5kbGUgbm9ybWFsIGNhc2UgZmlyc3QgKi8KKyAgICAvKiBIYW5kbGUgbm9uLXJlY3Vyc2l2ZSBjYXNlIGZpcnN0ICovCiAgICAgaWYgKCBfX3ByZWRpY3RfdHJ1ZShtdHlwZSA9PSBNVVRFWF9UWVBFX0JJVFNfTk9STUFMKSApIHsKICAgICAgICAgX25vcm1hbF9sb2NrKG11dGV4LCBzaGFyZWQpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTU0MSwyMCArNTIxLDEzIEBACiAgICAgLyogTk9UUkVBQ0hFRCAqLwogfQogCi1pbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCi17Ci0gICAgaW50IGVyciA9IHB0aHJlYWRfbXV0ZXhfbG9ja19pbXBsKG11dGV4KTsKLSAgICBpZiAoUFRIUkVBRF9ERUJVR19FTkFCTEVEKSB7Ci0gICAgICAgIGlmICghZXJyKSB7Ci0gICAgICAgICAgICBwdGhyZWFkX2RlYnVnX211dGV4X2xvY2tfY2hlY2sobXV0ZXgpOwotICAgICAgICB9CitpbnQgcHRocmVhZF9tdXRleF91bmxvY2socHRocmVhZF9tdXRleF90KiBtdXRleCkgeworI2lmICFkZWZpbmVkKF9fTFA2NF9fKQorICAgIGlmIChtdXRleCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CiAgICAgfQotICAgIHJldHVybiBlcnI7Ci19CisjZW5kaWYKIAotX19MSUJDX0hJRERFTl9fCi1pbnQgcHRocmVhZF9tdXRleF91bmxvY2tfaW1wbChwdGhyZWFkX211dGV4X3QgKm11dGV4KQotewogICAgIGludCBtdmFsdWUsIG10eXBlLCB0aWQsIHNoYXJlZDsKIAogICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKQEAgLTYwNiwxNyArNTc5LDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCi17Ci0gICAgaWYgKFBUSFJFQURfREVCVUdfRU5BQkxFRCkgewotICAgICAgICBwdGhyZWFkX2RlYnVnX211dGV4X3VubG9ja19jaGVjayhtdXRleCk7Ci0gICAgfQotICAgIHJldHVybiBwdGhyZWFkX211dGV4X3VubG9ja19pbXBsKG11dGV4KTsKLX0KLQotX19MSUJDX0hJRERFTl9fCi1pbnQgcHRocmVhZF9tdXRleF90cnlsb2NrX2ltcGwocHRocmVhZF9tdXRleF90ICptdXRleCkKLXsKK2ludCBwdGhyZWFkX211dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90KiBtdXRleCkgewogICAgIGludCBtdmFsdWUsIG10eXBlLCB0aWQsIHNoYXJlZDsKIAogICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKQEAgLTY1NiwxNjMgKzYxOSwxMzYgQEAKICAgICByZXR1cm4gRUJVU1k7CiB9CiAKLWludCBwdGhyZWFkX211dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICptdXRleCkKLXsKLSAgICBpbnQgZXJyID0gcHRocmVhZF9tdXRleF90cnlsb2NrX2ltcGwobXV0ZXgpOwotICAgIGlmIChQVEhSRUFEX0RFQlVHX0VOQUJMRUQpIHsKLSAgICAgICAgaWYgKCFlcnIpIHsKLSAgICAgICAgICAgIHB0aHJlYWRfZGVidWdfbXV0ZXhfbG9ja19jaGVjayhtdXRleCk7Ci0gICAgICAgIH0KK3N0YXRpYyBpbnQgX19wdGhyZWFkX211dGV4X3RpbWVkbG9jayhwdGhyZWFkX211dGV4X3QqIG11dGV4LCBjb25zdCB0aW1lc3BlYyogYWJzX3RpbWVvdXQsIGNsb2NraWRfdCBjbG9jaykgeworICB0aW1lc3BlYyB0czsKKworICBpbnQgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOworICBpbnQgbXR5cGUgID0gKG12YWx1ZSAmIE1VVEVYX1RZUEVfTUFTSyk7CisgIGludCBzaGFyZWQgPSAobXZhbHVlICYgTVVURVhfU0hBUkVEX01BU0spOworCisgIC8vIEhhbmRsZSBjb21tb24gY2FzZSBmaXJzdC4KKyAgaWYgKF9fcHJlZGljdF90cnVlKG10eXBlID09IE1VVEVYX1RZUEVfQklUU19OT1JNQUwpKSB7CisgICAgY29uc3QgaW50IHVubG9ja2VkICAgICAgICAgICA9IHNoYXJlZCB8IE1VVEVYX1NUQVRFX0JJVFNfVU5MT0NLRUQ7CisgICAgY29uc3QgaW50IGxvY2tlZF91bmNvbnRlbmRlZCA9IHNoYXJlZCB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX1VOQ09OVEVOREVEOworICAgIGNvbnN0IGludCBsb2NrZWRfY29udGVuZGVkICAgPSBzaGFyZWQgfCBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9DT05URU5ERUQ7CisKKyAgICAvLyBGYXN0IHBhdGggZm9yIHVuY29udGVuZGVkIGxvY2suIE5vdGU6IE1VVEVYX1RZUEVfQklUU19OT1JNQUwgaXMgMC4KKyAgICBpZiAoX19iaW9uaWNfY21weGNoZyh1bmxvY2tlZCwgbG9ja2VkX3VuY29udGVuZGVkLCAmbXV0ZXgtPnZhbHVlKSA9PSAwKSB7CisgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CisgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIGVycjsKLX0KIAotLyogaW5pdGlhbGl6ZSAnYWJzdGltZScgdG8gdGhlIGN1cnJlbnQgdGltZSBhY2NvcmRpbmcgdG8gJ2Nsb2NrJyBwbHVzICdtc2VjcycKLSAqIG1pbGxpc2Vjb25kcy4KLSAqLwotc3RhdGljIHZvaWQgX190aW1lc3BlY190b19yZWxhdGl2ZV9tc2VjKHRpbWVzcGVjKiBhYnN0aW1lLCB1bnNpZ25lZCBtc2VjcywgY2xvY2tpZF90IGNsb2NrKSB7Ci0gICAgY2xvY2tfZ2V0dGltZShjbG9jaywgYWJzdGltZSk7Ci0gICAgYWJzdGltZS0+dHZfc2VjICArPSBtc2Vjcy8xMDAwOwotICAgIGFic3RpbWUtPnR2X25zZWMgKz0gKG1zZWNzJTEwMDApKjEwMDAwMDA7Ci0gICAgaWYgKGFic3RpbWUtPnR2X25zZWMgPj0gMTAwMDAwMDAwMCkgewotICAgICAgICBhYnN0aW1lLT50dl9zZWMrKzsKLSAgICAgICAgYWJzdGltZS0+dHZfbnNlYyAtPSAxMDAwMDAwMDAwOworICAgIC8vIExvb3Agd2hpbGUgbmVlZGVkLgorICAgIHdoaWxlIChfX2Jpb25pY19zd2FwKGxvY2tlZF9jb250ZW5kZWQsICZtdXRleC0+dmFsdWUpICE9IHVubG9ja2VkKSB7CisgICAgICBpZiAoX190aW1lc3BlY19mcm9tX2Fic29sdXRlKCZ0cywgYWJzX3RpbWVvdXQsIGNsb2NrKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIEVUSU1FRE9VVDsKKyAgICAgIH0KKyAgICAgIF9fZnV0ZXhfd2FpdF9leCgmbXV0ZXgtPnZhbHVlLCBzaGFyZWQsIGxvY2tlZF9jb250ZW5kZWQsICZ0cyk7CiAgICAgfQotfQorICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKKyAgICByZXR1cm4gMDsKKyAgfQogCi1fX0xJQkNfSElEREVOX18KLWludCBwdGhyZWFkX211dGV4X2xvY2tfdGltZW91dF9ucF9pbXBsKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgsIHVuc2lnbmVkIG1zZWNzKQotewotICAgIGNsb2NraWRfdCAgICAgICAgY2xvY2sgPSBDTE9DS19NT05PVE9OSUM7Ci0gICAgdGltZXNwZWMgIGFic3RpbWU7Ci0gICAgdGltZXNwZWMgIHRzOwotICAgIGludCAgICAgICAgICAgICAgIG12YWx1ZSwgbXR5cGUsIHRpZCwgc2hhcmVkOworICAvLyBEbyB3ZSBhbHJlYWR5IG93biB0aGlzIHJlY3Vyc2l2ZSBvciBlcnJvci1jaGVjayBtdXRleD8KKyAgcGlkX3QgdGlkID0gX19nZXRfdGhyZWFkKCktPnRpZDsKKyAgaWYgKHRpZCA9PSBNVVRFWF9PV05FUl9GUk9NX0JJVFMobXZhbHVlKSkgeworICAgIHJldHVybiBfcmVjdXJzaXZlX2luY3JlbWVudChtdXRleCwgbXZhbHVlLCBtdHlwZSk7CisgIH0KIAotICAgIC8qIGNvbXB1dGUgYWJzb2x1dGUgZXhwaXJhdGlvbiB0aW1lICovCi0gICAgX190aW1lc3BlY190b19yZWxhdGl2ZV9tc2VjKCZhYnN0aW1lLCBtc2VjcywgY2xvY2spOworICAvLyBUaGUgZm9sbG93aW5nIGltcGxlbWVudHMgdGhlIHNhbWUgbG9vcCBhcyBwdGhyZWFkX211dGV4X2xvY2tfaW1wbAorICAvLyBidXQgYWRkcyBjaGVja3MgdG8gZW5zdXJlIHRoYXQgdGhlIG9wZXJhdGlvbiBuZXZlciBleGNlZWRzIHRoZQorICAvLyBhYnNvbHV0ZSBleHBpcmF0aW9uIHRpbWUuCisgIG10eXBlIHw9IHNoYXJlZDsKIAorICAvLyBGaXJzdCB0cnkgYSBxdWljayBsb2NrLgorICBpZiAobXZhbHVlID09IG10eXBlKSB7CisgICAgbXZhbHVlID0gTVVURVhfT1dORVJfVE9fQklUUyh0aWQpIHwgbXR5cGUgfCBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9VTkNPTlRFTkRFRDsKKyAgICBpZiAoX19wcmVkaWN0X3RydWUoX19iaW9uaWNfY21weGNoZyhtdHlwZSwgbXZhbHVlLCAmbXV0ZXgtPnZhbHVlKSA9PSAwKSkgeworICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKLSAgICBtdHlwZSAgPSAobXZhbHVlICYgTVVURVhfVFlQRV9NQVNLKTsKLSAgICBzaGFyZWQgPSAobXZhbHVlICYgTVVURVhfU0hBUkVEX01BU0spOworICB9CiAKLSAgICAvKiBIYW5kbGUgY29tbW9uIGNhc2UgZmlyc3QgKi8KLSAgICBpZiAoIF9fcHJlZGljdF90cnVlKG10eXBlID09IE1VVEVYX1RZUEVfQklUU19OT1JNQUwpICkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGludCB1bmxvY2tlZCAgICAgICAgICAgPSBzaGFyZWQgfCBNVVRFWF9TVEFURV9CSVRTX1VOTE9DS0VEOwotICAgICAgICBjb25zdCBpbnQgbG9ja2VkX3VuY29udGVuZGVkID0gc2hhcmVkIHwgTVVURVhfU1RBVEVfQklUU19MT0NLRURfVU5DT05URU5ERUQ7Ci0gICAgICAgIGNvbnN0IGludCBsb2NrZWRfY29udGVuZGVkICAgPSBzaGFyZWQgfCBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9DT05URU5ERUQ7Ci0KLSAgICAgICAgLyogZmFzdCBwYXRoIGZvciB1bmNvbnRlbmRlZCBsb2NrLiBOb3RlOiBNVVRFWF9UWVBFX0JJVFNfTk9STUFMIGlzIDAgKi8KLSAgICAgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcodW5sb2NrZWQsIGxvY2tlZF91bmNvbnRlbmRlZCwgJm11dGV4LT52YWx1ZSkgPT0gMCkgewotICAgICAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBsb29wIHdoaWxlIG5lZWRlZCAqLwotICAgICAgICB3aGlsZSAoX19iaW9uaWNfc3dhcChsb2NrZWRfY29udGVuZGVkLCAmbXV0ZXgtPnZhbHVlKSAhPSB1bmxvY2tlZCkgewotICAgICAgICAgICAgaWYgKF9fdGltZXNwZWNfdG9fYWJzb2x1dGUoJnRzLCAmYWJzdGltZSwgY2xvY2spIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gRUJVU1k7Ci0KLSAgICAgICAgICAgIF9fZnV0ZXhfd2FpdF9leCgmbXV0ZXgtPnZhbHVlLCBzaGFyZWQsIGxvY2tlZF9jb250ZW5kZWQsICZ0cyk7Ci0gICAgICAgIH0KKyAgd2hpbGUgKHRydWUpIHsKKyAgICAvLyBJZiB0aGUgdmFsdWUgaXMgJ3VubG9ja2VkJywgdHJ5IHRvIGFjcXVpcmUgaXQgZGlyZWN0bHkuCisgICAgLy8gTk9URTogcHV0IHN0YXRlIHRvIDIgc2luY2Ugd2Uga25vdyB0aGVyZSBpcyBjb250ZW50aW9uLgorICAgIGlmIChtdmFsdWUgPT0gbXR5cGUpIHsgLy8gVW5sb2NrZWQuCisgICAgICBtdmFsdWUgPSBNVVRFWF9PV05FUl9UT19CSVRTKHRpZCkgfCBtdHlwZSB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX0NPTlRFTkRFRDsKKyAgICAgIGlmIChfX2Jpb25pY19jbXB4Y2hnKG10eXBlLCBtdmFsdWUsICZtdXRleC0+dmFsdWUpID09IDApIHsKICAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwogICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICAgIC8vIFRoZSB2YWx1ZSBjaGFuZ2VkIGJlZm9yZSB3ZSBjb3VsZCBsb2NrIGl0LiBXZSBuZWVkIHRvIGNoZWNrCisgICAgICAvLyB0aGUgdGltZSB0byBhdm9pZCBsaXZlbG9ja3MsIHJlbG9hZCB0aGUgdmFsdWUsIHRoZW4gbG9vcCBhZ2Fpbi4KKyAgICAgIGlmIChfX3RpbWVzcGVjX2Zyb21fYWJzb2x1dGUoJnRzLCBhYnNfdGltZW91dCwgY2xvY2spIDwgMCkgeworICAgICAgICByZXR1cm4gRVRJTUVET1VUOworICAgICAgfQorCisgICAgICBtdmFsdWUgPSBtdXRleC0+dmFsdWU7CisgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAgICAvKiBEbyB3ZSBhbHJlYWR5IG93biB0aGlzIHJlY3Vyc2l2ZSBvciBlcnJvci1jaGVjayBtdXRleCA/ICovCi0gICAgdGlkID0gX19nZXRfdGhyZWFkKCktPnRpZDsKLSAgICBpZiAoIHRpZCA9PSBNVVRFWF9PV05FUl9GUk9NX0JJVFMobXZhbHVlKSApCi0gICAgICAgIHJldHVybiBfcmVjdXJzaXZlX2luY3JlbWVudChtdXRleCwgbXZhbHVlLCBtdHlwZSk7Ci0KLSAgICAvKiB0aGUgZm9sbG93aW5nIGltcGxlbWVudHMgdGhlIHNhbWUgbG9vcCB0aGFuIHB0aHJlYWRfbXV0ZXhfbG9ja19pbXBsCi0gICAgICogYnV0IGFkZHMgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IHRoZSBvcGVyYXRpb24gbmV2ZXIgZXhjZWVkcyB0aGUKLSAgICAgKiBhYnNvbHV0ZSBleHBpcmF0aW9uIHRpbWUuCi0gICAgICovCi0gICAgbXR5cGUgfD0gc2hhcmVkOwotCi0gICAgLyogZmlyc3QgdHJ5IGEgcXVpY2sgbG9jayAqLwotICAgIGlmIChtdmFsdWUgPT0gbXR5cGUpIHsKLSAgICAgICAgbXZhbHVlID0gTVVURVhfT1dORVJfVE9fQklUUyh0aWQpIHwgbXR5cGUgfCBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9VTkNPTlRFTkRFRDsKLSAgICAgICAgaWYgKF9fcHJlZGljdF90cnVlKF9fYmlvbmljX2NtcHhjaGcobXR5cGUsIG12YWx1ZSwgJm11dGV4LT52YWx1ZSkgPT0gMCkpIHsKLSAgICAgICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisgICAgLy8gVGhlIHZhbHVlIGlzIGxvY2tlZC4gSWYgJ3VuY29udGVuZGVkJywgdHJ5IHRvIHN3aXRjaCBpdHMgc3RhdGUKKyAgICAvLyB0byAnY29udGVudGVkJyB0byBlbnN1cmUgd2UgZ2V0IHdva2VuIHVwIGxhdGVyLgorICAgIGlmIChNVVRFWF9TVEFURV9CSVRTX0lTX0xPQ0tFRF9VTkNPTlRFTkRFRChtdmFsdWUpKSB7CisgICAgICBpbnQgbmV3dmFsID0gTVVURVhfU1RBVEVfQklUU19GTElQX0NPTlRFTlRJT04obXZhbHVlKTsKKyAgICAgIGlmIChfX2Jpb25pY19jbXB4Y2hnKG12YWx1ZSwgbmV3dmFsLCAmbXV0ZXgtPnZhbHVlKSAhPSAwKSB7CisgICAgICAgIC8vIFRoaXMgZmFpbGVkIGJlY2F1c2UgdGhlIHZhbHVlIGNoYW5nZWQsIHJlbG9hZCBpdC4KICAgICAgICAgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVGhpcyBzdWNjZWVkZWQsIHVwZGF0ZSBtdmFsdWUuCisgICAgICAgIG12YWx1ZSA9IG5ld3ZhbDsKKyAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHRpbWVzcGVjIHRzOwotCi0gICAgICAgIC8qIGlmIHRoZSB2YWx1ZSBpcyAndW5sb2NrZWQnLCB0cnkgdG8gYWNxdWlyZSBpdCBkaXJlY3RseSAqLwotICAgICAgICAvKiBOT1RFOiBwdXQgc3RhdGUgdG8gMiBzaW5jZSB3ZSBrbm93IHRoZXJlIGlzIGNvbnRlbnRpb24gKi8KLSAgICAgICAgaWYgKG12YWx1ZSA9PSBtdHlwZSkgLyogdW5sb2NrZWQgKi8gewotICAgICAgICAgICAgbXZhbHVlID0gTVVURVhfT1dORVJfVE9fQklUUyh0aWQpIHwgbXR5cGUgfCBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9DT05URU5ERUQ7Ci0gICAgICAgICAgICBpZiAoX19iaW9uaWNfY21weGNoZyhtdHlwZSwgbXZhbHVlLCAmbXV0ZXgtPnZhbHVlKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogdGhlIHZhbHVlIGNoYW5nZWQgYmVmb3JlIHdlIGNvdWxkIGxvY2sgaXQuIFdlIG5lZWQgdG8gY2hlY2sKLSAgICAgICAgICAgICAqIHRoZSB0aW1lIHRvIGF2b2lkIGxpdmVsb2NrcywgcmVsb2FkIHRoZSB2YWx1ZSwgdGhlbiBsb29wIGFnYWluLiAqLwotICAgICAgICAgICAgaWYgKF9fdGltZXNwZWNfdG9fYWJzb2x1dGUoJnRzLCAmYWJzdGltZSwgY2xvY2spIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gRUJVU1k7Ci0KLSAgICAgICAgICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogVGhlIHZhbHVlIGlzIGxvY2tlZC4gSWYgJ3VuY29udGVuZGVkJywgdHJ5IHRvIHN3aXRjaCBpdHMgc3RhdGUKLSAgICAgICAgICogdG8gJ2NvbnRlbnRlZCcgdG8gZW5zdXJlIHdlIGdldCB3b2tlbiB1cCBsYXRlci4gKi8KLSAgICAgICAgaWYgKE1VVEVYX1NUQVRFX0JJVFNfSVNfTE9DS0VEX1VOQ09OVEVOREVEKG12YWx1ZSkpIHsKLSAgICAgICAgICAgIGludCBuZXd2YWwgPSBNVVRFWF9TVEFURV9CSVRTX0ZMSVBfQ09OVEVOVElPTihtdmFsdWUpOwotICAgICAgICAgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcobXZhbHVlLCBuZXd2YWwsICZtdXRleC0+dmFsdWUpICE9IDApIHsKLSAgICAgICAgICAgICAgICAvKiB0aGlzIGZhaWxlZCBiZWNhdXNlIHRoZSB2YWx1ZSBjaGFuZ2VkLCByZWxvYWQgaXQgKi8KLSAgICAgICAgICAgICAgICBtdmFsdWUgPSBtdXRleC0+dmFsdWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qIHRoaXMgc3VjY2VlZGVkLCB1cGRhdGUgbXZhbHVlICovCi0gICAgICAgICAgICAgICAgbXZhbHVlID0gbmV3dmFsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyogY2hlY2sgdGltZSBhbmQgdXBkYXRlICd0cycgKi8KLSAgICAgICAgaWYgKF9fdGltZXNwZWNfdG9fYWJzb2x1dGUoJnRzLCAmYWJzdGltZSwgY2xvY2spIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBFQlVTWTsKLQotICAgICAgICAvKiBPbmx5IHdhaXQgdG8gYmUgd29rZW4gdXAgaWYgdGhlIHN0YXRlIGlzICcyJywgb3RoZXJ3aXNlIHdlJ2xsCi0gICAgICAgICAqIHNpbXBseSBsb29wIHJpZ2h0IG5vdy4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHNlY29uZCBjbXB4Y2hnCi0gICAgICAgICAqIGluIG91ciBsb29wIGZhaWxlZCBiZWNhdXNlIHRoZSBtdXRleCB3YXMgdW5sb2NrZWQgYnkgYW5vdGhlcgotICAgICAgICAgKiB0aHJlYWQuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoTVVURVhfU1RBVEVfQklUU19JU19MT0NLRURfQ09OVEVOREVEKG12YWx1ZSkpIHsKLSAgICAgICAgICAgIGlmIChfX2Z1dGV4X3dhaXRfZXgoJm11dGV4LT52YWx1ZSwgc2hhcmVkLCBtdmFsdWUsICZ0cykgPT0gLUVUSU1FRE9VVCkgewotICAgICAgICAgICAgICAgIHJldHVybiBFQlVTWTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKLSAgICAgICAgfQorICAgIC8vIENoZWNrIHRpbWUgYW5kIHVwZGF0ZSAndHMnLgorICAgIGlmIChfX3RpbWVzcGVjX2Zyb21fYWJzb2x1dGUoJnRzLCBhYnNfdGltZW91dCwgY2xvY2spIDwgMCkgeworICAgICAgcmV0dXJuIEVUSU1FRE9VVDsKICAgICB9Ci0gICAgLyogTk9UUkVBQ0hFRCAqLworCisgICAgLy8gT25seSB3YWl0IHRvIGJlIHdva2VuIHVwIGlmIHRoZSBzdGF0ZSBpcyAnMicsIG90aGVyd2lzZSB3ZSdsbAorICAgIC8vIHNpbXBseSBsb29wIHJpZ2h0IG5vdy4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHNlY29uZCBjbXB4Y2hnCisgICAgLy8gaW4gb3VyIGxvb3AgZmFpbGVkIGJlY2F1c2UgdGhlIG11dGV4IHdhcyB1bmxvY2tlZCBieSBhbm90aGVyIHRocmVhZC4KKyAgICBpZiAoTVVURVhfU1RBVEVfQklUU19JU19MT0NLRURfQ09OVEVOREVEKG12YWx1ZSkpIHsKKyAgICAgIGlmIChfX2Z1dGV4X3dhaXRfZXgoJm11dGV4LT52YWx1ZSwgc2hhcmVkLCBtdmFsdWUsICZ0cykgPT0gLUVUSU1FRE9VVCkgeworICAgICAgICByZXR1cm4gRVRJTUVET1VUOworICAgICAgfQorICAgICAgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOworICAgIH0KKyAgfQorICAvKiBOT1RSRUFDSEVEICovCiB9CiAKLWludCBwdGhyZWFkX211dGV4X2xvY2tfdGltZW91dF9ucChwdGhyZWFkX211dGV4X3QgKm11dGV4LCB1bnNpZ25lZCBtc2VjcykKLXsKLSAgICBpbnQgZXJyID0gcHRocmVhZF9tdXRleF9sb2NrX3RpbWVvdXRfbnBfaW1wbChtdXRleCwgbXNlY3MpOwotICAgIGlmIChQVEhSRUFEX0RFQlVHX0VOQUJMRUQpIHsKLSAgICAgICAgaWYgKCFlcnIpIHsKLSAgICAgICAgICAgIHB0aHJlYWRfZGVidWdfbXV0ZXhfbG9ja19jaGVjayhtdXRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVycjsKKyNpZiAhZGVmaW5lZChfX0xQNjRfXykKK2V4dGVybiAiQyIgaW50IHB0aHJlYWRfbXV0ZXhfbG9ja190aW1lb3V0X25wKHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIHVuc2lnbmVkIG1zKSB7CisgIHRpbWVzcGVjIGFic190aW1lb3V0OworICBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFic190aW1lb3V0KTsKKyAgYWJzX3RpbWVvdXQudHZfc2VjICArPSBtcyAvIDEwMDA7CisgIGFic190aW1lb3V0LnR2X25zZWMgKz0gKG1zICUgMTAwMCkgKiAxMDAwMDAwOworICBpZiAoYWJzX3RpbWVvdXQudHZfbnNlYyA+PSAxMDAwMDAwMDAwKSB7CisgICAgYWJzX3RpbWVvdXQudHZfc2VjKys7CisgICAgYWJzX3RpbWVvdXQudHZfbnNlYyAtPSAxMDAwMDAwMDAwOworICB9CisKKyAgaW50IGVycm9yID0gX19wdGhyZWFkX211dGV4X3RpbWVkbG9jayhtdXRleCwgJmFic190aW1lb3V0LCBDTE9DS19NT05PVE9OSUMpOworICBpZiAoZXJyb3IgPT0gRVRJTUVET1VUKSB7CisgICAgZXJyb3IgPSBFQlVTWTsKKyAgfQorICByZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYKKworaW50IHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKHB0aHJlYWRfbXV0ZXhfdCogbXV0ZXgsIGNvbnN0IHRpbWVzcGVjKiBhYnNfdGltZW91dCkgeworICByZXR1cm4gX19wdGhyZWFkX211dGV4X3RpbWVkbG9jayhtdXRleCwgYWJzX3RpbWVvdXQsIENMT0NLX1JFQUxUSU1FKTsKIH0KIAotaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveShwdGhyZWFkX211dGV4X3QgKm11dGV4KQotewotICAgIGludCByZXQ7Ci0KLSAgICAvKiB1c2UgdHJ5bG9jayB0byBlbnN1cmUgdGhhdCB0aGUgbXV0ZXggdmFsdWUgaXMKLSAgICAgKiB2YWxpZCBhbmQgaXMgbm90IGFscmVhZHkgbG9ja2VkLiAqLwotICAgIHJldCA9IHB0aHJlYWRfbXV0ZXhfdHJ5bG9ja19pbXBsKG11dGV4KTsKLSAgICBpZiAocmV0ICE9IDApCi0gICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICBtdXRleC0+dmFsdWUgPSAweGRlYWQxMGNjOwotICAgIHJldHVybiAwOworaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveShwdGhyZWFkX211dGV4X3QqIG11dGV4KSB7CisgIC8vIFVzZSB0cnlsb2NrIHRvIGVuc3VyZSB0aGF0IHRoZSBtdXRleCBpcyB2YWxpZCBhbmQgbm90IGFscmVhZHkgbG9ja2VkLgorICBpbnQgZXJyb3IgPSBwdGhyZWFkX211dGV4X3RyeWxvY2sobXV0ZXgpOworICBpZiAoZXJyb3IgIT0gMCkgeworICAgIHJldHVybiBlcnJvcjsKKyAgfQorICBtdXRleC0+dmFsdWUgPSAweGRlYWQxMGNjOworICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfcndsb2NrLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfcndsb2NrLmNwcAppbmRleCAwMTgyZWYzLi4wNjMxMzdiIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX3J3bG9jay5jcHAKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9yd2xvY2suY3BwCkBAIC0yNiw5ICsyNiwxMSBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKICNpbmNsdWRlIDxlcnJuby5oPgogCisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2Z1dGV4LmgiCisKIC8qIFRlY2huaWNhbCBub3RlOgogICoKICAqIFBvc3NpYmxlIHN0YXRlcyBvZiBhIHJlYWQvd3JpdGUgbG9jazoKQEAgLTQwLDMwMCArNDIsMjM5IEBACiAgKiBBZGRpdGlvbmFsbHk6CiAgKiAgLSB0cnlpbmcgdG8gZ2V0IHRoZSB3cml0ZS1sb2NrIHdoaWxlIHRoZXJlIGFyZSBhbnkgcmVhZGVycyBibG9ja3MKICAqICAtIHRyeWluZyB0byBnZXQgdGhlIHJlYWQtbG9jayB3aGlsZSB0aGVyZSBpcyBhIHdyaXRlciBibG9ja3MKLSAqICAtIGEgc2luZ2xlIHRocmVhZCBjYW4gYWNxdWlyZSB0aGUgbG9jayBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgc2FtZSBtb2RlCisgKiAgLSBhIHNpbmdsZSB0aHJlYWQgY2FuIGFjcXVpcmUgdGhlIGxvY2sgbXVsdGlwbGUgdGltZXMgaW4gcmVhZCBtb2RlCiAgKgotICogIC0gUG9zaXggc3RhdGVzIHRoYXQgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGl0IGEgdGhyZWFkIHRyaWVzIHRvIGFjcXVpcmUKLSAqICAgIHRoZSBsb2NrIGluIHR3byBkaXN0aW5jdCBtb2RlcyAoZS5nLiB3cml0ZSBhZnRlciByZWFkLCBvciByZWFkIGFmdGVyIHdyaXRlKS4KKyAqICAtIFBvc2l4IHN0YXRlcyB0aGF0IGJlaGF2aW9yIGlzIHVuZGVmaW5lZCAobWF5IGRlYWRsb2NrKSBpZiBhIHRocmVhZCB0cmllcworICogICAgdG8gYWNxdWlyZSB0aGUgbG9jaworICogICAgICAtIGluIHdyaXRlIG1vZGUgd2hpbGUgYWxyZWFkeSBob2xkaW5nIHRoZSBsb2NrICh3aGV0aGVyIGluIHJlYWQgb3Igd3JpdGUgbW9kZSkKKyAqICAgICAgLSBpbiByZWFkIG1vZGUgd2hpbGUgYWxyZWFkeSBob2xkaW5nIHRoZSBsb2NrIGluIHdyaXRlIG1vZGUuCisgKiAgLSBUaGlzIGltcGxlbWVudGF0aW9uIHdpbGwgcmV0dXJuIEVERUFETEsgaW4gIndyaXRlIGFmdGVyIHdyaXRlIiBhbmQgInJlYWQgYWZ0ZXIKKyAqICAgIHdyaXRlIiBjYXNlcyBhbmQgd2lsbCBkZWFkbG9jayBpbiB3cml0ZSBhZnRlciByZWFkIGNhc2UuCiAgKgotICogIC0gVGhpcyBpbXBsZW1lbnRhdGlvbiB0cmllcyB0byBhdm9pZCB3cml0ZXIgc3RhcnZhdGlvbiBieSBtYWtpbmcgdGhlIHJlYWRlcnMKLSAqICAgIGJsb2NrIGFzIHNvb24gYXMgdGhlcmUgaXMgYSB3YWl0aW5nIHdyaXRlciBvbiB0aGUgbG9jay4gSG93ZXZlciwgaXQgY2Fubm90Ci0gKiAgICBjb21wbGV0ZWx5IGVsaW1pbmF0ZSBpdDogZWFjaCB0aW1lIHRoZSBsb2NrIGlzIHVubG9ja2VkLCBhbGwgd2FpdGluZyB0aHJlYWRzCi0gKiAgICBhcmUgd29rZW4gYW5kIGJhdHRsZSBmb3IgaXQsIHdoaWNoIG9uZSBnZXRzIGl0IGRlcGVuZHMgb24gdGhlIGtlcm5lbCBzY2hlZHVsZXIKLSAqICAgIGFuZCBpcyBzZW1pLXJhbmRvbS4KKyAqIFRPRE86IFZFUlkgQ0FSRUZVTExZIGNvbnZlcnQgdGhpcyB0byB1c2UgQysrMTEgYXRvbWljcyB3aGVuIHBvc3NpYmxlLiBBbGwgdm9sYXRpbGUKKyAqIG1lbWJlcnMgb2YgcHRocmVhZF9yd2xvY2tfdCBzaG91bGQgYmUgY29udmVydGVkIHRvIGF0b21pY3M8PiBhbmQgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcAorICogc2hvdWxkIGJlIGNoYW5nZWQgdG8gY29tcGFyZV9leGNoYW5nZV9zdHJvbmcgYWNjb21wYW5pZWQgYnkgdGhlIHByb3BlciBvcmRlcmluZworICogY29uc3RyYWludHMgKGNvbW1lbnRzIGhhdmUgYmVlbiBhZGRlZCB3aXRoIHRoZSBpbnRlbmRpbmcgb3JkZXJpbmcgYWNyb3NzIHRoZSBjb2RlKS4KKyAqCisgKiBUT0RPOiBBcyBpdCBzdGFuZHMgbm93LCBwZW5kaW5nX3JlYWRlcnMgYW5kIHBlbmRpbmdfd3JpdGVycyBjb3VsZCBiZSBtZXJnZWQgaW50byBhCisgKiBhIHNpbmdsZSB3YWl0ZXJzIHZhcmlhYmxlLiAgS2VlcGluZyB0aGVtIHNlcGFyYXRlIGFkZHMgYSBiaXQgb2YgY2xhcml0eSBhbmQga2VlcHMKKyAqIHRoZSBkb29yIG9wZW4gZm9yIGEgd3JpdGVyLWJpYXNlZCBpbXBsZW1lbnRhdGlvbi4KICAqCiAgKi8KIAotI2RlZmluZSAgUldMT0NLQVRUUl9ERUZBVUxUICAgICAwCi0jZGVmaW5lICBSV0xPQ0tBVFRSX1NIQVJFRF9NQVNLIDB4MDAxMAorI2RlZmluZSBSV0xPQ0tBVFRSX0RFRkFVTFQgICAgIDAKKyNkZWZpbmUgUldMT0NLQVRUUl9TSEFSRURfTUFTSyAweDAwMTAKIAotZXh0ZXJuIHB0aHJlYWRfaW50ZXJuYWxfdCogX19nZXRfdGhyZWFkKHZvaWQpOwotCi1pbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQocHRocmVhZF9yd2xvY2thdHRyX3QgKmF0dHIpCi17Ci0gICAgaWYgKCFhdHRyKQotICAgICAgICByZXR1cm4gRUlOVkFMOwotCi0gICAgKmF0dHIgPSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURTsKLSAgICByZXR1cm4gMDsKK3N0YXRpYyBpbmxpbmUgYm9vbCByd2xvY2tfaXNfc2hhcmVkKGNvbnN0IHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaykgeworICByZXR1cm4gcndsb2NrLT5hdHRyID09IFBUSFJFQURfUFJPQ0VTU19TSEFSRUQ7CiB9CiAKLWludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveShwdGhyZWFkX3J3bG9ja2F0dHJfdCAqYXR0cikKLXsKLSAgICBpZiAoIWF0dHIpCi0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0KLSAgICAqYXR0ciA9IC0xOwotICAgIHJldHVybiAwOworc3RhdGljIGJvb2wgdGltZXNwZWNfZnJvbV9hYnNvbHV0ZSh0aW1lc3BlYyogcmVsX3RpbWVvdXQsIGNvbnN0IHRpbWVzcGVjKiBhYnNfdGltZW91dCkgeworICBpZiAoYWJzX3RpbWVvdXQgIT0gTlVMTCkgeworICAgIGlmIChfX3RpbWVzcGVjX2Zyb21fYWJzb2x1dGUocmVsX3RpbWVvdXQsIGFic190aW1lb3V0LCBDTE9DS19SRUFMVElNRSkgPCAwKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisgIHJldHVybiB0cnVlOwogfQogCi1pbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQocHRocmVhZF9yd2xvY2thdHRyX3QgKmF0dHIsIGludCAgcHNoYXJlZCkKLXsKLSAgICBpZiAoIWF0dHIpCi0gICAgICAgIHJldHVybiBFSU5WQUw7CitpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQocHRocmVhZF9yd2xvY2thdHRyX3QqIGF0dHIpIHsKKyAgKmF0dHIgPSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURTsKKyAgcmV0dXJuIDA7Cit9CiAKLSAgICBzd2l0Y2ggKHBzaGFyZWQpIHsKK2ludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveShwdGhyZWFkX3J3bG9ja2F0dHJfdCogYXR0cikgeworICAqYXR0ciA9IC0xOworICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkKHB0aHJlYWRfcndsb2NrYXR0cl90KiBhdHRyLCBpbnQgcHNoYXJlZCkgeworICBzd2l0Y2ggKHBzaGFyZWQpIHsKICAgICBjYXNlIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFOgogICAgIGNhc2UgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRDoKLSAgICAgICAgKmF0dHIgPSBwc2hhcmVkOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICphdHRyID0gcHNoYXJlZDsKKyAgICAgIHJldHVybiAwOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0gICAgfQorICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgfQogfQogCiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QqIGF0dHIsIGludCogcHNoYXJlZCkgewotICAgIGlmICghYXR0ciB8fCAhcHNoYXJlZCkKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLQotICAgICpwc2hhcmVkID0gKmF0dHI7Ci0gICAgcmV0dXJuIDA7CisgICpwc2hhcmVkID0gKmF0dHI7CisgIHJldHVybiAwOwogfQogCi1pbnQgcHRocmVhZF9yd2xvY2tfaW5pdChwdGhyZWFkX3J3bG9ja190ICpyd2xvY2ssIGNvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICphdHRyKQotewotICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QqICBsb2NrX2F0dHIgPSBOVUxMOwotICAgIHB0aHJlYWRfY29uZGF0dHJfdCogICBjb25kX2F0dHIgPSBOVUxMOwotICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgICBsb2NrX2F0dHIwOwotICAgIHB0aHJlYWRfY29uZGF0dHJfdCAgICBjb25kX2F0dHIwOwotICAgIGludCAgICAgICAgICAgICAgICAgICByZXQ7Ci0KLSAgICBpZiAocndsb2NrID09IE5VTEwpCitpbnQgcHRocmVhZF9yd2xvY2tfaW5pdChwdGhyZWFkX3J3bG9ja190KiByd2xvY2ssIGNvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90KiBhdHRyKSB7CisgIGlmIChhdHRyICE9IE5VTEwpIHsKKyAgICBzd2l0Y2ggKCphdHRyKSB7CisgICAgICBjYXNlIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQ6CisgICAgICBjYXNlIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFOgorICAgICAgICByd2xvY2stPmF0dHI9ICphdHRyOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBFSU5WQUw7Ci0KLSAgICBpZiAoYXR0ciAmJiAqYXR0ciA9PSBQVEhSRUFEX1BST0NFU1NfU0hBUkVEKSB7Ci0gICAgICAgIGxvY2tfYXR0ciA9ICZsb2NrX2F0dHIwOwotICAgICAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KGxvY2tfYXR0cik7Ci0gICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQobG9ja19hdHRyLCBQVEhSRUFEX1BST0NFU1NfU0hBUkVEKTsKLQotICAgICAgICBjb25kX2F0dHIgPSAmY29uZF9hdHRyMDsKLSAgICAgICAgcHRocmVhZF9jb25kYXR0cl9pbml0KGNvbmRfYXR0cik7Ci0gICAgICAgIHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZChjb25kX2F0dHIsIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQpOwogICAgIH0KKyAgfQogCi0gICAgcmV0ID0gcHRocmVhZF9tdXRleF9pbml0KCZyd2xvY2stPmxvY2ssIGxvY2tfYXR0cik7Ci0gICAgaWYgKHJldCAhPSAwKQotICAgICAgICByZXR1cm4gcmV0OworICByd2xvY2stPnN0YXRlID0gMDsKKyAgcndsb2NrLT5wZW5kaW5nX3JlYWRlcnMgPSAwOworICByd2xvY2stPnBlbmRpbmdfd3JpdGVycyA9IDA7CisgIHJ3bG9jay0+d3JpdGVyX3RocmVhZF9pZCA9IDA7CiAKLSAgICByZXQgPSBwdGhyZWFkX2NvbmRfaW5pdCgmcndsb2NrLT5jb25kLCBjb25kX2F0dHIpOwotICAgIGlmIChyZXQgIT0gMCkgewotICAgICAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJnJ3bG9jay0+bG9jayk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgcndsb2NrLT5udW1Mb2NrcyA9IDA7Ci0gICAgcndsb2NrLT5wZW5kaW5nUmVhZGVycyA9IDA7Ci0gICAgcndsb2NrLT5wZW5kaW5nV3JpdGVycyA9IDA7Ci0gICAgcndsb2NrLT53cml0ZXJUaHJlYWRJZCA9IDA7Ci0KLSAgICByZXR1cm4gMDsKKyAgcmV0dXJuIDA7CiB9CiAKLWludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95KHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaykKLXsKLSAgICBpZiAocndsb2NrID09IE5VTEwpCi0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0KLSAgICBpZiAocndsb2NrLT5udW1Mb2NrcyA+IDApCi0gICAgICAgIHJldHVybiBFQlVTWTsKLQotICAgIHB0aHJlYWRfY29uZF9kZXN0cm95KCZyd2xvY2stPmNvbmQpOwotICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmcndsb2NrLT5sb2NrKTsKLSAgICByZXR1cm4gMDsKLX0KLQotLyogUmV0dXJucyBUUlVFIGlmZiB3ZSBjYW4gYWNxdWlyZSBhIHJlYWQgbG9jay4gKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCByZWFkX3ByZWNvbmRpdGlvbihwdGhyZWFkX3J3bG9ja190KiByd2xvY2ssIGludCB0aWQpCi17Ci0gICAgLyogV2UgY2FuJ3QgaGF2ZSB0aGUgbG9jayBpZiBhbnkgd3JpdGVyIGlzIHdhaXRpbmcgZm9yIGl0ICh3cml0ZXIgYmlhcykuCi0gICAgICogVGhpcyB0cmllcyB0byBhdm9pZCBzdGFydmF0aW9uIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHJlYWRlcnMgcmFjaW5nLgotICAgICAqLwotICAgIGlmIChyd2xvY2stPnBlbmRpbmdXcml0ZXJzID4gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvKiBXZSBjYW4gaGF2ZSB0aGUgbG9jayBpZiB0aGVyZSBpcyBubyB3cml0ZXIsIG9yIGlmIHdlIHdyaXRlLW93biBpdCAqLwotICAgIC8qIFRoZSBzZWNvbmQgdGVzdCBhdm9pZHMgYSBzZWxmLWRlYWQgbG9jayBpbiBjYXNlIG9mIGJ1Z2d5IGNvZGUuICovCi0gICAgaWYgKHJ3bG9jay0+d3JpdGVyVGhyZWFkSWQgPT0gMCB8fCByd2xvY2stPndyaXRlclRocmVhZElkID09IHRpZCkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAvKiBPdGhlcndpc2UsIHdlIGNhbid0IGhhdmUgaXQgKi8KLSAgICByZXR1cm4gMDsKLX0KLQotLyogcmV0dXJucyBUUlVFIGlmZiB3ZSBjYW4gYWNxdWlyZSBhIHdyaXRlIGxvY2suICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgd3JpdGVfcHJlY29uZGl0aW9uKHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaywgaW50IHRpZCkKLXsKLSAgICAvKiBXZSBjYW4gZ2V0IHRoZSBsb2NrIGlmIG5vYm9keSBoYXMgaXQgKi8KLSAgICBpZiAocndsb2NrLT5udW1Mb2NrcyA9PSAwKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIC8qIE9yIGlmIHdlIGFscmVhZHkgb3duIGl0ICovCi0gICAgaWYgKHJ3bG9jay0+d3JpdGVyVGhyZWFkSWQgPT0gdGlkKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIC8qIE90aGVyd2lzZSwgbm90ICovCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB3YWtlbiBhbnkgd2FpdGluZyB0aHJlYWQgY29udGVuZGluZwotICogZm9yIHRoZSBsb2NrLiBPbmUgb2YgdGhlbSBzaG91bGQgYmUgYWJsZSB0byBncmFiIGl0IGFmdGVyCi0gKiB0aGF0LgotICovCi1zdGF0aWMgdm9pZCBfcHRocmVhZF9yd2xvY2tfcHVsc2UocHRocmVhZF9yd2xvY2tfdCAqcndsb2NrKQotewotICAgIGlmIChyd2xvY2stPnBlbmRpbmdSZWFkZXJzID4gMCB8fCByd2xvY2stPnBlbmRpbmdXcml0ZXJzID4gMCkKLSAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmcndsb2NrLT5jb25kKTsKK2ludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95KHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaykgeworICBpZiAocndsb2NrLT5zdGF0ZSAhPSAwKSB7CisgICAgcmV0dXJuIEVCVVNZOworICB9CisgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2socHRocmVhZF9yd2xvY2tfdCogcndsb2NrLCBjb25zdCB0aW1lc3BlYyogYWJzX3RpbWVvdXQpIHsKLSAgaW50IHJldCA9IDA7Ci0KLSAgaWYgKHJ3bG9jayA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIEVJTlZBTDsKKyAgaWYgKF9fcHJlZGljdF9mYWxzZShfX2dldF90aHJlYWQoKS0+dGlkID09IHJ3bG9jay0+d3JpdGVyX3RocmVhZF9pZCkpIHsKKyAgICByZXR1cm4gRURFQURMSzsKICAgfQogCi0gIHB0aHJlYWRfbXV0ZXhfbG9jaygmcndsb2NrLT5sb2NrKTsKLSAgaW50IHRpZCA9IF9fZ2V0X3RocmVhZCgpLT50aWQ7Ci0gIGlmIChfX3ByZWRpY3RfZmFsc2UoIXJlYWRfcHJlY29uZGl0aW9uKHJ3bG9jaywgdGlkKSkpIHsKLSAgICByd2xvY2stPnBlbmRpbmdSZWFkZXJzICs9IDE7Ci0gICAgZG8gewotICAgICAgcmV0ID0gcHRocmVhZF9jb25kX3RpbWVkd2FpdCgmcndsb2NrLT5jb25kLCAmcndsb2NrLT5sb2NrLCBhYnNfdGltZW91dCk7Ci0gICAgfSB3aGlsZSAocmV0ID09IDAgJiYgIXJlYWRfcHJlY29uZGl0aW9uKHJ3bG9jaywgdGlkKSk7Ci0gICAgcndsb2NrLT5wZW5kaW5nUmVhZGVycyAtPSAxOwotICAgIGlmIChyZXQgIT0gMCkgewotICAgICAgZ290byBFWElUOworICB0aW1lc3BlYyB0czsKKyAgdGltZXNwZWMqIHJlbF90aW1lb3V0ID0gKGFic190aW1lb3V0ID09IE5VTEwpID8gTlVMTCA6ICZ0czsKKyAgYm9vbCBkb25lID0gZmFsc2U7CisgIGRvIHsKKyAgICAvLyBUaGlzIGlzIGFjdHVhbGx5IGEgcmFjZSByZWFkIGFzIHRoZXJlJ3Mgbm90aGluZyB0aGF0IGd1YXJhbnRlZXMgdGhlIGF0b21pY2l0eSBvZiBpbnRlZ2VyCisgICAgLy8gcmVhZHMgLyB3cml0ZXMuIEhvd2V2ZXIsIGluIHByYWN0aWNlIHRoaXMgIm5ldmVyIiBoYXBwZW5zIHNvIHVudGlsIHdlIHN3aXRjaCB0byBDKysxMSB0aGlzCisgICAgLy8gc2hvdWxkIHdvcmsgZmluZS4gVGhlIHNhbWUgYXBwbGllcyBpbiB0aGUgb3RoZXIgcGxhY2VzIHRoaXMgaWRpb20gaXMgdXNlZC4KKyAgICBpbnQzMl90IGN1cl9zdGF0ZSA9IHJ3bG9jay0+c3RhdGU7ICAvLyBDKysxMSByZWxheGVkIGF0b21pYyByZWFkCisgICAgaWYgKF9fcHJlZGljdF90cnVlKGN1cl9zdGF0ZSA+PSAwKSkgeworICAgICAgLy8gQWRkIGFzIGFuIGV4dHJhIHJlYWRlci4KKyAgICAgIGRvbmUgPSBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwKCZyd2xvY2stPnN0YXRlLCBjdXJfc3RhdGUsIGN1cl9zdGF0ZSArIDEpOyAgLy8gQysrMTEgbWVtb3J5X29yZGVyX2FxdWlyZQorICAgIH0gZWxzZSB7CisgICAgICBpZiAoIXRpbWVzcGVjX2Zyb21fYWJzb2x1dGUocmVsX3RpbWVvdXQsIGFic190aW1lb3V0KSkgeworICAgICAgICByZXR1cm4gRVRJTUVET1VUOworICAgICAgfQorICAgICAgLy8gT3duZXIgaG9sZHMgaXQgaW4gd3JpdGUgbW9kZSwgaGFuZyB1cC4KKyAgICAgIC8vIFRvIGF2b2lkIGxvc2luZyB3YWtlIHVwcyB0aGUgcGVuZGluZ19yZWFkZXJzIHVwZGF0ZSBhbmQgdGhlIHN0YXRlIHJlYWQgc2hvdWxkIGJlCisgICAgICAvLyBzZXF1ZW50aWFsbHkgY29uc2lzdGVudC4gKGN1cnJlbnRseSBlbmZvcmNlZCBieSBfX3N5bmNfZmV0Y2hfYW5kX2FkZCB3aGljaCBjcmVhdGVzIGEgZnVsbCBiYXJyaWVyKQorICAgICAgX19zeW5jX2ZldGNoX2FuZF9hZGQoJnJ3bG9jay0+cGVuZGluZ19yZWFkZXJzLCAxKTsgIC8vIEMrKzExIG1lbW9yeV9vcmRlcl9yZWxheGVkIChpZiB0aGUgZnV0ZXhfd2FpdCBlbnN1cmVzIHRoZSBvcmRlcmluZykKKyAgICAgIGludCByZXQgPSBfX2Z1dGV4X3dhaXRfZXgoJnJ3bG9jay0+c3RhdGUsIHJ3bG9ja19pc19zaGFyZWQocndsb2NrKSwgY3VyX3N0YXRlLCByZWxfdGltZW91dCk7CisgICAgICBfX3N5bmNfZmV0Y2hfYW5kX3N1Yigmcndsb2NrLT5wZW5kaW5nX3JlYWRlcnMsIDEpOyAgLy8gQysrMTEgbWVtb3J5X29yZGVyX3JlbGF4ZWQKKyAgICAgIGlmIChyZXQgPT0gLUVUSU1FRE9VVCkgeworICAgICAgICByZXR1cm4gRVRJTUVET1VUOworICAgICAgfQogICAgIH0KLSAgfQotICArK3J3bG9jay0+bnVtTG9ja3M7Ci1FWElUOgotICBwdGhyZWFkX211dGV4X3VubG9jaygmcndsb2NrLT5sb2NrKTsKLSAgcmV0dXJuIHJldDsKKyAgfSB3aGlsZSAoIWRvbmUpOworCisgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fcHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2socHRocmVhZF9yd2xvY2tfdCogcndsb2NrLCBjb25zdCB0aW1lc3BlYyogYWJzX3RpbWVvdXQpIHsKLSAgaW50IHJldCA9IDA7Ci0KLSAgaWYgKHJ3bG9jayA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIEVJTlZBTDsKLSAgfQotCi0gIHB0aHJlYWRfbXV0ZXhfbG9jaygmcndsb2NrLT5sb2NrKTsKICAgaW50IHRpZCA9IF9fZ2V0X3RocmVhZCgpLT50aWQ7Ci0gIGlmIChfX3ByZWRpY3RfZmFsc2UoIXdyaXRlX3ByZWNvbmRpdGlvbihyd2xvY2ssIHRpZCkpKSB7Ci0gICAgLy8gSWYgd2UgY2FuJ3QgcmVhZCB5ZXQsIHdhaXQgdW50aWwgdGhlIHJ3bG9jayBpcyB1bmxvY2tlZAotICAgIC8vIGFuZCB0cnkgYWdhaW4uIEluY3JlbWVudCBwZW5kaW5nUmVhZGVycyB0byBnZXQgdGhlCi0gICAgLy8gY29uZCBicm9hZGNhc3Qgd2hlbiB0aGF0IGhhcHBlbnMuCi0gICAgcndsb2NrLT5wZW5kaW5nV3JpdGVycyArPSAxOwotICAgIGRvIHsKLSAgICAgIHJldCA9IHB0aHJlYWRfY29uZF90aW1lZHdhaXQoJnJ3bG9jay0+Y29uZCwgJnJ3bG9jay0+bG9jaywgYWJzX3RpbWVvdXQpOwotICAgIH0gd2hpbGUgKHJldCA9PSAwICYmICF3cml0ZV9wcmVjb25kaXRpb24ocndsb2NrLCB0aWQpKTsKLSAgICByd2xvY2stPnBlbmRpbmdXcml0ZXJzIC09IDE7Ci0gICAgaWYgKHJldCAhPSAwKSB7Ci0gICAgICBnb3RvIEVYSVQ7Ci0gICAgfQorICBpZiAoX19wcmVkaWN0X2ZhbHNlKHRpZCA9PSByd2xvY2stPndyaXRlcl90aHJlYWRfaWQpKSB7CisgICAgcmV0dXJuIEVERUFETEs7CiAgIH0KLSAgKytyd2xvY2stPm51bUxvY2tzOwotICByd2xvY2stPndyaXRlclRocmVhZElkID0gdGlkOwotRVhJVDoKLSAgcHRocmVhZF9tdXRleF91bmxvY2soJnJ3bG9jay0+bG9jayk7Ci0gIHJldHVybiByZXQ7CisKKyAgdGltZXNwZWMgdHM7CisgIHRpbWVzcGVjKiByZWxfdGltZW91dCA9IChhYnNfdGltZW91dCA9PSBOVUxMKSA/IE5VTEwgOiAmdHM7CisgIGJvb2wgZG9uZSA9IGZhbHNlOworICBkbyB7CisgICAgaW50MzJfdCBjdXJfc3RhdGUgPSByd2xvY2stPnN0YXRlOworICAgIGlmIChfX3ByZWRpY3RfdHJ1ZShjdXJfc3RhdGUgPT0gMCkpIHsKKyAgICAgIC8vIENoYW5nZSBzdGF0ZSBmcm9tIDAgdG8gLTEuCisgICAgICBkb25lID0gIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAoJnJ3bG9jay0+c3RhdGUsIDAgLyogY3VyIHN0YXRlICovLCAtMSAvKiBuZXcgc3RhdGUgKi8pOyAgLy8gQysrMTEgbWVtb3J5X29yZGVyX2FxdWlyZQorICAgIH0gZWxzZSB7CisgICAgICBpZiAoIXRpbWVzcGVjX2Zyb21fYWJzb2x1dGUocmVsX3RpbWVvdXQsIGFic190aW1lb3V0KSkgeworICAgICAgICByZXR1cm4gRVRJTUVET1VUOworICAgICAgfQorICAgICAgLy8gRmFpbGVkIHRvIGFjcXVpcmUsIGhhbmcgdXAuCisgICAgICAvLyBUbyBhdm9pZCBsb3Npbmcgd2FrZSB1cHMgdGhlIHBlbmRpbmdfd3JpdGVycyB1cGRhdGUgYW5kIHRoZSBzdGF0ZSByZWFkIHNob3VsZCBiZQorICAgICAgLy8gc2VxdWVudGlhbGx5IGNvbnNpc3RlbnQuIChjdXJyZW50bHkgZW5mb3JjZWQgYnkgX19zeW5jX2ZldGNoX2FuZF9hZGQgd2hpY2ggY3JlYXRlcyBhIGZ1bGwgYmFycmllcikKKyAgICAgIF9fc3luY19mZXRjaF9hbmRfYWRkKCZyd2xvY2stPnBlbmRpbmdfd3JpdGVycywgMSk7ICAvLyBDKysxMSBtZW1vcnlfb3JkZXJfcmVsYXhlZCAoaWYgdGhlIGZ1dGV4X3dhaXQgZW5zdXJlcyB0aGUgb3JkZXJpbmcpCisgICAgICBpbnQgcmV0ID0gX19mdXRleF93YWl0X2V4KCZyd2xvY2stPnN0YXRlLCByd2xvY2tfaXNfc2hhcmVkKHJ3bG9jayksIGN1cl9zdGF0ZSwgcmVsX3RpbWVvdXQpOworICAgICAgX19zeW5jX2ZldGNoX2FuZF9zdWIoJnJ3bG9jay0+cGVuZGluZ193cml0ZXJzLCAxKTsgIC8vIEMrKzExIG1lbW9yeV9vcmRlcl9yZWxheGVkCisgICAgICBpZiAocmV0ID09IC1FVElNRURPVVQpIHsKKyAgICAgICAgcmV0dXJuIEVUSU1FRE9VVDsKKyAgICAgIH0KKyAgICB9CisgIH0gd2hpbGUgKCFkb25lKTsKKworICByd2xvY2stPndyaXRlcl90aHJlYWRfaWQgPSB0aWQ7CisgIHJldHVybiAwOwogfQogCiBpbnQgcHRocmVhZF9yd2xvY2tfcmRsb2NrKHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaykgewogICByZXR1cm4gX19wdGhyZWFkX3J3bG9ja190aW1lZHJkbG9jayhyd2xvY2ssIE5VTEwpOwogfQogCi1pbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaykKLXsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChyd2xvY2sgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcndsb2NrLT5sb2NrKTsKLSAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKCFyZWFkX3ByZWNvbmRpdGlvbihyd2xvY2ssIF9fZ2V0X3RocmVhZCgpLT50aWQpKSkKLSAgICAgICAgcmV0ID0gRUJVU1k7Ci0gICAgZWxzZQotICAgICAgICArK3J3bG9jay0+bnVtTG9ja3M7Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJnJ3bG9jay0+bG9jayk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2socHRocmVhZF9yd2xvY2tfdCogcndsb2NrLCBjb25zdCB0aW1lc3BlYyogYWJzX3RpbWVvdXQpIHsKICAgcmV0dXJuIF9fcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2socndsb2NrLCBhYnNfdGltZW91dCk7CiB9CiAKK2ludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2socHRocmVhZF9yd2xvY2tfdCogcndsb2NrKSB7CisgIGludDMyX3QgY3VyX3N0YXRlID0gcndsb2NrLT5zdGF0ZTsKKyAgaWYgKChjdXJfc3RhdGUgPj0gMCkgJiYKKyAgICAgIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAoJnJ3bG9jay0+c3RhdGUsIGN1cl9zdGF0ZSwgY3VyX3N0YXRlICsgMSkpIHsgIC8vIEMrKzExIG1lbW9yeV9vcmRlcl9hY3F1aXJlCisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIEVCVVNZOworfQorCiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrKHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaykgewogICByZXR1cm4gX19wdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayhyd2xvY2ssIE5VTEwpOwogfQogCi1pbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaykKLXsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIGlmIChyd2xvY2sgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcndsb2NrLT5sb2NrKTsKLSAgICBpbnQgdGlkID0gX19nZXRfdGhyZWFkKCktPnRpZDsKLSAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKCF3cml0ZV9wcmVjb25kaXRpb24ocndsb2NrLCB0aWQpKSkgewotICAgICAgICByZXQgPSBFQlVTWTsKLSAgICB9IGVsc2UgewotICAgICAgICArK3J3bG9jay0+bnVtTG9ja3M7Ci0gICAgICAgIHJ3bG9jay0+d3JpdGVyVGhyZWFkSWQgPSB0aWQ7Ci0gICAgfQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZyd2xvY2stPmxvY2spOwotICAgIHJldHVybiByZXQ7Ci19Ci0KIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayhwdGhyZWFkX3J3bG9ja190KiByd2xvY2ssIGNvbnN0IHRpbWVzcGVjKiBhYnNfdGltZW91dCkgewogICByZXR1cm4gX19wdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayhyd2xvY2ssIGFic190aW1lb3V0KTsKIH0KIAotaW50IHB0aHJlYWRfcndsb2NrX3VubG9jayhwdGhyZWFkX3J3bG9ja190ICpyd2xvY2spCi17Ci0gICAgaW50ICByZXQgPSAwOworaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9jayhwdGhyZWFkX3J3bG9ja190KiByd2xvY2spIHsKKyAgaW50IHRpZCA9IF9fZ2V0X3RocmVhZCgpLT50aWQ7CisgIGludDMyX3QgY3VyX3N0YXRlID0gcndsb2NrLT5zdGF0ZTsKKyAgaWYgKChjdXJfc3RhdGUgPT0gMCkgJiYKKyAgICAgIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAoJnJ3bG9jay0+c3RhdGUsIDAgLyogY3VyIHN0YXRlICovLCAtMSAvKiBuZXcgc3RhdGUgKi8pKSB7ICAvLyBDKysxMSBtZW1vcnlfb3JkZXJfYWNxdWlyZQorICAgIHJ3bG9jay0+d3JpdGVyX3RocmVhZF9pZCA9IHRpZDsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gRUJVU1k7Cit9CiAKLSAgICBpZiAocndsb2NrID09IE5VTEwpCi0gICAgICAgIHJldHVybiBFSU5WQUw7CiAKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJnJ3bG9jay0+bG9jayk7Ci0KLSAgICAvKiBUaGUgbG9jayBtdXN0IGJlIGhlbGQgKi8KLSAgICBpZiAocndsb2NrLT5udW1Mb2NrcyA9PSAwKSB7Ci0gICAgICAgIHJldCA9IEVQRVJNOwotICAgICAgICBnb3RvIEVYSVQ7CitpbnQgcHRocmVhZF9yd2xvY2tfdW5sb2NrKHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaykgeworICBpbnQgdGlkID0gX19nZXRfdGhyZWFkKCktPnRpZDsKKyAgYm9vbCBkb25lID0gZmFsc2U7CisgIGRvIHsKKyAgICBpbnQzMl90IGN1cl9zdGF0ZSA9IHJ3bG9jay0+c3RhdGU7CisgICAgaWYgKGN1cl9zdGF0ZSA9PSAwKSB7CisgICAgICByZXR1cm4gRVBFUk07CiAgICAgfQorICAgIGlmIChjdXJfc3RhdGUgPT0gLTEpIHsKKyAgICAgIGlmIChyd2xvY2stPndyaXRlcl90aHJlYWRfaWQgIT0gdGlkKSB7CisgICAgICAgIHJldHVybiBFUEVSTTsKKyAgICAgIH0KKyAgICAgIC8vIFdlJ3JlIG5vIGxvbmdlciB0aGUgb3duZXIuCisgICAgICByd2xvY2stPndyaXRlcl90aHJlYWRfaWQgPSAwOworICAgICAgLy8gQ2hhbmdlIHN0YXRlIGZyb20gLTEgdG8gMC4KKyAgICAgIC8vIFdlIHVzZSBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwIHRvIGFjaGlldmUgc2VxdWVudGlhbCBjb25zaXN0ZW5jeSBvZiB0aGUgc3RhdGUgc3RvcmUgYW5kCisgICAgICAvLyB0aGUgZm9sbG93aW5nIHBlbmRpbmdYIGxvYWRzLiBBIHNpbXBsZSBzdG9yZSB3aXRoIG1lbW9yeV9vcmRlcl9yZWxlYXNlIHNlbWFudGljcworICAgICAgLy8gaXMgbm90IGVub3VnaCB0byBndWFyYW50ZWUgdGhhdCB0aGUgcGVuZGluZ1ggbG9hZHMgYXJlIG5vdCByZW9yZGVyZWQgYmVmb3JlIHRoZQorICAgICAgLy8gc3RvcmUgKHdoaWNoIG1heSBsZWFkIHRvIGEgbG9zdCB3YWtldXApLgorICAgICAgX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcCggJnJ3bG9jay0+c3RhdGUsIC0xIC8qIGN1ciBzdGF0ZSovLCAwIC8qIG5ldyBzdGF0ZSAqLyk7ICAvLyBDKysxMSBtYXliZSBtZW1vcnlfb3JkZXJfc2VxX2NzdD8KIAotICAgIC8qIElmIGl0IGhhcyBvbmx5IHJlYWRlcnMsIHdyaXRlclRocmVhZElkIGlzIDAgKi8KLSAgICBpZiAocndsb2NrLT53cml0ZXJUaHJlYWRJZCA9PSAwKSB7Ci0gICAgICAgIGlmICgtLXJ3bG9jay0+bnVtTG9ja3MgPT0gMCkKLSAgICAgICAgICAgIF9wdGhyZWFkX3J3bG9ja19wdWxzZShyd2xvY2spOwotICAgIH0KLSAgICAvKiBPdGhlcndpc2UsIGl0IGhhcyBvbmx5IGEgc2luZ2xlIHdyaXRlciwgd2hpY2gKLSAgICAgKiBtdXN0IGJlIG91cnNlbHZlcy4KLSAgICAgKi8KLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHJ3bG9jay0+d3JpdGVyVGhyZWFkSWQgIT0gX19nZXRfdGhyZWFkKCktPnRpZCkgewotICAgICAgICAgICAgcmV0ID0gRVBFUk07Ci0gICAgICAgICAgICBnb3RvIEVYSVQ7CisgICAgICAvLyBXYWtlIGFueSB3YWl0ZXJzLgorICAgICAgaWYgKF9fcHJlZGljdF9mYWxzZShyd2xvY2stPnBlbmRpbmdfcmVhZGVycyA+IDAgfHwgcndsb2NrLT5wZW5kaW5nX3dyaXRlcnMgPiAwKSkgeworICAgICAgICBfX2Z1dGV4X3dha2VfZXgoJnJ3bG9jay0+c3RhdGUsIHJ3bG9ja19pc19zaGFyZWQocndsb2NrKSwgSU5UX01BWCk7CisgICAgICB9CisgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9IGVsc2UgeyAvLyBjdXJfc3RhdGUgPiAwCisgICAgICAvLyBSZWR1Y2Ugc3RhdGUgYnkgMS4KKyAgICAgIC8vIFNlZSB0aGUgY29tbWVudCBhYm92ZSBvbiB3aHkgd2UgbmVlZCBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwLgorICAgICAgZG9uZSA9IF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAoJnJ3bG9jay0+c3RhdGUsIGN1cl9zdGF0ZSwgY3VyX3N0YXRlIC0gMSk7ICAvLyBDKysxMSBtYXliZSBtZW1vcnlfb3JkZXJfc2VxX2NzdD8KKyAgICAgIGlmIChkb25lICYmIChjdXJfc3RhdGUgLSAxKSA9PSAwKSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBubyBtb3JlIHJlYWRlcnMsIHdha2UgYW55IHdhaXRlcnMuCisgICAgICAgIGlmIChfX3ByZWRpY3RfZmFsc2Uocndsb2NrLT5wZW5kaW5nX3JlYWRlcnMgPiAwIHx8IHJ3bG9jay0+cGVuZGluZ193cml0ZXJzID4gMCkpIHsKKyAgICAgICAgICBfX2Z1dGV4X3dha2VfZXgoJnJ3bG9jay0+c3RhdGUsIHJ3bG9ja19pc19zaGFyZWQocndsb2NrKSwgSU5UX01BWCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKC0tcndsb2NrLT5udW1Mb2NrcyA9PSAwKSB7Ci0gICAgICAgICAgICByd2xvY2stPndyaXRlclRocmVhZElkID0gMDsKLSAgICAgICAgICAgIF9wdGhyZWFkX3J3bG9ja19wdWxzZShyd2xvY2spOwotICAgICAgICB9CisgICAgICB9CiAgICAgfQotRVhJVDoKLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcndsb2NrLT5sb2NrKTsKLSAgICByZXR1cm4gcmV0OworICB9IHdoaWxlICghZG9uZSk7CisKKyAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX3NldG5hbWVfbnAuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9zZXRuYW1lX25wLmNwcAppbmRleCBlMGVjYWNlLi4xZGRmODEwIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX3NldG5hbWVfbnAuY3BwCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfc2V0bmFtZV9ucC5jcHAKQEAgLTQ2LDEwICs0Niw2IEBACiBpbnQgcHRocmVhZF9zZXRuYW1lX25wKHB0aHJlYWRfdCB0LCBjb25zdCBjaGFyKiB0aHJlYWRfbmFtZSkgewogICBFcnJub1Jlc3RvcmVyIGVycm5vX3Jlc3RvcmVyOwogCi0gIGlmICh0aHJlYWRfbmFtZSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIEVJTlZBTDsKLSAgfQotCiAgIHNpemVfdCB0aHJlYWRfbmFtZV9sZW4gPSBzdHJsZW4odGhyZWFkX25hbWUpOwogICBpZiAodGhyZWFkX25hbWVfbGVuID49IE1BWF9UQVNLX0NPTU1fTEVOKSB7CiAgICAgcmV0dXJuIEVSQU5HRTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0cmFjZS5jcHAgYi9saWJjL2Jpb25pYy9wdHJhY2UuY3BwCmluZGV4IDU3MTViMDkuLjUxNTZlYzIgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B0cmFjZS5jcHAKKysrIGIvbGliYy9iaW9uaWMvcHRyYWNlLmNwcApAQCAtMjYsMjggKzI2LDMwIEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgogCi1leHRlcm4gIkMiIGxvbmcgX19wdHJhY2UoaW50IHJlcXVlc3QsIHBpZF90IHBpZCwgdm9pZCogYWRkciwgdm9pZCogZGF0YSk7CitleHRlcm4gIkMiIGxvbmcgX19wdHJhY2UoaW50IHJlcSwgcGlkX3QgcGlkLCB2b2lkKiBhZGRyLCB2b2lkKiBkYXRhKTsKIAotbG9uZyBwdHJhY2UoaW50IHJlcXVlc3QsIHBpZF90IHBpZCwgdm9pZCogYWRkciwgdm9pZCogZGF0YSkgewotICBzd2l0Y2ggKHJlcXVlc3QpIHsKLSAgICBjYXNlIFBUUkFDRV9QRUVLVVNSOgotICAgIGNhc2UgUFRSQUNFX1BFRUtURVhUOgotICAgIGNhc2UgUFRSQUNFX1BFRUtEQVRBOgotICAgICAgewotICAgICAgbG9uZyB3b3JkOwotICAgICAgbG9uZyByZXQgPSBfX3B0cmFjZShyZXF1ZXN0LCBwaWQsIGFkZHIsICZ3b3JkKTsKLSAgICAgIGlmIChyZXQgPT0gMCkgewotICAgICAgICByZXR1cm4gd29yZDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIF9fcHRyYWNlIGFscmVhZHkgc2V0IGVycm5vIGZvciB1cy4KLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQotICAgIH0KK2xvbmcgcHRyYWNlKGludCByZXEsIC4uLikgeworICBib29sIGlzX3BlZWsgPSAocmVxID09IFBUUkFDRV9QRUVLVVNSIHx8IHJlcSA9PSBQVFJBQ0VfUEVFS1RFWFQgfHwgcmVxID09IFBUUkFDRV9QRUVLREFUQSk7CisgIGxvbmcgcGVla19yZXN1bHQ7CiAKLSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIF9fcHRyYWNlKHJlcXVlc3QsIHBpZCwgYWRkciwgZGF0YSk7CisgIHZhX2xpc3QgYXJnczsKKyAgdmFfc3RhcnQoYXJncywgcmVxKTsKKyAgcGlkX3QgcGlkID0gdmFfYXJnKGFyZ3MsIHBpZF90KTsKKyAgdm9pZCogYWRkciA9IHZhX2FyZyhhcmdzLCB2b2lkKik7CisgIHZvaWQqIGRhdGE7CisgIGlmIChpc19wZWVrKSB7CisgICAgZGF0YSA9ICZwZWVrX3Jlc3VsdDsKKyAgfSBlbHNlIHsKKyAgICBkYXRhID0gdmFfYXJnKGFyZ3MsIHZvaWQqKTsKICAgfQorICB2YV9lbmQoYXJncyk7CisKKyAgbG9uZyByZXN1bHQgPSBfX3B0cmFjZShyZXEsIHBpZCwgYWRkciwgZGF0YSk7CisgIGlmIChpc19wZWVrICYmIHJlc3VsdCA9PSAwKSB7CisgICAgcmV0dXJuIHBlZWtfcmVzdWx0OworICB9CisgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdHNuYW1lLmMgYi9saWJjL2Jpb25pYy9wdHNuYW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZDVkMzAuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvcHRzbmFtZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8dGVybWlvcy5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotCi0vKiBub3QgdGhyZWFkLXNhZmUgKi8KLWNoYXIqICBwdHNuYW1lKCBpbnQgZmQgKQotewotICAgIHVuc2lnbmVkIGludCAgcHR5X251bTsKLSAgICBzdGF0aWMgY2hhciAgIGJ1ZmZbNjRdOwotCi0gICAgaWYgKCBpb2N0bCggZmQsIFRJT0NHUFROLCAmcHR5X251bSApICE9IDAgKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHNucHJpbnRmKCBidWZmLCBzaXplb2YoYnVmZiksICIvZGV2L3B0cy8ldSIsIHB0eV9udW0gKTsKLSAgICByZXR1cm4gYnVmZjsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0c25hbWVfci5jIGIvbGliYy9iaW9uaWMvcHRzbmFtZV9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYTRjM2QuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvcHRzbmFtZV9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx0ZXJtaW9zLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotaW50ICAgIHB0c25hbWVfciggaW50ICBmZCwgY2hhciogIGJ1Ziwgc2l6ZV90ICBidWZsZW4pCi17Ci0gICAgdW5zaWduZWQgaW50ICBwdHlfbnVtOwotICAgIGNoYXIgICAgICAgICAgYnVmZls2NF07Ci0gICAgaW50ICAgICAgICAgICBsZW47Ci0KLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoIGlvY3RsKCBmZCwgVElPQ0dQVE4sICZwdHlfbnVtICkgIT0gMCApIHsKLSAgICAgICAgZXJybm8gPSBFTk9UVFk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBsZW4gPSBzbnByaW50ZiggYnVmZiwgc2l6ZW9mKGJ1ZmYpLCAiL2Rldi9wdHMvJXUiLCBwdHlfbnVtICk7Ci0gICAgaWYgKGxlbisxID4gKGludClidWZsZW4pIHsKLSAgICAgICAgZXJybm8gPSBFUkFOR0U7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgbWVtY3B5KCBidWYsIGJ1ZmYsIGxlbisxICk7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdHkuY3BwIGIvbGliYy9iaW9uaWMvcHR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTVlMDA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcHR5LmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitpbnQgZ2V0cHQodm9pZCkgeworICByZXR1cm4gcG9zaXhfb3BlbnB0KE9fUkRXUnxPX05PQ1RUWSk7Cit9CisKK2ludCBncmFudHB0KGludCkgeworICByZXR1cm4gMDsKK30KKworaW50IHBvc2l4X29wZW5wdChpbnQgZmxhZ3MpIHsKKyAgcmV0dXJuIG9wZW4oIi9kZXYvcHRteCIsIGZsYWdzKTsKK30KKworY2hhciogcHRzbmFtZShpbnQgZmQpIHsKKyAgc3RhdGljIGNoYXIgYnVmWzY0XTsKKyAgcmV0dXJuIHB0c25hbWVfcihmZCwgYnVmLCBzaXplb2YoYnVmKSkgPT0gMCA/IGJ1ZiA6IE5VTEw7Cit9CisKK2ludCBwdHNuYW1lX3IoaW50IGZkLCBjaGFyKiBidWYsIHNpemVfdCBsZW4pIHsKKyAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIGVycm5vOworICB9CisKKyAgdW5zaWduZWQgaW50IHB0eV9udW07CisgIGlmIChpb2N0bChmZCwgVElPQ0dQVE4sICZwdHlfbnVtKSAhPSAwKSB7CisgICAgZXJybm8gPSBFTk9UVFk7CisgICAgcmV0dXJuIGVycm5vOworICB9CisKKyAgaWYgKHNucHJpbnRmKGJ1ZiwgbGVuLCAiL2Rldi9wdHMvJXUiLCBwdHlfbnVtKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KGxlbikpIHsKKyAgICBlcnJubyA9IEVSQU5HRTsKKyAgICByZXR1cm4gZXJybm87CisgIH0KKworICByZXR1cm4gMDsKK30KKworY2hhciogdHR5bmFtZShpbnQgZmQpIHsKKyAgc3RhdGljIGNoYXIgYnVmWzY0XTsKKyAgcmV0dXJuIHR0eW5hbWVfcihmZCwgYnVmLCBzaXplb2YoYnVmKSkgPT0gMCA/IGJ1ZiA6IE5VTEw7Cit9CisKK2ludCB0dHluYW1lX3IoaW50IGZkLCBjaGFyKiBidWYsIHNpemVfdCBsZW4pIHsKKyAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIGVycm5vOworICB9CisKKyAgaWYgKCFpc2F0dHkoZmQpKSB7CisgICAgcmV0dXJuIGVycm5vOworICB9CisKKyAgY2hhciBwYXRoWzY0XTsKKyAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiL3Byb2Mvc2VsZi9mZC8lZCIsIGZkKTsKKworICBzc2l6ZV90IGNvdW50ID0gcmVhZGxpbmsocGF0aCwgYnVmLCBsZW4pOworICBpZiAoY291bnQgPT0gLTEpIHsKKyAgICByZXR1cm4gZXJybm87CisgIH0KKyAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oY291bnQpID09IGxlbikgeworICAgIGVycm5vID0gRVJBTkdFOworICAgIHJldHVybiBlcnJubzsKKyAgfQorICBidWZbY291bnRdID0gJ1wwJzsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCB1bmxvY2twdChpbnQgZmQpIHsKKyAgaW50IHVubG9jayA9IDA7CisgIHJldHVybiBpb2N0bChmZCwgVElPQ1NQVExDSywgJnVubG9jayk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9yYW5kLmNwcCBiL2xpYmMvYmlvbmljL3JhbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNzRmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9yYW5kLmNwcApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvLyBUaGUgQlNEIHJhbmQvc3JhbmQgaXMgdmVyeSB3ZWFrLiBnbGliYyBqdXN0IHVzZXMgcmFuZG9tL3NyYW5kb20gaW5zdGVhZC4KKy8vIFNpbmNlIHdlJ3JlIGxpa2VseSB0byBydW4gY29kZSBpbnRlbmRlZCBmb3IgZ2xpYmMsIGFuZCBQT1NJWCBkb2Vzbid0IHNlZW0KKy8vIHRvIGRpc2FsbG93IHRoaXMsIHdlIGdvIHRoYXQgcm91dGUgdG9vLgorCitpbnQgcmFuZCgpIHsKKyAgcmV0dXJuIHJhbmRvbSgpOworfQorCit2b2lkIHNyYW5kKHVuc2lnbmVkIGludCBzZWVkKSB7CisgIHJldHVybiBzcmFuZG9tKHNlZWQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcmVib290LmMgYi9saWJjL2Jpb25pYy9yZWJvb3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZlOGNkYy4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9yZWJvb3QuYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvcmVib290Lmg+Ci0KLWludCByZWJvb3QgKGludCAgbW9kZSkgCi17Ci0gICAgcmV0dXJuIF9fcmVib290KCBMSU5VWF9SRUJPT1RfTUFHSUMxLCBMSU5VWF9SRUJPT1RfTUFHSUMyLCBtb2RlLCBOVUxMICk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9yZWJvb3QuY3BwIGIvbGliYy9iaW9uaWMvcmVib290LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2Y0NDExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcmVib290LmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvcmVib290Lmg+CisKK2V4dGVybiAiQyIgaW50IF9fcmVib290KGludCwgaW50LCBpbnQsIHZvaWQqKTsKKworaW50IHJlYm9vdChpbnQgbW9kZSkgeworICByZXR1cm4gX19yZWJvb3QoTElOVVhfUkVCT09UX01BR0lDMSwgTElOVVhfUkVCT09UX01BR0lDMiwgbW9kZSwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9yZWN2LmMgYi9saWJjL2Jpb25pYy9yZWN2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3OWQ3ZmEuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvcmVjdi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLQotc3NpemVfdCByZWN2KGludCBzb2NrZXQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQotewotICAgIHJldHVybiByZWN2ZnJvbShzb2NrZXQsIGJ1ZiwgYnVmbGVuLCBmbGFncywgTlVMTCwgMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9yZWN2LmNwcCBiL2xpYmMvYmlvbmljL3JlY3YuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MWNkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9yZWN2LmNwcApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyN1bmRlZiBfRk9SVElGWV9TT1VSQ0UKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKK3NzaXplX3QgcmVjdihpbnQgc29ja2V0LCB2b2lkICpidWYsIHNpemVfdCBsZW4sIGludCBmbGFncykgeworICByZXR1cm4gcmVjdmZyb20oc29ja2V0LCBidWYsIGxlbiwgZmxhZ3MsIE5VTEwsIDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2Jyay5jcHAgYi9saWJjL2Jpb25pYy9zYnJrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM5YjUzNC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9zYnJrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLS8qIFNoYXJlZCB3aXRoIGJyay5jLiAqLwotZXh0ZXJuICJDIiB7Ci0gIHZvaWQqIF9fYmlvbmljX2JyazsgLy8gVE9ETzogc2hvdWxkIGJlIF9fTElCQ19ISURERU5fXyBidXQgYWNjaWRlbnRhbGx5IGV4cG9ydGVkIGJ5IE5ESyA6LSgKLX0KLQotdm9pZCogc2JyayhwdHJkaWZmX3QgaW5jcmVtZW50KSB7Ci0gIGlmIChfX2Jpb25pY19icmsgPT0gTlVMTCkgewotICAgIF9fYmlvbmljX2JyayA9IF9fYnJrKE5VTEwpOwotICB9Ci0KLSAgdm9pZCogb3JpZ2luYWxfYnJrID0gX19iaW9uaWNfYnJrOwotICB2b2lkKiBkZXNpcmVkX2JyayA9ICh2b2lkKikgKCh1aW50cHRyX3QpIG9yaWdpbmFsX2JyayArIGluY3JlbWVudCk7Ci0KLSAgdm9pZCogbmV3X2JyayA9IF9fYnJrKGRlc2lyZWRfYnJrKTsKLSAgaWYgKG5ld19icmsgPT0gKHZvaWQqKSAtMSkgewotICAgIHJldHVybiBuZXdfYnJrOwotICB9IGVsc2UgaWYgKG5ld19icmsgPCBkZXNpcmVkX2JyaykgewotICAgIGVycm5vID0gRU5PTUVNOwotICAgIHJldHVybiAodm9pZCopIC0xOwotICB9Ci0KLSAgX19iaW9uaWNfYnJrID0gbmV3X2JyazsKLSAgcmV0dXJuIG9yaWdpbmFsX2JyazsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NjYW5kaXIuY3BwIGIvbGliYy9iaW9uaWMvc2NhbmRpci5jcHAKaW5kZXggZGQyMmIyMi4uOWY3MzFhYiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvc2NhbmRpci5jcHAKKysrIGIvbGliYy9iaW9uaWMvc2NhbmRpci5jcHAKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9TY29wZWRSZWFkZGlyLmgiCiAKIC8vIEEgc21hcnQgcG9pbnRlciB0byB0aGUgc2NhbmRpciBkaXJlbnQqKi4KQEAgLTg0LDkgKzg1LDcgQEAKICAgICByZXR1cm4gY29weTsKICAgfQogCi0gIC8vIERpc2FsbG93IGNvcHkgYW5kIGFzc2lnbm1lbnQuCi0gIFNjYW5kaXJSZXN1bHQoY29uc3QgU2NhbmRpclJlc3VsdCYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBTY2FuZGlyUmVzdWx0Jik7CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTY2FuZGlyUmVzdWx0KTsKIH07CiAKIGludCBzY2FuZGlyKGNvbnN0IGNoYXIqIGRpcm5hbWUsIGRpcmVudCoqKiBuYW1lX2xpc3QsCkBAIC0xMTMsMyArMTEyLDQgQEAKICAgKm5hbWVfbGlzdCA9IG5hbWVzLnJlbGVhc2UoKTsKICAgcmV0dXJuIHNpemU7CiB9CitfX3N0cm9uZ19hbGlhcyhzY2FuZGlyNjQsIHNjYW5kaXIpOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2NoZWRfY3B1Y291bnQuYyBiL2xpYmMvYmlvbmljL3NjaGVkX2NwdWNvdW50LmMKaW5kZXggOTQ1OGRjOC4uMmVhMWQzZiAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvc2NoZWRfY3B1Y291bnQuYworKysgYi9saWJjL2Jpb25pYy9zY2hlZF9jcHVjb3VudC5jCkBAIC0yOCwxMyArMjgsMTQgQEAKICNkZWZpbmUgX0dOVV9TT1VSQ0UgMQogI2luY2x1ZGUgPHNjaGVkLmg+CiAKLWludCBfX3NjaGVkX2NwdWNvdW50KHNpemVfdCBzZXRzaXplLCBjcHVfc2V0X3QqIHNldCkKLXsKLSAgICBpbnQgbm4gPSAwLCBubl9tYXggPSBzZXRzaXplIC8gc2l6ZW9mKF9fQ1BVX0JJVFRZUEUpOwotICAgIGludCBjb3VudCA9IDA7CitpbnQgX19zY2hlZF9jcHVjb3VudChzaXplX3Qgc2V0c2l6ZSwgY3B1X3NldF90KiBzZXQpIHsKKyAgaW50IG5uID0gMDsKKyAgaW50IG5uX21heCA9IHNldHNpemUgLyBzaXplb2YoX19DUFVfQklUVFlQRSk7CisgIGludCBjb3VudCA9IDA7CiAKLSAgICBmb3IgKCA7IG5uIDwgbm5fbWF4OyBubisrICkKLSAgICAgICAgY291bnQgKz0gX19idWlsdGluX3BvcGNvdW50KHNldC0+X19iaXRzW25uXSk7CisgIGZvciAoIDsgbm4gPCBubl9tYXg7IG5uKysgKSB7CisgICAgY291bnQgKz0gX19idWlsdGluX3BvcGNvdW50bChzZXQtPl9fYml0c1tubl0pOworICB9CiAKLSAgICByZXR1cm4gY291bnQ7CisgIHJldHVybiBjb3VudDsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NlbWFwaG9yZS5jIGIvbGliYy9iaW9uaWMvc2VtYXBob3JlLmMKaW5kZXggMjhmY2IxYi4uMWZhMDE5ZSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvc2VtYXBob3JlLmMKKysrIGIvbGliYy9iaW9uaWMvc2VtYXBob3JlLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKQEAgLTEyNywxMSArMTI2LDggQEAKIH0KIAogCi1zZW1fdCAqc2VtX29wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IG9mbGFnLCAuLi4pCitzZW1fdCAqc2VtX29wZW4oY29uc3QgY2hhciAqbmFtZSBfX3VudXNlZCwgaW50IG9mbGFnIF9fdW51c2VkLCAuLi4pCiB7Ci0gICAgbmFtZT1uYW1lOwotICAgIG9mbGFnPW9mbGFnOwotCiAgICAgZXJybm8gPSBFTk9TWVM7CiAgICAgcmV0dXJuIFNFTV9GQUlMRUQ7CiB9CkBAIC0xNDgsNyArMTQ0LDcgQEAKIH0KIAogCi1pbnQgc2VtX3VubGluayhjb25zdCBjaGFyICogbmFtZSkKK2ludCBzZW1fdW5saW5rKGNvbnN0IGNoYXIqIG5hbWUgX191bnVzZWQpCiB7CiAgICAgZXJybm8gPSBFTk9TWVM7CiAgICAgcmV0dXJuIC0xOwpAQCAtMjY3LDcgKzI2Myw2IEBACiAKIGludCBzZW1fdGltZWR3YWl0KHNlbV90ICpzZW0sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzX3RpbWVvdXQpCiB7Ci0gICAgaW50ICByZXQ7CiAgICAgdW5zaWduZWQgaW50IHNoYXJlZDsKIAogICAgIGlmIChzZW0gPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2VuZC5jIGIvbGliYy9iaW9uaWMvc2VuZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTc4Zjk4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3NlbmQuYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0KLXNzaXplX3Qgc2VuZChpbnQgc29ja2V0LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4sIHVuc2lnbmVkIGludCBmbGFncykKLXsKLSAgICByZXR1cm4gKHNzaXplX3QpIHNlbmR0byhzb2NrZXQsIGJ1ZiwgYnVmbGVuLCBmbGFncywgTlVMTCwgMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zZW5kLmNwcCBiL2xpYmMvYmlvbmljL3NlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNWQ0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zZW5kLmNwcApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKK3NzaXplX3Qgc2VuZChpbnQgc29ja2V0LCBjb25zdCB2b2lkKiBidWYsIHNpemVfdCBsZW4sIGludCBmbGFncykgeworICByZXR1cm4gc2VuZHRvKHNvY2tldCwgYnVmLCBsZW4sIGZsYWdzLCBOVUxMLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NldGxvY2FsZS5jcHAgYi9saWJjL2Jpb25pYy9zZXRsb2NhbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGZkYzllLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3NldGxvY2FsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxsb2NhbGUuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLy8gc2V0bG9jYWxlKDMpIGFsd2F5cyBmYWlscyBvbiBiaW9uaWMuCi1jaGFyKiBzZXRsb2NhbGUoaW50IC8qY2F0ZWdvcnkqLywgY2hhciBjb25zdCogLypsb2NhbGUqLykgewotICAgIHJldHVybiBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2V0cGdycC5jIGIvbGliYy9iaW9uaWMvc2V0cGdycC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGZmODIyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3NldHBncnAuYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotaW50IHNldHBncnAodm9pZCkKLXsKLSAgcmV0dXJuIHNldHBnaWQoMCwwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NldHBncnAuY3BwIGIvbGliYy9iaW9uaWMvc2V0cGdycC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMzNGNkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3NldHBncnAuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitpbnQgc2V0cGdycCgpIHsKKyAgcmV0dXJuIHNldHBnaWQoMCwgMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zaWdhY3Rpb24uY3BwIGIvbGliYy9iaW9uaWMvc2lnYWN0aW9uLmNwcAppbmRleCA2NDY4YjJkLi4yMjVhODIzIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zaWdhY3Rpb24uY3BwCisrKyBiL2xpYmMvYmlvbmljL3NpZ2FjdGlvbi5jcHAKQEAgLTQyLDEyICs0MiwxNCBAQAogICAgIGtlcm5lbF9uZXdfYWN0aW9uLnNhX2ZsYWdzID0gYmlvbmljX25ld19hY3Rpb24tPnNhX2ZsYWdzOwogICAgIGtlcm5lbF9uZXdfYWN0aW9uLnNhX2hhbmRsZXIgPSBiaW9uaWNfbmV3X2FjdGlvbi0+c2FfaGFuZGxlcjsKICAgICBrZXJuZWxfbmV3X2FjdGlvbi5zYV9tYXNrID0gYmlvbmljX25ld19hY3Rpb24tPnNhX21hc2s7CisjaWZkZWYgU0FfUkVTVE9SRVIKICAgICBrZXJuZWxfbmV3X2FjdGlvbi5zYV9yZXN0b3JlciA9IGJpb25pY19uZXdfYWN0aW9uLT5zYV9yZXN0b3JlcjsKIAogICAgIGlmICghKGtlcm5lbF9uZXdfYWN0aW9uLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpKSB7CiAgICAgICBrZXJuZWxfbmV3X2FjdGlvbi5zYV9mbGFncyB8PSBTQV9SRVNUT1JFUjsKICAgICAgIGtlcm5lbF9uZXdfYWN0aW9uLnNhX3Jlc3RvcmVyID0gJl9fcnRfc2lncmV0dXJuOwogICAgIH0KKyNlbmRpZgogICB9CiAKICAgX19rZXJuZWxfc2lnYWN0aW9uIGtlcm5lbF9vbGRfYWN0aW9uOwpAQCAtNjAsMTEgKzYyLDEzIEBACiAgICAgYmlvbmljX29sZF9hY3Rpb24tPnNhX2ZsYWdzID0ga2VybmVsX29sZF9hY3Rpb24uc2FfZmxhZ3M7CiAgICAgYmlvbmljX29sZF9hY3Rpb24tPnNhX2hhbmRsZXIgPSBrZXJuZWxfb2xkX2FjdGlvbi5zYV9oYW5kbGVyOwogICAgIGJpb25pY19vbGRfYWN0aW9uLT5zYV9tYXNrID0ga2VybmVsX29sZF9hY3Rpb24uc2FfbWFzazsKKyNpZmRlZiBTQV9SRVNUT1JFUgogICAgIGJpb25pY19vbGRfYWN0aW9uLT5zYV9yZXN0b3JlciA9IGtlcm5lbF9vbGRfYWN0aW9uLnNhX3Jlc3RvcmVyOwogCiAgICAgaWYgKGJpb25pY19vbGRfYWN0aW9uLT5zYV9yZXN0b3JlciA9PSAmX19ydF9zaWdyZXR1cm4pIHsKICAgICAgIGJpb25pY19vbGRfYWN0aW9uLT5zYV9mbGFncyAmPSB+U0FfUkVTVE9SRVI7CiAgICAgfQorI2VuZGlmCiAgIH0KIAogICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2lnbGlzdC5jIGIvbGliYy9iaW9uaWMvc2lnbGlzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWMzMzc3Li4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3NpZ2xpc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotY29uc3QgY2hhciAqIGNvbnN0IHN5c19zaWdsaXN0W05TSUddID0gewotI2RlZmluZSAgX19CSU9OSUNfU0lHREVGKHgseSx6KSAgIFsgU0lHIyN4IF0gPSB6LAotI2luY2x1ZGUgPHN5cy9fc2lnZGVmcy5oPgotfTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NpZ25hbC5jcHAgYi9saWJjL2Jpb25pYy9zaWduYWwuY3BwCmluZGV4IDQ4YjJlNzIuLjY2ZDc1YmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3NpZ25hbC5jcHAKKysrIGIvbGliYy9iaW9uaWMvc2lnbmFsLmNwcApAQCAtMjgsNyArMjgsMTIgQEAKIAogI2luY2x1ZGUgPHNpZ25hbC5oPgogCi1zdGF0aWMgc2lnaGFuZGxlcl90IF9zaWduYWwoaW50IHNpZ251bSwgc2lnaGFuZGxlcl90IGhhbmRsZXIsIGludCBmbGFncykgeworI2lmZGVmIF9fTFA2NF9fCitzdGF0aWMKKyNlbHNlCitfX0xJQkNfSElEREVOX18KKyNlbmRpZgorc2lnaGFuZGxlcl90IF9zaWduYWwoaW50IHNpZ251bSwgc2lnaGFuZGxlcl90IGhhbmRsZXIsIGludCBmbGFncykgewogICBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwogICBzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CiAgIHNhLnNhX2hhbmRsZXIgPSBoYW5kbGVyOwpAQCAtNDEsMTQgKzQ2LDYgQEAKICAgcmV0dXJuIChzaWdoYW5kbGVyX3QpIHNhLnNhX2hhbmRsZXI7CiB9CiAKLXNpZ2hhbmRsZXJfdCBic2Rfc2lnbmFsKGludCBzaWdudW0sIHNpZ2hhbmRsZXJfdCBoYW5kbGVyKSB7Ci0gIHJldHVybiBfc2lnbmFsKHNpZ251bSwgaGFuZGxlciwgU0FfUkVTVEFSVCk7Ci19Ci0KLXNpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbChpbnQgc2lnbnVtLCBzaWdoYW5kbGVyX3QgaGFuZGxlcikgewotICByZXR1cm4gX3NpZ25hbChzaWdudW0sIGhhbmRsZXIsIFNBX1JFU0VUSEFORCk7Ci19Ci0KIHNpZ2hhbmRsZXJfdCBzaWduYWwoaW50IHNpZ251bSwgc2lnaGFuZGxlcl90IGhhbmRsZXIpIHsKLSAgcmV0dXJuIGJzZF9zaWduYWwoc2lnbnVtLCBoYW5kbGVyKTsKKyAgcmV0dXJuIF9zaWduYWwoc2lnbnVtLCBoYW5kbGVyLCBTQV9SRVNUQVJUKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NpZ25hbGZkLmNwcCBiL2xpYmMvYmlvbmljL3NpZ25hbGZkLmNwcAppbmRleCAzNmVmODFkLi42M2UxZGI0IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zaWduYWxmZC5jcHAKKysrIGIvbGliYy9iaW9uaWMvc2lnbmFsZmQuY3BwCkBAIC0zMCw5ICszMCw5IEBACiAKICNpbmNsdWRlICJwcml2YXRlL2tlcm5lbF9zaWdzZXRfdC5oIgogCi1leHRlcm4gIkMiIGludCBzaWduYWxmZDQoaW50IGZkLCBrZXJuZWxfc2lnc2V0X3QqIG1hc2ssIHNpemVfdCBzaXplbWFzaywgaW50IGZsYWdzKTsKK2V4dGVybiAiQyIgaW50IF9fc2lnbmFsZmQ0KGludCBmZCwga2VybmVsX3NpZ3NldF90KiBtYXNrLCBzaXplX3Qgc2l6ZW1hc2ssIGludCBmbGFncyk7CiAKIGludCBzaWduYWxmZChpbnQgZmQsIGNvbnN0IHNpZ3NldF90KiBtYXNrLCBpbnQgZmxhZ3MpIHsKICAga2VybmVsX3NpZ3NldF90IGluX3NldChtYXNrKTsKLSAgcmV0dXJuIHNpZ25hbGZkNChmZCwgJmluX3NldCwgc2l6ZW9mKGluX3NldCksIGZsYWdzKTsKKyAgcmV0dXJuIF9fc2lnbmFsZmQ0KGZkLCAmaW5fc2V0LCBzaXplb2YoaW5fc2V0KSwgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2lnbmFtZS5jIGIvbGliYy9iaW9uaWMvc2lnbmFtZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjExZTQ0Li4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3NpZ25hbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotY29uc3QgY2hhciAqIGNvbnN0IHN5c19zaWduYW1lW05TSUddID0gewotI2RlZmluZSAgX19CSU9OSUNfU0lHREVGKHgseSx6KSAgIFsgU0lHIyN4IF0gPSAjeCwKLSNpbmNsdWRlIDxzeXMvX3NpZ2RlZnMuaD4KLX07CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zb2NrZXQuY3BwIGIvbGliYy9iaW9uaWMvc29ja2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjllMTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc29ja2V0LmNwcApAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgInByaXZhdGUvTmV0ZENsaWVudERpc3BhdGNoLmgiCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKK2ludCBzb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCkgeworICAgIHJldHVybiBfX25ldGRDbGllbnREaXNwYXRjaC5zb2NrZXQoZG9tYWluLCB0eXBlLCBwcm90b2NvbCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdGF0LmNwcCBiL2xpYmMvYmlvbmljL3N0YXQuY3BwCmluZGV4IDYyMzg3YzUuLmU3MWQ5ZDQgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3N0YXQuY3BwCisrKyBiL2xpYmMvYmlvbmljL3N0YXQuY3BwCkBAIC0zNCwzICszNCw0IEBACiBpbnQgc3RhdChjb25zdCBjaGFyKiBwYXRoLCBzdHJ1Y3Qgc3RhdCogc2IpIHsKICAgcmV0dXJuIGZzdGF0YXQoQVRfRkRDV0QsIHBhdGgsIHNiLCAwKTsKIH0KK19fc3Ryb25nX2FsaWFzKHN0YXQ2NCwgc3RhdCk7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdGF0dmZzLmNwcCBiL2xpYmMvYmlvbmljL3N0YXR2ZnMuY3BwCmluZGV4IDM5YzkzMzIuLmYxZTI4MzMgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3N0YXR2ZnMuY3BwCisrKyBiL2xpYmMvYmlvbmljL3N0YXR2ZnMuY3BwCkBAIC01Myw2ICs1Myw3IEBACiAgIF9fc3RhdGZzX3RvX3N0YXR2ZnModG1wLCByZXN1bHQpOwogICByZXR1cm4gMDsKIH0KK19fc3Ryb25nX2FsaWFzKHN0YXR2ZnM2NCwgc3RhdHZmcyk7CiAKIGludCBmc3RhdHZmcyhpbnQgZmQsIHN0cnVjdCBzdGF0dmZzKiByZXN1bHQpIHsKICAgc3RydWN0IHN0YXRmcyB0bXA7CkBAIC02MywzICs2NCw0IEBACiAgIF9fc3RhdGZzX3RvX3N0YXR2ZnModG1wLCByZXN1bHQpOwogICByZXR1cm4gMDsKIH0KK19fc3Ryb25nX2FsaWFzKGZzdGF0dmZzNjQsIGZzdGF0dmZzKTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cmNoci5jcHAgYi9saWJjL2Jpb25pYy9zdHJjaHIuY3BwCmluZGV4IDAyOWZiZDkuLjViZDNmMTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3N0cmNoci5jcHAKKysrIGIvbGliYy9iaW9uaWMvc3RyY2hyLmNwcApAQCAtMzAsNiArMzAsNiBAQAogI3VuZGVmIF9GT1JUSUZZX1NPVVJDRQogI2luY2x1ZGUgPHN0cmluZy5oPgogCi1leHRlcm4gIkMiIGNoYXIqIHN0cmNocihjb25zdCBjaGFyKiBwLCBpbnQgY2gpIHsKK2NoYXIqIHN0cmNocihjb25zdCBjaGFyKiBwLCBpbnQgY2gpIHsKICAgcmV0dXJuIF9fc3RyY2hyX2NoayhwLCBjaCwgX19CSU9OSUNfRk9SVElGWV9VTktOT1dOX1NJWkUpOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RyY29sbF9sLmNwcCBiL2xpYmMvYmlvbmljL3N0cmNvbGxfbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3YzI4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3N0cmNvbGxfbC5jcHAKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2ludCBzdHJjb2xsX2woY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBsb2NhbGVfdCkgeworICByZXR1cm4gc3RyY29sbChzMSwgczIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RyZXJyb3Jfci5jcHAgYi9saWJjL2Jpb25pYy9zdHJlcnJvcl9yLmNwcAppbmRleCA4MTEyMGVjLi4xZTU3Y2MwIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zdHJlcnJvcl9yLmNwcAorKysgYi9saWJjL2Jpb25pYy9zdHJlcnJvcl9yLmNwcApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2luY2x1ZGUgInByaXZhdGUvRXJybm9SZXN0b3Jlci5oIgorI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCiAKIHN0cnVjdCBQYWlyIHsKICAgaW50IGNvZGU7CkBAIC0zNCw3ICszNSw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBQYWlyIF9zeXNfc2lnbmFsX3N0cmluZ3NbXSA9IHsKLSNkZWZpbmUgIF9fQklPTklDX1NJR0RFRih4LHkseikgIHsgeSwgeiB9LAorI2RlZmluZSAgX19CSU9OSUNfU0lHREVGKHNpZ25hbF9udW1iZXIsIHNpZ25hbF9kZXNjcmlwdGlvbikgIHsgc2lnbmFsX251bWJlciwgc2lnbmFsX2Rlc2NyaXB0aW9uIH0sCiAjaW5jbHVkZSA8c3lzL19zaWdkZWZzLmg+CiAgIHsgMCwgTlVMTCB9CiB9OwpAQCAtNDksOSArNTAsOSBAQAogCiAgIGNvbnN0IGNoYXIqIGVycm9yX25hbWUgPSBfX3N0cmVycm9yX2xvb2t1cChlcnJvcl9udW1iZXIpOwogICBpZiAoZXJyb3JfbmFtZSAhPSBOVUxMKSB7Ci0gICAgbGVuZ3RoID0gc25wcmludGYoYnVmLCBidWZfbGVuLCAiJXMiLCBlcnJvcl9uYW1lKTsKKyAgICBsZW5ndGggPSBzdHJsY3B5KGJ1ZiwgZXJyb3JfbmFtZSwgYnVmX2xlbik7CiAgIH0gZWxzZSB7Ci0gICAgbGVuZ3RoID0gc25wcmludGYoYnVmLCBidWZfbGVuLCAiVW5rbm93biBlcnJvciAlZCIsIGVycm9yX251bWJlcik7CisgICAgbGVuZ3RoID0gX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBidWZfbGVuLCAiVW5rbm93biBlcnJvciAlZCIsIGVycm9yX251bWJlcik7CiAgIH0KICAgaWYgKGxlbmd0aCA+PSBidWZfbGVuKSB7CiAgICAgZXJybm9fcmVzdG9yZXIub3ZlcnJpZGUoRVJBTkdFKTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cmZ0aW1lX2wuY3BwIGIvbGliYy9iaW9uaWMvc3RyZnRpbWVfbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwMWRhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3N0cmZ0aW1lX2wuY3BwCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHRpbWUuaD4KKworc2l6ZV90IHN0cmZ0aW1lX2woY2hhciAqcywgc2l6ZV90IG1heCwgY29uc3QgY2hhciAqZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKnRtLAorICAgICAgICAgICAgICAgICAgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHN0cmZ0aW1lKHMsIG1heCwgZm9ybWF0LCB0bSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJuZHVwLmMgYi9saWJjL2Jpb25pYy9zdHJuZHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkY2E3OWMuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc3RybmR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1jaGFyKiAgc3RybmR1cChjb25zdCBjaGFyKiAgcywgc2l6ZV90IG4pCi17Ci0gICAgc2l6ZV90ICBzbGVuID0gKHNpemVfdClzdHJsZW4ocyk7Ci0gICAgY2hhciogICBjb3B5OwotCi0gICAgaWYgKHNsZW4gPCBuKQotICAgICAgICBuID0gc2xlbjsKLSAgICBjb3B5ID0gbWFsbG9jKG4rMSk7Ci0gICAgaWYgKGNvcHkpIHsKLSAgICAgICAgbWVtY3B5KGNvcHksIHMsIG4pOwotICAgICAgICBjb3B5W25dID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGNvcHk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJudG9pbWF4LmMgYi9saWJjL2Jpb25pYy9zdHJudG9pbWF4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmM2NkOWEuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc3RybnRvaW1heC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0KLWludG1heF90IHN0cm50b2ltYXgoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UsIHNpemVfdCBuKQotewotICByZXR1cm4gKGludG1heF90KSBzdHJudG91bWF4KG5wdHIsIGVuZHB0ciwgYmFzZSwgbik7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJudG91bWF4LmMgYi9saWJjL2Jpb25pYy9zdHJudG91bWF4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MGQ3MTguLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc3RybnRvdW1heC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRpZ2l0dmFsKGludCBjaCkKLXsKLSAgICB1bnNpZ25lZCAgZDsKLQotICAgIGQgPSAodW5zaWduZWQpKGNoIC0gJzAnKTsKLSAgICBpZiAoZCA8IDEwKSByZXR1cm4gKGludClkOwotCi0gICAgZCA9ICh1bnNpZ25lZCkoY2ggLSAnYScpOwotICAgIGlmIChkIDwgNikgcmV0dXJuIChpbnQpKGQrMTApOwotCi0gICAgZCA9ICh1bnNpZ25lZCkoY2ggLSAnQScpOwotICAgIGlmIChkIDwgNikgcmV0dXJuIChpbnQpKGQrMTApOwotCi0gICAgcmV0dXJuIC0xOwotfQotCi11aW50bWF4X3QKLXN0cm50b3VtYXgoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UsIHNpemVfdCBuKQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqICBwICAgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKW5wdHI7Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciogIGVuZCA9IHAgKyBuOwotICAgIGludCAgICAgICAgICAgICAgICAgICBtaW51cyA9IDA7Ci0gICAgdWludG1heF90ICAgICAgICAgICAgIHYgPSAwOwotICAgIGludCAgICAgICAgICAgICAgICAgICBkOwotCi0gICAgLyogc2tpcCBsZWFkaW5nIHNwYWNlICovCi0gICAgd2hpbGUgKHAgPCBlbmQgJiYgaXNzcGFjZSgqcCkpCi0gICAgICAgIHArKzsKLQotICAgIC8qIFNpbmdsZSBvcHRpb25hbCArIG9yIC0gKi8KLSAgICBpZiAocCA8IGVuZCkgewotICAgICAgICBjaGFyIGMgPSBwWzBdOwotICAgICAgICBpZiAoIGMgPT0gJy0nIHx8IGMgPT0gJysnICkgewotICAgICAgICAgICAgbWludXMgPSAoYyA9PSAnLScpOwotICAgICAgICAgICAgcCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCBiYXNlID09IDAgKSB7Ci0gICAgICAgIGlmICggcCsyIDwgZW5kICYmIHBbMF0gPT0gJzAnICYmIChwWzFdID09ICd4JyB8fCBwWzFdID09ICdYJykgKSB7Ci0gICAgICAgICAgICBwICs9IDI7Ci0gICAgICAgICAgICBiYXNlID0gMTY7Ci0gICAgICAgIH0gZWxzZSBpZiAoIHArMSA8IGVuZCAmJiBwWzBdID09ICcwJyApIHsKLSAgICAgICAgICAgIHAgICArPSAxOwotICAgICAgICAgICAgYmFzZSA9IDg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBiYXNlID0gMTA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCBiYXNlID09IDE2ICkgewotICAgICAgICBpZiAoIHArMiA8IGVuZCAmJiBwWzBdID09ICcwJyAmJiAocFsxXSA9PSAneCcgfHwgcFsxXSA9PSAnWCcpICkgewotICAgICAgICAgICAgcCArPSAyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUgKCBwIDwgZW5kICYmIChkID0gZGlnaXR2YWwoKnApKSA+PSAwICYmIGQgPCBiYXNlICkgewotICAgICAgICB2ID0gdipiYXNlICsgZDsKLSAgICAgICAgcCArPSAxOwotICAgIH0KLQotICAgIGlmICggZW5kcHRyICkKLSAgICAgICAgKmVuZHB0ciA9IChjaGFyICopcDsKLQotICAgIHJldHVybiBtaW51cyA/IC12IDogdjsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cnJjaHIuY3BwIGIvbGliYy9iaW9uaWMvc3RycmNoci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkYjQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3N0cnJjaHIuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI3VuZGVmIF9GT1JUSUZZX1NPVVJDRQorI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyKiBzdHJyY2hyKGNvbnN0IGNoYXIqIHAsIGludCBjaCkgeworICByZXR1cm4gX19zdHJyY2hyX2NoayhwLCBjaCwgX19CSU9OSUNfRk9SVElGWV9VTktOT1dOX1NJWkUpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RydG9sZC5jcHAgYi9saWJjL2Jpb25pYy9zdHJ0b2xkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjE2Y2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3RydG9sZC5jcHAKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworZXh0ZXJuICJDIiBpbnQgX19zdHJ0b3JRKGNvbnN0IGNoYXIqLCBjaGFyKiosIGludCwgdm9pZCopOworCitsb25nIGRvdWJsZSBzdHJ0b2xkKGNvbnN0IGNoYXIqIHMsIGNoYXIqKiBlbmRfcHRyKSB7CisjaWYgX19MUDY0X18KKyAgbG9uZyBkb3VibGUgcmVzdWx0OworICBfX3N0cnRvclEocywgZW5kX3B0ciwgRkxUX1JPVU5EUywgJnJlc3VsdCk7CisgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAvLyBUaGlzIGlzIGZpbmUgZm9yIExQMzIgd2hlcmUgbG9uZyBkb3VibGUgaXMganVzdCBkb3VibGUuCisgIHJldHVybiBzdHJ0b2QocywgZW5kX3B0cik7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cnRvbGRfbC5jcHAgYi9saWJjL2Jpb25pYy9zdHJ0b2xkX2wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjMwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zdHJ0b2xkX2wuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitsb25nIGRvdWJsZSBzdHJ0b2xkX2woY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHN0cnRvbGQobnB0ciwgZW5kcHRyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cnRvbGxfbC5jcHAgYi9saWJjL2Jpb25pYy9zdHJ0b2xsX2wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YjEyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zdHJ0b2xsX2wuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitsb25nIGxvbmcgc3RydG9sbF9sKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlLCBsb2NhbGVfdCkgeworICByZXR1cm4gc3RydG9sbChucHRyLCBlbmRwdHIsIGJhc2UpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RydG90aW1ldmFsLmMgYi9saWJjL2Jpb25pYy9zdHJ0b3RpbWV2YWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMxMzJlYy4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9zdHJ0b3RpbWV2YWwuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotY2hhciAqIHN0cnRvdGltZXZhbCAoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgdGltZXZhbCAqdHMpCi17Ci0gICAgaW50IG47Ci0gICAgY2hhciAqcywgKnMwOwotICAgIGxvbmcgIGZzOwkvKiBGcmFjdGlvbmFsIHNlY29uZHMgKi8KLQotICAgIHRzLT50dl9zZWMgPSBzdHJ0b3VtYXgoc3RyLCAmcywgMTApOwotICAgIGZzID0gMDsKLQotICAgIGlmICggKnMgPT0gJy4nICkgewotCWludCAgY291bnQ7Ci0KLSAgICAgICAgczAgPSBzKzE7Ci0KLQkvKiByZWFkIHVwIHRvIDYgZGlnaXRzICovCi0JZnMgICAgPSAwOwotCWNvdW50ID0gMDsKLQl3aGlsZSAoICpzICYmIGlzZGlnaXQoKnMpICkKLQl7Ci0gICAgICAgICAgICBpZiAoICsrY291bnQgPCA3ICkKLQkgICAgICAgIGZzID0gZnMqMTAgKyAoKnMgLSAnMCcpOwotCSAgICBzKys7Ci0JfQotCi0JZm9yICggOyBjb3VudCA8IDY7IGNvdW50KysgKQotCSAgICBmcyAqPSAxMDsKLSAgICB9Ci0KLSAgICB0cy0+dHZfdXNlYyA9IGZzOwotICAgIHJldHVybiBzOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RydG91bGxfbC5jcHAgYi9saWJjL2Jpb25pYy9zdHJ0b3VsbF9sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOThiYTBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3RydG91bGxfbC5jcHAKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBzdHJ0b3VsbF9sKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHN0cnRvdWxsKG5wdHIsIGVuZHB0ciwgYmFzZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJ4ZnJtX2wuY3BwIGIvbGliYy9iaW9uaWMvc3RyeGZybV9sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmUzYjk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3RyeGZybV9sLmNwcApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc2l6ZV90IHN0cnhmcm1fbChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuLCBsb2NhbGVfdCkgeworICByZXR1cm4gc3RyeGZybShkZXN0LCBzcmMsIG4pOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3R1YnMuY3BwIGIvbGliYy9iaW9uaWMvc3R1YnMuY3BwCmluZGV4IDcwNzAzNmEuLmIxZTM4YmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3N0dWJzLmNwcAorKysgYi9saWJjL2Jpb25pYy9zdHVicy5jcHAKQEAgLTg5LDkgKzg5LDExIEBACiAgIC8vIENvcHkgdGhlIHN0cmluZ3MuCiAgIHNucHJpbnRmKGJ1ZiwgYnl0ZV9jb3VudCwgIiVzJWMlcyVjJXMiLCBzcmMtPnB3X25hbWUsIDAsIHNyYy0+cHdfZGlyLCAwLCBzcmMtPnB3X3NoZWxsKTsKIAotICAvLyBwd19wYXNzd2QgaXMgbm9uLVBPU0lYIGFuZCB1bnVzZWQgKGFsd2F5cyBOVUxMKSBpbiBiaW9uaWMuCi0gIC8vIHB3X2dlY29zIGlzIG5vbi1QT1NJWCBhbmQgbWlzc2luZyBpbiBiaW9uaWMuCisgIC8vIHB3X3Bhc3N3ZCBhbmQgcHdfZ2Vjb3MgYXJlIG5vbi1QT1NJWCBhbmQgdW51c2VkIChhbHdheXMgTlVMTCkgaW4gYmlvbmljLgogICBkc3QtPnB3X3Bhc3N3ZCA9IE5VTEw7CisjaWZkZWYgX19MUDY0X18KKyAgZHN0LT5wd19nZWNvcyA9IE5VTEw7CisjZW5kaWYKIAogICAvLyBDb3B5IHRoZSBpbnRlZ3JhbCBmaWVsZHMuCiAgIGRzdC0+cHdfZ2lkID0gc3JjLT5wd19naWQ7CkBAIC00NDIsMzEgKzQ0NCw2IEBACiAgIFVOSU1QTEVNRU5URUQ7CiB9CiAKLW1udGVudCogZ2V0bW50ZW50KEZJTEUqIC8qZiovKSB7Ci0gIFVOSU1QTEVNRU5URUQ7Ci0gIHJldHVybiBOVUxMOwotfQotCi1GSUxFKiBzZXRtbnRlbnQoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSB7Ci0gIFVOSU1QTEVNRU5URUQ7Ci0gIHJldHVybiBOVUxMOwotfQotCi1pbnQgZW5kbW50ZW50KEZJTEUqKSB7Ci0gIFVOSU1QTEVNRU5URUQ7Ci0gIHJldHVybiAxOyAvKiBBbGx3YXlzIHJldHVybnMgMSBhY2NvcmRpbmcgdG8gbWFuICovCi19Ci0KLWNoYXIqIHR0eW5hbWUoaW50IC8qZmQqLykgeyAvLyBOT0xJTlQ6IGltcGxlbWVudGluZyBiYWQgZnVuY3Rpb24uCi0gIFVOSU1QTEVNRU5URUQ7Ci0gIHJldHVybiBOVUxMOwotfQotCi1pbnQgdHR5bmFtZV9yKGludCAvKmZkKi8sIGNoYXIqIC8qYnVmKi8sIHNpemVfdCAvKmJ1ZmxlbiovKSB7Ci0gIFVOSU1QTEVNRU5URUQ7Ci0gIHJldHVybiAtRVJBTkdFOwotfQotCiBjaGFyKiBnZXR1c2Vyc2hlbGwoKSB7CiAgIFVOSU1QTEVNRU5URUQ7CiAgIHJldHVybiBOVUxMOwpAQCAtNDgwLDcgKzQ1Nyw4IEBACiAgIFVOSU1QTEVNRU5URUQ7CiB9CiAKLS8vIFBvcnRhYmxlIGNvZGUgc2hvdWxkIHVzZSBzeXNjb25mKF9TQ19QQUdFU0laRSkgZGlyZWN0bHkgaW5zdGVhZC4KKy8vIFBvcnRhYmxlIGNvZGUgc2hvdWxkIHVzZSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpIGRpcmVjdGx5IGluc3RlYWQuCiBpbnQgZ2V0cGFnZXNpemUoKSB7Ci0gIHJldHVybiBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisgIC8vIFdlIGRvbnQgdXNlIHN5c2NvbmYoMykgaGVyZSBiZWNhdXNlIHRoYXQgZHJhZ3MgaW4gc3RkaW8sIHdoaWNoIG1ha2VzIHN0YXRpYyBiaW5hcmllcyBmYXQuCisgIHJldHVybiBQQUdFX1NJWkU7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zeXNfc2lnbGlzdC5jIGIvbGliYy9iaW9uaWMvc3lzX3NpZ2xpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2ZkZGJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3lzX3NpZ2xpc3QuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworY29uc3QgY2hhciogY29uc3Qgc3lzX3NpZ2xpc3RbTlNJR10gPSB7CisjZGVmaW5lIF9fQklPTklDX1NJR0RFRihzaWduYWxfbnVtYmVyLCBzaWduYWxfZGVzY3JpcHRpb24pIFsgc2lnbmFsX251bWJlciBdID0gc2lnbmFsX2Rlc2NyaXB0aW9uLAorI2luY2x1ZGUgPHN5cy9fc2lnZGVmcy5oPgorfTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N5c19zaWduYW1lLmMgYi9saWJjL2Jpb25pYy9zeXNfc2lnbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMjg2ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zeXNfc2lnbmFtZS5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHNpZ25hbC5oPgorCitjb25zdCBjaGFyKiBjb25zdCBzeXNfc2lnbmFtZVtOU0lHXSA9IHsKKyNkZWZpbmUgX19CSU9OSUNfU0lHREVGKHNpZ25hbF9udW1iZXIsIHVudXNlZCkgWyBzaWduYWxfbnVtYmVyIF0gPSAjc2lnbmFsX251bWJlciArIDMsCisjaW5jbHVkZSA8c3lzL19zaWdkZWZzLmg+Cit9OwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3lzY29uZi5jcHAgYi9saWJjL2Jpb25pYy9zeXNjb25mLmNwcAppbmRleCBkYjgwOGMyLi44MzA5ZjA4IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zeXNjb25mLmNwcAorKysgYi9saWJjL2Jpb25pYy9zeXNjb25mLmNwcApAQCAtMjI5LDggKzIyOSwxMSBAQAogI2VuZGlmCiAgICAgY2FzZSBfU0NfQVRFWElUX01BWDogICAgICAgIHJldHVybiBTWVNURU1fQVRFWElUX01BWDsKICAgICBjYXNlIF9TQ19JT1ZfTUFYOiAgICAgICAgICAgcmV0dXJuIFNZU1RFTV9JT1ZfTUFYOwotICAgIGNhc2UgX1NDX1BBR0VTSVpFOiAgICAgICAgICByZXR1cm4gUEFHRV9TSVpFOwotICAgIGNhc2UgX1NDX1BBR0VfU0laRTogICAgICAgICByZXR1cm4gUEFHRV9TSVpFOworCisgICAgY2FzZSBfU0NfUEFHRVNJWkU6CisgICAgY2FzZSBfU0NfUEFHRV9TSVpFOgorICAgICAgICByZXR1cm4gUEFHRV9TSVpFOworCiAjaWZkZWYgX1hPUEVOX1VOSVgKICAgICBjYXNlIF9TQ19YT1BFTl9VTklYOiAgICAgICAgcmV0dXJuIF9YT1BFTl9VTklYOwogI2VuZGlmCkBAIC0zMDYsNyArMzA5LDcgQEAKICAgICAgIHJldHVybiBfUE9TSVhfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUzsKIAogICAgIGNhc2UgX1NDX1RIUkVBRF9LRVlTX01BWDoKLSAgICAgIHJldHVybiAoQklPTklDX1RMU19TTE9UUyAtIFRMU19TTE9UX0ZJUlNUX1VTRVJfU0xPVCAtIEdMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVJfQ09VTlQpOworICAgICAgcmV0dXJuIChCSU9OSUNfVExTX1NMT1RTIC0gVExTX1NMT1RfRklSU1RfVVNFUl9TTE9UIC0gQklPTklDX1RMU19SRVNFUlZFRF9TTE9UUyk7CiAKICAgICBjYXNlIF9TQ19USFJFQURfU1RBQ0tfTUlOOiAgICByZXR1cm4gUFRIUkVBRF9TVEFDS19NSU47CiAgICAgY2FzZSBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYOiAgcmV0dXJuIFNZU1RFTV9USFJFQURfVEhSRUFEU19NQVg7CkBAIC0zMTQsMTIgKzMxNywxMCBAQAogI2lmZGVmIF9QT1NJWF9USFJFQURTCiAgICAgY2FzZSBfU0NfVEhSRUFEUzogICAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9USFJFQURTOwogI2VuZGlmCi0jaWZkZWYgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLQUREUgotICAgIGNhc2UgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUjogICByZXR1cm4gX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLQUREUjsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWF9USFJFQURfQVRUUl9TVEFDS1NJWkUKLSAgICBjYXNlIF9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkU6ICAgcmV0dXJuIF9QT1NJWF9USFJFQURfQVRUUl9TVEFDS1NJWkU7Ci0jZW5kaWYKKworICAgIGNhc2UgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUjogICByZXR1cm4gLTE7IC8vIFJlbW92ZWQgaW4gUE9TSVggMjAwOAorICAgIGNhc2UgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRTogICByZXR1cm4gLTE7IC8vIFJlbW92ZWQgaW4gUE9TSVggMjAwOAorCiAjaWZkZWYgX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HCiAgICAgY2FzZSBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkc6ICByZXR1cm4gX1BPU0lYX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HOwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zeXNsb2cuY3BwIGIvbGliYy9iaW9uaWMvc3lzbG9nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGI4YjE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3lzbG9nLmNwcApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5c2xvZy5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKKworc3RhdGljIGNvbnN0IGNoYXIqIHN5c2xvZ19sb2dfdGFnID0gTlVMTDsKK3N0YXRpYyBpbnQgc3lzbG9nX3ByaW9yaXR5X21hc2sgPSAweGZmOworCit2b2lkIGNsb3NlbG9nKCkgeworICBzeXNsb2dfbG9nX3RhZyA9IE5VTEw7Cit9CisKK3ZvaWQgb3BlbmxvZyhjb25zdCBjaGFyKiBsb2dfdGFnLCBpbnQgLypvcHRpb25zKi8sIGludCAvKmZhY2lsaXR5Ki8pIHsKKyAgc3lzbG9nX2xvZ190YWcgPSBsb2dfdGFnOworfQorCitpbnQgc2V0bG9nbWFzayhpbnQgbmV3X21hc2spIHsKKyAgaW50IG9sZF9tYXNrID0gc3lzbG9nX3ByaW9yaXR5X21hc2s7CisgIC8vIDAgaXMgdXNlZCB0byBxdWVyeSB0aGUgY3VycmVudCBtYXNrLgorICBpZiAobmV3X21hc2sgIT0gMCkgeworICAgIHN5c2xvZ19wcmlvcml0eV9tYXNrID0gbmV3X21hc2s7CisgIH0KKyAgcmV0dXJuIG9sZF9tYXNrOworfQorCit2b2lkIHN5c2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIqIGZtdCwgLi4uKSB7CisgIHZhX2xpc3QgYXJnczsKKyAgdmFfc3RhcnQoYXJncywgZm10KTsKKyAgdnN5c2xvZyhwcmlvcml0eSwgZm10LCBhcmdzKTsKKyAgdmFfZW5kKGFyZ3MpOworfQorCit2b2lkIHZzeXNsb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyKiBmbXQsIHZhX2xpc3QgYXJncykgeworICBpbnQgY2FsbGVyX2Vycm5vID0gZXJybm87CisKKyAgLy8gQ2hlY2sgd2hldGhlciB3ZSdyZSBzdXBwb3NlZCB0byBiZSBsb2dnaW5nIG1lc3NhZ2VzIG9mIHRoaXMgcHJpb3JpdHkuCisgIGlmICgoc3lzbG9nX3ByaW9yaXR5X21hc2sgJiBMT0dfTUFTSyhMT0dfUFJJKHByaW9yaXR5KSkpID09IDApIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBXaGF0J3Mgb3VyIGxvZyB0YWc/CisgIGNvbnN0IGNoYXIqIGxvZ190YWcgPSBzeXNsb2dfbG9nX3RhZzsKKyAgaWYgKGxvZ190YWcgPT0gTlVMTCkgeworICAgIGxvZ190YWcgPSBnZXRwcm9nbmFtZSgpOworICB9CisKKyAgLy8gV2hhdCdzIG91ciBBbmRyb2lkIGxvZyBwcmlvcml0eT8KKyAgcHJpb3JpdHkgJj0gTE9HX1BSSU1BU0s7CisgIGludCBhbmRyb2lkX2xvZ19wcmlvcml0eTsKKyAgaWYgKHByaW9yaXR5IDw9IExPR19FUlIpIHsKKyAgICBhbmRyb2lkX2xvZ19wcmlvcml0eSA9IEFORFJPSURfTE9HX0VSUk9SOworICB9IGVsc2UgaWYgKHByaW9yaXR5ID09IExPR19XQVJOSU5HKSB7CisgICAgYW5kcm9pZF9sb2dfcHJpb3JpdHkgPSBBTkRST0lEX0xPR19XQVJOOworICB9IGVsc2UgaWYgKHByaW9yaXR5IDw9IExPR19JTkZPKSB7CisgICAgYW5kcm9pZF9sb2dfcHJpb3JpdHkgPSBBTkRST0lEX0xPR19JTkZPOworICB9IGVsc2UgeworICAgIGFuZHJvaWRfbG9nX3ByaW9yaXR5ID0gQU5EUk9JRF9MT0dfREVCVUc7CisgIH0KKworICAvLyBnbGliYydzIHByaW50ZiBmYW1pbHkgc3VwcG9ydCAlbSBkaXJlY3RseSwgYnV0IG91ciBCU0QtYmFzZWQgb25lIGRvZXNuJ3QuCisgIC8vIElmIHRoZSBmb3JtYXQgc3RyaW5nIHNlZW1zIHRvIGNvbnRhaW4gIiVtIiwgcmV3cml0ZSBpdC4KKyAgY29uc3QgY2hhciogbG9nX2ZtdCA9IGZtdDsKKyAgaWYgKHN0cnN0cihmbXQsICIlbSIpICE9IE5VTEwpIHsKKyAgICBzaXplX3QgZHN0X2xlbiA9IDEwMjQ7CisgICAgY2hhciogZHN0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFsbG9jKGRzdF9sZW4pKTsKKyAgICBsb2dfZm10ID0gZHN0OworCisgICAgY29uc3QgY2hhciogc3JjID0gZm10OworICAgIGZvciAoOyBkc3RfbGVuID4gMCAmJiAqc3JjICE9ICdcMCc7ICsrc3JjKSB7CisgICAgICBpZiAoKnNyYyA9PSAnJScgJiYgKihzcmMgKyAxKSA9PSAnbScpIHsKKyAgICAgICAgLy8gRXhwYW5kICVtLgorICAgICAgICBzaXplX3QgbiA9IHN0cmxjcHkoZHN0LCBzdHJlcnJvcihjYWxsZXJfZXJybm8pLCBkc3RfbGVuKTsKKyAgICAgICAgaWYgKG4gPj0gZHN0X2xlbikgeworICAgICAgICAgIG4gPSBkc3RfbGVuOworICAgICAgICB9CisgICAgICAgIGRzdCArPSBuOworICAgICAgICBkc3RfbGVuIC09IG47CisgICAgICAgICsrc3JjOworICAgICAgfSBlbHNlIGlmICgqc3JjID09ICclJyAmJiAqKHNyYyArIDEpID09ICclJykgeworICAgICAgICAvLyBXZSBuZWVkIHRvIGNvcHkgcGFpcnMgb2YgJyUncyBzbyB0aGUgJW0gdGVzdCB3b3Jrcy4KKyAgICAgICAgaWYgKGRzdF9sZW4gPD0gMikgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICpkc3QrKyA9ICclJzsgLS1kc3RfbGVuOworICAgICAgICAqZHN0KysgPSAnJSc7IC0tZHN0X2xlbjsKKyAgICAgICAgKytzcmM7CisgICAgICB9IGVsc2UgeworICAgICAgICAqZHN0KysgPSAqc3JjOyAtLWRzdF9sZW47CisgICAgICB9CisgICAgfQorICAgICpkc3QgPSAnXDAnOworICB9CisKKyAgLy8gV2UgY2FuJ3QgbGV0IF9fbGliY19mb3JtYXRfbG9nIGRvIHRoZSBmb3JtYXR0aW5nIGJlY2F1c2UgaXQgZG9lc24ndCBzdXBwb3J0CisgIC8vIGFsbCB0aGUgcHJpbnRmIGZ1bmN0aW9uYWxpdHkuCisgIGNoYXIgbG9nX2xpbmVbMTAyNF07CisgIHZzbnByaW50Zihsb2dfbGluZSwgc2l6ZW9mKGxvZ19saW5lKSwgbG9nX2ZtdCwgYXJncyk7CisKKyAgaWYgKGxvZ19mbXQgIT0gZm10KSB7CisgICAgZnJlZShjb25zdF9jYXN0PGNoYXIqPihsb2dfZm10KSk7CisgIH0KKworICBfX2xpYmNfZm9ybWF0X2xvZyhhbmRyb2lkX2xvZ19wcmlvcml0eSwgbG9nX3RhZywgIiVzIiwgbG9nX2xpbmUpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXMuYyBiL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNTg5NGYuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDcxNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHBvbGwuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8c3lzL3VuLmg+Ci0jaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jZGVmaW5lIF9SRUFMTFlfSU5DTFVERV9TWVNfX1NZU1RFTV9QUk9QRVJUSUVTX0hfCi0jaW5jbHVkZSA8c3lzL19zeXN0ZW1fcHJvcGVydGllcy5oPgotCi0jaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KLQotI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2F0b21pY19pbmxpbmUuaCIKLQotI2RlZmluZSBBTElHTih4LCBhKSAoKCh4KSArIChhIC0gMSkpICYgfihhIC0gMSkpCi0KLXN0cnVjdCBwcm9wX2FyZWEgewotICAgIHVuc2lnbmVkIGJ5dGVzX3VzZWQ7Ci0gICAgdW5zaWduZWQgdm9sYXRpbGUgc2VyaWFsOwotICAgIHVuc2lnbmVkIG1hZ2ljOwotICAgIHVuc2lnbmVkIHZlcnNpb247Ci0gICAgdW5zaWduZWQgcmVzZXJ2ZWRbMjhdOwotICAgIGNoYXIgZGF0YVswXTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHByb3BfYXJlYSBwcm9wX2FyZWE7Ci0KLXN0cnVjdCBwcm9wX2luZm8gewotICAgIHVuc2lnbmVkIHZvbGF0aWxlIHNlcmlhbDsKLSAgICBjaGFyIHZhbHVlW1BST1BfVkFMVUVfTUFYXTsKLSAgICBjaGFyIG5hbWVbMF07Ci19OwotCi10eXBlZGVmIHN0cnVjdCBwcm9wX2luZm8gcHJvcF9pbmZvOwotCi0vKgotICogUHJvcGVydGllcyBhcmUgc3RvcmVkIGluIGEgaHlicmlkIHRyaWUvYmluYXJ5IHRyZWUgc3RydWN0dXJlLgotICogRWFjaCBwcm9wZXJ0eSdzIG5hbWUgaXMgZGVsaW1pdGVkIGF0ICcuJyBjaGFyYWN0ZXJzLCBhbmQgdGhlIHRva2VucyBhcmUgcHV0Ci0gKiBpbnRvIGEgdHJpZSBzdHJ1Y3R1cmUuICBTaWJsaW5ncyBhdCBlYWNoIGxldmVsIG9mIHRoZSB0cmllIGFyZSBzdG9yZWQgaW4gYQotICogYmluYXJ5IHRyZWUuICBGb3IgaW5zdGFuY2UsICJyby5zZWN1cmUiPSIxIiBjb3VsZCBiZSBzdG9yZWQgYXMgZm9sbG93czoKLSAqCi0gKiArLS0tLS0rICAgY2hpbGRyZW4gICAgKy0tLS0rICAgY2hpbGRyZW4gICAgKy0tLS0tLS0tKwotICogfCAgICAgfC0tLS0tLS0tLS0tLS0tPnwgcm8gfC0tLS0tLS0tLS0tLS0tPnwgc2VjdXJlIHwKLSAqICstLS0tLSsgICAgICAgICAgICAgICArLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0rCi0gKiAgICAgICAgICAgICAgICAgICAgICAgLyAgICBcICAgICAgICAgICAgICAgIC8gICB8Ci0gKiAgICAgICAgICAgICAgICAgbGVmdCAvICAgICAgXCByaWdodCAgIGxlZnQgLyAgICB8ICBwcm9wICAgKz09PT09PT09PT09KwotICogICAgICAgICAgICAgICAgICAgICB2ICAgICAgICB2ICAgICAgICAgICAgdiAgICAgKy0tLS0tLS0tPnwgcm8uc2VjdXJlIHwKLSAqICAgICAgICAgICAgICAgICAgKy0tLS0tKyAgICstLS0tLSsgICAgICstLS0tLSsgICAgICAgICAgICArLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgICAgICAgICAgIHwgbmV0IHwgICB8IHN5cyB8ICAgICB8IGNvbSB8ICAgICAgICAgICAgfCAgICAgMSAgICAgfAotICogICAgICAgICAgICAgICAgICArLS0tLS0rICAgKy0tLS0tKyAgICAgKy0tLS0tKyAgICAgICAgICAgICs9PT09PT09PT09PSsKLSAqLwotCi10eXBlZGVmIHZvbGF0aWxlIHVpbnQzMl90IHByb3Bfb2ZmX3Q7Ci1zdHJ1Y3QgcHJvcF9idCB7Ci0gICAgdWludDhfdCBuYW1lbGVuOwotICAgIHVpbnQ4X3QgcmVzZXJ2ZWRbM107Ci0KLSAgICBwcm9wX29mZl90IHByb3A7Ci0KLSAgICBwcm9wX29mZl90IGxlZnQ7Ci0gICAgcHJvcF9vZmZfdCByaWdodDsKLQotICAgIHByb3Bfb2ZmX3QgY2hpbGRyZW47Ci0KLSAgICBjaGFyIG5hbWVbMF07Ci19OwotCi10eXBlZGVmIHN0cnVjdCBwcm9wX2J0IHByb3BfYnQ7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHByb3BlcnR5X3NlcnZpY2Vfc29ja2V0W10gPSAiL2Rldi9zb2NrZXQvIiBQUk9QX1NFUlZJQ0VfTkFNRTsKLXN0YXRpYyBjaGFyIHByb3BlcnR5X2ZpbGVuYW1lW1BBVEhfTUFYXSA9IFBST1BfRklMRU5BTUU7Ci1zdGF0aWMgYm9vbCBjb21wYXRfbW9kZSA9IGZhbHNlOwotCi1wcm9wX2FyZWEgKl9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXyA9IE5VTEw7Ci0KLXNpemVfdCBwYV9kYXRhX3NpemU7Ci1zaXplX3QgcGFfc2l6ZTsKLQotc3RhdGljIGludCBnZXRfZmRfZnJvbV9lbnYodm9pZCkKLXsKLSAgICBjaGFyICplbnYgPSBnZXRlbnYoIkFORFJPSURfUFJPUEVSVFlfV09SS1NQQUNFIik7Ci0KLSAgICBpZiAoIWVudikgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIGF0b2koZW52KTsKLX0KLQotc3RhdGljIGludCBtYXBfcHJvcF9hcmVhX3J3KCkKLXsKLSAgICBwcm9wX2FyZWEgKnBhOwotICAgIGludCBmZDsKLSAgICBpbnQgcmV0OwotCi0gICAgLyogZGV2IGlzIGEgdG1wZnMgdGhhdCB3ZSBjYW4gdXNlIHRvIGNhcnZlIGEgc2hhcmVkIHdvcmtzcGFjZQotICAgICAqIG91dCBvZiwgc28gbGV0J3MgZG8gdGhhdC4uLgotICAgICAqLwotICAgIGZkID0gb3Blbihwcm9wZXJ0eV9maWxlbmFtZSwgT19SRFdSIHwgT19DUkVBVCB8IE9fTk9GT0xMT1cgfCBPX0NMT0VYRUMgfAotICAgICAgICAgICAgT19FWENMLCAwNDQ0KTsKLSAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgIGlmIChlcnJubyA9PSBFQUNDRVMpIHsKLSAgICAgICAgICAgIC8qIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm9jZXNzIGhhcyBhbHJlYWR5Ci0gICAgICAgICAgICAgKiBtYXBwZWQgdGhlIHBhZ2UgaW4gYW5kIHNlZ2ZhdWx0cyB3aGVuIHRyeWluZyB0byB3cml0ZSB0byBpdAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhYm9ydCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICByZXQgPSBmY250bChmZCwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7Ci0gICAgaWYgKHJldCA8IDApCi0gICAgICAgIGdvdG8gb3V0OwotCi0gICAgaWYgKGZ0cnVuY2F0ZShmZCwgUEFfU0laRSkgPCAwKQotICAgICAgICBnb3RvIG91dDsKLQotICAgIHBhX3NpemUgPSBQQV9TSVpFOwotICAgIHBhX2RhdGFfc2l6ZSA9IHBhX3NpemUgLSBzaXplb2YocHJvcF9hcmVhKTsKLSAgICBjb21wYXRfbW9kZSA9IGZhbHNlOwotCi0gICAgcGEgPSBtbWFwKE5VTEwsIHBhX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKLSAgICBpZihwYSA9PSBNQVBfRkFJTEVEKQotICAgICAgICBnb3RvIG91dDsKLQotICAgIG1lbXNldChwYSwgMCwgcGFfc2l6ZSk7Ci0gICAgcGEtPm1hZ2ljID0gUFJPUF9BUkVBX01BR0lDOwotICAgIHBhLT52ZXJzaW9uID0gUFJPUF9BUkVBX1ZFUlNJT047Ci0gICAgLyogcmVzZXJ2ZSByb290IG5vZGUgKi8KLSAgICBwYS0+Ynl0ZXNfdXNlZCA9IHNpemVvZihwcm9wX2J0KTsKLQotICAgIC8qIHBsdWcgaW50byB0aGUgbGliIHByb3BlcnR5IHNlcnZpY2VzICovCi0gICAgX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fID0gcGE7Ci0KLSAgICBjbG9zZShmZCk7Ci0gICAgcmV0dXJuIDA7Ci0KLW91dDoKLSAgICBjbG9zZShmZCk7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQgX19zeXN0ZW1fcHJvcGVydHlfc2V0X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oZmlsZW5hbWUpOwotICAgIGlmIChsZW4gPj0gc2l6ZW9mKHByb3BlcnR5X2ZpbGVuYW1lKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgc3RyY3B5KHByb3BlcnR5X2ZpbGVuYW1lLCBmaWxlbmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX2luaXQoKQotewotICAgIHJldHVybiBtYXBfcHJvcF9hcmVhX3J3KCk7Ci19Ci0KLXN0YXRpYyBpbnQgbWFwX3Byb3BfYXJlYSgpCi17Ci0gICAgYm9vbCBmcm9tRmlsZSA9IHRydWU7Ci0gICAgaW50IHJlc3VsdCA9IC0xOwotICAgIGludCBmZDsKLSAgICBpbnQgcmV0OwotCi0gICAgZmQgPSBvcGVuKHByb3BlcnR5X2ZpbGVuYW1lLCBPX1JET05MWSB8IE9fTk9GT0xMT1cgfCBPX0NMT0VYRUMpOwotICAgIGlmIChmZCA+PSAwKSB7Ci0gICAgICAgIC8qIEZvciBvbGQga2VybmVscyB0aGF0IGRvbid0IHN1cHBvcnQgT19DTE9FWEVDICovCi0gICAgICAgIHJldCA9IGZjbnRsKGZkLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKLSAgICAgICAgaWYgKHJldCA8IDApCi0gICAgICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotCi0gICAgaWYgKChmZCA8IDApICYmIChlcnJubyA9PSBFTk9FTlQpKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgaWYgdGhlIGZpbGUgZG9lc24ndAotICAgICAgICAgKiBleGlzdCwgd2UgdXNlIHRoZSBlbnZpcm9ubWVudCB0byBnZXQgdGhlIGZpbGUgZGVzY3JpcHRvci4KLSAgICAgICAgICogRm9yIHNlY3VyaXR5IHJlYXNvbnMsIHdlIG9ubHkgdXNlIHRoaXMgYmFja3VwIGlmIHRoZSBrZXJuZWwKLSAgICAgICAgICogcmV0dXJucyBFTk9FTlQuIFdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBiYWNrdXAgaWYgdGhlIGtlcm5lbAotICAgICAgICAgKiByZXR1cm5zIG90aGVyIGVycm9ycyBzdWNoIGFzIEVOT01FTSBvciBFTkZJTEUsIHNpbmNlIGl0Ci0gICAgICAgICAqIG1pZ2h0IGJlIHBvc3NpYmxlIGZvciBhbiBleHRlcm5hbCBwcm9ncmFtIHRvIHRyaWdnZXIgdGhpcwotICAgICAgICAgKiBjb25kaXRpb24uCi0gICAgICAgICAqLwotICAgICAgICBmZCA9IGdldF9mZF9mcm9tX2VudigpOwotICAgICAgICBmcm9tRmlsZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmZCA8IDApIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHN0cnVjdCBzdGF0IGZkX3N0YXQ7Ci0gICAgaWYgKGZzdGF0KGZkLCAmZmRfc3RhdCkgPCAwKSB7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICBpZiAoKGZkX3N0YXQuc3RfdWlkICE9IDApCi0gICAgICAgICAgICB8fCAoZmRfc3RhdC5zdF9naWQgIT0gMCkKLSAgICAgICAgICAgIHx8ICgoZmRfc3RhdC5zdF9tb2RlICYgKFNfSVdHUlAgfCBTX0lXT1RIKSkgIT0gMCkKLSAgICAgICAgICAgIHx8IChmZF9zdGF0LnN0X3NpemUgPCBzaXplb2YocHJvcF9hcmVhKSkgKSB7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICBwYV9zaXplID0gZmRfc3RhdC5zdF9zaXplOwotICAgIHBhX2RhdGFfc2l6ZSA9IHBhX3NpemUgLSBzaXplb2YocHJvcF9hcmVhKTsKLSAgICBwcm9wX2FyZWEgKnBhID0gbW1hcChOVUxMLCBwYV9zaXplLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGZkLCAwKTsKLQotICAgIGlmIChwYSA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAgICBpZigocGEtPm1hZ2ljICE9IFBST1BfQVJFQV9NQUdJQykgfHwgKHBhLT52ZXJzaW9uICE9IFBST1BfQVJFQV9WRVJTSU9OICYmCi0gICAgICAgICAgICAgICAgcGEtPnZlcnNpb24gIT0gUFJPUF9BUkVBX1ZFUlNJT05fQ09NUEFUKSkgewotICAgICAgICBtdW5tYXAocGEsIHBhX3NpemUpOwotICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgfQotCi0gICAgaWYgKHBhLT52ZXJzaW9uID09IFBST1BfQVJFQV9WRVJTSU9OX0NPTVBBVCkgewotICAgICAgICBjb21wYXRfbW9kZSA9IHRydWU7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gMDsKLQotICAgIF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXyA9IHBhOwotCi1jbGVhbnVwOgotICAgIGlmIChmcm9tRmlsZSkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IF9fc3lzdGVtX3Byb3BlcnRpZXNfaW5pdCgpCi17Ci0gICAgcmV0dXJuIG1hcF9wcm9wX2FyZWEoKTsKLX0KLQotc3RhdGljIHZvaWQgKm5ld19wcm9wX29iaihzaXplX3Qgc2l6ZSwgcHJvcF9vZmZfdCAqb2ZmKQotewotICAgIHByb3BfYXJlYSAqcGEgPSBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187Ci0gICAgc2l6ZSA9IEFMSUdOKHNpemUsIHNpemVvZih1aW50MzJfdCkpOwotCi0gICAgaWYgKHBhLT5ieXRlc191c2VkICsgc2l6ZSA+IHBhX2RhdGFfc2l6ZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAqb2ZmID0gcGEtPmJ5dGVzX3VzZWQ7Ci0gICAgX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fLT5ieXRlc191c2VkICs9IHNpemU7Ci0gICAgcmV0dXJuIF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXy0+ZGF0YSArICpvZmY7Ci19Ci0KLXN0YXRpYyBwcm9wX2J0ICpuZXdfcHJvcF9idChjb25zdCBjaGFyICpuYW1lLCB1aW50OF90IG5hbWVsZW4sIHByb3Bfb2ZmX3QgKm9mZikKLXsKLSAgICBwcm9wX29mZl90IG9mZl90bXA7Ci0gICAgcHJvcF9idCAqYnQgPSBuZXdfcHJvcF9vYmooc2l6ZW9mKHByb3BfYnQpICsgbmFtZWxlbiArIDEsICZvZmZfdG1wKTsKLSAgICBpZiAoYnQpIHsKLSAgICAgICAgbWVtY3B5KGJ0LT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKLSAgICAgICAgYnQtPm5hbWVbbmFtZWxlbl0gPSAnXDAnOwotICAgICAgICBidC0+bmFtZWxlbiA9IG5hbWVsZW47Ci0gICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKLSAgICAgICAgKm9mZiA9IG9mZl90bXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ0OwotfQotCi1zdGF0aWMgcHJvcF9pbmZvICpuZXdfcHJvcF9pbmZvKGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQ4X3QgbmFtZWxlbiwKLSAgICAgICAgY29uc3QgY2hhciAqdmFsdWUsIHVpbnQ4X3QgdmFsdWVsZW4sIHByb3Bfb2ZmX3QgKm9mZikKLXsKLSAgICBwcm9wX29mZl90IG9mZl90bXA7Ci0gICAgcHJvcF9pbmZvICppbmZvID0gbmV3X3Byb3Bfb2JqKHNpemVvZihwcm9wX2luZm8pICsgbmFtZWxlbiArIDEsICZvZmZfdG1wKTsKLSAgICBpZiAoaW5mbykgewotICAgICAgICBtZW1jcHkoaW5mby0+bmFtZSwgbmFtZSwgbmFtZWxlbik7Ci0gICAgICAgIGluZm8tPm5hbWVbbmFtZWxlbl0gPSAnXDAnOwotICAgICAgICBpbmZvLT5zZXJpYWwgPSAodmFsdWVsZW4gPDwgMjQpOwotICAgICAgICBtZW1jcHkoaW5mby0+dmFsdWUsIHZhbHVlLCB2YWx1ZWxlbik7Ci0gICAgICAgIGluZm8tPnZhbHVlW3ZhbHVlbGVuXSA9ICdcMCc7Ci0gICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKLSAgICAgICAgKm9mZiA9IG9mZl90bXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZm87Ci19Ci0KLXN0YXRpYyB2b2lkICp0b19wcm9wX29iaihwcm9wX29mZl90IG9mZikKLXsKLSAgICBpZiAob2ZmID4gcGFfZGF0YV9zaXplKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIV9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXykKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fLT5kYXRhICsgb2ZmOwotfQotCi1zdGF0aWMgcHJvcF9idCAqcm9vdF9ub2RlKCkKLXsKLSAgICByZXR1cm4gdG9fcHJvcF9vYmooMCk7Ci19Ci0KLXN0YXRpYyBpbnQgY21wX3Byb3BfbmFtZShjb25zdCBjaGFyICpvbmUsIHVpbnQ4X3Qgb25lX2xlbiwgY29uc3QgY2hhciAqdHdvLAotICAgICAgICB1aW50OF90IHR3b19sZW4pCi17Ci0gICAgaWYgKG9uZV9sZW4gPCB0d29fbGVuKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgZWxzZSBpZiAob25lX2xlbiA+IHR3b19sZW4pCi0gICAgICAgIHJldHVybiAxOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHN0cm5jbXAob25lLCB0d28sIG9uZV9sZW4pOwotfQotCi1zdGF0aWMgcHJvcF9idCAqZmluZF9wcm9wX2J0KHByb3BfYnQgKmJ0LCBjb25zdCBjaGFyICpuYW1lLCB1aW50OF90IG5hbWVsZW4sCi0gICAgICAgIGJvb2wgYWxsb2NfaWZfbmVlZGVkKQotewotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGludCByZXQ7Ci0gICAgICAgIGlmICghYnQpCi0gICAgICAgICAgICByZXR1cm4gYnQ7Ci0gICAgICAgIHJldCA9IGNtcF9wcm9wX25hbWUobmFtZSwgbmFtZWxlbiwgYnQtPm5hbWUsIGJ0LT5uYW1lbGVuKTsKLQotICAgICAgICBpZiAocmV0ID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBidDsKLSAgICAgICAgfSBlbHNlIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICBpZiAoYnQtPmxlZnQpIHsKLSAgICAgICAgICAgICAgICBidCA9IHRvX3Byb3Bfb2JqKGJ0LT5sZWZ0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhbGxvY19pZl9uZWVkZWQpCi0gICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAgICAgICAgICAgICBidCA9IG5ld19wcm9wX2J0KG5hbWUsIG5hbWVsZW4sICZidC0+bGVmdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYnQtPnJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgYnQgPSB0b19wcm9wX29iaihidC0+cmlnaHQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIWFsbG9jX2lmX25lZWRlZCkKLSAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICAgICAgICAgIGJ0ID0gbmV3X3Byb3BfYnQobmFtZSwgbmFtZWxlbiwgJmJ0LT5yaWdodCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBjb25zdCBwcm9wX2luZm8gKmZpbmRfcHJvcGVydHkocHJvcF9idCAqdHJpZSwgY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgdWludDhfdCBuYW1lbGVuLCBjb25zdCBjaGFyICp2YWx1ZSwgdWludDhfdCB2YWx1ZWxlbiwKLSAgICAgICAgYm9vbCBhbGxvY19pZl9uZWVkZWQpCi17Ci0gICAgY29uc3QgY2hhciAqcmVtYWluaW5nX25hbWUgPSBuYW1lOwotCi0gICAgaWYgKCF0cmllKSByZXR1cm4gTlVMTDsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGNoYXIgKnNlcCA9IHN0cmNocihyZW1haW5pbmdfbmFtZSwgJy4nKTsKLSAgICAgICAgYm9vbCB3YW50X3N1YnRyZWUgPSAoc2VwICE9IE5VTEwpOwotICAgICAgICB1aW50OF90IHN1YnN0cl9zaXplOwotCi0gICAgICAgIHByb3BfYnQgKnJvb3Q7Ci0KLSAgICAgICAgaWYgKHdhbnRfc3VidHJlZSkgewotICAgICAgICAgICAgc3Vic3RyX3NpemUgPSBzZXAgLSByZW1haW5pbmdfbmFtZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN1YnN0cl9zaXplID0gc3RybGVuKHJlbWFpbmluZ19uYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghc3Vic3RyX3NpemUpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICBpZiAodHJpZS0+Y2hpbGRyZW4pIHsKLSAgICAgICAgICAgIHJvb3QgPSB0b19wcm9wX29iaih0cmllLT5jaGlsZHJlbik7Ci0gICAgICAgIH0gZWxzZSBpZiAoYWxsb2NfaWZfbmVlZGVkKSB7Ci0gICAgICAgICAgICByb290ID0gbmV3X3Byb3BfYnQocmVtYWluaW5nX25hbWUsIHN1YnN0cl9zaXplLCAmdHJpZS0+Y2hpbGRyZW4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcm9vdCA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXJvb3QpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICB0cmllID0gZmluZF9wcm9wX2J0KHJvb3QsIHJlbWFpbmluZ19uYW1lLCBzdWJzdHJfc2l6ZSwgYWxsb2NfaWZfbmVlZGVkKTsKLSAgICAgICAgaWYgKCF0cmllKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAgICAgaWYgKCF3YW50X3N1YnRyZWUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICByZW1haW5pbmdfbmFtZSA9IHNlcCArIDE7Ci0gICAgfQotCi0gICAgaWYgKHRyaWUtPnByb3ApIHsKLSAgICAgICAgcmV0dXJuIHRvX3Byb3Bfb2JqKHRyaWUtPnByb3ApOwotICAgIH0gZWxzZSBpZiAoYWxsb2NfaWZfbmVlZGVkKSB7Ci0gICAgICAgIHJldHVybiBuZXdfcHJvcF9pbmZvKG5hbWUsIG5hbWVsZW4sIHZhbHVlLCB2YWx1ZWxlbiwgJnRyaWUtPnByb3ApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotY29uc3QgcHJvcF9pbmZvICpfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgaWYgKF9fcHJlZGljdF9mYWxzZShjb21wYXRfbW9kZSkpIHsKLSAgICAgICAgcmV0dXJuIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfY29tcGF0KG5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gZmluZF9wcm9wZXJ0eShyb290X25vZGUoKSwgbmFtZSwgc3RybGVuKG5hbWUpLCBOVUxMLCAwLCBmYWxzZSk7Ci19Ci0KLWludCBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKGNvbnN0IHByb3BfaW5mbyAqcGksIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQotewotICAgIHVuc2lnbmVkIHNlcmlhbCwgbGVuOwotCi0gICAgaWYgKF9fcHJlZGljdF9mYWxzZShjb21wYXRfbW9kZSkpIHsKLSAgICAgICAgcmV0dXJuIF9fc3lzdGVtX3Byb3BlcnR5X3JlYWRfY29tcGF0KHBpLCBuYW1lLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgZm9yKDs7KSB7Ci0gICAgICAgIHNlcmlhbCA9IHBpLT5zZXJpYWw7Ci0gICAgICAgIHdoaWxlKFNFUklBTF9ESVJUWShzZXJpYWwpKSB7Ci0gICAgICAgICAgICBfX2Z1dGV4X3dhaXQoKHZvbGF0aWxlIHZvaWQgKikmcGktPnNlcmlhbCwgc2VyaWFsLCBOVUxMKTsKLSAgICAgICAgICAgIHNlcmlhbCA9IHBpLT5zZXJpYWw7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuID0gU0VSSUFMX1ZBTFVFX0xFTihzZXJpYWwpOwotICAgICAgICBtZW1jcHkodmFsdWUsIHBpLT52YWx1ZSwgbGVuICsgMSk7Ci0gICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKLSAgICAgICAgaWYoc2VyaWFsID09IHBpLT5zZXJpYWwpIHsKLSAgICAgICAgICAgIGlmKG5hbWUgIT0gMCkgewotICAgICAgICAgICAgICAgIHN0cmNweShuYW1lLCBwaS0+bmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbGVuOwotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQgX19zeXN0ZW1fcHJvcGVydHlfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQotewotICAgIGNvbnN0IHByb3BfaW5mbyAqcGkgPSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKG5hbWUpOwotCi0gICAgaWYocGkgIT0gMCkgewotICAgICAgICByZXR1cm4gX19zeXN0ZW1fcHJvcGVydHlfcmVhZChwaSwgMCwgdmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhbHVlWzBdID0gMDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi0KLXN0YXRpYyBpbnQgc2VuZF9wcm9wX21zZyhwcm9wX21zZyAqbXNnKQotewotICAgIHN0cnVjdCBwb2xsZmQgcG9sbGZkc1sxXTsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKLSAgICBzb2NrbGVuX3QgYWxlbjsKLSAgICBzaXplX3QgbmFtZWxlbjsKLSAgICBpbnQgczsKLSAgICBpbnQgcjsKLSAgICBpbnQgcmVzdWx0ID0gLTE7Ci0KLSAgICBzID0gc29ja2V0KEFGX0xPQ0FMLCBTT0NLX1NUUkVBTSwgMCk7Ci0gICAgaWYocyA8IDApIHsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7Ci0gICAgbmFtZWxlbiA9IHN0cmxlbihwcm9wZXJ0eV9zZXJ2aWNlX3NvY2tldCk7Ci0gICAgc3RybGNweShhZGRyLnN1bl9wYXRoLCBwcm9wZXJ0eV9zZXJ2aWNlX3NvY2tldCwgc2l6ZW9mIGFkZHIuc3VuX3BhdGgpOwotICAgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX0xPQ0FMOwotICAgIGFsZW4gPSBuYW1lbGVuICsgb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aCkgKyAxOwotCi0gICAgaWYoVEVNUF9GQUlMVVJFX1JFVFJZKGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgYWxlbikpIDwgMCkgewotICAgICAgICBjbG9zZShzKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICByID0gVEVNUF9GQUlMVVJFX1JFVFJZKHNlbmQocywgbXNnLCBzaXplb2YocHJvcF9tc2cpLCAwKSk7Ci0KLSAgICBpZihyID09IHNpemVvZihwcm9wX21zZykpIHsKLSAgICAgICAgLy8gV2Ugc3VjY2Vzc2Z1bGx5IHdyb3RlIHRvIHRoZSBwcm9wZXJ0eSBzZXJ2ZXIgYnV0IG5vdyB3ZQotICAgICAgICAvLyB3YWl0IGZvciB0aGUgcHJvcGVydHkgc2VydmVyIHRvIGZpbmlzaCBpdHMgd29yay4gIEl0Ci0gICAgICAgIC8vIGFja25vd2xlZGdlcyBpdHMgY29tcGxldGlvbiBieSBjbG9zaW5nIHRoZSBzb2NrZXQgc28gd2UKLSAgICAgICAgLy8gcG9sbCBoZXJlIChvbiBub3RoaW5nKSwgd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0byBjbG9zZS4KLSAgICAgICAgLy8gSWYgeW91ICdhZGIgc2hlbGwgc2V0cHJvcCBmb28gYmFyJyB5b3UnbGwgc2VlIHRoZSBQT0xMSFVQCi0gICAgICAgIC8vIG9uY2UgdGhlIHNvY2tldCBjbG9zZXMuICBPdXQgb2YgcGFyYW5vaWEgd2UgY2FwIG91ciBwb2xsCi0gICAgICAgIC8vIGF0IDI1MCBtcy4KLSAgICAgICAgcG9sbGZkc1swXS5mZCA9IHM7Ci0gICAgICAgIHBvbGxmZHNbMF0uZXZlbnRzID0gMDsKLSAgICAgICAgciA9IFRFTVBfRkFJTFVSRV9SRVRSWShwb2xsKHBvbGxmZHMsIDEsIDI1MCAvKiBtcyAqLykpOwotICAgICAgICBpZiAociA9PSAxICYmIChwb2xsZmRzWzBdLnJldmVudHMgJiBQT0xMSFVQKSAhPSAwKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSWdub3JlIHRoZSB0aW1lb3V0IGFuZCB0cmVhdCBpdCBsaWtlIGEgc3VjY2VzcyBhbnl3YXkuCi0gICAgICAgICAgICAvLyBUaGUgaW5pdCBwcm9jZXNzIGlzIHNpbmdsZS10aHJlYWRlZCBhbmQgaXRzIHByb3BlcnR5Ci0gICAgICAgICAgICAvLyBzZXJ2aWNlIGlzIHNvbWV0aW1lcyBzbG93IHRvIHJlc3BvbmQgKHBlcmhhcHMgaXQncyBvZmYKLSAgICAgICAgICAgIC8vIHN0YXJ0aW5nIGEgY2hpbGQgcHJvY2VzcyBvciBzb21ldGhpbmcpIGFuZCB0aHVzIHRoaXMKLSAgICAgICAgICAgIC8vIHRpbWVzIG91dCBhbmQgdGhlIGNhbGxlciB0aGlua3MgaXQgZmFpbGVkLCBldmVuIHRob3VnaAotICAgICAgICAgICAgLy8gaXQncyBzdGlsbCBnZXR0aW5nIGFyb3VuZCB0byBpdC4gIFNvIHdlIGZha2UgaXQgaGVyZSwKLSAgICAgICAgICAgIC8vIG1vc3RseSBmb3IgY3RsLiogcHJvcGVydGllcywgYnV0IHdlIGRvIHRyeSBhbmQgd2FpdCAyNTAKLSAgICAgICAgICAgIC8vIG1zIHNvIGNhbGxlcnMgd2hvIGRvIHJlYWQtYWZ0ZXItd3JpdGUgY2FuIHJlbGlhYmx5IHNlZQotICAgICAgICAgICAgLy8gd2hhdCB0aGV5J3ZlIHdyaXR0ZW4uICBNb3N0IG9mIHRoZSB0aW1lLgotICAgICAgICAgICAgLy8gVE9ETzogZml4IHRoZSBzeXN0ZW0gcHJvcGVydGllcyBkZXNpZ24uCi0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xvc2Uocyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IF9fc3lzdGVtX3Byb3BlcnR5X3NldChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQotewotICAgIGludCBlcnI7Ci0gICAgcHJvcF9tc2cgbXNnOwotCi0gICAgaWYoa2V5ID09IDApIHJldHVybiAtMTsKLSAgICBpZih2YWx1ZSA9PSAwKSB2YWx1ZSA9ICIiOwotICAgIGlmKHN0cmxlbihrZXkpID49IFBST1BfTkFNRV9NQVgpIHJldHVybiAtMTsKLSAgICBpZihzdHJsZW4odmFsdWUpID49IFBST1BfVkFMVUVfTUFYKSByZXR1cm4gLTE7Ci0KLSAgICBtZW1zZXQoJm1zZywgMCwgc2l6ZW9mIG1zZyk7Ci0gICAgbXNnLmNtZCA9IFBST1BfTVNHX1NFVFBST1A7Ci0gICAgc3RybGNweShtc2cubmFtZSwga2V5LCBzaXplb2YgbXNnLm5hbWUpOwotICAgIHN0cmxjcHkobXNnLnZhbHVlLCB2YWx1ZSwgc2l6ZW9mIG1zZy52YWx1ZSk7Ci0KLSAgICBlcnIgPSBzZW5kX3Byb3BfbXNnKCZtc2cpOwotICAgIGlmKGVyciA8IDApIHsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IF9fc3lzdGVtX3Byb3BlcnR5X3dhaXQoY29uc3QgcHJvcF9pbmZvICpwaSkKLXsKLSAgICB1bnNpZ25lZCBuOwotICAgIGlmKHBpID09IDApIHsKLSAgICAgICAgcHJvcF9hcmVhICpwYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKLSAgICAgICAgbiA9IHBhLT5zZXJpYWw7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIF9fZnV0ZXhfd2FpdCgmcGEtPnNlcmlhbCwgbiwgTlVMTCk7Ci0gICAgICAgIH0gd2hpbGUobiA9PSBwYS0+c2VyaWFsKTsKLSAgICB9IGVsc2UgewotICAgICAgICBuID0gcGktPnNlcmlhbDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgX19mdXRleF93YWl0KCh2b2xhdGlsZSB2b2lkICopJnBpLT5zZXJpYWwsIG4sIE5VTEwpOwotICAgICAgICB9IHdoaWxlKG4gPT0gcGktPnNlcmlhbCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1pbnQgX19zeXN0ZW1fcHJvcGVydHlfdXBkYXRlKHByb3BfaW5mbyAqcGksIGNvbnN0IGNoYXIgKnZhbHVlLCB1bnNpZ25lZCBpbnQgbGVuKQotewotICAgIHByb3BfYXJlYSAqcGEgPSBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187Ci0KLSAgICBpZiAobGVuID49IFBST1BfVkFMVUVfTUFYKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBwaS0+c2VyaWFsID0gcGktPnNlcmlhbCB8IDE7Ci0gICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgIG1lbWNweShwaS0+dmFsdWUsIHZhbHVlLCBsZW4gKyAxKTsKLSAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7Ci0gICAgcGktPnNlcmlhbCA9IChsZW4gPDwgMjQpIHwgKChwaS0+c2VyaWFsICsgMSkgJiAweGZmZmZmZik7Ci0gICAgX19mdXRleF93YWtlKCZwaS0+c2VyaWFsLCBJTlQzMl9NQVgpOwotCi0gICAgcGEtPnNlcmlhbCsrOwotICAgIF9fZnV0ZXhfd2FrZSgmcGEtPnNlcmlhbCwgSU5UMzJfTUFYKTsKLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgX19zeXN0ZW1fcHJvcGVydHlfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lbGVuLAotICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUsIHVuc2lnbmVkIGludCB2YWx1ZWxlbikKLXsKLSAgICBwcm9wX2FyZWEgKnBhID0gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOwotICAgIGNvbnN0IHByb3BfaW5mbyAqcGk7Ci0KLSAgICBpZiAobmFtZWxlbiA+PSBQUk9QX05BTUVfTUFYKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKHZhbHVlbGVuID49IFBST1BfVkFMVUVfTUFYKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKG5hbWVsZW4gPCAxKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBwaSA9IGZpbmRfcHJvcGVydHkocm9vdF9ub2RlKCksIG5hbWUsIG5hbWVsZW4sIHZhbHVlLCB2YWx1ZWxlbiwgdHJ1ZSk7Ci0gICAgaWYgKCFwaSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgcGEtPnNlcmlhbCsrOwotICAgIF9fZnV0ZXhfd2FrZSgmcGEtPnNlcmlhbCwgSU5UMzJfTUFYKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50IF9fc3lzdGVtX3Byb3BlcnR5X3NlcmlhbChjb25zdCBwcm9wX2luZm8gKnBpKQotewotICAgIHJldHVybiBwaS0+c2VyaWFsOwotfQotCi11bnNpZ25lZCBpbnQgX19zeXN0ZW1fcHJvcGVydHlfd2FpdF9hbnkodW5zaWduZWQgaW50IHNlcmlhbCkKLXsKLSAgICBwcm9wX2FyZWEgKnBhID0gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOwotCi0gICAgZG8gewotICAgICAgICBfX2Z1dGV4X3dhaXQoJnBhLT5zZXJpYWwsIHNlcmlhbCwgTlVMTCk7Ci0gICAgfSB3aGlsZShwYS0+c2VyaWFsID09IHNlcmlhbCk7Ci0KLSAgICByZXR1cm4gcGEtPnNlcmlhbDsKLX0KLQotc3RydWN0IGZpbmRfbnRoX2Nvb2tpZSB7Ci0gICAgdW5zaWduZWQgY291bnQ7Ci0gICAgdW5zaWduZWQgbjsKLSAgICBjb25zdCBwcm9wX2luZm8gKnBpOwotfTsKLQotc3RhdGljIHZvaWQgZmluZF9udGhfZm4oY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCAqcHRyKQotewotICAgIHN0cnVjdCBmaW5kX250aF9jb29raWUgKmNvb2tpZSA9IHB0cjsKLQotICAgIGlmIChjb29raWUtPm4gPT0gY29va2llLT5jb3VudCkKLSAgICAgICAgY29va2llLT5waSA9IHBpOwotCi0gICAgY29va2llLT5jb3VudCsrOwotfQotCi1jb25zdCBwcm9wX2luZm8gKl9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfbnRoKHVuc2lnbmVkIG4pCi17Ci0gICAgc3RydWN0IGZpbmRfbnRoX2Nvb2tpZSBjb29raWU7Ci0gICAgaW50IGVycjsKLQotICAgIG1lbXNldCgmY29va2llLCAwLCBzaXplb2YoY29va2llKSk7Ci0gICAgY29va2llLm4gPSBuOwotCi0gICAgZXJyID0gX19zeXN0ZW1fcHJvcGVydHlfZm9yZWFjaChmaW5kX250aF9mbiwgJmNvb2tpZSk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcmV0dXJuIGNvb2tpZS5waTsKLX0KLQotc3RhdGljIGludCBmb3JlYWNoX3Byb3BlcnR5KHByb3Bfb2ZmX3Qgb2ZmLAotICAgICAgICB2b2lkICgqcHJvcGZuKShjb25zdCBwcm9wX2luZm8gKnBpLCB2b2lkICpjb29raWUpLCB2b2lkICpjb29raWUpCi17Ci0gICAgcHJvcF9idCAqdHJpZSA9IHRvX3Byb3Bfb2JqKG9mZik7Ci0gICAgaWYgKCF0cmllKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAodHJpZS0+bGVmdCkgewotICAgICAgICBpbnQgZXJyID0gZm9yZWFjaF9wcm9wZXJ0eSh0cmllLT5sZWZ0LCBwcm9wZm4sIGNvb2tpZSk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAodHJpZS0+cHJvcCkgewotICAgICAgICBwcm9wX2luZm8gKmluZm8gPSB0b19wcm9wX29iaih0cmllLT5wcm9wKTsKLSAgICAgICAgaWYgKCFpbmZvKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBwcm9wZm4oaW5mbywgY29va2llKTsKLSAgICB9Ci0gICAgaWYgKHRyaWUtPmNoaWxkcmVuKSB7Ci0gICAgICAgIGludCBlcnIgPSBmb3JlYWNoX3Byb3BlcnR5KHRyaWUtPmNoaWxkcmVuLCBwcm9wZm4sIGNvb2tpZSk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAodHJpZS0+cmlnaHQpIHsKLSAgICAgICAgaW50IGVyciA9IGZvcmVhY2hfcHJvcGVydHkodHJpZS0+cmlnaHQsIHByb3BmbiwgY29va2llKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoKHZvaWQgKCpwcm9wZm4pKGNvbnN0IHByb3BfaW5mbyAqcGksIHZvaWQgKmNvb2tpZSksCi0gICAgICAgIHZvaWQgKmNvb2tpZSkKLXsKLSAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKGNvbXBhdF9tb2RlKSkgewotICAgICAgICByZXR1cm4gX19zeXN0ZW1fcHJvcGVydHlfZm9yZWFjaF9jb21wYXQocHJvcGZuLCBjb29raWUpOwotCX0KLSAgICByZXR1cm4gZm9yZWFjaF9wcm9wZXJ0eSgwLCBwcm9wZm4sIGNvb2tpZSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jcHAgYi9saWJjL2Jpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2NGMzOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzLmNwcApAQCAtMCwwICsxLDczNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPG5ldz4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cG9sbC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgX1JFQUxMWV9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSF8KKyNpbmNsdWRlIDxzeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19hdG9taWNfaW5saW5lLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfZnV0ZXguaCIKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgcHJvcGVydHlfc2VydmljZV9zb2NrZXRbXSA9ICIvZGV2L3NvY2tldC8iIFBST1BfU0VSVklDRV9OQU1FOworCisKKy8qCisgKiBQcm9wZXJ0aWVzIGFyZSBzdG9yZWQgaW4gYSBoeWJyaWQgdHJpZS9iaW5hcnkgdHJlZSBzdHJ1Y3R1cmUuCisgKiBFYWNoIHByb3BlcnR5J3MgbmFtZSBpcyBkZWxpbWl0ZWQgYXQgJy4nIGNoYXJhY3RlcnMsIGFuZCB0aGUgdG9rZW5zIGFyZSBwdXQKKyAqIGludG8gYSB0cmllIHN0cnVjdHVyZS4gIFNpYmxpbmdzIGF0IGVhY2ggbGV2ZWwgb2YgdGhlIHRyaWUgYXJlIHN0b3JlZCBpbiBhCisgKiBiaW5hcnkgdHJlZS4gIEZvciBpbnN0YW5jZSwgInJvLnNlY3VyZSI9IjEiIGNvdWxkIGJlIHN0b3JlZCBhcyBmb2xsb3dzOgorICoKKyAqICstLS0tLSsgICBjaGlsZHJlbiAgICArLS0tLSsgICBjaGlsZHJlbiAgICArLS0tLS0tLS0rCisgKiB8ICAgICB8LS0tLS0tLS0tLS0tLS0+fCBybyB8LS0tLS0tLS0tLS0tLS0+fCBzZWN1cmUgfAorICogKy0tLS0tKyAgICAgICAgICAgICAgICstLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAvICAgIFwgICAgICAgICAgICAgICAgLyAgIHwKKyAqICAgICAgICAgICAgICAgICBsZWZ0IC8gICAgICBcIHJpZ2h0ICAgbGVmdCAvICAgIHwgIHByb3AgICArPT09PT09PT09PT0rCisgKiAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgIHYgICAgICAgICAgICB2ICAgICArLS0tLS0tLS0+fCByby5zZWN1cmUgfAorICogICAgICAgICAgICAgICAgICArLS0tLS0rICAgKy0tLS0tKyAgICAgKy0tLS0tKyAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgfCBuZXQgfCAgIHwgc3lzIHwgICAgIHwgY29tIHwgICAgICAgICAgICB8ICAgICAxICAgICB8CisgKiAgICAgICAgICAgICAgICAgICstLS0tLSsgICArLS0tLS0rICAgICArLS0tLS0rICAgICAgICAgICAgKz09PT09PT09PT09KworICovCisKKy8vIFJlcHJlc2VudHMgYSBub2RlIGluIHRoZSB0cmllLgorc3RydWN0IHByb3BfYnQgeworICAgIHVpbnQ4X3QgbmFtZWxlbjsKKyAgICB1aW50OF90IHJlc2VydmVkWzNdOworCisgICAgdm9sYXRpbGUgdWludDMyX3QgcHJvcDsKKworICAgIHZvbGF0aWxlIHVpbnQzMl90IGxlZnQ7CisgICAgdm9sYXRpbGUgdWludDMyX3QgcmlnaHQ7CisKKyAgICB2b2xhdGlsZSB1aW50MzJfdCBjaGlsZHJlbjsKKworICAgIGNoYXIgbmFtZVswXTsKKworICAgIHByb3BfYnQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgdWludDhfdCBuYW1lX2xlbmd0aCkgeworICAgICAgICB0aGlzLT5uYW1lbGVuID0gbmFtZV9sZW5ndGg7CisgICAgICAgIG1lbWNweSh0aGlzLT5uYW1lLCBuYW1lLCBuYW1lX2xlbmd0aCk7CisgICAgICAgIHRoaXMtPm5hbWVbbmFtZV9sZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04ocHJvcF9idCk7Cit9OworCitzdHJ1Y3QgcHJvcF9hcmVhIHsKKyAgICB1aW50MzJfdCBieXRlc191c2VkOworICAgIHZvbGF0aWxlIHVpbnQzMl90IHNlcmlhbDsKKyAgICB1aW50MzJfdCBtYWdpYzsKKyAgICB1aW50MzJfdCB2ZXJzaW9uOworICAgIHVpbnQzMl90IHJlc2VydmVkWzI4XTsKKyAgICBjaGFyIGRhdGFbMF07CisKKyAgICBwcm9wX2FyZWEoY29uc3QgdWludDMyX3QgbWFnaWMsIGNvbnN0IHVpbnQzMl90IHZlcnNpb24pIDoKKyAgICAgICAgc2VyaWFsKDApLCBtYWdpYyhtYWdpYyksIHZlcnNpb24odmVyc2lvbikgeworICAgICAgICBtZW1zZXQocmVzZXJ2ZWQsIDAsIHNpemVvZihyZXNlcnZlZCkpOworICAgICAgICAvLyBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSByb290IG5vZGUuCisgICAgICAgIGJ5dGVzX3VzZWQgPSBzaXplb2YocHJvcF9idCk7CisgICAgfQorCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihwcm9wX2FyZWEpOworfTsKKworc3RydWN0IHByb3BfaW5mbyB7CisgICAgdm9sYXRpbGUgdWludDMyX3Qgc2VyaWFsOworICAgIGNoYXIgdmFsdWVbUFJPUF9WQUxVRV9NQVhdOworICAgIGNoYXIgbmFtZVswXTsKKworICAgIHByb3BfaW5mbyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCB1aW50OF90IG5hbWVsZW4sIGNvbnN0IGNoYXIgKnZhbHVlLAorICAgICAgICAgICAgICBjb25zdCB1aW50OF90IHZhbHVlbGVuKSB7CisgICAgICAgIG1lbWNweSh0aGlzLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKKyAgICAgICAgdGhpcy0+bmFtZVtuYW1lbGVuXSA9ICdcMCc7CisgICAgICAgIHRoaXMtPnNlcmlhbCA9ICh2YWx1ZWxlbiA8PCAyNCk7CisgICAgICAgIG1lbWNweSh0aGlzLT52YWx1ZSwgdmFsdWUsIHZhbHVlbGVuKTsKKyAgICAgICAgdGhpcy0+dmFsdWVbdmFsdWVsZW5dID0gJ1wwJzsKKyAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgIH0KK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKHByb3BfaW5mbyk7Cit9OworCitzdHJ1Y3QgZmluZF9udGhfY29va2llIHsKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBjb25zdCB1aW50MzJfdCBuOworICAgIGNvbnN0IHByb3BfaW5mbyAqcGk7CisKKyAgICBmaW5kX250aF9jb29raWUodWludDMyX3QgbikgOiBjb3VudCgwKSwgbihuKSwgcGkoTlVMTCkgeworICAgIH0KK307CisKK3N0YXRpYyBjaGFyIHByb3BlcnR5X2ZpbGVuYW1lW1BBVEhfTUFYXSA9IFBST1BfRklMRU5BTUU7CitzdGF0aWMgYm9vbCBjb21wYXRfbW9kZSA9IGZhbHNlOworc3RhdGljIHNpemVfdCBwYV9kYXRhX3NpemU7CitzdGF0aWMgc2l6ZV90IHBhX3NpemU7CisKKy8vIE5PVEU6IFRoaXMgaXNuJ3Qgc3RhdGljIGJlY2F1c2Ugc3lzdGVtX3Byb3BlcnRpZXNfY29tcGF0LmMKKy8vIHJlcXVpcmVzIGl0LgorcHJvcF9hcmVhICpfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX18gPSBOVUxMOworCitzdGF0aWMgaW50IGdldF9mZF9mcm9tX2Vudih2b2lkKQoreworICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgY29uc2lzdGVzIG9mIHR3byBkZWNpbWFsIGludGVnZXIKKyAgICAvLyB2YWx1ZXMgc2VwYXJhdGVkIGJ5IGEgIiwiLiBUaGUgZmlyc3QgdmFsdWUgaXMgYSBmaWxlIGRlc2NyaXB0b3IKKyAgICAvLyBhbmQgdGhlIHNlY29uZCBpcyB0aGUgc2l6ZSBvZiB0aGUgc3lzdGVtIHByb3BlcnRpZXMgYXJlYS4gVGhlCisgICAgLy8gc2l6ZSBpcyBjdXJyZW50bHkgdW51c2VkLgorICAgIGNoYXIgKmVudiA9IGdldGVudigiQU5EUk9JRF9QUk9QRVJUWV9XT1JLU1BBQ0UiKTsKKworICAgIGlmICghZW52KSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gYXRvaShlbnYpOworfQorCitzdGF0aWMgaW50IG1hcF9wcm9wX2FyZWFfcncoKQoreworICAgIC8qIGRldiBpcyBhIHRtcGZzIHRoYXQgd2UgY2FuIHVzZSB0byBjYXJ2ZSBhIHNoYXJlZCB3b3Jrc3BhY2UKKyAgICAgKiBvdXQgb2YsIHNvIGxldCdzIGRvIHRoYXQuLi4KKyAgICAgKi8KKyAgICBjb25zdCBpbnQgZmQgPSBvcGVuKHByb3BlcnR5X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgT19SRFdSIHwgT19DUkVBVCB8IE9fTk9GT0xMT1cgfCBPX0NMT0VYRUMgfCBPX0VYQ0wsIDA0NDQpOworCisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBpZiAoZXJybm8gPT0gRUFDQ0VTKSB7CisgICAgICAgICAgICAvKiBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgcHJvY2VzcyBoYXMgYWxyZWFkeQorICAgICAgICAgICAgICogbWFwcGVkIHRoZSBwYWdlIGluIGFuZCBzZWdmYXVsdHMgd2hlbiB0cnlpbmcgdG8gd3JpdGUgdG8gaXQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLy8gVE9ETzogSXMgdGhpcyByZWFsbHkgcmVxdWlyZWQgPyBEb2VzIGFuZHJvaWQgcnVuIG9uIGFueSBrZXJuZWxzIHRoYXQKKyAgICAvLyBkb24ndCBzdXBwb3J0IE9fQ0xPRVhFQyA/CisgICAgY29uc3QgaW50IHJldCA9IGZjbnRsKGZkLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoZnRydW5jYXRlKGZkLCBQQV9TSVpFKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcGFfc2l6ZSA9IFBBX1NJWkU7CisgICAgcGFfZGF0YV9zaXplID0gcGFfc2l6ZSAtIHNpemVvZihwcm9wX2FyZWEpOworICAgIGNvbXBhdF9tb2RlID0gZmFsc2U7CisKKyAgICB2b2lkICpjb25zdCBtZW1vcnlfYXJlYSA9IG1tYXAoTlVMTCwgcGFfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOworICAgIGlmIChtZW1vcnlfYXJlYSA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHByb3BfYXJlYSAqcGEgPSBuZXcobWVtb3J5X2FyZWEpIHByb3BfYXJlYShQUk9QX0FSRUFfTUFHSUMsIFBST1BfQVJFQV9WRVJTSU9OKTsKKworICAgIC8qIHBsdWcgaW50byB0aGUgbGliIHByb3BlcnR5IHNlcnZpY2VzICovCisgICAgX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fID0gcGE7CisKKyAgICBjbG9zZShmZCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFwX2ZkX3JvKGNvbnN0IGludCBmZCkgeworICAgIHN0cnVjdCBzdGF0IGZkX3N0YXQ7CisgICAgaWYgKGZzdGF0KGZkLCAmZmRfc3RhdCkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoKGZkX3N0YXQuc3RfdWlkICE9IDApCisgICAgICAgICAgICB8fCAoZmRfc3RhdC5zdF9naWQgIT0gMCkKKyAgICAgICAgICAgIHx8ICgoZmRfc3RhdC5zdF9tb2RlICYgKFNfSVdHUlAgfCBTX0lXT1RIKSkgIT0gMCkKKyAgICAgICAgICAgIHx8IChmZF9zdGF0LnN0X3NpemUgPCBzdGF0aWNfY2FzdDxvZmZfdD4oc2l6ZW9mKHByb3BfYXJlYSkpKSApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHBhX3NpemUgPSBmZF9zdGF0LnN0X3NpemU7CisgICAgcGFfZGF0YV9zaXplID0gcGFfc2l6ZSAtIHNpemVvZihwcm9wX2FyZWEpOworCisgICAgdm9pZCogY29uc3QgbWFwX3Jlc3VsdCA9IG1tYXAoTlVMTCwgcGFfc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBmZCwgMCk7CisgICAgaWYgKG1hcF9yZXN1bHQgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcHJvcF9hcmVhKiBwYSA9IHJlaW50ZXJwcmV0X2Nhc3Q8cHJvcF9hcmVhKj4obWFwX3Jlc3VsdCk7CisgICAgaWYgKChwYS0+bWFnaWMgIT0gUFJPUF9BUkVBX01BR0lDKSB8fCAocGEtPnZlcnNpb24gIT0gUFJPUF9BUkVBX1ZFUlNJT04gJiYKKyAgICAgICAgICAgICAgICBwYS0+dmVyc2lvbiAhPSBQUk9QX0FSRUFfVkVSU0lPTl9DT01QQVQpKSB7CisgICAgICAgIG11bm1hcChwYSwgcGFfc2l6ZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAocGEtPnZlcnNpb24gPT0gUFJPUF9BUkVBX1ZFUlNJT05fQ09NUEFUKSB7CisgICAgICAgIGNvbXBhdF9tb2RlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX18gPSBwYTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXBfcHJvcF9hcmVhKCkKK3sKKyAgICBpbnQgZmQob3Blbihwcm9wZXJ0eV9maWxlbmFtZSwgT19SRE9OTFkgfCBPX05PRk9MTE9XIHwgT19DTE9FWEVDKSk7CisgICAgaWYgKGZkID49IDApIHsKKyAgICAgICAgLyogRm9yIG9sZCBrZXJuZWxzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBPX0NMT0VYRUMgKi8KKyAgICAgICAgY29uc3QgaW50IHJldCA9IGZjbnRsKGZkLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgY2xvc2VfZmQgPSB0cnVlOworICAgIGlmICgoZmQgPCAwKSAmJiAoZXJybm8gPT0gRU5PRU5UKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlmIHRoZSBmaWxlIGRvZXNuJ3QKKyAgICAgICAgICogZXhpc3QsIHdlIHVzZSB0aGUgZW52aXJvbm1lbnQgdG8gZ2V0IHRoZSBmaWxlIGRlc2NyaXB0b3IuCisgICAgICAgICAqIEZvciBzZWN1cml0eSByZWFzb25zLCB3ZSBvbmx5IHVzZSB0aGlzIGJhY2t1cCBpZiB0aGUga2VybmVsCisgICAgICAgICAqIHJldHVybnMgRU5PRU5ULiBXZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgYmFja3VwIGlmIHRoZSBrZXJuZWwKKyAgICAgICAgICogcmV0dXJucyBvdGhlciBlcnJvcnMgc3VjaCBhcyBFTk9NRU0gb3IgRU5GSUxFLCBzaW5jZSBpdAorICAgICAgICAgKiBtaWdodCBiZSBwb3NzaWJsZSBmb3IgYW4gZXh0ZXJuYWwgcHJvZ3JhbSB0byB0cmlnZ2VyIHRoaXMKKyAgICAgICAgICogY29uZGl0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgZmQgPSBnZXRfZmRfZnJvbV9lbnYoKTsKKyAgICAgICAgY2xvc2VfZmQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQgbWFwX3Jlc3VsdCA9IG1hcF9mZF9ybyhmZCk7CisgICAgaWYgKGNsb3NlX2ZkKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWFwX3Jlc3VsdDsKK30KKworc3RhdGljIHZvaWQgKmFsbG9jYXRlX29iaihjb25zdCBzaXplX3Qgc2l6ZSwgdWludDMyX3QgKmNvbnN0IG9mZikKK3sKKyAgICBwcm9wX2FyZWEgKnBhID0gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOworICAgIGNvbnN0IHNpemVfdCBhbGlnbmVkID0gQklPTklDX0FMSUdOKHNpemUsIHNpemVvZih1aW50MzJfdCkpOworICAgIGlmIChwYS0+Ynl0ZXNfdXNlZCArIGFsaWduZWQgPiBwYV9kYXRhX3NpemUpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgKm9mZiA9IHBhLT5ieXRlc191c2VkOworICAgIHBhLT5ieXRlc191c2VkICs9IGFsaWduZWQ7CisgICAgcmV0dXJuIHBhLT5kYXRhICsgKm9mZjsKK30KKworc3RhdGljIHByb3BfYnQgKm5ld19wcm9wX2J0KGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQ4X3QgbmFtZWxlbiwgdWludDMyX3QgKmNvbnN0IG9mZikKK3sKKyAgICB1aW50MzJfdCBuZXdfb2Zmc2V0OworICAgIHZvaWQgKmNvbnN0IG9mZnNldCA9IGFsbG9jYXRlX29iaihzaXplb2YocHJvcF9idCkgKyBuYW1lbGVuICsgMSwgJm5ld19vZmZzZXQpOworICAgIGlmIChvZmZzZXQpIHsKKyAgICAgICAgcHJvcF9idCogYnQgPSBuZXcob2Zmc2V0KSBwcm9wX2J0KG5hbWUsIG5hbWVsZW4pOworICAgICAgICAqb2ZmID0gbmV3X29mZnNldDsKKyAgICAgICAgcmV0dXJuIGJ0OworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgcHJvcF9pbmZvICpuZXdfcHJvcF9pbmZvKGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQ4X3QgbmFtZWxlbiwKKyAgICAgICAgY29uc3QgY2hhciAqdmFsdWUsIHVpbnQ4X3QgdmFsdWVsZW4sIHVpbnQzMl90ICpjb25zdCBvZmYpCit7CisgICAgdWludDMyX3Qgb2ZmX3RtcDsKKyAgICB2b2lkKiBjb25zdCBvZmZzZXQgPSBhbGxvY2F0ZV9vYmooc2l6ZW9mKHByb3BfaW5mbykgKyBuYW1lbGVuICsgMSwgJm9mZl90bXApOworICAgIGlmIChvZmZzZXQpIHsKKyAgICAgICAgcHJvcF9pbmZvKiBpbmZvID0gbmV3KG9mZnNldCkgcHJvcF9pbmZvKG5hbWUsIG5hbWVsZW4sIHZhbHVlLCB2YWx1ZWxlbik7CisgICAgICAgICpvZmYgPSBvZmZfdG1wOworICAgICAgICByZXR1cm4gaW5mbzsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKnRvX3Byb3Bfb2JqKGNvbnN0IHVpbnQzMl90IG9mZikKK3sKKyAgICBpZiAob2ZmID4gcGFfZGF0YV9zaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIV9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gKF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXy0+ZGF0YSArIG9mZik7Cit9CisKK3N0YXRpYyBwcm9wX2J0ICpyb290X25vZGUoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHByb3BfYnQqPih0b19wcm9wX29iaigwKSk7Cit9CisKK3N0YXRpYyBpbnQgY21wX3Byb3BfbmFtZShjb25zdCBjaGFyICpvbmUsIHVpbnQ4X3Qgb25lX2xlbiwgY29uc3QgY2hhciAqdHdvLAorICAgICAgICB1aW50OF90IHR3b19sZW4pCit7CisgICAgaWYgKG9uZV9sZW4gPCB0d29fbGVuKQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAob25lX2xlbiA+IHR3b19sZW4pCisgICAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0cm5jbXAob25lLCB0d28sIG9uZV9sZW4pOworfQorCitzdGF0aWMgcHJvcF9idCAqZmluZF9wcm9wX2J0KHByb3BfYnQgKmNvbnN0IGJ0LCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG5hbWVsZW4sIGJvb2wgYWxsb2NfaWZfbmVlZGVkKQoreworCisgICAgcHJvcF9idCogY3VycmVudCA9IGJ0OworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmICghY3VycmVudCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBpbnQgcmV0ID0gY21wX3Byb3BfbmFtZShuYW1lLCBuYW1lbGVuLCBjdXJyZW50LT5uYW1lLCBjdXJyZW50LT5uYW1lbGVuKTsKKyAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudC0+bGVmdCkgeworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSByZWludGVycHJldF9jYXN0PHByb3BfYnQqPih0b19wcm9wX29iaihjdXJyZW50LT5sZWZ0KSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghYWxsb2NfaWZfbmVlZGVkKSB7CisgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZXJlIGlzbid0IGEgcmFjZSBjb25kaXRpb24gaGVyZS4gImNsaWVudHMiIG5ldmVyCisgICAgICAgICAgICAgICAgLy8gcmVhY2ggdGhpcyBjb2RlLXBhdGggc2luY2UgSXQncyBvbmx5IHRoZSAoc2luZ2xlIHRocmVhZGVkKSBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAvLyB0aGF0IGFsbG9jYXRlcyBuZXcgbm9kZXMuIFRob3VnaCAiYnQtPmxlZnQiIGlzIHZvbGF0aWxlLCBpdCBjYW4ndAorICAgICAgICAgICAgICAgIC8vIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB2YWx1ZSB3YXMgbGFzdCByZWFkLgorICAgICAgICAgICAgICAgIHVpbnQzMl90IG5ld19vZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIHByb3BfYnQqIG5ld19idCA9IG5ld19wcm9wX2J0KG5hbWUsIG5hbWVsZW4sICZuZXdfb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBpZiAobmV3X2J0KSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPmxlZnQgPSBuZXdfb2Zmc2V0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3X2J0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGN1cnJlbnQtPnJpZ2h0KSB7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cHJvcF9idCo+KHRvX3Byb3Bfb2JqKGN1cnJlbnQtPnJpZ2h0KSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghYWxsb2NfaWZfbmVlZGVkKSB7CisgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdWludDMyX3QgbmV3X29mZnNldDsKKyAgICAgICAgICAgICAgICBwcm9wX2J0KiBuZXdfYnQgPSBuZXdfcHJvcF9idChuYW1lLCBuYW1lbGVuLCAmbmV3X29mZnNldCk7CisgICAgICAgICAgICAgICAgaWYgKG5ld19idCkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5yaWdodCA9IG5ld19vZmZzZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBuZXdfYnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBwcm9wX2luZm8gKmZpbmRfcHJvcGVydHkocHJvcF9idCAqY29uc3QgdHJpZSwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgdWludDhfdCBuYW1lbGVuLCBjb25zdCBjaGFyICp2YWx1ZSwgdWludDhfdCB2YWx1ZWxlbiwKKyAgICAgICAgYm9vbCBhbGxvY19pZl9uZWVkZWQpCit7CisgICAgaWYgKCF0cmllKSByZXR1cm4gTlVMTDsKKworICAgIGNvbnN0IGNoYXIgKnJlbWFpbmluZ19uYW1lID0gbmFtZTsKKyAgICBwcm9wX2J0KiBjdXJyZW50ID0gdHJpZTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBjb25zdCBjaGFyICpzZXAgPSBzdHJjaHIocmVtYWluaW5nX25hbWUsICcuJyk7CisgICAgICAgIGNvbnN0IGJvb2wgd2FudF9zdWJ0cmVlID0gKHNlcCAhPSBOVUxMKTsKKyAgICAgICAgY29uc3QgdWludDhfdCBzdWJzdHJfc2l6ZSA9ICh3YW50X3N1YnRyZWUpID8KKyAgICAgICAgICAgIHNlcCAtIHJlbWFpbmluZ19uYW1lIDogc3RybGVuKHJlbWFpbmluZ19uYW1lKTsKKworICAgICAgICBpZiAoIXN1YnN0cl9zaXplKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHByb3BfYnQqIHJvb3QgPSBOVUxMOworICAgICAgICBpZiAoY3VycmVudC0+Y2hpbGRyZW4pIHsKKyAgICAgICAgICAgIHJvb3QgPSByZWludGVycHJldF9jYXN0PHByb3BfYnQqPih0b19wcm9wX29iaihjdXJyZW50LT5jaGlsZHJlbikpOworICAgICAgICB9IGVsc2UgaWYgKGFsbG9jX2lmX25lZWRlZCkgeworICAgICAgICAgICAgdWludDMyX3QgbmV3X2J0X29mZnNldDsKKyAgICAgICAgICAgIHJvb3QgPSBuZXdfcHJvcF9idChyZW1haW5pbmdfbmFtZSwgc3Vic3RyX3NpemUsICZuZXdfYnRfb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChyb290KSB7CisgICAgICAgICAgICAgICAgY3VycmVudC0+Y2hpbGRyZW4gPSBuZXdfYnRfb2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFyb290KSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGN1cnJlbnQgPSBmaW5kX3Byb3BfYnQocm9vdCwgcmVtYWluaW5nX25hbWUsIHN1YnN0cl9zaXplLCBhbGxvY19pZl9uZWVkZWQpOworICAgICAgICBpZiAoIWN1cnJlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF3YW50X3N1YnRyZWUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICByZW1haW5pbmdfbmFtZSA9IHNlcCArIDE7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnQtPnByb3ApIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8cHJvcF9pbmZvKj4odG9fcHJvcF9vYmooY3VycmVudC0+cHJvcCkpOworICAgIH0gZWxzZSBpZiAoYWxsb2NfaWZfbmVlZGVkKSB7CisgICAgICAgIHVpbnQzMl90IG5ld19pbmZvX29mZnNldDsKKyAgICAgICAgcHJvcF9pbmZvKiBuZXdfaW5mbyA9IG5ld19wcm9wX2luZm8obmFtZSwgbmFtZWxlbiwgdmFsdWUsIHZhbHVlbGVuLCAmbmV3X2luZm9fb2Zmc2V0KTsKKyAgICAgICAgaWYgKG5ld19pbmZvKSB7CisgICAgICAgICAgICBjdXJyZW50LT5wcm9wID0gbmV3X2luZm9fb2Zmc2V0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld19pbmZvOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIGludCBzZW5kX3Byb3BfbXNnKGNvbnN0IHByb3BfbXNnICptc2cpCit7CisgICAgY29uc3QgaW50IGZkID0gc29ja2V0KEFGX0xPQ0FMLCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgY29uc3Qgc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4ocHJvcGVydHlfc2VydmljZV9zb2NrZXQpOworCisgICAgc29ja2FkZHJfdW4gYWRkcjsKKyAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgc3RybGNweShhZGRyLnN1bl9wYXRoLCBwcm9wZXJ0eV9zZXJ2aWNlX3NvY2tldCwgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKTsKKyAgICBhZGRyLnN1bl9mYW1pbHkgPSBBRl9MT0NBTDsKKyAgICBzb2NrbGVuX3QgYWxlbiA9IG5hbWVsZW4gKyBvZmZzZXRvZihzb2NrYWRkcl91biwgc3VuX3BhdGgpICsgMTsKKyAgICBpZiAoVEVNUF9GQUlMVVJFX1JFVFJZKGNvbm5lY3QoZmQsIHJlaW50ZXJwcmV0X2Nhc3Q8c29ja2FkZHIqPigmYWRkciksIGFsZW4pKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgY29uc3QgaW50IG51bV9ieXRlcyA9IFRFTVBfRkFJTFVSRV9SRVRSWShzZW5kKGZkLCBtc2csIHNpemVvZihwcm9wX21zZyksIDApKTsKKworICAgIGludCByZXN1bHQgPSAtMTsKKyAgICBpZiAobnVtX2J5dGVzID09IHNpemVvZihwcm9wX21zZykpIHsKKyAgICAgICAgLy8gV2Ugc3VjY2Vzc2Z1bGx5IHdyb3RlIHRvIHRoZSBwcm9wZXJ0eSBzZXJ2ZXIgYnV0IG5vdyB3ZQorICAgICAgICAvLyB3YWl0IGZvciB0aGUgcHJvcGVydHkgc2VydmVyIHRvIGZpbmlzaCBpdHMgd29yay4gIEl0CisgICAgICAgIC8vIGFja25vd2xlZGdlcyBpdHMgY29tcGxldGlvbiBieSBjbG9zaW5nIHRoZSBzb2NrZXQgc28gd2UKKyAgICAgICAgLy8gcG9sbCBoZXJlIChvbiBub3RoaW5nKSwgd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0byBjbG9zZS4KKyAgICAgICAgLy8gSWYgeW91ICdhZGIgc2hlbGwgc2V0cHJvcCBmb28gYmFyJyB5b3UnbGwgc2VlIHRoZSBQT0xMSFVQCisgICAgICAgIC8vIG9uY2UgdGhlIHNvY2tldCBjbG9zZXMuICBPdXQgb2YgcGFyYW5vaWEgd2UgY2FwIG91ciBwb2xsCisgICAgICAgIC8vIGF0IDI1MCBtcy4KKyAgICAgICAgcG9sbGZkIHBvbGxmZHNbMV07CisgICAgICAgIHBvbGxmZHNbMF0uZmQgPSBmZDsKKyAgICAgICAgcG9sbGZkc1swXS5ldmVudHMgPSAwOworICAgICAgICBjb25zdCBpbnQgcG9sbF9yZXN1bHQgPSBURU1QX0ZBSUxVUkVfUkVUUlkocG9sbChwb2xsZmRzLCAxLCAyNTAgLyogbXMgKi8pKTsKKyAgICAgICAgaWYgKHBvbGxfcmVzdWx0ID09IDEgJiYgKHBvbGxmZHNbMF0ucmV2ZW50cyAmIFBPTExIVVApICE9IDApIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIHRpbWVvdXQgYW5kIHRyZWF0IGl0IGxpa2UgYSBzdWNjZXNzIGFueXdheS4KKyAgICAgICAgICAgIC8vIFRoZSBpbml0IHByb2Nlc3MgaXMgc2luZ2xlLXRocmVhZGVkIGFuZCBpdHMgcHJvcGVydHkKKyAgICAgICAgICAgIC8vIHNlcnZpY2UgaXMgc29tZXRpbWVzIHNsb3cgdG8gcmVzcG9uZCAocGVyaGFwcyBpdCdzIG9mZgorICAgICAgICAgICAgLy8gc3RhcnRpbmcgYSBjaGlsZCBwcm9jZXNzIG9yIHNvbWV0aGluZykgYW5kIHRodXMgdGhpcworICAgICAgICAgICAgLy8gdGltZXMgb3V0IGFuZCB0aGUgY2FsbGVyIHRoaW5rcyBpdCBmYWlsZWQsIGV2ZW4gdGhvdWdoCisgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGdldHRpbmcgYXJvdW5kIHRvIGl0LiAgU28gd2UgZmFrZSBpdCBoZXJlLAorICAgICAgICAgICAgLy8gbW9zdGx5IGZvciBjdGwuKiBwcm9wZXJ0aWVzLCBidXQgd2UgZG8gdHJ5IGFuZCB3YWl0IDI1MAorICAgICAgICAgICAgLy8gbXMgc28gY2FsbGVycyB3aG8gZG8gcmVhZC1hZnRlci13cml0ZSBjYW4gcmVsaWFibHkgc2VlCisgICAgICAgICAgICAvLyB3aGF0IHRoZXkndmUgd3JpdHRlbi4gIE1vc3Qgb2YgdGhlIHRpbWUuCisgICAgICAgICAgICAvLyBUT0RPOiBmaXggdGhlIHN5c3RlbSBwcm9wZXJ0aWVzIGRlc2lnbi4KKyAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbG9zZShmZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgZmluZF9udGhfZm4oY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCAqcHRyKQoreworICAgIGZpbmRfbnRoX2Nvb2tpZSAqY29va2llID0gcmVpbnRlcnByZXRfY2FzdDxmaW5kX250aF9jb29raWUqPihwdHIpOworCisgICAgaWYgKGNvb2tpZS0+biA9PSBjb29raWUtPmNvdW50KQorICAgICAgICBjb29raWUtPnBpID0gcGk7CisKKyAgICBjb29raWUtPmNvdW50Kys7Cit9CisKK3N0YXRpYyBpbnQgZm9yZWFjaF9wcm9wZXJ0eShjb25zdCB1aW50MzJfdCBvZmYsCisgICAgICAgIHZvaWQgKCpwcm9wZm4pKGNvbnN0IHByb3BfaW5mbyAqcGksIHZvaWQgKmNvb2tpZSksIHZvaWQgKmNvb2tpZSkKK3sKKyAgICBwcm9wX2J0ICp0cmllID0gcmVpbnRlcnByZXRfY2FzdDxwcm9wX2J0Kj4odG9fcHJvcF9vYmoob2ZmKSk7CisgICAgaWYgKCF0cmllKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAodHJpZS0+bGVmdCkgeworICAgICAgICBjb25zdCBpbnQgZXJyID0gZm9yZWFjaF9wcm9wZXJ0eSh0cmllLT5sZWZ0LCBwcm9wZm4sIGNvb2tpZSk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAodHJpZS0+cHJvcCkgeworICAgICAgICBwcm9wX2luZm8gKmluZm8gPSByZWludGVycHJldF9jYXN0PHByb3BfaW5mbyo+KHRvX3Byb3Bfb2JqKHRyaWUtPnByb3ApKTsKKyAgICAgICAgaWYgKCFpbmZvKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBwcm9wZm4oaW5mbywgY29va2llKTsKKyAgICB9CisgICAgaWYgKHRyaWUtPmNoaWxkcmVuKSB7CisgICAgICAgIGNvbnN0IGludCBlcnIgPSBmb3JlYWNoX3Byb3BlcnR5KHRyaWUtPmNoaWxkcmVuLCBwcm9wZm4sIGNvb2tpZSk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAodHJpZS0+cmlnaHQpIHsKKyAgICAgICAgY29uc3QgaW50IGVyciA9IGZvcmVhY2hfcHJvcGVydHkodHJpZS0+cmlnaHQsIHByb3BmbiwgY29va2llKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0aWVzX2luaXQoKQoreworICAgIHJldHVybiBtYXBfcHJvcF9hcmVhKCk7Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9zZXRfZmlsZW5hbWUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihmaWxlbmFtZSk7CisgICAgaWYgKGxlbiA+PSBzaXplb2YocHJvcGVydHlfZmlsZW5hbWUpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzdHJjcHkocHJvcGVydHlfZmlsZW5hbWUsIGZpbGVuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfaW5pdCgpCit7CisgICAgcmV0dXJuIG1hcF9wcm9wX2FyZWFfcncoKTsKK30KKworY29uc3QgcHJvcF9pbmZvICpfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShjb21wYXRfbW9kZSkpIHsKKyAgICAgICAgcmV0dXJuIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfY29tcGF0KG5hbWUpOworICAgIH0KKyAgICByZXR1cm4gZmluZF9wcm9wZXJ0eShyb290X25vZGUoKSwgbmFtZSwgc3RybGVuKG5hbWUpLCBOVUxMLCAwLCBmYWxzZSk7Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKGNvbnN0IHByb3BfaW5mbyAqcGksIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworICAgIGlmIChfX3ByZWRpY3RfZmFsc2UoY29tcGF0X21vZGUpKSB7CisgICAgICAgIHJldHVybiBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkX2NvbXBhdChwaSwgbmFtZSwgdmFsdWUpOworICAgIH0KKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHVpbnQzMl90IHNlcmlhbCA9IF9fc3lzdGVtX3Byb3BlcnR5X3NlcmlhbChwaSk7CisgICAgICAgIHNpemVfdCBsZW4gPSBTRVJJQUxfVkFMVUVfTEVOKHNlcmlhbCk7CisgICAgICAgIG1lbWNweSh2YWx1ZSwgcGktPnZhbHVlLCBsZW4gKyAxKTsKKyAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICAgICBpZiAoc2VyaWFsID09IHBpLT5zZXJpYWwpIHsKKyAgICAgICAgICAgIGlmIChuYW1lICE9IDApIHsKKyAgICAgICAgICAgICAgICBzdHJjcHkobmFtZSwgcGktPm5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGxlbjsKKyAgICAgICAgfQorICAgIH0KK30KKworaW50IF9fc3lzdGVtX3Byb3BlcnR5X2dldChjb25zdCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK3sKKyAgICBjb25zdCBwcm9wX2luZm8gKnBpID0gX19zeXN0ZW1fcHJvcGVydHlfZmluZChuYW1lKTsKKworICAgIGlmIChwaSAhPSAwKSB7CisgICAgICAgIHJldHVybiBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKHBpLCAwLCB2YWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVbMF0gPSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9zZXQoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgICBpZiAoa2V5ID09IDApIHJldHVybiAtMTsKKyAgICBpZiAodmFsdWUgPT0gMCkgdmFsdWUgPSAiIjsKKyAgICBpZiAoc3RybGVuKGtleSkgPj0gUFJPUF9OQU1FX01BWCkgcmV0dXJuIC0xOworICAgIGlmIChzdHJsZW4odmFsdWUpID49IFBST1BfVkFMVUVfTUFYKSByZXR1cm4gLTE7CisKKyAgICBwcm9wX21zZyBtc2c7CisgICAgbWVtc2V0KCZtc2csIDAsIHNpemVvZiBtc2cpOworICAgIG1zZy5jbWQgPSBQUk9QX01TR19TRVRQUk9QOworICAgIHN0cmxjcHkobXNnLm5hbWUsIGtleSwgc2l6ZW9mIG1zZy5uYW1lKTsKKyAgICBzdHJsY3B5KG1zZy52YWx1ZSwgdmFsdWUsIHNpemVvZiBtc2cudmFsdWUpOworCisgICAgY29uc3QgaW50IGVyciA9IHNlbmRfcHJvcF9tc2coJm1zZyk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IF9fc3lzdGVtX3Byb3BlcnR5X3VwZGF0ZShwcm9wX2luZm8gKnBpLCBjb25zdCBjaGFyICp2YWx1ZSwgdW5zaWduZWQgaW50IGxlbikKK3sKKyAgICBwcm9wX2FyZWEgKnBhID0gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOworCisgICAgaWYgKGxlbiA+PSBQUk9QX1ZBTFVFX01BWCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcGktPnNlcmlhbCA9IHBpLT5zZXJpYWwgfCAxOworICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKKyAgICBtZW1jcHkocGktPnZhbHVlLCB2YWx1ZSwgbGVuICsgMSk7CisgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgIHBpLT5zZXJpYWwgPSAobGVuIDw8IDI0KSB8ICgocGktPnNlcmlhbCArIDEpICYgMHhmZmZmZmYpOworICAgIF9fZnV0ZXhfd2FrZSgmcGktPnNlcmlhbCwgSU5UMzJfTUFYKTsKKworICAgIHBhLT5zZXJpYWwrKzsKKyAgICBfX2Z1dGV4X3dha2UoJnBhLT5zZXJpYWwsIElOVDMyX01BWCk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IF9fc3lzdGVtX3Byb3BlcnR5X2FkZChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbmFtZWxlbiwKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsdWVsZW4pCit7CisgICAgcHJvcF9hcmVhICpwYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKKyAgICBjb25zdCBwcm9wX2luZm8gKnBpOworCisgICAgaWYgKG5hbWVsZW4gPj0gUFJPUF9OQU1FX01BWCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmICh2YWx1ZWxlbiA+PSBQUk9QX1ZBTFVFX01BWCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChuYW1lbGVuIDwgMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcGkgPSBmaW5kX3Byb3BlcnR5KHJvb3Rfbm9kZSgpLCBuYW1lLCBuYW1lbGVuLCB2YWx1ZSwgdmFsdWVsZW4sIHRydWUpOworICAgIGlmICghcGkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHBhLT5zZXJpYWwrKzsKKyAgICBfX2Z1dGV4X3dha2UoJnBhLT5zZXJpYWwsIElOVDMyX01BWCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBfX3N5c3RlbV9wcm9wZXJ0eV9zZXJpYWwoY29uc3QgcHJvcF9pbmZvICpwaSkKK3sKKyAgICB1aW50MzJfdCBzZXJpYWwgPSBwaS0+c2VyaWFsOworICAgIHdoaWxlIChTRVJJQUxfRElSVFkoc2VyaWFsKSkgeworICAgICAgICBfX2Z1dGV4X3dhaXQoY29uc3RfY2FzdDx2b2xhdGlsZSB1aW50MzJfdCo+KCZwaS0+c2VyaWFsKSwgc2VyaWFsLCBOVUxMKTsKKyAgICAgICAgc2VyaWFsID0gcGktPnNlcmlhbDsKKyAgICB9CisgICAgcmV0dXJuIHNlcmlhbDsKK30KKwordW5zaWduZWQgaW50IF9fc3lzdGVtX3Byb3BlcnR5X3dhaXRfYW55KHVuc2lnbmVkIGludCBzZXJpYWwpCit7CisgICAgcHJvcF9hcmVhICpwYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKKworICAgIGRvIHsKKyAgICAgICAgX19mdXRleF93YWl0KCZwYS0+c2VyaWFsLCBzZXJpYWwsIE5VTEwpOworICAgIH0gd2hpbGUgKHBhLT5zZXJpYWwgPT0gc2VyaWFsKTsKKworICAgIHJldHVybiBwYS0+c2VyaWFsOworfQorCitjb25zdCBwcm9wX2luZm8gKl9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfbnRoKHVuc2lnbmVkIG4pCit7CisgICAgZmluZF9udGhfY29va2llIGNvb2tpZShuKTsKKworICAgIGNvbnN0IGludCBlcnIgPSBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoKGZpbmRfbnRoX2ZuLCAmY29va2llKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gY29va2llLnBpOworfQorCitpbnQgX19zeXN0ZW1fcHJvcGVydHlfZm9yZWFjaCh2b2lkICgqcHJvcGZuKShjb25zdCBwcm9wX2luZm8gKnBpLCB2b2lkICpjb29raWUpLAorICAgICAgICB2b2lkICpjb29raWUpCit7CisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShjb21wYXRfbW9kZSkpIHsKKyAgICAgICAgcmV0dXJuIF9fc3lzdGVtX3Byb3BlcnR5X2ZvcmVhY2hfY29tcGF0KHByb3BmbiwgY29va2llKTsKKyAgICB9CisKKyAgICByZXR1cm4gZm9yZWFjaF9wcm9wZXJ0eSgwLCBwcm9wZm4sIGNvb2tpZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zeXN0ZW1fcHJvcGVydGllc19jb21wYXQuYyBiL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzX2NvbXBhdC5jCmluZGV4IGI0YzI0OTQuLjZhZWFhMGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzX2NvbXBhdC5jCisrKyBiL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzX2NvbXBhdC5jCkBAIC0zNSw3ICszNSw4IEBACiAgKi8KIAogI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19mdXRleC5oIgogCiAjZGVmaW5lIF9SRUFMTFlfSU5DTFVERV9TWVNfX1NZU1RFTV9QUk9QRVJUSUVTX0hfCiAjaW5jbHVkZSA8c3lzL19zeXN0ZW1fcHJvcGVydGllcy5oPgpAQCAtNjcsNyArNjgsNyBAQAogCiBleHRlcm4gcHJvcF9hcmVhICpfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187CiAKLWNvbnN0IHByb3BfaW5mbyAqX19zeXN0ZW1fcHJvcGVydHlfZmluZF9jb21wYXQoY29uc3QgY2hhciAqbmFtZSkKK19fTElCQ19ISURERU5fXyBjb25zdCBwcm9wX2luZm8gKl9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfY29tcGF0KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgcHJvcF9hcmVhX2NvbXBhdCAqcGEgPSAocHJvcF9hcmVhX2NvbXBhdCAqKV9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKICAgICB1bnNpZ25lZCBjb3VudCA9IHBhLT5jb3VudDsKQEAgLTkzLDcgKzk0LDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotaW50IF9fc3lzdGVtX3Byb3BlcnR5X3JlYWRfY29tcGF0KGNvbnN0IHByb3BfaW5mbyAqX3BpLCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSkKK19fTElCQ19ISURERU5fXyBpbnQgX19zeXN0ZW1fcHJvcGVydHlfcmVhZF9jb21wYXQoY29uc3QgcHJvcF9pbmZvICpfcGksIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQogewogICAgIHVuc2lnbmVkIHNlcmlhbCwgbGVuOwogICAgIGNvbnN0IHByb3BfaW5mb19jb21wYXQgKnBpID0gKGNvbnN0IHByb3BfaW5mb19jb21wYXQgKilfcGk7CkBAIC0xMTUsNyArMTE2LDcgQEAKICAgICB9CiB9CiAKLWludCBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoX2NvbXBhdCgKK19fTElCQ19ISURERU5fXyBpbnQgX19zeXN0ZW1fcHJvcGVydHlfZm9yZWFjaF9jb21wYXQoCiAgICAgICAgIHZvaWQgKCpwcm9wZm4pKGNvbnN0IHByb3BfaW5mbyAqcGksIHZvaWQgKmNvb2tpZSksCiAgICAgICAgIHZvaWQgKmNvb2tpZSkKIHsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3RjZ2V0cGdycC5jIGIvbGliYy9iaW9uaWMvdGNnZXRwZ3JwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZmY2NmEuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvdGNnZXRwZ3JwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSoqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotKiogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSoqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKiogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5Ci0qKiAgICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotKiogICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0qKgotKiogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHb29nbGUgSW5jLiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0qKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0qKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTwotKiogRVZFTlQgU0hBTEwgR29vZ2xlIEluYy4gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSoqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSoqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOwotKiogT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCi0qKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgotKiogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgotKiogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHRlcm1pb3MuaD4KLQotcGlkX3QgdGNnZXRwZ3JwKGludCBmZCkKLXsKLSAgICBwaWRfdCBfcGlkOwotICAgIHJldHVybiBpb2N0bChmZCwgVElPQ0dQR1JQLCAmX3BpZCkgPyAocGlkX3QpLTEgOiBfcGlkOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdGNzZXRwZ3JwLmMgYi9saWJjL2Jpb25pYy90Y3NldHBncnAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZkOWNkMC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy90Y3NldHBncnAuYworKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0qKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotKioKLSoqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0qKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSoqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSoqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKLSoqICAgICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0qKiAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSoqCi0qKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdvb2dsZSBJbmMuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSoqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSoqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCi0qKiBFVkVOVCBTSEFMTCBHb29nbGUgSW5jLiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7Ci0qKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKLSoqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0qKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCi0qKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8dGVybWlvcy5oPgotCi1pbnQgdGNzZXRwZ3JwKGludCBmZCwgcGlkX3QgX3BpZCkKLXsKLSAgICByZXR1cm4gaW9jdGwoZmQsIFRJT0NTUEdSUCwgJl9waWQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdGRlc3Ryb3kuY3BwIGIvbGliYy9iaW9uaWMvdGRlc3Ryb3kuY3BwCmluZGV4IGRlY2RlNGQuLjQ5NjE0YjggMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3RkZXN0cm95LmNwcAorKysgYi9saWJjL2Jpb25pYy90ZGVzdHJveS5jcHAKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAogLy8gRGVzdHJveSBhIHRyZWUgYW5kIGZyZWUgYWxsIGFsbG9jYXRlZCByZXNvdXJjZXMuCi0vLyBUaGlzIGlzIGEgR05VIGV4dGVuc2lvbiwgbm90IGF2YWlsYWJsZSBmcm9tIE5ldEJTRC4KKy8vIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uLCBub3QgYXZhaWxhYmxlIGZyb20gQlNELgogdm9pZCB0ZGVzdHJveSh2b2lkKiByb290LCB2b2lkICgqZGVzdHJveV9mdW5jKSh2b2lkKikpIHsKICAgbm9kZV90KiByb290X25vZGUgPSAobm9kZV90Kikgcm9vdDsKICAgaWYgKHJvb3Rfbm9kZSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy90ZXJtaW9zLmNwcCBiL2xpYmMvYmlvbmljL3Rlcm1pb3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MmRjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy90ZXJtaW9zLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgc3BlZWRfdCBjZmdldHNwZWVkKGNvbnN0IHRlcm1pb3MqIHMpIHsKKyAgcmV0dXJuIChzLT5jX2NmbGFnICYgQ0JBVUQpOworfQorCitzcGVlZF90IGNmZ2V0aXNwZWVkKGNvbnN0IHRlcm1pb3MqIHMpIHsKKyAgcmV0dXJuIGNmZ2V0c3BlZWQocyk7Cit9CisKK3NwZWVkX3QgY2ZnZXRvc3BlZWQoY29uc3QgdGVybWlvcyogcykgeworICByZXR1cm4gY2ZnZXRzcGVlZChzKTsKK30KKwordm9pZCBjZm1ha2VyYXcodGVybWlvcyogcykgeworICBzLT5jX2lmbGFnICY9IH4oSUdOQlJLfEJSS0lOVHxQQVJNUkt8SVNUUklQfElOTENSfElHTkNSfElDUk5MfElYT04pOworICBzLT5jX29mbGFnICY9IH5PUE9TVDsKKyAgcy0+Y19sZmxhZyAmPSB+KEVDSE98RUNIT05MfElDQU5PTnxJU0lHfElFWFRFTik7CisgIHMtPmNfY2ZsYWcgJj0gfihDU0laRXxQQVJFTkIpOworICBzLT5jX2NmbGFnIHw9IENTODsKK30KKworaW50IGNmc2V0aXNwZWVkKHRlcm1pb3MqIHMsIHNwZWVkX3Qgc3BlZWQpIHsKKyAgcmV0dXJuIGNmc2V0c3BlZWQocywgc3BlZWQpOworfQorCitpbnQgY2ZzZXRvc3BlZWQodGVybWlvcyogcywgc3BlZWRfdCBzcGVlZCkgeworICByZXR1cm4gY2ZzZXRzcGVlZChzLCBzcGVlZCk7Cit9CisKK2ludCBjZnNldHNwZWVkKHRlcm1pb3MqIHMsIHNwZWVkX3Qgc3BlZWQpIHsKKyAgLy8gVE9ETzogY2hlY2sgJ3NwZWVkJyBpcyB2YWxpZC4KKyAgcy0+Y19jZmxhZyA9IChzLT5jX2NmbGFnICYgfkNCQVVEKSB8IChzcGVlZCAmIENCQVVEKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCB0Y2RyYWluKGludCBmZCkgeworICAvLyBBIG5vbi16ZXJvIGFyZ3VtZW50IHRvIFRDU0JSSyBtZWFucyAiZG9uJ3Qgc2VuZCBhIGJyZWFrIi4KKyAgLy8gVGhlIGRyYWluIGlzIGEgc2lkZS1lZmZlY3Qgb2YgdGhlIGlvY3RsIQorICByZXR1cm4gaW9jdGwoZmQsIFRDU0JSSywgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMSkpOworfQorCitpbnQgdGNmbG93KGludCBmZCwgaW50IGFjdGlvbikgeworICByZXR1cm4gaW9jdGwoZmQsIFRDWE9OQywgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oYWN0aW9uKSk7Cit9CisKK2ludCB0Y2ZsdXNoKGludCBmZCwgaW50IHF1ZXVlKSB7CisgIHJldHVybiBpb2N0bChmZCwgVENGTFNILCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihxdWV1ZSkpOworfQorCitpbnQgdGNnZXRhdHRyKGludCBmZCwgdGVybWlvcyogcykgeworICByZXR1cm4gaW9jdGwoZmQsIFRDR0VUUywgcyk7Cit9CisKK3BpZF90IHRjZ2V0c2lkKGludCBmZCkgeworICBwaWRfdCBzaWQ7CisgIGlmIChpb2N0bChmZCwgVElPQ0dTSUQsICZzaWQpID09IC0xKSB7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiBzaWQ7Cit9CisKK2ludCB0Y3NlbmRicmVhayhpbnQgZmQsIGludCBkdXJhdGlvbikgeworICByZXR1cm4gaW9jdGwoZmQsIFRDU0JSS1AsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGR1cmF0aW9uKSk7Cit9CisKK2ludCB0Y3NldGF0dHIoaW50IGZkLCBpbnQgb3B0aW9uYWxfYWN0aW9ucywgY29uc3QgdGVybWlvcyogcykgeworICBpbnQgY21kOworICBzd2l0Y2ggKG9wdGlvbmFsX2FjdGlvbnMpIHsKKyAgICBjYXNlIFRDU0FOT1c6IGNtZCA9IFRDU0VUUzsgYnJlYWs7CisgICAgY2FzZSBUQ1NBRFJBSU46IGNtZCA9IFRDU0VUU1c7IGJyZWFrOworICAgIGNhc2UgVENTQUZMVVNIOiBjbWQgPSBUQ1NFVFNGOyBicmVhazsKKyAgICBkZWZhdWx0OiBlcnJubyA9IEVJTlZBTDsgcmV0dXJuIC0xOworICB9CisgIHJldHVybiBpb2N0bChmZCwgY21kLCBzKTsKK30KKworcGlkX3QgdGNnZXRwZ3JwKGludCBmZCkgeworICBwaWRfdCBwaWQ7CisgIGlmIChpb2N0bChmZCwgVElPQ0dQR1JQLCAmcGlkKSA9PSAtMSkgeworICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gcGlkOworfQorCitpbnQgdGNzZXRwZ3JwKGludCBmZCwgcGlkX3QgcGlkKSB7CisgIHJldHVybiBpb2N0bChmZCwgVElPQ1NQR1JQLCAmcGlkKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3RocmVhZF9hdGV4aXQuY3BwIGIvbGliYy9iaW9uaWMvdGhyZWFkX2F0ZXhpdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZDY1ZDMuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvdGhyZWFkX2F0ZXhpdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qIHNvbWUgc2ltcGxlIGdsdWUgdXNlZCB0byBtYWtlIHRoZSBCU0QgYXRleGl0IGNvZGUgaGFwcHkgKi8KLQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLQotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnQXRFeGl0TG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0KLV9fQkVHSU5fREVDTFMKLV9fTElCQ19ISURERU5fXyB2b2lkIF90aHJlYWRfYXRleGl0X2xvY2soKTsKLV9fTElCQ19ISURERU5fXyB2b2lkIF90aHJlYWRfYXRleGl0X3VubG9jaygpOwotX19FTkRfREVDTFMKLQotdm9pZCBfdGhyZWFkX2F0ZXhpdF9sb2NrKCkgewotICBwdGhyZWFkX211dGV4X2xvY2soJmdBdEV4aXRMb2NrKTsKLX0KLQotdm9pZCBfdGhyZWFkX2F0ZXhpdF91bmxvY2soKSB7Ci0gIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnQXRFeGl0TG9jayk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy90aHJlYWRfcHJpdmF0ZS5jcHAgYi9saWJjL2Jpb25pYy90aHJlYWRfcHJpdmF0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwNDAxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3RocmVhZF9wcml2YXRlLmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSAicHJpdmF0ZS90aHJlYWRfcHJpdmF0ZS5oIgorCisvLyBTb21lIHNpbXBsZSBnbHVlIHVzZWQgdG8gbWFrZSBCU0QgY29kZSB0aHJlYWQtc2FmZS4KKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnX2F0ZXhpdF9sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKwordm9pZCBfdGhyZWFkX2F0ZXhpdF9sb2NrKCkgeworICBwdGhyZWFkX211dGV4X2xvY2soJmdfYXRleGl0X2xvY2spOworfQorCit2b2lkIF90aHJlYWRfYXRleGl0X3VubG9jaygpIHsKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmdfYXRleGl0X2xvY2spOworfQorCitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdfYXJjNF9sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKwordm9pZCBfdGhyZWFkX2FyYzRfbG9jaygpIHsKKyAgcHRocmVhZF9tdXRleF9sb2NrKCZnX2FyYzRfbG9jayk7Cit9CisKK3ZvaWQgX3RocmVhZF9hcmM0X3VubG9jaygpIHsKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmdfYXJjNF9sb2NrKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3RpbWU2NC5jIGIvbGliYy9iaW9uaWMvdGltZTY0LmMKaW5kZXggOWFhNWQ0Zi4uOTVkZmFiNSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvdGltZTY0LmMKKysrIGIvbGliYy9iaW9uaWMvdGltZTY0LmMKQEAgLTI4LDYgKzI4LDEwIEBACiAKIC8qIFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AveTIwMzggZm9yIHRoaXMgY29kZSdzIG9yaWdpbiAqLwogCisjaWYgZGVmaW5lZChfX0xQNjRfXykKKyNlcnJvciBUaGlzIGNydWZ0IHNob3VsZCBiZSBMUDMyIG9ubHkhCisjZW5kaWYKKwogLyoKIAogUHJvZ3JhbW1lcnMgd2hvIGhhdmUgYXZhaWxhYmxlIHRvIHRoZW0gNjQtYml0IHRpbWUgdmFsdWVzIGFzIGEgJ2xvbmcKQEAgLTEzMywxNyArMTM3LDYgQEAKICAgICAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LAogfTsKIAotLyogVGhpcyBpc24ndCB1c2VkLCBidXQgaXQncyBoYW5keSB0byBsb29rIGF0ICovCi1zdGF0aWMgY29uc3QgaW50IGRvd195ZWFyX3N0YXJ0W1NPTEFSX0NZQ0xFX0xFTkdUSF0gPSB7Ci0gICAgNSwgMCwgMSwgMiwgICAgIC8qIDAgICAgICAgMjAxNiAtIDIwMTkgKi8KLSAgICAzLCA1LCA2LCAwLCAgICAgLyogNCAgKi8KLSAgICAxLCAzLCA0LCA1LCAgICAgLyogOCAgICAgICAxOTk2IC0gMTk5OCwgMTk3MSovCi0gICAgNiwgMSwgMiwgMywgICAgIC8qIDEyICAgICAgMTk3MiAtIDE5NzUgKi8KLSAgICA0LCA2LCAwLCAxLCAgICAgLyogMTYgKi8KLSAgICAyLCA0LCA1LCA2LCAgICAgLyogMjAgICAgICAyMDM2LCAyMDM3LCAyMDEwLCAyMDExICovCi0gICAgMCwgMiwgMywgNCAgICAgIC8qIDI0ICAgICAgMjAxMiwgMjAxMywgMjAxNCwgMjAxNSAqLwotfTsKLQogLyogTGV0J3MgYXNzdW1lIHBlb3BsZSBhcmUgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgZGF0ZXMgaW4gdGhlIGZ1dHVyZS4KICAgIExldCdzIHByb3ZpZGUgc29tZSBjaGVhdHMgc28geW91IGNhbiBza2lwIGFoZWFkLgogICAgVGhpcyBoYXMgYSA0eCBzcGVlZCBib29zdCB3aGVuIG5lYXIgMjAwOC4KQEAgLTI0OCw2ICsyNDEsNyBAQAogfQogCiAKKyNpZiAhZGVmaW5lZChOREVCVUcpCiBzdGF0aWMgaW50IGNoZWNrX3RtKHN0cnVjdCBUTSAqdG0pCiB7CiAgICAgLyogRG9uJ3QgZm9yZ2V0IGxlYXAgc2Vjb25kcyAqLwpAQCAtMjY4LDcgKzI2Miw3IEBACiAKICAgICBhc3NlcnQodG0tPnRtX3dkYXkgPj0gMCk7CiAgICAgYXNzZXJ0KHRtLT50bV93ZGF5IDw9IDYpOwotICAgCisKICAgICBhc3NlcnQodG0tPnRtX3lkYXkgPj0gMCk7CiAgICAgYXNzZXJ0KHRtLT50bV95ZGF5IDw9IGxlbmd0aF9vZl95ZWFyW0lTX0xFQVAodG0tPnRtX3llYXIpXSk7CiAKQEAgLTI3OSw2ICsyNzMsNyBAQAogCiAgICAgcmV0dXJuIDE7CiB9CisjZW5kaWYKIAogCiAvKiBUaGUgZXhjZXB0aW9uYWwgY2VudHVyaWVzIHdpdGhvdXQgbGVhcCB5ZWFycyBjYXVzZSB0aGUgY3ljbGUgdG8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3RpbWVyLmNwcCBiL2xpYmMvYmlvbmljL3RpbWVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ3MzgyMS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy90aW1lci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1leHRlcm4gaW50IF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdChwdGhyZWFkX2NvbmRfdCosIHB0aHJlYWRfbXV0ZXhfdCosIGNvbnN0IHRpbWVzcGVjKiwgY2xvY2tpZF90KTsKLWV4dGVybiBpbnQgX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlbGF0aXZlKHB0aHJlYWRfY29uZF90KiwgcHRocmVhZF9tdXRleF90KiwgY29uc3QgdGltZXNwZWMqKTsKLQotLy8gTm9ybWFsIChpLmUuIG5vbi1TSUdFVl9USFJFQUQpIHRpbWVycyBhcmUgY3JlYXRlZCBkaXJlY3RseSBieSB0aGUga2VybmVsCi0vLyBhbmQgYXJlIHBhc3NlZCBhcyBpcyB0by9mcm9tIHRoZSBjYWxsZXIuCi0vLwotLy8gVGhpcyBmaWxlIGFsc28gaW1wbGVtZW50cyB0aGUgc3VwcG9ydCByZXF1aXJlZCBmb3IgU0lHRVZfVEhSRUFEICgiUE9TSVggaW50ZXJ2YWwiKQotLy8gdGltZXJzLiBTZWUgdGhlIGZvbGxvd2luZyBwYWdlcyBmb3IgYWRkaXRpb25hbCBkZXRhaWxzOgotLy8KLS8vIHd3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy90aW1lcl9jcmVhdGUuaHRtbAotLy8gd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUzOTkvZnVuY3Rpb25zL3RpbWVyX3NldHRpbWUuaHRtbAotLy8gd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDAwOTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDRfMDEKLS8vCi0vLyBUaGUgTGludXgga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCB0aGVzZSwgc28gd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhlbSBpbiB0aGUKLS8vIEMgbGlicmFyeS4gV2UgdXNlIGEgdmVyeSBiYXNpYyBzY2hlbWUgd2hlcmUgZWFjaCB0aW1lciBpcyBhc3NvY2lhdGVkIHRvIGEKLS8vIHRocmVhZCB0aGF0IHdpbGwgbG9vcCwgd2FpdGluZyBmb3IgdGltZW91dHMgb3IgbWVzc2FnZXMgZnJvbSB0aGUgcHJvZ3JhbQotLy8gY29ycmVzcG9uZGluZyB0byBjYWxscyB0byB0aW1lcl9zZXR0aW1lKCkgYW5kIHRpbWVyX2RlbGV0ZSgpLgotLy8KLS8vIE5vdGUgYWxzbyBhbiBpbXBvcnRhbnQgdGhpbmc6IFBvc2l4IG1hbmRhdGVzIHRoYXQgaW4gdGhlIGNhc2Ugb2YgZm9yaygpLAotLy8gdGhlIHRpbWVycyBvZiB0aGUgY2hpbGQgcHJvY2VzcyBzaG91bGQgYmUgZGlzYXJtZWQsIGJ1dCBub3QgZGVsZXRlZC4KLS8vIHRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgcHJvdmlkaW5nIGEgZm9yaygpIHdyYXBwZXIgKHNlZSBiaW9uaWMvZm9yay5jKSB3aGljaAotLy8gc3RvcHMgYWxsIHRpbWVycyBiZWZvcmUgdGhlIGZvcmssIGFuZCBvbmx5IHJlLXN0YXJ0IHRoZW0gaW4gY2FzZSBvZiBlcnJvcgotLy8gb3IgaW4gdGhlIHBhcmVudCBwcm9jZXNzLgotLy8KLS8vIFRoaXMgc3RvcC9zdGFydCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgX190aW1lcl90YWJsZV9zdGFydF9zdG9wKCkgZnVuY3Rpb24KLS8vIGJlbG93LgotLy8KLS8vIEEgU0lHRVZfVEhSRUFEIHRpbWVyIElEIHdpbGwgYWx3YXlzIGhhdmUgaXRzIFRJTUVSX0lEX1dSQVBfQklUCi0vLyBzZXQgdG8gMS4gSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgdGhpcyBpcyBhbHdheXMgYml0IDMxLCB3aGljaCBpcwotLy8gZ3VhcmFudGVlZCB0byBuZXZlciBiZSB1c2VkIGJ5IGtlcm5lbC1wcm92aWRlZCB0aW1lciBpZHMKLS8vCi0vLyAoU2VlIGNvZGUgaW4gPGtlcm5lbD4vbGliL2lkci5jLCB1c2VkIHRvIG1hbmFnZSBJRHMsIHRvIHNlZSB3aHkuKQotCi0jZGVmaW5lICBUSU1FUl9JRF9XUkFQX0JJVCAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSAgVElNRVJfSURfV1JBUChpZCkgICAgICAgICgodGltZXJfdCkoKGlkKSB8ICBUSU1FUl9JRF9XUkFQX0JJVCkpCi0jZGVmaW5lICBUSU1FUl9JRF9VTldSQVAoaWQpICAgICAgKCh0aW1lcl90KSgoaWQpICYgflRJTUVSX0lEX1dSQVBfQklUKSkKLSNkZWZpbmUgIFRJTUVSX0lEX0lTX1dSQVBQRUQoaWQpICAoKChpZCkgJiBUSU1FUl9JRF9XUkFQX0JJVCkgIT0gMCkKLQotLyogdGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkgdG8gaW5kaWNhdGUgYSAnZnJlZScgb3IgJ3pvbWJpZScKLSAqIHRocl90aW1lciBzdHJ1Y3R1cmUuIEhlcmUsICd6b21iaWUnIG1lYW5zIHRoYXQgdGltZXJfZGVsZXRlKCkKLSAqIGhhcyBiZWVuIGNhbGxlZCwgYnV0IHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgdGhyZWFkIGhhc24ndAotICogZXhpdGVkIHlldC4KLSAqLwotI2RlZmluZSAgVElNRVJfSURfTk9ORSAgICAgICAgICAgICgodGltZXJfdCkweGZmZmZmZmZmKQotCi0vKiBUcnVlIGlmZiBhIHRpbWVyIGlkIGlzIHZhbGlkICovCi0jZGVmaW5lICBUSU1FUl9JRF9JU19WQUxJRChpZCkgICAgKChpZCkgIT0gVElNRVJfSURfTk9ORSkKLQotLyogdGhlIG1heGltdW0gdmFsdWUgb2Ygb3ZlcnJ1biBjb3VudGVycyAqLwotI2RlZmluZSAgREVMQVlUSU1FUl9NQVggICAgMHg3ZmZmZmZmZgotCi10eXBlZGVmIHN0cnVjdCB0aHJfdGltZXIgICAgICAgICAgdGhyX3RpbWVyX3Q7Ci10eXBlZGVmIHN0cnVjdCB0aHJfdGltZXJfdGFibGUgICAgdGhyX3RpbWVyX3RhYmxlX3Q7Ci0KLS8qIFRoZSBQb3NpeCBzcGVjIHNheXMgdGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIHVuc2lnbmVkIHBhcmFtZXRlciwgYnV0Ci0gKiBpdCdzIHJlYWxseSBhICd1bmlvbiBzaWd2YWwnIGEuay5hLiBzaWd2YWxfdCAqLwotdHlwZWRlZiB2b2lkICgqdGhyX3RpbWVyX2Z1bmNfdCkoIHNpZ3ZhbF90ICk7Ci0KLXN0cnVjdCB0aHJfdGltZXIgewotICAgIHRocl90aW1lcl90KiAgICAgICBuZXh0OyAgICAgLyogbmV4dCBpbiBmcmVlIGxpc3QgKi8KLSAgICB0aW1lcl90ICAgICAgICAgICAgaWQ7ICAgICAgIC8qIFRJTUVSX0lEX05PTkUgaWZmIGZyZWUgb3IgZHlpbmcgKi8KLSAgICBjbG9ja2lkX3QgICAgICAgICAgY2xvY2s7Ci0gICAgcHRocmVhZF90ICAgICAgICAgIHRocmVhZDsKLSAgICBwdGhyZWFkX2F0dHJfdCAgICAgYXR0cmlidXRlczsKLSAgICB0aHJfdGltZXJfZnVuY190ICAgY2FsbGJhY2s7Ci0gICAgc2lndmFsX3QgICAgICAgICAgIHZhbHVlOwotCi0gICAgLyogdGhlIGZvbGxvd2luZyBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuCi0gICAgICogdGhlIHRpbWVyIHRocmVhZCBhbmQgdGhlIHRpbWVyX1hYWCgpIGZ1bmN0aW9ucwotICAgICAqLwotICAgIHB0aHJlYWRfbXV0ZXhfdCAgICAgICAgICAgbXV0ZXg7ICAgICAvKiBsb2NrICovCi0gICAgcHRocmVhZF9jb25kX3QgICAgICAgICAgICBjb25kOyAgICAgIC8qIHNpZ25hbCBhIHN0YXRlIGNoYW5nZSB0byB0aHJlYWQgKi8KLSAgICBpbnQgdm9sYXRpbGUgICAgICAgICAgICAgIGRvbmU7ICAgICAgLyogc2V0IGJ5IHRpbWVyX2RlbGV0ZSAqLwotICAgIGludCB2b2xhdGlsZSAgICAgICAgICAgICAgc3RvcHBlZDsgICAvKiBzZXQgYnkgX3N0YXJ0X3N0b3AoKSAqLwotICAgIHRpbWVzcGVjIHZvbGF0aWxlICBleHBpcmVzOyAgIC8qIG5leHQgZXhwaXJhdGlvbiB0aW1lLCBvciAwICovCi0gICAgdGltZXNwZWMgdm9sYXRpbGUgIHBlcmlvZDsgICAgLyogcmVsb2FkIHZhbHVlLCBvciAwICovCi0gICAgaW50IHZvbGF0aWxlICAgICAgICAgICAgICBvdmVycnVuczsgIC8qIGN1cnJlbnQgbnVtYmVyIG9mIG92ZXJydW5zICovCi19OwotCi0jZGVmaW5lICBNQVhfVEhSRUFEX1RJTUVSUyAgMzIKLQotc3RydWN0IHRocl90aW1lcl90YWJsZSB7Ci0gICAgcHRocmVhZF9tdXRleF90ICBsb2NrOwotICAgIHRocl90aW1lcl90KiAgICAgZnJlZV90aW1lcjsKLSAgICB0aHJfdGltZXJfdCAgICAgIHRpbWVyc1sgTUFYX1RIUkVBRF9USU1FUlMgXTsKLX07Ci0KLS8qKiBHTE9CQUwgVEFCTEUgT0YgVEhSRUFEIFRJTUVSUwotICoqLwotCi1zdGF0aWMgdm9pZAotdGhyX3RpbWVyX3RhYmxlX2luaXQoIHRocl90aW1lcl90YWJsZV90KiAgdCApCi17Ci0gICAgaW50ICBubjsKLQotICAgIG1lbXNldCh0LCAwLCBzaXplb2YgKnQpOwotICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCggJnQtPmxvY2ssIE5VTEwgKTsKLQotICAgIGZvciAobm4gPSAwOyBubiA8IE1BWF9USFJFQURfVElNRVJTOyBubisrKQotICAgICAgICB0LT50aW1lcnNbbm5dLmlkID0gVElNRVJfSURfTk9ORTsKLQotICAgIHQtPmZyZWVfdGltZXIgPSAmdC0+dGltZXJzWzBdOwotICAgIGZvciAobm4gPSAxOyBubiA8IE1BWF9USFJFQURfVElNRVJTOyBubisrKQotICAgICAgICB0LT50aW1lcnNbbm4tMV0ubmV4dCA9ICZ0LT50aW1lcnNbbm5dOwotfQotCi0KLXN0YXRpYyB0aHJfdGltZXJfdCoKLXRocl90aW1lcl90YWJsZV9hbGxvYyggdGhyX3RpbWVyX3RhYmxlX3QqICB0ICkKLXsKLSAgICB0aHJfdGltZXJfdCogIHRpbWVyOwotCi0gICAgaWYgKHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBwdGhyZWFkX211dGV4X2xvY2soJnQtPmxvY2spOwotICAgIHRpbWVyID0gdC0+ZnJlZV90aW1lcjsKLSAgICBpZiAodGltZXIgIT0gTlVMTCkgewotICAgICAgICB0LT5mcmVlX3RpbWVyID0gdGltZXItPm5leHQ7Ci0gICAgICAgIHRpbWVyLT5uZXh0ICAgPSBOVUxMOwotICAgICAgICB0aW1lci0+aWQgICAgID0gVElNRVJfSURfV1JBUCgodGltZXIgLSB0LT50aW1lcnMpKTsKLSAgICB9Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJnQtPmxvY2spOwotICAgIHJldHVybiB0aW1lcjsKLX0KLQotCi1zdGF0aWMgdm9pZAotdGhyX3RpbWVyX3RhYmxlX2ZyZWUoIHRocl90aW1lcl90YWJsZV90KiAgdCwgdGhyX3RpbWVyX3QqICB0aW1lciApCi17Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCAmdC0+bG9jayApOwotICAgIHRpbWVyLT5pZCAgICAgPSBUSU1FUl9JRF9OT05FOwotICAgIHRpbWVyLT50aHJlYWQgPSAwOwotICAgIHRpbWVyLT5uZXh0ICAgPSB0LT5mcmVlX3RpbWVyOwotICAgIHQtPmZyZWVfdGltZXIgPSB0aW1lcjsKLSAgICBwdGhyZWFkX211dGV4X3VubG9jayggJnQtPmxvY2sgKTsKLX0KLQotCi1zdGF0aWMgdm9pZCB0aHJfdGltZXJfdGFibGVfc3RhcnRfc3RvcCh0aHJfdGltZXJfdGFibGVfdCogdCwgaW50IHN0b3ApIHsKLSAgaWYgKHQgPT0gTlVMTCkgewotICAgIHJldHVybjsKLSAgfQotCi0gIHB0aHJlYWRfbXV0ZXhfbG9jaygmdC0+bG9jayk7Ci0gIGZvciAoaW50IG5uID0gMDsgbm4gPCBNQVhfVEhSRUFEX1RJTUVSUzsgKytubikgewotICAgIHRocl90aW1lcl90KiAgdGltZXIgID0gJnQtPnRpbWVyc1tubl07Ci0gICAgaWYgKFRJTUVSX0lEX0lTX1ZBTElEKHRpbWVyLT5pZCkpIHsKLSAgICAgIC8vIFRlbGwgdGhlIHRocmVhZCB0byBzdGFydC9zdG9wLgotICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZ0aW1lci0+bXV0ZXgpOwotICAgICAgdGltZXItPnN0b3BwZWQgPSBzdG9wOwotICAgICAgcHRocmVhZF9jb25kX3NpZ25hbCggJnRpbWVyLT5jb25kICk7Ci0gICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmdGltZXItPm11dGV4KTsKLSAgICB9Ci0gIH0KLSAgcHRocmVhZF9tdXRleF91bmxvY2soJnQtPmxvY2spOwotfQotCi0KLS8qIGNvbnZlcnQgYSB0aW1lcl9pZCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIHRocl90aW1lcl90KiBwb2ludGVyCi0gKiByZXR1cm5zIE5VTEwgaWYgdGhlIGlkIGlzIG5vdCB3cmFwcGVkIG9yIGlzIGludmFsaWQvZnJlZQotICovCi1zdGF0aWMgdGhyX3RpbWVyX3QqCi10aHJfdGltZXJfdGFibGVfZnJvbV9pZCggdGhyX3RpbWVyX3RhYmxlX3QqICB0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgICAgICAgICAgICAgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICByZW1vdmUgKQotewotICAgIHVuc2lnbmVkICAgICAgaW5kZXg7Ci0gICAgdGhyX3RpbWVyX3QqICB0aW1lcjsKLQotICAgIGlmICh0ID09IE5VTEwgfHwgIVRJTUVSX0lEX0lTX1dSQVBQRUQoaWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGluZGV4ID0gKHVuc2lnbmVkKSBUSU1FUl9JRF9VTldSQVAoaWQpOwotICAgIGlmIChpbmRleCA+PSBNQVhfVEhSRUFEX1RJTUVSUykKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBwdGhyZWFkX211dGV4X2xvY2soJnQtPmxvY2spOwotCi0gICAgdGltZXIgPSAmdC0+dGltZXJzW2luZGV4XTsKLQotICAgIGlmICghVElNRVJfSURfSVNfVkFMSUQodGltZXItPmlkKSkgewotICAgICAgICB0aW1lciA9IE5VTEw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogaWYgd2UncmUgcmVtb3ZpbmcgdGhpcyB0aW1lciwgY2xlYXIgdGhlIGlkCi0gICAgICAgICAqIHJpZ2h0IG5vdyB0byBwcmV2ZW50IGFub3RoZXIgdGhyZWFkIHRvCi0gICAgICAgICAqIHVzZSB0aGUgc2FtZSBpZCBhZnRlciB0aGUgdW5sb2NrICovCi0gICAgICAgIGlmIChyZW1vdmUpCi0gICAgICAgICAgICB0aW1lci0+aWQgPSBUSU1FUl9JRF9OT05FOwotICAgIH0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmdC0+bG9jayk7Ci0KLSAgICByZXR1cm4gdGltZXI7Ci19Ci0KLS8qIHRoZSBzdGF0aWMgdGltZXIgdGFibGUgLSB3ZSBvbmx5IGNyZWF0ZSBpdCBpZiB0aGUgcHJvY2VzcwotICogcmVhbGx5IHdhbnRzIHRvIHVzZSBTSUdFVl9USFJFQUQgdGltZXJzLCB3aGljaCBzaG91bGQgYmUKLSAqIHByZXR0eSBpbmZyZXF1ZW50Ci0gKi8KLQotc3RhdGljIHB0aHJlYWRfb25jZV90IF9fdGltZXJfdGFibGVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotc3RhdGljIHRocl90aW1lcl90YWJsZV90KiBfX3RpbWVyX3RhYmxlOwotCi1zdGF0aWMgdm9pZCBfX3RpbWVyX3RhYmxlX2luaXQodm9pZCkgewotICBfX3RpbWVyX3RhYmxlID0gcmVpbnRlcnByZXRfY2FzdDx0aHJfdGltZXJfdGFibGVfdCo+KGNhbGxvYygxLCBzaXplb2YoKl9fdGltZXJfdGFibGUpKSk7Ci0gIGlmIChfX3RpbWVyX3RhYmxlICE9IE5VTEwpIHsKLSAgICB0aHJfdGltZXJfdGFibGVfaW5pdChfX3RpbWVyX3RhYmxlKTsKLSAgfQotfQotCi1zdGF0aWMgdGhyX3RpbWVyX3RhYmxlX3QqIF9fdGltZXJfdGFibGVfZ2V0KHZvaWQpIHsKLSAgcHRocmVhZF9vbmNlKCZfX3RpbWVyX3RhYmxlX29uY2UsIF9fdGltZXJfdGFibGVfaW5pdCk7Ci0gIHJldHVybiBfX3RpbWVyX3RhYmxlOwotfQotCi0vKiogUE9TSVggVEhSRUFEIFRJTUVSUyBDTEVBTlVQIE9OIEZPUksKLSAqKgotICoqIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSAnZm9yaygpJyB3cmFwcGVyIHRvIHN0b3Avc3RhcnQKLSAqKiBhbGwgYWN0aXZlIHRocmVhZCB0aW1lcnMuIHRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgYSBQb3NpeAotICoqIHJlcXVpcmVtZW50czogdGhlIHRpbWVycyBvZiBmb3JrIGNoaWxkIHByb2Nlc3NlcyBtdXN0IGJlCi0gKiogZGlzYXJtZWQgYnV0IG5vdCBkZWxldGVkLgotICoqLwotdm9pZCBfX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AoaW50IHN0b3ApIHsKLSAgLy8gV2UgYWNjZXNzIF9fdGltZXJfdGFibGUgZGlyZWN0bHkgc28gd2UgZG9uJ3QgY3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgeWV0IGV4aXN0LgotICB0aHJfdGltZXJfdGFibGVfc3RhcnRfc3RvcChfX3RpbWVyX3RhYmxlLCBzdG9wKTsKLX0KLQotc3RhdGljIHRocl90aW1lcl90KgotdGhyX3RpbWVyX2Zyb21faWQoIHRpbWVyX3QgICBpZCApCi17Ci0gICAgdGhyX3RpbWVyX3RhYmxlX3QqICB0YWJsZSA9IF9fdGltZXJfdGFibGVfZ2V0KCk7Ci0gICAgdGhyX3RpbWVyX3QqICAgICAgICB0aW1lciA9IHRocl90aW1lcl90YWJsZV9mcm9tX2lkKCB0YWJsZSwgaWQsIDAgKTsKLQotICAgIHJldHVybiB0aW1lcjsKLX0KLQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCi10aHJfdGltZXJfbG9jayggdGhyX3RpbWVyX3QqICB0ICkKLXsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJnQtPm11dGV4KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZAotdGhyX3RpbWVyX3VubG9jayggdGhyX3RpbWVyX3QqICB0ICkKLXsKLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmdC0+bXV0ZXgpOwotfQotCi0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgdGltZXNwZWNfYWRkKHRpbWVzcGVjKiBhLCBjb25zdCB0aW1lc3BlYyogYikgewotICBhLT50dl9zZWMgICs9IGItPnR2X3NlYzsKLSAgYS0+dHZfbnNlYyArPSBiLT50dl9uc2VjOwotICBpZiAoYS0+dHZfbnNlYyA+PSAxMDAwMDAwMDAwKSB7Ci0gICAgYS0+dHZfbnNlYyAtPSAxMDAwMDAwMDAwOwotICAgIGEtPnR2X3NlYyAgKz0gMTsKLSAgfQotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRpbWVzcGVjX3N1Yih0aW1lc3BlYyogYSwgY29uc3QgdGltZXNwZWMqIGIpIHsKLSAgYS0+dHZfc2VjICAtPSBiLT50dl9zZWM7Ci0gIGEtPnR2X25zZWMgLT0gYi0+dHZfbnNlYzsKLSAgaWYgKGEtPnR2X25zZWMgPCAwKSB7Ci0gICAgYS0+dHZfbnNlYyArPSAxMDAwMDAwMDAwOwotICAgIGEtPnR2X3NlYyAgLT0gMTsKLSAgfQotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRpbWVzcGVjX3plcm8odGltZXNwZWMqIGEpIHsKLSAgYS0+dHZfc2VjID0gYS0+dHZfbnNlYyA9IDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCB0aW1lc3BlY19pc196ZXJvKGNvbnN0IHRpbWVzcGVjKiBhKSB7Ci0gIHJldHVybiAoYS0+dHZfc2VjID09IDAgJiYgYS0+dHZfbnNlYyA9PSAwKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IHRpbWVzcGVjX2NtcChjb25zdCB0aW1lc3BlYyogYSwgY29uc3QgdGltZXNwZWMqIGIpIHsKLSAgaWYgKGEtPnR2X3NlYyAgPCBiLT50dl9zZWMpICByZXR1cm4gLTE7Ci0gIGlmIChhLT50dl9zZWMgID4gYi0+dHZfc2VjKSAgcmV0dXJuICsxOwotICBpZiAoYS0+dHZfbnNlYyA8IGItPnR2X25zZWMpIHJldHVybiAtMTsKLSAgaWYgKGEtPnR2X25zZWMgPiBiLT50dl9uc2VjKSByZXR1cm4gKzE7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdGltZXNwZWNfY21wMChjb25zdCB0aW1lc3BlYyogYSkgewotICBpZiAoYS0+dHZfc2VjIDwgMCkgcmV0dXJuIC0xOwotICBpZiAoYS0+dHZfc2VjID4gMCkgcmV0dXJuICsxOwotICBpZiAoYS0+dHZfbnNlYyA8IDApIHJldHVybiAtMTsKLSAgaWYgKGEtPnR2X25zZWMgPiAwKSByZXR1cm4gKzE7Ci0gIHJldHVybiAwOwotfQotCi0vKiogUE9TSVggVElNRVJTIEFQSXMgKi8KLQotZXh0ZXJuICJDIiBpbnQgX190aW1lcl9jcmVhdGUoY2xvY2tpZF90LCBzaWdldmVudCosIHRpbWVyX3QqKTsKLWV4dGVybiAiQyIgaW50IF9fdGltZXJfZGVsZXRlKHRpbWVyX3QpOwotZXh0ZXJuICJDIiBpbnQgX190aW1lcl9nZXR0aW1lKHRpbWVyX3QsIGl0aW1lcnNwZWMqKTsKLWV4dGVybiAiQyIgaW50IF9fdGltZXJfc2V0dGltZSh0aW1lcl90LCBpbnQsIGNvbnN0IGl0aW1lcnNwZWMqLCBpdGltZXJzcGVjKik7Ci1leHRlcm4gIkMiIGludCBfX3RpbWVyX2dldG92ZXJydW4odGltZXJfdCk7Ci0KLXN0YXRpYyB2b2lkKiB0aW1lcl90aHJlYWRfc3RhcnQodm9pZCopOwotCi1pbnQgdGltZXJfY3JlYXRlKGNsb2NraWRfdCBjbG9ja19pZCwgc2lnZXZlbnQqIGV2cCwgdGltZXJfdCogdGltZXJfaWQpIHsKLSAgLy8gSWYgbm90IGEgU0lHRVZfVEhSRUFEIHRpbWVyLCB0aGUga2VybmVsIGNhbiBoYW5kbGUgaXQgd2l0aG91dCBvdXIgaGVscC4KLSAgaWYgKF9fcHJlZGljdF90cnVlKGV2cCA9PSBOVUxMIHx8IGV2cC0+c2lnZXZfbm90aWZ5ICE9IFNJR0VWX1RIUkVBRCkpIHsKLSAgICByZXR1cm4gX190aW1lcl9jcmVhdGUoY2xvY2tfaWQsIGV2cCwgdGltZXJfaWQpOwotICB9Ci0KLSAgLy8gQ2hlY2sgYXJndW1lbnRzLgotICBpZiAoZXZwLT5zaWdldl9ub3RpZnlfZnVuY3Rpb24gPT0gTlVMTCkgewotICAgIGVycm5vID0gRUlOVkFMOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8vIENoZWNrIHRoYXQgdGhlIGNsb2NrIGlkIGlzIHN1cHBvcnRlZCBieSB0aGUga2VybmVsLgotICB0aW1lc3BlYyBkdW1teTsKLSAgaWYgKGNsb2NrX2dldHRpbWUoY2xvY2tfaWQsICZkdW1teSkgPCAwICYmIGVycm5vID09IEVJTlZBTCkgewotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8vIENyZWF0ZSBhIG5ldyB0aW1lciBhbmQgaXRzIHRocmVhZC4KLSAgLy8gVE9ETzogdXNlIGEgc2luZ2xlIGdsb2JhbCB0aHJlYWQgZm9yIGFsbCB0aW1lcnMuCi0gIHRocl90aW1lcl90YWJsZV90KiB0YWJsZSA9IF9fdGltZXJfdGFibGVfZ2V0KCk7Ci0gIHRocl90aW1lcl90KiB0aW1lciA9IHRocl90aW1lcl90YWJsZV9hbGxvYyh0YWJsZSk7Ci0gIGlmICh0aW1lciA9PSBOVUxMKSB7Ci0gICAgZXJybm8gPSBFTk9NRU07Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLy8gQ29weSB0aGUgdGhyZWFkIGF0dHJpYnV0ZXMuCi0gIGlmIChldnAtPnNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzID09IE5VTEwpIHsKLSAgICBwdGhyZWFkX2F0dHJfaW5pdCgmdGltZXItPmF0dHJpYnV0ZXMpOwotICB9IGVsc2UgewotICAgIHRpbWVyLT5hdHRyaWJ1dGVzID0gKChwdGhyZWFkX2F0dHJfdCopIGV2cC0+c2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXMpWzBdOwotICB9Ci0KLSAgLy8gUG9zaXggc2F5cyB0aGF0IHRoZSBkZWZhdWx0IGlzIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEIGFuZAotICAvLyB0aGF0IFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIGhhcyB1bmRlZmluZWQgYmVoYXZpb3IuCi0gIC8vIFNvIHNpbXBseSBhbHdheXMgdXNlIERFVEFDSEVEIDotKQotICBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoJnRpbWVyLT5hdHRyaWJ1dGVzLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCk7Ci0KLSAgdGltZXItPmNhbGxiYWNrID0gZXZwLT5zaWdldl9ub3RpZnlfZnVuY3Rpb247Ci0gIHRpbWVyLT52YWx1ZSA9IGV2cC0+c2lnZXZfdmFsdWU7Ci0gIHRpbWVyLT5jbG9jayA9IGNsb2NrX2lkOwotCi0gIHB0aHJlYWRfbXV0ZXhfaW5pdCgmdGltZXItPm11dGV4LCBOVUxMKTsKLSAgcHRocmVhZF9jb25kX2luaXQoJnRpbWVyLT5jb25kLCBOVUxMKTsKLQotICB0aW1lci0+ZG9uZSA9IDA7Ci0gIHRpbWVyLT5zdG9wcGVkID0gMDsKLSAgdGltZXItPmV4cGlyZXMudHZfc2VjID0gdGltZXItPmV4cGlyZXMudHZfbnNlYyA9IDA7Ci0gIHRpbWVyLT5wZXJpb2QudHZfc2VjID0gdGltZXItPnBlcmlvZC50dl9uc2VjICA9IDA7Ci0gIHRpbWVyLT5vdmVycnVucyA9IDA7Ci0KLSAgLy8gQ3JlYXRlIHRoZSB0aHJlYWQuCi0gIGludCByYyA9IHB0aHJlYWRfY3JlYXRlKCZ0aW1lci0+dGhyZWFkLCAmdGltZXItPmF0dHJpYnV0ZXMsIHRpbWVyX3RocmVhZF9zdGFydCwgdGltZXIpOwotICBpZiAocmMgIT0gMCkgewotICAgIHRocl90aW1lcl90YWJsZV9mcmVlKHRhYmxlLCB0aW1lcik7Ci0gICAgZXJybm8gPSByYzsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAqdGltZXJfaWQgPSB0aW1lci0+aWQ7Ci0gIHJldHVybiAwOwotfQotCi0KLWludAotdGltZXJfZGVsZXRlKCB0aW1lcl90ICBpZCApCi17Ci0gICAgaWYgKCBfX3ByZWRpY3RfdHJ1ZSghVElNRVJfSURfSVNfV1JBUFBFRChpZCkpICkKLSAgICAgICAgcmV0dXJuIF9fdGltZXJfZGVsZXRlKCBpZCApOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHRocl90aW1lcl90YWJsZV90KiAgdGFibGUgPSBfX3RpbWVyX3RhYmxlX2dldCgpOwotICAgICAgICB0aHJfdGltZXJfdCogICAgICAgIHRpbWVyID0gdGhyX3RpbWVyX3RhYmxlX2Zyb21faWQodGFibGUsIGlkLCAxKTsKLQotICAgICAgICBpZiAodGltZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiB0ZWxsIHRoZSB0aW1lcidzIHRocmVhZCB0byBzdG9wICovCi0gICAgICAgIHRocl90aW1lcl9sb2NrKHRpbWVyKTsKLSAgICAgICAgdGltZXItPmRvbmUgPSAxOwotICAgICAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCAmdGltZXItPmNvbmQgKTsKLSAgICAgICAgdGhyX3RpbWVyX3VubG9jayh0aW1lcik7Ci0KLSAgICAgICAgLyogTk9URTogdGhlIHRocmVhZCB3aWxsIGNhbGwgX190aW1lcl90YWJsZV9mcmVlKCkgdG8gZnJlZSB0aGUKLSAgICAgICAgICogdGltZXIgb2JqZWN0LiB0aGUgJzEnIHBhcmFtZXRlciB0byB0aHJfdGltZXJfdGFibGVfZnJvbV9pZAotICAgICAgICAgKiBhYm92ZSBlbnN1cmVkIHRoYXQgdGhlIG9iamVjdCBhbmQgaXRzIHRpbWVyX2lkIGNhbm5vdCBiZQotICAgICAgICAgKiByZXVzZWQgYmVmb3JlIHRoYXQuCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLS8qIHJldHVybiB0aGUgcmVsYXRpdmUgdGltZSB1bnRpbCB0aGUgbmV4dCBleHBpcmF0aW9uLCBvciAwIGlmCi0gKiB0aGUgdGltZXIgaXMgZGlzYXJtZWQgKi8KLXN0YXRpYyB2b2lkIHRpbWVyX2dldHRpbWVfaW50ZXJuYWwodGhyX3RpbWVyX3QqIHRpbWVyLCBpdGltZXJzcGVjKiBzcGVjKSB7Ci0gIHRpbWVzcGVjIGRpZmYgPSBjb25zdF9jYXN0PHRpbWVzcGVjJj4odGltZXItPmV4cGlyZXMpOwotICBpZiAoIXRpbWVzcGVjX2lzX3plcm8oJmRpZmYpKSB7Ci0gICAgdGltZXNwZWMgbm93OwotCi0gICAgY2xvY2tfZ2V0dGltZSh0aW1lci0+Y2xvY2ssICZub3cpOwotICAgIHRpbWVzcGVjX3N1YigmZGlmZiwgJm5vdyk7Ci0KLSAgICAvKiBpbiBjYXNlIG9mIG92ZXJydW4sIHJldHVybiAwICovCi0gICAgaWYgKHRpbWVzcGVjX2NtcDAoJmRpZmYpIDwgMCkgewotICAgICAgdGltZXNwZWNfemVybygmZGlmZik7Ci0gICAgfQotICB9Ci0KLSAgc3BlYy0+aXRfdmFsdWUgPSBkaWZmOwotICBzcGVjLT5pdF9pbnRlcnZhbCA9IGNvbnN0X2Nhc3Q8dGltZXNwZWMmPih0aW1lci0+cGVyaW9kKTsKLX0KLQotCi1pbnQgdGltZXJfZ2V0dGltZSh0aW1lcl90IGlkLCBpdGltZXJzcGVjKiBvc3BlYykgewotICAgIGlmIChvc3BlYyA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKCBfX3ByZWRpY3RfdHJ1ZSghVElNRVJfSURfSVNfV1JBUFBFRChpZCkpICkgewotICAgICAgICByZXR1cm4gX190aW1lcl9nZXR0aW1lKCBpZCwgb3NwZWMgKTsKLSAgICB9IGVsc2UgewotICAgICAgICB0aHJfdGltZXJfdCogIHRpbWVyID0gdGhyX3RpbWVyX2Zyb21faWQoaWQpOwotCi0gICAgICAgIGlmICh0aW1lciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICB0aHJfdGltZXJfbG9jayh0aW1lcik7Ci0gICAgICAgIHRpbWVyX2dldHRpbWVfaW50ZXJuYWwoIHRpbWVyLCBvc3BlYyApOwotICAgICAgICB0aHJfdGltZXJfdW5sb2NrKHRpbWVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotaW50Ci10aW1lcl9zZXR0aW1lKHRpbWVyX3QgaWQsIGludCBmbGFncywgY29uc3QgaXRpbWVyc3BlYyogc3BlYywgaXRpbWVyc3BlYyogb3NwZWMpIHsKLSAgICBpZiAoc3BlYyA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKCBfX3ByZWRpY3RfdHJ1ZSghVElNRVJfSURfSVNfV1JBUFBFRChpZCkpICkgewotICAgICAgICByZXR1cm4gX190aW1lcl9zZXR0aW1lKCBpZCwgZmxhZ3MsIHNwZWMsIG9zcGVjICk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGhyX3RpbWVyX3QqICAgICAgICB0aW1lciA9IHRocl90aW1lcl9mcm9tX2lkKGlkKTsKLSAgICAgICAgdGltZXNwZWMgICAgIGV4cGlyZXMsIG5vdzsKLQotICAgICAgICBpZiAodGltZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyX3RpbWVyX2xvY2sodGltZXIpOwotCi0gICAgICAgIC8qIHJldHVybiBjdXJyZW50IHRpbWVyIHZhbHVlIGlmIG9zcGVjIGlzbid0IE5VTEwgKi8KLSAgICAgICAgaWYgKG9zcGVjICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHRpbWVyX2dldHRpbWVfaW50ZXJuYWwodGltZXIsIG9zcGVjICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBjb21wdXRlIG5leHQgZXhwaXJhdGlvbiB0aW1lLiBub3RlIHRoYXQgaWYgdGhlCi0gICAgICAgICAqIG5ldyBpdF9pbnRlcnZhbCBpcyAwLCB3ZSBzaG91bGQgZGlzYXJtIHRoZSB0aW1lcgotICAgICAgICAgKi8KLSAgICAgICAgZXhwaXJlcyA9IHNwZWMtPml0X3ZhbHVlOwotICAgICAgICBpZiAoIXRpbWVzcGVjX2lzX3plcm8oJmV4cGlyZXMpKSB7Ci0gICAgICAgICAgICBjbG9ja19nZXR0aW1lKCB0aW1lci0+Y2xvY2ssICZub3cgKTsKLSAgICAgICAgICAgIGlmICghKGZsYWdzICYgVElNRVJfQUJTVElNRSkpIHsKLSAgICAgICAgICAgICAgICB0aW1lc3BlY19hZGQoJmV4cGlyZXMsICZub3cpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAodGltZXNwZWNfY21wKCZleHBpcmVzLCAmbm93KSA8IDApCi0gICAgICAgICAgICAgICAgICAgIGV4cGlyZXMgPSBub3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3RfY2FzdDx0aW1lc3BlYyY+KHRpbWVyLT5leHBpcmVzKSA9IGV4cGlyZXM7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8dGltZXNwZWMmPih0aW1lci0+cGVyaW9kKSA9IHNwZWMtPml0X2ludGVydmFsOwotICAgICAgICB0aHJfdGltZXJfdW5sb2NrKCB0aW1lciApOwotCi0gICAgICAgIC8qIHNpZ25hbCB0aGUgY2hhbmdlIHRvIHRoZSB0aHJlYWQgKi8KLSAgICAgICAgcHRocmVhZF9jb25kX3NpZ25hbCggJnRpbWVyLT5jb25kICk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0KLWludAotdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90ICBpZCkKLXsKLSAgICBpZiAoIF9fcHJlZGljdF90cnVlKCFUSU1FUl9JRF9JU19XUkFQUEVEKGlkKSkgKSB7Ci0gICAgICAgIHJldHVybiBfX3RpbWVyX2dldG92ZXJydW4oIGlkICk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGhyX3RpbWVyX3QqICB0aW1lciA9IHRocl90aW1lcl9mcm9tX2lkKGlkKTsKLSAgICAgICAgaW50ICAgICAgICAgICByZXN1bHQ7Ci0KLSAgICAgICAgaWYgKHRpbWVyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyX3RpbWVyX2xvY2sodGltZXIpOwotICAgICAgICByZXN1bHQgPSB0aW1lci0+b3ZlcnJ1bnM7Ci0gICAgICAgIHRocl90aW1lcl91bmxvY2sodGltZXIpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfQotCi0KLXN0YXRpYyB2b2lkKiB0aW1lcl90aHJlYWRfc3RhcnQodm9pZCogYXJnKSB7Ci0gIHRocl90aW1lcl90KiB0aW1lciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dGhyX3RpbWVyX3QqPihhcmcpOwotCi0gIHRocl90aW1lcl9sb2NrKHRpbWVyKTsKLQotICAvLyBHaXZlIHRoaXMgdGhyZWFkIGEgbWVhbmluZ2Z1bCBuYW1lLgotICBjaGFyIG5hbWVbMzJdOwotICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJQT1NJWCBpbnRlcnZhbCB0aW1lciAweCUwOHgiLCB0aW1lci0+aWQpOwotICBwdGhyZWFkX3NldG5hbWVfbnAocHRocmVhZF9zZWxmKCksIG5hbWUpOwotCi0gIC8vIFdlIGxvb3AgdW50aWwgdGltZXItPmRvbmUgaXMgc2V0IGluIHRpbWVyX2RlbGV0ZSgpLgotICB3aGlsZSAoIXRpbWVyLT5kb25lKSB7Ci0gICAgdGltZXNwZWMgZXhwaXJlcyA9IGNvbnN0X2Nhc3Q8dGltZXNwZWMmPih0aW1lci0+ZXhwaXJlcyk7Ci0gICAgdGltZXNwZWMgcGVyaW9kID0gY29uc3RfY2FzdDx0aW1lc3BlYyY+KHRpbWVyLT5wZXJpb2QpOwotCi0gICAgLy8gSWYgdGhlIHRpbWVyIGlzIHN0b3BwZWQgb3IgZGlzYXJtZWQsIHdhaXQgaW5kZWZpbml0ZWx5Ci0gICAgLy8gZm9yIGEgc3RhdGUgY2hhbmdlIGZyb20gdGltZXJfc2V0dGltZS9fZGVsZXRlL19zdGFydF9zdG9wLgotICAgIGlmICh0aW1lci0+c3RvcHBlZCB8fCB0aW1lc3BlY19pc196ZXJvKCZleHBpcmVzKSkgewotICAgICAgcHRocmVhZF9jb25kX3dhaXQoJnRpbWVyLT5jb25kLCAmdGltZXItPm11dGV4KTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSwgd2UgbmVlZCB0byBkbyBhIHRpbWVkIHdhaXQgdW50aWwgZWl0aGVyIGEKLSAgICAvLyBzdGF0ZSBjaGFuZ2Ugb2YgdGhlIHRpbWVyIGV4cGlyYXRpb24gdGltZS4KLSAgICB0aW1lc3BlYyBub3c7Ci0gICAgY2xvY2tfZ2V0dGltZSh0aW1lci0+Y2xvY2ssICZub3cpOwotCi0gICAgaWYgKHRpbWVzcGVjX2NtcCgmZXhwaXJlcywgJm5vdykgPiAwKSB7Ci0gICAgICAvLyBDb29sLCB0aGVyZSB3YXMgbm8gb3ZlcnJ1biwgc28gY29tcHV0ZSB0aGUKLSAgICAgIC8vIHJlbGF0aXZlIHRpbWVvdXQgYXMgJ2V4cGlyZXMgLSBub3cnLCB0aGVuIHdhaXQuCi0gICAgICB0aW1lc3BlYyBkaWZmID0gZXhwaXJlczsKLSAgICAgIHRpbWVzcGVjX3N1YigmZGlmZiwgJm5vdyk7Ci0KLSAgICAgIGludCByZXQgPSBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcmVsYXRpdmUoJnRpbWVyLT5jb25kLCAmdGltZXItPm11dGV4LCAmZGlmZik7Ci0KLSAgICAgIC8vIElmIHdlIGRpZG4ndCB0aW1lIG91dCwgaXQgbWVhbnMgdGhhdCBhIHN0YXRlIGNoYW5nZQotICAgICAgLy8gb2NjdXJyZWQsIHNvIGxvb3AgdG8gdGFrZSBjYXJlIG9mIGl0LgotICAgICAgaWYgKHJldCAhPSBFVElNRURPVVQpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIE92ZXJydW4gd2FzIGRldGVjdGVkIGJlZm9yZSB3ZSBjb3VsZCB3YWl0IQotICAgICAgaWYgKCF0aW1lc3BlY19pc196ZXJvKCZwZXJpb2QpKSB7Ci0gICAgICAgIC8vIEZvciBwZXJpb2RpYyB0aW1lcnMsIGNvbXB1dGUgdG90YWwgb3ZlcnJ1biBjb3VudC4KLSAgICAgICAgZG8gewotICAgICAgICAgIHRpbWVzcGVjX2FkZCgmZXhwaXJlcywgJnBlcmlvZCk7Ci0gICAgICAgICAgaWYgKHRpbWVyLT5vdmVycnVucyA8IERFTEFZVElNRVJfTUFYKSB7Ci0gICAgICAgICAgICB0aW1lci0+b3ZlcnJ1bnMgKz0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gd2hpbGUgKHRpbWVzcGVjX2NtcCgmZXhwaXJlcywgJm5vdykgPCAwKTsKLQotICAgICAgICAvLyBCYWNrdHJhY2sgdGhlIGxhc3Qgb25lLCBiZWNhdXNlIHdlJ3JlIGdvaW5nIHRvCi0gICAgICAgIC8vIGFkZCB0aGUgc2FtZSB2YWx1ZSBqdXN0IGEgYml0IGxhdGVyLgotICAgICAgICB0aW1lc3BlY19zdWIoJmV4cGlyZXMsICZwZXJpb2QpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRm9yIG5vbi1wZXJpb2RpYyB0aW1lcnMsIHRoaW5ncyBhcmUgc2ltcGxlLgotICAgICAgICB0aW1lci0+b3ZlcnJ1bnMgPSAxOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIElmIHdlIGdldCBoZXJlLCBhIHRpbWVvdXQgd2FzIGRldGVjdGVkLgotICAgIC8vIEZpcnN0IHJlbG9hZC9kaXNhcm0gdGhlIHRpbWVyIGFzIG5lZWRlZC4KLSAgICBpZiAoIXRpbWVzcGVjX2lzX3plcm8oJnBlcmlvZCkpIHsKLSAgICAgIHRpbWVzcGVjX2FkZCgmZXhwaXJlcywgJnBlcmlvZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRpbWVzcGVjX3plcm8oJmV4cGlyZXMpOwotICAgIH0KLSAgICBjb25zdF9jYXN0PHRpbWVzcGVjJj4odGltZXItPmV4cGlyZXMpID0gZXhwaXJlczsKLQotICAgIC8vIE5vdyBjYWxsIHRoZSB0aW1lciBjYWxsYmFjayBmdW5jdGlvbi4gUmVsZWFzZSB0aGUKLSAgICAvLyBsb2NrIHRvIGFsbG93IHRoZSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHRpbWVyIHNldHRpbmcKLSAgICAvLyBvciBjYWxsIHRpbWVyX2dldG92ZXJydW4oKS4KLSAgICAvLyBOT1RFOiBhdCB0aGlzIHBvaW50IHdlIHRydXN0IHRoZSBjYWxsYmFjayBub3QgdG8gYmUgYQotICAgIC8vICAgICAgdG90YWwgbW9yb24gYW5kIHB0aHJlYWRfa2lsbCgpIHRoZSB0aW1lciB0aHJlYWQKLSAgICB0aHJfdGltZXJfdW5sb2NrKHRpbWVyKTsKLSAgICB0aW1lci0+Y2FsbGJhY2sodGltZXItPnZhbHVlKTsKLSAgICB0aHJfdGltZXJfbG9jayh0aW1lcik7Ci0KLSAgICAvLyBOb3cgY2xlYXIgdGhlIG92ZXJydW5zIGNvdW50ZXIuIGl0IG9ubHkgbWFrZXMgc2Vuc2UKLSAgICAvLyB3aXRoaW4gdGhlIGNhbGxiYWNrLgotICAgIHRpbWVyLT5vdmVycnVucyA9IDA7Ci0gIH0KLQotICB0aHJfdGltZXJfdW5sb2NrKHRpbWVyKTsKLQotICAvLyBGcmVlIHRoZSB0aW1lciBvYmplY3QuCi0gIHRocl90aW1lcl90YWJsZV9mcmVlKF9fdGltZXJfdGFibGVfZ2V0KCksIHRpbWVyKTsKLQotICByZXR1cm4gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3RtcGZpbGUuY3BwIGIvbGliYy9iaW9uaWMvdG1wZmlsZS5jcHAKaW5kZXggODQxOWZmNS4uNjAyZDQwNyAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvdG1wZmlsZS5jcHAKKysrIGIvbGliYy9iaW9uaWMvdG1wZmlsZS5jcHAKQEAgLTU3LDIyICs1NywyMyBAQAogfTsKIAogc3RhdGljIEZJTEUqIF9fdG1wZmlsZV9kaXIoY29uc3QgY2hhciogdG1wX2RpcikgewotICBjaGFyIGJ1ZltQQVRIX01BWF07Ci0gIGludCBwYXRoX2xlbmd0aCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy90bXAuWFhYWFhYWFhYWCIsIHRtcF9kaXIpOwotICBpZiAocGF0aF9sZW5ndGggPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoYnVmKSkpIHsKKyAgY2hhciogcGF0aCA9IE5VTEw7CisgIGlmIChhc3ByaW50ZigmcGF0aCwgIiVzL3RtcC5YWFhYWFhYWFhYIiwgdG1wX2RpcikgPT0gLTEpIHsKICAgICByZXR1cm4gTlVMTDsKICAgfQogCiAgIGludCBmZDsKICAgewogICAgIFNjb3BlZFNpZ25hbEJsb2NrZXIgc3NiOwotICAgIGZkID0gbWtzdGVtcChidWYpOworICAgIGZkID0gbWtzdGVtcChwYXRoKTsKICAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgIGZyZWUocGF0aCk7CiAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvLyBVbmxpbmsgdGhlIGZpbGUgbm93IHNvIHRoYXQgaXQncyByZW1vdmVkIHdoZW4gY2xvc2VkLgotICAgIHVubGluayhidWYpOworICAgIHVubGluayhwYXRoKTsKKyAgICBmcmVlKHBhdGgpOwogCiAgICAgLy8gQ2FuIHdlIHN0aWxsIHVzZSB0aGUgZmlsZSBub3cgaXQncyB1bmxpbmtlZD8KICAgICAvLyBGaWxlIHN5c3RlbXMgd2l0aG91dCBoYXJkIGxpbmsgc3VwcG9ydCB3b24ndCBoYXZlIHRoZSB1c3VhbCBVbml4IHNlbWFudGljcy4KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3Vtb3VudC5jIGIvbGliYy9iaW9uaWMvdW1vdW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MmU0MmMuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvdW1vdW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLWV4dGVybiBpbnQgIHVtb3VudDIoY29uc3QgY2hhciosIGludCk7Ci0KLWludCAgdW1vdW50KGNvbnN0IGNoYXIqICBkaXIpCi17Ci0gIHJldHVybiB1bW91bnQyKGRpciwgMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy91bW91bnQuY3BwIGIvbGliYy9iaW9uaWMvdW1vdW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzgwYmFmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvdW1vdW50LmNwcApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKworaW50IHVtb3VudChjb25zdCBjaGFyKiB0YXJnZXQpIHsKKyAgcmV0dXJuIHVtb3VudDIodGFyZ2V0LCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3VubG9ja3B0LmMgYi9saWJjL2Jpb25pYy91bmxvY2twdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OThiN2EzLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3VubG9ja3B0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0KLWludCAgdW5sb2NrcHQoIGludCAgZmQgKQotewotICAgIGludCAgdW5sb2NrID0gMDsKLQotICAgIHJldHVybiBpb2N0bCggZmQsIFRJT0NTUFRMQ0ssICZ1bmxvY2sgKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3V0bXAuYyBiL2xpYmMvYmlvbmljL3V0bXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNiNTVkYS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy91dG1wLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMiBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KLSAqIGJ5IENocmlzdG9zIFpvdWxhcy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAotICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwotICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPHV0bXAuaD4KLQotc3RhdGljIHN0cnVjdCB1dG1wIHV0bXA7Ci1zdGF0aWMgRklMRSAqdXQ7Ci1zdGF0aWMgY2hhciB1dGZpbGVbTUFYUEFUSExFTl0gPSBfUEFUSF9VVE1QOwotCi12b2lkCi1zZXR1dGVudCh2b2lkKQotewotCWlmICh1dCA9PSBOVUxMKQotCQlyZXR1cm47Ci0JKHZvaWQpZnNlZWtvKHV0LCAob2ZmX3QpMCwgU0VFS19TRVQpOwotfQotCi1zdHJ1Y3QgdXRtcCAqCi1nZXR1dGVudCh2b2lkKQotewotCWlmICh1dCA9PSBOVUxMKSB7Ci0JCWlmICgodXQgPSBmb3Blbih1dGZpbGUsICJyIikpID09IE5VTEwpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaWYgKGZyZWFkKCZ1dG1wLCBzaXplb2YodXRtcCksIDEsIHV0KSA9PSAxKQotCQlyZXR1cm4gJnV0bXA7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQKLWVuZHV0ZW50KHZvaWQpCi17Ci0JaWYgKHV0ICE9IE5VTEwpIHsKLQkJKHZvaWQpZmNsb3NlKHV0KTsKLQkJdXQgPSBOVUxMOwotCX0KLX0KLQotaW50Ci11dG1wbmFtZShjb25zdCBjaGFyICpmbmFtZSkKLXsKLQlzaXplX3QgbGVuID0gc3RybGVuKGZuYW1lKTsKLQotCWlmIChsZW4gPj0gc2l6ZW9mKHV0ZmlsZSkpCi0JCXJldHVybiAwOwotCi0JLyogbXVzdCBub3QgZW5kIGluIHghICovCi0JaWYgKGZuYW1lW2xlbiAtIDFdID09ICd4JykKLQkJcmV0dXJuIDA7Ci0KLQkodm9pZClzdHJsY3B5KHV0ZmlsZSwgZm5hbWUsIHNpemVvZih1dGZpbGUpKTsKLQllbmR1dGVudCgpOwotCXJldHVybiAxOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdmRzby5jcHAgYi9saWJjL2Jpb25pYy92ZHNvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODc1ZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvdmRzby5jcHAKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGluay5oPgorI2luY2x1ZGUgPHN5cy9hdXh2Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8vIHg4NiBoYXMgYSB2ZHNvLCBidXQgdGhlcmUncyBub3RoaW5nIHVzZWZ1bCB0byB1cyBpbiBpdC4KKyNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorI2RlZmluZSBWRFNPX0NMT0NLX0dFVFRJTUVfU1lNQk9MICJfX2tlcm5lbF9jbG9ja19nZXR0aW1lIgorI2RlZmluZSBWRFNPX0dFVFRJTUVPRkRBWV9TWU1CT0wgICJfX2tlcm5lbF9nZXR0aW1lb2ZkYXkiCisjZWxpZiBkZWZpbmVkKF9feDg2XzY0X18pCisjZGVmaW5lIFZEU09fQ0xPQ0tfR0VUVElNRV9TWU1CT0wgIl9fdmRzb19jbG9ja19nZXR0aW1lIgorI2RlZmluZSBWRFNPX0dFVFRJTUVPRkRBWV9TWU1CT0wgICJfX3Zkc29fZ2V0dGltZW9mZGF5IgorI2VuZGlmCisKKyNpbmNsdWRlIDx0aW1lLmg+CisKK2V4dGVybiAiQyIgaW50IF9fY2xvY2tfZ2V0dGltZShpbnQsIHRpbWVzcGVjKik7CitleHRlcm4gIkMiIGludCBfX2dldHRpbWVvZmRheSh0aW1ldmFsKiwgc3RydWN0IHRpbWV6b25lKik7CisKK3N0cnVjdCB2ZHNvX2VudHJ5IHsKKyAgY29uc3QgY2hhciogbmFtZTsKKyAgdm9pZCogZm47Cit9OworCitlbnVtIHsKKyAgVkRTT19DTE9DS19HRVRUSU1FID0gMCwKKyAgVkRTT19HRVRUSU1FT0ZEQVksCisgIFZEU09fRU5ECit9OworCitzdGF0aWMgdmRzb19lbnRyeSB2ZHNvX2VudHJpZXNbXSA9IHsKKyAgW1ZEU09fQ0xPQ0tfR0VUVElNRV0gPSB7IFZEU09fQ0xPQ0tfR0VUVElNRV9TWU1CT0wsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9fY2xvY2tfZ2V0dGltZSkgfSwKKyAgW1ZEU09fR0VUVElNRU9GREFZXSA9IHsgVkRTT19HRVRUSU1FT0ZEQVlfU1lNQk9MLCByZWludGVycHJldF9jYXN0PHZvaWQqPihfX2dldHRpbWVvZmRheSkgfSwKK307CisKK2ludCBjbG9ja19nZXR0aW1lKGludCBjbG9ja19pZCwgdGltZXNwZWMqIHRwKSB7CisgIHN0YXRpYyBpbnQgKCp2ZHNvX2Nsb2NrX2dldHRpbWUpKGludCwgdGltZXNwZWMqKSA9CisgICAgICAoaW50ICgqKShpbnQsIHRpbWVzcGVjKikpIHZkc29fZW50cmllc1tWRFNPX0NMT0NLX0dFVFRJTUVdLmZuOworICByZXR1cm4gdmRzb19jbG9ja19nZXR0aW1lKGNsb2NrX2lkLCB0cCk7Cit9CisKK2ludCBnZXR0aW1lb2ZkYXkodGltZXZhbCogdHYsIHN0cnVjdCB0aW1lem9uZSogdHopIHsKKyAgc3RhdGljIGludCAoKnZkc29fZ2V0dGltZW9mZGF5KSh0aW1ldmFsKiwgc3RydWN0IHRpbWV6b25lKikgPQorICAgICAgKGludCAoKikodGltZXZhbCosIHN0cnVjdCB0aW1lem9uZSopKSB2ZHNvX2VudHJpZXNbVkRTT19HRVRUSU1FT0ZEQVldLmZuOworICByZXR1cm4gdmRzb19nZXR0aW1lb2ZkYXkodHYsIHR6KTsKK30KKwordm9pZCBfX2xpYmNfaW5pdF92ZHNvKCkgeworICAvLyBEbyB3ZSBoYXZlIGEgdmRzbz8KKyAgdWludHB0cl90IHZkc29fZWhkcl9hZGRyID0gZ2V0YXV4dmFsKEFUX1NZU0lORk9fRUhEUik7CisgIEVsZlcoRWhkcikqIHZkc29fZWhkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhFaGRyKSo+KHZkc29fZWhkcl9hZGRyKTsKKyAgaWYgKHZkc29fZWhkciA9PSBOVUxMKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gSG93IG1hbnkgc3ltYm9scyBkb2VzIGl0IGhhdmU/CisgIHNpemVfdCBzeW1ib2xfY291bnQgPSAwOworICBFbGZXKFNoZHIpKiB2ZHNvX3NoZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoU2hkcikqPih2ZHNvX2VoZHJfYWRkciArIHZkc29fZWhkci0+ZV9zaG9mZik7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmRzb19laGRyLT5lX3NobnVtOyArK2kpIHsKKyAgICBpZiAodmRzb19zaGRyW2ldLnNoX3R5cGUgPT0gU0hUX0RZTlNZTSkgeworICAgICAgc3ltYm9sX2NvdW50ID0gdmRzb19zaGRyW2ldLnNoX3NpemUgLyBzaXplb2YoRWxmVyhTeW0pKTsKKyAgICB9CisgIH0KKyAgaWYgKHN5bWJvbF9jb3VudCA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gV2hlcmUncyB0aGUgZHluYW1pYyB0YWJsZT8KKyAgRWxmVyhBZGRyKSB2ZHNvX2FkZHIgPSAwOworICBFbGZXKER5bikqIHZkc29fZHluID0gTlVMTDsKKyAgRWxmVyhQaGRyKSogdmRzb19waGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFBoZHIpKj4odmRzb19laGRyX2FkZHIgKyB2ZHNvX2VoZHItPmVfcGhvZmYpOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZkc29fZWhkci0+ZV9waG51bTsgKytpKSB7CisgICAgaWYgKHZkc29fcGhkcltpXS5wX3R5cGUgPT0gUFRfRFlOQU1JQykgeworICAgICAgdmRzb19keW4gPSByZWludGVycHJldF9jYXN0PEVsZlcoRHluKSo+KHZkc29fZWhkcl9hZGRyICsgdmRzb19waGRyW2ldLnBfb2Zmc2V0KTsKKyAgICB9IGVsc2UgaWYgKHZkc29fcGhkcltpXS5wX3R5cGUgPT0gUFRfTE9BRCkgeworICAgICAgdmRzb19hZGRyID0gdmRzb19laGRyX2FkZHIgKyB2ZHNvX3BoZHJbaV0ucF9vZmZzZXQgLSB2ZHNvX3BoZHJbaV0ucF92YWRkcjsKKyAgICB9CisgIH0KKyAgaWYgKHZkc29fYWRkciA9PSAwIHx8IHZkc29fZHluID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBXaGVyZSBhcmUgdGhlIHN0cmluZyBhbmQgc3ltYm9sIHRhYmxlcz8KKyAgY29uc3QgY2hhciogc3RydGFiID0gTlVMTDsKKyAgRWxmVyhTeW0pKiBzeW10YWIgPSBOVUxMOworICBmb3IgKEVsZlcoRHluKSogZCA9IHZkc29fZHluOyBkLT5kX3RhZyAhPSBEVF9OVUxMOyArK2QpIHsKKyAgICBpZiAoZC0+ZF90YWcgPT0gRFRfU1RSVEFCKSB7CisgICAgICBzdHJ0YWIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2ZHNvX2FkZHIgKyBkLT5kX3VuLmRfcHRyKTsKKyAgICB9IGVsc2UgaWYgKGQtPmRfdGFnID09IERUX1NZTVRBQikgeworICAgICAgc3ltdGFiID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFN5bSkqPih2ZHNvX2FkZHIgKyBkLT5kX3VuLmRfcHRyKTsKKyAgICB9CisgIH0KKyAgaWYgKHN0cnRhYiA9PSBOVUxMIHx8IHN5bXRhYiA9PSBOVUxMKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gQXJlIHRoZXJlIGFueSBzeW1ib2xzIHdlIHdhbnQ/CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3ltYm9sX2NvdW50OyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFZEU09fRU5EOyArK2opIHsKKyAgICAgIGlmIChzdHJjbXAodmRzb19lbnRyaWVzW2pdLm5hbWUsIHN0cnRhYiArIHN5bXRhYltpXS5zdF9uYW1lKSA9PSAwKSB7CisgICAgICAgIHZkc29fZW50cmllc1tqXS5mbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZkc29fYWRkciArIHN5bXRhYltpXS5zdF92YWx1ZSk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKyNlbHNlCisKK3ZvaWQgX19saWJjX2luaXRfdmRzbygpIHsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy93YWl0LmNwcCBiL2xpYmMvYmlvbmljL3dhaXQuY3BwCmluZGV4IGNkNzVjMTAuLmU1YzkzYWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3dhaXQuY3BwCisrKyBiL2xpYmMvYmlvbmljL3dhaXQuY3BwCkBAIC0zNSwxMCArMzUsNiBAQAogICByZXR1cm4gd2FpdDQoLTEsIHN0YXR1cywgMCwgTlVMTCk7CiB9CiAKLXBpZF90IHdhaXQzKGludCogc3RhdHVzLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSogcnVzYWdlKSB7Ci0gIHJldHVybiB3YWl0NCgtMSwgc3RhdHVzLCBvcHRpb25zLCBydXNhZ2UpOwotfQotCiBwaWRfdCB3YWl0cGlkKHBpZF90IHBpZCwgaW50KiBzdGF0dXMsIGludCBvcHRpb25zKSB7CiAgIHJldHVybiB3YWl0NChwaWQsIHN0YXR1cywgb3B0aW9ucywgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy93Y2hhci5jcHAgYi9saWJjL2Jpb25pYy93Y2hhci5jcHAKaW5kZXggNTBhMzg3NS4uZTA4NzliOSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvd2NoYXIuY3BwCisrKyBiL2xpYmMvYmlvbmljL3djaGFyLmNwcApAQCAtMSwyODYgKzEsMjQ1IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKy8qCSRPcGVuQlNEOiBjaXRydXNfdXRmOC5jLHYgMS42IDIwMTIvMTIvMDUgMjM6MTk6NTkgZGVyYWFkdCBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFRpbSBKLiBSb2JiaW5zCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8dWNoYXIuaD4KIAotLyogc3R1YnMgZm9yIHdpZGUtY2hhciBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYnN0YXRlLmgiCiAKLXdpbnRfdCBidG93YyhpbnQgYykgewotICByZXR1cm4gKGMgPT0gRU9GKSA/IFdFT0YgOiBjOworLy8KKy8vIFRoaXMgZmlsZSBpcyBiYXNpY2FsbHkgT3BlbkJTRCdzIGNpdHJ1c191dGY4LmMgYnV0IHJld3JpdHRlbiB0byBub3QgcmVxdWlyZSBhCisvLyAxMi1ieXRlIG1ic3RhdGVfdCBzbyB3ZSdyZSBiYWNrd2FyZHMtY29tcGF0aWJsZSB3aXRoIG91ciBMUDMyIEFCSSB3aGVyZQorLy8gbWJzdGF0ZV90IHdhcyBvbmx5IDQgYnl0ZXMuCisvLworLy8gVGhlIHN0YXRlIGlzIHRoZSBVVEYtOCBzZXF1ZW5jZS4gV2Ugb25seSBzdXBwb3J0IDw9IDQtYnl0ZXMgc2VxdWVuY2VzIHNvIExQMzIKKy8vIG1ic3RhdGVfdCBhbHJlYWR5IGhhcyBlbm91Z2ggc3BhY2UgKG91dCBvZiB0aGUgNCBhdmFpbGFibGUgYnl0ZXMgd2Ugb25seQorLy8gbmVlZCAzIHNpbmNlIHdlIHNob3VsZCBuZXZlciBuZWVkIHRvIHN0b3JlIHRoZSBlbnRpcmUgc2VxdWVuY2UgaW4gdGhlCisvLyBpbnRlcm1lZGlhcnkgc3RhdGUpLgorLy8KKy8vIFRoZSBDIHN0YW5kYXJkIGxlYXZlcyB0aGUgY29udmVyc2lvbiBzdGF0ZSB1bmRlZmluZWQgYWZ0ZXIgYSBiYWQgY29udmVyc2lvbi4KKy8vIFRvIGF2b2lkIHVuZXhwZWN0ZWQgZmFpbHVyZXMgZHVlIHRvIHRoZSBwb3NzaWJsZSB1c2Ugb2YgdGhlIGludGVybmFsIHByaXZhdGUKKy8vIHN0YXRlIHdlIGFsd2F5cyByZXNldCB0aGUgY29udmVyc2lvbiBzdGF0ZSB3aGVuIGVuY291bnRlcmluZyBpbGxlZ2FsCisvLyBzZXF1ZW5jZXMuCisvLworLy8gV2UgYWxzbyBpbXBsZW1lbnQgdGhlIFBPU0lYIGludGVyZmFjZSBkaXJlY3RseSByYXRoZXIgdGhhbiBiZWluZyBhY2Nlc3NlZCB2aWEKKy8vIGZ1bmN0aW9uIHBvaW50ZXJzLgorLy8KKworaW50IG1ic2luaXQoY29uc3QgbWJzdGF0ZV90KiBwcykgeworICByZXR1cm4gKHBzID09IE5VTEwgfHwgKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHBzLT5fX3NlcSkpID09IDApKTsKIH0KIAotaW50IGZ3cHJpbnRmKEZJTEUqIHN0cmVhbSwgY29uc3Qgd2NoYXJfdCogZm9ybWF0LCAuLi4pIHsKLSAgdmFfbGlzdCBhcmdzOwotICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICBpbnQgcmVzdWx0ID0gdmZ3cHJpbnRmKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKLSAgdmFfZW5kKGFyZ3MpOwotICByZXR1cm4gcmVzdWx0Oworc2l6ZV90IG1icnRvd2Mod2NoYXJfdCogcHdjLCBjb25zdCBjaGFyKiBzLCBzaXplX3QgbiwgbWJzdGF0ZV90KiBwcykgeworICBzdGF0aWMgbWJzdGF0ZV90IF9fcHJpdmF0ZV9zdGF0ZTsKKyAgbWJzdGF0ZV90KiBzdGF0ZSA9IChwcyA9PSBOVUxMKSA/ICZfX3ByaXZhdGVfc3RhdGUgOiBwczsKKworICAvLyBPdXIgd2NoYXJfdCBpcyBVVEYtMzIKKyAgcmV0dXJuIG1icnRvYzMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcjMyX3QqPihwd2MpLCBzLCBuLCBzdGF0ZSk7CiB9CiAKLWludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QqIGZvcm1hdCwgLi4uKSB7Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLSAgaW50IHJlc3VsdCA9IHZ3cHJpbnRmKGZvcm1hdCwgYXJncyk7Ci0gIHZhX2VuZChhcmdzKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KK3NpemVfdCBtYnNucnRvd2NzKHdjaGFyX3QqIGRzdCwgY29uc3QgY2hhcioqIHNyYywgc2l6ZV90IG5tYywgc2l6ZV90IGxlbiwgbWJzdGF0ZV90KiBwcykgeworICBzdGF0aWMgbWJzdGF0ZV90IF9fcHJpdmF0ZV9zdGF0ZTsKKyAgbWJzdGF0ZV90KiBzdGF0ZSA9IChwcyA9PSBOVUxMKSA/ICZfX3ByaXZhdGVfc3RhdGUgOiBwczsKKyAgc2l6ZV90IGksIG8sIHI7CiAKLWludCBzd3ByaW50Zih3Y2hhcl90KiBzLCBzaXplX3QgbiwgY29uc3Qgd2NoYXJfdCogZm9ybWF0LCAuLi4pIHsKLSAgdmFfbGlzdCBhcmdzOwotICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICBpbnQgcmVzdWx0ID0gdnN3cHJpbnRmKHMsIG4sIGZvcm1hdCwgYXJncyk7Ci0gIHZhX2VuZChhcmdzKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IHZ3cHJpbnRmKGNvbnN0IHdjaGFyX3QqIGZvcm1hdCwgdmFfbGlzdCBhcmcpIHsKLSAgcmV0dXJuIHZmd3ByaW50ZihzdGRvdXQsIGZvcm1hdCwgYXJnKTsKLX0KLQotaW50IHZmd3ByaW50ZihGSUxFKiAvKnN0cmVhbSovLCBjb25zdCB3Y2hhcl90KiAvKmZvcm1hdCovLCB2YV9saXN0IC8qYXJnKi8pIHsKLSAgZXJybm8gPSBFTk9UU1VQOwotICByZXR1cm4gLTE7Ci19Ci0KLWludCB2c3dwcmludGYod2NoYXJfdCogLypzKi8sIHNpemVfdCAvKm4qLywgY29uc3Qgd2NoYXJfdCogLypmb3JtYXQqLywgdmFfbGlzdCAvKmFyZyovKSB7Ci0gIGVycm5vID0gRU5PVFNVUDsKLSAgcmV0dXJuIC0xOwotfQotCi1pbnQgZndzY2FuZihGSUxFKiAvKnN0cmVhbSovLCBjb25zdCB3Y2hhcl90KiAvKmZvcm1hdCovLCAuLi4gKSB7Ci0gIGVycm5vID0gRU5PVFNVUDsKLSAgcmV0dXJuIC0xOwotfQotCi1pbnQgd3NjYW5mKGNvbnN0IHdjaGFyX3QqIGZvcm1hdCwgLi4uICkgewotICB2YV9saXN0IGFyZ3M7Ci0gIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOwotICBpbnQgcmVzdWx0ID0gZndzY2FuZihzdGRvdXQsIGZvcm1hdCwgYXJncyApOwotICB2YV9lbmQgKGFyZ3MpOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1pbnQgc3dzY2FuZihjb25zdCB3Y2hhcl90KiAvKnMqLywgY29uc3Qgd2NoYXJfdCogLypmb3JtYXQqLywgLi4uICkgewotICBlcnJubyA9IEVOT1RTVVA7Ci0gIHJldHVybiAtMTsKLX0KLQotaW50IGlzd2FsbnVtKHdpbnRfdCB3YykgeyByZXR1cm4gaXNhbG51bSh3Yyk7IH0KLWludCBpc3dhbHBoYSh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzYWxwaGEod2MpOyB9Ci1pbnQgaXN3Y250cmwod2ludF90IHdjKSB7IHJldHVybiBpc2NudHJsKHdjKTsgfQotaW50IGlzd2RpZ2l0KHdpbnRfdCB3YykgeyByZXR1cm4gaXNkaWdpdCh3Yyk7IH0KLWludCBpc3dncmFwaCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzZ3JhcGgod2MpOyB9Ci1pbnQgaXN3bG93ZXIod2ludF90IHdjKSB7IHJldHVybiBpc2xvd2VyKHdjKTsgfQotaW50IGlzd3ByaW50KHdpbnRfdCB3YykgeyByZXR1cm4gaXNwcmludCh3Yyk7IH0KLWludCBpc3dwdW5jdCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzcHVuY3Qod2MpOyB9Ci1pbnQgaXN3c3BhY2Uod2ludF90IHdjKSB7IHJldHVybiBpc3NwYWNlKHdjKTsgfQotaW50IGlzd3VwcGVyKHdpbnRfdCB3YykgeyByZXR1cm4gaXN1cHBlcih3Yyk7IH0KLWludCBpc3d4ZGlnaXQod2ludF90IHdjKSB7IHJldHVybiBpc3hkaWdpdCh3Yyk7IH0KLQotaW50IGlzd2N0eXBlKHdpbnRfdCB3Yywgd2N0eXBlX3QgY2hhcl9jbGFzcykgewotICBzd2l0Y2ggKGNoYXJfY2xhc3MpIHsKLSAgICBjYXNlIFdDX1RZUEVfQUxOVU06IHJldHVybiBpc2FsbnVtKHdjKTsKLSAgICBjYXNlIFdDX1RZUEVfQUxQSEE6IHJldHVybiBpc2FscGhhKHdjKTsKLSAgICBjYXNlIFdDX1RZUEVfQkxBTks6IHJldHVybiBpc2JsYW5rKHdjKTsKLSAgICBjYXNlIFdDX1RZUEVfQ05UUkw6IHJldHVybiBpc2NudHJsKHdjKTsKLSAgICBjYXNlIFdDX1RZUEVfRElHSVQ6IHJldHVybiBpc2RpZ2l0KHdjKTsKLSAgICBjYXNlIFdDX1RZUEVfR1JBUEg6IHJldHVybiBpc2dyYXBoKHdjKTsKLSAgICBjYXNlIFdDX1RZUEVfTE9XRVI6IHJldHVybiBpc2xvd2VyKHdjKTsKLSAgICBjYXNlIFdDX1RZUEVfUFJJTlQ6IHJldHVybiBpc3ByaW50KHdjKTsKLSAgICBjYXNlIFdDX1RZUEVfUFVOQ1Q6IHJldHVybiBpc3B1bmN0KHdjKTsKLSAgICBjYXNlIFdDX1RZUEVfU1BBQ0U6IHJldHVybiBpc3NwYWNlKHdjKTsKLSAgICBjYXNlIFdDX1RZUEVfVVBQRVI6IHJldHVybiBpc3VwcGVyKHdjKTsKLSAgICBjYXNlIFdDX1RZUEVfWERJR0lUOiByZXR1cm4gaXN4ZGlnaXQod2MpOwotICAgIGRlZmF1bHQ6IHJldHVybiAwOworICBpZiAoZHN0ID09IE5VTEwpIHsKKyAgICAvKgorICAgICAqIFRoZSBmYXN0IHBhdGggaW4gdGhlIGxvb3AgYmVsb3cgaXMgbm90IHNhZmUgaWYgYW4gQVNDSUkKKyAgICAgKiBjaGFyYWN0ZXIgYXBwZWFycyBhcyBhbnl0aGluZyBidXQgdGhlIGZpcnN0IGJ5dGUgb2YgYQorICAgICAqIG11bHRpYnl0ZSBzZXF1ZW5jZS4gQ2hlY2sgbm93IHRvIGF2b2lkIGRvaW5nIGl0IGluIHRoZSBsb29wLgorICAgICAqLworICAgIGlmICgobm1jID4gMCkgJiYgKG1ic3RhdGVfYnl0ZXNfc29fZmFyKHN0YXRlKSA+IDApCisgICAgICAgICYmIChzdGF0aWNfY2FzdDx1aW50OF90PigoKnNyYylbMF0pIDwgMHg4MCkpIHsKKyAgICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuX2lsbGVnYWwoRUlMU0VRLCBzdGF0ZSk7CisgICAgfQorICAgIGZvciAoaSA9IG8gPSAwOyBpIDwgbm1jOyBpICs9IHIsIG8rKykgeworICAgICAgaWYgKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCgqc3JjKVtpXSkgPCAweDgwKSB7CisgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgcGxhaW4gQVNDSUkgY2hhcmFjdGVycy4KKyAgICAgICAgaWYgKCgqc3JjKVtpXSA9PSAnXDAnKSB7CisgICAgICAgICAgKnNyYyA9IG51bGxwdHI7CisgICAgICAgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm4obywgc3RhdGUpOworICAgICAgICB9CisgICAgICAgIHIgPSAxOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgciA9IG1icnRvd2MoTlVMTCwgKnNyYyArIGksIG5tYyAtIGksIHN0YXRlKTsKKyAgICAgICAgaWYgKHIgPT0gX19NQl9FUlJfSUxMRUdBTF9TRVFVRU5DRSkgeworICAgICAgICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuX2lsbGVnYWwoRUlMU0VRLCBzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHIgPT0gX19NQl9FUlJfSU5DT01QTEVURV9TRVFVRU5DRSkgeworICAgICAgICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuX2lsbGVnYWwoRUlMU0VRLCBzdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHIgPT0gMCkgeworICAgICAgICAgICpzcmMgPSBudWxscHRyOworICAgICAgICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuKG8sIHN0YXRlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybihvLCBzdGF0ZSk7CiAgIH0KLX0KIAotd2ludF90IGZnZXR3YyhGSUxFKiBzdHJlYW0pIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PHdpbnRfdD4oZmdldGMoc3RyZWFtKSk7Ci19Ci0KLXdjaGFyX3QqIGZnZXR3cyh3Y2hhcl90KiB3cywgaW50IG4sIEZJTEUqIHN0cmVhbSkgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oZmdldHMocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4od3MpLCBuLCBzdHJlYW0pKTsKLX0KLQotd2ludF90IGZwdXR3Yyh3Y2hhcl90IHdjLCBGSUxFKiBzdHJlYW0pIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PHdpbnRfdD4oZnB1dGMoc3RhdGljX2Nhc3Q8Y2hhcj4od2MpLCBzdHJlYW0pKTsKLX0KLQotaW50IGZwdXR3cyhjb25zdCB3Y2hhcl90KiBzdHIsIEZJTEUqIHN0cmVhbSkgewotICByZXR1cm4gZnB1dHMocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3RyKSwgc3RyZWFtICk7Ci19Ci0KLWludCBmd2lkZShGSUxFKiAvKnN0cmVhbSovLCBpbnQgbW9kZSkgewotICByZXR1cm4gbW9kZTsKLX0KLQotd2ludF90IGdldHdjKEZJTEUqIHN0cmVhbSkgewotICByZXR1cm4gZ2V0YyhzdHJlYW0pOwotfQotCi13aW50X3QgZ2V0d2NoYXIoKSB7Ci0gIHJldHVybiBnZXRjaGFyKCk7Ci19Ci0KLWludCBtYnNpbml0KGNvbnN0IG1ic3RhdGVfdCogLypwcyovKSB7Ci0gIHJldHVybiAxOwotfQotCi1zaXplX3QgbWJybGVuKGNvbnN0IGNoYXIqIC8qcyovLCBzaXplX3QgbiwgbWJzdGF0ZV90KiAvKnBzKi8pIHsKLSAgcmV0dXJuIChuICE9IDApOwotfQotCi1zaXplX3QgbWJydG93Yyh3Y2hhcl90KiBwd2MsIGNvbnN0IGNoYXIqIHMsIHNpemVfdCBuLCBtYnN0YXRlX3QqIC8qcHMqLykgewotICBpZiAocyA9PSBOVUxMKSB7Ci0gICAgcyAgID0gIiI7Ci0gICAgcHdjID0gTlVMTDsKKyAgLyoKKyAgICogVGhlIGZhc3QgcGF0aCBpbiB0aGUgbG9vcCBiZWxvdyBpcyBub3Qgc2FmZSBpZiBhbiBBU0NJSQorICAgKiBjaGFyYWN0ZXIgYXBwZWFycyBhcyBhbnl0aGluZyBidXQgdGhlIGZpcnN0IGJ5dGUgb2YgYQorICAgKiBtdWx0aWJ5dGUgc2VxdWVuY2UuIENoZWNrIG5vdyB0byBhdm9pZCBkb2luZyBpdCBpbiB0aGUgbG9vcC4KKyAgICovCisgIGlmICgobm1jID4gMCkgJiYgKG1ic3RhdGVfYnl0ZXNfc29fZmFyKHN0YXRlKSA+IDApCisgICAgICAmJiAoc3RhdGljX2Nhc3Q8dWludDhfdD4oKCpzcmMpWzBdKSA8IDB4ODApKSB7CisgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSUxTRVEsIHN0YXRlKTsKICAgfQotICBpZiAobiA9PSAwKSB7Ci0gICAgaWYgKHB3YykgewotICAgICAgKnB3YyA9IDA7Ci0gICAgICByZXR1cm4gMDsKKyAgZm9yIChpID0gbyA9IDA7IGkgPCBubWMgJiYgbyA8IGxlbjsgaSArPSByLCBvKyspIHsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDhfdD4oKCpzcmMpW2ldKSA8IDB4ODApIHsKKyAgICAgIC8vIEZhc3QgcGF0aCBmb3IgcGxhaW4gQVNDSUkgY2hhcmFjdGVycy4KKyAgICAgIGRzdFtvXSA9ICgqc3JjKVtpXTsKKyAgICAgIHIgPSAxOworICAgICAgaWYgKCgqc3JjKVtpXSA9PSAnXDAnKSB7CisgICAgICAgICpzcmMgPSBudWxscHRyOworICAgICAgICByZXR1cm4gcmVzZXRfYW5kX3JldHVybihvLCBzdGF0ZSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHIgPSBtYnJ0b3djKGRzdCArIG8sICpzcmMgKyBpLCBubWMgLSBpLCBzdGF0ZSk7CisgICAgICBpZiAociA9PSBfX01CX0VSUl9JTExFR0FMX1NFUVVFTkNFKSB7CisgICAgICAgICpzcmMgKz0gaTsKKyAgICAgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm5faWxsZWdhbChFSUxTRVEsIHN0YXRlKTsKKyAgICAgIH0KKyAgICAgIGlmIChyID09IF9fTUJfRVJSX0lOQ09NUExFVEVfU0VRVUVOQ0UpIHsKKyAgICAgICAgKnNyYyArPSBubWM7CisgICAgICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuKEVJTFNFUSwgc3RhdGUpOworICAgICAgfQorICAgICAgaWYgKHIgPT0gMCkgeworICAgICAgICAqc3JjID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm4obywgc3RhdGUpOworICAgICAgfQogICAgIH0KICAgfQotICBpZiAocHdjKSB7Ci0gICAgKnB3YyA9ICpzOwotICB9Ci0gIHJldHVybiAoKnMgIT0gMCk7CisgICpzcmMgKz0gaTsKKyAgcmV0dXJuIHJlc2V0X2FuZF9yZXR1cm4obywgc3RhdGUpOwogfQogCi1zaXplX3QgbWJzcnRvd2NzKHdjaGFyX3QqIGRzdCwgY29uc3QgY2hhcioqIHNyYywgc2l6ZV90IGxlbiwgbWJzdGF0ZV90KiAvKnBzKi8pIHsKLSAgY29uc3QgY2hhciogcyAgPSAqc3JjOwotICBjb25zdCBjaGFyKiBzMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1lbWNocihzLCAwLCBsZW4pKTsKK3NpemVfdCBtYnNydG93Y3Mod2NoYXJfdCogZHN0LCBjb25zdCBjaGFyKiogc3JjLCBzaXplX3QgbGVuLCBtYnN0YXRlX3QqIHBzKSB7CisgIHJldHVybiBtYnNucnRvd2NzKGRzdCwgc3JjLCBTSVpFX01BWCwgbGVuLCBwcyk7Cit9CiAKLSAgaWYgKHMyICE9IE5VTEwpIHsKLSAgICBsZW4gPSAoc2l6ZV90KShzMiAtIHMpICsgMVU7CitzaXplX3Qgd2NydG9tYihjaGFyKiBzLCB3Y2hhcl90IHdjLCBtYnN0YXRlX3QqIHBzKSB7CisgIHN0YXRpYyBtYnN0YXRlX3QgX19wcml2YXRlX3N0YXRlOworICBtYnN0YXRlX3QqIHN0YXRlID0gKHBzID09IE5VTEwpID8gJl9fcHJpdmF0ZV9zdGF0ZSA6IHBzOworCisgIC8vIE91ciB3Y2hhcl90IGlzIFVURi0zMgorICByZXR1cm4gYzMycnRvbWIocywgc3RhdGljX2Nhc3Q8Y2hhcjMyX3Q+KHdjKSwgc3RhdGUpOworfQorCitzaXplX3Qgd2NzbnJ0b21icyhjaGFyKiBkc3QsIGNvbnN0IHdjaGFyX3QqKiBzcmMsIHNpemVfdCBud2MsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCogcHMpIHsKKyAgc3RhdGljIG1ic3RhdGVfdCBfX3ByaXZhdGVfc3RhdGU7CisgIG1ic3RhdGVfdCogc3RhdGUgPSAocHMgPT0gTlVMTCkgPyAmX19wcml2YXRlX3N0YXRlIDogcHM7CisKKyAgaWYgKCFtYnNpbml0KHN0YXRlKSkgeworICAgIHJldHVybiByZXNldF9hbmRfcmV0dXJuX2lsbGVnYWwoRUlMU0VRLCBzdGF0ZSk7CiAgIH0KIAotICBpZiAoZHN0KSB7Ci0gICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRzdCksIHMsIGxlbiApOworICBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKyAgc2l6ZV90IGksIG8sIHI7CisgIGlmIChkc3QgPT0gTlVMTCkgeworICAgIGZvciAoaSA9IG8gPSAwOyBpIDwgbndjOyBpKyssIG8gKz0gcikgeworICAgICAgd2NoYXJfdCB3YyA9ICgqc3JjKVtpXTsKKyAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50MzJfdD4od2MpIDwgMHg4MCkgeworICAgICAgICAvLyBGYXN0IHBhdGggZm9yIHBsYWluIEFTQ0lJIGNoYXJhY3RlcnMuCisgICAgICAgIGlmICh3YyA9PSAwKSB7CisgICAgICAgICAgcmV0dXJuIG87CisgICAgICAgIH0KKyAgICAgICAgciA9IDE7CisgICAgICB9IGVsc2UgeworICAgICAgICByID0gd2NydG9tYihidWYsIHdjLCBzdGF0ZSk7CisgICAgICAgIGlmIChyID09IF9fTUJfRVJSX0lMTEVHQUxfU0VRVUVOQ0UpIHsKKyAgICAgICAgICByZXR1cm4gcjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbzsKICAgfQogCi0gICpzcmMgPSBzICsgbGVuOwotICByZXR1cm4gbGVuOwotfQotCi1zaXplX3QgbWJzdG93Y3Mod2NoYXJfdCogZHN0LCBjb25zdCBjaGFyKiBzcmMsIHNpemVfdCBsZW4pIHsKLSAgcmV0dXJuIG1ic3J0b3djcyhkc3QsICZzcmMsIGxlbiwgTlVMTCk7Ci19Ci0KLXdpbnRfdCBwdXR3Yyh3Y2hhcl90IHdjLCBGSUxFKiBzdHJlYW0pIHsKLSAgcmV0dXJuIGZwdXRjKHN0YXRpY19jYXN0PGNoYXI+KHdjKSwgc3RyZWFtKTsKLX0KLQotd2ludF90IHB1dHdjaGFyKHdjaGFyX3Qgd2MpIHsKLSAgcmV0dXJuIHB1dGNoYXIoc3RhdGljX2Nhc3Q8Y2hhcj4od2MpKTsKLX0KLQotd2ludF90IHRvd2xvd2VyKHdpbnRfdCB3YykgewotICByZXR1cm4gdG9sb3dlcih3Yyk7Ci19Ci0KLXdpbnRfdCB0b3d1cHBlcih3aW50X3Qgd2MpIHsKLSAgcmV0dXJuIHRvdXBwZXIod2MpOwotfQotCi13aW50X3QgdW5nZXR3Yyh3aW50X3Qgd2MsIEZJTEUqIHN0cmVhbSkgewotICByZXR1cm4gdW5nZXRjKHN0YXRpY19jYXN0PGNoYXI+KHdjKSwgc3RyZWFtKTsKLX0KLQotc2l6ZV90IHdjcnRvbWIoY2hhciogcywgd2NoYXJfdCAvKndjKi8sIG1ic3RhdGVfdCogLypwcyovKSB7Ci0gIGlmIChzICE9IE5VTEwpIHsKLSAgICAqcyA9IDE7Ci0gIH0KLSAgcmV0dXJuIDE7Ci19Ci0KLXNpemVfdCB3Y3NmdGltZSh3Y2hhcl90KiB3Y3MsIHNpemVfdCBtYXhzaXplLCBjb25zdCB3Y2hhcl90KiBmb3JtYXQsICBjb25zdCBzdHJ1Y3QgdG0qIHRpbXB0cikgewotICByZXR1cm4gc3RyZnRpbWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4od2NzKSwgbWF4c2l6ZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZm9ybWF0KSwgdGltcHRyKTsKLX0KLQotc2l6ZV90IHdjc3J0b21icyhjaGFyKiBkc3QsIGNvbnN0IHdjaGFyX3QqKiBzcmMsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCogLypwcyovKSB7Ci0gIGNvbnN0IGNoYXIqIHMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigqc3JjKTsKLSAgY29uc3QgY2hhciogczIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtZW1jaHIocywgMCwgbGVuKSk7Ci0gIGlmIChzMiAhPSBOVUxMKSB7Ci0gICAgbGVuID0gKHMyIC0gcykrMTsKLSAgfQotICBpZiAoZHN0ICE9IE5VTEwpIHsKLSAgICBtZW1jcHkoIGRzdCwgcywgbGVuICk7Ci0gIH0KLSAgKnNyYyA9ICh3Y2hhcl90KikocyArIGxlbik7Ci0gIHJldHVybiBsZW47Ci19Ci0KLXNpemVfdCB3Y3N0b21icyhjaGFyKiBkc3QsIGNvbnN0IHdjaGFyX3QqIHNyYywgc2l6ZV90IGxlbikgewotICByZXR1cm4gd2NzcnRvbWJzKGRzdCwgJnNyYywgbGVuLCBOVUxMKTsKLX0KLQotZG91YmxlIHdjc3RvZChjb25zdCB3Y2hhcl90KiBucHRyLCB3Y2hhcl90KiogZW5kcHRyKSB7Ci0gIHJldHVybiBzdHJ0b2QocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obnB0ciksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihlbmRwdHIpKTsKLX0KLQotbG9uZyBpbnQgd2NzdG9sKGNvbnN0IHdjaGFyX3QqIG5wdHIsIHdjaGFyX3QqKiBlbmRwdHIsIGludCBiYXNlKSB7Ci0gIHJldHVybiBzdHJ0b2wocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obnB0ciksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihlbmRwdHIpLCBiYXNlKTsKLX0KLQotdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bChjb25zdCB3Y2hhcl90KiBucHRyLCB3Y2hhcl90KiogZW5kcHRyLCBpbnQgYmFzZSkgewotICByZXR1cm4gc3RydG91bChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihucHRyKSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGVuZHB0ciksIGJhc2UpOwotfQotCi13Y2hhcl90KiB3Y3N3Y3MoY29uc3Qgd2NoYXJfdCogd3MxLCBjb25zdCB3Y2hhcl90KiB3czIpIHsKLSAgY29uc3QgY2hhciogczEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih3czEpOwotICBjb25zdCBjaGFyKiBzMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHdzMik7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PHdjaGFyX3QqPihzdHJzdHIoczEsIHMyKSk7Ci19Ci0KLWludCB3Y3RvYih3aW50X3QgYykgewotICByZXR1cm4gYzsKLX0KLQotd2N0eXBlX3Qgd2N0eXBlKGNvbnN0IGNoYXIqIHByb3BlcnR5KSB7Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCAgcHJvcGVydGllc1tXQ19UWVBFX01BWF0gPSB7Ci0gICAgIjxpbnZhbGlkPiIsCi0gICAgImFsbnVtIiwgImFscGhhIiwgImJsYW5rIiwgImNudHJsIiwgImRpZ2l0IiwgImdyYXBoIiwKLSAgICAibG93ZXIiLCAicHJpbnQiLCAicHVuY3QiLCAic3BhY2UiLCAidXBwZXIiLCAieGRpZ2l0IgotICB9OwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdDX1RZUEVfTUFYOyArK2kpIHsKLSAgICBpZiAoIXN0cmNtcChwcm9wZXJ0aWVzW2ldLCBwcm9wZXJ0eSkpIHsKLSAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx3Y3R5cGVfdD4oaSk7CisgIGZvciAoaSA9IG8gPSAwOyBpIDwgbndjICYmIG8gPCBsZW47IGkrKywgbyArPSByKSB7CisgICAgd2NoYXJfdCB3YyA9ICgqc3JjKVtpXTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdjKSA8IDB4ODApIHsKKyAgICAgIC8vIEZhc3QgcGF0aCBmb3IgcGxhaW4gQVNDSUkgY2hhcmFjdGVycy4KKyAgICAgIGRzdFtvXSA9IHdjOworICAgICAgaWYgKHdjID09IDApIHsKKyAgICAgICAgKnNyYyA9IE5VTEw7CisgICAgICAgIHJldHVybiBvOworICAgICAgfQorICAgICAgciA9IDE7CisgICAgfSBlbHNlIGlmIChsZW4gLSBvID49IHNpemVvZihidWYpKSB7CisgICAgICAvLyBFbm91Z2ggc3BhY2UgdG8gdHJhbnNsYXRlIGluLXBsYWNlLgorICAgICAgciA9IHdjcnRvbWIoZHN0ICsgbywgd2MsIHN0YXRlKTsKKyAgICAgIGlmIChyID09IF9fTUJfRVJSX0lMTEVHQUxfU0VRVUVOQ0UpIHsKKyAgICAgICAgKnNyYyArPSBpOworICAgICAgICByZXR1cm4gcjsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8gTWF5IG5vdCBiZSBlbm91Z2ggc3BhY2U7IHVzZSB0ZW1wIGJ1ZmZlci4KKyAgICAgIHIgPSB3Y3J0b21iKGJ1Ziwgd2MsIHN0YXRlKTsKKyAgICAgIGlmIChyID09IF9fTUJfRVJSX0lMTEVHQUxfU0VRVUVOQ0UpIHsKKyAgICAgICAgKnNyYyArPSBpOworICAgICAgICByZXR1cm4gcjsKKyAgICAgIH0KKyAgICAgIGlmIChyID4gbGVuIC0gbykgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIG1lbWNweShkc3QgKyBvLCBidWYsIHIpOwogICAgIH0KICAgfQotICByZXR1cm4gc3RhdGljX2Nhc3Q8d2N0eXBlX3Q+KDApOworICAqc3JjICs9IGk7CisgIHJldHVybiBvOwogfQogCi1pbnQgd2N3aWR0aCh3Y2hhcl90IHdjKSB7Ci0gIHJldHVybiAod2MgPiAwKTsKK3NpemVfdCB3Y3NydG9tYnMoY2hhciogZHN0LCBjb25zdCB3Y2hhcl90Kiogc3JjLCBzaXplX3QgbGVuLCBtYnN0YXRlX3QqIHBzKSB7CisgIHJldHVybiB3Y3NucnRvbWJzKGRzdCwgc3JjLCBTSVpFX01BWCwgbGVuLCBwcyk7Cit9CisKK2ludCB3Y3Njb2xsX2woY29uc3Qgd2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIsIGxvY2FsZV90KSB7CisgIHJldHVybiB3Y3Njb2xsKHdzMSwgd3MyKTsKK30KKworc2l6ZV90IHdjc3hmcm1fbCh3Y2hhcl90ICpkZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMsIHNpemVfdCBuLCBsb2NhbGVfdCkgeworICByZXR1cm4gd2NzeGZybShkZXN0LCBzcmMsIG4pOworfQorCitsb25nIGxvbmcgd2NzdG9sbF9sKGNvbnN0IHdjaGFyX3QgKm5wdHIsIHdjaGFyX3QgKiplbmRwdHIsIGludCBiYXNlLAorICAgICAgICAgICAgICAgICAgICBsb2NhbGVfdCkgeworICByZXR1cm4gd2NzdG9sbChucHRyLCBlbmRwdHIsIGJhc2UpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgd2NzdG91bGxfbChjb25zdCB3Y2hhcl90ICpucHRyLCB3Y2hhcl90ICoqZW5kcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJhc2UsIGxvY2FsZV90KSB7CisgIHJldHVybiB3Y3N0b3VsbChucHRyLCBlbmRwdHIsIGJhc2UpOworfQorCitsb25nIGRvdWJsZSB3Y3N0b2xkX2woY29uc3Qgd2NoYXJfdCAqbnB0ciwgd2NoYXJfdCAqKmVuZHB0ciwgbG9jYWxlX3QpIHsKKyAgcmV0dXJuIHdjc3RvbGQobnB0ciwgZW5kcHRyKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3djc2NvbGwuYyBiL2xpYmMvYmlvbmljL3djc2NvbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU4NDNiNy4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy93Y3Njb2xsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8d2NoYXIuaD4KLS8qCi0gKiBDb21wYXJlIHN0cmluZ3MgdXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlLiAgU2luY2UgQmlvbmljIHJlYWxseSBkb2VzIG5vdAotICogc3VwcG9ydCBsb2NhbGVzLCB3ZSBhc3N1bWUgd2UgYWx3YXlzIHVzZSB0aGUgQyBsb2NhbGUgYW5kIGNhbGwgd2NzY21wLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gbWFrZSBsaWJzdGRjKystdjMgdXNhYmxlLgotICovCi1pbnQKLXdjc2NvbGwoY29uc3Qgd2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIpCi17Ci0gICAgcmV0dXJuIHdjc2NtcCh3czEsIHdzMik7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy93Y3R5cGUuY3BwIGIvbGliYy9iaW9uaWMvd2N0eXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmQ3ODYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvd2N0eXBlLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHdjdHlwZS5oPgorCisvLyBUT0RPOiB0aGVzZSBvbmx5IHdvcmsgZm9yIHRoZSBBU0NJSSByYW5nZTsgcmV3cml0ZSB0byBkbHN5bSBpY3U0Yz8gaHR0cDovL2IvMTQ0OTk2NTQKKworaW50IGlzd2FsbnVtKHdpbnRfdCB3YykgeyByZXR1cm4gaXNhbG51bSh3Yyk7IH0KK2ludCBpc3dhbHBoYSh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzYWxwaGEod2MpOyB9CitpbnQgaXN3Ymxhbmsod2ludF90IHdjKSB7IHJldHVybiBpc2JsYW5rKHdjKTsgfQoraW50IGlzd2NudHJsKHdpbnRfdCB3YykgeyByZXR1cm4gaXNjbnRybCh3Yyk7IH0KK2ludCBpc3dkaWdpdCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzZGlnaXQod2MpOyB9CitpbnQgaXN3Z3JhcGgod2ludF90IHdjKSB7IHJldHVybiBpc2dyYXBoKHdjKTsgfQoraW50IGlzd2xvd2VyKHdpbnRfdCB3YykgeyByZXR1cm4gaXNsb3dlcih3Yyk7IH0KK2ludCBpc3dwcmludCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzcHJpbnQod2MpOyB9CitpbnQgaXN3cHVuY3Qod2ludF90IHdjKSB7IHJldHVybiBpc3B1bmN0KHdjKTsgfQoraW50IGlzd3NwYWNlKHdpbnRfdCB3YykgeyByZXR1cm4gaXNzcGFjZSh3Yyk7IH0KK2ludCBpc3d1cHBlcih3aW50X3Qgd2MpIHsgcmV0dXJuIGlzdXBwZXIod2MpOyB9CitpbnQgaXN3eGRpZ2l0KHdpbnRfdCB3YykgeyByZXR1cm4gaXN4ZGlnaXQod2MpOyB9CisKK2ludCBpc3dhbG51bV9sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3YWxudW0oYyk7IH0KK2ludCBpc3dhbHBoYV9sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3YWxwaGEoYyk7IH0KK2ludCBpc3dibGFua19sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3YmxhbmsoYyk7IH0KK2ludCBpc3djbnRybF9sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3Y250cmwoYyk7IH0KK2ludCBpc3dkaWdpdF9sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3ZGlnaXQoYyk7IH0KK2ludCBpc3dncmFwaF9sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3Z3JhcGgoYyk7IH0KK2ludCBpc3dsb3dlcl9sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3bG93ZXIoYyk7IH0KK2ludCBpc3dwcmludF9sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3cHJpbnQoYyk7IH0KK2ludCBpc3dwdW5jdF9sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3cHVuY3QoYyk7IH0KK2ludCBpc3dzcGFjZV9sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3c3BhY2UoYyk7IH0KK2ludCBpc3d1cHBlcl9sKHdpbnRfdCBjLCBsb2NhbGVfdCkgeyByZXR1cm4gaXN3dXBwZXIoYyk7IH0KK2ludCBpc3d4ZGlnaXRfbCh3aW50X3QgYywgbG9jYWxlX3QpIHsgcmV0dXJuIGlzd3hkaWdpdChjKTsgfQorCitpbnQgaXN3Y3R5cGUod2ludF90IHdjLCB3Y3R5cGVfdCBjaGFyX2NsYXNzKSB7CisgIHN3aXRjaCAoY2hhcl9jbGFzcykgeworICAgIGNhc2UgV0NfVFlQRV9BTE5VTTogcmV0dXJuIGlzd2FsbnVtKHdjKTsKKyAgICBjYXNlIFdDX1RZUEVfQUxQSEE6IHJldHVybiBpc3dhbHBoYSh3Yyk7CisgICAgY2FzZSBXQ19UWVBFX0JMQU5LOiByZXR1cm4gaXN3Ymxhbmsod2MpOworICAgIGNhc2UgV0NfVFlQRV9DTlRSTDogcmV0dXJuIGlzd2NudHJsKHdjKTsKKyAgICBjYXNlIFdDX1RZUEVfRElHSVQ6IHJldHVybiBpc3dkaWdpdCh3Yyk7CisgICAgY2FzZSBXQ19UWVBFX0dSQVBIOiByZXR1cm4gaXN3Z3JhcGgod2MpOworICAgIGNhc2UgV0NfVFlQRV9MT1dFUjogcmV0dXJuIGlzd2xvd2VyKHdjKTsKKyAgICBjYXNlIFdDX1RZUEVfUFJJTlQ6IHJldHVybiBpc3dwcmludCh3Yyk7CisgICAgY2FzZSBXQ19UWVBFX1BVTkNUOiByZXR1cm4gaXN3cHVuY3Qod2MpOworICAgIGNhc2UgV0NfVFlQRV9TUEFDRTogcmV0dXJuIGlzd3NwYWNlKHdjKTsKKyAgICBjYXNlIFdDX1RZUEVfVVBQRVI6IHJldHVybiBpc3d1cHBlcih3Yyk7CisgICAgY2FzZSBXQ19UWVBFX1hESUdJVDogcmV0dXJuIGlzd3hkaWdpdCh3Yyk7CisgICAgZGVmYXVsdDogcmV0dXJuIDA7CisgIH0KK30KKworaW50IGlzd2N0eXBlX2wod2ludF90IHdjLCB3Y3R5cGVfdCBjaGFyX2NsYXNzLCBsb2NhbGVfdCkgeworICByZXR1cm4gaXN3Y3R5cGUod2MsIGNoYXJfY2xhc3MpOworfQorCit3aW50X3QgdG93bG93ZXIod2ludF90IHdjKSB7IHJldHVybiB0b2xvd2VyKHdjKTsgfQord2ludF90IHRvd3VwcGVyKHdpbnRfdCB3YykgeyByZXR1cm4gdG91cHBlcih3Yyk7IH0KKworaW50IHRvd3VwcGVyX2woaW50IGMsIGxvY2FsZV90KSB7IHJldHVybiB0b3d1cHBlcihjKTsgfQoraW50IHRvd2xvd2VyX2woaW50IGMsIGxvY2FsZV90KSB7IHJldHVybiB0b3dsb3dlcihjKTsgfQorCit3Y3R5cGVfdCB3Y3R5cGUoY29uc3QgY2hhciogcHJvcGVydHkpIHsKKyAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0ICBwcm9wZXJ0aWVzW1dDX1RZUEVfTUFYXSA9IHsKKyAgICAiPGludmFsaWQ+IiwKKyAgICAiYWxudW0iLCAiYWxwaGEiLCAiYmxhbmsiLCAiY250cmwiLCAiZGlnaXQiLCAiZ3JhcGgiLAorICAgICJsb3dlciIsICJwcmludCIsICJwdW5jdCIsICJzcGFjZSIsICJ1cHBlciIsICJ4ZGlnaXQiCisgIH07CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV0NfVFlQRV9NQVg7ICsraSkgeworICAgIGlmICghc3RyY21wKHByb3BlcnRpZXNbaV0sIHByb3BlcnR5KSkgeworICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHdjdHlwZV90PihpKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHN0YXRpY19jYXN0PHdjdHlwZV90PigwKTsKK30KKword2N0eXBlX3Qgd2N0eXBlX2woY29uc3QgY2hhciogcHJvcGVydHksIGxvY2FsZV90KSB7CisgIHJldHVybiB3Y3R5cGUocHJvcGVydHkpOworfQorCitpbnQgd2N3aWR0aCh3Y2hhcl90IHdjKSB7CisgIHJldHVybiAod2MgPiAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvY3J0Lm1rIGIvbGliYy9jcnQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiYTU0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvY3J0Lm1rCkBAIC0wLDAgKzEsMTQ5IEBACisjIERlZmluZSB0aGUgbGliYyBydW4tdGltZSAoY3J0KSBzdXBwb3J0IG9iamVjdCBmaWxlcyB0aGF0IG11c3QgYmUgYnVpbHQsCisjIHdoaWNoIGFyZSBuZWVkZWQgdG8gYnVpbGQgYWxsIG90aGVyIG9iamVjdHMgKHNoYXJlZC9zdGF0aWMgbGlicyBhbmQKKyMgZXhlY3V0YWJsZXMpCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIEFBcmNoNjQsIEFSTSwgTUlQUywgYW5kIHg4NiBhbGwgbmVlZCBjcnRiZWdpbl9zby9jcnRlbmRfc28uCisjCisjIEZvciB4ODYsIHRoZSAuaW5pdCBzZWN0aW9uIG11c3QgcG9pbnQgdG8gYSBmdW5jdGlvbiB0aGF0IGNhbGxzIGFsbAorIyBlbnRyaWVzIGluIHRoZSAuY3RvcnMgc2VjdGlvbi4gKG9uIEFSTSB0aGlzIGlzIGRvbmUgdGhyb3VnaCB0aGUKKyMgLmluaXRfYXJyYXkgc2VjdGlvbiBpbnN0ZWFkKS4KKyMKKyMgRm9yIGFsbCB0aGUgcGxhdGZvcm1zLCB0aGUgLmZpbmlfYXJyYXkgc2VjdGlvbiBtdXN0IHBvaW50IHRvIGEgZnVuY3Rpb24KKyMgdGhhdCB3aWxsIGNhbGwgX19jeGFfZmluYWxpemUoJl9fZHNvX2hhbmRsZSkgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQKKyMgc3RhdGljIEMrKyBkZXN0cnVjdG9ycyBhcmUgcHJvcGVybHkgY2FsbGVkIG9uIGRsY2xvc2UoKS4KKyMKKyMgQXJnczoKKyMgICAgIG15XzJuZF9hcmNoX3ByZWZpeDogc2V0IHRvICQoVEFSR0VUXzJORF9BUkNIX1ZBUl9QUkVGSVgpIGlmIGl0J3MKKyMgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSAybmQgYXJjaDsgb3RoZXJ3aXNlIGVtcHR5LgorCitteV9hcmNoIDo9ICQoVEFSR0VUXyQobXlfMm5kX2FyY2hfcHJlZml4KUFSQ0gpCisKK215X2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlIDo9ICQobGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGVfJChteV9hcmNoKSkKK215X2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9zb19maWxlIDo9ICQobGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX3NvX2ZpbGVfJChteV9hcmNoKSkKKworbXlfbGliY19jcnRfdGFyZ2V0X2NmbGFncyA6PSBcCisgICAgJChsaWJjX2NydF90YXJnZXRfY2ZsYWdzKSBcCisgICAgJChsaWJjX2NydF90YXJnZXRfY2ZsYWdzXyQobXlfYXJjaCkpCisKK215X2xpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MgOj0gXAorICAgICQobGliY19jcnRfdGFyZ2V0X3NvX2NmbGFnc18kKG15X2FyY2gpKSBcCisgICAgJChteV9saWJjX2NydF90YXJnZXRfY2ZsYWdzKQorCitteV9saWJjX2NydF90YXJnZXRfbGRmbGFncyA6PSAkKGxpYmNfY3J0X3RhcmdldF9sZGZsYWdzXyQobXlfYXJjaCkpCisKKworIyBTZWUgdGhlIGNvbW1lbnQgaW4gY3J0YnJhbmQuYyBmb3IgdGhlIHJlYXNvbiB3aHkgd2UgbmVlZCB0byBnZW5lcmF0ZQorIyBjcnRicmFuZC5zIGJlZm9yZSBnZW5lcmF0aW5nIGNydGJyYW5kLm8uCitHRU4gOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJyYW5kLnMKKyQoR0VOKTogUFJJVkFURV9DQyA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9DQykKKyQoR0VOKTogUFJJVkFURV9DRkxBR1MgOj0gJChteV9saWJjX2NydF90YXJnZXRfc29fY2ZsYWdzKQorJChHRU4pOiAkKExPQ0FMX1BBVEgpL2Jpb25pYy9jcnRicmFuZC5jCisJQG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgJChQUklWQVRFX0NDKSAkKFBSSVZBVEVfQ0ZMQUdTKSAtUyBcCisJCS1NRCAtTUYgJChAOiUucz0lLmQpIC1vICRAICQ8CisJJChoaWRlKSBzZWQgLWkgLWUgJy9cLm5vdGVcLkFCSS10YWcvcy9wcm9nYml0cy9ub3RlLycgJEAKKwkkKGNhbGwgdHJhbnNmb3JtLWQtdG8tcC1hcmdzLCQoQDolLnM9JS5kKSwkKEA6JS5zPSUuUCkpCistaW5jbHVkZSAkKEdFTjolLnM9JS5QKQorCisKK0dFTiA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQubworJChHRU4pOiBQUklWQVRFX0NDIDo9ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX0NDKQorJChHRU4pOiBQUklWQVRFX0NGTEFHUyA6PSAkKG15X2xpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MpCiskKEdFTik6ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRicmFuZC5zCisJQG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgJChQUklWQVRFX0NDKSAkKFBSSVZBVEVfQ0ZMQUdTKSAtbyAkQCAtYyAkPAorCisKK0dFTiA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc28ubworJChHRU4pOiBQUklWQVRFX0NDIDo9ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX0NDKQorJChHRU4pOiBQUklWQVRFX0NGTEFHUyA6PSAkKG15X2xpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MpCiskKEdFTik6ICQobXlfbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX3NvX2ZpbGUpCisJQG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgJChQUklWQVRFX0NDKSAkKFBSSVZBVEVfQ0ZMQUdTKSBcCisJCS1NRCAtTUYgJChAOiUubz0lLmQpIC1vICRAIC1jICQ8CisJJCh0cmFuc2Zvcm0tZC10by1wKQorLWluY2x1ZGUgJChHRU46JS5vPSUuUCkKKworCitHRU4gOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGVuZF9zby5vCiskKEdFTik6IFBSSVZBVEVfQ0MgOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfQ0MpCiskKEdFTik6IFBSSVZBVEVfQ0ZMQUdTIDo9ICQobXlfbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncykKKyQoR0VOKTogJChMT0NBTF9QQVRIKS9hcmNoLWNvbW1vbi9iaW9uaWMvY3J0ZW5kX3NvLlMKKwlAbWtkaXIgLXAgJChkaXIgJEApCisJJChoaWRlKSAkKFBSSVZBVEVfQ0MpICQoUFJJVkFURV9DRkxBR1MpIFwKKwkJLU1EIC1NRiAkKEA6JS5vPSUuZCkgLW8gJEAgLWMgJDwKKwkkKHRyYW5zZm9ybS1kLXRvLXApCistaW5jbHVkZSAkKEdFTjolLm89JS5QKQorCisKKyMgVGhlIGZvbGxvd2luZyB0d28gYXJlIGluc3RhbGxlZCB0byBkZXZpY2UKK0dFTiA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfU0hBUkVEX0xJQlJBUklFUykvY3J0YmVnaW5fc28ubworJChHRU4pOiAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc28ubworCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApICYmIGNwIC1mICQ8ICRACitBTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCisKK0dFTiA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfU0hBUkVEX0xJQlJBUklFUykvY3J0ZW5kX3NvLm8KKyQoR0VOKTogJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGVuZF9zby5vCisJJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkgJiYgY3AgLWYgJDwgJEAKK0FMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKKworCitHRU4gOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJlZ2luX3N0YXRpYzEubworJChHRU4pOiBQUklWQVRFX0NDIDo9ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX0NDKQorJChHRU4pOiBQUklWQVRFX0NGTEFHUyA6PSAkKG15X2xpYmNfY3J0X3RhcmdldF9jZmxhZ3MpCiskKEdFTik6ICQobXlfbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGUpCisJQG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgJChQUklWQVRFX0NDKSAkKFBSSVZBVEVfQ0ZMQUdTKSBcCisJCS1NRCAtTUYgJChAOiUubz0lLmQpIC1vICRAIC1jICQ8CisJJCh0cmFuc2Zvcm0tZC10by1wKQorLWluY2x1ZGUgJChHRU46JS5vPSUuUCkKKworCitHRU4gOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJlZ2luX3N0YXRpYy5vCiskKEdFTik6IFBSSVZBVEVfTEQgOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfTEQpCiskKEdFTik6IFBSSVZBVEVfTERGTEFHUyA6PSAkKG15X2xpYmNfY3J0X3RhcmdldF9sZGZsYWdzKQorJChHRU4pOiAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc3RhdGljMS5vIFwKKyAgICAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQubworCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpICQoUFJJVkFURV9MRCkgJChQUklWQVRFX0xERkxBR1MpIC1yIC1vICRAICReCisKKworR0VOIDo9ICQoJChteV8ybmRfYXJjaF9wcmVmaXgpVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRiZWdpbl9keW5hbWljMS5vCiskKEdFTik6IFBSSVZBVEVfQ0MgOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfQ0MpCiskKEdFTik6IFBSSVZBVEVfQ0ZMQUdTIDo9ICQobXlfbGliY19jcnRfdGFyZ2V0X2NmbGFncykKKyQoR0VOKTogJChteV9saWJjX2NydF90YXJnZXRfY3J0YmVnaW5fZmlsZSkKKwlAbWtkaXIgLXAgJChkaXIgJEApCisJJChoaWRlKSAkKFBSSVZBVEVfQ0MpICQoUFJJVkFURV9DRkxBR1MpIFwKKwkJLU1EIC1NRiAkKEA6JS5vPSUuZCkgLW8gJEAgLWMgJDwKKwkkKHRyYW5zZm9ybS1kLXRvLXApCistaW5jbHVkZSAkKEdFTjolLm89JS5QKQorCisKK0dFTiA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fZHluYW1pYy5vCiskKEdFTik6IFBSSVZBVEVfTEQgOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfTEQpCiskKEdFTik6IFBSSVZBVEVfTERGTEFHUyA6PSAkKG15X2xpYmNfY3J0X3RhcmdldF9sZGZsYWdzKQorJChHRU4pOiAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fZHluYW1pYzEubyBcCisgICAgJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJyYW5kLm8KKwlAbWtkaXIgLXAgJChkaXIgJEApCisJJChoaWRlKSAkKFBSSVZBVEVfTEQpICQoUFJJVkFURV9MREZMQUdTKSAtciAtbyAkQCAkXgorCisKKyMgV2UgcmVuYW1lIGNydGVuZC5vIHRvIGNydGVuZF9hbmRyb2lkLm8gdG8gYXZvaWQgYQorIyBuYW1lIGNsYXNoIGJldHdlZW4gZ2NjIGFuZCBiaW9uaWMuCitHRU4gOj0gJCgkKG15XzJuZF9hcmNoX3ByZWZpeClUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGVuZF9hbmRyb2lkLm8KKyQoR0VOKTogUFJJVkFURV9DQyA6PSAkKCQobXlfMm5kX2FyY2hfcHJlZml4KVRBUkdFVF9DQykKKyQoR0VOKTogUFJJVkFURV9DRkxBR1MgOj0gJChteV9saWJjX2NydF90YXJnZXRfY2ZsYWdzKQorJChHRU4pOiAkKExPQ0FMX1BBVEgpL2FyY2gtY29tbW9uL2Jpb25pYy9jcnRlbmQuUworCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpICQoUFJJVkFURV9DQykgJChQUklWQVRFX0NGTEFHUykgXAorCQktTUQgLU1GICQoQDolLm89JS5kKSAtbyAkQCAtYyAkPAorCSQodHJhbnNmb3JtLWQtdG8tcCkKKy1pbmNsdWRlICQoR0VOOiUubz0lLlApCisKKyMgQ2xlYXIgdGVtcCB2YXJzCitteV9saWJjX2NydF90YXJnZXRfbGRmbGFncyA6PQorbXlfbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncyA6PQorbXlfbGliY19jcnRfdGFyZ2V0X2NmbGFncyA6PQorbXlfbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX3NvX2ZpbGUgOj0KK215X2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlIDo9CitteV9hcmNoIDo9CmRpZmYgLS1naXQgYS9saWJjL2Rucy9nZXRobmFtYWRkci5jIGIvbGliYy9kbnMvZ2V0aG5hbWFkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzRiM2NiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvZ2V0aG5hbWFkZHIuYwpAQCAtMCwwICsxLDE0MTMgQEAKKy8qCSROZXRCU0Q6IGdldGhuYW1hZGRyLmMsdiAxLjcwIDIwMDYvMDMvMjIgMDA6MDM6NTEgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqICsrQ29weXJpZ2h0KysgMTk4NSwgMTk4OCwgMTk5MworICogLQorICogQ29weXJpZ2h0IChjKSAxOTg1LCAxOTg4LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAtCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICogLQorICogLS1Db3B5cmlnaHQtLQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjaW5jbHVkZSAiTmV0ZENsaWVudERpc3BhdGNoLmgiCisjaW5jbHVkZSAicmVzb2x2X25ldGlkLmgiCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBBTElHTkJZVEVTIChzaXplb2YodWludHB0cl90KSAtIDEpCisjZGVmaW5lIEFMSUdOKHApICgoKHVpbnRwdHJfdCkocCkgKyBBTElHTkJZVEVTKSAmfiBBTElHTkJZVEVTKQorCisjaWZuZGVmIExPR19BVVRICisjIGRlZmluZSBMT0dfQVVUSCAwCisjZW5kaWYKKworI2RlZmluZSBNVUxUSV9QVFJTX0FSRV9BTElBU0VTIDEJLyogWFhYIC0gZXhwZXJpbWVudGFsICovCisKKyNpbmNsdWRlICJuc3N3aXRjaC5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvLyBUaGlzIHNob3VsZCBiZSBzeW5jaHJvbml6ZWQgdG8gUmVzcG9uc2VDb2RlLmgKK3N0YXRpYyBjb25zdCBpbnQgRG5zUHJveHlRdWVyeVJlc3VsdCA9IDIyMjsKKworc3RhdGljIGNvbnN0IGNoYXIgQXNrZWRGb3JHb3RbXSA9CisJCQkgICJnZXRob3N0YnkqLmdldGFuc3dlcjogYXNrZWQgZm9yIFwiJXNcIiwgZ290IFwiJXNcIiI7CisKKyNkZWZpbmUJTUFYUEFDS0VUCSg2NCoxMDI0KQorCit0eXBlZGVmIHVuaW9uIHsKKyAgICBIRUFERVIgaGRyOworICAgIHVfY2hhciBidWZbTUFYUEFDS0VUXTsKK30gcXVlcnlidWY7CisKK3R5cGVkZWYgdW5pb24geworICAgIGludDMyX3QgYWw7CisgICAgY2hhciBhYzsKK30gYWxpZ247CisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgZHByaW50Zihjb25zdCBjaGFyICosIHJlc19zdGF0ZSwgLi4uKQorCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18oX19wcmludGZfXywgMSwgMykpKTsKKyNlbmRpZgorc3RhdGljIHN0cnVjdCBob3N0ZW50ICpnZXRhbnN3ZXIoY29uc3QgcXVlcnlidWYgKiwgaW50LCBjb25zdCBjaGFyICosIGludCwKKyAgICByZXNfc3RhdGUpOworc3RhdGljIHZvaWQgbWFwX3Y0djZfYWRkcmVzcyhjb25zdCBjaGFyICosIGNoYXIgKik7CitzdGF0aWMgdm9pZCBtYXBfdjR2Nl9ob3N0ZW50KHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiosIGNoYXIgKik7CitzdGF0aWMgdm9pZCBhZGRyc29ydChjaGFyICoqLCBpbnQsIHJlc19zdGF0ZSk7CisKK3N0YXRpYyB2b2lkIF9zZXRodGVudChpbnQpOworc3RhdGljIHZvaWQgX2VuZGh0ZW50KHZvaWQpOworc3RhdGljIHN0cnVjdCBob3N0ZW50ICpfZ2V0aHRlbnQodm9pZCk7Cit2b2lkIGh0X3NldGhvc3RlbnQoaW50KTsKK3ZvaWQgaHRfZW5kaG9zdGVudCh2b2lkKTsKK3N0cnVjdCBob3N0ZW50ICpodF9nZXRob3N0YnluYW1lKGNoYXIgKik7CitzdHJ1Y3QgaG9zdGVudCAqaHRfZ2V0aG9zdGJ5YWRkcihjb25zdCBjaGFyICosIGludCwgaW50KTsKK3ZvaWQgZG5zX3NlcnZpY2Uodm9pZCk7CisjdW5kZWYgZG5fc2tpcG5hbWUKK2ludCBkbl9za2lwbmFtZShjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICopOworc3RhdGljIGludCBfZ2V0aHRieWFkZHIodm9pZCAqLCB2b2lkICosIHZhX2xpc3QpOworc3RhdGljIGludCBfZ2V0aHRieW5hbWUodm9pZCAqLCB2b2lkICosIHZhX2xpc3QpOworc3RhdGljIHN0cnVjdCBob3N0ZW50ICpfZ2V0aHRieW5hbWUyKGNvbnN0IGNoYXIgKiwgaW50KTsKK3N0YXRpYyBpbnQgX2Ruc19nZXRodGJ5YWRkcih2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CitzdGF0aWMgaW50IF9kbnNfZ2V0aHRieW5hbWUodm9pZCAqLCB2b2lkICosIHZhX2xpc3QpOworCitzdGF0aWMgc3RydWN0IGhvc3RlbnQgKmdldGhvc3RieW5hbWVfaW50ZXJuYWwoY29uc3QgY2hhciAqLCBpbnQsIHJlc19zdGF0ZSwgdW5zaWduZWQsIHVuc2lnbmVkKTsKKworc3RhdGljIGNvbnN0IG5zX3NyYyBkZWZhdWx0X2Ruc19maWxlc1tdID0geworCXsgTlNTUkNfRklMRVMsIAlOU19TVUNDRVNTIH0sCisJeyBOU1NSQ19ETlMsIAlOU19TVUNDRVNTIH0sCisJeyAwLCAwIH0KK307CisKKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZAorZHByaW50Zihjb25zdCBjaGFyICptc2csIHJlc19zdGF0ZSByZXMsIC4uLikKK3sKKwlhc3NlcnQobXNnICE9IE5VTEwpOworCisJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykgeworCQlpbnQgc2F2ZSA9IGVycm5vOworCQl2YV9saXN0IGFwOworCisJCXZhX3N0YXJ0IChhcCwgcmVzKTsKKwkJdnByaW50Zihtc2csIGFwKTsKKwkJdmFfZW5kIChhcCk7CisKKwkJZXJybm8gPSBzYXZlOworCX0KK30KKyNlbHNlCisjIGRlZmluZSBkcHJpbnRmKG1zZywgcmVzLCBudW0pICgodm9pZCkwKSAvKm5hZGEqLworI2VuZGlmCisKKyNkZWZpbmUgQk9VTkRFRF9JTkNSKHgpIFwKKwlkbyB7IFwKKwkJQk9VTkRTX0NIRUNLKGNwLCAoeCkpOyBcCisJCWNwICs9ICh4KTsgXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIEJPVU5EU19DSEVDSyhwdHIsIGNvdW50KSBcCisJZG8geyBcCisJCWlmIChlb20gLSAocHRyKSA8IChjb3VudCkpIHsgXAorCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOyBcCisJCQlyZXR1cm4gTlVMTDsgXAorCQl9IFwKKwl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKK2dldGFuc3dlcihjb25zdCBxdWVyeWJ1ZiAqYW5zd2VyLCBpbnQgYW5zbGVuLCBjb25zdCBjaGFyICpxbmFtZSwgaW50IHF0eXBlLAorICAgIHJlc19zdGF0ZSByZXMpCit7CisJY29uc3QgSEVBREVSICpocDsKKwljb25zdCB1X2NoYXIgKmNwOworCWludCBuOworCWNvbnN0IHVfY2hhciAqZW9tLCAqZXJkYXRhOworCWNoYXIgKmJwLCAqKmFwLCAqKmhhcCwgKmVwOworCWludCB0eXBlLCBjbGFzcywgYW5jb3VudCwgcWRjb3VudDsKKwlpbnQgaGF2ZWFuc3dlciwgaGFkX2Vycm9yOworCWludCB0b29iaWcgPSAwOworCWNoYXIgdGJ1ZltNQVhETkFNRV07CisJY29uc3QgY2hhciAqdG5hbWU7CisJaW50ICgqbmFtZV9vaykoY29uc3QgY2hhciAqKTsKKwlyZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKworCWFzc2VydChhbnN3ZXIgIT0gTlVMTCk7CisJYXNzZXJ0KHFuYW1lICE9IE5VTEwpOworCisJdG5hbWUgPSBxbmFtZTsKKwlycy0+aG9zdC5oX25hbWUgPSBOVUxMOworCWVvbSA9IGFuc3dlci0+YnVmICsgYW5zbGVuOworCXN3aXRjaCAocXR5cGUpIHsKKwljYXNlIFRfQToKKwljYXNlIFRfQUFBQToKKwkJbmFtZV9vayA9IHJlc19obm9rOworCQlicmVhazsKKwljYXNlIFRfUFRSOgorCQluYW1lX29rID0gcmVzX2Rub2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOwkvKiBYWFggc2hvdWxkIGJlIGFib3J0KCk7ICovCisJfQorCS8qCisJICogZmluZCBmaXJzdCBzYXRpc2ZhY3RvcnkgYW5zd2VyCisJICovCisJaHAgPSAmYW5zd2VyLT5oZHI7CisJYW5jb3VudCA9IG50b2hzKGhwLT5hbmNvdW50KTsKKwlxZGNvdW50ID0gbnRvaHMoaHAtPnFkY291bnQpOworCWJwID0gcnMtPmhvc3RidWY7CisJZXAgPSBycy0+aG9zdGJ1ZiArIHNpemVvZiBycy0+aG9zdGJ1ZjsKKwljcCA9IGFuc3dlci0+YnVmOworCUJPVU5ERURfSU5DUihIRklYRURTWik7CisJaWYgKHFkY291bnQgIT0gMSkgeworCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCXJldHVybiBOVUxMOworCX0KKwluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCBicCwgZXAgLSBicCk7CisJaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykoYnApKSB7CisJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCUJPVU5ERURfSU5DUihuICsgUUZJWEVEU1opOworCWlmIChxdHlwZSA9PSBUX0EgfHwgcXR5cGUgPT0gVF9BQUFBKSB7CisJCS8qIHJlc19zZW5kKCkgaGFzIGFscmVhZHkgdmVyaWZpZWQgdGhhdCB0aGUgcXVlcnkgbmFtZSBpcyB0aGUKKwkJICogc2FtZSBhcyB0aGUgb25lIHdlIHNlbnQ7IHRoaXMganVzdCBnZXRzIHRoZSBleHBhbmRlZCBuYW1lCisJCSAqIChpLmUuLCB3aXRoIHRoZSBzdWNjZWVkaW5nIHNlYXJjaC1kb21haW4gdGFja2VkIG9uKS4KKwkJICovCisJCW4gPSBzdHJsZW4oYnApICsgMTsJCS8qIGZvciB0aGUgXDAgKi8KKwkJaWYgKG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOworCQlicCArPSBuOworCQkvKiBUaGUgcW5hbWUgY2FuIGJlIGFiYnJldmlhdGVkLCBidXQgaF9uYW1lIGlzIG5vdyBhYnNvbHV0ZS4gKi8KKwkJcW5hbWUgPSBycy0+aG9zdC5oX25hbWU7CisJfQorCWFwID0gcnMtPmhvc3RfYWxpYXNlczsKKwkqYXAgPSBOVUxMOworCXJzLT5ob3N0LmhfYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7CisJaGFwID0gcnMtPmhfYWRkcl9wdHJzOworCSpoYXAgPSBOVUxMOworCXJzLT5ob3N0LmhfYWRkcl9saXN0ID0gcnMtPmhfYWRkcl9wdHJzOworCWhhdmVhbnN3ZXIgPSAwOworCWhhZF9lcnJvciA9IDA7CisJd2hpbGUgKGFuY291bnQtLSA+IDAgJiYgY3AgPCBlb20gJiYgIWhhZF9lcnJvcikgeworCQluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCBicCwgZXAgLSBicCk7CisJCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKGJwKSkgeworCQkJaGFkX2Vycm9yKys7CisJCQljb250aW51ZTsKKwkJfQorCQljcCArPSBuOwkJCS8qIG5hbWUgKi8KKwkJQk9VTkRTX0NIRUNLKGNwLCAzICogSU5UMTZTWiArIElOVDMyU1opOworCQl0eXBlID0gX2dldHNob3J0KGNwKTsKKyAJCWNwICs9IElOVDE2U1o7CQkJLyogdHlwZSAqLworCQljbGFzcyA9IF9nZXRzaG9ydChjcCk7CisgCQljcCArPSBJTlQxNlNaICsgSU5UMzJTWjsJLyogY2xhc3MsIFRUTCAqLworCQluID0gX2dldHNob3J0KGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsJCQkvKiBsZW4gKi8KKwkJQk9VTkRTX0NIRUNLKGNwLCBuKTsKKwkJZXJkYXRhID0gY3AgKyBuOworCQlpZiAoY2xhc3MgIT0gQ19JTikgeworCQkJLyogWFhYIC0gZGVidWc/IHN5c2xvZz8gKi8KKwkJCWNwICs9IG47CisJCQljb250aW51ZTsJCS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KKwkJfQorCQlpZiAoKHF0eXBlID09IFRfQSB8fCBxdHlwZSA9PSBUX0FBQUEpICYmIHR5cGUgPT0gVF9DTkFNRSkgeworCQkJaWYgKGFwID49ICZycy0+aG9zdF9hbGlhc2VzW01BWEFMSUFTRVMtMV0pCisJCQkJY29udGludWU7CisJCQluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCB0YnVmLCBzaXplb2YgdGJ1Zik7CisJCQlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKSh0YnVmKSkgeworCQkJCWhhZF9lcnJvcisrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY3AgKz0gbjsKKwkJCWlmIChjcCAhPSBlcmRhdGEpIHsKKwkJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQkvKiBTdG9yZSBhbGlhcy4gKi8KKwkJCSphcCsrID0gYnA7CisJCQluID0gc3RybGVuKGJwKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCWlmIChuID49IE1BWEhPU1ROQU1FTEVOKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlicCArPSBuOworCQkJLyogR2V0IGNhbm9uaWNhbCBuYW1lLiAqLworCQkJbiA9IHN0cmxlbih0YnVmKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCWlmIChuID4gZXAgLSBicCB8fCBuID49IE1BWEhPU1ROQU1FTEVOKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJsY3B5KGJwLCB0YnVmLCAoc2l6ZV90KShlcCAtIGJwKSk7CisJCQlycy0+aG9zdC5oX25hbWUgPSBicDsKKwkJCWJwICs9IG47CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocXR5cGUgPT0gVF9QVFIgJiYgdHlwZSA9PSBUX0NOQU1FKSB7CisJCQluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCB0YnVmLCBzaXplb2YgdGJ1Zik7CisJCQlpZiAobiA8IDAgfHwgIXJlc19kbm9rKHRidWYpKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQljcCArPSBuOworCQkJaWYgKGNwICE9IGVyZGF0YSkgeworCQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCS8qIEdldCBjYW5vbmljYWwgbmFtZS4gKi8KKwkJCW4gPSBzdHJsZW4odGJ1ZikgKyAxOwkvKiBmb3IgdGhlIFwwICovCisJCQlpZiAobiA+IGVwIC0gYnAgfHwgbiA+PSBNQVhIT1NUTkFNRUxFTikgeworCQkJCWhhZF9lcnJvcisrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3RybGNweShicCwgdGJ1ZiwgKHNpemVfdCkoZXAgLSBicCkpOworCQkJdG5hbWUgPSBicDsKKwkJCWJwICs9IG47CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodHlwZSAhPSBxdHlwZSkgeworCQkJaWYgKHR5cGUgIT0gVF9LRVkgJiYgdHlwZSAhPSBUX1NJRykKKwkJCQlzeXNsb2coTE9HX05PVElDRXxMT0dfQVVUSCwKKwkgICAgICAgImdldGhvc3RieSouZ2V0YW5zd2VyOiBhc2tlZCBmb3IgXCIlcyAlcyAlc1wiLCBnb3QgdHlwZSBcIiVzXCIiLAorCQkJCSAgICAgICBxbmFtZSwgcF9jbGFzcyhDX0lOKSwgcF90eXBlKHF0eXBlKSwKKwkJCQkgICAgICAgcF90eXBlKHR5cGUpKTsKKwkJCWNwICs9IG47CisJCQljb250aW51ZTsJCS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KKwkJfQorCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBUX1BUUjoKKwkJCWlmIChzdHJjYXNlY21wKHRuYW1lLCBicCkgIT0gMCkgeworCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAorCQkJCSAgICAgICBBc2tlZEZvckdvdCwgcW5hbWUsIGJwKTsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOwkvKiBYWFggLSBoYWRfZXJyb3IrKyA/ICovCisJCQl9CisJCQluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCBicCwgZXAgLSBicCk7CisJCQlpZiAoKG4gPCAwKSB8fCAhcmVzX2hub2soYnApKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJYnJlYWs7CisJCQl9CisjaWYgTVVMVElfUFRSU19BUkVfQUxJQVNFUworCQkJY3AgKz0gbjsKKwkJCWlmIChjcCAhPSBlcmRhdGEpIHsKKwkJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlpZiAoIWhhdmVhbnN3ZXIpCisJCQkJcnMtPmhvc3QuaF9uYW1lID0gYnA7CisJCQllbHNlIGlmIChhcCA8ICZycy0+aG9zdF9hbGlhc2VzW01BWEFMSUFTRVMtMV0pCisJCQkJKmFwKysgPSBicDsKKwkJCWVsc2UKKwkJCQluID0gLTE7CisJCQlpZiAobiAhPSAtMSkgeworCQkJCW4gPSBzdHJsZW4oYnApICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJCWlmIChuID49IE1BWEhPU1ROQU1FTEVOKSB7CisJCQkJCWhhZF9lcnJvcisrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnAgKz0gbjsKKwkJCX0KKwkJCWJyZWFrOworI2Vsc2UKKwkJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOworCQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpIHsKKwkJCQluID0gc3RybGVuKGJwKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCQlpZiAobiA+PSBNQVhIT1NUTkFNRUxFTikgeworCQkJCQloYWRfZXJyb3IrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWJwICs9IG47CisJCQkJbWFwX3Y0djZfaG9zdGVudCgmcnMtPmhvc3QsICZicCwgZXApOworCQkJfQorCQkJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CisJCQlyZXR1cm4gJnJzLT5ob3N0OworI2VuZGlmCisJCWNhc2UgVF9BOgorCQljYXNlIFRfQUFBQToKKwkJCWlmIChzdHJjYXNlY21wKHJzLT5ob3N0LmhfbmFtZSwgYnApICE9IDApIHsKKwkJCQlzeXNsb2coTE9HX05PVElDRXxMT0dfQVVUSCwKKwkJCQkgICAgICAgQXNrZWRGb3JHb3QsIHJzLT5ob3N0LmhfbmFtZSwgYnApOworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KKwkJCX0KKwkJCWlmIChuICE9IHJzLT5ob3N0LmhfbGVuZ3RoKSB7CisJCQkJY3AgKz0gbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICh0eXBlID09IFRfQUFBQSkgeworCQkJCXN0cnVjdCBpbjZfYWRkciBpbjY7CisJCQkJbWVtY3B5KCZpbjYsIGNwLCBJTjZBRERSU1opOworCQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmaW42KSkgeworCQkJCQljcCArPSBuOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAoIWhhdmVhbnN3ZXIpIHsKKwkJCQlpbnQgbm47CisKKwkJCQlycy0+aG9zdC5oX25hbWUgPSBicDsKKwkJCQlubiA9IHN0cmxlbihicCkgKyAxOwkvKiBmb3IgdGhlIFwwICovCisJCQkJYnAgKz0gbm47CisJCQl9CisKKwkJCWJwICs9IHNpemVvZihhbGlnbikgLQorCQkJICAgIChzaXplX3QpKCh1X2xvbmcpYnAgJSBzaXplb2YoYWxpZ24pKTsKKworCQkJaWYgKGJwICsgbiA+PSAmcnMtPmhvc3RidWZbc2l6ZW9mIHJzLT5ob3N0YnVmXSkgeworCQkJCWRwcmludGYoInNpemUgKCVkKSB0b28gYmlnXG4iLCByZXMsIG4pOworCQkJCWhhZF9lcnJvcisrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGhhcCA+PSAmcnMtPmhfYWRkcl9wdHJzW01BWEFERFJTLTFdKSB7CisJCQkJaWYgKCF0b29iaWcrKykKKwkJCQkJZHByaW50ZigiVG9vIG1hbnkgYWRkcmVzc2VzICglZClcbiIsCisJCQkJCQlyZXMsIE1BWEFERFJTKTsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJKHZvaWQpbWVtY3B5KCpoYXArKyA9IGJwLCBjcCwgKHNpemVfdCluKTsKKwkJCWJwICs9IG47CisJCQljcCArPSBuOworCQkJaWYgKGNwICE9IGVyZGF0YSkgeworCQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYWJvcnQoKTsKKwkJfQorCQlpZiAoIWhhZF9lcnJvcikKKwkJCWhhdmVhbnN3ZXIrKzsKKwl9CisJaWYgKGhhdmVhbnN3ZXIpIHsKKwkJKmFwID0gTlVMTDsKKwkJKmhhcCA9IE5VTEw7CisJCS8qCisJCSAqIE5vdGU6IHdlIHNvcnQgZXZlbiBpZiBob3N0IGNhbiB0YWtlIG9ubHkgb25lIGFkZHJlc3MKKwkJICogaW4gaXRzIHJldHVybiBzdHJ1Y3R1cmVzIC0gc2hvdWxkIGdpdmUgaXQgdGhlICJiZXN0IgorCQkgKiBhZGRyZXNzIGluIHRoYXQgY2FzZSwgbm90IHNvbWUgcmFuZG9tIG9uZQorCQkgKi8KKwkJaWYgKHJlcy0+bnNvcnQgJiYgaGF2ZWFuc3dlciA+IDEgJiYgcXR5cGUgPT0gVF9BKQorCQkJYWRkcnNvcnQocnMtPmhfYWRkcl9wdHJzLCBoYXZlYW5zd2VyLCByZXMpOworCQlpZiAoIXJzLT5ob3N0LmhfbmFtZSkgeworCQkJbiA9IHN0cmxlbihxbmFtZSkgKyAxOwkvKiBmb3IgdGhlIFwwICovCisJCQlpZiAobiA+IGVwIC0gYnAgfHwgbiA+PSBNQVhIT1NUTkFNRUxFTikKKwkJCQlnb3RvIG5vX3JlY292ZXJ5OworCQkJc3RybGNweShicCwgcW5hbWUsIChzaXplX3QpKGVwIC0gYnApKTsKKwkJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOworCQkJYnAgKz0gbjsKKwkJfQorCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikKKwkJCW1hcF92NHY2X2hvc3RlbnQoJnJzLT5ob3N0LCAmYnAsIGVwKTsKKwkJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CisJCXJldHVybiAmcnMtPmhvc3Q7CisJfQorIG5vX3JlY292ZXJ5OgorCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50CitnZXRob3N0YnluYW1lX3IoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGhvc3RlbnQgKmhwLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sCisgICAgc3RydWN0IGhvc3RlbnQqKnJlc3VsdCwgaW50ICplcnJvcnApCit7CisgICAgICAgIHN0cnVjdCBob3N0ZW50ICpyZXM7CisKKyAgICAgICAgcmVzID0gZ2V0aG9zdGJ5bmFtZShuYW1lKTsKKyAgICAgICAgKmVycm9ycCA9IGhfZXJybm87CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICpyZXN1bHQgPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoaHAsIHJlcywgc2l6ZW9mICpocCk7CisgICAgICAgICpyZXN1bHQgPSBocDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBob3N0ZW50ICoKK2dldGhvc3RieW5hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgaG9zdGVudCAqaHA7CisJcmVzX3N0YXRlIHJlcyA9IF9fcmVzX2dldF9zdGF0ZSgpOworCisJaWYgKHJlcyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWFzc2VydChuYW1lICE9IE5VTEwpOworCisJLyogdHJ5IElQdjYgZmlyc3QgLSBpZiB0aGF0IGZhaWxzIGRvIElQdjQgKi8KKwlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikgeworCQlocCA9IGdldGhvc3RieW5hbWVfaW50ZXJuYWwobmFtZSwgQUZfSU5FVDYsIHJlcywgTkVUSURfVU5TRVQsIE1BUktfVU5TRVQpOworCQlpZiAoaHApIHsKKwkJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCQkJcmV0dXJuIGhwOworCQl9CisJfQorCWhwID0gZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChuYW1lLCBBRl9JTkVULCByZXMsIE5FVElEX1VOU0VULCBNQVJLX1VOU0VUKTsKKwlfX3Jlc19wdXRfc3RhdGUocmVzKTsKKwlyZXR1cm4gaHA7Cit9CisKK3N0cnVjdCBob3N0ZW50ICoKK2dldGhvc3RieW5hbWUyKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhZikKK3sKKwlyZXR1cm4gYW5kcm9pZF9nZXRob3N0YnluYW1lZm9ybmV0KG5hbWUsIGFmLCBORVRJRF9VTlNFVCwgTUFSS19VTlNFVCk7Cit9CisKK3N0cnVjdCBob3N0ZW50ICoKK2FuZHJvaWRfZ2V0aG9zdGJ5bmFtZWZvcm5ldChjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIHVuc2lnbmVkIG5ldGlkLCB1bnNpZ25lZCBtYXJrKQoreworCXN0cnVjdCBob3N0ZW50ICpocDsKKwlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisKKwlpZiAocmVzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWhwID0gZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChuYW1lLCBhZiwgcmVzLCBuZXRpZCwgbWFyayk7CisJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJcmV0dXJuIGhwOworfQorCisKK3N0YXRpYyBGSUxFKiBhbmRyb2lkX29wZW5fcHJveHkoKQoreworCWludCBzb2NrOworCWNvbnN0IGludCBvbmUgPSAxOworCXN0cnVjdCBzb2NrYWRkcl91biBwcm94eV9hZGRyOworCisJc29jayA9IHNvY2tldChBRl9VTklYLCBTT0NLX1NUUkVBTSB8IFNPQ0tfQ0xPRVhFQywgMCk7CisJaWYgKHNvY2sgPCAwKSB7CisJCXJldHVybiBOVUxMOworCX0KKworCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmb25lLCBzaXplb2Yob25lKSk7CisJbWVtc2V0KCZwcm94eV9hZGRyLCAwLCBzaXplb2YocHJveHlfYWRkcikpOworCXByb3h5X2FkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisJc3RybGNweShwcm94eV9hZGRyLnN1bl9wYXRoLCAiL2Rldi9zb2NrZXQvZG5zcHJveHlkIiwgc2l6ZW9mKHByb3h5X2FkZHIuc3VuX3BhdGgpKTsKKwlpZiAoVEVNUF9GQUlMVVJFX1JFVFJZKGNvbm5lY3Qoc29jaywKKwkJCShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqKSAmcHJveHlfYWRkciwKKwkJCXNpemVvZihwcm94eV9hZGRyKSkpICE9IDApIHsKKwkJY2xvc2Uoc29jayk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBmZG9wZW4oc29jaywgInIrIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqCithbmRyb2lkX3JlYWRfaG9zdGVudChGSUxFKiBwcm94eSkKK3sKKwl1aW50MzJfdCBzaXplOworCWNoYXIgYnVmWzRdOworCWlmIChmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBwcm94eSkgIT0gc2l6ZW9mKGJ1ZikpIHJldHVybiBOVUxMOworCisJLyogVGhpcyBpcyByZWFkaW5nIHNlcmlhbGl6ZWQgZGF0YSBmcm9tIHN5c3RlbS9uZXRkL3NlcnZlci9EbnNQcm94eUxpc3RlbmVyLmNwcAorCSAqIGFuZCBjaGFuZ2VzIGhlcmUgbmVlZCB0byBiZSBtYXRjaGVkIHRoZXJlICovCisJaW50IHJlc3VsdF9jb2RlID0gc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCWlmIChyZXN1bHRfY29kZSAhPSBEbnNQcm94eVF1ZXJ5UmVzdWx0KSB7CisJCWZyZWFkKCZzaXplLCAxLCBzaXplb2Yoc2l6ZSksIHByb3h5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGZyZWFkKCZzaXplLCAxLCBzaXplb2Yoc2l6ZSksIHByb3h5KSAhPSBzaXplb2Yoc2l6ZSkpIHJldHVybiBOVUxMOworCXNpemUgPSBudG9obChzaXplKTsKKwlyZXNfc3RhdGljIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCW1lbXNldCgmcnMtPmhvc3QsIDAsIHNpemVvZihycy0+aG9zdCkpOworCWNoYXIgKnB0ciA9IHJzLT5ob3N0YnVmOworCisJaWYgKGZyZWFkKHB0ciwgMSwgc2l6ZSwgcHJveHkpICE9IHNpemUpIHJldHVybiBOVUxMOworCXB0ciArPSBzaXplOworCXJzLT5ob3N0LmhfbmFtZSA9IHJzLT5ob3N0YnVmOworCisJY2hhciAqKmFsaWFzZXMgPSBycy0+aG9zdF9hbGlhc2VzOworCXJzLT5ob3N0LmhfYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7CisJd2hpbGUgKDEpIHsKKwkJaWYgKGZyZWFkKCZzaXplLCAxLCBzaXplb2Yoc2l6ZSksIHByb3h5KSAhPSBzaXplb2Yoc2l6ZSkpIHJldHVybiBOVUxMOworCQlzaXplID0gbnRvaGwoc2l6ZSk7CisKKwkJaWYgKHNpemUgPT0gMCkgeworCQkJKmFsaWFzZXMgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGZyZWFkKHB0ciwgMSwgc2l6ZSwgcHJveHkpICE9IHNpemUpIHJldHVybiBOVUxMOworCQkqYWxpYXNlcysrID0gcHRyOworCQlwdHIgKz0gc2l6ZTsKKwl9CisKKwlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7CisJcnMtPmhvc3QuaF9hZGRydHlwZSA9IG50b2hsKHNpemUpOworCisJaWYgKGZyZWFkKCZzaXplLCAxLCBzaXplb2Yoc2l6ZSksIHByb3h5KSAhPSBzaXplb2Yoc2l6ZSkpIHJldHVybiBOVUxMOworCXJzLT5ob3N0LmhfbGVuZ3RoID0gbnRvaGwoc2l6ZSk7CisKKwljaGFyICoqYWRkcnMgPSBycy0+aF9hZGRyX3B0cnM7CisJcnMtPmhvc3QuaF9hZGRyX2xpc3QgPSBycy0+aF9hZGRyX3B0cnM7CisJd2hpbGUgKDEpIHsKKwkJaWYgKGZyZWFkKCZzaXplLCAxLCBzaXplb2Yoc2l6ZSksIHByb3h5KSAhPSBzaXplb2Yoc2l6ZSkpIHJldHVybiBOVUxMOworCQlzaXplID0gbnRvaGwoc2l6ZSk7CisJCWlmIChzaXplID09IDApIHsKKwkJCSphZGRycyA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZnJlYWQocHRyLCAxLCBzaXplLCBwcm94eSkgIT0gc2l6ZSkgcmV0dXJuIE5VTEw7CisJCSphZGRycysrID0gcHRyOworCQlwdHIgKz0gc2l6ZTsKKwl9CisKKwlyZXR1cm4gJnJzLT5ob3N0OworfQorCisKK3N0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqCitnZXRob3N0YnluYW1lX2ludGVybmFsX3JlYWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmLCByZXNfc3RhdGUgcmVzKQoreworCWNvbnN0IGNoYXIgKmNwOworCWNoYXIgKmJwLCAqZXA7CisJaW50IHNpemU7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCXJlc19zdGF0aWMgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisKKwlzdGF0aWMgY29uc3QgbnNfZHRhYiBkdGFiW10gPSB7CisJCU5TX0ZJTEVTX0NCKF9nZXRodGJ5bmFtZSwgTlVMTCkKKwkJeyBOU1NSQ19ETlMsIF9kbnNfZ2V0aHRieW5hbWUsIE5VTEwgfSwJLyogZm9yY2UgLURIRVNJT0QgKi8KKwkJeyAwLCAwLCAwIH0KKwl9OworCisJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisKKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQlzaXplID0gSU5BRERSU1o7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCXNpemUgPSBJTjZBRERSU1o7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisJCXJldHVybiBOVUxMOworCX0KKworCXJzLT5ob3N0LmhfYWRkcnR5cGUgPSBhZjsKKwlycy0+aG9zdC5oX2xlbmd0aCA9IHNpemU7CisKKwkvKgorCSAqIGlmIHRoZXJlIGFyZW4ndCBhbnkgZG90cywgaXQgY291bGQgYmUgYSB1c2VyLWxldmVsIGFsaWFzLgorCSAqIHRoaXMgaXMgYWxzbyBkb25lIGluIHJlc19ucXVlcnkoKSBzaW5jZSB3ZSBhcmUgbm90IHRoZSBvbmx5CisJICogZnVuY3Rpb24gdGhhdCBsb29rcyB1cCBob3N0IG5hbWVzLgorCSAqLworCWlmICghc3RyY2hyKG5hbWUsICcuJykgJiYgKGNwID0gX19ob3N0YWxpYXMobmFtZSkpKQorCQluYW1lID0gY3A7CisKKwkvKgorCSAqIGRpc2FsbG93IG5hbWVzIGNvbnNpc3Rpbmcgb25seSBvZiBkaWdpdHMvZG90cywgdW5sZXNzCisJICogdGhleSBlbmQgaW4gYSBkb3QuCisJICovCisJaWYgKGlzZGlnaXQoKHVfY2hhcikgbmFtZVswXSkpCisJCWZvciAoY3AgPSBuYW1lOzsgKytjcCkgeworCQkJaWYgKCEqY3ApIHsKKwkJCQlpZiAoKi0tY3AgPT0gJy4nKQorCQkJCQlicmVhazsKKwkJCQkvKgorCQkJCSAqIEFsbC1udW1lcmljLCBubyBkb3QgYXQgdGhlIGVuZC4KKwkJCQkgKiBGYWtlIHVwIGEgaG9zdGVudCBhcyBpZiB3ZSdkIGFjdHVhbGx5CisJCQkJICogZG9uZSBhIGxvb2t1cC4KKwkJCQkgKi8KKwkJCQlpZiAoaW5ldF9wdG9uKGFmLCBuYW1lLAorCQkJCSAgICAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcikgPD0gMCkgeworCQkJCQloX2Vycm5vID0gSE9TVF9OT1RfRk9VTkQ7CisJCQkJCXJldHVybiBOVUxMOworCQkJCX0KKwkJCQlzdHJuY3B5KHJzLT5ob3N0YnVmLCBuYW1lLCBNQVhETkFNRSk7CisJCQkJcnMtPmhvc3RidWZbTUFYRE5BTUVdID0gJ1wwJzsKKwkJCQlicCA9IHJzLT5ob3N0YnVmICsgTUFYRE5BTUU7CisJCQkJZXAgPSBycy0+aG9zdGJ1ZiArIHNpemVvZiBycy0+aG9zdGJ1ZjsKKwkJCQlycy0+aG9zdC5oX25hbWUgPSBycy0+aG9zdGJ1ZjsKKwkJCQlycy0+aG9zdC5oX2FsaWFzZXMgPSBycy0+aG9zdF9hbGlhc2VzOworCQkJCXJzLT5ob3N0X2FsaWFzZXNbMF0gPSBOVUxMOworCQkJCXJzLT5oX2FkZHJfcHRyc1swXSA9IChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyOworCQkJCXJzLT5oX2FkZHJfcHRyc1sxXSA9IE5VTEw7CisJCQkJcnMtPmhvc3QuaF9hZGRyX2xpc3QgPSBycy0+aF9hZGRyX3B0cnM7CisJCQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpCisJCQkJCW1hcF92NHY2X2hvc3RlbnQoJnJzLT5ob3N0LCAmYnAsIGVwKTsKKwkJCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwkJCQlyZXR1cm4gJnJzLT5ob3N0OworCQkJfQorCQkJaWYgKCFpc2RpZ2l0KCh1X2NoYXIpICpjcCkgJiYgKmNwICE9ICcuJykKKwkJCQlicmVhazsKKwkJfQorCWlmICgoaXN4ZGlnaXQoKHVfY2hhcikgbmFtZVswXSkgJiYgc3RyY2hyKG5hbWUsICc6JykgIT0gTlVMTCkgfHwKKwkgICAgbmFtZVswXSA9PSAnOicpCisJCWZvciAoY3AgPSBuYW1lOzsgKytjcCkgeworCQkJaWYgKCEqY3ApIHsKKwkJCQlpZiAoKi0tY3AgPT0gJy4nKQorCQkJCQlicmVhazsKKwkJCQkvKgorCQkJCSAqIEFsbC1JUHY2LWxlZ2FsLCBubyBkb3QgYXQgdGhlIGVuZC4KKwkJCQkgKiBGYWtlIHVwIGEgaG9zdGVudCBhcyBpZiB3ZSdkIGFjdHVhbGx5CisJCQkJICogZG9uZSBhIGxvb2t1cC4KKwkJCQkgKi8KKwkJCQlpZiAoaW5ldF9wdG9uKGFmLCBuYW1lLAorCQkJCSAgICAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcikgPD0gMCkgeworCQkJCQloX2Vycm5vID0gSE9TVF9OT1RfRk9VTkQ7CisJCQkJCXJldHVybiBOVUxMOworCQkJCX0KKwkJCQlzdHJuY3B5KHJzLT5ob3N0YnVmLCBuYW1lLCBNQVhETkFNRSk7CisJCQkJcnMtPmhvc3RidWZbTUFYRE5BTUVdID0gJ1wwJzsKKwkJCQlicCA9IHJzLT5ob3N0YnVmICsgTUFYRE5BTUU7CisJCQkJZXAgPSBycy0+aG9zdGJ1ZiArIHNpemVvZiBycy0+aG9zdGJ1ZjsKKwkJCQlycy0+aG9zdC5oX25hbWUgPSBycy0+aG9zdGJ1ZjsKKwkJCQlycy0+aG9zdC5oX2FsaWFzZXMgPSBycy0+aG9zdF9hbGlhc2VzOworCQkJCXJzLT5ob3N0X2FsaWFzZXNbMF0gPSBOVUxMOworCQkJCXJzLT5oX2FkZHJfcHRyc1swXSA9IChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyOworCQkJCXJzLT5oX2FkZHJfcHRyc1sxXSA9IE5VTEw7CisJCQkJcnMtPmhvc3QuaF9hZGRyX2xpc3QgPSBycy0+aF9hZGRyX3B0cnM7CisJCQkJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CisJCQkJcmV0dXJuICZycy0+aG9zdDsKKwkJCX0KKwkJCWlmICghaXN4ZGlnaXQoKHVfY2hhcikgKmNwKSAmJiAqY3AgIT0gJzonICYmICpjcCAhPSAnLicpCisJCQkJYnJlYWs7CisJCX0KKworCWhwID0gTlVMTDsKKwloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJaWYgKG5zZGlzcGF0Y2goJmhwLCBkdGFiLCBOU0RCX0hPU1RTLCAiZ2V0aG9zdGJ5bmFtZSIsCisJICAgIGRlZmF1bHRfZG5zX2ZpbGVzLCBuYW1lLCBzdHJsZW4obmFtZSksIGFmKSAhPSBOU19TVUNDRVNTKSB7CisJCXJldHVybiBOVUxMOworCX0KKwloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwlyZXR1cm4gaHA7Cit9CisKKworLy8gdmVyeSBzaW1pbGFyIGluIHByb3h5LW5lc3MgdG8gYW5kcm9pZF9nZXRhZGRyaW5mb19wcm94eQorc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKK2dldGhvc3RieW5hbWVfaW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmLCByZXNfc3RhdGUgcmVzLCB1bnNpZ25lZCBuZXRpZCwgdW5zaWduZWQgbWFyaykKK3sKKwljb25zdCBjaGFyICpjYWNoZV9tb2RlID0gZ2V0ZW52KCJBTkRST0lEX0ROU19NT0RFIik7CisJRklMRSogcHJveHkgPSBOVUxMOworCXN0cnVjdCBob3N0ZW50ICpyZXN1bHQgPSBOVUxMOworCisJaWYgKGNhY2hlX21vZGUgIT0gTlVMTCAmJiBzdHJjbXAoY2FjaGVfbW9kZSwgImxvY2FsIikgPT0gMCkgeworCQlyZXNfc2V0bmV0aWQocmVzLCBuZXRpZCk7CisJCXJlc19zZXRtYXJrKHJlcywgbWFyayk7CisJCXJldHVybiBnZXRob3N0YnluYW1lX2ludGVybmFsX3JlYWwobmFtZSwgYWYsIHJlcyk7CisJfQorCisJcHJveHkgPSBhbmRyb2lkX29wZW5fcHJveHkoKTsKKwlpZiAocHJveHkgPT0gTlVMTCkgZ290byBleGl0OworCisJbmV0aWQgPSBfX25ldGRDbGllbnREaXNwYXRjaC5uZXRJZEZvclJlc29sdihuZXRpZCk7CisKKwkvKiBUaGlzIGlzIHdyaXRpbmcgdG8gc3lzdGVtL25ldGQvc2VydmVyL0Ruc1Byb3h5TGlzdGVuZXIuY3BwIGFuZCBjaGFuZ2VzCisJICogaGVyZSBuZWVkIHRvIGJlIG1hdGNoZWQgdGhlcmUgKi8KKwlpZiAoZnByaW50Zihwcm94eSwgImdldGhvc3RieW5hbWUgJXUgJXMgJWQiLAorCQkJbmV0aWQsCisJCQluYW1lID09IE5VTEwgPyAiXiIgOiBuYW1lLAorCQkJYWYpIDwgMCkgeworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGZwdXRjKDAsIHByb3h5KSA9PSBFT0YgfHwgZmZsdXNoKHByb3h5KSAhPSAwKSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXN1bHQgPSBhbmRyb2lkX3JlYWRfaG9zdGVudChwcm94eSk7CisKK2V4aXQ6CisJaWYgKHByb3h5ICE9IE5VTEwpIHsKKwkJZmNsb3NlKHByb3h5KTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworCitzdHJ1Y3QgaG9zdGVudCAqCithbmRyb2lkX2dldGhvc3RieWFkZHJmb3JuZXRfcHJveHkoY29uc3Qgdm9pZCAqYWRkciwKKyAgICBzb2NrbGVuX3QgbGVuLCBpbnQgYWYsIHVuc2lnbmVkIG5ldGlkKQoreworCXN0cnVjdCBob3N0ZW50ICpyZXN1bHQgPSBOVUxMOworCUZJTEUqIHByb3h5ID0gYW5kcm9pZF9vcGVuX3Byb3h5KCk7CisKKwlpZiAocHJveHkgPT0gTlVMTCkgZ290byBleGl0OworCisJY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07ICAvL2JpZyBlbm91Z2ggZm9yIElQdjQgYW5kIElQdjYKKwljb25zdCBjaGFyICogYWRkclN0ciA9IGluZXRfbnRvcChhZiwgYWRkciwgYnVmLCBzaXplb2YoYnVmKSk7CisJaWYgKGFkZHJTdHIgPT0gTlVMTCkgZ290byBleGl0OworCisJbmV0aWQgPSBfX25ldGRDbGllbnREaXNwYXRjaC5uZXRJZEZvclJlc29sdihuZXRpZCk7CisKKwlpZiAoZnByaW50Zihwcm94eSwgImdldGhvc3RieWFkZHIgJXMgJWQgJWQgJXUiLAorCQkJYWRkclN0ciwgbGVuLCBhZiwgbmV0aWQpIDwgMCkgeworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKGZwdXRjKDAsIHByb3h5KSA9PSBFT0YgfHwgZmZsdXNoKHByb3h5KSAhPSAwKSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXN1bHQgPSBhbmRyb2lkX3JlYWRfaG9zdGVudChwcm94eSk7CitleGl0OgorCWlmIChwcm94eSAhPSBOVUxMKSB7CisJCWZjbG9zZShwcm94eSk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0cnVjdCBob3N0ZW50ICoKK2FuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcm5ldF9yZWFsKGNvbnN0IHZvaWQgKmFkZHIsCisgICAgc29ja2xlbl90IGxlbiwgaW50IGFmLCB1bnNpZ25lZCBuZXRpZCwgdW5zaWduZWQgbWFyaykKK3sKKwljb25zdCB1X2NoYXIgKnVhZGRyID0gKGNvbnN0IHVfY2hhciAqKWFkZHI7CisJc29ja2xlbl90IHNpemU7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCXN0YXRpYyBjb25zdCBuc19kdGFiIGR0YWJbXSA9IHsKKwkJTlNfRklMRVNfQ0IoX2dldGh0YnlhZGRyLCBOVUxMKQorCQl7IE5TU1JDX0ROUywgX2Ruc19nZXRodGJ5YWRkciwgTlVMTCB9LAkvKiBmb3JjZSAtREhFU0lPRCAqLworCQl7IDAsIDAsIDAgfQorCX07CisKKwlhc3NlcnQoYWRkciAhPSBOVUxMKTsKKworCWlmIChhZiA9PSBBRl9JTkVUNiAmJiBsZW4gPT0gTlNfSU42QUREUlNaICYmCisJICAgIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKWFkZHIpIHx8CisJICAgICBJTjZfSVNfQUREUl9TSVRFTE9DQUwoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKWFkZHIpKSkgeworCQloX2Vycm5vID0gSE9TVF9OT1RfRk9VTkQ7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoYWYgPT0gQUZfSU5FVDYgJiYgbGVuID09IE5TX0lONkFERFJTWiAmJgorCSAgICAoSU42X0lTX0FERFJfVjRNQVBQRUQoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKWFkZHIpIHx8CisJICAgICBJTjZfSVNfQUREUl9WNENPTVBBVCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopYWRkcikpKSB7CisJCS8qIFVubWFwLiAqLworCQl1YWRkciArPSBOU19JTjZBRERSU1ogLSBOU19JTkFERFJTWjsKKwkJYWRkciA9IHVhZGRyOworCQlhZiA9IEFGX0lORVQ7CisJCWxlbiA9IE5TX0lOQUREUlNaOworCX0KKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQlzaXplID0gTlNfSU5BRERSU1o7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCXNpemUgPSBOU19JTjZBRERSU1o7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm5vID0gRUFGTk9TVVBQT1JUOworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoc2l6ZSAhPSBsZW4pIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWhwID0gTlVMTDsKKwloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJaWYgKG5zZGlzcGF0Y2goJmhwLCBkdGFiLCBOU0RCX0hPU1RTLCAiZ2V0aG9zdGJ5YWRkciIsCisJCWRlZmF1bHRfZG5zX2ZpbGVzLCB1YWRkciwgbGVuLCBhZiwgbmV0aWQsIG1hcmspICE9IE5TX1NVQ0NFU1MpCisJCXJldHVybiBOVUxMOworCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOworCXJldHVybiBocDsKK30KKworc3RydWN0IGhvc3RlbnQgKgorYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9ybmV0KGNvbnN0IHZvaWQgKmFkZHIsIHNvY2tsZW5fdCBsZW4sIGludCBhZiwgdW5zaWduZWQgbmV0aWQsIHVuc2lnbmVkIG1hcmspCit7CisJY29uc3QgY2hhciAqY2FjaGVfbW9kZSA9IGdldGVudigiQU5EUk9JRF9ETlNfTU9ERSIpOworCisJaWYgKGNhY2hlX21vZGUgPT0gTlVMTCB8fCBzdHJjbXAoY2FjaGVfbW9kZSwgImxvY2FsIikgIT0gMCkgeworCQlyZXR1cm4gYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9ybmV0X3Byb3h5KGFkZHIsIGxlbiwgYWYsIG5ldGlkKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9ybmV0X3JlYWwoYWRkcixsZW4sIGFmLCBuZXRpZCwgbWFyayk7CisJfQorfQorCitzdHJ1Y3QgaG9zdGVudCAqCitnZXRob3N0YnlhZGRyKGNvbnN0IHZvaWQgKmFkZHIsIHNvY2tsZW5fdCBsZW4sIGludCBhZikKK3sKKwlyZXR1cm4gYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9ybmV0KGFkZHIsIGxlbiwgYWYsIE5FVElEX1VOU0VULCBNQVJLX1VOU0VUKTsKK30KKworCitzdGF0aWMgdm9pZAorX3NldGh0ZW50KGludCBmKQoreworICAgIHJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworICAgIGlmIChycyA9PSBOVUxMKSByZXR1cm47CisJaWYgKCFycy0+aG9zdGYpCisJCXJzLT5ob3N0ZiA9IGZvcGVuKF9QQVRIX0hPU1RTLCAiciIgKTsKKwllbHNlCisJCXJld2luZChycy0+aG9zdGYpOworCXJzLT5zdGF5b3BlbiA9IGY7Cit9CisKK3N0YXRpYyB2b2lkCitfZW5kaHRlbnQodm9pZCkKK3sKKyAgICByZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKyAgICBpZiAocnMgPT0gTlVMTCkgcmV0dXJuOworCisJaWYgKHJzLT5ob3N0ZiAmJiAhcnMtPnN0YXlvcGVuKSB7CisJCSh2b2lkKSBmY2xvc2UocnMtPmhvc3RmKTsKKwkJcnMtPmhvc3RmID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqCitfZ2V0aHRlbnQodm9pZCkKK3sKKwljaGFyICpwOworCWNoYXIgKmNwLCAqKnE7CisJaW50IGFmLCBsZW47CisJcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisKKwlpZiAoIXJzLT5ob3N0ZiAmJiAhKHJzLT5ob3N0ZiA9IGZvcGVuKF9QQVRIX0hPU1RTLCAiciIgKSkpIHsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlVMTDsKKwl9CisgYWdhaW46CisJaWYgKCEocCA9IGZnZXRzKHJzLT5ob3N0YnVmLCBzaXplb2YgcnMtPmhvc3RidWYsIHJzLT5ob3N0ZikpKSB7CisJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmICgqcCA9PSAnIycpCisJCWdvdG8gYWdhaW47CisJaWYgKCEoY3AgPSBzdHJwYnJrKHAsICIjXG4iKSkpCisJCWdvdG8gYWdhaW47CisJKmNwID0gJ1wwJzsKKwlpZiAoIShjcCA9IHN0cnBicmsocCwgIiBcdCIpKSkKKwkJZ290byBhZ2FpbjsKKwkqY3ArKyA9ICdcMCc7CisJaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgcCwgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpID4gMCkgeworCQlhZiA9IEFGX0lORVQ2OworCQlsZW4gPSBJTjZBRERSU1o7CisJfSBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgcCwgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpID4gMCkgeworCQlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisJCWlmIChyZXMgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikgeworCQkJbWFwX3Y0djZfYWRkcmVzcygoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkciwKKwkJCSAgICAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcik7CisJCQlhZiA9IEFGX0lORVQ2OworCQkJbGVuID0gSU42QUREUlNaOworCQl9IGVsc2UgeworCQkJYWYgPSBBRl9JTkVUOworCQkJbGVuID0gSU5BRERSU1o7CisJCX0KKwkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJfSBlbHNlIHsKKwkJZ290byBhZ2FpbjsKKwl9CisJLyogaWYgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlJ3JlIGxvb2tpbmcgZm9yLCBza2lwIGl0LiAqLworCWlmIChycy0+aG9zdC5oX2FkZHJ0eXBlICE9IDAgJiYgcnMtPmhvc3QuaF9hZGRydHlwZSAhPSBhZikKKwkJZ290byBhZ2FpbjsKKwlpZiAocnMtPmhvc3QuaF9sZW5ndGggIT0gMCAmJiBycy0+aG9zdC5oX2xlbmd0aCAhPSBsZW4pCisJCWdvdG8gYWdhaW47CisJcnMtPmhfYWRkcl9wdHJzWzBdID0gKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHI7CisJcnMtPmhfYWRkcl9wdHJzWzFdID0gTlVMTDsKKwlycy0+aG9zdC5oX2FkZHJfbGlzdCA9IHJzLT5oX2FkZHJfcHRyczsKKwlycy0+aG9zdC5oX2xlbmd0aCA9IGxlbjsKKwlycy0+aG9zdC5oX2FkZHJ0eXBlID0gYWY7CisJd2hpbGUgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpCisJCWNwKys7CisJcnMtPmhvc3QuaF9uYW1lID0gY3A7CisJcSA9IHJzLT5ob3N0LmhfYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7CisJaWYgKChjcCA9IHN0cnBicmsoY3AsICIgXHQiKSkgIT0gTlVMTCkKKwkJKmNwKysgPSAnXDAnOworCXdoaWxlIChjcCAmJiAqY3ApIHsKKwkJaWYgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpIHsKKwkJCWNwKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocSA8ICZycy0+aG9zdF9hbGlhc2VzW01BWEFMSUFTRVMgLSAxXSkKKwkJCSpxKysgPSBjcDsKKwkJaWYgKChjcCA9IHN0cnBicmsoY3AsICIgXHQiKSkgIT0gTlVMTCkKKwkJCSpjcCsrID0gJ1wwJzsKKwl9CisJKnEgPSBOVUxMOworCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOworCXJldHVybiAmcnMtPmhvc3Q7Cit9CisKKy8qQVJHU1VTRUQqLworaW50CitfZ2V0aHRieW5hbWUodm9pZCAqcnYsIHZvaWQgKmNiX2RhdGEsIHZhX2xpc3QgYXApCit7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGFmOworCisJYXNzZXJ0KHJ2ICE9IE5VTEwpOworCisJbmFtZSA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkvKiBOT1NUUklDVCBza2lwIGxlbiAqLyh2b2lkKXZhX2FyZyhhcCwgaW50KTsKKwlhZiA9IHZhX2FyZyhhcCwgaW50KTsKKworCWhwID0gTlVMTDsKKyNpZiAwCisJeworCQlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisJCWlmIChyZXMgPT0gTlVMTCkKKwkJCXJldHVybiBOU19OT1RGT1VORDsKKwkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpCisJCQlocCA9IF9nZXRodGJ5bmFtZTIobmFtZSwgQUZfSU5FVDYpOworCQlpZiAoaHA9PU5VTEwpCisJCQlocCA9IF9nZXRodGJ5bmFtZTIobmFtZSwgQUZfSU5FVCk7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCX0KKyNlbHNlCisJaHAgPSBfZ2V0aHRieW5hbWUyKG5hbWUsIGFmKTsKKyNlbmRpZgorCSooKHN0cnVjdCBob3N0ZW50ICoqKXJ2KSA9IGhwOworCWlmIChocCA9PSBOVUxMKSB7CisJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwlyZXR1cm4gTlNfU1VDQ0VTUzsKK30KKworc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKK19nZXRodGJ5bmFtZTIoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmKQoreworCXN0cnVjdCBob3N0ZW50ICpwOworCWNoYXIgKnRtcGJ1ZiwgKnB0ciwgKipjcDsKKwlpbnQgbnVtOworCXNpemVfdCBsZW47CisJcmVzX3N0YXRpYyBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKworCWFzc2VydChuYW1lICE9IE5VTEwpOworCisJX3NldGh0ZW50KHJzLT5zdGF5b3Blbik7CisJcHRyID0gdG1wYnVmID0gTlVMTDsKKwludW0gPSAwOworCXdoaWxlICgocCA9IF9nZXRodGVudCgpKSAhPSBOVUxMICYmIG51bSA8IE1BWEFERFJTKSB7CisJCWlmIChwLT5oX2FkZHJ0eXBlICE9IGFmKQorCQkJY29udGludWU7CisJCWlmIChzdHJjYXNlY21wKHAtPmhfbmFtZSwgbmFtZSkgIT0gMCkgeworCQkJZm9yIChjcCA9IHAtPmhfYWxpYXNlczsgKmNwICE9IE5VTEw7IGNwKyspCisJCQkJaWYgKHN0cmNhc2VjbXAoKmNwLCBuYW1lKSA9PSAwKQorCQkJCQlicmVhazsKKwkJCWlmICgqY3AgPT0gTlVMTCkgY29udGludWU7CisJCX0KKworCQlpZiAobnVtID09IDApIHsKKwkJCXNpemVfdCBidWZzaXplOworCQkJY2hhciAqc3JjOworCisJCQlidWZzaXplID0gc3RybGVuKHAtPmhfbmFtZSkgKyAyICsKKwkJCQkgIE1BWEFERFJTICogcC0+aF9sZW5ndGggKworCQkJCSAgQUxJR05CWVRFUzsKKwkJCWZvciAoY3AgPSBwLT5oX2FsaWFzZXM7ICpjcCAhPSBOVUxMOyBjcCsrKQorCQkJCWJ1ZnNpemUgKz0gc3RybGVuKCpjcCkgKyAxOworCisJCQlpZiAoKHRtcGJ1ZiA9IG1hbGxvYyhidWZzaXplKSkgPT0gTlVMTCkgeworCQkJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKworCQkJcHRyID0gdG1wYnVmOworCQkJc3JjID0gcC0+aF9uYW1lOworCQkJd2hpbGUgKCgqcHRyKysgPSAqc3JjKyspICE9ICdcMCcpOworCQkJZm9yIChjcCA9IHAtPmhfYWxpYXNlczsgKmNwICE9IE5VTEw7IGNwKyspIHsKKwkJCQlzcmMgPSAqY3A7CisJCQkJd2hpbGUgKCgqcHRyKysgPSAqc3JjKyspICE9ICdcMCcpOworCQkJfQorCQkJKnB0cisrID0gJ1wwJzsKKworCQkJcHRyID0gKGNoYXIgKikodm9pZCAqKUFMSUdOKHB0cik7CisJCX0KKworCQkodm9pZCltZW1jcHkocHRyLCBwLT5oX2FkZHJfbGlzdFswXSwgKHNpemVfdClwLT5oX2xlbmd0aCk7CisJCXB0ciArPSBwLT5oX2xlbmd0aDsKKwkJbnVtKys7CisJfQorCV9lbmRodGVudCgpOworCWlmIChudW0gPT0gMCkgcmV0dXJuIE5VTEw7CisKKwlsZW4gPSBwdHIgLSB0bXBidWY7CisJaWYgKGxlbiA+IChzaXplb2YocnMtPmhvc3RidWYpIC0gQUxJR05CWVRFUykpIHsKKwkJZnJlZSh0bXBidWYpOworCQllcnJubyA9IEVOT1NQQzsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcHRyID0gbWVtY3B5KCh2b2lkICopQUxJR04ocnMtPmhvc3RidWYpLCB0bXBidWYsIGxlbik7CisJZnJlZSh0bXBidWYpOworCisJcnMtPmhvc3QuaF9uYW1lID0gcHRyOworCXdoaWxlICgqcHRyKyspOworCisJY3AgPSBycy0+aG9zdF9hbGlhc2VzOworCXdoaWxlICgqcHRyKSB7CisJCSpjcCsrID0gcHRyOworCQl3aGlsZSAoKnB0cisrKTsKKwl9CisJcHRyKys7CisJKmNwID0gTlVMTDsKKworCXB0ciA9IChjaGFyICopKHZvaWQgKilBTElHTihwdHIpOworCWNwID0gcnMtPmhfYWRkcl9wdHJzOworCXdoaWxlIChudW0tLSkgeworCQkqY3ArKyA9IHB0cjsKKwkJcHRyICs9IHJzLT5ob3N0LmhfbGVuZ3RoOworCX0KKwkqY3AgPSBOVUxMOworCisJcmV0dXJuICZycy0+aG9zdDsKK30KKworLypBUkdTVVNFRCovCitzdGF0aWMgaW50CitfZ2V0aHRieWFkZHIodm9pZCAqcnYsIHZvaWQgKmNiX2RhdGEsIHZhX2xpc3QgYXApCit7CisJc3RydWN0IGhvc3RlbnQgKnA7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcjsKKwlpbnQgbGVuLCBhZjsKKwlyZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKworCWFzc2VydChydiAhPSBOVUxMKTsKKworCWFkZHIgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGNoYXIgKik7CisJbGVuID0gdmFfYXJnKGFwLCBpbnQpOworCWFmID0gdmFfYXJnKGFwLCBpbnQpOworCisJcnMtPmhvc3QuaF9sZW5ndGggPSBsZW47CisJcnMtPmhvc3QuaF9hZGRydHlwZSA9IGFmOworCisJX3NldGh0ZW50KHJzLT5zdGF5b3Blbik7CisJd2hpbGUgKChwID0gX2dldGh0ZW50KCkpICE9IE5VTEwpCisJCWlmIChwLT5oX2FkZHJ0eXBlID09IGFmICYmICFtZW1jbXAocC0+aF9hZGRyLCBhZGRyLAorCQkgICAgKHNpemVfdClsZW4pKQorCQkJYnJlYWs7CisJX2VuZGh0ZW50KCk7CisJKigoc3RydWN0IGhvc3RlbnQgKiopcnYpID0gcDsKKwlpZiAocD09TlVMTCkgeworCQloX2Vycm5vID0gSE9TVF9OT1RfRk9VTkQ7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJcmV0dXJuIE5TX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkCittYXBfdjR2Nl9hZGRyZXNzKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0KQoreworCXVfY2hhciAqcCA9ICh1X2NoYXIgKilkc3Q7CisJY2hhciB0bXBbSU5BRERSU1pdOworCWludCBpOworCisJYXNzZXJ0KHNyYyAhPSBOVUxMKTsKKwlhc3NlcnQoZHN0ICE9IE5VTEwpOworCisJLyogU3Rhc2ggYSB0ZW1wb3JhcnkgY29weSBzbyBvdXIgY2FsbGVyIGNhbiB1cGRhdGUgaW4gcGxhY2UuICovCisJKHZvaWQpbWVtY3B5KHRtcCwgc3JjLCBJTkFERFJTWik7CisJLyogTWFyayB0aGlzIGlwdjYgYWRkciBhcyBhIG1hcHBlZCBpcHY0LiAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQkqcCsrID0gMHgwMDsKKwkqcCsrID0gMHhmZjsKKwkqcCsrID0gMHhmZjsKKwkvKiBSZXRyaWV2ZSB0aGUgc2F2ZWQgY29weSBhbmQgd2UncmUgZG9uZS4gKi8KKwkodm9pZCltZW1jcHkoKHZvaWQgKilwLCB0bXAsIElOQUREUlNaKTsKK30KKworc3RhdGljIHZvaWQKK21hcF92NHY2X2hvc3RlbnQoc3RydWN0IGhvc3RlbnQgKmhwLCBjaGFyICoqYnBwLCBjaGFyICplcCkKK3sKKwljaGFyICoqYXA7CisKKwlhc3NlcnQoaHAgIT0gTlVMTCk7CisJYXNzZXJ0KGJwcCAhPSBOVUxMKTsKKwlhc3NlcnQoZXAgIT0gTlVMTCk7CisKKwlpZiAoaHAtPmhfYWRkcnR5cGUgIT0gQUZfSU5FVCB8fCBocC0+aF9sZW5ndGggIT0gSU5BRERSU1opCisJCXJldHVybjsKKwlocC0+aF9hZGRydHlwZSA9IEFGX0lORVQ2OworCWhwLT5oX2xlbmd0aCA9IElONkFERFJTWjsKKwlmb3IgKGFwID0gaHAtPmhfYWRkcl9saXN0OyAqYXA7IGFwKyspIHsKKwkJaW50IGkgPSBzaXplb2YoYWxpZ24pIC0gKHNpemVfdCkoKHVfbG9uZykqYnBwICUgc2l6ZW9mKGFsaWduKSk7CisKKwkJaWYgKGVwIC0gKmJwcCA8IChpICsgSU42QUREUlNaKSkgeworCQkJLyogT3V0IG9mIG1lbW9yeS4gIFRydW5jYXRlIGFkZHJlc3MgbGlzdCBoZXJlLiAgWFhYICovCisJCQkqYXAgPSBOVUxMOworCQkJcmV0dXJuOworCQl9CisJCSpicHAgKz0gaTsKKwkJbWFwX3Y0djZfYWRkcmVzcygqYXAsICpicHApOworCQkqYXAgPSAqYnBwOworCQkqYnBwICs9IElONkFERFJTWjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithZGRyc29ydChjaGFyICoqYXAsIGludCBudW0sIHJlc19zdGF0ZSByZXMpCit7CisJaW50IGksIGo7CisJY2hhciAqKnA7CisJc2hvcnQgYXZhbFtNQVhBRERSU107CisJaW50IG5lZWRzb3J0ID0gMDsKKworCWFzc2VydChhcCAhPSBOVUxMKTsKKworCXAgPSBhcDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyssIHArKykgeworCSAgICBmb3IgKGogPSAwIDsgKHVuc2lnbmVkKWogPCByZXMtPm5zb3J0OyBqKyspCisJCWlmIChyZXMtPnNvcnRfbGlzdFtqXS5hZGRyLnNfYWRkciA9PQorCQkgICAgKCgoc3RydWN0IGluX2FkZHIgKikodm9pZCAqKSgqcCkpLT5zX2FkZHIgJgorCQkgICAgcmVzLT5zb3J0X2xpc3Rbal0ubWFzaykpCisJCQlicmVhazsKKwkgICAgYXZhbFtpXSA9IGo7CisJICAgIGlmIChuZWVkc29ydCA9PSAwICYmIGkgPiAwICYmIGogPCBhdmFsW2ktMV0pCisJCW5lZWRzb3J0ID0gaTsKKwl9CisJaWYgKCFuZWVkc29ydCkKKwkgICAgcmV0dXJuOworCisJd2hpbGUgKG5lZWRzb3J0IDwgbnVtKSB7CisJICAgIGZvciAoaiA9IG5lZWRzb3J0IC0gMTsgaiA+PSAwOyBqLS0pIHsKKwkJaWYgKGF2YWxbal0gPiBhdmFsW2orMV0pIHsKKwkJICAgIGNoYXIgKmhwOworCisJCSAgICBpID0gYXZhbFtqXTsKKwkJICAgIGF2YWxbal0gPSBhdmFsW2orMV07CisJCSAgICBhdmFsW2orMV0gPSBpOworCisJCSAgICBocCA9IGFwW2pdOworCQkgICAgYXBbal0gPSBhcFtqKzFdOworCQkgICAgYXBbaisxXSA9IGhwOworCQl9IGVsc2UKKwkJICAgIGJyZWFrOworCSAgICB9CisJICAgIG5lZWRzb3J0Kys7CisJfQorfQorCitzdHJ1Y3QgaG9zdGVudCAqCitnZXRob3N0ZW50KHZvaWQpCit7CisgICAgcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisJcnMtPmhvc3QuaF9hZGRydHlwZSA9IDA7CisJcnMtPmhvc3QuaF9sZW5ndGggPSAwOworCXJldHVybiBfZ2V0aHRlbnQoKTsKK30KKworLypBUkdTVVNFRCovCitzdGF0aWMgaW50CitfZG5zX2dldGh0YnluYW1lKHZvaWQgKnJ2LCB2b2lkICpjYl9kYXRhLCB2YV9saXN0IGFwKQoreworCXF1ZXJ5YnVmICpidWY7CisJaW50IG4sIHR5cGU7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGFmOworCXJlc19zdGF0ZSByZXM7CisKKwlhc3NlcnQocnYgIT0gTlVMTCk7CisKKwluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOworCS8qIE5PU1RSSUNUIHNraXAgbGVuICovKHZvaWQpdmFfYXJnKGFwLCBpbnQpOworCWFmID0gdmFfYXJnKGFwLCBpbnQpOworCisJc3dpdGNoIChhZikgeworCWNhc2UgQUZfSU5FVDoKKwkJdHlwZSA9IFRfQTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJdHlwZSA9IFRfQUFBQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5TX1VOQVZBSUw7CisJfQorCWJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikpOworCWlmIChidWYgPT0gTlVMTCkgeworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwluID0gcmVzX25zZWFyY2gocmVzLCBuYW1lLCBDX0lOLCB0eXBlLCBidWYtPmJ1Ziwgc2l6ZW9mKGJ1Zi0+YnVmKSk7CisJaWYgKG4gPCAwKSB7CisJCWZyZWUoYnVmKTsKKwkJZHByaW50ZigicmVzX25zZWFyY2ggZmFpbGVkICglZClcbiIsIHJlcywgbik7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCWhwID0gZ2V0YW5zd2VyKGJ1ZiwgbiwgbmFtZSwgdHlwZSwgcmVzKTsKKwlmcmVlKGJ1Zik7CisJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJaWYgKGhwID09IE5VTEwpCisJCXN3aXRjaCAoaF9lcnJubykgeworCQljYXNlIEhPU1RfTk9UX0ZPVU5EOgorCQkJcmV0dXJuIE5TX05PVEZPVU5EOworCQljYXNlIFRSWV9BR0FJTjoKKwkJCXJldHVybiBOU19UUllBR0FJTjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBOU19VTkFWQUlMOworCQl9CisJKigoc3RydWN0IGhvc3RlbnQgKiopcnYpID0gaHA7CisJcmV0dXJuIE5TX1NVQ0NFU1M7Cit9CisKKy8qQVJHU1VTRUQqLworc3RhdGljIGludAorX2Ruc19nZXRodGJ5YWRkcih2b2lkICpydiwgdm9pZAkqY2JfZGF0YSwgdmFfbGlzdCBhcCkKK3sKKwljaGFyIHFidWZbTUFYRE5BTUUgKyAxXSwgKnFwLCAqZXA7CisJaW50IG47CisJcXVlcnlidWYgKmJ1ZjsKKwlzdHJ1Y3QgaG9zdGVudCAqaHA7CisJY29uc3QgdW5zaWduZWQgY2hhciAqdWFkZHI7CisJaW50IGxlbiwgYWYsIGFkdmFuY2U7CisJcmVzX3N0YXRlIHJlczsKKwl1bnNpZ25lZCBuZXRpZCwgbWFyazsKKwlyZXNfc3RhdGljIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJYXNzZXJ0KHJ2ICE9IE5VTEwpOworCisJdWFkZHIgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGNoYXIgKik7CisJbGVuID0gdmFfYXJnKGFwLCBpbnQpOworCWFmID0gdmFfYXJnKGFwLCBpbnQpOworCW5ldGlkID0gdmFfYXJnKGFwLCB1bnNpZ25lZCk7CisJbWFyayA9IHZhX2FyZyhhcCwgdW5zaWduZWQpOworCisJc3dpdGNoIChhZikgeworCWNhc2UgQUZfSU5FVDoKKwkJKHZvaWQpc25wcmludGYocWJ1Ziwgc2l6ZW9mKHFidWYpLCAiJXUuJXUuJXUuJXUuaW4tYWRkci5hcnBhIiwKKwkJICAgICh1YWRkclszXSAmIDB4ZmYpLCAodWFkZHJbMl0gJiAweGZmKSwKKwkJICAgICh1YWRkclsxXSAmIDB4ZmYpLCAodWFkZHJbMF0gJiAweGZmKSk7CisJCWJyZWFrOworCisJY2FzZSBBRl9JTkVUNjoKKwkJcXAgPSBxYnVmOworCQllcCA9IHFidWYgKyBzaXplb2YocWJ1ZikgLSAxOworCQlmb3IgKG4gPSBJTjZBRERSU1ogLSAxOyBuID49IDA7IG4tLSkgeworCQkJYWR2YW5jZSA9IHNucHJpbnRmKHFwLCAoc2l6ZV90KShlcCAtIHFwKSwgIiV4LiV4LiIsCisJCQkgICAgdWFkZHJbbl0gJiAweGYsCisJCQkgICAgKCh1bnNpZ25lZCBpbnQpdWFkZHJbbl0gPj4gNCkgJiAweGYpOworCQkJaWYgKGFkdmFuY2UgPiAwICYmIHFwICsgYWR2YW5jZSA8IGVwKQorCQkJCXFwICs9IGFkdmFuY2U7CisJCQllbHNlIHsKKwkJCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCQkJcmV0dXJuIE5TX05PVEZPVU5EOworCQkJfQorCQl9CisJCWlmIChzdHJsY2F0KHFidWYsICJpcDYuYXJwYSIsIHNpemVvZihxYnVmKSkgPj0gc2l6ZW9mKHFidWYpKSB7CisJCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYWJvcnQoKTsKKwl9CisKKwlidWYgPSBtYWxsb2Moc2l6ZW9mKCpidWYpKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCXJlcyA9IF9fcmVzX2dldF9zdGF0ZSgpOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlmcmVlKGJ1Zik7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJcmVzX3NldG5ldGlkKHJlcywgbmV0aWQpOworCXJlc19zZXRtYXJrKHJlcywgbWFyayk7CisJbiA9IHJlc19ucXVlcnkocmVzLCBxYnVmLCBDX0lOLCBUX1BUUiwgYnVmLT5idWYsIHNpemVvZihidWYtPmJ1ZikpOworCWlmIChuIDwgMCkgeworCQlmcmVlKGJ1Zik7CisJCWRwcmludGYoInJlc19ucXVlcnkgZmFpbGVkICglZClcbiIsIHJlcywgbik7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCWhwID0gZ2V0YW5zd2VyKGJ1ZiwgbiwgcWJ1ZiwgVF9QVFIsIHJlcyk7CisJZnJlZShidWYpOworCWlmIChocCA9PSBOVUxMKSB7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCQlzd2l0Y2ggKGhfZXJybm8pIHsKKwkJY2FzZSBIT1NUX05PVF9GT1VORDoKKwkJCXJldHVybiBOU19OT1RGT1VORDsKKwkJY2FzZSBUUllfQUdBSU46CisJCQlyZXR1cm4gTlNfVFJZQUdBSU47CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTlNfVU5BVkFJTDsKKwkJfQorCX0KKwlocC0+aF9hZGRydHlwZSA9IGFmOworCWhwLT5oX2xlbmd0aCA9IGxlbjsKKwkodm9pZCltZW1jcHkocnMtPmhvc3RfYWRkciwgdWFkZHIsIChzaXplX3QpbGVuKTsKKwlycy0+aF9hZGRyX3B0cnNbMF0gPSAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcjsKKwlycy0+aF9hZGRyX3B0cnNbMV0gPSBOVUxMOworCWlmIChhZiA9PSBBRl9JTkVUICYmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KSkgeworCQltYXBfdjR2Nl9hZGRyZXNzKChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyLAorCQkgICAgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpOworCQlocC0+aF9hZGRydHlwZSA9IEFGX0lORVQ2OworCQlocC0+aF9sZW5ndGggPSBJTjZBRERSU1o7CisJfQorCisJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJKigoc3RydWN0IGhvc3RlbnQgKiopcnYpID0gaHA7CisJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CisJcmV0dXJuIE5TX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Rucy9pbmNsdWRlL3Jlc29sdl9jYWNoZS5oIGIvbGliYy9kbnMvaW5jbHVkZS9yZXNvbHZfY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDQ5ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvaW5jbHVkZS9yZXNvbHZfY2FjaGUuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9SRVNPTFZfQ0FDSEVfSF8KKyNkZWZpbmUgX1JFU09MVl9DQUNIRV9IXworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK3N0cnVjdCBfX3Jlc19zdGF0ZTsKKworLyogc2V0cyB0aGUgbmFtZSBzZXJ2ZXIgYWRkcmVzc2VzIHRvIHRoZSBwcm92aWRlZCByZXNfc3RhdGUgc3RydWN0dXJlLiBUaGUKKyAqIG5hbWUgc2VydmVycyBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGNhY2hlIHdoaWNoIGlzIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIG5ldHdvcmsgdG8gd2hpY2ggdGhlIHJlc19zdGF0ZSBzdHJ1Y3R1cmUgaXMgYXNzb2NpYXRlZCAqLworX19MSUJDX0hJRERFTl9fCitleHRlcm4gdm9pZCBfcmVzb2x2X3BvcHVsYXRlX3Jlc19mb3JfbmV0KHN0cnVjdCBfX3Jlc19zdGF0ZSogc3RhdHApOworCit0eXBlZGVmIGVudW0geworICAgIFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRCwgIC8qIHRoZSBjYWNoZSBjYW4ndCBoYW5kbGUgdGhhdCBraW5kIG9mIHF1ZXJpZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvciB0aGUgYW5zd2VyIGJ1ZmZlciBpcyB0b28gc21hbGwgKi8KKyAgICBSRVNPTFZfQ0FDSEVfTk9URk9VTkQsICAgICAvKiB0aGUgY2FjaGUgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgcXVlcnkgKi8KKyAgICBSRVNPTFZfQ0FDSEVfRk9VTkQgICAgICAgICAvKiB0aGUgY2FjaGUgZm91bmQgdGhlIGFuc3dlciAqLworfSBSZXNvbHZDYWNoZVN0YXR1czsKKworX19MSUJDX0hJRERFTl9fCitleHRlcm4gUmVzb2x2Q2FjaGVTdGF0dXMKK19yZXNvbHZfY2FjaGVfbG9va3VwKCB1bnNpZ25lZCAgICAgICAgICAgICAgbmV0aWQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgIHF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBxdWVyeWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgYW5zd2VyLAorICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBhbnN3ZXJzaXplLAorICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICphbnN3ZXJsZW4gKTsKKworLyogYWRkIGEgKHF1ZXJ5LGFuc3dlcikgdG8gdGhlIGNhY2hlLCBvbmx5IGNhbGwgaWYgX3Jlc29sdl9jYWNoZV9sb29rdXAKKyAqIGRpZCByZXR1cm4gUkVTT0xWX0NBQ0hFX05PVEZPVU5ECisgKi8KK19fTElCQ19ISURERU5fXworZXh0ZXJuIHZvaWQKK19yZXNvbHZfY2FjaGVfYWRkKCB1bnNpZ25lZCAgICAgICAgICAgICAgbmV0aWQsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgIHF1ZXJ5LAorICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBxdWVyeWxlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgYW5zd2VyLAorICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBhbnN3ZXJsZW4gKTsKKworLyogTm90aWZ5IHRoZSBjYWNoZSBhIHJlcXVlc3QgZmFpbGVkICovCitfX0xJQkNfSElEREVOX18KK2V4dGVybiB2b2lkCitfcmVzb2x2X2NhY2hlX3F1ZXJ5X2ZhaWxlZCggdW5zaWduZWQgICAgIG5ldGlkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIHF1ZXJ5LAorICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIHF1ZXJ5bGVuKTsKKworI2VuZGlmIC8qIF9SRVNPTFZfQ0FDSEVfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvZG5zL2luY2x1ZGUvcmVzb2x2X25ldGlkLmggYi9saWJjL2Rucy9pbmNsdWRlL3Jlc29sdl9uZXRpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NTIxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9pbmNsdWRlL3Jlc29sdl9uZXRpZC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1JFU09MVl9ORVRJRF9ICisjZGVmaW5lIF9SRVNPTFZfTkVUSURfSAorCisvKiBUaGlzIGhlYWRlciBjb250YWlucyBkZWNsYXJhdGlvbnMgcmVsYXRlZCB0byBwZXItbmV0d29yayBETlMKKyAqIHNlcnZlciBzZWxlY3Rpb24uIFRoZXkgYXJlIHVzZWQgYnkgc3lzdGVtL25ldGQvIGFuZCBzaG91bGQgbm90IGJlCisgKiBleHBvc2VkIGJ5IHRoZSBDIGxpYnJhcnkncyBwdWJsaWMgTkRLIGhlYWRlcnMuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisKKy8qCisgKiBQYXNzaW5nIE5FVElEX1VOU0VUIGFzIHRoZSBuZXRJZCBjYXVzZXMgc3lzdGVtL25ldGQvc2VydmVyL0Ruc1Byb3h5TGlzdGVuZXIuY3BwIHRvCisgKiBmaWxsIGluIHRoZSBhcHByb3ByaWF0ZSBkZWZhdWx0IG5ldElkIGZvciB0aGUgcXVlcnkuCisgKi8KKyNkZWZpbmUgTkVUSURfVU5TRVQgMHUKKworLyoKKyAqIE1BUktfVU5TRVQgcmVwcmVzZW50cyB0aGUgZGVmYXVsdCAoaS5lLiB1bnNldCkgdmFsdWUgZm9yIGEgc29ja2V0IG1hcmsuCisgKi8KKyNkZWZpbmUgTUFSS19VTlNFVCAwdQorCitfX0JFR0lOX0RFQ0xTCisKK3N0cnVjdCBhZGRyaW5mbzsKKworI2RlZmluZSBfX3VzZWRfaW5fbmV0ZCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKKworc3RydWN0IGhvc3RlbnQgKmFuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcm5ldChjb25zdCB2b2lkICosIHNvY2tsZW5fdCwgaW50LCB1bnNpZ25lZCwgdW5zaWduZWQpIF9fdXNlZF9pbl9uZXRkOworc3RydWN0IGhvc3RlbnQgKmFuZHJvaWRfZ2V0aG9zdGJ5bmFtZWZvcm5ldChjb25zdCBjaGFyICosIGludCwgdW5zaWduZWQsIHVuc2lnbmVkKSBfX3VzZWRfaW5fbmV0ZDsKK2ludCBhbmRyb2lkX2dldGFkZHJpbmZvZm9ybmV0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgdW5zaWduZWQsCisJCXVuc2lnbmVkLCBzdHJ1Y3QgYWRkcmluZm8gKiopIF9fdXNlZF9pbl9uZXRkOworCisvKiBzZXQgbmFtZSBzZXJ2ZXJzIGZvciBhIG5ldHdvcmsgKi8KK2V4dGVybiB2b2lkIF9yZXNvbHZfc2V0X25hbWVzZXJ2ZXJzX2Zvcl9uZXQodW5zaWduZWQgbmV0aWQsCisgICAgY29uc3QgY2hhcioqIHNlcnZlcnMsIGludCBudW1zZXJ2ZXJzLCBjb25zdCBjaGFyICpkb21haW5zKSBfX3VzZWRfaW5fbmV0ZDsKKworLyogZmx1c2ggdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCBhIGNlcnRhaW4gbmV0d29yayAqLworZXh0ZXJuIHZvaWQgX3Jlc29sdl9mbHVzaF9jYWNoZV9mb3JfbmV0KHVuc2lnbmVkIG5ldGlkKSBfX3VzZWRfaW5fbmV0ZDsKKworLyogZGVsZXRlIHRoZSBjYWNoZSBhc3NvY2lhdGVkIHdpdGggYSBjZXJ0YWluIG5ldHdvcmsgKi8KK2V4dGVybiB2b2lkIF9yZXNvbHZfZGVsZXRlX2NhY2hlX2Zvcl9uZXQodW5zaWduZWQgbmV0aWQpIF9fdXNlZF9pbl9uZXRkOworCisvKiBJbnRlcm5hbCB1c2Ugb25seS4gKi8KK3N0cnVjdCBob3N0ZW50ICphbmRyb2lkX2dldGhvc3RieWFkZHJmb3JuZXRfcHJveHkoY29uc3Qgdm9pZCAqLCBzb2NrbGVuX3QsIGludCAsIHVuc2lnbmVkKTsKK2ludCBhbmRyb2lkX2dldG5hbWVpbmZvZm9ybmV0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QsIGNoYXIgKiwgc2l6ZV90LCBjaGFyICosIHNpemVfdCwKKwkJIGludCwgdW5zaWduZWQsIHVuc2lnbmVkKTsKKworLyogZGVsZXRlIHRoZSBjYWNoZSBhc3NvY2lhdGVkIHdpdGggYSBjZXJ0YWluIG5ldHdvcmsgKi8KK2V4dGVybiB2b2lkIF9yZXNvbHZfZGVsZXRlX2NhY2hlX2Zvcl9uZXQodW5zaWduZWQgbmV0aWQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1JFU09MVl9ORVRJRF9IICovCmRpZmYgLS1naXQgYS9saWJjL2Rucy9pbmNsdWRlL3Jlc29sdl9wcml2YXRlLmggYi9saWJjL2Rucy9pbmNsdWRlL3Jlc29sdl9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkxYTRiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL2luY2x1ZGUvcmVzb2x2X3ByaXZhdGUuaApAQCAtMCwwICsxLDUxNSBAQAorLyoJJE5ldEJTRDogcmVzb2x2LmgsdiAxLjMxIDIwMDUvMTIvMjYgMTk6MDE6NDcgcGVycnkgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk4NywgMTk4OQorICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisvKgorICoJQCgjKXJlc29sdi5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICoJSWQ6IHJlc29sdi5oLHYgMS43LjIuMTEuNC4yIDIwMDQvMDYvMjUgMDA6NDE6MDUgbWFya2EgRXhwCisgKi8KKworI2lmbmRlZiBfUkVTT0xWX1BSSVZBVEVfSF8KKyNkZWZpbmUJX1JFU09MVl9QUklWQVRFX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPHJlc29sdi5oPgorI2luY2x1ZGUgInJlc29sdl9zdGF0aWMuaCIKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKworLyogRGVzcGl0ZSB0aGlzIGZpbGUncyBuYW1lLCBpdCdzIHBhcnQgb2YgbGlicmVzb2x2LiBPbiBBbmRyb2lkLCB0aGF0IG1lYW5zIGl0J3MgcGFydCBvZiBsaWJjIDotKCAqLworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCisKKy8qCisgKiBSZXZpc2lvbiBpbmZvcm1hdGlvbi4gIFRoaXMgaXMgdGhlIHJlbGVhc2UgZGF0ZSBpbiBZWVlZTU1ERCBmb3JtYXQuCisgKiBJdCBjYW4gY2hhbmdlIGV2ZXJ5IGRheSBzbyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gd2l0aCBpdCBpcyB1c2UgaXQKKyAqIGluIHByZXByb2Nlc3NvciBjb21tYW5kcyBzdWNoIGFzICIjaWYgKF9fUkVTID4gMTk5MzExMDQpIi4gIERvIG5vdAorICogY29tcGFyZSBmb3IgZXF1YWxpdHk7IHJhdGhlciwgdXNlIGl0IHRvIGRldGVybWluZSB3aGV0aGVyIHlvdXIgcmVzb2x2ZXIKKyAqIGlzIG5ldyBlbm91Z2ggdG8gY29udGFpbiBhIGNlcnRhaW4gZmVhdHVyZS4KKyAqLworCisjZGVmaW5lCV9fUkVTCTIwMDMwMTI0CisKKy8qCisgKiBUaGlzIHVzZWQgdG8gYmUgZGVmaW5lZCBpbiByZXNfcXVlcnkuYywgbm93IGl0J3MgaW4gaGVycm9yLmMuCisgKiBbWFhYIG5vIGl0J3Mgbm90LiAgSXQncyBpbiBpcnMvaXJzX2RhdGEuY10KKyAqIEl0IHdhcworICogbmV2ZXIgZXh0ZXJuJ2QgYnkgYW55ICouaCBmaWxlIGJlZm9yZSBpdCB3YXMgcGxhY2VkIGhlcmUuICBGb3IgdGhyZWFkCisgKiBhd2FyZSBwcm9ncmFtcywgdGhlIGxhc3QgaF9lcnJubyB2YWx1ZSBzZXQgaXMgc3RvcmVkIGluIHJlcy0+aF9lcnJuby4KKyAqCisgKiBYWFg6CVRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGdvb2QgcmVhc29uIGZvciBleHBvc2luZyBSRVNfU0VUX0hfRVJSTk8KKyAqCShhbmQgX19oX2Vycm5vX3NldCkgdG8gdGhlIHB1YmxpYyB2aWEgPHJlc29sdi5oPi4KKyAqIFhYWDoJX19oX2Vycm5vX3NldCBpcyByZWFsbHkgcGFydCBvZiBJUlMsIG5vdCBwYXJ0IG9mIHRoZSByZXNvbHZlci4KKyAqCUlmIHNvbWVib2R5IHdhbnRzIHRvIGJ1aWxkIGFuZCB1c2UgYSByZXNvbHZlciB0aGF0IGRvZXNuJ3QgdXNlIElSUywKKyAqCXdoYXQgZG8gdGhleSBkbz8gIFBlcmhhcHMgc29tZXRoaW5nIGxpa2UKKyAqCQkjaWZkZWYgV0FOVF9JUlMKKyAqCQkjIGRlZmluZSBSRVNfU0VUX0hfRVJSTk8ocix4KSBfX2hfZXJybm9fc2V0KHIseCkKKyAqCQkjZWxzZQorICoJCSMgZGVmaW5lIFJFU19TRVRfSF9FUlJOTyhyLHgpIChoX2Vycm5vID0gKHIpLT5yZXNfaF9lcnJubyA9ICh4KSkKKyAqCQkjZW5kaWYKKyAqLworCisjZGVmaW5lIFJFU19TRVRfSF9FUlJOTyhyLHgpIChoX2Vycm5vID0gKHIpLT5yZXNfaF9lcnJubyA9ICh4KSkKK3N0cnVjdCBfX3Jlc19zdGF0ZTsgLyogZm9yd2FyZCAqLworCisvKgorICogUmVzb2x2ZXIgY29uZmlndXJhdGlvbiBmaWxlLgorICogTm9ybWFsbHkgbm90IHByZXNlbnQsIGJ1dCBtYXkgY29udGFpbiB0aGUgYWRkcmVzcyBvZiB0aGUKKyAqIGluaXRpYWwgbmFtZSBzZXJ2ZXIocykgdG8gcXVlcnkgYW5kIHRoZSBkb21haW4gc2VhcmNoIGxpc3QuCisgKi8KKworI2lmbmRlZiBfUEFUSF9SRVNDT05GCisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjZGVmaW5lIF9QQVRIX1JFU0NPTkYgICAgICAgICIvZXRjL3BwcC9yZXNvbHYuY29uZiIKKyNlbHNlCisjZGVmaW5lIF9QQVRIX1JFU0NPTkYgICAgICAgICIvZXRjL3Jlc29sdi5jb25mIgorI2VuZGlmCisjZW5kaWYKKwordHlwZWRlZiBlbnVtIHsgcmVzX2dvYWhlYWQsIHJlc19uZXh0bnMsIHJlc19tb2RpZmllZCwgcmVzX2RvbmUsIHJlc19lcnJvciB9CisJcmVzX3NlbmRob29rYWN0OworCit0eXBlZGVmIHJlc19zZW5kaG9va2FjdCAoKnJlc19zZW5kX3Fob29rKShzdHJ1Y3Qgc29ja2FkZHIgKiBjb25zdCAqLAorCQkJCQkgICAgICBjb25zdCB1X2NoYXIgKiosIGludCAqLAorCQkJCQkgICAgICB1X2NoYXIgKiwgaW50LCBpbnQgKik7CisKK3R5cGVkZWYgcmVzX3NlbmRob29rYWN0ICgqcmVzX3NlbmRfcmhvb2spKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLAorCQkJCQkgICAgICBjb25zdCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiwKKwkJCQkJICAgICAgaW50LCBpbnQgKik7CisKK3N0cnVjdCByZXNfc3ltIHsKKwlpbnQJCW51bWJlcjsJICAgLyogSWRlbnRpZnlpbmcgbnVtYmVyLCBsaWtlIFRfTVggKi8KKwljb25zdCBjaGFyICoJbmFtZTsJICAgLyogSXRzIHN5bWJvbGljIG5hbWUsIGxpa2UgIk1YIiAqLworCWNvbnN0IGNoYXIgKglodW1hbm5hbWU7IC8qIEl0cyBmdW4gbmFtZSwgbGlrZSAibWFpbCBleGNoYW5nZXIiICovCit9OworCisvKgorICogR2xvYmFsIGRlZmluZXMgYW5kIHZhcmlhYmxlcyBmb3IgcmVzb2x2ZXIgc3R1Yi4KKyAqLworI2RlZmluZQlNQVhOUwkJCTMJLyogbWF4ICMgbmFtZSBzZXJ2ZXJzIHdlJ2xsIHRyYWNrICovCisjZGVmaW5lCU1BWERGTFNSQ0gJCTMJLyogIyBkZWZhdWx0IGRvbWFpbiBsZXZlbHMgdG8gdHJ5ICovCisjZGVmaW5lCU1BWEROU1JDSAkJNgkvKiBtYXggIyBkb21haW5zIGluIHNlYXJjaCBwYXRoICovCisjZGVmaW5lCUxPQ0FMRE9NQUlOUEFSVFMJMgkvKiBtaW4gbGV2ZWxzIGluIG5hbWUgdGhhdCBpcyAibG9jYWwiICovCisKKyNkZWZpbmUJUkVTX1RJTUVPVVQJCTUJLyogbWluLiBzZWNvbmRzIGJldHdlZW4gcmV0cmllcyAqLworI2RlZmluZQlNQVhSRVNPTFZTT1JUCQkxMAkvKiBudW1iZXIgb2YgbmV0IHRvIHNvcnQgb24gKi8KKyNkZWZpbmUJUkVTX01BWE5ET1RTCQkxNQkvKiBzaG91bGQgcmVmbGVjdCBiaXQgZmllbGQgc2l6ZSAqLworI2RlZmluZQlSRVNfTUFYUkVUUkFOUwkJMzAJLyogb25seSBmb3IgcmVzb2x2LmNvbmYvUkVTX09QVElPTlMgKi8KKyNkZWZpbmUJUkVTX01BWFJFVFJZCQk1CS8qIG9ubHkgZm9yIHJlc29sdi5jb25mL1JFU19PUFRJT05TICovCisjZGVmaW5lCVJFU19ERkxSRVRSWQkJMgkvKiBEZWZhdWx0ICMvdHJpZXMuICovCisjZGVmaW5lCVJFU19NQVhUSU1FCQk2NTUzNQkvKiBJbmZpbml0eSwgaW4gbWlsbGlzZWNvbmRzLiAqLworCitzdHJ1Y3QgX19yZXNfc3RhdGVfZXh0OworCitzdHJ1Y3QgX19yZXNfc3RhdGUgeworCXVuc2lnbmVkCW5ldGlkOwkJCS8qIE5ldElkOiBjYWNoZSBrZXkgYW5kIHNvY2tldCBtYXJrICovCisJaW50CXJldHJhbnM7CSAJLyogcmV0cmFuc21pc3Npb24gdGltZSBpbnRlcnZhbCAqLworCWludAlyZXRyeTsJCQkvKiBudW1iZXIgb2YgdGltZXMgdG8gcmV0cmFuc21pdCAqLworI2lmZGVmIHN1bgorCXVfaW50CW9wdGlvbnM7CQkvKiBvcHRpb24gZmxhZ3MgLSBzZWUgYmVsb3cuICovCisjZWxzZQorCXVfbG9uZwlvcHRpb25zOwkJLyogb3B0aW9uIGZsYWdzIC0gc2VlIGJlbG93LiAqLworI2VuZGlmCisJaW50CW5zY291bnQ7CQkvKiBudW1iZXIgb2YgbmFtZSBzZXJ2ZXJzICovCisJc3RydWN0IHNvY2thZGRyX2luCisJCW5zYWRkcl9saXN0W01BWE5TXTsJLyogYWRkcmVzcyBvZiBuYW1lIHNlcnZlciAqLworI2RlZmluZQluc2FkZHIJbnNhZGRyX2xpc3RbMF0JCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJdV9zaG9ydAlpZDsJCQkvKiBjdXJyZW50IG1lc3NhZ2UgaWQgKi8KKwljaGFyCSpkbnNyY2hbTUFYRE5TUkNIKzFdOwkvKiBjb21wb25lbnRzIG9mIGRvbWFpbiB0byBzZWFyY2ggKi8KKwljaGFyCWRlZmRuYW1lWzI1Nl07CQkvKiBkZWZhdWx0IGRvbWFpbiAoZGVwcmVjYXRlZCkgKi8KKyNpZmRlZiBzdW4KKwl1X2ludAlwZmNvZGU7CQkJLyogUkVTX1BSRl8gZmxhZ3MgLSBzZWUgYmVsb3cuICovCisjZWxzZQorCXVfbG9uZwlwZmNvZGU7CQkJLyogUkVTX1BSRl8gZmxhZ3MgLSBzZWUgYmVsb3cuICovCisjZW5kaWYKKwl1bnNpZ25lZCBuZG90czo0OwkJLyogdGhyZXNob2xkIGZvciBpbml0aWFsIGFicy4gcXVlcnkgKi8KKwl1bnNpZ25lZCBuc29ydDo0OwkJLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHNvcnRfbGlzdFtdICovCisJY2hhcgl1bnVzZWRbM107CisJc3RydWN0IHsKKwkJc3RydWN0IGluX2FkZHIJYWRkcjsKKwkJdWludDMyX3QJbWFzazsKKwl9IHNvcnRfbGlzdFtNQVhSRVNPTFZTT1JUXTsKKyNpZmRlZiBfX09MRF9SRVNfU1RBVEUKKwljaGFyIGxvb2t1cHNbNF07CisjZWxzZQorCXJlc19zZW5kX3Fob29rIHFob29rOwkJLyogcXVlcnkgaG9vayAqLworCXJlc19zZW5kX3Job29rIHJob29rOwkJLyogcmVzcG9uc2UgaG9vayAqLworCWludAlyZXNfaF9lcnJubzsJCS8qIGxhc3Qgb25lIHNldCBmb3IgdGhpcyBjb250ZXh0ICovCisJdW5zaWduZWQgX21hcms7CQkJLyogSWYgbm9uLTAgU0VUX01BUksgdG8gX21hcmsgb24gYWxsIHJlcXVlc3Qgc29ja2V0cyAqLworCWludAlfdmNzb2NrOwkJLyogUFJJVkFURTogZm9yIHJlc19zZW5kIFZDIGkvbyAqLworCXVfaW50CV9mbGFnczsJCQkvKiBQUklWQVRFOiBzZWUgYmVsb3cgKi8KKwl1X2ludAlfcGFkOwkJCS8qIG1ha2UgX3UgNjQgYml0IGFsaWduZWQgKi8KKwl1bmlvbiB7CisJCS8qIE9uIGFuIDMyLWJpdCBhcmNoIHRoaXMgbWVhbnMgNTEyYiB0b3RhbC4gKi8KKwkJY2hhcglwYWRbNzIgLSA0KnNpemVvZiAoaW50KSAtIDIqc2l6ZW9mICh2b2lkICopXTsKKwkJc3RydWN0IHsKKwkJCXVpbnQxNl90CQluc2NvdW50OworCQkJdWludDE2X3QJCW5zdGltZXNbTUFYTlNdOwkvKiBtcy4gKi8KKwkJCWludAkJCW5zc29ja3NbTUFYTlNdOworCQkJc3RydWN0IF9fcmVzX3N0YXRlX2V4dCAqZXh0OwkvKiBleHRlbnRpb24gZm9yIElQdjYgKi8KKwkJfSBfZXh0OworCX0gX3U7CisjZW5kaWYKKyAgICAgICAgc3RydWN0IHJlc19zdGF0aWMgICByc3RhdGljWzFdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX19yZXNfc3RhdGUgKnJlc19zdGF0ZTsKKwordW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4Jc2luOworI2lmZGVmIElONkFERFJfQU5ZX0lOSVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42CXNpbjY7CisjZW5kaWYKKyNpZmRlZiBJU0NfQUxJR042NAorCWludDY0X3QJCQlfX2FsaWduNjQ7CS8qIDY0Yml0IGFsaWdubWVudCAqLworI2Vsc2UKKwlpbnQzMl90CQkJX19hbGlnbjMyOwkvKiAzMmJpdCBhbGlnbm1lbnQgKi8KKyNlbmRpZgorCWNoYXIJCQlfX3NwYWNlWzEyOF07ICAgLyogbWF4IHNpemUgKi8KK307CisKKy8qCisgKiBSZXNvbHZlciBmbGFncyAodXNlZCB0byBiZSBkaXNjcmV0ZSBwZXItbW9kdWxlIHN0YXRpY3MgaW50cykuCisgKi8KKyNkZWZpbmUJUkVTX0ZfVkMJMHgwMDAwMDAwMQkvKiBzb2NrZXQgaXMgVENQICovCisjZGVmaW5lCVJFU19GX0NPTk4JMHgwMDAwMDAwMgkvKiBzb2NrZXQgaXMgY29ubmVjdGVkICovCisjZGVmaW5lCVJFU19GX0VETlMwRVJSCTB4MDAwMDAwMDQJLyogRUROUzAgY2F1c2VkIGVycm9ycyAqLworI2RlZmluZQlSRVNfRl9fVU5VU0VECTB4MDAwMDAwMDgJLyogKHVudXNlZCkgKi8KKyNkZWZpbmUJUkVTX0ZfTEFTVE1BU0sJMHgwMDAwMDBGMAkvKiBvcmRpbmFsIHNlcnZlciBvZiBsYXN0IHJlc19uc2VuZCAqLworI2RlZmluZQlSRVNfRl9MQVNUU0hJRlQJNAkJLyogYml0IHBvc2l0aW9uIG9mIExBU1RNQVNLICJmbGFnIiAqLworI2RlZmluZQlSRVNfR0VUTEFTVChyZXMpICgoKHJlcykuX2ZsYWdzICYgUkVTX0ZfTEFTVE1BU0spID4+IFJFU19GX0xBU1RTSElGVCkKKworLyogcmVzX2ZpbmR6b25lY3V0MigpIG9wdGlvbnMgKi8KKyNkZWZpbmUJUkVTX0VYSEFVU1RJVkUJMHgwMDAwMDAwMQkvKiBhbHdheXMgZG8gYWxsIHF1ZXJpZXMgKi8KKyNkZWZpbmUJUkVTX0lQVjRPTkxZCTB4MDAwMDAwMDIJLyogSVB2NCBvbmx5ICovCisjZGVmaW5lCVJFU19JUFY2T05MWQkweDAwMDAwMDA0CS8qIElQdjYgb25seSAqLworCisvKgorICogUmVzb2x2ZXIgb3B0aW9ucyAoa2VlcCB0aGVzZSBpbiBzeW5jaCB3aXRoIHJlc19kZWJ1Zy5jLCBwbGVhc2UpCisgKi8KKyNkZWZpbmUgUkVTX0lOSVQJMHgwMDAwMDAwMQkvKiBhZGRyZXNzIGluaXRpYWxpemVkICovCisjZGVmaW5lIFJFU19ERUJVRwkweDAwMDAwMDAyCS8qIHByaW50IGRlYnVnIG1lc3NhZ2VzICovCisjZGVmaW5lIFJFU19BQU9OTFkJMHgwMDAwMDAwNAkvKiBhdXRob3JpdGF0aXZlIGFuc3dlcnMgb25seSAoIUlNUEwpKi8KKyNkZWZpbmUgUkVTX1VTRVZDCTB4MDAwMDAwMDgJLyogdXNlIHZpcnR1YWwgY2lyY3VpdCAqLworI2RlZmluZSBSRVNfUFJJTUFSWQkweDAwMDAwMDEwCS8qIHF1ZXJ5IHByaW1hcnkgc2VydmVyIG9ubHkgKCFJTVBMKSAqLworI2RlZmluZSBSRVNfSUdOVEMJMHgwMDAwMDAyMAkvKiBpZ25vcmUgdHJ1Y2F0aW9uIGVycm9ycyAqLworI2RlZmluZSBSRVNfUkVDVVJTRQkweDAwMDAwMDQwCS8qIHJlY3Vyc2lvbiBkZXNpcmVkICovCisjZGVmaW5lIFJFU19ERUZOQU1FUwkweDAwMDAwMDgwCS8qIHVzZSBkZWZhdWx0IGRvbWFpbiBuYW1lICovCisjZGVmaW5lIFJFU19TVEFZT1BFTgkweDAwMDAwMTAwCS8qIEtlZXAgVENQIHNvY2tldCBvcGVuICovCisjZGVmaW5lIFJFU19ETlNSQ0gJMHgwMDAwMDIwMAkvKiBzZWFyY2ggdXAgbG9jYWwgZG9tYWluIHRyZWUgKi8KKyNkZWZpbmUJUkVTX0lOU0VDVVJFMQkweDAwMDAwNDAwCS8qIHR5cGUgMSBzZWN1cml0eSBkaXNhYmxlZCAqLworI2RlZmluZQlSRVNfSU5TRUNVUkUyCTB4MDAwMDA4MDAJLyogdHlwZSAyIHNlY3VyaXR5IGRpc2FibGVkICovCisjZGVmaW5lCVJFU19OT0FMSUFTRVMJMHgwMDAwMTAwMAkvKiBzaHV0cyBvZmYgSE9TVEFMSUFTRVMgZmVhdHVyZSAqLworI2RlZmluZQlSRVNfVVNFX0lORVQ2CTB4MDAwMDIwMDAJLyogdXNlL21hcCBJUHY2IGluIGdldGhvc3RieW5hbWUoKSAqLworI2RlZmluZSBSRVNfUk9UQVRFCTB4MDAwMDQwMDAJLyogcm90YXRlIG5zIGxpc3QgYWZ0ZXIgZWFjaCBxdWVyeSAqLworI2RlZmluZQlSRVNfTk9DSEVDS05BTUUJMHgwMDAwODAwMAkvKiBkbyBub3QgY2hlY2sgbmFtZXMgZm9yIHNhbml0eS4gKi8KKyNkZWZpbmUJUkVTX0tFRVBUU0lHCTB4MDAwMTAwMDAJLyogZG8gbm90IHN0cmlwIFRTSUcgcmVjb3JkcyAqLworI2RlZmluZQlSRVNfQkxBU1QJMHgwMDAyMDAwMAkvKiBibGFzdCBhbGwgcmVjdXJzaXZlIHNlcnZlcnMgKi8KKyNkZWZpbmUgUkVTX05PVExEUVVFUlkJMHgwMDEwMDAwMAkvKiBkb24ndCB1bnF1YWxpZmllZCBuYW1lIGFzIGEgdGxkICovCisjZGVmaW5lIFJFU19VU0VfRE5TU0VDCTB4MDAyMDAwMDAJLyogdXNlIEROU1NFQyB1c2luZyBPSyBiaXQgaW4gT1BUICovCisvKiAjZGVmaW5lIFJFU19ERUJVRzIJMHgwMDQwMDAwMCAqLwkvKiBuc2xvb2t1cCBpbnRlcm5hbCAqLworLyogS0FNRSBleHRlbnNpb25zOiB1c2UgaGlnaGVyIGJpdCB0byBhdm9pZCBjb25mbGljdCB3aXRoIElTQyB1c2UgKi8KKyNkZWZpbmUgUkVTX1VTRV9ETkFNRQkweDEwMDAwMDAwCS8qIHVzZSBETkFNRSAqLworI2RlZmluZSBSRVNfVVNFX0VETlMwCTB4NDAwMDAwMDAJLyogdXNlIEVETlMwIGlmIGNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUgUkVTX05PX05JQkJMRTIJMHg4MDAwMDAwMAkvKiBkaXNhYmxlIGFsdGVybmF0ZSBuaWJibGUgbG9va3VwICovCisKKyNkZWZpbmUgUkVTX0RFRkFVTFQJKFJFU19SRUNVUlNFIHwgUkVTX0RFRk5BTUVTIHwgXAorCQkJIFJFU19ETlNSQ0ggfCBSRVNfTk9fTklCQkxFMikKKworLyoKKyAqIFJlc29sdmVyICJwZmNvZGUiIHZhbHVlcy4gIFVzZWQgYnkgZGlnLgorICovCisjZGVmaW5lIFJFU19QUkZfU1RBVFMJMHgwMDAwMDAwMQorI2RlZmluZSBSRVNfUFJGX1VQREFURQkweDAwMDAwMDAyCisjZGVmaW5lIFJFU19QUkZfQ0xBU1MgICAweDAwMDAwMDA0CisjZGVmaW5lIFJFU19QUkZfQ01ECTB4MDAwMDAwMDgKKyNkZWZpbmUgUkVTX1BSRl9RVUVTCTB4MDAwMDAwMTAKKyNkZWZpbmUgUkVTX1BSRl9BTlMJMHgwMDAwMDAyMAorI2RlZmluZSBSRVNfUFJGX0FVVEgJMHgwMDAwMDA0MAorI2RlZmluZSBSRVNfUFJGX0FERAkweDAwMDAwMDgwCisjZGVmaW5lIFJFU19QUkZfSEVBRDEJMHgwMDAwMDEwMAorI2RlZmluZSBSRVNfUFJGX0hFQUQyCTB4MDAwMDAyMDAKKyNkZWZpbmUgUkVTX1BSRl9UVExJRAkweDAwMDAwNDAwCisjZGVmaW5lIFJFU19QUkZfSEVBRFgJMHgwMDAwMDgwMAorI2RlZmluZSBSRVNfUFJGX1FVRVJZCTB4MDAwMDEwMDAKKyNkZWZpbmUgUkVTX1BSRl9SRVBMWQkweDAwMDAyMDAwCisjZGVmaW5lIFJFU19QUkZfSU5JVAkweDAwMDA0MDAwCisjZGVmaW5lIFJFU19QUkZfVFJVTkMJMHgwMDAwODAwMAorLyoJCQkweDAwMDEwMDAwCSovCisKKy8qIFRoaW5ncyBpbnZvbHZpbmcgYW4gaW50ZXJuYWwgKHN0YXRpYykgcmVzb2x2ZXIgY29udGV4dC4gKi8KK19fQkVHSU5fREVDTFMKKworX19MSUJDX0hJRERFTl9fIGV4dGVybiBzdHJ1Y3QgX19yZXNfc3RhdGUgKl9fcmVzX2dldF9zdGF0ZSh2b2lkKTsKK19fTElCQ19ISURERU5fXyBleHRlcm4gdm9pZCBfX3Jlc19wdXRfc3RhdGUoc3RydWN0IF9fcmVzX3N0YXRlICopOworCisjaWZuZGVmIEFORFJPSURfQ0hBTkdFUworLyoKKyAqIFNvdXJjZSBhbmQgQmluYXJ5IGNvbXBhdGliaWxpdHk7IF9yZXMgd2lsbCBub3Qgd29yayBwcm9wZXJseQorICogd2l0aCBtdWx0aS10aHJlYWRlZCBwcm9ncmFtcy4KKyAqLworZXh0ZXJuIHN0cnVjdCBfX3Jlc19zdGF0ZSAqX19yZXNfc3RhdGUodm9pZCk7CisjZGVmaW5lIF9yZXMgKCpfX3Jlc19zdGF0ZSgpKQorI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNpZm5kZWYgX19CSU5EX05PU1RBVElDCisjZGVmaW5lIGZwX25xdWVyeQkJX19mcF9ucXVlcnkKKyNkZWZpbmUgZnBfcXVlcnkJCV9fZnBfcXVlcnkKKyNkZWZpbmUgaG9zdGFsaWFzCQlfX2hvc3RhbGlhcworI2RlZmluZSBwX3F1ZXJ5CQkJX19wX3F1ZXJ5CisjZGVmaW5lIHJlc19jbG9zZQkJX19yZXNfY2xvc2UKKyNkZWZpbmUgcmVzX29wdAkJCV9fcmVzX29wdAorI2RlZmluZSByZXNfaXNvdXJzZXJ2ZXIJCV9fcmVzX2lzb3Vyc2VydmVyCisjZGVmaW5lCXJlc19xdWVyeWRvbWFpbgkJX19yZXNfcXVlcnlkb21haW4KKyNkZWZpbmUgcmVzX3NlbmQJCV9fcmVzX3NlbmQKKyNkZWZpbmUgcmVzX3NlbmRzaWduZWQJCV9fcmVzX3NlbmRzaWduZWQKKworI2lmZGVmIEJJTkRfUkVTX1BPU0lYMworI2RlZmluZQlkbl9leHBhbmQJX19kbl9leHBhbmQKKyNkZWZpbmUJcmVzX2luaXQJX19yZXNfaW5pdAorI2RlZmluZQlyZXNfcXVlcnkJX19yZXNfcXVlcnkKKyNkZWZpbmUJcmVzX3NlYXJjaAlfX3Jlc19zZWFyY2gKKyNkZWZpbmUJcmVzX21rcXVlcnkJX19yZXNfbWtxdWVyeQorI2VuZGlmCisKK19fQkVHSU5fREVDTFMKK3ZvaWQJCWZwX25xdWVyeShjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOwordm9pZAkJZnBfcXVlcnkoY29uc3QgdV9jaGFyICosIEZJTEUgKik7Citjb25zdCBjaGFyICoJaG9zdGFsaWFzKGNvbnN0IGNoYXIgKik7Cit2b2lkCQlwX3F1ZXJ5KGNvbnN0IHVfY2hhciAqKTsKK3ZvaWQJCXJlc19jbG9zZSh2b2lkKTsKK2ludAkJcmVzX2luaXQodm9pZCk7CitfX0xJQkNfSElEREVOX18gaW50CQlyZXNfb3B0KGludCwgdV9jaGFyICosIGludCwgaW50KTsKK2ludAkJcmVzX2lzb3Vyc2VydmVyKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKK2ludAkJcmVzX21rcXVlcnkoaW50LCBjb25zdCBjaGFyICosIGludCwgaW50LCBjb25zdCB1X2NoYXIgKiwgaW50LCBjb25zdCB1X2NoYXIgKiwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19xdWVyeShjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX3F1ZXJ5ZG9tYWluKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19zZWFyY2goY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19zZW5kKGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfc2VuZHNpZ25lZChjb25zdCB1X2NoYXIgKiwgaW50LCBuc190c2lnX2tleSAqLCB1X2NoYXIgKiwgaW50KTsKK19fRU5EX0RFQ0xTCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNIQVJFRF9MSUJCSU5EKSB8fCBkZWZpbmVkKExJQikKKy8qCisgKiBJZiBsaWJiaW5kIGlzIGEgc2hhcmVkIG9iamVjdCAod2VsbCwgRExMIGFueXdheSkKKyAqIHRoZXNlIGV4dGVybnMgYnJlYWsgdGhlIGxpbmtlciB3aGVuIHJlc29sdi5oIGlzCisgKiBpbmNsdWRlZCBieSBhIGxpYiBjbGllbnQgKGxpa2UgbmFtZWQpCisgKiBNYWtlIHRoZW0gZ28gYXdheSBpZiBhIGNsaWVudCBpcyBpbmNsdWRpbmcgdGhpcworICoKKyAqLworX19MSUJDX0hJRERFTl9fIGV4dGVybiBjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3Bfa2V5X3N5bXNbXTsKK19fTElCQ19ISURERU5fXyBleHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2NlcnRfc3ltc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9jbGFzc19zeW1zW107CitleHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX3R5cGVfc3ltc1tdOworX19MSUJDX0hJRERFTl9fIGV4dGVybiBjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfcmNvZGVfc3ltc1tdOworI2VuZGlmIC8qIFNIQVJFRF9MSUJCSU5EICovCisKKyNpZm5kZWYgQU5EUk9JRF9DSEFOR0VTCisjZGVmaW5lIGRuX2NvbXAJCQlfX2RuX2NvbXAKKyNlbmRpZgorI2RlZmluZSBkbl9jb3VudF9sYWJlbHMJCV9fZG5fY291bnRfbGFiZWxzCisjZGVmaW5lIGRuX3NraXBuYW1lCQlfX2RuX3NraXBuYW1lCisjZGVmaW5lIGZwX3Jlc3N0YXQJCV9fZnBfcmVzc3RhdAorI2RlZmluZSBsb2NfYXRvbgkJX19sb2NfYXRvbgorI2RlZmluZSBsb2NfbnRvYQkJX19sb2NfbnRvYQorI2RlZmluZSBwX2NkbmFtZQkJX19wX2NkbmFtZQorI2RlZmluZSBwX2Nkbm5hbWUJCV9fcF9jZG5uYW1lCisjZGVmaW5lIHBfY2xhc3MJCQlfX3BfY2xhc3MKKyNkZWZpbmUgcF9mcW5hbWUJCV9fcF9mcW5hbWUKKyNkZWZpbmUgcF9mcW5uYW1lCQlfX3BfZnFubmFtZQorI2RlZmluZSBwX29wdGlvbgkJX19wX29wdGlvbgorI2RlZmluZSBwX3NlY3N0b2RhdGUJCV9fcF9zZWNzdG9kYXRlCisjZGVmaW5lIHBfc2VjdGlvbgkJX19wX3NlY3Rpb24KKyNkZWZpbmUgcF90aW1lCQkJX19wX3RpbWUKKyNkZWZpbmUgcF90eXBlCQkJX19wX3R5cGUKKyNkZWZpbmUgcF9yY29kZQkJCV9fcF9yY29kZQorI2RlZmluZSBwX3NvY2t1bgkJX19wX3NvY2t1bgorI2RlZmluZSBwdXRsb25nCQkJX19wdXRsb25nCisjZGVmaW5lIHB1dHNob3J0CQlfX3B1dHNob3J0CisjZGVmaW5lIHJlc19kbm9rCQlfX3Jlc19kbm9rCisjZGVmaW5lIHJlc19maW5kem9uZWN1dAkJX19yZXNfZmluZHpvbmVjdXQKKyNkZWZpbmUgcmVzX2ZpbmR6b25lY3V0MglfX3Jlc19maW5kem9uZWN1dDIKKyNkZWZpbmUgcmVzX2hub2sJCV9fcmVzX2hub2sKKyNkZWZpbmUgcmVzX2hvc3RhbGlhcwkJX19yZXNfaG9zdGFsaWFzCisjZGVmaW5lIHJlc19tYWlsb2sJCV9fcmVzX21haWxvaworI2RlZmluZSByZXNfbmFtZWlucXVlcnkJCV9fcmVzX25hbWVpbnF1ZXJ5CisjZGVmaW5lIHJlc19uY2xvc2UJCV9fcmVzX25jbG9zZQorI2RlZmluZSByZXNfbmluaXQJCV9fcmVzX25pbml0CisjZGVmaW5lIHJlc19ubWtxdWVyeQkJX19yZXNfbm1rcXVlcnkKKyNkZWZpbmUgcmVzX3BxdWVyeQkJX19yZXNfcHF1ZXJ5CisjZGVmaW5lIHJlc19ucXVlcnkJCV9fcmVzX25xdWVyeQorI2RlZmluZSByZXNfbnF1ZXJ5ZG9tYWluCV9fcmVzX25xdWVyeWRvbWFpbgorI2RlZmluZSByZXNfbnNlYXJjaAkJX19yZXNfbnNlYXJjaAorI2RlZmluZSByZXNfbnNlbmQJCV9fcmVzX25zZW5kCisjZGVmaW5lIHJlc19uc2VuZHNpZ25lZAkJX19yZXNfbnNlbmRzaWduZWQKKyNkZWZpbmUgcmVzX25pc291cnNlcnZlcglfX3Jlc19uaXNvdXJzZXJ2ZXIKKyNkZWZpbmUgcmVzX293bm9rCQlfX3Jlc19vd25vaworI2RlZmluZSByZXNfcXVlcmllc21hdGNoCV9fcmVzX3F1ZXJpZXNtYXRjaAorI2RlZmluZSByZXNfcmFuZG9taWQJCV9fcmVzX3JhbmRvbWlkCisjZGVmaW5lIHN5bV9udG9wCQlfX3N5bV9udG9wCisjZGVmaW5lIHN5bV9udG9zCQlfX3N5bV9udG9zCisjZGVmaW5lIHN5bV9zdG9uCQlfX3N5bV9zdG9uCisjZGVmaW5lIHJlc19ub3B0CQlfX3Jlc19ub3B0CisjZGVmaW5lIHJlc19uZGVzdHJveQkJX19yZXNfbmRlc3Ryb3kKKyNkZWZpbmUJcmVzX25hbWV0b2NsYXNzCQlfX3Jlc19uYW1ldG9jbGFzcworI2RlZmluZQlyZXNfbmFtZXRvdHlwZQkJX19yZXNfbmFtZXRvdHlwZQorI2RlZmluZQlyZXNfc2V0c2VydmVycwkJX19yZXNfc2V0c2VydmVycworI2RlZmluZQlyZXNfZ2V0c2VydmVycwkJX19yZXNfZ2V0c2VydmVycworI2RlZmluZQlyZXNfYnVpbGRwcm90b2xpc3QJX19yZXNfYnVpbGRwcm90b2xpc3QKKyNkZWZpbmUJcmVzX2Rlc3Ryb3lwcm90b2xpc3QJX19yZXNfZGVzdHJveXByb3RvbGlzdAorI2RlZmluZQlyZXNfZGVzdHJveXNlcnZpY2VsaXN0CV9fcmVzX2Rlc3Ryb3lzZXJ2aWNlbGlzdAorI2RlZmluZQlyZXNfZ2V0X25pYmJsZXN1ZmZpeAlfX3Jlc19nZXRfbmliYmxlc3VmZml4CisjZGVmaW5lCXJlc19nZXRfbmliYmxlc3VmZml4MglfX3Jlc19nZXRfbmliYmxlc3VmZml4MgorI2RlZmluZQlyZXNfb3Vyc2VydmVyX3AJCV9fcmVzX291cnNlcnZlcl9wCisjZGVmaW5lCXJlc19wcm90b2NvbG5hbWUJX19yZXNfcHJvdG9jb2xuYW1lCisjZGVmaW5lCXJlc19wcm90b2NvbG51bWJlcglfX3Jlc19wcm90b2NvbG51bWJlcgorI2RlZmluZQlyZXNfc2VuZF9zZXRxaG9vawlfX3Jlc19zZW5kX3NldHFob29rCisjZGVmaW5lCXJlc19zZW5kX3NldHJob29rCV9fcmVzX3NlbmRfc2V0cmhvb2sKKyNkZWZpbmUJcmVzX3NlcnZpY2VuYW1lCQlfX3Jlc19zZXJ2aWNlbmFtZQorI2RlZmluZQlyZXNfc2VydmljZW51bWJlcglfX3Jlc19zZXJ2aWNlbnVtYmVyCitfX0JFR0lOX0RFQ0xTCitpbnQJCXJlc19obm9rKGNvbnN0IGNoYXIgKik7CitpbnQJCXJlc19vd25vayhjb25zdCBjaGFyICopOworaW50CQlyZXNfbWFpbG9rKGNvbnN0IGNoYXIgKik7CitpbnQJCXJlc19kbm9rKGNvbnN0IGNoYXIgKik7CitpbnQJCXN5bV9zdG9uKGNvbnN0IHN0cnVjdCByZXNfc3ltICosIGNvbnN0IGNoYXIgKiwgaW50ICopOworY29uc3QgY2hhciAqCXN5bV9udG9zKGNvbnN0IHN0cnVjdCByZXNfc3ltICosIGludCwgaW50ICopOworY29uc3QgY2hhciAqCXN5bV9udG9wKGNvbnN0IHN0cnVjdCByZXNfc3ltICosIGludCwgaW50ICopOworI2lmbmRlZiBBTkRST0lEX0NIQU5HRVMKK2ludAkJYjY0X250b3AodV9jaGFyIGNvbnN0ICosIHNpemVfdCwgY2hhciAqLCBzaXplX3QpOworaW50CQliNjRfcHRvbihjaGFyIGNvbnN0ICosIHVfY2hhciAqLCBzaXplX3QpOworI2VuZGlmCitpbnQJCWxvY19hdG9uKGNvbnN0IGNoYXIgKiwgdV9jaGFyICopOworY29uc3QgY2hhciAqCWxvY19udG9hKGNvbnN0IHVfY2hhciAqLCBjaGFyICopOworaW50CQlkbl9za2lwbmFtZShjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICopOwordm9pZAkJcHV0bG9uZyh1aW50MzJfdCwgdV9jaGFyICopOwordm9pZAkJcHV0c2hvcnQodWludDE2X3QsIHVfY2hhciAqKTsKKyNpZm5kZWYgX191bHRyaXhfXwordWludDE2X3QJX2dldHNob3J0KGNvbnN0IHVfY2hhciAqKTsKK3VpbnQzMl90CV9nZXRsb25nKGNvbnN0IHVfY2hhciAqKTsKKyNlbmRpZgorY29uc3QgY2hhciAqCXBfY2xhc3MoaW50KTsKK2NvbnN0IGNoYXIgKglwX3RpbWUodWludDMyX3QpOworY29uc3QgY2hhciAqCXBfdHlwZShpbnQpOworY29uc3QgY2hhciAqCXBfcmNvZGUoaW50KTsKK19fTElCQ19ISURERU5fXyBjb25zdCBjaGFyICoJcF9zb2NrdW4odW5pb24gcmVzX3NvY2thZGRyX3VuaW9uLCBjaGFyICosIHNpemVfdCk7Citjb25zdCB1X2NoYXIgKglwX2Nkbm5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBpbnQsIEZJTEUgKik7Citjb25zdCB1X2NoYXIgKglwX2NkbmFtZShjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIEZJTEUgKik7Citjb25zdCB1X2NoYXIgKglwX2Zxbm5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAorCQkJICAgICAgIGludCwgY2hhciAqLCBpbnQpOworY29uc3QgdV9jaGFyICoJcF9mcW5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBGSUxFICopOworY29uc3QgY2hhciAqCXBfb3B0aW9uKHVfbG9uZyk7CitjaGFyICoJCXBfc2Vjc3RvZGF0ZSh1X2xvbmcpOworaW50CQlkbl9jb3VudF9sYWJlbHMoY29uc3QgY2hhciAqKTsKK3VfaW50CQlyZXNfcmFuZG9taWQodm9pZCk7CitpbnQJCXJlc19uYW1laW5xdWVyeShjb25zdCBjaGFyICosIGludCwgaW50LCBjb25zdCB1X2NoYXIgKiwKKwkJCQkgICAgIGNvbnN0IHVfY2hhciAqKTsKK2ludAkJcmVzX3F1ZXJpZXNtYXRjaChjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCisJCQkJICAgICAgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKTsKK19fTElCQ19ISURERU5fXyBjb25zdCBjaGFyICoJcF9zZWN0aW9uKGludCwgaW50KTsKKy8qIFRoaW5ncyBpbnZvbHZpbmcgYSByZXNvbHZlciBjb250ZXh0LiAqLworaW50CQlyZXNfbmluaXQocmVzX3N0YXRlKTsKK2ludAkJcmVzX25pc291cnNlcnZlcihjb25zdCByZXNfc3RhdGUsIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKK3ZvaWQJCWZwX3Jlc3N0YXQoY29uc3QgcmVzX3N0YXRlLCBGSUxFICopOworX19MSUJDX0hJRERFTl9fIHZvaWQJCXJlc19wcXVlcnkoY29uc3QgcmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOworY29uc3QgY2hhciAqCXJlc19ob3N0YWxpYXMoY29uc3QgcmVzX3N0YXRlLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJcmVzX25xdWVyeShyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfbnNlYXJjaChyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfbnF1ZXJ5ZG9tYWluKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQkJICAgICAgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfbm1rcXVlcnkocmVzX3N0YXRlLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsCisJCQkJICBjb25zdCB1X2NoYXIgKiwgaW50LCBjb25zdCB1X2NoYXIgKiwKKwkJCQkgIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfbnNlbmQocmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX25zZW5kc2lnbmVkKHJlc19zdGF0ZSwgY29uc3QgdV9jaGFyICosIGludCwKKwkJCQkgICAgIG5zX3RzaWdfa2V5ICosIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfZmluZHpvbmVjdXQocmVzX3N0YXRlLCBjb25zdCBjaGFyICosIG5zX2NsYXNzLCBpbnQsCisJCQkJICAgICBjaGFyICosIHNpemVfdCwgc3RydWN0IGluX2FkZHIgKiwgaW50KTsKK2ludAkJcmVzX2ZpbmR6b25lY3V0MihyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgbnNfY2xhc3MsIGludCwKKwkJCQkgICAgICBjaGFyICosIHNpemVfdCwKKwkJCQkgICAgICB1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gKiwgaW50KTsKK3ZvaWQJCXJlc19uY2xvc2UocmVzX3N0YXRlKTsKK19fTElCQ19ISURERU5fXyBpbnQJCXJlc19ub3B0KHJlc19zdGF0ZSwgaW50LCB1X2NoYXIgKiwgaW50LCBpbnQpOwordm9pZAkJcmVzX3NlbmRfc2V0cWhvb2socmVzX3NlbmRfcWhvb2spOwordm9pZAkJcmVzX3NlbmRfc2V0cmhvb2socmVzX3NlbmRfcmhvb2spOworX19MSUJDX0hJRERFTl9fIGludAkJX19yZXNfdmluaXQocmVzX3N0YXRlLCBpbnQpOwordm9pZAkJcmVzX2Rlc3Ryb3lzZXJ2aWNlbGlzdCh2b2lkKTsKK2NvbnN0IGNoYXIgKglyZXNfc2VydmljZW5hbWUodWludDE2X3QsIGNvbnN0IGNoYXIgKik7Citjb25zdCBjaGFyICoJcmVzX3Byb3RvY29sbmFtZShpbnQpOwordm9pZAkJcmVzX2Rlc3Ryb3lwcm90b2xpc3Qodm9pZCk7Cit2b2lkCQlyZXNfYnVpbGRwcm90b2xpc3Qodm9pZCk7CitfX0xJQkNfSElEREVOX18gY29uc3QgY2hhciAqCXJlc19nZXRfbmliYmxlc3VmZml4KHJlc19zdGF0ZSk7CitfX0xJQkNfSElEREVOX18gY29uc3QgY2hhciAqCXJlc19nZXRfbmliYmxlc3VmZml4MihyZXNfc3RhdGUpOworX19MSUJDX0hJRERFTl9fIHZvaWQJCXJlc19uZGVzdHJveShyZXNfc3RhdGUpOworX19MSUJDX0hJRERFTl9fIHVpbnQxNl90CXJlc19uYW1ldG9jbGFzcyhjb25zdCBjaGFyICosIGludCAqKTsKK19fTElCQ19ISURERU5fXyB1aW50MTZfdAlyZXNfbmFtZXRvdHlwZShjb25zdCBjaGFyICosIGludCAqKTsKK19fTElCQ19ISURERU5fXyB2b2lkCQlyZXNfc2V0c2VydmVycyhyZXNfc3RhdGUsCisJCQkJICAgIGNvbnN0IHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiAqLCBpbnQpOworX19MSUJDX0hJRERFTl9fIGludAkJcmVzX2dldHNlcnZlcnMocmVzX3N0YXRlLAorCQkJCSAgICB1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gKiwgaW50KTsKKworX19MSUJDX0hJRERFTl9fIHZvaWQgcmVzX3NldG5ldGlkKHJlc19zdGF0ZSwgdW5zaWduZWQpOworX19MSUJDX0hJRERFTl9fIHZvaWQgcmVzX3NldG1hcmsocmVzX3N0YXRlLCB1bnNpZ25lZCk7Cit1X2ludCAgcmVzX3JhbmRvbWlkKHZvaWQpOworCisjaWZkZWYgX19pMzg2X18KKyMgZGVmaW5lIF9fc29ja2V0Y2FsbCBleHRlcm4gX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkKKyNlbHNlCisjIGRlZmluZSBfX3NvY2tldGNhbGwgZXh0ZXJuCisjZW5kaWYKKworX19zb2NrZXRjYWxsIGludCBfX2Nvbm5lY3QoaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QpOworCisjdW5kZWYgX19zb2NrZXRjYWxsCisKK19fRU5EX0RFQ0xTCisKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCisKKyNlbmRpZiAvKiAhX1JFU09MVl9QUklWQVRFX0hfICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvcmVzb2x2X3N0YXRpYy5oIGIvbGliYy9kbnMvaW5jbHVkZS9yZXNvbHZfc3RhdGljLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvcHJpdmF0ZS9yZXNvbHZfc3RhdGljLmgKcmVuYW1lIHRvIGxpYmMvZG5zL2luY2x1ZGUvcmVzb2x2X3N0YXRpYy5oCmRpZmYgLS1naXQgYS9saWJjL2Rucy9uYW1lc2VyL25zX25hbWUuYyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNzU5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9uYW1lc2VyL25zX25hbWUuYwpAQCAtMCwwICsxLDExNzUgQEAKKy8qCSROZXRCU0Q6IG5zX25hbWUuYyx2IDEuOSAyMDEyLzAzLzEzIDIxOjEzOjM5IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWZuZGVmIGxpbnQKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX25hbWUuYyx2IDEuMTEgMjAwOS8wMS8yMyAxOTo1OToxNiBlYWNoIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogbnNfbmFtZS5jLHYgMS45IDIwMTIvMDMvMTMgMjE6MTM6MzkgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaWZkZWYgU1BSSU5URl9DSEFSCisjIGRlZmluZSBTUFJJTlRGKHgpICgoaW50KXN0cmxlbihzcHJpbnRmLyoqL3gpKQorI2Vsc2UKKyMgZGVmaW5lIFNQUklOVEYoeCkgKHNwcmludGYgeCkKKyNlbmRpZgorCisjZGVmaW5lIE5TX1RZUEVfRUxUCQkJMHg0MCAvKiBFRE5TMCBleHRlbmRlZCBsYWJlbCB0eXBlICovCisjZGVmaW5lIEROU19MQUJFTFRZUEVfQklUU1RSSU5HCQkweDQxCisKKy8qIERhdGEuICovCisKK3N0YXRpYyBjb25zdCBjaGFyCWRpZ2l0c1tdID0gIjAxMjM0NTY3ODkiOworCitzdGF0aWMgY29uc3QgY2hhciBkaWdpdHZhbHVlWzI1Nl0gPSB7CisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCS8qMTYqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjMyKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyo0OCovCisJIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qNjQqLworCS0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjgwKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyo5NiovCisJLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qMTEyKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyoxMjgqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjI1NiovCit9OworCisvKiBGb3J3YXJkLiAqLworCitzdGF0aWMgaW50CQlzcGVjaWFsKGludCk7CitzdGF0aWMgaW50CQlwcmludGFibGUoaW50KTsKK3N0YXRpYyBpbnQJCWRuX2ZpbmQoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAorCQkJCWNvbnN0IHVfY2hhciAqIGNvbnN0ICosCisJCQkJY29uc3QgdV9jaGFyICogY29uc3QgKik7CitzdGF0aWMgaW50CQllbmNvZGVfYml0c3JpbmcoY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqLAorCQkJCQl1bnNpZ25lZCBjaGFyICoqLCB1bnNpZ25lZCBjaGFyICoqLAorCQkJCQl1bnNpZ25lZCBjb25zdCBjaGFyICopOworc3RhdGljIGludAkJbGFiZWxsZW4oY29uc3QgdV9jaGFyICopOworc3RhdGljIGludAkJZGVjb2RlX2JpdHN0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICoqLAorCQkJCQkgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKiBQdWJsaWMuICovCisKKy8qCisgKglDb252ZXJ0IGFuIGVuY29kZWQgZG9tYWluIG5hbWUgdG8gcHJpbnRhYmxlIGFzY2lpIGFzIHBlciBSRkMxMDM1LgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gYnVmZmVyLCBvciAtMSAod2l0aCBlcnJubyBzZXQpCisgKgorICogbm90ZXM6CisgKglUaGUgcm9vdCBpcyByZXR1cm5lZCBhcyAiLiIKKyAqCUFsbCBvdGhlciBkb21haW5zIGFyZSByZXR1cm5lZCBpbiBub24gYWJzb2x1dGUgZm9ybQorICovCitpbnQKK25zX25hbWVfbnRvcChjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQoreworCWNvbnN0IHVfY2hhciAqY3A7CisJY2hhciAqZG4sICplb207CisJdV9jaGFyIGM7CisJdV9pbnQgbjsKKwlpbnQgbDsKKworCWNwID0gc3JjOworCWRuID0gZHN0OworCWVvbSA9IGRzdCArIGRzdHNpejsKKworCXdoaWxlICgobiA9ICpjcCsrKSAhPSAwKSB7CisJCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7CisJCQkvKiBTb21lIGtpbmQgb2YgY29tcHJlc3Npb24gcG9pbnRlci4gKi8KKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAoZG4gIT0gZHN0KSB7CisJCQlpZiAoZG4gPj0gZW9tKSB7CisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCSpkbisrID0gJy4nOworCQl9CisJCWlmICgobCA9IGxhYmVsbGVuKGNwIC0gMSkpIDwgMCkgeworCQkJZXJybm8gPSBFTVNHU0laRTsgLyogWFhYICovCisJCQlyZXR1cm4oLTEpOworCQl9CisJCWlmIChkbiArIGwgPj0gZW9tKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSA9PSBOU19UWVBFX0VMVCkgeworCQkJaW50IG07CisKKwkJCWlmIChuICE9IEROU19MQUJFTFRZUEVfQklUU1RSSU5HKSB7CisJCQkJLyogWFhYOiBsYWJlbGxlbiBzaG91bGQgcmVqZWN0IHRoaXMgY2FzZSAqLworCQkJCWVycm5vID0gRUlOVkFMOworCQkJCXJldHVybigtMSk7CisJCQl9CisJCQlpZiAoKG0gPSBkZWNvZGVfYml0c3RyaW5nKCZjcCwgZG4sIGVvbSkpIDwgMCkKKwkJCXsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybigtMSk7CisJCQl9CisJCQlkbiArPSBtOworCQkJY29udGludWU7CisJCX0KKwkJZm9yICg7IGwgPiAwOyBsLS0pIHsKKwkJCWMgPSAqY3ArKzsKKwkJCWlmIChzcGVjaWFsKGMpKSB7CisJCQkJaWYgKGRuICsgMSA+PSBlb20pIHsKKwkJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJCSpkbisrID0gJ1xcJzsKKwkJCQkqZG4rKyA9IChjaGFyKWM7CisJCQl9IGVsc2UgaWYgKCFwcmludGFibGUoYykpIHsKKwkJCQlpZiAoZG4gKyAzID49IGVvbSkgeworCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJKmRuKysgPSAnXFwnOworCQkJCSpkbisrID0gZGlnaXRzW2MgLyAxMDBdOworCQkJCSpkbisrID0gZGlnaXRzWyhjICUgMTAwKSAvIDEwXTsKKwkJCQkqZG4rKyA9IGRpZ2l0c1tjICUgMTBdOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZG4gPj0gZW9tKSB7CisJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCQkqZG4rKyA9IChjaGFyKWM7CisJCQl9CisJCX0KKwl9CisJaWYgKGRuID09IGRzdCkgeworCQlpZiAoZG4gPj0gZW9tKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJKmRuKysgPSAnLic7CisJfQorCWlmIChkbiA+PSBlb20pIHsKKwkJZXJybm8gPSBFTVNHU0laRTsKKwkJcmV0dXJuICgtMSk7CisJfQorCSpkbisrID0gJ1wwJzsKKwlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgZG4gLSBkc3QpKTsKKwlyZXR1cm4gKGludCkoZG4gLSBkc3QpOworfQorCisvKgorICoJQ29udmVydCBhIGFzY2lpIHN0cmluZyBpbnRvIGFuIGVuY29kZWQgZG9tYWluIG5hbWUgYXMgcGVyIFJGQzEwMzUuCisgKgorICogcmV0dXJuOgorICoKKyAqCS0xIGlmIGl0IGZhaWxzCisgKgkxIGlmIHN0cmluZyB3YXMgZnVsbHkgcXVhbGlmaWVkCisgKgkwIGlzIHN0cmluZyB3YXMgbm90IGZ1bGx5IHF1YWxpZmllZAorICoKKyAqIG5vdGVzOgorICoJRW5mb3JjZXMgbGFiZWwgYW5kIGRvbWFpbiBsZW5ndGggbGltaXRzLgorICovCitpbnQKK25zX25hbWVfcHRvbihjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KSB7CisJcmV0dXJuIChuc19uYW1lX3B0b24yKHNyYywgZHN0LCBkc3RzaXosIE5VTEwpKTsKK30KKworLyoKKyAqIG5zX25hbWVfcHRvbjIoc3JjLCBkc3QsIGRzdHNpeiwgKmRzdGxlbikKKyAqCUNvbnZlcnQgYSBhc2NpaSBzdHJpbmcgaW50byBhbiBlbmNvZGVkIGRvbWFpbiBuYW1lIGFzIHBlciBSRkMxMDM1LgorICogcmV0dXJuOgorICoJLTEgaWYgaXQgZmFpbHMKKyAqCTEgaWYgc3RyaW5nIHdhcyBmdWxseSBxdWFsaWZpZWQKKyAqCTAgaXMgc3RyaW5nIHdhcyBub3QgZnVsbHkgcXVhbGlmaWVkCisgKiBzaWRlIGVmZmVjdHM6CisgKglmaWxscyBpbiAqZHN0bGVuIChpZiBub24tTlVMTCkKKyAqIG5vdGVzOgorICoJRW5mb3JjZXMgbGFiZWwgYW5kIGRvbWFpbiBsZW5ndGggbGltaXRzLgorICovCisKK2ludAorbnNfbmFtZV9wdG9uMihjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6LCBzaXplX3QgKmRzdGxlbikgeworCXVfY2hhciAqbGFiZWwsICpicCwgKmVvbTsKKwlpbnQgYywgbiwgZXNjYXBlZCwgZSA9IDA7CisJY2hhciAqY3A7CisKKwllc2NhcGVkID0gMDsKKwlicCA9IGRzdDsKKwllb20gPSBkc3QgKyBkc3RzaXo7CisJbGFiZWwgPSBicCsrOworCisJd2hpbGUgKChjID0gKnNyYysrKSAhPSAwKSB7CisJCWlmIChlc2NhcGVkKSB7CisJCQlpZiAoYyA9PSAnWycpIHsgLyogc3RhcnQgYSBiaXQgc3RyaW5nIGxhYmVsICovCisJCQkJaWYgKChjcCA9IHN0cmNocihzcmMsICddJykpID09IE5VTEwpIHsKKwkJCQkJZXJybm8gPSBFSU5WQUw7IC8qID8/PyAqLworCQkJCQlyZXR1cm4oLTEpOworCQkJCX0KKwkJCQlpZiAoKGUgPSBlbmNvZGVfYml0c3JpbmcoJnNyYywgY3AgKyAyLAorCQkJCQkJCSAmbGFiZWwsICZicCwgZW9tKSkKKwkJCQkgICAgIT0gMCkgeworCQkJCQllcnJubyA9IGU7CisJCQkJCXJldHVybigtMSk7CisJCQkJfQorCQkJCWVzY2FwZWQgPSAwOworCQkJCWxhYmVsID0gYnArKzsKKwkJCQlpZiAoKGMgPSAqc3JjKyspID09IDApCisJCQkJCWdvdG8gZG9uZTsKKwkJCQllbHNlIGlmIChjICE9ICcuJykgeworCQkJCQllcnJubyA9IEVJTlZBTDsKKwkJCQkJcmV0dXJuKC0xKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQllbHNlIGlmICgoY3AgPSBzdHJjaHIoZGlnaXRzLCBjKSkgIT0gTlVMTCkgeworCQkJCW4gPSAoaW50KShjcCAtIGRpZ2l0cykgKiAxMDA7CisJCQkJaWYgKChjID0gKnNyYysrKSA9PSAwIHx8CisJCQkJICAgIChjcCA9IHN0cmNocihkaWdpdHMsIGMpKSA9PSBOVUxMKSB7CisJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCQluICs9IChpbnQpKGNwIC0gZGlnaXRzKSAqIDEwOworCQkJCWlmICgoYyA9ICpzcmMrKykgPT0gMCB8fAorCQkJCSAgICAoY3AgPSBzdHJjaHIoZGlnaXRzLCBjKSkgPT0gTlVMTCkgeworCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJbiArPSAoaW50KShjcCAtIGRpZ2l0cyk7CisJCQkJaWYgKG4gPiAyNTUpIHsKKwkJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJCWMgPSBuOworCQkJfQorCQkJZXNjYXBlZCA9IDA7CisJCX0gZWxzZSBpZiAoYyA9PSAnXFwnKSB7CisJCQllc2NhcGVkID0gMTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKGMgPT0gJy4nKSB7CisJCQljID0gKGludCkoYnAgLSBsYWJlbCAtIDEpOworCQkJaWYgKChjICYgTlNfQ01QUlNGTEdTKSAhPSAwKSB7CS8qIExhYmVsIHRvbyBiaWcuICovCisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWlmIChsYWJlbCA+PSBlb20pIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJKmxhYmVsID0gYzsKKwkJCS8qIEZ1bGx5IHF1YWxpZmllZCA/ICovCisJCQlpZiAoKnNyYyA9PSAnXDAnKSB7CisJCQkJaWYgKGMgIT0gMCkgeworCQkJCQlpZiAoYnAgPj0gZW9tKSB7CisJCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQkJcmV0dXJuICgtMSk7CisJCQkJCX0KKwkJCQkJKmJwKysgPSAnXDAnOworCQkJCX0KKwkJCQlpZiAoKGJwIC0gZHN0KSA+IE1BWENETkFNRSkgeworCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJaWYgKGRzdGxlbiAhPSBOVUxMKQorCQkJCQkqZHN0bGVuID0gKGJwIC0gZHN0KTsKKwkJCQlyZXR1cm4gKDEpOworCQkJfQorCQkJaWYgKGMgPT0gMCB8fCAqc3JjID09ICcuJykgeworCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQlsYWJlbCA9IGJwKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYnAgPj0gZW9tKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJKmJwKysgPSAodV9jaGFyKWM7CisJfQorCWMgPSAoaW50KShicCAtIGxhYmVsIC0gMSk7CisJaWYgKChjICYgTlNfQ01QUlNGTEdTKSAhPSAwKSB7CQkvKiBMYWJlbCB0b28gYmlnLiAqLworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisgIGRvbmU6CisJaWYgKGxhYmVsID49IGVvbSkgeworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisJKmxhYmVsID0gYzsKKwlpZiAoYyAhPSAwKSB7CisJCWlmIChicCA+PSBlb20pIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQkqYnArKyA9IDA7CisJfQorCWlmICgoYnAgLSBkc3QpID4gTUFYQ0ROQU1FKSB7CS8qIHNyYyB0b28gYmlnICovCisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAoZHN0bGVuICE9IE5VTEwpCisJCSpkc3RsZW4gPSAoYnAgLSBkc3QpOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKglDb252ZXJ0IGEgbmV0d29yayBzdHJpbmdzIGxhYmVscyBpbnRvIGFsbCBsb3dlcmNhc2UuCisgKgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gYnVmZmVyLCBvciAtMSAod2l0aCBlcnJubyBzZXQpCisgKgorICogbm90ZXM6CisgKglFbmZvcmNlcyBsYWJlbCBhbmQgZG9tYWluIGxlbmd0aCBsaW1pdHMuCisgKi8KKworaW50Cituc19uYW1lX250b2woY29uc3QgdV9jaGFyICpzcmMsIHVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQoreworCWNvbnN0IHVfY2hhciAqY3A7CisJdV9jaGFyICpkbiwgKmVvbTsKKwl1X2NoYXIgYzsKKwl1X2ludCBuOworCWludCBsOworCisJY3AgPSBzcmM7CisJZG4gPSBkc3Q7CisJZW9tID0gZHN0ICsgZHN0c2l6OworCisJaWYgKGRuID49IGVvbSkgeworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisJd2hpbGUgKChuID0gKmNwKyspICE9IDApIHsKKwkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSA9PSBOU19DTVBSU0ZMR1MpIHsKKwkJCS8qIFNvbWUga2luZCBvZiBjb21wcmVzc2lvbiBwb2ludGVyLiAqLworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCSpkbisrID0gbjsKKwkJaWYgKChsID0gbGFiZWxsZW4oY3AgLSAxKSkgPCAwKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKGRuICsgbCA+PSBlb20pIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlmb3IgKDsgbCA+IDA7IGwtLSkgeworCQkJYyA9ICpjcCsrOworCQkJaWYgKGlzYXNjaWkoYykgJiYgaXN1cHBlcihjKSkKKwkJCQkqZG4rKyA9IHRvbG93ZXIoYyk7CisJCQllbHNlCisJCQkJKmRuKysgPSBjOworCQl9CisJfQorCSpkbisrID0gJ1wwJzsKKwlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgZG4gLSBkc3QpKTsKKwlyZXR1cm4gKGludCkoZG4gLSBkc3QpOworfQorCisvKgorICoJVW5wYWNrIGEgZG9tYWluIG5hbWUgZnJvbSBhIG1lc3NhZ2UsIHNvdXJjZSBtYXkgYmUgY29tcHJlc3NlZC4KKyAqCisgKiByZXR1cm46CisgKgktMSBpZiBpdCBmYWlscywgb3IgY29uc3VtZWQgb2N0ZXRzIGlmIGl0IHN1Y2NlZWRzLgorICovCitpbnQKK25zX25hbWVfdW5wYWNrKGNvbnN0IHVfY2hhciAqbXNnLCBjb25zdCB1X2NoYXIgKmVvbSwgY29uc3QgdV9jaGFyICpzcmMsCisJICAgICAgIHVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQoreworCXJldHVybiAobnNfbmFtZV91bnBhY2syKG1zZywgZW9tLCBzcmMsIGRzdCwgZHN0c2l6LCBOVUxMKSk7Cit9CisKKy8qCisgKiBuc19uYW1lX3VucGFjazIobXNnLCBlb20sIHNyYywgZHN0LCBkc3RzaXosICpkc3RsZW4pCisgKglVbnBhY2sgYSBkb21haW4gbmFtZSBmcm9tIGEgbWVzc2FnZSwgc291cmNlIG1heSBiZSBjb21wcmVzc2VkLgorICogcmV0dXJuOgorICoJLTEgaWYgaXQgZmFpbHMsIG9yIGNvbnN1bWVkIG9jdGV0cyBpZiBpdCBzdWNjZWVkcy4KKyAqIHNpZGUgZWZmZWN0OgorICoJZmlsbHMgaW4gKmRzdGxlbiAoaWYgbm9uLU5VTEwpLgorICovCitpbnQKK25zX25hbWVfdW5wYWNrMihjb25zdCB1X2NoYXIgKm1zZywgY29uc3QgdV9jaGFyICplb20sIGNvbnN0IHVfY2hhciAqc3JjLAorCQl1X2NoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeiwgc2l6ZV90ICpkc3RsZW4pCit7CisJY29uc3QgdV9jaGFyICpzcmNwLCAqZHN0bGltOworCXVfY2hhciAqZHN0cDsKKwlpbnQgbiwgbGVuLCBjaGVja2VkLCBsOworCisJbGVuID0gLTE7CisJY2hlY2tlZCA9IDA7CisJZHN0cCA9IGRzdDsKKwlzcmNwID0gc3JjOworCWRzdGxpbSA9IGRzdCArIGRzdHNpejsKKwlpZiAoc3JjcCA8IG1zZyB8fCBzcmNwID49IGVvbSkgeworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisJLyogRmV0Y2ggbmV4dCBsYWJlbCBpbiBkb21haW4gbmFtZS4gKi8KKwl3aGlsZSAoKG4gPSAqc3JjcCsrKSAhPSAwKSB7CisJCS8qIENoZWNrIGZvciBpbmRpcmVjdGlvbi4gKi8KKwkJc3dpdGNoIChuICYgTlNfQ01QUlNGTEdTKSB7CisJCWNhc2UgMDoKKwkJY2FzZSBOU19UWVBFX0VMVDoKKwkJCS8qIExpbWl0IGNoZWNrcy4gKi8KKwkJCWlmICgobCA9IGxhYmVsbGVuKHNyY3AgLSAxKSkgPCAwKSB7CisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4oLTEpOworCQkJfQorCQkJaWYgKGRzdHAgKyBsICsgMSA+PSBkc3RsaW0gfHwgc3JjcCArIGwgPj0gZW9tKSB7CisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWNoZWNrZWQgKz0gbCArIDE7CisJCQkqZHN0cCsrID0gbjsKKwkJCW1lbWNweShkc3RwLCBzcmNwLCAoc2l6ZV90KWwpOworCQkJZHN0cCArPSBsOworCQkJc3JjcCArPSBsOworCQkJYnJlYWs7CisKKwkJY2FzZSBOU19DTVBSU0ZMR1M6CisJCQlpZiAoc3JjcCA+PSBlb20pIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJaWYgKGxlbiA8IDApIHsKKwkJCQlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgc3JjcCAtIHNyYyArIDEpKTsKKwkJCQlsZW4gPSAoaW50KShzcmNwIC0gc3JjICsgMSk7CisJCQl9CisJCQkvLyBCRUdJTiBhbmRyb2lkLWNoYW5nZWQ6IHNhZmVyIHBvaW50ZXIgb3ZlcmZsb3cgY2hlY2sKKwkJCWwgPSAoKChuICYgMHgzZikgPDwgOCkgfCAoKnNyY3AgJiAweGZmKSk7CisJCQlpZiAobCA+PSBlb20gLSBtc2cpIHsgIC8qIE91dCBvZiByYW5nZS4gKi8KKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJc3JjcCA9IG1zZyArIGw7CisJCQkvLyBFTkQgYW5kcm9pZC1jaGFuZ2VkCisJCQljaGVja2VkICs9IDI7CisJCQkvKgorCQkJICogQ2hlY2sgZm9yIGxvb3BzIGluIHRoZSBjb21wcmVzc2VkIG5hbWU7CisJCQkgKiBpZiB3ZSd2ZSBsb29rZWQgYXQgdGhlIHdob2xlIG1lc3NhZ2UsCisJCQkgKiB0aGVyZSBtdXN0IGJlIGEgbG9vcC4KKwkJCSAqLworCQkJaWYgKGNoZWNrZWQgPj0gZW9tIC0gbXNnKSB7CisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CQkJLyogZmxhZyBlcnJvciAqLworCQl9CisJfQorCSpkc3RwKysgPSAwOworCWlmIChkc3RsZW4gIT0gTlVMTCkKKwkJKmRzdGxlbiA9IGRzdHAgLSBkc3Q7CisJaWYgKGxlbiA8IDApIHsKKwkJX0RJQUdBU1NFUlQoX190eXBlX2ZpdChpbnQsIHNyY3AgLSBzcmMpKTsKKwkJbGVuID0gKGludCkoc3JjcCAtIHNyYyk7CisJfQorCXJldHVybiBsZW47Cit9CisKKy8qCisgKglQYWNrIGRvbWFpbiBuYW1lICdkb21haW4nIGludG8gJ2NvbXBfZG4nLgorICoKKyAqIHJldHVybjoKKyAqCVNpemUgb2YgdGhlIGNvbXByZXNzZWQgbmFtZSwgb3IgLTEuCisgKgorICogbm90ZXM6CisgKgknZG5wdHJzJyBpcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBwcmV2aW91cyBjb21wcmVzc2VkIG5hbWVzLgorICoJZG5wdHJzWzBdIGlzIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtZXNzYWdlLiBUaGUgYXJyYXkKKyAqCWVuZHMgd2l0aCBOVUxMLgorICoJJ2xhc3RkbnB0cicgaXMgYSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5IHBvaW50ZWQgdG8KKyAqCWJ5ICdkbnB0cnMnLgorICoKKyAqIFNpZGUgZWZmZWN0czoKKyAqCVRoZSBsaXN0IG9mIHBvaW50ZXJzIGluIGRucHRycyBpcyB1cGRhdGVkIGZvciBsYWJlbHMgaW5zZXJ0ZWQgaW50bworICoJdGhlIG1lc3NhZ2UgYXMgd2UgY29tcHJlc3MgdGhlIG5hbWUuICBJZiAnZG5wdHInIGlzIE5VTEwsIHdlIGRvbid0CisgKgl0cnkgdG8gY29tcHJlc3MgbmFtZXMuIElmICdsYXN0ZG5wdHInIGlzIE5VTEwsIHdlIGRvbid0IHVwZGF0ZSB0aGUKKyAqCWxpc3QuCisgKi8KK2ludAorbnNfbmFtZV9wYWNrKGNvbnN0IHVfY2hhciAqc3JjLCB1X2NoYXIgKmRzdCwgaW50IGRzdHNpeiwKKwkgICAgIGNvbnN0IHVfY2hhciAqKmRucHRycywgY29uc3QgdV9jaGFyICoqbGFzdGRucHRyKQoreworCXVfY2hhciAqZHN0cDsKKwljb25zdCB1X2NoYXIgKipjcHAsICoqbHBwLCAqZW9iLCAqbXNnOworCWNvbnN0IHVfY2hhciAqc3JjcDsKKwlpbnQgbiwgbCwgZmlyc3QgPSAxOworCisJc3JjcCA9IHNyYzsKKwlkc3RwID0gZHN0OworCWVvYiA9IGRzdHAgKyBkc3RzaXo7CisJbHBwID0gY3BwID0gTlVMTDsKKwlpZiAoZG5wdHJzICE9IE5VTEwpIHsKKwkJaWYgKChtc2cgPSAqZG5wdHJzKyspICE9IE5VTEwpIHsKKwkJCWZvciAoY3BwID0gZG5wdHJzOyAqY3BwICE9IE5VTEw7IGNwcCsrKQorCQkJCWNvbnRpbnVlOworCQkJbHBwID0gY3BwOwkvKiBlbmQgb2YgbGlzdCB0byBzZWFyY2ggKi8KKwkJfQorCX0gZWxzZQorCQltc2cgPSBOVUxMOworCisJLyogbWFrZSBzdXJlIHRoZSBkb21haW4gd2UgYXJlIGFib3V0IHRvIGFkZCBpcyBsZWdhbCAqLworCWwgPSAwOworCWRvIHsKKwkJaW50IGwwOworCisJCW4gPSAqc3JjcDsKKwkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSA9PSBOU19DTVBSU0ZMR1MpIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAoKGwwID0gbGFiZWxsZW4oc3JjcCkpIDwgMCkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4oLTEpOworCQl9CisJCWwgKz0gbDAgKyAxOworCQlpZiAobCA+IE1BWENETkFNRSkgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCXNyY3AgKz0gbDAgKyAxOworCX0gd2hpbGUgKG4gIT0gMCk7CisKKwkvKiBmcm9tIGhlcmUgb24gd2UgbmVlZCB0byByZXNldCBjb21wcmVzc2lvbiBwb2ludGVyIGFycmF5IG9uIGVycm9yICovCisJc3JjcCA9IHNyYzsKKwlkbyB7CisJCS8qIExvb2sgdG8gc2VlIGlmIHdlIGNhbiB1c2UgcG9pbnRlcnMuICovCisJCW4gPSAqc3JjcDsKKwkJaWYgKG4gIT0gMCAmJiBtc2cgIT0gTlVMTCkgeworCQkJbCA9IGRuX2ZpbmQoc3JjcCwgbXNnLCAoY29uc3QgdV9jaGFyICogY29uc3QgKilkbnB0cnMsCisJCQkJICAgIChjb25zdCB1X2NoYXIgKiBjb25zdCAqKWxwcCk7CisJCQlpZiAobCA+PSAwKSB7CisJCQkJaWYgKGRzdHAgKyAxID49IGVvYikgeworCQkJCQlnb3RvIGNsZWFudXA7CisJCQkJfQorCQkJCSpkc3RwKysgPSAoKHVfaW50MzJfdClsID4+IDgpIHwgTlNfQ01QUlNGTEdTOworCQkJCSpkc3RwKysgPSBsICUgMjU2OworCQkJCV9ESUFHQVNTRVJUKF9fdHlwZV9maXQoaW50LCBkc3RwIC0gZHN0KSk7CisJCQkJcmV0dXJuIChpbnQpKGRzdHAgLSBkc3QpOworCQkJfQorCQkJLyogTm90IGZvdW5kLCBzYXZlIGl0LiAqLworCQkJaWYgKGxhc3RkbnB0ciAhPSBOVUxMICYmIGNwcCA8IGxhc3RkbnB0ciAtIDEgJiYKKwkJCSAgICAoZHN0cCAtIG1zZykgPCAweDQwMDAgJiYgZmlyc3QpIHsKKwkJCQkqY3BwKysgPSBkc3RwOworCQkJCSpjcHAgPSBOVUxMOworCQkJCWZpcnN0ID0gMDsKKwkJCX0KKwkJfQorCQkvKiBjb3B5IGxhYmVsIHRvIGJ1ZmZlciAqLworCQlpZiAoKG4gJiBOU19DTVBSU0ZMR1MpID09IE5TX0NNUFJTRkxHUykgeworCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4uICovCisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJbiA9IGxhYmVsbGVuKHNyY3ApOworCQlpZiAoZHN0cCArIDEgKyBuID49IGVvYikgeworCQkJZ290byBjbGVhbnVwOworCQl9CisJCW1lbWNweShkc3RwLCBzcmNwLCAoc2l6ZV90KShuICsgMSkpOworCQlzcmNwICs9IG4gKyAxOworCQlkc3RwICs9IG4gKyAxOworCX0gd2hpbGUgKG4gIT0gMCk7CisKKwlpZiAoZHN0cCA+IGVvYikgeworY2xlYW51cDoKKwkJaWYgKG1zZyAhPSBOVUxMKQorCQkJKmxwcCA9IE5VTEw7CisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgZHN0cCAtIGRzdCkpOworCXJldHVybiAoaW50KShkc3RwIC0gZHN0KTsKK30KKworLyoKKyAqCUV4cGFuZCBjb21wcmVzc2VkIGRvbWFpbiBuYW1lIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQuCisgKgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3V0IG9mIGBzcmMnLCBvciAtMSAod2l0aCBlcnJubyBzZXQpLgorICoKKyAqIG5vdGU6CisgKglSb290IGRvbWFpbiByZXR1cm5zIGFzICIuIiBub3QgIiIuCisgKi8KK2ludAorbnNfbmFtZV91bmNvbXByZXNzKGNvbnN0IHVfY2hhciAqbXNnLCBjb25zdCB1X2NoYXIgKmVvbSwgY29uc3QgdV9jaGFyICpzcmMsCisJCSAgIGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeikKK3sKKwl1X2NoYXIgdG1wW05TX01BWENETkFNRV07CisJaW50IG47CisKKwlpZiAoKG4gPSBuc19uYW1lX3VucGFjayhtc2csIGVvbSwgc3JjLCB0bXAsIHNpemVvZiB0bXApKSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisJaWYgKG5zX25hbWVfbnRvcCh0bXAsIGRzdCwgZHN0c2l6KSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisJcmV0dXJuIChuKTsKK30KKworLyoKKyAqCUNvbXByZXNzIGEgZG9tYWluIG5hbWUgaW50byB3aXJlIGZvcm1hdCwgdXNpbmcgY29tcHJlc3Npb24gcG9pbnRlcnMuCisgKgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkIGluIGBkc3QnIG9yIC0xICh3aXRoIGVycm5vIHNldCkuCisgKgorICogbm90ZXM6CisgKgknZG5wdHJzJyBpcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBwcmV2aW91cyBjb21wcmVzc2VkIG5hbWVzLgorICoJZG5wdHJzWzBdIGlzIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtZXNzYWdlLgorICoJVGhlIGxpc3QgZW5kcyB3aXRoIE5VTEwuICAnbGFzdGRucHRyJyBpcyBhIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUKKyAqCWFycmF5IHBvaW50ZWQgdG8gYnkgJ2RucHRycycuIFNpZGUgZWZmZWN0IGlzIHRvIHVwZGF0ZSB0aGUgbGlzdCBvZgorICoJcG9pbnRlcnMgZm9yIGxhYmVscyBpbnNlcnRlZCBpbnRvIHRoZSBtZXNzYWdlIGFzIHdlIGNvbXByZXNzIHRoZSBuYW1lLgorICoJSWYgJ2RucHRyJyBpcyBOVUxMLCB3ZSBkb24ndCB0cnkgdG8gY29tcHJlc3MgbmFtZXMuIElmICdsYXN0ZG5wdHInCisgKglpcyBOVUxMLCB3ZSBkb24ndCB1cGRhdGUgdGhlIGxpc3QuCisgKi8KK2ludAorbnNfbmFtZV9jb21wcmVzcyhjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6LAorCQkgY29uc3QgdV9jaGFyICoqZG5wdHJzLCBjb25zdCB1X2NoYXIgKipsYXN0ZG5wdHIpCit7CisJdV9jaGFyIHRtcFtOU19NQVhDRE5BTUVdOworCisJaWYgKG5zX25hbWVfcHRvbihzcmMsIHRtcCwgc2l6ZW9mIHRtcCkgPT0gLTEpCisJCXJldHVybiAoLTEpOworCXJldHVybiAobnNfbmFtZV9wYWNrKHRtcCwgZHN0LCAoaW50KWRzdHNpeiwgZG5wdHJzLCBsYXN0ZG5wdHIpKTsKK30KKworLyoKKyAqIFJlc2V0IGRucHRycyBzbyB0aGF0IHRoZXJlIGFyZSBubyBhY3RpdmUgcmVmZXJlbmNlcyB0byBwb2ludGVycyBhdCBvcgorICogYWZ0ZXIgc3JjLgorICovCit2b2lkCituc19uYW1lX3JvbGxiYWNrKGNvbnN0IHVfY2hhciAqc3JjLCBjb25zdCB1X2NoYXIgKipkbnB0cnMsCisJCSBjb25zdCB1X2NoYXIgKipsYXN0ZG5wdHIpCit7CisJd2hpbGUgKGRucHRycyA8IGxhc3RkbnB0ciAmJiAqZG5wdHJzICE9IE5VTEwpIHsKKwkJaWYgKCpkbnB0cnMgPj0gc3JjKSB7CisJCQkqZG5wdHJzID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCWRucHRycysrOworCX0KK30KKworLyoKKyAqCUFkdmFuY2UgKnB0cnB0ciB0byBza2lwIG92ZXIgdGhlIGNvbXByZXNzZWQgbmFtZSBpdCBwb2ludHMgYXQuCisgKgorICogcmV0dXJuOgorICoJMCBvbiBzdWNjZXNzLCAtMSAod2l0aCBlcnJubyBzZXQpIG9uIGZhaWx1cmUuCisgKi8KK2ludAorbnNfbmFtZV9za2lwKGNvbnN0IHVfY2hhciAqKnB0cnB0ciwgY29uc3QgdV9jaGFyICplb20pCit7CisJY29uc3QgdV9jaGFyICpjcDsKKwl1X2ludCBuOworCWludCBsOworCisJY3AgPSAqcHRycHRyOworCXdoaWxlIChjcCA8IGVvbSAmJiAobiA9ICpjcCsrKSAhPSAwKSB7CisJCS8qIENoZWNrIGZvciBpbmRpcmVjdGlvbi4gKi8KKwkJc3dpdGNoIChuICYgTlNfQ01QUlNGTEdTKSB7CisJCWNhc2UgMDoJCQkvKiBub3JtYWwgY2FzZSwgbiA9PSBsZW4gKi8KKwkJCWNwICs9IG47CisJCQljb250aW51ZTsKKwkJY2FzZSBOU19UWVBFX0VMVDogLyogRUROUzAgZXh0ZW5kZWQgbGFiZWwgKi8KKwkJCWlmICgobCA9IGxhYmVsbGVuKGNwIC0gMSkpIDwgMCkgeworCQkJCWVycm5vID0gRU1TR1NJWkU7IC8qIFhYWCAqLworCQkJCXJldHVybigtMSk7CisJCQl9CisJCQljcCArPSBsOworCQkJY29udGludWU7CisJCWNhc2UgTlNfQ01QUlNGTEdTOgkvKiBpbmRpcmVjdGlvbiAqLworCQkJY3ArKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkJLyogaWxsZWdhbCB0eXBlICovCisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWlmIChjcCA+IGVvbSkgeworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisJKnB0cnB0ciA9IGNwOworCXJldHVybiAoMCk7Cit9CisKKy8qIEZpbmQgdGhlIG51bWJlciBvZiBvY3RldHMgYW4gbm5hbWUgdGFrZXMgdXAsIGluY2x1ZGluZyB0aGUgcm9vdCBsYWJlbC4KKyAqIChUaGlzIGlzIGJhc2ljYWxseSBuc19uYW1lX3NraXAoKSB3aXRob3V0IGNvbXByZXNzaW9uLXBvaW50ZXIgc3VwcG9ydC4pCisgKiAoKE5PVEU6IGNhbiBvbmx5IHJldHVybiB6ZXJvIGlmIHBhc3NlZC1pbiBuYW1lc2l6IGFyZ3VtZW50IGlzIHplcm8uKSkKKyAqLworc3NpemVfdAorbnNfbmFtZV9sZW5ndGgobnNfbm5hbWVfY3Qgbm5hbWUsIHNpemVfdCBuYW1lc2l6KSB7CisJbnNfbm5hbWVfY3Qgb3JpZyA9IG5uYW1lOworCXVfaW50IG47CisKKwl3aGlsZSAobmFtZXNpei0tID4gMCAmJiAobiA9ICpubmFtZSsrKSAhPSAwKSB7CisJCWlmICgobiAmIE5TX0NNUFJTRkxHUykgIT0gMCkgeworCQkJZXJybm8gPSBFSVNESVI7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAobiA+IG5hbWVzaXopIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlubmFtZSArPSBuOworCQluYW1lc2l6IC09IG47CisJfQorCXJldHVybiAobm5hbWUgLSBvcmlnKTsKK30KKworLyogQ29tcGFyZSB0d28gbm5hbWUncyBmb3IgZXF1YWxpdHkuICBSZXR1cm4gLTEgb24gZXJyb3IgKHNldHRpbmcgZXJybm8pLgorICovCitpbnQKK25zX25hbWVfZXEobnNfbm5hbWVfY3QgYSwgc2l6ZV90IGFzLCBuc19ubmFtZV9jdCBiLCBzaXplX3QgYnMpIHsKKwluc19ubmFtZV9jdCBhZSA9IGEgKyBhcywgYmUgPSBiICsgYnM7CisJaW50IGFjLCBiYzsKKworCXdoaWxlIChhYyA9ICphLCBiYyA9ICpiLCBhYyAhPSAwICYmIGJjICE9IDApIHsKKwkJaWYgKChhYyAmIE5TX0NNUFJTRkxHUykgIT0gMCB8fCAoYmMgJiBOU19DTVBSU0ZMR1MpICE9IDApIHsKKwkJCWVycm5vID0gRUlTRElSOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKGEgKyBhYyA+PSBhZSB8fCBiICsgYmMgPj0gYmUpIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAoYWMgIT0gYmMgfHwgc3RybmNhc2VjbXAoKGNvbnN0IGNoYXIgKikgKythLAorCQkJCQkgICAgKGNvbnN0IGNoYXIgKikgKytiLAorCQkJCQkgICAgKHNpemVfdClhYykgIT0gMCkKKwkJCXJldHVybiAoMCk7CisJCWEgKz0gYWMsIGIgKz0gYmM7CisJfQorCXJldHVybiAoYWMgPT0gMCAmJiBiYyA9PSAwKTsKK30KKworLyogSXMgZG9tYWluICJBIiBvd25lZCBieSAoYXQgb3IgYmVsb3cpIGRvbWFpbiAiQiI/CisgKi8KK2ludAorbnNfbmFtZV9vd25lZChuc19uYW1lbWFwX2N0IGEsIGludCBhbiwgbnNfbmFtZW1hcF9jdCBiLCBpbnQgYm4pIHsKKwkvKiBJZiBBIGlzIHNob3J0ZXIsIGl0IGNhbm5vdCBiZSBvd25lZCBieSBCLiAqLworCWlmIChhbiA8IGJuKQorCQlyZXR1cm4gKDApOworCisJLyogSWYgdGhleSBhcmUgdW5lcXVhbCBiZWZvcmUgdGhlIGxlbmd0aCBvZiB0aGUgc2hvcnRlciwgQSBjYW5ub3QuLi4gKi8KKwl3aGlsZSAoYm4gPiAwKSB7CisJCWlmIChhLT5sZW4gIT0gYi0+bGVuIHx8CisJCSAgICBzdHJuY2FzZWNtcCgoY29uc3QgY2hhciAqKSBhLT5iYXNlLAorCQkJCShjb25zdCBjaGFyICopIGItPmJhc2UsIChzaXplX3QpYS0+bGVuKSAhPSAwKQorCQkJcmV0dXJuICgwKTsKKwkJYSsrLCBhbi0tOworCQliKyssIGJuLS07CisJfQorCisJLyogQSBtaWdodCBiZSBsb25nZXIgb3Igbm90LCBidXQgZWl0aGVyIHdheSwgQiBvd25zIGl0LiAqLworCXJldHVybiAoMSk7Cit9CisKKy8qIEJ1aWxkIGFuIGFycmF5IG9mIDxiYXNlLGxlbj4gdHVwbGVzIGZyb20gYW4gbm5hbWUsIHRvcC1kb3duIG9yZGVyLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgdHVwbGVzIChsYWJlbHMpIHRodXMgZGlzY292ZXJlZC4KKyAqLworaW50Cituc19uYW1lX21hcChuc19ubmFtZV9jdCBubmFtZSwgc2l6ZV90IG5hbWVsZW4sIG5zX25hbWVtYXBfdCBtYXAsIGludCBtYXBzaXplKSB7CisJdV9pbnQgbjsKKwlpbnQgbDsKKworCW4gPSAqbm5hbWUrKzsKKwluYW1lbGVuLS07CisKKwkvKiBSb290IHpvbmU/ICovCisJaWYgKG4gPT0gMCkgeworCQkvKiBFeHRyYSBkYXRhIGZvbGxvd3MgbmFtZT8gKi8KKwkJaWYgKG5hbWVsZW4gPiAwKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBDb21wcmVzc2lvbiBwb2ludGVyPyAqLworCWlmICgobiAmIE5TX0NNUFJTRkxHUykgIT0gMCkgeworCQllcnJubyA9IEVJU0RJUjsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJLyogTGFiZWwgdG9vIGxvbmc/ICovCisJaWYgKG4gPiBuYW1lbGVuKSB7CisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKworCS8qIFJlY3Vyc2UgdG8gZ2V0IHJlc3Qgb2YgbmFtZSBkb25lIGZpcnN0LiAqLworCWwgPSBuc19uYW1lX21hcChubmFtZSArIG4sIG5hbWVsZW4gLSBuLCBtYXAsIG1hcHNpemUpOworCWlmIChsIDwgMCkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBUb28gbWFueSBsYWJlbHM/ICovCisJaWYgKGwgPj0gbWFwc2l6ZSkgeworCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJLyogV2UncmUgb24gb3VyIHdheSBiYWNrIHVwLXN0YWNrLCBzdG9yZSBjdXJyZW50IG1hcCBkYXRhLiAqLworCW1hcFtsXS5iYXNlID0gbm5hbWU7CisJbWFwW2xdLmxlbiA9IG47CisJcmV0dXJuIChsICsgMSk7Cit9CisKKy8qIENvdW50IHRoZSBsYWJlbHMgaW4gYSBkb21haW4gbmFtZS4gIFJvb3QgY291bnRzLCBzbyBDT00uIGhhcyB0d28uICBUaGlzCisgKiBpcyB0byBtYWtlIHRoZSByZXN1bHQgY29tcGFyYWJsZSB0byB0aGUgcmVzdWx0IG9mIG5zX25hbWVfbWFwKCkuCisgKi8KK2ludAorbnNfbmFtZV9sYWJlbHMobnNfbm5hbWVfY3Qgbm5hbWUsIHNpemVfdCBuYW1lc2l6KSB7CisJaW50IHJldCA9IDA7CisJdV9pbnQgbjsKKworCXdoaWxlIChuYW1lc2l6LS0gPiAwICYmIChuID0gKm5uYW1lKyspICE9IDApIHsKKwkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSAhPSAwKSB7CisJCQllcnJubyA9IEVJU0RJUjsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWlmIChuID4gbmFtZXNpeikgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCW5uYW1lICs9IG47CisJCW5hbWVzaXogLT0gbjsKKwkJcmV0Kys7CisJfQorCXJldHVybiAocmV0ICsgMSk7Cit9CisvKiBQcml2YXRlLiAqLworCisvKgorICoJVGhpbmtpbmcgaW4gbm9uaW50ZXJuYXRpb25hbGl6ZWQgVVNBU0NJSSAocGVyIHRoZSBETlMgc3BlYyksCisgKglpcyB0aGlzIGNoYXJhY3RlZCBzcGVjaWFsICgiaW4gbmVlZCBvZiBxdW90aW5nIikgPworICoKKyAqIHJldHVybjoKKyAqCWJvb2xlYW4uCisgKi8KK3N0YXRpYyBpbnQKK3NwZWNpYWwoaW50IGNoKSB7CisJc3dpdGNoIChjaCkgeworCWNhc2UgMHgyMjogLyogJyInICovCisJY2FzZSAweDJFOiAvKiAnLicgKi8KKwljYXNlIDB4M0I6IC8qICc7JyAqLworCWNhc2UgMHg1QzogLyogJ1xcJyAqLworCWNhc2UgMHgyODogLyogJygnICovCisJY2FzZSAweDI5OiAvKiAnKScgKi8KKwkvKiBTcGVjaWFsIG1vZGlmaWVycyBpbiB6b25lIGZpbGVzLiAqLworCWNhc2UgMHg0MDogLyogJ0AnICovCisJY2FzZSAweDI0OiAvKiAnJCcgKi8KKwkJcmV0dXJuICgxKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gKDApOworCX0KK30KKworLyoKKyAqCVRoaW5raW5nIGluIG5vbmludGVybmF0aW9uYWxpemVkIFVTQVNDSUkgKHBlciB0aGUgRE5TIHNwZWMpLAorICoJaXMgdGhpcyBjaGFyYWN0ZXIgdmlzaWJsZSBhbmQgbm90IGEgc3BhY2Ugd2hlbiBwcmludGVkID8KKyAqCisgKiByZXR1cm46CisgKglib29sZWFuLgorICovCitzdGF0aWMgaW50CitwcmludGFibGUoaW50IGNoKSB7CisJcmV0dXJuIChjaCA+IDB4MjAgJiYgY2ggPCAweDdmKTsKK30KKworLyoKKyAqCVRoaW5raW5nIGluIG5vbmludGVybmF0aW9uYWxpemVkIFVTQVNDSUkgKHBlciB0aGUgRE5TIHNwZWMpLAorICoJY29udmVydCB0aGlzIGNoYXJhY3RlciB0byBsb3dlciBjYXNlIGlmIGl0J3MgdXBwZXIgY2FzZS4KKyAqLworc3RhdGljIGludAorbWtsb3dlcihpbnQgY2gpIHsKKwlpZiAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDVBKQorCQlyZXR1cm4gKGNoICsgMHgyMCk7CisJcmV0dXJuIChjaCk7Cit9CisKKy8qCisgKglTZWFyY2ggZm9yIHRoZSBjb3VudGVkLWxhYmVsIG5hbWUgaW4gYW4gYXJyYXkgb2YgY29tcHJlc3NlZCBuYW1lcy4KKyAqCisgKiByZXR1cm46CisgKglvZmZzZXQgZnJvbSBtc2cgaWYgZm91bmQsIG9yIC0xLgorICoKKyAqIG5vdGVzOgorICoJZG5wdHJzIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBmaXJzdCBuYW1lIG9uIHRoZSBsaXN0LAorICoJbm90IHRoZSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgbWVzc2FnZS4KKyAqLworc3RhdGljIGludAorZG5fZmluZChjb25zdCB1X2NoYXIgKmRvbWFpbiwgY29uc3QgdV9jaGFyICptc2csCisJY29uc3QgdV9jaGFyICogY29uc3QgKmRucHRycywKKwljb25zdCB1X2NoYXIgKiBjb25zdCAqbGFzdGRucHRyKQoreworCWNvbnN0IHVfY2hhciAqZG4sICpjcCwgKnNwOworCWNvbnN0IHVfY2hhciAqIGNvbnN0ICpjcHA7CisJdV9pbnQgbjsKKworCWZvciAoY3BwID0gZG5wdHJzOyBjcHAgPCBsYXN0ZG5wdHI7IGNwcCsrKSB7CisJCXNwID0gKmNwcDsKKwkJLyoKKwkJICogdGVybWluYXRlIHNlYXJjaCBvbjoKKwkJICogcm9vdCBsYWJlbAorCQkgKiBjb21wcmVzc2lvbiBwb2ludGVyCisJCSAqIHVudXNhYmxlIG9mZnNldAorCQkgKi8KKwkJd2hpbGUgKCpzcCAhPSAwICYmICgqc3AgJiBOU19DTVBSU0ZMR1MpID09IDAgJiYKKwkJICAgICAgIChzcCAtIG1zZykgPCAweDQwMDApIHsKKwkJCWRuID0gZG9tYWluOworCQkJY3AgPSBzcDsKKwkJCXdoaWxlICgobiA9ICpjcCsrKSAhPSAwKSB7CisJCQkJLyoKKwkJCQkgKiBjaGVjayBmb3IgaW5kaXJlY3Rpb24KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKG4gJiBOU19DTVBSU0ZMR1MpIHsKKwkJCQljYXNlIDA6CQkvKiBub3JtYWwgY2FzZSwgbiA9PSBsZW4gKi8KKwkJCQkJbiA9IGxhYmVsbGVuKGNwIC0gMSk7IC8qIFhYWCAqLworCisJCQkJCWlmIChuICE9ICpkbisrKQorCQkJCQkJZ290byBuZXh0OworCisJCQkJCWZvciAoOyBuID4gMDsgbi0tKQorCQkJCQkJaWYgKG1rbG93ZXIoKmRuKyspICE9CisJCQkJCQkgICAgbWtsb3dlcigqY3ArKykpCisJCQkJCQkJZ290byBuZXh0OworCQkJCQkvKiBJcyBuZXh0IHJvb3QgZm9yIGJvdGggPyAqLworCQkJCQlpZiAoKmRuID09ICdcMCcgJiYgKmNwID09ICdcMCcpIHsKKwkJCQkJCV9ESUFHQVNTRVJUKF9fdHlwZV9maXQoaW50LAorCQkJCQkJICAgIHNwIC0gbXNnKSk7CisJCQkJCQlyZXR1cm4gKGludCkoc3AgLSBtc2cpOworCQkJCQl9CisJCQkJCWlmICgqZG4pCisJCQkJCQljb250aW51ZTsKKwkJCQkJZ290byBuZXh0OworCQkJCWNhc2UgTlNfQ01QUlNGTEdTOgkvKiBpbmRpcmVjdGlvbiAqLworCQkJCQljcCA9IG1zZyArICgoKG4gJiAweDNmKSA8PCA4KSB8ICpjcCk7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoJLyogaWxsZWdhbCB0eXBlICovCisJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCX0KKyBuZXh0OiA7CisJCQlzcCArPSAqc3AgKyAxOworCQl9CisJfQorCWVycm5vID0gRU5PRU5UOworCXJldHVybiAoLTEpOworfQorCitzdGF0aWMgaW50CitkZWNvZGVfYml0c3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKipjcHAsIGNoYXIgKmRuLCBjb25zdCBjaGFyICplb20pCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSAqY3BwOworCWNoYXIgKmJlZyA9IGRuLCB0YzsKKwlpbnQgYiwgYmxlbiwgcGxlbiwgaTsKKworCWlmICgoYmxlbiA9ICgqY3AgJiAweGZmKSkgPT0gMCkKKwkJYmxlbiA9IDI1NjsKKwlwbGVuID0gKGJsZW4gKyAzKSAvIDQ7CisJcGxlbiArPSAoaW50KXNpemVvZigiXFxbeC9dIikgKyAoYmxlbiA+IDk5ID8gMyA6IChibGVuID4gOSkgPyAyIDogMSk7CisJaWYgKGRuICsgcGxlbiA+PSBlb20pCisJCXJldHVybigtMSk7CisKKwljcCsrOworCWkgPSBTUFJJTlRGKChkbiwgIlxcW3giKSk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKwlkbiArPSBpOworCWZvciAoYiA9IGJsZW47IGIgPiA3OyBiIC09IDgsIGNwKyspIHsKKwkJaSA9IFNQUklOVEYoKGRuLCAiJTAyeCIsICpjcCAmIDB4ZmYpKTsKKwkJaWYgKGkgPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWRuICs9IGk7CisJfQorCWlmIChiID4gNCkgeworCQl0YyA9ICpjcCsrOworCQlpID0gU1BSSU5URigoZG4sICIlMDJ4IiwgdGMgJiAoMHhmZiA8PCAoOCAtIGIpKSkpOworCQlpZiAoaSA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJZG4gKz0gaTsKKwl9IGVsc2UgaWYgKGIgPiAwKSB7CisJCXRjID0gKmNwKys7CisJCWkgPSBTUFJJTlRGKChkbiwgIiUxeCIsCisJCQkgICAgICAgKCgodV9pbnQzMl90KXRjID4+IDQpICYgMHgwZikgJiAoMHgwZiA8PCAoNCAtIGIpKSkpOworCQlpZiAoaSA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJZG4gKz0gaTsKKwl9CisJaSA9IFNQUklOVEYoKGRuLCAiLyVkXSIsIGJsZW4pKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiAoLTEpOworCWRuICs9IGk7CisKKwkqY3BwID0gY3A7CisJX0RJQUdBU1NFUlQoX190eXBlX2ZpdChpbnQsIGRuIC0gYmVnKSk7CisJcmV0dXJuIChpbnQpKGRuIC0gYmVnKTsKK30KKworc3RhdGljIGludAorZW5jb2RlX2JpdHNyaW5nKGNvbnN0IGNoYXIgKipicCwgY29uc3QgY2hhciAqZW5kLCB1bnNpZ25lZCBjaGFyICoqbGFiZWxwLAorCSAgICAgICAgdW5zaWduZWQgY2hhciAqKiBkc3QsIHVuc2lnbmVkIGNvbnN0IGNoYXIgKmVvbSkKK3sKKwlpbnQgYWZ0ZXJzbGFzaCA9IDA7CisJY29uc3QgY2hhciAqY3AgPSAqYnA7CisJdW5zaWduZWQgY2hhciAqdHA7CisJY2hhciBjOworCWNvbnN0IGNoYXIgKmJlZ19ibGVuOworCWNoYXIgKmVuZF9ibGVuID0gTlVMTDsKKwlpbnQgdmFsdWUgPSAwLCBjb3VudCA9IDAsIHRiY291bnQgPSAwLCBibGVuID0gMDsKKworCWJlZ19ibGVuID0gZW5kX2JsZW4gPSBOVUxMOworCisJLyogYSBiaXRzdHJpbmcgbXVzdCBjb250YWluIGF0IGxlYXN0IDIgY2hhcmFjdGVycyAqLworCWlmIChlbmQgLSBjcCA8IDIpCisJCXJldHVybihFSU5WQUwpOworCisJLyogWFhYOiBjdXJyZW50bHksIG9ubHkgaGV4IHN0cmluZ3MgYXJlIHN1cHBvcnRlZCAqLworCWlmICgqY3ArKyAhPSAneCcpCisJCXJldHVybihFSU5WQUwpOworCWlmICghaXN4ZGlnaXQoKCpjcCkgJiAweGZmKSkgLyogcmVqZWN0ICdcW3gvQkxFTl0nICovCisJCXJldHVybihFSU5WQUwpOworCisJZm9yICh0cCA9ICpkc3QgKyAxOyBjcCA8IGVuZCAmJiB0cCA8IGVvbTsgY3ArKykgeworCQlzd2l0Y2goKGMgPSAqY3ApKSB7CisJCWNhc2UgJ10nOgkvKiBlbmQgb2YgdGhlIGJpdHN0cmluZyAqLworCQkJaWYgKGFmdGVyc2xhc2gpIHsKKwkJCQlpZiAoYmVnX2JsZW4gPT0gTlVMTCkKKwkJCQkJcmV0dXJuKEVJTlZBTCk7CisJCQkJYmxlbiA9IChpbnQpc3RydG9sKGJlZ19ibGVuLCAmZW5kX2JsZW4sIDEwKTsKKwkJCQlpZiAoKmVuZF9ibGVuICE9ICddJykKKwkJCQkJcmV0dXJuKEVJTlZBTCk7CisJCQl9CisJCQlpZiAoY291bnQpCisJCQkJKnRwKysgPSAoKHZhbHVlIDw8IDQpICYgMHhmZik7CisJCQljcCsrOwkvKiBza2lwICddJyAqLworCQkJZ290byBkb25lOworCQljYXNlICcvJzoKKwkJCWFmdGVyc2xhc2ggPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAoYWZ0ZXJzbGFzaCkgeworCQkJCWlmICghaXNkaWdpdChjJjB4ZmYpKQorCQkJCQlyZXR1cm4oRUlOVkFMKTsKKwkJCQlpZiAoYmVnX2JsZW4gPT0gTlVMTCkgeworCisJCQkJCWlmIChjID09ICcwJykgeworCQkJCQkJLyogYmxlbiBuZXZlciBiZWdpbmdzIHdpdGggMCAqLworCQkJCQkJcmV0dXJuKEVJTlZBTCk7CisJCQkJCX0KKwkJCQkJYmVnX2JsZW4gPSBjcDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmICghaXN4ZGlnaXQoYyYweGZmKSkKKwkJCQkJcmV0dXJuKEVJTlZBTCk7CisJCQkJdmFsdWUgPDw9IDQ7CisJCQkJdmFsdWUgKz0gZGlnaXR2YWx1ZVsoaW50KWNdOworCQkJCWNvdW50ICs9IDQ7CisJCQkJdGJjb3VudCArPSA0OworCQkJCWlmICh0YmNvdW50ID4gMjU2KQorCQkJCQlyZXR1cm4oRUlOVkFMKTsKKwkJCQlpZiAoY291bnQgPT0gOCkgeworCQkJCQkqdHArKyA9IHZhbHVlOworCQkJCQljb3VudCA9IDA7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisgIGRvbmU6CisJaWYgKGNwID49IGVuZCB8fCB0cCA+PSBlb20pCisJCXJldHVybihFTVNHU0laRSk7CisKKwkvKgorCSAqIGJpdCBsZW5ndGggdmFsaWRhdGlvbjoKKwkgKiBJZiBhIDxsZW5ndGg+IGlzIHByZXNlbnQsIHRoZSBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSA8Yml0LWRhdGE+CisJICogTVVTVCBiZSBqdXN0IHN1ZmZpY2llbnQgdG8gY29udGFpbiB0aGUgbnVtYmVyIG9mIGJpdHMgc3BlY2lmaWVkCisJICogYnkgdGhlIDxsZW5ndGg+LiBJZiB0aGVyZSBhcmUgaW5zaWduaWZpY2FudCBiaXRzIGluIGEgZmluYWwKKwkgKiBoZXhhZGVjaW1hbCBvciBvY3RhbCBkaWdpdCwgdGhleSBNVVNUIGJlIHplcm8uCisJICogUkZDIDI2NzMsIFNlY3Rpb24gMy4yLgorCSAqLworCWlmIChibGVuID4gMCkgeworCQlpbnQgdHJhaWxsZW47CisKKwkJaWYgKCgoYmxlbiArIDMpICYgfjMpICE9IHRiY291bnQpCisJCQlyZXR1cm4oRUlOVkFMKTsKKwkJdHJhaWxsZW4gPSB0YmNvdW50IC0gYmxlbjsgLyogYmV0d2VlbiAwIGFuZCAzICovCisJCWlmICgoKHZhbHVlIDw8ICg4IC0gdHJhaWxsZW4pKSAmIDB4ZmYpICE9IDApCisJCQlyZXR1cm4oRUlOVkFMKTsKKwl9CisJZWxzZQorCQlibGVuID0gdGJjb3VudDsKKwlpZiAoYmxlbiA9PSAyNTYpCisJCWJsZW4gPSAwOworCisJLyogZW5jb2RlIHRoZSB0eXBlIGFuZCB0aGUgc2lnbmlmaWNhbnQgYml0IGZpZWxkcyAqLworCSoqbGFiZWxwID0gRE5TX0xBQkVMVFlQRV9CSVRTVFJJTkc7CisJKipkc3QgPSBibGVuOworCisJKmJwID0gY3A7CisJKmRzdCA9IHRwOworCisJcmV0dXJuKDApOworfQorCitzdGF0aWMgaW50CitsYWJlbGxlbihjb25zdCB1X2NoYXIgKmxwKQoreworCWludCBiaXRsZW47CisJdV9jaGFyIGwgPSAqbHA7CisKKwlpZiAoKGwgJiBOU19DTVBSU0ZMR1MpID09IE5TX0NNUFJTRkxHUykgeworCQkvKiBzaG91bGQgYmUgYXZvaWRlZCBieSB0aGUgY2FsbGVyICovCisJCXJldHVybigtMSk7CisJfQorCisJaWYgKChsICYgTlNfQ01QUlNGTEdTKSA9PSBOU19UWVBFX0VMVCkgeworCQlpZiAobCA9PSBETlNfTEFCRUxUWVBFX0JJVFNUUklORykgeworCQkJaWYgKChiaXRsZW4gPSAqKGxwICsgMSkpID09IDApCisJCQkJYml0bGVuID0gMjU2OworCQkJcmV0dXJuKChiaXRsZW4gKyA3ICkgLyA4ICsgMSk7CisJCX0KKwkJcmV0dXJuKC0xKTsJLyogdW5rbndvbiBFTFQgKi8KKwl9CisJcmV0dXJuKGwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmFtZXNlci9uc19uZXRpbnQuYyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfbmV0aW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1NDZmOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfbmV0aW50LmMKQEAgLTAsMCArMSw1OSBAQAorLyoJJE5ldEJTRDogbnNfbmV0aW50LmMsdiAxLjcgMjAxMi8wMy8xMyAyMToxMzozOSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmbmRlZiBsaW50CisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBuc19uZXRpbnQuYyx2IDEuMyAyMDA1LzA0LzI3IDA0OjU2OjQwIHNyYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IG5zX25ldGludC5jLHYgMS43IDIwMTIvMDMvMTMgMjE6MTM6MzkgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmCisKKy8qIEltcG9ydC4gKi8KKworI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorCisvKiBQdWJsaWMuICovCisKK3VpbnQxNl90Cituc19nZXQxNihjb25zdCB1X2NoYXIgKnNyYykgeworCXVpbnQxNl90IGRzdDsKKworCU5TX0dFVDE2KGRzdCwgc3JjKTsKKwlyZXR1cm4gZHN0OworfQorCit1aW50MzJfdAorbnNfZ2V0MzIoY29uc3QgdV9jaGFyICpzcmMpIHsKKwl1X2ludDMyX3QgZHN0OworCisJTlNfR0VUMzIoZHN0LCBzcmMpOworCXJldHVybiBkc3Q7Cit9CisKK3ZvaWQKK25zX3B1dDE2KHVpbnQxNl90IHNyYywgdV9jaGFyICpkc3QpIHsKKwlOU19QVVQxNihzcmMsIGRzdCk7Cit9CisKK3ZvaWQKK25zX3B1dDMyKHVpbnQzMl90IHNyYywgdV9jaGFyICpkc3QpIHsKKwlOU19QVVQzMihzcmMsIGRzdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Rucy9uYW1lc2VyL25zX3BhcnNlLmMgYi9saWJjL2Rucy9uYW1lc2VyL25zX3BhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2ZDUzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfcGFyc2UuYwpAQCAtMCwwICsxLDI3NSBAQAorLyoJJE5ldEJTRDogbnNfcGFyc2UuYyx2IDEuOSAyMDEyLzAzLzEzIDIxOjEzOjM5IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWZuZGVmIGxpbnQKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX3BhcnNlLmMsdiAxLjEwIDIwMDkvMDEvMjMgMTk6NTk6MTYgZWFjaCBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IG5zX3BhcnNlLmMsdiAxLjkgMjAxMi8wMy8xMyAyMToxMzozOSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYKKworLyogSW1wb3J0LiAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIEZvcndhcmQuICovCisKK3N0YXRpYyB2b2lkCXNldHNlY3Rpb24obnNfbXNnICptc2csIG5zX3NlY3Qgc2VjdCk7CisKKy8qIE1hY3Jvcy4gKi8KKworI2RlZmluZSBSRVRFUlIoZXJyKSBkbyB7IGVycm5vID0gKGVycik7IHJldHVybiAoLTEpOyB9IHdoaWxlICgvKk5PVFJFQUNIRUQqLy8qQ09OU1RDT05EKi8wKQorCisvKiBQdWJsaWMuICovCisKKy8qIFRoZXNlIG5lZWQgdG8gYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIG5yZXMuaDpuc19mbGFnIGVudW0uICovCitjb25zdCBzdHJ1Y3QgX25zX2ZsYWdkYXRhIF9uc19mbGFnZGF0YVsxNl0gPSB7CisJeyAweDgwMDAsIDE1IH0sCQkvKiBxci4gKi8KKwl7IDB4NzgwMCwgMTEgfSwJCS8qIG9wY29kZS4gKi8KKwl7IDB4MDQwMCwgMTAgfSwJCS8qIGFhLiAqLworCXsgMHgwMjAwLCA5IH0sCQkvKiB0Yy4gKi8KKwl7IDB4MDEwMCwgOCB9LAkJLyogcmQuICovCisJeyAweDAwODAsIDcgfSwJCS8qIHJhLiAqLworCXsgMHgwMDQwLCA2IH0sCQkvKiB6LiAqLworCXsgMHgwMDIwLCA1IH0sCQkvKiBhZC4gKi8KKwl7IDB4MDAxMCwgNCB9LAkJLyogY2QuICovCisJeyAweDAwMGYsIDAgfSwJCS8qIHJjb2RlLiAqLworCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDEvNikuICovCisJeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoMi82KS4gKi8KKwl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICgzLzYpLiAqLworCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDQvNikuICovCisJeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoNS82KS4gKi8KKwl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICg2LzYpLiAqLworfTsKKworaW50IG5zX21zZ19nZXRmbGFnKG5zX21zZyBoYW5kbGUsIGludCBmbGFnKSB7CisJcmV0dXJuKCh1X2ludDMyX3QpKChoYW5kbGUpLl9mbGFncyAmIF9uc19mbGFnZGF0YVtmbGFnXS5tYXNrKSA+PiBfbnNfZmxhZ2RhdGFbZmxhZ10uc2hpZnQpOworfQorCitpbnQKK25zX3NraXBycihjb25zdCB1X2NoYXIgKnB0ciwgY29uc3QgdV9jaGFyICplb20sIG5zX3NlY3Qgc2VjdGlvbiwgaW50IGNvdW50KSB7CisJY29uc3QgdV9jaGFyICpvcHRyID0gcHRyOworCisJZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgeworCQlpbnQgYiwgcmRsZW5ndGg7CisKKwkJYiA9IGRuX3NraXBuYW1lKHB0ciwgZW9tKTsKKwkJaWYgKGIgPCAwKQorCQkJUkVURVJSKEVNU0dTSVpFKTsKKwkJcHRyICs9IGIvKk5hbWUqLyArIE5TX0lOVDE2U1ovKlR5cGUqLyArIE5TX0lOVDE2U1ovKkNsYXNzKi87CisJCWlmIChzZWN0aW9uICE9IG5zX3NfcWQpIHsKKwkJCWlmIChwdHIgKyBOU19JTlQzMlNaICsgTlNfSU5UMTZTWiA+IGVvbSkKKwkJCQlSRVRFUlIoRU1TR1NJWkUpOworCQkJcHRyICs9IE5TX0lOVDMyU1ovKlRUTCovOworCQkJTlNfR0VUMTYocmRsZW5ndGgsIHB0cik7CisJCQlwdHIgKz0gcmRsZW5ndGgvKlJEYXRhKi87CisJCX0KKwl9CisJaWYgKHB0ciA+IGVvbSkKKwkJUkVURVJSKEVNU0dTSVpFKTsKKwlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgcHRyIC0gb3B0cikpOworCXJldHVybiAoaW50KShwdHIgLSBvcHRyKTsKK30KKworaW50Cituc19pbml0cGFyc2UoY29uc3QgdV9jaGFyICptc2csIGludCBtc2dsZW4sIG5zX21zZyAqaGFuZGxlKSB7CisJY29uc3QgdV9jaGFyICplb20gPSBtc2cgKyBtc2dsZW47CisJaW50IGk7CisKKwloYW5kbGUtPl9tc2cgPSBtc2c7CisJaGFuZGxlLT5fZW9tID0gZW9tOworCWlmIChtc2cgKyBOU19JTlQxNlNaID4gZW9tKQorCQlSRVRFUlIoRU1TR1NJWkUpOworCU5TX0dFVDE2KGhhbmRsZS0+X2lkLCBtc2cpOworCWlmIChtc2cgKyBOU19JTlQxNlNaID4gZW9tKQorCQlSRVRFUlIoRU1TR1NJWkUpOworCU5TX0dFVDE2KGhhbmRsZS0+X2ZsYWdzLCBtc2cpOworCWZvciAoaSA9IDA7IGkgPCBuc19zX21heDsgaSsrKSB7CisJCWlmIChtc2cgKyBOU19JTlQxNlNaID4gZW9tKQorCQkJUkVURVJSKEVNU0dTSVpFKTsKKwkJTlNfR0VUMTYoaGFuZGxlLT5fY291bnRzW2ldLCBtc2cpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnNfc19tYXg7IGkrKykKKwkJaWYgKGhhbmRsZS0+X2NvdW50c1tpXSA9PSAwKQorCQkJaGFuZGxlLT5fc2VjdGlvbnNbaV0gPSBOVUxMOworCQllbHNlIHsKKwkJCWludCBiID0gbnNfc2tpcHJyKG1zZywgZW9tLCAobnNfc2VjdClpLAorCQkJCQkgIGhhbmRsZS0+X2NvdW50c1tpXSk7CisKKwkJCWlmIChiIDwgMCkKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCWhhbmRsZS0+X3NlY3Rpb25zW2ldID0gbXNnOworCQkJbXNnICs9IGI7CisJCX0KKwlpZiAobXNnICE9IGVvbSkKKwkJUkVURVJSKEVNU0dTSVpFKTsKKwlzZXRzZWN0aW9uKGhhbmRsZSwgbnNfc19tYXgpOworCXJldHVybiAoMCk7Cit9CisKK2ludAorbnNfcGFyc2Vycihuc19tc2cgKmhhbmRsZSwgbnNfc2VjdCBzZWN0aW9uLCBpbnQgcnJudW0sIG5zX3JyICpycikgeworCWludCBiOworCWludCB0bXA7CisKKwkvKiBNYWtlIHNlY3Rpb24gcmlnaHQuICovCisJdG1wID0gc2VjdGlvbjsKKwlpZiAodG1wIDwgMCB8fCBzZWN0aW9uID49IG5zX3NfbWF4KQorCQlSRVRFUlIoRU5PREVWKTsKKwlpZiAoc2VjdGlvbiAhPSBoYW5kbGUtPl9zZWN0KQorCQlzZXRzZWN0aW9uKGhhbmRsZSwgc2VjdGlvbik7CisKKwkvKiBNYWtlIHJybnVtIHJpZ2h0LiAqLworCWlmIChycm51bSA9PSAtMSkKKwkJcnJudW0gPSBoYW5kbGUtPl9ycm51bTsKKwlpZiAocnJudW0gPCAwIHx8IHJybnVtID49IGhhbmRsZS0+X2NvdW50c1soaW50KXNlY3Rpb25dKQorCQlSRVRFUlIoRU5PREVWKTsKKwlpZiAocnJudW0gPCBoYW5kbGUtPl9ycm51bSkKKwkJc2V0c2VjdGlvbihoYW5kbGUsIHNlY3Rpb24pOworCWlmIChycm51bSA+IGhhbmRsZS0+X3JybnVtKSB7CisJCWIgPSBuc19za2lwcnIoaGFuZGxlLT5fbXNnX3B0ciwgaGFuZGxlLT5fZW9tLCBzZWN0aW9uLAorCQkJICAgICAgcnJudW0gLSBoYW5kbGUtPl9ycm51bSk7CisKKwkJaWYgKGIgPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWhhbmRsZS0+X21zZ19wdHIgKz0gYjsKKwkJaGFuZGxlLT5fcnJudW0gPSBycm51bTsKKwl9CisKKwkvKiBEbyB0aGUgcGFyc2UuICovCisJYiA9IGRuX2V4cGFuZChoYW5kbGUtPl9tc2csIGhhbmRsZS0+X2VvbSwKKwkJICAgICAgaGFuZGxlLT5fbXNnX3B0ciwgcnItPm5hbWUsIE5TX01BWEROQU1FKTsKKwlpZiAoYiA8IDApCisJCXJldHVybiAoLTEpOworCWhhbmRsZS0+X21zZ19wdHIgKz0gYjsKKwlpZiAoaGFuZGxlLT5fbXNnX3B0ciArIE5TX0lOVDE2U1ogKyBOU19JTlQxNlNaID4gaGFuZGxlLT5fZW9tKQorCQlSRVRFUlIoRU1TR1NJWkUpOworCU5TX0dFVDE2KHJyLT50eXBlLCBoYW5kbGUtPl9tc2dfcHRyKTsKKwlOU19HRVQxNihyci0+cnJfY2xhc3MsIGhhbmRsZS0+X21zZ19wdHIpOworCWlmIChzZWN0aW9uID09IG5zX3NfcWQpIHsKKwkJcnItPnR0bCA9IDA7CisJCXJyLT5yZGxlbmd0aCA9IDA7CisJCXJyLT5yZGF0YSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKGhhbmRsZS0+X21zZ19wdHIgKyBOU19JTlQzMlNaICsgTlNfSU5UMTZTWiA+IGhhbmRsZS0+X2VvbSkKKwkJCVJFVEVSUihFTVNHU0laRSk7CisJCU5TX0dFVDMyKHJyLT50dGwsIGhhbmRsZS0+X21zZ19wdHIpOworCQlOU19HRVQxNihyci0+cmRsZW5ndGgsIGhhbmRsZS0+X21zZ19wdHIpOworCQlpZiAoaGFuZGxlLT5fbXNnX3B0ciArIHJyLT5yZGxlbmd0aCA+IGhhbmRsZS0+X2VvbSkKKwkJCVJFVEVSUihFTVNHU0laRSk7CisJCXJyLT5yZGF0YSA9IGhhbmRsZS0+X21zZ19wdHI7CisJCWhhbmRsZS0+X21zZ19wdHIgKz0gcnItPnJkbGVuZ3RoOworCX0KKwlpZiAoKytoYW5kbGUtPl9ycm51bSA+IGhhbmRsZS0+X2NvdW50c1soaW50KXNlY3Rpb25dKQorCQlzZXRzZWN0aW9uKGhhbmRsZSwgKG5zX3NlY3QpKChpbnQpc2VjdGlvbiArIDEpKTsKKworCS8qIEFsbCBkb25lLiAqLworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIGlkZW50aWNhbCB0byB0aGUgYWJvdmUgYnV0IHVzZXMgbmV0d29yay1mb3JtYXQgKHVuY29tcHJlc3NlZCkgbmFtZXMuCisgKi8KK2ludAorbnNfcGFyc2VycjIobnNfbXNnICpoYW5kbGUsIG5zX3NlY3Qgc2VjdGlvbiwgaW50IHJybnVtLCBuc19ycjIgKnJyKSB7CisJaW50IGI7CisJaW50IHRtcDsKKworCS8qIE1ha2Ugc2VjdGlvbiByaWdodC4gKi8KKwl0bXAgPSBzZWN0aW9uOworCWlmICh0bXAgPCAwIHx8IHNlY3Rpb24gPj0gbnNfc19tYXgpCisJCVJFVEVSUihFTk9ERVYpOworCWlmIChzZWN0aW9uICE9IGhhbmRsZS0+X3NlY3QpCisJCXNldHNlY3Rpb24oaGFuZGxlLCBzZWN0aW9uKTsKKworCS8qIE1ha2UgcnJudW0gcmlnaHQuICovCisJaWYgKHJybnVtID09IC0xKQorCQlycm51bSA9IGhhbmRsZS0+X3JybnVtOworCWlmIChycm51bSA8IDAgfHwgcnJudW0gPj0gaGFuZGxlLT5fY291bnRzWyhpbnQpc2VjdGlvbl0pCisJCVJFVEVSUihFTk9ERVYpOworCWlmIChycm51bSA8IGhhbmRsZS0+X3JybnVtKQorCQlzZXRzZWN0aW9uKGhhbmRsZSwgc2VjdGlvbik7CisJaWYgKHJybnVtID4gaGFuZGxlLT5fcnJudW0pIHsKKwkJYiA9IG5zX3NraXBycihoYW5kbGUtPl9tc2dfcHRyLCBoYW5kbGUtPl9lb20sIHNlY3Rpb24sCisJCQkgICAgICBycm51bSAtIGhhbmRsZS0+X3JybnVtKTsKKworCQlpZiAoYiA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJaGFuZGxlLT5fbXNnX3B0ciArPSBiOworCQloYW5kbGUtPl9ycm51bSA9IHJybnVtOworCX0KKworCS8qIERvIHRoZSBwYXJzZS4gKi8KKwliID0gbnNfbmFtZV91bnBhY2syKGhhbmRsZS0+X21zZywgaGFuZGxlLT5fZW9tLCBoYW5kbGUtPl9tc2dfcHRyLAorCQkJICAgIHJyLT5ubmFtZSwgTlNfTUFYTk5BTUUsICZyci0+bm5hbWVsKTsKKwlpZiAoYiA8IDApCisJCXJldHVybiAoLTEpOworCWhhbmRsZS0+X21zZ19wdHIgKz0gYjsKKwlpZiAoaGFuZGxlLT5fbXNnX3B0ciArIE5TX0lOVDE2U1ogKyBOU19JTlQxNlNaID4gaGFuZGxlLT5fZW9tKQorCQlSRVRFUlIoRU1TR1NJWkUpOworCU5TX0dFVDE2KHJyLT50eXBlLCBoYW5kbGUtPl9tc2dfcHRyKTsKKwlOU19HRVQxNihyci0+cnJfY2xhc3MsIGhhbmRsZS0+X21zZ19wdHIpOworCWlmIChzZWN0aW9uID09IG5zX3NfcWQpIHsKKwkJcnItPnR0bCA9IDA7CisJCXJyLT5yZGxlbmd0aCA9IDA7CisJCXJyLT5yZGF0YSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKGhhbmRsZS0+X21zZ19wdHIgKyBOU19JTlQzMlNaICsgTlNfSU5UMTZTWiA+IGhhbmRsZS0+X2VvbSkKKwkJCVJFVEVSUihFTVNHU0laRSk7CisJCU5TX0dFVDMyKHJyLT50dGwsIGhhbmRsZS0+X21zZ19wdHIpOworCQlOU19HRVQxNihyci0+cmRsZW5ndGgsIGhhbmRsZS0+X21zZ19wdHIpOworCQlpZiAoaGFuZGxlLT5fbXNnX3B0ciArIHJyLT5yZGxlbmd0aCA+IGhhbmRsZS0+X2VvbSkKKwkJCVJFVEVSUihFTVNHU0laRSk7CisJCXJyLT5yZGF0YSA9IGhhbmRsZS0+X21zZ19wdHI7CisJCWhhbmRsZS0+X21zZ19wdHIgKz0gcnItPnJkbGVuZ3RoOworCX0KKwlpZiAoKytoYW5kbGUtPl9ycm51bSA+IGhhbmRsZS0+X2NvdW50c1soaW50KXNlY3Rpb25dKQorCQlzZXRzZWN0aW9uKGhhbmRsZSwgKG5zX3NlY3QpKChpbnQpc2VjdGlvbiArIDEpKTsKKworCS8qIEFsbCBkb25lLiAqLworCXJldHVybiAoMCk7Cit9CisKKy8qIFByaXZhdGUuICovCisKK3N0YXRpYyB2b2lkCitzZXRzZWN0aW9uKG5zX21zZyAqbXNnLCBuc19zZWN0IHNlY3QpIHsKKwltc2ctPl9zZWN0ID0gc2VjdDsKKwlpZiAoc2VjdCA9PSBuc19zX21heCkgeworCQltc2ctPl9ycm51bSA9IC0xOworCQltc2ctPl9tc2dfcHRyID0gTlVMTDsKKwl9IGVsc2UgeworCQltc2ctPl9ycm51bSA9IDA7CisJCW1zZy0+X21zZ19wdHIgPSBtc2ctPl9zZWN0aW9uc1soaW50KXNlY3RdOworCX0KK30KZGlmZiAtLWdpdCBhL2xpYmMvZG5zL25hbWVzZXIvbnNfcHJpbnQuYyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfcHJpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTZhMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvbmFtZXNlci9uc19wcmludC5jCkBAIC0wLDAgKzEsMTI2NSBAQAorLyoJJE5ldEJTRDogbnNfcHJpbnQuYyx2IDEuMTEgMjAxMi8wMy8xMyAyMToxMzozOSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmbmRlZiBsaW50CisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBuc19wcmludC5jLHYgMS4xMiAyMDA5LzAzLzAzIDA1OjI5OjU4IGVhY2ggRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBuc19wcmludC5jLHYgMS4xMSAyMDEyLzAzLzEzIDIxOjEzOjM5IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZgorCisvKiBJbXBvcnQuICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxpc2MvYXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPGlzYy9kc3QuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmZGVmIFNQUklOVEZfQ0hBUgorIyBkZWZpbmUgU1BSSU5URih4KSAoKGludClzdHJsZW4oc3ByaW50Zi8qKi94KSkKKyNlbHNlCisjIGRlZmluZSBTUFJJTlRGKHgpIChzcHJpbnRmIHgpCisjZW5kaWYKKworI2lmbmRlZiBNSU4KKyNkZWZpbmUJTUlOKHgseSkJKCh4KTwoeSk/KHgpOih5KSkKKyNlbmRpZgorCisvKiBGb3J3YXJkLiAqLworCitzdGF0aWMgc2l6ZV90CXBydW5lX29yaWdpbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpvcmlnaW4pOworc3RhdGljIGludAljaGFyc3RyKGNvbnN0IHVfY2hhciAqcmRhdGEsIGNvbnN0IHVfY2hhciAqZWRhdGEsCisJCQljaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CitzdGF0aWMgaW50CWFkZG5hbWUoY29uc3QgdV9jaGFyICptc2csIHNpemVfdCBtc2dsZW4sCisJCQljb25zdCB1X2NoYXIgKipwLCBjb25zdCBjaGFyICpvcmlnaW4sCisJCQljaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CitzdGF0aWMgdm9pZAlhZGRsZW4oc2l6ZV90IGxlbiwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOworc3RhdGljIGludAlhZGRzdHIoY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkgICAgICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOworc3RhdGljIGludAlhZGR0YWIoc2l6ZV90IGxlbiwgc2l6ZV90IHRhcmdldCwgaW50IHNwYWNlZCwKKwkJICAgICAgIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKKworLyogTWFjcm9zLiAqLworCisjZGVmaW5lCVQoeCkgXAorCWRvIHsgXAorCQlpZiAoKHgpIDwgMCkgXAorCQkJcmV0dXJuICgtMSk7IFwKKwl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworc3RhdGljIGNvbnN0IGNoYXIgYmFzZTMyaGV4W10gPQorICAgICAgICAiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVY9MDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXYiOworLyogUHVibGljLiAqLworCisvKgorICoJQ29udmVydCBhbiBSUiB0byBwcmVzZW50YXRpb24gZm9ybWF0LgorICoKKyAqIHJldHVybjoKKyAqCU51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gdG8gYnVmLCBvciAtMSAoY2hlY2sgZXJybm8pLgorICovCitpbnQKK25zX3NwcmludHJyKGNvbnN0IG5zX21zZyAqaGFuZGxlLCBjb25zdCBuc19yciAqcnIsCisJICAgIGNvbnN0IGNoYXIgKm5hbWVfY3R4LCBjb25zdCBjaGFyICpvcmlnaW4sCisJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKwlpbnQgbjsKKworCW4gPSBuc19zcHJpbnRycmYobnNfbXNnX2Jhc2UoKmhhbmRsZSksIG5zX21zZ19zaXplKCpoYW5kbGUpLAorCQkJIG5zX3JyX25hbWUoKnJyKSwgbnNfcnJfY2xhc3MoKnJyKSwgbnNfcnJfdHlwZSgqcnIpLAorCQkJIG5zX3JyX3R0bCgqcnIpLCBuc19ycl9yZGF0YSgqcnIpLCBuc19ycl9yZGxlbigqcnIpLAorCQkJIG5hbWVfY3R4LCBvcmlnaW4sIGJ1ZiwgYnVmbGVuKTsKKwlyZXR1cm4gKG4pOworfQorCisvKgorICoJQ29udmVydCB0aGUgZmllbGRzIG9mIGFuIFJSIGludG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KKyAqCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIHRvIGJ1Ziwgb3IgLTEgKGNoZWNrIGVycm5vKS4KKyAqLworaW50Cituc19zcHJpbnRycmYoY29uc3QgdV9jaGFyICptc2csIHNpemVfdCBtc2dsZW4sCisJICAgIGNvbnN0IGNoYXIgKm5hbWUsIG5zX2NsYXNzIGNsYXNzLCBuc190eXBlIHR5cGUsCisJICAgIHVfbG9uZyB0dGwsIGNvbnN0IHVfY2hhciAqcmRhdGEsIHNpemVfdCByZGxlbiwKKwkgICAgY29uc3QgY2hhciAqbmFtZV9jdHgsIGNvbnN0IGNoYXIgKm9yaWdpbiwKKwkgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworCWNvbnN0IGNoYXIgKm9idWYgPSBidWY7CisJY29uc3QgdV9jaGFyICplZGF0YSA9IHJkYXRhICsgcmRsZW47CisJaW50IHNwYWNlZCA9IDA7CisKKwljb25zdCBjaGFyICpjb21tZW50OworCWNoYXIgdG1wWzEwMF07CisJaW50IGxlbiwgeDsKKworCS8qCisJICogT3duZXIuCisJICovCisJaWYgKG5hbWVfY3R4ICE9IE5VTEwgJiYgbnNfc2FtZW5hbWUobmFtZV9jdHgsIG5hbWUpID09IDEpIHsKKwkJVChhZGRzdHIoIlx0XHRcdCIsIChzaXplX3QpMywgJmJ1ZiwgJmJ1ZmxlbikpOworCX0gZWxzZSB7CisJCWxlbiA9IChpbnQpcHJ1bmVfb3JpZ2luKG5hbWUsIG9yaWdpbik7CisJCWlmICgqbmFtZSA9PSAnXDAnKSB7CisJCQlnb3RvIHJvb3Q7CisJCX0gZWxzZSBpZiAobGVuID09IDApIHsKKwkJCVQoYWRkc3RyKCJAXHRcdFx0IiwgKHNpemVfdCk0LCAmYnVmLCAmYnVmbGVuKSk7CisJCX0gZWxzZSB7CisJCQlUKGFkZHN0cihuYW1lLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJLyogT3JpZ2luIG5vdCB1c2VkIG9yIG5vdCByb290LCBhbmQgbm8gdHJhaWxpbmcgZG90PyAqLworCQkJaWYgKCgob3JpZ2luID09IE5VTEwgfHwgb3JpZ2luWzBdID09ICdcMCcpIHx8CisJCQkgICAgKG9yaWdpblswXSAhPSAnLicgJiYgb3JpZ2luWzFdICE9ICdcMCcgJiYKKwkJCSAgICBuYW1lW2xlbl0gPT0gJ1wwJykpICYmIG5hbWVbbGVuIC0gMV0gIT0gJy4nKSB7Cisgcm9vdDoKKwkJCQlUKGFkZHN0cigiLiIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCWxlbisrOworCQkJfQorCQkJVChzcGFjZWQgPSBhZGR0YWIoKHNpemVfdClsZW4sIDI0LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKKwkJfQorCX0KKworCS8qCisJICogVFRMLCBDbGFzcywgVHlwZS4KKwkgKi8KKwlUKHggPSBuc19mb3JtYXRfdHRsKHR0bCwgYnVmLCBidWZsZW4pKTsKKwlhZGRsZW4oKHNpemVfdCl4LCAmYnVmLCAmYnVmbGVuKTsKKwlsZW4gPSBTUFJJTlRGKCh0bXAsICIgJXMgJXMiLCBwX2NsYXNzKGNsYXNzKSwgcF90eXBlKHR5cGUpKSk7CisJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpKHggKyBsZW4pLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKKworCS8qCisJICogUkRhdGEuCisJICovCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBuc190X2E6CisJCWlmIChyZGxlbiAhPSAoc2l6ZV90KU5TX0lOQUREUlNaKQorCQkJZ290byBmb3JtZXJyOworCQkodm9pZCkgaW5ldF9udG9wKEFGX0lORVQsIHJkYXRhLCBidWYsIChzb2NrbGVuX3QpYnVmbGVuKTsKKwkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIG5zX3RfY25hbWU6CisJY2FzZSBuc190X21iOgorCWNhc2UgbnNfdF9tZzoKKwljYXNlIG5zX3RfbXI6CisJY2FzZSBuc190X25zOgorCWNhc2UgbnNfdF9wdHI6CisJY2FzZSBuc190X2RuYW1lOgorCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCWJyZWFrOworCisJY2FzZSBuc190X2hpbmZvOgorCWNhc2UgbnNfdF9pc2RuOgorCQkvKiBGaXJzdCB3b3JkLiAqLworCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChsZW4gPT0gMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJcmRhdGEgKz0gbGVuOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisKKwkJLyogU2Vjb25kIHdvcmQsIG9wdGlvbmFsIGluIElTRE4gcmVjb3Jkcy4gKi8KKwkJaWYgKHR5cGUgPT0gbnNfdF9pc2RuICYmIHJkYXRhID09IGVkYXRhKQorCQkJYnJlYWs7CisKKwkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlpZiAobGVuID09IDApCisJCQlnb3RvIGZvcm1lcnI7CisJCXJkYXRhICs9IGxlbjsKKwkJYnJlYWs7CisKKwljYXNlIG5zX3Rfc29hOiB7CisJCXVfbG9uZyB0OworCisJCS8qIFNlcnZlciBuYW1lLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogQWRtaW5pc3RyYXRvciBuYW1lLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCIgKFxuIiwgKHNpemVfdCkzLCAmYnVmLCAmYnVmbGVuKSk7CisJCXNwYWNlZCA9IDA7CisKKwkJaWYgKChlZGF0YSAtIHJkYXRhKSAhPSA1Kk5TX0lOVDMyU1opCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogU2VyaWFsIG51bWJlci4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVsdSIsIHQpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCI7IHNlcmlhbFxuIiwgKHNpemVfdCk5LCAmYnVmLCAmYnVmbGVuKSk7CisJCXNwYWNlZCA9IDA7CisKKwkJLyogUmVmcmVzaCBpbnRlcnZhbC4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7CisJCVQobGVuID0gbnNfZm9ybWF0X3R0bCh0LCBidWYsIGJ1ZmxlbikpOworCQlhZGRsZW4oKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pOworCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCI7IHJlZnJlc2hcbiIsIChzaXplX3QpMTAsICZidWYsICZidWZsZW4pKTsKKwkJc3BhY2VkID0gMDsKKworCQkvKiBSZXRyeSBpbnRlcnZhbC4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7CisJCVQobGVuID0gbnNfZm9ybWF0X3R0bCh0LCBidWYsIGJ1ZmxlbikpOworCQlhZGRsZW4oKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pOworCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCI7IHJldHJ5XG4iLCAoc2l6ZV90KTgsICZidWYsICZidWZsZW4pKTsKKwkJc3BhY2VkID0gMDsKKworCQkvKiBFeHBpcnkuICovCisJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOworCQlUKGFkZHN0cigiXHRcdFx0XHRcdCIsIChzaXplX3QpNSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGxlbiA9IG5zX2Zvcm1hdF90dGwodCwgYnVmLCBidWZsZW4pKTsKKwkJYWRkbGVuKChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKTsKKwkJVChzcGFjZWQgPSBhZGR0YWIoKHNpemVfdClsZW4sIChzaXplX3QpMTYsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGFkZHN0cigiOyBleHBpcnlcbiIsIChzaXplX3QpOSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlzcGFjZWQgPSAwOworCisJCS8qIE1pbmltdW0gVFRMLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKKwkJVChsZW4gPSBuc19mb3JtYXRfdHRsKHQsIGJ1ZiwgYnVmbGVuKSk7CisJCWFkZGxlbigoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1Zmxlbik7CisJCVQoYWRkc3RyKCIgKSIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCI7IG1pbmltdW1cbiIsIChzaXplX3QpMTAsICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X214OgorCWNhc2UgbnNfdF9hZnNkYjoKKwljYXNlIG5zX3RfcnQ6CisJY2FzZSBuc190X2t4OiB7CisJCXVfaW50IHQ7CisKKwkJaWYgKHJkbGVuIDwgKHNpemVfdClOU19JTlQxNlNaKQorCQkJZ290byBmb3JtZXJyOworCisJCS8qIFByaW9yaXR5LiAqLworCQl0ID0gbnNfZ2V0MTYocmRhdGEpOworCQlyZGF0YSArPSBOU19JTlQxNlNaOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCB0KSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBUYXJnZXQuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X3B4OiB7CisJCXVfaW50IHQ7CisKKwkJaWYgKHJkbGVuIDwgKHNpemVfdClOU19JTlQxNlNaKQorCQkJZ290byBmb3JtZXJyOworCisJCS8qIFByaW9yaXR5LiAqLworCQl0ID0gbnNfZ2V0MTYocmRhdGEpOworCQlyZGF0YSArPSBOU19JTlQxNlNaOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCB0KSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBOYW1lMS4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIE5hbWUyLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF94MjU6CisJCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJZ290byBmb3JtZXJyOworCQlyZGF0YSArPSBsZW47CisJCWJyZWFrOworCisJY2FzZSBuc190X3R4dDoKKwljYXNlIG5zX3Rfc3BmOgorCQl3aGlsZSAocmRhdGEgPCBlZGF0YSkgeworCQkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJaWYgKGxlbiA9PSAwKQorCQkJCWdvdG8gZm9ybWVycjsKKwkJCXJkYXRhICs9IGxlbjsKKwkJCWlmIChyZGF0YSA8IGVkYXRhKQorCQkJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIG5zX3RfbnNhcDogeworCQljaGFyIHRbMisyNTUqM107CisKKwkJKHZvaWQpIGluZXRfbnNhcF9udG9hKChpbnQpcmRsZW4sIHJkYXRhLCB0KTsKKwkJVChhZGRzdHIodCwgc3RybGVuKHQpLCAmYnVmLCAmYnVmbGVuKSk7CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfYWFhYToKKwkJaWYgKHJkbGVuICE9IChzaXplX3QpTlNfSU42QUREUlNaKQorCQkJZ290byBmb3JtZXJyOworCQkodm9pZCkgaW5ldF9udG9wKEFGX0lORVQ2LCByZGF0YSwgYnVmLCAoc29ja2xlbl90KWJ1Zmxlbik7CisJCWFkZGxlbihzdHJsZW4oYnVmKSwgJmJ1ZiwgJmJ1Zmxlbik7CisJCWJyZWFrOworCisJY2FzZSBuc190X2xvYzogeworCQljaGFyIHRbMjU1XTsKKworCQkvKiBYWFggcHJvdG9jb2wgZm9ybWF0IGNoZWNraW5nPyAqLworCQkodm9pZCkgbG9jX250b2EocmRhdGEsIHQpOworCQlUKGFkZHN0cih0LCBzdHJsZW4odCksICZidWYsICZidWZsZW4pKTsKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9uYXB0cjogeworCQl1X2ludCBvcmRlciwgcHJlZmVyZW5jZTsKKwkJY2hhciB0WzUwXTsKKworCQlpZiAocmRsZW4gPCAyVSpOU19JTlQxNlNaKQorCQkJZ290byBmb3JtZXJyOworCisJCS8qIE9yZGVyLCBQcmVjZWRlbmNlLiAqLworCQlvcmRlciA9IG5zX2dldDE2KHJkYXRhKTsJcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJcHJlZmVyZW5jZSA9IG5zX2dldDE2KHJkYXRhKTsJcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJbGVuID0gU1BSSU5URigodCwgIiV1ICV1ICIsIG9yZGVyLCBwcmVmZXJlbmNlKSk7CisJCVQoYWRkc3RyKHQsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogRmxhZ3MuICovCisJCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJZ290byBmb3JtZXJyOworCQlyZGF0YSArPSBsZW47CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogU2VydmljZS4gKi8KKwkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlpZiAobGVuID09IDApCisJCQlnb3RvIGZvcm1lcnI7CisJCXJkYXRhICs9IGxlbjsKKwkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKworCQkvKiBSZWdleHAuICovCisJCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKKwkJaWYgKGxlbiA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJZ290byBmb3JtZXJyOworCQlyZGF0YSArPSBsZW47CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogU2VydmVyLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3Rfc3J2OiB7CisJCXVfaW50IHByaW9yaXR5LCB3ZWlnaHQsIHBvcnQ7CisJCWNoYXIgdFs1MF07CisKKwkJaWYgKHJkbGVuIDwgM1UqTlNfSU5UMTZTWikKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBQcmlvcml0eSwgV2VpZ2h0LCBQb3J0LiAqLworCQlwcmlvcml0eSA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCXdlaWdodCAgID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJcG9ydCAgICAgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQlsZW4gPSBTUFJJTlRGKCh0LCAiJXUgJXUgJXUgIiwgcHJpb3JpdHksIHdlaWdodCwgcG9ydCkpOworCQlUKGFkZHN0cih0LCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFNlcnZlci4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X21pbmZvOgorCWNhc2UgbnNfdF9ycDoKKwkJLyogTmFtZTEuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKworCQkvKiBOYW1lMi4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCWJyZWFrOworCisJY2FzZSBuc190X3drczogeworCQlpbnQgbiwgbGNudDsKKworCQlpZiAocmRsZW4gPCAxVSArIE5TX0lOVDMyU1opCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogQWRkcmVzcy4gKi8KKwkJKHZvaWQpIGluZXRfbnRvcChBRl9JTkVULCByZGF0YSwgYnVmLCAoc29ja2xlbl90KWJ1Zmxlbik7CisJCWFkZGxlbihzdHJsZW4oYnVmKSwgJmJ1ZiwgJmJ1Zmxlbik7CisJCXJkYXRhICs9IE5TX0lOQUREUlNaOworCisJCS8qIFByb3RvY29sLiAqLworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIgJXUgKCAiLCAqcmRhdGEpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlyZGF0YSArPSBOU19JTlQ4U1o7CisKKwkJLyogQml0IG1hcC4gKi8KKwkJbiA9IDA7CisJCWxjbnQgPSAwOworCQl3aGlsZSAocmRhdGEgPCBlZGF0YSkgeworCQkJdV9pbnQgYyA9ICpyZGF0YSsrOworCQkJZG8geworCQkJCWlmIChjICYgMDIwMCkgeworCQkJCQlpZiAobGNudCA9PSAwKSB7CisJCQkJCQlUKGFkZHN0cigiXG5cdFx0XHRcdCIsIChzaXplX3QpNSwKKwkJCQkJCQkgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCQkJbGNudCA9IDEwOworCQkJCQkJc3BhY2VkID0gMDsKKwkJCQkJfQorCQkJCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlZCAiLCBuKSk7CisJCQkJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJCQkJbGNudC0tOworCQkJCX0KKwkJCQljIDw8PSAxOworCQkJfSB3aGlsZSAoKytuICYgMDcpOworCQl9CisJCVQoYWRkc3RyKCIpIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9rZXk6CisJY2FzZSBuc190X2Ruc2tleTogeworCQljaGFyIGJhc2U2NF9rZXlbTlNfTUQ1UlNBX01BWF9CQVNFNjRdOworCQl1X2ludCBrZXlmbGFncywgcHJvdG9jb2wsIGFsZ29yaXRobSwga2V5X2lkOworCQljb25zdCBjaGFyICpsZWFkZXI7CisJCWludCBuOworCisJCWlmIChyZGxlbiA8IDBVICsgTlNfSU5UMTZTWiArIE5TX0lOVDhTWiArIE5TX0lOVDhTWikKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBLZXkgZmxhZ3MsIFByb3RvY29sLCBBbGdvcml0aG0uICovCisjaWZuZGVmIF9MSUJDCisJCWtleV9pZCA9IGRzdF9zX2Ruc19rZXlfaWQocmRhdGEsIGVkYXRhLXJkYXRhKTsKKyNlbHNlCisJCWtleV9pZCA9IDA7CisjZW5kaWYKKwkJa2V5ZmxhZ3MgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQlwcm90b2NvbCA9ICpyZGF0YSsrOworCQlhbGdvcml0aG0gPSAqcmRhdGErKzsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiMHglMDR4ICV1ICV1IiwKKwkJCSAgICAgICBrZXlmbGFncywgcHJvdG9jb2wsIGFsZ29yaXRobSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogUHVibGljIGtleSBkYXRhLiAqLworCQlsZW4gPSBiNjRfbnRvcChyZGF0YSwgKHNpemVfdCkoZWRhdGEgLSByZGF0YSksCisJCQkgICAgICAgYmFzZTY0X2tleSwgc2l6ZW9mIGJhc2U2NF9rZXkpOworCQlpZiAobGVuIDwgMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJaWYgKGxlbiA+IDE1KSB7CisJCQlUKGFkZHN0cigiICgiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKKwkJCWxlYWRlciA9ICJcblx0XHQiOworCQkJc3BhY2VkID0gMDsKKwkJfSBlbHNlCisJCQlsZWFkZXIgPSAiICI7CisJCWZvciAobiA9IDA7IG4gPCBsZW47IG4gKz0gNDgpIHsKKwkJCVQoYWRkc3RyKGxlYWRlciwgc3RybGVuKGxlYWRlciksICZidWYsICZidWZsZW4pKTsKKwkJCVQoYWRkc3RyKGJhc2U2NF9rZXkgKyBuLCAoc2l6ZV90KU1JTihsZW4gLSBuLCA0OCksCisJCQkJICZidWYsICZidWZsZW4pKTsKKwkJfQorCQlpZiAobGVuID4gMTUpCisJCQlUKGFkZHN0cigiICkiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKKwkJbiA9IFNQUklOVEYoKHRtcCwgIiA7IGtleV90YWc9ICV1Iiwga2V5X2lkKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdCluLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9zaWc6CisJY2FzZSBuc190X3Jyc2lnOiB7CisJCWNoYXIgYmFzZTY0X2tleVtOU19NRDVSU0FfTUFYX0JBU0U2NF07CisJCXVfaW50IHR5cCwgYWxnb3JpdGhtLCBsYWJlbHMsIGZvb3RwcmludDsKKwkJY29uc3QgY2hhciAqbGVhZGVyOworCQl1X2xvbmcgdDsKKwkJaW50IG47CisKKwkJaWYgKHJkbGVuIDwgMjJVKQorCQkJZ290byBmb3JtZXJyOworCisJCS8qIFR5cGUgY292ZXJlZCwgQWxnb3JpdGhtLCBMYWJlbCBjb3VudCwgT3JpZ2luYWwgVFRMLiAqLworCSAgICAgICAgdHlwID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJYWxnb3JpdGhtID0gKnJkYXRhKys7CisJCWxhYmVscyA9ICpyZGF0YSsrOworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgJWQgJWQgJWx1ICIsCisJCQkgICAgICAgcF90eXBlKChpbnQpdHlwKSwgYWxnb3JpdGhtLCBsYWJlbHMsIHQpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlpZiAobGFiZWxzID4gKHVfaW50KWRuX2NvdW50X2xhYmVscyhuYW1lKSkKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBTaWduYXR1cmUgZXhwaXJ5LiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBUaW1lIHNpZ25lZC4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogU2lnbmF0dXJlIEZvb3RwcmludC4gKi8KKwkJZm9vdHByaW50ID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgZm9vdHByaW50KSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBTaWduZXIncyBuYW1lLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogU2lnbmF0dXJlLiAqLworCQlsZW4gPSBiNjRfbnRvcChyZGF0YSwgKHNpemVfdCkoZWRhdGEgLSByZGF0YSksCisJCQkgICAgICAgYmFzZTY0X2tleSwgc2l6ZW9mIGJhc2U2NF9rZXkpOworCQlpZiAobGVuID4gMTUpIHsKKwkJCVQoYWRkc3RyKCIgKCIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJbGVhZGVyID0gIlxuXHRcdCI7CisJCQlzcGFjZWQgPSAwOworCQl9IGVsc2UKKwkJCWxlYWRlciA9ICIgIjsKKwkJaWYgKGxlbiA8IDApCisJCQlnb3RvIGZvcm1lcnI7CisJCWZvciAobiA9IDA7IG4gPCBsZW47IG4gKz0gNDgpIHsKKwkJCVQoYWRkc3RyKGxlYWRlciwgc3RybGVuKGxlYWRlciksICZidWYsICZidWZsZW4pKTsKKwkJCVQoYWRkc3RyKGJhc2U2NF9rZXkgKyBuLCAoc2l6ZV90KU1JTihsZW4gLSBuLCA0OCksCisJCQkJICZidWYsICZidWZsZW4pKTsKKwkJfQorCQlpZiAobGVuID4gMTUpCisJCQlUKGFkZHN0cigiICkiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9ueHQ6IHsKKwkJcHRyZGlmZl90IG4sIGM7CisKKwkJLyogTmV4dCBkb21haW4gbmFtZS4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFR5cGUgYml0IG1hcC4gKi8KKwkJbiA9IGVkYXRhIC0gcmRhdGE7CisJCWZvciAoYyA9IDA7IGMgPCBuKjg7IGMrKykKKwkJCWlmIChOU19OWFRfQklUX0lTU0VUKGMsIHJkYXRhKSkgeworCQkJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiAlcyIsIHBfdHlwZSgoaW50KWMpKSk7CisJCQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJfQorCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X2NlcnQ6IHsKKwkJdV9pbnQgY190eXBlLCBrZXlfdGFnLCBhbGc7CisJCWludCBuOworCQlzaXplX3Qgc2l6OworCQljaGFyIGJhc2U2NF9jZXJ0WzgxOTJdLCB0bXAxWzQwXTsKKwkJY29uc3QgY2hhciAqbGVhZGVyOworCisJCWNfdHlwZSAgPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWtleV90YWcgPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWFsZyA9ICh1X2ludCkgKnJkYXRhKys7CisKKwkJbGVuID0gU1BSSU5URigodG1wMSwgIiVkICVkICVkICIsIGNfdHlwZSwga2V5X3RhZywgYWxnKSk7CisJCVQoYWRkc3RyKHRtcDEsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCXNpeiA9IChlZGF0YS1yZGF0YSkqNC8zICsgNDsgLyogIis0IiBhY2NvdW50cyBmb3IgdHJhaWxpbmcgXDAgKi8KKwkJaWYgKHNpeiA+IHNpemVvZihiYXNlNjRfY2VydCkgKiAzLzQpIHsKKwkJCWNvbnN0IGNoYXIgKnN0ciA9ICJyZWNvcmQgdG9vIGxvbmcgdG8gcHJpbnQiOworCQkJVChhZGRzdHIoc3RyLCBzdHJsZW4oc3RyKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJCWVsc2UgeworCQkJbGVuID0gYjY0X250b3AocmRhdGEsIChzaXplX3QpKGVkYXRhLXJkYXRhKSwKKwkJCSAgICBiYXNlNjRfY2VydCwgc2l6KTsKKworCQkJaWYgKGxlbiA8IDApCisJCQkJZ290byBmb3JtZXJyOworCQkJZWxzZSBpZiAobGVuID4gMTUpIHsKKwkJCQlUKGFkZHN0cigiICgiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKKwkJCQlsZWFkZXIgPSAiXG5cdFx0IjsKKwkJCQlzcGFjZWQgPSAwOworCQkJfQorCQkJZWxzZQorCQkJCWxlYWRlciA9ICIgIjsKKworCQkJZm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSA0OCkgeworCQkJCVQoYWRkc3RyKGxlYWRlciwgc3RybGVuKGxlYWRlciksCisJCQkJCSAmYnVmLCAmYnVmbGVuKSk7CisJCQkJVChhZGRzdHIoYmFzZTY0X2NlcnQgKyBuLCAoc2l6ZV90KU1JTihsZW4gLSBuLCA0OCksCisJCQkJCSAmYnVmLCAmYnVmbGVuKSk7CisJCQl9CisJCQlpZiAobGVuID4gMTUpCisJCQkJVChhZGRzdHIoIiApIiwgKHNpemVfdCkyLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF90a2V5OiB7CisJCS8qIEtKRCAtIG5lZWQgdG8gY29tcGxldGUgdGhpcyAqLworCQl1X2xvbmcgdDsKKwkJaW50IG1vZGUsIGVyciwga2V5c2l6ZTsKKworCQkvKiBBbGdvcml0aG0gbmFtZS4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIEluY2VwdGlvbi4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogRXhwZXJhdGlvbi4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogTW9kZSAsIEVycm9yLCBLZXkgU2l6ZS4gKi8KKwkJLyogUHJpb3JpdHksIFdlaWdodCwgUG9ydC4gKi8KKwkJbW9kZSA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWVyciAgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQlrZXlzaXplICA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICV1ICV1ICIsIG1vZGUsIGVyciwga2V5c2l6ZSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogWFhYIG5lZWQgdG8gZHVtcCBrZXksIHByaW50IG90aGVyZGF0YSBsZW5ndGggJiBvdGhlciBkYXRhICovCisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfdHNpZzogeworCQkvKiBCRVcgLSBuZWVkIHRvIGNvbXBsZXRlIHRoaXMgKi8KKwkJaW50IG47CisKKwkJVChsZW4gPSBhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlyZGF0YSArPSA4OyAvKiB0aW1lICovCisJCW4gPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IElOVDE2U1o7CisJCXJkYXRhICs9IG47IC8qIHNpZyAqLworCQluID0gbnNfZ2V0MTYocmRhdGEpOyByZGF0YSArPSBJTlQxNlNaOyAvKiBvcmlnaW5hbCBpZCAqLworCQlzcHJpbnRmKGJ1ZiwgIiVkIiwgbnNfZ2V0MTYocmRhdGEpKTsKKwkJcmRhdGEgKz0gSU5UMTZTWjsKKwkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9hNjogeworCQlzdHJ1Y3QgaW42X2FkZHIgYTsKKwkJaW50IHBieXRlLCBwYml0OworCisJCS8qIHByZWZpeCBsZW5ndGggKi8KKwkJaWYgKHJkbGVuID09IDBVKSBnb3RvIGZvcm1lcnI7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVkICIsICpyZGF0YSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCXBiaXQgPSAqcmRhdGE7CisJCWlmIChwYml0ID4gMTI4KSBnb3RvIGZvcm1lcnI7CisJCXBieXRlID0gKHBiaXQgJiB+NykgLyA4OworCQlyZGF0YSsrOworCisJCS8qIGFkZHJlc3Mgc3VmZml4OiBwcm92aWRlZCBvbmx5IHdoZW4gcHJlZml4IGxlbiAhPSAxMjggKi8KKwkJaWYgKHBiaXQgPCAxMjgpIHsKKwkJCWlmIChyZGF0YSArIHBieXRlID49IGVkYXRhKSBnb3RvIGZvcm1lcnI7CisJCQltZW1zZXQoJmEsIDAsIHNpemVvZihhKSk7CisJCQltZW1jcHkoJmEuczZfYWRkcltwYnl0ZV0sIHJkYXRhLCBzaXplb2YoYSkgLSBwYnl0ZSk7CisJCQkodm9pZCkgaW5ldF9udG9wKEFGX0lORVQ2LCAmYSwgYnVmLCAoc29ja2xlbl90KWJ1Zmxlbik7CisJCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOworCQkJcmRhdGEgKz0gc2l6ZW9mKGEpIC0gcGJ5dGU7CisJCX0KKworCQkvKiBwcmVmaXggbmFtZTogcHJvdmlkZWQgb25seSB3aGVuIHByZWZpeCBsZW4gPiAwICovCisJCWlmIChwYml0ID09IDApCisJCQlicmVhazsKKwkJaWYgKHJkYXRhID49IGVkYXRhKSBnb3RvIGZvcm1lcnI7CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X29wdDogeworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSBieXRlcyIsIGNsYXNzKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9kczoKKwljYXNlIG5zX3RfZGx2OgorCWNhc2UgbnNfdF9zc2hmcDogeworCQl1X2ludCB0OworCisJCWlmICh0eXBlID09IG5zX3RfZHMgfHwgdHlwZSA9PSBuc190X2RsdikgeworCQkJaWYgKHJkbGVuIDwgNFUpIGdvdG8gZm9ybWVycjsKKwkJCXQgPSBuc19nZXQxNihyZGF0YSk7CisJCQlyZGF0YSArPSBOU19JTlQxNlNaOworCQkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgdCkpOworCQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9IGVsc2UKKwkJCWlmIChyZGxlbiA8IDJVKSBnb3RvIGZvcm1lcnI7CisKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgKnJkYXRhKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJcmRhdGErKzsKKworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCAqcmRhdGEpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlyZGF0YSsrOworCisJCXdoaWxlIChyZGF0YSA8IGVkYXRhKSB7CisJCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlMDJYIiwgKnJkYXRhKSk7CisJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCQlyZGF0YSsrOworCQl9CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfbnNlYzM6CisJY2FzZSBuc190X25zZWMzcGFyYW06IHsKKwkJdV9pbnQgdCwgdywgbCwgaiwgaywgYzsKKworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCAqcmRhdGEpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlyZGF0YSsrOworCisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsICpyZGF0YSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCXJkYXRhKys7CisKKwkJdCA9IG5zX2dldDE2KHJkYXRhKTsKKwkJcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgdCkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJdCA9ICpyZGF0YSsrOworCQlpZiAodCA9PSAwKSB7CisJCQlUKGFkZHN0cigiLSIsIDEsICZidWYsICZidWZsZW4pKTsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlICh0LS0gPiAwKSB7CisJCQkJbGVuID0gU1BSSU5URigodG1wLCAiJTAyWCIsICpyZGF0YSkpOworCQkJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJCQlyZGF0YSsrOworCQkJfQorCQl9CisJCWlmICh0eXBlID09IG5zX3RfbnNlYzNwYXJhbSkKKwkJCWJyZWFrOworCQlUKGFkZHN0cigiICIsIDEsICZidWYsICZidWZsZW4pKTsKKworCQl0ID0gKnJkYXRhKys7CisJCXdoaWxlICh0ID4gMCkgeworCQkJc3dpdGNoICh0KSB7CisJCQljYXNlIDE6CisJCQkJdG1wWzBdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzBdPj4zKSYweDFmKV07CisJCQkJdG1wWzFdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzBdPDwyKSYweDFjKV07CisJCQkJdG1wWzJdID0gdG1wWzNdID0gdG1wWzRdID0gJz0nOworCQkJCXRtcFs1XSA9IHRtcFs2XSA9IHRtcFs3XSA9ICc9JzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQl0bXBbMF0gPSBiYXNlMzJoZXhbKCgodWludDMyX3QpcmRhdGFbMF0+PjMpJjB4MWYpXTsKKwkJCQl0bXBbMV0gPSBiYXNlMzJoZXhbKCgodWludDMyX3QpcmRhdGFbMF08PDIpJjB4MWMpfAorCQkJCQkJICAgKCgodWludDMyX3QpcmRhdGFbMV0+PjYpJjB4MDMpXTsKKwkJCQl0bXBbMl0gPSBiYXNlMzJoZXhbKCgodWludDMyX3QpcmRhdGFbMV0+PjEpJjB4MWYpXTsKKwkJCQl0bXBbM10gPSBiYXNlMzJoZXhbKCgodWludDMyX3QpcmRhdGFbMV08PDQpJjB4MTApXTsKKwkJCQl0bXBbNF0gPSB0bXBbNV0gPSB0bXBbNl0gPSB0bXBbN10gPSAnPSc7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJdG1wWzBdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzBdPj4zKSYweDFmKV07CisJCQkJdG1wWzFdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzBdPDwyKSYweDFjKXwKKwkJCQkJCSAgICgoKHVpbnQzMl90KXJkYXRhWzFdPj42KSYweDAzKV07CisJCQkJdG1wWzJdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzFdPj4xKSYweDFmKV07CisJCQkJdG1wWzNdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzFdPDw0KSYweDEwKXwKKwkJCQkJCSAgICgoKHVpbnQzMl90KXJkYXRhWzJdPj40KSYweDBmKV07CisJCQkJdG1wWzRdID0gYmFzZTMyaGV4WygoKHVpbnQzMl90KXJkYXRhWzJdPDwxKSYweDFlKV07CisJCQkJdG1wWzVdID0gdG1wWzZdID0gdG1wWzddID0gJz0nOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCXRtcFswXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVswXT4+MykmMHgxZildOworCQkJCXRtcFsxXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVswXTw8MikmMHgxYyl8CisJCQkJCQkgICAoKCh1aW50MzJfdClyZGF0YVsxXT4+NikmMHgwMyldOworCQkJCXRtcFsyXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVsxXT4+MSkmMHgxZildOworCQkJCXRtcFszXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVsxXTw8NCkmMHgxMCl8CisJCQkJCQkgICAoKCh1aW50MzJfdClyZGF0YVsyXT4+NCkmMHgwZildOworCQkJCXRtcFs0XSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVsyXTw8MSkmMHgxZSl8CisJCQkJCQkgICAoKCh1aW50MzJfdClyZGF0YVszXT4+NykmMHgwMSldOworCQkJCXRtcFs1XSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVszXT4+MikmMHgxZildOworCQkJCXRtcFs2XSA9IGJhc2UzMmhleFsoKHVpbnQzMl90KXJkYXRhWzNdPDwzKSYweDE4XTsKKwkJCQl0bXBbN10gPSAnPSc7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXRtcFswXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVswXT4+MykmMHgxZildOworCQkJCXRtcFsxXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVswXTw8MikmMHgxYyl8CisJCQkJCQkgICAoKCh1aW50MzJfdClyZGF0YVsxXT4+NikmMHgwMyldOworCQkJCXRtcFsyXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVsxXT4+MSkmMHgxZildOworCQkJCXRtcFszXSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVsxXTw8NCkmMHgxMCl8CisJCQkJCQkgICAoKCh1aW50MzJfdClyZGF0YVsyXT4+NCkmMHgwZildOworCQkJCXRtcFs0XSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVsyXTw8MSkmMHgxZSl8CisJCQkJCQkgICAoKCh1aW50MzJfdClyZGF0YVszXT4+NykmMHgwMSldOworCQkJCXRtcFs1XSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVszXT4+MikmMHgxZildOworCQkJCXRtcFs2XSA9IGJhc2UzMmhleFsoKCh1aW50MzJfdClyZGF0YVszXTw8MykmMHgxOCl8CisJCQkJCQkgICAoKCh1aW50MzJfdClyZGF0YVs0XT4+NSkmMHgwNyldOworCQkJCXRtcFs3XSA9IGJhc2UzMmhleFsocmRhdGFbNF0mMHgxZildOworCQkJCWJyZWFrOworCQkJfQorCQkJVChhZGRzdHIodG1wLCA4LCAmYnVmLCAmYnVmbGVuKSk7CisJCQlpZiAodCA+PSA1KSB7CisJCQkJcmRhdGEgKz0gNTsKKwkJCQl0IC09IDU7CisJCQl9IGVsc2UgeworCQkJCXJkYXRhICs9IHQ7CisJCQkJdCAtPSB0OworCQkJfQorCQl9CisKKwkJd2hpbGUgKHJkYXRhIDwgZWRhdGEpIHsKKwkJCXcgPSAqcmRhdGErKzsKKwkJCWwgPSAqcmRhdGErKzsKKwkJCWZvciAoaiA9IDA7IGogPCBsOyBqKyspIHsKKwkJCQlpZiAocmRhdGFbal0gPT0gMCkKKwkJCQkJY29udGludWU7CisJCQkJZm9yIChrID0gMDsgayA8IDg7IGsrKykgeworCQkJCQlpZiAoKHJkYXRhW2pdICYgKDB4ODAgPj4gaykpID09IDApCisJCQkJCQljb250aW51ZTsKKwkJCQkJYyA9IHcgKiAyNTYgKyBqICogOCArIGs7CisJCQkJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiAlcyIsIHBfdHlwZSgobnNfdHlwZSljKSkpOworCQkJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCQkJfQorCQkJfQorCQkJcmRhdGEgKz0gbDsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X25zZWM6IHsKKwkJdV9pbnQgdywgbCwgaiwgaywgYzsKKworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJd2hpbGUgKHJkYXRhIDwgZWRhdGEpIHsKKwkJCXcgPSAqcmRhdGErKzsKKwkJCWwgPSAqcmRhdGErKzsKKwkJCWZvciAoaiA9IDA7IGogPCBsOyBqKyspIHsKKwkJCQlpZiAocmRhdGFbal0gPT0gMCkKKwkJCQkJY29udGludWU7CisJCQkJZm9yIChrID0gMDsgayA8IDg7IGsrKykgeworCQkJCQlpZiAoKHJkYXRhW2pdICYgKDB4ODAgPj4gaykpID09IDApCisJCQkJCQljb250aW51ZTsKKwkJCQkJYyA9IHcgKiAyNTYgKyBqICogOCArIGs7CisJCQkJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiAlcyIsIHBfdHlwZSgobnNfdHlwZSljKSkpOworCQkJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCQkJfQorCQkJfQorCQkJcmRhdGEgKz0gbDsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X2RoY2lkOiB7CisJCWludCBuOworCQl1bnNpZ25lZCBpbnQgc2l6OworCQljaGFyIGJhc2U2NF9kaGNpZFs4MTkyXTsKKwkJY29uc3QgY2hhciAqbGVhZGVyOworCisJCXNpeiA9IChpbnQpKGVkYXRhLXJkYXRhKSo0LzMgKyA0OyAvKiAiKzQiIGFjY291bnRzIGZvciB0cmFpbGluZyBcMCAqLworCQlpZiAoc2l6ID4gc2l6ZW9mKGJhc2U2NF9kaGNpZCkgKiAzLzQpIHsKKwkJCWNvbnN0IGNoYXIgKnN0ciA9ICJyZWNvcmQgdG9vIGxvbmcgdG8gcHJpbnQiOworCQkJVChhZGRzdHIoc3RyLCBzdHJsZW4oc3RyKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9IGVsc2UgeworCQkJbGVuID0gYjY0X250b3AocmRhdGEsIChzaXplX3QpKGVkYXRhLXJkYXRhKSwKKwkJCSAgICBiYXNlNjRfZGhjaWQsIHNpeik7CisKKwkJCWlmIChsZW4gPCAwKQorCQkJCWdvdG8gZm9ybWVycjsKKworCQkJZWxzZSBpZiAobGVuID4gMTUpIHsKKwkJCQlUKGFkZHN0cigiICgiLCAyLCAmYnVmLCAmYnVmbGVuKSk7CisJCQkJbGVhZGVyID0gIlxuXHRcdCI7CisJCQkJc3BhY2VkID0gMDsKKwkJCX0KKwkJCWVsc2UKKwkJCQlsZWFkZXIgPSAiICI7CisKKwkJCWZvciAobiA9IDA7IG4gPCBsZW47IG4gKz0gNDgpIHsKKwkJCQlUKGFkZHN0cihsZWFkZXIsIHN0cmxlbihsZWFkZXIpLAorCQkJCQkgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCVQoYWRkc3RyKGJhc2U2NF9kaGNpZCArIG4sCisJCQkJICAgIChzaXplX3QpTUlOKGxlbiAtIG4sIDQ4KSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJfQorCQkJaWYgKGxlbiA+IDE1KQorCQkJCVQoYWRkc3RyKCIgKSIsIDIsICZidWYsICZidWZsZW4pKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwljYXNlIG5zX3RfaXBzZWNrZXk6IHsKKwkJaW50IG47CisJCXVuc2lnbmVkIGludCBzaXo7CisJCWNoYXIgYmFzZTY0X2tleVs4MTkyXTsKKwkJY29uc3QgY2hhciAqbGVhZGVyOworCisJCWlmIChyZGxlbiA8IDIpCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJc3dpdGNoIChyZGF0YVsxXSkgeworCQljYXNlIDA6CisJCWNhc2UgMzoKKwkJCWlmIChyZGxlbiA8IDMpCisJCQkJZ290byBmb3JtZXJyOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlmIChyZGxlbiA8IDcpCisJCQkJZ290byBmb3JtZXJyOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWlmIChyZGxlbiA8IDE5KQorCQkJCWdvdG8gZm9ybWVycjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29tbWVudCA9ICJ1bmtub3duIElQU0VDS0VZIGdhdGV3YXkgdHlwZSI7CisJCQlnb3RvIGhleGlmeTsKKwkJfQorCisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsICpyZGF0YSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCXJkYXRhKys7CisKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgKnJkYXRhKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJcmRhdGErKzsKKworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCAqcmRhdGEpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlyZGF0YSsrOworCisJCXN3aXRjaCAocmRhdGFbLTJdKSB7CisJCWNhc2UgMDoKKwkJCVQoYWRkc3RyKCIuIiwgMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVCwgcmRhdGEsIGJ1ZiwgKHNvY2tsZW5fdClidWZsZW4pOworCQkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKKwkJCXJkYXRhICs9IDQ7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJKHZvaWQpIGluZXRfbnRvcChBRl9JTkVUNiwgcmRhdGEsIGJ1ZiwgKHNvY2tsZW5fdClidWZsZW4pOworCQkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKKwkJCXJkYXRhICs9IDE2OworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJkYXRhID49IGVkYXRhKQorCQkJYnJlYWs7CisKKwkJc2l6ID0gKGludCkoZWRhdGEtcmRhdGEpKjQvMyArIDQ7IC8qICIrNCIgYWNjb3VudHMgZm9yIHRyYWlsaW5nIFwwICovCisJCWlmIChzaXogPiBzaXplb2YoYmFzZTY0X2tleSkgKiAzLzQpIHsKKwkJCWNvbnN0IGNoYXIgKnN0ciA9ICJyZWNvcmQgdG9vIGxvbmcgdG8gcHJpbnQiOworCQkJVChhZGRzdHIoc3RyLCBzdHJsZW4oc3RyKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9IGVsc2UgeworCQkJbGVuID0gYjY0X250b3AocmRhdGEsIChzaXplX3QpKGVkYXRhLXJkYXRhKSwKKwkJCSAgICBiYXNlNjRfa2V5LCBzaXopOworCisJCQlpZiAobGVuIDwgMCkKKwkJCQlnb3RvIGZvcm1lcnI7CisKKwkJCWVsc2UgaWYgKGxlbiA+IDE1KSB7CisJCQkJVChhZGRzdHIoIiAoIiwgMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCWxlYWRlciA9ICJcblx0XHQiOworCQkJCXNwYWNlZCA9IDA7CisJCQl9CisJCQllbHNlCisJCQkJbGVhZGVyID0gIiAiOworCisJCQlmb3IgKG4gPSAwOyBuIDwgbGVuOyBuICs9IDQ4KSB7CisJCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwKKwkJCQkJICZidWYsICZidWZsZW4pKTsKKwkJCQlUKGFkZHN0cihiYXNlNjRfa2V5ICsgbiwKKwkJCQkgICAgKHNpemVfdClNSU4obGVuIC0gbiwgNDgpLCAmYnVmLCAmYnVmbGVuKSk7CisJCQl9CisJCQlpZiAobGVuID4gMTUpCisJCQkJVChhZGRzdHIoIiApIiwgMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJCWJyZWFrOworCX0KKworCWNhc2UgbnNfdF9oaXA6IHsKKwkJdW5zaWduZWQgaW50IGksIGhpcF9sZW4sIGFsZ29yaXRobSwga2V5X2xlbjsKKwkJY2hhciBiYXNlNjRfa2V5W05TX01ENVJTQV9NQVhfQkFTRTY0XTsKKwkJdW5zaWduZWQgaW50IHNpejsKKwkJY29uc3QgY2hhciAqbGVhZGVyID0gIlxuXHRcdFx0XHRcdCI7CisKKwkJaGlwX2xlbiA9ICpyZGF0YSsrOworCQlhbGdvcml0aG0gPSAqcmRhdGErKzsKKwkJa2V5X2xlbiA9IG5zX2dldDE2KHJkYXRhKTsKKwkJcmRhdGEgKz0gTlNfSU5UMTZTWjsKKworCQlzaXogPSBrZXlfbGVuKjQvMyArIDQ7IC8qICIrNCIgYWNjb3VudHMgZm9yIHRyYWlsaW5nIFwwICovCisJCWlmIChzaXogPiBzaXplb2YoYmFzZTY0X2tleSkgKiAzLzQpIHsKKwkJCWNvbnN0IGNoYXIgKnN0ciA9ICJyZWNvcmQgdG9vIGxvbmcgdG8gcHJpbnQiOworCQkJVChhZGRzdHIoc3RyLCBzdHJsZW4oc3RyKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9IGVsc2UgeworCQkJbGVuID0gc3ByaW50Zih0bXAsICIoICV1ICIsIGFsZ29yaXRobSk7CisJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBoaXBfbGVuOyBpKyspIHsKKwkJCQlsZW4gPSBzcHJpbnRmKHRtcCwgIiUwMlgiLCAqcmRhdGEpOworCQkJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJCQlyZGF0YSsrOworCQkJfQorCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCQlsZW4gPSBiNjRfbnRvcChyZGF0YSwga2V5X2xlbiwgYmFzZTY0X2tleSwgc2l6KTsKKwkJCWlmIChsZW4gPCAwKQorCQkJCWdvdG8gZm9ybWVycjsKKworCQkJVChhZGRzdHIoYmFzZTY0X2tleSwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkJcmRhdGEgKz0ga2V5X2xlbjsKKwkJCXdoaWxlIChyZGF0YSA8IGVkYXRhKSB7CisJCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sCisJCQkJCSAgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJfQorCQkJVChhZGRzdHIoIiApIiwgMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJCWJyZWFrOworCSAgICB9CisKKwlkZWZhdWx0OgorCQljb21tZW50ID0gInVua25vd24gUlIgdHlwZSI7CisJCWdvdG8gaGV4aWZ5OworCX0KKwlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgYnVmIC0gb2J1ZikpOworCXJldHVybiAoaW50KShidWYgLSBvYnVmKTsKKyBmb3JtZXJyOgorCWNvbW1lbnQgPSAiUlIgZm9ybWF0IGVycm9yIjsKKyBoZXhpZnk6IHsKKwlpbnQgbiwgbTsKKwljaGFyICpwOworCisJbGVuID0gU1BSSU5URigodG1wLCAiXFwjICV1JXNcdDsgJXMiLCAodW5zaWduZWQpKGVkYXRhIC0gcmRhdGEpLAorCQkgICAgICAgcmRsZW4gIT0gMFUgPyAiICgiIDogIiIsIGNvbW1lbnQpKTsKKwlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJd2hpbGUgKHJkYXRhIDwgZWRhdGEpIHsKKwkJcCA9IHRtcDsKKwkJcCArPSBTUFJJTlRGKChwLCAiXG5cdCIpKTsKKwkJc3BhY2VkID0gMDsKKwkJbiA9IE1JTigxNiwgKGludCkoZWRhdGEgLSByZGF0YSkpOworCQlmb3IgKG0gPSAwOyBtIDwgbjsgbSsrKQorCQkJcCArPSBTUFJJTlRGKChwLCAiJTAyeCAiLCByZGF0YVttXSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpKHAgLSB0bXApLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChuIDwgMTYpIHsKKwkJCVQoYWRkc3RyKCIpIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisJCQlUKGFkZHRhYigoc2l6ZV90KShwIC0gdG1wICsgMSksIChzaXplX3QpNDgsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJCXAgPSB0bXA7CisJCXAgKz0gU1BSSU5URigocCwgIjsgIikpOworCQlmb3IgKG0gPSAwOyBtIDwgbjsgbSsrKQorCQkJKnArKyA9IChpc2FzY2lpKHJkYXRhW21dKSAmJiBpc3ByaW50KHJkYXRhW21dKSkKKwkJCQk/IHJkYXRhW21dCisJCQkJOiAnLic7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdCkocCAtIHRtcCksICZidWYsICZidWZsZW4pKTsKKwkJcmRhdGEgKz0gbjsKKwl9CisJX0RJQUdBU1NFUlQoX190eXBlX2ZpdChpbnQsIGJ1ZiAtIG9idWYpKTsKKwlyZXR1cm4gKGludCkoYnVmIC0gb2J1Zik7CisgICAgfQorfQorCisvKiBQcml2YXRlLiAqLworCisvKgorICogc2l6ZV90CisgKiBwcnVuZV9vcmlnaW4obmFtZSwgb3JpZ2luKQorICoJRmluZCBvdXQgaWYgdGhlIG5hbWUgaXMgYXQgb3IgdW5kZXIgdGhlIGN1cnJlbnQgb3JpZ2luLgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gbmFtZSBiZWZvcmUgc3RhcnQgb2Ygb3JpZ2luLAorICoJb3IgbGVuZ3RoIG9mIG5hbWUgaWYgb3JpZ2luIGRvZXMgbm90IG1hdGNoLgorICogbm90ZXM6CisgKglUaGlzIGZ1bmN0aW9uIHNob3VsZCBzaGFyZSBjb2RlIHdpdGggc2FtZWRvbWFpbigpLgorICovCitzdGF0aWMgc2l6ZV90CitwcnVuZV9vcmlnaW4oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqb3JpZ2luKSB7CisJY29uc3QgY2hhciAqb25hbWUgPSBuYW1lOworCisJd2hpbGUgKCpuYW1lICE9ICdcMCcpIHsKKwkJaWYgKG9yaWdpbiAhPSBOVUxMICYmIG5zX3NhbWVuYW1lKG5hbWUsIG9yaWdpbikgPT0gMSkKKwkJCXJldHVybiAobmFtZSAtIG9uYW1lIC0gKG5hbWUgPiBvbmFtZSkpOworCQl3aGlsZSAoKm5hbWUgIT0gJ1wwJykgeworCQkJaWYgKCpuYW1lID09ICdcXCcpIHsKKwkJCQluYW1lKys7CisJCQkJLyogWFhYIG5lZWQgdG8gaGFuZGxlIFxubm4gZm9ybS4gKi8KKwkJCQlpZiAoKm5hbWUgPT0gJ1wwJykKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKCpuYW1lID09ICcuJykgeworCQkJCW5hbWUrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW5hbWUrKzsKKwkJfQorCX0KKwlyZXR1cm4gKG5hbWUgLSBvbmFtZSk7Cit9CisKKy8qCisgKiBpbnQKKyAqIGNoYXJzdHIocmRhdGEsIGVkYXRhLCBidWYsIGJ1ZmxlbikKKyAqCUZvcm1hdCBhIDxjaGFyYWN0ZXItc3RyaW5nPiBpbnRvIHRoZSBwcmVzZW50YXRpb24gYnVmZmVyLgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIHJkYXRhIG9jdGV0cyBjb25zdW1lZAorICoJMCBmb3IgcHJvdG9jb2wgZm9ybWF0IGVycm9yCisgKgktMSBmb3Igb3V0cHV0IGJ1ZmZlciBlcnJvcgorICogc2lkZSBlZmZlY3RzOgorICoJYnVmZmVyIGlzIGFkdmFuY2VkIG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQKK2NoYXJzdHIoY29uc3QgdV9jaGFyICpyZGF0YSwgY29uc3QgdV9jaGFyICplZGF0YSwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIHsKKwljb25zdCB1X2NoYXIgKm9kYXRhID0gcmRhdGE7CisJc2l6ZV90IHNhdmVfYnVmbGVuID0gKmJ1ZmxlbjsKKwljaGFyICpzYXZlX2J1ZiA9ICpidWY7CisKKwlpZiAoYWRkc3RyKCJcIiIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkKKwkJZ290byBlbm9zcGM7CisJaWYgKHJkYXRhIDwgZWRhdGEpIHsKKwkJaW50IG4gPSAqcmRhdGE7CisKKwkJaWYgKHJkYXRhICsgMSArIG4gPD0gZWRhdGEpIHsKKwkJCXJkYXRhKys7CisJCQl3aGlsZSAobi0tID4gMCkgeworCQkJCWlmIChzdHJjaHIoIlxuXCJcXCIsICpyZGF0YSkgIT0gTlVMTCkKKwkJCQkJaWYgKGFkZHN0cigiXFwiLCAoc2l6ZV90KTEsIGJ1ZiwgYnVmbGVuKSA8IDApCisJCQkJCQlnb3RvIGVub3NwYzsKKwkJCQlpZiAoYWRkc3RyKChjb25zdCBjaGFyICopcmRhdGEsIChzaXplX3QpMSwKKwkJCQkJICAgYnVmLCBidWZsZW4pIDwgMCkKKwkJCQkJZ290byBlbm9zcGM7CisJCQkJcmRhdGErKzsKKwkJCX0KKwkJfQorCX0KKwlpZiAoYWRkc3RyKCJcIiIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkKKwkJZ290byBlbm9zcGM7CisJX0RJQUdBU1NFUlQoX190eXBlX2ZpdChpbnQsIHJkYXRhIC0gb2RhdGEpKTsKKwlyZXR1cm4gKGludCkocmRhdGEgLSBvZGF0YSk7CisgZW5vc3BjOgorCWVycm5vID0gRU5PU1BDOworCSpidWYgPSBzYXZlX2J1ZjsKKwkqYnVmbGVuID0gc2F2ZV9idWZsZW47CisJcmV0dXJuICgtMSk7Cit9CisKK3N0YXRpYyBpbnQKK2FkZG5hbWUoY29uc3QgdV9jaGFyICptc2csIHNpemVfdCBtc2dsZW4sCisJY29uc3QgdV9jaGFyICoqcHAsIGNvbnN0IGNoYXIgKm9yaWdpbiwKKwljaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikKK3sKKwlzaXplX3QgbmV3bGVuLCBzYXZlX2J1ZmxlbiA9ICpidWZsZW47CisJY2hhciAqc2F2ZV9idWYgPSAqYnVmOworCWludCBuOworCisJbiA9IGRuX2V4cGFuZChtc2csIG1zZyArIG1zZ2xlbiwgKnBwLCAqYnVmLCAoaW50KSpidWZsZW4pOworCWlmIChuIDwgMCkKKwkJZ290byBlbm9zcGM7CS8qIEd1ZXNzLiAqLworCW5ld2xlbiA9IHBydW5lX29yaWdpbigqYnVmLCBvcmlnaW4pOworCWlmICgqKmJ1ZiA9PSAnXDAnKSB7CisJCWdvdG8gcm9vdDsKKwl9IGVsc2UgaWYgKG5ld2xlbiA9PSAwVSkgeworCQkvKiBVc2UgIkAiIGluc3RlYWQgb2YgbmFtZS4gKi8KKwkJaWYgKG5ld2xlbiArIDIgPiAqYnVmbGVuKQorCQkJZ290byBlbm9zcGM7ICAgICAgICAvKiBObyByb29tIGZvciAiQFwwIi4gKi8KKwkJKCpidWYpW25ld2xlbisrXSA9ICdAJzsKKwkJKCpidWYpW25ld2xlbl0gPSAnXDAnOworCX0gZWxzZSB7CisJCWlmICgoKG9yaWdpbiA9PSBOVUxMIHx8IG9yaWdpblswXSA9PSAnXDAnKSB8fAorCQkgICAgKG9yaWdpblswXSAhPSAnLicgJiYgb3JpZ2luWzFdICE9ICdcMCcgJiYKKwkJICAgICgqYnVmKVtuZXdsZW5dID09ICdcMCcpKSAmJiAoKmJ1ZilbbmV3bGVuIC0gMV0gIT0gJy4nKSB7CisJCQkvKiBObyB0cmFpbGluZyBkb3QuICovCisgcm9vdDoKKwkJCWlmIChuZXdsZW4gKyAyID4gKmJ1ZmxlbikKKwkJCQlnb3RvIGVub3NwYzsJLyogTm8gcm9vbSBmb3IgIi5cMCIuICovCisJCQkoKmJ1ZilbbmV3bGVuKytdID0gJy4nOworCQkJKCpidWYpW25ld2xlbl0gPSAnXDAnOworCQl9CisJfQorCSpwcCArPSBuOworCWFkZGxlbihuZXdsZW4sIGJ1ZiwgYnVmbGVuKTsKKwkqKmJ1ZiA9ICdcMCc7CisJX0RJQUdBU1NFUlQoX190eXBlX2ZpdChpbnQsIG5ld2xlbikpOworCXJldHVybiAoaW50KW5ld2xlbjsKKyBlbm9zcGM6CisJZXJybm8gPSBFTk9TUEM7CisJKmJ1ZiA9IHNhdmVfYnVmOworCSpidWZsZW4gPSBzYXZlX2J1ZmxlbjsKKwlyZXR1cm4gKC0xKTsKK30KKworc3RhdGljIHZvaWQKK2FkZGxlbihzaXplX3QgbGVuLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgeworCWFzc2VydChsZW4gPD0gKmJ1Zmxlbik7CisJKmJ1ZiArPSBsZW47CisJKmJ1ZmxlbiAtPSBsZW47Cit9CisKK3N0YXRpYyBpbnQKK2FkZHN0cihjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKSB7CisJaWYgKGxlbiA+PSAqYnVmbGVuKSB7CisJCWVycm5vID0gRU5PU1BDOworCQlyZXR1cm4gKC0xKTsKKwl9CisJbWVtY3B5KCpidWYsIHNyYywgbGVuKTsKKwlhZGRsZW4obGVuLCBidWYsIGJ1Zmxlbik7CisJKipidWYgPSAnXDAnOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2FkZHRhYihzaXplX3QgbGVuLCBzaXplX3QgdGFyZ2V0LCBpbnQgc3BhY2VkLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgeworCXNpemVfdCBzYXZlX2J1ZmxlbiA9ICpidWZsZW47CisJY2hhciAqc2F2ZV9idWYgPSAqYnVmOworCXB0cmRpZmZfdCB0OworCisJaWYgKHNwYWNlZCB8fCBsZW4gPj0gdGFyZ2V0IC0gMSkgeworCQlUKGFkZHN0cigiICAiLCAoc2l6ZV90KTIsIGJ1ZiwgYnVmbGVuKSk7CisJCXNwYWNlZCA9IDE7CisJfSBlbHNlIHsKKwkJZm9yICh0ID0gKHRhcmdldCAtIGxlbiAtIDEpIC8gODsgdCA+PSAwOyB0LS0pCisJCQlpZiAoYWRkc3RyKCJcdCIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkgeworCQkJCSpidWZsZW4gPSBzYXZlX2J1ZmxlbjsKKwkJCQkqYnVmID0gc2F2ZV9idWY7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCXNwYWNlZCA9IDA7CisJfQorCXJldHVybiAoc3BhY2VkKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvZG5zL25hbWVzZXIvbnNfc2FtZWRvbWFpbi5jIGIvbGliYy9kbnMvbmFtZXNlci9uc19zYW1lZG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlMGMyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfc2FtZWRvbWFpbi5jCkBAIC0wLDAgKzEsMjEwIEBACisvKgkkTmV0QlNEOiBuc19zYW1lZG9tYWluLmMsdiAxLjggMjAxMi8xMS8yMiAyMDoyMjozMSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmbmRlZiBsaW50CisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBuc19zYW1lZG9tYWluLmMsdiAxLjYgMjAwNS8wNC8yNyAwNDo1Njo0MCBzcmEgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBuc19zYW1lZG9tYWluLmMsdiAxLjggMjAxMi8xMS8yMiAyMDoyMjozMSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBfTElCUkVTT0xWCisvKgorICoJQ2hlY2sgd2hldGhlciBhIG5hbWUgYmVsb25ncyB0byBhIGRvbWFpbi4KKyAqCisgKiBJbnB1dHM6CisgKglhIC0gdGhlIGRvbWFpbiB3aG9zZSBhbmNlc3RvcnkgaXMgYmVpbmcgdmVyaWZpZWQKKyAqCWIgLSB0aGUgcG90ZW50aWFsIGFuY2VzdG9yIHdlJ3JlIGNoZWNraW5nIGFnYWluc3QKKyAqCisgKiBSZXR1cm46CisgKglib29sZWFuIC0gaXMgYSBhdCBvciBiZWxvdyBiPworICoKKyAqIE5vdGVzOgorICoJVHJhaWxpbmcgZG90cyBhcmUgZmlyc3QgcmVtb3ZlZCBmcm9tIG5hbWUgYW5kIGRvbWFpbi4KKyAqCUFsd2F5cyBjb21wYXJlIGNvbXBsZXRlIHN1YmRvbWFpbnMsIG5vdCBvbmx5IHdoZXRoZXIgdGhlCisgKglkb21haW4gbmFtZSBpcyB0aGUgdHJhaWxpbmcgc3RyaW5nIG9mIHRoZSBnaXZlbiBuYW1lLgorICoKKyAqCSJob3N0LmZvb2Jhci50b3AiIGxpZXMgaW4gImZvb2Jhci50b3AiIGFuZCBpbiAidG9wIiBhbmQgaW4gIiIKKyAqCWJ1dCBOT1QgaW4gImJhci50b3AiCisgKi8KKworaW50Cituc19zYW1lZG9tYWluKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpIHsKKwlzaXplX3QgbGEsIGxiLCBpOworCWludCBkaWZmLCBlc2NhcGVkOworCWNvbnN0IGNoYXIgKmNwOworCisJbGEgPSBzdHJsZW4oYSk7CisJbGIgPSBzdHJsZW4oYik7CisKKwkvKiBJZ25vcmUgYSB0cmFpbGluZyBsYWJlbCBzZXBhcmF0b3IgKGkuZS4gYW4gdW5lc2NhcGVkIGRvdCkgaW4gJ2EnLiAqLworCWlmIChsYSAhPSAwVSAmJiBhW2xhIC0gMV0gPT0gJy4nKSB7CisJCWVzY2FwZWQgPSAwOworCQkvKiBOb3RlIHRoaXMgbG9vcCBkb2Vzbid0IGdldCBleGVjdXRlZCBpZiBsYT09MS4gKi8KKwkJZm9yIChpID0gbGEgLSAxOyBpID4gMDsgaS0tKQorCQkJaWYgKGFbaSAtIDFdID09ICdcXCcpIHsKKwkJCQlpZiAoZXNjYXBlZCkKKwkJCQkJZXNjYXBlZCA9IDA7CisJCQkJZWxzZQorCQkJCQllc2NhcGVkID0gMTsKKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQlpZiAoIWVzY2FwZWQpCisJCQlsYS0tOworCX0KKworCS8qIElnbm9yZSBhIHRyYWlsaW5nIGxhYmVsIHNlcGFyYXRvciAoaS5lLiBhbiB1bmVzY2FwZWQgZG90KSBpbiAnYicuICovCisJaWYgKGxiICE9IDBVICYmIGJbbGIgLSAxXSA9PSAnLicpIHsKKwkJZXNjYXBlZCA9IDA7CisJCS8qIG5vdGUgdGhpcyBsb29wIGRvZXNuJ3QgZ2V0IGV4ZWN1dGVkIGlmIGxiPT0xICovCisJCWZvciAoaSA9IGxiIC0gMTsgaSA+IDA7IGktLSkKKwkJCWlmIChiW2kgLSAxXSA9PSAnXFwnKSB7CisJCQkJaWYgKGVzY2FwZWQpCisJCQkJCWVzY2FwZWQgPSAwOworCQkJCWVsc2UKKwkJCQkJZXNjYXBlZCA9IDE7CisJCQl9IGVsc2UKKwkJCQlicmVhazsKKwkJaWYgKCFlc2NhcGVkKQorCQkJbGItLTsKKwl9CisKKwkvKiBsYiA9PSAwIG1lYW5zICdiJyBpcyB0aGUgcm9vdCBkb21haW4sIHNvICdhJyBtdXN0IGJlIGluICdiJy4gKi8KKwlpZiAobGIgPT0gMFUpCisJCXJldHVybiAoMSk7CisKKwkvKiAnYicgbG9uZ2VyIHRoYW4gJ2EnIG1lYW5zICdhJyBjYW4ndCBiZSBpbiAnYicuICovCisJaWYgKGxiID4gbGEpCisJCXJldHVybiAoMCk7CisKKwkvKiAnYScgYW5kICdiJyBiZWluZyBlcXVhbCBhdCB0aGlzIHBvaW50IGluZGljYXRlcyBzYW1lbmVzcy4gKi8KKwlpZiAobGIgPT0gbGEpCisJCXJldHVybiAoc3RybmNhc2VjbXAoYSwgYiwgbGIpID09IDApOworCisJLyogT2ssIHdlIGtub3cgbGEgPiBsYi4gKi8KKworCWRpZmYgPSAoaW50KShsYSAtIGxiKTsKKworCS8qCisJICogSWYgJ2EnIGlzIG9ubHkgMSBjaGFyYWN0ZXIgbG9uZ2VyIHRoYW4gJ2InLCB0aGVuIGl0IGNhbid0IGJlCisJICogYSBzdWJkb21haW4gb2YgJ2InIChiZWNhdXNlIG9mIHRoZSBuZWVkIGZvciB0aGUgJy4nIGxhYmVsCisJICogc2VwYXJhdG9yKS4KKwkgKi8KKwlpZiAoZGlmZiA8IDIpCisJCXJldHVybiAoMCk7CisKKwkvKgorCSAqIElmIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBsYXN0ICdsYicgY2hhcmFjdGVycyBvZiAnYicKKwkgKiBpc24ndCAnLicsIHRoZW4gaXQgY2FuJ3QgYmUgYSBtYXRjaCAodGhpcyBsZXRzIHVzIGF2b2lkCisJICogaGF2aW5nICJmb29iYXIuY29tIiBtYXRjaCAiYmFyLmNvbSIpLgorCSAqLworCWlmIChhW2RpZmYgLSAxXSAhPSAnLicpCisJCXJldHVybiAoMCk7CisKKwkvKgorCSAqIFdlJ3JlIG5vdCBzdXJlIGFib3V0IHRoYXQgJy4nLCBob3dldmVyLiAgSXQgY291bGQgYmUgZXNjYXBlZAorICAgICAgICAgKiBhbmQgdGh1cyBub3QgYSByZWFsbHkgYSBsYWJlbCBzZXBhcmF0b3IuCisJICovCisJZXNjYXBlZCA9IDA7CisJZm9yIChpID0gZGlmZiAtIDE7IGkgPiAwOyBpLS0pCisJCWlmIChhW2kgLSAxXSA9PSAnXFwnKSB7CisJCQlpZiAoZXNjYXBlZCkKKwkJCQllc2NhcGVkID0gMDsKKwkJCWVsc2UKKwkJCQllc2NhcGVkID0gMTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwlpZiAoZXNjYXBlZCkKKwkJcmV0dXJuICgwKTsKKworCS8qIE5vdyBjb21wYXJlIGFsaWduZWQgdHJhaWxpbmcgc3Vic3RyaW5nLiAqLworCWNwID0gYSArIGRpZmY7CisJcmV0dXJuIChzdHJuY2FzZWNtcChjcCwgYiwgbGIpID09IDApOworfQorCisvKgorICoJaXMgImEiIGEgc3ViZG9tYWluIG9mICJiIj8KKyAqLworaW50Cituc19zdWJkb21haW4oY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikgeworCXJldHVybiAobnNfc2FtZW5hbWUoYSwgYikgIT0gMSAmJiBuc19zYW1lZG9tYWluKGEsIGIpKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX0xJQkMKKy8qCisgKgltYWtlIGEgY2Fub25pY2FsIGNvcHkgb2YgZG9tYWluIG5hbWUgInNyYyIKKyAqCisgKiBub3RlczoKKyAqCWZvbyAtPiBmb28uCisgKglmb28uIC0+IGZvby4KKyAqCWZvby4uIC0+IGZvby4KKyAqCWZvb1wuIC0+IGZvb1wuLgorICoJZm9vXFwuIC0+IGZvb1xcLgorICovCisKK2ludAorbnNfbWFrZWNhbm9uKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSkgeworCXNpemVfdCBuID0gc3RybGVuKHNyYyk7CisKKwlpZiAobiArIHNpemVvZiAiLiIgPiBkc3RzaXplKSB7CQkJLyogTm90ZTogc2l6ZW9mID09IDIgKi8KKwkJZXJybm8gPSBFTVNHU0laRTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXN0cmNweShkc3QsIHNyYyk7CisJd2hpbGUgKG4gPj0gMVUgJiYgZHN0W24gLSAxXSA9PSAnLicpCQkvKiBFbmRzIGluICIuIiAqLworCQlpZiAobiA+PSAyVSAmJiBkc3RbbiAtIDJdID09ICdcXCcgJiYJLyogRW5kcyBpbiAiXC4iICovCisJCSAgICAobiA8IDNVIHx8IGRzdFtuIC0gM10gIT0gJ1xcJykpCS8qIEJ1dCBub3QgIlxcLiIgKi8KKwkJCWJyZWFrOworCQllbHNlCisJCQlkc3RbLS1uXSA9ICdcMCc7CisJZHN0W24rK10gPSAnLic7CisJZHN0W25dID0gJ1wwJzsKKwlyZXR1cm4gKDApOworfQorCisvKgorICoJZGV0ZXJtaW5lIHdoZXRoZXIgZG9tYWluIG5hbWUgImEiIGlzIHRoZSBzYW1lIGFzIGRvbWFpbiBuYW1lICJiIgorICoKKyAqIHJldHVybjoKKyAqCS0xIG9uIGVycm9yCisgKgkwIGlmIG5hbWVzIGRpZmZlcgorICoJMSBpZiBuYW1lcyBhcmUgdGhlIHNhbWUKKyAqLworCitpbnQKK25zX3NhbWVuYW1lKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpIHsKKwljaGFyIHRhW05TX01BWEROQU1FXSwgdGJbTlNfTUFYRE5BTUVdOworCisJaWYgKG5zX21ha2VjYW5vbihhLCB0YSwgc2l6ZW9mIHRhKSA8IDAgfHwKKwkgICAgbnNfbWFrZWNhbm9uKGIsIHRiLCBzaXplb2YgdGIpIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJaWYgKHN0cmNhc2VjbXAodGEsIHRiKSA9PSAwKQorCQlyZXR1cm4gKDEpOworCWVsc2UKKwkJcmV0dXJuICgwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmFtZXNlci9uc190dGwuYyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfdHRsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5NWI5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL25hbWVzZXIvbnNfdHRsLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qCSROZXRCU0Q6IG5zX3R0bC5jLHYgMS44IDIwMTIvMDMvMTMgMjE6MTM6MzkgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZm5kZWYgbGludAorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfdHRsLmMsdiAxLjQgMjAwNS8wNy8yOCAwNjo1MTo0OSBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IG5zX3R0bC5jLHYgMS44IDIwMTIvMDMvMTMgMjE6MTM6MzkgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmCisKKy8qIEltcG9ydC4gKi8KKworI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBTUFJJTlRGX0NIQVIKKyMgZGVmaW5lIFNQUklOVEYoeCkgc3RybGVuKHNwcmludGYvKioveCkKKyNlbHNlCisjIGRlZmluZSBTUFJJTlRGKHgpICgoc2l6ZV90KXNwcmludGYgeCkKKyNlbmRpZgorCisvKiBGb3J3YXJkLiAqLworCitzdGF0aWMgaW50CWZtdDEoaW50IHQsIGNoYXIgcywgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOworCisvKiBNYWNyb3MuICovCisKKyNkZWZpbmUgVCh4KSBkbyB7IGlmICgoeCkgPCAwKSByZXR1cm4gKC0xKTsgfSB3aGlsZSgwKQorCisvKiBQdWJsaWMuICovCisKK2ludAorbnNfZm9ybWF0X3R0bCh1X2xvbmcgc3JjLCBjaGFyICpkc3QsIHNpemVfdCBkc3RsZW4pIHsKKwljaGFyICpvZHN0ID0gZHN0OworCWludCBzZWNzLCBtaW5zLCBob3VycywgZGF5cywgd2Vla3MsIHg7CisJY2hhciAqcDsKKworCXNlY3MgPSAoaW50KShzcmMgJSA2MCk7ICAgc3JjIC89IDYwOworCW1pbnMgPSAoaW50KShzcmMgJSA2MCk7ICAgc3JjIC89IDYwOworCWhvdXJzID0gKGludCkoc3JjICUgMjQpOyAgc3JjIC89IDI0OworCWRheXMgPSAoaW50KShzcmMgJSA3KTsgICAgc3JjIC89IDc7CisJd2Vla3MgPSAoaW50KXNyYzsgICAgICAgc3JjID0gMDsKKworCXggPSAwOworCWlmICh3ZWVrcykgeworCQlUKGZtdDEod2Vla3MsICdXJywgJmRzdCwgJmRzdGxlbikpOworCQl4Kys7CisJfQorCWlmIChkYXlzKSB7CisJCVQoZm10MShkYXlzLCAnRCcsICZkc3QsICZkc3RsZW4pKTsKKwkJeCsrOworCX0KKwlpZiAoaG91cnMpIHsKKwkJVChmbXQxKGhvdXJzLCAnSCcsICZkc3QsICZkc3RsZW4pKTsKKwkJeCsrOworCX0KKwlpZiAobWlucykgeworCQlUKGZtdDEobWlucywgJ00nLCAmZHN0LCAmZHN0bGVuKSk7CisJCXgrKzsKKwl9CisJaWYgKHNlY3MgfHwgISh3ZWVrcyB8fCBkYXlzIHx8IGhvdXJzIHx8IG1pbnMpKSB7CisJCVQoZm10MShzZWNzLCAnUycsICZkc3QsICZkc3RsZW4pKTsKKwkJeCsrOworCX0KKworCWlmICh4ID4gMSkgeworCQlpbnQgY2g7CisKKwkJZm9yIChwID0gb2RzdDsgKGNoID0gKnApICE9ICdcMCc7IHArKykKKwkJCWlmIChpc2FzY2lpKGNoKSAmJiBpc3VwcGVyKGNoKSkKKwkJCQkqcCA9IHRvbG93ZXIoY2gpOworCX0KKworCV9ESUFHQVNTRVJUKF9fdHlwZV9maXQoaW50LCBkc3QgLSBvZHN0KSk7CisJcmV0dXJuIChpbnQpKGRzdCAtIG9kc3QpOworfQorCisjaWZuZGVmIF9MSUJDCitpbnQKK25zX3BhcnNlX3R0bChjb25zdCBjaGFyICpzcmMsIHVfbG9uZyAqZHN0KSB7CisJdV9sb25nIHR0bCwgdG1wOworCWludCBjaCwgZGlnaXRzLCBkaXJ0eTsKKworCXR0bCA9IDA7CisJdG1wID0gMDsKKwlkaWdpdHMgPSAwOworCWRpcnR5ID0gMDsKKwl3aGlsZSAoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7CisJCWlmICghaXNhc2NpaShjaCkgfHwgIWlzcHJpbnQoY2gpKQorCQkJZ290byBlaW52YWw7CisJCWlmIChpc2RpZ2l0KGNoKSkgeworCQkJdG1wICo9IDEwOworCQkJdG1wICs9IChjaCAtICcwJyk7CisJCQlkaWdpdHMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChkaWdpdHMgPT0gMCkKKwkJCWdvdG8gZWludmFsOworCQlpZiAoaXNsb3dlcihjaCkpCisJCQljaCA9IHRvdXBwZXIoY2gpOworCQlzd2l0Y2ggKGNoKSB7CisJCWNhc2UgJ1cnOiAgdG1wICo9IDc7CS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdEJzogIHRtcCAqPSAyNDsJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ0gnOiAgdG1wICo9IDYwOwkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnTSc6ICB0bXAgKj0gNjA7CS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdTJzogIGJyZWFrOworCQlkZWZhdWx0OiAgIGdvdG8gZWludmFsOworCQl9CisJCXR0bCArPSB0bXA7CisJCXRtcCA9IDA7CisJCWRpZ2l0cyA9IDA7CisJCWRpcnR5ID0gMTsKKwl9CisJaWYgKGRpZ2l0cyA+IDApIHsKKwkJaWYgKGRpcnR5KQorCQkJZ290byBlaW52YWw7CisJCWVsc2UKKwkJCXR0bCArPSB0bXA7CisJfSBlbHNlIGlmICghZGlydHkpCisJCWdvdG8gZWludmFsOworCSpkc3QgPSB0dGw7CisJcmV0dXJuICgwKTsKKworIGVpbnZhbDoKKwllcnJubyA9IEVJTlZBTDsKKwlyZXR1cm4gKC0xKTsKK30KKyNlbmRpZgorCisvKiBQcml2YXRlLiAqLworCitzdGF0aWMgaW50CitmbXQxKGludCB0LCBjaGFyIHMsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKSB7CisJY2hhciB0bXBbNTBdOworCXNpemVfdCBsZW47CisKKwlsZW4gPSBTUFJJTlRGKCh0bXAsICIlZCVjIiwgdCwgcykpOworCWlmIChsZW4gKyAxID4gKmJ1ZmxlbikKKwkJcmV0dXJuICgtMSk7CisJc3RyY3B5KCpidWYsIHRtcCk7CisJKmJ1ZiArPSBsZW47CisJKmJ1ZmxlbiAtPSBsZW47CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvZG5zL25ldC9iYXNlNjQuYyBiL2xpYmMvZG5zL25ldC9iYXNlNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODg2OTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvbmV0L2Jhc2U2NC5jCkBAIC0wLDAgKzEsMzQwIEBACisvKgkkTmV0QlNEOiBiYXNlNjQuYyx2IDEuOCAyMDAyLzExLzExIDAxOjE1OjE3IHRob3JwZWogRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NiBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSU5URVJORVQgU09GVFdBUkUgQ09OU09SVElVTSBESVNDTEFJTVMKKyAqIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSU5URVJORVQgU09GVFdBUkUKKyAqIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk1IGJ5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4KKyAqCisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuIChoZXJlaW5hZnRlciBjYWxsZWQgSUJNKSBncmFudHMKKyAqIHBlcm1pc3Npb24gdW5kZXIgaXRzIGNvcHlyaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIFNvZnR3YXJlIHdpdGggb3Igd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiBhbGwgcGFyYWdyYXBocyBvZiB0aGlzIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgSUJNCisgKiBub3QgYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIG1hcmtldGluZyBvZiBhbnkgcHJvZHVjdCBpbmNvcnBvcmF0aW5nCisgKiB0aGUgU29mdHdhcmUgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLCB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLgorICoKKyAqIFRvIHRoZSBleHRlbnQgaXQgaGFzIGEgcmlnaHQgdG8gZG8gc28sIElCTSBncmFudHMgYW4gaW1tdW5pdHkgZnJvbSBzdWl0CisgKiB1bmRlciBpdHMgcGF0ZW50cywgaWYgYW55LCBmb3IgdGhlIHVzZSwgc2FsZSBvciBtYW51ZmFjdHVyZSBvZiBwcm9kdWN0cyB0bworICogdGhlIGV4dGVudCB0aGF0IHN1Y2ggcHJvZHVjdHMgYXJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgRG9tYWluIE5hbWUgU3lzdGVtCisgKiBkeW5hbWljIHVwZGF0ZXMgaW4gVENQL0lQIG5ldHdvcmtzIGJ5IG1lYW5zIG9mIHRoZSBTb2Z0d2FyZS4gIE5vIGltbXVuaXR5IGlzCisgKiBncmFudGVkIGZvciBhbnkgcHJvZHVjdCBwZXIgc2Ugb3IgZm9yIGFueSBvdGhlciBmdW5jdGlvbiBvZiBhbnkgcHJvZHVjdC4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgQU5EIElCTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLAorICogRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgQVJJU0lORworICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIElCTSBJUyBBUFBSSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK19fUkNTSUQoIiROZXRCU0Q6IGJhc2U2NC5jLHYgMS44IDIwMDIvMTEvMTEgMDE6MTU6MTcgdGhvcnBlaiBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgY29uc3QgY2hhciBCYXNlNjRbXSA9CisJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOworc3RhdGljIGNvbnN0IGNoYXIgUGFkNjQgPSAnPSc7CisKKy8qIChGcm9tIFJGQzE1MjEgYW5kIGRyYWZ0LWlldGYtZG5zc2VjLXNlY2V4dC0wMy50eHQpCisgICBUaGUgZm9sbG93aW5nIGVuY29kaW5nIHRlY2huaXF1ZSBpcyB0YWtlbiBmcm9tIFJGQyAxNTIxIGJ5IEJvcmVuc3RlaW4KKyAgIGFuZCBGcmVlZC4gIEl0IGlzIHJlcHJvZHVjZWQgaGVyZSBpbiBhIHNsaWdodGx5IGVkaXRlZCBmb3JtIGZvcgorICAgY29udmVuaWVuY2UuCisKKyAgIEEgNjUtY2hhcmFjdGVyIHN1YnNldCBvZiBVUy1BU0NJSSBpcyB1c2VkLCBlbmFibGluZyA2IGJpdHMgdG8gYmUKKyAgIHJlcHJlc2VudGVkIHBlciBwcmludGFibGUgY2hhcmFjdGVyLiAoVGhlIGV4dHJhIDY1dGggY2hhcmFjdGVyLCAiPSIsCisgICBpcyB1c2VkIHRvIHNpZ25pZnkgYSBzcGVjaWFsIHByb2Nlc3NpbmcgZnVuY3Rpb24uKQorCisgICBUaGUgZW5jb2RpbmcgcHJvY2VzcyByZXByZXNlbnRzIDI0LWJpdCBncm91cHMgb2YgaW5wdXQgYml0cyBhcyBvdXRwdXQKKyAgIHN0cmluZ3Mgb2YgNCBlbmNvZGVkIGNoYXJhY3RlcnMuIFByb2NlZWRpbmcgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBhCisgICAyNC1iaXQgaW5wdXQgZ3JvdXAgaXMgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgMyA4LWJpdCBpbnB1dCBncm91cHMuCisgICBUaGVzZSAyNCBiaXRzIGFyZSB0aGVuIHRyZWF0ZWQgYXMgNCBjb25jYXRlbmF0ZWQgNi1iaXQgZ3JvdXBzLCBlYWNoCisgICBvZiB3aGljaCBpcyB0cmFuc2xhdGVkIGludG8gYSBzaW5nbGUgZGlnaXQgaW4gdGhlIGJhc2U2NCBhbHBoYWJldC4KKworICAgRWFjaCA2LWJpdCBncm91cCBpcyB1c2VkIGFzIGFuIGluZGV4IGludG8gYW4gYXJyYXkgb2YgNjQgcHJpbnRhYmxlCisgICBjaGFyYWN0ZXJzLiBUaGUgY2hhcmFjdGVyIHJlZmVyZW5jZWQgYnkgdGhlIGluZGV4IGlzIHBsYWNlZCBpbiB0aGUKKyAgIG91dHB1dCBzdHJpbmcuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSAxOiBUaGUgQmFzZTY0IEFscGhhYmV0CisKKyAgICAgIFZhbHVlIEVuY29kaW5nICBWYWx1ZSBFbmNvZGluZyAgVmFsdWUgRW5jb2RpbmcgIFZhbHVlIEVuY29kaW5nCisgICAgICAgICAgMCBBICAgICAgICAgICAgMTcgUiAgICAgICAgICAgIDM0IGkgICAgICAgICAgICA1MSB6CisgICAgICAgICAgMSBCICAgICAgICAgICAgMTggUyAgICAgICAgICAgIDM1IGogICAgICAgICAgICA1MiAwCisgICAgICAgICAgMiBDICAgICAgICAgICAgMTkgVCAgICAgICAgICAgIDM2IGsgICAgICAgICAgICA1MyAxCisgICAgICAgICAgMyBEICAgICAgICAgICAgMjAgVSAgICAgICAgICAgIDM3IGwgICAgICAgICAgICA1NCAyCisgICAgICAgICAgNCBFICAgICAgICAgICAgMjEgViAgICAgICAgICAgIDM4IG0gICAgICAgICAgICA1NSAzCisgICAgICAgICAgNSBGICAgICAgICAgICAgMjIgVyAgICAgICAgICAgIDM5IG4gICAgICAgICAgICA1NiA0CisgICAgICAgICAgNiBHICAgICAgICAgICAgMjMgWCAgICAgICAgICAgIDQwIG8gICAgICAgICAgICA1NyA1CisgICAgICAgICAgNyBIICAgICAgICAgICAgMjQgWSAgICAgICAgICAgIDQxIHAgICAgICAgICAgICA1OCA2CisgICAgICAgICAgOCBJICAgICAgICAgICAgMjUgWiAgICAgICAgICAgIDQyIHEgICAgICAgICAgICA1OSA3CisgICAgICAgICAgOSBKICAgICAgICAgICAgMjYgYSAgICAgICAgICAgIDQzIHIgICAgICAgICAgICA2MCA4CisgICAgICAgICAxMCBLICAgICAgICAgICAgMjcgYiAgICAgICAgICAgIDQ0IHMgICAgICAgICAgICA2MSA5CisgICAgICAgICAxMSBMICAgICAgICAgICAgMjggYyAgICAgICAgICAgIDQ1IHQgICAgICAgICAgICA2MiArCisgICAgICAgICAxMiBNICAgICAgICAgICAgMjkgZCAgICAgICAgICAgIDQ2IHUgICAgICAgICAgICA2MyAvCisgICAgICAgICAxMyBOICAgICAgICAgICAgMzAgZSAgICAgICAgICAgIDQ3IHYKKyAgICAgICAgIDE0IE8gICAgICAgICAgICAzMSBmICAgICAgICAgICAgNDggdyAgICAgICAgIChwYWQpID0KKyAgICAgICAgIDE1IFAgICAgICAgICAgICAzMiBnICAgICAgICAgICAgNDkgeAorICAgICAgICAgMTYgUSAgICAgICAgICAgIDMzIGggICAgICAgICAgICA1MCB5CisKKyAgIFNwZWNpYWwgcHJvY2Vzc2luZyBpcyBwZXJmb3JtZWQgaWYgZmV3ZXIgdGhhbiAyNCBiaXRzIGFyZSBhdmFpbGFibGUKKyAgIGF0IHRoZSBlbmQgb2YgdGhlIGRhdGEgYmVpbmcgZW5jb2RlZC4gIEEgZnVsbCBlbmNvZGluZyBxdWFudHVtIGlzCisgICBhbHdheXMgY29tcGxldGVkIGF0IHRoZSBlbmQgb2YgYSBxdWFudGl0eS4gIFdoZW4gZmV3ZXIgdGhhbiAyNCBpbnB1dAorICAgYml0cyBhcmUgYXZhaWxhYmxlIGluIGFuIGlucHV0IGdyb3VwLCB6ZXJvIGJpdHMgYXJlIGFkZGVkIChvbiB0aGUKKyAgIHJpZ2h0KSB0byBmb3JtIGFuIGludGVncmFsIG51bWJlciBvZiA2LWJpdCBncm91cHMuICBQYWRkaW5nIGF0IHRoZQorICAgZW5kIG9mIHRoZSBkYXRhIGlzIHBlcmZvcm1lZCB1c2luZyB0aGUgJz0nIGNoYXJhY3Rlci4KKworICAgU2luY2UgYWxsIGJhc2U2NCBpbnB1dCBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygb2N0ZXRzLCBvbmx5IHRoZQorICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZm9sbG93aW5nIGNhc2VzIGNhbiBhcmlzZToKKworICAgICAgICgxKSB0aGUgZmluYWwgcXVhbnR1bSBvZiBlbmNvZGluZyBpbnB1dCBpcyBhbiBpbnRlZ3JhbAorICAgICAgICAgICBtdWx0aXBsZSBvZiAyNCBiaXRzOyBoZXJlLCB0aGUgZmluYWwgdW5pdCBvZiBlbmNvZGVkCisJICAgb3V0cHV0IHdpbGwgYmUgYW4gaW50ZWdyYWwgbXVsdGlwbGUgb2YgNCBjaGFyYWN0ZXJzCisJICAgd2l0aCBubyAiPSIgcGFkZGluZywKKyAgICAgICAoMikgdGhlIGZpbmFsIHF1YW50dW0gb2YgZW5jb2RpbmcgaW5wdXQgaXMgZXhhY3RseSA4IGJpdHM7CisgICAgICAgICAgIGhlcmUsIHRoZSBmaW5hbCB1bml0IG9mIGVuY29kZWQgb3V0cHV0IHdpbGwgYmUgdHdvCisJICAgY2hhcmFjdGVycyBmb2xsb3dlZCBieSB0d28gIj0iIHBhZGRpbmcgY2hhcmFjdGVycywgb3IKKyAgICAgICAoMykgdGhlIGZpbmFsIHF1YW50dW0gb2YgZW5jb2RpbmcgaW5wdXQgaXMgZXhhY3RseSAxNiBiaXRzOworICAgICAgICAgICBoZXJlLCB0aGUgZmluYWwgdW5pdCBvZiBlbmNvZGVkIG91dHB1dCB3aWxsIGJlIHRocmVlCisJICAgY2hhcmFjdGVycyBmb2xsb3dlZCBieSBvbmUgIj0iIHBhZGRpbmcgY2hhcmFjdGVyLgorICAgKi8KKworaW50CitiNjRfbnRvcChzcmMsIHNyY2xlbmd0aCwgdGFyZ2V0LCB0YXJnc2l6ZSkKKwl1X2NoYXIgY29uc3QgKnNyYzsKKwlzaXplX3Qgc3JjbGVuZ3RoOworCWNoYXIgKnRhcmdldDsKKwlzaXplX3QgdGFyZ3NpemU7Cit7CisJc2l6ZV90IGRhdGFsZW5ndGggPSAwOworCXVfY2hhciBpbnB1dFszXSA9IHsgMCwgMCwgMCB9OyAgLyogbWFrZSBjb21waWxlciBoYXBweSAqLworCXVfY2hhciBvdXRwdXRbNF07CisJc2l6ZV90IGk7CisKKwlhc3NlcnQoc3JjICE9IE5VTEwpOworCWFzc2VydCh0YXJnZXQgIT0gTlVMTCk7CisKKwl3aGlsZSAoMiA8IHNyY2xlbmd0aCkgeworCQlpbnB1dFswXSA9ICpzcmMrKzsKKwkJaW5wdXRbMV0gPSAqc3JjKys7CisJCWlucHV0WzJdID0gKnNyYysrOworCQlzcmNsZW5ndGggLT0gMzsKKworCQlvdXRwdXRbMF0gPSAodV9pbnQzMl90KWlucHV0WzBdID4+IDI7CisJCW91dHB1dFsxXSA9ICgodV9pbnQzMl90KShpbnB1dFswXSAmIDB4MDMpIDw8IDQpICsKKwkJICAgICgodV9pbnQzMl90KWlucHV0WzFdID4+IDQpOworCQlvdXRwdXRbMl0gPSAoKHVfaW50MzJfdCkoaW5wdXRbMV0gJiAweDBmKSA8PCAyKSArCisJCSAgICAoKHVfaW50MzJfdClpbnB1dFsyXSA+PiA2KTsKKwkJb3V0cHV0WzNdID0gaW5wdXRbMl0gJiAweDNmOworCQlhc3NlcnQob3V0cHV0WzBdIDwgNjQpOworCQlhc3NlcnQob3V0cHV0WzFdIDwgNjQpOworCQlhc3NlcnQob3V0cHV0WzJdIDwgNjQpOworCQlhc3NlcnQob3V0cHV0WzNdIDwgNjQpOworCisJCWlmIChkYXRhbGVuZ3RoICsgNCA+IHRhcmdzaXplKQorCQkJcmV0dXJuICgtMSk7CisJCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFswXV07CisJCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFsxXV07CisJCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFsyXV07CisJCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFszXV07CisJfQorCisJLyogTm93IHdlIHdvcnJ5IGFib3V0IHBhZGRpbmcuICovCisJaWYgKDAgIT0gc3JjbGVuZ3RoKSB7CisJCS8qIEdldCB3aGF0J3MgbGVmdC4gKi8KKwkJaW5wdXRbMF0gPSBpbnB1dFsxXSA9IGlucHV0WzJdID0gJ1wwJzsKKwkJZm9yIChpID0gMDsgaSA8IHNyY2xlbmd0aDsgaSsrKQorCQkJaW5wdXRbaV0gPSAqc3JjKys7CisKKwkJb3V0cHV0WzBdID0gKHVfaW50MzJfdClpbnB1dFswXSA+PiAyOworCQlvdXRwdXRbMV0gPSAoKHVfaW50MzJfdCkoaW5wdXRbMF0gJiAweDAzKSA8PCA0KSArCisJCSAgICAoKHVfaW50MzJfdClpbnB1dFsxXSA+PiA0KTsKKwkJb3V0cHV0WzJdID0gKCh1X2ludDMyX3QpKGlucHV0WzFdICYgMHgwZikgPDwgMikgKworCQkgICAgKCh1X2ludDMyX3QpaW5wdXRbMl0gPj4gNik7CisJCWFzc2VydChvdXRwdXRbMF0gPCA2NCk7CisJCWFzc2VydChvdXRwdXRbMV0gPCA2NCk7CisJCWFzc2VydChvdXRwdXRbMl0gPCA2NCk7CisKKwkJaWYgKGRhdGFsZW5ndGggKyA0ID4gdGFyZ3NpemUpCisJCQlyZXR1cm4gKC0xKTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzBdXTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzFdXTsKKwkJaWYgKHNyY2xlbmd0aCA9PSAxKQorCQkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBQYWQ2NDsKKwkJZWxzZQorCQkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzJdXTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBQYWQ2NDsKKwl9CisJaWYgKGRhdGFsZW5ndGggPj0gdGFyZ3NpemUpCisJCXJldHVybiAoLTEpOworCXRhcmdldFtkYXRhbGVuZ3RoXSA9ICdcMCc7CS8qIFJldHVybmVkIHZhbHVlIGRvZXNuJ3QgY291bnQgXDAuICovCisJcmV0dXJuIChkYXRhbGVuZ3RoKTsKK30KKworLyogc2tpcHMgYWxsIHdoaXRlc3BhY2UgYW55d2hlcmUuCisgICBjb252ZXJ0cyBjaGFyYWN0ZXJzLCBmb3VyIGF0IGEgdGltZSwgc3RhcnRpbmcgYXQgKG9yIGFmdGVyKQorICAgc3JjIGZyb20gYmFzZSAtIDY0IG51bWJlcnMgaW50byB0aHJlZSA4IGJpdCBieXRlcyBpbiB0aGUgdGFyZ2V0IGFyZWEuCisgICBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF0YSBieXRlcyBzdG9yZWQgYXQgdGhlIHRhcmdldCwgb3IgLTEgb24gZXJyb3IuCisgKi8KKworaW50CitiNjRfcHRvbihzcmMsIHRhcmdldCwgdGFyZ3NpemUpCisJY2hhciBjb25zdCAqc3JjOworCXVfY2hhciAqdGFyZ2V0OworCXNpemVfdCB0YXJnc2l6ZTsKK3sKKwlzaXplX3QgdGFyaW5kZXg7CisJaW50IHN0YXRlLCBjaDsKKwljaGFyICpwb3M7CisKKwlhc3NlcnQoc3JjICE9IE5VTEwpOworCWFzc2VydCh0YXJnZXQgIT0gTlVMTCk7CisKKwlzdGF0ZSA9IDA7CisJdGFyaW5kZXggPSAwOworCisJd2hpbGUgKChjaCA9ICh1X2NoYXIpICpzcmMrKykgIT0gJ1wwJykgeworCQlpZiAoaXNzcGFjZShjaCkpCS8qIFNraXAgd2hpdGVzcGFjZSBhbnl3aGVyZS4gKi8KKwkJCWNvbnRpbnVlOworCisJCWlmIChjaCA9PSBQYWQ2NCkKKwkJCWJyZWFrOworCisJCXBvcyA9IHN0cmNocihCYXNlNjQsIGNoKTsKKwkJaWYgKHBvcyA9PSAwKSAJCS8qIEEgbm9uLWJhc2U2NCBjaGFyYWN0ZXIuICovCisJCQlyZXR1cm4gKC0xKTsKKworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgMDoKKwkJCWlmICh0YXJnZXQpIHsKKwkJCQlpZiAodGFyaW5kZXggPj0gdGFyZ3NpemUpCisJCQkJCXJldHVybiAoLTEpOworCQkJCXRhcmdldFt0YXJpbmRleF0gPSAocG9zIC0gQmFzZTY0KSA8PCAyOworCQkJfQorCQkJc3RhdGUgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlmICh0YXJnZXQpIHsKKwkJCQlpZiAodGFyaW5kZXggKyAxID49IHRhcmdzaXplKQorCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl0YXJnZXRbdGFyaW5kZXhdIHw9CisJCQkJICAgICh1X2ludDMyX3QpKHBvcyAtIEJhc2U2NCkgPj4gNDsKKwkJCQl0YXJnZXRbdGFyaW5kZXgrMV0gID0gKChwb3MgLSBCYXNlNjQpICYgMHgwZikKKwkJCQkJCQk8PCA0IDsKKwkJCX0KKwkJCXRhcmluZGV4Kys7CisJCQlzdGF0ZSA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaWYgKHRhcmdldCkgeworCQkJCWlmICh0YXJpbmRleCArIDEgPj0gdGFyZ3NpemUpCisJCQkJCXJldHVybiAoLTEpOworCQkJCXRhcmdldFt0YXJpbmRleF0gfD0KKwkJCQkJKHVfaW50MzJfdCkocG9zIC0gQmFzZTY0KSA+PiAyOworCQkJCXRhcmdldFt0YXJpbmRleCsxXSA9ICgocG9zIC0gQmFzZTY0KSAmIDB4MDMpCisJCQkJCQkJPDwgNjsKKwkJCX0KKwkJCXRhcmluZGV4Kys7CisJCQlzdGF0ZSA9IDM7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJaWYgKHRhcmdldCkgeworCQkJCWlmICh0YXJpbmRleCA+PSB0YXJnc2l6ZSkKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJdGFyZ2V0W3RhcmluZGV4XSB8PSAocG9zIC0gQmFzZTY0KTsKKwkJCX0KKwkJCXRhcmluZGV4Kys7CisJCQlzdGF0ZSA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFib3J0KCk7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGFyZSBkb25lIGRlY29kaW5nIEJhc2UtNjQgY2hhcnMuICBMZXQncyBzZWUgaWYgd2UgZW5kZWQKKwkgKiBvbiBhIGJ5dGUgYm91bmRhcnksIGFuZC9vciB3aXRoIGVycm9uZW91cyB0cmFpbGluZyBjaGFyYWN0ZXJzLgorCSAqLworCisJaWYgKGNoID09IFBhZDY0KSB7CQkvKiBXZSBnb3QgYSBwYWQgY2hhci4gKi8KKwkJY2ggPSAqc3JjKys7CQkvKiBTa2lwIGl0LCBnZXQgbmV4dC4gKi8KKwkJc3dpdGNoIChzdGF0ZSkgeworCQljYXNlIDA6CQkvKiBJbnZhbGlkID0gaW4gZmlyc3QgcG9zaXRpb24gKi8KKwkJY2FzZSAxOgkJLyogSW52YWxpZCA9IGluIHNlY29uZCBwb3NpdGlvbiAqLworCQkJcmV0dXJuICgtMSk7CisKKwkJY2FzZSAyOgkJLyogVmFsaWQsIG1lYW5zIG9uZSBieXRlIG9mIGluZm8gKi8KKwkJCS8qIFNraXAgYW55IG51bWJlciBvZiBzcGFjZXMuICovCisJCQlmb3IgKDsgY2ggIT0gJ1wwJzsgY2ggPSAodV9jaGFyKSAqc3JjKyspCisJCQkJaWYgKCFpc3NwYWNlKGNoKSkKKwkJCQkJYnJlYWs7CisJCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgYW5vdGhlciB0cmFpbGluZyA9IHNpZ24uICovCisJCQlpZiAoY2ggIT0gUGFkNjQpCisJCQkJcmV0dXJuICgtMSk7CisJCQljaCA9ICpzcmMrKzsJCS8qIFNraXAgdGhlID0gKi8KKwkJCS8qIEZhbGwgdGhyb3VnaCB0byAic2luZ2xlIHRyYWlsaW5nID0iIGNhc2UuICovCisJCQkvKiBGQUxMVEhST1VHSCAqLworCisJCWNhc2UgMzoJCS8qIFZhbGlkLCBtZWFucyB0d28gYnl0ZXMgb2YgaW5mbyAqLworCQkJLyoKKwkJCSAqIFdlIGtub3cgdGhpcyBjaGFyIGlzIGFuID0uICBJcyB0aGVyZSBhbnl0aGluZyBidXQKKwkJCSAqIHdoaXRlc3BhY2UgYWZ0ZXIgaXQ/CisJCQkgKi8KKwkJCWZvciAoOyBjaCAhPSAnXDAnOyBjaCA9ICh1X2NoYXIpICpzcmMrKykKKwkJCQlpZiAoIWlzc3BhY2UoY2gpKQorCQkJCQlyZXR1cm4gKC0xKTsKKworCQkJLyoKKwkJCSAqIE5vdyBtYWtlIHN1cmUgZm9yIGNhc2VzIDIgYW5kIDMgdGhhdCB0aGUgImV4dHJhIgorCQkJICogYml0cyB0aGF0IHNsb3BwZWQgcGFzdCB0aGUgbGFzdCBmdWxsIGJ5dGUgd2VyZQorCQkJICogemVyb3MuICBJZiB3ZSBkb24ndCBjaGVjayB0aGVtLCB0aGV5IGJlY29tZSBhCisJCQkgKiBzdWJsaW1pbmFsIGNoYW5uZWwuCisJCQkgKi8KKwkJCWlmICh0YXJnZXQgJiYgdGFyZ2V0W3RhcmluZGV4XSAhPSAwKQorCQkJCXJldHVybiAoLTEpOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2UgZW5kZWQgYnkgc2VlaW5nIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gIE1ha2Ugc3VyZSB3ZQorCQkgKiBoYXZlIG5vIHBhcnRpYWwgYnl0ZXMgbHlpbmcgYXJvdW5kLgorCQkgKi8KKwkJaWYgKHN0YXRlICE9IDApCisJCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKHRhcmluZGV4KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvZG5zL25ldC9nZXRhZGRyaW5mby5jIGIvbGliYy9kbnMvbmV0L2dldGFkZHJpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzNmMyMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL25ldC9nZXRhZGRyaW5mby5jCkBAIC0wLDAgKzEsMjQ1MiBAQAorLyoJJE5ldEJTRDogZ2V0YWRkcmluZm8uYyx2IDEuODIgMjAwNi8wMy8yNSAxMjowOTo0MCBycGF1bG8gRXhwICQJKi8KKy8qCSRLQU1FOiBnZXRhZGRyaW5mby5jLHYgMS4yOSAyMDAwLzA4LzMxIDE3OjI2OjU3IGl0b2p1biBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCBhbmQgMTk5OCBXSURFIFByb2plY3QuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogSXNzdWVzIHRvIGJlIGRpc2N1c3NlZDoKKyAqIC0gVGhyZWFkIHNhZmUtbmVzcyBtdXN0IGJlIGNoZWNrZWQuCisgKiAtIFJldHVybiB2YWx1ZXMuICBUaGVyZSBhcmUgbm9uc3RhbmRhcmQgcmV0dXJuIHZhbHVlcyBkZWZpbmVkIGFuZCB1c2VkCisgKiAgIGluIHRoZSBzb3VyY2UgY29kZS4gIFRoaXMgaXMgYmVjYXVzZSBSRkMyNTUzIGlzIHNpbGVudCBhYm91dCB3aGljaCBlcnJvcgorICogICBjb2RlIG11c3QgYmUgcmV0dXJuZWQgZm9yIHdoaWNoIHNpdHVhdGlvbi4KKyAqIC0gSVB2NCBjbGFzc2Z1bCAoc2hvcnRlbmVkKSBmb3JtLiAgUkZDMjU1MyBpcyBzaWxlbnQgYWJvdXQgaXQuICBYTkVUIDUuMgorICogICBzYXlzIHRvIHVzZSBpbmV0X2F0b24oKSB0byBjb252ZXJ0IElQdjQgbnVtZXJpYyB0byBiaW5hcnkgKGFsb3dzCisgKiAgIGNsYXNzZnVsIGZvcm0gYXMgYSByZXN1bHQpLgorICogICBjdXJyZW50IGNvZGUgLSBkaXNhbGxvdyBjbGFzc2Z1bCBmb3JtIGZvciBJUHY0IChkdWUgdG8gdXNlIG9mIGluZXRfcHRvbikuCisgKiAtIGZyZWVhZGRyaW5mbyhOVUxMKS4gIFJGQzI1NTMgaXMgc2lsZW50IGFib3V0IGl0LiAgWE5FVCA1LjIgc2F5cyBpdCBpcworICogICBpbnZhbGlkLgorICogICBjdXJyZW50IGNvZGUgLSBTRUdWIG9uIGZyZWVhZGRyaW5mbyhOVUxMKQorICogTm90ZToKKyAqIC0gV2UgdXNlIGdldGlwbm9kZWJ5bmFtZSgpIGp1c3QgZm9yIHRocmVhZC1zYWZlbmVzcy4gIFRoZXJlJ3Mgbm8gaW50ZW50CisgKiAgIHRvIGxldCBpdCBkbyBQRl9VTlNQRUMgKGFjdHVhbGx5IHdlIG5ldmVyIHBhc3MgUEZfVU5TUEVDIHRvCisgKiAgIGdldGlwbm9kZWJ5bmFtZSgpLgorICogLSBUaGUgY29kZSBmaWx0ZXJzIG91dCBBRnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsLAorICogICB3aGVuIGdsb2JiaW5nIE5VTEwgaG9zdG5hbWUgKHRvIGxvb3BiYWNrLCBvciB3aWxkY2FyZCkuICBJcyBpdCB0aGUgcmlnaHQKKyAqICAgdGhpbmcgdG8gZG8/ICBXaGF0IGlzIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBwb3N0LVJGQzI1NTMgQUlfQUREUkNPTkZJRworICogICBpbiBhaV9mbGFncz8KKyAqIC0gKHBvc3QtMjU1Mykgc2VtYW50aWNzIG9mIEFJX0FERFJDT05GSUcgaXRzZWxmIGlzIHRvbyB2YWd1ZS4KKyAqICAgKDEpIHdoYXQgc2hvdWxkIHdlIGRvIGFnYWluc3QgbnVtZXJpYyBob3N0bmFtZSAoMikgd2hhdCBzaG91bGQgd2UgZG8KKyAqICAgYWdhaW5zdCBOVUxMIGhvc3RuYW1lICgzKSB3aGF0IGlzIEFJX0FERFJDT05GSUcgaXRzZWxmLiAgQUYgbm90IHJlYWR5PworICogICBub24tbG9vcGJhY2sgYWRkcmVzcyBjb25maWd1cmVkPyAgZ2xvYmFsIGFkZHJlc3MgY29uZmlndXJlZD8KKyAqIC0gVG8gYXZvaWQgc2VhcmNoIG9yZGVyIGlzc3VlLCB3ZSBoYXZlIGEgYmlnIGFtb3VudCBvZiBjb2RlIGR1cGxpY2F0ZQorICogICBmcm9tIGdldGhuYW1hZGRyLmMgYW5kIHNvbWUgb3RoZXIgcGxhY2VzLiAgVGhlIGlzc3VlcyB0aGF0IHRoZXJlJ3Mgbm8KKyAqICAgbG93ZXIgbGF5ZXIgZnVuY3Rpb24gdG8gbG9va3VwICJJUHY0IG9yIElQdjYiIHJlY29yZC4gIENhbGxpbmcKKyAqICAgZ2V0aG9zdGJ5bmFtZTIgZnJvbSBnZXRhZGRyaW5mbyB3aWxsIGVuZCB1cCBpbiB3cm9uZyBzZWFyY2ggb3JkZXIsIGFzCisgKiAgIGZvbGxvd3M6CisgKgktIFRoZSBjb2RlIG1ha2VzIHVzZSBvZiBmb2xsb3dpbmcgY2FsbHMgd2hlbiBhc2tlZCB0byByZXNvbHZlciB3aXRoCisgKgkgIGFpX2ZhbWlseSAgPSBQRl9VTlNQRUM6CisgKgkJZ2V0aXBub2RlYnluYW1lKGhvc3QsIEFGX0lORVQ2KTsKKyAqCQlnZXRpcG5vZGVieW5hbWUoaG9zdCwgQUZfSU5FVCk7CisgKgkgIFRoaXMgd2lsbCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBxdWVyaWVzIGlmIHRoZSBub2RlIGlzIGNvbmZpZ3VyZSB0bworICoJICBwcmVmZXIgL2V0Yy9ob3N0cyB0aGFuIEROUzoKKyAqCQlsb29rdXAgL2V0Yy9ob3N0cyBmb3IgSVB2NiBhZGRyZXNzCisgKgkJbG9va3VwIEROUyBmb3IgSVB2NiBhZGRyZXNzCisgKgkJbG9va3VwIC9ldGMvaG9zdHMgZm9yIElQdjQgYWRkcmVzcworICoJCWxvb2t1cCBETlMgZm9yIElQdjQgYWRkcmVzcworICoJICB3aGljaCBtYXkgbm90IG1lZXQgcGVvcGxlJ3MgcmVxdWlyZW1lbnQuCisgKgkgIFRoZSByaWdodCB0aGluZyB0byBoYXBwZW4gaXMgdG8gaGF2ZSB1bmRlcmx5aW5nIGxheWVyIHdoaWNoIGRvZXMKKyAqCSAgUEZfVU5TUEVDIGxvb2t1cCAobG9va3VwIGJvdGgpIGFuZCByZXR1cm4gY2hhaW4gb2YgYWRkcmluZm9zLgorICoJICBUaGlzIHdvdWxkIHJlc3VsdCBpbiBhIGJpdCBvZiBjb2RlIGR1cGxpY2F0ZSB3aXRoIF9kbnNfZ2hieW5hbWUoKSBhbmQKKyAqCSAgZnJpZW5kcy4KKyAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSAiTmV0ZENsaWVudERpc3BhdGNoLmgiCisjaW5jbHVkZSAicmVzb2x2X2NhY2hlLmgiCisjaW5jbHVkZSAicmVzb2x2X25ldGlkLmgiCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJuc3N3aXRjaC5oIgorCisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisjZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCisKK3R5cGVkZWYgdW5pb24gc29ja2FkZHJfdW5pb24geworICAgIHN0cnVjdCBzb2NrYWRkciAgICAgZ2VuZXJpYzsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gIGluOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgaW42OworfSBzb2NrYWRkcl91bmlvbjsKKworI2RlZmluZSBTVUNDRVNTIDAKKyNkZWZpbmUgQU5ZIDAKKyNkZWZpbmUgWUVTIDEKKyNkZWZpbmUgTk8gIDAKKworc3RhdGljIGNvbnN0IGNoYXIgaW5fYWRkcmFueVtdID0geyAwLCAwLCAwLCAwIH07CitzdGF0aWMgY29uc3QgY2hhciBpbl9sb29wYmFja1tdID0geyAxMjcsIDAsIDAsIDEgfTsKKyNpZmRlZiBJTkVUNgorc3RhdGljIGNvbnN0IGNoYXIgaW42X2FkZHJhbnlbXSA9IHsKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCit9Oworc3RhdGljIGNvbnN0IGNoYXIgaW42X2xvb3BiYWNrW10gPSB7CisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMQorfTsKKyNlbmRpZgorCisvLyBUaGlzIHNob3VsZCBiZSBzeW5jaHJvbml6ZWQgdG8gUmVzcG9uc2VDb2RlLmgKK3N0YXRpYyBjb25zdCBpbnQgRG5zUHJveHlRdWVyeVJlc3VsdCA9IDIyMjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZmQgeworCWludCBhX2FmOworCWludCBhX2FkZHJsZW47CisJaW50IGFfc29ja2xlbjsKKwlpbnQgYV9vZmY7CisJY29uc3QgY2hhciAqYV9hZGRyYW55OworCWNvbnN0IGNoYXIgKmFfbG9vcGJhY2s7CisJaW50IGFfc2NvcGVkOworfSBhZmRsIFtdID0geworI2lmZGVmIElORVQ2CisJe1BGX0lORVQ2LCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwKKwkgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpLAorCSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW42LCBzaW42X2FkZHIpLAorCSBpbjZfYWRkcmFueSwgaW42X2xvb3BiYWNrLCAxfSwKKyNlbmRpZgorCXtQRl9JTkVULCBzaXplb2Yoc3RydWN0IGluX2FkZHIpLAorCSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSwKKwkgb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX2luLCBzaW5fYWRkciksCisJIGluX2FkZHJhbnksIGluX2xvb3BiYWNrLCAwfSwKKwl7MCwgMCwgMCwgMCwgTlVMTCwgTlVMTCwgMH0sCit9OworCitzdHJ1Y3QgZXhwbG9yZSB7CisJaW50IGVfYWY7CisJaW50IGVfc29ja3R5cGU7CisJaW50IGVfcHJvdG9jb2w7CisJY29uc3QgY2hhciAqZV9wcm90b3N0cjsKKwlpbnQgZV93aWxkOworI2RlZmluZSBXSUxEX0FGKGV4KQkJKChleCktPmVfd2lsZCAmIDB4MDEpCisjZGVmaW5lIFdJTERfU09DS1RZUEUoZXgpCSgoZXgpLT5lX3dpbGQgJiAweDAyKQorI2RlZmluZSBXSUxEX1BST1RPQ09MKGV4KQkoKGV4KS0+ZV93aWxkICYgMHgwNCkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwbG9yZSBleHBsb3JlW10gPSB7CisjaWYgMAorCXsgUEZfTE9DQUwsIDAsIEFOWSwgQU5ZLCBOVUxMLCAweDAxIH0sCisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXsgUEZfSU5FVDYsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAidWRwIiwgMHgwNyB9LAorCXsgUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgInRjcCIsIDB4MDcgfSwKKwl7IFBGX0lORVQ2LCBTT0NLX1JBVywgQU5ZLCBOVUxMLCAweDA1IH0sCisjZW5kaWYKKwl7IFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAidWRwIiwgMHgwNyB9LAorCXsgUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAidGNwIiwgMHgwNyB9LAorCXsgUEZfSU5FVCwgU09DS19SQVcsIEFOWSwgTlVMTCwgMHgwNSB9LAorCXsgUEZfVU5TUEVDLCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgInVkcCIsIDB4MDcgfSwKKwl7IFBGX1VOU1BFQywgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAidGNwIiwgMHgwNyB9LAorCXsgUEZfVU5TUEVDLCBTT0NLX1JBVywgQU5ZLCBOVUxMLCAweDA1IH0sCisJeyAtMSwgMCwgMCwgTlVMTCwgMCB9LAorfTsKKworI2lmZGVmIElORVQ2CisjZGVmaW5lIFBUT05fTUFYCTE2CisjZWxzZQorI2RlZmluZSBQVE9OX01BWAk0CisjZW5kaWYKKworc3RhdGljIGNvbnN0IG5zX3NyYyBkZWZhdWx0X2Ruc19maWxlc1tdID0geworCXsgTlNTUkNfRklMRVMsIAlOU19TVUNDRVNTIH0sCisJeyBOU1NSQ19ETlMsIAlOU19TVUNDRVNTIH0sCisJeyAwLCAwIH0KK307CisKKyNkZWZpbmUgTUFYUEFDS0VUCSg2NCoxMDI0KQorCit0eXBlZGVmIHVuaW9uIHsKKwlIRUFERVIgaGRyOworCXVfY2hhciBidWZbTUFYUEFDS0VUXTsKK30gcXVlcnlidWY7CisKK3N0cnVjdCByZXNfdGFyZ2V0IHsKKwlzdHJ1Y3QgcmVzX3RhcmdldCAqbmV4dDsKKwljb25zdCBjaGFyICpuYW1lOwkvKiBkb21haW4gbmFtZSAqLworCWludCBxY2xhc3MsIHF0eXBlOwkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLworCXVfY2hhciAqYW5zd2VyOwkJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KKwlpbnQgYW5zbGVuOwkJLyogc2l6ZSBvZiBhbnN3ZXIgYnVmZmVyICovCisJaW50IG47CQkJLyogcmVzdWx0IGxlbmd0aCAqLworfTsKKworc3RhdGljIGludCBzdHIybnVtYmVyKGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50IGV4cGxvcmVfZnFkbihjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLAorCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqLCB1bnNpZ25lZCBuZXRpZCwgdW5zaWduZWQgbWFyayk7CitzdGF0aWMgaW50IGV4cGxvcmVfbnVsbChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwKKwljb25zdCBjaGFyICosIHN0cnVjdCBhZGRyaW5mbyAqKik7CitzdGF0aWMgaW50IGV4cGxvcmVfbnVtZXJpYyhjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLAorCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqLCBjb25zdCBjaGFyICopOworc3RhdGljIGludCBleHBsb3JlX251bWVyaWNfc2NvcGUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKiwKKwljb25zdCBjaGFyICosIHN0cnVjdCBhZGRyaW5mbyAqKik7CitzdGF0aWMgaW50IGdldF9jYW5vbm5hbWUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICosCisJc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgc3RydWN0IGFkZHJpbmZvICpnZXRfYWkoY29uc3Qgc3RydWN0IGFkZHJpbmZvICosCisJY29uc3Qgc3RydWN0IGFmZCAqLCBjb25zdCBjaGFyICopOworc3RhdGljIGludCBnZXRfcG9ydG1hdGNoKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBjb25zdCBjaGFyICopOworc3RhdGljIGludCBnZXRfcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLCBpbnQpOworc3RhdGljIGNvbnN0IHN0cnVjdCBhZmQgKmZpbmRfYWZkKGludCk7CisjaWZkZWYgSU5FVDYKK3N0YXRpYyBpbnQgaXA2X3N0cjJzY29wZWlkKGNoYXIgKiwgc3RydWN0IHNvY2thZGRyX2luNiAqLCB1X2ludDMyX3QgKik7CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBhZGRyaW5mbyAqZ2V0YW5zd2VyKGNvbnN0IHF1ZXJ5YnVmICosIGludCwgY29uc3QgY2hhciAqLCBpbnQsCisJY29uc3Qgc3RydWN0IGFkZHJpbmZvICopOworc3RhdGljIGludCBfZG5zX2dldGFkZHJpbmZvKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKK3N0YXRpYyB2b2lkIF9zZXRodGVudChGSUxFICoqKTsKK3N0YXRpYyB2b2lkIF9lbmRodGVudChGSUxFICoqKTsKK3N0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKl9nZXRodGVudChGSUxFICoqLCBjb25zdCBjaGFyICosCisgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICopOworc3RhdGljIGludCBfZmlsZXNfZ2V0YWRkcmluZm8odm9pZCAqLCB2b2lkICosIHZhX2xpc3QpOworCitzdGF0aWMgaW50IHJlc19xdWVyeU4oY29uc3QgY2hhciAqLCBzdHJ1Y3QgcmVzX3RhcmdldCAqLCByZXNfc3RhdGUpOworc3RhdGljIGludCByZXNfc2VhcmNoTihjb25zdCBjaGFyICosIHN0cnVjdCByZXNfdGFyZ2V0ICosIHJlc19zdGF0ZSk7CitzdGF0aWMgaW50IHJlc19xdWVyeWRvbWFpbk4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJc3RydWN0IHJlc190YXJnZXQgKiwgcmVzX3N0YXRlKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhaV9lcnJsaXN0W10gPSB7CisJIlN1Y2Nlc3MiLAorCSJBZGRyZXNzIGZhbWlseSBmb3IgaG9zdG5hbWUgbm90IHN1cHBvcnRlZCIsCS8qIEVBSV9BRERSRkFNSUxZICovCisJIlRlbXBvcmFyeSBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbiIsCQkvKiBFQUlfQUdBSU4gICAgICAqLworCSJJbnZhbGlkIHZhbHVlIGZvciBhaV9mbGFncyIsCQkgICAgICAgCS8qIEVBSV9CQURGTEFHUyAgICovCisJIk5vbi1yZWNvdmVyYWJsZSBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbiIsIAkvKiBFQUlfRkFJTCAgICAgICAqLworCSJhaV9mYW1pbHkgbm90IHN1cHBvcnRlZCIsCQkJLyogRUFJX0ZBTUlMWSAgICAgKi8KKwkiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIsIAkJCS8qIEVBSV9NRU1PUlkgICAgICovCisJIk5vIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIGhvc3RuYW1lIiwgCQkvKiBFQUlfTk9EQVRBICAgICAqLworCSJob3N0bmFtZSBub3Igc2Vydm5hbWUgcHJvdmlkZWQsIG9yIG5vdCBrbm93biIsCS8qIEVBSV9OT05BTUUgICAgICovCisJInNlcnZuYW1lIG5vdCBzdXBwb3J0ZWQgZm9yIGFpX3NvY2t0eXBlIiwJLyogRUFJX1NFUlZJQ0UgICAgKi8KKwkiYWlfc29ja3R5cGUgbm90IHN1cHBvcnRlZCIsIAkJCS8qIEVBSV9TT0NLVFlQRSAgICovCisJIlN5c3RlbSBlcnJvciByZXR1cm5lZCBpbiBlcnJubyIsIAkJLyogRUFJX1NZU1RFTSAgICAgKi8KKwkiSW52YWxpZCB2YWx1ZSBmb3IgaGludHMiLAkJCS8qIEVBSV9CQURISU5UUwkgICovCisJIlJlc29sdmVkIHByb3RvY29sIGlzIHVua25vd24iLAkJCS8qIEVBSV9QUk9UT0NPTCAgICovCisJIkFyZ3VtZW50IGJ1ZmZlciBvdmVyZmxvdyIsCQkJLyogRUFJX09WRVJGTE9XICAgKi8KKwkiVW5rbm93biBlcnJvciIsIAkJCQkvKiBFQUlfTUFYICAgICAgICAqLworfTsKKworLyogWFhYIG1hY3JvcyB0aGF0IG1ha2UgZXh0ZXJuYWwgcmVmZXJlbmNlIGlzIEJBRC4gKi8KKworI2RlZmluZSBHRVRfQUkoYWksIGFmZCwgYWRkcikgCQkJCQlcCitkbyB7IAkJCQkJCQkJXAorCS8qIGV4dGVybmFsIHJlZmVyZW5jZTogcGFpLCBlcnJvciwgYW5kIGxhYmVsIGZyZWUgKi8gCVwKKwkoYWkpID0gZ2V0X2FpKHBhaSwgKGFmZCksIChhZGRyKSk7IAkJCVwKKwlpZiAoKGFpKSA9PSBOVUxMKSB7IAkJCQkJXAorCQllcnJvciA9IEVBSV9NRU1PUlk7IAkJCQlcCisJCWdvdG8gZnJlZTsgCQkJCQlcCisJfSAJCQkJCQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgR0VUX1BPUlQoYWksIHNlcnYpIAkJCQkJXAorZG8geyAJCQkJCQkJCVwKKwkvKiBleHRlcm5hbCByZWZlcmVuY2U6IGVycm9yIGFuZCBsYWJlbCBmcmVlICovIAkJXAorCWVycm9yID0gZ2V0X3BvcnQoKGFpKSwgKHNlcnYpLCAwKTsgCQkJXAorCWlmIChlcnJvciAhPSAwKSAJCQkJCVwKKwkJZ290byBmcmVlOyAJCQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIEdFVF9DQU5PTk5BTUUoYWksIHN0cikgCQkJCQlcCitkbyB7IAkJCQkJCQkJXAorCS8qIGV4dGVybmFsIHJlZmVyZW5jZTogcGFpLCBlcnJvciBhbmQgbGFiZWwgZnJlZSAqLyAJXAorCWVycm9yID0gZ2V0X2Nhbm9ubmFtZShwYWksIChhaSksIChzdHIpKTsgCQlcCisJaWYgKGVycm9yICE9IDApIAkJCQkJXAorCQlnb3RvIGZyZWU7IAkJCQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgRVJSKGVycikgCQkJCQkJXAorZG8geyAJCQkJCQkJCVwKKwkvKiBleHRlcm5hbCByZWZlcmVuY2U6IGVycm9yLCBhbmQgbGFiZWwgYmFkICovIAkJXAorCWVycm9yID0gKGVycik7IAkJCQkJCVwKKwlnb3RvIGJhZDsgCQkJCQkJXAorCS8qTk9UUkVBQ0hFRCovIAkJCQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIE1BVENIX0ZBTUlMWSh4LCB5LCB3KSAJCQkJCQlcCisJKCh4KSA9PSAoeSkgfHwgKC8qQ09OU1RDT05EKi8odykgJiYgKCh4KSA9PSBQRl9VTlNQRUMgfHwgCVwKKwkgICAgKHkpID09IFBGX1VOU1BFQykpKQorI2RlZmluZSBNQVRDSCh4LCB5LCB3KSAJCQkJCQkJXAorCSgoeCkgPT0gKHkpIHx8ICgvKkNPTlNUQ09ORCovKHcpICYmICgoeCkgPT0gQU5ZIHx8ICh5KSA9PSBBTlkpKSkKKworY29uc3QgY2hhciAqCitnYWlfc3RyZXJyb3IoaW50IGVjb2RlKQoreworCWlmIChlY29kZSA8IDAgfHwgZWNvZGUgPiBFQUlfTUFYKQorCQllY29kZSA9IEVBSV9NQVg7CisJcmV0dXJuIGFpX2Vycmxpc3RbZWNvZGVdOworfQorCit2b2lkCitmcmVlYWRkcmluZm8oc3RydWN0IGFkZHJpbmZvICphaSkKK3sKKwlzdHJ1Y3QgYWRkcmluZm8gKm5leHQ7CisKKwlhc3NlcnQoYWkgIT0gTlVMTCk7CisKKwlkbyB7CisJCW5leHQgPSBhaS0+YWlfbmV4dDsKKwkJaWYgKGFpLT5haV9jYW5vbm5hbWUpCisJCQlmcmVlKGFpLT5haV9jYW5vbm5hbWUpOworCQkvKiBubyBuZWVkIHRvIGZyZWUoYWktPmFpX2FkZHIpICovCisJCWZyZWUoYWkpOworCQlhaSA9IG5leHQ7CisJfSB3aGlsZSAoYWkpOworfQorCitzdGF0aWMgaW50CitzdHIybnVtYmVyKGNvbnN0IGNoYXIgKnApCit7CisJY2hhciAqZXA7CisJdW5zaWduZWQgbG9uZyB2OworCisJYXNzZXJ0KHAgIT0gTlVMTCk7CisKKwlpZiAoKnAgPT0gJ1wwJykKKwkJcmV0dXJuIC0xOworCWVwID0gTlVMTDsKKwllcnJubyA9IDA7CisJdiA9IHN0cnRvdWwocCwgJmVwLCAxMCk7CisJaWYgKGVycm5vID09IDAgJiYgZXAgJiYgKmVwID09ICdcMCcgJiYgdiA8PSBVSU5UX01BWCkKKwkJcmV0dXJuIHY7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBDb25uZWN0IGEgVURQIHNvY2tldCB0byBhIGdpdmVuIHVuaWNhc3QgYWRkcmVzcy4gVGhpcyB3aWxsIGNhdXNlIG5vIG5ldHdvcmsKKyAqIHRyYWZmaWMsIGJ1dCB3aWxsIGZhaWwgZmFzdCBpZiB0aGUgc3lzdGVtIGhhcyBubyBvciBsaW1pdGVkIHJlYWNoYWJpbGl0eSB0bworICogdGhlIGRlc3RpbmF0aW9uIChlLmcuLCBubyBJUHY0IGFkZHJlc3MsIG5vIElQdjYgZGVmYXVsdCByb3V0ZSwgLi4uKS4KKyAqLworc3RhdGljIGludAorX3Rlc3RfY29ubmVjdChpbnQgcGYsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc2l6ZV90IGFkZHJsZW4sIHVuc2lnbmVkIG1hcmspIHsKKwlpbnQgcyA9IHNvY2tldChwZiwgU09DS19ER1JBTSB8IFNPQ0tfQ0xPRVhFQywgSVBQUk9UT19VRFApOworCWlmIChzIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKG1hcmsgIT0gTUFSS19VTlNFVCAmJiBzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIFNPX01BUkssICZtYXJrLCBzaXplb2YobWFyaykpIDwgMCkKKwkJcmV0dXJuIDA7CisJaW50IHJldDsKKwlkbyB7CisJCXJldCA9IF9fY29ubmVjdChzLCBhZGRyLCBhZGRybGVuKTsKKwl9IHdoaWxlIChyZXQgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKwlpbnQgc3VjY2VzcyA9IChyZXQgPT0gMCk7CisJZG8geworCQlyZXQgPSBjbG9zZShzKTsKKwl9IHdoaWxlIChyZXQgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKwlyZXR1cm4gc3VjY2VzczsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGRldGVybWluZSB3aGV0aGVyIElQdjQgb3IgSVB2NiBjb25uZWN0aXZpdHkgaXMKKyAqIGF2YWlsYWJsZSBpbiBvcmRlciB0byBpbXBsZW1lbnQgQUlfQUREUkNPTkZJRy4KKyAqCisgKiBTdHJpY3RseSBzcGVha2luZywgQUlfQUREUkNPTkZJRyBzaG91bGQgbm90IGxvb2sgYXQgd2hldGhlciBjb25uZWN0aXZpdHkgaXMKKyAqIGF2YWlsYWJsZSwgYnV0IHdoZXRoZXIgYWRkcmVzc2VzIG9mIHRoZSBzcGVjaWZpZWQgZmFtaWx5IGFyZSAiY29uZmlndXJlZAorICogb24gdGhlIGxvY2FsIHN5c3RlbSIuIEhvd2V2ZXIsIGJpb25pYyBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IGdldGlmYWRkcnMsCisgKiBzbyBjaGVja2luZyBmb3IgY29ubmVjdGl2aXR5IGlzIHRoZSBuZXh0IGJlc3QgdGhpbmcuCisgKi8KK3N0YXRpYyBpbnQKK19oYXZlX2lwdjYodW5zaWduZWQgbWFyaykgeworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjZfdGVzdCA9IHsKKwkJLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDYsCisJCS5zaW42X2FkZHIuczZfYWRkciA9IHsgIC8vIDIwMDA6OgorCQkJMHgyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH0KKwkJfTsKKwlzb2NrYWRkcl91bmlvbiBhZGRyID0geyAuaW42ID0gc2luNl90ZXN0IH07CisJcmV0dXJuIF90ZXN0X2Nvbm5lY3QoUEZfSU5FVDYsICZhZGRyLmdlbmVyaWMsIHNpemVvZihhZGRyLmluNiksIG1hcmspOworfQorCitzdGF0aWMgaW50CitfaGF2ZV9pcHY0KHVuc2lnbmVkIG1hcmspIHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luIHNpbl90ZXN0ID0geworCQkuc2luX2ZhbWlseSA9IEFGX0lORVQsCisJCS5zaW5fYWRkci5zX2FkZHIgPSBfX2NvbnN0YW50X2h0b25sKDB4MDgwODA4MDhMKSAgLy8gOC44LjguOAorCX07CisJc29ja2FkZHJfdW5pb24gYWRkciA9IHsgLmluID0gc2luX3Rlc3QgfTsKKwlyZXR1cm4gX3Rlc3RfY29ubmVjdChQRl9JTkVULCAmYWRkci5nZW5lcmljLCBzaXplb2YoYWRkci5pbiksIG1hcmspOworfQorCisvLyBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSByZXR1cm5zIG9uIGVycm9yLgorc3RhdGljIGludAorYW5kcm9pZF9nZXRhZGRyaW5mb19wcm94eSgKKyAgICBjb25zdCBjaGFyICpob3N0bmFtZSwgY29uc3QgY2hhciAqc2Vydm5hbWUsCisgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgc3RydWN0IGFkZHJpbmZvICoqcmVzLCB1bnNpZ25lZCBuZXRpZCkKK3sKKwlpbnQgc29jazsKKwljb25zdCBpbnQgb25lID0gMTsKKwlzdHJ1Y3Qgc29ja2FkZHJfdW4gcHJveHlfYWRkcjsKKwlGSUxFKiBwcm94eSA9IE5VTEw7CisJaW50IHN1Y2Nlc3MgPSAwOworCisJLy8gQ2xlYXIgdGhpcyBhdCBzdGFydCwgYXMgd2UgdXNlIGl0cyBub24tTlVMTG5lc3MgbGF0ZXIgKGluIHRoZQorCS8vIGVycm9yIHBhdGgpIHRvIGRlY2lkZSBpZiB3ZSBoYXZlIHRvIGZyZWUgdXAgYW55IG1lbW9yeSB3ZQorCS8vIGFsbG9jYXRlZCBpbiB0aGUgcHJvY2VzcyAoYmVmb3JlIGZhaWxpbmcpLgorCSpyZXMgPSBOVUxMOworCisJLy8gQm9ndXMgdGhpbmdzIHdlIGNhbid0IHNlcmlhbGl6ZS4gIERvbid0IHVzZSB0aGUgcHJveHkuICBUaGVzZSB3aWxsIGZhaWwgLSBsZXQgdGhlbS4KKwlpZiAoKGhvc3RuYW1lICE9IE5VTEwgJiYKKwkgICAgIHN0cmNzcG4oaG9zdG5hbWUsICIgXG5cclx0XidcIiIpICE9IHN0cmxlbihob3N0bmFtZSkpIHx8CisJICAgIChzZXJ2bmFtZSAhPSBOVUxMICYmCisJICAgICBzdHJjc3BuKHNlcnZuYW1lLCAiIFxuXHJcdF4nXCIiKSAhPSBzdHJsZW4oc2Vydm5hbWUpKSkgeworCQlyZXR1cm4gRUFJX05PREFUQTsKKwl9CisKKwlzb2NrID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNIHwgU09DS19DTE9FWEVDLCAwKTsKKwlpZiAoc29jayA8IDApIHsKKwkJcmV0dXJuIEVBSV9OT0RBVEE7CisJfQorCisJc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICZvbmUsIHNpemVvZihvbmUpKTsKKwltZW1zZXQoJnByb3h5X2FkZHIsIDAsIHNpemVvZihwcm94eV9hZGRyKSk7CisJcHJveHlfYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKwlzdHJsY3B5KHByb3h5X2FkZHIuc3VuX3BhdGgsICIvZGV2L3NvY2tldC9kbnNwcm94eWQiLAorCQlzaXplb2YocHJveHlfYWRkci5zdW5fcGF0aCkpOworCWlmIChURU1QX0ZBSUxVUkVfUkVUUlkoY29ubmVjdChzb2NrLAorCQkJCSAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikgJnByb3h5X2FkZHIsCisJCQkJICAgICAgIHNpemVvZihwcm94eV9hZGRyKSkpICE9IDApIHsKKwkJY2xvc2Uoc29jayk7CisJCXJldHVybiBFQUlfTk9EQVRBOworCX0KKworCW5ldGlkID0gX19uZXRkQ2xpZW50RGlzcGF0Y2gubmV0SWRGb3JSZXNvbHYobmV0aWQpOworCisJLy8gU2VuZCB0aGUgcmVxdWVzdC4KKwlwcm94eSA9IGZkb3Blbihzb2NrLCAicisiKTsKKwlpZiAoZnByaW50Zihwcm94eSwgImdldGFkZHJpbmZvICVzICVzICVkICVkICVkICVkICV1IiwKKwkJICAgIGhvc3RuYW1lID09IE5VTEwgPyAiXiIgOiBob3N0bmFtZSwKKwkJICAgIHNlcnZuYW1lID09IE5VTEwgPyAiXiIgOiBzZXJ2bmFtZSwKKwkJICAgIGhpbnRzID09IE5VTEwgPyAtMSA6IGhpbnRzLT5haV9mbGFncywKKwkJICAgIGhpbnRzID09IE5VTEwgPyAtMSA6IGhpbnRzLT5haV9mYW1pbHksCisJCSAgICBoaW50cyA9PSBOVUxMID8gLTEgOiBoaW50cy0+YWlfc29ja3R5cGUsCisJCSAgICBoaW50cyA9PSBOVUxMID8gLTEgOiBoaW50cy0+YWlfcHJvdG9jb2wsCisJCSAgICBuZXRpZCkgPCAwKSB7CisJCWdvdG8gZXhpdDsKKwl9CisJLy8gbGl0ZXJhbCBOVUxMIGJ5dGUgYXQgZW5kLCByZXF1aXJlZCBieSBGcmFtZXdvcmtMaXN0ZW5lcgorCWlmIChmcHV0YygwLCBwcm94eSkgPT0gRU9GIHx8CisJICAgIGZmbHVzaChwcm94eSkgIT0gMCkgeworCQlnb3RvIGV4aXQ7CisJfQorCisJY2hhciBidWZbNF07CisJLy8gcmVhZCByZXN1bHQgY29kZSBmb3IgZ2V0aG9zdGJ5YWRkcgorCWlmIChmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBwcm94eSkgIT0gc2l6ZW9mKGJ1ZikpIHsKKwkJZ290byBleGl0OworCX0KKworCWludCByZXN1bHRfY29kZSA9IChpbnQpc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCS8vIHZlcmlmeSB0aGUgY29kZSBpdHNlbGYKKwlpZiAocmVzdWx0X2NvZGUgIT0gRG5zUHJveHlRdWVyeVJlc3VsdCApIHsKKwkJZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgcHJveHkpOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3RydWN0IGFkZHJpbmZvKiBhaSA9IE5VTEw7CisJc3RydWN0IGFkZHJpbmZvKiogbmV4dHJlcyA9IHJlczsKKwl3aGlsZSAoMSkgeworCQl1aW50MzJfdCBhZGRyaW5mb19sZW47CisJCWlmIChmcmVhZCgmYWRkcmluZm9fbGVuLCBzaXplb2YoYWRkcmluZm9fbGVuKSwKKwkJCSAgMSwgcHJveHkpICE9IDEpIHsKKwkJCWJyZWFrOworCQl9CisJCWFkZHJpbmZvX2xlbiA9IG50b2hsKGFkZHJpbmZvX2xlbik7CisJCWlmIChhZGRyaW5mb19sZW4gPT0gMCkgeworCQkJc3VjY2VzcyA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChhZGRyaW5mb19sZW4gPCBzaXplb2Yoc3RydWN0IGFkZHJpbmZvKSkgeworCQkJYnJlYWs7CisJCX0KKwkJc3RydWN0IGFkZHJpbmZvKiBhaSA9IGNhbGxvYygxLCBhZGRyaW5mb19sZW4gKworCQkJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkpOworCQlpZiAoYWkgPT0gTlVMTCkgeworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZnJlYWQoYWksIGFkZHJpbmZvX2xlbiwgMSwgcHJveHkpICE9IDEpIHsKKwkJCS8vIEVycm9yOyBmYWxsIHRocm91Z2guCisJCQlicmVhazsKKwkJfQorCisJCS8vIFplcm8gb3V0IHRoZSBwb2ludGVyIGZpZWxkcyB3ZSBjb3BpZWQgd2hpY2ggYXJlbid0CisJCS8vIHZhbGlkIGluIHRoaXMgYWRkcmVzcyBzcGFjZS4KKwkJYWktPmFpX2FkZHIgPSBOVUxMOworCQlhaS0+YWlfY2Fub25uYW1lID0gTlVMTDsKKwkJYWktPmFpX25leHQgPSBOVUxMOworCisJCS8vIHN0cnVjdCBzb2NrYWRkcgorCQl1aW50MzJfdCBhZGRyX2xlbjsKKwkJaWYgKGZyZWFkKCZhZGRyX2xlbiwgc2l6ZW9mKGFkZHJfbGVuKSwgMSwgcHJveHkpICE9IDEpIHsKKwkJCWJyZWFrOworCQl9CisJCWFkZHJfbGVuID0gbnRvaGwoYWRkcl9sZW4pOworCQlpZiAoYWRkcl9sZW4gIT0gMCkgeworCQkJaWYgKGFkZHJfbGVuID4gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKSkgeworCQkJCS8vIEJvZ3VzOyB0b28gYmlnLgorCQkJCWJyZWFrOworCQkJfQorCQkJc3RydWN0IHNvY2thZGRyKiBhZGRyID0gKHN0cnVjdCBzb2NrYWRkciopKGFpICsgMSk7CisJCQlpZiAoZnJlYWQoYWRkciwgYWRkcl9sZW4sIDEsIHByb3h5KSAhPSAxKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlhaS0+YWlfYWRkciA9IGFkZHI7CisJCX0KKworCQkvLyBjYW5ub25uYW1lCisJCXVpbnQzMl90IG5hbWVfbGVuOworCQlpZiAoZnJlYWQoJm5hbWVfbGVuLCBzaXplb2YobmFtZV9sZW4pLCAxLCBwcm94eSkgIT0gMSkgeworCQkJYnJlYWs7CisJCX0KKwkJbmFtZV9sZW4gPSBudG9obChuYW1lX2xlbik7CisJCWlmIChuYW1lX2xlbiAhPSAwKSB7CisJCQlhaS0+YWlfY2Fub25uYW1lID0gKGNoYXIqKSBtYWxsb2MobmFtZV9sZW4pOworCQkJaWYgKGZyZWFkKGFpLT5haV9jYW5vbm5hbWUsIG5hbWVfbGVuLCAxLCBwcm94eSkgIT0gMSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGFpLT5haV9jYW5vbm5hbWVbbmFtZV9sZW4gLSAxXSAhPSAnXDAnKSB7CisJCQkJLy8gVGhlIHByb3h5IHNob3VsZCBiZSByZXR1cm5pbmcgdGhpcworCQkJCS8vIE5VTEwtdGVybWluYXRlZC4KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCSpuZXh0cmVzID0gYWk7CisJCW5leHRyZXMgPSAmYWktPmFpX25leHQ7CisJCWFpID0gTlVMTDsKKwl9CisKKwlpZiAoYWkgIT0gTlVMTCkgeworCQkvLyBDbGVhbiB1cCBwYXJ0aWFsbHktYnVpbHQgYWRkcmluZm8gdGhhdCB3ZSBuZXZlciBlbmRlZCB1cAorCQkvLyBhdHRhY2hpbmcgdG8gdGhlIHJlc3BvbnNlLgorCQlmcmVlYWRkcmluZm8oYWkpOworCX0KK2V4aXQ6CisJaWYgKHByb3h5ICE9IE5VTEwpIHsKKwkJZmNsb3NlKHByb3h5KTsKKwl9CisKKwlpZiAoc3VjY2VzcykgeworCQlyZXR1cm4gMDsKKwl9CisKKwkvLyBQcm94eSBmYWlsZWQ7CisJLy8gY2xlYW4gdXAgbWVtb3J5IHdlIG1pZ2h0J3ZlIGFsbG9jYXRlZC4KKwlpZiAoKnJlcykgeworCQlmcmVlYWRkcmluZm8oKnJlcyk7CisJCSpyZXMgPSBOVUxMOworCX0KKwlyZXR1cm4gRUFJX05PREFUQTsKK30KKworaW50CitnZXRhZGRyaW5mbyhjb25zdCBjaGFyICpob3N0bmFtZSwgY29uc3QgY2hhciAqc2Vydm5hbWUsCisgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgc3RydWN0IGFkZHJpbmZvICoqcmVzKQoreworCXJldHVybiBhbmRyb2lkX2dldGFkZHJpbmZvZm9ybmV0KGhvc3RuYW1lLCBzZXJ2bmFtZSwgaGludHMsIE5FVElEX1VOU0VULCBNQVJLX1VOU0VULCByZXMpOworfQorCitpbnQKK2FuZHJvaWRfZ2V0YWRkcmluZm9mb3JuZXQoY29uc3QgY2hhciAqaG9zdG5hbWUsIGNvbnN0IGNoYXIgKnNlcnZuYW1lLAorICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsIHVuc2lnbmVkIG5ldGlkLCB1bnNpZ25lZCBtYXJrLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisJc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsOworCXN0cnVjdCBhZGRyaW5mbyAqY3VyOworCWludCBlcnJvciA9IDA7CisJc3RydWN0IGFkZHJpbmZvIGFpOworCXN0cnVjdCBhZGRyaW5mbyBhaTA7CisJc3RydWN0IGFkZHJpbmZvICpwYWk7CisJY29uc3Qgc3RydWN0IGV4cGxvcmUgKmV4OworCWNvbnN0IGNoYXIqIGNhY2hlX21vZGUgPSBnZXRlbnYoIkFORFJPSURfRE5TX01PREUiKTsKKworCS8qIGhvc3RuYW1lIGlzIGFsbG93ZWQgdG8gYmUgTlVMTCAqLworCS8qIHNlcnZuYW1lIGlzIGFsbG93ZWQgdG8gYmUgTlVMTCAqLworCS8qIGhpbnRzIGlzIGFsbG93ZWQgdG8gYmUgTlVMTCAqLworCWFzc2VydChyZXMgIT0gTlVMTCk7CisJbWVtc2V0KCZzZW50aW5lbCwgMCwgc2l6ZW9mKHNlbnRpbmVsKSk7CisJY3VyID0gJnNlbnRpbmVsOworCXBhaSA9ICZhaTsKKwlwYWktPmFpX2ZsYWdzID0gMDsKKwlwYWktPmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKKwlwYWktPmFpX3NvY2t0eXBlID0gQU5ZOworCXBhaS0+YWlfcHJvdG9jb2wgPSBBTlk7CisJcGFpLT5haV9hZGRybGVuID0gMDsKKwlwYWktPmFpX2Nhbm9ubmFtZSA9IE5VTEw7CisJcGFpLT5haV9hZGRyID0gTlVMTDsKKwlwYWktPmFpX25leHQgPSBOVUxMOworCisJaWYgKGhvc3RuYW1lID09IE5VTEwgJiYgc2Vydm5hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIEVBSV9OT05BTUU7CisJaWYgKGhpbnRzKSB7CisJCS8qIGVycm9yIGNoZWNrIGZvciBoaW50cyAqLworCQlpZiAoaGludHMtPmFpX2FkZHJsZW4gfHwgaGludHMtPmFpX2Nhbm9ubmFtZSB8fAorCQkgICAgaGludHMtPmFpX2FkZHIgfHwgaGludHMtPmFpX25leHQpCisJCQlFUlIoRUFJX0JBREhJTlRTKTsgLyogeHh4ICovCisJCWlmIChoaW50cy0+YWlfZmxhZ3MgJiB+QUlfTUFTSykKKwkJCUVSUihFQUlfQkFERkxBR1MpOworCQlzd2l0Y2ggKGhpbnRzLT5haV9mYW1pbHkpIHsKKwkJY2FzZSBQRl9VTlNQRUM6CisJCWNhc2UgUEZfSU5FVDoKKyNpZmRlZiBJTkVUNgorCQljYXNlIFBGX0lORVQ2OgorI2VuZGlmCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUVSUihFQUlfRkFNSUxZKTsKKwkJfQorCQltZW1jcHkocGFpLCBoaW50cywgc2l6ZW9mKCpwYWkpKTsKKworCQkvKgorCQkgKiBpZiBib3RoIHNvY2t0eXBlL3Byb3RvY29sIGFyZSBzcGVjaWZpZWQsIGNoZWNrIGlmIHRoZXkKKwkJICogYXJlIG1lYW5pbmdmdWwgY29tYmluYXRpb24uCisJCSAqLworCQlpZiAocGFpLT5haV9zb2NrdHlwZSAhPSBBTlkgJiYgcGFpLT5haV9wcm90b2NvbCAhPSBBTlkpIHsKKwkJCWZvciAoZXggPSBleHBsb3JlOyBleC0+ZV9hZiA+PSAwOyBleCsrKSB7CisJCQkJaWYgKHBhaS0+YWlfZmFtaWx5ICE9IGV4LT5lX2FmKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoZXgtPmVfc29ja3R5cGUgPT0gQU5ZKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoZXgtPmVfcHJvdG9jb2wgPT0gQU5ZKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAocGFpLT5haV9zb2NrdHlwZSA9PSBleC0+ZV9zb2NrdHlwZQorCQkJCSAmJiBwYWktPmFpX3Byb3RvY29sICE9IGV4LT5lX3Byb3RvY29sKSB7CisJCQkJCUVSUihFQUlfQkFESElOVFMpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogY2hlY2sgZm9yIHNwZWNpYWwgY2FzZXMuICAoMSkgbnVtZXJpYyBzZXJ2bmFtZSBpcyBkaXNhbGxvd2VkIGlmCisJICogc29ja3R5cGUvcHJvdG9jb2wgYXJlIGxlZnQgdW5zcGVjaWZpZWQuICgyKSBzZXJ2bmFtZSBpcyBkaXNhbGxvd2VkCisJICogZm9yIHJhdyBhbmQgb3RoZXIgaW5ldHssNn0gc29ja2V0cy4KKwkgKi8KKwlpZiAoTUFUQ0hfRkFNSUxZKHBhaS0+YWlfZmFtaWx5LCBQRl9JTkVULCAxKQorI2lmZGVmIFBGX0lORVQ2CisJIHx8IE1BVENIX0ZBTUlMWShwYWktPmFpX2ZhbWlseSwgUEZfSU5FVDYsIDEpCisjZW5kaWYKKwkgICAgKSB7CisJCWFpMCA9ICpwYWk7CS8qIGJhY2t1cCAqcGFpICovCisKKwkJaWYgKHBhaS0+YWlfZmFtaWx5ID09IFBGX1VOU1BFQykgeworI2lmZGVmIFBGX0lORVQ2CisJCQlwYWktPmFpX2ZhbWlseSA9IFBGX0lORVQ2OworI2Vsc2UKKwkJCXBhaS0+YWlfZmFtaWx5ID0gUEZfSU5FVDsKKyNlbmRpZgorCQl9CisJCWVycm9yID0gZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKTsKKwkJaWYgKGVycm9yKQorCQkJRVJSKGVycm9yKTsKKworCQkqcGFpID0gYWkwOworCX0KKworCWFpMCA9ICpwYWk7CisKKwkvKiBOVUxMIGhvc3RuYW1lLCBvciBudW1lcmljIGhvc3RuYW1lICovCisJZm9yIChleCA9IGV4cGxvcmU7IGV4LT5lX2FmID49IDA7IGV4KyspIHsKKwkJKnBhaSA9IGFpMDsKKworCQkvKiBQRl9VTlNQRUMgZW50cmllcyBhcmUgcHJlcGFyZWQgZm9yIEROUyBxdWVyaWVzIG9ubHkgKi8KKwkJaWYgKGV4LT5lX2FmID09IFBGX1VOU1BFQykKKwkJCWNvbnRpbnVlOworCisJCWlmICghTUFUQ0hfRkFNSUxZKHBhaS0+YWlfZmFtaWx5LCBleC0+ZV9hZiwgV0lMRF9BRihleCkpKQorCQkJY29udGludWU7CisJCWlmICghTUFUQ0gocGFpLT5haV9zb2NrdHlwZSwgZXgtPmVfc29ja3R5cGUsIFdJTERfU09DS1RZUEUoZXgpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIU1BVENIKHBhaS0+YWlfcHJvdG9jb2wsIGV4LT5lX3Byb3RvY29sLCBXSUxEX1BST1RPQ09MKGV4KSkpCisJCQljb250aW51ZTsKKworCQlpZiAocGFpLT5haV9mYW1pbHkgPT0gUEZfVU5TUEVDKQorCQkJcGFpLT5haV9mYW1pbHkgPSBleC0+ZV9hZjsKKwkJaWYgKHBhaS0+YWlfc29ja3R5cGUgPT0gQU5ZICYmIGV4LT5lX3NvY2t0eXBlICE9IEFOWSkKKwkJCXBhaS0+YWlfc29ja3R5cGUgPSBleC0+ZV9zb2NrdHlwZTsKKwkJaWYgKHBhaS0+YWlfcHJvdG9jb2wgPT0gQU5ZICYmIGV4LT5lX3Byb3RvY29sICE9IEFOWSkKKwkJCXBhaS0+YWlfcHJvdG9jb2wgPSBleC0+ZV9wcm90b2NvbDsKKworCQlpZiAoaG9zdG5hbWUgPT0gTlVMTCkKKwkJCWVycm9yID0gZXhwbG9yZV9udWxsKHBhaSwgc2Vydm5hbWUsICZjdXItPmFpX25leHQpOworCQllbHNlCisJCQllcnJvciA9IGV4cGxvcmVfbnVtZXJpY19zY29wZShwYWksIGhvc3RuYW1lLCBzZXJ2bmFtZSwKKwkJCSAgICAmY3VyLT5haV9uZXh0KTsKKworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGZyZWU7CisKKwkJd2hpbGUgKGN1ci0+YWlfbmV4dCkKKwkJCWN1ciA9IGN1ci0+YWlfbmV4dDsKKwl9CisKKwkvKgorCSAqIFhYWAorCSAqIElmIG51bWVyaWMgcmVwcmVzZW50YXRpb24gb2YgQUYxIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBGUUROCisJICogcmVwcmVzZW50YXRpb24gb2YgQUYyLCB3ZSBuZWVkIHRvIHRoaW5rIGFnYWluIGFib3V0IHRoZSBjb2RlIGJlbG93LgorCSAqLworCWlmIChzZW50aW5lbC5haV9uZXh0KQorCQlnb3RvIGdvb2Q7CisKKwlpZiAoaG9zdG5hbWUgPT0gTlVMTCkKKwkJRVJSKEVBSV9OT0RBVEEpOworCWlmIChwYWktPmFpX2ZsYWdzICYgQUlfTlVNRVJJQ0hPU1QpCisJCUVSUihFQUlfTk9OQU1FKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBCRUdJTiBBTkRST0lEIENIQU5HRVM7IHByb3h5aW5nIHRvIHRoZSBjYWNoZQorICAgICAgICAgKi8KKwlpZiAoY2FjaGVfbW9kZSA9PSBOVUxMIHx8IHN0cmNtcChjYWNoZV9tb2RlLCAibG9jYWwiKSAhPSAwKSB7CisJCS8vIHdlJ3JlIG5vdCB0aGUgcHJveHkgLSBwYXNzIHRoZSByZXF1ZXN0IHRvIHRoZW0KKwkJcmV0dXJuIGFuZHJvaWRfZ2V0YWRkcmluZm9fcHJveHkoaG9zdG5hbWUsIHNlcnZuYW1lLCBoaW50cywgcmVzLCBuZXRpZCk7CisJfQorCisJLyoKKwkgKiBob3N0bmFtZSBhcyBhbHBoYWJldGljYWwgbmFtZS4KKwkgKiB3ZSB3b3VsZCBsaWtlIHRvIHByZWZlciBBRl9JTkVUNiB0aGFuIEFGX0lORVQsIHNvIHdlJ2xsIG1ha2UgYQorCSAqIG91dGVyIGxvb3AgYnkgQUZzLgorCSAqLworCWZvciAoZXggPSBleHBsb3JlOyBleC0+ZV9hZiA+PSAwOyBleCsrKSB7CisJCSpwYWkgPSBhaTA7CisKKwkJLyogcmVxdWlyZSBleGFjdCBtYXRjaCBmb3IgZmFtaWx5IGZpZWxkICovCisJCWlmIChwYWktPmFpX2ZhbWlseSAhPSBleC0+ZV9hZikKKwkJCWNvbnRpbnVlOworCisJCWlmICghTUFUQ0gocGFpLT5haV9zb2NrdHlwZSwgZXgtPmVfc29ja3R5cGUsCisJCQkJV0lMRF9TT0NLVFlQRShleCkpKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIU1BVENIKHBhaS0+YWlfcHJvdG9jb2wsIGV4LT5lX3Byb3RvY29sLAorCQkJCVdJTERfUFJPVE9DT0woZXgpKSkgeworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocGFpLT5haV9zb2NrdHlwZSA9PSBBTlkgJiYgZXgtPmVfc29ja3R5cGUgIT0gQU5ZKQorCQkJcGFpLT5haV9zb2NrdHlwZSA9IGV4LT5lX3NvY2t0eXBlOworCQlpZiAocGFpLT5haV9wcm90b2NvbCA9PSBBTlkgJiYgZXgtPmVfcHJvdG9jb2wgIT0gQU5ZKQorCQkJcGFpLT5haV9wcm90b2NvbCA9IGV4LT5lX3Byb3RvY29sOworCisJCWVycm9yID0gZXhwbG9yZV9mcWRuKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLAorCQkJJmN1ci0+YWlfbmV4dCwgbmV0aWQsIG1hcmspOworCisJCXdoaWxlIChjdXIgJiYgY3VyLT5haV9uZXh0KQorCQkJY3VyID0gY3VyLT5haV9uZXh0OworCX0KKworCS8qIFhYWCAqLworCWlmIChzZW50aW5lbC5haV9uZXh0KQorCQllcnJvciA9IDA7CisKKwlpZiAoZXJyb3IpCisJCWdvdG8gZnJlZTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQlpZiAoc2VudGluZWwuYWlfbmV4dCkgeworIGdvb2Q6CisJCQkqcmVzID0gc2VudGluZWwuYWlfbmV4dDsKKwkJCXJldHVybiBTVUNDRVNTOworCQl9IGVsc2UKKwkJCWVycm9yID0gRUFJX0ZBSUw7CisJfQorIGZyZWU6CisgYmFkOgorCWlmIChzZW50aW5lbC5haV9uZXh0KQorCQlmcmVlYWRkcmluZm8oc2VudGluZWwuYWlfbmV4dCk7CisJKnJlcyA9IE5VTEw7CisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogRlFETiBob3N0bmFtZSwgRE5TIGxvb2t1cAorICovCitzdGF0aWMgaW50CitleHBsb3JlX2ZxZG4oY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWksIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgIGNvbnN0IGNoYXIgKnNlcnZuYW1lLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMsIHVuc2lnbmVkIG5ldGlkLCB1bnNpZ25lZCBtYXJrKQoreworCXN0cnVjdCBhZGRyaW5mbyAqcmVzdWx0OworCXN0cnVjdCBhZGRyaW5mbyAqY3VyOworCWludCBlcnJvciA9IDA7CisJc3RhdGljIGNvbnN0IG5zX2R0YWIgZHRhYltdID0geworCQlOU19GSUxFU19DQihfZmlsZXNfZ2V0YWRkcmluZm8sIE5VTEwpCisJCXsgTlNTUkNfRE5TLCBfZG5zX2dldGFkZHJpbmZvLCBOVUxMIH0sCS8qIGZvcmNlIC1ESEVTSU9EICovCisJCU5TX05JU19DQihfeXBfZ2V0YWRkcmluZm8sIE5VTEwpCisJCXsgMCwgMCwgMCB9CisJfTsKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJLyogaG9zdG5hbWUgbWF5IGJlIE5VTEwgKi8KKwkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLworCWFzc2VydChyZXMgIT0gTlVMTCk7CisKKwlyZXN1bHQgPSBOVUxMOworCisJLyoKKwkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAobnNkaXNwYXRjaCgmcmVzdWx0LCBkdGFiLCBOU0RCX0hPU1RTLCAiZ2V0YWRkcmluZm8iLAorCQkJZGVmYXVsdF9kbnNfZmlsZXMsIGhvc3RuYW1lLCBwYWksIG5ldGlkLCBtYXJrKSkgeworCWNhc2UgTlNfVFJZQUdBSU46CisJCWVycm9yID0gRUFJX0FHQUlOOworCQlnb3RvIGZyZWU7CisJY2FzZSBOU19VTkFWQUlMOgorCQllcnJvciA9IEVBSV9GQUlMOworCQlnb3RvIGZyZWU7CisJY2FzZSBOU19OT1RGT1VORDoKKwkJZXJyb3IgPSBFQUlfTk9EQVRBOworCQlnb3RvIGZyZWU7CisJY2FzZSBOU19TVUNDRVNTOgorCQllcnJvciA9IDA7CisJCWZvciAoY3VyID0gcmVzdWx0OyBjdXI7IGN1ciA9IGN1ci0+YWlfbmV4dCkgeworCQkJR0VUX1BPUlQoY3VyLCBzZXJ2bmFtZSk7CisJCQkvKiBjYW5vbm5hbWUgc2hvdWxkIGJlIGZpbGxlZCBhbHJlYWR5ICovCisJCX0KKwkJYnJlYWs7CisJfQorCisJKnJlcyA9IHJlc3VsdDsKKworCXJldHVybiAwOworCitmcmVlOgorCWlmIChyZXN1bHQpCisJCWZyZWVhZGRyaW5mbyhyZXN1bHQpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIGhvc3RuYW1lID09IE5VTEwuCisgKiBwYXNzaXZlIHNvY2tldCAtPiBhbnlhZGRyICgwLjAuMC4wIG9yIDo6KQorICogbm9uLXBhc3NpdmUgc29ja2V0IC0+IGxvY2FsaG9zdCAoMTI3LjAuMC4xIG9yIDo6MSkKKyAqLworc3RhdGljIGludAorZXhwbG9yZV9udWxsKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwKKyAgICBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisJaW50IHM7CisJY29uc3Qgc3RydWN0IGFmZCAqYWZkOworCXN0cnVjdCBhZGRyaW5mbyAqY3VyOworCXN0cnVjdCBhZGRyaW5mbyBzZW50aW5lbDsKKwlpbnQgZXJyb3I7CisKKwlhc3NlcnQocGFpICE9IE5VTEwpOworCS8qIHNlcnZuYW1lIG1heSBiZSBOVUxMICovCisJYXNzZXJ0KHJlcyAhPSBOVUxMKTsKKworCSpyZXMgPSBOVUxMOworCXNlbnRpbmVsLmFpX25leHQgPSBOVUxMOworCWN1ciA9ICZzZW50aW5lbDsKKworCS8qCisJICogZmlsdGVyIG91dCBBRnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsCisJICogWFhYIGVycm5vPworCSAqLworCXMgPSBzb2NrZXQocGFpLT5haV9mYW1pbHksIFNPQ0tfREdSQU0gfCBTT0NLX0NMT0VYRUMsIDApOworCWlmIChzIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRU1GSUxFKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlCisJCWNsb3NlKHMpOworCisJLyoKKwkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCWFmZCA9IGZpbmRfYWZkKHBhaS0+YWlfZmFtaWx5KTsKKwlpZiAoYWZkID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKHBhaS0+YWlfZmxhZ3MgJiBBSV9QQVNTSVZFKSB7CisJCUdFVF9BSShjdXItPmFpX25leHQsIGFmZCwgYWZkLT5hX2FkZHJhbnkpOworCQkvKiB4eHggbWVhbmluZ2xlc3M/CisJCSAqIEdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCAiYW55YWRkciIpOworCQkgKi8KKwkJR0VUX1BPUlQoY3VyLT5haV9uZXh0LCBzZXJ2bmFtZSk7CisJfSBlbHNlIHsKKwkJR0VUX0FJKGN1ci0+YWlfbmV4dCwgYWZkLCBhZmQtPmFfbG9vcGJhY2spOworCQkvKiB4eHggbWVhbmluZ2xlc3M/CisJCSAqIEdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCAibG9jYWxob3N0Iik7CisJCSAqLworCQlHRVRfUE9SVChjdXItPmFpX25leHQsIHNlcnZuYW1lKTsKKwl9CisJY3VyID0gY3VyLT5haV9uZXh0OworCisJKnJlcyA9IHNlbnRpbmVsLmFpX25leHQ7CisJcmV0dXJuIDA7CisKK2ZyZWU6CisJaWYgKHNlbnRpbmVsLmFpX25leHQpCisJCWZyZWVhZGRyaW5mbyhzZW50aW5lbC5haV9uZXh0KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiBudW1lcmljIGhvc3RuYW1lCisgKi8KK3N0YXRpYyBpbnQKK2V4cGxvcmVfbnVtZXJpYyhjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgY29uc3QgY2hhciAqc2Vydm5hbWUsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcywgY29uc3QgY2hhciAqY2Fub25uYW1lKQoreworCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKKwlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKKwlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWw7CisJaW50IGVycm9yOworCWNoYXIgcHRvbltQVE9OX01BWF07CisKKwlhc3NlcnQocGFpICE9IE5VTEwpOworCS8qIGhvc3RuYW1lIG1heSBiZSBOVUxMICovCisJLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KKwlhc3NlcnQocmVzICE9IE5VTEwpOworCisJKnJlcyA9IE5VTEw7CisJc2VudGluZWwuYWlfbmV4dCA9IE5VTEw7CisJY3VyID0gJnNlbnRpbmVsOworCisJLyoKKwkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCWFmZCA9IGZpbmRfYWZkKHBhaS0+YWlfZmFtaWx5KTsKKwlpZiAoYWZkID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhZmQtPmFfYWYpIHsKKyNpZiAwIC8qWC9PcGVuIHNwZWMqLworCWNhc2UgQUZfSU5FVDoKKwkJaWYgKGluZXRfYXRvbihob3N0bmFtZSwgKHN0cnVjdCBpbl9hZGRyICopcHRvbikgPT0gMSkgeworCQkJaWYgKHBhaS0+YWlfZmFtaWx5ID09IGFmZC0+YV9hZiB8fAorCQkJICAgIHBhaS0+YWlfZmFtaWx5ID09IFBGX1VOU1BFQyAvKj8qLykgeworCQkJCUdFVF9BSShjdXItPmFpX25leHQsIGFmZCwgcHRvbik7CisJCQkJR0VUX1BPUlQoY3VyLT5haV9uZXh0LCBzZXJ2bmFtZSk7CisJCQkJaWYgKChwYWktPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKSkgeworCQkJCQkvKgorCQkJCQkgKiBTZXQgdGhlIG51bWVyaWMgYWRkcmVzcyBpdHNlbGYgYXMKKwkJCQkJICogdGhlIGNhbm9uaWNhbCBuYW1lLCBiYXNlZCBvbiBhCisJCQkJCSAqIGNsYXJpZmljYXRpb24gaW4gcmZjMjU1M2Jpcy0wMy4KKwkJCQkJICovCisJCQkJCUdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCBjYW5vbm5hbWUpOworCQkJCX0KKwkJCQl3aGlsZSAoY3VyICYmIGN1ci0+YWlfbmV4dCkKKwkJCQkJY3VyID0gY3VyLT5haV9uZXh0OworCQkJfSBlbHNlCisJCQkJRVJSKEVBSV9GQU1JTFkpOwkvKnh4eCovCisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlpZiAoaW5ldF9wdG9uKGFmZC0+YV9hZiwgaG9zdG5hbWUsIHB0b24pID09IDEpIHsKKwkJCWlmIChwYWktPmFpX2ZhbWlseSA9PSBhZmQtPmFfYWYgfHwKKwkJCSAgICBwYWktPmFpX2ZhbWlseSA9PSBQRl9VTlNQRUMgLyo/Ki8pIHsKKwkJCQlHRVRfQUkoY3VyLT5haV9uZXh0LCBhZmQsIHB0b24pOworCQkJCUdFVF9QT1JUKGN1ci0+YWlfbmV4dCwgc2Vydm5hbWUpOworCQkJCWlmICgocGFpLT5haV9mbGFncyAmIEFJX0NBTk9OTkFNRSkpIHsKKwkJCQkJLyoKKwkJCQkJICogU2V0IHRoZSBudW1lcmljIGFkZHJlc3MgaXRzZWxmIGFzCisJCQkJCSAqIHRoZSBjYW5vbmljYWwgbmFtZSwgYmFzZWQgb24gYQorCQkJCQkgKiBjbGFyaWZpY2F0aW9uIGluIHJmYzI1NTNiaXMtMDMuCisJCQkJCSAqLworCQkJCQlHRVRfQ0FOT05OQU1FKGN1ci0+YWlfbmV4dCwgY2Fub25uYW1lKTsKKwkJCQl9CisJCQkJd2hpbGUgKGN1ci0+YWlfbmV4dCkKKwkJCQkJY3VyID0gY3VyLT5haV9uZXh0OworCQkJfSBlbHNlCisJCQkJRVJSKEVBSV9GQU1JTFkpOwkvKnh4eCovCisJCX0KKwkJYnJlYWs7CisJfQorCisJKnJlcyA9IHNlbnRpbmVsLmFpX25leHQ7CisJcmV0dXJuIDA7CisKK2ZyZWU6CitiYWQ6CisJaWYgKHNlbnRpbmVsLmFpX25leHQpCisJCWZyZWVhZGRyaW5mbyhzZW50aW5lbC5haV9uZXh0KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiBudW1lcmljIGhvc3RuYW1lIHdpdGggc2NvcGUKKyAqLworc3RhdGljIGludAorZXhwbG9yZV9udW1lcmljX3Njb3BlKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwgc3RydWN0IGFkZHJpbmZvICoqcmVzKQoreworI2lmICFkZWZpbmVkKFNDT1BFX0RFTElNSVRFUikgfHwgIWRlZmluZWQoSU5FVDYpCisJcmV0dXJuIGV4cGxvcmVfbnVtZXJpYyhwYWksIGhvc3RuYW1lLCBzZXJ2bmFtZSwgcmVzLCBob3N0bmFtZSk7CisjZWxzZQorCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKKwlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKKwlpbnQgZXJyb3I7CisJY2hhciAqY3AsICpob3N0bmFtZTIgPSBOVUxMLCAqc2NvcGUsICphZGRyOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwlhc3NlcnQocGFpICE9IE5VTEwpOworCS8qIGhvc3RuYW1lIG1heSBiZSBOVUxMICovCisJLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KKwlhc3NlcnQocmVzICE9IE5VTEwpOworCisJLyoKKwkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCWFmZCA9IGZpbmRfYWZkKHBhaS0+YWlfZmFtaWx5KTsKKwlpZiAoYWZkID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKCFhZmQtPmFfc2NvcGVkKQorCQlyZXR1cm4gZXhwbG9yZV9udW1lcmljKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKKworCWNwID0gc3RyY2hyKGhvc3RuYW1lLCBTQ09QRV9ERUxJTUlURVIpOworCWlmIChjcCA9PSBOVUxMKQorCQlyZXR1cm4gZXhwbG9yZV9udW1lcmljKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKKworCS8qCisJICogSGFuZGxlIHNwZWNpYWwgY2FzZSBvZiA8c2NvcGVkX2FkZHJlc3M+PGRlbGltaXRlcj48c2NvcGUgaWQ+CisJICovCisJaG9zdG5hbWUyID0gc3RyZHVwKGhvc3RuYW1lKTsKKwlpZiAoaG9zdG5hbWUyID09IE5VTEwpCisJCXJldHVybiBFQUlfTUVNT1JZOworCS8qIHRlcm1pbmF0ZSBhdCB0aGUgZGVsaW1pdGVyICovCisJaG9zdG5hbWUyW2NwIC0gaG9zdG5hbWVdID0gJ1wwJzsKKwlhZGRyID0gaG9zdG5hbWUyOworCXNjb3BlID0gY3AgKyAxOworCisJZXJyb3IgPSBleHBsb3JlX251bWVyaWMocGFpLCBhZGRyLCBzZXJ2bmFtZSwgcmVzLCBob3N0bmFtZSk7CisJaWYgKGVycm9yID09IDApIHsKKwkJdV9pbnQzMl90IHNjb3BlaWQ7CisKKwkJZm9yIChjdXIgPSAqcmVzOyBjdXI7IGN1ciA9IGN1ci0+YWlfbmV4dCkgeworCQkJaWYgKGN1ci0+YWlfZmFtaWx5ICE9IEFGX0lORVQ2KQorCQkJCWNvbnRpbnVlOworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKiljdXItPmFpX2FkZHI7CisJCQlpZiAoaXA2X3N0cjJzY29wZWlkKHNjb3BlLCBzaW42LCAmc2NvcGVpZCkgPT0gLTEpIHsKKwkJCQlmcmVlKGhvc3RuYW1lMik7CisJCQkJcmV0dXJuKEVBSV9OT0RBVEEpOyAvKiBYWFg6IGlzIHJldHVybiBPSz8gKi8KKwkJCX0KKwkJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSBzY29wZWlkOworCQl9CisJfQorCisJZnJlZShob3N0bmFtZTIpOworCisJcmV0dXJuIGVycm9yOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKK2dldF9jYW5vbm5hbWUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWksIHN0cnVjdCBhZGRyaW5mbyAqYWksIGNvbnN0IGNoYXIgKnN0cikKK3sKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJYXNzZXJ0KGFpICE9IE5VTEwpOworCWFzc2VydChzdHIgIT0gTlVMTCk7CisKKwlpZiAoKHBhaS0+YWlfZmxhZ3MgJiBBSV9DQU5PTk5BTUUpICE9IDApIHsKKwkJYWktPmFpX2Nhbm9ubmFtZSA9IHN0cmR1cChzdHIpOworCQlpZiAoYWktPmFpX2Nhbm9ubmFtZSA9PSBOVUxMKQorCQkJcmV0dXJuIEVBSV9NRU1PUlk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGFkZHJpbmZvICoKK2dldF9haShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgY29uc3Qgc3RydWN0IGFmZCAqYWZkLCBjb25zdCBjaGFyICphZGRyKQoreworCWNoYXIgKnA7CisJc3RydWN0IGFkZHJpbmZvICphaTsKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJYXNzZXJ0KGFmZCAhPSBOVUxMKTsKKwlhc3NlcnQoYWRkciAhPSBOVUxMKTsKKworCWFpID0gKHN0cnVjdCBhZGRyaW5mbyAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGFkZHJpbmZvKQorCQkrIChhZmQtPmFfc29ja2xlbikpOworCWlmIChhaSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbWNweShhaSwgcGFpLCBzaXplb2Yoc3RydWN0IGFkZHJpbmZvKSk7CisJYWktPmFpX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikoYWkgKyAxKTsKKwltZW1zZXQoYWktPmFpX2FkZHIsIDAsIChzaXplX3QpYWZkLT5hX3NvY2tsZW4pOworCisjaWZkZWYgSEFWRV9TQV9MRU4KKwlhaS0+YWlfYWRkci0+c2FfbGVuID0gYWZkLT5hX3NvY2tsZW47CisjZW5kaWYKKworCWFpLT5haV9hZGRybGVuID0gYWZkLT5hX3NvY2tsZW47CisjaWYgZGVmaW5lZCAoX19hbHBoYV9fKSB8fCAoZGVmaW5lZChfX2kzODZfXykgJiYgZGVmaW5lZChfTFA2NCkpIHx8IGRlZmluZWQoX19zcGFyYzY0X18pCisJYWktPl9fYWlfcGFkMCA9IDA7CisjZW5kaWYKKwlhaS0+YWlfYWRkci0+c2FfZmFtaWx5ID0gYWktPmFpX2ZhbWlseSA9IGFmZC0+YV9hZjsKKwlwID0gKGNoYXIgKikodm9pZCAqKShhaS0+YWlfYWRkcik7CisJbWVtY3B5KHAgKyBhZmQtPmFfb2ZmLCBhZGRyLCAoc2l6ZV90KWFmZC0+YV9hZGRybGVuKTsKKwlyZXR1cm4gYWk7Cit9CisKK3N0YXRpYyBpbnQKK2dldF9wb3J0bWF0Y2goY29uc3Qgc3RydWN0IGFkZHJpbmZvICphaSwgY29uc3QgY2hhciAqc2Vydm5hbWUpCit7CisKKwlhc3NlcnQoYWkgIT0gTlVMTCk7CisJLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KKworCXJldHVybiBnZXRfcG9ydChhaSwgc2Vydm5hbWUsIDEpOworfQorCitzdGF0aWMgaW50CitnZXRfcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmFpLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwgaW50IG1hdGNob25seSkKK3sKKwljb25zdCBjaGFyICpwcm90bzsKKwlzdHJ1Y3Qgc2VydmVudCAqc3A7CisJaW50IHBvcnQ7CisJaW50IGFsbG93bnVtZXJpYzsKKworCWFzc2VydChhaSAhPSBOVUxMKTsKKwkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLworCisJaWYgKHNlcnZuYW1lID09IE5VTEwpCisJCXJldHVybiAwOworCXN3aXRjaCAoYWktPmFpX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKyNpZmRlZiBBRl9JTkVUNgorCWNhc2UgQUZfSU5FVDY6CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChhaS0+YWlfc29ja3R5cGUpIHsKKwljYXNlIFNPQ0tfUkFXOgorCQlyZXR1cm4gRUFJX1NFUlZJQ0U7CisJY2FzZSBTT0NLX0RHUkFNOgorCWNhc2UgU09DS19TVFJFQU06CisJCWFsbG93bnVtZXJpYyA9IDE7CisJCWJyZWFrOworCWNhc2UgQU5ZOgorI2lmIDEgIC8qIEFORFJPSUQtU1BFQ0lGSUMgQ0hBTkdFIFRPIE1BVENIIEdMSUJDICovCisJCWFsbG93bnVtZXJpYyA9IDE7CisjZWxzZQorCQlhbGxvd251bWVyaWMgPSAwOworI2VuZGlmCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBFQUlfU09DS1RZUEU7CisJfQorCisJcG9ydCA9IHN0cjJudW1iZXIoc2Vydm5hbWUpOworCWlmIChwb3J0ID49IDApIHsKKwkJaWYgKCFhbGxvd251bWVyaWMpCisJCQlyZXR1cm4gRUFJX1NFUlZJQ0U7CisJCWlmIChwb3J0IDwgMCB8fCBwb3J0ID4gNjU1MzUpCisJCQlyZXR1cm4gRUFJX1NFUlZJQ0U7CisJCXBvcnQgPSBodG9ucyhwb3J0KTsKKwl9IGVsc2UgeworCQlpZiAoYWktPmFpX2ZsYWdzICYgQUlfTlVNRVJJQ1NFUlYpCisJCQlyZXR1cm4gRUFJX05PTkFNRTsKKworCQlzd2l0Y2ggKGFpLT5haV9zb2NrdHlwZSkgeworCQljYXNlIFNPQ0tfREdSQU06CisJCQlwcm90byA9ICJ1ZHAiOworCQkJYnJlYWs7CisJCWNhc2UgU09DS19TVFJFQU06CisJCQlwcm90byA9ICJ0Y3AiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcm90byA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoc3AgPSBnZXRzZXJ2YnluYW1lKHNlcnZuYW1lLCBwcm90bykpID09IE5VTEwpCisJCQlyZXR1cm4gRUFJX1NFUlZJQ0U7CisJCXBvcnQgPSBzcC0+c19wb3J0OworCX0KKworCWlmICghbWF0Y2hvbmx5KSB7CisJCXN3aXRjaCAoYWktPmFpX2ZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopCisJCQkgICAgYWktPmFpX2FkZHIpLT5zaW5fcG9ydCA9IHBvcnQ7CisJCQlicmVhazsKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKikKKwkJCSAgICBhaS0+YWlfYWRkciktPnNpbjZfcG9ydCA9IHBvcnQ7CisJCQlicmVhazsKKyNlbmRpZgorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWZkICoKK2ZpbmRfYWZkKGludCBhZikKK3sKKwljb25zdCBzdHJ1Y3QgYWZkICphZmQ7CisKKwlpZiAoYWYgPT0gUEZfVU5TUEVDKQorCQlyZXR1cm4gTlVMTDsKKwlmb3IgKGFmZCA9IGFmZGw7IGFmZC0+YV9hZjsgYWZkKyspIHsKKwkJaWYgKGFmZC0+YV9hZiA9PSBhZikKKwkJCXJldHVybiBhZmQ7CisJfQorCXJldHVybiBOVUxMOworfQorCisjaWZkZWYgSU5FVDYKKy8qIGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBzY29wZSBpZGVudGlmaWVyLiBYWFg6IElQdjYgc3BlY2lmaWMgKi8KK3N0YXRpYyBpbnQKK2lwNl9zdHIyc2NvcGVpZChjaGFyICpzY29wZSwgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgdV9pbnQzMl90ICpzY29wZWlkKQoreworCXVfbG9uZyBsc2NvcGVpZDsKKwlzdHJ1Y3QgaW42X2FkZHIgKmE2OworCWNoYXIgKmVwOworCisJYXNzZXJ0KHNjb3BlICE9IE5VTEwpOworCWFzc2VydChzaW42ICE9IE5VTEwpOworCWFzc2VydChzY29wZWlkICE9IE5VTEwpOworCisJYTYgPSAmc2luNi0+c2luNl9hZGRyOworCisJLyogZW1wdHkgc2NvcGVpZCBwb3J0aW9uIGlzIGludmFsaWQgKi8KKwlpZiAoKnNjb3BlID09ICdcMCcpCisJCXJldHVybiAtMTsKKworCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoYTYpIHx8IElONl9JU19BRERSX01DX0xJTktMT0NBTChhNikpIHsKKwkJLyoKKwkJICogV2UgY3VycmVudGx5IGFzc3VtZSBhIG9uZS10by1vbmUgbWFwcGluZyBiZXR3ZWVuIGxpbmtzCisJCSAqIGFuZCBpbnRlcmZhY2VzLCBzbyB3ZSBzaW1wbHkgdXNlIGludGVyZmFjZSBpbmRpY2VzIGZvcgorCQkgKiBsaWtlLWxvY2FsIHNjb3Blcy4KKwkJICovCisJCSpzY29wZWlkID0gaWZfbmFtZXRvaW5kZXgoc2NvcGUpOworCQlpZiAoKnNjb3BlaWQgPT0gMCkKKwkJCWdvdG8gdHJ5bnVtZXJpYzsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogc3RpbGwgdW5jbGVhciBhYm91dCBsaXRlcmFsLCBhbGxvdyBudW1lcmljIG9ubHkgLSBwbGFjZWhvbGRlciAqLworCWlmIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoYTYpIHx8IElONl9JU19BRERSX01DX1NJVEVMT0NBTChhNikpCisJCWdvdG8gdHJ5bnVtZXJpYzsKKwlpZiAoSU42X0lTX0FERFJfTUNfT1JHTE9DQUwoYTYpKQorCQlnb3RvIHRyeW51bWVyaWM7CisJZWxzZQorCQlnb3RvIHRyeW51bWVyaWM7CS8qIGdsb2JhbCAqLworCisJLyogdHJ5IHRvIGNvbnZlcnQgdG8gYSBudW1lcmljIGlkIGFzIGEgbGFzdCByZXNvcnQgKi8KKyAgdHJ5bnVtZXJpYzoKKwllcnJubyA9IDA7CisJbHNjb3BlaWQgPSBzdHJ0b3VsKHNjb3BlLCAmZXAsIDEwKTsKKwkqc2NvcGVpZCA9ICh1X2ludDMyX3QpKGxzY29wZWlkICYgMHhmZmZmZmZmZlVMKTsKKwlpZiAoZXJybm8gPT0gMCAmJiBlcCAmJiAqZXAgPT0gJ1wwJyAmJiAqc2NvcGVpZCA9PSBsc2NvcGVpZCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisjZW5kaWYKKworLyogY29kZSBkdXBsaWNhdGUgd2l0aCBnZXRobmFtYWRkci5jICovCisKK3N0YXRpYyBjb25zdCBjaGFyIEFza2VkRm9yR290W10gPQorCSJnZXRob3N0YnkqLmdldGFuc3dlcjogYXNrZWQgZm9yIFwiJXNcIiwgZ290IFwiJXNcIiI7CisKKyNkZWZpbmUgQk9VTkRFRF9JTkNSKHgpIFwKKwlkbyB7IFwKKwkJQk9VTkRTX0NIRUNLKGNwLCB4KTsgXAorCQljcCArPSAoeCk7IFwKKwl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBCT1VORFNfQ0hFQ0socHRyLCBjb3VudCkgXAorCWRvIHsgXAorCQlpZiAoZW9tIC0gKHB0cikgPCAoY291bnQpKSB7IGhfZXJybm8gPSBOT19SRUNPVkVSWTsgcmV0dXJuIE5VTEw7IH0gXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCitzdGF0aWMgc3RydWN0IGFkZHJpbmZvICoKK2dldGFuc3dlcihjb25zdCBxdWVyeWJ1ZiAqYW5zd2VyLCBpbnQgYW5zbGVuLCBjb25zdCBjaGFyICpxbmFtZSwgaW50IHF0eXBlLAorICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpKQoreworCXN0cnVjdCBhZGRyaW5mbyBzZW50aW5lbCwgKmN1cjsKKwlzdHJ1Y3QgYWRkcmluZm8gYWk7CisJY29uc3Qgc3RydWN0IGFmZCAqYWZkOworCWNoYXIgKmNhbm9ubmFtZTsKKwljb25zdCBIRUFERVIgKmhwOworCWNvbnN0IHVfY2hhciAqY3A7CisJaW50IG47CisJY29uc3QgdV9jaGFyICplb207CisJY2hhciAqYnAsICplcDsKKwlpbnQgdHlwZSwgY2xhc3MsIGFuY291bnQsIHFkY291bnQ7CisJaW50IGhhdmVhbnN3ZXIsIGhhZF9lcnJvcjsKKwljaGFyIHRidWZbTUFYRE5BTUVdOworCWludCAoKm5hbWVfb2spIChjb25zdCBjaGFyICopOworCWNoYXIgaG9zdGJ1Zls4KjEwMjRdOworCisJYXNzZXJ0KGFuc3dlciAhPSBOVUxMKTsKKwlhc3NlcnQocW5hbWUgIT0gTlVMTCk7CisJYXNzZXJ0KHBhaSAhPSBOVUxMKTsKKworCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOworCWN1ciA9ICZzZW50aW5lbDsKKworCWNhbm9ubmFtZSA9IE5VTEw7CisJZW9tID0gYW5zd2VyLT5idWYgKyBhbnNsZW47CisJc3dpdGNoIChxdHlwZSkgeworCWNhc2UgVF9BOgorCWNhc2UgVF9BQUFBOgorCWNhc2UgVF9BTlk6CS8qdXNlIFRfQU5ZIG9ubHkgZm9yIFRfQS9UX0FBQUEgbG9va3VwKi8KKwkJbmFtZV9vayA9IHJlc19obm9rOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsJLyogWFhYIHNob3VsZCBiZSBhYm9ydCgpOyAqLworCX0KKwkvKgorCSAqIGZpbmQgZmlyc3Qgc2F0aXNmYWN0b3J5IGFuc3dlcgorCSAqLworCWhwID0gJmFuc3dlci0+aGRyOworCWFuY291bnQgPSBudG9ocyhocC0+YW5jb3VudCk7CisJcWRjb3VudCA9IG50b2hzKGhwLT5xZGNvdW50KTsKKwlicCA9IGhvc3RidWY7CisJZXAgPSBob3N0YnVmICsgc2l6ZW9mIGhvc3RidWY7CisJY3AgPSBhbnN3ZXItPmJ1ZjsKKwlCT1VOREVEX0lOQ1IoSEZJWEVEU1opOworCWlmIChxZGNvdW50ICE9IDEpIHsKKwkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCBicCwgZXAgLSBicCk7CisJaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykoYnApKSB7CisJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJQk9VTkRFRF9JTkNSKG4gKyBRRklYRURTWik7CisJaWYgKHF0eXBlID09IFRfQSB8fCBxdHlwZSA9PSBUX0FBQUEgfHwgcXR5cGUgPT0gVF9BTlkpIHsKKwkJLyogcmVzX3NlbmQoKSBoYXMgYWxyZWFkeSB2ZXJpZmllZCB0aGF0IHRoZSBxdWVyeSBuYW1lIGlzIHRoZQorCQkgKiBzYW1lIGFzIHRoZSBvbmUgd2Ugc2VudDsgdGhpcyBqdXN0IGdldHMgdGhlIGV4cGFuZGVkIG5hbWUKKwkJICogKGkuZS4sIHdpdGggdGhlIHN1Y2NlZWRpbmcgc2VhcmNoLWRvbWFpbiB0YWNrZWQgb24pLgorCQkgKi8KKwkJbiA9IHN0cmxlbihicCkgKyAxOwkJLyogZm9yIHRoZSBcMCAqLworCQlpZiAobiA+PSBNQVhIT1NUTkFNRUxFTikgeworCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQljYW5vbm5hbWUgPSBicDsKKwkJYnAgKz0gbjsKKwkJLyogVGhlIHFuYW1lIGNhbiBiZSBhYmJyZXZpYXRlZCwgYnV0IGhfbmFtZSBpcyBub3cgYWJzb2x1dGUuICovCisJCXFuYW1lID0gY2Fub25uYW1lOworCX0KKwloYXZlYW5zd2VyID0gMDsKKwloYWRfZXJyb3IgPSAwOworCXdoaWxlIChhbmNvdW50LS0gPiAwICYmIGNwIDwgZW9tICYmICFoYWRfZXJyb3IpIHsKKwkJbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgYnAsIGVwIC0gYnApOworCQlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKShicCkpIHsKKwkJCWhhZF9lcnJvcisrOworCQkJY29udGludWU7CisJCX0KKwkJY3AgKz0gbjsJCQkvKiBuYW1lICovCisJCUJPVU5EU19DSEVDSyhjcCwgMyAqIElOVDE2U1ogKyBJTlQzMlNaKTsKKwkJdHlwZSA9IF9nZXRzaG9ydChjcCk7CisgCQljcCArPSBJTlQxNlNaOwkJCS8qIHR5cGUgKi8KKwkJY2xhc3MgPSBfZ2V0c2hvcnQoY3ApOworIAkJY3AgKz0gSU5UMTZTWiArIElOVDMyU1o7CS8qIGNsYXNzLCBUVEwgKi8KKwkJbiA9IF9nZXRzaG9ydChjcCk7CisJCWNwICs9IElOVDE2U1o7CQkJLyogbGVuICovCisJCUJPVU5EU19DSEVDSyhjcCwgbik7CisJCWlmIChjbGFzcyAhPSBDX0lOKSB7CisJCQkvKiBYWFggLSBkZWJ1Zz8gc3lzbG9nPyAqLworCQkJY3AgKz0gbjsKKwkJCWNvbnRpbnVlOwkJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQl9CisJCWlmICgocXR5cGUgPT0gVF9BIHx8IHF0eXBlID09IFRfQUFBQSB8fCBxdHlwZSA9PSBUX0FOWSkgJiYKKwkJICAgIHR5cGUgPT0gVF9DTkFNRSkgeworCQkJbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgdGJ1Ziwgc2l6ZW9mIHRidWYpOworCQkJaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykodGJ1ZikpIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNwICs9IG47CisJCQkvKiBHZXQgY2Fub25pY2FsIG5hbWUuICovCisJCQluID0gc3RybGVuKHRidWYpICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJaWYgKG4gPiBlcCAtIGJwIHx8IG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0cmxjcHkoYnAsIHRidWYsIChzaXplX3QpKGVwIC0gYnApKTsKKwkJCWNhbm9ubmFtZSA9IGJwOworCQkJYnAgKz0gbjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChxdHlwZSA9PSBUX0FOWSkgeworCQkJaWYgKCEodHlwZSA9PSBUX0EgfHwgdHlwZSA9PSBUX0FBQUEpKSB7CisJCQkJY3AgKz0gbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIGlmICh0eXBlICE9IHF0eXBlKSB7CisJCQlpZiAodHlwZSAhPSBUX0tFWSAmJiB0eXBlICE9IFRfU0lHKQorCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAorCSAgICAgICAiZ2V0aG9zdGJ5Ki5nZXRhbnN3ZXI6IGFza2VkIGZvciBcIiVzICVzICVzXCIsIGdvdCB0eXBlIFwiJXNcIiIsCisJCQkJICAgICAgIHFuYW1lLCBwX2NsYXNzKENfSU4pLCBwX3R5cGUocXR5cGUpLAorCQkJCSAgICAgICBwX3R5cGUodHlwZSkpOworCQkJY3AgKz0gbjsKKwkJCWNvbnRpbnVlOwkJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQl9CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIFRfQToKKwkJY2FzZSBUX0FBQUE6CisJCQlpZiAoc3RyY2FzZWNtcChjYW5vbm5hbWUsIGJwKSAhPSAwKSB7CisJCQkJc3lzbG9nKExPR19OT1RJQ0V8TE9HX0FVVEgsCisJCQkJICAgICAgIEFza2VkRm9yR290LCBjYW5vbm5hbWUsIGJwKTsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOwkvKiBYWFggLSBoYWRfZXJyb3IrKyA/ICovCisJCQl9CisJCQlpZiAodHlwZSA9PSBUX0EgJiYgbiAhPSBJTkFERFJTWikgeworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAodHlwZSA9PSBUX0FBQUEgJiYgbiAhPSBJTjZBRERSU1opIHsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHR5cGUgPT0gVF9BQUFBKSB7CisJCQkJc3RydWN0IGluNl9hZGRyIGluNjsKKwkJCQltZW1jcHkoJmluNiwgY3AsIElONkFERFJTWik7CisJCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZpbjYpKSB7CisJCQkJCWNwICs9IG47CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWlmICghaGF2ZWFuc3dlcikgeworCQkJCWludCBubjsKKworCQkJCWNhbm9ubmFtZSA9IGJwOworCQkJCW5uID0gc3RybGVuKGJwKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCQlicCArPSBubjsKKwkJCX0KKworCQkJLyogZG9uJ3Qgb3ZlcndyaXRlIHBhaSAqLworCQkJYWkgPSAqcGFpOworCQkJYWkuYWlfZmFtaWx5ID0gKHR5cGUgPT0gVF9BKSA/IEFGX0lORVQgOiBBRl9JTkVUNjsKKwkJCWFmZCA9IGZpbmRfYWZkKGFpLmFpX2ZhbWlseSk7CisJCQlpZiAoYWZkID09IE5VTEwpIHsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY3VyLT5haV9uZXh0ID0gZ2V0X2FpKCZhaSwgYWZkLCAoY29uc3QgY2hhciAqKWNwKTsKKwkJCWlmIChjdXItPmFpX25leHQgPT0gTlVMTCkKKwkJCQloYWRfZXJyb3IrKzsKKwkJCXdoaWxlIChjdXIgJiYgY3VyLT5haV9uZXh0KQorCQkJCWN1ciA9IGN1ci0+YWlfbmV4dDsKKwkJCWNwICs9IG47CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFib3J0KCk7CisJCX0KKwkJaWYgKCFoYWRfZXJyb3IpCisJCQloYXZlYW5zd2VyKys7CisJfQorCWlmIChoYXZlYW5zd2VyKSB7CisJCWlmICghY2Fub25uYW1lKQorCQkJKHZvaWQpZ2V0X2Nhbm9ubmFtZShwYWksIHNlbnRpbmVsLmFpX25leHQsIHFuYW1lKTsKKwkJZWxzZQorCQkJKHZvaWQpZ2V0X2Nhbm9ubmFtZShwYWksIHNlbnRpbmVsLmFpX25leHQsIGNhbm9ubmFtZSk7CisJCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOworCQlyZXR1cm4gc2VudGluZWwuYWlfbmV4dDsKKwl9CisKKwloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0geworCXN0cnVjdCBhZGRyaW5mbyAqYWk7CisJaW50IGhhc19zcmNfYWRkcjsKKwlzb2NrYWRkcl91bmlvbiBzcmNfYWRkcjsKKwlpbnQgb3JpZ2luYWxfb3JkZXI7Cit9OworCisvKkFSR1NVU0VEKi8KK3N0YXRpYyBpbnQKK19nZXRfc2NvcGUoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjYgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCWlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1QoJmFkZHI2LT5zaW42X2FkZHIpKSB7CisJCQlyZXR1cm4gSVBWNl9BRERSX01DX1NDT1BFKCZhZGRyNi0+c2luNl9hZGRyKTsKKwkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmYWRkcjYtPnNpbjZfYWRkcikgfHwKKwkJCSAgIElONl9JU19BRERSX0xJTktMT0NBTCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCS8qCisJCQkgKiBSRkMgNDI5MSBzZWN0aW9uIDIuNS4zIHNheXMgbG9vcGJhY2sgaXMgdG8gYmUgdHJlYXRlZCBhcyBoYXZpbmcKKwkJCSAqIGxpbmstbG9jYWwgc2NvcGUuCisJCQkgKi8KKwkJCXJldHVybiBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMOworCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1NJVEVMT0NBTCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiBJUFY2X0FERFJfU0NPUEVfU0lURUxPQ0FMOworCQl9IGVsc2UgeworCQkJcmV0dXJuIElQVjZfQUREUl9TQ09QRV9HTE9CQUw7CisJCX0KKwl9IGVsc2UgaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkcjQgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJdW5zaWduZWQgbG9uZyBpbnQgbmEgPSBudG9obChhZGRyNC0+c2luX2FkZHIuc19hZGRyKTsKKworCQlpZiAoSU5fTE9PUEJBQ0sobmEpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMjcuMC4wLjAvOCAqLworCQkgICAgKG5hICYgMHhmZmZmMDAwMCkgPT0gMHhhOWZlMDAwMCkgeyAgICAgICAgICAvKiAxNjkuMjU0LjAuMC8xNiAqLworCQkJcmV0dXJuIElQVjZfQUREUl9TQ09QRV9MSU5LTE9DQUw7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogUkZDIDY3MjQgc2VjdGlvbiAzLjIuIE90aGVyIElQdjQgYWRkcmVzc2VzLCBpbmNsdWRpbmcgcHJpdmF0ZSBhZGRyZXNzZXMKKwkJCSAqIGFuZCBzaGFyZWQgYWRkcmVzc2VzICgxMDAuNjQuMC4wLzEwKSwgYXJlIGFzc2lnbmVkIGdsb2JhbCBzY29wZS4KKwkJCSAqLworCQkJcmV0dXJuIElQVjZfQUREUl9TQ09QRV9HTE9CQUw7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uCisJCSAqIFJldHVybiBhIHNjb3BlIHdpdGggbG93IHByaW9yaXR5IGFzIGEgbGFzdCByZXNvcnQuCisJCSAqLworCQlyZXR1cm4gSVBWNl9BRERSX1NDT1BFX05PREVMT0NBTDsKKwl9Cit9CisKKy8qIFRoZXNlIG1hY3JvcyBhcmUgbW9kZWxsZWQgYWZ0ZXIgdGhlIG9uZXMgaW4gPG5ldGluZXQvaW42Lmg+LiAqLworCisvKiBSRkMgNDM4MCwgc2VjdGlvbiAyLjYgKi8KKyNkZWZpbmUgSU42X0lTX0FERFJfVEVSRURPKGEpCSBcCisJKCgqKGNvbnN0IHVpbnQzMl90ICopKGNvbnN0IHZvaWQgKikoJihhKS0+czZfYWRkclswXSkgPT0gbnRvaGwoMHgyMDAxMDAwMCkpKQorCisvKiBSRkMgMzA1Niwgc2VjdGlvbiAyLiAqLworI2RlZmluZSBJTjZfSVNfQUREUl82VE80KGEpCSBcCisJKCgoYSktPnM2X2FkZHJbMF0gPT0gMHgyMCkgJiYgKChhKS0+czZfYWRkclsxXSA9PSAweDAyKSkKKworLyogNmJvbmUgdGVzdGluZyBhZGRyZXNzIGFyZWEgKDNmZmU6Oi8xNiksIGRlcHJlY2F0ZWQgaW4gUkZDIDM3MDEuICovCisjZGVmaW5lIElONl9JU19BRERSXzZCT05FKGEpICAgICAgXAorCSgoKGEpLT5zNl9hZGRyWzBdID09IDB4M2YpICYmICgoYSktPnM2X2FkZHJbMV0gPT0gMHhmZSkpCisKKy8qCisgKiBHZXQgdGhlIGxhYmVsIGZvciBhIGdpdmVuIElQdjQvSVB2NiBhZGRyZXNzLgorICogUkZDIDY3MjQsIHNlY3Rpb24gMi4xLgorICovCisKKy8qQVJHU1VTRUQqLworc3RhdGljIGludAorX2dldF9sYWJlbChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCXJldHVybiA0OworCX0gZWxzZSBpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkcjsKKwkJaWYgKElONl9JU19BRERSX0xPT1BCQUNLKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJmFkZHI2LT5zaW42X2FkZHIpKSB7CisJCQlyZXR1cm4gNDsKKwkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl82VE80KCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDI7CisJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVEVSRURPKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDU7CisJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVUxBKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDEzOworCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1Y0Q09NUEFUKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDM7CisJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfU0lURUxPQ0FMKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDExOworCQl9IGVsc2UgaWYgKElONl9JU19BRERSXzZCT05FKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDEyOworCQl9IGVsc2UgeworCQkJLyogQWxsIG90aGVyIElQdjYgYWRkcmVzc2VzLCBpbmNsdWRpbmcgZ2xvYmFsIHVuaWNhc3QgYWRkcmVzc2VzLiAqLworCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uCisJCSAqIFJldHVybiBhIHNlbWktcmFuZG9tIGxhYmVsIGFzIGEgbGFzdCByZXNvcnQuCisJCSAqLworCQlyZXR1cm4gMTsKKwl9Cit9CisKKy8qCisgKiBHZXQgdGhlIHByZWNlZGVuY2UgZm9yIGEgZ2l2ZW4gSVB2NC9JUHY2IGFkZHJlc3MuCisgKiBSRkMgNjcyNCwgc2VjdGlvbiAyLjEuCisgKi8KKworLypBUkdTVVNFRCovCitzdGF0aWMgaW50CitfZ2V0X3ByZWNlZGVuY2UoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQlyZXR1cm4gMzU7CisJfSBlbHNlIGlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjYgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCWlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiA1MDsKKwkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiAzNTsKKwkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl82VE80KCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDMwOworCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1RFUkVETygmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiA1OworCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1VMQSgmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiAzOworCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1Y0Q09NUEFUKCZhZGRyNi0+c2luNl9hZGRyKSB8fAorCQkgICAgICAgICAgIElONl9JU19BRERSX1NJVEVMT0NBTCgmYWRkcjYtPnNpbjZfYWRkcikgfHwKKwkJICAgICAgICAgICBJTjZfSVNfQUREUl82Qk9ORSgmYWRkcjYtPnNpbjZfYWRkcikpIHsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgeworCQkJLyogQWxsIG90aGVyIElQdjYgYWRkcmVzc2VzLCBpbmNsdWRpbmcgZ2xvYmFsIHVuaWNhc3QgYWRkcmVzc2VzLiAqLworCQkJcmV0dXJuIDQwOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIDE7CisJfQorfQorCisvKgorICogRmluZCBudW1iZXIgb2YgbWF0Y2hpbmcgaW5pdGlhbCBiaXRzIGJldHdlZW4gdGhlIHR3byBhZGRyZXNzZXMgYTEgYW5kIGEyLgorICovCisKKy8qQVJHU1VTRUQqLworc3RhdGljIGludAorX2NvbW1vbl9wcmVmaXhfbGVuKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTEsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTIpCit7CisJY29uc3QgY2hhciAqcDEgPSAoY29uc3QgY2hhciAqKWExOworCWNvbnN0IGNoYXIgKnAyID0gKGNvbnN0IGNoYXIgKilhMjsKKwl1bnNpZ25lZCBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZigqYTEpOyArK2kpIHsKKwkJaW50IHgsIGo7CisKKwkJaWYgKHAxW2ldID09IHAyW2ldKSB7CisJCQljb250aW51ZTsKKwkJfQorCQl4ID0gcDFbaV0gXiBwMltpXTsKKwkJZm9yIChqID0gMDsgaiA8IENIQVJfQklUOyArK2opIHsKKwkJCWlmICh4ICYgKDEgPDwgKENIQVJfQklUIC0gMSkpKSB7CisJCQkJcmV0dXJuIGkgKiBDSEFSX0JJVCArIGo7CisJCQl9CisJCQl4IDw8PSAxOworCQl9CisJfQorCXJldHVybiBzaXplb2YoKmExKSAqIENIQVJfQklUOworfQorCisvKgorICogQ29tcGFyZSB0d28gc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgcGFpcnMuCisgKiBSRkMgNjcyNCwgc2VjdGlvbiA2LgorICovCisKKy8qQVJHU1VTRUQqLworc3RhdGljIGludAorX3JmYzY3MjRfY29tcGFyZShjb25zdCB2b2lkICpwdHIxLCBjb25zdCB2b2lkKiBwdHIyKQoreworCWNvbnN0IHN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0gKmExID0gKGNvbnN0IHN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0gKilwdHIxOworCWNvbnN0IHN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0gKmEyID0gKGNvbnN0IHN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0gKilwdHIyOworCWludCBzY29wZV9zcmMxLCBzY29wZV9kc3QxLCBzY29wZV9tYXRjaDE7CisJaW50IHNjb3BlX3NyYzIsIHNjb3BlX2RzdDIsIHNjb3BlX21hdGNoMjsKKwlpbnQgbGFiZWxfc3JjMSwgbGFiZWxfZHN0MSwgbGFiZWxfbWF0Y2gxOworCWludCBsYWJlbF9zcmMyLCBsYWJlbF9kc3QyLCBsYWJlbF9tYXRjaDI7CisJaW50IHByZWNlZGVuY2UxLCBwcmVjZWRlbmNlMjsKKwlpbnQgcHJlZml4bGVuMSwgcHJlZml4bGVuMjsKKworCS8qIFJ1bGUgMTogQXZvaWQgdW51c2FibGUgZGVzdGluYXRpb25zLiAqLworCWlmIChhMS0+aGFzX3NyY19hZGRyICE9IGEyLT5oYXNfc3JjX2FkZHIpIHsKKwkJcmV0dXJuIGEyLT5oYXNfc3JjX2FkZHIgLSBhMS0+aGFzX3NyY19hZGRyOworCX0KKworCS8qIFJ1bGUgMjogUHJlZmVyIG1hdGNoaW5nIHNjb3BlLiAqLworCXNjb3BlX3NyYzEgPSBfZ2V0X3Njb3BlKCZhMS0+c3JjX2FkZHIuZ2VuZXJpYyk7CisJc2NvcGVfZHN0MSA9IF9nZXRfc2NvcGUoYTEtPmFpLT5haV9hZGRyKTsKKwlzY29wZV9tYXRjaDEgPSAoc2NvcGVfc3JjMSA9PSBzY29wZV9kc3QxKTsKKworCXNjb3BlX3NyYzIgPSBfZ2V0X3Njb3BlKCZhMi0+c3JjX2FkZHIuZ2VuZXJpYyk7CisJc2NvcGVfZHN0MiA9IF9nZXRfc2NvcGUoYTItPmFpLT5haV9hZGRyKTsKKwlzY29wZV9tYXRjaDIgPSAoc2NvcGVfc3JjMiA9PSBzY29wZV9kc3QyKTsKKworCWlmIChzY29wZV9tYXRjaDEgIT0gc2NvcGVfbWF0Y2gyKSB7CisJCXJldHVybiBzY29wZV9tYXRjaDIgLSBzY29wZV9tYXRjaDE7CisJfQorCisJLyoKKwkgKiBSdWxlIDM6IEF2b2lkIGRlcHJlY2F0ZWQgYWRkcmVzc2VzLgorCSAqIFRPRE8oc2Vzc2UpOiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIGdvb2Qgd2F5IG9mIGZpbmRpbmcgdGhpcy4KKwkgKi8KKworCS8qCisJICogUnVsZSA0OiBQcmVmZXIgaG9tZSBhZGRyZXNzZXMuCisJICogVE9ETyhzZXNzZSk6IFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgZ29vZCB3YXkgb2YgZmluZGluZyB0aGlzLgorCSAqLworCisJLyogUnVsZSA1OiBQcmVmZXIgbWF0Y2hpbmcgbGFiZWwuICovCisJbGFiZWxfc3JjMSA9IF9nZXRfbGFiZWwoJmExLT5zcmNfYWRkci5nZW5lcmljKTsKKwlsYWJlbF9kc3QxID0gX2dldF9sYWJlbChhMS0+YWktPmFpX2FkZHIpOworCWxhYmVsX21hdGNoMSA9IChsYWJlbF9zcmMxID09IGxhYmVsX2RzdDEpOworCisJbGFiZWxfc3JjMiA9IF9nZXRfbGFiZWwoJmEyLT5zcmNfYWRkci5nZW5lcmljKTsKKwlsYWJlbF9kc3QyID0gX2dldF9sYWJlbChhMi0+YWktPmFpX2FkZHIpOworCWxhYmVsX21hdGNoMiA9IChsYWJlbF9zcmMyID09IGxhYmVsX2RzdDIpOworCisJaWYgKGxhYmVsX21hdGNoMSAhPSBsYWJlbF9tYXRjaDIpIHsKKwkJcmV0dXJuIGxhYmVsX21hdGNoMiAtIGxhYmVsX21hdGNoMTsKKwl9CisKKwkvKiBSdWxlIDY6IFByZWZlciBoaWdoZXIgcHJlY2VkZW5jZS4gKi8KKwlwcmVjZWRlbmNlMSA9IF9nZXRfcHJlY2VkZW5jZShhMS0+YWktPmFpX2FkZHIpOworCXByZWNlZGVuY2UyID0gX2dldF9wcmVjZWRlbmNlKGEyLT5haS0+YWlfYWRkcik7CisJaWYgKHByZWNlZGVuY2UxICE9IHByZWNlZGVuY2UyKSB7CisJCXJldHVybiBwcmVjZWRlbmNlMiAtIHByZWNlZGVuY2UxOworCX0KKworCS8qCisJICogUnVsZSA3OiBQcmVmZXIgbmF0aXZlIHRyYW5zcG9ydC4KKwkgKiBUT0RPKHNlc3NlKTogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBnb29kIHdheSBvZiBmaW5kaW5nIHRoaXMuCisJICovCisKKwkvKiBSdWxlIDg6IFByZWZlciBzbWFsbGVyIHNjb3BlLiAqLworCWlmIChzY29wZV9kc3QxICE9IHNjb3BlX2RzdDIpIHsKKwkJcmV0dXJuIHNjb3BlX2RzdDEgLSBzY29wZV9kc3QyOworCX0KKworCS8qCisJICogUnVsZSA5OiBVc2UgbG9uZ2VzdCBtYXRjaGluZyBwcmVmaXguCisgICAgICAgICAqIFdlIGltcGxlbWVudCB0aGlzIGZvciBJUHY2IG9ubHksIGFzIHRoZSBydWxlcyBpbiBSRkMgNjcyNCBkb24ndCBzZWVtCisgICAgICAgICAqIHRvIHdvcmsgdmVyeSB3ZWxsIGRpcmVjdGx5IGFwcGxpZWQgdG8gSVB2NC4gKGdsaWJjIHVzZXMgaW5mb3JtYXRpb24gZnJvbQorICAgICAgICAgKiB0aGUgcm91dGluZyB0YWJsZSBmb3IgYSBjdXN0b20gSVB2NCBpbXBsZW1lbnRhdGlvbiBoZXJlLikKKwkgKi8KKwlpZiAoYTEtPmhhc19zcmNfYWRkciAmJiBhMS0+YWktPmFpX2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNiAmJgorCSAgICBhMi0+aGFzX3NyY19hZGRyICYmIGEyLT5haS0+YWlfYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmExX3NyYyA9ICZhMS0+c3JjX2FkZHIuaW42OworCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphMV9kc3QgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKWExLT5haS0+YWlfYWRkcjsKKwkJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqYTJfc3JjID0gJmEyLT5zcmNfYWRkci5pbjY7CisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmEyX2RzdCA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYTItPmFpLT5haV9hZGRyOworCQlwcmVmaXhsZW4xID0gX2NvbW1vbl9wcmVmaXhfbGVuKCZhMV9zcmMtPnNpbjZfYWRkciwgJmExX2RzdC0+c2luNl9hZGRyKTsKKwkJcHJlZml4bGVuMiA9IF9jb21tb25fcHJlZml4X2xlbigmYTJfc3JjLT5zaW42X2FkZHIsICZhMl9kc3QtPnNpbjZfYWRkcik7CisJCWlmIChwcmVmaXhsZW4xICE9IHByZWZpeGxlbjIpIHsKKwkJCXJldHVybiBwcmVmaXhsZW4yIC0gcHJlZml4bGVuMTsKKwkJfQorCX0KKworCS8qCisJICogUnVsZSAxMDogTGVhdmUgdGhlIG9yZGVyIHVuY2hhbmdlZC4KKwkgKiBXZSBuZWVkIHRoaXMgc2luY2UgcXNvcnQoKSBpcyBub3QgbmVjZXNzYXJpbHkgc3RhYmxlLgorCSAqLworCXJldHVybiBhMS0+b3JpZ2luYWxfb3JkZXIgLSBhMi0+b3JpZ2luYWxfb3JkZXI7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBzb3VyY2UgYWRkcmVzcyB0aGF0IHdpbGwgYmUgdXNlZCBpZiB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgZ2l2ZW4KKyAqIGFkZHJlc3MuIHNyY19hZGRyIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBzdHJ1Y3Qgc29ja2FkZHJfaW42LgorICoKKyAqIFJldHVybnMgMSBpZiBhIHNvdXJjZSBhZGRyZXNzIHdhcyBmb3VuZCwgMCBpZiB0aGUgYWRkcmVzcyBpcyB1bnJlYWNoYWJsZSwKKyAqIGFuZCAtMSBpZiBhIGZhdGFsIGVycm9yIG9jY3VycmVkLiBJZiAwIG9yIDEsIHRoZSBjb250ZW50cyBvZiBzcmNfYWRkciBhcmUKKyAqIHVuZGVmaW5lZC4KKyAqLworCisvKkFSR1NVU0VEKi8KK3N0YXRpYyBpbnQKK19maW5kX3NyY19hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHNvY2thZGRyICpzcmNfYWRkciwgdW5zaWduZWQgbWFyaykKK3sKKwlpbnQgc29jazsKKwlpbnQgcmV0OworCXNvY2tsZW5fdCBsZW47CisKKwlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogTm8ga25vd24gdXNhYmxlIHNvdXJjZSBhZGRyZXNzIGZvciBub24tSU5FVCBmYW1pbGllcy4gKi8KKwkJcmV0dXJuIDA7CisJfQorCisJc29jayA9IHNvY2tldChhZGRyLT5zYV9mYW1pbHksIFNPQ0tfREdSQU0gfCBTT0NLX0NMT0VYRUMsIElQUFJPVE9fVURQKTsKKwlpZiAoc29jayA9PSAtMSkgeworCQlpZiAoZXJybm8gPT0gRUFGTk9TVVBQT1JUKSB7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlpZiAobWFyayAhPSBNQVJLX1VOU0VUICYmIHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fTUFSSywgJm1hcmssIHNpemVvZihtYXJrKSkgPCAwKQorCQlyZXR1cm4gMDsKKwlkbyB7CisJCXJldCA9IF9fY29ubmVjdChzb2NrLCBhZGRyLCBsZW4pOworCX0gd2hpbGUgKHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisKKwlpZiAocmV0ID09IC0xKSB7CisJCWNsb3NlKHNvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ2V0c29ja25hbWUoc29jaywgc3JjX2FkZHIsICZsZW4pID09IC0xKSB7CisJCWNsb3NlKHNvY2spOworCQlyZXR1cm4gLTE7CisJfQorCWNsb3NlKHNvY2spOworCXJldHVybiAxOworfQorCisvKgorICogU29ydCB0aGUgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgc2VudGluZWwtPmFpX25leHQgaW4gUkZDNjcyNCBvcmRlci4KKyAqIFdpbGwgbGVhdmUgdGhlIGxpc3QgdW5jaGFuZ2VkIGlmIGFuIGVycm9yIG9jY3Vycy4KKyAqLworCisvKkFSR1NVU0VEKi8KK3N0YXRpYyB2b2lkCitfcmZjNjcyNF9zb3J0KHN0cnVjdCBhZGRyaW5mbyAqbGlzdF9zZW50aW5lbCwgdW5zaWduZWQgbWFyaykKK3sKKwlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKKwlpbnQgbmVsZW0gPSAwLCBpOworCXN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0gKmVsZW1zOworCisJY3VyID0gbGlzdF9zZW50aW5lbC0+YWlfbmV4dDsKKwl3aGlsZSAoY3VyKSB7CisJCSsrbmVsZW07CisJCWN1ciA9IGN1ci0+YWlfbmV4dDsKKwl9CisKKwllbGVtcyA9IChzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICopbWFsbG9jKG5lbGVtICogc2l6ZW9mKHN0cnVjdCBhZGRyaW5mb19zb3J0X2VsZW0pKTsKKwlpZiAoZWxlbXMgPT0gTlVMTCkgeworCQlnb3RvIGVycm9yOworCX0KKworCS8qCisJICogQ29udmVydCB0aGUgbGlua2VkIGxpc3QgdG8gYW4gYXJyYXkgdGhhdCBhbHNvIGNvbnRhaW5zIHRoZSBjYW5kaWRhdGUKKwkgKiBzb3VyY2UgYWRkcmVzcyBmb3IgZWFjaCBkZXN0aW5hdGlvbiBhZGRyZXNzLgorCSAqLworCWZvciAoaSA9IDAsIGN1ciA9IGxpc3Rfc2VudGluZWwtPmFpX25leHQ7IGkgPCBuZWxlbTsgKytpLCBjdXIgPSBjdXItPmFpX25leHQpIHsKKwkJaW50IGhhc19zcmNfYWRkcjsKKwkJYXNzZXJ0KGN1ciAhPSBOVUxMKTsKKwkJZWxlbXNbaV0uYWkgPSBjdXI7CisJCWVsZW1zW2ldLm9yaWdpbmFsX29yZGVyID0gaTsKKworCQloYXNfc3JjX2FkZHIgPSBfZmluZF9zcmNfYWRkcihjdXItPmFpX2FkZHIsICZlbGVtc1tpXS5zcmNfYWRkci5nZW5lcmljLCBtYXJrKTsKKwkJaWYgKGhhc19zcmNfYWRkciA9PSAtMSkgeworCQkJZ290byBlcnJvcjsKKwkJfQorCQllbGVtc1tpXS5oYXNfc3JjX2FkZHIgPSBoYXNfc3JjX2FkZHI7CisJfQorCisJLyogU29ydCB0aGUgYWRkcmVzc2VzLCBhbmQgcmVhcnJhbmdlIHRoZSBsaW5rZWQgbGlzdCBzbyBpdCBtYXRjaGVzIHRoZSBzb3J0ZWQgb3JkZXIuICovCisJcXNvcnQoKHZvaWQgKillbGVtcywgbmVsZW0sIHNpemVvZihzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtKSwgX3JmYzY3MjRfY29tcGFyZSk7CisKKwlsaXN0X3NlbnRpbmVsLT5haV9uZXh0ID0gZWxlbXNbMF0uYWk7CisJZm9yIChpID0gMDsgaSA8IG5lbGVtIC0gMTsgKytpKSB7CisJCWVsZW1zW2ldLmFpLT5haV9uZXh0ID0gZWxlbXNbaSArIDFdLmFpOworCX0KKwllbGVtc1tuZWxlbSAtIDFdLmFpLT5haV9uZXh0ID0gTlVMTDsKKworZXJyb3I6CisJZnJlZShlbGVtcyk7Cit9CisKKy8qQVJHU1VTRUQqLworc3RhdGljIGludAorX2Ruc19nZXRhZGRyaW5mbyh2b2lkICpydiwgdm9pZAkqY2JfZGF0YSwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3QgYWRkcmluZm8gKmFpOworCXF1ZXJ5YnVmICpidWYsICpidWYyOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWk7CisJc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsLCAqY3VyOworCXN0cnVjdCByZXNfdGFyZ2V0IHEsIHEyOworCXJlc19zdGF0ZSByZXM7CisJdW5zaWduZWQgbmV0aWQsIG1hcms7CisKKwluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOworCXBhaSA9IHZhX2FyZyhhcCwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICopOworCW5ldGlkID0gdmFfYXJnKGFwLCB1bnNpZ25lZCk7CisJbWFyayA9IHZhX2FyZyhhcCwgdW5zaWduZWQpOworCS8vZnByaW50ZihzdGRlcnIsICJfZG5zX2dldGFkZHJpbmZvKCkgbmFtZSA9ICclcydcbiIsIG5hbWUpOworCisJbWVtc2V0KCZxLCAwLCBzaXplb2YocSkpOworCW1lbXNldCgmcTIsIDAsIHNpemVvZihxMikpOworCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOworCWN1ciA9ICZzZW50aW5lbDsKKworCWJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikpOworCWlmIChidWYgPT0gTlVMTCkgeworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJYnVmMiA9IG1hbGxvYyhzaXplb2YoKmJ1ZjIpKTsKKwlpZiAoYnVmMiA9PSBOVUxMKSB7CisJCWZyZWUoYnVmKTsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCisJc3dpdGNoIChwYWktPmFpX2ZhbWlseSkgeworCWNhc2UgQUZfVU5TUEVDOgorCQkvKiBwcmVmZXIgSVB2NiAqLworCQlxLm5hbWUgPSBuYW1lOworCQlxLnFjbGFzcyA9IENfSU47CisJCXEuYW5zd2VyID0gYnVmLT5idWY7CisJCXEuYW5zbGVuID0gc2l6ZW9mKGJ1Zi0+YnVmKTsKKwkJaW50IHF1ZXJ5X2lwdjYgPSAxLCBxdWVyeV9pcHY0ID0gMTsKKwkJaWYgKHBhaS0+YWlfZmxhZ3MgJiBBSV9BRERSQ09ORklHKSB7CisJCQlxdWVyeV9pcHY2ID0gX2hhdmVfaXB2NihtYXJrKTsKKwkJCXF1ZXJ5X2lwdjQgPSBfaGF2ZV9pcHY0KG1hcmspOworCQl9CisJCWlmIChxdWVyeV9pcHY2KSB7CisJCQlxLnF0eXBlID0gVF9BQUFBOworCQkJaWYgKHF1ZXJ5X2lwdjQpIHsKKwkJCQlxLm5leHQgPSAmcTI7CisJCQkJcTIubmFtZSA9IG5hbWU7CisJCQkJcTIucWNsYXNzID0gQ19JTjsKKwkJCQlxMi5xdHlwZSA9IFRfQTsKKwkJCQlxMi5hbnN3ZXIgPSBidWYyLT5idWY7CisJCQkJcTIuYW5zbGVuID0gc2l6ZW9mKGJ1ZjItPmJ1Zik7CisJCQl9CisJCX0gZWxzZSBpZiAocXVlcnlfaXB2NCkgeworCQkJcS5xdHlwZSA9IFRfQTsKKwkJfSBlbHNlIHsKKwkJCWZyZWUoYnVmKTsKKwkJCWZyZWUoYnVmMik7CisJCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUOgorCQlxLm5hbWUgPSBuYW1lOworCQlxLnFjbGFzcyA9IENfSU47CisJCXEucXR5cGUgPSBUX0E7CisJCXEuYW5zd2VyID0gYnVmLT5idWY7CisJCXEuYW5zbGVuID0gc2l6ZW9mKGJ1Zi0+YnVmKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJcS5uYW1lID0gbmFtZTsKKwkJcS5xY2xhc3MgPSBDX0lOOworCQlxLnF0eXBlID0gVF9BQUFBOworCQlxLmFuc3dlciA9IGJ1Zi0+YnVmOworCQlxLmFuc2xlbiA9IHNpemVvZihidWYtPmJ1Zik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZyZWUoYnVmKTsKKwkJZnJlZShidWYyKTsKKwkJcmV0dXJuIE5TX1VOQVZBSUw7CisJfQorCisJcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWZyZWUoYnVmKTsKKwkJZnJlZShidWYyKTsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKworCS8qIHRoaXMganVzdCBzZXRzIG91ciBuZXRpZCB2YWwgaW4gdGhlIHRocmVhZCBwcml2YXRlIGRhdGEgc28gd2UgZG9uJ3QgaGF2ZSB0bworCSAqIG1vZGlmeSB0aGUgYXBpJ3MgYWxsIHRoZSB3YXkgZG93biB0byByZXNfc2VuZC5jJ3MgcmVzX25zZW5kLiAgV2UgY291bGQKKwkgKiBmdWxseSBwb3B1bGF0ZSB0aGUgdGhyZWFkIHByaXZhdGUgZGF0YSBoZXJlLCBidXQgaWYgd2UgZ2V0IGRvd24gdGhlcmUKKwkgKiBhbmQgaGF2ZSBhIGNhY2hlIGhpdCB0aGF0IHdvdWxkIGJlIHdhc3RlZCwgc28gd2UgZG8gdGhlIHJlc3QgdGhlcmUgb24gbWlzcworCSAqLworCXJlc19zZXRuZXRpZChyZXMsIG5ldGlkKTsKKwlyZXNfc2V0bWFyayhyZXMsIG1hcmspOworCWlmIChyZXNfc2VhcmNoTihuYW1lLCAmcSwgcmVzKSA8IDApIHsKKwkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJCWZyZWUoYnVmKTsKKwkJZnJlZShidWYyKTsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwlhaSA9IGdldGFuc3dlcihidWYsIHEubiwgcS5uYW1lLCBxLnF0eXBlLCBwYWkpOworCWlmIChhaSkgeworCQljdXItPmFpX25leHQgPSBhaTsKKwkJd2hpbGUgKGN1ciAmJiBjdXItPmFpX25leHQpCisJCQljdXIgPSBjdXItPmFpX25leHQ7CisJfQorCWlmIChxLm5leHQpIHsKKwkJYWkgPSBnZXRhbnN3ZXIoYnVmMiwgcTIubiwgcTIubmFtZSwgcTIucXR5cGUsIHBhaSk7CisJCWlmIChhaSkKKwkJCWN1ci0+YWlfbmV4dCA9IGFpOworCX0KKwlmcmVlKGJ1Zik7CisJZnJlZShidWYyKTsKKwlpZiAoc2VudGluZWwuYWlfbmV4dCA9PSBOVUxMKSB7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCQlzd2l0Y2ggKGhfZXJybm8pIHsKKwkJY2FzZSBIT1NUX05PVF9GT1VORDoKKwkJCXJldHVybiBOU19OT1RGT1VORDsKKwkJY2FzZSBUUllfQUdBSU46CisJCQlyZXR1cm4gTlNfVFJZQUdBSU47CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTlNfVU5BVkFJTDsKKwkJfQorCX0KKworCV9yZmM2NzI0X3NvcnQoJnNlbnRpbmVsLCBuZXRpZCk7CisKKwlfX3Jlc19wdXRfc3RhdGUocmVzKTsKKworCSooKHN0cnVjdCBhZGRyaW5mbyAqKilydikgPSBzZW50aW5lbC5haV9uZXh0OworCXJldHVybiBOU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZAorX3NldGh0ZW50KEZJTEUgKipob3N0ZikKK3sKKworCWlmICghKmhvc3RmKQorCQkqaG9zdGYgPSBmb3BlbihfUEFUSF9IT1NUUywgInIiICk7CisJZWxzZQorCQlyZXdpbmQoKmhvc3RmKTsKK30KKworc3RhdGljIHZvaWQKK19lbmRodGVudChGSUxFICoqaG9zdGYpCit7CisKKwlpZiAoKmhvc3RmKSB7CisJCSh2b2lkKSBmY2xvc2UoKmhvc3RmKTsKKwkJKmhvc3RmID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKgorX2dldGh0ZW50KEZJTEUgKipob3N0ZiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWkpCit7CisJY2hhciAqcDsKKwljaGFyICpjcCwgKnRuYW1lLCAqY25hbWU7CisJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzMCwgKnJlczsKKwlpbnQgZXJyb3I7CisJY29uc3QgY2hhciAqYWRkcjsKKwljaGFyIGhvc3RidWZbOCoxMDI0XTsKKworLy8JZnByaW50ZihzdGRlcnIsICJfZ2V0aHRlbnQoKSBuYW1lID0gJyVzJ1xuIiwgbmFtZSk7CisJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisJYXNzZXJ0KHBhaSAhPSBOVUxMKTsKKworCWlmICghKmhvc3RmICYmICEoKmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApKSkKKwkJcmV0dXJuIChOVUxMKTsKKyBhZ2FpbjoKKwlpZiAoIShwID0gZmdldHMoaG9zdGJ1Ziwgc2l6ZW9mIGhvc3RidWYsICpob3N0ZikpKQorCQlyZXR1cm4gKE5VTEwpOworCWlmICgqcCA9PSAnIycpCisJCWdvdG8gYWdhaW47CisJaWYgKCEoY3AgPSBzdHJwYnJrKHAsICIjXG4iKSkpCisJCWdvdG8gYWdhaW47CisJKmNwID0gJ1wwJzsKKwlpZiAoIShjcCA9IHN0cnBicmsocCwgIiBcdCIpKSkKKwkJZ290byBhZ2FpbjsKKwkqY3ArKyA9ICdcMCc7CisJYWRkciA9IHA7CisJLyogaWYgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlJ3JlIGxvb2tpbmcgZm9yLCBza2lwIGl0LiAqLworCWNuYW1lID0gTlVMTDsKKwl3aGlsZSAoY3AgJiYgKmNwKSB7CisJCWlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7CisJCQljcCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFjbmFtZSkKKwkJCWNuYW1lID0gY3A7CisJCXRuYW1lID0gY3A7CisJCWlmICgoY3AgPSBzdHJwYnJrKGNwLCAiIFx0IikpICE9IE5VTEwpCisJCQkqY3ArKyA9ICdcMCc7CisvLwkJZnByaW50ZihzdGRlcnIsICJcdHRuYW1lID0gJyVzJyIsIHRuYW1lKTsKKwkJaWYgKHN0cmNhc2VjbXAobmFtZSwgdG5hbWUpID09IDApCisJCQlnb3RvIGZvdW5kOworCX0KKwlnb3RvIGFnYWluOworCitmb3VuZDoKKwloaW50cyA9ICpwYWk7CisJaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKKwllcnJvciA9IGdldGFkZHJpbmZvKGFkZHIsIE5VTEwsICZoaW50cywgJnJlczApOworCWlmIChlcnJvcikKKwkJZ290byBhZ2FpbjsKKwlmb3IgKHJlcyA9IHJlczA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0KSB7CisJCS8qIGNvdmVyIGl0IHVwICovCisJCXJlcy0+YWlfZmxhZ3MgPSBwYWktPmFpX2ZsYWdzOworCisJCWlmIChwYWktPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKSB7CisJCQlpZiAoZ2V0X2Nhbm9ubmFtZShwYWksIHJlcywgY25hbWUpICE9IDApIHsKKwkJCQlmcmVlYWRkcmluZm8ocmVzMCk7CisJCQkJZ290byBhZ2FpbjsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzMDsKK30KKworLypBUkdTVVNFRCovCitzdGF0aWMgaW50CitfZmlsZXNfZ2V0YWRkcmluZm8odm9pZCAqcnYsIHZvaWQgKmNiX2RhdGEsIHZhX2xpc3QgYXApCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaTsKKwlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWwsICpjdXI7CisJc3RydWN0IGFkZHJpbmZvICpwOworCUZJTEUgKmhvc3RmID0gTlVMTDsKKworCW5hbWUgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJcGFpID0gdmFfYXJnKGFwLCBzdHJ1Y3QgYWRkcmluZm8gKik7CisKKy8vCWZwcmludGYoc3RkZXJyLCAiX2ZpbGVzX2dldGFkZHJpbmZvKCkgbmFtZSA9ICclcydcbiIsIG5hbWUpOworCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOworCWN1ciA9ICZzZW50aW5lbDsKKworCV9zZXRodGVudCgmaG9zdGYpOworCXdoaWxlICgocCA9IF9nZXRodGVudCgmaG9zdGYsIG5hbWUsIHBhaSkpICE9IE5VTEwpIHsKKwkJY3VyLT5haV9uZXh0ID0gcDsKKwkJd2hpbGUgKGN1ciAmJiBjdXItPmFpX25leHQpCisJCQljdXIgPSBjdXItPmFpX25leHQ7CisJfQorCV9lbmRodGVudCgmaG9zdGYpOworCisJKigoc3RydWN0IGFkZHJpbmZvICoqKXJ2KSA9IHNlbnRpbmVsLmFpX25leHQ7CisJaWYgKHNlbnRpbmVsLmFpX25leHQgPT0gTlVMTCkKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCXJldHVybiBOU19TVUNDRVNTOworfQorCisvKiByZXNvbHZlciBsb2dpYyAqLworCisvKgorICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgYXdhaXQgYW5zd2VyLgorICogUmV0dXJuZWQgYW5zd2VyIGlzIHBsYWNlZCBpbiBzdXBwbGllZCBidWZmZXIgImFuc3dlciIuCisgKiBQZXJmb3JtIHByZWxpbWluYXJ5IGNoZWNrIG9mIGFuc3dlciwgcmV0dXJuaW5nIHN1Y2Nlc3Mgb25seQorICogaWYgbm8gZXJyb3IgaXMgaW5kaWNhdGVkIGFuZCB0aGUgYW5zd2VyIGNvdW50IGlzIG5vbnplcm8uCisgKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICogRXJyb3IgbnVtYmVyIGlzIGxlZnQgaW4gaF9lcnJuby4KKyAqCisgKiBDYWxsZXIgbXVzdCBwYXJzZSBhbnN3ZXIgYW5kIGRldGVybWluZSB3aGV0aGVyIGl0IGFuc3dlcnMgdGhlIHF1ZXN0aW9uLgorICovCitzdGF0aWMgaW50CityZXNfcXVlcnlOKGNvbnN0IGNoYXIgKm5hbWUsIC8qIGRvbWFpbiBuYW1lICovIHN0cnVjdCByZXNfdGFyZ2V0ICp0YXJnZXQsCisgICAgcmVzX3N0YXRlIHJlcykKK3sKKwl1X2NoYXIgYnVmW01BWFBBQ0tFVF07CisJSEVBREVSICpocDsKKwlpbnQgbjsKKwlzdHJ1Y3QgcmVzX3RhcmdldCAqdDsKKwlpbnQgcmNvZGU7CisJaW50IGFuY291bnQ7CisKKwlhc3NlcnQobmFtZSAhPSBOVUxMKTsKKwkvKiBYWFg6IHRhcmdldCBtYXkgYmUgTlVMTD8/PyAqLworCisJcmNvZGUgPSBOT0VSUk9SOworCWFuY291bnQgPSAwOworCisJZm9yICh0ID0gdGFyZ2V0OyB0OyB0ID0gdC0+bmV4dCkgeworCQlpbnQgY2xhc3MsIHR5cGU7CisJCXVfY2hhciAqYW5zd2VyOworCQlpbnQgYW5zbGVuOworCisJCWhwID0gKEhFQURFUiAqKSh2b2lkICopdC0+YW5zd2VyOworCQlocC0+cmNvZGUgPSBOT0VSUk9SOwkvKiBkZWZhdWx0ICovCisKKwkJLyogbWFrZSBpdCBlYXNpZXIuLi4gKi8KKwkJY2xhc3MgPSB0LT5xY2xhc3M7CisJCXR5cGUgPSB0LT5xdHlwZTsKKwkJYW5zd2VyID0gdC0+YW5zd2VyOworCQlhbnNsZW4gPSB0LT5hbnNsZW47CisjaWZkZWYgREVCVUcKKwkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCXByaW50ZigiOzsgcmVzX25xdWVyeSglcywgJWQsICVkKVxuIiwgbmFtZSwgY2xhc3MsIHR5cGUpOworI2VuZGlmCisKKwkJbiA9IHJlc19ubWtxdWVyeShyZXMsIFFVRVJZLCBuYW1lLCBjbGFzcywgdHlwZSwgTlVMTCwgMCwgTlVMTCwKKwkJICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworI2lmZGVmIFJFU19VU0VfRUROUzAKKwkJaWYgKG4gPiAwICYmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0VETlMwKSAhPSAwKQorCQkJbiA9IHJlc19ub3B0KHJlcywgbiwgYnVmLCBzaXplb2YoYnVmKSwgYW5zbGVuKTsKKyNlbmRpZgorCQlpZiAobiA8PSAwKSB7CisjaWZkZWYgREVCVUcKKwkJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5OiBta3F1ZXJ5IGZhaWxlZFxuIik7CisjZW5kaWYKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCXJldHVybiBuOworCQl9CisJCW4gPSByZXNfbnNlbmQocmVzLCBidWYsIG4sIGFuc3dlciwgYW5zbGVuKTsKKyNpZiAwCisJCWlmIChuIDwgMCkgeworI2lmZGVmIERFQlVHCisJCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJCXByaW50ZigiOzsgcmVzX3F1ZXJ5OiBzZW5kIGVycm9yXG4iKTsKKyNlbmRpZgorCQkJaF9lcnJubyA9IFRSWV9BR0FJTjsKKwkJCXJldHVybiBuOworCQl9CisjZW5kaWYKKworCQlpZiAobiA8IDAgfHwgaHAtPnJjb2RlICE9IE5PRVJST1IgfHwgbnRvaHMoaHAtPmFuY291bnQpID09IDApIHsKKwkJCXJjb2RlID0gaHAtPnJjb2RlOwkvKiByZWNvcmQgbW9zdCByZWNlbnQgZXJyb3IgKi8KKyNpZmRlZiBERUJVRworCQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCQlwcmludGYoIjs7IHJjb2RlID0gJXUsIGFuY291bnQ9JXVcbiIsIGhwLT5yY29kZSwKKwkJCQkgICAgbnRvaHMoaHAtPmFuY291bnQpKTsKKyNlbmRpZgorCQkJY29udGludWU7CisJCX0KKworCQlhbmNvdW50ICs9IG50b2hzKGhwLT5hbmNvdW50KTsKKworCQl0LT5uID0gbjsKKwl9CisKKwlpZiAoYW5jb3VudCA9PSAwKSB7CisJCXN3aXRjaCAocmNvZGUpIHsKKwkJY2FzZSBOWERPTUFJTjoKKwkJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJCWJyZWFrOworCQljYXNlIFNFUlZGQUlMOgorCQkJaF9lcnJubyA9IFRSWV9BR0FJTjsKKwkJCWJyZWFrOworCQljYXNlIE5PRVJST1I6CisJCQloX2Vycm5vID0gTk9fREFUQTsKKwkJCWJyZWFrOworCQljYXNlIEZPUk1FUlI6CisJCWNhc2UgTk9USU1QOgorCQljYXNlIFJFRlVTRUQ6CisJCWRlZmF1bHQ6CisJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBhbmNvdW50OworfQorCisvKgorICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgcmV0cmlldmUgYW5zd2VyIGluIHN1cHBsaWVkIGJ1ZmZlci4KKyAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmVzcG9uc2Ugb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKiBJZiBlbmFibGVkLCBpbXBsZW1lbnQgc2VhcmNoIHJ1bGVzIHVudGlsIGFuc3dlciBvciB1bnJlY292ZXJhYmxlIGZhaWx1cmUKKyAqIGlzIGRldGVjdGVkLiAgRXJyb3IgY29kZSwgaWYgYW55LCBpcyBsZWZ0IGluIGhfZXJybm8uCisgKi8KK3N0YXRpYyBpbnQKK3Jlc19zZWFyY2hOKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCByZXNfdGFyZ2V0ICp0YXJnZXQsIHJlc19zdGF0ZSByZXMpCit7CisJY29uc3QgY2hhciAqY3AsICogY29uc3QgKmRvbWFpbjsKKwlIRUFERVIgKmhwOworCXVfaW50IGRvdHM7CisJaW50IHRyYWlsaW5nX2RvdCwgcmV0LCBzYXZlZF9oZXJybm87CisJaW50IGdvdF9ub2RhdGEgPSAwLCBnb3Rfc2VydmZhaWwgPSAwLCB0cmllZF9hc19pcyA9IDA7CisKKwlhc3NlcnQobmFtZSAhPSBOVUxMKTsKKwlhc3NlcnQodGFyZ2V0ICE9IE5VTEwpOworCisJaHAgPSAoSEVBREVSICopKHZvaWQgKil0YXJnZXQtPmFuc3dlcjsJLypYWFgqLworCisJZXJybm8gPSAwOworCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsJLyogZGVmYXVsdCwgaWYgd2UgbmV2ZXIgcXVlcnkgKi8KKwlkb3RzID0gMDsKKwlmb3IgKGNwID0gbmFtZTsgKmNwOyBjcCsrKQorCQlkb3RzICs9ICgqY3AgPT0gJy4nKTsKKwl0cmFpbGluZ19kb3QgPSAwOworCWlmIChjcCA+IG5hbWUgJiYgKi0tY3AgPT0gJy4nKQorCQl0cmFpbGluZ19kb3QrKzsKKworCisgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJyZXNfc2VhcmNoTigpIG5hbWUgPSAnJXMnXG4iLCBuYW1lKTsKKworCS8qCisJICogaWYgdGhlcmUgYXJlbid0IGFueSBkb3RzLCBpdCBjb3VsZCBiZSBhIHVzZXItbGV2ZWwgYWxpYXMKKwkgKi8KKwlpZiAoIWRvdHMgJiYgKGNwID0gX19ob3N0YWxpYXMobmFtZSkpICE9IE5VTEwpIHsKKwkJcmV0ID0gcmVzX3F1ZXJ5TihjcCwgdGFyZ2V0LCByZXMpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGRvdHMgaW4gdGhlIG5hbWUgYWxyZWFkeSwgbGV0J3MganVzdCBnaXZlIGl0IGEgdHJ5CisJICogJ2FzIGlzJy4gIFRoZSB0aHJlc2hvbGQgY2FuIGJlIHNldCB3aXRoIHRoZSAibmRvdHMiIG9wdGlvbi4KKwkgKi8KKwlzYXZlZF9oZXJybm8gPSAtMTsKKwlpZiAoZG90cyA+PSByZXMtPm5kb3RzKSB7CisJCXJldCA9IHJlc19xdWVyeWRvbWFpbk4obmFtZSwgTlVMTCwgdGFyZ2V0LCByZXMpOworCQlpZiAocmV0ID4gMCkKKwkJCXJldHVybiAocmV0KTsKKwkJc2F2ZWRfaGVycm5vID0gaF9lcnJubzsKKwkJdHJpZWRfYXNfaXMrKzsKKwl9CisKKwkvKgorCSAqIFdlIGRvIGF0IGxlYXN0IG9uZSBsZXZlbCBvZiBzZWFyY2ggaWYKKwkgKgktIHRoZXJlIGlzIG5vIGRvdCBhbmQgUkVTX0RFRk5BTUUgaXMgc2V0LCBvcgorCSAqCS0gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGRvdCwgdGhlcmUgaXMgbm8gdHJhaWxpbmcgZG90LAorCSAqCSAgYW5kIFJFU19ETlNSQ0ggaXMgc2V0LgorCSAqLworCWlmICgoIWRvdHMgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUZOQU1FUykpIHx8CisJICAgIChkb3RzICYmICF0cmFpbGluZ19kb3QgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19ETlNSQ0gpKSkgeworCQlpbnQgZG9uZSA9IDA7CisKKwkJLyogVW5mb3J0dW5hdGVseSB3ZSBuZWVkIHRvIHNldCBzdHVmZiB1cCBiZWZvcmUKKwkJICogdGhlIGRvbWFpbiBzdHVmZiBpcyB0cmllZC4gIFdpbGwgaGF2ZSBhIGJldHRlcgorCQkgKiBmaXggYWZ0ZXIgdGhyZWFkIHBvb2xzIGFyZSB1c2VkLgorCQkgKi8KKwkJX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX25ldChyZXMpOworCisJCWZvciAoZG9tYWluID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKXJlcy0+ZG5zcmNoOworCQkgICAqZG9tYWluICYmICFkb25lOworCQkgICBkb21haW4rKykgeworCisJCQlyZXQgPSByZXNfcXVlcnlkb21haW5OKG5hbWUsICpkb21haW4sIHRhcmdldCwgcmVzKTsKKwkJCWlmIChyZXQgPiAwKQorCQkJCXJldHVybiByZXQ7CisKKwkJCS8qCisJCQkgKiBJZiBubyBzZXJ2ZXIgcHJlc2VudCwgZ2l2ZSB1cC4KKwkJCSAqIElmIG5hbWUgaXNuJ3QgZm91bmQgaW4gdGhpcyBkb21haW4sCisJCQkgKiBrZWVwIHRyeWluZyBoaWdoZXIgZG9tYWlucyBpbiB0aGUgc2VhcmNoIGxpc3QKKwkJCSAqIChpZiB0aGF0J3MgZW5hYmxlZCkuCisJCQkgKiBPbiBhIE5PX0RBVEEgZXJyb3IsIGtlZXAgdHJ5aW5nLCBvdGhlcndpc2UKKwkJCSAqIGEgd2lsZGNhcmQgZW50cnkgb2YgYW5vdGhlciB0eXBlIGNvdWxkIGtlZXAgdXMKKwkJCSAqIGZyb20gZmluZGluZyB0aGlzIGVudHJ5IGhpZ2hlciBpbiB0aGUgZG9tYWluLgorCQkJICogSWYgd2UgZ2V0IHNvbWUgb3RoZXIgZXJyb3IgKG5lZ2F0aXZlIGFuc3dlciBvcgorCQkJICogc2VydmVyIGZhaWx1cmUpLCB0aGVuIHN0b3Agc2VhcmNoaW5nIHVwLAorCQkJICogYnV0IHRyeSB0aGUgaW5wdXQgbmFtZSBiZWxvdyBpbiBjYXNlIGl0J3MKKwkJCSAqIGZ1bGx5LXF1YWxpZmllZC4KKwkJCSAqLworCQkJaWYgKGVycm5vID09IEVDT05OUkVGVVNFRCkgeworCQkJCWhfZXJybm8gPSBUUllfQUdBSU47CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlzd2l0Y2ggKGhfZXJybm8pIHsKKwkJCWNhc2UgTk9fREFUQToKKwkJCQlnb3Rfbm9kYXRhKys7CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJCWNhc2UgSE9TVF9OT1RfRk9VTkQ6CisJCQkJLyoga2VlcCB0cnlpbmcgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgVFJZX0FHQUlOOgorCQkJCWlmIChocC0+cmNvZGUgPT0gU0VSVkZBSUwpIHsKKwkJCQkJLyogdHJ5IG5leHQgc2VhcmNoIGVsZW1lbnQsIGlmIGFueSAqLworCQkJCQlnb3Rfc2VydmZhaWwrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIEZBTExUSFJPVUdIICovCisJCQlkZWZhdWx0OgorCQkJCS8qIGFueXRoaW5nIGVsc2UgaW1wbGllcyB0aGF0IHdlJ3JlIGRvbmUgKi8KKwkJCQlkb25lKys7CisJCQl9CisJCQkvKgorCQkJICogaWYgd2UgZ290IGhlcmUgZm9yIHNvbWUgcmVhc29uIG90aGVyIHRoYW4gRE5TUkNILAorCQkJICogd2Ugb25seSB3YW50ZWQgb25lIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgc28gc3RvcC4KKwkJCSAqLworCQkJaWYgKCEocmVzLT5vcHRpb25zICYgUkVTX0ROU1JDSCkpCisJCQkgICAgICAgIGRvbmUrKzsKKwkJfQorCX0KKworCS8qCisJICogaWYgd2UgaGF2ZSBub3QgYWxyZWFkeSB0cmllZCB0aGUgbmFtZSAiYXMgaXMiLCBkbyB0aGF0IG5vdy4KKwkgKiBub3RlIHRoYXQgd2UgZG8gdGhpcyByZWdhcmRsZXNzIG9mIGhvdyBtYW55IGRvdHMgd2VyZSBpbiB0aGUKKwkgKiBuYW1lIG9yIHdoZXRoZXIgaXQgZW5kcyB3aXRoIGEgZG90LgorCSAqLworCWlmICghdHJpZWRfYXNfaXMpIHsKKwkJcmV0ID0gcmVzX3F1ZXJ5ZG9tYWluTihuYW1lLCBOVUxMLCB0YXJnZXQsIHJlcyk7CisJCWlmIChyZXQgPiAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIGlmIHdlIGdvdCBoZXJlLCB3ZSBkaWRuJ3Qgc2F0aXNmeSB0aGUgc2VhcmNoLgorCSAqIGlmIHdlIGRpZCBhbiBpbml0aWFsIGZ1bGwgcXVlcnksIHJldHVybiB0aGF0IHF1ZXJ5J3MgaF9lcnJubworCSAqIChub3RlIHRoYXQgd2Ugd291bGRuJ3QgYmUgaGVyZSBpZiB0aGF0IHF1ZXJ5IGhhZCBzdWNjZWVkZWQpLgorCSAqIGVsc2UgaWYgd2UgZXZlciBnb3QgYSBub2RhdGEsIHNlbmQgdGhhdCBiYWNrIGFzIHRoZSByZWFzb24uCisJICogZWxzZSBzZW5kIGJhY2sgbWVhbmluZ2xlc3MgaF9lcnJubywgdGhhdCBiZWluZyB0aGUgb25lIGZyb20KKwkgKiB0aGUgbGFzdCBETlNSQ0ggd2UgZGlkLgorCSAqLworCWlmIChzYXZlZF9oZXJybm8gIT0gLTEpCisJCWhfZXJybm8gPSBzYXZlZF9oZXJybm87CisJZWxzZSBpZiAoZ290X25vZGF0YSkKKwkJaF9lcnJubyA9IE5PX0RBVEE7CisJZWxzZSBpZiAoZ290X3NlcnZmYWlsKQorCQloX2Vycm5vID0gVFJZX0FHQUlOOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFBlcmZvcm0gYSBjYWxsIG9uIHJlc19xdWVyeSBvbiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBuYW1lIGFuZCBkb21haW4sCisgKiByZW1vdmluZyBhIHRyYWlsaW5nIGRvdCBmcm9tIG5hbWUgaWYgZG9tYWluIGlzIE5VTEwuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc19xdWVyeWRvbWFpbk4oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZG9tYWluLAorICAgIHN0cnVjdCByZXNfdGFyZ2V0ICp0YXJnZXQsIHJlc19zdGF0ZSByZXMpCit7CisJY2hhciBuYnVmW01BWEROQU1FXTsKKwljb25zdCBjaGFyICpsb25nbmFtZSA9IG5idWY7CisJc2l6ZV90IG4sIGQ7CisKKwlhc3NlcnQobmFtZSAhPSBOVUxMKTsKKwkvKiBYWFg6IHRhcmdldCBtYXkgYmUgTlVMTD8/PyAqLworCisjaWZkZWYgREVCVUcKKwlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQlwcmludGYoIjs7IHJlc19xdWVyeWRvbWFpbiglcywgJXMpXG4iLAorCQkJbmFtZSwgZG9tYWluP2RvbWFpbjoiPE5pbD4iKTsKKyNlbmRpZgorCWlmIChkb21haW4gPT0gTlVMTCkgeworCQkvKgorCQkgKiBDaGVjayBmb3IgdHJhaWxpbmcgJy4nOworCQkgKiBjb3B5IHdpdGhvdXQgJy4nIGlmIHByZXNlbnQuCisJCSAqLworCQluID0gc3RybGVuKG5hbWUpOworCQlpZiAobiArIDEgPiBzaXplb2YobmJ1ZikpIHsKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAobiA+IDAgJiYgbmFtZVstLW5dID09ICcuJykgeworCQkJc3RybmNweShuYnVmLCBuYW1lLCBuKTsKKwkJCW5idWZbbl0gPSAnXDAnOworCQl9IGVsc2UKKwkJCWxvbmduYW1lID0gbmFtZTsKKwl9IGVsc2UgeworCQluID0gc3RybGVuKG5hbWUpOworCQlkID0gc3RybGVuKGRvbWFpbik7CisJCWlmIChuICsgMSArIGQgKyAxID4gc2l6ZW9mKG5idWYpKSB7CisJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc25wcmludGYobmJ1Ziwgc2l6ZW9mKG5idWYpLCAiJXMuJXMiLCBuYW1lLCBkb21haW4pOworCX0KKwlyZXR1cm4gcmVzX3F1ZXJ5Tihsb25nbmFtZSwgdGFyZ2V0LCByZXMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmV0L2dldG5hbWVpbmZvLmMgYi9saWJjL2Rucy9uZXQvZ2V0bmFtZWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWMwMjgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvbmV0L2dldG5hbWVpbmZvLmMKQEAgLTAsMCArMSw0MzMgQEAKKy8qCSROZXRCU0Q6IGdldG5hbWVpbmZvLmMsdiAxLjUzIDIwMTIvMDkvMjYgMjM6MTM6MDAgY2hyaXN0b3MgRXhwICQJKi8KKy8qCSRLQU1FOiBnZXRuYW1laW5mby5jLHYgMS40NSAyMDAwLzA5LzI1IDIyOjQzOjU2IGl0b2p1biBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAwIEJlbiBIYXJyaXMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBJc3N1ZXMgdG8gYmUgZGlzY3Vzc2VkOgorICogLSBUaHJlYWQgc2FmZS1uZXNzIG11c3QgYmUgY2hlY2tlZAorICogLSBSRkMyNTUzIHNheXMgdGhhdCB3ZSBzaG91bGQgcmFpc2UgZXJyb3Igb24gc2hvcnQgYnVmZmVyLiAgWC9PcGVuIHNheXMKKyAqICAgd2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgcmVzdWx0LiAgV2Ugb2JleSBSRkMyNTUzIChhbmQgWC9PcGVuIHNob3VsZCBiZQorICogICBtb2RpZmllZCkuICBpcG5nd2cgcm91Z2ggY29uc2Vuc3VzIHNlZW1zIHRvIGZvbGxvdyBSRkMyNTUzLgorICogLSBXaGF0IGlzICJsb2NhbCIgaW4gTklfRlFETj8KKyAqIC0gTklfTkFNRVJFUUQgYW5kIE5JX05VTUVSSUNIT1NUIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlci4KKyAqIC0gKEtBTUUgZXh0ZW5zaW9uKSBhbHdheXMgYXR0YWNoIHRleHR1YWwgc2NvcGVpZCAoZmU4MDo6MSVsbzApLCBpZgorICogICBzaW42X3Njb3BlX2lkIGlzIGZpbGxlZCAtIHN0YW5kYXJkaXphdGlvbiBzdGF0dXM/CisgKiAgIFhYWCBicmVha3MgYmFja3dhcmQgY29tcGF0IGZvciBjb2RlIHRoYXQgZXhwZWN0cyBubyBzY29wZWlkLgorICogICBiZXdhcmUgb24gbWVyZ2UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogZ2V0bmFtZWluZm8uYyx2IDEuNTMgMjAxMi8wOS8yNiAyMzoxMzowMCBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfaWVlZTEzOTQuaD4KKyNpbmNsdWRlIDxuZXQvaWZfdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlICJyZXNvbHZfbmV0aWQuaCIKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWZkIHsKKwlpbnQJCWFfYWY7CisJc29ja2xlbl90CWFfYWRkcmxlbjsKKwlzb2NrbGVuX3QJYV9zb2NrbGVuOworCWludAkJYV9vZmY7Cit9IGFmZGwgW10gPSB7CisjaWZkZWYgSU5FVDYKKwl7UEZfSU5FVDYsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksCisJCW9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl9pbjYsIHNpbjZfYWRkcil9LAorI2VuZGlmCisJe1BGX0lORVQsIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLAorCQlvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW4sIHNpbl9hZGRyKX0sCisJezAsIDAsIDAsIDB9LAorfTsKKworc3RydWN0IHNvY2tpbmV0IHsKKwl1X2NoYXIJc2lfbGVuOworCXVfY2hhcglzaV9mYW1pbHk7CisJdV9zaG9ydAlzaV9wb3J0OworfTsKKworc3RhdGljIGludCBnZXRuYW1laW5mb19pbmV0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QsIGNoYXIgKiwKKyAgICBzb2NrbGVuX3QsIGNoYXIgKiwgc29ja2xlbl90LCBpbnQsIHVuc2lnbmVkLCB1bnNpZ25lZCk7CisjaWZkZWYgSU5FVDYKK3N0YXRpYyBpbnQgaXA2X3BhcnNlbnVtZXJpYyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosCisJCQkJIHNvY2tsZW5fdCwgaW50KTsKK3N0YXRpYyBpbnQgaXA2X3NhMnN0cihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIGNoYXIgKiwgc2l6ZV90LCBpbnQpOworI2VuZGlmCitzdGF0aWMgaW50IGdldG5hbWVpbmZvX2xvY2FsKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QsIGNoYXIgKiwKKyAgICBzb2NrbGVuX3QsIGNoYXIgKiwgc29ja2xlbl90LCBpbnQpOworCisvKgorICogVG9wLWxldmVsIGdldG5hbWVpbmZvKCkgY29kZS4gIExvb2sgYXQgdGhlIGFkZHJlc3MgZmFtaWx5LCBhbmQgcGljayBhbgorICogYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gY2FsbC4KKyAqLworaW50IGdldG5hbWVpbmZvKGNvbnN0IHN0cnVjdCBzb2NrYWRkciogc2EsIHNvY2tsZW5fdCBzYWxlbiwgY2hhciogaG9zdCwgc2l6ZV90IGhvc3RsZW4sCisJCWNoYXIqIHNlcnYsIHNpemVfdCBzZXJ2bGVuLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGFuZHJvaWRfZ2V0bmFtZWluZm9mb3JuZXQoc2EsIHNhbGVuLCBob3N0LCBob3N0bGVuLCBzZXJ2LCBzZXJ2bGVuLCBmbGFncywKKwkJCU5FVElEX1VOU0VULCBNQVJLX1VOU0VUKTsKK30KKworaW50IGFuZHJvaWRfZ2V0bmFtZWluZm9mb3JuZXQoY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzYSwgc29ja2xlbl90IHNhbGVuLCBjaGFyKiBob3N0LAorCQlzaXplX3QgaG9zdGxlbiwgY2hhciogc2Vydiwgc2l6ZV90IHNlcnZsZW4sIGludCBmbGFncywgdW5zaWduZWQgbmV0aWQsCisJCXVuc2lnbmVkIG1hcmspCit7CisJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBnZXRuYW1laW5mb19pbmV0KHNhLCBzYWxlbiwgaG9zdCwgaG9zdGxlbiwKKwkJCQlzZXJ2LCBzZXJ2bGVuLCBmbGFncywgbmV0aWQsIG1hcmspOworCWNhc2UgQUZfTE9DQUw6CisJCXJldHVybiBnZXRuYW1laW5mb19sb2NhbChzYSwgc2FsZW4sIGhvc3QsIGhvc3RsZW4sCisJCSAgICBzZXJ2LCBzZXJ2bGVuLCBmbGFncyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVBSV9GQU1JTFk7CisJfQorfQorCisvKgorICogZ2V0bmFtZWluZm9fbG9jYWwoKToKKyAqIEZvcm1hdCBhbiBsb2NhbCBhZGRyZXNzIGludG8gYSBwcmludGFibGUgZm9ybWF0LgorICovCisvKiBBUkdTVVNFRCAqLworc3RhdGljIGludAorZ2V0bmFtZWluZm9fbG9jYWwoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSwgc29ja2xlbl90IHNhbGVuLAorICAgIGNoYXIgKmhvc3QsIHNvY2tsZW5fdCBob3N0bGVuLCBjaGFyICpzZXJ2LCBzb2NrbGVuX3Qgc2VydmxlbiwKKyAgICBpbnQgZmxhZ3MgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3VuICpzdW4gPQorICAgICAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyX3VuICopKGNvbnN0IHZvaWQgKilzYTsKKworICAgICAgIGlmIChzYWxlbiA8IChzb2NrbGVuX3QpIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpKSB7CisgICAgICAgICAgIHJldHVybiBFQUlfRkFNSUxZOworICAgICAgIH0KKworICAgICAgIGlmIChzZXJ2ICE9IE5VTEwgJiYgc2VydmxlbiA+IDApCisgICAgICAgICAgICAgICBzZXJ2WzBdID0gJ1wwJzsKKworICAgICAgIGlmIChob3N0ICYmIGhvc3RsZW4gPiAwKQorICAgICAgICAgICAgICAgc3RybGNweShob3N0LCBzdW4tPnN1bl9wYXRoLAorICAgICAgICAgICAgICAgICAgIE1JTigoc29ja2xlbl90KSBzaXplb2Yoc3VuLT5zdW5fcGF0aCkgKyAxLCBob3N0bGVuKSk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGdldG5hbWVpbmZvX2luZXQoKToKKyAqIEZvcm1hdCBhbiBJUHY0IG9yIElQdjYgc29ja2FkZHIgaW50byBhIHByaW50YWJsZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBpbnQKK2dldG5hbWVpbmZvX2luZXQoY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzYSwgc29ja2xlbl90IHNhbGVuLAorICAgICAgIGNoYXIgKmhvc3QsIHNvY2tsZW5fdCBob3N0bGVuLAorICAgICAgIGNoYXIgKnNlcnYsIHNvY2tsZW5fdCBzZXJ2bGVuLAorICAgICAgIGludCBmbGFncywgdW5zaWduZWQgbmV0aWQsIHVuc2lnbmVkIG1hcmspCit7CisJY29uc3Qgc3RydWN0IGFmZCAqYWZkOworCXN0cnVjdCBzZXJ2ZW50ICpzcDsKKwlzdHJ1Y3QgaG9zdGVudCAqaHA7CisJdV9zaG9ydCBwb3J0OworCWludCBmYW1pbHksIGk7CisJY29uc3QgY2hhciAqYWRkcjsKKwl1aW50MzJfdCB2NGE7CisJY2hhciBudW1zZXJ2WzUxMl07CisJY2hhciBudW1hZGRyWzUxMl07CisKKwkvKiBzYSBpcyBjaGVja2VkIGJlbG93ICovCisJLyogaG9zdCBtYXkgYmUgTlVMTCAqLworCS8qIHNlcnYgbWF5IGJlIE5VTEwgKi8KKworCWlmIChzYSA9PSBOVUxMKQorCQlyZXR1cm4gRUFJX0ZBSUw7CisKKwlmYW1pbHkgPSBzYS0+c2FfZmFtaWx5OworCWZvciAoaSA9IDA7IGFmZGxbaV0uYV9hZjsgaSsrKQorCQlpZiAoYWZkbFtpXS5hX2FmID09IGZhbWlseSkgeworCQkJYWZkID0gJmFmZGxbaV07CisJCQlnb3RvIGZvdW5kOworCQl9CisJcmV0dXJuIEVBSV9GQU1JTFk7CisKKyBmb3VuZDoKKwkvLyBodHRwOi8vYi8xODg5Mjc1OiBjYWxsZXJzIHNob3VsZCBiZSBhbGxvd2VkIHRvIHByb3ZpZGUgdG9vIG11Y2gKKwkvLyBzcGFjZSwgYnV0IG5vdCB0b28gbGl0dGxlLgorCWlmIChzYWxlbiA8IGFmZC0+YV9zb2NrbGVuKSB7CisJCXJldHVybiBFQUlfRkFNSUxZOworCX0KKworCS8qIG5ldHdvcmsgYnl0ZSBvcmRlciAqLworCXBvcnQgPSAoKGNvbnN0IHN0cnVjdCBzb2NraW5ldCAqKShjb25zdCB2b2lkICopc2EpLT5zaV9wb3J0OworCWFkZHIgPSAoY29uc3QgY2hhciAqKShjb25zdCB2b2lkICopc2EgKyBhZmQtPmFfb2ZmOworCisJaWYgKHNlcnYgPT0gTlVMTCB8fCBzZXJ2bGVuID09IDApIHsKKwkJLyoKKwkJICogZG8gbm90aGluZyBpbiB0aGlzIGNhc2UuCisJCSAqIGluIGNhc2UgeW91IGFyZSB3b25kZXJpbmcgaWYgIiYmIiBpcyBtb3JlIGNvcnJlY3QgdGhhbgorCQkgKiAifHwiIGhlcmU6IHJmYzI1NTNiaXMtMDMgc2F5cyB0aGF0IHNlcnYgPT0gTlVMTCBPUgorCQkgKiBzZXJ2bGVuID09IDAgbWVhbnMgdGhhdCB0aGUgY2FsbGVyIGRvZXMgbm90IHdhbnQgdGhlIHJlc3VsdC4KKwkJICovCisJfSBlbHNlIHsKKwkJaWYgKGZsYWdzICYgTklfTlVNRVJJQ1NFUlYpCisJCQlzcCA9IE5VTEw7CisJCWVsc2UgeworCQkJc3AgPSBnZXRzZXJ2Ynlwb3J0KHBvcnQsCisJCQkJKGZsYWdzICYgTklfREdSQU0pID8gInVkcCIgOiAidGNwIik7CisJCX0KKwkJaWYgKHNwKSB7CisJCQlpZiAoc3RybGVuKHNwLT5zX25hbWUpICsgMSA+IChzaXplX3Qpc2VydmxlbikKKwkJCQlyZXR1cm4gRUFJX01FTU9SWTsKKwkJCXN0cmxjcHkoc2Vydiwgc3AtPnNfbmFtZSwgc2Vydmxlbik7CisJCX0gZWxzZSB7CisJCQlzbnByaW50ZihudW1zZXJ2LCBzaXplb2YobnVtc2VydiksICIldSIsIG50b2hzKHBvcnQpKTsKKwkJCWlmIChzdHJsZW4obnVtc2VydikgKyAxID4gKHNpemVfdClzZXJ2bGVuKQorCQkJCXJldHVybiBFQUlfTUVNT1JZOworCQkJc3RybGNweShzZXJ2LCBudW1zZXJ2LCBzZXJ2bGVuKTsKKwkJfQorCX0KKworCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJdjRhID0gKHVpbnQzMl90KQorCQkgICAgbnRvaGwoKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKikKKwkJICAgIChjb25zdCB2b2lkICopc2EpLT5zaW5fYWRkci5zX2FkZHIpOworCQlpZiAoSU5fTVVMVElDQVNUKHY0YSkgfHwgSU5fRVhQRVJJTUVOVEFMKHY0YSkpCisJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKKwkJdjRhID4+PSBJTl9DTEFTU0FfTlNISUZUOworCQlpZiAodjRhID09IDApCisJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKKwkJYnJlYWs7CisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCSAgICB7CisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisJCXNpbjYgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKShjb25zdCB2b2lkICopc2E7CisJCXN3aXRjaCAoc2luNi0+c2luNl9hZGRyLnM2X2FkZHJbMF0pIHsKKwkJY2FzZSAweDAwOgorCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKQorCQkJCTsKKwkJCWVsc2UgaWYgKElONl9JU19BRERSX0xPT1BCQUNLKCZzaW42LT5zaW42X2FkZHIpKQorCQkJCTsKKwkJCWVsc2UKKwkJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCWZsYWdzIHw9IE5JX05VTUVSSUNIT1NUOworCQkJfQorCQkJZWxzZSBpZiAoSU42X0lTX0FERFJfTVVMVElDQVNUKCZzaW42LT5zaW42X2FkZHIpKQorCQkJCWZsYWdzIHw9IE5JX05VTUVSSUNIT1NUOworCQkJYnJlYWs7CisJCX0KKwkgICAgfQorCQlicmVhazsKKyNlbmRpZgorCX0KKwlpZiAoaG9zdCA9PSBOVUxMIHx8IGhvc3RsZW4gPT0gMCkgeworCQkvKgorCQkgKiBkbyBub3RoaW5nIGluIHRoaXMgY2FzZS4KKwkJICogaW4gY2FzZSB5b3UgYXJlIHdvbmRlcmluZyBpZiAiJiYiIGlzIG1vcmUgY29ycmVjdCB0aGFuCisJCSAqICJ8fCIgaGVyZTogcmZjMjU1M2Jpcy0wMyBzYXlzIHRoYXQgaG9zdCA9PSBOVUxMIG9yCisJCSAqIGhvc3RsZW4gPT0gMCBtZWFucyB0aGF0IHRoZSBjYWxsZXIgZG9lcyBub3Qgd2FudCB0aGUgcmVzdWx0LgorCQkgKi8KKwl9IGVsc2UgaWYgKGZsYWdzICYgTklfTlVNRVJJQ0hPU1QpIHsKKwkJc2l6ZV90IG51bWFkZHJsZW47CisKKwkJLyogTlVNRVJJQ0hPU1QgYW5kIE5BTUVSRVFEIGNvbmZsaWN0cyB3aXRoIGVhY2ggb3RoZXIgKi8KKwkJaWYgKGZsYWdzICYgTklfTkFNRVJFUUQpCisJCQlyZXR1cm4gRUFJX05PTkFNRTsKKworCQlzd2l0Y2goYWZkLT5hX2FmKSB7CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJeworCQkJaW50IGVycm9yOworCisJCQlpZiAoKGVycm9yID0gaXA2X3BhcnNlbnVtZXJpYyhzYSwgYWRkciwgaG9zdCwKKwkJCQkJCSAgICAgIGhvc3RsZW4sIGZsYWdzKSkgIT0gMCkKKwkJCQlyZXR1cm4oZXJyb3IpOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJaWYgKGluZXRfbnRvcChhZmQtPmFfYWYsIGFkZHIsIG51bWFkZHIsIHNpemVvZihudW1hZGRyKSkKKwkJCSAgICA9PSBOVUxMKQorCQkJCXJldHVybiBFQUlfU1lTVEVNOworCQkJbnVtYWRkcmxlbiA9IHN0cmxlbihudW1hZGRyKTsKKwkJCWlmIChudW1hZGRybGVuICsgMSA+IChzaXplX3QpaG9zdGxlbikgLyogZG9uJ3QgZm9yZ2V0IHRlcm1pbmF0b3IgKi8KKwkJCQlyZXR1cm4gRUFJX01FTU9SWTsKKwkJCXN0cmxjcHkoaG9zdCwgbnVtYWRkciwgaG9zdGxlbik7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCWhwID0gYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9ybmV0X3Byb3h5KGFkZHIsIGFmZC0+YV9hZGRybGVuLCBhZmQtPmFfYWYsIG5ldGlkKTsKKwkJaWYgKGhwKSB7CisjaWYgMAorCQkJLyoKKwkJCSAqIGNvbW1lbnRlZCBvdXQsIHNpbmNlICJmb3IgbG9jYWwgaG9zdCIgaXMgbm90CisJCQkgKiBpbXBsZW1lbnRlZCBoZXJlIC0gc2VlIFJGQzI1NTMgcDMwCisJCQkgKi8KKwkJCWlmIChmbGFncyAmIE5JX05PRlFETikgeworCQkJCWNoYXIgKnA7CisJCQkJcCA9IHN0cmNocihocC0+aF9uYW1lLCAnLicpOworCQkJCWlmIChwKQorCQkJCQlUT0RPOiBCZWZvcmUgdW5jb21tZW50aW5nIHJld3JpdGUgdG8gYXZvaWQgbW9kaWZ5aW5nIGhwLgorCQkJCQkqcCA9ICdcMCc7CisJCQl9CisjZW5kaWYKKwkJCWlmIChzdHJsZW4oaHAtPmhfbmFtZSkgKyAxID4gKHNpemVfdClob3N0bGVuKSB7CisJCQkJcmV0dXJuIEVBSV9NRU1PUlk7CisJCQl9CisJCQlzdHJsY3B5KGhvc3QsIGhwLT5oX25hbWUsIGhvc3RsZW4pOworCQl9IGVsc2UgeworCQkJaWYgKGZsYWdzICYgTklfTkFNRVJFUUQpCisJCQkJcmV0dXJuIEVBSV9OT05BTUU7CisJCQlzd2l0Y2goYWZkLT5hX2FmKSB7CisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQl7CisJCQkJaW50IGVycm9yOworCisJCQkJaWYgKChlcnJvciA9IGlwNl9wYXJzZW51bWVyaWMoc2EsIGFkZHIsIGhvc3QsCisJCQkJCQkJICAgICAgaG9zdGxlbiwKKwkJCQkJCQkgICAgICBmbGFncykpICE9IDApCisJCQkJCXJldHVybihlcnJvcik7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGluZXRfbnRvcChhZmQtPmFfYWYsIGFkZHIsIGhvc3QsCisJCQkJICAgIGhvc3RsZW4pID09IE5VTEwpCisJCQkJCXJldHVybiBFQUlfU1lTVEVNOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybigwKTsKK30KKworI2lmZGVmIElORVQ2CitzdGF0aWMgaW50CitpcDZfcGFyc2VudW1lcmljKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIGNvbnN0IGNoYXIgKmFkZHIsIGNoYXIgKmhvc3QsCisgICAgICAgc29ja2xlbl90IGhvc3RsZW4sIGludCBmbGFncykKK3sKKwlzaXplX3QgbnVtYWRkcmxlbjsKKwljaGFyIG51bWFkZHJbNTEyXTsKKworCWFzc2VydChzYSAhPSBOVUxMKTsKKwlhc3NlcnQoYWRkciAhPSBOVUxMKTsKKwlhc3NlcnQoaG9zdCAhPSBOVUxMKTsKKworCWlmIChpbmV0X250b3AoQUZfSU5FVDYsIGFkZHIsIG51bWFkZHIsIHNpemVvZihudW1hZGRyKSkgPT0gTlVMTCkKKwkJcmV0dXJuIEVBSV9TWVNURU07CisKKwludW1hZGRybGVuID0gc3RybGVuKG51bWFkZHIpOworCWlmIChudW1hZGRybGVuICsgMSA+IChzaXplX3QpaG9zdGxlbikgLyogZG9uJ3QgZm9yZ2V0IHRlcm1pbmF0b3IgKi8KKwkJcmV0dXJuIEVBSV9PVkVSRkxPVzsKKwlzdHJsY3B5KGhvc3QsIG51bWFkZHIsIGhvc3RsZW4pOworCisJaWYgKCgoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKShjb25zdCB2b2lkICopc2EpLT5zaW42X3Njb3BlX2lkKSB7CisJCWNoYXIgem9uZWJ1ZltNQVhIT1NUTkFNRUxFTl07CisJCWludCB6b25lbGVuOworCisJCXpvbmVsZW4gPSBpcDZfc2Eyc3RyKAorCQkgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhLAorCQkgICAgem9uZWJ1Ziwgc2l6ZW9mKHpvbmVidWYpLCBmbGFncyk7CisJCWlmICh6b25lbGVuIDwgMCkKKwkJCXJldHVybiBFQUlfT1ZFUkZMT1c7CisJCWlmICgoc2l6ZV90KSB6b25lbGVuICsgMSArIG51bWFkZHJsZW4gKyAxID4gKHNpemVfdClob3N0bGVuKQorCQkJcmV0dXJuIEVBSV9PVkVSRkxPVzsKKwkJLyogY29uc3RydWN0IDxudW1lcmljLWFkZHI+PGRlbGltPjx6b25laWQ+ICovCisJCW1lbWNweShob3N0ICsgbnVtYWRkcmxlbiArIDEsIHpvbmVidWYsCisJCSAgICAoc2l6ZV90KXpvbmVsZW4pOworCQlob3N0W251bWFkZHJsZW5dID0gU0NPUEVfREVMSU1JVEVSOworCQlob3N0W251bWFkZHJsZW4gKyAxICsgem9uZWxlbl0gPSAnXDAnOworCX0KKworCXJldHVybiAwOworfQorCisvKiBBUkdTVVNFRCAqLworc3RhdGljIGludAoraXA2X3NhMnN0cihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTYsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpeiwgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGludCBpZmluZGV4OworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTY7CisJaW50IG47CisKKwlhc3NlcnQoc2E2ICE9IE5VTEwpOworCWFzc2VydChidWYgIT0gTlVMTCk7CisKKwlpZmluZGV4ID0gKHVuc2lnbmVkIGludClzYTYtPnNpbjZfc2NvcGVfaWQ7CisJYTYgPSAmc2E2LT5zaW42X2FkZHI7CisKKyNpZmRlZiBOSV9OVU1FUklDU0NPUEUKKwlpZiAoKGZsYWdzICYgTklfTlVNRVJJQ1NDT1BFKSAhPSAwKSB7CisJCW4gPSBzbnByaW50ZihidWYsIGJ1ZnNpeiwgIiV1Iiwgc2E2LT5zaW42X3Njb3BlX2lkKTsKKwkJaWYgKG4gPCAwIHx8IG4gPj0gYnVmc2l6KQorCQkJcmV0dXJuIC0xOworCQllbHNlCisJCQlyZXR1cm4gbjsKKwl9CisjZW5kaWYKKworCS8qIGlmX2luZGV4dG9uYW1lKCkgZG9lcyBub3QgdGFrZSBidWZmZXIgc2l6ZS4gIG5vdCBhIGdvb2QgYXBpLi4uICovCisJaWYgKChJTjZfSVNfQUREUl9MSU5LTE9DQUwoYTYpIHx8IElONl9JU19BRERSX01DX0xJTktMT0NBTChhNikpICYmCisJICAgIGJ1ZnNpeiA+PSBJRl9OQU1FU0laRSkgeworCQljaGFyICpwID0gaWZfaW5kZXh0b25hbWUoaWZpbmRleCwgYnVmKTsKKwkJaWYgKHApIHsKKwkJCXJldHVybihzdHJsZW4ocCkpOworCQl9CisJfQorCisJLyogbGFzdCByZXNvcnQgKi8KKwluID0gc25wcmludGYoYnVmLCBidWZzaXosICIldSIsIHNhNi0+c2luNl9zY29wZV9pZCk7CisJaWYgKG4gPCAwIHx8IChzaXplX3QpIG4gPj0gYnVmc2l6KQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gbjsKK30KKyNlbmRpZiAvKiBJTkVUNiAqLwpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmV0L2dldHNlcnZieW5hbWUuYyBiL2xpYmMvZG5zL25ldC9nZXRzZXJ2YnluYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1YzliMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL25ldC9nZXRzZXJ2YnluYW1lLmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSAic2VydmVudC5oIgorCitzdHJ1Y3Qgc2VydmVudCAqCitnZXRzZXJ2YnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByb3RvKQoreworICAgIHJlc19zdGF0aWMgICAgICAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisKKyAgICBpZiAocnMgPT0gTlVMTCB8fCBwcm90byA9PSBOVUxMIHx8IG5hbWUgPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcnMtPnNlcnZlbnRfcHRyID0gTlVMTDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBzdHJ1Y3Qgc2VydmVudCogIHMgPSBnZXRzZXJ2ZW50X3IocnMpOworICAgICAgICBpZiAocyA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggIXN0cmNtcCggcy0+c19uYW1lLCBuYW1lICkgJiYgIXN0cmNtcCggcy0+c19wcm90bywgcHJvdG8gKSApCisgICAgICAgICAgICByZXR1cm4gczsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvZG5zL25ldC9nZXRzZXJ2Ynlwb3J0LmMgYi9saWJjL2Rucy9uZXQvZ2V0c2VydmJ5cG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkY2FhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9uZXQvZ2V0c2VydmJ5cG9ydC5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgInNlcnZlbnQuaCIKKworc3RydWN0IHNlcnZlbnQgKgorZ2V0c2VydmJ5cG9ydChpbnQgcG9ydCwgY29uc3QgY2hhciAqcHJvdG8pCit7CisgICAgcmVzX3N0YXRpYyAgICAgICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKworICAgIGlmIChycyA9PSBOVUxMIHx8IHByb3RvID09IE5VTEwpIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJzLT5zZXJ2ZW50X3B0ciA9IE5VTEw7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgc3RydWN0IHNlcnZlbnQqICBzID0gZ2V0c2VydmVudF9yKHJzKTsKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIHMtPnNfcG9ydCA9PSBwb3J0ICYmICFzdHJjbXAoIHMtPnNfcHJvdG8sIHByb3RvICkgKQorICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmVudC5jIGIvbGliYy9kbnMvbmV0L2dldHNlcnZlbnQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9uZXRic2QvbmV0L2dldHNlcnZlbnQuYwpyZW5hbWUgdG8gbGliYy9kbnMvbmV0L2dldHNlcnZlbnQuYwpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvbmV0L25zZGlzcGF0Y2guYyBiL2xpYmMvZG5zL25ldC9uc2Rpc3BhdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI2ZDhmNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL25ldC9uc2Rpc3BhdGNoLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCSROZXRCU0Q6IG5zZGlzcGF0Y2guYyx2IDEuMzAgMjAwNS8xMS8yOSAwMzoxMTo1OSBjaHJpc3RvcyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMTk5OSwgMjAwNCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEx1a2UgTWV3YnVybjsgYW5kIGJ5IEphc29uIFIuIFRob3JwZS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTmV0d29ya3MgQXNzb2NpYXRlcyBUZWNobm9sb2d5LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgZm9yIHRoZSBGcmVlQlNEIFByb2plY3QgYnkKKyAqIEphY3F1ZXMgQS4gVmlkcmluZSwgU2FmZXBvcnQgTmV0d29yayBTZXJ2aWNlcywgYW5kIE5ldHdvcmsKKyAqIEFzc29jaWF0ZXMgTGFib3JhdG9yaWVzLCB0aGUgU2VjdXJpdHkgUmVzZWFyY2ggRGl2aXNpb24gb2YgTmV0d29yaworICogQXNzb2NpYXRlcywgSW5jLiB1bmRlciBEQVJQQS9TUEFXQVIgY29udHJhY3QgTjY2MDAxLTAxLUMtODAzNQorICogKCJDQk9TUyIpLCBhcyBwYXJ0IG9mIHRoZSBEQVJQQSBDSEFUUyByZXNlYXJjaCBwcm9ncmFtLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPG5zc3dpdGNoLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorCitzdGF0aWMgbnNzX21ldGhvZAorX25zbWV0aG9kKGNvbnN0IGNoYXIgKnNvdXJjZSwgY29uc3QgY2hhciAqZGF0YWJhc2UgX191bnVzZWQsIGNvbnN0IGNoYXIgKm1ldGhvZCBfX3VudXNlZCwKKyAgICBjb25zdCBuc19kdGFiIGRpc3BfdGFiW10sIHZvaWQgKipjYl9kYXRhKQoreworCWludAljdXJkaXNwOworCisJaWYgKGRpc3BfdGFiICE9IE5VTEwpIHsKKwkJZm9yIChjdXJkaXNwID0gMDsgZGlzcF90YWJbY3VyZGlzcF0uc3JjICE9IE5VTEw7IGN1cmRpc3ArKykgeworCQkJaWYgKHN0cmNhc2VjbXAoc291cmNlLCBkaXNwX3RhYltjdXJkaXNwXS5zcmMpID09IDApIHsKKwkJCQkqY2JfZGF0YSA9IGRpc3BfdGFiW2N1cmRpc3BdLmNiX2RhdGE7CisJCQkJcmV0dXJuIChkaXNwX3RhYltjdXJkaXNwXS5jYWxsYmFjayk7CisJCQl9CisJCX0KKwl9CisKKwkqY2JfZGF0YSA9IE5VTEw7CisJcmV0dXJuIChOVUxMKTsKK30KKworaW50CisvKkFSR1NVU0VEKi8KK25zZGlzcGF0Y2godm9pZCAqcmV0dmFsLCBjb25zdCBuc19kdGFiIGRpc3BfdGFiW10sIGNvbnN0IGNoYXIgKmRhdGFiYXNlLAorCSAgICBjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IG5zX3NyYyBkZWZhdWx0c1tdLCAuLi4pCit7CisJdmFfbGlzdAkJIGFwOworCWludAkJIGksIHJlc3VsdDsKKwljb25zdCBuc19zcmMJKnNyY2xpc3Q7CisJaW50CQkgc3JjbGlzdHNpemU7CisJbnNzX21ldGhvZAkgY2I7CisJdm9pZAkJKmNiX2RhdGE7CisKKwkvKiByZXR2YWwgbWF5IGJlIE5VTEwgKi8KKwkvKiBkaXNwX3RhYiBtYXkgYmUgTlVMTCAqLworCWFzc2VydChkYXRhYmFzZSAhPSBOVUxMKTsKKwlhc3NlcnQobWV0aG9kICE9IE5VTEwpOworCWFzc2VydChkZWZhdWx0cyAhPSBOVUxMKTsKKwlpZiAoZGF0YWJhc2UgPT0gTlVMTCB8fCBtZXRob2QgPT0gTlVMTCB8fCBkZWZhdWx0cyA9PSBOVUxMKQorCQlyZXR1cm4gKE5TX1VOQVZBSUwpOworCisgICAgICAgIHNyY2xpc3QgPSBkZWZhdWx0czsKKyAgICAgICAgc3JjbGlzdHNpemUgPSAwOworICAgICAgICB3aGlsZSAoc3JjbGlzdFtzcmNsaXN0c2l6ZV0ubmFtZSAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHNyY2xpc3RzaXplKys7CisKKwlyZXN1bHQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNyY2xpc3RzaXplOyBpKyspIHsKKwkJY2IgPSBfbnNtZXRob2Qoc3JjbGlzdFtpXS5uYW1lLCBkYXRhYmFzZSwgbWV0aG9kLAorCQkgICAgZGlzcF90YWIsICZjYl9kYXRhKTsKKwkJcmVzdWx0ID0gMDsKKwkJaWYgKGNiICE9IE5VTEwpIHsKKwkJCXZhX3N0YXJ0KGFwLCBkZWZhdWx0cyk7CisJCQlyZXN1bHQgPSAoKmNiKShyZXR2YWwsIGNiX2RhdGEsIGFwKTsKKwkJCXZhX2VuZChhcCk7CisJCQlpZiAoZGVmYXVsdHNbMF0uZmxhZ3MgJiBOU19GT1JDRUFMTCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChyZXN1bHQgJiBzcmNsaXN0W2ldLmZsYWdzKQorCQkJCWJyZWFrOworCQl9CisJfQorCXJlc3VsdCAmPSBOU19TVEFUVVNNQVNLOwkvKiBjbGVhciBwcml2YXRlIGZsYWdzIGluIHJlc3VsdCAqLworCisJcmV0dXJuIChyZXN1bHQgPyByZXN1bHQgOiBOU19OT1RGT1VORCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvc2VydmVudC5oIGIvbGliYy9kbnMvbmV0L3NlcnZlbnQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9uZXRic2QvbmV0L3NlcnZlbnQuaApyZW5hbWUgdG8gbGliYy9kbnMvbmV0L3NlcnZlbnQuaApkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L3NlcnZpY2VzLmggYi9saWJjL2Rucy9uZXQvc2VydmljZXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9uZXRic2QvbmV0L3NlcnZpY2VzLmgKcmVuYW1lIHRvIGxpYmMvZG5zL25ldC9zZXJ2aWNlcy5oCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvX19kbl9jb21wLmMgYi9saWJjL2Rucy9yZXNvbHYvX19kbl9jb21wLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvbmV0YnNkL3Jlc29sdi9fX2RuX2NvbXAuYwpyZW5hbWUgdG8gbGliYy9kbnMvcmVzb2x2L19fZG5fY29tcC5jCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvX19yZXNfY2xvc2UuYyBiL2xpYmMvZG5zL3Jlc29sdi9fX3Jlc19jbG9zZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL25ldGJzZC9yZXNvbHYvX19yZXNfY2xvc2UuYwpyZW5hbWUgdG8gbGliYy9kbnMvcmVzb2x2L19fcmVzX2Nsb3NlLmMKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9fX3Jlc19zZW5kLmMgYi9saWJjL2Rucy9yZXNvbHYvX19yZXNfc2VuZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL25ldGJzZC9yZXNvbHYvX19yZXNfc2VuZC5jCnJlbmFtZSB0byBsaWJjL2Rucy9yZXNvbHYvX19yZXNfc2VuZC5jCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvaGVycm9yLmMgYi9saWJjL2Rucy9yZXNvbHYvaGVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFhZjY5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL3Jlc29sdi9oZXJyb3IuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoJJE5ldEJTRDogaGVycm9yLmMsdiAxLjQgMjAwNC8wNS8yMyAwNTowOTo1MiBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHNjY3NpZFtdID0gIkAoIyloZXJyb3IuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogaGVycm9yLmMsdiAxLjIuMjA2LjEgMjAwNC8wMy8wOSAwODozMzo1NCBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IGhlcnJvci5jLHYgMS40IDIwMDQvMDUvMjMgMDU6MDk6NTIgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKworI2luY2x1ZGUgPG5ldGRiLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmbmRlZiBERV9DT05TVAorI2RlZmluZSBERV9DT05TVChjLHYpICAgdiA9ICgoYykgPyBcCisgICAgc3RyY2hyKChjb25zdCB2b2lkICopKGMpLCAqKGNvbnN0IGNoYXIgKikoY29uc3Qgdm9pZCAqKShjKSkgOiBOVUxMKQorI2VuZGlmCisKK2NvbnN0IGNoYXIgKiBjb25zdCBoX2Vycmxpc3RbXSA9IHsKKwkiUmVzb2x2ZXIgRXJyb3IgMCAobm8gZXJyb3IpIiwKKwkiVW5rbm93biBob3N0IiwJCQkJLyogMSBIT1NUX05PVF9GT1VORCAqLworCSJIb3N0IG5hbWUgbG9va3VwIGZhaWx1cmUiLAkJLyogMiBUUllfQUdBSU4gKi8KKwkiVW5rbm93biBzZXJ2ZXIgZXJyb3IiLAkJCS8qIDMgTk9fUkVDT1ZFUlkgKi8KKwkiTm8gYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggbmFtZSIsCS8qIDQgTk9fQUREUkVTUyAqLworfTsKK2NvbnN0IGludAloX25lcnIgPSB7IHNpemVvZiBoX2Vycmxpc3QgLyBzaXplb2YgaF9lcnJsaXN0WzBdIH07CisKKy8qCisgKiBoZXJyb3IgLS0KKyAqCXByaW50IHRoZSBlcnJvciBpbmRpY2F0ZWQgYnkgdGhlIGhfZXJybm8gdmFsdWUuCisgKi8KK3ZvaWQKK2hlcnJvcihjb25zdCBjaGFyICpzKSB7CisJc3RydWN0IGlvdmVjIGlvdls0XSwgKnYgPSBpb3Y7CisJY2hhciAqdDsKKworCWlmIChzICE9IE5VTEwgJiYgKnMgIT0gJ1wwJykgeworCQlERV9DT05TVChzLCB0KTsKKwkJdi0+aW92X2Jhc2UgPSB0OworCQl2LT5pb3ZfbGVuID0gc3RybGVuKHQpOworCQl2Kys7CisJCURFX0NPTlNUKCI6ICIsIHQpOworCQl2LT5pb3ZfYmFzZSA9IHQ7CisJCXYtPmlvdl9sZW4gPSAyOworCQl2Kys7CisJfQorCURFX0NPTlNUKGhzdHJlcnJvcihoX2Vycm5vKSwgdCk7CisJdi0+aW92X2Jhc2UgPSB0OworCXYtPmlvdl9sZW4gPSBzdHJsZW4odi0+aW92X2Jhc2UpOworCXYrKzsKKwlERV9DT05TVCgiXG4iLCB0KTsKKwl2LT5pb3ZfYmFzZSA9IHQ7CisJdi0+aW92X2xlbiA9IDE7CisJd3JpdGV2KFNUREVSUl9GSUxFTk8sIGlvdiwgKHYgLSBpb3YpICsgMSk7Cit9CisKKy8qCisgKiBoc3RyZXJyb3IgLS0KKyAqCXJldHVybiB0aGUgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuICJob3N0IiBlcnJubyB2YWx1ZS4KKyAqLworY29uc3QgY2hhciAqCitoc3RyZXJyb3IoaW50IGVycikgeworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gKCJSZXNvbHZlciBpbnRlcm5hbCBlcnJvciIpOworCWVsc2UgaWYgKGVyciA8IGhfbmVycikKKwkJcmV0dXJuIChoX2Vycmxpc3RbZXJyXSk7CisJcmV0dXJuICgiVW5rbm93biByZXNvbHZlciBlcnJvciIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvcmVzb2x2L3Jlc19jYWNoZS5jIGIvbGliYy9kbnMvcmVzb2x2L3Jlc19jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OGVjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2NhY2hlLmMKQEAgLTAsMCArMSwyMDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSAicHRocmVhZC5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgInJlc29sdl9uZXRpZC5oIgorI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCisKKy8qIFRoaXMgY29kZSBpbXBsZW1lbnRzIGEgc21hbGwgYW5kICpzaW1wbGUqIEROUyByZXNvbHZlciBjYWNoZS4KKyAqCisgKiBJdCBpcyBvbmx5IHVzZWQgdG8gY2FjaGUgRE5TIGFuc3dlcnMgZm9yIGEgdGltZSBkZWZpbmVkIGJ5IHRoZSBzbWFsbGVzdCBUVEwKKyAqIGFtb25nIHRoZSBhbnN3ZXIgcmVjb3JkcyBpbiBvcmRlciB0byByZWR1Y2UgRE5TIHRyYWZmaWMuIEl0IGlzIG5vdCBzdXBwb3NlZAorICogdG8gYmUgYSBmdWxsIEROUyBjYWNoZSwgc2luY2Ugd2UgcGxhbiB0byBpbXBsZW1lbnQgdGhhdCBpbiB0aGUgZnV0dXJlIGluIGEKKyAqIGRlZGljYXRlZCBwcm9jZXNzIHJ1bm5pbmcgb24gdGhlIHN5c3RlbS4KKyAqCisgKiBOb3RlIHRoYXQgaXRzIGRlc2lnbiBpcyBrZXB0IHNpbXBsZSB2ZXJ5IGludGVudGlvbmFsbHksIGkuZS46CisgKgorICogIC0gaXQgdGFrZXMgcmF3IEROUyBxdWVyeSBwYWNrZXQgZGF0YSBhcyBpbnB1dCwgYW5kIHJldHVybnMgcmF3IEROUworICogICAgYW5zd2VyIHBhY2tldCBkYXRhIGFzIG91dHB1dAorICoKKyAqICAgICh0aGlzIG1lYW5zIHRoYXQgdHdvIHNpbWlsYXIgcXVlcmllcyB0aGF0IGVuY29kZSB0aGUgRE5TIG5hbWUKKyAqICAgICBkaWZmZXJlbnRseSB3aWxsIGJlIHRyZWF0ZWQgZGlzdGluY3RseSkuCisgKgorICogICAgdGhlIHNtYWxsZXN0IFRUTCB2YWx1ZSBhbW9uZyB0aGUgYW5zd2VyIHJlY29yZHMgYXJlIHVzZWQgYXMgdGhlIHRpbWUKKyAqICAgIHRvIGtlZXAgYW4gYW5zd2VyIGluIHRoZSBjYWNoZS4KKyAqCisgKiAgICB0aGlzIGlzIGJhZCwgYnV0IHdlIGFic29sdXRlbHkgd2FudCB0byBhdm9pZCBwYXJzaW5nIHRoZSBhbnN3ZXIgcGFja2V0cworICogICAgKGFuZCBzaG91bGQgYmUgc29sdmVkIGJ5IHRoZSBsYXRlciBmdWxsIEROUyBjYWNoZSBwcm9jZXNzKS4KKyAqCisgKiAgLSB0aGUgaW1wbGVtZW50YXRpb24gaXMganVzdCBhIChxdWVyeS1kYXRhKSA9PiAoYW5zd2VyLWRhdGEpIGhhc2ggdGFibGUKKyAqICAgIHdpdGggYSB0cml2aWFsIGxlYXN0LXJlY2VudGx5LXVzZWQgZXhwaXJhdGlvbiBwb2xpY3kuCisgKgorICogRG9pbmcgdGhpcyBrZWVwcyB0aGUgY29kZSBzaW1wbGUgYW5kIGF2b2lkcyB0byBkZWFsIHdpdGggYSBsb3Qgb2YgdGhpbmdzCisgKiB0aGF0IGEgZnVsbCBETlMgY2FjaGUgaXMgZXhwZWN0ZWQgdG8gZG8uCisgKgorICogVGhlIEFQSSBpcyBhbHNvIHZlcnkgc2ltcGxlOgorICoKKyAqICAgLSB0aGUgY2xpZW50IGNhbGxzIF9yZXNvbHZfY2FjaGVfZ2V0KCkgdG8gb2J0YWluIGEgaGFuZGxlIHRvIHRoZSBjYWNoZS4KKyAqICAgICB0aGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgY2FjaGUgb24gZmlyc3QgdXNhZ2UuIHRoZSByZXN1bHQgY2FuIGJlIE5VTEwKKyAqICAgICBpZiB0aGUgY2FjaGUgaXMgZGlzYWJsZWQuCisgKgorICogICAtIHRoZSBjbGllbnQgY2FsbHMgX3Jlc29sdl9jYWNoZV9sb29rdXAoKSBiZWZvcmUgcGVyZm9ybWluZyBhIHF1ZXJ5CisgKgorICogICAgIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIFJFU09MVl9DQUNIRV9GT1VORCwgYSBjb3B5IG9mIHRoZSBhbnN3ZXIgZGF0YQorICogICAgIGhhcyBiZWVuIGNvcGllZCBpbnRvIHRoZSBjbGllbnQtcHJvdmlkZWQgYW5zd2VyIGJ1ZmZlci4KKyAqCisgKiAgICAgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgUkVTT0xWX0NBQ0hFX05PVEZPVU5ELCB0aGUgY2xpZW50IHNob3VsZCBwZXJmb3JtCisgKiAgICAgYSByZXF1ZXN0IG5vcm1hbGx5LCAqdGhlbiogY2FsbCBfcmVzb2x2X2NhY2hlX2FkZCgpIHRvIGFkZCB0aGUgcmVjZWl2ZWQKKyAqICAgICBhbnN3ZXIgdG8gdGhlIGNhY2hlLgorICoKKyAqICAgICBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBSRVNPTFZfQ0FDSEVfVU5TVVBQT1JURUQsIHRoZSBjbGllbnQgc2hvdWxkCisgKiAgICAgcGVyZm9ybSBhIHJlcXVlc3Qgbm9ybWFsbHksIGFuZCAqbm90KiBjYWxsIF9yZXNvbHZfY2FjaGVfYWRkKCkKKyAqCisgKiAgICAgbm90ZSB0aGF0IFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBhbnN3ZXIgYnVmZmVyCisgKiAgICAgaXMgdG9vIHNob3J0IHRvIGFjY29tb2RhdGUgdGhlIGNhY2hlZCByZXN1bHQuCisgKi8KKworLyogdGhlIG5hbWUgb2YgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCB3aWxsIGJlIGNoZWNrZWQgdGhlIGZpcnN0IHRpbWUKKyAqIHRoaXMgY29kZSBpcyBjYWxsZWQgaWYgaXRzIHZhbHVlIGlzICIwIiwgdGhlbiB0aGUgcmVzb2x2ZXIgY2FjaGUgaXMKKyAqIGRpc2FibGVkLgorICovCisjZGVmaW5lICBDT05GSUdfRU5WICAiQklPTklDX0ROU0NBQ0hFIgorCisvKiBlbnRyaWVzIG9sZGVyIHRoYW4gQ09ORklHX1NFQ09ORFMgc2Vjb25kcyBhcmUgYWx3YXlzIGRpc2NhcmRlZC4KKyAqLworI2RlZmluZSAgQ09ORklHX1NFQ09ORFMgICAgKDYwKjEwKSAgICAvKiAxMCBtaW51dGVzICovCisKKy8qIGRlZmF1bHQgbnVtYmVyIG9mIGVudHJpZXMga2VwdCBpbiB0aGUgY2FjaGUuIFRoaXMgdmFsdWUgaGFzIGJlZW4KKyAqIGRldGVybWluZWQgYnkgYnJvd3NpbmcgdGhyb3VnaCB2YXJpb3VzIHNpdGVzIGFuZCBjb3VudGluZyB0aGUgbnVtYmVyCisgKiBvZiBjb3JyZXNwb25kaW5nIHJlcXVlc3RzLiBLZWVwIGluIG1pbmQgdGhhdCBvdXIgZnJhbWV3b3JrIGlzIGN1cnJlbnRseQorICogcGVyZm9ybWluZyB0d28gcmVxdWVzdHMgcGVyIG5hbWUgbG9va3VwIChvbmUgZm9yIElQdjQsIHRoZSBvdGhlciBmb3IgSVB2NikKKyAqCisgKiAgICB3d3cuZ29vZ2xlLmNvbSAgICAgIDQKKyAqICAgIHd3dy55c2VhcmNoLmNvbSAgICAgNgorICogICAgd3d3LmFtYXpvbi5jb20gICAgICA4CisgKiAgICB3d3cubnl0aW1lcy5jb20gICAgIDIyCisgKiAgICB3d3cuZXNwbi5jb20gICAgICAgIDI4CisgKiAgICB3d3cubXNuLmNvbSAgICAgICAgIDI4CisgKiAgICB3d3cubGVtb25kZS5mciAgICAgIDM1CisgKgorICogKGRldGVybWluZWQgaW4gMjAwOS0yLTE3IGZyb20gUGFyaXMsIEZyYW5jZSwgcmVzdWx0cyBtYXkgdmFyeSBkZXBlbmRpbmcKKyAqICBvbiBsb2NhdGlvbikKKyAqCisgKiBtb3N0IGhpZ2gtbGV2ZWwgd2Vic2l0ZXMgdXNlIGxvdHMgb2YgbWVkaWEvYWQgc2VydmVycyB3aXRoIGRpZmZlcmVudCBuYW1lcworICogYnV0IHRoZXNlIGFyZSBnZW5lcmFsbHkgcmV1c2VkIHdoZW4gYnJvd3NpbmcgdGhyb3VnaCB0aGUgc2l0ZS4KKyAqCisgKiBBcyBzdWNoLCBhIHZhbHVlIG9mIDY0IHNob3VsZCBiZSByZWxhdGl2ZWx5IGNvbWZvcnRhYmxlIGF0IHRoZSBtb21lbnQuCisgKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqIE5PVEUgLSB0aGlzIGhhcyBjaGFuZ2VkLgorICogKiAxKSB3ZSd2ZSBhZGRlZCBJUHY2IHN1cHBvcnQgc28gZWFjaCBkbnMgcXVlcnkgcmVzdWx0cyBpbiAyIHJlc3BvbnNlcworICogKiAyKSB3ZSd2ZSBtYWRlIHRoaXMgYSBzeXN0ZW0td2lkZSBjYWNoZSwgc28gdGhlIGNvc3QgaXMgbGVzcyAoaXQncyBub3QKKyAqICogICAgZHVwbGljYXRlZCBpbiBlYWNoIHByb2Nlc3MpIGFuZCB0aGUgbmVlZCBpcyBncmVhdGVyIChtb3JlIHByb2Nlc3NlcworICogKiAgICBtYWtpbmcgZGlmZmVyZW50IHJlcXVlc3RzKS4KKyAqICogVXBwaW5nIGJ5IDJ4IGZvciBJUHY2CisgKiAqIFVwcGluZyBieSBhbm90aGVyIDV4IGZvciB0aGUgY2VudHJhbGl6ZWQgbmF0dXJlCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjZGVmaW5lICBDT05GSUdfTUFYX0VOVFJJRVMgICAgNjQgKiAyICogNQorLyogbmFtZSBvZiB0aGUgc3lzdGVtIHByb3BlcnR5IHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBjYWNoZSBzaXplICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBzZXQgdG8gMSB0byBkZWJ1ZyBjYWNoZSBvcGVyYXRpb25zICovCisjZGVmaW5lICBERUJVRyAgICAgICAwCisKKy8qIHNldCB0byAxIHRvIGRlYnVnIHF1ZXJ5IGRhdGEgKi8KKyNkZWZpbmUgIERFQlVHX0RBVEEgIDAKKworI3VuZGVmIFhMT0cKKyNpZiBERUJVRworIyAgaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKKyMgIGRlZmluZSBYTE9HKC4uLikgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCJsaWJjIixfX1ZBX0FSR1NfXykKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qKiBCT1VOREVEIEJVRkZFUiBGT1JNQVRUSU5HCisgKiovCisKKy8qIHRlY2huaWNhbCBub3RlOgorICoKKyAqICAgdGhlIGZvbGxvd2luZyBkZWJ1Z2dpbmcgcm91dGluZXMgYXJlIHVzZWQgdG8gYXBwZW5kIGRhdGEgdG8gYSBib3VuZGVkCisgKiAgIGJ1ZmZlciB0aGV5IHRha2UgdHdvIHBhcmFtZXRlcnMgdGhhdCBhcmU6CisgKgorICogICAtIHAgOiBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBidWZmZXIKKyAqICAgICAgICAgdGhpcyB2YWx1ZSBpcyBpbml0aWFsbHkgc2V0IHRvIHRoZSBidWZmZXIncyBhZGRyZXNzLgorICoKKyAqICAgLSBlbmQgOiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyJ3MgbGltaXQsIGkuZS4gb2YgdGhlIGZpcnN0IGJ5dGUKKyAqICAgICAgICAgICBhZnRlciB0aGUgYnVmZmVyLiB0aGlzIGFkZHJlc3Mgc2hvdWxkIG5ldmVyIGJlIHRvdWNoZWQuCisgKgorICogICAgICAgICAgIElNUE9SVEFOVDogaXQgaXMgYXNzdW1lZCB0aGF0IGVuZCA+IGJ1ZmZlcl9hZGRyZXNzLCBpLmUuCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBidWZmZXIgaXMgYXQgbGVhc3Qgb25lIGJ5dGUuCisgKgorICogICB0aGUgX2JwcmludF8oKSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBuZXcgdmFsdWUgb2YgJ3AnIGFmdGVyIHRoZSBkYXRhCisgKiAgIGhhcyBiZWVuIGFwcGVuZGVkLCBhbmQgYWxzbyBlbnN1cmUgdGhlIGZvbGxvd2luZzoKKyAqCisgKiAgIC0gdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgbmV2ZXIgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuICdlbmQnCisgKgorICogICAtIGEgcmV0dXJuIHZhbHVlIGVxdWFsIHRvICdlbmQnIG1lYW5zIHRoYXQgdHJ1bmNhdGlvbiBvY2N1cmVkCisgKiAgICAgKGluIHdoaWNoIGNhc2UsIGVuZFstMV0gd2lsbCBiZSBzZXQgdG8gMCkKKyAqCisgKiAgIC0gYWZ0ZXIgcmV0dXJuaW5nIGZyb20gYSBfYnByaW50XygpIGZ1bmN0aW9uLCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyCisgKiAgICAgaXMgYWx3YXlzIDAtdGVybWluYXRlZCwgZXZlbiBpbiB0aGUgZXZlbnQgb2YgdHJ1bmNhdGlvbi4KKyAqCisgKiAgdGhlc2UgY29udmVudGlvbnMgYWxsb3cgeW91IHRvIGNhbGwgX2JwcmludF8gZnVuY3Rpb25zIG11bHRpcGxlIHRpbWVzIGFuZAorICogIG9ubHkgY2hlY2sgZm9yIHRydW5jYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIGFzIGluOgorICoKKyAqICAgICBjaGFyICBidWZmWzEwMDBdLCAqcCA9IGJ1ZmYsICplbmQgPSBwICsgc2l6ZW9mKGJ1ZmYpOworICoKKyAqICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJyInKTsKKyAqICAgICBwID0gX2JwcmludF9zKHAsIGVuZCwgbXlfc3RyaW5nKTsKKyAqICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJyInKTsKKyAqCisgKiAgICAgaWYgKHAgPj0gZW5kKSB7CisgKiAgICAgICAgLy8gYnVmZmVyIHdhcyB0b28gc21hbGwKKyAqICAgICB9CisgKgorICogICAgIHByaW50ZiggIiVzIiwgYnVmZiApOworICovCisKKy8qIGFkZCBhIGNoYXIgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLworc3RhdGljIGNoYXIqCitfYnByaW50X2MoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBpbnQgIGMgKQoreworICAgIGlmIChwIDwgZW5kKSB7CisgICAgICAgIGlmIChwKzEgPT0gZW5kKQorICAgICAgICAgICAgKnArKyA9IDA7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgKnArKyA9IChjaGFyKSBjOworICAgICAgICAgICAgKnAgICA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKKy8qIGFkZCBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRvIGEgYm91bmRlZCBidWZmZXIgKi8KK3N0YXRpYyBjaGFyKgorX2JwcmludF9iKCBjaGFyKiAgcCwgY2hhciogIGVuZCwgY29uc3QgY2hhciogIGJ1ZiwgaW50ICBsZW4gKQoreworICAgIGludCAgYXZhaWwgPSBlbmQgLSBwOworCisgICAgaWYgKGF2YWlsIDw9IDAgfHwgbGVuIDw9IDApCisgICAgICAgIHJldHVybiBwOworCisgICAgaWYgKGF2YWlsID4gbGVuKQorICAgICAgICBhdmFpbCA9IGxlbjsKKworICAgIG1lbWNweSggcCwgYnVmLCBhdmFpbCApOworICAgIHAgKz0gYXZhaWw7CisKKyAgICBpZiAocCA8IGVuZCkKKyAgICAgICAgcFswXSA9IDA7CisgICAgZWxzZQorICAgICAgICBlbmRbLTFdID0gMDsKKworICAgIHJldHVybiBwOworfQorCisvKiBhZGQgYSBzdHJpbmcgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLworc3RhdGljIGNoYXIqCitfYnByaW50X3MoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBjb25zdCBjaGFyKiAgc3RyICkKK3sKKyAgICByZXR1cm4gX2JwcmludF9iKHAsIGVuZCwgc3RyLCBzdHJsZW4oc3RyKSk7Cit9CisKKy8qIGFkZCBhIGZvcm1hdHRlZCBzdHJpbmcgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLworc3RhdGljIGNoYXIqCitfYnByaW50KCBjaGFyKiAgcCwgY2hhciogIGVuZCwgY29uc3QgY2hhciogIGZvcm1hdCwgLi4uICkKK3sKKyAgICBpbnQgICAgICBhdmFpbCwgbjsKKyAgICB2YV9saXN0ICBhcmdzOworCisgICAgYXZhaWwgPSBlbmQgLSBwOworCisgICAgaWYgKGF2YWlsIDw9IDApCisgICAgICAgIHJldHVybiBwOworCisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBuID0gdnNucHJpbnRmKCBwLCBhdmFpbCwgZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICAvKiBjZXJ0YWluIEMgbGlicmFyaWVzIHJldHVybiAtMSBpbiBjYXNlIG9mIHRydW5jYXRpb24gKi8KKyAgICBpZiAobiA8IDAgfHwgbiA+IGF2YWlsKQorICAgICAgICBuID0gYXZhaWw7CisKKyAgICBwICs9IG47CisgICAgLyogY2VydGFpbiBDIGxpYnJhcmllcyBkbyBub3QgemVyby10ZXJtaW5hdGUgaW4gY2FzZSBvZiB0cnVuY2F0aW9uICovCisgICAgaWYgKHAgPT0gZW5kKQorICAgICAgICBwWy0xXSA9IDA7CisKKyAgICByZXR1cm4gcDsKK30KKworLyogYWRkIGEgaGV4IHZhbHVlIHRvIGEgYm91bmRlZCBidWZmZXIsIHVwIHRvIDggZGlnaXRzICovCitzdGF0aWMgY2hhcioKK19icHJpbnRfaGV4KCBjaGFyKiAgcCwgY2hhciogIGVuZCwgdW5zaWduZWQgIHZhbHVlLCBpbnQgIG51bURpZ2l0cyApCit7CisgICAgY2hhciAgIHRleHRbc2l6ZW9mKHVuc2lnbmVkKSoyXTsKKyAgICBpbnQgICAgbm4gPSAwOworCisgICAgd2hpbGUgKG51bURpZ2l0cy0tID4gMCkgeworICAgICAgICB0ZXh0W25uKytdID0gIjAxMjM0NTY3ODlhYmNkZWYiWyh2YWx1ZSA+PiAobnVtRGlnaXRzKjQpKSAmIDE1XTsKKyAgICB9CisgICAgcmV0dXJuIF9icHJpbnRfYihwLCBlbmQsIHRleHQsIG5uKTsKK30KKworLyogYWRkIHRoZSBoZXhhZGVjaW1hbCBkdW1wIG9mIHNvbWUgbWVtb3J5IGFyZWEgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLworc3RhdGljIGNoYXIqCitfYnByaW50X2hleGR1bXAoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBjb25zdCB1aW50OF90KiAgZGF0YSwgaW50ICBkYXRhbGVuICkKK3sKKyAgICBpbnQgICBsaW5lU2l6ZSA9IDE2OworCisgICAgd2hpbGUgKGRhdGFsZW4gPiAwKSB7CisgICAgICAgIGludCAgYXZhaWwgPSBkYXRhbGVuOworICAgICAgICBpbnQgIG5uOworCisgICAgICAgIGlmIChhdmFpbCA+IGxpbmVTaXplKQorICAgICAgICAgICAgYXZhaWwgPSBsaW5lU2l6ZTsKKworICAgICAgICBmb3IgKG5uID0gMDsgbm4gPCBhdmFpbDsgbm4rKykgeworICAgICAgICAgICAgaWYgKG5uID4gMCkKKyAgICAgICAgICAgICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJyAnKTsKKyAgICAgICAgICAgIHAgPSBfYnByaW50X2hleChwLCBlbmQsIGRhdGFbbm5dLCAyKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKCA7IG5uIDwgbGluZVNpemU7IG5uKysgKSB7CisgICAgICAgICAgICBwID0gX2JwcmludF9zKHAsIGVuZCwgIiAgICIpOworICAgICAgICB9CisgICAgICAgIHAgPSBfYnByaW50X3MocCwgZW5kLCAiICAiKTsKKworICAgICAgICBmb3IgKG5uID0gMDsgbm4gPCBhdmFpbDsgbm4rKykgeworICAgICAgICAgICAgaW50ICBjID0gZGF0YVtubl07CisKKyAgICAgICAgICAgIGlmIChjIDwgMzIgfHwgYyA+IDEyNykKKyAgICAgICAgICAgICAgICBjID0gJy4nOworCisgICAgICAgICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgYyk7CisgICAgICAgIH0KKyAgICAgICAgcCA9IF9icHJpbnRfYyhwLCBlbmQsICdcbicpOworCisgICAgICAgIGRhdGEgICAgKz0gYXZhaWw7CisgICAgICAgIGRhdGFsZW4gLT0gYXZhaWw7CisgICAgfQorICAgIHJldHVybiBwOworfQorCisvKiBkdW1wIHRoZSBjb250ZW50IG9mIGEgcXVlcnkgb2YgcGFja2V0IHRvIHRoZSBsb2cgKi8KK3N0YXRpYyB2b2lkCitYTE9HX0JZVEVTKCBjb25zdCB2b2lkKiAgYmFzZSwgaW50ICBsZW4gKQoreworICAgIGNoYXIgIGJ1ZmZbMTAyNF07CisgICAgY2hhciogIHAgPSBidWZmLCAqZW5kID0gcCArIHNpemVvZihidWZmKTsKKworICAgIHAgPSBfYnByaW50X2hleGR1bXAocCwgZW5kLCBiYXNlLCBsZW4pOworICAgIFhMT0coIiVzIixidWZmKTsKK30KKworI2Vsc2UgLyogIURFQlVHICovCisjICBkZWZpbmUgIFhMT0coLi4uKSAgICAgICAgKCh2b2lkKTApCisjICBkZWZpbmUgIFhMT0dfQllURVMoYSxiKSAgKCh2b2lkKTApCisjZW5kaWYKKworc3RhdGljIHRpbWVfdAorX3RpbWVfbm93KCB2b2lkICkKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCAgdHY7CisKKyAgICBnZXR0aW1lb2ZkYXkoICZ0diwgTlVMTCApOworICAgIHJldHVybiB0di50dl9zZWM7Cit9CisKKy8qIHJlbWluZGVyOiB0aGUgZ2VuZXJhbCBmb3JtYXQgb2YgYSBETlMgcGFja2V0IGlzIHRoZSBmb2xsb3dpbmc6CisgKgorICogICAgSEVBREVSICAoMTIgYnl0ZXMpCisgKiAgICBRVUVTVElPTiAgKHZhcmlhYmxlKQorICogICAgQU5TV0VSICh2YXJpYWJsZSkKKyAqICAgIEFVVEhPUklUWSAodmFyaWFibGUpCisgKiAgICBBRERJVElPTk5BTCAodmFyaWFibGUpCisgKgorICogdGhlIEhFQURFUiBpcyBtYWRlIG9mOgorICoKKyAqICAgSUQgICAgIDogMTYgOiAxNi1iaXQgdW5pcXVlIHF1ZXJ5IGlkZW50aWZpY2F0aW9uIGZpZWxkCisgKgorICogICBRUiAgICAgOiAgMSA6IHNldCB0byAwIGZvciBxdWVyaWVzLCBhbmQgMSBmb3IgcmVzcG9uc2VzCisgKiAgIE9wY29kZSA6ICA0IDogc2V0IHRvIDAgZm9yIHF1ZXJpZXMKKyAqICAgQUEgICAgIDogIDEgOiBzZXQgdG8gMCBmb3IgcXVlcmllcworICogICBUQyAgICAgOiAgMSA6IHRydW5jYXRpb24gZmxhZywgd2lsbCBiZSBzZXQgdG8gMCBpbiBxdWVyaWVzCisgKiAgIFJEICAgICA6ICAxIDogcmVjdXJzaW9uIGRlc2lyZWQKKyAqCisgKiAgIFJBICAgICA6ICAxIDogcmVjdXJzaW9uIGF2YWlsYWJsZSAoMCBpbiBxdWVyaWVzKQorICogICBaICAgICAgOiAgMyA6IHRocmVlIHJlc2VydmVkIHplcm8gYml0cworICogICBSQ09ERSAgOiAgNCA6IHJlc3BvbnNlIGNvZGUgKGFsd2F5cyAwPU5PRVJST1IgaW4gcXVlcmllcykKKyAqCisgKiAgIFFEQ291bnQ6IDE2IDogcXVlc3Rpb24gY291bnQKKyAqICAgQU5Db3VudDogMTYgOiBBbnN3ZXIgY291bnQgKDAgaW4gcXVlcmllcykKKyAqICAgTlNDb3VudDogMTY6IEF1dGhvcml0eSBSZWNvcmQgY291bnQgKDAgaW4gcXVlcmllcykKKyAqICAgQVJDb3VudDogMTY6IEFkZGl0aW9ubmFsIFJlY29yZCBjb3VudCAoMCBpbiBxdWVyaWVzKQorICoKKyAqIHRoZSBRVUVTVElPTiBpcyBtYWRlIG9mIFFEQ291bnQgUXVlc3Rpb24gUmVjb3JkIChRUnMpCisgKiB0aGUgQU5TV0VSIGlzIG1hZGUgb2YgQU5Db3VudCBSUnMKKyAqIHRoZSBBVVRIT1JJVFkgaXMgbWFkZSBvZiBOU0NvdW50IFJScworICogdGhlIEFERElUSU9OTkFMIGlzIG1hZGUgb2YgQVJDb3VudCBSUnMKKyAqCisgKiBFYWNoIFF1ZXN0aW9uIFJlY29yZCAoUVIpIGlzIG1hZGUgb2Y6CisgKgorICogICBRTkFNRSAgIDogdmFyaWFibGUgOiBRdWVyeSBETlMgTkFNRQorICogICBUWVBFICAgIDogMTYgICAgICAgOiB0eXBlIG9mIHF1ZXJ5IChBPTEsIFBUUj0xMiwgTVg9MTUsIEFBQUE9MjgsIEFMTD0yNTUpCisgKiAgIENMQVNTICAgOiAxNiAgICAgICA6IGNsYXNzIG9mIHF1ZXJ5IChJTj0xKQorICoKKyAqIEVhY2ggUmVzb3VyY2UgUmVjb3JkIChSUikgaXMgbWFkZSBvZjoKKyAqCisgKiAgIE5BTUUgICAgOiB2YXJpYWJsZSA6IEROUyBOQU1FCisgKiAgIFRZUEUgICAgOiAxNiAgICAgICA6IHR5cGUgb2YgcXVlcnkgKEE9MSwgUFRSPTEyLCBNWD0xNSwgQUFBQT0yOCwgQUxMPTI1NSkKKyAqICAgQ0xBU1MgICA6IDE2ICAgICAgIDogY2xhc3Mgb2YgcXVlcnkgKElOPTEpCisgKiAgIFRUTCAgICAgOiAzMiAgICAgICA6IHNlY29uZHMgdG8gY2FjaGUgdGhpcyBSUiAoMD1ub25lKQorICogICBSRExFTkdUSDogMTYgICAgICAgOiBzaXplIG9mIFJEREFUQSBpbiBieXRlcworICogICBSRERBVEEgIDogdmFyaWFibGUgOiBSUiBkYXRhIChkZXBlbmRzIG9uIFRZUEUpCisgKgorICogRWFjaCBRTkFNRSBjb250YWlucyBhIGRvbWFpbiBuYW1lIGVuY29kZWQgYXMgYSBzZXF1ZW5jZSBvZiAnbGFiZWxzJworICogdGVybWluYXRlZCBieSBhIHplcm8uIEVhY2ggbGFiZWwgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICoKKyAqICAgIExFTiAgOiA4ICAgICA6IGxlbmdodCBvZiBsYWJlbCAoTVVTVCBiZSA8IDY0KQorICogICAgTkFNRSA6IDgqTEVOIDogbGFiZWwgbGVuZ3RoIChtdXN0IGV4Y2x1ZGUgZG90cykKKyAqCisgKiBBIHZhbHVlIG9mIDAgaW4gdGhlIGVuY29kaW5nIGlzIGludGVycHJldGVkIGFzIHRoZSAncm9vdCcgZG9tYWluIGFuZAorICogdGVybWluYXRlcyB0aGUgZW5jb2RpbmcuIFNvICd3d3cuYW5kcm9pZC5jb20nIHdpbGwgYmUgZW5jb2RlZCBhczoKKyAqCisgKiAgIDwzPnd3dzw3PmFuZHJvaWQ8Mz5jb208MD4KKyAqCisgKiBXaGVyZSA8bj4gcmVwcmVzZW50cyB0aGUgYnl0ZSB3aXRoIHZhbHVlICduJworICoKKyAqIEVhY2ggTkFNRSByZWZsZWN0cyB0aGUgUU5BTUUgb2YgdGhlIHF1ZXN0aW9uLCBidXQgaGFzIGEgc2xpZ2h0bHkgbW9yZQorICogY29tcGxleCBlbmNvZGluZyBpbiBvcmRlciB0byBwcm92aWRlIG1lc3NhZ2UgY29tcHJlc3Npb24uIFRoaXMgaXMgYWNoaWV2ZWQKKyAqIGJ5IHVzaW5nIGEgMi1ieXRlIHBvaW50ZXIsIHdpdGggZm9ybWF0OgorICoKKyAqICAgIFRZUEUgICA6IDIgIDogMGIxMSB0byBpbmRpY2F0ZSBhIHBvaW50ZXIsIDBiMDEgYW5kIDBiMTAgYXJlIHJlc2VydmVkCisgKiAgICBPRkZTRVQgOiAxNCA6IG9mZnNldCB0byBhbm90aGVyIHBhcnQgb2YgdGhlIEROUyBwYWNrZXQKKyAqCisgKiBUaGUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgRE5TIHBhY2tldCBhbmQgbXVzdCBwb2ludAorICogQSBwb2ludGVyIHRlcm1pbmF0ZXMgdGhlIGVuY29kaW5nLgorICoKKyAqIFRoZSBOQU1FIGNhbiBiZSBlbmNvZGVkIGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CisgKgorICogICAtIGEgc2VxdWVuY2Ugb2Ygc2ltcGxlIGxhYmVscyB0ZXJtaW5hdGVkIGJ5IDAgKGxpa2UgUU5BTUVzKQorICogICAtIGEgc2luZ2xlIHBvaW50ZXIKKyAqICAgLSBhIHNlcXVlbmNlIG9mIHNpbXBsZSBsYWJlbHMgdGVybWluYXRlZCBieSBhIHBvaW50ZXIKKyAqCisgKiBBIHBvaW50ZXIgc2hhbGwgYWx3YXlzIHBvaW50IHRvIGVpdGhlciBhIHBvaW50ZXIgb2YgYSBzZXF1ZW5jZSBvZgorICogbGFiZWxzICh3aGljaCBjYW4gdGhlbXNlbHZlcyBiZSB0ZXJtaW5hdGVkIGJ5IGVpdGhlciBhIDAgb3IgYSBwb2ludGVyKQorICoKKyAqIFRoZSBleHBhbmRlZCBsZW5ndGggb2YgYSBnaXZlbiBkb21haW4gbmFtZSBzaG91bGQgbm90IGV4Y2VlZCAyNTUgYnl0ZXMuCisgKgorICogTk9URTogd2UgZG9uJ3QgcGFyc2UgdGhlIGFuc3dlciBwYWNrZXRzLCBzbyBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBOQU1FCisgKiAgICAgICByZWNvcmRzLCBvbmx5IFFOQU1Fcy4KKyAqLworCisjZGVmaW5lICBETlNfSEVBREVSX1NJWkUgIDEyCisKKyNkZWZpbmUgIEROU19UWVBFX0EgICAiXDAwXDAxIiAgIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAxICovCisjZGVmaW5lICBETlNfVFlQRV9QVFIgIlwwMFwwMTQiICAvKiBiaWctZW5kaWFuIGRlY2ltYWwgMTIgKi8KKyNkZWZpbmUgIEROU19UWVBFX01YICAiXDAwXDAxNyIgIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAxNSAqLworI2RlZmluZSAgRE5TX1RZUEVfQUFBQSAiXDAwXDAzNCIgLyogYmlnLWVuZGlhbiBkZWNpbWFsIDI4ICovCisjZGVmaW5lICBETlNfVFlQRV9BTEwgIlwwMFwwMzc3IiAvKiBiaWctZW5kaWFuIGRlY2ltYWwgMjU1ICovCisKKyNkZWZpbmUgIEROU19DTEFTU19JTiAiXDAwXDAxIiAgIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAxICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCB1aW50OF90KiAgYmFzZTsKKyAgICBjb25zdCB1aW50OF90KiAgZW5kOworICAgIGNvbnN0IHVpbnQ4X3QqICBjdXJzb3I7Cit9IERuc1BhY2tldDsKKworc3RhdGljIHZvaWQKK19kbnNQYWNrZXRfaW5pdCggRG5zUGFja2V0KiAgcGFja2V0LCBjb25zdCB1aW50OF90KiAgYnVmZiwgaW50ICBidWZmbGVuICkKK3sKKyAgICBwYWNrZXQtPmJhc2UgICA9IGJ1ZmY7CisgICAgcGFja2V0LT5lbmQgICAgPSBidWZmICsgYnVmZmxlbjsKKyAgICBwYWNrZXQtPmN1cnNvciA9IGJ1ZmY7Cit9CisKK3N0YXRpYyB2b2lkCitfZG5zUGFja2V0X3Jld2luZCggRG5zUGFja2V0KiAgcGFja2V0ICkKK3sKKyAgICBwYWNrZXQtPmN1cnNvciA9IHBhY2tldC0+YmFzZTsKK30KKworc3RhdGljIHZvaWQKK19kbnNQYWNrZXRfc2tpcCggRG5zUGFja2V0KiAgcGFja2V0LCBpbnQgIGNvdW50ICkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcCA9IHBhY2tldC0+Y3Vyc29yICsgY291bnQ7CisKKyAgICBpZiAocCA+IHBhY2tldC0+ZW5kKQorICAgICAgICBwID0gcGFja2V0LT5lbmQ7CisKKyAgICBwYWNrZXQtPmN1cnNvciA9IHA7Cit9CisKK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfcmVhZEludDE2KCBEbnNQYWNrZXQqICBwYWNrZXQgKQoreworICAgIGNvbnN0IHVpbnQ4X3QqICBwID0gcGFja2V0LT5jdXJzb3I7CisKKyAgICBpZiAocCsyID4gcGFja2V0LT5lbmQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHBhY2tldC0+Y3Vyc29yID0gcCsyOworICAgIHJldHVybiAocFswXTw8IDgpIHwgcFsxXTsKK30KKworLyoqIFFVRVJZIENIRUNLSU5HCisgKiovCisKKy8qIGNoZWNrIGJ5dGVzIGluIGEgZG5zIHBhY2tldC4gcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4KKyAqIHRoZSBjdXJzb3IgaXMgb25seSBhZHZhbmNlZCBpbiB0aGUgY2FzZSBvZiBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfY2hlY2tCeXRlcyggRG5zUGFja2V0KiAgcGFja2V0LCBpbnQgIG51bUJ5dGVzLCBjb25zdCB2b2lkKiAgYnl0ZXMgKQoreworICAgIGNvbnN0IHVpbnQ4X3QqICBwID0gcGFja2V0LT5jdXJzb3I7CisKKyAgICBpZiAocCArIG51bUJ5dGVzID4gcGFja2V0LT5lbmQpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG1lbWNtcChwLCBieXRlcywgbnVtQnl0ZXMpICE9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgcGFja2V0LT5jdXJzb3IgPSBwICsgbnVtQnl0ZXM7CisgICAgcmV0dXJuIDE7Cit9CisKKy8qIHBhcnNlIGFuZCBza2lwIGEgZ2l2ZW4gUU5BTUUgc3RvcmVkIGluIGEgcXVlcnkgcGFja2V0LAorICogZnJvbSB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uIHJldHVybnMgMSBvbiBzdWNjZXNzLAorICogb3IgMCBmb3IgbWFsZm9ybWVkIGRhdGEuCisgKi8KK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfY2hlY2tRTmFtZSggRG5zUGFja2V0KiAgcGFja2V0ICkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcCAgID0gcGFja2V0LT5jdXJzb3I7CisgICAgY29uc3QgdWludDhfdCogIGVuZCA9IHBhY2tldC0+ZW5kOworCisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgIGM7CisKKyAgICAgICAgaWYgKHAgPj0gZW5kKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYyA9ICpwKys7CisKKyAgICAgICAgaWYgKGMgPT0gMCkgeworICAgICAgICAgICAgcGFja2V0LT5jdXJzb3IgPSBwOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICAvKiB3ZSBkb24ndCBleHBlY3QgbGFiZWwgY29tcHJlc3Npb24gaW4gUU5BTUVzICovCisgICAgICAgIGlmIChjID49IDY0KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcCArPSBjOworICAgICAgICAvKiB3ZSByZWx5IG9uIHRoZSBib3VuZCBjaGVjayBhdCB0aGUgc3RhcnQKKyAgICAgICAgICogb2YgdGhlIGxvb3AgaGVyZSAqLworICAgIH0KKyAgICAvKiBtYWxmb3JtZWQgZGF0YSAqLworICAgIFhMT0coIm1hbGZvcm1lZCBRTkFNRSIpOworICAgIHJldHVybiAwOworfQorCisvKiBwYXJzZSBhbmQgc2tpcCBhIGdpdmVuIFFSIHN0b3JlZCBpbiBhIHBhY2tldC4KKyAqIHJldHVybnMgMSBvbiBzdWNjZXNzLCBhbmQgMCBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfY2hlY2tRUiggRG5zUGFja2V0KiAgcGFja2V0ICkKK3sKKyAgICBpZiAoIV9kbnNQYWNrZXRfY2hlY2tRTmFtZShwYWNrZXQpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIFRZUEUgbXVzdCBiZSBvbmUgb2YgdGhlIHRoaW5ncyB3ZSBzdXBwb3J0ICovCisgICAgaWYgKCFfZG5zUGFja2V0X2NoZWNrQnl0ZXMocGFja2V0LCAyLCBETlNfVFlQRV9BKSAmJgorICAgICAgICAhX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgRE5TX1RZUEVfUFRSKSAmJgorICAgICAgICAhX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgRE5TX1RZUEVfTVgpICYmCisgICAgICAgICFfZG5zUGFja2V0X2NoZWNrQnl0ZXMocGFja2V0LCAyLCBETlNfVFlQRV9BQUFBKSAmJgorICAgICAgICAhX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgRE5TX1RZUEVfQUxMKSkKKyAgICB7CisgICAgICAgIFhMT0coInVuc3VwcG9ydGVkIFRZUEUiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIC8qIENMQVNTIG11c3QgYmUgSU4gKi8KKyAgICBpZiAoIV9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIEROU19DTEFTU19JTikpIHsKKyAgICAgICAgWExPRygidW5zdXBwb3J0ZWQgQ0xBU1MiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKKy8qIGNoZWNrIHRoZSBoZWFkZXIgb2YgYSBETlMgUXVlcnkgcGFja2V0LCByZXR1cm4gMSBpZiBpdCBpcyBvbmUKKyAqIHR5cGUgb2YgcXVlcnkgd2UgY2FuIGNhY2hlLCBvciAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50CitfZG5zUGFja2V0X2NoZWNrUXVlcnkoIERuc1BhY2tldCogIHBhY2tldCApCit7CisgICAgY29uc3QgdWludDhfdCogIHAgPSBwYWNrZXQtPmJhc2U7CisgICAgaW50ICAgICAgICAgICAgIHFkQ291bnQsIGFuQ291bnQsIGRuQ291bnQsIGFyQ291bnQ7CisKKyAgICBpZiAocCArIEROU19IRUFERVJfU0laRSA+IHBhY2tldC0+ZW5kKSB7CisgICAgICAgIFhMT0coInF1ZXJ5IHBhY2tldCB0b28gc21hbGwiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogUVIgbXVzdCBiZSBzZXQgdG8gMCwgb3Bjb2RlIG11c3QgYmUgMCBhbmQgQUEgbXVzdCBiZSAwICovCisgICAgLyogUkEsIFosIGFuZCBSQ09ERSBtdXN0IGJlIDAgKi8KKyAgICBpZiAoKHBbMl0gJiAweEZDKSAhPSAwIHx8IHBbM10gIT0gMCkgeworICAgICAgICBYTE9HKCJxdWVyeSBwYWNrZXQgZmxhZ3MgdW5zdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogTm90ZSB0aGF0IHdlIGlnbm9yZSB0aGUgVEMgYW5kIFJEIGJpdHMgaGVyZSBmb3IgdGhlCisgICAgICogZm9sbG93aW5nIHJlYXNvbnM6CisgICAgICoKKyAgICAgKiAtIHRoZXJlIGlzIG5vIHBvaW50IGZvciBhIHF1ZXJ5IHBhY2tldCBzZW50IHRvIGEgc2VydmVyCisgICAgICogICB0byBoYXZlIHRoZSBUQyBiaXQgc2V0LCBidXQgdGhlIGltcGxlbWVudGF0aW9uIG1pZ2h0CisgICAgICogICBzZXQgdGhlIGJpdCBpbiB0aGUgcXVlcnkgYnVmZmVyIGZvciBpdHMgb3duIG5lZWRzCisgICAgICogICBiZXR3ZWVuIGEgX3Jlc29sdl9jYWNoZV9sb29rdXAgYW5kIGEKKyAgICAgKiAgIF9yZXNvbHZfY2FjaGVfYWRkLiBXZSBzaG91bGQgbm90IGZyZWFrIG91dCBpZiB0aGlzCisgICAgICogICBpcyB0aGUgY2FzZS4KKyAgICAgKgorICAgICAqIC0gd2UgY29uc2lkZXIgdGhhdCB0aGUgcmVzdWx0IGZyb20gYSBSRD0wIG9yIGEgUkQ9MQorICAgICAqICAgcXVlcnkgbWlnaHQgYmUgZGlmZmVyZW50LCBoZW5jZSB0aGF0IHRoZSBSRCBiaXQKKyAgICAgKiAgIHNob3VsZCBiZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgY2FjaGVkIHJlc3VsdC4KKyAgICAgKgorICAgICAqICAgdGhpcyBpbXBsaWVzIHRoYXQgUkQgaXMgY2hlY2tlZCB3aGVuIGhhc2hpbmcgb3IKKyAgICAgKiAgIGNvbXBhcmluZyBxdWVyeSBwYWNrZXRzLCBidXQgbm90IFRDCisgICAgICovCisKKyAgICAvKiBBTkNPVU5ULCBETkNPVU5UIGFuZCBBUkNPVU5UIG11c3QgYmUgMCAqLworICAgIHFkQ291bnQgPSAocFs0XSA8PCA4KSB8IHBbNV07CisgICAgYW5Db3VudCA9IChwWzZdIDw8IDgpIHwgcFs3XTsKKyAgICBkbkNvdW50ID0gKHBbOF0gPDwgOCkgfCBwWzldOworICAgIGFyQ291bnQgPSAocFsxMF08PCA4KSB8IHBbMTFdOworCisgICAgaWYgKGFuQ291bnQgIT0gMCB8fCBkbkNvdW50ICE9IDAgfHwgYXJDb3VudCAhPSAwKSB7CisgICAgICAgIFhMT0coInF1ZXJ5IHBhY2tldCBjb250YWlucyBub24tcXVlcnkgcmVjb3JkcyIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAocWRDb3VudCA9PSAwKSB7CisgICAgICAgIFhMT0coInF1ZXJ5IHBhY2tldCBkb2Vzbid0IGNvbnRhaW4gcXVlcnkgcmVjb3JkIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIENoZWNrIFFEQ09VTlQgUVJzICovCisgICAgcGFja2V0LT5jdXJzb3IgPSBwICsgRE5TX0hFQURFUl9TSVpFOworCisgICAgZm9yICg7cWRDb3VudCA+IDA7IHFkQ291bnQtLSkKKyAgICAgICAgaWYgKCFfZG5zUGFja2V0X2NoZWNrUVIocGFja2V0KSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIDE7Cit9CisKKy8qKiBRVUVSWSBERUJVR0dJTkcKKyAqKi8KKyNpZiBERUJVRworc3RhdGljIGNoYXIqCitfZG5zUGFja2V0X2JwcmludFFOYW1lKERuc1BhY2tldCogIHBhY2tldCwgY2hhciogIGJwLCBjaGFyKiAgYmVuZCkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcCAgID0gcGFja2V0LT5jdXJzb3I7CisgICAgY29uc3QgdWludDhfdCogIGVuZCA9IHBhY2tldC0+ZW5kOworICAgIGludCAgICAgICAgICAgICBmaXJzdCA9IDE7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCAgYzsKKworICAgICAgICBpZiAocCA+PSBlbmQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjID0gKnArKzsKKworICAgICAgICBpZiAoYyA9PSAwKSB7CisgICAgICAgICAgICBwYWNrZXQtPmN1cnNvciA9IHA7CisgICAgICAgICAgICByZXR1cm4gYnA7CisgICAgICAgIH0KKworICAgICAgICAvKiB3ZSBkb24ndCBleHBlY3QgbGFiZWwgY29tcHJlc3Npb24gaW4gUU5BTUVzICovCisgICAgICAgIGlmIChjID49IDY0KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgZmlyc3QgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBicCA9IF9icHJpbnRfYyhicCwgYmVuZCwgJy4nKTsKKworICAgICAgICBicCA9IF9icHJpbnRfYihicCwgYmVuZCwgKGNvbnN0IGNoYXIqKXAsIGMpOworCisgICAgICAgIHAgKz0gYzsKKyAgICAgICAgLyogd2UgcmVseSBvbiB0aGUgYm91bmQgY2hlY2sgYXQgdGhlIHN0YXJ0CisgICAgICAgICAqIG9mIHRoZSBsb29wIGhlcmUgKi8KKyAgICB9CisgICAgLyogbWFsZm9ybWVkIGRhdGEgKi8KKyAgICBicCA9IF9icHJpbnRfcyhicCwgYmVuZCwgIjxNQUxGT1JNRUQ+Iik7CisgICAgcmV0dXJuIGJwOworfQorCitzdGF0aWMgY2hhcioKK19kbnNQYWNrZXRfYnByaW50UVIoRG5zUGFja2V0KiAgcGFja2V0LCBjaGFyKiAgcCwgY2hhciogIGVuZCkKK3sKKyNkZWZpbmUgIFFRKHgpICAgeyBETlNfVFlQRV8jI3gsICN4IH0KKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgY29uc3QgY2hhciogIHR5cGVCeXRlczsKKyAgICAgICAgY29uc3QgY2hhciogIHR5cGVTdHJpbmc7CisgICAgfSBxVHlwZXNbXSA9CisgICAgeworICAgICAgICBRUShBKSwgUVEoUFRSKSwgUVEoTVgpLCBRUShBQUFBKSwgUVEoQUxMKSwKKyAgICAgICAgeyBOVUxMLCBOVUxMIH0KKyAgICB9OworICAgIGludCAgICAgICAgICBubjsKKyAgICBjb25zdCBjaGFyKiAgdHlwZVN0cmluZyA9IE5VTEw7CisKKyAgICAvKiBkdW1wIFFOQU1FICovCisgICAgcCA9IF9kbnNQYWNrZXRfYnByaW50UU5hbWUocGFja2V0LCBwLCBlbmQpOworCisgICAgLyogZHVtcCBUWVBFICovCisgICAgcCA9IF9icHJpbnRfcyhwLCBlbmQsICIgKCIpOworCisgICAgZm9yIChubiA9IDA7IHFUeXBlc1tubl0udHlwZUJ5dGVzICE9IE5VTEw7IG5uKyspIHsKKyAgICAgICAgaWYgKF9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIHFUeXBlc1tubl0udHlwZUJ5dGVzKSkgeworICAgICAgICAgICAgdHlwZVN0cmluZyA9IHFUeXBlc1tubl0udHlwZVN0cmluZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGVTdHJpbmcgIT0gTlVMTCkKKyAgICAgICAgcCA9IF9icHJpbnRfcyhwLCBlbmQsIHR5cGVTdHJpbmcpOworICAgIGVsc2UgeworICAgICAgICBpbnQgIHR5cGVDb2RlID0gX2Ruc1BhY2tldF9yZWFkSW50MTYocGFja2V0KTsKKyAgICAgICAgcCA9IF9icHJpbnQocCwgZW5kLCAiVU5LTk9XTi0lZCIsIHR5cGVDb2RlKTsKKyAgICB9CisKKyAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJyknKTsKKworICAgIC8qIHNraXAgQ0xBU1MgKi8KKyAgICBfZG5zUGFja2V0X3NraXAocGFja2V0LCAyKTsKKyAgICByZXR1cm4gcDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoZSBwYWNrZXQgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkICovCitzdGF0aWMgY2hhcioKK19kbnNQYWNrZXRfYnByaW50UXVlcnkoIERuc1BhY2tldCogIHBhY2tldCwgY2hhciogIHAsIGNoYXIqICBlbmQgKQoreworICAgIGludCAgIHFkQ291bnQ7CisKKyAgICBpZiAocGFja2V0LT5iYXNlWzJdICYgMHgxKSB7CisgICAgICAgIHAgPSBfYnByaW50X3MocCwgZW5kLCAiUkVDVVJTSVZFICIpOworICAgIH0KKworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDQpOworICAgIHFkQ291bnQgPSBfZG5zUGFja2V0X3JlYWRJbnQxNihwYWNrZXQpOworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDYpOworCisgICAgZm9yICggOyBxZENvdW50ID4gMDsgcWRDb3VudC0tICkgeworICAgICAgICBwID0gX2Ruc1BhY2tldF9icHJpbnRRUihwYWNrZXQsIHAsIGVuZCk7CisgICAgfQorICAgIHJldHVybiBwOworfQorI2VuZGlmCisKKworLyoqIFFVRVJZIEhBU0hJTkcgU1VQUE9SVAorICoqCisgKiogVEhFIEZPTExPV0lORyBDT0RFIEFTU1VNRVMgVEhBVCBUSEUgSU5QVVQgUEFDS0VUIEhBUyBBTFJFQURZCisgKiogQkVFTiBTVUNDRVNGVUxMWSBDSEVDS0VELgorICoqLworCisvKiB1c2UgMzItYml0IEZOViBoYXNoIGZ1bmN0aW9uICovCisjZGVmaW5lICBGTlZfTVVMVCAgIDE2Nzc3NjE5VQorI2RlZmluZSAgRk5WX0JBU0lTICAyMTY2MTM2MjYxVQorCitzdGF0aWMgdW5zaWduZWQKK19kbnNQYWNrZXRfaGFzaEJ5dGVzKCBEbnNQYWNrZXQqICBwYWNrZXQsIGludCAgbnVtQnl0ZXMsIHVuc2lnbmVkICBoYXNoICkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcCAgID0gcGFja2V0LT5jdXJzb3I7CisgICAgY29uc3QgdWludDhfdCogIGVuZCA9IHBhY2tldC0+ZW5kOworCisgICAgd2hpbGUgKG51bUJ5dGVzID4gMCAmJiBwIDwgZW5kKSB7CisgICAgICAgIGhhc2ggPSBoYXNoKkZOVl9NVUxUIF4gKnArKzsKKyAgICB9CisgICAgcGFja2V0LT5jdXJzb3IgPSBwOworICAgIHJldHVybiBoYXNoOworfQorCisKK3N0YXRpYyB1bnNpZ25lZAorX2Ruc1BhY2tldF9oYXNoUU5hbWUoIERuc1BhY2tldCogIHBhY2tldCwgdW5zaWduZWQgIGhhc2ggKQoreworICAgIGNvbnN0IHVpbnQ4X3QqICBwICAgPSBwYWNrZXQtPmN1cnNvcjsKKyAgICBjb25zdCB1aW50OF90KiAgZW5kID0gcGFja2V0LT5lbmQ7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCAgYzsKKworICAgICAgICBpZiAocCA+PSBlbmQpIHsgIC8qIHNob3VsZCBub3QgaGFwcGVuICovCisgICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IHJlYWQtb3ZlcmZsb3cgISFcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGMgPSAqcCsrOworCisgICAgICAgIGlmIChjID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoYyA+PSA2NCkgeworICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBtYWxmb3JtZWQgZG9tYWluICEhXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHAgKyBjID49IGVuZCkgeworICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBzaW1wbGUgbGFiZWwgcmVhZC1vdmVyZmxvdyAhIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChjID4gMCkgeworICAgICAgICAgICAgaGFzaCA9IGhhc2gqRk5WX01VTFQgXiAqcCsrOworICAgICAgICAgICAgYyAgIC09IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcGFja2V0LT5jdXJzb3IgPSBwOworICAgIHJldHVybiBoYXNoOworfQorCitzdGF0aWMgdW5zaWduZWQKK19kbnNQYWNrZXRfaGFzaFFSKCBEbnNQYWNrZXQqICBwYWNrZXQsIHVuc2lnbmVkICBoYXNoICkKK3sKKyAgICBoYXNoID0gX2Ruc1BhY2tldF9oYXNoUU5hbWUocGFja2V0LCBoYXNoKTsKKyAgICBoYXNoID0gX2Ruc1BhY2tldF9oYXNoQnl0ZXMocGFja2V0LCA0LCBoYXNoKTsgLyogVFlQRSBhbmQgQ0xBU1MgKi8KKyAgICByZXR1cm4gaGFzaDsKK30KKworc3RhdGljIHVuc2lnbmVkCitfZG5zUGFja2V0X2hhc2hRdWVyeSggRG5zUGFja2V0KiAgcGFja2V0ICkKK3sKKyAgICB1bnNpZ25lZCAgaGFzaCA9IEZOVl9CQVNJUzsKKyAgICBpbnQgICAgICAgY291bnQ7CisgICAgX2Ruc1BhY2tldF9yZXdpbmQocGFja2V0KTsKKworICAgIC8qIHdlIGlnbm9yZSB0aGUgVEMgYml0IGZvciByZWFzb25zIGV4cGxhaW5lZCBpbgorICAgICAqIF9kbnNQYWNrZXRfY2hlY2tRdWVyeSgpLgorICAgICAqCisgICAgICogaG93ZXZlciB3ZSBoYXNoIHRoZSBSRCBiaXQgdG8gZGlmZmVyZW50aWF0ZQorICAgICAqIGJldHdlZW4gYW5zd2VycyBmb3IgcmVjdXJzaXZlIGFuZCBub24tcmVjdXJzaXZlCisgICAgICogcXVlcmllcy4KKyAgICAgKi8KKyAgICBoYXNoID0gaGFzaCpGTlZfTVVMVCBeIChwYWNrZXQtPmJhc2VbMl0gJiAxKTsKKworICAgIC8qIGFzc3VtZTogb3RoZXIgZmxhZ3MgYXJlIDAgKi8KKyAgICBfZG5zUGFja2V0X3NraXAocGFja2V0LCA0KTsKKworICAgIC8qIHJlYWQgUURDT1VOVCAqLworICAgIGNvdW50ID0gX2Ruc1BhY2tldF9yZWFkSW50MTYocGFja2V0KTsKKworICAgIC8qIGFzc3VtZTogQU5jb3VudCwgTlNjb3VudCwgQVJjb3VudCBhcmUgMCAqLworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDYpOworCisgICAgLyogaGFzaCBRRENPVU5UIFFScyAqLworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICAgICAgaGFzaCA9IF9kbnNQYWNrZXRfaGFzaFFSKHBhY2tldCwgaGFzaCk7CisKKyAgICByZXR1cm4gaGFzaDsKK30KKworCisvKiogUVVFUlkgQ09NUEFSSVNPTgorICoqCisgKiogVEhFIEZPTExPV0lORyBDT0RFIEFTU1VNRVMgVEhBVCBUSEUgSU5QVVQgUEFDS0VUUyBIQVZFIEFMUkVBRFkKKyAqKiBCRUVOIFNVQ0NFU0ZVTExZIENIRUNLRUQuCisgKiovCisKK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfaXNFcXVhbERvbWFpbk5hbWUoIERuc1BhY2tldCogIHBhY2sxLCBEbnNQYWNrZXQqICBwYWNrMiApCit7CisgICAgY29uc3QgdWludDhfdCogIHAxICAgPSBwYWNrMS0+Y3Vyc29yOworICAgIGNvbnN0IHVpbnQ4X3QqICBlbmQxID0gcGFjazEtPmVuZDsKKyAgICBjb25zdCB1aW50OF90KiAgcDIgICA9IHBhY2syLT5jdXJzb3I7CisgICAgY29uc3QgdWludDhfdCogIGVuZDIgPSBwYWNrMi0+ZW5kOworCisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgIGMxLCBjMjsKKworICAgICAgICBpZiAocDEgPj0gZW5kMSB8fCBwMiA+PSBlbmQyKSB7CisgICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IHJlYWQtb3ZlcmZsb3cgISFcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjMSA9ICpwMSsrOworICAgICAgICBjMiA9ICpwMisrOworICAgICAgICBpZiAoYzEgIT0gYzIpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoYzEgPT0gMCkgeworICAgICAgICAgICAgcGFjazEtPmN1cnNvciA9IHAxOworICAgICAgICAgICAgcGFjazItPmN1cnNvciA9IHAyOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMxID49IDY0KSB7CisgICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IG1hbGZvcm1lZCBkb21haW4gISFcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHAxK2MxID4gZW5kMSkgfHwgKHAyK2MxID4gZW5kMikpIHsKKyAgICAgICAgICAgIFhMT0coIiVzOiBJTlRFUk5BTF9FUlJPUjogc2ltcGxlIGxhYmVsIHJlYWQtb3ZlcmZsb3cgISFcbiIsCisgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobWVtY21wKHAxLCBwMiwgYzEpICE9IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcDEgKz0gYzE7CisgICAgICAgIHAyICs9IGMxOworICAgICAgICAvKiB3ZSByZWx5IG9uIHRoZSBib3VuZCBjaGVja3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsb29wICovCisgICAgfQorICAgIC8qIG5vdCB0aGUgc2FtZSwgb3Igb25lIGlzIG1hbGZvcm1lZCAqLworICAgIFhMT0coImRpZmZlcmVudCBETiIpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfZG5zUGFja2V0X2lzRXF1YWxCeXRlcyggRG5zUGFja2V0KiAgcGFjazEsIERuc1BhY2tldCogIHBhY2syLCBpbnQgIG51bUJ5dGVzICkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcDEgPSBwYWNrMS0+Y3Vyc29yOworICAgIGNvbnN0IHVpbnQ4X3QqICBwMiA9IHBhY2syLT5jdXJzb3I7CisKKyAgICBpZiAoIHAxICsgbnVtQnl0ZXMgPiBwYWNrMS0+ZW5kIHx8IHAyICsgbnVtQnl0ZXMgPiBwYWNrMi0+ZW5kICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIG1lbWNtcChwMSwgcDIsIG51bUJ5dGVzKSAhPSAwICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwYWNrMS0+Y3Vyc29yICs9IG51bUJ5dGVzOworICAgIHBhY2syLT5jdXJzb3IgKz0gbnVtQnl0ZXM7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfaXNFcXVhbFFSKCBEbnNQYWNrZXQqICBwYWNrMSwgRG5zUGFja2V0KiAgcGFjazIgKQoreworICAgIC8qIGNvbXBhcmUgZG9tYWluIG5hbWUgZW5jb2RpbmcgKyBUWVBFICsgQ0xBU1MgKi8KKyAgICBpZiAoICFfZG5zUGFja2V0X2lzRXF1YWxEb21haW5OYW1lKHBhY2sxLCBwYWNrMikgfHwKKyAgICAgICAgICFfZG5zUGFja2V0X2lzRXF1YWxCeXRlcyhwYWNrMSwgcGFjazIsIDIrMikgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitfZG5zUGFja2V0X2lzRXF1YWxRdWVyeSggRG5zUGFja2V0KiAgcGFjazEsIERuc1BhY2tldCogIHBhY2syICkKK3sKKyAgICBpbnQgIGNvdW50MSwgY291bnQyOworCisgICAgLyogY29tcGFyZSB0aGUgaGVhZGVycywgaWdub3JlIG1vc3QgZmllbGRzICovCisgICAgX2Ruc1BhY2tldF9yZXdpbmQocGFjazEpOworICAgIF9kbnNQYWNrZXRfcmV3aW5kKHBhY2syKTsKKworICAgIC8qIGNvbXBhcmUgUkQsIGlnbm9yZSBUQywgc2VlIGNvbW1lbnQgaW4gX2Ruc1BhY2tldF9jaGVja1F1ZXJ5ICovCisgICAgaWYgKChwYWNrMS0+YmFzZVsyXSAmIDEpICE9IChwYWNrMi0+YmFzZVsyXSAmIDEpKSB7CisgICAgICAgIFhMT0coImRpZmZlcmVudCBSRCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBhc3N1bWU6IG90aGVyIGZsYWdzIGFyZSBhbGwgMCAqLworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrMSwgNCk7CisgICAgX2Ruc1BhY2tldF9za2lwKHBhY2syLCA0KTsKKworICAgIC8qIGNvbXBhcmUgUURDT1VOVCAqLworICAgIGNvdW50MSA9IF9kbnNQYWNrZXRfcmVhZEludDE2KHBhY2sxKTsKKyAgICBjb3VudDIgPSBfZG5zUGFja2V0X3JlYWRJbnQxNihwYWNrMik7CisgICAgaWYgKGNvdW50MSAhPSBjb3VudDIgfHwgY291bnQxIDwgMCkgeworICAgICAgICBYTE9HKCJkaWZmZXJlbnQgUURDT1VOVCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBhc3N1bWU6IEFOY291bnQsIE5TY291bnQgYW5kIEFSY291bnQgYXJlIGFsbCAwICovCisgICAgX2Ruc1BhY2tldF9za2lwKHBhY2sxLCA2KTsKKyAgICBfZG5zUGFja2V0X3NraXAocGFjazIsIDYpOworCisgICAgLyogY29tcGFyZSB0aGUgUURDT1VOVCBRUnMgKi8KKyAgICBmb3IgKCA7IGNvdW50MSA+IDA7IGNvdW50MS0tICkgeworICAgICAgICBpZiAoIV9kbnNQYWNrZXRfaXNFcXVhbFFSKHBhY2sxLCBwYWNrMikpIHsKKyAgICAgICAgICAgIFhMT0coImRpZmZlcmVudCBRUiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBjYWNoZSBlbnRyeS4gZm9yIHNpbXBsaWNpdHksICdoYXNoJyBhbmQgJ2hsaW5rJyBhcmUgaW5saW5lZCBpbiB0aGlzCisgKiBzdHJ1Y3R1cmUgdGhvdWdoIHRoZXkgYXJlIGNvbmNlcHR1YWxseSBwYXJ0IG9mIHRoZSBoYXNoIHRhYmxlLgorICoKKyAqIHNpbWlsYXJseSwgbXJ1X25leHQgYW5kIG1ydV9wcmV2IGFyZSBwYXJ0IG9mIHRoZSBnbG9iYWwgTVJVIGxpc3QKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRW50cnkgeworICAgIHVuc2lnbmVkIGludCAgICAgaGFzaDsgICAvKiBoYXNoIHZhbHVlICovCisgICAgc3RydWN0IEVudHJ5KiAgICBobGluazsgIC8qIG5leHQgaW4gY29sbGlzaW9uIGNoYWluICovCisgICAgc3RydWN0IEVudHJ5KiAgICBtcnVfcHJldjsKKyAgICBzdHJ1Y3QgRW50cnkqICAgIG1ydV9uZXh0OworCisgICAgY29uc3QgdWludDhfdCogICBxdWVyeTsKKyAgICBpbnQgICAgICAgICAgICAgIHF1ZXJ5bGVuOworICAgIGNvbnN0IHVpbnQ4X3QqICAgYW5zd2VyOworICAgIGludCAgICAgICAgICAgICAgYW5zd2VybGVuOworICAgIHRpbWVfdCAgICAgICAgICAgZXhwaXJlczsgICAvKiB0aW1lX3Qgd2hlbiB0aGUgZW50cnkgaXNuJ3QgdmFsaWQgYW55IG1vcmUgKi8KKyAgICBpbnQgICAgICAgICAgICAgIGlkOyAgICAgICAgLyogZm9yIGRlYnVnZ2luZyBwdXJwb3NlICovCit9IEVudHJ5OworCisvKioKKyAqIEZpbmQgdGhlIFRUTCBmb3IgYSBuZWdhdGl2ZSBETlMgcmVzdWx0LiAgVGhpcyBpcyBkZWZpbmVkIGFzIHRoZSBtaW5pbXVtCisgKiBvZiB0aGUgU09BIHJlY29yZHMgVFRMIGFuZCB0aGUgTUlOSU1VTS1UVEwgZmllbGQgKFJGQy0yMzA4KS4KKyAqCisgKiBSZXR1cm4gMCBpZiBub3QgZm91bmQuCisgKi8KK3N0YXRpYyB1X2xvbmcKK2Fuc3dlcl9nZXROZWdhdGl2ZVRUTChuc19tc2cgaGFuZGxlKSB7CisgICAgaW50IG4sIG5zY291bnQ7CisgICAgdV9sb25nIHJlc3VsdCA9IDA7CisgICAgbnNfcnIgcnI7CisKKyAgICBuc2NvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19ucyk7CisgICAgZm9yIChuID0gMDsgbiA8IG5zY291bnQ7IG4rKykgeworICAgICAgICBpZiAoKG5zX3BhcnNlcnIoJmhhbmRsZSwgbnNfc19ucywgbiwgJnJyKSA9PSAwKSAmJiAobnNfcnJfdHlwZShycikgPT0gbnNfdF9zb2EpKSB7CisgICAgICAgICAgICBjb25zdCB1X2NoYXIgKnJkYXRhID0gbnNfcnJfcmRhdGEocnIpOyAvLyBmaW5kIHRoZSBkYXRhCisgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmVkYXRhID0gcmRhdGEgKyBuc19ycl9yZGxlbihycik7IC8vIGFkZCB0aGUgbGVuIHRvIGZpbmQgdGhlIGVuZAorICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgIHVfbG9uZyB0dGwsIHJlY19yZXN1bHQgPSBuc19ycl90dGwocnIpOworCisgICAgICAgICAgICAvLyBmaW5kIHRoZSBNSU5JTVVNLVRUTCBmaWVsZCBmcm9tIHRoZSBibG9iIG9mIGJpbmFyeSBkYXRhIGZvciB0aGlzIHJlY29yZAorICAgICAgICAgICAgLy8gc2tpcCB0aGUgc2VydmVyIG5hbWUKKyAgICAgICAgICAgIGxlbiA9IGRuX3NraXBuYW1lKHJkYXRhLCBlZGF0YSk7CisgICAgICAgICAgICBpZiAobGVuID09IC0xKSBjb250aW51ZTsgLy8gZXJyb3Igc2tpcHBpbmcKKyAgICAgICAgICAgIHJkYXRhICs9IGxlbjsKKworICAgICAgICAgICAgLy8gc2tpcCB0aGUgYWRtaW4gbmFtZQorICAgICAgICAgICAgbGVuID0gZG5fc2tpcG5hbWUocmRhdGEsIGVkYXRhKTsKKyAgICAgICAgICAgIGlmIChsZW4gPT0gLTEpIGNvbnRpbnVlOyAvLyBlcnJvciBza2lwcGluZworICAgICAgICAgICAgcmRhdGEgKz0gbGVuOworCisgICAgICAgICAgICBpZiAoZWRhdGEgLSByZGF0YSAhPSA1Kk5TX0lOVDMyU1opIGNvbnRpbnVlOworICAgICAgICAgICAgLy8gc2tpcDogc2VyaWFsIG51bWJlciArIHJlZnJlc2ggaW50ZXJ2YWwgKyByZXRyeSBpbnRlcnZhbCArIGV4cGlyeQorICAgICAgICAgICAgcmRhdGEgKz0gTlNfSU5UMzJTWiAqIDQ7CisgICAgICAgICAgICAvLyBmaW5hbGx5IHJlYWQgdGhlIE1JTklNVU0gVFRMCisgICAgICAgICAgICB0dGwgPSBuc19nZXQzMihyZGF0YSk7CisgICAgICAgICAgICBpZiAodHRsIDwgcmVjX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIHJlY19yZXN1bHQgPSB0dGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBOb3cgdGhhdCB0aGUgcmVjb3JkIGlzIHJlYWQgc3VjY2Vzc2Z1bGx5LCBhcHBseSB0aGUgbmV3IG1pbiBUVEwKKyAgICAgICAgICAgIGlmIChuID09IDAgfHwgcmVjX3Jlc3VsdCA8IHJlc3VsdCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlY19yZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBQYXJzZSB0aGUgYW5zd2VyIHJlY29yZHMgYW5kIGZpbmQgdGhlIGFwcHJvcHJpYXRlCisgKiBzbWFsbGVzdCBUVEwgYW1vbmcgdGhlIHJlY29yZHMuICBUaGlzIG1pZ2h0IGJlIGZyb20KKyAqIHRoZSBhbnN3ZXIgcmVjb3JkcyBpZiBmb3VuZCBvciBmcm9tIHRoZSBTT0EgcmVjb3JkCisgKiBpZiBpdCdzIGEgbmVnYXRpdmUgcmVzdWx0LgorICoKKyAqIFRoZSByZXR1cm5lZCBUVEwgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvCisgKiBrZWVwIHRoZSBhbnN3ZXIgaW4gdGhlIGNhY2hlLgorICoKKyAqIEluIGNhc2Ugb2YgcGFyc2UgZXJyb3IgemVybyAoMCkgaXMgcmV0dXJuZWQgd2hpY2gKKyAqIGluZGljYXRlcyB0aGF0IHRoZSBhbnN3ZXIgc2hhbGwgbm90IGJlIGNhY2hlZC4KKyAqLworc3RhdGljIHVfbG9uZworYW5zd2VyX2dldFRUTChjb25zdCB2b2lkKiBhbnN3ZXIsIGludCBhbnN3ZXJsZW4pCit7CisgICAgbnNfbXNnIGhhbmRsZTsKKyAgICBpbnQgYW5jb3VudCwgbjsKKyAgICB1X2xvbmcgcmVzdWx0LCB0dGw7CisgICAgbnNfcnIgcnI7CisKKyAgICByZXN1bHQgPSAwOworICAgIGlmIChuc19pbml0cGFyc2UoYW5zd2VyLCBhbnN3ZXJsZW4sICZoYW5kbGUpID49IDApIHsKKyAgICAgICAgLy8gZ2V0IG51bWJlciBvZiBhbnN3ZXIgcmVjb3JkcworICAgICAgICBhbmNvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19hbik7CisKKyAgICAgICAgaWYgKGFuY291bnQgPT0gMCkgeworICAgICAgICAgICAgLy8gYSByZXNwb25zZSB3aXRoIG5vIGFuc3dlcnM/ICBDYWNoZSB0aGlzIG5lZ2F0aXZlIHJlc3VsdC4KKyAgICAgICAgICAgIHJlc3VsdCA9IGFuc3dlcl9nZXROZWdhdGl2ZVRUTChoYW5kbGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IGFuY291bnQ7IG4rKykgeworICAgICAgICAgICAgICAgIGlmIChuc19wYXJzZXJyKCZoYW5kbGUsIG5zX3NfYW4sIG4sICZycikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0dGwgPSBuc19ycl90dGwocnIpOworICAgICAgICAgICAgICAgICAgICBpZiAobiA9PSAwIHx8IHR0bCA8IHJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHRsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgWExPRygibnNfcGFyc2VyciBmYWlsZWQgYW5jb3VudCBubyA9ICVkLiBlcnJubyA9ICVzXG4iLCBuLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFhMT0coIm5zX3BhcnNlcnIgZmFpbGVkLiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisKKyAgICBYTE9HKCJUVEwgPSAlZFxuIiwgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitlbnRyeV9mcmVlKCBFbnRyeSogIGUgKQoreworICAgIC8qIGV2ZXJ5dGhpbmcgaXMgYWxsb2NhdGVkIGluIGEgc2luZ2xlIG1lbW9yeSBibG9jayAqLworICAgIGlmIChlKSB7CisgICAgICAgIGZyZWUoZSk7CisgICAgfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitlbnRyeV9tcnVfcmVtb3ZlKCBFbnRyeSogIGUgKQoreworICAgIGUtPm1ydV9wcmV2LT5tcnVfbmV4dCA9IGUtPm1ydV9uZXh0OworICAgIGUtPm1ydV9uZXh0LT5tcnVfcHJldiA9IGUtPm1ydV9wcmV2OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitlbnRyeV9tcnVfYWRkKCBFbnRyeSogIGUsIEVudHJ5KiAgbGlzdCApCit7CisgICAgRW50cnkqICBmaXJzdCA9IGxpc3QtPm1ydV9uZXh0OworCisgICAgZS0+bXJ1X25leHQgPSBmaXJzdDsKKyAgICBlLT5tcnVfcHJldiA9IGxpc3Q7CisKKyAgICBsaXN0LT5tcnVfbmV4dCAgPSBlOworICAgIGZpcnN0LT5tcnVfcHJldiA9IGU7Cit9CisKKy8qIGNvbXB1dGUgdGhlIGhhc2ggb2YgYSBnaXZlbiBlbnRyeSwgdGhpcyBpcyBhIGhhc2ggb2YgbW9zdAorICogZGF0YSBpbiB0aGUgcXVlcnkgKGtleSkgKi8KK3N0YXRpYyB1bnNpZ25lZAorZW50cnlfaGFzaCggY29uc3QgRW50cnkqICBlICkKK3sKKyAgICBEbnNQYWNrZXQgIHBhY2tbMV07CisKKyAgICBfZG5zUGFja2V0X2luaXQocGFjaywgZS0+cXVlcnksIGUtPnF1ZXJ5bGVuKTsKKyAgICByZXR1cm4gX2Ruc1BhY2tldF9oYXNoUXVlcnkocGFjayk7Cit9CisKKy8qIGluaXRpYWxpemUgYW4gRW50cnkgYXMgYSBzZWFyY2gga2V5LCB0aGlzIGFsc28gY2hlY2tzIHRoZSBpbnB1dCBxdWVyeSBwYWNrZXQKKyAqIHJldHVybnMgMSBvbiBzdWNjZXNzLCBvciAwIGluIGNhc2Ugb2YgdW5zdXBwb3J0ZWQvbWFsZm9ybWVkIGRhdGEgKi8KK3N0YXRpYyBpbnQKK2VudHJ5X2luaXRfa2V5KCBFbnRyeSogIGUsIGNvbnN0IHZvaWQqICBxdWVyeSwgaW50ICBxdWVyeWxlbiApCit7CisgICAgRG5zUGFja2V0ICBwYWNrWzFdOworCisgICAgbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCisgICAgZS0+cXVlcnkgICAgPSBxdWVyeTsKKyAgICBlLT5xdWVyeWxlbiA9IHF1ZXJ5bGVuOworICAgIGUtPmhhc2ggICAgID0gZW50cnlfaGFzaChlKTsKKworICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrLCBxdWVyeSwgcXVlcnlsZW4pOworCisgICAgcmV0dXJuIF9kbnNQYWNrZXRfY2hlY2tRdWVyeShwYWNrKTsKK30KKworLyogYWxsb2NhdGUgYSBuZXcgZW50cnkgYXMgYSBjYWNoZSBub2RlICovCitzdGF0aWMgRW50cnkqCitlbnRyeV9hbGxvYyggY29uc3QgRW50cnkqICBpbml0LCBjb25zdCB2b2lkKiAgYW5zd2VyLCBpbnQgIGFuc3dlcmxlbiApCit7CisgICAgRW50cnkqICBlOworICAgIGludCAgICAgc2l6ZTsKKworICAgIHNpemUgPSBzaXplb2YoKmUpICsgaW5pdC0+cXVlcnlsZW4gKyBhbnN3ZXJsZW47CisgICAgZSAgICA9IGNhbGxvYyhzaXplLCAxKTsKKyAgICBpZiAoZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gZTsKKworICAgIGUtPmhhc2ggICAgID0gaW5pdC0+aGFzaDsKKyAgICBlLT5xdWVyeSAgICA9IChjb25zdCB1aW50OF90KikoZSsxKTsKKyAgICBlLT5xdWVyeWxlbiA9IGluaXQtPnF1ZXJ5bGVuOworCisgICAgbWVtY3B5KCAoY2hhciopZS0+cXVlcnksIGluaXQtPnF1ZXJ5LCBlLT5xdWVyeWxlbiApOworCisgICAgZS0+YW5zd2VyICAgID0gZS0+cXVlcnkgKyBlLT5xdWVyeWxlbjsKKyAgICBlLT5hbnN3ZXJsZW4gPSBhbnN3ZXJsZW47CisKKyAgICBtZW1jcHkoIChjaGFyKillLT5hbnN3ZXIsIGFuc3dlciwgZS0+YW5zd2VybGVuICk7CisKKyAgICByZXR1cm4gZTsKK30KKworc3RhdGljIGludAorZW50cnlfZXF1YWxzKCBjb25zdCBFbnRyeSogIGUxLCBjb25zdCBFbnRyeSogIGUyICkKK3sKKyAgICBEbnNQYWNrZXQgIHBhY2sxWzFdLCBwYWNrMlsxXTsKKworICAgIGlmIChlMS0+cXVlcnlsZW4gIT0gZTItPnF1ZXJ5bGVuKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBfZG5zUGFja2V0X2luaXQocGFjazEsIGUxLT5xdWVyeSwgZTEtPnF1ZXJ5bGVuKTsKKyAgICBfZG5zUGFja2V0X2luaXQocGFjazIsIGUyLT5xdWVyeSwgZTItPnF1ZXJ5bGVuKTsKKworICAgIHJldHVybiBfZG5zUGFja2V0X2lzRXF1YWxRdWVyeShwYWNrMSwgcGFjazIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogV2UgdXNlIGEgc2ltcGxlIGhhc2ggdGFibGUgd2l0aCBleHRlcm5hbCBjb2xsaXNpb24gbGlzdHMKKyAqIGZvciBzaW1wbGljaXR5LCB0aGUgaGFzaC10YWJsZSBmaWVsZHMgJ2hhc2gnIGFuZCAnaGxpbmsnIGFyZQorICogaW5saW5lZCBpbiB0aGUgRW50cnkgc3RydWN0dXJlLgorICovCisKKy8qIE1heGltdW0gdGltZSBmb3IgYSB0aHJlYWQgdG8gd2FpdCBmb3IgYW4gcGVuZGluZyByZXF1ZXN0ICovCisjZGVmaW5lIFBFTkRJTkdfUkVRVUVTVF9USU1FT1VUIDIwOworCit0eXBlZGVmIHN0cnVjdCBwZW5kaW5nX3JlcV9pbmZvIHsKKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgaGFzaDsKKyAgICBwdGhyZWFkX2NvbmRfdCAgICAgICAgICAgICAgY29uZDsKKyAgICBzdHJ1Y3QgcGVuZGluZ19yZXFfaW5mbyogICAgbmV4dDsKK30gUGVuZGluZ1JlcUluZm87CisKK3R5cGVkZWYgc3RydWN0IHJlc29sdl9jYWNoZSB7CisgICAgaW50ICAgICAgICAgICAgICBtYXhfZW50cmllczsKKyAgICBpbnQgICAgICAgICAgICAgIG51bV9lbnRyaWVzOworICAgIEVudHJ5ICAgICAgICAgICAgbXJ1X2xpc3Q7CisgICAgaW50ICAgICAgICAgICAgICBsYXN0X2lkOworICAgIEVudHJ5KiAgICAgICAgICAgZW50cmllczsKKyAgICBQZW5kaW5nUmVxSW5mbyAgIHBlbmRpbmdfcmVxdWVzdHM7Cit9IENhY2hlOworCitzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8geworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICBuZXRpZDsKKyAgICBDYWNoZSogICAgICAgICAgICAgICAgICAgICAgY2FjaGU7CisgICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiAgIG5leHQ7CisgICAgY2hhciogICAgICAgICAgICAgICAgICAgICAgIG5hbWVzZXJ2ZXJzW01BWE5TICsxXTsKKyAgICBzdHJ1Y3QgYWRkcmluZm8qICAgICAgICAgICAgbnNhZGRyaW5mb1tNQVhOUyArIDFdOworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBkZWZkbmFtZVsyNTZdOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBkbnNyY2hfb2Zmc2V0W01BWEROU1JDSCsxXTsgIC8vIG9mZnNldHMgaW50byBkZWZkbmFtZQorfTsKKworI2RlZmluZSAgSFRBQkxFX1ZBTElEKHgpICAoKHgpICE9IE5VTEwgJiYgKHgpICE9IEhUQUJMRV9ERUxFVEVEKQorCitzdGF0aWMgcHRocmVhZF9vbmNlX3QgICAgICAgIF9yZXNfY2FjaGVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworc3RhdGljIHZvaWQgX3Jlc19jYWNoZV9pbml0KHZvaWQpOworCisvLyBsb2NrIHByb3RlY3RpbmcgZXZlcnl0aGluZyBpbiB0aGUgX3Jlc29sdmVfY2FjaGVfaW5mbyBzdHJ1Y3RzIChuZXh0IHB0ciwgZXRjKQorc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBfcmVzX2NhY2hlX2xpc3RfbG9jazsKKworLyogZ2V0cyBjYWNoZSBhc3NvY2lhdGVkIHdpdGggYSBuZXR3b3JrLCBvciBOVUxMIGlmIG5vbmUgZXhpc3RzICovCitzdGF0aWMgc3RydWN0IHJlc29sdl9jYWNoZSogX2ZpbmRfbmFtZWRfY2FjaGVfbG9ja2VkKHVuc2lnbmVkIG5ldGlkKTsKKworc3RhdGljIHZvaWQKK19jYWNoZV9mbHVzaF9wZW5kaW5nX3JlcXVlc3RzX2xvY2tlZCggc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUgKQoreworICAgIHN0cnVjdCBwZW5kaW5nX3JlcV9pbmZvICpyaSwgKnRtcDsKKyAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgcmkgPSBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0OworCisgICAgICAgIHdoaWxlIChyaSkgeworICAgICAgICAgICAgdG1wID0gcmk7CisgICAgICAgICAgICByaSA9IHJpLT5uZXh0OworICAgICAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmdG1wLT5jb25kKTsKKworICAgICAgICAgICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJnRtcC0+Y29uZCk7CisgICAgICAgICAgICBmcmVlKHRtcCk7CisgICAgICAgIH0KKworICAgICAgICBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0ID0gTlVMTDsKKyAgICB9Cit9CisKKy8qIFJldHVybiAwIGlmIG5vIHBlbmRpbmcgcmVxdWVzdCBpcyBmb3VuZCBtYXRjaGluZyB0aGUga2V5LgorICogSWYgYSBtYXRjaGluZyByZXF1ZXN0IGlzIGZvdW5kIHRoZSBjYWxsaW5nIHRocmVhZCB3aWxsIHdhaXQgdW50aWwKKyAqIHRoZSBtYXRjaGluZyByZXF1ZXN0IGNvbXBsZXRlcywgdGhlbiB1cGRhdGUgKmNhY2hlIGFuZCByZXR1cm4gMS4gKi8KK3N0YXRpYyBpbnQKK19jYWNoZV9jaGVja19wZW5kaW5nX3JlcXVlc3RfbG9ja2VkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiogY2FjaGUsIEVudHJ5KiBrZXksIHVuc2lnbmVkIG5ldGlkICkKK3sKKyAgICBzdHJ1Y3QgcGVuZGluZ19yZXFfaW5mbyAqcmksICpwcmV2OworICAgIGludCBleGlzdCA9IDA7CisKKyAgICBpZiAoKmNhY2hlICYmIGtleSkgeworICAgICAgICByaSA9ICgqY2FjaGUpLT5wZW5kaW5nX3JlcXVlc3RzLm5leHQ7CisgICAgICAgIHByZXYgPSAmKCpjYWNoZSktPnBlbmRpbmdfcmVxdWVzdHM7CisgICAgICAgIHdoaWxlIChyaSkgeworICAgICAgICAgICAgaWYgKHJpLT5oYXNoID09IGtleS0+aGFzaCkgeworICAgICAgICAgICAgICAgIGV4aXN0ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByZXYgPSByaTsKKyAgICAgICAgICAgIHJpID0gcmktPm5leHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWV4aXN0KSB7CisgICAgICAgICAgICByaSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBlbmRpbmdfcmVxX2luZm8pKTsKKyAgICAgICAgICAgIGlmIChyaSkgeworICAgICAgICAgICAgICAgIHJpLT5oYXNoID0ga2V5LT5oYXNoOworICAgICAgICAgICAgICAgIHB0aHJlYWRfY29uZF9pbml0KCZyaS0+Y29uZCwgTlVMTCk7CisgICAgICAgICAgICAgICAgcHJldi0+bmV4dCA9IHJpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzID0gezAsMH07CisgICAgICAgICAgICBYTE9HKCJXYWl0aW5nIGZvciBwcmV2aW91cyByZXF1ZXN0Iik7CisgICAgICAgICAgICB0cy50dl9zZWMgPSBfdGltZV9ub3coKSArIFBFTkRJTkdfUkVRVUVTVF9USU1FT1VUOworICAgICAgICAgICAgcHRocmVhZF9jb25kX3RpbWVkd2FpdCgmcmktPmNvbmQsICZfcmVzX2NhY2hlX2xpc3RfbG9jaywgJnRzKTsKKyAgICAgICAgICAgIC8qIE11c3QgdXBkYXRlICpjYWNoZSBhcyBpdCBjb3VsZCBoYXZlIGJlZW4gZGVsZXRlZC4gKi8KKyAgICAgICAgICAgICpjYWNoZSA9IF9maW5kX25hbWVkX2NhY2hlX2xvY2tlZChuZXRpZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZXhpc3Q7Cit9CisKKy8qIG5vdGlmeSBhbnkgd2FpdGluZyB0aHJlYWQgdGhhdCB3YWl0aW5nIG9uIGEgcmVxdWVzdAorICogbWF0Y2hpbmcgdGhlIGtleSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgY2FjaGUgKi8KK3N0YXRpYyB2b2lkCitfY2FjaGVfbm90aWZ5X3dhaXRpbmdfdGlkX2xvY2tlZCggc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUsIEVudHJ5KiBrZXkgKQoreworICAgIHN0cnVjdCBwZW5kaW5nX3JlcV9pbmZvICpyaSwgKnByZXY7CisKKyAgICBpZiAoY2FjaGUgJiYga2V5KSB7CisgICAgICAgIHJpID0gY2FjaGUtPnBlbmRpbmdfcmVxdWVzdHMubmV4dDsKKyAgICAgICAgcHJldiA9ICZjYWNoZS0+cGVuZGluZ19yZXF1ZXN0czsKKyAgICAgICAgd2hpbGUgKHJpKSB7CisgICAgICAgICAgICBpZiAocmktPmhhc2ggPT0ga2V5LT5oYXNoKSB7CisgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmcmktPmNvbmQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJldiA9IHJpOworICAgICAgICAgICAgcmkgPSByaS0+bmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJlbW92ZSBpdGVtIGZyb20gbGlzdCBhbmQgZGVzdHJveQorICAgICAgICBpZiAocmkpIHsKKyAgICAgICAgICAgIHByZXYtPm5leHQgPSByaS0+bmV4dDsKKyAgICAgICAgICAgIHB0aHJlYWRfY29uZF9kZXN0cm95KCZyaS0+Y29uZCk7CisgICAgICAgICAgICBmcmVlKHJpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogbm90aWZ5IHRoZSBjYWNoZSB0aGF0IHRoZSBxdWVyeSBmYWlsZWQgKi8KK3ZvaWQKK19yZXNvbHZfY2FjaGVfcXVlcnlfZmFpbGVkKCB1bnNpZ25lZCAgICBuZXRpZCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBxdWVyeWxlbikKK3sKKyAgICBFbnRyeSAgICBrZXlbMV07CisgICAgQ2FjaGUqICAgY2FjaGU7CisKKyAgICBpZiAoIWVudHJ5X2luaXRfa2V5KGtleSwgcXVlcnksIHF1ZXJ5bGVuKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CisKKyAgICBjYWNoZSA9IF9maW5kX25hbWVkX2NhY2hlX2xvY2tlZChuZXRpZCk7CisKKyAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgX2NhY2hlX25vdGlmeV93YWl0aW5nX3RpZF9sb2NrZWQoY2FjaGUsIGtleSk7CisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQKK19jYWNoZV9mbHVzaF9sb2NrZWQoIENhY2hlKiAgY2FjaGUgKQoreworICAgIGludCAgICAgbm47CisKKyAgICBmb3IgKG5uID0gMDsgbm4gPCBjYWNoZS0+bWF4X2VudHJpZXM7IG5uKyspCisgICAgeworICAgICAgICBFbnRyeSoqICBwbm9kZSA9IChFbnRyeSoqKSAmY2FjaGUtPmVudHJpZXNbbm5dOworCisgICAgICAgIHdoaWxlICgqcG5vZGUgIT0gTlVMTCkgeworICAgICAgICAgICAgRW50cnkqICBub2RlID0gKnBub2RlOworICAgICAgICAgICAgKnBub2RlID0gbm9kZS0+aGxpbms7CisgICAgICAgICAgICBlbnRyeV9mcmVlKG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZmx1c2ggcGVuZGluZyByZXF1ZXN0CisgICAgX2NhY2hlX2ZsdXNoX3BlbmRpbmdfcmVxdWVzdHNfbG9ja2VkKGNhY2hlKTsKKworICAgIGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dCA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfcHJldiA9ICZjYWNoZS0+bXJ1X2xpc3Q7CisgICAgY2FjaGUtPm51bV9lbnRyaWVzICAgICAgID0gMDsKKyAgICBjYWNoZS0+bGFzdF9pZCAgICAgICAgICAgPSAwOworCisgICAgWExPRygiKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAgICAgICAgIioqKiBETlMgQ0FDSEUgRkxVU0hFRCAqKipcbiIKKyAgICAgICAgICIqKioqKioqKioqKioqKioqKioqKioqKioqIik7Cit9CisKK3N0YXRpYyBpbnQKK19yZXNfY2FjaGVfZ2V0X21heF9lbnRyaWVzKCB2b2lkICkKK3sKKyAgICBpbnQgY2FjaGVfc2l6ZSA9IENPTkZJR19NQVhfRU5UUklFUzsKKworICAgIGNvbnN0IGNoYXIqIGNhY2hlX21vZGUgPSBnZXRlbnYoIkFORFJPSURfRE5TX01PREUiKTsKKyAgICBpZiAoY2FjaGVfbW9kZSA9PSBOVUxMIHx8IHN0cmNtcChjYWNoZV9tb2RlLCAibG9jYWwiKSAhPSAwKSB7CisgICAgICAgIC8vIERvbid0IHVzZSB0aGUgY2FjaGUgaW4gbG9jYWwgbW9kZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBwcm94eSBpdHNlbGYuCisgICAgICAgIGNhY2hlX3NpemUgPSAwOworICAgIH0KKworICAgIFhMT0coImNhY2hlIHNpemU6ICVkIiwgY2FjaGVfc2l6ZSk7CisgICAgcmV0dXJuIGNhY2hlX3NpemU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlKgorX3Jlc29sdl9jYWNoZV9jcmVhdGUoIHZvaWQgKQoreworICAgIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZTsKKworICAgIGNhY2hlID0gY2FsbG9jKHNpemVvZigqY2FjaGUpLCAxKTsKKyAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgY2FjaGUtPm1heF9lbnRyaWVzID0gX3Jlc19jYWNoZV9nZXRfbWF4X2VudHJpZXMoKTsKKyAgICAgICAgY2FjaGUtPmVudHJpZXMgPSBjYWxsb2Moc2l6ZW9mKCpjYWNoZS0+ZW50cmllcyksIGNhY2hlLT5tYXhfZW50cmllcyk7CisgICAgICAgIGlmIChjYWNoZS0+ZW50cmllcykgeworICAgICAgICAgICAgY2FjaGUtPm1ydV9saXN0Lm1ydV9wcmV2ID0gY2FjaGUtPm1ydV9saXN0Lm1ydV9uZXh0ID0gJmNhY2hlLT5tcnVfbGlzdDsKKyAgICAgICAgICAgIFhMT0coIiVzOiBjYWNoZSBjcmVhdGVkXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZnJlZShjYWNoZSk7CisgICAgICAgICAgICBjYWNoZSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNhY2hlOworfQorCisKKyNpZiBERUJVRworc3RhdGljIHZvaWQKK19kdW1wX3F1ZXJ5KCBjb25zdCB1aW50OF90KiAgcXVlcnksIGludCAgcXVlcnlsZW4gKQoreworICAgIGNoYXIgICAgICAgdGVtcFsyNTZdLCAqcD10ZW1wLCAqZW5kPXArc2l6ZW9mKHRlbXApOworICAgIERuc1BhY2tldCAgcGFja1sxXTsKKworICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrLCBxdWVyeSwgcXVlcnlsZW4pOworICAgIHAgPSBfZG5zUGFja2V0X2JwcmludFF1ZXJ5KHBhY2ssIHAsIGVuZCk7CisgICAgWExPRygiUVVFUlk6ICVzIiwgdGVtcCk7Cit9CisKK3N0YXRpYyB2b2lkCitfY2FjaGVfZHVtcF9tcnUoIENhY2hlKiAgY2FjaGUgKQoreworICAgIGNoYXIgICAgdGVtcFs1MTJdLCAqcD10ZW1wLCAqZW5kPXArc2l6ZW9mKHRlbXApOworICAgIEVudHJ5KiAgZTsKKworICAgIHAgPSBfYnByaW50KHRlbXAsIGVuZCwgIk1SVSBMSVNUICglMmQpOiAiLCBjYWNoZS0+bnVtX2VudHJpZXMpOworICAgIGZvciAoZSA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dDsgZSAhPSAmY2FjaGUtPm1ydV9saXN0OyBlID0gZS0+bXJ1X25leHQpCisgICAgICAgIHAgPSBfYnByaW50KHAsIGVuZCwgIiAlZCIsIGUtPmlkKTsKKworICAgIFhMT0coIiVzIiwgdGVtcCk7Cit9CisKK3N0YXRpYyB2b2lkCitfZHVtcF9hbnN3ZXIoY29uc3Qgdm9pZCogYW5zd2VyLCBpbnQgYW5zd2VybGVuKQoreworICAgIHJlc19zdGF0ZSBzdGF0ZXA7CisgICAgRklMRSogZnA7CisgICAgY2hhciogYnVmOworICAgIGludCBmaWxlTGVuOworCisgICAgZnAgPSBmb3BlbigiL2RhdGEvcmVzbG9nLnR4dCIsICJ3KyIpOworICAgIGlmIChmcCAhPSBOVUxMKSB7CisgICAgICAgIHN0YXRlcCA9IF9fcmVzX2dldF9zdGF0ZSgpOworCisgICAgICAgIHJlc19wcXVlcnkoc3RhdGVwLCBhbnN3ZXIsIGFuc3dlcmxlbiwgZnApOworCisgICAgICAgIC8vR2V0IGZpbGUgbGVuZ3RoCisgICAgICAgIGZzZWVrKGZwLCAwLCBTRUVLX0VORCk7CisgICAgICAgIGZpbGVMZW49ZnRlbGwoZnApOworICAgICAgICBmc2VlayhmcCwgMCwgU0VFS19TRVQpOworICAgICAgICBidWYgPSAoY2hhciAqKW1hbGxvYyhmaWxlTGVuKzEpOworICAgICAgICBpZiAoYnVmICE9IE5VTEwpIHsKKyAgICAgICAgICAgIC8vUmVhZCBmaWxlIGNvbnRlbnRzIGludG8gYnVmZmVyCisgICAgICAgICAgICBmcmVhZChidWYsIGZpbGVMZW4sIDEsIGZwKTsKKyAgICAgICAgICAgIFhMT0coIiVzXG4iLCBidWYpOworICAgICAgICAgICAgZnJlZShidWYpOworICAgICAgICB9CisgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgIHJlbW92ZSgiL2RhdGEvcmVzbG9nLnR4dCIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZXJybm8gPSAwOyAvLyBlbHNlIGRlYnVnIGlzIGludHJvZHVjaW5nIGVycm9yIHNpZ25hbHMKKyAgICAgICAgWExPRygiJXM6IGNhbid0IG9wZW4gZmlsZVxuIiwgX19GVU5DVElPTl9fKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIERFQlVHCisjICBkZWZpbmUgIFhMT0dfUVVFUlkocSxsZW4pICAgX2R1bXBfcXVlcnkoKHEpLCAobGVuKSkKKyMgIGRlZmluZSAgWExPR19BTlNXRVIoYSwgbGVuKSBfZHVtcF9hbnN3ZXIoKGEpLCAobGVuKSkKKyNlbHNlCisjICBkZWZpbmUgIFhMT0dfUVVFUlkocSxsZW4pICAgKCh2b2lkKTApCisjICBkZWZpbmUgIFhMT0dfQU5TV0VSKGEsbGVuKSAgKCh2b2lkKTApCisjZW5kaWYKKworLyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBmaW5kIGEga2V5IHdpdGhpbiB0aGUgaGFzaCB0YWJsZQorICogSW4gY2FzZSBvZiBzdWNjZXNzLCBpdCB3aWxsIHJldHVybiBhICpwb2ludGVyKiB0byB0aGUgaGFzaGVkIGtleS4KKyAqIEluIGNhc2Ugb2YgZmFpbHVyZSwgaXQgd2lsbCByZXR1cm4gYSAqcG9pbnRlciogdG8gTlVMTAorICoKKyAqIFNvLCB0aGUgY2FsbGVyIG11c3QgY2hlY2sgJypyZXN1bHQnIHRvIGNoZWNrIGZvciBzdWNjZXNzL2ZhaWx1cmUuCisgKgorICogVGhlIG1haW4gaWRlYSBpcyB0aGF0IHRoZSByZXN1bHQgY2FuIGxhdGVyIGJlIHVzZWQgZGlyZWN0bHkgaW4KKyAqIGNhbGxzIHRvIF9yZXNvbHZfY2FjaGVfYWRkIG9yIF9yZXNvbHZfY2FjaGVfcmVtb3ZlIGFzIHRoZSAnbG9va3VwJworICogcGFyYW1ldGVyLiBUaGlzIG1ha2VzIHRoZSBjb2RlIHNpbXBsZXIgYW5kIGF2b2lkcyByZS1zZWFyY2hpbmcKKyAqIGZvciB0aGUga2V5IHBvc2l0aW9uIGluIHRoZSBodGFibGUuCisgKgorICogVGhlIHJlc3VsdCBvZiBhIGxvb2t1cF9wIGlzIG9ubHkgdmFsaWQgdW50aWwgeW91IGFsdGVyIHRoZSBoYXNoCisgKiB0YWJsZS4KKyAqLworc3RhdGljIEVudHJ5KioKK19jYWNoZV9sb29rdXBfcCggQ2FjaGUqICAgY2FjaGUsCisgICAgICAgICAgICAgICAgIEVudHJ5KiAgIGtleSApCit7CisgICAgaW50ICAgICAgaW5kZXggPSBrZXktPmhhc2ggJSBjYWNoZS0+bWF4X2VudHJpZXM7CisgICAgRW50cnkqKiAgcG5vZGUgPSAoRW50cnkqKikgJmNhY2hlLT5lbnRyaWVzWyBpbmRleCBdOworCisgICAgd2hpbGUgKCpwbm9kZSAhPSBOVUxMKSB7CisgICAgICAgIEVudHJ5KiAgbm9kZSA9ICpwbm9kZTsKKworICAgICAgICBpZiAobm9kZSA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKG5vZGUtPmhhc2ggPT0ga2V5LT5oYXNoICYmIGVudHJ5X2VxdWFscyhub2RlLCBrZXkpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcG5vZGUgPSAmbm9kZS0+aGxpbms7CisgICAgfQorICAgIHJldHVybiBwbm9kZTsKK30KKworLyogQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBoYXNoIHRhYmxlLiAnbG9va3VwJyBtdXN0IGJlIHRoZQorICogcmVzdWx0IG9mIGFuIGltbWVkaWF0ZSBwcmV2aW91cyBmYWlsZWQgX2xvb2t1cF9wKCkgY2FsbAorICogKGkuZS4gd2l0aCAqbG9va3VwID09IE5VTEwpLCBhbmQgJ2UnIGlzIHRoZSBwb2ludGVyIHRvIHRoZQorICogbmV3bHkgY3JlYXRlZCBlbnRyeQorICovCitzdGF0aWMgdm9pZAorX2NhY2hlX2FkZF9wKCBDYWNoZSogICBjYWNoZSwKKyAgICAgICAgICAgICAgRW50cnkqKiAgbG9va3VwLAorICAgICAgICAgICAgICBFbnRyeSogICBlICkKK3sKKyAgICAqbG9va3VwID0gZTsKKyAgICBlLT5pZCA9ICsrY2FjaGUtPmxhc3RfaWQ7CisgICAgZW50cnlfbXJ1X2FkZChlLCAmY2FjaGUtPm1ydV9saXN0KTsKKyAgICBjYWNoZS0+bnVtX2VudHJpZXMgKz0gMTsKKworICAgIFhMT0coIiVzOiBlbnRyeSAlZCBhZGRlZCAoY291bnQ9JWQpIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgZS0+aWQsIGNhY2hlLT5udW1fZW50cmllcyk7Cit9CisKKy8qIFJlbW92ZSBhbiBleGlzdGluZyBlbnRyeSBmcm9tIHRoZSBoYXNoIHRhYmxlLAorICogJ2xvb2t1cCcgbXVzdCBiZSB0aGUgcmVzdWx0IG9mIGFuIGltbWVkaWF0ZSBwcmV2aW91cworICogYW5kIHN1Y2Nlc2Z1bCBfbG9va3VwX3AoKSBjYWxsLgorICovCitzdGF0aWMgdm9pZAorX2NhY2hlX3JlbW92ZV9wKCBDYWNoZSogICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgRW50cnkqKiAgbG9va3VwICkKK3sKKyAgICBFbnRyeSogIGUgID0gKmxvb2t1cDsKKworICAgIFhMT0coIiVzOiBlbnRyeSAlZCByZW1vdmVkIChjb3VudD0lZCkiLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICBlLT5pZCwgY2FjaGUtPm51bV9lbnRyaWVzLTEpOworCisgICAgZW50cnlfbXJ1X3JlbW92ZShlKTsKKyAgICAqbG9va3VwID0gZS0+aGxpbms7CisgICAgZW50cnlfZnJlZShlKTsKKyAgICBjYWNoZS0+bnVtX2VudHJpZXMgLT0gMTsKK30KKworLyogUmVtb3ZlIHRoZSBvbGRlc3QgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZS4KKyAqLworc3RhdGljIHZvaWQKK19jYWNoZV9yZW1vdmVfb2xkZXN0KCBDYWNoZSogIGNhY2hlICkKK3sKKyAgICBFbnRyeSogICBvbGRlc3QgPSBjYWNoZS0+bXJ1X2xpc3QubXJ1X3ByZXY7CisgICAgRW50cnkqKiAgbG9va3VwID0gX2NhY2hlX2xvb2t1cF9wKGNhY2hlLCBvbGRlc3QpOworCisgICAgaWYgKCpsb29rdXAgPT0gTlVMTCkgeyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworICAgICAgICBYTE9HKCIlczogT0xERVNUIE5PVCBJTiBIVEFCTEUgPyIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKERFQlVHKSB7CisgICAgICAgIFhMT0coIkNhY2hlIGZ1bGwgLSByZW1vdmluZyBvbGRlc3QiKTsKKyAgICAgICAgWExPR19RVUVSWShvbGRlc3QtPnF1ZXJ5LCBvbGRlc3QtPnF1ZXJ5bGVuKTsKKyAgICB9CisgICAgX2NhY2hlX3JlbW92ZV9wKGNhY2hlLCBsb29rdXApOworfQorCisvKiBSZW1vdmUgYWxsIGV4cGlyZWQgZW50cmllcyBmcm9tIHRoZSBoYXNoIHRhYmxlLgorICovCitzdGF0aWMgdm9pZCBfY2FjaGVfcmVtb3ZlX2V4cGlyZWQoQ2FjaGUqIGNhY2hlKSB7CisgICAgRW50cnkqIGU7CisgICAgdGltZV90IG5vdyA9IF90aW1lX25vdygpOworCisgICAgZm9yIChlID0gY2FjaGUtPm1ydV9saXN0Lm1ydV9uZXh0OyBlICE9ICZjYWNoZS0+bXJ1X2xpc3Q7KSB7CisgICAgICAgIC8vIEVudHJ5IGlzIG9sZCwgcmVtb3ZlCisgICAgICAgIGlmIChub3cgPj0gZS0+ZXhwaXJlcykgeworICAgICAgICAgICAgRW50cnkqKiBsb29rdXAgPSBfY2FjaGVfbG9va3VwX3AoY2FjaGUsIGUpOworICAgICAgICAgICAgaWYgKCpsb29rdXAgPT0gTlVMTCkgeyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworICAgICAgICAgICAgICAgIFhMT0coIiVzOiBFTlRSWSBOT1QgSU4gSFRBQkxFID8iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGUgPSBlLT5tcnVfbmV4dDsKKyAgICAgICAgICAgIF9jYWNoZV9yZW1vdmVfcChjYWNoZSwgbG9va3VwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGUgPSBlLT5tcnVfbmV4dDsKKyAgICAgICAgfQorICAgIH0KK30KKworUmVzb2x2Q2FjaGVTdGF0dXMKK19yZXNvbHZfY2FjaGVfbG9va3VwKCB1bnNpZ25lZCAgICAgICAgICAgICAgbmV0aWQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgIHF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBxdWVyeWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgYW5zd2VyLAorICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBhbnN3ZXJzaXplLAorICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICphbnN3ZXJsZW4gKQoreworICAgIEVudHJ5ICAgICAga2V5WzFdOworICAgIEVudHJ5KiogICAgbG9va3VwOworICAgIEVudHJ5KiAgICAgZTsKKyAgICB0aW1lX3QgICAgIG5vdzsKKyAgICBDYWNoZSogICAgIGNhY2hlOworCisgICAgUmVzb2x2Q2FjaGVTdGF0dXMgIHJlc3VsdCA9IFJFU09MVl9DQUNIRV9OT1RGT1VORDsKKworICAgIFhMT0coIiVzOiBsb29rdXAiLCBfX0ZVTkNUSU9OX18pOworICAgIFhMT0dfUVVFUlkocXVlcnksIHF1ZXJ5bGVuKTsKKworICAgIC8qIHdlIGRvbid0IGNhY2hlIG1hbGZvcm1lZCBxdWVyaWVzICovCisgICAgaWYgKCFlbnRyeV9pbml0X2tleShrZXksIHF1ZXJ5LCBxdWVyeWxlbikpIHsKKyAgICAgICAgWExPRygiJXM6IHVuc3VwcG9ydGVkIHF1ZXJ5IiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuIFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRDsKKyAgICB9CisgICAgLyogbG9va3VwIGNhY2hlICovCisgICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CisKKyAgICBjYWNoZSA9IF9maW5kX25hbWVkX2NhY2hlX2xvY2tlZChuZXRpZCk7CisgICAgaWYgKGNhY2hlID09IE5VTEwpIHsKKyAgICAgICAgcmVzdWx0ID0gUkVTT0xWX0NBQ0hFX1VOU1VQUE9SVEVEOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBfbG9va3VwX3AgdG8gdW5kZXJzdGFuZCB0aGlzLgorICAgICAqIHRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJuIGEgbm9uLU5VTEwgcG9pbnRlci4KKyAgICAgKi8KKyAgICBsb29rdXAgPSBfY2FjaGVfbG9va3VwX3AoY2FjaGUsIGtleSk7CisgICAgZSAgICAgID0gKmxvb2t1cDsKKworICAgIGlmIChlID09IE5VTEwpIHsKKyAgICAgICAgWExPRyggIk5PVCBJTiBDQUNIRSIpOworICAgICAgICAvLyBjYWxsaW5nIHRocmVhZCB3aWxsIHdhaXQgaWYgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdCBpcyBmb3VuZAorICAgICAgICAvLyB0aGF0IG1hdGNoaW5nIHRoaXMgcXVlcnkKKyAgICAgICAgaWYgKCFfY2FjaGVfY2hlY2tfcGVuZGluZ19yZXF1ZXN0X2xvY2tlZCgmY2FjaGUsIGtleSwgbmV0aWQpIHx8IGNhY2hlID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvb2t1cCA9IF9jYWNoZV9sb29rdXBfcChjYWNoZSwga2V5KTsKKyAgICAgICAgICAgIGUgPSAqbG9va3VwOworICAgICAgICAgICAgaWYgKGUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG5vdyA9IF90aW1lX25vdygpOworCisgICAgLyogcmVtb3ZlIHN0YWxlIGVudHJpZXMgaGVyZSAqLworICAgIGlmIChub3cgPj0gZS0+ZXhwaXJlcykgeworICAgICAgICBYTE9HKCAiIE5PVCBJTiBDQUNIRSAoU1RBTEUgRU5UUlkgJXAgRElTQ0FSREVEKSIsICpsb29rdXAgKTsKKyAgICAgICAgWExPR19RVUVSWShlLT5xdWVyeSwgZS0+cXVlcnlsZW4pOworICAgICAgICBfY2FjaGVfcmVtb3ZlX3AoY2FjaGUsIGxvb2t1cCk7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAqYW5zd2VybGVuID0gZS0+YW5zd2VybGVuOworICAgIGlmIChlLT5hbnN3ZXJsZW4gPiBhbnN3ZXJzaXplKSB7CisgICAgICAgIC8qIE5PVEU6IHdlIHJldHVybiBVTlNVUFBPUlRFRCBpZiB0aGUgYW5zd2VyIGJ1ZmZlciBpcyB0b28gc2hvcnQgKi8KKyAgICAgICAgcmVzdWx0ID0gUkVTT0xWX0NBQ0hFX1VOU1VQUE9SVEVEOworICAgICAgICBYTE9HKCIgQU5TV0VSIFRPTyBMT05HIik7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBtZW1jcHkoIGFuc3dlciwgZS0+YW5zd2VyLCBlLT5hbnN3ZXJsZW4gKTsKKworICAgIC8qIGJ1bXAgdXAgdGhpcyBlbnRyeSB0byB0aGUgdG9wIG9mIHRoZSBNUlUgbGlzdCAqLworICAgIGlmIChlICE9IGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dCkgeworICAgICAgICBlbnRyeV9tcnVfcmVtb3ZlKCBlICk7CisgICAgICAgIGVudHJ5X21ydV9hZGQoIGUsICZjYWNoZS0+bXJ1X2xpc3QgKTsKKyAgICB9CisKKyAgICBYTE9HKCAiRk9VTkQgSU4gQ0FDSEUgZW50cnk9JXAiLCBlICk7CisgICAgcmVzdWx0ID0gUkVTT0xWX0NBQ0hFX0ZPVU5EOworCitFeGl0OgorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCit2b2lkCitfcmVzb2x2X2NhY2hlX2FkZCggdW5zaWduZWQgICAgICAgICAgICAgIG5ldGlkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICAgICAgICAgICBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgcXVlcnlsZW4sCisgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgIGFuc3dlciwKKyAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgYW5zd2VybGVuICkKK3sKKyAgICBFbnRyeSAgICBrZXlbMV07CisgICAgRW50cnkqICAgZTsKKyAgICBFbnRyeSoqICBsb29rdXA7CisgICAgdV9sb25nICAgdHRsOworICAgIENhY2hlKiAgIGNhY2hlID0gTlVMTDsKKworICAgIC8qIGRvbid0IGFzc3VtZSB0aGF0IHRoZSBxdWVyeSBoYXMgYWxyZWFkeSBiZWVuIGNhY2hlZAorICAgICAqLworICAgIGlmICghZW50cnlfaW5pdF9rZXkoIGtleSwgcXVlcnksIHF1ZXJ5bGVuICkpIHsKKyAgICAgICAgWExPRyggIiVzOiBwYXNzZWQgaW52YWxpZCBxdWVyeSA/IiwgX19GVU5DVElPTl9fKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOworCisgICAgY2FjaGUgPSBfZmluZF9uYW1lZF9jYWNoZV9sb2NrZWQobmV0aWQpOworICAgIGlmIChjYWNoZSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBYTE9HKCAiJXM6IHF1ZXJ5OiIsIF9fRlVOQ1RJT05fXyApOworICAgIFhMT0dfUVVFUlkocXVlcnkscXVlcnlsZW4pOworICAgIFhMT0dfQU5TV0VSKGFuc3dlciwgYW5zd2VybGVuKTsKKyNpZiBERUJVR19EQVRBCisgICAgWExPRyggImFuc3dlcjoiKTsKKyAgICBYTE9HX0JZVEVTKGFuc3dlcixhbnN3ZXJsZW4pOworI2VuZGlmCisKKyAgICBsb29rdXAgPSBfY2FjaGVfbG9va3VwX3AoY2FjaGUsIGtleSk7CisgICAgZSAgICAgID0gKmxvb2t1cDsKKworICAgIGlmIChlICE9IE5VTEwpIHsgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKyAgICAgICAgWExPRygiJXM6IEFMUkVBRFkgSU4gQ0FDSEUgKCVwKSA/IElHTk9SSU5HIEFERCIsCisgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBlKTsKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmIChjYWNoZS0+bnVtX2VudHJpZXMgPj0gY2FjaGUtPm1heF9lbnRyaWVzKSB7CisgICAgICAgIF9jYWNoZV9yZW1vdmVfZXhwaXJlZChjYWNoZSk7CisgICAgICAgIGlmIChjYWNoZS0+bnVtX2VudHJpZXMgPj0gY2FjaGUtPm1heF9lbnRyaWVzKSB7CisgICAgICAgICAgICBfY2FjaGVfcmVtb3ZlX29sZGVzdChjYWNoZSk7CisgICAgICAgIH0KKyAgICAgICAgLyogbmVlZCB0byBsb29rdXAgYWdhaW4gKi8KKyAgICAgICAgbG9va3VwID0gX2NhY2hlX2xvb2t1cF9wKGNhY2hlLCBrZXkpOworICAgICAgICBlICAgICAgPSAqbG9va3VwOworICAgICAgICBpZiAoZSAhPSBOVUxMKSB7CisgICAgICAgICAgICBYTE9HKCIlczogQUxSRUFEWSBJTiBDQUNIRSAoJXApID8gSUdOT1JJTkcgQUREIiwKKyAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGUpOworICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisgICAgfQorCisgICAgdHRsID0gYW5zd2VyX2dldFRUTChhbnN3ZXIsIGFuc3dlcmxlbik7CisgICAgaWYgKHR0bCA+IDApIHsKKyAgICAgICAgZSA9IGVudHJ5X2FsbG9jKGtleSwgYW5zd2VyLCBhbnN3ZXJsZW4pOworICAgICAgICBpZiAoZSAhPSBOVUxMKSB7CisgICAgICAgICAgICBlLT5leHBpcmVzID0gdHRsICsgX3RpbWVfbm93KCk7CisgICAgICAgICAgICBfY2FjaGVfYWRkX3AoY2FjaGUsIGxvb2t1cCwgZSk7CisgICAgICAgIH0KKyAgICB9CisjaWYgREVCVUcKKyAgICBfY2FjaGVfZHVtcF9tcnUoY2FjaGUpOworI2VuZGlmCitFeGl0OgorICAgIGlmIChjYWNoZSAhPSBOVUxMKSB7CisgICAgICBfY2FjaGVfbm90aWZ5X3dhaXRpbmdfdGlkX2xvY2tlZChjYWNoZSwga2V5KTsKKyAgICB9CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIEhlYWQgb2YgdGhlIGxpc3Qgb2YgY2FjaGVzLiAgUHJvdGVjdGVkIGJ5IF9yZXNfY2FjaGVfbGlzdF9sb2NrLgorc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyBfcmVzX2NhY2hlX2xpc3Q7CisKKy8qIGluc2VydCByZXNvbHZfY2FjaGVfaW5mbyBpbnRvIHRoZSBsaXN0IG9mIHJlc29sdl9jYWNoZV9pbmZvcyAqLworc3RhdGljIHZvaWQgX2luc2VydF9jYWNoZV9pbmZvX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8pOworLyogY3JlYXRlcyBhIHJlc29sdl9jYWNoZV9pbmZvICovCitzdGF0aWMgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBfY3JlYXRlX2NhY2hlX2luZm8oIHZvaWQgKTsKKy8qIGdldHMgYSByZXNvbHZfY2FjaGVfaW5mbyBhc3NvY2lhdGVkIHdpdGggYSBuZXR3b3JrLCBvciBOVUxMIGlmIG5vdCBmb3VuZCAqLworc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQodW5zaWduZWQgbmV0aWQpOworLyogbG9vayB1cCB0aGUgbmFtZWQgY2FjaGUsIGFuZCBjcmVhdGVzIG9uZSBpZiBuZWVkZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBfZ2V0X3Jlc19jYWNoZV9mb3JfbmV0X2xvY2tlZCh1bnNpZ25lZCBuZXRpZCk7CisvKiBlbXB0eSB0aGUgbmFtZWQgY2FjaGUgKi8KK3N0YXRpYyB2b2lkIF9mbHVzaF9jYWNoZV9mb3JfbmV0X2xvY2tlZCh1bnNpZ25lZCBuZXRpZCk7CisvKiBlbXB0eSB0aGUgbmFtZXNlcnZlcnMgc2V0IGZvciB0aGUgbmFtZWQgY2FjaGUgKi8KK3N0YXRpYyB2b2lkIF9mcmVlX25hbWVzZXJ2ZXJzX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8pOworLyogcmV0dXJuIDEgaWYgdGhlIHByb3ZpZGVkIGxpc3Qgb2YgbmFtZSBzZXJ2ZXJzIGRpZmZlcnMgZnJvbSB0aGUgbGlzdCBvZiBuYW1lIHNlcnZlcnMKKyAqIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGUgcHJvdmlkZWQgY2FjaGVfaW5mbyAqLworc3RhdGljIGludCBfcmVzb2x2X2lzX25hbWVzZXJ2ZXJzX2VxdWFsX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8sCisgICAgICAgIGNvbnN0IGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycyk7CisKK3N0YXRpYyB2b2lkCitfcmVzX2NhY2hlX2luaXQodm9pZCkKK3sKKyAgICBjb25zdCBjaGFyKiAgZW52ID0gZ2V0ZW52KENPTkZJR19FTlYpOworCisgICAgaWYgKGVudiAmJiBhdG9pKGVudikgPT0gMCkgeworICAgICAgICAvKiB0aGUgY2FjaGUgaXMgZGlzYWJsZWQgKi8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1lbXNldCgmX3Jlc19jYWNoZV9saXN0LCAwLCBzaXplb2YoX3Jlc19jYWNoZV9saXN0KSk7CisgICAgcHRocmVhZF9tdXRleF9pbml0KCZfcmVzX2NhY2hlX2xpc3RfbG9jaywgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlKgorX2dldF9yZXNfY2FjaGVfZm9yX25ldF9sb2NrZWQodW5zaWduZWQgbmV0aWQpCit7CisgICAgc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUgPSBfZmluZF9uYW1lZF9jYWNoZV9sb2NrZWQobmV0aWQpOworICAgIGlmICghY2FjaGUpIHsKKyAgICAgICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvID0gX2NyZWF0ZV9jYWNoZV9pbmZvKCk7CisgICAgICAgIGlmIChjYWNoZV9pbmZvKSB7CisgICAgICAgICAgICBjYWNoZSA9IF9yZXNvbHZfY2FjaGVfY3JlYXRlKCk7CisgICAgICAgICAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgICAgICAgICBjYWNoZV9pbmZvLT5jYWNoZSA9IGNhY2hlOworICAgICAgICAgICAgICAgIGNhY2hlX2luZm8tPm5ldGlkID0gbmV0aWQ7CisgICAgICAgICAgICAgICAgX2luc2VydF9jYWNoZV9pbmZvX2xvY2tlZChjYWNoZV9pbmZvKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZnJlZShjYWNoZV9pbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY2FjaGU7Cit9CisKK3ZvaWQKK19yZXNvbHZfZmx1c2hfY2FjaGVfZm9yX25ldCh1bnNpZ25lZCBuZXRpZCkKK3sKKyAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKKworICAgIF9mbHVzaF9jYWNoZV9mb3JfbmV0X2xvY2tlZChuZXRpZCk7CisKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOworfQorCitzdGF0aWMgdm9pZAorX2ZsdXNoX2NhY2hlX2Zvcl9uZXRfbG9ja2VkKHVuc2lnbmVkIG5ldGlkKQoreworICAgIHN0cnVjdCByZXNvbHZfY2FjaGUqIGNhY2hlID0gX2ZpbmRfbmFtZWRfY2FjaGVfbG9ja2VkKG5ldGlkKTsKKyAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgX2NhY2hlX2ZsdXNoX2xvY2tlZChjYWNoZSk7CisgICAgfQorfQorCit2b2lkIF9yZXNvbHZfZGVsZXRlX2NhY2hlX2Zvcl9uZXQodW5zaWduZWQgbmV0aWQpCit7CisgICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CisKKyAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIHByZXZfY2FjaGVfaW5mbyA9ICZfcmVzX2NhY2hlX2xpc3Q7CisKKyAgICB3aGlsZSAocHJldl9jYWNoZV9pbmZvLT5uZXh0KSB7CisgICAgICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbyA9IHByZXZfY2FjaGVfaW5mby0+bmV4dDsKKworICAgICAgICBpZiAoY2FjaGVfaW5mby0+bmV0aWQgPT0gbmV0aWQpIHsKKyAgICAgICAgICAgIHByZXZfY2FjaGVfaW5mby0+bmV4dCA9IGNhY2hlX2luZm8tPm5leHQ7CisgICAgICAgICAgICBfY2FjaGVfZmx1c2hfbG9ja2VkKGNhY2hlX2luZm8tPmNhY2hlKTsKKyAgICAgICAgICAgIGZyZWUoY2FjaGVfaW5mby0+Y2FjaGUtPmVudHJpZXMpOworICAgICAgICAgICAgZnJlZShjYWNoZV9pbmZvLT5jYWNoZSk7CisgICAgICAgICAgICBfZnJlZV9uYW1lc2VydmVyc19sb2NrZWQoY2FjaGVfaW5mbyk7CisgICAgICAgICAgICBmcmVlKGNhY2hlX2luZm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwcmV2X2NhY2hlX2luZm8gPSBwcmV2X2NhY2hlX2luZm8tPm5leHQ7CisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyoKK19jcmVhdGVfY2FjaGVfaW5mbyh2b2lkKQoreworICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbzsKKworICAgIGNhY2hlX2luZm8gPSBjYWxsb2Moc2l6ZW9mKCpjYWNoZV9pbmZvKSwgMSk7CisgICAgcmV0dXJuIGNhY2hlX2luZm87Cit9CisKK3N0YXRpYyB2b2lkCitfaW5zZXJ0X2NhY2hlX2luZm9fbG9ja2VkKHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbykKK3sKKyAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGxhc3Q7CisKKyAgICBmb3IgKGxhc3QgPSAmX3Jlc19jYWNoZV9saXN0OyBsYXN0LT5uZXh0OyBsYXN0ID0gbGFzdC0+bmV4dCk7CisKKyAgICBsYXN0LT5uZXh0ID0gY2FjaGVfaW5mbzsKKworfQorCitzdGF0aWMgc3RydWN0IHJlc29sdl9jYWNoZSoKK19maW5kX25hbWVkX2NhY2hlX2xvY2tlZCh1bnNpZ25lZCBuZXRpZCkgeworCisgICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBpbmZvID0gX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQobmV0aWQpOworCisgICAgaWYgKGluZm8gIT0gTlVMTCkgcmV0dXJuIGluZm8tPmNhY2hlOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qCitfZmluZF9jYWNoZV9pbmZvX2xvY2tlZCh1bnNpZ25lZCBuZXRpZCkKK3sKKyAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8gPSBfcmVzX2NhY2hlX2xpc3QubmV4dDsKKworICAgIHdoaWxlIChjYWNoZV9pbmZvKSB7CisgICAgICAgIGlmIChjYWNoZV9pbmZvLT5uZXRpZCA9PSBuZXRpZCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYWNoZV9pbmZvID0gY2FjaGVfaW5mby0+bmV4dDsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hlX2luZm87Cit9CisKK3ZvaWQKK19yZXNvbHZfc2V0X25hbWVzZXJ2ZXJzX2Zvcl9uZXQodW5zaWduZWQgbmV0aWQsIGNvbnN0IGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycywKKyAgICAgICAgY29uc3QgY2hhciAqZG9tYWlucykKK3sKKyAgICBpbnQgaSwgcnQsIGluZGV4OworICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50czsKKyAgICBjaGFyIHNidWZbTklfTUFYU0VSVl07CisgICAgcmVnaXN0ZXIgY2hhciAqY3A7CisgICAgaW50ICpvZmZzZXQ7CisKKyAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKKworICAgIC8vIGNyZWF0ZXMgdGhlIGNhY2hlIGlmIG5vdCBjcmVhdGVkCisgICAgX2dldF9yZXNfY2FjaGVfZm9yX25ldF9sb2NrZWQobmV0aWQpOworCisgICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvID0gX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQobmV0aWQpOworCisgICAgaWYgKGNhY2hlX2luZm8gIT0gTlVMTCAmJgorICAgICAgICAgICAgIV9yZXNvbHZfaXNfbmFtZXNlcnZlcnNfZXF1YWxfbG9ja2VkKGNhY2hlX2luZm8sIHNlcnZlcnMsIG51bXNlcnZlcnMpKSB7CisgICAgICAgIC8vIGZyZWUgY3VycmVudCBiZWZvcmUgYWRkaW5nIG5ldworICAgICAgICBfZnJlZV9uYW1lc2VydmVyc19sb2NrZWQoY2FjaGVfaW5mbyk7CisKKyAgICAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisgICAgICAgIGhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKKyAgICAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOyAvKmR1bW15Ki8KKyAgICAgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKKyAgICAgICAgc3ByaW50ZihzYnVmLCAiJXUiLCBOQU1FU0VSVkVSX1BPUlQpOworCisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bXNlcnZlcnMgJiYgaSA8IE1BWE5TOyBpKyspIHsKKyAgICAgICAgICAgIHJ0ID0gZ2V0YWRkcmluZm8oc2VydmVyc1tpXSwgc2J1ZiwgJmhpbnRzLCAmY2FjaGVfaW5mby0+bnNhZGRyaW5mb1tpbmRleF0pOworICAgICAgICAgICAgaWYgKHJ0ID09IDApIHsKKyAgICAgICAgICAgICAgICBjYWNoZV9pbmZvLT5uYW1lc2VydmVyc1tpbmRleF0gPSBzdHJkdXAoc2VydmVyc1tpXSk7CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgICAgICBYTE9HKCIlczogbmV0aWQgPSAldSwgYWRkciA9ICVzXG4iLCBfX0ZVTkNUSU9OX18sIG5ldGlkLCBzZXJ2ZXJzW2ldKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2FjaGVfaW5mby0+bnNhZGRyaW5mb1tpbmRleF0gPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gY29kZSBtb3ZlZCBmcm9tIHJlc19pbml0LmMsIGxvYWRfZG9tYWluX3NlYXJjaF9saXN0CisgICAgICAgIHN0cmxjcHkoY2FjaGVfaW5mby0+ZGVmZG5hbWUsIGRvbWFpbnMsIHNpemVvZihjYWNoZV9pbmZvLT5kZWZkbmFtZSkpOworICAgICAgICBpZiAoKGNwID0gc3RyY2hyKGNhY2hlX2luZm8tPmRlZmRuYW1lLCAnXG4nKSkgIT0gTlVMTCkKKyAgICAgICAgICAgICpjcCA9ICdcMCc7CisgICAgICAgIGNwID0gY2FjaGVfaW5mby0+ZGVmZG5hbWU7CisgICAgICAgIG9mZnNldCA9IGNhY2hlX2luZm8tPmRuc3JjaF9vZmZzZXQ7CisgICAgICAgIHdoaWxlIChvZmZzZXQgPCBjYWNoZV9pbmZvLT5kbnNyY2hfb2Zmc2V0ICsgTUFYRE5TUkNIKSB7CisgICAgICAgICAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykgLyogc2tpcCBsZWFkaW5nIHdoaXRlIHNwYWNlICovCisgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgIGlmICgqY3AgPT0gJ1wwJykgLyogc3RvcCBpZiBub3RoaW5nIG1vcmUgdG8gZG8gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICpvZmZzZXQrKyA9IGNwIC0gY2FjaGVfaW5mby0+ZGVmZG5hbWU7IC8qIHJlY29yZCB0aGlzIHNlYXJjaCBkb21haW4gKi8KKyAgICAgICAgICAgIHdoaWxlICgqY3ApIHsgLyogemVyby10ZXJtaW5hdGUgaXQgKi8KKyAgICAgICAgICAgICAgICBpZiAoKmNwID09ICcgJ3x8ICpjcCA9PSAnXHQnKSB7CisgICAgICAgICAgICAgICAgICAgICpjcCsrID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNwKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKm9mZnNldCA9IC0xOyAvKiBjYWNoZV9pbmZvLT5kbnNyY2hfb2Zmc2V0IGhhcyBNQVhETlNSQ0grMSBpdGVtcyAqLworCisgICAgICAgIC8vIGZsdXNoIGNhY2hlIHNpbmNlIG5ldyBzZXR0aW5ncworICAgICAgICBfZmx1c2hfY2FjaGVfZm9yX25ldF9sb2NrZWQobmV0aWQpOworCisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKK30KKworc3RhdGljIGludAorX3Jlc29sdl9pc19uYW1lc2VydmVyc19lcXVhbF9sb2NrZWQoc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvLAorICAgICAgICBjb25zdCBjaGFyKiogc2VydmVycywgaW50IG51bXNlcnZlcnMpCit7CisgICAgaW50IGk7CisgICAgY2hhcioqIG5zOworICAgIGludCBjdXJyZW50c2VydmVyczsKKyAgICBpbnQgZXF1YWwgPSAxOworCisgICAgaWYgKG51bXNlcnZlcnMgPiBNQVhOUykgbnVtc2VydmVycyA9IE1BWE5TOworCisgICAgLy8gRmluZCBvdXQgaG93IG1hbnkgbmFtZXNlcnZlcnMgd2UgaGFkIGJlZm9yZS4KKyAgICBjdXJyZW50c2VydmVycyA9IDA7CisgICAgZm9yIChucyA9IGNhY2hlX2luZm8tPm5hbWVzZXJ2ZXJzOyAqbnM7IG5zKyspCisgICAgICAgIGN1cnJlbnRzZXJ2ZXJzKys7CisKKyAgICBpZiAoY3VycmVudHNlcnZlcnMgIT0gbnVtc2VydmVycykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBDb21wYXJlIGVhY2ggbmFtZSBzZXJ2ZXIgYWdhaW5zdCBjdXJyZW50IG5hbWUgc2VydmVycy4KKyAgICAvLyBUT0RPOiB0aGlzIGlzIGluY29ycmVjdCBpZiB0aGUgbGlzdCBvZiBjdXJyZW50IG9yIHByZXZpb3VzIG5hbWVzZXJ2ZXJzCisgICAgLy8gY29udGFpbnMgZHVwbGljYXRlcy4gVGhpcyBkb2VzIG5vdCByZWFsbHkgbWF0dGVyIGJlY2F1c2UgdGhlIGZyYW1ld29yaworICAgIC8vIGZpbHRlcnMgb3V0IGR1cGxpY2F0ZXMsIGJ1dCB3ZSBzaG91bGQgcHJvYmFibHkgZml4IGl0LiBJdCdzIGFsc28KKyAgICAvLyBpbnNlbnNpdGl2ZSB0byB0aGUgb3JkZXIgb2YgdGhlIG5hbWVzZXJ2ZXJzOyB3ZSBzaG91bGQgcHJvYmFibHkgZml4IHRoYXQKKyAgICAvLyB0b28uCisgICAgZm9yIChpID0gMDsgaSA8IG51bXNlcnZlcnMgJiYgZXF1YWw7IGkrKykgeworICAgICAgICBucyA9IGNhY2hlX2luZm8tPm5hbWVzZXJ2ZXJzOworICAgICAgICBlcXVhbCA9IDA7CisgICAgICAgIHdoaWxlKCpucykgeworICAgICAgICAgICAgaWYgKHN0cmNtcCgqbnMsIHNlcnZlcnNbaV0pID09IDApIHsKKyAgICAgICAgICAgICAgICBlcXVhbCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBucysrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVxdWFsOworfQorCitzdGF0aWMgdm9pZAorX2ZyZWVfbmFtZXNlcnZlcnNfbG9ja2VkKHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbykKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IE1BWE5TOyBpKyspIHsKKyAgICAgICAgZnJlZShjYWNoZV9pbmZvLT5uYW1lc2VydmVyc1tpXSk7CisgICAgICAgIGNhY2hlX2luZm8tPm5hbWVzZXJ2ZXJzW2ldID0gTlVMTDsKKyAgICAgICAgaWYgKGNhY2hlX2luZm8tPm5zYWRkcmluZm9baV0gIT0gTlVMTCkgeworICAgICAgICAgICAgZnJlZWFkZHJpbmZvKGNhY2hlX2luZm8tPm5zYWRkcmluZm9baV0pOworICAgICAgICAgICAgY2FjaGVfaW5mby0+bnNhZGRyaW5mb1tpXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQKK19yZXNvbHZfcG9wdWxhdGVfcmVzX2Zvcl9uZXQocmVzX3N0YXRlIHN0YXRwKQoreworICAgIGlmIChzdGF0cCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKKworICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogaW5mbyA9IF9maW5kX2NhY2hlX2luZm9fbG9ja2VkKHN0YXRwLT5uZXRpZCk7CisgICAgaWYgKGluZm8gIT0gTlVMTCkgeworICAgICAgICBpbnQgbnNlcnY7CisgICAgICAgIHN0cnVjdCBhZGRyaW5mbyogYWk7CisgICAgICAgIFhMT0coIiVzOiAldVxuIiwgX19GVU5DVElPTl9fLCBzdGF0cC0+bmV0aWQpOworICAgICAgICBmb3IgKG5zZXJ2ID0gMDsgbnNlcnYgPCBNQVhOUzsgbnNlcnYrKykgeworICAgICAgICAgICAgYWkgPSBpbmZvLT5uc2FkZHJpbmZvW25zZXJ2XTsKKyAgICAgICAgICAgIGlmIChhaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoc2l6ZV90KSBhaS0+YWlfYWRkcmxlbiA8PSBzaXplb2Yoc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzWzBdKSkgeworICAgICAgICAgICAgICAgIGlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tuc2Vydl0sIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbik7CisgICAgICAgICAgICAgICAgICAgIHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0uc2luX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHNpemVfdCkgYWktPmFpX2FkZHJsZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PSBzaXplb2Yoc3RhdHAtPm5zYWRkcl9saXN0WzBdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLCBhaS0+YWlfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWktPmFpX2FkZHJsZW4pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XS5zaW5fZmFtaWx5ID0gQUZfVU5TUEVDOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBYTE9HKCIlczogZm91bmQgdG9vIGxvbmcgYWRkcmxlbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhdHAtPm5zY291bnQgPSBuc2VydjsKKyAgICAgICAgLy8gbm93IGRvIHNlYXJjaCBkb21haW5zLiAgTm90ZSB0aGF0IHdlIGNhY2hlIHRoZSBvZmZzZXRzIGFzIHRoaXMgY29kZSBydW5zIGFsb3QKKyAgICAgICAgLy8gYnV0IHRoZSBzZXR0aW5nL29mZnNldC1jb21wdXRlciBvbmx5IHJ1bnMgd2hlbiBzZXQvY2hhbmdlZAorICAgICAgICBzdHJsY3B5KHN0YXRwLT5kZWZkbmFtZSwgaW5mby0+ZGVmZG5hbWUsIHNpemVvZihzdGF0cC0+ZGVmZG5hbWUpKTsKKyAgICAgICAgcmVnaXN0ZXIgY2hhciAqKnBwID0gc3RhdHAtPmRuc3JjaDsKKyAgICAgICAgcmVnaXN0ZXIgaW50ICpwID0gaW5mby0+ZG5zcmNoX29mZnNldDsKKyAgICAgICAgd2hpbGUgKHBwIDwgc3RhdHAtPmRuc3JjaCArIE1BWEROU1JDSCAmJiAqcCAhPSAtMSkgeworICAgICAgICAgICAgKnBwKysgPSAmc3RhdHAtPmRlZmRuYW1lWzBdICsgKnArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvcmVzb2x2L3Jlc19jb21wLmMgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2NvbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODdiMjI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvcmVzb2x2L3Jlc19jb21wLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCSROZXRCU0Q6IHJlc19jb21wLmMsdiAxLjYgMjAwNC8wNS8yMiAyMzo0NzowOSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CisgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX2NvbXAuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2NvbXAuYyx2IDEuMS4yLjEuNC4xIDIwMDQvMDMvMDkgMDg6MzM6NTQgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfY29tcC5jLHYgMS42IDIwMDQvMDUvMjIgMjM6NDc6MDkgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyoKKyAqIEV4cGFuZCBjb21wcmVzc2VkIGRvbWFpbiBuYW1lICdzcmMnIHRvIGZ1bGwgZG9tYWluIG5hbWUuCisgKiAnbXNnJyBpcyBhIHBvaW50ZXIgdG8gdGhlIGJlZ2luaW5nIG9mIHRoZSBtZXNzYWdlLAorICogJ2VvbScgcG9pbnRzIHRvIHRoZSBmaXJzdCBsb2NhdGlvbiBhZnRlciB0aGUgbWVzc2FnZSwKKyAqICdkc3QnIGlzIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBvZiBzaXplICdkc3RzaXonIGZvciB0aGUgcmVzdWx0LgorICogUmV0dXJuIHNpemUgb2YgY29tcHJlc3NlZCBuYW1lIG9yIC0xIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKyAqLworaW50Citkbl9leHBhbmQoY29uc3QgdV9jaGFyICptc2csIGNvbnN0IHVfY2hhciAqZW9tLCBjb25zdCB1X2NoYXIgKnNyYywKKwkgIGNoYXIgKmRzdCwgaW50IGRzdHNpeikKK3sKKwlpbnQgbiA9IG5zX25hbWVfdW5jb21wcmVzcyhtc2csIGVvbSwgc3JjLCBkc3QsIChzaXplX3QpZHN0c2l6KTsKKworCWlmIChuID4gMCAmJiBkc3RbMF0gPT0gJy4nKQorCQlkc3RbMF0gPSAnXDAnOworCXJldHVybiAobik7Cit9CisKKy8qCisgKiBQYWNrIGRvbWFpbiBuYW1lICdleHBfZG4nIGluIHByZXNlbnRhdGlvbiBmb3JtIGludG8gJ2NvbXBfZG4nLgorICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIG5hbWUgb3IgLTEuCisgKiAnbGVuZ3RoJyBpcyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSAnY29tcF9kbicuCisgKi8KK2ludAorZG5fY29tcChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgZHN0c2l6LAorCXVfY2hhciAqKmRucHRycywgdV9jaGFyICoqbGFzdGRucHRyKQoreworCXJldHVybiAobnNfbmFtZV9jb21wcmVzcyhzcmMsIGRzdCwgKHNpemVfdClkc3RzaXosCisJCQkJIChjb25zdCB1X2NoYXIgKiopZG5wdHJzLAorCQkJCSAoY29uc3QgdV9jaGFyICoqKWxhc3RkbnB0cikpOworfQorCisvKgorICogU2tpcCBvdmVyIGEgY29tcHJlc3NlZCBkb21haW4gbmFtZS4gUmV0dXJuIHRoZSBzaXplIG9yIC0xLgorICovCitpbnQKK2RuX3NraXBuYW1lKGNvbnN0IHVfY2hhciAqcHRyLCBjb25zdCB1X2NoYXIgKmVvbSkgeworCWNvbnN0IHVfY2hhciAqc2F2ZXB0ciA9IHB0cjsKKworCWlmIChuc19uYW1lX3NraXAoJnB0ciwgZW9tKSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisJcmV0dXJuIChwdHIgLSBzYXZlcHRyKTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IGEgZG9tYWluIG5hbWUgdXNlcyBhbiBhY2NlcHRhYmxlIGNoYXJhY3RlciBzZXQuCisgKi8KKworLyoKKyAqIE5vdGUgdGhlIGNvbnNwaWN1b3VzIGFic2VuY2Ugb2YgY3R5cGUgbWFjcm9zIGluIHRoZXNlIGRlZmluaXRpb25zLiAgT24KKyAqIG5vbi1BU0NJSSBob3N0cywgd2UgY2FuJ3QgZGVwZW5kIG9uIHN0cmluZyBsaXRlcmFscyBvciBjdHlwZSBtYWNyb3MgdG8KKyAqIHRlbGwgdXMgYW55dGhpbmcgYWJvdXQgbmV0d29yay1mb3JtYXQgZGF0YS4gIFRoZSByZXN0IG9mIHRoZSBCSU5EIHN5c3RlbQorICogaXMgbm90IGNhcmVmdWwgYWJvdXQgdGhpcywgYnV0IGZvciBzb21lIHJlYXNvbiwgd2UncmUgZG9pbmcgaXQgcmlnaHQgaGVyZS4KKyAqLworCisvKiBCSU9OSUM6IFdlIGFsc28gYWNjZXB0IHVuZGVyc2NvcmVzIGluIHRoZSBtaWRkbGUgb2YgbGFiZWxzLgorICogICAgICAgICBUaGlzIGV4dGVuc2lvbiBpcyBuZWVkZWQgdG8gbWFrZSByZXNvbHV0aW9uIG9uIHNvbWUgVlBOIG5ldHdvcmtzCisgKiAgICAgICAgIHdvcmsgcHJvcGVybHkuCisgKi8KKworI2RlZmluZSBQRVJJT0QgMHgyZQorI2RlZmluZQloeXBoZW5jaGFyKGMpICgoYykgPT0gMHgyZCkKKyNkZWZpbmUgYnNsYXNoY2hhcihjKSAoKGMpID09IDB4NWMpCisjZGVmaW5lIHBlcmlvZGNoYXIoYykgKChjKSA9PSBQRVJJT0QpCisjZGVmaW5lIGFzdGVyY2hhcihjKSAoKGMpID09IDB4MmEpCisjZGVmaW5lIGFscGhhY2hhcihjKSAoKChjKSA+PSAweDQxICYmIChjKSA8PSAweDVhKSBcCisJCSAgIHx8ICgoYykgPj0gMHg2MSAmJiAoYykgPD0gMHg3YSkpCisjZGVmaW5lIGRpZ2l0Y2hhcihjKSAoKGMpID49IDB4MzAgJiYgKGMpIDw9IDB4MzkpCisjZGVmaW5lIHVuZGVyc2NvcmVjaGFyKGMpICAoKGMpID09IDB4NWYpCisKKyNkZWZpbmUgYm9yZGVyY2hhcihjKSAoYWxwaGFjaGFyKGMpIHx8IGRpZ2l0Y2hhcihjKSkKKyNkZWZpbmUgbWlkZGxlY2hhcihjKSAoYm9yZGVyY2hhcihjKSB8fCBoeXBoZW5jaGFyKGMpIHx8IHVuZGVyc2NvcmVjaGFyKGMpKQorI2RlZmluZQlkb21haW5jaGFyKGMpICgoYykgPiAweDIwICYmIChjKSA8IDB4N2YpCisKK2ludAorcmVzX2hub2soY29uc3QgY2hhciAqZG4pIHsKKwlpbnQgcGNoID0gUEVSSU9ELCBjaCA9ICpkbisrOworCisJd2hpbGUgKGNoICE9ICdcMCcpIHsKKwkJaW50IG5jaCA9ICpkbisrOworCisJCWlmIChwZXJpb2RjaGFyKGNoKSkgeworCQkJOworCQl9IGVsc2UgaWYgKHBlcmlvZGNoYXIocGNoKSkgeworCQkJaWYgKCFib3JkZXJjaGFyKGNoKSkKKwkJCQlyZXR1cm4gKDApOworCQl9IGVsc2UgaWYgKHBlcmlvZGNoYXIobmNoKSB8fCBuY2ggPT0gJ1wwJykgeworCQkJaWYgKCFib3JkZXJjaGFyKGNoKSkKKwkJCQlyZXR1cm4gKDApOworCQl9IGVsc2UgeworCQkJaWYgKCFtaWRkbGVjaGFyKGNoKSkKKwkJCQlyZXR1cm4gKDApOworCQl9CisJCXBjaCA9IGNoLCBjaCA9IG5jaDsKKwl9CisJcmV0dXJuICgxKTsKK30KKworLyoKKyAqIGhvc3RuYW1lLWxpa2UgKEEsIE1YLCBXS1MpIG93bmVycyBjYW4gaGF2ZSAiKiIgYXMgdGhlaXIgZmlyc3QgbGFiZWwKKyAqIGJ1dCBtdXN0IG90aGVyd2lzZSBiZSBhcyBhIGhvc3QgbmFtZS4KKyAqLworaW50CityZXNfb3dub2soY29uc3QgY2hhciAqZG4pIHsKKwlpZiAoYXN0ZXJjaGFyKGRuWzBdKSkgeworCQlpZiAocGVyaW9kY2hhcihkblsxXSkpCisJCQlyZXR1cm4gKHJlc19obm9rKGRuKzIpKTsKKwkJaWYgKGRuWzFdID09ICdcMCcpCisJCQlyZXR1cm4gKDEpOworCX0KKwlyZXR1cm4gKHJlc19obm9rKGRuKSk7Cit9CisKKy8qCisgKiBTT0EgUk5BTUVzIGFuZCBSUCBSTkFNRXMgY2FuIGhhdmUgYW55IHByaW50YWJsZSBjaGFyYWN0ZXIgaW4gdGhlaXIgZmlyc3QKKyAqIGxhYmVsLCBidXQgdGhlIHJlc3Qgb2YgdGhlIG5hbWUgaGFzIHRvIGxvb2sgbGlrZSBhIGhvc3QgbmFtZS4KKyAqLworaW50CityZXNfbWFpbG9rKGNvbnN0IGNoYXIgKmRuKSB7CisJaW50IGNoLCBlc2NhcGVkID0gMDsKKworCS8qICIuIiBpcyBhIHZhbGlkIG1pc3NpbmcgcmVwcmVzZW50YXRpb24gKi8KKwlpZiAoKmRuID09ICdcMCcpCisJCXJldHVybiAoMSk7CisKKwkvKiBvdGhlcndpc2UgPGxhYmVsPi48aG9zdG5hbWU+ICovCisJd2hpbGUgKChjaCA9ICpkbisrKSAhPSAnXDAnKSB7CisJCWlmICghZG9tYWluY2hhcihjaCkpCisJCQlyZXR1cm4gKDApOworCQlpZiAoIWVzY2FwZWQgJiYgcGVyaW9kY2hhcihjaCkpCisJCQlicmVhazsKKwkJaWYgKGVzY2FwZWQpCisJCQllc2NhcGVkID0gMDsKKwkJZWxzZSBpZiAoYnNsYXNoY2hhcihjaCkpCisJCQllc2NhcGVkID0gMTsKKwl9CisJaWYgKHBlcmlvZGNoYXIoY2gpKQorCQlyZXR1cm4gKHJlc19obm9rKGRuKSk7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcXVpdGUgbGliZXJhbCwgc2luY2UgUkZDIDEwMzQncyBjaGFyYWN0ZXIgc2V0cyBhcmUgb25seQorICogcmVjb21tZW5kYXRpb25zLgorICovCitpbnQKK3Jlc19kbm9rKGNvbnN0IGNoYXIgKmRuKSB7CisJaW50IGNoOworCisJd2hpbGUgKChjaCA9ICpkbisrKSAhPSAnXDAnKQorCQlpZiAoIWRvbWFpbmNoYXIoY2gpKQorCQkJcmV0dXJuICgwKTsKKwlyZXR1cm4gKDEpOworfQorCisjaWZkZWYgQklORF80X0NPTVBBVAorLyoKKyAqIFRoaXMgbW9kdWxlIG11c3QgZXhwb3J0IHRoZSBmb2xsb3dpbmcgZXh0ZXJuYWxseS12aXNpYmxlIHN5bWJvbHM6CisgKglfX19wdXRsb25nCisgKglfX19wdXRzaG9ydAorICoJX19nZXRsb25nCisgKglfX2dldHNob3J0CisgKiBOb3RlIHRoYXQgb25lIF8gY29tZXMgZnJvbSBDIGFuZCB0aGUgb3RoZXJzIGNvbWUgZnJvbSB1cy4KKyAqLwordm9pZCBfX3B1dGxvbmcodV9pbnQzMl90IHNyYywgdV9jaGFyICpkc3QpIHsgbnNfcHV0MzIoc3JjLCBkc3QpOyB9Cit2b2lkIF9fcHV0c2hvcnQodV9pbnQxNl90IHNyYywgdV9jaGFyICpkc3QpIHsgbnNfcHV0MTYoc3JjLCBkc3QpOyB9CisjaWZuZGVmIF9fdWx0cml4X18KK3VfaW50MzJfdCBfZ2V0bG9uZyhjb25zdCB1X2NoYXIgKnNyYykgeyByZXR1cm4gKG5zX2dldDMyKHNyYykpOyB9Cit1X2ludDE2X3QgX2dldHNob3J0KGNvbnN0IHVfY2hhciAqc3JjKSB7IHJldHVybiAobnNfZ2V0MTYoc3JjKSk7IH0KKyNlbmRpZiAvKl9fdWx0cml4X18qLworI2VuZGlmIC8qQklORF80X0NPTVBBVCovCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvcmVzX2RhdGEuYyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYzAyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2RhdGEuYwpAQCAtMCwwICsxLDMyNyBAQAorLyoJJE5ldEJTRDogcmVzX2RhdGEuYyx2IDEuOCAyMDA0LzA2LzA5IDE4OjA3OjAzIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NS0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiByZXNfZGF0YS5jLHYgMS4xLjIwNi4yIDIwMDQvMDMvMTYgMTI6MzQ6MTggbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfZGF0YS5jLHYgMS44IDIwMDQvMDYvMDkgMTg6MDc6MDMgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKworX19MSUJDX0hJRERFTl9fCitjb25zdCBjaGFyICogY29uc3QgX3Jlc19vcGNvZGVzW10gPSB7CisJIlFVRVJZIiwKKwkiSVFVRVJZIiwKKwkiQ1FVRVJZTSIsCisJIkNRVUVSWVUiLAkvKiBleHBlcmltZW50YWwgKi8KKwkiTk9USUZZIiwJLyogZXhwZXJpbWVudGFsICovCisJIlVQREFURSIsCisJIjYiLAorCSI3IiwKKwkiOCIsCisJIjkiLAorCSIxMCIsCisJIjExIiwKKwkiMTIiLAorCSIxMyIsCisJIlpPTkVJTklUIiwKKwkiWk9ORVJFRiIsCit9OworCisjaWZkZWYgQklORF9VUERBVEUKK2NvbnN0IGNoYXIgKiBjb25zdCBfcmVzX3NlY3Rpb25jb2Rlc1tdID0geworCSJaT05FIiwKKwkiUFJFUkVRVUlTSVRFUyIsCisJIlVQREFURSIsCisJIkFERElUSU9OQUwiLAorfTsKKyNlbmRpZgorCisjaWZuZGVmIF9fQklORF9OT1NUQVRJQworZXh0ZXJuIHN0cnVjdCBfX3Jlc19zdGF0ZSBfbnJlczsKKworLyogUHJvdG8uICovCisKK2ludCAgcmVzX291cnNlcnZlcl9wKGNvbnN0IHJlc19zdGF0ZSwgY29uc3Qgc3RydWN0IHNvY2thZGRyICopOworCisjZGVmaW5lIHJlc19uZWVkX2luaXQoKSAgICgoX25yZXMub3B0aW9ucyAmIFJFU19JTklUKSA9PSAwVSkKKworaW50CityZXNfaW5pdCh2b2lkKSB7CisJaW50IHJ2OworCWV4dGVybiBpbnQgX19yZXNfdmluaXQocmVzX3N0YXRlLCBpbnQpOworI2lmZGVmIENPTVBBVF9fUkVTCisJLyoKKwkgKiBDb21wYXRpYmlsaXR5IHdpdGggcHJvZ3JhbSB0aGF0IHdlcmUgYWNjZXNzaW5nIF9yZXMgZGlyZWN0bHkKKwkgKiB0byBzZXQgb3B0aW9ucy4gV2Uga2VlcCBhbm90aGVyIHN0cnVjdCByZXMgdGhhdCBpcyB0aGUgc2FtZQorCSAqIHNpemUgYXMgdGhlIG9yaWdpbmFsIHJlcyBzdHJ1Y3R1cmUsIGFuZCB0aGVuIGNvcHkgZmllbGRzIHRvCisJICogaXQgc28gdGhhdCB3ZSBhY2hpZXZlIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uCisJICovCisJZXh0ZXJuIHZvaWQgKl9fcmVzX2dldF9vbGRfc3RhdGUodm9pZCk7CisJZXh0ZXJuIHZvaWQgX19yZXNfcHV0X29sZF9zdGF0ZSh2b2lkICopOworCXJlc19zdGF0ZSBvcmVzID0gX19yZXNfZ2V0X29sZF9zdGF0ZSgpOworCisJaWYgKG9yZXMtPm9wdGlvbnMgIT0gMCkKKwkJX25yZXMub3B0aW9ucyA9IG9yZXMtPm9wdGlvbnM7CisJaWYgKG9yZXMtPnJldHJhbnMgIT0gMCkKKwkJX25yZXMucmV0cmFucyA9IG9yZXMtPnJldHJhbnM7CisJaWYgKG9yZXMtPnJldHJ5ICE9IDApCisJCV9ucmVzLnJldHJ5ID0gb3Jlcy0+cmV0cnk7CisjZW5kaWYKKworCS8qCisJICogVGhlc2UgdGhyZWUgZmllbGRzIHVzZWQgdG8gYmUgc3RhdGljYWxseSBpbml0aWFsaXplZC4gIFRoaXMgbWFkZQorCSAqIGl0IGhhcmQgdG8gdXNlIHRoaXMgY29kZSBpbiBhIHNoYXJlZCBsaWJyYXJ5LiAgSXQgaXMgbmVjZXNzYXJ5LAorCSAqIG5vdyB0aGF0IHdlJ3JlIGRvaW5nIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24gaGVyZSwgdGhhdCB3ZSBwcmVzZXJ2ZQorCSAqIHRoZSBvbGQgc2VtYW50aWNzOiBpZiBhbiBhcHBsaWNhdGlvbiBtb2RpZmllcyBvbmUgb2YgdGhlc2UgdGhyZWUKKwkgKiBmaWVsZHMgb2YgX3JlcyBiZWZvcmUgcmVzX2luaXQoKSBpcyBjYWxsZWQsIHJlc19pbml0KCkgd2lsbCBub3QKKwkgKiBhbHRlciB0aGVtLiAgT2YgY291cnNlLCBpZiBhbiBhcHBsaWNhdGlvbiBpcyBzZXR0aW5nIHRoZW0gdG8KKwkgKiBfemVyb18gYmVmb3JlIGNhbGxpbmcgcmVzX2luaXQoKSwgaG9waW5nIHRvIG92ZXJyaWRlIHdoYXQgdXNlZAorCSAqIHRvIGJlIHRoZSBzdGF0aWMgZGVmYXVsdCwgd2UgY2FuJ3QgZGV0ZWN0IGl0IGFuZCB1bmV4cGVjdGVkIHJlc3VsdHMKKwkgKiB3aWxsIGZvbGxvdy4gIFplcm8gZm9yIGFueSBvZiB0aGVzZSBmaWVsZHMgd291bGQgbWFrZSBubyBzZW5zZSwKKwkgKiBzbyBvbmUgY2FuIHNhZmVseSBhc3N1bWUgdGhhdCB0aGUgYXBwbGljYXRpb25zIHdlcmUgYWxyZWFkeSBnZXR0aW5nCisJICogdW5leHBlY3RlZCByZXN1bHRzLgorCSAqCisJICogX25yZXMub3B0aW9ucyBpcyB0cmlja3kgc2luY2Ugc29tZSBhcHBzIHdlcmUga25vd24gdG8gZGlkZGxlIHRoZSBiaXRzCisJICogYmVmb3JlIHJlc19pbml0KCkgd2FzIGZpcnN0IGNhbGxlZC4gV2UgY2FuJ3QgcmVwbGljYXRlIHRoYXQgc2VtYW50aWMKKwkgKiB3aXRoIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24gKHRoZXkgbWF5IGhhdmUgdHVybmVkIGJpdHMgb2ZmIHRoYXQgYXJlCisJICogc2V0IGluIFJFU19ERUZBVUxUKS4gIE91ciBzb2x1dGlvbiBpcyB0byBkZWNsYXJlIHN1Y2ggYXBwbGljYXRpb25zCisJICogImJyb2tlbiIuICBUaGV5IGNvdWxkIGZvb2wgdXMgYnkgc2V0dGluZyBSRVNfSU5JVCBidXQgbm9uZSBkbyAoeWV0KS4KKwkgKi8KKwlpZiAoIV9ucmVzLnJldHJhbnMpCisJCV9ucmVzLnJldHJhbnMgPSBSRVNfVElNRU9VVDsKKwlpZiAoIV9ucmVzLnJldHJ5KQorCQlfbnJlcy5yZXRyeSA9IDQ7CisJaWYgKCEoX25yZXMub3B0aW9ucyAmIFJFU19JTklUKSkKKwkJX25yZXMub3B0aW9ucyA9IFJFU19ERUZBVUxUOworCisJLyoKKwkgKiBUaGlzIG9uZSB1c2VkIHRvIGluaXRpYWxpemUgaW1wbGljaXRseSB0byB6ZXJvLCBzbyB1bmxlc3MgdGhlIGFwcAorCSAqIGhhcyBzZXQgaXQgdG8gc29tZXRoaW5nIGluIHBhcnRpY3VsYXIsIHdlIGNhbiByYW5kb21pemUgaXQgbm93LgorCSAqLworCWlmICghX25yZXMuaWQpCisJCV9ucmVzLmlkID0gcmVzX3JhbmRvbWlkKCk7CisKKwlydiA9IF9fcmVzX3Zpbml0KCZfbnJlcywgMSk7CisjaWZkZWYgQ09NUEFUX19SRVMKKwlfX3Jlc19wdXRfb2xkX3N0YXRlKCZfbnJlcyk7CisjZW5kaWYKKwlyZXR1cm4gcnY7Cit9CisKK3ZvaWQKK3BfcXVlcnkoY29uc3QgdV9jaGFyICptc2cpIHsKKwlmcF9xdWVyeShtc2csIHN0ZG91dCk7Cit9CisKK3ZvaWQKK2ZwX3F1ZXJ5KGNvbnN0IHVfY2hhciAqbXNnLCBGSUxFICpmaWxlKSB7CisJZnBfbnF1ZXJ5KG1zZywgUEFDS0VUU1osIGZpbGUpOworfQorCit2b2lkCitmcF9ucXVlcnkoY29uc3QgdV9jaGFyICptc2csIGludCBsZW4sIEZJTEUgKmZpbGUpIHsKKwlpZiAocmVzX25lZWRfaW5pdCgpICYmIHJlc19pbml0KCkgPT0gLTEpCisJCXJldHVybjsKKworCXJlc19wcXVlcnkoJl9ucmVzLCBtc2csIGxlbiwgZmlsZSk7Cit9CisKK2ludAorcmVzX21rcXVlcnkoaW50IG9wLAkJCS8qIG9wY29kZSBvZiBxdWVyeSAqLworCSAgICBjb25zdCBjaGFyICpkbmFtZSwJCS8qIGRvbWFpbiBuYW1lICovCisJICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgIGNvbnN0IHVfY2hhciAqZGF0YSwJCS8qIHJlc291cmNlIHJlY29yZCBkYXRhICovCisJICAgIGludCBkYXRhbGVuLAkJLyogbGVuZ3RoIG9mIGRhdGEgKi8KKwkgICAgY29uc3QgdV9jaGFyICpuZXdycl9pbiwJLyogbmV3IHJyIGZvciBtb2RpZnkgb3IgYXBwZW5kICovCisJICAgIHVfY2hhciAqYnVmLAkJLyogYnVmZmVyIHRvIHB1dCBxdWVyeSAqLworCSAgICBpbnQgYnVmbGVuKQkJCS8qIHNpemUgb2YgYnVmZmVyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAocmVzX25ta3F1ZXJ5KCZfbnJlcywgb3AsIGRuYW1lLCBjbGFzcywgdHlwZSwKKwkJCSAgICAgZGF0YSwgZGF0YWxlbiwKKwkJCSAgICAgbmV3cnJfaW4sIGJ1ZiwgYnVmbGVuKSk7Cit9CisKKyNpZmRlZiBfTElCUkVTT0xWCitpbnQKK3Jlc19ta3VwZGF0ZShuc191cGRyZWMgKnJyZWNwX2luLCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikgeworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAocmVzX25ta3VwZGF0ZSgmX25yZXMsIHJyZWNwX2luLCBidWYsIGJ1ZmxlbikpOworfQorI2VuZGlmCisKK2ludAorcmVzX3F1ZXJ5KGNvbnN0IGNoYXIgKm5hbWUsCS8qIGRvbWFpbiBuYW1lICovCisJICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLworCSAgdV9jaGFyICphbnN3ZXIsCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJICBpbnQgYW5zbGVuKQkJLyogc2l6ZSBvZiBhbnN3ZXIgYnVmZmVyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAocmVzX25xdWVyeSgmX25yZXMsIG5hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOworfQorCit2b2lkCityZXNfc2VuZF9zZXRxaG9vayhyZXNfc2VuZF9xaG9vayBob29rKSB7CisJX25yZXMucWhvb2sgPSBob29rOworfQorCit2b2lkCityZXNfc2VuZF9zZXRyaG9vayhyZXNfc2VuZF9yaG9vayBob29rKSB7CisJX25yZXMucmhvb2sgPSBob29rOworfQorCitpbnQKK3Jlc19pc291cnNlcnZlcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmlucCkgeworCXJldHVybiAocmVzX291cnNlcnZlcl9wKCZfbnJlcywgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKShjb25zdCB2b2lkICopaW5wKSk7Cit9CisKK2ludAorcmVzX3NlbmQoY29uc3QgdV9jaGFyICpidWYsIGludCBidWZsZW4sIHVfY2hhciAqYW5zLCBpbnQgYW5zc2l6KSB7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCS8qIGVycm5vIHNob3VsZCBoYXZlIGJlZW4gc2V0IGJ5IHJlc19pbml0KCkgaW4gdGhpcyBjYXNlLiAqLworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKHJlc19uc2VuZCgmX25yZXMsIGJ1ZiwgYnVmbGVuLCBhbnMsIGFuc3NpeikpOworfQorCisjaWZkZWYgX0xJQlJFU09MVgoraW50CityZXNfc2VuZHNpZ25lZChjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgbnNfdHNpZ19rZXkgKmtleSwKKwkgICAgICAgdV9jaGFyICphbnMsIGludCBhbnNzaXopCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCS8qIGVycm5vIHNob3VsZCBoYXZlIGJlZW4gc2V0IGJ5IHJlc19pbml0KCkgaW4gdGhpcyBjYXNlLiAqLworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKHJlc19uc2VuZHNpZ25lZCgmX25yZXMsIGJ1ZiwgYnVmbGVuLCBrZXksIGFucywgYW5zc2l6KSk7Cit9CisjZW5kaWYKKwordm9pZAorcmVzX2Nsb3NlKHZvaWQpIHsKKwlyZXNfbmNsb3NlKCZfbnJlcyk7Cit9CisKKyNpZmRlZiBfTElCUkVTT0xWCitpbnQKK3Jlc191cGRhdGUobnNfdXBkcmVjICpycmVjcF9pbikgeworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAocmVzX251cGRhdGUoJl9ucmVzLCBycmVjcF9pbiwgTlVMTCkpOworfQorI2VuZGlmCisKK2ludAorcmVzX3NlYXJjaChjb25zdCBjaGFyICpuYW1lLAkvKiBkb21haW4gbmFtZSAqLworCSAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgdV9jaGFyICphbnN3ZXIsCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuIChyZXNfbnNlYXJjaCgmX25yZXMsIG5hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOworfQorCitpbnQKK3Jlc19xdWVyeWRvbWFpbihjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCBjaGFyICpkb21haW4sCisJCWludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJCXVfY2hhciAqYW5zd2VyLAkJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KKwkJaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuIChyZXNfbnF1ZXJ5ZG9tYWluKCZfbnJlcywgbmFtZSwgZG9tYWluLAorCQkJCSBjbGFzcywgdHlwZSwKKwkJCQkgYW5zd2VyLCBhbnNsZW4pKTsKK30KKworaW50CityZXNfb3B0KGludCBhLCB1X2NoYXIgKmIsIGludCBjLCBpbnQgZCkKK3sKKwlyZXR1cm4gcmVzX25vcHQoJl9ucmVzLCBhLCBiLCBjLCBkKTsKK30KKworY29uc3QgY2hhciAqCitob3N0YWxpYXMoY29uc3QgY2hhciAqbmFtZSkgeworCXJldHVybiBOVUxMOworfQorCisjaWZkZWYgdWx0cml4CitpbnQKK2xvY2FsX2hvc3RuYW1lX2xlbmd0aChjb25zdCBjaGFyICpob3N0bmFtZSkgeworCWludCBsZW5faG9zdCwgbGVuX2RvbWFpbjsKKworCWlmICghKl9ucmVzLmRlZmRuYW1lKQorCQlyZXNfaW5pdCgpOworCWxlbl9ob3N0ID0gc3RybGVuKGhvc3RuYW1lKTsKKwlsZW5fZG9tYWluID0gc3RybGVuKF9ucmVzLmRlZmRuYW1lKTsKKwlpZiAobGVuX2hvc3QgPiBsZW5fZG9tYWluICYmCisJICAgICFzdHJjYXNlY21wKGhvc3RuYW1lICsgbGVuX2hvc3QgLSBsZW5fZG9tYWluLCBfbnJlcy5kZWZkbmFtZSkgJiYKKwkgICAgaG9zdG5hbWVbbGVuX2hvc3QgLSBsZW5fZG9tYWluIC0gMV0gPT0gJy4nKQorCQlyZXR1cm4gKGxlbl9ob3N0IC0gbGVuX2RvbWFpbiAtIDEpOworCXJldHVybiAoMCk7Cit9CisjZW5kaWYgLyp1bHRyaXgqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvZG5zL3Jlc29sdi9yZXNfZGVidWcuYyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTA1YTVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvcmVzb2x2L3Jlc19kZWJ1Zy5jCkBAIC0wLDAgKzEsMTIzMyBAQAorLyoJJE5ldEJTRDogcmVzX2RlYnVnLmMsdiAxLjEzIDIwMTIvMDYvMjUgMjI6MzI6NDUgYWJzIEV4cCAkCSovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDgsIDIwMDkgIEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMyAgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorICogUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCisgKiBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAqIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFCisgKiBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCisgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk1IGJ5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4KKyAqCisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuIChoZXJlaW5hZnRlciBjYWxsZWQgSUJNKSBncmFudHMKKyAqIHBlcm1pc3Npb24gdW5kZXIgaXRzIGNvcHlyaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIFNvZnR3YXJlIHdpdGggb3Igd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiBhbGwgcGFyYWdyYXBocyBvZiB0aGlzIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgSUJNCisgKiBub3QgYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIG1hcmtldGluZyBvZiBhbnkgcHJvZHVjdCBpbmNvcnBvcmF0aW5nCisgKiB0aGUgU29mdHdhcmUgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLCB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLgorICoKKyAqIFRvIHRoZSBleHRlbnQgaXQgaGFzIGEgcmlnaHQgdG8gZG8gc28sIElCTSBncmFudHMgYW4gaW1tdW5pdHkgZnJvbSBzdWl0CisgKiB1bmRlciBpdHMgcGF0ZW50cywgaWYgYW55LCBmb3IgdGhlIHVzZSwgc2FsZSBvciBtYW51ZmFjdHVyZSBvZiBwcm9kdWN0cyB0bworICogdGhlIGV4dGVudCB0aGF0IHN1Y2ggcHJvZHVjdHMgYXJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgRG9tYWluIE5hbWUgU3lzdGVtCisgKiBkeW5hbWljIHVwZGF0ZXMgaW4gVENQL0lQIG5ldHdvcmtzIGJ5IG1lYW5zIG9mIHRoZSBTb2Z0d2FyZS4gIE5vIGltbXVuaXR5IGlzCisgKiBncmFudGVkIGZvciBhbnkgcHJvZHVjdCBwZXIgc2Ugb3IgZm9yIGFueSBvdGhlciBmdW5jdGlvbiBvZiBhbnkgcHJvZHVjdC4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgQU5EIElCTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKKyAqIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLAorICogRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgQVJJU0lORworICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIElCTSBJUyBBUFBSSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHNjY3NpZFtdID0gIkAoIylyZXNfZGVidWcuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2RlYnVnLmMsdiAxLjE5IDIwMDkvMDIvMjYgMTE6MjA6MjAgdGJveCBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IHJlc19kZWJ1Zy5jLHYgMS4xMyAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworCisKKyNpZmRlZiBTUFJJTlRGX0NIQVIKKyMgZGVmaW5lIFNQUklOVEYoeCkgc3RybGVuKHNwcmludGYvKioveCkKKyNlbHNlCisjIGRlZmluZSBTUFJJTlRGKHgpIHNwcmludGYgeAorI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgX3Jlc19vcGNvZGVzW107CitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IF9yZXNfc2VjdGlvbmNvZGVzW107CisKKyNpZm5kZWYgX0xJQkMKKy8qCisgKiBQcmludCB0aGUgY3VycmVudCBvcHRpb25zLgorICovCit2b2lkCitmcF9yZXNzdGF0KGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgRklMRSAqZmlsZSkgeworCXVfbG9uZyBtYXNrOworCisJZnByaW50ZihmaWxlLCAiOzsgcmVzIG9wdGlvbnM6Iik7CisJZm9yIChtYXNrID0gMTsgIG1hc2sgIT0gMFU7ICBtYXNrIDw8PSAxKQorCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBtYXNrKQorCQkJZnByaW50ZihmaWxlLCAiICVzIiwgcF9vcHRpb24obWFzaykpOworCXB1dGMoJ1xuJywgZmlsZSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQKK2RvX3NlY3Rpb24oY29uc3QgcmVzX3N0YXRlIHN0YXRwLAorCSAgIG5zX21zZyAqaGFuZGxlLCBuc19zZWN0IHNlY3Rpb24sCisJICAgaW50IHBmbGFnLCBGSUxFICpmaWxlKQoreworCWludCBuLCBzZmxhZywgcnJudW07CisJaW50IGJ1ZmxlbiA9IDIwNDg7CisJY2hhciAqYnVmOworCW5zX29wY29kZSBvcGNvZGU7CisJbnNfcnIgcnI7CisKKwkvKgorCSAqIFByaW50IGFuc3dlciByZWNvcmRzLgorCSAqLworCXNmbGFnID0gKGludCkoc3RhdHAtPnBmY29kZSAmIHBmbGFnKTsKKwlpZiAoc3RhdHAtPnBmY29kZSAmJiAhc2ZsYWcpCisJCXJldHVybjsKKworCWJ1ZiA9IG1hbGxvYygoc2l6ZV90KWJ1Zmxlbik7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWZwcmludGYoZmlsZSwgIjs7IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworCQlyZXR1cm47CisJfQorCisJb3Bjb2RlID0gKG5zX29wY29kZSkgbnNfbXNnX2dldGZsYWcoKmhhbmRsZSwgbnNfZl9vcGNvZGUpOworCXJybnVtID0gMDsKKwlmb3IgKDs7KSB7CisJCWlmIChuc19wYXJzZXJyKGhhbmRsZSwgc2VjdGlvbiwgcnJudW0sICZycikpIHsKKwkJCWlmIChlcnJubyAhPSBFTk9ERVYpCisJCQkJZnByaW50ZihmaWxlLCAiOzsgbnNfcGFyc2VycjogJXNcbiIsCisJCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCQllbHNlIGlmIChycm51bSA+IDAgJiYgc2ZsYWcgIT0gMCAmJgorCQkJCSAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRDEpKQorCQkJCXB1dGMoJ1xuJywgZmlsZSk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaWYgKHJybnVtID09IDAgJiYgc2ZsYWcgIT0gMCAmJiAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRDEpKQorCQkJZnByaW50ZihmaWxlLCAiOzsgJXMgU0VDVElPTjpcbiIsCisJCQkJcF9zZWN0aW9uKHNlY3Rpb24sIG9wY29kZSkpOworCQlpZiAoc2VjdGlvbiA9PSBuc19zX3FkKQorCQkJZnByaW50ZihmaWxlLCAiOztcdCVzLCB0eXBlID0gJXMsIGNsYXNzID0gJXNcbiIsCisJCQkJbnNfcnJfbmFtZShyciksCisJCQkJcF90eXBlKG5zX3JyX3R5cGUocnIpKSwKKwkJCQlwX2NsYXNzKG5zX3JyX2NsYXNzKHJyKSkpOworCQllbHNlIGlmIChzZWN0aW9uID09IG5zX3NfYXIgJiYgbnNfcnJfdHlwZShycikgPT0gbnNfdF9vcHQpIHsKKwkJCXNpemVfdCByZGF0YWxlbiwgdHRsOworCQkJdWludDE2X3Qgb3B0Y29kZSwgb3B0bGVuOworCisJCQlyZGF0YWxlbiA9IG5zX3JyX3JkbGVuKHJyKTsKKwkJCXR0bCA9IG5zX3JyX3R0bChycik7CisJCQlmcHJpbnRmKGZpbGUsCisJCQkJIjsgRUROUzogdmVyc2lvbjogJXp1LCB1ZHA9JXUsIGZsYWdzPSUwNHp4XG4iLAorCQkJCSh0dGw+PjE2KSYweGZmLCBuc19ycl9jbGFzcyhyciksIHR0bCYweGZmZmYpOworCQkJd2hpbGUgKHJkYXRhbGVuID49IDQpIHsKKwkJCQljb25zdCB1X2NoYXIgKmNwID0gbnNfcnJfcmRhdGEocnIpOworCQkJCWludCBpOworCisJCQkJR0VUU0hPUlQob3B0Y29kZSwgY3ApOworCQkJCUdFVFNIT1JUKG9wdGxlbiwgY3ApOworCisJCQkJaWYgKG9wdGNvZGUgPT0gTlNfT1BUX05TSUQpIHsKKwkJCQkJZnB1dHMoIjsgTlNJRDogIiwgZmlsZSk7CisJCQkJCWlmIChvcHRsZW4gPT0gMCkgeworCQkJCQkJZnB1dHMoIjsgTlNJRFxuIiwgZmlsZSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlmcHV0cygiOyBOU0lEOiAiLCBmaWxlKTsKKwkJCQkJCWZvciAoaSA9IDA7IGkgPCBvcHRsZW47IGkrKykKKwkJCQkJCQlmcHJpbnRmKGZpbGUsICIlMDJ4ICIsCisJCQkJCQkJCWNwW2ldKTsKKwkJCQkJCWZwdXRzKCIgKCIsZmlsZSk7CisJCQkJCQlmb3IgKGkgPSAwOyBpIDwgb3B0bGVuOyBpKyspCisJCQkJCQkJZnByaW50ZihmaWxlLCAiJWMiLAorCQkJCQkJCQlpc3ByaW50KGNwW2ldKT8KKwkJCQkJCQkJY3BbaV0gOiAnLicpOworCQkJCQkJZnB1dHMoIilcbiIsIGZpbGUpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKG9wdGxlbiA9PSAwKSB7CisJCQkJCQlmcHJpbnRmKGZpbGUsICI7IE9QVD0ldVxuIiwKKwkJCQkJCQlvcHRjb2RlKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWZwcmludGYoZmlsZSwgIjsgT1BUPSV1OiAiLAorCQkJCQkJCW9wdGNvZGUpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IG9wdGxlbjsgaSsrKQorCQkJCQkJCWZwcmludGYoZmlsZSwgIiUwMnggIiwKKwkJCQkJCQkJY3BbaV0pOworCQkJCQkJZnB1dHMoIiAoIixmaWxlKTsKKwkJCQkJCWZvciAoaSA9IDA7IGkgPCBvcHRsZW47IGkrKykKKwkJCQkJCQlmcHJpbnRmKGZpbGUsICIlYyIsCisJCQkJCQkJCWlzcHJpbnQoY3BbaV0pID8KKwkJCQkJCQkJCWNwW2ldIDogJy4nKTsKKwkJCQkJCWZwdXRzKCIpXG4iLCBmaWxlKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlyZGF0YWxlbiAtPSA0ICsgb3B0bGVuOworCQkJfQorCQl9IGVsc2UgeworCQkJbiA9IG5zX3NwcmludHJyKGhhbmRsZSwgJnJyLCBOVUxMLCBOVUxMLAorCQkJCQlidWYsICh1X2ludClidWZsZW4pOworCQkJaWYgKG4gPCAwKSB7CisJCQkJaWYgKGVycm5vID09IEVOT1NQQykgeworCQkJCQlmcmVlKGJ1Zik7CisJCQkJCWJ1ZiA9IE5VTEw7CisJCQkJCWlmIChidWZsZW4gPCAxMzEwNzIpCisJCQkJCQlidWYgPSBtYWxsb2MoKHNpemVfdCkoYnVmbGVuICs9IDEwMjQpKTsKKwkJCQkJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCQkJCQlmcHJpbnRmKGZpbGUsCisJCQkJICAgICAgICAgICAgICAiOzsgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisJCQkJCSAgICAgIHJldHVybjsKKwkJCQkJfQorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZnByaW50ZihmaWxlLCAiOzsgbnNfc3ByaW50cnI6ICVzXG4iLAorCQkJCQlzdHJlcnJvcihlcnJubykpOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJCWZwdXRzKGJ1ZiwgZmlsZSk7CisJCQlmcHV0YygnXG4nLCBmaWxlKTsKKwkJfQorCQlycm51bSsrOworCX0KKyBjbGVhbnVwOgorCWlmIChidWYgIT0gTlVMTCkKKwkJZnJlZShidWYpOworfQorCisvKgorICogUHJpbnQgdGhlIGNvbnRlbnRzIG9mIGEgcXVlcnkuCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHByaW1hcmlseSBhIGRlYnVnZ2luZyByb3V0aW5lLgorICovCit2b2lkCityZXNfcHF1ZXJ5KGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgY29uc3QgdV9jaGFyICptc2csIGludCBsZW4sIEZJTEUgKmZpbGUpIHsKKwluc19tc2cgaGFuZGxlOworCWludCBxZGNvdW50LCBhbmNvdW50LCBuc2NvdW50LCBhcmNvdW50OworCXVfaW50IG9wY29kZSwgcmNvZGUsIGlkOworCisJaWYgKG5zX2luaXRwYXJzZShtc2csIGxlbiwgJmhhbmRsZSkgPCAwKSB7CisJCWZwcmludGYoZmlsZSwgIjs7IG5zX2luaXRwYXJzZTogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybjsKKwl9CisJb3Bjb2RlID0gbnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX29wY29kZSk7CisJcmNvZGUgPSBuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfcmNvZGUpOworCWlkID0gbnNfbXNnX2lkKGhhbmRsZSk7CisJcWRjb3VudCA9IG5zX21zZ19jb3VudChoYW5kbGUsIG5zX3NfcWQpOworCWFuY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX2FuKTsKKwluc2NvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19ucyk7CisJYXJjb3VudCA9IG5zX21zZ19jb3VudChoYW5kbGUsIG5zX3NfYXIpOworCisJLyoKKwkgKiBQcmludCBoZWFkZXIgZmllbGRzLgorCSAqLworCWlmICgoIXN0YXRwLT5wZmNvZGUpIHx8IChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEWCkgfHwgcmNvZGUpCisJCWZwcmludGYoZmlsZSwKKwkJCSI7OyAtPj5IRUFERVI8PC0gb3Bjb2RlOiAlcywgc3RhdHVzOiAlcywgaWQ6ICVkXG4iLAorCQkJX3Jlc19vcGNvZGVzW29wY29kZV0sIHBfcmNvZGUoKGludClyY29kZSksIGlkKTsKKwlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRFgpKQorCQlwdXRjKCc7JywgZmlsZSk7CisJaWYgKCghc3RhdHAtPnBmY29kZSkgfHwgKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX0hFQUQyKSkgeworCQlmcHJpbnRmKGZpbGUsICI7IGZsYWdzOiIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3FyKSkKKwkJCWZwcmludGYoZmlsZSwgIiBxciIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX2FhKSkKKwkJCWZwcmludGYoZmlsZSwgIiBhYSIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3RjKSkKKwkJCWZwcmludGYoZmlsZSwgIiB0YyIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3JkKSkKKwkJCWZwcmludGYoZmlsZSwgIiByZCIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3JhKSkKKwkJCWZwcmludGYoZmlsZSwgIiByYSIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3opKQorCQkJZnByaW50ZihmaWxlLCAiID8/Iik7CisJCWlmIChuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfYWQpKQorCQkJZnByaW50ZihmaWxlLCAiIGFkIik7CisJCWlmIChuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfY2QpKQorCQkJZnByaW50ZihmaWxlLCAiIGNkIik7CisJfQorCWlmICgoIXN0YXRwLT5wZmNvZGUpIHx8IChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMSkpIHsKKwkJZnByaW50ZihmaWxlLCAiOyAlczogJWQiLAorCQkJcF9zZWN0aW9uKG5zX3NfcWQsIChpbnQpb3Bjb2RlKSwgcWRjb3VudCk7CisJCWZwcmludGYoZmlsZSwgIiwgJXM6ICVkIiwKKwkJCXBfc2VjdGlvbihuc19zX2FuLCAoaW50KW9wY29kZSksIGFuY291bnQpOworCQlmcHJpbnRmKGZpbGUsICIsICVzOiAlZCIsCisJCQlwX3NlY3Rpb24obnNfc19ucywgKGludClvcGNvZGUpLCBuc2NvdW50KTsKKwkJZnByaW50ZihmaWxlLCAiLCAlczogJWQiLAorCQkJcF9zZWN0aW9uKG5zX3NfYXIsIChpbnQpb3Bjb2RlKSwgYXJjb3VudCk7CisJfQorCWlmICgoIXN0YXRwLT5wZmNvZGUpIHx8IChzdGF0cC0+cGZjb2RlICYKKwkJKFJFU19QUkZfSEVBRFggfCBSRVNfUFJGX0hFQUQyIHwgUkVTX1BSRl9IRUFEMSkpKSB7CisJCXB1dGMoJ1xuJyxmaWxlKTsKKwl9CisJLyoKKwkgKiBQcmludCB0aGUgdmFyaW91cyBzZWN0aW9ucy4KKwkgKi8KKwlkb19zZWN0aW9uKHN0YXRwLCAmaGFuZGxlLCBuc19zX3FkLCBSRVNfUFJGX1FVRVMsIGZpbGUpOworCWRvX3NlY3Rpb24oc3RhdHAsICZoYW5kbGUsIG5zX3NfYW4sIFJFU19QUkZfQU5TLCBmaWxlKTsKKwlkb19zZWN0aW9uKHN0YXRwLCAmaGFuZGxlLCBuc19zX25zLCBSRVNfUFJGX0FVVEgsIGZpbGUpOworCWRvX3NlY3Rpb24oc3RhdHAsICZoYW5kbGUsIG5zX3NfYXIsIFJFU19QUkZfQURELCBmaWxlKTsKKwlpZiAocWRjb3VudCA9PSAwICYmIGFuY291bnQgPT0gMCAmJgorCSAgICBuc2NvdW50ID09IDAgJiYgYXJjb3VudCA9PSAwKQorCQlwdXRjKCdcbicsIGZpbGUpOworfQorCitjb25zdCB1X2NoYXIgKgorcF9jZG5uYW1lKGNvbnN0IHVfY2hhciAqY3AsIGNvbnN0IHVfY2hhciAqbXNnLCBpbnQgbGVuLCBGSUxFICpmaWxlKSB7CisJY2hhciBuYW1lW01BWEROQU1FXTsKKwlpbnQgbjsKKworCWlmICgobiA9IGRuX2V4cGFuZChtc2csIG1zZyArIGxlbiwgY3AsIG5hbWUsIChpbnQpc2l6ZW9mIG5hbWUpKSA8IDApCisJCXJldHVybiAoTlVMTCk7CisJaWYgKG5hbWVbMF0gPT0gJ1wwJykKKwkJcHV0YygnLicsIGZpbGUpOworCWVsc2UKKwkJZnB1dHMobmFtZSwgZmlsZSk7CisJcmV0dXJuIChjcCArIG4pOworfQorCitjb25zdCB1X2NoYXIgKgorcF9jZG5hbWUoY29uc3QgdV9jaGFyICpjcCwgY29uc3QgdV9jaGFyICptc2csIEZJTEUgKmZpbGUpIHsKKwlyZXR1cm4gKHBfY2RubmFtZShjcCwgbXNnLCBQQUNLRVRTWiwgZmlsZSkpOworfQorCisvKiBSZXR1cm4gYSBmdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgZnJvbSBhIGNvbXByZXNzZWQgbmFtZSAod2l0aAorICAgbGVuZ3RoIHN1cHBsaWVkKS4gICovCisKK2NvbnN0IHVfY2hhciAqCitwX2Zxbm5hbWUoY29uc3QgdV9jaGFyICpjcCwgY29uc3QgdV9jaGFyICptc2csIGludCBtc2dsZW4sIGNoYXIgKm5hbWUsCisgICAgaW50IG5hbWVsZW4pCit7CisJaW50IG47CisJc2l6ZV90IG5ld2xlbjsKKworCWlmICgobiA9IGRuX2V4cGFuZChtc2csIGNwICsgbXNnbGVuLCBjcCwgbmFtZSwgbmFtZWxlbikpIDwgMCkKKwkJcmV0dXJuIChOVUxMKTsKKwluZXdsZW4gPSBzdHJsZW4obmFtZSk7CisJaWYgKG5ld2xlbiA9PSAwIHx8IG5hbWVbbmV3bGVuIC0gMV0gIT0gJy4nKSB7CisJCWlmICgoaW50KW5ld2xlbiArIDEgPj0gbmFtZWxlbikJLyogTGFjayBzcGFjZSBmb3IgZmluYWwgZG90ICovCisJCQlyZXR1cm4gKE5VTEwpOworCQllbHNlCisJCQlzdHJjcHkobmFtZSArIG5ld2xlbiwgIi4iKTsKKwl9CisJcmV0dXJuIChjcCArIG4pOworfQorCisvKiBYWFg6CXRoZSByZXN0IG9mIHRoZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlY29tZSBsZW5ndGgtbGltaXRlZCwgdG9vLiAqLworCitjb25zdCB1X2NoYXIgKgorcF9mcW5hbWUoY29uc3QgdV9jaGFyICpjcCwgY29uc3QgdV9jaGFyICptc2csIEZJTEUgKmZpbGUpIHsKKwljaGFyIG5hbWVbTUFYRE5BTUVdOworCWNvbnN0IHVfY2hhciAqbjsKKworCW4gPSBwX2Zxbm5hbWUoY3AsIG1zZywgTUFYQ0ROQU1FLCBuYW1lLCAoaW50KXNpemVvZiBuYW1lKTsKKwlpZiAobiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWZwdXRzKG5hbWUsIGZpbGUpOworCXJldHVybiAobik7Cit9CisKKy8qCisgKiBOYW1lcyBvZiBSUiBjbGFzc2VzIGFuZCBxY2xhc3Nlcy4gIENsYXNzZXMgYW5kIHFjbGFzc2VzIGFyZSB0aGUgc2FtZSwgZXhjZXB0CisgKiB0aGF0IENfQU5ZIGlzIGEgcWNsYXNzIGJ1dCBub3QgYSBjbGFzcy4gIChZb3UgY2FuIGFzayBmb3IgcmVjb3JkcyBvZiBjbGFzcworICogQ19BTlksIGJ1dCB5b3UgY2FuJ3QgaGF2ZSBhbnkgcmVjb3JkcyBvZiB0aGF0IGNsYXNzIGluIHRoZSBkYXRhYmFzZS4pCisgKi8KK2NvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9jbGFzc19zeW1zW10gPSB7CisJe0NfSU4sCQkiSU4iLAkJKGNoYXIgKikwfSwKKwl7Q19DSEFPUywJIkNIIiwJCShjaGFyICopMH0sCisJe0NfQ0hBT1MsCSJDSEFPUyIsCShjaGFyICopMH0sCisJe0NfSFMsCQkiSFMiLAkJKGNoYXIgKikwfSwKKwl7Q19IUywJCSJIRVNJT0QiLAkoY2hhciAqKTB9LAorCXtDX0FOWSwJCSJBTlkiLAkJKGNoYXIgKikwfSwKKwl7Q19OT05FLAkiTk9ORSIsCQkoY2hhciAqKTB9LAorCXtDX0lOLCAJCShjaGFyICopMCwJKGNoYXIgKikwfQorfTsKKworLyoKKyAqIE5hbWVzIG9mIG1lc3NhZ2Ugc2VjdGlvbnMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfZGVmYXVsdF9zZWN0aW9uX3N5bXNbXSA9IHsKKwl7bnNfc19xZCwJIlFVRVJZIiwJKGNoYXIgKikwfSwKKwl7bnNfc19hbiwJIkFOU1dFUiIsCShjaGFyICopMH0sCisJe25zX3NfbnMsCSJBVVRIT1JJVFkiLAkoY2hhciAqKTB9LAorCXtuc19zX2FyLAkiQURESVRJT05BTCIsCShjaGFyICopMH0sCisJezAsICAgICAgICAgICAgIChjaGFyICopMCwJKGNoYXIgKikwfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF91cGRhdGVfc2VjdGlvbl9zeW1zW10gPSB7CisJe1NfWk9ORSwJIlpPTkUiLAkJKGNoYXIgKikwfSwKKwl7U19QUkVSRVEsCSJQUkVSRVFVSVNJVEUiLAkoY2hhciAqKTB9LAorCXtTX1VQREFURSwJIlVQREFURSIsCShjaGFyICopMH0sCisJe1NfQUREVCwJIkFERElUSU9OQUwiLAkoY2hhciAqKTB9LAorCXswLCAgICAgICAgICAgICAoY2hhciAqKTAsCShjaGFyICopMH0KK307CisKK2NvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9rZXlfc3ltc1tdID0geworCXtOU19BTEdfTUQ1UlNBLAkJIlJTQSIsCQkiUlNBIEtFWSB3aXRoIE1ENSBoYXNoIn0sCisJe05TX0FMR19ESCwJCSJESCIsCQkiRGlmZmllIEhlbGxtYW4ifSwKKwl7TlNfQUxHX0RTQSwJCSJEU0EiLAkJIkRpZ2l0YWwgU2lnbmF0dXJlIEFsZ29yaXRobSJ9LAorCXtOU19BTEdfRVhQSVJFX09OTFksCSJFWFBJUkVPTkxZIiwJIk5vIGFsZ29yaXRobSJ9LAorCXtOU19BTEdfUFJJVkFURV9PSUQsCSJQUklWQVRFIiwJIkFsZ29yaXRobSBvYnRhaW5lZCBmcm9tIE9JRCJ9LAorCXswLAkJCU5VTEwsCQlOVUxMfQorfTsKKworY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2NlcnRfc3ltc1tdID0geworCXtjZXJ0X3RfcGtpeCwJIlBLSVgiLAkJIlBLSVggKFguNTA5djMpIENlcnRpZmljYXRlIn0sCisJe2NlcnRfdF9zcGtpLAkiU1BLSSIsCQkiU1BLSSBjZXJ0aWZpY2F0ZSJ9LAorCXtjZXJ0X3RfcGdwLAkiUEdQIiwJCSJQR1AgY2VydGlmaWNhdGUifSwKKwl7Y2VydF90X3VybCwJIlVSTCIsCQkiVVJMIFByaXZhdGUifSwKKwl7Y2VydF90X29pZCwJIk9JRCIsCQkiT0lEIFByaXZhdGUifSwKKwl7MCwJCU5VTEwsCQlOVUxMfQorfTsKKworLyoKKyAqIE5hbWVzIG9mIFJSIHR5cGVzIGFuZCBxdHlwZXMuICBUeXBlcyBhbmQgcXR5cGVzIGFyZSB0aGUgc2FtZSwgZXhjZXB0CisgKiB0aGF0IFRfQU5ZIGlzIGEgcXR5cGUgYnV0IG5vdCBhIHR5cGUuICAoWW91IGNhbiBhc2sgZm9yIHJlY29yZHMgb2YgdHlwZQorICogVF9BTlksIGJ1dCB5b3UgY2FuJ3QgaGF2ZSBhbnkgcmVjb3JkcyBvZiB0aGF0IHR5cGUgaW4gdGhlIGRhdGFiYXNlLikKKyAqLworY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX3R5cGVfc3ltc1tdID0geworCXtuc190X2EsCSJBIiwJCSJhZGRyZXNzIn0sCisJe25zX3RfbnMsCSJOUyIsCQkibmFtZSBzZXJ2ZXIifSwKKwl7bnNfdF9tZCwJIk1EIiwJCSJtYWlsIGRlc3RpbmF0aW9uIChkZXByZWNhdGVkKSJ9LAorCXtuc190X21mLAkiTUYiLAkJIm1haWwgZm9yd2FyZGVyIChkZXByZWNhdGVkKSJ9LAorCXtuc190X2NuYW1lLAkiQ05BTUUiLAkiY2Fub25pY2FsIG5hbWUifSwKKwl7bnNfdF9zb2EsCSJTT0EiLAkJInN0YXJ0IG9mIGF1dGhvcml0eSJ9LAorCXtuc190X21iLAkiTUIiLAkJIm1haWxib3gifSwKKwl7bnNfdF9tZywJIk1HIiwJCSJtYWlsIGdyb3VwIG1lbWJlciJ9LAorCXtuc190X21yLAkiTVIiLAkJIm1haWwgcmVuYW1lIn0sCisJe25zX3RfbnVsbCwJIk5VTEwiLAkJIm51bGwifSwKKwl7bnNfdF93a3MsCSJXS1MiLAkJIndlbGwta25vd24gc2VydmljZSAoZGVwcmVjYXRlZCkifSwKKwl7bnNfdF9wdHIsCSJQVFIiLAkJImRvbWFpbiBuYW1lIHBvaW50ZXIifSwKKwl7bnNfdF9oaW5mbywJIkhJTkZPIiwJImhvc3QgaW5mb3JtYXRpb24ifSwKKwl7bnNfdF9taW5mbywJIk1JTkZPIiwJIm1haWxib3ggaW5mb3JtYXRpb24ifSwKKwl7bnNfdF9teCwJIk1YIiwJCSJtYWlsIGV4Y2hhbmdlciJ9LAorCXtuc190X3R4dCwJIlRYVCIsCQkidGV4dCJ9LAorCXtuc190X3JwLAkiUlAiLAkJInJlc3BvbnNpYmxlIHBlcnNvbiJ9LAorCXtuc190X2Fmc2RiLAkiQUZTREIiLAkiRENFIG9yIEFGUyBzZXJ2ZXIifSwKKwl7bnNfdF94MjUsCSJYMjUiLAkJIlgyNSBhZGRyZXNzIn0sCisJe25zX3RfaXNkbiwJIklTRE4iLAkJIklTRE4gYWRkcmVzcyJ9LAorCXtuc190X3J0LAkiUlQiLAkJInJvdXRlciJ9LAorCXtuc190X25zYXAsCSJOU0FQIiwJCSJuc2FwIGFkZHJlc3MifSwKKwl7bnNfdF9uc2FwX3B0ciwJIk5TQVBfUFRSIiwJImRvbWFpbiBuYW1lIHBvaW50ZXIifSwKKwl7bnNfdF9zaWcsCSJTSUciLAkJInNpZ25hdHVyZSJ9LAorCXtuc190X2tleSwJIktFWSIsCQkia2V5In0sCisJe25zX3RfcHgsCSJQWCIsCQkibWFwcGluZyBpbmZvcm1hdGlvbiJ9LAorCXtuc190X2dwb3MsCSJHUE9TIiwJCSJnZW9ncmFwaGljYWwgcG9zaXRpb24gKHdpdGhkcmF3bikifSwKKwl7bnNfdF9hYWFhLAkiQUFBQSIsCQkiSVB2NiBhZGRyZXNzIn0sCisJe25zX3RfbG9jLAkiTE9DIiwJCSJsb2NhdGlvbiJ9LAorCXtuc190X254dCwJIk5YVCIsCQkibmV4dCB2YWxpZCBuYW1lICh1bmltcGxlbWVudGVkKSJ9LAorCXtuc190X2VpZCwJIkVJRCIsCQkiZW5kcG9pbnQgaWRlbnRpZmllciAodW5pbXBsZW1lbnRlZCkifSwKKwl7bnNfdF9uaW1sb2MsCSJOSU1MT0MiLAkiTklNUk9EIGxvY2F0b3IgKHVuaW1wbGVtZW50ZWQpIn0sCisJe25zX3Rfc3J2LAkiU1JWIiwJCSJzZXJ2ZXIgc2VsZWN0aW9uIn0sCisJe25zX3RfYXRtYSwJIkFUTUEiLAkJIkFUTSBhZGRyZXNzICh1bmltcGxlbWVudGVkKSJ9LAorCXtuc190X25hcHRyLAkiTkFQVFIiLAkibmFwdHIifSwKKwl7bnNfdF9reCwJIktYIiwJCSJrZXkgZXhjaGFuZ2UifSwKKwl7bnNfdF9jZXJ0LAkiQ0VSVCIsCQkiY2VydGlmaWNhdGUifSwKKwl7bnNfdF9hNiwJIkEiLAkJIklQdjYgYWRkcmVzcyAoZXhwZXJtaW5lbnRhbCkifSwKKwl7bnNfdF9kbmFtZSwJIkROQU1FIiwJIm5vbi10ZXJtaW5hbCByZWRpcmVjdGlvbiJ9LAorCXtuc190X29wdCwJIk9QVCIsCQkib3B0In0sCisJe25zX3RfYXBsLAkiYXBsIiwJCSJhcGwifSwKKwl7bnNfdF9kcywJIkRTIiwJCSJkZWxlZ2F0aW9uIHNpZ25lciJ9LAorCXtuc190X3NzaGZwLAkiU1NGUCIsCQkiU1NIIGZpbmdlcnByaW50In0sCisJe25zX3RfaXBzZWNrZXksCSJJUFNFQ0tFWSIsCSJJUFNFQyBrZXkifSwKKwl7bnNfdF9ycnNpZywJIlJSU0lHIiwJInJyc2lnIn0sCisJe25zX3RfbnNlYywJIk5TRUMiLAkJIm5zZWMifSwKKwl7bnNfdF9kbnNrZXksCSJETlNLRVkiLAkiRE5TIGtleSJ9LAorCXtuc190X2RoY2lkLAkiREhDSUQiLCAgICAgICAiZHluYW1pYyBob3N0IGNvbmZpZ3VyYXRpb24gaWRlbnRpZmllciJ9LAorCXtuc190X25zZWMzLAkiTlNFQzMiLAkibnNlYzMifSwKKwl7bnNfdF9uc2VjM3BhcmFtLCAiTlNFQzNQQVJBTSIsICJOU0VDMyBwYXJhbWV0ZXJzIn0sCisJe25zX3RfaGlwLAkiSElQIiwJCSJob3N0IGlkZW50aXR5IHByb3RvY29sIn0sCisJe25zX3Rfc3BmLAkiU1BGIiwJCSJzZW5kZXIgcG9saWN5IGZyYW1ld29yayJ9LAorCXtuc190X3RrZXksCSJUS0VZIiwJCSJ0a2V5In0sCisJe25zX3RfdHNpZywJIlRTSUciLAkJInRyYW5zYWN0aW9uIHNpZ25hdHVyZSJ9LAorCXtuc190X2l4ZnIsCSJJWEZSIiwJCSJpbmNyZW1lbnRhbCB6b25lIHRyYW5zZmVyIn0sCisJe25zX3RfYXhmciwJIkFYRlIiLAkJInpvbmUgdHJhbnNmZXIifSwKKwl7bnNfdF96eGZyLAkiWlhGUiIsCQkiY29tcHJlc3NlZCB6b25lIHRyYW5zZmVyIn0sCisJe25zX3RfbWFpbGIsCSJNQUlMQiIsCSJtYWlsYm94LXJlbGF0ZWQgZGF0YSAoZGVwcmVjYXRlZCkifSwKKwl7bnNfdF9tYWlsYSwJIk1BSUxBIiwJIm1haWwgYWdlbnQgKGRlcHJlY2F0ZWQpIn0sCisJe25zX3RfbmFwdHIsCSJOQVBUUiIsCSJVUk4gTmFtaW5nIEF1dGhvcml0eSJ9LAorCXtuc190X2t4LAkiS1giLAkJIktleSBFeGNoYW5nZSJ9LAorCXtuc190X2NlcnQsCSJDRVJUIiwJCSJDZXJ0aWZpY2F0ZSJ9LAorCXtuc190X2E2LAkiQTYiLAkJIklQdjYgQWRkcmVzcyJ9LAorCXtuc190X2RuYW1lLAkiRE5BTUUiLAkiZG5hbWUifSwKKwl7bnNfdF9zaW5rLAkiU0lOSyIsCQkiS2l0Y2hlbiBTaW5rIChleHBlcmltZW50YWwpIn0sCisJe25zX3Rfb3B0LAkiT1BUIiwJCSJFRE5TIE9wdGlvbnMifSwKKwl7bnNfdF9hbnksCSJBTlkiLAkJIlwiYW55XCIifSwKKwl7bnNfdF9kbHYsCSJETFYiLAkJIkROU1NFQyBsb29rLWFzaWRlIHZhbGlkYXRpb24ifSwKKwl7MCwgCQlOVUxMLAkJTlVMTH0KK307CisKKy8qCisgKiBOYW1lcyBvZiBETlMgcmNvZGVzLgorICovCitjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfcmNvZGVfc3ltc1tdID0geworCXtuc19yX25vZXJyb3IsCSJOT0VSUk9SIiwJCSJubyBlcnJvciJ9LAorCXtuc19yX2Zvcm1lcnIsCSJGT1JNRVJSIiwJCSJmb3JtYXQgZXJyb3IifSwKKwl7bnNfcl9zZXJ2ZmFpbCwJIlNFUlZGQUlMIiwJCSJzZXJ2ZXIgZmFpbGVkIn0sCisJe25zX3Jfbnhkb21haW4sCSJOWERPTUFJTiIsCQkibm8gc3VjaCBkb21haW4gbmFtZSJ9LAorCXtuc19yX25vdGltcGwsCSJOT1RJTVAiLAkJIm5vdCBpbXBsZW1lbnRlZCJ9LAorCXtuc19yX3JlZnVzZWQsCSJSRUZVU0VEIiwJCSJyZWZ1c2VkIn0sCisJe25zX3JfeXhkb21haW4sCSJZWERPTUFJTiIsCQkiZG9tYWluIG5hbWUgZXhpc3RzIn0sCisJe25zX3JfeXhycnNldCwJIllYUlJTRVQiLAkJInJyc2V0IGV4aXN0cyJ9LAorCXtuc19yX254cnJzZXQsCSJOWFJSU0VUIiwJCSJycnNldCBkb2Vzbid0IGV4aXN0In0sCisJe25zX3Jfbm90YXV0aCwJIk5PVEFVVEgiLAkJIm5vdCBhdXRob3JpdGF0aXZlIn0sCisJe25zX3Jfbm90em9uZSwJIk5PVFpPTkUiLAkJIk5vdCBpbiB6b25lIn0sCisJe25zX3JfbWF4LAkiIiwJCQkiIn0sCisJe25zX3JfYmFkc2lnLAkiQkFEU0lHIiwJCSJiYWQgc2lnbmF0dXJlIn0sCisJe25zX3JfYmFka2V5LAkiQkFES0VZIiwJCSJiYWQga2V5In0sCisJe25zX3JfYmFkdGltZSwJIkJBRFRJTUUiLAkJImJhZCB0aW1lIn0sCisJezAsIAkJTlVMTCwJCQlOVUxMfQorfTsKKworaW50CitzeW1fc3Rvbihjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqc3ltcywgY29uc3QgY2hhciAqbmFtZSwgaW50ICpzdWNjZXNzKSB7CisJZm9yICg7IHN5bXMtPm5hbWUgIT0gMDsgc3ltcysrKSB7CisJCWlmIChzdHJjYXNlY21wIChuYW1lLCBzeW1zLT5uYW1lKSA9PSAwKSB7CisJCQlpZiAoc3VjY2VzcykKKwkJCQkqc3VjY2VzcyA9IDE7CisJCQlyZXR1cm4gKHN5bXMtPm51bWJlcik7CisJCX0KKwl9CisJaWYgKHN1Y2Nlc3MpCisJCSpzdWNjZXNzID0gMDsKKwlyZXR1cm4gKHN5bXMtPm51bWJlcik7CQkvKiBUaGUgZGVmYXVsdCB2YWx1ZS4gKi8KK30KKworY29uc3QgY2hhciAqCitzeW1fbnRvcyhjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqc3ltcywgaW50IG51bWJlciwgaW50ICpzdWNjZXNzKSB7CisJc3RhdGljIGNoYXIgdW5uYW1lWzIwXTsKKworCWZvciAoOyBzeW1zLT5uYW1lICE9IDA7IHN5bXMrKykgeworCQlpZiAobnVtYmVyID09IHN5bXMtPm51bWJlcikgeworCQkJaWYgKHN1Y2Nlc3MpCisJCQkJKnN1Y2Nlc3MgPSAxOworCQkJcmV0dXJuIChzeW1zLT5uYW1lKTsKKwkJfQorCX0KKworCXNwcmludGYodW5uYW1lLCAiJWQiLCBudW1iZXIpOwkJLyogWFhYIG5vbnJlZW50cmFudCAqLworCWlmIChzdWNjZXNzKQorCQkqc3VjY2VzcyA9IDA7CisJcmV0dXJuICh1bm5hbWUpOworfQorCitjb25zdCBjaGFyICoKK3N5bV9udG9wKGNvbnN0IHN0cnVjdCByZXNfc3ltICpzeW1zLCBpbnQgbnVtYmVyLCBpbnQgKnN1Y2Nlc3MpIHsKKwlzdGF0aWMgY2hhciB1bm5hbWVbMjBdOworCisJZm9yICg7IHN5bXMtPm5hbWUgIT0gMDsgc3ltcysrKSB7CisJCWlmIChudW1iZXIgPT0gc3ltcy0+bnVtYmVyKSB7CisJCQlpZiAoc3VjY2VzcykKKwkJCQkqc3VjY2VzcyA9IDE7CisJCQlyZXR1cm4gKHN5bXMtPmh1bWFubmFtZSk7CisJCX0KKwl9CisJc3ByaW50Zih1bm5hbWUsICIlZCIsIG51bWJlcik7CQkvKiBYWFggbm9ucmVlbnRyYW50ICovCisJaWYgKHN1Y2Nlc3MpCisJCSpzdWNjZXNzID0gMDsKKwlyZXR1cm4gKHVubmFtZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgZm9yIHRoZSB0eXBlLgorICovCitjb25zdCBjaGFyICoKK3BfdHlwZShpbnQgdHlwZSkgeworCWludCBzdWNjZXNzOworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKwlzdGF0aWMgY2hhciB0eXBlYnVmWzIwXTsKKworCXJlc3VsdCA9IHN5bV9udG9zKF9fcF90eXBlX3N5bXMsIHR5cGUsICZzdWNjZXNzKTsKKwlpZiAoc3VjY2VzcykKKwkJcmV0dXJuIChyZXN1bHQpOworCWlmICh0eXBlIDwgMCB8fCB0eXBlID4gMHhmZmZmKQorCQlyZXR1cm4gKCJCQURUWVBFIik7CisJc3ByaW50Zih0eXBlYnVmLCAiVFlQRSVkIiwgdHlwZSk7CisJcmV0dXJuICh0eXBlYnVmKTsKK30KKworLyoKKyAqIFJldHVybiBhIHN0cmluZyBmb3IgdGhlIHR5cGUuCisgKi8KK2NvbnN0IGNoYXIgKgorcF9zZWN0aW9uKGludCBzZWN0aW9uLCBpbnQgb3Bjb2RlKSB7CisJY29uc3Qgc3RydWN0IHJlc19zeW0gKnN5bWJvbHM7CisKKwlzd2l0Y2ggKG9wY29kZSkgeworCWNhc2UgbnNfb191cGRhdGU6CisJCXN5bWJvbHMgPSBfX3BfdXBkYXRlX3NlY3Rpb25fc3ltczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3ltYm9scyA9IF9fcF9kZWZhdWx0X3NlY3Rpb25fc3ltczsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoc3ltX250b3Moc3ltYm9scywgc2VjdGlvbiwgKGludCAqKTApKTsKK30KKworLyoKKyAqIFJldHVybiBhIG1uZW1vbmljIGZvciBjbGFzcy4KKyAqLworY29uc3QgY2hhciAqCitwX2NsYXNzKGludCBjbGFzcykgeworCWludCBzdWNjZXNzOworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKwlzdGF0aWMgY2hhciBjbGFzc2J1ZlsyMF07CisKKwlyZXN1bHQgPSBzeW1fbnRvcyhfX3BfY2xhc3Nfc3ltcywgY2xhc3MsICZzdWNjZXNzKTsKKwlpZiAoc3VjY2VzcykKKwkJcmV0dXJuIChyZXN1bHQpOworCWlmIChjbGFzcyA8IDAgfHwgY2xhc3MgPiAweGZmZmYpCisJCXJldHVybiAoIkJBRENMQVNTIik7CisJc3ByaW50ZihjbGFzc2J1ZiwgIkNMQVNTJWQiLCBjbGFzcyk7CisJcmV0dXJuIChjbGFzc2J1Zik7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBtbmVtb25pYyBmb3IgYW4gb3B0aW9uCisgKi8KK2NvbnN0IGNoYXIgKgorcF9vcHRpb24odV9sb25nIG9wdGlvbikgeworCXN0YXRpYyBjaGFyIG5idWZbNDBdOworCisJc3dpdGNoIChvcHRpb24pIHsKKwljYXNlIFJFU19JTklUOgkJcmV0dXJuICJpbml0IjsKKwljYXNlIFJFU19ERUJVRzoJCXJldHVybiAiZGVidWciOworCWNhc2UgUkVTX0FBT05MWToJcmV0dXJuICJhYW9ubHkodW5pbXBsKSI7CisJY2FzZSBSRVNfVVNFVkM6CQlyZXR1cm4gInVzZXZjIjsKKwljYXNlIFJFU19QUklNQVJZOglyZXR1cm4gInByaW1yeSh1bmltcGwpIjsKKwljYXNlIFJFU19JR05UQzoJCXJldHVybiAiaWdudGMiOworCWNhc2UgUkVTX1JFQ1VSU0U6CXJldHVybiAicmVjdXJzIjsKKwljYXNlIFJFU19ERUZOQU1FUzoJcmV0dXJuICJkZWZuYW0iOworCWNhc2UgUkVTX1NUQVlPUEVOOglyZXR1cm4gInN0eW9wbiI7CisJY2FzZSBSRVNfRE5TUkNIOglyZXR1cm4gImRuc3JjaCI7CisJY2FzZSBSRVNfSU5TRUNVUkUxOglyZXR1cm4gImluc2VjdXJlMSI7CisJY2FzZSBSRVNfSU5TRUNVUkUyOglyZXR1cm4gImluc2VjdXJlMiI7CisJY2FzZSBSRVNfTk9BTElBU0VTOglyZXR1cm4gIm5vYWxpYXNlcyI7CisJY2FzZSBSRVNfVVNFX0lORVQ2OglyZXR1cm4gImluZXQ2IjsKKyNpZmRlZiBSRVNfVVNFX0VETlMwCS8qIEtBTUUgZXh0ZW5zaW9uICovCisJY2FzZSBSRVNfVVNFX0VETlMwOglyZXR1cm4gImVkbnMwIjsKKyNlbmRpZgorI2lmZGVmIFJFU19VU0VfRE5BTUUKKwljYXNlIFJFU19VU0VfRE5BTUU6CXJldHVybiAiZG5hbWUiOworI2VuZGlmCisjaWZkZWYgUkVTX1VTRV9ETlNTRUMKKwljYXNlIFJFU19VU0VfRE5TU0VDOglyZXR1cm4gImRuc3NlYyI7CisjZW5kaWYKKyNpZmRlZiBSRVNfTk9UTERRVUVSWQorCWNhc2UgUkVTX05PVExEUVVFUlk6CXJldHVybiAibm8tdGxkLXF1ZXJ5IjsKKyNlbmRpZgorI2lmZGVmIFJFU19OT19OSUJCTEUyCisJY2FzZSBSRVNfTk9fTklCQkxFMjoJcmV0dXJuICJuby1uaWJibGUyIjsKKyNlbmRpZgorCQkJCS8qIFhYWCBub25yZWVudHJhbnQgKi8KKwlkZWZhdWx0OgkJc3ByaW50ZihuYnVmLCAiPzB4JWx4PyIsICh1X2xvbmcpb3B0aW9uKTsKKwkJCQlyZXR1cm4gKG5idWYpOworCX0KK30KKworLyoKKyAqIFJldHVybiBhIG1uZW1vbmljIGZvciBhIHRpbWUgdG8gbGl2ZS4KKyAqLworY29uc3QgY2hhciAqCitwX3RpbWUodV9pbnQzMl90IHZhbHVlKSB7CisJc3RhdGljIGNoYXIgbmJ1Zls0MF07CQkvKiBYWFggbm9ucmVlbnRyYW50ICovCisKKwlpZiAobnNfZm9ybWF0X3R0bCgodV9sb25nKXZhbHVlLCBuYnVmLCBzaXplb2YgbmJ1ZikgPCAwKQorCQlzcHJpbnRmKG5idWYsICIldSIsIHZhbHVlKTsKKwlyZXR1cm4gKG5idWYpOworfQorCisvKgorICogUmV0dXJuIGEgc3RyaW5nIGZvciB0aGUgcmNvZGUuCisgKi8KK2NvbnN0IGNoYXIgKgorcF9yY29kZShpbnQgcmNvZGUpIHsKKwlyZXR1cm4gKHN5bV9udG9zKF9fcF9yY29kZV9zeW1zLCByY29kZSwgKGludCAqKTApKTsKK30KKworLyoKKyAqIFJldHVybiBhIHN0cmluZyBmb3IgYSByZXNfc29ja2FkZHJfdW5pb24uCisgKi8KK2NvbnN0IGNoYXIgKgorcF9zb2NrdW4odW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIHUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpIHsKKwljaGFyIHJldFtzaXplb2YgImZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOjEyMy4xMjMuMTIzLjEyMyJdOworCisJc3dpdGNoICh1LnNpbi5zaW5fZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlpbmV0X250b3AoQUZfSU5FVCwgJnUuc2luLnNpbl9hZGRyLCByZXQsIChzb2NrbGVuX3Qpc2l6ZW9mIHJldCk7CisJCWJyZWFrOworI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCisJY2FzZSBBRl9JTkVUNjoKKwkJaW5ldF9udG9wKEFGX0lORVQ2LCAmdS5zaW42LnNpbjZfYWRkciwgcmV0LCBzaXplb2YgcmV0KTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlzcHJpbnRmKHJldCwgIlthZiVkXSIsIHUuc2luLnNpbl9mYW1pbHkpOworCQlicmVhazsKKwl9CisJaWYgKHNpemUgPiAwVSkgeworCQlzdHJuY3B5KGJ1ZiwgcmV0LCBzaXplIC0gMSk7CisJCWJ1ZltzaXplIC0gMV0gPSAnMCc7CisJfQorCXJldHVybiAoYnVmKTsKK30KKworLyoKKyAqIHJvdXRpbmVzIHRvIGNvbnZlcnQgYmV0d2VlbiBvbi10aGUtd2lyZSBSUiBmb3JtYXQgYW5kIHpvbmUgZmlsZSBmb3JtYXQuCisgKiBEb2VzIG5vdCBjb250YWluIGNvbnZlcnNpb24gdG8vZnJvbSBkZWNpbWFsIGRlZ3JlZXM7IGRpdmlkZSBvciBtdWx0aXBseQorICogYnkgNjAqNjAqMTAwMCBmb3IgdGhhdC4KKyAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBvd2Vyb2Z0ZW5bMTBdID0gezEsIDEwLCAxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsCisJCQkJICAgICAgMTAwMDAwMCwxMDAwMDAwMCwxMDAwMDAwMDAsMTAwMDAwMDAwMH07CisKKy8qIHRha2VzIGFuIFhlWSBwcmVjaXNpb24vc2l6ZSB2YWx1ZSwgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3ByZWNzaXplX250b2EodV9pbnQzMl90IHByZWMpCit7CisJc3RhdGljIGNoYXIgcmV0YnVmW3NpemVvZiAiOTAwMDAwMDAuMDAiXTsJLyogWFhYIG5vbnJlZW50cmFudCAqLworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBtYW50aXNzYSwgZXhwb25lbnQ7CisKKwltYW50aXNzYSA9IChpbnQpKChwcmVjID4+IDQpICYgMHgwZikgJSAxMDsKKwlleHBvbmVudCA9IChpbnQpKChwcmVjID4+IDApICYgMHgwZikgJSAxMDsKKworCXZhbCA9IG1hbnRpc3NhICogcG93ZXJvZnRlbltleHBvbmVudF07CisKKwkodm9pZCkgc3ByaW50ZihyZXRidWYsICIlbHUuJS4ybHUiLCB2YWwvMTAwLCB2YWwlMTAwKTsKKwlyZXR1cm4gKHJldGJ1Zik7Cit9CisKKy8qIGNvbnZlcnRzIGFzY2lpIHNpemUvcHJlY2lzaW9uIFggKiAxMCoqWShjbSkgdG8gMHhYWS4gIG1vdmVzIHBvaW50ZXIuICovCitzdGF0aWMgdV9pbnQ4X3QKK3ByZWNzaXplX2F0b24oY29uc3QgY2hhciAqKnN0cnB0cikgeworCXVuc2lnbmVkIGludCBtdmFsID0gMCwgY212YWwgPSAwOworCXVfaW50OF90IHJldHZhbCA9IDA7CisJY29uc3QgY2hhciAqY3A7CisJaW50IGV4cG9uZW50OworCWludCBtYW50aXNzYTsKKworCWNwID0gKnN0cnB0cjsKKworCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCW12YWwgPSBtdmFsICogMTAgKyAoKmNwKysgLSAnMCcpOworCisJaWYgKCpjcCA9PSAnLicpIHsJCS8qIGNlbnRpbWV0ZXJzICovCisJCWNwKys7CisJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKKwkJCWNtdmFsID0gKCpjcCsrIC0gJzAnKSAqIDEwOworCQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJCWNtdmFsICs9ICgqY3ArKyAtICcwJyk7CisJCQl9CisJCX0KKwl9CisJY212YWwgPSAobXZhbCAqIDEwMCkgKyBjbXZhbDsKKworCWZvciAoZXhwb25lbnQgPSAwOyBleHBvbmVudCA8IDk7IGV4cG9uZW50KyspCisJCWlmIChjbXZhbCA8IHBvd2Vyb2Z0ZW5bZXhwb25lbnQrMV0pCisJCQlicmVhazsKKworCW1hbnRpc3NhID0gY212YWwgLyBwb3dlcm9mdGVuW2V4cG9uZW50XTsKKwlpZiAobWFudGlzc2EgPiA5KQorCQltYW50aXNzYSA9IDk7CisKKwlyZXR2YWwgPSAobWFudGlzc2EgPDwgNCkgfCBleHBvbmVudDsKKworCSpzdHJwdHIgPSBjcDsKKworCXJldHVybiAocmV0dmFsKTsKK30KKworLyogY29udmVydHMgYXNjaWkgbGF0L2xvbiB0byB1bnNpZ25lZCBlbmNvZGVkIDMyLWJpdCBudW1iZXIuICBtb3ZlcyBwb2ludGVyLiAqLworc3RhdGljIHVfaW50MzJfdAorbGF0bG9uMnVsKGNvbnN0IGNoYXIgKipsYXRsb25zdHJwdHIsIGludCAqd2hpY2gpIHsKKwljb25zdCBjaGFyICpjcDsKKwl1X2ludDMyX3QgcmV0dmFsOworCWludCBkZWcgPSAwLCBtaW4gPSAwLCBzZWNzID0gMCwgc2Vjc2ZyYWMgPSAwOworCisJY3AgPSAqbGF0bG9uc3RycHRyOworCisJd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJZGVnID0gZGVnICogMTAgKyAoKmNwKysgLSAnMCcpOworCisJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJY3ArKzsKKworCWlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkpCisJCWdvdG8gZm5kaGVtaTsKKworCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCW1pbiA9IG1pbiAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKworCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCWNwKys7CisKKwlpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpKQorCQlnb3RvIGZuZGhlbWk7CisKKwl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQorCQlzZWNzID0gc2VjcyAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKworCWlmICgqY3AgPT0gJy4nKSB7CQkvKiBkZWNpbWFsIHNlY29uZHMgKi8KKwkJY3ArKzsKKwkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJc2Vjc2ZyYWMgPSAoKmNwKysgLSAnMCcpICogMTAwOworCQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJCXNlY3NmcmFjICs9ICgqY3ArKyAtICcwJykgKiAxMDsKKwkJCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7CisJCQkJCXNlY3NmcmFjICs9ICgqY3ArKyAtICcwJyk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCS8qIGlmIGFueSB0cmFpbGluZyBnYXJiYWdlICovCisJCWNwKys7CisKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQorCQljcCsrOworCisgZm5kaGVtaToKKwlzd2l0Y2ggKCpjcCkgeworCWNhc2UgJ04nOiBjYXNlICduJzoKKwljYXNlICdFJzogY2FzZSAnZSc6CisJCXJldHZhbCA9ICgodW5zaWduZWQpMTw8MzEpCisJCQkrICgoKCgoZGVnICogNjApICsgbWluKSAqIDYwKSArIHNlY3MpICogMTAwMCkKKwkJCSsgc2Vjc2ZyYWM7CisJCWJyZWFrOworCWNhc2UgJ1MnOiBjYXNlICdzJzoKKwljYXNlICdXJzogY2FzZSAndyc6CisJCXJldHZhbCA9ICgodW5zaWduZWQpMTw8MzEpCisJCQktICgoKCgoZGVnICogNjApICsgbWluKSAqIDYwKSArIHNlY3MpICogMTAwMCkKKwkJCS0gc2Vjc2ZyYWM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IDA7CS8qIGludmFsaWQgdmFsdWUgLS0gaW5kaWNhdGVzIGVycm9yICovCisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoKmNwKSB7CisJY2FzZSAnTic6IGNhc2UgJ24nOgorCWNhc2UgJ1MnOiBjYXNlICdzJzoKKwkJKndoaWNoID0gMTsJLyogbGF0aXR1ZGUgKi8KKwkJYnJlYWs7CisJY2FzZSAnRSc6IGNhc2UgJ2UnOgorCWNhc2UgJ1cnOiBjYXNlICd3JzoKKwkJKndoaWNoID0gMjsJLyogbG9uZ2l0dWRlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSp3aGljaCA9IDA7CS8qIGVycm9yICovCisJCWJyZWFrOworCX0KKworCWNwKys7CQkJLyogc2tpcCB0aGUgaGVtaXNwaGVyZSAqLworCisJd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCS8qIGlmIGFueSB0cmFpbGluZyBnYXJiYWdlICovCisJCWNwKys7CisKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQkvKiBtb3ZlIHRvIG5leHQgZmllbGQgKi8KKwkJY3ArKzsKKworCSpsYXRsb25zdHJwdHIgPSBjcDsKKworCXJldHVybiAocmV0dmFsKTsKK30KKworLyogY29udmVydHMgYSB6b25lIGZpbGUgcmVwcmVzZW50YXRpb24gaW4gYSBzdHJpbmcgdG8gYW4gUkRBVEEgb24tdGhlLXdpcmUKKyAqIHJlcHJlc2VudGF0aW9uLiAqLworaW50Citsb2NfYXRvbihjb25zdCBjaGFyICphc2NpaSwgdV9jaGFyICpiaW5hcnkpCit7CisJY29uc3QgY2hhciAqY3AsICptYXhjcDsKKwl1X2NoYXIgKmJjcDsKKworCXVfaW50MzJfdCBsYXRpdCA9IDAsIGxvbmdpdCA9IDAsIGFsdCA9IDA7CisJdV9pbnQzMl90IGxsdGVtcDEgPSAwLCBsbHRlbXAyID0gMDsKKwlpbnQgYWx0bWV0ZXJzID0gMCwgYWx0ZnJhYyA9IDAsIGFsdHNpZ24gPSAxOworCXVfaW50OF90IGhwID0gMHgxNjsJLyogZGVmYXVsdCA9IDFlNiBjbSA9IDEwMDAwLjAwbSA9IDEwa20gKi8KKwl1X2ludDhfdCB2cCA9IDB4MTM7CS8qIGRlZmF1bHQgPSAxZTMgY20gPSAxMC4wMG0gKi8KKwl1X2ludDhfdCBzaXogPSAweDEyOwkvKiBkZWZhdWx0ID0gMWUyIGNtID0gMS4wMG0gKi8KKwlpbnQgd2hpY2gxID0gMCwgd2hpY2gyID0gMDsKKworCWNwID0gYXNjaWk7CisJbWF4Y3AgPSBjcCArIHN0cmxlbihhc2NpaSk7CisKKwlsbHRlbXAxID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMSk7CisKKwlsbHRlbXAyID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMik7CisKKwlzd2l0Y2ggKHdoaWNoMSArIHdoaWNoMikgeworCWNhc2UgMzoJCQkvKiAxICsgMiwgdGhlIG9ubHkgdmFsaWQgY29tYmluYXRpb24gKi8KKwkJaWYgKCh3aGljaDEgPT0gMSkgJiYgKHdoaWNoMiA9PSAyKSkgeyAvKiBub3JtYWwgY2FzZSAqLworCQkJbGF0aXQgPSBsbHRlbXAxOworCQkJbG9uZ2l0ID0gbGx0ZW1wMjsKKwkJfSBlbHNlIGlmICgod2hpY2gxID09IDIpICYmICh3aGljaDIgPT0gMSkpIHsgLyogcmV2ZXJzZWQgKi8KKwkJCWxvbmdpdCA9IGxsdGVtcDE7CisJCQlsYXRpdCA9IGxsdGVtcDI7CisJCX0gZWxzZSB7CS8qIHNvbWUga2luZCBvZiBicm9rZW5uZXNzICovCisJCQlyZXR1cm4gKDApOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CQkvKiB3ZSBkaWRuJ3QgZ2V0IG9uZSBvZiBlYWNoICovCisJCXJldHVybiAoMCk7CisJfQorCisJLyogYWx0aXR1ZGUgKi8KKwlpZiAoKmNwID09ICctJykgeworCQlhbHRzaWduID0gLTE7CisJCWNwKys7CisJfQorCisJaWYgKCpjcCA9PSAnKycpCisJCWNwKys7CisKKwl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQorCQlhbHRtZXRlcnMgPSBhbHRtZXRlcnMgKiAxMCArICgqY3ArKyAtICcwJyk7CisKKwlpZiAoKmNwID09ICcuJykgewkJLyogZGVjaW1hbCBtZXRlcnMgKi8KKwkJY3ArKzsKKwkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJYWx0ZnJhYyA9ICgqY3ArKyAtICcwJykgKiAxMDsKKwkJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKKwkJCQlhbHRmcmFjICs9ICgqY3ArKyAtICcwJyk7CisJCQl9CisJCX0KKwl9CisKKwlhbHQgPSAoMTAwMDAwMDAgKyAoYWx0c2lnbiAqIChhbHRtZXRlcnMgKiAxMDAgKyBhbHRmcmFjKSkpOworCisJd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKSAvKiBpZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0gKi8KKwkJY3ArKzsKKworCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorCQljcCsrOworCisJaWYgKGNwID49IG1heGNwKQorCQlnb3RvIGRlZmF1bHRzOworCisJc2l6ID0gcHJlY3NpemVfYXRvbigmY3ApOworCisJd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQkvKiBpZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0gKi8KKwkJY3ArKzsKKworCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorCQljcCsrOworCisJaWYgKGNwID49IG1heGNwKQorCQlnb3RvIGRlZmF1bHRzOworCisJaHAgPSBwcmVjc2l6ZV9hdG9uKCZjcCk7CisKKwl3aGlsZSAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpCS8qIGlmIHRyYWlsaW5nIGdhcmJhZ2Ugb3IgbSAqLworCQljcCsrOworCisJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpCisJCWNwKys7CisKKwlpZiAoY3AgPj0gbWF4Y3ApCisJCWdvdG8gZGVmYXVsdHM7CisKKwl2cCA9IHByZWNzaXplX2F0b24oJmNwKTsKKworIGRlZmF1bHRzOgorCisJYmNwID0gYmluYXJ5OworCSpiY3ArKyA9ICh1X2ludDhfdCkgMDsJLyogdmVyc2lvbiBieXRlICovCisJKmJjcCsrID0gc2l6OworCSpiY3ArKyA9IGhwOworCSpiY3ArKyA9IHZwOworCVBVVExPTkcobGF0aXQsYmNwKTsKKwlQVVRMT05HKGxvbmdpdCxiY3ApOworCVBVVExPTkcoYWx0LGJjcCk7CisKKwlyZXR1cm4gKDE2KTsJCS8qIHNpemUgb2YgUlIgaW4gb2N0ZXRzICovCit9CisKKy8qIHRha2VzIGFuIG9uLXRoZS13aXJlIExPQyBSUiBhbmQgZm9ybWF0cyBpdCBpbiBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdC4gKi8KK2NvbnN0IGNoYXIgKgorbG9jX250b2EoY29uc3QgdV9jaGFyICpiaW5hcnksIGNoYXIgKmFzY2lpKQoreworCXN0YXRpYyBjb25zdCBjaGFyICplcnJvciA9ICI/IjsKKwlzdGF0aWMgY2hhciB0bXBidWZbc2l6ZW9mCisiMTAwMCA2MCA2MC4wMDAgTiAxMDAwIDYwIDYwLjAwMCBXIC0xMjM0NTY3OC4wMG0gOTAwMDAwMDAuMDBtIDkwMDAwMDAwLjAwbSA5MDAwMDAwMC4wMG0iXTsKKwljb25zdCB1X2NoYXIgKmNwID0gYmluYXJ5OworCisJaW50IGxhdGRlZywgbGF0bWluLCBsYXRzZWMsIGxhdHNlY2ZyYWM7CisJaW50IGxvbmdkZWcsIGxvbmdtaW4sIGxvbmdzZWMsIGxvbmdzZWNmcmFjOworCWNoYXIgbm9ydGhzb3V0aCwgZWFzdHdlc3Q7CisJY29uc3QgY2hhciAqYWx0c2lnbjsKKwlpbnQgYWx0bWV0ZXJzLCBhbHRmcmFjOworCisJY29uc3QgdV9pbnQzMl90IHJlZmVyZW5jZWFsdCA9IDEwMDAwMCAqIDEwMDsKKworCWludDMyX3QgbGF0dmFsLCBsb25ndmFsLCBhbHR2YWw7CisJdV9pbnQzMl90IHRlbXBsOworCXVfaW50OF90IHNpemV2YWwsIGhwdmFsLCB2cHZhbCwgdmVyc2lvbnZhbDsKKworCWNoYXIgKnNpemVzdHIsICpocHN0ciwgKnZwc3RyOworCisJdmVyc2lvbnZhbCA9ICpjcCsrOworCisJaWYgKGFzY2lpID09IE5VTEwpCisJCWFzY2lpID0gdG1wYnVmOworCisJaWYgKHZlcnNpb252YWwpIHsKKwkJKHZvaWQpIHNwcmludGYoYXNjaWksICI7IGVycm9yOiB1bmtub3duIExPQyBSUiB2ZXJzaW9uIik7CisJCXJldHVybiAoYXNjaWkpOworCX0KKworCXNpemV2YWwgPSAqY3ArKzsKKworCWhwdmFsID0gKmNwKys7CisJdnB2YWwgPSAqY3ArKzsKKworCUdFVExPTkcodGVtcGwsIGNwKTsKKwlsYXR2YWwgPSAodGVtcGwgLSAoKHVuc2lnbmVkKTE8PDMxKSk7CisKKwlHRVRMT05HKHRlbXBsLCBjcCk7CisJbG9uZ3ZhbCA9ICh0ZW1wbCAtICgodW5zaWduZWQpMTw8MzEpKTsKKworCUdFVExPTkcodGVtcGwsIGNwKTsKKwlpZiAodGVtcGwgPCByZWZlcmVuY2VhbHQpIHsgLyogYmVsb3cgV0dTIDg0IHNwaGVyb2lkICovCisJCWFsdHZhbCA9IHJlZmVyZW5jZWFsdCAtIHRlbXBsOworCQlhbHRzaWduID0gIi0iOworCX0gZWxzZSB7CisJCWFsdHZhbCA9IHRlbXBsIC0gcmVmZXJlbmNlYWx0OworCQlhbHRzaWduID0gIiI7CisJfQorCisJaWYgKGxhdHZhbCA8IDApIHsKKwkJbm9ydGhzb3V0aCA9ICdTJzsKKwkJbGF0dmFsID0gLWxhdHZhbDsKKwl9IGVsc2UKKwkJbm9ydGhzb3V0aCA9ICdOJzsKKworCWxhdHNlY2ZyYWMgPSBsYXR2YWwgJSAxMDAwOworCWxhdHZhbCA9IGxhdHZhbCAvIDEwMDA7CisJbGF0c2VjID0gbGF0dmFsICUgNjA7CisJbGF0dmFsID0gbGF0dmFsIC8gNjA7CisJbGF0bWluID0gbGF0dmFsICUgNjA7CisJbGF0dmFsID0gbGF0dmFsIC8gNjA7CisJbGF0ZGVnID0gbGF0dmFsOworCisJaWYgKGxvbmd2YWwgPCAwKSB7CisJCWVhc3R3ZXN0ID0gJ1cnOworCQlsb25ndmFsID0gLWxvbmd2YWw7CisJfSBlbHNlCisJCWVhc3R3ZXN0ID0gJ0UnOworCisJbG9uZ3NlY2ZyYWMgPSBsb25ndmFsICUgMTAwMDsKKwlsb25ndmFsID0gbG9uZ3ZhbCAvIDEwMDA7CisJbG9uZ3NlYyA9IGxvbmd2YWwgJSA2MDsKKwlsb25ndmFsID0gbG9uZ3ZhbCAvIDYwOworCWxvbmdtaW4gPSBsb25ndmFsICUgNjA7CisJbG9uZ3ZhbCA9IGxvbmd2YWwgLyA2MDsKKwlsb25nZGVnID0gbG9uZ3ZhbDsKKworCWFsdGZyYWMgPSBhbHR2YWwgJSAxMDA7CisJYWx0bWV0ZXJzID0gKGFsdHZhbCAvIDEwMCk7CisKKwlzaXplc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EoKHVfaW50MzJfdClzaXpldmFsKSk7CisJaHBzdHIgPSBzdHJkdXAocHJlY3NpemVfbnRvYSgodV9pbnQzMl90KWhwdmFsKSk7CisJdnBzdHIgPSBzdHJkdXAocHJlY3NpemVfbnRvYSgodV9pbnQzMl90KXZwdmFsKSk7CisKKwlzcHJpbnRmKGFzY2lpLAorCSAgICAiJWQgJS4yZCAlLjJkLiUuM2QgJWMgJWQgJS4yZCAlLjJkLiUuM2QgJWMgJXMlZC4lLjJkbSAlc20gJXNtICVzbSIsCisJCWxhdGRlZywgbGF0bWluLCBsYXRzZWMsIGxhdHNlY2ZyYWMsIG5vcnRoc291dGgsCisJCWxvbmdkZWcsIGxvbmdtaW4sIGxvbmdzZWMsIGxvbmdzZWNmcmFjLCBlYXN0d2VzdCwKKwkJYWx0c2lnbiwgYWx0bWV0ZXJzLCBhbHRmcmFjLAorCQkoc2l6ZXN0ciAhPSBOVUxMKSA/IHNpemVzdHIgOiBlcnJvciwKKwkJKGhwc3RyICE9IE5VTEwpID8gaHBzdHIgOiBlcnJvciwKKwkJKHZwc3RyICE9IE5VTEwpID8gdnBzdHIgOiBlcnJvcik7CisKKwlpZiAoc2l6ZXN0ciAhPSBOVUxMKQorCQlmcmVlKHNpemVzdHIpOworCWlmIChocHN0ciAhPSBOVUxMKQorCQlmcmVlKGhwc3RyKTsKKwlpZiAodnBzdHIgIT0gTlVMTCkKKwkJZnJlZSh2cHN0cik7CisKKwlyZXR1cm4gKGFzY2lpKTsKK30KKworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBETlMgaGllcmFyY2h5IGxldmVscyBpbiB0aGUgbmFtZS4gKi8KK2ludAorZG5fY291bnRfbGFiZWxzKGNvbnN0IGNoYXIgKm5hbWUpIHsKKwlzaXplX3QgbGVuLCBpLCBjb3VudDsKKworCWxlbiA9IHN0cmxlbihuYW1lKTsKKwlmb3IgKGkgPSAwLCBjb3VudCA9IDA7IGkgPCBsZW47IGkrKykgeworCQkvKiBYWFggbmVlZCB0byBjaGVjayBmb3IgXC4gb3IgdXNlIG5hbWVkJ3MgbmxhYmVscygpLiAqLworCQlpZiAobmFtZVtpXSA9PSAnLicpCisJCQljb3VudCsrOworCX0KKworCS8qIGRvbid0IGNvdW50IGluaXRpYWwgd2lsZGNhcmQgKi8KKwlpZiAobmFtZVswXSA9PSAnKicpCisJCWlmIChjb3VudCkKKwkJCWNvdW50LS07CisKKwkvKiBkb24ndCBjb3VudCB0aGUgbnVsbCBsYWJlbCBmb3Igcm9vdC4gKi8KKwkvKiBpZiB0ZXJtaW5hdGluZyAnLicgbm90IGZvdW5kLCBtdXN0IGFkanVzdCAqLworCS8qIGNvdW50IHRvIGluY2x1ZGUgbGFzdCBsYWJlbCAqLworCWlmIChsZW4gPiAwICYmIG5hbWVbbGVuLTFdICE9ICcuJykKKwkJY291bnQrKzsKKwlfRElBR0FTU0VSVChfX3R5cGVfZml0KGludCwgY291bnQpKTsKKwlyZXR1cm4gKGludCljb3VudDsKK30KKworCisvKgorICogTWFrZSBkYXRlcyBleHByZXNzZWQgaW4gc2Vjb25kcy1zaW5jZS1KYW4tMS0xOTcwIGVhc3kgdG8gcmVhZC4KKyAqIFNJRyByZWNvcmRzIGFyZSByZXF1aXJlZCB0byBiZSBwcmludGVkIGxpa2UgdGhpcywgYnkgdGhlIFNlY3VyZSBETlMgUkZDLgorICovCitjaGFyICoKK3Bfc2Vjc3RvZGF0ZSAodV9sb25nIHNlY3MpIHsKKwkvKiBYWFggbm9ucmVlbnRyYW50ICovCisJc3RhdGljIGNoYXIgb3V0cHV0WzE1XTsJCS8qIFlZWVlNTURESEhNTVNTIGFuZCBudWxsICovCisJdGltZV90IG15Y2xvY2sgPSBzZWNzOworCXN0cnVjdCB0bSAqbXl0aW1lOworI2lmZGVmIEhBVkVfVElNRV9SCisJc3RydWN0IHRtIHJlczsKKworCW15dGltZSA9IGdtdGltZV9yKCZteWNsb2NrLCAmcmVzKTsKKyNlbHNlCisJbXl0aW1lID0gZ210aW1lKCZteWNsb2NrKTsKKyNlbmRpZgorCW15dGltZS0+dG1feWVhciArPSAxOTAwOworCW15dGltZS0+dG1fbW9uICs9IDE7CisJc3ByaW50ZihvdXRwdXQsICIlMDRkJTAyZCUwMmQlMDJkJTAyZCUwMmQiLAorCQlteXRpbWUtPnRtX3llYXIsIG15dGltZS0+dG1fbW9uLCBteXRpbWUtPnRtX21kYXksCisJCW15dGltZS0+dG1faG91ciwgbXl0aW1lLT50bV9taW4sIG15dGltZS0+dG1fc2VjKTsKKwlyZXR1cm4gKG91dHB1dCk7Cit9CisKK3VfaW50MTZfdAorcmVzX25hbWV0b2NsYXNzKGNvbnN0IGNoYXIgKmJ1ZiwgaW50ICpzdWNjZXNzcCkgeworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCWNoYXIgKmVuZHB0cjsKKwlpbnQgc3VjY2VzczsKKworCXJlc3VsdCA9IHN5bV9zdG9uKF9fcF9jbGFzc19zeW1zLCBidWYsICZzdWNjZXNzKTsKKwlpZiAoc3VjY2VzcykKKwkJZ290byBkb25lOworCisJaWYgKHN0cm5jYXNlY21wKGJ1ZiwgIkNMQVNTIiwgNSkgIT0gMCB8fAorCSAgICAhaXNkaWdpdCgodW5zaWduZWQgY2hhcilidWZbNV0pKQorCQlnb3RvIGRvbmU7CisJZXJybm8gPSAwOworCXJlc3VsdCA9IHN0cnRvdWwoYnVmICsgNSwgJmVuZHB0ciwgMTApOworCWlmIChlcnJubyA9PSAwICYmICplbmRwdHIgPT0gJ1wwJyAmJiByZXN1bHQgPD0gMHhmZmZmVSkKKwkJc3VjY2VzcyA9IDE7CisgZG9uZToKKwlpZiAoc3VjY2Vzc3ApCisJCSpzdWNjZXNzcCA9IHN1Y2Nlc3M7CisJcmV0dXJuICh1X2ludDE2X3QpKHJlc3VsdCk7Cit9CisKK3VfaW50MTZfdAorcmVzX25hbWV0b3R5cGUoY29uc3QgY2hhciAqYnVmLCBpbnQgKnN1Y2Nlc3NwKSB7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisJY2hhciAqZW5kcHRyOworCWludCBzdWNjZXNzOworCisJcmVzdWx0ID0gc3ltX3N0b24oX19wX3R5cGVfc3ltcywgYnVmLCAmc3VjY2Vzcyk7CisJaWYgKHN1Y2Nlc3MpCisJCWdvdG8gZG9uZTsKKworCWlmIChzdHJuY2FzZWNtcChidWYsICJ0eXBlIiwgNCkgIT0gMCB8fAorCSAgICAhaXNkaWdpdCgodW5zaWduZWQgY2hhcilidWZbNF0pKQorCQlnb3RvIGRvbmU7CisJZXJybm8gPSAwOworCXJlc3VsdCA9IHN0cnRvdWwoYnVmICsgNCwgJmVuZHB0ciwgMTApOworCWlmIChlcnJubyA9PSAwICYmICplbmRwdHIgPT0gJ1wwJyAmJiByZXN1bHQgPD0gMHhmZmZmVSkKKwkJc3VjY2VzcyA9IDE7CisgZG9uZToKKwlpZiAoc3VjY2Vzc3ApCisJCSpzdWNjZXNzcCA9IHN1Y2Nlc3M7CisJcmV0dXJuICh1X2ludDE2X3QpKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RlYnVnLmggYi9saWJjL2Rucy9yZXNvbHYvcmVzX2RlYnVnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGVidWcuaApyZW5hbWUgdG8gbGliYy9kbnMvcmVzb2x2L3Jlc19kZWJ1Zy5oCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvcmVzX2luaXQuYyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxY2JlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9yZXNvbHYvcmVzX2luaXQuYwpAQCAtMCwwICsxLDgyNSBAQAorLyoJJE5ldEJTRDogcmVzX2luaXQuYyx2IDEuOCAyMDA2LzAzLzE5IDAzOjEwOjA4IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5ODksIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlc19pbml0LmMJOC4xIChCZXJrZWxleSkgNi83LzkzIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IHJlc19pbml0LmMsdiAxLjkuMi41LjQuMiAyMDA0LzAzLzE2IDEyOjM0OjE4IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVzX2luaXQuYyx2IDEuOCAyMDA2LzAzLzE5IDAzOjEwOjA4IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKworI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KKyNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KKworLyogZW5zdXJlIHRoYXQgc29ja2FkZHJfaW42IGFuZCBJTjZBRERSX0FOWV9JTklUIGFyZSBkZWNsYXJlZCAvIGRlZmluZWQgKi8KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfbmV0aWQuaCIKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAicmVzX3ByaXZhdGUuaCIKKworLyogT3B0aW9ucy4gIFNob3VsZCBhbGwgYmUgbGVmdCBhbG9uZS4gKi8KKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorCitzdGF0aWMgdm9pZCByZXNfc2V0b3B0aW9ucyBfX1AoKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKKworI2lmZGVmIFJFU09MVlNPUlQKK3N0YXRpYyBjb25zdCBjaGFyIHNvcnRfbWFza1tdID0gIi8mIjsKKyNkZWZpbmUgSVNTT1JUTUFTSyhjaCkgKHN0cmNocihzb3J0X21hc2ssIGNoKSAhPSBOVUxMKQorc3RhdGljIHVpbnQzMl90IG5ldF9tYXNrKHN0cnVjdCBpbl9hZGRyKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoaXNhc2NpaSkJLyogWFhYIC0gY291bGQgYmUgYSBmdW5jdGlvbiAqLworIyBkZWZpbmUgaXNhc2NpaShjKSAoIShjICYgMDIwMCkpCisjZW5kaWYKKworLyoKKyAqIFJlc29sdmVyIHN0YXRlIGRlZmF1bHQgc2V0dGluZ3MuCisgKi8KKworLyoKKyAqIFNldCB1cCBkZWZhdWx0IHNldHRpbmdzLiAgSWYgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBleGlzdCwgdGhlIHZhbHVlcworICogdGhlcmUgd2lsbCBoYXZlIHByZWNlZGVuY2UuICBPdGhlcndpc2UsIHRoZSBzZXJ2ZXIgYWRkcmVzcyBpcyBzZXQgdG8KKyAqIElOQUREUl9BTlkgYW5kIHRoZSBkZWZhdWx0IGRvbWFpbiBuYW1lIGNvbWVzIGZyb20gdGhlIGdldGhvc3RuYW1lKCkuCisgKgorICogQW4gaW50ZXJyaW0gdmVyc2lvbiBvZiB0aGlzIGNvZGUgKEJJTkQgNC45LCBwcmUtNC40QlNEKSB1c2VkIDEyNy4wLjAuMQorICogcmF0aGVyIHRoYW4gSU5BRERSX0FOWSAoIjAuMC4wLjAiKSBhcyB0aGUgZGVmYXVsdCBuYW1lIHNlcnZlciBhZGRyZXNzCisgKiBzaW5jZSBpdCB3YXMgbm90ZWQgdGhhdCBJTkFERFJfQU5ZIGFjdHVhbGx5IG1lYW50IGBgdGhlIGZpcnN0IGludGVyZmFjZQorICogeW91ICJpZmNvbmZpZyInZCBhdCBib290IHRpbWUnJyBhbmQgaWYgdGhpcyB3YXMgYSBTTElQIG9yIFBQUCBpbnRlcmZhY2UsCisgKiBpdCBoYWQgdG8gYmUgInVwIiBpbiBvcmRlciBmb3IgeW91IHRvIHJlYWNoIHlvdXIgb3duIG5hbWUgc2VydmVyLiAgSXQKKyAqIHdhcyBsYXRlciBkZWNpZGVkIHRoYXQgc2luY2UgdGhlIHJlY29tbWVuZGVkIHByYWN0aWNlIGlzIHRvIGFsd2F5cworICogaW5zdGFsbCBsb2NhbCBzdGF0aWMgcm91dGVzIHRocm91Z2ggMTI3LjAuMC4xIGZvciBhbGwgeW91ciBuZXR3b3JrCisgKiBpbnRlcmZhY2VzLCB0aGF0IHdlIGNvdWxkIHNvbHZlIHRoaXMgcHJvYmxlbSB3aXRob3V0IGEgY29kZSBjaGFuZ2UuCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBzaG91bGQgYWx3YXlzIGJlIHVzZWQsIHNpbmNlIGl0IGlzIHRoZSBvbmx5IHdheQorICogdG8gc3BlY2lmeSBhIGRlZmF1bHQgZG9tYWluLiAgSWYgeW91IGFyZSBydW5uaW5nIGEgc2VydmVyIG9uIHlvdXIgbG9jYWwKKyAqIG1hY2hpbmUsIHlvdSBzaG91bGQgc2F5ICJuYW1lc2VydmVyIDAuMC4wLjAiIG9yICJuYW1lc2VydmVyIDEyNy4wLjAuMSIKKyAqIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisgKgorICogUmV0dXJuIDAgaWYgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwgLTEgb24gZXJyb3IKKyAqLworaW50CityZXNfbmluaXQocmVzX3N0YXRlIHN0YXRwKSB7CisJZXh0ZXJuIGludCBfX3Jlc192aW5pdChyZXNfc3RhdGUsIGludCk7CisKKwlyZXR1cm4gKF9fcmVzX3Zpbml0KHN0YXRwLCAwKSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIHJlYWNoYWJsZSBieSByZXNfZGF0YS5jIGJ1dCBub3QgcHVibGljbHkuICovCitpbnQKK19fcmVzX3Zpbml0KHJlc19zdGF0ZSBzdGF0cCwgaW50IHByZWluaXQpIHsKKyNpZiAhZGVmaW5lZChfX0FORFJPSURfXykKKwlyZWdpc3RlciBGSUxFICpmcDsKKyNlbmRpZgorCXJlZ2lzdGVyIGNoYXIgKmNwLCAqKnBwOworI2lmICFkZWZpbmVkKF9fQU5EUk9JRF9fKQorCXJlZ2lzdGVyIGludCBuOworI2VuZGlmCisJY2hhciBidWZbQlVGU0laXTsKKwlpbnQgbnNlcnYgPSAwOyAgICAvKiBudW1iZXIgb2YgbmFtZXNlcnZlciByZWNvcmRzIHJlYWQgZnJvbSBmaWxlICovCisjaWYgIWRlZmluZWQoX19BTkRST0lEX18pCisJaW50IGhhdmVlbnYgPSAwOworI2VuZGlmCisJaW50IGhhdmVzZWFyY2ggPSAwOworI2lmZGVmIFJFU09MVlNPUlQKKwlpbnQgbnNvcnQgPSAwOworI2VuZGlmCisjaWYgIWRlZmluZWQoX19BTkRST0lEX18pCisJY2hhciAqbmV0OworI2VuZGlmCisJaW50IGRvdHM7CisJdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIHVbMl07CisKKyAgICAgICAgaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19JTklUKSAhPSAwVSkKKyAgICAgICAgICAgICAgICByZXNfbmRlc3Ryb3koc3RhdHApOworCisJaWYgKCFwcmVpbml0KSB7CisJCXN0YXRwLT5uZXRpZCA9IE5FVElEX1VOU0VUOworCQlzdGF0cC0+cmV0cmFucyA9IFJFU19USU1FT1VUOworCQlzdGF0cC0+cmV0cnkgPSBSRVNfREZMUkVUUlk7CisJCXN0YXRwLT5vcHRpb25zID0gUkVTX0RFRkFVTFQ7CisJCXN0YXRwLT5pZCA9IHJlc19yYW5kb21pZCgpOworCQlzdGF0cC0+X21hcmsgPSBNQVJLX1VOU0VUOworCX0KKworCW1lbXNldCh1LCAwLCBzaXplb2YodSkpOworI2lmZGVmIFVTRUxPT1BCQUNLCisJdVtuc2Vydl0uc2luLnNpbl9hZGRyID0gaW5ldF9tYWtlYWRkcihJTl9MT09QQkFDS05FVCwgMSk7CisjZWxzZQorCXVbbnNlcnZdLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworI2VuZGlmCisJdVtuc2Vydl0uc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXVbbnNlcnZdLnNpbi5zaW5fcG9ydCA9IGh0b25zKE5BTUVTRVJWRVJfUE9SVCk7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwl1W25zZXJ2XS5zaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJbnNlcnYrKzsKKyNpZmRlZiBIQVNfSU5FVDZfU1RSVUNUUworI2lmZGVmIFVTRUxPT1BCQUNLCisJdVtuc2Vydl0uc2luNi5zaW42X2FkZHIgPSBpbjZhZGRyX2xvb3BiYWNrOworI2Vsc2UKKwl1W25zZXJ2XS5zaW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworI2VuZGlmCisJdVtuc2Vydl0uc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCXVbbnNlcnZdLnNpbjYuc2luNl9wb3J0ID0gaHRvbnMoTkFNRVNFUlZFUl9QT1JUKTsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCXVbbnNlcnZdLnNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwluc2VydisrOworI2VuZGlmCisJc3RhdHAtPm5zY291bnQgPSAwOworCXN0YXRwLT5uZG90cyA9IDE7CisJc3RhdHAtPnBmY29kZSA9IDA7CisJc3RhdHAtPl92Y3NvY2sgPSAtMTsKKwlzdGF0cC0+X2ZsYWdzID0gMDsKKwlzdGF0cC0+cWhvb2sgPSBOVUxMOworCXN0YXRwLT5yaG9vayA9IE5VTEw7CisJc3RhdHAtPl91Ll9leHQubnNjb3VudCA9IDA7CisJc3RhdHAtPl91Ll9leHQuZXh0ID0gbWFsbG9jKHNpemVvZigqc3RhdHAtPl91Ll9leHQuZXh0KSk7CisJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCAhPSBOVUxMKSB7CisJICAgICAgICBtZW1zZXQoc3RhdHAtPl91Ll9leHQuZXh0LCAwLCBzaXplb2YoKnN0YXRwLT5fdS5fZXh0LmV4dCkpOworCQlzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbMF0uc2luID0gc3RhdHAtPm5zYWRkcjsKKwkJc3RyY3B5KHN0YXRwLT5fdS5fZXh0LmV4dC0+bnN1ZmZpeCwgImlwNi5hcnBhIik7CisJCXN0cmNweShzdGF0cC0+X3UuX2V4dC5leHQtPm5zdWZmaXgyLCAiaXA2LmludCIpOworCX0KKwlzdGF0cC0+bnNvcnQgPSAwOworCXJlc19zZXRzZXJ2ZXJzKHN0YXRwLCB1LCBuc2Vydik7CisKKyNpZiAhZGVmaW5lZChfX0FORFJPSURfXykgLyogSUdOT1JFIFRIRSBFTlZJUk9OTUVOVCAqLworCS8qIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGxvY2FsIGRvbWFpbiBkZWZpbml0aW9uICovCisJaWYgKChjcCA9IGdldGVudigiTE9DQUxET01BSU4iKSkgIT0gTlVMTCkgeworCQkodm9pZClzdHJuY3B5KHN0YXRwLT5kZWZkbmFtZSwgY3AsIHNpemVvZihzdGF0cC0+ZGVmZG5hbWUpIC0gMSk7CisJCXN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKKwkJaGF2ZWVudisrOworCisJCS8qCisJCSAqIFNldCBzZWFyY2ggbGlzdCB0byBiZSBibGFuay1zZXBhcmF0ZWQgc3RyaW5ncworCQkgKiBmcm9tIHJlc3Qgb2YgZW52IHZhbHVlLiAgUGVybWl0cyB1c2VycyBvZiBMT0NBTERPTUFJTgorCQkgKiB0byBzdGlsbCBoYXZlIGEgc2VhcmNoIGxpc3QsIGFuZCBhbnlvbmUgdG8gc2V0IHRoZQorCQkgKiBvbmUgdGhhdCB0aGV5IHdhbnQgdG8gdXNlIGFzIGFuIGluZGl2aWR1YWwgKGV2ZW4gbW9yZQorCQkgKiBpbXBvcnRhbnQgbm93IHRoYXQgdGhlIHJmYzE1MzUgc3R1ZmYgcmVzdHJpY3RzIHNlYXJjaGVzKQorCQkgKi8KKwkJY3AgPSBzdGF0cC0+ZGVmZG5hbWU7CisJCXBwID0gc3RhdHAtPmRuc3JjaDsKKwkJKnBwKysgPSBjcDsKKwkJZm9yIChuID0gMDsgKmNwICYmIHBwIDwgc3RhdHAtPmRuc3JjaCArIE1BWEROU1JDSDsgY3ArKykgeworCQkJaWYgKCpjcCA9PSAnXG4nKQkvKiBzaWxseSBiYWNrd2FyZHMgY29tcGF0ICovCisJCQkJYnJlYWs7CisJCQllbHNlIGlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7CisJCQkJKmNwID0gMDsKKwkJCQluID0gMTsKKwkJCX0gZWxzZSBpZiAobikgeworCQkJCSpwcCsrID0gY3A7CisJCQkJbiA9IDA7CisJCQkJaGF2ZXNlYXJjaCA9IDE7CisJCQl9CisJCX0KKwkJLyogbnVsbCB0ZXJtaW5hdGUgbGFzdCBkb21haW4gaWYgdGhlcmUgYXJlIGV4Y2VzcyAqLworCQl3aGlsZSAoKmNwICE9ICdcMCcgJiYgKmNwICE9ICcgJyAmJiAqY3AgIT0gJ1x0JyAmJiAqY3AgIT0gJ1xuJykKKwkJCWNwKys7CisJCSpjcCA9ICdcMCc7CisJCSpwcCsrID0gMDsKKwl9CisJaWYgKG5zZXJ2ID4gMCkKKwkJc3RhdHAtPm5zY291bnQgPSBuc2VydjsKKyNlbmRpZgorCisjaWZuZGVmIEFORFJPSURfQ0hBTkdFUyAvKiAhQU5EUk9JRF9DSEFOR0VTIC0gSUdOT1JFIHJlc29sdi5jb25mIGluIEFuZHJvaWQgKi8KKyNkZWZpbmUJTUFUQ0gobGluZSwgbmFtZSkgXAorCSghc3RybmNtcChsaW5lLCBuYW1lLCBzaXplb2YobmFtZSkgLSAxKSAmJiBcCisJKGxpbmVbc2l6ZW9mKG5hbWUpIC0gMV0gPT0gJyAnIHx8IFwKKwkgbGluZVtzaXplb2YobmFtZSkgLSAxXSA9PSAnXHQnKSkKKworCW5zZXJ2ID0gMDsKKwlpZiAoKGZwID0gZm9wZW4oX1BBVEhfUkVTQ09ORiwgInIiKSkgIT0gTlVMTCkgeworCSAgICAvKiByZWFkIHRoZSBjb25maWcgZmlsZSAqLworCSAgICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICE9IE5VTEwpIHsKKwkJLyogc2tpcCBjb21tZW50cyAqLworCQlpZiAoKmJ1ZiA9PSAnOycgfHwgKmJ1ZiA9PSAnIycpCisJCQljb250aW51ZTsKKwkJLyogcmVhZCBkZWZhdWx0IGRvbWFpbiBuYW1lICovCisJCWlmIChNQVRDSChidWYsICJkb21haW4iKSkgeworCQkgICAgaWYgKGhhdmVlbnYpCS8qIHNraXAgaWYgaGF2ZSBmcm9tIGVudmlyb24gKi8KKwkJCSAgICBjb250aW51ZTsKKwkJICAgIGNwID0gYnVmICsgc2l6ZW9mKCJkb21haW4iKSAtIDE7CisJCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCSAgICBjcCsrOworCQkgICAgaWYgKCgqY3AgPT0gJ1wwJykgfHwgKCpjcCA9PSAnXG4nKSkKKwkJCSAgICBjb250aW51ZTsKKwkJICAgIHN0cm5jcHkoc3RhdHAtPmRlZmRuYW1lLCBjcCwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxKTsKKwkJICAgIHN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKKwkJICAgIGlmICgoY3AgPSBzdHJwYnJrKHN0YXRwLT5kZWZkbmFtZSwgIiBcdFxuIikpICE9IE5VTEwpCisJCQkgICAgKmNwID0gJ1wwJzsKKwkJICAgIGhhdmVzZWFyY2ggPSAwOworCQkgICAgY29udGludWU7CisJCX0KKwkJLyogc2V0IHNlYXJjaCBsaXN0ICovCisJCWlmIChNQVRDSChidWYsICJzZWFyY2giKSkgeworCQkgICAgaWYgKGhhdmVlbnYpCS8qIHNraXAgaWYgaGF2ZSBmcm9tIGVudmlyb24gKi8KKwkJCSAgICBjb250aW51ZTsKKwkJICAgIGNwID0gYnVmICsgc2l6ZW9mKCJzZWFyY2giKSAtIDE7CisJCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCSAgICBjcCsrOworCQkgICAgaWYgKCgqY3AgPT0gJ1wwJykgfHwgKCpjcCA9PSAnXG4nKSkKKwkJCSAgICBjb250aW51ZTsKKwkJICAgIHN0cm5jcHkoc3RhdHAtPmRlZmRuYW1lLCBjcCwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxKTsKKwkJICAgIHN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKKwkJICAgIGlmICgoY3AgPSBzdHJjaHIoc3RhdHAtPmRlZmRuYW1lLCAnXG4nKSkgIT0gTlVMTCkKKwkJCSAgICAqY3AgPSAnXDAnOworCQkgICAgLyoKKwkJICAgICAqIFNldCBzZWFyY2ggbGlzdCB0byBiZSBibGFuay1zZXBhcmF0ZWQgc3RyaW5ncworCQkgICAgICogb24gcmVzdCBvZiBsaW5lLgorCQkgICAgICovCisJCSAgICBjcCA9IHN0YXRwLT5kZWZkbmFtZTsKKwkJICAgIHBwID0gc3RhdHAtPmRuc3JjaDsKKwkJICAgICpwcCsrID0gY3A7CisJCSAgICBmb3IgKG4gPSAwOyAqY3AgJiYgcHAgPCBzdGF0cC0+ZG5zcmNoICsgTUFYRE5TUkNIOyBjcCsrKSB7CisJCQkgICAgaWYgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpIHsKKwkJCQkgICAgKmNwID0gMDsKKwkJCQkgICAgbiA9IDE7CisJCQkgICAgfSBlbHNlIGlmIChuKSB7CisJCQkJICAgICpwcCsrID0gY3A7CisJCQkJICAgIG4gPSAwOworCQkJICAgIH0KKwkJICAgIH0KKwkJICAgIC8qIG51bGwgdGVybWluYXRlIGxhc3QgZG9tYWluIGlmIHRoZXJlIGFyZSBleGNlc3MgKi8KKwkJICAgIHdoaWxlICgqY3AgIT0gJ1wwJyAmJiAqY3AgIT0gJyAnICYmICpjcCAhPSAnXHQnKQorCQkJICAgIGNwKys7CisJCSAgICAqY3AgPSAnXDAnOworCQkgICAgKnBwKysgPSAwOworCQkgICAgaGF2ZXNlYXJjaCA9IDE7CisJCSAgICBjb250aW51ZTsKKwkJfQorCQkvKiByZWFkIG5hbWVzZXJ2ZXJzIHRvIHF1ZXJ5ICovCisJCWlmIChNQVRDSChidWYsICJuYW1lc2VydmVyIikgJiYgbnNlcnYgPCBNQVhOUykgeworCQkgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWk7CisJCSAgICBjaGFyIHNidWZbTklfTUFYU0VSVl07CisJCSAgICBjb25zdCBzaXplX3QgbWluc2l6ID0KKwkJICAgICAgICBzaXplb2Yoc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzWzBdKTsKKworCQkgICAgY3AgPSBidWYgKyBzaXplb2YoIm5hbWVzZXJ2ZXIiKSAtIDE7CisJCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCWNwKys7CisJCSAgICBjcFtzdHJjc3BuKGNwLCAiOyMgXHRcbiIpXSA9ICdcMCc7CisJCSAgICBpZiAoKCpjcCAhPSAnXDAnKSAmJiAoKmNwICE9ICdcbicpKSB7CisJCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKwkJCWhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKKwkJCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsJLypkdW1teSovCisJCQloaW50cy5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUOworCQkJc3ByaW50ZihzYnVmLCAiJXUiLCBOQU1FU0VSVkVSX1BPUlQpOworCQkJaWYgKGdldGFkZHJpbmZvKGNwLCBzYnVmLCAmaGludHMsICZhaSkgPT0gMCAmJgorCQkJICAgIGFpLT5haV9hZGRybGVuIDw9IG1pbnNpeikgeworCQkJICAgIGlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkgeworCQkJCW1lbWNweSgmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW25zZXJ2XSwKKwkJCQkgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKKwkJCSAgICB9CisJCQkgICAgaWYgKGFpLT5haV9hZGRybGVuIDw9CisJCQkgICAgICAgIHNpemVvZihzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdKSkgeworCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKKwkJCQkgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKKwkJCSAgICB9IGVsc2UKKwkJCQlzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSAwOworCQkJICAgIGZyZWVhZGRyaW5mbyhhaSk7CisJCQkgICAgbnNlcnYrKzsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGNvbnRpbnVlOworCQl9CisJCWlmIChNQVRDSChidWYsICJzb3J0bGlzdCIpKSB7CisJCSAgICBzdHJ1Y3QgaW5fYWRkciBhOworCisJCSAgICBjcCA9IGJ1ZiArIHNpemVvZigic29ydGxpc3QiKSAtIDE7CisJCSAgICB3aGlsZSAobnNvcnQgPCBNQVhSRVNPTFZTT1JUKSB7CisJCQl3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCSAgICBjcCsrOworCQkJaWYgKCpjcCA9PSAnXDAnIHx8ICpjcCA9PSAnXG4nIHx8ICpjcCA9PSAnOycpCisJCQkgICAgYnJlYWs7CisJCQluZXQgPSBjcDsKKwkJCXdoaWxlICgqY3AgJiYgIUlTU09SVE1BU0soKmNwKSAmJiAqY3AgIT0gJzsnICYmCisJCQkgICAgICAgaXNhc2NpaSgqY3ApICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCQkJY3ArKzsKKwkJCW4gPSAqY3A7CisJCQkqY3AgPSAwOworCQkJaWYgKGluZXRfYXRvbihuZXQsICZhKSkgeworCQkJICAgIHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLmFkZHIgPSBhOworCQkJICAgIGlmIChJU1NPUlRNQVNLKG4pKSB7CisJCQkJKmNwKysgPSBuOworCQkJCW5ldCA9IGNwOworCQkJCXdoaWxlICgqY3AgJiYgKmNwICE9ICc7JyAmJgorCQkJCQlpc2FzY2lpKCpjcCkgJiYKKwkJCQkJIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJCQkgICAgY3ArKzsKKwkJCQluID0gKmNwOworCQkJCSpjcCA9IDA7CisJCQkJaWYgKGluZXRfYXRvbihuZXQsICZhKSkgeworCQkJCSAgICBzdGF0cC0+c29ydF9saXN0W25zb3J0XS5tYXNrID0gYS5zX2FkZHI7CisJCQkJfSBlbHNlIHsKKwkJCQkgICAgc3RhdHAtPnNvcnRfbGlzdFtuc29ydF0ubWFzayA9CisJCQkJCW5ldF9tYXNrKHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLmFkZHIpOworCQkJCX0KKwkJCSAgICB9IGVsc2UgeworCQkJCXN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLm1hc2sgPQorCQkJCSAgICBuZXRfbWFzayhzdGF0cC0+c29ydF9saXN0W25zb3J0XS5hZGRyKTsKKwkJCSAgICB9CisJCQkgICAgbnNvcnQrKzsKKwkJCX0KKwkJCSpjcCA9IG47CisJCSAgICB9CisJCSAgICBjb250aW51ZTsKKwkJfQorCQlpZiAoTUFUQ0goYnVmLCAib3B0aW9ucyIpKSB7CisJCSAgICByZXNfc2V0b3B0aW9ucyhzdGF0cCwgYnVmICsgc2l6ZW9mKCJvcHRpb25zIikgLSAxLCAiY29uZiIpOworCQkgICAgY29udGludWU7CisJCX0KKwkgICAgfQorCSAgICBpZiAobnNlcnYgPiAwKQorCQlzdGF0cC0+bnNjb3VudCA9IG5zZXJ2OworCSAgICBzdGF0cC0+bnNvcnQgPSBuc29ydDsKKwkgICAgKHZvaWQpIGZjbG9zZShmcCk7CisJfQorI2VuZGlmIC8qICFBTkRST0lEX0NIQU5HRVMgKi8KKy8qCisgKiBMYXN0IGNoYW5jZSB0byBnZXQgYSBuYW1lc2VydmVyLiAgVGhpcyBzaG91bGQgbm90IG5vcm1hbGx5CisgKiBiZSBuZWNlc3NhcnkKKyAqLworI2lmZGVmIE5PX1JFU09MVl9DT05GCisJaWYobnNlcnYgPT0gMCkKKwkJbnNlcnYgPSBnZXRfbmFtZXNlcnZlcnMoc3RhdHApOworI2VuZGlmCisKKwlpZiAoc3RhdHAtPmRlZmRuYW1lWzBdID09IDAgJiYKKwkgICAgZ2V0aG9zdG5hbWUoYnVmLCBzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDEpID09IDAgJiYKKwkgICAgKGNwID0gc3RyY2hyKGJ1ZiwgJy4nKSkgIT0gTlVMTCkKKwkJc3RyY3B5KHN0YXRwLT5kZWZkbmFtZSwgY3AgKyAxKTsKKworCS8qIGZpbmQgY29tcG9uZW50cyBvZiBsb2NhbCBkb21haW4gdGhhdCBtaWdodCBiZSBzZWFyY2hlZCAqLworCWlmIChoYXZlc2VhcmNoID09IDApIHsKKwkJcHAgPSBzdGF0cC0+ZG5zcmNoOworCQkqcHArKyA9IHN0YXRwLT5kZWZkbmFtZTsKKwkJKnBwID0gTlVMTDsKKworCQlkb3RzID0gMDsKKwkJZm9yIChjcCA9IHN0YXRwLT5kZWZkbmFtZTsgKmNwOyBjcCsrKQorCQkJZG90cyArPSAoKmNwID09ICcuJyk7CisKKwkJY3AgPSBzdGF0cC0+ZGVmZG5hbWU7CisJCXdoaWxlIChwcCA8IHN0YXRwLT5kbnNyY2ggKyBNQVhERkxTUkNIKSB7CisJCQlpZiAoZG90cyA8IExPQ0FMRE9NQUlOUEFSVFMpCisJCQkJYnJlYWs7CisJCQljcCA9IHN0cmNocihjcCwgJy4nKSArIDE7ICAgIC8qIHdlIGtub3cgdGhlcmUgaXMgb25lICovCisJCQkqcHArKyA9IGNwOworCQkJZG90cy0tOworCQl9CisJCSpwcCA9IE5VTEw7CisjaWZkZWYgREVCVUcKKwkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB7CisJCQlwcmludGYoIjs7IHJlc19pbml0KCkuLi4gZGVmYXVsdCBkbnNyY2ggbGlzdDpcbiIpOworCQkJZm9yIChwcCA9IHN0YXRwLT5kbnNyY2g7ICpwcDsgcHArKykKKwkJCQlwcmludGYoIjs7XHQlc1xuIiwgKnBwKTsKKwkJCXByaW50ZigiOztcdC4uRU5ELi5cbiIpOworCQl9CisjZW5kaWYKKwl9CisKKwlpZiAoKGNwID0gZ2V0ZW52KCJSRVNfT1BUSU9OUyIpKSAhPSBOVUxMKQorCQlyZXNfc2V0b3B0aW9ucyhzdGF0cCwgY3AsICJlbnYiKTsKKwlpZiAobnNlcnYgPiAwKSB7CisJCXN0YXRwLT5uc2NvdW50ID0gbnNlcnY7CisJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19JTklUOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorcmVzX3NldG9wdGlvbnMocmVzX3N0YXRlIHN0YXRwLCBjb25zdCBjaGFyICpvcHRpb25zLCBjb25zdCBjaGFyICpzb3VyY2UpCit7CisJY29uc3QgY2hhciAqY3AgPSBvcHRpb25zOworCWludCBpOworCXN0cnVjdCBfX3Jlc19zdGF0ZV9leHQgKmV4dCA9IHN0YXRwLT5fdS5fZXh0LmV4dDsKKworI2lmZGVmIERFQlVHCisJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQlwcmludGYoIjs7IHJlc19zZXRvcHRpb25zKFwiJXNcIiwgXCIlc1wiKS4uLlxuIiwKKwkJICAgICAgIG9wdGlvbnMsIHNvdXJjZSk7CisjZW5kaWYKKwl3aGlsZSAoKmNwKSB7CisJCS8qIHNraXAgbGVhZGluZyBhbmQgaW5uZXIgcnVucyBvZiBzcGFjZXMgKi8KKwkJd2hpbGUgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpCisJCQljcCsrOworCQkvKiBzZWFyY2ggZm9yIGFuZCBwcm9jZXNzIGluZGl2aWR1YWwgb3B0aW9ucyAqLworCQlpZiAoIXN0cm5jbXAoY3AsICJuZG90czoiLCBzaXplb2YoIm5kb3RzOiIpIC0gMSkpIHsKKwkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJuZG90czoiKSAtIDEpOworCQkJaWYgKGkgPD0gUkVTX01BWE5ET1RTKQorCQkJCXN0YXRwLT5uZG90cyA9IGk7CisJCQllbHNlCisJCQkJc3RhdHAtPm5kb3RzID0gUkVTX01BWE5ET1RTOworI2lmZGVmIERFQlVHCisJCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQkJcHJpbnRmKCI7O1x0bmRvdHM9JWRcbiIsIHN0YXRwLT5uZG90cyk7CisjZW5kaWYKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgInRpbWVvdXQ6Iiwgc2l6ZW9mKCJ0aW1lb3V0OiIpIC0gMSkpIHsKKwkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJ0aW1lb3V0OiIpIC0gMSk7CisJCQlpZiAoaSA8PSBSRVNfTUFYUkVUUkFOUykKKwkJCQlzdGF0cC0+cmV0cmFucyA9IGk7CisJCQllbHNlCisJCQkJc3RhdHAtPnJldHJhbnMgPSBSRVNfTUFYUkVUUkFOUzsKKyNpZmRlZiBERUJVRworCQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJCXByaW50ZigiOztcdHRpbWVvdXQ9JWRcbiIsIHN0YXRwLT5yZXRyYW5zKTsKKyNlbmRpZgorCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiYXR0ZW1wdHM6Iiwgc2l6ZW9mKCJhdHRlbXB0czoiKSAtIDEpKXsKKwkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJhdHRlbXB0czoiKSAtIDEpOworCQkJaWYgKGkgPD0gUkVTX01BWFJFVFJZKQorCQkJCXN0YXRwLT5yZXRyeSA9IGk7CisJCQllbHNlCisJCQkJc3RhdHAtPnJldHJ5ID0gUkVTX01BWFJFVFJZOworI2lmZGVmIERFQlVHCisJCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQkJcHJpbnRmKCI7O1x0YXR0ZW1wdHM9JWRcbiIsIHN0YXRwLT5yZXRyeSk7CisjZW5kaWYKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgImRlYnVnIiwgc2l6ZW9mKCJkZWJ1ZyIpIC0gMSkpIHsKKyNpZmRlZiBERUJVRworCQkJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpKSB7CisJCQkJcHJpbnRmKCI7OyByZXNfc2V0b3B0aW9ucyhcIiVzXCIsIFwiJXNcIikuLlxuIiwKKwkJCQkgICAgICAgb3B0aW9ucywgc291cmNlKTsKKwkJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfREVCVUc7CisJCQl9CisJCQlwcmludGYoIjs7XHRkZWJ1Z1xuIik7CisjZW5kaWYKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgIm5vX3RsZF9xdWVyeSIsCisJCQkJICAgIHNpemVvZigibm9fdGxkX3F1ZXJ5IikgLSAxKSB8fAorCQkJICAgIXN0cm5jbXAoY3AsICJuby10bGQtcXVlcnkiLAorCQkJCSAgICBzaXplb2YoIm5vLXRsZC1xdWVyeSIpIC0gMSkpIHsKKwkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19OT1RMRFFVRVJZOworCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiaW5ldDYiLCBzaXplb2YoImluZXQ2IikgLSAxKSkgeworCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX1VTRV9JTkVUNjsKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgInJvdGF0ZSIsIHNpemVvZigicm90YXRlIikgLSAxKSkgeworCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX1JPVEFURTsKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgIm5vLWNoZWNrLW5hbWVzIiwKKwkJCQkgICAgc2l6ZW9mKCJuby1jaGVjay1uYW1lcyIpIC0gMSkpIHsKKwkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19OT0NIRUNLTkFNRTsKKwkJfQorI2lmZGVmIFJFU19VU0VfRUROUzAKKwkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJlZG5zMCIsIHNpemVvZigiZWRuczAiKSAtIDEpKSB7CisJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfVVNFX0VETlMwOworCQl9CisjZW5kaWYKKwkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJkbmFtZSIsIHNpemVvZigiZG5hbWUiKSAtIDEpKSB7CisJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfVVNFX0ROQU1FOworCQl9CisJCWVsc2UgaWYgKCFzdHJuY21wKGNwLCAibmliYmxlOiIsIHNpemVvZigibmliYmxlOiIpIC0gMSkpIHsKKwkJCWlmIChleHQgPT0gTlVMTCkKKwkJCQlnb3RvIHNraXA7CisJCQljcCArPSBzaXplb2YoIm5pYmJsZToiKSAtIDE7CisJCQlpID0gTUlOKHN0cmNzcG4oY3AsICIgXHQiKSwgc2l6ZW9mKGV4dC0+bnN1ZmZpeCkgLSAxKTsKKwkJCXN0cm5jcHkoZXh0LT5uc3VmZml4LCBjcCwgKHNpemVfdClpKTsKKwkJCWV4dC0+bnN1ZmZpeFtpXSA9ICdcMCc7CisJCX0KKwkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJuaWJibGUyOiIsIHNpemVvZigibmliYmxlMjoiKSAtIDEpKSB7CisJCQlpZiAoZXh0ID09IE5VTEwpCisJCQkJZ290byBza2lwOworCQkJY3AgKz0gc2l6ZW9mKCJuaWJibGUyOiIpIC0gMTsKKwkJCWkgPSBNSU4oc3RyY3NwbihjcCwgIiBcdCIpLCBzaXplb2YoZXh0LT5uc3VmZml4MikgLSAxKTsKKwkJCXN0cm5jcHkoZXh0LT5uc3VmZml4MiwgY3AsIChzaXplX3QpaSk7CisJCQlleHQtPm5zdWZmaXgyW2ldID0gJ1wwJzsKKwkJfQorCQllbHNlIGlmICghc3RybmNtcChjcCwgInY2cmV2bW9kZToiLCBzaXplb2YoInY2cmV2bW9kZToiKSAtIDEpKSB7CisJCQljcCArPSBzaXplb2YoInY2cmV2bW9kZToiKSAtIDE7CisJCQkvKiAibmliYmxlIiBhbmQgImJpdHN0cmluZyIgdXNlZCB0byBiZSB2YWxpZCAqLworCQkJaWYgKCFzdHJuY21wKGNwLCAic2luZ2xlIiwgc2l6ZW9mKCJzaW5nbGUiKSAtIDEpKSB7CisJCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX05PX05JQkJMRTI7CisJCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiYm90aCIsIHNpemVvZigiYm90aCIpIC0gMSkpIHsKKwkJCQlzdGF0cC0+b3B0aW9ucyAmPQorCQkJCQkgflJFU19OT19OSUJCTEUyOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJLyogWFhYIC0gcHJpbnQgYSB3YXJuaW5nIGhlcmU/ICovCisJCX0KKyAgIHNraXA6CisJCS8qIHNraXAgdG8gbmV4dCBydW4gb2Ygc3BhY2VzICovCisJCXdoaWxlICgqY3AgJiYgKmNwICE9ICcgJyAmJiAqY3AgIT0gJ1x0JykKKwkJCWNwKys7CisJfQorfQorCisjaWZkZWYgUkVTT0xWU09SVAorLyogWFhYIC0gc2hvdWxkIHJlYWxseSBzdXBwb3J0IENJRFIgd2hpY2ggbWVhbnMgZXhwbGljaXQgbWFza3MgYWx3YXlzLiAqLworc3RhdGljIHVpbnQzMl90CituZXRfbWFzayhzdHJ1Y3QgaW5fYWRkciBpbikJLyohPCBYWFggLSBzaG91bGQgcmVhbGx5IHVzZSBzeXN0ZW0ncyB2ZXJzaW9uIG9mIHRoaXMgKi8KK3sKKwlyZWdpc3RlciB1aW50MzJfdCBpID0gbnRvaGwoaW4uc19hZGRyKTsKKworCWlmIChJTl9DTEFTU0EoaSkpCisJCXJldHVybiAoaHRvbmwoSU5fQ0xBU1NBX05FVCkpOworCWVsc2UgaWYgKElOX0NMQVNTQihpKSkKKwkJcmV0dXJuIChodG9ubChJTl9DTEFTU0JfTkVUKSk7CisJcmV0dXJuIChodG9ubChJTl9DTEFTU0NfTkVUKSk7Cit9CisjZW5kaWYKKworI2lmZGVmIEFORFJPSURfQ0hBTkdFUworc3RhdGljIGludAorcmVhbF9yYW5kb21pZCh1X2ludCAqcmFuZG9tX3ZhbHVlKSB7CisJLyogb3BlbiB0aGUgbm9uYmxvY2tpbmcgcmFuZG9tIGRldmljZSwgcmV0dXJuaW5nIC0xIG9uIGZhaWx1cmUgKi8KKwlpbnQgcmFuZG9tX2RldmljZSA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZIHwgT19DTE9FWEVDKTsKKwlpZiAocmFuZG9tX2RldmljZSA8IDApIHsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHJlYWQgZnJvbSB0aGUgcmFuZG9tIGRldmljZSwgcmV0dXJuaW5nIC0xIG9uIGZhaWx1cmUgKG9yIHRvbyBtYW55IHJldHJpZXMpKi8KKwlmb3IgKHVfaW50IHJldHJ5ID0gNTsgcmV0cnkgPiAwOyByZXRyeS0tKSB7CisJCWludCByZXR2YWwgPSByZWFkKHJhbmRvbV9kZXZpY2UsIHJhbmRvbV92YWx1ZSwgc2l6ZW9mKHVfaW50KSk7CisJCWlmIChyZXR2YWwgPT0gc2l6ZW9mKHVfaW50KSkgeworCQkJKnJhbmRvbV92YWx1ZSAmPSAweGZmZmY7CisJCQljbG9zZShyYW5kb21fZGV2aWNlKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKChyZXR2YWwgPCAwKSAmJiAoZXJybm8gIT0gRUlOVFIpKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCWNsb3NlKHJhbmRvbV9kZXZpY2UpOworCXJldHVybiAtMTsKK30KKyNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KKwordV9pbnQKK3Jlc19yYW5kb21pZCh2b2lkKSB7CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisJaW50IHN0YXR1cyA9IDA7CisJdV9pbnQgb3V0cHV0ID0gMDsKKwlzdGF0dXMgPSByZWFsX3JhbmRvbWlkKCZvdXRwdXQpOworCWlmIChzdGF0dXMgIT0gLTEpIHsKKwkJcmV0dXJuIG91dHB1dDsKKwl9CisjZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCisJc3RydWN0IHRpbWV2YWwgbm93OworCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKwlyZXR1cm4gKDB4ZmZmZiAmIChub3cudHZfc2VjIF4gbm93LnR2X3VzZWMgXiBnZXRwaWQoKSkpOworfQorCisvKiUKKyAqIFRoaXMgcm91dGluZSBpcyBmb3IgY2xvc2luZyB0aGUgc29ja2V0IGlmIGEgdmlydHVhbCBjaXJjdWl0IGlzIHVzZWQgYW5kCisgKiB0aGUgcHJvZ3JhbSB3YW50cyB0byBjbG9zZSBpdC4gIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZW5kaG9zdGVudCgpCisgKiB3aGljaCBleHBlY3RzIHRvIGNsb3NlIHRoZSBzb2NrZXQuCisgKgorICogVGhpcyByb3V0aW5lIGlzIG5vdCBleHBlY3RlZCB0byBiZSB1c2VyIHZpc2libGUuCisgKi8KK3ZvaWQKK3Jlc19uY2xvc2UocmVzX3N0YXRlIHN0YXRwKQoreworCWludCBuczsKKworCWlmIChzdGF0cC0+X3Zjc29jayA+PSAwKSB7CisJCSh2b2lkKSBjbG9zZShzdGF0cC0+X3Zjc29jayk7CisJCXN0YXRwLT5fdmNzb2NrID0gLTE7CisJCXN0YXRwLT5fZmxhZ3MgJj0gfihSRVNfRl9WQyB8IFJFU19GX0NPTk4pOworCX0KKwlmb3IgKG5zID0gMDsgbnMgPCBzdGF0cC0+X3UuX2V4dC5uc2NvdW50OyBucysrKSB7CisJCWlmIChzdGF0cC0+X3UuX2V4dC5uc3NvY2tzW25zXSAhPSAtMSkgeworCQkJKHZvaWQpIGNsb3NlKHN0YXRwLT5fdS5fZXh0Lm5zc29ja3NbbnNdKTsKKwkJCXN0YXRwLT5fdS5fZXh0Lm5zc29ja3NbbnNdID0gLTE7CisJCX0KKwl9Cit9CisKK3ZvaWQKK3Jlc19uZGVzdHJveShyZXNfc3RhdGUgc3RhdHApCit7CisJcmVzX25jbG9zZShzdGF0cCk7CisJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCAhPSBOVUxMKQorCQlmcmVlKHN0YXRwLT5fdS5fZXh0LmV4dCk7CisJc3RhdHAtPm9wdGlvbnMgJj0gflJFU19JTklUOworCXN0YXRwLT5fdS5fZXh0LmV4dCA9IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorcmVzX2dldF9uaWJibGVzdWZmaXgocmVzX3N0YXRlIHN0YXRwKQoreworCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCisJCXJldHVybiAoc3RhdHAtPl91Ll9leHQuZXh0LT5uc3VmZml4KTsKKwlyZXR1cm4gKCJpcDYuYXJwYSIpOworfQorCitjb25zdCBjaGFyICoKK3Jlc19nZXRfbmliYmxlc3VmZml4MihyZXNfc3RhdGUgc3RhdHApCit7CisJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKKwkJcmV0dXJuIChzdGF0cC0+X3UuX2V4dC5leHQtPm5zdWZmaXgyKTsKKwlyZXR1cm4gKCJpcDYuaW50Iik7Cit9CisKK3ZvaWQKK3Jlc19zZXRzZXJ2ZXJzKHJlc19zdGF0ZSBzdGF0cCwgY29uc3QgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICpzZXQsIGludCBjbnQpCit7CisJaW50IGksIG5zZXJ2OworCXNpemVfdCBzaXplOworCisJLyogY2xvc2Ugb3BlbiBzZXJ2ZXJzICovCisJcmVzX25jbG9zZShzdGF0cCk7CisKKwkvKiBjYXVzZSBydHQgdGltZXMgdG8gYmUgZm9yZ290dGVuICovCisJc3RhdHAtPl91Ll9leHQubnNjb3VudCA9IDA7CisKKwluc2VydiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNudCAmJiBuc2VydiA8IE1BWE5TOyBpKyspIHsKKwkJc3dpdGNoIChzZXQtPnNpbi5zaW5fZmFtaWx5KSB7CisJCWNhc2UgQUZfSU5FVDoKKwkJCXNpemUgPSBzaXplb2Yoc2V0LT5zaW4pOworCQkJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKKwkJCQltZW1jcHkoJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tuc2Vydl0sCisJCQkJCSZzZXQtPnNpbiwgc2l6ZSk7CisJCQlpZiAoc2l6ZSA8PSBzaXplb2Yoc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSkpCisJCQkJbWVtY3B5KCZzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLAorCQkJCQkmc2V0LT5zaW4sIHNpemUpOworCQkJZWxzZQorCQkJCXN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0uc2luX2ZhbWlseSA9IDA7CisJCQluc2VydisrOworCQkJYnJlYWs7CisKKyNpZmRlZiBIQVNfSU5FVDZfU1RSVUNUUworCQljYXNlIEFGX0lORVQ2OgorCQkJc2l6ZSA9IHNpemVvZihzZXQtPnNpbjYpOworCQkJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKKwkJCQltZW1jcHkoJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tuc2Vydl0sCisJCQkJCSZzZXQtPnNpbjYsIHNpemUpOworCQkJaWYgKHNpemUgPD0gc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0pKQorCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKKwkJCQkJJnNldC0+c2luNiwgc2l6ZSk7CisJCQllbHNlCisJCQkJc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XS5zaW5fZmFtaWx5ID0gMDsKKwkJCW5zZXJ2Kys7CisJCQlicmVhazsKKyNlbmRpZgorCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlzZXQrKzsKKwl9CisJc3RhdHAtPm5zY291bnQgPSBuc2VydjsKKworfQorCitpbnQKK3Jlc19nZXRzZXJ2ZXJzKHJlc19zdGF0ZSBzdGF0cCwgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICpzZXQsIGludCBjbnQpCit7CisJaW50IGk7CisJc2l6ZV90IHNpemU7CisJdWludDE2X3QgZmFtaWx5OworCisJZm9yIChpID0gMDsgaSA8IHN0YXRwLT5uc2NvdW50ICYmIGkgPCBjbnQ7IGkrKykgeworCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQorCQkJZmFtaWx5ID0gc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW2ldLnNpbi5zaW5fZmFtaWx5OworCQllbHNlCisJCQlmYW1pbHkgPSBzdGF0cC0+bnNhZGRyX2xpc3RbaV0uc2luX2ZhbWlseTsKKworCQlzd2l0Y2ggKGZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCQlzaXplID0gc2l6ZW9mKHNldC0+c2luKTsKKwkJCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCisJCQkJbWVtY3B5KCZzZXQtPnNpbiwKKwkJCQkgICAgICAgJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tpXSwKKwkJCQkgICAgICAgc2l6ZSk7CisJCQllbHNlCisJCQkJbWVtY3B5KCZzZXQtPnNpbiwgJnN0YXRwLT5uc2FkZHJfbGlzdFtpXSwKKwkJCQkgICAgICAgc2l6ZSk7CisJCQlicmVhazsKKworI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCisJCWNhc2UgQUZfSU5FVDY6CisJCQlzaXplID0gc2l6ZW9mKHNldC0+c2luNik7CisJCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQorCQkJCW1lbWNweSgmc2V0LT5zaW42LAorCQkJCSAgICAgICAmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW2ldLAorCQkJCSAgICAgICBzaXplKTsKKwkJCWVsc2UKKwkJCQltZW1jcHkoJnNldC0+c2luNiwgJnN0YXRwLT5uc2FkZHJfbGlzdFtpXSwKKwkJCQkgICAgICAgc2l6ZSk7CisJCQlicmVhazsKKyNlbmRpZgorCisJCWRlZmF1bHQ6CisJCQlzZXQtPnNpbi5zaW5fZmFtaWx5ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXNldCsrOworCX0KKwlyZXR1cm4gKHN0YXRwLT5uc2NvdW50KTsKK30KKworI2lmZGVmIEFORFJPSURfQ0hBTkdFUwordm9pZCByZXNfc2V0bmV0aWQocmVzX3N0YXRlIHN0YXRwLCB1bnNpZ25lZCBuZXRpZCkKK3sKKwlpZiAoc3RhdHAgIT0gTlVMTCkgeworCQlzdGF0cC0+bmV0aWQgPSBuZXRpZDsKKwl9Cit9CisKK3ZvaWQgcmVzX3NldG1hcmsocmVzX3N0YXRlIHN0YXRwLCB1bnNpZ25lZCBtYXJrKQoreworCWlmIChzdGF0cCAhPSBOVUxMKSB7CisJCXN0YXRwLT5fbWFyayA9IG1hcms7CisJfQorfQorCisjZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvcmVzX21rcXVlcnkuYyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfbWtxdWVyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzZhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Rucy9yZXNvbHYvcmVzX21rcXVlcnkuYwpAQCAtMCwwICsxLDI3NiBAQAorLyoJJE5ldEJTRDogcmVzX21rcXVlcnkuYyx2IDEuNiAyMDA2LzAxLzI0IDE3OjQwOjMyIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAocXVlcnkgaWQgcmFuZG9taXphdGlvbikKKyAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX21rcXVlcnkuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX21rcXVlcnkuYyx2IDEuMS4yLjIuNC4yIDIwMDQvMDMvMTYgMTI6MzQ6MTggbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfbWtxdWVyeS5jLHYgMS42IDIwMDYvMDEvMjQgMTc6NDA6MzIgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIE9wdGlvbnMuICBMZWF2ZSB0aGVtIG9uLiAqLworI2lmbmRlZiBERUJVRworI2RlZmluZSBERUJVRworI2VuZGlmCisKKyNpZm5kZWYgbGludAorI2RlZmluZSBVTlVTRUQoYSkJKHZvaWQpJmEKKyNlbHNlCisjZGVmaW5lIFVOVVNFRChhKQlhID0gYQorI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyICpfcmVzX29wY29kZXNbXTsKKworLyoKKyAqIEZvcm0gYWxsIHR5cGVzIG9mIHF1ZXJpZXMuCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSByZXN1bHQgb3IgLTEuCisgKi8KK2ludAorcmVzX25ta3F1ZXJ5KHJlc19zdGF0ZSBzdGF0cCwKKwkgICAgIGludCBvcCwJCQkvKiBvcGNvZGUgb2YgcXVlcnkgKi8KKwkgICAgIGNvbnN0IGNoYXIgKmRuYW1lLAkJLyogZG9tYWluIG5hbWUgKi8KKwkgICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgICBjb25zdCB1X2NoYXIgKmRhdGEsCS8qIHJlc291cmNlIHJlY29yZCBkYXRhICovCisJICAgICBpbnQgZGF0YWxlbiwJCS8qIGxlbmd0aCBvZiBkYXRhICovCisJICAgICBjb25zdCB1X2NoYXIgKm5ld3JyX2luLAkvKiBuZXcgcnIgZm9yIG1vZGlmeSBvciBhcHBlbmQgKi8KKwkgICAgIHVfY2hhciAqYnVmLAkJLyogYnVmZmVyIHRvIHB1dCBxdWVyeSAqLworCSAgICAgaW50IGJ1ZmxlbikJCS8qIHNpemUgb2YgYnVmZmVyICovCit7CisJcmVnaXN0ZXIgSEVBREVSICpocDsKKwlyZWdpc3RlciB1X2NoYXIgKmNwLCAqZXA7CisJcmVnaXN0ZXIgaW50IG47CisJdV9jaGFyICpkbnB0cnNbMjBdLCAqKmRwcCwgKipsYXN0ZG5wdHI7CisKKwlVTlVTRUQobmV3cnJfaW4pOworCisjaWZkZWYgREVCVUcKKwlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCXByaW50ZigiOzsgcmVzX25ta3F1ZXJ5KCVzLCAlcywgJXMsICVzKVxuIiwKKwkJICAgICAgIF9yZXNfb3Bjb2Rlc1tvcF0sIGRuYW1lLCBwX2NsYXNzKGNsYXNzKSwgcF90eXBlKHR5cGUpKTsKKyNlbmRpZgorCS8qCisJICogSW5pdGlhbGl6ZSBoZWFkZXIgZmllbGRzLgorCSAqLworCWlmICgoYnVmID09IE5VTEwpIHx8IChidWZsZW4gPCBIRklYRURTWikpCisJCXJldHVybiAoLTEpOworCW1lbXNldChidWYsIDAsIEhGSVhFRFNaKTsKKwlocCA9IChIRUFERVIgKikodm9pZCAqKWJ1ZjsKKwlocC0+aWQgPSBodG9ucyhyZXNfcmFuZG9taWQoKSk7CisJaHAtPm9wY29kZSA9IG9wOworCWhwLT5yZCA9IChzdGF0cC0+b3B0aW9ucyAmIFJFU19SRUNVUlNFKSAhPSAwVTsKKwlocC0+cmNvZGUgPSBOT0VSUk9SOworCWNwID0gYnVmICsgSEZJWEVEU1o7CisJZXAgPSBidWYgKyBidWZsZW47CisJZHBwID0gZG5wdHJzOworCSpkcHArKyA9IGJ1ZjsKKwkqZHBwKysgPSBOVUxMOworCWxhc3RkbnB0ciA9IGRucHRycyArIHNpemVvZiBkbnB0cnMgLyBzaXplb2YgZG5wdHJzWzBdOworCS8qCisJICogcGVyZm9ybSBvcGNvZGUgc3BlY2lmaWMgcHJvY2Vzc2luZworCSAqLworCXN3aXRjaCAob3ApIHsKKwljYXNlIFFVRVJZOgkvKkZBTExUSFJPVUdIKi8KKwljYXNlIE5TX05PVElGWV9PUDoKKwkJaWYgKGVwIC0gY3AgPCBRRklYRURTWikKKwkJCXJldHVybiAoLTEpOworCQlpZiAoKG4gPSBkbl9jb21wKGRuYW1lLCBjcCwgZXAgLSBjcCAtIFFGSVhFRFNaLCBkbnB0cnMsCisJCSAgICBsYXN0ZG5wdHIpKSA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJY3AgKz0gbjsKKwkJbnNfcHV0MTYodHlwZSwgY3ApOworCQljcCArPSBJTlQxNlNaOworCQluc19wdXQxNihjbGFzcywgY3ApOworCQljcCArPSBJTlQxNlNaOworCQlocC0+cWRjb3VudCA9IGh0b25zKDEpOworCQlpZiAob3AgPT0gUVVFUlkgfHwgZGF0YSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIE1ha2UgYW4gYWRkaXRpb25hbCByZWNvcmQgZm9yIGNvbXBsZXRpb24gZG9tYWluLgorCQkgKi8KKwkJaWYgKChlcCAtIGNwKSA8IFJSRklYRURTWikKKwkJCXJldHVybiAoLTEpOworCQluID0gZG5fY29tcCgoY29uc3QgY2hhciAqKWRhdGEsIGNwLCBlcCAtIGNwIC0gUlJGSVhFRFNaLAorCQkJICAgIGRucHRycywgbGFzdGRucHRyKTsKKwkJaWYgKG4gPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWNwICs9IG47CisJCW5zX3B1dDE2KFRfTlVMTCwgY3ApOworCQljcCArPSBJTlQxNlNaOworCQluc19wdXQxNihjbGFzcywgY3ApOworCQljcCArPSBJTlQxNlNaOworCQluc19wdXQzMigwLCBjcCk7CisJCWNwICs9IElOVDMyU1o7CisJCW5zX3B1dDE2KDAsIGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsKKwkJaHAtPmFyY291bnQgPSBodG9ucygxKTsKKwkJYnJlYWs7CisKKwljYXNlIElRVUVSWToKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSBhbnN3ZXIgc2VjdGlvbgorCQkgKi8KKwkJaWYgKGVwIC0gY3AgPCAxICsgUlJGSVhFRFNaICsgZGF0YWxlbikKKwkJCXJldHVybiAoLTEpOworCQkqY3ArKyA9ICdcMCc7CS8qIG5vIGRvbWFpbiBuYW1lICovCisJCW5zX3B1dDE2KHR5cGUsIGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsKKwkJbnNfcHV0MTYoY2xhc3MsIGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsKKwkJbnNfcHV0MzIoMCwgY3ApOworCQljcCArPSBJTlQzMlNaOworCQluc19wdXQxNihkYXRhbGVuLCBjcCk7CisJCWNwICs9IElOVDE2U1o7CisJCWlmIChkYXRhbGVuKSB7CisJCQltZW1jcHkoY3AsIGRhdGEsIChzaXplX3QpZGF0YWxlbik7CisJCQljcCArPSBkYXRhbGVuOworCQl9CisJCWhwLT5hbmNvdW50ID0gaHRvbnMoMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAoY3AgLSBidWYpOworfQorCisjaWZkZWYgUkVTX1VTRV9FRE5TMAorLyogYXR0YWNoIE9QVCBwc2V1ZG8tUlIsIGFzIGRvY3VtZW50ZWQgaW4gUkZDMjY3MSAoRUROUzApLiAqLworI2lmbmRlZiBUX09QVAorI2RlZmluZSBUX09QVAk0MQorI2VuZGlmCisKK2ludAorcmVzX25vcHQocmVzX3N0YXRlIHN0YXRwLAorCSBpbnQgbjAsCQkvKiBjdXJyZW50IG9mZnNldCBpbiBidWZmZXIgKi8KKwkgdV9jaGFyICpidWYsCQkvKiBidWZmZXIgdG8gcHV0IHF1ZXJ5ICovCisJIGludCBidWZsZW4sCQkvKiBzaXplIG9mIGJ1ZmZlciAqLworCSBpbnQgYW5zbGVuKQkJLyogVURQIGFuc3dlciBidWZmZXIgc2l6ZSAqLworeworCXJlZ2lzdGVyIEhFQURFUiAqaHA7CisJcmVnaXN0ZXIgdV9jaGFyICpjcCwgKmVwOworCXVfaW50MTZfdCBmbGFncyA9IDA7CisKKyNpZmRlZiBERUJVRworCWlmICgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpICE9IDBVKQorCQlwcmludGYoIjs7IHJlc19ub3B0KClcbiIpOworI2VuZGlmCisKKwlocCA9IChIRUFERVIgKikodm9pZCAqKWJ1ZjsKKwljcCA9IGJ1ZiArIG4wOworCWVwID0gYnVmICsgYnVmbGVuOworCisJaWYgKChlcCAtIGNwKSA8IDEgKyBSUkZJWEVEU1opCisJCXJldHVybiAoLTEpOworCisJKmNwKysgPSAwOwkvKiAiLiIgKi8KKworCW5zX3B1dDE2KFRfT1BULCBjcCk7CS8qIFRZUEUgKi8KKwljcCArPSBJTlQxNlNaOworCW5zX3B1dDE2KGFuc2xlbiAmIDB4ZmZmZiwgY3ApOwkvKiBDTEFTUyA9IFVEUCBwYXlsb2FkIHNpemUgKi8KKwljcCArPSBJTlQxNlNaOworCSpjcCsrID0gTk9FUlJPUjsJLyogZXh0ZW5kZWQgUkNPREUgKi8KKwkqY3ArKyA9IDA7CQkvKiBFRE5TIHZlcnNpb24gKi8KKwlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfVVNFX0ROU1NFQykgeworI2lmZGVmIERFQlVHCisJCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCXByaW50ZigiOzsgcmVzX29wdCgpLi4uIEVORFMwIEROU1NFQ1xuIik7CisjZW5kaWYKKwkJZmxhZ3MgfD0gTlNfT1BUX0ROU1NFQ19PSzsKKwl9CisJbnNfcHV0MTYoZmxhZ3MsIGNwKTsKKwljcCArPSBJTlQxNlNaOworCW5zX3B1dDE2KDAsIGNwKTsJLyogUkRMRU4gKi8KKwljcCArPSBJTlQxNlNaOworCWhwLT5hcmNvdW50ID0gaHRvbnMobnRvaHMoaHAtPmFyY291bnQpICsgMSk7CisKKwlyZXR1cm4gKGNwIC0gYnVmKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19wcml2YXRlLmggYi9saWJjL2Rucy9yZXNvbHYvcmVzX3ByaXZhdGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9uZXRic2QvcmVzb2x2L3Jlc19wcml2YXRlLmgKcmVuYW1lIHRvIGxpYmMvZG5zL3Jlc29sdi9yZXNfcHJpdmF0ZS5oCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvcmVzX3F1ZXJ5LmMgYi9saWJjL2Rucy9yZXNvbHYvcmVzX3F1ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkOWIxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfcXVlcnkuYwpAQCAtMCwwICsxLDQyNSBAQAorLyoJJE5ldEJTRDogcmVzX3F1ZXJ5LmMsdiAxLjcgMjAwNi8wMS8yNCAxNzo0MToyNSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CisgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHNjY3NpZFtdID0gIkAoIylyZXNfcXVlcnkuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX3F1ZXJ5LmMsdiAxLjIuMi4zLjQuMiAyMDA0LzAzLzE2IDEyOjM0OjE5IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVzX3F1ZXJ5LmMsdiAxLjcgMjAwNi8wMS8yNCAxNzo0MToyNSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgRElTQUJMRV9IT1NUX0FMSUFTIDEKKworLyogT3B0aW9ucy4gIExlYXZlIHRoZW0gb24uICovCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIERFQlVHCisjZW5kaWYKKworI2lmIFBBQ0tFVFNaID4gMTAyNAorI2RlZmluZSBNQVhQQUNLRVQJUEFDS0VUU1oKKyNlbHNlCisjZGVmaW5lIE1BWFBBQ0tFVAkxMDI0CisjZW5kaWYKKworLyoKKyAqIEZvcm11bGF0ZSBhIG5vcm1hbCBxdWVyeSwgc2VuZCwgYW5kIGF3YWl0IGFuc3dlci4KKyAqIFJldHVybmVkIGFuc3dlciBpcyBwbGFjZWQgaW4gc3VwcGxpZWQgYnVmZmVyICJhbnN3ZXIiLgorICogUGVyZm9ybSBwcmVsaW1pbmFyeSBjaGVjayBvZiBhbnN3ZXIsIHJldHVybmluZyBzdWNjZXNzIG9ubHkKKyAqIGlmIG5vIGVycm9yIGlzIGluZGljYXRlZCBhbmQgdGhlIGFuc3dlciBjb3VudCBpcyBub256ZXJvLgorICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSByZXNwb25zZSBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqIEVycm9yIG51bWJlciBpcyBsZWZ0IGluIEhfRVJSTk8uCisgKgorICogQ2FsbGVyIG11c3QgcGFyc2UgYW5zd2VyIGFuZCBkZXRlcm1pbmUgd2hldGhlciBpdCBhbnN3ZXJzIHRoZSBxdWVzdGlvbi4KKyAqLworaW50CityZXNfbnF1ZXJ5KHJlc19zdGF0ZSBzdGF0cCwKKwkgICBjb25zdCBjaGFyICpuYW1lLAkvKiBkb21haW4gbmFtZSAqLworCSAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgdV9jaGFyICphbnN3ZXIsCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyIGJ1ZmZlciAqLworeworCXVfY2hhciBidWZbTUFYUEFDS0VUXTsKKwlIRUFERVIgKmhwID0gKEhFQURFUiAqKSh2b2lkICopYW5zd2VyOworCWludCBuOworCXVfaW50IG9mbGFnczsKKworCW9mbGFncyA9IHN0YXRwLT5fZmxhZ3M7CisKK2FnYWluOgorCWhwLT5yY29kZSA9IE5PRVJST1I7CS8qIGRlZmF1bHQgKi8KKworI2lmZGVmIERFQlVHCisJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQlwcmludGYoIjs7IHJlc19xdWVyeSglcywgJWQsICVkKVxuIiwgbmFtZSwgY2xhc3MsIHR5cGUpOworI2VuZGlmCisKKwluID0gcmVzX25ta3F1ZXJ5KHN0YXRwLCBRVUVSWSwgbmFtZSwgY2xhc3MsIHR5cGUsIE5VTEwsIDAsIE5VTEwsCisJCQkgYnVmLCBzaXplb2YoYnVmKSk7CisjaWZkZWYgUkVTX1VTRV9FRE5TMAorCWlmIChuID4gMCAmJiAoc3RhdHAtPl9mbGFncyAmIFJFU19GX0VETlMwRVJSKSA9PSAwICYmCisJICAgIChzdGF0cC0+b3B0aW9ucyAmIChSRVNfVVNFX0VETlMwfFJFU19VU0VfRE5TU0VDKSkgIT0gMFUpCisJCW4gPSByZXNfbm9wdChzdGF0cCwgbiwgYnVmLCBzaXplb2YoYnVmKSwgYW5zbGVuKTsKKyNlbmRpZgorCWlmIChuIDw9IDApIHsKKyNpZmRlZiBERUJVRworCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQlwcmludGYoIjs7IHJlc19xdWVyeTogbWtxdWVyeSBmYWlsZWRcbiIpOworI2VuZGlmCisJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fUkVDT1ZFUlkpOworCQlyZXR1cm4gKG4pOworCX0KKwluID0gcmVzX25zZW5kKHN0YXRwLCBidWYsIG4sIGFuc3dlciwgYW5zbGVuKTsKKwlpZiAobiA8IDApIHsKKyNpZmRlZiBSRVNfVVNFX0VETlMwCisJCS8qIGlmIHRoZSBxdWVyeSBjaG9rZWQgd2l0aCBFRE5TMCwgcmV0cnkgd2l0aG91dCBFRE5TMCAqLworCQlpZiAoKHN0YXRwLT5vcHRpb25zICYgKFJFU19VU0VfRUROUzB8UkVTX1VTRV9ETlNTRUMpKSAhPSAwVSAmJgorCQkgICAgKChvZmxhZ3MgXiBzdGF0cC0+X2ZsYWdzKSAmIFJFU19GX0VETlMwRVJSKSAhPSAwKSB7CisJCQlzdGF0cC0+X2ZsYWdzIHw9IFJFU19GX0VETlMwRVJSOworCQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJCXByaW50ZigiOzsgcmVzX25xdWVyeTogcmV0cnkgd2l0aG91dCBFRE5TMFxuIik7CisJCQlnb3RvIGFnYWluOworCQl9CisjZW5kaWYKKyNpZmRlZiBERUJVRworCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQlwcmludGYoIjs7IHJlc19xdWVyeTogc2VuZCBlcnJvclxuIik7CisjZW5kaWYKKwkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBUUllfQUdBSU4pOworCQlyZXR1cm4gKG4pOworCX0KKworCWlmIChocC0+cmNvZGUgIT0gTk9FUlJPUiB8fCBudG9ocyhocC0+YW5jb3VudCkgPT0gMCkgeworI2lmZGVmIERFQlVHCisJCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCXByaW50ZigiOzsgcmNvZGUgPSAoJXMpLCBjb3VudHMgPSBhbjolZCBuczolZCBhcjolZFxuIiwKKwkJCSAgICAgICBwX3Jjb2RlKGhwLT5yY29kZSksCisJCQkgICAgICAgbnRvaHMoaHAtPmFuY291bnQpLAorCQkJICAgICAgIG50b2hzKGhwLT5uc2NvdW50KSwKKwkJCSAgICAgICBudG9ocyhocC0+YXJjb3VudCkpOworI2VuZGlmCisJCXN3aXRjaCAoaHAtPnJjb2RlKSB7CisJCWNhc2UgTlhET01BSU46CisJCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIEhPU1RfTk9UX0ZPVU5EKTsKKwkJCWJyZWFrOworCQljYXNlIFNFUlZGQUlMOgorCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBUUllfQUdBSU4pOworCQkJYnJlYWs7CisJCWNhc2UgTk9FUlJPUjoKKwkJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fREFUQSk7CisJCQlicmVhazsKKwkJY2FzZSBGT1JNRVJSOgorCQljYXNlIE5PVElNUDoKKwkJY2FzZSBSRUZVU0VEOgorCQlkZWZhdWx0OgorCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19SRUNPVkVSWSk7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gKC0xKTsKKwl9CisJcmV0dXJuIChuKTsKK30KKworLyoKKyAqIEZvcm11bGF0ZSBhIG5vcm1hbCBxdWVyeSwgc2VuZCwgYW5kIHJldHJpZXZlIGFuc3dlciBpbiBzdXBwbGllZCBidWZmZXIuCisgKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICogSWYgZW5hYmxlZCwgaW1wbGVtZW50IHNlYXJjaCBydWxlcyB1bnRpbCBhbnN3ZXIgb3IgdW5yZWNvdmVyYWJsZSBmYWlsdXJlCisgKiBpcyBkZXRlY3RlZC4gIEVycm9yIGNvZGUsIGlmIGFueSwgaXMgbGVmdCBpbiBIX0VSUk5PLgorICovCitpbnQKK3Jlc19uc2VhcmNoKHJlc19zdGF0ZSBzdGF0cCwKKwkgICAgY29uc3QgY2hhciAqbmFtZSwJLyogZG9tYWluIG5hbWUgKi8KKwkgICAgaW50IGNsYXNzLCBpbnQgdHlwZSwJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KKwkgICAgdV9jaGFyICphbnN3ZXIsCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJICAgIGludCBhbnNsZW4pCQkvKiBzaXplIG9mIGFuc3dlciAqLworeworCWNvbnN0IGNoYXIgKmNwLCAqIGNvbnN0ICpkb21haW47CisJSEVBREVSICpocCA9IChIRUFERVIgKikodm9pZCAqKWFuc3dlcjsKKwljaGFyIHRtcFtOU19NQVhETkFNRV07CisJdV9pbnQgZG90czsKKwlpbnQgdHJhaWxpbmdfZG90LCByZXQsIHNhdmVkX2hlcnJubzsKKwlpbnQgZ290X25vZGF0YSA9IDAsIGdvdF9zZXJ2ZmFpbCA9IDAsIHJvb3Rfb25fbGlzdCA9IDA7CisJaW50IHRyaWVkX2FzX2lzID0gMDsKKwlpbnQgc2VhcmNoZWQgPSAwOworCisJZXJybm8gPSAwOworCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgSE9TVF9OT1RfRk9VTkQpOyAgLyogVHJ1ZSBpZiB3ZSBuZXZlciBxdWVyeS4gKi8KKworCWRvdHMgPSAwOworCWZvciAoY3AgPSBuYW1lOyAqY3AgIT0gJ1wwJzsgY3ArKykKKwkJZG90cyArPSAoKmNwID09ICcuJyk7CisJdHJhaWxpbmdfZG90ID0gMDsKKwlpZiAoY3AgPiBuYW1lICYmICotLWNwID09ICcuJykKKwkJdHJhaWxpbmdfZG90Kys7CisKKwkvKiBJZiB0aGVyZSBhcmVuJ3QgYW55IGRvdHMsIGl0IGNvdWxkIGJlIGEgdXNlci1sZXZlbCBhbGlhcy4gKi8KKwlpZiAoIWRvdHMgJiYgKGNwID0gcmVzX2hvc3RhbGlhcyhzdGF0cCwgbmFtZSwgdG1wLCBzaXplb2YgdG1wKSkhPSBOVUxMKQorCQlyZXR1cm4gKHJlc19ucXVlcnkoc3RhdHAsIGNwLCBjbGFzcywgdHlwZSwgYW5zd2VyLCBhbnNsZW4pKTsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIGVub3VnaCBkb3RzIGluIHRoZSBuYW1lLCBsZXQncyBqdXN0IGdpdmUgaXQgYQorCSAqIHRyeSAnYXMgaXMnLiBUaGUgdGhyZXNob2xkIGNhbiBiZSBzZXQgd2l0aCB0aGUgIm5kb3RzIiBvcHRpb24uCisJICogQWxzbywgcXVlcnkgJ2FzIGlzJywgaWYgdGhlcmUgaXMgYSB0cmFpbGluZyBkb3QgaW4gdGhlIG5hbWUuCisJICovCisJc2F2ZWRfaGVycm5vID0gLTE7CisJaWYgKGRvdHMgPj0gc3RhdHAtPm5kb3RzIHx8IHRyYWlsaW5nX2RvdCkgeworCQlyZXQgPSByZXNfbnF1ZXJ5ZG9tYWluKHN0YXRwLCBuYW1lLCBOVUxMLCBjbGFzcywgdHlwZSwKKwkJCQkJIGFuc3dlciwgYW5zbGVuKTsKKwkJaWYgKHJldCA+IDAgfHwgdHJhaWxpbmdfZG90KQorCQkJcmV0dXJuIChyZXQpOworCQlzYXZlZF9oZXJybm8gPSBzdGF0cC0+cmVzX2hfZXJybm87CisJCXRyaWVkX2FzX2lzKys7CisJfQorCisJLyoKKwkgKiBXZSBkbyBhdCBsZWFzdCBvbmUgbGV2ZWwgb2Ygc2VhcmNoIGlmCisJICoJLSB0aGVyZSBpcyBubyBkb3QgYW5kIFJFU19ERUZOQU1FIGlzIHNldCwgb3IKKwkgKgktIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBkb3QsIHRoZXJlIGlzIG5vIHRyYWlsaW5nIGRvdCwKKwkgKgkgIGFuZCBSRVNfRE5TUkNIIGlzIHNldC4KKwkgKi8KKwlpZiAoKCFkb3RzICYmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUZOQU1FUykgIT0gMFUpIHx8CisJICAgIChkb3RzICYmICF0cmFpbGluZ19kb3QgJiYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0ROU1JDSCkgIT0gMFUpKSB7CisJCWludCBkb25lID0gMDsKKworCQkvKiBVbmZvcnR1bmF0ZWx5IHdlIG5lZWQgdG8gbG9hZCBuZXR3b3JrLXNwZWNpZmljIGluZm8KKwkJICogKGRucyBzZXJ2ZXJzLCBzZWFyY2ggZG9tYWlucykgYmVmb3JlCisJCSAqIHRoZSBkb21haW4gc3R1ZmYgaXMgdHJpZWQuICBXaWxsIGhhdmUgYSBiZXR0ZXIKKwkJICogZml4IGFmdGVyIHRocmVhZCBwb29scyBhcmUgdXNlZCBhcyB0aGlzIHdpbGwKKwkJICogYmUgbG9hZGVkIG9uY2UgZm9yIHRoZSB0aHJlYWQgaW5zdGVhZCBvZiBlYWNoCisJCSAqIHRpbWUgYSBxdWVyeSBpcyB0cmllZC4KKwkJICovCisJCV9yZXNvbHZfcG9wdWxhdGVfcmVzX2Zvcl9uZXQoc3RhdHApOworCisJCWZvciAoZG9tYWluID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKXN0YXRwLT5kbnNyY2g7CisJCSAgICAgKmRvbWFpbiAmJiAhZG9uZTsKKwkJICAgICBkb21haW4rKykgeworCQkJc2VhcmNoZWQgPSAxOworCisJCQlpZiAoZG9tYWluWzBdWzBdID09ICdcMCcgfHwKKwkJCSAgICAoZG9tYWluWzBdWzBdID09ICcuJyAmJiBkb21haW5bMF1bMV0gPT0gJ1wwJykpCisJCQkJcm9vdF9vbl9saXN0Kys7CisKKwkJCXJldCA9IHJlc19ucXVlcnlkb21haW4oc3RhdHAsIG5hbWUsICpkb21haW4sCisJCQkJCSAgICAgICBjbGFzcywgdHlwZSwKKwkJCQkJICAgICAgIGFuc3dlciwgYW5zbGVuKTsKKwkJCWlmIChyZXQgPiAwKQorCQkJCXJldHVybiAocmV0KTsKKworCQkJLyoKKwkJCSAqIElmIG5vIHNlcnZlciBwcmVzZW50LCBnaXZlIHVwLgorCQkJICogSWYgbmFtZSBpc24ndCBmb3VuZCBpbiB0aGlzIGRvbWFpbiwKKwkJCSAqIGtlZXAgdHJ5aW5nIGhpZ2hlciBkb21haW5zIGluIHRoZSBzZWFyY2ggbGlzdAorCQkJICogKGlmIHRoYXQncyBlbmFibGVkKS4KKwkJCSAqIE9uIGEgTk9fREFUQSBlcnJvciwga2VlcCB0cnlpbmcsIG90aGVyd2lzZQorCQkJICogYSB3aWxkY2FyZCBlbnRyeSBvZiBhbm90aGVyIHR5cGUgY291bGQga2VlcCB1cworCQkJICogZnJvbSBmaW5kaW5nIHRoaXMgZW50cnkgaGlnaGVyIGluIHRoZSBkb21haW4uCisJCQkgKiBJZiB3ZSBnZXQgc29tZSBvdGhlciBlcnJvciAobmVnYXRpdmUgYW5zd2VyIG9yCisJCQkgKiBzZXJ2ZXIgZmFpbHVyZSksIHRoZW4gc3RvcCBzZWFyY2hpbmcgdXAsCisJCQkgKiBidXQgdHJ5IHRoZSBpbnB1dCBuYW1lIGJlbG93IGluIGNhc2UgaXQncworCQkJICogZnVsbHktcXVhbGlmaWVkLgorCQkJICovCisJCQlpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEKSB7CisJCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBUUllfQUdBSU4pOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCisJCQlzd2l0Y2ggKHN0YXRwLT5yZXNfaF9lcnJubykgeworCQkJY2FzZSBOT19EQVRBOgorCQkJCWdvdF9ub2RhdGErKzsKKwkJCQkvKiBGQUxMVEhST1VHSCAqLworCQkJY2FzZSBIT1NUX05PVF9GT1VORDoKKwkJCQkvKiBrZWVwIHRyeWluZyAqLworCQkJCWJyZWFrOworCQkJY2FzZSBUUllfQUdBSU46CisJCQkJaWYgKGhwLT5yY29kZSA9PSBTRVJWRkFJTCkgeworCQkJCQkvKiB0cnkgbmV4dCBzZWFyY2ggZWxlbWVudCwgaWYgYW55ICovCisJCQkJCWdvdF9zZXJ2ZmFpbCsrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJCWRlZmF1bHQ6CisJCQkJLyogYW55dGhpbmcgZWxzZSBpbXBsaWVzIHRoYXQgd2UncmUgZG9uZSAqLworCQkJCWRvbmUrKzsKKwkJCX0KKworCQkJLyogaWYgd2UgZ290IGhlcmUgZm9yIHNvbWUgcmVhc29uIG90aGVyIHRoYW4gRE5TUkNILAorCQkJICogd2Ugb25seSB3YW50ZWQgb25lIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgc28gc3RvcC4KKwkJCSAqLworCQkJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ETlNSQ0gpID09IDBVKQorCQkJCWRvbmUrKzsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlIHF1ZXJ5IGhhcyBub3QgYWxyZWFkeSBiZWVuIHRyaWVkIGFzIGlzIHRoZW4gdHJ5IGl0CisJICogdW5sZXNzIFJFU19OT1RMRFFVRVJZIGlzIHNldCBhbmQgdGhlcmUgd2VyZSBubyBkb3RzLgorCSAqLworCWlmICgoZG90cyB8fCAhc2VhcmNoZWQgfHwgKHN0YXRwLT5vcHRpb25zICYgUkVTX05PVExEUVVFUlkpID09IDBVKSAmJgorCSAgICAhKHRyaWVkX2FzX2lzIHx8IHJvb3Rfb25fbGlzdCkpIHsKKwkJcmV0ID0gcmVzX25xdWVyeWRvbWFpbihzdGF0cCwgbmFtZSwgTlVMTCwgY2xhc3MsIHR5cGUsCisJCQkJICAgICAgIGFuc3dlciwgYW5zbGVuKTsKKwkJaWYgKHJldCA+IDApCisJCQlyZXR1cm4gKHJldCk7CisJfQorCisJLyogaWYgd2UgZ290IGhlcmUsIHdlIGRpZG4ndCBzYXRpc2Z5IHRoZSBzZWFyY2guCisJICogaWYgd2UgZGlkIGFuIGluaXRpYWwgZnVsbCBxdWVyeSwgcmV0dXJuIHRoYXQgcXVlcnkncyBIX0VSUk5PCisJICogKG5vdGUgdGhhdCB3ZSB3b3VsZG4ndCBiZSBoZXJlIGlmIHRoYXQgcXVlcnkgaGFkIHN1Y2NlZWRlZCkuCisJICogZWxzZSBpZiB3ZSBldmVyIGdvdCBhIG5vZGF0YSwgc2VuZCB0aGF0IGJhY2sgYXMgdGhlIHJlYXNvbi4KKwkgKiBlbHNlIHNlbmQgYmFjayBtZWFuaW5nbGVzcyBIX0VSUk5PLCB0aGF0IGJlaW5nIHRoZSBvbmUgZnJvbQorCSAqIHRoZSBsYXN0IEROU1JDSCB3ZSBkaWQuCisJICovCisJaWYgKHNhdmVkX2hlcnJubyAhPSAtMSkKKwkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBzYXZlZF9oZXJybm8pOworCWVsc2UgaWYgKGdvdF9ub2RhdGEpCisJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fREFUQSk7CisJZWxzZSBpZiAoZ290X3NlcnZmYWlsKQorCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7CisJcmV0dXJuICgtMSk7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgY2FsbCBvbiByZXNfcXVlcnkgb24gdGhlIGNvbmNhdGVuYXRpb24gb2YgbmFtZSBhbmQgZG9tYWluLAorICogcmVtb3ZpbmcgYSB0cmFpbGluZyBkb3QgZnJvbSBuYW1lIGlmIGRvbWFpbiBpcyBOVUxMLgorICovCitpbnQKK3Jlc19ucXVlcnlkb21haW4ocmVzX3N0YXRlIHN0YXRwLAorCSAgICBjb25zdCBjaGFyICpuYW1lLAorCSAgICBjb25zdCBjaGFyICpkb21haW4sCisJICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgIHVfY2hhciAqYW5zd2VyLAkJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KKwkgICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCit7CisJY2hhciBuYnVmW01BWEROQU1FXTsKKwljb25zdCBjaGFyICpsb25nbmFtZSA9IG5idWY7CisJaW50IG4sIGQ7CisKKyNpZmRlZiBERUJVRworCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5ZG9tYWluKCVzLCAlcywgJWQsICVkKVxuIiwKKwkJICAgICAgIG5hbWUsIGRvbWFpbj9kb21haW46IjxOaWw+IiwgY2xhc3MsIHR5cGUpOworI2VuZGlmCisJaWYgKGRvbWFpbiA9PSBOVUxMKSB7CisJCS8qCisJCSAqIENoZWNrIGZvciB0cmFpbGluZyAnLic7CisJCSAqIGNvcHkgd2l0aG91dCAnLicgaWYgcHJlc2VudC4KKwkJICovCisJCW4gPSBzdHJsZW4obmFtZSk7CisJCWlmIChuID49IE1BWEROQU1FKSB7CisJCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIE5PX1JFQ09WRVJZKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCW4tLTsKKwkJaWYgKG4gPj0gMCAmJiBuYW1lW25dID09ICcuJykgeworCQkJc3RybmNweShuYnVmLCBuYW1lLCAoc2l6ZV90KW4pOworCQkJbmJ1ZltuXSA9ICdcMCc7CisJCX0gZWxzZQorCQkJbG9uZ25hbWUgPSBuYW1lOworCX0gZWxzZSB7CisJCW4gPSBzdHJsZW4obmFtZSk7CisJCWQgPSBzdHJsZW4oZG9tYWluKTsKKwkJaWYgKG4gKyBkICsgMSA+PSBNQVhETkFNRSkgeworCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19SRUNPVkVSWSk7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlzcHJpbnRmKG5idWYsICIlcy4lcyIsIG5hbWUsIGRvbWFpbik7CisJfQorCXJldHVybiAocmVzX25xdWVyeShzdGF0cCwgbG9uZ25hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOworfQorCitjb25zdCBjaGFyICoKK3Jlc19ob3N0YWxpYXMoY29uc3QgcmVzX3N0YXRlIHN0YXRwLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICpkc3QsIHNpemVfdCBzaXopIHsKKwlyZXR1cm4gKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9kbnMvcmVzb2x2L3Jlc19zZW5kLmMgYi9saWJjL2Rucy9yZXNvbHYvcmVzX3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDM5ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9kbnMvcmVzb2x2L3Jlc19zZW5kLmMKQEAgLTAsMCArMSwxMzQ5IEBACisvKgkkTmV0QlNEOiByZXNfc2VuZC5jLHYgMS45IDIwMDYvMDEvMjQgMTc6NDE6MjUgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAyMDA4ICBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKHNvdXJjZSBwb3J0IHJhbmRvbWl6YXRpb24pCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5ODksIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlc19zZW5kLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IHJlc19zZW5kLmMsdiAxLjUuMi4yLjQuNSAyMDA0LzA4LzEwIDAyOjE5OjU2IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVzX3NlbmQuYyx2IDEuOSAyMDA2LzAxLzI0IDE3OjQxOjI1IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKy8qIHNldCB0byAxIHRvIHVzZSBvdXIgc21hbGwvc2ltcGxlL2xpbWl0ZWQgRE5TIGNhY2hlICovCisjZGVmaW5lICBVU0VfUkVTT0xWX0NBQ0hFICAxCisKKy8qCisgKiBTZW5kIHF1ZXJ5IHRvIG5hbWUgc2VydmVyIGFuZCB3YWl0IGZvciByZXBseS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X25ldGlkLmgiCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGlzYy9ldmVudGxpYi5oPgorCisjaWYgVVNFX1JFU09MVl9DQUNIRQorIyAgaW5jbHVkZSA8cmVzb2x2X2NhY2hlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCisKKyNpZm5kZWYgREVfQ09OU1QKKyNkZWZpbmUgREVfQ09OU1QoYyx2KSAgIHYgPSAoKGMpID8gXAorICAgIHN0cmNocigoY29uc3Qgdm9pZCAqKShjKSwgKihjb25zdCBjaGFyICopKGNvbnN0IHZvaWQgKikoYykpIDogTlVMTCkKKyNlbmRpZgorCisvKiBPcHRpb25zLiAgTGVhdmUgdGhlbSBvbi4gKi8KKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorI2luY2x1ZGUgInJlc19kZWJ1Zy5oIgorI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCisKKyNkZWZpbmUgRVhUKHJlcykgKChyZXMpLT5fdS5fZXh0KQorI2RlZmluZSBEQkcgMAorCitzdGF0aWMgY29uc3QgaW50IGhpZ2hlc3RGRCA9IEZEX1NFVFNJWkUgLSAxOworCisvKiBGb3J3YXJkLiAqLworCitzdGF0aWMgaW50CQlnZXRfc2FsZW4gX19QKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikpOworc3RhdGljIHN0cnVjdCBzb2NrYWRkciAqIGdldF9uc2FkZHIgX19QKChyZXNfc3RhdGUsIHNpemVfdCkpOworc3RhdGljIGludAkJc2VuZF92YyhyZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsCisJCQkJdV9jaGFyICosIGludCwgaW50ICosIGludCk7CitzdGF0aWMgaW50CQlzZW5kX2RnKHJlc19zdGF0ZSwgY29uc3QgdV9jaGFyICosIGludCwKKwkJCQl1X2NoYXIgKiwgaW50LCBpbnQgKiwgaW50LAorCQkJCWludCAqLCBpbnQgKik7CitzdGF0aWMgdm9pZAkJQWVycm9yKGNvbnN0IHJlc19zdGF0ZSwgRklMRSAqLCBjb25zdCBjaGFyICosIGludCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KTsKK3N0YXRpYyB2b2lkCQlQZXJyb3IoY29uc3QgcmVzX3N0YXRlLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK3N0YXRpYyBpbnQJCXNvY2tfZXEoc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqKTsKKyNpZmRlZiBORUVEX1BTRUxFQ1QKK3N0YXRpYyBpbnQJCXBzZWxlY3QoaW50LCB2b2lkICosIHZvaWQgKiwgdm9pZCAqLAorCQkJCXN0cnVjdCB0aW1lc3BlYyAqLAorCQkJCWNvbnN0IHNpZ3NldF90ICopOworI2VuZGlmCit2b2lkIHJlc19wcXVlcnkoY29uc3QgcmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOworc3RhdGljIGludCBjb25uZWN0X3dpdGhfdGltZW91dChpbnQgc29jaywgY29uc3Qgc3RydWN0IHNvY2thZGRyICpuc2FwLAorCQkJc29ja2xlbl90IHNhbGVuLCBpbnQgc2VjKTsKK3N0YXRpYyBpbnQgcmV0cnlpbmdfc2VsZWN0KGNvbnN0IGludCBzb2NrLCBmZF9zZXQgKnJlYWRzZXQsIGZkX3NldCAqd3JpdGVzZXQsCisJCQljb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmZpbmlzaCk7CisKKy8qIEJJT05JQy1CRUdJTjogaW1wbGVtZW50IHNvdXJjZSBwb3J0IHJhbmRvbWl6YXRpb24gKi8KK3R5cGVkZWYgdW5pb24geworICAgIHN0cnVjdCBzb2NrYWRkciAgICAgIHNhOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgIHNpbjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICBzaW42OworfSBfc29ja2FkZHJfdW5pb247CisKK3N0YXRpYyBpbnQKK3JhbmRvbV9iaW5kKCBpbnQgIHMsIGludCAgZmFtaWx5ICkKK3sKKyAgICBfc29ja2FkZHJfdW5pb24gIHU7CisgICAgaW50ICAgICAgICAgICAgICBqOworICAgIHNvY2tsZW5fdCAgICAgICAgc2xlbjsKKworICAgIC8qIGNsZWFyIGFsbCwgdGhpcyBhbHNvIHNldHMgdGhlIElQNC82IGFkZHJlc3MgdG8gJ2FueScgKi8KKyAgICBtZW1zZXQoICZ1LCAwLCBzaXplb2YgdSApOworCisgICAgc3dpdGNoIChmYW1pbHkpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgdS5zaW4uc2luX2ZhbWlseSA9IGZhbWlseTsKKyAgICAgICAgICAgIHNsZW4gICAgICAgICAgICAgPSBzaXplb2YgdS5zaW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgIHUuc2luNi5zaW42X2ZhbWlseSA9IGZhbWlseTsKKyAgICAgICAgICAgIHNsZW4gICAgICAgICAgICAgICA9IHNpemVvZiB1LnNpbjY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm5vID0gRVBST1RPOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIGZpcnN0IHRyeSB0byBiaW5kIHRvIGEgcmFuZG9tIHNvdXJjZSBwb3J0IGEgZmV3IHRpbWVzICovCisgICAgZm9yIChqID0gMDsgaiA8IDEwOyBqKyspIHsKKyAgICAgICAgLyogZmluZCBhIHJhbmRvbSBwb3J0IGJldHdlZW4gMTAyNSAuLiA2NTUzNCAqLworICAgICAgICBpbnQgIHBvcnQgPSAxMDI1ICsgKHJlc19yYW5kb21pZCgpICUgKDY1NTM1LTEwMjUpKTsKKyAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgdS5zaW4uc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdS5zaW42LnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOworCisgICAgICAgIGlmICggIWJpbmQoIHMsICZ1LnNhLCBzbGVuICkgKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogbm90aGluZyBhZnRlciAxMCB0cmllcywgb3VyIG5ldHdvcmsgdGFibGUgaXMgcHJvYmFibHkgYnVzeSAqLworICAgIC8qIGxldCB0aGUgc3lzdGVtIGRlY2lkZSB3aGljaCBwb3J0IGlzIGJlc3QgKi8KKyAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIHUuc2luLnNpbl9wb3J0ID0gMDsKKyAgICBlbHNlCisgICAgICAgIHUuc2luNi5zaW42X3BvcnQgPSAwOworCisgICAgcmV0dXJuIGJpbmQoIHMsICZ1LnNhLCBzbGVuICk7Cit9CisvKiBCSU9OSUMtRU5EICovCisKK3N0YXRpYyBjb25zdCBpbnQgbmlmbGFncyA9IE5JX05VTUVSSUNIT1NUIHwgTklfTlVNRVJJQ1NFUlY7CisKKy8qIFB1YmxpYy4gKi8KKworLyogaW50CisgKiByZXNfaXNvdXJzZXJ2ZXIoaW5hKQorICoJbG9va3MgdXAgImluYSIgaW4gX3Jlcy5uc19hZGRyX2xpc3RbXQorICogcmV0dXJuczoKKyAqCTAgIDogbm90IGZvdW5kCisgKgk+MCA6IGZvdW5kCisgKiBhdXRob3I6CisgKglwYXVsIHZpeGllLCAyOW1heTk0CisgKi8KK19fTElCQ19ISURERU5fXyBpbnQKK3Jlc19vdXJzZXJ2ZXJfcChjb25zdCByZXNfc3RhdGUgc3RhdHAsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EpIHsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmlucCwgKnNydjsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICppbjZwLCAqc3J2NjsKKwlpbnQgbnM7CisKKwlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWlucCA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKikoY29uc3Qgdm9pZCAqKXNhOworCQlmb3IgKG5zID0gMDsgIG5zIDwgc3RhdHAtPm5zY291bnQ7ICBucysrKSB7CisJCQlzcnYgPSAoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKilnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKTsKKwkJCWlmIChzcnYtPnNpbl9mYW1pbHkgPT0gaW5wLT5zaW5fZmFtaWx5ICYmCisJCQkgICAgc3J2LT5zaW5fcG9ydCA9PSBpbnAtPnNpbl9wb3J0ICYmCisJCQkgICAgKHNydi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkgfHwKKwkJCSAgICAgc3J2LT5zaW5fYWRkci5zX2FkZHIgPT0gaW5wLT5zaW5fYWRkci5zX2FkZHIpKQorCQkJCXJldHVybiAoMSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJaWYgKEVYVChzdGF0cCkuZXh0ID09IE5VTEwpCisJCQlicmVhazsKKwkJaW42cCA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKGNvbnN0IHZvaWQgKilzYTsKKwkJZm9yIChucyA9IDA7ICBucyA8IHN0YXRwLT5uc2NvdW50OyAgbnMrKykgeworCQkJc3J2NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKilnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKTsKKwkJCWlmIChzcnY2LT5zaW42X2ZhbWlseSA9PSBpbjZwLT5zaW42X2ZhbWlseSAmJgorCQkJICAgIHNydjYtPnNpbjZfcG9ydCA9PSBpbjZwLT5zaW42X3BvcnQgJiYKKyNpZmRlZiBIQVZFX1NJTjZfU0NPUEVfSUQKKwkJCSAgICAoc3J2Ni0+c2luNl9zY29wZV9pZCA9PSAwIHx8CisJCQkgICAgIHNydjYtPnNpbjZfc2NvcGVfaWQgPT0gaW42cC0+c2luNl9zY29wZV9pZCkgJiYKKyNlbmRpZgorCQkJICAgIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc3J2Ni0+c2luNl9hZGRyKSB8fAorCQkJICAgICBJTjZfQVJFX0FERFJfRVFVQUwoJnNydjYtPnNpbjZfYWRkciwgJmluNnAtPnNpbjZfYWRkcikpKQorCQkJCXJldHVybiAoMSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qIGludAorICogcmVzX25hbWVpbnF1ZXJ5KG5hbWUsIHR5cGUsIGNsYXNzLCBidWYsIGVvbSkKKyAqCWxvb2sgZm9yIChuYW1lLHR5cGUsY2xhc3MpIGluIHRoZSBxdWVyeSBzZWN0aW9uIG9mIHBhY2tldCAoYnVmLGVvbSkKKyAqIHJlcXVpcmVzOgorICoJYnVmICsgSEZJWEVEU1ogPD0gZW9tCisgKiByZXR1cm5zOgorICoJLTEgOiBmb3JtYXQgZXJyb3IKKyAqCTAgIDogbm90IGZvdW5kCisgKgk+MCA6IGZvdW5kCisgKiBhdXRob3I6CisgKglwYXVsIHZpeGllLCAyOW1heTk0CisgKi8KK2ludAorcmVzX25hbWVpbnF1ZXJ5KGNvbnN0IGNoYXIgKm5hbWUsIGludCB0eXBlLCBpbnQgY2xhc3MsCisJCWNvbnN0IHVfY2hhciAqYnVmLCBjb25zdCB1X2NoYXIgKmVvbSkKK3sKKwljb25zdCB1X2NoYXIgKmNwID0gYnVmICsgSEZJWEVEU1o7CisJaW50IHFkY291bnQgPSBudG9ocygoKGNvbnN0IEhFQURFUiopKGNvbnN0IHZvaWQgKilidWYpLT5xZGNvdW50KTsKKworCXdoaWxlIChxZGNvdW50LS0gPiAwKSB7CisJCWNoYXIgdG5hbWVbTUFYRE5BTUUrMV07CisJCWludCBuLCB0dHlwZSwgdGNsYXNzOworCisJCW4gPSBkbl9leHBhbmQoYnVmLCBlb20sIGNwLCB0bmFtZSwgc2l6ZW9mIHRuYW1lKTsKKwkJaWYgKG4gPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWNwICs9IG47CisJCWlmIChjcCArIDIgKiBJTlQxNlNaID4gZW9tKQorCQkJcmV0dXJuICgtMSk7CisJCXR0eXBlID0gbnNfZ2V0MTYoY3ApOyBjcCArPSBJTlQxNlNaOworCQl0Y2xhc3MgPSBuc19nZXQxNihjcCk7IGNwICs9IElOVDE2U1o7CisJCWlmICh0dHlwZSA9PSB0eXBlICYmIHRjbGFzcyA9PSBjbGFzcyAmJgorCQkgICAgbnNfc2FtZW5hbWUodG5hbWUsIG5hbWUpID09IDEpCisJCQlyZXR1cm4gKDEpOworCX0KKwlyZXR1cm4gKDApOworfQorCisvKiBpbnQKKyAqIHJlc19xdWVyaWVzbWF0Y2goYnVmMSwgZW9tMSwgYnVmMiwgZW9tMikKKyAqCWlzIHRoZXJlIGEgMToxIG1hcHBpbmcgb2YgKG5hbWUsdHlwZSxjbGFzcykKKyAqCWluIChidWYxLGVvbTEpIGFuZCAoYnVmMixlb20yKT8KKyAqIHJldHVybnM6CisgKgktMSA6IGZvcm1hdCBlcnJvcgorICoJMCAgOiBub3QgYSAxOjEgbWFwcGluZworICoJPjAgOiBpcyBhIDE6MSBtYXBwaW5nCisgKiBhdXRob3I6CisgKglwYXVsIHZpeGllLCAyOW1heTk0CisgKi8KK2ludAorcmVzX3F1ZXJpZXNtYXRjaChjb25zdCB1X2NoYXIgKmJ1ZjEsIGNvbnN0IHVfY2hhciAqZW9tMSwKKwkJIGNvbnN0IHVfY2hhciAqYnVmMiwgY29uc3QgdV9jaGFyICplb20yKQoreworCWNvbnN0IHVfY2hhciAqY3AgPSBidWYxICsgSEZJWEVEU1o7CisJaW50IHFkY291bnQgPSBudG9ocygoKGNvbnN0IEhFQURFUiopKGNvbnN0IHZvaWQgKilidWYxKS0+cWRjb3VudCk7CisKKwlpZiAoYnVmMSArIEhGSVhFRFNaID4gZW9tMSB8fCBidWYyICsgSEZJWEVEU1ogPiBlb20yKQorCQlyZXR1cm4gKC0xKTsKKworCS8qCisJICogT25seSBoZWFkZXIgc2VjdGlvbiBwcmVzZW50IGluIHJlcGxpZXMgdG8KKwkgKiBkeW5hbWljIHVwZGF0ZSBwYWNrZXRzLgorCSAqLworCWlmICgoKChjb25zdCBIRUFERVIgKikoY29uc3Qgdm9pZCAqKWJ1ZjEpLT5vcGNvZGUgPT0gbnNfb191cGRhdGUpICYmCisJICAgICgoKGNvbnN0IEhFQURFUiAqKShjb25zdCB2b2lkICopYnVmMiktPm9wY29kZSA9PSBuc19vX3VwZGF0ZSkpCisJCXJldHVybiAoMSk7CisKKwlpZiAocWRjb3VudCAhPSBudG9ocygoKGNvbnN0IEhFQURFUiopKGNvbnN0IHZvaWQgKilidWYyKS0+cWRjb3VudCkpCisJCXJldHVybiAoMCk7CisJd2hpbGUgKHFkY291bnQtLSA+IDApIHsKKwkJY2hhciB0bmFtZVtNQVhETkFNRSsxXTsKKwkJaW50IG4sIHR0eXBlLCB0Y2xhc3M7CisKKwkJbiA9IGRuX2V4cGFuZChidWYxLCBlb20xLCBjcCwgdG5hbWUsIHNpemVvZiB0bmFtZSk7CisJCWlmIChuIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQljcCArPSBuOworCQlpZiAoY3AgKyAyICogSU5UMTZTWiA+IGVvbTEpCisJCQlyZXR1cm4gKC0xKTsKKwkJdHR5cGUgPSBuc19nZXQxNihjcCk7CWNwICs9IElOVDE2U1o7CisJCXRjbGFzcyA9IG5zX2dldDE2KGNwKTsgY3AgKz0gSU5UMTZTWjsKKwkJaWYgKCFyZXNfbmFtZWlucXVlcnkodG5hbWUsIHR0eXBlLCB0Y2xhc3MsIGJ1ZjIsIGVvbTIpKQorCQkJcmV0dXJuICgwKTsKKwl9CisJcmV0dXJuICgxKTsKK30KKworCitpbnQKK3Jlc19uc2VuZChyZXNfc3RhdGUgc3RhdHAsCisJICBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgdV9jaGFyICphbnMsIGludCBhbnNzaXopCit7CisJaW50IGdvdHNvbWV3aGVyZSwgdGVycm5vLCB0cnksIHZfY2lyY3VpdCwgcmVzcGxlbiwgbnMsIG47CisJY2hhciBhYnVmW05JX01BWEhPU1RdOworI2lmIFVTRV9SRVNPTFZfQ0FDSEUKKyAgICAgICAgUmVzb2x2Q2FjaGVTdGF0dXMgICAgIGNhY2hlX3N0YXR1cyA9IFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRDsKKyNlbmRpZgorCisjaWYgIVVTRV9SRVNPTFZfQ0FDSEUKKwlpZiAoc3RhdHAtPm5zY291bnQgPT0gMCkgeworCQllcnJubyA9IEVTUkNIOworCQlyZXR1cm4gKC0xKTsKKwl9CisjZW5kaWYKKworCWlmIChhbnNzaXogPCBIRklYRURTWikgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUVVFUlkpLAorCQkoc3Rkb3V0LCAiOzsgcmVzX3NlbmQoKVxuIiksIGJ1ZiwgYnVmbGVuKTsKKwl2X2NpcmN1aXQgPSAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfVVNFVkMpIHx8IGJ1ZmxlbiA+IFBBQ0tFVFNaOworCWdvdHNvbWV3aGVyZSA9IDA7CisJdGVycm5vID0gRVRJTUVET1VUOworCisjaWYgVVNFX1JFU09MVl9DQUNIRQorCWludCAgYW5zbGVuID0gMDsKKwljYWNoZV9zdGF0dXMgPSBfcmVzb2x2X2NhY2hlX2xvb2t1cCgKKwkJCXN0YXRwLT5uZXRpZCwgYnVmLCBidWZsZW4sCisJCQlhbnMsIGFuc3NpeiwgJmFuc2xlbik7CisKKwlpZiAoY2FjaGVfc3RhdHVzID09IFJFU09MVl9DQUNIRV9GT1VORCkgeworCQlyZXR1cm4gYW5zbGVuOworCX0gZWxzZSBpZiAoY2FjaGVfc3RhdHVzICE9IFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRCkgeworCQkvLyBoYWQgYSBjYWNoZSBtaXNzIGZvciBhIGtub3duIG5ldHdvcmssIHNvIHBvcHVsYXRlIHRoZSB0aHJlYWQgcHJpdmF0ZQorCQkvLyBkYXRhIHNvIHRoZSBub3JtYWwgcmVzb2x2ZSBwYXRoIGNhbiBkbyBpdHMgdGhpbmcKKwkJX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX25ldChzdGF0cCk7CisJfQorCisJaWYgKHN0YXRwLT5uc2NvdW50ID09IDApIHsKKwkJZXJybm8gPSBFU1JDSDsKKwkJcmV0dXJuICgtMSk7CisJfQorI2VuZGlmCisKKwkvKgorCSAqIElmIHRoZSBuc19hZGRyX2xpc3QgaW4gdGhlIHJlc29sdmVyIGNvbnRleHQgaGFzIGNoYW5nZWQsIHRoZW4KKwkgKiBpbnZhbGlkYXRlIG91ciBjYWNoZWQgY29weSBhbmQgdGhlIGFzc29jaWF0ZWQgdGltaW5nIGRhdGEuCisJICovCisJaWYgKEVYVChzdGF0cCkubnNjb3VudCAhPSAwKSB7CisJCWludCBuZWVkY2xvc2UgPSAwOworCQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBwZWVyOworCQlzb2NrbGVuX3QgcGVlcmxlbjsKKworCQlpZiAoRVhUKHN0YXRwKS5uc2NvdW50ICE9IHN0YXRwLT5uc2NvdW50KQorCQkJbmVlZGNsb3NlKys7CisJCWVsc2UKKwkJCWZvciAobnMgPSAwOyBucyA8IHN0YXRwLT5uc2NvdW50OyBucysrKSB7CisJCQkJaWYgKHN0YXRwLT5uc2FkZHJfbGlzdFtuc10uc2luX2ZhbWlseSAmJgorCQkJCSAgICAhc29ja19lcSgoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmc3RhdHAtPm5zYWRkcl9saXN0W25zXSwKKwkJCQkJICAgICAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbnNdKSkgeworCQkJCQluZWVkY2xvc2UrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKEVYVChzdGF0cCkubnNzb2Nrc1tuc10gPT0gLTEpCisJCQkJCWNvbnRpbnVlOworCQkJCXBlZXJsZW4gPSBzaXplb2YocGVlcik7CisJCQkJaWYgKGdldHBlZXJuYW1lKEVYVChzdGF0cCkubnNzb2Nrc1tuc10sCisJCQkJICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZwZWVyLCAmcGVlcmxlbikgPCAwKSB7CisJCQkJCW5lZWRjbG9zZSsrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKCFzb2NrX2VxKChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZwZWVyLAorCQkJCSAgICBnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKSkpIHsKKwkJCQkJbmVlZGNsb3NlKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJaWYgKG5lZWRjbG9zZSkgeworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlFWFQoc3RhdHApLm5zY291bnQgPSAwOworCQl9CisJfQorCisJLyoKKwkgKiBNYXliZSBpbml0aWFsaXplIG91ciBwcml2YXRlIGNvcHkgb2YgdGhlIG5zX2FkZHJfbGlzdC4KKwkgKi8KKwlpZiAoRVhUKHN0YXRwKS5uc2NvdW50ID09IDApIHsKKwkJZm9yIChucyA9IDA7IG5zIDwgc3RhdHAtPm5zY291bnQ7IG5zKyspIHsKKwkJCUVYVChzdGF0cCkubnN0aW1lc1tuc10gPSBSRVNfTUFYVElNRTsKKwkJCUVYVChzdGF0cCkubnNzb2Nrc1tuc10gPSAtMTsKKwkJCWlmICghc3RhdHAtPm5zYWRkcl9saXN0W25zXS5zaW5fZmFtaWx5KQorCQkJCWNvbnRpbnVlOworCQkJRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbnNdLnNpbiA9CisJCQkJIHN0YXRwLT5uc2FkZHJfbGlzdFtuc107CisJCX0KKwkJRVhUKHN0YXRwKS5uc2NvdW50ID0gc3RhdHAtPm5zY291bnQ7CisJfQorCisJLyoKKwkgKiBTb21lIHJlc29sdmVycyB3YW50IHRvIGV2ZW4gb3V0IHRoZSBsb2FkIG9uIHRoZWlyIG5hbWVzZXJ2ZXJzLgorCSAqIE5vdGUgdGhhdCBSRVNfQkxBU1Qgb3ZlcnJpZGVzIFJFU19ST1RBVEUuCisJICovCisJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ST1RBVEUpICE9IDBVICYmCisJICAgIChzdGF0cC0+b3B0aW9ucyAmIFJFU19CTEFTVCkgPT0gMFUpIHsKKwkJdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIGludTsKKwkJc3RydWN0IHNvY2thZGRyX2luIGluYTsKKwkJaW50IGxhc3RucyA9IHN0YXRwLT5uc2NvdW50IC0gMTsKKwkJaW50IGZkOworCQl1X2ludDE2X3QgbnN0aW1lOworCisJCWlmIChFWFQoc3RhdHApLmV4dCAhPSBOVUxMKQorCQkJaW51ID0gRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbMF07CisJCWluYSA9IHN0YXRwLT5uc2FkZHJfbGlzdFswXTsKKwkJZmQgPSBFWFQoc3RhdHApLm5zc29ja3NbMF07CisJCW5zdGltZSA9IEVYVChzdGF0cCkubnN0aW1lc1swXTsKKwkJZm9yIChucyA9IDA7IG5zIDwgbGFzdG5zOyBucysrKSB7CisJCQlpZiAoRVhUKHN0YXRwKS5leHQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbnNdID0KKwkJCQkJRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbnMgKyAxXTsKKwkJCXN0YXRwLT5uc2FkZHJfbGlzdFtuc10gPSBzdGF0cC0+bnNhZGRyX2xpc3RbbnMgKyAxXTsKKwkJCUVYVChzdGF0cCkubnNzb2Nrc1tuc10gPSBFWFQoc3RhdHApLm5zc29ja3NbbnMgKyAxXTsKKwkJCUVYVChzdGF0cCkubnN0aW1lc1tuc10gPSBFWFQoc3RhdHApLm5zdGltZXNbbnMgKyAxXTsKKwkJfQorCQlpZiAoRVhUKHN0YXRwKS5leHQgIT0gTlVMTCkKKwkJCUVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW2xhc3Ruc10gPSBpbnU7CisJCXN0YXRwLT5uc2FkZHJfbGlzdFtsYXN0bnNdID0gaW5hOworCQlFWFQoc3RhdHApLm5zc29ja3NbbGFzdG5zXSA9IGZkOworCQlFWFQoc3RhdHApLm5zdGltZXNbbGFzdG5zXSA9IG5zdGltZTsKKwl9CisKKwkvKgorCSAqIFNlbmQgcmVxdWVzdCwgUkVUUlkgdGltZXMsIG9yIHVudGlsIHN1Y2Nlc3NmdWwuCisJICovCisJZm9yICh0cnkgPSAwOyB0cnkgPCBzdGF0cC0+cmV0cnk7IHRyeSsrKSB7CisJICAgIGZvciAobnMgPSAwOyBucyA8IHN0YXRwLT5uc2NvdW50OyBucysrKSB7CisJCXN0cnVjdCBzb2NrYWRkciAqbnNhcDsKKwkJaW50IG5zYXBsZW47CisJCW5zYXAgPSBnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKTsKKwkJbnNhcGxlbiA9IGdldF9zYWxlbihuc2FwKTsKKwkJc3RhdHAtPl9mbGFncyAmPSB+UkVTX0ZfTEFTVE1BU0s7CisJCXN0YXRwLT5fZmxhZ3MgfD0gKG5zIDw8IFJFU19GX0xBU1RTSElGVCk7Cisgc2FtZV9uczoKKwkJaWYgKHN0YXRwLT5xaG9vaykgeworCQkJaW50IGRvbmUgPSAwLCBsb29wcyA9IDA7CisKKwkJCWRvIHsKKwkJCQlyZXNfc2VuZGhvb2thY3QgYWN0OworCisJCQkJYWN0ID0gKCpzdGF0cC0+cWhvb2spKCZuc2FwLCAmYnVmLCAmYnVmbGVuLAorCQkJCQkJICAgICAgYW5zLCBhbnNzaXosICZyZXNwbGVuKTsKKwkJCQlzd2l0Y2ggKGFjdCkgeworCQkJCWNhc2UgcmVzX2dvYWhlYWQ6CisJCQkJCWRvbmUgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlIHJlc19uZXh0bnM6CisJCQkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJCQlnb3RvIG5leHRfbnM7CisJCQkJY2FzZSByZXNfZG9uZToKKwkJCQkJcmV0dXJuIChyZXNwbGVuKTsKKwkJCQljYXNlIHJlc19tb2RpZmllZDoKKwkJCQkJLyogZ2l2ZSB0aGUgaG9vayBhbm90aGVyIHRyeSAqLworCQkJCQlpZiAoKytsb29wcyA8IDQyKSAvKmRvdWcgYWRhbXMqLworCQkJCQkJYnJlYWs7CisJCQkJCS8qRkFMTFRIUk9VR0gqLworCQkJCWNhc2UgcmVzX2Vycm9yOgorCQkJCQkvKkZBTExUSFJPVUdIKi8KKwkJCQlkZWZhdWx0OgorCQkJCQlnb3RvIGZhaWw7CisJCQkJfQorCQkJfSB3aGlsZSAoIWRvbmUpOworCQl9CisKKwkJRHByaW50KCgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpICYmCisJCQlnZXRuYW1laW5mbyhuc2FwLCAoc29ja2xlbl90KW5zYXBsZW4sIGFidWYsIHNpemVvZihhYnVmKSwKKwkJCQlOVUxMLCAwLCBuaWZsYWdzKSA9PSAwKSwKKwkJCQkoc3Rkb3V0LCAiOzsgUXVlcnlpbmcgc2VydmVyICgjICVkKSBhZGRyZXNzID0gJXNcbiIsCisJCQkJbnMgKyAxLCBhYnVmKSk7CisKKworCQlpZiAodl9jaXJjdWl0KSB7CisJCQkvKiBVc2UgVkM7IGF0IG1vc3Qgb25lIGF0dGVtcHQgcGVyIHNlcnZlci4gKi8KKwkJCXRyeSA9IHN0YXRwLT5yZXRyeTsKKworCQkJbiA9IHNlbmRfdmMoc3RhdHAsIGJ1ZiwgYnVmbGVuLCBhbnMsIGFuc3NpeiwgJnRlcnJubywKKwkJCQkgICAgbnMpOworCisJCQlpZiAoREJHKSB7CisJCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKKwkJCQkJInVzZWQgc2VuZF92YyAlZFxuIiwgbik7CisJCQl9CisKKwkJCWlmIChuIDwgMCkKKwkJCQlnb3RvIGZhaWw7CisJCQlpZiAobiA9PSAwKQorCQkJCWdvdG8gbmV4dF9uczsKKwkJCXJlc3BsZW4gPSBuOworCQl9IGVsc2UgeworCQkJLyogVXNlIGRhdGFncmFtcy4gKi8KKwkJCWlmIChEQkcpIHsKKwkJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLCAidXNpbmcgc2VuZF9kZ1xuIik7CisJCQl9CisKKwkJCW4gPSBzZW5kX2RnKHN0YXRwLCBidWYsIGJ1ZmxlbiwgYW5zLCBhbnNzaXosICZ0ZXJybm8sCisJCQkJICAgIG5zLCAmdl9jaXJjdWl0LCAmZ290c29tZXdoZXJlKTsKKwkJCWlmIChEQkcpIHsKKwkJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLCAidXNlZCBzZW5kX2RnICVkXG4iLG4pOworCQkJfQorCisJCQlpZiAobiA8IDApCisJCQkJZ290byBmYWlsOworCQkJaWYgKG4gPT0gMCkKKwkJCQlnb3RvIG5leHRfbnM7CisJCQlpZiAoREJHKSB7CisJCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwgInRpbWU9JWxkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lKE5VTEwpKTsKKwkJCX0KKwkJCWlmICh2X2NpcmN1aXQpCisJCQkJZ290byBzYW1lX25zOworCQkJcmVzcGxlbiA9IG47CisJCX0KKworCQlEcHJpbnQoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAorCQkgICAgICAgKChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSkgJiYKKwkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMSkpLAorCQkgICAgICAgKHN0ZG91dCwgIjs7IGdvdCBhbnN3ZXI6XG4iKSk7CisKKwkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8CisJCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAorCQkJKHN0ZG91dCwgIiVzIiwgIiIpLAorCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXogOiByZXNwbGVuKTsKKworI2lmIFVTRV9SRVNPTFZfQ0FDSEUKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVfc3RhdHVzID09IFJFU09MVl9DQUNIRV9OT1RGT1VORCkgeworICAgICAgICAgICAgICAgICAgICBfcmVzb2x2X2NhY2hlX2FkZChzdGF0cC0+bmV0aWQsIGJ1ZiwgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnMsIHJlc3BsZW4pOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCQkvKgorCQkgKiBJZiB3ZSBoYXZlIHRlbXBvcmFyaWx5IG9wZW5lZCBhIHZpcnR1YWwgY2lyY3VpdCwKKwkJICogb3IgaWYgd2UgaGF2ZW4ndCBiZWVuIGFza2VkIHRvIGtlZXAgYSBzb2NrZXQgb3BlbiwKKwkJICogY2xvc2UgdGhlIHNvY2tldC4KKwkJICovCisJCWlmICgodl9jaXJjdWl0ICYmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19VU0VWQykgPT0gMFUpIHx8CisJCSAgICAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfU1RBWU9QRU4pID09IDBVKSB7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJfQorCQlpZiAoc3RhdHAtPnJob29rKSB7CisJCQlpbnQgZG9uZSA9IDAsIGxvb3BzID0gMDsKKworCQkJZG8geworCQkJCXJlc19zZW5kaG9va2FjdCBhY3Q7CisKKwkJCQlhY3QgPSAoKnN0YXRwLT5yaG9vaykobnNhcCwgYnVmLCBidWZsZW4sCisJCQkJCQkgICAgICBhbnMsIGFuc3NpeiwgJnJlc3BsZW4pOworCQkJCXN3aXRjaCAoYWN0KSB7CisJCQkJY2FzZSByZXNfZ29haGVhZDoKKwkJCQljYXNlIHJlc19kb25lOgorCQkJCQlkb25lID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSByZXNfbmV4dG5zOgorCQkJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCQkJZ290byBuZXh0X25zOworCQkJCWNhc2UgcmVzX21vZGlmaWVkOgorCQkJCQkvKiBnaXZlIHRoZSBob29rIGFub3RoZXIgdHJ5ICovCisJCQkJCWlmICgrK2xvb3BzIDwgNDIpIC8qZG91ZyBhZGFtcyovCisJCQkJCQlicmVhazsKKwkJCQkJLypGQUxMVEhST1VHSCovCisJCQkJY2FzZSByZXNfZXJyb3I6CisJCQkJCS8qRkFMTFRIUk9VR0gqLworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gZmFpbDsKKwkJCQl9CisJCQl9IHdoaWxlICghZG9uZSk7CisKKwkJfQorCQlyZXR1cm4gKHJlc3BsZW4pOworIG5leHRfbnM6IDsKKwkgICB9IC8qZm9yZWFjaCBucyovCisJfSAvKmZvcmVhY2ggcmV0cnkqLworCXJlc19uY2xvc2Uoc3RhdHApOworCWlmICghdl9jaXJjdWl0KSB7CisJCWlmICghZ290c29tZXdoZXJlKQorCQkJZXJybm8gPSBFQ09OTlJFRlVTRUQ7CS8qIG5vIG5hbWVzZXJ2ZXJzIGZvdW5kICovCisJCWVsc2UKKwkJCWVycm5vID0gRVRJTUVET1VUOwkvKiBubyBhbnN3ZXIgb2J0YWluZWQgKi8KKwl9IGVsc2UKKwkJZXJybm8gPSB0ZXJybm87CisKKyNpZiBVU0VfUkVTT0xWX0NBQ0hFCisgICAgICAgIF9yZXNvbHZfY2FjaGVfcXVlcnlfZmFpbGVkKHN0YXRwLT5uZXRpZCwgYnVmLCBidWZsZW4pOworI2VuZGlmCisKKwlyZXR1cm4gKC0xKTsKKyBmYWlsOgorI2lmIFVTRV9SRVNPTFZfQ0FDSEUKKwlfcmVzb2x2X2NhY2hlX3F1ZXJ5X2ZhaWxlZChzdGF0cC0+bmV0aWQsIGJ1ZiwgYnVmbGVuKTsKKyNlbmRpZgorCXJlc19uY2xvc2Uoc3RhdHApOworCXJldHVybiAoLTEpOworfQorCisvKiBQcml2YXRlICovCisKK3N0YXRpYyBpbnQKK2dldF9zYWxlbihzYSkKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhOworeworCisjaWZkZWYgSEFWRV9TQV9MRU4KKwkvKiBUaGVyZSBhcmUgcGVvcGxlIGRvIG5vdCBzZXQgc2FfbGVuLiAgQmUgZm9yZ2l2aW5nIHRvIHRoZW0uICovCisJaWYgKHNhLT5zYV9sZW4pCisJCXJldHVybiAoc2EtPnNhX2xlbik7CisjZW5kaWYKKworCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQpCisJCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCWVsc2UgaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisJCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwllbHNlCisJCXJldHVybiAoMCk7CS8qIHVua25vd24sIGRpZSBvbiBjb25uZWN0ICovCit9CisKKy8qCisgKiBwaWNrIGFwcHJvcHJpYXRlIG5zYWRkcl9saXN0IGZvciB1c2UuICBzZWUgcmVzX2luaXQoKSBmb3IgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc29ja2FkZHIgKgorZ2V0X25zYWRkcihzdGF0cCwgbikKKwlyZXNfc3RhdGUgc3RhdHA7CisJc2l6ZV90IG47Cit7CisKKwlpZiAoIXN0YXRwLT5uc2FkZHJfbGlzdFtuXS5zaW5fZmFtaWx5ICYmIEVYVChzdGF0cCkuZXh0KSB7CisJCS8qCisJCSAqIC0gRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbl0gaG9sZHMgYW4gYWRkcmVzcyB0aGF0IGlzIGxhcmdlcgorCQkgKiAgIHRoYW4gc3RydWN0IHNvY2thZGRyLCBhbmQKKwkJICogLSB1c2VyIGNvZGUgZGlkIG5vdCB1cGRhdGUgc3RhdHAtPm5zYWRkcl9saXN0W25dLgorCQkgKi8KKwkJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuXTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiAtIHVzZXIgY29kZSB1cGRhdGVkIHN0YXRwLT5uc2FkZHJfbGlzdFtuXSwgb3IKKwkJICogLSBzdGF0cC0+bnNhZGRyX2xpc3Rbbl0gaGFzIHRoZSBzYW1lIGNvbnRlbnQgYXMKKwkJICogICBFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuXS4KKwkJICovCisJCXJldHVybiAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmc3RhdHAtPm5zYWRkcl9saXN0W25dOworCX0KK30KKworc3RhdGljIGludCBnZXRfdGltZW91dChjb25zdCByZXNfc3RhdGUgc3RhdHAsIGNvbnN0IGludCBucykKK3sKKwlpbnQgdGltZW91dCA9IChzdGF0cC0+cmV0cmFucyA8PCBucyk7CisJaWYgKG5zID4gMCkgeworCQl0aW1lb3V0IC89IHN0YXRwLT5uc2NvdW50OworCX0KKwlpZiAodGltZW91dCA8PSAwKSB7CisJCXRpbWVvdXQgPSAxOworCX0KKwlpZiAoREJHKSB7CisJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2luZyB0aW1lb3V0IG9mICVkIHNlY1xuIiwgdGltZW91dCk7CisJfQorCisJcmV0dXJuIHRpbWVvdXQ7Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRfdmMocmVzX3N0YXRlIHN0YXRwLAorCWNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeiwKKwlpbnQgKnRlcnJubywgaW50IG5zKQoreworCWNvbnN0IEhFQURFUiAqaHAgPSAoY29uc3QgSEVBREVSICopKGNvbnN0IHZvaWQgKilidWY7CisJSEVBREVSICphbmhwID0gKEhFQURFUiAqKSh2b2lkICopYW5zOworCXN0cnVjdCBzb2NrYWRkciAqbnNhcDsKKwlpbnQgbnNhcGxlbjsKKwlpbnQgdHJ1bmNhdGluZywgY29ubnJlc2V0LCByZXNwbGVuLCBuOworCXN0cnVjdCBpb3ZlYyBpb3ZbMl07CisJdV9zaG9ydCBsZW47CisJdV9jaGFyICpjcDsKKwl2b2lkICp0bXA7CisKKwlpZiAoREJHKSB7CisJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2luZyBzZW5kX3ZjXG4iKTsKKwl9CisKKwluc2FwID0gZ2V0X25zYWRkcihzdGF0cCwgKHNpemVfdClucyk7CisJbnNhcGxlbiA9IGdldF9zYWxlbihuc2FwKTsKKworCWNvbm5yZXNldCA9IDA7Cisgc2FtZV9uczoKKwl0cnVuY2F0aW5nID0gMDsKKworCS8qIEFyZSB3ZSBzdGlsbCB0YWxraW5nIHRvIHdob20gd2Ugd2FudCB0byB0YWxrIHRvPyAqLworCWlmIChzdGF0cC0+X3Zjc29jayA+PSAwICYmIChzdGF0cC0+X2ZsYWdzICYgUkVTX0ZfVkMpICE9IDApIHsKKwkJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgcGVlcjsKKwkJc29ja2xlbl90IHNpemUgPSBzaXplb2YgcGVlcjsKKwkJdW5zaWduZWQgb2xkX21hcms7CisJCXNvY2tsZW5fdCBtYXJrX3NpemUgPSBzaXplb2Yob2xkX21hcmspOworCQlpZiAoZ2V0cGVlcm5hbWUoc3RhdHAtPl92Y3NvY2ssCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsICZzaXplKSA8IDAgfHwKKwkJICAgICFzb2NrX2VxKChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZwZWVyLCBuc2FwKSB8fAorCQkJZ2V0c29ja29wdChzdGF0cC0+X3Zjc29jaywgU09MX1NPQ0tFVCwgU09fTUFSSywgJm9sZF9tYXJrLCAmbWFya19zaXplKSA8IDAgfHwKKwkJCW9sZF9tYXJrICE9IHN0YXRwLT5fbWFyaykgeworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlzdGF0cC0+X2ZsYWdzICY9IH5SRVNfRl9WQzsKKwkJfQorCX0KKworCWlmIChzdGF0cC0+X3Zjc29jayA8IDAgfHwgKHN0YXRwLT5fZmxhZ3MgJiBSRVNfRl9WQykgPT0gMCkgeworCQlpZiAoc3RhdHAtPl92Y3NvY2sgPj0gMCkKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCisJCXN0YXRwLT5fdmNzb2NrID0gc29ja2V0KG5zYXAtPnNhX2ZhbWlseSwgU09DS19TVFJFQU0gfCBTT0NLX0NMT0VYRUMsIDApOworCQlpZiAoc3RhdHAtPl92Y3NvY2sgPiBoaWdoZXN0RkQpIHsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJZXJybm8gPSBFTk9UU09DSzsKKwkJfQorCQlpZiAoc3RhdHAtPl92Y3NvY2sgPCAwKSB7CisJCQlzd2l0Y2ggKGVycm5vKSB7CisJCQljYXNlIEVQUk9UT05PU1VQUE9SVDoKKyNpZmRlZiBFUEZOT1NVUFBPUlQKKwkJCWNhc2UgRVBGTk9TVVBQT1JUOgorI2VuZGlmCisJCQljYXNlIEVBRk5PU1VQUE9SVDoKKwkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNvY2tldCh2YykiLCBlcnJubyk7CisJCQkJcmV0dXJuICgwKTsKKwkJCWRlZmF1bHQ6CisJCQkJKnRlcnJubyA9IGVycm5vOworCQkJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic29ja2V0KHZjKSIsIGVycm5vKTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJfQorCQlpZiAoc3RhdHAtPl9tYXJrICE9IE1BUktfVU5TRVQpIHsKKwkJCWlmIChzZXRzb2Nrb3B0KHN0YXRwLT5fdmNzb2NrLCBTT0xfU09DS0VULAorCQkJCSAgICAgICAgU09fTUFSSywgJnN0YXRwLT5fbWFyaywgc2l6ZW9mKHN0YXRwLT5fbWFyaykpIDwgMCkgeworCQkJCSp0ZXJybm8gPSBlcnJubzsKKwkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNldHNvY2tvcHQiLCBlcnJubyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWVycm5vID0gMDsKKwkJaWYgKHJhbmRvbV9iaW5kKHN0YXRwLT5fdmNzb2NrLG5zYXAtPnNhX2ZhbWlseSkgPCAwKSB7CisJCQkqdGVycm5vID0gZXJybm87CisJCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImJpbmQvdmMiLCBlcnJubywgbnNhcCwKKwkJCSAgICBuc2FwbGVuKTsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlpZiAoY29ubmVjdF93aXRoX3RpbWVvdXQoc3RhdHAtPl92Y3NvY2ssIG5zYXAsIChzb2NrbGVuX3QpbnNhcGxlbiwKKwkJCQlnZXRfdGltZW91dChzdGF0cCwgbnMpKSA8IDApIHsKKwkJCSp0ZXJybm8gPSBlcnJubzsKKwkJCUFlcnJvcihzdGF0cCwgc3RkZXJyLCAiY29ubmVjdC92YyIsIGVycm5vLCBuc2FwLAorCQkJICAgIG5zYXBsZW4pOworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlyZXR1cm4gKDApOworCQl9CisJCXN0YXRwLT5fZmxhZ3MgfD0gUkVTX0ZfVkM7CisJfQorCisJLyoKKwkgKiBTZW5kIGxlbmd0aCAmIG1lc3NhZ2UKKwkgKi8KKwluc19wdXQxNigodV9zaG9ydClidWZsZW4sICh1X2NoYXIqKSh2b2lkICopJmxlbik7CisJaW92WzBdID0gZXZDb25zSW92ZWMoJmxlbiwgSU5UMTZTWik7CisJREVfQ09OU1QoYnVmLCB0bXApOworCWlvdlsxXSA9IGV2Q29uc0lvdmVjKHRtcCwgKHNpemVfdClidWZsZW4pOworCWlmICh3cml0ZXYoc3RhdHAtPl92Y3NvY2ssIGlvdiwgMikgIT0gKElOVDE2U1ogKyBidWZsZW4pKSB7CisJCSp0ZXJybm8gPSBlcnJubzsKKwkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJ3cml0ZSBmYWlsZWQiLCBlcnJubyk7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwkvKgorCSAqIFJlY2VpdmUgbGVuZ3RoICYgcmVzcG9uc2UKKwkgKi8KKyByZWFkX2xlbjoKKwljcCA9IGFuczsKKwlsZW4gPSBJTlQxNlNaOworCXdoaWxlICgobiA9IHJlYWQoc3RhdHAtPl92Y3NvY2ssIChjaGFyICopY3AsIChzaXplX3QpbGVuKSkgPiAwKSB7CisJCWNwICs9IG47CisJCWlmICgobGVuIC09IG4pID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKG4gPD0gMCkgeworCQkqdGVycm5vID0gZXJybm87CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAicmVhZCBmYWlsZWQiLCBlcnJubyk7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQkvKgorCQkgKiBBIGxvbmcgcnVubmluZyBwcm9jZXNzIG1pZ2h0IGdldCBpdHMgVENQCisJCSAqIGNvbm5lY3Rpb24gcmVzZXQgaWYgdGhlIHJlbW90ZSBzZXJ2ZXIgd2FzCisJCSAqIHJlc3RhcnRlZC4gIFJlcXVlcnkgdGhlIHNlcnZlciBpbnN0ZWFkIG9mCisJCSAqIHRyeWluZyBhIG5ldyBvbmUuICBXaGVuIHRoZXJlIGlzIG9ubHkgb25lCisJCSAqIHNlcnZlciwgdGhpcyBtZWFucyB0aGF0IGEgcXVlcnkgbWlnaHQgd29yaworCQkgKiBpbnN0ZWFkIG9mIGZhaWxpbmcuICBXZSBvbmx5IGFsbG93IG9uZSByZXNldAorCQkgKiBwZXIgcXVlcnkgdG8gcHJldmVudCBsb29waW5nLgorCQkgKi8KKwkJaWYgKCp0ZXJybm8gPT0gRUNPTk5SRVNFVCAmJiAhY29ubnJlc2V0KSB7CisJCQljb25ucmVzZXQgPSAxOworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlnb3RvIHNhbWVfbnM7CisJCX0KKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorCXJlc3BsZW4gPSBuc19nZXQxNihhbnMpOworCWlmIChyZXNwbGVuID4gYW5zc2l6KSB7CisJCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKKwkJICAgICAgIChzdGRvdXQsICI7OyByZXNwb25zZSB0cnVuY2F0ZWRcbiIpCisJCSAgICAgICApOworCQl0cnVuY2F0aW5nID0gMTsKKwkJbGVuID0gYW5zc2l6OworCX0gZWxzZQorCQlsZW4gPSByZXNwbGVuOworCWlmIChsZW4gPCBIRklYRURTWikgeworCQkvKgorCQkgKiBVbmRlcnNpemVkIG1lc3NhZ2UuCisJCSAqLworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCSAgICAgICAoc3Rkb3V0LCAiOzsgdW5kZXJzaXplZDogJWRcbiIsIGxlbikpOworCQkqdGVycm5vID0gRU1TR1NJWkU7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwljcCA9IGFuczsKKwl3aGlsZSAobGVuICE9IDAgJiYgKG4gPSByZWFkKHN0YXRwLT5fdmNzb2NrLCAoY2hhciAqKWNwLCAoc2l6ZV90KWxlbikpID4gMCl7CisJCWNwICs9IG47CisJCWxlbiAtPSBuOworCX0KKwlpZiAobiA8PSAwKSB7CisJCSp0ZXJybm8gPSBlcnJubzsKKwkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJyZWFkKHZjKSIsIGVycm5vKTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorCWlmICh0cnVuY2F0aW5nKSB7CisJCS8qCisJCSAqIEZsdXNoIHJlc3Qgb2YgYW5zd2VyIHNvIGNvbm5lY3Rpb24gc3RheXMgaW4gc3luY2guCisJCSAqLworCQlhbmhwLT50YyA9IDE7CisJCWxlbiA9IHJlc3BsZW4gLSBhbnNzaXo7CisJCXdoaWxlIChsZW4gIT0gMCkgeworCQkJY2hhciBqdW5rW1BBQ0tFVFNaXTsKKworCQkJbiA9IHJlYWQoc3RhdHAtPl92Y3NvY2ssIGp1bmssCisJCQkJIChsZW4gPiBzaXplb2YganVuaykgPyBzaXplb2YganVuayA6IGxlbik7CisJCQlpZiAobiA+IDApCisJCQkJbGVuIC09IG47CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwl9CisJLyoKKwkgKiBJZiB0aGUgY2FsbGluZyBhcHBsaWNhdGluZyBoYXMgYmFpbGVkIG91dCBvZgorCSAqIGEgcHJldmlvdXMgY2FsbCBhbmQgZmFpbGVkIHRvIGFycmFuZ2UgdG8gaGF2ZQorCSAqIHRoZSBjaXJjdWl0IGNsb3NlZCBvciB0aGUgc2VydmVyIGhhcyBnb3QKKwkgKiBpdHNlbGYgY29uZnVzZWQsIHRoZW4gZHJvcCB0aGUgcGFja2V0IGFuZAorCSAqIHdhaXQgZm9yIHRoZSBjb3JyZWN0IG9uZS4KKwkgKi8KKwlpZiAoaHAtPmlkICE9IGFuaHAtPmlkKSB7CisJCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAorCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKKwkJCShzdGRvdXQsICI7OyBvbGQgYW5zd2VyICh1bmV4cGVjdGVkKTpcbiIpLAorCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXo6IHJlc3BsZW4pOworCQlnb3RvIHJlYWRfbGVuOworCX0KKworCS8qCisJICogQWxsIGlzIHdlbGwsIG9yIHRoZSBlcnJvciBpcyBmYXRhbC4gIFNpZ25hbCB0aGF0IHRoZQorCSAqIG5leHQgbmFtZXNlcnZlciBvdWdodCBub3QgYmUgdHJpZWQuCisJICovCisJcmV0dXJuIChyZXNwbGVuKTsKK30KKworLyogcmV0dXJuIC0xIG9uIGVycm9yIChlcnJubyBzZXQpLCAwIG9uIHN1Y2Nlc3MgKi8KK3N0YXRpYyBpbnQKK2Nvbm5lY3Rfd2l0aF90aW1lb3V0KGludCBzb2NrLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKm5zYXAsIHNvY2tsZW5fdCBzYWxlbiwgaW50IHNlYykKK3sKKwlpbnQgcmVzLCBvcmlnZmxhZ3M7CisJZmRfc2V0IHJzZXQsIHdzZXQ7CisJc3RydWN0IHRpbWVzcGVjIG5vdywgdGltZW91dCwgZmluaXNoOworCisJb3JpZ2ZsYWdzID0gZmNudGwoc29jaywgRl9HRVRGTCwgMCk7CisJZmNudGwoc29jaywgRl9TRVRGTCwgb3JpZ2ZsYWdzIHwgT19OT05CTE9DSyk7CisKKwlyZXMgPSBfX2Nvbm5lY3Qoc29jaywgbnNhcCwgc2FsZW4pOworCWlmIChyZXMgPCAwICYmIGVycm5vICE9IEVJTlBST0dSRVNTKSB7CisgICAgICAgICAgICAgICAgcmVzID0gLTE7CisgICAgICAgICAgICAgICAgZ290byBkb25lOworCX0KKwlpZiAocmVzICE9IDApIHsKKwkJbm93ID0gZXZOb3dUaW1lKCk7CisJCXRpbWVvdXQgPSBldkNvbnNUaW1lKChsb25nKXNlYywgMEwpOworCQlmaW5pc2ggPSBldkFkZFRpbWUobm93LCB0aW1lb3V0KTsKKwkJaWYgKERCRykgeworCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwgIiAgJWQgc2VuZF92Y1xuIiwgc29jayk7CisJCX0KKworCQlyZXMgPSByZXRyeWluZ19zZWxlY3Qoc29jaywgJnJzZXQsICZ3c2V0LCAmZmluaXNoKTsKKwkJaWYgKHJlcyA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSAtMTsKKwkJfQorCX0KK2RvbmU6CisJZmNudGwoc29jaywgRl9TRVRGTCwgb3JpZ2ZsYWdzKTsKKwlpZiAoREJHKSB7CisJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsCisJCQkiICAlZCBjb25uZWN0X3dpdGhfdGltZW91dCByZXR1cm5pbmcgJWRcbiIsIHNvY2ssIHJlcyk7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQKK3JldHJ5aW5nX3NlbGVjdChjb25zdCBpbnQgc29jaywgZmRfc2V0ICpyZWFkc2V0LCBmZF9zZXQgKndyaXRlc2V0LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmZpbmlzaCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgbm93LCB0aW1lb3V0OworCWludCBuLCBlcnJvcjsKKwlzb2NrbGVuX3QgbGVuOworCisKK3JldHJ5OgorCWlmIChEQkcpIHsKKwkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwgIiAgJWQgcmV0eWluZ19zZWxlY3RcbiIsIHNvY2spOworCX0KKworCW5vdyA9IGV2Tm93VGltZSgpOworCWlmIChyZWFkc2V0KSB7CisJCUZEX1pFUk8ocmVhZHNldCk7CisJCUZEX1NFVChzb2NrLCByZWFkc2V0KTsKKwl9CisJaWYgKHdyaXRlc2V0KSB7CisJCUZEX1pFUk8od3JpdGVzZXQpOworCQlGRF9TRVQoc29jaywgd3JpdGVzZXQpOworCX0KKwlpZiAoZXZDbXBUaW1lKCpmaW5pc2gsIG5vdykgPiAwKQorCQl0aW1lb3V0ID0gZXZTdWJUaW1lKCpmaW5pc2gsIG5vdyk7CisJZWxzZQorCQl0aW1lb3V0ID0gZXZDb25zVGltZSgwTCwgMEwpOworCisJbiA9IHBzZWxlY3Qoc29jayArIDEsIHJlYWRzZXQsIHdyaXRlc2V0LCBOVUxMLCAmdGltZW91dCwgTlVMTCk7CisJaWYgKG4gPT0gMCkgeworCQlpZiAoREJHKSB7CisJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgIiBsaWJjIiwKKwkJCQkiICAlZCByZXRyeWluZ19zZWxlY3QgdGltZW91dFxuIiwgc29jayk7CisJCX0KKwkJZXJybm8gPSBFVElNRURPVVQ7CisJCXJldHVybiAwOworCX0KKwlpZiAobiA8IDApIHsKKwkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJZ290byByZXRyeTsKKwkJaWYgKERCRykgeworCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKKwkJCQkiICAlZCByZXRyeWluZ19zZWxlY3QgZ290IGVycm9yICVkXG4iLHNvY2ssIG4pOworCQl9CisJCXJldHVybiBuOworCX0KKwlpZiAoKHJlYWRzZXQgJiYgRkRfSVNTRVQoc29jaywgcmVhZHNldCkpIHx8ICh3cml0ZXNldCAmJiBGRF9JU1NFVChzb2NrLCB3cml0ZXNldCkpKSB7CisJCWxlbiA9IHNpemVvZihlcnJvcik7CisJCWlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX0VSUk9SLCAmZXJyb3IsICZsZW4pIDwgMCB8fCBlcnJvcikgeworCQkJZXJybm8gPSBlcnJvcjsKKwkJCWlmIChEQkcpIHsKKwkJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAorCQkJCQkiICAlZCByZXRyeWluZ19zZWxlY3QgZG90IGVycm9yMiAlZFxuIiwgc29jaywgZXJybm8pOworCQkJfQorCisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJaWYgKERCRykgeworCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAorCQkJIiAgJWQgcmV0cnlpbmdfc2VsZWN0IHJldHVybmluZyAlZFxuIixzb2NrLCBuKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworCitzdGF0aWMgaW50CitzZW5kX2RnKHJlc19zdGF0ZSBzdGF0cCwKKwljb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgdV9jaGFyICphbnMsIGludCBhbnNzaXosCisJaW50ICp0ZXJybm8sIGludCBucywgaW50ICp2X2NpcmN1aXQsIGludCAqZ290c29tZXdoZXJlKQoreworCWNvbnN0IEhFQURFUiAqaHAgPSAoY29uc3QgSEVBREVSICopKGNvbnN0IHZvaWQgKilidWY7CisJSEVBREVSICphbmhwID0gKEhFQURFUiAqKSh2b2lkICopYW5zOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqbnNhcDsKKwlpbnQgbnNhcGxlbjsKKwlzdHJ1Y3QgdGltZXNwZWMgbm93LCB0aW1lb3V0LCBmaW5pc2g7CisJZmRfc2V0IGRzbWFzazsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBmcm9tOworCXNvY2tsZW5fdCBmcm9tbGVuOworCWludCByZXNwbGVuLCBzZWNvbmRzLCBuLCBzOworCisJbnNhcCA9IGdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOworCW5zYXBsZW4gPSBnZXRfc2FsZW4obnNhcCk7CisJaWYgKEVYVChzdGF0cCkubnNzb2Nrc1tuc10gPT0gLTEpIHsKKwkJRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9IHNvY2tldChuc2FwLT5zYV9mYW1pbHksIFNPQ0tfREdSQU0gfCBTT0NLX0NMT0VYRUMsIDApOworCQlpZiAoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA+IGhpZ2hlc3RGRCkgeworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQllcnJubyA9IEVOT1RTT0NLOworCQl9CisJCWlmIChFWFQoc3RhdHApLm5zc29ja3NbbnNdIDwgMCkgeworCQkJc3dpdGNoIChlcnJubykgeworCQkJY2FzZSBFUFJPVE9OT1NVUFBPUlQ6CisjaWZkZWYgRVBGTk9TVVBQT1JUCisJCQljYXNlIEVQRk5PU1VQUE9SVDoKKyNlbmRpZgorCQkJY2FzZSBFQUZOT1NVUFBPUlQ6CisJCQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJzb2NrZXQoZGcpIiwgZXJybm8pOworCQkJCXJldHVybiAoMCk7CisJCQlkZWZhdWx0OgorCQkJCSp0ZXJybm8gPSBlcnJubzsKKwkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNvY2tldChkZykiLCBlcnJubyk7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCX0KKworCQlpZiAoc3RhdHAtPl9tYXJrICE9IE1BUktfVU5TRVQpIHsKKwkJCWlmIChzZXRzb2Nrb3B0KEVYVChzdGF0cCkubnNzb2Nrc1tuc10sIFNPTF9TT0NLRVQsCisJCQkJCVNPX01BUkssICYoc3RhdHAtPl9tYXJrKSwgc2l6ZW9mKHN0YXRwLT5fbWFyaykpIDwgMCkgeworCQkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorI2lmbmRlZiBDQU5OT1RfQ09OTkVDVF9ER1JBTQorCQkvKgorCQkgKiBPbiBhIDQuM0JTRCsgbWFjaGluZSAoY2xpZW50IGFuZCBzZXJ2ZXIsCisJCSAqIGFjdHVhbGx5KSwgc2VuZGluZyB0byBhIG5hbWVzZXJ2ZXIgZGF0YWdyYW0KKwkJICogcG9ydCB3aXRoIG5vIG5hbWVzZXJ2ZXIgd2lsbCBjYXVzZSBhbgorCQkgKiBJQ01QIHBvcnQgdW5yZWFjaGFibGUgbWVzc2FnZSB0byBiZSByZXR1cm5lZC4KKwkJICogSWYgb3VyIGRhdGFncmFtIHNvY2tldCBpcyAiY29ubmVjdGVkIiB0byB0aGUKKwkJICogc2VydmVyLCB3ZSBnZXQgYW4gRUNPTk5SRUZVU0VEIGVycm9yIG9uIHRoZSBuZXh0CisJCSAqIHNvY2tldCBvcGVyYXRpb24sIGFuZCBzZWxlY3QgcmV0dXJucyBpZiB0aGUKKwkJICogZXJyb3IgbWVzc2FnZSBpcyByZWNlaXZlZC4gIFdlIGNhbiB0aHVzIGRldGVjdAorCQkgKiB0aGUgYWJzZW5jZSBvZiBhIG5hbWVzZXJ2ZXIgd2l0aG91dCB0aW1pbmcgb3V0LgorCQkgKi8KKwkJaWYgKHJhbmRvbV9iaW5kKEVYVChzdGF0cCkubnNzb2Nrc1tuc10sIG5zYXAtPnNhX2ZhbWlseSkgPCAwKSB7CisJCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImJpbmQoZGcpIiwgZXJybm8sIG5zYXAsCisJCQkgICAgbnNhcGxlbik7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJaWYgKF9fY29ubmVjdChFWFQoc3RhdHApLm5zc29ja3NbbnNdLCBuc2FwLCAoc29ja2xlbl90KW5zYXBsZW4pIDwgMCkgeworCQkJQWVycm9yKHN0YXRwLCBzdGRlcnIsICJjb25uZWN0KGRnKSIsIGVycm5vLCBuc2FwLAorCQkJICAgIG5zYXBsZW4pOworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlyZXR1cm4gKDApOworCQl9CisjZW5kaWYgLyogIUNBTk5PVF9DT05ORUNUX0RHUkFNICovCisJCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKKwkJICAgICAgIChzdGRvdXQsICI7OyBuZXcgREcgc29ja2V0XG4iKSkKKworCX0KKwlzID0gRVhUKHN0YXRwKS5uc3NvY2tzW25zXTsKKyNpZm5kZWYgQ0FOTk9UX0NPTk5FQ1RfREdSQU0KKwlpZiAoc2VuZChzLCAoY29uc3QgY2hhciopYnVmLCAoc2l6ZV90KWJ1ZmxlbiwgMCkgIT0gYnVmbGVuKSB7CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic2VuZCIsIGVycm5vKTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorI2Vsc2UgLyogIUNBTk5PVF9DT05ORUNUX0RHUkFNICovCisJaWYgKHNlbmR0byhzLCAoY29uc3QgY2hhciopYnVmLCBidWZsZW4sIDAsIG5zYXAsIG5zYXBsZW4pICE9IGJ1ZmxlbikKKwl7CisJCUFlcnJvcihzdGF0cCwgc3RkZXJyLCAic2VuZHRvIiwgZXJybm8sIG5zYXAsIG5zYXBsZW4pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisjZW5kaWYgLyogIUNBTk5PVF9DT05ORUNUX0RHUkFNICovCisKKwkvKgorCSAqIFdhaXQgZm9yIHJlcGx5LgorCSAqLworCXNlY29uZHMgPSBnZXRfdGltZW91dChzdGF0cCwgbnMpOworCW5vdyA9IGV2Tm93VGltZSgpOworCXRpbWVvdXQgPSBldkNvbnNUaW1lKChsb25nKXNlY29uZHMsIDBMKTsKKwlmaW5pc2ggPSBldkFkZFRpbWUobm93LCB0aW1lb3V0KTsKK3JldHJ5OgorCW4gPSByZXRyeWluZ19zZWxlY3QocywgJmRzbWFzaywgTlVMTCwgJmZpbmlzaCk7CisKKwlpZiAobiA9PSAwKSB7CisJCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywgKHN0ZG91dCwgIjs7IHRpbWVvdXRcbiIpKTsKKwkJKmdvdHNvbWV3aGVyZSA9IDE7CisJCXJldHVybiAoMCk7CisJfQorCWlmIChuIDwgMCkgeworCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNlbGVjdCIsIGVycm5vKTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorCWVycm5vID0gMDsKKwlmcm9tbGVuID0gc2l6ZW9mKGZyb20pOworCXJlc3BsZW4gPSByZWN2ZnJvbShzLCAoY2hhciopYW5zLCAoc2l6ZV90KWFuc3NpeiwwLAorCQkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJmZyb20sICZmcm9tbGVuKTsKKwlpZiAocmVzcGxlbiA8PSAwKSB7CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAicmVjdmZyb20iLCBlcnJubyk7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwkqZ290c29tZXdoZXJlID0gMTsKKwlpZiAocmVzcGxlbiA8IEhGSVhFRFNaKSB7CisJCS8qCisJCSAqIFVuZGVyc2l6ZWQgbWVzc2FnZS4KKwkJICovCisJCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKKwkJICAgICAgIChzdGRvdXQsICI7OyB1bmRlcnNpemVkOiAlZFxuIiwKKwkJCXJlc3BsZW4pKTsKKwkJKnRlcnJubyA9IEVNU0dTSVpFOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKGhwLT5pZCAhPSBhbmhwLT5pZCkgeworCQkvKgorCQkgKiByZXNwb25zZSBmcm9tIG9sZCBxdWVyeSwgaWdub3JlIGl0LgorCQkgKiBYWFggLSBwb3RlbnRpYWwgc2VjdXJpdHkgaGF6YXJkIGNvdWxkCisJCSAqCSBiZSBkZXRlY3RlZCBoZXJlLgorCQkgKi8KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKwkJX19saWJjX2FuZHJvaWRfbG9nX2V2ZW50X3VpZChCSU9OSUNfRVZFTlRfUkVTT0xWRVJfT0xEX1JFU1BPTlNFKTsKKyNlbmRpZgorCQlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwKKwkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSksCisJCQkoc3Rkb3V0LCAiOzsgb2xkIGFuc3dlcjpcbiIpLAorCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXogOiByZXNwbGVuKTsKKwkJZ290byByZXRyeTsKKwl9CisJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfSU5TRUNVUkUxKSAmJgorCSAgICAhcmVzX291cnNlcnZlcl9wKHN0YXRwLCAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmZnJvbSkpIHsKKwkJLyoKKwkJICogcmVzcG9uc2UgZnJvbSB3cm9uZyBzZXJ2ZXI/IGlnbm9yZSBpdC4KKwkJICogWFhYIC0gcG90ZW50aWFsIHNlY3VyaXR5IGhhemFyZCBjb3VsZAorCQkgKgkgYmUgZGV0ZWN0ZWQgaGVyZS4KKwkJICovCisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisJCV9fbGliY19hbmRyb2lkX2xvZ19ldmVudF91aWQoQklPTklDX0VWRU5UX1JFU09MVkVSX1dST05HX1NFUlZFUik7CisjZW5kaWYKKwkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8CisJCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAorCQkJKHN0ZG91dCwgIjs7IG5vdCBvdXIgc2VydmVyOlxuIiksCisJCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOworCQlnb3RvIHJldHJ5OworCX0KKyNpZmRlZiBSRVNfVVNFX0VETlMwCisJaWYgKGFuaHAtPnJjb2RlID09IEZPUk1FUlIgJiYgKHN0YXRwLT5vcHRpb25zICYgUkVTX1VTRV9FRE5TMCkgIT0gMFUpIHsKKwkJLyoKKwkJICogRG8gbm90IHJldHJ5IGlmIHRoZSBzZXJ2ZXIgZG8gbm90IHVuZGVyc3RhbmQgRUROUzAuCisJCSAqIFRoZSBjYXNlIGhhcyB0byBiZSBjYXB0dXJlZCBoZXJlLCBhcyBGT1JNRVJSIHBhY2tldCBkbyBub3QKKwkJICogY2FycnkgcXVlcnkgc2VjdGlvbiwgaGVuY2UgcmVzX3F1ZXJpZXNtYXRjaCgpIHJldHVybnMgMC4KKwkJICovCisJCURwcmludFEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCQkoc3Rkb3V0LCAic2VydmVyIHJlamVjdGVkIHF1ZXJ5IHdpdGggRUROUzA6XG4iKSwKKwkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7CisJCS8qIHJlY29yZCB0aGUgZXJyb3IgKi8KKwkJc3RhdHAtPl9mbGFncyB8PSBSRVNfRl9FRE5TMEVSUjsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorI2VuZGlmCisJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfSU5TRUNVUkUyKSAmJgorCSAgICAhcmVzX3F1ZXJpZXNtYXRjaChidWYsIGJ1ZiArIGJ1ZmxlbiwKKwkJCSAgICAgIGFucywgYW5zICsgYW5zc2l6KSkgeworCQkvKgorCQkgKiByZXNwb25zZSBjb250YWlucyB3cm9uZyBxdWVyeT8gaWdub3JlIGl0LgorCQkgKiBYWFggLSBwb3RlbnRpYWwgc2VjdXJpdHkgaGF6YXJkIGNvdWxkCisJCSAqCSBiZSBkZXRlY3RlZCBoZXJlLgorCQkgKi8KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKwkJX19saWJjX2FuZHJvaWRfbG9nX2V2ZW50X3VpZChCSU9OSUNfRVZFTlRfUkVTT0xWRVJfV1JPTkdfUVVFUlkpOworI2VuZGlmCisJCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAorCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKKwkJCShzdGRvdXQsICI7OyB3cm9uZyBxdWVyeSBuYW1lOlxuIiksCisJCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOworCQlnb3RvIHJldHJ5OzsKKwl9CisJaWYgKGFuaHAtPnJjb2RlID09IFNFUlZGQUlMIHx8CisJICAgIGFuaHAtPnJjb2RlID09IE5PVElNUCB8fAorCSAgICBhbmhwLT5yY29kZSA9PSBSRUZVU0VEKSB7CisJCURwcmludFEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCQkoc3Rkb3V0LCAic2VydmVyIHJlamVjdGVkIHF1ZXJ5OlxuIiksCisJCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJLyogZG9uJ3QgcmV0cnkgaWYgY2FsbGVkIGZyb20gZGlnICovCisJCWlmICghc3RhdHAtPnBmY29kZSkKKwkJCXJldHVybiAoMCk7CisJfQorCWlmICghKHN0YXRwLT5vcHRpb25zICYgUkVTX0lHTlRDKSAmJiBhbmhwLT50YykgeworCQkvKgorCQkgKiBUbyBnZXQgdGhlIHJlc3Qgb2YgYW5zd2VyLAorCQkgKiB1c2UgVENQIHdpdGggc2FtZSBzZXJ2ZXIuCisJCSAqLworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCSAgICAgICAoc3Rkb3V0LCAiOzsgdHJ1bmNhdGVkIGFuc3dlclxuIikpOworCQkqdl9jaXJjdWl0ID0gMTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMSk7CisJfQorCS8qCisJICogQWxsIGlzIHdlbGwsIG9yIHRoZSBlcnJvciBpcyBmYXRhbC4gIFNpZ25hbCB0aGF0IHRoZQorCSAqIG5leHQgbmFtZXNlcnZlciBvdWdodCBub3QgYmUgdHJpZWQuCisJICovCisJcmV0dXJuIChyZXNwbGVuKTsKK30KKworc3RhdGljIHZvaWQKK0FlcnJvcihjb25zdCByZXNfc3RhdGUgc3RhdHAsIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGVycm9yLAorICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgaW50IGFsZW4pCit7CisJaW50IHNhdmUgPSBlcnJubzsKKwljaGFyIGhidWZbTklfTUFYSE9TVF07CisJY2hhciBzYnVmW05JX01BWFNFUlZdOworCisJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgIT0gMFUpIHsKKwkJaWYgKGdldG5hbWVpbmZvKGFkZHJlc3MsIChzb2NrbGVuX3QpYWxlbiwgaGJ1Ziwgc2l6ZW9mKGhidWYpLAorCQkgICAgc2J1Ziwgc2l6ZW9mKHNidWYpLCBuaWZsYWdzKSkgeworCQkJc3RybmNweShoYnVmLCAiPyIsIHNpemVvZihoYnVmKSAtIDEpOworCQkJaGJ1ZltzaXplb2YoaGJ1ZikgLSAxXSA9ICdcMCc7CisJCQlzdHJuY3B5KHNidWYsICI/Iiwgc2l6ZW9mKHNidWYpIC0gMSk7CisJCQlzYnVmW3NpemVvZihzYnVmKSAtIDFdID0gJ1wwJzsKKwkJfQorCQlmcHJpbnRmKGZpbGUsICJyZXNfc2VuZDogJXMgKFslc10uJXMpOiAlc1xuIiwKKwkJCXN0cmluZywgaGJ1Ziwgc2J1Ziwgc3RyZXJyb3IoZXJyb3IpKTsKKwl9CisJZXJybm8gPSBzYXZlOworfQorCitzdGF0aWMgdm9pZAorUGVycm9yKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgRklMRSAqZmlsZSwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZXJyb3IpIHsKKwlpbnQgc2F2ZSA9IGVycm5vOworCisJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgIT0gMFUpCisJCWZwcmludGYoZmlsZSwgInJlc19zZW5kOiAlczogJXNcbiIsCisJCQlzdHJpbmcsIHN0cmVycm9yKGVycm9yKSk7CisJZXJybm8gPSBzYXZlOworfQorCitzdGF0aWMgaW50Citzb2NrX2VxKHN0cnVjdCBzb2NrYWRkciAqYSwgc3RydWN0IHNvY2thZGRyICpiKSB7CisJc3RydWN0IHNvY2thZGRyX2luICphNCwgKmI0OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmE2LCAqYjY7CisKKwlpZiAoYS0+c2FfZmFtaWx5ICE9IGItPnNhX2ZhbWlseSkKKwkJcmV0dXJuIDA7CisJc3dpdGNoIChhLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWE0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopYTsKKwkJYjQgPSAoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKiliOworCQlyZXR1cm4gYTQtPnNpbl9wb3J0ID09IGI0LT5zaW5fcG9ydCAmJgorCQkgICAgYTQtPnNpbl9hZGRyLnNfYWRkciA9PSBiNC0+c2luX2FkZHIuc19hZGRyOworCWNhc2UgQUZfSU5FVDY6CisJCWE2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWE7CisJCWI2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWI7CisJCXJldHVybiBhNi0+c2luNl9wb3J0ID09IGI2LT5zaW42X3BvcnQgJiYKKyNpZmRlZiBIQVZFX1NJTjZfU0NPUEVfSUQKKwkJICAgIGE2LT5zaW42X3Njb3BlX2lkID09IGI2LT5zaW42X3Njb3BlX2lkICYmCisjZW5kaWYKKwkJICAgIElONl9BUkVfQUREUl9FUVVBTCgmYTYtPnNpbjZfYWRkciwgJmI2LT5zaW42X2FkZHIpOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworI2lmZGVmIE5FRURfUFNFTEVDVAorLyogWFhYIG5lZWRzIHRvIG1vdmUgdG8gdGhlIHBvcnRpbmcgbGlicmFyeS4gKi8KK3N0YXRpYyBpbnQKK3BzZWxlY3QoaW50IG5mZHMsIHZvaWQgKnJmZHMsIHZvaWQgKndmZHMsIHZvaWQgKmVmZHMsCisJc3RydWN0IHRpbWVzcGVjICp0c3AsIGNvbnN0IHNpZ3NldF90ICpzaWdtYXNrKQoreworCXN0cnVjdCB0aW1ldmFsIHR2LCAqdHZwOworCXNpZ3NldF90IHNpZ3M7CisJaW50IG47CisKKwlpZiAodHNwKSB7CisJCXR2cCA9ICZ0djsKKwkJdHYgPSBldlRpbWVWYWwoKnRzcCk7CisJfSBlbHNlCisJCXR2cCA9IE5VTEw7CisJaWYgKHNpZ21hc2spCisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCBzaWdtYXNrLCAmc2lncyk7CisJbiA9IHNlbGVjdChuZmRzLCByZmRzLCB3ZmRzLCBlZmRzLCB0dnApOworCWlmIChzaWdtYXNrKQorCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJnNpZ3MsIE5VTEwpOworCWlmICh0c3ApCisJCSp0c3AgPSBldlRpbWVTcGVjKHR2KTsKKwlyZXR1cm4gKG4pOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Rucy9yZXNvbHYvcmVzX3N0YXRlLmMgYi9saWJjL2Rucy9yZXNvbHYvcmVzX3N0YXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3OTFkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvZG5zL3Jlc29sdi9yZXNfc3RhdGUuYwpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgX1JFQUxMWV9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSF8KKyNpbmNsdWRlIDxzeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisKKy8qIFNldCB0byAxIHRvIGVuYWJsZSBkZWJ1ZyB0cmFjZXMgKi8KKyNkZWZpbmUgREVCVUcgMAorCisjaWYgREVCVUcKKyMgIGluY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCisjICBpbmNsdWRlIDx1bmlzdGQuaD4gIC8qIGZvciBnZXR0aWQoKSAqLworIyAgZGVmaW5lIEQoLi4uKSBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywibGliYyIsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyMgIGRlZmluZSBEKC4uLikgIGRve313aGlsZSgwKQorI2VuZGlmCisKK3N0YXRpYyBwdGhyZWFkX2tleV90ICAgX3Jlc19rZXk7CitzdGF0aWMgcHRocmVhZF9vbmNlX3QgIF9yZXNfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50ICAgICAgICAgICAgICAgICAgX2hfZXJybm87CisgICAgLy8gVE9ETzogSGF2ZSBvbmUgX19yZXNfc3RhdGUgcGVyIG5ldHdvcmsgc28gd2UgZG9uJ3QgaGF2ZSB0byByZXBvcHVsYXRlIGZyZXF1ZW50bHkuCisgICAgc3RydWN0IF9fcmVzX3N0YXRlICBfbnJlc1sxXTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICBfc2VyaWFsOworICAgIHN0cnVjdCBwcm9wX2luZm8qICAgX3BpOworICAgIHN0cnVjdCByZXNfc3RhdGljICAgX3JzdGF0aWNbMV07Cit9IF9yZXNfdGhyZWFkOworCitzdGF0aWMgX3Jlc190aHJlYWQqCitfcmVzX3RocmVhZF9hbGxvYyh2b2lkKQoreworICAgIF9yZXNfdGhyZWFkKiAgcnQgPSBjYWxsb2MoMSwgc2l6ZW9mKCpydCkpOworCisgICAgaWYgKHJ0KSB7CisgICAgICAgIHJ0LT5faF9lcnJubyA9IDA7CisgICAgICAgIC8qIFNwZWNpYWwgc3lzdGVtIHByb3BlcnR5IHdoaWNoIHRyYWNrcyBhbnkgY2hhbmdlcyB0byAnbmV0LionLiAqLworICAgICAgICBydC0+X3NlcmlhbCA9IDA7CisgICAgICAgIHJ0LT5fcGkgPSAoc3RydWN0IHByb3BfaW5mbyopIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoIm5ldC5jaGFuZ2UiKTsKKyAgICAgICAgaWYgKHJ0LT5fcGkpIHsKKyAgICAgICAgICAgIHJ0LT5fc2VyaWFsID0gX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHJ0LT5fcGkpOworICAgICAgICB9CisgICAgICAgIG1lbXNldChydC0+X3JzdGF0aWMsIDAsIHNpemVvZiBydC0+X3JzdGF0aWMpOworICAgIH0KKyAgICByZXR1cm4gcnQ7Cit9CisKK3N0YXRpYyB2b2lkCitfcmVzX3N0YXRpY19kb25lKCByZXNfc3RhdGljICBycyApCit7CisgICAgLyogZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZSwgc2luY2UgdGhlCisgICAgICogcG9pbnRzIGluIGhfYWRkcl9wdHJzIGFuZCBob3N0X2FsaWFzZXMgc2hvdWxkIGFsbAorICAgICAqIHBvaW50IHRvICdob3N0YnVmJworICAgICAqLworICAgIGlmIChycy0+aG9zdGYpIHsgIC8qIHNob3VsZCBub3QgaGFwcGVuIGluIHRoZW9yeSwgYnV0IGp1c3QgYmUgc2FmZSAqLworICAgICAgICBmY2xvc2UocnMtPmhvc3RmKTsKKyAgICAgICAgcnMtPmhvc3RmID0gTlVMTDsKKyAgICB9CisgICAgZnJlZShycy0+c2VydmVudC5zX2FsaWFzZXMpOworfQorCitzdGF0aWMgdm9pZAorX3Jlc190aHJlYWRfZnJlZSggdm9pZCogIF9ydCApCit7CisgICAgX3Jlc190aHJlYWQqICBydCA9IF9ydDsKKworICAgIEQoIiVzOiBydD0lcCBmb3IgdGhyZWFkPSVkIiwgX19GVU5DVElPTl9fLCBydCwgZ2V0dGlkKCkpOworCisgICAgX3Jlc19zdGF0aWNfZG9uZShydC0+X3JzdGF0aWMpOworICAgIHJlc19uZGVzdHJveShydC0+X25yZXMpOworICAgIGZyZWUocnQpOworfQorCitzdGF0aWMgdm9pZAorX3Jlc19pbml0X2tleSggdm9pZCApCit7CisgICAgcHRocmVhZF9rZXlfY3JlYXRlKCAmX3Jlc19rZXksIF9yZXNfdGhyZWFkX2ZyZWUgKTsKK30KKworc3RhdGljIF9yZXNfdGhyZWFkKgorX3Jlc190aHJlYWRfZ2V0KHZvaWQpCit7CisgICAgX3Jlc190aHJlYWQqICBydDsKKyAgICBwdGhyZWFkX29uY2UoICZfcmVzX29uY2UsIF9yZXNfaW5pdF9rZXkgKTsKKyAgICBydCA9IHB0aHJlYWRfZ2V0c3BlY2lmaWMoIF9yZXNfa2V5ICk7CisKKyAgICBpZiAocnQgIT0gTlVMTCkgeworICAgICAgICAvKiBXZSBhbHJlYWR5IGhhdmUgb25lIHRocmVhZC1zcGVjaWZpYyBETlMgc3RhdGUgb2JqZWN0LgorICAgICAgICAgKiBDaGVjayB0aGUgc2VyaWFsIHZhbHVlIGZvciBhbnkgY2hhbmdlcyB0byBuZXQuKiBwcm9wZXJ0aWVzICovCisgICAgICAgIEQoIiVzOiBDYWxsZWQgZm9yIHRpZD0lZCBydD0lcCBydC0+cGk9JXAgcnQtPnNlcmlhbD0lZCIsCisgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZ2V0dGlkKCksIHJ0LCBydC0+X3BpLCBydC0+X3NlcmlhbCk7CisgICAgICAgIGlmIChydC0+X3BpID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIFRoZSBwcm9wZXJ0eSB3YXNuJ3QgY3JlYXRlZCB3aGVuIF9yZXNfdGhyZWFkX2dldCgpIHdhcworICAgICAgICAgICAgICogY2FsbGVkIHRoZSBsYXN0IHRpbWUuIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIHZlcnkKKyAgICAgICAgICAgICAqIGVhcmx5IGR1cmluZyB0aGUgYm9vdCBzZXF1ZW5jZS4gRmlyc3QsIGxldCdzIHRyeSB0byBzZWUgaWYgaXQKKyAgICAgICAgICAgICAqIGlzIGhlcmUgbm93LiAqLworICAgICAgICAgICAgcnQtPl9waSA9IChzdHJ1Y3QgcHJvcF9pbmZvKikgX19zeXN0ZW1fcHJvcGVydHlfZmluZCgibmV0LmNoYW5nZSIpOworICAgICAgICAgICAgaWYgKHJ0LT5fcGkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIC8qIFN0aWxsIG5vdGhpbmcsIHJldHVybiBjdXJyZW50IHN0YXRlICovCisgICAgICAgICAgICAgICAgRCgiJXM6IGV4aXRpbmcgZm9yIHRpZD0lZCBydD0lZCBzaW5jZSBzeXN0ZW0gcHJvcGVydHkgbm90IGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZ2V0dGlkKCksIHJ0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJ0LT5fc2VyaWFsID09IF9fc3lzdGVtX3Byb3BlcnR5X3NlcmlhbChydC0+X3BpKSkgeworICAgICAgICAgICAgLyogTm90aGluZyBjaGFuZ2VkLCBzbyByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgKi8KKyAgICAgICAgICAgIEQoIiVzOiB0aWQ9JWQgcnQ9JXAgbm90aGluZyBjaGFuZ2VkLCByZXR1cm5pbmciLAorICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGdldHRpZCgpLCBydCk7CisgICAgICAgICAgICByZXR1cm4gcnQ7CisgICAgICAgIH0KKyAgICAgICAgLyogVXBkYXRlIHRoZSByZWNvcmRlZCBzZXJpYWwgbnVtYmVyLCBhbmQgZ28gcmVzZXQgdGhlIHN0YXRlICovCisgICAgICAgIHJ0LT5fc2VyaWFsID0gX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHJ0LT5fcGkpOworICAgICAgICBnb3RvIFJFU0VUX1NUQVRFOworICAgIH0KKworICAgIC8qIEl0IGlzIHRoZSBmaXJzdCB0aW1lIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoaXMgdGhyZWFkLAorICAgICAqIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IHRocmVhZC1zcGVjaWZpYyBETlMgcmVzb2x2ZXIgc3RhdGUuICovCisgICAgcnQgPSBfcmVzX3RocmVhZF9hbGxvYygpOworICAgIGlmIChydCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwdGhyZWFkX3NldHNwZWNpZmljKCBfcmVzX2tleSwgcnQgKTsKKyAgICBEKCIlczogdGlkPSVkIENyZWF0ZWQgbmV3IEROUyBzdGF0ZSBydD0lcCIsCisgICAgICBfX0ZVTkNUSU9OX18sIGdldHRpZCgpLCBydCk7CisKK1JFU0VUX1NUQVRFOgorICAgIC8qIFJlc2V0IHRoZSBzdGF0ZSwgbm90ZSB0aGF0IHJlc19uaW5pdCgpIGNhbiBub3cgcHJvcGVybHkgcmVzZXQKKyAgICAgKiBhbiBleGlzdGluZyBzdGF0ZSB3aXRob3V0IGxlYWtpbmcgbWVtb3J5LgorICAgICAqLworICAgIEQoIiVzOiB0aWQ9JWQsIHJ0PSVwLCByZXNldHRpbmcgRE5TIHN0YXRlIChvcHRpb25zIFJFU19JTklUPSVkKSIsCisgICAgICBfX0ZVTkNUSU9OX18sIGdldHRpZCgpLCBydCwgKHJ0LT5fbnJlcy0+b3B0aW9ucyAmIFJFU19JTklUKSAhPSAwKTsKKyAgICBpZiAoIHJlc19uaW5pdCggcnQtPl9ucmVzICkgPCAwICkgeworICAgICAgICAvKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuICovCisgICAgICAgIEQoIiVzOiB0aWQ9JWQgcnQ9JXAsIHdvb3QsIHJlc19uaW5pdCgpIHJldHVybmVkIDwgMCIsCisgICAgICAgICAgX19GVU5DVElPTl9fLCBnZXR0aWQoKSwgcnQpOworICAgICAgICBfcmVzX3RocmVhZF9mcmVlKHJ0KTsKKyAgICAgICAgcHRocmVhZF9zZXRzcGVjaWZpYyggX3Jlc19rZXksIE5VTEwgKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBydDsKK30KKworX19MSUJDX0hJRERFTl9fCitzdHJ1Y3QgX19yZXNfc3RhdGUgX25yZXM7CisKKyNpZiAwCitzdHJ1Y3QgcmVzb2x2X2NhY2hlKgorX19nZXRfcmVzX2NhY2hlKHZvaWQpCit7CisgICAgX3Jlc190aHJlYWQqICBydCA9IF9yZXNfdGhyZWFkX2dldCgpOworCisgICAgaWYgKCFydCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIXJ0LT5fY2FjaGUpIHsKKyAgICAgICAgcnQtPl9jYWNoZSA9IF9yZXNvbHZfY2FjaGVfY3JlYXRlKCk7CisgICAgfQorICAgIHJldHVybiBydC0+X2NhY2hlOworfQorI2VuZGlmCisKK2ludCoKK19fZ2V0X2hfZXJybm8odm9pZCkKK3sKKyAgICBfcmVzX3RocmVhZCogIHJ0ICAgID0gX3Jlc190aHJlYWRfZ2V0KCk7CisgICAgc3RhdGljIGludCAgICBwYW5pYyA9IE5FVERCX0lOVEVSTkFMOworCisgICAgcmV0dXJuIHJ0ID8gJnJ0LT5faF9lcnJubyA6ICZwYW5pYzsKK30KKworcmVzX3N0YXRlCitfX3Jlc19nZXRfc3RhdGUodm9pZCkKK3sKKyAgICBfcmVzX3RocmVhZCogIHJ0ID0gX3Jlc190aHJlYWRfZ2V0KCk7CisKKyAgICByZXR1cm4gcnQgPyBydC0+X25yZXMgOiBOVUxMOworfQorCit2b2lkCitfX3Jlc19wdXRfc3RhdGUocmVzX3N0YXRlIHJlcyBfX3VudXNlZCkKK3sKKyAgICAvKiBub3RoaW5nIHRvIGRvICovCit9CisKK3Jlc19zdGF0aWMKK19fcmVzX2dldF9zdGF0aWModm9pZCkKK3sKKyAgICBfcmVzX3RocmVhZCogIHJ0ID0gX3Jlc190aHJlYWRfZ2V0KCk7CisKKyAgICByZXR1cm4gcnQgPyBydC0+X3JzdGF0aWMgOiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2FuZHJvaWQvYXBpLWxldmVsLmggYi9saWJjL2luY2x1ZGUvYW5kcm9pZC9hcGktbGV2ZWwuaAppbmRleCA2MTFmZGZiLi4yZDJmMDk2IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvYW5kcm9pZC9hcGktbGV2ZWwuaAorKysgYi9saWJjL2luY2x1ZGUvYW5kcm9pZC9hcGktbGV2ZWwuaApAQCAtMjUsOSArMjUsMTQgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBBTkRST0lEX0FQSV9MRVZFTF9ICiAjZGVmaW5lIEFORFJPSURfQVBJX0xFVkVMX0gKIAotI2RlZmluZSBfX0FORFJPSURfQVBJX18gMTAKKy8qCisgKiBNYWdpYyB2ZXJzaW9uIG51bWJlciBmb3IgYSBjdXJyZW50IGRldmVsb3BtZW50IGJ1aWxkLCB3aGljaCBoYXMKKyAqIG5vdCB5ZXQgdHVybmVkIGludG8gYW4gb2ZmaWNpYWwgcmVsZWFzZS4KKyAqLworI2RlZmluZSBfX0FORFJPSURfQVBJX18gMTAwMDAKIAogI2VuZGlmIC8qIEFORFJPSURfQVBJX0xFVkVMX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9hbmRyb2lkL2RsZXh0LmggYi9saWJjL2luY2x1ZGUvYW5kcm9pZC9kbGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjM2EyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvYW5kcm9pZC9kbGV4dC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfX0FORFJPSURfRExFWFRfSF9fCisjZGVmaW5lIF9fQU5EUk9JRF9ETEVYVF9IX18KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIGJpdGZpZWxkIGRlZmluaXRpb25zIGZvciBhbmRyb2lkX2RsZXh0aW5mby5mbGFncyAqLworZW51bSB7CisgIC8qIFdoZW4gc2V0LCB0aGUgcmVzZXJ2ZWRfYWRkciBhbmQgcmVzZXJ2ZWRfc2l6ZSBmaWVsZHMgbXVzdCBwb2ludCB0byBhbgorICAgKiBhbHJlYWR5LXJlc2VydmVkIHJlZ2lvbiBvZiBhZGRyZXNzIHNwYWNlIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBsb2FkIHRoZQorICAgKiBsaWJyYXJ5IGlmIGl0IGZpdHMuIElmIHRoZSByZXNlcnZlZCByZWdpb24gaXMgbm90IGxhcmdlIGVub3VnaCwgdGhlIGxvYWQKKyAgICogd2lsbCBmYWlsLgorICAgKi8KKyAgQU5EUk9JRF9ETEVYVF9SRVNFUlZFRF9BRERSRVNTICAgICAgPSAweDEsCisKKyAgLyogQXMgRExFWFRfUkVTRVJWRURfQUREUkVTUywgYnV0IGlmIHRoZSByZXNlcnZlZCByZWdpb24gaXMgbm90IGxhcmdlIGVub3VnaCwKKyAgICogdGhlIGxpbmtlciB3aWxsIGNob29zZSBhbiBhdmFpbGFibGUgYWRkcmVzcyBpbnN0ZWFkLgorICAgKi8KKyAgQU5EUk9JRF9ETEVYVF9SRVNFUlZFRF9BRERSRVNTX0hJTlQgPSAweDIsCisKKyAgLyogV2hlbiBzZXQsIHdyaXRlIHRoZSBHTlUgUkVMUk8gc2VjdGlvbiBvZiB0aGUgbWFwcGVkIGxpYnJhcnkgdG8gcmVscm9fZmQKKyAgICogYWZ0ZXIgcmVsb2NhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQsIHRvIGFsbG93IGl0IHRvIGJlIHJldXNlZCBieSBhbm90aGVyCisgICAqIHByb2Nlc3MgbG9hZGluZyB0aGUgc2FtZSBsaWJyYXJ5IGF0IHRoZSBzYW1lIGFkZHJlc3MuIFRoaXMgaW1wbGllcworICAgKiBBTkRST0lEX0RMRVhUX1VTRV9SRUxSTy4KKyAgICovCisgIEFORFJPSURfRExFWFRfV1JJVEVfUkVMUk8gICAgICAgICAgID0gMHg0LAorCisgIC8qIFdoZW4gc2V0LCBjb21wYXJlIHRoZSBHTlUgUkVMUk8gc2VjdGlvbiBvZiB0aGUgbWFwcGVkIGxpYnJhcnkgdG8gcmVscm9fZmQKKyAgICogYWZ0ZXIgcmVsb2NhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQsIGFuZCByZXBsYWNlIGFueSByZWxvY2F0ZWQgcGFnZXMgdGhhdAorICAgKiBhcmUgaWRlbnRpY2FsIHdpdGggYSB2ZXJzaW9uIG1hcHBlZCBmcm9tIHRoZSBmaWxlLgorICAgKi8KKyAgQU5EUk9JRF9ETEVYVF9VU0VfUkVMUk8gICAgICAgICAgICAgPSAweDgsCisKKyAgLyogSW5zdHJ1Y3QgZGxvcGVuIHRvIHVzZSBsaWJyYXJ5X2ZkIGluc3RlYWQgb2Ygb3BlbmluZyBmaWxlIGJ5IG5hbWUuCisgICAqIFRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIgaXMgc3RpbGwgdXNlZCB0byBpZGVudGlmeSB0aGUgbGlicmFyeS4KKyAgICovCisgIEFORFJPSURfRExFWFRfVVNFX0xJQlJBUllfRkQgICAgICAgID0gMHgxMCwKKworICAvKiBNYXNrIG9mIHZhbGlkIGJpdHMgKi8KKyAgQU5EUk9JRF9ETEVYVF9WQUxJRF9GTEFHX0JJVFMgICAgICAgPSBBTkRST0lEX0RMRVhUX1JFU0VSVkVEX0FERFJFU1MgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORFJPSURfRExFWFRfUkVTRVJWRURfQUREUkVTU19ISU5UIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkRST0lEX0RMRVhUX1dSSVRFX1JFTFJPIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkRST0lEX0RMRVhUX1VTRV9SRUxSTyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EUk9JRF9ETEVYVF9VU0VfTElCUkFSWV9GRCwKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdWludDY0X3QgZmxhZ3M7CisgIHZvaWQqICAgcmVzZXJ2ZWRfYWRkcjsKKyAgc2l6ZV90ICByZXNlcnZlZF9zaXplOworICBpbnQgICAgIHJlbHJvX2ZkOworICBpbnQgICAgIGxpYnJhcnlfZmQ7Cit9IGFuZHJvaWRfZGxleHRpbmZvOworCitleHRlcm4gdm9pZCogYW5kcm9pZF9kbG9wZW5fZXh0KGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgZmxhZywgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX19BTkRST0lEX0RMRVhUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2FuZHJvaWQvc2V0X2Fib3J0X21lc3NhZ2UuaCBiL2xpYmMvaW5jbHVkZS9hbmRyb2lkL3NldF9hYm9ydF9tZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzZDgyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9hbmRyb2lkL3NldF9hYm9ydF9tZXNzYWdlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9TRVRfQUJPUlRfTUVTU0FHRV9ICisjZGVmaW5lIF9TRVRfQUJPUlRfTUVTU0FHRV9ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCit2b2lkIGFuZHJvaWRfc2V0X2Fib3J0X21lc3NhZ2UoY29uc3QgY2hhciogbXNnKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8vIF9TRVRfQUJPUlRfTUVTU0FHRV9ICmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvYXJwYS9pbmV0LmggYi9saWJjL2luY2x1ZGUvYXJwYS9pbmV0LmgKaW5kZXggYjAwODgxMi4uMDY3YmUxZiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2FycGEvaW5ldC5oCisrKyBiL2xpYmMvaW5jbHVkZS9hcnBhL2luZXQuaApAQCAtMzYsMTkgKzM2LDE4IEBACiAKIHR5cGVkZWYgdWludDMyX3QgaW5fYWRkcl90OwogCi1leHRlcm4gdWludDMyX3QgICAgICBpbmV0X2FkZHIoY29uc3QgY2hhciAqKTsKLQotZXh0ZXJuIGludCAgICAgICAgICAgaW5ldF9hdG9uKGNvbnN0IGNoYXIgKiwgc3RydWN0IGluX2FkZHIgKik7Ci1leHRlcm4gY2hhciogICAgICAgICBpbmV0X250b2Eoc3RydWN0IGluX2FkZHIpOwotCi1leHRlcm4gaW50ICAgICAgICAgICBpbmV0X3B0b24oaW50LCBjb25zdCBjaGFyICosIHZvaWQgKik7Ci1leHRlcm4gY29uc3QgY2hhciogICBpbmV0X250b3AoaW50LCBjb25zdCB2b2lkICosIGNoYXIgKiwgc29ja2xlbl90KTsKLQotZXh0ZXJuIHVuc2lnbmVkIGludCAgaW5ldF9uc2FwX2FkZHIoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7Ci1leHRlcm4gY2hhciogICAgICAgICBpbmV0X25zYXBfbnRvYShpbnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgY2hhciAqKTsKK2luX2FkZHJfdCBpbmV0X2FkZHIoY29uc3QgY2hhciopOworaW50IGluZXRfYXRvbihjb25zdCBjaGFyKiwgc3RydWN0IGluX2FkZHIqKTsKK2luX2FkZHJfdCBpbmV0X2xuYW9mKHN0cnVjdCBpbl9hZGRyKTsKK3N0cnVjdCBpbl9hZGRyIGluZXRfbWFrZWFkZHIoaW5fYWRkcl90LCBpbl9hZGRyX3QpOworaW5fYWRkcl90IGluZXRfbmV0b2Yoc3RydWN0IGluX2FkZHIpOworaW5fYWRkcl90IGluZXRfbmV0d29yayhjb25zdCBjaGFyKik7CitjaGFyKiBpbmV0X250b2Eoc3RydWN0IGluX2FkZHIpOworY29uc3QgY2hhciogaW5ldF9udG9wKGludCwgY29uc3Qgdm9pZCosIGNoYXIqLCBzb2NrbGVuX3QpOwordW5zaWduZWQgaW50IGluZXRfbnNhcF9hZGRyKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBjaGFyKiwgaW50KTsKK2NoYXIqIGluZXRfbnNhcF9udG9hKGludCwgY29uc3QgdW5zaWduZWQgY2hhciosIGNoYXIqKTsKK2ludCBpbmV0X3B0b24oaW50LCBjb25zdCBjaGFyKiwgdm9pZCopOwogCiBfX0VORF9ERUNMUwogCiAjZW5kaWYgLyogX0FSUEFfSU5FVF9IXyAqLwotCi0KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9hcnBhL25hbWVzZXIuaCBiL2xpYmMvaW5jbHVkZS9hcnBhL25hbWVzZXIuaAppbmRleCAwMjhlYWRjLi5hODdhYzkxIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvYXJwYS9uYW1lc2VyLmgKKysrIGIvbGliYy9pbmNsdWRlL2FycGEvbmFtZXNlci5oCkBAIC0xLDQxICsxLDY2OCBAQAorLyoJJE5ldEJTRDogbmFtZXNlci5oLHYgMS4yNSAyMDA5LzA0LzEyIDE3OjA3OjM0IGNocmlzdG9zIEV4cCAkCSovCisKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCwgMjAwOSAgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzICBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk4OSwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqLwotI2lmbmRlZiBfYXJwYV9uYW1lc2VyX2gKLSNkZWZpbmUgX2FycGFfbmFtZXNlcl9oCisKKy8qCisgKglJZDogbmFtZXNlci5oLHYgMS4xNiAyMDA5LzAzLzAzIDAxOjUyOjQ4IGVhY2ggRXhwCisgKi8KKworI2lmbmRlZiBfQVJQQV9OQU1FU0VSX0hfCisjZGVmaW5lIF9BUlBBX05BTUVTRVJfSF8KKworI2RlZmluZSBCSU5EXzRfQ09NUEFUCiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIAotLyogdGhpcyBoZWFkZXIgaW50ZW50aW9uYWxseSBibGFuawotICoKLSAqIHRoZSBkZWZpbml0aW9ucyBub3JtYWxseSBmb3VuZCBpbiA8YXJwYS9uYW1lc2VyLmg+IGFyZQotICogcmVhbGx5IGEgYnVuY2ggb2YgcmVzb2x2ZXIncyBpbnRlcm5hbCBkZWNsYXJhdGlvbnMgdGhhdAotICogc2hvdWxkIG5vdCBiZSBleHBvc2VkIHRvIGNsaWVudCBjb2RlIGluIGFueSB3YXkKKy8qCisgKiBSZXZpc2lvbiBpbmZvcm1hdGlvbi4gIFRoaXMgaXMgdGhlIHJlbGVhc2UgZGF0ZSBpbiBZWVlZTU1ERCBmb3JtYXQuCisgKiBJdCBjYW4gY2hhbmdlIGV2ZXJ5IGRheSBzbyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gd2l0aCBpdCBpcyB1c2UgaXQKKyAqIGluIHByZXByb2Nlc3NvciBjb21tYW5kcyBzdWNoIGFzICIjaWYgKF9fTkFNRVNFUiA+IDE5OTMxMTA0KSIuICBEbyBub3QKKyAqIGNvbXBhcmUgZm9yIGVxdWFsaXR5OyByYXRoZXIsIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB5b3VyIGxpYmJpbmQuYQorICogY29udGFpbnMgYSBuZXcgZW5vdWdoIGxpYi9uYW1lc2VyLyB0byBzdXBwb3J0IHRoZSBmZWF0dXJlIHlvdSBuZWVkLgogICovCiAKLSNlbmRpZiAvKiBfYXJwYV9uYW1lc2VyX2ggKi8KKyNkZWZpbmUgX19OQU1FU0VSCTIwMDkwMzAyCS8qJTwgTmV3IGludGVyZmFjZSB2ZXJzaW9uIHN0YW1wLiAqLworCisvKgorICogRGVmaW5lIGNvbnN0YW50cyBiYXNlZCBvbiBSRkMwODgzLCBSRkMxMDM0LCBSRkMgMTAzNQorICovCisjZGVmaW5lIE5TX1BBQ0tFVFNaCTUxMgkvKiBkZWZhdWx0IFVEUCBwYWNrZXQgc2l6ZSAqLworI2RlZmluZSBOU19NQVhETkFNRQkxMDI1CS8qIG1heGltdW0gZG9tYWluIG5hbWUgKHByZXNlbnRhdGlvbiBmb3JtYXQpKi8KKyNkZWZpbmUgTlNfTUFYTVNHCTY1NTM1CS8qIG1heGltdW0gbWVzc2FnZSBzaXplICovCisjZGVmaW5lIE5TX01BWENETkFNRQkyNTUJLyogbWF4aW11bSBjb21wcmVzc2VkIGRvbWFpbiBuYW1lICovCisjZGVmaW5lIE5TX01BWExBQkVMCTYzCS8qIG1heGltdW0gbGVuZ3RoIG9mIGRvbWFpbiBsYWJlbCAqLworI2RlZmluZSBOU19NQVhMQUJFTFMJMTI4CS8qIHRoZW9yZXRpY2FsIG1heCAjL2xhYmVscyBwZXIgZG9tYWluIG5hbWUgKi8KKyNkZWZpbmUgTlNfTUFYTk5BTUUJMjU2CS8qIG1heGltdW0gdW5jb21wcmVzc2VkIChiaW5hcnkpIGRvbWFpbiBuYW1lKi8KKyNkZWZpbmUJTlNfTUFYUEFERFIJKHNpemVvZiAiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmIikKKyNkZWZpbmUgTlNfSEZJWEVEU1oJMTIJLyogIy9ieXRlcyBvZiBmaXhlZCBkYXRhIGluIGhlYWRlciAqLworI2RlZmluZSBOU19RRklYRURTWgk0CS8qICMvYnl0ZXMgb2YgZml4ZWQgZGF0YSBpbiBxdWVyeSAqLworI2RlZmluZSBOU19SUkZJWEVEU1oJMTAJLyogIy9ieXRlcyBvZiBmaXhlZCBkYXRhIGluIHIgcmVjb3JkICovCisjZGVmaW5lIE5TX0lOVDMyU1oJNAkvKiAjL2J5dGVzIG9mIGRhdGEgaW4gYSB1aW50MzJfdCAqLworI2RlZmluZSBOU19JTlQxNlNaCTIJLyogIy9ieXRlcyBvZiBkYXRhIGluIGEgdWludDE2X3QgKi8KKyNkZWZpbmUgTlNfSU5UOFNaCTEJLyogIy9ieXRlcyBvZiBkYXRhIGluIGEgdWludDhfdCAqLworI2RlZmluZSBOU19JTkFERFJTWgk0CS8qIElQdjQgVF9BICovCisjZGVmaW5lIE5TX0lONkFERFJTWgkxNgkvKiBJUHY2IFRfQUFBQSAqLworI2RlZmluZSBOU19DTVBSU0ZMR1MJMHhjMAkvKiBGbGFnIGJpdHMgaW5kaWNhdGluZyBuYW1lIGNvbXByZXNzaW9uLiAqLworI2RlZmluZSBOU19ERUZBVUxUUE9SVAk1MwkvKiBGb3IgYm90aCBUQ1AgYW5kIFVEUC4gKi8KKworLyoKKyAqIFRoZXNlIGNhbiBiZSBleHBhbmRlZCB3aXRoIHN5bm9ueW1zLCBqdXN0IGtlZXAgbnNfcGFyc2UuYzpuc19wYXJzZXJlY29yZCgpCisgKiBpbiBzeW5jaCB3aXRoIGl0LgorICovCit0eXBlZGVmIGVudW0gX19uc19zZWN0IHsKKwluc19zX3FkID0gMCwJCS8qIFF1ZXJ5OiBRdWVzdGlvbi4gKi8KKwluc19zX3puID0gMCwJCS8qIFVwZGF0ZTogWm9uZS4gKi8KKwluc19zX2FuID0gMSwJCS8qIFF1ZXJ5OiBBbnN3ZXIuICovCisJbnNfc19wciA9IDEsCQkvKiBVcGRhdGU6IFByZXJlcXVpc2l0ZXMuICovCisJbnNfc19ucyA9IDIsCQkvKiBRdWVyeTogTmFtZSBzZXJ2ZXJzLiAqLworCW5zX3NfdWQgPSAyLAkJLyogVXBkYXRlOiBVcGRhdGUuICovCisJbnNfc19hciA9IDMsCQkvKiBRdWVyeXxVcGRhdGU6IEFkZGl0aW9uYWwgcmVjb3Jkcy4gKi8KKwluc19zX21heCA9IDQKK30gbnNfc2VjdDsKKworLyoKKyAqIE5ldHdvcmsgbmFtZSAoY29tcHJlc3NlZCBvciBub3QpIHR5cGUuICBFcXVpdmlsZW50IHRvIGEgcG9pbnRlciB3aGVuIHVzZWQKKyAqIGluIGEgZnVuY3Rpb24gcHJvdG90eXBlLiAgQ2FuIGJlIGNvbnN0J2QuCisgKi8KK3R5cGVkZWYgdV9jaGFyIG5zX25uYW1lW05TX01BWE5OQU1FXTsKK3R5cGVkZWYgY29uc3QgdV9jaGFyICpuc19ubmFtZV9jdDsKK3R5cGVkZWYgdV9jaGFyICpuc19ubmFtZV90OworCitzdHJ1Y3QgbnNfbmFtZW1hcCB7IG5zX25uYW1lX2N0IGJhc2U7IGludCBsZW47IH07Cit0eXBlZGVmIHN0cnVjdCBuc19uYW1lbWFwICpuc19uYW1lbWFwX3Q7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBuc19uYW1lbWFwICpuc19uYW1lbWFwX2N0OworCisvKgorICogVGhpcyBpcyBhIG1lc3NhZ2UgaGFuZGxlLiAgSXQgaXMgY2FsbGVyIGFsbG9jYXRlZCBhbmQgaGFzIG5vIGR5bmFtaWMgZGF0YS4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIGludGVuZGVkIHRvIGJlIG9wYXF1ZSB0byBhbGwgYnV0IG5zX3BhcnNlLmMsIHRodXMgdGhlCisgKiBsZWFkaW5nIF8ncyBvbiB0aGUgbWVtYmVyIG5hbWVzLiAgVXNlIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMsIG5vdCB0aGUgXydzLgorICovCit0eXBlZGVmIHN0cnVjdCBfX25zX21zZyB7CisJY29uc3QgdV9jaGFyCSpfbXNnLCAqX2VvbTsKKwl1aW50MTZfdAlfaWQsIF9mbGFncywgX2NvdW50c1tuc19zX21heF07CisJY29uc3QgdV9jaGFyCSpfc2VjdGlvbnNbbnNfc19tYXhdOworCW5zX3NlY3QJCV9zZWN0OworCWludAkJX3JybnVtOworCWNvbnN0IHVfY2hhcgkqX21zZ19wdHI7Cit9IG5zX21zZzsKKy8qCisgKiBUaGlzIGlzIGEgbmV3bXNnIGhhbmRsZSwgdXNlZCB3aGVuIGNvbnN0cnVjdGluZyBuZXcgbWVzc2FnZXMgd2l0aAorICogbnNfbmV3bXNnX2luaXQsIGV0IGFsLgorICovCitzdHJ1Y3QgbnNfbmV3bXNnIHsKKwluc19tc2cJCW1zZzsKKwljb25zdCB1X2NoYXIJKmRucHRyc1syNV07CisJY29uc3QgdV9jaGFyCSoqbGFzdGRucHRyOworfTsKK3R5cGVkZWYgc3RydWN0IG5zX25ld21zZyBuc19uZXdtc2c7CisKKy8qIFByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgLSBkbyBub3QgdXNlIGZyb20gb3V0c2lkZSBsaWJyYXJ5LiAqLworc3RydWN0IF9uc19mbGFnZGF0YSB7ICBpbnQgbWFzaywgc2hpZnQ7ICB9OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBfbnNfZmxhZ2RhdGEgX25zX2ZsYWdkYXRhW107CisKKy8qIEFjY2Vzc29yIG1hY3JvcyAtIHRoaXMgaXMgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gKi8KKworI2RlZmluZSBuc19tc2dfaWQoaGFuZGxlKSAoKGhhbmRsZSkuX2lkICsgMCkKKyNkZWZpbmUgbnNfbXNnX2Jhc2UoaGFuZGxlKSAoKGhhbmRsZSkuX21zZyArIDApCisjZGVmaW5lIG5zX21zZ19lbmQoaGFuZGxlKSAoKGhhbmRsZSkuX2VvbSArIDApCisjZGVmaW5lIG5zX21zZ19zaXplKGhhbmRsZSkgKChzaXplX3QpKChoYW5kbGUpLl9lb20gLSAoaGFuZGxlKS5fbXNnKSkKKyNkZWZpbmUgbnNfbXNnX2NvdW50KGhhbmRsZSwgc2VjdGlvbikgKChoYW5kbGUpLl9jb3VudHNbc2VjdGlvbl0gKyAwKQorCisvKgorICogVGhpcyBpcyBhIHBhcnNlZCByZWNvcmQuICBJdCBpcyBjYWxsZXIgYWxsb2NhdGVkIGFuZCBoYXMgbm8gZHluYW1pYyBkYXRhLgorICovCit0eXBlZGVmCXN0cnVjdCBfX25zX3JyIHsKKwljaGFyCQluYW1lW05TX01BWEROQU1FXTsKKwl1aW50MTZfdAl0eXBlOworCXVpbnQxNl90CXJyX2NsYXNzOworCXVpbnQzMl90CXR0bDsKKwl1aW50MTZfdAlyZGxlbmd0aDsKKwljb25zdCB1X2NoYXIgKglyZGF0YTsKK30gbnNfcnI7CisKKy8qCisgKiBTYW1lIHRoaW5nLCBidXQgdXNpbmcgdW5jb21wcmVzc2VkIG5ldHdvcmsgYmluYXJ5IG5hbWVzLCBhbmQgcmVhbCBDIHR5cGVzLgorICovCit0eXBlZGVmCXN0cnVjdCBfX25zX3JyMiB7CisJbnNfbm5hbWUJbm5hbWU7CisJc2l6ZV90CQlubmFtZWw7CisJaW50CQl0eXBlOworCWludAkJcnJfY2xhc3M7CisJdV9pbnQJCXR0bDsKKwlpbnQJCXJkbGVuZ3RoOworCWNvbnN0IHVfY2hhciAqCXJkYXRhOworfSBuc19ycjI7CisvKiBBY2Nlc3NvciBtYWNyb3MgLSB0aGlzIGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuICovCisjZGVmaW5lIG5zX3JyX25hbWUocnIpCSgoKHJyKS5uYW1lWzBdICE9ICdcMCcpID8gKHJyKS5uYW1lIDogIi4iKQorI2RlZmluZSBuc19ycl9ubmFtZShycikJKChjb25zdCBuc19ubmFtZV90KShycikubm5hbWUpCisjZGVmaW5lIG5zX3JyX25uYW1lbChycikgKChycikubm5hbWVsICsgMCkKKyNkZWZpbmUgbnNfcnJfdHlwZShycikJKChuc190eXBlKSgocnIpLnR5cGUgKyAwKSkKKyNkZWZpbmUgbnNfcnJfY2xhc3MocnIpCSgobnNfY2xhc3MpKChycikucnJfY2xhc3MgKyAwKSkKKyNkZWZpbmUgbnNfcnJfdHRsKHJyKQkoKHVfbG9uZykocnIpLnR0bCArIDApCisjZGVmaW5lIG5zX3JyX3JkbGVuKHJyKQkoKHNpemVfdCkocnIpLnJkbGVuZ3RoICsgMCkKKyNkZWZpbmUgbnNfcnJfcmRhdGEocnIpCSgocnIpLnJkYXRhICsgMCkKKworLyoKKyAqIFRoZXNlIGRvbid0IGhhdmUgdG8gYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW4gdGhlIHBhY2tldCBmbGFncyB3b3JkLAorICogYW5kIHRoZXkgY2FuIGV2ZW4gb3ZlcmxhcCBpbiBzb21lIGNhc2VzLCBidXQgdGhleSB3aWxsIG5lZWQgdG8gYmUga2VwdAorICogaW4gc3luY2ggd2l0aCBuc19wYXJzZS5jOm5zX2ZsYWdkYXRhW10uCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX2ZsYWcgeworCW5zX2ZfcXIsCQkvKiBRdWVzdGlvbi9SZXNwb25zZS4gKi8KKwluc19mX29wY29kZSwJCS8qIE9wZXJhdGlvbiBjb2RlLiAqLworCW5zX2ZfYWEsCQkvKiBBdXRob3JpdGF0aXZlIEFuc3dlci4gKi8KKwluc19mX3RjLAkJLyogVHJ1bmNhdGlvbiBvY2N1cnJlZC4gKi8KKwluc19mX3JkLAkJLyogUmVjdXJzaW9uIERlc2lyZWQuICovCisJbnNfZl9yYSwJCS8qIFJlY3Vyc2lvbiBBdmFpbGFibGUuICovCisJbnNfZl96LAkJCS8qIE1CWi4gKi8KKwluc19mX2FkLAkJLyogQXV0aGVudGljIERhdGEgKEROU1NFQykuICovCisJbnNfZl9jZCwJCS8qIENoZWNraW5nIERpc2FibGVkIChETlNTRUMpLiAqLworCW5zX2ZfcmNvZGUsCQkvKiBSZXNwb25zZSBjb2RlLiAqLworCW5zX2ZfbWF4Cit9IG5zX2ZsYWc7CisKKy8qCisgKiBDdXJyZW50bHkgZGVmaW5lZCBvcGNvZGVzLgorICovCit0eXBlZGVmIGVudW0gX19uc19vcGNvZGUgeworCW5zX29fcXVlcnkgPSAwLAkJLyogU3RhbmRhcmQgcXVlcnkuICovCisJbnNfb19pcXVlcnkgPSAxLAkvKiBJbnZlcnNlIHF1ZXJ5IChkZXByZWNhdGVkL3Vuc3VwcG9ydGVkKS4gKi8KKwluc19vX3N0YXR1cyA9IDIsCS8qIE5hbWUgc2VydmVyIHN0YXR1cyBxdWVyeSAodW5zdXBwb3J0ZWQpLiAqLworCQkJCS8qIE9wY29kZSAzIGlzIHVuZGVmaW5lZC9yZXNlcnZlZC4gKi8KKwluc19vX25vdGlmeSA9IDQsCS8qIFpvbmUgY2hhbmdlIG5vdGlmaWNhdGlvbi4gKi8KKwluc19vX3VwZGF0ZSA9IDUsCS8qIFpvbmUgdXBkYXRlIG1lc3NhZ2UuICovCisJbnNfb19tYXggPSA2Cit9IG5zX29wY29kZTsKKworLyoKKyAqIEN1cnJlbnRseSBkZWZpbmVkIHJlc3BvbnNlIGNvZGVzLgorICovCit0eXBlZGVmCWVudW0gX19uc19yY29kZSB7CisJbnNfcl9ub2Vycm9yID0gMCwJLyogTm8gZXJyb3Igb2NjdXJyZWQuICovCisJbnNfcl9mb3JtZXJyID0gMSwJLyogRm9ybWF0IGVycm9yLiAqLworCW5zX3Jfc2VydmZhaWwgPSAyLAkvKiBTZXJ2ZXIgZmFpbHVyZS4gKi8KKwluc19yX254ZG9tYWluID0gMywJLyogTmFtZSBlcnJvci4gKi8KKwluc19yX25vdGltcGwgPSA0LAkvKiBVbmltcGxlbWVudGVkLiAqLworCW5zX3JfcmVmdXNlZCA9IDUsCS8qIE9wZXJhdGlvbiByZWZ1c2VkLiAqLworCS8qIHRoZXNlIGFyZSBmb3IgQklORF9VUERBVEUgKi8KKwluc19yX3l4ZG9tYWluID0gNiwJLyogTmFtZSBleGlzdHMgKi8KKwluc19yX3l4cnJzZXQgPSA3LAkvKiBSUnNldCBleGlzdHMgKi8KKwluc19yX254cnJzZXQgPSA4LAkvKiBSUnNldCBkb2VzIG5vdCBleGlzdCAqLworCW5zX3Jfbm90YXV0aCA9IDksCS8qIE5vdCBhdXRob3JpdGF0aXZlIGZvciB6b25lICovCisJbnNfcl9ub3R6b25lID0gMTAsCS8qIFpvbmUgb2YgcmVjb3JkIGRpZmZlcmVudCBmcm9tIHpvbmUgc2VjdGlvbiAqLworCW5zX3JfbWF4ID0gMTEsCisJLyogVGhlIGZvbGxvd2luZyBhcmUgRUROUyBleHRlbmRlZCByY29kZXMgKi8KKwluc19yX2JhZHZlcnMgPSAxNiwKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBUU0lHIGVycm9ycyAqLworCW5zX3JfYmFkc2lnID0gMTYsCisJbnNfcl9iYWRrZXkgPSAxNywKKwluc19yX2JhZHRpbWUgPSAxOAorfSBuc19yY29kZTsKKworLyogQklORF9VUERBVEUgKi8KK3R5cGVkZWYgZW51bSBfX25zX3VwZGF0ZV9vcGVyYXRpb24geworCW5zX3VvcF9kZWxldGUgPSAwLAorCW5zX3VvcF9hZGQgPSAxLAorCW5zX3VvcF9tYXggPSAyCit9IG5zX3VwZGF0ZV9vcGVyYXRpb247CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBUU0lHIGF1dGhlbnRpY2F0ZWQgbWVzc2FnZXMKKyAqLworc3RydWN0IG5zX3RzaWdfa2V5IHsKKyAgICAgICAgY2hhciBuYW1lW05TX01BWEROQU1FXSwgYWxnW05TX01BWEROQU1FXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICAgICAgaW50IGxlbjsKK307Cit0eXBlZGVmIHN0cnVjdCBuc190c2lnX2tleSBuc190c2lnX2tleTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIFRTSUcgYXV0aGVudGljYXRlZCBUQ1AgbWVzc2FnZXMKKyAqLworc3RydWN0IG5zX3RjcF90c2lnX3N0YXRlIHsKKwlpbnQgY291bnRlcjsKKwlzdHJ1Y3QgZHN0X2tleSAqa2V5OworCXZvaWQgKmN0eDsKKwl1bnNpZ25lZCBjaGFyIHNpZ1tOU19QQUNLRVRTWl07CisJaW50IHNpZ2xlbjsKK307Cit0eXBlZGVmIHN0cnVjdCBuc190Y3BfdHNpZ19zdGF0ZSBuc190Y3BfdHNpZ19zdGF0ZTsKKworI2RlZmluZSBOU19UU0lHX0ZVREdFIDMwMAorI2RlZmluZSBOU19UU0lHX1RDUF9DT1VOVCAxMDAKKyNkZWZpbmUgTlNfVFNJR19BTEdfSE1BQ19NRDUgIkhNQUMtTUQ1LlNJRy1BTEcuUkVHLklOVCIKKworI2RlZmluZSBOU19UU0lHX0VSUk9SX05PX1RTSUcgLTEwCisjZGVmaW5lIE5TX1RTSUdfRVJST1JfTk9fU1BBQ0UgLTExCisjZGVmaW5lIE5TX1RTSUdfRVJST1JfRk9STUVSUiAtMTIKKworLyoKKyAqIEN1cnJlbnRseSBkZWZpbmVkIHR5cGUgdmFsdWVzIGZvciByZXNvdXJjZXMgYW5kIHF1ZXJpZXMuCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX3R5cGUgeworCW5zX3RfaW52YWxpZCA9IDAsCS8qIENvb2tpZS4gKi8KKwluc190X2EgPSAxLAkJLyogSG9zdCBhZGRyZXNzLiAqLworCW5zX3RfbnMgPSAyLAkJLyogQXV0aG9yaXRhdGl2ZSBzZXJ2ZXIuICovCisJbnNfdF9tZCA9IDMsCQkvKiBNYWlsIGRlc3RpbmF0aW9uLiAqLworCW5zX3RfbWYgPSA0LAkJLyogTWFpbCBmb3J3YXJkZXIuICovCisJbnNfdF9jbmFtZSA9IDUsCQkvKiBDYW5vbmljYWwgbmFtZS4gKi8KKwluc190X3NvYSA9IDYsCQkvKiBTdGFydCBvZiBhdXRob3JpdHkgem9uZS4gKi8KKwluc190X21iID0gNywJCS8qIE1haWxib3ggZG9tYWluIG5hbWUuICovCisJbnNfdF9tZyA9IDgsCQkvKiBNYWlsIGdyb3VwIG1lbWJlci4gKi8KKwluc190X21yID0gOSwJCS8qIE1haWwgcmVuYW1lIG5hbWUuICovCisJbnNfdF9udWxsID0gMTAsCQkvKiBOdWxsIHJlc291cmNlIHJlY29yZC4gKi8KKwluc190X3drcyA9IDExLAkJLyogV2VsbCBrbm93biBzZXJ2aWNlLiAqLworCW5zX3RfcHRyID0gMTIsCQkvKiBEb21haW4gbmFtZSBwb2ludGVyLiAqLworCW5zX3RfaGluZm8gPSAxMywJLyogSG9zdCBpbmZvcm1hdGlvbi4gKi8KKwluc190X21pbmZvID0gMTQsCS8qIE1haWxib3ggaW5mb3JtYXRpb24uICovCisJbnNfdF9teCA9IDE1LAkJLyogTWFpbCByb3V0aW5nIGluZm9ybWF0aW9uLiAqLworCW5zX3RfdHh0ID0gMTYsCQkvKiBUZXh0IHN0cmluZ3MuICovCisJbnNfdF9ycCA9IDE3LAkJLyogUmVzcG9uc2libGUgcGVyc29uLiAqLworCW5zX3RfYWZzZGIgPSAxOCwJLyogQUZTIGNlbGwgZGF0YWJhc2UuICovCisJbnNfdF94MjUgPSAxOSwJCS8qIFhfMjUgY2FsbGluZyBhZGRyZXNzLiAqLworCW5zX3RfaXNkbiA9IDIwLAkJLyogSVNETiBjYWxsaW5nIGFkZHJlc3MuICovCisJbnNfdF9ydCA9IDIxLAkJLyogUm91dGVyLiAqLworCW5zX3RfbnNhcCA9IDIyLAkJLyogTlNBUCBhZGRyZXNzLiAqLworCW5zX3RfbnNhcF9wdHIgPSAyMywJLyogUmV2ZXJzZSBOU0FQIGxvb2t1cCAoZGVwcmVjYXRlZCkuICovCisJbnNfdF9zaWcgPSAyNCwJCS8qIFNlY3VyaXR5IHNpZ25hdHVyZS4gKi8KKwluc190X2tleSA9IDI1LAkJLyogU2VjdXJpdHkga2V5LiAqLworCW5zX3RfcHggPSAyNiwJCS8qIFguNDAwIG1haWwgbWFwcGluZy4gKi8KKwluc190X2dwb3MgPSAyNywJCS8qIEdlb2dyYXBoaWNhbCBwb3NpdGlvbiAod2l0aGRyYXduKS4gKi8KKwluc190X2FhYWEgPSAyOCwJCS8qIElQdjYgQWRkcmVzcy4gKi8KKwluc190X2xvYyA9IDI5LAkJLyogTG9jYXRpb24gSW5mb3JtYXRpb24uICovCisJbnNfdF9ueHQgPSAzMCwJCS8qIE5leHQgZG9tYWluIChzZWN1cml0eSkuICovCisJbnNfdF9laWQgPSAzMSwJCS8qIEVuZHBvaW50IGlkZW50aWZpZXIuICovCisJbnNfdF9uaW1sb2MgPSAzMiwJLyogTmltcm9kIExvY2F0b3IuICovCisJbnNfdF9zcnYgPSAzMywJCS8qIFNlcnZlciBTZWxlY3Rpb24uICovCisJbnNfdF9hdG1hID0gMzQsCQkvKiBBVE0gQWRkcmVzcyAqLworCW5zX3RfbmFwdHIgPSAzNSwJLyogTmFtaW5nIEF1dGhvcml0eSBQb2luVGVSICovCisJbnNfdF9reCA9IDM2LAkJLyogS2V5IEV4Y2hhbmdlICovCisJbnNfdF9jZXJ0ID0gMzcsCQkvKiBDZXJ0aWZpY2F0aW9uIHJlY29yZCAqLworCW5zX3RfYTYgPSAzOCwJCS8qIElQdjYgYWRkcmVzcyAoZXhwZXJpbWVudGFsKSAqLworCW5zX3RfZG5hbWUgPSAzOSwJLyogTm9uLXRlcm1pbmFsIEROQU1FICovCisJbnNfdF9zaW5rID0gNDAsCQkvKiBLaXRjaGVuIHNpbmsgKGV4cGVyaW1lbnRhdGwpICovCisJbnNfdF9vcHQgPSA0MSwJCS8qIEVETlMwIG9wdGlvbiAobWV0YS1SUikgKi8KKwluc190X2FwbCA9IDQyLAkJLyogQWRkcmVzcyBwcmVmaXggbGlzdCAoUkZDIDMxMjMpICovCisJbnNfdF9kcyA9IDQzLAkJLyogRGVsZWdhdGlvbiBTaWduZXIgKi8KKwluc190X3NzaGZwID0gNDQsCS8qIFNTSCBGaW5nZXJwcmludCAqLworCW5zX3RfaXBzZWNrZXkgPSA0NSwJLyogSVBTRUMgS2V5ICovCisJbnNfdF9ycnNpZyA9IDQ2LAkvKiBSUnNldCBTaWduYXR1cmUgKi8KKwluc190X25zZWMgPSA0NywJCS8qIE5lZ2F0aXZlIHNlY3VyaXR5ICovCisJbnNfdF9kbnNrZXkgPSA0OCwJLyogRE5TIEtleSAqLworCW5zX3RfZGhjaWQgPSA0OSwJLyogRHluYW1pYyBob3N0IGNvbmZpZ3VyYXRpbiBpZGVudGlmaWVyICovCisJbnNfdF9uc2VjMyA9IDUwLAkvKiBOZWdhdGl2ZSBzZWN1cml0eSB0eXBlIDMgKi8KKwluc190X25zZWMzcGFyYW0gPSA1MSwJLyogTmVnYXRpdmUgc2VjdXJpdHkgdHlwZSAzIHBhcmFtZXRlcnMgKi8KKwluc190X2hpcCA9IDU1LAkJLyogSG9zdCBJZGVudGl0eSBQcm90b2NvbCAqLworCW5zX3Rfc3BmID0gOTksCQkvKiBTZW5kZXIgUG9saWN5IEZyYW1ld29yayAqLworCW5zX3RfdGtleSA9IDI0OSwJLyogVHJhbnNhY3Rpb24ga2V5ICovCisJbnNfdF90c2lnID0gMjUwLAkvKiBUcmFuc2FjdGlvbiBzaWduYXR1cmUuICovCisJbnNfdF9peGZyID0gMjUxLAkvKiBJbmNyZW1lbnRhbCB6b25lIHRyYW5zZmVyLiAqLworCW5zX3RfYXhmciA9IDI1MiwJLyogVHJhbnNmZXIgem9uZSBvZiBhdXRob3JpdHkuICovCisJbnNfdF9tYWlsYiA9IDI1MywJLyogVHJhbnNmZXIgbWFpbGJveCByZWNvcmRzLiAqLworCW5zX3RfbWFpbGEgPSAyNTQsCS8qIFRyYW5zZmVyIG1haWwgYWdlbnQgcmVjb3Jkcy4gKi8KKwluc190X2FueSA9IDI1NSwJCS8qIFdpbGRjYXJkIG1hdGNoLiAqLworCW5zX3RfenhmciA9IDI1NiwJLyogQklORC1zcGVjaWZpYywgbm9uc3RhbmRhcmQuICovCisJbnNfdF9kbHYgPSAzMjc2OSwJLyogRE5TU0VDIGxvb2stYXNpZGUgdmFsaWRhdGF0aW9uLiAqLworCW5zX3RfbWF4ID0gNjU1MzYKK30gbnNfdHlwZTsKKworLyogRXhjbHVzaXZlbHkgYSBRVFlQRT8gKG5vdCBhbHNvIGFuIFJUWVBFKSAqLworI2RlZmluZQluc190X3F0X3AodCkgKG5zX3RfeGZyX3AodCkgfHwgKHQpID09IG5zX3RfYW55IHx8IFwKKwkJICAgICAgKHQpID09IG5zX3RfbWFpbGIgfHwgKHQpID09IG5zX3RfbWFpbGEpCisvKiBTb21lIGtpbmQgb2YgbWV0YS1SUj8gKG5vdCBhIFFUWVBFLCBidXQgYWxzbyBub3QgYW4gUlRZUEUpICovCisjZGVmaW5lCW5zX3RfbXJyX3AodCkgKCh0KSA9PSBuc190X3RzaWcgfHwgKHQpID09IG5zX3Rfb3B0KQorLyogRXhjbHVzaXZlbHkgYW4gUlRZUEU/IChub3QgYWxzbyBhIFFUWVBFIG9yIGEgbWV0YS1SUikgKi8KKyNkZWZpbmUgbnNfdF9ycl9wKHQpICghbnNfdF9xdF9wKHQpICYmICFuc190X21ycl9wKHQpKQorI2RlZmluZSBuc190X3VkcF9wKHQpICgodCkgIT0gbnNfdF9heGZyICYmICh0KSAhPSBuc190X3p4ZnIpCisjZGVmaW5lIG5zX3RfeGZyX3AodCkgKCh0KSA9PSBuc190X2F4ZnIgfHwgKHQpID09IG5zX3RfaXhmciB8fCBcCisJCSAgICAgICAodCkgPT0gbnNfdF96eGZyKQorCisvKgorICogVmFsdWVzIGZvciBjbGFzcyBmaWVsZAorICovCit0eXBlZGVmIGVudW0gX19uc19jbGFzcyB7CisJbnNfY19pbnZhbGlkID0gMCwJLyogQ29va2llLiAqLworCW5zX2NfaW4gPSAxLAkJLyogSW50ZXJuZXQuICovCisJbnNfY18yID0gMiwJCS8qIHVuYWxsb2NhdGVkL3Vuc3VwcG9ydGVkLiAqLworCW5zX2NfY2hhb3MgPSAzLAkJLyogTUlUIENoYW9zLW5ldC4gKi8KKwluc19jX2hzID0gNCwJCS8qIE1JVCBIZXNpb2QuICovCisJLyogUXVlcnkgY2xhc3MgdmFsdWVzIHdoaWNoIGRvIG5vdCBhcHBlYXIgaW4gcmVzb3VyY2UgcmVjb3JkcyAqLworCW5zX2Nfbm9uZSA9IDI1NCwJLyogZm9yIHByZXJlcS4gc2VjdGlvbnMgaW4gdXBkYXRlIHJlcXVlc3RzICovCisJbnNfY19hbnkgPSAyNTUsCQkvKiBXaWxkY2FyZCBtYXRjaC4gKi8KKwluc19jX21heCA9IDY1NTM2Cit9IG5zX2NsYXNzOworCisvKiBETlNTRUMgY29uc3RhbnRzLiAqLworCit0eXBlZGVmIGVudW0gX19uc19rZXlfdHlwZXMgeworCW5zX2t0X3JzYSA9IDEsCQkvKiBrZXkgdHlwZSBSU0EvTUQ1ICovCisJbnNfa3RfZGggID0gMiwJCS8qIERpZmZpZSBIZWxsbWFuICovCisJbnNfa3RfZHNhID0gMywJCS8qIERpZ2l0YWwgU2lnbmF0dXJlIFN0YW5kYXJkIChNQU5EQVRPUlkpICovCisJbnNfa3RfcHJpdmF0ZSA9IDI1NAkvKiBQcml2YXRlIGtleSB0eXBlIHN0YXJ0cyB3aXRoIE9JRCAqLworfSBuc19rZXlfdHlwZXM7CisKK3R5cGVkZWYgZW51bSBfX25zX2NlcnRfdHlwZXMgeworCWNlcnRfdF9wa2l4ID0gMSwJLyogUEtJWCAoWC41MDl2MykgKi8KKwljZXJ0X3Rfc3BraSA9IDIsCS8qIFNQS0kgKi8KKwljZXJ0X3RfcGdwICA9IDMsCS8qIFBHUCAqLworCWNlcnRfdF91cmwgID0gMjUzLAkvKiBVUkwgcHJpdmF0ZSB0eXBlICovCisJY2VydF90X29pZCAgPSAyNTQJLyogT0lEIHByaXZhdGUgdHlwZSAqLworfSBuc19jZXJ0X3R5cGVzOworCisvKiBGbGFncyBmaWVsZCBvZiB0aGUgS0VZIFJSIHJkYXRhLiAqLworI2RlZmluZQlOU19LRVlfVFlQRU1BU0sJCTB4QzAwMAkvKiBNYXNrIGZvciAidHlwZSIgYml0cyAqLworI2RlZmluZQlOU19LRVlfVFlQRV9BVVRIX0NPTkYJMHgwMDAwCS8qIEtleSB1c2FibGUgZm9yIGJvdGggKi8KKyNkZWZpbmUJTlNfS0VZX1RZUEVfQ09ORl9PTkxZCTB4ODAwMAkvKiBLZXkgdXNhYmxlIGZvciBjb25maWRlbnRpYWxpdHkgKi8KKyNkZWZpbmUJTlNfS0VZX1RZUEVfQVVUSF9PTkxZCTB4NDAwMAkvKiBLZXkgdXNhYmxlIGZvciBhdXRoZW50aWNhdGlvbiAqLworI2RlZmluZQlOU19LRVlfVFlQRV9OT19LRVkJMHhDMDAwCS8qIE5vIGtleSB1c2FibGUgZm9yIGVpdGhlcjsgbm8ga2V5ICovCisvKiBUaGUgdHlwZSBiaXRzIGNhbiBhbHNvIGJlIGludGVycHJldGVkIGluZGVwZW5kZW50bHksIGFzIHNpbmdsZSBiaXRzOiAqLworI2RlZmluZQlOU19LRVlfTk9fQVVUSAkJMHg4MDAwCS8qIEtleSB1bnVzYWJsZSBmb3IgYXV0aGVudGljYXRpb24gKi8KKyNkZWZpbmUJTlNfS0VZX05PX0NPTkYJCTB4NDAwMAkvKiBLZXkgdW51c2FibGUgZm9yIGNvbmZpZGVudGlhbGl0eSAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQyCTB4MjAwMAkvKiBTZWN1cml0eSBpcyAqbWFuZGF0b3J5KiBpZiBiaXQ9MCAqLworI2RlZmluZQlOU19LRVlfRVhURU5ERURfRkxBR1MJMHgxMDAwCS8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDQJMHgwODAwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQ1CTB4MDQwMCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfVFlQRQkweDAzMDAJLyogdGhlc2UgYml0cyBkZXRlcm1pbmUgdGhlIHR5cGUgKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfVVNFUgkweDAwMDAJLyoga2V5IGlzIGFzc29jLiB3aXRoIHVzZXIgKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfRU5USVRZCTB4MDIwMAkvKiBrZXkgaXMgYXNzb2MuIHdpdGggZW50aXR5IGVnIGhvc3QgKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfWk9ORQkweDAxMDAJLyoga2V5IGlzIHpvbmUga2V5ICovCisjZGVmaW5lCU5TX0tFWV9OQU1FX1JFU0VSVkVECTB4MDMwMAkvKiByZXNlcnZlZCBtZWFuaW5nICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDgJMHgwMDgwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQ5CTB4MDA0MCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEMTAJMHgwMDIwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQxMQkweDAwMTAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCU5TX0tFWV9TSUdOQVRPUllNQVNLCTB4MDAwRgkvKiBrZXkgY2FuIHNpZ24gUlIncyBvZiBzYW1lIG5hbWUgKi8KKyNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEX0JJVE1BU0sgKCBOU19LRVlfUkVTRVJWRUQyIHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVENCB8IFwKKwkJCQkgIE5TX0tFWV9SRVNFUlZFRDUgfCBcCisJCQkJICBOU19LRVlfUkVTRVJWRUQ4IHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVEOSB8IFwKKwkJCQkgIE5TX0tFWV9SRVNFUlZFRDEwIHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVEMTEgKQorI2RlZmluZSBOU19LRVlfUkVTRVJWRURfQklUTUFTSzIgMHhGRkZGIC8qIG5vIGJpdHMgZGVmaW5lZCBoZXJlICovCisKKy8qIFRoZSBBbGdvcml0aG0gZmllbGQgb2YgdGhlIEtFWSBhbmQgU0lHIFJSJ3MgaXMgYW4gaW50ZWdlciwgezEuLjI1NH0gKi8KKyNkZWZpbmUJTlNfQUxHX01ENVJTQQkJMQkvKiBNRDUgd2l0aCBSU0EgKi8KKyNkZWZpbmUJTlNfQUxHX0RIICAgICAgICAgICAgICAgMgkvKiBEaWZmaWUgSGVsbG1hbiBLRVkgKi8KKyNkZWZpbmUJTlNfQUxHX0RTQSAgICAgICAgICAgICAgMwkvKiBEU0EgS0VZICovCisjZGVmaW5lCU5TX0FMR19EU1MgICAgICAgICAgICAgIE5TX0FMR19EU0EKKyNkZWZpbmUJTlNfQUxHX0VYUElSRV9PTkxZCTI1MwkvKiBObyBhbGcsIG5vIHNlY3VyaXR5ICovCisjZGVmaW5lCU5TX0FMR19QUklWQVRFX09JRAkyNTQJLyogS2V5IGJlZ2lucyB3aXRoIE9JRCBnaXZpbmcgYWxnICovCisKKy8qIFByb3RvY29sIHZhbHVlcyAgKi8KKy8qIHZhbHVlIDAgaXMgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgTlNfS0VZX1BST1RfVExTICAgICAgICAgMQorI2RlZmluZSBOU19LRVlfUFJPVF9FTUFJTCAgICAgICAyCisjZGVmaW5lIE5TX0tFWV9QUk9UX0ROU1NFQyAgICAgIDMKKyNkZWZpbmUgTlNfS0VZX1BST1RfSVBTRUMgICAgICAgNAorI2RlZmluZSBOU19LRVlfUFJPVF9BTlkJCTI1NQorCisvKiBTaWduYXR1cmVzICovCisjZGVmaW5lCU5TX01ENVJTQV9NSU5fQklUUwkgNTEyCS8qIFNpemUgb2YgYSBtb2Qgb3IgZXhwIGluIGJpdHMgKi8KKyNkZWZpbmUJTlNfTUQ1UlNBX01BWF9CSVRTCTQwOTYKKwkvKiBUb3RhbCBvZiBiaW5hcnkgbW9kIGFuZCBleHAgKi8KKyNkZWZpbmUJTlNfTUQ1UlNBX01BWF9CWVRFUwkoKE5TX01ENVJTQV9NQVhfQklUUys3LzgpKjIrMykKKwkvKiBNYXggbGVuZ3RoIG9mIHRleHQgc2lnIGJsb2NrICovCisjZGVmaW5lCU5TX01ENVJTQV9NQVhfQkFTRTY0CSgoKE5TX01ENVJTQV9NQVhfQllURVMrMikvMykqNCkKKyNkZWZpbmUgTlNfTUQ1UlNBX01JTl9TSVpFCSgoTlNfTUQ1UlNBX01JTl9CSVRTKzcpLzgpCisjZGVmaW5lIE5TX01ENVJTQV9NQVhfU0laRQkoKE5TX01ENVJTQV9NQVhfQklUUys3KS84KQorCisjZGVmaW5lIE5TX0RTQV9TSUdfU0laRSAgICAgICAgIDQxCisjZGVmaW5lIE5TX0RTQV9NSU5fU0laRSAgICAgICAgIDIxMworI2RlZmluZSBOU19EU0FfTUFYX0JZVEVTICAgICAgICA0MDUKKworLyogT2Zmc2V0cyBpbnRvIFNJRyByZWNvcmQgcmRhdGEgdG8gZmluZCB2YXJpb3VzIHZhbHVlcyAqLworI2RlZmluZQlOU19TSUdfVFlQRQkwCS8qIFR5cGUgZmxhZ3MgKi8KKyNkZWZpbmUJTlNfU0lHX0FMRwkyCS8qIEFsZ29yaXRobSAqLworI2RlZmluZQlOU19TSUdfTEFCRUxTCTMJLyogSG93IG1hbnkgbGFiZWxzIGluIG5hbWUgKi8KKyNkZWZpbmUJTlNfU0lHX09UVEwJNAkvKiBPcmlnaW5hbCBUVEwgKi8KKyNkZWZpbmUJTlNfU0lHX0VYUElSCTgJLyogRXhwaXJhdGlvbiB0aW1lICovCisjZGVmaW5lCU5TX1NJR19TSUdORUQJMTIJLyogU2lnbmF0dXJlIHRpbWUgKi8KKyNkZWZpbmUJTlNfU0lHX0ZPT1QJMTYJLyogS2V5IGZvb3RwcmludCAqLworI2RlZmluZQlOU19TSUdfU0lHTkVSCTE4CS8qIERvbWFpbiBuYW1lIG9mIHdobyBzaWduZWQgaXQgKi8KKworLyogSG93IFJSIHR5cGVzIGFyZSByZXByZXNlbnRlZCBhcyBiaXQtZmxhZ3MgaW4gTlhUIHJlY29yZHMgKi8KKyNkZWZpbmUJTlNfTlhUX0JJVFMgOAorI2RlZmluZQlOU19OWFRfQklUX1NFVCggIG4scCkgKHBbKG4pL05TX05YVF9CSVRTXSB8PSAgKDB4ODA+PigobiklTlNfTlhUX0JJVFMpKSkKKyNkZWZpbmUJTlNfTlhUX0JJVF9DTEVBUihuLHApIChwWyhuKS9OU19OWFRfQklUU10gJj0gfigweDgwPj4oKG4pJU5TX05YVF9CSVRTKSkpCisjZGVmaW5lCU5TX05YVF9CSVRfSVNTRVQobixwKSAocFsobikvTlNfTlhUX0JJVFNdICYgICAoMHg4MD4+KChuKSVOU19OWFRfQklUUykpKQorI2RlZmluZSBOU19OWFRfTUFYIDEyNworCisvKgorICogRUROUzAgZXh0ZW5kZWQgZmxhZ3MgYW5kIG9wdGlvbiBjb2RlcywgaG9zdCBvcmRlci4KKyAqLworI2RlZmluZSBOU19PUFRfRE5TU0VDX09LCTB4ODAwMFUKKyNkZWZpbmUgTlNfT1BUX05TSUQgICAgICAgICAgICAgMworCisvKgorICogSW5saW5lIHZlcnNpb25zIG9mIGdldC9wdXQgc2hvcnQvbG9uZy4gIFBvaW50ZXIgaXMgYWR2YW5jZWQuCisgKi8KKyNkZWZpbmUgTlNfR0VUMTYocywgY3ApIGRvIHsgXAorCWNvbnN0IHVfY2hhciAqdF9jcCA9IChjb25zdCB1X2NoYXIgKikoY3ApOyBcCisJKHMpID0gKCh1aW50MTZfdCl0X2NwWzBdIDw8IDgpIFwKKwkgICAgfCAoKHVpbnQxNl90KXRfY3BbMV0pIFwKKwkgICAgOyBcCisJKGNwKSArPSBOU19JTlQxNlNaOyBcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBOU19HRVQzMihsLCBjcCkgZG8geyBcCisJY29uc3QgdV9jaGFyICp0X2NwID0gKGNvbnN0IHVfY2hhciAqKShjcCk7IFwKKwkobCkgPSAoKHVpbnQzMl90KXRfY3BbMF0gPDwgMjQpIFwKKwkgICAgfCAoKHVpbnQzMl90KXRfY3BbMV0gPDwgMTYpIFwKKwkgICAgfCAoKHVpbnQzMl90KXRfY3BbMl0gPDwgOCkgXAorCSAgICB8ICgodWludDMyX3QpdF9jcFszXSkgXAorCSAgICA7IFwKKwkoY3ApICs9IE5TX0lOVDMyU1o7IFwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIE5TX1BVVDE2KHMsIGNwKSBkbyB7IFwKKwl1aW50MzJfdCB0X3MgPSAodWludDMyX3QpKHMpOyBcCisJdV9jaGFyICp0X2NwID0gKHVfY2hhciAqKShjcCk7IFwKKwkqdF9jcCsrID0gdF9zID4+IDg7IFwKKwkqdF9jcCAgID0gdF9zOyBcCisJKGNwKSArPSBOU19JTlQxNlNaOyBcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBOU19QVVQzMihsLCBjcCkgZG8geyBcCisJdWludDMyX3QgdF9sID0gKHVpbnQzMl90KShsKTsgXAorCXVfY2hhciAqdF9jcCA9ICh1X2NoYXIgKikoY3ApOyBcCisJKnRfY3ArKyA9IHRfbCA+PiAyNDsgXAorCSp0X2NwKysgPSB0X2wgPj4gMTY7IFwKKwkqdF9jcCsrID0gdF9sID4+IDg7IFwKKwkqdF9jcCAgID0gdF9sOyBcCisJKGNwKSArPSBOU19JTlQzMlNaOyBcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworLyoKKyAqIEFOU0kgQyBpZGVudGlmaWVyIGhpZGluZyBmb3IgYmluZCdzIGxpYi9uYW1lc2VyLgorICovCisjZGVmaW5lCW5zX21zZ19nZXRmbGFnCQlfX25zX21zZ19nZXRmbGFnCisjZGVmaW5lIG5zX2dldDE2CQlfX25zX2dldDE2CisjZGVmaW5lIG5zX2dldDMyCQlfX25zX2dldDMyCisjZGVmaW5lIG5zX3B1dDE2CQlfX25zX3B1dDE2CisjZGVmaW5lIG5zX3B1dDMyCQlfX25zX3B1dDMyCisjZGVmaW5lIG5zX2luaXRwYXJzZQkJX19uc19pbml0cGFyc2UKKyNkZWZpbmUgbnNfc2tpcHJyCQlfX25zX3NraXBycgorI2RlZmluZSBuc19wYXJzZXJyCQlfX25zX3BhcnNlcnIKKyNkZWZpbmUgbnNfcGFyc2VycjIJCV9fbnNfcGFyc2VycjIKKyNkZWZpbmUJbnNfc3ByaW50cnIJCV9fbnNfc3ByaW50cnIKKyNkZWZpbmUJbnNfc3ByaW50cnJmCQlfX25zX3NwcmludHJyZgorI2RlZmluZQluc19mb3JtYXRfdHRsCQlfX25zX2Zvcm1hdF90dGwKKyNkZWZpbmUJbnNfcGFyc2VfdHRsCQlfX25zX3BhcnNlX3R0bAorI2RlZmluZSBuc19kYXRldG9zZWNzCQlfX25zX2RhdGV0b3NlY3MKKyNkZWZpbmUJbnNfbmFtZV9udG9sCQlfX25zX25hbWVfbnRvbAorI2RlZmluZQluc19uYW1lX250b3AJCV9fbnNfbmFtZV9udG9wCisjZGVmaW5lCW5zX25hbWVfcHRvbgkJX19uc19uYW1lX3B0b24KKyNkZWZpbmUJbnNfbmFtZV9wdG9uMgkJX19uc19uYW1lX3B0b24yCisjZGVmaW5lCW5zX25hbWVfdW5wYWNrCQlfX25zX25hbWVfdW5wYWNrCisjZGVmaW5lCW5zX25hbWVfdW5wYWNrMgkJX19uc19uYW1lX3VucGFjazIKKyNkZWZpbmUJbnNfbmFtZV9wYWNrCQlfX25zX25hbWVfcGFjaworI2RlZmluZQluc19uYW1lX2NvbXByZXNzCV9fbnNfbmFtZV9jb21wcmVzcworI2RlZmluZQluc19uYW1lX3VuY29tcHJlc3MJX19uc19uYW1lX3VuY29tcHJlc3MKKyNkZWZpbmUJbnNfbmFtZV9za2lwCQlfX25zX25hbWVfc2tpcAorI2RlZmluZQluc19uYW1lX3JvbGxiYWNrCV9fbnNfbmFtZV9yb2xsYmFjaworI2RlZmluZQluc19uYW1lX2xlbmd0aAkJX19uc19uYW1lX2xlbmd0aAorI2RlZmluZQluc19uYW1lX2VxCQlfX25zX25hbWVfZXEKKyNkZWZpbmUJbnNfbmFtZV9vd25lZAkJX19uc19uYW1lX293bmVkCisjZGVmaW5lCW5zX25hbWVfbWFwCQlfX25zX25hbWVfbWFwCisjZGVmaW5lCW5zX25hbWVfbGFiZWxzCQlfX25zX25hbWVfbGFiZWxzCisjZGVmaW5lCW5zX3NpZ24JCQlfX25zX3NpZ24KKyNkZWZpbmUJbnNfc2lnbjIJCV9fbnNfc2lnbjIKKyNkZWZpbmUJbnNfc2lnbl90Y3AJCV9fbnNfc2lnbl90Y3AKKyNkZWZpbmUJbnNfc2lnbl90Y3AyCQlfX25zX3NpZ25fdGNwMgorI2RlZmluZQluc19zaWduX3RjcF9pbml0CV9fbnNfc2lnbl90Y3BfaW5pdAorI2RlZmluZSBuc19maW5kX3RzaWcJCV9fbnNfZmluZF90c2lnCisjZGVmaW5lCW5zX3ZlcmlmeQkJX19uc192ZXJpZnkKKyNkZWZpbmUJbnNfdmVyaWZ5X3RjcAkJX19uc192ZXJpZnlfdGNwCisjZGVmaW5lCW5zX3ZlcmlmeV90Y3BfaW5pdAlfX25zX3ZlcmlmeV90Y3BfaW5pdAorI2RlZmluZQluc19zYW1lZG9tYWluCQlfX25zX3NhbWVkb21haW4KKyNkZWZpbmUJbnNfc3ViZG9tYWluCQlfX25zX3N1YmRvbWFpbgorI2RlZmluZQluc19tYWtlY2Fub24JCV9fbnNfbWFrZWNhbm9uCisjZGVmaW5lCW5zX3NhbWVuYW1lCQlfX25zX3NhbWVuYW1lCisjZGVmaW5lCW5zX25ld21zZ19pbml0CQlfX25zX25ld21zZ19pbml0CisjZGVmaW5lCW5zX25ld21zZ19jb3B5CQlfX25zX25ld21zZ19jb3B5CisjZGVmaW5lCW5zX25ld21zZ19pZAkJX19uc19uZXdtc2dfaWQKKyNkZWZpbmUJbnNfbmV3bXNnX2ZsYWcJCV9fbnNfbmV3bXNnX2ZsYWcKKyNkZWZpbmUJbnNfbmV3bXNnX3EJCV9fbnNfbmV3bXNnX3EKKyNkZWZpbmUJbnNfbmV3bXNnX3JyCQlfX25zX25ld21zZ19ycgorI2RlZmluZQluc19uZXdtc2dfZG9uZQkJX19uc19uZXdtc2dfZG9uZQorI2RlZmluZQluc19yZGF0YV91bnBhY2sJCV9fbnNfcmRhdGFfdW5wYWNrCisjZGVmaW5lCW5zX3JkYXRhX2VxdWFsCQlfX25zX3JkYXRhX2VxdWFsCisjZGVmaW5lCW5zX3JkYXRhX3JlZmVycwkJX19uc19yZGF0YV9yZWZlcnMKKworX19CRUdJTl9ERUNMUworaW50CQluc19tc2dfZ2V0ZmxhZyhuc19tc2csIGludCk7Cit1aW50MTZfdAluc19nZXQxNihjb25zdCB1X2NoYXIgKik7Cit1aW50MzJfdAluc19nZXQzMihjb25zdCB1X2NoYXIgKik7Cit2b2lkCQluc19wdXQxNih1aW50MTZfdCwgdV9jaGFyICopOwordm9pZAkJbnNfcHV0MzIodWludDMyX3QsIHVfY2hhciAqKTsKK2ludAkJbnNfaW5pdHBhcnNlKGNvbnN0IHVfY2hhciAqLCBpbnQsIG5zX21zZyAqKTsKK2ludAkJbnNfc2tpcHJyKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgbnNfc2VjdCwgaW50KTsKK2ludAkJbnNfcGFyc2Vycihuc19tc2cgKiwgbnNfc2VjdCwgaW50LCBuc19yciAqKTsKK2ludAkJbnNfcGFyc2VycjIobnNfbXNnICosIG5zX3NlY3QsIGludCwgbnNfcnIyICopOworaW50CQluc19zcHJpbnRycihjb25zdCBuc19tc2cgKiwgY29uc3QgbnNfcnIgKiwKKwkJCQkgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfc3ByaW50cnJmKGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwKKwkJCQkgIG5zX2NsYXNzLCBuc190eXBlLCB1X2xvbmcsIGNvbnN0IHVfY2hhciAqLAorCQkJCSAgc2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKwkJCQkgIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfZm9ybWF0X3R0bCh1X2xvbmcsIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfcGFyc2VfdHRsKGNvbnN0IGNoYXIgKiwgdV9sb25nICopOwordWludDMyX3QJbnNfZGF0ZXRvc2Vjcyhjb25zdCBjaGFyICpjcCwgaW50ICplcnJwKTsKK2ludAkJbnNfbmFtZV9udG9sKGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfbmFtZV9udG9wKGNvbnN0IHVfY2hhciAqLCBjaGFyICosIHNpemVfdCk7CitpbnQJCW5zX25hbWVfcHRvbihjb25zdCBjaGFyICosIHVfY2hhciAqLCBzaXplX3QpOworaW50CQluc19uYW1lX3B0b24yKGNvbnN0IGNoYXIgKiwgdV9jaGFyICosIHNpemVfdCwgc2l6ZV90ICopOworaW50CQluc19uYW1lX3VucGFjayhjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCisJCQkJICAgIGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfbmFtZV91bnBhY2syKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwKKwkJCQkgICAgIGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90LAorCQkJCSAgICAgc2l6ZV90ICopOworaW50CQluc19uYW1lX3BhY2soY29uc3QgdV9jaGFyICosIHVfY2hhciAqLCBpbnQsCisJCQkJICBjb25zdCB1X2NoYXIgKiosIGNvbnN0IHVfY2hhciAqKik7CitpbnQJCW5zX25hbWVfdW5jb21wcmVzcyhjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCisJCQkJCWNvbnN0IHVfY2hhciAqLCBjaGFyICosIHNpemVfdCk7CitpbnQJCW5zX25hbWVfY29tcHJlc3MoY29uc3QgY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90LAorCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqKiwgY29uc3QgdV9jaGFyICoqKTsKK2ludAkJbnNfbmFtZV9za2lwKGNvbnN0IHVfY2hhciAqKiwgY29uc3QgdV9jaGFyICopOwordm9pZAkJbnNfbmFtZV9yb2xsYmFjayhjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICoqLAorCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqKik7CitpbnQJCW5zX3NpZ24odV9jaGFyICosIGludCAqLCBpbnQsIGludCwgdm9pZCAqLAorCQkJICAgICBjb25zdCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiwgaW50ICosIHRpbWVfdCk7CitpbnQJCW5zX3NpZ24yKHVfY2hhciAqLCBpbnQgKiwgaW50LCBpbnQsIHZvaWQgKiwKKwkJCSAgICAgIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQgKiwgdGltZV90LAorCQkJICAgICAgdV9jaGFyICoqLCB1X2NoYXIgKiopOworc3NpemVfdAkJbnNfbmFtZV9sZW5ndGgobnNfbm5hbWVfY3QsIHNpemVfdCk7CitpbnQJCW5zX25hbWVfZXEobnNfbm5hbWVfY3QsIHNpemVfdCwgbnNfbm5hbWVfY3QsIHNpemVfdCk7CitpbnQJCW5zX25hbWVfb3duZWQobnNfbmFtZW1hcF9jdCwgaW50LCBuc19uYW1lbWFwX2N0LCBpbnQpOworaW50CQluc19uYW1lX21hcChuc19ubmFtZV9jdCwgc2l6ZV90LCBuc19uYW1lbWFwX3QsIGludCk7CitpbnQJCW5zX25hbWVfbGFiZWxzKG5zX25uYW1lX2N0LCBzaXplX3QpOworaW50CQluc19zaWduX3RjcCh1X2NoYXIgKiwgaW50ICosIGludCwgaW50LAorCQkJCSBuc190Y3BfdHNpZ19zdGF0ZSAqLCBpbnQpOworaW50CQluc19zaWduX3RjcDIodV9jaGFyICosIGludCAqLCBpbnQsIGludCwKKwkJCQkgIG5zX3RjcF90c2lnX3N0YXRlICosIGludCwKKwkJCQkgIHVfY2hhciAqKiwgdV9jaGFyICoqKTsKK2ludAkJbnNfc2lnbl90Y3BfaW5pdCh2b2lkICosIGNvbnN0IHVfY2hhciAqLCBpbnQsCisJCQkJCW5zX3RjcF90c2lnX3N0YXRlICopOwordV9jaGFyCQkqbnNfZmluZF90c2lnKHVfY2hhciAqLCB1X2NoYXIgKik7CitpbnQJCW5zX3ZlcmlmeSh1X2NoYXIgKiwgaW50ICosIHZvaWQgKiwKKwkJCSAgICAgICBjb25zdCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiwgaW50ICosCisJCQkgICAgICAgdGltZV90ICosIGludCk7CitpbnQJCW5zX3ZlcmlmeV90Y3AodV9jaGFyICosIGludCAqLCBuc190Y3BfdHNpZ19zdGF0ZSAqLCBpbnQpOworaW50CQluc192ZXJpZnlfdGNwX2luaXQodm9pZCAqLCBjb25zdCB1X2NoYXIgKiwgaW50LAorCQkJCQluc190Y3BfdHNpZ19zdGF0ZSAqKTsKK2ludAkJbnNfc2FtZWRvbWFpbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitpbnQJCW5zX3N1YmRvbWFpbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitpbnQJCW5zX21ha2VjYW5vbihjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfc2FtZW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworaW50CQluc19uZXdtc2dfaW5pdCh1X2NoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZnNpeiwgbnNfbmV3bXNnICopOworaW50CQluc19uZXdtc2dfY29weShuc19uZXdtc2cgKiwgbnNfbXNnICopOwordm9pZAkJbnNfbmV3bXNnX2lkKG5zX25ld21zZyAqaGFuZGxlLCB1aW50MTZfdCBpZCk7Cit2b2lkCQluc19uZXdtc2dfZmxhZyhuc19uZXdtc2cgKmhhbmRsZSwgbnNfZmxhZyBmbGFnLCB1X2ludCB2YWx1ZSk7CitpbnQJCW5zX25ld21zZ19xKG5zX25ld21zZyAqaGFuZGxlLCBuc19ubmFtZV9jdCBxbmFtZSwKKwkJCSAgICBuc190eXBlIHF0eXBlLCBuc19jbGFzcyBxY2xhc3MpOworaW50CQluc19uZXdtc2dfcnIobnNfbmV3bXNnICpoYW5kbGUsIG5zX3NlY3Qgc2VjdCwKKwkJCSAgICAgbnNfbm5hbWVfY3QgbmFtZSwgbnNfdHlwZSB0eXBlLAorCQkJICAgICBuc19jbGFzcyBycl9jbGFzcywgdWludDMyX3QgdHRsLAorCQkJICAgICB1aW50MTZfdCByZGxlbiwgY29uc3QgdV9jaGFyICpyZGF0YSk7CitzaXplX3QJCW5zX25ld21zZ19kb25lKG5zX25ld21zZyAqaGFuZGxlKTsKK3NzaXplX3QJCW5zX3JkYXRhX3VucGFjayhjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIG5zX3R5cGUsCisJCQkJY29uc3QgdV9jaGFyICosIHNpemVfdCwgdV9jaGFyICosIHNpemVfdCk7CitpbnQJCW5zX3JkYXRhX2VxdWFsKG5zX3R5cGUsCisJCQkgICAgICAgY29uc3QgdV9jaGFyICosIHNpemVfdCwKKwkJCSAgICAgICBjb25zdCB1X2NoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfcmRhdGFfcmVmZXJzKG5zX3R5cGUsCisJCQkJY29uc3QgdV9jaGFyICosIHNpemVfdCwKKwkJCQljb25zdCB1X2NoYXIgKik7CitfX0VORF9ERUNMUworCisjaWZkZWYgQklORF80X0NPTVBBVAorI2luY2x1ZGUgPGFycGEvbmFtZXNlcl9jb21wYXQuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogIV9BUlBBX05BTUVTRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9hcnBhL25hbWVzZXJfY29tcGF0LmggYi9saWJjL2luY2x1ZGUvYXJwYS9uYW1lc2VyX2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNjBmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvYXJwYS9uYW1lc2VyX2NvbXBhdC5oCkBAIC0wLDAgKzEsMjM4IEBACisvKgkkTmV0QlNEOiBuYW1lc2VyX2NvbXBhdC5oLHYgMS4xLjEuMiAyMDA0LzExLzA3IDAxOjI4OjI3IGNocmlzdG9zIEV4cCAkCSovCisKKy8qIENvcHlyaWdodCAoYykgMTk4MywgMTk4OQorICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiAgICAgIGZyb20gbmFtZXNlci5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICoJSWQ6IG5hbWVzZXJfY29tcGF0LmgsdiAxLjggMjAwNi8wNS8xOSAwMjozMzo0MCBtYXJrYSBFeHAKKyAqLworCisjaWZuZGVmIF9BUlBBX05BTUVTRVJfQ09NUEFUXworI2RlZmluZQlfQVJQQV9OQU1FU0VSX0NPTVBBVF8KKworI2RlZmluZQlfX0JJTkQJCTE5OTUwNjIxCS8qIChERUFEKSBpbnRlcmZhY2UgdmVyc2lvbiBzdGFtcC4gKi8KKworI2luY2x1ZGUgPGVuZGlhbi5oPgorCisjaWZuZGVmIEJZVEVfT1JERVIKKyNpZiAoQlNEID49IDE5OTEwMykKKyMgaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KKyNlbHNlCisjaWZkZWYgX19saW51eF9fCisjIGluY2x1ZGUgPGVuZGlhbi5oPgorI2Vsc2UKKyNkZWZpbmUJTElUVExFX0VORElBTgkxMjM0CS8qIGxlYXN0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKHZheCwgcGMpICovCisjZGVmaW5lCUJJR19FTkRJQU4JNDMyMQkvKiBtb3N0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKElCTSwgbmV0KSAqLworI2RlZmluZQlQRFBfRU5ESUFOCTM0MTIJLyogTFNCIGZpcnN0IGluIHdvcmQsIE1TVyBmaXJzdCBpbiBsb25nIChwZHApKi8KKworI2lmIGRlZmluZWQodmF4KSB8fCBkZWZpbmVkKG5zMzIwMDApIHx8IGRlZmluZWQoc3VuMzg2KSB8fCBkZWZpbmVkKGkzODYpIHx8IFwKKyAgICBkZWZpbmVkKE1JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKEJJVF9aRVJPX09OX1JJR0hUKSB8fCBcCisgICAgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19hbWQ2NF9fKSB8fCBcCisgICAgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKE1JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBcCisgICAgZGVmaW5lZChCSVRfWkVST19PTl9SSUdIVCkgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hbHBoYSkgfHwgXAorICAgIChkZWZpbmVkKF9fTHlueF9fKSAmJiBkZWZpbmVkKF9feDg2X18pKQorI2RlZmluZSBCWVRFX09SREVSCUxJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChzZWwpIHx8IGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKG1jNjgwMDApIHx8IGRlZmluZWQoc3BhcmMpIHx8IFwKKyAgICBkZWZpbmVkKGlzNjhrKSB8fCBkZWZpbmVkKHRhaG9lKSB8fCBkZWZpbmVkKGlibTAzMikgfHwgZGVmaW5lZChpYm0zNzApIHx8IFwKKyAgICBkZWZpbmVkKE1JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKF9JQk1SMikgfHwgZGVmaW5lZChER1VYKSB8fFwKKyAgICBkZWZpbmVkKGFwb2xsbykgfHwgZGVmaW5lZChfX2NvbnZleF9fKSB8fCBkZWZpbmVkKF9DUkFZKSB8fCBcCisgICAgZGVmaW5lZChfX2hwcGEpIHx8IGRlZmluZWQoX19ocDkwMDApIHx8IFwKKyAgICBkZWZpbmVkKF9faHA5MDAwczMwMCkgfHwgZGVmaW5lZChfX2hwOTAwMHM3MDApIHx8IFwKKyAgICBkZWZpbmVkKF9faHAzMDAwczkwMCkgfHwgZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoTVBFKSB8fCBcCisgICAgZGVmaW5lZCAoQklUX1pFUk9fT05fTEVGVCkgfHwgZGVmaW5lZChtNjhrKSB8fCBkZWZpbmVkKF9fc3BhcmMpIHx8ICBcCisgICAgKGRlZmluZWQoX19MeW54X18pICYmIFwKKyAgICAgKGRlZmluZWQoX182OGtfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjX18pKSkKKyNkZWZpbmUgQllURV9PUkRFUglCSUdfRU5ESUFOCisjZW5kaWYKKyNlbmRpZiAvKiBfX2xpbnV4ICovCisjZW5kaWYgLyogQlNEICovCisjZW5kaWYgLyogQllURV9PUkRFUiAqLworCisjaWYgIWRlZmluZWQoQllURV9PUkRFUikgfHwgXAorICAgIChCWVRFX09SREVSICE9IEJJR19FTkRJQU4gJiYgQllURV9PUkRFUiAhPSBMSVRUTEVfRU5ESUFOICYmIFwKKyAgICBCWVRFX09SREVSICE9IFBEUF9FTkRJQU4pCisJLyogeW91IG11c3QgZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QgYml0IG9yZGVyIGlzIGZvcgorCSAqIHlvdXIgY29tcGlsZXIgLSB0aGUgbmV4dCBsaW5lIGlzIGFuIGludGVudGlvbmFsIGVycm9yCisJICogd2hpY2ggd2lsbCBmb3JjZSB5b3VyIGNvbXBpbGVzIHRvIGJvbWIgdW50aWwgeW91IGZpeAorCSAqIHRoZSBhYm92ZSBtYWNyb3MuCisJICovCisgICNlcnJvciAiVW5kZWZpbmVkIG9yIGludmFsaWQgQllURV9PUkRFUiI7CisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgcXVlcnkgaGVhZGVyLiAgVGhlIG9yZGVyIG9mIHRoZSBmaWVsZHMgaXMgbWFjaGluZS0gYW5kCisgKiBjb21waWxlci1kZXBlbmRlbnQsIGRlcGVuZGluZyBvbiB0aGUgYnl0ZS9iaXQgb3JkZXIgYW5kIHRoZSBsYXlvdXQKKyAqIG9mIGJpdCBmaWVsZHMuICBXZSB1c2UgYml0IGZpZWxkcyBvbmx5IGluIGludCB2YXJpYWJsZXMsIGFzIHRoaXMKKyAqIGlzIGFsbCBBTlNJIHJlcXVpcmVzLiAgVGhpcyByZXF1aXJlcyBhIHNvbWV3aGF0IGNvbmZ1c2luZyByZWFycmFuZ2VtZW50LgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZAlpZCA6MTY7CQkvKiBxdWVyeSBpZGVudGlmaWNhdGlvbiBudW1iZXIgKi8KKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKwkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCisJdW5zaWduZWQJcXI6IDE7CQkvKiByZXNwb25zZSBmbGFnICovCisJdW5zaWduZWQJb3Bjb2RlOiA0OwkvKiBwdXJwb3NlIG9mIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlhYTogMTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLworCXVuc2lnbmVkCXRjOiAxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlyZDogMTsJCS8qIHJlY3Vyc2lvbiBkZXNpcmVkICovCisJCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KKwl1bnNpZ25lZAlyYTogMTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KKwl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KKwl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KKwl1bnNpZ25lZAljZDogMTsJCS8qIGNoZWNraW5nIGRpc2FibGVkIGJ5IHJlc29sdmVyICovCisJdW5zaWduZWQJcmNvZGUgOjQ7CS8qIHJlc3BvbnNlIGNvZGUgKi8KKyNlbmRpZgorI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTiB8fCBCWVRFX09SREVSID09IFBEUF9FTkRJQU4KKwkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCisJdW5zaWduZWQJcmQgOjE7CQkvKiByZWN1cnNpb24gZGVzaXJlZCAqLworCXVuc2lnbmVkCXRjIDoxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlhYSA6MTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLworCXVuc2lnbmVkCW9wY29kZSA6NDsJLyogcHVycG9zZSBvZiBtZXNzYWdlICovCisJdW5zaWduZWQJcXIgOjE7CQkvKiByZXNwb25zZSBmbGFnICovCisJCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KKwl1bnNpZ25lZAlyY29kZSA6NDsJLyogcmVzcG9uc2UgY29kZSAqLworCXVuc2lnbmVkCWNkOiAxOwkJLyogY2hlY2tpbmcgZGlzYWJsZWQgYnkgcmVzb2x2ZXIgKi8KKwl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KKwl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KKwl1bnNpZ25lZAlyYSA6MTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KKyNlbmRpZgorCQkJLyogcmVtYWluaW5nIGJ5dGVzICovCisJdW5zaWduZWQJcWRjb3VudCA6MTY7CS8qIG51bWJlciBvZiBxdWVzdGlvbiBlbnRyaWVzICovCisJdW5zaWduZWQJYW5jb3VudCA6MTY7CS8qIG51bWJlciBvZiBhbnN3ZXIgZW50cmllcyAqLworCXVuc2lnbmVkCW5zY291bnQgOjE2OwkvKiBudW1iZXIgb2YgYXV0aG9yaXR5IGVudHJpZXMgKi8KKwl1bnNpZ25lZAlhcmNvdW50IDoxNjsJLyogbnVtYmVyIG9mIHJlc291cmNlIGVudHJpZXMgKi8KK30gSEVBREVSOworCisjZGVmaW5lIFBBQ0tFVFNaCU5TX1BBQ0tFVFNaCisjZGVmaW5lIE1BWEROQU1FCU5TX01BWEROQU1FCisjZGVmaW5lIE1BWENETkFNRQlOU19NQVhDRE5BTUUKKyNkZWZpbmUgTUFYTEFCRUwJTlNfTUFYTEFCRUwKKyNkZWZpbmUJSEZJWEVEU1oJTlNfSEZJWEVEU1oKKyNkZWZpbmUgUUZJWEVEU1oJTlNfUUZJWEVEU1oKKyNkZWZpbmUgUlJGSVhFRFNaCU5TX1JSRklYRURTWgorI2RlZmluZQlJTlQzMlNaCQlOU19JTlQzMlNaCisjZGVmaW5lCUlOVDE2U1oJCU5TX0lOVDE2U1oKKyNkZWZpbmUJSU5UOFNaCQlOU19JTlQ4U1oKKyNkZWZpbmUJSU5BRERSU1oJTlNfSU5BRERSU1oKKyNkZWZpbmUJSU42QUREUlNaCU5TX0lONkFERFJTWgorI2RlZmluZQlJTkRJUl9NQVNLCU5TX0NNUFJTRkxHUworI2RlZmluZSBOQU1FU0VSVkVSX1BPUlQJTlNfREVGQVVMVFBPUlQKKworI2RlZmluZSBTX1pPTkUJCW5zX3Nfem4KKyNkZWZpbmUgU19QUkVSRVEJbnNfc19wcgorI2RlZmluZSBTX1VQREFURQluc19zX3VkCisjZGVmaW5lIFNfQUREVAkJbnNfc19hcgorCisjZGVmaW5lIFFVRVJZCQluc19vX3F1ZXJ5CisjZGVmaW5lIElRVUVSWQkJbnNfb19pcXVlcnkKKyNkZWZpbmUgU1RBVFVTCQluc19vX3N0YXR1cworI2RlZmluZQlOU19OT1RJRllfT1AJbnNfb19ub3RpZnkKKyNkZWZpbmUJTlNfVVBEQVRFX09QCW5zX29fdXBkYXRlCisKKyNkZWZpbmUgTk9FUlJPUgkJbnNfcl9ub2Vycm9yCisjZGVmaW5lIEZPUk1FUlIJCW5zX3JfZm9ybWVycgorI2RlZmluZSBTRVJWRkFJTAluc19yX3NlcnZmYWlsCisjZGVmaW5lIE5YRE9NQUlOCW5zX3Jfbnhkb21haW4KKyNkZWZpbmUgTk9USU1QCQluc19yX25vdGltcGwKKyNkZWZpbmUgUkVGVVNFRAkJbnNfcl9yZWZ1c2VkCisjZGVmaW5lIFlYRE9NQUlOCW5zX3JfeXhkb21haW4KKyNkZWZpbmUgWVhSUlNFVAkJbnNfcl95eHJyc2V0CisjZGVmaW5lIE5YUlJTRVQJCW5zX3JfbnhycnNldAorI2RlZmluZSBOT1RBVVRICQluc19yX25vdGF1dGgKKyNkZWZpbmUgTk9UWk9ORQkJbnNfcl9ub3R6b25lCisvKiNkZWZpbmUgQkFEU0lHCQluc19yX2JhZHNpZyovCisvKiNkZWZpbmUgQkFES0VZCQluc19yX2JhZGtleSovCisvKiNkZWZpbmUgQkFEVElNRQkJbnNfcl9iYWR0aW1lKi8KKworCisjZGVmaW5lIERFTEVURQkJbnNfdW9wX2RlbGV0ZQorI2RlZmluZSBBREQJCW5zX3VvcF9hZGQKKworI2RlZmluZSBUX0EJCW5zX3RfYQorI2RlZmluZSBUX05TCQluc190X25zCisjZGVmaW5lIFRfTUQJCW5zX3RfbWQKKyNkZWZpbmUgVF9NRgkJbnNfdF9tZgorI2RlZmluZSBUX0NOQU1FCQluc190X2NuYW1lCisjZGVmaW5lIFRfU09BCQluc190X3NvYQorI2RlZmluZSBUX01CCQluc190X21iCisjZGVmaW5lIFRfTUcJCW5zX3RfbWcKKyNkZWZpbmUgVF9NUgkJbnNfdF9tcgorI2RlZmluZSBUX05VTEwJCW5zX3RfbnVsbAorI2RlZmluZSBUX1dLUwkJbnNfdF93a3MKKyNkZWZpbmUgVF9QVFIJCW5zX3RfcHRyCisjZGVmaW5lIFRfSElORk8JCW5zX3RfaGluZm8KKyNkZWZpbmUgVF9NSU5GTwkJbnNfdF9taW5mbworI2RlZmluZSBUX01YCQluc190X214CisjZGVmaW5lIFRfVFhUCQluc190X3R4dAorI2RlZmluZQlUX1JQCQluc190X3JwCisjZGVmaW5lIFRfQUZTREIJCW5zX3RfYWZzZGIKKyNkZWZpbmUgVF9YMjUJCW5zX3RfeDI1CisjZGVmaW5lIFRfSVNETgkJbnNfdF9pc2RuCisjZGVmaW5lIFRfUlQJCW5zX3RfcnQKKyNkZWZpbmUgVF9OU0FQCQluc190X25zYXAKKyNkZWZpbmUgVF9OU0FQX1BUUgluc190X25zYXBfcHRyCisjZGVmaW5lCVRfU0lHCQluc190X3NpZworI2RlZmluZQlUX0tFWQkJbnNfdF9rZXkKKyNkZWZpbmUJVF9QWAkJbnNfdF9weAorI2RlZmluZQlUX0dQT1MJCW5zX3RfZ3BvcworI2RlZmluZQlUX0FBQUEJCW5zX3RfYWFhYQorI2RlZmluZQlUX0xPQwkJbnNfdF9sb2MKKyNkZWZpbmUJVF9OWFQJCW5zX3Rfbnh0CisjZGVmaW5lCVRfRUlECQluc190X2VpZAorI2RlZmluZQlUX05JTUxPQwluc190X25pbWxvYworI2RlZmluZQlUX1NSVgkJbnNfdF9zcnYKKyNkZWZpbmUgVF9BVE1BCQluc190X2F0bWEKKyNkZWZpbmUgVF9OQVBUUgkJbnNfdF9uYXB0cgorI2RlZmluZSBUX0E2CQluc190X2E2CisjZGVmaW5lCVRfVFNJRwkJbnNfdF90c2lnCisjZGVmaW5lCVRfSVhGUgkJbnNfdF9peGZyCisjZGVmaW5lIFRfQVhGUgkJbnNfdF9heGZyCisjZGVmaW5lIFRfTUFJTEIJCW5zX3RfbWFpbGIKKyNkZWZpbmUgVF9NQUlMQQkJbnNfdF9tYWlsYQorI2RlZmluZSBUX0FOWQkJbnNfdF9hbnkKKworI2RlZmluZSBDX0lOCQluc19jX2luCisjZGVmaW5lIENfQ0hBT1MJCW5zX2NfY2hhb3MKKyNkZWZpbmUgQ19IUwkJbnNfY19ocworLyogQklORF9VUERBVEUgKi8KKyNkZWZpbmUgQ19OT05FCQluc19jX25vbmUKKyNkZWZpbmUgQ19BTlkJCW5zX2NfYW55CisKKyNkZWZpbmUJR0VUU0hPUlQJCU5TX0dFVDE2CisjZGVmaW5lCUdFVExPTkcJCQlOU19HRVQzMgorI2RlZmluZQlQVVRTSE9SVAkJTlNfUFVUMTYKKyNkZWZpbmUJUFVUTE9ORwkJCU5TX1BVVDMyCisKKyNlbmRpZiAvKiBfQVJQQV9OQU1FU0VSX0NPTVBBVF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9hc20vcGFnZS5oIGIvbGliYy9pbmNsdWRlL2FzbS9wYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MDFhM2YuLjAwMDAwMDAKLS0tIGEvbGliYy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9QQUdFX0gKLSNkZWZpbmUgX19BU01fUEFHRV9ICi0KLS8qIE5ldyBjb2RlIHNob3VsZCB1c2Ugc3lzY29uZihfU0NfUEFHRVNJWkUpIGluc3RlYWQuICovCi0jZGVmaW5lIFBBR0VfU0hJRlQgMTIKLSNkZWZpbmUgUEFHRV9TSVpFICgxVUxMIDw8IFBBR0VfU0hJRlQpCi0jZGVmaW5lIFBBR0VfTUFTSyAofihQQUdFX1NJWkUgLSAxKSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvY3R5cGUuaCBiL2xpYmMvaW5jbHVkZS9jdHlwZS5oCmluZGV4IDU1NTdlMzEuLmQwNWE5NTIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9jdHlwZS5oCisrKyBiL2xpYmMvaW5jbHVkZS9jdHlwZS5oCkBAIC00MSwzMiArNDEsMjIgQEAKICNkZWZpbmUgX0NUWVBFX0hfCiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDx4bG9jYWxlLmg+CiAKICNkZWZpbmUJX0NUWVBFX1UJMHgwMQogI2RlZmluZQlfQ1RZUEVfTAkweDAyCi0jZGVmaW5lCV9DVFlQRV9OCTB4MDQKKyNkZWZpbmUJX0NUWVBFX0QJMHgwNAogI2RlZmluZQlfQ1RZUEVfUwkweDA4CiAjZGVmaW5lCV9DVFlQRV9QCTB4MTAKICNkZWZpbmUJX0NUWVBFX0MJMHgyMAogI2RlZmluZQlfQ1RZUEVfWAkweDQwCiAjZGVmaW5lCV9DVFlQRV9CCTB4ODAKKyNkZWZpbmUJX0NUWVBFX1IJKF9DVFlQRV9QfF9DVFlQRV9VfF9DVFlQRV9MfF9DVFlQRV9EfF9DVFlQRV9CKQorI2RlZmluZQlfQ1RZUEVfQQkoX0NUWVBFX0x8X0NUWVBFX1UpCiAKIF9fQkVHSU5fREVDTFMKIAogZXh0ZXJuIGNvbnN0IGNoYXIJKl9jdHlwZV87Ci1leHRlcm4gY29uc3Qgc2hvcnQJKl90b2xvd2VyX3RhYl87Ci1leHRlcm4gY29uc3Qgc2hvcnQJKl90b3VwcGVyX3RhYl87Ci0KLS8qIGV4dGVybiBfX2lubGluZSBpcyBhIEdOVSBDIGV4dGVuc2lvbiAqLwotI2lmZGVmIF9fR05VQ19fCi0jICBpZiBkZWZpbmVkKF9fR05VQ19TVERDX0lOTElORV9fKQotI2RlZmluZQlfX0NUWVBFX0lOTElORQlleHRlcm4gX19pbmxpbmUgX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18pKQotIyAgZWxzZQotI2RlZmluZQlfX0NUWVBFX0lOTElORQlleHRlcm4gX19pbmxpbmUKLSMgIGVuZGlmCi0jZWxzZQotI2RlZmluZQlfX0NUWVBFX0lOTElORQlzdGF0aWMgX19pbmxpbmUKLSNlbmRpZgogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfQU5TSV9MSUJSQVJZKSB8fCBkZWZpbmVkKGxpbnQpCiBpbnQJaXNhbG51bShpbnQpOwpAQCAtODMsNiArNzMsMjEgQEAKIGludAl0b2xvd2VyKGludCk7CiBpbnQJdG91cHBlcihpbnQpOwogCitpbnQgaXNhbG51bV9sKGludCwgbG9jYWxlX3QpOworaW50IGlzYWxwaGFfbChpbnQsIGxvY2FsZV90KTsKK2ludCBpc2JsYW5rX2woaW50LCBsb2NhbGVfdCk7CitpbnQgaXNjbnRybF9sKGludCwgbG9jYWxlX3QpOworaW50IGlzZGlnaXRfbChpbnQsIGxvY2FsZV90KTsKK2ludCBpc2dyYXBoX2woaW50LCBsb2NhbGVfdCk7CitpbnQgaXNsb3dlcl9sKGludCwgbG9jYWxlX3QpOworaW50IGlzcHJpbnRfbChpbnQsIGxvY2FsZV90KTsKK2ludCBpc3B1bmN0X2woaW50LCBsb2NhbGVfdCk7CitpbnQgaXNzcGFjZV9sKGludCwgbG9jYWxlX3QpOworaW50IGlzdXBwZXJfbChpbnQsIGxvY2FsZV90KTsKK2ludCBpc3hkaWdpdF9sKGludCwgbG9jYWxlX3QpOworaW50IHRvbG93ZXJfbChpbnQsIGxvY2FsZV90KTsKK2ludCB0b3VwcGVyX2woaW50LCBsb2NhbGVfdCk7CisKICNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5IHx8IF9fUE9TSVhfVklTSUJMRSA+IDIwMDExMiBcCiAgICAgfHwgX19YUEdfVklTSUJMRSA+IDYwMAogaW50CWlzYmxhbmsoaW50KTsKQEAgLTk3LDExMSArMTAyLDYgQEAKIAogI2VuZGlmIC8qIF9fR05VQ19fIHx8IF9BTlNJX0xJQlJBUlkgfHwgbGludCAqLwogCi0jaWYgZGVmaW5lZChOREVCVUcpCi0KLV9fQ1RZUEVfSU5MSU5FIGludCBpc2FsbnVtKGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfQ1RZUEVfVXxfQ1RZUEVfTHxfQ1RZUEVfTikpKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IGlzYWxwaGEoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9DVFlQRV9VfF9DVFlQRV9MKSkpOwotfQotCi1fX0NUWVBFX0lOTElORSBpbnQgaXNjbnRybChpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfQ1RZUEVfQykpOwotfQotCi1fX0NUWVBFX0lOTElORSBpbnQgaXNkaWdpdChpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfQ1RZUEVfTikpOwotfQotCi1fX0NUWVBFX0lOTElORSBpbnQgaXNncmFwaChpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX0NUWVBFX1B8X0NUWVBFX1V8X0NUWVBFX0x8X0NUWVBFX04pKSk7Ci19Ci0KLV9fQ1RZUEVfSU5MSU5FIGludCBpc2xvd2VyKGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9DVFlQRV9MKSk7Ci19Ci0KLV9fQ1RZUEVfSU5MSU5FIGludCBpc3ByaW50KGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfQ1RZUEVfUHxfQ1RZUEVfVXxfQ1RZUEVfTHxfQ1RZUEVfTnxfQ1RZUEVfQikpKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IGlzcHVuY3QoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0NUWVBFX1ApKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IGlzc3BhY2UoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0NUWVBFX1MpKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IGlzdXBwZXIoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0NUWVBFX1UpKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IGlzeGRpZ2l0KGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfQ1RZUEVfTnxfQ1RZUEVfWCkpKTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IHRvbG93ZXIoaW50IGMpCi17Ci0JaWYgKCh1bnNpZ25lZCBpbnQpYyA+IDI1NSkKLQkJcmV0dXJuIChjKTsKLQlyZXR1cm4gKChfdG9sb3dlcl90YWJfICsgMSlbY10pOwotfQotCi1fX0NUWVBFX0lOTElORSBpbnQgdG91cHBlcihpbnQgYykKLXsKLQlpZiAoKHVuc2lnbmVkIGludCljID4gMjU1KQotCQlyZXR1cm4gKGMpOwotCXJldHVybiAoKF90b3VwcGVyX3RhYl8gKyAxKVtjXSk7Ci19Ci0KLSNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5IHx8IF9fUE9TSVhfVklTSUJMRSA+IDIwMDExMiBcCi0gICAgfHwgX19YUEdfVklTSUJMRSA+IDYwMAotX19DVFlQRV9JTkxJTkUgaW50IGlzYmxhbmsoaW50IGMpCi17Ci0JcmV0dXJuIChjID09ICcgJyB8fCBjID09ICdcdCcpOwotfQotI2VuZGlmCi0KLSNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUKLV9fQ1RZUEVfSU5MSU5FIGludCBpc2FzY2lpKGludCBjKQotewotCXJldHVybiAoKHVuc2lnbmVkIGludCljIDw9IDAxNzcpOwotfQotCi1fX0NUWVBFX0lOTElORSBpbnQgdG9hc2NpaShpbnQgYykKLXsKLQlyZXR1cm4gKGMgJiAwMTc3KTsKLX0KLQotX19DVFlQRV9JTkxJTkUgaW50IF90b2xvd2VyKGludCBjKQotewotCXJldHVybiAoYyAtICdBJyArICdhJyk7Ci19Ci0KLV9fQ1RZUEVfSU5MSU5FIGludCBfdG91cHBlcihpbnQgYykKLXsKLQlyZXR1cm4gKGMgLSAnYScgKyAnQScpOwotfQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRSAqLwotCi0jZW5kaWYgLyogTkRFQlVHICovCi0KIF9fRU5EX0RFQ0xTCiAKLSN1bmRlZiBfX0NUWVBFX0lOTElORQotCiAjZW5kaWYgLyogIV9DVFlQRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2RpcmVudC5oIGIvbGliYy9pbmNsdWRlL2RpcmVudC5oCmluZGV4IDEyOWNkZmEuLmE4NDlhNjEgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9kaXJlbnQuaAorKysgYi9saWJjL2luY2x1ZGUvZGlyZW50LmgKQEAgLTQ2LDI4ICs0NiwzNSBAQAogI2RlZmluZSBEVF9XSFQgMTQKICNlbmRpZgogCi1zdHJ1Y3QgZGlyZW50IHsKLSAgdWludDY0X3QgICAgICAgICBkX2lubzsKLSAgaW50NjRfdCAgICAgICAgICBkX29mZjsKLSAgdW5zaWduZWQgc2hvcnQgICBkX3JlY2xlbjsKLSAgdW5zaWduZWQgY2hhciAgICBkX3R5cGU7Ci0gIGNoYXIgICAgICAgICAgICAgZF9uYW1lWzI1Nl07Ci19OworI2RlZmluZSBfX0RJUkVOVDY0X0JPRFkgXAorICAgIHVpbnQ2NF90ICAgICAgICAgZF9pbm87IFwKKyAgICBpbnQ2NF90ICAgICAgICAgIGRfb2ZmOyBcCisgICAgdW5zaWduZWQgc2hvcnQgICBkX3JlY2xlbjsgXAorICAgIHVuc2lnbmVkIGNoYXIgICAgZF90eXBlOyBcCisgICAgY2hhciAgICAgICAgICAgICBkX25hbWVbMjU2XTsgXAorCitzdHJ1Y3QgZGlyZW50IHsgX19ESVJFTlQ2NF9CT0RZIH07CitzdHJ1Y3QgZGlyZW50NjQgeyBfX0RJUkVOVDY0X0JPRFkgfTsKKworI3VuZGVmIF9fRElSRU5UNjRfQk9EWQorCiAjZGVmaW5lIGRfZmlsZW5vIGRfaW5vCi0jZGVmaW5lIGRpcmVudDY0IGRpcmVudAogCiB0eXBlZGVmIHN0cnVjdCBESVIgRElSOwogCiBleHRlcm4gRElSKiBvcGVuZGlyKGNvbnN0IGNoYXIqKTsKIGV4dGVybiBESVIqIGZkb3BlbmRpcihpbnQpOwogZXh0ZXJuIHN0cnVjdCBkaXJlbnQqIHJlYWRkaXIoRElSKik7CitleHRlcm4gc3RydWN0IGRpcmVudDY0KiByZWFkZGlyNjQoRElSKik7CiBleHRlcm4gaW50IHJlYWRkaXJfcihESVIqLCBzdHJ1Y3QgZGlyZW50Kiwgc3RydWN0IGRpcmVudCoqKTsKK2V4dGVybiBpbnQgcmVhZGRpcjY0X3IoRElSKiwgc3RydWN0IGRpcmVudDY0Kiwgc3RydWN0IGRpcmVudDY0KiopOwogZXh0ZXJuIGludCBjbG9zZWRpcihESVIqKTsKIGV4dGVybiB2b2lkIHJld2luZGRpcihESVIqKTsKIGV4dGVybiBpbnQgZGlyZmQoRElSKik7CiBleHRlcm4gaW50IGFscGhhc29ydChjb25zdCBzdHJ1Y3QgZGlyZW50KiosIGNvbnN0IHN0cnVjdCBkaXJlbnQqKik7CitleHRlcm4gaW50IGFscGhhc29ydDY0KGNvbnN0IHN0cnVjdCBkaXJlbnQ2NCoqLCBjb25zdCBzdHJ1Y3QgZGlyZW50NjQqKik7CiBleHRlcm4gaW50IHNjYW5kaXIoY29uc3QgY2hhciosIHN0cnVjdCBkaXJlbnQqKiosIGludCAoKikoY29uc3Qgc3RydWN0IGRpcmVudCopLCBpbnQgKCopKGNvbnN0IHN0cnVjdCBkaXJlbnQqKiwgY29uc3Qgc3RydWN0IGRpcmVudCoqKSk7Ci1leHRlcm4gaW50IGdldGRlbnRzKHVuc2lnbmVkIGludCwgc3RydWN0IGRpcmVudCosIHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IHNjYW5kaXI2NChjb25zdCBjaGFyKiwgc3RydWN0IGRpcmVudDY0KioqLCBpbnQgKCopKGNvbnN0IHN0cnVjdCBkaXJlbnQ2NCopLCBpbnQgKCopKGNvbnN0IHN0cnVjdCBkaXJlbnQ2NCoqLCBjb25zdCBzdHJ1Y3QgZGlyZW50NjQqKikpOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZGxmY24uaCBiL2xpYmMvaW5jbHVkZS9kbGZjbi5oCmluZGV4IDdkYWE4ZjcuLjhkZGUwOGMgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9kbGZjbi5oCisrKyBiL2xpYmMvaW5jbHVkZS9kbGZjbi5oCkBAIC01MCwxNSArNTAsMjkgQEAKIGV4dGVybiBpbnQgICAgICAgICAgZGxhZGRyKGNvbnN0IHZvaWQqIGFkZHIsIERsX2luZm8gKmluZm8pOwogCiBlbnVtIHsKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorICBSVExEX05PVyAgPSAyLAorI2Vsc2UKICAgUlRMRF9OT1cgID0gMCwKKyNlbmRpZgogICBSVExEX0xBWlkgPSAxLAogCiAgIFJUTERfTE9DQUwgID0gMCwKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorICBSVExEX0dMT0JBTCA9IDB4MDAxMDAsCisjZWxzZQogICBSVExEX0dMT0JBTCA9IDIsCisjZW5kaWYKKyAgUlRMRF9OT0xPQUQgPSA0LAogfTsKIAorI2lmIGRlZmluZWQgKF9fTFA2NF9fKQorI2RlZmluZSBSVExEX0RFRkFVTFQgICgodm9pZCopIDApCisjZGVmaW5lIFJUTERfTkVYVCAgICAgKCh2b2lkKikgLTFMKQorI2Vsc2UKICNkZWZpbmUgUlRMRF9ERUZBVUxUICAoKHZvaWQqKSAweGZmZmZmZmZmKQogI2RlZmluZSBSVExEX05FWFQgICAgICgodm9pZCopIDB4ZmZmZmZmZmUpCisjZW5kaWYKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2VsZi5oIGIvbGliYy9pbmNsdWRlL2VsZi5oCmluZGV4IDNmMmU0ZjIuLjA5NzViN2EgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9lbGYuaAorKysgYi9saWJjL2luY2x1ZGUvZWxmLmgKQEAgLTI4LDMzICsyOCw1NSBAQAogI2lmbmRlZiBfRUxGX0gKICNkZWZpbmUgX0VMRl9ICiAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYtZW0uaD4KIAotLyogVE9ETzogY2FuIHdlIHN3aXRjaCB0byA8bGludXgvZWxmLmg+IGluc3RlYWQ/IGh0dHA6Ly9iLzEyNDc2MTI2LiAqLwotI2luY2x1ZGUgPHN5cy9leGVjX2VsZi5oPgorI2luY2x1ZGUgPG1hY2hpbmUvZWxmX21hY2hkZXAuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgewotICB1aW50MzJfdCBhX3R5cGU7CisgIF9fdTMyIGFfdHlwZTsKICAgdW5pb24gewotICAgIHVpbnQzMl90IGFfdmFsOworICAgIF9fdTMyIGFfdmFsOwogICB9IGFfdW47CiB9IEVsZjMyX2F1eHZfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICB1aW50NjRfdCBhX3R5cGU7CisgIF9fdTY0IGFfdHlwZTsKICAgdW5pb24gewotICAgIHVpbnQ2NF90IGFfdmFsOworICAgIF9fdTY0IGFfdmFsOwogICB9IGFfdW47CiB9IEVsZjY0X2F1eHZfdDsKIAotI2lmZGVmIF9fTFA2NF9fCi0jICBkZWZpbmUgRWxmX2F1eHZfdCBFbGY2NF9hdXh2X3QKLSNlbHNlCi0jICBkZWZpbmUgRWxmX2F1eHZfdCBFbGYzMl9hdXh2X3QKLSNlbmRpZgorI2RlZmluZSBERl9PUklHSU4gICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgREZfU1lNQk9MSUMgICAweDAwMDAwMDAyCisjZGVmaW5lIERGX1RFWFRSRUwgICAgMHgwMDAwMDAwNAorI2RlZmluZSBERl9CSU5EX05PVyAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgREZfU1RBVElDX1RMUyAweDAwMDAwMDEwCiAKLS8qIDxzeXMvZXhlY19lbGYuaD4gZG9lc24ndCBjb250YWluIGFueSBOVF8gY29uc3RhbnRzLiBhYXJjaDY0IHN0cmFjZSBuZWVkcyB0aGlzIG9uZS4gKi8KLSNkZWZpbmUgTlRfUFJTVEFUVVMgMQorI2RlZmluZSBEVF9CSU5EX05PVyAyNAorI2RlZmluZSBEVF9JTklUX0FSUkFZIDI1CisjZGVmaW5lIERUX0ZJTklfQVJSQVkgMjYKKyNkZWZpbmUgRFRfSU5JVF9BUlJBWVNaIDI3CisjZGVmaW5lIERUX0ZJTklfQVJSQVlTWiAyOAorI2RlZmluZSBEVF9SVU5QQVRIIDI5CisjZGVmaW5lIERUX0ZMQUdTIDMwCisvKiBnbGliYyBhbmQgQlNEIGRpc2FncmVlIGZvciBEVF9FTkNPRElORzsgZ2xpYmMgbG9va3Mgd3JvbmcuICovCisjZGVmaW5lIERUX1BSRUlOSVRfQVJSQVkgMzIKKyNkZWZpbmUgRFRfUFJFSU5JVF9BUlJBWVNaIDMzCisKKyNkZWZpbmUgRUxGT1NBQklfU1lTViAwIC8qIFN5bm9ueW0gZm9yIEVMRk9TQUJJX05PTkUgdXNlZCBieSB2YWxncmluZC4gKi8KKworI2RlZmluZSBQVF9HTlVfUkVMUk8gMHg2NDc0ZTU1MgorCisjZGVmaW5lIFNUQl9MT09TICAgMTAKKyNkZWZpbmUgU1RCX0hJT1MgICAxMgorI2RlZmluZSBTVEJfTE9QUk9DIDEzCisjZGVmaW5lIFNUQl9ISVBST0MgMTUKKworI2RlZmluZSBTVFRfTE9PUyAgIDEwCisjZGVmaW5lIFNUVF9ISU9TICAgMTIKKyNkZWZpbmUgU1RUX0xPUFJPQyAxMworI2RlZmluZSBTVFRfSElQUk9DIDE1CiAKICNlbmRpZiAvKiBfRUxGX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9lcnIuaCBiL2xpYmMvaW5jbHVkZS9lcnIuaAppbmRleCBmMjRkYTYxLi5jYTYyYzllIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvZXJyLmgKKysrIGIvbGliYy9pbmNsdWRlL2Vyci5oCkBAIC0zMyw1NyArMzMsMjUgQEAKICAqLwogCiAjaWZuZGVmIF9FUlJfSF8KLSNkZWZpbmUJX0VSUl9IXworI2RlZmluZSBfRVJSX0hfCiAKLS8qCi0gKiBEb24ndCB1c2UgdmFfbGlzdCBpbiB0aGUgZXJyL3dhcm4gcHJvdG90eXBlcy4gICBWYV9saXN0IGlzIHR5cGVkZWYnZCBpbiB0d28KLSAqIHBsYWNlcyAoPG1hY2hpbmUvdmFyYXJncy5oPiBhbmQgPG1hY2hpbmUvc3RkYXJnLmg+KSwgc28gaWYgd2UgaW5jbHVkZSBvbmUKLSAqIG9mIHRoZW0gaGVyZSB3ZSBtYXkgY29sbGlkZSB3aXRoIHRoZSB1dGlsaXR5J3MgaW5jbHVkZXMuICBJdCdzIHVucmVhc29uYWJsZQotICogZm9yIHV0aWxpdGllcyB0byBoYXZlIHRvIGluY2x1ZGUgb25lIG9mIHRoZW0gdG8gaW5jbHVkZSBlcnIuaCwgc28gd2UgZ2V0Ci0gKiBfX3ZhX2xpc3QgZnJvbSA8bWFjaGluZS9fdHlwZXMuaD4gYW5kIHVzZSBpdC4KLSAqLwogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvX3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKIF9fQkVHSU5fREVDTFMKIAotX19ub3JldHVybiB2b2lkCWVycihpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKQotCQkJX19wcmludGZsaWtlKDIsIDMpOwotX19ub3JldHVybiB2b2lkCXZlcnIoaW50LCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKLQkJCV9fcHJpbnRmbGlrZSgyLCAwKTsKLV9fbm9yZXR1cm4gdm9pZAllcnJ4KGludCwgY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX3ByaW50Zmxpa2UoMiwgMyk7Ci1fX25vcmV0dXJuIHZvaWQJdmVycngoaW50LCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKLQkJCV9fcHJpbnRmbGlrZSgyLCAwKTsKLXZvaWQJCXdhcm4oY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX3ByaW50Zmxpa2UoMSwgMik7Ci12b2lkCQl2d2Fybihjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKLQkJCV9fcHJpbnRmbGlrZSgxLCAwKTsKLXZvaWQJCXdhcm54KGNvbnN0IGNoYXIgKiwgLi4uKQotCQkJX19wcmludGZsaWtlKDEsIDIpOwotdm9pZAkJdndhcm54KGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQkJX19wcmludGZsaWtlKDEsIDApOworLyogcHJpbnRmJ3MgZm9ybWF0IHN0cmluZyBpc24ndCBudWxsYWJsZTsgdGhlIGVyciBmYW1pbHkncyBvbmUgaXMsCisgKiBzbyB3ZSBjYW4ndCB1c2UgX19lcnJsaWtlIGhlcmUuICovCisjZGVmaW5lIF9fZXJybGlrZSh4LCB5KSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKHByaW50ZiwgeCwgeSkpKQogCi0vKgotICogVGhlIF8qIHZlcnNpb25zIGFyZSBmb3IgdXNlIGluIGxpYnJhcnkgZnVuY3Rpb25zIHNvIHVzZXItZGVmaW5lZAotICogdmVyc2lvbnMgb2YgZXJyKix3YXJuKiBkbyBub3QgZ2V0IHVzZWQuCi0gKi8KLV9fbm9yZXR1cm4gdm9pZAlfZXJyKGludCwgY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX3ByaW50Zmxpa2UoMiwgMyk7Ci1fX25vcmV0dXJuIHZvaWQJX3ZlcnIoaW50LCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKLQkJCV9fcHJpbnRmbGlrZSgyLCAwKTsKLV9fbm9yZXR1cm4gdm9pZAlfZXJyeChpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKQotCQkJX19wcmludGZsaWtlKDIsIDMpOwotX19ub3JldHVybiB2b2lkCV92ZXJyeChpbnQsIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQkJX19wcmludGZsaWtlKDIsIDApOwotdm9pZAkJX3dhcm4oY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX3ByaW50Zmxpa2UoMSwgMik7Ci12b2lkCQlfdndhcm4oY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpCi0JCQlfX3ByaW50Zmxpa2UoMSwgMCk7Ci12b2lkCQlfd2FybngoY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX3ByaW50Zmxpa2UoMSwgMik7Ci12b2lkCQlfdndhcm54KGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQkJX19wcmludGZsaWtlKDEsIDApOworX19ub3JldHVybiB2b2lkIGVycihpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKSBfX2Vycmxpa2UoMiwgMyk7CitfX25vcmV0dXJuIHZvaWQgdmVycihpbnQsIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KSBfX2Vycmxpa2UoMiwgMCk7CitfX25vcmV0dXJuIHZvaWQgZXJyeChpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKSBfX2Vycmxpa2UoMiwgMyk7CitfX25vcmV0dXJuIHZvaWQgdmVycngoaW50LCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkgX19lcnJsaWtlKDIsIDApOwordm9pZCB3YXJuKGNvbnN0IGNoYXIgKiwgLi4uKSBfX2Vycmxpa2UoMSwgMik7Cit2b2lkIHZ3YXJuKGNvbnN0IGNoYXIgKiwgX192YV9saXN0KSBfX2Vycmxpa2UoMSwgMCk7Cit2b2lkIHdhcm54KGNvbnN0IGNoYXIgKiwgLi4uKSBfX2Vycmxpa2UoMSwgMik7Cit2b2lkIHZ3YXJueChjb25zdCBjaGFyICosIF9fdmFfbGlzdCkgX19lcnJsaWtlKDEsIDApOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZXJybm8uaCBiL2xpYmMvaW5jbHVkZS9lcnJuby5oCmluZGV4IDJlNWNlNWYuLjFhMzZiN2EgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9lcnJuby5oCisrKyBiL2xpYmMvaW5jbHVkZS9lcnJuby5oCkBAIC00MSw3ICs0MSw3IEBACiAjZW5kaWYKIAogLyogaW50ZXJuYWwgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0aHJlYWQtc3BlY2lmaWMgZXJybm8gKi8KLWV4dGVybiB2b2xhdGlsZSBpbnQqICAgX19lcnJubyh2b2lkKTsKK2V4dGVybiB2b2xhdGlsZSBpbnQqIF9fZXJybm8odm9pZCkgX19wdXJlMjsKIAogLyogYSBtYWNybyBleHBhbmRpbmcgdG8gdGhlIGVycm5vIGwtdmFsdWUgKi8KICNkZWZpbmUgIGVycm5vICAgKCpfX2Vycm5vKCkpCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZmNudGwuaCBiL2xpYmMvaW5jbHVkZS9mY250bC5oCmluZGV4IGY2YTg5ZWYuLjhmODlhZmIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9mY250bC5oCisrKyBiL2xpYmMvaW5jbHVkZS9mY250bC5oCkBAIC0zMywxOSArMzMsNTMgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9mYWR2aXNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4gIC8qIHRoaXMgaXMgbm90IHJlcXVpcmVkLCBidXQgbWFrZXMgY2xpZW50IGNvZGUgbXVjaCBoYXBwaWVyICovCiAKIF9fQkVHSU5fREVDTFMKIAotI2lmbmRlZiBPX0FTWU5DCi0jZGVmaW5lIE9fQVNZTkMgIEZBU1lOQworI2lmZGVmIF9fTFA2NF9fCisvKiBMUDY0IGtlcm5lbHMgZG9uJ3QgaGF2ZSBmbG9jazY0IGJlY2F1c2UgdGhlaXIgZmxvY2sgaXMgNjQtYml0LiAqLworc3RydWN0IGZsb2NrNjQgeworICBzaG9ydCBsX3R5cGU7CisgIHNob3J0IGxfd2hlbmNlOworICBvZmY2NF90IGxfc3RhcnQ7CisgIG9mZjY0X3QgbF9sZW47CisgIHBpZF90IGxfcGlkOworfTsKKyNkZWZpbmUgRl9HRVRMSzY0ICBGX0dFVExLCisjZGVmaW5lIEZfU0VUTEs2NCAgRl9TRVRMSworI2RlZmluZSBGX1NFVExLVzY0IEZfU0VUTEtXCiAjZW5kaWYKIAotZXh0ZXJuIGludCAgb3Blbihjb25zdCBjaGFyKiAgcGF0aCwgaW50ICBtb2RlLCAuLi4pOwotZXh0ZXJuIGludCAgb3BlbmF0KGludCBmZCwgY29uc3QgY2hhciogIHBhdGgsIGludCAgbW9kZSwgLi4uKTsKLWV4dGVybiBpbnQgIHVubGlua2F0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncyk7Ci1leHRlcm4gaW50ICBmY250bChpbnQgICBmZCwgaW50ICAgY29tbWFuZCwgLi4uKTsKLWV4dGVybiBpbnQgIGNyZWF0KGNvbnN0IGNoYXIqICBwYXRoLCBtb2RlX3QgIG1vZGUpOworI2RlZmluZSBPX0FTWU5DIEZBU1lOQworCisjZGVmaW5lIFNQTElDRV9GX01PVkUgMQorI2RlZmluZSBTUExJQ0VfRl9OT05CTE9DSyAyCisjZGVmaW5lIFNQTElDRV9GX01PUkUgNAorI2RlZmluZSBTUExJQ0VfRl9HSUZUIDgKKworI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUgMQorI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUgMgorI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUiA0CisKK2V4dGVybiBpbnQgY3JlYXQoY29uc3QgY2hhciosIG1vZGVfdCk7CitleHRlcm4gaW50IGNyZWF0NjQoY29uc3QgY2hhciosIG1vZGVfdCk7CitleHRlcm4gaW50IGZhbGxvY2F0ZTY0KGludCwgaW50LCBvZmY2NF90LCBvZmY2NF90KTsKK2V4dGVybiBpbnQgZmFsbG9jYXRlKGludCwgaW50LCBvZmZfdCwgb2ZmX3QpOworZXh0ZXJuIGludCBmY250bChpbnQsIGludCwgLi4uKTsKK2V4dGVybiBpbnQgb3BlbmF0KGludCwgY29uc3QgY2hhciosIGludCwgLi4uKTsKK2V4dGVybiBpbnQgb3BlbmF0NjQoaW50LCBjb25zdCBjaGFyKiwgaW50LCAuLi4pOworZXh0ZXJuIGludCBvcGVuKGNvbnN0IGNoYXIqLCBpbnQsIC4uLik7CitleHRlcm4gaW50IG9wZW42NChjb25zdCBjaGFyKiwgaW50LCAuLi4pOworZXh0ZXJuIGludCBwb3NpeF9mYWR2aXNlNjQoaW50LCBvZmY2NF90LCBvZmY2NF90LCBpbnQpOworZXh0ZXJuIGludCBwb3NpeF9mYWR2aXNlKGludCwgb2ZmX3QsIG9mZl90LCBpbnQpOworZXh0ZXJuIGludCBwb3NpeF9mYWxsb2NhdGU2NChpbnQsIG9mZjY0X3QsIG9mZjY0X3QpOworZXh0ZXJuIGludCBwb3NpeF9mYWxsb2NhdGUoaW50LCBvZmZfdCwgb2ZmX3QpOworZXh0ZXJuIHNzaXplX3Qgc3BsaWNlKGludCwgb2ZmNjRfdCosIGludCwgb2ZmNjRfdCosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzc2l6ZV90IHRlZShpbnQsIGludCwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGludCB1bmxpbmthdChpbnQsIGNvbnN0IGNoYXIqLCBpbnQpOworZXh0ZXJuIHNzaXplX3Qgdm1zcGxpY2UoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CiAKICNpZiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9mdHcuaCBiL2xpYmMvaW5jbHVkZS9mdHcuaAppbmRleCAzYmViZWEzLi5hZjUyNGQwIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvZnR3LmgKKysrIGIvbGliYy9pbmNsdWRlL2Z0dy5oCkBAIC01Nyw2ICs1Nyw5IEBACiBpbnQJZnR3KGNvbnN0IGNoYXIgKiwgaW50ICgqKShjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCBzdGF0ICosIGludCksIGludCk7CiBpbnQJbmZ0dyhjb25zdCBjaGFyICosIGludCAoKikoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3Qgc3RhdCAqLCBpbnQsCiAJICAgIHN0cnVjdCBGVFcgKiksIGludCwgaW50KTsKK2ludAlmdHc2NChjb25zdCBjaGFyICosIGludCAoKikoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3Qgc3RhdDY0ICosIGludCksIGludCk7CitpbnQJbmZ0dzY0KGNvbnN0IGNoYXIgKiwgaW50ICgqKShjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCBzdGF0NjQgKiwgaW50LAorCSAgICBzdHJ1Y3QgRlRXICopLCBpbnQsIGludCk7CiBfX0VORF9ERUNMUwogCiAjZW5kaWYJLyogIV9GVFdfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2dycC5oIGIvbGliYy9pbmNsdWRlL2dycC5oCmluZGV4IDg2ZDk5ZjMuLmZjNGQ1MjAgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9ncnAuaAorKysgYi9saWJjL2luY2x1ZGUvZ3JwLmgKQEAgLTQzLDEwICs0Myw2IEBACiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKLSNpZiBfX0JTRF9WSVNJQkxFCi0jZGVmaW5lCV9QQVRIX0dST1VQCQkiL2V0Yy9ncm91cCIKLSNlbmRpZgotCiBzdHJ1Y3QgZ3JvdXAgewogCWNoYXIJKmdyX25hbWU7CQkvKiBncm91cCBuYW1lICovCiAJY2hhcgkqZ3JfcGFzc3dkOwkJLyogZ3JvdXAgcGFzc3dvcmQgKi8KQEAgLTU3LDcgKzUzLDcgQEAKIF9fQkVHSU5fREVDTFMKIHN0cnVjdCBncm91cAkqZ2V0Z3JnaWQoZ2lkX3QpOwogc3RydWN0IGdyb3VwCSpnZXRncm5hbShjb25zdCBjaGFyICopOwotI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19QT1NJWF9WSVNJQkxFID49IDIwMDExMiB8fCBfX1hQR19WSVNJQkxFCisjaWYgX19QT1NJWF9WSVNJQkxFID49IDIwMDExMiB8fCBfX1hQR19WSVNJQkxFCiBzdHJ1Y3QgZ3JvdXAJKmdldGdyZW50KHZvaWQpOwogdm9pZAkJIHNldGdyZW50KHZvaWQpOwogdm9pZAkJIGVuZGdyZW50KHZvaWQpOwpAQCAtNjYsMTEgKzYyLDYgQEAKIGludAkJIGdldGdybmFtX3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgZ3JvdXAgKiwgY2hhciAqLAogCQkgICAgc2l6ZV90LCBzdHJ1Y3QgZ3JvdXAgKiopOwogI2VuZGlmCi0jaWYgX19CU0RfVklTSUJMRQotdm9pZAkJIHNldGdyZmlsZShjb25zdCBjaGFyICopOwotaW50CQkgc2V0Z3JvdXBlbnQoaW50KTsKLWNoYXIJCSpncm91cF9mcm9tX2dpZChnaWRfdCwgaW50KTsKLSNlbmRpZgogCiBpbnQgICBnZXRncm91cGxpc3QgKGNvbnN0IGNoYXIgKnVzZXIsIGdpZF90IGdyb3VwLAogICAgICAgICAgICAgICAgICAgZ2lkX3QgKmdyb3VwcywgaW50ICpuZ3JvdXBzKTsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9pbnR0eXBlcy5oIGIvbGliYy9pbmNsdWRlL2ludHR5cGVzLmgKaW5kZXggMmZkMjQxNS4uODg1M2MwOCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2ludHR5cGVzLmgKKysrIGIvbGliYy9pbmNsdWRlL2ludHR5cGVzLmgKQEAgLTI1NCwxNiArMjU0LDE0IEBACiB9IGltYXhkaXZfdDsKIAogX19CRUdJTl9ERUNMUwotCiBpbnRtYXhfdAlpbWF4YWJzKGludG1heF90KSBfX3B1cmUyOwogaW1heGRpdl90CWltYXhkaXYoaW50bWF4X3QsIGludG1heF90KSBfX3B1cmUyOwotCiBpbnRtYXhfdAlzdHJ0b2ltYXgoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwogdWludG1heF90CXN0cnRvdW1heChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7Ci0KLWludG1heF90CXN0cm50b2ltYXgoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UsIHNpemVfdCBuKTsKLXVpbnRtYXhfdAlzdHJudG91bWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlLCBzaXplX3Qgbik7Ci0KK2ludG1heF90CXdjc3RvaW1heChjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCwKKwkJICAgIHdjaGFyX3QgKiogX19yZXN0cmljdCwgaW50KTsKK3VpbnRtYXhfdAl3Y3N0b3VtYXgoY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QsCisJCSAgICB3Y2hhcl90ICoqIF9fcmVzdHJpY3QsIGludCk7CiBfX0VORF9ERUNMUwogCiAjZW5kaWYgLyogX0lOVFRZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbGliZ2VuLmggYi9saWJjL2luY2x1ZGUvbGliZ2VuLmgKaW5kZXggYzVmYzc2YS4uOWRjZWM3NSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2xpYmdlbi5oCisrKyBiL2xpYmMvaW5jbHVkZS9saWJnZW4uaApAQCAtMzMsMjQgKzMzLDE1IEBACiAKIF9fQkVHSU5fREVDTFMKIAotLyogb3VyIHZlcnNpb24gb2YgZGlybmFtZS9iYXNlbmFtZSBkb24ndCBtb2RpZnkgdGhlIGlucHV0IHBhdGggKi8KLWV4dGVybiBjaGFyKiAgZGlybmFtZSAoY29uc3QgY2hhciogIHBhdGgpOwotZXh0ZXJuIGNoYXIqICBiYXNlbmFtZShjb25zdCBjaGFyKiAgcGF0aCk7CisvKiBPbiBBbmRyb2lkIHRoZXNlIGRvbid0IG1vZGlmeSB0aGVpciBpbnB1dCwgYW5kIHVzZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBmb3IgdGhlaXIgcmVzdWx0cy4gKi8KK2V4dGVybiBjaGFyKiBiYXNlbmFtZShjb25zdCBjaGFyKik7CitleHRlcm4gY2hhciogZGlybmFtZShjb25zdCBjaGFyKik7CiAKLS8qIHNwZWNpYWwgdGhyZWFkLXNhZmUgQmlvbmljIHZlcnNpb25zCi0gKgotICogaWYgJ2J1ZmZlcicgaXMgTlVMTCwgJ2J1ZmZsZW4nIGlzIGlnbm9yZWQgYW5kIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBpcyByZXR1cm5lZAotICogb3RoZXJ3aXNlLCBwbGFjZSByZXN1bHQgaW4gJ2J1ZmZlcicKLSAqCi0gKiBhdCBtb3N0IGJ1ZmZsZW4tMSBjaGFyYWN0ZXJzIHdyaXR0ZW4sIHBsdXMgYSB0ZXJtaW5hdGluZyB6ZXJvCi0gKgotICogcmV0dXJuIGxlbmd0aCBvZiByZXN1bHQsIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IsIHdpdGggZXJybm8gc2V0IHRvOgotICoKLSAqICAgIEVSQU5HRTogICAgICAgIGJ1ZmZlciBpcyB0b28gc2hvcnQKLSAqICAgIEVOQU1FVE9PTE9ORzogIHRoZSByZXN1bHQgaXMgdG9vIGxvbmcgZm9yIGEgdmFsaWQgcGF0aAotICovCi1leHRlcm4gaW50ICAgIGRpcm5hbWVfcihjb25zdCBjaGFyKiAgcGF0aCwgY2hhciogIGJ1ZmZlciwgc2l6ZV90ICBidWZmbGVuKTsKLWV4dGVybiBpbnQgICAgYmFzZW5hbWVfcihjb25zdCBjaGFyKiAgcGF0aCwgY2hhciogIGJ1ZmZlciwgc2l6ZV90ICBidWZmbGVuKTsKKyNpZiAhZGVmaW5lZChfX0xQNjRfXykKKy8qIFRoZXNlIG5vbi1zdGFuZGFyZCBmdW5jdGlvbnMgYXJlIG5vdCBuZWVkZWQgb24gQW5kcm9pZDsgYmFzZW5hbWUgYW5kIGRpcm5hbWUgdXNlIHRocmVhZC1sb2NhbCBzdG9yYWdlLiAqLworZXh0ZXJuIGludCBkaXJuYW1lX3IoY29uc3QgY2hhciosIGNoYXIqLCBzaXplX3QpOworZXh0ZXJuIGludCBiYXNlbmFtZV9yKGNvbnN0IGNoYXIqLCBjaGFyKiwgc2l6ZV90KTsKKyNlbmRpZgogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbGltaXRzLmggYi9saWJjL2luY2x1ZGUvbGltaXRzLmgKaW5kZXggYjlkNDM1NC4uZmIwOTY1NyAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2xpbWl0cy5oCisrKyBiL2xpYmMvaW5jbHVkZS9saW1pdHMuaApAQCAtMTA1LDkgKzEwNSwyNCBAQAogI2RlZmluZSBVTE9OR19MT05HX01BWCAgVUxMT05HX01BWAogI2VuZGlmCiAKKy8qIEJTRCBjb21wYXRpYmlsaXR5IGRlZmluaXRpb25zLiAqLworI2lmIF9fQlNEX1ZJU0lCTEUKKyNkZWZpbmUgU0laRV9UX01BWCBVTE9OR19NQVgKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisKKyNkZWZpbmUgU1NJWkVfTUFYIExPTkdfTUFYCisKKyNkZWZpbmUgTUJfTEVOX01BWCA0CisKKy8qIE5ldyBjb2RlIHNob3VsZCB1c2Ugc3lzY29uZihfU0NfUEFHRV9TSVpFKSBpbnN0ZWFkLiAqLworI2lmbmRlZiBQQUdFX1NJWkUKKyNkZWZpbmUgUEFHRV9TSVpFIDQwOTYKKyNlbmRpZgogI2lmbmRlZiBQQUdFU0laRQotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjZGVmaW5lICBQQUdFU0laRSAgUEFHRV9TSVpFCiAjZW5kaWYKIAorLyogZ2xpYmMncyBQQUdFX01BU0sgaXMgdGhlIGJpdHdpc2UgbmVnYXRpb24gb2YgQlNEJ3MhIFRPRE86IHJlbW92ZT8gKi8KKyNkZWZpbmUgUEFHRV9NQVNLICh+KFBBR0VfU0laRSAtIDEpKQorCiAjZW5kaWYgLyogIV9MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9saW5rLmggYi9saWJjL2luY2x1ZGUvbGluay5oCmluZGV4IDM0MWZiZjEuLmNiOGUxMzkgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9saW5rLmgKKysrIGIvbGliYy9pbmNsdWRlL2xpbmsuaApAQCAtMzMsNyArMzMsMTEgQEAKIAogX19CRUdJTl9ERUNMUwogCi0jZGVmaW5lIEVsZlcodHlwZSkgRWxmXyMjdHlwZQorI2lmIF9fTFA2NF9fCisjZGVmaW5lIEVsZlcodHlwZSkgRWxmNjRfICMjIHR5cGUKKyNlbHNlCisjZGVmaW5lIEVsZlcodHlwZSkgRWxmMzJfICMjIHR5cGUKKyNlbmRpZgogCiBzdHJ1Y3QgZGxfcGhkcl9pbmZvIHsKICAgRWxmVyhBZGRyKSBkbHBpX2FkZHI7CkBAIC00MiwxMyArNDYsMzUgQEAKICAgRWxmVyhIYWxmKSBkbHBpX3BobnVtOwogfTsKIAotaW50IGRsX2l0ZXJhdGVfcGhkcihpbnQgKCpjYikoc3RydWN0IGRsX3BoZHJfaW5mbyosIHNpemVfdCwgdm9pZCopLCB2b2lkKik7CitpbnQgZGxfaXRlcmF0ZV9waGRyKGludCAoKikoc3RydWN0IGRsX3BoZHJfaW5mbyosIHNpemVfdCwgdm9pZCopLCB2b2lkKik7CiAKICNpZmRlZiBfX2FybV9fCiB0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50KiBfVW53aW5kX1B0cjsKLV9VbndpbmRfUHRyIGRsX3Vud2luZF9maW5kX2V4aWR4KF9VbndpbmRfUHRyIHBjLCBpbnQqIHBjb3VudCk7CitfVW53aW5kX1B0ciBkbF91bndpbmRfZmluZF9leGlkeChfVW53aW5kX1B0ciwgaW50Kik7CiAjZW5kaWYKIAorLyogVXNlZCBieSB0aGUgZHluYW1pYyBsaW5rZXIgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGVidWdnZXIuICovCitzdHJ1Y3QgbGlua19tYXAgeworICBFbGZXKEFkZHIpIGxfYWRkcjsKKyAgY2hhciogbF9uYW1lOworICBFbGZXKER5bikqIGxfbGQ7CisgIHN0cnVjdCBsaW5rX21hcCogbF9uZXh0OworICBzdHJ1Y3QgbGlua19tYXAqIGxfcHJldjsKK307CisKKy8qIFVzZWQgYnkgdGhlIGR5bmFtaWMgbGlua2VyIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRlYnVnZ2VyLiAqLworc3RydWN0IHJfZGVidWcgeworICBpbnQzMl90IHJfdmVyc2lvbjsKKyAgc3RydWN0IGxpbmtfbWFwKiByX21hcDsKKyAgRWxmVyhBZGRyKSByX2JyazsKKyAgZW51bSB7CisgICAgUlRfQ09OU0lTVEVOVCwKKyAgICBSVF9BREQsCisgICAgUlRfREVMRVRFCisgIH0gcl9zdGF0ZTsKKyAgRWxmVyhBZGRyKSByX2xkYmFzZTsKK307CisKIF9fRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiBfTElOS19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2xvY2FsZS5oIGIvbGliYy9pbmNsdWRlL2xvY2FsZS5oCmluZGV4IDY1YjVjN2QuLjdmZDhjMmMgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9sb2NhbGUuaAorKysgYi9saWJjL2luY2x1ZGUvbG9jYWxlLmgKQEAgLTI5LDMxICsyOSw3OCBAQAogI2RlZmluZSBfTE9DQUxFX0hfCiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDx4bG9jYWxlLmg+CiAKIF9fQkVHSU5fREVDTFMKIAotZW51bSB7Ci0gICAgTENfQ1RZUEUgICAgID0gMCwKLSAgICBMQ19OVU1FUklDICAgPSAxLAotICAgIExDX1RJTUUgICAgICA9IDIsCi0gICAgTENfQ09MTEFURSAgID0gMywKLSAgICBMQ19NT05FVEFSWSAgPSA0LAotICAgIExDX01FU1NBR0VTICA9IDUsCi0gICAgTENfQUxMICAgICAgID0gNiwKLSAgICBMQ19QQVBFUiAgICAgPSA3LAotICAgIExDX05BTUUgICAgICA9IDgsCi0gICAgTENfQUREUkVTUyAgID0gOSwKKyNkZWZpbmUgTENfQ1RZUEUgICAgICAgICAgIDAKKyNkZWZpbmUgTENfTlVNRVJJQyAgICAgICAgIDEKKyNkZWZpbmUgTENfVElNRSAgICAgICAgICAgIDIKKyNkZWZpbmUgTENfQ09MTEFURSAgICAgICAgIDMKKyNkZWZpbmUgTENfTU9ORVRBUlkgICAgICAgIDQKKyNkZWZpbmUgTENfTUVTU0FHRVMgICAgICAgIDUKKyNkZWZpbmUgTENfQUxMICAgICAgICAgICAgIDYKKyNkZWZpbmUgTENfUEFQRVIgICAgICAgICAgIDcKKyNkZWZpbmUgTENfTkFNRSAgICAgICAgICAgIDgKKyNkZWZpbmUgTENfQUREUkVTUyAgICAgICAgIDkKKyNkZWZpbmUgTENfVEVMRVBIT05FICAgICAgMTAKKyNkZWZpbmUgTENfTUVBU1VSRU1FTlQgICAgMTEKKyNkZWZpbmUgTENfSURFTlRJRklDQVRJT04gMTIKIAotICAgIExDX1RFTEVQSE9ORSAgICAgID0gMTAsCi0gICAgTENfTUVBU1VSRU1FTlQgICAgPSAxMSwKLSAgICBMQ19JREVOVElGSUNBVElPTiA9IDEyCisjZGVmaW5lIExDX0NUWVBFX01BU0sgICAgICAgICAgKDEgPDwgTENfQ1RZUEUpCisjZGVmaW5lIExDX05VTUVSSUNfTUFTSyAgICAgICAgKDEgPDwgTENfTlVNRVJJQykKKyNkZWZpbmUgTENfVElNRV9NQVNLICAgICAgICAgICAoMSA8PCBMQ19USU1FKQorI2RlZmluZSBMQ19DT0xMQVRFX01BU0sgICAgICAgICgxIDw8IExDX0NPTExBVEUpCisjZGVmaW5lIExDX01PTkVUQVJZX01BU0sgICAgICAgKDEgPDwgTENfTU9ORVRBUlkpCisjZGVmaW5lIExDX01FU1NBR0VTX01BU0sgICAgICAgKDEgPDwgTENfTUVTU0FHRVMpCisjZGVmaW5lIExDX1BBUEVSX01BU0sgICAgICAgICAgKDEgPDwgTENfUEFQRVIpCisjZGVmaW5lIExDX05BTUVfTUFTSyAgICAgICAgICAgKDEgPDwgTENfTkFNRSkKKyNkZWZpbmUgTENfQUREUkVTU19NQVNLICAgICAgICAoMSA8PCBMQ19BRERSRVNTKQorI2RlZmluZSBMQ19URUxFUEhPTkVfTUFTSyAgICAgICgxIDw8IExDX1RFTEVQSE9ORSkKKyNkZWZpbmUgTENfTUVBU1VSRU1FTlRfTUFTSyAgICAoMSA8PCBMQ19NRUFTVVJFTUVOVCkKKyNkZWZpbmUgTENfSURFTlRJRklDQVRJT05fTUFTSyAoMSA8PCBMQ19JREVOVElGSUNBVElPTikKKworI2RlZmluZSBMQ19BTExfTUFTSyAoTENfQ1RZUEVfTUFTSyB8IExDX05VTUVSSUNfTUFTSyB8IExDX1RJTUVfTUFTSyB8IExDX0NPTExBVEVfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgIExDX01PTkVUQVJZX01BU0sgfCBMQ19NRVNTQUdFU19NQVNLIHwgTENfUEFQRVJfTUFTSyB8IExDX05BTUVfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgIExDX0FERFJFU1NfTUFTSyB8IExDX1RFTEVQSE9ORV9NQVNLIHwgTENfTUVBU1VSRU1FTlRfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgIExDX0lERU5USUZJQ0FUSU9OX01BU0spCisKK3N0cnVjdCBsY29udiB7CisgICAgY2hhciogZGVjaW1hbF9wb2ludDsKKyAgICBjaGFyKiB0aG91c2FuZHNfc2VwOworICAgIGNoYXIqIGdyb3VwaW5nOworICAgIGNoYXIqIGludF9jdXJyX3N5bWJvbDsKKyAgICBjaGFyKiBjdXJyZW5jeV9zeW1ib2w7CisgICAgY2hhciogbW9uX2RlY2ltYWxfcG9pbnQ7CisgICAgY2hhciogbW9uX3Rob3VzYW5kc19zZXA7CisgICAgY2hhciogbW9uX2dyb3VwaW5nOworICAgIGNoYXIqIHBvc2l0aXZlX3NpZ247CisgICAgY2hhciogbmVnYXRpdmVfc2lnbjsKKyAgICBjaGFyICBpbnRfZnJhY19kaWdpdHM7CisgICAgY2hhciAgZnJhY19kaWdpdHM7CisgICAgY2hhciAgcF9jc19wcmVjZWRlczsKKyAgICBjaGFyICBwX3NlcF9ieV9zcGFjZTsKKyAgICBjaGFyICBuX2NzX3ByZWNlZGVzOworICAgIGNoYXIgIG5fc2VwX2J5X3NwYWNlOworICAgIGNoYXIgIHBfc2lnbl9wb3NuOworICAgIGNoYXIgIG5fc2lnbl9wb3NuOworICAgIGNoYXIgIGludF9wX2NzX3ByZWNlZGVzOworICAgIGNoYXIgIGludF9wX3NlcF9ieV9zcGFjZTsKKyAgICBjaGFyICBpbnRfbl9jc19wcmVjZWRlczsKKyAgICBjaGFyICBpbnRfbl9zZXBfYnlfc3BhY2U7CisgICAgY2hhciAgaW50X3Bfc2lnbl9wb3NuOworICAgIGNoYXIgIGludF9uX3NpZ25fcG9zbjsKIH07CiAKLWV4dGVybiBjaGFyICpzZXRsb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpOworc3RydWN0IGxjb252KiBsb2NhbGVjb252KHZvaWQpOwogCi0vKiBNYWtlIGxpYnN0ZGMrKy12MyBoYXBweS4gICovCi1zdHJ1Y3QgbGNvbnYgeyB9Owotc3RydWN0IGxjb252ICpsb2NhbGVjb252KHZvaWQpOworbG9jYWxlX3QgZHVwbG9jYWxlKGxvY2FsZV90KTsKK3ZvaWQgZnJlZWxvY2FsZShsb2NhbGVfdCk7Citsb2NhbGVfdCBuZXdsb2NhbGUoaW50LCBjb25zdCBjaGFyKiwgbG9jYWxlX3QpOworY2hhciogc2V0bG9jYWxlKGludCwgY29uc3QgY2hhciopOworbG9jYWxlX3QgdXNlbG9jYWxlKGxvY2FsZV90KTsKKworI2RlZmluZSBMQ19HTE9CQUxfTE9DQUxFICgobG9jYWxlX3QpIC0xTCkKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbGliYy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1Nzk5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbWFjaGluZS9pZWVlLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCSRPcGVuQlNEOiBpZWVlLmgsdiAxLjQgMjAxMS8xMS8wOCAxNzowNjo1MSBkZXJhYWR0IEV4cCAkCSovCisvKgkkTmV0QlNEOiBpZWVlLmgsdiAxLjIgMjAwMS8wMi8yMSAxNzo0Mzo1MCBiamgyMSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgYnkgdGhlIENvbXB1dGVyIFN5c3RlbXMgRW5naW5lZXJpbmcgZ3JvdXAKKyAqIGF0IExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgdW5kZXIgREFSUEEgY29udHJhY3QgQkcgOTEtNjYgYW5kCisgKiBjb250cmlidXRlZCB0byBCZXJrZWxleS4KKyAqCisgKiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaWVlZS5oCTguMSAoQmVya2VsZXkpIDYvMTEvOTMKKyAqLworCisjaWZuZGVmIF9NQUNISU5FX0lFRUVfSF8KKyNkZWZpbmUgX01BQ0hJTkVfSUVFRV9IXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKworI2RlZmluZSBTTkdfRVhQQklUUwk4CisjZGVmaW5lIFNOR19GUkFDQklUUwkyMworCisjZGVmaW5lIFNOR19FWFBfSU5GTkFOCTI1NQorI2RlZmluZSBTTkdfRVhQX0JJQVMJMTI3CisKK3N0cnVjdCBpZWVlX3NpbmdsZSB7CisgIHVuc2lnbmVkIHNuZ19mcmFjOjIzOworICB1bnNpZ25lZCBzbmdfZXhwOjg7CisgIHVuc2lnbmVkIHNuZ19zaWduOjE7Cit9OworCisjZGVmaW5lIERCTF9FWFBCSVRTCTExCisjZGVmaW5lIERCTF9GUkFDSEJJVFMJMjAKKyNkZWZpbmUgREJMX0ZSQUNMQklUUwkzMgorI2RlZmluZSBEQkxfRlJBQ0JJVFMJNTIKKworI2RlZmluZSBEQkxfRVhQX0lORk5BTgkyMDQ3CisjZGVmaW5lIERCTF9FWFBfQklBUwkxMDIzCisKK3N0cnVjdCBpZWVlX2RvdWJsZSB7CisgIHVuc2lnbmVkIGRibF9mcmFjbDsKKyAgdW5zaWduZWQgZGJsX2ZyYWNoOjIwOworICB1bnNpZ25lZCBkYmxfZXhwOjExOworICB1bnNpZ25lZCBkYmxfc2lnbjoxOworfTsKKworI2lmIF9fTFA2NF9fCisKKy8qIDY0LWJpdCBBbmRyb2lkIHVzZXMgbGQxMjggbG9uZyBkb3VibGVzLiAqLworCisjZGVmaW5lIEVYVF9FWFBCSVRTCTE1CisjZGVmaW5lIEVYVF9GUkFDSEJJVFMJMTYKKyNkZWZpbmUgRVhUX0ZSQUNITUJJVFMJMzIKKyNkZWZpbmUgRVhUX0ZSQUNMTUJJVFMJMzIKKyNkZWZpbmUgRVhUX0ZSQUNMQklUUwkzMgorI2RlZmluZSBFWFRfRlJBQ0JJVFMJMTEyCisKKyNkZWZpbmUgRVhUX0VYUF9JTkZOQU4JMzI3NjcKKyNkZWZpbmUgRVhUX0VYUF9CSUFTCTE2MzgzCisKKyNkZWZpbmUgRVhUX0lNUExJQ0lUX05CSVQKKworI2RlZmluZSBFWFRfVE9fQVJSQVkzMihwLCBhKSBkbyB7IFwKKyAgKGEpWzBdID0gKHVpbnQzMl90KShwKS0+ZXh0X2ZyYWNsOyBcCisgIChhKVsxXSA9ICh1aW50MzJfdCkocCktPmV4dF9mcmFjbG07IFwKKyAgKGEpWzJdID0gKHVpbnQzMl90KShwKS0+ZXh0X2ZyYWNobTsgXAorICAoYSlbM10gPSAodWludDMyX3QpKHApLT5leHRfZnJhY2g7IFwKK30gd2hpbGUoMCkKKworc3RydWN0IGllZWVfZXh0IHsKKyAgdW5zaWduZWQgZXh0X2ZyYWNsOworICB1bnNpZ25lZCBleHRfZnJhY2xtOworICB1bnNpZ25lZCBleHRfZnJhY2htOworICB1bnNpZ25lZCBleHRfZnJhY2g6MTY7CisgIHVuc2lnbmVkIGV4dF9leHA6MTU7CisgIHVuc2lnbmVkIGV4dF9zaWduOjE7Cit9OworCisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9NQUNISU5FX0lFRUVfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9tYWNoaW5lL3djaGFyX2xpbWl0cy5oIGIvbGliYy9pbmNsdWRlL21hY2hpbmUvd2NoYXJfbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjYmQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9tYWNoaW5lL3djaGFyX2xpbWl0cy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfTUFDSElORV9XQ0hBUl9MSU1JVFNfSF8KKyNkZWZpbmUgX01BQ0hJTkVfV0NIQVJfTElNSVRTX0hfCisKKy8qIEJvdGggR0NDIGFuZCBjbGFuZyBkZWZpbmUgX19XQ0hBUl9NQVhfXy4gKi8KKyNkZWZpbmUgV0NIQVJfTUFYIF9fV0NIQVJfTUFYX18KKworLyogQXMgb2YgMy40LCBjbGFuZyBzdGlsbCBkb2Vzbid0IGRlZmluZSBfX1dDSEFSX01JTl9fLiAqLworI2lmIGRlZmluZWQoX19XQ0hBUl9VTlNJR05FRF9fKQorIyAgZGVmaW5lIFdDSEFSX01JTiBMJ1wwJworI2Vsc2UKKyMgIGRlZmluZSBXQ0hBUl9NSU4gKC0oV0NIQVJfTUFYKSAtIDEpCisjZW5kaWYKKworI2VuZGlmIC8qIF9NQUNISU5FX1dDSEFSX0xJTUlUU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21hbGxvYy5oIGIvbGliYy9pbmNsdWRlL21hbGxvYy5oCmluZGV4IDlhNGUzMjQuLmU2ZWEyNzYgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9tYWxsb2MuaAorKysgYi9saWJjL2luY2x1ZGUvbWFsbG9jLmgKQEAgLTM1LDkgKzM1LDYgQEAKIGV4dGVybiB2b2lkKiBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZV9jb3VudCkgX19tYWxsb2NmdW5jIF9fd3VyIF9fYXR0cmlidXRlX18oKGFsbG9jX3NpemUoMikpKTsKIGV4dGVybiBzaXplX3QgbWFsbG9jX3VzYWJsZV9zaXplKGNvbnN0IHZvaWQqIHApOwogCi1leHRlcm4gdm9pZCogdmFsbG9jKHNpemVfdCBieXRlX2NvdW50KSBfX21hbGxvY2Z1bmMgX193dXIgX19hdHRyaWJ1dGVfXygoYWxsb2Nfc2l6ZSgxKSkpOwotZXh0ZXJuIHZvaWQqIHB2YWxsb2Moc2l6ZV90IGJ5dGVfY291bnQpIF9fbWFsbG9jZnVuYyBfX3d1ciBfX2F0dHJpYnV0ZV9fKChhbGxvY19zaXplKDEpKSk7Ci0KICNpZm5kZWYgU1RSVUNUX01BTExJTkZPX0RFQ0xBUkVECiAjZGVmaW5lIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRCAxCiBzdHJ1Y3QgbWFsbGluZm8gewpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21udGVudC5oIGIvbGliYy9pbmNsdWRlL21udGVudC5oCmluZGV4IDZjYzBiMTguLmRlMjg1ZDAgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9tbnRlbnQuaAorKysgYi9saWJjL2luY2x1ZGUvbW50ZW50LmgKQEAgLTM1LDIzICszNSwyMSBAQAogI2RlZmluZSBNT1VOVEVEIF9QQVRIX01PVU5URUQKICNkZWZpbmUgTU5UVFlQRV9JR05PUkUgImlnbm9yZSIKIAotc3RydWN0IG1udGVudAotewotICAgIGNoYXIqIG1udF9mc25hbWU7Ci0gICAgY2hhciogbW50X2RpcjsKLSAgICBjaGFyKiBtbnRfdHlwZTsKLSAgICBjaGFyKiBtbnRfb3B0czsKLSAgICBpbnQgbW50X2ZyZXE7Ci0gICAgaW50IG1udF9wYXNzbm87CitzdHJ1Y3QgbW50ZW50IHsKKyAgY2hhciogbW50X2ZzbmFtZTsKKyAgY2hhciogbW50X2RpcjsKKyAgY2hhciogbW50X3R5cGU7CisgIGNoYXIqIG1udF9vcHRzOworICBpbnQgbW50X2ZyZXE7CisgIGludCBtbnRfcGFzc25vOwogfTsKIAotCiBfX0JFR0lOX0RFQ0xTCiAKLQotc3RydWN0IG1udGVudCogZ2V0bW50ZW50KEZJTEUqKTsKLUZJTEUqIHNldG1udGVudChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogaW50IGVuZG1udGVudChGSUxFKik7CitzdHJ1Y3QgbW50ZW50KiBnZXRtbnRlbnQoRklMRSopOworc3RydWN0IG1udGVudCogZ2V0bW50ZW50X3IoRklMRSosIHN0cnVjdCBtbnRlbnQqLCBjaGFyKiwgaW50KTsKK0ZJTEUqIHNldG1udGVudChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0ZGIuaCBiL2xpYmMvaW5jbHVkZS9uZXRkYi5oCmluZGV4IDYyYTdhM2MuLjUyN2Q1YzEgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9uZXRkYi5oCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRkYi5oCkBAIC0xOTYsNiArMTk2LDggQEAKICNkZWZpbmUJU0NPUEVfREVMSU1JVEVSCSclJwogCiBfX0JFR0lOX0RFQ0xTCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKKwogLyogQklPTklDLUJFR0lOICovCiAjZGVmaW5lICBoX2Vycm5vICAgKCpfX2dldF9oX2Vycm5vKCkpCiBpbnQqICBfX2dldF9oX2Vycm5vKHZvaWQpOwpAQCAtMjA3LDEzICsyMDksMTEgQEAKIHZvaWQgZW5kc2VydmVudCh2b2lkKTsKIHZvaWQgZnJlZWhvc3RlbnQoc3RydWN0IGhvc3RlbnQgKik7CiBzdHJ1Y3QgaG9zdGVudAkqZ2V0aG9zdGJ5YWRkcihjb25zdCB2b2lkICosIHNvY2tsZW5fdCwgaW50KTsKLXN0cnVjdCBob3N0ZW50CSphbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZShjb25zdCB2b2lkICosIHNvY2tsZW5fdCwgaW50LCBjb25zdCBjaGFyKiwgaW50KTsKIGludCBnZXRob3N0YnlhZGRyX3IoY29uc3Qgdm9pZCAqLCBpbnQsIGludCwgc3RydWN0IGhvc3RlbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBob3N0ZW50ICoqLCBpbnQgKik7CiBzdHJ1Y3QgaG9zdGVudAkqZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICopOwogaW50IGdldGhvc3RieW5hbWVfcihjb25zdCBjaGFyICosIHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgaG9zdGVudCAqKiwgaW50ICopOwogc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieW5hbWUyKGNvbnN0IGNoYXIgKiwgaW50KTsKIGludCBnZXRob3N0YnluYW1lMl9yKGNvbnN0IGNoYXIgKiwgaW50LCBzdHJ1Y3QgaG9zdGVudCAqLCBjaGFyICosIHNpemVfdCwgc3RydWN0IGhvc3RlbnQgKiosIGludCAqKTsKLXN0cnVjdCBob3N0ZW50CSphbmRyb2lkX2dldGhvc3RieW5hbWVmb3JpZmFjZShjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqLCBpbnQpOwogc3RydWN0IGhvc3RlbnQJKmdldGhvc3RlbnQodm9pZCk7CiBpbnQgZ2V0aG9zdGVudF9yKHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgaG9zdGVudCAqKiwgaW50ICopOwogc3RydWN0IGhvc3RlbnQJKmdldGlwbm9kZWJ5YWRkcihjb25zdCB2b2lkICosIHNpemVfdCwgaW50LCBpbnQgKik7CkBAIC0yNDEsMTQgKzI0MSwxMyBAQAogdm9pZCBzZXRuZXRlbnQoaW50KTsKIHZvaWQgc2V0cHJvdG9lbnQoaW50KTsKIGludCBnZXRhZGRyaW5mbyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIHN0cnVjdCBhZGRyaW5mbyAqKik7Ci1pbnQgYW5kcm9pZF9nZXRhZGRyaW5mb2ZvcmlmYWNlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLCBpbnQsIHN0cnVjdCBhZGRyaW5mbyAqKik7CiBpbnQgZ2V0bmFtZWluZm8oY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCwgY2hhciAqLCBzaXplX3QsIGNoYXIgKiwgc2l6ZV90LCBpbnQpOwotaW50IGFuZHJvaWRfZ2V0bmFtZWluZm9mb3JpZmFjZShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90LCBjaGFyICosIHNpemVfdCwgY2hhciAqLCBzaXplX3QsIGludCwgY29uc3QgY2hhciAqLCBpbnQpOwogdm9pZCBmcmVlYWRkcmluZm8oc3RydWN0IGFkZHJpbmZvICopOwogY29uc3QgY2hhcgkqZ2FpX3N0cmVycm9yKGludCk7CiB2b2lkIHNldG5ldGdyZW50KGNvbnN0IGNoYXIgKik7CiB2b2lkIHNldHNlcnZlbnQoaW50KTsKIAorI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKIF9fRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiAhX05FVERCX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbnNzd2l0Y2guaCBiL2xpYmMvaW5jbHVkZS9uc3N3aXRjaC5oCmluZGV4IGQxOWQwNTUuLmFmODg0MzMgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9uc3N3aXRjaC5oCisrKyBiL2xpYmMvaW5jbHVkZS9uc3N3aXRjaC5oCkBAIC0xLDQgKzEsNCBAQAotLyoJJE5ldEJTRDogbnNzd2l0Y2guaCx2IDEuMTggMjAwNS8xMS8yOSAwMzoxMjo1OCBjaHJpc3RvcyBFeHAgJAkqLworLyoJJE5ldEJTRDogbnNzd2l0Y2guaCx2IDEuMjEgMjAxMS8wNy8xNyAyMDo1NDozNCBqb2VyZyBFeHAgJAkqLwogCiAvKi0KICAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMTk5OSwgMjAwNCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KQEAgLTE1LDEzICsxNSw2IEBACiAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAotICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwogICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECkBAIC01NCw3ICs0Nyw3IEBACiAvKgogICogTGF5b3V0IG9mOgogICoJdWludDMyX3QgbnNfc3JjLmZsYWdzCi0gKi8gCisgKi8KIAkvKiBuc3N3aXRjaC5jb25mIHN0YXR1cyBjb2RlcyBhbmQgbnNkaXNwYXRjaCgzKSByZXR1cm4gdmFsdWVzICovCiAjZGVmaW5lCU5TX1NVQ0NFU1MJKDE8PDApCQkvKiBlbnRyeSB3YXMgZm91bmQgKi8KICNkZWZpbmUJTlNfVU5BVkFJTAkoMTw8MSkJCS8qIHNvdXJjZSBub3QgcmVzcG9uZGluZywgb3IgY29ycnVwdCAqLwpAQCAtMTI1LDcgKzExOCw3IEBACiAgKi8KICNkZWZpbmUgTlNfRklMRVNfQ0IoRixDKQl7IE5TU1JDX0ZJTEVTLAlGLAlfX1VOQ09OU1QoQykgfSwKICNkZWZpbmUgTlNfQ09NUEFUX0NCKEYsQykJeyBOU1NSQ19DT01QQVQsCUYsCV9fVU5DT05TVChDKSB9LAotIAorCiAjaWZkZWYgSEVTSU9ECiAjICAgZGVmaW5lIE5TX0ROU19DQihGLEMpCXsgTlNTUkNfRE5TLAlGLAlfX1VOQ09OU1QoQykgfSwKICNlbHNlCkBAIC0xMzcsNiArMTMwLDcgQEAKICNlbHNlCiAjICAgZGVmaW5lIE5TX05JU19DQihGLEMpCiAjZW5kaWYKKyNkZWZpbmUJTlNfTlVMTF9DQgkJeyAuc3JjID0gTlVMTCB9LAogCiAvKgogICogbnNfc3JjIC0gYG5zc3dpdGNoIHNvdXJjZScKQEAgLTIyMSw3ICsyMTUsNyBAQAogCiBfX0JFR0lOX0RFQ0xTCiBpbnQJbnNkaXNwYXRjaCh2b2lkICosIGNvbnN0IG5zX2R0YWIgW10sIGNvbnN0IGNoYXIgKiwKLQkJCWNvbnN0IGNoYXIgKiwgY29uc3QgbnNfc3JjIFtdLCAuLi4pOworCQkJY29uc3QgY2hhciAqLCBjb25zdCBuc19zcmMgW10sIC4uLikgX19MSUJDX0FCSV9QVUJMSUNfXzsKIAogI2lmZGVmIF9OU19QUklWQVRFCiBpbnQJCSBfbnNkYnRhZGRzcmMobnNfZGJ0ICosIGNvbnN0IG5zX3NyYyAqKTsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9wdGhyZWFkLmggYi9saWJjL2luY2x1ZGUvcHRocmVhZC5oCmluZGV4IGM1MzgwYmUuLmMzMjg5MGIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9wdGhyZWFkLmgKKysrIGIvbGliYy9pbmNsdWRlL3B0aHJlYWQuaApAQCAtMzUsMTcgKzM1LDI2IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorICAjZGVmaW5lIF9fUkVTRVJWRURfSU5JVElBTElaRVIgLCB7MH0KKyNlbHNlCisgICNkZWZpbmUgX19SRVNFUlZFRF9JTklUSUFMSVpFUgorI2VuZGlmCisKIHR5cGVkZWYgc3RydWN0IHsKICAgaW50IHZvbGF0aWxlIHZhbHVlOworI2lmZGVmIF9fTFA2NF9fCisgIGNoYXIgX19yZXNlcnZlZFszNl07CisjZW5kaWYKIH0gcHRocmVhZF9tdXRleF90OwogCiAjZGVmaW5lICBfX1BUSFJFQURfTVVURVhfSU5JVF9WQUxVRSAgICAgICAgICAgIDAKICNkZWZpbmUgIF9fUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9WQUxVRSAgMHg0MDAwCiAjZGVmaW5lICBfX1BUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUX1ZBTFVFIDB4ODAwMAogCi0jZGVmaW5lICBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSICAgICAgICAgICAgIHtfX1BUSFJFQURfTVVURVhfSU5JVF9WQUxVRX0KLSNkZWZpbmUgIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSICAge19fUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9WQUxVRX0KLSNkZWZpbmUgIFBUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUSUFMSVpFUiAge19fUFRIUkVBRF9FUlJPUkNIRUNLX01VVEVYX0lOSVRfVkFMVUV9CisjZGVmaW5lICBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSICAgICAgICAgICAgIHtfX1BUSFJFQURfTVVURVhfSU5JVF9WQUxVRSBfX1JFU0VSVkVEX0lOSVRJQUxJWkVSfQorI2RlZmluZSAgUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIgICB7X19QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUX1ZBTFVFIF9fUkVTRVJWRURfSU5JVElBTElaRVJ9CisjZGVmaW5lICBQVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVElBTElaRVIgIHtfX1BUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUX1ZBTFVFIF9fUkVTRVJWRURfSU5JVElBTElaRVJ9CiAKIGVudW0gewogICAgIFBUSFJFQURfTVVURVhfTk9STUFMID0gMCwKQEAgLTYwLDkgKzY5LDEyIEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgaW50IHZvbGF0aWxlIHZhbHVlOworI2lmZGVmIF9fTFA2NF9fCisgIGNoYXIgX19yZXNlcnZlZFs0NF07CisjZW5kaWYKIH0gcHRocmVhZF9jb25kX3Q7CiAKLSNkZWZpbmUgUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSICB7MH0KKyNkZWZpbmUgUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSICB7MCBfX1JFU0VSVkVEX0lOSVRJQUxJWkVSfQogCiB0eXBlZGVmIHN0cnVjdCB7CiAgIHVpbnQzMl90IGZsYWdzOwpAQCAtNzEsMzMgKzgzLDUyIEBACiAgIHNpemVfdCBndWFyZF9zaXplOwogICBpbnQzMl90IHNjaGVkX3BvbGljeTsKICAgaW50MzJfdCBzY2hlZF9wcmlvcml0eTsKKyNpZmRlZiBfX0xQNjRfXworICBjaGFyIF9fcmVzZXJ2ZWRbMTZdOworI2VuZGlmCiB9IHB0aHJlYWRfYXR0cl90OwogCiB0eXBlZGVmIGxvbmcgcHRocmVhZF9tdXRleGF0dHJfdDsKIHR5cGVkZWYgbG9uZyBwdGhyZWFkX2NvbmRhdHRyX3Q7CiAKLXR5cGVkZWYgaW50IHB0aHJlYWRfcndsb2NrYXR0cl90OwordHlwZWRlZiBsb25nIHB0aHJlYWRfcndsb2NrYXR0cl90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIHB0aHJlYWRfbXV0ZXhfdCAgbG9jazsKLSAgcHRocmVhZF9jb25kX3QgICBjb25kOwotICBpbnQgICAgICAgICAgICAgIG51bUxvY2tzOwotICBpbnQgICAgICAgICAgICAgIHdyaXRlclRocmVhZElkOwotICBpbnQgICAgICAgICAgICAgIHBlbmRpbmdSZWFkZXJzOwotICBpbnQgICAgICAgICAgICAgIHBlbmRpbmdXcml0ZXJzOwotICB2b2lkKiAgICAgICAgICAgIHJlc2VydmVkWzRdOyAgLyogZm9yIGZ1dHVyZSBleHRlbnNpYmlsaXR5ICovCisjaWYgIWRlZmluZWQoX19MUDY0X18pCisgIHB0aHJlYWRfbXV0ZXhfdCBfX3VudXNlZF9sb2NrOworICBwdGhyZWFkX2NvbmRfdCBfX3VudXNlZF9jb25kOworI2VuZGlmCisgIHZvbGF0aWxlIGludDMyX3Qgc3RhdGU7IC8vIDA9dW5sb2NrLCAtMT13cml0ZXIgbG9jaywgK249cmVhZGVyIGxvY2sKKyAgdm9sYXRpbGUgaW50MzJfdCB3cml0ZXJfdGhyZWFkX2lkOworICB2b2xhdGlsZSBpbnQzMl90IHBlbmRpbmdfcmVhZGVyczsKKyAgdm9sYXRpbGUgaW50MzJfdCBwZW5kaW5nX3dyaXRlcnM7CisgIGludDMyX3QgYXR0cjsKKyNpZmRlZiBfX0xQNjRfXworICBjaGFyIF9fcmVzZXJ2ZWRbMzZdOworI2Vsc2UKKyAgY2hhciBfX3Jlc2VydmVkWzEyXTsKKyNlbmRpZgorCiB9IHB0aHJlYWRfcndsb2NrX3Q7CiAKLSNkZWZpbmUgUFRIUkVBRF9SV0xPQ0tfSU5JVElBTElaRVIgIHsgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwgUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSLCAwLCAwLCAwLCAwLCB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfSB9CisjaWZkZWYgX19MUDY0X18KKyAgI2RlZmluZSBQVEhSRUFEX1JXTE9DS19JTklUSUFMSVpFUiAgeyAwLCAwLCAwLCAwLCAwLCB7IDAgfSB9CisjZWxzZQorICAjZGVmaW5lIFBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSICB7IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsIFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUiwgMCwgMCwgMCwgMCwgMCwgeyAwIH0gfQorI2VuZGlmCiAKIHR5cGVkZWYgaW50IHB0aHJlYWRfa2V5X3Q7CiB0eXBlZGVmIGxvbmcgcHRocmVhZF90OwogCiB0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX29uY2VfdDsKIAotI2RlZmluZSBQVEhSRUFEX09OQ0VfSU5JVCAgICAwCisjZGVmaW5lIFBUSFJFQURfT05DRV9JTklUIDAKIAorI2lmIGRlZmluZWQoX19MUDY0X18pCisjZGVmaW5lIFBUSFJFQURfU1RBQ0tfTUlOICg0ICogUEFHRV9TSVpFKQorI2Vsc2UKICNkZWZpbmUgUFRIUkVBRF9TVEFDS19NSU4gKDIgKiBQQUdFX1NJWkUpCisjZW5kaWYKIAogI2RlZmluZSBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCAgMHgwMDAwMDAwMQogI2RlZmluZSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSAgMHgwMDAwMDAwMApAQCAtMTI3LDExICsxNTgsMTMgQEAKIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QqLCBpbnQpIF9fbm9ubnVsbCgoMSkpOwogaW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZShwdGhyZWFkX2F0dHJfdCosIGludCkgX19ub25udWxsKCgxKSk7CiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrKHB0aHJlYWRfYXR0cl90Kiwgdm9pZCosIHNpemVfdCkgX19ub25udWxsKCgxKSk7Ci1pbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZShwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHNpemVfdCBzdGFja19zaXplKSBfX25vbm51bGwoKDEpKTsKK2ludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKHB0aHJlYWRfYXR0cl90Kiwgc2l6ZV90IHN0YWNrX3NpemUpIF9fbm9ubnVsbCgoMSkpOwogCiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95KHB0aHJlYWRfY29uZGF0dHJfdCopIF9fbm9ubnVsbCgoMSkpOworaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0Y2xvY2soY29uc3QgcHRocmVhZF9jb25kYXR0cl90KiwgY2xvY2tpZF90KikgX19ub25udWxsKCgxLCAyKSk7CiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCosIGludCopIF9fbm9ubnVsbCgoMSwgMikpOwogaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdChwdGhyZWFkX2NvbmRhdHRyX3QqKSBfX25vbm51bGwoKDEpKTsKK2ludCBwdGhyZWFkX2NvbmRhdHRyX3NldGNsb2NrKHB0aHJlYWRfY29uZGF0dHJfdCosIGNsb2NraWRfdCkgX19ub25udWxsKCgxKSk7CiBpbnQgcHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkKHB0aHJlYWRfY29uZGF0dHJfdCosIGludCkgX19ub25udWxsKCgxKSk7CiAKIGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KHB0aHJlYWRfY29uZF90KikgX19ub25udWxsKCgxKSk7CkBAIC0xNTUsNiArMTg4LDggQEAKIAogdm9pZCogcHRocmVhZF9nZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90KTsKIAorcGlkX3QgcHRocmVhZF9nZXR0aWRfbnAocHRocmVhZF90KTsKKwogaW50IHB0aHJlYWRfam9pbihwdGhyZWFkX3QsIHZvaWQqKik7CiAKIGludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCosIHZvaWQgKCopKHZvaWQqKSkgX19ub25udWxsKCgxKSk7CkBAIC0xNzEsMTAgKzIwNiwxMCBAQAogCiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0ZXhfdCopIF9fbm9ubnVsbCgoMSkpOwogaW50IHB0aHJlYWRfbXV0ZXhfaW5pdChwdGhyZWFkX211dGV4X3QqLCBjb25zdCBwdGhyZWFkX211dGV4YXR0cl90KikgX19ub25udWxsKCgxKSk7Ci1pbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCopIF9fbm9ubnVsbCgoMSkpOwotaW50IHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrKHB0aHJlYWRfbXV0ZXhfdCosIHN0cnVjdCB0aW1lc3BlYyopIF9fbm9ubnVsbCgoMSwgMikpOworaW50IHB0aHJlYWRfbXV0ZXhfbG9jayhwdGhyZWFkX211dGV4X3QqKSAvKiBfX25vbm51bGwoKDEpKSAqLzsKK2ludCBwdGhyZWFkX211dGV4X3RpbWVkbG9jayhwdGhyZWFkX211dGV4X3QqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqKSBfX25vbm51bGwoKDEsIDIpKTsKIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90KikgX19ub25udWxsKCgxKSk7Ci1pbnQgcHRocmVhZF9tdXRleF91bmxvY2socHRocmVhZF9tdXRleF90KikgX19ub25udWxsKCgxKSk7CitpbnQgcHRocmVhZF9tdXRleF91bmxvY2socHRocmVhZF9tdXRleF90KikgLyogX19ub25udWxsKCgxKSkgKi87CiAKIGludCBwdGhyZWFkX29uY2UocHRocmVhZF9vbmNlX3QqLCB2b2lkICgqKSh2b2lkKSkgX19ub25udWxsKCgxLCAyKSk7CiAKQEAgLTE5Myw3ICsyMjgsNyBAQAogaW50IHB0aHJlYWRfcndsb2NrX3VubG9jayhwdGhyZWFkX3J3bG9ja190ICpyd2xvY2spIF9fbm9ubnVsbCgoMSkpOwogaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayhwdGhyZWFkX3J3bG9ja190KikgX19ub25udWxsKCgxKSk7CiAKLXB0aHJlYWRfdCBwdGhyZWFkX3NlbGYodm9pZCk7CitwdGhyZWFkX3QgcHRocmVhZF9zZWxmKHZvaWQpIF9fcHVyZTI7CiAKIGludCBwdGhyZWFkX3NldG5hbWVfbnAocHRocmVhZF90LCBjb25zdCBjaGFyKikgX19ub25udWxsKCgyKSk7CiAKQEAgLTIzMiwzMiArMjY3LDE3IEBACiAKICNpZiAhZGVmaW5lZChfX0xQNjRfXykKIAotLyogRGVwcmVjYXRlZCBieSBQT1NJWC4gVE9ETzogc3VwcG9ydCBmb3IgTFA2NCBidXQgYWRkIGRlcHJlY2F0ZWQgYXR0cmlidXRlIGluc3RlYWQ/ICovCi1pbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihjb25zdCBwdGhyZWFkX2F0dHJfdCosIHZvaWQqKikgX19ub25udWxsKCgxLCAyKSk7IC8qIGRlcHJlY2F0ZWQgKi8KLWludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90Kiwgdm9pZCopIF9fbm9ubnVsbCgoMSkpOyAvKiBkZXByZWNhdGVkICovCi0KLS8qIEJpb25pYyBhZGRpdGlvbnMgdGhhdCBhcmUgZGVwcmVjYXRlZCBldmVuIGluIHRoZSAzMi1iaXQgQUJJLiAqLworLy8gQmlvbmljIGFkZGl0aW9ucyB0aGF0IGFyZSBkZXByZWNhdGVkIGV2ZW4gaW4gdGhlIDMyLWJpdCBBQkkuCisvLworLy8gVE9ETzogUmVtb3ZlIHRoZW0gb25jZSBjaHJvbWl1bV9vcmcgLyBORkMgaGF2ZSBzd2l0Y2hlZCBvdmVyLgogaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXRfbW9ub3RvbmljX25wKHB0aHJlYWRfY29uZF90KiwgcHRocmVhZF9tdXRleF90KiwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKik7CiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdF9tb25vdG9uaWMocHRocmVhZF9jb25kX3QqLCBwdGhyZWFkX211dGV4X3QqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqKTsKLSNkZWZpbmUgSEFWRV9QVEhSRUFEX0NPTkRfVElNRURXQUlUX01PTk9UT05JQyAxCiAKLS8qCi0gKiBMaWtlIHB0aHJlYWRfY29uZF90aW1lZHdhaXQgZXhjZXB0ICdyZWx0aW1lJyBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB0aW1lLgotICogVE9ETzogbm90IGxpa2UgZ2xpYmM7IGluY2x1ZGUgaW4gTFA2ND8KLSAqLwotaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXRfcmVsYXRpdmVfbnAocHRocmVhZF9jb25kX3QqLCBwdGhyZWFkX211dGV4X3QqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqKTsKLSNkZWZpbmUgSEFWRV9QVEhSRUFEX0NPTkRfVElNRURXQUlUX1JFTEFUSVZFIDEKK2ludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlbGF0aXZlX25wKHB0aHJlYWRfY29uZF90KiwgcHRocmVhZF9tdXRleF90KiwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKikgLyogVE9ETzogX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCgidXNlIHB0aHJlYWRfY29uZF90aW1lZHdhaXQgaW5zdGVhZCIpKSkqLzsKKyNkZWZpbmUgSEFWRV9QVEhSRUFEX0NPTkRfVElNRURXQUlUX1JFTEFUSVZFIDEgLyogVE9ETzogc3RvcCBkZWZpbmluZyB0aGlzIHRvIHB1c2ggTFAzMiBvZmYgdGhpcyBBUEkgc29vbmVyLiAqLworaW50IHB0aHJlYWRfY29uZF90aW1lb3V0X25wKHB0aHJlYWRfY29uZF90KiwgcHRocmVhZF9tdXRleF90KiwgdW5zaWduZWQpIC8qIFRPRE86IF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQoInVzZSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IGluc3RlYWQiKSkpKi87CiAKLS8qIFRPRE86IG5vdCBsaWtlIGdsaWJjOyBpbmNsdWRlIGluIExQNjQ/ICovCi1pbnQgcHRocmVhZF9jb25kX3RpbWVvdXRfbnAocHRocmVhZF9jb25kX3QqLCBwdGhyZWFkX211dGV4X3QqLCB1bnNpZ25lZCk7Ci0KLS8qIExpa2UgcHRocmVhZF9tdXRleF9sb2NrKCksIGJ1dCB3aWxsIHdhaXQgdXAgdG8gJ21zZWNzJyBtaWxsaS1zZWNvbmRzCi0gKiBiZWZvcmUgcmV0dXJuaW5nLiBTYW1lIHJldHVybiB2YWx1ZXMgYXMgcHRocmVhZF9tdXRleF90cnlsb2NrIHRob3VnaCwgaS5lLgotICogcmV0dXJucyBFQlVTWSBpZiB0aGUgbG9jayBjb3VsZCBub3QgYmUgYWNxdWlyZWQgYWZ0ZXIgdGhlIHRpbWVvdXQgZXhwaXJlZC4KLSAqCi0gKiBUT0RPOiByZXBsYWNlIHdpdGggcHRocmVhZF9tdXRleF90aW1lZGxvY2tfbnAgZm9yIExQNjQuCi0gKi8KLWludCBwdGhyZWFkX211dGV4X2xvY2tfdGltZW91dF9ucChwdGhyZWFkX211dGV4X3QqLCB1bnNpZ25lZCk7CitpbnQgcHRocmVhZF9tdXRleF9sb2NrX3RpbWVvdXRfbnAocHRocmVhZF9tdXRleF90KiwgdW5zaWduZWQpIF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQoInVzZSBwdGhyZWFkX211dGV4X3RpbWVkbG9jayBpbnN0ZWFkIikpKTsKIAogI2VuZGlmIC8qICFkZWZpbmVkKF9fTFA2NF9fKSAqLwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvcHdkLmggYi9saWJjL2luY2x1ZGUvcHdkLmgKaW5kZXggNmYzZmFkNS4uNmQ0ODNjMCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3B3ZC5oCisrKyBiL2xpYmMvaW5jbHVkZS9wd2QuaApAQCAtMTAwLDEyICsxMDAsMTUgQEAKIAogc3RydWN0IHBhc3N3ZAogewotICAgIGNoYXIqIHB3X25hbWU7Ci0gICAgY2hhciogcHdfcGFzc3dkOwotICAgIHVpZF90IHB3X3VpZDsKLSAgICBnaWRfdCBwd19naWQ7Ci0gICAgY2hhciogcHdfZGlyOwotICAgIGNoYXIqIHB3X3NoZWxsOworICBjaGFyKiBwd19uYW1lOworICBjaGFyKiBwd19wYXNzd2Q7CisgIHVpZF90IHB3X3VpZDsKKyAgZ2lkX3QgcHdfZ2lkOworI2lmZGVmIF9fTFA2NF9fCisgIGNoYXIqIHB3X2dlY29zOworI2VuZGlmCisgIGNoYXIqIHB3X2RpcjsKKyAgY2hhciogcHdfc2hlbGw7CiB9OwogCiBfX0JFR0lOX0RFQ0xTCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvcmVzb2x2LmggYi9saWJjL2luY2x1ZGUvcmVzb2x2LmgKaW5kZXggMzZiOTNlZS4uYzg4OTllZCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3Jlc29sdi5oCisrKyBiL2xpYmMvaW5jbHVkZS9yZXNvbHYuaApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KIAogX19CRUdJTl9ERUNMUworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCiAKIHN0cnVjdCByZXNfc3RhdGU7CiAKQEAgLTUyLDYgKzUzLDcgQEAKIGV4dGVybiBpbnQgZG5fY29tcChjb25zdCBjaGFyKiwgdV9jaGFyKiwgaW50LCB1X2NoYXIqKiwgdV9jaGFyKiopOwogZXh0ZXJuIGludCBkbl9leHBhbmQoY29uc3QgdV9jaGFyKiwgY29uc3QgdV9jaGFyKiwgY29uc3QgdV9jaGFyKiwgY2hhciosIGludCk7CiAKKyNwcmFnbWEgR0NDIHZpc2liaWxpdHkgcG9wCiBfX0VORF9ERUNMUwogCiAjZW5kaWYgLyogX1JFU09MVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3NjaGVkLmggYi9saWJjL2luY2x1ZGUvc2NoZWQuaAppbmRleCA3NjQ5ZTgzLi5lNDNiNmNjIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc2NoZWQuaAorKysgYi9saWJjL2luY2x1ZGUvc2NoZWQuaApAQCAtNTksMTUxICs1OSw5MCBAQAogZXh0ZXJuIGludCBzY2hlZF9nZXRjcHUodm9pZCk7CiBleHRlcm4gaW50IHNldG5zKGludCwgaW50KTsKIAotLyogT3VyIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHVwIHRvIDMyIGluZGVwZW5kZW50IENQVXMsIHdoaWNoIGlzIGFsc28KLSAqIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUga2VybmVsIGF0IHRoZSBtb21lbnQuIEdMaWJjIHVzZXMgMTAyNCBieQotICogZGVmYXVsdC4KLSAqCi0gKiBJZiB5b3Ugd2FudCB0byB1c2UgbW9yZSB0aGFuIHRoYXQsIHlvdSBzaG91bGQgdXNlIENQVV9BTExPQygpIC8gQ1BVX0ZSRUUoKQotICogYW5kIHRoZSBDUFVfWFhYX1MoKSBtYWNybyB2YXJpYW50cy4KLSAqLwotI2RlZmluZSBDUFVfU0VUU0laRSAgIDMyCisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUgQ1BVX1NFVFNJWkUgMTAyNAorI2Vsc2UKKyNkZWZpbmUgQ1BVX1NFVFNJWkUgMzIKKyNlbmRpZgogCi0jZGVmaW5lIF9fQ1BVX0JJVFRZUEUgICAgdW5zaWduZWQgbG9uZyBpbnQgIC8qIG1hbmRhdGVkIGJ5IHRoZSBrZXJuZWwgICovCi0jZGVmaW5lIF9fQ1BVX0JJVFNISUZUICAgNSAgICAgICAgICAgICAgICAgIC8qIHNob3VsZCBiZSBsb2cyKEJJVFRZUEUpICovCi0jZGVmaW5lIF9fQ1BVX0JJVFMgICAgICAgKDEgPDwgX19DUFVfQklUU0hJRlQpCi0jZGVmaW5lIF9fQ1BVX0VMVCh4KSAgICAgKCh4KSA+PiBfX0NQVV9CSVRTSElGVCkKLSNkZWZpbmUgX19DUFVfTUFTSyh4KSAgICAoKF9fQ1BVX0JJVFRZUEUpMSA8PCAoKHgpICYgKF9fQ1BVX0JJVFMtMSkpKQorI2RlZmluZSBfX0NQVV9CSVRUWVBFICB1bnNpZ25lZCBsb25nIGludCAgLyogbWFuZGF0ZWQgYnkgdGhlIGtlcm5lbCAgKi8KKyNkZWZpbmUgX19DUFVfQklUUyAgICAgKDggKiBzaXplb2YoX19DUFVfQklUVFlQRSkpCisjZGVmaW5lIF9fQ1BVX0VMVCh4KSAgICgoeCkgLyBfX0NQVV9CSVRTKQorI2RlZmluZSBfX0NQVV9NQVNLKHgpICAoKF9fQ1BVX0JJVFRZUEUpMSA8PCAoKHgpICYgKF9fQ1BVX0JJVFMgLSAxKSkpCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBfX0NQVV9CSVRUWVBFICBfX2JpdHNbIENQVV9TRVRTSVpFIC8gX19DUFVfQklUUyBdOworICBfX0NQVV9CSVRUWVBFICBfX2JpdHNbIENQVV9TRVRTSVpFIC8gX19DUFVfQklUUyBdOwogfSBjcHVfc2V0X3Q7CiAKIGV4dGVybiBpbnQgc2NoZWRfc2V0YWZmaW5pdHkocGlkX3QgcGlkLCBzaXplX3Qgc2V0c2l6ZSwgY29uc3QgY3B1X3NldF90KiBzZXQpOwogCiBleHRlcm4gaW50IHNjaGVkX2dldGFmZmluaXR5KHBpZF90IHBpZCwgc2l6ZV90IHNldHNpemUsIGNwdV9zZXRfdCogc2V0KTsKIAotLyogUHJvdmlkZSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIDMyLWJpdCBjcHVfc2V0X3QgKi8KLSNpZiBDUFVfU0VUU0laRSA9PSBfX0NQVV9CSVRTCisjZGVmaW5lIENQVV9aRVJPKHNldCkgICAgICAgICAgQ1BVX1pFUk9fUyhzaXplb2YoY3B1X3NldF90KSwgc2V0KQorI2RlZmluZSBDUFVfU0VUKGNwdSwgc2V0KSAgICAgIENQVV9TRVRfUyhjcHUsIHNpemVvZihjcHVfc2V0X3QpLCBzZXQpCisjZGVmaW5lIENQVV9DTFIoY3B1LCBzZXQpICAgICAgQ1BVX0NMUl9TKGNwdSwgc2l6ZW9mKGNwdV9zZXRfdCksIHNldCkKKyNkZWZpbmUgQ1BVX0lTU0VUKGNwdSwgc2V0KSAgICBDUFVfSVNTRVRfUyhjcHUsIHNpemVvZihjcHVfc2V0X3QpLCBzZXQpCisjZGVmaW5lIENQVV9DT1VOVChzZXQpICAgICAgICAgQ1BVX0NPVU5UX1Moc2l6ZW9mKGNwdV9zZXRfdCksIHNldCkKKyNkZWZpbmUgQ1BVX0VRVUFMKHNldDEsIHNldDIpICBDUFVfRVFVQUxfUyhzaXplb2YoY3B1X3NldF90KSwgc2V0MSwgc2V0MikKIAotIyAgZGVmaW5lIENQVV9aRVJPKHNldF8pICAgXAotICAgIGRveyBcCi0gICAgICAgIChzZXRfKS0+X19iaXRzWzBdID0gMDsgXAotICAgIH13aGlsZSgwKQorI2RlZmluZSBDUFVfQU5EKGRzdCwgc2V0MSwgc2V0MikgIF9fQ1BVX09QKGRzdCwgc2V0MSwgc2V0MiwgJikKKyNkZWZpbmUgQ1BVX09SKGRzdCwgc2V0MSwgc2V0MikgICBfX0NQVV9PUChkc3QsIHNldDEsIHNldDIsIHwpCisjZGVmaW5lIENQVV9YT1IoZHN0LCBzZXQxLCBzZXQyKSAgX19DUFVfT1AoZHN0LCBzZXQxLCBzZXQyLCBeKQogCi0jICBkZWZpbmUgQ1BVX1NFVChjcHVfLHNldF8pIFwKLSAgICBkbyB7XAotICAgICAgICBzaXplX3QgX19jcHUgPSAoY3B1Xyk7IFwKLSAgICAgICAgaWYgKF9fY3B1IDwgQ1BVX1NFVFNJWkUpIFwKLSAgICAgICAgICAgIChzZXRfKS0+X19iaXRzWzBdIHw9IF9fQ1BVX01BU0soX19jcHUpOyBcCi0gICAgfXdoaWxlICgwKQotCi0jICBkZWZpbmUgQ1BVX0NMUihjcHVfLHNldF8pIFwKLSAgICBkbyB7XAotICAgICAgICBzaXplX3QgX19jcHUgPSAoY3B1Xyk7IFwKLSAgICAgICAgaWYgKF9fY3B1IDwgQ1BVX1NFVFNJWkUpIFwKLSAgICAgICAgICAgIChzZXRfKS0+X19iaXRzWzBdICY9IH5fX0NQVV9NQVNLKF9fY3B1KTsgXAotICAgIH13aGlsZSAoMCkKLQotIyAgZGVmaW5lIENQVV9JU1NFVChjcHVfLCBzZXRfKSBcCi0gICAgKF9fZXh0ZW5zaW9uX18oe1wKLSAgICAgICAgc2l6ZV90ICBfX2NwdSA9IChjcHVfKTsgXAotICAgICAgICAoY3B1XyA8IENQVV9TRVRTSVpFKSBcCi0gICAgICAgICAgICA/ICgoc2V0XyktPl9fYml0c1swXSAmIF9fQ1BVX01BU0soX19jcHUpKSAhPSAwIFwKLSAgICAgICAgICAgIDogMDsgXAotICAgIH0pKQotCi0jICBkZWZpbmUgQ1BVX0VRVUFMKHNldDFfLCBzZXQyXykgXAotICAgICgoc2V0MV8pLT5fX2JpdHNbMF0gPT0gKHNldDJfKS0+X19iaXRzWzBdKQotCi0jICBkZWZpbmUgX19DUFVfT1AoZHN0Xywgc2V0MV8sIHNldDJfLCBvcF8pIFwKLSAgICBkbyB7IFwKLSAgICAgICAgKGRzdF8pLT5fX2JpdHNbMF0gPSAoc2V0MV8pLT5fX2JpdHNbMF0gb3BfIChzZXQyXyktPl9fYml0c1swXTsgXAotICAgIH0gd2hpbGUgKDApCi0KLSMgIGRlZmluZSBDUFVfQ09VTlQoc2V0XykgIF9fYnVpbHRpbl9wb3Bjb3VudGwoKHNldF8pLT5fX2JpdHNbMF0pCi0KLSNlbHNlIC8qIENQVV9TRVRTSVpFICE9IF9fQ1BVX0JJVFMgKi8KLQotIyAgZGVmaW5lIENQVV9aRVJPKHNldF8pICAgICAgICAgIENQVV9aRVJPX1Moc2l6ZW9mKGNwdV9zZXRfdCksIHNldF8pCi0jICBkZWZpbmUgQ1BVX1NFVChjcHVfLHNldF8pICAgICAgQ1BVX1NFVF9TKGNwdV8sc2l6ZW9mKGNwdV9zZXRfdCksc2V0XykKLSMgIGRlZmluZSBDUFVfQ0xSKGNwdV8sc2V0XykgICAgICBDUFVfQ0xSX1MoY3B1XyxzaXplb2YoY3B1X3NldF90KSxzZXRfKQotIyAgZGVmaW5lIENQVV9JU1NFVChjcHVfLHNldF8pICAgIENQVV9JU1NFVF9TKGNwdV8sc2l6ZW9mKGNwdV9zZXRfdCksc2V0XykKLSMgIGRlZmluZSBDUFVfQ09VTlQoc2V0XykgICAgICAgICBDUFVfQ09VTlRfUyhzaXplb2YoY3B1X3NldF90KSxzZXRfKQotIyAgZGVmaW5lIENQVV9FUVVBTChzZXQxXyxzZXQyXykgIENQVV9FUVVBTF9TKHNpemVvZihjcHVfc2V0X3QpLHNldDFfLHNldDJfKQotCi0jICBkZWZpbmUgX19DUFVfT1AoZHN0XyxzZXQxXyxzZXQyXyxvcF8pICBfX0NQVV9PUF9TKHNpemVvZihjcHVfc2V0X3QpLGRzdF8sc2V0MV8sc2V0Ml8sb3BfKQotCi0jZW5kaWYgLyogQ1BVX1NFVFNJWkUgIT0gX19DUFVfQklUUyAqLwotCi0jZGVmaW5lIENQVV9BTkQoc2V0MV8sc2V0Ml8pICAgX19DUFVfT1Aoc2V0MV8sc2V0Ml8sJikKLSNkZWZpbmUgQ1BVX09SKHNldDFfLHNldDJfKSAgICBfX0NQVV9PUChzZXQxXyxzZXQyXyx8KQotI2RlZmluZSBDUFVfWE9SKHNldDFfLHNldDJfKSAgIF9fQ1BVX09QKHNldDFfLHNldDJfLF4pCisjZGVmaW5lIF9fQ1BVX09QKGRzdCwgc2V0MSwgc2V0Miwgb3ApICBfX0NQVV9PUF9TKHNpemVvZihjcHVfc2V0X3QpLCBkc3QsIHNldDEsIHNldDIsIG9wKQogCiAvKiBTdXBwb3J0IGZvciBkeW5hbWljYWxseS1hbGxvY2F0ZWQgY3B1X3NldF90ICovCiAKICNkZWZpbmUgQ1BVX0FMTE9DX1NJWkUoY291bnQpIFwKLSAgICBfX0NQVV9FTFQoKGNvdW50KSArIChfX0NQVV9CSVRTLTEpKSpzaXplb2YoX19DUFVfQklUVFlQRSkKKyAgX19DUFVfRUxUKChjb3VudCkgKyAoX19DUFVfQklUUyAtIDEpKSAqIHNpemVvZihfX0NQVV9CSVRUWVBFKQogCi0jZGVmaW5lIENQVV9BTExPQyhjb3VudCkgICBfX3NjaGVkX2NwdWFsbG9jKChjb3VudCkpOwotI2RlZmluZSBDUFVfRlJFRShzZXQpICAgICAgX19zY2hlZF9jcHVmcmVlKChzZXQpKQorI2RlZmluZSBDUFVfQUxMT0MoY291bnQpICBfX3NjaGVkX2NwdWFsbG9jKChjb3VudCkpCisjZGVmaW5lIENQVV9GUkVFKHNldCkgICAgIF9fc2NoZWRfY3B1ZnJlZSgoc2V0KSkKIAogZXh0ZXJuIGNwdV9zZXRfdCogX19zY2hlZF9jcHVhbGxvYyhzaXplX3QgY291bnQpOwogZXh0ZXJuIHZvaWQgICAgICAgX19zY2hlZF9jcHVmcmVlKGNwdV9zZXRfdCogc2V0KTsKIAotI2RlZmluZSBDUFVfWkVST19TKHNldHNpemVfLHNldF8pICBcCi0gICAgZG8geyBcCi0gICAgICAgIHNpemVfdCBfX25uID0gMDsgXAotICAgICAgICBzaXplX3QgX19ubl9tYXggPSAoc2V0c2l6ZV8pL3NpemVvZihfX0NQVV9CSVRUWVBFKTsgXAotICAgICAgICBmb3IgKDsgX19ubiA8IF9fbm5fbWF4OyBfX25uKyspIFwKLSAgICAgICAgICAgIChzZXRfKS0+X19iaXRzW19fbm5dID0gMDsgXAotICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIENQVV9aRVJPX1Moc2V0c2l6ZSwgc2V0KSAgX19idWlsdGluX21lbXNldChzZXQsIDAsIHNldHNpemUpCiAKLSNkZWZpbmUgQ1BVX1NFVF9TKGNwdV8sc2V0c2l6ZV8sc2V0XykgXAotICAgIGRvIHsgXAotICAgICAgICBzaXplX3QgX19jcHUgPSAoY3B1Xyk7IFwKLSAgICAgICAgaWYgKF9fY3B1IDwgOCooc2V0c2l6ZV8pKSBcCi0gICAgICAgICAgICAoc2V0XyktPl9fYml0c1tfX0NQVV9FTFQoX19jcHUpXSB8PSBfX0NQVV9NQVNLKF9fY3B1KTsgXAotICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIENQVV9TRVRfUyhjcHUsIHNldHNpemUsIHNldCkgXAorICBkbyB7IFwKKyAgICBzaXplX3QgX19jcHUgPSAoY3B1KTsgXAorICAgIGlmIChfX2NwdSA8IDggKiAoc2V0c2l6ZSkpIFwKKyAgICAgIChzZXQpLT5fX2JpdHNbX19DUFVfRUxUKF9fY3B1KV0gfD0gX19DUFVfTUFTSyhfX2NwdSk7IFwKKyAgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBDUFVfQ0xSX1MoY3B1XyxzZXRzaXplXyxzZXRfKSBcCi0gICAgZG8geyBcCi0gICAgICAgIHNpemVfdCBfX2NwdSA9IChjcHVfKTsgXAotICAgICAgICBpZiAoX19jcHUgPCA4KihzZXRzaXplXykpIFwKLSAgICAgICAgICAgIChzZXRfKS0+X19iaXRzW19fQ1BVX0VMVChfX2NwdSldICY9IH5fX0NQVV9NQVNLKF9fY3B1KTsgXAotICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIENQVV9DTFJfUyhjcHUsIHNldHNpemUsIHNldCkgXAorICBkbyB7IFwKKyAgICBzaXplX3QgX19jcHUgPSAoY3B1KTsgXAorICAgIGlmIChfX2NwdSA8IDggKiAoc2V0c2l6ZSkpIFwKKyAgICAgIChzZXQpLT5fX2JpdHNbX19DUFVfRUxUKF9fY3B1KV0gJj0gfl9fQ1BVX01BU0soX19jcHUpOyBcCisgIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgQ1BVX0lTU0VUX1MoY3B1Xywgc2V0c2l6ZV8sIHNldF8pIFwKLSAgICAoX19leHRlbnNpb25fXyAoeyBcCi0gICAgICAgIHNpemVfdCBfX2NwdSA9IChjcHVfKTsgXAotICAgICAgICAoX19jcHUgPCA4KihzZXRzaXplXykpIFwKLSAgICAgICAgICA/ICgoc2V0XyktPl9fYml0c1tfX0NQVV9FTFQoX19jcHUpXSAmIF9fQ1BVX01BU0soX19jcHUpKSAhPSAwIFwKLSAgICAgICAgICA6IDA7IFwKLSAgICB9KSkKKyNkZWZpbmUgQ1BVX0lTU0VUX1MoY3B1LCBzZXRzaXplLCBzZXQpIFwKKyAgKF9fZXh0ZW5zaW9uX18gKHsgXAorICAgIHNpemVfdCBfX2NwdSA9IChjcHUpOyBcCisgICAgKF9fY3B1IDwgOCAqIChzZXRzaXplKSkgXAorICAgICAgPyAoKHNldCktPl9fYml0c1tfX0NQVV9FTFQoX19jcHUpXSAmIF9fQ1BVX01BU0soX19jcHUpKSAhPSAwIFwKKyAgICAgIDogMDsgXAorICB9KSkKIAotI2RlZmluZSBDUFVfRVFVQUxfUyhzZXRzaXplXywgc2V0MV8sIHNldDJfKSBcCi0gICAgKF9fZXh0ZW5zaW9uX18gKHsgXAotICAgICAgICBfX2NvbnN0IF9fQ1BVX0JJVFRZUEUqIF9fc3JjMSA9IChzZXQxXyktPl9fYml0czsgXAotICAgICAgICBfX2NvbnN0IF9fQ1BVX0JJVFRZUEUqIF9fc3JjMiA9IChzZXQyXyktPl9fYml0czsgXAotICAgICAgICBzaXplX3QgX19ubiA9IDAsIF9fbm5fbWF4ID0gKHNldHNpemVfKS9zaXplb2YoX19DUFVfQklUVFlQRSk7IFwKLSAgICAgICAgZm9yICg7IF9fbm4gPCBfX25uX21heDsgX19ubisrKSB7IFwKLSAgICAgICAgICAgIGlmIChfX3NyYzFbX19ubl0gIT0gX19zcmMyW19fbm5dKSBcCi0gICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIF9fbm4gPT0gX19ubl9tYXg7IFwKLSAgICB9KSkKKyNkZWZpbmUgQ1BVX0VRVUFMX1Moc2V0c2l6ZSwgc2V0MSwgc2V0MikgIChfX2J1aWx0aW5fbWVtY21wKHNldDEsIHNldDIsIHNldHNpemUpID09IDApCiAKLSNkZWZpbmUgX19DUFVfT1BfUyhzZXRzaXplXywgZHN0c2V0Xywgc3Jjc2V0MV8sIHNyY3NldDJfLCBvcCkgXAotICAgIGRvIHsgXAotICAgICAgICBjcHVfc2V0X3QqIF9fZHN0ID0gKGRzdHNldCk7IFwKLSAgICAgICAgY29uc3QgX19DUFVfQklUVFlQRSogX19zcmMxID0gKHNyY3NldDEpLT5fX2JpdHM7IFwKLSAgICAgICAgY29uc3QgX19DUFVfQklUVFlQRSogX19zcmMyID0gKHNyY3NldDIpLT5fX2JpdHM7IFwKLSAgICAgICAgc2l6ZV90IF9fbm4gPSAwLCBfX25uX21heCA9IChzZXRzaXplXykvc2l6ZW9mKF9fQ1BVX0JJVFRZUEUpOyBcCi0gICAgICAgIGZvciAoOyBfX25uIDwgX19ubl9tYXg7IF9fbm4rKykgXAotICAgICAgICAgICAgKF9fZHN0KS0+X19iaXRzW19fbm5dID0gX19zcmMxW19fbm5dIG9wIF9fc3JjMltfX25uXTsgXAotICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIENQVV9BTkRfUyhzZXRzaXplLCBkc3QsIHNldDEsIHNldDIpICBfX0NQVV9PUF9TKHNldHNpemUsIGRzdCwgc2V0MSwgc2V0MiwgJikKKyNkZWZpbmUgQ1BVX09SX1Moc2V0c2l6ZSwgZHN0LCBzZXQxLCBzZXQyKSAgIF9fQ1BVX09QX1Moc2V0c2l6ZSwgZHN0LCBzZXQxLCBzZXQyLCB8KQorI2RlZmluZSBDUFVfWE9SX1Moc2V0c2l6ZSwgZHN0LCBzZXQxLCBzZXQyKSAgX19DUFVfT1BfUyhzZXRzaXplLCBkc3QsIHNldDEsIHNldDIsIF4pCiAKLSNkZWZpbmUgQ1BVX0NPVU5UX1Moc2V0c2l6ZV8sIHNldF8pIFwKLSAgICBfX3NjaGVkX2NwdWNvdW50KChzZXRzaXplXyksIChzZXRfKSkKKyNkZWZpbmUgX19DUFVfT1BfUyhzZXRzaXplLCBkc3RzZXQsIHNyY3NldDEsIHNyY3NldDIsIG9wKSBcCisgIGRvIHsgXAorICAgIGNwdV9zZXRfdCogX19kc3QgPSAoZHN0c2V0KTsgXAorICAgIGNvbnN0IF9fQ1BVX0JJVFRZUEUqIF9fc3JjMSA9IChzcmNzZXQxKS0+X19iaXRzOyBcCisgICAgY29uc3QgX19DUFVfQklUVFlQRSogX19zcmMyID0gKHNyY3NldDIpLT5fX2JpdHM7IFwKKyAgICBzaXplX3QgX19ubiA9IDAsIF9fbm5fbWF4ID0gKHNldHNpemUpL3NpemVvZihfX0NQVV9CSVRUWVBFKTsgXAorICAgIGZvciAoOyBfX25uIDwgX19ubl9tYXg7IF9fbm4rKykgXAorICAgICAgKF9fZHN0KS0+X19iaXRzW19fbm5dID0gX19zcmMxW19fbm5dIG9wIF9fc3JjMltfX25uXTsgXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIENQVV9DT1VOVF9TKHNldHNpemUsIHNldCkgIF9fc2NoZWRfY3B1Y291bnQoKHNldHNpemUpLCAoc2V0KSkKIAogZXh0ZXJuIGludCBfX3NjaGVkX2NwdWNvdW50KHNpemVfdCBzZXRzaXplLCBjcHVfc2V0X3QqIHNldCk7CiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zZWFyY2guaCBiL2xpYmMvaW5jbHVkZS9zZWFyY2guaAppbmRleCBlMTJlNDllLi45YjAxZTEyIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc2VhcmNoLmgKKysrIGIvbGliYy9pbmNsdWRlL3NlYXJjaC5oCkBAIC0xMCwzMCArMTAsMzcgQEAKICNkZWZpbmUgX1NFQVJDSF9IXwogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL190eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCi10eXBlZGVmCWVudW0gewotCXByZW9yZGVyLAotCXBvc3RvcmRlciwKLQllbmRvcmRlciwKLQlsZWFmCit0eXBlZGVmIGVudW0geworICBwcmVvcmRlciwKKyAgcG9zdG9yZGVyLAorICBlbmRvcmRlciwKKyAgbGVhZgogfSBWSVNJVDsKIAogI2lmZGVmIF9TRUFSQ0hfUFJJVkFURQotdHlwZWRlZglzdHJ1Y3Qgbm9kZSB7Ci0JY2hhciAgICAgICAgICprZXk7Ci0Jc3RydWN0IG5vZGUgICpsbGluaywgKnJsaW5rOwordHlwZWRlZiBzdHJ1Y3Qgbm9kZSB7CisgIGNoYXIqIGtleTsKKyAgc3RydWN0IG5vZGUqIGxsaW5rOworICBzdHJ1Y3Qgbm9kZSogcmxpbms7CiB9IG5vZGVfdDsKICNlbmRpZgogCiBfX0JFR0lOX0RFQ0xTCi12b2lkCSp0ZGVsZXRlKGNvbnN0IHZvaWQgKiBfX3Jlc3RyaWN0LCB2b2lkICoqIF9fcmVzdHJpY3QsCi0JICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKLXZvaWQJKnRmaW5kKGNvbnN0IHZvaWQgKiwgdm9pZCAqIGNvbnN0ICosCi0JICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKLXZvaWQJKnRzZWFyY2goY29uc3Qgdm9pZCAqLCB2b2lkICoqLCBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7Ci12b2lkCSB0d2Fsayhjb25zdCB2b2lkICosIHZvaWQgKCopKGNvbnN0IHZvaWQgKiwgVklTSVQsIGludCkpOwotdm9pZAkgdGRlc3Ryb3kodm9pZCAqLCB2b2lkICgqKSh2b2lkICopKTsKKwordm9pZCBpbnNxdWUodm9pZCosIHZvaWQqKTsKK3ZvaWQgcmVtcXVlKHZvaWQqKTsKKwordm9pZCogbGZpbmQoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QqLCBzaXplX3QsIGludCAoKikoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqKSk7Cit2b2lkKiBsc2VhcmNoKGNvbnN0IHZvaWQqLCB2b2lkKiwgc2l6ZV90Kiwgc2l6ZV90LCBpbnQgKCopKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKikpOworCit2b2lkKiB0ZGVsZXRlKGNvbnN0IHZvaWQqIF9fcmVzdHJpY3QsIHZvaWQqKiBfX3Jlc3RyaWN0LCBpbnQgKCopKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKikpOwordm9pZCB0ZGVzdHJveSh2b2lkKiwgdm9pZCAoKikodm9pZCopKTsKK3ZvaWQqIHRmaW5kKGNvbnN0IHZvaWQqLCB2b2lkKiBjb25zdCosIGludCAoKikoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqKSk7Cit2b2lkKiB0c2VhcmNoKGNvbnN0IHZvaWQqLCB2b2lkKiosIGludCAoKikoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqKSk7Cit2b2lkIHR3YWxrKGNvbnN0IHZvaWQqLCB2b2lkICgqKShjb25zdCB2b2lkKiwgVklTSVQsIGludCkpOworCiBfX0VORF9ERUNMUwogCiAjZW5kaWYgLyogIV9TRUFSQ0hfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zZW1hcGhvcmUuaCBiL2xpYmMvaW5jbHVkZS9zZW1hcGhvcmUuaAppbmRleCAzMGUzMTIzLi43YWUzYzNhIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc2VtYXBob3JlLmgKKysrIGIvbGliYy9pbmNsdWRlL3NlbWFwaG9yZS5oCkBAIC0zMywxMCArMzMsMTMgQEAKIF9fQkVHSU5fREVDTFMKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHZvbGF0aWxlIHVuc2lnbmVkIGludCAgY291bnQ7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCBjb3VudDsKKyNpZmRlZiBfX0xQNjRfXworICBpbnQgX19yZXNlcnZlZFszXTsKKyNlbmRpZgogfSBzZW1fdDsKIAotI2RlZmluZSAgU0VNX0ZBSUxFRCAgTlVMTAorI2RlZmluZSBTRU1fRkFJTEVEIE5VTEwKIAogZXh0ZXJuIGludCBzZW1faW5pdChzZW1fdCAqc2VtLCBpbnQgcHNoYXJlZCwgdW5zaWduZWQgaW50IHZhbHVlKTsKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3NldGptcC5oIGIvbGliYy9pbmNsdWRlL3NldGptcC5oCmluZGV4IDY4ZmRjZWYuLjAyYjA2ZjUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zZXRqbXAuaAorKysgYi9saWJjL2luY2x1ZGUvc2V0am1wLmgKQEAgLTUwLDcgKzUwLDYgQEAKIAogaW50ICAgICBfc2V0am1wKGptcF9idWYpOwogdm9pZCAgICBfbG9uZ2ptcChqbXBfYnVmLCBpbnQpOwotdm9pZCAgICBsb25nam1wZXJyb3Iodm9pZCk7CiAKIGludCAgICAgc2V0am1wKGptcF9idWYpOwogdm9pZCAgICBsb25nam1wKGptcF9idWYsIGludCk7CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc2hhMS5oIGIvbGliYy9pbmNsdWRlL3NoYTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y2Y2Y1ZC4uMDAwMDAwMAotLS0gYS9saWJjL2luY2x1ZGUvc2hhMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgX1NIQTFfSF8KLSNkZWZpbmUgX1NIQTFfSF8KLQotI3dhcm5pbmcgImluY2x1ZGUgPHN5cy9zaGExLmg+IGluc3RlYWQgZm9yIGJldHRlciBwb3J0YWJpbGl0eSIKLSNpbmNsdWRlIDxzeXMvc2hhMS5oPgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zaWduYWwuaCBiL2xpYmMvaW5jbHVkZS9zaWduYWwuaAppbmRleCAwMTU5YmYyLi5mMTg0OWM1IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc2lnbmFsLmgKKysrIGIvbGliYy9pbmNsdWRlL3NpZ25hbC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CQkvKiBGb3IgTE9OR19CSVQgKi8KICNpbmNsdWRlIDxzdHJpbmcuaD4JCS8qIEZvciBtZW1zZXQoKSAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CiAKICNpZiBkZWZpbmVkKF9fTFA2NF9fKSB8fCBkZWZpbmVkKF9fbWlwc19fKQogLyogRm9yIDY0LWJpdCAoYW5kIG1pcHMpLCB0aGUga2VybmVsJ3Mgc3RydWN0IHNpZ2FjdGlvbiBkb2Vzbid0IG1hdGNoIHRoZSBQT1NJWCBvbmUsCkBAIC01MSwyMCArNTIsMjkgQEAKIAogdHlwZWRlZiBpbnQgc2lnX2F0b21pY190OwogCi0vKiBUT0RPOiA2NC1iaXQ6IHdlIHNob3VsZCBwcm9iYWJseSAjdW5kZWYgdGhlIHVhcGkgTlNJRyBhbmQgYWRkIGEgdW5pdCB0ZXN0IHRoYXQgTlNJRyA9PSBfTlNJRyAmJiBOU0lHID49IDY0LiAqLwotI2lmbmRlZiBfTlNJRwotIyAgZGVmaW5lIF9OU0lHIDY0Ci0jZW5kaWYKLSNpZm5kZWYgTlNJRwotIyAgZGVmaW5lIE5TSUcgX05TSUcKKy8qIFRoZSBhcm0gYW5kIHg4NiBrZXJuZWwgaGVhZGVyIGZpbGVzIGRvbid0IGRlZmluZSBfTlNJRy4gKi8KKyNpZm5kZWYgX0tFUk5FTF9fTlNJRworI2RlZmluZSBfS0VSTkVMX19OU0lHIDY0CiAjZW5kaWYKIAorLyogVXNlcnNwYWNlJ3MgTlNJRyBpcyB0aGUga2VybmVsJ3MgX05TSUcgKyAxLiAqLworI2RlZmluZSBfTlNJRyAoX0tFUk5FTF9fTlNJRyArIDEpCisjZGVmaW5lIE5TSUcgX05TSUcKKworLyogV2UgdGFrZSBhIGZldyByZWFsLXRpbWUgc2lnbmFscyBmb3Igb3Vyc2VsdmVzLiBNYXkgYXMgd2VsbCB1c2UgdGhlIHNhbWUgbmFtZXMgYXMgZ2xpYmMuICovCisjZGVmaW5lIFNJR1JUTUlOIChfX2xpYmNfY3VycmVudF9zaWdydG1pbigpKQorI2RlZmluZSBTSUdSVE1BWCAoX19saWJjX2N1cnJlbnRfc2lncnRtYXgoKSkKK2V4dGVybiBpbnQgX19saWJjX2N1cnJlbnRfc2lncnRtaW4odm9pZCk7CitleHRlcm4gaW50IF9fbGliY19jdXJyZW50X3NpZ3J0bWF4KHZvaWQpOworCiBleHRlcm4gY29uc3QgY2hhciogY29uc3Qgc3lzX3NpZ2xpc3RbXTsKLWV4dGVybiBjb25zdCBjaGFyKiBjb25zdCBzeXNfc2lnbmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIqIGNvbnN0IHN5c19zaWduYW1lW107IC8qIEJTRCBjb21wYXRpYmlsaXR5LiAqLwogCiB0eXBlZGVmIF9fc2lnaGFuZGxlcl90IHNpZ190OyAvKiBCU0QgY29tcGF0aWJpbGl0eS4gKi8KIHR5cGVkZWYgX19zaWdoYW5kbGVyX3Qgc2lnaGFuZGxlcl90OyAvKiBnbGliYyBjb21wYXRpYmlsaXR5LiAqLwogCisjZGVmaW5lIHNpX3RpbWVyaWQgc2lfdGlkIC8qIGdsaWJjIGNvbXBhdGliaWxpdHkuICovCisKICNpZiBkZWZpbmVkKF9fTFA2NF9fKQogCiBzdHJ1Y3Qgc2lnYWN0aW9uIHsKQEAgLTkzLDggKzEwMyw2IEBACiBleHRlcm4gaW50IHNpZ2FjdGlvbihpbnQsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24qLCBzdHJ1Y3Qgc2lnYWN0aW9uKik7CiAKIGV4dGVybiBzaWdoYW5kbGVyX3Qgc2lnbmFsKGludCwgc2lnaGFuZGxlcl90KTsKLWV4dGVybiBzaWdoYW5kbGVyX3QgYnNkX3NpZ25hbChpbnQsIHNpZ2hhbmRsZXJfdCk7Ci1leHRlcm4gc2lnaGFuZGxlcl90IHN5c3Zfc2lnbmFsKGludCwgc2lnaGFuZGxlcl90KTsKIAogZXh0ZXJuIGludCBzaWdpbnRlcnJ1cHQoaW50LCBpbnQpOwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3RkYXRvbWljLmggYi9saWJjL2luY2x1ZGUvc3RkYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RiMjVhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zdGRhdG9taWMuaApAQCAtMCwwICsxLDU3NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgRWQgU2Nob3V0ZW4gPGVkQEZyZWVCU0Qub3JnPgorICogICAgICAgICAgICAgICAgICAgIERhdmlkIENoaXNuYWxsIDx0aGVyYXZlbkBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZiBfU1REQVRPTUlDX0hfCisjZGVmaW5lCV9TVERBVE9NSUNfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiBkZWZpbmVkKF9VU0lOR19MSUJDWFgpCisjIGlmZGVmIF9fY2xhbmdfXworIyAgaWYgX19oYXNfZmVhdHVyZShjeHhfYXRvbWljKQorIyAgIGRlZmluZSBfU1REQVRPTUlDX0hBVkVfQVRPTUlDCisjICBlbmRpZgorIyBlbHNlIC8qIGdjYyAqLworIyAgaWYgX19HTlVDX1BSRVJFUSg0LCA3KQorIyAgIGRlZmluZSBfU1REQVRPTUlDX0hBVkVfQVRPTUlDCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfU1REQVRPTUlDX0hBVkVfQVRPTUlDCisKKy8qIFdlIGhhdmUgYSB1c2FibGUgQysrIDxhdG9taWM+OyB1c2UgaXQgaW5zdGVhZC4gICovCisKKyNpbmNsdWRlIDxhdG9taWM+CisKKyN1bmRlZiBfQXRvbWljCisgICAgICAgIC8qIEFsc28gZGVmaW5lZCBieSA8YXRvbWljPiBmb3IgZ2NjLiAgQnV0IG5vdCB1c2VkIGluIG1hY3Jvcy4gKi8KKyAgICAgICAgLyogQWxzbyBhIGNsYW5nIGludHJpbnNpYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBTaG91bGQgbm90IGJlIHVzZWQgYnkgY2xpZW50IGNvZGUgYmVmb3JlIHRoaXMgZmlsZSBpcyAgICAgICovCisgICAgICAgIC8qIGluY2x1ZGVkLiAgVGhlIGRlZmluaXRpb25zIGluIDxhdG9taWM+IHRoZW1zZWx2ZXMgc2VlICAgICAgKi8KKyAgICAgICAgLyogdGhlIG9sZCBkZWZpbml0aW9uLCBhcyB0aGV5IHNob3VsZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiBDbGllbnQgY29kZSBzZWVzIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbi4gICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgX0F0b21pYyh0KSBzdGQ6OmF0b21pYzx0PgorCit1c2luZyBzdGQ6OmF0b21pY19pc19sb2NrX2ZyZWU7Cit1c2luZyBzdGQ6OmF0b21pY19pbml0OwordXNpbmcgc3RkOjphdG9taWNfc3RvcmU7Cit1c2luZyBzdGQ6OmF0b21pY19zdG9yZV9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2xvYWQ7Cit1c2luZyBzdGQ6OmF0b21pY19sb2FkX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZXhjaGFuZ2U7Cit1c2luZyBzdGQ6OmF0b21pY19leGNoYW5nZV9leHBsaWNpdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nOwordXNpbmcgc3RkOjphdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWs7Cit1c2luZyBzdGQ6OmF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9hZGQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9zdWI7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQ7Cit1c2luZyBzdGQ6OmF0b21pY19mZXRjaF9vcjsKK3VzaW5nIHN0ZDo6YXRvbWljX2ZldGNoX29yX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfeG9yOwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfYW5kOwordXNpbmcgc3RkOjphdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0OwordXNpbmcgc3RkOjphdG9taWNfdGhyZWFkX2ZlbmNlOwordXNpbmcgc3RkOjphdG9taWNfc2lnbmFsX2ZlbmNlOworCit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcjsKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQ7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9jb25zdW1lOwordXNpbmcgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZTsKK3VzaW5nIHN0ZDo6bWVtb3J5X29yZGVyX2FjcV9yZWw7Cit1c2luZyBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0OworCit1c2luZyBzdGQ6OmF0b21pY19ib29sOwordXNpbmcgc3RkOjphdG9taWNfY2hhcjsKK3VzaW5nIHN0ZDo6YXRvbWljX3NjaGFyOwordXNpbmcgc3RkOjphdG9taWNfdWNoYXI7Cit1c2luZyBzdGQ6OmF0b21pY19zaG9ydDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VzaG9ydDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnQ7Cit1c2luZyBzdGQ6OmF0b21pY19sb25nOwordXNpbmcgc3RkOjphdG9taWNfdWxvbmc7Cit1c2luZyBzdGQ6OmF0b21pY19sbG9uZzsKK3VzaW5nIHN0ZDo6YXRvbWljX3VsbG9uZzsKK3VzaW5nIHN0ZDo6YXRvbWljX2NoYXIxNl90OwordXNpbmcgc3RkOjphdG9taWNfY2hhcjMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY193Y2hhcl90OwordXNpbmcgc3RkOjphdG9taWNfaW50X2xlYXN0OF90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9sZWFzdDhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDE2X3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50X2xlYXN0MTZfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50X2xlYXN0MzJfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9sZWFzdDY0X3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50X2xlYXN0NjRfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9mYXN0OF90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9mYXN0OF90OwordXNpbmcgc3RkOjphdG9taWNfaW50X2Zhc3QxNl90OwordXNpbmcgc3RkOjphdG9taWNfdWludF9mYXN0MTZfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX2ludF9mYXN0MzJfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRfZmFzdDMyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRfZmFzdDY0X3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50X2Zhc3Q2NF90OwordXNpbmcgc3RkOjphdG9taWNfaW50cHRyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY191aW50cHRyX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19zaXplX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19wdHJkaWZmX3Q7Cit1c2luZyBzdGQ6OmF0b21pY19pbnRtYXhfdDsKK3VzaW5nIHN0ZDo6YXRvbWljX3VpbnRtYXhfdDsKKworI2Vsc2UgLyogPGF0b21pYz4gdW5hdmFpbGFibGUsIHBvc3NpYmx5IGJlY2F1c2UgdGhpcyBpcyBDLCBub3QgQysrICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKy8qCisgKiBDOiBEbyBpdCBvdXJzZWx2ZXMuCisgKiBOb3RlIHRoYXQgdGhlIHJ1bnRpbWUgcmVwcmVzZW50YXRpb24gZGVmaW5lZCBoZXJlIHNob3VsZCBiZSBjb21wYXRpYmxlCisgKiB3aXRoIHRoZSBDKysgb25lLCBpLmUuIGFuIF9BdG9taWMoVCkgbmVlZHMgdG8gY29udGFpbiB0aGUgc2FtZQorICogYml0cyBhcyBhIFQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPiAgLyogRm9yIHB0cmRpZmZfdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaW5jbHVkZSA8c3RkaW50Lmg+ICAvKiBUT0RPOiBTaG91bGQgcG9sbHV0ZSBuYW1lc3BhY2UgbGVzcy4gICAgKi8KKyNpZiBfX1NURENfVkVSU0lPTl9fID49IDIwMTExMkwKKyMgaW5jbHVkZSA8dWNoYXIuaD4gIC8qIEZvciBjaGFyMTZfdCBhbmQgY2hhcjMyX3QuICAgICAgICAgICAgICAqLworI2VuZGlmCisKKyNpZmRlZiBfX2NsYW5nX18KKyMgaWYgX19oYXNfZXh0ZW5zaW9uKGNfYXRvbWljKSB8fCBfX2hhc19leHRlbnNpb24oY3h4X2F0b21pYykKKyMgIGRlZmluZSAgICAgICBfX0NMQU5HX0FUT01JQ1MKKyMgZWxzZQorIyAgZXJyb3IgInN0ZGF0b21pYy5oIGRvZXMgbm90IHN1cHBvcnQgeW91ciBjb21waWxlciIKKyMgZW5kaWYKKyMgaWYgX19oYXNfYnVpbHRpbihfX3N5bmNfc3dhcCkKKyMgIGRlZmluZSBfX0hBU19CVUlMVElOX1NZTkNfU1dBUAorIyBlbmRpZgorI2Vsc2UKKyMgaWYgX19HTlVDX1BSRVJFUSg0LCA3KQorIyAgZGVmaW5lCV9fR05VQ19BVE9NSUNTCisjIGVsc2UKKyMgIGRlZmluZQlfX1NZTkNfQVRPTUlDUworIyAgaWZkZWYgX19jcGx1c3BsdXMKKyMgICBkZWZpbmUgICAgICAgX19BVE9NSUNTX0FWT0lEX0RPVF9JTklUCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiA3LjE3LjEgQXRvbWljIGxvY2stZnJlZSBtYWNyb3MuCisgKi8KKworI2lmZGVmIF9fR0NDX0FUT01JQ19CT09MX0xPQ0tfRlJFRQorI2RlZmluZQlBVE9NSUNfQk9PTF9MT0NLX0ZSRUUJCV9fR0NDX0FUT01JQ19CT09MX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX0JPT0xfTE9DS19GUkVFICAgICAgICAgICAyIC8qIEZvciBhbGwgbW9kZXJuIHBsYXRmb3JtcyAqLworI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX0NIQVJfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19DSEFSX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0NIQVJfTE9DS19GUkVFCisjZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfQ0hBUl9MT0NLX0ZSRUUgICAgICAgICAgIDIKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFCisjZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFICAgICAgIDIKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19DSEFSMzJfVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRQlfX0dDQ19BVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFCisjZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFICAgICAgIDIKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRQorI2RlZmluZQlBVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUJX19HQ0NfQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFCisjZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUgICAgICAgIDIKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19TSE9SVF9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRSAgICAgICAgICAyCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfSU5UX0xPQ0tfRlJFRQorI2RlZmluZQlBVE9NSUNfSU5UX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0lOVF9MT0NLX0ZSRUUKKyNlbGlmIGRlZmluZWQoX19TWU5DX0FUT01JQ1MpCisjZGVmaW5lCUFUT01JQ19JTlRfTE9DS19GUkVFICAgICAgICAgICAgMgorI2VuZGlmCisjaWZkZWYgX19HQ0NfQVRPTUlDX0xPTkdfTE9DS19GUkVFCisjZGVmaW5lCUFUT01JQ19MT05HX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0xPTkdfTE9DS19GUkVFCisjZWxpZiBkZWZpbmVkKF9fU1lOQ19BVE9NSUNTKQorI2RlZmluZQlBVE9NSUNfTE9OR19MT0NLX0ZSRUUgICAgICAgICAgIDIKKyNlbmRpZgorI2lmZGVmIF9fR0NDX0FUT01JQ19MTE9OR19MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQkJX19HQ0NfQVRPTUlDX0xMT05HX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX0xMT05HX0xPQ0tfRlJFRSAgICAgICAgICAxIC8qIG1heWJlICovCisjZW5kaWYKKyNpZmRlZiBfX0dDQ19BVE9NSUNfUE9JTlRFUl9MT0NLX0ZSRUUKKyNkZWZpbmUJQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFCV9fR0NDX0FUT01JQ19QT0lOVEVSX0xPQ0tfRlJFRQorI2VsaWYgZGVmaW5lZChfX1NZTkNfQVRPTUlDUykKKyNkZWZpbmUJQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFICAgICAgICAyCisjZW5kaWYKKworLyoKKyAqIDcuMTcuMiBJbml0aWFsaXphdGlvbi4KKyAqLworCisjaWYgZGVmaW5lZChfX0NMQU5HX0FUT01JQ1MpCisjZGVmaW5lCUFUT01JQ19WQVJfSU5JVCh2YWx1ZSkJCSh2YWx1ZSkKKyNkZWZpbmUJYXRvbWljX2luaXQob2JqLCB2YWx1ZSkJCV9fYzExX2F0b21pY19pbml0KG9iaiwgdmFsdWUpCisjZWxzZQorI2lmZGVmIF9fQVRPTUlDU19BVk9JRF9ET1RfSU5JVAorI2RlZmluZQlBVE9NSUNfVkFSX0lOSVQodmFsdWUpCQl7IHZhbHVlIH0KKyNlbHNlCisjZGVmaW5lCUFUT01JQ19WQVJfSU5JVCh2YWx1ZSkJCXsgLl9fdmFsID0gKHZhbHVlKSB9CisjZW5kaWYKKyNkZWZpbmUJYXRvbWljX2luaXQob2JqLCB2YWx1ZSkJCSgodm9pZCkoKG9iaiktPl9fdmFsID0gKHZhbHVlKSkpCisjZW5kaWYKKworLyoKKyAqIENsYW5nIGFuZCByZWNlbnQgR0NDIGJvdGggcHJvdmlkZSBwcmVkZWZpbmVkIG1hY3JvcyBmb3IgdGhlIG1lbW9yeQorICogb3JkZXJpbmdzLiAgSWYgd2UgYXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2Vzbid0IGRlZmluZSB0aGVtLCB1c2UgdGhlCisgKiBjbGFuZyB2YWx1ZXMgLSB0aGVzZSB3aWxsIGJlIGlnbm9yZWQgaW4gdGhlIGZhbGxiYWNrIHBhdGguCisgKi8KKworI2lmbmRlZiBfX0FUT01JQ19SRUxBWEVECisjZGVmaW5lIF9fQVRPTUlDX1JFTEFYRUQJCTAKKyNlbmRpZgorI2lmbmRlZiBfX0FUT01JQ19DT05TVU1FCisjZGVmaW5lIF9fQVRPTUlDX0NPTlNVTUUJCTEKKyNlbmRpZgorI2lmbmRlZiBfX0FUT01JQ19BQ1FVSVJFCisjZGVmaW5lIF9fQVRPTUlDX0FDUVVJUkUJCTIKKyNlbmRpZgorI2lmbmRlZiBfX0FUT01JQ19SRUxFQVNFCisjZGVmaW5lIF9fQVRPTUlDX1JFTEVBU0UJCTMKKyNlbmRpZgorI2lmbmRlZiBfX0FUT01JQ19BQ1FfUkVMCisjZGVmaW5lIF9fQVRPTUlDX0FDUV9SRUwJCTQKKyNlbmRpZgorI2lmbmRlZiBfX0FUT01JQ19TRVFfQ1NUCisjZGVmaW5lIF9fQVRPTUlDX1NFUV9DU1QJCTUKKyNlbmRpZgorCisvKgorICogNy4xNy4zIE9yZGVyIGFuZCBjb25zaXN0ZW5jeS4KKyAqCisgKiBUaGUgbWVtb3J5X29yZGVyXyogY29uc3RhbnRzIHRoYXQgZGVub3RlIHRoZSBiYXJyaWVyIGJlaGF2aW91ciBvZiB0aGUKKyAqIGF0b21pYyBvcGVyYXRpb25zLgorICogVGhlIGVudW0gdmFsdWVzIG11c3QgYmUgaWRlbnRpY2FsIHRvIHRob3NlIHVzZWQgYnkgdGhlCisgKiBDKysgPGF0b21pYz4gaGVhZGVyLgorICovCisKK3R5cGVkZWYgZW51bSB7CisJbWVtb3J5X29yZGVyX3JlbGF4ZWQgPSBfX0FUT01JQ19SRUxBWEVELAorCW1lbW9yeV9vcmRlcl9jb25zdW1lID0gX19BVE9NSUNfQ09OU1VNRSwKKwltZW1vcnlfb3JkZXJfYWNxdWlyZSA9IF9fQVRPTUlDX0FDUVVJUkUsCisJbWVtb3J5X29yZGVyX3JlbGVhc2UgPSBfX0FUT01JQ19SRUxFQVNFLAorCW1lbW9yeV9vcmRlcl9hY3FfcmVsID0gX19BVE9NSUNfQUNRX1JFTCwKKwltZW1vcnlfb3JkZXJfc2VxX2NzdCA9IF9fQVRPTUlDX1NFUV9DU1QKK30gbWVtb3J5X29yZGVyOworCisvKgorICogNy4xNy40IEZlbmNlcy4KKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZAorYXRvbWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXIgX19vcmRlciBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSkKK3sKKworI2lmZGVmIF9fQ0xBTkdfQVRPTUlDUworCV9fYzExX2F0b21pY190aHJlYWRfZmVuY2UoX19vcmRlcik7CisjZWxpZiBkZWZpbmVkKF9fR05VQ19BVE9NSUNTKQorCV9fYXRvbWljX3RocmVhZF9mZW5jZShfX29yZGVyKTsKKyNlbHNlCisJX19zeW5jX3N5bmNocm9uaXplKCk7CisjZW5kaWYKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY19zaWduYWxfZmVuY2UobWVtb3J5X29yZGVyIF9fb3JkZXIgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisKKyNpZmRlZiBfX0NMQU5HX0FUT01JQ1MKKwlfX2MxMV9hdG9taWNfc2lnbmFsX2ZlbmNlKF9fb3JkZXIpOworI2VsaWYgZGVmaW5lZChfX0dOVUNfQVRPTUlDUykKKwlfX2F0b21pY19zaWduYWxfZmVuY2UoX19vcmRlcik7CisjZWxzZQorCV9fYXNtIHZvbGF0aWxlICgiIiA6OjogIm1lbW9yeSIpOworI2VuZGlmCit9CisKKy8qCisgKiA3LjE3LjUgTG9jay1mcmVlIHByb3BlcnR5LgorICovCisKKyNpZiBkZWZpbmVkKF9LRVJORUwpCisvKiBBdG9taWNzIGluIGtlcm5lbHNwYWNlIGFyZSBhbHdheXMgbG9jay1mcmVlLiAqLworI2RlZmluZQlhdG9taWNfaXNfbG9ja19mcmVlKG9iaikgXAorCSgodm9pZCkob2JqKSwgKF9Cb29sKTEpCisjZWxpZiBkZWZpbmVkKF9fQ0xBTkdfQVRPTUlDUykKKyNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKKwlfX2MxMV9hdG9taWNfaXNfbG9ja19mcmVlKHNpemVvZigqKG9iaikpKQorI2VsaWYgZGVmaW5lZChfX0dOVUNfQVRPTUlDUykKKyNkZWZpbmUJYXRvbWljX2lzX2xvY2tfZnJlZShvYmopIFwKKwlfX2F0b21pY19pc19sb2NrX2ZyZWUoc2l6ZW9mKChvYmopLT5fX3ZhbCksICYob2JqKS0+X192YWwpCisjZWxzZQorI2RlZmluZQlhdG9taWNfaXNfbG9ja19mcmVlKG9iaikgXAorCSgodm9pZCkob2JqKSwgc2l6ZW9mKChvYmopLT5fX3ZhbCkgPD0gc2l6ZW9mKHZvaWQgKikpCisjZW5kaWYKKworLyoKKyAqIDcuMTcuNiBBdG9taWMgaW50ZWdlciB0eXBlcy4KKyAqLworCisjaWZuZGVmIF9fQ0xBTkdfQVRPTUlDUworLyoKKyAqIE5vIG5hdGl2ZSBzdXBwb3J0IGZvciBfQXRvbWljKCkuIFBsYWNlIG9iamVjdCBpbiBzdHJ1Y3R1cmUgdG8gcHJldmVudAorICogbW9zdCBmb3JtcyBvZiBkaXJlY3Qgbm9uLWF0b21pYyBhY2Nlc3MuCisgKi8KKyNkZWZpbmUgX0F0b21pYyhUKSAgICAgICAgICAgICAgc3RydWN0IHsgVCB2b2xhdGlsZSBfX3ZhbDsgfQorI2VuZGlmCisKK3R5cGVkZWYgX0F0b21pYyhib29sKQkJCWF0b21pY19ib29sOwordHlwZWRlZiBfQXRvbWljKGNoYXIpCQkJYXRvbWljX2NoYXI7Cit0eXBlZGVmIF9BdG9taWMoc2lnbmVkIGNoYXIpCQlhdG9taWNfc2NoYXI7Cit0eXBlZGVmIF9BdG9taWModW5zaWduZWQgY2hhcikJCWF0b21pY191Y2hhcjsKK3R5cGVkZWYgX0F0b21pYyhzaG9ydCkJCQlhdG9taWNfc2hvcnQ7Cit0eXBlZGVmIF9BdG9taWModW5zaWduZWQgc2hvcnQpCQlhdG9taWNfdXNob3J0OwordHlwZWRlZiBfQXRvbWljKGludCkJCQlhdG9taWNfaW50OwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVkIGludCkJCWF0b21pY191aW50OwordHlwZWRlZiBfQXRvbWljKGxvbmcpCQkJYXRvbWljX2xvbmc7Cit0eXBlZGVmIF9BdG9taWModW5zaWduZWQgbG9uZykJCWF0b21pY191bG9uZzsKK3R5cGVkZWYgX0F0b21pYyhsb25nIGxvbmcpCQlhdG9taWNfbGxvbmc7Cit0eXBlZGVmIF9BdG9taWModW5zaWduZWQgbG9uZyBsb25nKQlhdG9taWNfdWxsb25nOworI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMjAxMTEyTCB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCisgIHR5cGVkZWYgX0F0b21pYyhjaGFyMTZfdCkJCWF0b21pY19jaGFyMTZfdDsKKyAgdHlwZWRlZiBfQXRvbWljKGNoYXIzMl90KQkJYXRvbWljX2NoYXIzMl90OworI2VuZGlmCit0eXBlZGVmIF9BdG9taWMod2NoYXJfdCkJCWF0b21pY193Y2hhcl90OwordHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDhfdCkJCWF0b21pY19pbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9sZWFzdDhfdCkJYXRvbWljX3VpbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2xlYXN0MTZfdCkJYXRvbWljX2ludF9sZWFzdDE2X3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9sZWFzdDE2X3QpCWF0b21pY191aW50X2xlYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfbGVhc3QzMl90KQlhdG9taWNfaW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2xlYXN0MzJfdCkJYXRvbWljX3VpbnRfbGVhc3QzMl90OwordHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDY0X3QpCWF0b21pY19pbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfbGVhc3Q2NF90KQlhdG9taWNfdWludF9sZWFzdDY0X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2Zhc3Q4X3QpCQlhdG9taWNfaW50X2Zhc3Q4X3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9mYXN0OF90KQkJYXRvbWljX3VpbnRfZmFzdDhfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfZmFzdDE2X3QpCQlhdG9taWNfaW50X2Zhc3QxNl90OwordHlwZWRlZiBfQXRvbWljKHVpbnRfZmFzdDE2X3QpCWF0b21pY191aW50X2Zhc3QxNl90OwordHlwZWRlZiBfQXRvbWljKGludF9mYXN0MzJfdCkJCWF0b21pY19pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmIF9BdG9taWModWludF9mYXN0MzJfdCkJYXRvbWljX3VpbnRfZmFzdDMyX3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2Zhc3Q2NF90KQkJYXRvbWljX2ludF9mYXN0NjRfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50X2Zhc3Q2NF90KQlhdG9taWNfdWludF9mYXN0NjRfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRwdHJfdCkJCWF0b21pY19pbnRwdHJfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50cHRyX3QpCQlhdG9taWNfdWludHB0cl90OwordHlwZWRlZiBfQXRvbWljKHNpemVfdCkJCWF0b21pY19zaXplX3Q7Cit0eXBlZGVmIF9BdG9taWMocHRyZGlmZl90KQkJYXRvbWljX3B0cmRpZmZfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRtYXhfdCkJCWF0b21pY19pbnRtYXhfdDsKK3R5cGVkZWYgX0F0b21pYyh1aW50bWF4X3QpCQlhdG9taWNfdWludG1heF90OworCisvKgorICogNy4xNy43IE9wZXJhdGlvbnMgb24gYXRvbWljIHR5cGVzLgorICovCisKKy8qCisgKiBDb21waWxlci1zcGVjaWZpYyBvcGVyYXRpb25zLgorICovCisKKyNpZiBkZWZpbmVkKF9fQ0xBTkdfQVRPTUlDUykKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCVwKKyAgICBkZXNpcmVkLCBzdWNjZXNzLCBmYWlsdXJlKQkJCQkJCVwKKwlfX2MxMV9hdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCwJXAorCSAgICBzdWNjZXNzLCBmYWlsdXJlKQorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCQlcCisgICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCisJX19jMTFfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhayhvYmplY3QsIGV4cGVjdGVkLCBkZXNpcmVkLAlcCisJICAgIHN1Y2Nlc3MsIGZhaWx1cmUpCisjZGVmaW5lCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19leGNoYW5nZShvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19jMTFfYXRvbWljX2ZldGNoX2FkZChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19jMTFfYXRvbWljX2ZldGNoX2FuZChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2MxMV9hdG9taWNfZmV0Y2hfb3Iob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19mZXRjaF9zdWIob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYzExX2F0b21pY19mZXRjaF94b3Iob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBvcmRlcikJCQkJXAorCV9fYzExX2F0b21pY19sb2FkKG9iamVjdCwgb3JkZXIpCisjZGVmaW5lCWF0b21pY19zdG9yZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJCVwKKwlfX2MxMV9hdG9taWNfc3RvcmUob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikKKyNlbGlmIGRlZmluZWQoX19HTlVDX0FUT01JQ1MpCisjZGVmaW5lCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisgICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCisJX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uKCYob2JqZWN0KS0+X192YWwsIGV4cGVjdGVkLAkJXAorCSAgICBkZXNpcmVkLCAwLCBzdWNjZXNzLCBmYWlsdXJlKQorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KG9iamVjdCwgZXhwZWN0ZWQsCQlcCisgICAgZGVzaXJlZCwgc3VjY2VzcywgZmFpbHVyZSkJCQkJCQlcCisJX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uKCYob2JqZWN0KS0+X192YWwsIGV4cGVjdGVkLAkJXAorCSAgICBkZXNpcmVkLCAxLCBzdWNjZXNzLCBmYWlsdXJlKQorI2RlZmluZQlhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCVwKKwlfX2F0b21pY19leGNoYW5nZV9uKCYob2JqZWN0KS0+X192YWwsIGRlc2lyZWQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZmV0Y2hfYWRkKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYW5kX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJX19hdG9taWNfZmV0Y2hfYW5kKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQsIG9yZGVyKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwlfX2F0b21pY19mZXRjaF9vcigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2ZldGNoX3N1YigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCV9fYXRvbWljX2ZldGNoX3hvcigmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBvcmRlcikJCQkJXAorCV9fYXRvbWljX2xvYWRfbigmKG9iamVjdCktPl9fdmFsLCBvcmRlcikKKyNkZWZpbmUJYXRvbWljX3N0b3JlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQkJXAorCV9fYXRvbWljX3N0b3JlX24oJihvYmplY3QpLT5fX3ZhbCwgZGVzaXJlZCwgb3JkZXIpCisjZWxzZQorI2RlZmluZQlfX2F0b21pY19hcHBseV9zdHJpZGUob2JqZWN0LCBvcGVyYW5kKSBcCisJKCgoX190eXBlb2ZfXygob2JqZWN0KS0+X192YWwpKTApICsgKG9wZXJhbmQpKQorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCV9fZXh0ZW5zaW9uX18gKHsJCQlcCisJX190eXBlb2ZfXyhleHBlY3RlZCkgX19lcCA9IChleHBlY3RlZCk7CQkJCVwKKwlfX3R5cGVvZl9fKCpfX2VwKSBfX2UgPSAqX19lcDsJCQkJCVwKKwkodm9pZCkoc3VjY2Vzcyk7ICh2b2lkKShmYWlsdXJlKTsJCQkJXAorCShib29sKSgoKl9fZXAgPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoJihvYmplY3QpLT5fX3ZhbCwJXAorCSAgICBfX2UsIGRlc2lyZWQpKSA9PSBfX2UpOwkJCQkJXAorfSkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAkJXAorICAgIGRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCQkJCQkJXAorCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisJCWRlc2lyZWQsIHN1Y2Nlc3MsIGZhaWx1cmUpCisjaWZkZWYgX19IQVNfQlVJTFRJTl9TWU5DX1NXQVAKKy8qIENsYW5nIHByb3ZpZGVzIGEgZnVsbC1iYXJyaWVyIGF0b21pYyBleGNoYW5nZSAtIHVzZSBpdCBpZiBhdmFpbGFibGUuICovCisjZGVmaW5lCWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfc3dhcCgmKG9iamVjdCktPl9fdmFsLCBkZXNpcmVkKSkKKyNlbHNlCisvKgorICogX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCkgaXMgb25seSBhbiBhY3F1aXJlIGJhcnJpZXIgaW4gdGhlb3J5IChhbHRob3VnaCBpbgorICogcHJhY3RpY2UgaXQgaXMgdXN1YWxseSBhIGZ1bGwgYmFycmllcikgc28gd2UgbmVlZCBhbiBleHBsaWNpdCBiYXJyaWVyIGJlZm9yZQorICogaXQuCisgKi8KKyNkZWZpbmUJYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgb3JkZXIpCQlcCitfX2V4dGVuc2lvbl9fICh7CQkJCQkJCVwKKwlfX3R5cGVvZl9fKG9iamVjdCkgX19vID0gKG9iamVjdCk7CQkJCVwKKwlfX3R5cGVvZl9fKGRlc2lyZWQpIF9fZCA9IChkZXNpcmVkKTsJCQkJXAorCSh2b2lkKShvcmRlcik7CQkJCQkJCVwKKwlfX3N5bmNfc3luY2hyb25pemUoKTsJCQkJCQlcCisJX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KCYoX19vKS0+X192YWwsIF9fZCk7CQkJXAorfSkKKyNlbmRpZgorI2RlZmluZQlhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfYWRkKCYob2JqZWN0KS0+X192YWwsCQlcCisJICAgIF9fYXRvbWljX2FwcGx5X3N0cmlkZShvYmplY3QsIG9wZXJhbmQpKSkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG9yZGVyKQkJXAorCSgodm9pZCkob3JkZXIpLCBfX3N5bmNfZmV0Y2hfYW5kX2FuZCgmKG9iamVjdCktPl9fdmFsLCBvcGVyYW5kKSkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfb3IoJihvYmplY3QpLT5fX3ZhbCwgb3BlcmFuZCkpCisjZGVmaW5lCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBvcmRlcikJCVwKKwkoKHZvaWQpKG9yZGVyKSwgX19zeW5jX2ZldGNoX2FuZF9zdWIoJihvYmplY3QpLT5fX3ZhbCwJCVwKKwkgICAgX19hdG9taWNfYXBwbHlfc3RyaWRlKG9iamVjdCwgb3BlcmFuZCkpKQorI2RlZmluZQlhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgb3JkZXIpCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfeG9yKCYob2JqZWN0KS0+X192YWwsIG9wZXJhbmQpKQorI2RlZmluZQlhdG9taWNfbG9hZF9leHBsaWNpdChvYmplY3QsIG9yZGVyKQkJCQlcCisJKCh2b2lkKShvcmRlciksIF9fc3luY19mZXRjaF9hbmRfYWRkKCYob2JqZWN0KS0+X192YWwsIDApKQorI2RlZmluZQlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBvcmRlcikJCQlcCisJKCh2b2lkKWF0b21pY19leGNoYW5nZV9leHBsaWNpdChvYmplY3QsIGRlc2lyZWQsIG9yZGVyKSkKKyNlbmRpZgorCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb25zLgorICoKKyAqIERvbid0IHByb3ZpZGUgdGhlc2UgaW4ga2VybmVsIHNwYWNlLiBJbiBrZXJuZWwgc3BhY2UsIHdlIHNob3VsZCBiZQorICogZGlzY2lwbGluZWQgZW5vdWdoIHRvIGFsd2F5cyBwcm92aWRlIGV4cGxpY2l0IGJhcnJpZXJzLgorICovCisKKyNpZm5kZWYgX0tFUk5FTAorI2RlZmluZQlhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcob2JqZWN0LCBleHBlY3RlZCwgZGVzaXJlZCkJXAorCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChvYmplY3QsIGV4cGVjdGVkLAlcCisJICAgIGRlc2lyZWQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhayhvYmplY3QsIGV4cGVjdGVkLCBkZXNpcmVkKQkJXAorCWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQob2JqZWN0LCBleHBlY3RlZCwJCVwKKwkgICAgZGVzaXJlZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZXhjaGFuZ2Uob2JqZWN0LCBkZXNpcmVkKQkJCQlcCisJYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KG9iamVjdCwgZGVzaXJlZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19mZXRjaF9hZGQob2JqZWN0LCBvcGVyYW5kKQkJCQlcCisJYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZmV0Y2hfYW5kKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX29yKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9vcl9leHBsaWNpdChvYmplY3QsIG9wZXJhbmQsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZQlhdG9taWNfZmV0Y2hfc3ViKG9iamVjdCwgb3BlcmFuZCkJCQkJXAorCWF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQob2JqZWN0LCBvcGVyYW5kLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX2ZldGNoX3hvcihvYmplY3QsIG9wZXJhbmQpCQkJCVwKKwlhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KG9iamVjdCwgb3BlcmFuZCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lCWF0b21pY19sb2FkKG9iamVjdCkJCQkJCQlcCisJYXRvbWljX2xvYWRfZXhwbGljaXQob2JqZWN0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUJYXRvbWljX3N0b3JlKG9iamVjdCwgZGVzaXJlZCkJCQkJCVwKKwlhdG9taWNfc3RvcmVfZXhwbGljaXQob2JqZWN0LCBkZXNpcmVkLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNlbmRpZiAvKiAhX0tFUk5FTCAqLworCisvKgorICogNy4xNy44IEF0b21pYyBmbGFnIHR5cGUgYW5kIG9wZXJhdGlvbnMuCisgKgorICogWFhYOiBBc3N1bWUgYXRvbWljX2Jvb2wgY2FuIGJlIHVzZWQgYXMgYW4gYXRvbWljX2ZsYWcuIElzIHRoZXJlIHNvbWUKKyAqIGtpbmQgb2YgY29tcGlsZXIgYnVpbHQtaW4gdHlwZSB3ZSBjb3VsZCB1c2U/CisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCWF0b21pY19ib29sCV9fZmxhZzsKK30gYXRvbWljX2ZsYWc7CisKKyNkZWZpbmUJQVRPTUlDX0ZMQUdfSU5JVAkJeyBBVE9NSUNfVkFSX0lOSVQoZmFsc2UpIH0KKworc3RhdGljIF9faW5saW5lIGJvb2wKK2F0b21pY19mbGFnX3Rlc3RfYW5kX3NldF9leHBsaWNpdCh2b2xhdGlsZSBhdG9taWNfZmxhZyAqX19vYmplY3QsCisgICAgbWVtb3J5X29yZGVyIF9fb3JkZXIpCit7CisJcmV0dXJuIChhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQoJl9fb2JqZWN0LT5fX2ZsYWcsIDEsIF9fb3JkZXIpKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2F0b21pY19mbGFnX2NsZWFyX2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbGFnICpfX29iamVjdCwgbWVtb3J5X29yZGVyIF9fb3JkZXIpCit7CisKKwlhdG9taWNfc3RvcmVfZXhwbGljaXQoJl9fb2JqZWN0LT5fX2ZsYWcsIDAsIF9fb3JkZXIpOworfQorCisjaWZuZGVmIF9LRVJORUwKK3N0YXRpYyBfX2lubGluZSBib29sCithdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQodm9sYXRpbGUgYXRvbWljX2ZsYWcgKl9fb2JqZWN0KQoreworCisJcmV0dXJuIChhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQoX19vYmplY3QsCisJICAgIG1lbW9yeV9vcmRlcl9zZXFfY3N0KSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCithdG9taWNfZmxhZ19jbGVhcih2b2xhdGlsZSBhdG9taWNfZmxhZyAqX19vYmplY3QpCit7CisKKwlhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdChfX29iamVjdCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpOworfQorI2VuZGlmIC8qICFfS0VSTkVMICovCisKKyNlbmRpZiAvKiA8YXRvbWljPiB1bmF2YWlsYWJsZSAqLworCisjZW5kaWYgLyogIV9TVERBVE9NSUNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdGRpbnQuaCBiL2xpYmMvaW5jbHVkZS9zdGRpbnQuaAppbmRleCBiZTQ5NDg1Li5hNmY4NTA1IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3RkaW50LmgKKysrIGIvbGliYy9pbmNsdWRlL3N0ZGludC5oCkBAIC0zMCw3ICszMCwyOSBAQAogI2RlZmluZSBfU1RESU5UX0gKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3djaGFyX2xpbWl0cy5oPgorCit0eXBlZGVmIF9fc2lnbmVkIGNoYXIgX19pbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90OwordHlwZWRlZiBzaG9ydCBfX2ludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdWludDE2X3Q7Cit0eXBlZGVmIGludCBfX2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OworI2lmIF9fTFA2NF9fCit0eXBlZGVmIGxvbmcgX19pbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdWludDY0X3Q7CisjZWxzZQordHlwZWRlZiBsb25nIGxvbmcgX19pbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191aW50NjRfdDsKKyNlbmRpZgorCisjaWYgX19MUDY0X18KK3R5cGVkZWYgbG9uZyBfX2ludHB0cl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdWludHB0cl90OworI2Vsc2UKK3R5cGVkZWYgaW50IF9faW50cHRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnRwdHJfdDsKKyNlbmRpZgogCiB0eXBlZGVmIF9faW50OF90ICAgICAgaW50OF90OwogdHlwZWRlZiBfX3VpbnQ4X3QgICAgIHVpbnQ4X3Q7CkBAIC00NCw0MCArNjYsNDEgQEAKIHR5cGVkZWYgX19pbnQ2NF90ICAgICBpbnQ2NF90OwogdHlwZWRlZiBfX3VpbnQ2NF90ICAgIHVpbnQ2NF90OwogCi10eXBlZGVmIGludDhfdCAgICAgICAgaW50X2xlYXN0OF90OwotdHlwZWRlZiBpbnQ4X3QgICAgICAgIGludF9mYXN0OF90OwordHlwZWRlZiBfX2ludHB0cl90ICAgIGludHB0cl90OwordHlwZWRlZiBfX3VpbnRwdHJfdCAgIHVpbnRwdHJfdDsKIAordHlwZWRlZiBpbnQ4X3QgICAgICAgIGludF9sZWFzdDhfdDsKIHR5cGVkZWYgdWludDhfdCAgICAgICB1aW50X2xlYXN0OF90OwotdHlwZWRlZiB1aW50OF90ICAgICAgIHVpbnRfZmFzdDhfdDsKIAogdHlwZWRlZiBpbnQxNl90ICAgICAgIGludF9sZWFzdDE2X3Q7Ci10eXBlZGVmIGludDMyX3QgICAgICAgaW50X2Zhc3QxNl90OwotCiB0eXBlZGVmIHVpbnQxNl90ICAgICAgdWludF9sZWFzdDE2X3Q7Ci10eXBlZGVmIHVpbnQzMl90ICAgICAgdWludF9mYXN0MTZfdDsKIAogdHlwZWRlZiBpbnQzMl90ICAgICAgIGludF9sZWFzdDMyX3Q7Ci10eXBlZGVmIGludDMyX3QgICAgICAgaW50X2Zhc3QzMl90OwotCiB0eXBlZGVmIHVpbnQzMl90ICAgICAgdWludF9sZWFzdDMyX3Q7Ci10eXBlZGVmIHVpbnQzMl90ICAgICAgdWludF9mYXN0MzJfdDsKIAogdHlwZWRlZiBpbnQ2NF90ICAgICAgIGludF9sZWFzdDY0X3Q7Ci10eXBlZGVmIGludDY0X3QgICAgICAgaW50X2Zhc3Q2NF90OwotCiB0eXBlZGVmIHVpbnQ2NF90ICAgICAgdWludF9sZWFzdDY0X3Q7CisKK3R5cGVkZWYgaW50OF90ICAgICAgICBpbnRfZmFzdDhfdDsKK3R5cGVkZWYgdWludDhfdCAgICAgICB1aW50X2Zhc3Q4X3Q7CisKK3R5cGVkZWYgaW50NjRfdCAgICAgICBpbnRfZmFzdDY0X3Q7CiB0eXBlZGVmIHVpbnQ2NF90ICAgICAgdWludF9mYXN0NjRfdDsKIAotI2lmZGVmIF9fTFA2NF9fCi10eXBlZGVmIGxvbmcgICAgICAgICAgaW50cHRyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludHB0cl90OworI2lmIGRlZmluZWQoX19MUDY0X18pCit0eXBlZGVmIGludDY0X3QgICAgICAgaW50X2Zhc3QxNl90OwordHlwZWRlZiB1aW50NjRfdCAgICAgIHVpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmIGludDY0X3QgICAgICAgaW50X2Zhc3QzMl90OwordHlwZWRlZiB1aW50NjRfdCAgICAgIHVpbnRfZmFzdDMyX3Q7CiAjZWxzZQotdHlwZWRlZiBpbnQgICAgICAgICAgIGludHB0cl90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgIHVpbnRwdHJfdDsKK3R5cGVkZWYgaW50MzJfdCAgICAgICBpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmIHVpbnQzMl90ICAgICAgdWludF9mYXN0MTZfdDsKK3R5cGVkZWYgaW50MzJfdCAgICAgICBpbnRfZmFzdDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90ICAgICAgdWludF9mYXN0MzJfdDsKICNlbmRpZgogCi10eXBlZGVmIHVpbnQ2NF90IHVpbnRtYXhfdDsKLXR5cGVkZWYgaW50NjRfdCAgaW50bWF4X3Q7Cit0eXBlZGVmIHVpbnQ2NF90ICAgICAgdWludG1heF90OwordHlwZWRlZiBpbnQ2NF90ICAgICAgIGludG1heF90OwogCiAvKiBLZWVwIHRoZSBrZXJuZWwgZnJvbSB0cnlpbmcgdG8gZGVmaW5lIHRoZXNlIHR5cGVzLi4uICovCiAjZGVmaW5lIF9fQklUX1RZUEVTX0RFRklORURfXwpAQCAtMTEzLDcgKzEzNiw3IEBACiAjZGVmaW5lIElOVE1BWF9DKGMpICAgICAgIElOVDY0X0MoYykKICNkZWZpbmUgVUlOVE1BWF9DKGMpICAgICAgVUlOVDY0X0MoYykKIAotI2lmZGVmIF9fTFA2NF9fCisjaWYgZGVmaW5lZChfX0xQNjRfXykKICMgIGRlZmluZSBJTlQ2NF9DKGMpICAgICAgYyAjIyBMCiAjICBkZWZpbmUgVUlOVDY0X0MoYykgICAgIGMgIyMgVUwKICMgIGRlZmluZSBJTlRQVFJfQyhjKSAgICAgSU5UNjRfQyhjKQpAQCAtMTc4LDE1ICsyMDEsMTUgQEAKICNkZWZpbmUgU0lHX0FUT01JQ19NQVggICBJTlQzMl9NQVgKICNkZWZpbmUgU0lHX0FUT01JQ19NSU4gICBJTlQzMl9NSU4KIAotI2lmbmRlZiBXQ0hBUl9NQVggLyogVGhlc2UgbWlnaHQgYWxzbyBoYXZlIGJlZW4gZGVmaW5lZCBieSA8d2NoYXIuaD4uICovCi0jICBkZWZpbmUgV0NIQVJfTUFYICAgICAgSU5UMzJfTUFYCi0jICBkZWZpbmUgV0NIQVJfTUlOICAgICAgSU5UMzJfTUlOCisjaWYgZGVmaW5lZChfX1dJTlRfVU5TSUdORURfXykKKyMgIGRlZmluZSBXSU5UX01BWCAgICAgICBVSU5UMzJfTUFYCisjICBkZWZpbmUgV0lOVF9NSU4gICAgICAgMAorI2Vsc2UKKyMgIGRlZmluZSBXSU5UX01BWCAgICAgICBJTlQzMl9NQVgKKyMgIGRlZmluZSBXSU5UX01JTiAgICAgICBJTlQzMl9NSU4KICNlbmRpZgogCi0jZGVmaW5lIFdJTlRfTUFYICAgICAgICAgSU5UMzJfTUFYCi0jZGVmaW5lIFdJTlRfTUlOICAgICAgICAgSU5UMzJfTUlOCi0KLSNpZmRlZiBfX0xQNjRfXworI2lmIGRlZmluZWQoX19MUDY0X18pCiAjICBkZWZpbmUgSU5UUFRSX01JTiAgICAgSU5UNjRfTUlOCiAjICBkZWZpbmUgSU5UUFRSX01BWCAgICAgSU5UNjRfTUFYCiAjICBkZWZpbmUgVUlOVFBUUl9NQVggICAgVUlOVDY0X01BWApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N0ZGlvLmggYi9saWJjL2luY2x1ZGUvc3RkaW8uaAppbmRleCBjMjQxZDk0Li40M2IwZmJmIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3RkaW8uaAorKysgYi9saWJjL2luY2x1ZGUvc3RkaW8uaApAQCAtNTgsMTAgKzU4LDE3IEBACiAgKi8KIAogLyogc3RkaW8gYnVmZmVycyAqLworI2lmIGRlZmluZWQoX19MUDY0X18pCitzdHJ1Y3QgX19zYnVmIHsKKyAgdW5zaWduZWQgY2hhciogX2Jhc2U7CisgIHNpemVfdCBfc2l6ZTsKK307CisjZWxzZQogc3RydWN0IF9fc2J1ZiB7CiAJdW5zaWduZWQgY2hhciAqX2Jhc2U7CiAJaW50CV9zaXplOwogfTsKKyNlbmRpZgogCiAvKgogICogc3RkaW8gc3RhdGUgdmFyaWFibGVzLgpAQCAtOTQsOCArMTAxLDEzIEBACiAJdW5zaWduZWQgY2hhciAqX3A7CS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gKHNvbWUpIGJ1ZmZlciAqLwogCWludAlfcjsJCS8qIHJlYWQgc3BhY2UgbGVmdCBmb3IgZ2V0YygpICovCiAJaW50CV93OwkJLyogd3JpdGUgc3BhY2UgbGVmdCBmb3IgcHV0YygpICovCisjaWYgZGVmaW5lZChfX0xQNjRfXykKKwlpbnQJX2ZsYWdzOwkJLyogZmxhZ3MsIGJlbG93OyB0aGlzIEZJTEUgaXMgZnJlZSBpZiAwICovCisJaW50CV9maWxlOwkJLyogZmlsZW5vLCBpZiBVbml4IGRlc2NyaXB0b3IsIGVsc2UgLTEgKi8KKyNlbHNlCiAJc2hvcnQJX2ZsYWdzOwkJLyogZmxhZ3MsIGJlbG93OyB0aGlzIEZJTEUgaXMgZnJlZSBpZiAwICovCiAJc2hvcnQJX2ZpbGU7CQkvKiBmaWxlbm8sIGlmIFVuaXggZGVzY3JpcHRvciwgZWxzZSAtMSAqLworI2VuZGlmCiAJc3RydWN0CV9fc2J1ZiBfYmY7CS8qIHRoZSBidWZmZXIgKGF0IGxlYXN0IDEgYnl0ZSwgaWYgIU5VTEwpICovCiAJaW50CV9sYmZzaXplOwkvKiAwIG9yIC1fYmYuX3NpemUsIGZvciBpbmxpbmUgcHV0YyAqLwogCkBAIC0yMjMsMTIgKzIzNSw2IEBACiAJICAgIEZJTEUgKiBfX3Jlc3RyaWN0KTsKIHNzaXplX3QJIGdldGxpbmUoY2hhciAqKiBfX3Jlc3RyaWN0LCBzaXplX3QgKiBfX3Jlc3RyaWN0LCBGSUxFICogX19yZXN0cmljdCk7CiAKLSNpZiBfX0JTRF9WSVNJQkxFICYmICFkZWZpbmVkKF9fU1lTX0VSUkxJU1QpCi0jZGVmaW5lIF9fU1lTX0VSUkxJU1QKLWV4dGVybiBpbnQgc3lzX25lcnI7CQkJLyogcGVycm9yKDMpIGV4dGVybmFsIHZhcmlhYmxlcyAqLwotZXh0ZXJuIGNoYXIgKnN5c19lcnJsaXN0W107Ci0jZW5kaWYKLQogdm9pZAkgcGVycm9yKGNvbnN0IGNoYXIgKik7CiBpbnQJIHByaW50Zihjb25zdCBjaGFyICogX19yZXN0cmljdCwgLi4uKQogCQlfX3ByaW50Zmxpa2UoMSwgMik7CkBAIC0yNTAsOCArMjU2LDEzIEBACiBpbnQJIHZwcmludGYoY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIF9fdmFfbGlzdCkKIAkJX19wcmludGZsaWtlKDEsIDApOwogCitpbnQgZHByaW50ZihpbnQsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCAuLi4pIF9fcHJpbnRmbGlrZSgyLCAzKTsKK2ludCB2ZHByaW50ZihpbnQsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCBfX3ZhX2xpc3QpIF9fcHJpbnRmbGlrZSgyLCAwKTsKKwogI2lmbmRlZiBfX0FVRElUX18KKyNpZiAhZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSB8fCBfX1NURENfVkVSU0lPTl9fIDwgMjAxMTEyTAogY2hhciogZ2V0cyhjaGFyKikgX193YXJuYXR0cigiZ2V0cyBpcyB2ZXJ5IHVuc2FmZTsgY29uc2lkZXIgdXNpbmcgZmdldHMiKTsKKyNlbmRpZgogaW50IHNwcmludGYoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgLi4uKQogICAgIF9fcHJpbnRmbGlrZSgyLCAzKSBfX3dhcm5hdHRyKCJzcHJpbnRmIGlzIG9mdGVuIG1pc3VzZWQ7IHBsZWFzZSB1c2Ugc25wcmludGYiKTsKIGNoYXIqIHRtcG5hbShjaGFyKikgX193YXJuYXR0cigidG1wbmFtIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAiKTsKQEAgLTI5MywxMyArMzA0LDggQEAKICAqLwogI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19QT1NJWF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUKICNkZWZpbmUJTF9jdGVybWlkCTEwMjQJLyogc2l6ZSBmb3IgY3Rlcm1pZCgpOyBQQVRIX01BWCAqLwotI2RlZmluZSBMX2N1c2VyaWQJOQkvKiBzaXplIGZvciBjdXNlcmlkKCk7IFVUX05BTUVTSVpFICsgMSAqLwogCiBfX0JFR0lOX0RFQ0xTCi0jaWYgMCAvKiBNSVNTSU5HIEZST00gQklPTklDICovCi1jaGFyCSpjdGVybWlkKGNoYXIgKik7Ci1jaGFyCSpjdXNlcmlkKGNoYXIgKik7Ci0jZW5kaWYgLyogTUlTU0lORyAqLwogRklMRQkqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKIGludAkgZmlsZW5vKEZJTEUgKik7CiAKQEAgLTMzNiw4ICszNDIsNiBAQAogCQlfX3ByaW50Zmxpa2UoMiwgMyk7CiBjaGFyCSpmZ2V0bG4oRklMRSAqIF9fcmVzdHJpY3QsIHNpemVfdCAqIF9fcmVzdHJpY3QpOwogaW50CSBmcHVyZ2UoRklMRSAqKTsKLWludAkgZ2V0dyhGSUxFICopOwotaW50CSBwdXR3KGludCwgRklMRSAqKTsKIHZvaWQJIHNldGJ1ZmZlcihGSUxFICosIGNoYXIgKiwgaW50KTsKIGludAkgc2V0bGluZWJ1ZihGSUxFICopOwogaW50CSB2YXNwcmludGYoY2hhciAqKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKQEAgLTM1OSw5OCArMzYzLDYgQEAKICNkZWZpbmUJZndvcGVuKGNvb2tpZSwgZm4pIGZ1bm9wZW4oY29va2llLCAwLCBmbiwgMCwgMCkKICNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCiAKLS8qCi0gKiBGdW5jdGlvbnMgaW50ZXJuYWwgdG8gdGhlIGltcGxlbWVudGF0aW9uLgotICovCi1fX0JFR0lOX0RFQ0xTCi1pbnQJX19zcmdldChGSUxFICopOwotaW50CV9fc3didWYoaW50LCBGSUxFICopOwotX19FTkRfREVDTFMKLQotLyoKLSAqIFRoZSBfX3Nmb28gbWFjcm9zIGFyZSBoZXJlIHNvIHRoYXQgd2UgY2FuCi0gKiBkZWZpbmUgZnVuY3Rpb24gdmVyc2lvbnMgaW4gdGhlIEMgbGlicmFyeS4KLSAqLwotI2RlZmluZQlfX3NnZXRjKHApICgtLShwKS0+X3IgPCAwID8gX19zcmdldChwKSA6IChpbnQpKCoocCktPl9wKyspKQotI2lmIGRlZmluZWQoX19HTlVDX18pCi1zdGF0aWMgX19pbmxpbmUgaW50IF9fc3B1dGMoaW50IF9jLCBGSUxFICpfcCkgewotCWlmICgtLV9wLT5fdyA+PSAwIHx8IChfcC0+X3cgPj0gX3AtPl9sYmZzaXplICYmIChjaGFyKV9jICE9ICdcbicpKQotCQlyZXR1cm4gKCpfcC0+X3ArKyA9IF9jKTsKLQllbHNlCi0JCXJldHVybiAoX19zd2J1ZihfYywgX3ApKTsKLX0KLSNlbHNlCi0vKgotICogVGhpcyBoYXMgYmVlbiB0dW5lZCB0byBnZW5lcmF0ZSByZWFzb25hYmxlIGNvZGUgb24gdGhlIHZheCB1c2luZyBwY2MuCi0gKi8KLSNkZWZpbmUJX19zcHV0YyhjLCBwKSBcCi0JKC0tKHApLT5fdyA8IDAgPyBcCi0JCShwKS0+X3cgPj0gKHApLT5fbGJmc2l6ZSA/IFwKLQkJCSgqKHApLT5fcCA9IChjKSksICoocCktPl9wICE9ICdcbicgPyBcCi0JCQkJKGludCkqKHApLT5fcCsrIDogXAotCQkJCV9fc3didWYoJ1xuJywgcCkgOiBcCi0JCQlfX3N3YnVmKChpbnQpKGMpLCBwKSA6IFwKLQkJKCoocCktPl9wID0gKGMpLCAoaW50KSoocCktPl9wKyspKQotI2VuZGlmCi0KLSNkZWZpbmUJX19zZmVvZihwKQkoKChwKS0+X2ZsYWdzICYgX19TRU9GKSAhPSAwKQotI2RlZmluZQlfX3NmZXJyb3IocCkJKCgocCktPl9mbGFncyAmIF9fU0VSUikgIT0gMCkKLSNkZWZpbmUJX19zY2xlYXJlcnIocCkJKCh2b2lkKSgocCktPl9mbGFncyAmPSB+KF9fU0VSUnxfX1NFT0YpKSkKLSNkZWZpbmUJX19zZmlsZW5vKHApCSgocCktPl9maWxlKQotCi1leHRlcm4JaW50IF9faXN0aHJlYWRlZDsKLQotI2RlZmluZQlmZW9mKHApCQkoIV9faXN0aHJlYWRlZCA/IF9fc2Zlb2YocCkgOiAoZmVvZikocCkpCi0jZGVmaW5lCWZlcnJvcihwKQkoIV9faXN0aHJlYWRlZCA/IF9fc2ZlcnJvcihwKSA6IChmZXJyb3IpKHApKQotI2RlZmluZQljbGVhcmVycihwKQkoIV9faXN0aHJlYWRlZCA/IF9fc2NsZWFyZXJyKHApIDogKGNsZWFyZXJyKShwKSkKLQotI2lmIF9fUE9TSVhfVklTSUJMRQotI2RlZmluZQlmaWxlbm8ocCkJKCFfX2lzdGhyZWFkZWQgPyBfX3NmaWxlbm8ocCkgOiAoZmlsZW5vKShwKSkKLSNlbmRpZgotCi0jZGVmaW5lCWdldGMoZnApCSghX19pc3RocmVhZGVkID8gX19zZ2V0YyhmcCkgOiAoZ2V0YykoZnApKQotCi0jaWYgX19CU0RfVklTSUJMRQotLyoKLSAqIFRoZSBtYWNybyBpbXBsZW1lbnRhdGlvbnMgb2YgcHV0YyBhbmQgcHV0Y191bmxvY2tlZCBhcmUgbm90Ci0gKiBmdWxseSBQT1NJWCBjb21wbGlhbnQ7IHRoZXkgZG8gbm90IHNldCBlcnJubyBvbiBmYWlsdXJlCi0gKi8KLSNkZWZpbmUgcHV0Yyh4LCBmcCkJKCFfX2lzdGhyZWFkZWQgPyBfX3NwdXRjKHgsIGZwKSA6IChwdXRjKSh4LCBmcCkpCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi0jaWZuZGVmIGxpbnQKLSNpZiBfX1BPU0lYX1ZJU0lCTEUgPj0gMTk5NTA2Ci0jZGVmaW5lCWdldGNfdW5sb2NrZWQoZnApCV9fc2dldGMoZnApCi0vKgotICogVGhlIG1hY3JvIGltcGxlbWVudGF0aW9ucyBvZiBwdXRjIGFuZCBwdXRjX3VubG9ja2VkIGFyZSBub3QKLSAqIGZ1bGx5IFBPU0lYIGNvbXBsaWFudDsgdGhleSBkbyBub3Qgc2V0IGVycm5vIG9uIGZhaWx1cmUKLSAqLwotI2lmIF9fQlNEX1ZJU0lCTEUKLSNkZWZpbmUgcHV0Y191bmxvY2tlZCh4LCBmcCkJX19zcHV0Yyh4LCBmcCkKLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCi0jZW5kaWYgLyogX19QT1NJWF9WSVNJQkxFID49IDE5OTUwNiAqLwotI2VuZGlmIC8qIGxpbnQgKi8KLQotI2RlZmluZQlnZXRjaGFyKCkJZ2V0YyhzdGRpbikKLSNkZWZpbmUJcHV0Y2hhcih4KQlwdXRjKHgsIHN0ZG91dCkKLSNkZWZpbmUJZ2V0Y2hhcl91bmxvY2tlZCgpCWdldGNfdW5sb2NrZWQoc3RkaW4pCi0jZGVmaW5lCXB1dGNoYXJfdW5sb2NrZWQoYykJcHV0Y191bmxvY2tlZChjLCBzdGRvdXQpCi0KLSNpZmRlZiBfR05VX1NPVVJDRQotLyoKLSAqIGdsaWJjIGRlZmluZXMgZHByaW50ZihpbnQsIGNvbnN0IGNoYXIqLCAuLi4pLCB3aGljaCBpcyBwb29ybHkgbmFtZWQKLSAqIGFuZCBsaWtlbHkgdG8gY29uZmxpY3Qgd2l0aCBsb2NhbGx5IGRlZmluZWQgZGVidWdnaW5nIHByaW50ZnMKLSAqIGZkcHJpbnRmIGlzIGEgYmV0dGVyIG5hbWUsIGFuZCBzb21lIHByb2dyYW1zIHRoYXQgdXNlIGZkcHJpbnRmIHVzZSBhCi0gKiAjZGVmaW5lIGZkcHJpbnRmIGRwcmludGYgZm9yIGNvbXBhdGliaWxpdHkKLSAqLwotX19CRUdJTl9ERUNMUwotaW50IGZkcHJpbnRmKGludCwgY29uc3QgY2hhciosIC4uLikKLQkJX19wcmludGZsaWtlKDIsIDMpOwotaW50IHZmZHByaW50ZihpbnQsIGNvbnN0IGNoYXIqLCBfX3ZhX2xpc3QpCi0JCV9fcHJpbnRmbGlrZSgyLCAwKTsKLV9fRU5EX0RFQ0xTCi0jZW5kaWYgLyogX0dOVV9TT1VSQ0UgKi8KLQogI2lmIGRlZmluZWQoX19CSU9OSUNfRk9SVElGWSkKIAogX19CRUdJTl9ERUNMUwpAQCAtNDcwLDggKzM4MiwxMCBAQAogfQogCiAjaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jZGVmaW5lIF9fd3JhcF9zbnByaW50ZihkZXN0LCBzaXplLCAuLi4pIF9fYnVpbHRpbl9fX3NucHJpbnRmX2NoayhkZXN0LCBzaXplLCAwLCBfX2JvcyhkZXN0KSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIHNucHJpbnRmKC4uLikgX193cmFwX3NucHJpbnRmKF9fVkFfQVJHU19fKQorICAjaWYgIWRlZmluZWQoc25wcmludGYpCisgICAgI2RlZmluZSBfX3dyYXBfc25wcmludGYoZGVzdCwgc2l6ZSwgLi4uKSBfX2J1aWx0aW5fX19zbnByaW50Zl9jaGsoZGVzdCwgc2l6ZSwgMCwgX19ib3MoZGVzdCksIF9fVkFfQVJHU19fKQorICAgICNkZWZpbmUgc25wcmludGYoLi4uKSBfX3dyYXBfc25wcmludGYoX19WQV9BUkdTX18pCisgICNlbmRpZgogI2Vsc2UKIF9fQklPTklDX0ZPUlRJRllfSU5MSU5FCiBfX3ByaW50Zmxpa2UoMywgNCkKQEAgLTQ4Myw4ICszOTcsMTAgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jZGVmaW5lIF9fd3JhcF9zcHJpbnRmKGRlc3QsIC4uLikgX19idWlsdGluX19fc3ByaW50Zl9jaGsoZGVzdCwgMCwgX19ib3MoZGVzdCksIF9fVkFfQVJHU19fKQotI2RlZmluZSBzcHJpbnRmKC4uLikgX193cmFwX3NwcmludGYoX19WQV9BUkdTX18pCisgICNpZiAhZGVmaW5lZChzcHJpbnRmKQorICAgICNkZWZpbmUgX193cmFwX3NwcmludGYoZGVzdCwgLi4uKSBfX2J1aWx0aW5fX19zcHJpbnRmX2NoayhkZXN0LCAwLCBfX2JvcyhkZXN0KSwgX19WQV9BUkdTX18pCisgICAgI2RlZmluZSBzcHJpbnRmKC4uLikgX193cmFwX3NwcmludGYoX19WQV9BUkdTX18pCisgICNlbmRpZgogI2Vsc2UKIF9fQklPTklDX0ZPUlRJRllfSU5MSU5FCiBfX3ByaW50Zmxpa2UoMiwgMykKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdGRsaWIuaCBiL2xpYmMvaW5jbHVkZS9zdGRsaWIuaAppbmRleCA3MmI1NTRmLi41MmYzNzFiIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3RkbGliLmgKKysrIGIvbGliYy9pbmNsdWRlL3N0ZGxpYi5oCkBAIC00MSw0MSArNDEsNDcgQEAKICNkZWZpbmUgRVhJVF9GQUlMVVJFIDEKICNkZWZpbmUgRVhJVF9TVUNDRVNTIDAKIAotZXh0ZXJuIF9fbm9yZXR1cm4gdm9pZCBleGl0KGludCk7CiBleHRlcm4gX19ub3JldHVybiB2b2lkIGFib3J0KHZvaWQpOworZXh0ZXJuIF9fbm9yZXR1cm4gdm9pZCBleGl0KGludCk7CitleHRlcm4gX19ub3JldHVybiB2b2lkIF9FeGl0KGludCk7CiBleHRlcm4gaW50IGF0ZXhpdCh2b2lkICgqKSh2b2lkKSk7CiAKLWV4dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsKLWV4dGVybiBpbnQgcHV0ZW52KGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gaW50IHNldGVudihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKLWV4dGVybiBpbnQgdW5zZXRlbnYoY29uc3QgY2hhciAqKTsKKyNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMjAxMSB8fCBfX2NwbHVzcGx1cyA+PSAyMDExMDNMCitpbnQgYXRfcXVpY2tfZXhpdCh2b2lkICgqKSh2b2lkKSk7Cit2b2lkIHF1aWNrX2V4aXQoaW50KSBfX25vcmV0dXJuOworI2VuZGlmCisKK2V4dGVybiBjaGFyKiBnZXRlbnYoY29uc3QgY2hhciopOworZXh0ZXJuIGludCBwdXRlbnYoY2hhciopOworZXh0ZXJuIGludCBzZXRlbnYoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBpbnQpOworZXh0ZXJuIGludCB1bnNldGVudihjb25zdCBjaGFyKik7CiBleHRlcm4gaW50IGNsZWFyZW52KHZvaWQpOwogCiBleHRlcm4gY2hhciogbWtkdGVtcChjaGFyKik7CiBleHRlcm4gY2hhciogbWt0ZW1wKGNoYXIqKSBfX3dhcm5hdHRyKCJta3RlbXAgcG9zc2libHkgdXNlZCB1bnNhZmVseTsgY29uc2lkZXIgdXNpbmcgbWtzdGVtcCIpOwogZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIqKTsKK2V4dGVybiBpbnQgbWtzdGVtcDY0KGNoYXIqKTsKIAogZXh0ZXJuIGxvbmcgc3RydG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKIGV4dGVybiBsb25nIGxvbmcgc3RydG9sbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBzdHJ0b3VsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc3RydG91bGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwotZXh0ZXJuIGRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cik7CiAKIGV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24odm9pZCAqKm1lbXB0ciwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpOwogCi1zdGF0aWMgX19pbmxpbmVfXyBmbG9hdCBzdHJ0b2YoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKLXsKLSAgICByZXR1cm4gKGZsb2F0KXN0cnRvZChucHRyLCBlbmRwdHIpOwotfQorZXh0ZXJuIGRvdWJsZSBhdG9mKGNvbnN0IGNoYXIqKTsKIAotZXh0ZXJuIGludCBhdG9pKGNvbnN0IGNoYXIgKikgX19wdXJlZnVuYzsKLWV4dGVybiBsb25nIGF0b2woY29uc3QgY2hhciAqKSBfX3B1cmVmdW5jOwotZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFyICopIF9fcHVyZWZ1bmM7CitleHRlcm4gZG91YmxlIHN0cnRvZChjb25zdCBjaGFyKiwgY2hhcioqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGZsb2F0IHN0cnRvZihjb25zdCBjaGFyKiwgY2hhcioqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQoY29uc3QgY2hhciosIGNoYXIqKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKIAotc3RhdGljIF9faW5saW5lX18gZG91YmxlIGF0b2YoY29uc3QgY2hhciAqbnB0cikKLXsKLSAgICByZXR1cm4gKHN0cnRvZChucHRyLCBOVUxMKSk7Ci19CitleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZF9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgbG9jYWxlX3QpIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gbG9uZyBsb25nIHN0cnRvbGxfbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCwgbG9jYWxlX3QpIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHN0cnRvdWxsX2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQsIGxvY2FsZV90KSBfX0xJQkNfQUJJX1BVQkxJQ19fOworCitleHRlcm4gaW50IGF0b2koY29uc3QgY2hhciopIF9fcHVyZWZ1bmM7CitleHRlcm4gbG9uZyBhdG9sKGNvbnN0IGNoYXIqKSBfX3B1cmVmdW5jOworZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFyKikgX19wdXJlZnVuYzsKIAogZXh0ZXJuIGludCBhYnMoaW50KSBfX3B1cmUyOwogZXh0ZXJuIGxvbmcgbGFicyhsb25nKSBfX3B1cmUyOwpAQCAtOTgsNjEgKzEwNCw1NCBAQAogZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0IHhzdWJpWzNdKTsKIGV4dGVybiBkb3VibGUgZHJhbmQ0OCh2b2lkKTsKIGV4dGVybiB2b2lkIHNyYW5kNDgobG9uZyk7Ci1leHRlcm4gdW5zaWduZWQgaW50IGFyYzRyYW5kb20odm9pZCk7Ci1leHRlcm4gdm9pZCBhcmM0cmFuZG9tX3N0aXIodm9pZCk7Ci1leHRlcm4gdm9pZCBhcmM0cmFuZG9tX2FkZHJhbmRvbSh1bnNpZ25lZCBjaGFyICosIGludCk7CisKK3Vuc2lnbmVkIGludCBhcmM0cmFuZG9tKHZvaWQpOwordW5zaWduZWQgaW50IGFyYzRyYW5kb21fdW5pZm9ybSh1bnNpZ25lZCBpbnQpOwordm9pZCBhcmM0cmFuZG9tX2J1Zih2b2lkKiwgc2l6ZV90KTsKIAogI2RlZmluZSBSQU5EX01BWCAweDdmZmZmZmZmCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgcmFuZCh2b2lkKSB7Ci0gICAgcmV0dXJuIChpbnQpbHJhbmQ0OCgpOwotfQotc3RhdGljIF9faW5saW5lX18gdm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQgX19zKSB7Ci0gICAgc3JhbmQ0OChfX3MpOwotfQotc3RhdGljIF9faW5saW5lX18gbG9uZyByYW5kb20odm9pZCkKLXsKLSAgICByZXR1cm4gbHJhbmQ0OCgpOwotfQotc3RhdGljIF9faW5saW5lX18gdm9pZCBzcmFuZG9tKHVuc2lnbmVkIGludCBfX3MpCi17Ci0gICAgc3JhbmQ0OChfX3MpOwotfQogCi0vKiBCYXNpYyBQVFkgZnVuY3Rpb25zLiAgVGhlc2Ugb25seSB3b3JrIGlmIGRldnB0cyBpcyBtb3VudGVkISAqLworaW50IHJhbmQodm9pZCk7CitpbnQgcmFuZF9yKHVuc2lnbmVkIGludCopOwordm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwogCi1leHRlcm4gaW50ICAgIHVubG9ja3B0KGludCk7Ci1leHRlcm4gY2hhciogIHB0c25hbWUoaW50KTsKLWV4dGVybiBpbnQgICAgcHRzbmFtZV9yKGludCwgY2hhciosIHNpemVfdCk7Ci1leHRlcm4gaW50ICAgIGdldHB0KHZvaWQpOworY2hhciogaW5pdHN0YXRlKHVuc2lnbmVkIGludCwgY2hhciosIHNpemVfdCk7Citsb25nIHJhbmRvbSh2b2lkKTsKK2NoYXIqIHNldHN0YXRlKGNoYXIqKTsKK3ZvaWQgc3JhbmRvbSh1bnNpZ25lZCBpbnQpOwogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgZ3JhbnRwdChpbnQgX19mZCBfX2F0dHJpYnV0ZSgodW51c2VkKSkpCi17Ci0gICh2b2lkKV9fZmQ7Ci0gIHJldHVybiAwOyAgICAgLyogZGV2cHRzIGRvZXMgdGhpcyBhbGwgZm9yIHVzISAqLwotfQoraW50IGdldHB0KHZvaWQpOworaW50IGdyYW50cHQoaW50KTsKK2ludCBwb3NpeF9vcGVucHQoaW50KTsKK2NoYXIqIHB0c25hbWUoaW50KSBfX3dhcm5hdHRyKCJwdHNuYW1lIGlzIG5vdCB0aHJlYWQtc2FmZTsgdXNlIHB0c25hbWVfciBpbnN0ZWFkIik7CitpbnQgcHRzbmFtZV9yKGludCwgY2hhciosIHNpemVfdCk7CitpbnQgdW5sb2NrcHQoaW50KTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGludCAgcXVvdDsKICAgICBpbnQgIHJlbTsKIH0gZGl2X3Q7CiAKLWV4dGVybiBkaXZfdCAgIGRpdihpbnQsIGludCk7CitleHRlcm4gZGl2X3QgICBkaXYoaW50LCBpbnQpIF9fcHVyZTI7CiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBsb25nIGludCAgcXVvdDsKICAgICBsb25nIGludCAgcmVtOwogfSBsZGl2X3Q7CiAKLWV4dGVybiBsZGl2X3QgICBsZGl2KGxvbmcsIGxvbmcpOworZXh0ZXJuIGxkaXZfdCAgIGxkaXYobG9uZywgbG9uZykgX19wdXJlMjsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGxvbmcgbG9uZyBpbnQgIHF1b3Q7CiAgICAgbG9uZyBsb25nIGludCAgcmVtOwogfSBsbGRpdl90OwogCi1leHRlcm4gbGxkaXZfdCAgIGxsZGl2KGxvbmcgbG9uZywgbG9uZyBsb25nKTsKK2V4dGVybiBsbGRpdl90ICAgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcpIF9fcHVyZTI7CiAKLSNpZiAxIC8qIE1JU1NJTkcgRlJPTSBCSU9OSUMgLSBFTkFCTEVEIEZPUiBTVExQb3J0IGFuZCBsaWJzdGRjKystdjMgKi8KKy8qIEJTRCBjb21wYXRpYmlsaXR5LiAqLworZXh0ZXJuIGNvbnN0IGNoYXIqIGdldHByb2duYW1lKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0cHJvZ25hbWUoY29uc3QgY2hhciopOworCiAvKiBtYWtlIFNUTFBvcnQgaGFwcHkgKi8KIGV4dGVybiBpbnQgICAgICBtYmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7CiBleHRlcm4gc2l6ZV90ICAgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CkBAIC0xNjEsMTMgKzE2MCw5IEBACiAvKiBMaWtld2lzZSwgbWFrZSBsaWJzdGRjKystdjMgaGFwcHkuICAqLwogZXh0ZXJuIGludAl3Y3RvbWIoY2hhciAqLCB3Y2hhcl90KTsKIGV4dGVybiBzaXplX3QJd2NzdG9tYnMoY2hhciAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7Ci0jZW5kaWYgLyogTUlTU0lORyAqLwogCi0jZGVmaW5lIE1CX0NVUl9NQVggMQotCi0jaWYgMCAvKiBNSVNTSU5HIEZST00gQklPTklDICovCi1leHRlcm4gaW50IG9uX2V4aXQodm9pZCAoKikoaW50LCB2b2lkICopLCB2b2lkICopOwotI2VuZGlmIC8qIE1JU1NJTkcgKi8KK2V4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCh2b2lkKTsKKyNkZWZpbmUgTUJfQ1VSX01BWCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4KCkKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N0cmluZy5oIGIvbGliYy9pbmNsdWRlL3N0cmluZy5oCmluZGV4IDM3ZDIyYzQuLjhkZjY4ZTMgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zdHJpbmcuaAorKysgYi9saWJjL2luY2x1ZGUvc3RyaW5nLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDx4bG9jYWxlLmg+CiAKIF9fQkVHSU5fREVDTFMKIApAQCAtNDIsMTcgKzQzLDE3IEBACiBleHRlcm4gdm9pZCogIG1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CiBleHRlcm4gdm9pZCogIG1lbXNldCh2b2lkICosIGludCwgc2l6ZV90KTsKIGV4dGVybiB2b2lkKiAgbWVtbWVtKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBjb25zdCB2b2lkICosIHNpemVfdCkgX19wdXJlZnVuYzsKLWV4dGVybiB2b2lkICAgbWVtc3dhcCh2b2lkICosIHZvaWQgKiwgc2l6ZV90KTsKIAotZXh0ZXJuIGNoYXIqICBpbmRleChjb25zdCBjaGFyICosIGludCkgX19wdXJlZnVuYzsKIGV4dGVybiBjaGFyKiAgc3RyY2hyKGNvbnN0IGNoYXIgKiwgaW50KSBfX3B1cmVmdW5jOwogZXh0ZXJuIGNoYXIqIF9fc3RyY2hyX2Noayhjb25zdCBjaGFyICosIGludCwgc2l6ZV90KTsKIAogZXh0ZXJuIGNoYXIqICBzdHJyY2hyKGNvbnN0IGNoYXIgKiwgaW50KSBfX3B1cmVmdW5jOworZXh0ZXJuIGNoYXIqIF9fc3RycmNocl9jaGsoY29uc3QgY2hhciAqLCBpbnQsIHNpemVfdCk7CiAKIGV4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKikgX19wdXJlZnVuYzsKIGV4dGVybiBzaXplX3QgX19zdHJsZW5fY2hrKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIGV4dGVybiBpbnQgICAgc3RyY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSBfX3B1cmVmdW5jOworZXh0ZXJuIGNoYXIqICBzdHBjcHkoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCk7CiBleHRlcm4gY2hhciogIHN0cmNweShjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0KTsKIGV4dGVybiBjaGFyKiAgc3RyY2F0KGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QpOwogCkBAIC03Miw2ICs3Myw3IEBACiBleHRlcm4gY2hhciogIHN0cm5jYXQoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90KTsKIGV4dGVybiBjaGFyKiAgc3RybmR1cChjb25zdCBjaGFyICosIHNpemVfdCk7CiBleHRlcm4gaW50ICAgIHN0cm5jbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCkgX19wdXJlZnVuYzsKK2V4dGVybiBjaGFyKiAgc3RwbmNweShjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzaXplX3QpOwogZXh0ZXJuIGNoYXIqICBzdHJuY3B5KGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCk7CiAKIGV4dGVybiBzaXplX3Qgc3RybGNhdChjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzaXplX3QpOwpAQCAtODcsMTAgKzg5LDEwIEBACiBleHRlcm4gaW50ICAgIHN0cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopIF9fcHVyZWZ1bmM7CiBleHRlcm4gc2l6ZV90IHN0cnhmcm0oY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90KTsKIAotI2lmIGRlZmluZWQoX19CSU9OSUNfRk9SVElGWSkKK2V4dGVybiBpbnQgICAgc3RyY29sbF9sKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBsb2NhbGVfdCkgX19wdXJlZnVuYzsKK2V4dGVybiBzaXplX3Qgc3RyeGZybV9sKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCwgbG9jYWxlX3QpOwogCi1fX2Vycm9yZGVjbChfX21lbWNweV9kZXN0X3NpemVfZXJyb3IsICJtZW1jcHkgY2FsbGVkIHdpdGggc2l6ZSBiaWdnZXIgdGhhbiBkZXN0aW5hdGlvbiIpOwotX19lcnJvcmRlY2woX19tZW1jcHlfc3JjX3NpemVfZXJyb3IsICJtZW1jcHkgY2FsbGVkIHdpdGggc2l6ZSBiaWdnZXIgdGhhbiBzb3VyY2UiKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpCiAKIF9fQklPTklDX0ZPUlRJRllfSU5MSU5FCiB2b2lkKiBtZW1jcHkodm9pZCogX19yZXN0cmljdCBkZXN0LCBjb25zdCB2b2lkKiBfX3Jlc3RyaWN0IHNyYywgc2l6ZV90IGNvcHlfYW1vdW50KSB7CkBAIC05OSwxNCArMTAxLDYgQEAKICAgICBzaXplX3Qgc19sZW4gPSBfX2JvczAocyk7CiAgICAgc2l6ZV90IGRfbGVuID0gX19ib3MwKGQpOwogCi0gICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvcHlfYW1vdW50KSAmJiAoY29weV9hbW91bnQgPiBkX2xlbikpIHsKLSAgICAgICAgX19tZW1jcHlfZGVzdF9zaXplX2Vycm9yKCk7Ci0gICAgfQotCi0gICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvcHlfYW1vdW50KSAmJiAoY29weV9hbW91bnQgPiBzX2xlbikpIHsKLSAgICAgICAgX19tZW1jcHlfc3JjX3NpemVfZXJyb3IoKTsKLSAgICB9Ci0KICAgICByZXR1cm4gX19idWlsdGluX19fbWVtY3B5X2NoayhkZXN0LCBzcmMsIGNvcHlfYW1vdW50LCBkX2xlbik7CiB9CiAKQEAgLTExNiwyMCArMTEwLDQ0IEBACiB9CiAKIF9fQklPTklDX0ZPUlRJRllfSU5MSU5FCitjaGFyKiBzdHBjcHkoY2hhciogX19yZXN0cmljdCBkZXN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0IHNyYykgeworICAgIHJldHVybiBfX2J1aWx0aW5fX19zdHBjcHlfY2hrKGRlc3QsIHNyYywgX19ib3MoZGVzdCkpOworfQorCitfX0JJT05JQ19GT1JUSUZZX0lOTElORQogY2hhciogc3RyY3B5KGNoYXIqIF9fcmVzdHJpY3QgZGVzdCwgY29uc3QgY2hhciogX19yZXN0cmljdCBzcmMpIHsKICAgICByZXR1cm4gX19idWlsdGluX19fc3RyY3B5X2NoayhkZXN0LCBzcmMsIF9fYm9zKGRlc3QpKTsKIH0KIAotX19lcnJvcmRlY2woX19zdHJuY3B5X2Vycm9yLCAic3RybmNweSBjYWxsZWQgd2l0aCBzaXplIGJpZ2dlciB0aGFuIGJ1ZmZlciIpOworZXh0ZXJuIGNoYXIqIF9fc3RwbmNweV9jaGsyKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCwgc2l6ZV90LCBzaXplX3QpOworCitfX0JJT05JQ19GT1JUSUZZX0lOTElORQorY2hhciogc3RwbmNweShjaGFyKiBfX3Jlc3RyaWN0IGRlc3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3Qgc3JjLCBzaXplX3QgbikgeworICAgIHNpemVfdCBib3NfZGVzdCA9IF9fYm9zKGRlc3QpOworICAgIHNpemVfdCBib3Nfc3JjID0gX19ib3Moc3JjKTsKKworICAgIGlmIChib3Nfc3JjID09IF9fQklPTklDX0ZPUlRJRllfVU5LTk9XTl9TSVpFKSB7CisgICAgICAgIHJldHVybiBfX2J1aWx0aW5fX19zdHBuY3B5X2NoayhkZXN0LCBzcmMsIG4sIGJvc19kZXN0KTsKKyAgICB9CisKKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AobikgJiYgKG4gPD0gYm9zX3NyYykpIHsKKyAgICAgICAgcmV0dXJuIF9fYnVpbHRpbl9fX3N0cG5jcHlfY2hrKGRlc3QsIHNyYywgbiwgYm9zX2Rlc3QpOworICAgIH0KKworICAgIHNpemVfdCBzbGVuID0gX19idWlsdGluX3N0cmxlbihzcmMpOworICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzbGVuKSkgeworICAgICAgICByZXR1cm4gX19idWlsdGluX19fc3RwbmNweV9jaGsoZGVzdCwgc3JjLCBuLCBib3NfZGVzdCk7CisgICAgfQorCisgICAgcmV0dXJuIF9fc3RwbmNweV9jaGsyKGRlc3QsIHNyYywgbiwgYm9zX2Rlc3QsIGJvc19zcmMpOworfQorCiBleHRlcm4gY2hhciogX19zdHJuY3B5X2NoazIoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90LCBzaXplX3QsIHNpemVfdCk7CiAKIF9fQklPTklDX0ZPUlRJRllfSU5MSU5FCiBjaGFyKiBzdHJuY3B5KGNoYXIqIF9fcmVzdHJpY3QgZGVzdCwgY29uc3QgY2hhciogX19yZXN0cmljdCBzcmMsIHNpemVfdCBuKSB7CiAgICAgc2l6ZV90IGJvc19kZXN0ID0gX19ib3MoZGVzdCk7CiAgICAgc2l6ZV90IGJvc19zcmMgPSBfX2JvcyhzcmMpOwotICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSAmJiAobiA+IGJvc19kZXN0KSkgewotICAgICAgICBfX3N0cm5jcHlfZXJyb3IoKTsKLSAgICB9CiAKICAgICBpZiAoYm9zX3NyYyA9PSBfX0JJT05JQ19GT1JUSUZZX1VOS05PV05fU0laRSkgewogICAgICAgICByZXR1cm4gX19idWlsdGluX19fc3RybmNweV9jaGsoZGVzdCwgc3JjLCBuLCBib3NfZGVzdCk7CkBAIC0xNjQsNyArMTgyLDYgQEAKIAogZXh0ZXJuIHNpemVfdCBfX3N0cmxjcHlfcmVhbChjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzaXplX3QpCiAgICAgX19hc21fXyhfX1VTRVJfTEFCRUxfUFJFRklYX18gInN0cmxjcHkiKTsKLV9fZXJyb3JkZWNsKF9fc3RybGNweV9lcnJvciwgInN0cmxjcHkgY2FsbGVkIHdpdGggc2l6ZSBiaWdnZXIgdGhhbiBidWZmZXIiKTsKIGV4dGVybiBzaXplX3QgX19zdHJsY3B5X2NoayhjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzaXplX3QpOwogCiBfX0JJT05JQ19GT1JUSUZZX0lOTElORQpAQCAtMTgyLDEyICsxOTksNiBAQAogICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJiAoc2l6ZSA8PSBib3MpKSB7CiAgICAgICAgIHJldHVybiBfX3N0cmxjcHlfcmVhbChkZXN0LCBzcmMsIHNpemUpOwogICAgIH0KLQotICAgIC8vIENvbXBpbGVyIGNhbiBwcm92ZSwgYXQgY29tcGlsZSB0aW1lLCB0aGF0IHRoZSBwYXNzZWQgaW4gc2l6ZQotICAgIC8vIGlzIGFsd2F5cyA+IHRoZSBhY3R1YWwgb2JqZWN0IHNpemUuIEZvcmNlIGEgY29tcGlsZXIgZXJyb3IuCi0gICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpICYmIChzaXplID4gYm9zKSkgewotICAgICAgICBfX3N0cmxjcHlfZXJyb3IoKTsKLSAgICB9CiAjZW5kaWYgLyogIWRlZmluZWQoX19jbGFuZ19fKSAqLwogCiAgICAgcmV0dXJuIF9fc3RybGNweV9jaGsoZGVzdCwgc3JjLCBzaXplLCBib3MpOwpAQCAtMTk1LDcgKzIwNiw2IEBACiAKIGV4dGVybiBzaXplX3QgX19zdHJsY2F0X3JlYWwoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90KQogICAgIF9fYXNtX18oX19VU0VSX0xBQkVMX1BSRUZJWF9fICJzdHJsY2F0Iik7Ci1fX2Vycm9yZGVjbChfX3N0cmxjYXRfZXJyb3IsICJzdHJsY2F0IGNhbGxlZCB3aXRoIHNpemUgYmlnZ2VyIHRoYW4gYnVmZmVyIik7CiBleHRlcm4gc2l6ZV90IF9fc3RybGNhdF9jaGsoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90LCBzaXplX3QpOwogCiAKQEAgLTIxNCwxMiArMjI0LDYgQEAKICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkgJiYgKHNpemUgPD0gYm9zKSkgewogICAgICAgICByZXR1cm4gX19zdHJsY2F0X3JlYWwoZGVzdCwgc3JjLCBzaXplKTsKICAgICB9Ci0KLSAgICAvLyBDb21waWxlciBjYW4gcHJvdmUsIGF0IGNvbXBpbGUgdGltZSwgdGhhdCB0aGUgcGFzc2VkIGluIHNpemUKLSAgICAvLyBpcyBhbHdheXMgPiB0aGUgYWN0dWFsIG9iamVjdCBzaXplLiBGb3JjZSBhIGNvbXBpbGVyIGVycm9yLgotICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJiAoc2l6ZSA+IGJvcykpIHsKLSAgICAgICAgX19zdHJsY2F0X2Vycm9yKCk7Ci0gICAgfQogI2VuZGlmIC8qICFkZWZpbmVkKF9fY2xhbmdfXykgKi8KIAogICAgIHJldHVybiBfX3N0cmxjYXRfY2hrKGRlc3QsIHNyYywgc2l6ZSwgYm9zKTsKQEAgLTI2Myw4ICsyNjcsNiBAQAogICAgIHJldHVybiBfX3N0cmNocl9jaGsocywgYywgYm9zKTsKIH0KIAotZXh0ZXJuIGNoYXIqIF9fc3RycmNocl9jaGsoY29uc3QgY2hhciAqLCBpbnQsIHNpemVfdCk7Ci0KIF9fQklPTklDX0ZPUlRJRllfSU5MSU5FCiBjaGFyKiBzdHJyY2hyKGNvbnN0IGNoYXIgKnMsIGludCBjKSB7CiAgICAgc2l6ZV90IGJvcyA9IF9fYm9zKHMpOwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N0cmluZ3MuaCBiL2xpYmMvaW5jbHVkZS9zdHJpbmdzLmgKaW5kZXggZTcyNzk4Yi4uYWUyNjFjZiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N0cmluZ3MuaAorKysgYi9saWJjL2luY2x1ZGUvc3RyaW5ncy5oCkBAIC00MywyMCArNDMsMjEgQEAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIAogX19CRUdJTl9ERUNMUwotdm9pZAkgYmNvcHkoY29uc3Qgdm9pZCAqLCB2b2lkICosIHNpemVfdCk7Ci12b2lkCSBiemVybyh2b2lkICosIHNpemVfdCk7CisjaWYgZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKQorI2RlZmluZSBiY29weShiMSwgYjIsIGxlbikgXAorICAodm9pZCkoX19idWlsdGluX19fbWVtbW92ZV9jaGsoKGIyKSwgKGIxKSwgKGxlbiksIF9fYm9zMChiMikpKQorI2RlZmluZSBiemVybyhiLCBsZW4pIFwKKyAgKHZvaWQpKF9fYnVpbHRpbl9fX21lbXNldF9jaGsoKGIpLCAnXDAnLCAobGVuKSwgX19ib3MwKGIpKSkKKyNlbHNlCisjZGVmaW5lIGJjb3B5KGIxLCBiMiwgbGVuKSAodm9pZCkoX19idWlsdGluX21lbW1vdmUoKGIyKSwgKGIxKSwgKGxlbikpKQorI2RlZmluZSBiemVybyhiLCBsZW4pICh2b2lkKShfX2J1aWx0aW5fbWVtc2V0KChiKSwgJ1wwJywgKGxlbikpKQorI2VuZGlmCisKKwogaW50CSBmZnMoaW50KTsKLWNoYXIJKmluZGV4KGNvbnN0IGNoYXIgKiwgaW50KTsKIGludAkgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBpbnQJIHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKQotX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKLXZvaWQgYnplcm8gKHZvaWQgKnMsIHNpemVfdCBuKSB7Ci0gICAgX19idWlsdGluX19fbWVtc2V0X2NoayhzLCAnXDAnLCBuLCBfX2J1aWx0aW5fb2JqZWN0X3NpemUgKHMsIDApKTsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpICovCi0KIF9fRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiAhZGVmaW5lZChfU1RSSU5HU19IXykgKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvX3NpZ2RlZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvX3NpZ2RlZnMuaAppbmRleCBlYWRmN2I5Li40NGQ2MGQ5IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL19zaWdkZWZzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9fc2lnZGVmcy5oCkBAIC0zNSw2NyArMzUsNDEgQEAKICNlcnJvciBfX0JJT05JQ19TSUdERUYgbm90IGRlZmluZWQKICNlbmRpZgogCi1fX0JJT05JQ19TSUdERUYoSFVQLDEsIkhhbmd1cCIpCi1fX0JJT05JQ19TSUdERUYoSU5ULDIsIkludGVycnVwdCIpCi1fX0JJT05JQ19TSUdERUYoUVVJVCwzLCJRdWl0IikKLV9fQklPTklDX1NJR0RFRihJTEwsNCwiSWxsZWdhbCBpbnN0cnVjdGlvbiIpCi1fX0JJT05JQ19TSUdERUYoVFJBUCw1LCJUcmFwIikKLV9fQklPTklDX1NJR0RFRihBQlJULDYsIkFib3J0ZWQiKQotI2lmZGVmIF9fbWlwc19fCi1fX0JJT05JQ19TSUdERUYoRU1ULDcsIkVNVCIpCi0jZWxzZQotX19CSU9OSUNfU0lHREVGKEJVUyw3LCJCdXMgZXJyb3IiKQorX19CSU9OSUNfU0lHREVGKFNJR0hVUCwgICAgIkhhbmd1cCIpCitfX0JJT05JQ19TSUdERUYoU0lHSU5ULCAgICAiSW50ZXJydXB0IikKK19fQklPTklDX1NJR0RFRihTSUdRVUlULCAgICJRdWl0IikKK19fQklPTklDX1NJR0RFRihTSUdJTEwsICAgICJJbGxlZ2FsIGluc3RydWN0aW9uIikKK19fQklPTklDX1NJR0RFRihTSUdUUkFQLCAgICJUcmFwIikKK19fQklPTklDX1NJR0RFRihTSUdBQlJULCAgICJBYm9ydGVkIikKKyNpZmRlZiBTSUdFTVQKK19fQklPTklDX1NJR0RFRihTSUdFTVQsICAgICJFTVQiKQogI2VuZGlmCi1fX0JJT05JQ19TSUdERUYoRlBFLDgsIkZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiIpCi1fX0JJT05JQ19TSUdERUYoS0lMTCw5LCJLaWxsZWQiKQotI2lmZGVmIF9fbWlwc19fCi1fX0JJT05JQ19TSUdERUYoQlVTLDEwLCJCdXMgZXJyb3IiKQotI2Vsc2UKLV9fQklPTklDX1NJR0RFRihVU1IxLDEwLCJVc2VyIHNpZ25hbCAxIikKK19fQklPTklDX1NJR0RFRihTSUdGUEUsICAgICJGbG9hdGluZyBwb2ludCBleGNlcHRpb24iKQorX19CSU9OSUNfU0lHREVGKFNJR0tJTEwsICAgIktpbGxlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHQlVTLCAgICAiQnVzIGVycm9yIikKK19fQklPTklDX1NJR0RFRihTSUdTRUdWLCAgICJTZWdtZW50YXRpb24gZmF1bHQiKQorX19CSU9OSUNfU0lHREVGKFNJR1BJUEUsICAgIkJyb2tlbiBwaXBlIikKK19fQklPTklDX1NJR0RFRihTSUdBTFJNLCAgICJBbGFybSBjbG9jayIpCitfX0JJT05JQ19TSUdERUYoU0lHVEVSTSwgICAiVGVybWluYXRlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHVVNSMSwgICAiVXNlciBzaWduYWwgMSIpCitfX0JJT05JQ19TSUdERUYoU0lHVVNSMiwgICAiVXNlciBzaWduYWwgMiIpCitfX0JJT05JQ19TSUdERUYoU0lHQ0hMRCwgICAiQ2hpbGQgZXhpdGVkIikKK19fQklPTklDX1NJR0RFRihTSUdQV1IsICAgICJQb3dlciBmYWlsdXJlIikKK19fQklPTklDX1NJR0RFRihTSUdXSU5DSCwgICJXaW5kb3cgc2l6ZSBjaGFuZ2VkIikKK19fQklPTklDX1NJR0RFRihTSUdVUkcsICAgICJVcmdlbnQgSS9PIGNvbmRpdGlvbiIpCitfX0JJT05JQ19TSUdERUYoU0lHSU8sICAgICAiSS9PIHBvc3NpYmxlIikKK19fQklPTklDX1NJR0RFRihTSUdTVE9QLCAgICJTdG9wcGVkIChzaWduYWwpIikKK19fQklPTklDX1NJR0RFRihTSUdUU1RQLCAgICJTdG9wcGVkIikKK19fQklPTklDX1NJR0RFRihTSUdDT05ULCAgICJDb250aW51ZSIpCitfX0JJT05JQ19TSUdERUYoU0lHVFRJTiwgICAiU3RvcHBlZCAodHR5IGlucHV0KSIpCitfX0JJT05JQ19TSUdERUYoU0lHVFRPVSwgICAiU3RvcHBlZCAodHR5IG91dHB1dCkiKQorX19CSU9OSUNfU0lHREVGKFNJR1ZUQUxSTSwgIlZpcnR1YWwgdGltZXIgZXhwaXJlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHUFJPRiwgICAiUHJvZmlsaW5nIHRpbWVyIGV4cGlyZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR1hDUFUsICAgIkNQVSB0aW1lIGxpbWl0IGV4Y2VlZGVkIikKK19fQklPTklDX1NJR0RFRihTSUdYRlNaLCAgICJGaWxlIHNpemUgbGltaXQgZXhjZWVkZWQiKQorI2lmIGRlZmluZWQoU0lHU1RLRkxUKQorX19CSU9OSUNfU0lHREVGKFNJR1NUS0ZMVCwgIlN0YWNrIGZhdWx0IikKICNlbmRpZgotX19CSU9OSUNfU0lHREVGKFNFR1YsMTEsIlNlZ21lbnRhdGlvbiBmYXVsdCIpCi0jaWZkZWYgX19taXBzX18KLV9fQklPTklDX1NJR0RFRihTWVMsMTIsIkJhZCBzeXN0ZW0gY2FsbCIpCi0jZWxzZQotX19CSU9OSUNfU0lHREVGKFVTUjIsMTIsIlVzZXIgc2lnbmFsIDIiKQotI2VuZGlmCi1fX0JJT05JQ19TSUdERUYoUElQRSwxMywiQnJva2VuIHBpcGUiKQotX19CSU9OSUNfU0lHREVGKEFMUk0sMTQsIkFsYXJtIGNsb2NrIikKLV9fQklPTklDX1NJR0RFRihURVJNLDE1LCJUZXJtaW5hdGVkIikKLSNpZmRlZiBfX21pcHNfXwotX19CSU9OSUNfU0lHREVGKFVTUjEsMTYsIlVzZXIgc2lnbmFsIDEiKQotX19CSU9OSUNfU0lHREVGKFVTUjIsMTcsIlVzZXIgc2lnbmFsIDIiKQotX19CSU9OSUNfU0lHREVGKENITEQsMTgsIkNoaWxkIGV4aXRlZCIpCi1fX0JJT05JQ19TSUdERUYoUFdSLDE5LCJQb3dlciBmYWlsdXJlIikKLV9fQklPTklDX1NJR0RFRihXSU5DSCwyMCwiV2luZG93IHNpemUgY2hhbmdlZCIpCi1fX0JJT05JQ19TSUdERUYoVVJHLDIxLCJVcmdlbnQgSS9PIGNvbmRpdGlvbiIpCi1fX0JJT05JQ19TSUdERUYoSU8sMjIsIkkvTyBwb3NzaWJsZSIpCi1fX0JJT05JQ19TSUdERUYoU1RPUCwyMywiU3RvcHBlZCAoc2lnbmFsKSIpCi1fX0JJT05JQ19TSUdERUYoVFNUUCwyNCwiU3RvcHBlZCIpCi1fX0JJT05JQ19TSUdERUYoQ09OVCwyNSwiQ29udGludWUiKQotX19CSU9OSUNfU0lHREVGKFRUSU4sMjYsIlN0b3BwZWQgKHR0eSBpbnB1dCkiKQotX19CSU9OSUNfU0lHREVGKFRUT1UsMjcsIlN0b3BwZWQgKHR0eSBvdXRwdXQpIikKLV9fQklPTklDX1NJR0RFRihWVEFMUk0sMjgsIlZpcnR1YWwgdGltZXIgZXhwaXJlZCIpCi1fX0JJT05JQ19TSUdERUYoUFJPRiwyOSwiUHJvZmlsaW5nIHRpbWVyIGV4cGlyZWQiKQotX19CSU9OSUNfU0lHREVGKFhDUFUsMzAsIkNQVSB0aW1lIGxpbWl0IGV4Y2VlZGVkIikKLV9fQklPTklDX1NJR0RFRihYRlNaLDMxLCJGaWxlIHNpemUgbGltaXQgZXhjZWVkZWQiKQotI2Vsc2UKLV9fQklPTklDX1NJR0RFRihTVEtGTFQsMTYsIlN0YWNrIGZhdWx0IikKLV9fQklPTklDX1NJR0RFRihDSExELDE3LCJDaGlsZCBleGl0ZWQiKQotX19CSU9OSUNfU0lHREVGKENPTlQsMTgsIkNvbnRpbnVlIikKLV9fQklPTklDX1NJR0RFRihTVE9QLDE5LCJTdG9wcGVkIChzaWduYWwpIikKLV9fQklPTklDX1NJR0RFRihUU1RQLDIwLCJTdG9wcGVkIikKLV9fQklPTklDX1NJR0RFRihUVElOLDIxLCJTdG9wcGVkICh0dHkgaW5wdXQpIikKLV9fQklPTklDX1NJR0RFRihUVE9VLDIyLCJTdG9wcGVkICh0dHkgb3V0cHV0KSIpCi1fX0JJT05JQ19TSUdERUYoVVJHLDIzLCJVcmdlbnQgSS9PIGNvbmRpdGlvbiIpCi1fX0JJT05JQ19TSUdERUYoWENQVSwyNCwiQ1BVIHRpbWUgbGltaXQgZXhjZWVkZWQiKQotX19CSU9OSUNfU0lHREVGKFhGU1osMjUsIkZpbGUgc2l6ZSBsaW1pdCBleGNlZWRlZCIpCi1fX0JJT05JQ19TSUdERUYoVlRBTFJNLDI2LCJWaXJ0dWFsIHRpbWVyIGV4cGlyZWQiKQotX19CSU9OSUNfU0lHREVGKFBST0YsMjcsIlByb2ZpbGluZyB0aW1lciBleHBpcmVkIikKLV9fQklPTklDX1NJR0RFRihXSU5DSCwyOCwiV2luZG93IHNpemUgY2hhbmdlZCIpCi1fX0JJT05JQ19TSUdERUYoSU8sMjksIkkvTyBwb3NzaWJsZSIpCi1fX0JJT05JQ19TSUdERUYoUFdSLDMwLCJQb3dlciBmYWlsdXJlIikKLV9fQklPTklDX1NJR0RFRihTWVMsMzEsIkJhZCBzeXN0ZW0gY2FsbCIpCi0jZW5kaWYKK19fQklPTklDX1NJR0RFRihTSUdTWVMsICAgICJCYWQgc3lzdGVtIGNhbGwiKQogCiAjdW5kZWYgX19CSU9OSUNfU0lHREVGCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL19zeXN0ZW1fcHJvcGVydGllcy5oIGIvbGliYy9pbmNsdWRlL3N5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaAppbmRleCA1ZWVlN2YwLi41YTY4MWRmIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL19zeXN0ZW1fcHJvcGVydGllcy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmgKQEAgLTEzOSw2ICsxMzksMTQgQEAKICAgICAgICAgdm9pZCAoKnByb3BmbikoY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCAqY29va2llKSwKICAgICAgICAgdm9pZCAqY29va2llKTsKIAorLyogSW5pdGlhbGl6ZSB0aGUgc3lzdGVtIHByb3BlcnRpZXMgYXJlYSBpbiByZWFkIG9ubHkgbW9kZS4KKyAqIFNob3VsZCBiZSBkb25lIGJ5IGFsbCBwcm9jZXNzZXMgdGhhdCBuZWVkIHRvIHJlYWQgc3lzdGVtCisgKiBwcm9wZXJ0aWVzLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvdGhlcndpc2UuCisgKi8KK2ludCBfX3N5c3RlbV9wcm9wZXJ0aWVzX2luaXQoKTsKKwogX19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL190eXBlcy5oIGIvbGliYy9pbmNsdWRlL3N5cy9fdHlwZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQzMTNkMS4uMDAwMDAwMAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL190eXBlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoJJE9wZW5CU0Q6IF90eXBlcy5oLHYgMS4xIDIwMDYvMDEvMDYgMTg6NTM6MDUgbWlsbGVydCBFeHAgJAkqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIyl0eXBlcy5oCTguMyAoQmVya2VsZXkpIDEvNS85NAotICovCi0KLSNpZm5kZWYgX1NZU19fVFlQRVNfSF8KLSNkZWZpbmUJX1NZU19fVFlQRVNfSF8KLQotI2luY2x1ZGUgPG1hY2hpbmUvX3R5cGVzLmg+Ci0KLXR5cGVkZWYJdW5zaWduZWQgbG9uZwlfX2NwdWlkX3Q7CS8qIENQVSBpZCAqLwotdHlwZWRlZglfX3VpbnQzMl90CV9fZml4cHRfdDsJLyogZml4ZWQgcG9pbnQgbnVtYmVyICovCi10eXBlZGVmCV9fdWludDMyX3QJX19naWRfdDsJLyogZ3JvdXAgaWQgKi8KLXR5cGVkZWYJX191aW50MzJfdAlfX2lkX3Q7CQkvKiBtYXkgY29udGFpbiBwaWQsIHVpZCBvciBnaWQgKi8KLXR5cGVkZWYgX191aW50MzJfdAlfX2luX2FkZHJfdDsJLyogYmFzZSB0eXBlIGZvciBpbnRlcm5ldCBhZGRyZXNzICovCi10eXBlZGVmIF9fdWludDE2X3QJX19pbl9wb3J0X3Q7CS8qIElQIHBvcnQgdHlwZSAqLwotdHlwZWRlZglfX3VpbnQzMl90CV9faW5vX3Q7CS8qIGlub2RlIG51bWJlciAqLwotdHlwZWRlZglsb25nCQlfX2tleV90OwkvKiBJUEMga2V5IChmb3IgU3lzIFYgSVBDKSAqLwotdHlwZWRlZglfX3VpbnQzMl90CV9fbW9kZV90OwkvKiBwZXJtaXNzaW9ucyAqLwotdHlwZWRlZglfX3VpbnQzMl90CV9fbmxpbmtfdDsJLyogbGluayBjb3VudCAqLwotdHlwZWRlZglfX2ludDMyX3QJX19waWRfdDsJLyogcHJvY2VzcyBpZCAqLwotdHlwZWRlZiBfX3VpbnQ2NF90CV9fcmxpbV90OwkvKiByZXNvdXJjZSBsaW1pdCAqLwotdHlwZWRlZiBfX3VpbnQxNl90CV9fc2FfZmFtaWx5X3Q7CS8qIHNvY2thZGRyIGFkZHJlc3MgZmFtaWx5IHR5cGUgKi8KLXR5cGVkZWYJX19pbnQzMl90CV9fc2Vnc3pfdDsJLyogc2VnbWVudCBzaXplICovCi10eXBlZGVmIF9fdWludDMyX3QJX19zb2NrbGVuX3Q7CS8qIGxlbmd0aCB0eXBlIGZvciBuZXR3b3JrIHN5c2NhbGxzICovCi10eXBlZGVmCV9faW50MzJfdAlfX3N3YmxrX3Q7CS8qIHN3YXAgb2Zmc2V0ICovCi10eXBlZGVmCV9fdWludDMyX3QJX191aWRfdDsJLyogdXNlciBpZCAqLwotdHlwZWRlZglfX3VpbnQzMl90CV9fdXNlY29uZHNfdDsJLyogbWljcm9zZWNvbmRzICovCi10eXBlZGVmCV9faW50MzJfdAlfX3N1c2Vjb25kc190OwkvKiBtaWNyb3NlY29uZHMgKHNpZ25lZCkgKi8KLQotLyoKLSAqIG1ic3RhdGVfdCBpcyBhbiBvcGFxdWUgb2JqZWN0IHRvIGtlZXAgY29udmVyc2lvbiBzdGF0ZSwgZHVyaW5nIG11bHRpYnl0ZQotICogc3RyZWFtIGNvbnZlcnNpb25zLiBUaGUgY29udGVudCBtdXN0IG5vdCBiZSByZWZlcmVuY2VkIGJ5IHVzZXIgcHJvZ3JhbXMuCi0gKi8KLXR5cGVkZWYgdW5pb24gewotCWNoYXIgX19tYnN0YXRlOFsxMjhdOwotCV9faW50NjRfdCBfX21ic3RhdGVMOwkJCS8qIGZvciBhbGlnbm1lbnQgKi8KLX0gX19tYnN0YXRlX3Q7Ci0KLSNlbmRpZiAvKiAhX1NZU19fVFlQRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvYXRvbWljcy5oIGIvbGliYy9pbmNsdWRlL3N5cy9hdG9taWNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0M2JjNGIuLjAwMDAwMDAKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9hdG9taWNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIF9TWVNfQVRPTUlDU19ICi0jZGVmaW5lIF9TWVNfQVRPTUlDU19ICi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotCi1fX0JFR0lOX0RFQ0xTCi0KLS8qIE5vdGU6IGF0b21pYyBvcGVyYXRpb25zIHRoYXQgd2VyZSBleHBvcnRlZCBieSB0aGUgQyBsaWJyYXJ5IGRpZG4ndAotICogICAgICAgcHJvdmlkZSBhbnkgbWVtb3J5IGJhcnJpZXJzLCB3aGljaCBjcmVhdGVkIHBvdGVudGlhbCBpc3N1ZXMgb24KLSAqICAgICAgIG11bHRpLWNvcmUgZGV2aWNlcy4gV2Ugbm93IGRlZmluZSB0aGVtIGFzIGlubGluZWQgY2FsbHMgdG8KLSAqICAgICAgIEdDQyBzeW5jIGJ1aWx0aW5zLCB3aGljaCBhbHdheXMgcHJvdmlkZSBhIGZ1bGwgYmFycmllci4KLSAqCi0gKiAgICAgICBOT1RFOiBUaGUgQyBsaWJyYXJ5IHN0aWxsIGV4cG9ydHMgYXRvbWljIGZ1bmN0aW9ucyBieSB0aGUgc2FtZQotICogICAgICAgICAgICAgIG5hbWUgdG8gZW5zdXJlIEFCSSBzdGFiaWxpdHkgZm9yIGV4aXN0aW5nIE5ESyBtYWNoaW5lIGNvZGUuCi0gKgotICogICAgICAgSWYgeW91IGFyZSBhbiBOREsgZGV2ZWxvcGVyLCB3ZSBlbmNvdXJhZ2UgeW91IHRvIHJlYnVpbGQgeW91cgotICogICAgICAgdW5tb2RpZmllZCBzb3VyY2VzIGFnYWluc3QgdGhpcyBoZWFkZXIgYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAqLwotI2RlZmluZSBfX0FUT01JQ19JTkxJTkVfXyBzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKLQotX19BVE9NSUNfSU5MSU5FX18gaW50Ci1fX2F0b21pY19jbXB4Y2hnKGludCBvbGRfdmFsdWUsIGludCBuZXdfdmFsdWUsIHZvbGF0aWxlIGludCogcHRyKQotewotICAgIC8qIFdlIG11c3QgcmV0dXJuIDAgb24gc3VjY2VzcyAqLwotICAgIHJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAocHRyLCBvbGRfdmFsdWUsIG5ld192YWx1ZSkgIT0gb2xkX3ZhbHVlOwotfQotCi1fX0FUT01JQ19JTkxJTkVfXyBpbnQKLV9fYXRvbWljX3N3YXAoaW50IG5ld192YWx1ZSwgdm9sYXRpbGUgaW50ICpwdHIpCi17Ci0gICAgaW50IG9sZF92YWx1ZTsKLSAgICBkbyB7Ci0gICAgICAgIG9sZF92YWx1ZSA9ICpwdHI7Ci0gICAgfSB3aGlsZSAoX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKHB0ciwgb2xkX3ZhbHVlLCBuZXdfdmFsdWUpICE9IG9sZF92YWx1ZSk7Ci0gICAgcmV0dXJuIG9sZF92YWx1ZTsKLX0KLQotX19BVE9NSUNfSU5MSU5FX18gaW50Ci1fX2F0b21pY19kZWModm9sYXRpbGUgaW50ICpwdHIpCi17Ci0gIHJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX3N1YiAocHRyLCAxKTsKLX0KLQotX19BVE9NSUNfSU5MSU5FX18gaW50Ci1fX2F0b21pY19pbmModm9sYXRpbGUgaW50ICpwdHIpCi17Ci0gIHJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX2FkZCAocHRyLCAxKTsKLX0KLQotCi1pbnQgX19mdXRleF93YWl0KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0aW1lb3V0KTsKLWludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpOwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX1NZU19BVE9NSUNTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnMuaAppbmRleCBiNGRhZDc0Li45YThkZmRkIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2NkZWZzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9jZGVmcy5oCkBAIC0zOCwyMiArMzgsNDAgQEAKICNkZWZpbmUJX1NZU19DREVGU19IXwogCiAvKgorICogVGVzdGluZyBhZ2FpbnN0IENsYW5nLXNwZWNpZmljIGV4dGVuc2lvbnMuCisgKi8KKworI2lmbmRlZiBfX2hhc19leHRlbnNpb24KKyNkZWZpbmUgX19oYXNfZXh0ZW5zaW9uICAgICAgICAgX19oYXNfZmVhdHVyZQorI2VuZGlmCisjaWZuZGVmIF9faGFzX2ZlYXR1cmUKKyNkZWZpbmUgX19oYXNfZmVhdHVyZSh4KSAgICAgICAgMAorI2VuZGlmCisjaWZuZGVmIF9faGFzX2luY2x1ZGUKKyNkZWZpbmUgX19oYXNfaW5jbHVkZSh4KSAgICAgICAgMAorI2VuZGlmCisjaWZuZGVmIF9faGFzX2J1aWx0aW4KKyNkZWZpbmUgX19oYXNfYnVpbHRpbih4KSAgICAgICAgMAorI2VuZGlmCisKKworLyoKICAqIE1hY3JvIHRvIHRlc3QgaWYgd2UncmUgdXNpbmcgYSBHTlUgQyBjb21waWxlciBvZiBhIHNwZWNpZmljIHZpbnRhZ2UKICAqIG9yIGxhdGVyLCBmb3IgZS5nLiBmZWF0dXJlcyB0aGF0IGFwcGVhcmVkIGluIGEgcGFydGljdWxhciB2ZXJzaW9uCiAgKiBvZiBHTlUgQy4gIFVzYWdlOgogICoKLSAqCSNpZiBfX0dOVUNfUFJFUkVRX18obWFqb3IsIG1pbm9yKQorICoJI2lmIF9fR05VQ19QUkVSRVEobWFqb3IsIG1pbm9yKQogICoJLi4uY29vbCBmZWF0dXJlLi4uCiAgKgkjZWxzZQogICoJLi4uZGVsZXRlIGZlYXR1cmUuLi4KICAqCSNlbmRpZgogICovCiAjaWZkZWYgX19HTlVDX18KLSNkZWZpbmUJX19HTlVDX1BSRVJFUV9fKHgsIHkpCQkJCQkJXAorI2RlZmluZQlfX0dOVUNfUFJFUkVRKHgsIHkpCQkJCQkJXAogCSgoX19HTlVDX18gPT0gKHgpICYmIF9fR05VQ19NSU5PUl9fID49ICh5KSkgfHwJCQlcCiAJIChfX0dOVUNfXyA+ICh4KSkpCiAjZWxzZQotI2RlZmluZQlfX0dOVUNfUFJFUkVRX18oeCwgeSkJMAorI2RlZmluZQlfX0dOVUNfUFJFUkVRKHgsIHkpCTAKICNlbmRpZgogCiAjaW5jbHVkZSA8c3lzL2NkZWZzX2VsZi5oPgpAQCAtMTQ1LDcgKzE2Myw3IEBACiAgKiBHQ0MyIHByb3ZpZGVzIF9fZXh0ZW5zaW9uX18gdG8gc3VwcHJlc3Mgd2FybmluZ3MgZm9yIHZhcmlvdXMgR05VIEMKICAqIGxhbmd1YWdlIGV4dGVuc2lvbnMgdW5kZXIgIi1hbnNpIC1wZWRhbnRpYyIuCiAgKi8KLSNpZiAhX19HTlVDX1BSRVJFUV9fKDIsIDApCisjaWYgIV9fR05VQ19QUkVSRVEoMiwgMCkKICNkZWZpbmUJX19leHRlbnNpb25fXwkJLyogZGVsZXRlIF9fZXh0ZW5zaW9uX18gaWYgbm9uLWdjYyBvciBnY2MxICovCiAjZW5kaWYKIApAQCAtMTU3LDcgKzE3NSw3IEBACiAgKiB0aGVzZSB3b3JrIGZvciBHTlUgQysrIChtb2R1bG8gYSBzbGlnaHQgZ2xpdGNoIGluIHRoZSBDKysgZ3JhbW1hcgogICogaW4gdGhlIGRpc3RyaWJ1dGlvbiB2ZXJzaW9uIG9mIDIuNS41KS4KICAqLwotI2lmICFfX0dOVUNfUFJFUkVRX18oMiwgNSkKKyNpZiAhX19HTlVDX1BSRVJFUSgyLCA1KQogI2RlZmluZQlfX2F0dHJpYnV0ZV9fKHgpCS8qIGRlbGV0ZSBfX2F0dHJpYnV0ZV9fIGlmIG5vbi1nY2Mgb3IgZ2NjMSAqLwogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKICNkZWZpbmUJX19kZWFkCQlfX3ZvbGF0aWxlCkBAIC0xNzEsNyArMTg5LDcgQEAKICNkZWZpbmUJX19wdXJlCiAjZW5kaWYKIAotI2lmIF9fR05VQ19QUkVSRVFfXygyLCA3KQorI2lmIF9fR05VQ19QUkVSRVEoMiwgNykKICNkZWZpbmUJX191bnVzZWQJX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCiAjZWxzZQogI2RlZmluZQlfX3VudXNlZAkvKiBkZWxldGUgKi8KQEAgLTE3OSwxMyArMTk3LDEzIEBACiAKICNkZWZpbmUgX19wdXJlMiBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKSAvKiBBbmRyb2lkLWFkZGVkOiB1c2VkIGJ5IEZyZWVCU0QgbGlibSAqLwogCi0jaWYgX19HTlVDX1BSRVJFUV9fKDMsIDEpCisjaWYgX19HTlVDX1BSRVJFUSgzLCAxKQogI2RlZmluZQlfX3VzZWQJCV9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkKICNlbHNlCiAjZGVmaW5lCV9fdXNlZAkJLyogZGVsZXRlICovCiAjZW5kaWYKIAotI2lmIF9fR05VQ19QUkVSRVFfXygyLCA3KQorI2lmIF9fR05VQ19QUkVSRVEoMiwgNykKICNkZWZpbmUJX19wYWNrZWQJX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpCiAjZGVmaW5lCV9fYWxpZ25lZCh4KQlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyh4KSkpCiAjZGVmaW5lCV9fc2VjdGlvbih4KQlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXyh4KSkpCkBAIC0xOTksMTEgKzIxNywxMSBAQAogI2RlZmluZQlfX3NlY3Rpb24oeCkJZXJyb3I6IG5vIF9fc2VjdGlvbiBmb3IgdGhpcyBjb21waWxlcgogI2VuZGlmCiAKLSNpZiAhX19HTlVDX1BSRVJFUV9fKDIsIDgpCisjaWYgIV9fR05VQ19QUkVSRVEoMiwgOCkKICNkZWZpbmUJX19leHRlbnNpb25fXwogI2VuZGlmCiAKLSNpZiBfX0dOVUNfUFJFUkVRX18oMiwgOCkKKyNpZiBfX0dOVUNfUFJFUkVRKDIsIDgpCiAjZGVmaW5lIF9fc3RhdGVtZW50KHgpCV9fZXh0ZW5zaW9uX18oeCkKICNlbGlmIGRlZmluZWQobGludCkKICNkZWZpbmUgX19zdGF0ZW1lbnQoeCkJKDApCkBAIC0yMjMsNyArMjQxLDcgQEAKICNpZiBkZWZpbmVkKF9fU1REQ19fVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKICNkZWZpbmUJX19yZXN0cmljdAlyZXN0cmljdAogI2Vsc2UKLSNpZiAhX19HTlVDX1BSRVJFUV9fKDIsIDkyKQorI2lmICFfX0dOVUNfUFJFUkVRKDIsIDkyKQogI2RlZmluZQlfX3Jlc3RyaWN0CS8qIGRlbGV0ZSBfX3Jlc3RyaWN0IHdoZW4gbm90IHN1cHBvcnRlZCAqLwogI2VuZGlmCiAjZW5kaWYKQEAgLTIzMyw5ICsyNTEsOSBAQAogICogaW4gR0NDIDIuOTUuCiAgKi8KICNpZiAhZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSB8fCAhKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKLSNpZiBfX0dOVUNfUFJFUkVRX18oMiwgNikKKyNpZiBfX0dOVUNfUFJFUkVRKDIsIDYpCiAjZGVmaW5lCV9fZnVuY19fCV9fUFJFVFRZX0ZVTkNUSU9OX18KLSNlbGlmIF9fR05VQ19QUkVSRVFfXygyLCA0KQorI2VsaWYgX19HTlVDX1BSRVJFUSgyLCA0KQogI2RlZmluZQlfX2Z1bmNfXwlfX0ZVTkNUSU9OX18KICNlbHNlCiAjZGVmaW5lCV9fZnVuY19fCSIiCkBAIC0yNjgsNyArMjg2LDcgQEAKICAqIHJlZ2lzdGVyIHZhbHVlcy4gVGhpcyBpcyBnY2Mgc3BlY2lmaWMsIHRoZSB2ZXJzaW9uIGlzIG1vcmUgb3IgbGVzcwogICogYXJiaXRyYXJ5LCBtaWdodCB3b3JrIHdpdGggb2xkZXIgY29tcGlsZXJzLgogICovCi0jaWYgX19HTlVDX1BSRVJFUV9fKDIsIDk1KQorI2lmIF9fR05VQ19QUkVSRVEoMiwgOTUpCiAjZGVmaW5lCV9faW5zbl9iYXJyaWVyKCkJX19hc20gX192b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQogI2Vsc2UKICNkZWZpbmUJX19pbnNuX2JhcnJpZXIoKQkvKiAqLwpAQCAtMzAyLDcgKzMyMCw3IEBACiAgKgkgIGJhc2ljIGJsb2NrIHJlb3JkZXJpbmcgdGhhdCB0aGlzIGFmZmVjdHMgY2FuIG9mdGVuIGdlbmVyYXRlCiAgKgkgIGxhcmdlciBjb2RlLgogICovCi0jaWYgX19HTlVDX1BSRVJFUV9fKDIsIDk2KQorI2lmIF9fR05VQ19QUkVSRVEoMiwgOTYpCiAjZGVmaW5lCV9fcHJlZGljdF90cnVlKGV4cCkJX19idWlsdGluX2V4cGVjdCgoZXhwKSAhPSAwLCAxKQogI2RlZmluZQlfX3ByZWRpY3RfZmFsc2UoZXhwKQlfX2J1aWx0aW5fZXhwZWN0KChleHApICE9IDAsIDApCiAjZWxzZQpAQCAtMzEwLDcgKzMyOCw3IEBACiAjZGVmaW5lCV9fcHJlZGljdF9mYWxzZShleHApCShleHApCiAjZW5kaWYKIAotI2lmIF9fR05VQ19QUkVSRVFfXygyLCA5NikKKyNpZiBfX0dOVUNfUFJFUkVRKDIsIDk2KQogI2RlZmluZSBfX25vcmV0dXJuICAgIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCiAjZGVmaW5lIF9fbWFsbG9jZnVuYyAgX19hdHRyaWJ1dGVfXygobWFsbG9jKSkKICNkZWZpbmUgX19wdXJlZnVuYyAgICBfX2F0dHJpYnV0ZV9fKChwdXJlKSkKQEAgLTMyMCwxOSArMzM4LDE5IEBACiAjZGVmaW5lIF9fcHVyZWZ1bmMKICNlbmRpZgogCi0jaWYgX19HTlVDX1BSRVJFUV9fKDMsIDEpCisjaWYgX19HTlVDX1BSRVJFUSgzLCAxKQogI2RlZmluZSBfX2Fsd2F5c19pbmxpbmUgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQogI2Vsc2UKICNkZWZpbmUgX19hbHdheXNfaW5saW5lCiAjZW5kaWYKIAotI2lmIF9fR05VQ19QUkVSRVFfXygzLCA0KQorI2lmIF9fR05VQ19QUkVSRVEoMywgNCkKICNkZWZpbmUgX193dXIgX19hdHRyaWJ1dGVfXygoX193YXJuX3VudXNlZF9yZXN1bHRfXykpCiAjZWxzZQogI2RlZmluZSBfX3d1cgogI2VuZGlmCiAKLSNpZiBfX0dOVUNfUFJFUkVRX18oNCwgMykKKyNpZiBfX0dOVUNfUFJFUkVRKDQsIDMpCiAjZGVmaW5lIF9fZXJyb3JkZWNsKG5hbWUsIG1zZykgZXh0ZXJuIHZvaWQgbmFtZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChfX2Vycm9yX18obXNnKSkpCiAjZGVmaW5lIF9fd2FybmF0dHIobXNnKSBfX2F0dHJpYnV0ZV9fKChfX3dhcm5pbmdfXyhtc2cpKSkKICNlbHNlCkBAIC01MjgsNiArNTQ2LDEzIEBACiAjZGVmaW5lICBfX0JJT05JQ19fICAgMQogI2luY2x1ZGUgPGFuZHJvaWQvYXBpLWxldmVsLmg+CiAKKy8qIGdsaWJjIGNvbXBhdGliaWxpdHkuICovCisjaWYgX19MUDY0X18KKyNkZWZpbmUgX19XT1JEU0laRSA2NAorI2Vsc2UKKyNkZWZpbmUgX19XT1JEU0laRSAzMgorI2VuZGlmCisKIC8qCiAgKiBXaGVuIF9GT1JUSUZZX1NPVVJDRSBpcyBkZWZpbmVkLCBhdXRvbWF0aWMgYm91bmRzIGNoZWNraW5nIGlzCiAgKiBhZGRlZCB0byBjb21tb25seSB1c2VkIGxpYmMgZnVuY3Rpb25zLiBJZiBhIGJ1ZmZlciBvdmVycnVuIGlzCkBAIC01NDYsNyArNTcxLDcgQEAKICNkZWZpbmUgX19ib3MwKHMpIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSgocyksIDApCiAKICNkZWZpbmUgX19CSU9OSUNfRk9SVElGWV9JTkxJTkUgXAotICAgIGV4dGVybiBpbmxpbmUgXAorICAgIGV4dGVybiBfX2lubGluZV9fIFwKICAgICBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpIFwKICAgICBfX2F0dHJpYnV0ZV9fICgoZ251X2lubGluZSkpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnNfZWxmLmggYi9saWJjL2luY2x1ZGUvc3lzL2NkZWZzX2VsZi5oCmluZGV4IGJiODQ2YjcuLjRkZDdkYzMgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnNfZWxmLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9jZGVmc19lbGYuaApAQCAtNjEsMjQgKzYxLDE4IEBACiAjZGVmaW5lCV9fU0VDVElPTlNUUklORyhfc2VjLCBfc3RyKQkJCQkJXAogCV9fYXNtX18oIi5zZWN0aW9uICIgI19zZWMgIlxuXHQuYXNjaXogXCIiIF9zdHIgIlwiXG5cdC5wcmV2aW91cyIpCiAKLS8qIEdDQyB2aXNpYmlsaXR5IGhlbHBlciBtYWNybyAqLwotLyogVGhpcyBtdXN0IGJlIHVzZWQgdG8gdGFnIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHByaXZhdGUsIGkuZS4KLSAqIG5ldmVyIGV4cG9zZWQgYnkgdGhlIHNoYXJlZCBsaWJyYXJ5LiAqLwotI2RlZmluZSBfX0xJQkNfSElEREVOX18JCQkJCQkJXAotCV9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQorLyogVXNlZCB0byB0YWcgbm9uLXN0YXRpYyBzeW1ib2xzIHRoYXQgYXJlIHByaXZhdGUgYW5kIG5ldmVyIGV4cG9zZWQgYnkgdGhlIHNoYXJlZCBsaWJyYXJ5LiAqLworI2RlZmluZSBfX0xJQkNfSElEREVOX18gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKIAotLyogVGhpcyBtdXN0IGJlIHVzZWQgdG8gdGFnIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHB1YmxpYywgaS5lLgotICogZXhwb3NlZCBieSB0aGUgc2hhcmVkIGxpYnJhcnksIGFuZCBwYXJ0IG9mIHRoZSBzdGFibGUgTkRLIEFCSSAqLwotI2RlZmluZSBfX0xJQkNfQUJJX1BVQkxJQ19fIFwKLSAgICAgICAgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorLyogTGlrZSBfX0xJQkNfSElEREVOX18sIGJ1dCBwcmVzZXJ2ZXMgYmluYXJ5IGNvbXBhdGliaWxpdHkgZm9yIExQMzIuICovCisjaWZkZWYgX19MUDY0X18KKyNkZWZpbmUgX19MSUJDNjRfSElEREVOX18gX19MSUJDX0hJRERFTl9fCisjZWxzZQorI2RlZmluZSBfX0xJQkM2NF9ISURERU5fXyBfX0xJQkNfQUJJX1BVQkxJQ19fCisjZW5kaWYKIAotLyogVGhpcyBtdXN0IGJlIHVzZWQgdG8gdGFnIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgbXVzdCBiZSBleHBvcnRlZAotICogYnkgdGhlIHNoYXJlZCBsaWJyYXJ5LCBidXQgd2hvc2UgaW1wbGVtZW50YXRpb24gaXMgcHJpdmF0ZSB0byB0aGUKLSAqIHBsYXRmb3JtLiBGb3Igbm93IHRoaXMgaXMgZXF1aXZhbGVudCB0byBfX0xJQkNfQUJJX1BVQkxJQ19fLCBidXQgd2UKLSAqIG1heSB3YW50IHRvIGNoYW5nZSB0aGlzIGxhdGVyLgotICovCi0jZGVmaW5lIF9fTElCQ19BQklfUFJJVkFURV9fIFwKLSAgICAgICAgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQorLyogVXNlZCB0byB0YWcgbm9uLXN0YXRpYyBzeW1ib2xzIHRoYXQgYXJlIHB1YmxpYyBhbmQgZXhwb3NlZCBieSB0aGUgc2hhcmVkIGxpYnJhcnkuICovCisjZGVmaW5lIF9fTElCQ19BQklfUFVCTElDX18gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAKICNkZWZpbmUJX19JRFNUUklORyhfbixfcykJCV9fU0VDVElPTlNUUklORyguaWRlbnQsX3MpCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZW5kaWFuLmggYi9saWJjL2luY2x1ZGUvc3lzL2VuZGlhbi5oCmluZGV4IGIwMzY1ZDguLmJlNGM5MDUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvZW5kaWFuLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9lbmRpYW4uaApAQCAtMzgsNyArMzgsOCBAQAogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KLSNpbmNsdWRlIDxtYWNoaW5lL190eXBlcy5oPgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CiAKICNkZWZpbmUgX0xJVFRMRV9FTkRJQU4JMTIzNAogI2RlZmluZSBfQklHX0VORElBTgk0MzIxCkBAIC0xODcsMTQgKzE4OCwyMiBAQAogI2RlZmluZSBsZXRvaDY0KHgpICh4KQogI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KIAotI2RlZmluZSBodG9ucyh4KSBfX3N3YXAxNih4KQorLyogZ2xpYmMgY29tcGF0aWJpbGl0eS4gKi8KK19fQkVHSU5fREVDTFMKK3VpbnQzMl90IGh0b25sKHVpbnQzMl90KSBfX3B1cmUyOwordWludDE2X3QgaHRvbnModWludDE2X3QpIF9fcHVyZTI7Cit1aW50MzJfdCBudG9obCh1aW50MzJfdCkgX19wdXJlMjsKK3VpbnQxNl90IG50b2hzKHVpbnQxNl90KSBfX3B1cmUyOworX19FTkRfREVDTFMKKwogI2RlZmluZSBodG9ubCh4KSBfX3N3YXAzMih4KQotI2RlZmluZSBudG9ocyh4KSBfX3N3YXAxNih4KQorI2RlZmluZSBodG9ucyh4KSBfX3N3YXAxNih4KQogI2RlZmluZSBudG9obCh4KSBfX3N3YXAzMih4KQorI2RlZmluZSBudG9ocyh4KSBfX3N3YXAxNih4KQogCiAvKiBCaW9uaWMgYWRkaXRpb25zICovCi0jZGVmaW5lIG50b2hxKHgpIF9fc3dhcDY0KHgpCiAjZGVmaW5lIGh0b25xKHgpIF9fc3dhcDY0KHgpCisjZGVmaW5lIG50b2hxKHgpIF9fc3dhcDY0KHgpCiAKICNkZWZpbmUgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZXBvbGwuaCBiL2xpYmMvaW5jbHVkZS9zeXMvZXBvbGwuaAppbmRleCBjMDZhMDgxLi40YTVhMzdjIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2Vwb2xsLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9lcG9sbC5oCkBAIC02Nyw3ICs2NywxMSBAQAogc3RydWN0IGVwb2xsX2V2ZW50IHsKICAgdWludDMyX3QgZXZlbnRzOwogICBlcG9sbF9kYXRhX3QgZGF0YTsKLX07Cit9CisjaWZkZWYgX194ODZfNjRfXworX19wYWNrZWQKKyNlbmRpZgorOwogCiBpbnQgZXBvbGxfY3JlYXRlKGludCk7CiBpbnQgZXBvbGxfY3JlYXRlMShpbnQpOwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9leGVjX2VsZi5oIGIvbGliYy9pbmNsdWRlL3N5cy9leGVjX2VsZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzE0NjdjLi4wMDAwMDAwCi0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvZXhlY19lbGYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNjcgKzAsMCBAQAotLyoJJE5ldEJTRDogZXhlY19lbGYuaCx2IDEuMTMxIDIwMTMvMTAvMjkgMDA6MjI6NTkgY2hyaXN0b3MgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBDaHJpc3RvcyBab3VsYXMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwotICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfU1lTX0VYRUNfRUxGX0hfCi0jZGVmaW5lIF9TWVNfRVhFQ19FTEZfSF8KLQotLyoKLSAqIFRoZSBjdXJyZW50IEVMRiBBQkkgc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgYXQ6Ci0gKglodHRwOi8vd3d3LnNjby5jb20vZGV2ZWxvcGVycy9nYWJpLwotICoKLSAqIEN1cnJlbnQgaGVhZGVyIGRlZmluaXRpb25zIGFyZSBpbjoKLSAqCWh0dHA6Ly93d3cuc2NvLmNvbS9kZXZlbG9wZXJzL2dhYmkvbGF0ZXN0L2NoNC5laGVhZGVyLmh0bWwKLSAqLwotCi0jaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9TVEFOREFMT05FKQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2VuZGlmIC8qIF9LRVJORUwgfHwgX1NUQU5EQUxPTkUgKi8KLQotI2lmIEhBVkVfTkJUT09MX0NPTkZJR19ICi0jaW5jbHVkZSA8bmJpbmNsdWRlL21hY2hpbmUvZWxmX21hY2hkZXAuaD4KLSNlbHNlCi0jaW5jbHVkZSA8bWFjaGluZS9lbGZfbWFjaGRlcC5oPgotI2VuZGlmCi0KLXR5cGVkZWYgdWludDhfdAkJRWxmX0J5dGU7Ci0KLXR5cGVkZWYgdWludDMyX3QJRWxmMzJfQWRkcjsKLSNkZWZpbmUgRUxGMzJfRlNaX0FERFIJNAotdHlwZWRlZiB1aW50MzJfdAlFbGYzMl9PZmY7Ci10eXBlZGVmIGludDMyX3QJCUVsZjMyX1NPZmY7Ci0jZGVmaW5lIEVMRjMyX0ZTWl9PRkYJNAotdHlwZWRlZiBpbnQzMl90CQlFbGYzMl9Td29yZDsKLSNkZWZpbmUgRUxGMzJfRlNaX1NXT1JEIDQKLXR5cGVkZWYgdWludDMyX3QJRWxmMzJfV29yZDsKLSNkZWZpbmUgRUxGMzJfRlNaX1dPUkQJNAotdHlwZWRlZiB1aW50MTZfdAlFbGYzMl9IYWxmOwotI2RlZmluZSBFTEYzMl9GU1pfSEFMRgkyCi10eXBlZGVmIHVpbnQ2NF90CUVsZjMyX0x3b3JkOwotI2RlZmluZSBFTEYzMl9GU1pfTFdPUkQgOAotCi10eXBlZGVmIHVpbnQ2NF90CUVsZjY0X0FkZHI7Ci0jZGVmaW5lIEVMRjY0X0ZTWl9BRERSCTgKLXR5cGVkZWYgdWludDY0X3QJRWxmNjRfT2ZmOwotdHlwZWRlZiBpbnQ2NF90CQlFbGY2NF9TT2ZmOwotI2RlZmluZSBFTEY2NF9GU1pfT0ZGCTgKLXR5cGVkZWYgaW50MzJfdAkJRWxmNjRfU2hhbGY7Ci0jZGVmaW5lIEVMRjY0X0ZTWl9TSEFMRiA0Ci0KLXR5cGVkZWYgaW50MzJfdAkJRWxmNjRfU3dvcmQ7Ci0jZGVmaW5lIEVMRjY0X0ZTWl9TV09SRCA0Ci10eXBlZGVmIHVpbnQzMl90CUVsZjY0X1dvcmQ7Ci0jZGVmaW5lIEVMRjY0X0ZTWl9XT1JECTQKLQotdHlwZWRlZiBpbnQ2NF90CQlFbGY2NF9TeHdvcmQ7Ci0jZGVmaW5lIEVMRjY0X0ZTWl9TWFdPUkQgOAotdHlwZWRlZiB1aW50NjRfdAlFbGY2NF9Yd29yZDsKLSNkZWZpbmUgRUxGNjRfRlNaX1hXT1JEIDgKLXR5cGVkZWYgdWludDY0X3QJRWxmNjRfTHdvcmQ7Ci0jZGVmaW5lIEVMRjY0X0ZTWl9MV09SRCA4Ci10eXBlZGVmIHVpbnQxNl90CUVsZjY0X0hhbGY7Ci0jZGVmaW5lIEVMRjY0X0ZTWl9IQUxGIDIKLQotLyoKLSAqIEVMRiBIZWFkZXIKLSAqLwotI2RlZmluZSBFTEZfTklERU5UCTE2Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyCWVfaWRlbnRbRUxGX05JREVOVF07CS8qIElkIGJ5dGVzICovCi0JRWxmMzJfSGFsZgllX3R5cGU7CQkJLyogZmlsZSB0eXBlICovCi0JRWxmMzJfSGFsZgllX21hY2hpbmU7CQkvKiBtYWNoaW5lIHR5cGUgKi8KLQlFbGYzMl9Xb3JkCWVfdmVyc2lvbjsJCS8qIHZlcnNpb24gbnVtYmVyICovCi0JRWxmMzJfQWRkcgllX2VudHJ5OwkJLyogZW50cnkgcG9pbnQgKi8KLQlFbGYzMl9PZmYJZV9waG9mZjsJCS8qIFByb2dyYW0gaGRyIG9mZnNldCAqLwotCUVsZjMyX09mZgllX3Nob2ZmOwkJLyogU2VjdGlvbiBoZHIgb2Zmc2V0ICovCi0JRWxmMzJfV29yZAllX2ZsYWdzOwkJLyogUHJvY2Vzc29yIGZsYWdzICovCi0JRWxmMzJfSGFsZgllX2Voc2l6ZTsJCS8qIHNpemVvZiBlaGRyICovCi0JRWxmMzJfSGFsZgllX3BoZW50c2l6ZTsJCS8qIFByb2dyYW0gaGVhZGVyIGVudHJ5IHNpemUgKi8KLQlFbGYzMl9IYWxmCWVfcGhudW07CQkvKiBOdW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXJzICovCi0JRWxmMzJfSGFsZgllX3NoZW50c2l6ZTsJCS8qIFNlY3Rpb24gaGVhZGVyIGVudHJ5IHNpemUgKi8KLQlFbGYzMl9IYWxmCWVfc2hudW07CQkvKiBOdW1iZXIgb2Ygc2VjdGlvbiBoZWFkZXJzICovCi0JRWxmMzJfSGFsZgllX3Noc3RybmR4OwkJLyogU3RyaW5nIHRhYmxlIGluZGV4ICovCi19IEVsZjMyX0VoZHI7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyCWVfaWRlbnRbRUxGX05JREVOVF07CS8qIElkIGJ5dGVzICovCi0JRWxmNjRfSGFsZgllX3R5cGU7CQkJLyogZmlsZSB0eXBlICovCi0JRWxmNjRfSGFsZgllX21hY2hpbmU7CQkvKiBtYWNoaW5lIHR5cGUgKi8KLQlFbGY2NF9Xb3JkCWVfdmVyc2lvbjsJCS8qIHZlcnNpb24gbnVtYmVyICovCi0JRWxmNjRfQWRkcgllX2VudHJ5OwkJLyogZW50cnkgcG9pbnQgKi8KLQlFbGY2NF9PZmYJZV9waG9mZjsJCS8qIFByb2dyYW0gaGRyIG9mZnNldCAqLwotCUVsZjY0X09mZgllX3Nob2ZmOwkJLyogU2VjdGlvbiBoZHIgb2Zmc2V0ICovCi0JRWxmNjRfV29yZAllX2ZsYWdzOwkJLyogUHJvY2Vzc29yIGZsYWdzICovCi0JRWxmNjRfSGFsZgllX2Voc2l6ZTsJCS8qIHNpemVvZiBlaGRyICovCi0JRWxmNjRfSGFsZgllX3BoZW50c2l6ZTsJCS8qIFByb2dyYW0gaGVhZGVyIGVudHJ5IHNpemUgKi8KLQlFbGY2NF9IYWxmCWVfcGhudW07CQkvKiBOdW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXJzICovCi0JRWxmNjRfSGFsZgllX3NoZW50c2l6ZTsJCS8qIFNlY3Rpb24gaGVhZGVyIGVudHJ5IHNpemUgKi8KLQlFbGY2NF9IYWxmCWVfc2hudW07CQkvKiBOdW1iZXIgb2Ygc2VjdGlvbiBoZWFkZXJzICovCi0JRWxmNjRfSGFsZgllX3Noc3RybmR4OwkJLyogU3RyaW5nIHRhYmxlIGluZGV4ICovCi19IEVsZjY0X0VoZHI7Ci0KLS8qIGVfaWRlbnQgb2Zmc2V0cyAqLwotI2RlZmluZSBFSV9NQUcwCQkwCS8qICdcMTc3JyAqLwotI2RlZmluZSBFSV9NQUcxCQkxCS8qICdFJwkgICovCi0jZGVmaW5lIEVJX01BRzIJCTIJLyogJ0wnCSAgKi8KLSNkZWZpbmUgRUlfTUFHMwkJMwkvKiAnRicJICAqLwotI2RlZmluZSBFSV9DTEFTUwk0CS8qIEZpbGUgY2xhc3MgKi8KLSNkZWZpbmUgRUlfREFUQQkJNQkvKiBEYXRhIGVuY29kaW5nICovCi0jZGVmaW5lIEVJX1ZFUlNJT04JNgkvKiBGaWxlIHZlcnNpb24gKi8KLSNkZWZpbmUgRUlfT1NBQkkJNwkvKiBPcGVyYXRpbmcgc3lzdGVtL0FCSSBpZGVudGlmaWNhdGlvbiAqLwotI2RlZmluZSBFSV9BQklWRVJTSU9OCTgJLyogQUJJIHZlcnNpb24gKi8KLSNkZWZpbmUgRUlfUEFECQk5CS8qIFN0YXJ0IG9mIHBhZGRpbmcgYnl0ZXMgdXAgdG8gRUlfTklERU5UKi8KLSNkZWZpbmUgRUlfTklERU5UCTE2CS8qIEZpcnN0IG5vbi1pZGVudCBoZWFkZXIgYnl0ZSAqLwotCi0vKiBlX2lkZW50W0VJX01BRzAsRUlfTUFHM10gKi8KLSNkZWZpbmUgRUxGTUFHMAkJMHg3ZgotI2RlZmluZSBFTEZNQUcxCQknRScKLSNkZWZpbmUgRUxGTUFHMgkJJ0wnCi0jZGVmaW5lIEVMRk1BRzMJCSdGJwotI2RlZmluZSBFTEZNQUcJCSJcMTc3RUxGIgotI2RlZmluZSBTRUxGTUFHCQk0Ci0KLS8qIGVfaWRlbnRbRUlfQ0xBU1NdICovCi0jZGVmaW5lIEVMRkNMQVNTTk9ORQkwCS8qIEludmFsaWQgY2xhc3MgKi8KLSNkZWZpbmUgRUxGQ0xBU1MzMgkxCS8qIDMyLWJpdCBvYmplY3RzICovCi0jZGVmaW5lIEVMRkNMQVNTNjQJMgkvKiA2NC1iaXQgb2JqZWN0cyAqLwotI2RlZmluZSBFTEZDTEFTU05VTQkzCi0KLS8qIGVfaWRlbnRbRUlfREFUQV0gKi8KLSNkZWZpbmUgRUxGREFUQU5PTkUJMAkvKiBJbnZhbGlkIGRhdGEgZW5jb2RpbmcgKi8KLSNkZWZpbmUgRUxGREFUQTJMU0IJMQkvKiAyJ3MgY29tcGxlbWVudCB2YWx1ZXMsIExTQiBmaXJzdCAqLwotI2RlZmluZSBFTEZEQVRBMk1TQgkyCS8qIDIncyBjb21wbGVtZW50IHZhbHVlcywgTVNCIGZpcnN0ICovCi0KLS8qIGVfaWRlbnRbRUlfVkVSU0lPTl0gKi8KLSNkZWZpbmUgRVZfTk9ORQkJMAkvKiBJbnZhbGlkIHZlcnNpb24gKi8KLSNkZWZpbmUgRVZfQ1VSUkVOVAkxCS8qIEN1cnJlbnQgdmVyc2lvbiAqLwotI2RlZmluZSBFVl9OVU0JCTIKLQotLyogZV9pZGVudFtFSV9PU0FCSV0gKi8KLSNkZWZpbmUgRUxGT1NBQklfU1lTVgkJMAkvKiBVTklYIFN5c3RlbSBWIEFCSSAqLwotI2RlZmluZSBFTEZPU0FCSV9IUFVYCQkxCS8qIEhQLVVYIG9wZXJhdGluZyBzeXN0ZW0gKi8KLSNkZWZpbmUgRUxGT1NBQklfTkVUQlNECQkyCS8qIE5ldEJTRCAqLwotI2RlZmluZSBFTEZPU0FCSV9MSU5VWAkJMwkvKiBHTlUvTGludXggKi8KLSNkZWZpbmUgRUxGT1NBQklfSFVSRAkJNAkvKiBHTlUvSHVyZCAqLwotI2RlZmluZSBFTEZPU0FCSV84Nk9QRU4JCTUJLyogODZPcGVuICovCi0jZGVmaW5lIEVMRk9TQUJJX1NPTEFSSVMJNgkvKiBTb2xhcmlzICovCi0jZGVmaW5lIEVMRk9TQUJJX01PTlRFUkVZCTcJLyogTW9udGVyZXkgKi8KLSNkZWZpbmUgRUxGT1NBQklfSVJJWAkJOAkvKiBJUklYICovCi0jZGVmaW5lIEVMRk9TQUJJX0ZSRUVCU0QJOQkvKiBGcmVlQlNEICovCi0jZGVmaW5lIEVMRk9TQUJJX1RSVTY0CQkxMAkvKiBUUlU2NCBVTklYICovCi0jZGVmaW5lIEVMRk9TQUJJX01PREVTVE8JMTEJLyogTm92ZWxsIE1vZGVzdG8gKi8KLSNkZWZpbmUgRUxGT1NBQklfT1BFTkJTRAkxMgkvKiBPcGVuQlNEICovCi0jZGVmaW5lIEVMRk9TQUJJX09QRU5WTVMJMTMJLyogT3BlblZNUyAqLwotI2RlZmluZSBFTEZPU0FCSV9OU0sJCTE0CS8qIEhQIE5vbi1TdG9wIEtlcm5lbCAqLwotI2RlZmluZSBFTEZPU0FCSV9BUk9TCQkxNQkvKiBBbWlnYSBSZXNlYXJjaCBPUyAqLwotLyogVW5vZmZpY2lhbCBPU0FCSXMgZm9sbG93ICovCi0jZGVmaW5lIEVMRk9TQUJJX0FSTQkJOTcJLyogQVJNICovCi0jZGVmaW5lIEVMRk9TQUJJX1NUQU5EQUxPTkUJMjU1CS8qIFN0YW5kYWxvbmUgKGVtYmVkZGVkKSBhcHBsaWNhdGlvbiAqLwotCi0jZGVmaW5lIEVMRk9TQUJJX05PTkUJCUVMRk9TQUJJX1NZU1YKLSNkZWZpbmUgRUxGT1NBQklfQUlYCQlFTEZPU0FCSV9NT05URVJFWQotCi0vKiBlX3R5cGUgKi8KLSNkZWZpbmUgRVRfTk9ORQkJMAkvKiBObyBmaWxlIHR5cGUgKi8KLSNkZWZpbmUgRVRfUkVMCQkxCS8qIFJlbG9jYXRhYmxlIGZpbGUgKi8KLSNkZWZpbmUgRVRfRVhFQwkJMgkvKiBFeGVjdXRhYmxlIGZpbGUgKi8KLSNkZWZpbmUgRVRfRFlOCQkzCS8qIFNoYXJlZCBvYmplY3QgZmlsZSAqLwotI2RlZmluZSBFVF9DT1JFCQk0CS8qIENvcmUgZmlsZSAqLwotI2RlZmluZSBFVF9OVU0JCTUKLQotI2RlZmluZSBFVF9MT09TCQkweGZlMDAJLyogT3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYyByYW5nZSAqLwotI2RlZmluZSBFVF9ISU9TCQkweGZlZmYKLSNkZWZpbmUgRVRfTE9QUk9DCTB4ZmYwMAkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgcmFuZ2UgKi8KLSNkZWZpbmUgRVRfSElQUk9DCTB4ZmZmZgotCi0vKiBlX21hY2hpbmUgKi8KLSNkZWZpbmUgRU1fTk9ORQkJMAkvKiBObyBtYWNoaW5lICovCi0jZGVmaW5lIEVNX00zMgkJMQkvKiBBVCZUIFdFIDMyMTAwICovCi0jZGVmaW5lIEVNX1NQQVJDCTIJLyogU1BBUkMgKi8KLSNkZWZpbmUgRU1fMzg2CQkzCS8qIEludGVsIDgwMzg2ICovCi0jZGVmaW5lIEVNXzY4SwkJNAkvKiBNb3Rvcm9sYSA2ODAwMCAqLwotI2RlZmluZSBFTV84OEsJCTUJLyogTW90b3JvbGEgODgwMDAgKi8KLSNkZWZpbmUgRU1fNDg2CQk2CS8qIEludGVsIDgwNDg2ICovCi0jZGVmaW5lIEVNXzg2MAkJNwkvKiBJbnRlbCA4MDg2MCAqLwotI2RlZmluZSBFTV9NSVBTCQk4CS8qIE1JUFMgSSBBcmNoaXRlY3R1cmUgKi8KLSNkZWZpbmUgRU1fUzM3MAkJOQkvKiBBbWRhaGwgVVRTIG9uIFN5c3RlbS8zNzAgKi8KLSNkZWZpbmUgRU1fTUlQU19SUzNfTEUJMTAJLyogTUlQUyBSUzMwMDAgTGl0dGxlLWVuZGlhbiAqLwotCQkJLyogMTEtMTQgLSBSZXNlcnZlZCAqLwotI2RlZmluZSBFTV9SUzYwMDAJMTEJLyogSUJNIFJTLzYwMDAgWFhYIHJlc2VydmVkICovCi0jZGVmaW5lIEVNX1BBUklTQwkxNQkvKiBIZXdsZXR0LVBhY2thcmQgUEEtUklTQyAqLwotI2RlZmluZSBFTV9OQ1VCRQkxNgkvKiBOQ3ViZSBYWFggcmVzZXJ2ZWQgKi8KLSNkZWZpbmUgRU1fVlBQNTAwCTE3CS8qIEZ1aml0c3UgVlBQNTAwICovCi0jZGVmaW5lIEVNX1NQQVJDMzJQTFVTCTE4CS8qIEVuaGFuY2VkIGluc3RydWN0aW9uIHNldCBTUEFSQyAqLwotI2RlZmluZSBFTV85NjAJCTE5CS8qIEludGVsIDgwOTYwICovCi0jZGVmaW5lIEVNX1BQQwkJMjAJLyogUG93ZXJQQyAqLwotI2RlZmluZSBFTV9QUEM2NAkyMQkvKiA2NC1iaXQgUG93ZXJQQyAqLwotCQkJLyogMjItMzUgLSBSZXNlcnZlZCAqLwotI2RlZmluZSBFTV9TMzkwCQkyMgkvKiBTeXN0ZW0vMzkwIFhYWCByZXNlcnZlZCAqLwotI2RlZmluZSBFTV9WODAwCQkzNgkvKiBORUMgVjgwMCAqLwotI2RlZmluZSBFTV9GUjIwCQkzNwkvKiBGdWppdHN1IEZSMjAgKi8KLSNkZWZpbmUgRU1fUkgzMgkJMzgJLyogVFJXIFJILTMyICovCi0jZGVmaW5lIEVNX1JDRQkJMzkJLyogTW90b3JvbGEgUkNFICovCi0jZGVmaW5lIEVNX0FSTQkJNDAJLyogQWR2YW5jZWQgUklTQyBNYWNoaW5lcyBBUk0gKi8KLSNkZWZpbmUgRU1fQUxQSEEJNDEJLyogRElHSVRBTCBBbHBoYSAqLwotI2RlZmluZSBFTV9TSAkJNDIJLyogSGl0YWNoaSBTdXBlci1IICovCi0jZGVmaW5lIEVNX1NQQVJDVjkJNDMJLyogU1BBUkMgVmVyc2lvbiA5ICovCi0jZGVmaW5lIEVNX1RSSUNPUkUJNDQJLyogU2llbWVucyBUcmljb3JlICovCi0jZGVmaW5lIEVNX0FSQwkJNDUJLyogQXJnb25hdXQgUklTQyBDb3JlICovCi0jZGVmaW5lIEVNX0g4XzMwMAk0NgkvKiBIaXRhY2hpIEg4LzMwMCAqLwotI2RlZmluZSBFTV9IOF8zMDBICTQ3CS8qIEhpdGFjaGkgSDgvMzAwSCAqLwotI2RlZmluZSBFTV9IOFMJCTQ4CS8qIEhpdGFjaGkgSDhTICovCi0jZGVmaW5lIEVNX0g4XzUwMAk0OQkvKiBIaXRhY2hpIEg4LzUwMCAqLwotI2RlZmluZSBFTV9JQV82NAk1MAkvKiBJbnRlbCBNZXJjZWQgUHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX01JUFNfWAk1MQkvKiBTdGFuZm9yZCBNSVBTLVggKi8KLSNkZWZpbmUgRU1fQ09MREZJUkUJNTIJLyogTW90b3JvbGEgQ29sZGZpcmUgKi8KLSNkZWZpbmUgRU1fNjhIQzEyCTUzCS8qIE1vdG9yb2xhIE1DNjhIQzEyICovCi0jZGVmaW5lIEVNX01NQQkJNTQJLyogRnVqaXRzdSBNTUEgTXVsdGltZWRpYSBBY2NlbGVyYXRvciAqLwotI2RlZmluZSBFTV9QQ1AJCTU1CS8qIFNpZW1lbnMgUENQICovCi0jZGVmaW5lIEVNX05DUFUJCTU2CS8qIFNvbnkgbkNQVSBlbWJlZGRlZCBSSVNDIHByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9ORFIxCQk1NwkvKiBEZW5zbyBORFIxIG1pY3JvcHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX1NUQVJDT1JFCTU4CS8qIE1vdG9yb2xhIFN0YXIqQ29yZSBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fTUUxNgkJNTkJLyogVG95b3RhIE1FMTYgcHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX1NUMTAwCTYwCS8qIFNUTWljcm9lbGVjdHJvbmljcyBTVDEwMCBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fVElOWUoJNjEJLyogQWR2YW5jZWQgTG9naWMgQ29ycC4gVGlueUogZW1iZWRkZWQgZmFtaWx5IHByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9YODZfNjQJNjIJLyogQU1EIHg4Ni02NCBhcmNoaXRlY3R1cmUgKi8KLSNkZWZpbmUgRU1fUERTUAkJNjMJLyogU29ueSBEU1AgUHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX1BEUDEwCTY0CS8qIERpZ2l0YWwgRXF1aXBtZW50IENvcnAuIFBEUC0xMCAqLwotI2RlZmluZSBFTV9QRFAxMQk2NQkvKiBEaWdpdGFsIEVxdWlwbWVudCBDb3JwLiBQRFAtMTEgKi8KLSNkZWZpbmUgRU1fRlg2NgkJNjYJLyogU2llbWVucyBGWDY2IG1pY3JvY29udHJvbGxlciAqLwotI2RlZmluZSBFTV9TVDlQTFVTCTY3CS8qIFNUTWljcm9lbGVjdHJvbmljcyBTVDkrIDgvMTYgYml0IG1pY3JvY29udHJvbGxlciAqLwotI2RlZmluZSBFTV9TVDcJCTY4CS8qIFNUTWljcm9lbGVjdHJvbmljcyBTVDcgOC1iaXQgbWljcm9jb250cm9sbGVyICovCi0jZGVmaW5lIEVNXzY4SEMxNgk2OQkvKiBNb3Rvcm9sYSBNQzY4SEMxNiBNaWNyb2NvbnRyb2xsZXIgKi8KLSNkZWZpbmUgRU1fNjhIQzExCTcwCS8qIE1vdG9yb2xhIE1DNjhIQzExIE1pY3JvY29udHJvbGxlciAqLwotI2RlZmluZSBFTV82OEhDMDgJNzEJLyogTW90b3JvbGEgTUM2OEhDMDggTWljcm9jb250cm9sbGVyICovCi0jZGVmaW5lIEVNXzY4SEMwNQk3MgkvKiBNb3Rvcm9sYSBNQzY4SEMwNSBNaWNyb2NvbnRyb2xsZXIgKi8KLSNkZWZpbmUgRU1fU1ZYCQk3MwkvKiBTaWxpY29uIEdyYXBoaWNzIFNWeCAqLwotI2RlZmluZSBFTV9TVDE5CQk3NAkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1QxOSA4LWJpdCBDUFUgKi8KLSNkZWZpbmUgRU1fVkFYCQk3NQkvKiBEaWdpdGFsIFZBWCAqLwotI2RlZmluZSBFTV9DUklTCQk3NgkvKiBBeGlzIENvbW11bmljYXRpb25zIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fSkFWRUxJTgk3NwkvKiBJbmZpbmVvbiBUZWNobm9sb2dpZXMgMzItYml0IGVtYmVkZGVkIENQVSAqLwotI2RlZmluZSBFTV9GSVJFUEFUSAk3OAkvKiBFbGVtZW50IDE0IDY0LWJpdCBEU1AgcHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX1pTUAkJNzkJLyogTFNJIExvZ2ljJ3MgMTYtYml0IERTUCBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fTU1JWAkJODAJLyogRG9uYWxkIEtudXRoJ3MgZWR1Y2F0aW9uYWwgNjQtYml0IHByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9IVUFOWQk4MQkvKiBIYXJ2YXJkJ3MgbWFjaGluZS1pbmRlcGVuZGVudCBmb3JtYXQgKi8KLSNkZWZpbmUgRU1fUFJJU00JODIJLyogU2lUZXJhIFByaXNtICovCi0jZGVmaW5lIEVNX0FWUgkJODMJLyogQXRtZWwgQVZSIDgtYml0IG1pY3JvY29udHJvbGxlciAqLwotI2RlZmluZSBFTV9GUjMwCQk4NAkvKiBGdWppdHN1IEZSMzAgKi8KLSNkZWZpbmUgRU1fRDEwVgkJODUJLyogTWl0c3ViaXNoaSBEMTBWICovCi0jZGVmaW5lIEVNX0QzMFYJCTg2CS8qIE1pdHN1YmlzaGkgRDMwViAqLwotI2RlZmluZSBFTV9WODUwCQk4NwkvKiBORUMgdjg1MCAqLwotI2RlZmluZSBFTV9NMzJSCQk4OAkvKiBNaXRzdWJpc2hpIE0zMlIgKi8KLSNkZWZpbmUgRU1fTU4xMDMwMAk4OQkvKiBNYXRzdXNoaXRhIE1OMTAzMDAgKi8KLSNkZWZpbmUgRU1fTU4xMDIwMAk5MAkvKiBNYXRzdXNoaXRhIE1OMTAyMDAgKi8KLSNkZWZpbmUgRU1fUEoJCTkxCS8qIHBpY29KYXZhICovCi0jZGVmaW5lIEVNX09QRU5SSVNDCTkyCS8qIE9wZW5SSVNDIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fQVJDX0E1CTkzCS8qIEFSQyBDb3JlcyBUYW5nZW50LUE1ICovCi0jZGVmaW5lIEVNX1hURU5TQQk5NAkvKiBUZW5zaWxpY2EgWHRlbnNhIEFyY2hpdGVjdHVyZSAqLwotI2RlZmluZSBFTV9WSURFT0NPUkUJOTUJLyogQWxwaGFtb3NhaWMgVmlkZW9Db3JlIHByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9UTU1fR1BQCTk2CS8qIFRob21wc29uIE11bHRpbWVkaWEgR2VuZXJhbCBQdXJwb3NlIFByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9OUzMySwk5NwkvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIDMyMDAwIHNlcmllcyAqLwotI2RlZmluZSBFTV9UUEMJCTk4CS8qIFRlbm9yIE5ldHdvcmsgVFBDIHByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9TTlAxSwk5OQkvKiBUcmViaWEgU05QIDEwMDAgcHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX1NUMjAwCTEwMAkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1QyMDAgbWljcm9jb250cm9sbGVyICovCi0jZGVmaW5lIEVNX0lQMksJCTEwMQkvKiBVYmljb20gSVAyeHh4IG1pY3JvY29udHJvbGxlciBmYW1pbHkgKi8KLSNkZWZpbmUgRU1fTUFYCQkxMDIJLyogTUFYIHByb2Nlc3NvciAqLwotI2RlZmluZSBFTV9DUgkJMTAzCS8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgQ29tcGFjdFJJU0MgbWljb3Jwcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fRjJNQzE2CTEwNAkvKiBGdWppdHN1IEYyTUMxNiAqLwotI2RlZmluZSBFTV9NU1A0MzAJMTA1CS8qIFRleGFzIEluc3RydW1lbnRzIE1TUDQzMCAqLwotI2RlZmluZSBFTV9CTEFDS0ZJTgkxMDYJLyogQW5hbG9nIERldmljZXMgQmxhY2tmaW4gRFNQICovCi0jZGVmaW5lIEVNX1NFX0MzMwkxMDcJLyogU2Vpa28gRXBzb24gUzFDMzMgZmFtaWx5ICovCi0jZGVmaW5lIEVNX1NFUAkJMTA4CS8qIFNoYXJwIGVtYmVkZGVkIG1pY3JvcHJvY2Vzc29yICovCi0jZGVmaW5lIEVNX0FSQ0EJCTEwOQkvKiBBcmNhIFJJU0MgbWljcm9wcm9jZXNzb3IgKi8KLSNkZWZpbmUgRU1fVU5JQ09SRQkxMTAJLyogVU5JQ09SRSBmcm9tIFBLVS1Vbml0eSBMdGQuIGFuZCBNUFJDIFBla2luZyBVbml2ZXJzaXR5ICovCi0jZGVmaW5lIEVNX0FBUkNINjQJMTgzCS8qIEFBcmNoNjQgNjQtYml0IEFSTSBtaWNyb3Byb2Nlc3NvciAqLwotCi0vKiBVbm9mZmljaWFsIG1hY2hpbmUgdHlwZXMgZm9sbG93ICovCi0jZGVmaW5lIEVNX0FWUjMyCTYzMTcJLyogdXNlZCBieSBOZXRCU0QvYXZyMzIgKi8KLSNkZWZpbmUgRU1fQUxQSEFfRVhQCTM2OTAyCS8qIHVzZWQgYnkgTmV0QlNEL2FscGhhOyBvYnNvbGV0ZSAqLwotI2RlZmluZSBFTV9OVU0JCTM2OTAzCi0KLS8qCi0gKiBQcm9ncmFtIEhlYWRlcgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmMzJfV29yZAlwX3R5cGU7CQkvKiBlbnRyeSB0eXBlICovCi0JRWxmMzJfT2ZmCXBfb2Zmc2V0OwkvKiBvZmZzZXQgKi8KLQlFbGYzMl9BZGRyCXBfdmFkZHI7CS8qIHZpcnR1YWwgYWRkcmVzcyAqLwotCUVsZjMyX0FkZHIJcF9wYWRkcjsJLyogcGh5c2ljYWwgYWRkcmVzcyAqLwotCUVsZjMyX1dvcmQJcF9maWxlc3o7CS8qIGZpbGUgc2l6ZSAqLwotCUVsZjMyX1dvcmQJcF9tZW1zejsJLyogbWVtb3J5IHNpemUgKi8KLQlFbGYzMl9Xb3JkCXBfZmxhZ3M7CS8qIGZsYWdzICovCi0JRWxmMzJfV29yZAlwX2FsaWduOwkvKiBtZW1vcnkgJiBmaWxlIGFsaWdubWVudCAqLwotfSBFbGYzMl9QaGRyOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmNjRfV29yZAlwX3R5cGU7CQkvKiBlbnRyeSB0eXBlICovCi0JRWxmNjRfV29yZAlwX2ZsYWdzOwkvKiBmbGFncyAqLwotCUVsZjY0X09mZglwX29mZnNldDsJLyogb2Zmc2V0ICovCi0JRWxmNjRfQWRkcglwX3ZhZGRyOwkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KLQlFbGY2NF9BZGRyCXBfcGFkZHI7CS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KLQlFbGY2NF9Yd29yZAlwX2ZpbGVzejsJLyogZmlsZSBzaXplICovCi0JRWxmNjRfWHdvcmQJcF9tZW1zejsJLyogbWVtb3J5IHNpemUgKi8KLQlFbGY2NF9Yd29yZAlwX2FsaWduOwkvKiBtZW1vcnkgJiBmaWxlIGFsaWdubWVudCAqLwotfSBFbGY2NF9QaGRyOwotCi0vKiBwX3R5cGUgKi8KLSNkZWZpbmUgUFRfTlVMTAkJMAkJLyogUHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cnkgdW51c2VkICovCi0jZGVmaW5lIFBUX0xPQUQJCTEJCS8qIExvYWRhYmxlIHByb2dyYW0gc2VnbWVudCAqLwotI2RlZmluZSBQVF9EWU5BTUlDCTIJCS8qIER5bmFtaWMgbGlua2luZyBpbmZvcm1hdGlvbiAqLwotI2RlZmluZSBQVF9JTlRFUlAJMwkJLyogUHJvZ3JhbSBpbnRlcnByZXRlciAqLwotI2RlZmluZSBQVF9OT1RFCQk0CQkvKiBBdXhpbGlhcnkgaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgUFRfU0hMSUIJNQkJLyogUmVzZXJ2ZWQsIHVuc3BlY2lmaWVkIHNlbWFudGljcyAqLwotI2RlZmluZSBQVF9QSERSCQk2CQkvKiBFbnRyeSBmb3IgaGVhZGVyIHRhYmxlIGl0c2VsZiAqLwotI2RlZmluZSBQVF9UTFMJCTcJCS8qIFRMUyBpbml0aWFsaXNhdGlvbiBpbWFnZSAqLwotI2RlZmluZSBQVF9OVU0JCTgKLQotI2RlZmluZSBQVF9MT09TCQkweDYwMDAwMDAwCS8qIE9TLXNwZWNpZmljIHJhbmdlICovCi0KLS8qIEdOVS1zcGVjaWZpYyAqLwotI2RlZmluZSBQVF9HTlVfRUhfRlJBTUUgMHg2NDc0ZTU1MAkvKiBFSCBmcmFtZSBzZWdtZW50ICovCi0jZGVmaW5lIFBUX0dOVV9TVEFDSwkweDY0NzRlNTUxCS8qIEluZGljYXRlIGV4ZWN1dGFibGUgc3RhY2sgKi8KLSNkZWZpbmUgUFRfR05VX1JFTFJPCTB4NjQ3NGU1NTIJLyogTWFrZSByZWFkLW9ubHkgYWZ0ZXIgcmVsb2NhdGlvbiAqLwotCi0jZGVmaW5lIFBUX0hJT1MJCTB4NmZmZmZmZmYKLSNkZWZpbmUgUFRfTE9QUk9DCTB4NzAwMDAwMDAJLyogUHJvY2Vzc29yLXNwZWNpZmljIHJhbmdlICovCi0jZGVmaW5lIFBUX0hJUFJPQwkweDdmZmZmZmZmCi0KLSNkZWZpbmUgUFRfTUlQU19SRUdJTkZPIDB4NzAwMDAwMDAKLQotLyogcF9mbGFncyAqLwotI2RlZmluZSBQRl9SCQkweDQJCS8qIFNlZ21lbnQgaXMgcmVhZGFibGUgKi8KLSNkZWZpbmUgUEZfVwkJMHgyCQkvKiBTZWdtZW50IGlzIHdyaXRhYmxlICovCi0jZGVmaW5lIFBGX1gJCTB4MQkJLyogU2VnbWVudCBpcyBleGVjdXRhYmxlICovCi0KLSNkZWZpbmUgUEZfTUFTS09TCTB4MGZmMDAwMDAJLyogT3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYyB2YWx1ZXMgKi8KLSNkZWZpbmUgUEZfTUFTS1BST0MJMHhmMDAwMDAwMAkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgdmFsdWVzICovCi0KLS8qIEV4dGVuZGVkIHByb2dyYW0gaGVhZGVyIGluZGV4LiAqLwotI2RlZmluZSBQTl9YTlVNCQkweGZmZmYKLQotLyoKLSAqIFNlY3Rpb24gSGVhZGVycwotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmMzJfV29yZAlzaF9uYW1lOwkvKiBzZWN0aW9uIG5hbWUgKC5zaHN0cnRhYiBpbmRleCkgKi8KLQlFbGYzMl9Xb3JkCXNoX3R5cGU7CS8qIHNlY3Rpb24gdHlwZSAqLwotCUVsZjMyX1dvcmQJc2hfZmxhZ3M7CS8qIHNlY3Rpb24gZmxhZ3MgKi8KLQlFbGYzMl9BZGRyCXNoX2FkZHI7CS8qIHZpcnR1YWwgYWRkcmVzcyAqLwotCUVsZjMyX09mZglzaF9vZmZzZXQ7CS8qIGZpbGUgb2Zmc2V0ICovCi0JRWxmMzJfV29yZAlzaF9zaXplOwkvKiBzZWN0aW9uIHNpemUgKi8KLQlFbGYzMl9Xb3JkCXNoX2xpbms7CS8qIGxpbmsgdG8gYW5vdGhlciAqLwotCUVsZjMyX1dvcmQJc2hfaW5mbzsJLyogbWlzYyBpbmZvICovCi0JRWxmMzJfV29yZAlzaF9hZGRyYWxpZ247CS8qIG1lbW9yeSBhbGlnbm1lbnQgKi8KLQlFbGYzMl9Xb3JkCXNoX2VudHNpemU7CS8qIHRhYmxlIGVudHJ5IHNpemUgKi8KLX0gRWxmMzJfU2hkcjsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjY0X1dvcmQJc2hfbmFtZTsJLyogc2VjdGlvbiBuYW1lICguc2hzdHJ0YWIgaW5kZXgpICovCi0JRWxmNjRfV29yZAlzaF90eXBlOwkvKiBzZWN0aW9uIHR5cGUgKi8KLQlFbGY2NF9Yd29yZAlzaF9mbGFnczsJLyogc2VjdGlvbiBmbGFncyAqLwotCUVsZjY0X0FkZHIJc2hfYWRkcjsJLyogdmlydHVhbCBhZGRyZXNzICovCi0JRWxmNjRfT2ZmCXNoX29mZnNldDsJLyogZmlsZSBvZmZzZXQgKi8KLQlFbGY2NF9Yd29yZAlzaF9zaXplOwkvKiBzZWN0aW9uIHNpemUgKi8KLQlFbGY2NF9Xb3JkCXNoX2xpbms7CS8qIGxpbmsgdG8gYW5vdGhlciAqLwotCUVsZjY0X1dvcmQJc2hfaW5mbzsJLyogbWlzYyBpbmZvICovCi0JRWxmNjRfWHdvcmQJc2hfYWRkcmFsaWduOwkvKiBtZW1vcnkgYWxpZ25tZW50ICovCi0JRWxmNjRfWHdvcmQJc2hfZW50c2l6ZTsJLyogdGFibGUgZW50cnkgc2l6ZSAqLwotfSBFbGY2NF9TaGRyOwotCi0vKiBzaF90eXBlICovCi0jZGVmaW5lIFNIVF9OVUxMCSAgICAgIDAJCS8qIFNlY3Rpb24gaGVhZGVyIHRhYmxlIGVudHJ5IHVudXNlZCAqLwotI2RlZmluZSBTSFRfUFJPR0JJVFMJICAgICAgMQkJLyogUHJvZ3JhbSBpbmZvcm1hdGlvbiAqLwotI2RlZmluZSBTSFRfU1lNVEFCCSAgICAgIDIJCS8qIFN5bWJvbCB0YWJsZSAqLwotI2RlZmluZSBTSFRfU1RSVEFCCSAgICAgIDMJCS8qIFN0cmluZyB0YWJsZSAqLwotI2RlZmluZSBTSFRfUkVMQQkgICAgICA0CQkvKiBSZWxvY2F0aW9uIGluZm9ybWF0aW9uIHcvIGFkZGVuZCAqLwotI2RlZmluZSBTSFRfSEFTSAkgICAgICA1CQkvKiBTeW1ib2wgaGFzaCB0YWJsZSAqLwotI2RlZmluZSBTSFRfRFlOQU1JQwkgICAgICA2CQkvKiBEeW5hbWljIGxpbmtpbmcgaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgU0hUX05PVEUJICAgICAgNwkJLyogQXV4aWxpYXJ5IGluZm9ybWF0aW9uICovCi0jZGVmaW5lIFNIVF9OT0JJVFMJICAgICAgOAkJLyogTm8gc3BhY2UgYWxsb2NhdGVkIGluIGZpbGUgaW1hZ2UgKi8KLSNkZWZpbmUgU0hUX1JFTAkJICAgICAgOQkJLyogUmVsb2NhdGlvbiBpbmZvcm1hdGlvbiB3L28gYWRkZW5kICovCi0jZGVmaW5lIFNIVF9TSExJQgkgICAgIDEwCQkvKiBSZXNlcnZlZCwgdW5zcGVjaWZpZWQgc2VtYW50aWNzICovCi0jZGVmaW5lIFNIVF9EWU5TWU0JICAgICAxMQkJLyogU3ltYm9sIHRhYmxlIGZvciBkeW5hbWljIGxpbmtlciAqLwotI2RlZmluZSBTSFRfSU5JVF9BUlJBWQkgICAgIDE0CQkvKiBJbml0aWFsaXphdGlvbiBmdW5jdGlvbiBwb2ludGVycyAqLwotI2RlZmluZSBTSFRfRklOSV9BUlJBWQkgICAgIDE1CQkvKiBUZXJtaW5hdGlvbiBmdW5jdGlvbiBwb2ludGVycyAqLwotI2RlZmluZSBTSFRfUFJFSU5JVF9BUlJBWSAgICAxNgkJLyogUHJlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHB0cnMgKi8KLSNkZWZpbmUgU0hUX0dST1VQCSAgICAgMTcJCS8qIFNlY3Rpb24gZ3JvdXAgKi8KLSNkZWZpbmUgU0hUX1NZTVRBQl9TSE5EWCAgICAgMTgJCS8qIFNlY3Rpb24gaW5kZXhlcyAoc2VlIFNITl9YSU5ERVgpICovCi0jZGVmaW5lIFNIVF9OVU0JCSAgICAgMTkKLQotI2RlZmluZSBTSFRfTE9PUwkgICAgIDB4NjAwMDAwMDAgLyogT3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYyByYW5nZSAqLwotI2RlZmluZSBTSFRfR05VX0hBU0gJICAgICAweDZmZmZmZmY2IC8qIEdOVSBzdHlsZSBzeW1ib2wgaGFzaCB0YWJsZSAqLwotI2RlZmluZSBTSFRfU1VOV19tb3ZlCSAgICAgMHg2ZmZmZmZmYQotI2RlZmluZSBTSFRfU1VOV19zeW1pbmZvICAgICAweDZmZmZmZmZjCi0jZGVmaW5lIFNIVF9TVU5XX3ZlcmRlZgkgICAgIDB4NmZmZmZmZmQgLyogVmVyc2lvbnMgZGVmaW5lZCBieSBmaWxlICovCi0jZGVmaW5lIFNIVF9HTlVfdmVyZGVmCSAgICAgU0hUX1NVTldfdmVyZGVmCi0jZGVmaW5lIFNIVF9TVU5XX3Zlcm5lZWQgICAgIDB4NmZmZmZmZmUgLyogVmVyc2lvbnMgbmVlZGVkIGJ5IGZpbGUgKi8KLSNkZWZpbmUgU0hUX0dOVV92ZXJuZWVkCSAgICAgU0hUX1NVTldfdmVybmVlZAotI2RlZmluZSBTSFRfU1VOV192ZXJzeW0JICAgICAweDZmZmZmZmZmIC8qIFN5bWJvbCB2ZXJzaW9ucyAqLwotI2RlZmluZSBTSFRfR05VX3ZlcnN5bQkgICAgIFNIVF9TVU5XX3ZlcnN5bQotI2RlZmluZSBTSFRfSElPUwkgICAgIDB4NmZmZmZmZmYKLSNkZWZpbmUgU0hUX0xPUFJPQwkgICAgIDB4NzAwMDAwMDAgLyogUHJvY2Vzc29yLXNwZWNpZmljIHJhbmdlICovCi0jZGVmaW5lIFNIVF9BTUQ2NF9VTldJTkQgICAgIDB4NzAwMDAwMDEgLyogdW53aW5kIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIFNIVF9BUk1fRVhJRFgJICAgICAweDcwMDAwMDAxCS8qIGV4Y2VwdGlvbiBpbmRleCB0YWJsZSAqLwotI2RlZmluZSBTSFRfQVJNX1BSRUVNUFRNQVAgICAweDcwMDAwMDAyIC8qIEJQQUJJIERMTCBkeW5hbWljIGxpbmtpbmcKLQkJCQkJICogcHJlLWVtcHRpb24gbWFwICovCi0jZGVmaW5lIFNIVF9BUk1fQVRUUklCVVRFUyAgIDB4NzAwMDAwMDMgLyogT2JqZWN0IGZpbGUgY29tcGF0aWJpbGl0eQotCQkJCQkgKiBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIFNIVF9BUk1fREVCVUdPVkVSTEFZIDB4NzAwMDAwMDQgLyogU2VlIERCR09WTCBmb3IgZGV0YWlscyAqLwotI2RlZmluZSBTSFRfQVJNX09WRVJMQVlTRUNUSU9OIDB4NzAwMDAwMDUKLSNkZWZpbmUgU0hUX0hJUFJPQwkgICAgIDB4N2ZmZmZmZmYKLSNkZWZpbmUgU0hUX0xPVVNFUgkgICAgIDB4ODAwMDAwMDAgLyogQXBwbGljYXRpb24tc3BlY2lmaWMgcmFuZ2UgKi8KLSNkZWZpbmUgU0hUX0hJVVNFUgkgICAgIDB4ZmZmZmZmZmYKLQotLyogc2hfZmxhZ3MgKi8KLSNkZWZpbmUgU0hGX1dSSVRFCSAgICAgMHgwMDAwMDAwMSAvKiBDb250YWlucyB3cml0YWJsZSBkYXRhICovCi0jZGVmaW5lIFNIRl9BTExPQwkgICAgIDB4MDAwMDAwMDIgLyogT2NjdXBpZXMgbWVtb3J5ICovCi0jZGVmaW5lIFNIRl9FWEVDSU5TVFIJICAgICAweDAwMDAwMDA0IC8qIENvbnRhaW5zIGV4ZWN1dGFibGUgaW5zbnMgKi8KLSNkZWZpbmUgU0hGX01FUkdFCSAgICAgMHgwMDAwMDAxMCAvKiBNaWdodCBiZSBtZXJnZWQgKi8KLSNkZWZpbmUgU0hGX1NUUklOR1MJICAgICAweDAwMDAwMDIwIC8qIENvbnRhaW5zIG51bCB0ZXJtaW5hdGVkIHN0cmluZ3MgKi8KLSNkZWZpbmUgU0hGX0lORk9fTElOSwkgICAgIDB4MDAwMDAwNDAgLyogInNoX2luZm8iIGNvbnRhaW5zIFNIVCBpbmRleCAqLwotI2RlZmluZSBTSEZfTElOS19PUkRFUgkgICAgIDB4MDAwMDAwODAgLyogUHJlc2VydmUgb3JkZXIgYWZ0ZXIgY29tYmluaW5nICovCi0jZGVmaW5lIFNIRl9PU19OT05DT05GT1JNSU5HIDB4MDAwMDAxMDAgLyogT1Mgc3BlY2lmaWMgaGFuZGxpbmcgcmVxdWlyZWQgKi8KLSNkZWZpbmUgU0hGX0dST1VQCSAgICAgMHgwMDAwMDIwMCAvKiBJcyBtZW1iZXIgb2YgYSBncm91cCAqLwotI2RlZmluZSBTSEZfVExTCQkgICAgIDB4MDAwMDA0MDAgLyogSG9sZHMgdGhyZWFkLWxvY2FsIGRhdGEgKi8KLSNkZWZpbmUgU0hGX01BU0tPUwkgICAgIDB4MGZmMDAwMDAgLyogT3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYyB2YWx1ZXMgKi8KLSNkZWZpbmUgU0hGX01BU0tQUk9DCSAgICAgMHhmMDAwMDAwMCAvKiBQcm9jZXNzb3Itc3BlY2lmaWMgdmFsdWVzICovCi0jZGVmaW5lIFNIRl9PUkRFUkVECSAgICAgMHg0MDAwMDAwMCAvKiBPcmRlcmluZyByZXF1aXJlbWVudCAoU29sYXJpcykgKi8KLSNkZWZpbmUgU0hGX0VYQ0xVREUJICAgICAweDgwMDAwMDAwIC8qIEV4Y2x1ZGVkIHVubGVzcyB1bmxlcyByZWYvYWxsb2MKLQkJCQkJICAgKFNvbGFyaXMpLiovCi0vKgotICogU3ltYm9sIFRhYmxlCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9Xb3JkCXN0X25hbWU7CS8qIFN5bWJvbCBuYW1lICguc3RydGFiIGluZGV4KSAqLwotCUVsZjMyX1dvcmQJc3RfdmFsdWU7CS8qIHZhbHVlIG9mIHN5bWJvbCAqLwotCUVsZjMyX1dvcmQJc3Rfc2l6ZTsJLyogc2l6ZSBvZiBzeW1ib2wgKi8KLQlFbGZfQnl0ZQlzdF9pbmZvOwkvKiB0eXBlIC8gYmluZGluZyBhdHRycyAqLwotCUVsZl9CeXRlCXN0X290aGVyOwkvKiB1bnVzZWQgKi8KLQlFbGYzMl9IYWxmCXN0X3NobmR4OwkvKiBzZWN0aW9uIGluZGV4IG9mIHN5bWJvbCAqLwotfSBFbGYzMl9TeW07Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGY2NF9Xb3JkCXN0X25hbWU7CS8qIFN5bWJvbCBuYW1lICguc3RydGFiIGluZGV4KSAqLwotCUVsZl9CeXRlCXN0X2luZm87CS8qIHR5cGUgLyBiaW5kaW5nIGF0dHJzICovCi0JRWxmX0J5dGUJc3Rfb3RoZXI7CS8qIHVudXNlZCAqLwotCUVsZjY0X0hhbGYJc3Rfc2huZHg7CS8qIHNlY3Rpb24gaW5kZXggb2Ygc3ltYm9sICovCi0JRWxmNjRfQWRkcglzdF92YWx1ZTsJLyogdmFsdWUgb2Ygc3ltYm9sICovCi0JRWxmNjRfWHdvcmQJc3Rfc2l6ZTsJLyogc2l6ZSBvZiBzeW1ib2wgKi8KLX0gRWxmNjRfU3ltOwotCi0vKiBTeW1ib2wgVGFibGUgaW5kZXggb2YgdGhlIHVuZGVmaW5lZCBzeW1ib2wgKi8KLSNkZWZpbmUgRUxGX1NZTV9VTkRFRklORUQJMAotCi0jZGVmaW5lIFNUTl9VTkRFRgkJMAkvKiB1bmRlZmluZWQgaW5kZXggKi8KLQotLyogc3RfaW5mbzogU3ltYm9sIEJpbmRpbmdzICovCi0jZGVmaW5lIFNUQl9MT0NBTAkJMAkvKiBsb2NhbCBzeW1ib2wgKi8KLSNkZWZpbmUgU1RCX0dMT0JBTAkJMQkvKiBnbG9iYWwgc3ltYm9sICovCi0jZGVmaW5lIFNUQl9XRUFLCQkyCS8qIHdlYWtseSBkZWZpbmVkIGdsb2JhbCBzeW1ib2wgKi8KLSNkZWZpbmUgU1RCX05VTQkJCTMKLQotI2RlZmluZSBTVEJfTE9PUwkJMTAJLyogT3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYyByYW5nZSAqLwotI2RlZmluZSBTVEJfSElPUwkJMTIKLSNkZWZpbmUgU1RCX0xPUFJPQwkJMTMJLyogUHJvY2Vzc29yLXNwZWNpZmljIHJhbmdlICovCi0jZGVmaW5lIFNUQl9ISVBST0MJCTE1Ci0KLS8qIHN0X2luZm86IFN5bWJvbCBUeXBlcyAqLwotI2RlZmluZSBTVFRfTk9UWVBFCQkwCS8qIFR5cGUgbm90IHNwZWNpZmllZCAqLwotI2RlZmluZSBTVFRfT0JKRUNUCQkxCS8qIEFzc29jaWF0ZWQgd2l0aCBhIGRhdGEgb2JqZWN0ICovCi0jZGVmaW5lIFNUVF9GVU5DCQkyCS8qIEFzc29jaWF0ZWQgd2l0aCBhIGZ1bmN0aW9uICovCi0jZGVmaW5lIFNUVF9TRUNUSU9OCQkzCS8qIEFzc29jaWF0ZWQgd2l0aCBhIHNlY3Rpb24gKi8KLSNkZWZpbmUgU1RUX0ZJTEUJCTQJLyogQXNzb2NpYXRlZCB3aXRoIGEgZmlsZSBuYW1lICovCi0jZGVmaW5lIFNUVF9DT01NT04JCTUJLyogVW5pbml0aWFsaXNlZCBjb21tb24gYmxvY2sgKi8KLSNkZWZpbmUgU1RUX1RMUwkJCTYJLyogVGhyZWFkIGxvY2FsIGRhdGEgb2JqZWN0ICovCi0jZGVmaW5lIFNUVF9OVU0JCQk3Ci0KLSNkZWZpbmUgU1RUX0xPT1MJCTEwCS8qIE9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMgcmFuZ2UgKi8KLSNkZWZpbmUgU1RUX0hJT1MJCTEyCi0jZGVmaW5lIFNUVF9MT1BST0MJCTEzCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyByYW5nZSAqLwotI2RlZmluZSBTVFRfSElQUk9DCQkxNQotCi0vKiBzdF9vdGhlcjogVmlzaWJpbGl0eSBUeXBlcyAqLwotI2RlZmluZSBTVFZfREVGQVVMVAkJMAkvKiB1c2UgYmluZGluZyB0eXBlICovCi0jZGVmaW5lIFNUVl9JTlRFUk5BTAkJMQkvKiBub3QgcmVmZXJlbmNlZCBmcm9tIG91dHNpZGUgKi8KLSNkZWZpbmUgU1RWX0hJRERFTgkJMgkvKiBub3QgdmlzaWJsZSwgbWF5IGJlIHVzZWQgdmlhIHB0ciAqLwotI2RlZmluZSBTVFZfUFJPVEVDVEVECQkzCS8qIHZpc2libGUsIG5vdCBwcmVlbXB0aWJsZSAqLwotI2RlZmluZSBTVFZfRVhQT1JURUQJCTQKLSNkZWZpbmUgU1RWX1NJTkdMRVRPTgkJNQotI2RlZmluZSBTVFZfRUxJTUlOQVRFCQk2Ci0KLS8qIHN0X2luZm8vc3Rfb3RoZXIgdXRpbGl0eSBtYWNyb3MgKi8KLSNkZWZpbmUgRUxGX1NUX0JJTkQoaW5mbykJCSgodWludDMyX3QpKGluZm8pID4+IDQpCi0jZGVmaW5lIEVMRl9TVF9UWVBFKGluZm8pCQkoKHVpbnQzMl90KShpbmZvKSAmIDB4ZikKLSNkZWZpbmUgRUxGX1NUX0lORk8oYmluZCx0eXBlKQkJKChFbGZfQnl0ZSkoKChiaW5kKSA8PCA0KSB8IFwKLQkJCQkJICgodHlwZSkgJiAweGYpKSkKLSNkZWZpbmUgRUxGX1NUX1ZJU0lCSUxJVFkob3RoZXIpCSgodWludDMyX3QpKG90aGVyKSAmIDMpCi0KLS8qCi0gKiBTcGVjaWFsIHNlY3Rpb24gaW5kZXhlcwotICovCi0jZGVmaW5lIFNITl9VTkRFRgkwCQkvKiBVbmRlZmluZWQgc2VjdGlvbiAqLwotCi0jZGVmaW5lIFNITl9MT1JFU0VSVkUJMHhmZjAwCQkvKiBSZXNlcnZlZCByYW5nZSAqLwotI2RlZmluZSBTSE5fQUJTCQkweGZmZjEJCS8qICBBYnNvbHV0ZSBzeW1ib2xzICovCi0jZGVmaW5lIFNITl9DT01NT04JMHhmZmYyCQkvKiAgQ29tbW9uIHN5bWJvbHMgKi8KLSNkZWZpbmUgU0hOX1hJTkRFWAkweGZmZmYJCS8qIEVzY2FwZSAtLSBpbmRleCBzdG9yZWQgZWxzZXdoZXJlICovCi0jZGVmaW5lIFNITl9ISVJFU0VSVkUJMHhmZmZmCi0KLSNkZWZpbmUgU0hOX0xPUFJPQwkweGZmMDAJCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyByYW5nZSAqLwotI2RlZmluZSBTSE5fSElQUk9DCTB4ZmYxZgotI2RlZmluZSBTSE5fTE9PUwkweGZmMjAJCS8qIE9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMgcmFuZ2UgKi8KLSNkZWZpbmUgU0hOX0hJT1MJMHhmZjNmCi0KLSNkZWZpbmUgU0hOX01JUFNfQUNPTU1PTiAweGZmMDAKLSNkZWZpbmUgU0hOX01JUFNfVEVYVAkweGZmMDEKLSNkZWZpbmUgU0hOX01JUFNfREFUQQkweGZmMDIKLSNkZWZpbmUgU0hOX01JUFNfU0NPTU1PTiAweGZmMDMKLQotLyoKLSAqIFJlbG9jYXRpb24gRW50cmllcwotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmMzJfV29yZAlyX29mZnNldDsJLyogd2hlcmUgdG8gZG8gaXQgKi8KLQlFbGYzMl9Xb3JkCXJfaW5mbzsJCS8qIGluZGV4ICYgdHlwZSBvZiByZWxvY2F0aW9uICovCi19IEVsZjMyX1JlbDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX1dvcmQJcl9vZmZzZXQ7CS8qIHdoZXJlIHRvIGRvIGl0ICovCi0JRWxmMzJfV29yZAlyX2luZm87CQkvKiBpbmRleCAmIHR5cGUgb2YgcmVsb2NhdGlvbiAqLwotCUVsZjMyX1N3b3JkCXJfYWRkZW5kOwkvKiBhZGp1c3RtZW50IHZhbHVlICovCi19IEVsZjMyX1JlbGE7Ci0KLS8qIHJfaW5mbyB1dGlsaXR5IG1hY3JvcyAqLwotI2RlZmluZSBFTEYzMl9SX1NZTShpbmZvKQkoKGluZm8pID4+IDgpCi0jZGVmaW5lIEVMRjMyX1JfVFlQRShpbmZvKQkoKGluZm8pICYgMHhmZikKLSNkZWZpbmUgRUxGMzJfUl9JTkZPKHN5bSwgdHlwZSkgKCgoc3ltKSA8PCA4KSArICh1bnNpZ25lZCBjaGFyKSh0eXBlKSkKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjY0X0FkZHIJcl9vZmZzZXQ7CS8qIHdoZXJlIHRvIGRvIGl0ICovCi0JRWxmNjRfWHdvcmQJcl9pbmZvOwkJLyogaW5kZXggJiB0eXBlIG9mIHJlbG9jYXRpb24gKi8KLX0gRWxmNjRfUmVsOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmNjRfQWRkcglyX29mZnNldDsJLyogd2hlcmUgdG8gZG8gaXQgKi8KLQlFbGY2NF9Yd29yZAlyX2luZm87CQkvKiBpbmRleCAmIHR5cGUgb2YgcmVsb2NhdGlvbiAqLwotCUVsZjY0X1N4d29yZAlyX2FkZGVuZDsJLyogYWRqdXN0bWVudCB2YWx1ZSAqLwotfSBFbGY2NF9SZWxhOwotCi0vKiByX2luZm8gdXRpbGl0eSBtYWNyb3MgKi8KLSNkZWZpbmUgRUxGNjRfUl9TWU0oaW5mbykJKChpbmZvKSA+PiAzMikKLSNkZWZpbmUgRUxGNjRfUl9UWVBFKGluZm8pCSgoaW5mbykgJiAweGZmZmZmZmZmKQotI2RlZmluZSBFTEY2NF9SX0lORk8oc3ltLHR5cGUpCSgoKHN5bSkgPDwgMzIpICsgKHR5cGUpKQotCi0vKgotICogTW92ZSBlbnRyaWVzCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9Md29yZAltX3ZhbHVlOwkvKiBzeW1ib2wgdmFsdWUgKi8KLQlFbGYzMl9Xb3JkCW1faW5mbzsJCS8qIHNpemUgKyBpbmRleCAqLwotCUVsZjMyX1dvcmQJbV9wb2Zmc2V0OwkvKiBzeW1ib2wgb2Zmc2V0ICovCi0JRWxmMzJfSGFsZgltX3JlcGVhdDsJLyogcmVwZWF0IGNvdW50ICovCi0JRWxmMzJfSGFsZgltX3N0cmlkZTsJLyogc3RyaWRlIGluZm8gKi8KLX0gRWxmMzJfTW92ZTsKLQotI2RlZmluZSBFTEYzMl9NX1NZTShpbmZvKQkoKGluZm8pID4+IDgpCi0jZGVmaW5lIEVMRjMyX01fU0laRShpbmZvKQkoKGluZm8pICYgMHhmZikKLSNkZWZpbmUgRUxGMzJfTV9JTkZPKHN5bSwgc2l6ZSkgKCgoc3ltKSA8PCA4KSArICh1bnNpZ25lZCBjaGFyKShzaXplKSkKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjY0X0x3b3JkCW1fdmFsdWU7CS8qIHN5bWJvbCB2YWx1ZSAqLwotCUVsZjY0X1h3b3JkCW1faW5mbzsJCS8qIHNpemUgKyBpbmRleCAqLwotCUVsZjY0X1h3b3JkCW1fcG9mZnNldDsJLyogc3ltYm9sIG9mZnNldCAqLwotCUVsZjY0X1dvcmQJbV9yZXBlYXQ7CS8qIHJlcGVhdCBjb3VudCAqLwotCUVsZjY0X1dvcmQJbV9zdHJpZGU7CS8qIHN0cmlkZSBpbmZvICovCi19IEVsZjY0X01vdmU7Ci0KLSNkZWZpbmUgRUxGNjRfTV9TWU0oaW5mbykJKChpbmZvKSA+PiA4KQotI2RlZmluZSBFTEY2NF9NX1NJWkUoaW5mbykJKChpbmZvKSAmIDB4ZmYpCi0jZGVmaW5lIEVMRjY0X01fSU5GTyhzeW0sIHNpemUpICgoKHN5bSkgPDwgOCkgKyAodW5zaWduZWQgY2hhcikoc2l6ZSkpCi0KLS8qCi0gKiBIYXJkd2FyZS9zb2Z0d2FyZSBjYXBhYmlsaXRpZXMgZW50cnkKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX1dvcmQJCWNfdGFnOwkvKiBlbnRyeSB0YWcgdmFsdWUgKi8KLQl1bmlvbiB7Ci0JCUVsZjMyX0FkZHIJY19wdHI7Ci0JCUVsZjMyX1dvcmQJY192YWw7Ci0JfSBjX3VuOwotfSBFbGYzMl9DYXA7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGY2NF9Yd29yZAkJY190YWc7CS8qIGVudHJ5IHRhZyB2YWx1ZSAqLwotCXVuaW9uIHsKLQkJRWxmNjRfQWRkcgljX3B0cjsKLQkJRWxmNjRfWHdvcmQJY192YWw7Ci0JfSBjX3VuOwotfSBFbGY2NF9DYXA7Ci0KLS8qCi0gKiBEeW5hbWljIFNlY3Rpb24gc3RydWN0dXJlIGFycmF5Ci0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQlFbGYzMl9Xb3JkCQlkX3RhZzsJLyogZW50cnkgdGFnIHZhbHVlICovCi0JdW5pb24gewotCQlFbGYzMl9BZGRyCWRfcHRyOwotCQlFbGYzMl9Xb3JkCWRfdmFsOwotCX0gZF91bjsKLX0gRWxmMzJfRHluOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmNjRfWHdvcmQJCWRfdGFnOwkvKiBlbnRyeSB0YWcgdmFsdWUgKi8KLQl1bmlvbiB7Ci0JCUVsZjY0X0FkZHIJZF9wdHI7Ci0JCUVsZjY0X1h3b3JkCWRfdmFsOwotCX0gZF91bjsKLX0gRWxmNjRfRHluOwotCi0vKiBkX3RhZyAqLwotI2RlZmluZSBEVF9OVUxMCQkwCS8qIE1hcmtzIGVuZCBvZiBkeW5hbWljIGFycmF5ICovCi0jZGVmaW5lIERUX05FRURFRAkxCS8qIE5hbWUgb2YgbmVlZGVkIGxpYnJhcnkgKERUX1NUUlRBQiBvZmZzZXQpICovCi0jZGVmaW5lIERUX1BMVFJFTFNaCTIJLyogU2l6ZSwgaW4gYnl0ZXMsIG9mIHJlbG9jYXRpb25zIGluIFBMVCAqLwotI2RlZmluZSBEVF9QTFRHT1QJMwkvKiBBZGRyZXNzIG9mIFBMVCBhbmQvb3IgR09UICovCi0jZGVmaW5lIERUX0hBU0gJCTQJLyogQWRkcmVzcyBvZiBzeW1ib2wgaGFzaCB0YWJsZSAqLwotI2RlZmluZSBEVF9TVFJUQUIJNQkvKiBBZGRyZXNzIG9mIHN0cmluZyB0YWJsZSAqLwotI2RlZmluZSBEVF9TWU1UQUIJNgkvKiBBZGRyZXNzIG9mIHN5bWJvbCB0YWJsZSAqLwotI2RlZmluZSBEVF9SRUxBCQk3CS8qIEFkZHJlc3Mgb2YgUmVsYSByZWxvY2F0aW9uIHRhYmxlICovCi0jZGVmaW5lIERUX1JFTEFTWgk4CS8qIFNpemUsIGluIGJ5dGVzLCBvZiBEVF9SRUxBIHRhYmxlICovCi0jZGVmaW5lIERUX1JFTEFFTlQJOQkvKiBTaXplLCBpbiBieXRlcywgb2Ygb25lIERUX1JFTEEgZW50cnkgKi8KLSNkZWZpbmUgRFRfU1RSU1oJMTAJLyogU2l6ZSwgaW4gYnl0ZXMsIG9mIERUX1NUUlRBQiB0YWJsZSAqLwotI2RlZmluZSBEVF9TWU1FTlQJMTEJLyogU2l6ZSwgaW4gYnl0ZXMsIG9mIG9uZSBEVF9TWU1UQUIgZW50cnkgKi8KLSNkZWZpbmUgRFRfSU5JVAkJMTIJLyogQWRkcmVzcyBvZiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAqLwotI2RlZmluZSBEVF9GSU5JCQkxMwkvKiBBZGRyZXNzIG9mIHRlcm1pbmF0aW9uIGZ1bmN0aW9uICovCi0jZGVmaW5lIERUX1NPTkFNRQkxNAkvKiBTaGFyZWQgb2JqZWN0IG5hbWUgKERUX1NUUlRBQiBvZmZzZXQpICovCi0jZGVmaW5lIERUX1JQQVRICTE1CS8qIExpYnJhcnkgc2VhcmNoIHBhdGggKERUX1NUUlRBQiBvZmZzZXQpICovCi0jZGVmaW5lIERUX1NZTUJPTElDCTE2CS8qIFN0YXJ0IHN5bWJvbCBzZWFyY2ggd2l0aGluIGxvY2FsIG9iamVjdCAqLwotI2RlZmluZSBEVF9SRUwJCTE3CS8qIEFkZHJlc3Mgb2YgUmVsIHJlbG9jYXRpb24gdGFibGUgKi8KLSNkZWZpbmUgRFRfUkVMU1oJMTgJLyogU2l6ZSwgaW4gYnl0ZXMsIG9mIERUX1JFTCB0YWJsZSAqLwotI2RlZmluZSBEVF9SRUxFTlQJMTkJLyogU2l6ZSwgaW4gYnl0ZXMsIG9mIG9uZSBEVF9SRUwgZW50cnkgKi8KLSNkZWZpbmUgRFRfUExUUkVMCTIwCS8qIFR5cGUgb2YgUExUIHJlbG9jYXRpb24gZW50cmllcyAqLwotI2RlZmluZSBEVF9ERUJVRwkyMQkvKiBVc2VkIGZvciBkZWJ1Z2dpbmc7IHVuc3BlY2lmaWVkICovCi0jZGVmaW5lIERUX1RFWFRSRUwJMjIJLyogUmVsb2NhdGlvbnMgbWlnaHQgbW9kaWZ5IG5vbi13cml0YWJsZSBzZWcgKi8KLSNkZWZpbmUgRFRfSk1QUkVMCTIzCS8qIEFkZHJlc3Mgb2YgcmVsb2NhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIFBMVCAqLwotI2RlZmluZSBEVF9CSU5EX05PVwkyNAkvKiBQcm9jZXNzIGFsbCByZWxvY2F0aW9ucyBhdCBsb2FkLXRpbWUgKi8KLSNkZWZpbmUgRFRfSU5JVF9BUlJBWQkyNQkvKiBBZGRyZXNzIG9mIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFycmF5ICovCi0jZGVmaW5lIERUX0ZJTklfQVJSQVkJMjYJLyogU2l6ZSwgaW4gYnl0ZXMsIG9mIERUX0lOSVRfQVJSQVkgYXJyYXkgKi8KLSNkZWZpbmUgRFRfSU5JVF9BUlJBWVNaIDI3CS8qIEFkZHJlc3Mgb2YgdGVybWluYXRpb24gZnVuY3Rpb24gYXJyYXkgKi8KLSNkZWZpbmUgRFRfRklOSV9BUlJBWVNaIDI4CS8qIFNpemUsIGluIGJ5dGVzLCBvZiBEVF9GSU5JX0FSUkFZIGFycmF5Ki8KLSNkZWZpbmUgRFRfUlVOUEFUSAkyOQkvKiBvdmVycmlkZXMgRFRfUlBBVEggKi8KLSNkZWZpbmUgRFRfRkxBR1MJMzAJLyogRW5jb2RlcyBPUklHSU4sIFNZTUJPTElDLCBURVhUUkVMLCBCSU5EX05PVywgU1RBVElDX1RMUyAqLwotI2RlZmluZSBEVF9FTkNPRElORwkzMQkvKiA/Pz8gKi8KLSNkZWZpbmUgRFRfUFJFSU5JVF9BUlJBWSAzMgkvKiBBZGRyZXNzIG9mIHByZS1pbml0IGZ1bmN0aW9uIGFycmF5ICovCi0jZGVmaW5lIERUX1BSRUlOSVRfQVJSQVlTWiAzMwkvKiBTaXplLCBpbiBieXRlcywgb2YgRFRfUFJFSU5JVF9BUlJBWSBhcnJheSAqLwotI2RlZmluZSBEVF9OVU0JCTM0Ci0KLSNkZWZpbmUgRFRfTE9PUwkJMHg2MDAwMDAwMAkvKiBPcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIHJhbmdlICovCi0jZGVmaW5lIERUX1ZFUlNZTQkweDZmZmZmZmYwCS8qIFN5bWJvbCB2ZXJzaW9ucyAqLwotI2RlZmluZSBEVF9GTEFHU18xCTB4NmZmZmZmZmIJLyogRUxGIGR5bmFtaWMgZmxhZ3MgKi8KLSNkZWZpbmUgRFRfVkVSREVGCTB4NmZmZmZmZmMJLyogVmVyc2lvbnMgZGVmaW5lZCBieSBmaWxlICovCi0jZGVmaW5lIERUX1ZFUkRFRk5VTQkweDZmZmZmZmZkCS8qIE51bWJlciBvZiB2ZXJzaW9ucyBkZWZpbmVkIGJ5IGZpbGUgKi8KLSNkZWZpbmUgRFRfVkVSTkVFRAkweDZmZmZmZmZlCS8qIFZlcnNpb25zIG5lZWRlZCBieSBmaWxlICovCi0jZGVmaW5lIERUX1ZFUk5FRUROVU0JMHg2ZmZmZmZmZgkvKiBOdW1iZXIgb2YgdmVyc2lvbnMgbmVlZGVkIGJ5IGZpbGUgKi8KLSNkZWZpbmUgRFRfSElPUwkJMHg2ZmZmZmZmZgotI2RlZmluZSBEVF9MT1BST0MJMHg3MDAwMDAwMAkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgcmFuZ2UgKi8KLSNkZWZpbmUgRFRfSElQUk9DCTB4N2ZmZmZmZmYKLQotLyogRmxhZyB2YWx1ZXMgZm9yIERUX0ZMQUdTICovCi0jZGVmaW5lIERGX09SSUdJTgkweDAwMDAwMDAxCS8qIHVzZXMgJE9SSUdJTiAqLwotI2RlZmluZSBERl9TWU1CT0xJQwkweDAwMDAwMDAyCS8qICovCi0jZGVmaW5lIERGX1RFWFRSRUwJMHgwMDAwMDAwNAkvKiAqLwotI2RlZmluZSBERl9CSU5EX05PVwkweDAwMDAwMDA4CS8qICovCi0jZGVmaW5lIERGX1NUQVRJQ1RfTFMJMHgwMDAwMDAxMAkvKiAqLwotCi0vKiBGbGFnIHZhbHVlcyBmb3IgRFRfRkxBR1NfMSAoaW5jb21wbGV0ZSkgKi8KLSNkZWZpbmUgREZfMV9CSU5EX05PVwkweDAwMDAwMDAxCS8qIFNhbWUgYXMgREZfQklORF9OT1cgKi8KLSNkZWZpbmUgREZfMV9OT0RFTEVURQkweDAwMDAwMDA4CS8qIFNldCB0aGUgUlRMRF9OT0RFTEVURSBmb3Igb2JqZWN0ICovCi0jZGVmaW5lIERGXzFfSU5JVEZJUlNUCTB4MDAwMDAwMjAJLyogT2JqZWN0J3MgaW5pdC9maW5pIHRha2UgcHJpb3JpdHkgKi8KLSNkZWZpbmUgREZfMV9OT09QRU4JMHgwMDAwMDA0MAkvKiBEbyBub3QgYWxsb3cgbG9hZGluZyBvbiBkbG9wZW4oKSAqLwotCi0vKgotICogQXV4aWxpYXJ5IFZlY3RvcnMKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX1dvcmQJYV90eXBlOwkJCQkvKiAzMi1iaXQgaWQgKi8KLQlFbGYzMl9Xb3JkCWFfdjsJCQkJLyogMzItYml0IGlkICovCi19IEF1eDMySW5mbzsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjY0X1dvcmQJYV90eXBlOwkJLyogMzItYml0IGlkICovCi0JRWxmNjRfWHdvcmQJYV92OwkJLyogNjQtYml0IGlkICovCi19IEF1eDY0SW5mbzsKLQotLyogQkVHSU4gYW5kcm9pZC1jaGFuZ2VkOiB0aGVzZSBjb25zdGFudHMgc2hvdWxkIGNvbWUgZnJvbSA8bGludXgvYXV4dmVjLmg+LiAqLwotI2lmIDAKLS8qIGFfdHlwZSAqLwotI2RlZmluZSBBVF9OVUxMCQkwCS8qIE1hcmtzIGVuZCBvZiBhcnJheSAqLwotI2RlZmluZSBBVF9JR05PUkUJMQkvKiBObyBtZWFuaW5nLCBhX3VuIGlzIHVuZGVmaW5lZCAqLwotI2RlZmluZSBBVF9FWEVDRkQJMgkvKiBPcGVuIGZpbGUgZGVzY3JpcHRvciBvZiBvYmplY3QgZmlsZSAqLwotI2RlZmluZSBBVF9QSERSCQkzCS8qICZwaGRyWzBdICovCi0jZGVmaW5lIEFUX1BIRU5UCTQJLyogc2l6ZW9mKHBoZHJbMF0pICovCi0jZGVmaW5lIEFUX1BITlVNCTUJLyogIyBwaGRyIGVudHJpZXMgKi8KLSNkZWZpbmUgQVRfUEFHRVNaCTYJLyogUEFHRVNJWkUgKi8KLSNkZWZpbmUgQVRfQkFTRQkJNwkvKiBJbnRlcnByZXRlciBiYXNlIGFkZHIgKi8KLSNkZWZpbmUgQVRfRkxBR1MJOAkvKiBQcm9jZXNzb3IgZmxhZ3MgKi8KLSNkZWZpbmUgQVRfRU5UUlkJOQkvKiBFbnRyeSBhZGRyZXNzIG9mIGV4ZWN1dGFibGUgKi8KLSNkZWZpbmUgQVRfRENBQ0hFQlNJWkUJMTAJLyogRGF0YSBjYWNoZSBibG9jayBzaXplICovCi0jZGVmaW5lIEFUX0lDQUNIRUJTSVpFCTExCS8qIEluc3RydWN0aW9uIGNhY2hlIGJsb2NrIHNpemUgKi8KLSNkZWZpbmUgQVRfVUNBQ0hFQlNJWkUJMTIJLyogVW5pZmllZCBjYWNoZSBibG9jayBzaXplICovCi0jZGVmaW5lIEFUX1NUQUNLQkFTRQkxMwkvKiBCYXNlIGFkZHJlc3Mgb2YgdGhlIG1haW4gdGhyZWFkICovCi0KLQkvKiBWZW5kb3Igc3BlY2lmaWMgKi8KLSNkZWZpbmUgQVRfTUlQU19OT1RFTEYJMTAJLyogWFhYIGFfdmFsICE9IDAgLT4gTUlQUyBYQ09GRiBleGVjdXRhYmxlICovCi0KLSNkZWZpbmUgQVRfRVVJRAkJMjAwMAkvKiBldWlkIChzb2xhcmlzIGNvbXBhdGlibGUgbnVtYmVycykgKi8KLSNkZWZpbmUgQVRfUlVJRAkJMjAwMQkvKiBydWlkIChzb2xhcmlzIGNvbXBhdGlibGUgbnVtYmVycykgKi8KLSNkZWZpbmUgQVRfRUdJRAkJMjAwMgkvKiBlZ2lkIChzb2xhcmlzIGNvbXBhdGlibGUgbnVtYmVycykgKi8KLSNkZWZpbmUgQVRfUkdJRAkJMjAwMwkvKiByZ2lkIChzb2xhcmlzIGNvbXBhdGlibGUgbnVtYmVycykgKi8KLQotCS8qIFNvbGFyaXMga2VybmVsIHNwZWNpZmljICovCi0jZGVmaW5lIEFUX1NVTl9MREVMRgkyMDA0CS8qIGR5bmFtaWMgbGlua2VyJ3MgRUxGIGhlYWRlciAqLwotI2RlZmluZSBBVF9TVU5fTERTSERSCTIwMDUJLyogZHluYW1pYyBsaW5rZXIncyBzZWN0aW9uIGhlYWRlciAqLwotI2RlZmluZSBBVF9TVU5fTEROQU1FCTIwMDYJLyogZHluYW1pYyBsaW5rZXIncyBuYW1lICovCi0jZGVmaW5lIEFUX1NVTl9MUEdTSVpFCTIwMDcJLyogbGFyZ2UgcGFnZXNpemUgKi8KLQotCS8qIE90aGVyIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIEFUX1NVTl9QTEFURk9STSAyMDA4CS8qIHN5c2luZm8oU0lfUExBVEZPUk0pICovCi0jZGVmaW5lIEFUX1NVTl9IV0NBUAkyMDA5CS8qIHByb2Nlc3MgaGFyZHdhcmUgY2FwYWJpbGl0aWVzICovCi0jZGVmaW5lIEFUX1NVTl9JRkxVU0gJMjAxMAkvKiBkbyB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBpbnN0cnVjdGlvbiBjYWNoZT8gKi8KLSNkZWZpbmUgQVRfU1VOX0NQVQkyMDExCS8qIENQVSBuYW1lICovCi0JLyogaWJjczIgZW11bGF0aW9uIGJhbmQgYWlkICovCi0jZGVmaW5lIEFUX1NVTl9FTVVMX0VOVFJZIDIwMTIJLyogY29mZiBlbnRyeSBwb2ludCAqLwotI2RlZmluZSBBVF9TVU5fRU1VTF9FWEVDRkQgMjAxMyAvKiBjb2ZmIGZpbGUgZGVzY3JpcHRvciAqLwotCS8qIEV4ZWN1dGFibGUncyBmdWxseSByZXNvbHZlZCBuYW1lICovCi0jZGVmaW5lIEFUX1NVTl9FWEVDTkFNRSAyMDE0Ci0jZW5kaWYKLS8qIEVORCBhbmRyb2lkLWNoYW5nZWQgKi8KLQotLyoKLSAqIE5vdGUgSGVhZGVycwotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmMzJfV29yZCBuX25hbWVzejsKLQlFbGYzMl9Xb3JkIG5fZGVzY3N6OwotCUVsZjMyX1dvcmQgbl90eXBlOwotfSBFbGYzMl9OaGRyOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmNjRfV29yZCBuX25hbWVzejsKLQlFbGY2NF9Xb3JkIG5fZGVzY3N6OwotCUVsZjY0X1dvcmQgbl90eXBlOwotfSBFbGY2NF9OaGRyOwotCi0jZGVmaW5lIEVMRl9OT1RFX0dOVV9OQU1FU1oJCTQKLSNkZWZpbmUgRUxGX05PVEVfR05VX05BTUUJCSJHTlVcMCIKLQotLyoKLSAqIEdOVS1zcGVjaWZpYyBub3RlIHR5cGU6IEFCSSB0YWcKLSAqIG5hbWU6IEdOVVwwCi0gKiBuYW1lc3o6IDQKLSAqIGRlc2M6Ci0gKgl3b3JkWzBdOiBPUyB0YWcKLSAqCXdvcmRbMV06IG1ham9yIHZlcnNpb24KLSAqCXdvcmRbMl06IG1pbm9yIHZlcnNpb24KLSAqCXdvcmRbM106IHRlZW55IHZlcnNpb24KLSAqIGRlc2NzejogMTYKLSAqLwotLyogR05VLXNwZWNpZmljIG5vdGUgbmFtZSBhbmQgZGVzY3JpcHRpb24gc2l6ZXMgKi8KLSNkZWZpbmUgRUxGX05PVEVfVFlQRV9BQklfVEFHCQkxCi0jZGVmaW5lIEVMRl9OT1RFX0FCSV9OQU1FCQlFTEZfTk9URV9HTlVfTkFNRQotI2RlZmluZSBFTEZfTk9URV9BQklfTkFNRVNaCQlFTEZfTk9URV9HTlVfTkFNRVNaCi0jZGVmaW5lIEVMRl9OT1RFX0FCSV9ERVNDU1oJCTE2Ci0vKiBHTlUtc3BlY2lmaWMgT1MvdmVyc2lvbiB2YWx1ZSBzdHVmZiAqLwotI2RlZmluZSBFTEZfTk9URV9BQklfT1NfTElOVVgJCTAKLSNkZWZpbmUgRUxGX05PVEVfQUJJX09TX0hVUkQJCTEKLSNkZWZpbmUgRUxGX05PVEVfQUJJX09TX1NPTEFSSVMJCTIKLSNkZWZpbmUgRUxGX05PVEVfQUJJX09TX0tGUkVFQlNECTMKLSNkZWZpbmUgRUxGX05PVEVfQUJJX09TX0tORVRCU0QJCTQKLQotLyoKLSAqIEdOVS1zcGVjaWZpYyBub3RlIHR5cGU6IEhhcmR3YXJlIGNhcGFiaWxpdGllcwotICogbmFtZTogR05VXDAKLSAqIG5hbWVzejogNAotICogZGVzYzoKLSAqCXdvcmRbMF06IE51bWJlciBvZiBlbnRyaWVzCi0gKgl3b3JkWzFdOiBCaXRtYXNrIG9mIGVuYWJsZWQgZW50cmllcwotICoJRm9sbG93ZWQgYnkgYSBieXRlIGlkLCBhbmQgYSBOVUwgdGVybWluYXRlZCBzdHJpbmcgcGVyIGVudHJ5Ci0gKiBkZXNjc3o6IHZhcmlhYmxlCi0gKi8KLSNkZWZpbmUgRUxGX05PVEVfVFlQRV9HTlVfSFdDQVAJCTIKLQotLyoKLSAqIEdOVS1zcGVjaWZpYyBub3RlIHR5cGU6IEJ1aWxkIElEIGdlbmVyYXRlZCBieSBsZAotICogbmFtZTogR05VXDAKLSAqIGRlc2M6Ci0gKgl3b3JkWzAuLjRdIFNIQTEgW2RlZmF1bHRdCi0gKiBvcgotICoJd29yZFswLi4zXSBtZDUgb3IgdXVpZAotICogZGVzY3N6OiAxNiBvciAyMAotICovCi0jZGVmaW5lIEVMRl9OT1RFX1RZUEVfR05VX0JVSUxEX0lECTMKLQotLyogU3VTRS1zcGVjaWZpYyBub3RlIHR5cGU6IEFCSQotICogbmFtZTogU3VTRVwwCi0gKiBuYW1lc3o6IDUKLSAqIGRlc2M6Ci0gKgloYWxmWzBdID0gTU1tbQotICoKLSAqCU0gPSBwcm9kdWN0IG1ham9yIHZlcnNpb24KLSAqCW0gPSBwcm9kdWN0IG1pbm9yIHZlcnNpb24KLSAqIGRlc2NzejogMgotICovCi0jZGVmaW5lIEVMRl9OT1RFX1RZUEVfU1VTRV9UQUcJMQotLyogU3VTRS1zcGVjaWZpYyBub3RlIG5hbWUgYW5kIGRlc2NyaXB0aW9uIHNpemVzICovCi0jZGVmaW5lIEVMRl9OT1RFX1NVU0VfTkFNRVNaCTUKLSNkZWZpbmUgRUxGX05PVEVfU1VTRV9ERVNDU1oJMgotLyogU3VTRS1zcGVjaWZpYyBub3RlIG5hbWUgKi8KLSNkZWZpbmUgRUxGX05PVEVfU1VTRV9OQU1FCQkiU3VTRVwwIgotCi0vKiBTdVNFLXNwZWNpZmljIG5vdGUgdHlwZTogdmVyc2lvbgotICogbmFtZTogU3VTRVwwXDBcMFwwCi0gKiBuYW1lc3o6IDgKLSAqIGRlc2M6Ci0gKgl3b3JkWzBdID0gVlZUVE1NbW0KLSAqCi0gKglWID0gdmVyc2lvbiBvZiBmb2xsb3dpbmcgZGF0YQotICoJVCA9IHByb2R1Y3QgdHlwZTogW2JveCwgc2xlcywgbmxkLCB3aGF0ZXZlcl0KLSAqCU0gPSBwcm9kdWN0IG1ham9yIHZlcnNpb24KLSAqCW0gPSBwcm9kdWN0IG1pbm9yIHZlcnNpb24KLSAqIGRlc2NzejogOAotICovCi0jZGVmaW5lIEVMRl9OT1RFX1RZUEVfU1VTRV9WRVJTSU9OX1RBRwkweDQ1NTM3NTUzCS8qIFN1U0UgaW4gTEUgKi8KLS8qIFN1U0Utc3BlY2lmaWMgbm90ZSBuYW1lIGFuZCBkZXNjcmlwdGlvbiBzaXplcyAqLwotI2RlZmluZSBFTEZfTk9URV9TVVNFX1ZFUlNJT05fTkFNRVNaCTgKLSNkZWZpbmUgRUxGX05PVEVfU1VTRV9WRVJTSU9OX0RFU0NTWgk4Ci0vKiBTdVNFLXNwZWNpZmljIG5vdGUgbmFtZSAqLwotI2RlZmluZSBFTEZfTk9URV9TVVNFX1ZFUlNJT05fTkFNRQkJIlN1U0VcMFwwXDBcMCIKLQotLyogTmV0QlNELXNwZWNpZmljIG5vdGUgdHlwZTogRW11bGF0aW9uIG5hbWUuCi0gKiBuYW1lOiBOZXRCU0RcMFwwCi0gKiBuYW1lc3o6IDgKLSAqIGRlc2M6Ci0gKgl3b3JkWzBdOiBNTW1tcnJwcDAwCi0gKgotICoJTSA9IG1ham9yIHZlcnNpb24KLSAqCW0gPSBtaW5vciB2ZXJzaW9uCi0gKglyID0gcmVsZWFzZSBbIiIsQS1aLFpbQS1aXSBidXQgbnVtZXJpY10KLSAqCXAgPSBwYXRjaGxldmVsCi0gKiBkZXNjc3o6IDQKLSAqLwotI2RlZmluZSBFTEZfTk9URV9UWVBFX05FVEJTRF9UQUcJMQotLyogTmV0QlNELXNwZWNpZmljIG5vdGUgbmFtZSBhbmQgZGVzY3JpcHRpb24gc2l6ZXMgKi8KLSNkZWZpbmUgRUxGX05PVEVfTkVUQlNEX05BTUVTWgkJNwotI2RlZmluZSBFTEZfTk9URV9ORVRCU0RfREVTQ1NaCQk0Ci0vKiBOZXRCU0Qtc3BlY2lmaWMgbm90ZSBuYW1lICovCi0jZGVmaW5lIEVMRl9OT1RFX05FVEJTRF9OQU1FCQkiTmV0QlNEXDBcMCIKLQotLyogTmV0QlNELXNwZWNpZmljIG5vdGUgdHlwZTogQ2hlY2tzdW0uCi0gKiBUaGVyZSBzaG91bGQgYmUgMSBOT1RFIHBlciBQVF9MT0FEIHNlY3Rpb24uCi0gKiBuYW1lOiA/Pz8KLSAqIG5hbWVzejogPz8/Ci0gKiBkZXNjOgotICoJYSB0dXBsZSBvZiA8cGhudW0+KDE2KSw8Y2hrLXR5cGU+KDE2KSw8Y2hrLXZhbHVlPi4KLSAqIGRlc2NzejogPz8/Ci0gKi8KLSNkZWZpbmUgRUxGX05PVEVfVFlQRV9DSEVDS1NVTV9UQUcJMgotI2RlZmluZSBFTEZfTk9URV9DSEVDS1NVTV9DUkMzMgkJMQotI2RlZmluZSBFTEZfTk9URV9DSEVDS1NVTV9NRDUJCTIKLSNkZWZpbmUgRUxGX05PVEVfQ0hFQ0tTVU1fU0hBMQkJMwotI2RlZmluZSBFTEZfTk9URV9DSEVDS1NVTV9TSEEyNTYJNAotCi0vKgotICogTmV0QlNELXNwZWNpZmljIG5vdGUgdHlwZTogUGFYLgotICogVGhlcmUgc2hvdWxkIGJlIDEgTk9URSBwZXIgZXhlY3V0YWJsZS4KLSAqIG5hbWU6IFBhWFwwCi0gKiBuYW1lc3o6IDQKLSAqIGRlc2M6Ci0gKgl3b3JkWzBdOiBjYXBhYmlsaXR5IGJpdG1hc2sKLSAqIGRlc2NzejogNAotICovCi0jZGVmaW5lIEVMRl9OT1RFX1RZUEVfUEFYX1RBRwkJMwotI2RlZmluZSBFTEZfTk9URV9QQVhfTVBST1RFQ1QJCTB4MDEJLyogRm9yY2UgZW5hYmxlIE1wcm90ZWN0ICovCi0jZGVmaW5lIEVMRl9OT1RFX1BBWF9OT01QUk9URUNUCQkweDAyCS8qIEZvcmNlIGRpc2FibGUgTXByb3RlY3QgKi8KLSNkZWZpbmUgRUxGX05PVEVfUEFYX0dVQVJECQkweDA0CS8qIEZvcmNlIGVuYWJsZSBTZWd2Z3VhcmQgKi8KLSNkZWZpbmUgRUxGX05PVEVfUEFYX05PR1VBUkQJCTB4MDgJLyogRm9yY2UgZGlzYWJsZSBTZXJ2Z3VhcmQgKi8KLSNkZWZpbmUgRUxGX05PVEVfUEFYX0FTTFIJCTB4MTAJLyogRm9yY2UgZW5hYmxlIEFTTFIgKi8KLSNkZWZpbmUgRUxGX05PVEVfUEFYX05PQVNMUgkJMHgyMAkvKiBGb3JjZSBkaXNhYmxlIEFTTFIgKi8KLSNkZWZpbmUgRUxGX05PVEVfUEFYX05BTUVTWgkJNAotI2RlZmluZSBFTEZfTk9URV9QQVhfTkFNRQkJIlBhWFwwIgotI2RlZmluZSBFTEZfTk9URV9QQVhfREVTQ1NaCQk0Ci0KLS8qCi0gKiBOZXRCU0Qtc3BlY2lmaWMgY29yZSBmaWxlIGluZm9ybWF0aW9uLgotICoKLSAqIE5ldEJTRCBFTEYgY29yZSBmaWxlcyB1c2Ugbm90ZXMgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dAotICogdGhlIHByb2Nlc3MncyBzdGF0ZS4JIFRoZSBub3RlIG5hbWUgaXMgIk5ldEJTRC1DT1JFIiBmb3IKLSAqIGluZm9ybWF0aW9uIHRoYXQgaXMgZ2xvYmFsIHRvIHRoZSBwcm9jZXNzLCBhbmQgIk5ldEJTRC1DT1JFQG5uIiwKLSAqIHdoZXJlICJubiIgaXMgdGhlIGx3cGlkIG9mIHRoZSBMV1AgdGhhdCB0aGUgaW5mb3JtYXRpb24gYmVsb25ncwotICogdG8gKHN1Y2ggYXMgcmVnaXN0ZXIgc3RhdGUpLgotICoKLSAqIFdlIHVzZSB0aGUgZm9sbG93aW5nIG5vdGUgaWRlbnRpZmllcnM6Ci0gKgotICoJRUxGX05PVEVfTkVUQlNEX0NPUkVfUFJPQ0lORk8KLSAqCQlOb3RlIGlzIGEgIm5ldGJzZF9lbGZjb3JlX3Byb2NpbmZvIiBzdHJ1Y3R1cmUuCi0gKgotICogV2UgYWxzbyB1c2UgcHRyYWNlKDIpIHJlcXVlc3QgbnVtYmVycyAodGhlIG9uZXMgdGhhdCBleGlzdCBpbgotICogbWFjaGluZS1kZXBlbmRlbnQgc3BhY2UpIHRvIGlkZW50aWZ5IHJlZ2lzdGVyIGluZm8gbm90ZXMuICBUaGUKLSAqIGluZm8gaW4gc3VjaCBub3RlcyBpcyBpbiB0aGUgc2FtZSBmb3JtYXQgdGhhdCBwdHJhY2UoMikgd291bGQKLSAqIGV4cG9ydCB0aGF0IGluZm9ybWF0aW9uLgotICoKLSAqIFBsZWFzZSB0cnkgdG8ga2VlcCB0aGUgbWVtYmVycyBvZiB0aGlzIHN0cnVjdHVyZSBuaWNlbHkgYWxpZ25lZCwKLSAqIGFuZCBpZiB5b3UgYWRkIGVsZW1lbnRzLCBhZGQgdGhlbSB0byB0aGUgZW5kIGFuZCBidW1wIHRoZSB2ZXJzaW9uLgotICovCi0KLSNkZWZpbmUgRUxGX05PVEVfTkVUQlNEX0NPUkVfTkFNRQkiTmV0QlNELUNPUkUiCi0KLSNkZWZpbmUgRUxGX05PVEVfTkVUQlNEX0NPUkVfUFJPQ0lORk8JMQotCi0jZGVmaW5lIE5FVEJTRF9FTEZDT1JFX1BST0NJTkZPX1ZFUlNJT04gMQotCi1zdHJ1Y3QgbmV0YnNkX2VsZmNvcmVfcHJvY2luZm8gewotCS8qIFZlcnNpb24gMSBmaWVsZHMgc3RhcnQgaGVyZS4gKi8KLQl1aW50MzJfdAljcGlfdmVyc2lvbjsJCS8qIG91ciB2ZXJzaW9uICovCi0JdWludDMyX3QJY3BpX2NwaXNpemU7CQkvKiBzaXplb2YodGhpcyBzdHJ1Y3QpICovCi0JdWludDMyX3QJY3BpX3NpZ25vOwkJLyoga2lsbGluZyBzaWduYWwgKi8KLQl1aW50MzJfdAljcGlfc2lnY29kZTsJCS8qIHNpZ25hbCBjb2RlICovCi0JdWludDMyX3QJY3BpX3NpZ3BlbmRbNF07CQkvKiBwZW5kaW5nIHNpZ25hbHMgKi8KLQl1aW50MzJfdAljcGlfc2lnbWFza1s0XTsJCS8qIGJsb2NrZWQgc2lnbmFscyAqLwotCXVpbnQzMl90CWNwaV9zaWdpZ25vcmVbNF07CS8qIGlnbm9yZWQgc2lnbmFscyAqLwotCXVpbnQzMl90CWNwaV9zaWdjYXRjaFs0XTsJLyogY2F1Z2h0IHNpZ25hbHMgKi8KLQlpbnQzMl90CQljcGlfcGlkOwkJLyogcHJvY2VzcyBJRCAqLwotCWludDMyX3QJCWNwaV9wcGlkOwkJLyogcGFyZW50IHByb2Nlc3MgSUQgKi8KLQlpbnQzMl90CQljcGlfcGdycDsJCS8qIHByb2Nlc3MgZ3JvdXAgSUQgKi8KLQlpbnQzMl90CQljcGlfc2lkOwkJLyogc2Vzc2lvbiBJRCAqLwotCXVpbnQzMl90CWNwaV9ydWlkOwkJLyogcmVhbCB1c2VyIElEICovCi0JdWludDMyX3QJY3BpX2V1aWQ7CQkvKiBlZmZlY3RpdmUgdXNlciBJRCAqLwotCXVpbnQzMl90CWNwaV9zdnVpZDsJCS8qIHNhdmVkIHVzZXIgSUQgKi8KLQl1aW50MzJfdAljcGlfcmdpZDsJCS8qIHJlYWwgZ3JvdXAgSUQgKi8KLQl1aW50MzJfdAljcGlfZWdpZDsJCS8qIGVmZmVjdGl2ZSBncm91cCBJRCAqLwotCXVpbnQzMl90CWNwaV9zdmdpZDsJCS8qIHNhdmVkIGdyb3VwIElEICovCi0JdWludDMyX3QJY3BpX25sd3BzOwkJLyogbnVtYmVyIG9mIExXUHMgKi8KLQlpbnQ4X3QJCWNwaV9uYW1lWzMyXTsJCS8qIGNvcHkgb2YgcC0+cF9jb21tICovCi0JLyogQWRkIHZlcnNpb24gMiBmaWVsZHMgYmVsb3cgaGVyZS4gKi8KLQlpbnQzMl90CQljcGlfc2lnbHdwOwkvKiBMV1AgdGFyZ2V0IG9mIGtpbGxpbmcgc2lnbmFsICovCi19OwotCi0vKgotICogTmV0QlNELXNwZWNpZmljIG5vdGUgdHlwZTogTUFDSElORV9BUkNILgotICogVGhlcmUgc2hvdWxkIGJlIDEgTk9URSBwZXIgZXhlY3V0YWJsZS4KLSAqIG5hbWU6CU5ldEJTRFwwCi0gKiBuYW1lc3o6CTcKLSAqIGRlc2M6CXN0cmluZwotICogZGVzY3N6Ogl2YXJpYWJsZQotICovCi0jZGVmaW5lIEVMRl9OT1RFX1RZUEVfTUFSQ0hfVEFHCQk1Ci0vKiBOZXRCU0Qtc3BlY2lmaWMgbm90ZSBuYW1lIGFuZCBkZXNjcmlwdGlvbiBzaXplcyAqLwotI2RlZmluZSBFTEZfTk9URV9NQVJDSF9OQU1FU1oJCUVMRl9OT1RFX05FVEJTRF9OQU1FU1oKLS8qIE5ldEJTRC1zcGVjaWZpYyBub3RlIG5hbWUgKi8KLSNkZWZpbmUgRUxGX05PVEVfTUFSQ0hfTkFNRQkJRUxGX05PVEVfTkVUQlNEX05BTUUKLQotI2lmICFkZWZpbmVkKEVMRlNJWkUpICYmIGRlZmluZWQoQVJDSF9FTEZTSVpFKQotI2RlZmluZSBFTEZTSVpFIEFSQ0hfRUxGU0laRQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEVMRlNJWkUpCi0jZGVmaW5lIENPTkNBVCh4LHkpCV9fQ09OQ0FUKHgseSkKLSNkZWZpbmUgRUxGTkFNRSh4KQlDT05DQVQoZWxmLENPTkNBVChFTEZTSVpFLENPTkNBVChfLHgpKSkKLSNkZWZpbmUgRUxGTkFNRTIoeCx5KQlDT05DQVQoeCxDT05DQVQoX2VsZixDT05DQVQoRUxGU0laRSxDT05DQVQoXyx5KSkpKQotI2RlZmluZSBFTEZOQU1FRU5EKHgpCUNPTkNBVCh4LENPTkNBVChfZWxmLEVMRlNJWkUpKQotI2RlZmluZSBFTEZERUZOTkFNRSh4KQlDT05DQVQoRUxGLENPTkNBVChFTEZTSVpFLENPTkNBVChfLHgpKSkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChFTEZTSVpFKSAmJiAoRUxGU0laRSA9PSAzMikKLSNkZWZpbmUgRWxmX0VoZHIJRWxmMzJfRWhkcgotI2RlZmluZSBFbGZfUGhkcglFbGYzMl9QaGRyCi0jZGVmaW5lIEVsZl9TaGRyCUVsZjMyX1NoZHIKLSNkZWZpbmUgRWxmX1N5bQkJRWxmMzJfU3ltCi0jZGVmaW5lIEVsZl9SZWwJCUVsZjMyX1JlbAotI2RlZmluZSBFbGZfUmVsYQlFbGYzMl9SZWxhCi0jZGVmaW5lIEVsZl9EeW4JCUVsZjMyX0R5bgotI2RlZmluZSBFbGZfV29yZAlFbGYzMl9Xb3JkCi0jZGVmaW5lIEVsZl9Td29yZAlFbGYzMl9Td29yZAotI2RlZmluZSBFbGZfSGFsZglFbGYzMl9IYWxmCi0jZGVmaW5lIEVsZl9BZGRyCUVsZjMyX0FkZHIKLSNkZWZpbmUgRWxmX09mZgkJRWxmMzJfT2ZmCi0jZGVmaW5lIEVsZl9TT2ZmCUVsZjMyX1NPZmYKLSNkZWZpbmUgRWxmX05oZHIJRWxmMzJfTmhkcgotI2RlZmluZSBFbGZfVmVyZGVmCUVsZjMyX1ZlcmRlZgotI2RlZmluZSBFbGZfVmVyZGF1eAlFbGYzMl9WZXJkYXV4Ci0jZGVmaW5lIEVsZl9WZXJuZWVkCUVsZjMyX1Zlcm5lZWQKLSNkZWZpbmUgRWxmX1Zlcm5hdXgJRWxmMzJfVmVybmF1eAotI2RlZmluZSBFbGZfVmVyc3ltCUVsZjMyX1ZlcnN5bQotCi0jZGVmaW5lIEVMRl9SX1NZTQlFTEYzMl9SX1NZTQotI2RlZmluZSBFTEZfUl9UWVBFCUVMRjMyX1JfVFlQRQotI2RlZmluZSBFTEZDTEFTUwlFTEZDTEFTUzMyCi0KLSNkZWZpbmUgQXV4SW5mbwkJQXV4MzJJbmZvCi0jZWxpZiBkZWZpbmVkKEVMRlNJWkUpICYmIChFTEZTSVpFID09IDY0KQotI2RlZmluZSBFbGZfRWhkcglFbGY2NF9FaGRyCi0jZGVmaW5lIEVsZl9QaGRyCUVsZjY0X1BoZHIKLSNkZWZpbmUgRWxmX1NoZHIJRWxmNjRfU2hkcgotI2RlZmluZSBFbGZfU3ltCQlFbGY2NF9TeW0KLSNkZWZpbmUgRWxmX1JlbAkJRWxmNjRfUmVsCi0jZGVmaW5lIEVsZl9SZWxhCUVsZjY0X1JlbGEKLSNkZWZpbmUgRWxmX0R5bgkJRWxmNjRfRHluCi0jZGVmaW5lIEVsZl9Xb3JkCUVsZjY0X1dvcmQKLSNkZWZpbmUgRWxmX1N3b3JkCUVsZjY0X1N3b3JkCi0jZGVmaW5lIEVsZl9IYWxmCUVsZjY0X0hhbGYKLSNkZWZpbmUgRWxmX0FkZHIJRWxmNjRfQWRkcgotI2RlZmluZSBFbGZfT2ZmCQlFbGY2NF9PZmYKLSNkZWZpbmUgRWxmX1NPZmYJRWxmNjRfU09mZgotI2RlZmluZSBFbGZfTmhkcglFbGY2NF9OaGRyCi0jZGVmaW5lIEVsZl9WZXJkZWYJRWxmNjRfVmVyZGVmCi0jZGVmaW5lIEVsZl9WZXJkYXV4CUVsZjY0X1ZlcmRhdXgKLSNkZWZpbmUgRWxmX1Zlcm5lZWQJRWxmNjRfVmVybmVlZAotI2RlZmluZSBFbGZfVmVybmF1eAlFbGY2NF9WZXJuYXV4Ci0jZGVmaW5lIEVsZl9WZXJzeW0JRWxmNjRfVmVyc3ltCi0KLSNkZWZpbmUgRUxGX1JfU1lNCUVMRjY0X1JfU1lNCi0jZGVmaW5lIEVMRl9SX1RZUEUJRUxGNjRfUl9UWVBFCi0jZGVmaW5lIEVMRkNMQVNTCUVMRkNMQVNTNjQKLQotI2RlZmluZSBBdXhJbmZvCQlBdXg2NEluZm8KLSNlbmRpZgotCi0jaWZuZGVmIEVsZl9TeW1pbmR4Ci0jZGVmaW5lIEVsZl9TeW1pbmR4CXVpbnQzMl90Ci0jZW5kaWYKLQotI2RlZmluZSBFTEYzMl9TVF9CSU5EKGluZm8pCQlFTEZfU1RfQklORChpbmZvKQotI2RlZmluZSBFTEYzMl9TVF9UWVBFKGluZm8pCQlFTEZfU1RfVFlQRShpbmZvKQotI2RlZmluZSBFTEYzMl9TVF9JTkZPKGJpbmQsdHlwZSkJRUxGX1NUX0lORk8oYmluZCx0eXBlKQotI2RlZmluZSBFTEYzMl9TVF9WSVNJQklMSVRZKG90aGVyKQlFTEZfU1RfVklTSUJJTElUWShvdGhlcikKLQotI2RlZmluZSBFTEY2NF9TVF9CSU5EKGluZm8pCQlFTEZfU1RfQklORChpbmZvKQotI2RlZmluZSBFTEY2NF9TVF9UWVBFKGluZm8pCQlFTEZfU1RfVFlQRShpbmZvKQotI2RlZmluZSBFTEY2NF9TVF9JTkZPKGJpbmQsdHlwZSkJRUxGX1NUX0lORk8oYmluZCx0eXBlKQotI2RlZmluZSBFTEY2NF9TVF9WSVNJQklMSVRZKG90aGVyKQlFTEZfU1RfVklTSUJJTElUWShvdGhlcikKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX0hhbGYJc2lfYm91bmR0bzsJLyogZGlyZWN0IGJpbmRpbmdzIC0gc3ltYm9sIGJvdW5kIHRvICovCi0JRWxmMzJfSGFsZglzaV9mbGFnczsJLyogcGVyIHN5bWJvbCBmbGFncyAqLwotfSBFbGYzMl9TeW1pbmZvOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JRWxmNjRfV29yZAlzaV9ib3VuZHRvOwkvKiBkaXJlY3QgYmluZGluZ3MgLSBzeW1ib2wgYm91bmQgdG8gKi8KLQlFbGY2NF9Xb3JkCXNpX2ZsYWdzOwkvKiBwZXIgc3ltYm9sIGZsYWdzICovCi19IEVsZjY0X1N5bWluZm87Ci0KLSNkZWZpbmUgU1lNSU5GT19GTEdfRElSRUNUCTB4MDAwMQkvKiBzeW1ib2wgcmVmIGhhcyBkaXJlY3QgYXNzb2NpYXRpb24KLQkJCQkJICAgdG8gb2JqZWN0IGNvbnRhaW5pbmcgZGVmaW5pdGlvbiAqLwotI2RlZmluZSBTWU1JTkZPX0ZMR19QQVNTVEhSVQkweDAwMDIJLyogaWdub3JlZCAtIHNlZSBTWU1JTkZPX0ZMR19GSUxURVIgKi8KLSNkZWZpbmUgU1lNSU5GT19GTEdfQ09QWQkweDAwMDQJLyogc3ltYm9sIGlzIGEgY29weS1yZWxvYyAqLwotI2RlZmluZSBTWU1JTkZPX0ZMR19MQVpZTE9BRAkweDAwMDgJLyogb2JqZWN0IGNvbnRhaW5pbmcgZGVmbiBzaG91bGQgYmUKLQkJCQkJICAgbGF6aWx5LWxvYWRlZCAqLwotI2RlZmluZSBTWU1JTkZPX0ZMR19ESVJFQ1RCSU5ECTB4MDAxMAkvKiByZWYgc2hvdWxkIGJlIGJvdW5kIGRpcmVjdGx5IHRvCi0JCQkJCSAgIG9iamVjdCBjb250YWluaW5nIGRlZmluaXRpb24gKi8KLSNkZWZpbmUgU1lNSU5GT19GTEdfTk9FWFRESVJFQ1QgMHgwMDIwCS8qIGRvbid0IGxldCBhbiBleHRlcm5hbCByZWZlcmVuY2UKLQkJCQkJICAgZGlyZWN0bHkgYmluZCB0byB0aGlzIHN5bWJvbCAqLwotI2RlZmluZSBTWU1JTkZPX0ZMR19GSUxURVIJMHgwMDAyCS8qIHN5bWJvbCByZWYgaXMgYXNzb2NpYXRlZCB0byBhICovCi0jZGVmaW5lIFNZTUlORk9fRkxHX0FVWElMSUFSWQkweDAwNDAJLyoJc3RhbmRhcmQgb3IgYXV4aWxpYXJ5IGZpbHRlciAqLwotCi0jZGVmaW5lIFNZTUlORk9fQlRfU0VMRgkJMHhmZmZmCS8qIHN5bWJvbCBib3VuZCB0byBzZWxmICovCi0jZGVmaW5lIFNZTUlORk9fQlRfUEFSRU5UCTB4ZmZmZQkvKiBzeW1ib2wgYm91bmQgdG8gcGFyZW50ICovCi0jZGVmaW5lIFNZTUlORk9fQlRfTk9ORQkJMHhmZmZkCS8qIG5vIHNwZWNpYWwgc3ltYm9sIGJpbmRpbmcgKi8KLSNkZWZpbmUgU1lNSU5GT19CVF9FWFRFUk4JMHhmZmZjCS8qIHN5bWJvbCBkZWZpbmVkIGFzIGV4dGVybmFsICovCi0jZGVmaW5lIFNZTUlORk9fQlRfTE9XUkVTRVJWRQkweGZmMDAJLyogYmVnaW5uaW5nIG9mIHJlc2VydmVkIGVudHJpZXMgKi8KLQotI2RlZmluZSBTWU1JTkZPX05PTkUJCTAJLyogU3ltaW5mbyB2ZXJzaW9uICovCi0jZGVmaW5lIFNZTUlORk9fQ1VSUkVOVAkJMQotI2RlZmluZSBTWU1JTkZPX05VTQkJMgotCi0vKgotICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGZvciBFbGYzMl9WZXJkZWYgc3RydWN0J3MgdmVyc2lvbiBudW1iZXIuCi0gKi8KLSNkZWZpbmUgVkVSX0RFRl9OT05FCQkwCi0jZGVmaW5lIFZFUl9ERUZfQ1VSUkVOVAkJMQotCi0vKgotICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGZvciBFbGYzMl9WZXJkZWYgc3RydWN0J3MgdmRfbmR4LgotICovCi0jZGVmaW5lIFZFUl9ERUZfSURYKHgpCQlWRVJfTkRYKHgpCi0KLS8qCi0gKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgZm9yIEVsZjMyX1ZlcmRlZiBzdHJ1Y3QncyB2ZF9mbGFncy4KLSAqLwotI2RlZmluZSBWRVJfRkxHX0JBU0UJCTB4MQotI2RlZmluZSBWRVJfRkxHX1dFQUsJCTB4MgotCi0vKgotICogVGhlc2UgYXJlIHVzZWQgaW4gYW4gRWxmMzJfVmVyc3ltIGZpZWxkLgotICovCi0jZGVmaW5lIFZFUl9ORFhfTE9DQUwJCTAKLSNkZWZpbmUgVkVSX05EWF9HTE9CQUwJCTEKLSNkZWZpbmUgVkVSX05EWF9HSVZFTgkJMgotCi0vKgotICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGZvciBFbGYzMl9WZXJuZWVkIHN0cnVjdCdzIHZlcnNpb24gbnVtYmVyLgotICovCi0jZGVmaW5lIFZFUl9ORUVEX05PTkUJCTAKLSNkZWZpbmUgVkVSX05FRURfQ1VSUkVOVAkxCi0KLS8qCi0gKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgZm9yIEVsZjMyX1Zlcm5hdXggc3RydWN0J3Mgdm5hX290aGVyLgotICovCi0jZGVmaW5lIFZFUl9ORUVEX0hJRERFTgkJVkVSX05EWF9ISURERU4KLSNkZWZpbmUgVkVSX05FRURfSURYKHgpCQlWRVJfTkRYKHgpCi0KLS8qIGluZGV4ICovCi0jZGVmaW5lIFZFUl9ORFhfSElEREVOCQkweDgwMDAKLSNkZWZpbmUgVkVSX05EWCh4KQkJKCh4KSAmIH5WRVJfTkRYX0hJRERFTikKLQotLyoKLSAqIEdOVSBFeHRlbnNpb24gaGlkZGluZyBzeW1ib2wKLSAqLwotI2RlZmluZSBWRVJTWU1fSElEREVOCQkweDgwMDAKLSNkZWZpbmUgVkVSU1lNX1ZFUlNJT04JCTB4N2ZmZgotCi0jZGVmaW5lIEVMRl9WRVJfQ0hSCQknQCcKLQotLyoKLSAqIFRoZXNlIGFyZSBjdXJyZW50IHNpemUgaW5kZXBlbmRlbnQuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX0hhbGYJdmRfdmVyc2lvbjsJLyogdmVyc2lvbiBudW1iZXIgb2Ygc3RydWN0dXJlICovCi0JRWxmMzJfSGFsZgl2ZF9mbGFnczsJLyogZmxhZ3MgKFZFUl9GTEdfKikgKi8KLQlFbGYzMl9IYWxmCXZkX25keDsJCS8qIHZlcnNpb24gaW5kZXggKi8KLQlFbGYzMl9IYWxmCXZkX2NudDsJCS8qIG51bWJlciBvZiB2ZXJkYXV4IGVudHJpZXMgKi8KLQlFbGYzMl9Xb3JkCXZkX2hhc2g7CS8qIGhhc2ggb2YgbmFtZSAqLwotCUVsZjMyX1dvcmQJdmRfYXV4OwkJLyogb2Zmc2V0IHRvIHZlcmRhdXggZW50cmllcyAqLwotCUVsZjMyX1dvcmQJdmRfbmV4dDsJLyogb2Zmc2V0IHRvIG5leHQgdmVyZGVmICovCi19IEVsZjMyX1ZlcmRlZjsKLXR5cGVkZWYgRWxmMzJfVmVyZGVmCUVsZjY0X1ZlcmRlZjsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX1dvcmQJdmRhX25hbWU7CS8qIHN0cmluZyB0YWJsZSBvZmZzZXQgb2YgbmFtZSAqLwotCUVsZjMyX1dvcmQJdmRhX25leHQ7CS8qIG9mZnNldCB0byB2ZXJkYXV4ICovCi19IEVsZjMyX1ZlcmRhdXg7Ci10eXBlZGVmIEVsZjMyX1ZlcmRhdXgJRWxmNjRfVmVyZGF1eDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX0hhbGYJdm5fdmVyc2lvbjsJLyogdmVyc2lvbiBudW1iZXIgb2Ygc3RydWN0dXJlICovCi0JRWxmMzJfSGFsZgl2bl9jbnQ7CQkvKiBudW1iZXIgb2YgdmVybmF1eCBlbnRyaWVzICovCi0JRWxmMzJfV29yZAl2bl9maWxlOwkvKiBzdHJpbmcgdGFibGUgb2Zmc2V0IG9mIGxpYnJhcnkgbmFtZSovCi0JRWxmMzJfV29yZAl2bl9hdXg7CQkvKiBvZmZzZXQgdG8gdmVybmF1eCBlbnRyaWVzICovCi0JRWxmMzJfV29yZAl2bl9uZXh0OwkvKiBvZmZzZXQgdG8gbmV4dCB2ZXJuZWVkICovCi19IEVsZjMyX1Zlcm5lZWQ7Ci10eXBlZGVmIEVsZjMyX1Zlcm5lZWQJRWxmNjRfVmVybmVlZDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX1dvcmQJdm5hX2hhc2g7CS8qIEhhc2ggb2YgZGVwZW5kZW5jeSBuYW1lICovCi0JRWxmMzJfSGFsZgl2bmFfZmxhZ3M7CS8qIGZsYWdzIChWRVJfRkxHXyopICovCi0JRWxmMzJfSGFsZgl2bmFfb3RoZXI7CS8qIHVudXNlZCAqLwotCUVsZjMyX1dvcmQJdm5hX25hbWU7CS8qIHN0cmluZyB0YWJsZSBvZmZzZXQgdG8gdmVyc2lvbiBuYW1lKi8KLQlFbGYzMl9Xb3JkCXZuYV9uZXh0OwkvKiBvZmZzZXQgdG8gbmV4dCB2ZXJuYXV4ICovCi19IEVsZjMyX1Zlcm5hdXg7Ci10eXBlZGVmIEVsZjMyX1Zlcm5hdXgJRWxmNjRfVmVybmF1eDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUVsZjMyX0hhbGYJdnNfdmVyczsKLX0gRWxmMzJfVmVyc3ltOwotdHlwZWRlZiBFbGYzMl9WZXJzeW0JRWxmNjRfVmVyc3ltOwotCi0jaWZkZWYgX0tFUk5FTAotCi0jZGVmaW5lIEVMRl9BVVhfRU5UUklFUyAxNQkvKiBNYXggc2l6ZSBvZiBhdXggYXJyYXkgcGFzc2VkIHRvIGxvYWRlciAqLwotI2RlZmluZSBFTEYzMl9OT19BRERSCSh+KEVsZjMyX0FkZHIpMCkgLyogSW5kaWNhdGVzIGFkZHIuIG5vdCB5ZXQgZmlsbGVkIGluICovCi0jZGVmaW5lIEVMRjMyX0xJTktfQUREUiAoKEVsZjMyX0FkZHIpLTIpIC8qIGFkdmlzZXMgdG8gdXNlIGxpbmsgYWRkcmVzcyAqLwotI2RlZmluZSBFTEY2NF9OT19BRERSCSh+KEVsZjY0X0FkZHIpMCkgLyogSW5kaWNhdGVzIGFkZHIuIG5vdCB5ZXQgZmlsbGVkIGluICovCi0jZGVmaW5lIEVMRjY0X0xJTktfQUREUiAoKEVsZjY0X0FkZHIpLTIpIC8qIGFkdmlzZXMgdG8gdXNlIGxpbmsgYWRkcmVzcyAqLwotCi0jaWYgZGVmaW5lZChFTEZTSVpFKSAmJiAoRUxGU0laRSA9PSA2NCkKLSNkZWZpbmUgRUxGX05PX0FERFIJRUxGNjRfTk9fQUREUgotI2RlZmluZSBFTEZfTElOS19BRERSCUVMRjY0X0xJTktfQUREUgotI2VsaWYgZGVmaW5lZChFTEZTSVpFKSAmJiAoRUxGU0laRSA9PSAzMikKLSNkZWZpbmUgRUxGX05PX0FERFIJRUxGMzJfTk9fQUREUgotI2RlZmluZSBFTEZfTElOS19BRERSCUVMRjMyX0xJTktfQUREUgotI2VuZGlmCi0KLSNpZm5kZWYgRUxGMzJfRUhEUl9GTEFHU19PSwotI2RlZmluZSBFTEYzMl9FSERSX0ZMQUdTX09LKGVoKSAxCi0jZW5kaWYKLQotI2lmbmRlZiBFTEY2NF9FSERSX0ZMQUdTX09LCi0jZGVmaW5lIEVMRjY0X0VIRFJfRkxBR1NfT0soZWgpIDEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChFTEZTSVpFKSAmJiAoRUxGU0laRSA9PSA2NCkKLSNkZWZpbmUgRUxGX0VIRFJfRkxBR1NfT0soZWgpCUVMRjY0X0VIRFJfRkxBR1NfT0soZWgpCi0jZWxzZQotI2RlZmluZSBFTEZfRUhEUl9GTEFHU19PSyhlaCkJRUxGMzJfRUhEUl9GTEFHU19PSyhlaCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChFTEZTSVpFKQotc3RydWN0IGVsZl9hcmdzIHsKLQlFbGZfQWRkcglhcmdfZW50cnk7CS8qIHByb2dyYW0gZW50cnkgcG9pbnQgKi8KLQlFbGZfQWRkcglhcmdfaW50ZXJwOwkvKiBJbnRlcnByZXRlciBsb2FkIGFkZHJlc3MgKi8KLQlFbGZfQWRkcglhcmdfcGhhZGRyOwkvKiBwcm9ncmFtIGhlYWRlciBhZGRyZXNzICovCi0JRWxmX0FkZHIJYXJnX3BoZW50c2l6ZTsJLyogU2l6ZSBvZiBwcm9ncmFtIGhlYWRlciAqLwotCUVsZl9BZGRyCWFyZ19waG51bTsJLyogTnVtYmVyIG9mIHByb2dyYW0gaGVhZGVycyAqLwotfTsKLSNlbmRpZgotCi0jaWZkZWYgX0tFUk5FTF9PUFQKLSNpbmNsdWRlICJvcHRfZXhlY2ZtdC5oIgotI2VuZGlmCi0KLXN0cnVjdCBwc19zdHJpbmdzOwotCi0jaWZkZWYgRVhFQ19FTEYzMgotaW50CWV4ZWNfZWxmMzJfbWFrZWNtZHMoc3RydWN0IGx3cCAqLCBzdHJ1Y3QgZXhlY19wYWNrYWdlICopOwotaW50CWVsZjMyX2NvcHlhcmdzKHN0cnVjdCBsd3AgKiwgc3RydWN0IGV4ZWNfcGFja2FnZSAqLAotICAgIHN0cnVjdCBwc19zdHJpbmdzICosIGNoYXIgKiosIHZvaWQgKik7Ci0KLWludAljb3JlZHVtcF9lbGYzMihzdHJ1Y3QgbHdwICosIHZvaWQgKik7Ci1pbnQJY29yZWR1bXBfd3JpdGVub3RlX2VsZjMyKHN0cnVjdCBwcm9jICosIHZvaWQgKiwgRWxmMzJfTmhkciAqLAotICAgIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKLQotaW50CWVsZjMyX2NoZWNrX2hlYWRlcihFbGYzMl9FaGRyICosIGludCk7Ci0jZW5kaWYKLQotI2lmZGVmIEVYRUNfRUxGNjQKLWludAlleGVjX2VsZjY0X21ha2VjbWRzKHN0cnVjdCBsd3AgKiwgc3RydWN0IGV4ZWNfcGFja2FnZSAqKTsKLWludAllbGY2NF9jb3B5YXJncyhzdHJ1Y3QgbHdwICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKiwKLSAgICBzdHJ1Y3QgcHNfc3RyaW5ncyAqLCBjaGFyICoqLCB2b2lkICopOwotCi1pbnQJY29yZWR1bXBfZWxmNjQoc3RydWN0IGx3cCAqLCB2b2lkICopOwotaW50CWNvcmVkdW1wX3dyaXRlbm90ZV9lbGY2NChzdHJ1Y3QgcHJvYyAqLCB2b2lkICosIEVsZjY0X05oZHIgKiwKLSAgICBjb25zdCBjaGFyICosIHZvaWQgKik7Ci0KLWludAllbGY2NF9jaGVja19oZWFkZXIoRWxmNjRfRWhkciAqLCBpbnQpOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBfS0VSTkVMICovCi0KLSNlbmRpZiAvKiAhX1NZU19FWEVDX0VMRl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9mc3VpZC5oIGIvbGliYy9pbmNsdWRlL3N5cy9mc3VpZC5oCmluZGV4IGJjNDdlM2QuLjAzMzU1YjcgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvZnN1aWQuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2ZzdWlkLmgKQEAgLTI1LDYgKzI1LDcgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBfU1lTX0ZTVUlEX0hfCiAjZGVmaW5lIF9TWVNfRlNVSURfSF8KIApAQCAtMzMsMTAgKzM0LDggQEAKIAogX19CRUdJTl9ERUNMUwogCi0jaWYgMCAvKiBNSVNTSU5HIEZST00gQklPTklDICovCiBleHRlcm4gaW50IHNldGZzdWlkKHVpZF90KTsKIGV4dGVybiBpbnQgc2V0ZnNnaWQoZ2lkX3QpOwotI2VuZGlmIC8qIE1JU1NJTkcgKi8KIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9nbGliYy1zeXNjYWxscy5oIGIvbGliYy9pbmNsdWRlL3N5cy9nbGliYy1zeXNjYWxscy5oCmluZGV4IDMxMzFiNmIuLjQ1OWVlNzggMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvZ2xpYmMtc3lzY2FsbHMuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2dsaWJjLXN5c2NhbGxzLmgKQEAgLTIxNywxMCArMjE3LDEyIEBACiAjZGVmaW5lIFNZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAogI2RlZmluZSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4KICNkZWZpbmUgU1lTX3NjaGVkX2dldGFmZmluaXR5IF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkKKyNkZWZpbmUgU1lTX3NjaGVkX2dldGF0dHIgX19OUl9zY2hlZF9nZXRhdHRyCiAjZGVmaW5lIFNZU19zY2hlZF9nZXRwYXJhbSBfX05SX3NjaGVkX2dldHBhcmFtCiAjZGVmaW5lIFNZU19zY2hlZF9nZXRzY2hlZHVsZXIgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKICNkZWZpbmUgU1lTX3NjaGVkX3JyX2dldF9pbnRlcnZhbCBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAogI2RlZmluZSBTWVNfc2NoZWRfc2V0YWZmaW5pdHkgX19OUl9zY2hlZF9zZXRhZmZpbml0eQorI2RlZmluZSBTWVNfc2NoZWRfc2V0YXR0ciBfX05SX3NjaGVkX3NldGF0dHIKICNkZWZpbmUgU1lTX3NjaGVkX3NldHBhcmFtIF9fTlJfc2NoZWRfc2V0cGFyYW0KICNkZWZpbmUgU1lTX3NjaGVkX3NldHNjaGVkdWxlciBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgogI2RlZmluZSBTWVNfc2NoZWRfeWllbGQgX19OUl9zY2hlZF95aWVsZApAQCAtNTQ1LDEwICs1NDcsMTIgQEAKICNkZWZpbmUgU1lTX3NjaGVkX2dldF9wcmlvcml0eV9tYXggX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CiAjZGVmaW5lIFNZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWluIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgogI2RlZmluZSBTWVNfc2NoZWRfZ2V0YWZmaW5pdHkgX19OUl9zY2hlZF9nZXRhZmZpbml0eQorI2RlZmluZSBTWVNfc2NoZWRfZ2V0YXR0ciBfX05SX3NjaGVkX2dldGF0dHIKICNkZWZpbmUgU1lTX3NjaGVkX2dldHBhcmFtIF9fTlJfc2NoZWRfZ2V0cGFyYW0KICNkZWZpbmUgU1lTX3NjaGVkX2dldHNjaGVkdWxlciBfX05SX3NjaGVkX2dldHNjaGVkdWxlcgogI2RlZmluZSBTWVNfc2NoZWRfcnJfZ2V0X2ludGVydmFsIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCiAjZGVmaW5lIFNZU19zY2hlZF9zZXRhZmZpbml0eSBfX05SX3NjaGVkX3NldGFmZmluaXR5CisjZGVmaW5lIFNZU19zY2hlZF9zZXRhdHRyIF9fTlJfc2NoZWRfc2V0YXR0cgogI2RlZmluZSBTWVNfc2NoZWRfc2V0cGFyYW0gX19OUl9zY2hlZF9zZXRwYXJhbQogI2RlZmluZSBTWVNfc2NoZWRfc2V0c2NoZWR1bGVyIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCiAjZGVmaW5lIFNZU19zY2hlZF95aWVsZCBfX05SX3NjaGVkX3lpZWxkCkBAIC05MDIsMTAgKzkwNiwxMiBAQAogI2RlZmluZSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKICNkZWZpbmUgU1lTX3NjaGVkX2dldF9wcmlvcml0eV9taW4gX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCiAjZGVmaW5lIFNZU19zY2hlZF9nZXRhZmZpbml0eSBfX05SX3NjaGVkX2dldGFmZmluaXR5CisjZGVmaW5lIFNZU19zY2hlZF9nZXRhdHRyIF9fTlJfc2NoZWRfZ2V0YXR0cgogI2RlZmluZSBTWVNfc2NoZWRfZ2V0cGFyYW0gX19OUl9zY2hlZF9nZXRwYXJhbQogI2RlZmluZSBTWVNfc2NoZWRfZ2V0c2NoZWR1bGVyIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCiAjZGVmaW5lIFNZU19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKICNkZWZpbmUgU1lTX3NjaGVkX3NldGFmZmluaXR5IF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkKKyNkZWZpbmUgU1lTX3NjaGVkX3NldGF0dHIgX19OUl9zY2hlZF9zZXRhdHRyCiAjZGVmaW5lIFNZU19zY2hlZF9zZXRwYXJhbSBfX05SX3NjaGVkX3NldHBhcmFtCiAjZGVmaW5lIFNZU19zY2hlZF9zZXRzY2hlZHVsZXIgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIKICNkZWZpbmUgU1lTX3NjaGVkX3lpZWxkIF9fTlJfc2NoZWRfeWllbGQKQEAgLTEyNTgsMTAgKzEyNjQsMTIgQEAKICNkZWZpbmUgU1lTX3NjaGVkX2dldF9wcmlvcml0eV9tYXggX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CiAjZGVmaW5lIFNZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWluIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgogI2RlZmluZSBTWVNfc2NoZWRfZ2V0YWZmaW5pdHkgX19OUl9zY2hlZF9nZXRhZmZpbml0eQorI2RlZmluZSBTWVNfc2NoZWRfZ2V0YXR0ciBfX05SX3NjaGVkX2dldGF0dHIKICNkZWZpbmUgU1lTX3NjaGVkX2dldHBhcmFtIF9fTlJfc2NoZWRfZ2V0cGFyYW0KICNkZWZpbmUgU1lTX3NjaGVkX2dldHNjaGVkdWxlciBfX05SX3NjaGVkX2dldHNjaGVkdWxlcgogI2RlZmluZSBTWVNfc2NoZWRfcnJfZ2V0X2ludGVydmFsIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCiAjZGVmaW5lIFNZU19zY2hlZF9zZXRhZmZpbml0eSBfX05SX3NjaGVkX3NldGFmZmluaXR5CisjZGVmaW5lIFNZU19zY2hlZF9zZXRhdHRyIF9fTlJfc2NoZWRfc2V0YXR0cgogI2RlZmluZSBTWVNfc2NoZWRfc2V0cGFyYW0gX19OUl9zY2hlZF9zZXRwYXJhbQogI2RlZmluZSBTWVNfc2NoZWRfc2V0c2NoZWR1bGVyIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCiAjZGVmaW5lIFNZU19zY2hlZF95aWVsZCBfX05SX3NjaGVkX3lpZWxkCkBAIC0xNTg2LDEwICsxNTk0LDEyIEBACiAjZGVmaW5lIFNZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAogI2RlZmluZSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4KICNkZWZpbmUgU1lTX3NjaGVkX2dldGFmZmluaXR5IF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkKKyNkZWZpbmUgU1lTX3NjaGVkX2dldGF0dHIgX19OUl9zY2hlZF9nZXRhdHRyCiAjZGVmaW5lIFNZU19zY2hlZF9nZXRwYXJhbSBfX05SX3NjaGVkX2dldHBhcmFtCiAjZGVmaW5lIFNZU19zY2hlZF9nZXRzY2hlZHVsZXIgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKICNkZWZpbmUgU1lTX3NjaGVkX3JyX2dldF9pbnRlcnZhbCBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAogI2RlZmluZSBTWVNfc2NoZWRfc2V0YWZmaW5pdHkgX19OUl9zY2hlZF9zZXRhZmZpbml0eQorI2RlZmluZSBTWVNfc2NoZWRfc2V0YXR0ciBfX05SX3NjaGVkX3NldGF0dHIKICNkZWZpbmUgU1lTX3NjaGVkX3NldHBhcmFtIF9fTlJfc2NoZWRfc2V0cGFyYW0KICNkZWZpbmUgU1lTX3NjaGVkX3NldHNjaGVkdWxlciBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgogI2RlZmluZSBTWVNfc2NoZWRfeWllbGQgX19OUl9zY2hlZF95aWVsZApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9pb2N0bC5oIGIvbGliYy9pbmNsdWRlL3N5cy9pb2N0bC5oCmluZGV4IDQ5ZDQ1MmMuLmExMDE0ZGMgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvaW9jdGwuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2lvY3RsLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsX2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogCiBfX0JFR0lOX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMva2xvZy5oIGIvbGliYy9pbmNsdWRlL3N5cy9rbG9nLmgKaW5kZXggMDI4NTFkMi4uYWNmYWEyMCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9rbG9nLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9rbG9nLmgKQEAgLTI1LDYgKzI1LDcgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBfU1lTX0tMT0dfSF8KICNkZWZpbmUgX1NZU19LTE9HX0hfCiAKQEAgLTQ1LDEzICs0Niw2IEBACiAjZGVmaW5lIEtMT0dfU0laRV9VTlJFQUQgICA5CiAjZGVmaW5lIEtMT0dfU0laRV9CVUZGRVIgICAxMAogCi0vKiBUaGVzZSBhcmUgZGVwcmVjYXRlZCBuYW1lcyB0aGF0IHdlcmUgdXNlZCBpbiBlYXJsaWVyIGJpb25pYyByZWxlYXNlcy4gRG8gbm90IHVzZS4gKi8KLSNkZWZpbmUgS0xPR19ESVNBQkxFIDYKLSNkZWZpbmUgS0xPR19FTkFCTEUgNwotI2RlZmluZSBLTE9HX1NFVExFVkVMIDgKLSNkZWZpbmUgS0xPR19VTlJFQURTSVpFIDkKLSNkZWZpbmUgS0xPR19XUklURSAxMAotCiBleHRlcm4gaW50IGtsb2djdGwoaW50LCBjaGFyICosIGludCk7CiAKIF9fRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2xpbWl0cy5oIGIvbGliYy9pbmNsdWRlL3N5cy9saW1pdHMuaAppbmRleCAzNmY3M2IyLi5jNTBlYjEwIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2xpbWl0cy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvbGltaXRzLmgKQEAgLTMxLDkgKzMxLDYgQEAKIAogLyogQ29tbW9uIGRlZmluaXRpb25zIGZvciBsaW1pdHMuaC4gKi8KIAotLyogTGVnYWN5ICovCi0jaW5jbHVkZSA8bWFjaGluZS9saW1pdHMuaD4KLQogI2RlZmluZQlDSEFSX0JJVAk4CQkvKiBudW1iZXIgb2YgYml0cyBpbiBhIGNoYXIgKi8KIAogI2RlZmluZQlTQ0hBUl9NQVgJMHg3ZgkJLyogbWF4IHZhbHVlIGZvciBhIHNpZ25lZCBjaGFyICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL21tYW4uaCBiL2xpYmMvaW5jbHVkZS9zeXMvbW1hbi5oCmluZGV4IDdjNWY4ZDcuLjVhOGM5ODUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvbW1hbi5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvbW1hbi5oCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21tYW4uaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiBfX0JFR0lOX0RFQ0xTCiAKQEAgLTQ0LDIzICs0MywyMyBAQAogI2RlZmluZSBNUkVNQVBfTUFZTU9WRSAgMQogI2RlZmluZSBNUkVNQVBfRklYRUQgICAgMgogCi1leHRlcm4gdm9pZCogIG1tYXAodm9pZCAqLCBzaXplX3QsIGludCwgaW50LCBpbnQsIG9mZl90KTsKLWV4dGVybiB2b2lkKiAgbW1hcDY0KHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBvZmY2NF90KTsKLWV4dGVybiBpbnQgICAgbXVubWFwKHZvaWQgKiwgc2l6ZV90KTsKLWV4dGVybiBpbnQgICAgbXN5bmMoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7Ci1leHRlcm4gaW50ICAgIG1wcm90ZWN0KGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOwotZXh0ZXJuIHZvaWQqICBtcmVtYXAodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCogbW1hcCh2b2lkKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBvZmZfdCk7CitleHRlcm4gdm9pZCogbW1hcDY0KHZvaWQqLCBzaXplX3QsIGludCwgaW50LCBpbnQsIG9mZjY0X3QpOworZXh0ZXJuIGludCBtdW5tYXAodm9pZCosIHNpemVfdCk7CitleHRlcm4gaW50IG1zeW5jKGNvbnN0IHZvaWQqLCBzaXplX3QsIGludCk7CitleHRlcm4gaW50IG1wcm90ZWN0KGNvbnN0IHZvaWQqLCBzaXplX3QsIGludCk7CitleHRlcm4gdm9pZCogbXJlbWFwKHZvaWQqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgbG9uZyk7CiAKLWV4dGVybiBpbnQgICAgbWxvY2thbGwoaW50KTsKLWV4dGVybiBpbnQgICAgbXVubG9ja2FsbCh2b2lkKTsKLWV4dGVybiBpbnQgICAgbWxvY2soY29uc3Qgdm9pZCAqLCBzaXplX3QpOwotZXh0ZXJuIGludCAgICBtdW5sb2NrKGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKLWV4dGVybiBpbnQgICAgbWFkdmlzZShjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTsKK2V4dGVybiBpbnQgbWxvY2thbGwoaW50KTsKK2V4dGVybiBpbnQgbXVubG9ja2FsbCh2b2lkKTsKK2V4dGVybiBpbnQgbWxvY2soY29uc3Qgdm9pZCosIHNpemVfdCk7CitleHRlcm4gaW50IG11bmxvY2soY29uc3Qgdm9pZCosIHNpemVfdCk7CitleHRlcm4gaW50IG1hZHZpc2UoY29uc3Qgdm9pZCosIHNpemVfdCwgaW50KTsKIAotZXh0ZXJuIGludCAgICBtbG9jayhjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTsKLWV4dGVybiBpbnQgICAgbXVubG9jayhjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTsKK2V4dGVybiBpbnQgbWxvY2soY29uc3Qgdm9pZCosIHNpemVfdCk7CitleHRlcm4gaW50IG11bmxvY2soY29uc3Qgdm9pZCosIHNpemVfdCk7CiAKLWV4dGVybiBpbnQgICAgbWluY29yZSh2b2lkKiAgc3RhcnQsIHNpemVfdCAgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyKiAgdmVjKTsKK2V4dGVybiBpbnQgbWluY29yZSh2b2lkKiwgc2l6ZV90LCB1bnNpZ25lZCBjaGFyKik7CiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvcGFyYW0uaCBiL2xpYmMvaW5jbHVkZS9zeXMvcGFyYW0uaAppbmRleCAzN2M2NDI3Li5lNjRkNmNlIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3BhcmFtLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9wYXJhbS5oCkBAIC0zNCwxNiArMzQsNiBAQAogI2RlZmluZSBNQVhQQVRITEVOICBQQVRIX01BWAogI2RlZmluZSBNQVhTWU1MSU5LUyA4CiAKLSNpZiBfX0xQNjRfXwotI2RlZmluZSBBTElHTkJZVEVTIDcKLSNlbHNlCi0jZGVmaW5lIEFMSUdOQllURVMgMwotI2VuZGlmCi0KLSNpZm5kZWYgQUxJR04KLSNkZWZpbmUgQUxJR04ocCkgKCgodWludHB0cl90KShwKSArIEFMSUdOQllURVMpICZ+IEFMSUdOQllURVMpCi0jZW5kaWYKLQogLyogTWFjcm9zIGZvciBjb3VudGluZyBhbmQgcm91bmRpbmcuICovCiAjaWZuZGVmIGhvd21hbnkKICNkZWZpbmUgaG93bWFueSh4LCB5KSAgICgoKHgpKygoeSktMSkpLyh5KSkKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvcHJjdGwuaCBiL2xpYmMvaW5jbHVkZS9zeXMvcHJjdGwuaAppbmRleCAwMGU1ODM3Li5kOTZiOGI2IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3ByY3RsLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9wcmN0bC5oCkBAIC0yNSwyMyArMjUsMTggQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBfU1lTX1BSQ1RMX0gKICNkZWZpbmUgX1NZU19QUkNUTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogCisjaW5jbHVkZSA8bGludXgvcHJjdGwuaD4KKwogX19CRUdJTl9ERUNMUwogCi0vKiBJTVBPUlRBTlQgTk9URTogVGhpcyBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyB0YWtpbmcgYSB2YXJpYWJsZSBudW1iZXIKLSAqICAgICAgICAgICAgICAgICBvZiBhcmd1bWVudHMgdG8gbWF0Y2ggdGhlIEdMaWJjIGRlZmluaXRpb24uIEhvd2V2ZXIKLSAqICAgICAgICAgICAgICAgICBpdHMgZGVjbGFyYXRpb24gaW5zaWRlIFNZU0NBTExTLlRYVCAqbXVzdCogbWFrZSBpdAotICogICAgICAgICAgICAgICAgIHRha2UgNiBhcmd1bWVudHMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IHdpdGggdGhlIGtlcm5lbAotICogICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLgotICovCiBleHRlcm4gaW50IHByY3RsKGludCBvcHRpb24sIC4uLik7CiAKIF9fRU5EX0RFQ0xTCiAKICNlbmRpZiAvKiBfU1lTX1BSQ1RMX0ggKi8KLQpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9wdHJhY2UuaCBiL2xpYmMvaW5jbHVkZS9zeXMvcHRyYWNlLmgKaW5kZXggODQ4NDE2Yi4uOGJiYTlmZSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9wdHJhY2UuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3B0cmFjZS5oCkBAIC0zMCwxNSArMzAsMTUgQEAKIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotLyogRm9yIGFsbCBvZiB0aGUgZGVmaW5lcyAqLwogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogCiBfX0JFR0lOX0RFQ0xTCiAKLSNkZWZpbmUgUFRSQUNFX1BPS0VVU0VSICAgICBQVFJBQ0VfUE9LRVVTUgotI2RlZmluZSBQVFJBQ0VfUEVFS1VTRVIgICAgIFBUUkFDRV9QRUVLVVNSCisvKiBnbGliYyB1c2VzIGRpZmZlcmVudCBuYW1lcyBmcm9tIHRoZSBrZXJuZWwgZm9yIHRoZXNlIHR3by4uLiAqLworI2RlZmluZSBQVFJBQ0VfUE9LRVVTRVIgUFRSQUNFX1BPS0VVU1IKKyNkZWZpbmUgUFRSQUNFX1BFRUtVU0VSIFBUUkFDRV9QRUVLVVNSCiAKLWV4dGVybiBsb25nIHB0cmFjZShpbnQgcmVxdWVzdCwgcGlkX3QgcGlkLCB2b2lkICphZGRyLCB2b2lkICpkYXRhKTsKK2V4dGVybiBsb25nIHB0cmFjZShpbnQsIC4uLik7CiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc29ja2V0LmggYi9saWJjL2luY2x1ZGUvc3lzL3NvY2tldC5oCmluZGV4IDMyZDk4ZWEuLmFlMmYyMzggMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvc29ja2V0LmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zb2NrZXQuaApAQCAtNDMsOCArNDMsOSBAQAogX19CRUdJTl9ERUNMUwogCiAjZGVmaW5lIHNvY2thZGRyX3N0b3JhZ2UgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZQotdHlwZWRlZiBfX3NhX2ZhbWlseV90IHNhX2ZhbWlseV90OwotdHlwZWRlZiBpbnQgc29ja2xlbl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBzYV9mYW1pbHlfdDsKKworc3RydWN0IHRpbWVzcGVjOwogCiAjaWZkZWYgX19taXBzX18KICNkZWZpbmUgU09DS19ER1JBTSAgICAgIDEKQEAgLTc2LDY5ICs3Nyw1NiBAQAogfTsKIAogc3RydWN0IHNvY2thZGRyIHsKLSBzYV9mYW1pbHlfdCBzYV9mYW1pbHk7Ci0gY2hhciBzYV9kYXRhWzE0XTsKKyAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OworICBjaGFyIHNhX2RhdGFbMTRdOwogfTsKIAogc3RydWN0IGxpbmdlciB7Ci0gaW50IGxfb25vZmY7Ci0gaW50IGxfbGluZ2VyOworICBpbnQgbF9vbm9mZjsKKyAgaW50IGxfbGluZ2VyOwogfTsKIAogc3RydWN0IG1zZ2hkciB7Ci0gdm9pZCAqIG1zZ19uYW1lOwotIGludCBtc2dfbmFtZWxlbjsKLSBzdHJ1Y3QgaW92ZWMgKiBtc2dfaW92OwotIF9fa2VybmVsX3NpemVfdCBtc2dfaW92bGVuOwotIHZvaWQgKiBtc2dfY29udHJvbDsKLSBfX2tlcm5lbF9zaXplX3QgbXNnX2NvbnRyb2xsZW47Ci0gdW5zaWduZWQgbXNnX2ZsYWdzOworICB2b2lkKiBtc2dfbmFtZTsKKyAgc29ja2xlbl90IG1zZ19uYW1lbGVuOworICBzdHJ1Y3QgaW92ZWMqIG1zZ19pb3Y7CisgIHNpemVfdCBtc2dfaW92bGVuOworICB2b2lkKiBtc2dfY29udHJvbDsKKyAgc2l6ZV90IG1zZ19jb250cm9sbGVuOworICBpbnQgbXNnX2ZsYWdzOworfTsKKworc3RydWN0IG1tc2doZHIgeworICBzdHJ1Y3QgbXNnaGRyIG1zZ19oZHI7CisgIHVuc2lnbmVkIGludCBtc2dfbGVuOwogfTsKIAogc3RydWN0IGNtc2doZHIgewotIF9fa2VybmVsX3NpemVfdCBjbXNnX2xlbjsKLSBpbnQgY21zZ19sZXZlbDsKLSBpbnQgY21zZ190eXBlOworICBzaXplX3QgY21zZ19sZW47CisgIGludCBjbXNnX2xldmVsOworICBpbnQgY21zZ190eXBlOwogfTsKIAotI2RlZmluZSBfX0NNU0dfTlhUSERSKGN0bCwgbGVuLCBjbXNnKSBfX2Ntc2dfbnh0aGRyKChjdGwpLChsZW4pLChjbXNnKSkKLSNkZWZpbmUgQ01TR19OWFRIRFIobWhkciwgY21zZykgY21zZ19ueHRoZHIoKG1oZHIpLCAoY21zZykpCisjZGVmaW5lIENNU0dfTlhUSERSKG1oZHIsIGNtc2cpIF9fY21zZ19ueHRoZHIoKG1oZHIpLCAoY21zZykpCiAjZGVmaW5lIENNU0dfQUxJR04obGVuKSAoICgobGVuKStzaXplb2YobG9uZyktMSkgJiB+KHNpemVvZihsb25nKS0xKSApCi0jZGVmaW5lIENNU0dfREFUQShjbXNnKSAoKHZvaWQgKikoKGNoYXIgKikoY21zZykgKyBDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpKSkKKyNkZWZpbmUgQ01TR19EQVRBKGNtc2cpICgodm9pZCopKChjaGFyKikoY21zZykgKyBDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpKSkKICNkZWZpbmUgQ01TR19TUEFDRShsZW4pIChDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpICsgQ01TR19BTElHTihsZW4pKQogI2RlZmluZSBDTVNHX0xFTihsZW4pIChDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpICsgKGxlbikpCi0jZGVmaW5lIF9fQ01TR19GSVJTVEhEUihjdGwsbGVuKSAoKGxlbikgPj0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSA/ICAgKHN0cnVjdCBjbXNnaGRyICopKGN0bCkgOiAgIChzdHJ1Y3QgY21zZ2hkciAqKU5VTEwpCi0jZGVmaW5lIENNU0dfRklSU1RIRFIobXNnKSBfX0NNU0dfRklSU1RIRFIoKG1zZyktPm1zZ19jb250cm9sLCAobXNnKS0+bXNnX2NvbnRyb2xsZW4pCi0jZGVmaW5lIENNU0dfT0sobWhkciwgY21zZykgKChjbXNnKS0+Y21zZ19sZW4gPj0gc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSAmJiAgIChjbXNnKS0+Y21zZ19sZW4gPD0gKHVuc2lnbmVkIGxvbmcpICAgKChtaGRyKS0+bXNnX2NvbnRyb2xsZW4gLSAgICgoY2hhciAqKShjbXNnKSAtIChjaGFyICopKG1oZHIpLT5tc2dfY29udHJvbCkpKQorI2RlZmluZSBDTVNHX0ZJUlNUSERSKG1zZykgXAorICAoKG1zZyktPm1zZ19jb250cm9sbGVuID49IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikgXAorICAgPyAoc3RydWN0IGNtc2doZHIqKSAobXNnKS0+bXNnX2NvbnRyb2wgOiAoc3RydWN0IGNtc2doZHIqKSBOVUxMKQorI2RlZmluZSBDTVNHX09LKG1oZHIsIGNtc2cpICgoY21zZyktPmNtc2dfbGVuID49IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikgJiYgICAoY21zZyktPmNtc2dfbGVuIDw9ICh1bnNpZ25lZCBsb25nKSAgICgobWhkciktPm1zZ19jb250cm9sbGVuIC0gICAoKGNoYXIqKShjbXNnKSAtIChjaGFyKikobWhkciktPm1zZ19jb250cm9sKSkpCiAKLSNpZmRlZiBfX0dOVUNfXwotI2RlZmluZSBfX0tJTkxJTkUgc3RhdGljIF9faW5saW5lX18KLSNlbGlmIGRlZmluZWQoX19jcGx1c3BsdXMpCi0jZGVmaW5lIF9fS0lOTElORSBzdGF0aWMgaW5saW5lCi0jZWxzZQotI2RlZmluZSBfX0tJTkxJTkUgc3RhdGljCi0jZW5kaWYKLQotX19LSU5MSU5FIHN0cnVjdCBjbXNnaGRyICogX19jbXNnX254dGhkcih2b2lkICpfX2N0bCwgX19rZXJuZWxfc2l6ZV90IF9fc2l6ZSwgc3RydWN0IGNtc2doZHIgKl9fY21zZykgewotIHN0cnVjdCBjbXNnaGRyICogX19wdHI7Ci0gX19wdHIgPSAoc3RydWN0IGNtc2doZHIqKSgoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNnKSArIENNU0dfQUxJR04oX19jbXNnLT5jbXNnX2xlbikpOwotIGlmICgodW5zaWduZWQgbG9uZykoKGNoYXIqKShfX3B0cisxKSAtIChjaGFyICopIF9fY3RsKSA+IF9fc2l6ZSkKLSByZXR1cm4gKHN0cnVjdCBjbXNnaGRyICopMDsKLSByZXR1cm4gX19wdHI7Ci19Ci0KLV9fS0lOTElORSBzdHJ1Y3QgY21zZ2hkciAqIGNtc2dfbnh0aGRyIChzdHJ1Y3QgbXNnaGRyICpfX21zZywgc3RydWN0IGNtc2doZHIgKl9fY21zZykgewotIHJldHVybiBfX2Ntc2dfbnh0aGRyKF9fbXNnLT5tc2dfY29udHJvbCwgX19tc2ctPm1zZ19jb250cm9sbGVuLCBfX2Ntc2cpOwotfQorc3RydWN0IGNtc2doZHIqIF9fY21zZ19ueHRoZHIoc3RydWN0IG1zZ2hkciosIHN0cnVjdCBjbXNnaGRyKik7CiAKICNkZWZpbmUgU0NNX1JJR0hUUyAweDAxCiAjZGVmaW5lIFNDTV9DUkVERU5USUFMUyAweDAyCiAjZGVmaW5lIFNDTV9TRUNVUklUWSAweDAzCiAKIHN0cnVjdCB1Y3JlZCB7Ci0gX191MzIgcGlkOwotIF9fdTMyIHVpZDsKLSBfX3UzMiBnaWQ7CisgIHBpZF90IHBpZDsKKyAgdWlkX3QgdWlkOworICBnaWRfdCBnaWQ7CiB9OwogCiAjZGVmaW5lIEFGX1VOU1BFQyAwCkBAIC0yNDIsNiArMjMwLDkgQEAKICNkZWZpbmUgTVNHX0VSUlFVRVVFIDB4MjAwMAogI2RlZmluZSBNU0dfTk9TSUdOQUwgMHg0MDAwCiAjZGVmaW5lIE1TR19NT1JFIDB4ODAwMAorI2RlZmluZSBNU0dfV0FJVEZPUk9ORSAweDEwMDAwCisjZGVmaW5lIE1TR19GQVNUT1BFTiAweDIwMDAwMDAwCisjZGVmaW5lIE1TR19DTVNHX0NMT0VYRUMgMHg0MDAwMDAwMAogI2RlZmluZSBNU0dfRU9GIE1TR19GSU4KICNkZWZpbmUgTVNHX0NNU0dfQ09NUEFUIDAKIApAQCAtMjc3LDQzICsyNjgsNDYgQEAKICMgZGVmaW5lIF9fc29ja2V0Y2FsbCBleHRlcm4KICNlbmRpZgogCi1fX3NvY2tldGNhbGwgaW50IHNvY2tldChpbnQsIGludCwgaW50KTsKLV9fc29ja2V0Y2FsbCBpbnQgYmluZChpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpOwotX19zb2NrZXRjYWxsIGludCBjb25uZWN0KGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCk7CitfX3NvY2tldGNhbGwgaW50IGFjY2VwdChpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopOworX19zb2NrZXRjYWxsIGludCBhY2NlcHQ0KGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KiwgaW50KTsKK19fc29ja2V0Y2FsbCBpbnQgYmluZChpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciosIGludCk7CitfX3NvY2tldGNhbGwgaW50IGNvbm5lY3QoaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QpOworX19zb2NrZXRjYWxsIGludCBnZXRwZWVybmFtZShpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopOworX19zb2NrZXRjYWxsIGludCBnZXRzb2NrbmFtZShpbnQsIHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopOworX19zb2NrZXRjYWxsIGludCBnZXRzb2Nrb3B0KGludCwgaW50LCBpbnQsIHZvaWQqLCBzb2NrbGVuX3QqKTsKIF9fc29ja2V0Y2FsbCBpbnQgbGlzdGVuKGludCwgaW50KTsKLV9fc29ja2V0Y2FsbCBpbnQgYWNjZXB0KGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKLV9fc29ja2V0Y2FsbCBpbnQgZ2V0c29ja25hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopOwotX19zb2NrZXRjYWxsIGludCBnZXRwZWVybmFtZShpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7Ci1fX3NvY2tldGNhbGwgaW50IHNvY2tldHBhaXIoaW50LCBpbnQsIGludCwgaW50ICopOworX19zb2NrZXRjYWxsIGludCByZWN2bW1zZyhpbnQsIHN0cnVjdCBtbXNnaGRyKiwgdW5zaWduZWQgaW50LCBpbnQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyopOworX19zb2NrZXRjYWxsIGludCByZWN2bXNnKGludCwgc3RydWN0IG1zZ2hkciosIGludCk7CitfX3NvY2tldGNhbGwgaW50IHNlbmRtbXNnKGludCwgY29uc3Qgc3RydWN0IG1tc2doZHIqLCB1bnNpZ25lZCBpbnQsIGludCk7CitfX3NvY2tldGNhbGwgaW50IHNlbmRtc2coaW50LCBjb25zdCBzdHJ1Y3QgbXNnaGRyKiwgaW50KTsKK19fc29ja2V0Y2FsbCBpbnQgc2V0c29ja29wdChpbnQsIGludCwgaW50LCBjb25zdCB2b2lkKiwgc29ja2xlbl90KTsKIF9fc29ja2V0Y2FsbCBpbnQgc2h1dGRvd24oaW50LCBpbnQpOwotX19zb2NrZXRjYWxsIGludCBzZXRzb2Nrb3B0KGludCwgaW50LCBpbnQsIGNvbnN0IHZvaWQgKiwgc29ja2xlbl90KTsKLV9fc29ja2V0Y2FsbCBpbnQgZ2V0c29ja29wdChpbnQsIGludCwgaW50LCB2b2lkICosIHNvY2tsZW5fdCAqKTsKLV9fc29ja2V0Y2FsbCBpbnQgc2VuZG1zZyhpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KTsKLV9fc29ja2V0Y2FsbCBpbnQgcmVjdm1zZyhpbnQsIHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KTsKK19fc29ja2V0Y2FsbCBpbnQgc29ja2V0KGludCwgaW50LCBpbnQpOworX19zb2NrZXRjYWxsIGludCBzb2NrZXRwYWlyKGludCwgaW50LCBpbnQsIGludCopOwogCi1leHRlcm4gIHNzaXplX3QgIHNlbmQoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKLWV4dGVybiAgc3NpemVfdCAgcmVjdihpbnQsIHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHNzaXplX3Qgc2VuZChpbnQsIGNvbnN0IHZvaWQqLCBzaXplX3QsIGludCk7CitleHRlcm4gc3NpemVfdCByZWN2KGludCwgdm9pZCosIHNpemVfdCwgaW50KTsKIAotX19zb2NrZXRjYWxsIHNzaXplX3Qgc2VuZHRvKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCk7Ci1fX3NvY2tldGNhbGwgc3NpemVfdCByZWN2ZnJvbShpbnQsIHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7CitfX3NvY2tldGNhbGwgc3NpemVfdCBzZW5kdG8oaW50LCBjb25zdCB2b2lkKiwgc2l6ZV90LCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCk7CitfX3NvY2tldGNhbGwgc3NpemVfdCByZWN2ZnJvbShpbnQsIHZvaWQqLCBzaXplX3QsIGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90Kik7CiAKICNpZiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpCiBfX2Vycm9yZGVjbChfX3JlY3Zmcm9tX2Vycm9yLCAicmVjdmZyb20gY2FsbGVkIHdpdGggc2l6ZSBiaWdnZXIgdGhhbiBidWZmZXIiKTsKLWV4dGVybiBzc2l6ZV90IF9fcmVjdmZyb21fY2hrKGludCwgdm9pZCosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCAqKTsKLWV4dGVybiBzc2l6ZV90IF9fcmVjdmZyb21fcmVhbChpbnQsIHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCopCitleHRlcm4gc3NpemVfdCBfX3JlY3Zmcm9tX2NoayhpbnQsIHZvaWQqLCBzaXplX3QsIHNpemVfdCwgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqLCBzb2NrbGVuX3QqKTsKK2V4dGVybiBzc2l6ZV90IF9fcmVjdmZyb21fcmVhbChpbnQsIHZvaWQqLCBzaXplX3QsIGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KikKICAgICBfX2FzbV9fKF9fVVNFUl9MQUJFTF9QUkVGSVhfXyAicmVjdmZyb20iKTsKIAogX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKLXNzaXplX3QgcmVjdmZyb20oaW50IGZkLCB2b2lkKiBidWYsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncywgY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzcmNfYWRkciwgc29ja2xlbl90KiBhZGRybGVuKSB7Citzc2l6ZV90IHJlY3Zmcm9tKGludCBmZCwgdm9pZCogYnVmLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciogc3JjX2FkZHIsIHNvY2tsZW5fdCogYWRkcl9sZW4pIHsKICAgc2l6ZV90IGJvcyA9IF9fYm9zMChidWYpOwogCiAjaWYgIWRlZmluZWQoX19jbGFuZ19fKQogICBpZiAoYm9zID09IF9fQklPTklDX0ZPUlRJRllfVU5LTk9XTl9TSVpFKSB7Ci0gICAgcmV0dXJuIF9fcmVjdmZyb21fcmVhbChmZCwgYnVmLCBsZW4sIGZsYWdzLCBzcmNfYWRkciwgYWRkcmxlbik7CisgICAgcmV0dXJuIF9fcmVjdmZyb21fcmVhbChmZCwgYnVmLCBsZW4sIGZsYWdzLCBzcmNfYWRkciwgYWRkcl9sZW4pOwogICB9CiAKICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGxlbikgJiYgKGxlbiA8PSBib3MpKSB7Ci0gICAgcmV0dXJuIF9fcmVjdmZyb21fcmVhbChmZCwgYnVmLCBsZW4sIGZsYWdzLCBzcmNfYWRkciwgYWRkcmxlbik7CisgICAgcmV0dXJuIF9fcmVjdmZyb21fcmVhbChmZCwgYnVmLCBsZW4sIGZsYWdzLCBzcmNfYWRkciwgYWRkcl9sZW4pOwogICB9CiAKICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGxlbikgJiYgKGxlbiA+IGJvcykpIHsKQEAgLTMyMSwxMiArMzE1LDEyIEBACiAgIH0KICNlbmRpZgogCi0gIHJldHVybiBfX3JlY3Zmcm9tX2NoayhmZCwgYnVmLCBsZW4sIGJvcywgZmxhZ3MsIHNyY19hZGRyLCBhZGRybGVuKTsKKyAgcmV0dXJuIF9fcmVjdmZyb21fY2hrKGZkLCBidWYsIGxlbiwgYm9zLCBmbGFncywgc3JjX2FkZHIsIGFkZHJfbGVuKTsKIH0KIAogX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKLXNzaXplX3QgcmVjdihpbnQgc29ja2V0LCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4sIHVuc2lnbmVkIGludCBmbGFncykgewotICByZXR1cm4gcmVjdmZyb20oc29ja2V0LCBidWYsIGJ1ZmxlbiwgZmxhZ3MsIE5VTEwsIDApOworc3NpemVfdCByZWN2KGludCBzb2NrZXQsIHZvaWQqIGJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKSB7CisgIHJldHVybiByZWN2ZnJvbShzb2NrZXQsIGJ1ZiwgbGVuLCBmbGFncywgTlVMTCwgMCk7CiB9CiAKICNlbmRpZiAvKiBfX0JJT05JQ19GT1JUSUZZICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3NvY2tldGNhbGxzLmggYi9saWJjL2luY2x1ZGUvc3lzL3NvY2tldGNhbGxzLmgKaW5kZXggYzc0ZjQ2My4uMTMxZTBiYiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9zb2NrZXRjYWxscy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc29ja2V0Y2FsbHMuaApAQCAtNDcsNSArNDcsOCBAQAogI2RlZmluZSBTWVNfR0VUU09DS09QVCAgMTUgICAgICAgICAgICAgIC8qIHN5c19nZXRzb2Nrb3B0KDIpICAgICAgICAgICAgKi8KICNkZWZpbmUgU1lTX1NFTkRNU0cgICAgIDE2ICAgICAgICAgICAgICAvKiBzeXNfc2VuZG1zZygyKSAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNZU19SRUNWTVNHICAgICAxNyAgICAgICAgICAgICAgLyogc3lzX3JlY3Ztc2coMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfQUNDRVBUNCAgICAgMTggICAgICAgICAgICAgIC8qIHN5c19hY2NlcHQ0KDIpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1JFQ1ZNTVNHICAgIDE5ICAgICAgICAgICAgICAvKiBzeXNfcmVjdm1tc2coMikgICAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19TRU5ETU1TRyAgICAyMCAgICAgICAgICAgICAgLyogc3lzX3NlbmRtbXNnKDIpICAgICAgICAgICAgICAqLwogCiAjZW5kaWYgLyogX1NZU19TT0NLRVRDQUxMU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zdGF0LmggYi9saWJjL2luY2x1ZGUvc3lzL3N0YXQuaAppbmRleCAzZDc1NGMwLi5jMGMxNjhiIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3N0YXQuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N0YXQuaApAQCAtMzgsMTAxICszOCwxMDMgQEAKIF9fQkVHSU5fREVDTFMKIAogI2lmIGRlZmluZWQoX19hYXJjaDY0X18pCi1zdHJ1Y3Qgc3RhdCB7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfZGV2OwotICB1bnNpZ25lZCBsb25nIHN0X2lubzsKLSAgdW5zaWduZWQgaW50IHN0X21vZGU7Ci0gIHVuc2lnbmVkIGludCBzdF9ubGluazsKLSAgdW5zaWduZWQgaW50IHN0X3VpZDsKLSAgdW5zaWduZWQgaW50IHN0X2dpZDsKLSAgdW5zaWduZWQgbG9uZyBzdF9yZGV2OwotICB1bnNpZ25lZCBsb25nIF9fcGFkMTsKLSAgbG9uZyBzdF9zaXplOwotICBpbnQgc3RfYmxrc2l6ZTsKLSAgaW50IF9fcGFkMjsKLSAgbG9uZyBzdF9ibG9ja3M7Ci0gIGxvbmcgc3RfYXRpbWU7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWVfbnNlYzsKLSAgbG9uZyBzdF9tdGltZTsKLSAgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOwotICBsb25nIHN0X2N0aW1lOwotICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7Ci0gIHVuc2lnbmVkIGludCBfX3VudXNlZDQ7Ci0gIHVuc2lnbmVkIGludCBfX3VudXNlZDU7Ci19OworI2RlZmluZSBfX1NUQVQ2NF9CT0RZIFwKKyAgdW5zaWduZWQgbG9uZyBzdF9kZXY7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9pbm87IFwKKyAgdW5zaWduZWQgaW50IHN0X21vZGU7IFwKKyAgdW5zaWduZWQgaW50IHN0X25saW5rOyBcCisgIHVpZF90IHN0X3VpZDsgXAorICBnaWRfdCBzdF9naWQ7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9yZGV2OyBcCisgIHVuc2lnbmVkIGxvbmcgX19wYWQxOyBcCisgIGxvbmcgc3Rfc2l6ZTsgXAorICBpbnQgc3RfYmxrc2l6ZTsgXAorICBpbnQgX19wYWQyOyBcCisgIGxvbmcgc3RfYmxvY2tzOyBcCisgIGxvbmcgc3RfYXRpbWU7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOyBcCisgIGxvbmcgc3RfbXRpbWU7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOyBcCisgIGxvbmcgc3RfY3RpbWU7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOyBcCisgIHVuc2lnbmVkIGludCBfX3VudXNlZDQ7IFwKKyAgdW5zaWduZWQgaW50IF9fdW51c2VkNTsgXAorCiAjZWxpZiBkZWZpbmVkKF9fbWlwc19fKQotc3RydWN0IHN0YXQgewotICB1bnNpZ25lZCBsb25nIHN0X2RldjsKLSAgdW5zaWduZWQgbG9uZyBfX3BhZDBbM107Ci0gIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9pbm87Ci0gIHVuc2lnbmVkIGludCBzdF9tb2RlOwotICB1bnNpZ25lZCBpbnQgc3Rfbmxpbms7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfdWlkOwotICB1bnNpZ25lZCBsb25nIHN0X2dpZDsKLSAgdW5zaWduZWQgbG9uZyBzdF9yZGV2OwotICB1bnNpZ25lZCBsb25nIF9fcGFkMVszXTsKLSAgbG9uZyBsb25nIHN0X3NpemU7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWVfbnNlYzsKLSAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKLSAgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOwotICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOwotICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKLSAgdW5zaWduZWQgbG9uZyBfX3BhZDI7Ci0gIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9ibG9ja3M7Ci19OworI2RlZmluZSBfX1NUQVQ2NF9CT0RZIFwKKyAgdW5zaWduZWQgaW50IHN0X2RldjsgXAorICB1bnNpZ25lZCBpbnQgX19wYWQwWzNdOyBcCisgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9pbm87IFwKKyAgdW5zaWduZWQgaW50IHN0X21vZGU7IFwKKyAgdW5zaWduZWQgaW50IHN0X25saW5rOyBcCisgIHVpZF90IHN0X3VpZDsgXAorICBnaWRfdCBzdF9naWQ7IFwKKyAgdW5zaWduZWQgaW50IHN0X3JkZXY7IFwKKyAgdW5zaWduZWQgaW50IF9fcGFkMVszXTsgXAorICBsb25nIGxvbmcgc3Rfc2l6ZTsgXAorICB1bnNpZ25lZCBpbnQgc3RfYXRpbWU7IFwKKyAgdW5zaWduZWQgaW50IHN0X2F0aW1lX25zZWM7IFwKKyAgdW5zaWduZWQgaW50IHN0X210aW1lOyBcCisgIHVuc2lnbmVkIGludCBzdF9tdGltZV9uc2VjOyBcCisgIHVuc2lnbmVkIGludCBzdF9jdGltZTsgXAorICB1bnNpZ25lZCBpbnQgc3RfY3RpbWVfbnNlYzsgXAorICB1bnNpZ25lZCBpbnQgc3RfYmxrc2l6ZTsgXAorICB1bnNpZ25lZCBpbnQgX19wYWQyOyBcCisgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9ibG9ja3M7IFwKKwogI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotc3RydWN0IHN0YXQgewotICB1bnNpZ25lZCBsb25nIHN0X2RldjsKLSAgdW5zaWduZWQgbG9uZyBzdF9pbm87Ci0gIHVuc2lnbmVkIGxvbmcgc3Rfbmxpbms7Ci0gIHVuc2lnbmVkIGludCBzdF9tb2RlOwotICB1bnNpZ25lZCBpbnQgc3RfdWlkOwotICB1bnNpZ25lZCBpbnQgc3RfZ2lkOwotICB1bnNpZ25lZCBpbnQgX19wYWQwOwotICB1bnNpZ25lZCBsb25nIHN0X3JkZXY7Ci0gIGxvbmcgc3Rfc2l6ZTsKLSAgbG9uZyBzdF9ibGtzaXplOwotICBsb25nIHN0X2Jsb2NrczsKLSAgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKLSAgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOwotICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwotICB1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWVfbnNlYzsKLSAgbG9uZyBfX3BhZDNbM107Ci19OworI2RlZmluZSBfX1NUQVQ2NF9CT0RZIFwKKyAgdW5zaWduZWQgbG9uZyBzdF9kZXY7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9pbm87IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9ubGluazsgXAorICB1bnNpZ25lZCBpbnQgc3RfbW9kZTsgXAorICB1aWRfdCBzdF91aWQ7IFwKKyAgZ2lkX3Qgc3RfZ2lkOyBcCisgIHVuc2lnbmVkIGludCBfX3BhZDA7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9yZGV2OyBcCisgIGxvbmcgc3Rfc2l6ZTsgXAorICBsb25nIHN0X2Jsa3NpemU7IFwKKyAgbG9uZyBzdF9ibG9ja3M7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsgXAorICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsgXAorICB1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7IFwKKyAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsgXAorICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7IFwKKyAgbG9uZyBfX3BhZDNbM107IFwKKwogI2Vsc2UKLXN0cnVjdCBzdGF0IHsKLSAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2RldjsKLSAgdW5zaWduZWQgY2hhciBfX3BhZDBbNF07Ci0gIHVuc2lnbmVkIGxvbmcgX19zdF9pbm87Ci0gIHVuc2lnbmVkIGludCBzdF9tb2RlOwotICB1bnNpZ25lZCBpbnQgc3Rfbmxpbms7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfdWlkOwotICB1bnNpZ25lZCBsb25nIHN0X2dpZDsKLSAgdW5zaWduZWQgbG9uZyBsb25nIHN0X3JkZXY7Ci0gIHVuc2lnbmVkIGNoYXIgX19wYWQzWzRdOwotICBsb25nIGxvbmcgc3Rfc2l6ZTsKLSAgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOwotICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfYmxvY2tzOwotICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOwotICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7Ci0gIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWVfbnNlYzsKLSAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKLSAgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOwotICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfaW5vOwotfTsKKyNkZWZpbmUgX19TVEFUNjRfQk9EWSBcCisgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9kZXY7IFwKKyAgdW5zaWduZWQgY2hhciBfX3BhZDBbNF07IFwKKyAgdW5zaWduZWQgbG9uZyBfX3N0X2lubzsgXAorICB1bnNpZ25lZCBpbnQgc3RfbW9kZTsgXAorICB1bnNpZ25lZCBpbnQgc3Rfbmxpbms7IFwKKyAgdWlkX3Qgc3RfdWlkOyBcCisgIGdpZF90IHN0X2dpZDsgXAorICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfcmRldjsgXAorICB1bnNpZ25lZCBjaGFyIF9fcGFkM1s0XTsgXAorICBsb25nIGxvbmcgc3Rfc2l6ZTsgXAorICB1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7IFwKKyAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2Jsb2NrczsgXAorICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWVfbnNlYzsgXAorICB1bnNpZ25lZCBsb25nIHN0X210aW1lOyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWVfbnNlYzsgXAorICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOyBcCisgIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWVfbnNlYzsgXAorICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfaW5vOyBcCisKICNlbmRpZgogCi0vKiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEdMaWJjLCB3ZSBwcm92aWRlIG1hY3JvIGFsaWFzZXMKLSAqIGZvciB0aGUgbm9uLVBvc2l4IG5hbm8tc2Vjb25kcyBhY2Nlc3NvcnMuCi0gKi8KLSNkZWZpbmUgIHN0X2F0aW1lbnNlYyAgc3RfYXRpbWVfbnNlYwotI2RlZmluZSAgc3RfbXRpbWVuc2VjICBzdF9tdGltZV9uc2VjCi0jZGVmaW5lICBzdF9jdGltZW5zZWMgIHN0X2N0aW1lX25zZWMKK3N0cnVjdCBzdGF0IHsgX19TVEFUNjRfQk9EWSB9Oworc3RydWN0IHN0YXQ2NCB7IF9fU1RBVDY0X0JPRFkgfTsKKworI3VuZGVmIF9fU1RBVDY0X0JPRFkKKworI2RlZmluZSBzdF9hdGltZW5zZWMgc3RfYXRpbWVfbnNlYworI2RlZmluZSBzdF9tdGltZW5zZWMgc3RfbXRpbWVfbnNlYworI2RlZmluZSBzdF9jdGltZW5zZWMgc3RfY3RpbWVfbnNlYwogCiAjaWZkZWYgX19VU0VfQlNECiAvKiBQZXJtaXNzaW9uIG1hY3JvcyBwcm92aWRlZCBieSBnbGliYyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEJTRHMuICovCkBAIC0xNDEsMjEgKzE0MywyNiBAQAogI2RlZmluZSBERUZGSUxFTU9ERSAoU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEggfCBTX0lXT1RIKSAvKiAwNjY2ICovCiAjZW5kaWYKIAotZXh0ZXJuIGludCAgICBjaG1vZChjb25zdCBjaGFyICosIG1vZGVfdCk7Ci1leHRlcm4gaW50ICAgIGZjaG1vZChpbnQsIG1vZGVfdCk7Ci1leHRlcm4gaW50ICAgIG1rZGlyKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKK2V4dGVybiBpbnQgY2htb2QoY29uc3QgY2hhciosIG1vZGVfdCk7CitleHRlcm4gaW50IGZjaG1vZChpbnQsIG1vZGVfdCk7CitleHRlcm4gaW50IG1rZGlyKGNvbnN0IGNoYXIqLCBtb2RlX3QpOwogCi1leHRlcm4gaW50ICAgIHN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKLWV4dGVybiBpbnQgICAgZnN0YXQoaW50LCBzdHJ1Y3Qgc3RhdCAqKTsKLWV4dGVybiBpbnQgICAgbHN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKLWV4dGVybiBpbnQgICAgbWtub2QoY29uc3QgY2hhciAqLCBtb2RlX3QsIGRldl90KTsKK2V4dGVybiBpbnQgZnN0YXQoaW50LCBzdHJ1Y3Qgc3RhdCopOworZXh0ZXJuIGludCBmc3RhdDY0KGludCwgc3RydWN0IHN0YXQ2NCopOworZXh0ZXJuIGludCBmc3RhdGF0KGludCwgY29uc3QgY2hhciosIHN0cnVjdCBzdGF0KiwgaW50KTsKK2V4dGVybiBpbnQgZnN0YXRhdDY0KGludCwgY29uc3QgY2hhciosIHN0cnVjdCBzdGF0NjQqLCBpbnQpOworZXh0ZXJuIGludCBsc3RhdChjb25zdCBjaGFyKiwgc3RydWN0IHN0YXQqKTsKK2V4dGVybiBpbnQgbHN0YXQ2NChjb25zdCBjaGFyKiwgc3RydWN0IHN0YXQ2NCopOworZXh0ZXJuIGludCBzdGF0KGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdCopOworZXh0ZXJuIGludCBzdGF0NjQoY29uc3QgY2hhciosIHN0cnVjdCBzdGF0NjQqKTsKKworZXh0ZXJuIGludCBta25vZChjb25zdCBjaGFyKiwgbW9kZV90LCBkZXZfdCk7CiBleHRlcm4gbW9kZV90IHVtYXNrKG1vZGVfdCk7CiAKICNpZiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpCiAKIGV4dGVybiBtb2RlX3QgX191bWFza19jaGsobW9kZV90KTsKLWV4dGVybiBtb2RlX3QgX191bWFza19yZWFsKG1vZGVfdCkKLSAgICBfX2FzbV9fKF9fVVNFUl9MQUJFTF9QUkVGSVhfXyAidW1hc2siKTsKK2V4dGVybiBtb2RlX3QgX191bWFza19yZWFsKG1vZGVfdCkgX19hc21fXyhfX1VTRVJfTEFCRUxfUFJFRklYX18gInVtYXNrIik7CiBfX2Vycm9yZGVjbChfX3VtYXNrX2ludmFsaWRfbW9kZSwgInVtYXNrIGNhbGxlZCB3aXRoIGludmFsaWQgbW9kZSIpOwogCiBfX0JJT05JQ19GT1JUSUZZX0lOTElORQpAQCAtMTcyLDIwICsxNzksMTQgQEAKIH0KICNlbmRpZiAvKiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpICovCiAKLQotI2RlZmluZSAgc3RhdDY0ICAgIHN0YXQKLSNkZWZpbmUgIGZzdGF0NjQgICBmc3RhdAotI2RlZmluZSAgbHN0YXQ2NCAgIGxzdGF0Ci0KIGV4dGVybiBpbnQgbWtmaWZvKGNvbnN0IGNoYXIqLCBtb2RlX3QpOwogCiBleHRlcm4gaW50IGZjaG1vZGF0KGludCwgY29uc3QgY2hhciosIG1vZGVfdCwgaW50KTsKLWV4dGVybiBpbnQgZnN0YXRhdChpbnQsIGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdCosIGludCk7CiBleHRlcm4gaW50IG1rZGlyYXQoaW50LCBjb25zdCBjaGFyKiwgbW9kZV90KTsKIGV4dGVybiBpbnQgbWtub2RhdChpbnQsIGNvbnN0IGNoYXIqLCBtb2RlX3QsIGRldl90KTsKIAotIyBkZWZpbmUgVVRJTUVfTk9XICAgICAgKCgxbCA8PCAzMCkgLSAxbCkKLSMgZGVmaW5lIFVUSU1FX09NSVQgICAgICgoMWwgPDwgMzApIC0gMmwpCisjZGVmaW5lIFVUSU1FX05PVyAgKCgxTCA8PCAzMCkgLSAxTCkKKyNkZWZpbmUgVVRJTUVfT01JVCAoKDFMIDw8IDMwKSAtIDJMKQogZXh0ZXJuIGludCB1dGltZW5zYXQoaW50IGZkLCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgdGltZXNbMl0sIGludCBmbGFncyk7CiBleHRlcm4gaW50IGZ1dGltZW5zKGludCBmZCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjIHRpbWVzWzJdKTsKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zdGF0dmZzLmggYi9saWJjL2luY2x1ZGUvc3lzL3N0YXR2ZnMuaAppbmRleCBlOTEwYzAzLi4zNDk1NTQ2IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3N0YXR2ZnMuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N0YXR2ZnMuaApAQCAtMjMsMTkgKzIzLDMxIEBACiAKIF9fQkVHSU5fREVDTFMKIAotc3RydWN0IHN0YXR2ZnMgewotICB1bnNpZ25lZCBsb25nIGZfYnNpemU7Ci0gIHVuc2lnbmVkIGxvbmcgZl9mcnNpemU7Ci0gIGZzYmxrY250X3QgICAgZl9ibG9ja3M7Ci0gIGZzYmxrY250X3QgICAgZl9iZnJlZTsKLSAgZnNibGtjbnRfdCAgICBmX2JhdmFpbDsKLSAgZnNmaWxjbnRfdCAgICBmX2ZpbGVzOwotICBmc2ZpbGNudF90ICAgIGZfZmZyZWU7Ci0gIGZzZmlsY250X3QgICAgZl9mYXZhaWw7Ci0gIHVuc2lnbmVkIGxvbmcgZl9mc2lkOwotICB1bnNpZ25lZCBsb25nIGZfZmxhZzsKLSAgdW5zaWduZWQgbG9uZyBmX25hbWVtYXg7Ci19OworI2lmZGVmIF9fTFA2NF9fCisjZGVmaW5lIF9fU1RBVFZGUzY0X1JFU0VSVkVEIHVpbnQzMl90IF9fZl9yZXNlcnZlZFs2XTsKKyNlbHNlCisjZGVmaW5lIF9fU1RBVFZGUzY0X1JFU0VSVkVECisjZW5kaWYKKworI2RlZmluZSBfX1NUQVRWRlM2NF9CT0RZIFwKKyAgdW5zaWduZWQgbG9uZyBmX2JzaXplOyBcCisgIHVuc2lnbmVkIGxvbmcgZl9mcnNpemU7IFwKKyAgZnNibGtjbnRfdCAgICBmX2Jsb2NrczsgXAorICBmc2Jsa2NudF90ICAgIGZfYmZyZWU7IFwKKyAgZnNibGtjbnRfdCAgICBmX2JhdmFpbDsgXAorICBmc2ZpbGNudF90ICAgIGZfZmlsZXM7IFwKKyAgZnNmaWxjbnRfdCAgICBmX2ZmcmVlOyBcCisgIGZzZmlsY250X3QgICAgZl9mYXZhaWw7IFwKKyAgdW5zaWduZWQgbG9uZyBmX2ZzaWQ7IFwKKyAgdW5zaWduZWQgbG9uZyBmX2ZsYWc7IFwKKyAgdW5zaWduZWQgbG9uZyBmX25hbWVtYXg7IFwKKyAgX19TVEFUVkZTNjRfUkVTRVJWRUQKKworc3RydWN0IHN0YXR2ZnMgeyBfX1NUQVRWRlM2NF9CT0RZIH07CitzdHJ1Y3Qgc3RhdHZmczY0IHsgX19TVEFUVkZTNjRfQk9EWSB9OworCisjdW5kZWYgX19TVEFUVkZTNjRfQk9EWQorI3VuZGVmIF9fU1RBVFZGUzY0X1JFU0VSVkVECiAKICNkZWZpbmUgU1RfUkRPTkxZICAgICAgMHgwMDAxCiAjZGVmaW5lIFNUX05PU1VJRCAgICAgIDB4MDAwMgpAQCAtNDgsNyArNjAsOSBAQAogI2RlZmluZSBTVF9SRUxBVElNRSAgICAweDEwMDAKIAogZXh0ZXJuIGludCBzdGF0dmZzKGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHN0cnVjdCBzdGF0dmZzKiBfX3Jlc3RyaWN0KSBfX25vbm51bGwoKDEsIDIpKTsKK2V4dGVybiBpbnQgc3RhdHZmczY0KGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHN0cnVjdCBzdGF0dmZzNjQqIF9fcmVzdHJpY3QpIF9fbm9ubnVsbCgoMSwgMikpOwogZXh0ZXJuIGludCBmc3RhdHZmcyhpbnQsIHN0cnVjdCBzdGF0dmZzKikgX19ub25udWxsKCgyKSk7CitleHRlcm4gaW50IGZzdGF0dmZzNjQoaW50LCBzdHJ1Y3Qgc3RhdHZmczY0KikgX19ub25udWxsKCgyKSk7CiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc3lzY2FsbC5oIGIvbGliYy9pbmNsdWRlL3N5cy9zeXNjYWxsLmgKaW5kZXggYTQ0YjJlNS4uMzRhMjlkZiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9zeXNjYWxsLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zeXNjYWxsLmgKQEAgLTM3LDcgKzM3LDcgQEAKIAogX19CRUdJTl9ERUNMUwogCi1pbnQgc3lzY2FsbChpbnQgbnVtYmVyLCAuLi4pOworbG9uZyBzeXNjYWxsKGxvbmcgbnVtYmVyLCAuLi4pOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3RpbWViLmggYi9saWJjL2luY2x1ZGUvc3lzL3RpbWViLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNmYyNTUuLjAwMDAwMDAKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy90aW1lYi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBfU1lTX1RJTUVCX0gKLSNkZWZpbmUgX1NZU19USU1FQl9ICi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotCi1fX0JFR0lOX0RFQ0xTCi0KLXN0cnVjdCB0aW1lYiB7Ci0gICAgdGltZV90ICAgICAgICAgIHRpbWU7Ci0gICAgdW5zaWduZWQgc2hvcnQgIG1pbGxpdG07Ci0gICAgc2hvcnQgICAgICAgICAgIHRpbWV6b25lOwotICAgIHNob3J0ICAgICAgICAgICBkc3RmbGFnOwotfTsKLQotZXh0ZXJuIGludCAgZnRpbWUoc3RydWN0IHRpbWViKiAgdGltZWJ1Zik7Ci0KLV9fRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfU1lTX1RJTUVCX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvdGltZXMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdGltZXMuaAppbmRleCAxYjliOGIyLi42Y2U1YjU1IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3RpbWVzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy90aW1lcy5oCkBAIC0yNSw2ICsyNSw3IEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCisKICNpZm5kZWYgX1NZU19USU1FU19IXwogI2RlZmluZSBfU1lTX1RJTUVTX0hfCiAKQEAgLTM0LDcgKzM1LDcgQEAKIAogX19CRUdJTl9ERUNMUwogCi1leHRlcm4gY2xvY2tfdCB0aW1lcyhzdHJ1Y3QgdG1zICopOworZXh0ZXJuIGNsb2NrX3QgdGltZXMoc3RydWN0IHRtcyopOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3R5cGVzLmggYi9saWJjL2luY2x1ZGUvc3lzL3R5cGVzLmgKaW5kZXggZjhhZTgxMy4uYTVmYTY5MiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy90eXBlcy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdHlwZXMuaApAQCAtMzUsMjggKzM1LDQ5IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgogCi0vKiBfX2tlcm5lbF9naWRfdCBhbmQgX19rZXJuZWxfdWlkX3QgYXJlIDE2IGJpdCBmb3IgbGVnYWN5IHJlYXNvbnMuCi0gKiBBbmRyb2lkIHVzZXMgX19rZXJuZWxfdWlkMzJfdCBhbmQgX19rZXJuZWxfZ2lkMzJfdCBpbnN0ZWFkLgotICovCi10eXBlZGVmIF9fa2VybmVsX2dpZDMyX3QgZ2lkX3Q7Ci10eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QgdWlkX3Q7CisvKiBnaWRzLCB1aWRzLCBhbmQgcGlkcyBhcmUgYWxsIDMyLWJpdC4gKi8KK3R5cGVkZWYgX19rZXJuZWxfZ2lkMzJfdCBfX2dpZF90OwordHlwZWRlZiBfX2dpZF90IGdpZF90OwordHlwZWRlZiBfX2tlcm5lbF91aWQzMl90IF9fdWlkX3Q7Cit0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX3BpZF90IF9fcGlkX3Q7Cit0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7Cit0eXBlZGVmIHVpbnQzMl90IF9faWRfdDsKK3R5cGVkZWYgX19pZF90IGlkX3Q7CiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBibGtjbnRfdDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBibGtzaXplX3Q7CiB0eXBlZGVmIF9fa2VybmVsX2NhZGRyX3QgY2FkZHJfdDsKIHR5cGVkZWYgX19rZXJuZWxfY2xvY2tfdCBjbG9ja190OwotdHlwZWRlZiBfX2tlcm5lbF9jbG9ja2lkX3QgY2xvY2tpZF90OworCit0eXBlZGVmIF9fa2VybmVsX2Nsb2NraWRfdCBfX2Nsb2NraWRfdDsKK3R5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OworCiB0eXBlZGVmIF9fa2VybmVsX2RhZGRyX3QgZGFkZHJfdDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBmc2Jsa2NudF90OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGZzZmlsY250X3Q7Ci10eXBlZGVmIF9fa2VybmVsX2lub190IGlub190OwotdHlwZWRlZiBfX2tlcm5lbF9rZXlfdCBrZXlfdDsKLXR5cGVkZWYgX19rZXJuZWxfbW9kZV90IG1vZGVfdDsKKwordHlwZWRlZiBfX2tlcm5lbF9tb2RlX3QgX19tb2RlX3Q7Cit0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKKwordHlwZWRlZiBfX2tlcm5lbF9rZXlfdCBfX2tleV90OwordHlwZWRlZiBfX2tleV90IGtleV90OworCit0eXBlZGVmIF9fa2VybmVsX2lub190IF9faW5vX3Q7Cit0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CisKK3R5cGVkZWYgdWludDMyX3QgX19ubGlua190OwogdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKLXR5cGVkZWYgX19rZXJuZWxfcGlkX3QgcGlkX3Q7Ci10eXBlZGVmIF9fa2VybmVsX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwotdHlwZWRlZiBfX2tlcm5lbF90aW1lcl90IHRpbWVyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludCB1c2Vjb25kc190OworCit0eXBlZGVmIHZvaWQqIF9fdGltZXJfdDsKK3R5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CisKK3R5cGVkZWYgX19rZXJuZWxfc3VzZWNvbmRzX3QgX19zdXNlY29uZHNfdDsKK3R5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKKworLyogdXNlY29uZHNfdCBpcyAzMi1iaXQgb24gYm90aCBMUDMyIGFuZCBMUDY0LiAqLwordHlwZWRlZiB1aW50MzJfdCBfX3VzZWNvbmRzX3Q7Cit0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwogCiAjaWYgIWRlZmluZWQoX19MUDY0X18pCiAvKiBUaGlzIGhpc3RvcmljYWwgYWNjaWRlbnQgbWVhbnMgdGhhdCB3ZSBoYWQgYSAzMi1iaXQgZGV2X3Qgb24gMzItYml0IGFyY2hpdGVjdHVyZXMuICovCkBAIC02NiwxOCArODcsMjEgQEAKICNlbmRpZgogCiAvKiBUaGlzIGhpc3RvcmljYWwgYWNjaWRlbnQgbWVhbnMgdGhhdCB3ZSBoYWQgYSAzMi1iaXQgdGltZV90IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLiAqLwotdHlwZWRlZiBfX2tlcm5lbF90aW1lX3QgdGltZV90OwordHlwZWRlZiBfX2tlcm5lbF90aW1lX3QgX190aW1lX3Q7Cit0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIAogLyogVGhpcyBoaXN0b3JpY2FsIGFjY2lkZW50IG1lYW5zIHRoYXQgd2UgaGFkIGEgMzItYml0IG9mZl90IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLiAqLwotI2lmbmRlZiBfT0ZGX1RfREVGSU5FRF8KLSNkZWZpbmUgX09GRl9UX0RFRklORURfCisjaWYgIWRlZmluZWQoX19MUDY0X18pCiB0eXBlZGVmIF9fa2VybmVsX29mZl90IG9mZl90OwotI2VuZGlmCiB0eXBlZGVmIF9fa2VybmVsX2xvZmZfdCBsb2ZmX3Q7CiB0eXBlZGVmIGxvZmZfdCBvZmY2NF90OwotCi0vKiBUaGlzIG9uZSByZWFsbHkgaXMgbWVhbnQgdG8gYmUganVzdCAzMiBiaXRzISAqLwotdHlwZWRlZiB1aW50MzJfdCBpZF90OworI2Vsc2UKKy8qIFdlIGNvdWxkIHJlLXVzZSB0aGUgTFAzMiBkZWZpbml0aW9ucywgYnV0IHRoYXQgd291bGQgbWVhbiB0aGF0IGFsdGhvdWdoIG9mZl90IGFuZCBsb2ZmX3Qvb2ZmNjRfdAorICogd291bGQgYmUgdGhlIHNhbWUgc2l6ZSwgdGhleSB3b3VsZG4ndCBhY3R1YWxseSBiZSB0aGUgc2FtZSB0eXBlLCB3aGljaCBjYW4gbGVhZCB0byB3YXJuaW5ncy4gKi8KK3R5cGVkZWYgX19rZXJuZWxfb2ZmX3Qgb2ZmX3Q7Cit0eXBlZGVmIG9mZl90IGxvZmZfdDsKK3R5cGVkZWYgbG9mZl90IG9mZjY0X3Q7CisjZW5kaWYKIAogLyogd2hpbGUgUE9TSVggd2FudHMgdGhlc2UgaW4gPHN5cy90eXBlcy5oPiwgd2UKICAqIGRlY2xhcmUgdGhlbiBpbiA8cHRocmVhZC5oPiBpbnN0ZWFkICovCkBAIC05Myw2ICsxMTcsMTcgQEAKIHR5cGVkZWYgIC4uLi4gcHRocmVhZF90OwogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChfX0xQNjRfXykKKy8qIFRoaXMgaGlzdG9yaWNhbCBhY2NpZGVudCBtZWFucyB0aGF0IHdlIGhhZCBhIHNpZ25lZCBzb2NrbGVuX3Qgb24gMzItYml0IGFyY2hpdGVjdHVyZXMuICovCit0eXBlZGVmIGludDMyX3QgX19zb2NrbGVuX3Q7CisjZWxzZQorLyogTFA2NCBzdGlsbCBoYXMgYSAzMi1iaXQgc29ja2xlbl90LiAqLwordHlwZWRlZiB1aW50MzJfdCBfX3NvY2tsZW5fdDsKKyNlbmRpZgordHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CisKK3R5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX192YV9saXN0OworCiAjaWZuZGVmIF9TU0laRV9UX0RFRklORURfCiAjZGVmaW5lIF9TU0laRV9UX0RFRklORURfCiAvKiBUcmFkaXRpb25hbGx5LCBiaW9uaWMncyBzc2l6ZV90IHdhcyAibG9uZyBpbnQiLiBUaGlzIGNhdXNlZCBHQ0MgdG8gZW1pdCB3YXJuaW5ncyB3aGVuIHlvdQpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy91Y29udGV4dC5oIGIvbGliYy9pbmNsdWRlL3N5cy91Y29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MjM4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfU1lTX1VDT05URVhUX0hfCisjZGVmaW5lIF9TWVNfVUNPTlRFWFRfSF8KKworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy91c2VyLmg+CisKK19fQkVHSU5fREVDTFMKKworI2lmIGRlZmluZWQoX19hcm1fXykKKworZW51bSB7CisgIFJFR19SMCA9IDAsCisgIFJFR19SMSwKKyAgUkVHX1IyLAorICBSRUdfUjMsCisgIFJFR19SNCwKKyAgUkVHX1I1LAorICBSRUdfUjYsCisgIFJFR19SNywKKyAgUkVHX1I4LAorICBSRUdfUjksCisgIFJFR19SMTAsCisgIFJFR19SMTEsCisgIFJFR19SMTIsCisgIFJFR19SMTMsCisgIFJFR19SMTQsCisgIFJFR19SMTUsCit9OworCisjZGVmaW5lIE5HUkVHIDE4IC8qIExpa2UgZ2xpYmMuICovCisKK3R5cGVkZWYgaW50IGdyZWdfdDsKK3R5cGVkZWYgZ3JlZ190IGdyZWdzZXRfdFtOR1JFR107CisKKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgordHlwZWRlZiBzdHJ1Y3Qgc2lnY29udGV4dCBtY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdCB1Y29udGV4dCB7CisgIHVuc2lnbmVkIGxvbmcgdWNfZmxhZ3M7CisgIHN0cnVjdCB1Y29udGV4dCogdWNfbGluazsKKyAgc3RhY2tfdCB1Y19zdGFjazsKKyAgbWNvbnRleHRfdCB1Y19tY29udGV4dDsKKyAgLy8gQW5kcm9pZCBoYXMgYSB3cm9uZyAoc21hbGxlcikgc2lnc2V0X3Qgb24gQVJNLgorICB1bmlvbiB7CisgICAgc2lnc2V0X3QgYmlvbmljOworICAgIHVpbnQzMl90IGtlcm5lbFsyXTsKKyAgfSB1Y19zaWdtYXNrOworICAvLyBUaGUga2VybmVsIGFkZHMgZXh0cmEgcGFkZGluZyBhZnRlciB1Y19zaWdtYXNrIHRvIG1hdGNoIGdsaWJjIHNpZ3NldF90IG9uIEFSTS4KKyAgY2hhciBfX3BhZGRpbmdbMTIwXTsKKyAgdW5zaWduZWQgbG9uZyB1Y19yZWdzcGFjZVsxMjhdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDgpKSk7Cit9IHVjb250ZXh0X3Q7CisKKyNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCisKKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgordHlwZWRlZiBzdHJ1Y3Qgc2lnY29udGV4dCBtY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdCB1Y29udGV4dCB7CisgIHVuc2lnbmVkIGxvbmcgdWNfZmxhZ3M7CisgIHN0cnVjdCB1Y29udGV4dCAqdWNfbGluazsKKyAgc3RhY2tfdCB1Y19zdGFjazsKKyAgc2lnc2V0X3QgdWNfc2lnbWFzazsKKyAgLy8gVGhlIGtlcm5lbCBhZGRzIGV4dHJhIHBhZGRpbmcgYWZ0ZXIgdWNfc2lnbWFzayB0byBtYXRjaCBnbGliYyBzaWdzZXRfdCBvbiBBUk02NC4KKyAgY2hhciBfX3BhZGRpbmdbMTI4IC0gc2l6ZW9mKHNpZ3NldF90KV07CisgIG1jb250ZXh0X3QgdWNfbWNvbnRleHQ7Cit9IHVjb250ZXh0X3Q7CisKKyNlbGlmIGRlZmluZWQoX19pMzg2X18pCisKK2VudW0geworICBSRUdfR1MgPSAwLAorICBSRUdfRlMsCisgIFJFR19FUywKKyAgUkVHX0RTLAorICBSRUdfRURJLAorICBSRUdfRVNJLAorICBSRUdfRUJQLAorICBSRUdfRVNQLAorICBSRUdfRUJYLAorICBSRUdfRURYLAorICBSRUdfRUNYLAorICBSRUdfRUFYLAorICBSRUdfVFJBUE5PLAorICBSRUdfRVJSLAorICBSRUdfRUlQLAorICBSRUdfQ1MsCisgIFJFR19FRkwsCisgIFJFR19VRVNQLAorICBSRUdfU1MsCisgIE5HUkVHCit9OworCit0eXBlZGVmIGludCBncmVnX3Q7Cit0eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbTkdSRUddOworCitzdHJ1Y3QgX2xpYmNfZnByZWcgeworICB1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKKyAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7Cit9OworCitzdHJ1Y3QgX2xpYmNfZnBzdGF0ZSB7CisgIHVuc2lnbmVkIGxvbmcgY3c7CisgIHVuc2lnbmVkIGxvbmcgc3c7CisgIHVuc2lnbmVkIGxvbmcgdGFnOworICB1bnNpZ25lZCBsb25nIGlwb2ZmOworICB1bnNpZ25lZCBsb25nIGNzc2VsOworICB1bnNpZ25lZCBsb25nIGRhdGFvZmY7CisgIHVuc2lnbmVkIGxvbmcgZGF0YXNlbDsKKyAgc3RydWN0IF9saWJjX2ZwcmVnIF9zdFs4XTsKKyAgdW5zaWduZWQgbG9uZyBzdGF0dXM7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfbGliY19mcHN0YXRlKiBmcHJlZ3NldF90OworCit0eXBlZGVmIHN0cnVjdCB7CisgIGdyZWdzZXRfdCBncmVnczsKKyAgZnByZWdzZXRfdCBmcHJlZ3M7CisgIHVuc2lnbmVkIGxvbmcgb2xkbWFzazsKKyAgdW5zaWduZWQgbG9uZyBjcjI7Cit9IG1jb250ZXh0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVjb250ZXh0IHsKKyAgdW5zaWduZWQgbG9uZyB1Y19mbGFnczsKKyAgc3RydWN0IHVjb250ZXh0KiB1Y19saW5rOworICBzdGFja190IHVjX3N0YWNrOworICBtY29udGV4dF90IHVjX21jb250ZXh0OworICAvLyBBbmRyb2lkIGhhcyBhIHdyb25nIChzbWFsbGVyKSBzaWdzZXRfdCBvbiB4ODYuCisgIHVuaW9uIHsKKyAgICBzaWdzZXRfdCBiaW9uaWM7CisgICAgdWludDMyX3Qga2VybmVsWzJdOworICB9IHVjX3NpZ21hc2s7CisgIHN0cnVjdCBfbGliY19mcHN0YXRlIF9fZnByZWdzX21lbTsKK30gdWNvbnRleHRfdDsKKworI2VsaWYgZGVmaW5lZChfX21pcHNfXykKKworLyogZ2xpYmMgZG9lc24ndCBoYXZlIG5hbWVzIGZvciBNSVBTIHJlZ2lzdGVycy4gKi8KKworI2RlZmluZSBOR1JFRyAzMgorI2RlZmluZSBORlBSRUcgMzIKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgZ3JlZ190OwordHlwZWRlZiBncmVnX3QgZ3JlZ3NldF90W05HUkVHXTsKKwordHlwZWRlZiBzdHJ1Y3QgZnByZWdzZXQgeworICB1bmlvbiB7CisgICAgZG91YmxlIGZwX2RyZWdzW05GUFJFR107CisgICAgc3RydWN0IHsKKyAgICAgIGZsb2F0IF9mcF9mcmVnczsKKyAgICAgIHVuc2lnbmVkIF9mcF9wYWQ7CisgICAgfSBmcF9mcmVnc1tORlBSRUddOworICB9IGZwX3I7Cit9IGZwcmVnc2V0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgcmVnbWFzazsKKyAgdW5zaWduZWQgc3RhdHVzOworICBncmVnX3QgcGM7CisgIGdyZWdzZXRfdCBncmVnczsKKyAgZnByZWdzZXRfdCBmcHJlZ3M7CisgIHVuc2lnbmVkIGZwX293bmVkOworICB1bnNpZ25lZCBmcGNfY3NyOworICB1bnNpZ25lZCBmcGNfZWlyOworICB1bnNpZ25lZCB1c2VkX21hdGg7CisgIHVuc2lnbmVkIGRzcDsKKyAgZ3JlZ190IG1kaGk7CisgIGdyZWdfdCBtZGxvOworICB1bnNpZ25lZCBsb25nIGhpMTsKKyAgdW5zaWduZWQgbG9uZyBsbzE7CisgIHVuc2lnbmVkIGxvbmcgaGkyOworICB1bnNpZ25lZCBsb25nIGxvMjsKKyAgdW5zaWduZWQgbG9uZyBoaTM7CisgIHVuc2lnbmVkIGxvbmcgbG8zOworfSBtY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdCB1Y29udGV4dCB7CisgIHVuc2lnbmVkIGxvbmcgdWNfZmxhZ3M7CisgIHN0cnVjdCB1Y29udGV4dCogdWNfbGluazsKKyAgc3RhY2tfdCB1Y19zdGFjazsKKyAgbWNvbnRleHRfdCB1Y19tY29udGV4dDsKKyAgc2lnc2V0X3QgdWNfc2lnbWFzazsKK30gdWNvbnRleHRfdDsKKworI2VsaWYgZGVmaW5lZChfX21pcHM2NF9fKQorCisjZXJyb3IgVE9ETworCisjZWxpZiBkZWZpbmVkKF9feDg2XzY0X18pCisKK2VudW0geworICBSRUdfUjggPSAwLAorICBSRUdfUjksCisgIFJFR19SMTAsCisgIFJFR19SMTEsCisgIFJFR19SMTIsCisgIFJFR19SMTMsCisgIFJFR19SMTQsCisgIFJFR19SMTUsCisgIFJFR19SREksCisgIFJFR19SU0ksCisgIFJFR19SQlAsCisgIFJFR19SQlgsCisgIFJFR19SRFgsCisgIFJFR19SQVgsCisgIFJFR19SQ1gsCisgIFJFR19SU1AsCisgIFJFR19SSVAsCisgIFJFR19FRkwsCisgIFJFR19DU0dTRlMsCisgIFJFR19FUlIsCisgIFJFR19UUkFQTk8sCisgIFJFR19PTERNQVNLLAorICBSRUdfQ1IyLAorICBOR1JFRworfTsKKwordHlwZWRlZiBsb25nIGdyZWdfdDsKK3R5cGVkZWYgZ3JlZ190IGdyZWdzZXRfdFtOR1JFR107CisKK3N0cnVjdCBfbGliY19mcHhyZWcgeworICB1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKKyAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7CisgIHVuc2lnbmVkIHNob3J0IHBhZGRpbmdbM107Cit9OworCitzdHJ1Y3QgX2xpYmNfeG1tcmVnIHsKKyAgdWludDMyX3QgZWxlbWVudFs0XTsKK307CisKK3N0cnVjdCBfbGliY19mcHN0YXRlIHsKKyAgdWludDE2X3QgY3dkOworICB1aW50MTZfdCBzd2Q7CisgIHVpbnQxNl90IGZ0dzsKKyAgdWludDE2X3QgZm9wOworICB1aW50NjRfdCByaXA7CisgIHVpbnQ2NF90IHJkcDsKKyAgdWludDMyX3QgbXhjc3I7CisgIHVpbnQzMl90IG14Y3JfbWFzazsKKyAgc3RydWN0IF9saWJjX2ZweHJlZyBfc3RbOF07CisgIHN0cnVjdCBfbGliY194bW1yZWcgX3htbVsxNl07CisgIHVpbnQzMl90IHBhZGRpbmdbMjRdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX2xpYmNfZnBzdGF0ZSogZnByZWdzZXRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBncmVnc2V0X3QgZ3JlZ3M7CisgIGZwcmVnc2V0X3QgZnByZWdzOworICB1bnNpZ25lZCBsb25nIF9fcmVzZXJ2ZWQxWzhdOworfSBtY29udGV4dF90OworCit0eXBlZGVmIHN0cnVjdCB1Y29udGV4dCB7CisgIHVuc2lnbmVkIGxvbmcgdWNfZmxhZ3M7CisgIHN0cnVjdCB1Y29udGV4dCogdWNfbGluazsKKyAgc3RhY2tfdCB1Y19zdGFjazsKKyAgbWNvbnRleHRfdCB1Y19tY29udGV4dDsKKyAgc2lnc2V0X3QgdWNfc2lnbWFzazsKKyAgc3RydWN0IF9saWJjX2Zwc3RhdGUgX19mcHJlZ3NfbWVtOworfSB1Y29udGV4dF90OworCisjZW5kaWYKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfVUNPTlRFWFRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvdW4uaCBiL2xpYmMvaW5jbHVkZS9zeXMvdW4uaAppbmRleCBmODllYWQzLi42NWZmYmRjZiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy91bi5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdW4uaApAQCAtMjgsOCArMjgsNyBAQAogI2lmbmRlZiBfU1lTX1VOX0hfCiAjZGVmaW5lIF9TWVNfVU5fSF8KIAotI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KLXR5cGVkZWYgX19zYV9mYW1pbHlfdCBzYV9mYW1pbHlfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgc2FfZmFtaWx5X3Q7CiAKICNpbmNsdWRlIDxsaW51eC91bi5oPgogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3VzZXIuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdXNlci5oCmluZGV4IDlmMTFhODMuLjE4Njg0ZjEgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvdXNlci5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdXNlci5oCkBAIC0zMCwxMiArMzAsMTMgQEAKICNkZWZpbmUgX1NZU19VU0VSX0hfCiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4gLyogRm9yIFBBR0VfU0laRS4gKi8KIAogX19CRUdJTl9ERUNMUwogCiAjaWYgX19pMzg2X18KIAotc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3Qgeworc3RydWN0IHVzZXJfZnByZWdzX3N0cnVjdCB7CiAgIGxvbmcgY3dkOwogICBsb25nIHN3ZDsKICAgbG9uZyB0d2Q7CkBAIC04Miw3ICs4Myw3IEBACiBzdHJ1Y3QgdXNlciB7CiAgIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHJlZ3M7CiAgIGludCB1X2ZwdmFsaWQ7Ci0gIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IGkzODc7CisgIHN0cnVjdCB1c2VyX2ZwcmVnc19zdHJ1Y3QgaTM4NzsKICAgdW5zaWduZWQgbG9uZyBpbnQgdV90c2l6ZTsKICAgdW5zaWduZWQgbG9uZyBpbnQgdV9kc2l6ZTsKICAgdW5zaWduZWQgbG9uZyBpbnQgdV9zc2l6ZTsKQEAgLTkxLDcgKzkyLDcgQEAKICAgbG9uZyBpbnQgc2lnbmFsOwogICBpbnQgcmVzZXJ2ZWQ7CiAgIHVuc2lnbmVkIGxvbmcgdV9hcjA7Ci0gIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0KiB1X2Zwc3RhdGU7CisgIHN0cnVjdCB1c2VyX2ZwcmVnc19zdHJ1Y3QqIHVfZnBzdGF0ZTsKICAgdW5zaWduZWQgbG9uZyBtYWdpYzsKICAgY2hhciB1X2NvbW1bMzJdOwogICBpbnQgdV9kZWJ1Z3JlZ1s4XTsKQEAgLTk5LDEwICsxMDAsMTAgQEAKIAogI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQogCi1zdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCB7CitzdHJ1Y3QgdXNlcl9mcHJlZ3Nfc3RydWN0IHsKICAgdW5zaWduZWQgc2hvcnQgY3dkOwogICB1bnNpZ25lZCBzaG9ydCBzd2Q7Ci0gIHVuc2lnbmVkIHNob3J0IHR3ZDsKKyAgdW5zaWduZWQgc2hvcnQgZnR3OwogICB1bnNpZ25lZCBzaG9ydCBmb3A7CiAgIF9fdTY0IHJpcDsKICAgX191NjQgcmRwOwpAQCAtMTQ1LDcgKzE0Niw3IEBACiAgIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHJlZ3M7CiAgIGludCB1X2ZwdmFsaWQ7CiAgIGludCBwYWQwOwotICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBpMzg3OworICBzdHJ1Y3QgdXNlcl9mcHJlZ3Nfc3RydWN0IGkzODc7CiAgIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CiAgIHVuc2lnbmVkIGxvbmcgaW50IHVfZHNpemU7CiAgIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CkBAIC0xNTUsNyArMTU2LDcgQEAKICAgaW50IHJlc2VydmVkOwogICBpbnQgcGFkMTsKICAgdW5zaWduZWQgbG9uZyB1X2FyMDsKLSAgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QqIHVfZnBzdGF0ZTsKKyAgc3RydWN0IHVzZXJfZnByZWdzX3N0cnVjdCogdV9mcHN0YXRlOwogICB1bnNpZ25lZCBsb25nIG1hZ2ljOwogICBjaGFyIHVfY29tbVszMl07CiAgIHVuc2lnbmVkIGxvbmcgdV9kZWJ1Z3JlZ1s4XTsKQEAgLTE4MSw3ICsxODIsNyBAQAogCiAjZWxpZiBkZWZpbmVkKF9fYXJtX18pCiAKLXN0cnVjdCB1c2VyX2ZwIHsKK3N0cnVjdCB1c2VyX2ZwcmVncyB7CiAgIHN0cnVjdCBmcF9yZWcgewogICAgIHVuc2lnbmVkIGludCBzaWduMToxOwogICAgIHVuc2lnbmVkIGludCB1bnVzZWQ6MTU7CkBAIC0xOTYsNiArMTk3LDkgQEAKICAgdW5zaWduZWQgY2hhciBmdHlwZVs4XTsKICAgdW5zaWduZWQgaW50IGluaXRfZmxhZzsKIH07CitzdHJ1Y3QgdXNlcl9yZWdzIHsKKyAgdW5zaWduZWQgbG9uZyB1cmVnc1sxOF07Cit9Owogc3RydWN0IHVzZXJfdmZwIHsKICAgdW5zaWduZWQgbG9uZyBsb25nIGZwcmVnc1szMl07CiAgIHVuc2lnbmVkIGxvbmcgZnBzY3I7CkBAIC0yMDYsNyArMjEwLDcgQEAKICAgdW5zaWduZWQgbG9uZyBmcGluc3QyOwogfTsKIHN0cnVjdCB1c2VyIHsKLSAgc3RydWN0IHB0X3JlZ3MgcmVnczsKKyAgc3RydWN0IHVzZXJfcmVncyByZWdzOwogICBpbnQgdV9mcHZhbGlkOwogICB1bnNpZ25lZCBsb25nIGludCB1X3RzaXplOwogICB1bnNpZ25lZCBsb25nIGludCB1X2RzaXplOwpAQCAtMjE1LDEyICsyMTksMTIgQEAKICAgdW5zaWduZWQgbG9uZyBzdGFydF9zdGFjazsKICAgbG9uZyBpbnQgc2lnbmFsOwogICBpbnQgcmVzZXJ2ZWQ7Ci0gIHVuc2lnbmVkIGxvbmcgdV9hcjA7CisgIHN0cnVjdCB1c2VyX3JlZ3MqIHVfYXIwOwogICB1bnNpZ25lZCBsb25nIG1hZ2ljOwogICBjaGFyIHVfY29tbVszMl07CiAgIGludCB1X2RlYnVncmVnWzhdOwotICBzdHJ1Y3QgdXNlcl9mcCB1X2ZwOwotICBzdHJ1Y3QgdXNlcl9mcF9zdHJ1Y3QqIHVfZnAwOworICBzdHJ1Y3QgdXNlcl9mcHJlZ3MgdV9mcDsKKyAgc3RydWN0IHVzZXJfZnByZWdzKiB1X2ZwMDsKIH07CiAKICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3Zmcy5oIGIvbGliYy9pbmNsdWRlL3N5cy92ZnMuaAppbmRleCAxMGZlNTAyLi41MzU4ZmZiIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3Zmcy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdmZzLmgKQEAgLTM4LDU4ICszOCw3NiBAQAogdHlwZWRlZiBzdHJ1Y3QgeyBpbnQgX192YWxbMl07IH0gX19mc2lkX3Q7CiB0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKIAotI2lmIGRlZmluZWQoX19MUDY0X18pCi1zdHJ1Y3Qgc3RhdGZzIHsKLSAgdWludDY0X3QgZl90eXBlOwotICB1aW50NjRfdCBmX2JzaXplOwotICB1aW50NjRfdCBmX2Jsb2NrczsKLSAgdWludDY0X3QgZl9iZnJlZTsKLSAgdWludDY0X3QgZl9iYXZhaWw7Ci0gIHVpbnQ2NF90IGZfZmlsZXM7Ci0gIHVpbnQ2NF90IGZfZmZyZWU7Ci0gIGZzaWRfdCBmX2ZzaWQ7Ci0gIHVpbnQ2NF90IGZfbmFtZWxlbjsKLSAgdWludDY0X3QgZl9mcnNpemU7Ci0gIHVpbnQ2NF90IGZfZmxhZ3M7Ci0gIHVpbnQ2NF90IGZfc3BhcmVbNF07Ci19OworI2lmIGRlZmluZWQoX19hYXJjaDY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyNkZWZpbmUgX19TVEFURlM2NF9CT0RZIFwKKyAgdWludDY0X3QgZl90eXBlOyBcCisgIHVpbnQ2NF90IGZfYnNpemU7IFwKKyAgdWludDY0X3QgZl9ibG9ja3M7IFwKKyAgdWludDY0X3QgZl9iZnJlZTsgXAorICB1aW50NjRfdCBmX2JhdmFpbDsgXAorICB1aW50NjRfdCBmX2ZpbGVzOyBcCisgIHVpbnQ2NF90IGZfZmZyZWU7IFwKKyAgZnNpZF90IGZfZnNpZDsgXAorICB1aW50NjRfdCBmX25hbWVsZW47IFwKKyAgdWludDY0X3QgZl9mcnNpemU7IFwKKyAgdWludDY0X3QgZl9mbGFnczsgXAorICB1aW50NjRfdCBmX3NwYXJlWzRdOyBcCisKKyNlbGlmIGRlZmluZWQoX19taXBzX18pICYmIGRlZmluZWQoX19MUDY0X18pCisvKiA2NC1iaXQgTUlQUy4gKi8KKyNkZWZpbmUgX19TVEFURlM2NF9CT0RZIFwKKyAgdWludDY0X3QgZl90eXBlOyBcCisgIHVpbnQ2NF90IGZfYnNpemU7IFwKKyAgdWludDY0X3QgZl9mcnNpemU7IC8qIEZyYWdtZW50IHNpemUgLSB1bnN1cHBvcnRlZC4gKi8gXAorICB1aW50NjRfdCBmX2Jsb2NrczsgXAorICB1aW50NjRfdCBmX2JmcmVlOyBcCisgIHVpbnQ2NF90IGZfZmlsZXM7IFwKKyAgdWludDY0X3QgZl9mZnJlZTsgXAorICB1aW50NjRfdCBmX2JhdmFpbDsgXAorICBmc2lkX3QgZl9mc2lkOyBcCisgIHVpbnQ2NF90IGZfbmFtZWxlbjsgXAorICB1aW50NjRfdCBmX2ZsYWdzOyBcCisgIHVpbnQ2NF90IGZfc3BhcmVbNV07IFwKKwogI2VsaWYgZGVmaW5lZChfX21pcHNfXykKIC8qIDMyLWJpdCBNSVBTIChjb3JyZXNwb25kcyB0byB0aGUga2VybmVsJ3Mgc3RhdGZzNjQgdHlwZSkuICovCi1zdHJ1Y3Qgc3RhdGZzIHsKLSAgdWludDMyX3QgZl90eXBlOwotICB1aW50MzJfdCBmX2JzaXplOwotICB1aW50MzJfdCBmX2Zyc2l6ZTsKLSAgdWludDMyX3QgX19wYWQ7Ci0gIHVpbnQ2NF90IGZfYmxvY2tzOwotICB1aW50NjRfdCBmX2JmcmVlOwotICB1aW50NjRfdCBmX2ZpbGVzOwotICB1aW50NjRfdCBmX2ZmcmVlOwotICB1aW50NjRfdCBmX2JhdmFpbDsKLSAgZnNpZF90IGZfZnNpZDsKLSAgdWludDMyX3QgZl9uYW1lbGVuOwotICB1aW50MzJfdCBmX2ZsYWdzOwotICB1aW50MzJfdCBmX3NwYXJlWzVdOwotfTsKKyNkZWZpbmUgX19TVEFURlM2NF9CT0RZIFwKKyAgdWludDMyX3QgZl90eXBlOyBcCisgIHVpbnQzMl90IGZfYnNpemU7IFwKKyAgdWludDMyX3QgZl9mcnNpemU7IFwKKyAgdWludDMyX3QgX19wYWQ7IFwKKyAgdWludDY0X3QgZl9ibG9ja3M7IFwKKyAgdWludDY0X3QgZl9iZnJlZTsgXAorICB1aW50NjRfdCBmX2ZpbGVzOyBcCisgIHVpbnQ2NF90IGZfZmZyZWU7IFwKKyAgdWludDY0X3QgZl9iYXZhaWw7IFwKKyAgZnNpZF90IGZfZnNpZDsgXAorICB1aW50MzJfdCBmX25hbWVsZW47IFwKKyAgdWludDMyX3QgZl9mbGFnczsgXAorICB1aW50MzJfdCBmX3NwYXJlWzVdOyBcCisKICNlbHNlCiAvKiAzMi1iaXQgQVJNIG9yIHg4NiAoY29ycmVzcG9uZHMgdG8gdGhlIGtlcm5lbCdzIHN0YXRmczY0IHR5cGUpLiAqLwotc3RydWN0IHN0YXRmcyB7Ci0gIHVpbnQzMl90IGZfdHlwZTsKLSAgdWludDMyX3QgZl9ic2l6ZTsKLSAgdWludDY0X3QgZl9ibG9ja3M7Ci0gIHVpbnQ2NF90IGZfYmZyZWU7Ci0gIHVpbnQ2NF90IGZfYmF2YWlsOwotICB1aW50NjRfdCBmX2ZpbGVzOwotICB1aW50NjRfdCBmX2ZmcmVlOwotICBmc2lkX3QgZl9mc2lkOwotICB1aW50MzJfdCBmX25hbWVsZW47Ci0gIHVpbnQzMl90IGZfZnJzaXplOwotICB1aW50MzJfdCBmX2ZsYWdzOwotICB1aW50MzJfdCBmX3NwYXJlWzRdOwotfTsKKyNkZWZpbmUgX19TVEFURlM2NF9CT0RZIFwKKyAgdWludDMyX3QgZl90eXBlOyBcCisgIHVpbnQzMl90IGZfYnNpemU7IFwKKyAgdWludDY0X3QgZl9ibG9ja3M7IFwKKyAgdWludDY0X3QgZl9iZnJlZTsgXAorICB1aW50NjRfdCBmX2JhdmFpbDsgXAorICB1aW50NjRfdCBmX2ZpbGVzOyBcCisgIHVpbnQ2NF90IGZfZmZyZWU7IFwKKyAgZnNpZF90IGZfZnNpZDsgXAorICB1aW50MzJfdCBmX25hbWVsZW47IFwKKyAgdWludDMyX3QgZl9mcnNpemU7IFwKKyAgdWludDMyX3QgZl9mbGFnczsgXAorICB1aW50MzJfdCBmX3NwYXJlWzRdOyBcCisKICNlbmRpZgogCi0vKiBTb3VyY2UgY29tcGF0aWJpbGl0eSB3aXRoIGdsaWJjLiAqLwotI2RlZmluZSBzdGF0ZnM2NCBzdGF0ZnMKK3N0cnVjdCBzdGF0ZnMgeyBfX1NUQVRGUzY0X0JPRFkgfTsKK3N0cnVjdCBzdGF0ZnM2NCB7IF9fU1RBVEZTNjRfQk9EWSB9OworCisjdW5kZWYgX19TVEFURlM2NF9CT0RZCiAKIC8qIERlY2xhcmUgdGhhdCB3ZSBoYXZlIHRoZSBmX25hbWVsZW4sIGZfZnJzaXplLCBhbmQgZl9mbGFncyBmaWVsZHMuICovCiAjZGVmaW5lIF9TVEFURlNfRl9OQU1FTEVOCkBAIC0xNDIsNyArMTYwLDkgQEAKICNkZWZpbmUgIF9YSUFGU19TVVBFUl9NQUdJQyAgICAweDAxMkZEMTZECiAKIGV4dGVybiBpbnQgc3RhdGZzKGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdGZzKikgX19ub25udWxsKCgxLCAyKSk7CitleHRlcm4gaW50IHN0YXRmczY0KGNvbnN0IGNoYXIqLCBzdHJ1Y3Qgc3RhdGZzNjQqKSBfX25vbm51bGwoKDEsIDIpKTsKIGV4dGVybiBpbnQgZnN0YXRmcyhpbnQsIHN0cnVjdCBzdGF0ZnMqKSBfX25vbm51bGwoKDIpKTsKK2V4dGVybiBpbnQgZnN0YXRmczY0KGludCwgc3RydWN0IHN0YXRmczY0KikgX19ub25udWxsKCgyKSk7CiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvd2FpdC5oIGIvbGliYy9pbmNsdWRlL3N5cy93YWl0LmgKaW5kZXggYjMwYjdlYy4uOGQ5YTVmNiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy93YWl0LmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy93YWl0LmgKQEAgLTQ3LDcgKzQ3LDYgQEAKIAogZXh0ZXJuIHBpZF90ICB3YWl0KGludCAqKTsKIGV4dGVybiBwaWRfdCAgd2FpdHBpZChwaWRfdCwgaW50ICosIGludCk7Ci1leHRlcm4gcGlkX3QgIHdhaXQzKGludCAqLCBpbnQsIHN0cnVjdCBydXNhZ2UgKik7CiBleHRlcm4gcGlkX3QgIHdhaXQ0KHBpZF90LCBpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICopOwogCiAvKiBQb3NpeCBzdGF0ZXMgdGhhdCBpZHR5cGVfdCBzaG91bGQgYmUgYW4gZW51bWVyYXRpb24gdHlwZSwgYnV0CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzbG9nLmggYi9saWJjL2luY2x1ZGUvc3lzbG9nLmgKaW5kZXggNDY3N2MxNC4uY2JjZWFiMiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5c2xvZy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXNsb2cuaApAQCAtMjUsNiArMjUsNyBAQAogICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqLworCiAjaWZuZGVmIF9TWVNMT0dfSAogI2RlZmluZSBfU1lTTE9HX0gKIApAQCAtMzQsODIgKzM1LDYwIEBACiAKIF9fQkVHSU5fREVDTFMKIAotLyogQWxlcnQgbGV2ZWxzICovCi0jZGVmaW5lIExPR19FTUVSRwkwCi0jZGVmaW5lIExPR19BTEVSVAkxCi0jZGVmaW5lIExPR19DUklUCTIKLSNkZWZpbmUgTE9HX0VSUgkJMwotI2RlZmluZSBMT0dfV0FSTklORwk0Ci0jZGVmaW5lIExPR19OT1RJQ0UJNQotI2RlZmluZSBMT0dfSU5GTwk2Ci0jZGVmaW5lIExPR19ERUJVRwk3CisvKiBQcmlvcml0aWVzIGFyZSB0cmFuc2xhdGVkIHRvIEFuZHJvaWQgbG9nIHByaW9yaXRpZXMgYXMgc2hvd24uICovCisjZGVmaW5lIExPR19FTUVSRyAgIDAgLyogRVJST1IgKi8KKyNkZWZpbmUgTE9HX0FMRVJUICAgMSAvKiBFUlJPUiAqLworI2RlZmluZSBMT0dfQ1JJVCAgICAyIC8qIEVSUk9SICovCisjZGVmaW5lIExPR19FUlIgICAgIDMgLyogRVJST1IgKi8KKyNkZWZpbmUgTE9HX1dBUk5JTkcgNCAvKiBXQVJOICovCisjZGVmaW5lIExPR19OT1RJQ0UgIDUgLyogSU5GTyAqLworI2RlZmluZSBMT0dfSU5GTyAgICA2IC8qIElORk8gKi8KKyNkZWZpbmUgTE9HX0RFQlVHICAgNyAvKiBERUJVRyAqLwogCi0jZGVmaW5lIExPR19QUklNQVNLCTcKLSNkZWZpbmUgTE9HX1BSSSh4KQkoKHgpICYgTE9HX1BSSU1BU0spCisjZGVmaW5lIExPR19QUklNQVNLIDcKKyNkZWZpbmUgTE9HX1BSSSh4KSAoKHgpICYgTE9HX1BSSU1BU0spCiAKKy8qIEZhY2lsaXRpZXMgYXJlIGN1cnJlbnRseSBpZ25vcmVkIG9uIEFuZHJvaWQuICovCisjZGVmaW5lIExPR19LRVJOICAgICAwMDAwCisjZGVmaW5lIExPR19VU0VSICAgICAwMDEwCisjZGVmaW5lIExPR19NQUlMICAgICAwMDIwCisjZGVmaW5lIExPR19EQUVNT04gICAwMDMwCisjZGVmaW5lIExPR19BVVRIICAgICAwMDQwCisjZGVmaW5lIExPR19TWVNMT0cgICAwMDUwCisjZGVmaW5lIExPR19MUFIgICAgICAwMDYwCisjZGVmaW5lIExPR19ORVdTICAgICAwMDcwCisjZGVmaW5lIExPR19VVUNQICAgICAwMTAwCisjZGVmaW5lIExPR19DUk9OICAgICAwMTEwCisjZGVmaW5lIExPR19BVVRIUFJJViAwMTIwCisjZGVmaW5lIExPR19GVFAgICAgICAwMTMwCisjZGVmaW5lIExPR19MT0NBTDAgICAwMjAwCisjZGVmaW5lIExPR19MT0NBTDEgICAwMjEwCisjZGVmaW5lIExPR19MT0NBTDIgICAwMjIwCisjZGVmaW5lIExPR19MT0NBTDMgICAwMjMwCisjZGVmaW5lIExPR19MT0NBTDQgICAwMjQwCisjZGVmaW5lIExPR19MT0NBTDUgICAwMjUwCisjZGVmaW5lIExPR19MT0NBTDYgICAwMjYwCisjZGVmaW5lIExPR19MT0NBTDcgICAwMjcwCiAKLS8qIEZhY2lsaXRpZXM7IG5vdCBhY3R1YWxseSB1c2VkICovCi0jZGVmaW5lIExPR19LRVJOCTAwMDAKLSNkZWZpbmUgTE9HX1VTRVIJMDAxMAotI2RlZmluZSBMT0dfTUFJTAkwMDIwCi0jZGVmaW5lIExPR19EQUVNT04JMDAzMAotI2RlZmluZSBMT0dfQVVUSAkwMDQwCi0jZGVmaW5lIExPR19TWVNMT0cJMDA1MAotI2RlZmluZSBMT0dfTFBSCQkwMDYwCi0jZGVmaW5lIExPR19ORVdTCTAwNzAKLSNkZWZpbmUgTE9HX1VVQ1AJMDEwMAotI2RlZmluZSBMT0dfQ1JPTgkwMTEwCi0jZGVmaW5lIExPR19BVVRIUFJJVgkwMTIwCi0jZGVmaW5lIExPR19GVFAJCTAxMzAKLSNkZWZpbmUgTE9HX0xPQ0FMMAkwMjAwCi0jZGVmaW5lIExPR19MT0NBTDEJMDIxMAotI2RlZmluZSBMT0dfTE9DQUwyCTAyMjAKLSNkZWZpbmUgTE9HX0xPQ0FMMwkwMjMwCi0jZGVmaW5lIExPR19MT0NBTDQJMDI0MAotI2RlZmluZSBMT0dfTE9DQUw1CTAyNTAKLSNkZWZpbmUgTE9HX0xPQ0FMNgkwMjYwCi0jZGVmaW5lIExPR19MT0NBTDcJMDI3MAorI2RlZmluZSBMT0dfRkFDTUFTSyAwMTc3MAorI2RlZmluZSBMT0dfRkFDKHgpICgoKHgpID4+IDMpICYgKExPR19GQUNNQVNLID4+IDMpKQogCi0jZGVmaW5lIExPR19GQUNNQVNLCTAxNzcwCi0jZGVmaW5lIExPR19GQUMoeCkJKCgoeCkgPj4gMykgJiAoTE9HX0ZBQ01BU0sgPj4gMykpCisjZGVmaW5lIExPR19NQVNLKHByaSkgKDEgPDwgKHByaSkpCisjZGVmaW5lIExPR19VUFRPKHByaSkgKCgxIDw8ICgocHJpKSsxKSkgLSAxKQogCi0jZGVmaW5lCUxPR19NQVNLKHByaSkJKDEgPDwgKHByaSkpCQkvKiBtYXNrIGZvciBvbmUgcHJpb3JpdHkgKi8KLSNkZWZpbmUJTE9HX1VQVE8ocHJpKQkoKDEgPDwgKChwcmkpKzEpKSAtIDEpCS8qIGFsbCBwcmlvcml0aWVzIHRocm91Z2ggcHJpICovCisvKiBvcGVubG9nKDMpIGZsYWdzIGFyZSBjdXJyZW50bHkgaWdub3JlZCBvbiBBbmRyb2lkLiAqLworI2RlZmluZSBMT0dfUElEICAgIDB4MDEKKyNkZWZpbmUgTE9HX0NPTlMgICAweDAyCisjZGVmaW5lIExPR19PREVMQVkgMHgwNAorI2RlZmluZSBMT0dfTkRFTEFZIDB4MDgKKyNkZWZpbmUgTE9HX05PV0FJVCAweDEwCisjZGVmaW5lIExPR19QRVJST1IgMHgyMAogCi0vKiBvcGVubG9nKCkgZmxhZ3M7IG9ubHkgTE9HX1BJRCBhbmQgTE9HX1BFUlJPUiBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgICAgICAgIExPR19QSUQgICAgICAgICAweDAxICAgIC8qIGluY2x1ZGUgcGlkIHdpdGggbWVzc2FnZSAqLwotI2RlZmluZSAgICAgICAgTE9HX0NPTlMgICAgICAgIDB4MDIgICAgLyogd3JpdGUgdG8gY29uc29sZSBvbiBsb2dnZXIgZXJyb3IgKi8KLSNkZWZpbmUgICAgICAgIExPR19PREVMQVkgICAgICAweDA0ICAgIC8qIGRlbGF5IGNvbm5lY3Rpb24gdW50aWwgc3lzbG9nKCkgKi8KLSNkZWZpbmUgICAgICAgIExPR19OREVMQVkgICAgICAweDA4ICAgIC8qIG9wZW4gY29ubmVjdGlvbiBpbW1lZGlhdGVseSAqLwotI2RlZmluZSAgICAgICAgTE9HX05PV0FJVCAgICAgIDB4MTAgICAgLyogd2FpdCBmb3IgY2hpbGQgcHJvY2Vzc2VzICh1bnVzZWQgb24gbGludXgpICovCi0jZGVmaW5lICAgICAgICBMT0dfUEVSUk9SICAgICAgMHgyMCAgICAvKiBhZGRpdGlvbmFsIGxvZ2dpbmcgdG8gc3RkZXJyICovCi0KLS8qIEJJT05JQzogdGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgZnJvbSBPcGVuQlNEJ3Mgc3lzL3N5c2xvZy5oCi0gKi8KLXN0cnVjdCBzeXNsb2dfZGF0YSB7Ci0JaW50CWxvZ19maWxlOwotICAgICAgICBpbnQJY29ubmVjdGVkOwotICAgICAgICBpbnQJb3BlbmVkOwotICAgICAgICBpbnQJbG9nX3N0YXQ7Ci0gICAgICAgIGNvbnN0IGNoYXIgCSpsb2dfdGFnOwotICAgICAgICBpbnQgCWxvZ19mYWM7Ci0gICAgICAgIGludCAJbG9nX21hc2s7Ci19OwotCi0jZGVmaW5lIFNZU0xPR19EQVRBX0lOSVQgey0xLCAwLCAwLCAwLCAoY29uc3QgY2hhciAqKTAsIExPR19VU0VSLCAweGZmfQotCi0jZGVmaW5lIF9QQVRIX0xPRyAgIi9kZXYvc3lzbG9nIgotCi1leHRlcm4gdm9pZAljbG9zZWxvZyh2b2lkKTsKLWV4dGVybiB2b2lkCW9wZW5sb2coY29uc3QgY2hhciAqLCBpbnQsIGludCk7Ci1leHRlcm4gaW50CXNldGxvZ21hc2soaW50KTsKLWV4dGVybiB2b2lkCXN5c2xvZyhpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKSBfX3ByaW50Zmxpa2UoMiwgMyk7Ci1leHRlcm4gdm9pZAl2c3lzbG9nKGludCwgY29uc3QgY2hhciAqLCB2YV9saXN0KSBfX3ByaW50Zmxpa2UoMiwgMCk7Ci1leHRlcm4gdm9pZAljbG9zZWxvZ19yKHN0cnVjdCBzeXNsb2dfZGF0YSAqKTsKLWV4dGVybiB2b2lkCW9wZW5sb2dfcihjb25zdCBjaGFyICosIGludCwgaW50LCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKik7Ci1leHRlcm4gaW50CXNldGxvZ21hc2tfcihpbnQsIHN0cnVjdCBzeXNsb2dfZGF0YSAqKTsKLWV4dGVybiB2b2lkCXN5c2xvZ19yKGludCwgc3RydWN0IHN5c2xvZ19kYXRhICosIGNvbnN0IGNoYXIgKiwgLi4uKSBfX3ByaW50Zmxpa2UoMywgNCk7Ci1leHRlcm4gdm9pZAl2c3lzbG9nX3IoaW50LCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KSBfX3ByaW50Zmxpa2UoMywgMCk7Cit2b2lkIGNsb3NlbG9nKHZvaWQpOwordm9pZCBvcGVubG9nKGNvbnN0IGNoYXIqLCBpbnQsIGludCk7CitpbnQgc2V0bG9nbWFzayhpbnQpOwordm9pZCBzeXNsb2coaW50LCBjb25zdCBjaGFyKiwgLi4uKSBfX3ByaW50Zmxpa2UoMiwgMyk7Cit2b2lkIHZzeXNsb2coaW50LCBjb25zdCBjaGFyKiwgdmFfbGlzdCkgX19wcmludGZsaWtlKDIsIDApOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvdGVybWlvcy5oIGIvbGliYy9pbmNsdWRlL3Rlcm1pb3MuaAppbmRleCAwZDQ0MzU1Li5iOTY4NWNhIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvdGVybWlvcy5oCisrKyBiL2xpYmMvaW5jbHVkZS90ZXJtaW9zLmgKQEAgLTMxLDg3ICszMSwyMyBAQAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KIAogX19CRUdJTl9ERUNMUwogCi0vKiBSZWRlZmluZSB0aGVzZSB0byBtYXRjaCB0aGVpciBpb2N0bCBudW1iZXIgKi8KLSN1bmRlZiAgVENTQU5PVwotI2RlZmluZSBUQ1NBTk9XICAgIFRDU0VUUwotCi0jdW5kZWYgIFRDU0FEUkFJTgotI2RlZmluZSBUQ1NBRFJBSU4gIFRDU0VUU1cKLQotI3VuZGVmICBUQ1NBRkxVU0gKLSNkZWZpbmUgVENTQUZMVVNIICBUQ1NFVFNGCi0KLXN0YXRpYyBfX2lubGluZV9fIGludCB0Y2dldGF0dHIoaW50IGZkLCBzdHJ1Y3QgdGVybWlvcyAqcykKLXsKLSAgICByZXR1cm4gaW9jdGwoZmQsIFRDR0VUUywgcyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCB0Y3NldGF0dHIoaW50IGZkLCBpbnQgX19vcHQsIGNvbnN0IHN0cnVjdCB0ZXJtaW9zICpzKQotewotICAgIHJldHVybiBpb2N0bChmZCwgX19vcHQsICh2b2lkICopcyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCB0Y2Zsb3coaW50IGZkLCBpbnQgYWN0aW9uKQotewotICAgIHJldHVybiBpb2N0bChmZCwgVENYT05DLCAodm9pZCAqKShpbnRwdHJfdClhY3Rpb24pOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNmbHVzaChpbnQgZmQsIGludCBfX3F1ZXVlKQotewotICAgIHJldHVybiBpb2N0bChmZCwgVENGTFNILCAodm9pZCAqKShpbnRwdHJfdClfX3F1ZXVlKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IHRjZHJhaW4oaW50IGZkKQotewotICAgIHJldHVybiBpb2N0bChmZCwgVENTQlJLLCAodm9pZCAqKShpbnRwdHJfdCkxKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gcGlkX3QgdGNnZXRzaWQoaW50IGZkKQotewotICAgIHBpZF90IF9waWQ7Ci0gICAgcmV0dXJuIGlvY3RsKGZkLCBUSU9DR1NJRCwgJl9waWQpID8gKHBpZF90KS0xIDogX3BpZDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IHRjc2VuZGJyZWFrKGludCBmZCwgaW50IF9fZHVyYXRpb24pCi17Ci0gICAgcmV0dXJuIGlvY3RsKGZkLCBUQ1NCUktQLCAodm9pZCAqKSh1aW50cHRyX3QpX19kdXJhdGlvbik7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHNwZWVkX3QgY2ZnZXRvc3BlZWQoY29uc3Qgc3RydWN0IHRlcm1pb3MgKnMpCi17Ci0gICAgcmV0dXJuIChzcGVlZF90KShzLT5jX2NmbGFnICYgQ0JBVUQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgY2ZzZXRvc3BlZWQoc3RydWN0IHRlcm1pb3MgKnMsIHNwZWVkX3QgIHNwZWVkKQotewotICAgIHMtPmNfY2ZsYWcgPSAocy0+Y19jZmxhZyAmIH5DQkFVRCkgfCAoc3BlZWQgJiBDQkFVRCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHNwZWVkX3QgY2ZnZXRpc3BlZWQoY29uc3Qgc3RydWN0IHRlcm1pb3MgKnMpCi17Ci0gICAgcmV0dXJuIChzcGVlZF90KShzLT5jX2NmbGFnICYgQ0JBVUQpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgY2ZzZXRpc3BlZWQoc3RydWN0IHRlcm1pb3MgKnMsIHNwZWVkX3QgIHNwZWVkKQotewotICAgIHMtPmNfY2ZsYWcgPSAocy0+Y19jZmxhZyAmIH5DQkFVRCkgfCAoc3BlZWQgJiBDQkFVRCk7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNmbWFrZXJhdyhzdHJ1Y3QgdGVybWlvcyAqcykKLXsKLSAgICBzLT5jX2lmbGFnICY9IH4oSUdOQlJLfEJSS0lOVHxQQVJNUkt8SVNUUklQfElOTENSfElHTkNSfElDUk5MfElYT04pOwotICAgIHMtPmNfb2ZsYWcgJj0gfk9QT1NUOwotICAgIHMtPmNfbGZsYWcgJj0gfihFQ0hPfEVDSE9OTHxJQ0FOT058SVNJR3xJRVhURU4pOwotICAgIHMtPmNfY2ZsYWcgJj0gfihDU0laRXxQQVJFTkIpOwotICAgIHMtPmNfY2ZsYWcgfD0gQ1M4OwotfQorc3BlZWRfdCBjZmdldGlzcGVlZChjb25zdCBzdHJ1Y3QgdGVybWlvcyopOworc3BlZWRfdCBjZmdldG9zcGVlZChjb25zdCBzdHJ1Y3QgdGVybWlvcyopOwordm9pZCBjZm1ha2VyYXcoc3RydWN0IHRlcm1pb3MqKTsKK2ludCBjZnNldGlzcGVlZChzdHJ1Y3QgdGVybWlvcyosIHNwZWVkX3QpOworaW50IGNmc2V0b3NwZWVkKHN0cnVjdCB0ZXJtaW9zKiwgc3BlZWRfdCk7CitpbnQgY2ZzZXRzcGVlZChzdHJ1Y3QgdGVybWlvcyosIHNwZWVkX3QpOworaW50IHRjZHJhaW4oaW50KTsKK2ludCB0Y2Zsb3coaW50LCBpbnQpOworaW50IHRjZmx1c2goaW50LCBpbnQpOworaW50IHRjZ2V0YXR0cihpbnQsIHN0cnVjdCB0ZXJtaW9zKik7CitwaWRfdCB0Y2dldHNpZChpbnQpOworaW50IHRjc2VuZGJyZWFrKGludCwgaW50KTsKK2ludCB0Y3NldGF0dHIoaW50LCBpbnQsIGNvbnN0IHN0cnVjdCB0ZXJtaW9zKik7CiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS90aW1lLmggYi9saWJjL2luY2x1ZGUvdGltZS5oCmluZGV4IDNmMjA0N2MuLjM0YTUzYjIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS90aW1lLmgKKysrIGIvbGliYy9pbmNsdWRlL3RpbWUuaApAQCAtMzEsMTQgKzMxLDE1IEBACiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHhsb2NhbGUuaD4KIAogX19CRUdJTl9ERUNMUwogCiAjZGVmaW5lIENMT0NLU19QRVJfU0VDIDEwMDAwMDAKIAotZXh0ZXJuIGNoYXIqIHR6bmFtZVtdOwotZXh0ZXJuIGludCBkYXlsaWdodDsKLWV4dGVybiBsb25nIGludCB0aW1lem9uZTsKK2V4dGVybiBjaGFyKiB0em5hbWVbXSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGludCBkYXlsaWdodCBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lIF9fTElCQ19BQklfUFVCTElDX187CiAKIHN0cnVjdCBzaWdldmVudDsKIApAQCAtNTgsNDYgKzU5LDQ0IEBACiAKICNkZWZpbmUgVE1fWk9ORSB0bV96b25lCiAKLWV4dGVybiB0aW1lX3QgdGltZSh0aW1lX3QqKTsKLWV4dGVybiBpbnQgbmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyosIHN0cnVjdCB0aW1lc3BlYyopOworZXh0ZXJuIHRpbWVfdCB0aW1lKHRpbWVfdCopIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gaW50IG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMqLCBzdHJ1Y3QgdGltZXNwZWMqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogCi1leHRlcm4gY2hhciogc3RydG90aW1ldmFsKGNvbnN0IGNoYXIqLCBzdHJ1Y3QgdGltZXZhbCopOworZXh0ZXJuIGNoYXIqIGFzY3RpbWUoY29uc3Qgc3RydWN0IHRtKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiBjaGFyKiBhc2N0aW1lX3IoY29uc3Qgc3RydWN0IHRtKiwgY2hhciopIF9fTElCQ19BQklfUFVCTElDX187CiAKLWV4dGVybiBjaGFyKiBhc2N0aW1lKGNvbnN0IHN0cnVjdCB0bSopOwotZXh0ZXJuIGNoYXIqIGFzY3RpbWVfcihjb25zdCBzdHJ1Y3QgdG0qLCBjaGFyKik7CitleHRlcm4gZG91YmxlIGRpZmZ0aW1lKHRpbWVfdCwgdGltZV90KSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIHRpbWVfdCBta3RpbWUoc3RydWN0IHRtKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKIAotZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSh0aW1lX3QsIHRpbWVfdCk7Ci1leHRlcm4gdGltZV90IG1rdGltZShzdHJ1Y3QgdG0qKTsKK2V4dGVybiBzdHJ1Y3QgdG0qIGxvY2FsdGltZShjb25zdCB0aW1lX3QqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIHN0cnVjdCB0bSogbG9jYWx0aW1lX3IoY29uc3QgdGltZV90Kiwgc3RydWN0IHRtKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKIAotZXh0ZXJuIHN0cnVjdCB0bSogbG9jYWx0aW1lKGNvbnN0IHRpbWVfdCopOwotZXh0ZXJuIHN0cnVjdCB0bSogbG9jYWx0aW1lX3IoY29uc3QgdGltZV90Kiwgc3RydWN0IHRtKik7CitleHRlcm4gc3RydWN0IHRtKiBnbXRpbWUoY29uc3QgdGltZV90KikgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiBzdHJ1Y3QgdG0qIGdtdGltZV9yKGNvbnN0IHRpbWVfdCosIHN0cnVjdCB0bSopIF9fTElCQ19BQklfUFVCTElDX187CiAKLWV4dGVybiBzdHJ1Y3QgdG0qIGdtdGltZShjb25zdCB0aW1lX3QqKTsKLWV4dGVybiBzdHJ1Y3QgdG0qIGdtdGltZV9yKGNvbnN0IHRpbWVfdCosIHN0cnVjdCB0bSopOworZXh0ZXJuIGNoYXIqIHN0cnB0aW1lKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc3RydWN0IHRtKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiBzaXplX3Qgc3RyZnRpbWUoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIGNvbnN0IHN0cnVjdCB0bSopIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gc2l6ZV90IHN0cmZ0aW1lX2woY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRtICosIGxvY2FsZV90KSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogCi1leHRlcm4gY2hhciogc3RycHRpbWUoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBzdHJ1Y3QgdG0qKTsKLWV4dGVybiBzaXplX3Qgc3RyZnRpbWUoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIGNvbnN0IHN0cnVjdCB0bSopOworZXh0ZXJuIGNoYXIqIGN0aW1lKGNvbnN0IHRpbWVfdCopIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gY2hhciogY3RpbWVfcihjb25zdCB0aW1lX3QqLCBjaGFyKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKIAotZXh0ZXJuIGNoYXIqIGN0aW1lKGNvbnN0IHRpbWVfdCopOwotZXh0ZXJuIGNoYXIqIGN0aW1lX3IoY29uc3QgdGltZV90KiwgY2hhciopOworZXh0ZXJuIHZvaWQgdHpzZXQodm9pZCkgX19MSUJDX0FCSV9QVUJMSUNfXzsKIAotZXh0ZXJuIHZvaWQgdHpzZXQodm9pZCk7CitleHRlcm4gY2xvY2tfdCBjbG9jayh2b2lkKSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogCi1leHRlcm4gY2xvY2tfdCBjbG9jayh2b2lkKTsKK2V4dGVybiBpbnQgY2xvY2tfZ2V0cmVzKGludCwgc3RydWN0IHRpbWVzcGVjKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKK2V4dGVybiBpbnQgY2xvY2tfZ2V0dGltZShpbnQsIHN0cnVjdCB0aW1lc3BlYyopIF9fTElCQ19BQklfUFVCTElDX187CiAKLWV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzKGludCwgc3RydWN0IHRpbWVzcGVjKik7Ci1leHRlcm4gaW50IGNsb2NrX2dldHRpbWUoaW50LCBzdHJ1Y3QgdGltZXNwZWMqKTsKK2V4dGVybiBpbnQgdGltZXJfY3JlYXRlKGludCwgc3RydWN0IHNpZ2V2ZW50KiwgdGltZXJfdCopIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSh0aW1lcl90KSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMqLCBzdHJ1Y3QgaXRpbWVyc3BlYyopIF9fTElCQ19BQklfUFVCTElDX187CitleHRlcm4gaW50IHRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpIF9fTElCQ19BQklfUFVCTElDX187CiAKLWV4dGVybiBpbnQgdGltZXJfY3JlYXRlKGludCwgc3RydWN0IHNpZ2V2ZW50KiwgdGltZXJfdCopOwotZXh0ZXJuIGludCB0aW1lcl9kZWxldGUodGltZXJfdCk7Ci1leHRlcm4gaW50IHRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyosIHN0cnVjdCBpdGltZXJzcGVjKik7Ci1leHRlcm4gaW50IHRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMqKTsKLWV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90KTsKLQotZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwoc3RydWN0IHRtKik7Ci1leHRlcm4gdGltZV90IHRpbWVnbShzdHJ1Y3QgdG0qKTsKLWV4dGVybiB0aW1lX3QgdGltZTJwb3NpeCh0aW1lX3QpOwotZXh0ZXJuIHRpbWVfdCBwb3NpeDJ0aW1lKHRpbWVfdCk7CisvKiBOb24tc3RhbmRhcmQgZXh0ZW5zaW9ucyB0aGF0IGFyZSBpbiB0aGUgQlNEcyBhbmQgZ2xpYmMuICovCitleHRlcm4gdGltZV90IHRpbWVsb2NhbChzdHJ1Y3QgdG0qKSBfX0xJQkNfQUJJX1BVQkxJQ19fOworZXh0ZXJuIHRpbWVfdCB0aW1lZ20oc3RydWN0IHRtKikgX19MSUJDX0FCSV9QVUJMSUNfXzsKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3RpbWU2NC5oIGIvbGliYy9pbmNsdWRlL3RpbWU2NC5oCmluZGV4IDdlYzA1YWYuLjkwNTY2OWQgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS90aW1lNjQuaAorKysgYi9saWJjL2luY2x1ZGUvdGltZTY0LmgKQEAgLTMxLDI5ICszMSwzNiBAQAogI2lmbmRlZiBUSU1FNjRfSAogI2RlZmluZSBUSU1FNjRfSAogCisjaWYgZGVmaW5lZChfX0xQNjRfXykKKworI2Vycm9yIFlvdXIgdGltZV90IGlzIGFscmVhZHkgNjQtYml0LgorCisjZWxzZQorCisvKiBMZWdhY3kgY3J1ZnQgZm9yIExQMzIgd2hlcmUgdGltZV90IHdhcyAzMi1iaXQuICovCisKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KICNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKIF9fQkVHSU5fREVDTFMKIAotdHlwZWRlZiBpbnQ2NF90ICB0aW1lNjRfdDsKK3R5cGVkZWYgaW50NjRfdCB0aW1lNjRfdDsKIAotc3RydWN0IHRtICpnbXRpbWU2NF9yIChjb25zdCB0aW1lNjRfdCAqLCBzdHJ1Y3QgdG0gKik7Ci1zdHJ1Y3QgdG0gKmxvY2FsdGltZTY0X3IgKGNvbnN0IHRpbWU2NF90ICosIHN0cnVjdCB0bSAqKTsKLXN0cnVjdCB0bSAqZ210aW1lNjQgKGNvbnN0IHRpbWU2NF90ICopOwotc3RydWN0IHRtICpsb2NhbHRpbWU2NCAoY29uc3QgdGltZTY0X3QgKik7Ci0KLWNoYXIgKmFzY3RpbWU2NCAoY29uc3Qgc3RydWN0IHRtICopOwotY2hhciAqYXNjdGltZTY0X3IgKGNvbnN0IHN0cnVjdCB0bSAqLCBjaGFyICopOwotCi1jaGFyICpjdGltZTY0IChjb25zdCB0aW1lNjRfdCopOwotY2hhciAqY3RpbWU2NF9yIChjb25zdCB0aW1lNjRfdCosIGNoYXIqKTsKLQotdGltZTY0X3QgdGltZWdtNjQgKGNvbnN0IHN0cnVjdCB0bSAqKTsKLXRpbWU2NF90IG1rdGltZTY0IChjb25zdCBzdHJ1Y3QgdG0gKik7Ci10aW1lNjRfdCB0aW1lbG9jYWw2NCAoY29uc3Qgc3RydWN0IHRtICopOworY2hhciogYXNjdGltZTY0KGNvbnN0IHN0cnVjdCB0bSopOworY2hhciogYXNjdGltZTY0X3IoY29uc3Qgc3RydWN0IHRtKiwgY2hhciopOworY2hhciogY3RpbWU2NChjb25zdCB0aW1lNjRfdCopOworY2hhciogY3RpbWU2NF9yKGNvbnN0IHRpbWU2NF90KiwgY2hhciopOworc3RydWN0IHRtKiBnbXRpbWU2NChjb25zdCB0aW1lNjRfdCopOworc3RydWN0IHRtKiBnbXRpbWU2NF9yKGNvbnN0IHRpbWU2NF90Kiwgc3RydWN0IHRtKik7CitzdHJ1Y3QgdG0qIGxvY2FsdGltZTY0KGNvbnN0IHRpbWU2NF90Kik7CitzdHJ1Y3QgdG0qIGxvY2FsdGltZTY0X3IoY29uc3QgdGltZTY0X3QqLCBzdHJ1Y3QgdG0qKTsKK3RpbWU2NF90IG1rdGltZTY0KGNvbnN0IHN0cnVjdCB0bSopOwordGltZTY0X3QgdGltZWdtNjQoY29uc3Qgc3RydWN0IHRtKik7Cit0aW1lNjRfdCB0aW1lbG9jYWw2NChjb25zdCBzdHJ1Y3QgdG0qKTsKIAogX19FTkRfREVDTFMKIAorI2VuZGlmCisKICNlbmRpZiAvKiBUSU1FNjRfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3VjaGFyLmggYi9saWJjL2luY2x1ZGUvdWNoYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWZjYjVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3VjaGFyLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9VQ0hBUl9IXworI2RlZmluZSBfVUNIQVJfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKK19fQkVHSU5fREVDTFMKKworI2RlZmluZSBfX1NURF9VVEZfMTZfXyAxCisjZGVmaW5lIF9fU1REX1VURl8zMl9fIDEKKworc2l6ZV90IGMxNnJ0b21iKGNoYXIqIF9fcmVzdHJpY3QsIGNoYXIxNl90LCBtYnN0YXRlX3QqIF9fcmVzdHJpY3QpOworc2l6ZV90IGMzMnJ0b21iKGNoYXIqIF9fcmVzdHJpY3QsIGNoYXIzMl90LCBtYnN0YXRlX3QqIF9fcmVzdHJpY3QpOworc2l6ZV90IG1icnRvYzE2KGNoYXIxNl90KiBfX3Jlc3RyaWN0LAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsCisgICAgICAgICAgICAgICAgc2l6ZV90LAorICAgICAgICAgICAgICAgIG1ic3RhdGVfdCogX19yZXN0cmljdCk7CitzaXplX3QgbWJydG9jMzIoY2hhcjMyX3QqIF9fcmVzdHJpY3QsCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19yZXN0cmljdCwKKyAgICAgICAgICAgICAgICBzaXplX3QsCisgICAgICAgICAgICAgICAgbWJzdGF0ZV90KiBfX3Jlc3RyaWN0KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9VQ0hBUl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3Vjb250ZXh0LmggYi9saWJjL2luY2x1ZGUvdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWEyOTgyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3Vjb250ZXh0LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9VQ09OVEVYVF9IXworI2RlZmluZSBfVUNPTlRFWFRfSF8KKworI2luY2x1ZGUgPHN5cy91Y29udGV4dC5oPgorCisjZW5kaWYgLyogX1VDT05URVhUX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvdW5pc3RkLmggYi9saWJjL2luY2x1ZGUvdW5pc3RkLmgKaW5kZXggMjk3NThmNS4uN2ZiYWZkZiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3VuaXN0ZC5oCisrKyBiL2xpYmMvaW5jbHVkZS91bmlzdGQuaApAQCAtNDcsMTMgKzQ3LDE0IEBACiAjZGVmaW5lIFNFRUtfQ1VSIDEKICNkZWZpbmUgU0VFS19FTkQgMgogCi1leHRlcm4gY2hhciAqKmVudmlyb247CitleHRlcm4gY2hhcioqIGVudmlyb247CisKIGV4dGVybiBfX25vcmV0dXJuIHZvaWQgX2V4aXQoaW50KTsKIAogZXh0ZXJuIHBpZF90ICBmb3JrKHZvaWQpOwogZXh0ZXJuIHBpZF90ICB2Zm9yayh2b2lkKTsKIGV4dGVybiBwaWRfdCAgZ2V0cGlkKHZvaWQpOwotZXh0ZXJuIHBpZF90ICBnZXR0aWQodm9pZCk7CitleHRlcm4gcGlkX3QgIGdldHRpZCh2b2lkKSBfX3B1cmUyOwogZXh0ZXJuIHBpZF90ICBnZXRwZ2lkKHBpZF90KTsKIGV4dGVybiBpbnQgICAgc2V0cGdpZChwaWRfdCwgcGlkX3QpOwogZXh0ZXJuIHBpZF90ICBnZXRwcGlkKHZvaWQpOwpAQCAtNjQsMTQgKzY1LDEyIEBACiAKIGV4dGVybiBpbnQgZXhlY3YoY29uc3QgY2hhciAqLCBjaGFyICogY29uc3QgKik7CiBleHRlcm4gaW50IGV4ZWN2cChjb25zdCBjaGFyICosIGNoYXIgKiBjb25zdCAqKTsKK2V4dGVybiBpbnQgZXhlY3ZwZShjb25zdCBjaGFyICosIGNoYXIgKiBjb25zdCAqLCBjaGFyICogY29uc3QgKik7CiBleHRlcm4gaW50IGV4ZWN2ZShjb25zdCBjaGFyICosIGNoYXIgKiBjb25zdCAqLCBjaGFyICogY29uc3QgKik7CiBleHRlcm4gaW50IGV4ZWNsKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogZXh0ZXJuIGludCBleGVjbHAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CiBleHRlcm4gaW50IGV4ZWNsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIAotLyogSU1QT1JUQU5UOiBTZWUgY29tbWVudCB1bmRlciA8c3lzL3ByY3RsLmg+IGFib3V0IHRoaXMgZGVjbGFyYXRpb24gKi8KLWV4dGVybiBpbnQgcHJjdGwoaW50ICBvcHRpb24sIC4uLik7Ci0KIGV4dGVybiBpbnQgbmljZShpbnQpOwogCiBleHRlcm4gaW50IHNldHVpZCh1aWRfdCk7CkBAIC05MCw3ICs4OSw2IEBACiBleHRlcm4gaW50IHNldHJlc2dpZChnaWRfdCwgZ2lkX3QsIGdpZF90KTsKIGV4dGVybiBpbnQgZ2V0cmVzdWlkKHVpZF90ICpydWlkLCB1aWRfdCAqZXVpZCwgdWlkX3QgKnN1aWQpOwogZXh0ZXJuIGludCBnZXRyZXNnaWQoZ2lkX3QgKnJnaWQsIGdpZF90ICplZ2lkLCBnaWRfdCAqc2dpZCk7Ci1leHRlcm4gaW50IGlzc2V0dWdpZCh2b2lkKTsKIGV4dGVybiBjaGFyKiBnZXRsb2dpbih2b2lkKTsKIGV4dGVybiBjaGFyKiBnZXR1c2Vyc2hlbGwodm9pZCk7CiBleHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwodm9pZCk7CkBAIC0xNjMsOCArMTYxLDYgQEAKIAogZXh0ZXJuIGludCBnZXRob3N0bmFtZShjaGFyICosIHNpemVfdCk7CiAKLWV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSh2b2lkKTsKLQogZXh0ZXJuIHZvaWQgKl9fYnJrKHZvaWQgKik7CiBleHRlcm4gaW50IGJyayh2b2lkICopOwogZXh0ZXJuIHZvaWQgKnNicmsocHRyZGlmZl90KTsKQEAgLTE3NCw3ICsxNzAsNyBAQAogZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OwogCiBleHRlcm4gaW50IGlzYXR0eShpbnQpOwotZXh0ZXJuIGNoYXIqIHR0eW5hbWUoaW50KTsKK2V4dGVybiBjaGFyKiB0dHluYW1lKGludCkgX193YXJuYXR0cigidHR5bmFtZSBpcyBub3QgdGhyZWFkLXNhZmU7IHVzZSB0dHluYW1lX3IgaW5zdGVhZCIpOwogZXh0ZXJuIGludCB0dHluYW1lX3IoaW50LCBjaGFyKiwgc2l6ZV90KTsKIAogZXh0ZXJuIGludCAgYWNjdChjb25zdCBjaGFyKiAgZmlsZXBhdGgpOwpAQCAtMTg1LDI2ICsxODEsMTcgQEAKIAogZXh0ZXJuIGludCBkYWVtb24oaW50LCBpbnQpOwogCi0vKiBBIHNwZWNpYWwgc3lzY2FsbCB0aGF0IGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBBUk0sIG5vdCB4ODYgZnVuY3Rpb24uICovCi1leHRlcm4gaW50IGNhY2hlZmx1c2gobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpOworI2lmIGRlZmluZWQoX19hcm1fXykgfHwgKGRlZmluZWQoX19taXBzX18pICYmICFkZWZpbmVkKF9fTFA2NF9fKSkKK2V4dGVybiBpbnQgY2FjaGVmbHVzaChsb25nLCBsb25nLCBsb25nKTsKKyAgICAvKiBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKCJ1c2UgX19idWlsdGluX19fY2xlYXJfY2FjaGUgaW5zdGVhZCIpKSk7ICovCisjZW5kaWYKIAogZXh0ZXJuIHBpZF90IHRjZ2V0cGdycChpbnQgZmQpOwogZXh0ZXJuIGludCAgIHRjc2V0cGdycChpbnQgZmQsIHBpZF90IF9waWQpOwogCi0jaWYgMCAvKiBNSVNTSU5HIEZST00gQklPTklDICovCi1leHRlcm4gaW50IGV4ZWN2cGUoY29uc3QgY2hhciAqLCBjaGFyICogY29uc3QgKiwgY2hhciAqIGNvbnN0ICopOwotZXh0ZXJuIGludCBleGVjbHBlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotZXh0ZXJuIGludCBnZXRmc3VpZCh1aWRfdCk7Ci1leHRlcm4gaW50IHNldGZzdWlkKHVpZF90KTsKLWV4dGVybiBpbnQgZ2V0bG9naW5fcihjaGFyKiBuYW1lLCBzaXplX3QgbmFtZXNpemUpOwotZXh0ZXJuIGludCBzZXRob3N0bmFtZShjb25zdCBjaGFyICosIHNpemVfdCk7Ci1leHRlcm4gaW50IGdldGRvbWFpbm5hbWUoY2hhciAqLCBzaXplX3QpOwotZXh0ZXJuIGludCBzZXRkb21haW5uYW1lKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKLSNlbmRpZiAvKiBNSVNTSU5HICovCi0KIC8qIFVzZWQgdG8gcmV0cnkgc3lzY2FsbHMgdGhhdCBjYW4gcmV0dXJuIEVJTlRSLiAqLwogI2RlZmluZSBURU1QX0ZBSUxVUkVfUkVUUlkoZXhwKSAoeyAgICAgICAgIFwKLSAgICB0eXBlb2YgKGV4cCkgX3JjOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX190eXBlb2ZfXyhleHApIF9yYzsgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgX3JjID0gKGV4cCk7ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoX3JjID09IC0xICYmIGVycm5vID09IEVJTlRSKTsgXApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3V0bXAuaCBiL2xpYmMvaW5jbHVkZS91dG1wLmgKaW5kZXggZmZkM2M5Mi4uZDc2NDIyNyAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3V0bXAuaAorKysgYi9saWJjL2luY2x1ZGUvdXRtcC5oCkBAIC0zNiw5ICszNiwxNSBAQAogI2RlZmluZSBfUEFUSF9XVE1QICAgICAgIi92YXIvbG9nL3d0bXAiCiAjZGVmaW5lIF9QQVRIX0xBU1RMT0cgICAiL3Zhci9sb2cvbGFzdGxvZyIKIAotI2RlZmluZQlVVF9OQU1FU0laRQk4Ci0jZGVmaW5lCVVUX0xJTkVTSVpFCTgKLSNkZWZpbmUJVVRfSE9TVFNJWkUJMTYKKyNpZmRlZiBfX0xQNjRfXworI2RlZmluZSBVVF9OQU1FU0laRSAzMgorI2RlZmluZSBVVF9MSU5FU0laRSAzMgorI2RlZmluZSBVVF9IT1NUU0laRSAyNTYKKyNlbHNlCisjZGVmaW5lIFVUX05BTUVTSVpFIDgKKyNkZWZpbmUgVVRfTElORVNJWkUgOAorI2RlZmluZSBVVF9IT1NUU0laRSAxNgorI2VuZGlmCiAKICNkZWZpbmUgVVNFUl9QUk9DRVNTIDcKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3djaGFyLmggYi9saWJjL2luY2x1ZGUvd2NoYXIuaAppbmRleCA3NmFjMDJjLi5lMGU1YzgyIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvd2NoYXIuaAorKysgYi9saWJjL2luY2x1ZGUvd2NoYXIuaApAQCAtMzQsMjEgKzM0LDIwIEBACiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPG1hbGxvYy5oPgogCi0vKiBJTVBPUlRBTlQ6IEFueSBjb2RlIHRoYXQgcmVsaWVzIG9uIHdpZGUgY2hhcmFjdGVyIHN1cHBvcnQgaXMgZXNzZW50aWFsbHkKLSAqICAgICAgICAgICAgbm9uLXBvcnRhYmxlIGFuZC9vciBicm9rZW4uIHRoZSBvbmx5IHJlYXNvbiB0aGlzIGhlYWRlciBleGlzdAotICogICAgICAgICAgICBpcyBiZWNhdXNlIEknbSByZWFsbHkgYSBuaWNlIGd1eS4gSG93ZXZlciwgSSdtIG5vdCBuaWNlIGVub3VnaAotICogICAgICAgICAgICB0byBwcm92aWRlIHlvdSB3aXRoIGEgcmVhbCBpbXBsZW1lbnRhdGlvbi4gaW5zdGVhZCB3Y2hhcl90ID09IGNoYXIKLSAqICAgICAgICAgICAgYW5kIGFsbCB3YyBmdW5jdGlvbnMgYXJlIHN0dWJzIHRvIHRoZWlyICJub3JtYWwiIGVxdWl2YWxlbnQuLi4KLSAqLworI2luY2x1ZGUgPG1hY2hpbmUvd2NoYXJfbGltaXRzLmg+CiAKIF9fQkVHSU5fREVDTFMKIAotdHlwZWRlZiBfX1dJTlRfVFlQRV9fICAgICAgICAgICB3aW50X3Q7Ci10eXBlZGVmIHN0cnVjdCB7IGludCAgZHVtbXk7IH0gIG1ic3RhdGVfdDsKK3R5cGVkZWYgX19XSU5UX1RZUEVfXyAgd2ludF90OwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50OF90IF9fc2VxWzRdOworI2lmZGVmIF9fTFA2NF9fCisgIGNoYXIgX19yZXNlcnZlZFs0XTsKKyNlbmRpZgorfSBtYnN0YXRlX3Q7CiAKLXR5cGVkZWYgZW51bSB7CitlbnVtIHsKICAgICBXQ19UWVBFX0lOVkFMSUQgPSAwLAogICAgIFdDX1RZUEVfQUxOVU0sCiAgICAgV0NfVFlQRV9BTFBIQSwKQEAgLTYzLDEyICs2Miw5IEBACiAgICAgV0NfVFlQRV9VUFBFUiwKICAgICBXQ19UWVBFX1hESUdJVCwKICAgICBXQ19UWVBFX01BWAotfSB3Y3R5cGVfdDsKK307CiAKLSNpZm5kZWYgV0NIQVJfTUFYCi0jZGVmaW5lICBXQ0hBUl9NQVggICBJTlRfTUFYCi0jZGVmaW5lICBXQ0hBUl9NSU4gICBJTlRfTUlOCi0jZW5kaWYKK3R5cGVkZWYgbG9uZyB3Y3R5cGVfdDsKIAogI2RlZmluZSAgV0VPRiAgICAgICAgKCh3aW50X3QpKC0xKSkKIApAQCAtNzcsNiArNzMsNyBAQAogZXh0ZXJuIGludCAgICAgICAgICAgICAgIGZ3c2NhbmYoRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CiBleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3YWxudW0od2ludF90KTsKIGV4dGVybiBpbnQgICAgICAgICAgICAgICBpc3dhbHBoYSh3aW50X3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIGlzd2JsYW5rKHdpbnRfdCk7CiBleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3Y250cmwod2ludF90KTsKIGV4dGVybiBpbnQgICAgICAgICAgICAgICBpc3dkaWdpdCh3aW50X3QpOwogZXh0ZXJuIGludCAgICAgICAgICAgICAgIGlzd2dyYXBoKHdpbnRfdCk7CkBAIC05Nyw3ICs5NCw4IEBACiBleHRlcm4gaW50ICAgICAgICAgICAgICAgbWJzaW5pdChjb25zdCBtYnN0YXRlX3QgKik7CiBleHRlcm4gc2l6ZV90ICAgICAgICAgICAgbWJybGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CiBleHRlcm4gc2l6ZV90ICAgICAgICAgICAgbWJydG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7Ci1leHRlcm4gc2l6ZV90ICAgICAgICAgICAgbWJzcnRvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CitleHRlcm4gc2l6ZV90IG1ic3J0b3djcyh3Y2hhcl90KiwgY29uc3QgY2hhcioqLCBzaXplX3QsIG1ic3RhdGVfdCopOworZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzKHdjaGFyX3QqLCBjb25zdCBjaGFyKiosIHNpemVfdCwgc2l6ZV90LCBtYnN0YXRlX3QqKTsKIGV4dGVybiBzaXplX3QgICAgICAgICAgICBtYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIGV4dGVybiB3aW50X3QgICAgICAgICAgICBwdXR3Yyh3Y2hhcl90LCBGSUxFICopOwogZXh0ZXJuIHdpbnRfdCAgICAgICAgICAgIHB1dHdjaGFyKHdjaGFyX3QpOwpAQCAtMTA2LDkgKzEwNCwxMiBAQAogZXh0ZXJuIHdpbnRfdCAgICAgICAgICAgIHRvd2xvd2VyKHdpbnRfdCk7CiBleHRlcm4gd2ludF90ICAgICAgICAgICAgdG93dXBwZXIod2ludF90KTsKIGV4dGVybiB3aW50X3QgICAgICAgICAgICB1bmdldHdjKHdpbnRfdCwgRklMRSAqKTsKLWV4dGVybiBpbnQgICAgICAgICAgICAgICB2ZndwcmludGYoRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOwotZXh0ZXJuIGludCAgICAgICAgICAgICAgIHZ3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7Ci1leHRlcm4gaW50ICAgICAgICAgICAgICAgdnN3cHJpbnRmKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworZXh0ZXJuIGludCB2ZndwcmludGYoRklMRSosIGNvbnN0IHdjaGFyX3QqLCB2YV9saXN0KTsKK2V4dGVybiBpbnQgdmZ3c2NhbmYoRklMRSosIGNvbnN0IHdjaGFyX3QqLCB2YV9saXN0KTsKK2V4dGVybiBpbnQgdnN3cHJpbnRmKHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QqLCB2YV9saXN0KTsKK2V4dGVybiBpbnQgdnN3c2NhbmYoY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCB2YV9saXN0KTsKK2V4dGVybiBpbnQgdndwcmludGYoY29uc3Qgd2NoYXJfdCosIHZhX2xpc3QpOworZXh0ZXJuIGludCB2d3NjYW5mKGNvbnN0IHdjaGFyX3QqLCB2YV9saXN0KTsKIGV4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3J0b21iKGNoYXIgKiwgd2NoYXJfdCwgbWJzdGF0ZV90ICopOwogZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjc2Nhc2VjbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwogZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CkBAIC0xMTcsMjMgKzExOCwyNiBAQAogZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjc2NvbGwoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwogZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiBleHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2NzY3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7Ci1leHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2NzZnRpbWUod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgc3RydWN0IHRtICopOworZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIHdjc2Z0aW1lKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIGNvbnN0IHN0cnVjdCB0bSAqKSBfX0xJQkNfQUJJX1BVQkxJQ19fOwogZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIHdjc2xlbihjb25zdCB3Y2hhcl90ICopOwogZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjc25jYXNlY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndjc25jYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiBleHRlcm4gaW50ICAgICAgICAgICAgICAgd2NzbmNtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKIGV4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NuY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOworZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzKGNoYXIqLCBjb25zdCB3Y2hhcl90KiosIHNpemVfdCwgc2l6ZV90LCBtYnN0YXRlX3QqKTsKIGV4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NwYnJrKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKIGV4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NyY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7Ci1leHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2NzcnRvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CitleHRlcm4gc2l6ZV90IHdjc3J0b21icyhjaGFyKiwgY29uc3Qgd2NoYXJfdCoqLCBzaXplX3QsIG1ic3RhdGVfdCopOwogZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiBleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2Nzc3RyKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKLWV4dGVybiBkb3VibGUgICAgICAgICAgICB3Y3N0b2QoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKLWV4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3N0b2sod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwotZXh0ZXJuIGxvbmcgaW50ICAgICAgICAgIHdjc3RvbChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCk7Ci1leHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2NzdG9tYnMoY2hhciAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCk7Ci1leHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2Nzd2NzKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiBkb3VibGUgd2NzdG9kKGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KiopOworZXh0ZXJuIGZsb2F0IHdjc3RvZihjb25zdCB3Y2hhcl90Kiwgd2NoYXJfdCoqKTsKK2V4dGVybiB3Y2hhcl90KiB3Y3N0b2sod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KiopOworZXh0ZXJuIGxvbmcgd2NzdG9sKGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KiosIGludCk7CitleHRlcm4gbG9uZyBsb25nIHdjc3RvbGwoY29uc3Qgd2NoYXJfdCosIHdjaGFyX3QqKiwgaW50KTsKK2V4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkKGNvbnN0IHdjaGFyX3QqLCB3Y2hhcl90KiopOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2NzdG91bChjb25zdCB3Y2hhcl90Kiwgd2NoYXJfdCoqLCBpbnQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyB3Y3N0b3VsbChjb25zdCB3Y2hhcl90Kiwgd2NoYXJfdCoqLCBpbnQpOwogZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjc3dpZHRoKGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKIGV4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3N4ZnJtKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjdG9iKHdpbnRfdCk7CkBAIC0xNDcsMTIgKzE1MSwyMSBAQAogZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdwcmludGYoY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwogZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdzY2FuZihjb25zdCB3Y2hhcl90ICosIC4uLik7CiAKLS8qIE5vIHJlYWxseSBzdXBwb3J0ZWQuICBUaGVzZSBhcmUganVzdCBmb3IgbWFraW5nIGxpYnN0ZGMrKy12MyBoYXBweS4gICovCi10eXBlZGVmIHZvaWQgKndjdHJhbnNfdDsKLWV4dGVybiB3aW50X3QJCSB0b3djdHJhbnMod2ludF90LCB3Y3RyYW5zX3QpOwotZXh0ZXJuIHdjdHJhbnNfdAkgd2N0cmFucyAoY29uc3QgY2hhciAqKTsKK2V4dGVybiBsb25nIGxvbmcgICAgICAgICAgd2NzdG9sbF9sKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50LCBsb2NhbGVfdCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHdjc3RvdWxsX2woY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQsIGxvY2FsZV90KTsKK2V4dGVybiBsb25nIGRvdWJsZSAgICAgICAgd2NzdG9sZF9sKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgbG9jYWxlX3QgKTsKIAotI2lmIF9YT1BFTl9TT1VSQ0UgPj0gNzAwIHx8IF9QT1NJWF9DX1NPVVJDRSA+PSAyMDA4MDlMCitleHRlcm4gaW50ICAgIHdjc2NvbGxfbChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgbG9jYWxlX3QpOworZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtX2wod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCwgbG9jYWxlX3QpOworCitleHRlcm4gc2l6ZV90IHdjc2xjYXQod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpOworZXh0ZXJuIHNpemVfdCB3Y3NsY3B5KHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KTsKKwordHlwZWRlZiB2b2lkICp3Y3RyYW5zX3Q7CitleHRlcm4gd2ludF90IHRvd2N0cmFucyh3aW50X3QsIHdjdHJhbnNfdCk7CitleHRlcm4gd2N0cmFuc190IHdjdHJhbnMoY29uc3QgY2hhciopOworCisjaWYgX19QT1NJWF9WSVNJQkxFID49IDIwMDgwOQogd2NoYXJfdCogd2NzZHVwKGNvbnN0IHdjaGFyX3QqKTsKIHNpemVfdCB3Y3NubGVuKGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvd2N0eXBlLmggYi9saWJjL2luY2x1ZGUvd2N0eXBlLmgKaW5kZXggYjVmMThhMC4uMWE0YTA1ZSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3djdHlwZS5oCisrKyBiL2xpYmMvaW5jbHVkZS93Y3R5cGUuaApAQCAtMSArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9XQ1RZUEVfSF8KKyNkZWZpbmUgX1dDVFlQRV9IXworCiAjaW5jbHVkZSA8d2NoYXIuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gaW50IGlzd2FsbnVtX2wod2ludF90LCBsb2NhbGVfdCk7CitleHRlcm4gaW50IGlzd2FscGhhX2wod2ludF90LCBsb2NhbGVfdCk7CitleHRlcm4gaW50IGlzd2JsYW5rX2wod2ludF90LCBsb2NhbGVfdCk7CitleHRlcm4gaW50IGlzd2NudHJsX2wod2ludF90LCBsb2NhbGVfdCk7CitleHRlcm4gaW50IGlzd2RpZ2l0X2wod2ludF90LCBsb2NhbGVfdCk7CitleHRlcm4gaW50IGlzd2dyYXBoX2wod2ludF90LCBsb2NhbGVfdCk7CitleHRlcm4gaW50IGlzd2xvd2VyX2wod2ludF90LCBsb2NhbGVfdCk7CitleHRlcm4gaW50IGlzd3ByaW50X2wod2ludF90LCBsb2NhbGVfdCk7CitleHRlcm4gaW50IGlzd3B1bmN0X2wod2ludF90LCBsb2NhbGVfdCk7CitleHRlcm4gaW50IGlzd3NwYWNlX2wod2ludF90LCBsb2NhbGVfdCk7CitleHRlcm4gaW50IGlzd3VwcGVyX2wod2ludF90LCBsb2NhbGVfdCk7CitleHRlcm4gaW50IGlzd3hkaWdpdF9sKHdpbnRfdCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCB0b3dsb3dlcl9sKGludCwgbG9jYWxlX3QpOworZXh0ZXJuIGludCB0b3d1cHBlcl9sKGludCwgbG9jYWxlX3QpOworCitleHRlcm4gaW50IGlzd2N0eXBlX2wod2ludF90LCB3Y3R5cGVfdCwgbG9jYWxlX3QpOworZXh0ZXJuIHdjdHlwZV90IHdjdHlwZV9sKGNvbnN0IGNoYXIqLCBsb2NhbGVfdCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfV0NUWVBFX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUveGxvY2FsZS5oIGIvbGliYy9pbmNsdWRlL3hsb2NhbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2ViOGY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3hsb2NhbGUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1hMT0NBTEVfSF8KKyNkZWZpbmUgX1hMT0NBTEVfSF8KKworLyogSWYgd2UganVzdCB1c2Ugdm9pZCogaGVyZSwgR0NDIGV4cG9zZXMgdGhhdCBpbiBlcnJvciBtZXNzYWdlcy4gKi8KK3N0cnVjdCBfX2xvY2FsZV90OwordHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfdCogbG9jYWxlX3Q7CisKKyNlbmRpZiAvKiBfWExPQ0FMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvUkVBRE1FLlRYVCBiL2xpYmMva2VybmVsL1JFQURNRS5UWFQKaW5kZXggZTRjMTFhMS4uZTczMTJlZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvUkVBRE1FLlRYVAorKysgYi9saWJjL2tlcm5lbC9SRUFETUUuVFhUCkBAIC0xLDkzICsxLDQ3IEBACi1CaW9uaWMgY29tZXMgd2l0aCBhIHNldCBvZiAnY2xlYW4nIExpbnV4IGtlcm5lbCBoZWFkZXJzIHRoYXQgY2FuIHNhZmVseSBiZQotaW5jbHVkZWQgYnkgdXNlcmxhbmQgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMgd2l0aG91dCBmZWFyIG9mIGhpZGVvdXMKLWNvbmZsaWN0cy4gZm9yIG1vcmUgaW5mb3JtYXRpb24gd2h5IHRoaXMgaXMgbmVlZGVkLCBzZWUgdGhlICJSQVRJT05BTEUiCi1zZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhpcyBkb2N1bWVudC4KK0Jpb25pYyBjb21lcyB3aXRoIGEgcHJvY2Vzc2VkIHNldCBvZiBhbGwgb2YgdGhlIHVhcGkgTGludXgga2VybmVsIGhlYWRlcnMgdGhhdAorY2FuIHNhZmVseSBiZSBpbmNsdWRlZCBieSB1c2VybGFuZCBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcy4KIAotdGhlc2UgY2xlYW4gaGVhZGVycyBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgc2V2ZXJhbCBzY3JpcHRzIGxvY2F0ZWQKLWluIHRoZSAnYmlvbmljL2tlcm5lbC90b29scycgZGlyZWN0b3J5LCB3aGljaCBwcm9jZXNzIGEgc2V0IG9mIG9yaWdpbmFsCi1hbmQgdW5tb2RpZmllZCBrZXJuZWwgaGVhZGVycyBpbiBvcmRlciB0byBnZXQgcmlkIG9mIG1hbnkgYW5ub3lpbmcKK1RoZXNlIGNsZWFuIGhlYWRlcnMgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHNldmVyYWwgc2NyaXB0cyBsb2NhdGVkCitpbiB0aGUgJ2Jpb25pYy9rZXJuZWwvdG9vbHMnIGRpcmVjdG9yeS4gVGhlIHRvb2xzIHByb2Nlc3MgdGhlIG9yaWdpbmFsCit1bm1vZGlmaWVkIGtlcm5lbCBoZWFkZXJzIGluIG9yZGVyIHRvIGdldCByaWQgb2YgbWFueSBhbm5veWluZwogZGVjbGFyYXRpb25zIGFuZCBjb25zdHJ1Y3RzIHRoYXQgdXN1YWxseSByZXN1bHQgaW4gY29tcGlsYXRpb24gZmFpbHVyZS4KIAotdGhlICdjbGVhbiBoZWFkZXJzJyBvbmx5IGNvbnRhaW4gdHlwZSBhbmQgbWFjcm8gZGVmaW5pdGlvbnMsIHdpdGggdGhlCitUaGUgJ2NsZWFuIGhlYWRlcnMnIG9ubHkgY29udGFpbiB0eXBlIGFuZCBtYWNybyBkZWZpbml0aW9ucywgd2l0aCB0aGUKIGV4Y2VwdGlvbiBvZiBhIGNvdXBsZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyB1c2VkIGZvciBwZXJmb3JtYW5jZQotcmVhc29uIChlLmcuIG9wdGltaXplZCBDUFUtc3BlY2lmaWMgYnl0ZS1zd2FwcGluZyByb3V0aW5lcykKK3JlYXNvbiAoZS5nLiBvcHRpbWl6ZWQgQ1BVLXNwZWNpZmljIGJ5dGUtc3dhcHBpbmcgcm91dGluZXMpLgogCi10aGV5IGNhbiBiZSBpbmNsdWRlZCBmcm9tIEMrKywgb3Igd2hlbiBjb21waWxpbmcgY29kZSBpbiBzdHJpY3QgQU5TSSBtb2RlLgotdGhleSBjYW4gYmUgYWxzbyBpbmNsdWRlZCBiZWZvcmUgb3IgYWZ0ZXIgYW55IEJpb25pYyBDIGxpYnJhcnkgaGVhZGVyLgorVGhleSBjYW4gYmUgaW5jbHVkZWQgZnJvbSBDKyssIG9yIHdoZW4gY29tcGlsaW5nIGNvZGUgaW4gc3RyaWN0IEFOU0kgbW9kZS4KK1RoZXkgY2FuIGJlIGFsc28gaW5jbHVkZWQgYmVmb3JlIG9yIGFmdGVyIGFueSBCaW9uaWMgQyBsaWJyYXJ5IGhlYWRlci4KIAotdGhlIGdlbmVyYXRpb24gcHJvY2VzcyB3b3JrcyBhcyBmb2xsb3dzOgorRGVzY3JpcHRpb24gb2YgdGhlIGRpcmVjdG9yaWVzIGludm9sdmVkIGluIGdlbmVyYXRpbmcgdGhlIHBhcnNlZCBrZXJuZWwgaGVhZGVyczoKIAogICAqICdleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8nCi0gICAgY29udGFpbnMgYSBzZXQgb2Yga2VybmVsIGhlYWRlcnMgYXMgbm9ybWFsbHkgZm91bmQgaW4gdGhlICdpbmNsdWRlJwotICAgIGRpcmVjdG9yeSBvZiBhIG5vcm1hbCBMaW51eCBrZXJuZWwgc291cmNlIHRyZWUuIG5vdGUgdGhhdCB0aGlzIHNob3VsZAotICAgIG9ubHkgY29udGFpbiB0aGUgZmlsZXMgdGhhdCBhcmUgcmVhbGx5IG5lZWRlZCBieSBBbmRyb2lkICh1c2UKLSAgICAnZmluZF9oZWFkZXJzLnB5JyB0byBmaW5kIHRoZXNlIGF1dG9tYXRpY2FsbHkpLgorICAgIENvbnRhaW5zIHRoZSB1YXBpIGtlcm5lbCBoZWFkZXJzIGZvdW5kIGluIHRoZSBhbmRyb2lkIGtlcm5lbC4gTm90ZSB0aGlzCisgICAgYWxzbyBpbmNsdWRlcyB0aGUgaGVhZGVyIGZpbGVzIHRoYXQgYXJlIGdlbmVyYXRlZCBieSBidWlsZGluZyB0aGUga2VybmVsCisgICAgc291cmNlcy4KIAotICAqICdiaW9uaWMvbGliYy9rZXJuZWwvY29tbW9uJwotICAgIGNvbnRhaW5zIHRoZSBub24tYXJjaC1zcGVjaWZpYyBjbGVhbiBoZWFkZXJzIGFuZCBkaXJlY3RvcmllcwotICAgIChlLmcuIGxpbnV4LCBhc20tZ2VuZXJpYyBhbmQgbXRkKQorICAqICdiaW9uaWMvbGliYy9rZXJuZWwvdWFwaScKKyAgICBDb250YWlucyB0aGUgY2xlYW5lZCBrZXJuZWwgaGVhZGVycyBhbmQgbWlycm9ycyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZQorICAgIGluICdleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC91YXBpLycuCiAKLSAgKiAnYmlvbmljL2xpYmMva2VybmVsL2FyY2gtYXJtLycKLSAgICBjb250YWlucyB0aGUgQVJNLXNwZWNpZmljIGRpcmVjdG9yeSB0cmVlIG9mIGNsZWFuIGhlYWRlcnMuCisgICogJ2Jpb25pYy9saWJjL2tlcm5lbC90b29scycKKyAgICBDb250YWlucyB2YXJpb3VzIFB5dGhvbiBhbmQgc2hlbGwgc2NyaXB0cyB1c2VkIHRvIGdldCBhbmQgcmUtZ2VuZXJhdGUKKyAgICB0aGUgaGVhZGVycy4KIAotICAqICdiaW9uaWMvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtJwotICAgIGNvbnRhaW5zIHRoZSByZWFsIEFSTS1zcGVjaWZpYyBoZWFkZXJzCitUaGUgdG9vbHMgdG8gZ2V0L3BhcnNlIHRoZSBoZWFkZXJzOgogCi0gICogJ2Jpb25pYy9saWJjL2tlcm5lbC9hcmNoLXg4NicKLSAgICAnYmlvbmljL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbScKLSAgICBzaW1pbGFybHkgY29udGFpbnMgYWxsIGhlYWRlcnMgYW5kIHN5bWxpbmtzIHRvIGJlIHVzZWQgb24geDg2Ci0KLSAgKiAnYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzJyBjb250YWlucyB2YXJpb3VzIFB5dGhvbiBhbmQgc2hlbGwgc2NyaXB0cyB1c2VkCi0gICAgdG8gbWFuYWdlIGFuZCByZS1nZW5lcmF0ZSB0aGUgaGVhZGVycwotCi10aGUgdG9vbHMgeW91IGNhbiB1c2UgYXJlOgotCi0gICogdG9vbHMvZmluZF91c2Vycy5weQotICAgIHNjYW5zIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgb3IgZGlyZWN0b3JpZXMgYW5kIHByaW50cyB3aGljaCBvbmVzIGRvCi0gICAgaW5jbHVkZSBMaW51eCBoZWFkZXJzLgotCi0gICogdG9vbHMvZmluZF9oZWFkZXJzLnB5Ci0gICAgc2NhbnMgYSBsaXN0IG9mIHNvdXJjZSBmaWxlcyBvciBkaXJlY3RvcmllcyBhbmQgcmVjdXJzaXZlbHkgZmluZHMgYWxsCi0gICAgdGhlIG9yaWdpbmFsIGtlcm5lbCBoZWFkZXJzIHRoZXkgbmVlZC4KKyAgKiB0b29scy9nZW5lcmF0ZV91YXBpX2hlYWRlcnMuc2gKKyAgICBDaGVja3Mgb3V0IHRoZSBhbmRyb2lkIGtlcm5lbCBhbmQgZ2VuZXJhdGVzIGFsbCB1YXBpIGhlYWRlciBmaWxlcy4KKyAgICBjb3BpZXMgYWxsIHRoZSBjaGFuZ2VkIGZpbGVzIGludG8gZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMuCiAKICAgKiB0b29scy9jbGVhbl9oZWFkZXIucHkKLSAgICBwcmludHMgdGhlIGNsZWFuIHZlcnNpb24gb2YgYSBnaXZlbiBrZXJuZWwgaGVhZGVyLiB3aXRoIHRoZSAtdSBvcHRpb24sCisgICAgUHJpbnRzIHRoZSBjbGVhbiB2ZXJzaW9uIG9mIGEgZ2l2ZW4ga2VybmVsIGhlYWRlci4gV2l0aCB0aGUgLXUgb3B0aW9uLAogICAgIHRoaXMgd2lsbCBhbHNvIHVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBjbGVhbiBoZWFkZXIgZmlsZSBpZiBpdHMKLSAgICBjb250ZW50IGhhcyBjaGFuZ2VkLiB5b3UgY2FuIGFsc28gcHJvY2VzcyBtb3JlIHRoYW4gb25lIGZpbGUgd2l0aCAtdQorICAgIGNvbnRlbnQgaGFzIGNoYW5nZWQuIFlvdSBjYW4gYWxzbyBwcm9jZXNzIG1vcmUgdGhhbiBvbmUgZmlsZSB3aXRoIC11LgogCiAgICogdG9vbHMvdXBkYXRlX2FsbC5weQotICAgIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGFsbCBjbGVhbiBoZWFkZXJzIGZyb20gdGhlIGNvbnRlbnQgb2YgCi0gICAgJ2V4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsJy4gdGhpcyBpcyB0aGUgc2NyaXB0IHlvdSdyZSBsaWtlbHkgZ29pbmcgdG8KLSAgICBydW4gd2hlbmV2ZXIgeW91IHVwZGF0ZSB0aGUgb3JpZ2luYWwgaGVhZGVycy4KLQotCi1IT1cgVE8gQlVJTEQgQklPTklDIEFORCBPVEhFUiBQUk9HUkFNUyBXSVRIIFRIRSBDTEVBTiBIRUFERVJTOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotYWRkIGJpb25pYy9rZXJuZWwvY29tbW9uIGFuZCBiaW9uaWMva2VybmVsL2FyY2gtPHlvdXJhcmNoPiB0byB5b3VyIEMKLWluY2x1ZGUgcGF0aC4gdGhhdCBzaG91bGQgYmUgZW5vdWdoLiBOb3RlIHRoYXQgQmlvbmljIHdpbGwgbm90IGNvbXBpbGUgcHJvcGVybHkgCi1pZiB5b3UgZG9uJ3QuCi0KLQotSE9XIFRPIFNVUFBPUlQgQU5PVEhFUiBBUkNISVRFQ1RVUkU6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc2VlIHRoZSBjb250ZW50IG9mIHRvb2xzL2RlZmF1bHRzLnB5LCB5b3Ugd2lsbCBuZWVkIHRvIG1ha2UgYSBmZXcgdXBkYXRlcwotaGVyZToKLQotICAtIGFkZCBhIG5ldyBpdGVtIHRvIHRoZSAna2VybmVsX2FyY2hzJyBsaXN0IG9mIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzCi0KLSAgLSBhZGQgYSBwcm9wZXIgZGVmaW5pdGlvbiBmb3IgJ2tlcm5lbF9rbm93bl88YXJjaD5fc3RhdGljcycgd2l0aAotICAgIHJlbGV2YW50IGRlZmluaXRpb25zLgotCi0gIC0gdXBkYXRlICdrZXJuZWxfa25vd25fc3RhdGljcycgdG8gbWFwICI8YXJjaD4iIHRvCi0gICAgJ2tlcm5lbF9rbm93bl88YXJjaD5fc3RhdGljcycKLQotdGhlbiwgYWRkIHRoZSBuZXcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhlYWRlcnMgdG8gb3JpZ2luYWwvYXNtLTxhcmNoPi4KLShwbGVhc2UgZW5zdXJlIHRoYXQgdGhlc2UgYXJlIHJlYWxseSBuZWVkZWQsIGUuZy4gd2l0aCB0b29scy9maW5kX2hlYWRlcnMucHkpCi0KLWZpbmFsbHksIHJ1biB0b29scy91cGRhdGVfYWxsLnB5Ci0KKyAgICBBdXRvbWF0aWNhbGx5IHVwZGF0ZSBhbGwgY2xlYW4gaGVhZGVycyBmcm9tIHRoZSBjb250ZW50IG9mCisgICAgJ2V4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsJy4KIAogCiBIT1cgVE8gVVBEQVRFIFRIRSBIRUFERVJTIFdIRU4gTkVFREVEOgpAQCAtOTksODEgKzUzLDE3IEBACiAgIE5PVCBCUkVBSyBUSEUgS0VSTkVMIDwtPiBVU0VSIEFCSSwgRk9SIEVYQU1QTEUgQlkgQ0hBTkdJTkcgVEhFIFNJWkUKICAgT0YgQSBHSVZFTiBUWVBFLiBUSElTIFRBU0sgQ0FOTk9UIEJFIEVBU0lMWSBBVVRPTUFURUQgQVQgVEhFIE1PTUVOVAogCi1jb3B5IGFueSB1cGRhdGVkIGtlcm5lbCBoZWFkZXIgaW50byB0aGUgY29ycmVzcG9uZGluZyBsb2NhdGlvbiB1bmRlcgotJ2Jpb25pYy9rZXJuZWwvb3JpZ2luYWwnLgorR3JhYiB0aGUgbGF0ZXN0IGhlYWRlcnMgZnJvbSB0aGUgYW5kcm9pZCBrZXJuZWwgYnkgcnVubmluZyB0aGlzIGNvbW1hbmQ6CiAKLWZvciBhbnkgbmV3IGtlcm5lbCBoZWFkZXIgeW91IHdhbnQgdG8gYWRkLCBmaXJzdCBydW4gdG9vbHMvZmluZF9oZWFkZXJzLnB5IHRvIGJlCi1zdXJlIHRoYXQgaXQgaXMgcmVhbGx5IG5lZWRlZCBieSB0aGUgQW5kcm9pZCBzb3VyY2VzLiB0aGVuIGFkZCBpdCB0bwotJ2Jpb25pYy9rZXJuZWwvb3JpZ2luYWwnCisgIGJpb25pYy9saWJjL2tlcm5lbC90b29scy9nZW5lcmF0ZV91YXBpX2hlYWRlcnMuc2ggLS1kb3dubG9hZC1rZXJuZWwKIAotdGhlbiwgcnVuIHRvb2xzL3VwZGF0ZV9hbGwucHkgdG8gcmUtcnVuIHRoZSBhdXRvLWNsZWFuaW5nCitOZXh0LCBydW4gdGhpcyBjb21tYW5kIHRvIGNvcHkgdGhlIHBhcnNlZCBmaWxlcyB0byBiaW9uaWMvbGliYy9rZXJuZWwvdWFwaToKIAorICBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQogCitGaW5hbGx5LCBydW4gdGhpcyBjb21tYW5kIHRvIHJlZ2VuZXJhdGUgdGhlIHN5c2NhbGxzIGxpc3Q6CiAKLUhPVyBUSEUgQ0xFQU5VUCBQUk9DRVNTIFdPUktTOgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIGJpb25pYy9saWJjL3Rvb2xzL2dlbnN5c2NhbGxzLnB5CiAKLXRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIGFjdGlvbiBwZXJmb3JtZWQgYnkgdGhlIGNsZWFudXAgcHJvZ3JhbShzKSB3aGVuIHRoZXkKLXByb2Nlc3MgdGhlIG9yaWdpbmFsIGtlcm5lbCBoZWFkZXJzIGludG8gY2xlYW4gb25lczoKLQotMS4gT3B0aW1pemUgd2VsbC1rbm93biBtYWNyb3MgKGUuZy4gX19LRVJORUxfXywgX19LRVJORUxfU1RSSUNUX05BTUVTKQotCi0gICAgdGhpcyBwYXNzIGdldHMgcmlkIG9mIGV2ZXJ5dGhpbmcgdGhhdCBpcyBndWFyZGVkIGJ5IGEgd2VsbC1rbm93biBtYWNybwotICAgIGRlZmluaXRpb24uIHRoaXMgbWVhbnMgdGhhdCBhIGJsb2NrIGxpa2UKLQotICAgICAgICNpZmRlZiBfX0tFUk5FTF9fCi0gICAgICAgLi4uLgotICAgICAgICNlbmRpZgotCi0gICAgd2lsbCBiZSB0b3RhbGx5IG9taXR0ZWQgZnJvbSB0aGUgb3V0cHV0LiB0aGUgb3B0aW1pemVyIGlzIHNtYXJ0IGVub3VnaCB0bwotICAgIGhhbmRsZSBhbGwgY29tcGxleCBDLXByZXByb2Nlc3NvciBjb25kaXRpb25hbCBleHByZXNzaW9uIGFwcHJvcHJpYXRlbHkuCi0gICAgdGhpcyBtZWFucyB0aGF0LCBmb3IgZXhhbXBsZToKLQotICAgICAgICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoRk9PKQotICAgICAgIC4uLgotICAgICAgICNlbmRpZgotCi0gICAgd2lsbCBiZSB0cmFuc2Zvcm1lZCBpbnRvOgotCi0gICAgICAgI2lmZGVmIEZPTwotICAgICAgIC4uLgotICAgICAgICNlbmRpZgotCi0gICAgc2VlIHRvb2xzL2RlZmF1bHRzLnB5IGZvciB0aGUgbGlzdCBvZiB3ZWxsLWtub3duIG1hY3JvcyB1c2VkIGluIHRoaXMgcGFzcywKLSAgICBpbiBjYXNlIHlvdSBuZWVkIHRvIHVwZGF0ZSBpdCBpbiB0aGUgZnV0dXJlLgotCi0gICAgbm90ZSB0aGF0IHRoaXMgYWxzbyByZW1vdmUgYW55IHJlZmVyZW5jZSB0byBhIGtlcm5lbC1zcGVjaWZpYyBjb25maWd1cmF0aW9uCi0gICAgbWFjcm8gbGlrZSBDT05GSUdfRk9PIGZyb20gdGhlIGNsZWFuIGhlYWRlcnMuCi0KLQotMi4gcmVtb3ZlIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnM6Ci0KLSAgdGhpcyBwYXNzIHNjYW5zIG5vbi1kaXJlY3RpdmUgdGV4dCBhbmQgb25seSBrZWVwcyB0aGluZ3MgdGhhdCBsb29rIGxpa2UgYQotICB0eXBlZGVmL3N0cnVjdC91bmlvbi9lbnVtIGRlY2xhcmF0aW9uLiB0aGlzIGFsbG93cyB0byBnZXQgcmlkIG9mIGFueSB2YXJpYWJsZQotICBvciBmdW5jdGlvbiBkZWNsYXJhdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwgYW55d2F5Ci0gIChhbmQgd2hpY2ggbm9ybWFsbHkgKnNob3VsZCogYmUgZ3VhcmRlZCBpbiBhICNpZmRlZiBfX0tFUk5FTF9fIC4uLiAjZW5kaWYKLSAgYmxvY2ssIGlmIHRoZSBrZXJuZWwgd3JpdGVycyB3ZXJlIG5vdCBzbyBtZXNzeSkKLQotICB0aGVyZSBhcmUgaG93ZXZlciBhIGZldyBleGNlcHRpb25zOiBpdCBpcyBzZWxkb20gdXNlZnVsIHRvIGtlZXAgdGhlIGRlZmluaXRpb24KLSAgb2Ygc29tZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBwZXJmb3JtaW5nIHZlcnkgc2ltcGxlIG9wZXJhdGlvbnMuIGEgZ29vZAotICBleGFtcGxlIGlzIHRoZSBvcHRpbWl6ZWQgMzItYml0IGJ5dGUtc3dhcCBmdW5jdGlvbiBmb3VuZCBpbgotICBhcmNoLWFybS9hc20vYnl0ZW9yZGVyLmgKLQotICB0aGUgbGlzdCBvZiBleGNlcHRpb25zIGlzIGluIHRvb2xzL2RlZmF1bHRzLnB5IGluIGNhc2UgeW91IG5lZWQgdG8gdXBkYXRlIGl0Ci0gIGluIHRoZSBmdXR1cmUuCi0KLSAgbm90ZSB0aGF0IHdlIGRvICpub3QqIHJlbW92ZSBtYWNybyBkZWZpbml0aW9ucywgaW5jbHVkaW5nIHRoZXNlIG1hY3JvIHRoYXQKLSAgcGVyZm9ybSBhIGNhbGwgdG8gb25lIG9mIHRoZXNlIGtlcm5lbC1oZWFkZXIgZnVuY3Rpb25zLCBvciBldmVuIGRlZmluZSBvdGhlcgotICBmdW5jdGlvbnMuIHdlIGNvbnNpZGVyIGl0IHNhZmUgc2luY2UgdXNlcmxhbmQgYXBwbGljYXRpb25zIGhhdmUgbm8gYnVzaW5lc3MKLSAgdXNpbmcgdGhlbSBhbnl3YXkuCi0KLQotMy4gd2hpdGVzcGFjZSBjbGVhbnVwOgotCi0gIHRoZSBmaW5hbCBwYXNzIHJlbW92ZSBhbnkgY29tbWVudHMgYW5kIGVtcHR5IGxpbmVzIGZyb20gdGhlIGZpbmFsIGhlYWRlcnMuCi0KLQotNC4gYWRkIGEgc3RhbmRhcmQgZGlzY2xhaW1lcjoKLQotICBwcmVwZW5kZWQgdG8gZWFjaCBnZW5lcmF0ZWQgaGVhZGVyLCBjb250YWlucyBhIG1lc3NhZ2UgbGlrZQotICAiZG8gbm90IGVkaXQgZGlyZWN0bHkgLSBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZCBieSAuLi4uIgorQWZ0ZXIgdGhpcywgeW91IHdpbGwgbmVlZCB0byBidWlsZC90ZXN0IHRoZSB0cmVlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlCitjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IGVycm9ycy4KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL2NsZWFuX2hlYWRlci5weSBiL2xpYmMva2VybmVsL3Rvb2xzL2NsZWFuX2hlYWRlci5weQppbmRleCBlODI1YWUwLi42NjAxODE3IDEwMDc1NQotLS0gYS9saWJjL2tlcm5lbC90b29scy9jbGVhbl9oZWFkZXIucHkKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvY2xlYW5faGVhZGVyLnB5CkBAIC0xLDUgKzEsNzggQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlc2NyaXB0aW9uIG9mIHRoZSBoZWFkZXIgY2xlYW4gcHJvY2VzcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZXJlIGlzIHRoZSBsaXN0IG9mIGFjdGlvbnMgcGVyZm9ybWVkIGJ5IHRoaXMgc2NyaXB0IHRvIGNsZWFuIHRoZSBvcmlnaW5hbAorIyBrZXJuZWwgaGVhZGVycy4KICMKKyMgMS4gT3B0aW1pemUgd2VsbC1rbm93biBtYWNyb3MgKGUuZy4gX19LRVJORUxfXywgX19LRVJORUxfU1RSSUNUX05BTUVTKQorIworIyAgICAgVGhpcyBwYXNzIGdldHMgcmlkIG9mIGV2ZXJ5dGhpbmcgdGhhdCBpcyBndWFyZGVkIGJ5IGEgd2VsbC1rbm93biBtYWNybworIyAgICAgZGVmaW5pdGlvbi4gVGhpcyBtZWFucyB0aGF0IGEgYmxvY2sgbGlrZToKKyMKKyMgICAgICAgICNpZmRlZiBfX0tFUk5FTF9fCisjICAgICAgICAuLi4uCisjICAgICAgICAjZW5kaWYKKyMKKyMgICAgIFdpbGwgYmUgdG90YWxseSBvbWl0dGVkIGZyb20gdGhlIG91dHB1dC4gVGhlIG9wdGltaXplciBpcyBzbWFydCBlbm91Z2ggdG8KKyMgICAgIGhhbmRsZSBhbGwgY29tcGxleCBDLXByZXByb2Nlc3NvciBjb25kaXRpb25hbCBleHByZXNzaW9uIGFwcHJvcHJpYXRlbHkuCisjICAgICBUaGlzIG1lYW5zIHRoYXQsIGZvciBleGFtcGxlOgorIworIyAgICAgICAgI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChGT08pCisjICAgICAgICAuLi4KKyMgICAgICAgICNlbmRpZgorIworIyAgICAgV2lsbCBiZSB0cmFuc2Zvcm1lZCBpbnRvOgorIworIyAgICAgICAgI2lmZGVmIEZPTworIyAgICAgICAgLi4uCisjICAgICAgICAjZW5kaWYKKyMKKyMgICAgIFNlZSB0b29scy9kZWZhdWx0cy5weSBmb3IgdGhlIGxpc3Qgb2Ygd2VsbC1rbm93biBtYWNyb3MgdXNlZCBpbiB0aGlzIHBhc3MsCisjICAgICBpbiBjYXNlIHlvdSBuZWVkIHRvIHVwZGF0ZSBpdCBpbiB0aGUgZnV0dXJlLgorIworIyAgICAgTm90ZSB0aGF0IHRoaXMgYWxzbyByZW1vdmVzIGFueSByZWZlcmVuY2UgdG8gYSBrZXJuZWwtc3BlY2lmaWMKKyMgICAgIGNvbmZpZ3VyYXRpb24gbWFjcm8gbGlrZSBDT05GSUdfRk9PIGZyb20gdGhlIGNsZWFuIGhlYWRlcnMuCisjCisjCisjIDIuIFJlbW92ZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zOgorIworIyAgIFRoaXMgcGFzcyBzY2FucyBub24tZGlyZWN0aXZlIHRleHQgYW5kIG9ubHkga2VlcHMgdGhpbmdzIHRoYXQgbG9vayBsaWtlIGEKKyMgICB0eXBlZGVmL3N0cnVjdC91bmlvbi9lbnVtIGRlY2xhcmF0aW9uLiBUaGlzIGFsbG93cyB1cyB0byBnZXQgcmlkIG9mIGFueQorIyAgIHZhcmlhYmxlcyBvciBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIHdpdGhpbiB0aGUKKyMgICBrZXJuZWwgYW55d2F5IChhbmQgd2hpY2ggbm9ybWFsbHkgKnNob3VsZCogYmUgZ3VhcmRlZCBieSBhbiAjaWZkZWYKKyMgICBfX0tFUk5FTF9fIC4uLiAgI2VuZGlmIGJsb2NrLCBpZiB0aGUga2VybmVsIHdyaXRlcnMgd2VyZSBub3Qgc28gbWVzc3kpLgorIworIyAgIFRoZXJlIGFyZSwgaG93ZXZlciwgYSBmZXcgZXhjZXB0aW9uczogaXQgaXMgc2VsZG9tIHVzZWZ1bCB0byBrZWVwIHRoZQorIyAgIGRlZmluaXRpb24gb2Ygc29tZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBwZXJmb3JtaW5nIHZlcnkgc2ltcGxlCisjICAgb3BlcmF0aW9ucy4gQSBnb29kIGV4YW1wbGUgaXMgdGhlIG9wdGltaXplZCAzMi1iaXQgYnl0ZS1zd2FwIGZ1bmN0aW9uCisjICAgZm91bmQgaW46CisjCisjICAgICBhcmNoLWFybS9hc20vYnl0ZW9yZGVyLmgKKyMKKyMgICBUaGUgbGlzdCBvZiBleGNlcHRpb25zIGlzIGluIHRvb2xzL2RlZmF1bHRzLnB5IGluIGNhc2UgeW91IG5lZWQgdG8gdXBkYXRlCisjICAgaXQgaW4gdGhlIGZ1dHVyZS4KKyMKKyMgICBOb3RlIHRoYXQgd2UgZG8gKm5vdCogcmVtb3ZlIG1hY3JvIGRlZmluaXRpb25zLCBpbmNsdWRpbmcgdGhlc2UgbWFjcm8gdGhhdAorIyAgIHBlcmZvcm0gYSBjYWxsIHRvIG9uZSBvZiB0aGVzZSBrZXJuZWwtaGVhZGVyIGZ1bmN0aW9ucywgb3IgZXZlbiBkZWZpbmUgb3RoZXIKKyMgICBmdW5jdGlvbnMuIFdlIGNvbnNpZGVyIGl0IHNhZmUgc2luY2UgdXNlcmxhbmQgYXBwbGljYXRpb25zIGhhdmUgbm8gYnVzaW5lc3MKKyMgICB1c2luZyB0aGVtIGFueXdheS4KKyMKKyMKKyMgMy4gV2hpdGVzcGFjZSBjbGVhbnVwOgorIworIyAgIFRoZSBmaW5hbCBwYXNzIHJlbW92ZXMgYW55IGNvbW1lbnRzIGFuZCBlbXB0eSBsaW5lcyBmcm9tIHRoZSBmaW5hbCBoZWFkZXJzLgorIworIworIyA0LiBBZGQgYSBzdGFuZGFyZCBkaXNjbGFpbWVyOgorIworIyAgIFRoZSBtZXNzYWdlOgorIworIyAgIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjCisjICAgSXMgcHJlcGVuZGVkIHRvIGVhY2ggZ2VuZXJhdGVkIGhlYWRlci4KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogaW1wb3J0IHN5cywgY3BwLCBrZXJuZWwsIGdsb2IsIG9zLCByZSwgZ2V0b3B0CiBmcm9tIGRlZmF1bHRzIGltcG9ydCAqCkBAIC03LDcgKzgwLDcgQEAKIAogbm9VcGRhdGUgPSAxCiAKLWRlZiAgY2xlYW51cEZpbGUoIHBhdGgsIG9yaWdpbmFsX3BhdGgpOgorZGVmIGNsZWFudXBGaWxlKHBhdGgsIG9yaWdpbmFsX3BhdGgpOgogICAgICIiInJlYWRzIGFuIG9yaWdpbmFsIGhlYWRlciBhbmQgcGVyZm9ybSB0aGUgY2xlYW51cCBvcGVyYXRpb24gb24gaXQKICAgICAgICB0aGlzIGZ1bmN0aW9ucyByZXR1cm5zIHRoZSBkZXN0aW5hdGlvbiBwYXRoIGFuZCB0aGUgY2xlYW4gaGVhZGVyCiAgICAgICAgYXMgYSBzaW5nbGUgc3RyaW5nIiIiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC90b29scy9jcHAucHkgYi9saWJjL2tlcm5lbC90b29scy9jcHAucHkKaW5kZXggMDRlNDI1Ni4uMmJlOTUzMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdG9vbHMvY3BwLnB5CisrKyBiL2xpYmMva2VybmVsL3Rvb2xzL2NwcC5weQpAQCAtNjg1LDkgKzY4NSw5IEBACiAgICAgICAgICMgd2UgaGF2ZSB0aGUgZGVmaW5lZCBrZXl3b3JkLCBjaGVjayB0aGUgcmVzdAogICAgICAgICBzZWxmLmkgKz0gMQogICAgICAgICBzZWxmLnNraXBfc3BhY2VzKCkKLSAgICAgICAgdXNlX3BhcmVucyA9IDAKKyAgICAgICAgdXNlZF9wYXJlbnMgPSAwCiAgICAgICAgIGlmIHNlbGYuaSA8IHNlbGYubiBhbmQgc2VsZi50b2tbc2VsZi5pXS5pZCA9PSB0b2tMUEFSRU46Ci0gICAgICAgICAgICB1c2VfcGFyZW5zID0gMQorICAgICAgICAgICAgdXNlZF9wYXJlbnMgPSAxCiAgICAgICAgICAgICBzZWxmLmkgKz0gMQogICAgICAgICAgICAgc2VsZi5za2lwX3NwYWNlcygpCiAKQEAgLTY5OSw3ICs2OTksNyBAQAogICAgICAgICAgICAgc2VsZi50aHJvdyhDcHBDb25zdGFudEV4cGVjdGVkLGksIiMjIyAnZGVmaW5lZCcgbXVzdCBiZSBmb2xsb3dlZCBieSBtYWNybyBuYW1lIikKIAogICAgICAgICBzZWxmLmkgKz0gMQotICAgICAgICBpZiB1c2VfcGFyZW5zOgorICAgICAgICBpZiB1c2VkX3BhcmVuczoKICAgICAgICAgICAgIHNlbGYuZXhwZWN0SWQodG9rUlBBUkVOKQogCiAgICAgICAgIHJldHVybiAoImRlZmluZWQiLCB0LnZhbHVlKQpAQCAtMTE2Miw3ICsxMTYyLDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuZGlyZWN0aXZlIGluIFsiaWYiLCJpZmRlZiIsImlmbmRlZiIsImVsaWYiXQogCiAgICAgZGVmIGlzSW5jbHVkZShzZWxmKToKLSAgICAgICAgIiIiY2hlY2tzIHdldGhlciB0aGlzIGlzIGEgI2luY2x1ZGUgZGlyZWN0aXZlLiBpZiB0cnVlLCB0aGVuIHJldHVybnMgdGhlCisgICAgICAgICIiImNoZWNrcyB3aGV0aGVyIHRoaXMgaXMgYSAjaW5jbHVkZSBkaXJlY3RpdmUuIGlmIHRydWUsIHRoZW4gcmV0dXJucyB0aGUKICAgICAgICAgICAgY29ycmVzcG9uZGluZyBmaWxlIG5hbWUgKHdpdGggYnJhY2tldHMgb3IgZG91YmxlLXFvdXRlcykuIE5vbmUgb3RoZXJ3aXNlIiIiCiAgICAgICAgIGlmIHNlbGYuZGlyZWN0aXZlICE9ICJpbmNsdWRlIjoKICAgICAgICAgICAgIHJldHVybiBOb25lCkBAIC0xNTE3LDE1ICsxNTE3LDIwIEBACiAgICAgICAgIHRva2VucyA9IHRva2Vuc1s6LTFdICAjIHJlbW92ZSB0cmFpbGluZyB0b2tMTgogICAgICAgICBzZWxmLmJsb2NrcyA9IFsgQmxvY2sodG9rZW5zKSBdICsgc2VsZi5ibG9ja3MKIAotICAgIGRlZiByZXBsYWNlVG9rZW5zKHNlbGYscmVwbGFjZW1lbnRzPWRpY3QoKSk6Ci0gICAgICAgICIiInJlcGxhY2UgdG9rZW5zIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZGljdAotICAgICAgICAgICAiIiIKKyAgICBkZWYgcmVwbGFjZVRva2VucyhzZWxmLHJlcGxhY2VtZW50cyk6CisgICAgICAgICIiInJlcGxhY2UgdG9rZW5zIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZGljdCIiIgogICAgICAgICBmb3IgYiBpbiBzZWxmLmJsb2NrczoKLSAgICAgICAgICAgIGlmIG5vdCBiLmlzRGlyZWN0aXZlKCk6CisgICAgICAgICAgICBtYWRlX2NoYW5nZSA9IEZhbHNlCisgICAgICAgICAgICBpZiBiLmlzSW5jbHVkZSgpID09IE5vbmU6CiAgICAgICAgICAgICAgICAgZm9yIHRvayBpbiBiLnRva2VuczoKICAgICAgICAgICAgICAgICAgICAgaWYgdG9rLmlkID09IHRva0lERU5UOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rLnZhbHVlIGluIHJlcGxhY2VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2sudmFsdWUgPSByZXBsYWNlbWVudHNbdG9rLnZhbHVlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZGVfY2hhbmdlID0gVHJ1ZQorCisgICAgICAgICAgICBpZiBtYWRlX2NoYW5nZSBhbmQgYi5pc0lmKCk6CisgICAgICAgICAgICAgICAgIyBLZWVwICdleHByJyBpbiBzeW5jIHdpdGggJ3Rva2VucycuCisgICAgICAgICAgICAgICAgYi5leHByID0gQ3BwRXhwcihiLnRva2VucykKIAogY2xhc3MgQmxvY2tQYXJzZXI6CiAgICAgIiIiYSBjbGFzcyB1c2VkIHRvIGNvbnZlcnQgYW4gaW5wdXQgc291cmNlIGZpbGUgaW50byBhIEJsb2NrTGlzdCBvYmplY3QiIiIKQEAgLTE3OTgsNiArMTgwMywxMCBAQAogI2RlZmluZSBYCiAjZW5kaWYKIAorI2lmbmRlZiBTSUdSVE1BWAorI2RlZmluZSBTSUdSVE1BWCAxMjMKKyNlbmRpZiAvKiBTSUdSVE1BWCAqLworCiAjaWYgMAogI2lmIDEKICNkZWZpbmUgIEJBRF82CkBAIC0xODE3LDEyICsxODI2LDE3IEBACiAjZGVmaW5lIFgKICNlbmRpZgogCisjaWZuZGVmIF9fU0lHUlRNQVgKKyNkZWZpbmUgX19TSUdSVE1BWCAxMjMKKyNlbmRpZgorCiAiIiIKIAogICAgIG91dCA9IFN0cmluZ091dHB1dCgpCiAgICAgbGluZXMgPSBzdHJpbmcuc3BsaXQodGV4dCwgJ1xuJykKICAgICBsaXN0ID0gQmxvY2tQYXJzZXIoKS5wYXJzZSggQ3BwTGluZXNUb2tlbml6ZXIobGluZXMpICkKICAgICAjRF9zZXRsZXZlbCgyKQorICAgIGxpc3QucmVwbGFjZVRva2Vucygga2VybmVsX3Rva2VuX3JlcGxhY2VtZW50cyApCiAgICAgbGlzdC5vcHRpbWl6ZUFsbCggeyJfX0tFUk5FTF9fIjprQ3BwVW5kZWZpbmVkTWFjcm99ICkKICAgICBsaXN0LndyaXRlKG91dCkKICAgICBpZiBvdXQuZ2V0KCkgIT0gZXhwZWN0ZWQ6CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC90b29scy9kZWZhdWx0cy5weSBiL2xpYmMva2VybmVsL3Rvb2xzL2RlZmF1bHRzLnB5CmluZGV4IGYyMzU4MDMuLjJlZmQ0NTUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3Rvb2xzL2RlZmF1bHRzLnB5CisrKyBiL2xpYmMva2VybmVsL3Rvb2xzL2RlZmF1bHRzLnB5CkBAIC02LDIwICs2LDE2IEBACiBmcm9tIHV0aWxzIGltcG9ydCAqCiAKICMgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMKLSMKIGtlcm5lbF9hcmNocyA9IFsgJ2FybScsICdhcm02NCcsICdtaXBzJywgJ3g4NicgXQogCiAjIHRoZSBsaXN0IG9mIGluY2x1ZGUgZGlyZWN0b3JpZXMgdGhhdCBiZWxvbmcgdG8gdGhlIGtlcm5lbAogIyB0cmVlLiB1c2VkIHdoZW4gbG9va2luZyBmb3Igc291cmNlcy4uLgotIwoga2VybmVsX2RpcnMgPSBbICJsaW51eCIsICJhc20iLCAiYXNtLWdlbmVyaWMiLCAibXRkIiBdCiAKICMgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGtlcm5lbCBoZWFkZXJzCi0jCiBrZXJuZWxfb3JpZ2luYWxfcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoIGZpbmRfcHJvZ3JhbV9kaXIoKSArICcvLi4vLi4vLi4vLi4vZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwnICkKIAogIyBwYXRoIHRvIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBjbGVhbmVkLXVwIGhlYWRlcnMKLSMKIGtlcm5lbF9jbGVhbmVkX3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKCBmaW5kX3Byb2dyYW1fZGlyKCkgKyAnLy4uJyApCiAKICMgYSBzcGVjaWFsIHZhbHVlIHRoYXQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgZ2l2ZW4gbWFjcm8gaXMga25vd24gdG8gYmUKQEAgLTMzLDYgKzI5LDcgQEAKICAgICAiX19LRVJORUxfU1RSSUNUX05BTUVTIjoiMSIsCiAgICAgIl9fQ0hFQ0tFUl9fIjoga0NwcFVuZGVmaW5lZE1hY3JvLAogICAgICJfX0NIRUNLX0VORElBTl9fIjoga0NwcFVuZGVmaW5lZE1hY3JvLAorICAgICJDT05GSUdfNjRCSVQiOiAiX19MUDY0X18iLAogICAgICJDT05GSUdfWDg2XzMyIjogIl9faTM4Nl9fIiwKICAgICAiX19FWFBPUlRFRF9IRUFERVJTX18iOiAiMSIsCiAgICAgfQpAQCAtNDUsOSArNDIsMTMgQEAKICMgbWFwcyBhbiBhcmNoaXRlY3R1cmUgdG8gYSBzZXQgb2YgZGVmYXVsdCBtYWNyb3MgdGhhdCB3b3VsZCBiZSBwcm92aWRlZCBieQogIyB0b29sY2hhaW4gcHJlcHJvY2Vzc29yCiBrZXJuZWxfZGVmYXVsdF9hcmNoX21hY3JvcyA9IHsKLSAgICAiYXJtIjoge30sCisgICAgImFybSI6IHsiX19BUk1FQl9fIjoga0NwcFVuZGVmaW5lZE1hY3JvLCAiX19BUk1fRUFCSV9fIjogIjEifSwKICAgICAiYXJtNjQiOiB7fSwKLSAgICAibWlwcyI6IHsiQ09ORklHXzMyQklUIjoiMSJ9LAorICAgICJtaXBzIjogeyJfX01JUFNFQl9fIjoga0NwcFVuZGVmaW5lZE1hY3JvLAorICAgICAgICAgICAgICJfX01JUFNFTF9fIjogIjEiLAorICAgICAgICAgICAgICJDT05GSUdfMzJCSVQiOiAiX0FCSU8zMiIsCisgICAgICAgICAgICAgIkNPTkZJR19DUFVfTElUVExFX0VORElBTiI6ICIxIiwKKyAgICAgICAgICAgICAiX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fIjogIjEiLH0sCiAgICAgIng4NiI6IHt9LAogICAgIH0KIApAQCAtNTcsMTUgKzU4LDI0IEBACiAgICAgIm1pcHMiOiB7Im9mZl90IjoiX19rZXJuZWxfb2ZmX3QifSwKICAgICAieDg2Ijoge30sCiAgICAgfQorCiAjIFJlcGxhY2UgdG9rZW5zIGluIHRoZSBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoaXMgbWFwcGluZwoga2VybmVsX3Rva2VuX3JlcGxhY2VtZW50cyA9IHsKICAgICAiYXNtIjogIl9fYXNtX18iLAotICAgICJfX3VudXNlZCI6ICJfX2xpbnV4X3VudXNlZCIsICMgVGhlIGtlcm5lbCB1c2FnZSBvZiBfX3VudXNlZCBjb25mbGljdHMgd2l0aCB0aGUgbWFjcm8gZGVmaW5lZCBpbiBzeXMvY2RlZnMuaAorICAgICMgVGhlIGtlcm5lbCB1c2FnZSBvZiBfX3VudXNlZCBmb3IgdW51c2VkIHN0cnVjdCBmaWVsZHMgY29uZmxpY3RzIHdpdGggdGhlIG1hY3JvIGRlZmluZWQgaW4gPHN5cy9jZGVmcy5oPi4KKyAgICAiX191bnVzZWQiOiAiX19saW51eF91bnVzZWQiLAorICAgICMgVGhlIGtlcm5lbCdzIF9OU0lHL05TSUcgYXJlIG9uZSBsZXNzIHRoYW4gdGhlIHVzZXJzcGFjZSB2YWx1ZSwgc28gd2UgbmVlZCB0byBtb3ZlIHRoZW0gYXNpZGUuCisgICAgIl9OU0lHIjogIl9LRVJORUxfX05TSUciLAorICAgICJOU0lHIjogIl9LRVJORUxfTlNJRyIsCisgICAgIyBUaGUga2VybmVsJ3MgU0lHUlRNSU4vU0lHUlRNQVggYXJlIGFic29sdXRlIGxpbWl0czsgdXNlcnNwYWNlIHN0ZWFscyBhIGZldy4KKyAgICAiU0lHUlRNSU4iOiAiX19TSUdSVE1JTiIsCisgICAgIlNJR1JUTUFYIjogIl9fU0lHUlRNQVgiLAogICAgIH0KIAogIyB0aGlzIGlzIHRoZSBzZXQgb2Yga25vd24gc3RhdGljIGlubGluZSBmdW5jdGlvbnMgdGhhdCB3ZSB3YW50IHRvIGtlZXAKICMgaW4gdGhlIGZpbmFsIEFSTSBoZWFkZXJzLiB0aGlzIGlzIG9ubHkgdXNlZCB0byBrZWVwIG9wdGltaXplZCBieXRlc3dhcHBpbmcKICMgc3RhdGljIGZ1bmN0aW9ucyBhbmQgc3R1ZmYgbGlrZSB0aGF0LgorIyBUT0RPOiB0aGlzIGlzbid0IHdvcmtpbmchCiBrZXJuZWxfa25vd25fYXJtX3N0YXRpY3MgPSBzZXQoCiAgICAgICAgIFsgIl9fX2FyY2hfX3N3YWIzMiIsICAgICMgYXNtLWFybS9ieXRlb3JkZXIuaAogICAgICAgICBdCkBAIC04OCwxMSArOTgsOSBAQAogICAgICkKIAoga2VybmVsX2tub3duX2dlbmVyaWNfc3RhdGljcyA9IHNldCgKLSAgICAgICAgWyAiX19pbnZhbGlkX3NpemVfYXJndW1lbnRfZm9yX0lPQyIsICAjIGFzbS1nZW5lcmljL2lvY3RsLmgKLSAgICAgICAgICAiX19jbXNnX254dGhkciIsICAgICAgICAgICAgICAgICAgICAjIGxpbnV4L3NvY2tldC5oCi0gICAgICAgICAgImNtc2dfbnh0aGRyIiwgICAgICAgICAgICAgICAgICAgICAgIyBsaW51eC9zb2NrZXQuaAotICAgICAgICAgICJpcHRfZ2V0X3RhcmdldCIsCi0gICAgICAgICAgImlwNnRfZ2V0X3RhcmdldCIsCisgICAgICAgIFsKKyAgICAgICAgICAiaXB0X2dldF90YXJnZXQiLCAgIyB1YXBpL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCisgICAgICAgICAgImlwNnRfZ2V0X3RhcmdldCIsICMgdWFwaS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgKICAgICAgICAgXQogICAgICkKIApkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvZmluZF9oZWFkZXJzLnB5IGIvbGliYy9rZXJuZWwvdG9vbHMvZmluZF9oZWFkZXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5YjM1NzJhLi4wMDAwMDAwCi0tLSBhL2xpYmMva2VybmVsL3Rvb2xzL2ZpbmRfaGVhZGVycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgdGhpcyBwcm9ncmFtIGlzIHVzZWQgdG8gZmluZCBzb3VyY2UgY29kZSB0aGF0IGluY2x1ZGVzIGxpbnV4IGtlcm5lbCBoZWFkZXJzIGRpcmVjdGx5Ci0jIChlLmcuIHdpdGggI2luY2x1ZGUgPGxpbnV4Ly4uLj4gb3IgI2luY2x1ZGUgPGFzbS8uLi4+KQotIwotIyB0aGVuIGl0IGxpc3RzIHRoZW0gb24gdGhlIHN0YW5kYXJkIG91dHB1dC4KLQotaW1wb3J0IHN5cywgY3BwLCBnbG9iLCBvcywgcmUsIGdldG9wdCwga2VybmVsCi1mcm9tIHV0aWxzIGltcG9ydCAqCi1mcm9tIGRlZmF1bHRzIGltcG9ydCAqCi0KLXByb2dyYW1fZGlyID0gZmluZF9wcm9ncmFtX2RpcigpCi0KLXdhbnRlZF9hcmNocyAgID0ga2VybmVsX2FyY2hzCi13YW50ZWRfY29uZmlnICA9IE5vbmUKLQotZGVmIHVzYWdlKCk6Ci0gICAgcHJpbnQgIiIiXAotICB1c2FnZTogIGZpbmRfaGVhZGVycy5weSBbb3B0aW9uc10gPGtlcm5lbC1yb290PiAoZmlsZXxkaXJlY3Rvcnl8QGxpc3RmaWxlKSsKLQotICAgICBvcHRpb25zOgotICAgICAgICAtYyA8ZmlsZT4gICAgICAgICAgc3BlY2lmeSAuY29uZmlnIGZpbGUgKG5vbmUgYnkgZGVmYXVsdCkKLQotICAgICAgICAtYSA8YXJjaHM+ICAgICAgICAgdXNlZCB0byBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGFyY2hpdGVjdHVyZXMgdG8gc3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCclcycgYnkgZGVmYXVsdCkKLQotICAgICAgICAtdiAgICAgICAgICAgICAgICAgZW5hYmxlIHZlcmJvc2UgbW9kZQotCi0gICAgdGhpcyBwcm9ncmFtIGlzIHVzZWQgdG8gZmluZCBhbGwgdGhlIGtlcm5lbCBoZWFkZXJzIHRoYXQgYXJlIHVzZWQKLSAgICBieSBhIHNldCBvZiBzb3VyY2UgZmlsZXMgb3IgZGlyZWN0b3JpZXMgY29udGFpbmluZyB0aGVtLiB0aGUgc2VhcmNoCi0gICAgaXMgcmVjdXJzaXZlIHRvIGZpbmQgKmFsbCogcmVxdWlyZWQgZmlsZXMuCi0KLSIiIiAlICggc3RyaW5nLmpvaW4oa2VybmVsX2FyY2hzLCIsIikgKQotICAgIHN5cy5leGl0KDEpCi0KLQotdHJ5OgotICAgIG9wdGxpc3QsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KCBzeXMuYXJndlsxOl0sICd2YzpkOmE6azonICkKLWV4Y2VwdDoKLSAgICAjIHVucmVjb2duaXplZCBvcHRpb24KLSAgICBwcmludCAiZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb24iCi0gICAgdXNhZ2UoKQotCi1mb3Igb3B0LCBhcmcgaW4gb3B0bGlzdDoKLSAgICBpZiBvcHQgPT0gJy1hJzoKLSAgICAgICAgd2FudGVkX2FyY2hzID0gc3RyaW5nLnNwbGl0KGFyZywnLCcpCi0gICAgZWxpZiBvcHQgPT0gJy1jJzoKLSAgICAgICAgd2FudGVkX2NvbmZpZyA9IGFyZwotICAgIGVsaWYgb3B0ID09ICctdic6Ci0gICAgICAgIGtlcm5lbC52ZXJib3NlU2VhcmNoID0gMQotICAgICAgICBrZXJuZWwudmVyYm9zZUZpbmQgICA9IDEKLSAgICAgICAgdmVyYm9zZSA9IDEKLSAgICBlbHNlOgotICAgICAgICB1c2FnZSgpCi0KLWlmIGxlbihhcmdzKSA8IDI6Ci0gICAgdXNhZ2UoKQotCi1rZXJuZWxfcm9vdCA9IGFyZ3NbMF0KLWlmIG5vdCBvcy5wYXRoLmV4aXN0cyhrZXJuZWxfcm9vdCk6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiBkaXJlY3RvcnkgJyVzJyBkb2VzIG5vdCBleGlzdFxuIiAlIGtlcm5lbF9yb290ICkKLSAgICBzeXMuZXhpdCgxKQotCi1pZiBub3Qgb3MucGF0aC5pc2RpcihrZXJuZWxfcm9vdCk6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeVxuIiAlIGtlcm5lbF9yb290ICkKLSAgICBzeXMuZXhpdCgxKQotCi1pZiBub3Qgb3MucGF0aC5pc2RpcihrZXJuZWxfcm9vdCsiL2luY2x1ZGUvbGludXgiKToKLSAgICBzeXMuc3RkZXJyLndyaXRlKCAiZXJyb3I6ICclcycgZG9lcyBub3QgaGF2ZSBhbiAnaW5jbHVkZS9saW51eCcgZGlyZWN0b3J5XG4iICUga2VybmVsX3Jvb3QgKQotICAgIHN5cy5leGl0KDEpCi0KLWlmIHdhbnRlZF9jb25maWc6Ci0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHdhbnRlZF9jb25maWcpOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCAiZXJyb3I6IGZpbGUgJyVzJyBkb2VzIG5vdCBleGlzdFxuIiAlIHdhbnRlZF9jb25maWcgKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHdhbnRlZF9jb25maWcpOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCAiZXJyb3I6ICclcycgaXMgbm90IGEgZmlsZVxuIiAlIHdhbnRlZF9jb25maWcgKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0jIGZpbmQgYWxsIGFyY2hpdGVjdHVyZXMgaW4gdGhlIGtlcm5lbCB0cmVlCi1hcmNocyAgID0gW10KLWZvciBhcmNoZGlyIGluIG9zLmxpc3RkaXIoa2VybmVsX3Jvb3QrIi9hcmNoIik6Ci0gICAgaWYgb3MucGF0aC5leGlzdHMoIiVzL2FyY2gvJXMvaW5jbHVkZS9hc20iICUgKGtlcm5lbF9yb290LCBhcmNoZGlyKSk6Ci0gICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCAiRm91bmQgYXJjaCAnJXMnIiAlIGFyY2hkaXIKLSAgICAgICAgYXJjaHMuYXBwZW5kKGFyY2hkaXIpCi0KLSMgaWYgd2UncmUgdXNpbmcgdGhlICdrZXJuZWxfaGVhZGVycycgZGlyZWN0b3J5LCB0aGVyZSBpcyBvbmx5IGFzbS8KLSMgYW5kIG5vIG90aGVyIGFzbS08YXJjaD4gZGlyZWN0b3JpZXMKLSMKLWluX2tlcm5lbF9oZWFkZXJzID0gRmFsc2UKLWlmIGxlbihhcmNocykgPT0gMDoKLSAgICAjIHRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlJ3JlIHVzaW5nIHRoZSAna2VybmVsX2hlYWRlcnMnIGRpcmVjdG9yeQotICAgIGlmIG9zLnBhdGguaXNkaXIoa2VybmVsX3Jvb3QrIi9hc20iKToKLSAgICAgICAgaW5fa2VybmVsX2hlYWRlcnMgPSBUcnVlCi0gICAgICAgIGFyY2hzID0gWyAiYXJtIiwgIm1pcHMiXQotCi0jIGlmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgc29tZSBhcmNoaXRlY3R1cmVzIHdpdGggLWEgPGFyY2hzPiBlbnN1cmUgdGhhdAotIyBhbGwgdGhvc2UgaGUgd2FudHMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBrZXJuZWwgaW5jbHVkZSB0cmVlCi1pZiB3YW50ZWRfYXJjaHMgIT0gTm9uZToKLSAgICBpZiBpbl9rZXJuZWxfaGVhZGVycyBhbmQgd2FudGVkX2FyY2hzICE9IFsgImFybSIsICJtaXBzIiBdOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCAiZXJyb3I6IHdoZW4gcGFyc2luZyBrZXJuZWxfaGVhZGVycywgb25seSAnYXJtJyBhbmQgJ21pcHMnIGFyY2hpdGVjdHVyZXMgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50XG4iICkKLSAgICAgICAgc3lzLmV4aXQoMSkKLSAgICBtaXNzaW5nID0gW10KLSAgICBmb3IgYXJjaCBpbiB3YW50ZWRfYXJjaHM6Ci0gICAgICAgIGlmIGFyY2ggbm90IGluIGFyY2hzOgotICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoYXJjaCkKLSAgICBpZiBsZW4obWlzc2luZykgPiAwOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCAiZXJyb3I6IHRoZSBmb2xsb3dpbmcgcmVxdWVzdGVkIGFyY2hpdGVjdHVyZXMgYXJlIG5vdCBpbiB0aGUga2VybmVsIHRyZWU6ICIgKQotICAgICAgICBmb3IgYSBpbiBtaXNzaW5nOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggIiAlcyIgJSBhICkKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggIlxuIiApCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBhcmNocyA9IHdhbnRlZF9hcmNocwotCi0jIGhlbHBlciBmdW5jdGlvbiB1c2VkIHRvIHdhbGsgdGhlIHVzZXIgZmlsZXMKLWRlZiBwYXJzZV9maWxlKHBhdGgsIHBhcnNlcik6Ci0gICAgI3ByaW50ICJwYXJzZSAlcyIgJSBwYXRoCi0gICAgcGFyc2VyLnBhcnNlRmlsZShwYXRoKQotCi0KLSMgcmVtb3ZlIHByZXZpb3VzIGRlc3RpbmF0aW9uIGRpcmVjdG9yeQotI2Rlc3RkaXIgPSAiL3RtcC9iaW9uaWMta2VybmVsLWhlYWRlcnMvIgotI2NsZWFudXBfZGlyKGRlc3RkaXIpCi0KLSMgdHJ5IHRvIHJlYWQgdGhlIGNvbmZpZyBmaWxlCi10cnk6Ci0gICAgY3BhcnNlciA9IGtlcm5lbC5Db25maWdQYXJzZXIoKQotICAgIGlmIHdhbnRlZF9jb25maWc6Ci0gICAgICAgIGNwYXJzZXIucGFyc2VGaWxlKCB3YW50ZWRfY29uZmlnICkKLWV4Y2VwdDoKLSAgICBzeXMuc3RkZXJyLndyaXRlKCAiZXJyb3I6IGNhbid0IHBhcnNlICclcyciICUgd2FudGVkX2NvbmZpZyApCi0gICAgc3lzLmV4aXQoMSkKLQota2VybmVsX2NvbmZpZyA9IGNwYXJzZXIuZ2V0RGVmaW5pdGlvbnMoKQotCi0jIGZpcnN0LCBvYnRhaW4gdGhlIGxpc3Qgb2Yga2VybmVsIGZpbGVzIHVzZWQgYnkgb3VyIGNsaWVudHMKLWZwYXJzZXIgPSBrZXJuZWwuSGVhZGVyU2Nhbm5lcigpCi1kaXJfZXhjbHVkZXM9WyIucmVwbyIsImV4dGVybmFsL2tlcm5lbC1oZWFkZXJzIiwibmRrIiwib3V0IiwicHJlYnVpbHQiLCJiaW9uaWMvbGliYy9rZXJuZWwiLCJkZXZlbG9wbWVudC9uZGsiLCJleHRlcm5hbC9xZW11L2Rpc3RyaWIiXQotd2Fsa19zb3VyY2VfZmlsZXMoIGFyZ3NbMTpdLCBwYXJzZV9maWxlLCBmcGFyc2VyLCBleGNsdWRlcz1bIi4vIitmIGZvciBmIGluIGRpcl9leGNsdWRlc10gKQotaGVhZGVycyA9IGZwYXJzZXIuZ2V0SGVhZGVycygpCi1maWxlcyAgID0gZnBhcnNlci5nZXRGaWxlcygpCi0KLSMgbm93IHJlY3Vyc2l2ZWx5IHNjYW4gdGhlIGtlcm5lbCBoZWFkZXJzIGZvciBhZGRpdGlvbm5hbCBzdWItaW5jbHVkZWQgaGVhZGVycwotaHBhcnNlciA9IGtlcm5lbC5LZXJuZWxIZWFkZXJGaW5kZXIoaGVhZGVycyxhcmNocyxrZXJuZWxfcm9vdCxrZXJuZWxfY29uZmlnKQotaGVhZGVycyA9IGhwYXJzZXIuc2NhbkZvckFsbEFyY2hzKCkKLQotaWYgMDogICAgIyBqdXN0IGZvciBkZWJ1Z2dpbmcKLSAgICBkdW1wSGVhZGVyVXNlcnMgPSBGYWxzZQotCi0gICAgcHJpbnQgInRoZSBmb2xsb3dpbmcgJWQgaGVhZGVyczoiICUgbGVuKGhlYWRlcnMpCi0gICAgZm9yIGggaW4gc29ydGVkKGhlYWRlcnMpOgotICAgICAgICBpZiBkdW1wSGVhZGVyVXNlcnM6Ci0gICAgICAgICAgICBwcmludCAiICAlcyAoJXMpIiAlIChoLCByZXByKGhwYXJzZXIuZ2V0SGVhZGVyVXNlcnMoaCkpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgIiAgJXMiICUgaAotCi0gICAgcHJpbnQgImFyZSB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgJWQgZmlsZXM6IiAlIGxlbihmaWxlcykKLSAgICBmb3IgZiBpbiBzb3J0ZWQoZmlsZXMpOgotICAgICAgICBwcmludCAiICAlcyIgJSBmCi0KLSAgICBzeXMuZXhpdCgwKQotCi1mb3IgaCBpbiBzb3J0ZWQoaGVhZGVycyk6Ci0gICAgcHJpbnQgIiVzIiAlIGgKLQotc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL2ZpbmRfdXNlcnMucHkgYi9saWJjL2tlcm5lbC90b29scy9maW5kX3VzZXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1ZWUzMDhjLi4wMDAwMDAwCi0tLSBhL2xpYmMva2VybmVsL3Rvb2xzL2ZpbmRfdXNlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgdGhpcyBwcm9ncmFtIGlzIHVzZWQgdG8gZmluZCBzb3VyY2UgY29kZSB0aGF0IGluY2x1ZGVzIGxpbnV4IGtlcm5lbCBoZWFkZXJzIGRpcmVjdGx5Ci0jIChlLmcuIHdpdGggI2luY2x1ZGUgPGxpbnV4Ly4uLj4gb3IgI2luY2x1ZGUgPGFzbS8uLi4+KQotIwotIyB0aGVuIGl0IGxpc3RzCi0KLWltcG9ydCBzeXMsIGNwcCwgZ2xvYiwgb3MsIHJlLCBnZXRvcHQKLWltcG9ydCBrZXJuZWwKLWZyb20gdXRpbHMgaW1wb3J0ICoKLWZyb20gZGVmYXVsdHMgaW1wb3J0ICoKLQotCi1kZWYgdXNhZ2UoKToKLSAgICBwcmludCAiIiJcCi0gIHVzYWdlOiAgZmluZF91c2Vycy5weSBbLXZdIChmaWxlfGRpcmVjdG9yeXxAbGlzdGZpbGUpKwotCi0gICAgdGhpcyBwcm9ncmFtIGlzIHVzZWQgdG8gc2NhbiBhIGxpc3Qgb2YgZmlsZXMgb3IgZGlyZWN0b3JpZXMgZm9yCi0gICAgc291cmNlcyB0aGF0IGluY2x1ZGUga2VybmVsIGhlYWRlcnMgZGlyZWN0bHkuIHRoZSBwcm9ncmFtIHByaW50cwotICAgIHRoZSBsaXN0IG9mIHNhaWQgc291cmNlIGZpbGVzIHdoZW4gaXQncyBkb25lLgotCi0gICAgd2hlbiBzY2FubmluZyBkaXJlY3Rvcmllcywgb25seSBmaWxlcyBtYXRjaGluZyB0aGUgZm9sbG93aW5nCi0gICAgZXh0ZW5zaW9uIHdpbGwgYmUgc2VhcmNoZWQ6IC5jIC5jcHAgLlMgLmgKLQotICAgIHVzZSAtdiB0byBlbmFibGUgdmVyYm9zZSBvdXRwdXQKLSIiIgotICAgIHN5cy5leGl0KDEpCi0KLQotdHJ5OgotICAgIG9wdGxpc3QsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KCBzeXMuYXJndlsxOl0sICd2JyApCi1leGNlcHQ6Ci0gICAgIyB1bnJlY29nbml6ZWQgb3B0aW9uCi0gICAgcHJpbnQgImVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uIgotICAgIHVzYWdlKCkKLQotZm9yIG9wdCwgYXJnIGluIG9wdGxpc3Q6Ci0gICAgaWYgb3B0ID09ICctdic6Ci0gICAgICAgIGtlcm5lbC52ZXJib3NlU2VhcmNoID0gMQotICAgICAgICBrZXJuZWwudmVyYm9zZUZpbmQgICA9IDEKLSAgICBlbHNlOgotICAgICAgICB1c2FnZSgpCi0KLWlmIGxlbihhcmdzKSA8IDE6Ci0gICAgdXNhZ2UoKQotCi0jIGhlbHBlciBmdW5jdGlvbiB1c2VkIHRvIHdhbGsgdGhlIHVzZXIgZmlsZXMKLWRlZiBwYXJzZV9maWxlKHBhdGgsIHBhcnNlcik6Ci0gICAgcGFyc2VyLnBhcnNlRmlsZShwYXRoKQotCi0KLSMgZmlyc3QsIG9idGFpbiB0aGUgbGlzdCBvZiBrZXJuZWwgZmlsZXMgdXNlZCBieSBvdXIgY2xpZW50cwotIyBhdm9pZCBwYXJzaW5nIHRoZSAna2VybmVsX2hlYWRlcnMnIGRpcmVjdG9yeSBpdHNlbGYgc2luY2Ugd2UKLSMgdXNlIHRoaXMgcHJvZ3JhbSB3aXRoIHRoZSBBbmRyb2lkIHNvdXJjZSB0cmVlIGJ5IGRlZmF1bHQuCi0jCi1mcGFyc2VyID0ga2VybmVsLkhlYWRlclNjYW5uZXIoKQotd2Fsa19zb3VyY2VfZmlsZXMoIGFyZ3MsIHBhcnNlX2ZpbGUsIGZwYXJzZXIsIGV4Y2x1ZGVzPVsia2VybmVsX2hlYWRlcnMiLCJvcmlnaW5hbCJdICkKLWZpbGVzICAgPSBmcGFyc2VyLmdldEZpbGVzKCkKLQotZm9yIGYgaW4gc29ydGVkKGZpbGVzKToKLSAgICBwcmludCBmCi0KLXN5cy5leGl0KDApCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC90b29scy9nZW5lcmF0ZV91YXBpX2hlYWRlcnMuc2ggYi9saWJjL2tlcm5lbC90b29scy9nZW5lcmF0ZV91YXBpX2hlYWRlcnMuc2gKaW5kZXggOWVlYjJhNS4uMzg2MTU5YSAxMDA3NTUKLS0tIGEvbGliYy9rZXJuZWwvdG9vbHMvZ2VuZXJhdGVfdWFwaV9oZWFkZXJzLnNoCisrKyBiL2xpYmMva2VybmVsL3Rvb2xzL2dlbmVyYXRlX3VhcGlfaGVhZGVycy5zaApAQCAtMTQ4LDIyICsxNDgsMjggQEAKICAgZXhpdCAxCiBmaQogCitpZiBbWyAtZCAiJHtLRVJORUxfRElSfS9saW51eC1zdGFibGUiIF1dOyB0aGVuCisgIHNyY19kaXI9ImxpbnV4LXN0YWJsZSIKK2Vsc2UKKyAgc3JjX2Rpcj0iY29tbW9uIgorZmkKKwogaWYgW1sgJHtLRVJORUxfRE9XTkxPQUR9IC1lcSAxIF1dOyB0aGVuCiAgIFRNUERJUj0kKG1rdGVtcCAtZCAvdG1wL2FuZHJvaWRfa2VybmVsWFhYWFhYWFgpCiAgIGNkICIke1RNUERJUn0iCiAgIGVjaG8gIkZldGNoaW5nIGFuZHJvaWQga2VybmVsIHNvdXJjZSAke0tFUk5FTF9WRVJTSU9OfSIKICAgZ2l0IGNsb25lIGh0dHBzOi8vYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tL2tlcm5lbC9jb21tb24uZ2l0Ci0gIGNkIGNvbW1vbgorICBjZCAiJHtDT01NT059IgogICBnaXQgY2hlY2tvdXQgIiR7S0VSTkVMX1ZFUlNJT059IgogICBLRVJORUxfRElSPSIke1RNUERJUn0iCiBlbGlmIFtbICIke0tFUk5FTF9ESVJ9IiA9PSAiIiBdXTsgdGhlbgogICBlY2hvICJNdXN0IHNwZWNpZnkgb25lIG9mIC0tdXNlLWtlcm5lbC1kaXIgb3IgLS1kb3dubG9hZC1rZXJuZWwuIgogICBleGl0IDEKLWVsaWYgW1sgISAtZCAiJHtLRVJORUxfRElSfSIgXV0gfHwgW1sgISAtZCAiJHtLRVJORUxfRElSfS9jb21tb24iIF1dOyB0aGVuCi0gIGVjaG8gIlRoZSBrZXJuZWwgZGlyZWN0b3J5ICRLRVJORUxfRElSIG9yICRLRVJORUxfRElSL2NvbW1vbiBkb2VzIG5vdCBleGlzdC4iCitlbGlmIFtbICEgLWQgIiR7S0VSTkVMX0RJUn0iIF1dIHx8IFtbICEgLWQgIiR7S0VSTkVMX0RJUn0vJHtzcmNfZGlyfSIgXV07IHRoZW4KKyAgZWNobyAiVGhlIGtlcm5lbCBkaXJlY3RvcnkgJEtFUk5FTF9ESVIgb3IgJEtFUk5FTF9ESVIvJHtzcmNfZGlyfSBkb2VzIG5vdCBleGlzdC4iCiAgIGV4aXQgMQogZWxzZQotICBjZCAiJHtLRVJORUxfRElSfS9jb21tb24iCisgIGNkICIke0tFUk5FTF9ESVJ9LyR7c3JjX2Rpcn0iCiBmaQogCiBpZiBbWyAke1NLSVBfR0VORVJBVElPTn0gLWVxIDAgXV07IHRoZW4KQEAgLTE3NSwyNyArMTgxLDI3IEBACiBmaQogCiAjIENvcHkgYWxsIG9mIHRoZSBpbmNsdWRlL3VhcGkgZmlsZXMgdG8gdGhlIGtlcm5lbCBoZWFkZXJzIHVhcGkgZGlyZWN0b3J5LgotY29weV9oZHJzICIke0tFUk5FTF9ESVJ9L2NvbW1vbi9pbmNsdWRlL3VhcGkiICIke0FORFJPSURfS0VSTkVMX0RJUn0vdWFwaSIKK2NvcHlfaGRycyAiJHtLRVJORUxfRElSfS8ke3NyY19kaXJ9L2luY2x1ZGUvdWFwaSIgIiR7QU5EUk9JRF9LRVJORUxfRElSfS91YXBpIgogCiAjIENvcHkgdGhlIHN0YWdpbmcgZmlsZXMgdG8gdWFwaS9saW51eC4KLWNvcHlfaGRycyAiJHtLRVJORUxfRElSfS9jb21tb24vZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaSIgXAorY29weV9oZHJzICIke0tFUk5FTF9ESVJ9LyR7c3JjX2Rpcn0vZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaSIgXAogICAgICAgICAgICIke0FORFJPSURfS0VSTkVMX0RJUn0vdWFwaS9saW51eCIgIm5vLWNvcHktZGlycyIKIAogIyBDb3B5IHRoZSBnZW5lcmF0ZWQgaGVhZGVycy4KLWNvcHlfaGRycyAiJHtLRVJORUxfRElSfS9jb21tb24vaW5jbHVkZS9nZW5lcmF0ZWQvdWFwaSIgXAorY29weV9oZHJzICIke0tFUk5FTF9ESVJ9LyR7c3JjX2Rpcn0vaW5jbHVkZS9nZW5lcmF0ZWQvdWFwaSIgXAogICAgICAgICAgICIke0FORFJPSURfS0VSTkVMX0RJUn0vdWFwaSIKIAogZm9yIGFyY2ggaW4gIiR7QVJDSF9MSVNUW0BdfSI7IGRvCiAgICMgQ29weSBhcmNoIGhlYWRlcnMuCi0gIGNvcHlfaGRycyAiJHtLRVJORUxfRElSfS9jb21tb24vYXJjaC8ke2FyY2h9L2luY2x1ZGUvdWFwaSIgXAorICBjb3B5X2hkcnMgIiR7S0VSTkVMX0RJUn0vJHtzcmNfZGlyfS9hcmNoLyR7YXJjaH0vaW5jbHVkZS91YXBpIiBcCiAgICAgICAgICAgICAiJHtBTkRST0lEX0tFUk5FTF9ESVJ9L3VhcGkvYXNtLSR7YXJjaH0iCiAgICMgQ29weSB0aGUgZ2VuZXJhdGVkIGFyY2ggaGVhZGVycy4KLSAgY29weV9oZHJzICIke0tFUk5FTF9ESVJ9L2NvbW1vbi9hcmNoLyR7YXJjaH0vaW5jbHVkZS9nZW5lcmF0ZWQvdWFwaSIgXAorICBjb3B5X2hkcnMgIiR7S0VSTkVMX0RJUn0vJHtzcmNfZGlyfS9hcmNoLyR7YXJjaH0vaW5jbHVkZS9nZW5lcmF0ZWQvdWFwaSIgXAogICAgICAgICAgICAgIiR7QU5EUk9JRF9LRVJORUxfRElSfS91YXBpL2FzbS0ke2FyY2h9IgogCiAgICMgU3BlY2lhbCBjb3B5IG9mIGdlbmVyYXRlZCBoZWFkZXIgZmlsZXMgZnJvbSBhcmNoLzxBUkNIPi9nZW5lcmF0ZWQvYXNtIHRoYXQKICAgIyBhbHNvIGV4aXN0IGluIHVhcGkvYXNtLWdlbmVyaWMuCi0gIGNvcHlfaWZfZXhpc3RzICIke0tFUk5FTF9ESVJ9L2NvbW1vbi9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMiIFwKLSAgICAgICAgICAgICAgICAgIiR7S0VSTkVMX0RJUn0vY29tbW9uL2FyY2gvJHthcmNofS9pbmNsdWRlL2dlbmVyYXRlZC9hc20iIFwKKyAgY29weV9pZl9leGlzdHMgIiR7S0VSTkVMX0RJUn0vJHtzcmNfZGlyfS9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMiIFwKKyAgICAgICAgICAgICAgICAgIiR7S0VSTkVMX0RJUn0vJHtzcmNfZGlyfS9hcmNoLyR7YXJjaH0vaW5jbHVkZS9nZW5lcmF0ZWQvYXNtIiBcCiAgICAgICAgICAgICAgICAgICIke0FORFJPSURfS0VSTkVMX0RJUn0vdWFwaS9hc20tJHthcmNofS9hc20iCiBkb25lCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5IGIvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQppbmRleCAzZjFkMWU2Li43Mzg2MmRhIDEwMDc1NQotLS0gYS9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisrKyBiL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMKLWltcG9ydCBzeXMsIGNwcCwga2VybmVsLCBnbG9iLCBvcywgcmUsIGdldG9wdCwgY2xlYW5faGVhZGVyCitpbXBvcnQgc3lzLCBjcHAsIGtlcm5lbCwgZ2xvYiwgb3MsIHJlLCBnZXRvcHQsIGNsZWFuX2hlYWRlciwgc3VicHJvY2VzcwogZnJvbSBkZWZhdWx0cyBpbXBvcnQgKgogZnJvbSB1dGlscyBpbXBvcnQgKgogCkBAIC00MCwxMSArNDAsMjIgQEAKICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihvcmlnaW5hbF9kaXIpOgogICAgICAgICBwYW5pYyggIk1pc3NpbmcgZGlyZWN0b3J5LCBwbGVhc2Ugc3BlY2lmeSBvbmUgdGhyb3VnaCBjb21tYW5kLWxpbmU6ICVzXG4iICUgb3JpZ2luYWxfZGlyICkKIAorIyBGaXhtZTogVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlciBuZXh0IHJlbGVhc2UuCisjIERvIG5vdCB1cGRhdGUgaW9uLmggaW9uX3Rlc3QuaCB1bnRpbCBhZnRlciBuZXh0IHJlbGVhc2UgaW4gYW9zcC4KK3NvdXJjZSA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCdnaXQgcmVtb3RlIHNob3cnLCBzaGVsbD1UcnVlKS5zdHJpcCgpCitza2lwX2lvbiA9IEZhbHNlCitpZiBzb3VyY2UgPT0gImFvc3AiOgorICAgIHNraXBfaW9uID0gVHJ1ZQorCiAjIGZpbmQgYWxsIHNvdXJjZSBmaWxlcyBpbiAnb3JpZ2luYWwnCiAjCiBzb3VyY2VzID0gW10KK3dhcm5pbmdfaW9uID0gW10KIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKCBvcmlnaW5hbF9kaXIgKToKICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgaWYgc2tpcF9pb24gYW5kIChmaWxlID09ICJpb24uaCIgb3IgZmlsZSA9PSAiaW9uX3Rlc3QuaCIpOgorICAgICAgICAgICAgd2FybmluZ19pb24uYXBwZW5kKCIgIFNraXBwZWQgZmlsZSAlcy8lcyIgJSAocm9vdCwgZmlsZSkpCisgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGUpCiAgICAgICAgIGlmIGV4dCA9PSAiLmgiOgogICAgICAgICAgICAgc291cmNlcy5hcHBlbmQoICIlcy8lcyIgJSAocm9vdCxmaWxlKSApCkBAIC05MCw0ICsxMDEsNyBAQAogCiBiLnVwZGF0ZUdpdEZpbGVzKCkKIAoraWYgd2FybmluZ19pb246CisgICAgcHJpbnQgIk5PVEU6IER1ZSB0byBpbXBvcnQgaW50byBhb3NwLCBzb21lIGZpbGVzIHdlcmUgbm90IHByb2Nlc3NlZC4iCisgICAgcHJpbnQgIlxuIi5qb2luKHdhcm5pbmdfaW9uKQogc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vYnl0ZW9yZGVyLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2J5dGVvcmRlci5oCmluZGV4IDBkMmJkZjMuLjZmMTdhNDggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vYnl0ZW9yZGVyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9ieXRlb3JkZXIuaApAQCAtMTgsMTEgKzE4LDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fQllURU9SREVSX0gKICNkZWZpbmUgX19BU01fQVJNX0JZVEVPUkRFUl9ICi0jaWZkZWYgX19BUk1FQl9fCi0jaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaD4KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZWxzZQogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+CiAjZW5kaWYKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vaHdjYXAuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vaHdjYXAuaAppbmRleCA1NGU0MzNjLi5lNzBmM2I4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2h3Y2FwLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9od2NhcC5oCkBAIC00NCw1ICs0NCw3IEBACiAjZGVmaW5lIEhXQ0FQX0lESVZUICgxIDw8IDE4KQogI2RlZmluZSBIV0NBUF9WRlBEMzIgKDEgPDwgMTkpCiAjZGVmaW5lIEhXQ0FQX0lESVYgKEhXQ0FQX0lESVZBIHwgSFdDQVBfSURJVlQpCi0jZW5kaWYKKyNkZWZpbmUgSFdDQVBfTFBBRSAoMSA8PCAyMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhXQ0FQX0VWVFNUUk0gKDEgPDwgMjEpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20va3ZtLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL2t2bS5oCmluZGV4IDMxYTJhMmYuLjJiNWExN2UgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20va3ZtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9rdm0uaApAQCAtNjEsNzQgKzYxLDk0IEBACiB9OwogI2RlZmluZSBLVk1fQVJNX1RBUkdFVF9DT1JURVhfQTE1IDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtWTV9BUk1fTlVNX1RBUkdFVFMgMQorI2RlZmluZSBLVk1fQVJNX1RBUkdFVF9DT1JURVhfQTcgMQorI2RlZmluZSBLVk1fQVJNX05VTV9UQVJHRVRTIDIKICNkZWZpbmUgS1ZNX0FSTV9ERVZJQ0VfVFlQRV9TSElGVCAwCiAjZGVmaW5lIEtWTV9BUk1fREVWSUNFX1RZUEVfTUFTSyAoMHhmZmZmIDw8IEtWTV9BUk1fREVWSUNFX1RZUEVfU0hJRlQpCi0jZGVmaW5lIEtWTV9BUk1fREVWSUNFX0lEX1NISUZUIDE2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fQVJNX0RFVklDRV9JRF9TSElGVCAxNgogI2RlZmluZSBLVk1fQVJNX0RFVklDRV9JRF9NQVNLICgweGZmZmYgPDwgS1ZNX0FSTV9ERVZJQ0VfSURfU0hJRlQpCiAjZGVmaW5lIEtWTV9BUk1fREVWSUNFX1ZHSUNfVjIgMAogI2RlZmluZSBLVk1fVkdJQ19WMl9BRERSX1RZUEVfRElTVCAwCi0jZGVmaW5lIEtWTV9WR0lDX1YyX0FERFJfVFlQRV9DUFUgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1ZHSUNfVjJfQUREUl9UWVBFX0NQVSAxCiAjZGVmaW5lIEtWTV9WR0lDX1YyX0RJU1RfU0laRSAweDEwMDAKICNkZWZpbmUgS1ZNX1ZHSUNfVjJfQ1BVX1NJWkUgMHgyMDAwCiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9QT1dFUl9PRkYgMAotc3RydWN0IGt2bV92Y3B1X2luaXQgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBrdm1fdmNwdV9pbml0IHsKICBfX3UzMiB0YXJnZXQ7CiAgX191MzIgZmVhdHVyZXNbN107CiB9Owotc3RydWN0IGt2bV9zcmVncyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGt2bV9zcmVncyB7CiB9Owogc3RydWN0IGt2bV9mcHUgewogfTsKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIHsKIH07CiBzdHJ1Y3Qga3ZtX2RlYnVnX2V4aXRfYXJjaCB7CiB9Owotc3RydWN0IGt2bV9zeW5jX3JlZ3MgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBrdm1fc3luY19yZWdzIHsKIH07CiBzdHJ1Y3Qga3ZtX2FyY2hfbWVtb3J5X3Nsb3QgewogfTsKLSNkZWZpbmUgS1ZNX1JFR19BUk1fQ09QUk9DX01BU0sgMHgwMDAwMDAwMDBGRkYwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTV9DT1BST0NfTUFTSyAweDAwMDAwMDAwMEZGRjAwMDAKICNkZWZpbmUgS1ZNX1JFR19BUk1fQ09QUk9DX1NISUZUIDE2CiAjZGVmaW5lIEtWTV9SRUdfQVJNXzMyX09QQzJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDcKICNkZWZpbmUgS1ZNX1JFR19BUk1fMzJfT1BDMl9TSElGVCAwCi0jZGVmaW5lIEtWTV9SRUdfQVJNX09QQzFfTUFTSyAweDAwMDAwMDAwMDAwMDAwNzgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9SRUdfQVJNX09QQzFfTUFTSyAweDAwMDAwMDAwMDAwMDAwNzgKICNkZWZpbmUgS1ZNX1JFR19BUk1fT1BDMV9TSElGVCAzCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0NSTV9NQVNLIDB4MDAwMDAwMDAwMDAwMDc4MAogI2RlZmluZSBLVk1fUkVHX0FSTV9DUk1fU0hJRlQgNwotI2RlZmluZSBLVk1fUkVHX0FSTV8zMl9DUk5fTUFTSyAweDAwMDAwMDAwMDAwMDc4MDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9SRUdfQVJNXzMyX0NSTl9NQVNLIDB4MDAwMDAwMDAwMDAwNzgwMAogI2RlZmluZSBLVk1fUkVHX0FSTV8zMl9DUk5fU0hJRlQgMTEKKyNkZWZpbmUgQVJNX0NQMTVfUkVHX1NISUZUX01BU0soeCxuKSAgICgoKHgpIDw8IEtWTV9SRUdfQVJNXyAjIyBuICMjIF9TSElGVCkgJiBLVk1fUkVHX0FSTV8gIyMgbiAjIyBfTUFTSykKKyNkZWZpbmUgX19BUk1fQ1AxNV9SRUcob3AxLGNybixjcm0sb3AyKSAgIChLVk1fUkVHX0FSTSB8ICgxNSA8PCBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQpIHwgICBBUk1fQ1AxNV9SRUdfU0hJRlRfTUFTSyhvcDEsIE9QQzEpIHwgICBBUk1fQ1AxNV9SRUdfU0hJRlRfTUFTSyhjcm4sIDMyX0NSTikgfCAgIEFSTV9DUDE1X1JFR19TSElGVF9NQVNLKGNybSwgQ1JNKSB8ICAgQVJNX0NQMTVfUkVHX1NISUZUX01BU0sob3AyLCAzMl9PUEMyKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFSTV9DUDE1X1JFRzMyKC4uLikgKF9fQVJNX0NQMTVfUkVHKF9fVkFfQVJHU19fKSB8IEtWTV9SRUdfU0laRV9VMzIpCisjZGVmaW5lIF9fQVJNX0NQMTVfUkVHNjQob3AxLGNybSkgICAoX19BUk1fQ1AxNV9SRUcob3AxLCAwLCBjcm0sIDApIHwgS1ZNX1JFR19TSVpFX1U2NCkKKyNkZWZpbmUgQVJNX0NQMTVfUkVHNjQoLi4uKSBfX0FSTV9DUDE1X1JFRzY0KF9fVkFfQVJHU19fKQorI2RlZmluZSBLVk1fUkVHX0FSTV9USU1FUl9DVEwgQVJNX0NQMTVfUkVHMzIoMCwgMTQsIDMsIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTV9USU1FUl9DTlQgQVJNX0NQMTVfUkVHNjQoMSwgMTQpCisjZGVmaW5lIEtWTV9SRUdfQVJNX1RJTUVSX0NWQUwgQVJNX0NQMTVfUkVHNjQoMywgMTQpCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0NPUkUgKDB4MDAxMCA8PCBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQpCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0NPUkVfUkVHKG5hbWUpIChvZmZzZXRvZihzdHJ1Y3Qga3ZtX3JlZ3MsIG5hbWUpIC8gNCkKLSNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVggKDB4MDAxMSA8PCBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTV9ERU1VWCAoMHgwMDExIDw8IEtWTV9SRUdfQVJNX0NPUFJPQ19TSElGVCkKICNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfSURfTUFTSyAweDAwMDAwMDAwMDAwMEZGMDAKICNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfSURfU0hJRlQgOAogI2RlZmluZSBLVk1fUkVHX0FSTV9ERU1VWF9JRF9DQ1NJRFIgKDB4MDAgPDwgS1ZNX1JFR19BUk1fREVNVVhfSURfU0hJRlQpCi0jZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYX1ZBTF9NQVNLIDB4MDAwMDAwMDAwMDAwMDBGRgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfVkFMX01BU0sgMHgwMDAwMDAwMDAwMDAwMEZGCiAjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYX1ZBTF9TSElGVCAwCiAjZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUCAoMHgwMDEyIDw8IEtWTV9SRUdfQVJNX0NPUFJPQ19TSElGVCkKICNkZWZpbmUgS1ZNX1JFR19BUk1fVkZQX01BU0sgMHgwMDAwMDAwMDAwMDBGRkZGCi0jZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9CQVNFX1JFRyAweDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9CQVNFX1JFRyAweDAKICNkZWZpbmUgS1ZNX1JFR19BUk1fVkZQX0ZQU0lEIDB4MTAwMAogI2RlZmluZSBLVk1fUkVHX0FSTV9WRlBfRlBTQ1IgMHgxMDAxCiAjZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9NVkZSMSAweDEwMDYKLSNkZWZpbmUgS1ZNX1JFR19BUk1fVkZQX01WRlIwIDB4MTAwNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1JFR19BUk1fVkZQX01WRlIwIDB4MTAwNwogI2RlZmluZSBLVk1fUkVHX0FSTV9WRlBfRlBFWEMgMHgxMDA4CiAjZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9GUElOU1QgMHgxMDA5CiAjZGVmaW5lIEtWTV9SRUdfQVJNX1ZGUF9GUElOU1QyIDB4MTAwQQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiAwCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUyAxCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0NQVV9SRUdTIDIKKyNkZWZpbmUgS1ZNX0RFVl9BUk1fVkdJQ19DUFVJRF9TSElGVCAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0RFVl9BUk1fVkdJQ19DUFVJRF9NQVNLICgweGZmVUxMIDw8IEtWTV9ERVZfQVJNX1ZHSUNfQ1BVSURfU0hJRlQpCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfT0ZGU0VUX1NISUZUIDAKKyNkZWZpbmUgS1ZNX0RFVl9BUk1fVkdJQ19PRkZTRVRfTUFTSyAoMHhmZmZmZmZmZlVMTCA8PCBLVk1fREVWX0FSTV9WR0lDX09GRlNFVF9TSElGVCkKICNkZWZpbmUgS1ZNX0FSTV9JUlFfVFlQRV9TSElGVCAyNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0FSTV9JUlFfVFlQRV9NQVNLIDB4ZmYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vcGVyZl9yZWdzLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3BlcmZfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NWJjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3BlcmZfcmVncy5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9BUk1fUEVSRl9SRUdTX0gKKyNkZWZpbmUgX0FTTV9BUk1fUEVSRl9SRUdTX0gKK2VudW0gcGVyZl9ldmVudF9hcm1fcmVncyB7CisgUEVSRl9SRUdfQVJNX1IwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1JFR19BUk1fUjEsCisgUEVSRl9SRUdfQVJNX1IyLAorIFBFUkZfUkVHX0FSTV9SMywKKyBQRVJGX1JFR19BUk1fUjQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfUkVHX0FSTV9SNSwKKyBQRVJGX1JFR19BUk1fUjYsCisgUEVSRl9SRUdfQVJNX1I3LAorIFBFUkZfUkVHX0FSTV9SOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9SRUdfQVJNX1I5LAorIFBFUkZfUkVHX0FSTV9SMTAsCisgUEVSRl9SRUdfQVJNX0ZQLAorIFBFUkZfUkVHX0FSTV9JUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9SRUdfQVJNX1NQLAorIFBFUkZfUkVHX0FSTV9MUiwKKyBQRVJGX1JFR19BUk1fUEMsCisgUEVSRl9SRUdfQVJNX01BWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3B0cmFjZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9wdHJhY2UuaAppbmRleCA3ODE5MWFjLi45ZDM5ZDQ5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3B0cmFjZS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vcHRyYWNlLmgKQEAgLTQ0LDEwICs0NCwxMCBAQAogI2RlZmluZSBJUlEyNl9NT0RFIDB4MDAwMDAwMDIKICNkZWZpbmUgU1ZDMjZfTU9ERSAweDAwMDAwMDAzCiAjZGVmaW5lIFVTUl9NT0RFIDB4MDAwMDAwMTAKLSNkZWZpbmUgRklRX01PREUgMHgwMDAwMDAxMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSVJRX01PREUgMHgwMDAwMDAxMgogI2RlZmluZSBTVkNfTU9ERSAweDAwMDAwMDEzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGSVFfTU9ERSAweDAwMDAwMDExCisjZGVmaW5lIElSUV9NT0RFIDB4MDAwMDAwMTIKICNkZWZpbmUgQUJUX01PREUgMHgwMDAwMDAxNwogI2RlZmluZSBIWVBfTU9ERSAweDAwMDAwMDFhCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtNTYsNjMgKzU2LDY1IEBACiAjZGVmaW5lIE1PREUzMl9CSVQgMHgwMDAwMDAxMAogI2RlZmluZSBNT0RFX01BU0sgMHgwMDAwMDAxZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUFNSX1RfQklUIDB4MDAwMDAwMjAKKyNkZWZpbmUgVjRfUFNSX1RfQklUIDB4MDAwMDAwMjAKKyNkZWZpbmUgVjdNX1BTUl9UX0JJVCAweDAxMDAwMDAwCisjZGVmaW5lIFBTUl9UX0JJVCBWNF9QU1JfVF9CSVQKICNkZWZpbmUgUFNSX0ZfQklUIDB4MDAwMDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBTUl9JX0JJVCAweDAwMDAwMDgwCiAjZGVmaW5lIFBTUl9BX0JJVCAweDAwMDAwMTAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU1JfRV9CSVQgMHgwMDAwMDIwMAogI2RlZmluZSBQU1JfSl9CSVQgMHgwMTAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFNSX1FfQklUIDB4MDgwMDAwMDAKICNkZWZpbmUgUFNSX1ZfQklUIDB4MTAwMDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBTUl9DX0JJVCAweDIwMDAwMDAwCiAjZGVmaW5lIFBTUl9aX0JJVCAweDQwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU1JfTl9CSVQgMHg4MDAwMDAwMAogI2RlZmluZSBQU1JfZiAweGZmMDAwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU1JfcyAweDAwZmYwMDAwCiAjZGVmaW5lIFBTUl94IDB4MDAwMGZmMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBTUl9jIDB4MDAwMDAwZmYKICNkZWZpbmUgQVBTUl9NQVNLIDB4ZjgwZjAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBTUl9JU0VUX01BU0sgMHgwMTAwMDAxMAogI2RlZmluZSBQU1JfSVRfTUFTSyAweDA2MDBmYzAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU1JfRU5ESUFOX01BU0sgMHgwMDAwMDIwMAogI2RlZmluZSBQU1JfRU5EU1RBVEUgMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFRfVEVYVF9BRERSIDB4MTAwMDAKICNkZWZpbmUgUFRfREFUQV9BRERSIDB4MTAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUX1RFWFRfRU5EX0FERFIgMHgxMDAwOAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcHRfcmVncyB7CiAgbG9uZyB1cmVnc1sxOF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQVJNX2Nwc3IgdXJlZ3NbMTZdCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUk1fcGMgdXJlZ3NbMTVdCiAjZGVmaW5lIEFSTV9sciB1cmVnc1sxNF0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTV9zcCB1cmVnc1sxM10KICNkZWZpbmUgQVJNX2lwIHVyZWdzWzEyXQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJNX2ZwIHVyZWdzWzExXQogI2RlZmluZSBBUk1fcjEwIHVyZWdzWzEwXQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJNX3I5IHVyZWdzWzldCiAjZGVmaW5lIEFSTV9yOCB1cmVnc1s4XQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJNX3I3IHVyZWdzWzddCiAjZGVmaW5lIEFSTV9yNiB1cmVnc1s2XQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJNX3I1IHVyZWdzWzVdCiAjZGVmaW5lIEFSTV9yNCB1cmVnc1s0XQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJNX3IzIHVyZWdzWzNdCiAjZGVmaW5lIEFSTV9yMiB1cmVnc1syXQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJNX3IxIHVyZWdzWzFdCiAjZGVmaW5lIEFSTV9yMCB1cmVnc1swXQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJNX09SSUdfcjAgdXJlZ3NbMTddCiAjZGVmaW5lIEFSTV9WRlBSRUdTX1NJWkUgKCAzMiAqIDggICArIDQgICApCi0jZW5kaWYKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3NpZ25hbC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS9zaWduYWwuaAppbmRleCA5Mjk3YTcwLi5mZDM5YWFhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3NpZ25hbC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vc2lnbmFsLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogc3RydWN0IHNpZ2luZm87CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBOU0lHIDMyCisjZGVmaW5lIF9LRVJORUxfTlNJRyAzMgogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OwogI2RlZmluZSBTSUdIVVAgMQogI2RlZmluZSBTSUdJTlQgMgpAQCAtNjYsOCArNjYsOCBAQAogI2RlZmluZSBTSUdTWVMgMzEKICNkZWZpbmUgU0lHVU5VU0VEIDMxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSUdSVE1JTiAzMgotI2RlZmluZSBTSUdSVE1BWCBfTlNJRworI2RlZmluZSBfX1NJR1JUTUlOIDMyCisjZGVmaW5lIF9fU0lHUlRNQVggX0tFUk5FTF9fTlNJRwogI2RlZmluZSBTSUdTV0kgMzIKICNkZWZpbmUgU0FfTk9DTERTVE9QIDB4MDAwMDAwMDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3N0YXQuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vc3RhdC5oCmluZGV4IGQ4MTg4YmYuLmIzNDI1ZGQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vc3RhdC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vc3RhdC5oCkBAIC0zNyw2OCArMzcsNTUgQEAKICNkZWZpbmUgU1RBVF9IQVZFX05TRUMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc3RhdCB7Ci0jaWZkZWYgX19BUk1FQl9fCi0gdW5zaWduZWQgc2hvcnQgc3RfZGV2OwotIHVuc2lnbmVkIHNob3J0IF9fcGFkMTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZWxzZQogIHVuc2lnbmVkIGxvbmcgc3RfZGV2OwotI2VuZGlmCiAgdW5zaWduZWQgbG9uZyBzdF9pbm87Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHN0X25saW5rOwogIHVuc2lnbmVkIHNob3J0IHN0X3VpZDsKICB1bnNpZ25lZCBzaG9ydCBzdF9naWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2lmZGVmIF9fQVJNRUJfXwotIHVuc2lnbmVkIHNob3J0IHN0X3JkZXY7Ci0gdW5zaWduZWQgc2hvcnQgX19wYWQyOwotI2Vsc2UKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9yZGV2OwotI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3Rfc2l6ZTsKICB1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3RfYmxvY2tzOwogIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWVfbnNlYzsKICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7CiAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHN0YXQ2NCB7CiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2RldjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBfX3BhZDBbNF07CiAjZGVmaW5lIFNUQVQ2NF9IQVNfQlJPS0VOX1NUX0lOTyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgX19zdF9pbm87CiAgdW5zaWduZWQgaW50IHN0X21vZGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBzdF9ubGluazsKICB1bnNpZ25lZCBsb25nIHN0X3VpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9naWQ7CiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X3JkZXY7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgX19wYWQzWzRdOwogIGxvbmcgbG9uZyBzdF9zaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7CiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2Jsb2NrczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOwogIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWVfbnNlYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3VuaXN0ZC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtL2FzbS91bmlzdGQuaAppbmRleCBmOTliZmIxLi5iZTlmMzZmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0vYXNtL3VuaXN0ZC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybS9hc20vdW5pc3RkLmgKQEAgLTE5LDEyICsxOSw3IEBACiAjaWZuZGVmIF9VQVBJX19BU01fQVJNX1VOSVNURF9ICiAjZGVmaW5lIF9VQVBJX19BU01fQVJNX1VOSVNURF9ICiAjZGVmaW5lIF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UgMHg5MDAwMDAKLSNpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgZGVmaW5lZChfX0FSTV9FQUJJX18pCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX1NZU0NBTExfQkFTRSAwCi0jZWxzZQotI2RlZmluZSBfX05SX1NZU0NBTExfQkFTRSBfX05SX09BQklfU1lTQ0FMTF9CQVNFCi0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsIChfX05SX1NZU0NBTExfQkFTRSsgMCkKICNkZWZpbmUgX19OUl9leGl0IChfX05SX1NZU0NBTExfQkFTRSsgMSkKQEAgLTQ2MSwyOSArNDU2LDI5IEBACiAjZGVmaW5lIF9fTlJfa2NtcCAoX19OUl9TWVNDQUxMX0JBU0UrMzc4KQogI2RlZmluZSBfX05SX2Zpbml0X21vZHVsZSAoX19OUl9TWVNDQUxMX0JBU0UrMzc5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhdHRyIChfX05SX1NZU0NBTExfQkFTRSszODApCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMzgxKQogI2RlZmluZSBfX0FSTV9OUl9CQVNFIChfX05SX1NZU0NBTExfQkFTRSsweDBmMDAwMCkKICNkZWZpbmUgX19BUk1fTlJfYnJlYWtwb2ludCAoX19BUk1fTlJfQkFTRSsxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19BUk1fTlJfY2FjaGVmbHVzaCAoX19BUk1fTlJfQkFTRSsyKQogI2RlZmluZSBfX0FSTV9OUl91c3IyNiAoX19BUk1fTlJfQkFTRSszKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19BUk1fTlJfdXNyMzIgKF9fQVJNX05SX0JBU0UrNCkKICNkZWZpbmUgX19BUk1fTlJfc2V0X3RscyAoX19BUk1fTlJfQkFTRSs1KQotI2lmZGVmIF9fQVJNX0VBQklfXwotI3VuZGVmIF9fTlJfdGltZQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyN1bmRlZiBfX05SX3RpbWUKICN1bmRlZiBfX05SX3Vtb3VudAogI3VuZGVmIF9fTlJfc3RpbWUKICN1bmRlZiBfX05SX2FsYXJtCi0jdW5kZWYgX19OUl91dGltZQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyN1bmRlZiBfX05SX3V0aW1lCiAjdW5kZWYgX19OUl9nZXRybGltaXQKICN1bmRlZiBfX05SX3NlbGVjdAogI3VuZGVmIF9fTlJfcmVhZGRpcgotI3VuZGVmIF9fTlJfbW1hcAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyN1bmRlZiBfX05SX21tYXAKICN1bmRlZiBfX05SX3NvY2tldGNhbGwKICN1bmRlZiBfX05SX3N5c2NhbGwKICN1bmRlZiBfX05SX2lwYwotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NC9hc20vYnl0ZW9yZGVyLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NC9hc20vYnl0ZW9yZGVyLmgKaW5kZXggMTkwOGFhNi4uOTJiMWQ0OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL2J5dGVvcmRlci5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybTY0L2FzbS9ieXRlb3JkZXIuaApAQCAtMTgsNiArMTgsMTEgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9CWVRFT1JERVJfSAogI2RlZmluZSBfX0FTTV9CWVRFT1JERVJfSAorI2lmZGVmIF9fQUFSQ0g2NEVCX18KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbHNlCiAjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaD4KICNlbmRpZgorI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL2h3Y2FwLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NC9hc20vaHdjYXAuaAppbmRleCA1MzliNzI1Li5jY2VhNTNkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NC9hc20vaHdjYXAuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NC9hc20vaHdjYXAuaApAQCAtMjEsNCArMjEsMTEgQEAKICNkZWZpbmUgSFdDQVBfRlAgKDEgPDwgMCkKICNkZWZpbmUgSFdDQVBfQVNJTUQgKDEgPDwgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhXQ0FQX0VWVFNUUk0gKDEgPDwgMikKKyNkZWZpbmUgSFdDQVBfQUVTICgxIDw8IDMpCisjZGVmaW5lIEhXQ0FQX1BNVUxMICgxIDw8IDQpCisjZGVmaW5lIEhXQ0FQX1NIQTEgKDEgPDwgNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhXQ0FQX1NIQTIgKDEgPDwgNikKKyNkZWZpbmUgSFdDQVBfQ1JDMzIgKDEgPDwgNykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL2t2bS5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtNjQvYXNtL2t2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYWJkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm02NC9hc20va3ZtLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BUk1fS1ZNX0hfXworI2RlZmluZSBfX0FSTV9LVk1fSF9fCisjZGVmaW5lIEtWTV9TUFNSX0VMMSAwCisjZGVmaW5lIEtWTV9TUFNSX1NWQyBLVk1fU1BTUl9FTDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9TUFNSX0FCVCAxCisjZGVmaW5lIEtWTV9TUFNSX1VORCAyCisjZGVmaW5lIEtWTV9TUFNSX0lSUSAzCisjZGVmaW5lIEtWTV9TUFNSX0ZJUSA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fTlJfU1BTUiA1CisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fS1ZNX0hBVkVfR1VFU1RfREVCVUcKKyNkZWZpbmUgX19LVk1fSEFWRV9JUlFfTElORQorI2RlZmluZSBLVk1fUkVHX1NJWkUoaWQpICAgKDFVIDw8ICgoKGlkKSAmIEtWTV9SRUdfU0laRV9NQVNLKSA+PiBLVk1fUkVHX1NJWkVfU0hJRlQpKQorc3RydWN0IGt2bV9yZWdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHVzZXJfcHRfcmVncyByZWdzOworIF9fdTY0IHNwX2VsMTsKKyBfX3U2NCBlbHJfZWwxOworIF9fdTY0IHNwc3JbS1ZNX05SX1NQU1JdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgdXNlcl9mcHNpbWRfc3RhdGUgZnBfcmVnczsKK307CisjZGVmaW5lIEtWTV9BUk1fVEFSR0VUX0FFTV9WOCAwCisjZGVmaW5lIEtWTV9BUk1fVEFSR0VUX0ZPVU5EQVRJT05fVjggMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0FSTV9UQVJHRVRfQ09SVEVYX0E1NyAyCisjZGVmaW5lIEtWTV9BUk1fVEFSR0VUX1hHRU5FX1BPVEVOWkEgMworI2RlZmluZSBLVk1fQVJNX05VTV9UQVJHRVRTIDQKKyNkZWZpbmUgS1ZNX0FSTV9ERVZJQ0VfVFlQRV9TSElGVCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fQVJNX0RFVklDRV9UWVBFX01BU0sgKDB4ZmZmZiA8PCBLVk1fQVJNX0RFVklDRV9UWVBFX1NISUZUKQorI2RlZmluZSBLVk1fQVJNX0RFVklDRV9JRF9TSElGVCAxNgorI2RlZmluZSBLVk1fQVJNX0RFVklDRV9JRF9NQVNLICgweGZmZmYgPDwgS1ZNX0FSTV9ERVZJQ0VfSURfU0hJRlQpCisjZGVmaW5lIEtWTV9BUk1fREVWSUNFX1ZHSUNfVjIgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1ZHSUNfVjJfQUREUl9UWVBFX0RJU1QgMAorI2RlZmluZSBLVk1fVkdJQ19WMl9BRERSX1RZUEVfQ1BVIDEKKyNkZWZpbmUgS1ZNX1ZHSUNfVjJfRElTVF9TSVpFIDB4MTAwMAorI2RlZmluZSBLVk1fVkdJQ19WMl9DUFVfU0laRSAweDIwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fVkNQVV9QT1dFUl9PRkYgMAorI2RlZmluZSBLVk1fQVJNX1ZDUFVfRUwxXzMyQklUIDEKK3N0cnVjdCBrdm1fdmNwdV9pbml0IHsKKyBfX3UzMiB0YXJnZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGZlYXR1cmVzWzddOworfTsKK3N0cnVjdCBrdm1fc3JlZ3MgeworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qga3ZtX2ZwdSB7Cit9Oworc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIHsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggeworfTsKK3N0cnVjdCBrdm1fc3luY19yZWdzIHsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGt2bV9hcmNoX21lbW9yeV9zbG90IHsKK307CisjZGVmaW5lIEtWTV9SRUdfQVJNX0NPUFJPQ19NQVNLIDB4MDAwMDAwMDAwRkZGMDAwMAorI2RlZmluZSBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQgMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9SRUdfQVJNX0NPUkUgKDB4MDAxMCA8PCBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQpCisjZGVmaW5lIEtWTV9SRUdfQVJNX0NPUkVfUkVHKG5hbWUpIChvZmZzZXRvZihzdHJ1Y3Qga3ZtX3JlZ3MsIG5hbWUpIC8gc2l6ZW9mKF9fdTMyKSkKKyNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVggKDB4MDAxMSA8PCBLVk1fUkVHX0FSTV9DT1BST0NfU0hJRlQpCisjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYX0lEX01BU0sgMHgwMDAwMDAwMDAwMDBGRjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTV9ERU1VWF9JRF9TSElGVCA4CisjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYX0lEX0NDU0lEUiAoMHgwMCA8PCBLVk1fUkVHX0FSTV9ERU1VWF9JRF9TSElGVCkKKyNkZWZpbmUgS1ZNX1JFR19BUk1fREVNVVhfVkFMX01BU0sgMHgwMDAwMDAwMDAwMDAwMEZGCisjZGVmaW5lIEtWTV9SRUdfQVJNX0RFTVVYX1ZBTF9TSElGVCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTTY0X1NZU1JFRyAoMHgwMDEzIDw8IEtWTV9SRUdfQVJNX0NPUFJPQ19TSElGVCkKKyNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUdfT1AwX01BU0sgMHgwMDAwMDAwMDAwMDBjMDAwCisjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHX09QMF9TSElGVCAxNAorI2RlZmluZSBLVk1fUkVHX0FSTTY0X1NZU1JFR19PUDFfTUFTSyAweDAwMDAwMDAwMDAwMDM4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9SRUdfQVJNNjRfU1lTUkVHX09QMV9TSElGVCAxMQorI2RlZmluZSBLVk1fUkVHX0FSTTY0X1NZU1JFR19DUk5fTUFTSyAweDAwMDAwMDAwMDAwMDA3ODAKKyNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUdfQ1JOX1NISUZUIDcKKyNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUdfQ1JNX01BU0sgMHgwMDAwMDAwMDAwMDAwMDc4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUkVHX0FSTTY0X1NZU1JFR19DUk1fU0hJRlQgMworI2RlZmluZSBLVk1fUkVHX0FSTTY0X1NZU1JFR19PUDJfTUFTSyAweDAwMDAwMDAwMDAwMDAwMDcKKyNkZWZpbmUgS1ZNX1JFR19BUk02NF9TWVNSRUdfT1AyX1NISUZUIDAKKyNkZWZpbmUgQVJNNjRfU1lTX1JFR19TSElGVF9NQVNLKHgsbikgICAoKCh4KSA8PCBLVk1fUkVHX0FSTTY0X1NZU1JFR18gIyMgbiAjIyBfU0hJRlQpICYgICBLVk1fUkVHX0FSTTY0X1NZU1JFR18gIyMgbiAjIyBfTUFTSykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fQVJNNjRfU1lTX1JFRyhvcDAsb3AxLGNybixjcm0sb3AyKSAgIChLVk1fUkVHX0FSTTY0IHwgS1ZNX1JFR19BUk02NF9TWVNSRUcgfCAgIEFSTTY0X1NZU19SRUdfU0hJRlRfTUFTSyhvcDAsIE9QMCkgfCAgIEFSTTY0X1NZU19SRUdfU0hJRlRfTUFTSyhvcDEsIE9QMSkgfCAgIEFSTTY0X1NZU19SRUdfU0hJRlRfTUFTSyhjcm4sIENSTikgfCAgIEFSTTY0X1NZU19SRUdfU0hJRlRfTUFTSyhjcm0sIENSTSkgfCAgIEFSTTY0X1NZU19SRUdfU0hJRlRfTUFTSyhvcDIsIE9QMikpCisjZGVmaW5lIEFSTTY0X1NZU19SRUcoLi4uKSAoX19BUk02NF9TWVNfUkVHKF9fVkFfQVJHU19fKSB8IEtWTV9SRUdfU0laRV9VNjQpCisjZGVmaW5lIEtWTV9SRUdfQVJNX1RJTUVSX0NUTCBBUk02NF9TWVNfUkVHKDMsIDMsIDE0LCAzLCAxKQorI2RlZmluZSBLVk1fUkVHX0FSTV9USU1FUl9DTlQgQVJNNjRfU1lTX1JFRygzLCAzLCAxNCwgMywgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9SRUdfQVJNX1RJTUVSX0NWQUwgQVJNNjRfU1lTX1JFRygzLCAzLCAxNCwgMCwgMikKKyNkZWZpbmUgS1ZNX0RFVl9BUk1fVkdJQ19HUlBfQUREUiAwCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0RJU1RfUkVHUyAxCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfR1JQX0NQVV9SRUdTIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfQ1BVSURfU0hJRlQgMzIKKyNkZWZpbmUgS1ZNX0RFVl9BUk1fVkdJQ19DUFVJRF9NQVNLICgweGZmVUxMIDw8IEtWTV9ERVZfQVJNX1ZHSUNfQ1BVSURfU0hJRlQpCisjZGVmaW5lIEtWTV9ERVZfQVJNX1ZHSUNfT0ZGU0VUX1NISUZUIDAKKyNkZWZpbmUgS1ZNX0RFVl9BUk1fVkdJQ19PRkZTRVRfTUFTSyAoMHhmZmZmZmZmZlVMTCA8PCBLVk1fREVWX0FSTV9WR0lDX09GRlNFVF9TSElGVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9BUk1fSVJRX1RZUEVfU0hJRlQgMjQKKyNkZWZpbmUgS1ZNX0FSTV9JUlFfVFlQRV9NQVNLIDB4ZmYKKyNkZWZpbmUgS1ZNX0FSTV9JUlFfVkNQVV9TSElGVCAxNgorI2RlZmluZSBLVk1fQVJNX0lSUV9WQ1BVX01BU0sgMHhmZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0FSTV9JUlFfTlVNX1NISUZUIDAKKyNkZWZpbmUgS1ZNX0FSTV9JUlFfTlVNX01BU0sgMHhmZmZmCisjZGVmaW5lIEtWTV9BUk1fSVJRX1RZUEVfQ1BVIDAKKyNkZWZpbmUgS1ZNX0FSTV9JUlFfVFlQRV9TUEkgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0FSTV9JUlFfVFlQRV9QUEkgMgorI2RlZmluZSBLVk1fQVJNX0lSUV9DUFVfSVJRIDAKKyNkZWZpbmUgS1ZNX0FSTV9JUlFfQ1BVX0ZJUSAxCisjZGVmaW5lIEtWTV9BUk1fSVJRX0dJQ19NQVggMTI3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUFNDSV9GTl9CQVNFIDB4OTVjMWJhNWUKKyNkZWZpbmUgS1ZNX1BTQ0lfRk4obikgKEtWTV9QU0NJX0ZOX0JBU0UgKyAobikpCisjZGVmaW5lIEtWTV9QU0NJX0ZOX0NQVV9TVVNQRU5EIEtWTV9QU0NJX0ZOKDApCisjZGVmaW5lIEtWTV9QU0NJX0ZOX0NQVV9PRkYgS1ZNX1BTQ0lfRk4oMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9QU0NJX0ZOX0NQVV9PTiBLVk1fUFNDSV9GTigyKQorI2RlZmluZSBLVk1fUFNDSV9GTl9NSUdSQVRFIEtWTV9QU0NJX0ZOKDMpCisjZGVmaW5lIEtWTV9QU0NJX1JFVF9TVUNDRVNTIDAKKyNkZWZpbmUgS1ZNX1BTQ0lfUkVUX05JICgodW5zaWduZWQgbG9uZyktMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9QU0NJX1JFVF9JTlZBTCAoKHVuc2lnbmVkIGxvbmcpLTIpCisjZGVmaW5lIEtWTV9QU0NJX1JFVF9ERU5JRUQgKCh1bnNpZ25lZCBsb25nKS0zKQorI2VuZGlmCisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL2ZjbnRsLmgKaW5kZXggZjdiMjRhNS4uYTE1ODc4ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9mY250bC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvZmNudGwuaApAQCAtODYsOTUgKzg2LDEwNSBAQAogI2RlZmluZSBPX1BBVEggMDEwMDAwMDAwCiAjZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaWZuZGVmIF9fT19UTVBGSUxFCisjZGVmaW5lIF9fT19UTVBGSUxFIDAyMDAwMDAwMAorI2VuZGlmCisjZGVmaW5lIE9fVE1QRklMRSAoX19PX1RNUEZJTEUgfCBPX0RJUkVDVE9SWSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE9fVE1QRklMRV9NQVNLIChfX09fVE1QRklMRSB8IE9fRElSRUNUT1JZIHwgT19DUkVBVCkKICNpZm5kZWYgT19OREVMQVkKICNkZWZpbmUgT19OREVMQVkgT19OT05CTE9DSwogI2VuZGlmCi0jZGVmaW5lIEZfRFVQRkQgMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRl9EVVBGRCAwCiAjZGVmaW5lIEZfR0VURkQgMQogI2RlZmluZSBGX1NFVEZEIDIKICNkZWZpbmUgRl9HRVRGTCAzCi0jZGVmaW5lIEZfU0VURkwgNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRl9TRVRGTCA0CiAjaWZuZGVmIEZfR0VUTEsKICNkZWZpbmUgRl9HRVRMSyA1CiAjZGVmaW5lIEZfU0VUTEsgNgotI2RlZmluZSBGX1NFVExLVyA3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGX1NFVExLVyA3CiAjZW5kaWYKICNpZm5kZWYgRl9TRVRPV04KICNkZWZpbmUgRl9TRVRPV04gOAotI2RlZmluZSBGX0dFVE9XTiA5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGX0dFVE9XTiA5CiAjZW5kaWYKICNpZm5kZWYgRl9TRVRTSUcKICNkZWZpbmUgRl9TRVRTSUcgMTAKLSNkZWZpbmUgRl9HRVRTSUcgMTEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZfR0VUU0lHIDExCiAjZW5kaWYKKyNpZm5kZWYgX19MUDY0X18KICNpZm5kZWYgRl9HRVRMSzY0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGX0dFVExLNjQgMTIKICNkZWZpbmUgRl9TRVRMSzY0IDEzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGX1NFVExLVzY0IDE0CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKICNpZm5kZWYgRl9TRVRPV05fRVgKICNkZWZpbmUgRl9TRVRPV05fRVggMTUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZfR0VUT1dOX0VYIDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZuZGVmIEZfR0VUT1dORVJfVUlEUwogI2RlZmluZSBGX0dFVE9XTkVSX1VJRFMgMTcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZfT1dORVJfVElEIDAKICNkZWZpbmUgRl9PV05FUl9QSUQgMQogI2RlZmluZSBGX09XTkVSX1BHUlAgMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBmX293bmVyX2V4IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHR5cGU7CiAgX19rZXJuZWxfcGlkX3QgcGlkOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZEX0NMT0VYRUMgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgRl9SRExDSwogI2RlZmluZSBGX1JETENLIDAKICNkZWZpbmUgRl9XUkxDSyAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGX1VOTENLIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZm5kZWYgRl9FWExDSwogI2RlZmluZSBGX0VYTENLIDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZfU0hMQ0sgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2RlZmluZSBMT0NLX1NIIDEKICNkZWZpbmUgTE9DS19FWCAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMT0NLX05CIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIExPQ0tfVU4gOAogI2RlZmluZSBMT0NLX01BTkQgMzIKICNkZWZpbmUgTE9DS19SRUFEIDY0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMT0NLX1dSSVRFIDEyOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTE9DS19SVyAxOTIKICNkZWZpbmUgRl9MSU5VWF9TUEVDSUZJQ19CQVNFIDEwMjQKICNpZm5kZWYgSEFWRV9BUkNIX1NUUlVDVF9GTE9DSwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgX19BUkNIX0ZMT0NLX1BBRAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19BUkNIX0ZMT0NLX1BBRAogI2VuZGlmCiBzdHJ1Y3QgZmxvY2sgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaG9ydCBsX3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNob3J0IGxfd2hlbmNlOwogIF9fa2VybmVsX29mZl90IGxfc3RhcnQ7CiAgX19rZXJuZWxfb2ZmX3QgbF9sZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX3BpZF90IGxfcGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0FSQ0hfRkxPQ0tfUEFECiB9OwogI2VuZGlmCisjaWZuZGVmIF9fTFA2NF9fCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBIQVZFX0FSQ0hfU1RSVUNUX0ZMT0NLNjQKICNpZm5kZWYgX19BUkNIX0ZMT0NLNjRfUEFECkBAIC0xOTMsMyArMjAzLDQgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL2lwY2J1Zi5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9pcGNidWYuaAppbmRleCBjMWRhMWRlLi5jYzcyNzRlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL2lwY2J1Zi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvaXBjYnVmLmgKQEAgLTMxLDggKzMxLDggQEAKICB1bnNpZ25lZCBzaG9ydCBzZXE7CiAgdW5zaWduZWQgc2hvcnQgX19wYWQyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKKyBfX2tlcm5lbF91bG9uZ190IF9fdW51c2VkMTsKKyBfX2tlcm5lbF91bG9uZ190IF9fdW51c2VkMjsKIH07CiAjZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL21zZ2J1Zi5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9tc2didWYuaAppbmRleCAwYzllNDZkLi5iMjUwMGVmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL21zZ2J1Zi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvbXNnYnVmLmgKQEAgLTM3LDE0ICszNywxNCBAQAogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotIHVuc2lnbmVkIGxvbmcgbXNnX2NieXRlczsKLSB1bnNpZ25lZCBsb25nIG1zZ19xbnVtOwotIHVuc2lnbmVkIGxvbmcgbXNnX3FieXRlczsKKyBfX2tlcm5lbF91bG9uZ190IG1zZ19jYnl0ZXM7CisgX19rZXJuZWxfdWxvbmdfdCBtc2dfcW51bTsKKyBfX2tlcm5lbF91bG9uZ190IG1zZ19xYnl0ZXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsKICBfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7Ci0gdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7Ci0gdW5zaWduZWQgbG9uZyBfX3VudXNlZDU7CisgX19rZXJuZWxfdWxvbmdfdCBfX3VudXNlZDQ7CisgX19rZXJuZWxfdWxvbmdfdCBfX3VudXNlZDU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9wb2xsLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3BvbGwuaAppbmRleCA0NWQyYzk0Li43ZmFhMGI4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3BvbGwuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3BvbGwuaApAQCAtNDgsMTEgKzQ4LDEyIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZGVmaW5lIFBPTExGUkVFIDB4NDAwMAorI2RlZmluZSBQT0xMX0JVU1lfTE9PUCAweDgwMDAKIHN0cnVjdCBwb2xsZmQgewotIGludCBmZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IGZkOwogIHNob3J0IGV2ZW50czsKICBzaG9ydCByZXZlbnRzOwogfTsKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9zaG1idWYuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvc2htYnVmLmgKaW5kZXggNGNmOWVmZS4uNjhiODU5ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9zaG1idWYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3NobWJ1Zi5oCkBAIC00MSwyMyArNDEsMjMgQEAKICBfX2tlcm5lbF9waWRfdCBzaG1fY3BpZDsKICBfX2tlcm5lbF9waWRfdCBzaG1fbHBpZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gdW5zaWduZWQgbG9uZyBzaG1fbmF0dGNoOwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ1OworIF9fa2VybmVsX3Vsb25nX3Qgc2htX25hdHRjaDsKKyBfX2tlcm5lbF91bG9uZ190IF9fdW51c2VkNDsKKyBfX2tlcm5lbF91bG9uZ190IF9fdW51c2VkNTsKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNobWluZm82NCB7Ci0gdW5zaWduZWQgbG9uZyBzaG1tYXg7Ci0gdW5zaWduZWQgbG9uZyBzaG1taW47Ci0gdW5zaWduZWQgbG9uZyBzaG1tbmk7CisgX19rZXJuZWxfdWxvbmdfdCBzaG1tYXg7CisgX19rZXJuZWxfdWxvbmdfdCBzaG1taW47CisgX19rZXJuZWxfdWxvbmdfdCBzaG1tbmk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHVuc2lnbmVkIGxvbmcgc2htc2VnOwotIHVuc2lnbmVkIGxvbmcgc2htYWxsOwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQyOworIF9fa2VybmVsX3Vsb25nX3Qgc2htc2VnOworIF9fa2VybmVsX3Vsb25nX3Qgc2htYWxsOworIF9fa2VybmVsX3Vsb25nX3QgX191bnVzZWQxOworIF9fa2VybmVsX3Vsb25nX3QgX191bnVzZWQyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKKyBfX2tlcm5lbF91bG9uZ190IF9fdW51c2VkMzsKKyBfX2tlcm5lbF91bG9uZ190IF9fdW51c2VkNDsKIH07CiAjZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3NpZ25hbC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9zaWduYWwuaAppbmRleCBjNGM3ZTAwLi5lMTAzMjQwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3NpZ25hbC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvc2lnbmFsLmgKQEAgLTE5LDEwICsxOSwxMCBAQAogI2lmbmRlZiBfVUFQSV9fQVNNX0dFTkVSSUNfU0lHTkFMX0gKICNkZWZpbmUgX1VBUElfX0FTTV9HRU5FUklDX1NJR05BTF9ICiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNkZWZpbmUgX05TSUcgNjQKKyNkZWZpbmUgX0tFUk5FTF9fTlNJRyA2NAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX05TSUdfQlBXIF9fQklUU19QRVJfTE9ORwotI2RlZmluZSBfTlNJR19XT1JEUyAoX05TSUcgLyBfTlNJR19CUFcpCisjZGVmaW5lIF9OU0lHX1dPUkRTIChfS0VSTkVMX19OU0lHIC8gX05TSUdfQlBXKQogI2RlZmluZSBTSUdIVVAgMQogI2RlZmluZSBTSUdJTlQgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTY2LDkgKzY2LDkgQEAKICNkZWZpbmUgU0lHU1lTIDMxCiAjZGVmaW5lIFNJR1VOVVNFRCAzMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0lHUlRNSU4gMzIKLSNpZm5kZWYgU0lHUlRNQVgKLSNkZWZpbmUgU0lHUlRNQVggX05TSUcKKyNkZWZpbmUgX19TSUdSVE1JTiAzMgorI2lmbmRlZiBfX1NJR1JUTUFYCisjZGVmaW5lIF9fU0lHUlRNQVggX0tFUk5FTF9fTlNJRwogI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQV9OT0NMRFNUT1AgMHgwMDAwMDAwMQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvc29ja2V0LmgKaW5kZXggOTk3ZGIwMC4uOTNkYWY4MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9zb2NrZXQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3NvY2tldC5oCkBAIC04Niw0ICs4Niw4IEBACiAjZGVmaW5lIFNPX0xPQ0tfRklMVEVSIDQ0CiAjZGVmaW5lIFNPX1NFTEVDVF9FUlJfUVVFVUUgNDUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPX0JVU1lfUE9MTCA0NgorI2RlZmluZSBTT19NQVhfUEFDSU5HX1JBVEUgNDcKKyNkZWZpbmUgU09fQlBGX0VYVEVOU0lPTlMgNDgKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvc3RhdGZzLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3N0YXRmcy5oCmluZGV4IDg2MGU1ODQuLjFjOGM1ODkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvc3RhdGZzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy9zdGF0ZnMuaApAQCAtMjIsNyArMjIsNyBAQAogI2lmbmRlZiBfX3N0YXRmc193b3JkCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmIF9fQklUU19QRVJfTE9ORyA9PSA2NAotI2RlZmluZSBfX3N0YXRmc193b3JkIGxvbmcKKyNkZWZpbmUgX19zdGF0ZnNfd29yZCBfX2tlcm5lbF9sb25nX3QKICNlbHNlCiAjZGVmaW5lIF9fc3RhdGZzX3dvcmQgX191MzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tZ2VuZXJpYy91bmlzdGQuaAppbmRleCA3ODE5NDFiLi5iZWNjODJkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1nZW5lcmljL3VuaXN0ZC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLWdlbmVyaWMvdW5pc3RkLmgKQEAgLTM2NywxNTAgKzM2NywxNTMgQEAKICNkZWZpbmUgX19OUl9rY21wIDI3MgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9maW5pdF9tb2R1bGUgMjczCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YXR0ciAyNzQKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhdHRyIDI3NQogI3VuZGVmIF9fTlJfc3lzY2FsbHMKLSNkZWZpbmUgX19OUl9zeXNjYWxscyAyNzQKLSNpZmRlZiBfX0FSQ0hfV0FOVF9TWVNDQUxMX05PX0FUCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3N5c2NhbGxzIDI3NgorI2lmZGVmIF9fQVJDSF9XQU5UX1NZU0NBTExfTk9fQVQKICNkZWZpbmUgX19OUl9vcGVuIDEwMjQKICNkZWZpbmUgX19OUl9saW5rIDEwMjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdW5saW5rIDEwMjYKICNkZWZpbmUgX19OUl9ta25vZCAxMDI3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2NobW9kIDEwMjgKICNkZWZpbmUgX19OUl9jaG93biAxMDI5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21rZGlyIDEwMzAKICNkZWZpbmUgX19OUl9ybWRpciAxMDMxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xjaG93biAxMDMyCiAjZGVmaW5lIF9fTlJfYWNjZXNzIDEwMzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVuYW1lIDEwMzQKICNkZWZpbmUgX19OUl9yZWFkbGluayAxMDM1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N5bWxpbmsgMTAzNgogI2RlZmluZSBfX05SX3V0aW1lcyAxMDM3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SMzI2NF9zdGF0IDEwMzgKICNkZWZpbmUgX19OUjMyNjRfbHN0YXQgMTAzOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICN1bmRlZiBfX05SX3N5c2NhbGxzCiAjZGVmaW5lIF9fTlJfc3lzY2FsbHMgKF9fTlIzMjY0X2xzdGF0KzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZkZWYgX19BUkNIX1dBTlRfU1lTQ0FMTF9OT19GTEFHUwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9waXBlIDEwNDAKICNkZWZpbmUgX19OUl9kdXAyIDEwNDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlIDEwNDIKICNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQgMTA0MwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ldmVudGZkIDEwNDQKICNkZWZpbmUgX19OUl9zaWduYWxmZCAxMDQ1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI3VuZGVmIF9fTlJfc3lzY2FsbHMKICNkZWZpbmUgX19OUl9zeXNjYWxscyAoX19OUl9zaWduYWxmZCsxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmIChfX0JJVFNfUEVSX0xPTkcgPT0gMzIgfHwgZGVmaW5lZChfX1NZU0NBTExfQ09NUEFUKSkgJiYgZGVmaW5lZChfX0FSQ0hfV0FOVF9TWVNDQUxMX09GRl9UKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZW5kZmlsZSAxMDQ2CiAjZGVmaW5lIF9fTlJfZnRydW5jYXRlIDEwNDcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdHJ1bmNhdGUgMTA0OAogI2RlZmluZSBfX05SX3N0YXQgMTA0OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9sc3RhdCAxMDUwCiAjZGVmaW5lIF9fTlJfZnN0YXQgMTA1MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mY250bCAxMDUyCiAjZGVmaW5lIF9fTlJfZmFkdmlzZTY0IDEwNTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19GQURWSVNFNjQKICNkZWZpbmUgX19OUl9uZXdmc3RhdGF0IDEwNTQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19ORVdGU1RBVEFUCiAjZGVmaW5lIF9fTlJfZnN0YXRmcyAxMDU1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N0YXRmcyAxMDU2CiAjZGVmaW5lIF9fTlJfbHNlZWsgMTA1NwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tbWFwIDEwNTgKICN1bmRlZiBfX05SX3N5c2NhbGxzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N5c2NhbGxzIChfX05SX21tYXArMSkKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0FSQ0hfV0FOVF9TWVNDQUxMX0RFUFJFQ0FURUQKICNkZWZpbmUgX19OUl9hbGFybSAxMDU5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KICNkZWZpbmUgX19OUl9nZXRwZ3JwIDEwNjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRQR1JQCiAjZGVmaW5lIF9fTlJfcGF1c2UgMTA2MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1BBVVNFCiAjZGVmaW5lIF9fTlJfdGltZSAxMDYyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdXRpbWUgMTA2MwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY3JlYXQgMTA2NAogI2RlZmluZSBfX05SX2dldGRlbnRzIDEwNjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRERU5UUwogI2RlZmluZSBfX05SX2Z1dGltZXNhdCAxMDY2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NlbGVjdCAxMDY3CiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TRUxFQ1QKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcG9sbCAxMDY4CiAjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAxMDY5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3VzdGF0IDEwNzAKICNkZWZpbmUgX19OUl92Zm9yayAxMDcxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX29sZHdhaXQ0IDEwNzIKICNkZWZpbmUgX19OUl9yZWN2IDEwNzMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VuZCAxMDc0CiAjZGVmaW5lIF9fTlJfYmRmbHVzaCAxMDc1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Vtb3VudCAxMDc2CiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdXNlbGliIDEwNzcKICNkZWZpbmUgX19OUl9fc3lzY3RsIDEwNzgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZm9yayAxMDc5CiAjdW5kZWYgX19OUl9zeXNjYWxscwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zeXNjYWxscyAoX19OUl9mb3JrKzEpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWYgX19CSVRTX1BFUl9MT05HID09IDY0ICYmICFkZWZpbmVkKF9fU1lTQ0FMTF9DT01QQVQpCiAjZGVmaW5lIF9fTlJfZmNudGwgX19OUjMyNjRfZmNudGwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3RhdGZzIF9fTlIzMjY0X3N0YXRmcwogI2RlZmluZSBfX05SX2ZzdGF0ZnMgX19OUjMyNjRfZnN0YXRmcworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90cnVuY2F0ZSBfX05SMzI2NF90cnVuY2F0ZQogI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSBfX05SMzI2NF9mdHJ1bmNhdGUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbHNlZWsgX19OUjMyNjRfbHNlZWsKICNkZWZpbmUgX19OUl9zZW5kZmlsZSBfX05SMzI2NF9zZW5kZmlsZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9uZXdmc3RhdGF0IF9fTlIzMjY0X2ZzdGF0YXQKICNkZWZpbmUgX19OUl9mc3RhdCBfX05SMzI2NF9mc3RhdAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tbWFwIF9fTlIzMjY0X21tYXAKICNkZWZpbmUgX19OUl9mYWR2aXNlNjQgX19OUjMyNjRfZmFkdmlzZTY0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fTlIzMjY0X3N0YXQKICNkZWZpbmUgX19OUl9zdGF0IF9fTlIzMjY0X3N0YXQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbHN0YXQgX19OUjMyNjRfbHN0YXQKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbHNlCiAjZGVmaW5lIF9fTlJfZmNudGw2NCBfX05SMzI2NF9mY250bAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zdGF0ZnM2NCBfX05SMzI2NF9zdGF0ZnMKICNkZWZpbmUgX19OUl9mc3RhdGZzNjQgX19OUjMyNjRfZnN0YXRmcworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90cnVuY2F0ZTY0IF9fTlIzMjY0X3RydW5jYXRlCiAjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQgX19OUjMyNjRfZnRydW5jYXRlCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xsc2VlayBfX05SMzI2NF9sc2VlawogI2RlZmluZSBfX05SX3NlbmRmaWxlNjQgX19OUjMyNjRfc2VuZGZpbGUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZnN0YXRhdDY0IF9fTlIzMjY0X2ZzdGF0YXQKICNkZWZpbmUgX19OUl9mc3RhdDY0IF9fTlIzMjY0X2ZzdGF0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21tYXAyIF9fTlIzMjY0X21tYXAKICNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQgX19OUjMyNjRfZmFkdmlzZTY0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fTlIzMjY0X3N0YXQKICNkZWZpbmUgX19OUl9zdGF0NjQgX19OUjMyNjRfc3RhdAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9sc3RhdDY0IF9fTlIzMjY0X2xzdGF0CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2F1eHZlYy5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vYXV4dmVjLmgKaW5kZXggMGMwNDkwMS4uMmZhMGU2YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vYXV4dmVjLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vYXV4dmVjLmgKQEAgLTE2LDYgKzE2LDQgQEAKICAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYgX0FTTV9BVVhWRUNfSAotI2RlZmluZSBfQVNNX0FVWFZFQ19ICi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdXh2ZWMuaD4KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2J5dGVvcmRlci5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vYnl0ZW9yZGVyLmgKaW5kZXggNDc3YzkzZC4uOTY1ZmQ4ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vYnl0ZW9yZGVyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vYnl0ZW9yZGVyLmgKQEAgLTE4LDEzICsxOCw2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9CWVRFT1JERVJfSAogI2RlZmluZSBfQVNNX0JZVEVPUkRFUl9ICi0jaWZkZWYgX19NSVBTRUJfXwotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmg+Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2VsaWYgZGVmaW5lZChfX01JUFNFTF9fKQogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+Ci0jZWxzZQotI2Vycm9yICJNSVBTLCBidXQgbmVpdGhlciBfX01JUFNFQl9fLCBub3IgX19NSVBTRUxfXz8/PyIKKyNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9mY250bC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vZmNudGwuaAppbmRleCA0YTliZjVjLi4wMmVhM2FjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9mY250bC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2ZjbnRsLmgKQEAgLTE2LDQ5ICsxNiw1MyBAQAogICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfQVNNX0ZDTlRMX0gKLSNkZWZpbmUgX0FTTV9GQ05UTF9ICisjaWZuZGVmIF9VQVBJX0FTTV9GQ05UTF9ICisjZGVmaW5lIF9VQVBJX0FTTV9GQ05UTF9ICisjaW5jbHVkZSA8YXNtL3NnaWRlZnMuaD4KICNkZWZpbmUgT19BUFBFTkQgMHgwMDA4Ci0jZGVmaW5lIE9fRFNZTkMgMHgwMDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPX0RTWU5DIDB4MDAxMAogI2RlZmluZSBPX05PTkJMT0NLIDB4MDA4MAogI2RlZmluZSBPX0NSRUFUIDB4MDEwMAogI2RlZmluZSBPX1RSVU5DIDB4MDIwMAotI2RlZmluZSBPX0VYQ0wgMHgwNDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPX0VYQ0wgMHgwNDAwCiAjZGVmaW5lIE9fTk9DVFRZIDB4MDgwMAogI2RlZmluZSBGQVNZTkMgMHgxMDAwCiAjZGVmaW5lIE9fTEFSR0VGSUxFIDB4MjAwMAotI2RlZmluZSBfX09fU1lOQyAweDQwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fT19TWU5DIDB4NDAwMAogI2RlZmluZSBPX1NZTkMgKF9fT19TWU5DfE9fRFNZTkMpCiAjZGVmaW5lIE9fRElSRUNUIDB4ODAwMAogI2RlZmluZSBGX0dFVExLIDE0Ci0jZGVmaW5lIEZfU0VUTEsgNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRl9TRVRMSyA2CiAjZGVmaW5lIEZfU0VUTEtXIDcKICNkZWZpbmUgRl9TRVRPV04gMjQKICNkZWZpbmUgRl9HRVRPV04gMjMKLSNpZm5kZWYgX19taXBzNjQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaWZuZGVmIF9fbWlwczY0CiAjZGVmaW5lIEZfR0VUTEs2NCAzMwogI2RlZmluZSBGX1NFVExLNjQgMzQKICNkZWZpbmUgRl9TRVRMS1c2NCAzNQotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCisjaWYgX01JUFNfU0lNICE9IF9NSVBTX1NJTV9BQkk2NAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiBzdHJ1Y3QgZmxvY2sgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaG9ydCBsX3R5cGU7CiAgc2hvcnQgbF93aGVuY2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX29mZl90IGxfc3RhcnQ7CiAgX19rZXJuZWxfb2ZmX3QgbF9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgbF9zeXNpZDsKICBfX2tlcm5lbF9waWRfdCBsX3BpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBwYWRbNF07CiB9OwotI2RlZmluZSBIQVZFX0FSQ0hfU1RSVUNUX0ZMT0NLCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZmNudGwuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhBVkVfQVJDSF9TVFJVQ1RfRkxPQ0sKICNlbmRpZgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ZjbnRsLmg+CisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9pbnN0LmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9pbnN0LmgKaW5kZXggMzc5Mjg2Yy4uYzQ2ZDA5YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vaW5zdC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL2luc3QuaApAQCAtOTcsMjkzICs5NywyOTggQEAKIGVudW0gY29wX29wIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbWZjX29wID0gMHgwMCwgZG1mY19vcCA9IDB4MDEsCi0gY2ZjX29wID0gMHgwMiwgbXRjX29wID0gMHgwNCwKLSBkbXRjX29wID0gMHgwNSwgY3RjX29wID0gMHgwNiwKLSBiY19vcCA9IDB4MDgsIGNvcF9vcCA9IDB4MTAsCisgY2ZjX29wID0gMHgwMiwgbWZoY19vcCA9IDB4MDMsCisgbXRjX29wID0gMHgwNCwgZG10Y19vcCA9IDB4MDUsCisgY3RjX29wID0gMHgwNiwgbXRoY19vcCA9IDB4MDcsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGJjX29wID0gMHgwOCwgY29wX29wID0gMHgxMCwKICBjb3BtX29wID0gMHgxOAogfTsKIGVudW0gYmNvcF9vcCB7Ci0gYmNmX29wLCBiY3Rfb3AsIGJjZmxfb3AsIGJjdGxfb3AKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgYmNmX29wLCBiY3Rfb3AsIGJjZmxfb3AsIGJjdGxfb3AKIH07CiBlbnVtIGNvcDBfY29pX2Z1bmMgewogIHRsYnJfb3AgPSAweDAxLCB0bGJ3aV9vcCA9IDB4MDIsCi0gdGxid3Jfb3AgPSAweDA2LCB0bGJwX29wID0gMHgwOCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdGxid3Jfb3AgPSAweDA2LCB0bGJwX29wID0gMHgwOCwKICByZmVfb3AgPSAweDEwLCBlcmV0X29wID0gMHgxOAogfTsKIGVudW0gY29wMF9jb21fZnVuYyB7Ci0gdGxicjFfb3AgPSAweDAxLCB0bGJ3X29wID0gMHgwMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdGxicjFfb3AgPSAweDAxLCB0bGJ3X29wID0gMHgwMiwKICB0bGJwMV9vcCA9IDB4MDgsIGRjdHJfb3AgPSAweDA5LAogIGRjdHdfb3AgPSAweDBhCiB9OwotZW51bSBjb3AxX2ZtdCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBjb3AxX2ZtdCB7CiAgc19mbXQsIGRfZm10LCBlX2ZtdCwgcV9mbXQsCiAgd19mbXQsIGxfZm10CiB9OwotZW51bSBjb3AxX3Nkd19mdW5jIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIGNvcDFfc2R3X2Z1bmMgewogIGZhZGRfb3AgPSAweDAwLCBmc3ViX29wID0gMHgwMSwKICBmbXVsX29wID0gMHgwMiwgZmRpdl9vcCA9IDB4MDMsCiAgZnNxcnRfb3AgPSAweDA0LCBmYWJzX29wID0gMHgwNSwKLSBmbW92X29wID0gMHgwNiwgZm5lZ19vcCA9IDB4MDcsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGZtb3Zfb3AgPSAweDA2LCBmbmVnX29wID0gMHgwNywKICBmcm91bmRsX29wID0gMHgwOCwgZnRydW5jbF9vcCA9IDB4MDksCiAgZmNlaWxsX29wID0gMHgwYSwgZmZsb29ybF9vcCA9IDB4MGIsCiAgZnJvdW5kX29wID0gMHgwYywgZnRydW5jX29wID0gMHgwZCwKLSBmY2VpbF9vcCA9IDB4MGUsIGZmbG9vcl9vcCA9IDB4MGYsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGZjZWlsX29wID0gMHgwZSwgZmZsb29yX29wID0gMHgwZiwKICBmbW92Y19vcCA9IDB4MTEsIGZtb3Z6X29wID0gMHgxMiwKICBmbW92bl9vcCA9IDB4MTMsIGZyZWNpcF9vcCA9IDB4MTUsCiAgZnJzcXJ0X29wID0gMHgxNiwgZmN2dHNfb3AgPSAweDIwLAotIGZjdnRkX29wID0gMHgyMSwgZmN2dGVfb3AgPSAweDIyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBmY3Z0ZF9vcCA9IDB4MjEsIGZjdnRlX29wID0gMHgyMiwKICBmY3Z0d19vcCA9IDB4MjQsIGZjdnRsX29wID0gMHgyNSwKICBmY21wX29wID0gMHgzMAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGNvcDF4X2Z1bmMgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsd3hjMV9vcCA9IDB4MDAsIGxkeGMxX29wID0gMHgwMSwKLSBwZmV0Y2hfb3AgPSAweDA3LCBzd3hjMV9vcCA9IDB4MDgsCi0gc2R4YzFfb3AgPSAweDA5LCBtYWRkX3Nfb3AgPSAweDIwLAotIG1hZGRfZF9vcCA9IDB4MjEsIG1hZGRfZV9vcCA9IDB4MjIsCisgc3d4YzFfb3AgPSAweDA4LCBzZHhjMV9vcCA9IDB4MDksCisgcGZldGNoX29wID0gMHgwZiwgbWFkZF9zX29wID0gMHgyMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbWFkZF9kX29wID0gMHgyMSwgbWFkZF9lX29wID0gMHgyMiwKICBtc3ViX3Nfb3AgPSAweDI4LCBtc3ViX2Rfb3AgPSAweDI5LAogIG1zdWJfZV9vcCA9IDB4MmEsIG5tYWRkX3Nfb3AgPSAweDMwLAogIG5tYWRkX2Rfb3AgPSAweDMxLCBubWFkZF9lX29wID0gMHgzMiwKLSBubXN1Yl9zX29wID0gMHgzOCwgbm1zdWJfZF9vcCA9IDB4MzksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG5tc3ViX3Nfb3AgPSAweDM4LCBubXN1Yl9kX29wID0gMHgzOSwKICBubXN1Yl9lX29wID0gMHgzYQogfTsKIGVudW0gbWFkX2Z1bmMgewotIG1hZGRfZnBfb3AgPSAweDA4LCBtc3ViX2ZwX29wID0gMHgwYSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbWFkZF9mcF9vcCA9IDB4MDgsIG1zdWJfZnBfb3AgPSAweDBhLAogIG5tYWRkX2ZwX29wID0gMHgwYywgbm1zdWJfZnBfb3AgPSAweDBlCiB9OwogZW51bSBseF9mdW5jIHsKLSBsd3hfb3AgPSAweDAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBsd3hfb3AgPSAweDAwLAogIGxoeF9vcCA9IDB4MDQsCiAgbGJ1eF9vcCA9IDB4MDYsCiAgbGR4X29wID0gMHgwOCwKLSBsd3V4X29wID0gMHgxMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbHd1eF9vcCA9IDB4MTAsCiAgbGh1eF9vcCA9IDB4MTQsCiAgbGJ4X29wID0gMHgxNiwKIH07Ci1lbnVtIG1tX21ham9yX29wIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG1tX21ham9yX29wIHsKICBtbV9wb29sMzJhX29wLCBtbV9wb29sMTZhX29wLCBtbV9sYnUxNl9vcCwgbW1fbW92ZTE2X29wLAogIG1tX2FkZGkzMl9vcCwgbW1fbGJ1MzJfb3AsIG1tX3NiMzJfb3AsIG1tX2xiMzJfb3AsCiAgbW1fcG9vbDMyYl9vcCwgbW1fcG9vbDE2Yl9vcCwgbW1fbGh1MTZfb3AsIG1tX2FuZGkxNl9vcCwKLSBtbV9hZGRpdTMyX29wLCBtbV9saHUzMl9vcCwgbW1fc2gzMl9vcCwgbW1fbGgzMl9vcCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fYWRkaXUzMl9vcCwgbW1fbGh1MzJfb3AsIG1tX3NoMzJfb3AsIG1tX2xoMzJfb3AsCiAgbW1fcG9vbDMyaV9vcCwgbW1fcG9vbDE2Y19vcCwgbW1fbHdzcDE2X29wLCBtbV9wb29sMTZkX29wLAogIG1tX29yaTMyX29wLCBtbV9wb29sMzJmX29wLCBtbV9yZXNlcnZlZDFfb3AsIG1tX3Jlc2VydmVkMl9vcCwKICBtbV9wb29sMzJjX29wLCBtbV9sd2dwMTZfb3AsIG1tX2x3MTZfb3AsIG1tX3Bvb2wxNmVfb3AsCi0gbW1feG9yaTMyX29wLCBtbV9qYWxzMzJfb3AsIG1tX2FkZGl1cGNfb3AsIG1tX3Jlc2VydmVkM19vcCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1feG9yaTMyX29wLCBtbV9qYWxzMzJfb3AsIG1tX2FkZGl1cGNfb3AsIG1tX3Jlc2VydmVkM19vcCwKICBtbV9yZXNlcnZlZDRfb3AsIG1tX3Bvb2wxNmZfb3AsIG1tX3NiMTZfb3AsIG1tX2JlcXoxNl9vcCwKICBtbV9zbHRpMzJfb3AsIG1tX2JlcTMyX29wLCBtbV9zd2MxMzJfb3AsIG1tX2x3YzEzMl9vcCwKICBtbV9yZXNlcnZlZDVfb3AsIG1tX3Jlc2VydmVkNl9vcCwgbW1fc2gxNl9vcCwgbW1fYm5lejE2X29wLAotIG1tX3NsdGl1MzJfb3AsIG1tX2JuZTMyX29wLCBtbV9zZGMxMzJfb3AsIG1tX2xkYzEzMl9vcCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fc2x0aXUzMl9vcCwgbW1fYm5lMzJfb3AsIG1tX3NkYzEzMl9vcCwgbW1fbGRjMTMyX29wLAogIG1tX3Jlc2VydmVkN19vcCwgbW1fcmVzZXJ2ZWQ4X29wLCBtbV9zd3NwMTZfb3AsIG1tX2IxNl9vcCwKICBtbV9hbmRpMzJfb3AsIG1tX2ozMl9vcCwgbW1fc2QzMl9vcCwgbW1fbGQzMl9vcCwKICBtbV9yZXNlcnZlZDExX29wLCBtbV9yZXNlcnZlZDEyX29wLCBtbV9zdzE2X29wLCBtbV9saTE2X29wLAotIG1tX2phbHgzMl9vcCwgbW1famFsMzJfb3AsIG1tX3N3MzJfb3AsIG1tX2x3MzJfb3AsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX2phbHgzMl9vcCwgbW1famFsMzJfb3AsIG1tX3N3MzJfb3AsIG1tX2x3MzJfb3AsCiB9OwogZW51bSBtbV8zMmlfbWlub3Jfb3AgewogIG1tX2JsdHpfb3AsIG1tX2JsdHphbF9vcCwgbW1fYmdlel9vcCwgbW1fYmdlemFsX29wLAotIG1tX2JsZXpfb3AsIG1tX2JuZXpjX29wLCBtbV9iZ3R6X29wLCBtbV9iZXF6Y19vcCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fYmxlel9vcCwgbW1fYm5lemNfb3AsIG1tX2JndHpfb3AsIG1tX2JlcXpjX29wLAogIG1tX3RsdGlfb3AsIG1tX3RnZWlfb3AsIG1tX3RsdGl1X29wLCBtbV90Z2VpdV9vcCwKICBtbV90bmVpX29wLCBtbV9sdWlfb3AsIG1tX3RlcWlfb3AsIG1tX3Jlc2VydmVkMTNfb3AsCiAgbW1fc3luY2lfb3AsIG1tX2JsdHphbHNfb3AsIG1tX3Jlc2VydmVkMTRfb3AsIG1tX2JnZXphbHNfb3AsCi0gbW1fYmMyZl9vcCwgbW1fYmMydF9vcCwgbW1fcmVzZXJ2ZWQxNV9vcCwgbW1fcmVzZXJ2ZWQxNl9vcCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fYmMyZl9vcCwgbW1fYmMydF9vcCwgbW1fcmVzZXJ2ZWQxNV9vcCwgbW1fcmVzZXJ2ZWQxNl9vcCwKICBtbV9yZXNlcnZlZDE3X29wLCBtbV9yZXNlcnZlZDE4X29wLCBtbV9icG9zZ2U2NF9vcCwgbW1fYnBvc2dlMzJfb3AsCiAgbW1fYmMxZl9vcCwgbW1fYmMxdF9vcCwgbW1fcmVzZXJ2ZWQxOV9vcCwgbW1fcmVzZXJ2ZWQyMF9vcCwKICBtbV9iYzFhbnkyZl9vcCwgbW1fYmMxYW55MnRfb3AsIG1tX2JjMWFueTRmX29wLCBtbV9iYzFhbnk0dF9vcCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gbW1fMzJhX21pbm9yX29wIHsKICBtbV9zbGwzMl9vcCA9IDB4MDAwLAogIG1tX2luc19vcCA9IDB4MDBjLAotIG1tX2V4dF9vcCA9IDB4MDJjLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9leHRfb3AgPSAweDAyYywKICBtbV9wb29sMzJheGZfb3AgPSAweDAzYywKICBtbV9zcmwzMl9vcCA9IDB4MDQwLAogIG1tX3NyYV9vcCA9IDB4MDgwLAotIG1tX3JvdHJfb3AgPSAweDBjMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fcm90cl9vcCA9IDB4MGMwLAogIG1tX2x3eHNfb3AgPSAweDExOCwKICBtbV9hZGR1MzJfb3AgPSAweDE1MCwKICBtbV9zdWJ1MzJfb3AgPSAweDFkMCwKLSBtbV9hbmRfb3AgPSAweDI1MCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fYW5kX29wID0gMHgyNTAsCiAgbW1fb3IzMl9vcCA9IDB4MjkwLAogIG1tX3hvcjMyX29wID0gMHgzMTAsCiB9OwotZW51bSBtbV8zMmJfZnVuYyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBtbV8zMmJfZnVuYyB7CiAgbW1fbHdjMl9mdW5jID0gMHgwLAogIG1tX2x3cF9mdW5jID0gMHgxLAogIG1tX2xkYzJfZnVuYyA9IDB4MiwKLSBtbV9sZHBfZnVuYyA9IDB4NCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fbGRwX2Z1bmMgPSAweDQsCiAgbW1fbHdtMzJfZnVuYyA9IDB4NSwKICBtbV9jYWNoZV9mdW5jID0gMHg2LAogIG1tX2xkbV9mdW5jID0gMHg3LAotIG1tX3N3YzJfZnVuYyA9IDB4OCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fc3djMl9mdW5jID0gMHg4LAogIG1tX3N3cF9mdW5jID0gMHg5LAogIG1tX3NkYzJfZnVuYyA9IDB4YSwKICBtbV9zZHBfZnVuYyA9IDB4YywKLSBtbV9zd20zMl9mdW5jID0gMHhkLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9zd20zMl9mdW5jID0gMHhkLAogIG1tX3NkbV9mdW5jID0gMHhmLAogfTsKIGVudW0gbW1fMzJjX2Z1bmMgewotIG1tX3ByZWZfZnVuYyA9IDB4MiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fcHJlZl9mdW5jID0gMHgyLAogIG1tX2xsX2Z1bmMgPSAweDMsCiAgbW1fc3dyX2Z1bmMgPSAweDksCiAgbW1fc2NfZnVuYyA9IDB4YiwKLSBtbV9sd3VfZnVuYyA9IDB4ZSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fbHd1X2Z1bmMgPSAweGUsCiB9OwogZW51bSBtbV8zMmF4Zl9taW5vcl9vcCB7CiAgbW1fbWZjMF9vcCA9IDB4MDAzLAotIG1tX210YzBfb3AgPSAweDAwYiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fbXRjMF9vcCA9IDB4MDBiLAogIG1tX3RsYnBfb3AgPSAweDAwZCwKICBtbV9qYWxyX29wID0gMHgwM2MsCiAgbW1fdGxicl9vcCA9IDB4MDRkLAotIG1tX2phbHJoYl9vcCA9IDB4MDdjLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9qYWxyaGJfb3AgPSAweDA3YywKICBtbV90bGJ3aV9vcCA9IDB4MDhkLAogIG1tX3RsYndyX29wID0gMHgwY2QsCiAgbW1famFscnNfb3AgPSAweDEzYywKLSBtbV9qYWxyc2hiX29wID0gMHgxN2MsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX2phbHJzaGJfb3AgPSAweDE3YywKICBtbV9zeXNjYWxsX29wID0gMHgyMmQsCiAgbW1fZXJldF9vcCA9IDB4M2NkLAogfTsKLWVudW0gbW1fMzJmX21pbm9yX29wIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG1tXzMyZl9taW5vcl9vcCB7CiAgbW1fMzJmXzAwX29wID0gMHgwMCwKICBtbV8zMmZfMDFfb3AgPSAweDAxLAogIG1tXzMyZl8wMl9vcCA9IDB4MDIsCi0gbW1fMzJmXzEwX29wID0gMHgwOCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fMzJmXzEwX29wID0gMHgwOCwKICBtbV8zMmZfMTFfb3AgPSAweDA5LAogIG1tXzMyZl8xMl9vcCA9IDB4MGEsCiAgbW1fMzJmXzIwX29wID0gMHgxMCwKLSBtbV8zMmZfMzBfb3AgPSAweDE4LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV8zMmZfMzBfb3AgPSAweDE4LAogIG1tXzMyZl80MF9vcCA9IDB4MjAsCiAgbW1fMzJmXzQxX29wID0gMHgyMSwKICBtbV8zMmZfNDJfb3AgPSAweDIyLAotIG1tXzMyZl81MF9vcCA9IDB4MjgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tXzMyZl81MF9vcCA9IDB4MjgsCiAgbW1fMzJmXzUxX29wID0gMHgyOSwKICBtbV8zMmZfNTJfb3AgPSAweDJhLAogIG1tXzMyZl82MF9vcCA9IDB4MzAsCi0gbW1fMzJmXzcwX29wID0gMHgzOCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fMzJmXzcwX29wID0gMHgzOCwKICBtbV8zMmZfNzNfb3AgPSAweDNiLAogIG1tXzMyZl83NF9vcCA9IDB4M2MsCiB9OwotZW51bSBtbV8zMmZfMTBfbWlub3Jfb3AgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbW1fMzJmXzEwX21pbm9yX29wIHsKICBtbV9sd3hjMV9vcCA9IDB4MSwKICBtbV9zd3hjMV9vcCwKICBtbV9sZHhjMV9vcCwKLSBtbV9zZHhjMV9vcCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fc2R4YzFfb3AsCiAgbW1fbHV4YzFfb3AsCiAgbW1fc3V4YzFfb3AsCiB9OwotZW51bSBtbV8zMmZfZnVuYyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBtbV8zMmZfZnVuYyB7CiAgbW1fbHd4YzFfZnVuYyA9IDB4MDQ4LAogIG1tX3N3eGMxX2Z1bmMgPSAweDA4OCwKICBtbV9sZHhjMV9mdW5jID0gMHgwYzgsCi0gbW1fc2R4YzFfZnVuYyA9IDB4MTA4LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9zZHhjMV9mdW5jID0gMHgxMDgsCiB9OwogZW51bSBtbV8zMmZfNDBfbWlub3Jfb3AgewogIG1tX2Ztb3ZmX29wLAotIG1tX2Ztb3Z0X29wLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9mbW92dF9vcCwKIH07CiBlbnVtIG1tXzMyZl82MF9taW5vcl9vcCB7CiAgbW1fZmFkZF9vcCwKLSBtbV9mc3ViX29wLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9mc3ViX29wLAogIG1tX2ZtdWxfb3AsCiAgbW1fZmRpdl9vcCwKIH07Ci1lbnVtIG1tXzMyZl83MF9taW5vcl9vcCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBtbV8zMmZfNzBfbWlub3Jfb3AgewogIG1tX2Ztb3ZuX29wLAogIG1tX2Ztb3Z6X29wLAogfTsKLWVudW0gbW1fMzJmXzczX21pbm9yX29wIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG1tXzMyZl83M19taW5vcl9vcCB7CiAgbW1fZm1vdjBfb3AgPSAweDAxLAogIG1tX2ZjdnRsX29wID0gMHgwNCwKICBtbV9tb3ZmMF9vcCA9IDB4MDUsCi0gbW1fZnJzcXJ0X29wID0gMHgwOCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fZnJzcXJ0X29wID0gMHgwOCwKICBtbV9mZmxvb3JsX29wID0gMHgwYywKICBtbV9mYWJzMF9vcCA9IDB4MGQsCiAgbW1fZmN2dHdfb3AgPSAweDI0LAotIG1tX21vdnQwX29wID0gMHgyNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fbW92dDBfb3AgPSAweDI1LAogIG1tX2ZzcXJ0X29wID0gMHgyOCwKICBtbV9mZmxvb3J3X29wID0gMHgyYywKICBtbV9mbmVnMF9vcCA9IDB4MmQsCi0gbW1fY2ZjMV9vcCA9IDB4NDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1tX2NmYzFfb3AgPSAweDQwLAogIG1tX2ZyZWNpcF9vcCA9IDB4NDgsCiAgbW1fZmNlaWxsX29wID0gMHg0YywKICBtbV9mY3Z0ZDBfb3AgPSAweDRkLAotIG1tX2N0YzFfb3AgPSAweDYwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9jdGMxX29wID0gMHg2MCwKICBtbV9mY2VpbHdfb3AgPSAweDZjLAogIG1tX2ZjdnRzMF9vcCA9IDB4NmQsCiAgbW1fbWZjMV9vcCA9IDB4ODAsCi0gbW1fZm1vdjFfb3AgPSAweDgxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBtbV9mbW92MV9vcCA9IDB4ODEsCiAgbW1fbW92ZjFfb3AgPSAweDg1LAogIG1tX2Z0cnVuY2xfb3AgPSAweDhjLAogIG1tX2ZhYnMxX29wID0gMHg4ZCwKLSBtbV9tdGMxX29wID0gMHhhMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fbXRjMV9vcCA9IDB4YTAsCiAgbW1fbW92dDFfb3AgPSAweGE1LAogIG1tX2Z0cnVuY3dfb3AgPSAweGFjLAogIG1tX2ZuZWcxX29wID0gMHhhZCwKLSBtbV9mcm91bmRsX29wID0gMHhjYywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbW1fbWZoYzFfb3AgPSAweGMwLAorIG1tX2Zyb3VuZGxfb3AgPSAweGNjLAogIG1tX2ZjdnRkMV9vcCA9IDB4Y2QsCisgbW1fbXRoYzFfb3AgPSAweGUwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbV9mcm91bmR3X29wID0gMHhlYywKICBtbV9mY3Z0czFfb3AgPSAweGVkLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG1tXzE2Y19taW5vcl9vcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tX2x3bTE2X29wID0gMHgwNCwKICBtbV9zd20xNl9vcCA9IDB4MDUsCi0gbW1fanIxNl9vcCA9IDB4MTgsCisgbW1fanIxNl9vcCA9IDB4MGMsCisgbW1fanJjX29wID0gMHgwZCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gbW1fanJjX29wID0gMHgxYSwKLSBtbV9qYWxyMTZfb3AgPSAweDFjLAotIG1tX2phbHJzMTZfb3AgPSAweDFlLAorIG1tX2phbHIxNl9vcCA9IDB4MGUsCisgbW1famFscnMxNl9vcCA9IDB4MGYsCisgbW1fanJhZGRpdXNwX29wID0gMHgxOCwKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBtbV8xNmRfbWlub3Jfb3AgewpAQCAtNDM0LDQ1MyArNDM5LDQ0NiBAQAogIE1JUFMxNmVfc3dyYXNwX2Z1bmMgPSAwMiwKIH07CiAjZGVmaW5lIE1NX05PUDE2IDB4MGMwMAotI2lmZGVmIF9fTUlQU0VCX18KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEJJVEZJRUxEX0ZJRUxEKGZpZWxkLCBtb3JlKSAgIGZpZWxkOyAgIG1vcmUKLSNlbGlmIGRlZmluZWQoX19NSVBTRUxfXykKICNkZWZpbmUgQklURklFTERfRklFTEQoZmllbGQsIG1vcmUpICAgbW9yZSAgIGZpZWxkOwotI2Vsc2UKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZXJyb3IgIk1JUFMgYnV0IG5laXRoZXIgX19NSVBTRUxfXyBub3IgX19NSVBTRUJfXz8iCi0jZW5kaWYKIHN0cnVjdCBqX2Zvcm1hdCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCB0YXJnZXQgOiAyNiwKICA7KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGlfZm9ybWF0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJzIDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKICBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHVfZm9ybWF0IHsKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJzIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgdWltbWVkaWF0ZSA6IDE2LAogIDspKSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBjX2Zvcm1hdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBjX29wIDogMywKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgY2FjaGUgOiAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgc2ltbWVkaWF0ZSA6IDE2LAogIDspKSkpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3Qgcl9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnMgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByZCA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByZSA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICA7KSkpKSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBwX2Zvcm1hdCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJkIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmUgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCiAgOykpKSkpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZl9mb3JtYXQgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZm10IDogNCwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmQgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByZSA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbWFfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZyIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ0IDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDIsCiAgOykpKSkpKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGJfZm9ybWF0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGNvZGUgOiAyMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAogIDspKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHBzX2Zvcm1hdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdCA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIDspKSkpKSkKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHZfZm9ybWF0IHsKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHNlbCA6IDQsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCB2dCA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHZzIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHZkIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIDspKSkpKSkpCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBmYl9mb3JtYXQgewogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgYmMgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBjYyA6IDMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbGFnIDogMiwKICBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiAxNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkpCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBmcDBfZm9ybWF0IHsKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ0IDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCiAgOykpKSkpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbW1fZnAwX2Zvcm1hdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdCA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmcyA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZkIDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDMsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wIDogMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAogIDspKSkpKSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBmcDFfZm9ybWF0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wIDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkpKQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW1fZnAxX2Zvcm1hdCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDIsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wIDogOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAogIDspKSkpKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG1tX2ZwMl9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBjYyA6IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCB6ZXJvIDogMiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZm10IDogMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wIDogMywKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIDspKSkpKSkpKQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW1fZnAzX2Zvcm1hdCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZtdCA6IDMsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wIDogNywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAogIDspKSkpKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG1tX2ZwNF9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBjYyA6IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmbXQgOiAzLAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBjb25kIDogNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAogIDspKSkpKSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtbV9mcDVfZm9ybWF0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGluZGV4IDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGJhc2UgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmZCA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcCA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICA7KSkpKSkpCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBmcDZfZm9ybWF0IHsKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZyIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnQgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnMgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmZCA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKICA7KSkpKSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtbV9mcDZfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ0IDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZzIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZmQgOiA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnIgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW1faV9mb3JtYXQgewogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBycyA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHNpZ25lZCBpbnQgc2ltbWVkaWF0ZSA6IDE2LAogIDspKSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtbV9tX2Zvcm1hdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByZCA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBiYXNlIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHNpZ25lZCBpbnQgc2ltbWVkaWF0ZSA6IDEyLAogIDspKSkpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbW1feF9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgaW5kZXggOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgYmFzZSA6IDUsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJkIDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiAxMSwKICA7KSkpKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG1tX2IwX2Zvcm1hdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA2LAogIEJJVEZJRUxEX0ZJRUxEKHNpZ25lZCBpbnQgc2ltbWVkaWF0ZSA6IDEwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKICA7KSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtbV9iMV9mb3JtYXQgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnMgOiAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiA3LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCA6IDE2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICA7KSkpKQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW0xNl9tX2Zvcm1hdCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNCwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcmxpc3QgOiAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgaW1tIDogNCwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtbTE2X3JiX2Zvcm1hdCB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBydCA6IDMsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGJhc2UgOiAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiA0LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCA6IDE2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICA7KSkpKSkKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG1tMTZfcjNfZm9ybWF0IHsKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ0IDogMywKICBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiA3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgOiAxNiwKICA7KSkpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbW0xNl9yNV9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNiwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnQgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IHNpbW1lZGlhdGUgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCA6IDE2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICA7KSkpKQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbTE2ZV9yciB7CiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG9wY29kZSA6IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByeCA6IDMsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IG5kIDogMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGwgOiAxLAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByYSA6IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBmdW5jIDogNSwKICA7KSkpKSkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtMTZlX2phbCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCB4IDogMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGltbTIwXzE2IDogNSwKICBCSVRGSUVMRF9GSUVMRChzaWduZWQgaW50IGltbTI1XzIxIDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgOykpKSkKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG0xNmVfaTY0IHsKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiAzLAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0gOiA4LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICA7KSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtMTZlX3JpNjQgewogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgZnVuYyA6IDMsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IHJ5IDogMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGltbSA6IDUsCiAgOykpKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG0xNmVfcmkgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNSwKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgcnggOiAzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgaW1tIDogOCwKICA7KSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBtMTZlX3JyaSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBvcGNvZGUgOiA1LAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByeCA6IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCByeSA6IDMsCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGltbSA6IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIDspKSkpCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtMTZlX2k4IHsKICBCSVRGSUVMRF9GSUVMRCh1bnNpZ25lZCBpbnQgb3Bjb2RlIDogNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQklURklFTERfRklFTEQodW5zaWduZWQgaW50IGZ1bmMgOiAzLAogIEJJVEZJRUxEX0ZJRUxEKHVuc2lnbmVkIGludCBpbW0gOiA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICA7KSkpCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHVuaW9uIG1pcHNfaW5zdHJ1Y3Rpb24gewogIHVuc2lnbmVkIGludCB3b3JkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBoYWxmd29yZFsyXTsKICB1bnNpZ25lZCBjaGFyIGJ5dGVbNF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBqX2Zvcm1hdCBqX2Zvcm1hdDsKICBzdHJ1Y3QgaV9mb3JtYXQgaV9mb3JtYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB1X2Zvcm1hdCB1X2Zvcm1hdDsKICBzdHJ1Y3QgY19mb3JtYXQgY19mb3JtYXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCByX2Zvcm1hdCByX2Zvcm1hdDsKICBzdHJ1Y3QgcF9mb3JtYXQgcF9mb3JtYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBmX2Zvcm1hdCBmX2Zvcm1hdDsKICBzdHJ1Y3QgbWFfZm9ybWF0IG1hX2Zvcm1hdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGJfZm9ybWF0IGJfZm9ybWF0OwogIHN0cnVjdCBwc19mb3JtYXQgcHNfZm9ybWF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgdl9mb3JtYXQgdl9mb3JtYXQ7CiAgc3RydWN0IGZiX2Zvcm1hdCBmYl9mb3JtYXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBmcDBfZm9ybWF0IGZwMF9mb3JtYXQ7CiAgc3RydWN0IG1tX2ZwMF9mb3JtYXQgbW1fZnAwX2Zvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGZwMV9mb3JtYXQgZnAxX2Zvcm1hdDsKICBzdHJ1Y3QgbW1fZnAxX2Zvcm1hdCBtbV9mcDFfZm9ybWF0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbW1fZnAyX2Zvcm1hdCBtbV9mcDJfZm9ybWF0OwogIHN0cnVjdCBtbV9mcDNfZm9ybWF0IG1tX2ZwM19mb3JtYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtbV9mcDRfZm9ybWF0IG1tX2ZwNF9mb3JtYXQ7CiAgc3RydWN0IG1tX2ZwNV9mb3JtYXQgbW1fZnA1X2Zvcm1hdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGZwNl9mb3JtYXQgZnA2X2Zvcm1hdDsKICBzdHJ1Y3QgbW1fZnA2X2Zvcm1hdCBtbV9mcDZfZm9ybWF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbW1faV9mb3JtYXQgbW1faV9mb3JtYXQ7CiAgc3RydWN0IG1tX21fZm9ybWF0IG1tX21fZm9ybWF0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbW1feF9mb3JtYXQgbW1feF9mb3JtYXQ7CiAgc3RydWN0IG1tX2IwX2Zvcm1hdCBtbV9iMF9mb3JtYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtbV9iMV9mb3JtYXQgbW1fYjFfZm9ybWF0OwogIHN0cnVjdCBtbTE2X21fZm9ybWF0IG1tMTZfbV9mb3JtYXQgOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbW0xNl9yYl9mb3JtYXQgbW0xNl9yYl9mb3JtYXQ7CiAgc3RydWN0IG1tMTZfcjNfZm9ybWF0IG1tMTZfcjNfZm9ybWF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbW0xNl9yNV9mb3JtYXQgbW0xNl9yNV9mb3JtYXQ7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHVuaW9uIG1pcHMxNmVfaW5zdHJ1Y3Rpb24gewogIHVuc2lnbmVkIGludCBmdWxsIDogMTY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtMTZlX3JyIHJyOwogIHN0cnVjdCBtMTZlX2phbCBqYWw7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtMTZlX2k2NCBpNjQ7CiAgc3RydWN0IG0xNmVfcmk2NCByaTY0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbTE2ZV9yaSByaTsKICBzdHJ1Y3QgbTE2ZV9ycmkgcnJpOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbTE2ZV9pOCBpODsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9tc2didWYuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL21zZ2J1Zi5oCmluZGV4IGQ4MWRhNzMuLmVmYWUxNDggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL21zZ2J1Zi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL21zZ2J1Zi5oCkBAIC0yMSwyMSArMjEsMjkgQEAKIHN0cnVjdCBtc3FpZDY0X2RzIHsKICBzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CiAgX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsKLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKLSBfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOworI2lmbmRlZiBfX21pcHM2NAorIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOworI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQzOworIF9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CisjaWZuZGVmIF9fbWlwczY0CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsKKyNpZm5kZWYgX19taXBzNjQKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIG1zZ19jYnl0ZXM7CiAgdW5zaWduZWQgbG9uZyBtc2dfcW51bTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBtc2dfcWJ5dGVzOwogIF9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9yZXNvdXJjZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vcmVzb3VyY2UuaAppbmRleCA4NzYxNjk3Li43MjhhNTE5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9yZXNvdXJjZS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3Jlc291cmNlLmgKQEAgLTI0LDcgKzI0LDEwIEBACiAjZGVmaW5lIFJMSU1JVF9SU1MgNwogI2RlZmluZSBSTElNSVRfTlBST0MgOAogI2RlZmluZSBSTElNSVRfTUVNTE9DSyA5Ci0jZGVmaW5lIFJMSU1fSU5GSU5JVFkgMHg3ZmZmZmZmZlVMCisjaWZuZGVmIF9fbWlwczY0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSTElNX0lORklOSVRZIDB4N2ZmZmZmZmZVTAorI2VuZGlmCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3NpZ2luZm8uaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3NpZ2luZm8uaAppbmRleCA0YTA4NWY4Li41OTljODc1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9zaWdpbmZvLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vc2lnaW5mby5oCkBAIC0yNCw2NyArMjQsODIgQEAKICNkZWZpbmUgSEFWRV9BUkNIX1NJR0lORk9fVAogI2RlZmluZSBIQVZFX0FSQ0hfQ09QWV9TSUdJTkZPCiBzdHJ1Y3Qgc2lnaW5mbzsKLSNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUgKDMgKiBzaXplb2YoaW50KSkKKyNpZiBfTUlQU19TWkxPTkcgPT0gMzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFICgzICogc2l6ZW9mKGludCkpCisjZWxpZiBfTUlQU19TWkxPTkcgPT0gNjQKKyNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUgKDQgKiBzaXplb2YoaW50KSkKKyNlbHNlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2Vycm9yIF9NSVBTX1NaTE9ORyBuZWl0aGVyIDMyIG5vciA2NAorI2VuZGlmCisjZGVmaW5lIF9fQVJDSF9TSUdTWVMKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CiAgaW50IHNpX3NpZ25vOwogIGludCBzaV9jb2RlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc2lfZXJybm87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBfX3BhZDBbU0lfTUFYX1NJWkUgLyBzaXplb2YoaW50KSAtIFNJX1BBRF9TSVpFIC0gM107CiAgdW5pb24gewogIGludCBfcGFkW1NJX1BBRF9TSVpFXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgcGlkX3QgX3BpZDsKICBfX0FSQ0hfU0lfVUlEX1QgX3VpZDsKICB9IF9raWxsOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB0aW1lcl90IF90aWQ7CiAgaW50IF9vdmVycnVuOwogIGNoYXIgX3BhZFtzaXplb2YoIF9fQVJDSF9TSV9VSURfVCkgLSBzaXplb2YoaW50KV07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNpZ3ZhbF90IF9zaWd2YWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBfc3lzX3ByaXZhdGU7CiAgfSBfdGltZXI7CiAgc3RydWN0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgcGlkX3QgX3BpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19BUkNIX1NJX1VJRF9UIF91aWQ7CiAgc2lndmFsX3QgX3NpZ3ZhbDsKICB9IF9ydDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgcGlkX3QgX3BpZDsKICBfX0FSQ0hfU0lfVUlEX1QgX3VpZDsKICBpbnQgX3N0YXR1czsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2xvY2tfdCBfdXRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNsb2NrX3QgX3N0aW1lOwogIH0gX3NpZ2NobGQ7CiAgc3RydWN0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgcGlkX3QgX3BpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2xvY2tfdCBfdXRpbWU7CiAgaW50IF9zdGF0dXM7CiAgY2xvY2tfdCBfc3RpbWU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gX2lyaXhfc2lnY2hsZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICB2b2lkIF9fdXNlciAqX2FkZHI7CiAjaWZkZWYgX19BUkNIX1NJX1RSQVBOTwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgX3RyYXBubzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICBzaG9ydCBfYWRkcl9sc2I7CiAgfSBfc2lnZmF1bHQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQVJDSF9TSV9CQU5EX1QgX2JhbmQ7CiAgaW50IF9mZDsKICB9IF9zaWdwb2xsOworIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHZvaWQgX191c2VyICpfY2FsbF9hZGRyOworIGludCBfc3lzY2FsbDsKKyB1bnNpZ25lZCBpbnQgX2FyY2g7CisgfSBfc2lnc3lzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IF9zaWZpZWxkczsKIH0gc2lnaW5mb190OwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vc2lnbmFsLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9zaWduYWwuaAppbmRleCA3NzFlMzFhLi5iNzc0YTY2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9zaWduYWwuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9zaWduYWwuaApAQCAtMTksMTAgKzE5LDEwIEBACiAjaWZuZGVmIF9VQVBJX0FTTV9TSUdOQUxfSAogI2RlZmluZSBfVUFQSV9BU01fU0lHTkFMX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2RlZmluZSBfTlNJRyAxMjgKKyNkZWZpbmUgX0tFUk5FTF9fTlNJRyAxMjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9OU0lHX0JQVyAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogOCkKLSNkZWZpbmUgX05TSUdfV09SRFMgKF9OU0lHIC8gX05TSUdfQlBXKQorI2RlZmluZSBfTlNJR19XT1JEUyAoX0tFUk5FTF9fTlNJRyAvIF9OU0lHX0JQVykKIHR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25lZCBsb25nIHNpZ1tfTlNJR19XT1JEU107CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtNzEsOCArNzEsOCBAQAogI2RlZmluZSBTSUdYQ1BVIDMwCiAjZGVmaW5lIFNJR1hGU1ogMzEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNJR1JUTUlOIDMyCi0jZGVmaW5lIFNJR1JUTUFYIF9OU0lHCisjZGVmaW5lIF9fU0lHUlRNSU4gMzIKKyNkZWZpbmUgX19TSUdSVE1BWCBfS0VSTkVMX19OU0lHCiAjZGVmaW5lIFNBX09OU1RBQ0sgMHgwODAwMDAwMAogI2RlZmluZSBTQV9SRVNFVEhBTkQgMHg4MDAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3NvY2tldC5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vc29ja2V0LmgKaW5kZXggZTY1ZjIyNi4uMzhlNGU2MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vc29ja2V0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vc29ja2V0LmgKQEAgLTg0LDUgKzg0LDggQEAKICNkZWZpbmUgU09fTk9GQ1MgNDMKICNkZWZpbmUgU09fTE9DS19GSUxURVIgNDQKICNkZWZpbmUgU09fU0VMRUNUX0VSUl9RVUVVRSA0NQotI2VuZGlmCisjZGVmaW5lIFNPX0JVU1lfUE9MTCA0NgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU09fTUFYX1BBQ0lOR19SQVRFIDQ3CisjZGVmaW5lIFNPX0JQRl9FWFRFTlNJT05TIDQ4CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3N3YWIuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3N3YWIuaAppbmRleCBkMTg4MzI0Li40MTY2MGQwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS9zd2FiLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vc3dhYi5oCkBAIC0yMiw0ICsyMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCisjaWYgZGVmaW5lZChfX21pcHNfaXNhX3JldikgJiYgX19taXBzX2lzYV9yZXYgPj0gMgorI2RlZmluZSBfX2FyY2hfc3dhYjE2IF9fYXJjaF9zd2FiMTYKKyNkZWZpbmUgX19hcmNoX3N3YWIzMiBfX2FyY2hfc3dhYjMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmZGVmIF9fbWlwczY0CisjZGVmaW5lIF9fYXJjaF9zd2FiNjQgX19hcmNoX3N3YWI2NAorI2VuZGlmCisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLW1pcHMvYXNtL3Vjb250ZXh0LmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS91Y29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNGQ2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS91Y29udGV4dC5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91Y29udGV4dC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20tbWlwcy9hc20vdW5pc3RkLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS91bmlzdGQuaAppbmRleCAwY2RiNjM3Li4zN2MzZGExIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS91bmlzdGQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS1taXBzL2FzbS91bmlzdGQuaApAQCAtNDU3LDQwMyArNDU3LDQwOCBAQAogI2RlZmluZSBfX05SX2tjbXAgKF9fTlJfTGludXggKyAzNDcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Zpbml0X21vZHVsZSAoX19OUl9MaW51eCArIDM0OCkKLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscyAzNDgKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhdHRyIChfX05SX0xpbnV4ICsgMzQ5KQorI2RlZmluZSBfX05SX3NjaGVkX2dldGF0dHIgKF9fTlJfTGludXggKyAzNTApCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMgMzUwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZGVmaW5lIF9fTlJfTzMyX0xpbnV4IDQwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzIDM0OAorI2RlZmluZSBfX05SX08zMl9MaW51eF9zeXNjYWxscyAzNTAKICNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX0xpbnV4IDUwMDAKICNkZWZpbmUgX19OUl9yZWFkIChfX05SX0xpbnV4ICsgMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfd3JpdGUgKF9fTlJfTGludXggKyAxKQogI2RlZmluZSBfX05SX29wZW4gKF9fTlJfTGludXggKyAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jbG9zZSAoX19OUl9MaW51eCArIDMpCiAjZGVmaW5lIF9fTlJfc3RhdCAoX19OUl9MaW51eCArIDQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZzdGF0IChfX05SX0xpbnV4ICsgNSkKICNkZWZpbmUgX19OUl9sc3RhdCAoX19OUl9MaW51eCArIDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3BvbGwgKF9fTlJfTGludXggKyA3KQogI2RlZmluZSBfX05SX2xzZWVrIChfX05SX0xpbnV4ICsgOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbW1hcCAoX19OUl9MaW51eCArIDkpCiAjZGVmaW5lIF9fTlJfbXByb3RlY3QgKF9fTlJfTGludXggKyAxMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbXVubWFwIChfX05SX0xpbnV4ICsgMTEpCiAjZGVmaW5lIF9fTlJfYnJrIChfX05SX0xpbnV4ICsgMTIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAoX19OUl9MaW51eCArIDEzKQogI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrIChfX05SX0xpbnV4ICsgMTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2lvY3RsIChfX05SX0xpbnV4ICsgMTUpCiAjZGVmaW5lIF9fTlJfcHJlYWQ2NCAoX19OUl9MaW51eCArIDE2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wd3JpdGU2NCAoX19OUl9MaW51eCArIDE3KQogI2RlZmluZSBfX05SX3JlYWR2IChfX05SX0xpbnV4ICsgMTgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3dyaXRldiAoX19OUl9MaW51eCArIDE5KQogI2RlZmluZSBfX05SX2FjY2VzcyAoX19OUl9MaW51eCArIDIwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9waXBlIChfX05SX0xpbnV4ICsgMjEpCiAjZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAoX19OUl9MaW51eCArIDIyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zY2hlZF95aWVsZCAoX19OUl9MaW51eCArIDIzKQogI2RlZmluZSBfX05SX21yZW1hcCAoX19OUl9MaW51eCArIDI0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tc3luYyAoX19OUl9MaW51eCArIDI1KQogI2RlZmluZSBfX05SX21pbmNvcmUgKF9fTlJfTGludXggKyAyNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWFkdmlzZSAoX19OUl9MaW51eCArIDI3KQogI2RlZmluZSBfX05SX3NobWdldCAoX19OUl9MaW51eCArIDI4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zaG1hdCAoX19OUl9MaW51eCArIDI5KQogI2RlZmluZSBfX05SX3NobWN0bCAoX19OUl9MaW51eCArIDMwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9kdXAgKF9fTlJfTGludXggKyAzMSkKICNkZWZpbmUgX19OUl9kdXAyIChfX05SX0xpbnV4ICsgMzIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3BhdXNlIChfX05SX0xpbnV4ICsgMzMpCiAjZGVmaW5lIF9fTlJfbmFub3NsZWVwIChfX05SX0xpbnV4ICsgMzQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldGl0aW1lciAoX19OUl9MaW51eCArIDM1KQogI2RlZmluZSBfX05SX3NldGl0aW1lciAoX19OUl9MaW51eCArIDM2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9hbGFybSAoX19OUl9MaW51eCArIDM3KQogI2RlZmluZSBfX05SX2dldHBpZCAoX19OUl9MaW51eCArIDM4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZW5kZmlsZSAoX19OUl9MaW51eCArIDM5KQogI2RlZmluZSBfX05SX3NvY2tldCAoX19OUl9MaW51eCArIDQwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jb25uZWN0IChfX05SX0xpbnV4ICsgNDEpCiAjZGVmaW5lIF9fTlJfYWNjZXB0IChfX05SX0xpbnV4ICsgNDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NlbmR0byAoX19OUl9MaW51eCArIDQzKQogI2RlZmluZSBfX05SX3JlY3Zmcm9tIChfX05SX0xpbnV4ICsgNDQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NlbmRtc2cgKF9fTlJfTGludXggKyA0NSkKICNkZWZpbmUgX19OUl9yZWN2bXNnIChfX05SX0xpbnV4ICsgNDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NodXRkb3duIChfX05SX0xpbnV4ICsgNDcpCiAjZGVmaW5lIF9fTlJfYmluZCAoX19OUl9MaW51eCArIDQ4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9saXN0ZW4gKF9fTlJfTGludXggKyA0OSkKICNkZWZpbmUgX19OUl9nZXRzb2NrbmFtZSAoX19OUl9MaW51eCArIDUwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRwZWVybmFtZSAoX19OUl9MaW51eCArIDUxKQogI2RlZmluZSBfX05SX3NvY2tldHBhaXIgKF9fTlJfTGludXggKyA1MikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0c29ja29wdCAoX19OUl9MaW51eCArIDUzKQogI2RlZmluZSBfX05SX2dldHNvY2tvcHQgKF9fTlJfTGludXggKyA1NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2xvbmUgKF9fTlJfTGludXggKyA1NSkKICNkZWZpbmUgX19OUl9mb3JrIChfX05SX0xpbnV4ICsgNTYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2V4ZWN2ZSAoX19OUl9MaW51eCArIDU3KQogI2RlZmluZSBfX05SX2V4aXQgKF9fTlJfTGludXggKyA1OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfd2FpdDQgKF9fTlJfTGludXggKyA1OSkKICNkZWZpbmUgX19OUl9raWxsIChfX05SX0xpbnV4ICsgNjApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3VuYW1lIChfX05SX0xpbnV4ICsgNjEpCiAjZGVmaW5lIF9fTlJfc2VtZ2V0IChfX05SX0xpbnV4ICsgNjIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NlbW9wIChfX05SX0xpbnV4ICsgNjMpCiAjZGVmaW5lIF9fTlJfc2VtY3RsIChfX05SX0xpbnV4ICsgNjQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NobWR0IChfX05SX0xpbnV4ICsgNjUpCiAjZGVmaW5lIF9fTlJfbXNnZ2V0IChfX05SX0xpbnV4ICsgNjYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21zZ3NuZCAoX19OUl9MaW51eCArIDY3KQogI2RlZmluZSBfX05SX21zZ3JjdiAoX19OUl9MaW51eCArIDY4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tc2djdGwgKF9fTlJfTGludXggKyA2OSkKICNkZWZpbmUgX19OUl9mY250bCAoX19OUl9MaW51eCArIDcwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mbG9jayAoX19OUl9MaW51eCArIDcxKQogI2RlZmluZSBfX05SX2ZzeW5jIChfX05SX0xpbnV4ICsgNzIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZkYXRhc3luYyAoX19OUl9MaW51eCArIDczKQogI2RlZmluZSBfX05SX3RydW5jYXRlIChfX05SX0xpbnV4ICsgNzQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAoX19OUl9MaW51eCArIDc1KQogI2RlZmluZSBfX05SX2dldGRlbnRzIChfX05SX0xpbnV4ICsgNzYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldGN3ZCAoX19OUl9MaW51eCArIDc3KQogI2RlZmluZSBfX05SX2NoZGlyIChfX05SX0xpbnV4ICsgNzgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZjaGRpciAoX19OUl9MaW51eCArIDc5KQogI2RlZmluZSBfX05SX3JlbmFtZSAoX19OUl9MaW51eCArIDgwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ta2RpciAoX19OUl9MaW51eCArIDgxKQogI2RlZmluZSBfX05SX3JtZGlyIChfX05SX0xpbnV4ICsgODIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2NyZWF0IChfX05SX0xpbnV4ICsgODMpCiAjZGVmaW5lIF9fTlJfbGluayAoX19OUl9MaW51eCArIDg0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91bmxpbmsgKF9fTlJfTGludXggKyA4NSkKICNkZWZpbmUgX19OUl9zeW1saW5rIChfX05SX0xpbnV4ICsgODYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlYWRsaW5rIChfX05SX0xpbnV4ICsgODcpCiAjZGVmaW5lIF9fTlJfY2htb2QgKF9fTlJfTGludXggKyA4OCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmNobW9kIChfX05SX0xpbnV4ICsgODkpCiAjZGVmaW5lIF9fTlJfY2hvd24gKF9fTlJfTGludXggKyA5MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmNob3duIChfX05SX0xpbnV4ICsgOTEpCiAjZGVmaW5lIF9fTlJfbGNob3duIChfX05SX0xpbnV4ICsgOTIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3VtYXNrIChfX05SX0xpbnV4ICsgOTMpCiAjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5IChfX05SX0xpbnV4ICsgOTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHJsaW1pdCAoX19OUl9MaW51eCArIDk1KQogI2RlZmluZSBfX05SX2dldHJ1c2FnZSAoX19OUl9MaW51eCArIDk2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zeXNpbmZvIChfX05SX0xpbnV4ICsgOTcpCiAjZGVmaW5lIF9fTlJfdGltZXMgKF9fTlJfTGludXggKyA5OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHRyYWNlIChfX05SX0xpbnV4ICsgOTkpCiAjZGVmaW5lIF9fTlJfZ2V0dWlkIChfX05SX0xpbnV4ICsgMTAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zeXNsb2cgKF9fTlJfTGludXggKyAxMDEpCiAjZGVmaW5lIF9fTlJfZ2V0Z2lkIChfX05SX0xpbnV4ICsgMTAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXR1aWQgKF9fTlJfTGludXggKyAxMDMpCiAjZGVmaW5lIF9fTlJfc2V0Z2lkIChfX05SX0xpbnV4ICsgMTA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRldWlkIChfX05SX0xpbnV4ICsgMTA1KQogI2RlZmluZSBfX05SX2dldGVnaWQgKF9fTlJfTGludXggKyAxMDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHBnaWQgKF9fTlJfTGludXggKyAxMDcpCiAjZGVmaW5lIF9fTlJfZ2V0cHBpZCAoX19OUl9MaW51eCArIDEwOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0cGdycCAoX19OUl9MaW51eCArIDEwOSkKICNkZWZpbmUgX19OUl9zZXRzaWQgKF9fTlJfTGludXggKyAxMTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHJldWlkIChfX05SX0xpbnV4ICsgMTExKQogI2RlZmluZSBfX05SX3NldHJlZ2lkIChfX05SX0xpbnV4ICsgMTEyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRncm91cHMgKF9fTlJfTGludXggKyAxMTMpCiAjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzIChfX05SX0xpbnV4ICsgMTE0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRyZXN1aWQgKF9fTlJfTGludXggKyAxMTUpCiAjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkIChfX05SX0xpbnV4ICsgMTE2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRyZXNnaWQgKF9fTlJfTGludXggKyAxMTcpCiAjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkIChfX05SX0xpbnV4ICsgMTE4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRwZ2lkIChfX05SX0xpbnV4ICsgMTE5KQogI2RlZmluZSBfX05SX3NldGZzdWlkIChfX05SX0xpbnV4ICsgMTIwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRmc2dpZCAoX19OUl9MaW51eCArIDEyMSkKICNkZWZpbmUgX19OUl9nZXRzaWQgKF9fTlJfTGludXggKyAxMjIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2NhcGdldCAoX19OUl9MaW51eCArIDEyMykKICNkZWZpbmUgX19OUl9jYXBzZXQgKF9fTlJfTGludXggKyAxMjQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcgKF9fTlJfTGludXggKyAxMjUpCiAjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0IChfX05SX0xpbnV4ICsgMTI2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8gKF9fTlJfTGludXggKyAxMjcpCiAjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAoX19OUl9MaW51eCArIDEyOCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sgKF9fTlJfTGludXggKyAxMjkpCiAjZGVmaW5lIF9fTlJfdXRpbWUgKF9fTlJfTGludXggKyAxMzApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21rbm9kIChfX05SX0xpbnV4ICsgMTMxKQogI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5IChfX05SX0xpbnV4ICsgMTMyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91c3RhdCAoX19OUl9MaW51eCArIDEzMykKICNkZWZpbmUgX19OUl9zdGF0ZnMgKF9fTlJfTGludXggKyAxMzQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZzdGF0ZnMgKF9fTlJfTGludXggKyAxMzUpCiAjZGVmaW5lIF9fTlJfc3lzZnMgKF9fTlJfTGludXggKyAxMzYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHByaW9yaXR5IChfX05SX0xpbnV4ICsgMTM3KQogI2RlZmluZSBfX05SX3NldHByaW9yaXR5IChfX05SX0xpbnV4ICsgMTM4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbSAoX19OUl9MaW51eCArIDEzOSkKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbSAoX19OUl9MaW51eCArIDE0MCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyIChfX05SX0xpbnV4ICsgMTQxKQogI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlciAoX19OUl9MaW51eCArIDE0MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoX19OUl9MaW51eCArIDE0MykKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluIChfX05SX0xpbnV4ICsgMTQ0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fTlJfTGludXggKyAxNDUpCiAjZGVmaW5lIF9fTlJfbWxvY2sgKF9fTlJfTGludXggKyAxNDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX211bmxvY2sgKF9fTlJfTGludXggKyAxNDcpCiAjZGVmaW5lIF9fTlJfbWxvY2thbGwgKF9fTlJfTGludXggKyAxNDgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX211bmxvY2thbGwgKF9fTlJfTGludXggKyAxNDkpCiAjZGVmaW5lIF9fTlJfdmhhbmd1cCAoX19OUl9MaW51eCArIDE1MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdCAoX19OUl9MaW51eCArIDE1MSkKICNkZWZpbmUgX19OUl9fc3lzY3RsIChfX05SX0xpbnV4ICsgMTUyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wcmN0bCAoX19OUl9MaW51eCArIDE1MykKICNkZWZpbmUgX19OUl9hZGp0aW1leCAoX19OUl9MaW51eCArIDE1NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0cmxpbWl0IChfX05SX0xpbnV4ICsgMTU1KQogI2RlZmluZSBfX05SX2Nocm9vdCAoX19OUl9MaW51eCArIDE1NikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3luYyAoX19OUl9MaW51eCArIDE1NykKICNkZWZpbmUgX19OUl9hY2N0IChfX05SX0xpbnV4ICsgMTU4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkgKF9fTlJfTGludXggKyAxNTkpCiAjZGVmaW5lIF9fTlJfbW91bnQgKF9fTlJfTGludXggKyAxNjApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Vtb3VudDIgKF9fTlJfTGludXggKyAxNjEpCiAjZGVmaW5lIF9fTlJfc3dhcG9uIChfX05SX0xpbnV4ICsgMTYyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zd2Fwb2ZmIChfX05SX0xpbnV4ICsgMTYzKQogI2RlZmluZSBfX05SX3JlYm9vdCAoX19OUl9MaW51eCArIDE2NCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgKF9fTlJfTGludXggKyAxNjUpCiAjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAoX19OUl9MaW51eCArIDE2NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZSAoX19OUl9MaW51eCArIDE2NykKICNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAoX19OUl9MaW51eCArIDE2OCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZSAoX19OUl9MaW51eCArIDE2OSkKICNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMgKF9fTlJfTGludXggKyAxNzApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZSAoX19OUl9MaW51eCArIDE3MSkKICNkZWZpbmUgX19OUl9xdW90YWN0bCAoX19OUl9MaW51eCArIDE3MikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbmZzc2VydmN0bCAoX19OUl9MaW51eCArIDE3MykKICNkZWZpbmUgX19OUl9nZXRwbXNnIChfX05SX0xpbnV4ICsgMTc0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wdXRwbXNnIChfX05SX0xpbnV4ICsgMTc1KQogI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsIChfX05SX0xpbnV4ICsgMTc2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZXNlcnZlZDE3NyAoX19OUl9MaW51eCArIDE3NykKICNkZWZpbmUgX19OUl9nZXR0aWQgKF9fTlJfTGludXggKyAxNzgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlYWRhaGVhZCAoX19OUl9MaW51eCArIDE3OSkKICNkZWZpbmUgX19OUl9zZXR4YXR0ciAoX19OUl9MaW51eCArIDE4MCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbHNldHhhdHRyIChfX05SX0xpbnV4ICsgMTgxKQogI2RlZmluZSBfX05SX2ZzZXR4YXR0ciAoX19OUl9MaW51eCArIDE4MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0eGF0dHIgKF9fTlJfTGludXggKyAxODMpCiAjZGVmaW5lIF9fTlJfbGdldHhhdHRyIChfX05SX0xpbnV4ICsgMTg0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mZ2V0eGF0dHIgKF9fTlJfTGludXggKyAxODUpCiAjZGVmaW5lIF9fTlJfbGlzdHhhdHRyIChfX05SX0xpbnV4ICsgMTg2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9sbGlzdHhhdHRyIChfX05SX0xpbnV4ICsgMTg3KQogI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIgKF9fTlJfTGludXggKyAxODgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyIChfX05SX0xpbnV4ICsgMTg5KQogI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0ciAoX19OUl9MaW51eCArIDE5MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyIChfX05SX0xpbnV4ICsgMTkxKQogI2RlZmluZSBfX05SX3RraWxsIChfX05SX0xpbnV4ICsgMTkyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZXNlcnZlZDE5MyAoX19OUl9MaW51eCArIDE5MykKICNkZWZpbmUgX19OUl9mdXRleCAoX19OUl9MaW51eCArIDE5NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkgKF9fTlJfTGludXggKyAxOTUpCiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkgKF9fTlJfTGludXggKyAxOTYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2NhY2hlZmx1c2ggKF9fTlJfTGludXggKyAxOTcpCiAjZGVmaW5lIF9fTlJfY2FjaGVjdGwgKF9fTlJfTGludXggKyAxOTgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3N5c21pcHMgKF9fTlJfTGludXggKyAxOTkpCiAjZGVmaW5lIF9fTlJfaW9fc2V0dXAgKF9fTlJfTGludXggKyAyMDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kgKF9fTlJfTGludXggKyAyMDEpCiAjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzIChfX05SX0xpbnV4ICsgMjAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb19zdWJtaXQgKF9fTlJfTGludXggKyAyMDMpCiAjZGVmaW5lIF9fTlJfaW9fY2FuY2VsIChfX05SX0xpbnV4ICsgMjA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9leGl0X2dyb3VwIChfX05SX0xpbnV4ICsgMjA1KQogI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llIChfX05SX0xpbnV4ICsgMjA2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUgKF9fTlJfTGludXggKyAyMDcpCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3RsIChfX05SX0xpbnV4ICsgMjA4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9lcG9sbF93YWl0IChfX05SX0xpbnV4ICsgMjA5KQogI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgKF9fTlJfTGludXggKyAyMTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybiAoX19OUl9MaW51eCArIDIxMSkKICNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MgKF9fTlJfTGludXggKyAyMTIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Jlc3RhcnRfc3lzY2FsbCAoX19OUl9MaW51eCArIDIxMykKICNkZWZpbmUgX19OUl9zZW10aW1lZG9wIChfX05SX0xpbnV4ICsgMjE0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mYWR2aXNlNjQgKF9fTlJfTGludXggKyAyMTUpCiAjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlIChfX05SX0xpbnV4ICsgMjE2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lIChfX05SX0xpbnV4ICsgMjE3KQogI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUgKF9fTlJfTGludXggKyAyMTgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4gKF9fTlJfTGludXggKyAyMTkpCiAjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlIChfX05SX0xpbnV4ICsgMjIwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lIChfX05SX0xpbnV4ICsgMjIxKQogI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUgKF9fTlJfTGludXggKyAyMjIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcyAoX19OUl9MaW51eCArIDIyMykKICNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAgKF9fTlJfTGludXggKyAyMjQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Rna2lsbCAoX19OUl9MaW51eCArIDIyNSkKICNkZWZpbmUgX19OUl91dGltZXMgKF9fTlJfTGludXggKyAyMjYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21iaW5kIChfX05SX0xpbnV4ICsgMjI3KQogI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kgKF9fTlJfTGludXggKyAyMjgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kgKF9fTlJfTGludXggKyAyMjkpCiAjZGVmaW5lIF9fTlJfbXFfb3BlbiAoX19OUl9MaW51eCArIDIzMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbXFfdW5saW5rIChfX05SX0xpbnV4ICsgMjMxKQogI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZCAoX19OUl9MaW51eCArIDIzMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlIChfX05SX0xpbnV4ICsgMjMzKQogI2RlZmluZSBfX05SX21xX25vdGlmeSAoX19OUl9MaW51eCArIDIzNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAoX19OUl9MaW51eCArIDIzNSkKICNkZWZpbmUgX19OUl92c2VydmVyIChfX05SX0xpbnV4ICsgMjM2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl93YWl0aWQgKF9fTlJfTGludXggKyAyMzcpCiAjZGVmaW5lIF9fTlJfYWRkX2tleSAoX19OUl9MaW51eCArIDIzOSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkgKF9fTlJfTGludXggKyAyNDApCiAjZGVmaW5lIF9fTlJfa2V5Y3RsIChfX05SX0xpbnV4ICsgMjQxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRfdGhyZWFkX2FyZWEgKF9fTlJfTGludXggKyAyNDIpCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0IChfX05SX0xpbnV4ICsgMjQzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaCAoX19OUl9MaW51eCArIDI0NCkKICNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoIChfX05SX0xpbnV4ICsgMjQ1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzIChfX05SX0xpbnV4ICsgMjQ2KQogI2RlZmluZSBfX05SX29wZW5hdCAoX19OUl9MaW51eCArIDI0NykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWtkaXJhdCAoX19OUl9MaW51eCArIDI0OCkKICNkZWZpbmUgX19OUl9ta25vZGF0IChfX05SX0xpbnV4ICsgMjQ5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mY2hvd25hdCAoX19OUl9MaW51eCArIDI1MCkKICNkZWZpbmUgX19OUl9mdXRpbWVzYXQgKF9fTlJfTGludXggKyAyNTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX25ld2ZzdGF0YXQgKF9fTlJfTGludXggKyAyNTIpCiAjZGVmaW5lIF9fTlJfdW5saW5rYXQgKF9fTlJfTGludXggKyAyNTMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlbmFtZWF0IChfX05SX0xpbnV4ICsgMjU0KQogI2RlZmluZSBfX05SX2xpbmthdCAoX19OUl9MaW51eCArIDI1NSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3ltbGlua2F0IChfX05SX0xpbnV4ICsgMjU2KQogI2RlZmluZSBfX05SX3JlYWRsaW5rYXQgKF9fTlJfTGludXggKyAyNTcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZjaG1vZGF0IChfX05SX0xpbnV4ICsgMjU4KQogI2RlZmluZSBfX05SX2ZhY2Nlc3NhdCAoX19OUl9MaW51eCArIDI1OSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHNlbGVjdDYgKF9fTlJfTGludXggKyAyNjApCiAjZGVmaW5lIF9fTlJfcHBvbGwgKF9fTlJfTGludXggKyAyNjEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Vuc2hhcmUgKF9fTlJfTGludXggKyAyNjIpCiAjZGVmaW5lIF9fTlJfc3BsaWNlIChfX05SX0xpbnV4ICsgMjYzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UgKF9fTlJfTGludXggKyAyNjQpCiAjZGVmaW5lIF9fTlJfdGVlIChfX05SX0xpbnV4ICsgMjY1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl92bXNwbGljZSAoX19OUl9MaW51eCArIDI2NikKICNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzIChfX05SX0xpbnV4ICsgMjY3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QgKF9fTlJfTGludXggKyAyNjgpCiAjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0IChfX05SX0xpbnV4ICsgMjY5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9rZXhlY19sb2FkIChfX05SX0xpbnV4ICsgMjcwKQogI2RlZmluZSBfX05SX2dldGNwdSAoX19OUl9MaW51eCArIDI3MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQgKF9fTlJfTGludXggKyAyNzIpCiAjZGVmaW5lIF9fTlJfaW9wcmlvX3NldCAoX19OUl9MaW51eCArIDI3MykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW9wcmlvX2dldCAoX19OUl9MaW51eCArIDI3NCkKICNkZWZpbmUgX19OUl91dGltZW5zYXQgKF9fTlJfTGludXggKyAyNzUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NpZ25hbGZkIChfX05SX0xpbnV4ICsgMjc2KQogI2RlZmluZSBfX05SX3RpbWVyZmQgKF9fTlJfTGludXggKyAyNzcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2V2ZW50ZmQgKF9fTlJfTGludXggKyAyNzgpCiAjZGVmaW5lIF9fTlJfZmFsbG9jYXRlIChfX05SX0xpbnV4ICsgMjc5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZSAoX19OUl9MaW51eCArIDI4MCkKICNkZWZpbmUgX19OUl90aW1lcmZkX2dldHRpbWUgKF9fTlJfTGludXggKyAyODEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZSAoX19OUl9MaW51eCArIDI4MikKICNkZWZpbmUgX19OUl9zaWduYWxmZDQgKF9fTlJfTGludXggKyAyODMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2V2ZW50ZmQyIChfX05SX0xpbnV4ICsgMjg0KQogI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEgKF9fTlJfTGludXggKyAyODUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2R1cDMgKF9fTlJfTGludXggKyAyODYpCiAjZGVmaW5lIF9fTlJfcGlwZTIgKF9fTlJfTGludXggKyAyODcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEgKF9fTlJfTGludXggKyAyODgpCiAjZGVmaW5lIF9fTlJfcHJlYWR2IChfX05SX0xpbnV4ICsgMjg5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wd3JpdGV2IChfX05SX0xpbnV4ICsgMjkwKQogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvIChfX05SX0xpbnV4ICsgMjkxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4gKF9fTlJfTGludXggKyAyOTIpCiAjZGVmaW5lIF9fTlJfYWNjZXB0NCAoX19OUl9MaW51eCArIDI5MykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVjdm1tc2cgKF9fTlJfTGludXggKyAyOTQpCiAjZGVmaW5lIF9fTlJfZmFub3RpZnlfaW5pdCAoX19OUl9MaW51eCArIDI5NSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmFub3RpZnlfbWFyayAoX19OUl9MaW51eCArIDI5NikKICNkZWZpbmUgX19OUl9wcmxpbWl0NjQgKF9fTlJfTGludXggKyAyOTcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0IChfX05SX0xpbnV4ICsgMjk4KQogI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0IChfX05SX0xpbnV4ICsgMjk5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lIChfX05SX0xpbnV4ICsgMzAwKQogI2RlZmluZSBfX05SX3N5bmNmcyAoX19OUl9MaW51eCArIDMwMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VuZG1tc2cgKF9fTlJfTGludXggKyAzMDIpCiAjZGVmaW5lIF9fTlJfc2V0bnMgKF9fTlJfTGludXggKyAzMDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Byb2Nlc3Nfdm1fcmVhZHYgKF9fTlJfTGludXggKyAzMDQpCiAjZGVmaW5lIF9fTlJfcHJvY2Vzc192bV93cml0ZXYgKF9fTlJfTGludXggKyAzMDUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2tjbXAgKF9fTlJfTGludXggKyAzMDYpCiAjZGVmaW5lIF9fTlJfZmluaXRfbW9kdWxlIChfX05SX0xpbnV4ICsgMzA3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRkZW50czY0IChfX05SX0xpbnV4ICsgMzA4KQotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzIDMwOAorI2RlZmluZSBfX05SX3NjaGVkX3NldGF0dHIgKF9fTlJfTGludXggKyAzMDkpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAoX19OUl9MaW51eCArIDMxMCkKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscyAzMTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNkZWZpbmUgX19OUl82NF9MaW51eCA1MDAwCi0jZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMgMzA4CisjZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMgMzEwCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfTGludXggNjAwMApAQCAtMTI0Nyw5ICsxMjUyLDEyIEBACiAjZGVmaW5lIF9fTlJfa2NtcCAoX19OUl9MaW51eCArIDMxMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmluaXRfbW9kdWxlIChfX05SX0xpbnV4ICsgMzEyKQotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzIDMxMgorI2RlZmluZSBfX05SX3NjaGVkX3NldGF0dHIgKF9fTlJfTGludXggKyAzMTMpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAoX19OUl9MaW51eCArIDMxNCkKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscyAzMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNkZWZpbmUgX19OUl9OMzJfTGludXggNjAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMgMzEyCisjZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzIDMxNAogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9ib290cGFyYW0uaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vYm9vdHBhcmFtLmgKaW5kZXggYWY5ODQ4OS4uYjU3NjgyNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9ib290cGFyYW0uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL2Jvb3RwYXJhbS5oCkBAIC0yMywxNjQgKzIzLDE2NyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0VUVVBfRFRCIDIKICNkZWZpbmUgU0VUVVBfUENJIDMKKyNkZWZpbmUgU0VUVVBfRUZJIDQKICNkZWZpbmUgUkFNRElTS19JTUFHRV9TVEFSVF9NQVNLIDB4MDdGRgotI2RlZmluZSBSQU1ESVNLX1BST01QVF9GTEFHIDB4ODAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUkFNRElTS19QUk9NUFRfRkxBRyAweDgwMDAKICNkZWZpbmUgUkFNRElTS19MT0FEX0ZMQUcgMHg0MDAwCiAjZGVmaW5lIExPQURFRF9ISUdIICgxPDwwKQogI2RlZmluZSBRVUlFVF9GTEFHICgxPDw1KQotI2RlZmluZSBLRUVQX1NFR01FTlRTICgxPDw2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VFUF9TRUdNRU5UUyAoMTw8NikKICNkZWZpbmUgQ0FOX1VTRV9IRUFQICgxPDw3KQogI2RlZmluZSBYTEZfS0VSTkVMXzY0ICgxPDwwKQogI2RlZmluZSBYTEZfQ0FOX0JFX0xPQURFRF9BQk9WRV80RyAoMTw8MSkKLSNkZWZpbmUgWExGX0VGSV9IQU5ET1ZFUl8zMiAoMTw8MikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFhMRl9FRklfSEFORE9WRVJfMzIgKDE8PDIpCiAjZGVmaW5lIFhMRl9FRklfSEFORE9WRVJfNjQgKDE8PDMpCisjZGVmaW5lIFhMRl9FRklfS0VYRUMgKDE8PDQpCiAjaWZuZGVmIF9fQVNTRU1CTFlfXworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CiAjaW5jbHVkZSA8bGludXgvZWRkLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL2lzdC5oPgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDx2aWRlby9lZGlkLmg+CiBzdHJ1Y3Qgc2V0dXBfZGF0YSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG5leHQ7CiAgX191MzIgdHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbGVuOwogIF9fdTggZGF0YVswXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHNldHVwX2hlYWRlciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc2V0dXBfc2VjdHM7CiAgX191MTYgcm9vdF9mbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3lzc2l6ZTsKICBfX3UxNiByYW1fc2l6ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgdmlkX21vZGU7CiAgX191MTYgcm9vdF9kZXY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGJvb3RfZmxhZzsKICBfX3UxNiBqdW1wOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoZWFkZXI7CiAgX191MTYgdmVyc2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVhbG1vZGVfc3d0Y2g7CiAgX191MTYgc3RhcnRfc3lzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBrZXJuZWxfdmVyc2lvbjsKICBfX3U4IHR5cGVfb2ZfbG9hZGVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGxvYWRmbGFnczsKICBfX3UxNiBzZXR1cF9tb3ZlX3NpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNvZGUzMl9zdGFydDsKICBfX3UzMiByYW1kaXNrX2ltYWdlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByYW1kaXNrX3NpemU7CiAgX191MzIgYm9vdHNlY3Rfa2x1ZGdlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBoZWFwX2VuZF9wdHI7CiAgX191OCBleHRfbG9hZGVyX3ZlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBleHRfbG9hZGVyX3R5cGU7CiAgX191MzIgY21kX2xpbmVfcHRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbml0cmRfYWRkcl9tYXg7CiAgX191MzIga2VybmVsX2FsaWdubWVudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCByZWxvY2F0YWJsZV9rZXJuZWw7CiAgX191OCBtaW5fYWxpZ25tZW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiB4bG9hZGZsYWdzOwogIF9fdTMyIGNtZGxpbmVfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGFyZHdhcmVfc3ViYXJjaDsKICBfX3U2NCBoYXJkd2FyZV9zdWJhcmNoX2RhdGE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBheWxvYWRfb2Zmc2V0OwogIF9fdTMyIHBheWxvYWRfbGVuZ3RoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBzZXR1cF9kYXRhOwogIF9fdTY0IHByZWZfYWRkcmVzczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5pdF9zaXplOwogIF9fdTMyIGhhbmRvdmVyX29mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogc3RydWN0IHN5c19kZXNjX3RhYmxlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgbGVuZ3RoOwogIF9fdTggdGFibGVbMTRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3Qgb2xwY19vZndfaGVhZGVyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgb2Z3X21hZ2ljOwogIF9fdTMyIG9md192ZXJzaW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjaWZfaGFuZGxlcjsKICBfX3UzMiBpcnFfZGVzY190YWJsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogc3RydWN0IGVmaV9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZWZpX2xvYWRlcl9zaWduYXR1cmU7CiAgX191MzIgZWZpX3N5c3RhYjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZWZpX21lbWRlc2Nfc2l6ZTsKICBfX3UzMiBlZmlfbWVtZGVzY192ZXJzaW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBlZmlfbWVtbWFwOwogIF9fdTMyIGVmaV9tZW1tYXBfc2l6ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZWZpX3N5c3RhYl9oaTsKICBfX3UzMiBlZmlfbWVtbWFwX2hpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgYm9vdF9wYXJhbXMgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc2NyZWVuX2luZm8gc2NyZWVuX2luZm87CiAgc3RydWN0IGFwbV9iaW9zX2luZm8gYXBtX2Jpb3NfaW5mbzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBfcGFkMls0XTsKICBfX3U2NCB0Ym9vdF9hZGRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaXN0X2luZm8gaXN0X2luZm87CiAgX191OCBfcGFkM1sxNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggaGQwX2luZm9bMTZdOwogIF9fdTggaGQxX2luZm9bMTZdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc3lzX2Rlc2NfdGFibGUgc3lzX2Rlc2NfdGFibGU7CiAgc3RydWN0IG9scGNfb2Z3X2hlYWRlciBvbHBjX29md19oZWFkZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGV4dF9yYW1kaXNrX2ltYWdlOwogIF9fdTMyIGV4dF9yYW1kaXNrX3NpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGV4dF9jbWRfbGluZV9wdHI7CiAgX191OCBfcGFkNFsxMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZWRpZF9pbmZvIGVkaWRfaW5mbzsKICBzdHJ1Y3QgZWZpX2luZm8gZWZpX2luZm87Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFsdF9tZW1fazsKICBfX3UzMiBzY3JhdGNoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGU4MjBfZW50cmllczsKICBfX3U4IGVkZGJ1Zl9lbnRyaWVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGVkZF9tYnJfc2lnX2J1Zl9lbnRyaWVzOwogIF9fdTgga2JkX3N0YXR1czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBfcGFkNVszXTsKICBfX3U4IHNlbnRpbmVsOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IF9wYWQ2WzFdOwogIHN0cnVjdCBzZXR1cF9oZWFkZXIgaGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IF9wYWQ3WzB4MjkwLTB4MWYxLXNpemVvZihzdHJ1Y3Qgc2V0dXBfaGVhZGVyKV07CiAgX191MzIgZWRkX21icl9zaWdfYnVmZmVyW0VERF9NQlJfU0lHX01BWF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBlODIwZW50cnkgZTgyMF9tYXBbRTgyME1BWF07CiAgX191OCBfcGFkOFs0OF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBlZGRfaW5mbyBlZGRidWZbRURETUFYTlJdOwogIF9fdTggX3BhZDlbMjc2XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFg4Nl9TVUJBUkNIX1BDID0gMCwKICBYODZfU1VCQVJDSF9MR1VFU1QsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFg4Nl9TVUJBUkNIX1hFTiwKLSBYODZfU1VCQVJDSF9NUlNULAorIFg4Nl9TVUJBUkNIX0lOVEVMX01JRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgWDg2X1NVQkFSQ0hfQ0U0MTAwLAogIFg4Nl9OUl9TVUJBUkNIUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL2h5cGVydi5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9oeXBlcnYuaAppbmRleCA1ODc0ZThkLi45NjVlODBhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL2h5cGVydi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vaHlwZXJ2LmgKQEAgLTMzLDk5ICszMywxMTYgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9NU1JfVlBfUlVOVElNRV9BVkFJTEFCTEUgKDEgPDwgMCkKICNkZWZpbmUgSFZfWDY0X01TUl9USU1FX1JFRl9DT1VOVF9BVkFJTEFCTEUgKDEgPDwgMSkKKyNkZWZpbmUgSFZfWDY0X01TUl9SRUZFUkVOQ0VfVFNDIDB4NDAwMDAwMjEKKyNkZWZpbmUgSFZfWDY0X01TUl9BUElDX0ZSRVFVRU5DWV9BVkFJTEFCTEUgKDEgPDwgMTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9YNjRfTVNSX1RTQ19GUkVRVUVOQ1lfQVZBSUxBQkxFICgxIDw8IDExKQogI2RlZmluZSBIVl9YNjRfTVNSX1NZTklDX0FWQUlMQUJMRSAoMSA8PCAyKQogI2RlZmluZSBIVl9YNjRfTVNSX1NZTlRJTUVSX0FWQUlMQUJMRSAoMSA8PCAzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFZfWDY0X01TUl9BUElDX0FDQ0VTU19BVkFJTEFCTEUgKDEgPDwgNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9NU1JfSFlQRVJDQUxMX0FWQUlMQUJMRSAoMSA8PCA1KQogI2RlZmluZSBIVl9YNjRfTVNSX1ZQX0lOREVYX0FWQUlMQUJMRSAoMSA8PCA2KQogI2RlZmluZSBIVl9YNjRfTVNSX1JFU0VUX0FWQUlMQUJMRSAoMSA8PCA3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFZfWDY0X01TUl9TVEFUX1BBR0VTX0FWQUlMQUJMRSAoMSA8PCA4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFZfWDY0X0NSRUFURV9QQVJUSVRJT05TICgxIDw8IDApCiAjZGVmaW5lIEhWX1g2NF9BQ0NFU1NfUEFSVElUSU9OX0lEICgxIDw8IDEpCiAjZGVmaW5lIEhWX1g2NF9BQ0NFU1NfTUVNT1JZX1BPT0wgKDEgPDwgMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9BREpVU1RfTUVTU0FHRV9CVUZGRVJTICgxIDw8IDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfUE9TVF9NRVNTQUdFUyAoMSA8PCA0KQogI2RlZmluZSBIVl9YNjRfU0lHTkFMX0VWRU5UUyAoMSA8PCA1KQogI2RlZmluZSBIVl9YNjRfQ1JFQVRFX1BPUlQgKDEgPDwgNikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9DT05ORUNUX1BPUlQgKDEgPDwgNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9BQ0NFU1NfU1RBVFMgKDEgPDwgOCkKICNkZWZpbmUgSFZfWDY0X0RFQlVHR0lORyAoMSA8PCAxMSkKICNkZWZpbmUgSFZfWDY0X0NQVV9QT1dFUl9NQU5BR0VNRU5UICgxIDw8IDEyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFZfWDY0X0NPTkZJR1VSRV9QUk9GSUxFUiAoMSA8PCAxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9NV0FJVF9BVkFJTEFCTEUgKDEgPDwgMCkKICNkZWZpbmUgSFZfWDY0X0dVRVNUX0RFQlVHR0lOR19BVkFJTEFCTEUgKDEgPDwgMSkKICNkZWZpbmUgSFZfWDY0X1BFUkZfTU9OSVRPUl9BVkFJTEFCTEUgKDEgPDwgMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9DUFVfRFlOQU1JQ19QQVJUSVRJT05JTkdfQVZBSUxBQkxFICgxIDw8IDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfSFlQRVJDQUxMX1BBUkFNU19YTU1fQVZBSUxBQkxFICgxIDw8IDQpCiAjZGVmaW5lIEhWX1g2NF9HVUVTVF9JRExFX1NUQVRFX0FWQUlMQUJMRSAoMSA8PCA1KQogI2RlZmluZSBIVl9YNjRfTVdBSVRfUkVDT01NRU5ERUQgKDEgPDwgMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9MT0NBTF9UTEJfRkxVU0hfUkVDT01NRU5ERUQgKDEgPDwgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9SRU1PVEVfVExCX0ZMVVNIX1JFQ09NTUVOREVEICgxIDw8IDIpCiAjZGVmaW5lIEhWX1g2NF9BUElDX0FDQ0VTU19SRUNPTU1FTkRFRCAoMSA8PCAzKQogI2RlZmluZSBIVl9YNjRfU1lTVEVNX1JFU0VUX1JFQ09NTUVOREVEICgxIDw8IDQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9YNjRfUkVMQVhFRF9USU1JTkdfUkVDT01NRU5ERUQgKDEgPDwgNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1g2NF9NU1JfR1VFU1RfT1NfSUQgMHg0MDAwMDAwMAogI2RlZmluZSBIVl9YNjRfTVNSX0hZUEVSQ0FMTCAweDQwMDAwMDAxCiAjZGVmaW5lIEhWX1g2NF9NU1JfVlBfSU5ERVggMHg0MDAwMDAwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFZfWDY0X01TUl9USU1FX1JFRl9DT1VOVCAweDQwMDAwMDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9YNjRfTVNSX1RTQ19GUkVRVUVOQ1kgMHg0MDAwMDAyMgorI2RlZmluZSBIVl9YNjRfTVNSX0FQSUNfRlJFUVVFTkNZIDB4NDAwMDAwMjMKICNkZWZpbmUgSFZfWDY0X01TUl9FT0kgMHg0MDAwMDA3MAogI2RlZmluZSBIVl9YNjRfTVNSX0lDUiAweDQwMDAwMDcxCi0jZGVmaW5lIEhWX1g2NF9NU1JfVFBSIDB4NDAwMDAwNzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhWX1g2NF9NU1JfVFBSIDB4NDAwMDAwNzIKICNkZWZpbmUgSFZfWDY0X01TUl9BUElDX0FTU0lTVF9QQUdFIDB4NDAwMDAwNzMKICNkZWZpbmUgSFZfWDY0X01TUl9TQ09OVFJPTCAweDQwMDAwMDgwCiAjZGVmaW5lIEhWX1g2NF9NU1JfU1ZFUlNJT04gMHg0MDAwMDA4MQotI2RlZmluZSBIVl9YNjRfTVNSX1NJRUZQIDB4NDAwMDAwODIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhWX1g2NF9NU1JfU0lFRlAgMHg0MDAwMDA4MgogI2RlZmluZSBIVl9YNjRfTVNSX1NJTVAgMHg0MDAwMDA4MwogI2RlZmluZSBIVl9YNjRfTVNSX0VPTSAweDQwMDAwMDg0CiAjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDAgMHg0MDAwMDA5MAotI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxIDB4NDAwMDAwOTEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDEgMHg0MDAwMDA5MQogI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQyIDB4NDAwMDAwOTIKICNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMyAweDQwMDAwMDkzCiAjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDQgMHg0MDAwMDA5NAotI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQ1IDB4NDAwMDAwOTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDUgMHg0MDAwMDA5NQogI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQ2IDB4NDAwMDAwOTYKICNkZWZpbmUgSFZfWDY0X01TUl9TSU5UNyAweDQwMDAwMDk3CiAjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDggMHg0MDAwMDA5OAotI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQ5IDB4NDAwMDAwOTkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDkgMHg0MDAwMDA5OQogI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxMCAweDQwMDAwMDlBCiAjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDExIDB4NDAwMDAwOUIKICNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMTIgMHg0MDAwMDA5QwotI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxMyAweDQwMDAwMDlECiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxMyAweDQwMDAwMDlECiAjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDE0IDB4NDAwMDAwOUUKICNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMTUgMHg0MDAwMDA5RgogI2RlZmluZSBIVl9YNjRfTVNSX0hZUEVSQ0FMTF9FTkFCTEUgMHgwMDAwMDAwMQotI2RlZmluZSBIVl9YNjRfTVNSX0hZUEVSQ0FMTF9QQUdFX0FERFJFU1NfU0hJRlQgMTIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhWX1g2NF9NU1JfSFlQRVJDQUxMX1BBR0VfQUREUkVTU19TSElGVCAxMgogI2RlZmluZSBIVl9YNjRfTVNSX0hZUEVSQ0FMTF9QQUdFX0FERFJFU1NfTUFTSyAgICh+KCgxdWxsIDw8IEhWX1g2NF9NU1JfSFlQRVJDQUxMX1BBR0VfQUREUkVTU19TSElGVCkgLSAxKSkKICNkZWZpbmUgSFZfWDY0X0hWX05PVElGWV9MT05HX1NQSU5fV0FJVCAweDAwMDgKICNkZWZpbmUgSFZfWDY0X01TUl9BUElDX0FTU0lTVF9QQUdFX0VOQUJMRSAweDAwMDAwMDAxCi0jZGVmaW5lIEhWX1g2NF9NU1JfQVBJQ19BU1NJU1RfUEFHRV9BRERSRVNTX1NISUZUIDEyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVl9YNjRfTVNSX0FQSUNfQVNTSVNUX1BBR0VfQUREUkVTU19TSElGVCAxMgogI2RlZmluZSBIVl9YNjRfTVNSX0FQSUNfQVNTSVNUX1BBR0VfQUREUkVTU19NQVNLICAgKH4oKDF1bGwgPDwgSFZfWDY0X01TUl9BUElDX0FTU0lTVF9QQUdFX0FERFJFU1NfU0hJRlQpIC0gMSkpCisjZGVmaW5lIEhWX1g2NF9NU1JfVFNDX1JFRkVSRU5DRV9FTkFCTEUgMHgwMDAwMDAwMQorI2RlZmluZSBIVl9YNjRfTVNSX1RTQ19SRUZFUkVOQ0VfQUREUkVTU19TSElGVCAxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFZfUFJPQ0VTU09SX1BPV0VSX1NUQVRFX0MwIDAKICNkZWZpbmUgSFZfUFJPQ0VTU09SX1BPV0VSX1NUQVRFX0MxIDEKICNkZWZpbmUgSFZfUFJPQ0VTU09SX1BPV0VSX1NUQVRFX0MyIDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1BST0NFU1NPUl9QT1dFUl9TVEFURV9DMyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9TVEFUVVNfU1VDQ0VTUyAwCiAjZGVmaW5lIEhWX1NUQVRVU19JTlZBTElEX0hZUEVSQ0FMTF9DT0RFIDIKICNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfSFlQRVJDQUxMX0lOUFVUIDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhWX1NUQVRVU19JTlZBTElEX0FMSUdOTUVOVCA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIVl9TVEFUVVNfSU5TVUZGSUNJRU5UX0JVRkZFUlMgMTkKK3R5cGVkZWYgc3RydWN0IF9IVl9SRUZFUkVOQ0VfVFNDX1BBR0UgeworIF9fdTMyIHRzY19zZXF1ZW5jZTsKKyBfX3UzMiByZXMxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB0c2Nfc2NhbGU7CisgX19zNjQgdHNjX29mZnNldDsKK30gSFZfUkVGRVJFTkNFX1RTQ19QQUdFLCAqUEhWX1JFRkVSRU5DRV9UU0NfUEFHRTsKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20va3ZtLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL2t2bS5oCmluZGV4IGFiMzAxZDEuLjIwMGQ4MTggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20va3ZtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9rdm0uaApAQCAtMjMxLDkgKzIzMSw5IEBACiAgX191MzIgcGFkZGluZ1szXTsKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLVk1fQ1BVSURfRkxBR19TSUdOSUZDQU5UX0lOREVYIDEKLSNkZWZpbmUgS1ZNX0NQVUlEX0ZMQUdfU1RBVEVGVUxfRlVOQyAyCi0jZGVmaW5lIEtWTV9DUFVJRF9GTEFHX1NUQVRFX1JFQURfTkVYVCA0CisjZGVmaW5lIEtWTV9DUFVJRF9GTEFHX1NJR05JRkNBTlRfSU5ERVggQklUKDApCisjZGVmaW5lIEtWTV9DUFVJRF9GTEFHX1NUQVRFRlVMX0ZVTkMgQklUKDEpCisjZGVmaW5lIEtWTV9DUFVJRF9GTEFHX1NUQVRFX1JFQURfTkVYVCBCSVQoMikKIHN0cnVjdCBrdm1fY3B1aWQyIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbmVudDsKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20va3ZtX3BhcmEuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20va3ZtX3BhcmEuaAppbmRleCBlOTFjMThlLi43ZmI1ZWZlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL2t2bV9wYXJhLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9rdm1fcGFyYS5oCkBAIC0zMiw2OCArMzIsNjkgQEAKICNkZWZpbmUgS1ZNX0ZFQVRVUkVfU1RFQUxfVElNRSA1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fRkVBVFVSRV9QVl9FT0kgNgorI2RlZmluZSBLVk1fRkVBVFVSRV9QVl9VTkhBTFQgNwogI2RlZmluZSBLVk1fRkVBVFVSRV9DTE9DS1NPVVJDRV9TVEFCTEVfQklUIDI0CiAjZGVmaW5lIE1TUl9LVk1fV0FMTF9DTE9DSyAweDExCi0jZGVmaW5lIE1TUl9LVk1fU1lTVEVNX1RJTUUgMHgxMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0tWTV9TWVNURU1fVElNRSAweDEyCiAjZGVmaW5lIEtWTV9NU1JfRU5BQkxFRCAxCiAjZGVmaW5lIE1TUl9LVk1fV0FMTF9DTE9DS19ORVcgMHg0YjU2NGQwMAogI2RlZmluZSBNU1JfS1ZNX1NZU1RFTV9USU1FX05FVyAweDRiNTY0ZDAxCi0jZGVmaW5lIE1TUl9LVk1fQVNZTkNfUEZfRU4gMHg0YjU2NGQwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0tWTV9BU1lOQ19QRl9FTiAweDRiNTY0ZDAyCiAjZGVmaW5lIE1TUl9LVk1fU1RFQUxfVElNRSAweDRiNTY0ZDAzCiAjZGVmaW5lIE1TUl9LVk1fUFZfRU9JX0VOIDB4NGI1NjRkMDQKIHN0cnVjdCBrdm1fc3RlYWxfdGltZSB7Ci0gX191NjQgc3RlYWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHN0ZWFsOwogIF9fdTMyIHZlcnNpb247CiAgX191MzIgZmxhZ3M7CiAgX191MzIgcGFkWzEyXTsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgS1ZNX1NURUFMX0FMSUdOTUVOVF9CSVRTIDUKICNkZWZpbmUgS1ZNX1NURUFMX1ZBTElEX0JJVFMgKCgtMVVMTCA8PCAoS1ZNX1NURUFMX0FMSUdOTUVOVF9CSVRTICsgMSkpKQogI2RlZmluZSBLVk1fU1RFQUxfUkVTRVJWRURfTUFTSyAoKCgxIDw8IEtWTV9TVEVBTF9BTElHTk1FTlRfQklUUykgLSAxICkgPDwgMSkKLSNkZWZpbmUgS1ZNX01BWF9NTVVfT1BfQkFUQ0ggMzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9NQVhfTU1VX09QX0JBVENIIDMyCiAjZGVmaW5lIEtWTV9BU1lOQ19QRl9FTkFCTEVEICgxIDw8IDApCiAjZGVmaW5lIEtWTV9BU1lOQ19QRl9TRU5EX0FMV0FZUyAoMSA8PCAxKQogI2RlZmluZSBLVk1fTU1VX09QX1dSSVRFX1BURSAxCi0jZGVmaW5lIEtWTV9NTVVfT1BfRkxVU0hfVExCIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9NTVVfT1BfRkxVU0hfVExCIDIKICNkZWZpbmUgS1ZNX01NVV9PUF9SRUxFQVNFX1BUIDMKIHN0cnVjdCBrdm1fbW11X29wX2hlYWRlciB7CiAgX191MzIgb3A7Ci0gX191MzIgcGFkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwYWQ7CiB9Owogc3RydWN0IGt2bV9tbXVfb3Bfd3JpdGVfcHRlIHsKICBzdHJ1Y3Qga3ZtX21tdV9vcF9oZWFkZXIgaGVhZGVyOwotIF9fdTY0IHB0ZV9waHlzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBwdGVfcGh5czsKICBfX3U2NCBwdGVfdmFsOwogfTsKIHN0cnVjdCBrdm1fbW11X29wX2ZsdXNoX3RsYiB7Ci0gc3RydWN0IGt2bV9tbXVfb3BfaGVhZGVyIGhlYWRlcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGt2bV9tbXVfb3BfaGVhZGVyIGhlYWRlcjsKIH07CiBzdHJ1Y3Qga3ZtX21tdV9vcF9yZWxlYXNlX3B0IHsKICBzdHJ1Y3Qga3ZtX21tdV9vcF9oZWFkZXIgaGVhZGVyOwotIF9fdTY0IHB0X3BoeXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHB0X3BoeXM7CiB9OwogI2RlZmluZSBLVk1fUFZfUkVBU09OX1BBR0VfTk9UX1BSRVNFTlQgMQogI2RlZmluZSBLVk1fUFZfUkVBU09OX1BBR0VfUkVBRFkgMgotc3RydWN0IGt2bV92Y3B1X3B2X2FwZl9kYXRhIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qga3ZtX3ZjcHVfcHZfYXBmX2RhdGEgewogIF9fdTMyIHJlYXNvbjsKICBfX3U4IHBhZFs2MF07CiAgX191MzIgZW5hYmxlZDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgS1ZNX1BWX0VPSV9CSVQgMAogI2RlZmluZSBLVk1fUFZfRU9JX01BU0sgKDB4MSA8PCBLVk1fUFZfRU9JX0JJVCkKICNkZWZpbmUgS1ZNX1BWX0VPSV9FTkFCTEVEIEtWTV9QVl9FT0lfTUFTSwotI2RlZmluZSBLVk1fUFZfRU9JX0RJU0FCTEVEIDB4MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1BWX0VPSV9ESVNBQkxFRCAweDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9tc3ItaW5kZXguaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vbXNyLWluZGV4LmgKaW5kZXggY2U3NzIwNS4uNmU0Y2FjNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9tc3ItaW5kZXguaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL21zci1pbmRleC5oCkBAIC0xNjEsMzg3ICsxNjEsMzkyIEBACiAjZGVmaW5lIE1TUl9QUDFfRU5FUkdZX1NUQVRVUyAweDAwMDAwNjQxCiAjZGVmaW5lIE1TUl9QUDFfUE9MSUNZIDB4MDAwMDA2NDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9DT1JFX0MxX1JFUyAweDAwMDAwNjYwCiAjZGVmaW5lIE1TUl9BTUQ2NF9NQzBfTUFTSyAweGMwMDEwMDQ0CiAjZGVmaW5lIE1TUl9JQTMyX01DeF9DVEwoeCkgKE1TUl9JQTMyX01DMF9DVEwgKyA0Kih4KSkKICNkZWZpbmUgTVNSX0lBMzJfTUN4X1NUQVRVUyh4KSAoTVNSX0lBMzJfTUMwX1NUQVRVUyArIDQqKHgpKQotI2RlZmluZSBNU1JfSUEzMl9NQ3hfQUREUih4KSAoTVNSX0lBMzJfTUMwX0FERFIgKyA0Kih4KSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9JQTMyX01DeF9BRERSKHgpIChNU1JfSUEzMl9NQzBfQUREUiArIDQqKHgpKQogI2RlZmluZSBNU1JfSUEzMl9NQ3hfTUlTQyh4KSAoTVNSX0lBMzJfTUMwX01JU0MgKyA0Kih4KSkKICNkZWZpbmUgTVNSX0FNRDY0X01DeF9NQVNLKHgpIChNU1JfQU1ENjRfTUMwX01BU0sgKyAoeCkpCiAjZGVmaW5lIE1TUl9JQTMyX01DMF9DVEwyIDB4MDAwMDAyODAKLSNkZWZpbmUgTVNSX0lBMzJfTUN4X0NUTDIoeCkgKE1TUl9JQTMyX01DMF9DVEwyICsgKHgpKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfTUN4X0NUTDIoeCkgKE1TUl9JQTMyX01DMF9DVEwyICsgKHgpKQogI2RlZmluZSBNU1JfUDZfUEVSRkNUUjAgMHgwMDAwMDBjMQogI2RlZmluZSBNU1JfUDZfUEVSRkNUUjEgMHgwMDAwMDBjMgogI2RlZmluZSBNU1JfUDZfRVZOVFNFTDAgMHgwMDAwMDE4NgotI2RlZmluZSBNU1JfUDZfRVZOVFNFTDEgMHgwMDAwMDE4NwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX1A2X0VWTlRTRUwxIDB4MDAwMDAxODcKICNkZWZpbmUgTVNSX0tOQ19QRVJGQ1RSMCAweDAwMDAwMDIwCiAjZGVmaW5lIE1TUl9LTkNfUEVSRkNUUjEgMHgwMDAwMDAyMQogI2RlZmluZSBNU1JfS05DX0VWTlRTRUwwIDB4MDAwMDAwMjgKLSNkZWZpbmUgTVNSX0tOQ19FVk5UU0VMMSAweDAwMDAwMDI5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU1JfS05DX0VWTlRTRUwxIDB4MDAwMDAwMjkKKyNkZWZpbmUgTVNSX0lBMzJfUE1DMCAweDAwMDAwNGMxCiAjZGVmaW5lIE1TUl9BTUQ2NF9QQVRDSF9MRVZFTCAweDAwMDAwMDhiCiAjZGVmaW5lIE1TUl9BTUQ2NF9UU0NfUkFUSU8gMHhjMDAwMDEwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0FNRDY0X05CX0NGRyAweGMwMDEwMDFmCiAjZGVmaW5lIE1TUl9BTUQ2NF9QQVRDSF9MT0FERVIgMHhjMDAxMDAyMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0FNRDY0X09TVldfSURfTEVOR1RIIDB4YzAwMTAxNDAKICNkZWZpbmUgTVNSX0FNRDY0X09TVldfU1RBVFVTIDB4YzAwMTAxNDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TUl9BTUQ2NF9MU19DRkcgMHhjMDAxMTAyMAogI2RlZmluZSBNU1JfQU1ENjRfRENfQ0ZHIDB4YzAwMTEwMjIKICNkZWZpbmUgTVNSX0FNRDY0X0JVX0NGRzIgMHhjMDAxMTAyYQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0FNRDY0X0lCU0ZFVENIQ1RMIDB4YzAwMTEwMzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNGRVRDSExJTkFEIDB4YzAwMTEwMzEKICNkZWZpbmUgTVNSX0FNRDY0X0lCU0ZFVENIUEhZU0FEIDB4YzAwMTEwMzIKICNkZWZpbmUgTVNSX0FNRDY0X0lCU0ZFVENIX1JFR19DT1VOVCAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfQU1ENjRfSUJTRkVUQ0hfUkVHX01BU0sgKCgxVUw8PE1TUl9BTUQ2NF9JQlNGRVRDSF9SRUdfQ09VTlQpLTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BDVEwgMHhjMDAxMTAzMwogI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BSSVAgMHhjMDAxMTAzNAogI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BEQVRBIDB4YzAwMTEwMzUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNPUERBVEEyIDB4YzAwMTEwMzYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNPUERBVEEzIDB4YzAwMTEwMzcKICNkZWZpbmUgTVNSX0FNRDY0X0lCU0RDTElOQUQgMHhjMDAxMTAzOAogI2RlZmluZSBNU1JfQU1ENjRfSUJTRENQSFlTQUQgMHhjMDAxMTAzOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0FNRDY0X0lCU09QX1JFR19DT1VOVCA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BfUkVHX01BU0sgKCgxVUw8PE1TUl9BTUQ2NF9JQlNPUF9SRUdfQ09VTlQpLTEpCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNDVEwgMHhjMDAxMTAzYQogI2RlZmluZSBNU1JfQU1ENjRfSUJTQlJUQVJHRVQgMHhjMDAxMTAzYgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0FNRDY0X0lCU19SRUdfQ09VTlRfTUFYIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9GMTZIX0wySV9QRVJGX0NUTCAweGMwMDEwMjMwCiAjZGVmaW5lIE1TUl9GMTZIX0wySV9QRVJGX0NUUiAweGMwMDEwMjMxCiAjZGVmaW5lIE1TUl9GMTVIX1BFUkZfQ1RMIDB4YzAwMTAyMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9GMTVIX1BFUkZfQ1RSIDB4YzAwMTAyMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9GMTVIX05CX1BFUkZfQ1RMIDB4YzAwMTAyNDAKICNkZWZpbmUgTVNSX0YxNUhfTkJfUEVSRl9DVFIgMHhjMDAxMDI0MQogI2RlZmluZSBNU1JfRkFNMTBIX01NSU9fQ09ORl9CQVNFIDB4YzAwMTAwNTgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZBTTEwSF9NTUlPX0NPTkZfRU5BQkxFICgxPDwwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkFNMTBIX01NSU9fQ09ORl9CVVNSQU5HRV9NQVNLIDB4ZgogI2RlZmluZSBGQU0xMEhfTU1JT19DT05GX0JVU1JBTkdFX1NISUZUIDIKICNkZWZpbmUgRkFNMTBIX01NSU9fQ09ORl9CQVNFX01BU0sgMHhmZmZmZmZmVUxMCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGQU0xMEhfTU1JT19DT05GX0JBU0VfU0hJRlQgMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9GQU0xMEhfTk9ERV9JRCAweGMwMDExMDBjCiAjZGVmaW5lIE1TUl9LOF9UT1BfTUVNMSAweGMwMDEwMDFhCiAjZGVmaW5lIE1TUl9LOF9UT1BfTUVNMiAweGMwMDEwMDFkCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSzhfU1lTQ0ZHIDB4YzAwMTAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9LOF9JTlRfUEVORElOR19NU0cgMHhjMDAxMDA1NQogI2RlZmluZSBLOF9JTlRQX0MxRV9BQ1RJVkVfTUFTSyAweDE4MDAwMDAwCiAjZGVmaW5lIE1TUl9LOF9UU0VHX0FERFIgMHhjMDAxMDExMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSzhfTVRSUkZJWFJBTkdFX0RSQU1fRU5BQkxFIDB4MDAwNDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEs4X01UUlJGSVhSQU5HRV9EUkFNX01PRElGWSAweDAwMDgwMDAwCiAjZGVmaW5lIEs4X01UUlJfUkRNRU1fV1JNRU1fTUFTSyAweDE4MTgxODE4CiAjZGVmaW5lIE1TUl9LN19FVk5UU0VMMCAweGMwMDEwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSzdfUEVSRkNUUjAgMHhjMDAxMDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0s3X0VWTlRTRUwxIDB4YzAwMTAwMDEKICNkZWZpbmUgTVNSX0s3X1BFUkZDVFIxIDB4YzAwMTAwMDUKICNkZWZpbmUgTVNSX0s3X0VWTlRTRUwyIDB4YzAwMTAwMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMiAweGMwMDEwMDA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSzdfRVZOVFNFTDMgMHhjMDAxMDAwMwogI2RlZmluZSBNU1JfSzdfUEVSRkNUUjMgMHhjMDAxMDAwNwogI2RlZmluZSBNU1JfSzdfQ0xLX0NUTCAweGMwMDEwMDFiCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSzdfSFdDUiAweGMwMDEwMDE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9DVEwgMHhjMDAxMDA0MQogI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9TVEFUVVMgMHhjMDAxMDA0MgogI2RlZmluZSBNU1JfSzZfV0hDUiAweGMwMDAwMDgyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSzZfVVdDQ1IgMHhjMDAwMDA4NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0s2X0VQTVIgMHhjMDAwMDA4NgogI2RlZmluZSBNU1JfSzZfUFNPUiAweGMwMDAwMDg3CiAjZGVmaW5lIE1TUl9LNl9QRklSIDB4YzAwMDAwODgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JRFRfRkNSMSAweDAwMDAwMTA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSURUX0ZDUjIgMHgwMDAwMDEwOAogI2RlZmluZSBNU1JfSURUX0ZDUjMgMHgwMDAwMDEwOQogI2RlZmluZSBNU1JfSURUX0ZDUjQgMHgwMDAwMDEwYQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lEVF9NQ1IwIDB4MDAwMDAxMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JRFRfTUNSMSAweDAwMDAwMTExCiAjZGVmaW5lIE1TUl9JRFRfTUNSMiAweDAwMDAwMTEyCiAjZGVmaW5lIE1TUl9JRFRfTUNSMyAweDAwMDAwMTEzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSURUX01DUjQgMHgwMDAwMDExNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lEVF9NQ1I1IDB4MDAwMDAxMTUKICNkZWZpbmUgTVNSX0lEVF9NQ1I2IDB4MDAwMDAxMTYKICNkZWZpbmUgTVNSX0lEVF9NQ1I3IDB4MDAwMDAxMTcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JRFRfTUNSX0NUUkwgMHgwMDAwMDEyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1ZJQV9GQ1IgMHgwMDAwMTEwNwogI2RlZmluZSBNU1JfVklBX0xPTkdIQVVMIDB4MDAwMDExMGEKICNkZWZpbmUgTVNSX1ZJQV9STkcgMHgwMDAwMTEwYgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1ZJQV9CQ1IyIDB4MDAwMDExNDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9UTVRBX0xPTkdSVU5fQ1RSTCAweDgwODY4MDEwCiAjZGVmaW5lIE1TUl9UTVRBX0xPTkdSVU5fRkxBR1MgMHg4MDg2ODAxMQogI2RlZmluZSBNU1JfVE1UQV9MUlRJX1JFQURPVVQgMHg4MDg2ODAxOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1RNVEFfTFJUSV9WT0xUX01IWiAweDgwODY4MDFhCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9QNV9NQ19BRERSIDB4MDAwMDAwMDAKICNkZWZpbmUgTVNSX0lBMzJfUDVfTUNfVFlQRSAweDAwMDAwMDAxCiAjZGVmaW5lIE1TUl9JQTMyX1RTQyAweDAwMDAwMDEwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9QTEFURk9STV9JRCAweDAwMDAwMDE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiAweDAwMDAwMDJhCiAjZGVmaW5lIE1TUl9FQkNfRlJFUVVFTkNZX0lEIDB4MDAwMDAwMmMKICNkZWZpbmUgTVNSX1NNSV9DT1VOVCAweDAwMDAwMDM0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9GRUFUVVJFX0NPTlRST0wgMHgwMDAwMDAzYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfVFNDX0FESlVTVCAweDAwMDAwMDNiCiAjZGVmaW5lIEZFQVRVUkVfQ09OVFJPTF9MT0NLRUQgKDE8PDApCiAjZGVmaW5lIEZFQVRVUkVfQ09OVFJPTF9WTVhPTl9FTkFCTEVEX0lOU0lERV9TTVggKDE8PDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGRUFUVVJFX0NPTlRST0xfVk1YT05fRU5BQkxFRF9PVVRTSURFX1NNWCAoMTw8MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFIDB4MDAwMDAwMWIKICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0VfQlNQICgxPDw4KQogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUgKDE8PDExKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0VfQkFTRSAoMHhmZmZmZjw8MTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9UU0NERUFETElORSAweDAwMDAwNmUwCiAjZGVmaW5lIE1TUl9JQTMyX1VDT0RFX1dSSVRFIDB4MDAwMDAwNzkKICNkZWZpbmUgTVNSX0lBMzJfVUNPREVfUkVWIDB4MDAwMDAwOGIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZfU1RBVFVTIDB4MDAwMDAxOTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZfQ1RMIDB4MDAwMDAxOTkKICNkZWZpbmUgTVNSX0FNRF9QU1RBVEVfREVGX0JBU0UgMHhjMDAxMDA2NAogI2RlZmluZSBNU1JfQU1EX1BFUkZfU1RBVFVTIDB4YzAwMTAwNjMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9BTURfUEVSRl9DVEwgMHhjMDAxMDA2MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTVBFUkYgMHgwMDAwMDBlNwogI2RlZmluZSBNU1JfSUEzMl9BUEVSRiAweDAwMDAwMGU4CiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0NPTlRST0wgMHgwMDAwMDE5YQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfVEhFUk1fSU5URVJSVVBUIDB4MDAwMDAxOWIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRIRVJNX0lOVF9ISUdIX0VOQUJMRSAoMSA8PCAwKQogI2RlZmluZSBUSEVSTV9JTlRfTE9XX0VOQUJMRSAoMSA8PCAxKQogI2RlZmluZSBUSEVSTV9JTlRfUExOX0VOQUJMRSAoMSA8PCAyNCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX1NUQVRVUyAweDAwMDAwMTljCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSEVSTV9TVEFUVVNfUFJPQ0hPVCAoMSA8PCAwKQogI2RlZmluZSBUSEVSTV9TVEFUVVNfUE9XRVJfTElNSVQgKDEgPDwgMTApCiAjZGVmaW5lIE1TUl9USEVSTTJfQ1RMIDB4MDAwMDAxOWQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9USEVSTTJfQ1RMX1RNX1NFTEVDVCAoMVVMTCA8PCAxNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFIDB4MDAwMDAxYTAKICNkZWZpbmUgTVNSX0lBMzJfVEVNUEVSQVRVUkVfVEFSR0VUIDB4MDAwMDAxYTIKICNkZWZpbmUgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUyAweDAwMDAwMWIwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFTkVSR1lfUEVSRl9CSUFTX1BFUkZPUk1BTkNFIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVORVJHWV9QRVJGX0JJQVNfTk9STUFMIDYKICNkZWZpbmUgRU5FUkdZX1BFUkZfQklBU19QT1dFUlNBVkUgMTUKICNkZWZpbmUgTVNSX0lBMzJfUEFDS0FHRV9USEVSTV9TVEFUVVMgMHgwMDAwMDFiMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0FHRV9USEVSTV9TVEFUVVNfUFJPQ0hPVCAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0FHRV9USEVSTV9TVEFUVVNfUE9XRVJfTElNSVQgKDEgPDwgMTApCiAjZGVmaW5lIE1TUl9JQTMyX1BBQ0tBR0VfVEhFUk1fSU5URVJSVVBUIDB4MDAwMDAxYjIKICNkZWZpbmUgUEFDS0FHRV9USEVSTV9JTlRfSElHSF9FTkFCTEUgKDEgPDwgMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBQ0tBR0VfVEhFUk1fSU5UX0xPV19FTkFCTEUgKDEgPDwgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBQ0tBR0VfVEhFUk1fSU5UX1BMTl9FTkFCTEUgKDEgPDwgMjQpCiAjZGVmaW5lIFRIRVJNX0lOVF9USFJFU0hPTEQwX0VOQUJMRSAoMSA8PCAxNSkKICNkZWZpbmUgVEhFUk1fU0hJRlRfVEhSRVNIT0xEMCA4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSEVSTV9NQVNLX1RIUkVTSE9MRDAgKDB4N2YgPDwgVEhFUk1fU0hJRlRfVEhSRVNIT0xEMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRIRVJNX0lOVF9USFJFU0hPTEQxX0VOQUJMRSAoMSA8PCAyMykKICNkZWZpbmUgVEhFUk1fU0hJRlRfVEhSRVNIT0xEMSAxNgogI2RlZmluZSBUSEVSTV9NQVNLX1RIUkVTSE9MRDEgKDB4N2YgPDwgVEhFUk1fU0hJRlRfVEhSRVNIT0xEMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRIRVJNX1NUQVRVU19USFJFU0hPTEQwICgxIDw8IDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSEVSTV9MT0dfVEhSRVNIT0xEMCAoMSA8PCA3KQogI2RlZmluZSBUSEVSTV9TVEFUVVNfVEhSRVNIT0xEMSAoMSA8PCA4KQogI2RlZmluZSBUSEVSTV9MT0dfVEhSRVNIT0xEMSAoMSA8PCA5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRkFTVF9TVFJJTkcgKDFVTEwgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RDQyAoMVVMTCA8PCAxKQogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9FTU9OICgxVUxMIDw8IDcpCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0JUU19VTkFWQUlMICgxVUxMIDw8IDExKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfUEVCU19VTkFWQUlMICgxVUxMIDw8IDEyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRU5IQU5DRURfU1BFRURTVEVQICgxVUxMIDw8IDE2KQogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9NV0FJVCAoMVVMTCA8PCAxOCkKICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfTElNSVRfQ1BVSUQgKDFVTEwgPDwgMjIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9YVFBSX0RJU0FCTEUgKDFVTEwgPDwgMjMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9YRF9ESVNBQkxFICgxVUxMIDw8IDM0KQogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9YODdfQ09NUEFUICgxVUxMIDw8IDIpCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMSAoMVVMTCA8PCAzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfU1BMSVRfTE9DS19ESVNBQkxFICgxVUxMIDw8IDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9MM0NBQ0hFX0RJU0FCTEUgKDFVTEwgPDwgNikKICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfU1VQUFJFU1NfTE9DSyAoMVVMTCA8PCA4KQogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9QUkVGRVRDSF9ESVNBQkxFICgxVUxMIDw8IDkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9GRVJSICgxVUxMIDw8IDEwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfRkVSUl9NVUxUSVBMRVggKDFVTEwgPDwgMTApCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RNMiAoMVVMTCA8PCAxMykKICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfQURKX1BSRUZfRElTQUJMRSAoMVVMTCA8PCAxOSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1NQRUVEU1RFUF9MT0NLICgxVUxMIDw8IDIwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVfTDFEX0NPTlRFWFQgKDFVTEwgPDwgMjQpCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX0RDVV9QUkVGX0RJU0FCTEUgKDFVTEwgPDwgMzcpCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFX1RVUkJPX0RJU0FCTEUgKDFVTEwgPDwgMzgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9JUF9QUkVGX0RJU0FCTEUgKDFVTEwgPDwgMzkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9UU0NfREVBRExJTkUgMHgwMDAwMDZFMAogI2RlZmluZSBNU1JfSUEzMl9NQ0dfRUFYIDB4MDAwMDAxODAKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCWCAweDAwMDAwMTgxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NQ0dfRUNYIDB4MDAwMDAxODIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01DR19FRFggMHgwMDAwMDE4MwogI2RlZmluZSBNU1JfSUEzMl9NQ0dfRVNJIDB4MDAwMDAxODQKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VESSAweDAwMDAwMTg1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NQ0dfRUJQIDB4MDAwMDAxODYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01DR19FU1AgMHgwMDAwMDE4NwogI2RlZmluZSBNU1JfSUEzMl9NQ0dfRUZMQUdTIDB4MDAwMDAxODgKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VJUCAweDAwMDAwMTg5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NQ0dfUkVTRVJWRUQgMHgwMDAwMDE4YQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMCAweDAwMDAwMzAwCiAjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjEgMHgwMDAwMDMwMQogI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIyIDB4MDAwMDAzMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjMgMHgwMDAwMDMwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIwIDB4MDAwMDAzMDQKICNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIxIDB4MDAwMDAzMDUKICNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIyIDB4MDAwMDAzMDYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMyAweDAwMDAwMzA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjAgMHgwMDAwMDMwOAogI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjEgMHgwMDAwMDMwOQogI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjIgMHgwMDAwMDMwYQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIzIDB4MDAwMDAzMGIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMCAweDAwMDAwMzBjCiAjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMSAweDAwMDAwMzBkCiAjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMiAweDAwMDAwMzBlCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfSVFfUEVSRkNUUjMgMHgwMDAwMDMwZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFI0IDB4MDAwMDAzMTAKICNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFI1IDB4MDAwMDAzMTEKICNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMCAweDAwMDAwMzYwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IxIDB4MDAwMDAzNjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjIgMHgwMDAwMDM2MgogI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IzIDB4MDAwMDAzNjMKICNkZWZpbmUgTVNSX1A0X01TX0NDQ1IwIDB4MDAwMDAzNjQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMSAweDAwMDAwMzY1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjIgMHgwMDAwMDM2NgogI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjMgMHgwMDAwMDM2NwogI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjAgMHgwMDAwMDM2OAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0ZMQU1FX0NDQ1IxIDB4MDAwMDAzNjkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMiAweDAwMDAwMzZhCiAjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMyAweDAwMDAwMzZiCiAjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMCAweDAwMDAwMzZjCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjEgMHgwMDAwMDM2ZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IyIDB4MDAwMDAzNmUKICNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IzIDB4MDAwMDAzNmYKICNkZWZpbmUgTVNSX1A0X0lRX0NDQ1I0IDB4MDAwMDAzNzAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNSAweDAwMDAwMzcxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IwIDB4MDAwMDAzY2EKICNkZWZpbmUgTVNSX1A0X0FMRl9FU0NSMSAweDAwMDAwM2NiCiAjZGVmaW5lIE1TUl9QNF9CUFVfRVNDUjAgMHgwMDAwMDNiMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0JQVV9FU0NSMSAweDAwMDAwM2IzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfQlNVX0VTQ1IwIDB4MDAwMDAzYTAKICNkZWZpbmUgTVNSX1A0X0JTVV9FU0NSMSAweDAwMDAwM2ExCiAjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjAgMHgwMDAwMDNiOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMSAweDAwMDAwM2I5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IyIDB4MDAwMDAzY2MKICNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMyAweDAwMDAwM2NkCiAjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjQgMHgwMDAwMDNlMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSNSAweDAwMDAwM2UxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IwIDB4MDAwMDAzYTgKICNkZWZpbmUgTVNSX1A0X0RBQ19FU0NSMSAweDAwMDAwM2E5CiAjZGVmaW5lIE1TUl9QNF9GSVJNX0VTQ1IwIDB4MDAwMDAzYTQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9GSVJNX0VTQ1IxIDB4MDAwMDAzYTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9GTEFNRV9FU0NSMCAweDAwMDAwM2E2CiAjZGVmaW5lIE1TUl9QNF9GTEFNRV9FU0NSMSAweDAwMDAwM2E3CiAjZGVmaW5lIE1TUl9QNF9GU0JfRVNDUjAgMHgwMDAwMDNhMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0ZTQl9FU0NSMSAweDAwMDAwM2EzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfSVFfRVNDUjAgMHgwMDAwMDNiYQogI2RlZmluZSBNU1JfUDRfSVFfRVNDUjEgMHgwMDAwMDNiYgogI2RlZmluZSBNU1JfUDRfSVNfRVNDUjAgMHgwMDAwMDNiNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lTX0VTQ1IxIDB4MDAwMDAzYjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9JVExCX0VTQ1IwIDB4MDAwMDAzYjYKICNkZWZpbmUgTVNSX1A0X0lUTEJfRVNDUjEgMHgwMDAwMDNiNwogI2RlZmluZSBNU1JfUDRfSVhfRVNDUjAgMHgwMDAwMDNjOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lYX0VTQ1IxIDB4MDAwMDAzYzkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9NT0JfRVNDUjAgMHgwMDAwMDNhYQogI2RlZmluZSBNU1JfUDRfTU9CX0VTQ1IxIDB4MDAwMDAzYWIKICNkZWZpbmUgTVNSX1A0X01TX0VTQ1IwIDB4MDAwMDAzYzAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9NU19FU0NSMSAweDAwMDAwM2MxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfUE1IX0VTQ1IwIDB4MDAwMDAzYWMKICNkZWZpbmUgTVNSX1A0X1BNSF9FU0NSMSAweDAwMDAwM2FkCiAjZGVmaW5lIE1TUl9QNF9SQVRfRVNDUjAgMHgwMDAwMDNiYwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X1JBVF9FU0NSMSAweDAwMDAwM2JkCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfU0FBVF9FU0NSMCAweDAwMDAwM2FlCiAjZGVmaW5lIE1TUl9QNF9TQUFUX0VTQ1IxIDB4MDAwMDAzYWYKICNkZWZpbmUgTVNSX1A0X1NTVV9FU0NSMCAweDAwMDAwM2JlCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfU1NVX0VTQ1IxIDB4MDAwMDAzYmYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9UQlBVX0VTQ1IwIDB4MDAwMDAzYzIKICNkZWZpbmUgTVNSX1A0X1RCUFVfRVNDUjEgMHgwMDAwMDNjMwogI2RlZmluZSBNU1JfUDRfVENfRVNDUjAgMHgwMDAwMDNjNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X1RDX0VTQ1IxIDB4MDAwMDAzYzUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjAgMHgwMDAwMDNiMAogI2RlZmluZSBNU1JfUDRfVTJMX0VTQ1IxIDB4MDAwMDAzYjEKICNkZWZpbmUgTVNSX1A0X1BFQlNfTUFUUklYX1ZFUlQgMHgwMDAwMDNmMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0NPUkVfUEVSRl9GSVhFRF9DVFIwIDB4MDAwMDAzMDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMSAweDAwMDAwMzBhCiAjZGVmaW5lIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMiAweDAwMDAwMzBiCiAjZGVmaW5lIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwgMHgwMDAwMDM4ZAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTIDB4MDAwMDAzOGUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9DT1JFX1BFUkZfR0xPQkFMX0NUUkwgMHgwMDAwMDM4ZgogI2RlZmluZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTCAweDAwMDAwMzkwCiAjZGVmaW5lIE1TUl9HRU9ERV9CVVNDT05UX0NPTkYwIDB4MDAwMDE5MDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9CQVNJQyAweDAwMDAwNDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9WTVhfUElOQkFTRURfQ1RMUyAweDAwMDAwNDgxCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9QUk9DQkFTRURfQ1RMUyAweDAwMDAwNDgyCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9FWElUX0NUTFMgMHgwMDAwMDQ4MwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfVk1YX0VOVFJZX0NUTFMgMHgwMDAwMDQ4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfVk1YX01JU0MgMHgwMDAwMDQ4NQogI2RlZmluZSBNU1JfSUEzMl9WTVhfQ1IwX0ZJWEVEMCAweDAwMDAwNDg2CiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9DUjBfRklYRUQxIDB4MDAwMDA0ODcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9DUjRfRklYRUQwIDB4MDAwMDA0ODgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9DUjRfRklYRUQxIDB4MDAwMDA0ODkKICNkZWZpbmUgTVNSX0lBMzJfVk1YX1ZNQ1NfRU5VTSAweDAwMDAwNDhhCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9QUk9DQkFTRURfQ1RMUzIgMHgwMDAwMDQ4YgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfVk1YX0VQVF9WUElEX0NBUCAweDAwMDAwNDhjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9WTVhfVFJVRV9QSU5CQVNFRF9DVExTIDB4MDAwMDA0OGQKICNkZWZpbmUgTVNSX0lBMzJfVk1YX1RSVUVfUFJPQ0JBU0VEX0NUTFMgMHgwMDAwMDQ4ZQogI2RlZmluZSBNU1JfSUEzMl9WTVhfVFJVRV9FWElUX0NUTFMgMHgwMDAwMDQ4ZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfVk1YX1RSVUVfRU5UUllfQ1RMUyAweDAwMDAwNDkwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU1JfSUEzMl9WTVhfVk1GVU5DIDB4MDAwMDA0OTEKICNkZWZpbmUgVk1YX0JBU0lDX1ZNQ1NfU0laRV9TSElGVCAzMgogI2RlZmluZSBWTVhfQkFTSUNfNjQgMHgwMDAxMDAwMDAwMDAwMDAwTExVCiAjZGVmaW5lIFZNWF9CQVNJQ19NRU1fVFlQRV9TSElGVCA1MApAQCAtNTUxLDggKzU1Niw5IEBACiAjZGVmaW5lIFZNWF9CQVNJQ19JTk9VVCAweDAwNDAwMDAwMDAwMDAwMDBMTFUKICNkZWZpbmUgTVNSX0lBMzJfVk1YX01JU0NfVk1XUklURV9TSEFET1dfUk9fRklFTERTICgxVUxMIDw8IDI5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfVk1YX01JU0NfUFJFRU1QVElPTl9USU1FUl9TQ0FMRSAweDFGCiAjZGVmaW5lIE1TUl9WTV9DUiAweGMwMDEwMTE0CiAjZGVmaW5lIE1TUl9WTV9JR05ORSAweGMwMDEwMTE1CiAjZGVmaW5lIE1TUl9WTV9IU0FWRV9QQSAweGMwMDEwMTE3Ci0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vcHJvY2Vzc29yLWZsYWdzLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3Byb2Nlc3Nvci1mbGFncy5oCmluZGV4IGFjNjAyYTcuLmFlYWQ3NzkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vcHJvY2Vzc29yLWZsYWdzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9wcm9jZXNzb3ItZmxhZ3MuaApAQCAtMTgsODYgKzE4LDE1MiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9VQVBJX0FTTV9YODZfUFJPQ0VTU09SX0ZMQUdTX0gKICNkZWZpbmUgX1VBUElfQVNNX1g4Nl9QUk9DRVNTT1JfRkxBR1NfSAotI2RlZmluZSBYODZfRUZMQUdTX0NGIDB4MDAwMDAwMDEKLSNkZWZpbmUgWDg2X0VGTEFHU19CSVQxIDB4MDAwMDAwMDIKKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgorI2RlZmluZSBYODZfRUZMQUdTX0NGX0JJVCAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBYODZfRUZMQUdTX1BGIDB4MDAwMDAwMDQKLSNkZWZpbmUgWDg2X0VGTEFHU19BRiAweDAwMDAwMDEwCi0jZGVmaW5lIFg4Nl9FRkxBR1NfWkYgMHgwMDAwMDA0MAotI2RlZmluZSBYODZfRUZMQUdTX1NGIDB4MDAwMDAwODAKKyNkZWZpbmUgWDg2X0VGTEFHU19DRiBfQklUVUwoWDg2X0VGTEFHU19DRl9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfRklYRURfQklUIDEKKyNkZWZpbmUgWDg2X0VGTEFHU19GSVhFRCBfQklUVUwoWDg2X0VGTEFHU19GSVhFRF9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfUEZfQklUIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFg4Nl9FRkxBR1NfVEYgMHgwMDAwMDEwMAotI2RlZmluZSBYODZfRUZMQUdTX0lGIDB4MDAwMDAyMDAKLSNkZWZpbmUgWDg2X0VGTEFHU19ERiAweDAwMDAwNDAwCi0jZGVmaW5lIFg4Nl9FRkxBR1NfT0YgMHgwMDAwMDgwMAorI2RlZmluZSBYODZfRUZMQUdTX1BGIF9CSVRVTChYODZfRUZMQUdTX1BGX0JJVCkKKyNkZWZpbmUgWDg2X0VGTEFHU19BRl9CSVQgNAorI2RlZmluZSBYODZfRUZMQUdTX0FGIF9CSVRVTChYODZfRUZMQUdTX0FGX0JJVCkKKyNkZWZpbmUgWDg2X0VGTEFHU19aRl9CSVQgNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgWDg2X0VGTEFHU19JT1BMIDB4MDAwMDMwMDAKLSNkZWZpbmUgWDg2X0VGTEFHU19OVCAweDAwMDA0MDAwCi0jZGVmaW5lIFg4Nl9FRkxBR1NfUkYgMHgwMDAxMDAwMAotI2RlZmluZSBYODZfRUZMQUdTX1ZNIDB4MDAwMjAwMDAKKyNkZWZpbmUgWDg2X0VGTEFHU19aRiBfQklUVUwoWDg2X0VGTEFHU19aRl9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfU0ZfQklUIDcKKyNkZWZpbmUgWDg2X0VGTEFHU19TRiBfQklUVUwoWDg2X0VGTEFHU19TRl9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfVEZfQklUIDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFg4Nl9FRkxBR1NfQUMgMHgwMDA0MDAwMAotI2RlZmluZSBYODZfRUZMQUdTX1ZJRiAweDAwMDgwMDAwCi0jZGVmaW5lIFg4Nl9FRkxBR1NfVklQIDB4MDAxMDAwMDAKLSNkZWZpbmUgWDg2X0VGTEFHU19JRCAweDAwMjAwMDAwCisjZGVmaW5lIFg4Nl9FRkxBR1NfVEYgX0JJVFVMKFg4Nl9FRkxBR1NfVEZfQklUKQorI2RlZmluZSBYODZfRUZMQUdTX0lGX0JJVCA5CisjZGVmaW5lIFg4Nl9FRkxBR1NfSUYgX0JJVFVMKFg4Nl9FRkxBR1NfSUZfQklUKQorI2RlZmluZSBYODZfRUZMQUdTX0RGX0JJVCAxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgWDg2X0NSMF9QRSAweDAwMDAwMDAxCi0jZGVmaW5lIFg4Nl9DUjBfTVAgMHgwMDAwMDAwMgotI2RlZmluZSBYODZfQ1IwX0VNIDB4MDAwMDAwMDQKLSNkZWZpbmUgWDg2X0NSMF9UUyAweDAwMDAwMDA4CisjZGVmaW5lIFg4Nl9FRkxBR1NfREYgX0JJVFVMKFg4Nl9FRkxBR1NfREZfQklUKQorI2RlZmluZSBYODZfRUZMQUdTX09GX0JJVCAxMQorI2RlZmluZSBYODZfRUZMQUdTX09GIF9CSVRVTChYODZfRUZMQUdTX09GX0JJVCkKKyNkZWZpbmUgWDg2X0VGTEFHU19JT1BMX0JJVCAxMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgWDg2X0NSMF9FVCAweDAwMDAwMDEwCi0jZGVmaW5lIFg4Nl9DUjBfTkUgMHgwMDAwMDAyMAotI2RlZmluZSBYODZfQ1IwX1dQIDB4MDAwMTAwMDAKLSNkZWZpbmUgWDg2X0NSMF9BTSAweDAwMDQwMDAwCisjZGVmaW5lIFg4Nl9FRkxBR1NfSU9QTCAoX0FDKDMsVUwpIDw8IFg4Nl9FRkxBR1NfSU9QTF9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfTlRfQklUIDE0CisjZGVmaW5lIFg4Nl9FRkxBR1NfTlQgX0JJVFVMKFg4Nl9FRkxBR1NfTlRfQklUKQorI2RlZmluZSBYODZfRUZMQUdTX1JGX0JJVCAxNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgWDg2X0NSMF9OVyAweDIwMDAwMDAwCi0jZGVmaW5lIFg4Nl9DUjBfQ0QgMHg0MDAwMDAwMAotI2RlZmluZSBYODZfQ1IwX1BHIDB4ODAwMDAwMDAKLSNkZWZpbmUgWDg2X0NSM19QV1QgMHgwMDAwMDAwOAorI2RlZmluZSBYODZfRUZMQUdTX1JGIF9CSVRVTChYODZfRUZMQUdTX1JGX0JJVCkKKyNkZWZpbmUgWDg2X0VGTEFHU19WTV9CSVQgMTcKKyNkZWZpbmUgWDg2X0VGTEFHU19WTSBfQklUVUwoWDg2X0VGTEFHU19WTV9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfQUNfQklUIDE4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBYODZfQ1IzX1BDRCAweDAwMDAwMDEwCi0jZGVmaW5lIFg4Nl9DUjNfUENJRF9NQVNLIDB4MDAwMDBmZmYKLSNkZWZpbmUgWDg2X0NSNF9WTUUgMHgwMDAwMDAwMQotI2RlZmluZSBYODZfQ1I0X1BWSSAweDAwMDAwMDAyCisjZGVmaW5lIFg4Nl9FRkxBR1NfQUMgX0JJVFVMKFg4Nl9FRkxBR1NfQUNfQklUKQorI2RlZmluZSBYODZfRUZMQUdTX0FDX0JJVCAxOAorI2RlZmluZSBYODZfRUZMQUdTX0FDIF9CSVRVTChYODZfRUZMQUdTX0FDX0JJVCkKKyNkZWZpbmUgWDg2X0VGTEFHU19WSUZfQklUIDE5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBYODZfQ1I0X1RTRCAweDAwMDAwMDA0Ci0jZGVmaW5lIFg4Nl9DUjRfREUgMHgwMDAwMDAwOAotI2RlZmluZSBYODZfQ1I0X1BTRSAweDAwMDAwMDEwCi0jZGVmaW5lIFg4Nl9DUjRfUEFFIDB4MDAwMDAwMjAKKyNkZWZpbmUgWDg2X0VGTEFHU19WSUYgX0JJVFVMKFg4Nl9FRkxBR1NfVklGX0JJVCkKKyNkZWZpbmUgWDg2X0VGTEFHU19WSVBfQklUIDIwCisjZGVmaW5lIFg4Nl9FRkxBR1NfVklQIF9CSVRVTChYODZfRUZMQUdTX1ZJUF9CSVQpCisjZGVmaW5lIFg4Nl9FRkxBR1NfSURfQklUIDIxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBYODZfQ1I0X01DRSAweDAwMDAwMDQwCi0jZGVmaW5lIFg4Nl9DUjRfUEdFIDB4MDAwMDAwODAKLSNkZWZpbmUgWDg2X0NSNF9QQ0UgMHgwMDAwMDEwMAotI2RlZmluZSBYODZfQ1I0X09TRlhTUiAweDAwMDAwMjAwCisjZGVmaW5lIFg4Nl9FRkxBR1NfSUQgX0JJVFVMKFg4Nl9FRkxBR1NfSURfQklUKQorI2RlZmluZSBYODZfQ1IwX1BFX0JJVCAwCisjZGVmaW5lIFg4Nl9DUjBfUEUgX0JJVFVMKFg4Nl9DUjBfUEVfQklUKQorI2RlZmluZSBYODZfQ1IwX01QX0JJVCAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBYODZfQ1I0X09TWE1NRVhDUFQgMHgwMDAwMDQwMAotI2RlZmluZSBYODZfQ1I0X1ZNWEUgMHgwMDAwMjAwMAotI2RlZmluZSBYODZfQ1I0X1JEV1JHU0ZTIDB4MDAwMTAwMDAKLSNkZWZpbmUgWDg2X0NSNF9QQ0lERSAweDAwMDIwMDAwCisjZGVmaW5lIFg4Nl9DUjBfTVAgX0JJVFVMKFg4Nl9DUjBfTVBfQklUKQorI2RlZmluZSBYODZfQ1IwX0VNX0JJVCAyCisjZGVmaW5lIFg4Nl9DUjBfRU0gX0JJVFVMKFg4Nl9DUjBfRU1fQklUKQorI2RlZmluZSBYODZfQ1IwX1RTX0JJVCAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBYODZfQ1I0X09TWFNBVkUgMHgwMDA0MDAwMAotI2RlZmluZSBYODZfQ1I0X1NNRVAgMHgwMDEwMDAwMAotI2RlZmluZSBYODZfQ1I0X1NNQVAgMHgwMDIwMDAwMAotI2RlZmluZSBYODZfQ1I4X1RQUiAweDAwMDAwMDBGCisjZGVmaW5lIFg4Nl9DUjBfVFMgX0JJVFVMKFg4Nl9DUjBfVFNfQklUKQorI2RlZmluZSBYODZfQ1IwX0VUX0JJVCA0CisjZGVmaW5lIFg4Nl9DUjBfRVQgX0JJVFVMKFg4Nl9DUjBfRVRfQklUKQorI2RlZmluZSBYODZfQ1IwX05FX0JJVCA1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfQ1IwX05FIF9CSVRVTChYODZfQ1IwX05FX0JJVCkKKyNkZWZpbmUgWDg2X0NSMF9XUF9CSVQgMTYKKyNkZWZpbmUgWDg2X0NSMF9XUCBfQklUVUwoWDg2X0NSMF9XUF9CSVQpCisjZGVmaW5lIFg4Nl9DUjBfQU1fQklUIDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfQ1IwX0FNIF9CSVRVTChYODZfQ1IwX0FNX0JJVCkKKyNkZWZpbmUgWDg2X0NSMF9OV19CSVQgMjkKKyNkZWZpbmUgWDg2X0NSMF9OVyBfQklUVUwoWDg2X0NSMF9OV19CSVQpCisjZGVmaW5lIFg4Nl9DUjBfQ0RfQklUIDMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfQ1IwX0NEIF9CSVRVTChYODZfQ1IwX0NEX0JJVCkKKyNkZWZpbmUgWDg2X0NSMF9QR19CSVQgMzEKKyNkZWZpbmUgWDg2X0NSMF9QRyBfQklUVUwoWDg2X0NSMF9QR19CSVQpCisjZGVmaW5lIFg4Nl9DUjNfUFdUX0JJVCAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfQ1IzX1BXVCBfQklUVUwoWDg2X0NSM19QV1RfQklUKQorI2RlZmluZSBYODZfQ1IzX1BDRF9CSVQgNAorI2RlZmluZSBYODZfQ1IzX1BDRCBfQklUVUwoWDg2X0NSM19QQ0RfQklUKQorI2RlZmluZSBYODZfQ1IzX1BDSURfTUFTSyBfQUMoMHgwMDAwMGZmZixVTCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9DUjRfVk1FX0JJVCAwCisjZGVmaW5lIFg4Nl9DUjRfVk1FIF9CSVRVTChYODZfQ1I0X1ZNRV9CSVQpCisjZGVmaW5lIFg4Nl9DUjRfUFZJX0JJVCAxCisjZGVmaW5lIFg4Nl9DUjRfUFZJIF9CSVRVTChYODZfQ1I0X1BWSV9CSVQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfQ1I0X1RTRF9CSVQgMgorI2RlZmluZSBYODZfQ1I0X1RTRCBfQklUVUwoWDg2X0NSNF9UU0RfQklUKQorI2RlZmluZSBYODZfQ1I0X0RFX0JJVCAzCisjZGVmaW5lIFg4Nl9DUjRfREUgX0JJVFVMKFg4Nl9DUjRfREVfQklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSNF9QU0VfQklUIDQKKyNkZWZpbmUgWDg2X0NSNF9QU0UgX0JJVFVMKFg4Nl9DUjRfUFNFX0JJVCkKKyNkZWZpbmUgWDg2X0NSNF9QQUVfQklUIDUKKyNkZWZpbmUgWDg2X0NSNF9QQUUgX0JJVFVMKFg4Nl9DUjRfUEFFX0JJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9DUjRfTUNFX0JJVCA2CisjZGVmaW5lIFg4Nl9DUjRfTUNFIF9CSVRVTChYODZfQ1I0X01DRV9CSVQpCisjZGVmaW5lIFg4Nl9DUjRfUEdFX0JJVCA3CisjZGVmaW5lIFg4Nl9DUjRfUEdFIF9CSVRVTChYODZfQ1I0X1BHRV9CSVQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfQ1I0X1BDRV9CSVQgOAorI2RlZmluZSBYODZfQ1I0X1BDRSBfQklUVUwoWDg2X0NSNF9QQ0VfQklUKQorI2RlZmluZSBYODZfQ1I0X09TRlhTUl9CSVQgOQorI2RlZmluZSBYODZfQ1I0X09TRlhTUiBfQklUVUwoWDg2X0NSNF9PU0ZYU1JfQklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSNF9PU1hNTUVYQ1BUX0JJVCAxMAorI2RlZmluZSBYODZfQ1I0X09TWE1NRVhDUFQgX0JJVFVMKFg4Nl9DUjRfT1NYTU1FWENQVF9CSVQpCisjZGVmaW5lIFg4Nl9DUjRfVk1YRV9CSVQgMTMKKyNkZWZpbmUgWDg2X0NSNF9WTVhFIF9CSVRVTChYODZfQ1I0X1ZNWEVfQklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSNF9TTVhFX0JJVCAxNAorI2RlZmluZSBYODZfQ1I0X1NNWEUgX0JJVFVMKFg4Nl9DUjRfU01YRV9CSVQpCisjZGVmaW5lIFg4Nl9DUjRfRlNHU0JBU0VfQklUIDE2CisjZGVmaW5lIFg4Nl9DUjRfRlNHU0JBU0UgX0JJVFVMKFg4Nl9DUjRfRlNHU0JBU0VfQklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSNF9QQ0lERV9CSVQgMTcKKyNkZWZpbmUgWDg2X0NSNF9QQ0lERSBfQklUVUwoWDg2X0NSNF9QQ0lERV9CSVQpCisjZGVmaW5lIFg4Nl9DUjRfT1NYU0FWRV9CSVQgMTgKKyNkZWZpbmUgWDg2X0NSNF9PU1hTQVZFIF9CSVRVTChYODZfQ1I0X09TWFNBVkVfQklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSNF9TTUVQX0JJVCAyMAorI2RlZmluZSBYODZfQ1I0X1NNRVAgX0JJVFVMKFg4Nl9DUjRfU01FUF9CSVQpCisjZGVmaW5lIFg4Nl9DUjRfU01BUF9CSVQgMjEKKyNkZWZpbmUgWDg2X0NSNF9TTUFQIF9CSVRVTChYODZfQ1I0X1NNQVBfQklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSOF9UUFIgX0FDKDB4MDAwMDAwMGYsVUwpCiAjZGVmaW5lIENYODZfUENSMCAweDIwCiAjZGVmaW5lIENYODZfR0NSIDB4YjgKICNkZWZpbmUgQ1g4Nl9DQ1IwIDB4YzAKLSNkZWZpbmUgQ1g4Nl9DQ1IxIDB4YzEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENYODZfQ0NSMSAweGMxCiAjZGVmaW5lIENYODZfQ0NSMiAweGMyCiAjZGVmaW5lIENYODZfQ0NSMyAweGMzCiAjZGVmaW5lIENYODZfQ0NSNCAweGU4Ci0jZGVmaW5lIENYODZfQ0NSNSAweGU5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDWDg2X0NDUjUgMHhlOQogI2RlZmluZSBDWDg2X0NDUjYgMHhlYQogI2RlZmluZSBDWDg2X0NDUjcgMHhlYgogI2RlZmluZSBDWDg2X1BDUjEgMHhmMAotI2RlZmluZSBDWDg2X0RJUjAgMHhmZQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ1g4Nl9ESVIwIDB4ZmUKICNkZWZpbmUgQ1g4Nl9ESVIxIDB4ZmYKICNkZWZpbmUgQ1g4Nl9BUlJfQkFTRSAweGM0CiAjZGVmaW5lIENYODZfUkNSX0JBU0UgMHhkYwotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3NlbWJ1Zi5oIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9zZW1idWYuaAppbmRleCBkMWNiMjk2Li40MWQzYjJhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3NlbWJ1Zi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vc2VtYnVmLmgKQEAgLTIyLDEzICsyMiwxMyBAQAogIHN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2tlcm5lbF90aW1lX3Qgc2VtX290aW1lOwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOworIF9fa2VybmVsX3Vsb25nX3QgX191bnVzZWQxOwogIF9fa2VybmVsX3RpbWVfdCBzZW1fY3RpbWU7Ci0gdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CisgX19rZXJuZWxfdWxvbmdfdCBfX3VudXNlZDI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHVuc2lnbmVkIGxvbmcgc2VtX25zZW1zOwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQzOwotIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OworIF9fa2VybmVsX3Vsb25nX3Qgc2VtX25zZW1zOworIF9fa2VybmVsX3Vsb25nX3QgX191bnVzZWQzOworIF9fa2VybmVsX3Vsb25nX3QgX191bnVzZWQ0OwogfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vc2lnbmFsLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3NpZ25hbC5oCmluZGV4IGJiYTZiYzcuLjMwOGM3YTkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vc2lnbmFsLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS9zaWduYWwuaApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogc3RydWN0IHNpZ2luZm87Ci0jZGVmaW5lIE5TSUcgMzIKKyNkZWZpbmUgX0tFUk5FTF9OU0lHIDMyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OwogI2VuZGlmCkBAIC03MSw4ICs3MSw4IEBACiAjZGVmaW5lIFNJR1NZUyAzMQogI2RlZmluZSBTSUdVTlVTRUQgMzEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNJR1JUTUlOIDMyCi0jZGVmaW5lIFNJR1JUTUFYIF9OU0lHCisjZGVmaW5lIF9fU0lHUlRNSU4gMzIKKyNkZWZpbmUgX19TSUdSVE1BWCBfS0VSTkVMX19OU0lHCiAjZGVmaW5lIFNBX05PQ0xEU1RPUCAweDAwMDAwMDAxdQogI2RlZmluZSBTQV9OT0NMRFdBSVQgMHgwMDAwMDAwMnUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3N0YXQuaCBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vc3RhdC5oCmluZGV4IDA5OTgxMDYuLmFlYmFjYmQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vc3RhdC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vc3RhdC5oCkBAIC0xOCwxMTYgKzE4LDExNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X1NUQVRfSAogI2RlZmluZSBfQVNNX1g4Nl9TVEFUX0gKKyNpbmNsdWRlIDxhc20vcG9zaXhfdHlwZXMuaD4KICNkZWZpbmUgU1RBVF9IQVZFX05TRUMgMQotI2lmZGVmIF9faTM4Nl9fCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmZGVmIF9faTM4Nl9fCiBzdHJ1Y3Qgc3RhdCB7CiAgdW5zaWduZWQgbG9uZyBzdF9kZXY7CiAgdW5zaWduZWQgbG9uZyBzdF9pbm87Ci0gdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKICB1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKICB1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CiAgdW5zaWduZWQgc2hvcnQgc3RfZ2lkOwotIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgbG9uZyBzdF9yZGV2OwogIHVuc2lnbmVkIGxvbmcgc3Rfc2l6ZTsKICB1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7CiAgdW5zaWduZWQgbG9uZyBzdF9ibG9ja3M7Ci0gdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7CiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKICB1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7Ci0gdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDU7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIElOSVRfU1RSVUNUX1NUQVRfUEFERElORyhzdCkgZG8geyAgIHN0Ll9fdW51c2VkNCA9IDA7ICAgc3QuX191bnVzZWQ1ID0gMDsgIH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVQ2NF9IQVNfQlJPS0VOX1NUX0lOTyAxCiBzdHJ1Y3Qgc3RhdDY0IHsKLSB1bnNpZ25lZCBsb25nIGxvbmcgc3RfZGV2OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBsb25nIGxvbmcgc3RfZGV2OwogIHVuc2lnbmVkIGNoYXIgX19wYWQwWzRdOwogIHVuc2lnbmVkIGxvbmcgX19zdF9pbm87CiAgdW5zaWduZWQgaW50IHN0X21vZGU7Ci0gdW5zaWduZWQgaW50IHN0X25saW5rOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgc3Rfbmxpbms7CiAgdW5zaWduZWQgbG9uZyBzdF91aWQ7CiAgdW5zaWduZWQgbG9uZyBzdF9naWQ7CiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X3JkZXY7Ci0gdW5zaWduZWQgY2hhciBfX3BhZDNbNF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGNoYXIgX19wYWQzWzRdOwogIGxvbmcgbG9uZyBzdF9zaXplOwogIHVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfYmxvY2tzOwotIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOwogIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CiAgdW5zaWduZWQgaW50IHN0X210aW1lX25zZWM7Ci0gdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7CiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsKIH07Ci0jZGVmaW5lIElOSVRfU1RSVUNUX1NUQVQ2NF9QQURESU5HKHN0KSBkbyB7ICAgbWVtc2V0KCZzdC5fX3BhZDAsIDAsIHNpemVvZihzdC5fX3BhZDApKTsgICBtZW1zZXQoJnN0Ll9fcGFkMywgMCwgc2l6ZW9mKHN0Ll9fcGFkMykpOyAgfSB3aGlsZSAoMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElOSVRfU1RSVUNUX1NUQVQ2NF9QQURESU5HKHN0KSBkbyB7ICAgbWVtc2V0KCZzdC5fX3BhZDAsIDAsIHNpemVvZihzdC5fX3BhZDApKTsgICBtZW1zZXQoJnN0Ll9fcGFkMywgMCwgc2l6ZW9mKHN0Ll9fcGFkMykpOyAgfSB3aGlsZSAoMCkKICNlbHNlCiBzdHJ1Y3Qgc3RhdCB7Ci0gdW5zaWduZWQgbG9uZyBzdF9kZXY7Ci0gdW5zaWduZWQgbG9uZyBzdF9pbm87CisgX19rZXJuZWxfdWxvbmdfdCBzdF9kZXY7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHVuc2lnbmVkIGxvbmcgc3Rfbmxpbms7CisgX19rZXJuZWxfdWxvbmdfdCBzdF9pbm87CisgX19rZXJuZWxfdWxvbmdfdCBzdF9ubGluazsKICB1bnNpZ25lZCBpbnQgc3RfbW9kZTsKICB1bnNpZ25lZCBpbnQgc3RfdWlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgc3RfZ2lkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgX19wYWQwOwotIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKLSBsb25nIHN0X3NpemU7Ci0gbG9uZyBzdF9ibGtzaXplOworIF9fa2VybmVsX3Vsb25nX3Qgc3RfcmRldjsKKyBfX2tlcm5lbF9sb25nX3Qgc3Rfc2l6ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gbG9uZyBzdF9ibG9ja3M7Ci0gdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKLSB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7Ci0gdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKKyBfX2tlcm5lbF9sb25nX3Qgc3RfYmxrc2l6ZTsKKyBfX2tlcm5lbF9sb25nX3Qgc3RfYmxvY2tzOworIF9fa2VybmVsX3Vsb25nX3Qgc3RfYXRpbWU7CisgX19rZXJuZWxfdWxvbmdfdCBzdF9hdGltZV9uc2VjOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSB1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7Ci0gdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKLSB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7Ci0gbG9uZyBfX2xpbnV4X3VudXNlZFszXTsKKyBfX2tlcm5lbF91bG9uZ190IHN0X210aW1lOworIF9fa2VybmVsX3Vsb25nX3Qgc3RfbXRpbWVfbnNlYzsKKyBfX2tlcm5lbF91bG9uZ190IHN0X2N0aW1lOworIF9fa2VybmVsX3Vsb25nX3Qgc3RfY3RpbWVfbnNlYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19rZXJuZWxfbG9uZ190IF9fbGludXhfdW51c2VkWzNdOwogfTsKLSNkZWZpbmUgSU5JVF9TVFJVQ1RfU1RBVF9QQURESU5HKHN0KSBkbyB7ICAgc3QuX19wYWQwID0gMDsgICBzdC5fX3VudXNlZFswXSA9IDA7ICAgc3QuX191bnVzZWRbMV0gPSAwOyAgIHN0Ll9fdW51c2VkWzJdID0gMDsgIH0gd2hpbGUgKDApCisjZGVmaW5lIElOSVRfU1RSVUNUX1NUQVRfUEFERElORyhzdCkgZG8geyAgIHN0Ll9fcGFkMCA9IDA7ICAgc3QuX19saW51eF91bnVzZWRbMF0gPSAwOyAgIHN0Ll9fbGludXhfdW51c2VkWzFdID0gMDsgICBzdC5fX2xpbnV4X3VudXNlZFsyXSA9IDA7ICB9IHdoaWxlICgwKQogI2VuZGlmCi1zdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7CiAgdW5zaWduZWQgc2hvcnQgc3RfZGV2OwogIHVuc2lnbmVkIHNob3J0IHN0X2lubzsKICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwotIHVuc2lnbmVkIHNob3J0IHN0X25saW5rOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKICB1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CiAgdW5zaWduZWQgc2hvcnQgc3RfZ2lkOwogIHVuc2lnbmVkIHNob3J0IHN0X3JkZXY7Ci0jaWZkZWYgX19pMzg2X18KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaWZkZWYgX19pMzg2X18KICB1bnNpZ25lZCBsb25nIHN0X3NpemU7CiAgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwotIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CiAjZWxzZQogIHVuc2lnbmVkIGludCBzdF9zaXplOwogIHVuc2lnbmVkIGludCBzdF9hdGltZTsKLSB1bnNpZ25lZCBpbnQgc3RfbXRpbWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCBzdF9tdGltZTsKICB1bnNpZ25lZCBpbnQgc3RfY3RpbWU7CiAjZW5kaWYKIH07Ci0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkXzMyLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF8zMi5oCmluZGV4IDJkZDlmYzcuLjQ4MzhhZTEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkXzMyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfMzIuaApAQCAtNDUyLDQgKzQ1Miw3IEBACiAjZGVmaW5lIF9fTlJfa2NtcCAzNDkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmluaXRfbW9kdWxlIDM1MAorI2RlZmluZSBfX05SX3NjaGVkX3NldGF0dHIgMzUxCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAzNTIKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkXzY0LmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF82NC5oCmluZGV4IGM1NDUyODEuLjdiZGIzMDEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdW5pc3RkXzY0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfNjQuaApAQCAtNDExLDQgKzQxMSw2IEBACiAjZGVmaW5lIF9fTlJfa2NtcCAzMTIKICNkZWZpbmUgX19OUl9maW5pdF9tb2R1bGUgMzEzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NjaGVkX3NldGF0dHIgMzE0CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0ciAzMTUKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS91bmlzdGRfeDMyLmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF94MzIuaAppbmRleCBlNmQzNzc0Li5lZTUxZmI1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF94MzIuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3VuaXN0ZF94MzIuaApAQCAtMzU4LDQzICszNTgsNDYgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfa2NtcCAoX19YMzJfU1lTQ0FMTF9CSVQgKyAzMTIpCiAjZGVmaW5lIF9fTlJfZmluaXRfbW9kdWxlIChfX1gzMl9TWVNDQUxMX0JJVCArIDMxMykKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhdHRyIChfX1gzMl9TWVNDQUxMX0JJVCArIDMxNCkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhdHRyIChfX1gzMl9TWVNDQUxMX0JJVCArIDMxNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uIChfX1gzMl9TWVNDQUxMX0JJVCArIDUxMikKICNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4gKF9fWDMyX1NZU0NBTExfQklUICsgNTEzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb2N0bCAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MTQpCiAjZGVmaW5lIF9fTlJfcmVhZHYgKF9fWDMyX1NZU0NBTExfQklUICsgNTE1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl93cml0ZXYgKF9fWDMyX1NZU0NBTExfQklUICsgNTE2KQogI2RlZmluZSBfX05SX3JlY3Zmcm9tIChfX1gzMl9TWVNDQUxMX0JJVCArIDUxNykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VuZG1zZyAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MTgpCiAjZGVmaW5lIF9fTlJfcmVjdm1zZyAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MTkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2V4ZWN2ZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjApCiAjZGVmaW5lIF9fTlJfcHRyYWNlIChfX1gzMl9TWVNDQUxMX0JJVCArIDUyMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjIpCiAjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0IChfX1gzMl9TWVNDQUxMX0JJVCArIDUyMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvIChfX1gzMl9TWVNDQUxMX0JJVCArIDUyNCkKICNkZWZpbmUgX19OUl9zaWdhbHRzdGFjayAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjYpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5IChfX1gzMl9TWVNDQUxMX0JJVCArIDUyNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZCAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MjgpCiAjZGVmaW5lIF9fTlJfd2FpdGlkIChfX1gzMl9TWVNDQUxMX0JJVCArIDUyOSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0IChfX1gzMl9TWVNDQUxMX0JJVCArIDUzMCkKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QgKF9fWDMyX1NZU0NBTExfQklUICsgNTMxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl92bXNwbGljZSAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzIpCiAjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcyAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3ByZWFkdiAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzQpCiAjZGVmaW5lIF9fTlJfcHdyaXRldiAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvIChfX1gzMl9TWVNDQUxMX0JJVCArIDUzNikKICNkZWZpbmUgX19OUl9yZWN2bW1zZyAoX19YMzJfU1lTQ0FMTF9CSVQgKyA1MzcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NlbmRtbXNnIChfX1gzMl9TWVNDQUxMX0JJVCArIDUzOCkKICNkZWZpbmUgX19OUl9wcm9jZXNzX3ZtX3JlYWR2IChfX1gzMl9TWVNDQUxMX0JJVCArIDUzOSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHJvY2Vzc192bV93cml0ZXYgKF9fWDMyX1NZU0NBTExfQklUICsgNTQwKQogI2RlZmluZSBfX05SX3NldHNvY2tvcHQgKF9fWDMyX1NZU0NBTExfQklUICsgNTQxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0IChfX1gzMl9TWVNDQUxMX0JJVCArIDU0MikKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdm14LmggYi9saWJjL2tlcm5lbC91YXBpL2FzbS14ODYvYXNtL3ZteC5oCmluZGV4IDZjOTA5MzcuLmUxMGUyYjYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvYXNtLXg4Ni9hc20vdm14LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9hc20teDg2L2FzbS92bXguaApAQCAtNjYsMTEgKzY2LDEzIEBACiAjZGVmaW5lIEVYSVRfUkVBU09OX0VQVF9WSU9MQVRJT04gNDgKICNkZWZpbmUgRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRyA0OQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVhJVF9SRUFTT05fSU5WRVBUIDUwCiAjZGVmaW5lIEVYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVIgNTIKICNkZWZpbmUgRVhJVF9SRUFTT05fV0JJTlZEIDU0CiAjZGVmaW5lIEVYSVRfUkVBU09OX1hTRVRCViA1NQotI2RlZmluZSBFWElUX1JFQVNPTl9BUElDX1dSSVRFIDU2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFWElUX1JFQVNPTl9BUElDX1dSSVRFIDU2CiAjZGVmaW5lIEVYSVRfUkVBU09OX0lOVlBDSUQgNTgKLSNkZWZpbmUgVk1YX0VYSVRfUkVBU09OUyAgIHsgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSwgIkVYQ0VQVElPTl9OTUkiIH0sICAgeyBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQsICJFWFRFUk5BTF9JTlRFUlJVUFQiIH0sICAgeyBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQsICJUUklQTEVfRkFVTFQiIH0sICAgeyBFWElUX1JFQVNPTl9QRU5ESU5HX0lOVEVSUlVQVCwgIlBFTkRJTkdfSU5URVJSVVBUIiB9LCAgIHsgRVhJVF9SRUFTT05fTk1JX1dJTkRPVywgIk5NSV9XSU5ET1ciIH0sICAgeyBFWElUX1JFQVNPTl9UQVNLX1NXSVRDSCwgIlRBU0tfU1dJVENIIiB9LCAgIHsgRVhJVF9SRUFTT05fQ1BVSUQsICJDUFVJRCIgfSwgICB7IEVYSVRfUkVBU09OX0hMVCwgIkhMVCIgfSwgICB7IEVYSVRfUkVBU09OX0lOVkxQRywgIklOVkxQRyIgfSwgICB7IEVYSVRfUkVBU09OX1JEUE1DLCAiUkRQTUMiIH0sICAgeyBFWElUX1JFQVNPTl9SRFRTQywgIlJEVFNDIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1DQUxMLCAiVk1DQUxMIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1DTEVBUiwgIlZNQ0xFQVIiIH0sICAgeyBFWElUX1JFQVNPTl9WTUxBVU5DSCwgIlZNTEFVTkNIIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1QVFJMRCwgIlZNUFRSTEQiIH0sICAgeyBFWElUX1JFQVNPTl9WTVBUUlNULCAiVk1QVFJTVCIgfSwgICB7IEVYSVRfUkVBU09OX1ZNUkVBRCwgIlZNUkVBRCIgfSwgICB7IEVYSVRfUkVBU09OX1ZNUkVTVU1FLCAiVk1SRVNVTUUiIH0sICAgeyBFWElUX1JFQVNPTl9WTVdSSVRFLCAiVk1XUklURSIgfSwgICB7IEVYSVRfUkVBU09OX1ZNT0ZGLCAiVk1PRkYiIH0sICAgeyBFWElUX1JFQVNPTl9WTU9OLCAiVk1PTiIgfSwgICB7IEVYSVRfUkVBU09OX0NSX0FDQ0VTUywgIkNSX0FDQ0VTUyIgfSwgICB7IEVYSVRfUkVBU09OX0RSX0FDQ0VTUywgIkRSX0FDQ0VTUyIgfSwgICB7IEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OLCAiSU9fSU5TVFJVQ1RJT04iIH0sICAgeyBFWElUX1JFQVNPTl9NU1JfUkVBRCwgIk1TUl9SRUFEIiB9LCAgIHsgRVhJVF9SRUFTT05fTVNSX1dSSVRFLCAiTVNSX1dSSVRFIiB9LCAgIHsgRVhJVF9SRUFTT05fTVdBSVRfSU5TVFJVQ1RJT04sICJNV0FJVF9JTlNUUlVDVElPTiIgfSwgICB7IEVYSVRfUkVBU09OX01PTklUT1JfSU5TVFJVQ1RJT04sICJNT05JVE9SX0lOU1RSVUNUSU9OIiB9LCAgIHsgRVhJVF9SRUFTT05fUEFVU0VfSU5TVFJVQ1RJT04sICJQQVVTRV9JTlNUUlVDVElPTiIgfSwgICB7IEVYSVRfUkVBU09OX01DRV9EVVJJTkdfVk1FTlRSWSwgIk1DRV9EVVJJTkdfVk1FTlRSWSIgfSwgICB7IEVYSVRfUkVBU09OX1RQUl9CRUxPV19USFJFU0hPTEQsICJUUFJfQkVMT1dfVEhSRVNIT0xEIiB9LCAgIHsgRVhJVF9SRUFTT05fQVBJQ19BQ0NFU1MsICJBUElDX0FDQ0VTUyIgfSwgICB7IEVYSVRfUkVBU09OX0VQVF9WSU9MQVRJT04sICJFUFRfVklPTEFUSU9OIiB9LCAgIHsgRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRywgIkVQVF9NSVNDT05GSUciIH0sICAgeyBFWElUX1JFQVNPTl9XQklOVkQsICJXQklOVkQiIH0sICAgeyBFWElUX1JFQVNPTl9BUElDX1dSSVRFLCAiQVBJQ19XUklURSIgfSwgICB7IEVYSVRfUkVBU09OX0VPSV9JTkRVQ0VELCAiRU9JX0lORFVDRUQiIH0sICAgeyBFWElUX1JFQVNPTl9JTlZBTElEX1NUQVRFLCAiSU5WQUxJRF9TVEFURSIgfSwgICB7IEVYSVRfUkVBU09OX0lOVkQsICJJTlZEIiB9LCAgIHsgRVhJVF9SRUFTT05fSU5WUENJRCwgIklOVlBDSUQiIH0sICAgeyBFWElUX1JFQVNPTl9QUkVFTVBUSU9OX1RJTUVSLCAiUFJFRU1QVElPTl9USU1FUiIgfQorI2RlZmluZSBWTVhfRVhJVF9SRUFTT05TICAgeyBFWElUX1JFQVNPTl9FWENFUFRJT05fTk1JLCAiRVhDRVBUSU9OX05NSSIgfSwgICB7IEVYSVRfUkVBU09OX0VYVEVSTkFMX0lOVEVSUlVQVCwgIkVYVEVSTkFMX0lOVEVSUlVQVCIgfSwgICB7IEVYSVRfUkVBU09OX1RSSVBMRV9GQVVMVCwgIlRSSVBMRV9GQVVMVCIgfSwgICB7IEVYSVRfUkVBU09OX1BFTkRJTkdfSU5URVJSVVBULCAiUEVORElOR19JTlRFUlJVUFQiIH0sICAgeyBFWElUX1JFQVNPTl9OTUlfV0lORE9XLCAiTk1JX1dJTkRPVyIgfSwgICB7IEVYSVRfUkVBU09OX1RBU0tfU1dJVENILCAiVEFTS19TV0lUQ0giIH0sICAgeyBFWElUX1JFQVNPTl9DUFVJRCwgIkNQVUlEIiB9LCAgIHsgRVhJVF9SRUFTT05fSExULCAiSExUIiB9LCAgIHsgRVhJVF9SRUFTT05fSU5WTFBHLCAiSU5WTFBHIiB9LCAgIHsgRVhJVF9SRUFTT05fUkRQTUMsICJSRFBNQyIgfSwgICB7IEVYSVRfUkVBU09OX1JEVFNDLCAiUkRUU0MiIH0sICAgeyBFWElUX1JFQVNPTl9WTUNBTEwsICJWTUNBTEwiIH0sICAgeyBFWElUX1JFQVNPTl9WTUNMRUFSLCAiVk1DTEVBUiIgfSwgICB7IEVYSVRfUkVBU09OX1ZNTEFVTkNILCAiVk1MQVVOQ0giIH0sICAgeyBFWElUX1JFQVNPTl9WTVBUUkxELCAiVk1QVFJMRCIgfSwgICB7IEVYSVRfUkVBU09OX1ZNUFRSU1QsICJWTVBUUlNUIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1SRUFELCAiVk1SRUFEIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1SRVNVTUUsICJWTVJFU1VNRSIgfSwgICB7IEVYSVRfUkVBU09OX1ZNV1JJVEUsICJWTVdSSVRFIiB9LCAgIHsgRVhJVF9SRUFTT05fVk1PRkYsICJWTU9GRiIgfSwgICB7IEVYSVRfUkVBU09OX1ZNT04sICJWTU9OIiB9LCAgIHsgRVhJVF9SRUFTT05fQ1JfQUNDRVNTLCAiQ1JfQUNDRVNTIiB9LCAgIHsgRVhJVF9SRUFTT05fRFJfQUNDRVNTLCAiRFJfQUNDRVNTIiB9LCAgIHsgRVhJVF9SRUFTT05fSU9fSU5TVFJVQ1RJT04sICJJT19JTlNUUlVDVElPTiIgfSwgICB7IEVYSVRfUkVBU09OX01TUl9SRUFELCAiTVNSX1JFQUQiIH0sICAgeyBFWElUX1JFQVNPTl9NU1JfV1JJVEUsICJNU1JfV1JJVEUiIH0sICAgeyBFWElUX1JFQVNPTl9NV0FJVF9JTlNUUlVDVElPTiwgIk1XQUlUX0lOU1RSVUNUSU9OIiB9LCAgIHsgRVhJVF9SRUFTT05fTU9OSVRPUl9JTlNUUlVDVElPTiwgIk1PTklUT1JfSU5TVFJVQ1RJT04iIH0sICAgeyBFWElUX1JFQVNPTl9QQVVTRV9JTlNUUlVDVElPTiwgIlBBVVNFX0lOU1RSVUNUSU9OIiB9LCAgIHsgRVhJVF9SRUFTT05fTUNFX0RVUklOR19WTUVOVFJZLCAiTUNFX0RVUklOR19WTUVOVFJZIiB9LCAgIHsgRVhJVF9SRUFTT05fVFBSX0JFTE9XX1RIUkVTSE9MRCwgIlRQUl9CRUxPV19USFJFU0hPTEQiIH0sICAgeyBFWElUX1JFQVNPTl9BUElDX0FDQ0VTUywgIkFQSUNfQUNDRVNTIiB9LCAgIHsgRVhJVF9SRUFTT05fRVBUX1ZJT0xBVElPTiwgIkVQVF9WSU9MQVRJT04iIH0sICAgeyBFWElUX1JFQVNPTl9FUFRfTUlTQ09ORklHLCAiRVBUX01JU0NPTkZJRyIgfSwgICB7IEVYSVRfUkVBU09OX0lOVkVQVCwgIklOVkVQVCIgfSwgICB7IEVYSVRfUkVBU09OX1BSRUVNUFRJT05fVElNRVIsICJQUkVFTVBUSU9OX1RJTUVSIiB9LCAgIHsgRVhJVF9SRUFTT05fV0JJTlZELCAiV0JJTlZEIiB9LCAgIHsgRVhJVF9SRUFTT05fQVBJQ19XUklURSwgIkFQSUNfV1JJVEUiIH0sICAgeyBFWElUX1JFQVNPTl9FT0lfSU5EVUNFRCwgIkVPSV9JTkRVQ0VEIiB9LCAgIHsgRVhJVF9SRUFTT05fSU5WQUxJRF9TVEFURSwgIklOVkFMSURfU1RBVEUiIH0sICAgeyBFWElUX1JFQVNPTl9JTlZELCAiSU5WRCIgfSwgICB7IEVYSVRfUkVBU09OX0lOVlBDSUQsICJJTlZQQ0lEIiB9CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2RybS9hcm1hZGFfZHJtLmggYi9saWJjL2tlcm5lbC91YXBpL2RybS9hcm1hZGFfZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZkN2RkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvZHJtL2FybWFkYV9kcm0uaApAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIERSTV9BUk1BREFfSU9DVExfSAorI2RlZmluZSBEUk1fQVJNQURBX0lPQ1RMX0gKKyNkZWZpbmUgRFJNX0FSTUFEQV9HRU1fQ1JFQVRFIDB4MDAKKyNkZWZpbmUgRFJNX0FSTUFEQV9HRU1fTU1BUCAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fQVJNQURBX0dFTV9QV1JJVEUgMHgwMworI2RlZmluZSBBUk1BREFfSU9DVEwoZGlyLCBuYW1lLCBzdHIpICAgRFJNXyMjZGlyKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fQVJNQURBXyMjbmFtZSwgc3RydWN0IGRybV9hcm1hZGFfIyNzdHIpCitzdHJ1Y3QgZHJtX2FybWFkYV9nZW1fY3JlYXRlIHsKKyB1aW50MzJfdCBoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IHNpemU7Cit9OworI2RlZmluZSBEUk1fSU9DVExfQVJNQURBX0dFTV9DUkVBVEUgICBBUk1BREFfSU9DVEwoSU9XUiwgR0VNX0NSRUFURSwgZ2VtX2NyZWF0ZSkKK3N0cnVjdCBkcm1fYXJtYWRhX2dlbV9tbWFwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgaGFuZGxlOworIHVpbnQzMl90IHBhZDsKKyB1aW50NjRfdCBvZmZzZXQ7CisgdWludDY0X3Qgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDY0X3QgYWRkcjsKK307CisjZGVmaW5lIERSTV9JT0NUTF9BUk1BREFfR0VNX01NQVAgICBBUk1BREFfSU9DVEwoSU9XUiwgR0VNX01NQVAsIGdlbV9tbWFwKQorc3RydWN0IGRybV9hcm1hZGFfZ2VtX3B3cml0ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQ2NF90IHB0cjsKKyB1aW50MzJfdCBoYW5kbGU7CisgdWludDMyX3Qgb2Zmc2V0OworIHVpbnQzMl90IHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgRFJNX0lPQ1RMX0FSTUFEQV9HRU1fUFdSSVRFICAgQVJNQURBX0lPQ1RMKElPVywgR0VNX1BXUklURSwgZ2VtX3B3cml0ZSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vZHJtLmggYi9saWJjL2tlcm5lbC91YXBpL2RybS9kcm0uaAppbmRleCBhNjUyNjg1Li5lZDg0OGE4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2RybS9kcm0uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2RybS9kcm0uaApAQCAtMTI4LDMzNiArMTI4LDM1NiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX1NDQVRURVJfR0FUSEVSID0gNCwKICBfRFJNX0NPTlNJU1RFTlQgPSA1LAotIF9EUk1fR0VNID0gNiwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBkcm1fbWFwX2ZsYWdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9SRVNUUklDVEVEID0gMHgwMSwKICBfRFJNX1JFQURfT05MWSA9IDB4MDIsCiAgX0RSTV9MT0NLRUQgPSAweDA0LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX0tFUk5FTCA9IDB4MDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fV1JJVEVfQ09NQklOSU5HID0gMHgxMCwKICBfRFJNX0NPTlRBSU5TX0xPQ0sgPSAweDIwLAogIF9EUk1fUkVNT1ZBQkxFID0gMHg0MCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9EUklWRVIgPSAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fY3R4X3ByaXZfbWFwIHsKICB1bnNpZ25lZCBpbnQgY3R4X2lkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICpoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fbWFwIHsKICB1bnNpZ25lZCBsb25nIG9mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBlbnVtIGRybV9tYXBfdHlwZSB0eXBlOwogIGVudW0gZHJtX21hcF9mbGFncyBmbGFnczsKICB2b2lkICpoYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBtdHJyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2NsaWVudCB7CiAgaW50IGlkeDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGF1dGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgcGlkOwogIHVuc2lnbmVkIGxvbmcgdWlkOwogIHVuc2lnbmVkIGxvbmcgbWFnaWM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgaW9jczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBkcm1fc3RhdF90eXBlIHsKICBfRFJNX1NUQVRfTE9DSywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9TVEFUX09QRU5TLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX1NUQVRfQ0xPU0VTLAogIF9EUk1fU1RBVF9JT0NUTFMsCiAgX0RSTV9TVEFUX0xPQ0tTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX1NUQVRfVU5MT0NLUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9TVEFUX1ZBTFVFLAogIF9EUk1fU1RBVF9CWVRFLAogIF9EUk1fU1RBVF9DT1VOVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9TVEFUX0lSUSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9TVEFUX1BSSU1BUlksCiAgX0RSTV9TVEFUX1NFQ09OREFSWSwKICBfRFJNX1NUQVRfRE1BLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX1NUQVRfU1BFQ0lBTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9TVEFUX01JU1NFRAogfTsKIHN0cnVjdCBkcm1fc3RhdHMgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGNvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIHVuc2lnbmVkIGxvbmcgdmFsdWU7CiAgZW51bSBkcm1fc3RhdF90eXBlIHR5cGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gZGF0YVsxNV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gZHJtX2xvY2tfZmxhZ3MgewogIF9EUk1fTE9DS19SRUFEWSA9IDB4MDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fTE9DS19RVUlFU0NFTlQgPSAweDAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX0xPQ0tfRkxVU0ggPSAweDA0LAogIF9EUk1fTE9DS19GTFVTSF9BTEwgPSAweDA4LAogIF9EUk1fSEFMVF9BTExfUVVFVUVTID0gMHgxMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9IQUxUX0NVUl9RVUVVRVMgPSAweDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fbG9jayB7CiAgaW50IGNvbnRleHQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGVudW0gZHJtX2xvY2tfZmxhZ3MgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gZHJtX2RtYV9mbGFncyB7CiAgX0RSTV9ETUFfQkxPQ0sgPSAweDAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX0RNQV9XSElMRV9MT0NLRUQgPSAweDAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX0RNQV9QUklPUklUWSA9IDB4MDQsCiAgX0RSTV9ETUFfV0FJVCA9IDB4MTAsCiAgX0RSTV9ETUFfU01BTExFUl9PSyA9IDB4MjAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fRE1BX0xBUkdFUl9PSyA9IDB4NDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9idWZfZGVzYyB7CiAgaW50IGNvdW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGxvd19tYXJrOwogIGludCBoaWdoX21hcms7CiAgZW51bSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fUEFHRV9BTElHTiA9IDB4MDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fQUdQX0JVRkZFUiA9IDB4MDIsCiAgX0RSTV9TR19CVUZGRVIgPSAweDA0LAogIF9EUk1fRkJfQlVGRkVSID0gMHgwOCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9QQ0lfQlVGRkVSX1JPID0gMHgxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGZsYWdzOwogIHVuc2lnbmVkIGxvbmcgYWdwX3N0YXJ0OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2J1Zl9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGNvdW50OwogIHN0cnVjdCBkcm1fYnVmX2Rlc2MgX191c2VyICpsaXN0OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2J1Zl9mcmVlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGNvdW50OwogIGludCBfX3VzZXIgKmxpc3Q7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fYnVmX3B1YiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBpZHg7CiAgaW50IHRvdGFsOwogIGludCB1c2VkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkIF9fdXNlciAqYWRkcmVzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9idWZfbWFwIHsKICBpbnQgY291bnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgX191c2VyICp2aXJ0dWFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZHJtX2J1Zl9wdWIgX191c2VyICpsaXN0OwogfTsKIHN0cnVjdCBkcm1fZG1hIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGNvbnRleHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzZW5kX2NvdW50OwogIGludCBfX3VzZXIgKnNlbmRfaW5kaWNlczsKICBpbnQgX191c2VyICpzZW5kX3NpemVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBlbnVtIGRybV9kbWFfZmxhZ3MgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCByZXF1ZXN0X2NvdW50OwogIGludCByZXF1ZXN0X3NpemU7CiAgaW50IF9fdXNlciAqcmVxdWVzdF9pbmRpY2VzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgX191c2VyICpyZXF1ZXN0X3NpemVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZ3JhbnRlZF9jb3VudDsKIH07CiBlbnVtIGRybV9jdHhfZmxhZ3MgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX0NPTlRFWFRfUFJFU0VSVkVEID0gMHgwMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX0RSTV9DT05URVhUXzJET05MWSA9IDB4MDIKIH07CiBzdHJ1Y3QgZHJtX2N0eCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGRybV9jb250ZXh0X3QgaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBlbnVtIGRybV9jdHhfZmxhZ3MgZmxhZ3M7CiB9Owogc3RydWN0IGRybV9jdHhfcmVzIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGNvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZHJtX2N0eCBfX3VzZXIgKmNvbnRleHRzOwogfTsKIHN0cnVjdCBkcm1fZHJhdyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGRybV9kcmF3YWJsZV90IGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogdHlwZWRlZiBlbnVtIHsKICBEUk1fRFJBV0FCTEVfQ0xJUFJFQ1RTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZHJtX2RyYXdhYmxlX2luZm9fdHlwZV90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fdXBkYXRlX2RyYXcgewogIGRybV9kcmF3YWJsZV90IGhhbmRsZTsKICB1bnNpZ25lZCBpbnQgdHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG51bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBsb25nIGRhdGE7CiB9Owogc3RydWN0IGRybV9hdXRoIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZHJtX21hZ2ljX3QgbWFnaWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1faXJxX2J1c2lkIHsKICBpbnQgaXJxOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgYnVzbnVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZGV2bnVtOwogIGludCBmdW5jbnVtOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGRybV92Ymxhbmtfc2VxX3R5cGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX1ZCTEFOS19BQlNPTFVURSA9IDB4MCwKICBfRFJNX1ZCTEFOS19SRUxBVElWRSA9IDB4MSwKICBfRFJNX1ZCTEFOS19ISUdIX0NSVENfTUFTSyA9IDB4MDAwMDAwM2UsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fVkJMQU5LX0VWRU5UID0gMHg0MDAwMDAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfRFJNX1ZCTEFOS19GTElQID0gMHg4MDAwMDAwLAogIF9EUk1fVkJMQU5LX05FWFRPTk1JU1MgPSAweDEwMDAwMDAwLAogIF9EUk1fVkJMQU5LX1NFQ09OREFSWSA9IDB4MjAwMDAwMDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9EUk1fVkJMQU5LX1NJR05BTCA9IDB4NDAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBfRFJNX1ZCTEFOS19ISUdIX0NSVENfU0hJRlQgMQogI2RlZmluZSBfRFJNX1ZCTEFOS19UWVBFU19NQVNLIChfRFJNX1ZCTEFOS19BQlNPTFVURSB8IF9EUk1fVkJMQU5LX1JFTEFUSVZFKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX0RSTV9WQkxBTktfRkxBR1NfTUFTSyAoX0RSTV9WQkxBTktfRVZFTlQgfCBfRFJNX1ZCTEFOS19TSUdOQUwgfCAgIF9EUk1fVkJMQU5LX1NFQ09OREFSWSB8IF9EUk1fVkJMQU5LX05FWFRPTk1JU1MpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV93YWl0X3ZibGFua19yZXF1ZXN0IHsKICBlbnVtIGRybV92Ymxhbmtfc2VxX3R5cGUgdHlwZTsKICB1bnNpZ25lZCBpbnQgc2VxdWVuY2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc2lnbmFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3dhaXRfdmJsYW5rX3JlcGx5IHsKICBlbnVtIGRybV92Ymxhbmtfc2VxX3R5cGUgdHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHNlcXVlbmNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIHR2YWxfc2VjOwogIGxvbmcgdHZhbF91c2VjOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB1bmlvbiBkcm1fd2FpdF92YmxhbmsgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZHJtX3dhaXRfdmJsYW5rX3JlcXVlc3QgcmVxdWVzdDsKICBzdHJ1Y3QgZHJtX3dhaXRfdmJsYW5rX3JlcGx5IHJlcGx5OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9EUk1fUFJFX01PREVTRVQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX0RSTV9QT1NUX01PREVTRVQgMgogc3RydWN0IGRybV9tb2Rlc2V0X2N0bCB7CiAgX191MzIgY3J0YzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY21kOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2FncF9tb2RlIHsKICB1bnNpZ25lZCBsb25nIG1vZGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2FncF9idWZmZXIgewogIHVuc2lnbmVkIGxvbmcgc2l6ZTsKICB1bnNpZ25lZCBsb25nIGhhbmRsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHBoeXNpY2FsOwogfTsKIHN0cnVjdCBkcm1fYWdwX2JpbmRpbmcgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiB9Owogc3RydWN0IGRybV9hZ3BfaW5mbyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBhZ3BfdmVyc2lvbl9tYWpvcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGFncF92ZXJzaW9uX21pbm9yOwogIHVuc2lnbmVkIGxvbmcgbW9kZTsKICB1bnNpZ25lZCBsb25nIGFwZXJ0dXJlX2Jhc2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgYXBlcnR1cmVfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBtZW1vcnlfYWxsb3dlZDsKICB1bnNpZ25lZCBsb25nIG1lbW9yeV91c2VkOwogIHVuc2lnbmVkIHNob3J0IGlkX3ZlbmRvcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgaWRfZGV2aWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3NjYXR0ZXJfZ2F0aGVyIHsKICB1bnNpZ25lZCBsb25nIHNpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3NldF92ZXJzaW9uIHsKICBpbnQgZHJtX2RpX21ham9yOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZHJtX2RpX21pbm9yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZHJtX2RkX21ham9yOwogIGludCBkcm1fZGRfbWlub3I7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fZ2VtX2Nsb3NlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGFuZGxlOwogIF9fdTMyIHBhZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9nZW1fZmxpbmsgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoYW5kbGU7CiAgX191MzIgbmFtZTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9nZW1fb3BlbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG5hbWU7CiAgX191MzIgaGFuZGxlOwogIF9fdTY0IHNpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9DQVBfRFVNQl9CVUZGRVIgMHgxCisjZGVmaW5lIERSTV9DQVBfVkJMQU5LX0hJR0hfQ1JUQyAweDIKKyNkZWZpbmUgRFJNX0NBUF9EVU1CX1BSRUZFUlJFRF9ERVBUSCAweDMKKyNkZWZpbmUgRFJNX0NBUF9EVU1CX1BSRUZFUl9TSEFET1cgMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fQ0FQX1BSSU1FIDB4NQorI2RlZmluZSBEUk1fUFJJTUVfQ0FQX0lNUE9SVCAweDEKKyNkZWZpbmUgRFJNX1BSSU1FX0NBUF9FWFBPUlQgMHgyCisjZGVmaW5lIERSTV9DQVBfVElNRVNUQU1QX01PTk9UT05JQyAweDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9DQVBfQVNZTkNfUEFHRV9GTElQIDB4NworI2RlZmluZSBEUk1fQ0FQX0NVUlNPUl9XSURUSCAweDgKKyNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfSEVJR0hUIDB4OQogc3RydWN0IGRybV9nZXRfY2FwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgY2FwYWJpbGl0eTsKICBfX3U2NCB2YWx1ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworI2RlZmluZSBEUk1fQ0xJRU5UX0NBUF9TVEVSRU9fM0QgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBkcm1fc2V0X2NsaWVudF9jYXAgeworIF9fdTY0IGNhcGFiaWxpdHk7CisgX191NjQgdmFsdWU7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0NMT0VYRUMgT19DTE9FWEVDCiBzdHJ1Y3QgZHJtX3ByaW1lX2hhbmRsZSB7CiAgX191MzIgaGFuZGxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgZmQ7CiB9OwogI2luY2x1ZGUgPGRybS9kcm1fbW9kZS5oPgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0lPQ1RMX0JBU0UgJ2QnCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSU8obnIpIF9JTyhEUk1fSU9DVExfQkFTRSxucikKICNkZWZpbmUgRFJNX0lPUihucix0eXBlKSBfSU9SKERSTV9JT0NUTF9CQVNFLG5yLHR5cGUpCiAjZGVmaW5lIERSTV9JT1cobnIsdHlwZSkgX0lPVyhEUk1fSU9DVExfQkFTRSxucix0eXBlKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0lPV1IobnIsdHlwZSkgX0lPV1IoRFJNX0lPQ1RMX0JBU0UsbnIsdHlwZSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JT0NUTF9WRVJTSU9OIERSTV9JT1dSKDB4MDAsIHN0cnVjdCBkcm1fdmVyc2lvbikKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9VTklRVUUgRFJNX0lPV1IoMHgwMSwgc3RydWN0IGRybV91bmlxdWUpCiAjZGVmaW5lIERSTV9JT0NUTF9HRVRfTUFHSUMgRFJNX0lPUiggMHgwMiwgc3RydWN0IGRybV9hdXRoKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0lPQ1RMX0lSUV9CVVNJRCBEUk1fSU9XUigweDAzLCBzdHJ1Y3QgZHJtX2lycV9idXNpZCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JT0NUTF9HRVRfTUFQIERSTV9JT1dSKDB4MDQsIHN0cnVjdCBkcm1fbWFwKQogI2RlZmluZSBEUk1fSU9DVExfR0VUX0NMSUVOVCBEUk1fSU9XUigweDA1LCBzdHJ1Y3QgZHJtX2NsaWVudCkKICNkZWZpbmUgRFJNX0lPQ1RMX0dFVF9TVEFUUyBEUk1fSU9SKCAweDA2LCBzdHJ1Y3QgZHJtX3N0YXRzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0lPQ1RMX1NFVF9WRVJTSU9OIERSTV9JT1dSKDB4MDcsIHN0cnVjdCBkcm1fc2V0X3ZlcnNpb24pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSU9DVExfTU9ERVNFVF9DVEwgRFJNX0lPVygweDA4LCBzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsKQogI2RlZmluZSBEUk1fSU9DVExfR0VNX0NMT1NFIERSTV9JT1cgKDB4MDksIHN0cnVjdCBkcm1fZ2VtX2Nsb3NlKQogI2RlZmluZSBEUk1fSU9DVExfR0VNX0ZMSU5LIERSTV9JT1dSKDB4MGEsIHN0cnVjdCBkcm1fZ2VtX2ZsaW5rKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0lPQ1RMX0dFTV9PUEVOIERSTV9JT1dSKDB4MGIsIHN0cnVjdCBkcm1fZ2VtX29wZW4pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSU9DVExfR0VUX0NBUCBEUk1fSU9XUigweDBjLCBzdHJ1Y3QgZHJtX2dldF9jYXApCisjZGVmaW5lIERSTV9JT0NUTF9TRVRfQ0xJRU5UX0NBUCBEUk1fSU9XKCAweDBkLCBzdHJ1Y3QgZHJtX3NldF9jbGllbnRfY2FwKQogI2RlZmluZSBEUk1fSU9DVExfU0VUX1VOSVFVRSBEUk1fSU9XKCAweDEwLCBzdHJ1Y3QgZHJtX3VuaXF1ZSkKICNkZWZpbmUgRFJNX0lPQ1RMX0FVVEhfTUFHSUMgRFJNX0lPVyggMHgxMSwgc3RydWN0IGRybV9hdXRoKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTU0Niw4NCArNTY2LDc1IEBACiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX09CSl9HRVRQUk9QRVJUSUVTIERSTV9JT1dSKDB4QjksIHN0cnVjdCBkcm1fbW9kZV9vYmpfZ2V0X3Byb3BlcnRpZXMpCiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX09CSl9TRVRQUk9QRVJUWSBEUk1fSU9XUigweEJBLCBzdHJ1Y3QgZHJtX21vZGVfb2JqX3NldF9wcm9wZXJ0eSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9NT0RFX0NVUlNPUjIgRFJNX0lPV1IoMHhCQiwgc3RydWN0IGRybV9tb2RlX2N1cnNvcjIpCiAjZGVmaW5lIERSTV9DT01NQU5EX0JBU0UgMHg0MAogI2RlZmluZSBEUk1fQ09NTUFORF9FTkQgMHhBMAogc3RydWN0IGRybV9ldmVudCB7Ci0gX191MzIgdHlwZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdHlwZTsKICBfX3UzMiBsZW5ndGg7CiB9OwogI2RlZmluZSBEUk1fRVZFTlRfVkJMQU5LIDB4MDEKLSNkZWZpbmUgRFJNX0VWRU5UX0ZMSVBfQ09NUExFVEUgMHgwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0VWRU5UX0ZMSVBfQ09NUExFVEUgMHgwMgogc3RydWN0IGRybV9ldmVudF92YmxhbmsgewogIHN0cnVjdCBkcm1fZXZlbnQgYmFzZTsKICBfX3U2NCB1c2VyX2RhdGE7Ci0gX191MzIgdHZfc2VjOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0dl9zZWM7CiAgX191MzIgdHZfdXNlYzsKICBfX3UzMiBzZXF1ZW5jZTsKICBfX3UzMiByZXNlcnZlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRFJNX0NBUF9EVU1CX0JVRkZFUiAweDEKLSNkZWZpbmUgRFJNX0NBUF9WQkxBTktfSElHSF9DUlRDIDB4MgotI2RlZmluZSBEUk1fQ0FQX0RVTUJfUFJFRkVSUkVEX0RFUFRIIDB4MwotI2RlZmluZSBEUk1fQ0FQX0RVTUJfUFJFRkVSX1NIQURPVyAweDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIERSTV9DQVBfUFJJTUUgMHg1Ci0jZGVmaW5lIERSTV9DQVBfVElNRVNUQU1QX01PTk9UT05JQyAweDYKLSNkZWZpbmUgRFJNX1BSSU1FX0NBUF9JTVBPUlQgMHgxCi0jZGVmaW5lIERSTV9QUklNRV9DQVBfRVhQT1JUIDB4MgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGRybV9jbGlwX3JlY3QgZHJtX2NsaXBfcmVjdF90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2RyYXdhYmxlX2luZm8gZHJtX2RyYXdhYmxlX2luZm9fdDsKIHR5cGVkZWYgc3RydWN0IGRybV90ZXhfcmVnaW9uIGRybV90ZXhfcmVnaW9uX3Q7Ci10eXBlZGVmIHN0cnVjdCBkcm1faHdfbG9jayBkcm1faHdfbG9ja190OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9od19sb2NrIGRybV9od19sb2NrX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fdmVyc2lvbiBkcm1fdmVyc2lvbl90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX3VuaXF1ZSBkcm1fdW5pcXVlX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fbGlzdCBkcm1fbGlzdF90OwotdHlwZWRlZiBzdHJ1Y3QgZHJtX2Jsb2NrIGRybV9ibG9ja190OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9ibG9jayBkcm1fYmxvY2tfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9jb250cm9sIGRybV9jb250cm9sX3Q7CiB0eXBlZGVmIGVudW0gZHJtX21hcF90eXBlIGRybV9tYXBfdHlwZV90OwogdHlwZWRlZiBlbnVtIGRybV9tYXBfZmxhZ3MgZHJtX21hcF9mbGFnc190OwotdHlwZWRlZiBzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCBkcm1fY3R4X3ByaXZfbWFwX3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCBkcm1fY3R4X3ByaXZfbWFwX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fbWFwIGRybV9tYXBfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9jbGllbnQgZHJtX2NsaWVudF90OwogdHlwZWRlZiBlbnVtIGRybV9zdGF0X3R5cGUgZHJtX3N0YXRfdHlwZV90OwotdHlwZWRlZiBzdHJ1Y3QgZHJtX3N0YXRzIGRybV9zdGF0c190OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IGRybV9zdGF0cyBkcm1fc3RhdHNfdDsKIHR5cGVkZWYgZW51bSBkcm1fbG9ja19mbGFncyBkcm1fbG9ja19mbGFnc190OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2xvY2sgZHJtX2xvY2tfdDsKIHR5cGVkZWYgZW51bSBkcm1fZG1hX2ZsYWdzIGRybV9kbWFfZmxhZ3NfdDsKLXR5cGVkZWYgc3RydWN0IGRybV9idWZfZGVzYyBkcm1fYnVmX2Rlc2NfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2Rlc2MgZHJtX2J1Zl9kZXNjX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2luZm8gZHJtX2J1Zl9pbmZvX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX2ZyZWUgZHJtX2J1Zl9mcmVlX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX3B1YiBkcm1fYnVmX3B1Yl90OwotdHlwZWRlZiBzdHJ1Y3QgZHJtX2J1Zl9tYXAgZHJtX2J1Zl9tYXBfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBkcm1fYnVmX21hcCBkcm1fYnVmX21hcF90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2RtYSBkcm1fZG1hX3Q7CiB0eXBlZGVmIHVuaW9uIGRybV93YWl0X3ZibGFuayBkcm1fd2FpdF92YmxhbmtfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9hZ3BfbW9kZSBkcm1fYWdwX21vZGVfdDsKLXR5cGVkZWYgZW51bSBkcm1fY3R4X2ZsYWdzIGRybV9jdHhfZmxhZ3NfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIGVudW0gZHJtX2N0eF9mbGFncyBkcm1fY3R4X2ZsYWdzX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fY3R4IGRybV9jdHhfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9jdHhfcmVzIGRybV9jdHhfcmVzX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1fZHJhdyBkcm1fZHJhd190OwotdHlwZWRlZiBzdHJ1Y3QgZHJtX3VwZGF0ZV9kcmF3IGRybV91cGRhdGVfZHJhd190OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IGRybV91cGRhdGVfZHJhdyBkcm1fdXBkYXRlX2RyYXdfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9hdXRoIGRybV9hdXRoX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1faXJxX2J1c2lkIGRybV9pcnFfYnVzaWRfdDsKIHR5cGVkZWYgZW51bSBkcm1fdmJsYW5rX3NlcV90eXBlIGRybV92Ymxhbmtfc2VxX3R5cGVfdDsKLXR5cGVkZWYgc3RydWN0IGRybV9hZ3BfYnVmZmVyIGRybV9hZ3BfYnVmZmVyX3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBzdHJ1Y3QgZHJtX2FncF9idWZmZXIgZHJtX2FncF9idWZmZXJfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9hZ3BfYmluZGluZyBkcm1fYWdwX2JpbmRpbmdfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9hZ3BfaW5mbyBkcm1fYWdwX2luZm9fdDsKIHR5cGVkZWYgc3RydWN0IGRybV9zY2F0dGVyX2dhdGhlciBkcm1fc2NhdHRlcl9nYXRoZXJfdDsKLXR5cGVkZWYgc3RydWN0IGRybV9zZXRfdmVyc2lvbiBkcm1fc2V0X3ZlcnNpb25fdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBkcm1fc2V0X3ZlcnNpb24gZHJtX3NldF92ZXJzaW9uX3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvZHJtL2RybV9tb2RlLmggYi9saWJjL2tlcm5lbC91YXBpL2RybS9kcm1fbW9kZS5oCmluZGV4IDZiMDA2YTYuLmJiZTFjOGUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvZHJtL2RybV9tb2RlLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vZHJtX21vZGUuaApAQCAtNTEsMTM5ICs1MSwxNTQgQEAKICNkZWZpbmUgRFJNX01PREVfRkxBR19EQkxDTEsgKDE8PDEyKQogI2RlZmluZSBEUk1fTU9ERV9GTEFHX0NMS0RJVjIgKDE8PDEzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01PREVfRkxBR18zRF9NQVNLICgweDFmPDwxNCkKKyNkZWZpbmUgRFJNX01PREVfRkxBR18zRF9OT05FICgwPDwxNCkKKyNkZWZpbmUgRFJNX01PREVfRkxBR18zRF9GUkFNRV9QQUNLSU5HICgxPDwxNCkKKyNkZWZpbmUgRFJNX01PREVfRkxBR18zRF9GSUVMRF9BTFRFUk5BVElWRSAoMjw8MTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fTU9ERV9GTEFHXzNEX0xJTkVfQUxURVJOQVRJVkUgKDM8PDE0KQorI2RlZmluZSBEUk1fTU9ERV9GTEFHXzNEX1NJREVfQllfU0lERV9GVUxMICg0PDwxNCkKKyNkZWZpbmUgRFJNX01PREVfRkxBR18zRF9MX0RFUFRIICg1PDwxNCkKKyNkZWZpbmUgRFJNX01PREVfRkxBR18zRF9MX0RFUFRIX0dGWF9HRlhfREVQVEggKDY8PDE0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01PREVfRkxBR18zRF9UT1BfQU5EX0JPVFRPTSAoNzw8MTQpCisjZGVmaW5lIERSTV9NT0RFX0ZMQUdfM0RfU0lERV9CWV9TSURFX0hBTEYgKDg8PDE0KQogI2RlZmluZSBEUk1fTU9ERV9EUE1TX09OIDAKICNkZWZpbmUgRFJNX01PREVfRFBNU19TVEFOREJZIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0RQTVNfU1VTUEVORCAyCiAjZGVmaW5lIERSTV9NT0RFX0RQTVNfT0ZGIDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX1NDQUxFX05PTkUgMAogI2RlZmluZSBEUk1fTU9ERV9TQ0FMRV9GVUxMU0NSRUVOIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX1NDQUxFX0NFTlRFUiAyCiAjZGVmaW5lIERSTV9NT0RFX1NDQUxFX0FTUEVDVCAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9ESVRIRVJJTkdfT0ZGIDAKICNkZWZpbmUgRFJNX01PREVfRElUSEVSSU5HX09OIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0RJVEhFUklOR19BVVRPIDIKICNkZWZpbmUgRFJNX01PREVfRElSVFlfT0ZGIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0RJUlRZX09OIDEKICNkZWZpbmUgRFJNX01PREVfRElSVFlfQU5OT1RBVEUgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyB7CiAgX191MzIgY2xvY2s7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGhkaXNwbGF5LCBoc3luY19zdGFydCwgaHN5bmNfZW5kLCBodG90YWwsIGhza2V3OwogIF9fdTE2IHZkaXNwbGF5LCB2c3luY19zdGFydCwgdnN5bmNfZW5kLCB2dG90YWwsIHZzY2FuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2cmVmcmVzaDsKICBfX3UzMiBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHlwZTsKICBjaGFyIG5hbWVbRFJNX0RJU1BMQVlfTU9ERV9MRU5dOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX21vZGVfY2FyZF9yZXMgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBmYl9pZF9wdHI7CiAgX191NjQgY3J0Y19pZF9wdHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGNvbm5lY3Rvcl9pZF9wdHI7CiAgX191NjQgZW5jb2Rlcl9pZF9wdHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNvdW50X2ZiczsKICBfX3UzMiBjb3VudF9jcnRjczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY291bnRfY29ubmVjdG9yczsKICBfX3UzMiBjb3VudF9lbmNvZGVyczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWluX3dpZHRoLCBtYXhfd2lkdGg7CiAgX191MzIgbWluX2hlaWdodCwgbWF4X2hlaWdodDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9tb2RlX2NydGMgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBzZXRfY29ubmVjdG9yc19wdHI7CiAgX191MzIgY291bnRfY29ubmVjdG9yczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY3J0Y19pZDsKICBfX3UzMiBmYl9pZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgeCwgeTsKICBfX3UzMiBnYW1tYV9zaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtb2RlX3ZhbGlkOwogIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyBtb2RlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIERSTV9NT0RFX1BSRVNFTlRfVE9QX0ZJRUxEICgxPDwwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfUFJFU0VOVF9CT1RUT01fRklFTEQgKDE8PDEpCiBzdHJ1Y3QgZHJtX21vZGVfc2V0X3BsYW5lIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGxhbmVfaWQ7CiAgX191MzIgY3J0Y19pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmJfaWQ7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIGNydGNfeCwgY3J0Y195OwogIF9fdTMyIGNydGNfdywgY3J0Y19oOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzcmNfeCwgc3JjX3k7CiAgX191MzIgc3JjX2gsIHNyY193OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X3BsYW5lIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGxhbmVfaWQ7CiAgX191MzIgY3J0Y19pZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmJfaWQ7CiAgX191MzIgcG9zc2libGVfY3J0Y3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGdhbW1hX3NpemU7CiAgX191MzIgY291bnRfZm9ybWF0X3R5cGVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBmb3JtYXRfdHlwZV9wdHI7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fbW9kZV9nZXRfcGxhbmVfcmVzIHsKICBfX3U2NCBwbGFuZV9pZF9wdHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNvdW50X3BsYW5lczsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX05PTkUgMAogI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX0RBQyAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX1RNRFMgMgogI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX0xWRFMgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfRU5DT0RFUl9UVkRBQyA0CiAjZGVmaW5lIERSTV9NT0RFX0VOQ09ERVJfVklSVFVBTCA1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX0RTSSA2CiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2VuY29kZXIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBlbmNvZGVyX2lkOwogIF9fdTMyIGVuY29kZXJfdHlwZTsKICBfX3UzMiBjcnRjX2lkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwb3NzaWJsZV9jcnRjczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcG9zc2libGVfY2xvbmVzOwogfTsKICNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX0F1dG9tYXRpYyAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfVW5rbm93biAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfRFZJRCAzCiAjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9EVklBIDQKICNkZWZpbmUgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvc2l0ZSA1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfU1ZJREVPIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb25lbnQgOAogI2RlZmluZSBEUk1fTU9ERV9TVUJDT05ORUNUT1JfU0NBUlQgOQogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93biAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJIDIKICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQgMwogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQSA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRlIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8gNgogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUyA3CiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb25lbnQgOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU4gOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0IDEwCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSAxMQogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIgMTIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9NT0RFX0NPTk5FQ1RPUl9UViAxMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX2VEUCAxNAogI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfVklSVFVBTCAxNQorI2RlZmluZSBEUk1fTU9ERV9DT05ORUNUT1JfRFNJIDE2CiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Nvbm5lY3RvciB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGVuY29kZXJzX3B0cjsKQEAgLTIwMywxMTYgKzIxOCwxMzEgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbW1fd2lkdGgsIG1tX2hlaWdodDsKICBfX3UzMiBzdWJwaXhlbDsKKyBfX3UzMiBwYWQ7CiB9OwotI2RlZmluZSBEUk1fTU9ERV9QUk9QX1BFTkRJTkcgKDE8PDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fTU9ERV9QUk9QX1BFTkRJTkcgKDE8PDApCiAjZGVmaW5lIERSTV9NT0RFX1BST1BfUkFOR0UgKDE8PDEpCiAjZGVmaW5lIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFICgxPDwyKQogI2RlZmluZSBEUk1fTU9ERV9QUk9QX0VOVU0gKDE8PDMpCi0jZGVmaW5lIERSTV9NT0RFX1BST1BfQkxPQiAoMTw8NCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9NT0RFX1BST1BfQkxPQiAoMTw8NCkKICNkZWZpbmUgRFJNX01PREVfUFJPUF9CSVRNQVNLICgxPDw1KQogc3RydWN0IGRybV9tb2RlX3Byb3BlcnR5X2VudW0gewogIF9fdTY0IHZhbHVlOwotIGNoYXIgbmFtZVtEUk1fUFJPUF9OQU1FX0xFTl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNoYXIgbmFtZVtEUk1fUFJPUF9OQU1FX0xFTl07CiB9Owogc3RydWN0IGRybV9tb2RlX2dldF9wcm9wZXJ0eSB7CiAgX191NjQgdmFsdWVzX3B0cjsKLSBfX3U2NCBlbnVtX2Jsb2JfcHRyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBlbnVtX2Jsb2JfcHRyOwogIF9fdTMyIHByb3BfaWQ7CiAgX191MzIgZmxhZ3M7CiAgY2hhciBuYW1lW0RSTV9QUk9QX05BTUVfTEVOXTsKLSBfX3UzMiBjb3VudF92YWx1ZXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNvdW50X3ZhbHVlczsKICBfX3UzMiBjb3VudF9lbnVtX2Jsb2JzOwogfTsKIHN0cnVjdCBkcm1fbW9kZV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5IHsKLSBfX3U2NCB2YWx1ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdmFsdWU7CiAgX191MzIgcHJvcF9pZDsKICBfX3UzMiBjb25uZWN0b3JfaWQ7CiB9Owotc3RydWN0IGRybV9tb2RlX29ial9nZXRfcHJvcGVydGllcyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGRybV9tb2RlX29ial9nZXRfcHJvcGVydGllcyB7CiAgX191NjQgcHJvcHNfcHRyOwogIF9fdTY0IHByb3BfdmFsdWVzX3B0cjsKICBfX3UzMiBjb3VudF9wcm9wczsKLSBfX3UzMiBvYmpfaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG9ial9pZDsKICBfX3UzMiBvYmpfdHlwZTsKIH07CiBzdHJ1Y3QgZHJtX21vZGVfb2JqX3NldF9wcm9wZXJ0eSB7Ci0gX191NjQgdmFsdWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHZhbHVlOwogIF9fdTMyIHByb3BfaWQ7CiAgX191MzIgb2JqX2lkOwogIF9fdTMyIG9ial90eXBlOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGRybV9tb2RlX2dldF9ibG9iIHsKICBfX3UzMiBibG9iX2lkOwogIF9fdTMyIGxlbmd0aDsKLSBfX3U2NCBkYXRhOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBkYXRhOwogfTsKIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQgewogIF9fdTMyIGZiX2lkOwotIF9fdTMyIHdpZHRoLCBoZWlnaHQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHdpZHRoLCBoZWlnaHQ7CiAgX191MzIgcGl0Y2g7CiAgX191MzIgYnBwOwogIF9fdTMyIGRlcHRoOwotIF9fdTMyIGhhbmRsZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaGFuZGxlOwogfTsKICNkZWZpbmUgRFJNX01PREVfRkJfSU5URVJMQUNFRCAoMTw8MCkKIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyIHsKLSBfX3UzMiBmYl9pZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZmJfaWQ7CiAgX191MzIgd2lkdGgsIGhlaWdodDsKICBfX3UzMiBwaXhlbF9mb3JtYXQ7CiAgX191MzIgZmxhZ3M7Ci0gX191MzIgaGFuZGxlc1s0XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaGFuZGxlc1s0XTsKICBfX3UzMiBwaXRjaGVzWzRdOwogIF9fdTMyIG9mZnNldHNbNF07CiB9OwotI2RlZmluZSBEUk1fTU9ERV9GQl9ESVJUWV9BTk5PVEFURV9DT1BZIDB4MDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9NT0RFX0ZCX0RJUlRZX0FOTk9UQVRFX0NPUFkgMHgwMQogI2RlZmluZSBEUk1fTU9ERV9GQl9ESVJUWV9BTk5PVEFURV9GSUxMIDB4MDIKICNkZWZpbmUgRFJNX01PREVfRkJfRElSVFlfRkxBR1MgMHgwMwogI2RlZmluZSBEUk1fTU9ERV9GQl9ESVJUWV9NQVhfQ0xJUFMgMjU2Ci1zdHJ1Y3QgZHJtX21vZGVfZmJfZGlydHlfY21kIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZHJtX21vZGVfZmJfZGlydHlfY21kIHsKICBfX3UzMiBmYl9pZDsKICBfX3UzMiBmbGFnczsKICBfX3UzMiBjb2xvcjsKLSBfX3UzMiBudW1fY2xpcHM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG51bV9jbGlwczsKICBfX3U2NCBjbGlwc19wdHI7CiB9Owogc3RydWN0IGRybV9tb2RlX21vZGVfY21kIHsKLSBfX3UzMiBjb25uZWN0b3JfaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNvbm5lY3Rvcl9pZDsKICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gbW9kZTsKIH07CiAjZGVmaW5lIERSTV9NT0RFX0NVUlNPUl9CTyAweDAxCi0jZGVmaW5lIERSTV9NT0RFX0NVUlNPUl9NT1ZFIDB4MDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9NT0RFX0NVUlNPUl9NT1ZFIDB4MDIKICNkZWZpbmUgRFJNX01PREVfQ1VSU09SX0ZMQUdTIDB4MDMKIHN0cnVjdCBkcm1fbW9kZV9jdXJzb3IgewogIF9fdTMyIGZsYWdzOwotIF9fdTMyIGNydGNfaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNydGNfaWQ7CiAgX19zMzIgeDsKICBfX3MzMiB5OwogIF9fdTMyIHdpZHRoOwotIF9fdTMyIGhlaWdodDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaGVpZ2h0OwogIF9fdTMyIGhhbmRsZTsKIH07CitzdHJ1Y3QgZHJtX21vZGVfY3Vyc29yMiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGZsYWdzOworIF9fdTMyIGNydGNfaWQ7CisgX19zMzIgeDsKKyBfX3MzMiB5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB3aWR0aDsKKyBfX3UzMiBoZWlnaHQ7CisgX191MzIgaGFuZGxlOworIF9fczMyIGhvdF94OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3MzMiBob3RfeTsKK307CiBzdHJ1Y3QgZHJtX21vZGVfY3J0Y19sdXQgewogIF9fdTMyIGNydGNfaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtMzIzLDM2ICszNTMsMzcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQgMHgwMQotI2RlZmluZSBEUk1fTU9ERV9QQUdFX0ZMSVBfRkxBR1MgRFJNX01PREVfUEFHRV9GTElQX0VWRU5UCi1zdHJ1Y3QgZHJtX21vZGVfY3J0Y19wYWdlX2ZsaXAgeworI2RlZmluZSBEUk1fTU9ERV9QQUdFX0ZMSVBfQVNZTkMgMHgwMgorI2RlZmluZSBEUk1fTU9ERV9QQUdFX0ZMSVBfRkxBR1MgKERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVHxEUk1fTU9ERV9QQUdFX0ZMSVBfQVNZTkMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGRybV9tb2RlX2NydGNfcGFnZV9mbGlwIHsKICBfX3UzMiBjcnRjX2lkOwogIF9fdTMyIGZiX2lkOwogIF9fdTMyIGZsYWdzOwotIF9fdTMyIHJlc2VydmVkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiByZXNlcnZlZDsKICBfX3U2NCB1c2VyX2RhdGE7CiB9Owogc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iIHsKLSB1aW50MzJfdCBoZWlnaHQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGhlaWdodDsKICB1aW50MzJfdCB3aWR0aDsKICB1aW50MzJfdCBicHA7CiAgdWludDMyX3QgZmxhZ3M7Ci0gdWludDMyX3QgaGFuZGxlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBoYW5kbGU7CiAgdWludDMyX3QgcGl0Y2g7CiAgdWludDY0X3Qgc2l6ZTsKIH07Ci1zdHJ1Y3QgZHJtX21vZGVfbWFwX2R1bWIgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBkcm1fbW9kZV9tYXBfZHVtYiB7CiAgX191MzIgaGFuZGxlOwogIF9fdTMyIHBhZDsKICBfX3U2NCBvZmZzZXQ7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgZHJtX21vZGVfZGVzdHJveV9kdW1iIHsKICB1aW50MzJfdCBoYW5kbGU7CiB9OwotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2RybS9pOTE1X2RybS5oIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vaTkxNV9kcm0uaAppbmRleCAzZTUzMzI4Li43Yjk4MTBjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2RybS9pOTE1X2RybS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvZHJtL2k5MTVfZHJtLmgKQEAgLTE5LDE3NyArMTksMTgyIEBACiAjaWZuZGVmIF9VQVBJX0k5MTVfRFJNX0hfCiAjZGVmaW5lIF9VQVBJX0k5MTVfRFJNX0hfCiAjaW5jbHVkZSA8ZHJtL2RybS5oPgotI2RlZmluZSBJOTE1X05SX1RFWF9SRUdJT05TIDI1NQorI2RlZmluZSBJOTE1X0wzX1BBUklUWV9VRVZFTlQgIkwzX1BBUklUWV9FUlJPUiIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEk5MTVfRVJST1JfVUVWRU5UICJFUlJPUiIKKyNkZWZpbmUgSTkxNV9SRVNFVF9VRVZFTlQgIlJFU0VUIgorI2RlZmluZSBJOTE1X05SX1RFWF9SRUdJT05TIDI1NQogI2RlZmluZSBJOTE1X0xPR19NSU5fVEVYX1JFR0lPTl9TSVpFIDE0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgX2RybV9pOTE1X2luaXQgewogIGVudW0gewogIEk5MTVfSU5JVF9ETUEgPSAweDAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJOTE1X0NMRUFOVVBfRE1BID0gMHgwMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSTkxNV9SRVNVTUVfRE1BID0gMHgwMwogIH0gZnVuYzsKICB1bnNpZ25lZCBpbnQgbW1pb19vZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzYXJlYV9wcml2X29mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHJpbmdfc3RhcnQ7CiAgdW5zaWduZWQgaW50IHJpbmdfZW5kOwogIHVuc2lnbmVkIGludCByaW5nX3NpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBmcm9udF9vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBiYWNrX29mZnNldDsKICB1bnNpZ25lZCBpbnQgZGVwdGhfb2Zmc2V0OwogIHVuc2lnbmVkIGludCB3OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHBpdGNoOwogIHVuc2lnbmVkIGludCBwaXRjaF9iaXRzOwogIHVuc2lnbmVkIGludCBiYWNrX3BpdGNoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZGVwdGhfcGl0Y2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBjcHA7CiAgdW5zaWduZWQgaW50IGNoaXBzZXQ7CiB9IGRybV9pOTE1X2luaXRfdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZHJtX3RleF9yZWdpb24gdGV4TGlzdFtJOTE1X05SX1RFWF9SRUdJT05TICsgMV07CiAgaW50IGxhc3RfdXBsb2FkOwogIGludCBsYXN0X2VucXVldWU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBsYXN0X2Rpc3BhdGNoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgY3R4T3duZXI7CiAgaW50IHRleEFnZTsKICBpbnQgcGZfZW5hYmxlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHBmX2FjdGl2ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHBmX2N1cnJlbnRfcGFnZTsKICBpbnQgcGVyZl9ib3hlczsKICBpbnQgd2lkdGgsIGhlaWdodDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZHJtX2hhbmRsZV90IGZyb250X2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGZyb250X29mZnNldDsKICBpbnQgZnJvbnRfc2l6ZTsKICBkcm1faGFuZGxlX3QgYmFja19oYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBiYWNrX29mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGJhY2tfc2l6ZTsKICBkcm1faGFuZGxlX3QgZGVwdGhfaGFuZGxlOwogIGludCBkZXB0aF9vZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBkZXB0aF9zaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBkcm1faGFuZGxlX3QgdGV4X2hhbmRsZTsKICBpbnQgdGV4X29mZnNldDsKICBpbnQgdGV4X3NpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBsb2dfdGV4X2dyYW51bGFyaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcGl0Y2g7CiAgaW50IHJvdGF0aW9uOwogIGludCByb3RhdGVkX29mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJvdGF0ZWRfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJvdGF0ZWRfcGl0Y2g7CiAgaW50IHZpcnR1YWxYLCB2aXJ0dWFsWTsKICB1bnNpZ25lZCBpbnQgZnJvbnRfdGlsZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBiYWNrX3RpbGVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZGVwdGhfdGlsZWQ7CiAgdW5zaWduZWQgaW50IHJvdGF0ZWRfdGlsZWQ7CiAgdW5zaWduZWQgaW50IHJvdGF0ZWQyX3RpbGVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcGlwZUFfeDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHBpcGVBX3k7CiAgaW50IHBpcGVBX3c7CiAgaW50IHBpcGVBX2g7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwaXBlQl94OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcGlwZUJfeTsKICBpbnQgcGlwZUJfdzsKICBpbnQgcGlwZUJfaDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZHJtX2hhbmRsZV90IHVudXNlZF9oYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHVudXNlZDEsIHVudXNlZDIsIHVudXNlZDM7CiAgX191MzIgZnJvbnRfYm9faGFuZGxlOwogIF9fdTMyIGJhY2tfYm9faGFuZGxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB1bnVzZWRfYm9faGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBkZXB0aF9ib19oYW5kbGU7CiB9IGRybV9pOTE1X3NhcmVhX3Q7CiAjZGVmaW5lIHBsYW5lQV94IHBpcGVBX3gKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHBsYW5lQV95IHBpcGVBX3kKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHBsYW5lQV93IHBpcGVBX3cKICNkZWZpbmUgcGxhbmVBX2ggcGlwZUFfaAogI2RlZmluZSBwbGFuZUJfeCBwaXBlQl94Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwbGFuZUJfeSBwaXBlQl95CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwbGFuZUJfdyBwaXBlQl93CiAjZGVmaW5lIHBsYW5lQl9oIHBpcGVCX2gKICNkZWZpbmUgSTkxNV9CT1hfUklOR19FTVBUWSAweDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfQk9YX0ZMSVAgMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0JPWF9XQUlUIDB4NAogI2RlZmluZSBJOTE1X0JPWF9URVhUVVJFX0xPQUQgMHg4CiAjZGVmaW5lIEk5MTVfQk9YX0xPU1RfQ09OVEVYVCAweDEwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9JTklUIDB4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JOTE1X0ZMVVNIIDB4MDEKICNkZWZpbmUgRFJNX0k5MTVfRkxJUCAweDAyCiAjZGVmaW5lIERSTV9JOTE1X0JBVENIQlVGRkVSIDB4MDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JOTE1X0lSUV9FTUlUIDB4MDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JOTE1X0lSUV9XQUlUIDB4MDUKICNkZWZpbmUgRFJNX0k5MTVfR0VUUEFSQU0gMHgwNgogI2RlZmluZSBEUk1fSTkxNV9TRVRQQVJBTSAweDA3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9BTExPQyAweDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9GUkVFIDB4MDkKICNkZWZpbmUgRFJNX0k5MTVfSU5JVF9IRUFQIDB4MGEKICNkZWZpbmUgRFJNX0k5MTVfQ01EQlVGRkVSIDB4MGIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JOTE1X0RFU1RST1lfSEVBUCAweDBjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9TRVRfVkJMQU5LX1BJUEUgMHgwZAogI2RlZmluZSBEUk1fSTkxNV9HRVRfVkJMQU5LX1BJUEUgMHgwZQogI2RlZmluZSBEUk1fSTkxNV9WQkxBTktfU1dBUCAweDBmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9IV1NfQUREUiAweDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRU1fSU5JVCAweDEzCiAjZGVmaW5lIERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSIDB4MTQKICNkZWZpbmUgRFJNX0k5MTVfR0VNX1BJTiAweDE1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRU1fVU5QSU4gMHgxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX0k5MTVfR0VNX0JVU1kgMHgxNwogI2RlZmluZSBEUk1fSTkxNV9HRU1fVEhST1RUTEUgMHgxOAogI2RlZmluZSBEUk1fSTkxNV9HRU1fRU5URVJWVCAweDE5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRU1fTEVBVkVWVCAweDFhCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRU1fQ1JFQVRFIDB4MWIKICNkZWZpbmUgRFJNX0k5MTVfR0VNX1BSRUFEIDB4MWMKICNkZWZpbmUgRFJNX0k5MTVfR0VNX1BXUklURSAweDFkCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRU1fTU1BUCAweDFlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRU1fU0VUX0RPTUFJTiAweDFmCiAjZGVmaW5lIERSTV9JOTE1X0dFTV9TV19GSU5JU0ggMHgyMAogI2RlZmluZSBEUk1fSTkxNV9HRU1fU0VUX1RJTElORyAweDIxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRU1fR0VUX1RJTElORyAweDIyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRU1fR0VUX0FQRVJUVVJFIDB4MjMKICNkZWZpbmUgRFJNX0k5MTVfR0VNX01NQVBfR1RUIDB4MjQKICNkZWZpbmUgRFJNX0k5MTVfR0VUX1BJUEVfRlJPTV9DUlRDX0lEIDB4MjUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JOTE1X0dFTV9NQURWSVNFIDB4MjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JOTE1X09WRVJMQVlfUFVUX0lNQUdFIDB4MjcKICNkZWZpbmUgRFJNX0k5MTVfT1ZFUkxBWV9BVFRSUyAweDI4CiAjZGVmaW5lIERSTV9JOTE1X0dFTV9FWEVDQlVGRkVSMiAweDI5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRVRfU1BSSVRFX0NPTE9SS0VZIDB4MmEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JOTE1X1NFVF9TUFJJVEVfQ09MT1JLRVkgMHgyYgogI2RlZmluZSBEUk1fSTkxNV9HRU1fV0FJVCAweDJjCiAjZGVmaW5lIERSTV9JOTE1X0dFTV9DT05URVhUX0NSRUFURSAweDJkCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9HRU1fQ09OVEVYVF9ERVNUUk9ZIDB4MmUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JOTE1X0dFTV9TRVRfQ0FDSElORyAweDJmCiAjZGVmaW5lIERSTV9JOTE1X0dFTV9HRVRfQ0FDSElORyAweDMwCiAjZGVmaW5lIERSTV9JOTE1X1JFR19SRUFEIDB4MzEKKyNkZWZpbmUgRFJNX0k5MTVfR0VUX1JFU0VUX1NUQVRTIDB4MzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9JT0NUTF9JOTE1X0lOSVQgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfRkxVU0ggRFJNX0lPICggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0ZMVVNIKQpAQCAtMjUxLDI5MCArMjU2LDI5NSBAQAogI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fQ09OVEVYVF9ERVNUUk9ZIERSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fQ09OVEVYVF9ERVNUUk9ZLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfZGVzdHJveSkKICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfUkVHX1JFQUQgRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9SRUdfUkVBRCwgc3RydWN0IGRybV9pOTE1X3JlZ19yZWFkKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VUX1JFU0VUX1NUQVRTIERSTV9JT1dSIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VUX1JFU0VUX1NUQVRTLCBzdHJ1Y3QgZHJtX2k5MTVfcmVzZXRfc3RhdHMpCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9iYXRjaGJ1ZmZlciB7CiAgaW50IHN0YXJ0OwogIGludCB1c2VkOwotIGludCBEUjE7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGludCBEUjE7CiAgaW50IERSNDsKICBpbnQgbnVtX2NsaXByZWN0czsKICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKmNsaXByZWN0czsKLX0gZHJtX2k5MTVfYmF0Y2hidWZmZXJfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IGRybV9pOTE1X2JhdGNoYnVmZmVyX3Q7CiB0eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfY21kYnVmZmVyIHsKICBjaGFyIF9fdXNlciAqYnVmOwogIGludCBzejsKLSBpbnQgRFIxOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgRFIxOwogIGludCBEUjQ7CiAgaW50IG51bV9jbGlwcmVjdHM7CiAgc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpjbGlwcmVjdHM7Ci19IGRybV9pOTE1X2NtZGJ1ZmZlcl90OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK30gZHJtX2k5MTVfY21kYnVmZmVyX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9pcnFfZW1pdCB7CiAgaW50IF9fdXNlciAqaXJxX3NlcTsKIH0gZHJtX2k5MTVfaXJxX2VtaXRfdDsKLXR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2lycV93YWl0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9pcnFfd2FpdCB7CiAgaW50IGlycV9zZXE7CiB9IGRybV9pOTE1X2lycV93YWl0X3Q7CiAjZGVmaW5lIEk5MTVfUEFSQU1fSVJRX0FDVElWRSAxCi0jZGVmaW5lIEk5MTVfUEFSQU1fQUxMT1dfQkFUQ0hCVUZGRVIgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSTkxNV9QQVJBTV9BTExPV19CQVRDSEJVRkZFUiAyCiAjZGVmaW5lIEk5MTVfUEFSQU1fTEFTVF9ESVNQQVRDSCAzCiAjZGVmaW5lIEk5MTVfUEFSQU1fQ0hJUFNFVF9JRCA0CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0dFTSA1Ci0jZGVmaW5lIEk5MTVfUEFSQU1fTlVNX0ZFTkNFU19BVkFJTCA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJOTE1X1BBUkFNX05VTV9GRU5DRVNfQVZBSUwgNgogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19PVkVSTEFZIDcKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfUEFHRUZMSVBQSU5HIDgKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfRVhFQ0JVRjIgOQotI2RlZmluZSBJOTE1X1BBUkFNX0hBU19CU0QgMTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0JTRCAxMAogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19CTFQgMTEKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfUkVMQVhFRF9GRU5DSU5HIDEyCiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0NPSEVSRU5UX1JJTkdTIDEzCi0jZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0VYRUNfQ09OU1RBTlRTIDE0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJOTE1X1BBUkFNX0hBU19FWEVDX0NPTlNUQU5UUyAxNAogI2RlZmluZSBJOTE1X1BBUkFNX0hBU19SRUxBWEVEX0RFTFRBIDE1CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0dFTjdfU09MX1JFU0VUIDE2CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0xMQyAxNwotI2RlZmluZSBJOTE1X1BBUkFNX0hBU19BTElBU0lOR19QUEdUVCAxOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfQUxJQVNJTkdfUFBHVFQgMTgKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfV0FJVF9USU1FT1VUIDE5CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1NFTUFQSE9SRVMgMjAKICNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfUFJJTUVfVk1BUF9GTFVTSCAyMQotI2RlZmluZSBJOTE1X1BBUkFNX1JTVkRfRk9SX0ZVVFVSRV9VU0UgMjIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1ZFQk9YIDIyCiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1NFQ1VSRV9CQVRDSEVTIDIzCiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX1BJTk5FRF9CQVRDSEVTIDI0CiAjZGVmaW5lIEk5MTVfUEFSQU1fSEFTX0VYRUNfTk9fUkVMT0MgMjUKLSNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfRVhFQ19IQU5ETEVfTFVUIDI2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJOTE1X1BBUkFNX0hBU19FWEVDX0hBTkRMRV9MVVQgMjYKKyNkZWZpbmUgSTkxNV9QQVJBTV9IQVNfV1QgMjcKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X2dldHBhcmFtIHsKICBpbnQgcGFyYW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBfX3VzZXIgKnZhbHVlOwogfSBkcm1faTkxNV9nZXRwYXJhbV90OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9TRVRQQVJBTV9VU0VfTUlfQkFUQ0hCVUZGRVJfU1RBUlQgMQogI2RlZmluZSBJOTE1X1NFVFBBUkFNX1RFWF9MUlVfTE9HX0dSQU5VTEFSSVRZIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfU0VUUEFSQU1fQUxMT1dfQkFUQ0hCVUZGRVIgMwogI2RlZmluZSBJOTE1X1NFVFBBUkFNX05VTV9VU0VEX0ZFTkNFUyA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfc2V0cGFyYW0gewogIGludCBwYXJhbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHZhbHVlOwogfSBkcm1faTkxNV9zZXRwYXJhbV90OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9NRU1fUkVHSU9OX0FHUCAxCiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9tZW1fYWxsb2MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcmVnaW9uOwogIGludCBhbGlnbm1lbnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzaXplOwogIGludCBfX3VzZXIgKnJlZ2lvbl9vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBkcm1faTkxNV9tZW1fYWxsb2NfdDsKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X21lbV9mcmVlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJlZ2lvbjsKICBpbnQgcmVnaW9uX29mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGRybV9pOTE1X21lbV9mcmVlX3Q7CiB0eXBlZGVmIHN0cnVjdCBkcm1faTkxNV9tZW1faW5pdF9oZWFwIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJlZ2lvbjsKICBpbnQgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHN0YXJ0OwogfSBkcm1faTkxNV9tZW1faW5pdF9oZWFwX3Q7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfbWVtX2Rlc3Ryb3lfaGVhcCB7CiAgaW50IHJlZ2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGRybV9pOTE1X21lbV9kZXN0cm95X2hlYXBfdDsKICNkZWZpbmUgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fSTkxNV9WQkxBTktfUElQRV9CIDIKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X3ZibGFua19waXBlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHBpcGU7CiB9IGRybV9pOTE1X3ZibGFua19waXBlX3Q7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfdmJsYW5rX3N3YXAgewogIGRybV9kcmF3YWJsZV90IGRyYXdhYmxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBlbnVtIGRybV92Ymxhbmtfc2VxX3R5cGUgc2VxdHlwZTsKICB1bnNpZ25lZCBpbnQgc2VxdWVuY2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBkcm1faTkxNV92Ymxhbmtfc3dhcF90OwogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfaHdzX2FkZHIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBhZGRyOwogfSBkcm1faTkxNV9od3NfYWRkcl90OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1faTkxNV9nZW1faW5pdCB7CiAgX191NjQgZ3R0X3N0YXJ0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBndHRfZW5kOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NyZWF0ZSB7CiAgX191NjQgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGFuZGxlOwogIF9fdTMyIHBhZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiBwYWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG9mZnNldDsKICBfX3U2NCBzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBkYXRhX3B0cjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgewogIF9fdTMyIGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGFkOwogIF9fdTY0IG9mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc2l6ZTsKICBfX3U2NCBkYXRhX3B0cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGFuZGxlOwogIF9fdTMyIHBhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgb2Zmc2V0OwogIF9fdTY0IHNpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGFkZHJfcHRyOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXBfZ3R0IHsKICBfX3UzMiBoYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZDsKICBfX3U2NCBvZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X2RvbWFpbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiByZWFkX2RvbWFpbnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHdyaXRlX2RvbWFpbjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9zd19maW5pc2ggewogIF9fdTMyIGhhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdGFyZ2V0X2hhbmRsZTsKICBfX3UzMiBkZWx0YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgb2Zmc2V0OwogIF9fdTY0IHByZXN1bWVkX29mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVhZF9kb21haW5zOwogIF9fdTMyIHdyaXRlX2RvbWFpbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fQ1BVIDB4MDAwMDAwMDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgMHgwMDAwMDAwMgogI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiAweDAwMDAwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fQ09NTUFORCAweDAwMDAwMDA4CiAjZGVmaW5lIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiAweDAwMDAwMDEwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fVkVSVEVYIDB4MDAwMDAwMjAKICNkZWZpbmUgSTkxNV9HRU1fRE9NQUlOX0dUVCAweDAwMDAwMDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCB7CiAgX191MzIgaGFuZGxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZWxvY2F0aW9uX2NvdW50OwogIF9fdTY0IHJlbG9jc19wdHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGFsaWdubWVudDsKICBfX3U2NCBvZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGJ1ZmZlcnNfcHRyOwogIF9fdTMyIGJ1ZmZlcl9jb3VudDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYmF0Y2hfc3RhcnRfb2Zmc2V0OwogIF9fdTMyIGJhdGNoX2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgRFIxOwogIF9fdTMyIERSNDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbnVtX2NsaXByZWN0czsKICBfX3U2NCBjbGlwcmVjdHNfcHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiByZWxvY2F0aW9uX2NvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZWxvY3NfcHRyOwogIF9fdTY0IGFsaWdubWVudDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgb2Zmc2V0OwogI2RlZmluZSBFWEVDX09CSkVDVF9ORUVEU19GRU5DRSAoMTw8MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYRUNfT0JKRUNUX05FRURTX0dUVCAoMTw8MSkKICNkZWZpbmUgRVhFQ19PQkpFQ1RfV1JJVEUgKDE8PDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0VYRUNfT0JKRUNUX1VOS05PV05fRkxBR1MgLShFWEVDX09CSkVDVF9XUklURTw8MSkKICBfX3U2NCBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcnN2ZDE7CiAgX191NjQgcnN2ZDI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBidWZmZXJzX3B0cjsKICBfX3UzMiBidWZmZXJfY291bnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJhdGNoX3N0YXJ0X29mZnNldDsKICBfX3UzMiBiYXRjaF9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIERSMTsKICBfX3UzMiBEUjQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG51bV9jbGlwcmVjdHM7CiAgX191NjQgY2xpcHJlY3RzX3B0cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfRVhFQ19SSU5HX01BU0sgKDc8PDApCiAjZGVmaW5lIEk5MTVfRVhFQ19ERUZBVUxUICgwPDwwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9FWEVDX1JFTkRFUiAoMTw8MCkKICNkZWZpbmUgSTkxNV9FWEVDX0JTRCAoMjw8MCkKLSNkZWZpbmUgSTkxNV9FWEVDX0JMVCAoMzw8MCkKLSNkZWZpbmUgSTkxNV9FWEVDX0NPTlNUQU5UU19NQVNLICgzPDw2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSTkxNV9FWEVDX0JMVCAoMzw8MCkKKyNkZWZpbmUgSTkxNV9FWEVDX1ZFQk9YICg0PDwwKQorI2RlZmluZSBJOTE1X0VYRUNfQ09OU1RBTlRTX01BU0sgKDM8PDYpCiAjZGVmaW5lIEk5MTVfRVhFQ19DT05TVEFOVFNfUkVMX0dFTkVSQUwgKDA8PDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0VYRUNfQ09OU1RBTlRTX0FCU09MVVRFICgxPDw2KQogI2RlZmluZSBJOTE1X0VYRUNfQ09OU1RBTlRTX1JFTF9TVVJGQUNFICgyPDw2KQogIF9fdTY0IGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByc3ZkMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcnN2ZDI7CiB9OwogI2RlZmluZSBJOTE1X0VYRUNfR0VON19TT0xfUkVTRVQgKDE8PDgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJOTE1X0VYRUNfU0VDVVJFICgxPDw5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTkxNV9FWEVDX0lTX1BJTk5FRCAoMTw8MTApCiAjZGVmaW5lIEk5MTVfRVhFQ19OT19SRUxPQyAoMTw8MTEpCiAjZGVmaW5lIEk5MTVfRVhFQ19IQU5ETEVfTFVUICgxPDwxMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fSTkxNV9FWEVDX1VOS05PV05fRkxBR1MgLShJOTE1X0VYRUNfSEFORExFX0xVVDw8MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEk5MTVfRVhFQ19DT05URVhUX0lEX01BU0sgKDB4ZmZmZmZmZmYpCiAjZGVmaW5lIGk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoZWIyLCBjb250ZXh0KSAgIChlYjIpLnJzdmQxID0gY29udGV4dCAmIEk5MTVfRVhFQ19DT05URVhUX0lEX01BU0sKICNkZWZpbmUgaTkxNV9leGVjYnVmZmVyMl9nZXRfY29udGV4dF9pZChlYjIpICAgKChlYjIpLnJzdmQxICYgSTkxNV9FWEVDX0NPTlRFWFRfSURfTUFTSykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKICBfX3UzMiBwYWQ7CiAgX191NjQgYWxpZ25tZW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBvZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1faTkxNV9nZW1fdW5waW4gewogIF9fdTMyIGhhbmRsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGFkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2J1c3kgewogIF9fdTMyIGhhbmRsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYnVzeTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBJOTE1X0NBQ0hJTkdfTk9ORSAwCiAjZGVmaW5lIEk5MTVfQ0FDSElOR19DQUNIRUQgMQorI2RlZmluZSBJOTE1X0NBQ0hJTkdfRElTUExBWSAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRybV9pOTE1X2dlbV9jYWNoaW5nIHsKICBfX3UzMiBoYW5kbGU7CkBAIC02ODcsNCArNjk3LDE0IEBACiAgX191NjQgdmFsOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CitzdHJ1Y3QgZHJtX2k5MTVfcmVzZXRfc3RhdHMgeworIF9fdTMyIGN0eF9pZDsKKyBfX3UzMiBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcmVzZXRfY291bnQ7CisgX191MzIgYmF0Y2hfYWN0aXZlOworIF9fdTMyIGJhdGNoX3BlbmRpbmc7CisgX191MzIgcGFkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvZHJtL21zbV9kcm0uaCBiL2xpYmMva2VybmVsL3VhcGkvZHJtL21zbV9kcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzNiYjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vbXNtX2RybS5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVNNX0RSTV9IX18KKyNkZWZpbmUgX19NU01fRFJNX0hfXworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPGRybS9kcm0uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TTV9QSVBFX05PTkUgMHgwMAorI2RlZmluZSBNU01fUElQRV8yRDAgMHgwMQorI2RlZmluZSBNU01fUElQRV8yRDEgMHgwMgorI2RlZmluZSBNU01fUElQRV8zRDAgMHgxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBkcm1fbXNtX3RpbWVzcGVjIHsKKyBpbnQ2NF90IHR2X3NlYzsKKyBpbnQ2NF90IHR2X25zZWM7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNNX1BBUkFNX0dQVV9JRCAweDAxCisjZGVmaW5lIE1TTV9QQVJBTV9HTUVNX1NJWkUgMHgwMgorc3RydWN0IGRybV9tc21fcGFyYW0geworIHVpbnQzMl90IHBpcGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IHBhcmFtOworIHVpbnQ2NF90IHZhbHVlOworfTsKKyNkZWZpbmUgTVNNX0JPX1NDQU5PVVQgMHgwMDAwMDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNNX0JPX0dQVV9SRUFET05MWSAweDAwMDAwMDAyCisjZGVmaW5lIE1TTV9CT19DQUNIRV9NQVNLIDB4MDAwZjAwMDAKKyNkZWZpbmUgTVNNX0JPX0NBQ0hFRCAweDAwMDEwMDAwCisjZGVmaW5lIE1TTV9CT19XQyAweDAwMDIwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU01fQk9fVU5DQUNIRUQgMHgwMDA0MDAwMAorc3RydWN0IGRybV9tc21fZ2VtX25ldyB7CisgdWludDY0X3Qgc2l6ZTsKKyB1aW50MzJfdCBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgaGFuZGxlOworfTsKK3N0cnVjdCBkcm1fbXNtX2dlbV9pbmZvIHsKKyB1aW50MzJfdCBoYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IHBhZDsKKyB1aW50NjRfdCBvZmZzZXQ7Cit9OworI2RlZmluZSBNU01fUFJFUF9SRUFEIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TTV9QUkVQX1dSSVRFIDB4MDIKKyNkZWZpbmUgTVNNX1BSRVBfTk9TWU5DIDB4MDQKK3N0cnVjdCBkcm1fbXNtX2dlbV9jcHVfcHJlcCB7CisgdWludDMyX3QgaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBvcDsKKyBzdHJ1Y3QgZHJtX21zbV90aW1lc3BlYyB0aW1lb3V0OworfTsKK3N0cnVjdCBkcm1fbXNtX2dlbV9jcHVfZmluaSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGhhbmRsZTsKK307CitzdHJ1Y3QgZHJtX21zbV9nZW1fc3VibWl0X3JlbG9jIHsKKyB1aW50MzJfdCBzdWJtaXRfb2Zmc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBvcjsKKyBpbnQzMl90IHNoaWZ0OworIHVpbnQzMl90IHJlbG9jX2lkeDsKKyB1aW50NjRfdCByZWxvY19vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgTVNNX1NVQk1JVF9DTURfQlVGIDB4MDAwMQorI2RlZmluZSBNU01fU1VCTUlUX0NNRF9JQl9UQVJHRVRfQlVGIDB4MDAwMgorI2RlZmluZSBNU01fU1VCTUlUX0NNRF9DVFhfUkVTVE9SRV9CVUYgMHgwMDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGRybV9tc21fZ2VtX3N1Ym1pdF9jbWQgeworIHVpbnQzMl90IHR5cGU7CisgdWludDMyX3Qgc3VibWl0X2lkeDsKKyB1aW50MzJfdCBzdWJtaXRfb2Zmc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBzaXplOworIHVpbnQzMl90IHBhZDsKKyB1aW50MzJfdCBucl9yZWxvY3M7CisgdWludDY0X3QgX191c2VyIHJlbG9jczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBNU01fU1VCTUlUX0JPX1JFQUQgMHgwMDAxCisjZGVmaW5lIE1TTV9TVUJNSVRfQk9fV1JJVEUgMHgwMDAyCitzdHJ1Y3QgZHJtX21zbV9nZW1fc3VibWl0X2JvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgZmxhZ3M7CisgdWludDMyX3QgaGFuZGxlOworIHVpbnQ2NF90IHByZXN1bWVkOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZHJtX21zbV9nZW1fc3VibWl0IHsKKyB1aW50MzJfdCBwaXBlOworIHVpbnQzMl90IGZlbmNlOworIHVpbnQzMl90IG5yX2JvczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgbnJfY21kczsKKyB1aW50NjRfdCBfX3VzZXIgYm9zOworIHVpbnQ2NF90IF9fdXNlciBjbWRzOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZHJtX21zbV93YWl0X2ZlbmNlIHsKKyB1aW50MzJfdCBmZW5jZTsKKyB1aW50MzJfdCBwYWQ7Cisgc3RydWN0IGRybV9tc21fdGltZXNwZWMgdGltZW91dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBEUk1fTVNNX0dFVF9QQVJBTSAweDAwCisjZGVmaW5lIERSTV9NU01fR0VNX05FVyAweDAyCisjZGVmaW5lIERSTV9NU01fR0VNX0lORk8gMHgwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRFJNX01TTV9HRU1fQ1BVX1BSRVAgMHgwNAorI2RlZmluZSBEUk1fTVNNX0dFTV9DUFVfRklOSSAweDA1CisjZGVmaW5lIERSTV9NU01fR0VNX1NVQk1JVCAweDA2CisjZGVmaW5lIERSTV9NU01fV0FJVF9GRU5DRSAweDA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fTVNNX05VTV9JT0NUTFMgMHgwOAorI2RlZmluZSBEUk1fSU9DVExfTVNNX0dFVF9QQVJBTSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01TTV9HRVRfUEFSQU0sIHN0cnVjdCBkcm1fbXNtX3BhcmFtKQorI2RlZmluZSBEUk1fSU9DVExfTVNNX0dFTV9ORVcgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NU01fR0VNX05FVywgc3RydWN0IGRybV9tc21fZ2VtX25ldykKKyNkZWZpbmUgRFJNX0lPQ1RMX01TTV9HRU1fSU5GTyBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01TTV9HRU1fSU5GTywgc3RydWN0IGRybV9tc21fZ2VtX2luZm8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfTVNNX0dFTV9DUFVfUFJFUCBEUk1fSU9XIChEUk1fQ09NTUFORF9CQVNFICsgRFJNX01TTV9HRU1fQ1BVX1BSRVAsIHN0cnVjdCBkcm1fbXNtX2dlbV9jcHVfcHJlcCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01TTV9HRU1fQ1BVX0ZJTkkgRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NU01fR0VNX0NQVV9GSU5JLCBzdHJ1Y3QgZHJtX21zbV9nZW1fY3B1X2ZpbmkpCisjZGVmaW5lIERSTV9JT0NUTF9NU01fR0VNX1NVQk1JVCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01TTV9HRU1fU1VCTUlULCBzdHJ1Y3QgZHJtX21zbV9nZW1fc3VibWl0KQorI2RlZmluZSBEUk1fSU9DVExfTVNNX1dBSVRfRkVOQ0UgRFJNX0lPVyAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NU01fV0FJVF9GRU5DRSwgc3RydWN0IGRybV9tc21fd2FpdF9mZW5jZSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvZHJtL3JhZGVvbl9kcm0uaCBiL2xpYmMva2VybmVsL3VhcGkvZHJtL3JhZGVvbl9kcm0uaAppbmRleCBhMmE1OGRjLi5mZDBhM2E5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2RybS9yYWRlb25fZHJtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vcmFkZW9uX2RybS5oCkBAIC05MTYsNiArOTE2LDExIEBACiAjZGVmaW5lIFJBREVPTl9JTkZPX1JJTkdfV09SS0lORyAweDE1CiAjZGVmaW5lIFJBREVPTl9JTkZPX1NJX1RJTEVfTU9ERV9BUlJBWSAweDE2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSQURFT05fSU5GT19TSV9DUF9ETUFfQ09NUFVURSAweDE3CisjZGVmaW5lIFJBREVPTl9JTkZPX0NJS19NQUNST1RJTEVfTU9ERV9BUlJBWSAweDE4CisjZGVmaW5lIFJBREVPTl9JTkZPX1NJX0JBQ0tFTkRfRU5BQkxFRF9NQVNLIDB4MTkKKyNkZWZpbmUgUkFERU9OX0lORk9fTUFYX1NDTEsgMHgxYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fcmFkZW9uX2luZm8gewogIHVpbnQzMl90IHJlcXVlc3Q7CiAgdWludDMyX3QgcGFkOwpAQCAtOTM5LDUgKzk0NCw2IEBACiAjZGVmaW5lIFNJX1RJTEVfTU9ERV9ERVBUSF9TVEVOQ0lMXzJEXzJBQSAzCiAjZGVmaW5lIFNJX1RJTEVfTU9ERV9ERVBUSF9TVEVOQ0lMXzJEXzRBQSAzCiAjZGVmaW5lIFNJX1RJTEVfTU9ERV9ERVBUSF9TVEVOQ0lMXzJEXzhBQSAyCi0jZW5kaWYKKyNkZWZpbmUgQ0lLX1RJTEVfTU9ERV9ERVBUSF9TVEVOQ0lMXzFEIDUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvZHJtL3RlZ3JhX2RybS5oIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vdGVncmFfZHJtLmgKaW5kZXggODBkYzY3MS4uOTFkNzFiZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vdGVncmFfZHJtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9kcm0vdGVncmFfZHJtLmgKQEAgLTE4LDUwICsxOCw2MCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9VQVBJX1RFR1JBX0RSTV9IXwogI2RlZmluZSBfVUFQSV9URUdSQV9EUk1fSF8KKyNpbmNsdWRlIDxkcm0vZHJtLmg+CisjZGVmaW5lIERSTV9URUdSQV9HRU1fQ1JFQVRFX1RJTEVEICgxIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fVEVHUkFfR0VNX0NSRUFURV9CT1RUT01fVVAgKDEgPDwgMSkKIHN0cnVjdCBkcm1fdGVncmFfZ2VtX2NyZWF0ZSB7CiAgX191NjQgc2l6ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhhbmRsZTsKIH07CiBzdHJ1Y3QgZHJtX3RlZ3JhX2dlbV9tbWFwIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvZmZzZXQ7CiB9Owogc3RydWN0IGRybV90ZWdyYV9zeW5jcHRfcmVhZCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2YWx1ZTsKIH07CiBzdHJ1Y3QgZHJtX3RlZ3JhX3N5bmNwdF9pbmNyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZDsKIH07CiBzdHJ1Y3QgZHJtX3RlZ3JhX3N5bmNwdF93YWl0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRocmVzaDsKICBfX3UzMiB0aW1lb3V0OwogIF9fdTMyIHZhbHVlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fVEVHUkFfTk9fVElNRU9VVCAoMHhmZmZmZmZmZikKIHN0cnVjdCBkcm1fdGVncmFfb3Blbl9jaGFubmVsIHsKICBfX3UzMiBjbGllbnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgY29udGV4dDsKIH07CiBzdHJ1Y3QgZHJtX3RlZ3JhX2Nsb3NlX2NoYW5uZWwgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBjb250ZXh0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3RlZ3JhX2dldF9zeW5jcHQgewogIF9fdTY0IGNvbnRleHQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBpZDsKK307CitzdHJ1Y3QgZHJtX3RlZ3JhX2dldF9zeW5jcHRfYmFzZSB7CisgX191NjQgY29udGV4dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgc3luY3B0OwogIF9fdTMyIGlkOwogfTsKIHN0cnVjdCBkcm1fdGVncmFfc3luY3B0IHsKQEAgLTEzMSwxNSArMTQxLDE4IEBACiAjZGVmaW5lIERSTV9URUdSQV9HRVRfU1lOQ1BUIDB4MDcKICNkZWZpbmUgRFJNX1RFR1JBX1NVQk1JVCAweDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fVEVHUkFfR0VUX1NZTkNQVF9CQVNFIDB4MDkKICNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX0dFTV9DUkVBVEUgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9URUdSQV9HRU1fQ1JFQVRFLCBzdHJ1Y3QgZHJtX3RlZ3JhX2dlbV9jcmVhdGUpCiAjZGVmaW5lIERSTV9JT0NUTF9URUdSQV9HRU1fTU1BUCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX0dFTV9NTUFQLCBzdHJ1Y3QgZHJtX3RlZ3JhX2dlbV9tbWFwKQogI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfU1lOQ1BUX1JFQUQgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9URUdSQV9TWU5DUFRfUkVBRCwgc3RydWN0IGRybV90ZWdyYV9zeW5jcHRfcmVhZCkKLSNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX1NZTkNQVF9JTkNSIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfU1lOQ1BUX0lOQ1IsIHN0cnVjdCBkcm1fdGVncmFfc3luY3B0X2luY3IpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfU1lOQ1BUX0lOQ1IgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9URUdSQV9TWU5DUFRfSU5DUiwgc3RydWN0IGRybV90ZWdyYV9zeW5jcHRfaW5jcikKICNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX1NZTkNQVF9XQUlUIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfU1lOQ1BUX1dBSVQsIHN0cnVjdCBkcm1fdGVncmFfc3luY3B0X3dhaXQpCiAjZGVmaW5lIERSTV9JT0NUTF9URUdSQV9PUEVOX0NIQU5ORUwgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9URUdSQV9PUEVOX0NIQU5ORUwsIHN0cnVjdCBkcm1fdGVncmFfb3Blbl9jaGFubmVsKQogI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfQ0xPU0VfQ0hBTk5FTCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX0NMT1NFX0NIQU5ORUwsIHN0cnVjdCBkcm1fdGVncmFfb3Blbl9jaGFubmVsKQotI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfR0VUX1NZTkNQVCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX0dFVF9TWU5DUFQsIHN0cnVjdCBkcm1fdGVncmFfZ2V0X3N5bmNwdCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9JT0NUTF9URUdSQV9HRVRfU1lOQ1BUIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfR0VUX1NZTkNQVCwgc3RydWN0IGRybV90ZWdyYV9nZXRfc3luY3B0KQogI2RlZmluZSBEUk1fSU9DVExfVEVHUkFfU1VCTUlUIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVEVHUkFfU1VCTUlULCBzdHJ1Y3QgZHJtX3RlZ3JhX3N1Ym1pdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX1RFR1JBX0dFVF9TWU5DUFRfQkFTRSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX1RFR1JBX0dFVF9TWU5DUFRfQkFTRSwgc3RydWN0IGRybV90ZWdyYV9nZXRfc3luY3B0X2Jhc2UpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2RybS92bXdnZnhfZHJtLmggYi9saWJjL2tlcm5lbC91YXBpL2RybS92bXdnZnhfZHJtLmgKaW5kZXggYTExZmMxYy4uODQ5ZWY3ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9kcm0vdm13Z2Z4X2RybS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaApAQCAtMTgsMjU2ICsxOCwzNTIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX1ZNV0dGWF9EUk1fSF9fCiAjZGVmaW5lIF9fVk1XR0ZYX0RSTV9IX18KKyNpbmNsdWRlIDxkcm0uaD4KICNkZWZpbmUgRFJNX1ZNV19NQVhfU1VSRkFDRV9GQUNFUyA2Ci0jZGVmaW5lIERSTV9WTVdfTUFYX01JUF9MRVZFTFMgMjQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9WTVdfTUFYX01JUF9MRVZFTFMgMjQKICNkZWZpbmUgRFJNX1ZNV19HRVRfUEFSQU0gMAogI2RlZmluZSBEUk1fVk1XX0FMTE9DX0RNQUJVRiAxCiAjZGVmaW5lIERSTV9WTVdfVU5SRUZfRE1BQlVGIDIKLSNkZWZpbmUgRFJNX1ZNV19DVVJTT1JfQllQQVNTIDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9WTVdfQ1VSU09SX0JZUEFTUyAzCiAjZGVmaW5lIERSTV9WTVdfQ09OVFJPTF9TVFJFQU0gNAogI2RlZmluZSBEUk1fVk1XX0NMQUlNX1NUUkVBTSA1CiAjZGVmaW5lIERSTV9WTVdfVU5SRUZfU1RSRUFNIDYKLSNkZWZpbmUgRFJNX1ZNV19DUkVBVEVfQ09OVEVYVCA3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fVk1XX0NSRUFURV9DT05URVhUIDcKICNkZWZpbmUgRFJNX1ZNV19VTlJFRl9DT05URVhUIDgKICNkZWZpbmUgRFJNX1ZNV19DUkVBVEVfU1VSRkFDRSA5CiAjZGVmaW5lIERSTV9WTVdfVU5SRUZfU1VSRkFDRSAxMAotI2RlZmluZSBEUk1fVk1XX1JFRl9TVVJGQUNFIDExCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fVk1XX1JFRl9TVVJGQUNFIDExCiAjZGVmaW5lIERSTV9WTVdfRVhFQ0JVRiAxMgogI2RlZmluZSBEUk1fVk1XX0dFVF8zRF9DQVAgMTMKICNkZWZpbmUgRFJNX1ZNV19GRU5DRV9XQUlUIDE0Ci0jZGVmaW5lIERSTV9WTVdfRkVOQ0VfU0lHTkFMRUQgMTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9WTVdfRkVOQ0VfU0lHTkFMRUQgMTUKICNkZWZpbmUgRFJNX1ZNV19GRU5DRV9VTlJFRiAxNgogI2RlZmluZSBEUk1fVk1XX0ZFTkNFX0VWRU5UIDE3CiAjZGVmaW5lIERSTV9WTVdfUFJFU0VOVCAxOAotI2RlZmluZSBEUk1fVk1XX1BSRVNFTlRfUkVBREJBQ0sgMTkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9WTVdfUFJFU0VOVF9SRUFEQkFDSyAxOQogI2RlZmluZSBEUk1fVk1XX1VQREFURV9MQVlPVVQgMjAKKyNkZWZpbmUgRFJNX1ZNV19DUkVBVEVfU0hBREVSIDIxCisjZGVmaW5lIERSTV9WTVdfVU5SRUZfU0hBREVSIDIyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEUk1fVk1XX0dCX1NVUkZBQ0VfQ1JFQVRFIDIzCisjZGVmaW5lIERSTV9WTVdfR0JfU1VSRkFDRV9SRUYgMjQKKyNkZWZpbmUgRFJNX1ZNV19TWU5DQ1BVIDI1CiAjZGVmaW5lIERSTV9WTVdfUEFSQU1fTlVNX1NUUkVBTVMgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1ZNV19QQVJBTV9OVU1fRlJFRV9TVFJFQU1TIDEKICNkZWZpbmUgRFJNX1ZNV19QQVJBTV8zRCAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fVk1XX1BBUkFNX0hXX0NBUFMgMwogI2RlZmluZSBEUk1fVk1XX1BBUkFNX0ZJRk9fQ0FQUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fVk1XX1BBUkFNX01BWF9GQl9TSVpFIDUKICNkZWZpbmUgRFJNX1ZNV19QQVJBTV9GSUZPX0hXX1ZFUlNJT04gNgorI2RlZmluZSBEUk1fVk1XX1BBUkFNX01BWF9TVVJGX01FTU9SWSA3CisjZGVmaW5lIERSTV9WTVdfUEFSQU1fM0RfQ0FQU19TSVpFIDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERSTV9WTVdfUEFSQU1fTUFYX01PQl9NRU1PUlkgOQorI2RlZmluZSBEUk1fVk1XX1BBUkFNX01BWF9NT0JfU0laRSAxMAogc3RydWN0IGRybV92bXdfZ2V0cGFyYW1fYXJnIHsKICB1aW50NjRfdCB2YWx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgcGFyYW07CiAgdWludDMyX3QgcGFkNjQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fdm13X2NvbnRleHRfYXJnIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50MzJfdCBjaWQ7CiAgdWludDMyX3QgcGFkNjQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fdm13X3N1cmZhY2VfY3JlYXRlX3JlcSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGZsYWdzOwogIHVpbnQzMl90IGZvcm1hdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgbWlwX2xldmVsc1tEUk1fVk1XX01BWF9TVVJGQUNFX0ZBQ0VTXTsKICB1aW50NjRfdCBzaXplX2FkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludDMyX3Qgc2hhcmVhYmxlOwogIGludDMyX3Qgc2Nhbm91dDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IHNpZDsKICB1aW50MzJfdCBwYWQ2NDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV92bXdfc2l6ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHdpZHRoOwogIHVpbnQzMl90IGhlaWdodDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgZGVwdGg7CiAgdWludDMyX3QgcGFkNjQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHVuaW9uIGRybV92bXdfc3VyZmFjZV9jcmVhdGVfYXJnIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgcmVwOwogIHN0cnVjdCBkcm1fdm13X3N1cmZhY2VfY3JlYXRlX3JlcSByZXE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHVuaW9uIGRybV92bXdfc3VyZmFjZV9yZWZlcmVuY2VfYXJnIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGRybV92bXdfc3VyZmFjZV9jcmVhdGVfcmVxIHJlcDsKICBzdHJ1Y3QgZHJtX3Ztd19zdXJmYWNlX2FyZyByZXE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgRFJNX1ZNV19FWEVDQlVGX1ZFUlNJT04gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fdm13X2V4ZWNidWZfYXJnIHsKICB1aW50NjRfdCBjb21tYW5kczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgY29tbWFuZF9zaXplOwogIHVpbnQzMl90IHRocm90dGxlX3VzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCBmZW5jZV9yZXA7CiAgdWludDMyX3QgdmVyc2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgZmxhZ3M7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fdm13X2ZlbmNlX3JlcCB7CiAgdWludDMyX3QgaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBtYXNrOwogIHVpbnQzMl90IHNlcW5vOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBwYXNzZWRfc2Vxbm87CiAgdWludDMyX3QgcGFkNjQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludDMyX3QgZXJyb3I7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9yZXEgewogIHVpbnQzMl90IHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHBhZDY0OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX3Ztd19kbWFidWZfcmVwIHsKICB1aW50NjRfdCBtYXBfaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBoYW5kbGU7CiAgdWludDMyX3QgY3VyX2dtcl9pZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgY3VyX2dtcl9vZmZzZXQ7CiAgdWludDMyX3QgcGFkNjQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHVuaW9uIGRybV92bXdfYWxsb2NfZG1hYnVmX2FyZyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBkcm1fdm13X2FsbG9jX2RtYWJ1Zl9yZXEgcmVxOwogIHN0cnVjdCBkcm1fdm13X2RtYWJ1Zl9yZXAgcmVwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3Ztd191bnJlZl9kbWFidWZfYXJnIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgaGFuZGxlOwogIHVpbnQzMl90IHBhZDY0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3Ztd19yZWN0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50MzJfdCB4OwogIGludDMyX3QgeTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgdzsKICB1aW50MzJfdCBoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3Ztd19jb250cm9sX3N0cmVhbV9hcmcgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBzdHJlYW1faWQ7CiAgdWludDMyX3QgZW5hYmxlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgZmxhZ3M7CiAgdWludDMyX3QgY29sb3Jfa2V5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBoYW5kbGU7CiAgdWludDMyX3Qgb2Zmc2V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IGZvcm1hdDsKICB1aW50MzJfdCBzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCB3aWR0aDsKICB1aW50MzJfdCBoZWlnaHQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHBpdGNoWzNdOwogIHVpbnQzMl90IHBhZDY0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZHJtX3Ztd19yZWN0IHNyYzsKICBzdHJ1Y3QgZHJtX3Ztd19yZWN0IGRzdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBEUk1fVk1XX0NVUlNPUl9CWVBBU1NfQUxMICgxIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fVk1XX0NVUlNPUl9CWVBBU1NfRkxBR1MgKDEpCiBzdHJ1Y3QgZHJtX3Ztd19jdXJzb3JfYnlwYXNzX2FyZyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGZsYWdzOwogIHVpbnQzMl90IGNydGNfaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludDMyX3QgeHBvczsKICBpbnQzMl90IHlwb3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludDMyX3QgeGhvdDsKICBpbnQzMl90IHlob3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fdm13X3N0cmVhbV9hcmcgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBzdHJlYW1faWQ7CiAgdWludDMyX3QgcGFkNjQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fdm13X2dldF8zZF9jYXBfYXJnIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3QgYnVmZmVyOwogIHVpbnQzMl90IG1heF9zaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBwYWQ2NDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEUk1fVk1XX0ZFTkNFX0ZMQUdfRVhFQyAoMSA8PCAwKQogI2RlZmluZSBEUk1fVk1XX0ZFTkNFX0ZMQUdfUVVFUlkgKDEgPDwgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERSTV9WTVdfV0FJVF9PUFRJT05fVU5SRUYgKDEgPDwgMCkKIHN0cnVjdCBkcm1fdm13X2ZlbmNlX3dhaXRfYXJnIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgaGFuZGxlOwogIGludDMyX3QgY29va2llX3ZhbGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCBrZXJuZWxfY29va2llOwogIHVpbnQ2NF90IHRpbWVvdXRfdXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludDMyX3QgbGF6eTsKICBpbnQzMl90IGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IHdhaXRfb3B0aW9uczsKICBpbnQzMl90IHBhZDY0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZHJtX3Ztd19mZW5jZV9zaWduYWxlZF9hcmcgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBoYW5kbGU7CiAgdWludDMyX3QgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludDMyX3Qgc2lnbmFsZWQ7CiAgdWludDMyX3QgcGFzc2VkX3NlcW5vOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBzaWduYWxlZF9mbGFnczsKICB1aW50MzJfdCBwYWQ2NDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGRybV92bXdfZmVuY2VfYXJnIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgaGFuZGxlOwogIHVpbnQzMl90IHBhZDY0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIERSTV9WTVdfRVZFTlRfRkVOQ0VfU0lHTkFMRUQgMHg4MDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fdm13X2V2ZW50X2ZlbmNlIHsKICBzdHJ1Y3QgZHJtX2V2ZW50IGJhc2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ2NF90IHVzZXJfZGF0YTsKICB1aW50MzJfdCB0dl9zZWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHR2X3VzZWM7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJNX1ZNV19GRV9GTEFHX1JFUV9USU1FICgxIDw8IDApCiBzdHJ1Y3QgZHJtX3Ztd19mZW5jZV9ldmVudF9hcmcgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCBmZW5jZV9yZXA7CiAgdWludDY0X3QgdXNlcl9kYXRhOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBoYW5kbGU7CiAgdWludDMyX3QgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBkcm1fdm13X3ByZXNlbnRfYXJnIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgZmJfaWQ7CiAgdWludDMyX3Qgc2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IGRlc3RfeDsKICBpbnQzMl90IGRlc3RfeTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3QgY2xpcHNfcHRyOwogIHVpbnQzMl90IG51bV9jbGlwczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgcGFkNjQ7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkcm1fdm13X3ByZXNlbnRfcmVhZGJhY2tfYXJnIHsKICB1aW50MzJfdCBmYl9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgbnVtX2NsaXBzOwogIHVpbnQ2NF90IGNsaXBzX3B0cjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3QgZmVuY2VfcmVwOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJtX3Ztd191cGRhdGVfbGF5b3V0X2FyZyB7CiAgdWludDMyX3QgbnVtX291dHB1dHM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHBhZDY0OwogIHVpbnQ2NF90IHJlY3RzOwotfTsKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitlbnVtIGRybV92bXdfc2hhZGVyX3R5cGUgeworIGRybV92bXdfc2hhZGVyX3R5cGVfdnMgPSAwLAorIGRybV92bXdfc2hhZGVyX3R5cGVfcHMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGRybV92bXdfc2hhZGVyX3R5cGVfZ3MKK307CitzdHJ1Y3QgZHJtX3Ztd19zaGFkZXJfY3JlYXRlX2FyZyB7CisgZW51bSBkcm1fdm13X3NoYWRlcl90eXBlIHNoYWRlcl90eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBzaXplOworIHVpbnQzMl90IGJ1ZmZlcl9oYW5kbGU7CisgdWludDMyX3Qgc2hhZGVyX2hhbmRsZTsKKyB1aW50NjRfdCBvZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCBkcm1fdm13X3NoYWRlcl9hcmcgeworIHVpbnQzMl90IGhhbmRsZTsKKyB1aW50MzJfdCBwYWQ2NDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSBkcm1fdm13X3N1cmZhY2VfZmxhZ3MgeworIGRybV92bXdfc3VyZmFjZV9mbGFnX3NoYXJlYWJsZSA9ICgxIDw8IDApLAorIGRybV92bXdfc3VyZmFjZV9mbGFnX3NjYW5vdXQgPSAoMSA8PCAxKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgZHJtX3Ztd19zdXJmYWNlX2ZsYWdfY3JlYXRlX2J1ZmZlciA9ICgxIDw8IDIpCit9Oworc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVhdGVfcmVxIHsKKyB1aW50MzJfdCBzdmdhM2RfZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGZvcm1hdDsKKyB1aW50MzJfdCBtaXBfbGV2ZWxzOworIGVudW0gZHJtX3Ztd19zdXJmYWNlX2ZsYWdzIGRybV9zdXJmYWNlX2ZsYWdzOworIHVpbnQzMl90IG11bHRpc2FtcGxlX2NvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBhdXRvZ2VuX2ZpbHRlcjsKKyB1aW50MzJfdCBidWZmZXJfaGFuZGxlOworIHVpbnQzMl90IHBhZDY0OworIHN0cnVjdCBkcm1fdm13X3NpemUgYmFzZV9zaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9yZXAgeworIHVpbnQzMl90IGhhbmRsZTsKKyB1aW50MzJfdCBiYWNrdXBfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgYnVmZmVyX2hhbmRsZTsKKyB1aW50MzJfdCBidWZmZXJfc2l6ZTsKKyB1aW50NjRfdCBidWZmZXJfbWFwX2hhbmRsZTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordW5pb24gZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9hcmcgeworIHN0cnVjdCBkcm1fdm13X2diX3N1cmZhY2VfY3JlYXRlX3JlcCByZXA7Cisgc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVhdGVfcmVxIHJlcTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9yZWZfcmVwIHsKKyBzdHJ1Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9yZXEgY3JlcTsKKyBzdHJ1Y3QgZHJtX3Ztd19nYl9zdXJmYWNlX2NyZWF0ZV9yZXAgY3JlcDsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordW5pb24gZHJtX3Ztd19nYl9zdXJmYWNlX3JlZmVyZW5jZV9hcmcgeworIHN0cnVjdCBkcm1fdm13X2diX3N1cmZhY2VfcmVmX3JlcCByZXA7Cisgc3RydWN0IGRybV92bXdfc3VyZmFjZV9hcmcgcmVxOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIGRybV92bXdfc3luY2NwdV9mbGFncyB7CisgZHJtX3Ztd19zeW5jY3B1X3JlYWQgPSAoMSA8PCAwKSwKKyBkcm1fdm13X3N5bmNjcHVfd3JpdGUgPSAoMSA8PCAxKSwKKyBkcm1fdm13X3N5bmNjcHVfZG9udGJsb2NrID0gKDEgPDwgMiksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGRybV92bXdfc3luY2NwdV9hbGxvd19jcyA9ICgxIDw8IDMpCit9OworZW51bSBkcm1fdm13X3N5bmNjcHVfb3AgeworIGRybV92bXdfc3luY2NwdV9ncmFiLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBkcm1fdm13X3N5bmNjcHVfcmVsZWFzZQorfTsKK3N0cnVjdCBkcm1fdm13X3N5bmNjcHVfYXJnIHsKKyBlbnVtIGRybV92bXdfc3luY2NwdV9vcCBvcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgZW51bSBkcm1fdm13X3N5bmNjcHVfZmxhZ3MgZmxhZ3M7CisgdWludDMyX3QgaGFuZGxlOworIHVpbnQzMl90IHBhZDY0OworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvYXBtX2Jpb3MuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvYXBtX2Jpb3MuaAppbmRleCAxNTViNjQ1Li5mM2I2MTMwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2FwbV9iaW9zLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9hcG1fYmlvcy5oCkBAIC02Niw1NiArNjYsNTkgQEAKICNkZWZpbmUgQVBNX1NUQU5EQllfUkVTVU1FIDB4MDAwYgogI2RlZmluZSBBUE1fQ0FQQUJJTElUWV9DSEFOR0UgMHgwMDBjCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUE1fVVNFUl9ISUJFUk5BVElPTiAweDAwMGQKKyNkZWZpbmUgQVBNX0hJQkVSTkFUSU9OX1JFU1VNRSAweDAwMGUKICNkZWZpbmUgQVBNX1NVQ0NFU1MgMHgwMAogI2RlZmluZSBBUE1fRElTQUJMRUQgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX0NPTk5FQ1RFRCAweDAyCiAjZGVmaW5lIEFQTV9OT1RfQ09OTkVDVEVEIDB4MDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV8xNl9DT05ORUNURUQgMHgwNQogI2RlZmluZSBBUE1fMTZfVU5TVVBQT1JURUQgMHgwNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNXzMyX0NPTk5FQ1RFRCAweDA3CiAjZGVmaW5lIEFQTV8zMl9VTlNVUFBPUlRFRCAweDA4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fQkFEX0RFVklDRSAweDA5CiAjZGVmaW5lIEFQTV9CQURfUEFSQU0gMHgwYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX05PVF9FTkdBR0VEIDB4MGIKICNkZWZpbmUgQVBNX0JBRF9GVU5DVElPTiAweDBjCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fUkVTVU1FX0RJU0FCTEVEIDB4MGQKICNkZWZpbmUgQVBNX05PX0VSUk9SIDB4NTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9CQURfU1RBVEUgMHg2MAogI2RlZmluZSBBUE1fTk9fRVZFTlRTIDB4ODAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9OT1RfUFJFU0VOVCAweDg2CiAjZGVmaW5lIEFQTV9ERVZJQ0VfQklPUyAweDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9ERVZJQ0VfQUxMIDB4MDAwMQogI2RlZmluZSBBUE1fREVWSUNFX0RJU1BMQVkgMHgwMTAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fREVWSUNFX1NUT1JBR0UgMHgwMjAwCiAjZGVmaW5lIEFQTV9ERVZJQ0VfUEFSQUxMRUwgMHgwMzAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fREVWSUNFX1NFUklBTCAweDA0MDAKICNkZWZpbmUgQVBNX0RFVklDRV9ORVRXT1JLIDB4MDUwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX0RFVklDRV9QQ01DSUEgMHgwNjAwCiAjZGVmaW5lIEFQTV9ERVZJQ0VfQkFUVEVSWSAweDgwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9ERVZJQ0VfT0VNIDB4ZTAwMAogI2RlZmluZSBBUE1fREVWSUNFX09MRF9BTEwgMHhmZmZmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fREVWSUNFX0NMQVNTIDB4MDBmZgogI2RlZmluZSBBUE1fREVWSUNFX01BU0sgMHhmZjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fTUFYX0JBVFRFUklFUyAyCiAjZGVmaW5lIEFQTV9DQVBfR0xPQkFMX1NUQU5EQlkgMHgwMDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fQ0FQX0dMT0JBTF9TVVNQRU5EIDB4MDAwMgogI2RlZmluZSBBUE1fQ0FQX1JFU1VNRV9TVEFOREJZX1RJTUVSIDB4MDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1VTUEVORF9USU1FUiAweDAwMDgKICNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1RBTkRCWV9SSU5HIDB4MDAxMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1VTUEVORF9SSU5HIDB4MDAyMAogI2RlZmluZSBBUE1fQ0FQX1JFU1VNRV9TVEFOREJZX1BDTUNJQSAweDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NVU1BFTkRfUENNQ0lBIDB4MDA4MAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fSU9DX1NUQU5EQlkgX0lPKCdBJywgMSkKICNkZWZpbmUgQVBNX0lPQ19TVVNQRU5EIF9JTygnQScsIDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2F1ZGl0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2F1ZGl0LmgKaW5kZXggNTM0NDgwZi4uYjUwNjUxMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9hdWRpdC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvYXVkaXQuaApAQCAtNDMsMzI0ICs0MywzNTIgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1RUWV9HRVQgMTAxNgogI2RlZmluZSBBVURJVF9UVFlfU0VUIDEwMTcKKyNkZWZpbmUgQVVESVRfU0VUX0ZFQVRVUkUgMTAxOAorI2RlZmluZSBBVURJVF9HRVRfRkVBVFVSRSAxMDE5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9GRUFUVVJFX0NIQU5HRSAxMDIwCiAjZGVmaW5lIEFVRElUX0ZJUlNUX1VTRVJfTVNHIDExMDAKICNkZWZpbmUgQVVESVRfVVNFUl9BVkMgMTEwNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfVVNFUl9UVFkgMTEyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTEFTVF9VU0VSX01TRyAxMTk5CiAjZGVmaW5lIEFVRElUX0ZJUlNUX1VTRVJfTVNHMiAyMTAwCiAjZGVmaW5lIEFVRElUX0xBU1RfVVNFUl9NU0cyIDI5OTkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0RBRU1PTl9TVEFSVCAxMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9EQUVNT05fRU5EIDEyMDEKICNkZWZpbmUgQVVESVRfREFFTU9OX0FCT1JUIDEyMDIKICNkZWZpbmUgQVVESVRfREFFTU9OX0NPTkZJRyAxMjAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9TWVNDQUxMIDEzMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1BBVEggMTMwMgogI2RlZmluZSBBVURJVF9JUEMgMTMwMwogI2RlZmluZSBBVURJVF9TT0NLRVRDQUxMIDEzMDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NPTkZJR19DSEFOR0UgMTMwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfU09DS0FERFIgMTMwNgogI2RlZmluZSBBVURJVF9DV0QgMTMwNwogI2RlZmluZSBBVURJVF9FWEVDVkUgMTMwOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfSVBDX1NFVF9QRVJNIDEzMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01RX09QRU4gMTMxMgogI2RlZmluZSBBVURJVF9NUV9TRU5EUkVDViAxMzEzCiAjZGVmaW5lIEFVRElUX01RX05PVElGWSAxMzE0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9NUV9HRVRTRVRBVFRSIDEzMTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0tFUk5FTF9PVEhFUiAxMzE2CiAjZGVmaW5lIEFVRElUX0ZEX1BBSVIgMTMxNwogI2RlZmluZSBBVURJVF9PQkpfUElEIDEzMTgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1RUWSAxMzE5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9FT0UgMTMyMAogI2RlZmluZSBBVURJVF9CUFJNX0ZDQVBTIDEzMjEKICNkZWZpbmUgQVVESVRfQ0FQU0VUIDEzMjIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01NQVAgMTMyMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTkVURklMVEVSX1BLVCAxMzI0CiAjZGVmaW5lIEFVRElUX05FVEZJTFRFUl9DRkcgMTMyNQogI2RlZmluZSBBVURJVF9TRUNDT01QIDEzMjYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FWQyAxNDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9TRUxJTlVYX0VSUiAxNDAxCiAjZGVmaW5lIEFVRElUX0FWQ19QQVRIIDE0MDIKICNkZWZpbmUgQVVESVRfTUFDX1BPTElDWV9MT0FEIDE0MDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01BQ19TVEFUVVMgMTQwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UgMTQwNQogI2RlZmluZSBBVURJVF9NQUNfVU5MQkxfQUxMT1cgMTQwNgogI2RlZmluZSBBVURJVF9NQUNfQ0lQU09WNF9BREQgMTQwNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTUFDX0NJUFNPVjRfREVMIDE0MDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01BQ19NQVBfQUREIDE0MDkKICNkZWZpbmUgQVVESVRfTUFDX01BUF9ERUwgMTQxMAogI2RlZmluZSBBVURJVF9NQUNfSVBTRUNfQUREU0EgMTQxMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTUFDX0lQU0VDX0RFTFNBIDE0MTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01BQ19JUFNFQ19BRERTUEQgMTQxMwogI2RlZmluZSBBVURJVF9NQUNfSVBTRUNfREVMU1BEIDE0MTQKICNkZWZpbmUgQVVESVRfTUFDX0lQU0VDX0VWRU5UIDE0MTUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX01BQ19VTkxCTF9TVENBREQgMTQxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCAxNDE3CiAjZGVmaW5lIEFVRElUX0ZJUlNUX0tFUk5fQU5PTV9NU0cgMTcwMAogI2RlZmluZSBBVURJVF9MQVNUX0tFUk5fQU5PTV9NU0cgMTc5OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAxNzAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BTk9NX0FCRU5EIDE3MDEKICNkZWZpbmUgQVVESVRfQU5PTV9MSU5LIDE3MDIKICNkZWZpbmUgQVVESVRfSU5URUdSSVRZX0RBVEEgMTgwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBIDE4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9TVEFUVVMgMTgwMgogI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfSEFTSCAxODAzCiAjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9QQ1IgMTgwNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfSU5URUdSSVRZX1JVTEUgMTgwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfS0VSTkVMIDIwMDAKICNkZWZpbmUgQVVESVRfRklMVEVSX1VTRVIgMHgwMAogI2RlZmluZSBBVURJVF9GSUxURVJfVEFTSyAweDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9GSUxURVJfRU5UUlkgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfRklMVEVSX1dBVENIIDB4MDMKICNkZWZpbmUgQVVESVRfRklMVEVSX0VYSVQgMHgwNAogI2RlZmluZSBBVURJVF9GSUxURVJfVFlQRSAweDA1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9OUl9GSUxURVJTIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0ZJTFRFUl9QUkVQRU5EIDB4MTAKICNkZWZpbmUgQVVESVRfTkVWRVIgMAogI2RlZmluZSBBVURJVF9QT1NTSUJMRSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BTFdBWVMgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTUFYX0ZJRUxEUyA2NAogI2RlZmluZSBBVURJVF9NQVhfS0VZX0xFTiAyNTYKICNkZWZpbmUgQVVESVRfQklUTUFTS19TSVpFIDY0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9XT1JEKG5yKSAoKF9fdTMyKSgobnIpLzMyKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0JJVChucikgKDEgPDwgKChucikgLSBBVURJVF9XT1JEKG5yKSozMikpCiAjZGVmaW5lIEFVRElUX1NZU0NBTExfQ0xBU1NFUyAxNgogI2RlZmluZSBBVURJVF9DTEFTU19ESVJfV1JJVEUgMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ0xBU1NfRElSX1dSSVRFXzMyIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NMQVNTX0NIQVRUUiAyCiAjZGVmaW5lIEFVRElUX0NMQVNTX0NIQVRUUl8zMiAzCiAjZGVmaW5lIEFVRElUX0NMQVNTX1JFQUQgNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ0xBU1NfUkVBRF8zMiA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DTEFTU19XUklURSA2CiAjZGVmaW5lIEFVRElUX0NMQVNTX1dSSVRFXzMyIDcKICNkZWZpbmUgQVVESVRfQ0xBU1NfU0lHTkFMIDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NMQVNTX1NJR05BTF8zMiA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9VTlVTRURfQklUUyAweDA3RkZGQzAwCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfVUlEX1RPX09CSl9VSUQgMQogI2RlZmluZSBBVURJVF9DT01QQVJFX0dJRF9UT19PQkpfR0lEIDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfRVVJRF9UT19PQkpfVUlEIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfRUdJRF9UT19PQkpfR0lEIDQKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9BVUlEX1RPX09CSl9VSUQgNQogI2RlZmluZSBBVURJVF9DT01QQVJFX1NVSURfVE9fT0JKX1VJRCA2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DT01QQVJFX1NHSURfVE9fT0JKX0dJRCA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DT01QQVJFX0ZTVUlEX1RPX09CSl9VSUQgOAogI2RlZmluZSBBVURJVF9DT01QQVJFX0ZTR0lEX1RPX09CSl9HSUQgOQogI2RlZmluZSBBVURJVF9DT01QQVJFX1VJRF9UT19BVUlEIDEwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DT01QQVJFX1VJRF9UT19FVUlEIDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DT01QQVJFX1VJRF9UT19GU1VJRCAxMgogI2RlZmluZSBBVURJVF9DT01QQVJFX1VJRF9UT19TVUlEIDEzCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfQVVJRF9UT19GU1VJRCAxNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ09NUEFSRV9BVUlEX1RPX1NVSUQgMTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfQVVJRF9UT19FVUlEIDE2CiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfRVVJRF9UT19TVUlEIDE3CiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfRVVJRF9UT19GU1VJRCAxOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ09NUEFSRV9TVUlEX1RPX0ZTVUlEIDE5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9DT01QQVJFX0dJRF9UT19FR0lEIDIwCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfR0lEX1RPX0ZTR0lEIDIxCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfR0lEX1RPX1NHSUQgMjIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0NPTVBBUkVfRUdJRF9UT19GU0dJRCAyMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQ09NUEFSRV9FR0lEX1RPX1NHSUQgMjQKICNkZWZpbmUgQVVESVRfQ09NUEFSRV9TR0lEX1RPX0ZTR0lEIDI1CiAjZGVmaW5lIEFVRElUX01BWF9GSUVMRF9DT01QQVJFIEFVRElUX0NPTVBBUkVfU0dJRF9UT19GU0dJRAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfUElEIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1VJRCAxCiAjZGVmaW5lIEFVRElUX0VVSUQgMgogI2RlZmluZSBBVURJVF9TVUlEIDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0ZTVUlEIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0dJRCA1CiAjZGVmaW5lIEFVRElUX0VHSUQgNgogI2RlZmluZSBBVURJVF9TR0lEIDcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0ZTR0lEIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0xPR0lOVUlEIDkKICNkZWZpbmUgQVVESVRfUEVSUyAxMAogI2RlZmluZSBBVURJVF9BUkNIIDExCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9NU0dUWVBFIDEyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9TVUJKX1VTRVIgMTMKICNkZWZpbmUgQVVESVRfU1VCSl9ST0xFIDE0CiAjZGVmaW5lIEFVRElUX1NVQkpfVFlQRSAxNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfU1VCSl9TRU4gMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1NVQkpfQ0xSIDE3CiAjZGVmaW5lIEFVRElUX1BQSUQgMTgKICNkZWZpbmUgQVVESVRfT0JKX1VTRVIgMTkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX09CSl9ST0xFIDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9PQkpfVFlQRSAyMQogI2RlZmluZSBBVURJVF9PQkpfTEVWX0xPVyAyMgogI2RlZmluZSBBVURJVF9PQkpfTEVWX0hJR0ggMjMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0xPR0lOVUlEX1NFVCAyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfREVWTUFKT1IgMTAwCiAjZGVmaW5lIEFVRElUX0RFVk1JTk9SIDEwMQogI2RlZmluZSBBVURJVF9JTk9ERSAxMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0VYSVQgMTAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9TVUNDRVNTIDEwNAogI2RlZmluZSBBVURJVF9XQVRDSCAxMDUKICNkZWZpbmUgQVVESVRfUEVSTSAxMDYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0RJUiAxMDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0ZJTEVUWVBFIDEwOAogI2RlZmluZSBBVURJVF9PQkpfVUlEIDEwOQogI2RlZmluZSBBVURJVF9PQkpfR0lEIDExMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfRklFTERfQ09NUEFSRSAxMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FSRzAgMjAwCiAjZGVmaW5lIEFVRElUX0FSRzEgKEFVRElUX0FSRzArMSkKICNkZWZpbmUgQVVESVRfQVJHMiAoQVVESVRfQVJHMCsyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJHMyAoQVVESVRfQVJHMCszKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfRklMVEVSS0VZIDIxMAogI2RlZmluZSBBVURJVF9ORUdBVEUgMHg4MDAwMDAwMAogI2RlZmluZSBBVURJVF9CSVRfTUFTSyAweDA4MDAwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9MRVNTX1RIQU4gMHgxMDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfR1JFQVRFUl9USEFOIDB4MjAwMDAwMDAKICNkZWZpbmUgQVVESVRfTk9UX0VRVUFMIDB4MzAwMDAwMDAKICNkZWZpbmUgQVVESVRfRVFVQUwgMHg0MDAwMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQklUX1RFU1QgKEFVRElUX0JJVF9NQVNLfEFVRElUX0VRVUFMKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfTEVTU19USEFOX09SX0VRVUFMIChBVURJVF9MRVNTX1RIQU58QVVESVRfRVFVQUwpCiAjZGVmaW5lIEFVRElUX0dSRUFURVJfVEhBTl9PUl9FUVVBTCAoQVVESVRfR1JFQVRFUl9USEFOfEFVRElUX0VRVUFMKQogI2RlZmluZSBBVURJVF9PUEVSQVRPUlMgKEFVRElUX0VRVUFMfEFVRElUX05PVF9FUVVBTHxBVURJVF9CSVRfTUFTSykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQXVkaXRfZXF1YWwsCiAgQXVkaXRfbm90X2VxdWFsLAogIEF1ZGl0X2JpdG1hc2ssCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEF1ZGl0X2JpdHRlc3QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEF1ZGl0X2x0LAogIEF1ZGl0X2d0LAogIEF1ZGl0X2xlLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBdWRpdF9nZSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQXVkaXRfYmFkCiB9OwogI2RlZmluZSBBVURJVF9TVEFUVVNfRU5BQkxFRCAweDAwMDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1NUQVRVU19GQUlMVVJFIDB4MDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfU1RBVFVTX1BJRCAweDAwMDQKICNkZWZpbmUgQVVESVRfU1RBVFVTX1JBVEVfTElNSVQgMHgwMDA4CiAjZGVmaW5lIEFVRElUX1NUQVRVU19CQUNLTE9HX0xJTUlUIDB4MDAxMAorI2RlZmluZSBBVURJVF9TVEFUVVNfQkFDS0xPR19XQUlUX1RJTUUgMHgwMDIwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9WRVJTSU9OX0JBQ0tMT0dfTElNSVQgMQorI2RlZmluZSBBVURJVF9WRVJTSU9OX0JBQ0tMT0dfV0FJVF9USU1FIDIKKyNkZWZpbmUgQVVESVRfVkVSU0lPTl9MQVRFU1QgQVVESVRfVkVSU0lPTl9CQUNLTE9HX1dBSVRfVElNRQogI2RlZmluZSBBVURJVF9GQUlMX1NJTEVOVCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9GQUlMX1BSSU5USyAxCiAjZGVmaW5lIEFVRElUX0ZBSUxfUEFOSUMgMgogI2RlZmluZSBfX0FVRElUX0FSQ0hfNjRCSVQgMHg4MDAwMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19BVURJVF9BUkNIX0xFIDB4NDAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FSQ0hfQUxQSEEgKEVNX0FMUEhBfF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCiAjZGVmaW5lIEFVRElUX0FSQ0hfQVJNIChFTV9BUk18X19BVURJVF9BUkNIX0xFKQogI2RlZmluZSBBVURJVF9BUkNIX0FSTUVCIChFTV9BUk0pCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkNIX0NSSVMgKEVNX0NSSVN8X19BVURJVF9BUkNIX0xFKQotI2RlZmluZSBBVURJVF9BUkNIX0ZSViAoRU1fRlJWKQotI2RlZmluZSBBVURJVF9BUkNIX0g4MzAwIChFTV9IOF8zMDApCi0jZGVmaW5lIEFVRElUX0FSQ0hfSTM4NiAoRU1fMzg2fF9fQVVESVRfQVJDSF9MRSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0FSQ0hfRlJWIChFTV9GUlYpCisjZGVmaW5lIEFVRElUX0FSQ0hfSTM4NiAoRU1fMzg2fF9fQVVESVRfQVJDSF9MRSkKICNkZWZpbmUgQVVESVRfQVJDSF9JQTY0IChFTV9JQV82NHxfX0FVRElUX0FSQ0hfNjRCSVR8X19BVURJVF9BUkNIX0xFKQogI2RlZmluZSBBVURJVF9BUkNIX00zMlIgKEVNX00zMlIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkNIX002OEsgKEVNXzY4SykKICNkZWZpbmUgQVVESVRfQVJDSF9NSVBTIChFTV9NSVBTKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJDSF9NSVBTRUwgKEVNX01JUFN8X19BVURJVF9BUkNIX0xFKQogI2RlZmluZSBBVURJVF9BUkNIX01JUFM2NCAoRU1fTUlQU3xfX0FVRElUX0FSQ0hfNjRCSVQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkNIX01JUFNFTDY0IChFTV9NSVBTfF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCiAjZGVmaW5lIEFVRElUX0FSQ0hfT1BFTlJJU0MgKEVNX09QRU5SSVNDKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfQVJDSF9QQVJJU0MgKEVNX1BBUklTQykKICNkZWZpbmUgQVVESVRfQVJDSF9QQVJJU0M2NCAoRU1fUEFSSVNDfF9fQVVESVRfQVJDSF82NEJJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FSQ0hfUFBDIChFTV9QUEMpCiAjZGVmaW5lIEFVRElUX0FSQ0hfUFBDNjQgKEVNX1BQQzY0fF9fQVVESVRfQVJDSF82NEJJVCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FSQ0hfUzM5MCAoRU1fUzM5MCkKICNkZWZpbmUgQVVESVRfQVJDSF9TMzkwWCAoRU1fUzM5MHxfX0FVRElUX0FSQ0hfNjRCSVQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkNIX1NIIChFTV9TSCkKICNkZWZpbmUgQVVESVRfQVJDSF9TSEVMIChFTV9TSHxfX0FVRElUX0FSQ0hfTEUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkNIX1NINjQgKEVNX1NIfF9fQVVESVRfQVJDSF82NEJJVCkKICNkZWZpbmUgQVVESVRfQVJDSF9TSEVMNjQgKEVNX1NIfF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVURJVF9BUkNIX1NQQVJDIChFTV9TUEFSQykKICNkZWZpbmUgQVVESVRfQVJDSF9TUEFSQzY0IChFTV9TUEFSQ1Y5fF9fQVVESVRfQVJDSF82NEJJVCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX0FSQ0hfWDg2XzY0IChFTV9YODZfNjR8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKICNkZWZpbmUgQVVESVRfUEVSTV9FWEVDIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVRElUX1BFUk1fV1JJVEUgMgogI2RlZmluZSBBVURJVF9QRVJNX1JFQUQgNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVESVRfUEVSTV9BVFRSIDgKKyNkZWZpbmUgQVVESVRfTUVTU0FHRV9URVhUX01BWCA4NTYwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGF1ZGl0X3N0YXR1cyB7CiAgX191MzIgbWFzazsKICBfX3UzMiBlbmFibGVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmYWlsdXJlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwaWQ7CiAgX191MzIgcmF0ZV9saW1pdDsKICBfX3UzMiBiYWNrbG9nX2xpbWl0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsb3N0OwotIF9fdTMyIGJhY2tsb2c7Ci19Owotc3RydWN0IGF1ZGl0X3R0eV9zdGF0dXMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBiYWNrbG9nOworIF9fdTMyIHZlcnNpb247CisgX191MzIgYmFja2xvZ193YWl0X3RpbWU7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBhdWRpdF9mZWF0dXJlcyB7CisjZGVmaW5lIEFVRElUX0ZFQVRVUkVfVkVSU0lPTiAxCisgX191MzIgdmVyczsKKyBfX3UzMiBtYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmZWF0dXJlczsKKyBfX3UzMiBsb2NrOworfTsKKyNkZWZpbmUgQVVESVRfRkVBVFVSRV9PTkxZX1VOU0VUX0xPR0lOVUlEIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0ZFQVRVUkVfTE9HSU5VSURfSU1NVVRBQkxFIDEKKyNkZWZpbmUgQVVESVRfTEFTVF9GRUFUVVJFIEFVRElUX0ZFQVRVUkVfTE9HSU5VSURfSU1NVVRBQkxFCisjZGVmaW5lIGF1ZGl0X2ZlYXR1cmVfdmFsaWQoeCkgKCh4KSA+PSAwICYmICh4KSA8PSBBVURJVF9MQVNUX0ZFQVRVUkUpCisjZGVmaW5lIEFVRElUX0ZFQVRVUkVfVE9fTUFTSyh4KSAoMSA8PCAoKHgpICYgMzEpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBhdWRpdF90dHlfc3RhdHVzIHsKICBfX3UzMiBlbmFibGVkOwogIF9fdTMyIGxvZ19wYXNzd2Q7CiB9Owotc3RydWN0IGF1ZGl0X3J1bGVfZGF0YSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9VSURfVU5TRVQgKHVuc2lnbmVkIGludCktMQorc3RydWN0IGF1ZGl0X3J1bGVfZGF0YSB7CiAgX191MzIgZmxhZ3M7CiAgX191MzIgYWN0aW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmaWVsZF9jb3VudDsKICBfX3UzMiBtYXNrW0FVRElUX0JJVE1BU0tfU0laRV07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZpZWxkc1tBVURJVF9NQVhfRklFTERTXTsKICBfX3UzMiB2YWx1ZXNbQVVESVRfTUFYX0ZJRUxEU107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZpZWxkZmxhZ3NbQVVESVRfTUFYX0ZJRUxEU107CiAgX191MzIgYnVmbGVuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIGJ1ZlswXTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGF1ZGl0X3J1bGUgewogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhY3Rpb247CiAgX191MzIgZmllbGRfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1hc2tbQVVESVRfQklUTUFTS19TSVpFXTsKICBfX3UzMiBmaWVsZHNbQVVESVRfTUFYX0ZJRUxEU107Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHZhbHVlc1tBVURJVF9NQVhfRklFTERTXTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2JjYWNoZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9iY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDFkNDU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9iY2FjaGUuaApAQCAtMCwwICsxLDIwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQkNBQ0hFX0gKKyNkZWZpbmUgX0xJTlVYX0JDQUNIRV9ICisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjZGVmaW5lIEJJVE1BU0sobmFtZSwgdHlwZSwgZmllbGQsIG9mZnNldCwgc2l6ZSkgIHN0YXRpYyBpbmxpbmUgX191NjQgbmFtZShjb25zdCB0eXBlICprKSAgeyByZXR1cm4gKGstPmZpZWxkID4+IG9mZnNldCkgJiB+KH4wVUxMIDw8IHNpemUpOyB9ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBTRVRfIyNuYW1lKHR5cGUgKmssIF9fdTY0IHYpICB7ICAgay0+ZmllbGQgJj0gfih+KH4wVUxMIDw8IHNpemUpIDw8IG9mZnNldCk7ICAgay0+ZmllbGQgfD0gKHYgJiB+KH4wVUxMIDw8IHNpemUpKSA8PCBvZmZzZXQ7ICB9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGJrZXkgeworIF9fdTY0IGhpZ2g7CisgX191NjQgbG93OworIF9fdTY0IHB0cltdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIEtFWV9GSUVMRChuYW1lLCBmaWVsZCwgb2Zmc2V0LCBzaXplKSAgIEJJVE1BU0sobmFtZSwgc3RydWN0IGJrZXksIGZpZWxkLCBvZmZzZXQsIHNpemUpCisjZGVmaW5lIFBUUl9GSUVMRChuYW1lLCBvZmZzZXQsIHNpemUpICBzdGF0aWMgaW5saW5lIF9fdTY0IG5hbWUoY29uc3Qgc3RydWN0IGJrZXkgKmssIHVuc2lnbmVkIGkpICB7IHJldHVybiAoay0+cHRyW2ldID4+IG9mZnNldCkgJiB+KH4wVUxMIDw8IHNpemUpOyB9ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBTRVRfIyNuYW1lKHN0cnVjdCBia2V5ICprLCB1bnNpZ25lZCBpLCBfX3U2NCB2KSAgeyAgIGstPnB0cltpXSAmPSB+KH4ofjBVTEwgPDwgc2l6ZSkgPDwgb2Zmc2V0KTsgICBrLT5wdHJbaV0gfD0gKHYgJiB+KH4wVUxMIDw8IHNpemUpKSA8PCBvZmZzZXQ7ICB9CisjZGVmaW5lIEtFWV9TSVpFX0JJVFMgMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9NQVhfVTY0UyA4CisjZGVmaW5lIEtFWShpbm9kZSwgb2Zmc2V0LCBzaXplKSAgKChzdHJ1Y3QgYmtleSkgeyAgIC5oaWdoID0gKDFVTEwgPDwgNjMpIHwgKChfX3U2NCkgKHNpemUpIDw8IDIwKSB8IChpbm9kZSksICAgLmxvdyA9IChvZmZzZXQpICB9KQorI2RlZmluZSBaRVJPX0tFWSBLRVkoMCwgMCwgMCkKKyNkZWZpbmUgTUFYX0tFWV9JTk9ERSAofih+MCA8PCAyMCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNQVhfS0VZX09GRlNFVCAofjBVTEwgPj4gMSkKKyNkZWZpbmUgTUFYX0tFWSBLRVkoTUFYX0tFWV9JTk9ERSwgTUFYX0tFWV9PRkZTRVQsIDApCisjZGVmaW5lIEtFWV9TVEFSVChrKSAoS0VZX09GRlNFVChrKSAtIEtFWV9TSVpFKGspKQorI2RlZmluZSBTVEFSVF9LRVkoaykgS0VZKEtFWV9JTk9ERShrKSwgS0VZX1NUQVJUKGspLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFRSX0RFVl9CSVRTIDEyCisjZGVmaW5lIFBUUl9DSEVDS19ERVYgKCgxIDw8IFBUUl9ERVZfQklUUykgLSAxKQorI2RlZmluZSBQVFIoZ2VuLCBvZmZzZXQsIGRldikgICAoKCgoX191NjQpIGRldikgPDwgNTEpIHwgKChfX3U2NCkgb2Zmc2V0KSA8PCA4IHwgZ2VuKQorI2RlZmluZSBia2V5X2NvcHkoX2Rlc3QsIF9zcmMpIG1lbWNweShfZGVzdCwgX3NyYywgYmtleV9ieXRlcyhfc3JjKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJLRVlfUEFEIDgKKyNkZWZpbmUgQktFWV9QQURERUQoa2V5KSAgIHVuaW9uIHsgc3RydWN0IGJrZXkga2V5OyBfX3U2NCBrZXkgIyMgX3BhZFtCS0VZX1BBRF07IH0KKyNkZWZpbmUgQkNBQ0hFX1NCX1ZFUlNJT05fQ0RFViAwCisjZGVmaW5lIEJDQUNIRV9TQl9WRVJTSU9OX0JERVYgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQkNBQ0hFX1NCX1ZFUlNJT05fQ0RFVl9XSVRIX1VVSUQgMworI2RlZmluZSBCQ0FDSEVfU0JfVkVSU0lPTl9CREVWX1dJVEhfT0ZGU0VUIDQKKyNkZWZpbmUgQkNBQ0hFX1NCX01BWF9WRVJTSU9OIDQKKyNkZWZpbmUgU0JfU0VDVE9SIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNCX1NJWkUgNDA5NgorI2RlZmluZSBTQl9MQUJFTF9TSVpFIDMyCisjZGVmaW5lIFNCX0pPVVJOQUxfQlVDS0VUUyAyNTZVCisjZGVmaW5lIE1BWF9DQUNIRVNfUEVSX1NFVCA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCREVWX0RBVEFfU1RBUlRfREVGQVVMVCAxNgorc3RydWN0IGNhY2hlX3NiIHsKKyBfX3U2NCBjc3VtOworIF9fdTY0IG9mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdmVyc2lvbjsKKyBfX3U4IG1hZ2ljWzE2XTsKKyBfX3U4IHV1aWRbMTZdOworIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBzZXRfdXVpZFsxNl07CisgX191NjQgc2V0X21hZ2ljOworIH07CisgX191OCBsYWJlbFtTQl9MQUJFTF9TSVpFXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgZmxhZ3M7CisgX191NjQgc2VxOworIF9fdTY0IHBhZFs4XTsKKyB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB7CisgX191NjQgbmJ1Y2tldHM7CisgX191MTYgYmxvY2tfc2l6ZTsKKyBfX3UxNiBidWNrZXRfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgbnJfaW5fc2V0OworIF9fdTE2IG5yX3RoaXNfZGV2OworIH07Cisgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgZGF0YV9vZmZzZXQ7CisgfTsKKyB9OworIF9fdTMyIGxhc3RfbW91bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGZpcnN0X2J1Y2tldDsKKyB1bmlvbiB7CisgX191MTYgbmpvdXJuYWxfYnVja2V0czsKKyBfX3UxNiBrZXlzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9OworIF9fdTY0IGRbU0JfSk9VUk5BTF9CVUNLRVRTXTsKK307CisjZGVmaW5lIENBQ0hFX1JFUExBQ0VNRU5UX0xSVSAwVQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0FDSEVfUkVQTEFDRU1FTlRfRklGTyAxVQorI2RlZmluZSBDQUNIRV9SRVBMQUNFTUVOVF9SQU5ET00gMlUKKyNkZWZpbmUgQ0FDSEVfTU9ERV9XUklURVRIUk9VR0ggMFUKKyNkZWZpbmUgQ0FDSEVfTU9ERV9XUklURUJBQ0sgMVUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENBQ0hFX01PREVfV1JJVEVBUk9VTkQgMlUKKyNkZWZpbmUgQ0FDSEVfTU9ERV9OT05FIDNVCisjZGVmaW5lIEJERVZfU1RBVEVfTk9ORSAwVQorI2RlZmluZSBCREVWX1NUQVRFX0NMRUFOIDFVCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCREVWX1NUQVRFX0RJUlRZIDJVCisjZGVmaW5lIEJERVZfU1RBVEVfU1RBTEUgM1UKKyNkZWZpbmUgSlNFVF9NQUdJQyAweDI0NTIzNWMxYTM2MjUwMzJVTEwKKyNkZWZpbmUgUFNFVF9NQUdJQyAweDY3NTBlMTVmODczMzdmOTFVTEwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJTRVRfTUFHSUMgMHg5MDEzNWM3OGI5OWUwN2Y1VUxMCisjZGVmaW5lIEJDQUNIRV9KU0VUX1ZFUlNJT05fVVVJRHYxIDEKKyNkZWZpbmUgQkNBQ0hFX0pTRVRfVkVSU0lPTl9VVUlEIDEKKyNkZWZpbmUgQkNBQ0hFX0pTRVRfVkVSU0lPTiAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGpzZXQgeworIF9fdTY0IGNzdW07CisgX191NjQgbWFnaWM7CisgX191NjQgc2VxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB2ZXJzaW9uOworIF9fdTMyIGtleXM7CisgX191NjQgbGFzdF9zZXE7CisgQktFWV9QQURERUQodXVpZF9idWNrZXQpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBCS0VZX1BBRERFRChidHJlZV9yb290KTsKKyBfX3UxNiBidHJlZV9sZXZlbDsKKyBfX3UxNiBwYWRbM107CisgX191NjQgcHJpb19idWNrZXRbTUFYX0NBQ0hFU19QRVJfU0VUXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5pb24geworIHN0cnVjdCBia2V5IHN0YXJ0WzBdOworIF9fdTY0IGRbMF07CisgfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IHByaW9fc2V0IHsKKyBfX3U2NCBjc3VtOworIF9fdTY0IG1hZ2ljOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzZXE7CisgX191MzIgdmVyc2lvbjsKKyBfX3UzMiBwYWQ7CisgX191NjQgbmV4dF9idWNrZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBidWNrZXRfZGlzayB7CisgX191MTYgcHJpbzsKKyBfX3U4IGdlbjsKKyB9IF9fYXR0cmlidXRlKChwYWNrZWQpKSBkYXRhW107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCB1dWlkX2VudHJ5IHsKKyB1bmlvbiB7Cisgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCB1dWlkWzE2XTsKKyBfX3U4IGxhYmVsWzMyXTsKKyBfX3UzMiBmaXJzdF9yZWc7CisgX191MzIgbGFzdF9yZWc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGludmFsaWRhdGVkOworIF9fdTMyIGZsYWdzOworIF9fdTY0IHNlY3RvcnM7CisgfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBwYWRbMTI4XTsKKyB9OworfTsKKyNkZWZpbmUgQkNBQ0hFX0JTRVRfQ1NVTSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCQ0FDSEVfQlNFVF9WRVJTSU9OIDEKK3N0cnVjdCBic2V0IHsKKyBfX3U2NCBjc3VtOworIF9fdTY0IG1hZ2ljOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzZXE7CisgX191MzIgdmVyc2lvbjsKKyBfX3UzMiBrZXlzOworIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGJrZXkgc3RhcnRbMF07CisgX191NjQgZFswXTsKKyB9OworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdXVpZF9lbnRyeV92MCB7CisgX191OCB1dWlkWzE2XTsKKyBfX3U4IGxhYmVsWzMyXTsKKyBfX3UzMiBmaXJzdF9yZWc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGxhc3RfcmVnOworIF9fdTMyIGludmFsaWRhdGVkOworIF9fdTMyIHBhZDsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2JpbmRlci5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9iaW5kZXIuaAppbmRleCAxNDcyMzgyLi4wMjEwMWFiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2JpbmRlci5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvYmluZGVyLmgKQEAgLTM2LDEzNiArMzYsMTU1IEBACiAgRkxBVF9CSU5ERVJfRkxBR19BQ0NFUFRTX0ZEUyA9IDB4MTAwLAogfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaWZkZWYgQklOREVSX0lQQ18zMkJJVAordHlwZWRlZiBfX3UzMiBiaW5kZXJfc2l6ZV90OwordHlwZWRlZiBfX3UzMiBiaW5kZXJfdWludHB0cl90OworI2Vsc2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit0eXBlZGVmIF9fdTY0IGJpbmRlcl9zaXplX3Q7Cit0eXBlZGVmIF9fdTY0IGJpbmRlcl91aW50cHRyX3Q7CisjZW5kaWYKIHN0cnVjdCBmbGF0X2JpbmRlcl9vYmplY3QgewotIHVuc2lnbmVkIGxvbmcgdHlwZTsKLSB1bnNpZ25lZCBsb25nIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0eXBlOworIF9fdTMyIGZsYWdzOwogIHVuaW9uIHsKKyBiaW5kZXJfdWludHB0cl90IGJpbmRlcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gdm9pZCBfX3VzZXIgKmJpbmRlcjsKLSBzaWduZWQgbG9uZyBoYW5kbGU7CisgX191MzIgaGFuZGxlOwogIH07Ci0gdm9pZCBfX3VzZXIgKmNvb2tpZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgYmluZGVyX3VpbnRwdHJfdCBjb29raWU7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBiaW5kZXJfd3JpdGVfcmVhZCB7Ci0gc2lnbmVkIGxvbmcgd3JpdGVfc2l6ZTsKLSBzaWduZWQgbG9uZyB3cml0ZV9jb25zdW1lZDsKKyBiaW5kZXJfc2l6ZV90IHdyaXRlX3NpemU7CisgYmluZGVyX3NpemVfdCB3cml0ZV9jb25zdW1lZDsKKyBiaW5kZXJfdWludHB0cl90IHdyaXRlX2J1ZmZlcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gdW5zaWduZWQgbG9uZyB3cml0ZV9idWZmZXI7Ci0gc2lnbmVkIGxvbmcgcmVhZF9zaXplOwotIHNpZ25lZCBsb25nIHJlYWRfY29uc3VtZWQ7Ci0gdW5zaWduZWQgbG9uZyByZWFkX2J1ZmZlcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgYmluZGVyX3NpemVfdCByZWFkX3NpemU7CisgYmluZGVyX3NpemVfdCByZWFkX2NvbnN1bWVkOworIGJpbmRlcl91aW50cHRyX3QgcmVhZF9idWZmZXI7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBiaW5kZXJfdmVyc2lvbiB7Ci0gc2lnbmVkIGxvbmcgcHJvdG9jb2xfdmVyc2lvbjsKKyBfX3MzMiBwcm90b2NvbF92ZXJzaW9uOwogfTsKKyNpZmRlZiBCSU5ERVJfSVBDXzMyQklUCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCSU5ERVJfQ1VSUkVOVF9QUk9UT0NPTF9WRVJTSU9OIDcKKyNlbHNlCisjZGVmaW5lIEJJTkRFUl9DVVJSRU5UX1BST1RPQ09MX1ZFUlNJT04gOAorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCSU5ERVJfV1JJVEVfUkVBRCBfSU9XUignYicsIDEsIHN0cnVjdCBiaW5kZXJfd3JpdGVfcmVhZCkKICNkZWZpbmUgQklOREVSX1NFVF9JRExFX1RJTUVPVVQgX0lPVygnYicsIDMsIF9fczY0KQotI2RlZmluZSBCSU5ERVJfU0VUX01BWF9USFJFQURTIF9JT1coJ2InLCA1LCBzaXplX3QpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCSU5ERVJfU0VUX01BWF9USFJFQURTIF9JT1coJ2InLCA1LCBfX3UzMikKICNkZWZpbmUgQklOREVSX1NFVF9JRExFX1BSSU9SSVRZIF9JT1coJ2InLCA2LCBfX3MzMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJJTkRFUl9TRVRfQ09OVEVYVF9NR1IgX0lPVygnYicsIDcsIF9fczMyKQogI2RlZmluZSBCSU5ERVJfVEhSRUFEX0VYSVQgX0lPVygnYicsIDgsIF9fczMyKQogI2RlZmluZSBCSU5ERVJfVkVSU0lPTiBfSU9XUignYicsIDksIHN0cnVjdCBiaW5kZXJfdmVyc2lvbikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHRyYW5zYWN0aW9uX2ZsYWdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVEZfT05FX1dBWSA9IDB4MDEsCiAgVEZfUk9PVF9PQkpFQ1QgPSAweDA0LAogIFRGX1NUQVRVU19DT0RFID0gMHgwOCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVEZfQUNDRVBUX0ZEUyA9IDB4MTAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fZGF0YSB7CiAgdW5pb24geworIF9fdTMyIGhhbmRsZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gc2l6ZV90IGhhbmRsZTsKLSB2b2lkICpwdHI7CisgYmluZGVyX3VpbnRwdHJfdCBwdHI7CiAgfSB0YXJnZXQ7Ci0gdm9pZCAqY29va2llOworIGJpbmRlcl91aW50cHRyX3QgY29va2llOworIF9fdTMyIGNvZGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHVuc2lnbmVkIGludCBjb2RlOwotIHVuc2lnbmVkIGludCBmbGFnczsKKyBfX3UzMiBmbGFnczsKICBwaWRfdCBzZW5kZXJfcGlkOwogIHVpZF90IHNlbmRlcl9ldWlkOworIGJpbmRlcl9zaXplX3QgZGF0YV9zaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBzaXplX3QgZGF0YV9zaXplOwotIHNpemVfdCBvZmZzZXRzX3NpemU7CisgYmluZGVyX3NpemVfdCBvZmZzZXRzX3NpemU7CiAgdW5pb24gewogIHN0cnVjdCB7CisgYmluZGVyX3VpbnRwdHJfdCBidWZmZXI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGNvbnN0IHZvaWQgX191c2VyICpidWZmZXI7Ci0gY29uc3Qgdm9pZCBfX3VzZXIgKm9mZnNldHM7CisgYmluZGVyX3VpbnRwdHJfdCBvZmZzZXRzOwogIH0gcHRyOwotIHVpbnQ4X3QgYnVmWzhdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJ1Zls4XTsKICB9IGRhdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSB7Ci0gdm9pZCAqcHRyOworIGJpbmRlcl91aW50cHRyX3QgcHRyOworIGJpbmRlcl91aW50cHRyX3QgY29va2llOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSB2b2lkICpjb29raWU7CiB9Owotc3RydWN0IGJpbmRlcl9wcmlfZGVzYyB7Ci0gaW50IHByaW9yaXR5Oworc3RydWN0IGJpbmRlcl9oYW5kbGVfY29va2llIHsKKyBfX3UzMiBoYW5kbGU7CisgYmluZGVyX3VpbnRwdHJfdCBjb29raWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGludCBkZXNjOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK3N0cnVjdCBiaW5kZXJfcHJpX2Rlc2MgeworIF9fczMyIHByaW9yaXR5OworIF9fdTMyIGRlc2M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBiaW5kZXJfcHJpX3B0cl9jb29raWUgewotIGludCBwcmlvcml0eTsKKyBfX3MzMiBwcmlvcml0eTsKKyBiaW5kZXJfdWludHB0cl90IHB0cjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gdm9pZCAqcHRyOwotIHZvaWQgKmNvb2tpZTsKKyBiaW5kZXJfdWludHB0cl90IGNvb2tpZTsKIH07CiBlbnVtIGJpbmRlcl9kcml2ZXJfcmV0dXJuX3Byb3RvY29sIHsKKyBCUl9FUlJPUiA9IF9JT1IoJ3InLCAwLCBfX3MzMiksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIEJSX0VSUk9SID0gX0lPUigncicsIDAsIGludCksCiAgQlJfT0sgPSBfSU8oJ3InLCAxKSwKICBCUl9UUkFOU0FDVElPTiA9IF9JT1IoJ3InLCAyLCBzdHJ1Y3QgYmluZGVyX3RyYW5zYWN0aW9uX2RhdGEpLAogIEJSX1JFUExZID0gX0lPUigncicsIDMsIHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fZGF0YSksCisgQlJfQUNRVUlSRV9SRVNVTFQgPSBfSU9SKCdyJywgNCwgX19zMzIpLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCUl9BQ1FVSVJFX1JFU1VMVCA9IF9JT1IoJ3InLCA0LCBpbnQpLAogIEJSX0RFQURfUkVQTFkgPSBfSU8oJ3InLCA1KSwKICBCUl9UUkFOU0FDVElPTl9DT01QTEVURSA9IF9JTygncicsIDYpLAogIEJSX0lOQ1JFRlMgPSBfSU9SKCdyJywgNywgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQlJfQUNRVUlSRSA9IF9JT1IoJ3InLCA4LCBzdHJ1Y3QgYmluZGVyX3B0cl9jb29raWUpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCUl9SRUxFQVNFID0gX0lPUigncicsIDksIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCiAgQlJfREVDUkVGUyA9IF9JT1IoJ3InLCAxMCwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKICBCUl9BVFRFTVBUX0FDUVVJUkUgPSBfSU9SKCdyJywgMTEsIHN0cnVjdCBiaW5kZXJfcHJpX3B0cl9jb29raWUpLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCUl9OT09QID0gX0lPKCdyJywgMTIpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCUl9TUEFXTl9MT09QRVIgPSBfSU8oJ3InLCAxMyksCiAgQlJfRklOSVNIRUQgPSBfSU8oJ3InLCAxNCksCi0gQlJfREVBRF9CSU5ERVIgPSBfSU9SKCdyJywgMTUsIHZvaWQgKiksCisgQlJfREVBRF9CSU5ERVIgPSBfSU9SKCdyJywgMTUsIGJpbmRlcl91aW50cHRyX3QpLAorIEJSX0NMRUFSX0RFQVRIX05PVElGSUNBVElPTl9ET05FID0gX0lPUigncicsIDE2LCBiaW5kZXJfdWludHB0cl90KSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQlJfQ0xFQVJfREVBVEhfTk9USUZJQ0FUSU9OX0RPTkUgPSBfSU9SKCdyJywgMTYsIHZvaWQgKiksCiAgQlJfRkFJTEVEX1JFUExZID0gX0lPKCdyJywgMTcpLAogfTsKIGVudW0gYmluZGVyX2RyaXZlcl9jb21tYW5kX3Byb3RvY29sIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQkNfVFJBTlNBQ1RJT04gPSBfSU9XKCdjJywgMCwgc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbl9kYXRhKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQkNfUkVQTFkgPSBfSU9XKCdjJywgMSwgc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbl9kYXRhKSwKLSBCQ19BQ1FVSVJFX1JFU1VMVCA9IF9JT1coJ2MnLCAyLCBpbnQpLAotIEJDX0ZSRUVfQlVGRkVSID0gX0lPVygnYycsIDMsIGludCksCisgQkNfQUNRVUlSRV9SRVNVTFQgPSBfSU9XKCdjJywgMiwgX19zMzIpLAorIEJDX0ZSRUVfQlVGRkVSID0gX0lPVygnYycsIDMsIGJpbmRlcl91aW50cHRyX3QpLAorIEJDX0lOQ1JFRlMgPSBfSU9XKCdjJywgNCwgX191MzIpLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBCQ19JTkNSRUZTID0gX0lPVygnYycsIDQsIGludCksCi0gQkNfQUNRVUlSRSA9IF9JT1coJ2MnLCA1LCBpbnQpLAotIEJDX1JFTEVBU0UgPSBfSU9XKCdjJywgNiwgaW50KSwKLSBCQ19ERUNSRUZTID0gX0lPVygnYycsIDcsIGludCksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEJDX0FDUVVJUkUgPSBfSU9XKCdjJywgNSwgX191MzIpLAorIEJDX1JFTEVBU0UgPSBfSU9XKCdjJywgNiwgX191MzIpLAorIEJDX0RFQ1JFRlMgPSBfSU9XKCdjJywgNywgX191MzIpLAogIEJDX0lOQ1JFRlNfRE9ORSA9IF9JT1coJ2MnLCA4LCBzdHJ1Y3QgYmluZGVyX3B0cl9jb29raWUpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCQ19BQ1FVSVJFX0RPTkUgPSBfSU9XKCdjJywgOSwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKICBCQ19BVFRFTVBUX0FDUVVJUkUgPSBfSU9XKCdjJywgMTAsIHN0cnVjdCBiaW5kZXJfcHJpX2Rlc2MpLAogIEJDX1JFR0lTVEVSX0xPT1BFUiA9IF9JTygnYycsIDExKSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQkNfRU5URVJfTE9PUEVSID0gX0lPKCdjJywgMTIpLAotIEJDX0VYSVRfTE9PUEVSID0gX0lPKCdjJywgMTMpLAotIEJDX1JFUVVFU1RfREVBVEhfTk9USUZJQ0FUSU9OID0gX0lPVygnYycsIDE0LCBzdHJ1Y3QgYmluZGVyX3B0cl9jb29raWUpLAotIEJDX0NMRUFSX0RFQVRIX05PVElGSUNBVElPTiA9IF9JT1coJ2MnLCAxNSwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gQkNfREVBRF9CSU5ERVJfRE9ORSA9IF9JT1coJ2MnLCAxNiwgdm9pZCAqKSwKKyBCQ19FWElUX0xPT1BFUiA9IF9JTygnYycsIDEzKSwKKyBCQ19SRVFVRVNUX0RFQVRIX05PVElGSUNBVElPTiA9IF9JT1coJ2MnLCAxNCwgc3RydWN0IGJpbmRlcl9oYW5kbGVfY29va2llKSwKKyBCQ19DTEVBUl9ERUFUSF9OT1RJRklDQVRJT04gPSBfSU9XKCdjJywgMTUsIHN0cnVjdCBiaW5kZXJfaGFuZGxlX2Nvb2tpZSksCisgQkNfREVBRF9CSU5ERVJfRE9ORSA9IF9JT1coJ2MnLCAxNiwgYmluZGVyX3VpbnRwdHJfdCksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9idHJmcy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9idHJmcy5oCmluZGV4IDY5ZDU1ZjAuLjExZjk1MGYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvYnRyZnMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2J0cmZzLmgKQEAgLTE3NCwyMTEgKzE3NCwyNTEgQEAKICBfX3U4IGZzaWRbQlRSRlNfRlNJRF9TSVpFXTsKICBfX3U2NCByZXNlcnZlZFsxMjRdOwogfTsKLSNkZWZpbmUgQlRSRlNfQkFMQU5DRV9DVExfUEFVU0UgMQorc3RydWN0IGJ0cmZzX2lvY3RsX2ZlYXR1cmVfZmxhZ3MgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBjb21wYXRfZmxhZ3M7CisgX191NjQgY29tcGF0X3JvX2ZsYWdzOworIF9fdTY0IGluY29tcGF0X2ZsYWdzOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJUUkZTX0JBTEFOQ0VfQ1RMX1BBVVNFIDEKICNkZWZpbmUgQlRSRlNfQkFMQU5DRV9DVExfQ0FOQ0VMIDIKIHN0cnVjdCBidHJmc19iYWxhbmNlX2FyZ3MgewogIF9fdTY0IHByb2ZpbGVzOwotIF9fdTY0IHVzYWdlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB1c2FnZTsKICBfX3U2NCBkZXZpZDsKICBfX3U2NCBwc3RhcnQ7CiAgX191NjQgcGVuZDsKLSBfX3U2NCB2c3RhcnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHZzdGFydDsKICBfX3U2NCB2ZW5kOwogIF9fdTY0IHRhcmdldDsKICBfX3U2NCBmbGFnczsKLSBfX3U2NCB1bnVzZWRbOF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHVudXNlZFs4XTsKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIHN0cnVjdCBidHJmc19iYWxhbmNlX3Byb2dyZXNzIHsKICBfX3U2NCBleHBlY3RlZDsKLSBfX3U2NCBjb25zaWRlcmVkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBjb25zaWRlcmVkOwogIF9fdTY0IGNvbXBsZXRlZDsKIH07CiAjZGVmaW5lIEJUUkZTX0JBTEFOQ0VfU1RBVEVfUlVOTklORyAoMVVMTCA8PCAwKQotI2RlZmluZSBCVFJGU19CQUxBTkNFX1NUQVRFX1BBVVNFX1JFUSAoMVVMTCA8PCAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQlRSRlNfQkFMQU5DRV9TVEFURV9QQVVTRV9SRVEgKDFVTEwgPDwgMSkKICNkZWZpbmUgQlRSRlNfQkFMQU5DRV9TVEFURV9DQU5DRUxfUkVRICgxVUxMIDw8IDIpCiBzdHJ1Y3QgYnRyZnNfaW9jdGxfYmFsYW5jZV9hcmdzIHsKICBfX3U2NCBmbGFnczsKLSBfX3U2NCBzdGF0ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgc3RhdGU7CiAgc3RydWN0IGJ0cmZzX2JhbGFuY2VfYXJncyBkYXRhOwogIHN0cnVjdCBidHJmc19iYWxhbmNlX2FyZ3MgbWV0YTsKICBzdHJ1Y3QgYnRyZnNfYmFsYW5jZV9hcmdzIHN5czsKLSBzdHJ1Y3QgYnRyZnNfYmFsYW5jZV9wcm9ncmVzcyBzdGF0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgYnRyZnNfYmFsYW5jZV9wcm9ncmVzcyBzdGF0OwogIF9fdTY0IHVudXNlZFs3Ml07CiB9OwogI2RlZmluZSBCVFJGU19JTk9fTE9PS1VQX1BBVEhfTUFYIDQwODAKLXN0cnVjdCBidHJmc19pb2N0bF9pbm9fbG9va3VwX2FyZ3MgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBidHJmc19pb2N0bF9pbm9fbG9va3VwX2FyZ3MgewogIF9fdTY0IHRyZWVpZDsKICBfX3U2NCBvYmplY3RpZDsKICBjaGFyIG5hbWVbQlRSRlNfSU5PX0xPT0tVUF9QQVRIX01BWF07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfc2VhcmNoX2tleSB7CiAgX191NjQgdHJlZV9pZDsKICBfX3U2NCBtaW5fb2JqZWN0aWQ7Ci0gX191NjQgbWF4X29iamVjdGlkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBtYXhfb2JqZWN0aWQ7CiAgX191NjQgbWluX29mZnNldDsKICBfX3U2NCBtYXhfb2Zmc2V0OwogIF9fdTY0IG1pbl90cmFuc2lkOwotIF9fdTY0IG1heF90cmFuc2lkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBtYXhfdHJhbnNpZDsKICBfX3UzMiBtaW5fdHlwZTsKICBfX3UzMiBtYXhfdHlwZTsKICBfX3UzMiBucl9pdGVtczsKLSBfX3UzMiB1bnVzZWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHVudXNlZDsKICBfX3U2NCB1bnVzZWQxOwogIF9fdTY0IHVudXNlZDI7CiAgX191NjQgdW51c2VkMzsKLSBfX3U2NCB1bnVzZWQ0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB1bnVzZWQ0OwogfTsKIHN0cnVjdCBidHJmc19pb2N0bF9zZWFyY2hfaGVhZGVyIHsKICBfX3U2NCB0cmFuc2lkOwotIF9fdTY0IG9iamVjdGlkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBvYmplY3RpZDsKICBfX3U2NCBvZmZzZXQ7CiAgX191MzIgdHlwZTsKICBfX3UzMiBsZW47Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIEJUUkZTX1NFQVJDSF9BUkdTX0JVRlNJWkUgKDQwOTYgLSBzaXplb2Yoc3RydWN0IGJ0cmZzX2lvY3RsX3NlYXJjaF9rZXkpKQogc3RydWN0IGJ0cmZzX2lvY3RsX3NlYXJjaF9hcmdzIHsKICBzdHJ1Y3QgYnRyZnNfaW9jdGxfc2VhcmNoX2tleSBrZXk7Ci0gY2hhciBidWZbQlRSRlNfU0VBUkNIX0FSR1NfQlVGU0laRV07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNoYXIgYnVmW0JUUkZTX1NFQVJDSF9BUkdTX0JVRlNJWkVdOwogfTsKIHN0cnVjdCBidHJmc19pb2N0bF9jbG9uZV9yYW5nZV9hcmdzIHsKICBfX3M2NCBzcmNfZmQ7Ci0gX191NjQgc3JjX29mZnNldCwgc3JjX2xlbmd0aDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgc3JjX29mZnNldCwgc3JjX2xlbmd0aDsKICBfX3U2NCBkZXN0X29mZnNldDsKIH07CiAjZGVmaW5lIEJUUkZTX0RFRlJBR19SQU5HRV9DT01QUkVTUyAxCi0jZGVmaW5lIEJUUkZTX0RFRlJBR19SQU5HRV9TVEFSVF9JTyAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCVFJGU19ERUZSQUdfUkFOR0VfU1RBUlRfSU8gMgorI2RlZmluZSBCVFJGU19TQU1FX0RBVEFfRElGRkVSUyAxCitzdHJ1Y3QgYnRyZnNfaW9jdGxfc2FtZV9leHRlbnRfaW5mbyB7CisgX19zNjQgZmQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGxvZ2ljYWxfb2Zmc2V0OworIF9fdTY0IGJ5dGVzX2RlZHVwZWQ7CisgX19zMzIgc3RhdHVzOworIF9fdTMyIHJlc2VydmVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgYnRyZnNfaW9jdGxfc2FtZV9hcmdzIHsKKyBfX3U2NCBsb2dpY2FsX29mZnNldDsKKyBfX3U2NCBsZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGRlc3RfY291bnQ7CisgX191MTYgcmVzZXJ2ZWQxOworIF9fdTMyIHJlc2VydmVkMjsKKyBzdHJ1Y3QgYnRyZnNfaW9jdGxfc2FtZV9leHRlbnRfaW5mbyBpbmZvWzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfc3BhY2VfaW5mbyB7CiAgX191NjQgZmxhZ3M7CiAgX191NjQgdG90YWxfYnl0ZXM7Ci0gX191NjQgdXNlZF9ieXRlczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdXNlZF9ieXRlczsKIH07CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfc3BhY2VfYXJncyB7CiAgX191NjQgc3BhY2Vfc2xvdHM7Ci0gX191NjQgdG90YWxfc3BhY2VzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB0b3RhbF9zcGFjZXM7CiAgc3RydWN0IGJ0cmZzX2lvY3RsX3NwYWNlX2luZm8gc3BhY2VzWzBdOwogfTsKIHN0cnVjdCBidHJmc19kYXRhX2NvbnRhaW5lciB7Ci0gX191MzIgYnl0ZXNfbGVmdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgYnl0ZXNfbGVmdDsKICBfX3UzMiBieXRlc19taXNzaW5nOwogIF9fdTMyIGVsZW1fY250OwogIF9fdTMyIGVsZW1fbWlzc2VkOwotIF9fdTY0IHZhbFswXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdmFsWzBdOwogfTsKIHN0cnVjdCBidHJmc19pb2N0bF9pbm9fcGF0aF9hcmdzIHsKICBfX3U2NCBpbnVtOwotIF9fdTY0IHNpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHNpemU7CiAgX191NjQgcmVzZXJ2ZWRbNF07CiAgX191NjQgZnNwYXRoOwogfTsKLXN0cnVjdCBidHJmc19pb2N0bF9sb2dpY2FsX2lub19hcmdzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgYnRyZnNfaW9jdGxfbG9naWNhbF9pbm9fYXJncyB7CiAgX191NjQgbG9naWNhbDsKICBfX3U2NCBzaXplOwogIF9fdTY0IHJlc2VydmVkWzRdOwotIF9fdTY0IGlub2RlczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgaW5vZGVzOwogfTsKIGVudW0gYnRyZnNfZGV2X3N0YXRfdmFsdWVzIHsKICBCVFJGU19ERVZfU1RBVF9XUklURV9FUlJTLAotIEJUUkZTX0RFVl9TVEFUX1JFQURfRVJSUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQlRSRlNfREVWX1NUQVRfUkVBRF9FUlJTLAogIEJUUkZTX0RFVl9TVEFUX0ZMVVNIX0VSUlMsCiAgQlRSRlNfREVWX1NUQVRfQ09SUlVQVElPTl9FUlJTLAogIEJUUkZTX0RFVl9TVEFUX0dFTkVSQVRJT05fRVJSUywKLSBCVFJGU19ERVZfU1RBVF9WQUxVRVNfTUFYCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEJUUkZTX0RFVl9TVEFUX1ZBTFVFU19NQVgKIH07CiAjZGVmaW5lIEJUUkZTX0RFVl9TVEFUU19SRVNFVCAoMVVMTCA8PCAwKQogc3RydWN0IGJ0cmZzX2lvY3RsX2dldF9kZXZfc3RhdHMgewotIF9fdTY0IGRldmlkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBkZXZpZDsKICBfX3U2NCBucl9pdGVtczsKICBfX3U2NCBmbGFnczsKICBfX3U2NCB2YWx1ZXNbQlRSRlNfREVWX1NUQVRfVkFMVUVTX01BWF07Ci0gX191NjQgdW51c2VkWzEyOCAtIDIgLSBCVFJGU19ERVZfU1RBVF9WQUxVRVNfTUFYXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdW51c2VkWzEyOCAtIDIgLSBCVFJGU19ERVZfU1RBVF9WQUxVRVNfTUFYXTsKIH07CiAjZGVmaW5lIEJUUkZTX1FVT1RBX0NUTF9FTkFCTEUgMQogI2RlZmluZSBCVFJGU19RVU9UQV9DVExfRElTQUJMRSAyCi0jZGVmaW5lIEJUUkZTX1FVT1RBX0NUTF9SRVNDQU5fX05PVFVTRUQgMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQlRSRlNfUVVPVEFfQ1RMX1JFU0NBTl9fTk9UVVNFRCAzCiBzdHJ1Y3QgYnRyZnNfaW9jdGxfcXVvdGFfY3RsX2FyZ3MgewogIF9fdTY0IGNtZDsKICBfX3U2NCBzdGF0dXM7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfcXVvdGFfcmVzY2FuX2FyZ3MgewogIF9fdTY0IGZsYWdzOwogIF9fdTY0IHByb2dyZXNzOwotIF9fdTY0IHJlc2VydmVkWzZdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCByZXNlcnZlZFs2XTsKIH07CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfcWdyb3VwX2Fzc2lnbl9hcmdzIHsKICBfX3U2NCBhc3NpZ247Ci0gX191NjQgc3JjOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzcmM7CiAgX191NjQgZHN0OwogfTsKIHN0cnVjdCBidHJmc19pb2N0bF9xZ3JvdXBfY3JlYXRlX2FyZ3MgewotIF9fdTY0IGNyZWF0ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgY3JlYXRlOwogIF9fdTY0IHFncm91cGlkOwogfTsKIHN0cnVjdCBidHJmc19pb2N0bF90aW1lc3BlYyB7Ci0gX191NjQgc2VjOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzZWM7CiAgX191MzIgbnNlYzsKIH07CiBzdHJ1Y3QgYnRyZnNfaW9jdGxfcmVjZWl2ZWRfc3Vidm9sX2FyZ3MgewotIGNoYXIgdXVpZFtCVFJGU19VVUlEX1NJWkVdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBjaGFyIHV1aWRbQlRSRlNfVVVJRF9TSVpFXTsKICBfX3U2NCBzdHJhbnNpZDsKICBfX3U2NCBydHJhbnNpZDsKICBzdHJ1Y3QgYnRyZnNfaW9jdGxfdGltZXNwZWMgc3RpbWU7Ci0gc3RydWN0IGJ0cmZzX2lvY3RsX3RpbWVzcGVjIHJ0aW1lOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgYnRyZnNfaW9jdGxfdGltZXNwZWMgcnRpbWU7CiAgX191NjQgZmxhZ3M7CiAgX191NjQgcmVzZXJ2ZWRbMTZdOwogfTsKLSNkZWZpbmUgQlRSRlNfU0VORF9GTEFHX05PX0ZJTEVfREFUQSAweDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJUUkZTX1NFTkRfRkxBR19OT19GSUxFX0RBVEEgMHgxCiAjZGVmaW5lIEJUUkZTX1NFTkRfRkxBR19PTUlUX1NUUkVBTV9IRUFERVIgMHgyCiAjZGVmaW5lIEJUUkZTX1NFTkRfRkxBR19PTUlUX0VORF9DTUQgMHg0CiAjZGVmaW5lIEJUUkZTX1NFTkRfRkxBR19NQVNLICAgKEJUUkZTX1NFTkRfRkxBR19OT19GSUxFX0RBVEEgfCAgIEJUUkZTX1NFTkRfRkxBR19PTUlUX1NUUkVBTV9IRUFERVIgfCAgIEJUUkZTX1NFTkRfRkxBR19PTUlUX0VORF9DTUQpCi1zdHJ1Y3QgYnRyZnNfaW9jdGxfc2VuZF9hcmdzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgYnRyZnNfaW9jdGxfc2VuZF9hcmdzIHsKICBfX3M2NCBzZW5kX2ZkOwogIF9fdTY0IGNsb25lX3NvdXJjZXNfY291bnQ7CiAgX191NjQgX191c2VyICpjbG9uZV9zb3VyY2VzOwotIF9fdTY0IHBhcmVudF9yb290OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBwYXJlbnRfcm9vdDsKICBfX3U2NCBmbGFnczsKICBfX3U2NCByZXNlcnZlZFs0XTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBidHJmc19lcnJfY29kZSB7Cisgbm90dXNlZCwKKyBCVFJGU19FUlJPUl9ERVZfUkFJRDFfTUlOX05PVF9NRVQsCisgQlRSRlNfRVJST1JfREVWX1JBSUQxMF9NSU5fTk9UX01FVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQlRSRlNfRVJST1JfREVWX1JBSUQ1X01JTl9OT1RfTUVULAorIEJUUkZTX0VSUk9SX0RFVl9SQUlENl9NSU5fTk9UX01FVCwKKyBCVFJGU19FUlJPUl9ERVZfVEdUX1JFUExBQ0UsCisgQlRSRlNfRVJST1JfREVWX01JU1NJTkdfTk9UX0ZPVU5ELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBCVFJGU19FUlJPUl9ERVZfT05MWV9XUklUQUJMRSwKKyBCVFJGU19FUlJPUl9ERVZfRVhDTF9SVU5fSU5fUFJPR1JFU1MKK307CiAjZGVmaW5lIEJUUkZTX0lPQ19TTkFQX0NSRUFURSBfSU9XKEJUUkZTX0lPQ1RMX01BR0lDLCAxLCAgIHN0cnVjdCBidHJmc19pb2N0bF92b2xfYXJncykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUUkZTX0lPQ19ERUZSQUcgX0lPVyhCVFJGU19JT0NUTF9NQUdJQywgMiwgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfdm9sX2FyZ3MpCkBAIC00MDEsNyArNDQxLDcgQEAKICNkZWZpbmUgQlRSRlNfSU9DX1RSRUVfU0VBUkNIIF9JT1dSKEJUUkZTX0lPQ1RMX01BR0lDLCAxNywgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfc2VhcmNoX2FyZ3MpCiAjZGVmaW5lIEJUUkZTX0lPQ19JTk9fTE9PS1VQIF9JT1dSKEJUUkZTX0lPQ1RMX01BR0lDLCAxOCwgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfaW5vX2xvb2t1cF9hcmdzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQlRSRlNfSU9DX0RFRkFVTFRfU1VCVk9MIF9JT1coQlRSRlNfSU9DVExfTUFHSUMsIDE5LCB1NjQpCisjZGVmaW5lIEJUUkZTX0lPQ19ERUZBVUxUX1NVQlZPTCBfSU9XKEJUUkZTX0lPQ1RMX01BR0lDLCAxOSwgX191NjQpCiAjZGVmaW5lIEJUUkZTX0lPQ19TUEFDRV9JTkZPIF9JT1dSKEJUUkZTX0lPQ1RMX01BR0lDLCAyMCwgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfc3BhY2VfYXJncykKICNkZWZpbmUgQlRSRlNfSU9DX1NUQVJUX1NZTkMgX0lPUihCVFJGU19JT0NUTF9NQUdJQywgMjQsIF9fdTY0KQogI2RlZmluZSBCVFJGU19JT0NfV0FJVF9TWU5DIF9JT1coQlRSRlNfSU9DVExfTUFHSUMsIDIyLCBfX3U2NCkKQEAgLTQzNCwxMCArNDc0LDE2IEBACiAjZGVmaW5lIEJUUkZTX0lPQ19RR1JPVVBfTElNSVQgX0lPUihCVFJGU19JT0NUTF9NQUdJQywgNDMsICAgc3RydWN0IGJ0cmZzX2lvY3RsX3Fncm91cF9saW1pdF9hcmdzKQogI2RlZmluZSBCVFJGU19JT0NfUVVPVEFfUkVTQ0FOIF9JT1coQlRSRlNfSU9DVExfTUFHSUMsIDQ0LCAgIHN0cnVjdCBidHJmc19pb2N0bF9xdW90YV9yZXNjYW5fYXJncykKICNkZWZpbmUgQlRSRlNfSU9DX1FVT1RBX1JFU0NBTl9TVEFUVVMgX0lPUihCVFJGU19JT0NUTF9NQUdJQywgNDUsICAgc3RydWN0IGJ0cmZzX2lvY3RsX3F1b3RhX3Jlc2Nhbl9hcmdzKQotI2RlZmluZSBCVFJGU19JT0NfR0VUX0ZTTEFCRUwgX0lPUihCVFJGU19JT0NUTF9NQUdJQywgNDksICAgY2hhcltCVFJGU19MQUJFTF9TSVpFXSkKKyNkZWZpbmUgQlRSRlNfSU9DX1FVT1RBX1JFU0NBTl9XQUlUIF9JTyhCVFJGU19JT0NUTF9NQUdJQywgNDYpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCVFJGU19JT0NfR0VUX0ZTTEFCRUwgX0lPUihCVFJGU19JT0NUTF9NQUdJQywgNDksICAgY2hhcltCVFJGU19MQUJFTF9TSVpFXSkKICNkZWZpbmUgQlRSRlNfSU9DX1NFVF9GU0xBQkVMIF9JT1coQlRSRlNfSU9DVExfTUFHSUMsIDUwLCAgIGNoYXJbQlRSRlNfTEFCRUxfU0laRV0pCiAjZGVmaW5lIEJUUkZTX0lPQ19HRVRfREVWX1NUQVRTIF9JT1dSKEJUUkZTX0lPQ1RMX01BR0lDLCA1MiwgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfZ2V0X2Rldl9zdGF0cykKICNkZWZpbmUgQlRSRlNfSU9DX0RFVl9SRVBMQUNFIF9JT1dSKEJUUkZTX0lPQ1RMX01BR0lDLCA1MywgICBzdHJ1Y3QgYnRyZnNfaW9jdGxfZGV2X3JlcGxhY2VfYXJncykKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQlRSRlNfSU9DX0ZJTEVfRVhURU5UX1NBTUUgX0lPV1IoQlRSRlNfSU9DVExfTUFHSUMsIDU0LCAgIHN0cnVjdCBidHJmc19pb2N0bF9zYW1lX2FyZ3MpCisjZGVmaW5lIEJUUkZTX0lPQ19HRVRfRkVBVFVSRVMgX0lPUihCVFJGU19JT0NUTF9NQUdJQywgNTcsICAgc3RydWN0IGJ0cmZzX2lvY3RsX2ZlYXR1cmVfZmxhZ3MpCisjZGVmaW5lIEJUUkZTX0lPQ19TRVRfRkVBVFVSRVMgX0lPVyhCVFJGU19JT0NUTF9NQUdJQywgNTcsICAgc3RydWN0IGJ0cmZzX2lvY3RsX2ZlYXR1cmVfZmxhZ3NbMl0pCisjZGVmaW5lIEJUUkZTX0lPQ19HRVRfU1VQUE9SVEVEX0ZFQVRVUkVTIF9JT1IoQlRSRlNfSU9DVExfTUFHSUMsIDU3LCAgIHN0cnVjdCBidHJmc19pb2N0bF9mZWF0dXJlX2ZsYWdzWzNdKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYW4vZ3cuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2FuL2d3LmgKaW5kZXggM2Y3MmE1Mi4uZGQ4MGQ0OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYW4vZ3cuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2Nhbi9ndy5oCkBAIC01Miw1OCArNTIsNTkgQEAKICBDR1dfRklMVEVSLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDR1dfREVMRVRFRCwKKyBDR1dfTElNX0hPUFMsCiAgX19DR1dfTUFYCiB9OwotI2RlZmluZSBDR1dfTUFYIChfX0NHV19NQVggLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0dXX01BWCAoX19DR1dfTUFYIC0gMSkKICNkZWZpbmUgQ0dXX0ZMQUdTX0NBTl9FQ0hPIDB4MDEKICNkZWZpbmUgQ0dXX0ZMQUdTX0NBTl9TUkNfVFNUQU1QIDB4MDIKICNkZWZpbmUgQ0dXX0ZMQUdTX0NBTl9JSUZfVFhfT0sgMHgwNAotI2RlZmluZSBDR1dfTU9EX0ZVTkNTIDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENHV19NT0RfRlVOQ1MgNAogI2RlZmluZSBDR1dfTU9EX0lEIDB4MDEKICNkZWZpbmUgQ0dXX01PRF9ETEMgMHgwMgogI2RlZmluZSBDR1dfTU9EX0RBVEEgMHgwNAotI2RlZmluZSBDR1dfRlJBTUVfTU9EUyAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDR1dfRlJBTUVfTU9EUyAzCiAjZGVmaW5lIE1BWF9NT0RGVU5DVElPTlMgKENHV19NT0RfRlVOQ1MgKiBDR1dfRlJBTUVfTU9EUykKIHN0cnVjdCBjZ3dfZnJhbWVfbW9kIHsKICBzdHJ1Y3QgY2FuX2ZyYW1lIGNmOwotIF9fdTggbW9kdHlwZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBtb2R0eXBlOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICNkZWZpbmUgQ0dXX01PREFUVFJfTEVOIHNpemVvZihzdHJ1Y3QgY2d3X2ZyYW1lX21vZCkKIHN0cnVjdCBjZ3dfY3N1bV94b3IgewotIF9fczggZnJvbV9pZHg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczggZnJvbV9pZHg7CiAgX19zOCB0b19pZHg7CiAgX19zOCByZXN1bHRfaWR4OwogIF9fdTggaW5pdF94b3JfdmFsOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogc3RydWN0IGNnd19jc3VtX2NyYzggewogIF9fczggZnJvbV9pZHg7CiAgX19zOCB0b19pZHg7Ci0gX19zOCByZXN1bHRfaWR4OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3M4IHJlc3VsdF9pZHg7CiAgX191OCBpbml0X2NyY192YWw7CiAgX191OCBmaW5hbF94b3JfdmFsOwogIF9fdTggY3JjdGFiWzI1Nl07Ci0gX191OCBwcm9maWxlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHByb2ZpbGU7CiAgX191OCBwcm9maWxlX2RhdGFbMjBdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICNkZWZpbmUgQ0dXX0NTX1hPUl9MRU4gc2l6ZW9mKHN0cnVjdCBjZ3dfY3N1bV94b3IpCi0jZGVmaW5lIENHV19DU19DUkM4X0xFTiBzaXplb2Yoc3RydWN0IGNnd19jc3VtX2NyYzgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDR1dfQ1NfQ1JDOF9MRU4gc2l6ZW9mKHN0cnVjdCBjZ3dfY3N1bV9jcmM4KQogZW51bSB7CiAgQ0dXX0NSQzhQUkZfVU5TUEVDLAogIENHV19DUkM4UFJGXzFVOCwKLSBDR1dfQ1JDOFBSRl8xNlU4LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBDR1dfQ1JDOFBSRl8xNlU4LAogIENHV19DUkM4UFJGX1NGRklEX1hPUiwKICBfX0NHV19DUkM4UFJGX01BWAogfTsKLSNkZWZpbmUgQ0dXX0NSQzhQUkZfTUFYIChfX0NHV19DUkM4UFJGX01BWCAtIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDR1dfQ1JDOFBSRl9NQVggKF9fQ0dXX0NSQzhQUkZfTUFYIC0gMSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jaWZzL2NpZnNfbW91bnQuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2lmcy9jaWZzX21vdW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiNmIzOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvY2lmcy9jaWZzX21vdW50LmgKQEAgLTAsMCArMSwyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQ0lGU19NT1VOVF9ICisjZGVmaW5lIF9DSUZTX01PVU5UX0gKKyNkZWZpbmUgQ0lGU19NQVhfRE9NQUlOTkFNRV9MRU4gMjU2CisjZGVmaW5lIENJRlNfTUFYX1VTRVJOQU1FX0xFTiAyNTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENJRlNfTUFYX1BBU1NXT1JEX0xFTiA1MTIKKyNkZWZpbmUgQ0lGU19NQVhfU0hBUkVfTEVOIDI1NgorI2RlZmluZSBDSUZTX05JX01BWEhPU1QgMTAyNAorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jbTQwMDBfY3MuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvY200MDAwX2NzLmgKaW5kZXggYWIxYTZhMS4uOTlmZTcwMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jbTQwMDBfY3MuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2NtNDAwMF9jcy5oCkBAIC0xOSw0MyArMTksNDUgQEAKICNpZm5kZWYgX1VBUElfQ000MDAwX0hfCiAjZGVmaW5lIF9VQVBJX0NNNDAwMF9IXwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZGVmaW5lIE1BWF9BVFIgMzMKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUFYX0FUUiAzMwogI2RlZmluZSBDTTQwMDBfTUFYX0RFViA0CiB0eXBlZGVmIHN0cnVjdCBhdHJlcSB7CiAgX19zMzIgYXRyX2xlbjsKLSB1bnNpZ25lZCBjaGFyIGF0cls2NF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGNoYXIgYXRyWzY0XTsKICBfX3MzMiBwb3dlcl9hY3Q7CiAgdW5zaWduZWQgY2hhciBiSUZTRDsKICB1bnNpZ25lZCBjaGFyIGJJRlNDOwotfSBhdHJlcV90OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK30gYXRyZXFfdDsKIHR5cGVkZWYgc3RydWN0IHB0c3JlcSB7CiAgX191MzIgcHJvdG9jb2w7CiAgdW5zaWduZWQgY2hhciBmbGFnczsKLSB1bnNpZ25lZCBjaGFyIHB0czE7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGNoYXIgcHRzMTsKICB1bnNpZ25lZCBjaGFyIHB0czI7CiAgdW5zaWduZWQgY2hhciBwdHMzOwogfSBwdHNyZXFfdDsKLSNkZWZpbmUgQ01fSU9DX01BR0lDICdjJwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ01fSU9DX01BR0lDICdjJwogI2RlZmluZSBDTV9JT0NfTUFYTlIgMjU1CiAjZGVmaW5lIENNX0lPQ0dTVEFUVVMgX0lPUiAoQ01fSU9DX01BR0lDLCAwLCB1bnNpZ25lZCBjaGFyICopCiAjZGVmaW5lIENNX0lPQ0dBVFIgX0lPV1IoQ01fSU9DX01BR0lDLCAxLCBhdHJlcV90ICopCi0jZGVmaW5lIENNX0lPQ1NQVFMgX0lPVyAoQ01fSU9DX01BR0lDLCAyLCBwdHNyZXFfdCAqKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ01fSU9DU1BUUyBfSU9XIChDTV9JT0NfTUFHSUMsIDIsIHB0c3JlcV90ICopCiAjZGVmaW5lIENNX0lPQ1NSRFIgX0lPIChDTV9JT0NfTUFHSUMsIDMpCiAjZGVmaW5lIENNX0lPQ0FSRE9GRiBfSU8gKENNX0lPQ19NQUdJQywgNCkKICNkZWZpbmUgQ01fSU9TREJHTFZMIF9JT1coQ01fSU9DX01BR0lDLCAyNTAsIGludCopCi0jZGVmaW5lIENNX0NBUkRfSU5TRVJURUQgMHgwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ01fQ0FSRF9JTlNFUlRFRCAweDAxCiAjZGVmaW5lIENNX0NBUkRfUE9XRVJFRCAweDAyCiAjZGVmaW5lIENNX0FUUl9QUkVTRU5UIDB4MDQKICNkZWZpbmUgQ01fQVRSX1ZBTElEIDB4MDgKLSNkZWZpbmUgQ01fU1RBVEVfVkFMSUQgMHgwZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ01fU1RBVEVfVkFMSUQgMHgwZgogI2RlZmluZSBDTV9OT19SRUFERVIgMHgxMAogI2RlZmluZSBDTV9CQURfQ0FSRCAweDIwCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2NvbnN0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2NvbnN0LmgKaW5kZXggZDM0ODMwMC4uOWE4NWJlNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jb25zdC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvY29uc3QuaApAQCAtMjgsNCArMjgsNyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX0FUKFQsWCkgKChUKShYKSkKICNlbmRpZgorI2RlZmluZSBfQklUVUwoeCkgKF9BQygxLFVMKSA8PCAoeCkpCisjZGVmaW5lIF9CSVRVTEwoeCkgKF9BQygxLFVMTCkgPDwgKHgpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kbS1pb2N0bC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kbS1pb2N0bC5oCmluZGV4IDg5ZjNiOTAuLmZiYjRjZDkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZG0taW9jdGwuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2RtLWlvY3RsLmgKQEAgLTEyMSw5ICsxMjEsOSBAQAogI2RlZmluZSBETV9ERVZfU0VUX0dFT01FVFJZIF9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU0VUX0dFT01FVFJZX0NNRCwgc3RydWN0IGRtX2lvY3RsKQogI2RlZmluZSBETV9WRVJTSU9OX01BSk9SIDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIERNX1ZFUlNJT05fTUlOT1IgMjQKKyNkZWZpbmUgRE1fVkVSU0lPTl9NSU5PUiAyNwogI2RlZmluZSBETV9WRVJTSU9OX1BBVENITEVWRUwgMAotI2RlZmluZSBETV9WRVJTSU9OX0VYVFJBICItaW9jdGwgKDIwMTMtMDEtMTUpIgorI2RlZmluZSBETV9WRVJTSU9OX0VYVFJBICItaW9jdGwgKDIwMTMtMTAtMzApIgogI2RlZmluZSBETV9SRUFET05MWV9GTEFHICgxIDw8IDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETV9TVVNQRU5EX0ZMQUcgKDEgPDwgMSkKQEAgLTE0Myw0ICsxNDMsNiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE1fU0VDVVJFX0RBVEFfRkxBRyAoMSA8PCAxNSkKICNkZWZpbmUgRE1fREFUQV9PVVRfRkxBRyAoMSA8PCAxNikKKyNkZWZpbmUgRE1fREVGRVJSRURfUkVNT1ZFICgxIDw8IDE3KQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kbS1sb2ctdXNlcnNwYWNlLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2RtLWxvZy11c2Vyc3BhY2UuaAppbmRleCA0NWE1N2YzLi40N2Q0NWY3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2RtLWxvZy11c2Vyc3BhY2UuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2RtLWxvZy11c2Vyc3BhY2UuaApAQCAtNDMsNyArNDMsNyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE1fVUxPR19SRVFVRVNUX01BU0sgMHhGRgogI2RlZmluZSBETV9VTE9HX1JFUVVFU1RfVFlQRShyZXF1ZXN0X3R5cGUpICAgKERNX1VMT0dfUkVRVUVTVF9NQVNLICYgKHJlcXVlc3RfdHlwZSkpCi0jZGVmaW5lIERNX1VMT0dfUkVRVUVTVF9WRVJTSU9OIDIKKyNkZWZpbmUgRE1fVUxPR19SRVFVRVNUX1ZFUlNJT04gMwogc3RydWN0IGRtX3Vsb2dfcmVxdWVzdCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ2NF90IGx1aWQ7CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2RuLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2RuLmgKaW5kZXggYzcyOTUyZS4uMDEzYTAzZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kbi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZG4uaApAQCAtMTgsMTE4ICsxOCwxMjEgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfRE5fSAogI2RlZmluZSBfTElOVVhfRE5fSAorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNkZWZpbmUgRE5QUk9UT19OU1AgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2RlZmluZSBETlBST1RPX05TUCAyCiAjZGVmaW5lIEROUFJPVE9fUk9VIDMKICNkZWZpbmUgRE5QUk9UT19OTUwgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE5QUk9UT19FVkwgNQogI2RlZmluZSBETlBST1RPX0VWUiA2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETlBST1RPX05TUFQgNwogI2RlZmluZSBETl9BRERMIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEROX01BWEFEREwgMgogI2RlZmluZSBETl9NQVhPUFRMIDE2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETl9NQVhPQkpMIDE2CiAjZGVmaW5lIEROX01BWEFDQ0wgNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEROX01BWEFMSUFTTCAxMjgKICNkZWZpbmUgRE5fTUFYTk9ERUwgMjU2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETkJVRlNJWkUgNjUwMjMKICNkZWZpbmUgU09fQ09OREFUQSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT19DT05BQ0NFU1MgMgogI2RlZmluZSBTT19QUk9YWVVTUiAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT19MSU5LSU5GTyA3CiAjZGVmaW5lIERTT19DT05EQVRBIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERTT19ESVNEQVRBIDEwCiAjZGVmaW5lIERTT19DT05BQ0NFU1MgMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFNPX0FDQ0VQVE1PREUgNAogI2RlZmluZSBEU09fQ09OQUNDRVBUIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERTT19DT05SRUpFQ1QgNgogI2RlZmluZSBEU09fTElOS0lORk8gNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFNPX1NUUkVBTSA4CiAjZGVmaW5lIERTT19TRVFQQUNLRVQgOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFNPX01BWFdJTkRPVyAxMQogI2RlZmluZSBEU09fTk9ERUxBWSAxMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFNPX0NPUksgMTMKICNkZWZpbmUgRFNPX1NFUlZJQ0VTIDE0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEU09fSU5GTyAxNQogI2RlZmluZSBEU09fTUFYIDE1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMTF9JTkFDVElWRSAwCiAjZGVmaW5lIExMX0NPTk5FQ1RJTkcgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTExfUlVOTklORyAyCiAjZGVmaW5lIExMX0RJU0NPTk5FQ1RJTkcgMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUNDX0lNTUVEIDAKICNkZWZpbmUgQUNDX0RFRkVSIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNERl9XSUxEIDEKICNkZWZpbmUgU0RGX1BST1hZIDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNERl9VSUNQUk9YWSA0CiBzdHJ1Y3QgZG5fbmFkZHIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgYV9sZW47CiAgX191OCBhX2FkZHJbRE5fTUFYQURETF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBzb2NrYWRkcl9kbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHNkbl9mYW1pbHk7CiAgX191OCBzZG5fZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc2RuX29iam51bTsKICBfX2xlMTYgc2RuX29iam5hbWVsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNkbl9vYmpuYW1lW0ROX01BWE9CSkxdOwogIHN0cnVjdCBkbl9uYWRkciBzZG5fYWRkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIHNkbl9ub2RlYWRkcmwgc2RuX2FkZC5hX2xlbgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc2RuX25vZGVhZGRyIHNkbl9hZGQuYV9hZGRyCiBzdHJ1Y3Qgb3B0ZGF0YV9kbiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiBvcHRfc3RhdHVzOwogI2RlZmluZSBvcHRfc3RzIG9wdF9zdGF0dXMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTE2IG9wdF9vcHRsOwogIF9fdTggb3B0X2RhdGFbMTZdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgYWNjZXNzZGF0YV9kbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYWNjX2FjY2w7CiAgX191OCBhY2NfYWNjW0ROX01BWEFDQ0xdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGFjY19wYXNzbDsKICBfX3U4IGFjY19wYXNzW0ROX01BWEFDQ0xdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGFjY191c2VybDsKICBfX3U4IGFjY191c2VyW0ROX01BWEFDQ0xdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbGlua2luZm9fZG4geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBpZG5fc2Vnc2l6ZTsKICBfX3U4IGlkbl9saW5rc3RhdGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHVuaW9uIGV0aGVyYWRkcmVzcyB7Ci0gX191OCBkbmVfYWRkcls2XTsKLSBzdHJ1Y3QgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGRuZV9hZGRyW0VUSF9BTEVOXTsKKyBzdHJ1Y3QgewogIF9fdTggZG5lX2hpb3JkWzRdOwogIF9fdTggZG5lX25vZGVhZGRyWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGRuZV9yZW1vdGU7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkbl9hZGRyIHsKICBfX2xlMTYgZG5hX2ZhbWlseTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gZXRoZXJhZGRyZXNzIGRuYV9uZXRhZGRyOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERFQ05FVF9JT0NUTF9CQVNFIDB4ODkKICNkZWZpbmUgU0lPQ1NORVRBRERSIF9JT1coREVDTkVUX0lPQ1RMX0JBU0UsIDB4ZTAsIHN0cnVjdCBkbl9uYWRkcikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NHTkVUQUREUiBfSU9SKERFQ05FVF9JT0NUTF9CQVNFLCAweGUxLCBzdHJ1Y3QgZG5fbmFkZHIpCiAjZGVmaW5lIE9TSU9DU05FVEFERFIgX0lPVyhERUNORVRfSU9DVExfQkFTRSwgMHhlMCwgaW50KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT1NJT0NHTkVUQUREUiBfSU9SKERFQ05FVF9JT0NUTF9CQVNFLCAweGUxLCBpbnQpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2RxYmxrX3hmcy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9kcWJsa194ZnMuaAppbmRleCBhYzkzODAxLi4zMWIzOWQ2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2RxYmxrX3hmcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZHFibGtfeGZzLmgKQEAgLTM2LDk0ICszNiwxMjMgQEAKICNkZWZpbmUgUV9YUVVPVEFSTSBYUU1fQ01EKDYpCiAjZGVmaW5lIFFfWFFVT1RBU1lOQyBYUU1fQ01EKDcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBRX1hHRVRRU1RBVFYgWFFNX0NNRCg4KQogI2RlZmluZSBGU19EUVVPVF9WRVJTSU9OIDEKIHR5cGVkZWYgc3RydWN0IGZzX2Rpc2tfcXVvdGEgewogIF9fczggZF92ZXJzaW9uOwotIF9fczggZF9mbGFnczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zOCBkX2ZsYWdzOwogIF9fdTE2IGRfZmllbGRtYXNrOwogIF9fdTMyIGRfaWQ7CiAgX191NjQgZF9ibGtfaGFyZGxpbWl0OwotIF9fdTY0IGRfYmxrX3NvZnRsaW1pdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgZF9ibGtfc29mdGxpbWl0OwogIF9fdTY0IGRfaW5vX2hhcmRsaW1pdDsKICBfX3U2NCBkX2lub19zb2Z0bGltaXQ7CiAgX191NjQgZF9iY291bnQ7Ci0gX191NjQgZF9pY291bnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGRfaWNvdW50OwogIF9fczMyIGRfaXRpbWVyOwogIF9fczMyIGRfYnRpbWVyOwogIF9fdTE2IGRfaXdhcm5zOwotIF9fdTE2IGRfYndhcm5zOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBkX2J3YXJuczsKICBfX3MzMiBkX3BhZGRpbmcyOwogIF9fdTY0IGRfcnRiX2hhcmRsaW1pdDsKICBfX3U2NCBkX3J0Yl9zb2Z0bGltaXQ7Ci0gX191NjQgZF9ydGJjb3VudDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgZF9ydGJjb3VudDsKICBfX3MzMiBkX3J0YnRpbWVyOwogIF9fdTE2IGRfcnRid2FybnM7CiAgX19zMTYgZF9wYWRkaW5nMzsKLSBjaGFyIGRfcGFkZGluZzRbOF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNoYXIgZF9wYWRkaW5nNFs4XTsKIH0gZnNfZGlza19xdW90YV90OwogI2RlZmluZSBGU19EUV9JU09GVCAoMTw8MCkKICNkZWZpbmUgRlNfRFFfSUhBUkQgKDE8PDEpCi0jZGVmaW5lIEZTX0RRX0JTT0ZUICgxPDwyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlNfRFFfQlNPRlQgKDE8PDIpCiAjZGVmaW5lIEZTX0RRX0JIQVJEICgxPDwzKQogI2RlZmluZSBGU19EUV9SVEJTT0ZUICgxPDw0KQogI2RlZmluZSBGU19EUV9SVEJIQVJEICgxPDw1KQotI2RlZmluZSBGU19EUV9MSU1JVF9NQVNLIChGU19EUV9JU09GVCB8IEZTX0RRX0lIQVJEIHwgRlNfRFFfQlNPRlQgfCAgIEZTX0RRX0JIQVJEIHwgRlNfRFFfUlRCU09GVCB8IEZTX0RRX1JUQkhBUkQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGU19EUV9MSU1JVF9NQVNLIChGU19EUV9JU09GVCB8IEZTX0RRX0lIQVJEIHwgRlNfRFFfQlNPRlQgfCAgIEZTX0RRX0JIQVJEIHwgRlNfRFFfUlRCU09GVCB8IEZTX0RRX1JUQkhBUkQpCiAjZGVmaW5lIEZTX0RRX0JUSU1FUiAoMTw8NikKICNkZWZpbmUgRlNfRFFfSVRJTUVSICgxPDw3KQogI2RlZmluZSBGU19EUV9SVEJUSU1FUiAoMTw8OCkKLSNkZWZpbmUgRlNfRFFfVElNRVJfTUFTSyAoRlNfRFFfQlRJTUVSIHwgRlNfRFFfSVRJTUVSIHwgRlNfRFFfUlRCVElNRVIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGU19EUV9USU1FUl9NQVNLIChGU19EUV9CVElNRVIgfCBGU19EUV9JVElNRVIgfCBGU19EUV9SVEJUSU1FUikKICNkZWZpbmUgRlNfRFFfQldBUk5TICgxPDw5KQogI2RlZmluZSBGU19EUV9JV0FSTlMgKDE8PDEwKQogI2RlZmluZSBGU19EUV9SVEJXQVJOUyAoMTw8MTEpCi0jZGVmaW5lIEZTX0RRX1dBUk5TX01BU0sgKEZTX0RRX0JXQVJOUyB8IEZTX0RRX0lXQVJOUyB8IEZTX0RRX1JUQldBUk5TKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlNfRFFfV0FSTlNfTUFTSyAoRlNfRFFfQldBUk5TIHwgRlNfRFFfSVdBUk5TIHwgRlNfRFFfUlRCV0FSTlMpCiAjZGVmaW5lIEZTX0RRX0JDT1VOVCAoMTw8MTIpCiAjZGVmaW5lIEZTX0RRX0lDT1VOVCAoMTw8MTMpCiAjZGVmaW5lIEZTX0RRX1JUQkNPVU5UICgxPDwxNCkKLSNkZWZpbmUgRlNfRFFfQUNDVF9NQVNLIChGU19EUV9CQ09VTlQgfCBGU19EUV9JQ09VTlQgfCBGU19EUV9SVEJDT1VOVCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZTX0RRX0FDQ1RfTUFTSyAoRlNfRFFfQkNPVU5UIHwgRlNfRFFfSUNPVU5UIHwgRlNfRFFfUlRCQ09VTlQpCiAjZGVmaW5lIEZTX1FVT1RBX1VEUV9BQ0NUICgxPDwwKQogI2RlZmluZSBGU19RVU9UQV9VRFFfRU5GRCAoMTw8MSkKICNkZWZpbmUgRlNfUVVPVEFfR0RRX0FDQ1QgKDE8PDIpCi0jZGVmaW5lIEZTX1FVT1RBX0dEUV9FTkZEICgxPDwzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlNfUVVPVEFfR0RRX0VORkQgKDE8PDMpCiAjZGVmaW5lIEZTX1FVT1RBX1BEUV9BQ0NUICgxPDw0KQogI2RlZmluZSBGU19RVU9UQV9QRFFfRU5GRCAoMTw8NSkKICNkZWZpbmUgRlNfVVNFUl9RVU9UQSAoMTw8MCkKLSNkZWZpbmUgRlNfUFJPSl9RVU9UQSAoMTw8MSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZTX1BST0pfUVVPVEEgKDE8PDEpCiAjZGVmaW5lIEZTX0dST1VQX1FVT1RBICgxPDwyKQogI2RlZmluZSBGU19RU1RBVF9WRVJTSU9OIDEKIHR5cGVkZWYgc3RydWN0IGZzX3FmaWxlc3RhdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHFmc19pbm87CisgX191NjQgcWZzX25ibGtzOworIF9fdTMyIHFmc19uZXh0ZW50czsKK30gZnNfcWZpbGVzdGF0X3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBzdHJ1Y3QgZnNfcXVvdGFfc3RhdCB7CisgX19zOCBxc192ZXJzaW9uOworIF9fdTE2IHFzX2ZsYWdzOworIF9fczggcXNfcGFkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBmc19xZmlsZXN0YXRfdCBxc191cXVvdGE7CisgZnNfcWZpbGVzdGF0X3QgcXNfZ3F1b3RhOworIF9fdTMyIHFzX2luY29yZWRxczsKKyBfX3MzMiBxc19idGltZWxpbWl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3MzMiBxc19pdGltZWxpbWl0OworIF9fczMyIHFzX3J0YnRpbWVsaW1pdDsKKyBfX3UxNiBxc19id2FybmxpbWl0OworIF9fdTE2IHFzX2l3YXJubGltaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBmc19xdW90YV9zdGF0X3Q7CisjZGVmaW5lIEZTX1FTVEFUVl9WRVJTSU9OMSAxCitzdHJ1Y3QgZnNfcWZpbGVzdGF0diB7CiAgX191NjQgcWZzX2lubzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcWZzX25ibGtzOwogIF9fdTMyIHFmc19uZXh0ZW50czsKLX0gZnNfcWZpbGVzdGF0X3Q7Ci10eXBlZGVmIHN0cnVjdCBmc19xdW90YV9zdGF0IHsKKyBfX3UzMiBxZnNfcGFkOworfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZnNfcXVvdGFfc3RhdHYgewogIF9fczggcXNfdmVyc2lvbjsKKyBfX3U4IHFzX3BhZDE7CiAgX191MTYgcXNfZmxhZ3M7Ci0gX19zOCBxc19wYWQ7Ci0gZnNfcWZpbGVzdGF0X3QgcXNfdXF1b3RhOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBmc19xZmlsZXN0YXRfdCBxc19ncXVvdGE7CiAgX191MzIgcXNfaW5jb3JlZHFzOworIHN0cnVjdCBmc19xZmlsZXN0YXR2IHFzX3VxdW90YTsKKyBzdHJ1Y3QgZnNfcWZpbGVzdGF0diBxc19ncXVvdGE7Cisgc3RydWN0IGZzX3FmaWxlc3RhdHYgcXNfcHF1b3RhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBxc19idGltZWxpbWl0OwogIF9fczMyIHFzX2l0aW1lbGltaXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIHFzX3J0YnRpbWVsaW1pdDsKICBfX3UxNiBxc19id2FybmxpbWl0OwotIF9fdTE2IHFzX2l3YXJubGltaXQ7Ci19IGZzX3F1b3RhX3N0YXRfdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgcXNfaXdhcm5saW1pdDsKKyBfX3U2NCBxc19wYWQyWzhdOworfTsKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZWxmLWVtLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2VsZi1lbS5oCmluZGV4IDU4MDJmZWIuLjFlODZjNWMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZWxmLWVtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9lbGYtZW0uaApAQCAtMzgsMjggKzM4LDI5IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFTV9QUEM2NCAyMQogI2RlZmluZSBFTV9TUFUgMjMKKyNkZWZpbmUgRU1fQVJNIDQwCiAjZGVmaW5lIEVNX1NIIDQyCi0jZGVmaW5lIEVNX1NQQVJDVjkgNDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVNX1NQQVJDVjkgNDMKICNkZWZpbmUgRU1fSUFfNjQgNTAKICNkZWZpbmUgRU1fWDg2XzY0IDYyCiAjZGVmaW5lIEVNX1MzOTAgMjIKLSNkZWZpbmUgRU1fQ1JJUyA3NgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRU1fQ1JJUyA3NgogI2RlZmluZSBFTV9WODUwIDg3CiAjZGVmaW5lIEVNX00zMlIgODgKLSNkZWZpbmUgRU1fSDhfMzAwIDQ2CiAjZGVmaW5lIEVNX01OMTAzMDAgODkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVNX0JMQUNLRklOIDEwNgogI2RlZmluZSBFTV9USV9DNjAwMCAxNDAKKyNkZWZpbmUgRU1fQUFSQ0g2NCAxODMKICNkZWZpbmUgRU1fRlJWIDB4NTQ0MQotI2RlZmluZSBFTV9BVlIzMiAweDE4YWQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVNX0FWUjMyIDB4MThhZAogI2RlZmluZSBFTV9BTFBIQSAweDkwMjYKICNkZWZpbmUgRU1fQ1lHTlVTX1Y4NTAgMHg5MDgwCiAjZGVmaW5lIEVNX0NZR05VU19NMzJSIDB4OTA0MQotI2RlZmluZSBFTV9TMzkwX09MRCAweEEzOTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVNX1MzOTBfT0xEIDB4QTM5MAogI2RlZmluZSBFTV9DWUdOVVNfTU4xMDMwMCAweGJlZWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9mZC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9mZC5oCmluZGV4IGEwMTg3NzcuLmNmYzgyYTYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZmQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZkLmgKQEAgLTEyNywxMjcgKzEyNywxMjggQEAKICBGRF9VTlVTRURfQklULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGRF9ESVNLX0NIQU5HRURfQklULAotIEZEX0RJU0tfV1JJVEFCTEVfQklUCisgRkRfRElTS19XUklUQUJMRV9CSVQsCisgRkRfT1BFTl9TSE9VTERfRkFJTF9CSVQKIH07Ci0jZGVmaW5lIEZEU0VURFJWUFJNIF9JT1coMiwgMHg5MCwgc3RydWN0IGZsb3BweV9kcml2ZV9wYXJhbXMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGRFNFVERSVlBSTSBfSU9XKDIsIDB4OTAsIHN0cnVjdCBmbG9wcHlfZHJpdmVfcGFyYW1zKQogI2RlZmluZSBGREdFVERSVlBSTSBfSU9SKDIsIDB4MTEsIHN0cnVjdCBmbG9wcHlfZHJpdmVfcGFyYW1zKQogc3RydWN0IGZsb3BweV9kcml2ZV9zdHJ1Y3QgewogIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0jZGVmaW5lIEZEX05FRURfVFdBRERMRSAoMSA8PCBGRF9ORUVEX1RXQURETEVfQklUKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRfTkVFRF9UV0FERExFICgxIDw8IEZEX05FRURfVFdBRERMRV9CSVQpCiAjZGVmaW5lIEZEX1ZFUklGWSAoMSA8PCBGRF9WRVJJRllfQklUKQogI2RlZmluZSBGRF9ESVNLX05FV0NIQU5HRSAoMSA8PCBGRF9ESVNLX05FV0NIQU5HRV9CSVQpCiAjZGVmaW5lIEZEX0RJU0tfQ0hBTkdFRCAoMSA8PCBGRF9ESVNLX0NIQU5HRURfQklUKQotI2RlZmluZSBGRF9ESVNLX1dSSVRBQkxFICgxIDw8IEZEX0RJU0tfV1JJVEFCTEVfQklUKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRfRElTS19XUklUQUJMRSAoMSA8PCBGRF9ESVNLX1dSSVRBQkxFX0JJVCkKICB1bnNpZ25lZCBsb25nIHNwaW51cF9kYXRlOwogIHVuc2lnbmVkIGxvbmcgc2VsZWN0X2RhdGU7CiAgdW5zaWduZWQgbG9uZyBmaXJzdF9yZWFkX2RhdGU7Ci0gc2hvcnQgcHJvYmVkX2Zvcm1hdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc2hvcnQgcHJvYmVkX2Zvcm1hdDsKICBzaG9ydCB0cmFjazsKICBzaG9ydCBtYXhibG9jazsKICBzaG9ydCBtYXh0cmFjazsKLSBpbnQgZ2VuZXJhdGlvbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IGdlbmVyYXRpb247CiAgaW50IGtlZXBfZGF0YTsKICBpbnQgZmRfcmVmOwogIGludCBmZF9kZXZpY2U7Ci0gdW5zaWduZWQgbG9uZyBsYXN0X2NoZWNrZWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGxvbmcgbGFzdF9jaGVja2VkOwogIGNoYXIgKmRtYWJ1ZjsKICBpbnQgYnVmYmxvY2tzOwogfTsKLSNkZWZpbmUgRkRHRVREUlZTVEFUIF9JT1IoMiwgMHgxMiwgc3RydWN0IGZsb3BweV9kcml2ZV9zdHJ1Y3QpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGREdFVERSVlNUQVQgX0lPUigyLCAweDEyLCBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3N0cnVjdCkKICNkZWZpbmUgRkRQT0xMRFJWU1RBVCBfSU9SKDIsIDB4MTMsIHN0cnVjdCBmbG9wcHlfZHJpdmVfc3RydWN0KQogZW51bSByZXNldF9tb2RlIHsKICBGRF9SRVNFVF9JRl9ORUVERUQsCi0gRkRfUkVTRVRfSUZfUkFXQ01ELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBGRF9SRVNFVF9JRl9SQVdDTUQsCiAgRkRfUkVTRVRfQUxXQVlTCiB9OwogI2RlZmluZSBGRFJFU0VUIF9JTygyLCAweDU0KQotc3RydWN0IGZsb3BweV9mZGNfc3RhdGUgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBmbG9wcHlfZmRjX3N0YXRlIHsKICBpbnQgc3BlYzE7CiAgaW50IHNwZWMyOwogIGludCBkdHI7Ci0gdW5zaWduZWQgY2hhciB2ZXJzaW9uOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIHZlcnNpb247CiAgdW5zaWduZWQgY2hhciBkb3I7CiAgdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogIHVuc2lnbmVkIGludCByYXdjbWQ6MjsKLSB1bnNpZ25lZCBpbnQgcmVzZXQ6MTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgaW50IHJlc2V0OjE7CiAgdW5zaWduZWQgaW50IG5lZWRfY29uZmlndXJlOjE7CiAgdW5zaWduZWQgaW50IHBlcnBfbW9kZToyOwogIHVuc2lnbmVkIGludCBoYXNfZmlmbzoxOwotIHVuc2lnbmVkIGludCBkcml2ZXJfdmVyc2lvbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgaW50IGRyaXZlcl92ZXJzaW9uOwogI2RlZmluZSBGRF9EUklWRVJfVkVSU0lPTiAweDEwMAogIHVuc2lnbmVkIGNoYXIgdHJhY2tbNF07CiB9OwotI2RlZmluZSBGREdFVEZEQ1NUQVQgX0lPUigyLCAweDE1LCBzdHJ1Y3QgZmxvcHB5X2ZkY19zdGF0ZSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZER0VURkRDU1RBVCBfSU9SKDIsIDB4MTUsIHN0cnVjdCBmbG9wcHlfZmRjX3N0YXRlKQogc3RydWN0IGZsb3BweV93cml0ZV9lcnJvcnMgewogIHVuc2lnbmVkIGludCB3cml0ZV9lcnJvcnM7CiAgdW5zaWduZWQgbG9uZyBmaXJzdF9lcnJvcl9zZWN0b3I7Ci0gaW50IGZpcnN0X2Vycm9yX2dlbmVyYXRpb247CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGludCBmaXJzdF9lcnJvcl9nZW5lcmF0aW9uOwogIHVuc2lnbmVkIGxvbmcgbGFzdF9lcnJvcl9zZWN0b3I7CiAgaW50IGxhc3RfZXJyb3JfZ2VuZXJhdGlvbjsKICB1bnNpZ25lZCBpbnQgYmFkbmVzczsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgRkRXRVJST1JDTFIgX0lPKDIsIDB4NTYpCiAjZGVmaW5lIEZEV0VSUk9SR0VUIF9JT1IoMiwgMHgxNywgc3RydWN0IGZsb3BweV93cml0ZV9lcnJvcnMpCiAjZGVmaW5lIEZESEFWRUJBVENIRURSQVdDTUQKLXN0cnVjdCBmbG9wcHlfcmF3X2NtZCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGZsb3BweV9yYXdfY21kIHsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAjZGVmaW5lIEZEX1JBV19SRUFEIDEKICNkZWZpbmUgRkRfUkFXX1dSSVRFIDIKLSNkZWZpbmUgRkRfUkFXX05PX01PVE9SIDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZEX1JBV19OT19NT1RPUiA0CiAjZGVmaW5lIEZEX1JBV19ESVNLX0NIQU5HRSA0CiAjZGVmaW5lIEZEX1JBV19JTlRSIDgKICNkZWZpbmUgRkRfUkFXX1NQSU4gMHgxMAotI2RlZmluZSBGRF9SQVdfTk9fTU9UT1JfQUZURVIgMHgyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRfUkFXX05PX01PVE9SX0FGVEVSIDB4MjAKICNkZWZpbmUgRkRfUkFXX05FRURfRElTSyAweDQwCiAjZGVmaW5lIEZEX1JBV19ORUVEX1NFRUsgMHg4MAogI2RlZmluZSBGRF9SQVdfTU9SRSAweDEwMAotI2RlZmluZSBGRF9SQVdfU1RPUF9JRl9GQUlMVVJFIDB4MjAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGRF9SQVdfU1RPUF9JRl9GQUlMVVJFIDB4MjAwCiAjZGVmaW5lIEZEX1JBV19TVE9QX0lGX1NVQ0NFU1MgMHg0MDAKICNkZWZpbmUgRkRfUkFXX1NPRlRGQUlMVVJFIDB4ODAwCiAjZGVmaW5lIEZEX1JBV19GQUlMVVJFIDB4MTAwMDAKLSNkZWZpbmUgRkRfUkFXX0hBUkRGQUlMVVJFIDB4MjAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZEX1JBV19IQVJERkFJTFVSRSAweDIwMDAwCiAgdm9pZCBfX3VzZXIgKmRhdGE7CiAgY2hhciAqa2VybmVsX2RhdGE7CiAgc3RydWN0IGZsb3BweV9yYXdfY21kICpuZXh0OwotIGxvbmcgbGVuZ3RoOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBsb25nIGxlbmd0aDsKICBsb25nIHBoeXNfbGVuZ3RoOwogIGludCBidWZmZXJfbGVuZ3RoOwogIHVuc2lnbmVkIGNoYXIgcmF0ZTsKLSB1bnNpZ25lZCBjaGFyIGNtZF9jb3VudDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciBjbWRfY291bnQ7CiAgdW5zaWduZWQgY2hhciBjbWRbMTZdOwogIHVuc2lnbmVkIGNoYXIgcmVwbHlfY291bnQ7CiAgdW5zaWduZWQgY2hhciByZXBseVsxNl07Ci0gaW50IHRyYWNrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgdHJhY2s7CiAgaW50IHJlc3VsdGNvZGU7CiAgaW50IHJlc2VydmVkMTsKICBpbnQgcmVzZXJ2ZWQyOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBGRFJBV0NNRCBfSU8oMiwgMHg1OCkKICNkZWZpbmUgRkRUV0FERExFIF9JTygyLCAweDU5KQogI2RlZmluZSBGREVKRUNUIF9JTygyLCAweDVhKQotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZpYl9ydWxlcy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9maWJfcnVsZXMuaAppbmRleCA1MDA1MDFlLi5hZmU2YmMwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZpYl9ydWxlcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZmliX3J1bGVzLmgKQEAgLTYyLDggKzYyLDggQEAKICBGUkFfRkxPVywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlJBX1VOVVNFRDYsCi0gRlJBX1VOVVNFRDcsCi0gRlJBX1VOVVNFRDgsCisgRlJBX1NVUFBSRVNTX0lGR1JPVVAsCisgRlJBX1NVUFBSRVNTX1BSRUZJWExFTiwKICBGUkFfVEFCTEUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZSQV9GV01BU0ssCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZpZW1hcC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9maWVtYXAuaAppbmRleCA1OGVkOTQ3Li5lNGI0NmMyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZpZW1hcC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZmllbWFwLmgKQEAgLTQ0LDIwICs0NCwyMSBAQAogI2RlZmluZSBGSUVNQVBfTUFYX09GRlNFVCAofjBVTEwpCiAjZGVmaW5lIEZJRU1BUF9GTEFHX1NZTkMgMHgwMDAwMDAwMQogI2RlZmluZSBGSUVNQVBfRkxBR19YQVRUUiAweDAwMDAwMDAyCi0jZGVmaW5lIEZJRU1BUF9GTEFHU19DT01QQVQgKEZJRU1BUF9GTEFHX1NZTkMgfCBGSUVNQVBfRkxBR19YQVRUUikKKyNkZWZpbmUgRklFTUFQX0ZMQUdfQ0FDSEUgMHgwMDAwMDAwNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRklFTUFQX0ZMQUdTX0NPTVBBVCAoRklFTUFQX0ZMQUdfU1lOQyB8IEZJRU1BUF9GTEFHX1hBVFRSKQogI2RlZmluZSBGSUVNQVBfRVhURU5UX0xBU1QgMHgwMDAwMDAwMQogI2RlZmluZSBGSUVNQVBfRVhURU5UX1VOS05PV04gMHgwMDAwMDAwMgogI2RlZmluZSBGSUVNQVBfRVhURU5UX0RFTEFMTE9DIDB4MDAwMDAwMDQKLSNkZWZpbmUgRklFTUFQX0VYVEVOVF9FTkNPREVEIDB4MDAwMDAwMDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfRU5DT0RFRCAweDAwMDAwMDA4CiAjZGVmaW5lIEZJRU1BUF9FWFRFTlRfREFUQV9FTkNSWVBURUQgMHgwMDAwMDA4MAogI2RlZmluZSBGSUVNQVBfRVhURU5UX05PVF9BTElHTkVEIDB4MDAwMDAxMDAKICNkZWZpbmUgRklFTUFQX0VYVEVOVF9EQVRBX0lOTElORSAweDAwMDAwMjAwCi0jZGVmaW5lIEZJRU1BUF9FWFRFTlRfREFUQV9UQUlMIDB4MDAwMDA0MDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZJRU1BUF9FWFRFTlRfREFUQV9UQUlMIDB4MDAwMDA0MDAKICNkZWZpbmUgRklFTUFQX0VYVEVOVF9VTldSSVRURU4gMHgwMDAwMDgwMAogI2RlZmluZSBGSUVNQVBfRVhURU5UX01FUkdFRCAweDAwMDAxMDAwCiAjZGVmaW5lIEZJRU1BUF9FWFRFTlRfU0hBUkVEIDB4MDAwMDIwMDAKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9mcy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9mcy5oCmluZGV4IGNjMDUyMzguLmQ2ZmM3MzAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZnMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ZzLmgKQEAgLTQ5LDEwICs0OSwxMCBAQAogIHVuc2lnbmVkIGxvbmcgbWF4X2ZpbGVzOwogfTsKIHN0cnVjdCBpbm9kZXNfc3RhdF90IHsKLSBpbnQgbnJfaW5vZGVzOworIGxvbmcgbnJfaW5vZGVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBpbnQgbnJfdW51c2VkOwotIGludCBkdW1teVs1XTsKKyBsb25nIG5yX3VudXNlZDsKKyBsb25nIGR1bW15WzVdOwogfTsKICNkZWZpbmUgTlJfRklMRSA4MTkyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZW5fc3RhdHMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2VuX3N0YXRzLmgKaW5kZXggMDcxMThiZi4uZTFjYTczZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZW5fc3RhdHMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2dlbl9zdGF0cy5oCkBAIC0yNywzNyArMjcsNDMgQEAKICBUQ0FfU1RBVFNfUVVFVUUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9TVEFUU19BUFAsCisgVENBX1NUQVRTX1JBVEVfRVNUNjQsCiAgX19UQ0FfU1RBVFNfTUFYLAogfTsKLSNkZWZpbmUgVENBX1NUQVRTX01BWCAoX19UQ0FfU1RBVFNfTUFYIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDQV9TVEFUU19NQVggKF9fVENBX1NUQVRTX01BWCAtIDEpCiBzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYyB7CiAgX191NjQgYnl0ZXM7CiAgX191MzIgcGFja2V0czsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljX3BhY2tlZCB7CiAgX191NjQgYnl0ZXM7CiAgX191MzIgcGFja2V0czsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogc3RydWN0IGduZXRfc3RhdHNfcmF0ZV9lc3QgewogIF9fdTMyIGJwczsKICBfX3UzMiBwcHM7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdDY0IHsKKyBfX3U2NCBicHM7CisgX191NjQgcHBzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZSB7CiAgX191MzIgcWxlbjsKICBfX3UzMiBiYWNrbG9nOwotIF9fdTMyIGRyb3BzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBkcm9wczsKICBfX3UzMiByZXF1ZXVlczsKICBfX3UzMiBvdmVybGltaXRzOwogfTsKLXN0cnVjdCBnbmV0X2VzdGltYXRvciB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGduZXRfZXN0aW1hdG9yIHsKICBzaWduZWQgY2hhciBpbnRlcnZhbDsKICB1bnNpZ25lZCBjaGFyIGV3bWFfbG9nOwogfTsKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZW5ldGxpbmsuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2VuZXRsaW5rLmgKaW5kZXggYzU0OTBmOC4uYzA2OWVmZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZW5ldGxpbmsuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2dlbmV0bGluay5oCkBAIC0zOSw1NSArMzksNTcgQEAKICNkZWZpbmUgR0VOTF9DTURfQ0FQX0hBU1BPTCAweDA4CiAjZGVmaW5lIEdFTkxfSURfR0VORVJBVEUgMAogI2RlZmluZSBHRU5MX0lEX0NUUkwgTkxNU0dfTUlOX1RZUEUKLWVudW0geworI2RlZmluZSBHRU5MX0lEX1ZGU19EUVVPVCAoTkxNU0dfTUlOX1RZUEUgKyAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgR0VOTF9JRF9QTUNSQUlEIChOTE1TR19NSU5fVFlQRSArIDIpCitlbnVtIHsKICBDVFJMX0NNRF9VTlNQRUMsCiAgQ1RSTF9DTURfTkVXRkFNSUxZLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVFJMX0NNRF9ERUxGQU1JTFksCiAgQ1RSTF9DTURfR0VURkFNSUxZLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVFJMX0NNRF9ORVdPUFMsCiAgQ1RSTF9DTURfREVMT1BTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVFJMX0NNRF9HRVRPUFMsCiAgQ1RSTF9DTURfTkVXTUNBU1RfR1JQLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVFJMX0NNRF9ERUxNQ0FTVF9HUlAsCiAgQ1RSTF9DTURfR0VUTUNBU1RfR1JQLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUUkxfQ01EX01BWCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVFJMX0NNRF9NQVggKF9fQ1RSTF9DTURfTUFYIC0gMSkKIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVFJMX0FUVFJfVU5TUEVDLAogIENUUkxfQVRUUl9GQU1JTFlfSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUUkxfQVRUUl9GQU1JTFlfTkFNRSwKICBDVFJMX0FUVFJfVkVSU0lPTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RSTF9BVFRSX0hEUlNJWkUsCiAgQ1RSTF9BVFRSX01BWEFUVFIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUUkxfQVRUUl9PUFMsCiAgQ1RSTF9BVFRSX01DQVNUX0dST1VQUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVFJMX0FUVFJfTUFYLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUUkxfQVRUUl9NQVggKF9fQ1RSTF9BVFRSX01BWCAtIDEpCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RSTF9BVFRSX09QX1VOU1BFQywKICBDVFJMX0FUVFJfT1BfSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUUkxfQVRUUl9PUF9GTEFHUywKICBfX0NUUkxfQVRUUl9PUF9NQVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQ1RSTF9BVFRSX09QX01BWCAoX19DVFJMX0FUVFJfT1BfTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBDVFJMX0FUVFJfTUNBU1RfR1JQX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RSTF9BVFRSX01DQVNUX0dSUF9OQU1FLAogIENUUkxfQVRUUl9NQ0FTVF9HUlBfSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RSTF9BVFRSX01DQVNUX0dSUF9NQVgsCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RSTF9BVFRSX01DQVNUX0dSUF9NQVggKF9fQ1RSTF9BVFRSX01DQVNUX0dSUF9NQVggLSAxKQogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZW53cWUvZ2Vud3FlX2NhcmQuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2Vud3FlL2dlbndxZV9jYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzMWNmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2Vud3FlL2dlbndxZV9jYXJkLmgKQEAgLTAsMCArMSwzMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19HRU5XUUVfQ0FSRF9IX18KKyNkZWZpbmUgX19HRU5XUUVfQ0FSRF9IX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHRU5XUUVfREVWTkFNRSAiZ2Vud3FlIgorI2RlZmluZSBHRU5XUUVfVFlQRV9BTFRFUkFfMjMwIDB4MDAKKyNkZWZpbmUgR0VOV1FFX1RZUEVfQUxURVJBXzUzMCAweDAxCisjZGVmaW5lIEdFTldRRV9UWVBFX0FMVEVSQV9BNCAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHRU5XUUVfVFlQRV9BTFRFUkFfQTcgMHgwMworI2RlZmluZSBHRU5XUUVfVUlEX09GRlModWlkKSAoKHVpZCkgPDwgMjQpCisjZGVmaW5lIEdFTldRRV9TTFVfT0ZGUyBHRU5XUUVfVUlEX09GRlMoMCkKKyNkZWZpbmUgR0VOV1FFX0hTVV9PRkZTIEdFTldRRV9VSURfT0ZGUygxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgR0VOV1FFX0FQUF9PRkZTIEdFTldRRV9VSURfT0ZGUygyKQorI2RlZmluZSBHRU5XUUVfTUFYX1VOSVRTIDMKKyNkZWZpbmUgSU9fRVhURU5ERURfRVJST1JfUE9JTlRFUiAweDAwMDAwMDQ4CisjZGVmaW5lIElPX0VSUk9SX0lOSkVDVF9TRUxFQ1RPUiAweDAwMDAwMDYwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19FWFRFTkRFRF9ESUFHX1NFTEVDVE9SIDB4MDAwMDAwNzAKKyNkZWZpbmUgSU9fRVhURU5ERURfRElBR19SRUFEX01CWCAweDAwMDAwMDc4CisjZGVmaW5lIElPX0VYVEVOREVEX0RJQUdfTUFQKHJpbmcpICgweDAwMDAwNTAwIHwgKChyaW5nKSA8PCAzKSkKKyNkZWZpbmUgR0VOV1FFX0VYVEVOREVEX0RJQUdfU0VMRUNUT1IocmluZywgdHJhY2UpICgoKHJpbmcpIDw8IDgpIHwgKHRyYWNlKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX1NMVV9VTklUQ0ZHIDB4MDAwMDAwMDAKKyNkZWZpbmUgSU9fU0xVX1VOSVRDRkdfVFlQRV9NQVNLIDB4MDAwMDAwMDAwZmYwMDAwMAorI2RlZmluZSBJT19TTFVfRklSIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU9fU0xVX0ZJUl9DTFIgMHgwMDAwMDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xVX0ZFQyAweDAwMDAwMDE4CisjZGVmaW5lIElPX1NMVV9FUlJfQUNUX01BU0sgMHgwMDAwMDAyMAorI2RlZmluZSBJT19TTFVfRVJSX0FUVE5fTUFTSyAweDAwMDAwMDI4CisjZGVmaW5lIElPX1NMVV9GSVJYMV9BQ1RfTUFTSyAweDAwMDAwMDMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19TTFVfRklSWDBfQUNUX01BU0sgMHgwMDAwMDAzOAorI2RlZmluZSBJT19TTFVfU0VDX0xFTV9ERUJVR19PVlIgMHgwMDAwMDA0MAorI2RlZmluZSBJT19TTFVfRVhURU5ERURfRVJSX1BUUiAweDAwMDAwMDQ4CisjZGVmaW5lIElPX1NMVV9DT01NT05fQ09ORklHIDB4MDAwMDAwNjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX1NMVV9GTEFTSF9GSVIgMHgwMDAwMDEwOAorI2RlZmluZSBJT19TTFVfU0xDX0ZJUiAweDAwMDAwMTEwCisjZGVmaW5lIElPX1NMVV9SSVVfVFJBUCAweDAwMDAwMjgwCisjZGVmaW5lIElPX1NMVV9GTEFTSF9GRUMgMHgwMDAwMDMwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xVX1NMQ19GRUMgMHgwMDAwMDMxMAorI2RlZmluZSBJT19TTENfUVVFVUVfU0VHTUVOVCAweDAwMDEwMDAwCisjZGVmaW5lIElPX1NMQ19WRl9RVUVVRV9TRUdNRU5UIDB4MDAwNTAwMDAKKyNkZWZpbmUgSU9fU0xDX1FVRVVFX09GRlNFVCAweDAwMDEwMDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19TTENfVkZfUVVFVUVfT0ZGU0VUIDB4MDAwNTAwMDgKKyNkZWZpbmUgSU9fU0xDX1FVRVVFX0NPTkZJRyAweDAwMDEwMDEwCisjZGVmaW5lIElPX1NMQ19WRl9RVUVVRV9DT05GSUcgMHgwMDA1MDAxMAorI2RlZmluZSBJT19TTENfQVBQSk9CX1RJTUVPVVQgMHgwMDAxMDAxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xDX1ZGX0FQUEpPQl9USU1FT1VUIDB4MDAwNTAwMTgKKyNkZWZpbmUgVElNRU9VVF8yNTBNUyAweDAwMDAwMDBmCisjZGVmaW5lIEhFQVJUQkVBVF9ESVNBQkxFIDB4MDAwMGZmMDAKKyNkZWZpbmUgSU9fU0xDX1FVRVVFX0lOSVRTUU4gMHgwMDAxMDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xDX1ZGX1FVRVVFX0lOSVRTUU4gMHgwMDA1MDAyMAorI2RlZmluZSBJT19TTENfUVVFVUVfV1JBUCAweDAwMDEwMDI4CisjZGVmaW5lIElPX1NMQ19WRl9RVUVVRV9XUkFQIDB4MDAwNTAwMjgKKyNkZWZpbmUgSU9fU0xDX1FVRVVFX1NUQVRVUyAweDAwMDEwMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19TTENfVkZfUVVFVUVfU1RBVFVTIDB4MDAwNTAxMDAKKyNkZWZpbmUgSU9fU0xDX1FVRVVFX1dUSU1FIDB4MDAwMTAwMzAKKyNkZWZpbmUgSU9fU0xDX1ZGX1FVRVVFX1dUSU1FIDB4MDAwNTAwMzAKKyNkZWZpbmUgSU9fU0xDX1FVRVVFX0VSUkNOVFMgMHgwMDAxMDAzOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xDX1ZGX1FVRVVFX0VSUkNOVFMgMHgwMDA1MDAzOAorI2RlZmluZSBJT19TTENfUVVFVUVfTFJXIDB4MDAwMTAwNDAKKyNkZWZpbmUgSU9fU0xDX1ZGX1FVRVVFX0xSVyAweDAwMDUwMDQwCisjZGVmaW5lIElPX1NMQ19GUkVFX1JVTk5JTkdfVElNRVIgMHgwMDAxMDEwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fU0xDX1ZGX0ZSRUVfUlVOTklOR19USU1FUiAweDAwMDUwMTA4CisjZGVmaW5lIElPX1BGX1NMQ19WSVJUVUFMX1JFR0lPTiAweDAwMDUwMDAwCisjZGVmaW5lIElPX1BGX1NMQ19WSVJUVUFMX1dJTkRPVyAweDAwMDYwMDAwCisjZGVmaW5lIElPX1BGX1NMQ19KT0JQRU5EKG4pICgweDAwMDYxMDAwICsgOCoobikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19TTENfSk9CUEVORChuKSBJT19QRl9TTENfSk9CUEVORChuKQorI2RlZmluZSBJT19TTFVfU0xDX1BBUlNFX1RSQVAobikgKDB4MDAwMTEwMDAgKyA4KihuKSkKKyNkZWZpbmUgSU9fU0xVX1NMQ19ESVNQX1RSQVAobikgKDB4MDAwMTEyMDAgKyA4KihuKSkKKyNkZWZpbmUgSU9fU0xDX0NGR1JFR19HRklSIDB4MDAwMjAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEdGSVJfRVJSX1RSSUdHRVIgMHgwMDAwZmZmZgorI2RlZmluZSBJT19TTENfQ0ZHUkVHX1NPRlRSRVNFVCAweDAwMDIwMDE4CisjZGVmaW5lIElPX1NMQ19NSVNDX0RFQlVHIDB4MDAwMjAwNjAKKyNkZWZpbmUgSU9fU0xDX01JU0NfREVCVUdfQ0xSIDB4MDAwMjAwNjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX1NMQ19NSVNDX0RFQlVHX1NFVCAweDAwMDIwMDcwCisjZGVmaW5lIElPX1NMVV9URU1QRVJBVFVSRV9TRU5TT1IgMHgwMDAzMDAwMAorI2RlZmluZSBJT19TTFVfVEVNUEVSQVRVUkVfQ09ORklHIDB4MDAwMzAwMDgKKyNkZWZpbmUgSU9fU0xVX1ZPTFRBR0VfQ09OVFJPTCAweDAwMDMwMDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19TTFVfVk9MVEFHRV9OT01JTkFMIDB4MDAwMDAwMDAKKyNkZWZpbmUgSU9fU0xVX1ZPTFRBR0VfRE9XTjUgMHgwMDAwMDAwNgorI2RlZmluZSBJT19TTFVfVk9MVEFHRV9VUDUgMHgwMDAwMDAwNworI2RlZmluZSBJT19TTFVfTEVEQ09OVFJPTCAweDAwMDMwMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19TTFVfRkxBU0hfRElSRUNUQUNDRVNTIDB4MDAwNDAwMTAKKyNkZWZpbmUgSU9fU0xVX0ZMQVNIX0RJUkVDVEFDQ0VTUzIgMHgwMDA0MDAyMAorI2RlZmluZSBJT19TTFVfRkxBU0hfQ01ESU5URiAweDAwMDQwMDMwCisjZGVmaW5lIElPX1NMVV9CSVRTVFJFQU0gMHgwMDA0MDA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fSFNVX0VSUl9CRUhBVklPUiAweDAxMDAxMDEwCisjZGVmaW5lIElPX1NMQzJfU1FCX1RSQVAgMHgwMDA2MjAwMAorI2RlZmluZSBJT19TTEMyX1FVRVVFX01BTkFHRVJfVFJBUCAweDAwMDYyMDA4CisjZGVmaW5lIElPX1NMQzJfRkxTX01BU1RFUl9UUkFQIDB4MDAwNjIwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX0hTVV9VTklUQ0ZHIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU9fSFNVX0ZJUiAweDAxMDAwMDA4CisjZGVmaW5lIElPX0hTVV9GSVJfQ0xSIDB4MDEwMDAwMTAKKyNkZWZpbmUgSU9fSFNVX0ZFQyAweDAxMDAwMDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19IU1VfRVJSX0FDVF9NQVNLIDB4MDEwMDAwMjAKKyNkZWZpbmUgSU9fSFNVX0VSUl9BVFROX01BU0sgMHgwMTAwMDAyOAorI2RlZmluZSBJT19IU1VfRklSWDFfQUNUX01BU0sgMHgwMTAwMDAzMAorI2RlZmluZSBJT19IU1VfRklSWDBfQUNUX01BU0sgMHgwMTAwMDAzOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fSFNVX1NFQ19MRU1fREVCVUdfT1ZSIDB4MDEwMDAwNDAKKyNkZWZpbmUgSU9fSFNVX0VYVEVOREVEX0VSUl9QVFIgMHgwMTAwMDA0OAorI2RlZmluZSBJT19IU1VfQ09NTU9OX0NPTkZJRyAweDAxMDAwMDYwCisjZGVmaW5lIElPX0FQUF9VTklUQ0ZHIDB4MDIwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX0FQUF9GSVIgMHgwMjAwMDAwOAorI2RlZmluZSBJT19BUFBfRklSX0NMUiAweDAyMDAwMDEwCisjZGVmaW5lIElPX0FQUF9GRUMgMHgwMjAwMDAxOAorI2RlZmluZSBJT19BUFBfRVJSX0FDVF9NQVNLIDB4MDIwMDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX0FQUF9FUlJfQVRUTl9NQVNLIDB4MDIwMDAwMjgKKyNkZWZpbmUgSU9fQVBQX0ZJUlgxX0FDVF9NQVNLIDB4MDIwMDAwMzAKKyNkZWZpbmUgSU9fQVBQX0ZJUlgwX0FDVF9NQVNLIDB4MDIwMDAwMzgKKyNkZWZpbmUgSU9fQVBQX1NFQ19MRU1fREVCVUdfT1ZSIDB4MDIwMDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX0FQUF9FWFRFTkRFRF9FUlJfUFRSIDB4MDIwMDAwNDgKKyNkZWZpbmUgSU9fQVBQX0NPTU1PTl9DT05GSUcgMHgwMjAwMDA2MAorI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzAxIDB4MDIwMTAwMDAKKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18wMiAweDAyMDEwMDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzAzIDB4MDIwMTAwMTAKKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18wNCAweDAyMDEwMDE4CisjZGVmaW5lIElPX0FQUF9ERUJVR19SRUdfMDUgMHgwMjAxMDAyMAorI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzA2IDB4MDIwMTAwMjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX0FQUF9ERUJVR19SRUdfMDcgMHgwMjAxMDAzMAorI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzA4IDB4MDIwMTAwMzgKKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18wOSAweDAyMDEwMDQwCisjZGVmaW5lIElPX0FQUF9ERUJVR19SRUdfMTAgMHgwMjAxMDA0OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18xMSAweDAyMDEwMDUwCisjZGVmaW5lIElPX0FQUF9ERUJVR19SRUdfMTIgMHgwMjAxMDA1OAorI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzEzIDB4MDIwMTAwNjAKKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18xNCAweDAyMDEwMDY4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzE1IDB4MDIwMTAwNzAKKyNkZWZpbmUgSU9fQVBQX0RFQlVHX1JFR18xNiAweDAyMDEwMDc4CisjZGVmaW5lIElPX0FQUF9ERUJVR19SRUdfMTcgMHgwMjAxMDA4MAorI2RlZmluZSBJT19BUFBfREVCVUdfUkVHXzE4IDB4MDIwMTAwODgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgZ2Vud3FlX3JlZ19pbyB7CisgX191NjQgbnVtOworIF9fdTY0IHZhbDY0OworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElPX0lMTEVHQUxfVkFMVUUgMHhmZmZmZmZmZmZmZmZmZmZmdWxsCisjZGVmaW5lIEREQ0JfQUNGVU5DX1NMVSAweDAwCisjZGVmaW5lIEREQ0JfQUNGVU5DX0FQUCAweDAxCisjZGVmaW5lIEREQ0JfUkVUQ19JRExFIDB4MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRERDQl9SRVRDX1BFTkRJTkcgMHgwMTAxCisjZGVmaW5lIEREQ0JfUkVUQ19DT01QTEVURSAweDAxMDIKKyNkZWZpbmUgRERDQl9SRVRDX0ZBVUxUIDB4MDEwNAorI2RlZmluZSBERENCX1JFVENfRVJST1IgMHgwMTA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBERENCX1JFVENfRk9SQ0VEX0VSUk9SIDB4MDFmZgorI2RlZmluZSBERENCX1JFVENfVU5FWEVDIDB4MDExMAorI2RlZmluZSBERENCX1JFVENfVEVSTSAweDAxMjAKKyNkZWZpbmUgRERDQl9SRVRDX1JFUzAgMHgwMTQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBERENCX1JFVENfUkVTMSAweDAxODAKKyNkZWZpbmUgRERDQl9PUFRfRUNIT19GT1JDRV9OTyAweDAwMDAKKyNkZWZpbmUgRERDQl9PUFRfRUNIT19GT1JDRV8xMDIgMHgwMDAxCisjZGVmaW5lIEREQ0JfT1BUX0VDSE9fRk9SQ0VfMTA0IDB4MDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRERDQl9PUFRfRUNIT19GT1JDRV8xMDggMHgwMDAzCisjZGVmaW5lIEREQ0JfT1BUX0VDSE9fRk9SQ0VfMTEwIDB4MDAwNAorI2RlZmluZSBERENCX09QVF9FQ0hPX0ZPUkNFXzEyMCAweDAwMDUKKyNkZWZpbmUgRERDQl9PUFRfRUNIT19GT1JDRV8xNDAgMHgwMDA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBERENCX09QVF9FQ0hPX0ZPUkNFXzE4MCAweDAwMDcKKyNkZWZpbmUgRERDQl9PUFRfRUNIT19DT1BZX05PTkUgKDAgPDwgNSkKKyNkZWZpbmUgRERDQl9PUFRfRUNIT19DT1BZX0FMTCAoMSA8PCA1KQorI2RlZmluZSBTTENNRF9FQ0hPX1NZTkMgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0xDTURfTU9WRV9GTEFTSCAweDA2CisjZGVmaW5lIFNMQ01EX01PVkVfRkxBU0hfRkxBR1NfTU9ERSAweDAzCisjZGVmaW5lIFNMQ01EX01PVkVfRkxBU0hfRkxBR1NfRExPQUQgMAorI2RlZmluZSBTTENNRF9NT1ZFX0ZMQVNIX0ZMQUdTX0VNVUwgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0xDTURfTU9WRV9GTEFTSF9GTEFHU19VUExPQUQgMgorI2RlZmluZSBTTENNRF9NT1ZFX0ZMQVNIX0ZMQUdTX1ZFUklGWSAzCisjZGVmaW5lIFNMQ01EX01PVkVfRkxBU0hfRkxBR19OT1RBUCAoMSA8PCAyKQorI2RlZmluZSBTTENNRF9NT1ZFX0ZMQVNIX0ZMQUdfUE9MTCAoMSA8PCAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0xDTURfTU9WRV9GTEFTSF9GTEFHX1BBUlRJVElPTiAoMSA8PCA0KQorI2RlZmluZSBTTENNRF9NT1ZFX0ZMQVNIX0ZMQUdfRVJBU0UgKDEgPDwgNSkKK2VudW0gZ2Vud3FlX2NhcmRfc3RhdGUgeworIEdFTldRRV9DQVJEX1VOVVNFRCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEdFTldRRV9DQVJEX1VTRUQgPSAxLAorIEdFTldRRV9DQVJEX0ZBVEFMX0VSUk9SID0gMiwKKyBHRU5XUUVfQ0FSRF9TVEFURV9NQVgsCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBnZW53cWVfYml0c3RyZWFtIHsKKyBfX3U2NCBkYXRhX2FkZHI7CisgX191MzIgc2l6ZTsKKyBfX3UzMiBjcmM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHRhcmdldF9hZGRyOworIF9fdTMyIHBhcnRpdGlvbjsKKyBfX3UzMiB1aWQ7CisgX191NjQgc2x1X2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBhcHBfaWQ7CisgX191MTYgcmV0YzsKKyBfX3UxNiBhdHRuOworIF9fdTMyIHByb2dyZXNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIEREQ0JfTEVOR1RIIDI1NgorI2RlZmluZSBERENCX0FTSVZfTEVOR1RIIDEwNAorI2RlZmluZSBERENCX0FTSVZfTEVOR1RIX0FUUyA5NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRERDQl9BU1ZfTEVOR1RIIDY0CisjZGVmaW5lIEREQ0JfRklYVVBTIDEyCitzdHJ1Y3QgZ2Vud3FlX2RlYnVnX2RhdGEgeworIGNoYXIgZHJpdmVyX3ZlcnNpb25bNjRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzbHVfdW5pdGNmZzsKKyBfX3U2NCBhcHBfdW5pdGNmZzsKKyBfX3U4IGRkY2JfYmVmb3JlW0REQ0JfTEVOR1RIXTsKKyBfX3U4IGRkY2JfcHJldltERENCX0xFTkdUSF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZGRjYl9maW5pc2hlZFtERENCX0xFTkdUSF07Cit9OworI2RlZmluZSBBVFNfVFlQRV9EQVRBIDB4MHVsbAorI2RlZmluZSBBVFNfVFlQRV9GTEFUX1JEIDB4NHVsbAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRTX1RZUEVfRkxBVF9SRFdSIDB4NXVsbAorI2RlZmluZSBBVFNfVFlQRV9TR0xfUkQgMHg2dWxsCisjZGVmaW5lIEFUU19UWVBFX1NHTF9SRFdSIDB4N3VsbAorI2RlZmluZSBBVFNfU0VUX0ZMQUdTKF9zdHJ1Y3QsIF9maWVsZCwgX2ZsYWdzKSAgICgoKF9mbGFncykgJiAweGYpIDw8ICg0NCAtICg0ICogKG9mZnNldG9mKF9zdHJ1Y3QsIF9maWVsZCkgLyA4KSkpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRTX0dFVF9GTEFHUyhfYXRzLCBfYnl0ZV9vZmZzKSAgICgoKF9hdHMpID4+ICg0NCAtICg0ICogKChfYnl0ZV9vZmZzKSAvIDgpKSkpICYgMHhmKQorc3RydWN0IGdlbndxZV9kZGNiX2NtZCB7CisgX191NjQgbmV4dF9hZGRyOworIF9fdTY0IGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGFjZnVuYzsKKyBfX3U4IGNtZDsKKyBfX3U4IGFzaXZfbGVuZ3RoOworIF9fdTggYXN2X2xlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgY21kb3B0czsKKyBfX3UxNiByZXRjOworIF9fdTE2IGF0dG47CisgX191MTYgdmNyYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcHJvZ3Jlc3M7CisgX191NjQgZGVxdWVfdHM7CisgX191NjQgY21wbHRfdHM7CisgX191NjQgZGlzcF90czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgZGRhdGFfYWRkcjsKKyBfX3U4IGFzdltERENCX0FTVl9MRU5HVEhdOworIHVuaW9uIHsKKyBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBhdHM7CisgX191OCBhc2l2W0REQ0JfQVNJVl9MRU5HVEhfQVRTXTsKKyB9OworIF9fdTggX19hc2l2W0REQ0JfQVNJVl9MRU5HVEhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9OworfTsKKyNkZWZpbmUgR0VOV1FFX0lPQ19DT0RFIDB4YTUKKyNkZWZpbmUgR0VOV1FFX1JFQURfUkVHNjQgX0lPUihHRU5XUUVfSU9DX0NPREUsIDMwLCBzdHJ1Y3QgZ2Vud3FlX3JlZ19pbykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEdFTldRRV9XUklURV9SRUc2NCBfSU9XKEdFTldRRV9JT0NfQ09ERSwgMzEsIHN0cnVjdCBnZW53cWVfcmVnX2lvKQorI2RlZmluZSBHRU5XUUVfUkVBRF9SRUczMiBfSU9SKEdFTldRRV9JT0NfQ09ERSwgMzIsIHN0cnVjdCBnZW53cWVfcmVnX2lvKQorI2RlZmluZSBHRU5XUUVfV1JJVEVfUkVHMzIgX0lPVyhHRU5XUUVfSU9DX0NPREUsIDMzLCBzdHJ1Y3QgZ2Vud3FlX3JlZ19pbykKKyNkZWZpbmUgR0VOV1FFX1JFQURfUkVHMTYgX0lPUihHRU5XUUVfSU9DX0NPREUsIDM0LCBzdHJ1Y3QgZ2Vud3FlX3JlZ19pbykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEdFTldRRV9XUklURV9SRUcxNiBfSU9XKEdFTldRRV9JT0NfQ09ERSwgMzUsIHN0cnVjdCBnZW53cWVfcmVnX2lvKQorI2RlZmluZSBHRU5XUUVfR0VUX0NBUkRfU1RBVEUgX0lPUihHRU5XUUVfSU9DX0NPREUsIDM2LCBlbnVtIGdlbndxZV9jYXJkX3N0YXRlKQorc3RydWN0IGdlbndxZV9tZW0geworIF9fdTY0IGFkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHNpemU7CisgX191NjQgZGlyZWN0aW9uOworIF9fdTY0IGZsYWdzOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEdFTldRRV9QSU5fTUVNIF9JT1dSKEdFTldRRV9JT0NfQ09ERSwgNDAsIHN0cnVjdCBnZW53cWVfbWVtKQorI2RlZmluZSBHRU5XUUVfVU5QSU5fTUVNIF9JT1dSKEdFTldRRV9JT0NfQ09ERSwgNDEsIHN0cnVjdCBnZW53cWVfbWVtKQorI2RlZmluZSBHRU5XUUVfRVhFQ1VURV9ERENCICAgX0lPV1IoR0VOV1FFX0lPQ19DT0RFLCA1MCwgc3RydWN0IGdlbndxZV9kZGNiX2NtZCkKKyNkZWZpbmUgR0VOV1FFX0VYRUNVVEVfUkFXX0REQ0IgICBfSU9XUihHRU5XUUVfSU9DX0NPREUsIDUxLCBzdHJ1Y3QgZ2Vud3FlX2RkY2JfY21kKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgR0VOV1FFX1NMVV9VUERBVEUgX0lPV1IoR0VOV1FFX0lPQ19DT0RFLCA4MCwgc3RydWN0IGdlbndxZV9iaXRzdHJlYW0pCisjZGVmaW5lIEdFTldRRV9TTFVfUkVBRCBfSU9XUihHRU5XUUVfSU9DX0NPREUsIDgxLCBzdHJ1Y3QgZ2Vud3FlX2JpdHN0cmVhbSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZnMyX29uZGlzay5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9nZnMyX29uZGlzay5oCmluZGV4IDJlODA0NzIuLmEzMTA2YmEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvZ2ZzMl9vbmRpc2suaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2dmczJfb25kaXNrLmgKQEAgLTI3NCw4MyArMjc0LDk1IEBACiAgX19iZTE2IGxmX2VudHJpZXM7CiAgX19iZTMyIGxmX2RpcmVudF9mb3JtYXQ7CiAgX19iZTY0IGxmX25leHQ7Ci0gX191OCBsZl9yZXNlcnZlZFs2NF07CisgdW5pb24gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGxmX3Jlc2VydmVkWzY0XTsKKyBzdHJ1Y3QgeworIF9fYmU2NCBsZl9pbm9kZTsKKyBfX2JlMzIgbGZfZGlzdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTMyIGxmX25zZWM7CisgX19iZTY0IGxmX3NlYzsKKyBfX3U4IGxmX3Jlc2VydmVkMls0MF07CisgfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfTsKIH07CiAjZGVmaW5lIEdGUzJfRUFfTUFYX05BTUVfTEVOIDI1NQogI2RlZmluZSBHRlMyX0VBX01BWF9EQVRBX0xFTiA2NTUzNgotI2RlZmluZSBHRlMyX0VBVFlQRV9VTlVTRUQgMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgR0ZTMl9FQVRZUEVfVU5VU0VEIDAKICNkZWZpbmUgR0ZTMl9FQVRZUEVfVVNSIDEKICNkZWZpbmUgR0ZTMl9FQVRZUEVfU1lTIDIKICNkZWZpbmUgR0ZTMl9FQVRZUEVfU0VDVVJJVFkgMwotI2RlZmluZSBHRlMyX0VBVFlQRV9MQVNUIDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEdGUzJfRUFUWVBFX0xBU1QgMwogI2RlZmluZSBHRlMyX0VBVFlQRV9WQUxJRCh4KSAoKHgpIDw9IEdGUzJfRUFUWVBFX0xBU1QpCiAjZGVmaW5lIEdGUzJfRUFGTEFHX0xBU1QgMHgwMQogc3RydWN0IGdmczJfZWFfaGVhZGVyIHsKLSBfX2JlMzIgZWFfcmVjX2xlbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTMyIGVhX3JlY19sZW47CiAgX19iZTMyIGVhX2RhdGFfbGVuOwogIF9fdTggZWFfbmFtZV9sZW47CiAgX191OCBlYV90eXBlOwotIF9fdTggZWFfZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZWFfZmxhZ3M7CiAgX191OCBlYV9udW1fcHRyczsKICBfX3UzMiBfX3BhZDsKIH07Ci0jZGVmaW5lIEdGUzJfTE9HX0hFQURfVU5NT1VOVCAweDAwMDAwMDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHRlMyX0xPR19IRUFEX1VOTU9VTlQgMHgwMDAwMDAwMQogc3RydWN0IGdmczJfbG9nX2hlYWRlciB7CiAgc3RydWN0IGdmczJfbWV0YV9oZWFkZXIgbGhfaGVhZGVyOwogIF9fYmU2NCBsaF9zZXF1ZW5jZTsKLSBfX2JlMzIgbGhfZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUzMiBsaF9mbGFnczsKICBfX2JlMzIgbGhfdGFpbDsKICBfX2JlMzIgbGhfYmxrbm87CiAgX19iZTMyIGxoX2hhc2g7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIEdGUzJfTE9HX0RFU0NfTUVUQURBVEEgMzAwCiAjZGVmaW5lIEdGUzJfTE9HX0RFU0NfUkVWT0tFIDMwMQogI2RlZmluZSBHRlMyX0xPR19ERVNDX0pEQVRBIDMwMgotc3RydWN0IGdmczJfbG9nX2Rlc2NyaXB0b3IgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBnZnMyX2xvZ19kZXNjcmlwdG9yIHsKICBzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlciBsZF9oZWFkZXI7CiAgX19iZTMyIGxkX3R5cGU7CiAgX19iZTMyIGxkX2xlbmd0aDsKLSBfX2JlMzIgbGRfZGF0YTE7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUzMiBsZF9kYXRhMTsKICBfX2JlMzIgbGRfZGF0YTI7CiAgX191OCBsZF9yZXNlcnZlZFszMl07CiB9OwotI2RlZmluZSBHRlMyX0lOVU1fUVVBTlRVTSAxMDQ4NTc2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHRlMyX0lOVU1fUVVBTlRVTSAxMDQ4NTc2CiBzdHJ1Y3QgZ2ZzMl9pbnVtX3JhbmdlIHsKICBfX2JlNjQgaXJfc3RhcnQ7CiAgX19iZTY0IGlyX2xlbmd0aDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBnZnMyX3N0YXRmc19jaGFuZ2UgewogIF9fYmU2NCBzY190b3RhbDsKICBfX2JlNjQgc2NfZnJlZTsKLSBfX2JlNjQgc2NfZGlub2RlczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTY0IHNjX2Rpbm9kZXM7CiB9OwogI2RlZmluZSBHRlMyX1FDRl9VU0VSIDB4MDAwMDAwMDEKIHN0cnVjdCBnZnMyX3F1b3RhX2NoYW5nZSB7Ci0gX19iZTY0IHFjX2NoYW5nZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTY0IHFjX2NoYW5nZTsKICBfX2JlMzIgcWNfZmxhZ3M7CiAgX19iZTMyIHFjX2lkOwogfTsKLXN0cnVjdCBnZnMyX3F1b3RhX2x2YiB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGdmczJfcXVvdGFfbHZiIHsKICBfX2JlMzIgcWJfbWFnaWM7CiAgX191MzIgX19wYWQ7CiAgX19iZTY0IHFiX2xpbWl0OwotIF9fYmU2NCBxYl93YXJuOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlNjQgcWJfd2FybjsKICBfX2JlNjQgcWJfdmFsdWU7CiB9OwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9oYXNoX2luZm8uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaGFzaF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzNTQzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaGFzaF9pbmZvLmgKQEAgLTAsMCArMSw0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfVUFQSV9MSU5VWF9IQVNIX0lORk9fSAorI2RlZmluZSBfVUFQSV9MSU5VWF9IQVNIX0lORk9fSAorZW51bSBoYXNoX2FsZ28geworIEhBU0hfQUxHT19NRDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEhBU0hfQUxHT19NRDUsCisgSEFTSF9BTEdPX1NIQTEsCisgSEFTSF9BTEdPX1JJUEVfTURfMTYwLAorIEhBU0hfQUxHT19TSEEyNTYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEhBU0hfQUxHT19TSEEzODQsCisgSEFTSF9BTEdPX1NIQTUxMiwKKyBIQVNIX0FMR09fU0hBMjI0LAorIEhBU0hfQUxHT19SSVBFX01EXzEyOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSEFTSF9BTEdPX1JJUEVfTURfMjU2LAorIEhBU0hfQUxHT19SSVBFX01EXzMyMCwKKyBIQVNIX0FMR09fV1BfMjU2LAorIEhBU0hfQUxHT19XUF8zODQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEhBU0hfQUxHT19XUF81MTIsCisgSEFTSF9BTEdPX1RHUl8xMjgsCisgSEFTSF9BTEdPX1RHUl8xNjAsCisgSEFTSF9BTEdPX1RHUl8xOTIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEhBU0hfQUxHT19fTEFTVAorfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9oc3JfbmV0bGluay5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9oc3JfbmV0bGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNDdkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2hzcl9uZXRsaW5rLmgKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX1VBUElfSFNSX05FVExJTktfSAorI2RlZmluZSBfX1VBUElfSFNSX05FVExJTktfSAorZW51bSB7CisgSFNSX0FfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBIU1JfQV9OT0RFX0FERFIsCisgSFNSX0FfSUZJTkRFWCwKKyBIU1JfQV9JRjFfQUdFLAorIEhTUl9BX0lGMl9BR0UsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEhTUl9BX05PREVfQUREUl9CLAorIEhTUl9BX0lGMV9TRVEsCisgSFNSX0FfSUYyX1NFUSwKKyBIU1JfQV9JRjFfSUZJTkRFWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSFNSX0FfSUYyX0lGSU5ERVgsCisgSFNSX0FfQUREUl9CX0lGSU5ERVgsCisgX19IU1JfQV9NQVgsCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFNSX0FfTUFYIChfX0hTUl9BX01BWCAtIDEpCitlbnVtIHsKKyBIU1JfQ19VTlNQRUMsCisgSFNSX0NfUklOR19FUlJPUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSFNSX0NfTk9ERV9ET1dOLAorIEhTUl9DX0dFVF9OT0RFX1NUQVRVUywKKyBIU1JfQ19TRVRfTk9ERV9TVEFUVVMsCisgSFNSX0NfR0VUX05PREVfTElTVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSFNSX0NfU0VUX05PREVfTElTVCwKKyBfX0hTUl9DX01BWCwKK307CisjZGVmaW5lIEhTUl9DX01BWCAoX19IU1JfQ19NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pY21wdjYuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWNtcHY2LmgKaW5kZXggN2VjNjI4Yy4uNTQyZWNhNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pY21wdjYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2ljbXB2Ni5oCkBAIC0xMzMsMjkgKzEzMywzMiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUNNUFY2X0FERFJfVU5SRUFDSCAzCiAjZGVmaW5lIElDTVBWNl9QT1JUX1VOUkVBQ0ggNAorI2RlZmluZSBJQ01QVjZfUE9MSUNZX0ZBSUwgNQorI2RlZmluZSBJQ01QVjZfUkVKRUNUX1JPVVRFIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9FWENfSE9QTElNSVQgMAogI2RlZmluZSBJQ01QVjZfRVhDX0ZSQUdUSU1FIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9IRFJfRklFTEQgMAogI2RlZmluZSBJQ01QVjZfVU5LX05FWFRIRFIgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUNNUFY2X1VOS19PUFRJT04gMgogI2RlZmluZSBJQ01QVjZfRklMVEVSIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9GSUxURVJfQkxPQ0sgMQogI2RlZmluZSBJQ01QVjZfRklMVEVSX1BBU1MgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUNNUFY2X0ZJTFRFUl9CTE9DS09USEVSUyAzCiAjZGVmaW5lIElDTVBWNl9GSUxURVJfUEFTU09OTFkgNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpY21wNl9maWx0ZXIgewogIF9fdTMyIGRhdGFbOF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgTUxEMl9NT0RFX0lTX0lOQ0xVREUgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUxEMl9NT0RFX0lTX0VYQ0xVREUgMgogI2RlZmluZSBNTEQyX0NIQU5HRV9UT19JTkNMVURFIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1MRDJfQ0hBTkdFX1RPX0VYQ0xVREUgNAogI2RlZmluZSBNTEQyX0FMTE9XX05FV19TT1VSQ0VTIDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1MRDJfQkxPQ0tfT0xEX1NPVVJDRVMgNgogI2RlZmluZSBNTEQyX0FMTF9NQ1JfSU5JVCB7IHsgeyAweGZmLDB4MDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwweDE2IH0gfSB9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmLmgKaW5kZXggMmI3MTMzZi4uNGVjYTg0ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWYuaApAQCAtNzcsMTM0ICs3NywxMzUgQEAKICNkZWZpbmUgSUZGX1NVUFBfTk9GQ1MgMHg4MDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZGX0xJVkVfQUREUl9DSEFOR0UgMHgxMDAwMDAKKyNkZWZpbmUgSUZGX01BQ1ZMQU4gMHgyMDAwMDAKICNkZWZpbmUgSUZfR0VUX0lGQUNFIDB4MDAwMQogI2RlZmluZSBJRl9HRVRfUFJPVE8gMHgwMDAyCi0jZGVmaW5lIElGX0lGQUNFX1YzNSAweDEwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGX0lGQUNFX1YzNSAweDEwMDAKICNkZWZpbmUgSUZfSUZBQ0VfVjI0IDB4MTAwMQogI2RlZmluZSBJRl9JRkFDRV9YMjEgMHgxMDAyCiAjZGVmaW5lIElGX0lGQUNFX1QxIDB4MTAwMwotI2RlZmluZSBJRl9JRkFDRV9FMSAweDEwMDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGX0lGQUNFX0UxIDB4MTAwNAogI2RlZmluZSBJRl9JRkFDRV9TWU5DX1NFUklBTCAweDEwMDUKICNkZWZpbmUgSUZfSUZBQ0VfWDIxRCAweDEwMDYKICNkZWZpbmUgSUZfUFJPVE9fSERMQyAweDIwMDAKLSNkZWZpbmUgSUZfUFJPVE9fUFBQIDB4MjAwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZfUFJPVE9fUFBQIDB4MjAwMQogI2RlZmluZSBJRl9QUk9UT19DSVNDTyAweDIwMDIKICNkZWZpbmUgSUZfUFJPVE9fRlIgMHgyMDAzCiAjZGVmaW5lIElGX1BST1RPX0ZSX0FERF9QVkMgMHgyMDA0Ci0jZGVmaW5lIElGX1BST1RPX0ZSX0RFTF9QVkMgMHgyMDA1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRl9QUk9UT19GUl9ERUxfUFZDIDB4MjAwNQogI2RlZmluZSBJRl9QUk9UT19YMjUgMHgyMDA2CiAjZGVmaW5lIElGX1BST1RPX0hETENfRVRIIDB4MjAwNwogI2RlZmluZSBJRl9QUk9UT19GUl9BRERfRVRIX1BWQyAweDIwMDgKLSNkZWZpbmUgSUZfUFJPVE9fRlJfREVMX0VUSF9QVkMgMHgyMDA5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRl9QUk9UT19GUl9ERUxfRVRIX1BWQyAweDIwMDkKICNkZWZpbmUgSUZfUFJPVE9fRlJfUFZDIDB4MjAwQQogI2RlZmluZSBJRl9QUk9UT19GUl9FVEhfUFZDIDB4MjAwQgogI2RlZmluZSBJRl9QUk9UT19SQVcgMHgyMDBDCi1lbnVtIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBJRl9PUEVSX1VOS05PV04sCiAgSUZfT1BFUl9OT1RQUkVTRU5ULAogIElGX09QRVJfRE9XTiwKLSBJRl9PUEVSX0xPV0VSTEFZRVJET1dOLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRl9PUEVSX0xPV0VSTEFZRVJET1dOLAogIElGX09QRVJfVEVTVElORywKICBJRl9PUEVSX0RPUk1BTlQsCiAgSUZfT1BFUl9VUCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gewogIElGX0xJTktfTU9ERV9ERUZBVUxULAogIElGX0xJTktfTU9ERV9ET1JNQU5ULAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGlmbWFwIHsKICB1bnNpZ25lZCBsb25nIG1lbV9zdGFydDsKICB1bnNpZ25lZCBsb25nIG1lbV9lbmQ7Ci0gdW5zaWduZWQgc2hvcnQgYmFzZV9hZGRyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBzaG9ydCBiYXNlX2FkZHI7CiAgdW5zaWduZWQgY2hhciBpcnE7CiAgdW5zaWduZWQgY2hhciBkbWE7CiAgdW5zaWduZWQgY2hhciBwb3J0OwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGlmX3NldHRpbmdzIHsKICB1bnNpZ25lZCBpbnQgdHlwZTsKICB1bnNpZ25lZCBpbnQgc2l6ZTsKLSB1bmlvbiB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uIHsKICByYXdfaGRsY19wcm90byBfX3VzZXIgKnJhd19oZGxjOwogIGNpc2NvX3Byb3RvIF9fdXNlciAqY2lzY287CiAgZnJfcHJvdG8gX191c2VyICpmcjsKLSBmcl9wcm90b19wdmMgX191c2VyICpmcl9wdmM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGZyX3Byb3RvX3B2YyBfX3VzZXIgKmZyX3B2YzsKICBmcl9wcm90b19wdmNfaW5mbyBfX3VzZXIgKmZyX3B2Y19pbmZvOwogIHN5bmNfc2VyaWFsX3NldHRpbmdzIF9fdXNlciAqc3luYzsKICB0ZTFfc2V0dGluZ3MgX191c2VyICp0ZTE7Ci0gfSBpZnNfaWZzdTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfSBpZnNfaWZzdTsKIH07CiBzdHJ1Y3QgaWZyZXEgewogI2RlZmluZSBJRkhXQUREUkxFTiA2Ci0gdW5pb24KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5pb24KICB7CiAgY2hhciBpZnJuX25hbWVbSUZOQU1TSVpdOwogIH0gaWZyX2lmcm47Ci0gdW5pb24gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bmlvbiB7CiAgc3RydWN0IHNvY2thZGRyIGlmcnVfYWRkcjsKICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9kc3RhZGRyOwogIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2Jyb2FkYWRkcjsKLSBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9uZXRtYXNrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9uZXRtYXNrOwogIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2h3YWRkcjsKICBzaG9ydCBpZnJ1X2ZsYWdzOwogIGludCBpZnJ1X2l2YWx1ZTsKLSBpbnQgaWZydV9tdHU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGludCBpZnJ1X210dTsKICBzdHJ1Y3QgaWZtYXAgaWZydV9tYXA7CiAgY2hhciBpZnJ1X3NsYXZlW0lGTkFNU0laXTsKICBjaGFyIGlmcnVfbmV3bmFtZVtJRk5BTVNJWl07Ci0gdm9pZCBfX3VzZXIgKiBpZnJ1X2RhdGE7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHZvaWQgX191c2VyICogaWZydV9kYXRhOwogIHN0cnVjdCBpZl9zZXR0aW5ncyBpZnJ1X3NldHRpbmdzOwogIH0gaWZyX2lmcnU7CiB9OwotI2RlZmluZSBpZnJfbmFtZSBpZnJfaWZybi5pZnJuX25hbWUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIGlmcl9uYW1lIGlmcl9pZnJuLmlmcm5fbmFtZQogI2RlZmluZSBpZnJfaHdhZGRyIGlmcl9pZnJ1LmlmcnVfaHdhZGRyCiAjZGVmaW5lIGlmcl9hZGRyIGlmcl9pZnJ1LmlmcnVfYWRkcgogI2RlZmluZSBpZnJfZHN0YWRkciBpZnJfaWZydS5pZnJ1X2RzdGFkZHIKLSNkZWZpbmUgaWZyX2Jyb2FkYWRkciBpZnJfaWZydS5pZnJ1X2Jyb2FkYWRkcgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgaWZyX2Jyb2FkYWRkciBpZnJfaWZydS5pZnJ1X2Jyb2FkYWRkcgogI2RlZmluZSBpZnJfbmV0bWFzayBpZnJfaWZydS5pZnJ1X25ldG1hc2sKICNkZWZpbmUgaWZyX2ZsYWdzIGlmcl9pZnJ1LmlmcnVfZmxhZ3MKICNkZWZpbmUgaWZyX21ldHJpYyBpZnJfaWZydS5pZnJ1X2l2YWx1ZQotI2RlZmluZSBpZnJfbXR1IGlmcl9pZnJ1LmlmcnVfbXR1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBpZnJfbXR1IGlmcl9pZnJ1LmlmcnVfbXR1CiAjZGVmaW5lIGlmcl9tYXAgaWZyX2lmcnUuaWZydV9tYXAKICNkZWZpbmUgaWZyX3NsYXZlIGlmcl9pZnJ1LmlmcnVfc2xhdmUKICNkZWZpbmUgaWZyX2RhdGEgaWZyX2lmcnUuaWZydV9kYXRhCi0jZGVmaW5lIGlmcl9pZmluZGV4IGlmcl9pZnJ1LmlmcnVfaXZhbHVlCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBpZnJfaWZpbmRleCBpZnJfaWZydS5pZnJ1X2l2YWx1ZQogI2RlZmluZSBpZnJfYmFuZHdpZHRoIGlmcl9pZnJ1LmlmcnVfaXZhbHVlCiAjZGVmaW5lIGlmcl9xbGVuIGlmcl9pZnJ1LmlmcnVfaXZhbHVlCiAjZGVmaW5lIGlmcl9uZXduYW1lIGlmcl9pZnJ1LmlmcnVfbmV3bmFtZQotI2RlZmluZSBpZnJfc2V0dGluZ3MgaWZyX2lmcnUuaWZydV9zZXR0aW5ncwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgaWZyX3NldHRpbmdzIGlmcl9pZnJ1LmlmcnVfc2V0dGluZ3MKIHN0cnVjdCBpZmNvbmYgewogIGludCBpZmNfbGVuOwogIHVuaW9uIHsKLSBjaGFyIF9fdXNlciAqaWZjdV9idWY7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNoYXIgX191c2VyICppZmN1X2J1ZjsKICBzdHJ1Y3QgaWZyZXEgX191c2VyICppZmN1X3JlcTsKICB9IGlmY19pZmN1OwogfTsKLSNkZWZpbmUgaWZjX2J1ZiBpZmNfaWZjdS5pZmN1X2J1ZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgaWZjX2J1ZiBpZmNfaWZjdS5pZmN1X2J1ZgogI2RlZmluZSBpZmNfcmVxIGlmY19pZmN1LmlmY3VfcmVxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYWRkci5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9hZGRyLmgKaW5kZXggYmQzYTZhNy4uZTA4YTE3NiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9hZGRyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9hZGRyLmgKQEAgLTQxLDI5ICs0MSwzMyBAQAogIElGQV9DQUNIRUlORk8sCiAgSUZBX01VTFRJQ0FTVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZBX0ZMQUdTLAogIF9fSUZBX01BWCwKIH07CiAjZGVmaW5lIElGQV9NQVggKF9fSUZBX01BWCAtIDEpCi0jZGVmaW5lIElGQV9GX1NFQ09OREFSWSAweDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRkFfRl9TRUNPTkRBUlkgMHgwMQogI2RlZmluZSBJRkFfRl9URU1QT1JBUlkgSUZBX0ZfU0VDT05EQVJZCiAjZGVmaW5lIElGQV9GX05PREFEIDB4MDIKICNkZWZpbmUgSUZBX0ZfT1BUSU1JU1RJQyAweDA0Ci0jZGVmaW5lIElGQV9GX0RBREZBSUxFRCAweDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRkFfRl9EQURGQUlMRUQgMHgwOAogI2RlZmluZSBJRkFfRl9IT01FQUREUkVTUyAweDEwCiAjZGVmaW5lIElGQV9GX0RFUFJFQ0FURUQgMHgyMAogI2RlZmluZSBJRkFfRl9URU5UQVRJVkUgMHg0MAotI2RlZmluZSBJRkFfRl9QRVJNQU5FTlQgMHg4MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZBX0ZfUEVSTUFORU5UIDB4ODAKKyNkZWZpbmUgSUZBX0ZfTUFOQUdFVEVNUEFERFIgMHgxMDAKKyNkZWZpbmUgSUZBX0ZfTk9QUkVGSVhST1VURSAweDIwMAogc3RydWN0IGlmYV9jYWNoZWluZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZmFfcHJlZmVyZWQ7CiAgX191MzIgaWZhX3ZhbGlkOwogIF9fdTMyIGNzdGFtcDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHN0YW1wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIElGQV9SVEEocikgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSkpCiAjZGVmaW5lIElGQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9hcnAuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYXJwLmgKaW5kZXggNWMyNGRlNi4uMDllYzAxZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9hcnAuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2FycC5oCkBAIC05Niw0OCArOTYsNTAgQEAKICNkZWZpbmUgQVJQSFJEX0NBSUYgODIyCiAjZGVmaW5lIEFSUEhSRF9JUDZHUkUgODIzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUlBIUkRfTkVUTElOSyA4MjQKKyNkZWZpbmUgQVJQSFJEXzZMT1dQQU4gODI1CiAjZGVmaW5lIEFSUEhSRF9WT0lEIDB4RkZGRgogI2RlZmluZSBBUlBIUkRfTk9ORSAweEZGRkUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSUE9QX1JFUVVFU1QgMQogI2RlZmluZSBBUlBPUF9SRVBMWSAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUlBPUF9SUkVRVUVTVCAzCiAjZGVmaW5lIEFSUE9QX1JSRVBMWSA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUlBPUF9JblJFUVVFU1QgOAogI2RlZmluZSBBUlBPUF9JblJFUExZIDkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSUE9QX05BSyAxMAogc3RydWN0IGFycHJlcSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzb2NrYWRkciBhcnBfcGE7CiAgc3RydWN0IHNvY2thZGRyIGFycF9oYTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGFycF9mbGFnczsKICBzdHJ1Y3Qgc29ja2FkZHIgYXJwX25ldG1hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgYXJwX2RldlsxNl07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBhcnByZXFfb2xkIHsKICBzdHJ1Y3Qgc29ja2FkZHIgYXJwX3BhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc29ja2FkZHIgYXJwX2hhOwogIGludCBhcnBfZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzb2NrYWRkciBhcnBfbmV0bWFzazsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVEZfQ09NIDB4MDIKICNkZWZpbmUgQVRGX1BFUk0gMHgwNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVRGX1BVQkwgMHgwOAogI2RlZmluZSBBVEZfVVNFVFJBSUxFUlMgMHgxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVRGX05FVE1BU0sgMHgyMAogI2RlZmluZSBBVEZfRE9OVFBVQiAweDQwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGFycGhkciB7CiAgX19iZTE2IGFyX2hyZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTE2IGFyX3BybzsKICB1bnNpZ25lZCBjaGFyIGFyX2hsbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBhcl9wbG47CiAgX19iZTE2IGFyX29wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2JvbmRpbmcuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYm9uZGluZy5oCmluZGV4IGU4YTkzNmQuLmMyZmFlNDIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYm9uZGluZy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYm9uZGluZy5oCkBAIC01NiwyOCArNTYsMzAgQEAKICNkZWZpbmUgQk9ORF9YTUlUX1BPTElDWV9MQVlFUjM0IDEKICNkZWZpbmUgQk9ORF9YTUlUX1BPTElDWV9MQVlFUjIzIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJPTkRfWE1JVF9QT0xJQ1lfRU5DQVAyMyAzCisjZGVmaW5lIEJPTkRfWE1JVF9QT0xJQ1lfRU5DQVAzNCA0CiB0eXBlZGVmIHN0cnVjdCBpZmJvbmQgewogIF9fczMyIGJvbmRfbW9kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgbnVtX3NsYXZlczsKICBfX3MzMiBtaWltb247Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBpZmJvbmQ7CiB0eXBlZGVmIHN0cnVjdCBpZnNsYXZlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgc2xhdmVfaWQ7CiAgY2hhciBzbGF2ZV9uYW1lW0lGTkFNU0laXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zOCBsaW5rOwogIF9fczggc3RhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxpbmtfZmFpbHVyZV9jb3VudDsKIH0gaWZzbGF2ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYWRfaW5mbyB7CiAgX191MTYgYWdncmVnYXRvcl9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgcG9ydHM7CiAgX191MTYgYWN0b3Jfa2V5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBwYXJ0bmVyX2tleTsKICBfX3U4IHBhcnRuZXJfc3lzdGVtW0VUSF9BTEVOXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9icmlkZ2UuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfYnJpZGdlLmgKaW5kZXggMTQ1Yjg0ZC4uMzY2OTEyZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9icmlkZ2UuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2JyaWRnZS5oCkBAIC0xOSwxODEgKzE5LDE4MiBAQAogI2lmbmRlZiBfVUFQSV9MSU5VWF9JRl9CUklER0VfSAogI2RlZmluZSBfVUFQSV9MSU5VWF9JRl9CUklER0VfSAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZGVmaW5lIFNZU0ZTX0JSSURHRV9BVFRSICJicmlkZ2UiCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9BVFRSICJicmlkZ2UiCiAjZGVmaW5lIFNZU0ZTX0JSSURHRV9GREIgImJyZm9yd2FyZCIKICNkZWZpbmUgU1lTRlNfQlJJREdFX1BPUlRfU1VCRElSICJicmlmIgogI2RlZmluZSBTWVNGU19CUklER0VfUE9SVF9BVFRSICJicnBvcnQiCi0jZGVmaW5lIFNZU0ZTX0JSSURHRV9QT1JUX0xJTksgImJyaWRnZSIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9QT1JUX0xJTksgImJyaWRnZSIKICNkZWZpbmUgQlJDVExfVkVSU0lPTiAxCiAjZGVmaW5lIEJSQ1RMX0dFVF9WRVJTSU9OIDAKICNkZWZpbmUgQlJDVExfR0VUX0JSSURHRVMgMQotI2RlZmluZSBCUkNUTF9BRERfQlJJREdFIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJSQ1RMX0FERF9CUklER0UgMgogI2RlZmluZSBCUkNUTF9ERUxfQlJJREdFIDMKICNkZWZpbmUgQlJDVExfQUREX0lGIDQKICNkZWZpbmUgQlJDVExfREVMX0lGIDUKLSNkZWZpbmUgQlJDVExfR0VUX0JSSURHRV9JTkZPIDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJSQ1RMX0dFVF9CUklER0VfSU5GTyA2CiAjZGVmaW5lIEJSQ1RMX0dFVF9QT1JUX0xJU1QgNwogI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX0ZPUldBUkRfREVMQVkgOAogI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX0hFTExPX1RJTUUgOQotI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX01BWF9BR0UgMTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJSQ1RMX1NFVF9CUklER0VfTUFYX0FHRSAxMAogI2RlZmluZSBCUkNUTF9TRVRfQUdFSU5HX1RJTUUgMTEKICNkZWZpbmUgQlJDVExfU0VUX0dDX0lOVEVSVkFMIDEyCiAjZGVmaW5lIEJSQ1RMX0dFVF9QT1JUX0lORk8gMTMKLSNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9TVFBfU1RBVEUgMTQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJSQ1RMX1NFVF9CUklER0VfU1RQX1NUQVRFIDE0CiAjZGVmaW5lIEJSQ1RMX1NFVF9CUklER0VfUFJJT1JJVFkgMTUKICNkZWZpbmUgQlJDVExfU0VUX1BPUlRfUFJJT1JJVFkgMTYKICNkZWZpbmUgQlJDVExfU0VUX1BBVEhfQ09TVCAxNwotI2RlZmluZSBCUkNUTF9HRVRfRkRCX0VOVFJJRVMgMTgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJSQ1RMX0dFVF9GREJfRU5UUklFUyAxOAogI2RlZmluZSBCUl9TVEFURV9ESVNBQkxFRCAwCiAjZGVmaW5lIEJSX1NUQVRFX0xJU1RFTklORyAxCiAjZGVmaW5lIEJSX1NUQVRFX0xFQVJOSU5HIDIKLSNkZWZpbmUgQlJfU1RBVEVfRk9SV0FSRElORyAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCUl9TVEFURV9GT1JXQVJESU5HIDMKICNkZWZpbmUgQlJfU1RBVEVfQkxPQ0tJTkcgNAogc3RydWN0IF9fYnJpZGdlX2luZm8gewogIF9fdTY0IGRlc2lnbmF0ZWRfcm9vdDsKLSBfX3U2NCBicmlkZ2VfaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGJyaWRnZV9pZDsKICBfX3UzMiByb290X3BhdGhfY29zdDsKICBfX3UzMiBtYXhfYWdlOwogIF9fdTMyIGhlbGxvX3RpbWU7Ci0gX191MzIgZm9yd2FyZF9kZWxheTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZm9yd2FyZF9kZWxheTsKICBfX3UzMiBicmlkZ2VfbWF4X2FnZTsKICBfX3UzMiBicmlkZ2VfaGVsbG9fdGltZTsKICBfX3UzMiBicmlkZ2VfZm9yd2FyZF9kZWxheTsKLSBfX3U4IHRvcG9sb2d5X2NoYW5nZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCB0b3BvbG9neV9jaGFuZ2U7CiAgX191OCB0b3BvbG9neV9jaGFuZ2VfZGV0ZWN0ZWQ7CiAgX191OCByb290X3BvcnQ7CiAgX191OCBzdHBfZW5hYmxlZDsKLSBfX3UzMiBhZ2VpbmdfdGltZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgYWdlaW5nX3RpbWU7CiAgX191MzIgZ2NfaW50ZXJ2YWw7CiAgX191MzIgaGVsbG9fdGltZXJfdmFsdWU7CiAgX191MzIgdGNuX3RpbWVyX3ZhbHVlOwotIF9fdTMyIHRvcG9sb2d5X2NoYW5nZV90aW1lcl92YWx1ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdG9wb2xvZ3lfY2hhbmdlX3RpbWVyX3ZhbHVlOwogIF9fdTMyIGdjX3RpbWVyX3ZhbHVlOwogfTsKIHN0cnVjdCBfX3BvcnRfaW5mbyB7Ci0gX191NjQgZGVzaWduYXRlZF9yb290OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBkZXNpZ25hdGVkX3Jvb3Q7CiAgX191NjQgZGVzaWduYXRlZF9icmlkZ2U7CiAgX191MTYgcG9ydF9pZDsKICBfX3UxNiBkZXNpZ25hdGVkX3BvcnQ7Ci0gX191MzIgcGF0aF9jb3N0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwYXRoX2Nvc3Q7CiAgX191MzIgZGVzaWduYXRlZF9jb3N0OwogIF9fdTggc3RhdGU7CiAgX191OCB0b3BfY2hhbmdlX2FjazsKLSBfX3U4IGNvbmZpZ19wZW5kaW5nOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGNvbmZpZ19wZW5kaW5nOwogIF9fdTggdW51c2VkMDsKICBfX3UzMiBtZXNzYWdlX2FnZV90aW1lcl92YWx1ZTsKICBfX3UzMiBmb3J3YXJkX2RlbGF5X3RpbWVyX3ZhbHVlOwotIF9fdTMyIGhvbGRfdGltZXJfdmFsdWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGhvbGRfdGltZXJfdmFsdWU7CiB9Owogc3RydWN0IF9fZmRiX2VudHJ5IHsKLSBfX3U4IG1hY19hZGRyWzZdOwotIF9fdTggcG9ydF9ubzsKKyBfX3U4IG1hY19hZGRyW0VUSF9BTEVOXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBwb3J0X25vOwogIF9fdTggaXNfbG9jYWw7CiAgX191MzIgYWdlaW5nX3RpbWVyX3ZhbHVlOwogIF9fdTggcG9ydF9oaTsKLSBfX3U4IHBhZDA7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcGFkMDsKICBfX3UxNiB1bnVzZWQ7CiB9OwogI2RlZmluZSBCUklER0VfRkxBR1NfTUFTVEVSIDEKLSNkZWZpbmUgQlJJREdFX0ZMQUdTX1NFTEYgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQlJJREdFX0ZMQUdTX1NFTEYgMgogI2RlZmluZSBCUklER0VfTU9ERV9WRUIgMAogI2RlZmluZSBCUklER0VfTU9ERV9WRVBBIDEKIGVudW0gewotIElGTEFfQlJJREdFX0ZMQUdTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0JSSURHRV9GTEFHUywKICBJRkxBX0JSSURHRV9NT0RFLAogIElGTEFfQlJJREdFX1ZMQU5fSU5GTywKICBfX0lGTEFfQlJJREdFX01BWCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgSUZMQV9CUklER0VfTUFYIChfX0lGTEFfQlJJREdFX01BWCAtIDEpCiAjZGVmaW5lIEJSSURHRV9WTEFOX0lORk9fTUFTVEVSICgxPDwwKQogI2RlZmluZSBCUklER0VfVkxBTl9JTkZPX1BWSUQgKDE8PDEpCi0jZGVmaW5lIEJSSURHRV9WTEFOX0lORk9fVU5UQUdHRUQgKDE8PDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEICgxPDwyKQogc3RydWN0IGJyaWRnZV92bGFuX2luZm8gewogIF9fdTE2IGZsYWdzOwogIF9fdTE2IHZpZDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gewogIE1EQkFfVU5TUEVDLAogIE1EQkFfTURCLAotIE1EQkFfUk9VVEVSLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBNREJBX1JPVVRFUiwKICBfX01EQkFfTUFYLAogfTsKICNkZWZpbmUgTURCQV9NQVggKF9fTURCQV9NQVggLSAxKQotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgTURCQV9NREJfVU5TUEVDLAogIE1EQkFfTURCX0VOVFJZLAogIF9fTURCQV9NREJfTUFYLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBNREJBX01EQl9NQVggKF9fTURCQV9NREJfTUFYIC0gMSkKIGVudW0gewogIE1EQkFfTURCX0VOVFJZX1VOU1BFQywKLSBNREJBX01EQl9FTlRSWV9JTkZPLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBNREJBX01EQl9FTlRSWV9JTkZPLAogIF9fTURCQV9NREJfRU5UUllfTUFYLAogfTsKICNkZWZpbmUgTURCQV9NREJfRU5UUllfTUFYIChfX01EQkFfTURCX0VOVFJZX01BWCAtIDEpCi1lbnVtIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBNREJBX1JPVVRFUl9VTlNQRUMsCiAgTURCQV9ST1VURVJfUE9SVCwKICBfX01EQkFfUk9VVEVSX01BWCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgTURCQV9ST1VURVJfTUFYIChfX01EQkFfUk9VVEVSX01BWCAtIDEpCiBzdHJ1Y3QgYnJfcG9ydF9tc2cgewogIF9fdTggZmFtaWx5OwotIF9fdTMyIGlmaW5kZXg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGlmaW5kZXg7CiB9Owogc3RydWN0IGJyX21kYl9lbnRyeSB7CiAgX191MzIgaWZpbmRleDsKLSNkZWZpbmUgTURCX1RFTVBPUkFSWSAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNREJfVEVNUE9SQVJZIDAKICNkZWZpbmUgTURCX1BFUk1BTkVOVCAxCiAgX191OCBzdGF0ZTsKICBzdHJ1Y3QgewotIHVuaW9uIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5pb24gewogIF9fYmUzMiBpcDQ7CiAgc3RydWN0IGluNl9hZGRyIGlwNjsKICB9IHU7Ci0gX19iZTE2IHByb3RvOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMTYgcHJvdG87CiAgfSBhZGRyOwogfTsKIGVudW0gewotIE1EQkFfU0VUX0VOVFJZX1VOU1BFQywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTURCQV9TRVRfRU5UUllfVU5TUEVDLAogIE1EQkFfU0VUX0VOVFJZLAogIF9fTURCQV9TRVRfRU5UUllfTUFYLAogfTsKLSNkZWZpbmUgTURCQV9TRVRfRU5UUllfTUFYIChfX01EQkFfU0VUX0VOVFJZX01BWCAtIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNREJBX1NFVF9FTlRSWV9NQVggKF9fTURCQV9TRVRfRU5UUllfTUFYIC0gMSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9ldGhlci5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9ldGhlci5oCmluZGV4IDE0ZDY3OWYuLjYxMGY3MGIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfZXRoZXIuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2V0aGVyLmgKQEAgLTgxLDUxICs4MSw1MyBAQAogI2RlZmluZSBFVEhfUF9NVlJQIDB4ODhGNQogI2RlZmluZSBFVEhfUF8xNTg4IDB4ODhGNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX1BfUFJQIDB4ODhGQgogI2RlZmluZSBFVEhfUF9GQ09FIDB4ODkwNgogI2RlZmluZSBFVEhfUF9URExTIDB4ODkwRAogI2RlZmluZSBFVEhfUF9GSVAgMHg4OTE0Ci0jZGVmaW5lIEVUSF9QX1FJTlExIDB4OTEwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX1BfUUlOUTEgMHg5MTAwCiAjZGVmaW5lIEVUSF9QX1FJTlEyIDB4OTIwMAogI2RlZmluZSBFVEhfUF9RSU5RMyAweDkzMDAKICNkZWZpbmUgRVRIX1BfRURTQSAweERBREEKLSNkZWZpbmUgRVRIX1BfQUZfSVVDViAweEZCRkIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSF9QX0FGX0lVQ1YgMHhGQkZCCiAjZGVmaW5lIEVUSF9QXzgwMl8zX01JTiAweDA2MDAKICNkZWZpbmUgRVRIX1BfODAyXzMgMHgwMDAxCiAjZGVmaW5lIEVUSF9QX0FYMjUgMHgwMDAyCi0jZGVmaW5lIEVUSF9QX0FMTCAweDAwMDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSF9QX0FMTCAweDAwMDMKICNkZWZpbmUgRVRIX1BfODAyXzIgMHgwMDA0CiAjZGVmaW5lIEVUSF9QX1NOQVAgMHgwMDA1CiAjZGVmaW5lIEVUSF9QX0REQ01QIDB4MDAwNgotI2RlZmluZSBFVEhfUF9XQU5fUFBQIDB4MDAwNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX1BfV0FOX1BQUCAweDAwMDcKICNkZWZpbmUgRVRIX1BfUFBQX01QIDB4MDAwOAogI2RlZmluZSBFVEhfUF9MT0NBTFRBTEsgMHgwMDA5CiAjZGVmaW5lIEVUSF9QX0NBTiAweDAwMEMKLSNkZWZpbmUgRVRIX1BfQ0FORkQgMHgwMDBECiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9DQU5GRCAweDAwMEQKICNkZWZpbmUgRVRIX1BfUFBQVEFMSyAweDAwMTAKICNkZWZpbmUgRVRIX1BfVFJfODAyXzIgMHgwMDExCiAjZGVmaW5lIEVUSF9QX01PQklURVggMHgwMDE1Ci0jZGVmaW5lIEVUSF9QX0NPTlRST0wgMHgwMDE2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9DT05UUk9MIDB4MDAxNgogI2RlZmluZSBFVEhfUF9JUkRBIDB4MDAxNwogI2RlZmluZSBFVEhfUF9FQ09ORVQgMHgwMDE4CiAjZGVmaW5lIEVUSF9QX0hETEMgMHgwMDE5Ci0jZGVmaW5lIEVUSF9QX0FSQ05FVCAweDAwMUEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSF9QX0FSQ05FVCAweDAwMUEKICNkZWZpbmUgRVRIX1BfRFNBIDB4MDAxQgogI2RlZmluZSBFVEhfUF9UUkFJTEVSIDB4MDAxQwogI2RlZmluZSBFVEhfUF9QSE9ORVQgMHgwMEY1Ci0jZGVmaW5lIEVUSF9QX0lFRUU4MDIxNTQgMHgwMEY2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9JRUVFODAyMTU0IDB4MDBGNgogI2RlZmluZSBFVEhfUF9DQUlGIDB4MDBGNwogc3RydWN0IGV0aGhkciB7CiAgdW5zaWduZWQgY2hhciBoX2Rlc3RbRVRIX0FMRU5dOwotIHVuc2lnbmVkIGNoYXIgaF9zb3VyY2VbRVRIX0FMRU5dOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIGhfc291cmNlW0VUSF9BTEVOXTsKICBfX2JlMTYgaF9wcm90bzsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX2xpbmsuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfbGluay5oCmluZGV4IDRiNGE4NDQuLmFhNTNmMGUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfbGluay5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfbGluay5oCkBAIC0xNDksMTUxICsxNDksMjIxIEBACiAgSUZMQV9OVU1fVFhfUVVFVUVTLAogIElGTEFfTlVNX1JYX1FVRVVFUywKICBJRkxBX0NBUlJJRVIsCi0gX19JRkxBX01BWAorIElGTEFfUEhZU19QT1JUX0lELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX0lGTEFfTUFYCiB9OwogI2RlZmluZSBJRkxBX01BWCAoX19JRkxBX01BWCAtIDEpCiAjZGVmaW5lIElGTEFfUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkpKQotI2RlZmluZSBJRkxBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGTEFfUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpKQogZW51bSB7CiAgSUZMQV9JTkVUX1VOU1BFQywKICBJRkxBX0lORVRfQ09ORiwKLSBfX0lGTEFfSU5FVF9NQVgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fSUZMQV9JTkVUX01BWCwKIH07CiAjZGVmaW5lIElGTEFfSU5FVF9NQVggKF9fSUZMQV9JTkVUX01BWCAtIDEpCiBlbnVtIHsKLSBJRkxBX0lORVQ2X1VOU1BFQywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9JTkVUNl9VTlNQRUMsCiAgSUZMQV9JTkVUNl9GTEFHUywKICBJRkxBX0lORVQ2X0NPTkYsCiAgSUZMQV9JTkVUNl9TVEFUUywKLSBJRkxBX0lORVQ2X01DQVNULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0lORVQ2X01DQVNULAogIElGTEFfSU5FVDZfQ0FDSEVJTkZPLAogIElGTEFfSU5FVDZfSUNNUDZTVEFUUywKICBJRkxBX0lORVQ2X1RPS0VOLAotIF9fSUZMQV9JTkVUNl9NQVgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19JRkxBX0lORVQ2X01BWAogfTsKICNkZWZpbmUgSUZMQV9JTkVUNl9NQVggKF9fSUZMQV9JTkVUNl9NQVggLSAxKQogZW51bSB7Ci0gQlJJREdFX01PREVfVU5TUEVDLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBCUklER0VfTU9ERV9VTlNQRUMsCiAgQlJJREdFX01PREVfSEFJUlBJTiwKIH07CiBlbnVtIHsKLSBJRkxBX0JSUE9SVF9VTlNQRUMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQlJQT1JUX1VOU1BFQywKICBJRkxBX0JSUE9SVF9TVEFURSwKICBJRkxBX0JSUE9SVF9QUklPUklUWSwKICBJRkxBX0JSUE9SVF9DT1NULAotIElGTEFfQlJQT1JUX01PREUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQlJQT1JUX01PREUsCiAgSUZMQV9CUlBPUlRfR1VBUkQsCiAgSUZMQV9CUlBPUlRfUFJPVEVDVCwKICBJRkxBX0JSUE9SVF9GQVNUX0xFQVZFLAotIF9fSUZMQV9CUlBPUlRfTUFYCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQlJQT1JUX0xFQVJOSU5HLAorIElGTEFfQlJQT1JUX1VOSUNBU1RfRkxPT0QsCisgX19JRkxBX0JSUE9SVF9NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkxBX0JSUE9SVF9NQVggKF9fSUZMQV9CUlBPUlRfTUFYIC0gMSkKIHN0cnVjdCBpZmxhX2NhY2hlaW5mbyB7CiAgX191MzIgbWF4X3JlYXNtX2xlbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHN0YW1wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZWFjaGFibGVfdGltZTsKICBfX3UzMiByZXRyYW5zX3RpbWU7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX0lORk9fVU5TUEVDLAogIElGTEFfSU5GT19LSU5ELAogIElGTEFfSU5GT19EQVRBLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX0lORk9fWFNUQVRTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0lORk9fU0xBVkVfS0lORCwKKyBJRkxBX0lORk9fU0xBVkVfREFUQSwKICBfX0lGTEFfSU5GT19NQVgsCiB9OwotI2RlZmluZSBJRkxBX0lORk9fTUFYIChfX0lGTEFfSU5GT19NQVggLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZMQV9JTkZPX01BWCAoX19JRkxBX0lORk9fTUFYIC0gMSkKIGVudW0gewogIElGTEFfVkxBTl9VTlNQRUMsCiAgSUZMQV9WTEFOX0lELAotIElGTEFfVkxBTl9GTEFHUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9WTEFOX0ZMQUdTLAogIElGTEFfVkxBTl9FR1JFU1NfUU9TLAogIElGTEFfVkxBTl9JTkdSRVNTX1FPUywKICBJRkxBX1ZMQU5fUFJPVE9DT0wsCi0gX19JRkxBX1ZMQU5fTUFYLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX0lGTEFfVkxBTl9NQVgsCiB9OwogI2RlZmluZSBJRkxBX1ZMQU5fTUFYIChfX0lGTEFfVkxBTl9NQVggLSAxKQogc3RydWN0IGlmbGFfdmxhbl9mbGFncyB7Ci0gX191MzIgZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGZsYWdzOwogIF9fdTMyIG1hc2s7CiB9OwogZW51bSB7Ci0gSUZMQV9WTEFOX1FPU19VTlNQRUMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfVkxBTl9RT1NfVU5TUEVDLAogIElGTEFfVkxBTl9RT1NfTUFQUElORywKICBfX0lGTEFfVkxBTl9RT1NfTUFYCiB9OwotI2RlZmluZSBJRkxBX1ZMQU5fUU9TX01BWCAoX19JRkxBX1ZMQU5fUU9TX01BWCAtIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRkxBX1ZMQU5fUU9TX01BWCAoX19JRkxBX1ZMQU5fUU9TX01BWCAtIDEpCiBzdHJ1Y3QgaWZsYV92bGFuX3Fvc19tYXBwaW5nIHsKICBfX3UzMiBmcm9tOwogIF9fdTMyIHRvOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSB7CiAgSUZMQV9NQUNWTEFOX1VOU1BFQywKICBJRkxBX01BQ1ZMQU5fTU9ERSwKLSBJRkxBX01BQ1ZMQU5fRkxBR1MsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfTUFDVkxBTl9GTEFHUywKICBfX0lGTEFfTUFDVkxBTl9NQVgsCiB9OwogI2RlZmluZSBJRkxBX01BQ1ZMQU5fTUFYIChfX0lGTEFfTUFDVkxBTl9NQVggLSAxKQotZW51bSBtYWN2bGFuX21vZGUgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbWFjdmxhbl9tb2RlIHsKICBNQUNWTEFOX01PREVfUFJJVkFURSA9IDEsCiAgTUFDVkxBTl9NT0RFX1ZFUEEgPSAyLAogIE1BQ1ZMQU5fTU9ERV9CUklER0UgPSA0LAotIE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSA9IDgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSA9IDgsCiB9OwogI2RlZmluZSBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDIDEKIGVudW0gewotIElGTEFfVlhMQU5fVU5TUEVDLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX1ZYTEFOX1VOU1BFQywKICBJRkxBX1ZYTEFOX0lELAogIElGTEFfVlhMQU5fR1JPVVAsCiAgSUZMQV9WWExBTl9MSU5LLAotIElGTEFfVlhMQU5fTE9DQUwsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfVlhMQU5fTE9DQUwsCiAgSUZMQV9WWExBTl9UVEwsCiAgSUZMQV9WWExBTl9UT1MsCiAgSUZMQV9WWExBTl9MRUFSTklORywKLSBJRkxBX1ZYTEFOX0FHRUlORywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9WWExBTl9BR0VJTkcsCiAgSUZMQV9WWExBTl9MSU1JVCwKICBJRkxBX1ZYTEFOX1BPUlRfUkFOR0UsCiAgSUZMQV9WWExBTl9QUk9YWSwKLSBJRkxBX1ZYTEFOX1JTQywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9WWExBTl9SU0MsCiAgSUZMQV9WWExBTl9MMk1JU1MsCiAgSUZMQV9WWExBTl9MM01JU1MsCiAgSUZMQV9WWExBTl9QT1JULAotIF9fSUZMQV9WWExBTl9NQVgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9WWExBTl9HUk9VUDYsCisgSUZMQV9WWExBTl9MT0NBTDYsCisgX19JRkxBX1ZYTEFOX01BWAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGTEFfVlhMQU5fTUFYIChfX0lGTEFfVlhMQU5fTUFYIC0gMSkKIHN0cnVjdCBpZmxhX3Z4bGFuX3BvcnRfcmFuZ2UgewogIF9fYmUxNiBsb3c7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUxNiBoaWdoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIHsKKyBJRkxBX0JPTkRfVU5TUEVDLAorIElGTEFfQk9ORF9NT0RFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0JPTkRfQUNUSVZFX1NMQVZFLAorIElGTEFfQk9ORF9NSUlNT04sCisgSUZMQV9CT05EX1VQREVMQVksCisgSUZMQV9CT05EX0RPV05ERUxBWSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9CT05EX1VTRV9DQVJSSUVSLAorIElGTEFfQk9ORF9BUlBfSU5URVJWQUwsCisgSUZMQV9CT05EX0FSUF9JUF9UQVJHRVQsCisgSUZMQV9CT05EX0FSUF9WQUxJREFURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9CT05EX0FSUF9BTExfVEFSR0VUUywKKyBJRkxBX0JPTkRfUFJJTUFSWSwKKyBJRkxBX0JPTkRfUFJJTUFSWV9SRVNFTEVDVCwKKyBJRkxBX0JPTkRfRkFJTF9PVkVSX01BQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9CT05EX1hNSVRfSEFTSF9QT0xJQ1ksCisgSUZMQV9CT05EX1JFU0VORF9JR01QLAorIElGTEFfQk9ORF9OVU1fUEVFUl9OT1RJRiwKKyBJRkxBX0JPTkRfQUxMX1NMQVZFU19BQ1RJVkUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQk9ORF9NSU5fTElOS1MsCisgSUZMQV9CT05EX0xQX0lOVEVSVkFMLAorIElGTEFfQk9ORF9QQUNLRVRTX1BFUl9TTEFWRSwKKyBJRkxBX0JPTkRfQURfTEFDUF9SQVRFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0JPTkRfQURfU0VMRUNULAorIElGTEFfQk9ORF9BRF9JTkZPLAorIF9fSUZMQV9CT05EX01BWCwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRkxBX0JPTkRfTUFYIChfX0lGTEFfQk9ORF9NQVggLSAxKQorZW51bSB7CisgSUZMQV9CT05EX0FEX0lORk9fVU5TUEVDLAorIElGTEFfQk9ORF9BRF9JTkZPX0FHR1JFR0FUT1IsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQk9ORF9BRF9JTkZPX05VTV9QT1JUUywKKyBJRkxBX0JPTkRfQURfSU5GT19BQ1RPUl9LRVksCisgSUZMQV9CT05EX0FEX0lORk9fUEFSVE5FUl9LRVksCisgSUZMQV9CT05EX0FEX0lORk9fUEFSVE5FUl9NQUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fSUZMQV9CT05EX0FEX0lORk9fTUFYLAorfTsKKyNkZWZpbmUgSUZMQV9CT05EX0FEX0lORk9fTUFYIChfX0lGTEFfQk9ORF9BRF9JTkZPX01BWCAtIDEpCitlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9CT05EX1NMQVZFX1VOU1BFQywKKyBJRkxBX0JPTkRfU0xBVkVfU1RBVEUsCisgSUZMQV9CT05EX1NMQVZFX01JSV9TVEFUVVMsCisgSUZMQV9CT05EX1NMQVZFX0xJTktfRkFJTFVSRV9DT1VOVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUZMQV9CT05EX1NMQVZFX1BFUk1fSFdBRERSLAorIElGTEFfQk9ORF9TTEFWRV9RVUVVRV9JRCwKKyBJRkxBX0JPTkRfU0xBVkVfQURfQUdHUkVHQVRPUl9JRCwKKyBfX0lGTEFfQk9ORF9TTEFWRV9NQVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgSUZMQV9CT05EX1NMQVZFX01BWCAoX19JRkxBX0JPTkRfU0xBVkVfTUFYIC0gMSkKK2VudW0gewogIElGTEFfVkZfSU5GT19VTlNQRUMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfVkZfSU5GTywKQEAgLTMwOCwxMDQgKzM3OCwxMzEgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9WRl9UWF9SQVRFLAogIElGTEFfVkZfU1BPT0ZDSEssCisgSUZMQV9WRl9MSU5LX1NUQVRFLAogIF9fSUZMQV9WRl9NQVgsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIElGTEFfVkZfTUFYIChfX0lGTEFfVkZfTUFYIC0gMSkKIHN0cnVjdCBpZmxhX3ZmX21hYyB7CiAgX191MzIgdmY7Ci0gX191OCBtYWNbMzJdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IG1hY1szMl07CiB9Owogc3RydWN0IGlmbGFfdmZfdmxhbiB7CiAgX191MzIgdmY7Ci0gX191MzIgdmxhbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdmxhbjsKICBfX3UzMiBxb3M7CiB9Owogc3RydWN0IGlmbGFfdmZfdHhfcmF0ZSB7Ci0gX191MzIgdmY7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHZmOwogIF9fdTMyIHJhdGU7CiB9Owogc3RydWN0IGlmbGFfdmZfc3Bvb2ZjaGsgewotIF9fdTMyIHZmOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB2ZjsKICBfX3UzMiBzZXR0aW5nOwogfTsKIGVudW0gewotIElGTEFfVkZfUE9SVF9VTlNQRUMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfVkZfTElOS19TVEFURV9BVVRPLAorIElGTEFfVkZfTElOS19TVEFURV9FTkFCTEUsCisgSUZMQV9WRl9MSU5LX1NUQVRFX0RJU0FCTEUsCisgX19JRkxBX1ZGX0xJTktfU1RBVEVfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgaWZsYV92Zl9saW5rX3N0YXRlIHsKKyBfX3UzMiB2ZjsKKyBfX3UzMiBsaW5rX3N0YXRlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitlbnVtIHsKKyBJRkxBX1ZGX1BPUlRfVU5TUEVDLAogIElGTEFfVkZfUE9SVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19JRkxBX1ZGX1BPUlRfTUFYLAogfTsKICNkZWZpbmUgSUZMQV9WRl9QT1JUX01BWCAoX19JRkxBX1ZGX1BPUlRfTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9QT1JUX1VOU1BFQywKICBJRkxBX1BPUlRfVkYsCiAgSUZMQV9QT1JUX1BST0ZJTEUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfUE9SVF9WU0lfVFlQRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9QT1JUX0lOU1RBTkNFX1VVSUQsCiAgSUZMQV9QT1JUX0hPU1RfVVVJRCwKICBJRkxBX1BPUlRfUkVRVUVTVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9QT1JUX1JFU1BPTlNFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0lGTEFfUE9SVF9NQVgsCiB9OwogI2RlZmluZSBJRkxBX1BPUlRfTUFYIChfX0lGTEFfUE9SVF9NQVggLSAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE9SVF9QUk9GSUxFX01BWCA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE9SVF9VVUlEX01BWCAxNgogI2RlZmluZSBQT1JUX1NFTEZfVkYgLTEKIGVudW0gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQT1JUX1JFUVVFU1RfUFJFQVNTT0NJQVRFID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUE9SVF9SRVFVRVNUX1BSRUFTU09DSUFURV9SUiwKICBQT1JUX1JFUVVFU1RfQVNTT0NJQVRFLAogIFBPUlRfUkVRVUVTVF9ESVNBU1NPQ0lBVEUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBQT1JUX1ZEUF9SRVNQT05TRV9TVUNDRVNTID0gMCwKICBQT1JUX1ZEUF9SRVNQT05TRV9JTlZBTElEX0ZPUk1BVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUE9SVF9WRFBfUkVTUE9OU0VfSU5TVUZGSUNJRU5UX1JFU09VUkNFUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUE9SVF9WRFBfUkVTUE9OU0VfVU5VU0VEX1ZUSUQsCiAgUE9SVF9WRFBfUkVTUE9OU0VfVlRJRF9WSU9MQVRJT04sCiAgUE9SVF9WRFBfUkVTUE9OU0VfVlRJRF9WRVJTSU9OX1ZJT0FMVElPTiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUE9SVF9WRFBfUkVTUE9OU0VfT1VUX09GX1NZTkMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfUFJPRklMRV9SRVNQT05TRV9TVUNDRVNTID0gMHgxMDAsCiAgUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOUFJPR1JFU1MsCiAgUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOVkFMSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfUFJPRklMRV9SRVNQT05TRV9CQURTVEFURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMsCiAgUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0VSUk9SLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWZsYV9wb3J0X3ZzaSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdnNpX21ncl9pZDsKICBfX3U4IHZzaV90eXBlX2lkWzNdOwogIF9fdTggdnNpX3R5cGVfdmVyc2lvbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwYWRbM107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gewogIElGTEFfSVBPSUJfVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX0lQT0lCX1BLRVksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfSVBPSUJfTU9ERSwKICBJRkxBX0lQT0lCX1VNQ0FTVCwKICBfX0lGTEFfSVBPSUJfTUFYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBJUE9JQl9NT0RFX0RBVEFHUkFNID0gMCwKICBJUE9JQl9NT0RFX0NPTk5FQ1RFRCA9IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGTEFfSVBPSUJfTUFYIChfX0lGTEFfSVBPSUJfTUFYIC0gMSkKK2VudW0geworIElGTEFfSFNSX1VOU1BFQywKKyBJRkxBX0hTUl9TTEFWRTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfSFNSX1NMQVZFMiwKKyBJRkxBX0hTUl9NVUxUSUNBU1RfU1BFQywKKyBJRkxBX0hTUl9TVVBFUlZJU0lPTl9BRERSLAorIElGTEFfSFNSX1NFUV9OUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19JRkxBX0hTUl9NQVgsCit9OworI2RlZmluZSBJRkxBX0hTUl9NQVggKF9fSUZMQV9IU1JfTUFYIC0gMSkKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfcGFja2V0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX3BhY2tldC5oCmluZGV4IGFlNWIzOTIuLjEzM2M3N2IgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfcGFja2V0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9wYWNrZXQuaApAQCAtNDQsMjA2ICs0NCwyMTggQEAKICNkZWZpbmUgUEFDS0VUX09USEVSSE9TVCAzCiAjZGVmaW5lIFBBQ0tFVF9PVVRHT0lORyA0CiAjZGVmaW5lIFBBQ0tFVF9MT09QQkFDSyA1Ci0jZGVmaW5lIFBBQ0tFVF9GQVNUUk9VVEUgNgorI2RlZmluZSBQQUNLRVRfVVNFUiA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQUNLRVRfS0VSTkVMIDcKKyNkZWZpbmUgUEFDS0VUX0ZBU1RST1VURSA2CiAjZGVmaW5lIFBBQ0tFVF9BRERfTUVNQkVSU0hJUCAxCiAjZGVmaW5lIFBBQ0tFVF9EUk9QX01FTUJFUlNISVAgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0VUX1JFQ1ZfT1VUUFVUIDMKICNkZWZpbmUgUEFDS0VUX1JYX1JJTkcgNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0VUX1NUQVRJU1RJQ1MgNgogI2RlZmluZSBQQUNLRVRfQ09QWV9USFJFU0ggNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0VUX0FVWERBVEEgOAogI2RlZmluZSBQQUNLRVRfT1JJR0RFViA5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQUNLRVRfVkVSU0lPTiAxMAogI2RlZmluZSBQQUNLRVRfSERSTEVOIDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQUNLRVRfUkVTRVJWRSAxMgogI2RlZmluZSBQQUNLRVRfVFhfUklORyAxMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0VUX0xPU1MgMTQKICNkZWZpbmUgUEFDS0VUX1ZORVRfSERSIDE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQUNLRVRfVFhfVElNRVNUQU1QIDE2CiAjZGVmaW5lIFBBQ0tFVF9USU1FU1RBTVAgMTcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBQ0tFVF9GQU5PVVQgMTgKICNkZWZpbmUgUEFDS0VUX1RYX0hBU19PRkYgMTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBBQ0tFVF9RRElTQ19CWVBBU1MgMjAKICNkZWZpbmUgUEFDS0VUX0ZBTk9VVF9IQVNIIDAKICNkZWZpbmUgUEFDS0VUX0ZBTk9VVF9MQiAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQUNLRVRfRkFOT1VUX0NQVSAyCi0jZGVmaW5lIFBBQ0tFVF9GQU5PVVRfUk9MTE9WRVIgMwotI2RlZmluZSBQQUNLRVRfRkFOT1VUX0ZMQUdfUk9MTE9WRVIgMHgxMDAwCi0jZGVmaW5lIFBBQ0tFVF9GQU5PVVRfRkxBR19ERUZSQUcgMHg4MDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQUNLRVRfRkFOT1VUX1JPTExPVkVSIDMKKyNkZWZpbmUgUEFDS0VUX0ZBTk9VVF9STkQgNAorI2RlZmluZSBQQUNLRVRfRkFOT1VUX1FNIDUKKyNkZWZpbmUgUEFDS0VUX0ZBTk9VVF9GTEFHX1JPTExPVkVSIDB4MTAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUEFDS0VUX0ZBTk9VVF9GTEFHX0RFRlJBRyAweDgwMDAKIHN0cnVjdCB0cGFja2V0X3N0YXRzIHsKICB1bnNpZ25lZCBpbnQgdHBfcGFja2V0czsKICB1bnNpZ25lZCBpbnQgdHBfZHJvcHM7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgdHBhY2tldF9zdGF0c192MyB7CiAgdW5zaWduZWQgaW50IHRwX3BhY2tldHM7CiAgdW5zaWduZWQgaW50IHRwX2Ryb3BzOwotIHVuc2lnbmVkIGludCB0cF9mcmVlemVfcV9jbnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCB0cF9mcmVlemVfcV9jbnQ7CiB9OwogdW5pb24gdHBhY2tldF9zdGF0c191IHsKICBzdHJ1Y3QgdHBhY2tldF9zdGF0cyBzdGF0czE7Ci0gc3RydWN0IHRwYWNrZXRfc3RhdHNfdjMgc3RhdHMzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgdHBhY2tldF9zdGF0c192MyBzdGF0czM7CiB9Owogc3RydWN0IHRwYWNrZXRfYXV4ZGF0YSB7CiAgX191MzIgdHBfc3RhdHVzOwotIF9fdTMyIHRwX2xlbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdHBfbGVuOwogIF9fdTMyIHRwX3NuYXBsZW47CiAgX191MTYgdHBfbWFjOwogIF9fdTE2IHRwX25ldDsKLSBfX3UxNiB0cF92bGFuX3RjaTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gX191MTYgdHBfcGFkZGluZzsKKyBfX3UxNiB0cF92bGFuX3RjaTsKKyBfX3UxNiB0cF92bGFuX3RwaWQ7CiB9OwogI2RlZmluZSBUUF9TVEFUVVNfS0VSTkVMIDAKLSNkZWZpbmUgVFBfU1RBVFVTX1VTRVIgKDEgPDwgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRQX1NUQVRVU19VU0VSICgxIDw8IDApCiAjZGVmaW5lIFRQX1NUQVRVU19DT1BZICgxIDw8IDEpCiAjZGVmaW5lIFRQX1NUQVRVU19MT1NJTkcgKDEgPDwgMikKICNkZWZpbmUgVFBfU1RBVFVTX0NTVU1OT1RSRUFEWSAoMSA8PCAzKQotI2RlZmluZSBUUF9TVEFUVVNfVkxBTl9WQUxJRCAoMSA8PCA0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVFBfU1RBVFVTX1ZMQU5fVkFMSUQgKDEgPDwgNCkKICNkZWZpbmUgVFBfU1RBVFVTX0JMS19UTU8gKDEgPDwgNSkKKyNkZWZpbmUgVFBfU1RBVFVTX1ZMQU5fVFBJRF9WQUxJRCAoMSA8PCA2KQogI2RlZmluZSBUUF9TVEFUVVNfQVZBSUxBQkxFIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRQX1NUQVRVU19TRU5EX1JFUVVFU1QgKDEgPDwgMCkKICNkZWZpbmUgVFBfU1RBVFVTX1NFTkRJTkcgKDEgPDwgMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRQX1NUQVRVU19XUk9OR19GT1JNQVQgKDEgPDwgMikKICNkZWZpbmUgVFBfU1RBVFVTX1RTX1NPRlRXQVJFICgxIDw8IDI5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVFBfU1RBVFVTX1RTX1NZU19IQVJEV0FSRSAoMSA8PCAzMCkKICNkZWZpbmUgVFBfU1RBVFVTX1RTX1JBV19IQVJEV0FSRSAoMSA8PCAzMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRQX0ZUX1JFUV9GSUxMX1JYSEFTSCAweDEKIHN0cnVjdCB0cGFja2V0X2hkciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgdHBfc3RhdHVzOwogIHVuc2lnbmVkIGludCB0cF9sZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB0cF9zbmFwbGVuOwogIHVuc2lnbmVkIHNob3J0IHRwX21hYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgdHBfbmV0OwogIHVuc2lnbmVkIGludCB0cF9zZWM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB0cF91c2VjOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRQQUNLRVRfQUxJR05NRU5UIDE2CiAjZGVmaW5lIFRQQUNLRVRfQUxJR04oeCkgKCgoeCkrVFBBQ0tFVF9BTElHTk1FTlQtMSkmfihUUEFDS0VUX0FMSUdOTUVOVC0xKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRQQUNLRVRfSERSTEVOIChUUEFDS0VUX0FMSUdOKHNpemVvZihzdHJ1Y3QgdHBhY2tldF9oZHIpKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKQogc3RydWN0IHRwYWNrZXQyX2hkciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRwX3N0YXR1czsKICBfX3UzMiB0cF9sZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRwX3NuYXBsZW47CiAgX191MTYgdHBfbWFjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiB0cF9uZXQ7CiAgX191MzIgdHBfc2VjOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0cF9uc2VjOwogIF9fdTE2IHRwX3ZsYW5fdGNpOwotIF9fdTE2IHRwX3BhZGRpbmc7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiB0cF92bGFuX3RwaWQ7CisgX191OCB0cF9wYWRkaW5nWzRdOworfTsKIHN0cnVjdCB0cGFja2V0X2hkcl92YXJpYW50MSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRwX3J4aGFzaDsKICBfX3UzMiB0cF92bGFuX3RjaTsKLX07CisgX191MTYgdHBfdmxhbl90cGlkOworIF9fdTE2IHRwX3BhZGRpbmc7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCB0cGFja2V0M19oZHIgewogIF9fdTMyIHRwX25leHRfb2Zmc2V0OwogIF9fdTMyIHRwX3NlYzsKLSBfX3UzMiB0cF9uc2VjOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0cF9uc2VjOwogIF9fdTMyIHRwX3NuYXBsZW47CiAgX191MzIgdHBfbGVuOwogIF9fdTMyIHRwX3N0YXR1czsKLSBfX3UxNiB0cF9tYWM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IHRwX21hYzsKICBfX3UxNiB0cF9uZXQ7CiAgdW5pb24gewogIHN0cnVjdCB0cGFja2V0X2hkcl92YXJpYW50MSBodjE7Ci0gfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfTsKKyBfX3U4IHRwX3BhZGRpbmdbOF07CiB9Owogc3RydWN0IHRwYWNrZXRfYmRfdHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdHNfc2VjOwogIHVuaW9uIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHRzX3VzZWM7CiAgdW5zaWduZWQgaW50IHRzX25zZWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0cGFja2V0X2hkcl92MSB7CiAgX191MzIgYmxvY2tfc3RhdHVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBudW1fcGt0czsKICBfX3UzMiBvZmZzZXRfdG9fZmlyc3RfcGt0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBibGtfbGVuOwogIF9fYWxpZ25lZF91NjQgc2VxX251bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRwYWNrZXRfYmRfdHMgdHNfZmlyc3RfcGt0LCB0c19sYXN0X3BrdDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdW5pb24gdHBhY2tldF9iZF9oZWFkZXJfdSB7CiAgc3RydWN0IHRwYWNrZXRfaGRyX3YxIGJoMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHRwYWNrZXRfYmxvY2tfZGVzYyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHZlcnNpb247CiAgX191MzIgb2Zmc2V0X3RvX3ByaXY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHRwYWNrZXRfYmRfaGVhZGVyX3UgaGRyOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRQQUNLRVQyX0hEUkxFTiAoVFBBQ0tFVF9BTElHTihzaXplb2Yoc3RydWN0IHRwYWNrZXQyX2hkcikpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpCiAjZGVmaW5lIFRQQUNLRVQzX0hEUkxFTiAoVFBBQ0tFVF9BTElHTihzaXplb2Yoc3RydWN0IHRwYWNrZXQzX2hkcikpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB0cGFja2V0X3ZlcnNpb25zIHsKICBUUEFDS0VUX1YxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUUEFDS0VUX1YyLAogIFRQQUNLRVRfVjMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHRwYWNrZXRfcmVxIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHRwX2Jsb2NrX3NpemU7CiAgdW5zaWduZWQgaW50IHRwX2Jsb2NrX25yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdHBfZnJhbWVfc2l6ZTsKICB1bnNpZ25lZCBpbnQgdHBfZnJhbWVfbnI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB0cGFja2V0X3JlcTMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdHBfYmxvY2tfc2l6ZTsKICB1bnNpZ25lZCBpbnQgdHBfYmxvY2tfbnI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB0cF9mcmFtZV9zaXplOwogIHVuc2lnbmVkIGludCB0cF9mcmFtZV9ucjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHRwX3JldGlyZV9ibGtfdG92OwogIHVuc2lnbmVkIGludCB0cF9zaXplb2ZfcHJpdjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHRwX2ZlYXR1cmVfcmVxX3dvcmQ7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHVuaW9uIHRwYWNrZXRfcmVxX3UgewogIHN0cnVjdCB0cGFja2V0X3JlcSByZXE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0cGFja2V0X3JlcTMgcmVxMzsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHBhY2tldF9tcmVxIHsKICBpbnQgbXJfaWZpbmRleDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgbXJfdHlwZTsKICB1bnNpZ25lZCBzaG9ydCBtcl9hbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIG1yX2FkZHJlc3NbOF07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0VUX01SX01VTFRJQ0FTVCAwCiAjZGVmaW5lIFBBQ0tFVF9NUl9QUk9NSVNDIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBQ0tFVF9NUl9BTExNVUxUSSAyCiAjZGVmaW5lIFBBQ0tFVF9NUl9VTklDQVNUIDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfcHBwb3guaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfcHBwb3guaAppbmRleCAzZWNhZjEyLi4zYmMyZGRiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX3BwcG94LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl9wcHBveC5oCkBAIC0yNCwzNCArMjQsMjkgQEAKICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3BwcG9sMnRwLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfcHBwb2xhYy5oPgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNpbmNsdWRlIDxsaW51eC9pZl9wcHBvcG5zLmg+CiAjaWZuZGVmIEFGX1BQUE9YCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBRl9QUFBPWCAyNAogI2RlZmluZSBQRl9QUFBPWCBBRl9QUFBPWAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogdHlwZWRlZiBfX2JlMTYgc2lkX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHBwcG9lX2FkZHIgewogIHNpZF90IHNpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciByZW1vdGVbRVRIX0FMRU5dOwogIGNoYXIgZGV2W0lGTkFNU0laXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHBwdHBfYWRkciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fYmUxNiBjYWxsX2lkOworIF9fdTE2IGNhbGxfaWQ7CiAgc3RydWN0IGluX2FkZHIgc2luX2FkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgUFhfUFJPVE9fT0UgMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFhfUFJPVE9fT0wyVFAgMQogI2RlZmluZSBQWF9QUk9UT19QUFRQIDIKLSNkZWZpbmUgUFhfUFJPVE9fT0xBQyAzCi0jZGVmaW5lIFBYX1BST1RPX09QTlMgNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUFhfTUFYX1BST1RPIDUKKyNkZWZpbmUgUFhfTUFYX1BST1RPIDMKIHN0cnVjdCBzb2NrYWRkcl9wcHBveCB7CiAgX19rZXJuZWxfc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogIHVuc2lnbmVkIGludCBzYV9wcm90b2NvbDsKQEAgLTExNywxMiArMTEyLDEyIEBACiBzdHJ1Y3QgcHBwb2VfaGRyIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECi0gX191OCB2ZXIgOiA0OwogIF9fdTggdHlwZSA6IDQ7CisgX191OCB2ZXIgOiA0OwogI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fdTggdHlwZSA6IDQ7CiAgX191OCB2ZXIgOiA0OworIF9fdTggdHlwZSA6IDQ7CiAjZWxzZQogI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfdHVuLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lmX3R1bi5oCmluZGV4IGVkY2Y3ZTQuLmY4ZjgwYjkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaWZfdHVuLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pZl90dW4uaApAQCAtNTgsMzYgKzU4LDQyIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUVU5TRVRWTkVUSERSU1ogX0lPVygnVCcsIDIxNiwgaW50KQogI2RlZmluZSBUVU5TRVRRVUVVRSBfSU9XKCdUJywgMjE3LCBpbnQpCisjZGVmaW5lIFRVTlNFVElGSU5ERVggX0lPVygnVCcsIDIxOCwgdW5zaWduZWQgaW50KQorI2RlZmluZSBUVU5HRVRGSUxURVIgX0lPUignVCcsIDIxOSwgc3RydWN0IHNvY2tfZnByb2cpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkZfVFVOIDB4MDAwMQogI2RlZmluZSBJRkZfVEFQIDB4MDAwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZGX05PX1BJIDB4MTAwMAogI2RlZmluZSBJRkZfT05FX1FVRVVFIDB4MjAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZGX1ZORVRfSERSIDB4NDAwMAogI2RlZmluZSBJRkZfVFVOX0VYQ0wgMHg4MDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkZfTVVMVElfUVVFVUUgMHgwMTAwCiAjZGVmaW5lIElGRl9BVFRBQ0hfUVVFVUUgMHgwMjAwCi0jZGVmaW5lIElGRl9ERVRBQ0hfUVVFVUUgMHgwNDAwCi0jZGVmaW5lIFRVTl9GX0NTVU0gMHgwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZGX0RFVEFDSF9RVUVVRSAweDA0MDAKKyNkZWZpbmUgSUZGX1BFUlNJU1QgMHgwODAwCisjZGVmaW5lIElGRl9OT0ZJTFRFUiAweDEwMDAKKyNkZWZpbmUgVFVOX1RYX1RJTUVTVEFNUCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUVU5fRl9DU1VNIDB4MDEKICNkZWZpbmUgVFVOX0ZfVFNPNCAweDAyCiAjZGVmaW5lIFRVTl9GX1RTTzYgMHgwNAogI2RlZmluZSBUVU5fRl9UU09fRUNOIDB4MDgKLSNkZWZpbmUgVFVOX0ZfVUZPIDB4MTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRVTl9GX1VGTyAweDEwCiAjZGVmaW5lIFRVTl9QS1RfU1RSSVAgMHgwMDAxCiBzdHJ1Y3QgdHVuX3BpIHsKICBfX3UxNiBmbGFnczsKLSBfX2JlMTYgcHJvdG87CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUxNiBwcm90bzsKIH07CiAjZGVmaW5lIFRVTl9GTFRfQUxMTVVMVEkgMHgwMDAxCiBzdHJ1Y3QgdHVuX2ZpbHRlciB7Ci0gX191MTYgZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGZsYWdzOwogIF9fdTE2IGNvdW50OwogIF9fdTggYWRkclswXVtFVEhfQUxFTl07CiB9OwotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2luLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2luLmgKaW5kZXggNDUwNDEzMi4uZTkwMjA5YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pbi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaW4uaApAQCAtMjMsNzIgKzIzLDEwNyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIElQUFJPVE9fSVAgPSAwLAorI2RlZmluZSBJUFBST1RPX0lQIElQUFJPVE9fSVAKICBJUFBST1RPX0lDTVAgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBQUk9UT19JQ01QIElQUFJPVE9fSUNNUAogIElQUFJPVE9fSUdNUCA9IDIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFBST1RPX0lHTVAgSVBQUk9UT19JR01QCiAgSVBQUk9UT19JUElQID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQUFJPVE9fSVBJUCBJUFBST1RPX0lQSVAKICBJUFBST1RPX1RDUCA9IDYsCisjZGVmaW5lIElQUFJPVE9fVENQIElQUFJPVE9fVENQCiAgSVBQUk9UT19FR1AgPSA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBQUk9UT19FR1AgSVBQUk9UT19FR1AKICBJUFBST1RPX1BVUCA9IDEyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBQUk9UT19QVVAgSVBQUk9UT19QVVAKICBJUFBST1RPX1VEUCA9IDE3LAotIElQUFJPVE9fSURQID0gMjIsCi0gSVBQUk9UT19EQ0NQID0gMzMsCi0gSVBQUk9UT19SU1ZQID0gNDYsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIElQUFJPVE9fR1JFID0gNDcsCisjZGVmaW5lIElQUFJPVE9fVURQIElQUFJPVE9fVURQCisgSVBQUk9UT19JRFAgPSAyMiwKKyNkZWZpbmUgSVBQUk9UT19JRFAgSVBQUk9UT19JRFAKKyBJUFBST1RPX1RQID0gMjksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFBST1RPX1RQIElQUFJPVE9fVFAKKyBJUFBST1RPX0RDQ1AgPSAzMywKKyNkZWZpbmUgSVBQUk9UT19EQ0NQIElQUFJPVE9fRENDUAogIElQUFJPVE9fSVBWNiA9IDQxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBQUk9UT19JUFY2IElQUFJPVE9fSVBWNgorIElQUFJPVE9fUlNWUCA9IDQ2LAorI2RlZmluZSBJUFBST1RPX1JTVlAgSVBQUk9UT19SU1ZQCisgSVBQUk9UT19HUkUgPSA0NywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQUFJPVE9fR1JFIElQUFJPVE9fR1JFCiAgSVBQUk9UT19FU1AgPSA1MCwKKyNkZWZpbmUgSVBQUk9UT19FU1AgSVBQUk9UT19FU1AKICBJUFBST1RPX0FIID0gNTEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFBST1RPX0FIIElQUFJPVE9fQUgKKyBJUFBST1RPX01UUCA9IDkyLAorI2RlZmluZSBJUFBST1RPX01UUCBJUFBST1RPX01UUAogIElQUFJPVE9fQkVFVFBIID0gOTQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFBST1RPX0JFRVRQSCBJUFBST1RPX0JFRVRQSAorIElQUFJPVE9fRU5DQVAgPSA5OCwKKyNkZWZpbmUgSVBQUk9UT19FTkNBUCBJUFBST1RPX0VOQ0FQCiAgSVBQUk9UT19QSU0gPSAxMDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFBST1RPX1BJTSBJUFBST1RPX1BJTQogIElQUFJPVE9fQ09NUCA9IDEwOCwKKyNkZWZpbmUgSVBQUk9UT19DT01QIElQUFJPVE9fQ09NUAogIElQUFJPVE9fU0NUUCA9IDEzMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQUFJPVE9fU0NUUCBJUFBST1RPX1NDVFAKICBJUFBST1RPX1VEUExJVEUgPSAxMzYsCisjZGVmaW5lIElQUFJPVE9fVURQTElURSBJUFBST1RPX1VEUExJVEUKICBJUFBST1RPX1JBVyA9IDI1NSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQUFJPVE9fUkFXIElQUFJPVE9fUkFXCiAgSVBQUk9UT19NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGluX2FkZHIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMzIgc19hZGRyOwogfTsKICNkZWZpbmUgSVBfVE9TIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX1RUTCAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9IRFJJTkNMIDMKICNkZWZpbmUgSVBfT1BUSU9OUyA0CiAjZGVmaW5lIElQX1JPVVRFUl9BTEVSVCA1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9SRUNWT1BUUyA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9SRVRPUFRTIDcKICNkZWZpbmUgSVBfUEtUSU5GTyA4CiAjZGVmaW5lIElQX1BLVE9QVElPTlMgOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfTVRVX0RJU0NPVkVSIDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9SRUNWRVJSIDExCiAjZGVmaW5lIElQX1JFQ1ZUVEwgMTIKICNkZWZpbmUgSVBfUkVDVlRPUyAxMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfTVRVIDE0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9GUkVFQklORCAxNQogI2RlZmluZSBJUF9JUFNFQ19QT0xJQ1kgMTYKICNkZWZpbmUgSVBfWEZSTV9QT0xJQ1kgMTcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX1BBU1NTRUMgMTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX1RSQU5TUEFSRU5UIDE5CiAjZGVmaW5lIElQX1JFQ1ZSRVRPUFRTIElQX1JFVE9QVFMKICNkZWZpbmUgSVBfT1JJR0RTVEFERFIgMjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX1JFQ1ZPUklHRFNUQUREUiBJUF9PUklHRFNUQUREUgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfTUlOVFRMIDIxCiAjZGVmaW5lIElQX05PREVGUkFHIDIyCiAjZGVmaW5lIElQX1BNVFVESVNDX0RPTlQgMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfUE1UVURJU0NfV0FOVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9QTVRVRElTQ19ETyAyCiAjZGVmaW5lIElQX1BNVFVESVNDX1BST0JFIDMKKyNkZWZpbmUgSVBfUE1UVURJU0NfSU5URVJGQUNFIDQKICNkZWZpbmUgSVBfTVVMVElDQVNUX0lGIDMyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9NVUxUSUNBU1RfVFRMIDMzCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2luNi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pbjYuaAppbmRleCAwZDAwZTJiLi42NDFhNjliIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2luNi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaW42LmgKQEAgLTE5LDE5ICsxOSwyOSBAQAogI2lmbmRlZiBfVUFQSV9MSU5VWF9JTjZfSAogI2RlZmluZSBfVUFQSV9MSU5VWF9JTjZfSAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci1zdHJ1Y3QgaW42X2FkZHIgeworI2luY2x1ZGUgPGxpbnV4L2xpYmMtY29tcGF0Lmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmIF9fVUFQSV9ERUZfSU42X0FERFIKK3N0cnVjdCBpbjZfYWRkciB7CiAgdW5pb24gewogIF9fdTggdTZfYWRkcjhbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpZiBfX1VBUElfREVGX0lONl9BRERSX0FMVAogIF9fYmUxNiB1Nl9hZGRyMTZbOF07CiAgX19iZTMyIHU2X2FkZHIzMls0XTsKKyNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGluNl91OwogI2RlZmluZSBzNl9hZGRyIGluNl91LnU2X2FkZHI4CisjaWYgX19VQVBJX0RFRl9JTjZfQUREUl9BTFQKICNkZWZpbmUgczZfYWRkcjE2IGluNl91LnU2X2FkZHIxNgotI2RlZmluZSBzNl9hZGRyMzIgaW42X3UudTZfYWRkcjMyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBzNl9hZGRyMzIgaW42X3UudTZfYWRkcjMyCisjZW5kaWYKIH07CisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaWYgX19VQVBJX0RFRl9TT0NLQUREUl9JTjYKIHN0cnVjdCBzb2NrYWRkcl9pbjYgewogIHVuc2lnbmVkIHNob3J0IGludCBzaW42X2ZhbWlseTsKICBfX2JlMTYgc2luNl9wb3J0OwpAQCAtNDEsMTA5ICs1MSwxMTkgQEAKICBfX3UzMiBzaW42X3Njb3BlX2lkOwogfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKKyNpZiBfX1VBUElfREVGX0lQVjZfTVJFUQogc3RydWN0IGlwdjZfbXJlcSB7CiAgc3RydWN0IGluNl9hZGRyIGlwdjZtcl9tdWx0aWFkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBpcHY2bXJfaWZpbmRleDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCiAjZGVmaW5lIGlwdjZtcl9hY2FkZHIgaXB2Nm1yX211bHRpYWRkcgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSB7CiAgc3RydWN0IGluNl9hZGRyIGZscl9kc3Q7CiAgX19iZTMyIGZscl9sYWJlbDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBmbHJfYWN0aW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGZscl9zaGFyZTsKICBfX3UxNiBmbHJfZmxhZ3M7CiAgX191MTYgZmxyX2V4cGlyZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGZscl9saW5nZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIF9fZmxyX3BhZDsKIH07CiAjZGVmaW5lIElQVjZfRkxfQV9HRVQgMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9GTF9BX1BVVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X0ZMX0FfUkVORVcgMgogI2RlZmluZSBJUFY2X0ZMX0ZfQ1JFQVRFIDEKICNkZWZpbmUgSVBWNl9GTF9GX0VYQ0wgMgorI2RlZmluZSBJUFY2X0ZMX0ZfUkVGTEVDVCA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFY2X0ZMX0ZfUkVNT1RFIDgKICNkZWZpbmUgSVBWNl9GTF9TX05PTkUgMAogI2RlZmluZSBJUFY2X0ZMX1NfRVhDTCAxCiAjZGVmaW5lIElQVjZfRkxfU19QUk9DRVNTIDIKLSNkZWZpbmUgSVBWNl9GTF9TX1VTRVIgMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBWNl9GTF9TX1VTRVIgMwogI2RlZmluZSBJUFY2X0ZMX1NfQU5ZIDI1NQogI2RlZmluZSBJUFY2X0ZMT1dJTkZPX0ZMT1dMQUJFTCAweDAwMGZmZmZmCiAjZGVmaW5lIElQVjZfRkxPV0lORk9fUFJJT1JJVFkgMHgwZmYwMDAwMAotI2RlZmluZSBJUFY2X1BSSU9SSVRZX1VOQ0hBUkFDVEVSSVpFRCAweDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfVU5DSEFSQUNURVJJWkVEIDB4MDAwMAogI2RlZmluZSBJUFY2X1BSSU9SSVRZX0ZJTExFUiAweDAxMDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV9VTkFUVEVOREVEIDB4MDIwMAogI2RlZmluZSBJUFY2X1BSSU9SSVRZX1JFU0VSVkVEMSAweDAzMDAKLSNkZWZpbmUgSVBWNl9QUklPUklUWV9CVUxLIDB4MDQwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBWNl9QUklPUklUWV9CVUxLIDB4MDQwMAogI2RlZmluZSBJUFY2X1BSSU9SSVRZX1JFU0VSVkVEMiAweDA1MDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV9JTlRFUkFDVElWRSAweDA2MDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV9DT05UUk9MIDB4MDcwMAotI2RlZmluZSBJUFY2X1BSSU9SSVRZXzggMHgwODAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFY2X1BSSU9SSVRZXzggMHgwODAwCiAjZGVmaW5lIElQVjZfUFJJT1JJVFlfOSAweDA5MDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV8xMCAweDBhMDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV8xMSAweDBiMDAKLSNkZWZpbmUgSVBWNl9QUklPUklUWV8xMiAweDBjMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTIgMHgwYzAwCiAjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTMgMHgwZDAwCiAjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTQgMHgwZTAwCiAjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTUgMHgwZjAwCi0jZGVmaW5lIElQUFJPVE9fSE9QT1BUUyAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmIF9fVUFQSV9ERUZfSVBQUk9UT19WNgorI2RlZmluZSBJUFBST1RPX0hPUE9QVFMgMAogI2RlZmluZSBJUFBST1RPX1JPVVRJTkcgNDMKICNkZWZpbmUgSVBQUk9UT19GUkFHTUVOVCA0NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBQUk9UT19JQ01QVjYgNTgKICNkZWZpbmUgSVBQUk9UT19OT05FIDU5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFBST1RPX0RTVE9QVFMgNjAKICNkZWZpbmUgSVBQUk9UT19NSCAxMzUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKICNkZWZpbmUgSVBWNl9UTFZfUEFEMSAwCiAjZGVmaW5lIElQVjZfVExWX1BBRE4gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9UTFZfUk9VVEVSQUxFUlQgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9UTFZfSlVNQk8gMTk0CiAjZGVmaW5lIElQVjZfVExWX0hBTyAyMDEKICNkZWZpbmUgSVBWNl9BRERSRk9STSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2XzIyOTJQS1RJTkZPIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfMjI5MkhPUE9QVFMgMwogI2RlZmluZSBJUFY2XzIyOTJEU1RPUFRTIDQKICNkZWZpbmUgSVBWNl8yMjkyUlRIRFIgNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl8yMjkyUEtUT1BUSU9OUyA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X0NIRUNLU1VNIDcKICNkZWZpbmUgSVBWNl8yMjkySE9QTElNSVQgOAogI2RlZmluZSBJUFY2X05FWFRIT1AgOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9BVVRISERSIDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X0ZMT1dJTkZPIDExCiAjZGVmaW5lIElQVjZfVU5JQ0FTVF9IT1BTIDE2CiAjZGVmaW5lIElQVjZfTVVMVElDQVNUX0lGIDE3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X01VTFRJQ0FTVF9IT1BTIDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X01VTFRJQ0FTVF9MT09QIDE5CiAjZGVmaW5lIElQVjZfQUREX01FTUJFUlNISVAgMjAKICNkZWZpbmUgSVBWNl9EUk9QX01FTUJFUlNISVAgMjEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfUk9VVEVSX0FMRVJUIDIyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X01UVV9ESVNDT1ZFUiAyMwogI2RlZmluZSBJUFY2X01UVSAyNAogI2RlZmluZSBJUFY2X1JFQ1ZFUlIgMjUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfVjZPTkxZIDI2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X0pPSU5fQU5ZQ0FTVCAyNwogI2RlZmluZSBJUFY2X0xFQVZFX0FOWUNBU1QgMjgKICNkZWZpbmUgSVBWNl9QTVRVRElTQ19ET05UIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfUE1UVURJU0NfV0FOVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X1BNVFVESVNDX0RPIDIKICNkZWZpbmUgSVBWNl9QTVRVRElTQ19QUk9CRSAzCisjZGVmaW5lIElQVjZfUE1UVURJU0NfSU5URVJGQUNFIDQKICNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUdSIDMyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X0ZMT1dJTkZPX1NFTkQgMzMKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaW5wdXQuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaW5wdXQuaAppbmRleCBjN2NmOTMyLi5iOWQ1YjJhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lucHV0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pbnB1dC5oCkBAIC04OSwxNSArODksMTUgQEAKICNkZWZpbmUgRVZJT0NSTUZGIF9JT1coJ0UnLCAweDgxLCBpbnQpCiAjZGVmaW5lIEVWSU9DR0VGRkVDVFMgX0lPUignRScsIDB4ODQsIGludCkKICNkZWZpbmUgRVZJT0NHUkFCIF9JT1coJ0UnLCAweDkwLCBpbnQpCi0jZGVmaW5lIEVWSU9DR1NVU1BFTkRCTE9DSyBfSU9SKCdFJywgMHg5MSwgaW50KQorI2RlZmluZSBFVklPQ1JFVk9LRSBfSU9XKCdFJywgMHg5MSwgaW50KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRVZJT0NTU1VTUEVOREJMT0NLIF9JT1coJ0UnLCAweDkxLCBpbnQpCiAjZGVmaW5lIEVWSU9DU0NMT0NLSUQgX0lPVygnRScsIDB4YTAsIGludCkKICNkZWZpbmUgSU5QVVRfUFJPUF9QT0lOVEVSIDB4MDAKICNkZWZpbmUgSU5QVVRfUFJPUF9ESVJFQ1QgMHgwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5QVVRfUFJPUF9CVVRUT05QQUQgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5QVVRfUFJPUF9TRU1JX01UIDB4MDMKKyNkZWZpbmUgSU5QVVRfUFJPUF9UT1BCVVRUT05QQUQgMHgwNAogI2RlZmluZSBJTlBVVF9QUk9QX01BWCAweDFmCiAjZGVmaW5lIElOUFVUX1BST1BfQ05UIChJTlBVVF9QUk9QX01BWCArIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtMTIzLDMxMCArMTIzLDMxNSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1lOX01UX1JFUE9SVCAyCiAjZGVmaW5lIFNZTl9EUk9QUEVEIDMKKyNkZWZpbmUgU1lOX01BWCAweGYKKyNkZWZpbmUgU1lOX0NOVCAoU1lOX01BWCsxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1JFU0VSVkVEIDAKICNkZWZpbmUgS0VZX0VTQyAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfMSAyCiAjZGVmaW5lIEtFWV8yIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV8zIDQKICNkZWZpbmUgS0VZXzQgNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZXzUgNgogI2RlZmluZSBLRVlfNiA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfNyA4CiAjZGVmaW5lIEtFWV84IDkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV85IDEwCiAjZGVmaW5lIEtFWV8wIDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTUlOVVMgMTIKICNkZWZpbmUgS0VZX0VRVUFMIDEzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQkFDS1NQQUNFIDE0CiAjZGVmaW5lIEtFWV9UQUIgMTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9RIDE2CiAjZGVmaW5lIEtFWV9XIDE3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRSAxOAogI2RlZmluZSBLRVlfUiAxOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1QgMjAKICNkZWZpbmUgS0VZX1kgMjEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9VIDIyCiAjZGVmaW5lIEtFWV9JIDIzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTyAyNAogI2RlZmluZSBLRVlfUCAyNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0xFRlRCUkFDRSAyNgogI2RlZmluZSBLRVlfUklHSFRCUkFDRSAyNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0VOVEVSIDI4CiAjZGVmaW5lIEtFWV9MRUZUQ1RSTCAyOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0EgMzAKICNkZWZpbmUgS0VZX1MgMzEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9EIDMyCiAjZGVmaW5lIEtFWV9GIDMzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRyAzNAogI2RlZmluZSBLRVlfSCAzNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0ogMzYKICNkZWZpbmUgS0VZX0sgMzcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9MIDM4CiAjZGVmaW5lIEtFWV9TRU1JQ09MT04gMzkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9BUE9TVFJPUEhFIDQwCiAjZGVmaW5lIEtFWV9HUkFWRSA0MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0xFRlRTSElGVCA0MgogI2RlZmluZSBLRVlfQkFDS1NMQVNIIDQzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfWiA0NAogI2RlZmluZSBLRVlfWCA0NQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0MgNDYKICNkZWZpbmUgS0VZX1YgNDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9CIDQ4CiAjZGVmaW5lIEtFWV9OIDQ5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTSA1MAogI2RlZmluZSBLRVlfQ09NTUEgNTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9ET1QgNTIKICNkZWZpbmUgS0VZX1NMQVNIIDUzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUklHSFRTSElGVCA1NAogI2RlZmluZSBLRVlfS1BBU1RFUklTSyA1NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0xFRlRBTFQgNTYKICNkZWZpbmUgS0VZX1NQQUNFIDU3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ0FQU0xPQ0sgNTgKICNkZWZpbmUgS0VZX0YxIDU5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjIgNjAKICNkZWZpbmUgS0VZX0YzIDYxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjQgNjIKICNkZWZpbmUgS0VZX0Y1IDYzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjYgNjQKICNkZWZpbmUgS0VZX0Y3IDY1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjggNjYKICNkZWZpbmUgS0VZX0Y5IDY3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjEwIDY4CiAjZGVmaW5lIEtFWV9OVU1MT0NLIDY5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfU0NST0xMTE9DSyA3MAogI2RlZmluZSBLRVlfS1A3IDcxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1A4IDcyCiAjZGVmaW5lIEtFWV9LUDkgNzMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9LUE1JTlVTIDc0CiAjZGVmaW5lIEtFWV9LUDQgNzUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9LUDUgNzYKICNkZWZpbmUgS0VZX0tQNiA3NwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0tQUExVUyA3OAogI2RlZmluZSBLRVlfS1AxIDc5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1AyIDgwCiAjZGVmaW5lIEtFWV9LUDMgODEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9LUDAgODIKICNkZWZpbmUgS0VZX0tQRE9UIDgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfWkVOS0FLVUhBTktBS1UgODUKICNkZWZpbmUgS0VZXzEwMk5EIDg2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjExIDg3CiAjZGVmaW5lIEtFWV9GMTIgODgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9STyA4OQogI2RlZmluZSBLRVlfS0FUQUtBTkEgOTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9ISVJBR0FOQSA5MQogI2RlZmluZSBLRVlfSEVOS0FOIDkyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS0FUQUtBTkFISVJBR0FOQSA5MwogI2RlZmluZSBLRVlfTVVIRU5LQU4gOTQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9LUEpQQ09NTUEgOTUKICNkZWZpbmUgS0VZX0tQRU5URVIgOTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9SSUdIVENUUkwgOTcKICNkZWZpbmUgS0VZX0tQU0xBU0ggOTgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9TWVNSUSA5OQogI2RlZmluZSBLRVlfUklHSFRBTFQgMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTElORUZFRUQgMTAxCiAjZGVmaW5lIEtFWV9IT01FIDEwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1VQIDEwMwogI2RlZmluZSBLRVlfUEFHRVVQIDEwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0xFRlQgMTA1CiAjZGVmaW5lIEtFWV9SSUdIVCAxMDYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9FTkQgMTA3CiAjZGVmaW5lIEtFWV9ET1dOIDEwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1BBR0VET1dOIDEwOQogI2RlZmluZSBLRVlfSU5TRVJUIDExMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0RFTEVURSAxMTEKICNkZWZpbmUgS0VZX01BQ1JPIDExMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX01VVEUgMTEzCiAjZGVmaW5lIEtFWV9WT0xVTUVET1dOIDExNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1ZPTFVNRVVQIDExNQogI2RlZmluZSBLRVlfUE9XRVIgMTE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1BFUVVBTCAxMTcKICNkZWZpbmUgS0VZX0tQUExVU01JTlVTIDExOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1BBVVNFIDExOQogI2RlZmluZSBLRVlfU0NBTEUgMTIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1BDT01NQSAxMjEKICNkZWZpbmUgS0VZX0hBTkdFVUwgMTIyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfSEFOR1VFTCBLRVlfSEFOR0VVTAogI2RlZmluZSBLRVlfSEFOSkEgMTIzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfWUVOIDEyNAogI2RlZmluZSBLRVlfTEVGVE1FVEEgMTI1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUklHSFRNRVRBIDEyNgogI2RlZmluZSBLRVlfQ09NUE9TRSAxMjcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9TVE9QIDEyOAogI2RlZmluZSBLRVlfQUdBSU4gMTI5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUFJPUFMgMTMwCiAjZGVmaW5lIEtFWV9VTkRPIDEzMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0ZST05UIDEzMgogI2RlZmluZSBLRVlfQ09QWSAxMzMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9PUEVOIDEzNAogI2RlZmluZSBLRVlfUEFTVEUgMTM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRklORCAxMzYKICNkZWZpbmUgS0VZX0NVVCAxMzcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9IRUxQIDEzOAogI2RlZmluZSBLRVlfTUVOVSAxMzkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9DQUxDIDE0MAogI2RlZmluZSBLRVlfU0VUVVAgMTQxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfU0xFRVAgMTQyCiAjZGVmaW5lIEtFWV9XQUtFVVAgMTQzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRklMRSAxNDQKICNkZWZpbmUgS0VZX1NFTkRGSUxFIDE0NQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0RFTEVURUZJTEUgMTQ2CiAjZGVmaW5lIEtFWV9YRkVSIDE0NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1BST0cxIDE0OAogI2RlZmluZSBLRVlfUFJPRzIgMTQ5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfV1dXIDE1MAogI2RlZmluZSBLRVlfTVNET1MgMTUxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ09GRkVFIDE1MgogI2RlZmluZSBLRVlfU0NSRUVOTE9DSyBLRVlfQ09GRkVFCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRElSRUNUSU9OIDE1MwogI2RlZmluZSBLRVlfQ1lDTEVXSU5ET1dTIDE1NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX01BSUwgMTU1CiAjZGVmaW5lIEtFWV9CT09LTUFSS1MgMTU2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ09NUFVURVIgMTU3CiAjZGVmaW5lIEtFWV9CQUNLIDE1OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0ZPUldBUkQgMTU5CiAjZGVmaW5lIEtFWV9DTE9TRUNEIDE2MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0VKRUNUQ0QgMTYxCiAjZGVmaW5lIEtFWV9FSkVDVENMT1NFQ0QgMTYyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTkVYVFNPTkcgMTYzCiAjZGVmaW5lIEtFWV9QTEFZUEFVU0UgMTY0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUFJFVklPVVNTT05HIDE2NQogI2RlZmluZSBLRVlfU1RPUENEIDE2NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1JFQ09SRCAxNjcKICNkZWZpbmUgS0VZX1JFV0lORCAxNjgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9QSE9ORSAxNjkKICNkZWZpbmUgS0VZX0lTTyAxNzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9DT05GSUcgMTcxCiAjZGVmaW5lIEtFWV9IT01FUEFHRSAxNzIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9SRUZSRVNIIDE3MwogI2RlZmluZSBLRVlfRVhJVCAxNzQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9NT1ZFIDE3NQogI2RlZmluZSBLRVlfRURJVCAxNzYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9TQ1JPTExVUCAxNzcKICNkZWZpbmUgS0VZX1NDUk9MTERPV04gMTc4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1BMRUZUUEFSRU4gMTc5CiAjZGVmaW5lIEtFWV9LUFJJR0hUUEFSRU4gMTgwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTkVXIDE4MQogI2RlZmluZSBLRVlfUkVETyAxODIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9GMTMgMTgzCiAjZGVmaW5lIEtFWV9GMTQgMTg0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjE1IDE4NQogI2RlZmluZSBLRVlfRjE2IDE4NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0YxNyAxODcKICNkZWZpbmUgS0VZX0YxOCAxODgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9GMTkgMTg5CiAjZGVmaW5lIEtFWV9GMjAgMTkwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjIxIDE5MQogI2RlZmluZSBLRVlfRjIyIDE5MgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0YyMyAxOTMKICNkZWZpbmUgS0VZX0YyNCAxOTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9QTEFZQ0QgMjAwCiAjZGVmaW5lIEtFWV9QQVVTRUNEIDIwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1BST0czIDIwMgogI2RlZmluZSBLRVlfUFJPRzQgMjAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfREFTSEJPQVJEIDIwNAogI2RlZmluZSBLRVlfU1VTUEVORCAyMDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9DTE9TRSAyMDYKICNkZWZpbmUgS0VZX1BMQVkgMjA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRkFTVEZPUldBUkQgMjA4CiAjZGVmaW5lIEtFWV9CQVNTQk9PU1QgMjA5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUFJJTlQgMjEwCiAjZGVmaW5lIEtFWV9IUCAyMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9DQU1FUkEgMjEyCiAjZGVmaW5lIEtFWV9TT1VORCAyMTMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9RVUVTVElPTiAyMTQKICNkZWZpbmUgS0VZX0VNQUlMIDIxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0NIQVQgMjE2CiAjZGVmaW5lIEtFWV9TRUFSQ0ggMjE3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ09OTkVDVCAyMTgKICNkZWZpbmUgS0VZX0ZJTkFOQ0UgMjE5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfU1BPUlQgMjIwCiAjZGVmaW5lIEtFWV9TSE9QIDIyMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0FMVEVSQVNFIDIyMgogI2RlZmluZSBLRVlfQ0FOQ0VMIDIyMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0JSSUdIVE5FU1NET1dOIDIyNAogI2RlZmluZSBLRVlfQlJJR0hUTkVTU1VQIDIyNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX01FRElBIDIyNgogI2RlZmluZSBLRVlfU1dJVENIVklERU9NT0RFIDIyNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0tCRElMTFVNVE9HR0xFIDIyOAogI2RlZmluZSBLRVlfS0JESUxMVU1ET1dOIDIyOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0tCRElMTFVNVVAgMjMwCiAjZGVmaW5lIEtFWV9TRU5EIDIzMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1JFUExZIDIzMgogI2RlZmluZSBLRVlfRk9SV0FSRE1BSUwgMjMzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfU0FWRSAyMzQKICNkZWZpbmUgS0VZX0RPQ1VNRU5UUyAyMzUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9CQVRURVJZIDIzNgogI2RlZmluZSBLRVlfQkxVRVRPT1RIIDIzNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1dMQU4gMjM4CiAjZGVmaW5lIEtFWV9VV0IgMjM5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfVU5LTk9XTiAyNDAKICNkZWZpbmUgS0VZX1ZJREVPX05FWFQgMjQxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfVklERU9fUFJFViAyNDIKICNkZWZpbmUgS0VZX0JSSUdIVE5FU1NfQ1lDTEUgMjQzCi0jZGVmaW5lIEtFWV9CUklHSFRORVNTX1pFUk8gMjQ0Ci0jZGVmaW5lIEtFWV9ESVNQTEFZX09GRiAyNDUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtFWV9XSU1BWCAyNDYKKyNkZWZpbmUgS0VZX0JSSUdIVE5FU1NfQVVUTyAyNDQKKyNkZWZpbmUgS0VZX0JSSUdIVE5FU1NfWkVSTyBLRVlfQlJJR0hUTkVTU19BVVRPCisjZGVmaW5lIEtFWV9ESVNQTEFZX09GRiAyNDUKKyNkZWZpbmUgS0VZX1dXQU4gMjQ2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfV0lNQVggS0VZX1dXQU4KICNkZWZpbmUgS0VZX1JGS0lMTCAyNDcKICNkZWZpbmUgS0VZX01JQ01VVEUgMjQ4CiAjZGVmaW5lIEJUTl9NSVNDIDB4MTAwCkBAIC00NzMsMTIgKzQ3OCwxNyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX0RFQUQgMHgxMmYKICNkZWZpbmUgQlROX0dBTUVQQUQgMHgxMzAKLSNkZWZpbmUgQlROX0EgMHgxMzAKLSNkZWZpbmUgQlROX0IgMHgxMzEKKyNkZWZpbmUgQlROX1NPVVRIIDB4MTMwCisjZGVmaW5lIEJUTl9BIEJUTl9TT1VUSAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQlROX0VBU1QgMHgxMzEKKyNkZWZpbmUgQlROX0IgQlROX0VBU1QKICNkZWZpbmUgQlROX0MgMHgxMzIKLSNkZWZpbmUgQlROX1ggMHgxMzMKLSNkZWZpbmUgQlROX1kgMHgxMzQKKyNkZWZpbmUgQlROX05PUlRIIDB4MTMzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCVE5fWCBCVE5fTk9SVEgKKyNkZWZpbmUgQlROX1dFU1QgMHgxMzQKKyNkZWZpbmUgQlROX1kgQlROX1dFU1QKICNkZWZpbmUgQlROX1ogMHgxMzUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UTCAweDEzNgpAQCAtNjE2LDIzOSArNjI2LDI1OSBAQAogI2RlZmluZSBLRVlfTUVTU0VOR0VSIDB4MWFlCiAjZGVmaW5lIEtFWV9ESVNQTEFZVE9HR0xFIDB4MWFmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfQlJJR0hUTkVTU19UT0dHTEUgS0VZX0RJU1BMQVlUT0dHTEUKICNkZWZpbmUgS0VZX1NQRUxMQ0hFQ0sgMHgxYjAKICNkZWZpbmUgS0VZX0xPR09GRiAweDFiMQogI2RlZmluZSBLRVlfRE9MTEFSIDB4MWIyCi0jZGVmaW5lIEtFWV9FVVJPIDB4MWIzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfRVVSTyAweDFiMwogI2RlZmluZSBLRVlfRlJBTUVCQUNLIDB4MWI0CiAjZGVmaW5lIEtFWV9GUkFNRUZPUldBUkQgMHgxYjUKICNkZWZpbmUgS0VZX0NPTlRFWFRfTUVOVSAweDFiNgotI2RlZmluZSBLRVlfTUVESUFfUkVQRUFUIDB4MWI3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfTUVESUFfUkVQRUFUIDB4MWI3CiAjZGVmaW5lIEtFWV8xMENIQU5ORUxTVVAgMHgxYjgKICNkZWZpbmUgS0VZXzEwQ0hBTk5FTFNET1dOIDB4MWI5CiAjZGVmaW5lIEtFWV9JTUFHRVMgMHgxYmEKLSNkZWZpbmUgS0VZX0RFTF9FT0wgMHgxYzAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9ERUxfRU9MIDB4MWMwCiAjZGVmaW5lIEtFWV9ERUxfRU9TIDB4MWMxCiAjZGVmaW5lIEtFWV9JTlNfTElORSAweDFjMgogI2RlZmluZSBLRVlfREVMX0xJTkUgMHgxYzMKLSNkZWZpbmUgS0VZX0ZOIDB4MWQwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfRk4gMHgxZDAKICNkZWZpbmUgS0VZX0ZOX0VTQyAweDFkMQogI2RlZmluZSBLRVlfRk5fRjEgMHgxZDIKICNkZWZpbmUgS0VZX0ZOX0YyIDB4MWQzCi0jZGVmaW5lIEtFWV9GTl9GMyAweDFkNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX0ZOX0YzIDB4MWQ0CiAjZGVmaW5lIEtFWV9GTl9GNCAweDFkNQogI2RlZmluZSBLRVlfRk5fRjUgMHgxZDYKICNkZWZpbmUgS0VZX0ZOX0Y2IDB4MWQ3Ci0jZGVmaW5lIEtFWV9GTl9GNyAweDFkOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX0ZOX0Y3IDB4MWQ4CiAjZGVmaW5lIEtFWV9GTl9GOCAweDFkOQogI2RlZmluZSBLRVlfRk5fRjkgMHgxZGEKICNkZWZpbmUgS0VZX0ZOX0YxMCAweDFkYgotI2RlZmluZSBLRVlfRk5fRjExIDB4MWRjCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfRk5fRjExIDB4MWRjCiAjZGVmaW5lIEtFWV9GTl9GMTIgMHgxZGQKICNkZWZpbmUgS0VZX0ZOXzEgMHgxZGUKICNkZWZpbmUgS0VZX0ZOXzIgMHgxZGYKLSNkZWZpbmUgS0VZX0ZOX0QgMHgxZTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9GTl9EIDB4MWUwCiAjZGVmaW5lIEtFWV9GTl9FIDB4MWUxCiAjZGVmaW5lIEtFWV9GTl9GIDB4MWUyCiAjZGVmaW5lIEtFWV9GTl9TIDB4MWUzCi0jZGVmaW5lIEtFWV9GTl9CIDB4MWU0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfRk5fQiAweDFlNAogI2RlZmluZSBLRVlfQlJMX0RPVDEgMHgxZjEKICNkZWZpbmUgS0VZX0JSTF9ET1QyIDB4MWYyCiAjZGVmaW5lIEtFWV9CUkxfRE9UMyAweDFmMwotI2RlZmluZSBLRVlfQlJMX0RPVDQgMHgxZjQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9CUkxfRE9UNCAweDFmNAogI2RlZmluZSBLRVlfQlJMX0RPVDUgMHgxZjUKICNkZWZpbmUgS0VZX0JSTF9ET1Q2IDB4MWY2CiAjZGVmaW5lIEtFWV9CUkxfRE9UNyAweDFmNwotI2RlZmluZSBLRVlfQlJMX0RPVDggMHgxZjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9CUkxfRE9UOCAweDFmOAogI2RlZmluZSBLRVlfQlJMX0RPVDkgMHgxZjkKICNkZWZpbmUgS0VZX0JSTF9ET1QxMCAweDFmYQogI2RlZmluZSBLRVlfTlVNRVJJQ18wIDB4MjAwCi0jZGVmaW5lIEtFWV9OVU1FUklDXzEgMHgyMDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtFWV9OVU1FUklDXzEgMHgyMDEKICNkZWZpbmUgS0VZX05VTUVSSUNfMiAweDIwMgogI2RlZmluZSBLRVlfTlVNRVJJQ18zIDB4MjAzCiAjZGVmaW5lIEtFWV9OVU1FUklDXzQgMHgyMDQKLSNkZWZpbmUgS0VZX05VTUVSSUNfNSAweDIwNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX05VTUVSSUNfNSAweDIwNQogI2RlZmluZSBLRVlfTlVNRVJJQ182IDB4MjA2CiAjZGVmaW5lIEtFWV9OVU1FUklDXzcgMHgyMDcKICNkZWZpbmUgS0VZX05VTUVSSUNfOCAweDIwOAotI2RlZmluZSBLRVlfTlVNRVJJQ185IDB4MjA5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfTlVNRVJJQ185IDB4MjA5CiAjZGVmaW5lIEtFWV9OVU1FUklDX1NUQVIgMHgyMGEKICNkZWZpbmUgS0VZX05VTUVSSUNfUE9VTkQgMHgyMGIKICNkZWZpbmUgS0VZX0NBTUVSQV9GT0NVUyAweDIxMAotI2RlZmluZSBLRVlfV1BTX0JVVFRPTiAweDIxMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX1dQU19CVVRUT04gMHgyMTEKICNkZWZpbmUgS0VZX1RPVUNIUEFEX1RPR0dMRSAweDIxMgogI2RlZmluZSBLRVlfVE9VQ0hQQURfT04gMHgyMTMKICNkZWZpbmUgS0VZX1RPVUNIUEFEX09GRiAweDIxNAotI2RlZmluZSBLRVlfQ0FNRVJBX1pPT01JTiAweDIxNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX0NBTUVSQV9aT09NSU4gMHgyMTUKICNkZWZpbmUgS0VZX0NBTUVSQV9aT09NT1VUIDB4MjE2CiAjZGVmaW5lIEtFWV9DQU1FUkFfVVAgMHgyMTcKICNkZWZpbmUgS0VZX0NBTUVSQV9ET1dOIDB4MjE4Ci0jZGVmaW5lIEtFWV9DQU1FUkFfTEVGVCAweDIxOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX0NBTUVSQV9MRUZUIDB4MjE5CiAjZGVmaW5lIEtFWV9DQU1FUkFfUklHSFQgMHgyMWEKICNkZWZpbmUgS0VZX0FUVEVOREFOVF9PTiAweDIxYgogI2RlZmluZSBLRVlfQVRURU5EQU5UX09GRiAweDIxYwotI2RlZmluZSBLRVlfQVRURU5EQU5UX1RPR0dMRSAweDIxZAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VZX0FUVEVOREFOVF9UT0dHTEUgMHgyMWQKICNkZWZpbmUgS0VZX0xJR0hUU19UT0dHTEUgMHgyMWUKKyNkZWZpbmUgQlROX0RQQURfVVAgMHgyMjAKKyNkZWZpbmUgQlROX0RQQURfRE9XTiAweDIyMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQlROX0RQQURfTEVGVCAweDIyMgorI2RlZmluZSBCVE5fRFBBRF9SSUdIVCAweDIyMworI2RlZmluZSBLRVlfQUxTX1RPR0dMRSAweDIzMAorI2RlZmluZSBLRVlfQlVUVE9OQ09ORklHIDB4MjQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfVEFTS01BTkFHRVIgMHgyNDEKKyNkZWZpbmUgS0VZX0pPVVJOQUwgMHgyNDIKKyNkZWZpbmUgS0VZX0NPTlRST0xQQU5FTCAweDI0MworI2RlZmluZSBLRVlfQVBQU0VMRUNUIDB4MjQ0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVlfU0NSRUVOU0FWRVIgMHgyNDUKKyNkZWZpbmUgS0VZX1ZPSUNFQ09NTUFORCAweDI0NgorI2RlZmluZSBLRVlfQlJJR0hUTkVTU19NSU4gMHgyNTAKKyNkZWZpbmUgS0VZX0JSSUdIVE5FU1NfTUFYIDB4MjUxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWSAweDJjMAogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTEgMHgyYzAKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyIDB4MmMxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTMgMHgyYzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNCAweDJjMwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTUgMHgyYzQKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk2IDB4MmM1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTcgMHgyYzYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZOCAweDJjNwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTkgMHgyYzgKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMCAweDJjOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMSAweDJjYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMiAweDJjYgogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTEzIDB4MmNjCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTQgMHgyY2QKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTUgMHgyY2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTYgMHgyY2YKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNyAweDJkMAogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE4IDB4MmQxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE5IDB4MmQyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIwIDB4MmQzCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjEgMHgyZDQKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMiAweDJkNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMyAweDJkNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNCAweDJkNwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI1IDB4MmQ4CiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjYgMHgyZDkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjcgMHgyZGEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjggMHgyZGIKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyOSAweDJkYwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTMwIDB4MmRkCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTMxIDB4MmRlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTMyIDB4MmRmCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzMgMHgyZTAKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNCAweDJlMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNSAweDJlMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNiAweDJlMwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTM3IDB4MmU0CiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzggMHgyZTUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzkgMHgyZTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNDAgMHgyZTcKICNkZWZpbmUgS0VZX01JTl9JTlRFUkVTVElORyBLRVlfTVVURQogI2RlZmluZSBLRVlfTUFYIDB4MmZmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ05UIChLRVlfTUFYKzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSRUxfWCAweDAwCiAjZGVmaW5lIFJFTF9ZIDB4MDEKICNkZWZpbmUgUkVMX1ogMHgwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkVMX1JYIDB4MDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJFTF9SWSAweDA0CiAjZGVmaW5lIFJFTF9SWiAweDA1CiAjZGVmaW5lIFJFTF9IV0hFRUwgMHgwNgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkVMX0RJQUwgMHgwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkVMX1dIRUVMIDB4MDgKICNkZWZpbmUgUkVMX01JU0MgMHgwOQogI2RlZmluZSBSRUxfTUFYIDB4MGYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJFTF9DTlQgKFJFTF9NQVgrMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19YIDB4MDAKICNkZWZpbmUgQUJTX1kgMHgwMQogI2RlZmluZSBBQlNfWiAweDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfUlggMHgwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX1JZIDB4MDQKICNkZWZpbmUgQUJTX1JaIDB4MDUKICNkZWZpbmUgQUJTX1RIUk9UVExFIDB4MDYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19SVURERVIgMHgwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX1dIRUVMIDB4MDgKICNkZWZpbmUgQUJTX0dBUyAweDA5CiAjZGVmaW5lIEFCU19CUkFLRSAweDBhCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfSEFUMFggMHgxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX0hBVDBZIDB4MTEKICNkZWZpbmUgQUJTX0hBVDFYIDB4MTIKICNkZWZpbmUgQUJTX0hBVDFZIDB4MTMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19IQVQyWCAweDE0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfSEFUMlkgMHgxNQogI2RlZmluZSBBQlNfSEFUM1ggMHgxNgogI2RlZmluZSBBQlNfSEFUM1kgMHgxNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX1BSRVNTVVJFIDB4MTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19ESVNUQU5DRSAweDE5CiAjZGVmaW5lIEFCU19USUxUX1ggMHgxYQogI2RlZmluZSBBQlNfVElMVF9ZIDB4MWIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19UT09MX1dJRFRIIDB4MWMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19WT0xVTUUgMHgyMAogI2RlZmluZSBBQlNfTUlTQyAweDI4CiAjZGVmaW5lIEFCU19NVF9TTE9UIDB4MmYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19NVF9UT1VDSF9NQUpPUiAweDMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfTVRfVE9VQ0hfTUlOT1IgMHgzMQogI2RlZmluZSBBQlNfTVRfV0lEVEhfTUFKT1IgMHgzMgogI2RlZmluZSBBQlNfTVRfV0lEVEhfTUlOT1IgMHgzMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX01UX09SSUVOVEFUSU9OIDB4MzQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19NVF9QT1NJVElPTl9YIDB4MzUKICNkZWZpbmUgQUJTX01UX1BPU0lUSU9OX1kgMHgzNgogI2RlZmluZSBBQlNfTVRfVE9PTF9UWVBFIDB4MzcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19NVF9CTE9CX0lEIDB4MzgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19NVF9UUkFDS0lOR19JRCAweDM5CiAjZGVmaW5lIEFCU19NVF9QUkVTU1VSRSAweDNhCiAjZGVmaW5lIEFCU19NVF9ESVNUQU5DRSAweDNiCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfTVRfVE9PTF9YIDB4M2MKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19NVF9UT09MX1kgMHgzZAogI2RlZmluZSBBQlNfTUFYIDB4M2YKICNkZWZpbmUgQUJTX0NOVCAoQUJTX01BWCsxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1dfTElEIDB4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNXX1RBQkxFVF9NT0RFIDB4MDEKICNkZWZpbmUgU1dfSEVBRFBIT05FX0lOU0VSVCAweDAyCiAjZGVmaW5lIFNXX1JGS0lMTF9BTEwgMHgwMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1dfUkFESU8gU1dfUkZLSUxMX0FMTAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1dfTUlDUk9QSE9ORV9JTlNFUlQgMHgwNAogI2RlZmluZSBTV19ET0NLIDB4MDUKICNkZWZpbmUgU1dfTElORU9VVF9JTlNFUlQgMHgwNgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQgMHgwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1dfVklERU9PVVRfSU5TRVJUIDB4MDgKICNkZWZpbmUgU1dfQ0FNRVJBX0xFTlNfQ09WRVIgMHgwOQogI2RlZmluZSBTV19LRVlQQURfU0xJREUgMHgwYQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1dfRlJPTlRfUFJPWElNSVRZIDB4MGIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNXX1JPVEFURV9MT0NLIDB4MGMKICNkZWZpbmUgU1dfTElORUlOX0lOU0VSVCAweDBkCisjZGVmaW5lIFNXX01VVEVfREVWSUNFIDB4MGUKICNkZWZpbmUgU1dfTUFYIDB4MGYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNXX0NOVCAoU1dfTUFYKzEpCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lvbi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pb24uaAppbmRleCBmMTg5MzlkLi41YWYzOWQwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lvbi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaW9uLmgKQEAgLTE2LDU2ICsxNiw2MyBAQAogICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfTElOVVhfSU9OX0gKLSNkZWZpbmUgX0xJTlVYX0lPTl9ICisjaWZuZGVmIF9VQVBJX0xJTlVYX0lPTl9ICisjZGVmaW5lIF9VQVBJX0xJTlVYX0lPTl9ICisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotc3RydWN0IGlvbl9oYW5kbGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBpbnQgaW9uX3VzZXJfaGFuZGxlX3Q7CiBlbnVtIGlvbl9oZWFwX3R5cGUgewogIElPTl9IRUFQX1RZUEVfU1lTVEVNLAogIElPTl9IRUFQX1RZUEVfU1lTVEVNX0NPTlRJRywKLSBJT05fSEVBUF9UWVBFX0NBUlZFT1VULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJT05fSEVBUF9UWVBFX0NBUlZFT1VULAorIElPTl9IRUFQX1RZUEVfQ0hVTkssCisgSU9OX0hFQVBfVFlQRV9ETUEsCiAgSU9OX0hFQVBfVFlQRV9DVVNUT00sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElPTl9OVU1fSEVBUFMgPSAxNiwKIH07CiAjZGVmaW5lIElPTl9IRUFQX1NZU1RFTV9NQVNLICgxIDw8IElPTl9IRUFQX1RZUEVfU1lTVEVNKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU9OX0hFQVBfU1lTVEVNX0NPTlRJR19NQVNLICgxIDw8IElPTl9IRUFQX1RZUEVfU1lTVEVNX0NPTlRJRykKLSNkZWZpbmUgSU9OX0hFQVBfQ0FSVkVPVVRfTUFTSyAoMSA8PCBJT05fSEVBUF9UWVBFX0NBUlZFT1VUKQotI2RlZmluZSBJT05fRkxBR19DQUNIRUQgMQotI2RlZmluZSBJT05fRkxBR19DQUNIRURfTkVFRFNfU1lOQyAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT05fSEVBUF9DQVJWRU9VVF9NQVNLICgxIDw8IElPTl9IRUFQX1RZUEVfQ0FSVkVPVVQpCisjZGVmaW5lIElPTl9IRUFQX1RZUEVfRE1BX01BU0sgKDEgPDwgSU9OX0hFQVBfVFlQRV9ETUEpCisjZGVmaW5lIElPTl9OVU1fSEVBUF9JRFMgc2l6ZW9mKHVuc2lnbmVkIGludCkgKiA4CisjZGVmaW5lIElPTl9GTEFHX0NBQ0hFRCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT05fRkxBR19DQUNIRURfTkVFRFNfU1lOQyAyCiBzdHJ1Y3QgaW9uX2FsbG9jYXRpb25fZGF0YSB7CiAgc2l6ZV90IGxlbjsKICBzaXplX3QgYWxpZ247Ci0gdW5zaWduZWQgaW50IGhlYXBfbWFzazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgaW50IGhlYXBfaWRfbWFzazsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0gc3RydWN0IGlvbl9oYW5kbGUgKmhhbmRsZTsKKyBpb25fdXNlcl9oYW5kbGVfdCBoYW5kbGU7CiB9Owotc3RydWN0IGlvbl9mZF9kYXRhIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gc3RydWN0IGlvbl9oYW5kbGUgKmhhbmRsZTsKK3N0cnVjdCBpb25fZmRfZGF0YSB7CisgaW9uX3VzZXJfaGFuZGxlX3QgaGFuZGxlOwogIGludCBmZDsKIH07Ci1zdHJ1Y3QgaW9uX2hhbmRsZV9kYXRhIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gc3RydWN0IGlvbl9oYW5kbGUgKmhhbmRsZTsKK3N0cnVjdCBpb25faGFuZGxlX2RhdGEgeworIGlvbl91c2VyX2hhbmRsZV90IGhhbmRsZTsKIH07CiBzdHJ1Y3QgaW9uX2N1c3RvbV9kYXRhIHsKLSB1bnNpZ25lZCBpbnQgY21kOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgY21kOwogIHVuc2lnbmVkIGxvbmcgYXJnOwogfTsKICNkZWZpbmUgSU9OX0lPQ19NQUdJQyAnSScKLSNkZWZpbmUgSU9OX0lPQ19BTExPQyBfSU9XUihJT05fSU9DX01BR0lDLCAwLCAgIHN0cnVjdCBpb25fYWxsb2NhdGlvbl9kYXRhKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9OX0lPQ19BTExPQyBfSU9XUihJT05fSU9DX01BR0lDLCAwLCAgIHN0cnVjdCBpb25fYWxsb2NhdGlvbl9kYXRhKQogI2RlZmluZSBJT05fSU9DX0ZSRUUgX0lPV1IoSU9OX0lPQ19NQUdJQywgMSwgc3RydWN0IGlvbl9oYW5kbGVfZGF0YSkKICNkZWZpbmUgSU9OX0lPQ19NQVAgX0lPV1IoSU9OX0lPQ19NQUdJQywgMiwgc3RydWN0IGlvbl9mZF9kYXRhKQogI2RlZmluZSBJT05fSU9DX1NIQVJFIF9JT1dSKElPTl9JT0NfTUFHSUMsIDQsIHN0cnVjdCBpb25fZmRfZGF0YSkKLSNkZWZpbmUgSU9OX0lPQ19JTVBPUlQgX0lPV1IoSU9OX0lPQ19NQUdJQywgNSwgc3RydWN0IGlvbl9mZF9kYXRhKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9OX0lPQ19JTVBPUlQgX0lPV1IoSU9OX0lPQ19NQUdJQywgNSwgc3RydWN0IGlvbl9mZF9kYXRhKQogI2RlZmluZSBJT05fSU9DX1NZTkMgX0lPV1IoSU9OX0lPQ19NQUdJQywgNywgc3RydWN0IGlvbl9mZF9kYXRhKQogI2RlZmluZSBJT05fSU9DX0NVU1RPTSBfSU9XUihJT05fSU9DX01BR0lDLCA2LCBzdHJ1Y3QgaW9uX2N1c3RvbV9kYXRhKQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pcC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pcC5oCmluZGV4IGU5MzYzMzEuLmZjMGJkNzggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvaXAuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lwLmgKQEAgLTEzOSw1ICsxMzksNDYgQEAKICBfX3U4IHBhZGxlbjsKICBfX3U4IHJlc2VydmVkOwogfTsKLSNlbmRpZgorZW51bQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3sKKyBJUFY0X0RFVkNPTkZfRk9SV0FSRElORz0xLAorIElQVjRfREVWQ09ORl9NQ19GT1JXQVJESU5HLAorIElQVjRfREVWQ09ORl9QUk9YWV9BUlAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQVjRfREVWQ09ORl9BQ0NFUFRfUkVESVJFQ1RTLAorIElQVjRfREVWQ09ORl9TRUNVUkVfUkVESVJFQ1RTLAorIElQVjRfREVWQ09ORl9TRU5EX1JFRElSRUNUUywKKyBJUFY0X0RFVkNPTkZfU0hBUkVEX01FRElBLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFY0X0RFVkNPTkZfUlBfRklMVEVSLAorIElQVjRfREVWQ09ORl9BQ0NFUFRfU09VUkNFX1JPVVRFLAorIElQVjRfREVWQ09ORl9CT09UUF9SRUxBWSwKKyBJUFY0X0RFVkNPTkZfTE9HX01BUlRJQU5TLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFY0X0RFVkNPTkZfVEFHLAorIElQVjRfREVWQ09ORl9BUlBGSUxURVIsCisgSVBWNF9ERVZDT05GX01FRElVTV9JRCwKKyBJUFY0X0RFVkNPTkZfTk9YRlJNLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFY0X0RFVkNPTkZfTk9QT0xJQ1ksCisgSVBWNF9ERVZDT05GX0ZPUkNFX0lHTVBfVkVSU0lPTiwKKyBJUFY0X0RFVkNPTkZfQVJQX0FOTk9VTkNFLAorIElQVjRfREVWQ09ORl9BUlBfSUdOT1JFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFY0X0RFVkNPTkZfUFJPTU9URV9TRUNPTkRBUklFUywKKyBJUFY0X0RFVkNPTkZfQVJQX0FDQ0VQVCwKKyBJUFY0X0RFVkNPTkZfQVJQX05PVElGWSwKKyBJUFY0X0RFVkNPTkZfQUNDRVBUX0xPQ0FMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFY0X0RFVkNPTkZfU1JDX1ZNQVJLLAorIElQVjRfREVWQ09ORl9QUk9YWV9BUlBfUFZMQU4sCisgSVBWNF9ERVZDT05GX1JPVVRFX0xPQ0FMTkVULAorIElQVjRfREVWQ09ORl9JR01QVjJfVU5TT0xJQ0lURURfUkVQT1JUX0lOVEVSVkFMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFY0X0RFVkNPTkZfSUdNUFYzX1VOU09MSUNJVEVEX1JFUE9SVF9JTlRFUlZBTCwKKyBfX0lQVjRfREVWQ09ORl9NQVgKK307CisjZGVmaW5lIElQVjRfREVWQ09ORl9NQVggKF9fSVBWNF9ERVZDT05GX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lwX3ZzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lwX3ZzLmgKaW5kZXggMjQxMDU3YS4uM2FhMGY4NCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pcF92cy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvaXBfdnMuaApAQCAtMjYsMzAwICsyNiwzMDYgQEAKICNkZWZpbmUgSVBfVlNfU1ZDX0ZfSEFTSEVEIDB4MDAwMgogI2RlZmluZSBJUF9WU19TVkNfRl9PTkVQQUNLRVQgMHgwMDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9WU19TVkNfRl9TQ0hFRDEgMHgwMDA4CisjZGVmaW5lIElQX1ZTX1NWQ19GX1NDSEVEMiAweDAwMTAKKyNkZWZpbmUgSVBfVlNfU1ZDX0ZfU0NIRUQzIDB4MDAyMAorI2RlZmluZSBJUF9WU19TVkNfRl9TQ0hFRF9TSF9GQUxMQkFDSyBJUF9WU19TVkNfRl9TQ0hFRDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX1NWQ19GX1NDSEVEX1NIX1BPUlQgSVBfVlNfU1ZDX0ZfU0NIRUQyCiAjZGVmaW5lIElQX1ZTX0RFU1RfRl9BVkFJTEFCTEUgMHgwMDAxCiAjZGVmaW5lIElQX1ZTX0RFU1RfRl9PVkVSTE9BRCAweDAwMDIKICNkZWZpbmUgSVBfVlNfU1RBVEVfTk9ORSAweDAwMDAKLSNkZWZpbmUgSVBfVlNfU1RBVEVfTUFTVEVSIDB4MDAwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfVlNfU1RBVEVfTUFTVEVSIDB4MDAwMQogI2RlZmluZSBJUF9WU19TVEFURV9CQUNLVVAgMHgwMDAyCiAjZGVmaW5lIElQX1ZTX0JBU0VfQ1RMICg2NCsxMDI0KzY0KQogI2RlZmluZSBJUF9WU19TT19TRVRfTk9ORSBJUF9WU19CQVNFX0NUTAotI2RlZmluZSBJUF9WU19TT19TRVRfSU5TRVJUIChJUF9WU19CQVNFX0NUTCsxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfVlNfU09fU0VUX0lOU0VSVCAoSVBfVlNfQkFTRV9DVEwrMSkKICNkZWZpbmUgSVBfVlNfU09fU0VUX0FERCAoSVBfVlNfQkFTRV9DVEwrMikKICNkZWZpbmUgSVBfVlNfU09fU0VUX0VESVQgKElQX1ZTX0JBU0VfQ1RMKzMpCiAjZGVmaW5lIElQX1ZTX1NPX1NFVF9ERUwgKElQX1ZTX0JBU0VfQ1RMKzQpCi0jZGVmaW5lIElQX1ZTX1NPX1NFVF9GTFVTSCAoSVBfVlNfQkFTRV9DVEwrNSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX1NPX1NFVF9GTFVTSCAoSVBfVlNfQkFTRV9DVEwrNSkKICNkZWZpbmUgSVBfVlNfU09fU0VUX0xJU1QgKElQX1ZTX0JBU0VfQ1RMKzYpCiAjZGVmaW5lIElQX1ZTX1NPX1NFVF9BRERERVNUIChJUF9WU19CQVNFX0NUTCs3KQogI2RlZmluZSBJUF9WU19TT19TRVRfREVMREVTVCAoSVBfVlNfQkFTRV9DVEwrOCkKLSNkZWZpbmUgSVBfVlNfU09fU0VUX0VESVRERVNUIChJUF9WU19CQVNFX0NUTCs5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfVlNfU09fU0VUX0VESVRERVNUIChJUF9WU19CQVNFX0NUTCs5KQogI2RlZmluZSBJUF9WU19TT19TRVRfVElNRU9VVCAoSVBfVlNfQkFTRV9DVEwrMTApCiAjZGVmaW5lIElQX1ZTX1NPX1NFVF9TVEFSVERBRU1PTiAoSVBfVlNfQkFTRV9DVEwrMTEpCiAjZGVmaW5lIElQX1ZTX1NPX1NFVF9TVE9QREFFTU9OIChJUF9WU19CQVNFX0NUTCsxMikKLSNkZWZpbmUgSVBfVlNfU09fU0VUX1JFU1RPUkUgKElQX1ZTX0JBU0VfQ1RMKzEzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfVlNfU09fU0VUX1JFU1RPUkUgKElQX1ZTX0JBU0VfQ1RMKzEzKQogI2RlZmluZSBJUF9WU19TT19TRVRfU0FWRSAoSVBfVlNfQkFTRV9DVEwrMTQpCiAjZGVmaW5lIElQX1ZTX1NPX1NFVF9aRVJPIChJUF9WU19CQVNFX0NUTCsxNSkKICNkZWZpbmUgSVBfVlNfU09fU0VUX01BWCBJUF9WU19TT19TRVRfWkVSTwotI2RlZmluZSBJUF9WU19TT19HRVRfVkVSU0lPTiBJUF9WU19CQVNFX0NUTAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfVlNfU09fR0VUX1ZFUlNJT04gSVBfVlNfQkFTRV9DVEwKICNkZWZpbmUgSVBfVlNfU09fR0VUX0lORk8gKElQX1ZTX0JBU0VfQ1RMKzEpCiAjZGVmaW5lIElQX1ZTX1NPX0dFVF9TRVJWSUNFUyAoSVBfVlNfQkFTRV9DVEwrMikKICNkZWZpbmUgSVBfVlNfU09fR0VUX1NFUlZJQ0UgKElQX1ZTX0JBU0VfQ1RMKzMpCi0jZGVmaW5lIElQX1ZTX1NPX0dFVF9ERVNUUyAoSVBfVlNfQkFTRV9DVEwrNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9ERVNUUyAoSVBfVlNfQkFTRV9DVEwrNCkKICNkZWZpbmUgSVBfVlNfU09fR0VUX0RFU1QgKElQX1ZTX0JBU0VfQ1RMKzUpCiAjZGVmaW5lIElQX1ZTX1NPX0dFVF9USU1FT1VUIChJUF9WU19CQVNFX0NUTCs2KQogI2RlZmluZSBJUF9WU19TT19HRVRfREFFTU9OIChJUF9WU19CQVNFX0NUTCs3KQotI2RlZmluZSBJUF9WU19TT19HRVRfTUFYIElQX1ZTX1NPX0dFVF9EQUVNT04KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX1NPX0dFVF9NQVggSVBfVlNfU09fR0VUX0RBRU1PTgogI2RlZmluZSBJUF9WU19DT05OX0ZfRldEX01BU0sgMHgwMDA3CiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9NQVNRIDB4MDAwMAogI2RlZmluZSBJUF9WU19DT05OX0ZfTE9DQUxOT0RFIDB4MDAwMQotI2RlZmluZSBJUF9WU19DT05OX0ZfVFVOTkVMIDB4MDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBfVlNfQ09OTl9GX1RVTk5FTCAweDAwMDIKICNkZWZpbmUgSVBfVlNfQ09OTl9GX0RST1VURSAweDAwMDMKICNkZWZpbmUgSVBfVlNfQ09OTl9GX0JZUEFTUyAweDAwMDQKICNkZWZpbmUgSVBfVlNfQ09OTl9GX1NZTkMgMHgwMDIwCi0jZGVmaW5lIElQX1ZTX0NPTk5fRl9IQVNIRUQgMHgwMDQwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfSEFTSEVEIDB4MDA0MAogI2RlZmluZSBJUF9WU19DT05OX0ZfTk9PVVRQVVQgMHgwMDgwCiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9JTkFDVElWRSAweDAxMDAKICNkZWZpbmUgSVBfVlNfQ09OTl9GX09VVF9TRVEgMHgwMjAwCi0jZGVmaW5lIElQX1ZTX0NPTk5fRl9JTl9TRVEgMHgwNDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfSU5fU0VRIDB4MDQwMAogI2RlZmluZSBJUF9WU19DT05OX0ZfU0VRX01BU0sgMHgwNjAwCiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9OT19DUE9SVCAweDA4MDAKICNkZWZpbmUgSVBfVlNfQ09OTl9GX1RFTVBMQVRFIDB4MTAwMAotI2RlZmluZSBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCAweDIwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIDB4MjAwMAogI2RlZmluZSBJUF9WU19DT05OX0ZfQkFDS1VQX01BU0sgKElQX1ZTX0NPTk5fRl9GV0RfTUFTSyB8ICAgSVBfVlNfQ09OTl9GX05PT1VUUFVUIHwgICBJUF9WU19DT05OX0ZfSU5BQ1RJVkUgfCAgIElQX1ZTX0NPTk5fRl9TRVFfTUFTSyB8ICAgSVBfVlNfQ09OTl9GX05PX0NQT1JUIHwgICBJUF9WU19DT05OX0ZfVEVNUExBVEUgICApCiAjZGVmaW5lIElQX1ZTX0NPTk5fRl9CQUNLVVBfVVBEX01BU0sgKElQX1ZTX0NPTk5fRl9JTkFDVElWRSB8ICAgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKQogI2RlZmluZSBJUF9WU19DT05OX0ZfTkZDVCAoMSA8PCAxNikKLSNkZWZpbmUgSVBfVlNfQ09OTl9GX0RFU1RfTUFTSyAoSVBfVlNfQ09OTl9GX0ZXRF9NQVNLIHwgICBJUF9WU19DT05OX0ZfT05FX1BBQ0tFVCB8ICAgSVBfVlNfQ09OTl9GX05GQ1QgfCAgIDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9WU19DT05OX0ZfREVTVF9NQVNLIChJUF9WU19DT05OX0ZfRldEX01BU0sgfCAgIElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUIHwgICBJUF9WU19DT05OX0ZfTkZDVCB8ICAgMCkKICNkZWZpbmUgSVBfVlNfU0NIRUROQU1FX01BWExFTiAxNgogI2RlZmluZSBJUF9WU19QRU5BTUVfTUFYTEVOIDE2CiAjZGVmaW5lIElQX1ZTX0lGTkFNRV9NQVhMRU4gMTYKLSNkZWZpbmUgSVBfVlNfUEVEQVRBX01BWExFTiAyNTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQX1ZTX1BFREFUQV9NQVhMRU4gMjU1CiBzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyIHsKICBfX3UxNiBwcm90b2NvbDsKICBfX2JlMzIgYWRkcjsKLSBfX2JlMTYgcG9ydDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTE2IHBvcnQ7CiAgX191MzIgZndtYXJrOwogIGNoYXIgc2NoZWRfbmFtZVtJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXTsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0gdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCB0aW1lb3V0OwogIF9fYmUzMiBuZXRtYXNrOwogfTsKIHN0cnVjdCBpcF92c19kZXN0X3VzZXIgewotIF9fYmUzMiBhZGRyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMzIgYWRkcjsKICBfX2JlMTYgcG9ydDsKICB1bnNpZ25lZCBpbnQgY29ubl9mbGFnczsKICBpbnQgd2VpZ2h0OwotIF9fdTMyIHVfdGhyZXNob2xkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB1X3RocmVzaG9sZDsKICBfX3UzMiBsX3RocmVzaG9sZDsKIH07CiBzdHJ1Y3QgaXBfdnNfc3RhdHNfdXNlciB7Ci0gX191MzIgY29ubnM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNvbm5zOwogIF9fdTMyIGlucGt0czsKICBfX3UzMiBvdXRwa3RzOwogIF9fdTY0IGluYnl0ZXM7Ci0gX191NjQgb3V0Ynl0ZXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IG91dGJ5dGVzOwogIF9fdTMyIGNwczsKICBfX3UzMiBpbnBwczsKICBfX3UzMiBvdXRwcHM7Ci0gX191MzIgaW5icHM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGluYnBzOwogIF9fdTMyIG91dGJwczsKIH07CiBzdHJ1Y3QgaXBfdnNfZ2V0aW5mbyB7Ci0gdW5zaWduZWQgaW50IHZlcnNpb247CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCB2ZXJzaW9uOwogIHVuc2lnbmVkIGludCBzaXplOwogIHVuc2lnbmVkIGludCBudW1fc2VydmljZXM7CiB9Owotc3RydWN0IGlwX3ZzX3NlcnZpY2VfZW50cnkgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5IHsKICBfX3UxNiBwcm90b2NvbDsKICBfX2JlMzIgYWRkcjsKICBfX2JlMTYgcG9ydDsKLSBfX3UzMiBmd21hcms7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGZ3bWFyazsKICBjaGFyIHNjaGVkX25hbWVbSVBfVlNfU0NIRUROQU1FX01BWExFTl07CiAgdW5zaWduZWQgaW50IGZsYWdzOwogIHVuc2lnbmVkIGludCB0aW1lb3V0OwotIF9fYmUzMiBuZXRtYXNrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMzIgbmV0bWFzazsKICB1bnNpZ25lZCBpbnQgbnVtX2Rlc3RzOwogIHN0cnVjdCBpcF92c19zdGF0c191c2VyIHN0YXRzOwogfTsKLXN0cnVjdCBpcF92c19kZXN0X2VudHJ5IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaXBfdnNfZGVzdF9lbnRyeSB7CiAgX19iZTMyIGFkZHI7CiAgX19iZTE2IHBvcnQ7CiAgdW5zaWduZWQgaW50IGNvbm5fZmxhZ3M7Ci0gaW50IHdlaWdodDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IHdlaWdodDsKICBfX3UzMiB1X3RocmVzaG9sZDsKICBfX3UzMiBsX3RocmVzaG9sZDsKICBfX3UzMiBhY3RpdmVjb25uczsKLSBfX3UzMiBpbmFjdGNvbm5zOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBpbmFjdGNvbm5zOwogIF9fdTMyIHBlcnNpc3Rjb25uczsKICBzdHJ1Y3QgaXBfdnNfc3RhdHNfdXNlciBzdGF0czsKIH07Ci1zdHJ1Y3QgaXBfdnNfZ2V0X2Rlc3RzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaXBfdnNfZ2V0X2Rlc3RzIHsKICBfX3UxNiBwcm90b2NvbDsKICBfX2JlMzIgYWRkcjsKICBfX2JlMTYgcG9ydDsKLSBfX3UzMiBmd21hcms7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGZ3bWFyazsKICB1bnNpZ25lZCBpbnQgbnVtX2Rlc3RzOwogIHN0cnVjdCBpcF92c19kZXN0X2VudHJ5IGVudHJ5dGFibGVbMF07CiB9Owotc3RydWN0IGlwX3ZzX2dldF9zZXJ2aWNlcyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGlwX3ZzX2dldF9zZXJ2aWNlcyB7CiAgdW5zaWduZWQgaW50IG51bV9zZXJ2aWNlczsKICBzdHJ1Y3QgaXBfdnNfc2VydmljZV9lbnRyeSBlbnRyeXRhYmxlWzBdOwogfTsKLXN0cnVjdCBpcF92c190aW1lb3V0X3VzZXIgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpcF92c190aW1lb3V0X3VzZXIgewogIGludCB0Y3BfdGltZW91dDsKICBpbnQgdGNwX2Zpbl90aW1lb3V0OwogIGludCB1ZHBfdGltZW91dDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBpcF92c19kYWVtb25fdXNlciB7CiAgaW50IHN0YXRlOwogIGNoYXIgbWNhc3RfaWZuW0lQX1ZTX0lGTkFNRV9NQVhMRU5dOwotIGludCBzeW5jaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGludCBzeW5jaWQ7CiB9OwogI2RlZmluZSBJUFZTX0dFTkxfTkFNRSAiSVBWUyIKICNkZWZpbmUgSVBWU19HRU5MX1ZFUlNJT04gMHgxCi1zdHJ1Y3QgaXBfdnNfZmxhZ3MgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpcF92c19mbGFncyB7CiAgX191MzIgZmxhZ3M7CiAgX191MzIgbWFzazsKIH07Ci1lbnVtIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBJUFZTX0NNRF9VTlNQRUMgPSAwLAogIElQVlNfQ01EX05FV19TRVJWSUNFLAogIElQVlNfQ01EX1NFVF9TRVJWSUNFLAotIElQVlNfQ01EX0RFTF9TRVJWSUNFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX0NNRF9ERUxfU0VSVklDRSwKICBJUFZTX0NNRF9HRVRfU0VSVklDRSwKICBJUFZTX0NNRF9ORVdfREVTVCwKICBJUFZTX0NNRF9TRVRfREVTVCwKLSBJUFZTX0NNRF9ERUxfREVTVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWU19DTURfREVMX0RFU1QsCiAgSVBWU19DTURfR0VUX0RFU1QsCiAgSVBWU19DTURfTkVXX0RBRU1PTiwKICBJUFZTX0NNRF9ERUxfREFFTU9OLAotIElQVlNfQ01EX0dFVF9EQUVNT04sCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQVlNfQ01EX0dFVF9EQUVNT04sCiAgSVBWU19DTURfU0VUX0NPTkZJRywKICBJUFZTX0NNRF9HRVRfQ09ORklHLAogIElQVlNfQ01EX1NFVF9JTkZPLAotIElQVlNfQ01EX0dFVF9JTkZPLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX0NNRF9HRVRfSU5GTywKICBJUFZTX0NNRF9aRVJPLAogIElQVlNfQ01EX0ZMVVNILAogIF9fSVBWU19DTURfTUFYLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBJUFZTX0NNRF9NQVggKF9fSVBWU19DTURfTUFYIC0gMSkKIGVudW0gewogIElQVlNfQ01EX0FUVFJfVU5TUEVDID0gMCwKLSBJUFZTX0NNRF9BVFRSX1NFUlZJQ0UsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQVlNfQ01EX0FUVFJfU0VSVklDRSwKICBJUFZTX0NNRF9BVFRSX0RFU1QsCiAgSVBWU19DTURfQVRUUl9EQUVNT04sCiAgSVBWU19DTURfQVRUUl9USU1FT1VUX1RDUCwKLSBJUFZTX0NNRF9BVFRSX1RJTUVPVVRfVENQX0ZJTiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWU19DTURfQVRUUl9USU1FT1VUX1RDUF9GSU4sCiAgSVBWU19DTURfQVRUUl9USU1FT1VUX1VEUCwKICBfX0lQVlNfQ01EX0FUVFJfTUFYLAogfTsKLSNkZWZpbmUgSVBWU19DTURfQVRUUl9NQVggKF9fSVBWU19TVkNfQVRUUl9NQVggLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBWU19DTURfQVRUUl9NQVggKF9fSVBWU19DTURfQVRUUl9NQVggLSAxKQogZW51bSB7CiAgSVBWU19TVkNfQVRUUl9VTlNQRUMgPSAwLAogIElQVlNfU1ZDX0FUVFJfQUYsCi0gSVBWU19TVkNfQVRUUl9QUk9UT0NPTCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWU19TVkNfQVRUUl9QUk9UT0NPTCwKICBJUFZTX1NWQ19BVFRSX0FERFIsCiAgSVBWU19TVkNfQVRUUl9QT1JULAogIElQVlNfU1ZDX0FUVFJfRldNQVJLLAotIElQVlNfU1ZDX0FUVFJfU0NIRURfTkFNRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBWU19TVkNfQVRUUl9TQ0hFRF9OQU1FLAogIElQVlNfU1ZDX0FUVFJfRkxBR1MsCiAgSVBWU19TVkNfQVRUUl9USU1FT1VULAogIElQVlNfU1ZDX0FUVFJfTkVUTUFTSywKLSBJUFZTX1NWQ19BVFRSX1NUQVRTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX1NWQ19BVFRSX1NUQVRTLAogIElQVlNfU1ZDX0FUVFJfUEVfTkFNRSwKICBfX0lQVlNfU1ZDX0FUVFJfTUFYLAogfTsKLSNkZWZpbmUgSVBWU19TVkNfQVRUUl9NQVggKF9fSVBWU19TVkNfQVRUUl9NQVggLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBWU19TVkNfQVRUUl9NQVggKF9fSVBWU19TVkNfQVRUUl9NQVggLSAxKQogZW51bSB7CiAgSVBWU19ERVNUX0FUVFJfVU5TUEVDID0gMCwKICBJUFZTX0RFU1RfQVRUUl9BRERSLAotIElQVlNfREVTVF9BVFRSX1BPUlQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQVlNfREVTVF9BVFRSX1BPUlQsCiAgSVBWU19ERVNUX0FUVFJfRldEX01FVEhPRCwKICBJUFZTX0RFU1RfQVRUUl9XRUlHSFQsCiAgSVBWU19ERVNUX0FUVFJfVV9USFJFU0gsCi0gSVBWU19ERVNUX0FUVFJfTF9USFJFU0gsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQVlNfREVTVF9BVFRSX0xfVEhSRVNILAogIElQVlNfREVTVF9BVFRSX0FDVElWRV9DT05OUywKICBJUFZTX0RFU1RfQVRUUl9JTkFDVF9DT05OUywKICBJUFZTX0RFU1RfQVRUUl9QRVJTSVNUX0NPTk5TLAotIElQVlNfREVTVF9BVFRSX1NUQVRTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX0RFU1RfQVRUUl9TVEFUUywKICBfX0lQVlNfREVTVF9BVFRSX01BWCwKIH07CiAjZGVmaW5lIElQVlNfREVTVF9BVFRSX01BWCAoX19JUFZTX0RFU1RfQVRUUl9NQVggLSAxKQotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgSVBWU19EQUVNT05fQVRUUl9VTlNQRUMgPSAwLAogIElQVlNfREFFTU9OX0FUVFJfU1RBVEUsCiAgSVBWU19EQUVNT05fQVRUUl9NQ0FTVF9JRk4sCi0gSVBWU19EQUVNT05fQVRUUl9TWU5DX0lELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX0RBRU1PTl9BVFRSX1NZTkNfSUQsCiAgX19JUFZTX0RBRU1PTl9BVFRSX01BWCwKIH07CiAjZGVmaW5lIElQVlNfREFFTU9OX0FUVFJfTUFYIChfX0lQVlNfREFFTU9OX0FUVFJfTUFYIC0gMSkKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIElQVlNfU1RBVFNfQVRUUl9VTlNQRUMgPSAwLAogIElQVlNfU1RBVFNfQVRUUl9DT05OUywKICBJUFZTX1NUQVRTX0FUVFJfSU5QS1RTLAotIElQVlNfU1RBVFNfQVRUUl9PVVRQS1RTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFZTX1NUQVRTX0FUVFJfT1VUUEtUUywKICBJUFZTX1NUQVRTX0FUVFJfSU5CWVRFUywKICBJUFZTX1NUQVRTX0FUVFJfT1VUQllURVMsCiAgSVBWU19TVEFUU19BVFRSX0NQUywKLSBJUFZTX1NUQVRTX0FUVFJfSU5QUFMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQVlNfU1RBVFNfQVRUUl9JTlBQUywKICBJUFZTX1NUQVRTX0FUVFJfT1VUUFBTLAogIElQVlNfU1RBVFNfQVRUUl9JTkJQUywKICBJUFZTX1NUQVRTX0FUVFJfT1VUQlBTLAotIF9fSVBWU19TVEFUU19BVFRSX01BWCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19JUFZTX1NUQVRTX0FUVFJfTUFYLAogfTsKICNkZWZpbmUgSVBWU19TVEFUU19BVFRSX01BWCAoX19JUFZTX1NUQVRTX0FUVFJfTUFYIC0gMSkKIGVudW0gewotIElQVlNfSU5GT19BVFRSX1VOU1BFQyA9IDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQVlNfSU5GT19BVFRSX1VOU1BFQyA9IDAsCiAgSVBWU19JTkZPX0FUVFJfVkVSU0lPTiwKICBJUFZTX0lORk9fQVRUUl9DT05OX1RBQl9TSVpFLAogIF9fSVBWU19JTkZPX0FUVFJfTUFYLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBJUFZTX0lORk9fQVRUUl9NQVggKF9fSVBWU19JTkZPX0FUVFJfTUFYIC0gMSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9pcHY2LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lwdjYuaAppbmRleCBlOTMzZDgzLi5iZmU2MmNmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lwdjYuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2lwdjYuaApAQCAtMTQxLDYgKzE0MSwxMCBAQAogIERFVkNPTkZfRk9SQ0VfVExMQU8sCiAgREVWQ09ORl9ORElTQ19OT1RJRlksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIERFVkNPTkZfTUxEVjFfVU5TT0xJQ0lURURfUkVQT1JUX0lOVEVSVkFMLAorIERFVkNPTkZfTUxEVjJfVU5TT0xJQ0lURURfUkVQT1JUX0lOVEVSVkFMLAorIERFVkNPTkZfU1VQUFJFU1NfRlJBR19ORElTQywKICBERVZDT05GX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgva2V4ZWMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgva2V4ZWMuaAppbmRleCA5NzdmZWU2Li5hMTdkYzIzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2tleGVjLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rZXhlYy5oCkBAIC0yNiwyNCArMjYsMjUgQEAKICNkZWZpbmUgS0VYRUNfQVJDSF9ERUZBVUxUICggMCA8PCAxNikKICNkZWZpbmUgS0VYRUNfQVJDSF8zODYgKCAzIDw8IDE2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VYRUNfQVJDSF82OEsgKCA0IDw8IDE2KQogI2RlZmluZSBLRVhFQ19BUkNIX1g4Nl82NCAoNjIgPDwgMTYpCiAjZGVmaW5lIEtFWEVDX0FSQ0hfUFBDICgyMCA8PCAxNikKICNkZWZpbmUgS0VYRUNfQVJDSF9QUEM2NCAoMjEgPDwgMTYpCi0jZGVmaW5lIEtFWEVDX0FSQ0hfSUFfNjQgKDUwIDw8IDE2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0VYRUNfQVJDSF9JQV82NCAoNTAgPDwgMTYpCiAjZGVmaW5lIEtFWEVDX0FSQ0hfQVJNICg0MCA8PCAxNikKICNkZWZpbmUgS0VYRUNfQVJDSF9TMzkwICgyMiA8PCAxNikKICNkZWZpbmUgS0VYRUNfQVJDSF9TSCAoNDIgPDwgMTYpCi0jZGVmaW5lIEtFWEVDX0FSQ0hfTUlQU19MRSAoMTAgPDwgMTYpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRVhFQ19BUkNIX01JUFNfTEUgKDEwIDw8IDE2KQogI2RlZmluZSBLRVhFQ19BUkNIX01JUFMgKCA4IDw8IDE2KQogI2RlZmluZSBLRVhFQ19TRUdNRU5UX01BWCAxNgogc3RydWN0IGtleGVjX3NlZ21lbnQgewotIGNvbnN0IHZvaWQgKmJ1ZjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgY29uc3Qgdm9pZCAqYnVmOwogIHNpemVfdCBidWZzejsKICBjb25zdCB2b2lkICptZW07CiAgc2l6ZV90IG1lbXN6OwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2tleWN0bC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rZXljdGwuaAppbmRleCA4OTg1NGI1Li45NDFlMGQ1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2tleWN0bC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgva2V5Y3RsLmgKQEAgLTY3LDQgKzY3LDUgQEAKICNkZWZpbmUgS0VZQ1RMX0lOU1RBTlRJQVRFX0lPViAyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZQ1RMX0lOVkFMSURBVEUgMjEKKyNkZWZpbmUgS0VZQ1RMX0dFVF9QRVJTSVNURU5UIDIyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgva3ZtLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2t2bS5oCmluZGV4IDk1NTc5NGIuLmU2NGY5YjUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgva3ZtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rdm0uaApAQCAtNDc3LDI3NCArNDc3LDI4NCBAQAogI2RlZmluZSBLVk1JTyAweEFFCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fVk1fUzM5MF9VQ09OVFJPTCAxCisjZGVmaW5lIEtWTV9WTV9QUENfSFYgMQorI2RlZmluZSBLVk1fVk1fUFBDX1BSIDIKICNkZWZpbmUgS1ZNX1MzOTBfU0lFX1BBR0VfT0ZGU0VUIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9HRVRfQVBJX1ZFUlNJT04gX0lPKEtWTUlPLCAweDAwKQogI2RlZmluZSBLVk1fQ1JFQVRFX1ZNIF9JTyhLVk1JTywgMHgwMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9HRVRfTVNSX0lOREVYX0xJU1QgX0lPV1IoS1ZNSU8sIDB4MDIsIHN0cnVjdCBrdm1fbXNyX2xpc3QpCiAjZGVmaW5lIEtWTV9TMzkwX0VOQUJMRV9TSUUgX0lPKEtWTUlPLCAweDA2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NIRUNLX0VYVEVOU0lPTiBfSU8oS1ZNSU8sIDB4MDMpCiAjZGVmaW5lIEtWTV9HRVRfVkNQVV9NTUFQX1NJWkUgX0lPKEtWTUlPLCAweDA0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0dFVF9TVVBQT1JURURfQ1BVSUQgX0lPV1IoS1ZNSU8sIDB4MDUsIHN0cnVjdCBrdm1fY3B1aWQyKQogI2RlZmluZSBLVk1fVFJBQ0VfRU5BQkxFIF9fS1ZNX0RFUFJFQ0FURURfTUFJTl9XXzB4MDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9UUkFDRV9QQVVTRSBfX0tWTV9ERVBSRUNBVEVEX01BSU5fMHgwNwogI2RlZmluZSBLVk1fVFJBQ0VfRElTQUJMRSBfX0tWTV9ERVBSRUNBVEVEX01BSU5fMHgwOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0dFVF9FTVVMQVRFRF9DUFVJRCBfSU9XUihLVk1JTywgMHgwOSwgc3RydWN0IGt2bV9jcHVpZDIpCiAjZGVmaW5lIEtWTV9DQVBfSVJRQ0hJUCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0hMVCAxCiAjZGVmaW5lIEtWTV9DQVBfTU1VX1NIQURPV19DQUNIRV9DT05UUk9MIDIKICNkZWZpbmUgS1ZNX0NBUF9VU0VSX01FTU9SWSAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1NFVF9UU1NfQUREUiA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1ZBUElDIDYKICNkZWZpbmUgS1ZNX0NBUF9FWFRfQ1BVSUQgNwogI2RlZmluZSBLVk1fQ0FQX0NMT0NLU09VUkNFIDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfTlJfVkNQVVMgOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9OUl9NRU1TTE9UUyAxMAogI2RlZmluZSBLVk1fQ0FQX1BJVCAxMQogI2RlZmluZSBLVk1fQ0FQX05PUF9JT19ERUxBWSAxMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QVl9NTVUgMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfTVBfU1RBVEUgMTQKICNkZWZpbmUgS1ZNX0NBUF9DT0FMRVNDRURfTU1JTyAxNQogI2RlZmluZSBLVk1fQ0FQX1NZTkNfTU1VIDE2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0RFVklDRV9BU1NJR05NRU5UIDE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0lPTU1VIDE4CiAjaWZkZWYgX19LVk1fSEFWRV9NU0kKICNkZWZpbmUgS1ZNX0NBUF9ERVZJQ0VfTVNJIDIwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0RFU1RST1lfTUVNT1JZX1JFR0lPTl9XT1JLUyAyMQogI2lmZGVmIF9fS1ZNX0hBVkVfVVNFUl9OTUkKICNkZWZpbmUgS1ZNX0NBUF9VU0VSX05NSSAyMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0tWTV9IQVZFX0dVRVNUX0RFQlVHCiAjZGVmaW5lIEtWTV9DQVBfU0VUX0dVRVNUX0RFQlVHIDIzCiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgX19LVk1fSEFWRV9QSVQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUkVJTkpFQ1RfQ09OVFJPTCAyNAogI2VuZGlmCiAjZGVmaW5lIEtWTV9DQVBfSVJRX1JPVVRJTkcgMjUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfSVJRX0lOSkVDVF9TVEFUVVMgMjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfREVWSUNFX0RFQVNTSUdOTUVOVCAyNwogI2lmZGVmIF9fS1ZNX0hBVkVfTVNJWAogI2RlZmluZSBLVk1fQ0FQX0RFVklDRV9NU0lYIDI4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0FTU0lHTl9ERVZfSVJRIDI5CiAjZGVmaW5lIEtWTV9DQVBfSk9JTl9NRU1PUllfUkVHSU9OU19XT1JLUyAzMAogI2lmZGVmIF9fS1ZNX0hBVkVfTUNFCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX01DRSAzMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2RlZmluZSBLVk1fQ0FQX0lSUUZEIDMyCiAjaWZkZWYgX19LVk1fSEFWRV9QSVQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUElUMiAzMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2RlZmluZSBLVk1fQ0FQX1NFVF9CT09UX0NQVV9JRCAzNAogI2lmZGVmIF9fS1ZNX0hBVkVfUElUX1NUQVRFMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QSVRfU1RBVEUyIDM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZGVmaW5lIEtWTV9DQVBfSU9FVkVOVEZEIDM2CiAjZGVmaW5lIEtWTV9DQVBfU0VUX0lERU5USVRZX01BUF9BRERSIDM3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fS1ZNX0hBVkVfWEVOX0hWTQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9YRU5fSFZNIDM4CiAjZW5kaWYKICNkZWZpbmUgS1ZNX0NBUF9BREpVU1RfQ0xPQ0sgMzkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfSU5URVJOQUxfRVJST1JfREFUQSA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0tWTV9IQVZFX1ZDUFVfRVZFTlRTCiAjZGVmaW5lIEtWTV9DQVBfVkNQVV9FVkVOVFMgNDEKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1BTVyA0MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QUENfU0VHU1RBVEUgNDMKICNkZWZpbmUgS1ZNX0NBUF9IWVBFUlYgNDQKICNkZWZpbmUgS1ZNX0NBUF9IWVBFUlZfVkFQSUMgNDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfSFlQRVJWX1NQSU4gNDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUENJX1NFR01FTlQgNDcKICNkZWZpbmUgS1ZNX0NBUF9QUENfUEFJUkVEX1NJTkdMRVMgNDgKICNkZWZpbmUgS1ZNX0NBUF9JTlRSX1NIQURPVyA0OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0tWTV9IQVZFX0RFQlVHUkVHUworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9ERUJVR1JFR1MgNTAKICNlbmRpZgogI2RlZmluZSBLVk1fQ0FQX1g4Nl9ST0JVU1RfU0lOR0xFU1RFUCA1MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QUENfT1NJIDUyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BQQ19VTlNFVF9JUlEgNTMKICNkZWZpbmUgS1ZNX0NBUF9FTkFCTEVfQ0FQIDU0CiAjaWZkZWYgX19LVk1fSEFWRV9YU0FWRQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9YU0FWRSA1NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmZGVmIF9fS1ZNX0hBVkVfWENSUwogI2RlZmluZSBLVk1fQ0FQX1hDUlMgNTYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX0dFVF9QVklORk8gNTcKICNkZWZpbmUgS1ZNX0NBUF9QUENfSVJRX0xFVkVMIDU4CiAjZGVmaW5lIEtWTV9DQVBfQVNZTkNfUEYgNTkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfVFNDX0NPTlRST0wgNjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfR0VUX1RTQ19LSFogNjEKICNkZWZpbmUgS1ZNX0NBUF9QUENfQk9PS0VfU1JFR1MgNjIKICNkZWZpbmUgS1ZNX0NBUF9TUEFQUl9UQ0UgNjMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX1NNVCA2NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QUENfUk1BIDY1CiAjZGVmaW5lIEtWTV9DQVBfTUFYX1ZDUFVTIDY2CiAjZGVmaW5lIEtWTV9DQVBfUFBDX0hJT1IgNjcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUFBDX1BBUFIgNjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfU1dfVExCIDY5CiAjZGVmaW5lIEtWTV9DQVBfT05FX1JFRyA3MAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfR01BUCA3MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9UU0NfREVBRExJTkVfVElNRVIgNzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9VQ09OVFJPTCA3MwogI2RlZmluZSBLVk1fQ0FQX1NZTkNfUkVHUyA3NAogI2RlZmluZSBLVk1fQ0FQX1BDSV8yXzMgNzUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9DQVBfS1ZNQ0xPQ0tfQ1RSTCA3NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9TSUdOQUxfTVNJIDc3CiAjZGVmaW5lIEtWTV9DQVBfUFBDX0dFVF9TTU1VX0lORk8gNzgKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0NPVyA3OQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QUENfQUxMT0NfSFRBQiA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0tWTV9IQVZFX1JFQURPTkxZX01FTQogI2RlZmluZSBLVk1fQ0FQX1JFQURPTkxZX01FTSA4MQogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0lSUUZEX1JFU0FNUExFIDgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BQQ19CT09LRV9XQVRDSERPRyA4MwogI2RlZmluZSBLVk1fQ0FQX1BQQ19IVEFCX0ZEIDg0CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9DU1NfU1VQUE9SVCA4NQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0NBUF9QUENfRVBSIDg2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0FSTV9QU0NJIDg3CiAjZGVmaW5lIEtWTV9DQVBfQVJNX1NFVF9ERVZJQ0VfQUREUiA4OAogI2RlZmluZSBLVk1fQ0FQX0RFVklDRV9DVFJMIDg5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX0lSUV9NUElDIDkwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fQ0FQX1BQQ19SVEFTIDkxCiAjZGVmaW5lIEtWTV9DQVBfSVJRX1hJQ1MgOTIKLSNpZmRlZiBLVk1fQ0FQX0lSUV9ST1VUSU5HCisjZGVmaW5lIEtWTV9DQVBfQVJNX0VMMV8zMkJJVCA5MworI2RlZmluZSBLVk1fQ0FQX1NQQVBSX01VTFRJVENFIDk0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fQ0FQX0VYVF9FTVVMX0NQVUlEIDk1CisjZGVmaW5lIEtWTV9DQVBfSFlQRVJWX1RJTUUgOTYKKyNpZmRlZiBLVk1fQ0FQX0lSUV9ST1VUSU5HCiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpcnFjaGlwOwogIF9fdTMyIHBpbjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGt2bV9pcnFfcm91dGluZ19tc2kgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhZGRyZXNzX2xvOwogIF9fdTMyIGFkZHJlc3NfaGk7CiAgX191MzIgZGF0YTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGFkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEtWTV9JUlFfUk9VVElOR19JUlFDSElQIDEKICNkZWZpbmUgS1ZNX0lSUV9ST1VUSU5HX01TSSAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGdzaTsKICBfX3UzMiB0eXBlOwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwYWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgaXJxY2hpcDsKICBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX21zaSBtc2k7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZFs4XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSB1OwogfTsKIHN0cnVjdCBrdm1faXJxX3JvdXRpbmcgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBucjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CiAgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSBlbnRyaWVzWzBdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgS1ZNX0NBUF9NQ0UKIHN0cnVjdCBrdm1feDg2X21jZSB7CiAgX191NjQgc3RhdHVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBhZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBtaXNjOwogIF9fdTY0IG1jZ19zdGF0dXM7CiAgX191OCBiYW5rOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHBhZDFbN107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHBhZDJbM107CiB9OwogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIEtWTV9DQVBfWEVOX0hWTQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgewogIF9fdTMyIGZsYWdzOwogIF9fdTMyIG1zcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgYmxvYl9hZGRyXzMyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBibG9iX2FkZHJfNjQ7CiAgX191OCBibG9iX3NpemVfMzI7CiAgX191OCBibG9iX3NpemVfNjQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcGFkMlszMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNlbmRpZgogI2RlZmluZSBLVk1fSVJRRkRfRkxBR19ERUFTU0lHTiAoMSA8PCAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0lSUUZEX0ZMQUdfUkVTQU1QTEUgKDEgPDwgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2lycWZkIHsKICBfX3UzMiBmZDsKICBfX3UzMiBnc2k7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNhbXBsZWZkOwogIF9fdTggcGFkWzE2XTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGt2bV9jbG9ja19kYXRhIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgY2xvY2s7CiAgX191MzIgZmxhZ3M7CiAgX191MzIgcGFkWzldOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fTU1VX0ZTTF9CT09LRV9OT0hWIDAKICNkZWZpbmUgS1ZNX01NVV9GU0xfQk9PS0VfSFYgMQogc3RydWN0IGt2bV9jb25maWdfdGxiIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcGFyYW1zOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBhcnJheTsKICBfX3UzMiBtbXVfdHlwZTsKICBfX3UzMiBhcnJheV9sZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3ZtX2RpcnR5X3RsYiB7CiAgX191NjQgYml0bWFwOwogIF9fdTMyIG51bV9kaXJ0eTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX1JFR19BUkNIX01BU0sgMHhmZjAwMDAwMDAwMDAwMDAwVUxMCiAjZGVmaW5lIEtWTV9SRUdfR0VORVJJQyAweDAwMDAwMDAwMDAwMDAwMDBVTEwKICNkZWZpbmUgS1ZNX1JFR19QUEMgMHgxMDAwMDAwMDAwMDAwMDAwVUxMCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fUkVHX1g4NiAweDIwMDAwMDAwMDAwMDAwMDBVTEwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfSUE2NCAweDMwMDAwMDAwMDAwMDAwMDBVTEwKICNkZWZpbmUgS1ZNX1JFR19BUk0gMHg0MDAwMDAwMDAwMDAwMDAwVUxMCiAjZGVmaW5lIEtWTV9SRUdfUzM5MCAweDUwMDAwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgS1ZNX1JFR19BUk02NCAweDYwMDAwMDAwMDAwMDAwMDBVTEwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9SRUdfTUlQUyAweDcwMDAwMDAwMDAwMDAwMDBVTEwKICNkZWZpbmUgS1ZNX1JFR19TSVpFX1NISUZUIDUyCkBAIC04MDIsMTk1ICs4MTIsMjAzIEBACiAjZGVmaW5lIEtWTV9ERVZfVFlQRV9GU0xfTVBJQ180MiAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fREVWX1RZUEVfWElDUyAzCisjZGVmaW5lIEtWTV9ERVZfVFlQRV9WRklPIDQKKyNkZWZpbmUgS1ZNX0RFVl9WRklPX0dST1VQIDEKKyNkZWZpbmUgS1ZNX0RFVl9WRklPX0dST1VQX0FERCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fREVWX1ZGSU9fR1JPVVBfREVMIDIKKyNkZWZpbmUgS1ZNX0RFVl9UWVBFX0FSTV9WR0lDX1YyIDUKICNkZWZpbmUgS1ZNX1NFVF9NRU1PUllfUkVHSU9OIF9JT1coS1ZNSU8sIDB4NDAsIHN0cnVjdCBrdm1fbWVtb3J5X3JlZ2lvbikKICNkZWZpbmUgS1ZNX0NSRUFURV9WQ1BVIF9JTyhLVk1JTywgMHg0MSkKLSNkZWZpbmUgS1ZNX0dFVF9ESVJUWV9MT0cgX0lPVyhLVk1JTywgMHg0Miwgc3RydWN0IGt2bV9kaXJ0eV9sb2cpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fR0VUX0RJUlRZX0xPRyBfSU9XKEtWTUlPLCAweDQyLCBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZykKICNkZWZpbmUgS1ZNX1NFVF9NRU1PUllfQUxJQVMgX0lPVyhLVk1JTywgMHg0Mywgc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMpCiAjZGVmaW5lIEtWTV9TRVRfTlJfTU1VX1BBR0VTIF9JTyhLVk1JTywgMHg0NCkKICNkZWZpbmUgS1ZNX0dFVF9OUl9NTVVfUEFHRVMgX0lPKEtWTUlPLCAweDQ1KQotI2RlZmluZSBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBfSU9XKEtWTUlPLCAweDQ2LCAgIHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24pCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBfSU9XKEtWTUlPLCAweDQ2LCAgIHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24pCiAjZGVmaW5lIEtWTV9TRVRfVFNTX0FERFIgX0lPKEtWTUlPLCAweDQ3KQogI2RlZmluZSBLVk1fU0VUX0lERU5USVRZX01BUF9BRERSIF9JT1coS1ZNSU8sIDB4NDgsIF9fdTY0KQogc3RydWN0IGt2bV9zMzkwX3VjYXNfbWFwcGluZyB7Ci0gX191NjQgdXNlcl9hZGRyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB1c2VyX2FkZHI7CiAgX191NjQgdmNwdV9hZGRyOwogIF9fdTY0IGxlbmd0aDsKIH07Ci0jZGVmaW5lIEtWTV9TMzkwX1VDQVNfTUFQIF9JT1coS1ZNSU8sIDB4NTAsIHN0cnVjdCBrdm1fczM5MF91Y2FzX21hcHBpbmcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUzM5MF9VQ0FTX01BUCBfSU9XKEtWTUlPLCAweDUwLCBzdHJ1Y3Qga3ZtX3MzOTBfdWNhc19tYXBwaW5nKQogI2RlZmluZSBLVk1fUzM5MF9VQ0FTX1VOTUFQIF9JT1coS1ZNSU8sIDB4NTEsIHN0cnVjdCBrdm1fczM5MF91Y2FzX21hcHBpbmcpCiAjZGVmaW5lIEtWTV9TMzkwX1ZDUFVfRkFVTFQgX0lPVyhLVk1JTywgMHg1MiwgdW5zaWduZWQgbG9uZykKICNkZWZpbmUgS1ZNX0NSRUFURV9JUlFDSElQIF9JTyhLVk1JTywgMHg2MCkKLSNkZWZpbmUgS1ZNX0lSUV9MSU5FIF9JT1coS1ZNSU8sIDB4NjEsIHN0cnVjdCBrdm1faXJxX2xldmVsKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0lSUV9MSU5FIF9JT1coS1ZNSU8sIDB4NjEsIHN0cnVjdCBrdm1faXJxX2xldmVsKQogI2RlZmluZSBLVk1fR0VUX0lSUUNISVAgX0lPV1IoS1ZNSU8sIDB4NjIsIHN0cnVjdCBrdm1faXJxY2hpcCkKICNkZWZpbmUgS1ZNX1NFVF9JUlFDSElQIF9JT1IoS1ZNSU8sIDB4NjMsIHN0cnVjdCBrdm1faXJxY2hpcCkKICNkZWZpbmUgS1ZNX0NSRUFURV9QSVQgX0lPKEtWTUlPLCAweDY0KQotI2RlZmluZSBLVk1fR0VUX1BJVCBfSU9XUihLVk1JTywgMHg2NSwgc3RydWN0IGt2bV9waXRfc3RhdGUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fR0VUX1BJVCBfSU9XUihLVk1JTywgMHg2NSwgc3RydWN0IGt2bV9waXRfc3RhdGUpCiAjZGVmaW5lIEtWTV9TRVRfUElUIF9JT1IoS1ZNSU8sIDB4NjYsIHN0cnVjdCBrdm1fcGl0X3N0YXRlKQogI2RlZmluZSBLVk1fSVJRX0xJTkVfU1RBVFVTIF9JT1dSKEtWTUlPLCAweDY3LCBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCkKICNkZWZpbmUgS1ZNX1JFR0lTVEVSX0NPQUxFU0NFRF9NTUlPICAgX0lPVyhLVk1JTywgMHg2Nywgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lKQotI2RlZmluZSBLVk1fVU5SRUdJU1RFUl9DT0FMRVNDRURfTU1JTyAgIF9JT1coS1ZNSU8sIDB4NjgsIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9VTlJFR0lTVEVSX0NPQUxFU0NFRF9NTUlPICAgX0lPVyhLVk1JTywgMHg2OCwgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lKQogI2RlZmluZSBLVk1fQVNTSUdOX1BDSV9ERVZJQ0UgX0lPUihLVk1JTywgMHg2OSwgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYpCiAjZGVmaW5lIEtWTV9TRVRfR1NJX1JPVVRJTkcgX0lPVyhLVk1JTywgMHg2YSwgc3RydWN0IGt2bV9pcnFfcm91dGluZykKICNkZWZpbmUgS1ZNX0FTU0lHTl9JUlEgX19LVk1fREVQUkVDQVRFRF9WTV9SXzB4NzAKLSNkZWZpbmUgS1ZNX0FTU0lHTl9ERVZfSVJRIF9JT1coS1ZNSU8sIDB4NzAsIHN0cnVjdCBrdm1fYXNzaWduZWRfaXJxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0FTU0lHTl9ERVZfSVJRIF9JT1coS1ZNSU8sIDB4NzAsIHN0cnVjdCBrdm1fYXNzaWduZWRfaXJxKQogI2RlZmluZSBLVk1fUkVJTkpFQ1RfQ09OVFJPTCBfSU8oS1ZNSU8sIDB4NzEpCiAjZGVmaW5lIEtWTV9ERUFTU0lHTl9QQ0lfREVWSUNFIF9JT1coS1ZNSU8sIDB4NzIsICAgc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2KQogI2RlZmluZSBLVk1fQVNTSUdOX1NFVF9NU0lYX05SIF9JT1coS1ZNSU8sIDB4NzMsICAgc3RydWN0IGt2bV9hc3NpZ25lZF9tc2l4X25yKQotI2RlZmluZSBLVk1fQVNTSUdOX1NFVF9NU0lYX0VOVFJZIF9JT1coS1ZNSU8sIDB4NzQsICAgc3RydWN0IGt2bV9hc3NpZ25lZF9tc2l4X2VudHJ5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0FTU0lHTl9TRVRfTVNJWF9FTlRSWSBfSU9XKEtWTUlPLCAweDc0LCAgIHN0cnVjdCBrdm1fYXNzaWduZWRfbXNpeF9lbnRyeSkKICNkZWZpbmUgS1ZNX0RFQVNTSUdOX0RFVl9JUlEgX0lPVyhLVk1JTywgMHg3NSwgc3RydWN0IGt2bV9hc3NpZ25lZF9pcnEpCiAjZGVmaW5lIEtWTV9JUlFGRCBfSU9XKEtWTUlPLCAweDc2LCBzdHJ1Y3Qga3ZtX2lycWZkKQogI2RlZmluZSBLVk1fQ1JFQVRFX1BJVDIgX0lPVyhLVk1JTywgMHg3Nywgc3RydWN0IGt2bV9waXRfY29uZmlnKQotI2RlZmluZSBLVk1fU0VUX0JPT1RfQ1BVX0lEIF9JTyhLVk1JTywgMHg3OCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9TRVRfQk9PVF9DUFVfSUQgX0lPKEtWTUlPLCAweDc4KQogI2RlZmluZSBLVk1fSU9FVkVOVEZEIF9JT1coS1ZNSU8sIDB4NzksIHN0cnVjdCBrdm1faW9ldmVudGZkKQogI2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUcgX0lPVyhLVk1JTywgMHg3YSwgc3RydWN0IGt2bV94ZW5faHZtX2NvbmZpZykKICNkZWZpbmUgS1ZNX1NFVF9DTE9DSyBfSU9XKEtWTUlPLCAweDdiLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEpCi0jZGVmaW5lIEtWTV9HRVRfQ0xPQ0sgX0lPUihLVk1JTywgMHg3Yywgc3RydWN0IGt2bV9jbG9ja19kYXRhKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0dFVF9DTE9DSyBfSU9SKEtWTUlPLCAweDdjLCBzdHJ1Y3Qga3ZtX2Nsb2NrX2RhdGEpCiAjZGVmaW5lIEtWTV9HRVRfUElUMiBfSU9SKEtWTUlPLCAweDlmLCBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZTIpCiAjZGVmaW5lIEtWTV9TRVRfUElUMiBfSU9XKEtWTUlPLCAweGEwLCBzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZTIpCiAjZGVmaW5lIEtWTV9QUENfR0VUX1BWSU5GTyBfSU9XKEtWTUlPLCAweGExLCBzdHJ1Y3Qga3ZtX3BwY19wdmluZm8pCi0jZGVmaW5lIEtWTV9TRVRfVFNDX0tIWiBfSU8oS1ZNSU8sIDB4YTIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fU0VUX1RTQ19LSFogX0lPKEtWTUlPLCAweGEyKQogI2RlZmluZSBLVk1fR0VUX1RTQ19LSFogX0lPKEtWTUlPLCAweGEzKQogI2RlZmluZSBLVk1fQVNTSUdOX1NFVF9JTlRYX01BU0sgX0lPVyhLVk1JTywgMHhhNCwgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYpCiAjZGVmaW5lIEtWTV9TSUdOQUxfTVNJIF9JT1coS1ZNSU8sIDB4YTUsIHN0cnVjdCBrdm1fbXNpKQotI2RlZmluZSBLVk1fUFBDX0dFVF9TTU1VX0lORk8gX0lPUihLVk1JTywgMHhhNiwgc3RydWN0IGt2bV9wcGNfc21tdV9pbmZvKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1BQQ19HRVRfU01NVV9JTkZPIF9JT1IoS1ZNSU8sIDB4YTYsIHN0cnVjdCBrdm1fcHBjX3NtbXVfaW5mbykKICNkZWZpbmUgS1ZNX1BQQ19BTExPQ0FURV9IVEFCIF9JT1dSKEtWTUlPLCAweGE3LCBfX3UzMikKICNkZWZpbmUgS1ZNX0NSRUFURV9TUEFQUl9UQ0UgX0lPVyhLVk1JTywgMHhhOCwgc3RydWN0IGt2bV9jcmVhdGVfc3BhcHJfdGNlKQogI2RlZmluZSBLVk1fQUxMT0NBVEVfUk1BIF9JT1IoS1ZNSU8sIDB4YTksIHN0cnVjdCBrdm1fYWxsb2NhdGVfcm1hKQotI2RlZmluZSBLVk1fUFBDX0dFVF9IVEFCX0ZEIF9JT1coS1ZNSU8sIDB4YWEsIHN0cnVjdCBrdm1fZ2V0X2h0YWJfZmQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fUFBDX0dFVF9IVEFCX0ZEIF9JT1coS1ZNSU8sIDB4YWEsIHN0cnVjdCBrdm1fZ2V0X2h0YWJfZmQpCiAjZGVmaW5lIEtWTV9BUk1fU0VUX0RFVklDRV9BRERSIF9JT1coS1ZNSU8sIDB4YWIsIHN0cnVjdCBrdm1fYXJtX2RldmljZV9hZGRyKQogI2RlZmluZSBLVk1fUFBDX1JUQVNfREVGSU5FX1RPS0VOIF9JT1coS1ZNSU8sIDB4YWMsIHN0cnVjdCBrdm1fcnRhc190b2tlbl9hcmdzKQogI2RlZmluZSBLVk1fQ1JFQVRFX0RFVklDRSBfSU9XUihLVk1JTywgMHhlMCwgc3RydWN0IGt2bV9jcmVhdGVfZGV2aWNlKQotI2RlZmluZSBLVk1fU0VUX0RFVklDRV9BVFRSIF9JT1coS1ZNSU8sIDB4ZTEsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fU0VUX0RFVklDRV9BVFRSIF9JT1coS1ZNSU8sIDB4ZTEsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpCiAjZGVmaW5lIEtWTV9HRVRfREVWSUNFX0FUVFIgX0lPVyhLVk1JTywgMHhlMiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0cikKICNkZWZpbmUgS1ZNX0hBU19ERVZJQ0VfQVRUUiBfSU9XKEtWTUlPLCAweGUzLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyKQogI2RlZmluZSBLVk1fUlVOIF9JTyhLVk1JTywgMHg4MCkKLSNkZWZpbmUgS1ZNX0dFVF9SRUdTIF9JT1IoS1ZNSU8sIDB4ODEsIHN0cnVjdCBrdm1fcmVncykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9HRVRfUkVHUyBfSU9SKEtWTUlPLCAweDgxLCBzdHJ1Y3Qga3ZtX3JlZ3MpCiAjZGVmaW5lIEtWTV9TRVRfUkVHUyBfSU9XKEtWTUlPLCAweDgyLCBzdHJ1Y3Qga3ZtX3JlZ3MpCiAjZGVmaW5lIEtWTV9HRVRfU1JFR1MgX0lPUihLVk1JTywgMHg4Mywgc3RydWN0IGt2bV9zcmVncykKICNkZWZpbmUgS1ZNX1NFVF9TUkVHUyBfSU9XKEtWTUlPLCAweDg0LCBzdHJ1Y3Qga3ZtX3NyZWdzKQotI2RlZmluZSBLVk1fVFJBTlNMQVRFIF9JT1dSKEtWTUlPLCAweDg1LCBzdHJ1Y3Qga3ZtX3RyYW5zbGF0aW9uKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1RSQU5TTEFURSBfSU9XUihLVk1JTywgMHg4NSwgc3RydWN0IGt2bV90cmFuc2xhdGlvbikKICNkZWZpbmUgS1ZNX0lOVEVSUlVQVCBfSU9XKEtWTUlPLCAweDg2LCBzdHJ1Y3Qga3ZtX2ludGVycnVwdCkKICNkZWZpbmUgS1ZNX0RFQlVHX0dVRVNUIF9fS1ZNX0RFUFJFQ0FURURfVkNQVV9XXzB4ODcKICNkZWZpbmUgS1ZNX0dFVF9NU1JTIF9JT1dSKEtWTUlPLCAweDg4LCBzdHJ1Y3Qga3ZtX21zcnMpCi0jZGVmaW5lIEtWTV9TRVRfTVNSUyBfSU9XKEtWTUlPLCAweDg5LCBzdHJ1Y3Qga3ZtX21zcnMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fU0VUX01TUlMgX0lPVyhLVk1JTywgMHg4OSwgc3RydWN0IGt2bV9tc3JzKQogI2RlZmluZSBLVk1fU0VUX0NQVUlEIF9JT1coS1ZNSU8sIDB4OGEsIHN0cnVjdCBrdm1fY3B1aWQpCiAjZGVmaW5lIEtWTV9TRVRfU0lHTkFMX01BU0sgX0lPVyhLVk1JTywgMHg4Yiwgc3RydWN0IGt2bV9zaWduYWxfbWFzaykKICNkZWZpbmUgS1ZNX0dFVF9GUFUgX0lPUihLVk1JTywgMHg4Yywgc3RydWN0IGt2bV9mcHUpCi0jZGVmaW5lIEtWTV9TRVRfRlBVIF9JT1coS1ZNSU8sIDB4OGQsIHN0cnVjdCBrdm1fZnB1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1NFVF9GUFUgX0lPVyhLVk1JTywgMHg4ZCwgc3RydWN0IGt2bV9mcHUpCiAjZGVmaW5lIEtWTV9HRVRfTEFQSUMgX0lPUihLVk1JTywgMHg4ZSwgc3RydWN0IGt2bV9sYXBpY19zdGF0ZSkKICNkZWZpbmUgS1ZNX1NFVF9MQVBJQyBfSU9XKEtWTUlPLCAweDhmLCBzdHJ1Y3Qga3ZtX2xhcGljX3N0YXRlKQogI2RlZmluZSBLVk1fU0VUX0NQVUlEMiBfSU9XKEtWTUlPLCAweDkwLCBzdHJ1Y3Qga3ZtX2NwdWlkMikKLSNkZWZpbmUgS1ZNX0dFVF9DUFVJRDIgX0lPV1IoS1ZNSU8sIDB4OTEsIHN0cnVjdCBrdm1fY3B1aWQyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0dFVF9DUFVJRDIgX0lPV1IoS1ZNSU8sIDB4OTEsIHN0cnVjdCBrdm1fY3B1aWQyKQogI2RlZmluZSBLVk1fVFBSX0FDQ0VTU19SRVBPUlRJTkcgX0lPV1IoS1ZNSU8sIDB4OTIsIHN0cnVjdCBrdm1fdHByX2FjY2Vzc19jdGwpCiAjZGVmaW5lIEtWTV9TRVRfVkFQSUNfQUREUiBfSU9XKEtWTUlPLCAweDkzLCBzdHJ1Y3Qga3ZtX3ZhcGljX2FkZHIpCiAjZGVmaW5lIEtWTV9TMzkwX0lOVEVSUlVQVCBfSU9XKEtWTUlPLCAweDk0LCBzdHJ1Y3Qga3ZtX3MzOTBfaW50ZXJydXB0KQotI2RlZmluZSBLVk1fUzM5MF9TVE9SRV9TVEFUVVNfTk9BRERSICgtMXVsKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1MzOTBfU1RPUkVfU1RBVFVTX05PQUREUiAoLTF1bCkKICNkZWZpbmUgS1ZNX1MzOTBfU1RPUkVfU1RBVFVTX1BSRUZJWEVEICgtMnVsKQogI2RlZmluZSBLVk1fUzM5MF9TVE9SRV9TVEFUVVMgX0lPVyhLVk1JTywgMHg5NSwgdW5zaWduZWQgbG9uZykKICNkZWZpbmUgS1ZNX1MzOTBfU0VUX0lOSVRJQUxfUFNXIF9JT1coS1ZNSU8sIDB4OTYsIHN0cnVjdCBrdm1fczM5MF9wc3cpCi0jZGVmaW5lIEtWTV9TMzkwX0lOSVRJQUxfUkVTRVQgX0lPKEtWTUlPLCAweDk3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1MzOTBfSU5JVElBTF9SRVNFVCBfSU8oS1ZNSU8sIDB4OTcpCiAjZGVmaW5lIEtWTV9HRVRfTVBfU1RBVEUgX0lPUihLVk1JTywgMHg5OCwgc3RydWN0IGt2bV9tcF9zdGF0ZSkKICNkZWZpbmUgS1ZNX1NFVF9NUF9TVEFURSBfSU9XKEtWTUlPLCAweDk5LCBzdHJ1Y3Qga3ZtX21wX3N0YXRlKQogI2RlZmluZSBLVk1fTk1JIF9JTyhLVk1JTywgMHg5YSkKLSNkZWZpbmUgS1ZNX1NFVF9HVUVTVF9ERUJVRyBfSU9XKEtWTUlPLCAweDliLCBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX1NFVF9HVUVTVF9ERUJVRyBfSU9XKEtWTUlPLCAweDliLCBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnKQogI2RlZmluZSBLVk1fWDg2X1NFVFVQX01DRSBfSU9XKEtWTUlPLCAweDljLCBfX3U2NCkKICNkZWZpbmUgS1ZNX1g4Nl9HRVRfTUNFX0NBUF9TVVBQT1JURUQgX0lPUihLVk1JTywgMHg5ZCwgX191NjQpCiAjZGVmaW5lIEtWTV9YODZfU0VUX01DRSBfSU9XKEtWTUlPLCAweDllLCBzdHJ1Y3Qga3ZtX3g4Nl9tY2UpCi0jZGVmaW5lIEtWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLIF9JT1IoS1ZNSU8sIDB4OWEsIHZvaWQgKikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLIF9JT1IoS1ZNSU8sIDB4OWEsIHZvaWQgKikKICNkZWZpbmUgS1ZNX0lBNjRfVkNQVV9TRVRfU1RBQ0sgX0lPVyhLVk1JTywgMHg5Yiwgdm9pZCAqKQogI2RlZmluZSBLVk1fR0VUX1ZDUFVfRVZFTlRTIF9JT1IoS1ZNSU8sIDB4OWYsIHN0cnVjdCBrdm1fdmNwdV9ldmVudHMpCiAjZGVmaW5lIEtWTV9TRVRfVkNQVV9FVkVOVFMgX0lPVyhLVk1JTywgMHhhMCwgc3RydWN0IGt2bV92Y3B1X2V2ZW50cykKLSNkZWZpbmUgS1ZNX0dFVF9ERUJVR1JFR1MgX0lPUihLVk1JTywgMHhhMSwgc3RydWN0IGt2bV9kZWJ1Z3JlZ3MpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fR0VUX0RFQlVHUkVHUyBfSU9SKEtWTUlPLCAweGExLCBzdHJ1Y3Qga3ZtX2RlYnVncmVncykKICNkZWZpbmUgS1ZNX1NFVF9ERUJVR1JFR1MgX0lPVyhLVk1JTywgMHhhMiwgc3RydWN0IGt2bV9kZWJ1Z3JlZ3MpCiAjZGVmaW5lIEtWTV9FTkFCTEVfQ0FQIF9JT1coS1ZNSU8sIDB4YTMsIHN0cnVjdCBrdm1fZW5hYmxlX2NhcCkKICNkZWZpbmUgS1ZNX0dFVF9YU0FWRSBfSU9SKEtWTUlPLCAweGE0LCBzdHJ1Y3Qga3ZtX3hzYXZlKQotI2RlZmluZSBLVk1fU0VUX1hTQVZFIF9JT1coS1ZNSU8sIDB4YTUsIHN0cnVjdCBrdm1feHNhdmUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fU0VUX1hTQVZFIF9JT1coS1ZNSU8sIDB4YTUsIHN0cnVjdCBrdm1feHNhdmUpCiAjZGVmaW5lIEtWTV9HRVRfWENSUyBfSU9SKEtWTUlPLCAweGE2LCBzdHJ1Y3Qga3ZtX3hjcnMpCiAjZGVmaW5lIEtWTV9TRVRfWENSUyBfSU9XKEtWTUlPLCAweGE3LCBzdHJ1Y3Qga3ZtX3hjcnMpCiAjZGVmaW5lIEtWTV9ESVJUWV9UTEIgX0lPVyhLVk1JTywgMHhhYSwgc3RydWN0IGt2bV9kaXJ0eV90bGIpCi0jZGVmaW5lIEtWTV9HRVRfT05FX1JFRyBfSU9XKEtWTUlPLCAweGFiLCBzdHJ1Y3Qga3ZtX29uZV9yZWcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLVk1fR0VUX09ORV9SRUcgX0lPVyhLVk1JTywgMHhhYiwgc3RydWN0IGt2bV9vbmVfcmVnKQogI2RlZmluZSBLVk1fU0VUX09ORV9SRUcgX0lPVyhLVk1JTywgMHhhYywgc3RydWN0IGt2bV9vbmVfcmVnKQogI2RlZmluZSBLVk1fS1ZNQ0xPQ0tfQ1RSTCBfSU8oS1ZNSU8sIDB4YWQpCiAjZGVmaW5lIEtWTV9BUk1fVkNQVV9JTklUIF9JT1coS1ZNSU8sIDB4YWUsIHN0cnVjdCBrdm1fdmNwdV9pbml0KQotI2RlZmluZSBLVk1fR0VUX1JFR19MSVNUIF9JT1dSKEtWTUlPLCAweGIwLCBzdHJ1Y3Qga3ZtX3JlZ19saXN0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS1ZNX0FSTV9QUkVGRVJSRURfVEFSR0VUIF9JT1IoS1ZNSU8sIDB4YWYsIHN0cnVjdCBrdm1fdmNwdV9pbml0KQorI2RlZmluZSBLVk1fR0VUX1JFR19MSVNUIF9JT1dSKEtWTUlPLCAweGIwLCBzdHJ1Y3Qga3ZtX3JlZ19saXN0KQogI2RlZmluZSBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUgKDEgPDwgMCkKICNkZWZpbmUgS1ZNX0RFVl9BU1NJR05fUENJXzJfMyAoMSA8PCAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0RFVl9BU1NJR05fTUFTS19JTlRYICgxIDw8IDIpCiBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhc3NpZ25lZF9kZXZfaWQ7CiAgX191MzIgYnVzbnI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGRldmZuOwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzZWducjsKICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzExXTsKICB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEtWTV9ERVZfSVJRX0hPU1RfSU5UWCAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0RFVl9JUlFfSE9TVF9NU0kgKDEgPDwgMSkKICNkZWZpbmUgS1ZNX0RFVl9JUlFfSE9TVF9NU0lYICgxIDw8IDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVk1fREVWX0lSUV9HVUVTVF9JTlRYICgxIDw8IDgpCiAjZGVmaW5lIEtWTV9ERVZfSVJRX0dVRVNUX01TSSAoMSA8PCA5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0RFVl9JUlFfR1VFU1RfTVNJWCAoMSA8PCAxMCkKICNkZWZpbmUgS1ZNX0RFVl9JUlFfSE9TVF9NQVNLIDB4MDBmZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1ZNX0RFVl9JUlFfR1VFU1RfTUFTSyAweGZmMDAKIHN0cnVjdCBrdm1fYXNzaWduZWRfaXJxIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYXNzaWduZWRfZGV2X2lkOwogIF9fdTMyIGhvc3RfaXJxOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBndWVzdF9pcnE7CiAgX191MzIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBfX3UzMiByZXNlcnZlZFsxMl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1fYXNzaWduZWRfbXNpeF9uciB7CiAgX191MzIgYXNzaWduZWRfZGV2X2lkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBlbnRyeV9ucjsKICBfX3UxNiBwYWRkaW5nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEtWTV9NQVhfTVNJWF9QRVJfREVWIDI1NgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrdm1fYXNzaWduZWRfbXNpeF9lbnRyeSB7CiAgX191MzIgYXNzaWduZWRfZGV2X2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBnc2k7CiAgX191MTYgZW50cnk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHBhZGRpbmdbM107CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rdm1fcGFyYS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9rdm1fcGFyYS5oCmluZGV4IGFiMDFlNjkuLmQ5NzM5OTYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgva3ZtX3BhcmEuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2t2bV9wYXJhLmgKQEAgLTI4LDYgKzI4LDcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtWTV9IQ19GRUFUVVJFUyAzCiAjZGVmaW5lIEtWTV9IQ19QUENfTUFQX01BR0lDX1BBR0UgNAorI2RlZmluZSBLVk1fSENfS0lDS19DUFUgNQogI2luY2x1ZGUgPGFzbS9rdm1fcGFyYS5oPgotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L2xpYmMtY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2Yjc2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbGliYy1jb21wYXQuaApAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9VQVBJX0xJQkNfQ09NUEFUX0gKKyNkZWZpbmUgX1VBUElfTElCQ19DT01QQVRfSAorI2lmZGVmIF9fR0xJQkNfXworI2lmZGVmIF9ORVRJTkVUX0lOX0gKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fVUFQSV9ERUZfSU42X0FERFIgMAorI2lmIGRlZmluZWQoX19VU0VfTUlTQykgfHwgZGVmaW5lZChfX1VTRV9HTlUpCisjZGVmaW5lIF9fVUFQSV9ERUZfSU42X0FERFJfQUxUIDAKKyNlbHNlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1VBUElfREVGX0lONl9BRERSX0FMVCAxCisjZW5kaWYKKyNkZWZpbmUgX19VQVBJX0RFRl9TT0NLQUREUl9JTjYgMAorI2RlZmluZSBfX1VBUElfREVGX0lQVjZfTVJFUSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1VBUElfREVGX0lQUFJPVE9fVjYgMAorI2Vsc2UKKyNkZWZpbmUgX19VQVBJX0RFRl9JTjZfQUREUiAxCisjZGVmaW5lIF9fVUFQSV9ERUZfSU42X0FERFJfQUxUIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fVUFQSV9ERUZfU09DS0FERFJfSU42IDEKKyNkZWZpbmUgX19VQVBJX0RFRl9JUFY2X01SRVEgMQorI2RlZmluZSBfX1VBUElfREVGX0lQUFJPVE9fVjYgMQorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2Vsc2UKKyNkZWZpbmUgX19VQVBJX0RFRl9JTjZfQUREUiAxCisjZGVmaW5lIF9fVUFQSV9ERUZfSU42X0FERFJfQUxUIDEKKyNkZWZpbmUgX19VQVBJX0RFRl9TT0NLQUREUl9JTjYgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19VQVBJX0RFRl9JUFY2X01SRVEgMQorI2RlZmluZSBfX1VBUElfREVGX0lQUFJPVE9fVjYgMQorI2VuZGlmCisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21hZ2ljLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21hZ2ljLmgKaW5kZXggMTllZjM5Mi4uN2M3YzZjMyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tYWdpYy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWFnaWMuaApAQCAtOTMsNCArOTMsNiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVREX0lOT0RFX0ZTX01BR0lDIDB4MTEzMDc4NTQKICNkZWZpbmUgQU5PTl9JTk9ERV9GU19NQUdJQyAweDA5MDQxOTM0CisjZGVmaW5lIEJUUkZTX1RFU1RfTUFHSUMgMHg3MzcyNzI3OQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tYWpvci5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tYWpvci5oCmluZGV4IDNkMTU1N2EuLmQwN2QwNjUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWFqb3IuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21ham9yLmgKQEAgLTc4LDExOCArNzgsMTIxIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBWlRFQ0hfQ0RST01fTUFKT1IgMjkKICNkZWZpbmUgRkJfTUFKT1IgMjkKKyNkZWZpbmUgTVREX0JMT0NLX01BSk9SIDMxCiAjZGVmaW5lIENNMjA2X0NEUk9NX01BSk9SIDMyCi0jZGVmaW5lIElERTJfTUFKT1IgMzMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElERTJfTUFKT1IgMzMKICNkZWZpbmUgSURFM19NQUpPUiAzNAogI2RlZmluZSBaODUzMF9NQUpPUiAzNAogI2RlZmluZSBYUFJBTV9NQUpPUiAzNQotI2RlZmluZSBORVRMSU5LX01BSk9SIDM2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORVRMSU5LX01BSk9SIDM2CiAjZGVmaW5lIFBTMkVTRElfTUFKT1IgMzYKICNkZWZpbmUgSURFVEFQRV9NQUpPUiAzNwogI2RlZmluZSBaMlJBTV9NQUpPUiAzNwotI2RlZmluZSBBUEJMT0NLX01BSk9SIDM4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUEJMT0NLX01BSk9SIDM4CiAjZGVmaW5lIEREVl9NQUpPUiAzOQogI2RlZmluZSBOQkRfTUFKT1IgNDMKICNkZWZpbmUgUklTQ09NOF9OT1JNQUxfTUFKT1IgNDgKLSNkZWZpbmUgREFDOTYwX01BSk9SIDQ4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEQUM5NjBfTUFKT1IgNDgKICNkZWZpbmUgUklTQ09NOF9DQUxMT1VUX01BSk9SIDQ5CiAjZGVmaW5lIE1LSVNTX01BSk9SIDU1CiAjZGVmaW5lIERTUDU2S19NQUpPUiA1NQotI2RlZmluZSBJREU0X01BSk9SIDU2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJREU0X01BSk9SIDU2CiAjZGVmaW5lIElERTVfTUFKT1IgNTcKICNkZWZpbmUgU0NTSV9ESVNLMV9NQUpPUiA2NQogI2RlZmluZSBTQ1NJX0RJU0syX01BSk9SIDY2Ci0jZGVmaW5lIFNDU0lfRElTSzNfTUFKT1IgNjcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNDU0lfRElTSzNfTUFKT1IgNjcKICNkZWZpbmUgU0NTSV9ESVNLNF9NQUpPUiA2OAogI2RlZmluZSBTQ1NJX0RJU0s1X01BSk9SIDY5CiAjZGVmaW5lIFNDU0lfRElTSzZfTUFKT1IgNzAKLSNkZWZpbmUgU0NTSV9ESVNLN19NQUpPUiA3MQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NTSV9ESVNLN19NQUpPUiA3MQogI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SIDcyCiAjZGVmaW5lIENPTVBBUV9TTUFSVDJfTUFKT1IxIDczCiAjZGVmaW5lIENPTVBBUV9TTUFSVDJfTUFKT1IyIDc0Ci0jZGVmaW5lIENPTVBBUV9TTUFSVDJfTUFKT1IzIDc1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMyA3NQogI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNCA3NgogI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNSA3NwogI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNiA3OAotI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNyA3OQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjcgNzkKICNkZWZpbmUgU1BFQ0lBTElYX05PUk1BTF9NQUpPUiA3NQogI2RlZmluZSBTUEVDSUFMSVhfQ0FMTE9VVF9NQUpPUiA3NgogI2RlZmluZSBBVVJPUkFfTUFKT1IgNzkKLSNkZWZpbmUgSTJPX01BSk9SIDgwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJMk9fTUFKT1IgODAKICNkZWZpbmUgU0hNSVFfTUFKT1IgODUKICNkZWZpbmUgU0NTSV9DSEFOR0VSX01BSk9SIDg2CiAjZGVmaW5lIElERTZfTUFKT1IgODgKLSNkZWZpbmUgSURFN19NQUpPUiA4OQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSURFN19NQUpPUiA4OQogI2RlZmluZSBJREU4X01BSk9SIDkwCisjZGVmaW5lIE1URF9DSEFSX01BSk9SIDkwCiAjZGVmaW5lIElERTlfTUFKT1IgOTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERBU0RfTUFKT1IgOTQKICNkZWZpbmUgTURJU0tfTUFKT1IgOTUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVCRF9NQUpPUiA5OAogI2RlZmluZSBQUF9NQUpPUiA5OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSlNGRF9NQUpPUiA5OQogI2RlZmluZSBQSE9ORV9NQUpPUiAxMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SIDEwNAogI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjEgMTA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjIgMTA2CiAjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SMyAxMDcKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SNCAxMDgKICNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1I1IDEwOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1I2IDExMAogI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjcgMTExCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSU9EQVNEX01BSk9SIDExMgogI2RlZmluZSBWSU9DRF9NQUpPUiAxMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUQVJBSURfTUFKT1IgMTE0CiAjZGVmaW5lIFNDU0lfRElTSzhfTUFKT1IgMTI4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQ1NJX0RJU0s5X01BSk9SIDEyOQogI2RlZmluZSBTQ1NJX0RJU0sxMF9NQUpPUiAxMzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNDU0lfRElTSzExX01BSk9SIDEzMQogI2RlZmluZSBTQ1NJX0RJU0sxMl9NQUpPUiAxMzIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNDU0lfRElTSzEzX01BSk9SIDEzMwogI2RlZmluZSBTQ1NJX0RJU0sxNF9NQUpPUiAxMzQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNDU0lfRElTSzE1X01BSk9SIDEzNQogI2RlZmluZSBVTklYOThfUFRZX01BU1RFUl9NQUpPUiAxMjgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVOSVg5OF9QVFlfTUFKT1JfQ09VTlQgOAogI2RlZmluZSBVTklYOThfUFRZX1NMQVZFX01BSk9SIChVTklYOThfUFRZX01BU1RFUl9NQUpPUitVTklYOThfUFRZX01BSk9SX0NPVU5UKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFJCRF9NQUpPUiAxNDcKICNkZWZpbmUgUlRGX01BSk9SIDE1MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkFXX01BSk9SIDE2MgogI2RlZmluZSBVU0JfQUNNX01BSk9SIDE2NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCX0FDTV9BVVhfTUFKT1IgMTY3CiAjZGVmaW5lIFVTQl9DSEFSX01BSk9SIDE4MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTU1DX0JMT0NLX01BSk9SIDE3OQogI2RlZmluZSBWWFZNX01BSk9SIDE5OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVlhTUEVDX01BSk9SIDIwMAogI2RlZmluZSBWWERNUF9NQUpPUiAyMDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhFTlZCRF9NQUpPUiAyMDIKICNkZWZpbmUgTVNSX01BSk9SIDIwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1BVSURfTUFKT1IgMjAzCiAjZGVmaW5lIE9TU1RfTUFKT1IgMjA2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJQk1fVFRZMzI3MF9NQUpPUiAyMjcKICNkZWZpbmUgSUJNX0ZTMzI3MF9NQUpPUiAyMjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJT1RBUEVfTUFKT1IgMjMwCiAjZGVmaW5lIEJMT0NLX0VYVF9NQUpPUiAyNTkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNDU0lfT1NEX01BSk9SIDI2MAogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tZWRpYS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tZWRpYS5oCmluZGV4IDhhMjY4N2MuLjRiYTU0YWEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWVkaWEuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21lZGlhLmgKQEAgLTkyLDM1ICs5MiwzNyBAQAogI2RlZmluZSBNRURJQV9QQURfRkxfU0lOSyAoMSA8PCAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUVESUFfUEFEX0ZMX1NPVVJDRSAoMSA8PCAxKQorI2RlZmluZSBNRURJQV9QQURfRkxfTVVTVF9DT05ORUNUICgxIDw8IDIpCiBzdHJ1Y3QgbWVkaWFfcGFkX2Rlc2MgewogIF9fdTMyIGVudGl0eTsKLSBfX3UxNiBpbmRleDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgaW5kZXg7CiAgX191MzIgZmxhZ3M7CiAgX191MzIgcmVzZXJ2ZWRbMl07CiB9OwotI2RlZmluZSBNRURJQV9MTktfRkxfRU5BQkxFRCAoMSA8PCAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUVESUFfTE5LX0ZMX0VOQUJMRUQgKDEgPDwgMCkKICNkZWZpbmUgTUVESUFfTE5LX0ZMX0lNTVVUQUJMRSAoMSA8PCAxKQogI2RlZmluZSBNRURJQV9MTktfRkxfRFlOQU1JQyAoMSA8PCAyKQogc3RydWN0IG1lZGlhX2xpbmtfZGVzYyB7Ci0gc3RydWN0IG1lZGlhX3BhZF9kZXNjIHNvdXJjZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IG1lZGlhX3BhZF9kZXNjIHNvdXJjZTsKICBzdHJ1Y3QgbWVkaWFfcGFkX2Rlc2Mgc2luazsKICBfX3UzMiBmbGFnczsKICBfX3UzMiByZXNlcnZlZFsyXTsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBtZWRpYV9saW5rc19lbnVtIHsKICBfX3UzMiBlbnRpdHk7CiAgc3RydWN0IG1lZGlhX3BhZF9kZXNjIF9fdXNlciAqcGFkczsKLSBzdHJ1Y3QgbWVkaWFfbGlua19kZXNjIF9fdXNlciAqbGlua3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBtZWRpYV9saW5rX2Rlc2MgX191c2VyICpsaW5rczsKICBfX3UzMiByZXNlcnZlZFs0XTsKIH07CiAjZGVmaW5lIE1FRElBX0lPQ19ERVZJQ0VfSU5GTyBfSU9XUignfCcsIDB4MDAsIHN0cnVjdCBtZWRpYV9kZXZpY2VfaW5mbykKLSNkZWZpbmUgTUVESUFfSU9DX0VOVU1fRU5USVRJRVMgX0lPV1IoJ3wnLCAweDAxLCBzdHJ1Y3QgbWVkaWFfZW50aXR5X2Rlc2MpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRURJQV9JT0NfRU5VTV9FTlRJVElFUyBfSU9XUignfCcsIDB4MDEsIHN0cnVjdCBtZWRpYV9lbnRpdHlfZGVzYykKICNkZWZpbmUgTUVESUFfSU9DX0VOVU1fTElOS1MgX0lPV1IoJ3wnLCAweDAyLCBzdHJ1Y3QgbWVkaWFfbGlua3NfZW51bSkKICNkZWZpbmUgTUVESUFfSU9DX1NFVFVQX0xJTksgX0lPV1IoJ3wnLCAweDAzLCBzdHJ1Y3QgbWVkaWFfbGlua19kZXNjKQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9taWNfY29tbW9uLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21pY19jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGQ4MzA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9taWNfY29tbW9uLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NSUNfQ09NTU9OX0hfCisjZGVmaW5lIF9fTUlDX0NPTU1PTl9IXworI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19yaW5nLmg+CisjZGVmaW5lIF9fbWljX2FsaWduKGEsIHgpICgoKGEpICsgKHgpIC0gMSkgJiB+KCh4KSAtIDEpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBtaWNfZGV2aWNlX2Rlc2MgeworIF9fczggdHlwZTsKKyBfX3U4IG51bV92cTsKKyBfX3U4IGZlYXR1cmVfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGNvbmZpZ19sZW47CisgX191OCBzdGF0dXM7CisgX19sZTY0IGNvbmZpZ1swXTsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoOCkpKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgbWljX2RldmljZV9jdHJsIHsKKyBfX2xlNjQgdmRldjsKKyBfX3U4IGNvbmZpZ19jaGFuZ2U7CisgX191OCB2ZGV2X3Jlc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGd1ZXN0X2FjazsKKyBfX3U4IGhvc3RfYWNrOworIF9fdTggdXNlZF9hZGRyZXNzX3VwZGF0ZWQ7CisgX19zOCBjMmhfdmRldl9kYjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zOCBoMmNfdmRldl9kYjsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoOCkpKTsKK3N0cnVjdCBtaWNfYm9vdHBhcmFtIHsKKyBfX2xlMzIgbWFnaWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczggYzJoX3NodXRkb3duX2RiOworIF9fczggaDJjX3NodXRkb3duX2RiOworIF9fczggaDJjX2NvbmZpZ19kYjsKKyBfX3U4IHNodXRkb3duX3N0YXR1czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBzaHV0ZG93bl9jYXJkOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg4KSkpOworc3RydWN0IG1pY19kZXZpY2VfcGFnZSB7Cisgc3RydWN0IG1pY19ib290cGFyYW0gYm9vdHBhcmFtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgbWljX2RldmljZV9kZXNjIGRlc2NbMF07Cit9Oworc3RydWN0IG1pY192cWNvbmZpZyB7CisgX19sZTY0IGFkZHJlc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGU2NCB1c2VkX2FkZHJlc3M7CisgX19sZTE2IG51bTsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoOCkpKTsKKyNkZWZpbmUgTUlDX1ZJUlRJT19SSU5HX0FMSUdOIDQwOTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1JQ19NQVhfVlJJTkdTIDQKKyNkZWZpbmUgTUlDX1ZSSU5HX0VOVFJJRVMgMTI4CisjZGVmaW5lIE1JQ19NQVhfVlJJTkdfRU5UUklFUyAxMjgKKyNkZWZpbmUgTUlDX01BWF9ERVNDX0JMS19TSVpFIDI1NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBfbWljX3ZyaW5nX2luZm8geworIF9fdTE2IGF2YWlsX2lkeDsKKyBfX2xlMzIgbWFnaWM7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBtaWNfdnJpbmcgeworIHN0cnVjdCB2cmluZyB2cjsKKyBzdHJ1Y3QgX21pY192cmluZ19pbmZvICppbmZvOworIHZvaWQgKnZhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgbGVuOworfTsKKyNkZWZpbmUgbWljX2FsaWduZWRfZGVzY19zaXplKGQpIF9fbWljX2FsaWduKG1pY19kZXNjX3NpemUoZCksIDgpCisjaWZuZGVmIElOVEVMX01JQ19DQVJECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCisjZGVmaW5lIE1JQ19EUF9TSVpFIDQwOTYKKyNkZWZpbmUgTUlDX01BR0lDIDB4YzBmZmVlMDAKK2VudW0gbWljX3N0YXRlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE1JQ19PRkZMSU5FID0gMCwKKyBNSUNfT05MSU5FLAorIE1JQ19TSFVUVElOR19ET1dOLAorIE1JQ19SRVNFVF9GQUlMRUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE1JQ19TVVNQRU5ESU5HLAorIE1JQ19TVVNQRU5ERUQsCisgTUlDX0xBU1QKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBtaWNfc3RhdHVzIHsKKyBNSUNfTk9QID0gMCwKKyBNSUNfQ1JBU0hFRCwKKyBNSUNfSEFMVEVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBNSUNfUE9XRVJfT0ZGLAorIE1JQ19SRVNUQVJULAorIE1JQ19TVEFUVVNfTEFTVAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbWljX2lvY3RsLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21pY19pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYjFhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21pY19pb2N0bC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX01JQ19JT0NUTF9IXworI2RlZmluZSBfTUlDX0lPQ1RMX0hfCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK3N0cnVjdCBtaWNfY29weV9kZXNjIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGlvdmVjICppb3Y7CisgX191MzIgaW92Y250OworIF9fdTggdnJfaWR4OworIF9fdTggdXBkYXRlX3VzZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG91dF9sZW47Cit9OworI2RlZmluZSBNSUNfVklSVElPX0FERF9ERVZJQ0UgX0lPV1IoJ3MnLCAxLCBzdHJ1Y3QgbWljX2RldmljZV9kZXNjICopCisjZGVmaW5lIE1JQ19WSVJUSU9fQ09QWV9ERVNDIF9JT1dSKCdzJywgMiwgc3RydWN0IG1pY19jb3B5X2Rlc2MgKikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1JQ19WSVJUSU9fQ09ORklHX0NIQU5HRSBfSU9XUigncycsIDUsIF9fdTggKikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tcXVldWUuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbXF1ZXVlLmgKaW5kZXggOTQ0OGNmZS4uNDU5OWNkYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tcXVldWUuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21xdWV1ZS5oCkBAIC0yMiwxMiArMjIsMTIgQEAKICNkZWZpbmUgTVFfQllURVNfTUFYIDgxOTIwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtcV9hdHRyIHsKLSBsb25nIG1xX2ZsYWdzOwotIGxvbmcgbXFfbWF4bXNnOwotIGxvbmcgbXFfbXNnc2l6ZTsKKyBfX2tlcm5lbF9sb25nX3QgbXFfZmxhZ3M7CisgX19rZXJuZWxfbG9uZ190IG1xX21heG1zZzsKKyBfX2tlcm5lbF9sb25nX3QgbXFfbXNnc2l6ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gbG9uZyBtcV9jdXJtc2dzOwotIGxvbmcgX19yZXNlcnZlZFs0XTsKKyBfX2tlcm5lbF9sb25nX3QgbXFfY3VybXNnczsKKyBfX2tlcm5lbF9sb25nX3QgX19yZXNlcnZlZFs0XTsKIH07CiAjZGVmaW5lIE5PVElGWV9OT05FIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21zZG9zX2ZzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21zZG9zX2ZzLmgKaW5kZXggYzU2NGYzZS4uZjExOTBhZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tc2Rvc19mcy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbXNkb3NfZnMuaApAQCAtMTAxLDcgKzEwMSw3IEBACiAjZGVmaW5lIEZBVF9JT0NUTF9HRVRfQVRUUklCVVRFUyBfSU9SKCdyJywgMHgxMCwgX191MzIpCiAjZGVmaW5lIEZBVF9JT0NUTF9TRVRfQVRUUklCVVRFUyBfSU9XKCdyJywgMHgxMSwgX191MzIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBWRkFUX0lPQ1RMX0dFVF9WT0xVTUVfSUQgX0lPUigncicsIDB4MTIsIF9fdTMyKQorI2RlZmluZSBGQVRfSU9DVExfR0VUX1ZPTFVNRV9JRCBfSU9SKCdyJywgMHgxMywgX191MzIpCiBzdHJ1Y3QgZmF0X2Jvb3Rfc2VjdG9yIHsKICBfX3U4IGlnbm9yZWRbM107CiAgX191OCBzeXN0ZW1faWRbOF07CkBAIC0xMjYsNiArMTI2LDExIEBACiAgX191OCBkcml2ZV9udW1iZXI7CiAgX191OCBzdGF0ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBzaWduYXR1cmU7CisgX191OCB2b2xfaWRbNF07CisgX191OCB2b2xfbGFiZWxbMTFdOworIF9fdTggZnNfdHlwZVs4XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBmYXQxNjsKICBzdHJ1Y3QgewogIF9fbGUzMiBsZW5ndGg7CkBAIC0xMzksNiArMTQ0LDExIEBACiAgX19sZTE2IHJlc2VydmVkMls2XTsKICBfX3U4IGRyaXZlX251bWJlcjsKICBfX3U4IHN0YXRlOworIF9fdTggc2lnbmF0dXJlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHZvbF9pZFs0XTsKKyBfX3U4IHZvbF9sYWJlbFsxMV07CisgX191OCBmc190eXBlWzhdOwogIH0gZmF0MzI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH07CkBAIC0xNTMsNDQgKzE2MywzMiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMzIgcmVzZXJ2ZWQyWzRdOwogfTsKLXN0cnVjdCBmYXRfYm9vdF9ic3ggewotIF9fdTggZHJpdmU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fdTggcmVzZXJ2ZWQxOwotIF9fdTggc2lnbmF0dXJlOwotIF9fdTggdm9sX2lkWzRdOwotIF9fdTggdm9sX2xhYmVsWzExXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gX191OCB0eXBlWzhdOwotfTsKLSNkZWZpbmUgRkFUMTZfQlNYX09GRlNFVCAzNgotI2RlZmluZSBGQVQzMl9CU1hfT0ZGU0VUIDY0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSB7CiAgX191OCBuYW1lW01TRE9TX05BTUVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGF0dHI7CiAgX191OCBsY2FzZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBjdGltZV9jczsKICBfX2xlMTYgY3RpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiBjZGF0ZTsKICBfX2xlMTYgYWRhdGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiBzdGFydGhpOwogIF9fbGUxNiB0aW1lLGRhdGUsc3RhcnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBzaXplOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbXNkb3NfZGlyX3Nsb3QgewogIF9fdTggaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbmFtZTBfNFsxMF07CiAgX191OCBhdHRyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJlc2VydmVkOwogIF9fdTggYWxpYXNfY2hlY2tzdW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbmFtZTVfMTBbMTJdOwogIF9fbGUxNiBzdGFydDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuYW1lMTFfMTJbNF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tc2cuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbXNnLmgKaW5kZXggNzI3NTFkYS4uOGQ3YzYwNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9tc2cuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L21zZy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSA8YXNtL21zZ2J1Zi5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtc2didWYgewotIGxvbmcgbXR5cGU7CisgX19rZXJuZWxfbG9uZ190IG10eXBlOwogIGNoYXIgbXRleHRbMV07CiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0Y29uZi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRjb25mLmgKaW5kZXggNGM5YWFkMy4uMmJmMDlkMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRjb25mLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRjb25mLmgKQEAgLTMyLDEwICszMiwxMiBAQAogIE5FVENPTkZBX1JQX0ZJTFRFUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUQ09ORkFfTUNfRk9SV0FSRElORywKKyBORVRDT05GQV9QUk9YWV9ORUlHSCwKICBfX05FVENPTkZBX01BWAogfTsKLSNkZWZpbmUgTkVUQ09ORkFfTUFYIChfX05FVENPTkZBX01BWCAtIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORVRDT05GQV9NQVggKF9fTkVUQ09ORkFfTUFYIC0gMSkKICNkZWZpbmUgTkVUQ09ORkFfSUZJTkRFWF9BTEwgLTEKICNkZWZpbmUgTkVUQ09ORkFfSUZJTkRFWF9ERUZBVUxUIC0yCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIuaAppbmRleCAwYjBkZGFjLi43ODA0MzIxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyLmgKQEAgLTU0LDIyICs1NCwyMyBAQAogfTsKIGVudW0gewogIE5GUFJPVE9fVU5TUEVDID0gMCwKLSBORlBST1RPX0lQVjQgPSAyLAorIE5GUFJPVE9fSU5FVCA9IDEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GUFJPVE9fSVBWNCA9IDIsCiAgTkZQUk9UT19BUlAgPSAzLAogIE5GUFJPVE9fQlJJREdFID0gNywKICBORlBST1RPX0lQVjYgPSAxMCwKLSBORlBST1RPX0RFQ05FVCA9IDEyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlBST1RPX0RFQ05FVCA9IDEyLAogIE5GUFJPVE9fTlVNUFJPVE8sCiB9OwogdW5pb24gbmZfaW5ldF9hZGRyIHsKLSBfX3UzMiBhbGxbNF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGFsbFs0XTsKICBfX2JlMzIgaXA7CiAgX19iZTMyIGlwNls0XTsKICBzdHJ1Y3QgaW5fYWRkciBpbjsKLSBzdHJ1Y3QgaW42X2FkZHIgaW42OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgaW42X2FkZHIgaW42OwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaAppbmRleCAxZGExMWVmLi5kODVjODViIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9pcHNldC9pcF9zZXQuaApAQCAtMjEsMjM0ICsyMSwyNDkgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2RlZmluZSBJUFNFVF9QUk9UT0NPTCA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFNFVF9NQVhfQ09NTUVOVF9TSVpFIDI1NQogI2RlZmluZSBJUFNFVF9NQVhOQU1FTEVOIDMyCiBlbnVtIGlwc2V0X2NtZCB7CiAgSVBTRVRfQ01EX05PTkUsCi0gSVBTRVRfQ01EX1BST1RPQ09MLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9DTURfUFJPVE9DT0wsCiAgSVBTRVRfQ01EX0NSRUFURSwKICBJUFNFVF9DTURfREVTVFJPWSwKICBJUFNFVF9DTURfRkxVU0gsCi0gSVBTRVRfQ01EX1JFTkFNRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQ01EX1JFTkFNRSwKICBJUFNFVF9DTURfU1dBUCwKICBJUFNFVF9DTURfTElTVCwKICBJUFNFVF9DTURfU0FWRSwKLSBJUFNFVF9DTURfQURELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9DTURfQURELAogIElQU0VUX0NNRF9ERUwsCiAgSVBTRVRfQ01EX1RFU1QsCiAgSVBTRVRfQ01EX0hFQURFUiwKLSBJUFNFVF9DTURfVFlQRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQ01EX1RZUEUsCiAgSVBTRVRfTVNHX01BWCwKICBJUFNFVF9DTURfUkVTVE9SRSA9IElQU0VUX01TR19NQVgsCiAgSVBTRVRfQ01EX0hFTFAsCi0gSVBTRVRfQ01EX1ZFUlNJT04sCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0NNRF9WRVJTSU9OLAogIElQU0VUX0NNRF9RVUlULAogIElQU0VUX0NNRF9NQVgsCiAgSVBTRVRfQ01EX0NPTU1JVCA9IElQU0VUX0NNRF9NQVgsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBlbnVtIHsKICBJUFNFVF9BVFRSX1VOU1BFQywKICBJUFNFVF9BVFRSX1BST1RPQ09MLAotIElQU0VUX0FUVFJfU0VUTkFNRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQVRUUl9TRVROQU1FLAogIElQU0VUX0FUVFJfVFlQRU5BTUUsCiAgSVBTRVRfQVRUUl9TRVROQU1FMiA9IElQU0VUX0FUVFJfVFlQRU5BTUUsCiAgSVBTRVRfQVRUUl9SRVZJU0lPTiwKLSBJUFNFVF9BVFRSX0ZBTUlMWSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQVRUUl9GQU1JTFksCiAgSVBTRVRfQVRUUl9GTEFHUywKICBJUFNFVF9BVFRSX0RBVEEsCiAgSVBTRVRfQVRUUl9BRFQsCi0gSVBTRVRfQVRUUl9MSU5FTk8sCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0FUVFJfTElORU5PLAogIElQU0VUX0FUVFJfUFJPVE9DT0xfTUlOLAogIElQU0VUX0FUVFJfUkVWSVNJT05fTUlOID0gSVBTRVRfQVRUUl9QUk9UT0NPTF9NSU4sCiAgX19JUFNFVF9BVFRSX0NNRF9NQVgsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIElQU0VUX0FUVFJfQ01EX01BWCAoX19JUFNFVF9BVFRSX0NNRF9NQVggLSAxKQogZW51bSB7CiAgSVBTRVRfQVRUUl9JUCA9IElQU0VUX0FUVFJfVU5TUEVDICsgMSwKLSBJUFNFVF9BVFRSX0lQX0ZST00gPSBJUFNFVF9BVFRSX0lQLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9BVFRSX0lQX0ZST00gPSBJUFNFVF9BVFRSX0lQLAogIElQU0VUX0FUVFJfSVBfVE8sCiAgSVBTRVRfQVRUUl9DSURSLAogIElQU0VUX0FUVFJfUE9SVCwKLSBJUFNFVF9BVFRSX1BPUlRfRlJPTSA9IElQU0VUX0FUVFJfUE9SVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQVRUUl9QT1JUX0ZST00gPSBJUFNFVF9BVFRSX1BPUlQsCiAgSVBTRVRfQVRUUl9QT1JUX1RPLAogIElQU0VUX0FUVFJfVElNRU9VVCwKICBJUFNFVF9BVFRSX1BST1RPLAotIElQU0VUX0FUVFJfQ0FEVF9GTEFHUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQVRUUl9DQURUX0ZMQUdTLAogIElQU0VUX0FUVFJfQ0FEVF9MSU5FTk8gPSBJUFNFVF9BVFRSX0xJTkVOTywKICBJUFNFVF9BVFRSX0NBRFRfTUFYID0gMTYsCiAgSVBTRVRfQVRUUl9HQywKLSBJUFNFVF9BVFRSX0hBU0hTSVpFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9BVFRSX0hBU0hTSVpFLAogIElQU0VUX0FUVFJfTUFYRUxFTSwKICBJUFNFVF9BVFRSX05FVE1BU0ssCiAgSVBTRVRfQVRUUl9QUk9CRVMsCi0gSVBTRVRfQVRUUl9SRVNJWkUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0FUVFJfUkVTSVpFLAogIElQU0VUX0FUVFJfU0laRSwKICBJUFNFVF9BVFRSX0VMRU1FTlRTLAogIElQU0VUX0FUVFJfUkVGRVJFTkNFUywKLSBJUFNFVF9BVFRSX01FTVNJWkUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0FUVFJfTUVNU0laRSwKICBfX0lQU0VUX0FUVFJfQ1JFQVRFX01BWCwKIH07CiAjZGVmaW5lIElQU0VUX0FUVFJfQ1JFQVRFX01BWCAoX19JUFNFVF9BVFRSX0NSRUFURV9NQVggLSAxKQotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgSVBTRVRfQVRUUl9FVEhFUiA9IElQU0VUX0FUVFJfQ0FEVF9NQVggKyAxLAogIElQU0VUX0FUVFJfTkFNRSwKICBJUFNFVF9BVFRSX05BTUVSRUYsCi0gSVBTRVRfQVRUUl9JUDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0FUVFJfSVAyLAogIElQU0VUX0FUVFJfQ0lEUjIsCiAgSVBTRVRfQVRUUl9JUDJfVE8sCiAgSVBTRVRfQVRUUl9JRkFDRSwKLSBJUFNFVF9BVFRSX0JZVEVTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9BVFRSX0JZVEVTLAogIElQU0VUX0FUVFJfUEFDS0VUUywKKyBJUFNFVF9BVFRSX0NPTU1FTlQsCiAgX19JUFNFVF9BVFRSX0FEVF9NQVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgSVBTRVRfQVRUUl9BRFRfTUFYIChfX0lQU0VUX0FUVFJfQURUX01BWCAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgSVBTRVRfQVRUUl9JUEFERFJfSVBWNCA9IElQU0VUX0FUVFJfVU5TUEVDICsgMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfQVRUUl9JUEFERFJfSVBWNiwKICBfX0lQU0VUX0FUVFJfSVBBRERSX01BWCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBJUFNFVF9BVFRSX0lQQUREUl9NQVggKF9fSVBTRVRfQVRUUl9JUEFERFJfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGlwc2V0X2Vycm5vIHsKICBJUFNFVF9FUlJfUFJJVkFURSA9IDQwOTYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0VSUl9QUk9UT0NPTCwKICBJUFNFVF9FUlJfRklORF9UWVBFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9FUlJfTUFYX1NFVFMsCiAgSVBTRVRfRVJSX0JVU1ksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0VSUl9FWElTVF9TRVROQU1FMiwKICBJUFNFVF9FUlJfVFlQRV9NSVNNQVRDSCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRVJSX0VYSVNULAogIElQU0VUX0VSUl9JTlZBTElEX0NJRFIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0VSUl9JTlZBTElEX05FVE1BU0ssCiAgSVBTRVRfRVJSX0lOVkFMSURfRkFNSUxZLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9FUlJfVElNRU9VVCwKICBJUFNFVF9FUlJfUkVGRVJFTkNFRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRVJSX0lQQUREUl9JUFY0LAogIElQU0VUX0VSUl9JUEFERFJfSVBWNiwKLSBJUFNFVF9FUlJfQ09VTlRFUiwKLSBJUFNFVF9FUlJfVFlQRV9TUEVDSUZJQyA9IDQzNTIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0VSUl9DT1VOVEVSLAorIElQU0VUX0VSUl9DT01NRU5ULAorIElQU0VUX0VSUl9UWVBFX1NQRUNJRklDID0gNDM1MiwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBpcHNldF9jbWRfZmxhZ3MgewogIElQU0VUX0ZMQUdfQklUX0VYSVNUID0gMCwKICBJUFNFVF9GTEFHX0VYSVNUID0gKDEgPDwgSVBTRVRfRkxBR19CSVRfRVhJU1QpLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX0JJVF9MSVNUX1NFVE5BTUUgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX0xJU1RfU0VUTkFNRSA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX0xJU1RfU0VUTkFNRSksCiAgSVBTRVRfRkxBR19CSVRfTElTVF9IRUFERVIgPSAyLAogIElQU0VUX0ZMQUdfTElTVF9IRUFERVIgPSAoMSA8PCBJUFNFVF9GTEFHX0JJVF9MSVNUX0hFQURFUiksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0ZMQUdfQklUX1NLSVBfQ09VTlRFUl9VUERBVEUgPSAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX1NLSVBfQ09VTlRFUl9VUERBVEUgPQogICgxIDw8IElQU0VUX0ZMQUdfQklUX1NLSVBfQ09VTlRFUl9VUERBVEUpLAogIElQU0VUX0ZMQUdfQklUX1NLSVBfU1VCQ09VTlRFUl9VUERBVEUgPSA0LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX1NLSVBfU1VCQ09VTlRFUl9VUERBVEUgPQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICAoMSA8PCBJUFNFVF9GTEFHX0JJVF9TS0lQX1NVQkNPVU5URVJfVVBEQVRFKSwKICBJUFNFVF9GTEFHX0JJVF9NQVRDSF9DT1VOVEVSUyA9IDUsCiAgSVBTRVRfRkxBR19NQVRDSF9DT1VOVEVSUyA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX01BVENIX0NPVU5URVJTKSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRkxBR19CSVRfUkVUVVJOX05PTUFUQ0ggPSA3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX1JFVFVSTl9OT01BVENIID0gKDEgPDwgSVBTRVRfRkxBR19CSVRfUkVUVVJOX05PTUFUQ0gpLAogIElQU0VUX0ZMQUdfQ01EX01BWCA9IDE1LAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGlwc2V0X2NhZHRfZmxhZ3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX0JJVF9CRUZPUkUgPSAwLAogIElQU0VUX0ZMQUdfQkVGT1JFID0gKDEgPDwgSVBTRVRfRkxBR19CSVRfQkVGT1JFKSwKICBJUFNFVF9GTEFHX0JJVF9QSFlTREVWID0gMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRVRfRkxBR19QSFlTREVWID0gKDEgPDwgSVBTRVRfRkxBR19CSVRfUEhZU0RFViksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU0VUX0ZMQUdfQklUX05PTUFUQ0ggPSAyLAogIElQU0VUX0ZMQUdfTk9NQVRDSCA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX05PTUFUQ0gpLAogIElQU0VUX0ZMQUdfQklUX1dJVEhfQ09VTlRFUlMgPSAzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFVF9GTEFHX1dJVEhfQ09VTlRFUlMgPSAoMSA8PCBJUFNFVF9GTEFHX0JJVF9XSVRIX0NPVU5URVJTKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfRkxBR19CSVRfV0lUSF9DT01NRU5UID0gNCwKKyBJUFNFVF9GTEFHX1dJVEhfQ09NTUVOVCA9ICgxIDw8IElQU0VUX0ZMQUdfQklUX1dJVEhfQ09NTUVOVCksCiAgSVBTRVRfRkxBR19DQURUX01BWCA9IDE1LAogfTsKLWVudW0gaXBzZXRfYWR0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIGlwc2V0X2FkdCB7CiAgSVBTRVRfQURELAogIElQU0VUX0RFTCwKICBJUFNFVF9URVNULAotIElQU0VUX0FEVF9NQVgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0FEVF9NQVgsCiAgSVBTRVRfQ1JFQVRFID0gSVBTRVRfQURUX01BWCwKICBJUFNFVF9DQURUX01BWCwKIH07Ci10eXBlZGVmIF9fdTE2IGlwX3NldF9pZF90OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgX191MTYgaXBfc2V0X2lkX3Q7CiAjZGVmaW5lIElQU0VUX0lOVkFMSURfSUQgNjU1MzUKIGVudW0gaXBfc2V0X2RpbSB7CiAgSVBTRVRfRElNX1pFUk8gPSAwLAotIElQU0VUX0RJTV9PTkUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU0VUX0RJTV9PTkUsCiAgSVBTRVRfRElNX1RXTywKICBJUFNFVF9ESU1fVEhSRUUsCiAgSVBTRVRfRElNX01BWCA9IDYsCi0gSVBTRVRfQklUX1JFVFVSTl9OT01BVENIID0gNywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfQklUX1JFVFVSTl9OT01BVENIID0gNywKIH07CiBlbnVtIGlwX3NldF9rb3B0IHsKICBJUFNFVF9JTlZfTUFUQ0ggPSAoMSA8PCBJUFNFVF9ESU1fWkVSTyksCi0gSVBTRVRfRElNX09ORV9TUkMgPSAoMSA8PCBJUFNFVF9ESU1fT05FKSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSVBTRVRfRElNX09ORV9TUkMgPSAoMSA8PCBJUFNFVF9ESU1fT05FKSwKICBJUFNFVF9ESU1fVFdPX1NSQyA9ICgxIDw8IElQU0VUX0RJTV9UV08pLAogIElQU0VUX0RJTV9USFJFRV9TUkMgPSAoMSA8PCBJUFNFVF9ESU1fVEhSRUUpLAogIElQU0VUX1JFVFVSTl9OT01BVENIID0gKDEgPDwgSVBTRVRfQklUX1JFVFVSTl9OT01BVENIKSwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gewogIElQU0VUX0NPVU5URVJfTk9ORSA9IDAsCiAgSVBTRVRfQ09VTlRFUl9FUSwKLSBJUFNFVF9DT1VOVEVSX05FLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUFNFVF9DT1VOVEVSX05FLAogIElQU0VUX0NPVU5URVJfTFQsCiAgSVBTRVRfQ09VTlRFUl9HVCwKIH07Ci1zdHJ1Y3QgaXBfc2V0X2NvdW50ZXJfbWF0Y2ggewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpcF9zZXRfY291bnRlcl9tYXRjaCB7CiAgX191OCBvcDsKICBfX3U2NCB2YWx1ZTsKIH07Ci0jZGVmaW5lIFNPX0lQX1NFVCA4MwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU09fSVBfU0VUIDgzCiB1bmlvbiBpcF9zZXRfbmFtZV9pbmRleCB7CiAgY2hhciBuYW1lW0lQU0VUX01BWE5BTUVMRU5dOwogIGlwX3NldF9pZF90IGluZGV4OwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBJUF9TRVRfT1BfR0VUX0JZTkFNRSAweDAwMDAwMDA2CiBzdHJ1Y3QgaXBfc2V0X3JlcV9nZXRfc2V0IHsKICB1bnNpZ25lZCBpbnQgb3A7Ci0gdW5zaWduZWQgaW50IHZlcnNpb247CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCB2ZXJzaW9uOwogIHVuaW9uIGlwX3NldF9uYW1lX2luZGV4IHNldDsKIH07CiAjZGVmaW5lIElQX1NFVF9PUF9HRVRfQllJTkRFWCAweDAwMDAwMDA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9TRVRfT1BfR0VUX0ZOQU1FIDB4MDAwMDAwMDgKK3N0cnVjdCBpcF9zZXRfcmVxX2dldF9zZXRfZmFtaWx5IHsKKyB1bnNpZ25lZCBpbnQgb3A7CisgdW5zaWduZWQgaW50IHZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCBmYW1pbHk7CisgdW5pb24gaXBfc2V0X25hbWVfaW5kZXggc2V0OworfTsKICNkZWZpbmUgSVBfU0VUX09QX1ZFUlNJT04gMHgwMDAwMDEwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpcF9zZXRfcmVxX3ZlcnNpb24gewpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCmluZGV4IDZjMTc2Y2EuLjA1ZTJkMWYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKQEAgLTMxLDU4ICszMSw2MyBAQAogIElQX0NUX05VTUJFUiA9IElQX0NUX0lTX1JFUExZICogMiAtIDEKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORl9DVF9TVEFURV9JTlZBTElEX0JJVCAoMSA8PCAwKQorI2RlZmluZSBORl9DVF9TVEFURV9CSVQoY3RpbmZvKSAoMSA8PCAoKGN0aW5mbykgJSBJUF9DVF9JU19SRVBMWSArIDEpKQorI2RlZmluZSBORl9DVF9TVEFURV9VTlRSQUNLRURfQklUICgxIDw8IChJUF9DVF9OVU1CRVIgKyAxKSkKIGVudW0gaXBfY29ubnRyYWNrX3N0YXR1cyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU19FWFBFQ1RFRF9CSVQgPSAwLAogIElQU19FWFBFQ1RFRCA9ICgxIDw8IElQU19FWFBFQ1RFRF9CSVQpLAogIElQU19TRUVOX1JFUExZX0JJVCA9IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU19TRUVOX1JFUExZID0gKDEgPDwgSVBTX1NFRU5fUkVQTFlfQklUKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX0FTU1VSRURfQklUID0gMiwKICBJUFNfQVNTVVJFRCA9ICgxIDw8IElQU19BU1NVUkVEX0JJVCksCiAgSVBTX0NPTkZJUk1FRF9CSVQgPSAzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfQ09ORklSTUVEID0gKDEgPDwgSVBTX0NPTkZJUk1FRF9CSVQpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfU1JDX05BVF9CSVQgPSA0LAogIElQU19TUkNfTkFUID0gKDEgPDwgSVBTX1NSQ19OQVRfQklUKSwKICBJUFNfRFNUX05BVF9CSVQgPSA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfRFNUX05BVCA9ICgxIDw8IElQU19EU1RfTkFUX0JJVCksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU19OQVRfTUFTSyA9IChJUFNfRFNUX05BVCB8IElQU19TUkNfTkFUKSwKICBJUFNfU0VRX0FESlVTVF9CSVQgPSA2LAogIElQU19TRVFfQURKVVNUID0gKDEgPDwgSVBTX1NFUV9BREpVU1RfQklUKSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX1NSQ19OQVRfRE9ORV9CSVQgPSA3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfU1JDX05BVF9ET05FID0gKDEgPDwgSVBTX1NSQ19OQVRfRE9ORV9CSVQpLAogIElQU19EU1RfTkFUX0RPTkVfQklUID0gOCwKICBJUFNfRFNUX05BVF9ET05FID0gKDEgPDwgSVBTX0RTVF9OQVRfRE9ORV9CSVQpLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfTkFUX0RPTkVfTUFTSyA9IChJUFNfRFNUX05BVF9ET05FIHwgSVBTX1NSQ19OQVRfRE9ORSksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU19EWUlOR19CSVQgPSA5LAogIElQU19EWUlORyA9ICgxIDw8IElQU19EWUlOR19CSVQpLAogIElQU19GSVhFRF9USU1FT1VUX0JJVCA9IDEwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfRklYRURfVElNRU9VVCA9ICgxIDw8IElQU19GSVhFRF9USU1FT1VUX0JJVCksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU19URU1QTEFURV9CSVQgPSAxMSwKICBJUFNfVEVNUExBVEUgPSAoMSA8PCBJUFNfVEVNUExBVEVfQklUKSwKICBJUFNfVU5UUkFDS0VEX0JJVCA9IDEyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfVU5UUkFDS0VEID0gKDEgPDwgSVBTX1VOVFJBQ0tFRF9CSVQpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfSEVMUEVSX0JJVCA9IDEzLAogIElQU19IRUxQRVIgPSAoMSA8PCBJUFNfSEVMUEVSX0JJVCksCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gaXBfY29ubnRyYWNrX2V2ZW50cyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQQ1RfTkVXLAogIElQQ1RfUkVMQVRFRCwKICBJUENUX0RFU1RST1ksCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQQ1RfUkVQTFksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQQ1RfQVNTVVJFRCwKICBJUENUX1BST1RPSU5GTywKICBJUENUX0hFTFBFUiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBDVF9NQVJLLAotIElQQ1RfTkFUU0VRQURKLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUENUX1NFUUFESiwKKyBJUENUX05BVFNFUUFESiA9IElQQ1RfU0VRQURKLAogIElQQ1RfU0VDTUFSSywKICBJUENUX0xBQkVMLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX25hdC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0LmgKaW5kZXggMzIwYWY4YS4uYjM5OTg4OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfbmF0LmgKQEAgLTIxLDMxICsyMSwzNCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBORl9OQVRfUkFOR0VfTUFQX0lQUyAxCi0jZGVmaW5lIE5GX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQgMgotI2RlZmluZSBORl9OQVRfUkFOR0VfUFJPVE9fUkFORE9NIDQKLSNkZWZpbmUgTkZfTkFUX1JBTkdFX1BFUlNJU1RFTlQgOAorI2RlZmluZSBORl9OQVRfUkFOR0VfTUFQX0lQUyAoMSA8PCAwKQorI2RlZmluZSBORl9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEICgxIDw8IDEpCisjZGVmaW5lIE5GX05BVF9SQU5HRV9QUk9UT19SQU5ET00gKDEgPDwgMikKKyNkZWZpbmUgTkZfTkFUX1JBTkdFX1BFUlNJU1RFTlQgKDEgPDwgMykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GX05BVF9SQU5HRV9QUk9UT19SQU5ET01fRlVMTFkgKDEgPDwgNCkKKyNkZWZpbmUgTkZfTkFUX1JBTkdFX1BST1RPX1JBTkRPTV9BTEwgICAoTkZfTkFUX1JBTkdFX1BST1RPX1JBTkRPTSB8IE5GX05BVF9SQU5HRV9QUk9UT19SQU5ET01fRlVMTFkpCiBzdHJ1Y3QgbmZfbmF0X2lwdjRfcmFuZ2UgewogIHVuc2lnbmVkIGludCBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIG1pbl9pcDsKICBfX2JlMzIgbWF4X2lwOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvIG1pbjsKICB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvIG1heDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG5mX25hdF9pcHY0X211bHRpX3JhbmdlX2NvbXBhdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCByYW5nZXNpemU7CiAgc3RydWN0IG5mX25hdF9pcHY0X3JhbmdlIHJhbmdlWzFdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgbmZfbmF0X3JhbmdlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGZsYWdzOwogIHVuaW9uIG5mX2luZXRfYWRkciBtaW5fYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gbmZfaW5ldF9hZGRyIG1heF9hZGRyOwogIHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG8gbWluX3Byb3RvOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvIG1heF9wcm90bzsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NjMyZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaApAQCAtMCwwICsxLDQ1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTkZfVEFCTEVTX0gKKyNkZWZpbmUgX0xJTlVYX05GX1RBQkxFU19ICisjZGVmaW5lIE5GVF9DSEFJTl9NQVhOQU1FTEVOIDMyCitlbnVtIG5mdF9yZWdpc3RlcnMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfUkVHX1ZFUkRJQ1QsCisgTkZUX1JFR18xLAorIE5GVF9SRUdfMiwKKyBORlRfUkVHXzMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9SRUdfNCwKKyBfX05GVF9SRUdfTUFYCit9OworI2RlZmluZSBORlRfUkVHX01BWCAoX19ORlRfUkVHX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZnRfdmVyZGljdHMgeworIE5GVF9DT05USU5VRSA9IC0xLAorIE5GVF9CUkVBSyA9IC0yLAorIE5GVF9KVU1QID0gLTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9HT1RPID0gLTQsCisgTkZUX1JFVFVSTiA9IC01LAorfTsKK2VudW0gbmZfdGFibGVzX21zZ190eXBlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9NU0dfTkVXVEFCTEUsCisgTkZUX01TR19HRVRUQUJMRSwKKyBORlRfTVNHX0RFTFRBQkxFLAorIE5GVF9NU0dfTkVXQ0hBSU4sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9NU0dfR0VUQ0hBSU4sCisgTkZUX01TR19ERUxDSEFJTiwKKyBORlRfTVNHX05FV1JVTEUsCisgTkZUX01TR19HRVRSVUxFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfTVNHX0RFTFJVTEUsCisgTkZUX01TR19ORVdTRVQsCisgTkZUX01TR19HRVRTRVQsCisgTkZUX01TR19ERUxTRVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9NU0dfTkVXU0VURUxFTSwKKyBORlRfTVNHX0dFVFNFVEVMRU0sCisgTkZUX01TR19ERUxTRVRFTEVNLAorIE5GVF9NU0dfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitlbnVtIG5mdF9saXN0X2F0dHJpYnV0ZXMgeworIE5GVEFfTElTVF9VTlBFQywKKyBORlRBX0xJU1RfRUxFTSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19ORlRBX0xJU1RfTUFYCit9OworI2RlZmluZSBORlRBX0xJU1RfTUFYIChfX05GVEFfTElTVF9NQVggLSAxKQorZW51bSBuZnRfaG9va19hdHRyaWJ1dGVzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9IT09LX1VOU1BFQywKKyBORlRBX0hPT0tfSE9PS05VTSwKKyBORlRBX0hPT0tfUFJJT1JJVFksCisgX19ORlRBX0hPT0tfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgTkZUQV9IT09LX01BWCAoX19ORlRBX0hPT0tfTUFYIC0gMSkKK2VudW0gbmZ0X3RhYmxlX2ZsYWdzIHsKKyBORlRfVEFCTEVfRl9ET1JNQU5UID0gMHgxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitlbnVtIG5mdF90YWJsZV9hdHRyaWJ1dGVzIHsKKyBORlRBX1RBQkxFX1VOU1BFQywKKyBORlRBX1RBQkxFX05BTUUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfVEFCTEVfRkxBR1MsCisgTkZUQV9UQUJMRV9VU0UsCisgX19ORlRBX1RBQkxFX01BWAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GVEFfVEFCTEVfTUFYIChfX05GVEFfVEFCTEVfTUFYIC0gMSkKK2VudW0gbmZ0X2NoYWluX2F0dHJpYnV0ZXMgeworIE5GVEFfQ0hBSU5fVU5TUEVDLAorIE5GVEFfQ0hBSU5fVEFCTEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfQ0hBSU5fSEFORExFLAorIE5GVEFfQ0hBSU5fTkFNRSwKKyBORlRBX0NIQUlOX0hPT0ssCisgTkZUQV9DSEFJTl9QT0xJQ1ksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfQ0hBSU5fVVNFLAorIE5GVEFfQ0hBSU5fVFlQRSwKKyBORlRBX0NIQUlOX0NPVU5URVJTLAorIF9fTkZUQV9DSEFJTl9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBORlRBX0NIQUlOX01BWCAoX19ORlRBX0NIQUlOX01BWCAtIDEpCitlbnVtIG5mdF9ydWxlX2F0dHJpYnV0ZXMgeworIE5GVEFfUlVMRV9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfUlVMRV9UQUJMRSwKKyBORlRBX1JVTEVfQ0hBSU4sCisgTkZUQV9SVUxFX0hBTkRMRSwKKyBORlRBX1JVTEVfRVhQUkVTU0lPTlMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfUlVMRV9DT01QQVQsCisgTkZUQV9SVUxFX1BPU0lUSU9OLAorIF9fTkZUQV9SVUxFX01BWAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GVEFfUlVMRV9NQVggKF9fTkZUQV9SVUxFX01BWCAtIDEpCitlbnVtIG5mdF9ydWxlX2NvbXBhdF9mbGFncyB7CisgTkZUX1JVTEVfQ09NUEFUX0ZfSU5WID0gKDEgPDwgMSksCisgTkZUX1JVTEVfQ09NUEFUX0ZfTUFTSyA9IE5GVF9SVUxFX0NPTVBBVF9GX0lOViwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSBuZnRfcnVsZV9jb21wYXRfYXR0cmlidXRlcyB7CisgTkZUQV9SVUxFX0NPTVBBVF9VTlNQRUMsCisgTkZUQV9SVUxFX0NPTVBBVF9QUk9UTywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9SVUxFX0NPTVBBVF9GTEFHUywKKyBfX05GVEFfUlVMRV9DT01QQVRfTUFYCit9OworI2RlZmluZSBORlRBX1JVTEVfQ09NUEFUX01BWCAoX19ORlRBX1JVTEVfQ09NUEFUX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZnRfc2V0X2ZsYWdzIHsKKyBORlRfU0VUX0FOT05ZTU9VUyA9IDB4MSwKKyBORlRfU0VUX0NPTlNUQU5UID0gMHgyLAorIE5GVF9TRVRfSU5URVJWQUwgPSAweDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9TRVRfTUFQID0gMHg4LAorfTsKK2VudW0gbmZ0X3NldF9hdHRyaWJ1dGVzIHsKKyBORlRBX1NFVF9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfU0VUX1RBQkxFLAorIE5GVEFfU0VUX05BTUUsCisgTkZUQV9TRVRfRkxBR1MsCisgTkZUQV9TRVRfS0VZX1RZUEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfU0VUX0tFWV9MRU4sCisgTkZUQV9TRVRfREFUQV9UWVBFLAorIE5GVEFfU0VUX0RBVEFfTEVOLAorIF9fTkZUQV9TRVRfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgTkZUQV9TRVRfTUFYIChfX05GVEFfU0VUX01BWCAtIDEpCitlbnVtIG5mdF9zZXRfZWxlbV9mbGFncyB7CisgTkZUX1NFVF9FTEVNX0lOVEVSVkFMX0VORCA9IDB4MSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSBuZnRfc2V0X2VsZW1fYXR0cmlidXRlcyB7CisgTkZUQV9TRVRfRUxFTV9VTlNQRUMsCisgTkZUQV9TRVRfRUxFTV9LRVksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfU0VUX0VMRU1fREFUQSwKKyBORlRBX1NFVF9FTEVNX0ZMQUdTLAorIF9fTkZUQV9TRVRfRUxFTV9NQVgKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORlRBX1NFVF9FTEVNX01BWCAoX19ORlRBX1NFVF9FTEVNX01BWCAtIDEpCitlbnVtIG5mdF9zZXRfZWxlbV9saXN0X2F0dHJpYnV0ZXMgeworIE5GVEFfU0VUX0VMRU1fTElTVF9VTlNQRUMsCisgTkZUQV9TRVRfRUxFTV9MSVNUX1RBQkxFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX1NFVF9FTEVNX0xJU1RfU0VULAorIE5GVEFfU0VUX0VMRU1fTElTVF9FTEVNRU5UUywKKyBfX05GVEFfU0VUX0VMRU1fTElTVF9NQVgKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORlRBX1NFVF9FTEVNX0xJU1RfTUFYIChfX05GVEFfU0VUX0VMRU1fTElTVF9NQVggLSAxKQorZW51bSBuZnRfZGF0YV90eXBlcyB7CisgTkZUX0RBVEFfVkFMVUUsCisgTkZUX0RBVEFfVkVSRElDVCA9IDB4ZmZmZmZmMDBVLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIE5GVF9EQVRBX1JFU0VSVkVEX01BU0sgMHhmZmZmZmYwMFUKK2VudW0gbmZ0X2RhdGFfYXR0cmlidXRlcyB7CisgTkZUQV9EQVRBX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9EQVRBX1ZBTFVFLAorIE5GVEFfREFUQV9WRVJESUNULAorIF9fTkZUQV9EQVRBX01BWAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GVEFfREFUQV9NQVggKF9fTkZUQV9EQVRBX01BWCAtIDEpCitlbnVtIG5mdF92ZXJkaWN0X2F0dHJpYnV0ZXMgeworIE5GVEFfVkVSRElDVF9VTlNQRUMsCisgTkZUQV9WRVJESUNUX0NPREUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfVkVSRElDVF9DSEFJTiwKKyBfX05GVEFfVkVSRElDVF9NQVgKK307CisjZGVmaW5lIE5GVEFfVkVSRElDVF9NQVggKF9fTkZUQV9WRVJESUNUX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZnRfZXhwcl9hdHRyaWJ1dGVzIHsKKyBORlRBX0VYUFJfVU5TUEVDLAorIE5GVEFfRVhQUl9OQU1FLAorIE5GVEFfRVhQUl9EQVRBLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX05GVEFfRVhQUl9NQVgKK307CisjZGVmaW5lIE5GVEFfRVhQUl9NQVggKF9fTkZUQV9FWFBSX01BWCAtIDEpCitlbnVtIG5mdF9pbW1lZGlhdGVfYXR0cmlidXRlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfSU1NRURJQVRFX1VOU1BFQywKKyBORlRBX0lNTUVESUFURV9EUkVHLAorIE5GVEFfSU1NRURJQVRFX0RBVEEsCisgX19ORlRBX0lNTUVESUFURV9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBORlRBX0lNTUVESUFURV9NQVggKF9fTkZUQV9JTU1FRElBVEVfTUFYIC0gMSkKK2VudW0gbmZ0X2JpdHdpc2VfYXR0cmlidXRlcyB7CisgTkZUQV9CSVRXSVNFX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9CSVRXSVNFX1NSRUcsCisgTkZUQV9CSVRXSVNFX0RSRUcsCisgTkZUQV9CSVRXSVNFX0xFTiwKKyBORlRBX0JJVFdJU0VfTUFTSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9CSVRXSVNFX1hPUiwKKyBfX05GVEFfQklUV0lTRV9NQVgKK307CisjZGVmaW5lIE5GVEFfQklUV0lTRV9NQVggKF9fTkZUQV9CSVRXSVNFX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZnRfYnl0ZW9yZGVyX29wcyB7CisgTkZUX0JZVEVPUkRFUl9OVE9ILAorIE5GVF9CWVRFT1JERVJfSFRPTiwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZnRfYnl0ZW9yZGVyX2F0dHJpYnV0ZXMgeworIE5GVEFfQllURU9SREVSX1VOU1BFQywKKyBORlRBX0JZVEVPUkRFUl9TUkVHLAorIE5GVEFfQllURU9SREVSX0RSRUcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfQllURU9SREVSX09QLAorIE5GVEFfQllURU9SREVSX0xFTiwKKyBORlRBX0JZVEVPUkRFUl9TSVpFLAorIF9fTkZUQV9CWVRFT1JERVJfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgTkZUQV9CWVRFT1JERVJfTUFYIChfX05GVEFfQllURU9SREVSX01BWCAtIDEpCitlbnVtIG5mdF9jbXBfb3BzIHsKKyBORlRfQ01QX0VRLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfQ01QX05FUSwKKyBORlRfQ01QX0xULAorIE5GVF9DTVBfTFRFLAorIE5GVF9DTVBfR1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9DTVBfR1RFLAorfTsKK2VudW0gbmZ0X2NtcF9hdHRyaWJ1dGVzIHsKKyBORlRBX0NNUF9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfQ01QX1NSRUcsCisgTkZUQV9DTVBfT1AsCisgTkZUQV9DTVBfREFUQSwKKyBfX05GVEFfQ01QX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIE5GVEFfQ01QX01BWCAoX19ORlRBX0NNUF9NQVggLSAxKQorZW51bSBuZnRfbG9va3VwX2F0dHJpYnV0ZXMgeworIE5GVEFfTE9PS1VQX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9MT09LVVBfU0VULAorIE5GVEFfTE9PS1VQX1NSRUcsCisgTkZUQV9MT09LVVBfRFJFRywKKyBfX05GVEFfTE9PS1VQX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIE5GVEFfTE9PS1VQX01BWCAoX19ORlRBX0xPT0tVUF9NQVggLSAxKQorZW51bSBuZnRfcGF5bG9hZF9iYXNlcyB7CisgTkZUX1BBWUxPQURfTExfSEVBREVSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfUEFZTE9BRF9ORVRXT1JLX0hFQURFUiwKKyBORlRfUEFZTE9BRF9UUkFOU1BPUlRfSEVBREVSLAorfTsKK2VudW0gbmZ0X3BheWxvYWRfYXR0cmlidXRlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfUEFZTE9BRF9VTlNQRUMsCisgTkZUQV9QQVlMT0FEX0RSRUcsCisgTkZUQV9QQVlMT0FEX0JBU0UsCisgTkZUQV9QQVlMT0FEX09GRlNFVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9QQVlMT0FEX0xFTiwKKyBfX05GVEFfUEFZTE9BRF9NQVgKK307CisjZGVmaW5lIE5GVEFfUEFZTE9BRF9NQVggKF9fTkZUQV9QQVlMT0FEX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZnRfZXh0aGRyX2F0dHJpYnV0ZXMgeworIE5GVEFfRVhUSERSX1VOU1BFQywKKyBORlRBX0VYVEhEUl9EUkVHLAorIE5GVEFfRVhUSERSX1RZUEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfRVhUSERSX09GRlNFVCwKKyBORlRBX0VYVEhEUl9MRU4sCisgX19ORlRBX0VYVEhEUl9NQVgKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORlRBX0VYVEhEUl9NQVggKF9fTkZUQV9FWFRIRFJfTUFYIC0gMSkKK2VudW0gbmZ0X21ldGFfa2V5cyB7CisgTkZUX01FVEFfTEVOLAorIE5GVF9NRVRBX1BST1RPQ09MLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfTUVUQV9QUklPUklUWSwKKyBORlRfTUVUQV9NQVJLLAorIE5GVF9NRVRBX0lJRiwKKyBORlRfTUVUQV9PSUYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9NRVRBX0lJRk5BTUUsCisgTkZUX01FVEFfT0lGTkFNRSwKKyBORlRfTUVUQV9JSUZUWVBFLAorIE5GVF9NRVRBX09JRlRZUEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVF9NRVRBX1NLVUlELAorIE5GVF9NRVRBX1NLR0lELAorIE5GVF9NRVRBX05GVFJBQ0UsCisgTkZUX01FVEFfUlRDTEFTU0lELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfTUVUQV9TRUNNQVJLLAorIE5GVF9NRVRBX05GUFJPVE8sCisgTkZUX01FVEFfTDRQUk9UTywKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBuZnRfbWV0YV9hdHRyaWJ1dGVzIHsKKyBORlRBX01FVEFfVU5TUEVDLAorIE5GVEFfTUVUQV9EUkVHLAorIE5GVEFfTUVUQV9LRVksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfTUVUQV9TUkVHLAorIF9fTkZUQV9NRVRBX01BWAorfTsKKyNkZWZpbmUgTkZUQV9NRVRBX01BWCAoX19ORlRBX01FVEFfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG5mdF9jdF9rZXlzIHsKKyBORlRfQ1RfU1RBVEUsCisgTkZUX0NUX0RJUkVDVElPTiwKKyBORlRfQ1RfU1RBVFVTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfQ1RfTUFSSywKKyBORlRfQ1RfU0VDTUFSSywKKyBORlRfQ1RfRVhQSVJBVElPTiwKKyBORlRfQ1RfSEVMUEVSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfQ1RfTDNQUk9UT0NPTCwKKyBORlRfQ1RfU1JDLAorIE5GVF9DVF9EU1QsCisgTkZUX0NUX1BST1RPQ09MLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRfQ1RfUFJPVE9fU1JDLAorIE5GVF9DVF9QUk9UT19EU1QsCit9OworZW51bSBuZnRfY3RfYXR0cmlidXRlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfQ1RfVU5TUEVDLAorIE5GVEFfQ1RfRFJFRywKKyBORlRBX0NUX0tFWSwKKyBORlRBX0NUX0RJUkVDVElPTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9DVF9TUkVHLAorIF9fTkZUQV9DVF9NQVgKK307CisjZGVmaW5lIE5GVEFfQ1RfTUFYIChfX05GVEFfQ1RfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG5mdF9saW1pdF9hdHRyaWJ1dGVzIHsKKyBORlRBX0xJTUlUX1VOU1BFQywKKyBORlRBX0xJTUlUX1JBVEUsCisgTkZUQV9MSU1JVF9VTklULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX05GVEFfTElNSVRfTUFYCit9OworI2RlZmluZSBORlRBX0xJTUlUX01BWCAoX19ORlRBX0xJTUlUX01BWCAtIDEpCitlbnVtIG5mdF9jb3VudGVyX2F0dHJpYnV0ZXMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX0NPVU5URVJfVU5TUEVDLAorIE5GVEFfQ09VTlRFUl9CWVRFUywKKyBORlRBX0NPVU5URVJfUEFDS0VUUywKKyBfX05GVEFfQ09VTlRFUl9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBORlRBX0NPVU5URVJfTUFYIChfX05GVEFfQ09VTlRFUl9NQVggLSAxKQorZW51bSBuZnRfbG9nX2F0dHJpYnV0ZXMgeworIE5GVEFfTE9HX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9MT0dfR1JPVVAsCisgTkZUQV9MT0dfUFJFRklYLAorIE5GVEFfTE9HX1NOQVBMRU4sCisgTkZUQV9MT0dfUVRIUkVTSE9MRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19ORlRBX0xPR19NQVgKK307CisjZGVmaW5lIE5GVEFfTE9HX01BWCAoX19ORlRBX0xPR19NQVggLSAxKQorZW51bSBuZnRfcXVldWVfYXR0cmlidXRlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfUVVFVUVfVU5TUEVDLAorIE5GVEFfUVVFVUVfTlVNLAorIE5GVEFfUVVFVUVfVE9UQUwsCisgTkZUQV9RVUVVRV9GTEFHUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19ORlRBX1FVRVVFX01BWAorfTsKKyNkZWZpbmUgTkZUQV9RVUVVRV9NQVggKF9fTkZUQV9RVUVVRV9NQVggLSAxKQorI2RlZmluZSBORlRfUVVFVUVfRkxBR19CWVBBU1MgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZUX1FVRVVFX0ZMQUdfQ1BVX0ZBTk9VVCAweDAyCisjZGVmaW5lIE5GVF9RVUVVRV9GTEFHX01BU0sgMHgwMworZW51bSBuZnRfcmVqZWN0X3R5cGVzIHsKKyBORlRfUkVKRUNUX0lDTVBfVU5SRUFDSCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUX1JFSkVDVF9UQ1BfUlNULAorfTsKK2VudW0gbmZ0X3JlamVjdF9hdHRyaWJ1dGVzIHsKKyBORlRBX1JFSkVDVF9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfUkVKRUNUX1RZUEUsCisgTkZUQV9SRUpFQ1RfSUNNUF9DT0RFLAorIF9fTkZUQV9SRUpFQ1RfTUFYCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZUQV9SRUpFQ1RfTUFYIChfX05GVEFfUkVKRUNUX01BWCAtIDEpCitlbnVtIG5mdF9uYXRfdHlwZXMgeworIE5GVF9OQVRfU05BVCwKKyBORlRfTkFUX0ROQVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK2VudW0gbmZ0X25hdF9hdHRyaWJ1dGVzIHsKKyBORlRBX05BVF9VTlNQRUMsCisgTkZUQV9OQVRfVFlQRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9OQVRfRkFNSUxZLAorIE5GVEFfTkFUX1JFR19BRERSX01JTiwKKyBORlRBX05BVF9SRUdfQUREUl9NQVgsCisgTkZUQV9OQVRfUkVHX1BST1RPX01JTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9OQVRfUkVHX1BST1RPX01BWCwKKyBfX05GVEFfTkFUX01BWAorfTsKKyNkZWZpbmUgTkZUQV9OQVRfTUFYIChfX05GVEFfTkFUX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXNfY29tcGF0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXNfY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2N2RhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlc19jb21wYXQuaApAQCAtMCwwICsxLDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9ORlRfQ09NUEFUX05GTkVUTElOS19IXworI2RlZmluZSBfTkZUX0NPTVBBVF9ORk5FVExJTktfSF8KK2VudW0gbmZ0X3RhcmdldF9hdHRyaWJ1dGVzIHsKKyBORlRBX1RBUkdFVF9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GVEFfVEFSR0VUX05BTUUsCisgTkZUQV9UQVJHRVRfUkVWLAorIE5GVEFfVEFSR0VUX0lORk8sCisgX19ORlRBX1RBUkdFVF9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBORlRBX1RBUkdFVF9NQVggKF9fTkZUQV9UQVJHRVRfTUFYIC0gMSkKK2VudW0gbmZ0X21hdGNoX2F0dHJpYnV0ZXMgeworIE5GVEFfTUFUQ0hfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORlRBX01BVENIX05BTUUsCisgTkZUQV9NQVRDSF9SRVYsCisgTkZUQV9NQVRDSF9JTkZPLAorIF9fTkZUQV9NQVRDSF9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBORlRBX01BVENIX01BWCAoX19ORlRBX01BVENIX01BWCAtIDEpCisjZGVmaW5lIE5GVF9DT01QQVRfTkFNRV9NQVggMzIKK2VudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORk5MX01TR19DT01QQVRfR0VULAorIE5GTkxfTVNHX0NPTVBBVF9NQVgKK307CitlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZUQV9DT01QQVRfVU5TUEVDID0gMCwKKyBORlRBX0NPTVBBVF9OQU1FLAorIE5GVEFfQ09NUEFUX1JFViwKKyBORlRBX0NPTVBBVF9UWVBFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX05GVEFfQ09NUEFUX01BWCwKK307CisjZGVmaW5lIE5GVEFfQ09NUEFUX01BWCAoX19ORlRBX0NPTVBBVF9NQVggLSAxKQorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAppbmRleCBhNWMzZjVjLi5jMDRmNjJjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApAQCAtMzksMzIgKzM5LDQwIEBACiAjZGVmaW5lIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9VUERBVEUgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX1VQREFURQogIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9ERVNUUk9ZLAogI2RlZmluZSBORk5MR1JQX0NPTk5UUkFDS19FWFBfREVTVFJPWSBORk5MR1JQX0NPTk5UUkFDS19FWFBfREVTVFJPWQotIF9fTkZOTEdSUF9NQVgsCisgTkZOTEdSUF9ORlRBQkxFUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GTkxHUlBfTkZUQUJMRVMgTkZOTEdSUF9ORlRBQkxFUworIF9fTkZOTEdSUF9NQVgsCiB9OwogI2RlZmluZSBORk5MR1JQX01BWCAoX19ORk5MR1JQX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5mZ2VubXNnIHsKICBfX3U4IG5mZ2VuX2ZhbWlseTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCB2ZXJzaW9uOwogIF9fYmUxNiByZXNfaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgTkZORVRMSU5LX1YwIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxfU1VCU1lTX0lEKHgpICgoeCAmIDB4ZmYwMCkgPj4gOCkKICNkZWZpbmUgTkZOTF9NU0dfVFlQRSh4KSAoeCAmIDB4MDBmZikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxfU1VCU1lTX05PTkUgMAogI2RlZmluZSBORk5MX1NVQlNZU19DVE5FVExJTksgMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZOTF9TVUJTWVNfQ1RORVRMSU5LX0VYUCAyCiAjZGVmaW5lIE5GTkxfU1VCU1lTX1FVRVVFIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxfU1VCU1lTX1VMT0cgNAogI2RlZmluZSBORk5MX1NVQlNZU19PU0YgNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZOTF9TVUJTWVNfSVBTRVQgNgogI2RlZmluZSBORk5MX1NVQlNZU19BQ0NUIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxfU1VCU1lTX0NUTkVUTElOS19USU1FT1VUIDgKICNkZWZpbmUgTkZOTF9TVUJTWVNfQ1RIRUxQRVIgOQorI2RlZmluZSBORk5MX1NVQlNZU19ORlRBQkxFUyAxMAorI2RlZmluZSBORk5MX1NVQlNZU19ORlRfQ09NUEFUIDExCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBORk5MX1NVQlNZU19DT1VOVCAxMAorI2RlZmluZSBORk5MX1NVQlNZU19DT1VOVCAxMgorI2RlZmluZSBORk5MX01TR19CQVRDSF9CRUdJTiBOTE1TR19NSU5fVFlQRQorI2RlZmluZSBORk5MX01TR19CQVRDSF9FTkQgTkxNU0dfTUlOX1RZUEUrMQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCmluZGV4IDZjNWRiNWEuLjJiMjJjNGYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKQEAgLTYzLDIzOCArNjMsMjUxIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9OQVRfRFNULAogIENUQV9UVVBMRV9NQVNURVIsCi0gQ1RBX05BVF9TRVFfQURKX09SSUcsCi0gQ1RBX05BVF9TRVFfQURKX1JFUExZLAorIENUQV9TRVFfQURKX09SSUcsCisgQ1RBX05BVF9TRVFfQURKX09SSUcgPSBDVEFfU0VRX0FESl9PUklHLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBDVEFfU0VRX0FESl9SRVBMWSwKKyBDVEFfTkFUX1NFUV9BREpfUkVQTFkgPSBDVEFfU0VRX0FESl9SRVBMWSwKICBDVEFfU0VDTUFSSywKICBDVEFfWk9ORSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1NFQ0NUWCwKICBDVEFfVElNRVNUQU1QLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfTUFSS19NQVNLLAogIENUQV9MQUJFTFMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9MQUJFTFNfTUFTSywKICBfX0NUQV9NQVgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBDVEFfTUFYIChfX0NUQV9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gY3RhdHRyX3R1cGxlIHsKICBDVEFfVFVQTEVfVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVFVQTEVfSVAsCiAgQ1RBX1RVUExFX1BST1RPLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9UVVBMRV9NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfVFVQTEVfTUFYIChfX0NUQV9UVVBMRV9NQVggLSAxKQogZW51bSBjdGF0dHJfaXAgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfSVBfVU5TUEVDLAogIENUQV9JUF9WNF9TUkMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9JUF9WNF9EU1QsCiAgQ1RBX0lQX1Y2X1NSQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX0lQX1Y2X0RTVCwKICBfX0NUQV9JUF9NQVgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBDVEFfSVBfTUFYIChfX0NUQV9JUF9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gY3RhdHRyX2w0cHJvdG8gewogIENUQV9QUk9UT19VTlNQRUMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9QUk9UT19OVU0sCiAgQ1RBX1BST1RPX1NSQ19QT1JULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfUFJPVE9fRFNUX1BPUlQsCiAgQ1RBX1BST1RPX0lDTVBfSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9QUk9UT19JQ01QX1RZUEUsCiAgQ1RBX1BST1RPX0lDTVBfQ09ERSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1BST1RPX0lDTVBWNl9JRCwKICBDVEFfUFJPVE9fSUNNUFY2X1RZUEUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9QUk9UT19JQ01QVjZfQ09ERSwKICBfX0NUQV9QUk9UT19NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBDVEFfUFJPVE9fTUFYIChfX0NUQV9QUk9UT19NQVggLSAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gY3RhdHRyX3Byb3RvaW5mbyB7CiAgQ1RBX1BST1RPSU5GT19VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9QUk9UT0lORk9fVENQLAogIENUQV9QUk9UT0lORk9fRENDUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1BST1RPSU5GT19TQ1RQLAogIF9fQ1RBX1BST1RPSU5GT19NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBDVEFfUFJPVE9JTkZPX01BWCAoX19DVEFfUFJPVE9JTkZPX01BWCAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBjdGF0dHJfcHJvdG9pbmZvX3RjcCB7CiAgQ1RBX1BST1RPSU5GT19UQ1BfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfUFJPVE9JTkZPX1RDUF9TVEFURSwKICBDVEFfUFJPVE9JTkZPX1RDUF9XU0NBTEVfT1JJR0lOQUwsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9QUk9UT0lORk9fVENQX1dTQ0FMRV9SRVBMWSwKICBDVEFfUFJPVE9JTkZPX1RDUF9GTEFHU19PUklHSU5BTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1BST1RPSU5GT19UQ1BfRkxBR1NfUkVQTFksCiAgX19DVEFfUFJPVE9JTkZPX1RDUF9NQVgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBDVEFfUFJPVE9JTkZPX1RDUF9NQVggKF9fQ1RBX1BST1RPSU5GT19UQ1BfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGN0YXR0cl9wcm90b2luZm9fZGNjcCB7CiAgQ1RBX1BST1RPSU5GT19EQ0NQX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1BST1RPSU5GT19EQ0NQX1NUQVRFLAogIENUQV9QUk9UT0lORk9fRENDUF9ST0xFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfUFJPVE9JTkZPX0RDQ1BfSEFORFNIQUtFX1NFUSwKICBfX0NUQV9QUk9UT0lORk9fRENDUF9NQVgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQ1RBX1BST1RPSU5GT19EQ0NQX01BWCAoX19DVEFfUFJPVE9JTkZPX0RDQ1BfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGN0YXR0cl9wcm90b2luZm9fc2N0cCB7CiAgQ1RBX1BST1RPSU5GT19TQ1RQX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1BST1RPSU5GT19TQ1RQX1NUQVRFLAogIENUQV9QUk9UT0lORk9fU0NUUF9WVEFHX09SSUdJTkFMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfUFJPVE9JTkZPX1NDVFBfVlRBR19SRVBMWSwKICBfX0NUQV9QUk9UT0lORk9fU0NUUF9NQVgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBDVEFfUFJPVE9JTkZPX1NDVFBfTUFYIChfX0NUQV9QUk9UT0lORk9fU0NUUF9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gY3RhdHRyX2NvdW50ZXJzIHsKICBDVEFfQ09VTlRFUlNfVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfQ09VTlRFUlNfUEFDS0VUUywKICBDVEFfQ09VTlRFUlNfQllURVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9DT1VOVEVSUzMyX1BBQ0tFVFMsCiAgQ1RBX0NPVU5URVJTMzJfQllURVMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX0NPVU5URVJTX01BWAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUQV9DT1VOVEVSU19NQVggKF9fQ1RBX0NPVU5URVJTX01BWCAtIDEpCiBlbnVtIGN0YXR0cl90c3RhbXAgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRVNUQU1QX1VOU1BFQywKICBDVEFfVElNRVNUQU1QX1NUQVJULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRVNUQU1QX1NUT1AsCiAgX19DVEFfVElNRVNUQU1QX01BWAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIENUQV9USU1FU1RBTVBfTUFYIChfX0NUQV9USU1FU1RBTVBfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGN0YXR0cl9uYXQgewogIENUQV9OQVRfVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfTkFUX1Y0X01JTklQLAogI2RlZmluZSBDVEFfTkFUX01JTklQIENUQV9OQVRfVjRfTUlOSVAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX05BVF9WNF9NQVhJUCwKICNkZWZpbmUgQ1RBX05BVF9NQVhJUCBDVEFfTkFUX1Y0X01BWElQCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9OQVRfUFJPVE8sCiAgQ1RBX05BVF9WNl9NSU5JUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX05BVF9WNl9NQVhJUCwKICBfX0NUQV9OQVRfTUFYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQ1RBX05BVF9NQVggKF9fQ1RBX05BVF9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gY3RhdHRyX3Byb3RvbmF0IHsKICBDVEFfUFJPVE9OQVRfVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfUFJPVE9OQVRfUE9SVF9NSU4sCiAgQ1RBX1BST1RPTkFUX1BPUlRfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9QUk9UT05BVF9NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfUFJPVE9OQVRfTUFYIChfX0NUQV9QUk9UT05BVF9NQVggLSAxKQorZW51bSBjdGF0dHJfc2VxYWRqIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQ1RBX1NFUUFESl9VTlNQRUMsCisgQ1RBX1NFUUFESl9DT1JSRUNUSU9OX1BPUywKKyBDVEFfU0VRQURKX09GRlNFVF9CRUZPUkUsCisgQ1RBX1NFUUFESl9PRkZTRVRfQUZURVIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fQ1RBX1NFUUFESl9NQVgKK307CisjZGVmaW5lIENUQV9TRVFBREpfTUFYIChfX0NUQV9TRVFBREpfTUFYIC0gMSkKIGVudW0gY3RhdHRyX25hdHNlcSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9OQVRfU0VRX1VOU1BFQywKICBDVEFfTkFUX1NFUV9DT1JSRUNUSU9OX1BPUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX05BVF9TRVFfT0ZGU0VUX0JFRk9SRSwKICBDVEFfTkFUX1NFUV9PRkZTRVRfQUZURVIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX05BVF9TRVFfTUFYCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RBX05BVF9TRVFfTUFYIChfX0NUQV9OQVRfU0VRX01BWCAtIDEpCiBlbnVtIGN0YXR0cl9leHBlY3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfRVhQRUNUX1VOU1BFQywKICBDVEFfRVhQRUNUX01BU1RFUiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX0VYUEVDVF9UVVBMRSwKICBDVEFfRVhQRUNUX01BU0ssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9FWFBFQ1RfVElNRU9VVCwKICBDVEFfRVhQRUNUX0lELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfRVhQRUNUX0hFTFBfTkFNRSwKICBDVEFfRVhQRUNUX1pPTkUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9FWFBFQ1RfRkxBR1MsCiAgQ1RBX0VYUEVDVF9DTEFTUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX0VYUEVDVF9OQVQsCiAgQ1RBX0VYUEVDVF9GTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVEFfRVhQRUNUX01BWAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUQV9FWFBFQ1RfTUFYIChfX0NUQV9FWFBFQ1RfTUFYIC0gMSkKIGVudW0gY3RhdHRyX2V4cGVjdF9uYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfRVhQRUNUX05BVF9VTlNQRUMsCiAgQ1RBX0VYUEVDVF9OQVRfRElSLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfRVhQRUNUX05BVF9UVVBMRSwKICBfX0NUQV9FWFBFQ1RfTkFUX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIENUQV9FWFBFQ1RfTkFUX01BWCAoX19DVEFfRVhQRUNUX05BVF9NQVggLSAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gY3RhdHRyX2hlbHAgewogIENUQV9IRUxQX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX0hFTFBfTkFNRSwKICBDVEFfSEVMUF9JTkZPLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9IRUxQX01BWAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUQV9IRUxQX01BWCAoX19DVEFfSEVMUF9NQVggLSAxKQogZW51bSBjdGF0dHJfc2VjY3R4IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1NFQ0NUWF9VTlNQRUMsCiAgQ1RBX1NFQ0NUWF9OQU1FLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9TRUNDVFhfTUFYCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RBX1NFQ0NUWF9NQVggKF9fQ1RBX1NFQ0NUWF9NQVggLSAxKQogZW51bSBjdGF0dHJfc3RhdHNfY3B1IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1NUQVRTX1VOU1BFQywKICBDVEFfU1RBVFNfU0VBUkNIRUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9TVEFUU19GT1VORCwKICBDVEFfU1RBVFNfTkVXLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfU1RBVFNfSU5WQUxJRCwKICBDVEFfU1RBVFNfSUdOT1JFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfU1RBVFNfREVMRVRFLAogIENUQV9TVEFUU19ERUxFVEVfTElTVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1NUQVRTX0lOU0VSVCwKICBDVEFfU1RBVFNfSU5TRVJUX0ZBSUxFRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1NUQVRTX0RST1AsCiAgQ1RBX1NUQVRTX0VBUkxZX0RST1AsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9TVEFUU19FUlJPUiwKICBDVEFfU1RBVFNfU0VBUkNIX1JFU1RBUlQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX1NUQVRTX01BWCwKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfU1RBVFNfTUFYIChfX0NUQV9TVEFUU19NQVggLSAxKQogZW51bSBjdGF0dHJfc3RhdHNfZ2xvYmFsIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1NUQVRTX0dMT0JBTF9VTlNQRUMsCiAgQ1RBX1NUQVRTX0dMT0JBTF9FTlRSSUVTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX0NUQV9TVEFUU19HTE9CQUxfTUFYLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUQV9TVEFUU19HTE9CQUxfTUFYIChfX0NUQV9TVEFUU19HTE9CQUxfTUFYIC0gMSkKIGVudW0gY3RhdHRyX2V4cGVjdF9zdGF0cyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9TVEFUU19FWFBfVU5TUEVDLAogIENUQV9TVEFUU19FWFBfTkVXLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfU1RBVFNfRVhQX0NSRUFURSwKICBDVEFfU1RBVFNfRVhQX0RFTEVURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVEFfU1RBVFNfRVhQX01BWCwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfU1RBVFNfRVhQX01BWCAoX19DVEFfU1RBVFNfRVhQX01BWCAtIDEpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY3R0aW1lb3V0LmgKaW5kZXggMWZlNGE1NS4uODkyNTc5OSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0dGltZW91dC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jdHRpbWVvdXQuaApAQCAtMjQsMTIwICsyNCwxMjIgQEAKICBJUENUTkxfTVNHX1RJTUVPVVRfTkVXLAogIElQQ1ROTF9NU0dfVElNRU9VVF9HRVQsCiAgSVBDVE5MX01TR19USU1FT1VUX0RFTEVURSwKLSBJUENUTkxfTVNHX1RJTUVPVVRfTUFYCisgSVBDVE5MX01TR19USU1FT1VUX0RFRkFVTFRfU0VULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJUENUTkxfTVNHX1RJTUVPVVRfREVGQVVMVF9HRVQsCisgSVBDVE5MX01TR19USU1FT1VUX01BWAogfTsKIGVudW0gY3RhdHRyX3RpbWVvdXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9VTlNQRUMsCiAgQ1RBX1RJTUVPVVRfTkFNRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfTDNQUk9UTywKICBDVEFfVElNRU9VVF9MNFBST1RPLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9EQVRBLAogIENUQV9USU1FT1VUX1VTRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVEFfVElNRU9VVF9NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfVElNRU9VVF9NQVggKF9fQ1RBX1RJTUVPVVRfTUFYIC0gMSkKIGVudW0gY3RhdHRyX3RpbWVvdXRfZ2VuZXJpYyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX0dFTkVSSUNfVU5TUEVDLAogIENUQV9USU1FT1VUX0dFTkVSSUNfVElNRU9VVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVEFfVElNRU9VVF9HRU5FUklDX01BWAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUQV9USU1FT1VUX0dFTkVSSUNfTUFYIChfX0NUQV9USU1FT1VUX0dFTkVSSUNfTUFYIC0gMSkKIGVudW0gY3RhdHRyX3RpbWVvdXRfdGNwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfVENQX1VOU1BFQywKICBDVEFfVElNRU9VVF9UQ1BfU1lOX1NFTlQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX1RDUF9TWU5fUkVDViwKICBDVEFfVElNRU9VVF9UQ1BfRVNUQUJMSVNIRUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX1RDUF9GSU5fV0FJVCwKICBDVEFfVElNRU9VVF9UQ1BfQ0xPU0VfV0FJVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfVENQX0xBU1RfQUNLLAogIENUQV9USU1FT1VUX1RDUF9USU1FX1dBSVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX1RDUF9DTE9TRSwKICBDVEFfVElNRU9VVF9UQ1BfU1lOX1NFTlQyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9UQ1BfUkVUUkFOUywKICBDVEFfVElNRU9VVF9UQ1BfVU5BQ0ssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX1RJTUVPVVRfVENQX01BWAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUQV9USU1FT1VUX1RDUF9NQVggKF9fQ1RBX1RJTUVPVVRfVENQX01BWCAtIDEpCiBlbnVtIGN0YXR0cl90aW1lb3V0X3VkcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX1VEUF9VTlNQRUMsCiAgQ1RBX1RJTUVPVVRfVURQX1VOUkVQTElFRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfVURQX1JFUExJRUQsCiAgX19DVEFfVElNRU9VVF9VRFBfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgQ1RBX1RJTUVPVVRfVURQX01BWCAoX19DVEFfVElNRU9VVF9VRFBfTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGN0YXR0cl90aW1lb3V0X3VkcGxpdGUgewogIENUQV9USU1FT1VUX1VEUExJVEVfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9VRFBMSVRFX1VOUkVQTElFRCwKICBDVEFfVElNRU9VVF9VRFBMSVRFX1JFUExJRUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX1RJTUVPVVRfVURQTElURV9NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfVElNRU9VVF9VRFBMSVRFX01BWCAoX19DVEFfVElNRU9VVF9VRFBMSVRFX01BWCAtIDEpCiBlbnVtIGN0YXR0cl90aW1lb3V0X2ljbXAgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9JQ01QX1VOU1BFQywKICBDVEFfVElNRU9VVF9JQ01QX1RJTUVPVVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX1RJTUVPVVRfSUNNUF9NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfVElNRU9VVF9JQ01QX01BWCAoX19DVEFfVElNRU9VVF9JQ01QX01BWCAtIDEpCiBlbnVtIGN0YXR0cl90aW1lb3V0X2RjY3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9EQ0NQX1VOU1BFQywKICBDVEFfVElNRU9VVF9EQ0NQX1JFUVVFU1QsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX0RDQ1BfUkVTUE9ORCwKICBDVEFfVElNRU9VVF9EQ0NQX1BBUlRPUEVOLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9EQ0NQX09QRU4sCiAgQ1RBX1RJTUVPVVRfRENDUF9DTE9TRVJFUSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfRENDUF9DTE9TSU5HLAogIENUQV9USU1FT1VUX0RDQ1BfVElNRVdBSVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fQ1RBX1RJTUVPVVRfRENDUF9NQVgKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVEFfVElNRU9VVF9EQ0NQX01BWCAoX19DVEFfVElNRU9VVF9EQ0NQX01BWCAtIDEpCiBlbnVtIGN0YXR0cl90aW1lb3V0X3NjdHAgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9TQ1RQX1VOU1BFQywKICBDVEFfVElNRU9VVF9TQ1RQX0NMT1NFRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfU0NUUF9DT09LSUVfV0FJVCwKICBDVEFfVElNRU9VVF9TQ1RQX0NPT0tJRV9FQ0hPRUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUQV9USU1FT1VUX1NDVFBfRVNUQUJMSVNIRUQsCiAgQ1RBX1RJTUVPVVRfU0NUUF9TSFVURE9XTl9TRU5ULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9TQ1RQX1NIVVRET1dOX1JFQ0QsCiAgQ1RBX1RJTUVPVVRfU0NUUF9TSFVURE9XTl9BQ0tfU0VOVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVEFfVElNRU9VVF9TQ1RQX01BWAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUQV9USU1FT1VUX1NDVFBfTUFYIChfX0NUQV9USU1FT1VUX1NDVFBfTUFYIC0gMSkKIGVudW0gY3RhdHRyX3RpbWVvdXRfaWNtcHY2IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfSUNNUFY2X1VOU1BFQywKICBDVEFfVElNRU9VVF9JQ01QVjZfVElNRU9VVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19DVEFfVElNRU9VVF9JQ01QVjZfTUFYCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RBX1RJTUVPVVRfSUNNUFY2X01BWCAoX19DVEFfVElNRU9VVF9JQ01QVjZfTUFYIC0gMSkKIGVudW0gY3RhdHRyX3RpbWVvdXRfZ3JlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RBX1RJTUVPVVRfR1JFX1VOU1BFQywKICBDVEFfVElNRU9VVF9HUkVfVU5SRVBMSUVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVEFfVElNRU9VVF9HUkVfUkVQTElFRCwKICBfX0NUQV9USU1FT1VUX0dSRV9NQVgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBDVEFfVElNRU9VVF9HUkVfTUFYIChfX0NUQV9USU1FT1VUX0dSRV9NQVggLSAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1ROTF9USU1FT1VUX05BTUVfTUFYIDMyCiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oCmluZGV4IDI3MmQ1M2YuLjgxNmUzNDQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oCkBAIC02Nyw1OSArNjcsNjUgQEAKICBORlFBX0NBUF9MRU4sCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GUUFfU0tCX0lORk8sCisgTkZRQV9FWFAsCisgTkZRQV9VSUQsCisgTkZRQV9HSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkZRQV9NQVgKIH07CiAjZGVmaW5lIE5GUUFfTUFYIChfX05GUUFfTUFYIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbmZxbmxfbXNnX3ZlcmRpY3RfaGRyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIHZlcmRpY3Q7CiAgX19iZTMyIGlkOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5mcW5sX21zZ19jb25maWdfY21kcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GUU5MX0NGR19DTURfTk9ORSwKICBORlFOTF9DRkdfQ01EX0JJTkQsCiAgTkZRTkxfQ0ZHX0NNRF9VTkJJTkQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GUU5MX0NGR19DTURfUEZfQklORCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZRTkxfQ0ZHX0NNRF9QRl9VTkJJTkQsCiB9Owogc3RydWN0IG5mcW5sX21zZ19jb25maWdfY21kIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBjb21tYW5kOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IF9wYWQ7CiAgX19iZTE2IHBmOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5mcW5sX2NvbmZpZ19tb2RlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZRTkxfQ09QWV9OT05FLAogIE5GUU5MX0NPUFlfTUVUQSwKICBORlFOTF9DT1BZX1BBQ0tFVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZnFubF9tc2dfY29uZmlnX3BhcmFtcyB7CiAgX19iZTMyIGNvcHlfcmFuZ2U7CiAgX191OCBjb3B5X21vZGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBuZnFubF9hdHRyX2NvbmZpZyB7CiAgTkZRQV9DRkdfVU5TUEVDLAogIE5GUUFfQ0ZHX0NNRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZRQV9DRkdfUEFSQU1TLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlFBX0NGR19RVUVVRV9NQVhMRU4sCiAgTkZRQV9DRkdfTUFTSywKICBORlFBX0NGR19GTEFHUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19ORlFBX0NGR19NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBORlFBX0NGR19NQVggKF9fTkZRQV9DRkdfTUFYLTEpCiAjZGVmaW5lIE5GUUFfQ0ZHX0ZfRkFJTF9PUEVOICgxIDw8IDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlFBX0NGR19GX0NPTk5UUkFDSyAoMSA8PCAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZRQV9DRkdfRl9HU08gKDEgPDwgMikKLSNkZWZpbmUgTkZRQV9DRkdfRl9NQVggKDEgPDwgMykKKyNkZWZpbmUgTkZRQV9DRkdfRl9VSURfR0lEICgxIDw8IDMpCisjZGVmaW5lIE5GUUFfQ0ZHX0ZfTUFYICgxIDw8IDQpCiAjZGVmaW5lIE5GUUFfU0tCX0NTVU1OT1RSRUFEWSAoMSA8PCAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZRQV9TS0JfR1NPICgxIDw8IDEpCisjZGVmaW5lIE5GUUFfU0tCX0NTVU1fTk9UVkVSSUZJRUQgKDEgPDwgMikKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfSE1BUksuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X0hNQVJLLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRkMDMwMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X0hNQVJLLmgKQEAgLTAsMCArMSw3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBYVF9ITUFSS19IXworI2RlZmluZSBYVF9ITUFSS19IXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgWFRfSE1BUktfU0FERFJfTUFTSywKKyBYVF9ITUFSS19EQUREUl9NQVNLLAorIFhUX0hNQVJLX1NQSSwKKyBYVF9ITUFSS19TUElfTUFTSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgWFRfSE1BUktfU1BPUlQsCisgWFRfSE1BUktfRFBPUlQsCisgWFRfSE1BUktfU1BPUlRfTUFTSywKKyBYVF9ITUFSS19EUE9SVF9NQVNLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBYVF9ITUFSS19QUk9UT19NQVNLLAorIFhUX0hNQVJLX1JORCwKKyBYVF9ITUFSS19NT0RVTFVTLAorIFhUX0hNQVJLX09GRlNFVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgWFRfSE1BUktfQ1QsCisgWFRfSE1BUktfTUVUSE9EX0wzLAorIFhUX0hNQVJLX01FVEhPRF9MM180LAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFhUX0hNQVJLX0ZMQUcoZmxhZykgKDEgPDwgZmxhZykKK3VuaW9uIGhtYXJrX3BvcnRzIHsKKyBzdHJ1Y3QgeworIF9fdTE2IHNyYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgZHN0OworIH0gcDE2OworIHN0cnVjdCB7CisgX19iZTE2IHNyYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTE2IGRzdDsKKyB9IGIxNjsKKyBfX3UzMiB2MzI7CisgX19iZTMyIGIzMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IHh0X2htYXJrX2luZm8geworIHVuaW9uIG5mX2luZXRfYWRkciBzcmNfbWFzazsKKyB1bmlvbiBuZl9pbmV0X2FkZHIgZHN0X21hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uIGhtYXJrX3BvcnRzIHBvcnRfbWFzazsKKyB1bmlvbiBobWFya19wb3J0cyBwb3J0X3NldDsKKyBfX3UzMiBmbGFnczsKKyBfX3UxNiBwcm90b19tYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBoYXNocm5kOworIF9fdTMyIGhtb2R1bHVzOworIF9fdTMyIGhvZmZzZXQ7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9JRExFVElNRVIuaAppbmRleCA5YTk4ZjIwLi4xYTJjMDg4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9JRExFVElNRVIuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9JRExFVElNRVIuaApAQCAtMjEsMTQgKzIxLDkgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2RlZmluZSBNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkUgMjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE5MTVNHX01BWF9TSVpFIDY0Ci0jZGVmaW5lIE5MX0VWRU5UX1RZUEVfSU5BQ1RJVkUgMAotI2RlZmluZSBOTF9FVkVOVF9UWVBFX0FDVElWRSAxCiBzdHJ1Y3QgaWRsZXRpbWVyX3RnX2luZm8gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0aW1lb3V0OwogIGNoYXIgbGFiZWxbTUFYX0lETEVUSU1FUl9MQUJFTF9TSVpFXTsKLSBfX3U4IHNlbmRfbmxfbXNnOwogIHN0cnVjdCBpZGxldGltZXJfdGcgKnRpbWVyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfU1lOUFJPWFkuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1NZTlBST1hZLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjZDFmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X1NZTlBST1hZLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfU1lOUFJPWFlfSAorI2RlZmluZSBfWFRfU1lOUFJPWFlfSAorI2RlZmluZSBYVF9TWU5QUk9YWV9PUFRfTVNTIDB4MDEKKyNkZWZpbmUgWFRfU1lOUFJPWFlfT1BUX1dTQ0FMRSAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYVF9TWU5QUk9YWV9PUFRfU0FDS19QRVJNIDB4MDQKKyNkZWZpbmUgWFRfU1lOUFJPWFlfT1BUX1RJTUVTVEFNUCAweDA4CisjZGVmaW5lIFhUX1NZTlBST1hZX09QVF9FQ04gMHgxMAorc3RydWN0IHh0X3N5bnByb3h5X2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IG9wdGlvbnM7CisgX191OCB3c2NhbGU7CisgX191MTYgbXNzOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nncm91cC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY2dyb3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2OTUxYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nncm91cC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1VBUElfWFRfQ0dST1VQX0gKKyNkZWZpbmUgX1VBUElfWFRfQ0dST1VQX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorc3RydWN0IHh0X2Nncm91cF9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaWQ7CisgX191MzIgaW52ZXJ0OworfTsKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwY29tcC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfaXBjb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJkMWI1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2lwY29tcC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX0lQQ09NUF9ICisjZGVmaW5lIF9YVF9JUENPTVBfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitzdHJ1Y3QgeHRfaXBjb21wIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgc3Bpc1syXTsKKyBfX3U4IGludmZsYWdzOworIF9fdTggaGRycmVzOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFhUX0lQQ09NUF9JTlZfU1BJIDB4MDEKKyNkZWZpbmUgWFRfSVBDT01QX0lOVl9NQVNLIDB4MDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfbDJ0cC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfbDJ0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhN2I4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9sMnRwLmgKQEAgLTAsMCArMSw0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTkVURklMVEVSX1hUX0wyVFBfSAorI2RlZmluZSBfTElOVVhfTkVURklMVEVSX1hUX0wyVFBfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitlbnVtIHh0X2wydHBfdHlwZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFhUX0wyVFBfVFlQRV9DT05UUk9MLAorIFhUX0wyVFBfVFlQRV9EQVRBLAorfTsKK3N0cnVjdCB4dF9sMnRwX2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0aWQ7CisgX191MzIgc2lkOworIF9fdTggdmVyc2lvbjsKKyBfX3U4IHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZmxhZ3M7Cit9OworZW51bSB7CisgWFRfTDJUUF9USUQgPSAoMSA8PCAwKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgWFRfTDJUUF9TSUQgPSAoMSA8PCAxKSwKKyBYVF9MMlRQX1ZFUlNJT04gPSAoMSA8PCAyKSwKKyBYVF9MMlRQX1RZUEUgPSAoMSA8PCAzKSwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlci94dF9ycGZpbHRlci5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcnBmaWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTUzM2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfcnBmaWx0ZXIuaApAQCAtMCwwICsxLDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9SUEFUSF9ICisjZGVmaW5lIF9YVF9SUEFUSF9ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK2VudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBYVF9SUEZJTFRFUl9MT09TRSA9IDEgPDwgMCwKKyBYVF9SUEZJTFRFUl9WQUxJRF9NQVJLID0gMSA8PCAxLAorIFhUX1JQRklMVEVSX0FDQ0VQVF9MT0NBTCA9IDEgPDwgMiwKKyBYVF9SUEZJTFRFUl9JTlZFUlQgPSAxIDw8IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCB4dF9ycGZpbHRlcl9pbmZvIHsKKyBfX3U4IGZsYWdzOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X3NvY2tldC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfc29ja2V0LmgKaW5kZXggNThiYzZhZS4uNDE3MGZlNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfc29ja2V0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfc29ja2V0LmgKQEAgLTIyLDE0ICsyMiwxNyBAQAogZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFhUX1NPQ0tFVF9UUkFOU1BBUkVOVCA9IDEgPDwgMCwKKyBYVF9TT0NLRVRfTk9XSUxEQ0FSRCA9IDEgPDwgMSwKIH07CiBzdHJ1Y3QgeHRfc29ja2V0X210aW5mbzEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci1zdHJ1Y3Qgc29jayAqeHRfc29ja2V0X2dldDRfc2soY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpOwotc3RydWN0IHNvY2sgKnh0X3NvY2tldF9nZXQ2X3NrKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisjZGVmaW5lIFhUX1NPQ0tFVF9GTEFHU19WMSBYVF9TT0NLRVRfVFJBTlNQQVJFTlQKK3N0cnVjdCB4dF9zb2NrZXRfbXRpbmZvMiB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcik7CisgX191OCBmbGFnczsKK307CisjZGVmaW5lIFhUX1NPQ0tFVF9GTEFHU19WMiAoWFRfU09DS0VUX1RSQU5TUEFSRU5UIHwgWFRfU09DS0VUX05PV0lMRENBUkQpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0XzgwMl8zLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0XzgwMl8zLmgKaW5kZXggMDFlZjE2OC4uMDlhZTdlMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF84MDJfMy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfODAyXzMuaApAQCAtMTksNDggKzE5LDUwIEBACiAjaWZuZGVmIF9VQVBJX19MSU5VWF9CUklER0VfRUJUXzgwMl8zX0gKICNkZWZpbmUgX1VBUElfX0xJTlVYX0JSSURHRV9FQlRfODAyXzNfSAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZGVmaW5lIEVCVF84MDJfM19TQVAgMHgwMQorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFQlRfODAyXzNfU0FQIDB4MDEKICNkZWZpbmUgRUJUXzgwMl8zX1RZUEUgMHgwMgogI2RlZmluZSBFQlRfODAyXzNfTUFUQ0ggIjgwMl8zIgogI2RlZmluZSBDSEVDS19UWVBFIDB4YWEKLSNkZWZpbmUgSVNfVUkgMHgwMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVNfVUkgMHgwMwogI2RlZmluZSBFQlRfODAyXzNfTUFTSyAoRUJUXzgwMl8zX1NBUCB8IEVCVF84MDJfM19UWVBFIHwgRUJUXzgwMl8zKQogc3RydWN0IGhkcl91aSB7CiAgX191OCBkc2FwOwotIF9fdTggc3NhcDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBzc2FwOwogIF9fdTggY3RybDsKICBfX3U4IG9yaWdbM107CiAgX19iZTE2IHR5cGU7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3QgaGRyX25pIHsKICBfX3U4IGRzYXA7CiAgX191OCBzc2FwOwotIF9fYmUxNiBjdHJsOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMTYgY3RybDsKICBfX3U4IG9yaWdbM107CiAgX19iZTE2IHR5cGU7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBlYnRfODAyXzNfaGRyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gX191OCBkYWRkcls2XTsKLSBfX3U4IHNhZGRyWzZdOworIF9fdTggZGFkZHJbRVRIX0FMRU5dOworIF9fdTggc2FkZHJbRVRIX0FMRU5dOwogIF9fYmUxNiBsZW47Ci0gdW5pb24gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bmlvbiB7CiAgc3RydWN0IGhkcl91aSB1aTsKICBzdHJ1Y3QgaGRyX25pIG5pOwogIH0gbGxjOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGVidF84MDJfM19pbmZvIHsKICBfX3U4IHNhcDsKICBfX2JlMTYgdHlwZTsKLSBfX3U4IGJpdG1hc2s7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYml0bWFzazsKICBfX3U4IGludmZsYWdzOwogfTsKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMVVNURVJJUC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ0xVU1RFUklQLmgKaW5kZXggMmI4YzUxMy4uOTQ2NDU0NSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ0xVU1RFUklQLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ0xVU1RFUklQLmgKQEAgLTE5LDI4ICsxOSwzMCBAQAogI2lmbmRlZiBfSVBUX0NMVVNURVJJUF9IX3RhcmdldAogI2RlZmluZSBfSVBUX0NMVVNURVJJUF9IX3RhcmdldAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci1lbnVtIGNsdXN0ZXJpcF9oYXNobW9kZSB7CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIGNsdXN0ZXJpcF9oYXNobW9kZSB7CiAgQ0xVU1RFUklQX0hBU0hNT0RFX1NJUCA9IDAsCiAgQ0xVU1RFUklQX0hBU0hNT0RFX1NJUF9TUFQsCiAgQ0xVU1RFUklQX0hBU0hNT0RFX1NJUF9TUFRfRFBULAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBDTFVTVEVSSVBfSEFTSE1PREVfTUFYIENMVVNURVJJUF9IQVNITU9ERV9TSVBfU1BUX0RQVAogI2RlZmluZSBDTFVTVEVSSVBfTUFYX05PREVTIDE2CiAjZGVmaW5lIENMVVNURVJJUF9GTEFHX05FVyAweDAwMDAwMDAxCi1zdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZzsKIHN0cnVjdCBpcHRfY2x1c3RlcmlwX3RndF9pbmZvIHsKICBfX3UzMiBmbGFnczsKLSBfX3U4IGNsdXN0ZXJtYWNbNl07Ci0gX191MTYgbnVtX3RvdGFsX25vZGVzOworIF9fdTggY2x1c3Rlcm1hY1tFVEhfQUxFTl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IG51bV90b3RhbF9ub2RlczsKICBfX3UxNiBudW1fbG9jYWxfbm9kZXM7CiAgX191MTYgbG9jYWxfbm9kZXNbQ0xVU1RFUklQX01BWF9OT0RFU107CiAgX191MzIgaGFzaF9tb2RlOwotIF9fdTMyIGhhc2hfaW5pdHZhbDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaGFzaF9pbml0dmFsOwogIHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjb25maWc7CiB9OwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZmMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmZjLmgKaW5kZXggMWU3MWJiMi4uODg5NzlkZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9uZmMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25mYy5oCkBAIC01Miw1NCArNTIsNzQgQEAKICBORkNfQ01EX0xMQ19TRFJFUSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZDX0VWRU5UX0xMQ19TRFJFUywKKyBORkNfQ01EX0ZXX0RPV05MT0FELAorIE5GQ19FVkVOVF9TRV9BRERFRCwKKyBORkNfRVZFTlRfU0VfUkVNT1ZFRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZDX0VWRU5UX1NFX0NPTk5FQ1RJVklUWSwKKyBORkNfRVZFTlRfU0VfVFJBTlNBQ1RJT04sCisgTkZDX0NNRF9HRVRfU0UsCisgTkZDX0NNRF9TRV9JTywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19ORkNfQ01EX0FGVEVSX0xBU1QKIH07CiAjZGVmaW5lIE5GQ19DTURfTUFYIChfX05GQ19DTURfQUZURVJfTEFTVCAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBuZmNfYXR0cnMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkNfQVRUUl9VTlNQRUMsCiAgTkZDX0FUVFJfREVWSUNFX0lOREVYLAogIE5GQ19BVFRSX0RFVklDRV9OQU1FLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkNfQVRUUl9QUk9UT0NPTFMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GQ19BVFRSX1RBUkdFVF9JTkRFWCwKICBORkNfQVRUUl9UQVJHRVRfU0VOU19SRVMsCiAgTkZDX0FUVFJfVEFSR0VUX1NFTF9SRVMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GQ19BVFRSX1RBUkdFVF9ORkNJRDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GQ19BVFRSX1RBUkdFVF9TRU5TQl9SRVMsCiAgTkZDX0FUVFJfVEFSR0VUX1NFTlNGX1JFUywKICBORkNfQVRUUl9DT01NX01PREUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GQ19BVFRSX1JGX01PREUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GQ19BVFRSX0RFVklDRV9QT1dFUkVELAogIE5GQ19BVFRSX0lNX1BST1RPQ09MUywKICBORkNfQVRUUl9UTV9QUk9UT0NPTFMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GQ19BVFRSX0xMQ19QQVJBTV9MVE8sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GQ19BVFRSX0xMQ19QQVJBTV9SVywKICBORkNfQVRUUl9MTENfUEFSQU1fTUlVWCwKICBORkNfQVRUUl9TRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZDX0FUVFJfTExDX1NEUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZDX0FUVFJfRklSTVdBUkVfTkFNRSwKKyBORkNfQVRUUl9TRV9JTkRFWCwKKyBORkNfQVRUUl9TRV9UWVBFLAorIE5GQ19BVFRSX1NFX0FJRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkZDX0FUVFJfRklSTVdBUkVfRE9XTkxPQURfU1RBVFVTLAorIE5GQ19BVFRSX1NFX0FQRFUsCiAgX19ORkNfQVRUUl9BRlRFUl9MQVNUCiB9OwotI2RlZmluZSBORkNfQVRUUl9NQVggKF9fTkZDX0FUVFJfQUZURVJfTEFTVCAtIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORkNfQVRUUl9NQVggKF9fTkZDX0FUVFJfQUZURVJfTEFTVCAtIDEpCiBlbnVtIG5mY19zZHBfYXR0ciB7CiAgTkZDX1NEUF9BVFRSX1VOU1BFQywKICBORkNfU0RQX0FUVFJfVVJJLAotIE5GQ19TRFBfQVRUUl9TQVAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5GQ19TRFBfQVRUUl9TQVAsCiAgX19ORkNfU0RQX0FUVFJfQUZURVJfTEFTVAogfTsKICNkZWZpbmUgTkZDX1NEUF9BVFRSX01BWCAoX19ORkNfU0RQX0FUVFJfQUZURVJfTEFTVCAtIDEpCi0jZGVmaW5lIE5GQ19ERVZJQ0VfTkFNRV9NQVhTSVpFIDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5GQ19ERVZJQ0VfTkFNRV9NQVhTSVpFIDgKICNkZWZpbmUgTkZDX05GQ0lEMV9NQVhTSVpFIDEwCisjZGVmaW5lIE5GQ19ORkNJRDJfTUFYU0laRSA4CisjZGVmaW5lIE5GQ19ORkNJRDNfTUFYU0laRSAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX1NFTlNCX1JFU19NQVhTSVpFIDEyCiAjZGVmaW5lIE5GQ19TRU5TRl9SRVNfTUFYU0laRSAxOAogI2RlZmluZSBORkNfR0JfTUFYU0laRSA0OAorI2RlZmluZSBORkNfRklSTVdBUkVfTkFNRV9NQVhTSVpFIDMyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORkNfUFJPVE9fSkVXRUwgMQogI2RlZmluZSBORkNfUFJPVE9fTUlGQVJFIDIKQEAgLTEyMyw0NCArMTQzLDQ2IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORkNfUFJPVE9fTkZDX0RFUF9NQVNLICgxIDw8IE5GQ19QUk9UT19ORkNfREVQKQogI2RlZmluZSBORkNfUFJPVE9fSVNPMTQ0NDNfQl9NQVNLICgxIDw8IE5GQ19QUk9UT19JU08xNDQ0M19CKQotI2RlZmluZSBORkNfU0VfTk9ORSAweDAKICNkZWZpbmUgTkZDX1NFX1VJQ0MgMHgxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORkNfU0VfRU1CRURERUQgMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORkNfU0VfRElTQUJMRUQgMHgwCisjZGVmaW5lIE5GQ19TRV9FTkFCTEVEIDB4MQogc3RydWN0IHNvY2thZGRyX25mYyB7CiAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwotIF9fdTMyIGRldl9pZHg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGRldl9pZHg7CiAgX191MzIgdGFyZ2V0X2lkeDsKICBfX3UzMiBuZmNfcHJvdG9jb2w7CiB9OwotI2RlZmluZSBORkNfTExDUF9NQVhfU0VSVklDRV9OQU1FIDYzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORkNfTExDUF9NQVhfU0VSVklDRV9OQU1FIDYzCiBzdHJ1Y3Qgc29ja2FkZHJfbmZjX2xsY3AgewogIHNhX2ZhbWlseV90IHNhX2ZhbWlseTsKICBfX3UzMiBkZXZfaWR4OwotIF9fdTMyIHRhcmdldF9pZHg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHRhcmdldF9pZHg7CiAgX191MzIgbmZjX3Byb3RvY29sOwogIF9fdTggZHNhcDsKICBfX3U4IHNzYXA7Ci0gY2hhciBzZXJ2aWNlX25hbWVbTkZDX0xMQ1BfTUFYX1NFUlZJQ0VfTkFNRV07ICA7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNoYXIgc2VydmljZV9uYW1lW05GQ19MTENQX01BWF9TRVJWSUNFX05BTUVdOyAgOwogIHNpemVfdCBzZXJ2aWNlX25hbWVfbGVuOwogfTsKICNkZWZpbmUgTkZDX1NPQ0tQUk9UT19SQVcgMAotI2RlZmluZSBORkNfU09DS1BST1RPX0xMQ1AgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZDX1NPQ0tQUk9UT19MTENQIDEKICNkZWZpbmUgTkZDX1NPQ0tQUk9UT19NQVggMgogI2RlZmluZSBORkNfSEVBREVSX1NJWkUgMQogI2RlZmluZSBORkNfTExDUF9SQVdfSEVBREVSX1NJWkUgMgotI2RlZmluZSBORkNfTExDUF9ESVJFQ1RJT05fUlggMHgwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkZDX0xMQ1BfRElSRUNUSU9OX1JYIDB4MDAKICNkZWZpbmUgTkZDX0xMQ1BfRElSRUNUSU9OX1RYIDB4MDEKICNkZWZpbmUgTkZDX0xMQ1BfUlcgMAogI2RlZmluZSBORkNfTExDUF9NSVVYIDEKLSNkZWZpbmUgTkZDX0xMQ1BfUkVNT1RFX01JVSAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORkNfTExDUF9SRU1PVEVfTUlVIDIKICNkZWZpbmUgTkZDX0xMQ1BfUkVNT1RFX0xUTyAzCiAjZGVmaW5lIE5GQ19MTENQX1JFTU9URV9SVyA0CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25mczQuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmZzNC5oCmluZGV4IDA5YTNjN2MuLjI5NDQ2OTMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmZzNC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvbmZzNC5oCkBAIC0xNTcsNyArMTU3LDcgQEAKICNkZWZpbmUgTkZTNF9TRUNJTkZPX1NUWUxFNF9DVVJSRU5UX0ZIIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUzRfU0VDSU5GT19TVFlMRTRfUEFSRU5UIDEKLSNkZWZpbmUgTkZTNF9NQVhfVUlOVDY0ICh+KHU2NCkwKQorI2RlZmluZSBORlM0X01BWF9VSU5UNjQgKH4oX191NjQpMCkKICNkZWZpbmUgTkZTNF9NQVhfT1BTIDgKICNkZWZpbmUgTkZTNF9NQVhfQkFDS19DSEFOTkVMX09QUyAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9ubDgwMjExLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25sODAyMTEuaAppbmRleCAzM2Y0YTgyLi4wMWM1MGNkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25sODAyMTEuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L25sODAyMTEuaApAQCAtMTksNzU1ICsxOSw4MDAgQEAKICNpZm5kZWYgX19MSU5VWF9OTDgwMjExX0gKICNkZWZpbmUgX19MSU5VWF9OTDgwMjExX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotZW51bSBubDgwMjExX2NvbW1hbmRzIHsKKyNkZWZpbmUgTkw4MDIxMV9HRU5MX05BTUUgIm5sODAyMTEiCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBubDgwMjExX2NvbW1hbmRzIHsKICBOTDgwMjExX0NNRF9VTlNQRUMsCiAgTkw4MDIxMV9DTURfR0VUX1dJUEhZLAogIE5MODAyMTFfQ01EX1NFVF9XSVBIWSwKLSBOTDgwMjExX0NNRF9ORVdfV0lQSFksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX05FV19XSVBIWSwKICBOTDgwMjExX0NNRF9ERUxfV0lQSFksCiAgTkw4MDIxMV9DTURfR0VUX0lOVEVSRkFDRSwKICBOTDgwMjExX0NNRF9TRVRfSU5URVJGQUNFLAotIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX05FV19JTlRFUkZBQ0UsCiAgTkw4MDIxMV9DTURfREVMX0lOVEVSRkFDRSwKICBOTDgwMjExX0NNRF9HRVRfS0VZLAogIE5MODAyMTFfQ01EX1NFVF9LRVksCi0gTkw4MDIxMV9DTURfTkVXX0tFWSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfTkVXX0tFWSwKICBOTDgwMjExX0NNRF9ERUxfS0VZLAogIE5MODAyMTFfQ01EX0dFVF9CRUFDT04sCiAgTkw4MDIxMV9DTURfU0VUX0JFQUNPTiwKLSBOTDgwMjExX0NNRF9TVEFSVF9BUCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfU1RBUlRfQVAsCiAgTkw4MDIxMV9DTURfTkVXX0JFQUNPTiA9IE5MODAyMTFfQ01EX1NUQVJUX0FQLAogIE5MODAyMTFfQ01EX1NUT1BfQVAsCiAgTkw4MDIxMV9DTURfREVMX0JFQUNPTiA9IE5MODAyMTFfQ01EX1NUT1BfQVAsCi0gTkw4MDIxMV9DTURfR0VUX1NUQVRJT04sCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX0dFVF9TVEFUSU9OLAogIE5MODAyMTFfQ01EX1NFVF9TVEFUSU9OLAogIE5MODAyMTFfQ01EX05FV19TVEFUSU9OLAogIE5MODAyMTFfQ01EX0RFTF9TVEFUSU9OLAotIE5MODAyMTFfQ01EX0dFVF9NUEFUSCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfR0VUX01QQVRILAogIE5MODAyMTFfQ01EX1NFVF9NUEFUSCwKICBOTDgwMjExX0NNRF9ORVdfTVBBVEgsCiAgTkw4MDIxMV9DTURfREVMX01QQVRILAotIE5MODAyMTFfQ01EX1NFVF9CU1MsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX1NFVF9CU1MsCiAgTkw4MDIxMV9DTURfU0VUX1JFRywKICBOTDgwMjExX0NNRF9SRVFfU0VUX1JFRywKICBOTDgwMjExX0NNRF9HRVRfTUVTSF9DT05GSUcsCi0gTkw4MDIxMV9DTURfU0VUX01FU0hfQ09ORklHLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9TRVRfTUVTSF9DT05GSUcsCiAgTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUgICwKICBOTDgwMjExX0NNRF9HRVRfUkVHLAogIE5MODAyMTFfQ01EX0dFVF9TQ0FOLAotIE5MODAyMTFfQ01EX1RSSUdHRVJfU0NBTiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfVFJJR0dFUl9TQ0FOLAogIE5MODAyMTFfQ01EX05FV19TQ0FOX1JFU1VMVFMsCiAgTkw4MDIxMV9DTURfU0NBTl9BQk9SVEVELAogIE5MODAyMTFfQ01EX1JFR19DSEFOR0UsCi0gTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUsCiAgTkw4MDIxMV9DTURfQVNTT0NJQVRFLAogIE5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFLAogIE5MODAyMTFfQ01EX0RJU0FTU09DSUFURSwKLSBOTDgwMjExX0NNRF9NSUNIQUVMX01JQ19GQUlMVVJFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9NSUNIQUVMX01JQ19GQUlMVVJFLAogIE5MODAyMTFfQ01EX1JFR19CRUFDT05fSElOVCwKICBOTDgwMjExX0NNRF9KT0lOX0lCU1MsCiAgTkw4MDIxMV9DTURfTEVBVkVfSUJTUywKLSBOTDgwMjExX0NNRF9URVNUTU9ERSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfVEVTVE1PREUsCiAgTkw4MDIxMV9DTURfQ09OTkVDVCwKICBOTDgwMjExX0NNRF9ST0FNLAogIE5MODAyMTFfQ01EX0RJU0NPTk5FQ1QsCi0gTkw4MDIxMV9DTURfU0VUX1dJUEhZX05FVE5TLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9TRVRfV0lQSFlfTkVUTlMsCiAgTkw4MDIxMV9DTURfR0VUX1NVUlZFWSwKICBOTDgwMjExX0NNRF9ORVdfU1VSVkVZX1JFU1VMVFMsCiAgTkw4MDIxMV9DTURfU0VUX1BNS1NBLAotIE5MODAyMTFfQ01EX0RFTF9QTUtTQSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfREVMX1BNS1NBLAogIE5MODAyMTFfQ01EX0ZMVVNIX1BNS1NBLAogIE5MODAyMTFfQ01EX1JFTUFJTl9PTl9DSEFOTkVMLAogIE5MODAyMTFfQ01EX0NBTkNFTF9SRU1BSU5fT05fQ0hBTk5FTCwKLSBOTDgwMjExX0NNRF9TRVRfVFhfQklUUkFURV9NQVNLLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9TRVRfVFhfQklUUkFURV9NQVNLLAogIE5MODAyMTFfQ01EX1JFR0lTVEVSX0ZSQU1FLAogIE5MODAyMTFfQ01EX1JFR0lTVEVSX0FDVElPTiA9IE5MODAyMTFfQ01EX1JFR0lTVEVSX0ZSQU1FLAogIE5MODAyMTFfQ01EX0ZSQU1FLAotIE5MODAyMTFfQ01EX0FDVElPTiA9IE5MODAyMTFfQ01EX0ZSQU1FLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9BQ1RJT04gPSBOTDgwMjExX0NNRF9GUkFNRSwKICBOTDgwMjExX0NNRF9GUkFNRV9UWF9TVEFUVVMsCiAgTkw4MDIxMV9DTURfQUNUSU9OX1RYX1NUQVRVUyA9IE5MODAyMTFfQ01EX0ZSQU1FX1RYX1NUQVRVUywKICBOTDgwMjExX0NNRF9TRVRfUE9XRVJfU0FWRSwKLSBOTDgwMjExX0NNRF9HRVRfUE9XRVJfU0FWRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfR0VUX1BPV0VSX1NBVkUsCiAgTkw4MDIxMV9DTURfU0VUX0NRTSwKICBOTDgwMjExX0NNRF9OT1RJRllfQ1FNLAogIE5MODAyMTFfQ01EX1NFVF9DSEFOTkVMLAotIE5MODAyMTFfQ01EX1NFVF9XRFNfUEVFUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfU0VUX1dEU19QRUVSLAogIE5MODAyMTFfQ01EX0ZSQU1FX1dBSVRfQ0FOQ0VMLAogIE5MODAyMTFfQ01EX0pPSU5fTUVTSCwKICBOTDgwMjExX0NNRF9MRUFWRV9NRVNILAotIE5MODAyMTFfQ01EX1VOUFJPVF9ERUFVVEhFTlRJQ0FURSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfVU5QUk9UX0RFQVVUSEVOVElDQVRFLAogIE5MODAyMTFfQ01EX1VOUFJPVF9ESVNBU1NPQ0lBVEUsCiAgTkw4MDIxMV9DTURfTkVXX1BFRVJfQ0FORElEQVRFLAogIE5MODAyMTFfQ01EX0dFVF9XT1dMQU4sCi0gTkw4MDIxMV9DTURfU0VUX1dPV0xBTiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfU0VUX1dPV0xBTiwKICBOTDgwMjExX0NNRF9TVEFSVF9TQ0hFRF9TQ0FOLAogIE5MODAyMTFfQ01EX1NUT1BfU0NIRURfU0NBTiwKICBOTDgwMjExX0NNRF9TQ0hFRF9TQ0FOX1JFU1VMVFMsCi0gTkw4MDIxMV9DTURfU0NIRURfU0NBTl9TVE9QUEVELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9TQ0hFRF9TQ0FOX1NUT1BQRUQsCiAgTkw4MDIxMV9DTURfU0VUX1JFS0VZX09GRkxPQUQsCiAgTkw4MDIxMV9DTURfUE1LU0FfQ0FORElEQVRFLAogIE5MODAyMTFfQ01EX1RETFNfT1BFUiwKLSBOTDgwMjExX0NNRF9URExTX01HTVQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX1RETFNfTUdNVCwKICBOTDgwMjExX0NNRF9VTkVYUEVDVEVEX0ZSQU1FLAogIE5MODAyMTFfQ01EX1BST0JFX0NMSUVOVCwKICBOTDgwMjExX0NNRF9SRUdJU1RFUl9CRUFDT05TLAotIE5MODAyMTFfQ01EX1VORVhQRUNURURfNEFERFJfRlJBTUUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQ01EX1VORVhQRUNURURfNEFERFJfRlJBTUUsCiAgTkw4MDIxMV9DTURfU0VUX05PQUNLX01BUCwKICBOTDgwMjExX0NNRF9DSF9TV0lUQ0hfTk9USUZZLAogIE5MODAyMTFfQ01EX1NUQVJUX1AyUF9ERVZJQ0UsCi0gTkw4MDIxMV9DTURfU1RPUF9QMlBfREVWSUNFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9TVE9QX1AyUF9ERVZJQ0UsCiAgTkw4MDIxMV9DTURfQ09OTl9GQUlMRUQsCiAgTkw4MDIxMV9DTURfU0VUX01DQVNUX1JBVEUsCiAgTkw4MDIxMV9DTURfU0VUX01BQ19BQ0wsCi0gTkw4MDIxMV9DTURfUkFEQVJfREVURUNULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0NNRF9SQURBUl9ERVRFQ1QsCiAgTkw4MDIxMV9DTURfR0VUX1BST1RPQ09MX0ZFQVRVUkVTLAogIE5MODAyMTFfQ01EX1VQREFURV9GVF9JRVMsCiAgTkw4MDIxMV9DTURfRlRfRVZFTlQsCi0gTkw4MDIxMV9DTURfQ1JJVF9QUk9UT0NPTF9TVEFSVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfQ1JJVF9QUk9UT0NPTF9TVEFSVCwKICBOTDgwMjExX0NNRF9DUklUX1BST1RPQ09MX1NUT1AsCisgTkw4MDIxMV9DTURfR0VUX0NPQUxFU0NFLAorIE5MODAyMTFfQ01EX1NFVF9DT0FMRVNDRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DTURfQ0hBTk5FTF9TV0lUQ0gsCisgTkw4MDIxMV9DTURfVkVORE9SLAorIE5MODAyMTFfQ01EX1NFVF9RT1NfTUFQLAogIF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9DTURfTUFYID0gX19OTDgwMjExX0NNRF9BRlRFUl9MQVNUIC0gMQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQ01EX1NFVF9CU1MgTkw4MDIxMV9DTURfU0VUX0JTUwogI2RlZmluZSBOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRSBOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9DTURfUkVHX0NIQU5HRSBOTDgwMjExX0NNRF9SRUdfQ0hBTkdFCiAjZGVmaW5lIE5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQ01EX0FTU09DSUFURSBOTDgwMjExX0NNRF9BU1NPQ0lBVEUKICNkZWZpbmUgTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUgTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQ01EX0RJU0FTU09DSUFURSBOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUKICNkZWZpbmUgTkw4MDIxMV9DTURfUkVHX0JFQUNPTl9ISU5UIE5MODAyMTFfQ01EX1JFR19CRUFDT05fSElOVAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9BVFRSX0ZFQVRVUkVfRkxBR1MgTkw4MDIxMV9BVFRSX0ZFQVRVUkVfRkxBR1MKICNkZWZpbmUgTkw4MDIxMV9DTURfR0VUX01FU0hfUEFSQU1TIE5MODAyMTFfQ01EX0dFVF9NRVNIX0NPTkZJRworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9DTURfU0VUX01FU0hfUEFSQU1TIE5MODAyMTFfQ01EX1NFVF9NRVNIX0NPTkZJRwogI2RlZmluZSBOTDgwMjExX01FU0hfU0VUVVBfVkVORE9SX1BBVEhfU0VMX0lFIE5MODAyMTFfTUVTSF9TRVRVUF9JRQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmw4MDIxMV9hdHRycyB7CiAgTkw4MDIxMV9BVFRSX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1dJUEhZLAogIE5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfSUZJTkRFWCwKICBOTDgwMjExX0FUVFJfSUZOQU1FLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfSUZUWVBFLAogIE5MODAyMTFfQVRUUl9NQUMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9LRVlfREFUQSwKICBOTDgwMjExX0FUVFJfS0VZX0lEWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0tFWV9DSVBIRVIsCiAgTkw4MDIxMV9BVFRSX0tFWV9TRVEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9LRVlfREVGQVVMVCwKICBOTDgwMjExX0FUVFJfQkVBQ09OX0lOVEVSVkFMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfRFRJTV9QRVJJT0QsCiAgTkw4MDIxMV9BVFRSX0JFQUNPTl9IRUFELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQkVBQ09OX1RBSUwsCiAgTkw4MDIxMV9BVFRSX1NUQV9BSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9TVEFfRkxBR1MsCiAgTkw4MDIxMV9BVFRSX1NUQV9MSVNURU5fSU5URVJWQUwsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9TVEFfU1VQUE9SVEVEX1JBVEVTLAogIE5MODAyMTFfQVRUUl9TVEFfVkxBTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1NUQV9JTkZPLAogIE5MODAyMTFfQVRUUl9XSVBIWV9CQU5EUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX01OVFJfRkxBR1MsCiAgTkw4MDIxMV9BVFRSX01FU0hfSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9TVEFfUExJTktfQUNUSU9OLAogIE5MODAyMTFfQVRUUl9NUEFUSF9ORVhUX0hPUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX01QQVRIX0lORk8sCiAgTkw4MDIxMV9BVFRSX0JTU19DVFNfUFJPVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0JTU19TSE9SVF9QUkVBTUJMRSwKICBOTDgwMjExX0FUVFJfQlNTX1NIT1JUX1NMT1RfVElNRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0hUX0NBUEFCSUxJVFksCiAgTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9JRlRZUEVTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfUkVHX0FMUEhBMiwKICBOTDgwMjExX0FUVFJfUkVHX1JVTEVTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfTUVTSF9DT05GSUcsCiAgTkw4MDIxMV9BVFRSX0JTU19CQVNJQ19SQVRFUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMsCiAgTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUsCiAgTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUX01HTVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEUsCiAgTkw4MDIxMV9BVFRSX0lFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfTUFYX05VTV9TQ0FOX1NTSURTLAogIE5MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfU0NBTl9TU0lEUywKICBOTDgwMjExX0FUVFJfR0VORVJBVElPTiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0JTUywKICBOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1JFR19UWVBFLAogIE5MODAyMTFfQVRUUl9TVVBQT1JURURfQ09NTUFORFMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9GUkFNRSwKICBOTDgwMjExX0FUVFJfU1NJRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0FVVEhfVFlQRSwKICBOTDgwMjExX0FUVFJfUkVBU09OX0NPREUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9LRVlfVFlQRSwKICBOTDgwMjExX0FUVFJfTUFYX1NDQU5fSUVfTEVOLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFUywKICBOTDgwMjExX0FUVFJfRlJFUV9CRUZPUkUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9GUkVRX0FGVEVSLAogIE5MODAyMTFfQVRUUl9GUkVRX0ZJWEVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfV0lQSFlfUkVUUllfU0hPUlQsCiAgTkw4MDIxMV9BVFRSX1dJUEhZX1JFVFJZX0xPTkcsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9XSVBIWV9GUkFHX1RIUkVTSE9MRCwKICBOTDgwMjExX0FUVFJfV0lQSFlfUlRTX1RIUkVTSE9MRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1RJTUVEX09VVCwKICBOTDgwMjExX0FUVFJfVVNFX01GUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1NUQV9GTEFHUzIsCiAgTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1RFU1REQVRBLAogIE5MODAyMTFfQVRUUl9QUklWQUNZLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfRElTQ09OTkVDVEVEX0JZX0FQLAogIE5MODAyMTFfQVRUUl9TVEFUVVNfQ09ERSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURVNfUEFJUldJU0UsCiAgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURV9HUk9VUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1dQQV9WRVJTSU9OUywKICBOTDgwMjExX0FUVFJfQUtNX1NVSVRFUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1JFUV9JRSwKICBOTDgwMjExX0FUVFJfUkVTUF9JRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1BSRVZfQlNTSUQsCiAgTkw4MDIxMV9BVFRSX0tFWSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0tFWVMsCiAgTkw4MDIxMV9BVFRSX1BJRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSXzRBRERSLAogIE5MODAyMTFfQVRUUl9TVVJWRVlfSU5GTywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1BNS0lELAogIE5MODAyMTFfQVRUUl9NQVhfTlVNX1BNS0lEUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0RVUkFUSU9OLAogIE5MODAyMTFfQVRUUl9DT09LSUUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9XSVBIWV9DT1ZFUkFHRV9DTEFTUywKICBOTDgwMjExX0FUVFJfVFhfUkFURVMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9GUkFNRV9NQVRDSCwKICBOTDgwMjExX0FUVFJfQUNLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfUFNfU1RBVEUsCiAgTkw4MDIxMV9BVFRSX0NRTSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0xPQ0FMX1NUQVRFX0NIQU5HRSwKICBOTDgwMjExX0FUVFJfQVBfSVNPTEFURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1dJUEhZX1RYX1BPV0VSX1NFVFRJTkcsCiAgTkw4MDIxMV9BVFRSX1dJUEhZX1RYX1BPV0VSX0xFVkVMLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfVFhfRlJBTUVfVFlQRVMsCiAgTkw4MDIxMV9BVFRSX1JYX0ZSQU1FX1RZUEVTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfRlJBTUVfVFlQRSwKICBOTDgwMjExX0FUVFJfQ09OVFJPTF9QT1JUX0VUSEVSVFlQRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVF9OT19FTkNSWVBULAogIE5MODAyMTFfQVRUUl9TVVBQT1JUX0lCU1NfUlNOLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9UWCwKICBOTDgwMjExX0FUVFJfV0lQSFlfQU5URU5OQV9SWCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX01DQVNUX1JBVEUsCiAgTkw4MDIxMV9BVFRSX09GRkNIQU5ORUxfVFhfT0ssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9CU1NfSFRfT1BNT0RFLAogIE5MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9UWVBFUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX01BWF9SRU1BSU5fT05fQ0hBTk5FTF9EVVJBVElPTiwKICBOTDgwMjExX0FUVFJfTUVTSF9TRVRVUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfQVZBSUxfVFgsCiAgTkw4MDIxMV9BVFRSX1dJUEhZX0FOVEVOTkFfQVZBSUxfUlgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9TVVBQT1JUX01FU0hfQVVUSCwKICBOTDgwMjExX0FUVFJfU1RBX1BMSU5LX1NUQVRFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfV09XTEFOX1RSSUdHRVJTLAogIE5MODAyMTFfQVRUUl9XT1dMQU5fVFJJR0dFUlNfU1VQUE9SVEVELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9JTlRFUlZBTCwKICBOTDgwMjExX0FUVFJfSU5URVJGQUNFX0NPTUJJTkFUSU9OUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1NPRlRXQVJFX0lGVFlQRVMsCiAgTkw4MDIxMV9BVFRSX1JFS0VZX0RBVEEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9NQVhfTlVNX1NDSEVEX1NDQU5fU1NJRFMsCiAgTkw4MDIxMV9BVFRSX01BWF9TQ0hFRF9TQ0FOX0lFX0xFTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1NDQU5fU1VQUF9SQVRFUywKICBOTDgwMjExX0FUVFJfSElEREVOX1NTSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9JRV9QUk9CRV9SRVNQLAogIE5MODAyMTFfQVRUUl9JRV9BU1NPQ19SRVNQLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfU1RBX1dNRSwKICBOTDgwMjExX0FUVFJfU1VQUE9SVF9BUF9VQVBTRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1JPQU1fU1VQUE9SVCwKICBOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9NQVRDSCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX01BWF9NQVRDSF9TRVRTLAogIE5MODAyMTFfQVRUUl9QTUtTQV9DQU5ESURBVEUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9UWF9OT19DQ0tfUkFURSwKICBOTDgwMjExX0FUVFJfVERMU19BQ1RJT04sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9URExTX0RJQUxPR19UT0tFTiwKICBOTDgwMjExX0FUVFJfVERMU19PUEVSQVRJT04sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9URExTX1NVUFBPUlQsCiAgTkw4MDIxMV9BVFRSX1RETFNfRVhURVJOQUxfU0VUVVAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9ERVZJQ0VfQVBfU01FLAogIE5MODAyMTFfQVRUUl9ET05UX1dBSVRfRk9SX0FDSywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0ZFQVRVUkVfRkxBR1MsCiAgTkw4MDIxMV9BVFRSX1BST0JFX1JFU1BfT0ZGTE9BRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1BST0JFX1JFU1AsCiAgTkw4MDIxMV9BVFRSX0RGU19SRUdJT04sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9ESVNBQkxFX0hULAogIE5MODAyMTFfQVRUUl9IVF9DQVBBQklMSVRZX01BU0ssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9OT0FDS19NQVAsCiAgTkw4MDIxMV9BVFRSX0lOQUNUSVZJVFlfVElNRU9VVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1JYX1NJR05BTF9EQk0sCiAgTkw4MDIxMV9BVFRSX0JHX1NDQU5fUEVSSU9ELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfV0RFViwKICBOTDgwMjExX0FUVFJfVVNFUl9SRUdfSElOVF9UWVBFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQ09OTl9GQUlMRURfUkVBU09OLAogIE5MODAyMTFfQVRUUl9TQUVfREFUQSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZLAogIE5MODAyMTFfQVRUUl9TQ0FOX0ZMQUdTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQ0hBTk5FTF9XSURUSCwKICBOTDgwMjExX0FUVFJfQ0VOVEVSX0ZSRVExLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQ0VOVEVSX0ZSRVEyLAogIE5MODAyMTFfQVRUUl9QMlBfQ1RXSU5ET1csCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9QMlBfT1BQUFMsCiAgTkw4MDIxMV9BVFRSX0xPQ0FMX01FU0hfUE9XRVJfTU9ERSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0FDTF9QT0xJQ1ksCiAgTkw4MDIxMV9BVFRSX01BQ19BRERSUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX01BQ19BQ0xfTUFYLAogIE5MODAyMTFfQVRUUl9SQURBUl9FVkVOVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0VYVF9DQVBBLAogIE5MODAyMTFfQVRUUl9FWFRfQ0FQQV9NQVNLLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfU1RBX0NBUEFCSUxJVFksCiAgTkw4MDIxMV9BVFRSX1NUQV9FWFRfQ0FQQUJJTElUWSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1BST1RPQ09MX0ZFQVRVUkVTLAogIE5MODAyMTFfQVRUUl9TUExJVF9XSVBIWV9EVU1QLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfRElTQUJMRV9WSFQsCiAgTkw4MDIxMV9BVFRSX1ZIVF9DQVBBQklMSVRZX01BU0ssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9NRElELAogIE5MODAyMTFfQVRUUl9JRV9SSUMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9DUklUX1BST1RfSUQsCiAgTkw4MDIxMV9BVFRSX01BWF9DUklUX1BST1RfRFVSQVRJT04sCi0gX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKLSBOTDgwMjExX0FUVFJfTUFYID0gX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCAtIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9BVFRSX1BFRVJfQUlELAorIE5MODAyMTFfQVRUUl9DT0FMRVNDRV9SVUxFLAorIE5MODAyMTFfQVRUUl9DSF9TV0lUQ0hfQ09VTlQsCisgTkw4MDIxMV9BVFRSX0NIX1NXSVRDSF9CTE9DS19UWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9BVFRSX0NTQV9JRVMsCisgTkw4MDIxMV9BVFRSX0NTQV9DX09GRl9CRUFDT04sCisgTkw4MDIxMV9BVFRSX0NTQV9DX09GRl9QUkVTUCwKKyBOTDgwMjExX0FUVFJfUlhNR01UX0ZMQUdTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9DSEFOTkVMUywKKyBOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9PUEVSX0NMQVNTRVMsCisgTkw4MDIxMV9BVFRSX0hBTkRMRV9ERlMsCisgTkw4MDIxMV9BVFRSX1NVUFBPUlRfNV9NSFosCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQVRUUl9TVVBQT1JUXzEwX01IWiwKKyBOTDgwMjExX0FUVFJfT1BNT0RFX05PVElGLAorIE5MODAyMTFfQVRUUl9WRU5ET1JfSUQsCisgTkw4MDIxMV9BVFRSX1ZFTkRPUl9TVUJDTUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQVRUUl9WRU5ET1JfREFUQSwKKyBOTDgwMjExX0FUVFJfVkVORE9SX0VWRU5UUywKKyBOTDgwMjExX0FUVFJfUU9TX01BUCwKKyBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0FUVFJfTUFYID0gX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCAtIDEKIH07CiAjZGVmaW5lIE5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT04gTkw4MDIxMV9BVFRSX0dFTkVSQVRJT04KICNkZWZpbmUgTkw4MDIxMV9BVFRSX01FU0hfUEFSQU1TIE5MODAyMTFfQVRUUl9NRVNIX0NPTkZJRwotI2RlZmluZSBOTDgwMjExX0NNRF9DT05ORUNUIE5MODAyMTFfQ01EX0NPTk5FQ1QKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MODAyMTFfQ01EX0NPTk5FQ1QgTkw4MDIxMV9DTURfQ09OTkVDVAogI2RlZmluZSBOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWSBOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWQogI2RlZmluZSBOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTIE5MODAyMTFfQVRUUl9CU1NfQkFTSUNfUkFURVMKICNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMgTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMKLSNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEgTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRIE5MODAyMTFfQVRUUl9XSVBIWV9GUkVRCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUgTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRQogI2RlZmluZSBOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFIE5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEUKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0lFIE5MODAyMTFfQVRUUl9JRQotI2RlZmluZSBOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUiBOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IgTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IKICNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFR19UWVBFIE5MODAyMTFfQVRUUl9SRUdfVFlQRQogI2RlZmluZSBOTDgwMjExX0FUVFJfRlJBTUUgTkw4MDIxMV9BVFRSX0ZSQU1FCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9TU0lEIE5MODAyMTFfQVRUUl9TU0lECi0jZGVmaW5lIE5MODAyMTFfQVRUUl9BVVRIX1RZUEUgTkw4MDIxMV9BVFRSX0FVVEhfVFlQRQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkw4MDIxMV9BVFRSX0FVVEhfVFlQRSBOTDgwMjExX0FUVFJfQVVUSF9UWVBFCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9SRUFTT05fQ09ERSBOTDgwMjExX0FUVFJfUkVBU09OX0NPREUKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURVNfUEFJUldJU0UgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURVNfUEFJUldJU0UKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURV9HUk9VUCBOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFX0dST1VQCi0jZGVmaW5lIE5MODAyMTFfQVRUUl9XUEFfVkVSU0lPTlMgTkw4MDIxMV9BVFRSX1dQQV9WRVJTSU9OUwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1dQQV9WRVJTSU9OUyBOTDgwMjExX0FUVFJfV1BBX1ZFUlNJT05TCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9BS01fU1VJVEVTIE5MODAyMTFfQVRUUl9BS01fU1VJVEVTCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9LRVkgTkw4MDIxMV9BVFRSX0tFWQogI2RlZmluZSBOTDgwMjExX0FUVFJfS0VZUyBOTDgwMjExX0FUVFJfS0VZUwotI2RlZmluZSBOTDgwMjExX0FUVFJfRkVBVFVSRV9GTEFHUyBOTDgwMjExX0FUVFJfRkVBVFVSRV9GTEFHUwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkw4MDIxMV9BVFRSX0ZFQVRVUkVfRkxBR1MgTkw4MDIxMV9BVFRSX0ZFQVRVUkVfRkxBR1MKICNkZWZpbmUgTkw4MDIxMV9NQVhfU1VQUF9SQVRFUyAzMgogI2RlZmluZSBOTDgwMjExX01BWF9TVVBQX0hUX1JBVEVTIDc3CiAjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkVHX1JVTEVTIDMyCi0jZGVmaW5lIE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9FTkNSX0tFWSAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVkgMAogI2RlZmluZSBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfVFhfTUlDX0tFWSAxNgogI2RlZmluZSBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWSAyNAogI2RlZmluZSBOTDgwMjExX0hUX0NBUEFCSUxJVFlfTEVOIDI2Ci0jZGVmaW5lIE5MODAyMTFfVkhUX0NBUEFCSUxJVFlfTEVOIDEyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOTDgwMjExX1ZIVF9DQVBBQklMSVRZX0xFTiAxMgogI2RlZmluZSBOTDgwMjExX01BWF9OUl9DSVBIRVJfU1VJVEVTIDUKICNkZWZpbmUgTkw4MDIxMV9NQVhfTlJfQUtNX1NVSVRFUyAyCiAjZGVmaW5lIE5MODAyMTFfTUlOX1JFTUFJTl9PTl9DSEFOTkVMX1RJTUUgMTAKLSNkZWZpbmUgTkw4MDIxMV9TQ0FOX1JTU0lfVEhPTERfT0ZGIC0zMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MODAyMTFfU0NBTl9SU1NJX1RIT0xEX09GRiAtMzAwCiAjZGVmaW5lIE5MODAyMTFfQ1FNX1RYRV9NQVhfSU5UVkwgMTgwMAogZW51bSBubDgwMjExX2lmdHlwZSB7CiAgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQsCi0gTkw4MDIxMV9JRlRZUEVfQURIT0MsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfSUZUWVBFX0FESE9DLAogIE5MODAyMTFfSUZUWVBFX1NUQVRJT04sCiAgTkw4MDIxMV9JRlRZUEVfQVAsCiAgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiwKLSBOTDgwMjExX0lGVFlQRV9XRFMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfSUZUWVBFX1dEUywKICBOTDgwMjExX0lGVFlQRV9NT05JVE9SLAogIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQsCiAgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCwKLSBOTDgwMjExX0lGVFlQRV9QMlBfR08sCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfSUZUWVBFX1AyUF9HTywKICBOTDgwMjExX0lGVFlQRV9QMlBfREVWSUNFLAogIE5VTV9OTDgwMjExX0lGVFlQRVMsCiAgTkw4MDIxMV9JRlRZUEVfTUFYID0gTlVNX05MODAyMTFfSUZUWVBFUyAtIDEKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gbmw4MDIxMV9zdGFfZmxhZ3MgewogIF9fTkw4MDIxMV9TVEFfRkxBR19JTlZBTElELAogIE5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRCwKLSBOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFLAogIE5MODAyMTFfU1RBX0ZMQUdfV01FLAogIE5MODAyMTFfU1RBX0ZMQUdfTUZQLAogIE5MODAyMTFfU1RBX0ZMQUdfQVVUSEVOVElDQVRFRCwKLSBOTDgwMjExX1NUQV9GTEFHX1RETFNfUEVFUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIsCiAgTkw4MDIxMV9TVEFfRkxBR19BU1NPQ0lBVEVELAogIF9fTkw4MDIxMV9TVEFfRkxBR19BRlRFUl9MQVNULAogIE5MODAyMTFfU1RBX0ZMQUdfTUFYID0gX19OTDgwMjExX1NUQV9GTEFHX0FGVEVSX0xBU1QgLSAxCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIE5MODAyMTFfU1RBX0ZMQUdfTUFYX09MRF9BUEkgTkw4MDIxMV9TVEFfRkxBR19URExTX1BFRVIKIHN0cnVjdCBubDgwMjExX3N0YV9mbGFnX3VwZGF0ZSB7CiAgX191MzIgbWFzazsKLSBfX3UzMiBzZXQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHNldDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBlbnVtIG5sODAyMTFfcmF0ZV9pbmZvIHsKICBfX05MODAyMTFfUkFURV9JTkZPX0lOVkFMSUQsCi0gTkw4MDIxMV9SQVRFX0lORk9fQklUUkFURSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9SQVRFX0lORk9fQklUUkFURSwKICBOTDgwMjExX1JBVEVfSU5GT19NQ1MsCiAgTkw4MDIxMV9SQVRFX0lORk9fNDBfTUhaX1dJRFRILAogIE5MODAyMTFfUkFURV9JTkZPX1NIT1JUX0dJLAotIE5MODAyMTFfUkFURV9JTkZPX0JJVFJBVEUzMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9SQVRFX0lORk9fQklUUkFURTMyLAogIE5MODAyMTFfUkFURV9JTkZPX1ZIVF9NQ1MsCiAgTkw4MDIxMV9SQVRFX0lORk9fVkhUX05TUywKICBOTDgwMjExX1JBVEVfSU5GT184MF9NSFpfV0lEVEgsCi0gTkw4MDIxMV9SQVRFX0lORk9fODBQODBfTUhaX1dJRFRILAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX1JBVEVfSU5GT184MFA4MF9NSFpfV0lEVEgsCiAgTkw4MDIxMV9SQVRFX0lORk9fMTYwX01IWl9XSURUSCwKICBfX05MODAyMTFfUkFURV9JTkZPX0FGVEVSX0xBU1QsCiAgTkw4MDIxMV9SQVRFX0lORk9fTUFYID0gX19OTDgwMjExX1JBVEVfSU5GT19BRlRFUl9MQVNUIC0gMQotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSBubDgwMjExX3N0YV9ic3NfcGFyYW0gewogIF9fTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0lOVkFMSUQsCiAgTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0NUU19QUk9ULAotIE5MODAyMTFfU1RBX0JTU19QQVJBTV9TSE9SVF9QUkVBTUJMRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9TVEFfQlNTX1BBUkFNX1NIT1JUX1BSRUFNQkxFLAogIE5MODAyMTFfU1RBX0JTU19QQVJBTV9TSE9SVF9TTE9UX1RJTUUsCiAgTkw4MDIxMV9TVEFfQlNTX1BBUkFNX0RUSU1fUEVSSU9ELAogIE5MODAyMTFfU1RBX0JTU19QQVJBTV9CRUFDT05fSU5URVJWQUwsCi0gX19OTDgwMjExX1NUQV9CU1NfUEFSQU1fQUZURVJfTEFTVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19OTDgwMjExX1NUQV9CU1NfUEFSQU1fQUZURVJfTEFTVCwKICBOTDgwMjExX1NUQV9CU1NfUEFSQU1fTUFYID0gX19OTDgwMjExX1NUQV9CU1NfUEFSQU1fQUZURVJfTEFTVCAtIDEKIH07CiBlbnVtIG5sODAyMTFfc3RhX2luZm8gewotIF9fTkw4MDIxMV9TVEFfSU5GT19JTlZBTElELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX05MODAyMTFfU1RBX0lORk9fSU5WQUxJRCwKICBOTDgwMjExX1NUQV9JTkZPX0lOQUNUSVZFX1RJTUUsCiAgTkw4MDIxMV9TVEFfSU5GT19SWF9CWVRFUywKICBOTDgwMjExX1NUQV9JTkZPX1RYX0JZVEVTLAotIE5MODAyMTFfU1RBX0lORk9fTExJRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9TVEFfSU5GT19MTElELAogIE5MODAyMTFfU1RBX0lORk9fUExJRCwKICBOTDgwMjExX1NUQV9JTkZPX1BMSU5LX1NUQVRFLAogIE5MODAyMTFfU1RBX0lORk9fU0lHTkFMLAotIE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFLAogIE5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUywKICBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMsCiAgTkw4MDIxMV9TVEFfSU5GT19UWF9SRVRSSUVTLAotIE5MODAyMTFfU1RBX0lORk9fVFhfRkFJTEVELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX1NUQV9JTkZPX1RYX0ZBSUxFRCwKICBOTDgwMjExX1NUQV9JTkZPX1NJR05BTF9BVkcsCiAgTkw4MDIxMV9TVEFfSU5GT19SWF9CSVRSQVRFLAogIE5MODAyMTFfU1RBX0lORk9fQlNTX1BBUkFNLAotIE5MODAyMTFfU1RBX0lORk9fQ09OTkVDVEVEX1RJTUUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfU1RBX0lORk9fQ09OTkVDVEVEX1RJTUUsCiAgTkw4MDIxMV9TVEFfSU5GT19TVEFfRkxBR1MsCiAgTkw4MDIxMV9TVEFfSU5GT19CRUFDT05fTE9TUywKICBOTDgwMjExX1NUQV9JTkZPX1RfT0ZGU0VULAotIE5MODAyMTFfU1RBX0lORk9fTE9DQUxfUE0sCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfU1RBX0lORk9fTE9DQUxfUE0sCiAgTkw4MDIxMV9TVEFfSU5GT19QRUVSX1BNLAogIE5MODAyMTFfU1RBX0lORk9fTk9OUEVFUl9QTSwKICBOTDgwMjExX1NUQV9JTkZPX1JYX0JZVEVTNjQsCi0gTkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUzY0LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX1NUQV9JTkZPX1RYX0JZVEVTNjQsCisgTkw4MDIxMV9TVEFfSU5GT19DSEFJTl9TSUdOQUwsCisgTkw4MDIxMV9TVEFfSU5GT19DSEFJTl9TSUdOQUxfQVZHLAogIF9fTkw4MDIxMV9TVEFfSU5GT19BRlRFUl9MQVNULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NUQV9JTkZPX01BWCA9IF9fTkw4MDIxMV9TVEFfSU5GT19BRlRFUl9MQVNUIC0gMQogfTsKIGVudW0gbmw4MDIxMV9tcGF0aF9mbGFncyB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTVBBVEhfRkxBR19BQ1RJVkUgPSAxPDwwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01QQVRIX0ZMQUdfUkVTT0xWSU5HID0gMTw8MSwKICBOTDgwMjExX01QQVRIX0ZMQUdfU05fVkFMSUQgPSAxPDwyLAogIE5MODAyMTFfTVBBVEhfRkxBR19GSVhFRCA9IDE8PDMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTVBBVEhfRkxBR19SRVNPTFZFRCA9IDE8PDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbmw4MDIxMV9tcGF0aF9pbmZvIHsKICBfX05MODAyMTFfTVBBVEhfSU5GT19JTlZBTElELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01QQVRIX0lORk9fRlJBTUVfUUxFTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NUEFUSF9JTkZPX1NOLAogIE5MODAyMTFfTVBBVEhfSU5GT19NRVRSSUMsCiAgTkw4MDIxMV9NUEFUSF9JTkZPX0VYUFRJTUUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTVBBVEhfSU5GT19GTEFHUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NUEFUSF9JTkZPX0RJU0NPVkVSWV9USU1FT1VULAogIE5MODAyMTFfTVBBVEhfSU5GT19ESVNDT1ZFUllfUkVUUklFUywKICBfX05MODAyMTFfTVBBVEhfSU5GT19BRlRFUl9MQVNULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01QQVRIX0lORk9fTUFYID0gX19OTDgwMjExX01QQVRIX0lORk9fQUZURVJfTEFTVCAtIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBubDgwMjExX2JhbmRfYXR0ciB7CiAgX19OTDgwMjExX0JBTkRfQVRUUl9JTlZBTElELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0JBTkRfQVRUUl9GUkVRUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9CQU5EX0FUVFJfUkFURVMsCiAgTkw4MDIxMV9CQU5EX0FUVFJfSFRfTUNTX1NFVCwKICBOTDgwMjExX0JBTkRfQVRUUl9IVF9DQVBBLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0JBTkRfQVRUUl9IVF9BTVBEVV9GQUNUT1IsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQkFORF9BVFRSX0hUX0FNUERVX0RFTlNJVFksCiAgTkw4MDIxMV9CQU5EX0FUVFJfVkhUX01DU19TRVQsCiAgTkw4MDIxMV9CQU5EX0FUVFJfVkhUX0NBUEEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9CQU5EX0FUVFJfQUZURVJfTEFTVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9CQU5EX0FUVFJfTUFYID0gX19OTDgwMjExX0JBTkRfQVRUUl9BRlRFUl9MQVNUIC0gMQogfTsKICNkZWZpbmUgTkw4MDIxMV9CQU5EX0FUVFJfSFRfQ0FQQSBOTDgwMjExX0JBTkRfQVRUUl9IVF9DQVBBCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX2ZyZXF1ZW5jeV9hdHRyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19OTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0lOVkFMSUQsCiAgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9GUkVRLAogIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfRElTQUJMRUQsCisgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT19JUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9QQVNTSVZFX1NDQU4sCi0gTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT19JQlNTLAorIF9fTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT19JQlNTLAogIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfUkFEQVIsCiAgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9NQVhfVFhfUE9XRVIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfREZTX1NUQVRFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0RGU19USU1FLAogIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fSFQ0MF9NSU5VUywKICBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX05PX0hUNDBfUExVUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT184ME1IWiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT18xNjBNSFosCiAgX19OTDgwMjExX0ZSRVFVRU5DWV9BVFRSX0FGVEVSX0xBU1QsCiAgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9NQVggPSBfX05MODAyMTFfRlJFUVVFTkNZX0FUVFJfQUZURVJfTEFTVCAtIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9NQVhfVFhfUE9XRVIgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9NQVhfVFhfUE9XRVIKKyNkZWZpbmUgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9QQVNTSVZFX1NDQU4gTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT19JUgorI2RlZmluZSBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX05PX0lCU1MgTkw4MDIxMV9GUkVRVUVOQ1lfQVRUUl9OT19JUgorI2RlZmluZSBOTDgwMjExX0ZSRVFVRU5DWV9BVFRSX05PX0lSIE5MODAyMTFfRlJFUVVFTkNZX0FUVFJfTk9fSVIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfYml0cmF0ZV9hdHRyIHsKICBfX05MODAyMTFfQklUUkFURV9BVFRSX0lOVkFMSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQklUUkFURV9BVFRSX1JBVEUsCiAgTkw4MDIxMV9CSVRSQVRFX0FUVFJfMkdIWl9TSE9SVFBSRUFNQkxFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX05MODAyMTFfQklUUkFURV9BVFRSX0FGVEVSX0xBU1QsCiAgTkw4MDIxMV9CSVRSQVRFX0FUVFJfTUFYID0gX19OTDgwMjExX0JJVFJBVEVfQVRUUl9BRlRFUl9MQVNUIC0gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFLAogIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSLAogIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfcmVnX3R5cGUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1JFR0RPTV9UWVBFX0NPVU5UUlksCiAgTkw4MDIxMV9SRUdET01fVFlQRV9XT1JMRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQsCiAgTkw4MDIxMV9SRUdET01fVFlQRV9JTlRFUlNFQ1RJT04sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9hdHRyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19OTDgwMjExX1JFR19SVUxFX0FUVFJfSU5WQUxJRCwKICBOTDgwMjExX0FUVFJfUkVHX1JVTEVfRkxBR1MsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX1NUQVJULAogIE5MODAyMTFfQVRUUl9GUkVRX1JBTkdFX0VORCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfTUFYX0JXLAogIE5MODAyMTFfQVRUUl9QT1dFUl9SVUxFX01BWF9BTlRfR0FJTiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX1BPV0VSX1JVTEVfTUFYX0VJUlAsCiAgX19OTDgwMjExX1JFR19SVUxFX0FUVFJfQUZURVJfTEFTVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9SRUdfUlVMRV9BVFRSX01BWCA9IF9fTkw4MDIxMV9SRUdfUlVMRV9BVFRSX0FGVEVSX0xBU1QgLSAxCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmw4MDIxMV9zY2hlZF9zY2FuX21hdGNoX2F0dHIgewogIF9fTkw4MDIxMV9TQ0hFRF9TQ0FOX01BVENIX0FUVFJfSU5WQUxJRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TQ0hFRF9TQ0FOX01BVENIX0FUVFJfU1NJRCwKICBOTDgwMjExX1NDSEVEX1NDQU5fTUFUQ0hfQVRUUl9SU1NJLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX05MODAyMTFfU0NIRURfU0NBTl9NQVRDSF9BVFRSX0FGVEVSX0xBU1QsCiAgTkw4MDIxMV9TQ0hFRF9TQ0FOX01BVENIX0FUVFJfTUFYID0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19OTDgwMjExX1NDSEVEX1NDQU5fTUFUQ0hfQVRUUl9BRlRFUl9MQVNUIC0gMQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9TQ0hFRF9TQ0FOX01BVENIX1NTSUQgTkw4MDIxMV9TQ0hFRF9TQ0FOX01BVENIX0FUVFJfU1NJRAogZW51bSBubDgwMjExX3JlZ19ydWxlX2ZsYWdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9SUkZfTk9fT0ZETSA9IDE8PDAsCiAgTkw4MDIxMV9SUkZfTk9fQ0NLID0gMTw8MSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9SUkZfTk9fSU5ET09SID0gMTw8MiwKICBOTDgwMjExX1JSRl9OT19PVVRET09SID0gMTw8MywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9SUkZfREZTID0gMTw8NCwKICBOTDgwMjExX1JSRl9QVFBfT05MWSA9IDE8PDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUlJGX1BUTVBfT05MWSA9IDE8PDYsCi0gTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOID0gMTw8NywKLSBOTDgwMjExX1JSRl9OT19JQlNTID0gMTw8OCwKLX07CisgTkw4MDIxMV9SUkZfTk9fSVIgPSAxPDw3LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX05MODAyMTFfUlJGX05PX0lCU1MgPSAxPDw4LAorfTsKKyNkZWZpbmUgTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIE5MODAyMTFfUlJGX05PX0lSCisjZGVmaW5lIE5MODAyMTFfUlJGX05PX0lCU1MgTkw4MDIxMV9SUkZfTk9fSVIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MODAyMTFfUlJGX05PX0lSIE5MODAyMTFfUlJGX05PX0lSCisjZGVmaW5lIE5MODAyMTFfUlJGX05PX0lSX0FMTCAoTkw4MDIxMV9SUkZfTk9fSVIgfCBfX05MODAyMTFfUlJGX05PX0lCU1MpCiBlbnVtIG5sODAyMTFfZGZzX3JlZ2lvbnMgewogIE5MODAyMTFfREZTX1VOU0VUID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9ERlNfRkNDID0gMSwKICBOTDgwMjExX0RGU19FVFNJID0gMiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9ERlNfSlAgPSAzLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfdXNlcl9yZWdfaGludF90eXBlIHsKICBOTDgwMjExX1VTRVJfUkVHX0hJTlRfVVNFUiA9IDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfVVNFUl9SRUdfSElOVF9DRUxMX0JBU0UgPSAxLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfc3VydmV5X2luZm8gewogIF9fTkw4MDIxMV9TVVJWRVlfSU5GT19JTlZBTElELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NVUlZFWV9JTkZPX0ZSRVFVRU5DWSwKICBOTDgwMjExX1NVUlZFWV9JTkZPX05PSVNFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1NVUlZFWV9JTkZPX0lOX1VTRSwKICBOTDgwMjExX1NVUlZFWV9JTkZPX0NIQU5ORUxfVElNRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfQlVTWSwKICBOTDgwMjExX1NVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9FWFRfQlVTWSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfUlgsCiAgTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfVFgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fTkw4MDIxMV9TVVJWRVlfSU5GT19BRlRFUl9MQVNULAogIE5MODAyMTFfU1VSVkVZX0lORk9fTUFYID0gX19OTDgwMjExX1NVUlZFWV9JTkZPX0FGVEVSX0xBU1QgLSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbmw4MDIxMV9tbnRyX2ZsYWdzIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19OTDgwMjExX01OVFJfRkxBR19JTlZBTElELAogIE5MODAyMTFfTU5UUl9GTEFHX0ZDU0ZBSUwsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTU5UUl9GTEFHX1BMQ1BGQUlMLAogIE5MODAyMTFfTU5UUl9GTEFHX0NPTlRST0wsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTU5UUl9GTEFHX09USEVSX0JTUywKICBOTDgwMjExX01OVFJfRkxBR19DT09LX0ZSQU1FUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9NTlRSX0ZMQUdfQUNUSVZFLAogIF9fTkw4MDIxMV9NTlRSX0ZMQUdfQUZURVJfTEFTVCwKICBOTDgwMjExX01OVFJfRkxBR19NQVggPSBfX05MODAyMTFfTU5UUl9GTEFHX0FGVEVSX0xBU1QgLSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfbWVzaF9wb3dlcl9tb2RlIHsKICBOTDgwMjExX01FU0hfUE9XRVJfVU5LTk9XTiwKICBOTDgwMjExX01FU0hfUE9XRVJfQUNUSVZFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hfUE9XRVJfTElHSFRfU0xFRVAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTUVTSF9QT1dFUl9ERUVQX1NMRUVQLAogIF9fTkw4MDIxMV9NRVNIX1BPV0VSX0FGVEVSX0xBU1QsCiAgTkw4MDIxMV9NRVNIX1BPV0VSX01BWCA9IF9fTkw4MDIxMV9NRVNIX1BPV0VSX0FGVEVSX0xBU1QgLSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfbWVzaGNvbmZfcGFyYW1zIHsKICBfX05MODAyMTFfTUVTSENPTkZfSU5WQUxJRCwKICBOTDgwMjExX01FU0hDT05GX1JFVFJZX1RJTUVPVVQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTUVTSENPTkZfQ09ORklSTV9USU1FT1VULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hDT05GX0hPTERJTkdfVElNRU9VVCwKICBOTDgwMjExX01FU0hDT05GX01BWF9QRUVSX0xJTktTLAogIE5MODAyMTFfTUVTSENPTkZfTUFYX1JFVFJJRVMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTUVTSENPTkZfVFRMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hDT05GX0FVVE9fT1BFTl9QTElOS1MsCiAgTkw4MDIxMV9NRVNIQ09ORl9IV01QX01BWF9QUkVRX1JFVFJJRVMsCiAgTkw4MDIxMV9NRVNIQ09ORl9QQVRIX1JFRlJFU0hfVElNRSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NRVNIQ09ORl9NSU5fRElTQ09WRVJZX1RJTUVPVVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTUVTSENPTkZfSFdNUF9BQ1RJVkVfUEFUSF9USU1FT1VULAogIE5MODAyMTFfTUVTSENPTkZfSFdNUF9QUkVRX01JTl9JTlRFUlZBTCwKICBOTDgwMjExX01FU0hDT05GX0hXTVBfTkVUX0RJQU1fVFJWU19USU1FLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hDT05GX0hXTVBfUk9PVE1PREUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTUVTSENPTkZfRUxFTUVOVF9UVEwsCiAgTkw4MDIxMV9NRVNIQ09ORl9IV01QX1JBTk5fSU5URVJWQUwsCiAgTkw4MDIxMV9NRVNIQ09ORl9HQVRFX0FOTk9VTkNFTUVOVFMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTUVTSENPTkZfSFdNUF9QRVJSX01JTl9JTlRFUlZBTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NRVNIQ09ORl9GT1JXQVJESU5HLAogIE5MODAyMTFfTUVTSENPTkZfUlNTSV9USFJFU0hPTEQsCiAgTkw4MDIxMV9NRVNIQ09ORl9TWU5DX09GRlNFVF9NQVhfTkVJR0hCT1IsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfTUVTSENPTkZfSFRfT1BNT0RFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hDT05GX0hXTVBfUEFUSF9UT19ST09UX1RJTUVPVVQsCiAgTkw4MDIxMV9NRVNIQ09ORl9IV01QX1JPT1RfSU5URVJWQUwsCiAgTkw4MDIxMV9NRVNIQ09ORl9IV01QX0NPTkZJUk1BVElPTl9JTlRFUlZBTCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9NRVNIQ09ORl9QT1dFUl9NT0RFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hDT05GX0FXQUtFX1dJTkRPVywKKyBOTDgwMjExX01FU0hDT05GX1BMSU5LX1RJTUVPVVQsCiAgX19OTDgwMjExX01FU0hDT05GX0FUVFJfQUZURVJfTEFTVCwKICBOTDgwMjExX01FU0hDT05GX0FUVFJfTUFYID0gX19OTDgwMjExX01FU0hDT05GX0FUVFJfQUZURVJfTEFTVCAtIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC03ODMsNTMgKzgyOCw2MyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX01FU0hfU0VUVVBfRU5BQkxFX1ZFTkRPUl9TWU5DLAogIE5MODAyMTFfTUVTSF9TRVRVUF9VU0VSU1BBQ0VfTVBNLAorIE5MODAyMTFfTUVTSF9TRVRVUF9BVVRIX1BST1RPQ09MLAogIF9fTkw4MDIxMV9NRVNIX1NFVFVQX0FUVFJfQUZURVJfTEFTVCwKLSBOTDgwMjExX01FU0hfU0VUVVBfQVRUUl9NQVggPSBfX05MODAyMTFfTUVTSF9TRVRVUF9BVFRSX0FGVEVSX0xBU1QgLSAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfTUVTSF9TRVRVUF9BVFRSX01BWCA9IF9fTkw4MDIxMV9NRVNIX1NFVFVQX0FUVFJfQUZURVJfTEFTVCAtIDEKIH07CiBlbnVtIG5sODAyMTFfdHhxX2F0dHIgewogIF9fTkw4MDIxMV9UWFFfQVRUUl9JTlZBTElELAotIE5MODAyMTFfVFhRX0FUVFJfQUMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfVFhRX0FUVFJfQUMsCiAgTkw4MDIxMV9UWFFfQVRUUl9UWE9QLAogIE5MODAyMTFfVFhRX0FUVFJfQ1dNSU4sCiAgTkw4MDIxMV9UWFFfQVRUUl9DV01BWCwKLSBOTDgwMjExX1RYUV9BVFRSX0FJRlMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfVFhRX0FUVFJfQUlGUywKICBfX05MODAyMTFfVFhRX0FUVFJfQUZURVJfTEFTVCwKICBOTDgwMjExX1RYUV9BVFRSX01BWCA9IF9fTkw4MDIxMV9UWFFfQVRUUl9BRlRFUl9MQVNUIC0gMQogfTsKLWVudW0gbmw4MDIxMV9hYyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBubDgwMjExX2FjIHsKICBOTDgwMjExX0FDX1ZPLAogIE5MODAyMTFfQUNfVkksCiAgTkw4MDIxMV9BQ19CRSwKLSBOTDgwMjExX0FDX0JLLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0FDX0JLLAogIE5MODAyMTFfTlVNX0FDUwogfTsKICNkZWZpbmUgTkw4MDIxMV9UWFFfQVRUUl9RVUVVRSBOTDgwMjExX1RYUV9BVFRSX0FDCi0jZGVmaW5lIE5MODAyMTFfVFhRX1FfVk8gTkw4MDIxMV9BQ19WTwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkw4MDIxMV9UWFFfUV9WTyBOTDgwMjExX0FDX1ZPCiAjZGVmaW5lIE5MODAyMTFfVFhRX1FfVkkgTkw4MDIxMV9BQ19WSQogI2RlZmluZSBOTDgwMjExX1RYUV9RX0JFIE5MODAyMTFfQUNfQkUKICNkZWZpbmUgTkw4MDIxMV9UWFFfUV9CSyBOTDgwMjExX0FDX0JLCi1lbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIHsKICBOTDgwMjExX0NIQU5fTk9fSFQsCiAgTkw4MDIxMV9DSEFOX0hUMjAsCiAgTkw4MDIxMV9DSEFOX0hUNDBNSU5VUywKLSBOTDgwMjExX0NIQU5fSFQ0MFBMVVMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DSEFOX0hUNDBQTFVTCiB9OwogZW51bSBubDgwMjExX2NoYW5fd2lkdGggewogIE5MODAyMTFfQ0hBTl9XSURUSF8yMF9OT0hULAotIE5MODAyMTFfQ0hBTl9XSURUSF8yMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9DSEFOX1dJRFRIXzIwLAogIE5MODAyMTFfQ0hBTl9XSURUSF80MCwKICBOTDgwMjExX0NIQU5fV0lEVEhfODAsCiAgTkw4MDIxMV9DSEFOX1dJRFRIXzgwUDgwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0NIQU5fV0lEVEhfMTYwLAorIE5MODAyMTFfQ0hBTl9XSURUSF81LAorIE5MODAyMTFfQ0hBTl9XSURUSF8xMCwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBubDgwMjExX2Jzc19zY2FuX3dpZHRoIHsKKyBOTDgwMjExX0JTU19DSEFOX1dJRFRIXzIwLAorIE5MODAyMTFfQlNTX0NIQU5fV0lEVEhfMTAsCisgTkw4MDIxMV9CU1NfQ0hBTl9XSURUSF81LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfYnNzIHsKQEAgLTg0OCwzMDYgKzkwMywzNDYgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9CU1NfU0VFTl9NU19BR08sCiAgTkw4MDIxMV9CU1NfQkVBQ09OX0lFUywKKyBOTDgwMjExX0JTU19DSEFOX1dJRFRILAogIF9fTkw4MDIxMV9CU1NfQUZURVJfTEFTVCwKLSBOTDgwMjExX0JTU19NQVggPSBfX05MODAyMTFfQlNTX0FGVEVSX0xBU1QgLSAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQlNTX01BWCA9IF9fTkw4MDIxMV9CU1NfQUZURVJfTEFTVCAtIDEKIH07CiBlbnVtIG5sODAyMTFfYnNzX3N0YXR1cyB7CiAgTkw4MDIxMV9CU1NfU1RBVFVTX0FVVEhFTlRJQ0FURUQsCi0gTkw4MDIxMV9CU1NfU1RBVFVTX0FTU09DSUFURUQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQlNTX1NUQVRVU19BU1NPQ0lBVEVELAogIE5MODAyMTFfQlNTX1NUQVRVU19JQlNTX0pPSU5FRCwKIH07CiBlbnVtIG5sODAyMTFfYXV0aF90eXBlIHsKLSBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNLAogIE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWSwKICBOTDgwMjExX0FVVEhUWVBFX0ZULAogIE5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVAsCi0gTkw4MDIxMV9BVVRIVFlQRV9TQUUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfQVVUSFRZUEVfU0FFLAogIF9fTkw4MDIxMV9BVVRIVFlQRV9OVU0sCiAgTkw4MDIxMV9BVVRIVFlQRV9NQVggPSBfX05MODAyMTFfQVVUSFRZUEVfTlVNIC0gMSwKICBOTDgwMjExX0FVVEhUWVBFX0FVVE9NQVRJQwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSBubDgwMjExX2tleV90eXBlIHsKICBOTDgwMjExX0tFWVRZUEVfR1JPVVAsCiAgTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLAotIE5MODAyMTFfS0VZVFlQRV9QRUVSS0VZLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0tFWVRZUEVfUEVFUktFWSwKICBOVU1fTkw4MDIxMV9LRVlUWVBFUwogfTsKIGVudW0gbmw4MDIxMV9tZnAgewotIE5MODAyMTFfTUZQX05PLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX01GUF9OTywKICBOTDgwMjExX01GUF9SRVFVSVJFRCwKIH07CiBlbnVtIG5sODAyMTFfd3BhX3ZlcnNpb25zIHsKLSBOTDgwMjExX1dQQV9WRVJTSU9OXzEgPSAxIDw8IDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5MODAyMTFfV1BBX1ZFUlNJT05fMSA9IDEgPDwgMCwKICBOTDgwMjExX1dQQV9WRVJTSU9OXzIgPSAxIDw8IDEsCiB9OwogZW51bSBubDgwMjExX2tleV9kZWZhdWx0X3R5cGVzIHsKLSBfX05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRV9JTlZBTElELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRV9JTlZBTElELAogIE5MODAyMTFfS0VZX0RFRkFVTFRfVFlQRV9VTklDQVNULAogIE5MODAyMTFfS0VZX0RFRkFVTFRfVFlQRV9NVUxUSUNBU1QsCiAgTlVNX05MODAyMTFfS0VZX0RFRkFVTFRfVFlQRVMKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIGVudW0gbmw4MDIxMV9rZXlfYXR0cmlidXRlcyB7CiAgX19OTDgwMjExX0tFWV9JTlZBTElELAogIE5MODAyMTFfS0VZX0RBVEEsCi0gTkw4MDIxMV9LRVlfSURYLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0tFWV9JRFgsCiAgTkw4MDIxMV9LRVlfQ0lQSEVSLAogIE5MODAyMTFfS0VZX1NFUSwKICBOTDgwMjExX0tFWV9ERUZBVUxULAotIE5MODAyMTFfS0VZX0RFRkFVTFRfTUdNVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTkw4MDIxMV9LRVlfREVGQVVMVF9NR01ULAogIE5MODAyMTFfS0VZX1RZUEUsCiAgTkw4MDIxMV9LRVlfREVGQVVMVF9UWVBFUywKICBfX05MODAyMTFfS0VZX0FGVEVSX0xBU1QsCi0gTkw4MDIxMV9LRVlfTUFYID0gX19OTDgwMjExX0tFWV9BRlRFUl9MQVNUIC0gMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0tFWV9NQVggPSBfX05MODAyMTFfS0VZX0FGVEVSX0xBU1QgLSAxCiB9OwogZW51bSBubDgwMjExX3R4X3JhdGVfYXR0cmlidXRlcyB7CiAgX19OTDgwMjExX1RYUkFURV9JTlZBTElELAotIE5MODAyMTFfVFhSQVRFX0xFR0FDWSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gTkw4MDIxMV9UWFJBVEVfTUNTLAorIE5MODAyMTFfVFhSQVRFX0xFR0FDWSwKKyBOTDgwMjExX1RYUkFURV9IVCwKKyBOTDgwMjExX1RYUkFURV9WSFQsCiAgX19OTDgwMjExX1RYUkFURV9BRlRFUl9MQVNULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1RYUkFURV9NQVggPSBfX05MODAyMTFfVFhSQVRFX0FGVEVSX0xBU1QgLSAxCiB9OworI2RlZmluZSBOTDgwMjExX1RYUkFURV9NQ1MgTkw4MDIxMV9UWFJBVEVfSFQKKyNkZWZpbmUgTkw4MDIxMV9WSFRfTlNTX01BWCA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IG5sODAyMTFfdHhyYXRlX3ZodCB7CisgX191MTYgbWNzW05MODAyMTFfVkhUX05TU19NQVhdOworfTsKIGVudW0gbmw4MDIxMV9iYW5kIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9CQU5EXzJHSFosCiAgTkw4MDIxMV9CQU5EXzVHSFosCiAgTkw4MDIxMV9CQU5EXzYwR0haLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX3BzX3N0YXRlIHsKICBOTDgwMjExX1BTX0RJU0FCTEVELAogIE5MODAyMTFfUFNfRU5BQkxFRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbmw4MDIxMV9hdHRyX2NxbSB7CiAgX19OTDgwMjExX0FUVFJfQ1FNX0lOVkFMSUQsCiAgTkw4MDIxMV9BVFRSX0NRTV9SU1NJX1RIT0xELAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0FUVFJfQ1FNX1JTU0lfSFlTVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9BVFRSX0NRTV9SU1NJX1RIUkVTSE9MRF9FVkVOVCwKICBOTDgwMjExX0FUVFJfQ1FNX1BLVF9MT1NTX0VWRU5ULAogIE5MODAyMTFfQVRUUl9DUU1fVFhFX1JBVEUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9DUU1fVFhFX1BLVFMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfQVRUUl9DUU1fVFhFX0lOVFZMLAogIF9fTkw4MDIxMV9BVFRSX0NRTV9BRlRFUl9MQVNULAogIE5MODAyMTFfQVRUUl9DUU1fTUFYID0gX19OTDgwMjExX0FUVFJfQ1FNX0FGVEVSX0xBU1QgLSAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfY3FtX3Jzc2lfdGhyZXNob2xkX2V2ZW50IHsKICBOTDgwMjExX0NRTV9SU1NJX1RIUkVTSE9MRF9FVkVOVF9MT1csCiAgTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfSElHSCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9DUU1fUlNTSV9CRUFDT05fTE9TU19FVkVOVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBubDgwMjExX3R4X3Bvd2VyX3NldHRpbmcgewogIE5MODAyMTFfVFhfUE9XRVJfQVVUT01BVElDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1RYX1BPV0VSX0xJTUlURUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfVFhfUE9XRVJfRklYRUQsCiB9OwotZW51bSBubDgwMjExX3dvd2xhbl9wYWNrZXRfcGF0dGVybl9hdHRyIHsKK2VudW0gbmw4MDIxMV9wYWNrZXRfcGF0dGVybl9hdHRyIHsKKyBfX05MODAyMTFfUEtUUEFUX0lOVkFMSUQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fTkw4MDIxMV9XT1dMQU5fUEtUUEFUX0lOVkFMSUQsCi0gTkw4MDIxMV9XT1dMQU5fUEtUUEFUX01BU0ssCi0gTkw4MDIxMV9XT1dMQU5fUEtUUEFUX1BBVFRFUk4sCi0gTkw4MDIxMV9XT1dMQU5fUEtUUEFUX09GRlNFVCwKKyBOTDgwMjExX1BLVFBBVF9NQVNLLAorIE5MODAyMTFfUEtUUEFUX1BBVFRFUk4sCisgTkw4MDIxMV9QS1RQQVRfT0ZGU0VULAorIE5VTV9OTDgwMjExX1BLVFBBVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gTlVNX05MODAyMTFfV09XTEFOX1BLVFBBVCwKLSBNQVhfTkw4MDIxMV9XT1dMQU5fUEtUUEFUID0gTlVNX05MODAyMTFfV09XTEFOX1BLVFBBVCAtIDEsCisgTUFYX05MODAyMTFfUEtUUEFUID0gTlVNX05MODAyMTFfUEtUUEFUIC0gMSwKIH07Ci1zdHJ1Y3Qgbmw4MDIxMV93b3dsYW5fcGF0dGVybl9zdXBwb3J0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgbmw4MDIxMV9wYXR0ZXJuX3N1cHBvcnQgewogIF9fdTMyIG1heF9wYXR0ZXJuczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWluX3BhdHRlcm5fbGVuOwogIF9fdTMyIG1heF9wYXR0ZXJuX2xlbjsKICBfX3UzMiBtYXhfcGt0X29mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OTDgwMjExX1dPV0xBTl9QS1RQQVRfSU5WQUxJRCBfX05MODAyMTFfUEtUUEFUX0lOVkFMSUQKKyNkZWZpbmUgTkw4MDIxMV9XT1dMQU5fUEtUUEFUX01BU0sgTkw4MDIxMV9QS1RQQVRfTUFTSworI2RlZmluZSBOTDgwMjExX1dPV0xBTl9QS1RQQVRfUEFUVEVSTiBOTDgwMjExX1BLVFBBVF9QQVRURVJOCisjZGVmaW5lIE5MODAyMTFfV09XTEFOX1BLVFBBVF9PRkZTRVQgTkw4MDIxMV9QS1RQQVRfT0ZGU0VUCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOVU1fTkw4MDIxMV9XT1dMQU5fUEtUUEFUIE5VTV9OTDgwMjExX1BLVFBBVAorI2RlZmluZSBNQVhfTkw4MDIxMV9XT1dMQU5fUEtUUEFUIE1BWF9OTDgwMjExX1BLVFBBVAorI2RlZmluZSBubDgwMjExX3dvd2xhbl9wYXR0ZXJuX3N1cHBvcnQgbmw4MDIxMV9wYXR0ZXJuX3N1cHBvcnQKIGVudW0gbmw4MDIxMV93b3dsYW5fdHJpZ2dlcnMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX05MODAyMTFfV09XTEFOX1RSSUdfSU5WQUxJRCwKICBOTDgwMjExX1dPV0xBTl9UUklHX0FOWSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19ESVNDT05ORUNULAogIE5MODAyMTFfV09XTEFOX1RSSUdfTUFHSUNfUEtULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UUklHX1BLVF9QQVRURVJOLAogIE5MODAyMTFfV09XTEFOX1RSSUdfR1RLX1JFS0VZX1NVUFBPUlRFRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19HVEtfUkVLRVlfRkFJTFVSRSwKICBOTDgwMjExX1dPV0xBTl9UUklHX0VBUF9JREVOVF9SRVFVRVNULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UUklHXzRXQVlfSEFORFNIQUtFLAogIE5MODAyMTFfV09XTEFOX1RSSUdfUkZLSUxMX1JFTEVBU0UsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RSSUdfV0FLRVVQX1BLVF84MDIxMSwKICBOTDgwMjExX1dPV0xBTl9UUklHX1dBS0VVUF9QS1RfODAyMTFfTEVOLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UUklHX1dBS0VVUF9QS1RfODAyMywKICBOTDgwMjExX1dPV0xBTl9UUklHX1dBS0VVUF9QS1RfODAyM19MRU4sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RSSUdfVENQX0NPTk5FQ1RJT04sCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19XQUtFVVBfVENQX01BVENILAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1dPV0xBTl9UUklHX1dBS0VVUF9UQ1BfQ09OTkxPU1QsCiAgTkw4MDIxMV9XT1dMQU5fVFJJR19XQUtFVVBfVENQX05PTU9SRVRPS0VOUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTlVNX05MODAyMTFfV09XTEFOX1RSSUcsCiAgTUFYX05MODAyMTFfV09XTEFOX1RSSUcgPSBOVU1fTkw4MDIxMV9XT1dMQU5fVFJJRyAtIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IG5sODAyMTFfd293bGFuX3RjcF9kYXRhX3NlcSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHN0YXJ0LCBvZmZzZXQsIGxlbjsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5sODAyMTFfd293bGFuX3RjcF9kYXRhX3Rva2VuIHsKICBfX3UzMiBvZmZzZXQsIGxlbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCB0b2tlbl9zdHJlYW1bXTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5sODAyMTFfd293bGFuX3RjcF9kYXRhX3Rva2VuX2ZlYXR1cmUgewogIF9fdTMyIG1pbl9sZW4sIG1heF9sZW4sIGJ1ZnNpemU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbmw4MDIxMV93b3dsYW5fdGNwX2F0dHJzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19OTDgwMjExX1dPV0xBTl9UQ1BfSU5WQUxJRCwKICBOTDgwMjExX1dPV0xBTl9UQ1BfU1JDX0lQVjQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfV09XTEFOX1RDUF9EU1RfSVBWNCwKICBOTDgwMjExX1dPV0xBTl9UQ1BfRFNUX01BQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVENQX1NSQ19QT1JULAogIE5MODAyMTFfV09XTEFOX1RDUF9EU1RfUE9SVCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVENQX0RBVEFfUEFZTE9BRCwKICBOTDgwMjExX1dPV0xBTl9UQ1BfREFUQV9QQVlMT0FEX1NFUSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVENQX0RBVEFfUEFZTE9BRF9UT0tFTiwKICBOTDgwMjExX1dPV0xBTl9UQ1BfREFUQV9JTlRFUlZBTCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9XT1dMQU5fVENQX1dBS0VfUEFZTE9BRCwKICBOTDgwMjExX1dPV0xBTl9UQ1BfV0FLRV9NQVNLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOVU1fTkw4MDIxMV9XT1dMQU5fVENQLAogIE1BWF9OTDgwMjExX1dPV0xBTl9UQ1AgPSBOVU1fTkw4MDIxMV9XT1dMQU5fVENQIC0gMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CitzdHJ1Y3Qgbmw4MDIxMV9jb2FsZXNjZV9ydWxlX3N1cHBvcnQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBtYXhfcnVsZXM7Cisgc3RydWN0IG5sODAyMTFfcGF0dGVybl9zdXBwb3J0IHBhdDsKKyBfX3UzMiBtYXhfZGVsYXk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gbmw4MDIxMV9hdHRyX2NvYWxlc2NlX3J1bGUgeworIF9fTkw4MDIxMV9DT0FMRVNDRV9SVUxFX0lOVkFMSUQsCisgTkw4MDIxMV9BVFRSX0NPQUxFU0NFX1JVTEVfREVMQVksCisgTkw4MDIxMV9BVFRSX0NPQUxFU0NFX1JVTEVfQ09ORElUSU9OLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOTDgwMjExX0FUVFJfQ09BTEVTQ0VfUlVMRV9QS1RfUEFUVEVSTiwKKyBOVU1fTkw4MDIxMV9BVFRSX0NPQUxFU0NFX1JVTEUsCisgTkw4MDIxMV9BVFRSX0NPQUxFU0NFX1JVTEVfTUFYID0gTlVNX05MODAyMTFfQVRUUl9DT0FMRVNDRV9SVUxFIC0gMQorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG5sODAyMTFfY29hbGVzY2VfY29uZGl0aW9uIHsKKyBOTDgwMjExX0NPQUxFU0NFX0NPTkRJVElPTl9NQVRDSCwKKyBOTDgwMjExX0NPQUxFU0NFX0NPTkRJVElPTl9OT19NQVRDSAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfaWZhY2VfbGltaXRfYXR0cnMgewogIE5MODAyMTFfSUZBQ0VfTElNSVRfVU5TUEVDLAogIE5MODAyMTFfSUZBQ0VfTElNSVRfTUFYLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0lGQUNFX0xJTUlUX1RZUEVTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOVU1fTkw4MDIxMV9JRkFDRV9MSU1JVCwKICBNQVhfTkw4MDIxMV9JRkFDRV9MSU1JVCA9IE5VTV9OTDgwMjExX0lGQUNFX0xJTUlUIC0gMQogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG5sODAyMTFfaWZfY29tYmluYXRpb25fYXR0cnMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0lGQUNFX0NPTUJfVU5TUEVDLAogIE5MODAyMTFfSUZBQ0VfQ09NQl9MSU1JVFMsCiAgTkw4MDIxMV9JRkFDRV9DT01CX01BWE5VTSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9JRkFDRV9DT01CX1NUQV9BUF9CSV9NQVRDSCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9JRkFDRV9DT01CX05VTV9DSEFOTkVMUywKICBOTDgwMjExX0lGQUNFX0NPTUJfUkFEQVJfREVURUNUX1dJRFRIUywKICBOVU1fTkw4MDIxMV9JRkFDRV9DT01CLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNQVhfTkw4MDIxMV9JRkFDRV9DT01CID0gTlVNX05MODAyMTFfSUZBQ0VfQ09NQiAtIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBubDgwMjExX3BsaW5rX3N0YXRlIHsKICBOTDgwMjExX1BMSU5LX0xJU1RFTiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9QTElOS19PUE5fU05ULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1BMSU5LX09QTl9SQ1ZELAogIE5MODAyMTFfUExJTktfQ05GX1JDVkQsCiAgTkw4MDIxMV9QTElOS19FU1RBQiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9QTElOS19IT0xESU5HLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX1BMSU5LX0JMT0NLRUQsCiAgTlVNX05MODAyMTFfUExJTktfU1RBVEVTLAogIE1BWF9OTDgwMjExX1BMSU5LX1NUQVRFUyA9IE5VTV9OTDgwMjExX1BMSU5LX1NUQVRFUyAtIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gcGxpbmtfYWN0aW9ucyB7CiAgTkw4MDIxMV9QTElOS19BQ1RJT05fTk9fQUNUSU9OLAogIE5MODAyMTFfUExJTktfQUNUSU9OX09QRU4sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUExJTktfQUNUSU9OX0JMT0NLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOVU1fTkw4MDIxMV9QTElOS19BQ1RJT05TLAogfTsKICNkZWZpbmUgTkw4MDIxMV9LQ0tfTEVOIDE2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDgwMjExX0tFS19MRU4gMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MODAyMTFfUkVQTEFZX0NUUl9MRU4gOAogZW51bSBubDgwMjExX3Jla2V5X2RhdGEgewogIF9fTkw4MDIxMV9SRUtFWV9EQVRBX0lOVkFMSUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUkVLRVlfREFUQV9LRUssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUkVLRVlfREFUQV9LQ0ssCiAgTkw4MDIxMV9SRUtFWV9EQVRBX1JFUExBWV9DVFIsCiAgTlVNX05MODAyMTFfUkVLRVlfREFUQSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTUFYX05MODAyMTFfUkVLRVlfREFUQSA9IE5VTV9OTDgwMjExX1JFS0VZX0RBVEEgLSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbmw4MDIxMV9oaWRkZW5fc3NpZCB7CiAgTkw4MDIxMV9ISURERU5fU1NJRF9OT1RfSU5fVVNFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0hJRERFTl9TU0lEX1pFUk9fTEVOLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0hJRERFTl9TU0lEX1pFUk9fQ09OVEVOVFMKIH07CiBlbnVtIG5sODAyMTFfc3RhX3dtZV9hdHRyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19OTDgwMjExX1NUQV9XTUVfSU5WQUxJRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9TVEFfV01FX1VBUFNEX1FVRVVFUywKICBOTDgwMjExX1NUQV9XTUVfTUFYX1NQLAogIF9fTkw4MDIxMV9TVEFfV01FX0FGVEVSX0xBU1QsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfU1RBX1dNRV9NQVggPSBfX05MODAyMTFfU1RBX1dNRV9BRlRFUl9MQVNUIC0gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIG5sODAyMTFfcG1rc2FfY2FuZGlkYXRlX2F0dHIgewogIF9fTkw4MDIxMV9QTUtTQV9DQU5ESURBVEVfSU5WQUxJRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9QTUtTQV9DQU5ESURBVEVfSU5ERVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfUE1LU0FfQ0FORElEQVRFX0JTU0lELAogIE5MODAyMTFfUE1LU0FfQ0FORElEQVRFX1BSRUFVVEgsCiAgTlVNX05MODAyMTFfUE1LU0FfQ0FORElEQVRFLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNQVhfTkw4MDIxMV9QTUtTQV9DQU5ESURBVEUgPSBOVU1fTkw4MDIxMV9QTUtTQV9DQU5ESURBVEUgLSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gbmw4MDIxMV90ZGxzX29wZXJhdGlvbiB7CiAgTkw4MDIxMV9URExTX0RJU0NPVkVSWV9SRVEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfVERMU19TRVRVUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9URExTX1RFQVJET1dOLAogIE5MODAyMTFfVERMU19FTkFCTEVfTElOSywKICBOTDgwMjExX1RETFNfRElTQUJMRV9MSU5LLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBubDgwMjExX2ZlYXR1cmVfZmxhZ3MgewogIE5MODAyMTFfRkVBVFVSRV9TS19UWF9TVEFUVVMgPSAxIDw8IDAsCiAgTkw4MDIxMV9GRUFUVVJFX0hUX0lCU1MgPSAxIDw8IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRkVBVFVSRV9JTkFDVElWSVRZX1RJTUVSID0gMSA8PCAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0ZFQVRVUkVfQ0VMTF9CQVNFX1JFR19ISU5UUyA9IDEgPDwgMywKICBOTDgwMjExX0ZFQVRVUkVfUDJQX0RFVklDRV9ORUVEU19DSEFOTkVMID0gMSA8PCA0LAogIE5MODAyMTFfRkVBVFVSRV9TQUUgPSAxIDw8IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5MODAyMTFfRkVBVFVSRV9MT1dfUFJJT1JJVFlfU0NBTiA9IDEgPDwgNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GRUFUVVJFX1NDQU5fRkxVU0ggPSAxIDw8IDcsCiAgTkw4MDIxMV9GRUFUVVJFX0FQX1NDQU4gPSAxIDw8IDgsCiAgTkw4MDIxMV9GRUFUVVJFX1ZJRl9UWFBPV0VSID0gMSA8PCA5LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0ZFQVRVUkVfTkVFRF9PQlNTX1NDQU4gPSAxIDw8IDEwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBOTDgwMjExX0ZFQVRVUkVfUDJQX0dPX0NUV0lOID0gMSA8PCAxMSwKICBOTDgwMjExX0ZFQVRVUkVfUDJQX0dPX09QUFBTID0gMSA8PCAxMiwKICBOTDgwMjExX0ZFQVRVUkVfQURWRVJUSVNFX0NIQU5fTElNSVRTID0gMSA8PCAxNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GRUFUVVJFX0ZVTExfQVBfQ0xJRU5UX1NUQVRFID0gMSA8PCAxNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkw4MDIxMV9GRUFUVVJFX1VTRVJTUEFDRV9NUE0gPSAxIDw8IDE2LAorIE5MODAyMTFfRkVBVFVSRV9BQ1RJVkVfTU9OSVRPUiA9IDEgPDwgMTcsCiB9OwogZW51bSBubDgwMjExX3Byb2JlX3Jlc3Bfb2ZmbG9hZF9zdXBwb3J0X2F0dHIgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTEyMDEsNCArMTI5NiwxNCBAQAogfTsKICNkZWZpbmUgTkw4MDIxMV9DUklUX1BST1RPX01BWF9EVVJBVElPTiA1MDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBubDgwMjExX3J4bWdtdF9mbGFncyB7CisgTkw4MDIxMV9SWE1HTVRfRkxBR19BTlNXRVJFRCA9IDEgPDwgMCwKK307CisjZGVmaW5lIE5MODAyMTFfVkVORE9SX0lEX0lTX0xJTlVYIDB4ODAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgbmw4MDIxMV92ZW5kb3JfY21kX2luZm8geworIF9fdTMyIHZlbmRvcl9pZDsKKyBfX3UzMiBzdWJjbWQ7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9udm1lLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L252bWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWRlYTkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9udm1lLmgKQEAgLTAsMCArMSw1NTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1VBUElfTElOVVhfTlZNRV9ICisjZGVmaW5lIF9VQVBJX0xJTlVYX05WTUVfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitzdHJ1Y3QgbnZtZV9pZF9wb3dlcl9zdGF0ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiBtYXhfcG93ZXI7CisgX191OCByc3ZkMjsKKyBfX3U4IGZsYWdzOworIF9fbGUzMiBlbnRyeV9sYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBleGl0X2xhdDsKKyBfX3U4IHJlYWRfdHB1dDsKKyBfX3U4IHJlYWRfbGF0OworIF9fdTggd3JpdGVfdHB1dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCB3cml0ZV9sYXQ7CisgX191OCByc3ZkMTZbMTZdOworfTsKK2VudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX1BTX0ZMQUdTX01BWF9QT1dFUl9TQ0FMRSA9IDEgPDwgMCwKKyBOVk1FX1BTX0ZMQUdTX05PTl9PUF9TVEFURSA9IDEgPDwgMSwKK307CitzdHJ1Y3QgbnZtZV9pZF9jdHJsIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTE2IHZpZDsKKyBfX2xlMTYgc3N2aWQ7CisgY2hhciBzblsyMF07CisgY2hhciBtbls0MF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNoYXIgZnJbOF07CisgX191OCByYWI7CisgX191OCBpZWVlWzNdOworIF9fdTggbWljOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IG1kdHM7CisgX191OCByc3ZkNzhbMTc4XTsKKyBfX2xlMTYgb2FjczsKKyBfX3U4IGFjbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBhZXJsOworIF9fdTggZnJtdzsKKyBfX3U4IGxwYTsKKyBfX3U4IGVscGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggbnBzczsKKyBfX3U4IHJzdmQyNjRbMjQ4XTsKKyBfX3U4IHNxZXM7CisgX191OCBjcWVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHJzdmQ1MTRbMl07CisgX19sZTMyIG5uOworIF9fbGUxNiBvbmNzOworIF9fbGUxNiBmdXNlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBmbmE7CisgX191OCB2d2M7CisgX19sZTE2IGF3dW47CisgX19sZTE2IGF3dXBmOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHJzdmQ1MzBbMTUxOF07Cisgc3RydWN0IG52bWVfaWRfcG93ZXJfc3RhdGUgcHNkWzMyXTsKKyBfX3U4IHZzWzEwMjRdOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKKyBOVk1FX0NUUkxfT05DU19DT01QQVJFID0gMSA8PCAwLAorIE5WTUVfQ1RSTF9PTkNTX1dSSVRFX1VOQ09SUkVDVEFCTEUgPSAxIDw8IDEsCisgTlZNRV9DVFJMX09OQ1NfRFNNID0gMSA8PCAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgbnZtZV9sYmFmIHsKKyBfX2xlMTYgbXM7CisgX191OCBkczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBycDsKK307CitzdHJ1Y3QgbnZtZV9pZF9ucyB7CisgX19sZTY0IG5zemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGU2NCBuY2FwOworIF9fbGU2NCBudXNlOworIF9fdTggbnNmZWF0OworIF9fdTggbmxiYWY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZmxiYXM7CisgX191OCBtYzsKKyBfX3U4IGRwYzsKKyBfX3U4IGRwczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCByc3ZkMzBbOThdOworIHN0cnVjdCBudm1lX2xiYWYgbGJhZlsxNl07CisgX191OCByc3ZkMTkyWzE5Ml07CisgX191OCB2c1szNzEyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSB7CisgTlZNRV9OU19GRUFUX1RISU4gPSAxIDw8IDAsCisgTlZNRV9MQkFGX1JQX0JFU1QgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX0xCQUZfUlBfQkVUVEVSID0gMSwKKyBOVk1FX0xCQUZfUlBfR09PRCA9IDIsCisgTlZNRV9MQkFGX1JQX0RFR1JBREVEID0gMywKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IG52bWVfc21hcnRfbG9nIHsKKyBfX3U4IGNyaXRpY2FsX3dhcm5pbmc7CisgX191OCB0ZW1wZXJhdHVyZVsyXTsKKyBfX3U4IGF2YWlsX3NwYXJlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHNwYXJlX3RocmVzaDsKKyBfX3U4IHBlcmNlbnRfdXNlZDsKKyBfX3U4IHJzdmQ2WzI2XTsKKyBfX3U4IGRhdGFfdW5pdHNfcmVhZFsxNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZGF0YV91bml0c193cml0dGVuWzE2XTsKKyBfX3U4IGhvc3RfcmVhZHNbMTZdOworIF9fdTggaG9zdF93cml0ZXNbMTZdOworIF9fdTggY3RybF9idXN5X3RpbWVbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHBvd2VyX2N5Y2xlc1sxNl07CisgX191OCBwb3dlcl9vbl9ob3Vyc1sxNl07CisgX191OCB1bnNhZmVfc2h1dGRvd25zWzE2XTsKKyBfX3U4IG1lZGlhX2Vycm9yc1sxNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggbnVtX2Vycl9sb2dfZW50cmllc1sxNl07CisgX191OCByc3ZkMTkyWzMyMF07Cit9OworZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfU01BUlRfQ1JJVF9TUEFSRSA9IDEgPDwgMCwKKyBOVk1FX1NNQVJUX0NSSVRfVEVNUEVSQVRVUkUgPSAxIDw8IDEsCisgTlZNRV9TTUFSVF9DUklUX1JFTElBQklMSVRZID0gMSA8PCAyLAorIE5WTUVfU01BUlRfQ1JJVF9NRURJQSA9IDEgPDwgMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9TTUFSVF9DUklUX1ZPTEFUSUxFX01FTU9SWSA9IDEgPDwgNCwKK307CitzdHJ1Y3QgbnZtZV9sYmFfcmFuZ2VfdHlwZSB7CisgX191OCB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGF0dHJpYnV0ZXM7CisgX191OCByc3ZkMlsxNF07CisgX191NjQgc2xiYTsKKyBfX3U2NCBubGI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZ3VpZFsxNl07CisgX191OCByc3ZkNDhbMTZdOworfTsKK2VudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX0xCQVJUX1RZUEVfRlMgPSAweDAxLAorIE5WTUVfTEJBUlRfVFlQRV9SQUlEID0gMHgwMiwKKyBOVk1FX0xCQVJUX1RZUEVfQ0FDSEUgPSAweDAzLAorIE5WTUVfTEJBUlRfVFlQRV9TV0FQID0gMHgwNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9MQkFSVF9BVFRSSUJfVEVNUCA9IDEgPDwgMCwKKyBOVk1FX0xCQVJUX0FUVFJJQl9ISURFID0gMSA8PCAxLAorfTsKK2VudW0gbnZtZV9vcGNvZGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBudm1lX2NtZF9mbHVzaCA9IDB4MDAsCisgbnZtZV9jbWRfd3JpdGUgPSAweDAxLAorIG52bWVfY21kX3JlYWQgPSAweDAyLAorIG52bWVfY21kX3dyaXRlX3VuY29yID0gMHgwNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbnZtZV9jbWRfY29tcGFyZSA9IDB4MDUsCisgbnZtZV9jbWRfZHNtID0gMHgwOSwKK307CitzdHJ1Y3QgbnZtZV9jb21tb25fY29tbWFuZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggb3Bjb2RlOworIF9fdTggZmxhZ3M7CisgX191MTYgY29tbWFuZF9pZDsKKyBfX2xlMzIgbnNpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIGNkdzJbMl07CisgX19sZTY0IG1ldGFkYXRhOworIF9fbGU2NCBwcnAxOworIF9fbGU2NCBwcnAyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgY2R3MTBbNl07Cit9Oworc3RydWN0IG52bWVfcndfY29tbWFuZCB7CisgX191OCBvcGNvZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZmxhZ3M7CisgX191MTYgY29tbWFuZF9pZDsKKyBfX2xlMzIgbnNpZDsKKyBfX3U2NCByc3ZkMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTY0IG1ldGFkYXRhOworIF9fbGU2NCBwcnAxOworIF9fbGU2NCBwcnAyOworIF9fbGU2NCBzbGJhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgbGVuZ3RoOworIF9fbGUxNiBjb250cm9sOworIF9fbGUzMiBkc21nbXQ7CisgX19sZTMyIHJlZnRhZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTE2IGFwcHRhZzsKKyBfX2xlMTYgYXBwbWFzazsKK307CitlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9SV19MUiA9IDEgPDwgMTUsCisgTlZNRV9SV19GVUEgPSAxIDw8IDE0LAorIE5WTUVfUldfRFNNX0ZSRVFfVU5TUEVDID0gMCwKKyBOVk1FX1JXX0RTTV9GUkVRX1RZUElDQUwgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX1JXX0RTTV9GUkVRX1JBUkUgPSAyLAorIE5WTUVfUldfRFNNX0ZSRVFfUkVBRFMgPSAzLAorIE5WTUVfUldfRFNNX0ZSRVFfV1JJVEVTID0gNCwKKyBOVk1FX1JXX0RTTV9GUkVRX1JXID0gNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9SV19EU01fRlJFUV9PTkNFID0gNiwKKyBOVk1FX1JXX0RTTV9GUkVRX1BSRUZFVENIID0gNywKKyBOVk1FX1JXX0RTTV9GUkVRX1RFTVAgPSA4LAorIE5WTUVfUldfRFNNX0xBVEVOQ1lfTk9ORSA9IDAgPDwgNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9SV19EU01fTEFURU5DWV9JRExFID0gMSA8PCA0LAorIE5WTUVfUldfRFNNX0xBVEVOQ1lfTk9STSA9IDIgPDwgNCwKKyBOVk1FX1JXX0RTTV9MQVRFTkNZX0xPVyA9IDMgPDwgNCwKKyBOVk1FX1JXX0RTTV9TRVFfUkVRID0gMSA8PCA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX1JXX0RTTV9DT01QUkVTU0VEID0gMSA8PCA3LAorfTsKK3N0cnVjdCBudm1lX2RzbV9jbWQgeworIF9fdTggb3Bjb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGZsYWdzOworIF9fdTE2IGNvbW1hbmRfaWQ7CisgX19sZTMyIG5zaWQ7CisgX191NjQgcnN2ZDJbMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGU2NCBwcnAxOworIF9fbGU2NCBwcnAyOworIF9fbGUzMiBucjsKKyBfX2xlMzIgYXR0cmlidXRlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcnN2ZDEyWzRdOworfTsKK2VudW0geworIE5WTUVfRFNNR01UX0lEUiA9IDEgPDwgMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9EU01HTVRfSURXID0gMSA8PCAxLAorIE5WTUVfRFNNR01UX0FEID0gMSA8PCAyLAorfTsKK3N0cnVjdCBudm1lX2RzbV9yYW5nZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBjYXR0cjsKKyBfX2xlMzIgbmxiOworIF9fbGU2NCBzbGJhOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIG52bWVfYWRtaW5fb3Bjb2RlIHsKKyBudm1lX2FkbWluX2RlbGV0ZV9zcSA9IDB4MDAsCisgbnZtZV9hZG1pbl9jcmVhdGVfc3EgPSAweDAxLAorIG52bWVfYWRtaW5fZ2V0X2xvZ19wYWdlID0gMHgwMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgbnZtZV9hZG1pbl9kZWxldGVfY3EgPSAweDA0LAorIG52bWVfYWRtaW5fY3JlYXRlX2NxID0gMHgwNSwKKyBudm1lX2FkbWluX2lkZW50aWZ5ID0gMHgwNiwKKyBudm1lX2FkbWluX2Fib3J0X2NtZCA9IDB4MDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG52bWVfYWRtaW5fc2V0X2ZlYXR1cmVzID0gMHgwOSwKKyBudm1lX2FkbWluX2dldF9mZWF0dXJlcyA9IDB4MGEsCisgbnZtZV9hZG1pbl9hc3luY19ldmVudCA9IDB4MGMsCisgbnZtZV9hZG1pbl9hY3RpdmF0ZV9mdyA9IDB4MTAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG52bWVfYWRtaW5fZG93bmxvYWRfZncgPSAweDExLAorIG52bWVfYWRtaW5fZm9ybWF0X252bSA9IDB4ODAsCisgbnZtZV9hZG1pbl9zZWN1cml0eV9zZW5kID0gMHg4MSwKKyBudm1lX2FkbWluX3NlY3VyaXR5X3JlY3YgPSAweDgyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitlbnVtIHsKKyBOVk1FX1FVRVVFX1BIWVNfQ09OVElHID0gKDEgPDwgMCksCisgTlZNRV9DUV9JUlFfRU5BQkxFRCA9ICgxIDw8IDEpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX1NRX1BSSU9fVVJHRU5UID0gKDAgPDwgMSksCisgTlZNRV9TUV9QUklPX0hJR0ggPSAoMSA8PCAxKSwKKyBOVk1FX1NRX1BSSU9fTUVESVVNID0gKDIgPDwgMSksCisgTlZNRV9TUV9QUklPX0xPVyA9ICgzIDw8IDEpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX0ZFQVRfQVJCSVRSQVRJT04gPSAweDAxLAorIE5WTUVfRkVBVF9QT1dFUl9NR01UID0gMHgwMiwKKyBOVk1FX0ZFQVRfTEJBX1JBTkdFID0gMHgwMywKKyBOVk1FX0ZFQVRfVEVNUF9USFJFU0ggPSAweDA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX0ZFQVRfRVJSX1JFQ09WRVJZID0gMHgwNSwKKyBOVk1FX0ZFQVRfVk9MQVRJTEVfV0MgPSAweDA2LAorIE5WTUVfRkVBVF9OVU1fUVVFVUVTID0gMHgwNywKKyBOVk1FX0ZFQVRfSVJRX0NPQUxFU0NFID0gMHgwOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9GRUFUX0lSUV9DT05GSUcgPSAweDA5LAorIE5WTUVfRkVBVF9XUklURV9BVE9NSUMgPSAweDBhLAorIE5WTUVfRkVBVF9BU1lOQ19FVkVOVCA9IDB4MGIsCisgTlZNRV9GRUFUX1NXX1BST0dSRVNTID0gMHgwYywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9GV0FDVF9SRVBMID0gKDAgPDwgMyksCisgTlZNRV9GV0FDVF9SRVBMX0FDVFYgPSAoMSA8PCAzKSwKKyBOVk1FX0ZXQUNUX0FDVFYgPSAoMiA8PCAzKSwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IG52bWVfaWRlbnRpZnkgeworIF9fdTggb3Bjb2RlOworIF9fdTggZmxhZ3M7CisgX191MTYgY29tbWFuZF9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIG5zaWQ7CisgX191NjQgcnN2ZDJbMl07CisgX19sZTY0IHBycDE7CisgX19sZTY0IHBycDI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBjbnM7CisgX191MzIgcnN2ZDExWzVdOworfTsKK3N0cnVjdCBudm1lX2ZlYXR1cmVzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBvcGNvZGU7CisgX191OCBmbGFnczsKKyBfX3UxNiBjb21tYW5kX2lkOworIF9fbGUzMiBuc2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCByc3ZkMlsyXTsKKyBfX2xlNjQgcHJwMTsKKyBfX2xlNjQgcHJwMjsKKyBfX2xlMzIgZmlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgZHdvcmQxMTsKKyBfX3UzMiByc3ZkMTJbNF07Cit9Oworc3RydWN0IG52bWVfY3JlYXRlX2NxIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBvcGNvZGU7CisgX191OCBmbGFnczsKKyBfX3UxNiBjb21tYW5kX2lkOworIF9fdTMyIHJzdmQxWzVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlNjQgcHJwMTsKKyBfX3U2NCByc3ZkODsKKyBfX2xlMTYgY3FpZDsKKyBfX2xlMTYgcXNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiBjcV9mbGFnczsKKyBfX2xlMTYgaXJxX3ZlY3RvcjsKKyBfX3UzMiByc3ZkMTJbNF07Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBudm1lX2NyZWF0ZV9zcSB7CisgX191OCBvcGNvZGU7CisgX191OCBmbGFnczsKKyBfX3UxNiBjb21tYW5kX2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiByc3ZkMVs1XTsKKyBfX2xlNjQgcHJwMTsKKyBfX3U2NCByc3ZkODsKKyBfX2xlMTYgc3FpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTE2IHFzaXplOworIF9fbGUxNiBzcV9mbGFnczsKKyBfX2xlMTYgY3FpZDsKKyBfX3UzMiByc3ZkMTJbNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCBudm1lX2RlbGV0ZV9xdWV1ZSB7CisgX191OCBvcGNvZGU7CisgX191OCBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgY29tbWFuZF9pZDsKKyBfX3UzMiByc3ZkMVs5XTsKKyBfX2xlMTYgcWlkOworIF9fdTE2IHJzdmQxMDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcnN2ZDExWzVdOworfTsKK3N0cnVjdCBudm1lX2Fib3J0X2NtZCB7CisgX191OCBvcGNvZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZmxhZ3M7CisgX191MTYgY29tbWFuZF9pZDsKKyBfX3UzMiByc3ZkMVs5XTsKKyBfX2xlMTYgc3FpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgY2lkOworIF9fdTMyIHJzdmQxMVs1XTsKK307CitzdHJ1Y3QgbnZtZV9kb3dubG9hZF9maXJtd2FyZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggb3Bjb2RlOworIF9fdTggZmxhZ3M7CisgX191MTYgY29tbWFuZF9pZDsKKyBfX3UzMiByc3ZkMVs1XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTY0IHBycDE7CisgX19sZTY0IHBycDI7CisgX19sZTMyIG51bWQ7CisgX19sZTMyIG9mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcnN2ZDEyWzRdOworfTsKK3N0cnVjdCBudm1lX2Zvcm1hdF9jbWQgeworIF9fdTggb3Bjb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGZsYWdzOworIF9fdTE2IGNvbW1hbmRfaWQ7CisgX19sZTMyIG5zaWQ7CisgX191NjQgcnN2ZDJbNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBjZHcxMDsKKyBfX3UzMiByc3ZkMTFbNV07Cit9Oworc3RydWN0IG52bWVfY29tbWFuZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uIHsKKyBzdHJ1Y3QgbnZtZV9jb21tb25fY29tbWFuZCBjb21tb247Cisgc3RydWN0IG52bWVfcndfY29tbWFuZCBydzsKKyBzdHJ1Y3QgbnZtZV9pZGVudGlmeSBpZGVudGlmeTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IG52bWVfZmVhdHVyZXMgZmVhdHVyZXM7Cisgc3RydWN0IG52bWVfY3JlYXRlX2NxIGNyZWF0ZV9jcTsKKyBzdHJ1Y3QgbnZtZV9jcmVhdGVfc3EgY3JlYXRlX3NxOworIHN0cnVjdCBudm1lX2RlbGV0ZV9xdWV1ZSBkZWxldGVfcXVldWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBudm1lX2Rvd25sb2FkX2Zpcm13YXJlIGRsZnc7Cisgc3RydWN0IG52bWVfZm9ybWF0X2NtZCBmb3JtYXQ7Cisgc3RydWN0IG52bWVfZHNtX2NtZCBkc207Cisgc3RydWN0IG52bWVfYWJvcnRfY21kIGFib3J0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9OworfTsKK2VudW0geworIE5WTUVfU0NfU1VDQ0VTUyA9IDB4MCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9TQ19JTlZBTElEX09QQ09ERSA9IDB4MSwKKyBOVk1FX1NDX0lOVkFMSURfRklFTEQgPSAweDIsCisgTlZNRV9TQ19DTURJRF9DT05GTElDVCA9IDB4MywKKyBOVk1FX1NDX0RBVEFfWEZFUl9FUlJPUiA9IDB4NCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9TQ19QT1dFUl9MT1NTID0gMHg1LAorIE5WTUVfU0NfSU5URVJOQUwgPSAweDYsCisgTlZNRV9TQ19BQk9SVF9SRVEgPSAweDcsCisgTlZNRV9TQ19BQk9SVF9RVUVVRSA9IDB4OCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9TQ19GVVNFRF9GQUlMID0gMHg5LAorIE5WTUVfU0NfRlVTRURfTUlTU0lORyA9IDB4YSwKKyBOVk1FX1NDX0lOVkFMSURfTlMgPSAweGIsCisgTlZNRV9TQ19DTURfU0VRX0VSUk9SID0gMHhjLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX1NDX0xCQV9SQU5HRSA9IDB4ODAsCisgTlZNRV9TQ19DQVBfRVhDRUVERUQgPSAweDgxLAorIE5WTUVfU0NfTlNfTk9UX1JFQURZID0gMHg4MiwKKyBOVk1FX1NDX0NRX0lOVkFMSUQgPSAweDEwMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9TQ19RSURfSU5WQUxJRCA9IDB4MTAxLAorIE5WTUVfU0NfUVVFVUVfU0laRSA9IDB4MTAyLAorIE5WTUVfU0NfQUJPUlRfTElNSVQgPSAweDEwMywKKyBOVk1FX1NDX0FCT1JUX01JU1NJTkcgPSAweDEwNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTlZNRV9TQ19BU1lOQ19MSU1JVCA9IDB4MTA1LAorIE5WTUVfU0NfRklSTVdBUkVfU0xPVCA9IDB4MTA2LAorIE5WTUVfU0NfRklSTVdBUkVfSU1BR0UgPSAweDEwNywKKyBOVk1FX1NDX0lOVkFMSURfVkVDVE9SID0gMHgxMDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE5WTUVfU0NfSU5WQUxJRF9MT0dfUEFHRSA9IDB4MTA5LAorIE5WTUVfU0NfSU5WQUxJRF9GT1JNQVQgPSAweDEwYSwKKyBOVk1FX1NDX0JBRF9BVFRSSUJVVEVTID0gMHgxODAsCisgTlZNRV9TQ19XUklURV9GQVVMVCA9IDB4MjgwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX1NDX1JFQURfRVJST1IgPSAweDI4MSwKKyBOVk1FX1NDX0dVQVJEX0NIRUNLID0gMHgyODIsCisgTlZNRV9TQ19BUFBUQUdfQ0hFQ0sgPSAweDI4MywKKyBOVk1FX1NDX1JFRlRBR19DSEVDSyA9IDB4Mjg0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBOVk1FX1NDX0NPTVBBUkVfRkFJTEVEID0gMHgyODUsCisgTlZNRV9TQ19BQ0NFU1NfREVOSUVEID0gMHgyODYsCit9Oworc3RydWN0IG52bWVfY29tcGxldGlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiByZXN1bHQ7CisgX191MzIgcnN2ZDsKKyBfX2xlMTYgc3FfaGVhZDsKKyBfX2xlMTYgc3FfaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGNvbW1hbmRfaWQ7CisgX19sZTE2IHN0YXR1czsKK307CitzdHJ1Y3QgbnZtZV91c2VyX2lvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBvcGNvZGU7CisgX191OCBmbGFnczsKKyBfX3UxNiBjb250cm9sOworIF9fdTE2IG5ibG9ja3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IHJzdmQ7CisgX191NjQgbWV0YWRhdGE7CisgX191NjQgYWRkcjsKKyBfX3U2NCBzbGJhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBkc21nbXQ7CisgX191MzIgcmVmdGFnOworIF9fdTE2IGFwcHRhZzsKKyBfX3UxNiBhcHBtYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgbnZtZV9hZG1pbl9jbWQgeworIF9fdTggb3Bjb2RlOworIF9fdTggZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IHJzdmQxOworIF9fdTMyIG5zaWQ7CisgX191MzIgY2R3MjsKKyBfX3UzMiBjZHczOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBtZXRhZGF0YTsKKyBfX3U2NCBhZGRyOworIF9fdTMyIG1ldGFkYXRhX2xlbjsKKyBfX3UzMiBkYXRhX2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgY2R3MTA7CisgX191MzIgY2R3MTE7CisgX191MzIgY2R3MTI7CisgX191MzIgY2R3MTM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNkdzE0OworIF9fdTMyIGNkdzE1OworIF9fdTMyIHRpbWVvdXRfbXM7CisgX191MzIgcmVzdWx0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIE5WTUVfSU9DVExfSUQgX0lPKCdOJywgMHg0MCkKKyNkZWZpbmUgTlZNRV9JT0NUTF9BRE1JTl9DTUQgX0lPV1IoJ04nLCAweDQxLCBzdHJ1Y3QgbnZtZV9hZG1pbl9jbWQpCisjZGVmaW5lIE5WTUVfSU9DVExfU1VCTUlUX0lPIF9JT1coJ04nLCAweDQyLCBzdHJ1Y3QgbnZtZV91c2VyX2lvKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCmluZGV4IGFmZmMzZDYuLjk2NDliNmIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L29wZW52c3dpdGNoLmgKQEAgLTI3LDI2NCArMjcsMzEyIEBACiAjZGVmaW5lIE9WU19EQVRBUEFUSF9GQU1JTFkgIm92c19kYXRhcGF0aCIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9WU19EQVRBUEFUSF9NQ0dST1VQICJvdnNfZGF0YXBhdGgiCi0jZGVmaW5lIE9WU19EQVRBUEFUSF9WRVJTSU9OIDB4MQorI2RlZmluZSBPVlNfREFUQVBBVEhfVkVSU0lPTiAyCisjZGVmaW5lIE9WU19EUF9WRVJfRkVBVFVSRVMgMgogZW51bSBvdnNfZGF0YXBhdGhfY21kIHsKLSBPVlNfRFBfQ01EX1VOU1BFQywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgT1ZTX0RQX0NNRF9VTlNQRUMsCiAgT1ZTX0RQX0NNRF9ORVcsCiAgT1ZTX0RQX0NNRF9ERUwsCiAgT1ZTX0RQX0NNRF9HRVQsCi0gT1ZTX0RQX0NNRF9TRVQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgT1ZTX0RQX0NNRF9TRVQKIH07CiBlbnVtIG92c19kYXRhcGF0aF9hdHRyIHsKICBPVlNfRFBfQVRUUl9VTlNQRUMsCi0gT1ZTX0RQX0FUVFJfTkFNRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgT1ZTX0RQX0FUVFJfTkFNRSwKICBPVlNfRFBfQVRUUl9VUENBTExfUElELAogIE9WU19EUF9BVFRSX1NUQVRTLAorIE9WU19EUF9BVFRSX01FR0FGTE9XX1NUQVRTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBPVlNfRFBfQVRUUl9VU0VSX0ZFQVRVUkVTLAogIF9fT1ZTX0RQX0FUVFJfTUFYCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT1ZTX0RQX0FUVFJfTUFYIChfX09WU19EUF9BVFRSX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG92c19kcF9zdGF0cyB7CiAgX191NjQgbl9oaXQ7CiAgX191NjQgbl9taXNzZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG5fbG9zdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbl9mbG93czsKIH07Ci1zdHJ1Y3Qgb3ZzX3Zwb3J0X3N0YXRzIHsKK3N0cnVjdCBvdnNfZHBfbWVnYWZsb3dfc3RhdHMgeworIF9fdTY0IG5fbWFza19oaXQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fdTY0IHJ4X3BhY2tldHM7Ci0gX191NjQgdHhfcGFja2V0czsKLSBfX3U2NCByeF9ieXRlczsKLSBfX3U2NCB0eF9ieXRlczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gX191NjQgcnhfZXJyb3JzOwotIF9fdTY0IHR4X2Vycm9yczsKLSBfX3U2NCByeF9kcm9wcGVkOwotIF9fdTY0IHR4X2Ryb3BwZWQ7CisgX191MzIgbl9tYXNrczsKKyBfX3UzMiBwYWQwOworIF9fdTY0IHBhZDE7CisgX191NjQgcGFkMjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Oworc3RydWN0IG92c192cG9ydF9zdGF0cyB7CisgX191NjQgcnhfcGFja2V0czsKKyBfX3U2NCB0eF9wYWNrZXRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCByeF9ieXRlczsKKyBfX3U2NCB0eF9ieXRlczsKKyBfX3U2NCByeF9lcnJvcnM7CisgX191NjQgdHhfZXJyb3JzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCByeF9kcm9wcGVkOworIF9fdTY0IHR4X2Ryb3BwZWQ7Cit9OworI2RlZmluZSBPVlNfRFBfRl9VTkFMSUdORUQgKDEgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9WU1BfTE9DQUwgKChfX3UzMikwKQogI2RlZmluZSBPVlNfUEFDS0VUX0ZBTUlMWSAib3ZzX3BhY2tldCIKICNkZWZpbmUgT1ZTX1BBQ0tFVF9WRVJTSU9OIDB4MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gb3ZzX3BhY2tldF9jbWQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfUEFDS0VUX0NNRF9VTlNQRUMsCiAgT1ZTX1BBQ0tFVF9DTURfTUlTUywKICBPVlNfUEFDS0VUX0NNRF9BQ1RJT04sCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19QQUNLRVRfQ01EX0VYRUNVVEUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSBvdnNfcGFja2V0X2F0dHIgewogIE9WU19QQUNLRVRfQVRUUl9VTlNQRUMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19QQUNLRVRfQVRUUl9QQUNLRVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19QQUNLRVRfQVRUUl9LRVksCiAgT1ZTX1BBQ0tFVF9BVFRSX0FDVElPTlMsCiAgT1ZTX1BBQ0tFVF9BVFRSX1VTRVJEQVRBLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX09WU19QQUNLRVRfQVRUUl9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBPVlNfUEFDS0VUX0FUVFJfTUFYIChfX09WU19QQUNLRVRfQVRUUl9NQVggLSAxKQogI2RlZmluZSBPVlNfVlBPUlRfRkFNSUxZICJvdnNfdnBvcnQiCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPVlNfVlBPUlRfTUNHUk9VUCAib3ZzX3Zwb3J0IgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT1ZTX1ZQT1JUX1ZFUlNJT04gMHgxCiBlbnVtIG92c192cG9ydF9jbWQgewogIE9WU19WUE9SVF9DTURfVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfVlBPUlRfQ01EX05FVywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX1ZQT1JUX0NNRF9ERUwsCiAgT1ZTX1ZQT1JUX0NNRF9HRVQsCiAgT1ZTX1ZQT1JUX0NNRF9TRVQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gb3ZzX3Zwb3J0X3R5cGUgewogIE9WU19WUE9SVF9UWVBFX1VOU1BFQywKICBPVlNfVlBPUlRfVFlQRV9ORVRERVYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19WUE9SVF9UWVBFX0lOVEVSTkFMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBPVlNfVlBPUlRfVFlQRV9HUkUsCisgT1ZTX1ZQT1JUX1RZUEVfVlhMQU4sCiAgX19PVlNfVlBPUlRfVFlQRV9NQVgKIH07Ci0jZGVmaW5lIE9WU19WUE9SVF9UWVBFX01BWCAoX19PVlNfVlBPUlRfVFlQRV9NQVggLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgT1ZTX1ZQT1JUX1RZUEVfTUFYIChfX09WU19WUE9SVF9UWVBFX01BWCAtIDEpCiBlbnVtIG92c192cG9ydF9hdHRyIHsKICBPVlNfVlBPUlRfQVRUUl9VTlNQRUMsCiAgT1ZTX1ZQT1JUX0FUVFJfUE9SVF9OTywKLSBPVlNfVlBPUlRfQVRUUl9UWVBFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBPVlNfVlBPUlRfQVRUUl9UWVBFLAogIE9WU19WUE9SVF9BVFRSX05BTUUsCiAgT1ZTX1ZQT1JUX0FUVFJfT1BUSU9OUywKICBPVlNfVlBPUlRfQVRUUl9VUENBTExfUElELAotIE9WU19WUE9SVF9BVFRSX1NUQVRTLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBPVlNfVlBPUlRfQVRUUl9TVEFUUywKICBfX09WU19WUE9SVF9BVFRSX01BWAogfTsKICNkZWZpbmUgT1ZTX1ZQT1JUX0FUVFJfTUFYIChfX09WU19WUE9SVF9BVFRSX01BWCAtIDEpCi0jZGVmaW5lIE9WU19GTE9XX0ZBTUlMWSAib3ZzX2Zsb3ciCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CisgT1ZTX1RVTk5FTF9BVFRSX1VOU1BFQywKKyBPVlNfVFVOTkVMX0FUVFJfRFNUX1BPUlQsCisgX19PVlNfVFVOTkVMX0FUVFJfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgT1ZTX1RVTk5FTF9BVFRSX01BWCAoX19PVlNfVFVOTkVMX0FUVFJfTUFYIC0gMSkKKyNkZWZpbmUgT1ZTX0ZMT1dfRkFNSUxZICJvdnNfZmxvdyIKICNkZWZpbmUgT1ZTX0ZMT1dfTUNHUk9VUCAib3ZzX2Zsb3ciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPVlNfRkxPV19WRVJTSU9OIDB4MQogZW51bSBvdnNfZmxvd19jbWQgewogIE9WU19GTE9XX0NNRF9VTlNQRUMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19GTE9XX0NNRF9ORVcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19GTE9XX0NNRF9ERUwsCiAgT1ZTX0ZMT1dfQ01EX0dFVCwKICBPVlNfRkxPV19DTURfU0VUCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgb3ZzX2Zsb3dfc3RhdHMgewogIF9fdTY0IG5fcGFja2V0czsKICBfX3U2NCBuX2J5dGVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBvdnNfa2V5X2F0dHIgewogIE9WU19LRVlfQVRUUl9VTlNQRUMsCiAgT1ZTX0tFWV9BVFRSX0VOQ0FQLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfS0VZX0FUVFJfUFJJT1JJVFksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19LRVlfQVRUUl9JTl9QT1JULAogIE9WU19LRVlfQVRUUl9FVEhFUk5FVCwKICBPVlNfS0VZX0FUVFJfVkxBTiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX0tFWV9BVFRSX0lQVjQsCiAgT1ZTX0tFWV9BVFRSX0lQVjYsCiAgT1ZTX0tFWV9BVFRSX1RDUCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX0tFWV9BVFRSX1VEUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX0tFWV9BVFRSX0lDTVAsCiAgT1ZTX0tFWV9BVFRSX0lDTVBWNiwKICBPVlNfS0VZX0FUVFJfQVJQLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfS0VZX0FUVFJfTkQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19LRVlfQVRUUl9TS0JfTUFSSywKKyBPVlNfS0VZX0FUVFJfVFVOTkVMLAorIE9WU19LRVlfQVRUUl9TQ1RQLAorIE9WU19LRVlfQVRUUl9UQ1BfRkxBR1MsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fT1ZTX0tFWV9BVFRSX01BWAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9WU19LRVlfQVRUUl9NQVggKF9fT1ZTX0tFWV9BVFRSX01BWCAtIDEpCitlbnVtIG92c190dW5uZWxfa2V5X2F0dHIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBPVlNfVFVOTkVMX0tFWV9BVFRSX0lELAorIE9WU19UVU5ORUxfS0VZX0FUVFJfSVBWNF9TUkMsCisgT1ZTX1RVTk5FTF9LRVlfQVRUUl9JUFY0X0RTVCwKKyBPVlNfVFVOTkVMX0tFWV9BVFRSX1RPUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgT1ZTX1RVTk5FTF9LRVlfQVRUUl9UVEwsCisgT1ZTX1RVTk5FTF9LRVlfQVRUUl9ET05UX0ZSQUdNRU5ULAorIE9WU19UVU5ORUxfS0VZX0FUVFJfQ1NVTSwKKyBfX09WU19UVU5ORUxfS0VZX0FUVFJfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgT1ZTX1RVTk5FTF9LRVlfQVRUUl9NQVggKF9fT1ZTX1RVTk5FTF9LRVlfQVRUUl9NQVggLSAxKQogZW51bSBvdnNfZnJhZ190eXBlIHsKICBPVlNfRlJBR19UWVBFX05PTkUsCi0gT1ZTX0ZSQUdfVFlQRV9GSVJTVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgT1ZTX0ZSQUdfVFlQRV9GSVJTVCwKICBPVlNfRlJBR19UWVBFX0xBVEVSLAogIF9fT1ZTX0ZSQUdfVFlQRV9NQVgKIH07Ci0jZGVmaW5lIE9WU19GUkFHX1RZUEVfTUFYIChfX09WU19GUkFHX1RZUEVfTUFYIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE9WU19GUkFHX1RZUEVfTUFYIChfX09WU19GUkFHX1RZUEVfTUFYIC0gMSkKIHN0cnVjdCBvdnNfa2V5X2V0aGVybmV0IHsKICBfX3U4IGV0aF9zcmNbRVRIX0FMRU5dOwogIF9fdTggZXRoX2RzdFtFVEhfQUxFTl07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3Qgb3ZzX2tleV9pcHY0IHsKICBfX2JlMzIgaXB2NF9zcmM7CiAgX19iZTMyIGlwdjRfZHN0OwotIF9fdTggaXB2NF9wcm90bzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBpcHY0X3Byb3RvOwogIF9fdTggaXB2NF90b3M7CiAgX191OCBpcHY0X3R0bDsKICBfX3U4IGlwdjRfZnJhZzsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBvdnNfa2V5X2lwdjYgewogIF9fYmUzMiBpcHY2X3NyY1s0XTsKICBfX2JlMzIgaXB2Nl9kc3RbNF07Ci0gX19iZTMyIGlwdjZfbGFiZWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUzMiBpcHY2X2xhYmVsOwogIF9fdTggaXB2Nl9wcm90bzsKICBfX3U4IGlwdjZfdGNsYXNzOwogIF9fdTggaXB2Nl9obGltaXQ7Ci0gX191OCBpcHY2X2ZyYWc7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggaXB2Nl9mcmFnOwogfTsKIHN0cnVjdCBvdnNfa2V5X3RjcCB7CiAgX19iZTE2IHRjcF9zcmM7Ci0gX19iZTE2IHRjcF9kc3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUxNiB0Y3BfZHN0OwogfTsKIHN0cnVjdCBvdnNfa2V5X3VkcCB7CiAgX19iZTE2IHVkcF9zcmM7Ci0gX19iZTE2IHVkcF9kc3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUxNiB1ZHBfZHN0OworfTsKK3N0cnVjdCBvdnNfa2V5X3NjdHAgeworIF9fYmUxNiBzY3RwX3NyYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTE2IHNjdHBfZHN0OwogfTsKIHN0cnVjdCBvdnNfa2V5X2ljbXAgewogIF9fdTggaWNtcF90eXBlOwotIF9fdTggaWNtcF9jb2RlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGljbXBfY29kZTsKIH07CiBzdHJ1Y3Qgb3ZzX2tleV9pY21wdjYgewogIF9fdTggaWNtcHY2X3R5cGU7Ci0gX191OCBpY21wdjZfY29kZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBpY21wdjZfY29kZTsKIH07CiBzdHJ1Y3Qgb3ZzX2tleV9hcnAgewogIF9fYmUzMiBhcnBfc2lwOwotIF9fYmUzMiBhcnBfdGlwOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2JlMzIgYXJwX3RpcDsKICBfX2JlMTYgYXJwX29wOwogIF9fdTggYXJwX3NoYVtFVEhfQUxFTl07CiAgX191OCBhcnBfdGhhW0VUSF9BTEVOXTsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBvdnNfa2V5X25kIHsKICBfX3UzMiBuZF90YXJnZXRbNF07CiAgX191OCBuZF9zbGxbRVRIX0FMRU5dOwotIF9fdTggbmRfdGxsW0VUSF9BTEVOXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBuZF90bGxbRVRIX0FMRU5dOwogfTsKIGVudW0gb3ZzX2Zsb3dfYXR0ciB7CiAgT1ZTX0ZMT1dfQVRUUl9VTlNQRUMsCi0gT1ZTX0ZMT1dfQVRUUl9LRVksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIE9WU19GTE9XX0FUVFJfS0VZLAogIE9WU19GTE9XX0FUVFJfQUNUSU9OUywKICBPVlNfRkxPV19BVFRSX1NUQVRTLAogIE9WU19GTE9XX0FUVFJfVENQX0ZMQUdTLAotIE9WU19GTE9XX0FUVFJfVVNFRCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgT1ZTX0ZMT1dfQVRUUl9VU0VELAogIE9WU19GTE9XX0FUVFJfQ0xFQVIsCisgT1ZTX0ZMT1dfQVRUUl9NQVNLLAogIF9fT1ZTX0ZMT1dfQVRUUl9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBPVlNfRkxPV19BVFRSX01BWCAoX19PVlNfRkxPV19BVFRSX01BWCAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBvdnNfc2FtcGxlX2F0dHIgewogIE9WU19TQU1QTEVfQVRUUl9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19TQU1QTEVfQVRUUl9QUk9CQUJJTElUWSwKICBPVlNfU0FNUExFX0FUVFJfQUNUSU9OUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19PVlNfU0FNUExFX0FUVFJfTUFYLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9WU19TQU1QTEVfQVRUUl9NQVggKF9fT1ZTX1NBTVBMRV9BVFRSX01BWCAtIDEpCiBlbnVtIG92c191c2Vyc3BhY2VfYXR0ciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19VU0VSU1BBQ0VfQVRUUl9VTlNQRUMsCiAgT1ZTX1VTRVJTUEFDRV9BVFRSX1BJRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX1VTRVJTUEFDRV9BVFRSX1VTRVJEQVRBLAogIF9fT1ZTX1VTRVJTUEFDRV9BVFRSX01BWAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIE9WU19VU0VSU1BBQ0VfQVRUUl9NQVggKF9fT1ZTX1VTRVJTUEFDRV9BVFRSX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG92c19hY3Rpb25fcHVzaF92bGFuIHsKICBfX2JlMTYgdmxhbl90cGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMTYgdmxhbl90Y2k7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gb3ZzX2FjdGlvbl9hdHRyIHsKICBPVlNfQUNUSU9OX0FUVFJfVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPVlNfQUNUSU9OX0FUVFJfT1VUUFVULAogIE9WU19BQ1RJT05fQVRUUl9VU0VSU1BBQ0UsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9WU19BQ1RJT05fQVRUUl9TRVQsCiAgT1ZTX0FDVElPTl9BVFRSX1BVU0hfVkxBTiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT1ZTX0FDVElPTl9BVFRSX1BPUF9WTEFOLAogIE9WU19BQ1RJT05fQVRUUl9TQU1QTEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fT1ZTX0FDVElPTl9BVFRSX01BWAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9WU19BQ1RJT05fQVRUUl9NQVggKF9fT1ZTX0FDVElPTl9BVFRSX01BWCAtIDEpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BjaV9yZWdzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BjaV9yZWdzLmgKaW5kZXggYTQwNGM5Ny4uZDIwZjUwMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wY2lfcmVncy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcGNpX3JlZ3MuaApAQCAtMzI2LDE5NCArMzI2LDE5OSBAQAogI2RlZmluZSBQQ0lfTVNJWF9QQkFfQklSIDB4MDAwMDAwMDcKICNkZWZpbmUgUENJX01TSVhfUEJBX09GRlNFVCAweGZmZmZmZmY4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQ0lfTVNJWF9GTEFHU19CSVJNQVNLICg3IDw8IDApCiAjZGVmaW5lIFBDSV9DQVBfTVNJWF9TSVpFT0YgMTIKICNkZWZpbmUgUENJX01TSVhfRU5UUllfU0laRSAxNgogI2RlZmluZSBQQ0lfTVNJWF9FTlRSWV9MT1dFUl9BRERSIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9NU0lYX0VOVFJZX1VQUEVSX0FERFIgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX01TSVhfRU5UUllfREFUQSA4CiAjZGVmaW5lIFBDSV9NU0lYX0VOVFJZX1ZFQ1RPUl9DVFJMIDEyCiAjZGVmaW5lIFBDSV9NU0lYX0VOVFJZX0NUUkxfTUFTS0JJVCAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0hTV1BfQ1NSIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9DSFNXUF9ESEEgMHgwMQogI2RlZmluZSBQQ0lfQ0hTV1BfRUlNIDB4MDIKICNkZWZpbmUgUENJX0NIU1dQX1BJRSAweDA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0hTV1BfTE9PIDB4MDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9DSFNXUF9QSSAweDMwCiAjZGVmaW5lIFBDSV9DSFNXUF9FWFQgMHg0MAogI2RlZmluZSBQQ0lfQ0hTV1BfSU5TIDB4ODAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9BRl9MRU5HVEggMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0FGX0NBUCAzCiAjZGVmaW5lIFBDSV9BRl9DQVBfVFAgMHgwMQogI2RlZmluZSBQQ0lfQUZfQ0FQX0ZMUiAweDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQUZfQ1RSTCA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQUZfQ1RSTF9GTFIgMHgwMQogI2RlZmluZSBQQ0lfQUZfU1RBVFVTIDUKICNkZWZpbmUgUENJX0FGX1NUQVRVU19UUCAweDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0FQX0FGX1NJWkVPRiA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9DTUQgMgogI2RlZmluZSBQQ0lfWF9DTURfRFBFUlJfRSAweDAwMDEKICNkZWZpbmUgUENJX1hfQ01EX0VSTyAweDAwMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX0NNRF9SRUFEXzUxMiAweDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX0NNRF9SRUFEXzFLIDB4MDAwNAogI2RlZmluZSBQQ0lfWF9DTURfUkVBRF8ySyAweDAwMDgKICNkZWZpbmUgUENJX1hfQ01EX1JFQURfNEsgMHgwMDBjCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9DTURfTUFYX1JFQUQgMHgwMDBjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9DTURfU1BMSVRfMSAweDAwMDAKICNkZWZpbmUgUENJX1hfQ01EX1NQTElUXzIgMHgwMDEwCiAjZGVmaW5lIFBDSV9YX0NNRF9TUExJVF8zIDB4MDAyMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfQ01EX1NQTElUXzQgMHgwMDMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9DTURfU1BMSVRfOCAweDAwNDAKICNkZWZpbmUgUENJX1hfQ01EX1NQTElUXzEyIDB4MDA1MAogI2RlZmluZSBQQ0lfWF9DTURfU1BMSVRfMTYgMHgwMDYwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9DTURfU1BMSVRfMzIgMHgwMDcwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9DTURfTUFYX1NQTElUIDB4MDA3MAogI2RlZmluZSBQQ0lfWF9DTURfVkVSU0lPTih4KSAoKCh4KSA+PiAxMikgJiAzKQogI2RlZmluZSBQQ0lfWF9TVEFUVVMgNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfU1RBVFVTX0RFVkZOIDB4MDAwMDAwZmYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX1NUQVRVU19CVVMgMHgwMDAwZmYwMAogI2RlZmluZSBQQ0lfWF9TVEFUVVNfNjRCSVQgMHgwMDAxMDAwMAogI2RlZmluZSBQQ0lfWF9TVEFUVVNfMTMzTUhaIDB4MDAwMjAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX1NUQVRVU19TUExfRElTQyAweDAwMDQwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9TVEFUVVNfVU5YX1NQTCAweDAwMDgwMDAwCiAjZGVmaW5lIFBDSV9YX1NUQVRVU19DT01QTEVYIDB4MDAxMDAwMDAKICNkZWZpbmUgUENJX1hfU1RBVFVTX01BWF9SRUFEIDB4MDA2MDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX1NUQVRVU19NQVhfU1BMSVQgMHgwMzgwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfU1RBVFVTX01BWF9DVU0gMHgxYzAwMDAwMAogI2RlZmluZSBQQ0lfWF9TVEFUVVNfU1BMX0VSUiAweDIwMDAwMDAwCiAjZGVmaW5lIFBDSV9YX1NUQVRVU18yNjZNSFogMHg0MDAwMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfU1RBVFVTXzUzM01IWiAweDgwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfWF9FQ0NfQ1NSIDgKICNkZWZpbmUgUENJX0NBUF9QQ0lYX1NJWkVPRl9WMCA4CiAjZGVmaW5lIFBDSV9DQVBfUENJWF9TSVpFT0ZfVjEgMjQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9DQVBfUENJWF9TSVpFT0ZfVjIgUENJX0NBUF9QQ0lYX1NJWkVPRl9WMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfQlJJREdFX1NTVEFUVVMgMgogI2RlZmluZSBQQ0lfWF9TU1RBVFVTXzY0QklUIDB4MDAwMQogI2RlZmluZSBQQ0lfWF9TU1RBVFVTXzEzM01IWiAweDAwMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX1NTVEFUVVNfRlJFUSAweDAzYzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX1NTVEFUVVNfVkVSUyAweDMwMDAKICNkZWZpbmUgUENJX1hfU1NUQVRVU19WMSAweDEwMDAKICNkZWZpbmUgUENJX1hfU1NUQVRVU19WMiAweDIwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9YX1NTVEFUVVNfMjY2TUhaIDB4NDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1hfU1NUQVRVU181MzNNSFogMHg4MDAwCiAjZGVmaW5lIFBDSV9YX0JSSURHRV9TVEFUVVMgNAogI2RlZmluZSBQQ0lfU1NWSURfVkVORE9SX0lEIDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9TU1ZJRF9ERVZJQ0VfSUQgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9GTEFHUyAyCiAjZGVmaW5lIFBDSV9FWFBfRkxBR1NfVkVSUyAweDAwMGYKICNkZWZpbmUgUENJX0VYUF9GTEFHU19UWVBFIDB4MDBmMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9UWVBFX0VORFBPSU5UIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9UWVBFX0xFR19FTkQgMHgxCiAjZGVmaW5lIFBDSV9FWFBfVFlQRV9ST09UX1BPUlQgMHg0CiAjZGVmaW5lIFBDSV9FWFBfVFlQRV9VUFNUUkVBTSAweDUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfVFlQRV9ET1dOU1RSRUFNIDB4NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9UWVBFX1BDSV9CUklER0UgMHg3CiAjZGVmaW5lIFBDSV9FWFBfVFlQRV9QQ0lFX0JSSURHRSAweDgKICNkZWZpbmUgUENJX0VYUF9UWVBFX1JDX0VORCAweDkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfVFlQRV9SQ19FQyAweGEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfRkxBR1NfU0xPVCAweDAxMDAKICNkZWZpbmUgUENJX0VYUF9GTEFHU19JUlEgMHgzZTAwCiAjZGVmaW5lIFBDSV9FWFBfREVWQ0FQIDQKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUEFZTE9BRCAweDAwMDAwMDA3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QQVlMT0FEIDB4MDcKLSNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUEhBTlRPTSAweDE4Ci0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQX0VYVF9UQUcgMHgyMAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9MMFMgMHgxYzAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUEhBTlRPTSAweDAwMDAwMDE4CisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX0VYVF9UQUcgMHgwMDAwMDAyMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9MMFMgMHgwMDAwMDFjMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9MMSAweDAwMDAwZTAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9MMSAweGUwMAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9BVE5fQlVUIDB4MTAwMAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9BVE5fSU5EIDB4MjAwMAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfSU5EIDB4NDAwMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9BVE5fQlVUIDB4MDAwMDEwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfQVROX0lORCAweDAwMDAyMDAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BXUl9JTkQgMHgwMDAwNDAwMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9SQkVSIDB4MDAwMDgwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1JCRVIgMHg4MDAwCi0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BXUl9WQUwgMHgzZmMwMDAwCi0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BXUl9TQ0wgMHhjMDAwMDAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BXUl9WQUwgMHgwM2ZjMDAwMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfU0NMIDB4MGMwMDAwMDAKICNkZWZpbmUgUENJX0VYUF9ERVZDQVBfRkxSIDB4MTAwMDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfREVWQ1RMIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX0NFUkUgMHgwMDAxCiAjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX05GRVJFIDB4MDAwMgogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9GRVJFIDB4MDAwNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9ERVZDVExfVVJSRSAweDAwMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1JFTEFYX0VOIDB4MDAxMAogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9QQVlMT0FEIDB4MDBlMAogI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9FWFRfVEFHIDB4MDEwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9ERVZDVExfUEhBTlRPTSAweDAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX0FVWF9QTUUgMHgwNDAwCiAjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX05PU05PT1BfRU4gMHgwODAwCiAjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1JFQURSUSAweDcwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX0JDUl9GTFIgMHg4MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0RFVlNUQSAxMAotI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9DRUQgMHgwMQotI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9ORkVEIDB4MDIKKyNkZWZpbmUgUENJX0VYUF9ERVZTVEFfQ0VEIDB4MDAwMQorI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9ORkVEIDB4MDAwMgorI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9GRUQgMHgwMDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9GRUQgMHgwNAotI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9VUkQgMHgwOAotI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9BVVhQRCAweDEwCi0jZGVmaW5lIFBDSV9FWFBfREVWU1RBX1RSUE5EIDB4MjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBX1VSRCAweDAwMDgKKyNkZWZpbmUgUENJX0VYUF9ERVZTVEFfQVVYUEQgMHgwMDEwCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBX1RSUE5EIDB4MDAyMAogI2RlZmluZSBQQ0lfRVhQX0xOS0NBUCAxMgotI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9TTFMgMHgwMDAwMDAwZgotI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9TTFNfMl81R0IgMHgxCi0jZGVmaW5lIFBDSV9FWFBfTE5LQ0FQX1NMU181XzBHQiAweDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQX1NMUyAweDAwMDAwMDBmCisjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQX1NMU18yXzVHQiAweDAwMDAwMDAxCisjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQX1NMU181XzBHQiAweDAwMDAwMDAyCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQX01MVyAweDAwMDAwM2YwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9BU1BNUyAweDAwMDAwYzAwCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQX0wwU0VMIDB4MDAwMDcwMDAKICNkZWZpbmUgUENJX0VYUF9MTktDQVBfTDFFTCAweDAwMDM4MDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9DTEtQTSAweDAwMDQwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9TREVSQyAweDAwMDgwMDAwCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQX0RMTExBUkMgMHgwMDEwMDAwMAogI2RlZmluZSBQQ0lfRVhQX0xOS0NBUF9MQk5DIDB4MDAyMDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQX1BOIDB4ZmYwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ1RMIDE2CiAjZGVmaW5lIFBDSV9FWFBfTE5LQ1RMX0FTUE1DIDB4MDAwMwotI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9BU1BNX0wwUyAweDAxCisjZGVmaW5lIFBDSV9FWFBfTE5LQ1RMX0FTUE1fTDBTIDB4MDAwMQorI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9BU1BNX0wxIDB4MDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUENJX0VYUF9MTktDVExfQVNQTV9MMSAweDAyCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ1RMX1JDQiAweDAwMDgKICNkZWZpbmUgUENJX0VYUF9MTktDVExfTEQgMHgwMDEwCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ1RMX1JMIDB4MDAyMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9MTktDVExfQ0NDIDB4MDA0MAotI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9FUyAweDAwODAKLSNkZWZpbmUgUENJX0VYUF9MTktDVExfQ0xLUkVRX0VOIDB4MTAwCi0jZGVmaW5lIFBDSV9FWFBfTE5LQ1RMX0hBV0QgMHgwMjAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9FUyAweDAwODAKKyNkZWZpbmUgUENJX0VYUF9MTktDVExfQ0xLUkVRX0VOIDB4MDEwMAorI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9IQVdEIDB4MDIwMAogI2RlZmluZSBQQ0lfRVhQX0xOS0NUTF9MQk1JRSAweDA0MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfTE5LQ1RMX0xBQklFIDB4MDgwMAogI2RlZmluZSBQQ0lfRVhQX0xOS1NUQSAxOAogI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9DTFMgMHgwMDBmCisjZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0NMU18yXzVHQiAweDAwMDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0NMU18yXzVHQiAweDAxCi0jZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0NMU181XzBHQiAweDAyCisjZGVmaW5lIFBDSV9FWFBfTE5LU1RBX0NMU181XzBHQiAweDAwMDIKKyNkZWZpbmUgUENJX0VYUF9MTktTVEFfQ0xTXzhfMEdCIDB4MDAwMwogI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9OTFcgMHgwM2YwCisjZGVmaW5lIFBDSV9FWFBfTE5LU1RBX05MV19YMSAweDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FWFBfTE5LU1RBX05MV19YMiAweDAwMjAKKyNkZWZpbmUgUENJX0VYUF9MTktTVEFfTkxXX1g0IDB4MDA0MAorI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9OTFdfWDggMHgwMDgwCiAjZGVmaW5lIFBDSV9FWFBfTE5LU1RBX05MV19TSElGVCA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9MVCAweDA4MDAKQEAgLTU0OSw5ICs1NTQsMTkgQEAKICNkZWZpbmUgUENJX0VYUF9TTFRDVExfQ0NJRSAweDAwMTAKICNkZWZpbmUgUENJX0VYUF9TTFRDVExfSFBJRSAweDAwMjAKICNkZWZpbmUgUENJX0VYUF9TTFRDVExfQUlDIDB4MDBjMAotI2RlZmluZSBQQ0lfRVhQX1NMVENUTF9QSUMgMHgwMzAwCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX0FUVE5fSU5EX09OIDB4MDA0MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYUF9TTFRDVExfQVRUTl9JTkRfQkxJTksgMHgwMDgwCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX0FUVE5fSU5EX09GRiAweDAwYzAKKyNkZWZpbmUgUENJX0VYUF9TTFRDVExfUElDIDB4MDMwMAorI2RlZmluZSBQQ0lfRVhQX1NMVENUTF9QV1JfSU5EX09OIDB4MDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYUF9TTFRDVExfUFdSX0lORF9CTElOSyAweDAyMDAKKyNkZWZpbmUgUENJX0VYUF9TTFRDVExfUFdSX0lORF9PRkYgMHgwMzAwCiAjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMX1BDQyAweDA0MDAKKyNkZWZpbmUgUENJX0VYUF9TTFRDVExfUFdSX09OIDB4MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYUF9TTFRDVExfUFdSX09GRiAweDA0MDAKICNkZWZpbmUgUENJX0VYUF9TTFRDVExfRUlDIDB4MDgwMAogI2RlZmluZSBQQ0lfRVhQX1NMVENUTF9ETExTQ0UgMHgxMDAwCiAjZGVmaW5lIFBDSV9FWFBfU0xUU1RBIDI2CkBAIC01NjgsNDYgKzU4Myw1MSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9TTFRTVEFfRExMU0MgMHgwMTAwCiAjZGVmaW5lIFBDSV9FWFBfUlRDVEwgMjgKLSNkZWZpbmUgUENJX0VYUF9SVENUTF9TRUNFRSAweDAxCi0jZGVmaW5lIFBDSV9FWFBfUlRDVExfU0VORkVFIDB4MDIKKyNkZWZpbmUgUENJX0VYUF9SVENUTF9TRUNFRSAweDAwMDEKKyNkZWZpbmUgUENJX0VYUF9SVENUTF9TRU5GRUUgMHgwMDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQ0lfRVhQX1JUQ1RMX1NFRkVFIDB4MDQKLSNkZWZpbmUgUENJX0VYUF9SVENUTF9QTUVJRSAweDA4Ci0jZGVmaW5lIFBDSV9FWFBfUlRDVExfQ1JTU1ZFIDB4MTAKKyNkZWZpbmUgUENJX0VYUF9SVENUTF9TRUZFRSAweDAwMDQKKyNkZWZpbmUgUENJX0VYUF9SVENUTF9QTUVJRSAweDAwMDgKKyNkZWZpbmUgUENJX0VYUF9SVENUTF9DUlNTVkUgMHgwMDEwCiAjZGVmaW5lIFBDSV9FWFBfUlRDQVAgMzAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfUlRTVEEgMzIKLSNkZWZpbmUgUENJX0VYUF9SVFNUQV9QTUUgMHgxMDAwMAotI2RlZmluZSBQQ0lfRVhQX1JUU1RBX1BFTkRJTkcgMHgyMDAwMAorI2RlZmluZSBQQ0lfRVhQX1JUU1RBX1BNRSAweDAwMDEwMDAwCisjZGVmaW5lIFBDSV9FWFBfUlRTVEFfUEVORElORyAweDAwMDIwMDAwCiAjZGVmaW5lIFBDSV9FWFBfREVWQ0FQMiAzNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUENJX0VYUF9ERVZDQVAyX0FSSSAweDIwCi0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQMl9MVFIgMHg4MDAKLSNkZWZpbmUgUENJX0VYUF9PQkZGX01BU0sgMHhjMDAwMAotI2RlZmluZSBQQ0lfRVhQX09CRkZfTVNHIDB4NDAwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVAyX0FSSSAweDAwMDAwMDIwCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQMl9MVFIgMHgwMDAwMDgwMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUDJfT0JGRl9NQVNLIDB4MDAwYzAwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVAyX09CRkZfTVNHIDB4MDAwNDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBDSV9FWFBfT0JGRl9XQUtFIDB4ODAwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVAyX09CRkZfV0FLRSAweDAwMDgwMDAwCiAjZGVmaW5lIFBDSV9FWFBfREVWQ1RMMiA0MAotI2RlZmluZSBQQ0lfRVhQX0RFVkNUTDJfQVJJIDB4MjAKLSNkZWZpbmUgUENJX0VYUF9JRE9fUkVRX0VOIDB4MTAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMMl9DT01QX1RJTUVPVVQgMHgwMDBmCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMMl9BUkkgMHgwMDIwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQ0lfRVhQX0lET19DTVBfRU4gMHgyMDAKLSNkZWZpbmUgUENJX0VYUF9MVFJfRU4gMHg0MDAKLSNkZWZpbmUgUENJX0VYUF9PQkZGX01TR0FfRU4gMHgyMDAwCi0jZGVmaW5lIFBDSV9FWFBfT0JGRl9NU0dCX0VOIDB4NDAwMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTDJfSURPX1JFUV9FTiAweDAxMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVEwyX0lET19DTVBfRU4gMHgwMjAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMMl9MVFJfRU4gMHgwNDAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMMl9PQkZGX01TR0FfRU4gMHgyMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQ0lfRVhQX09CRkZfV0FLRV9FTiAweDYwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVEwyX09CRkZfTVNHQl9FTiAweDQwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVEwyX09CRkZfV0FLRV9FTiAweDYwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZTVEEyIDQyCiAjZGVmaW5lIFBDSV9DQVBfRVhQX0VORFBPSU5UX1NJWkVPRl9WMiA0NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0VYUF9MTktDQVAyIDQ0Ci0jZGVmaW5lIFBDSV9FWFBfTE5LQ0FQMl9TTFNfMl81R0IgMHgwMgorI2RlZmluZSBQQ0lfRVhQX0xOS0NBUDJfU0xTXzJfNUdCIDB4MDAwMDAwMDIKKyNkZWZpbmUgUENJX0VYUF9MTktDQVAyX1NMU181XzBHQiAweDAwMDAwMDA0CisjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQMl9TTFNfOF8wR0IgMHgwMDAwMDAwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUENJX0VYUF9MTktDQVAyX1NMU181XzBHQiAweDA0Ci0jZGVmaW5lIFBDSV9FWFBfTE5LQ0FQMl9TTFNfOF8wR0IgMHgwOAotI2RlZmluZSBQQ0lfRVhQX0xOS0NBUDJfQ1JPU1NMSU5LIDB4MTAwCisjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQMl9DUk9TU0xJTksgMHgwMDAwMDEwMAogI2RlZmluZSBQQ0lfRVhQX0xOS0NUTDIgNDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfTE5LU1RBMiA1MAorI2RlZmluZSBQQ0lfRVhQX1NMVENBUDIgNTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMMiA1NgorI2RlZmluZSBQQ0lfRVhQX1NMVFNUQTIgNTgKICNkZWZpbmUgUENJX0VYVF9DQVBfSUQoaGVhZGVyKSAoaGVhZGVyICYgMHgwMDAwZmZmZikKICNkZWZpbmUgUENJX0VYVF9DQVBfVkVSKGhlYWRlcikgKChoZWFkZXIgPj4gMTYpICYgMHhmKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTcxMiwxOTggKzczMiwyMTkgQEAKICNkZWZpbmUgUENJX0VSUl9ST09UX0ZBVEFMX1JDViAweDAwMDAwMDQwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVJSX1JPT1RfRVJSX1NSQyA1MgotI2RlZmluZSBQQ0lfVkNfUE9SVF9SRUcxIDQKLSNkZWZpbmUgUENJX1ZDX1JFRzFfRVZDQyAweDcKLSNkZWZpbmUgUENJX1ZDX1BPUlRfUkVHMiA4CisjZGVmaW5lIFBDSV9WQ19QT1JUX0NBUDEgNAorI2RlZmluZSBQQ0lfVkNfQ0FQMV9FVkNDIDB4MDAwMDAwMDcKKyNkZWZpbmUgUENJX1ZDX0NBUDFfTFBFVkNDIDB4MDAwMDAwNzAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBDSV9WQ19SRUcyXzMyX1BIQVNFIDB4MgotI2RlZmluZSBQQ0lfVkNfUkVHMl82NF9QSEFTRSAweDQKLSNkZWZpbmUgUENJX1ZDX1JFRzJfMTI4X1BIQVNFIDB4OAorI2RlZmluZSBQQ0lfVkNfQ0FQMV9BUkJfU0laRSAweDAwMDAwYzAwCisjZGVmaW5lIFBDSV9WQ19QT1JUX0NBUDIgOAorI2RlZmluZSBQQ0lfVkNfQ0FQMl8zMl9QSEFTRSAweDAwMDAwMDAyCisjZGVmaW5lIFBDSV9WQ19DQVAyXzY0X1BIQVNFIDB4MDAwMDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9WQ19DQVAyXzEyOF9QSEFTRSAweDAwMDAwMDA4CisjZGVmaW5lIFBDSV9WQ19DQVAyX0FSQl9PRkYgMHhmZjAwMDAwMAogI2RlZmluZSBQQ0lfVkNfUE9SVF9DVFJMIDEyCisjZGVmaW5lIFBDSV9WQ19QT1JUX0NUUkxfTE9BRF9UQUJMRSAweDAwMDAwMDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkNfUE9SVF9TVEFUVVMgMTQKKyNkZWZpbmUgUENJX1ZDX1BPUlRfU1RBVFVTX1RBQkxFIDB4MDAwMDAwMDEKICNkZWZpbmUgUENJX1ZDX1JFU19DQVAgMTYKLSNkZWZpbmUgUENJX1ZDX1JFU19DVFJMIDIwCi0jZGVmaW5lIFBDSV9WQ19SRVNfU1RBVFVTIDI2CisjZGVmaW5lIFBDSV9WQ19SRVNfQ0FQXzMyX1BIQVNFIDB4MDAwMDAwMDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9WQ19SRVNfQ0FQXzY0X1BIQVNFIDB4MDAwMDAwMDQKKyNkZWZpbmUgUENJX1ZDX1JFU19DQVBfMTI4X1BIQVNFIDB4MDAwMDAwMDgKKyNkZWZpbmUgUENJX1ZDX1JFU19DQVBfMTI4X1BIQVNFX1RCIDB4MDAwMDAwMTAKKyNkZWZpbmUgUENJX1ZDX1JFU19DQVBfMjU2X1BIQVNFIDB4MDAwMDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9WQ19SRVNfQ0FQX0FSQl9PRkYgMHhmZjAwMDAwMAorI2RlZmluZSBQQ0lfVkNfUkVTX0NUUkwgMjAKKyNkZWZpbmUgUENJX1ZDX1JFU19DVFJMX0xPQURfVEFCTEUgMHgwMDAxMDAwMAorI2RlZmluZSBQQ0lfVkNfUkVTX0NUUkxfQVJCX1NFTEVDVCAweDAwMGUwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfVkNfUkVTX0NUUkxfSUQgMHgwNzAwMDAwMAorI2RlZmluZSBQQ0lfVkNfUkVTX0NUUkxfRU5BQkxFIDB4ODAwMDAwMDAKKyNkZWZpbmUgUENJX1ZDX1JFU19TVEFUVVMgMjYKKyNkZWZpbmUgUENJX1ZDX1JFU19TVEFUVVNfVEFCTEUgMHgwMDAwMDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1ZDX1JFU19TVEFUVVNfTkVHTyAweDAwMDAwMDAyCiAjZGVmaW5lIFBDSV9DQVBfVkNfQkFTRV9TSVpFT0YgMHgxMAogI2RlZmluZSBQQ0lfQ0FQX1ZDX1BFUl9WQ19TSVpFT0YgMHgwQwogI2RlZmluZSBQQ0lfUFdSX0RTUiA0Ci0jZGVmaW5lIFBDSV9QV1JfREFUQSA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfUFdSX0RBVEEgOAogI2RlZmluZSBQQ0lfUFdSX0RBVEFfQkFTRSh4KSAoKHgpICYgMHhmZikKICNkZWZpbmUgUENJX1BXUl9EQVRBX1NDQUxFKHgpICgoKHgpID4+IDgpICYgMykKICNkZWZpbmUgUENJX1BXUl9EQVRBX1BNX1NVQih4KSAoKCh4KSA+PiAxMCkgJiA3KQotI2RlZmluZSBQQ0lfUFdSX0RBVEFfUE1fU1RBVEUoeCkgKCgoeCkgPj4gMTMpICYgMykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9QV1JfREFUQV9QTV9TVEFURSh4KSAoKCh4KSA+PiAxMykgJiAzKQogI2RlZmluZSBQQ0lfUFdSX0RBVEFfVFlQRSh4KSAoKCh4KSA+PiAxNSkgJiA3KQogI2RlZmluZSBQQ0lfUFdSX0RBVEFfUkFJTCh4KSAoKCh4KSA+PiAxOCkgJiA3KQogI2RlZmluZSBQQ0lfUFdSX0NBUCAxMgotI2RlZmluZSBQQ0lfUFdSX0NBUF9CVURHRVQoeCkgKCh4KSAmIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfUFdSX0NBUF9CVURHRVQoeCkgKCh4KSAmIDEpCiAjZGVmaW5lIFBDSV9FWFRfQ0FQX1BXUl9TSVpFT0YgMTYKICNkZWZpbmUgUENJX1ZORFJfSEVBREVSIDQKICNkZWZpbmUgUENJX1ZORFJfSEVBREVSX0lEKHgpICgoeCkgJiAweGZmZmYpCi0jZGVmaW5lIFBDSV9WTkRSX0hFQURFUl9SRVYoeCkgKCgoeCkgPj4gMTYpICYgMHhmKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1ZORFJfSEVBREVSX1JFVih4KSAoKCh4KSA+PiAxNikgJiAweGYpCiAjZGVmaW5lIFBDSV9WTkRSX0hFQURFUl9MRU4oeCkgKCgoeCkgPj4gMjApICYgMHhmZmYpCiAjZGVmaW5lIEhUXzNCSVRfQ0FQX01BU0sgMHhFMAogI2RlZmluZSBIVF9DQVBUWVBFX1NMQVZFIDB4MDAKLSNkZWZpbmUgSFRfQ0FQVFlQRV9IT1NUIDB4MjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhUX0NBUFRZUEVfSE9TVCAweDIwCiAjZGVmaW5lIEhUXzVCSVRfQ0FQX01BU0sgMHhGOAogI2RlZmluZSBIVF9DQVBUWVBFX0lSUSAweDgwCiAjZGVmaW5lIEhUX0NBUFRZUEVfUkVNQVBQSU5HXzQwIDB4QTAKLSNkZWZpbmUgSFRfQ0FQVFlQRV9SRU1BUFBJTkdfNjQgMHhBMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFRfQ0FQVFlQRV9SRU1BUFBJTkdfNjQgMHhBMgogI2RlZmluZSBIVF9DQVBUWVBFX1VOSVRJRF9DTFVNUCAweDkwCiAjZGVmaW5lIEhUX0NBUFRZUEVfRVhUQ09ORiAweDk4CiAjZGVmaW5lIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcgMHhBOAotI2RlZmluZSBIVF9NU0lfRkxBR1MgMHgwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFRfTVNJX0ZMQUdTIDB4MDIKICNkZWZpbmUgSFRfTVNJX0ZMQUdTX0VOQUJMRSAweDEKICNkZWZpbmUgSFRfTVNJX0ZMQUdTX0ZJWEVEIDB4MgogI2RlZmluZSBIVF9NU0lfRklYRURfQUREUiAweDAwMDAwMDAwRkVFMDAwMDBVTEwKLSNkZWZpbmUgSFRfTVNJX0FERFJfTE8gMHgwNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFRfTVNJX0FERFJfTE8gMHgwNAogI2RlZmluZSBIVF9NU0lfQUREUl9MT19NQVNLIDB4RkZGMDAwMDAKICNkZWZpbmUgSFRfTVNJX0FERFJfSEkgMHgwOAogI2RlZmluZSBIVF9DQVBUWVBFX0RJUkVDVF9ST1VURSAweEIwCi0jZGVmaW5lIEhUX0NBUFRZUEVfVkNTRVQgMHhCOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFRfQ0FQVFlQRV9WQ1NFVCAweEI4CiAjZGVmaW5lIEhUX0NBUFRZUEVfRVJST1JfUkVUUlkgMHhDMAogI2RlZmluZSBIVF9DQVBUWVBFX0dFTjMgMHhEMAogI2RlZmluZSBIVF9DQVBUWVBFX1BNIDB4RTAKLSNkZWZpbmUgSFRfQ0FQX1NJWkVPRl9MT05HIDI4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVF9DQVBfU0laRU9GX0xPTkcgMjgKICNkZWZpbmUgSFRfQ0FQX1NJWkVPRl9TSE9SVCAyNAogI2RlZmluZSBQQ0lfQVJJX0NBUCAweDA0CiAjZGVmaW5lIFBDSV9BUklfQ0FQX01GVkMgMHgwMDAxCi0jZGVmaW5lIFBDSV9BUklfQ0FQX0FDUyAweDAwMDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9BUklfQ0FQX0FDUyAweDAwMDIKICNkZWZpbmUgUENJX0FSSV9DQVBfTkZOKHgpICgoKHgpID4+IDgpICYgMHhmZikKICNkZWZpbmUgUENJX0FSSV9DVFJMIDB4MDYKICNkZWZpbmUgUENJX0FSSV9DVFJMX01GVkMgMHgwMDAxCi0jZGVmaW5lIFBDSV9BUklfQ1RSTF9BQ1MgMHgwMDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfQVJJX0NUUkxfQUNTIDB4MDAwMgogI2RlZmluZSBQQ0lfQVJJX0NUUkxfRkcoeCkgKCgoeCkgPj4gNCkgJiA3KQogI2RlZmluZSBQQ0lfRVhUX0NBUF9BUklfU0laRU9GIDgKICNkZWZpbmUgUENJX0FUU19DQVAgMHgwNAotI2RlZmluZSBQQ0lfQVRTX0NBUF9RREVQKHgpICgoeCkgJiAweDFmKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0FUU19DQVBfUURFUCh4KSAoKHgpICYgMHgxZikKICNkZWZpbmUgUENJX0FUU19NQVhfUURFUCAzMgogI2RlZmluZSBQQ0lfQVRTX0NUUkwgMHgwNgogI2RlZmluZSBQQ0lfQVRTX0NUUkxfRU5BQkxFIDB4ODAwMAotI2RlZmluZSBQQ0lfQVRTX0NUUkxfU1RVKHgpICgoeCkgJiAweDFmKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0FUU19DVFJMX1NUVSh4KSAoKHgpICYgMHgxZikKICNkZWZpbmUgUENJX0FUU19NSU5fU1RVIDEyCiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0FUU19TSVpFT0YgOAogI2RlZmluZSBQQ0lfUFJJX0NUUkwgMHgwNAotI2RlZmluZSBQQ0lfUFJJX0NUUkxfRU5BQkxFIDB4MDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9QUklfQ1RSTF9FTkFCTEUgMHgwMQogI2RlZmluZSBQQ0lfUFJJX0NUUkxfUkVTRVQgMHgwMgogI2RlZmluZSBQQ0lfUFJJX1NUQVRVUyAweDA2CiAjZGVmaW5lIFBDSV9QUklfU1RBVFVTX1JGIDB4MDAxCi0jZGVmaW5lIFBDSV9QUklfU1RBVFVTX1VQUkdJIDB4MDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfUFJJX1NUQVRVU19VUFJHSSAweDAwMgogI2RlZmluZSBQQ0lfUFJJX1NUQVRVU19TVE9QUEVEIDB4MTAwCiAjZGVmaW5lIFBDSV9QUklfTUFYX1JFUSAweDA4CiAjZGVmaW5lIFBDSV9QUklfQUxMT0NfUkVRIDB4MGMKLSNkZWZpbmUgUENJX0VYVF9DQVBfUFJJX1NJWkVPRiAxNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYVF9DQVBfUFJJX1NJWkVPRiAxNgogI2RlZmluZSBQQ0lfUEFTSURfQ0FQIDB4MDQKICNkZWZpbmUgUENJX1BBU0lEX0NBUF9FWEVDIDB4MDIKICNkZWZpbmUgUENJX1BBU0lEX0NBUF9QUklWIDB4MDQKLSNkZWZpbmUgUENJX1BBU0lEX0NUUkwgMHgwNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1BBU0lEX0NUUkwgMHgwNgogI2RlZmluZSBQQ0lfUEFTSURfQ1RSTF9FTkFCTEUgMHgwMQogI2RlZmluZSBQQ0lfUEFTSURfQ1RSTF9FWEVDIDB4MDIKICNkZWZpbmUgUENJX1BBU0lEX0NUUkxfUFJJViAweDA0Ci0jZGVmaW5lIFBDSV9FWFRfQ0FQX1BBU0lEX1NJWkVPRiA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVhUX0NBUF9QQVNJRF9TSVpFT0YgOAogI2RlZmluZSBQQ0lfU1JJT1ZfQ0FQIDB4MDQKICNkZWZpbmUgUENJX1NSSU9WX0NBUF9WRk0gMHgwMQogI2RlZmluZSBQQ0lfU1JJT1ZfQ0FQX0lOVFIoeCkgKCh4KSA+PiAyMSkKLSNkZWZpbmUgUENJX1NSSU9WX0NUUkwgMHgwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1NSSU9WX0NUUkwgMHgwOAogI2RlZmluZSBQQ0lfU1JJT1ZfQ1RSTF9WRkUgMHgwMQogI2RlZmluZSBQQ0lfU1JJT1ZfQ1RSTF9WRk0gMHgwMgogI2RlZmluZSBQQ0lfU1JJT1ZfQ1RSTF9JTlRSIDB4MDQKLSNkZWZpbmUgUENJX1NSSU9WX0NUUkxfTVNFIDB4MDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9TUklPVl9DVFJMX01TRSAweDA4CiAjZGVmaW5lIFBDSV9TUklPVl9DVFJMX0FSSSAweDEwCiAjZGVmaW5lIFBDSV9TUklPVl9TVEFUVVMgMHgwYQogI2RlZmluZSBQQ0lfU1JJT1ZfU1RBVFVTX1ZGTSAweDAxCi0jZGVmaW5lIFBDSV9TUklPVl9JTklUSUFMX1ZGIDB4MGMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9TUklPVl9JTklUSUFMX1ZGIDB4MGMKICNkZWZpbmUgUENJX1NSSU9WX1RPVEFMX1ZGIDB4MGUKICNkZWZpbmUgUENJX1NSSU9WX05VTV9WRiAweDEwCiAjZGVmaW5lIFBDSV9TUklPVl9GVU5DX0xJTksgMHgxMgotI2RlZmluZSBQQ0lfU1JJT1ZfVkZfT0ZGU0VUIDB4MTQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9TUklPVl9WRl9PRkZTRVQgMHgxNAogI2RlZmluZSBQQ0lfU1JJT1ZfVkZfU1RSSURFIDB4MTYKICNkZWZpbmUgUENJX1NSSU9WX1ZGX0RJRCAweDFhCiAjZGVmaW5lIFBDSV9TUklPVl9TVVBfUEdTSVpFIDB4MWMKLSNkZWZpbmUgUENJX1NSSU9WX1NZU19QR1NJWkUgMHgyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1NSSU9WX1NZU19QR1NJWkUgMHgyMAogI2RlZmluZSBQQ0lfU1JJT1ZfQkFSIDB4MjQKICNkZWZpbmUgUENJX1NSSU9WX05VTV9CQVJTIDYKICNkZWZpbmUgUENJX1NSSU9WX1ZGTSAweDNjCi0jZGVmaW5lIFBDSV9TUklPVl9WRk1fQklSKHgpICgoeCkgJiA3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1NSSU9WX1ZGTV9CSVIoeCkgKCh4KSAmIDcpCiAjZGVmaW5lIFBDSV9TUklPVl9WRk1fT0ZGU0VUKHgpICgoeCkgJiB+NykKICNkZWZpbmUgUENJX1NSSU9WX1ZGTV9VQSAweDAKICNkZWZpbmUgUENJX1NSSU9WX1ZGTV9NSSAweDEKLSNkZWZpbmUgUENJX1NSSU9WX1ZGTV9NTyAweDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9TUklPVl9WRk1fTU8gMHgyCiAjZGVmaW5lIFBDSV9TUklPVl9WRk1fQVYgMHgzCiAjZGVmaW5lIFBDSV9FWFRfQ0FQX1NSSU9WX1NJWkVPRiA2NAogI2RlZmluZSBQQ0lfTFRSX01BWF9TTk9PUF9MQVQgMHg0Ci0jZGVmaW5lIFBDSV9MVFJfTUFYX05PU05PT1BfTEFUIDB4NgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0xUUl9NQVhfTk9TTk9PUF9MQVQgMHg2CiAjZGVmaW5lIFBDSV9MVFJfVkFMVUVfTUFTSyAweDAwMDAwM2ZmCiAjZGVmaW5lIFBDSV9MVFJfU0NBTEVfTUFTSyAweDAwMDAxYzAwCiAjZGVmaW5lIFBDSV9MVFJfU0NBTEVfU0hJRlQgMTAKLSNkZWZpbmUgUENJX0VYVF9DQVBfTFRSX1NJWkVPRiA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVhUX0NBUF9MVFJfU0laRU9GIDgKICNkZWZpbmUgUENJX0FDU19DQVAgMHgwNAogI2RlZmluZSBQQ0lfQUNTX1NWIDB4MDEKICNkZWZpbmUgUENJX0FDU19UQiAweDAyCi0jZGVmaW5lIFBDSV9BQ1NfUlIgMHgwNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0FDU19SUiAweDA0CiAjZGVmaW5lIFBDSV9BQ1NfQ1IgMHgwOAogI2RlZmluZSBQQ0lfQUNTX1VGIDB4MTAKICNkZWZpbmUgUENJX0FDU19FQyAweDIwCi0jZGVmaW5lIFBDSV9BQ1NfRFQgMHg0MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0FDU19EVCAweDQwCiAjZGVmaW5lIFBDSV9BQ1NfRUdSRVNTX0JJVFMgMHgwNQogI2RlZmluZSBQQ0lfQUNTX0NUUkwgMHgwNgogI2RlZmluZSBQQ0lfQUNTX0VHUkVTU19DVExfViAweDA4Ci0jZGVmaW5lIFBDSV9WU0VDX0hEUiA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfVlNFQ19IRFIgNAogI2RlZmluZSBQQ0lfVlNFQ19IRFJfTEVOX1NISUZUIDIwCiAjZGVmaW5lIFBDSV9TQVRBX1JFR1MgNAogI2RlZmluZSBQQ0lfU0FUQV9SRUdTX01BU0sgMHhGCi0jZGVmaW5lIFBDSV9TQVRBX1JFR1NfSU5MSU5FIDB4RgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1NBVEFfUkVHU19JTkxJTkUgMHhGCiAjZGVmaW5lIFBDSV9TQVRBX1NJWkVPRl9TSE9SVCA4CiAjZGVmaW5lIFBDSV9TQVRBX1NJWkVPRl9MT05HIDE2CiAjZGVmaW5lIFBDSV9SRUJBUl9DVFJMIDgKLSNkZWZpbmUgUENJX1JFQkFSX0NUUkxfTkJBUl9NQVNLICg3IDw8IDUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfUkVCQVJfQ1RSTF9OQkFSX01BU0sgKDcgPDwgNSkKICNkZWZpbmUgUENJX1JFQkFSX0NUUkxfTkJBUl9TSElGVCA1CiAjZGVmaW5lIFBDSV9EUEFfQ0FQIDQKICNkZWZpbmUgUENJX0RQQV9DQVBfU1VCU1RBVEVfTUFTSyAweDFGCi0jZGVmaW5lIFBDSV9EUEFfQkFTRV9TSVpFT0YgMTYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9EUEFfQkFTRV9TSVpFT0YgMTYKICNkZWZpbmUgUENJX1RQSF9DQVAgNAogI2RlZmluZSBQQ0lfVFBIX0NBUF9MT0NfTUFTSyAweDYwMAogI2RlZmluZSBQQ0lfVFBIX0xPQ19OT05FIDB4MDAwCi0jZGVmaW5lIFBDSV9UUEhfTE9DX0NBUCAweDIwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1RQSF9MT0NfQ0FQIDB4MjAwCiAjZGVmaW5lIFBDSV9UUEhfTE9DX01TSVggMHg0MDAKICNkZWZpbmUgUENJX1RQSF9DQVBfU1RfTUFTSyAweDA3RkYwMDAwCiAjZGVmaW5lIFBDSV9UUEhfQ0FQX1NUX1NISUZUIDE2Ci0jZGVmaW5lIFBDSV9UUEhfQkFTRV9TSVpFT0YgMTIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9UUEhfQkFTRV9TSVpFT0YgMTIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wZXJmX2V2ZW50LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCA1ZDExYmRhLi41OTIyY2JlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtODgsMTA3ICs4OCwxMzIgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9DT1VOVF9TV19BTElHTk1FTlRfRkFVTFRTID0gNywKICBQRVJGX0NPVU5UX1NXX0VNVUxBVElPTl9GQVVMVFMgPSA4LAorIFBFUkZfQ09VTlRfU1dfRFVNTVkgPSA5LAogIFBFUkZfQ09VTlRfU1dfTUFYLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSBwZXJmX2V2ZW50X3NhbXBsZV9mb3JtYXQgewogIFBFUkZfU0FNUExFX0lQID0gMVUgPDwgMCwKICBQRVJGX1NBTVBMRV9USUQgPSAxVSA8PCAxLAotIFBFUkZfU0FNUExFX1RJTUUgPSAxVSA8PCAyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1NBTVBMRV9USU1FID0gMVUgPDwgMiwKICBQRVJGX1NBTVBMRV9BRERSID0gMVUgPDwgMywKICBQRVJGX1NBTVBMRV9SRUFEID0gMVUgPDwgNCwKICBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4gPSAxVSA8PCA1LAotIFBFUkZfU0FNUExFX0lEID0gMVUgPDwgNiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9TQU1QTEVfSUQgPSAxVSA8PCA2LAogIFBFUkZfU0FNUExFX0NQVSA9IDFVIDw8IDcsCiAgUEVSRl9TQU1QTEVfUEVSSU9EID0gMVUgPDwgOCwKICBQRVJGX1NBTVBMRV9TVFJFQU1fSUQgPSAxVSA8PCA5LAotIFBFUkZfU0FNUExFX1JBVyA9IDFVIDw8IDEwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1NBTVBMRV9SQVcgPSAxVSA8PCAxMCwKICBQRVJGX1NBTVBMRV9CUkFOQ0hfU1RBQ0sgPSAxVSA8PCAxMSwKICBQRVJGX1NBTVBMRV9SRUdTX1VTRVIgPSAxVSA8PCAxMiwKICBQRVJGX1NBTVBMRV9TVEFDS19VU0VSID0gMVUgPDwgMTMsCi0gUEVSRl9TQU1QTEVfV0VJR0hUID0gMVUgPDwgMTQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfU0FNUExFX1dFSUdIVCA9IDFVIDw8IDE0LAogIFBFUkZfU0FNUExFX0RBVEFfU1JDID0gMVUgPDwgMTUsCi0gUEVSRl9TQU1QTEVfTUFYID0gMVUgPDwgMTYsCisgUEVSRl9TQU1QTEVfSURFTlRJRklFUiA9IDFVIDw8IDE2LAorIFBFUkZfU0FNUExFX1RSQU5TQUNUSU9OID0gMVUgPDwgMTcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfU0FNUExFX01BWCA9IDFVIDw8IDE4LAogfTsKIGVudW0gcGVyZl9icmFuY2hfc2FtcGxlX3R5cGUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX1NBTVBMRV9CUkFOQ0hfVVNFUiA9IDFVIDw8IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfU0FNUExFX0JSQU5DSF9LRVJORUwgPSAxVSA8PCAxLAogIFBFUkZfU0FNUExFX0JSQU5DSF9IViA9IDFVIDw8IDIsCiAgUEVSRl9TQU1QTEVfQlJBTkNIX0FOWSA9IDFVIDw8IDMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfU0FNUExFX0JSQU5DSF9BTllfQ0FMTCA9IDFVIDw8IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfU0FNUExFX0JSQU5DSF9BTllfUkVUVVJOID0gMVUgPDwgNSwKICBQRVJGX1NBTVBMRV9CUkFOQ0hfSU5EX0NBTEwgPSAxVSA8PCA2LAotIFBFUkZfU0FNUExFX0JSQU5DSF9NQVggPSAxVSA8PCA3LAorIFBFUkZfU0FNUExFX0JSQU5DSF9BQk9SVF9UWCA9IDFVIDw8IDcsCisgUEVSRl9TQU1QTEVfQlJBTkNIX0lOX1RYID0gMVUgPDwgOCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUEVSRl9TQU1QTEVfQlJBTkNIX05PX1RYID0gMVUgPDwgOSwKKyBQRVJGX1NBTVBMRV9CUkFOQ0hfTUFYID0gMVUgPDwgMTAsCiB9OwogI2RlZmluZSBQRVJGX1NBTVBMRV9CUkFOQ0hfUExNX0FMTCAgIChQRVJGX1NBTVBMRV9CUkFOQ0hfVVNFUnwgIFBFUkZfU0FNUExFX0JSQU5DSF9LRVJORUx8ICBQRVJGX1NBTVBMRV9CUkFOQ0hfSFYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBwZXJmX3NhbXBsZV9yZWdzX2FiaSB7CiAgUEVSRl9TQU1QTEVfUkVHU19BQklfTk9ORSA9IDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfU0FNUExFX1JFR1NfQUJJXzMyID0gMSwKICBQRVJGX1NBTVBMRV9SRUdTX0FCSV82NCA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK2VudW0geworIFBFUkZfVFhOX0VMSVNJT04gPSAoMSA8PCAwKSwKKyBQRVJGX1RYTl9UUkFOU0FDVElPTiA9ICgxIDw8IDEpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX1RYTl9TWU5DID0gKDEgPDwgMiksCisgUEVSRl9UWE5fQVNZTkMgPSAoMSA8PCAzKSwKKyBQRVJGX1RYTl9SRVRSWSA9ICgxIDw8IDQpLAorIFBFUkZfVFhOX0NPTkZMSUNUID0gKDEgPDwgNSksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfVFhOX0NBUEFDSVRZX1dSSVRFID0gKDEgPDwgNiksCisgUEVSRl9UWE5fQ0FQQUNJVFlfUkVBRCA9ICgxIDw8IDcpLAorIFBFUkZfVFhOX01BWCA9ICgxIDw8IDgpLAorIFBFUkZfVFhOX0FCT1JUX01BU0sgPSAoMHhmZmZmZmZmZlVMTCA8PCAzMiksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfVFhOX0FCT1JUX1NISUZUID0gMzIsCiB9OwogZW51bSBwZXJmX2V2ZW50X3JlYWRfZm9ybWF0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVEID0gMVUgPDwgMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HID0gMVUgPDwgMSwKICBQRVJGX0ZPUk1BVF9JRCA9IDFVIDw8IDIsCiAgUEVSRl9GT1JNQVRfR1JPVVAgPSAxVSA8PCAzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX0ZPUk1BVF9NQVggPSAxVSA8PCA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFBFUkZfQVRUUl9TSVpFX1ZFUjAgNjQKICNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMSA3MgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMiA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMyA5Ngogc3RydWN0IHBlcmZfZXZlbnRfYXR0ciB7CiAgX191MzIgdHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgY29uZmlnOwogIHVuaW9uIHsKICBfX3U2NCBzYW1wbGVfcGVyaW9kOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBzYW1wbGVfZnJlcTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKICBfX3U2NCBzYW1wbGVfdHlwZTsKICBfX3U2NCByZWFkX2Zvcm1hdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZGlzYWJsZWQgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbmhlcml0IDogMSwKICBwaW5uZWQgOiAxLAogIGV4Y2x1c2l2ZSA6IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGV4Y2x1ZGVfdXNlciA6IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGV4Y2x1ZGVfa2VybmVsIDogMSwKICBleGNsdWRlX2h2IDogMSwKICBleGNsdWRlX2lkbGUgOiAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbWFwIDogMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY29tbSA6IDEsCiAgZnJlcSA6IDEsCiAgaW5oZXJpdF9zdGF0IDogMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZW5hYmxlX29uX2V4ZWMgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB0YXNrIDogMSwKICB3YXRlcm1hcmsgOiAxLAogIHByZWNpc2VfaXAgOiAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtbWFwX2RhdGEgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzYW1wbGVfaWRfYWxsIDogMSwKICBleGNsdWRlX2hvc3QgOiAxLAogIGV4Y2x1ZGVfZ3Vlc3QgOiAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBleGNsdWRlX2NhbGxjaGFpbl9rZXJuZWwgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBleGNsdWRlX2NhbGxjaGFpbl91c2VyIDogMSwKLSBfX3Jlc2VydmVkXzEgOiA0MTsKKyBtbWFwMiA6IDEsCisgX19yZXNlcnZlZF8xIDogNDA7CiAgdW5pb24gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3YWtldXBfZXZlbnRzOwpAQCAtMjIyLDMzICsyNDcsNDMgQEAKICNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfU0VUX09VVFBVVCBfSU8gKCckJywgNSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1NFVF9GSUxURVIgX0lPVygnJCcsIDYsIGNoYXIgKikKKyNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfSUQgX0lPUignJCcsIDcsIF9fdTY0ICopCiBlbnVtIHBlcmZfZXZlbnRfaW9jX2ZsYWdzIHsKICBQRVJGX0lPQ19GTEFHX0dST1VQID0gMVUgPDwgMCwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBwZXJmX2V2ZW50X21tYXBfcGFnZSB7CiAgX191MzIgdmVyc2lvbjsKICBfX3UzMiBjb21wYXRfdmVyc2lvbjsKLSBfX3UzMiBsb2NrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBsb2NrOwogIF9fdTMyIGluZGV4OwogIF9fczY0IG9mZnNldDsKICBfX3U2NCB0aW1lX2VuYWJsZWQ7Ci0gX191NjQgdGltZV9ydW5uaW5nOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB0aW1lX3J1bm5pbmc7CiAgdW5pb24gewogIF9fdTY0IGNhcGFiaWxpdGllczsKLSBfX3U2NCBjYXBfdXNyX3RpbWUgOiAxLAotIGNhcF91c3JfcmRwbWMgOiAxLAorIHN0cnVjdCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGNhcF9fX19fcmVzIDogNjI7CisgX191NjQgY2FwX2JpdDAgOiAxLAorIGNhcF9iaXQwX2lzX2RlcHJlY2F0ZWQgOiAxLAorIGNhcF91c2VyX3JkcG1jIDogMSwKKyBjYXBfdXNlcl90aW1lIDogMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgY2FwX3VzZXJfdGltZV96ZXJvIDogMSwKKyBjYXBfX19fX3JlcyA6IDU5OwogIH07CisgfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgcG1jX3dpZHRoOwogIF9fdTE2IHRpbWVfc2hpZnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRpbWVfbXVsdDsKICBfX3U2NCB0aW1lX29mZnNldDsKLSBfX3U2NCBfX3Jlc2VydmVkWzEyMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHRpbWVfemVybzsKKyBfX3UzMiBzaXplOworIF9fdTggX19yZXNlcnZlZFsxMTgqOCs0XTsKICBfX3U2NCBkYXRhX2hlYWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRhdGFfdGFpbDsKQEAgLTI4NCw4NiArMzE5LDEwMCBAQAogIFBFUkZfUkVDT1JEX0ZPUksgPSA3LAogIFBFUkZfUkVDT1JEX1JFQUQgPSA4LAogIFBFUkZfUkVDT1JEX1NBTVBMRSA9IDksCi0gUEVSRl9SRUNPUkRfTUFYLAorIFBFUkZfUkVDT1JEX01NQVAyID0gMTAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFBFUkZfUkVDT1JEX01BWCwKIH07CiAjZGVmaW5lIFBFUkZfTUFYX1NUQUNLX0RFUFRIIDEyNwogZW51bSBwZXJmX2NhbGxjaGFpbl9jb250ZXh0IHsKLSBQRVJGX0NPTlRFWFRfSFYgPSAoX191NjQpLTMyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX0NPTlRFWFRfSFYgPSAoX191NjQpLTMyLAogIFBFUkZfQ09OVEVYVF9LRVJORUwgPSAoX191NjQpLTEyOCwKICBQRVJGX0NPTlRFWFRfVVNFUiA9IChfX3U2NCktNTEyLAogIFBFUkZfQ09OVEVYVF9HVUVTVCA9IChfX3U2NCktMjA0OCwKLSBQRVJGX0NPTlRFWFRfR1VFU1RfS0VSTkVMID0gKF9fdTY0KS0yMTc2LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBQRVJGX0NPTlRFWFRfR1VFU1RfS0VSTkVMID0gKF9fdTY0KS0yMTc2LAogIFBFUkZfQ09OVEVYVF9HVUVTVF9VU0VSID0gKF9fdTY0KS0yNTYwLAogIFBFUkZfQ09OVEVYVF9NQVggPSAoX191NjQpLTQwOTUsCiB9OwotI2RlZmluZSBQRVJGX0ZMQUdfRkRfTk9fR1JPVVAgKDFVIDw8IDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQRVJGX0ZMQUdfRkRfTk9fR1JPVVAgKDFVIDw8IDApCiAjZGVmaW5lIFBFUkZfRkxBR19GRF9PVVRQVVQgKDFVIDw8IDEpCiAjZGVmaW5lIFBFUkZfRkxBR19QSURfQ0dST1VQICgxVSA8PCAyKQorI2RlZmluZSBQRVJGX0ZMQUdfRkRfQ0xPRVhFQyAoMVUgPDwgMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB1bmlvbiBwZXJmX21lbV9kYXRhX3NyYyB7CiAgX191NjQgdmFsOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIF9fdTY0IG1lbV9vcDo1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtZW1fbHZsOjE0LAogIG1lbV9zbm9vcDo1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtZW1fbG9jazoyLAogIG1lbV9kdGxiOjcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1lbV9yc3ZkOjMxOwogIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgUEVSRl9NRU1fT1BfTkEgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fT1BfTE9BRCAweDAyCiAjZGVmaW5lIFBFUkZfTUVNX09QX1NUT1JFIDB4MDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX09QX1BGRVRDSCAweDA4CiAjZGVmaW5lIFBFUkZfTUVNX09QX0VYRUMgMHgxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fT1BfU0hJRlQgMAogI2RlZmluZSBQRVJGX01FTV9MVkxfTkEgMHgwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fTFZMX0hJVCAweDAyCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9NSVNTIDB4MDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9MMSAweDA4CiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9MRkIgMHgxMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fTFZMX0wyIDB4MjAKICNkZWZpbmUgUEVSRl9NRU1fTFZMX0wzIDB4NDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX0xWTF9MT0NfUkFNIDB4ODAKICNkZWZpbmUgUEVSRl9NRU1fTFZMX1JFTV9SQU0xIDB4MTAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9MVkxfUkVNX1JBTTIgMHgyMDAKICNkZWZpbmUgUEVSRl9NRU1fTFZMX1JFTV9DQ0UxIDB4NDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9MVkxfUkVNX0NDRTIgMHg4MDAKICNkZWZpbmUgUEVSRl9NRU1fTFZMX0lPIDB4MTAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fTFZMX1VOQyAweDIwMDAKICNkZWZpbmUgUEVSRl9NRU1fTFZMX1NISUZUIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX1NOT09QX05BIDB4MDEKICNkZWZpbmUgUEVSRl9NRU1fU05PT1BfTk9ORSAweDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9TTk9PUF9ISVQgMHgwNAogI2RlZmluZSBQRVJGX01FTV9TTk9PUF9NSVNTIDB4MDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX1NOT09QX0hJVE0gMHgxMAogI2RlZmluZSBQRVJGX01FTV9TTk9PUF9TSElGVCAxOQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fTE9DS19OQSAweDAxCiAjZGVmaW5lIFBFUkZfTUVNX0xPQ0tfTE9DS0VEIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX0xPQ0tfU0hJRlQgMjQKICNkZWZpbmUgUEVSRl9NRU1fVExCX05BIDB4MDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfTUVNX1RMQl9ISVQgMHgwMgogI2RlZmluZSBQRVJGX01FTV9UTEJfTUlTUyAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJGX01FTV9UTEJfTDEgMHgwOAogI2RlZmluZSBQRVJGX01FTV9UTEJfTDIgMHgxMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9NRU1fVExCX1dLIDB4MjAKICNkZWZpbmUgUEVSRl9NRU1fVExCX09TIDB4NDAKLSNkZWZpbmUgUEVSRl9NRU1fVExCX1NISUZUIDI2Ci0jZGVmaW5lIFBFUkZfTUVNX1MoYSwgcykgICAoKCh1NjQpUEVSRl9NRU1fIyNhIyNfIyNzKSA8PCBQRVJGX01FTV8jI2EjI19TSElGVCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBFUkZfTUVNX1RMQl9TSElGVCAyNgorI2RlZmluZSBQRVJGX01FTV9TKGEsIHMpICAgKCgoX191NjQpUEVSRl9NRU1fIyNhIyNfIyNzKSA8PCBQRVJGX01FTV8jI2EjI19TSElGVCkKK3N0cnVjdCBwZXJmX2JyYW5jaF9lbnRyeSB7CisgX191NjQgZnJvbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdG87CisgX191NjQgbWlzcHJlZDoxLAorIHByZWRpY3RlZDoxLAorIGluX3R4OjEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGFib3J0OjEsCisgcmVzZXJ2ZWQ6NjA7Cit9OwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wa3RfY2xzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BrdF9jbHMuaAppbmRleCBiYTQ0M2UxLi45MmVhMGRmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BrdF9jbHMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BrdF9jbHMuaApAQCAtMzcxLDY1ICszNzEsNzggQEAKIH07CiAjZGVmaW5lIFRDQV9DR1JPVVBfTUFYIChfX1RDQV9DR1JPVVBfTUFYIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKKyBUQ0FfQlBGX1VOU1BFQywKKyBUQ0FfQlBGX0FDVCwKKyBUQ0FfQlBGX1BPTElDRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX0JQRl9DTEFTU0lELAorIFRDQV9CUEZfT1BTX0xFTiwKKyBUQ0FfQlBGX09QUywKKyBfX1RDQV9CUEZfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIFRDQV9CUEZfTUFYIChfX1RDQV9CUEZfTUFYIC0gMSkKIHN0cnVjdCB0Y2ZfZW1hdGNoX3RyZWVfaGRyIHsKICBfX3UxNiBubWF0Y2hlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgcHJvZ2lkOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBUQ0FfRU1BVENIX1RSRUVfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfRU1BVENIX1RSRUVfSERSLAogIFRDQV9FTUFUQ0hfVFJFRV9MSVNULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX1RDQV9FTUFUQ0hfVFJFRV9NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0FfRU1BVENIX1RSRUVfTUFYIChfX1RDQV9FTUFUQ0hfVFJFRV9NQVggLSAxKQogc3RydWN0IHRjZl9lbWF0Y2hfaGRyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgbWF0Y2hpZDsKICBfX3UxNiBraW5kOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBmbGFnczsKICBfX3UxNiBwYWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVENGX0VNX1JFTF9FTkQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENGX0VNX1JFTF9BTkQgKDE8PDApCiAjZGVmaW5lIFRDRl9FTV9SRUxfT1IgKDE8PDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0ZfRU1fSU5WRVJUICgxPDwyKQogI2RlZmluZSBUQ0ZfRU1fU0lNUExFICgxPDwzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENGX0VNX1JFTF9NQVNLIDMKICNkZWZpbmUgVENGX0VNX1JFTF9WQUxJRCh2KSAoKCh2KSAmIFRDRl9FTV9SRUxfTUFTSykgIT0gVENGX0VNX1JFTF9NQVNLKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIFRDRl9MQVlFUl9MSU5LLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0ZfTEFZRVJfTkVUV09SSywKICBUQ0ZfTEFZRVJfVFJBTlNQT1JULAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX1RDRl9MQVlFUl9NQVgKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0ZfTEFZRVJfTUFYIChfX1RDRl9MQVlFUl9NQVggLSAxKQogI2RlZmluZSBUQ0ZfRU1fQ09OVEFJTkVSIDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDRl9FTV9DTVAgMQogI2RlZmluZSBUQ0ZfRU1fTkJZVEUgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENGX0VNX1UzMiAzCiAjZGVmaW5lIFRDRl9FTV9NRVRBIDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDRl9FTV9URVhUIDUKICNkZWZpbmUgVENGX0VNX1ZMQU4gNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENGX0VNX0NBTklEIDcKICNkZWZpbmUgVENGX0VNX0lQU0VUIDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDRl9FTV9NQVggOAogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDRl9FTV9QUk9HX1RDCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIFRDRl9FTV9PUE5EX0VRLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0ZfRU1fT1BORF9HVCwKICBUQ0ZfRU1fT1BORF9MVAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BrdF9zY2hlZC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wa3Rfc2NoZWQuaAppbmRleCAzOTMzNWNlLi41YjY0MDk2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BrdF9zY2hlZC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcGt0X3NjaGVkLmgKQEAgLTU2LDI2MiArNTYsMjc3IEBACiAjZGVmaW5lIFRDX0hfUk9PVCAoMHhGRkZGRkZGRlUpCiAjZGVmaW5lIFRDX0hfSU5HUkVTUyAoMHhGRkZGRkZGMVUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB0Y19saW5rX2xheWVyIHsKKyBUQ19MSU5LTEFZRVJfVU5BV0FSRSwKKyBUQ19MSU5LTEFZRVJfRVRIRVJORVQsCisgVENfTElOS0xBWUVSX0FUTSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBUQ19MSU5LTEFZRVJfTUFTSyAweDBGCiBzdHJ1Y3QgdGNfcmF0ZXNwZWMgewogIHVuc2lnbmVkIGNoYXIgY2VsbF9sb2c7Ci0gdW5zaWduZWQgY2hhciBfX3Jlc2VydmVkOwotIHVuc2lnbmVkIHNob3J0IG92ZXJoZWFkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGxpbmtsYXllcjsKKyB1bnNpZ25lZCBzaG9ydCBvdmVyaGVhZDsKICBzaG9ydCBjZWxsX2FsaWduOwogIHVuc2lnbmVkIHNob3J0IG1wdTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmF0ZTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ19SVEFCX1NJWkUgMTAyNAogc3RydWN0IHRjX3NpemVzcGVjIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBjZWxsX2xvZzsKICB1bnNpZ25lZCBjaGFyIHNpemVfbG9nOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaG9ydCBjZWxsX2FsaWduOwogIGludCBvdmVyaGVhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGxpbmtsYXllcjsKICB1bnNpZ25lZCBpbnQgbXB1OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbXR1OwogIHVuc2lnbmVkIGludCB0c2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogZW51bSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9TVEFCX1VOU1BFQywKICBUQ0FfU1RBQl9CQVNFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfU1RBQl9EQVRBLAogIF9fVENBX1NUQUJfTUFYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVENBX1NUQUJfTUFYIChfX1RDQV9TVEFCX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRjX2ZpZm9fcW9wdCB7CiAgX191MzIgbGltaXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVENRX1BSSU9fQkFORFMgMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDUV9NSU5fUFJJT19CQU5EUyAyCiBzdHJ1Y3QgdGNfcHJpb19xb3B0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGJhbmRzOwogIF9fdTggcHJpb21hcFtUQ19QUklPX01BWCsxXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHRjX211bHRpcV9xb3B0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgYmFuZHM7CiAgX191MTYgbWF4X2JhbmRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFRDUV9QTFVHX0JVRkZFUiAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ1FfUExVR19SRUxFQVNFX09ORSAxCiAjZGVmaW5lIFRDUV9QTFVHX1JFTEVBU0VfSU5ERUZJTklURSAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ1FfUExVR19MSU1JVCAzCiBzdHJ1Y3QgdGNfcGx1Z19xb3B0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGFjdGlvbjsKICBfX3UzMiBsaW1pdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHRjX3RiZl9xb3B0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRjX3JhdGVzcGVjIHJhdGU7CiAgc3RydWN0IHRjX3JhdGVzcGVjIHBlYWtyYXRlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsaW1pdDsKICBfX3UzMiBidWZmZXI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG10dTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgVENBX1RCRl9VTlNQRUMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9UQkZfUEFSTVMsCiAgVENBX1RCRl9SVEFCLAotIFRDQV9UQkZfUFRBQiwKLSBfX1RDQV9UQkZfTUFYLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfVEJGX1BUQUIsCisgVENBX1RCRl9SQVRFNjQsCisgVENBX1RCRl9QUkFURTY0LAorIFRDQV9UQkZfQlVSU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9UQkZfUEJVUlNULAorIF9fVENBX1RCRl9NQVgsCiB9OwogI2RlZmluZSBUQ0FfVEJGX01BWCAoX19UQ0FfVEJGX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRjX3NmcV9xb3B0IHsKICB1bnNpZ25lZCBxdWFudHVtOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcGVydHVyYl9wZXJpb2Q7CiAgX191MzIgbGltaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGRpdmlzb3I7CiAgdW5zaWduZWQgZmxvd3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB0Y19zZnFyZWRfc3RhdHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwcm9iX2Ryb3A7CiAgX191MzIgZm9yY2VkX2Ryb3A7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHByb2JfbWFyazsKICBfX3UzMiBmb3JjZWRfbWFyazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcHJvYl9tYXJrX2hlYWQ7CiAgX191MzIgZm9yY2VkX21hcmtfaGVhZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHRjX3NmcV9xb3B0X3YxIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRjX3NmcV9xb3B0IHYwOwogIHVuc2lnbmVkIGludCBkZXB0aDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGhlYWRkcm9wOwogIF9fdTMyIGxpbWl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxdGhfbWluOwogIF9fdTMyIHF0aF9tYXg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgV2xvZzsKICB1bnNpZ25lZCBjaGFyIFBsb2c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgU2NlbGxfbG9nOwogIHVuc2lnbmVkIGNoYXIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9QOwogIHN0cnVjdCB0Y19zZnFyZWRfc3RhdHMgc3RhdHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB0Y19zZnFfeHN0YXRzIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgYWxsb3Q7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIFRDQV9SRURfVU5TUEVDLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfUkVEX1BBUk1TLAogIFRDQV9SRURfU1RBQiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX1JFRF9NQVhfUCwKICBfX1RDQV9SRURfTUFYLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFRDQV9SRURfTUFYIChfX1RDQV9SRURfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNfcmVkX3FvcHQgewogIF9fdTMyIGxpbWl0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxdGhfbWluOwogIF9fdTMyIHF0aF9tYXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgV2xvZzsKICB1bnNpZ25lZCBjaGFyIFBsb2c7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgU2NlbGxfbG9nOwogIHVuc2lnbmVkIGNoYXIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ19SRURfRUNOIDEKICNkZWZpbmUgVENfUkVEX0hBUkREUk9QIDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDX1JFRF9BREFQVEFUSVZFIDQKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRjX3JlZF94c3RhdHMgewogIF9fdTMyIGVhcmx5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwZHJvcDsKICBfX3UzMiBvdGhlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWFya2VkOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1BWF9EUHMgMTYKIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfR1JFRF9VTlNQRUMsCiAgVENBX0dSRURfUEFSTVMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9HUkVEX1NUQUIsCiAgVENBX0dSRURfRFBTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfR1JFRF9NQVhfUCwKICBfX1RDQV9HUkVEX01BWCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBUQ0FfR1JFRF9NQVggKF9fVENBX0dSRURfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNfZ3JlZF9xb3B0IHsKICBfX3UzMiBsaW1pdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcXRoX21pbjsKICBfX3UzMiBxdGhfbWF4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBEUDsKICBfX3UzMiBiYWNrbG9nOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxYXZlOwogIF9fdTMyIGZvcmNlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZWFybHk7CiAgX191MzIgb3RoZXI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBkcm9wOwogIF9fdTggV2xvZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBQbG9nOwogIF9fdTggU2NlbGxfbG9nOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHByaW87CiAgX191MzIgcGFja2V0czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYnl0ZXNpbjsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRjX2dyZWRfc29wdCB7CiAgX191MzIgRFBzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBkZWZfRFA7CiAgX191OCBncmlvOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGZsYWdzOwogIF9fdTE2IHBhZDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIGVudW0gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfQ0hPS0VfVU5TUEVDLAogIFRDQV9DSE9LRV9QQVJNUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0NIT0tFX1NUQUIsCiAgVENBX0NIT0tFX01BWF9QLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX1RDQV9DSE9LRV9NQVgsCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENBX0NIT0tFX01BWCAoX19UQ0FfQ0hPS0VfTUFYIC0gMSkKIHN0cnVjdCB0Y19jaG9rZV9xb3B0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbGltaXQ7CiAgX191MzIgcXRoX21pbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcXRoX21heDsKICB1bnNpZ25lZCBjaGFyIFdsb2c7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgUGxvZzsKICB1bnNpZ25lZCBjaGFyIFNjZWxsX2xvZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBmbGFnczsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRjX2Nob2tlX3hzdGF0cyB7CiAgX191MzIgZWFybHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBkcm9wOwogIF9fdTMyIG90aGVyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXJrZWQ7CiAgX191MzIgbWF0Y2hlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBUQ19IVEJfTlVNUFJJTyA4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ19IVEJfTUFYREVQVEggOAogI2RlZmluZSBUQ19IVEJfUFJPVE9WRVIgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19odGJfb3B0IHsKICBzdHJ1Y3QgdGNfcmF0ZXNwZWMgcmF0ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRjX3JhdGVzcGVjIGNlaWw7CiAgX191MzIgYnVmZmVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjYnVmZmVyOwogIF9fdTMyIHF1YW50dW07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxldmVsOwogIF9fdTMyIHByaW87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB0Y19odGJfZ2xvYiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHZlcnNpb247CiAgX191MzIgcmF0ZTJxdWFudHVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBkZWZjbHM7CiAgX191MzIgZGVidWc7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGRpcmVjdF9wa3RzOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBUQ0FfSFRCX1VOU1BFQywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0hUQl9QQVJNUywKICBUQ0FfSFRCX0lOSVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9IVEJfQ1RBQiwKICBUQ0FfSFRCX1JUQUIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9IVEJfRElSRUNUX1FMRU4sCisgVENBX0hUQl9SQVRFNjQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9IVEJfQ0VJTDY0LAogIF9fVENBX0hUQl9NQVgsCiB9OwogI2RlZmluZSBUQ0FfSFRCX01BWCAoX19UQ0FfSFRCX01BWCAtIDEpCkBAIC00NzQsMjEzICs0ODksMzAwIEBACiAgVENBX05FVEVNX0xPU1MsCiAgVENBX05FVEVNX1JBVEUsCiAgVENBX05FVEVNX0VDTiwKLSBfX1RDQV9ORVRFTV9NQVgsCisgVENBX05FVEVNX1JBVEU2NCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19UQ0FfTkVURU1fTUFYLAogfTsKICNkZWZpbmUgVENBX05FVEVNX01BWCAoX19UQ0FfTkVURU1fTUFYIC0gMSkKIHN0cnVjdCB0Y19uZXRlbV9xb3B0IHsKLSBfX3UzMiBsYXRlbmN5OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBsYXRlbmN5OwogIF9fdTMyIGxpbWl0OwogIF9fdTMyIGxvc3M7CiAgX191MzIgZ2FwOwotIF9fdTMyIGR1cGxpY2F0ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZHVwbGljYXRlOwogIF9fdTMyIGppdHRlcjsKIH07CiBzdHJ1Y3QgdGNfbmV0ZW1fY29yciB7Ci0gX191MzIgZGVsYXlfY29ycjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZGVsYXlfY29ycjsKICBfX3UzMiBsb3NzX2NvcnI7CiAgX191MzIgZHVwX2NvcnI7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19uZXRlbV9yZW9yZGVyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcHJvYmFiaWxpdHk7CiAgX191MzIgY29ycmVsYXRpb247CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19uZXRlbV9jb3JydXB0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcHJvYmFiaWxpdHk7CiAgX191MzIgY29ycmVsYXRpb247CiB9Owotc3RydWN0IHRjX25ldGVtX3JhdGUgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB0Y19uZXRlbV9yYXRlIHsKICBfX3UzMiByYXRlOwogIF9fczMyIHBhY2tldF9vdmVyaGVhZDsKICBfX3UzMiBjZWxsX3NpemU7Ci0gX19zMzIgY2VsbF9vdmVyaGVhZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zMzIgY2VsbF9vdmVyaGVhZDsKIH07CiBlbnVtIHsKICBORVRFTV9MT1NTX1VOU1BFQywKLSBORVRFTV9MT1NTX0dJLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBORVRFTV9MT1NTX0dJLAogIE5FVEVNX0xPU1NfR0UsCiAgX19ORVRFTV9MT1NTX01BWAogfTsKLSNkZWZpbmUgTkVURU1fTE9TU19NQVggKF9fTkVURU1fTE9TU19NQVggLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkVURU1fTE9TU19NQVggKF9fTkVURU1fTE9TU19NQVggLSAxKQogc3RydWN0IHRjX25ldGVtX2dpbW9kZWwgewogIF9fdTMyIHAxMzsKICBfX3UzMiBwMzE7Ci0gX191MzIgcDMyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwMzI7CiAgX191MzIgcDE0OwogIF9fdTMyIHAyMzsKIH07Ci1zdHJ1Y3QgdGNfbmV0ZW1fZ2Vtb2RlbCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHRjX25ldGVtX2dlbW9kZWwgewogIF9fdTMyIHA7CiAgX191MzIgcjsKICBfX3UzMiBoOwotIF9fdTMyIGsxOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBrMTsKIH07CiAjZGVmaW5lIE5FVEVNX0RJU1RfU0NBTEUgODE5MgogI2RlZmluZSBORVRFTV9ESVNUX01BWCAxNjM4NAotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgVENBX0RSUl9VTlNQRUMsCiAgVENBX0RSUl9RVUFOVFVNLAogIF9fVENBX0RSUl9NQVgKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgVENBX0RSUl9NQVggKF9fVENBX0RSUl9NQVggLSAxKQogc3RydWN0IHRjX2Rycl9zdGF0cyB7CiAgX191MzIgZGVmaWNpdDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgVENfUU9QVF9CSVRNQVNLIDE1CiAjZGVmaW5lIFRDX1FPUFRfTUFYX1FVRVVFIDE2CiBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgewotIF9fdTggbnVtX3RjOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IG51bV90YzsKICBfX3U4IHByaW9fdGNfbWFwW1RDX1FPUFRfQklUTUFTSyArIDFdOwogIF9fdTggaHc7CiAgX191MTYgY291bnRbVENfUU9QVF9NQVhfUVVFVUVdOwotIF9fdTE2IG9mZnNldFtUQ19RT1BUX01BWF9RVUVVRV07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IG9mZnNldFtUQ19RT1BUX01BWF9RVUVVRV07CiB9OwogZW51bSB7CiAgVENBX1NGQl9VTlNQRUMsCi0gVENBX1NGQl9QQVJNUywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX1NGQl9QQVJNUywKICBfX1RDQV9TRkJfTUFYLAogfTsKICNkZWZpbmUgVENBX1NGQl9NQVggKF9fVENBX1NGQl9NQVggLSAxKQotc3RydWN0IHRjX3NmYl9xb3B0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdGNfc2ZiX3FvcHQgewogIF9fdTMyIHJlaGFzaF9pbnRlcnZhbDsKICBfX3UzMiB3YXJtdXBfdGltZTsKICBfX3UzMiBtYXg7Ci0gX191MzIgYmluX3NpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGJpbl9zaXplOwogIF9fdTMyIGluY3JlbWVudDsKICBfX3UzMiBkZWNyZW1lbnQ7CiAgX191MzIgbGltaXQ7Ci0gX191MzIgcGVuYWx0eV9yYXRlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwZW5hbHR5X3JhdGU7CiAgX191MzIgcGVuYWx0eV9idXJzdDsKIH07CiBzdHJ1Y3QgdGNfc2ZiX3hzdGF0cyB7Ci0gX191MzIgZWFybHlkcm9wOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBlYXJseWRyb3A7CiAgX191MzIgcGVuYWx0eWRyb3A7CiAgX191MzIgYnVja2V0ZHJvcDsKICBfX3UzMiBxdWV1ZWRyb3A7Ci0gX191MzIgY2hpbGRkcm9wOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjaGlsZGRyb3A7CiAgX191MzIgbWFya2VkOwogIF9fdTMyIG1heHFsZW47CiAgX191MzIgbWF4cHJvYjsKLSBfX3UzMiBhdmdwcm9iOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBhdmdwcm9iOwogfTsKICNkZWZpbmUgU0ZCX01BWF9QUk9CIDB4RkZGRgogZW51bSB7Ci0gVENBX1FGUV9VTlNQRUMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9RRlFfVU5TUEVDLAogIFRDQV9RRlFfV0VJR0hULAogIFRDQV9RRlFfTE1BWCwKICBfX1RDQV9RRlFfTUFYCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFRDQV9RRlFfTUFYIChfX1RDQV9RRlFfTUFYIC0gMSkKIHN0cnVjdCB0Y19xZnFfc3RhdHMgewogIF9fdTMyIHdlaWdodDsKLSBfX3UzMiBsbWF4OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBsbWF4OwogfTsKIGVudW0gewogIFRDQV9DT0RFTF9VTlNQRUMsCi0gVENBX0NPREVMX1RBUkdFVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX0NPREVMX1RBUkdFVCwKICBUQ0FfQ09ERUxfTElNSVQsCiAgVENBX0NPREVMX0lOVEVSVkFMLAogIFRDQV9DT0RFTF9FQ04sCi0gX19UQ0FfQ09ERUxfTUFYCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fVENBX0NPREVMX01BWAogfTsKICNkZWZpbmUgVENBX0NPREVMX01BWCAoX19UQ0FfQ09ERUxfTUFYIC0gMSkKIHN0cnVjdCB0Y19jb2RlbF94c3RhdHMgewotIF9fdTMyIG1heHBhY2tldDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbWF4cGFja2V0OwogIF9fdTMyIGNvdW50OwogIF9fdTMyIGxhc3Rjb3VudDsKICBfX3UzMiBsZGVsYXk7Ci0gX19zMzIgZHJvcF9uZXh0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3MzMiBkcm9wX25leHQ7CiAgX191MzIgZHJvcF9vdmVybGltaXQ7CiAgX191MzIgZWNuX21hcms7CiAgX191MzIgZHJvcHBpbmc7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBlbnVtIHsKICBUQ0FfRlFfQ09ERUxfVU5TUEVDLAogIFRDQV9GUV9DT0RFTF9UQVJHRVQsCi0gVENBX0ZRX0NPREVMX0xJTUlULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfRlFfQ09ERUxfTElNSVQsCiAgVENBX0ZRX0NPREVMX0lOVEVSVkFMLAogIFRDQV9GUV9DT0RFTF9FQ04sCiAgVENBX0ZRX0NPREVMX0ZMT1dTLAotIFRDQV9GUV9DT0RFTF9RVUFOVFVNLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfRlFfQ09ERUxfUVVBTlRVTSwKICBfX1RDQV9GUV9DT0RFTF9NQVgKIH07CiAjZGVmaW5lIFRDQV9GUV9DT0RFTF9NQVggKF9fVENBX0ZRX0NPREVMX01BWCAtIDEpCi1lbnVtIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBUQ0FfRlFfQ09ERUxfWFNUQVRTX1FESVNDLAogIFRDQV9GUV9DT0RFTF9YU1RBVFNfQ0xBU1MsCiB9Owotc3RydWN0IHRjX2ZxX2NvZGVsX3FkX3N0YXRzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdGNfZnFfY29kZWxfcWRfc3RhdHMgewogIF9fdTMyIG1heHBhY2tldDsKICBfX3UzMiBkcm9wX292ZXJsaW1pdDsKICBfX3UzMiBlY25fbWFyazsKLSBfX3UzMiBuZXdfZmxvd19jb3VudDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbmV3X2Zsb3dfY291bnQ7CiAgX191MzIgbmV3X2Zsb3dzX2xlbjsKICBfX3UzMiBvbGRfZmxvd3NfbGVuOwogfTsKLXN0cnVjdCB0Y19mcV9jb2RlbF9jbF9zdGF0cyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHRjX2ZxX2NvZGVsX2NsX3N0YXRzIHsKICBfX3MzMiBkZWZpY2l0OwogIF9fdTMyIGxkZWxheTsKICBfX3UzMiBjb3VudDsKLSBfX3UzMiBsYXN0Y291bnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGxhc3Rjb3VudDsKICBfX3UzMiBkcm9wcGluZzsKICBfX3MzMiBkcm9wX25leHQ7CiB9Owotc3RydWN0IHRjX2ZxX2NvZGVsX3hzdGF0cyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHRjX2ZxX2NvZGVsX3hzdGF0cyB7CiAgX191MzIgdHlwZTsKICB1bmlvbiB7CiAgc3RydWN0IHRjX2ZxX2NvZGVsX3FkX3N0YXRzIHFkaXNjX3N0YXRzOwotIHN0cnVjdCB0Y19mcV9jb2RlbF9jbF9zdGF0cyBjbGFzc19zdGF0czsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHRjX2ZxX2NvZGVsX2NsX3N0YXRzIGNsYXNzX3N0YXRzOwogIH07CiB9OworZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9GUV9VTlNQRUMsCisgVENBX0ZRX1BMSU1JVCwKKyBUQ0FfRlFfRkxPV19QTElNSVQsCisgVENBX0ZRX1FVQU5UVU0sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9GUV9JTklUSUFMX1FVQU5UVU0sCisgVENBX0ZRX1JBVEVfRU5BQkxFLAorIFRDQV9GUV9GTE9XX0RFRkFVTFRfUkFURSwKKyBUQ0FfRlFfRkxPV19NQVhfUkFURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX0ZRX0JVQ0tFVFNfTE9HLAorIFRDQV9GUV9GTE9XX1JFRklMTF9ERUxBWSwKKyBfX1RDQV9GUV9NQVgKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQ0FfRlFfTUFYIChfX1RDQV9GUV9NQVggLSAxKQorc3RydWN0IHRjX2ZxX3FkX3N0YXRzIHsKKyBfX3U2NCBnY19mbG93czsKKyBfX3U2NCBoaWdocHJpb19wYWNrZXRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCB0Y3BfcmV0cmFuczsKKyBfX3U2NCB0aHJvdHRsZWQ7CisgX191NjQgZmxvd3NfcGxpbWl0OworIF9fdTY0IHBrdHNfdG9vX2xvbmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGFsbG9jYXRpb25fZXJyb3JzOworIF9fczY0IHRpbWVfbmV4dF9kZWxheWVkX2Zsb3c7CisgX191MzIgZmxvd3M7CisgX191MzIgaW5hY3RpdmVfZmxvd3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHRocm90dGxlZF9mbG93czsKKyBfX3UzMiBwYWQ7Cit9OworZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9ISEZfVU5TUEVDLAorIFRDQV9ISEZfQkFDS0xPR19MSU1JVCwKKyBUQ0FfSEhGX1FVQU5UVU0sCisgVENBX0hIRl9ISF9GTE9XU19MSU1JVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX0hIRl9SRVNFVF9USU1FT1VULAorIFRDQV9ISEZfQURNSVRfQllURVMsCisgVENBX0hIRl9FVklDVF9USU1FT1VULAorIFRDQV9ISEZfTk9OX0hIX1dFSUdIVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19UQ0FfSEhGX01BWAorfTsKKyNkZWZpbmUgVENBX0hIRl9NQVggKF9fVENBX0hIRl9NQVggLSAxKQorc3RydWN0IHRjX2hoZl94c3RhdHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBkcm9wX292ZXJsaW1pdDsKKyBfX3UzMiBoaF9vdmVybGltaXQ7CisgX191MzIgaGhfdG90X2NvdW50OworIF9fdTMyIGhoX2N1cl9jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworZW51bSB7CisgVENBX1BJRV9VTlNQRUMsCisgVENBX1BJRV9UQVJHRVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDQV9QSUVfTElNSVQsCisgVENBX1BJRV9UVVBEQVRFLAorIFRDQV9QSUVfQUxQSEEsCisgVENBX1BJRV9CRVRBLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfUElFX0VDTiwKKyBUQ0FfUElFX0JZVEVNT0RFLAorIF9fVENBX1BJRV9NQVgKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQ0FfUElFX01BWCAoX19UQ0FfUElFX01BWCAtIDEpCitzdHJ1Y3QgdGNfcGllX3hzdGF0cyB7CisgX191MzIgcHJvYjsKKyBfX3UzMiBkZWxheTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgYXZnX2RxX3JhdGU7CisgX191MzIgcGFja2V0c19pbjsKKyBfX3UzMiBkcm9wcGVkOworIF9fdTMyIG92ZXJsaW1pdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbWF4cTsKKyBfX3UzMiBlY25fbWFyazsKK307CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BwcC1pb2N0bC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wcHAtaW9jdGwuaAppbmRleCA0M2M0YzUwLi5mYTI0MjNjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3BwcC1pb2N0bC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHBwLWlvY3RsLmgKQEAgLTIxLDExMCArMjEsMTExIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpbmNsdWRlIDxsaW51eC9wcHBfZGVmcy5oPgogI2RlZmluZSBTQ19DT01QX1BST1QgMHgwMDAwMDAwMQogI2RlZmluZSBTQ19DT01QX0FDIDB4MDAwMDAwMDIKICNkZWZpbmUgU0NfQ09NUF9UQ1AgMHgwMDAwMDAwNAotI2RlZmluZSBTQ19OT19UQ1BfQ0NJRCAweDAwMDAwMDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQ19OT19UQ1BfQ0NJRCAweDAwMDAwMDA4CiAjZGVmaW5lIFNDX1JFSl9DT01QX0FDIDB4MDAwMDAwMTAKICNkZWZpbmUgU0NfUkVKX0NPTVBfVENQIDB4MDAwMDAwMjAKICNkZWZpbmUgU0NfQ0NQX09QRU4gMHgwMDAwMDA0MAotI2RlZmluZSBTQ19DQ1BfVVAgMHgwMDAwMDA4MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NfQ0NQX1VQIDB4MDAwMDAwODAKICNkZWZpbmUgU0NfRU5BQkxFX0lQIDB4MDAwMDAxMDAKICNkZWZpbmUgU0NfTE9PUF9UUkFGRklDIDB4MDAwMDAyMDAKICNkZWZpbmUgU0NfTVVMVElMSU5LIDB4MDAwMDA0MDAKLSNkZWZpbmUgU0NfTVBfU0hPUlRTRVEgMHgwMDAwMDgwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NfTVBfU0hPUlRTRVEgMHgwMDAwMDgwMAogI2RlZmluZSBTQ19DT01QX1JVTiAweDAwMDAxMDAwCiAjZGVmaW5lIFNDX0RFQ09NUF9SVU4gMHgwMDAwMjAwMAogI2RlZmluZSBTQ19NUF9YU0hPUlRTRVEgMHgwMDAwNDAwMAotI2RlZmluZSBTQ19ERUJVRyAweDAwMDEwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQ19ERUJVRyAweDAwMDEwMDAwCiAjZGVmaW5lIFNDX0xPR19JTlBLVCAweDAwMDIwMDAwCiAjZGVmaW5lIFNDX0xPR19PVVRQS1QgMHgwMDA0MDAwMAogI2RlZmluZSBTQ19MT0dfUkFXSU4gMHgwMDA4MDAwMAotI2RlZmluZSBTQ19MT0dfRkxVU0ggMHgwMDEwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NfTE9HX0ZMVVNIIDB4MDAxMDAwMDAKICNkZWZpbmUgU0NfU1lOQyAweDAwMjAwMDAwCiAjZGVmaW5lIFNDX01VU1RfQ09NUCAweDAwNDAwMDAwCiAjZGVmaW5lIFNDX01BU0sgMHgwZjYwMGZmZgotI2RlZmluZSBTQ19YTUlUX0JVU1kgMHgxMDAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NfWE1JVF9CVVNZIDB4MTAwMDAwMDAKICNkZWZpbmUgU0NfUkNWX09ERFAgMHgwODAwMDAwMAogI2RlZmluZSBTQ19SQ1ZfRVZOUCAweDA0MDAwMDAwCiAjZGVmaW5lIFNDX1JDVl9CN18xIDB4MDIwMDAwMDAKLSNkZWZpbmUgU0NfUkNWX0I3XzAgMHgwMTAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NfUkNWX0I3XzAgMHgwMTAwMDAwMAogI2RlZmluZSBTQ19EQ19GRVJST1IgMHgwMDgwMDAwMAogI2RlZmluZSBTQ19EQ19FUlJPUiAweDAwNDAwMDAwCiBzdHJ1Y3QgbnBpb2N0bCB7Ci0gaW50IHByb3RvY29sOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgcHJvdG9jb2w7CiAgZW51bSBOUG1vZGUgbW9kZTsKIH07CiBzdHJ1Y3QgcHBwX29wdGlvbl9kYXRhIHsKLSBfX3U4IF9fdXNlciAqcHRyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IF9fdXNlciAqcHRyOwogIF9fdTMyIGxlbmd0aDsKICBpbnQgdHJhbnNtaXQ7CiB9Owotc3RydWN0IHBwcG9sMnRwX2lvY19zdGF0cyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHBwcG9sMnRwX2lvY19zdGF0cyB7CiAgX191MTYgdHVubmVsX2lkOwogIF9fdTE2IHNlc3Npb25faWQ7CiAgX191MzIgdXNpbmdfaXBzZWM6MTsKLSBfX2FsaWduZWRfdTY0IHR4X3BhY2tldHM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYWxpZ25lZF91NjQgdHhfcGFja2V0czsKICBfX2FsaWduZWRfdTY0IHR4X2J5dGVzOwogIF9fYWxpZ25lZF91NjQgdHhfZXJyb3JzOwogIF9fYWxpZ25lZF91NjQgcnhfcGFja2V0czsKLSBfX2FsaWduZWRfdTY0IHJ4X2J5dGVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2FsaWduZWRfdTY0IHJ4X2J5dGVzOwogIF9fYWxpZ25lZF91NjQgcnhfc2VxX2Rpc2NhcmRzOwogIF9fYWxpZ25lZF91NjQgcnhfb29zX3BhY2tldHM7CiAgX19hbGlnbmVkX3U2NCByeF9lcnJvcnM7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFBQUElPQ0dGTEFHUyBfSU9SKCd0JywgOTAsIGludCkKICNkZWZpbmUgUFBQSU9DU0ZMQUdTIF9JT1coJ3QnLCA4OSwgaW50KQogI2RlZmluZSBQUFBJT0NHQVNZTkNNQVAgX0lPUigndCcsIDg4LCBpbnQpCi0jZGVmaW5lIFBQUElPQ1NBU1lOQ01BUCBfSU9XKCd0JywgODcsIGludCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBQUElPQ1NBU1lOQ01BUCBfSU9XKCd0JywgODcsIGludCkKICNkZWZpbmUgUFBQSU9DR1VOSVQgX0lPUigndCcsIDg2LCBpbnQpCiAjZGVmaW5lIFBQUElPQ0dSQVNZTkNNQVAgX0lPUigndCcsIDg1LCBpbnQpCiAjZGVmaW5lIFBQUElPQ1NSQVNZTkNNQVAgX0lPVygndCcsIDg0LCBpbnQpCi0jZGVmaW5lIFBQUElPQ0dNUlUgX0lPUigndCcsIDgzLCBpbnQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBJT0NHTVJVIF9JT1IoJ3QnLCA4MywgaW50KQogI2RlZmluZSBQUFBJT0NTTVJVIF9JT1coJ3QnLCA4MiwgaW50KQogI2RlZmluZSBQUFBJT0NTTUFYQ0lEIF9JT1coJ3QnLCA4MSwgaW50KQogI2RlZmluZSBQUFBJT0NHWEFTWU5DTUFQIF9JT1IoJ3QnLCA4MCwgZXh0X2FjY20pCi0jZGVmaW5lIFBQUElPQ1NYQVNZTkNNQVAgX0lPVygndCcsIDc5LCBleHRfYWNjbSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBQUElPQ1NYQVNZTkNNQVAgX0lPVygndCcsIDc5LCBleHRfYWNjbSkKICNkZWZpbmUgUFBQSU9DWEZFUlVOSVQgX0lPKCd0JywgNzgpCiAjZGVmaW5lIFBQUElPQ1NDT01QUkVTUyBfSU9XKCd0JywgNzcsIHN0cnVjdCBwcHBfb3B0aW9uX2RhdGEpCiAjZGVmaW5lIFBQUElPQ0dOUE1PREUgX0lPV1IoJ3QnLCA3Niwgc3RydWN0IG5waW9jdGwpCi0jZGVmaW5lIFBQUElPQ1NOUE1PREUgX0lPVygndCcsIDc1LCBzdHJ1Y3QgbnBpb2N0bCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBQUElPQ1NOUE1PREUgX0lPVygndCcsIDc1LCBzdHJ1Y3QgbnBpb2N0bCkKICNkZWZpbmUgUFBQSU9DU1BBU1MgX0lPVygndCcsIDcxLCBzdHJ1Y3Qgc29ja19mcHJvZykKICNkZWZpbmUgUFBQSU9DU0FDVElWRSBfSU9XKCd0JywgNzAsIHN0cnVjdCBzb2NrX2Zwcm9nKQogI2RlZmluZSBQUFBJT0NHREVCVUcgX0lPUigndCcsIDY1LCBpbnQpCi0jZGVmaW5lIFBQUElPQ1NERUJVRyBfSU9XKCd0JywgNjQsIGludCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBQUElPQ1NERUJVRyBfSU9XKCd0JywgNjQsIGludCkKICNkZWZpbmUgUFBQSU9DR0lETEUgX0lPUigndCcsIDYzLCBzdHJ1Y3QgcHBwX2lkbGUpCiAjZGVmaW5lIFBQUElPQ05FV1VOSVQgX0lPV1IoJ3QnLCA2MiwgaW50KQogI2RlZmluZSBQUFBJT0NBVFRBQ0ggX0lPVygndCcsIDYxLCBpbnQpCi0jZGVmaW5lIFBQUElPQ0RFVEFDSCBfSU9XKCd0JywgNjAsIGludCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBQUElPQ0RFVEFDSCBfSU9XKCd0JywgNjAsIGludCkKICNkZWZpbmUgUFBQSU9DU01SUlUgX0lPVygndCcsIDU5LCBpbnQpCiAjZGVmaW5lIFBQUElPQ0NPTk5FQ1QgX0lPVygndCcsIDU4LCBpbnQpCiAjZGVmaW5lIFBQUElPQ0RJU0NPTk4gX0lPKCd0JywgNTcpCi0jZGVmaW5lIFBQUElPQ0FUVENIQU4gX0lPVygndCcsIDU2LCBpbnQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBJT0NBVFRDSEFOIF9JT1coJ3QnLCA1NiwgaW50KQogI2RlZmluZSBQUFBJT0NHQ0hBTiBfSU9SKCd0JywgNTUsIGludCkKICNkZWZpbmUgUFBQSU9DR0wyVFBTVEFUUyBfSU9SKCd0JywgNTQsIHN0cnVjdCBwcHBvbDJ0cF9pb2Nfc3RhdHMpCiAjZGVmaW5lIFNJT0NHUFBQU1RBVFMgKFNJT0NERVZQUklWQVRFICsgMCkKLSNkZWZpbmUgU0lPQ0dQUFBWRVIgKFNJT0NERVZQUklWQVRFICsgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NHUFBQVkVSIChTSU9DREVWUFJJVkFURSArIDEpCiAjZGVmaW5lIFNJT0NHUFBQQ1NUQVRTIChTSU9DREVWUFJJVkFURSArIDIpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHJjdGwuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHJjdGwuaAppbmRleCA4N2M3ZTJmLi5hMTI3YjVhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ByY3RsLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wcmN0bC5oCkBAIC0xMTcsNyArMTE3LDQgQEAKICNkZWZpbmUgUFJfR0VUX05PX05FV19QUklWUyAzOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFJfR0VUX1RJRF9BRERSRVNTIDQwCi0jZGVmaW5lIFBSX1NFVF9WTUEgMHg1MzU2NGQ0MQotI2RlZmluZSBQUl9TRVRfVk1BX0FOT05fTkFNRSAwCiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3B0cmFjZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9wdHJhY2UuaAppbmRleCBhMjFmYmFjLi42ZjcxYjZkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3B0cmFjZS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcHRyYWNlLmgKQEAgLTU0LDMwICs1NCwzMiBAQAogIF9fdTMyIGZsYWdzOwogIF9fczMyIG5yOwogfTsKLSNkZWZpbmUgUFRSQUNFX1BFRUtTSUdJTkZPX1NIQVJFRCAoMSA8PCAwKQorI2RlZmluZSBQVFJBQ0VfR0VUU0lHTUFTSyAweDQyMGEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBUUkFDRV9TRVRTSUdNQVNLIDB4NDIwYgorI2RlZmluZSBQVFJBQ0VfUEVFS1NJR0lORk9fU0hBUkVEICgxIDw8IDApCiAjZGVmaW5lIFBUUkFDRV9FVkVOVF9GT1JLIDEKICNkZWZpbmUgUFRSQUNFX0VWRU5UX1ZGT1JLIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9FVkVOVF9DTE9ORSAzCiAjZGVmaW5lIFBUUkFDRV9FVkVOVF9FWEVDIDQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9FVkVOVF9WRk9SS19ET05FIDUKICNkZWZpbmUgUFRSQUNFX0VWRU5UX0VYSVQgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFRSQUNFX0VWRU5UX1NFQ0NPTVAgNwogI2RlZmluZSBQVFJBQ0VfRVZFTlRfU1RPUCAxMjgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9PX1RSQUNFU1lTR09PRCAxCiAjZGVmaW5lIFBUUkFDRV9PX1RSQUNFRk9SSyAoMSA8PCBQVFJBQ0VfRVZFTlRfRk9SSykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9PX1RSQUNFVkZPUksgKDEgPDwgUFRSQUNFX0VWRU5UX1ZGT1JLKQogI2RlZmluZSBQVFJBQ0VfT19UUkFDRUNMT05FICgxIDw8IFBUUkFDRV9FVkVOVF9DTE9ORSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9PX1RSQUNFRVhFQyAoMSA8PCBQVFJBQ0VfRVZFTlRfRVhFQykKICNkZWZpbmUgUFRSQUNFX09fVFJBQ0VWRk9SS0RPTkUgKDEgPDwgUFRSQUNFX0VWRU5UX1ZGT1JLX0RPTkUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJBQ0VfT19UUkFDRUVYSVQgKDEgPDwgUFRSQUNFX0VWRU5UX0VYSVQpCiAjZGVmaW5lIFBUUkFDRV9PX1RSQUNFU0VDQ09NUCAoMSA8PCBQVFJBQ0VfRVZFTlRfU0VDQ09NUCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9PX0VYSVRLSUxMICgxIDw8IDIwKQogI2RlZmluZSBQVFJBQ0VfT19NQVNLICgweDAwMDAwMGZmIHwgUFRSQUNFX09fRVhJVEtJTEwpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmFpZC9tZF9wLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3JhaWQvbWRfcC5oCmluZGV4IDUyYTFkYWIuLmZjNmUyMGUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmFpZC9tZF9wLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9yYWlkL21kX3AuaApAQCAtMTksMTc4ICsxOSwxODEgQEAKICNpZm5kZWYgX01EX1BfSAogI2RlZmluZSBfTURfUF9ICiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNkZWZpbmUgTURfUkVTRVJWRURfQllURVMgKDY0ICogMTAyNCkKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRF9SRVNFUlZFRF9CWVRFUyAoNjQgKiAxMDI0KQogI2RlZmluZSBNRF9SRVNFUlZFRF9TRUNUT1JTIChNRF9SRVNFUlZFRF9CWVRFUyAvIDUxMikKICNkZWZpbmUgTURfTkVXX1NJWkVfU0VDVE9SUyh4KSAoKHggJiB+KE1EX1JFU0VSVkVEX1NFQ1RPUlMgLSAxKSkgLSBNRF9SRVNFUlZFRF9TRUNUT1JTKQogI2RlZmluZSBNRF9TQl9CWVRFUyA0MDk2Ci0jZGVmaW5lIE1EX1NCX1dPUkRTIChNRF9TQl9CWVRFUyAvIDQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRF9TQl9XT1JEUyAoTURfU0JfQllURVMgLyA0KQogI2RlZmluZSBNRF9TQl9TRUNUT1JTIChNRF9TQl9CWVRFUyAvIDUxMikKICNkZWZpbmUgTURfU0JfR0VORVJJQ19PRkZTRVQgMAogI2RlZmluZSBNRF9TQl9QRVJTT05BTElUWV9PRkZTRVQgNjQKLSNkZWZpbmUgTURfU0JfRElTS1NfT0ZGU0VUIDEyOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTURfU0JfRElTS1NfT0ZGU0VUIDEyOAogI2RlZmluZSBNRF9TQl9ERVNDUklQVE9SX09GRlNFVCA5OTIKICNkZWZpbmUgTURfU0JfR0VORVJJQ19DT05TVEFOVF9XT1JEUyAzMgogI2RlZmluZSBNRF9TQl9HRU5FUklDX1NUQVRFX1dPUkRTIDMyCi0jZGVmaW5lIE1EX1NCX0dFTkVSSUNfV09SRFMgKE1EX1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMgKyBNRF9TQl9HRU5FUklDX1NUQVRFX1dPUkRTKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTURfU0JfR0VORVJJQ19XT1JEUyAoTURfU0JfR0VORVJJQ19DT05TVEFOVF9XT1JEUyArIE1EX1NCX0dFTkVSSUNfU1RBVEVfV09SRFMpCiAjZGVmaW5lIE1EX1NCX1BFUlNPTkFMSVRZX1dPUkRTIDY0CiAjZGVmaW5lIE1EX1NCX0RFU0NSSVBUT1JfV09SRFMgMzIKICNkZWZpbmUgTURfU0JfRElTS1MgMjcKLSNkZWZpbmUgTURfU0JfRElTS1NfV09SRFMgKE1EX1NCX0RJU0tTKk1EX1NCX0RFU0NSSVBUT1JfV09SRFMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRF9TQl9ESVNLU19XT1JEUyAoTURfU0JfRElTS1MqTURfU0JfREVTQ1JJUFRPUl9XT1JEUykKICNkZWZpbmUgTURfU0JfUkVTRVJWRURfV09SRFMgKDEwMjQgLSBNRF9TQl9HRU5FUklDX1dPUkRTIC0gTURfU0JfUEVSU09OQUxJVFlfV09SRFMgLSBNRF9TQl9ESVNLU19XT1JEUyAtIE1EX1NCX0RFU0NSSVBUT1JfV09SRFMpCiAjZGVmaW5lIE1EX1NCX0VRVUFMX1dPUkRTIChNRF9TQl9HRU5FUklDX1dPUkRTICsgTURfU0JfUEVSU09OQUxJVFlfV09SRFMgKyBNRF9TQl9ESVNLU19XT1JEUykKICNkZWZpbmUgTURfRElTS19GQVVMVFkgMAotI2RlZmluZSBNRF9ESVNLX0FDVElWRSAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRF9ESVNLX0FDVElWRSAxCiAjZGVmaW5lIE1EX0RJU0tfU1lOQyAyCiAjZGVmaW5lIE1EX0RJU0tfUkVNT1ZFRCAzCiAjZGVmaW5lIE1EX0RJU0tfV1JJVEVNT1NUTFkgOQotdHlwZWRlZiBzdHJ1Y3QgbWRwX2RldmljZV9kZXNjcmlwdG9yX3MgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgc3RydWN0IG1kcF9kZXZpY2VfZGVzY3JpcHRvcl9zIHsKICBfX3UzMiBudW1iZXI7CiAgX191MzIgbWFqb3I7CiAgX191MzIgbWlub3I7Ci0gX191MzIgcmFpZF9kaXNrOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiByYWlkX2Rpc2s7CiAgX191MzIgc3RhdGU7CiAgX191MzIgcmVzZXJ2ZWRbTURfU0JfREVTQ1JJUFRPUl9XT1JEUyAtIDVdOwogfSBtZHBfZGlza190OwotI2RlZmluZSBNRF9TQl9NQUdJQyAweGE5MmI0ZWZjCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRF9TQl9NQUdJQyAweGE5MmI0ZWZjCiAjZGVmaW5lIE1EX1NCX0NMRUFOIDAKICNkZWZpbmUgTURfU0JfRVJST1JTIDEKICNkZWZpbmUgTURfU0JfQklUTUFQX1BSRVNFTlQgOAotdHlwZWRlZiBzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfcyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfcyB7CiAgX191MzIgbWRfbWFnaWM7CiAgX191MzIgbWFqb3JfdmVyc2lvbjsKICBfX3UzMiBtaW5vcl92ZXJzaW9uOwotIF9fdTMyIHBhdGNoX3ZlcnNpb247CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHBhdGNoX3ZlcnNpb247CiAgX191MzIgZ3ZhbGlkX3dvcmRzOwogIF9fdTMyIHNldF91dWlkMDsKICBfX3UzMiBjdGltZTsKLSBfX3UzMiBsZXZlbDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbGV2ZWw7CiAgX191MzIgc2l6ZTsKICBfX3UzMiBucl9kaXNrczsKICBfX3UzMiByYWlkX2Rpc2tzOwotIF9fdTMyIG1kX21pbm9yOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBtZF9taW5vcjsKICBfX3UzMiBub3RfcGVyc2lzdGVudDsKICBfX3UzMiBzZXRfdXVpZDE7CiAgX191MzIgc2V0X3V1aWQyOwotIF9fdTMyIHNldF91dWlkMzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgc2V0X3V1aWQzOwogIF9fdTMyIGdzdGF0ZV9jcmVzZXJ2ZWRbTURfU0JfR0VORVJJQ19DT05TVEFOVF9XT1JEUyAtIDE2XTsKICBfX3UzMiB1dGltZTsKICBfX3UzMiBzdGF0ZTsKLSBfX3UzMiBhY3RpdmVfZGlza3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGFjdGl2ZV9kaXNrczsKICBfX3UzMiB3b3JraW5nX2Rpc2tzOwogIF9fdTMyIGZhaWxlZF9kaXNrczsKICBfX3UzMiBzcGFyZV9kaXNrczsKLSBfX3UzMiBzYl9jc3VtOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBzYl9jc3VtOwogI2lmIGRlZmluZWQoX19CWVRFX09SREVSKSA/IF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4gOiBkZWZpbmVkKF9fQklHX0VORElBTikKICBfX3UzMiBldmVudHNfaGk7CiAgX191MzIgZXZlbnRzX2xvOwotIF9fdTMyIGNwX2V2ZW50c19oaTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgY3BfZXZlbnRzX2hpOwogIF9fdTMyIGNwX2V2ZW50c19sbzsKICNlbGlmIGRlZmluZWQoX19CWVRFX09SREVSKSA/IF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4gOiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKICBfX3UzMiBldmVudHNfbG87Ci0gX191MzIgZXZlbnRzX2hpOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBldmVudHNfaGk7CiAgX191MzIgY3BfZXZlbnRzX2xvOwogIF9fdTMyIGNwX2V2ZW50c19oaTsKICNlbHNlCi0jZXJyb3IgdW5zcGVjaWZpZWQgZW5kaWFubmVzcwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlcnJvciB1bnNwZWNpZmllZCBlbmRpYW5uZXNzCiAjZW5kaWYKICBfX3UzMiByZWNvdmVyeV9jcDsKICBfX3U2NCByZXNoYXBlX3Bvc2l0aW9uOwotIF9fdTMyIG5ld19sZXZlbDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbmV3X2xldmVsOwogIF9fdTMyIGRlbHRhX2Rpc2tzOwogIF9fdTMyIG5ld19sYXlvdXQ7CiAgX191MzIgbmV3X2NodW5rOwotIF9fdTMyIGdzdGF0ZV9zcmVzZXJ2ZWRbTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUyAtIDE4XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZ3N0YXRlX3NyZXNlcnZlZFtNRF9TQl9HRU5FUklDX1NUQVRFX1dPUkRTIC0gMThdOwogIF9fdTMyIGxheW91dDsKICBfX3UzMiBjaHVua19zaXplOwogIF9fdTMyIHJvb3RfcHY7Ci0gX191MzIgcm9vdF9ibG9jazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcm9vdF9ibG9jazsKICBfX3UzMiBwc3RhdGVfcmVzZXJ2ZWRbTURfU0JfUEVSU09OQUxJVFlfV09SRFMgLSA0XTsKICBtZHBfZGlza190IGRpc2tzW01EX1NCX0RJU0tTXTsKICBfX3UzMiByZXNlcnZlZFtNRF9TQl9SRVNFUlZFRF9XT1JEU107Ci0gbWRwX2Rpc2tfdCB0aGlzX2Rpc2s7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG1kcF9kaXNrX3QgdGhpc19kaXNrOwogfSBtZHBfc3VwZXJfdDsKICNkZWZpbmUgTURfU1VQRVJCTE9DS18xX1RJTUVfU0VDX01BU0sgKCgxVUxMPDw0MCkgLSAxKQogc3RydWN0IG1kcF9zdXBlcmJsb2NrXzEgewotIF9fbGUzMiBtYWdpYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIG1hZ2ljOwogIF9fbGUzMiBtYWpvcl92ZXJzaW9uOwogIF9fbGUzMiBmZWF0dXJlX21hcDsKICBfX2xlMzIgcGFkMDsKLSBfX3U4IHNldF91dWlkWzE2XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBzZXRfdXVpZFsxNl07CiAgY2hhciBzZXRfbmFtZVszMl07CiAgX19sZTY0IGN0aW1lOwogIF9fbGUzMiBsZXZlbDsKLSBfX2xlMzIgbGF5b3V0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgbGF5b3V0OwogIF9fbGU2NCBzaXplOwogIF9fbGUzMiBjaHVua3NpemU7CiAgX19sZTMyIHJhaWRfZGlza3M7Ci0gX19sZTMyIGJpdG1hcF9vZmZzZXQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBiaXRtYXBfb2Zmc2V0OwogIF9fbGUzMiBuZXdfbGV2ZWw7CiAgX19sZTY0IHJlc2hhcGVfcG9zaXRpb247CiAgX19sZTMyIGRlbHRhX2Rpc2tzOwotIF9fbGUzMiBuZXdfbGF5b3V0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgbmV3X2xheW91dDsKICBfX2xlMzIgbmV3X2NodW5rOwogIF9fbGUzMiBuZXdfb2Zmc2V0OwogIF9fbGU2NCBkYXRhX29mZnNldDsKLSBfX2xlNjQgZGF0YV9zaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlNjQgZGF0YV9zaXplOwogIF9fbGU2NCBzdXBlcl9vZmZzZXQ7CiAgX19sZTY0IHJlY292ZXJ5X29mZnNldDsKICBfX2xlMzIgZGV2X251bWJlcjsKLSBfX2xlMzIgY250X2NvcnJlY3RlZF9yZWFkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgY250X2NvcnJlY3RlZF9yZWFkOwogIF9fdTggZGV2aWNlX3V1aWRbMTZdOwogIF9fdTggZGV2ZmxhZ3M7CiAjZGVmaW5lIFdyaXRlTW9zdGx5MSAxCi0gX191OCBiYmxvZ19zaGlmdDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBiYmxvZ19zaGlmdDsKICBfX2xlMTYgYmJsb2dfc2l6ZTsKICBfX2xlMzIgYmJsb2dfb2Zmc2V0OwogIF9fbGU2NCB1dGltZTsKLSBfX2xlNjQgZXZlbnRzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlNjQgZXZlbnRzOwogIF9fbGU2NCByZXN5bmNfb2Zmc2V0OwogIF9fbGUzMiBzYl9jc3VtOwogIF9fbGUzMiBtYXhfZGV2OwotIF9fdTggcGFkM1s2NC0zMl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcGFkM1s2NC0zMl07CiAgX19sZTE2IGRldl9yb2xlc1swXTsKIH07CiAjZGVmaW5lIE1EX0ZFQVRVUkVfQklUTUFQX09GRlNFVCAxCi0jZGVmaW5lIE1EX0ZFQVRVUkVfUkVDT1ZFUllfT0ZGU0VUIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1EX0ZFQVRVUkVfUkVDT1ZFUllfT0ZGU0VUIDIKICNkZWZpbmUgTURfRkVBVFVSRV9SRVNIQVBFX0FDVElWRSA0CiAjZGVmaW5lIE1EX0ZFQVRVUkVfQkFEX0JMT0NLUyA4CiAjZGVmaW5lIE1EX0ZFQVRVUkVfUkVQTEFDRU1FTlQgMTYKLSNkZWZpbmUgTURfRkVBVFVSRV9SRVNIQVBFX0JBQ0tXQVJEUyAzMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTURfRkVBVFVSRV9SRVNIQVBFX0JBQ0tXQVJEUyAzMgogI2RlZmluZSBNRF9GRUFUVVJFX05FV19PRkZTRVQgNjQKLSNkZWZpbmUgTURfRkVBVFVSRV9BTEwgKE1EX0ZFQVRVUkVfQklUTUFQX09GRlNFVCAgIHxNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVCAgIHxNRF9GRUFUVVJFX1JFU0hBUEVfQUNUSVZFICAgfE1EX0ZFQVRVUkVfQkFEX0JMT0NLUyAgIHxNRF9GRUFUVVJFX1JFUExBQ0VNRU5UICAgfE1EX0ZFQVRVUkVfUkVTSEFQRV9CQUNLV0FSRFMgICB8TURfRkVBVFVSRV9ORVdfT0ZGU0VUICAgKQorI2RlZmluZSBNRF9GRUFUVVJFX1JFQ09WRVJZX0JJVE1BUCAxMjgKKyNkZWZpbmUgTURfRkVBVFVSRV9BTEwgKE1EX0ZFQVRVUkVfQklUTUFQX09GRlNFVCAgIHxNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVCAgIHxNRF9GRUFUVVJFX1JFU0hBUEVfQUNUSVZFICAgfE1EX0ZFQVRVUkVfQkFEX0JMT0NLUyAgIHxNRF9GRUFUVVJFX1JFUExBQ0VNRU5UICAgfE1EX0ZFQVRVUkVfUkVTSEFQRV9CQUNLV0FSRFMgICB8TURfRkVBVFVSRV9ORVdfT0ZGU0VUICAgfE1EX0ZFQVRVUkVfUkVDT1ZFUllfQklUTUFQICAgKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9yYW5kb20uaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmFuZG9tLmgKaW5kZXggNDM1NjBiNi4uNjIxNWQwOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9yYW5kb20uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3JhbmRvbS5oCkBAIC0zNiw4ICszNiw0IEBACiAgX191MzIgYnVmWzBdOwogfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi1zdHJ1Y3Qgcm5kX3N0YXRlIHsKLSBfX3UzMiBzMSwgczIsIHMzOwotfTsKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmVpc2VyZnNfeGF0dHIuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmVpc2VyZnNfeGF0dHIuaAppbmRleCAyYWJkOTdhLi45MDU2ZGUyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9yZWlzZXJmc194YXR0ci5oCkBAIC0yNyw3ICsyNyw3IEBACiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgewotIGNoYXIgKm5hbWU7CisgY29uc3QgY2hhciAqbmFtZTsKICB2b2lkICp2YWx1ZTsKICBzaXplX3QgbGVuZ3RoOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmVzb3VyY2UuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcmVzb3VyY2UuaAppbmRleCBlNzhlZDYwLi45ZDI2MGMyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Jlc291cmNlLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9yZXNvdXJjZS5oCkBAIC0yOSwyOSArMjksMjkgQEAKIHN0cnVjdCBydXNhZ2UgewogIHN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOwogIHN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwotIGxvbmcgcnVfbWF4cnNzOworIF9fa2VybmVsX2xvbmdfdCBydV9tYXhyc3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGxvbmcgcnVfaXhyc3M7Ci0gbG9uZyBydV9pZHJzczsKLSBsb25nIHJ1X2lzcnNzOwotIGxvbmcgcnVfbWluZmx0OworIF9fa2VybmVsX2xvbmdfdCBydV9peHJzczsKKyBfX2tlcm5lbF9sb25nX3QgcnVfaWRyc3M7CisgX19rZXJuZWxfbG9uZ190IHJ1X2lzcnNzOworIF9fa2VybmVsX2xvbmdfdCBydV9taW5mbHQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGxvbmcgcnVfbWFqZmx0OwotIGxvbmcgcnVfbnN3YXA7Ci0gbG9uZyBydV9pbmJsb2NrOwotIGxvbmcgcnVfb3VibG9jazsKKyBfX2tlcm5lbF9sb25nX3QgcnVfbWFqZmx0OworIF9fa2VybmVsX2xvbmdfdCBydV9uc3dhcDsKKyBfX2tlcm5lbF9sb25nX3QgcnVfaW5ibG9jazsKKyBfX2tlcm5lbF9sb25nX3QgcnVfb3VibG9jazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gbG9uZyBydV9tc2dzbmQ7Ci0gbG9uZyBydV9tc2dyY3Y7Ci0gbG9uZyBydV9uc2lnbmFsczsKLSBsb25nIHJ1X252Y3N3OworIF9fa2VybmVsX2xvbmdfdCBydV9tc2dzbmQ7CisgX19rZXJuZWxfbG9uZ190IHJ1X21zZ3JjdjsKKyBfX2tlcm5lbF9sb25nX3QgcnVfbnNpZ25hbHM7CisgX19rZXJuZWxfbG9uZ190IHJ1X252Y3N3OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBsb25nIHJ1X25pdmNzdzsKKyBfX2tlcm5lbF9sb25nX3QgcnVfbml2Y3N3OwogfTsKIHN0cnVjdCBybGltaXQgewotIHVuc2lnbmVkIGxvbmcgcmxpbV9jdXI7CisgX19rZXJuZWxfdWxvbmdfdCBybGltX2N1cjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gdW5zaWduZWQgbG9uZyBybGltX21heDsKKyBfX2tlcm5lbF91bG9uZ190IHJsaW1fbWF4OwogfTsKICNkZWZpbmUgUkxJTTY0X0lORklOSVRZICh+MFVMTCkKIHN0cnVjdCBybGltaXQ2NCB7CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3J0bmV0bGluay5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9ydG5ldGxpbmsuaAppbmRleCA3MThhMmRiLi4zYTAzZTg4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3J0bmV0bGluay5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKQEAgLTM0NiwyMzQgKzM0NiwyMzYgQEAKICBSVEFYX0lOSVRSV05ELAogI2RlZmluZSBSVEFYX0lOSVRSV05EIFJUQVhfSU5JVFJXTkQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgUlRBWF9RVUlDS0FDSywKKyNkZWZpbmUgUlRBWF9RVUlDS0FDSyBSVEFYX1FVSUNLQUNLCiAgX19SVEFYX01BWAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUQVhfTUFYIChfX1JUQVhfTUFYIC0gMSkKICNkZWZpbmUgUlRBWF9GRUFUVVJFX0VDTiAweDAwMDAwMDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVEFYX0ZFQVRVUkVfU0FDSyAweDAwMDAwMDAyCiAjZGVmaW5lIFJUQVhfRkVBVFVSRV9USU1FU1RBTVAgMHgwMDAwMDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRBWF9GRUFUVVJFX0FMTEZSQUcgMHgwMDAwMDAwOAogc3RydWN0IHJ0YV9zZXNzaW9uIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwcm90bzsKICBfX3U4IHBhZDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHBhZDI7CiAgdW5pb24gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIF9fdTE2IHNwb3J0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBkcG9ydDsKICB9IHBvcnRzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIF9fdTggdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBjb2RlOwogIF9fdTE2IGlkZW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGljbXB0OwogIF9fdTMyIHNwaTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSB1OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcnRhX21mY19zdGF0cyB7CiAgX191NjQgbWZjc19wYWNrZXRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBtZmNzX2J5dGVzOwogIF9fdTY0IG1mY3Nfd3JvbmdfaWY7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBydGdlbm1zZyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcnRnZW5fZmFtaWx5OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWZpbmZvbXNnIHsKICB1bnNpZ25lZCBjaGFyIGlmaV9mYW1pbHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgX19pZmlfcGFkOwogIHVuc2lnbmVkIHNob3J0IGlmaV90eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgaWZpX2luZGV4OwogIHVuc2lnbmVkIGlmaV9mbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaWZpX2NoYW5nZTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHByZWZpeG1zZyB7CiAgdW5zaWduZWQgY2hhciBwcmVmaXhfZmFtaWx5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHByZWZpeF9wYWQxOwogIHVuc2lnbmVkIHNob3J0IHByZWZpeF9wYWQyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcHJlZml4X2lmaW5kZXg7CiAgdW5zaWduZWQgY2hhciBwcmVmaXhfdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBwcmVmaXhfbGVuOwogIHVuc2lnbmVkIGNoYXIgcHJlZml4X2ZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHByZWZpeF9wYWQzOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtCiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBSRUZJWF9VTlNQRUMsCiAgUFJFRklYX0FERFJFU1MsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBSRUZJWF9DQUNIRUlORk8sCiAgX19QUkVGSVhfTUFYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgUFJFRklYX01BWCAoX19QUkVGSVhfTUFYIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcHJlZml4X2NhY2hlaW5mbyB7CiAgX191MzIgcHJlZmVycmVkX3RpbWU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHZhbGlkX3RpbWU7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y21zZyB7CiAgdW5zaWduZWQgY2hhciB0Y21fZmFtaWx5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHRjbV9fcGFkMTsKICB1bnNpZ25lZCBzaG9ydCB0Y21fX3BhZDI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB0Y21faWZpbmRleDsKICBfX3UzMiB0Y21faGFuZGxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0Y21fcGFyZW50OwogIF9fdTMyIHRjbV9pbmZvOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX1VOU1BFQywKICBUQ0FfS0lORCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX09QVElPTlMsCiAgVENBX1NUQVRTLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfWFNUQVRTLAogIFRDQV9SQVRFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfRkNOVCwKICBUQ0FfU1RBVFMyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfU1RBQiwKICBfX1RDQV9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBUQ0FfTUFYIChfX1RDQV9NQVggLSAxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENBX1JUQShyKSAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHRjbXNnKSkpKQogI2RlZmluZSBUQ0FfUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCB0Y21zZykpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5kdXNlcm9wdG1zZyB7CiAgdW5zaWduZWQgY2hhciBuZHVzZXJvcHRfZmFtaWx5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIG5kdXNlcm9wdF9wYWQxOwogIHVuc2lnbmVkIHNob3J0IG5kdXNlcm9wdF9vcHRzX2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IG5kdXNlcm9wdF9pZmluZGV4OwogIF9fdTggbmR1c2Vyb3B0X2ljbXBfdHlwZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuZHVzZXJvcHRfaWNtcF9jb2RlOwogIHVuc2lnbmVkIHNob3J0IG5kdXNlcm9wdF9wYWQyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbmR1c2Vyb3B0X3BhZDM7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIE5EVVNFUk9QVF9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5EVVNFUk9QVF9TUkNBRERSLAogIF9fTkRVU0VST1BUX01BWAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIE5EVVNFUk9QVF9NQVggKF9fTkRVU0VST1BUX01BWCAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1HUlBfTElOSyAxCiAjZGVmaW5lIFJUTUdSUF9OT1RJRlkgMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNR1JQX05FSUdIIDQKICNkZWZpbmUgUlRNR1JQX1RDIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTUdSUF9JUFY0X0lGQUREUiAweDEwCiAjZGVmaW5lIFJUTUdSUF9JUFY0X01ST1VURSAweDIwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1HUlBfSVBWNF9ST1VURSAweDQwCiAjZGVmaW5lIFJUTUdSUF9JUFY0X1JVTEUgMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNR1JQX0lQVjZfSUZBRERSIDB4MTAwCiAjZGVmaW5lIFJUTUdSUF9JUFY2X01ST1VURSAweDIwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNR1JQX0lQVjZfUk9VVEUgMHg0MDAKICNkZWZpbmUgUlRNR1JQX0lQVjZfSUZJTkZPIDB4ODAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1HUlBfREVDbmV0X0lGQUREUiAweDEwMDAKICNkZWZpbmUgUlRNR1JQX0RFQ25ldF9ST1VURSAweDQwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTUdSUF9JUFY2X1BSRUZJWCAweDIwMDAwCiBlbnVtIHJ0bmV0bGlua19ncm91cHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX05PTkUsCiAjZGVmaW5lIFJUTkxHUlBfTk9ORSBSVE5MR1JQX05PTkUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9MSU5LLAogI2RlZmluZSBSVE5MR1JQX0xJTksgUlROTEdSUF9MSU5LCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfTk9USUZZLAogI2RlZmluZSBSVE5MR1JQX05PVElGWSBSVE5MR1JQX05PVElGWQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX05FSUdILAogI2RlZmluZSBSVE5MR1JQX05FSUdIIFJUTkxHUlBfTkVJR0gKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9UQywKICNkZWZpbmUgUlROTEdSUF9UQyBSVE5MR1JQX1RDCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfSVBWNF9JRkFERFIsCiAjZGVmaW5lIFJUTkxHUlBfSVBWNF9JRkFERFIgUlROTEdSUF9JUFY0X0lGQUREUgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX0lQVjRfTVJPVVRFLAogI2RlZmluZSBSVE5MR1JQX0lQVjRfTVJPVVRFIFJUTkxHUlBfSVBWNF9NUk9VVEUKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9JUFY0X1JPVVRFLAogI2RlZmluZSBSVE5MR1JQX0lQVjRfUk9VVEUgUlROTEdSUF9JUFY0X1JPVVRFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfSVBWNF9SVUxFLAogI2RlZmluZSBSVE5MR1JQX0lQVjRfUlVMRSBSVE5MR1JQX0lQVjRfUlVMRQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX0lQVjZfSUZBRERSLAogI2RlZmluZSBSVE5MR1JQX0lQVjZfSUZBRERSIFJUTkxHUlBfSVBWNl9JRkFERFIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9JUFY2X01ST1VURSwKICNkZWZpbmUgUlROTEdSUF9JUFY2X01ST1VURSBSVE5MR1JQX0lQVjZfTVJPVVRFCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfSVBWNl9ST1VURSwKICNkZWZpbmUgUlROTEdSUF9JUFY2X1JPVVRFIFJUTkxHUlBfSVBWNl9ST1VURQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX0lQVjZfSUZJTkZPLAogI2RlZmluZSBSVE5MR1JQX0lQVjZfSUZJTkZPIFJUTkxHUlBfSVBWNl9JRklORk8KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9ERUNuZXRfSUZBRERSLAogI2RlZmluZSBSVE5MR1JQX0RFQ25ldF9JRkFERFIgUlROTEdSUF9ERUNuZXRfSUZBRERSCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfTk9QMiwKICBSVE5MR1JQX0RFQ25ldF9ST1VURSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTkxHUlBfREVDbmV0X1JPVVRFIFJUTkxHUlBfREVDbmV0X1JPVVRFCiAgUlROTEdSUF9ERUNuZXRfUlVMRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTkxHUlBfREVDbmV0X1JVTEUgUlROTEdSUF9ERUNuZXRfUlVMRQogIFJUTkxHUlBfTk9QNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9JUFY2X1BSRUZJWCwKICNkZWZpbmUgUlROTEdSUF9JUFY2X1BSRUZJWCBSVE5MR1JQX0lQVjZfUFJFRklYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfSVBWNl9SVUxFLAogI2RlZmluZSBSVE5MR1JQX0lQVjZfUlVMRSBSVE5MR1JQX0lQVjZfUlVMRQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX05EX1VTRVJPUFQsCiAjZGVmaW5lIFJUTkxHUlBfTkRfVVNFUk9QVCBSVE5MR1JQX05EX1VTRVJPUFQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9QSE9ORVRfSUZBRERSLAogI2RlZmluZSBSVE5MR1JQX1BIT05FVF9JRkFERFIgUlROTEdSUF9QSE9ORVRfSUZBRERSCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfUEhPTkVUX1JPVVRFLAogI2RlZmluZSBSVE5MR1JQX1BIT05FVF9ST1VURSBSVE5MR1JQX1BIT05FVF9ST1VURQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX0RDQiwKICNkZWZpbmUgUlROTEdSUF9EQ0IgUlROTEdSUF9EQ0IKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROTEdSUF9JUFY0X05FVENPTkYsCiAjZGVmaW5lIFJUTkxHUlBfSVBWNF9ORVRDT05GIFJUTkxHUlBfSVBWNF9ORVRDT05GCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfSVBWNl9ORVRDT05GLAogI2RlZmluZSBSVE5MR1JQX0lQVjZfTkVUQ09ORiBSVE5MR1JQX0lQVjZfTkVUQ09ORgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5MR1JQX01EQiwKICNkZWZpbmUgUlROTEdSUF9NREIgUlROTEdSUF9NREIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19SVE5MR1JQX01BWAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTkxHUlBfTUFYIChfX1JUTkxHUlBfTUFYIC0gMSkKIHN0cnVjdCB0Y2Ftc2cgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHRjYV9mYW1pbHk7CiAgdW5zaWduZWQgY2hhciB0Y2FfX3BhZDE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHRjYV9fcGFkMjsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQV9SVEEocikgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCB0Y2Ftc2cpKSkpCiAjZGVmaW5lIFRBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgdGNhbXNnKSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDQV9BQ1RfVEFCIDEKICNkZWZpbmUgVENBQV9NQVggMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRFWFRfRklMVEVSX1ZGICgxIDw8IDApCiAjZGVmaW5lIFJURVhUX0ZJTFRFUl9CUlZMQU4gKDEgPDwgMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvc2NoZWQuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc2NoZWQuaAppbmRleCBjNzU0MmU4Li5kODdiYzJhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NjaGVkLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zY2hlZC5oCkBAIC01Myw2ICs1Myw4IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQ0hFRF9CQVRDSCAzCiAjZGVmaW5lIFNDSEVEX0lETEUgNQorI2RlZmluZSBTQ0hFRF9ERUFETElORSA2CiAjZGVmaW5lIFNDSEVEX1JFU0VUX09OX0ZPUksgMHg0MDAwMDAwMAotI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQ0hFRF9GTEFHX1JFU0VUX09OX0ZPUksgMHgwMQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NlcmlhbF9jb3JlLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NlcmlhbF9jb3JlLmgKaW5kZXggMjgzMmEwNi4uNTlmYzMyYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zZXJpYWxfY29yZS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc2VyaWFsX2NvcmUuaApAQCAtMTM4LDQgKzEzOCw5IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQT1JUX0FSQyAxMDEKICNkZWZpbmUgUE9SVF9SUDIgMTAyCisjZGVmaW5lIFBPUlRfTFBVQVJUIDEwMworI2RlZmluZSBQT1JUX0hTQ0lGIDEwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUE9SVF9BU0MgMTA1CisjZGVmaW5lIFBPUlRfVElMRUdYIDEwNgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NobS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zaG0uaAppbmRleCBhNjJjNWVmLi4yOGUxNjcwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NobS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc2htLmgKQEAgLTY5LDEyICs2OSwxMiBAQAogfTsKIHN0cnVjdCBzaG1faW5mbyB7CiAgaW50IHVzZWRfaWRzOwotIHVuc2lnbmVkIGxvbmcgc2htX3RvdDsKKyBfX2tlcm5lbF91bG9uZ190IHNobV90b3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIHVuc2lnbmVkIGxvbmcgc2htX3JzczsKLSB1bnNpZ25lZCBsb25nIHNobV9zd3A7Ci0gdW5zaWduZWQgbG9uZyBzd2FwX2F0dGVtcHRzOwotIHVuc2lnbmVkIGxvbmcgc3dhcF9zdWNjZXNzZXM7CisgX19rZXJuZWxfdWxvbmdfdCBzaG1fcnNzOworIF9fa2VybmVsX3Vsb25nX3Qgc2htX3N3cDsKKyBfX2tlcm5lbF91bG9uZ190IHN3YXBfYXR0ZW1wdHM7CisgX19rZXJuZWxfdWxvbmdfdCBzd2FwX3N1Y2Nlc3NlczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3NubXAuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc25tcC5oCmluZGV4IDExYjkwYTcuLjlkNWZiMDkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvc25tcC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvc25tcC5oCkBAIC02MSw2ICs2MSwxMSBAQAogIElQU1RBVFNfTUlCX09VVEJDQVNUT0NURVRTLAogIElQU1RBVFNfTUlCX0NTVU1FUlJPUlMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElQU1RBVFNfTUlCX05PRUNUUEtUUywKKyBJUFNUQVRTX01JQl9FQ1QxUEtUUywKKyBJUFNUQVRTX01JQl9FQ1QwUEtUUywKKyBJUFNUQVRTX01JQl9DRVBLVFMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fSVBTVEFUU19NSUJfTUFYCiB9OwogZW51bQpAQCAtMjc5LDQ3ICsyODQsNTEgQEAKICBMSU5VWF9NSUJfVENQRkFTVE9QRU5MSVNURU5PVkVSRkxPVywKICBMSU5VWF9NSUJfVENQRkFTVE9QRU5DT09LSUVSRVFELAogIExJTlVYX01JQl9UQ1BTUFVSSU9VU19SVFhfSE9TVFFVRVVFUywKLSBfX0xJTlVYX01JQl9NQVgKKyBMSU5VWF9NSUJfQlVTWVBPTExSWFBBQ0tFVFMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIExJTlVYX01JQl9UQ1BBVVRPQ09SS0lORywKKyBfX0xJTlVYX01JQl9NQVgKIH07CiBlbnVtCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIExJTlVYX01JQl9YRlJNTlVNID0gMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1JTkVSUk9SLAogIExJTlVYX01JQl9YRlJNSU5CVUZGRVJFUlJPUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1JTkhEUkVSUk9SLAogIExJTlVYX01JQl9YRlJNSU5OT1NUQVRFUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1JTlNUQVRFUFJPVE9FUlJPUiwKICBMSU5VWF9NSUJfWEZSTUlOU1RBVEVNT0RFRVJST1IsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNSU5TVEFURVNFUUVSUk9SLAogIExJTlVYX01JQl9YRlJNSU5TVEFURUVYUElSRUQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNSU5TVEFURU1JU01BVENILAogIExJTlVYX01JQl9YRlJNSU5TVEFURUlOVkFMSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIExJTlVYX01JQl9YRlJNSU5UTVBMTUlTTUFUQ0gsCiAgTElOVVhfTUlCX1hGUk1JTk5PUE9MUywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1JTlBPTEJMT0NLLAogIExJTlVYX01JQl9YRlJNSU5QT0xFUlJPUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1PVVRFUlJPUiwKICBMSU5VWF9NSUJfWEZSTU9VVEJVTkRMRUdFTkVSUk9SLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTU9VVEJVTkRMRUNIRUNLRVJST1IsCiAgTElOVVhfTUlCX1hGUk1PVVROT1NUQVRFUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1PVVRTVEFURVBST1RPRVJST1IsCiAgTElOVVhfTUlCX1hGUk1PVVRTVEFURU1PREVFUlJPUiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1PVVRTVEFURVNFUUVSUk9SLAogIExJTlVYX01JQl9YRlJNT1VUU1RBVEVFWFBJUkVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9NSUJfWEZSTU9VVFBPTEJMT0NLLAogIExJTlVYX01JQl9YRlJNT1VUUE9MREVBRCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTElOVVhfTUlCX1hGUk1PVVRQT0xFUlJPUiwKICBMSU5VWF9NSUJfWEZSTUZXREhEUkVSUk9SLAotIExJTlVYX01JQl9YRlJNT1VUU1RBVEVJTlZBTElELAotIF9fTElOVVhfTUlCX1hGUk1NQVgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgTElOVVhfTUlCX1hGUk1PVVRTVEFURUlOVkFMSUQsCisgTElOVVhfTUlCX1hGUk1BQ1FVSVJFRVJST1IsCisgX19MSU5VWF9NSUJfWEZSTU1BWAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvc29ja2lvcy5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zb2NraW9zLmgKaW5kZXggYjRjZDEwMi4uYjVlN2M3NCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zb2NraW9zLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC9zb2NraW9zLmgKQEAgLTY5LDQ5ICs2OSw0OSBAQAogI2RlZmluZSBTSU9DRElGQUREUiAweDg5MzYKICNkZWZpbmUgU0lPQ1NJRkhXQlJPQURDQVNUIDB4ODkzNwogI2RlZmluZSBTSU9DR0lGQ09VTlQgMHg4OTM4Ci0jZGVmaW5lIFNJT0NLSUxMQUREUiAweDg5MzkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NHSUZCUiAweDg5NDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NTSUZCUiAweDg5NDEKICNkZWZpbmUgU0lPQ0dJRlRYUUxFTiAweDg5NDIKICNkZWZpbmUgU0lPQ1NJRlRYUUxFTiAweDg5NDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NFVEhUT09MIDB4ODk0NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ0dNSUlQSFkgMHg4OTQ3CiAjZGVmaW5lIFNJT0NHTUlJUkVHIDB4ODk0OAogI2RlZmluZSBTSU9DU01JSVJFRyAweDg5NDkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NXQU5ERVYgMHg4OTRBCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DT1VUUU5TRCAweDg5NEIKICNkZWZpbmUgU0lPQ0RBUlAgMHg4OTUzCiAjZGVmaW5lIFNJT0NHQVJQIDB4ODk1NAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ1NBUlAgMHg4OTU1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DRFJBUlAgMHg4OTYwCiAjZGVmaW5lIFNJT0NHUkFSUCAweDg5NjEKICNkZWZpbmUgU0lPQ1NSQVJQIDB4ODk2MgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ0dJRk1BUCAweDg5NzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NTSUZNQVAgMHg4OTcxCiAjZGVmaW5lIFNJT0NBRERETENJIDB4ODk4MAogI2RlZmluZSBTSU9DREVMRExDSSAweDg5ODEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NHSUZWTEFOIDB4ODk4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ1NJRlZMQU4gMHg4OTgzCiAjZGVmaW5lIFNJT0NCT05ERU5TTEFWRSAweDg5OTAKICNkZWZpbmUgU0lPQ0JPTkRSRUxFQVNFIDB4ODk5MQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ0JPTkRTRVRIV0FERFIgMHg4OTkyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DQk9ORFNMQVZFSU5GT1FVRVJZIDB4ODk5MwogI2RlZmluZSBTSU9DQk9ORElORk9RVUVSWSAweDg5OTQKICNkZWZpbmUgU0lPQ0JPTkRDSEFOR0VBQ1RJVkUgMHg4OTk1Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DQlJBRERCUiAweDg5YTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJT0NCUkRFTEJSIDB4ODlhMQogI2RlZmluZSBTSU9DQlJBRERJRiAweDg5YTIKICNkZWZpbmUgU0lPQ0JSREVMSUYgMHg4OWEzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DU0hXVFNUQU1QIDB4ODliMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ0dIV1RTVEFNUCAweDg5YjEKICNkZWZpbmUgU0lPQ0RFVlBSSVZBVEUgMHg4OUYwCiAjZGVmaW5lIFNJT0NQUk9UT1BSSVZBVEUgMHg4OUUwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNfYWN0L3RjX2RlZmFjdC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC90Y19hY3QvdGNfZGVmYWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1NGRmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNfYWN0L3RjX2RlZmFjdC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9UQ19ERUZfSAorI2RlZmluZSBfX0xJTlVYX1RDX0RFRl9ICisjaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgorc3RydWN0IHRjX2RlZmFjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHRjX2dlbjsKK307CitlbnVtIHsKKyBUQ0FfREVGX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX0RFRl9UTSwKKyBUQ0FfREVGX1BBUk1TLAorIFRDQV9ERUZfREFUQSwKKyBfX1RDQV9ERUZfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgVENBX0RFRl9NQVggKF9fVENBX0RFRl9NQVggLSAxKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjX2FjdC90Y19pcHQuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNfYWN0L3RjX2lwdC5oCmluZGV4IDQ1MWY4ZWEuLjAwYjg4YjggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNfYWN0L3RjX2lwdC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNfYWN0L3RjX2lwdC5oCkBAIC0yMSwxOCArMjEsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9wa3RfY2xzLmg+CiAjZGVmaW5lIFRDQV9BQ1RfSVBUIDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDQV9BQ1RfWFQgMTAKIGVudW0gewogIFRDQV9JUFRfVU5TUEVDLAogIFRDQV9JUFRfVEFCTEUsCi0gVENBX0lQVF9IT09LLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBUQ0FfSVBUX0hPT0ssCiAgVENBX0lQVF9JTkRFWCwKICBUQ0FfSVBUX0NOVCwKICBUQ0FfSVBUX1RNLAotIFRDQV9JUFRfVEFSRywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVENBX0lQVF9UQVJHLAogIF9fVENBX0lQVF9NQVgKIH07CiAjZGVmaW5lIFRDQV9JUFRfTUFYIChfX1RDQV9JUFRfTUFYIC0gMSkKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC90Y3AuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNwLmgKaW5kZXggYmIxMjExOC4uYTdiNWM1ZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC90Y3AuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjcC5oCkBAIC0xMTcsOTAgKzExNyw5MiBAQAogI2RlZmluZSBUQ1BfRkFTVE9QRU4gMjMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDUF9USU1FU1RBTVAgMjQKKyNkZWZpbmUgVENQX05PVFNFTlRfTE9XQVQgMjUKIHN0cnVjdCB0Y3BfcmVwYWlyX29wdCB7CiAgX191MzIgb3B0X2NvZGU7Ci0gX191MzIgb3B0X3ZhbDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgb3B0X3ZhbDsKIH07CiBlbnVtIHsKICBUQ1BfTk9fUVVFVUUsCi0gVENQX1JFQ1ZfUVVFVUUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRDUF9SRUNWX1FVRVVFLAogIFRDUF9TRU5EX1FVRVVFLAogIFRDUF9RVUVVRVNfTlIsCiB9OwotI2RlZmluZSBUQ1BJX09QVF9USU1FU1RBTVBTIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDUElfT1BUX1RJTUVTVEFNUFMgMQogI2RlZmluZSBUQ1BJX09QVF9TQUNLIDIKICNkZWZpbmUgVENQSV9PUFRfV1NDQUxFIDQKICNkZWZpbmUgVENQSV9PUFRfRUNOIDgKLSNkZWZpbmUgVENQSV9PUFRfRUNOX1NFRU4gMTYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDUElfT1BUX0VDTl9TRUVOIDE2CiAjZGVmaW5lIFRDUElfT1BUX1NZTl9EQVRBIDMyCiBlbnVtIHRjcF9jYV9zdGF0ZSB7CiAgVENQX0NBX09wZW4gPSAwLAotI2RlZmluZSBUQ1BGX0NBX09wZW4gKDE8PFRDUF9DQV9PcGVuKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVENQRl9DQV9PcGVuICgxPDxUQ1BfQ0FfT3BlbikKICBUQ1BfQ0FfRGlzb3JkZXIgPSAxLAogI2RlZmluZSBUQ1BGX0NBX0Rpc29yZGVyICgxPDxUQ1BfQ0FfRGlzb3JkZXIpCiAgVENQX0NBX0NXUiA9IDIsCi0jZGVmaW5lIFRDUEZfQ0FfQ1dSICgxPDxUQ1BfQ0FfQ1dSKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVENQRl9DQV9DV1IgKDE8PFRDUF9DQV9DV1IpCiAgVENQX0NBX1JlY292ZXJ5ID0gMywKICNkZWZpbmUgVENQRl9DQV9SZWNvdmVyeSAoMTw8VENQX0NBX1JlY292ZXJ5KQogIFRDUF9DQV9Mb3NzID0gNAotI2RlZmluZSBUQ1BGX0NBX0xvc3MgKDE8PFRDUF9DQV9Mb3NzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVENQRl9DQV9Mb3NzICgxPDxUQ1BfQ0FfTG9zcykKIH07CiBzdHJ1Y3QgdGNwX2luZm8gewogIF9fdTggdGNwaV9zdGF0ZTsKLSBfX3U4IHRjcGlfY2Ffc3RhdGU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggdGNwaV9jYV9zdGF0ZTsKICBfX3U4IHRjcGlfcmV0cmFuc21pdHM7CiAgX191OCB0Y3BpX3Byb2JlczsKICBfX3U4IHRjcGlfYmFja29mZjsKLSBfX3U4IHRjcGlfb3B0aW9uczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCB0Y3BpX29wdGlvbnM7CiAgX191OCB0Y3BpX3NuZF93c2NhbGUgOiA0LCB0Y3BpX3Jjdl93c2NhbGUgOiA0OwogIF9fdTMyIHRjcGlfcnRvOwogIF9fdTMyIHRjcGlfYXRvOwotIF9fdTMyIHRjcGlfc25kX21zczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdGNwaV9zbmRfbXNzOwogIF9fdTMyIHRjcGlfcmN2X21zczsKICBfX3UzMiB0Y3BpX3VuYWNrZWQ7CiAgX191MzIgdGNwaV9zYWNrZWQ7Ci0gX191MzIgdGNwaV9sb3N0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0Y3BpX2xvc3Q7CiAgX191MzIgdGNwaV9yZXRyYW5zOwogIF9fdTMyIHRjcGlfZmFja2V0czsKICBfX3UzMiB0Y3BpX2xhc3RfZGF0YV9zZW50OwotIF9fdTMyIHRjcGlfbGFzdF9hY2tfc2VudDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdGNwaV9sYXN0X2Fja19zZW50OwogIF9fdTMyIHRjcGlfbGFzdF9kYXRhX3JlY3Y7CiAgX191MzIgdGNwaV9sYXN0X2Fja19yZWN2OwogIF9fdTMyIHRjcGlfcG10dTsKLSBfX3UzMiB0Y3BpX3Jjdl9zc3RocmVzaDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdGNwaV9yY3Zfc3N0aHJlc2g7CiAgX191MzIgdGNwaV9ydHQ7CiAgX191MzIgdGNwaV9ydHR2YXI7CiAgX191MzIgdGNwaV9zbmRfc3N0aHJlc2g7Ci0gX191MzIgdGNwaV9zbmRfY3duZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdGNwaV9zbmRfY3duZDsKICBfX3UzMiB0Y3BpX2Fkdm1zczsKICBfX3UzMiB0Y3BpX3Jlb3JkZXJpbmc7CiAgX191MzIgdGNwaV9yY3ZfcnR0OwotIF9fdTMyIHRjcGlfcmN2X3NwYWNlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0Y3BpX3Jjdl9zcGFjZTsKICBfX3UzMiB0Y3BpX3RvdGFsX3JldHJhbnM7CiB9OwogI2RlZmluZSBUQ1BfTUQ1U0lHX01BWEtFWUxFTiA4MAotc3RydWN0IHRjcF9tZDVzaWcgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB0Y3BfbWQ1c2lnIHsKICBzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSB0Y3BtX2FkZHI7CiAgX191MTYgX190Y3BtX3BhZDE7CiAgX191MTYgdGNwbV9rZXlsZW47Ci0gX191MzIgX190Y3BtX3BhZDI7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIF9fdGNwbV9wYWQyOwogIF9fdTggdGNwbV9rZXlbVENQX01ENVNJR19NQVhLRVlMRU5dOwogfTsKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNwX21ldHJpY3MuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGNwX21ldHJpY3MuaAppbmRleCA0ODI2YmYwLi40NDllYzk1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RjcF9tZXRyaWNzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC90Y3BfbWV0cmljcy5oCkBAIC00OCwxNyArNDgsMTkgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENQX01FVFJJQ1NfQVRUUl9GT1BFTl9TWU5fRFJPUF9UUywKICBUQ1BfTUVUUklDU19BVFRSX0ZPUEVOX0NPT0tJRSwKKyBUQ1BfTUVUUklDU19BVFRSX1NBRERSX0lQVjQsCisgVENQX01FVFJJQ1NfQVRUUl9TQUREUl9JUFY2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX1RDUF9NRVRSSUNTX0FUVFJfTUFYLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDUF9NRVRSSUNTX0FUVFJfTUFYIChfX1RDUF9NRVRSSUNTX0FUVFJfTUFYIC0gMSkKIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ1BfTUVUUklDU19DTURfVU5TUEVDLAogIFRDUF9NRVRSSUNTX0NNRF9HRVQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDUF9NRVRSSUNTX0NNRF9ERUwsCiAgX19UQ1BfTUVUUklDU19DTURfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFRDUF9NRVRSSUNTX0NNRF9NQVggKF9fVENQX01FVFJJQ1NfQ01EX01BWCAtIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RpbWV4LmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3RpbWV4LmgKaW5kZXggMzcxZDY0YS4uYTU5NjY5OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC90aW1leC5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdGltZXguaApAQCAtMjMsMjggKzIzLDI4IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRpbWV4IHsKICB1bnNpZ25lZCBpbnQgbW9kZXM7Ci0gbG9uZyBvZmZzZXQ7Ci0gbG9uZyBmcmVxOworIF9fa2VybmVsX2xvbmdfdCBvZmZzZXQ7CisgX19rZXJuZWxfbG9uZ190IGZyZXE7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGxvbmcgbWF4ZXJyb3I7Ci0gbG9uZyBlc3RlcnJvcjsKKyBfX2tlcm5lbF9sb25nX3QgbWF4ZXJyb3I7CisgX19rZXJuZWxfbG9uZ190IGVzdGVycm9yOwogIGludCBzdGF0dXM7Ci0gbG9uZyBjb25zdGFudDsKKyBfX2tlcm5lbF9sb25nX3QgY29uc3RhbnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGxvbmcgcHJlY2lzaW9uOwotIGxvbmcgdG9sZXJhbmNlOworIF9fa2VybmVsX2xvbmdfdCBwcmVjaXNpb247CisgX19rZXJuZWxfbG9uZ190IHRvbGVyYW5jZTsKICBzdHJ1Y3QgdGltZXZhbCB0aW1lOwotIGxvbmcgdGljazsKKyBfX2tlcm5lbF9sb25nX3QgdGljazsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gbG9uZyBwcHNmcmVxOwotIGxvbmcgaml0dGVyOworIF9fa2VybmVsX2xvbmdfdCBwcHNmcmVxOworIF9fa2VybmVsX2xvbmdfdCBqaXR0ZXI7CiAgaW50IHNoaWZ0OwotIGxvbmcgc3RhYmlsOworIF9fa2VybmVsX2xvbmdfdCBzdGFiaWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIGxvbmcgaml0Y250OwotIGxvbmcgY2FsY250OwotIGxvbmcgZXJyY250OwotIGxvbmcgc3RiY250OworIF9fa2VybmVsX2xvbmdfdCBqaXRjbnQ7CisgX19rZXJuZWxfbG9uZ190IGNhbGNudDsKKyBfX2tlcm5lbF9sb25nX3QgZXJyY250OworIF9fa2VybmVsX2xvbmdfdCBzdGJjbnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB0YWk7CiAgaW50IDozMjsgaW50IDozMjsgaW50IDozMjsgaW50IDozMjsKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdXNiL2NoMTEuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdXNiL2NoMTEuaAppbmRleCBlMjc0NTdlLi5jYmUzZDcwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3VzYi9jaDExLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC91c2IvY2gxMS5oCkBAIC0xOSwxODIgKzE5LDE4MyBAQAogI2lmbmRlZiBfX0xJTlVYX0NIMTFfSAogI2RlZmluZSBfX0xJTlVYX0NIMTFfSAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZGVmaW5lIFVTQl9SVF9IVUIgKFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0RFVklDRSkKKyNkZWZpbmUgVVNCX01BWENISUxEUkVOIDMxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUlRfSFVCIChVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9ERVZJQ0UpCiAjZGVmaW5lIFVTQl9SVF9QT1JUIChVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9PVEhFUikKICNkZWZpbmUgSFVCX0NMRUFSX1RUX0JVRkZFUiA4CiAjZGVmaW5lIEhVQl9SRVNFVF9UVCA5Ci0jZGVmaW5lIEhVQl9HRVRfVFRfU1RBVEUgMTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhVQl9HRVRfVFRfU1RBVEUgMTAKICNkZWZpbmUgSFVCX1NUT1BfVFQgMTEKICNkZWZpbmUgSFVCX1NFVF9ERVBUSCAxMgogI2RlZmluZSBIVUJfR0VUX1BPUlRfRVJSX0NPVU5UIDEzCi0jZGVmaW5lIENfSFVCX0xPQ0FMX1BPV0VSIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENfSFVCX0xPQ0FMX1BPV0VSIDAKICNkZWZpbmUgQ19IVUJfT1ZFUl9DVVJSRU5UIDEKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DT05ORUNUSU9OIDAKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9FTkFCTEUgMQotI2RlZmluZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9TVVNQRU5EIDIKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9PVkVSX0NVUlJFTlQgMwogI2RlZmluZSBVU0JfUE9SVF9GRUFUX1JFU0VUIDQKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9MMSA1Ci0jZGVmaW5lIFVTQl9QT1JUX0ZFQVRfUE9XRVIgOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1BPUlRfRkVBVF9QT1dFUiA4CiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfTE9XU1BFRUQgOQogI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTiAxNgogI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFIDE3Ci0jZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EIDE4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfU1VTUEVORCAxOAogI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UIDE5CiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVCAyMAogI2RlZmluZSBVU0JfUE9SVF9GRUFUX1RFU1QgMjEKLSNkZWZpbmUgVVNCX1BPUlRfRkVBVF9JTkRJQ0FUT1IgMjIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfSU5ESUNBVE9SIDIyCiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19QT1JUX0wxIDIzCiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfTElOS19TVEFURSA1CiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfVTFfVElNRU9VVCAyMwotI2RlZmluZSBVU0JfUE9SVF9GRUFUX1UyX1RJTUVPVVQgMjQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfVTJfVElNRU9VVCAyNAogI2RlZmluZSBVU0JfUE9SVF9GRUFUX0NfUE9SVF9MSU5LX1NUQVRFIDI1CiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfQ19QT1JUX0NPTkZJR19FUlJPUiAyNgogI2RlZmluZSBVU0JfUE9SVF9GRUFUX1JFTU9URV9XQUtFX01BU0sgMjcKLSNkZWZpbmUgVVNCX1BPUlRfRkVBVF9CSF9QT1JUX1JFU0VUIDI4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUE9SVF9GRUFUX0JIX1BPUlRfUkVTRVQgMjgKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9DX0JIX1BPUlRfUkVTRVQgMjkKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9GT1JDRV9MSU5LUE1fQUNDRVBUIDMwCiAjZGVmaW5lIFVTQl9QT1JUX0xQTV9USU1FT1VUKHApICgoKHApICYgMHhmZikgPDwgOCkKLSNkZWZpbmUgVVNCX1BPUlRfRkVBVF9SRU1PVEVfV0FLRV9DT05ORUNUICgxIDw8IDgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUE9SVF9GRUFUX1JFTU9URV9XQUtFX0NPTk5FQ1QgKDEgPDwgOCkKICNkZWZpbmUgVVNCX1BPUlRfRkVBVF9SRU1PVEVfV0FLRV9ESVNDT05ORUNUICgxIDw8IDkpCiAjZGVmaW5lIFVTQl9QT1JUX0ZFQVRfUkVNT1RFX1dBS0VfT1ZFUl9DVVJSRU5UICgxIDw8IDEwKQogc3RydWN0IHVzYl9wb3J0X3N0YXR1cyB7Ci0gX19sZTE2IHdQb3J0U3RhdHVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgd1BvcnRTdGF0dXM7CiAgX19sZTE2IHdQb3J0Q2hhbmdlOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTiAweDAwMDEKLSNkZWZpbmUgVVNCX1BPUlRfU1RBVF9FTkFCTEUgMHgwMDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUE9SVF9TVEFUX0VOQUJMRSAweDAwMDIKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9TVVNQRU5EIDB4MDAwNAogI2RlZmluZSBVU0JfUE9SVF9TVEFUX09WRVJDVVJSRU5UIDB4MDAwOAogI2RlZmluZSBVU0JfUE9SVF9TVEFUX1JFU0VUIDB4MDAxMAotI2RlZmluZSBVU0JfUE9SVF9TVEFUX0wxIDB4MDAyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9MMSAweDAwMjAKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9QT1dFUiAweDAxMDAKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQgMHgwMjAwCiAjZGVmaW5lIFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCAweDA0MDAKLSNkZWZpbmUgVVNCX1BPUlRfU1RBVF9URVNUIDB4MDgwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9URVNUIDB4MDgwMAogI2RlZmluZSBVU0JfUE9SVF9TVEFUX0lORElDQVRPUiAweDEwMDAKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9MSU5LX1NUQVRFIDB4MDFlMAogI2RlZmluZSBVU0JfU1NfUE9SVF9TVEFUX1BPV0VSIDB4MDIwMAotI2RlZmluZSBVU0JfU1NfUE9SVF9TVEFUX1NQRUVEIDB4MWMwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1NTX1BPUlRfU1RBVF9TUEVFRCAweDFjMDAKICNkZWZpbmUgVVNCX1BPUlRfU1RBVF9TUEVFRF81R0JQUyAweDAwMDAKICNkZWZpbmUgVVNCX1NTX1BPUlRfU1RBVF9NQVNLIChVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04gfCAgIFVTQl9QT1JUX1NUQVRfRU5BQkxFIHwgICBVU0JfUE9SVF9TVEFUX09WRVJDVVJSRU5UIHwgICBVU0JfUE9SVF9TVEFUX1JFU0VUKQogI2RlZmluZSBVU0JfU1NfUE9SVF9MU19VMCAweDAwMDAKLSNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfVTEgMHgwMDIwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfU1NfUE9SVF9MU19VMSAweDAwMjAKICNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfVTIgMHgwMDQwCiAjZGVmaW5lIFVTQl9TU19QT1JUX0xTX1UzIDB4MDA2MAogI2RlZmluZSBVU0JfU1NfUE9SVF9MU19TU19ESVNBQkxFRCAweDAwODAKLSNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfUlhfREVURUNUIDB4MDBhMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfUlhfREVURUNUIDB4MDBhMAogI2RlZmluZSBVU0JfU1NfUE9SVF9MU19TU19JTkFDVElWRSAweDAwYzAKICNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfUE9MTElORyAweDAwZTAKICNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfUkVDT1ZFUlkgMHgwMTAwCi0jZGVmaW5lIFVTQl9TU19QT1JUX0xTX0hPVF9SRVNFVCAweDAxMjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9TU19QT1JUX0xTX0hPVF9SRVNFVCAweDAxMjAKICNkZWZpbmUgVVNCX1NTX1BPUlRfTFNfQ09NUF9NT0QgMHgwMTQwCiAjZGVmaW5lIFVTQl9TU19QT1JUX0xTX0xPT1BCQUNLIDB4MDE2MAogI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfQ09OTkVDVElPTiAweDAwMDEKLSNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX0VOQUJMRSAweDAwMDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19FTkFCTEUgMHgwMDAyCiAjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EIDB4MDAwNAogI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfT1ZFUkNVUlJFTlQgMHgwMDA4CiAjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19SRVNFVCAweDAwMTAKLSNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX0wxIDB4MDAyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1BPUlRfU1RBVF9DX0wxIDB4MDAyMAogI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfQkhfUkVTRVQgMHgwMDIwCiAjZGVmaW5lIFVTQl9QT1JUX1NUQVRfQ19MSU5LX1NUQVRFIDB4MDA0MAogI2RlZmluZSBVU0JfUE9SVF9TVEFUX0NfQ09ORklHX0VSUk9SIDB4MDA4MAotI2RlZmluZSBIVUJfQ0hBUl9MUFNNIDB4MDAwMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSFVCX0NIQVJfTFBTTSAweDAwMDMKICNkZWZpbmUgSFVCX0NIQVJfQ09NTU9OX0xQU00gMHgwMDAwCiAjZGVmaW5lIEhVQl9DSEFSX0lORFZfUE9SVF9MUFNNIDB4MDAwMQogI2RlZmluZSBIVUJfQ0hBUl9OT19MUFNNIDB4MDAwMgotI2RlZmluZSBIVUJfQ0hBUl9DT01QT1VORCAweDAwMDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhVQl9DSEFSX0NPTVBPVU5EIDB4MDAwNAogI2RlZmluZSBIVUJfQ0hBUl9PQ1BNIDB4MDAxOAogI2RlZmluZSBIVUJfQ0hBUl9DT01NT05fT0NQTSAweDAwMDAKICNkZWZpbmUgSFVCX0NIQVJfSU5EVl9QT1JUX09DUE0gMHgwMDA4Ci0jZGVmaW5lIEhVQl9DSEFSX05PX09DUE0gMHgwMDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVUJfQ0hBUl9OT19PQ1BNIDB4MDAxMAogI2RlZmluZSBIVUJfQ0hBUl9UVFRUIDB4MDA2MAogI2RlZmluZSBIVUJfQ0hBUl9QT1JUSU5EIDB4MDA4MAogc3RydWN0IHVzYl9odWJfc3RhdHVzIHsKLSBfX2xlMTYgd0h1YlN0YXR1czsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTE2IHdIdWJTdGF0dXM7CiAgX19sZTE2IHdIdWJDaGFuZ2U7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICNkZWZpbmUgSFVCX1NUQVRVU19MT0NBTF9QT1dFUiAweDAwMDEKLSNkZWZpbmUgSFVCX1NUQVRVU19PVkVSQ1VSUkVOVCAweDAwMDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhVQl9TVEFUVVNfT1ZFUkNVUlJFTlQgMHgwMDAyCiAjZGVmaW5lIEhVQl9DSEFOR0VfTE9DQUxfUE9XRVIgMHgwMDAxCiAjZGVmaW5lIEhVQl9DSEFOR0VfT1ZFUkNVUlJFTlQgMHgwMDAyCiAjZGVmaW5lIFVTQl9EVF9IVUIgKFVTQl9UWVBFX0NMQVNTIHwgMHgwOSkKLSNkZWZpbmUgVVNCX0RUX1NTX0hVQiAoVVNCX1RZUEVfQ0xBU1MgfCAweDBhKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0RUX1NTX0hVQiAoVVNCX1RZUEVfQ0xBU1MgfCAweDBhKQogI2RlZmluZSBVU0JfRFRfSFVCX05PTlZBUl9TSVpFIDcKICNkZWZpbmUgVVNCX0RUX1NTX0hVQl9TSVpFIDEyCiAjZGVmaW5lIFVTQl9IVUJfUFJfRlMgMAotI2RlZmluZSBVU0JfSFVCX1BSX0hTX05PX1RUIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9IVUJfUFJfSFNfTk9fVFQgMAogI2RlZmluZSBVU0JfSFVCX1BSX0hTX1NJTkdMRV9UVCAxCiAjZGVmaW5lIFVTQl9IVUJfUFJfSFNfTVVMVElfVFQgMgogI2RlZmluZSBVU0JfSFVCX1BSX1NTIDMKLXN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgewogIF9fdTggYkRlc2NMZW5ndGg7CiAgX191OCBiRGVzY3JpcHRvclR5cGU7CiAgX191OCBiTmJyUG9ydHM7Ci0gX19sZTE2IHdIdWJDaGFyYWN0ZXJpc3RpY3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiB3SHViQ2hhcmFjdGVyaXN0aWNzOwogIF9fdTggYlB3ck9uMlB3ckdvb2Q7CiAgX191OCBiSHViQ29udHJDdXJyZW50OwogIHVuaW9uIHsKLSBzdHJ1Y3QgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgewogIF9fdTggRGV2aWNlUmVtb3ZhYmxlWyhVU0JfTUFYQ0hJTERSRU4gKyAxICsgNykgLyA4XTsKICBfX3U4IFBvcnRQd3JDdHJsTWFza1soVVNCX01BWENISUxEUkVOICsgMSArIDcpIC8gOF07CiAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaHM7Ci0gc3RydWN0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHsKICBfX3U4IGJIdWJIZHJEZWNMYXQ7CiAgX19sZTE2IHdIdWJEZWxheTsKICBfX2xlMTYgRGV2aWNlUmVtb3ZhYmxlOwotIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHNzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBzczsKICB9IHU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICNkZWZpbmUgSFVCX0xFRF9BVVRPIDAKLSNkZWZpbmUgSFVCX0xFRF9BTUJFUiAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIVUJfTEVEX0FNQkVSIDEKICNkZWZpbmUgSFVCX0xFRF9HUkVFTiAyCiAjZGVmaW5lIEhVQl9MRURfT0ZGIDMKIGVudW0gaHViX2xlZF9tb2RlIHsKLSBJTkRJQ0FUT1JfQVVUTyA9IDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElORElDQVRPUl9BVVRPID0gMCwKICBJTkRJQ0FUT1JfQ1lDTEUsCiAgSU5ESUNBVE9SX0dSRUVOX0JMSU5LLCBJTkRJQ0FUT1JfR1JFRU5fQkxJTktfT0ZGLAogIElORElDQVRPUl9BTUJFUl9CTElOSywgSU5ESUNBVE9SX0FNQkVSX0JMSU5LX09GRiwKLSBJTkRJQ0FUT1JfQUxUX0JMSU5LLCBJTkRJQ0FUT1JfQUxUX0JMSU5LX09GRgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJTkRJQ0FUT1JfQUxUX0JMSU5LLCBJTkRJQ0FUT1JfQUxUX0JMSU5LX09GRgogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIEhVQl9UVFRUXzhfQklUUyAweDAwCiAjZGVmaW5lIEhVQl9UVFRUXzE2X0JJVFMgMHgyMAotI2RlZmluZSBIVUJfVFRUVF8yNF9CSVRTIDB4NDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhVQl9UVFRUXzI0X0JJVFMgMHg0MAogI2RlZmluZSBIVUJfVFRUVF8zMl9CSVRTIDB4NjAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLWNvbnRyb2xzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItY29udHJvbHMuaAppbmRleCA0N2RjZTQ1Li4yMjM2ZmY3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItY29udHJvbHMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItY29udHJvbHMuaApAQCAtMTIyLDc3MyArMTIyLDgwOSBAQAogI2RlZmluZSBWNEwyX0NJRF9VU0VSX1MyMjU1X0JBU0UgKFY0TDJfQ0lEX1VTRVJfQkFTRSArIDB4MTAzMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfU0k0NzZYX0JBU0UgKFY0TDJfQ0lEX1VTRVJfQkFTRSArIDB4MTA0MCkKKyNkZWZpbmUgVjRMMl9DSURfVVNFUl9USV9WUEVfQkFTRSAoVjRMMl9DSURfVVNFUl9CQVNFICsgMHgxMDUwKQorI2RlZmluZSBWNEwyX0NJRF9VU0VSX1NBQTcxMzRfQkFTRSAoVjRMMl9DSURfVVNFUl9CQVNFICsgMHgxMDYwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHg5MDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDEpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEUgKFY0TDJfQ0lEX01QRUdfQkFTRSswKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX3N0cmVhbV90eXBlIHsKICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMgPSAxLAogIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9TUyA9IDIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9EVkQgPSAzLAogIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9WQ0QgPSA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfU1ZDRCA9IDUsCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVCAoVjRMMl9DSURfTVBFR19CQVNFKzEpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTyAoVjRMMl9DSURfTVBFR19CQVNFKzIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU8gKFY0TDJfQ0lEX01QRUdfQkFTRSszKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSIChWNEwyX0NJRF9NUEVHX0JBU0UrNCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9BVURJTyAoVjRMMl9DSURfTVBFR19CQVNFKzUpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9WSURFTyAoVjRMMl9DSURfTVBFR19CQVNFKzYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UIChWNEwyX0NJRF9NUEVHX0JBU0UrNykKIGVudW0gdjRsMl9tcGVnX3N0cmVhbV92YmlfZm10IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUgPSAwLAogIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVEgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfYXVkaW9fc2FtcGxpbmdfZnJlcSB7CiAgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDAgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCA9IDEsCiAgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDAgPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkcgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgewogIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8xID0gMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIgPSAxLAogIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8zID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FBQyA9IDMsCiAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMyA9IDQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGUgewogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMySyA9IDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzY0SyA9IDEsCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfOTZLID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTI4SyA9IDMsCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTYwSyA9IDQsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE5MksgPSA1LAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzIyNEsgPSA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yNTZLID0gNywKICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yODhLID0gOCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzIwSyA9IDksCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzUySyA9IDEwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zODRLID0gMTEsCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDE2SyA9IDEyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV80NDhLID0gMTMsCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTAzKQogZW51bSB2NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMySyA9IDAsCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNDhLID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNTZLID0gMiwKICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV82NEsgPSAzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV84MEsgPSA0LAogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzk2SyA9IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzExMksgPSA2LAogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzEyOEsgPSA3LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xNjBLID0gOCwKICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xOTJLID0gOSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjI0SyA9IDEwLAogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgPSAxMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzIwSyA9IDEyLAogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEsgPSAxMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfYXVkaW9fbDNfYml0cmF0ZSB7CiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzJLID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNDBLID0gMSwKICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV80OEsgPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV81NksgPSAzLAogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzY0SyA9IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzgwSyA9IDUsCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfOTZLID0gNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTEySyA9IDcsCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTI4SyA9IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzE2MEsgPSA5LAogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzE5MksgPSAxMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMjI0SyA9IDExLAogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzI1NksgPSAxMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzIwSyA9IDEzLAogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERSAoVjRMMl9DSURfTVBFR19CQVNFKzEwNSkKIGVudW0gdjRsMl9tcGVnX2F1ZGlvX21vZGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTU9ERV9TVEVSRU8gPSAwLAogIFY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTyA9IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19NT0RFX0RVQUwgPSAyLAogIFY0TDJfTVBFR19BVURJT19NT0RFX01PTk8gPSAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT04gKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfYXVkaW9fbW9kZV9leHRlbnNpb24gewogIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80ID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzggPSAxLAogIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xMiA9IDIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xNiA9IDMsCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUyAoVjRMMl9DSURfTVBFR19CQVNFKzEwNykKIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2VtcGhhc2lzIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX05PTkUgPSAwLAogIFY0TDJfTVBFR19BVURJT19FTVBIQVNJU181MF9ESVZfMTVfdVMgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfQ0NJVFRfSjE3ID0gMiwKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0NSQyAoVjRMMl9DSURfTVBFR19CQVNFKzEwOCkKIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2NyYyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19DUkNfTk9ORSA9IDAsCiAgVjRMMl9NUEVHX0FVRElPX0NSQ19DUkMxNiA9IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19NVVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19BQUNfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzExMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzExMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZSB7CiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMySyA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80MEsgPSAxLAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80OEsgPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTZLID0gMywKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjRLID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzgwSyA9IDUsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzk2SyA9IDYsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xMTJLID0gNywKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTI4SyA9IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xNjBLID0gOSwKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTkySyA9IDEwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjI0SyA9IDExLAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLID0gMTIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zMjBLID0gMTMsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEsgPSAxNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ0OEsgPSAxNSwKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTEySyA9IDE2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNTc2SyA9IDE3LAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NDBLID0gMTgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19ERUNfUExBWUJBQ0sgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfYXVkaW9fZGVjX3BsYXliYWNrIHsKICBWNEwyX01QRUdfQVVESU9fREVDX1BMQVlCQUNLX0FVVE8gPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fREVDX1BMQVlCQUNLX1NURVJFTyA9IDEsCiAgVjRMMl9NUEVHX0FVRElPX0RFQ19QTEFZQkFDS19MRUZUID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0RFQ19QTEFZQkFDS19SSUdIVCA9IDMsCiAgVjRMMl9NUEVHX0FVRElPX0RFQ19QTEFZQkFDS19NT05PID0gNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0RFQ19QTEFZQkFDS19TV0FQUEVEX1NURVJFTyA9IDUsCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19ERUNfTVVMVElMSU5HVUFMX1BMQVlCQUNLIChWNEwyX0NJRF9NUEVHX0JBU0UrMTEzKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2VuY29kaW5nIHsKICBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMiA9IDEsCiAgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMgPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNUIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2FzcGVjdCB7CiAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xeDEgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4MyA9IDEsCiAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5ID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8yMjF4MTAwID0gMywKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAyKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRSAoVjRMMl9DSURfTVBFR19CQVNFKzIwNCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTiAoVjRMMl9DSURfTVBFR19CQVNFKzIwNSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA2KQogZW51bSB2NGwyX21wZWdfdmlkZW9fYml0cmF0ZV9tb2RlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIgPSAwLAogIFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSID0gMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSyAoVjRMMl9DSURfTVBFR19CQVNFKzIwOCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19URU1QT1JBTF9ERUNJTUFUSU9OIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjEwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWIChWNEwyX0NJRF9NUEVHX0JBU0UrMjExKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19ERUNPREVSX1NMSUNFX0lOVEVSRkFDRSAoVjRMMl9DSURfTVBFR19CQVNFKzIxMikKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19ERUNPREVSX01QRUc0X0RFQkxPQ0tfRklMVEVSIChWNEwyX0NJRF9NUEVHX0JBU0UrMjEzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19DWUNMSUNfSU5UUkFfUkVGUkVTSF9NQiAoVjRMMl9DSURfTVBFR19CQVNFKzIxNCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19GUkFNRV9SQ19FTkFCTEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0hFQURFUl9NT0RFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjE2KQogZW51bSB2NGwyX21wZWdfdmlkZW9faGVhZGVyX21vZGUgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSEVBREVSX01PREVfU0VQQVJBVEUgPSAwLAogIFY0TDJfTVBFR19WSURFT19IRUFERVJfTU9ERV9KT0lORURfV0lUSF8xU1RfRlJBTUUgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTUFYX1JFRl9QSUMgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01CX1JDX0VOQUJMRSAoVjRMMl9DSURfTVBFR19CQVNFKzIxOCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NQVhfQllURVMgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VTFRJX1NMSUNFX01BWF9NQiAoVjRMMl9DSURfTVBFR19CQVNFKzIyMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjIxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX3ZpZGVvX211bHRpX3NsaWNlX21vZGUgewogIFY0TDJfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFX1NJTkdMRSA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19NVUxUSV9TSUNFX01PREVfTUFYX01CID0gMSwKICBWNEwyX01QRUdfVklERU9fTVVMVElfU0lDRV9NT0RFX01BWF9CWVRFUyA9IDIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WQlZfU0laRSAoVjRMMl9DSURfTVBFR19CQVNFKzIyMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fREVDX1BUUyAoVjRMMl9DSURfTVBFR19CQVNFKzIyMykKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19ERUNfRlJBTUUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZCVl9ERUxBWSAoVjRMMl9DSURfTVBFR19CQVNFKzIyNSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19SRVBFQVRfU0VRX0hFQURFUiAoVjRMMl9DSURfTVBFR19CQVNFKzIyNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19JX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzAwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfUF9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzMwMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19CX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzAyKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfTUlOX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX01BWF9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzMwNCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfUF9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzM1MSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0JfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTUlOX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzUzKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTUFYX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzU0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0XzhYOF9UUkFOU0ZPUk0gKFY0TDJfQ0lEX01QRUdfQkFTRSszNTUpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9DUEJfU0laRSAoVjRMMl9DSURfTVBFR19CQVNFKzM1NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9FTlRST1BZX01PREUgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTcpCiBlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X2VudHJvcHlfbW9kZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQVZMQyA9IDAsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfRU5UUk9QWV9NT0RFX0NBQkFDID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfSV9QRVJJT0QgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTEVWRUwgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTkpCiBlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X2xldmVsIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMV8wID0gMCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xQiA9IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMSA9IDIsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMV8yID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMV8zID0gNCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8yXzAgPSA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8yXzEgPSA2LAogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzJfMiA9IDcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzNfMCA9IDgsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfM18xID0gOSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfM18yID0gMTAsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8wID0gMTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzRfMSA9IDEyLAogIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzRfMiA9IDEzLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF81XzAgPSAxNCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF81XzEgPSAxNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfQUxQSEEgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfQkVUQSAoVjRMMl9DSURfTVBFR19CQVNFKzM2MSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX01PREUgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9sb29wX2ZpbHRlcl9tb2RlIHsKICBWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0VOQUJMRUQgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0RJU0FCTEVEID0gMSwKICBWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0RJU0FCTEVEX0FUX1NMSUNFX0JPVU5EQVJZID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRSAoVjRMMl9DSURfTVBFR19CQVNFKzM2MykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X3Byb2ZpbGUgewogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfQkFTRUxJTkUgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0NPTlNUUkFJTkVEX0JBU0VMSU5FID0gMSwKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX01BSU4gPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0VYVEVOREVEID0gMywKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0ggPSA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfMTAgPSA1LAogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF80MjIgPSA2LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfNDQ0X1BSRURJQ1RJVkUgPSA3LAogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF8xMF9JTlRSQSA9IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF80MjJfSU5UUkEgPSA5LAogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF80NDRfSU5UUkEgPSAxMCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9DQVZMQ180NDRfSU5UUkEgPSAxMSwKICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NDQUxBQkxFX0JBU0VMSU5FID0gMTIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfU0NBTEFCTEVfSElHSCA9IDEzLAogIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfU0NBTEFCTEVfSElHSF9JTlRSQSA9IDE0LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NURVJFT19ISUdIID0gMTUsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9NVUxUSVZJRVdfSElHSCA9IDE2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfRVhUX1NBUl9IRUlHSFQgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfVlVJX0VYVF9TQVJfV0lEVEggKFY0TDJfQ0lEX01QRUdfQkFTRSszNjUpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0VOQUJMRSAoVjRMMl9DSURfTVBFR19CQVNFKzM2NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQyAoVjRMMl9DSURfTVBFR19CQVNFKzM2NykKIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfdnVpX3Nhcl9pZGMgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ19VTlNQRUNJRklFRCA9IDAsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMXgxID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTJ4MTEgPSAyLAogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzEweDExID0gMywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTZ4MTEgPSA0LAogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzQweDMzID0gNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMjR4MTEgPSA2LAogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzIweDExID0gNywKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMzJ4MTEgPSA4LAogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzgweDMzID0gOSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTh4MTEgPSAxMCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xNXgxMSA9IDExLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ182NHgzMyA9IDEyLAogIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE2MHg5OSA9IDEzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ180eDMgPSAxNCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18zeDIgPSAxNSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMngxID0gMTYsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfRVhURU5ERUQgPSAxNywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZSQU1FX1BBQ0tJTkcgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjgpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0NVUlJFTlRfRlJBTUVfMCAoVjRMMl9DSURfTVBFR19CQVNFKzM2OSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzcwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2gyNjRfc2VpX2ZwX2FycmFuZ2VtZW50X3R5cGUgewogIFY0TDJfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFX0NIRUNLRVJCT0FSRCA9IDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X1NFSV9GUF9BUlJBTkdFTUVOVF9UWVBFX0NPTFVNTiA9IDEsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0FSUkFOR0VNRU5UX1RZUEVfUk9XID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0FSUkFOR0VNRU5UX1RZUEVfU0lERV9CWV9TSURFID0gMywKICBWNEwyX01QRUdfVklERU9fSDI2NF9TRUlfRlBfQVJSQU5HRU1FTlRfVFlQRV9UT1BfQk9UVE9NID0gNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfU0VJX0ZQX0FSUkFOR0VNRU5UX1RZUEVfVEVNUE9SQUwgPSA1LAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9GTU8gKFY0TDJfQ0lEX01QRUdfQkFTRSszNzEpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9GTU9fTUFQX1RZUEUgKFY0TDJfQ0lEX01QRUdfQkFTRSszNzIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9mbW9fbWFwX3R5cGUgewogIFY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19NQVBfVFlQRV9JTlRFUkxFQVZFRF9TTElDRVMgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fTUFQX1RZUEVfU0NBVFRFUkVEX1NMSUNFUyA9IDEsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfRk1PX01BUF9UWVBFX0ZPUkVHUk9VTkRfV0lUSF9MRUZUX09WRVIgPSAyLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fTUFQX1RZUEVfQk9YX09VVCA9IDMsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfRk1PX01BUF9UWVBFX1JBU1RFUl9TQ0FOID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfRk1PX01BUF9UWVBFX1dJUEVfU0NBTiA9IDUsCiAgVjRMMl9NUEVHX1ZJREVPX0gyNjRfRk1PX01BUF9UWVBFX0VYUExJQ0lUID0gNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRk1PX1NMSUNFX0dST1VQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzczKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0ZNT19DSEFOR0VfRElSRUNUSU9OIChWNEwyX0NJRF9NUEVHX0JBU0UrMzc0KQogZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9mbW9fY2hhbmdlX2RpciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19IMjY0X0ZNT19DSEFOR0VfRElSX1JJR0hUID0gMCwKICBWNEwyX01QRUdfVklERU9fSDI2NF9GTU9fQ0hBTkdFX0RJUl9MRUZUID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRk1PX0NIQU5HRV9SQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzc1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0ZNT19SVU5fTEVOR1RIIChWNEwyX0NJRF9NUEVHX0JBU0UrMzc2KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfQVNPIChWNEwyX0NJRF9NUEVHX0JBU0UrMzc3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0FTT19TTElDRV9PUkRFUiAoVjRMMl9DSURfTVBFR19CQVNFKzM3OCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0hJRVJBUkNISUNBTF9DT0RJTkcgKFY0TDJfQ0lEX01QRUdfQkFTRSszNzkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfSElFUkFSQ0hJQ0FMX0NPRElOR19UWVBFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzgwKQogZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9oaWVyYXJjaGljYWxfY29kaW5nX3R5cGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fSDI2NF9ISUVSQVJDSElDQUxfQ09ESU5HX0IgPSAwLAogIFY0TDJfTVBFR19WSURFT19IMjY0X0hJRVJBUkNISUNBTF9DT0RJTkdfUCA9IDEsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0hJRVJBUkNISUNBTF9DT0RJTkdfTEFZRVIgKFY0TDJfQ0lEX01QRUdfQkFTRSszODEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfSElFUkFSQ0hJQ0FMX0NPRElOR19MQVlFUl9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzM4MikKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9JX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrNDAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9QX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrNDAxKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0JfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X01JTl9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzQwMykKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9NQVhfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0xFVkVMIChWNEwyX0NJRF9NUEVHX0JBU0UrNDA1KQogZW51bSB2NGwyX21wZWdfdmlkZW9fbXBlZzRfbGV2ZWwgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfMCA9IDAsCiAgVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzBCID0gMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzEgPSAyLAogIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8yID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzMgPSA0LAogIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8zQiA9IDUsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF80ID0gNiwKICBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfNSA9IDcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFIChWNEwyX0NJRF9NUEVHX0JBU0UrNDA2KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX3ZpZGVvX21wZWc0X3Byb2ZpbGUgewogIFY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX1NJTVBMRSA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX0FEVkFOQ0VEX1NJTVBMRSA9IDEsCiAgVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfQ09SRSA9IDIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX1NJTVBMRV9TQ0FMQUJMRSA9IDMsCiAgVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfQURWQU5DRURfQ09ESU5HX0VGRklDSUVOQ1kgPSA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfUVBFTCAoVjRMMl9DSURfTVBFR19CQVNFKzQwNykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfTlVNX1BBUlRJVElPTlMgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDApCitlbnVtIHY0bDJfdnA4X251bV9wYXJ0aXRpb25zIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9DSURfTVBFR19WSURFT19WUFhfMV9QQVJUSVRJT04gPSAwLAorIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYXzJfUEFSVElUSU9OUyA9IDEsCisgVjRMMl9DSURfTVBFR19WSURFT19WUFhfNF9QQVJUSVRJT05TID0gMiwKKyBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF84X1BBUlRJVElPTlMgPSAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0lNRF9ESVNBQkxFXzRYNCAoVjRMMl9DSURfTVBFR19CQVNFKzUwMSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfTlVNX1JFRl9GUkFNRVMgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDIpCitlbnVtIHY0bDJfdnA4X251bV9yZWZfZnJhbWVzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9DSURfTVBFR19WSURFT19WUFhfMV9SRUZfRlJBTUUgPSAwLAorIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYXzJfUkVGX0ZSQU1FID0gMSwKKyBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF8zX1JFRl9GUkFNRSA9IDIsCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfRklMVEVSX0xFVkVMIChWNEwyX0NJRF9NUEVHX0JBU0UrNTAzKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9GSUxURVJfU0hBUlBORVNTIChWNEwyX0NJRF9NUEVHX0JBU0UrNTA0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9HT0xERU5fRlJBTUVfUkVGX1BFUklPRCAoVjRMMl9DSURfTVBFR19CQVNFKzUwNSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfR09MREVOX0ZSQU1FX1NFTCAoVjRMMl9DSURfTVBFR19CQVNFKzUwNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHY0bDJfdnA4X2dvbGRlbl9mcmFtZV9zZWwgeworIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX0dPTERFTl9GUkFNRV9VU0VfUFJFViA9IDAsCisgVjRMMl9DSURfTVBFR19WSURFT19WUFhfR09MREVOX0ZSQU1FX1VTRV9SRUZfUEVSSU9EID0gMSwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1ZQWF9NSU5fUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MDcpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX01BWF9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzUwOCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfSV9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzUwOSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19WUFhfUF9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzUxMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVlBYX1BST0ZJTEUgKFY0TDJfQ0lEX01QRUdfQkFTRSs1MTEpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFIChWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4MTAwMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREUgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzApCiBlbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGUgewotIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfTUFOVUFMID0gMCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9NQU5VQUwgPSAwLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfQVVUTyA9IDEsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVIgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzEpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEUgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsyKQogZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGUgewogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV9PRkYgPSAwLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8xRF9IT1IgPSAxLAotIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8xRF9WRVJUID0gMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX1ZFUlQgPSAyLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9IVl9TRVBBUkFCTEUgPSAzLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9TWU1fTk9OX1NFUEFSQUJMRSA9IDQsCiB9OwotI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEUgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEUgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzMpCiBlbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2Nocm9tYV9zcGF0aWFsX2ZpbHRlcl90eXBlIHsKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV9PRkYgPSAwLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiA9IDEsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNCkKIGVudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fdGVtcG9yYWxfZmlsdGVyX21vZGUgewogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX01BTlVBTCA9IDAsCi0gVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfQVVUTyA9IDEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX0FVVE8gPSAxLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUiAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNikKLWVudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZSB7CiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX09GRiA9IDAsCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX0hPUiA9IDEsCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX1ZFUlQgPSAyLAotIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1JfVkVSVCA9IDMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1JfVkVSVCA9IDMsCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX0RJQUcgPSA0LAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9CT1RUT00gKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzcpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfVE9QIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9UT1AgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzgpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9CT1RUT00gKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzkpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9UT1AgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzEwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfU1RSRUFNX0lOU0VSVF9OQVZfUEFDS0VUUyAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMTEpCi0jZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAweDExMDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHgxMTAwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0RFQ09ERVJfSDI2NF9ESVNQTEFZX0RFTEFZIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19ERUNPREVSX0gyNjRfRElTUExBWV9ERUxBWV9FTkFCTEUgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSsxKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERSAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzIpCi1lbnVtIHY0bDJfbXBlZ19tZmM1MV92aWRlb19mcmFtZV9za2lwX21vZGUgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9tcGVnX21mYzUxX3ZpZGVvX2ZyYW1lX3NraXBfbW9kZSB7CiAgVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9ESVNBQkxFRCA9IDAsCiAgVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9MRVZFTF9MSU1JVCA9IDEsCiAgVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9CVUZfTElNSVQgPSAyLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEUgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSszKQogZW51bSB2NGwyX21wZWdfbWZjNTFfdmlkZW9fZm9yY2VfZnJhbWVfdHlwZSB7CiAgVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZPUkNFX0ZSQU1FX1RZUEVfRElTQUJMRUQgPSAwLAotIFY0TDJfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFX0lfRlJBTUUgPSAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfTUZDNTFfVklERU9fRk9SQ0VfRlJBTUVfVFlQRV9JX0ZSQU1FID0gMSwKICBWNEwyX01QRUdfTUZDNTFfVklERU9fRk9SQ0VfRlJBTUVfVFlQRV9OT1RfQ09ERUQgPSAyLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19QQURESU5HIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNCkKLSNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19QQURESU5HX1lVViAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1BBRERJTkdfWVVWIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19SQ19GSVhFRF9UQVJHRVRfQklUIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNikKICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19SQ19SRUFDVElPTl9DT0VGRiAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzcpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19BQ1RJVklUWSAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzUwKQotI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfQURBUFRJVkVfUkNfREFSSyAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzUxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX0RBUksgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX1NNT09USCAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzUyKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfQURBUFRJVkVfUkNfU1RBVElDIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNTMpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9OVU1fUkVGX1BJQ19GT1JfUCAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzU0KQotI2RlZmluZSBWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0NBTUVSQSB8IDB4OTAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19DQU1FUkEgfCAweDkwMCkKICNkZWZpbmUgVjRMMl9DSURfQ0FNRVJBX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfQ0FNRVJBIHwgMSkKICNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkVfQVVUTyAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMSkKIGVudW0gdjRsMl9leHBvc3VyZV9hdXRvX3R5cGUgewotIFY0TDJfRVhQT1NVUkVfQVVUTyA9IDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfRVhQT1NVUkVfQVVUTyA9IDAsCiAgVjRMMl9FWFBPU1VSRV9NQU5VQUwgPSAxLAogIFY0TDJfRVhQT1NVUkVfU0hVVFRFUl9QUklPUklUWSA9IDIsCiAgVjRMMl9FWFBPU1VSRV9BUEVSVFVSRV9QUklPUklUWSA9IDMKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkVfQUJTT0xVVEUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzIpCiAjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFkgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzMpCiAjZGVmaW5lIFY0TDJfQ0lEX1BBTl9SRUxBVElWRSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrNCkKLSNkZWZpbmUgVjRMMl9DSURfVElMVF9SRUxBVElWRSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrNSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX1RJTFRfUkVMQVRJVkUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzUpCiAjZGVmaW5lIFY0TDJfQ0lEX1BBTl9SRVNFVCAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrNikKICNkZWZpbmUgVjRMMl9DSURfVElMVF9SRVNFVCAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrNykKICNkZWZpbmUgVjRMMl9DSURfUEFOX0FCU09MVVRFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs4KQotI2RlZmluZSBWNEwyX0NJRF9USUxUX0FCU09MVVRFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfVElMVF9BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrOSkKICNkZWZpbmUgVjRMMl9DSURfRk9DVVNfQUJTT0xVVEUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEwKQogI2RlZmluZSBWNEwyX0NJRF9GT0NVU19SRUxBVElWRSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTEpCiAjZGVmaW5lIFY0TDJfQ0lEX0ZPQ1VTX0FVVE8gKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEyKQotI2RlZmluZSBWNEwyX0NJRF9aT09NX0FCU09MVVRFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxMykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX1pPT01fQUJTT0xVVEUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEzKQogI2RlZmluZSBWNEwyX0NJRF9aT09NX1JFTEFUSVZFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNCkKICNkZWZpbmUgVjRMMl9DSURfWk9PTV9DT05USU5VT1VTIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNSkKICNkZWZpbmUgVjRMMl9DSURfUFJJVkFDWSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTYpCi0jZGVmaW5lIFY0TDJfQ0lEX0lSSVNfQUJTT0xVVEUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfSVJJU19BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTcpCiAjZGVmaW5lIFY0TDJfQ0lEX0lSSVNfUkVMQVRJVkUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE4KQogI2RlZmluZSBWNEwyX0NJRF9BVVRPX0VYUE9TVVJFX0JJQVMgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE5KQogI2RlZmluZSBWNEwyX0NJRF9BVVRPX05fUFJFU0VUX1dISVRFX0JBTEFOQ0UgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzIwKQotZW51bSB2NGwyX2F1dG9fbl9wcmVzZXRfd2hpdGVfYmFsYW5jZSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB2NGwyX2F1dG9fbl9wcmVzZXRfd2hpdGVfYmFsYW5jZSB7CiAgVjRMMl9XSElURV9CQUxBTkNFX01BTlVBTCA9IDAsCiAgVjRMMl9XSElURV9CQUxBTkNFX0FVVE8gPSAxLAogIFY0TDJfV0hJVEVfQkFMQU5DRV9JTkNBTkRFU0NFTlQgPSAyLAotIFY0TDJfV0hJVEVfQkFMQU5DRV9GTFVPUkVTQ0VOVCA9IDMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfV0hJVEVfQkFMQU5DRV9GTFVPUkVTQ0VOVCA9IDMsCiAgVjRMMl9XSElURV9CQUxBTkNFX0ZMVU9SRVNDRU5UX0ggPSA0LAogIFY0TDJfV0hJVEVfQkFMQU5DRV9IT1JJWk9OID0gNSwKICBWNEwyX1dISVRFX0JBTEFOQ0VfREFZTElHSFQgPSA2LAotIFY0TDJfV0hJVEVfQkFMQU5DRV9GTEFTSCA9IDcsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfV0hJVEVfQkFMQU5DRV9GTEFTSCA9IDcsCiAgVjRMMl9XSElURV9CQUxBTkNFX0NMT1VEWSA9IDgsCiAgVjRMMl9XSElURV9CQUxBTkNFX1NIQURFID0gOSwKIH07Ci0jZGVmaW5lIFY0TDJfQ0lEX1dJREVfRFlOQU1JQ19SQU5HRSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9XSURFX0RZTkFNSUNfUkFOR0UgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzIxKQogI2RlZmluZSBWNEwyX0NJRF9JTUFHRV9TVEFCSUxJWkFUSU9OIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyMikKICNkZWZpbmUgVjRMMl9DSURfSVNPX1NFTlNJVElWSVRZIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyMykKICNkZWZpbmUgVjRMMl9DSURfSVNPX1NFTlNJVElWSVRZX0FVVE8gKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzI0KQotZW51bSB2NGwyX2lzb19zZW5zaXRpdml0eV9hdXRvX3R5cGUgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9pc29fc2Vuc2l0aXZpdHlfYXV0b190eXBlIHsKICBWNEwyX0lTT19TRU5TSVRJVklUWV9NQU5VQUwgPSAwLAogIFY0TDJfSVNPX1NFTlNJVElWSVRZX0FVVE8gPSAxLAogfTsKLSNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkVfTUVURVJJTkcgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzI1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkVfTUVURVJJTkcgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzI1KQogZW51bSB2NGwyX2V4cG9zdXJlX21ldGVyaW5nIHsKICBWNEwyX0VYUE9TVVJFX01FVEVSSU5HX0FWRVJBR0UgPSAwLAogIFY0TDJfRVhQT1NVUkVfTUVURVJJTkdfQ0VOVEVSX1dFSUdIVEVEID0gMSwKLSBWNEwyX0VYUE9TVVJFX01FVEVSSU5HX1NQT1QgPSAyLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0VYUE9TVVJFX01FVEVSSU5HX1NQT1QgPSAyLAogIFY0TDJfRVhQT1NVUkVfTUVURVJJTkdfTUFUUklYID0gMywKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX1NDRU5FX01PREUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzI2KQotZW51bSB2NGwyX3NjZW5lX21vZGUgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9zY2VuZV9tb2RlIHsKICBWNEwyX1NDRU5FX01PREVfTk9ORSA9IDAsCiAgVjRMMl9TQ0VORV9NT0RFX0JBQ0tMSUdIVCA9IDEsCiAgVjRMMl9TQ0VORV9NT0RFX0JFQUNIX1NOT1cgPSAyLAotIFY0TDJfU0NFTkVfTU9ERV9DQU5ETEVfTElHSFQgPSAzLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX1NDRU5FX01PREVfQ0FORExFX0xJR0hUID0gMywKICBWNEwyX1NDRU5FX01PREVfREFXTl9EVVNLID0gNCwKICBWNEwyX1NDRU5FX01PREVfRkFMTF9DT0xPUlMgPSA1LAogIFY0TDJfU0NFTkVfTU9ERV9GSVJFV09SS1MgPSA2LAotIFY0TDJfU0NFTkVfTU9ERV9MQU5EU0NBUEUgPSA3LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX1NDRU5FX01PREVfTEFORFNDQVBFID0gNywKICBWNEwyX1NDRU5FX01PREVfTklHSFQgPSA4LAogIFY0TDJfU0NFTkVfTU9ERV9QQVJUWV9JTkRPT1IgPSA5LAogIFY0TDJfU0NFTkVfTU9ERV9QT1JUUkFJVCA9IDEwLAotIFY0TDJfU0NFTkVfTU9ERV9TUE9SVFMgPSAxMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9TQ0VORV9NT0RFX1NQT1JUUyA9IDExLAogIFY0TDJfU0NFTkVfTU9ERV9TVU5TRVQgPSAxMiwKICBWNEwyX1NDRU5FX01PREVfVEVYVCA9IDEzLAogfTsKLSNkZWZpbmUgVjRMMl9DSURfM0FfTE9DSyAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMjcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF8zQV9MT0NLIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyNykKICNkZWZpbmUgVjRMMl9MT0NLX0VYUE9TVVJFICgxIDw8IDApCiAjZGVmaW5lIFY0TDJfTE9DS19XSElURV9CQUxBTkNFICgxIDw8IDEpCiAjZGVmaW5lIFY0TDJfTE9DS19GT0NVUyAoMSA8PCAyKQotI2RlZmluZSBWNEwyX0NJRF9BVVRPX0ZPQ1VTX1NUQVJUIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsyOCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0FVVE9fRk9DVVNfU1RBUlQgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzI4KQogI2RlZmluZSBWNEwyX0NJRF9BVVRPX0ZPQ1VTX1NUT1AgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzI5KQogI2RlZmluZSBWNEwyX0NJRF9BVVRPX0ZPQ1VTX1NUQVRVUyAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMzApCiAjZGVmaW5lIFY0TDJfQVVUT19GT0NVU19TVEFUVVNfSURMRSAoMCA8PCAwKQotI2RlZmluZSBWNEwyX0FVVE9fRk9DVVNfU1RBVFVTX0JVU1kgKDEgPDwgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQVVUT19GT0NVU19TVEFUVVNfQlVTWSAoMSA8PCAwKQogI2RlZmluZSBWNEwyX0FVVE9fRk9DVVNfU1RBVFVTX1JFQUNIRUQgKDEgPDwgMSkKICNkZWZpbmUgVjRMMl9BVVRPX0ZPQ1VTX1NUQVRVU19GQUlMRUQgKDEgPDwgMikKICNkZWZpbmUgVjRMMl9DSURfQVVUT19GT0NVU19SQU5HRSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMzEpCi1lbnVtIHY0bDJfYXV0b19mb2N1c19yYW5nZSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB2NGwyX2F1dG9fZm9jdXNfcmFuZ2UgewogIFY0TDJfQVVUT19GT0NVU19SQU5HRV9BVVRPID0gMCwKICBWNEwyX0FVVE9fRk9DVVNfUkFOR0VfTk9STUFMID0gMSwKICBWNEwyX0FVVE9fRk9DVVNfUkFOR0VfTUFDUk8gPSAyLAotIFY0TDJfQVVUT19GT0NVU19SQU5HRV9JTkZJTklUWSA9IDMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfQVVUT19GT0NVU19SQU5HRV9JTkZJTklUWSA9IDMsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfRk1fVFggfCAweDkwMCkKICNkZWZpbmUgVjRMMl9DSURfRk1fVFhfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19GTV9UWCB8IDEpCi0jZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9ERVZJQVRJT04gKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX0RFVklBVElPTiAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDEpCiAjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9QSSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDIpCiAjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9QVFkgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAzKQogI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUFNfTkFNRSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDUpCi0jZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNikKICNkZWZpbmUgVjRMMl9DSURfQVVESU9fTElNSVRFUl9FTkFCTEVEIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNjQpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfUkVMRUFTRV9USU1FIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNjUpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfREVWSUFUSU9OIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNjYpCi0jZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0VOQUJMRUQgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0VOQUJMRUQgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MCkKICNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fR0FJTiAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgxKQogI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9USFJFU0hPTEQgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MikKICNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUUgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MykKLSNkZWZpbmUgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fUkVMRUFTRV9USU1FIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9SRUxFQVNFX1RJTUUgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4NCkKICNkZWZpbmUgVjRMMl9DSURfUElMT1RfVE9ORV9FTkFCTEVEIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTYpCiAjZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfREVWSUFUSU9OIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTcpCiAjZGVmaW5lIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRlJFUVVFTkNZIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTgpCi0jZGVmaW5lIFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVMgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAxMTIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTEyKQogZW51bSB2NGwyX3ByZWVtcGhhc2lzIHsKICBWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVEID0gMCwKICBWNEwyX1BSRUVNUEhBU0lTXzUwX3VTID0gMSwKLSBWNEwyX1BSRUVNUEhBU0lTXzc1X3VTID0gMiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9QUkVFTVBIQVNJU183NV91UyA9IDIsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9UVU5FX1BPV0VSX0xFVkVMIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTEzKQogI2RlZmluZSBWNEwyX0NJRF9UVU5FX0FOVEVOTkFfQ0FQQUNJVE9SIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTE0KQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfRkxBU0ggfCAweDkwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19GTEFTSCB8IDB4OTAwKQogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX0ZMQVNIIHwgMSkKICNkZWZpbmUgVjRMMl9DSURfRkxBU0hfTEVEX01PREUgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAxKQogZW51bSB2NGwyX2ZsYXNoX2xlZF9tb2RlIHsKLSBWNEwyX0ZMQVNIX0xFRF9NT0RFX05PTkUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfRkxBU0hfTEVEX01PREVfTk9ORSwKICBWNEwyX0ZMQVNIX0xFRF9NT0RFX0ZMQVNILAogIFY0TDJfRkxBU0hfTEVEX01PREVfVE9SQ0gsCiB9OwotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9TVFJPQkVfU09VUkNFIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TT1VSQ0UgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAyKQogZW51bSB2NGwyX2ZsYXNoX3N0cm9iZV9zb3VyY2UgewogIFY0TDJfRkxBU0hfU1RST0JFX1NPVVJDRV9TT0ZUV0FSRSwKICBWNEwyX0ZMQVNIX1NUUk9CRV9TT1VSQ0VfRVhURVJOQUwsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRSAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDMpCiAjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TVE9QIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgNCkKICNkZWZpbmUgVjRMMl9DSURfRkxBU0hfU1RST0JFX1NUQVRVUyAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDUpCi0jZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1RJTUVPVVQgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfRkxBU0hfVElNRU9VVCAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDYpCiAjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0lOVEVOU0lUWSAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDcpCiAjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1RPUkNIX0lOVEVOU0lUWSAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDgpCiAjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0lORElDQVRPUl9JTlRFTlNJVFkgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA5KQotI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9GQVVMVCAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDEwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfRkxBU0hfRkFVTFQgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAxMCkKICNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9PVkVSX1ZPTFRBR0UgKDEgPDwgMCkKICNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9USU1FT1VUICgxIDw8IDEpCiAjZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfT1ZFUl9URU1QRVJBVFVSRSAoMSA8PCAyKQotI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX1NIT1JUX0NJUkNVSVQgKDEgPDwgMykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfU0hPUlRfQ0lSQ1VJVCAoMSA8PCAzKQogI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX09WRVJfQ1VSUkVOVCAoMSA8PCA0KQogI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX0lORElDQVRPUiAoMSA8PCA1KQogI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9DSEFSR0UgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAxMSkKLSNkZWZpbmUgVjRMMl9DSURfRkxBU0hfUkVBRFkgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAxMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1JFQURZIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMTIpCiAjZGVmaW5lIFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0pQRUcgfCAweDkwMCkKICNkZWZpbmUgVjRMMl9DSURfSlBFR19DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX0pQRUcgfCAxKQogI2RlZmluZSBWNEwyX0NJRF9KUEVHX0NIUk9NQV9TVUJTQU1QTElORyAoVjRMMl9DSURfSlBFR19DTEFTU19CQVNFICsgMSkKLWVudW0gdjRsMl9qcGVnX2Nocm9tYV9zdWJzYW1wbGluZyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB2NGwyX2pwZWdfY2hyb21hX3N1YnNhbXBsaW5nIHsKICBWNEwyX0pQRUdfQ0hST01BX1NVQlNBTVBMSU5HXzQ0NCA9IDAsCiAgVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR180MjIgPSAxLAogIFY0TDJfSlBFR19DSFJPTUFfU1VCU0FNUExJTkdfNDIwID0gMiwKLSBWNEwyX0pQRUdfQ0hST01BX1NVQlNBTVBMSU5HXzQxMSA9IDMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfSlBFR19DSFJPTUFfU1VCU0FNUExJTkdfNDExID0gMywKICBWNEwyX0pQRUdfQ0hST01BX1NVQlNBTVBMSU5HXzQxMCA9IDQsCiAgVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR19HUkFZID0gNSwKIH07Ci0jZGVmaW5lIFY0TDJfQ0lEX0pQRUdfUkVTVEFSVF9JTlRFUlZBTCAoVjRMMl9DSURfSlBFR19DTEFTU19CQVNFICsgMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0pQRUdfUkVTVEFSVF9JTlRFUlZBTCAoVjRMMl9DSURfSlBFR19DTEFTU19CQVNFICsgMikKICNkZWZpbmUgVjRMMl9DSURfSlBFR19DT01QUkVTU0lPTl9RVUFMSVRZIChWNEwyX0NJRF9KUEVHX0NMQVNTX0JBU0UgKyAzKQogI2RlZmluZSBWNEwyX0NJRF9KUEVHX0FDVElWRV9NQVJLRVIgKFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRSArIDQpCiAjZGVmaW5lIFY0TDJfSlBFR19BQ1RJVkVfTUFSS0VSX0FQUDAgKDEgPDwgMCkKLSNkZWZpbmUgVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfQVBQMSAoMSA8PCAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfQVBQMSAoMSA8PCAxKQogI2RlZmluZSBWNEwyX0pQRUdfQUNUSVZFX01BUktFUl9DT00gKDEgPDwgMTYpCiAjZGVmaW5lIFY0TDJfSlBFR19BQ1RJVkVfTUFSS0VSX0RRVCAoMSA8PCAxNykKICNkZWZpbmUgVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfREhUICgxIDw8IDE4KQotI2RlZmluZSBWNEwyX0NJRF9JTUFHRV9TT1VSQ0VfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0lNQUdFX1NPVVJDRSB8IDB4OTAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfSU1BR0VfU09VUkNFX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19JTUFHRV9TT1VSQ0UgfCAweDkwMCkKICNkZWZpbmUgVjRMMl9DSURfSU1BR0VfU09VUkNFX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfSU1BR0VfU09VUkNFIHwgMSkKICNkZWZpbmUgVjRMMl9DSURfVkJMQU5LIChWNEwyX0NJRF9JTUFHRV9TT1VSQ0VfQ0xBU1NfQkFTRSArIDEpCiAjZGVmaW5lIFY0TDJfQ0lEX0hCTEFOSyAoVjRMMl9DSURfSU1BR0VfU09VUkNFX0NMQVNTX0JBU0UgKyAyKQotI2RlZmluZSBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOIChWNEwyX0NJRF9JTUFHRV9TT1VSQ0VfQ0xBU1NfQkFTRSArIDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOIChWNEwyX0NJRF9JTUFHRV9TT1VSQ0VfQ0xBU1NfQkFTRSArIDMpCiAjZGVmaW5lIFY0TDJfQ0lEX0lNQUdFX1BST0NfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0lNQUdFX1BST0MgfCAweDkwMCkKICNkZWZpbmUgVjRMMl9DSURfSU1BR0VfUFJPQ19DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX0lNQUdFX1BST0MgfCAxKQogI2RlZmluZSBWNEwyX0NJRF9MSU5LX0ZSRVEgKFY0TDJfQ0lEX0lNQUdFX1BST0NfQ0xBU1NfQkFTRSArIDEpCi0jZGVmaW5lIFY0TDJfQ0lEX1BJWEVMX1JBVEUgKFY0TDJfQ0lEX0lNQUdFX1BST0NfQ0xBU1NfQkFTRSArIDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9QSVhFTF9SQVRFIChWNEwyX0NJRF9JTUFHRV9QUk9DX0NMQVNTX0JBU0UgKyAyKQogI2RlZmluZSBWNEwyX0NJRF9URVNUX1BBVFRFUk4gKFY0TDJfQ0lEX0lNQUdFX1BST0NfQ0xBU1NfQkFTRSArIDMpCiAjZGVmaW5lIFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19EViB8IDB4OTAwKQogI2RlZmluZSBWNEwyX0NJRF9EVl9DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX0RWIHwgMSkKLSNkZWZpbmUgVjRMMl9DSURfRFZfVFhfSE9UUExVRyAoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9EVl9UWF9IT1RQTFVHIChWNEwyX0NJRF9EVl9DTEFTU19CQVNFICsgMSkKICNkZWZpbmUgVjRMMl9DSURfRFZfVFhfUlhTRU5TRSAoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDIpCiAjZGVmaW5lIFY0TDJfQ0lEX0RWX1RYX0VESURfUFJFU0VOVCAoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDMpCiAjZGVmaW5lIFY0TDJfQ0lEX0RWX1RYX01PREUgKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyA0KQotZW51bSB2NGwyX2R2X3R4X21vZGUgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9kdl90eF9tb2RlIHsKICBWNEwyX0RWX1RYX01PREVfRFZJX0QgPSAwLAogIFY0TDJfRFZfVFhfTU9ERV9IRE1JID0gMSwKIH07Ci0jZGVmaW5lIFY0TDJfQ0lEX0RWX1RYX1JHQl9SQU5HRSAoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9EVl9UWF9SR0JfUkFOR0UgKFY0TDJfQ0lEX0RWX0NMQVNTX0JBU0UgKyA1KQogZW51bSB2NGwyX2R2X3JnYl9yYW5nZSB7CiAgVjRMMl9EVl9SR0JfUkFOR0VfQVVUTyA9IDAsCiAgVjRMMl9EVl9SR0JfUkFOR0VfTElNSVRFRCA9IDEsCi0gVjRMMl9EVl9SR0JfUkFOR0VfRlVMTCA9IDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfRFZfUkdCX1JBTkdFX0ZVTEwgPSAyLAogfTsKICNkZWZpbmUgVjRMMl9DSURfRFZfUlhfUE9XRVJfUFJFU0VOVCAoVjRMMl9DSURfRFZfQ0xBU1NfQkFTRSArIDEwMCkKICNkZWZpbmUgVjRMMl9DSURfRFZfUlhfUkdCX1JBTkdFIChWNEwyX0NJRF9EVl9DTEFTU19CQVNFICsgMTAxKQotI2RlZmluZSBWNEwyX0NJRF9GTV9SWF9DTEFTU19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfRk1fUlggfCAweDkwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0ZNX1JYX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19GTV9SWCB8IDB4OTAwKQogI2RlZmluZSBWNEwyX0NJRF9GTV9SWF9DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX0ZNX1JYIHwgMSkKICNkZWZpbmUgVjRMMl9DSURfVFVORV9ERUVNUEhBU0lTIChWNEwyX0NJRF9GTV9SWF9DTEFTU19CQVNFICsgMSkKIGVudW0gdjRsMl9kZWVtcGhhc2lzIHsKLSBWNEwyX0RFRU1QSEFTSVNfRElTQUJMRUQgPSBWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0RFRU1QSEFTSVNfRElTQUJMRUQgPSBWNEwyX1BSRUVNUEhBU0lTX0RJU0FCTEVELAogIFY0TDJfREVFTVBIQVNJU181MF91UyA9IFY0TDJfUFJFRU1QSEFTSVNfNTBfdVMsCiAgVjRMMl9ERUVNUEhBU0lTXzc1X3VTID0gVjRMMl9QUkVFTVBIQVNJU183NV91UywKIH07Ci0jZGVmaW5lIFY0TDJfQ0lEX1JEU19SRUNFUFRJT04gKFY0TDJfQ0lEX0ZNX1JYX0NMQVNTX0JBU0UgKyAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfUkRTX1JFQ0VQVElPTiAoVjRMMl9DSURfRk1fUlhfQ0xBU1NfQkFTRSArIDIpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdjRsMi1kdi10aW1pbmdzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItZHYtdGltaW5ncy5oCmluZGV4IDJjOWVjODkuLmJiMTM3NGEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdjRsMi1kdi10aW1pbmdzLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLWR2LXRpbWluZ3MuaApAQCAtMTUzLDYgKzE1Myw0IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8yNTYwWDE2MDBQODUgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygyNTYwLCAxNjAwLCAwLCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgNTA1MjUwMDAwLCAyMDgsIDI4MCwgNDg4LCAzLCA2LCA3MywgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsIDApICB9CiAjZGVmaW5lIFY0TDJfRFZfQlRfRE1UXzI1NjBYMTYwMFAxMjBfUkIgeyAgIC50eXBlID0gVjRMMl9EVl9CVF82NTZfMTEyMCwgICBWNEwyX0lOSVRfQlRfVElNSU5HUygyNTYwLCAxNjAwLCAwLCBWNEwyX0RWX0hTWU5DX1BPU19QT0wsICAgNTUyNzUwMDAwLCA0OCwgMzIsIDgwLCAzLCA2LCA4NSwgMCwgMCwgMCwgICBWNEwyX0RWX0JUX1NURF9ETVQgfCBWNEwyX0RWX0JUX1NURF9DVlQsICAgVjRMMl9EVl9GTF9SRURVQ0VEX0JMQU5LSU5HKSAgfQotI2RlZmluZSBWNEwyX0RWX0JUX0RNVF8xMzY2WDc2OFA2MCB7ICAgLnR5cGUgPSBWNEwyX0RWX0JUXzY1Nl8xMTIwLCAgIFY0TDJfSU5JVF9CVF9USU1JTkdTKDEzNjYsIDc2OCwgMCwgICBWNEwyX0RWX0hTWU5DX1BPU19QT0wgfCBWNEwyX0RWX1ZTWU5DX1BPU19QT0wsICAgODU1MDAwMDAsIDcwLCAxNDMsIDIxMywgMywgMywgMjQsIDAsIDAsIDAsICAgVjRMMl9EVl9CVF9TVERfRE1ULCAwKSAgfQogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92NGwyLW1lZGlhYnVzLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItbWVkaWFidXMuaAppbmRleCA5YzVhNGEzLi44NGFhNWQzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItbWVkaWFidXMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3Y0bDItbWVkaWFidXMuaApAQCAtMzgsNzYgKzM4LDc5IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUJVU19GTVRfUkdCODg4XzJYMTJfQkUgPSAweDEwMGIsCiAgVjRMMl9NQlVTX0ZNVF9SR0I4ODhfMlgxMl9MRSA9IDB4MTAwYywKKyBWNEwyX01CVVNfRk1UX0FSR0I4ODg4XzFYMzIgPSAweDEwMGQsCiAgVjRMMl9NQlVTX0ZNVF9ZOF8xWDggPSAweDIwMDEsCi0gVjRMMl9NQlVTX0ZNVF9VVjhfMVg4ID0gMHgyMDE1LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01CVVNfRk1UX1VWOF8xWDggPSAweDIwMTUsCiAgVjRMMl9NQlVTX0ZNVF9VWVZZOF8xXzVYOCA9IDB4MjAwMiwKICBWNEwyX01CVVNfRk1UX1ZZVVk4XzFfNVg4ID0gMHgyMDAzLAogIFY0TDJfTUJVU19GTVRfWVVZVjhfMV81WDggPSAweDIwMDQsCi0gVjRMMl9NQlVTX0ZNVF9ZVllVOF8xXzVYOCA9IDB4MjAwNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NQlVTX0ZNVF9ZVllVOF8xXzVYOCA9IDB4MjAwNSwKICBWNEwyX01CVVNfRk1UX1VZVlk4XzJYOCA9IDB4MjAwNiwKICBWNEwyX01CVVNfRk1UX1ZZVVk4XzJYOCA9IDB4MjAwNywKICBWNEwyX01CVVNfRk1UX1lVWVY4XzJYOCA9IDB4MjAwOCwKLSBWNEwyX01CVVNfRk1UX1lWWVU4XzJYOCA9IDB4MjAwOSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NQlVTX0ZNVF9ZVllVOF8yWDggPSAweDIwMDksCiAgVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMCA9IDB4MjAwYSwKICBWNEwyX01CVVNfRk1UX1lVWVYxMF8yWDEwID0gMHgyMDBiLAogIFY0TDJfTUJVU19GTVRfWVZZVTEwXzJYMTAgPSAweDIwMGMsCi0gVjRMMl9NQlVTX0ZNVF9ZMTJfMVgxMiA9IDB4MjAxMywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NQlVTX0ZNVF9ZMTJfMVgxMiA9IDB4MjAxMywKICBWNEwyX01CVVNfRk1UX1VZVlk4XzFYMTYgPSAweDIwMGYsCiAgVjRMMl9NQlVTX0ZNVF9WWVVZOF8xWDE2ID0gMHgyMDEwLAogIFY0TDJfTUJVU19GTVRfWVVZVjhfMVgxNiA9IDB4MjAxMSwKLSBWNEwyX01CVVNfRk1UX1lWWVU4XzFYMTYgPSAweDIwMTIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTUJVU19GTVRfWVZZVThfMVgxNiA9IDB4MjAxMiwKICBWNEwyX01CVVNfRk1UX1lEWVVZRFlWOF8xWDE2ID0gMHgyMDE0LAogIFY0TDJfTUJVU19GTVRfWVVZVjEwXzFYMjAgPSAweDIwMGQsCiAgVjRMMl9NQlVTX0ZNVF9ZVllVMTBfMVgyMCA9IDB4MjAwZSwKLSBWNEwyX01CVVNfRk1UX1lVVjEwXzFYMzAgPSAweDIwMTYsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTUJVU19GTVRfWVVWMTBfMVgzMCA9IDB4MjAxNiwKKyBWNEwyX01CVVNfRk1UX0FZVVY4XzFYMzIgPSAweDIwMTcsCiAgVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4ID0gMHgzMDAxLAogIFY0TDJfTUJVU19GTVRfU0dCUkc4XzFYOCA9IDB4MzAxMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4ID0gMHgzMDAyLAogIFY0TDJfTUJVU19GTVRfU1JHR0I4XzFYOCA9IDB4MzAxNCwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwX0FMQVc4XzFYOCA9IDB4MzAxNSwKICBWNEwyX01CVVNfRk1UX1NHQlJHMTBfQUxBVzhfMVg4ID0gMHgzMDE2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01CVVNfRk1UX1NHUkJHMTBfQUxBVzhfMVg4ID0gMHgzMDE3LAogIFY0TDJfTUJVU19GTVRfU1JHR0IxMF9BTEFXOF8xWDggPSAweDMwMTgsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUJVU19GTVRfU0JHR1IxMF9EUENNOF8xWDggPSAweDMwMGIsCiAgVjRMMl9NQlVTX0ZNVF9TR0JSRzEwX0RQQ004XzFYOCA9IDB4MzAwYywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NQlVTX0ZNVF9TR1JCRzEwX0RQQ004XzFYOCA9IDB4MzAwOSwKICBWNEwyX01CVVNfRk1UX1NSR0dCMTBfRFBDTThfMVg4ID0gMHgzMDBkLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBREhJX0JFID0gMHgzMDAzLAogIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFESElfTEUgPSAweDMwMDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFETE9fQkUgPSAweDMwMDUsCiAgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURMT19MRSA9IDB4MzAwNiwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzFYMTAgPSAweDMwMDcsCiAgVjRMMl9NQlVTX0ZNVF9TR0JSRzEwXzFYMTAgPSAweDMwMGUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwID0gMHgzMDBhLAogIFY0TDJfTUJVU19GTVRfU1JHR0IxMF8xWDEwID0gMHgzMDBmLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01CVVNfRk1UX1NCR0dSMTJfMVgxMiA9IDB4MzAwOCwKICBWNEwyX01CVVNfRk1UX1NHQlJHMTJfMVgxMiA9IDB4MzAxMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NQlVTX0ZNVF9TR1JCRzEyXzFYMTIgPSAweDMwMTEsCiAgVjRMMl9NQlVTX0ZNVF9TUkdHQjEyXzFYMTIgPSAweDMwMTIsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUJVU19GTVRfSlBFR18xWDggPSAweDQwMDEsCiAgVjRMMl9NQlVTX0ZNVF9TNUNfVVlWWV9KUEVHXzFYOCA9IDB4NTAwMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NQlVTX0ZNVF9BSFNWODg4OF8xWDMyID0gMHg2MDAxLAogfTsKIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3aWR0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGVpZ2h0OwogIF9fdTMyIGNvZGU7CiAgX191MzIgZmllbGQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNvbG9yc3BhY2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzddOwogfTsKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmVyc2lvbi5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92ZXJzaW9uLmgKaW5kZXggYWNmOWYwNi4uNzFlNTM3MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92ZXJzaW9uLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92ZXJzaW9uLmgKQEAgLTE2LDUgKzE2LDUgQEAKICAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgTElOVVhfVkVSU0lPTl9DT0RFIDE5OTE2OAorI2RlZmluZSBMSU5VWF9WRVJTSU9OX0NPREUgMjAwMTkyCiAjZGVmaW5lIEtFUk5FTF9WRVJTSU9OKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92ZmlvLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZmaW8uaAppbmRleCA1Y2E5Mjc0Li44OGNiMDY3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZmaW8uaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZmaW8uaApAQCAtMjMsMTM5ICsyMywxNzcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZGSU9fQVBJX1ZFUlNJT04gMAogI2RlZmluZSBWRklPX1RZUEUxX0lPTU1VIDEKKyNkZWZpbmUgVkZJT19TUEFQUl9UQ0VfSU9NTVUgMgogI2RlZmluZSBWRklPX1RZUEUgKCc7JykKLSNkZWZpbmUgVkZJT19CQVNFIDEwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVkZJT19CQVNFIDEwMAogI2RlZmluZSBWRklPX0dFVF9BUElfVkVSU0lPTiBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAwKQogI2RlZmluZSBWRklPX0NIRUNLX0VYVEVOU0lPTiBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxKQogI2RlZmluZSBWRklPX1NFVF9JT01NVSBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAyKQotc3RydWN0IHZmaW9fZ3JvdXBfc3RhdHVzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdmZpb19ncm91cF9zdGF0dXMgewogIF9fdTMyIGFyZ3N6OwogIF9fdTMyIGZsYWdzOwogI2RlZmluZSBWRklPX0dST1VQX0ZMQUdTX1ZJQUJMRSAoMSA8PCAwKQotI2RlZmluZSBWRklPX0dST1VQX0ZMQUdTX0NPTlRBSU5FUl9TRVQgKDEgPDwgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZGSU9fR1JPVVBfRkxBR1NfQ09OVEFJTkVSX1NFVCAoMSA8PCAxKQogfTsKICNkZWZpbmUgVkZJT19HUk9VUF9HRVRfU1RBVFVTIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDMpCiAjZGVmaW5lIFZGSU9fR1JPVVBfU0VUX0NPTlRBSU5FUiBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyA0KQotI2RlZmluZSBWRklPX0dST1VQX1VOU0VUX0NPTlRBSU5FUiBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyA1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVkZJT19HUk9VUF9VTlNFVF9DT05UQUlORVIgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgNSkKICNkZWZpbmUgVkZJT19HUk9VUF9HRVRfREVWSUNFX0ZEIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDYpCiBzdHJ1Y3QgdmZpb19kZXZpY2VfaW5mbyB7CiAgX191MzIgYXJnc3o7Ci0gX191MzIgZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGZsYWdzOwogI2RlZmluZSBWRklPX0RFVklDRV9GTEFHU19SRVNFVCAoMSA8PCAwKQogI2RlZmluZSBWRklPX0RFVklDRV9GTEFHU19QQ0kgKDEgPDwgMSkKICBfX3UzMiBudW1fcmVnaW9uczsKLSBfX3UzMiBudW1faXJxczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbnVtX2lycXM7CiB9OwogI2RlZmluZSBWRklPX0RFVklDRV9HRVRfSU5GTyBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyA3KQogc3RydWN0IHZmaW9fcmVnaW9uX2luZm8gewotIF9fdTMyIGFyZ3N6OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBhcmdzejsKICBfX3UzMiBmbGFnczsKICNkZWZpbmUgVkZJT19SRUdJT05fSU5GT19GTEFHX1JFQUQgKDEgPDwgMCkKICNkZWZpbmUgVkZJT19SRUdJT05fSU5GT19GTEFHX1dSSVRFICgxIDw8IDEpCi0jZGVmaW5lIFZGSU9fUkVHSU9OX0lORk9fRkxBR19NTUFQICgxIDw8IDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWRklPX1JFR0lPTl9JTkZPX0ZMQUdfTU1BUCAoMSA8PCAyKQogIF9fdTMyIGluZGV4OwogIF9fdTMyIHJlc3Y7CiAgX191NjQgc2l6ZTsKLSBfX3U2NCBvZmZzZXQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IG9mZnNldDsKIH07CiAjZGVmaW5lIFZGSU9fREVWSUNFX0dFVF9SRUdJT05fSU5GTyBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyA4KQogc3RydWN0IHZmaW9faXJxX2luZm8gewotIF9fdTMyIGFyZ3N6OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBhcmdzejsKICBfX3UzMiBmbGFnczsKICNkZWZpbmUgVkZJT19JUlFfSU5GT19FVkVOVEZEICgxIDw8IDApCiAjZGVmaW5lIFZGSU9fSVJRX0lORk9fTUFTS0FCTEUgKDEgPDwgMSkKLSNkZWZpbmUgVkZJT19JUlFfSU5GT19BVVRPTUFTS0VEICgxIDw8IDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWRklPX0lSUV9JTkZPX0FVVE9NQVNLRUQgKDEgPDwgMikKICNkZWZpbmUgVkZJT19JUlFfSU5GT19OT1JFU0laRSAoMSA8PCAzKQogIF9fdTMyIGluZGV4OwogIF9fdTMyIGNvdW50OwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogI2RlZmluZSBWRklPX0RFVklDRV9HRVRfSVJRX0lORk8gX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgOSkKIHN0cnVjdCB2ZmlvX2lycV9zZXQgewogIF9fdTMyIGFyZ3N6OwotIF9fdTMyIGZsYWdzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmbGFnczsKICNkZWZpbmUgVkZJT19JUlFfU0VUX0RBVEFfTk9ORSAoMSA8PCAwKQogI2RlZmluZSBWRklPX0lSUV9TRVRfREFUQV9CT09MICgxIDw8IDEpCiAjZGVmaW5lIFZGSU9fSVJRX1NFVF9EQVRBX0VWRU5URkQgKDEgPDwgMikKLSNkZWZpbmUgVkZJT19JUlFfU0VUX0FDVElPTl9NQVNLICgxIDw8IDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWRklPX0lSUV9TRVRfQUNUSU9OX01BU0sgKDEgPDwgMykKICNkZWZpbmUgVkZJT19JUlFfU0VUX0FDVElPTl9VTk1BU0sgKDEgPDwgNCkKICNkZWZpbmUgVkZJT19JUlFfU0VUX0FDVElPTl9UUklHR0VSICgxIDw8IDUpCiAgX191MzIgaW5kZXg7Ci0gX191MzIgc3RhcnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHN0YXJ0OwogIF9fdTMyIGNvdW50OwogIF9fdTggZGF0YVtdOwogfTsKLSNkZWZpbmUgVkZJT19ERVZJQ0VfU0VUX0lSUVMgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWRklPX0RFVklDRV9TRVRfSVJRUyBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxMCkKICNkZWZpbmUgVkZJT19JUlFfU0VUX0RBVEFfVFlQRV9NQVNLIChWRklPX0lSUV9TRVRfREFUQV9OT05FIHwgICBWRklPX0lSUV9TRVRfREFUQV9CT09MIHwgICBWRklPX0lSUV9TRVRfREFUQV9FVkVOVEZEKQogI2RlZmluZSBWRklPX0lSUV9TRVRfQUNUSU9OX1RZUEVfTUFTSyAoVkZJT19JUlFfU0VUX0FDVElPTl9NQVNLIHwgICBWRklPX0lSUV9TRVRfQUNUSU9OX1VOTUFTSyB8ICAgVkZJT19JUlFfU0VUX0FDVElPTl9UUklHR0VSKQogI2RlZmluZSBWRklPX0RFVklDRV9SRVNFVCBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxMSkKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIFZGSU9fUENJX0JBUjBfUkVHSU9OX0lOREVYLAogIFZGSU9fUENJX0JBUjFfUkVHSU9OX0lOREVYLAogIFZGSU9fUENJX0JBUjJfUkVHSU9OX0lOREVYLAotIFZGSU9fUENJX0JBUjNfUkVHSU9OX0lOREVYLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWRklPX1BDSV9CQVIzX1JFR0lPTl9JTkRFWCwKICBWRklPX1BDSV9CQVI0X1JFR0lPTl9JTkRFWCwKICBWRklPX1BDSV9CQVI1X1JFR0lPTl9JTkRFWCwKICBWRklPX1BDSV9ST01fUkVHSU9OX0lOREVYLAotIFZGSU9fUENJX0NPTkZJR19SRUdJT05fSU5ERVgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFZGSU9fUENJX0NPTkZJR19SRUdJT05fSU5ERVgsCiAgVkZJT19QQ0lfVkdBX1JFR0lPTl9JTkRFWCwKICBWRklPX1BDSV9OVU1fUkVHSU9OUwogfTsKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIFZGSU9fUENJX0lOVFhfSVJRX0lOREVYLAogIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsCiAgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgsCi0gVkZJT19QQ0lfRVJSX0lSUV9JTkRFWCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVkZJT19QQ0lfRVJSX0lSUV9JTkRFWCwKICBWRklPX1BDSV9OVU1fSVJRUwogfTsKLXN0cnVjdCB2ZmlvX2lvbW11X3R5cGUxX2luZm8gewotIF9fdTMyIGFyZ3N6Oworc3RydWN0IHZmaW9fcGNpX2RlcGVuZGVudF9kZXZpY2UgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBncm91cF9pZDsKKyBfX3UxNiBzZWdtZW50OworIF9fdTggYnVzOworIF9fdTggZGV2Zm47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCB2ZmlvX3BjaV9ob3RfcmVzZXRfaW5mbyB7CisgX191MzIgYXJnc3o7CisgX191MzIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNvdW50OworIHN0cnVjdCB2ZmlvX3BjaV9kZXBlbmRlbnRfZGV2aWNlIGRldmljZXNbXTsKK307CisjZGVmaW5lIFZGSU9fREVWSUNFX0dFVF9QQ0lfSE9UX1JFU0VUX0lORk8gX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHZmaW9fcGNpX2hvdF9yZXNldCB7CisgX191MzIgYXJnc3o7CisgX191MzIgZmxhZ3M7CisgX191MzIgY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczMyIGdyb3VwX2Zkc1tdOworfTsKKyNkZWZpbmUgVkZJT19ERVZJQ0VfUENJX0hPVF9SRVNFVCBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxMykKK3N0cnVjdCB2ZmlvX2lvbW11X3R5cGUxX2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBhcmdzejsKICBfX3UzMiBmbGFnczsKICNkZWZpbmUgVkZJT19JT01NVV9JTkZPX1BHU0laRVMgKDEgPDwgMCkKICBfX3U2NCBpb3ZhX3Bnc2l6ZXM7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFZGSU9fSU9NTVVfR0VUX0lORk8gX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTIpCiBzdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfbWFwIHsKICBfX3UzMiBhcmdzejsKLSBfX3UzMiBmbGFnczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZmxhZ3M7CiAjZGVmaW5lIFZGSU9fRE1BX01BUF9GTEFHX1JFQUQgKDEgPDwgMCkKICNkZWZpbmUgVkZJT19ETUFfTUFQX0ZMQUdfV1JJVEUgKDEgPDwgMSkKICBfX3U2NCB2YWRkcjsKLSBfX3U2NCBpb3ZhOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBpb3ZhOwogIF9fdTY0IHNpemU7CiB9OwogI2RlZmluZSBWRklPX0lPTU1VX01BUF9ETUEgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTMpCi1zdHJ1Y3QgdmZpb19pb21tdV90eXBlMV9kbWFfdW5tYXAgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB2ZmlvX2lvbW11X3R5cGUxX2RtYV91bm1hcCB7CiAgX191MzIgYXJnc3o7CiAgX191MzIgZmxhZ3M7CiAgX191NjQgaW92YTsKLSBfX3U2NCBzaXplOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzaXplOwogfTsKICNkZWZpbmUgVkZJT19JT01NVV9VTk1BUF9ETUEgX0lPKFZGSU9fVFlQRSwgVkZJT19CQVNFICsgMTQpCisjZGVmaW5lIFZGSU9fSU9NTVVfRU5BQkxFIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDE1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVkZJT19JT01NVV9ESVNBQkxFIF9JTyhWRklPX1RZUEUsIFZGSU9fQkFTRSArIDE2KQorc3RydWN0IHZmaW9faW9tbXVfc3BhcHJfdGNlX2luZm8geworIF9fdTMyIGFyZ3N6OworIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBkbWEzMl93aW5kb3dfc3RhcnQ7CisgX191MzIgZG1hMzJfd2luZG93X3NpemU7Cit9OworI2RlZmluZSBWRklPX0lPTU1VX1NQQVBSX1RDRV9HRVRfSU5GTyBfSU8oVkZJT19UWVBFLCBWRklPX0JBU0UgKyAxMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlkZW9kZXYyLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IGVlMDFmODAuLmIxYzYwNDIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92aWRlb2RldjIuaApAQCAtMTA2LDggKzEwNiw4IEBACiAgX19zMzIgbGVmdDsKICBfX3MzMiB0b3A7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fczMyIHdpZHRoOwotIF9fczMyIGhlaWdodDsKKyBfX3UzMiB3aWR0aDsKKyBfX3UzMiBoZWlnaHQ7CiB9Owogc3RydWN0IHY0bDJfZnJhY3QgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTIyNiwxMTcyICsyMjYsMTE3MiBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYxMk0gdjRsMl9mb3VyY2MoJ04nLCAnTScsICcxJywgJzInKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYyMU0gdjRsMl9mb3VyY2MoJ04nLCAnTScsICcyJywgJzEnKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMTZNIHY0bDJfZm91cmNjKCdOJywgJ00nLCAnMScsICc2JykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX05WNjFNIHY0bDJfZm91cmNjKCdOJywgJ00nLCAnNicsICcxJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMTJNVCB2NGwyX2ZvdXJjYygnVCcsICdNJywgJzEnLCAnMicpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjEyTVRfMTZYMTYgdjRsMl9mb3VyY2MoJ1YnLCAnTScsICcxJywgJzInKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQyME0gdjRsMl9mb3VyY2MoJ1knLCAnTScsICcxJywgJzInKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZVNDIwTSB2NGwyX2ZvdXJjYygnWScsICdNJywgJzInLCAnMScpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1I4IHY0bDJfZm91cmNjKCdCJywgJ0EnLCAnOCcsICcxJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHOCB2NGwyX2ZvdXJjYygnRycsICdCJywgJ1InLCAnRycpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkc4IHY0bDJfZm91cmNjKCdHJywgJ1InLCAnQicsICdHJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NSR0dCOCB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0cnLCAnQicpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxMCB2NGwyX2ZvdXJjYygnQicsICdHJywgJzEnLCAnMCcpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR0JSRzEwIHY0bDJfZm91cmNjKCdHJywgJ0InLCAnMScsICcwJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR1JCRzEwIHY0bDJfZm91cmNjKCdCJywgJ0EnLCAnMScsICcwJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NSR0dCMTAgdjRsMl9mb3VyY2MoJ1InLCAnRycsICcxJywgJzAnKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSMTIgdjRsMl9mb3VyY2MoJ0InLCAnRycsICcxJywgJzInKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkcxMiB2NGwyX2ZvdXJjYygnRycsICdCJywgJzEnLCAnMicpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMiB2NGwyX2ZvdXJjYygnQicsICdBJywgJzEnLCAnMicpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjEyIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnMScsICcyJykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjEwQUxBVzggdjRsMl9mb3VyY2MoJ2EnLCAnQicsICdBJywgJzgnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkcxMEFMQVc4IHY0bDJfZm91cmNjKCdhJywgJ0cnLCAnQScsICc4JykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR1JCRzEwQUxBVzggdjRsMl9mb3VyY2MoJ2EnLCAnZycsICdBJywgJzgnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1JHR0IxMEFMQVc4IHY0bDJfZm91cmNjKCdhJywgJ1InLCAnQScsICc4JykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjEwRFBDTTggdjRsMl9mb3VyY2MoJ2InLCAnQicsICdBJywgJzgnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkcxMERQQ004IHY0bDJfZm91cmNjKCdiJywgJ0cnLCAnQScsICc4JykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR1JCRzEwRFBDTTggdjRsMl9mb3VyY2MoJ0InLCAnRCcsICcxJywgJzAnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1JHR0IxMERQQ004IHY0bDJfZm91cmNjKCdiJywgJ1InLCAnQScsICc4JykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjE2IHY0bDJfZm91cmNjKCdCJywgJ1knLCAnUicsICcyJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX01KUEVHIHY0bDJfZm91cmNjKCdNJywgJ0onLCAnUCcsICdHJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9KUEVHIHY0bDJfZm91cmNjKCdKJywgJ1AnLCAnRScsICdHJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX0RWIHY0bDJfZm91cmNjKCdkJywgJ3YnLCAncycsICdkJykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHIHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRScsICdHJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX0gyNjQgdjRsMl9mb3VyY2MoJ0gnLCAnMicsICc2JywgJzQnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX0gyNjRfTk9fU0MgdjRsMl9mb3VyY2MoJ0EnLCAnVicsICdDJywgJzEnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfSDI2NF9NVkMgdjRsMl9mb3VyY2MoJ00nLCAnMicsICc2JywgJzQnKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX0gyNjMgdjRsMl9mb3VyY2MoJ0gnLCAnMicsICc2JywgJzMnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRzEgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdHJywgJzEnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUcyIHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRycsICcyJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUc0IHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRycsICc0JykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9YVklEIHY0bDJfZm91cmNjKCdYJywgJ1YnLCAnSScsICdEJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1ZDMV9BTk5FWF9HIHY0bDJfZm91cmNjKCdWJywgJ0MnLCAnMScsICdHJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9WQzFfQU5ORVhfTCB2NGwyX2ZvdXJjYygnVicsICdDJywgJzEnLCAnTCcpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9WUDggdjRsMl9mb3VyY2MoJ1YnLCAnUCcsICc4JywgJzAnKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX0NQSUExIHY0bDJfZm91cmNjKCdDJywgJ1AnLCAnSScsICdBJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1dOVkEgdjRsMl9mb3VyY2MoJ1cnLCAnTicsICdWJywgJ0EnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMxMFggdjRsMl9mb3VyY2MoJ1MnLCAnOScsICcxJywgJzAnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfU045QzIwWF9JNDIwIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMicsICcwJykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QV0MxIHY0bDJfZm91cmNjKCdQJywgJ1cnLCAnQycsICcxJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1BXQzIgdjRsMl9mb3VyY2MoJ1AnLCAnVycsICdDJywgJzInKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX0VUNjFYMjUxIHY0bDJfZm91cmNjKCdFJywgJzYnLCAnMicsICc1JykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1MDEgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzEnKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1MDUgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzUnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1BDQTUwOCB2NGwyX2ZvdXJjYygnUycsICc1JywgJzAnLCAnOCcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1BDQTU2MSB2NGwyX2ZvdXJjYygnUycsICc1JywgJzYnLCAnMScpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QQUMyMDcgdjRsMl9mb3VyY2MoJ1AnLCAnMicsICcwJywgJzcnKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX01SOTczMTBBIHY0bDJfZm91cmNjKCdNJywgJzMnLCAnMScsICcwJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX0pMMjAwNUJDRCB2NGwyX2ZvdXJjYygnSicsICdMJywgJzInLCAnMCcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU045QzIwMjggdjRsMl9mb3VyY2MoJ1MnLCAnTycsICdOJywgJ1gnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1E5MDVDIHY0bDJfZm91cmNjKCc5JywgJzAnLCAnNScsICdDJykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9QSlBHIHY0bDJfZm91cmNjKCdQJywgJ0onLCAnUCcsICdHJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX09WNTExIHY0bDJfZm91cmNjKCdPJywgJzUnLCAnMScsICcxJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9PVjUxOCB2NGwyX2ZvdXJjYygnTycsICc1JywgJzEnLCAnOCcpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TVFYwNjgwIHY0bDJfZm91cmNjKCdTJywgJzYnLCAnOCcsICcwJykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9UTTYwMDAgdjRsMl9mb3VyY2MoJ1QnLCAnTScsICc2JywgJzAnKQogI2RlZmluZSBWNEwyX1BJWF9GTVRfQ0lUX1lZVllVWSB2NGwyX2ZvdXJjYygnQycsICdJJywgJ1QnLCAnVicpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfS09OSUNBNDIwIHY0bDJfZm91cmNjKCdLJywgJ08nLCAnTicsICdJJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX0pQR0wgdjRsMl9mb3VyY2MoJ0onLCAnUCcsICdHJywgJ0wnKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NFNDAxIHY0bDJfZm91cmNjKCdTJywgJzQnLCAnMCcsICcxJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1M1Q19VWVZZX0pQRyB2NGwyX2ZvdXJjYygnUycsICc1JywgJ0MnLCAnSScpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfZm10ZGVzYyB7CiAgX191MzIgaW5kZXg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgX191MzIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZGVzY3JpcHRpb25bMzJdOwogIF9fdTMyIHBpeGVsZm9ybWF0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFs0XTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQgMHgwMDAxCiAjZGVmaW5lIFY0TDJfRk1UX0ZMQUdfRU1VTEFURUQgMHgwMDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX2ZybXNpemV0eXBlcyB7CiAgVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEUgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0ZSTVNJWkVfVFlQRV9DT05USU5VT1VTID0gMiwKICBWNEwyX0ZSTVNJWkVfVFlQRV9TVEVQV0lTRSA9IDMsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB2NGwyX2ZybXNpemVfZGlzY3JldGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3aWR0aDsKICBfX3UzMiBoZWlnaHQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB2NGwyX2ZybXNpemVfc3RlcHdpc2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtaW5fd2lkdGg7CiAgX191MzIgbWF4X3dpZHRoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzdGVwX3dpZHRoOwogIF9fdTMyIG1pbl9oZWlnaHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9oZWlnaHQ7CiAgX191MzIgc3RlcF9oZWlnaHQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CiAgX191MzIgcGl4ZWxfZm9ybWF0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfZnJtc2l6ZV9kaXNjcmV0ZSBkaXNjcmV0ZTsKICBzdHJ1Y3QgdjRsMl9mcm1zaXplX3N0ZXB3aXNlIHN0ZXB3aXNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9OwogIF9fdTMyIHJlc2VydmVkWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIHY0bDJfZnJtaXZhbHR5cGVzIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEUgPSAxLAogIFY0TDJfRlJNSVZBTF9UWVBFX0NPTlRJTlVPVVMgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0ZSTUlWQUxfVFlQRV9TVEVQV0lTRSA9IDMsCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2ZybWl2YWxfc3RlcHdpc2UgewogIHN0cnVjdCB2NGwyX2ZyYWN0IG1pbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfZnJhY3QgbWF4OwogIHN0cnVjdCB2NGwyX2ZyYWN0IHN0ZXA7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CiAgX191MzIgcGl4ZWxfZm9ybWF0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3aWR0aDsKICBfX3UzMiBoZWlnaHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgdW5pb24gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9mcmFjdCBkaXNjcmV0ZTsKICBzdHJ1Y3QgdjRsMl9mcm1pdmFsX3N0ZXB3aXNlIHN0ZXB3aXNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9OwogIF9fdTMyIHJlc2VydmVkWzJdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl90aW1lY29kZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZnJhbWVzOwogIF9fdTggc2Vjb25kczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBtaW51dGVzOwogIF9fdTggaG91cnM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdXNlcmJpdHNbNF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UQ19UWVBFXzI0RlBTIDEKICNkZWZpbmUgVjRMMl9UQ19UWVBFXzI1RlBTIDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVENfVFlQRV8zMEZQUyAzCiAjZGVmaW5lIFY0TDJfVENfVFlQRV81MEZQUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RDX1RZUEVfNjBGUFMgNQogI2RlZmluZSBWNEwyX1RDX0ZMQUdfRFJPUEZSQU1FIDB4MDAwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UQ19GTEFHX0NPTE9SRlJBTUUgMHgwMDAyCiAjZGVmaW5lIFY0TDJfVENfVVNFUkJJVFNfZmllbGQgMHgwMDBDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX1VTRVJERUZJTkVEIDB4MDAwMAogI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTXzhCSVRDSEFSUyAweDAwMDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gewogIGludCBxdWFsaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgQVBQbjsKICBpbnQgQVBQX2xlbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBBUFBfZGF0YVs2MF07CiAgaW50IENPTV9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgQ09NX2RhdGFbNjBdOwogIF9fdTMyIGpwZWdfbWFya2VyczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfREhUICgxPDwzKQogI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RRVCAoMTw8NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfRFJJICgxPDw1KQogI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0NPTSAoMTw8NikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfQVBQICgxPDw3KQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyB7CiAgX191MzIgY291bnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgX191MzIgbWVtb3J5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFsyXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfcGxhbmUgewogIF9fdTMyIGJ5dGVzdXNlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbGVuZ3RoOwogIHVuaW9uIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWVtX29mZnNldDsKICB1bnNpZ25lZCBsb25nIHVzZXJwdHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIGZkOwogIH0gbTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZGF0YV9vZmZzZXQ7CiAgX191MzIgcmVzZXJ2ZWRbMTFdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl9idWZmZXIgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbmRleDsKICBfX3UzMiB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBieXRlc3VzZWQ7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZpZWxkOwogIHN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfdGltZWNvZGUgdGltZWNvZGU7CiAgX191MzIgc2VxdWVuY2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1lbW9yeTsKICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG9mZnNldDsKICB1bnNpZ25lZCBsb25nIHVzZXJwdHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX3BsYW5lICpwbGFuZXM7CiAgX19zMzIgZmQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gbTsKICBfX3UzMiBsZW5ndGg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkMjsKICBfX3UzMiByZXNlcnZlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0JVRl9GTEFHX01BUFBFRCAweDAwMDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfUVVFVUVEIDB4MDAwMgogI2RlZmluZSBWNEwyX0JVRl9GTEFHX0RPTkUgMHgwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0JVRl9GTEFHX0tFWUZSQU1FIDB4MDAwOAogI2RlZmluZSBWNEwyX0JVRl9GTEFHX1BGUkFNRSAweDAwMTAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfQkZSQU1FIDB4MDAyMAogI2RlZmluZSBWNEwyX0JVRl9GTEFHX0VSUk9SIDB4MDA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9CVUZfRkxBR19USU1FQ09ERSAweDAxMDAKICNkZWZpbmUgVjRMMl9CVUZfRkxBR19QUkVQQVJFRCAweDA0MDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTk9fQ0FDSEVfSU5WQUxJREFURSAweDA4MDAKICNkZWZpbmUgVjRMMl9CVUZfRkxBR19OT19DQUNIRV9DTEVBTiAweDEwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01BU0sgMHhlMDAwCiAjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX1VOS05PV04gMHgwMDAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9NT05PVE9OSUMgMHgyMDAwCiAjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX0NPUFkgMHg0MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfZXhwb3J0YnVmZmVyIHsKICBfX3UzMiB0eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbmRleDsKICBfX3UzMiBwbGFuZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CiAgX19zMzIgZmQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzExXTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgewogIF9fdTMyIGNhcGFiaWxpdHk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOwogIHZvaWQgKmJhc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZm10OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRkJVRl9DQVBfRVhURVJOT1ZFUkxBWSAweDAwMDEKICNkZWZpbmUgVjRMMl9GQlVGX0NBUF9DSFJPTUFLRVkgMHgwMDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkcgMHgwMDA0CiAjZGVmaW5lIFY0TDJfRkJVRl9DQVBfQklUTUFQX0NMSVBQSU5HIDB4MDAwOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9GQlVGX0NBUF9MT0NBTF9BTFBIQSAweDAwMTAKICNkZWZpbmUgVjRMMl9GQlVGX0NBUF9HTE9CQUxfQUxQSEEgMHgwMDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xPQ0FMX0lOVl9BTFBIQSAweDAwNDAKICNkZWZpbmUgVjRMMl9GQlVGX0NBUF9TUkNfQ0hST01BS0VZIDB4MDA4MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfUFJJTUFSWSAweDAwMDEKICNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfT1ZFUkxBWSAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX0NIUk9NQUtFWSAweDAwMDQKICNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfTE9DQUxfQUxQSEEgMHgwMDA4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19HTE9CQUxfQUxQSEEgMHgwMDEwCiAjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX0xPQ0FMX0lOVl9BTFBIQSAweDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX1NSQ19DSFJPTUFLRVkgMHgwMDQwCiBzdHJ1Y3QgdjRsMl9jbGlwIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfcmVjdCBjOwogIHN0cnVjdCB2NGwyX2NsaXAgX191c2VyICpuZXh0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl93aW5kb3cgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9yZWN0IHc7CiAgX191MzIgZmllbGQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNocm9tYWtleTsKICBzdHJ1Y3QgdjRsMl9jbGlwIF9fdXNlciAqY2xpcHM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNsaXBjb3VudDsKICB2b2lkIF9fdXNlciAqYml0bWFwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGdsb2JhbF9hbHBoYTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gewogIF9fdTMyIGNhcGFiaWxpdHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNhcHR1cmVtb2RlOwogIHN0cnVjdCB2NGwyX2ZyYWN0IHRpbWVwZXJmcmFtZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZXh0ZW5kZWRtb2RlOwogIF9fdTMyIHJlYWRidWZmZXJzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFs0XTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX01PREVfSElHSFFVQUxJVFkgMHgwMDAxCiAjZGVmaW5lIFY0TDJfQ0FQX1RJTUVQRVJGUkFNRSAweDEwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9vdXRwdXRwYXJtIHsKICBfX3UzMiBjYXBhYmlsaXR5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvdXRwdXRtb2RlOwogIHN0cnVjdCB2NGwyX2ZyYWN0IHRpbWVwZXJmcmFtZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZXh0ZW5kZWRtb2RlOwogIF9fdTMyIHdyaXRlYnVmZmVyczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbNF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2Nyb3BjYXAgewogIF9fdTMyIHR5cGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX3JlY3QgYm91bmRzOwogIHN0cnVjdCB2NGwyX3JlY3QgZGVmcmVjdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfZnJhY3QgcGl4ZWxhc3BlY3Q7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2Nyb3AgewogIF9fdTMyIHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX3JlY3QgYzsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfc2VsZWN0aW9uIHsKICBfX3UzMiB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0YXJnZXQ7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX3JlY3QgcjsKICBfX3UzMiByZXNlcnZlZFs5XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogdHlwZWRlZiBfX3U2NCB2NGwyX3N0ZF9pZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9CICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMSkKICNkZWZpbmUgVjRMMl9TVERfUEFMX0IxICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9HICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwNCkKICNkZWZpbmUgVjRMMl9TVERfUEFMX0ggKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDA4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfUEFMX0kgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDEwKQogI2RlZmluZSBWNEwyX1NURF9QQUxfRCAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMjApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9QQUxfRDEgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDQwKQogI2RlZmluZSBWNEwyX1NURF9QQUxfSyAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwODApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9QQUxfTSAoKHY0bDJfc3RkX2lkKTB4MDAwMDAxMDApCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9OICgodjRsMl9zdGRfaWQpMHgwMDAwMDIwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9OYyAoKHY0bDJfc3RkX2lkKTB4MDAwMDA0MDApCiAjZGVmaW5lIFY0TDJfU1REX1BBTF82MCAoKHY0bDJfc3RkX2lkKTB4MDAwMDA4MDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9OVFNDX00gKCh2NGwyX3N0ZF9pZCkweDAwMDAxMDAwKQogI2RlZmluZSBWNEwyX1NURF9OVFNDX01fSlAgKCh2NGwyX3N0ZF9pZCkweDAwMDAyMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfTlRTQ180NDMgKCh2NGwyX3N0ZF9pZCkweDAwMDA0MDAwKQogI2RlZmluZSBWNEwyX1NURF9OVFNDX01fS1IgKCh2NGwyX3N0ZF9pZCkweDAwMDA4MDAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfU0VDQU1fQiAoKHY0bDJfc3RkX2lkKTB4MDAwMTAwMDApCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0QgKCh2NGwyX3N0ZF9pZCkweDAwMDIwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfU0VDQU1fRyAoKHY0bDJfc3RkX2lkKTB4MDAwNDAwMDApCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0ggKCh2NGwyX3N0ZF9pZCkweDAwMDgwMDAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSyAoKHY0bDJfc3RkX2lkKTB4MDAxMDAwMDApCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0sxICgodjRsMl9zdGRfaWQpMHgwMDIwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0wgKCh2NGwyX3N0ZF9pZCkweDAwNDAwMDAwKQogI2RlZmluZSBWNEwyX1NURF9TRUNBTV9MQyAoKHY0bDJfc3RkX2lkKTB4MDA4MDAwMDApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9BVFNDXzhfVlNCICgodjRsMl9zdGRfaWQpMHgwMTAwMDAwMCkKICNkZWZpbmUgVjRMMl9TVERfQVRTQ18xNl9WU0IgKCh2NGwyX3N0ZF9pZCkweDAyMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfTlRTQyAoVjRMMl9TVERfTlRTQ19NIHwgIFY0TDJfU1REX05UU0NfTV9KUCB8ICBWNEwyX1NURF9OVFNDX01fS1IpCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0RLIChWNEwyX1NURF9TRUNBTV9EIHwgIFY0TDJfU1REX1NFQ0FNX0sgfCAgVjRMMl9TVERfU0VDQU1fSzEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9TRUNBTSAoVjRMMl9TVERfU0VDQU1fQiB8ICBWNEwyX1NURF9TRUNBTV9HIHwgIFY0TDJfU1REX1NFQ0FNX0ggfCAgVjRMMl9TVERfU0VDQU1fREsgfCAgVjRMMl9TVERfU0VDQU1fTCB8ICBWNEwyX1NURF9TRUNBTV9MQykKICNkZWZpbmUgVjRMMl9TVERfUEFMX0JHIChWNEwyX1NURF9QQUxfQiB8ICBWNEwyX1NURF9QQUxfQjEgfCAgVjRMMl9TVERfUEFMX0cpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9QQUxfREsgKFY0TDJfU1REX1BBTF9EIHwgIFY0TDJfU1REX1BBTF9EMSB8ICBWNEwyX1NURF9QQUxfSykKICNkZWZpbmUgVjRMMl9TVERfUEFMIChWNEwyX1NURF9QQUxfQkcgfCAgVjRMMl9TVERfUEFMX0RLIHwgIFY0TDJfU1REX1BBTF9IIHwgIFY0TDJfU1REX1BBTF9JKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfQiAoVjRMMl9TVERfUEFMX0IgfCAgVjRMMl9TVERfUEFMX0IxIHwgIFY0TDJfU1REX1NFQ0FNX0IpCiAjZGVmaW5lIFY0TDJfU1REX0cgKFY0TDJfU1REX1BBTF9HIHwgIFY0TDJfU1REX1NFQ0FNX0cpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9IIChWNEwyX1NURF9QQUxfSCB8ICBWNEwyX1NURF9TRUNBTV9IKQogI2RlZmluZSBWNEwyX1NURF9MIChWNEwyX1NURF9TRUNBTV9MIHwgIFY0TDJfU1REX1NFQ0FNX0xDKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfR0ggKFY0TDJfU1REX0cgfCAgVjRMMl9TVERfSCkKICNkZWZpbmUgVjRMMl9TVERfREsgKFY0TDJfU1REX1BBTF9ESyB8ICBWNEwyX1NURF9TRUNBTV9ESykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX0JHIChWNEwyX1NURF9CIHwgIFY0TDJfU1REX0cpCiAjZGVmaW5lIFY0TDJfU1REX01OIChWNEwyX1NURF9QQUxfTSB8ICBWNEwyX1NURF9QQUxfTiB8ICBWNEwyX1NURF9QQUxfTmMgfCAgVjRMMl9TVERfTlRTQykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX01UUyAoVjRMMl9TVERfTlRTQ19NIHwgIFY0TDJfU1REX1BBTF9NIHwgIFY0TDJfU1REX1BBTF9OIHwgIFY0TDJfU1REX1BBTF9OYykKICNkZWZpbmUgVjRMMl9TVERfNTI1XzYwIChWNEwyX1NURF9QQUxfTSB8ICBWNEwyX1NURF9QQUxfNjAgfCAgVjRMMl9TVERfTlRTQyB8ICBWNEwyX1NURF9OVFNDXzQ0MykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REXzYyNV81MCAoVjRMMl9TVERfUEFMIHwgIFY0TDJfU1REX1BBTF9OIHwgIFY0TDJfU1REX1BBTF9OYyB8ICBWNEwyX1NURF9TRUNBTSkKICNkZWZpbmUgVjRMMl9TVERfQVRTQyAoVjRMMl9TVERfQVRTQ184X1ZTQiB8ICBWNEwyX1NURF9BVFNDXzE2X1ZTQikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX1VOS05PV04gMAogI2RlZmluZSBWNEwyX1NURF9BTEwgKFY0TDJfU1REXzUyNV82MCB8ICBWNEwyX1NURF82MjVfNTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfc3RhbmRhcmQgewogIF9fdTMyIGluZGV4OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2NGwyX3N0ZF9pZCBpZDsKICBfX3U4IG5hbWVbMjRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9mcmFjdCBmcmFtZXBlcmlvZDsKICBfX3UzMiBmcmFtZWxpbmVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFs0XTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfYnRfdGltaW5ncyB7CiAgX191MzIgd2lkdGg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhlaWdodDsKICBfX3UzMiBpbnRlcmxhY2VkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwb2xhcml0aWVzOwogIF9fdTY0IHBpeGVsY2xvY2s7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhmcm9udHBvcmNoOwogIF9fdTMyIGhzeW5jOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoYmFja3BvcmNoOwogIF9fdTMyIHZmcm9udHBvcmNoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2c3luYzsKICBfX3UzMiB2YmFja3BvcmNoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbF92ZnJvbnRwb3JjaDsKICBfX3UzMiBpbF92c3luYzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWxfdmJhY2twb3JjaDsKICBfX3UzMiBzdGFuZGFyZHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOwogIF9fdTMyIHJlc2VydmVkWzE0XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICNkZWZpbmUgVjRMMl9EVl9QUk9HUkVTU0lWRSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0lOVEVSTEFDRUQgMQogI2RlZmluZSBWNEwyX0RWX1ZTWU5DX1BPU19QT0wgMHgwMDAwMDAwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9IU1lOQ19QT1NfUE9MIDB4MDAwMDAwMDIKICNkZWZpbmUgVjRMMl9EVl9CVF9TVERfQ0VBODYxICgxIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX1NURF9ETVQgKDEgPDwgMSkKICNkZWZpbmUgVjRMMl9EVl9CVF9TVERfQ1ZUICgxIDw8IDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX1NURF9HVEYgKDEgPDwgMykKICNkZWZpbmUgVjRMMl9EVl9GTF9SRURVQ0VEX0JMQU5LSU5HICgxIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0ZMX0NBTl9SRURVQ0VfRlBTICgxIDw8IDEpCiAjZGVmaW5lIFY0TDJfRFZfRkxfUkVEVUNFRF9GUFMgKDEgPDwgMikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRFZfRkxfSEFMRl9MSU5FICgxIDw8IDMpCisjZGVmaW5lIFY0TDJfRFZfQlRfQkxBTktJTkdfV0lEVEgoYnQpICAgKGJ0LT5oZnJvbnRwb3JjaCArIGJ0LT5oc3luYyArIGJ0LT5oYmFja3BvcmNoKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9EVl9CVF9GUkFNRV9XSURUSChidCkgICAoYnQtPndpZHRoICsgVjRMMl9EVl9CVF9CTEFOS0lOR19XSURUSChidCkpCisjZGVmaW5lIFY0TDJfRFZfQlRfQkxBTktJTkdfSEVJR0hUKGJ0KSAgIChidC0+dmZyb250cG9yY2ggKyBidC0+dnN5bmMgKyBidC0+dmJhY2twb3JjaCArICAgYnQtPmlsX3Zmcm9udHBvcmNoICsgYnQtPmlsX3ZzeW5jICsgYnQtPmlsX3ZiYWNrcG9yY2gpCisjZGVmaW5lIFY0TDJfRFZfQlRfRlJBTUVfSEVJR0hUKGJ0KSAgIChidC0+aGVpZ2h0ICsgVjRMMl9EVl9CVF9CTEFOS0lOR19IRUlHSFQoYnQpKQogc3RydWN0IHY0bDJfZHZfdGltaW5ncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgdW5pb24gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9idF90aW1pbmdzIGJ0OwogIF9fdTMyIHJlc2VydmVkWzMyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9EVl9CVF82NTZfMTEyMCAwCiBzdHJ1Y3QgdjRsMl9lbnVtX2R2X3RpbWluZ3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbmRleDsKICBfX3UzMiByZXNlcnZlZFszXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfZHZfdGltaW5ncyB0aW1pbmdzOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9idF90aW1pbmdzX2NhcCB7CiAgX191MzIgbWluX3dpZHRoOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfd2lkdGg7CiAgX191MzIgbWluX2hlaWdodDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X2hlaWdodDsKICBfX3U2NCBtaW5fcGl4ZWxjbG9jazsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbWF4X3BpeGVsY2xvY2s7CiAgX191MzIgc3RhbmRhcmRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjYXBhYmlsaXRpZXM7CiAgX191MzIgcmVzZXJ2ZWRbMTZdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogI2RlZmluZSBWNEwyX0RWX0JUX0NBUF9JTlRFUkxBQ0VEICgxIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0NBUF9QUk9HUkVTU0lWRSAoMSA8PCAxKQogI2RlZmluZSBWNEwyX0RWX0JUX0NBUF9SRURVQ0VEX0JMQU5LSU5HICgxIDw8IDIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RWX0JUX0NBUF9DVVNUT00gKDEgPDwgMykKIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3NfY2FwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHlwZTsKICBfX3UzMiByZXNlcnZlZFszXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHN0cnVjdCB2NGwyX2J0X3RpbWluZ3NfY2FwIGJ0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByYXdfZGF0YVszMl07CiAgfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHY0bDJfaW5wdXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbmRleDsKICBfX3U4IG5hbWVbMzJdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIF9fdTMyIGF1ZGlvc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0dW5lcjsKICB2NGwyX3N0ZF9pZCBzdGQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHN0YXR1czsKICBfX3UzMiBjYXBhYmlsaXRpZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzNdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSU5QVVRfVFlQRV9UVU5FUiAxCiAjZGVmaW5lIFY0TDJfSU5QVVRfVFlQRV9DQU1FUkEgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9JTl9TVF9OT19QT1dFUiAweDAwMDAwMDAxCiAjZGVmaW5lIFY0TDJfSU5fU1RfTk9fU0lHTkFMIDB4MDAwMDAwMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSU5fU1RfTk9fQ09MT1IgMHgwMDAwMDAwNAogI2RlZmluZSBWNEwyX0lOX1NUX0hGTElQIDB4MDAwMDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSU5fU1RfVkZMSVAgMHgwMDAwMDAyMAogI2RlZmluZSBWNEwyX0lOX1NUX05PX0hfTE9DSyAweDAwMDAwMTAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0lOX1NUX0NPTE9SX0tJTEwgMHgwMDAwMDIwMAogI2RlZmluZSBWNEwyX0lOX1NUX05PX1NZTkMgMHgwMDAxMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9JTl9TVF9OT19FUVUgMHgwMDAyMDAwMAogI2RlZmluZSBWNEwyX0lOX1NUX05PX0NBUlJJRVIgMHgwMDA0MDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9JTl9TVF9NQUNST1ZJU0lPTiAweDAxMDAwMDAwCiAjZGVmaW5lIFY0TDJfSU5fU1RfTk9fQUNDRVNTIDB4MDIwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfSU5fU1RfVlRSIDB4MDQwMDAwMDAKICNkZWZpbmUgVjRMMl9JTl9DQVBfRFZfVElNSU5HUyAweDAwMDAwMDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0lOX0NBUF9DVVNUT01fVElNSU5HUyBWNEwyX0lOX0NBUF9EVl9USU1JTkdTCiAjZGVmaW5lIFY0TDJfSU5fQ0FQX1NURCAweDAwMDAwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfb3V0cHV0IHsKICBfX3UzMiBpbmRleDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuYW1lWzMyXTsKICBfX3UzMiB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhdWRpb3NldDsKICBfX3UzMiBtb2R1bGF0b3I7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHY0bDJfc3RkX2lkIHN0ZDsKICBfX3UzMiBjYXBhYmlsaXRpZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzNdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfTU9EVUxBVE9SIDEKICNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0cgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0dWR0FPVkVSTEFZIDMKICNkZWZpbmUgVjRMMl9PVVRfQ0FQX0RWX1RJTUlOR1MgMHgwMDAwMDAwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9PVVRfQ0FQX0NVU1RPTV9USU1JTkdTIFY0TDJfT1VUX0NBUF9EVl9USU1JTkdTCiAjZGVmaW5lIFY0TDJfT1VUX0NBUF9TVEQgMHgwMDAwMDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2NvbnRyb2wgewogIF9fdTMyIGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiB2YWx1ZTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgewogIF9fdTMyIGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzaXplOwogIF9fdTMyIHJlc2VydmVkMlsxXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIF9fczMyIHZhbHVlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3M2NCB2YWx1ZTY0OwogIGNoYXIgKnN0cmluZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyB7CiAgX191MzIgY3RybF9jbGFzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY291bnQ7CiAgX191MzIgZXJyb3JfaWR4OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFsyXTsKICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY29udHJvbHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DVFJMX0lEX01BU0sgKDB4MGZmZmZmZmYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NUUkxfSUQyQ0xBU1MoaWQpICgoaWQpICYgMHgwZmZmMDAwMFVMKQogI2RlZmluZSBWNEwyX0NUUkxfRFJJVkVSX1BSSVYoaWQpICgoKGlkKSAmIDB4ZmZmZikgPj0gMHgxMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9jdHJsX3R5cGUgewogIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIgPSAxLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0NUUkxfVFlQRV9CT09MRUFOID0gMiwKICBWNEwyX0NUUkxfVFlQRV9NRU5VID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DVFJMX1RZUEVfQlVUVE9OID0gNCwKICBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSNjQgPSA1LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0NUUkxfVFlQRV9DVFJMX0NMQVNTID0gNiwKICBWNEwyX0NUUkxfVFlQRV9TVFJJTkcgPSA3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0NUUkxfVFlQRV9CSVRNQVNLID0gOCwKICBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSX01FTlUgPSA5LAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKICBfX3UzMiB0eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG5hbWVbMzJdOwogIF9fczMyIG1pbmltdW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIG1heGltdW07CiAgX19zMzIgc3RlcDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgZGVmYXVsdF92YWx1ZTsKICBfX3UzMiBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbMl07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSB7CiAgX191MzIgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGluZGV4OwogIHVuaW9uIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuYW1lWzMyXTsKICBfX3M2NCB2YWx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKICBfX3UzMiByZXNlcnZlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19HUkFCQkVEIDB4MDAwMgogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFkgMHgwMDA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19VUERBVEUgMHgwMDA4CiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFIDB4MDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfU0xJREVSIDB4MDAyMAogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZIDB4MDA0MAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgMHgwMDgwCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTCAweDgwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NQVhfQ1RSTFMgMTAyNAogI2RlZmluZSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgMHgwODAwMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX3R1bmVyIHsKICBfX3UzMiBpbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuYW1lWzMyXTsKICBfX3UzMiB0eXBlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjYXBhYmlsaXR5OwogIF9fdTMyIHJhbmdlbG93OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByYW5nZWhpZ2g7CiAgX191MzIgcnhzdWJjaGFuczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYXVkbW9kZTsKICBfX3MzMiBzaWduYWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIGFmYzsKICBfX3UzMiByZXNlcnZlZFs0XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHY0bDJfbW9kdWxhdG9yIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CiAgX191OCBuYW1lWzMyXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY2FwYWJpbGl0eTsKICBfX3UzMiByYW5nZWxvdzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmFuZ2VoaWdoOwogIF9fdTMyIHR4c3ViY2hhbnM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzRdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xPVyAweDAwMDEKICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTk9STSAweDAwMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0hXU0VFS19CT1VOREVEIDB4MDAwNAogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9IV1NFRUtfV1JBUCAweDAwMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1NURVJFTyAweDAwMTAKICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTEFORzIgMHgwMDIwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9TQVAgMHgwMDIwCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xBTkcxIDB4MDA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfUkRTIDB4MDA4MAogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9SRFNfQkxPQ0tfSU8gMHgwMTAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9SRFNfQ09OVFJPTFMgMHgwMjAwCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0ZSRVFfQkFORFMgMHgwNDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9IV1NFRUtfUFJPR19MSU0gMHgwODAwCiAjZGVmaW5lIFY0TDJfVFVORVJfU1VCX01PTk8gMHgwMDAxCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9TVEVSRU8gMHgwMDAyCiAjZGVmaW5lIFY0TDJfVFVORVJfU1VCX0xBTkcyIDB4MDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfU0FQIDB4MDAwNAogI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9MQU5HMSAweDAwMDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1JEUyAweDAwMTAKICNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX01PTk8gMHgwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPIDB4MDAwMQogI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTEFORzIgMHgwMDAyCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX01PREVfU0FQIDB4MDAwMgogI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTEFORzEgMHgwMDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIgMHgwMDA0CiBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0dW5lcjsKICBfX3UzMiB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmcmVxdWVuY3k7CiAgX191MzIgcmVzZXJ2ZWRbOF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9CQU5EX01PRFVMQVRJT05fVlNCICgxIDw8IDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0JBTkRfTU9EVUxBVElPTl9GTSAoMSA8PCAyKQogI2RlZmluZSBWNEwyX0JBTkRfTU9EVUxBVElPTl9BTSAoMSA8PCAzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeV9iYW5kIHsKICBfX3UzMiB0dW5lcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdHlwZTsKICBfX3UzMiBpbmRleDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY2FwYWJpbGl0eTsKICBfX3UzMiByYW5nZWxvdzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmFuZ2VoaWdoOwogIF9fdTMyIG1vZHVsYXRpb247Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzldOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWsgewogIF9fdTMyIHR1bmVyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eXBlOwogIF9fdTMyIHNlZWtfdXB3YXJkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3cmFwX2Fyb3VuZDsKICBfX3UzMiBzcGFjaW5nOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByYW5nZWxvdzsKICBfX3UzMiByYW5nZWhpZ2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzVdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9yZHNfZGF0YSB7CiAgX191OCBsc2I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbXNiOwogIF9fdTggYmxvY2s7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX01TSyAweDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX0EgMAogI2RlZmluZSBWNEwyX1JEU19CTE9DS19CIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX0MgMgogI2RlZmluZSBWNEwyX1JEU19CTE9DS19EIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX0NfQUxUIDQKICNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfSU5WQUxJRCA3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1JEU19CTE9DS19DT1JSRUNURUQgMHg0MAogI2RlZmluZSBWNEwyX1JEU19CTE9DS19FUlJPUiAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfYXVkaW8gewogIF9fdTMyIGluZGV4OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG5hbWVbMzJdOwogIF9fdTMyIGNhcGFiaWxpdHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1vZGU7CiAgX191MzIgcmVzZXJ2ZWRbMl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9BVURDQVBfU1RFUkVPIDB4MDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQVVEQ0FQX0FWTCAweDAwMDAyCiAjZGVmaW5lIFY0TDJfQVVETU9ERV9BVkwgMHgwMDAwMQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2F1ZGlvb3V0IHsKICBfX3UzMiBpbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuYW1lWzMyXTsKICBfX3UzMiBjYXBhYmlsaXR5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtb2RlOwogIF9fdTMyIHJlc2VydmVkWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9JICgwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9FTkNfSURYX0ZSQU1FX1AgKDEpCiAjZGVmaW5lIFY0TDJfRU5DX0lEWF9GUkFNRV9CICgyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9FTkNfSURYX0ZSQU1FX01BU0sgKDB4ZikKIHN0cnVjdCB2NGwyX2VuY19pZHhfZW50cnkgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBvZmZzZXQ7CiAgX191NjQgcHRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsZW5ndGg7CiAgX191MzIgZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzJdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRU5DX0lEWF9FTlRSSUVTICg2NCkKIHN0cnVjdCB2NGwyX2VuY19pZHggewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBlbnRyaWVzOwogIF9fdTMyIGVudHJpZXNfY2FwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFs0XTsKICBzdHJ1Y3QgdjRsMl9lbmNfaWR4X2VudHJ5IGVudHJ5W1Y0TDJfRU5DX0lEWF9FTlRSSUVTXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0VOQ19DTURfU1RBUlQgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0VOQ19DTURfU1RPUCAoMSkKICNkZWZpbmUgVjRMMl9FTkNfQ01EX1BBVVNFICgyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9FTkNfQ01EX1JFU1VNRSAoMykKICNkZWZpbmUgVjRMMl9FTkNfQ01EX1NUT1BfQVRfR09QX0VORCAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2VuY29kZXJfY21kIHsKICBfX3UzMiBjbWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOwogIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBfX3UzMiBkYXRhWzhdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IHJhdzsKICB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfREVDX0NNRF9TVEFSVCAoMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfREVDX0NNRF9TVE9QICgxKQogI2RlZmluZSBWNEwyX0RFQ19DTURfUEFVU0UgKDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RFQ19DTURfUkVTVU1FICgzKQogI2RlZmluZSBWNEwyX0RFQ19DTURfU1RBUlRfTVVURV9BVURJTyAoMSA8PCAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9ERUNfQ01EX1BBVVNFX1RPX0JMQUNLICgxIDw8IDApCiAjZGVmaW5lIFY0TDJfREVDX0NNRF9TVE9QX1RPX0JMQUNLICgxIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0RFQ19DTURfU1RPUF9JTU1FRElBVEVMWSAoMSA8PCAxKQogI2RlZmluZSBWNEwyX0RFQ19TVEFSVF9GTVRfTk9ORSAoMCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfREVDX1NUQVJUX0ZNVF9HT1AgKDEpCiBzdHJ1Y3QgdjRsMl9kZWNvZGVyX2NtZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNtZDsKICBfX3UzMiBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHB0czsKICB9IHN0b3A7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CiAgX19zMzIgc3BlZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZvcm1hdDsKICB9IHN0YXJ0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIF9fdTMyIGRhdGFbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IHJhdzsKICB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc2FtcGxpbmdfcmF0ZTsKICBfX3UzMiBvZmZzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNhbXBsZXNfcGVyX2xpbmU7CiAgX191MzIgc2FtcGxlX2Zvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgc3RhcnRbMl07CiAgX191MzIgY291bnRbMl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOwogIF9fdTMyIHJlc2VydmVkWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfVkJJX1VOU1lOQyAoMSA8PCAwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9WQklfSU5URVJMQUNFRCAoMSA8PCAxKQogc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBzZXJ2aWNlX3NldDsKICBfX3UxNiBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW9fc2l6ZTsKICBfX3UzMiByZXNlcnZlZFsyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9CICgweDAwMDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NMSUNFRF9WUFMgKDB4MDQwMCkKICNkZWZpbmUgVjRMMl9TTElDRURfQ0FQVElPTl81MjUgKDB4MTAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU0xJQ0VEX1dTU182MjUgKDB4NDAwMCkKICNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzUyNSAoVjRMMl9TTElDRURfQ0FQVElPTl81MjUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NMSUNFRF9WQklfNjI1IChWNEwyX1NMSUNFRF9URUxFVEVYVF9CIHwgVjRMMl9TTElDRURfVlBTIHwgVjRMMl9TTElDRURfV1NTXzYyNSkKIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgc2VydmljZV9zZXQ7CiAgX191MTYgc2VydmljZV9saW5lc1syXVsyNF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgX191MzIgcmVzZXJ2ZWRbM107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOwogIF9fdTMyIGZpZWxkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsaW5lOwogIF9fdTMyIHJlc2VydmVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRhdGFbNDhdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9URUxFVEVYVF9CICgxKQogI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfQ0FQVElPTl81MjUgKDQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfV1NTXzYyNSAoNSkKICNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1ZQUyAoNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwX2xpbmUgewogIF9fdTggaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZGF0YVs0Ml07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwIHsKICBfX2xlMzIgbGluZW1hc2tbMl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djBfbGluZSBsaW5lWzM1XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX21wZWdfdmJpX0lUVjAgewogIHN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djBfbGluZSBsaW5lWzM2XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKICNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX01BR0lDMCAiaXR2MCIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9NQUdJQzEgIklUVjAiCiBzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9mbXRfaXZ0diB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbWFnaWNbNF07CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwIGl0djA7CiAgc3RydWN0IHY0bDJfbXBlZ192YmlfSVRWMCBJVFYwOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfcGxhbmVfcGl4X2Zvcm1hdCB7CiAgX191MzIgc2l6ZWltYWdlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBieXRlc3BlcmxpbmU7CiAgX191MTYgcmVzZXJ2ZWRbN107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHdpZHRoOwogIF9fdTMyIGhlaWdodDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGl4ZWxmb3JtYXQ7CiAgX191MzIgZmllbGQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNvbG9yc3BhY2U7CiAgc3RydWN0IHY0bDJfcGxhbmVfcGl4X2Zvcm1hdCBwbGFuZV9mbXRbVklERU9fTUFYX1BMQU5FU107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbnVtX3BsYW5lczsKICBfX3U4IHJlc2VydmVkWzExXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIHN0cnVjdCB2NGwyX2Zvcm1hdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgdW5pb24gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHBpeDsKICBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSBwaXhfbXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX3dpbmRvdyB3aW47CiAgc3RydWN0IHY0bDJfdmJpX2Zvcm1hdCB2Ymk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0IHNsaWNlZDsKICBfX3U4IHJhd19kYXRhWzIwMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gZm10OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtIHsKICBfX3UzMiB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gY2FwdHVyZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfb3V0cHV0cGFybSBvdXRwdXQ7CiAgX191OCByYXdfZGF0YVsyMDBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IHBhcm07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9FVkVOVF9BTEwgMAogI2RlZmluZSBWNEwyX0VWRU5UX1ZTWU5DIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRVZFTlRfRU9TIDIKICNkZWZpbmUgVjRMMl9FVkVOVF9DVFJMIDMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRVZFTlRfRlJBTUVfU1lOQyA0CiAjZGVmaW5lIFY0TDJfRVZFTlRfUFJJVkFURV9TVEFSVCAweDA4MDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfZXZlbnRfdnN5bmMgewogIF9fdTggZmllbGQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAjZGVmaW5lIFY0TDJfRVZFTlRfQ1RSTF9DSF9WQUxVRSAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9FVkVOVF9DVFJMX0NIX0ZMQUdTICgxIDw8IDEpCiAjZGVmaW5lIFY0TDJfRVZFTlRfQ1RSTF9DSF9SQU5HRSAoMSA8PCAyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2V2ZW50X2N0cmwgewogIF9fdTMyIGNoYW5nZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7CiAgdW5pb24gewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiB2YWx1ZTsKICBfX3M2NCB2YWx1ZTY0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9OwogIF9fdTMyIGZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBtaW5pbXVtOwogIF9fczMyIG1heGltdW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIHN0ZXA7CiAgX19zMzIgZGVmYXVsdF92YWx1ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHY0bDJfZXZlbnRfZnJhbWVfc3luYyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZyYW1lX3NlcXVlbmNlOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9ldmVudCB7CiAgX191MzIgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHN0cnVjdCB2NGwyX2V2ZW50X3ZzeW5jIHZzeW5jOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9ldmVudF9jdHJsIGN0cmw7CiAgc3RydWN0IHY0bDJfZXZlbnRfZnJhbWVfc3luYyBmcmFtZV9zeW5jOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRhdGFbNjRdOwogIH0gdTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGVuZGluZzsKICBfX3UzMiBzZXF1ZW5jZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRpbWVzcGVjIHRpbWVzdGFtcDsKICBfX3UzMiBpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbOF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9FVkVOVF9TVUJfRkxfU0VORF9JTklUSUFMICgxIDw8IDApCiAjZGVmaW5lIFY0TDJfRVZFTlRfU1VCX0ZMX0FMTE9XX0ZFRURCQUNLICgxIDw8IDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uIHsKICBfX3UzMiB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKICBfX3UzMiBmbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbNV07CiB9OwotI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfQlJJREdFIDAKLSNkZWZpbmUgVjRMMl9DSElQX01BVENIX0hPU1QgVjRMMl9DSElQX01BVENIX0JSSURHRQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSElQX01BVENIX0JSSURHRSAwCisjZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9TVUJERVYgNAorI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSE9TVCBWNEwyX0NISVBfTUFUQ0hfQlJJREdFCiAjZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiAyCiAjZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9BQzk3IDMKLSNkZWZpbmUgVjRMMl9DSElQX01BVENIX1NVQkRFViA0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfZGJnX21hdGNoIHsKICBfX3UzMiB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgX191MzIgYWRkcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBuYW1lWzMyXTsKICB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHY0bDJfZGJnX21hdGNoIG1hdGNoOwogIF9fdTMyIHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlZzsKICBfX3U2NCB2YWw7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci1zdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCB7Ci0gc3RydWN0IHY0bDJfZGJnX21hdGNoIG1hdGNoOwotIF9fdTMyIGlkZW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX3UzMiByZXZpc2lvbjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogI2RlZmluZSBWNEwyX0NISVBfRkxfUkVBREFCTEUgKDEgPDwgMCkKLSNkZWZpbmUgVjRMMl9DSElQX0ZMX1dSSVRBQkxFICgxIDw8IDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NISVBfRkxfV1JJVEFCTEUgKDEgPDwgMSkKIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2luZm8gewogIHN0cnVjdCB2NGwyX2RiZ19tYXRjaCBtYXRjaDsKICBjaGFyIG5hbWVbMzJdOwotIF9fdTMyIGZsYWdzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmbGFnczsKICBfX3UzMiByZXNlcnZlZFszMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIHN0cnVjdCB2NGwyX2NyZWF0ZV9idWZmZXJzIHsKLSBfX3UzMiBpbmRleDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaW5kZXg7CiAgX191MzIgY291bnQ7CiAgX191MzIgbWVtb3J5OwogIHN0cnVjdCB2NGwyX2Zvcm1hdCBmb3JtYXQ7Ci0gX191MzIgcmVzZXJ2ZWRbOF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJlc2VydmVkWzhdOwogfTsKICNkZWZpbmUgVklESU9DX1FVRVJZQ0FQIF9JT1IoJ1YnLCAwLCBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KQogI2RlZmluZSBWSURJT0NfUkVTRVJWRUQgX0lPKCdWJywgMSkKLSNkZWZpbmUgVklESU9DX0VOVU1fRk1UIF9JT1dSKCdWJywgMiwgc3RydWN0IHY0bDJfZm10ZGVzYykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19FTlVNX0ZNVCBfSU9XUignVicsIDIsIHN0cnVjdCB2NGwyX2ZtdGRlc2MpCiAjZGVmaW5lIFZJRElPQ19HX0ZNVCBfSU9XUignVicsIDQsIHN0cnVjdCB2NGwyX2Zvcm1hdCkKICNkZWZpbmUgVklESU9DX1NfRk1UIF9JT1dSKCdWJywgNSwgc3RydWN0IHY0bDJfZm9ybWF0KQogI2RlZmluZSBWSURJT0NfUkVRQlVGUyBfSU9XUignVicsIDgsIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzKQotI2RlZmluZSBWSURJT0NfUVVFUllCVUYgX0lPV1IoJ1YnLCA5LCBzdHJ1Y3QgdjRsMl9idWZmZXIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfUVVFUllCVUYgX0lPV1IoJ1YnLCA5LCBzdHJ1Y3QgdjRsMl9idWZmZXIpCiAjZGVmaW5lIFZJRElPQ19HX0ZCVUYgX0lPUignVicsIDEwLCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcikKICNkZWZpbmUgVklESU9DX1NfRkJVRiBfSU9XKCdWJywgMTEsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyKQogI2RlZmluZSBWSURJT0NfT1ZFUkxBWSBfSU9XKCdWJywgMTQsIGludCkKLSNkZWZpbmUgVklESU9DX1FCVUYgX0lPV1IoJ1YnLCAxNSwgc3RydWN0IHY0bDJfYnVmZmVyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX1FCVUYgX0lPV1IoJ1YnLCAxNSwgc3RydWN0IHY0bDJfYnVmZmVyKQogI2RlZmluZSBWSURJT0NfRVhQQlVGIF9JT1dSKCdWJywgMTYsIHN0cnVjdCB2NGwyX2V4cG9ydGJ1ZmZlcikKICNkZWZpbmUgVklESU9DX0RRQlVGIF9JT1dSKCdWJywgMTcsIHN0cnVjdCB2NGwyX2J1ZmZlcikKICNkZWZpbmUgVklESU9DX1NUUkVBTU9OIF9JT1coJ1YnLCAxOCwgaW50KQotI2RlZmluZSBWSURJT0NfU1RSRUFNT0ZGIF9JT1coJ1YnLCAxOSwgaW50KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX1NUUkVBTU9GRiBfSU9XKCdWJywgMTksIGludCkKICNkZWZpbmUgVklESU9DX0dfUEFSTSBfSU9XUignVicsIDIxLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtKQogI2RlZmluZSBWSURJT0NfU19QQVJNIF9JT1dSKCdWJywgMjIsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pCiAjZGVmaW5lIFZJRElPQ19HX1NURCBfSU9SKCdWJywgMjMsIHY0bDJfc3RkX2lkKQotI2RlZmluZSBWSURJT0NfU19TVEQgX0lPVygnVicsIDI0LCB2NGwyX3N0ZF9pZCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19TX1NURCBfSU9XKCdWJywgMjQsIHY0bDJfc3RkX2lkKQogI2RlZmluZSBWSURJT0NfRU5VTVNURCBfSU9XUignVicsIDI1LCBzdHJ1Y3QgdjRsMl9zdGFuZGFyZCkKICNkZWZpbmUgVklESU9DX0VOVU1JTlBVVCBfSU9XUignVicsIDI2LCBzdHJ1Y3QgdjRsMl9pbnB1dCkKICNkZWZpbmUgVklESU9DX0dfQ1RSTCBfSU9XUignVicsIDI3LCBzdHJ1Y3QgdjRsMl9jb250cm9sKQotI2RlZmluZSBWSURJT0NfU19DVFJMIF9JT1dSKCdWJywgMjgsIHN0cnVjdCB2NGwyX2NvbnRyb2wpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfU19DVFJMIF9JT1dSKCdWJywgMjgsIHN0cnVjdCB2NGwyX2NvbnRyb2wpCiAjZGVmaW5lIFZJRElPQ19HX1RVTkVSIF9JT1dSKCdWJywgMjksIHN0cnVjdCB2NGwyX3R1bmVyKQogI2RlZmluZSBWSURJT0NfU19UVU5FUiBfSU9XKCdWJywgMzAsIHN0cnVjdCB2NGwyX3R1bmVyKQogI2RlZmluZSBWSURJT0NfR19BVURJTyBfSU9SKCdWJywgMzMsIHN0cnVjdCB2NGwyX2F1ZGlvKQotI2RlZmluZSBWSURJT0NfU19BVURJTyBfSU9XKCdWJywgMzQsIHN0cnVjdCB2NGwyX2F1ZGlvKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX1NfQVVESU8gX0lPVygnVicsIDM0LCBzdHJ1Y3QgdjRsMl9hdWRpbykKICNkZWZpbmUgVklESU9DX1FVRVJZQ1RSTCBfSU9XUignVicsIDM2LCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwpCiAjZGVmaW5lIFZJRElPQ19RVUVSWU1FTlUgX0lPV1IoJ1YnLCAzNywgc3RydWN0IHY0bDJfcXVlcnltZW51KQogI2RlZmluZSBWSURJT0NfR19JTlBVVCBfSU9SKCdWJywgMzgsIGludCkKLSNkZWZpbmUgVklESU9DX1NfSU5QVVQgX0lPV1IoJ1YnLCAzOSwgaW50KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX1NfSU5QVVQgX0lPV1IoJ1YnLCAzOSwgaW50KQogI2RlZmluZSBWSURJT0NfR19PVVRQVVQgX0lPUignVicsIDQ2LCBpbnQpCiAjZGVmaW5lIFZJRElPQ19TX09VVFBVVCBfSU9XUignVicsIDQ3LCBpbnQpCiAjZGVmaW5lIFZJRElPQ19FTlVNT1VUUFVUIF9JT1dSKCdWJywgNDgsIHN0cnVjdCB2NGwyX291dHB1dCkKLSNkZWZpbmUgVklESU9DX0dfQVVET1VUIF9JT1IoJ1YnLCA0OSwgc3RydWN0IHY0bDJfYXVkaW9vdXQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfR19BVURPVVQgX0lPUignVicsIDQ5LCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKICNkZWZpbmUgVklESU9DX1NfQVVET1VUIF9JT1coJ1YnLCA1MCwgc3RydWN0IHY0bDJfYXVkaW9vdXQpCiAjZGVmaW5lIFZJRElPQ19HX01PRFVMQVRPUiBfSU9XUignVicsIDU0LCBzdHJ1Y3QgdjRsMl9tb2R1bGF0b3IpCiAjZGVmaW5lIFZJRElPQ19TX01PRFVMQVRPUiBfSU9XKCdWJywgNTUsIHN0cnVjdCB2NGwyX21vZHVsYXRvcikKLSNkZWZpbmUgVklESU9DX0dfRlJFUVVFTkNZIF9JT1dSKCdWJywgNTYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19HX0ZSRVFVRU5DWSBfSU9XUignVicsIDU2LCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kpCiAjZGVmaW5lIFZJRElPQ19TX0ZSRVFVRU5DWSBfSU9XKCdWJywgNTcsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSkKICNkZWZpbmUgVklESU9DX0NST1BDQVAgX0lPV1IoJ1YnLCA1OCwgc3RydWN0IHY0bDJfY3JvcGNhcCkKICNkZWZpbmUgVklESU9DX0dfQ1JPUCBfSU9XUignVicsIDU5LCBzdHJ1Y3QgdjRsMl9jcm9wKQotI2RlZmluZSBWSURJT0NfU19DUk9QIF9JT1coJ1YnLCA2MCwgc3RydWN0IHY0bDJfY3JvcCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19TX0NST1AgX0lPVygnVicsIDYwLCBzdHJ1Y3QgdjRsMl9jcm9wKQogI2RlZmluZSBWSURJT0NfR19KUEVHQ09NUCBfSU9SKCdWJywgNjEsIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbikKICNkZWZpbmUgVklESU9DX1NfSlBFR0NPTVAgX0lPVygnVicsIDYyLCBzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24pCiAjZGVmaW5lIFZJRElPQ19RVUVSWVNURCBfSU9SKCdWJywgNjMsIHY0bDJfc3RkX2lkKQotI2RlZmluZSBWSURJT0NfVFJZX0ZNVCBfSU9XUignVicsIDY0LCBzdHJ1Y3QgdjRsMl9mb3JtYXQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfVFJZX0ZNVCBfSU9XUignVicsIDY0LCBzdHJ1Y3QgdjRsMl9mb3JtYXQpCiAjZGVmaW5lIFZJRElPQ19FTlVNQVVESU8gX0lPV1IoJ1YnLCA2NSwgc3RydWN0IHY0bDJfYXVkaW8pCiAjZGVmaW5lIFZJRElPQ19FTlVNQVVET1VUIF9JT1dSKCdWJywgNjYsIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQogI2RlZmluZSBWSURJT0NfR19QUklPUklUWSBfSU9SKCdWJywgNjcsIF9fdTMyKQotI2RlZmluZSBWSURJT0NfU19QUklPUklUWSBfSU9XKCdWJywgNjgsIF9fdTMyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX1NfUFJJT1JJVFkgX0lPVygnVicsIDY4LCBfX3UzMikKICNkZWZpbmUgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVAgX0lPV1IoJ1YnLCA2OSwgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXApCiAjZGVmaW5lIFZJRElPQ19MT0dfU1RBVFVTIF9JTygnVicsIDcwKQogI2RlZmluZSBWSURJT0NfR19FWFRfQ1RSTFMgX0lPV1IoJ1YnLCA3MSwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQotI2RlZmluZSBWSURJT0NfU19FWFRfQ1RSTFMgX0lPV1IoJ1YnLCA3Miwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX1NfRVhUX0NUUkxTIF9JT1dSKCdWJywgNzIsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scykKICNkZWZpbmUgVklESU9DX1RSWV9FWFRfQ1RSTFMgX0lPV1IoJ1YnLCA3Mywgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQogI2RlZmluZSBWSURJT0NfRU5VTV9GUkFNRVNJWkVTIF9JT1dSKCdWJywgNzQsIHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtKQogI2RlZmluZSBWSURJT0NfRU5VTV9GUkFNRUlOVEVSVkFMUyBfSU9XUignVicsIDc1LCBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSkKLSNkZWZpbmUgVklESU9DX0dfRU5DX0lOREVYIF9JT1IoJ1YnLCA3Niwgc3RydWN0IHY0bDJfZW5jX2lkeCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19HX0VOQ19JTkRFWCBfSU9SKCdWJywgNzYsIHN0cnVjdCB2NGwyX2VuY19pZHgpCiAjZGVmaW5lIFZJRElPQ19FTkNPREVSX0NNRCBfSU9XUignVicsIDc3LCBzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCkKICNkZWZpbmUgVklESU9DX1RSWV9FTkNPREVSX0NNRCBfSU9XUignVicsIDc4LCBzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCkKICNkZWZpbmUgVklESU9DX0RCR19TX1JFR0lTVEVSIF9JT1coJ1YnLCA3OSwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyKQotI2RlZmluZSBWSURJT0NfREJHX0dfUkVHSVNURVIgX0lPV1IoJ1YnLCA4MCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVklESU9DX0RCR19HX0NISVBfSURFTlQgX0lPV1IoJ1YnLCA4MSwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQpCisjZGVmaW5lIFZJRElPQ19EQkdfR19SRUdJU1RFUiBfSU9XUignVicsIDgwLCBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIpCiAjZGVmaW5lIFZJRElPQ19TX0hXX0ZSRVFfU0VFSyBfSU9XKCdWJywgODIsIHN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlaykKICNkZWZpbmUgVklESU9DX1NfRFZfVElNSU5HUyBfSU9XUignVicsIDg3LCBzdHJ1Y3QgdjRsMl9kdl90aW1pbmdzKQogI2RlZmluZSBWSURJT0NfR19EVl9USU1JTkdTIF9JT1dSKCdWJywgODgsIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MpCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19jb25maWcuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX2NvbmZpZy5oCmluZGV4IDFkOTgzNGQuLjBkMWZjNjIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX2NvbmZpZy5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX2NvbmZpZy5oCkBAIC0yOCw0ICsyOCw2IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSVJUSU9fVFJBTlNQT1JUX0ZfRU5EIDMyCiAjZGVmaW5lIFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSAyNAorI2RlZmluZSBWSVJUSU9fRl9BTllfTEFZT1VUIDI3CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19jb25zb2xlLmggYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKaW5kZXggMTQ4ZmZlMC4uODFkNTE1YyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92aXJ0aW9fY29uc29sZS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX2NvbnNvbGUuaApAQCAtMjQsMjggKzI0LDMxIEBACiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogI2RlZmluZSBWSVJUSU9fQ09OU09MRV9GX1NJWkUgMAogI2RlZmluZSBWSVJUSU9fQ09OU09MRV9GX01VTFRJUE9SVCAxCi0jZGVmaW5lIFZJUlRJT19DT05TT0xFX0JBRF9JRCAofihfX3UzMikwKQorI2RlZmluZSBWSVJUSU9fQ09OU09MRV9GX0VNRVJHX1dSSVRFIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJUlRJT19DT05TT0xFX0JBRF9JRCAofihfX3UzMikwKQogc3RydWN0IHZpcnRpb19jb25zb2xlX2NvbmZpZyB7CiAgX191MTYgY29sczsKICBfX3UxNiByb3dzOwotIF9fdTMyIG1heF9ucl9wb3J0czsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbWF4X25yX3BvcnRzOworIF9fdTMyIGVtZXJnX3dyOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIHN0cnVjdCB2aXJ0aW9fY29uc29sZV9jb250cm9sIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CiAgX191MTYgZXZlbnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHZhbHVlOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJUlRJT19DT05TT0xFX0RFVklDRV9SRUFEWSAwCiAjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfQUREIDEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJUlRJT19DT05TT0xFX1BPUlRfUkVNT1ZFIDIKICNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9SRUFEWSAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSVJUSU9fQ09OU09MRV9DT05TT0xFX1BPUlQgNAogI2RlZmluZSBWSVJUSU9fQ09OU09MRV9SRVNJWkUgNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9PUEVOIDYKICNkZWZpbmUgVklSVElPX0NPTlNPTEVfUE9SVF9OQU1FIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX25ldC5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92aXJ0aW9fbmV0LmgKaW5kZXggYjNmOTQyYy4uYWFmMWIyOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC92aXJ0aW9fbmV0LmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92aXJ0aW9fbmV0LmgKQEAgLTUzLDcgKzUzLDcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJUlRJT19ORVRfU19BTk5PVU5DRSAyCiBzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcgewotIF9fdTggbWFjWzZdOworIF9fdTggbWFjW0VUSF9BTEVOXTsKICBfX3UxNiBzdGF0dXM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IG1heF92aXJ0cXVldWVfcGFpcnM7CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3ZpcnRpb19wY2kuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX3BjaS5oCmluZGV4IGViOTA4ZTEuLmFmZmQ2YzkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX3BjaS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdmlydGlvX3BjaS5oCkBAIC0zNCwxMCArMzQsMTEgQEAKICNkZWZpbmUgVklSVElPX01TSV9DT05GSUdfVkVDVE9SIDIwCiAjZGVmaW5lIFZJUlRJT19NU0lfUVVFVUVfVkVDVE9SIDIyCiAjZGVmaW5lIFZJUlRJT19NU0lfTk9fVkVDVE9SIDB4ZmZmZgotI2RlZmluZSBWSVJUSU9fUENJX0NPTkZJRyhkZXYpICgoZGV2KS0+bXNpeF9lbmFibGVkID8gMjQgOiAyMCkKKyNkZWZpbmUgVklSVElPX1BDSV9DT05GSUdfT0ZGKG1zaXhfZW5hYmxlZCkgKChtc2l4X2VuYWJsZWQpID8gMjQgOiAyMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJUlRJT19QQ0lfQ09ORklHKGRldikgVklSVElPX1BDSV9DT05GSUdfT0ZGKChkZXYpLT5tc2l4X2VuYWJsZWQpCiAjZGVmaW5lIFZJUlRJT19QQ0lfQUJJX1ZFUlNJT04gMAogI2RlZmluZSBWSVJUSU9fUENJX1FVRVVFX0FERFJfU0hJRlQgMTIKICNkZWZpbmUgVklSVElPX1BDSV9WUklOR19BTElHTiA0MDk2Ci0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvbGludXgvdnNwMS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC92c3AxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc1MjJlNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvdnNwMS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19WU1AxX1VTRVJfSF9fCisjZGVmaW5lIF9fVlNQMV9VU0VSX0hfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfVlNQMV9MVVRfQ09ORklHICAgX0lPV1IoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgMSwgc3RydWN0IHZzcDFfbHV0X2NvbmZpZykKK3N0cnVjdCB2c3AxX2x1dF9jb25maWcgeworIHUzMiBsdXRbMjU2XTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3dpbWF4L2kyNDAwbS5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC93aW1heC9pMjQwMG0uaAppbmRleCA2NDNjMDQ4Li4zMDU4NWE4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3dpbWF4L2kyNDAwbS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvd2ltYXgvaTI0MDBtLmgKQEAgLTE5LDM2MiArMTksMzYzIEBACiAjaWZuZGVmIF9fTElOVVhfX1dJTUFYX19JMjQwME1fSF9fCiAjZGVmaW5lIF9fTElOVVhfX1dJTUFYX19JMjQwME1fSF9fCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLXN0cnVjdCBpMjQwMG1fYmNmX2hkciB7CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaTI0MDBtX2JjZl9oZHIgewogIF9fbGUzMiBtb2R1bGVfdHlwZTsKICBfX2xlMzIgaGVhZGVyX2xlbjsKICBfX2xlMzIgaGVhZGVyX3ZlcnNpb247Ci0gX19sZTMyIG1vZHVsZV9pZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIG1vZHVsZV9pZDsKICBfX2xlMzIgbW9kdWxlX3ZlbmRvcjsKICBfX2xlMzIgZGF0ZTsKICBfX2xlMzIgc2l6ZTsKLSBfX2xlMzIga2V5X3NpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBrZXlfc2l6ZTsKICBfX2xlMzIgbW9kdWx1c19zaXplOwogIF9fbGUzMiBleHBvbmVudF9zaXplOwogIF9fdTggcmVzZXJ2ZWRbODhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBlbnVtIGkyNDAwbV9icmhfb3Bjb2RlIHsKICBJMjQwME1fQlJIX1JFQUQgPSAxLAogIEkyNDAwTV9CUkhfV1JJVEUgPSAyLAotIEkyNDAwTV9CUkhfSlVNUCA9IDMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9CUkhfSlVNUCA9IDMsCiAgSTI0MDBNX0JSSF9TSUdORURfSlVNUCA9IDgsCiAgSTI0MDBNX0JSSF9IQVNIX1BBWUxPQURfT05MWSA9IDksCiB9OwotZW51bSBpMjQwMG1fYnJoIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIGkyNDAwbV9icmggewogIEkyNDAwTV9CUkhfU0lHTkFUVVJFID0gMHhjYmJjMDAwMCwKICBJMjQwME1fQlJIX1NJR05BVFVSRV9NQVNLID0gMHhmZmZmMDAwMCwKICBJMjQwME1fQlJIX1NJR05BVFVSRV9TSElGVCA9IDE2LAotIEkyNDAwTV9CUkhfT1BDT0RFX01BU0sgPSAweDAwMDAwMDBmLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fQlJIX09QQ09ERV9NQVNLID0gMHgwMDAwMDAwZiwKICBJMjQwME1fQlJIX1JFU1BPTlNFX01BU0sgPSAweDAwMDAwMGYwLAogIEkyNDAwTV9CUkhfUkVTUE9OU0VfU0hJRlQgPSA0LAogIEkyNDAwTV9CUkhfRElSRUNUX0FDQ0VTUyA9IDB4MDAwMDA0MDAsCi0gSTI0MDBNX0JSSF9SRVNQT05TRV9SRVFVSVJFRCA9IDB4MDAwMDAyMDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9CUkhfUkVTUE9OU0VfUkVRVUlSRUQgPSAweDAwMDAwMjAwLAogIEkyNDAwTV9CUkhfVVNFX0NIRUNLU1VNID0gMHgwMDAwMDEwMCwKIH07CiBzdHJ1Y3QgaTI0MDBtX2Jvb3Ryb21faGVhZGVyIHsKLSBfX2xlMzIgY29tbWFuZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIGNvbW1hbmQ7CiAgX19sZTMyIHRhcmdldF9hZGRyOwogIF9fbGUzMiBkYXRhX3NpemU7CiAgX19sZTMyIGJsb2NrX2NoZWNrc3VtOwotIGNoYXIgcGF5bG9hZFswXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgY2hhciBwYXlsb2FkWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBlbnVtIGkyNDAwbV9wdCB7CiAgSTI0MDBNX1BUX0RBVEEgPSAwLAotIEkyNDAwTV9QVF9DVFJMLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fUFRfQ1RSTCwKICBJMjQwME1fUFRfVFJBQ0UsCiAgSTI0MDBNX1BUX1JFU0VUX1dBUk0sCiAgSTI0MDBNX1BUX1JFU0VUX0NPTEQsCi0gSTI0MDBNX1BUX0VEQVRBLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fUFRfRURBVEEsCiAgSTI0MDBNX1BUX0lMTEVHQUwKIH07CiBzdHJ1Y3QgaTI0MDBtX3BsX2RhdGFfaGRyIHsKLSBfX2xlMzIgcmVzZXJ2ZWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiByZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBzdHJ1Y3QgaTI0MDBtX3BsX2VkYXRhX2hkciB7CiAgX19sZTMyIHJlb3JkZXI7Ci0gX191OCBjczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBjczsKICBfX3U4IHJlc2VydmVkWzExXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBlbnVtIGkyNDAwbV9jcyB7Ci0gSTI0MDBNX0NTX0lQVjRfMCA9IDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9DU19JUFY0XzAgPSAwLAogIEkyNDAwTV9DU19JUFY0ID0gMiwKIH07CiBlbnVtIGkyNDAwbV9ybyB7Ci0gSTI0MDBNX1JPX05FRURFRCA9IDB4MDEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9ST19ORUVERUQgPSAweDAxLAogIEkyNDAwTV9ST19UWVBFID0gMHgwMywKICBJMjQwME1fUk9fVFlQRV9TSElGVCA9IDEsCiAgSTI0MDBNX1JPX0NJTiA9IDB4MGYsCi0gSTI0MDBNX1JPX0NJTl9TSElGVCA9IDQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9ST19DSU5fU0hJRlQgPSA0LAogIEkyNDAwTV9ST19GQk4gPSAweDA3ZmYsCiAgSTI0MDBNX1JPX0ZCTl9TSElGVCA9IDgsCiAgSTI0MDBNX1JPX1NOID0gMHgwN2ZmLAotIEkyNDAwTV9ST19TTl9TSElGVCA9IDIxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fUk9fU05fU0hJRlQgPSAyMSwKIH07CiBlbnVtIGkyNDAwbV9yb190eXBlIHsKICBJMjQwME1fUk9fVFlQRV9SRVNFVCA9IDAsCi0gSTI0MDBNX1JPX1RZUEVfUEFDS0VULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fUk9fVFlQRV9QQUNLRVQsCiAgSTI0MDBNX1JPX1RZUEVfV1MsCiAgSTI0MDBNX1JPX1RZUEVfUEFDS0VUX1dTLAogfTsKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIEkyNDAwTV9QTF9BTElHTiA9IDE2LAogIEkyNDAwTV9QTF9TSVpFX01BWCA9IDB4M0VGRiwKICBJMjQwME1fTUFYX1BMU19JTl9NU0cgPSA2MCwKLSBJMjQwME1fSDJEX1BSRVZJRVdfQkFSS0VSID0gMHhjYWZlOTAwZCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX0gyRF9QUkVWSUVXX0JBUktFUiA9IDB4Y2FmZTkwMGQsCiAgSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSID0gMHhjMDFkYzAxZCwKICBJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIgPSAweDUwZjc1MGY3LAogIEkyNDAwTV9OQk9PVF9CQVJLRVIgPSAweGRlYWRiZWVmLAotIEkyNDAwTV9TQk9PVF9CQVJLRVIgPSAweDBmZjFjMWExLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fU0JPT1RfQkFSS0VSID0gMHgwZmYxYzFhMSwKICBJMjQwME1fU0JPT1RfQkFSS0VSXzYwNTAgPSAweDgwMDAwMDAxLAogIEkyNDAwTV9BQ0tfQkFSS0VSID0gMHhmZWVkYmFiZSwKICBJMjQwME1fRDJIX01TR19CQVJLRVIgPSAweGJlZWZiYWJlLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGkyNDAwbV9wbGQgewogIF9fbGUzMiB2YWw7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLSNkZWZpbmUgSTI0MDBNX1BMRF9TSVpFX01BU0sgMHgwMDAwM2ZmZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSTI0MDBNX1BMRF9TSVpFX01BU0sgMHgwMDAwM2ZmZgogI2RlZmluZSBJMjQwME1fUExEX1RZUEVfU0hJRlQgMTYKICNkZWZpbmUgSTI0MDBNX1BMRF9UWVBFX01BU0sgMHgwMDBmMDAwMAogc3RydWN0IGkyNDAwbV9tc2dfaGRyIHsKLSB1bmlvbiB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uIHsKICBfX2xlMzIgYmFya2VyOwogIF9fdTMyIHNpemU7CiAgfTsKLSB1bmlvbiB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uIHsKICBfX2xlMzIgc2VxdWVuY2U7CiAgX191MzIgb2Zmc2V0OwogIH07Ci0gX19sZTE2IG51bV9wbHM7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiBudW1fcGxzOwogIF9fbGUxNiByc3YxOwogIF9fbGUxNiBwYWRkaW5nOwogIF9fbGUxNiByc3YyOwotIHN0cnVjdCBpMjQwMG1fcGxkIHBsZFswXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGkyNDAwbV9wbGQgcGxkWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBlbnVtIHsKICBJMjQwME1fTDNMNF9WRVJTSU9OID0gMHgwMTAwLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSBpMjQwMG1fbXQgewogIEkyNDAwTV9NVF9SRVNFUlZFRCA9IDB4MDAwMCwKICBJMjQwME1fTVRfSU5WQUxJRCA9IDB4ZmZmZiwKLSBJMjQwME1fTVRfUkVQT1JUX01BU0sgPSAweDgwMDAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NVF9SRVBPUlRfTUFTSyA9IDB4ODAwMCwKICBJMjQwME1fTVRfR0VUX1NDQU5fUkVTVUxUID0gMHg0MjAyLAogIEkyNDAwTV9NVF9TRVRfU0NBTl9QQVJBTSA9IDB4NDQwMiwKICBJMjQwME1fTVRfQ01EX1JGX0NPTlRST0wgPSAweDQ2MDIsCi0gSTI0MDBNX01UX0NNRF9TQ0FOID0gMHg0NjAzLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fTVRfQ01EX1NDQU4gPSAweDQ2MDMsCiAgSTI0MDBNX01UX0NNRF9DT05ORUNUID0gMHg0NjA0LAogIEkyNDAwTV9NVF9DTURfRElTQ09OTkVDVCA9IDB4NDYwNSwKICBJMjQwME1fTVRfQ01EX0VYSVRfSURMRSA9IDB4NDYwNiwKLSBJMjQwME1fTVRfR0VUX0xNX1ZFUlNJT04gPSAweDUyMDEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NVF9HRVRfTE1fVkVSU0lPTiA9IDB4NTIwMSwKICBJMjQwME1fTVRfR0VUX0RFVklDRV9JTkZPID0gMHg1MjAyLAogIEkyNDAwTV9NVF9HRVRfTElOS19TVEFUVVMgPSAweDUyMDMsCiAgSTI0MDBNX01UX0dFVF9TVEFUSVNUSUNTID0gMHg1MjA0LAotIEkyNDAwTV9NVF9HRVRfU1RBVEUgPSAweDUyMDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NVF9HRVRfU1RBVEUgPSAweDUyMDUsCiAgSTI0MDBNX01UX0dFVF9NRURJQV9TVEFUVVMgPSAweDUyMDYsCiAgSTI0MDBNX01UX1NFVF9JTklUX0NPTkZJRyA9IDB4NTQwNCwKICBJMjQwME1fTVRfQ01EX0lOSVQgPSAweDU2MDEsCi0gSTI0MDBNX01UX0NNRF9URVJNSU5BVEUgPSAweDU2MDIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NVF9DTURfVEVSTUlOQVRFID0gMHg1NjAyLAogIEkyNDAwTV9NVF9DTURfTU9ERV9PRl9PUCA9IDB4NTYwMywKICBJMjQwME1fTVRfQ01EX1JFU0VUX0RFVklDRSA9IDB4NTYwNCwKICBJMjQwME1fTVRfQ01EX01PTklUT1JfQ09OVFJPTCA9IDB4NTYwNSwKLSBJMjQwME1fTVRfQ01EX0VOVEVSX1BPV0VSU0FWRSA9IDB4NTYwNiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX01UX0NNRF9FTlRFUl9QT1dFUlNBVkUgPSAweDU2MDYsCiAgSTI0MDBNX01UX0dFVF9UTFNfT1BFUkFUSU9OX1JFU1VMVCA9IDB4NjIwMSwKICBJMjQwME1fTVRfU0VUX0VBUF9TVUNDRVNTID0gMHg2NDAyLAogIEkyNDAwTV9NVF9TRVRfRUFQX0ZBSUwgPSAweDY0MDMsCi0gSTI0MDBNX01UX1NFVF9FQVBfS0VZID0gMHg2NDA0LAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fTVRfU0VUX0VBUF9LRVkgPSAweDY0MDQsCiAgSTI0MDBNX01UX0NNRF9TRU5EX0VBUF9SRVNQT05TRSA9IDB4NjYwMiwKICBJMjQwME1fTVRfUkVQT1JUX1NDQU5fUkVTVUxUID0gMHhjMDAyLAogIEkyNDAwTV9NVF9SRVBPUlRfU1RBVEUgPSAweGQwMDIsCi0gSTI0MDBNX01UX1JFUE9SVF9QT1dFUlNBVkVfUkVBRFkgPSAweGQwMDUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NVF9SRVBPUlRfUE9XRVJTQVZFX1JFQURZID0gMHhkMDA1LAogIEkyNDAwTV9NVF9SRVBPUlRfRUFQX1JFUVVFU1QgPSAweGUwMDIsCiAgSTI0MDBNX01UX1JFUE9SVF9FQVBfUkVTVEFSVCA9IDB4ZTAwMywKICBJMjQwME1fTVRfUkVQT1JUX0FMVF9BQ0NFUFQgPSAweGUwMDQsCi0gSTI0MDBNX01UX1JFUE9SVF9LRVlfUkVRVUVTVCA9IDB4ZTAwNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX01UX1JFUE9SVF9LRVlfUkVRVUVTVCA9IDB4ZTAwNSwKIH07CiBlbnVtIGkyNDAwbV9tcyB7CiAgSTI0MDBNX01TX0RPTkVfT0sgPSAwLAotIEkyNDAwTV9NU19ET05FX0lOX1BST0dSRVNTID0gMSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX01TX0RPTkVfSU5fUFJPR1JFU1MgPSAxLAogIEkyNDAwTV9NU19JTlZBTElEX09QID0gMiwKICBJMjQwME1fTVNfQkFEX1NUQVRFID0gMywKICBJMjQwME1fTVNfSUxMRUdBTF9WQUxVRSA9IDQsCi0gSTI0MDBNX01TX01JU1NJTkdfUEFSQU1TID0gNSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX01TX01JU1NJTkdfUEFSQU1TID0gNSwKICBJMjQwME1fTVNfVkVSU0lPTl9FUlJPUiA9IDYsCiAgSTI0MDBNX01TX0FDQ0VTU0lCSUxJVFlfRVJST1IgPSA3LAogIEkyNDAwTV9NU19CVVNZID0gOCwKLSBJMjQwME1fTVNfQ09SUlVQVEVEX1RMViA9IDksCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NU19DT1JSVVBURURfVExWID0gOSwKICBJMjQwME1fTVNfVU5JTklUSUFMSVpFRCA9IDEwLAogIEkyNDAwTV9NU19VTktOT1dOX0VSUk9SID0gMTEsCiAgSTI0MDBNX01TX1BST0RVQ1RJT05fRVJST1IgPSAxMiwKLSBJMjQwME1fTVNfTk9fUkYgPSAxMywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX01TX05PX1JGID0gMTMsCiAgSTI0MDBNX01TX05PVF9SRUFEWV9GT1JfUE9XRVJTQVZFID0gMTQsCiAgSTI0MDBNX01TX1RIRVJNQUxfQ1JJVElDQUwgPSAxNSwKICBJMjQwME1fTVNfTUFYCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBlbnVtIGkyNDAwbV90bHYgewogIEkyNDAwTV9UTFZfTDRfTUVTU0FHRV9WRVJTSU9OUyA9IDEyOSwKICBJMjQwME1fVExWX1NZU1RFTV9TVEFURSA9IDE0MSwKLSBJMjQwME1fVExWX01FRElBX1NUQVRVUyA9IDE2MSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX1RMVl9NRURJQV9TVEFUVVMgPSAxNjEsCiAgSTI0MDBNX1RMVl9SRl9PUEVSQVRJT04gPSAxNjIsCiAgSTI0MDBNX1RMVl9SRl9TVEFUVVMgPSAxNjMsCiAgSTI0MDBNX1RMVl9ERVZJQ0VfUkVTRVRfVFlQRSA9IDEzMiwKLSBJMjQwME1fVExWX0NPTkZJR19JRExFX1BBUkFNRVRFUlMgPSA2MDEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9UTFZfQ09ORklHX0lETEVfUEFSQU1FVEVSUyA9IDYwMSwKICBJMjQwME1fVExWX0NPTkZJR19JRExFX1RJTUVPVVQgPSA2MTEsCiAgSTI0MDBNX1RMVl9DT05GSUdfRDJIX0RBVEFfRk9STUFUID0gNjE0LAogIEkyNDAwTV9UTFZfQ09ORklHX0RMX0hPU1RfUkVPUkRFUiA9IDYxNSwKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBpMjQwMG1fdGx2X2hkciB7CiAgX19sZTE2IHR5cGU7CiAgX19sZTE2IGxlbmd0aDsKLSBfX3U4IHBsWzBdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHBsWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIHN0cnVjdCBpMjQwMG1fbDNsNF9oZHIgewogIF9fbGUxNiB0eXBlOwotIF9fbGUxNiBsZW5ndGg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiBsZW5ndGg7CiAgX19sZTE2IHZlcnNpb247CiAgX19sZTE2IHJlc3YxOwogIF9fbGUxNiBzdGF0dXM7Ci0gX19sZTE2IHJlc3YyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgcmVzdjI7CiAgc3RydWN0IGkyNDAwbV90bHZfaGRyIHBsWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIGVudW0gaTI0MDBtX3N5c3RlbV9zdGF0ZSB7Ci0gSTI0MDBNX1NTX1VOSU5JVElBTElaRUQgPSAxLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fU1NfVU5JTklUSUFMSVpFRCA9IDEsCiAgSTI0MDBNX1NTX0lOSVQsCiAgSTI0MDBNX1NTX1JFQURZLAogIEkyNDAwTV9TU19TQ0FOLAotIEkyNDAwTV9TU19TVEFOREJZLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fU1NfU1RBTkRCWSwKICBJMjQwME1fU1NfQ09OTkVDVElORywKICBJMjQwME1fU1NfV0lNQVhfQ09OTkVDVEVELAogIEkyNDAwTV9TU19EQVRBX1BBVEhfQ09OTkVDVEVELAotIEkyNDAwTV9TU19JRExFLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fU1NfSURMRSwKICBJMjQwME1fU1NfRElTQ09OTkVDVElORywKICBJMjQwME1fU1NfT1VUX09GX1pPTkUsCiAgSTI0MDBNX1NTX1NMRUVQQUNUSVZFLAotIEkyNDAwTV9TU19QUk9EVUNUSU9OLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJMjQwME1fU1NfUFJPRFVDVElPTiwKICBJMjQwME1fU1NfQ09ORklHLAogIEkyNDAwTV9TU19SRl9PRkYsCiAgSTI0MDBNX1NTX1JGX1NIVVRET1dOLAotIEkyNDAwTV9TU19ERVZJQ0VfRElTQ09OTkVDVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSTI0MDBNX1NTX0RFVklDRV9ESVNDT05ORUNULAogIEkyNDAwTV9TU19NQVgsCiB9Owogc3RydWN0IGkyNDAwbV90bHZfc3lzdGVtX3N0YXRlIHsKLSBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOwogIF9fbGUzMiBzdGF0ZTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBzdHJ1Y3QgaTI0MDBtX3Rsdl9sNF9tZXNzYWdlX3ZlcnNpb25zIHsKLSBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOwogIF9fbGUxNiBtYWpvcjsKICBfX2xlMTYgbWlub3I7CiAgX19sZTE2IGJyYW5jaDsKLSBfX2xlMTYgcmVzZXJ2ZWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiByZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBzdHJ1Y3QgaTI0MDBtX3Rsdl9kZXRhaWxlZF9kZXZpY2VfaW5mbyB7CiAgc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKLSBfX3U4IHJlc2VydmVkMVs0MDBdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX3U4IG1hY19hZGRyZXNzWzZdOworIF9fdTggcmVzZXJ2ZWQxWzQwMF07CisgX191OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CiAgX191OCByZXNlcnZlZDJbMl07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotZW51bSBpMjQwMG1fcmZfc3dpdGNoX3N0YXR1cyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSBpMjQwMG1fcmZfc3dpdGNoX3N0YXR1cyB7CiAgSTI0MDBNX1JGX1NXSVRDSF9PTiA9IDEsCiAgSTI0MDBNX1JGX1NXSVRDSF9PRkYgPSAyLAogfTsKLXN0cnVjdCBpMjQwMG1fdGx2X3JmX3N3aXRjaGVzX3N0YXR1cyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGkyNDAwbV90bHZfcmZfc3dpdGNoZXNfc3RhdHVzIHsKICBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOwogIF9fdTggc3dfcmZfc3dpdGNoOwogIF9fdTggaHdfcmZfc3dpdGNoOwotIF9fdTggcmVzZXJ2ZWRbMl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcmVzZXJ2ZWRbMl07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogZW51bSB7CiAgaTI0MDBtX3JmX29wZXJhdGlvbl9vbiA9IDEsCi0gaTI0MDBtX3JmX29wZXJhdGlvbl9vZmYgPSAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGkyNDAwbV9yZl9vcGVyYXRpb25fb2ZmID0gMgogfTsKIHN0cnVjdCBpMjQwMG1fdGx2X3JmX29wZXJhdGlvbiB7CiAgc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKLSBfX2xlMzIgc3RhdHVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgc3RhdHVzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIGVudW0gaTI0MDBtX3Rsdl9yZXNldF90eXBlIHsKICBJMjQwME1fUkVTRVRfVFlQRV9DT0xEID0gMSwKLSBJMjQwME1fUkVTRVRfVFlQRV9XQVJNCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9SRVNFVF9UWVBFX1dBUk0KIH07CiBzdHJ1Y3QgaTI0MDBtX3Rsdl9kZXZpY2VfcmVzZXRfdHlwZSB7CiAgc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKLSBfX2xlMzIgcmVzZXRfdHlwZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTMyIHJlc2V0X3R5cGU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2lkbGVfcGFyYW1ldGVycyB7CiAgc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKLSBfX2xlMzIgaWRsZV90aW1lb3V0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMzIgaWRsZV90aW1lb3V0OwogIF9fbGUzMiBpZGxlX3BhZ2luZ19pbnRlcnZhbDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBlbnVtIGkyNDAwbV9tZWRpYV9zdGF0dXMgewotIEkyNDAwTV9NRURJQV9TVEFUVVNfTElOS19VUCA9IDEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEkyNDAwTV9NRURJQV9TVEFUVVNfTElOS19VUCA9IDEsCiAgSTI0MDBNX01FRElBX1NUQVRVU19MSU5LX0RPV04sCiAgSTI0MDBNX01FRElBX1NUQVRVU19MSU5LX1JFTkVXLAogfTsKLXN0cnVjdCBpMjQwMG1fdGx2X21lZGlhX3N0YXR1cyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGkyNDAwbV90bHZfbWVkaWFfc3RhdHVzIHsKICBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOwogIF9fbGUzMiBtZWRpYV9zdGF0dXM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2lkbGVfdGltZW91dCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2lkbGVfdGltZW91dCB7CiAgc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKICBfX2xlMzIgdGltZW91dDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci1zdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfZDJoX2RhdGFfZm9ybWF0IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfZDJoX2RhdGFfZm9ybWF0IHsKICBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOwogIF9fdTggZm9ybWF0OwogIF9fdTggcmVzZXJ2ZWRbM107Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiBzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfZGxfaG9zdF9yZW9yZGVyIHsKICBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOwogIF9fdTggcmVvcmRlcjsKLSBfX3U4IHJlc2VydmVkWzNdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHJlc2VydmVkWzNdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC94YXR0ci5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC94YXR0ci5oCmluZGV4IGM0ZDljMDYuLmVjYWRjNmEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvbGludXgveGF0dHIuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3hhdHRyLmgKQEAgLTI2LDQ0ICsyNiw0NiBAQAogI2RlZmluZSBYQVRUUl9NQUNfT1NYX1BSRUZJWCAib3N4LiIKICNkZWZpbmUgWEFUVFJfTUFDX09TWF9QUkVGSVhfTEVOIChzaXplb2YoWEFUVFJfTUFDX09TWF9QUkVGSVgpIC0gMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFhBVFRSX0JUUkZTX1BSRUZJWCAiYnRyZnMuIgorI2RlZmluZSBYQVRUUl9CVFJGU19QUkVGSVhfTEVOIChzaXplb2YoWEFUVFJfQlRSRlNfUFJFRklYKSAtIDEpCiAjZGVmaW5lIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCAic2VjdXJpdHkuIgogI2RlZmluZSBYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOIChzaXplb2YoWEFUVFJfU0VDVVJJVFlfUFJFRklYKSAtIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9TWVNURU1fUFJFRklYICJzeXN0ZW0uIgogI2RlZmluZSBYQVRUUl9TWVNURU1fUFJFRklYX0xFTiAoc2l6ZW9mKFhBVFRSX1NZU1RFTV9QUkVGSVgpIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhBVFRSX1RSVVNURURfUFJFRklYICJ0cnVzdGVkLiIKICNkZWZpbmUgWEFUVFJfVFJVU1RFRF9QUkVGSVhfTEVOIChzaXplb2YoWEFUVFJfVFJVU1RFRF9QUkVGSVgpIC0gMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhBVFRSX1VTRVJfUFJFRklYICJ1c2VyLiIKICNkZWZpbmUgWEFUVFJfVVNFUl9QUkVGSVhfTEVOIChzaXplb2YoWEFUVFJfVVNFUl9QUkVGSVgpIC0gMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhBVFRSX0VWTV9TVUZGSVggImV2bSIKICNkZWZpbmUgWEFUVFJfTkFNRV9FVk0gWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX0VWTV9TVUZGSVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhBVFRSX0lNQV9TVUZGSVggImltYSIKICNkZWZpbmUgWEFUVFJfTkFNRV9JTUEgWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX0lNQV9TVUZGSVgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhBVFRSX1NFTElOVVhfU1VGRklYICJzZWxpbnV4IgogI2RlZmluZSBYQVRUUl9OQU1FX1NFTElOVVggWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NFTElOVVhfU1VGRklYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9TTUFDS19TVUZGSVggIlNNQUNLNjQiCiAjZGVmaW5lIFhBVFRSX1NNQUNLX0lQSU4gIlNNQUNLNjRJUElOIgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEFUVFJfU01BQ0tfSVBPVVQgIlNNQUNLNjRJUE9VVCIKICNkZWZpbmUgWEFUVFJfU01BQ0tfRVhFQyAiU01BQ0s2NEVYRUMiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9TTUFDS19UUkFOU01VVEUgIlNNQUNLNjRUUkFOU01VVEUiCiAjZGVmaW5lIFhBVFRSX1NNQUNLX01NQVAgIlNNQUNLNjRNTUFQIgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEFUVFJfTkFNRV9TTUFDSyBYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU01BQ0tfU1VGRklYCiAjZGVmaW5lIFhBVFRSX05BTUVfU01BQ0tJUElOIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19JUElOCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9OQU1FX1NNQUNLSVBPVVQgWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NNQUNLX0lQT1VUCiAjZGVmaW5lIFhBVFRSX05BTUVfU01BQ0tFWEVDIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19FWEVDCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9OQU1FX1NNQUNLVFJBTlNNVVRFIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19UUkFOU01VVEUKICNkZWZpbmUgWEFUVFJfTkFNRV9TTUFDS01NQVAgWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NNQUNLX01NQVAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhBVFRSX0NBUFNfU1VGRklYICJjYXBhYmlsaXR5IgogI2RlZmluZSBYQVRUUl9OQU1FX0NBUFMgWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX0NBUFNfU1VGRklYCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9QT1NJWF9BQ0xfQUNDRVNTICJwb3NpeF9hY2xfYWNjZXNzIgogI2RlZmluZSBYQVRUUl9OQU1FX1BPU0lYX0FDTF9BQ0NFU1MgWEFUVFJfU1lTVEVNX1BSRUZJWCBYQVRUUl9QT1NJWF9BQ0xfQUNDRVNTCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9QT1NJWF9BQ0xfREVGQVVMVCAicG9zaXhfYWNsX2RlZmF1bHQiCiAjZGVmaW5lIFhBVFRSX05BTUVfUE9TSVhfQUNMX0RFRkFVTFQgWEFUVFJfU1lTVEVNX1BSRUZJWCBYQVRUUl9QT1NJWF9BQ0xfREVGQVVMVAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC96b3Jyby5oIGIvbGliYy9rZXJuZWwvdWFwaS9saW51eC96b3Jyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOWVmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL2xpbnV4L3pvcnJvLmgKQEAgLTAsMCArMSw5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfVUFQSV9MSU5VWF9aT1JST19ICisjZGVmaW5lIF9VQVBJX0xJTlVYX1pPUlJPX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2RlZmluZSBaT1JST19NQU5VRihpZCkgKChpZCkgPj4gMTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EKGlkKSAoKChpZCkgPj4gOCkgJiAweGZmKQorI2RlZmluZSBaT1JST19FUEMoaWQpICgoaWQpICYgMHhmZikKKyNkZWZpbmUgWk9SUk9fSUQobWFudWYsIHByb2QsIGVwYykgICAoKFpPUlJPX01BTlVGXyMjbWFudWYgPDwgMTYpIHwgKChwcm9kKSA8PCA4KSB8IChlcGMpKQordHlwZWRlZiBfX3UzMiB6b3Jyb19pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8bGludXgvem9ycm9faWRzLmg+CisjZGVmaW5lIEdWUF9QUk9ETUFTSyAoMHhmOCkKKyNkZWZpbmUgR1ZQX1NDU0lDTEtNQVNLICgweDAxKQorZW51bSBHVlBfZmxhZ3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBHVlBfSU8gPSAweDAxLAorIEdWUF9BQ0NFTCA9IDB4MDIsCisgR1ZQX1NDU0kgPSAweDA0LAorIEdWUF8yNEJJVERNQSA9IDB4MDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEdWUF8yNUJJVERNQSA9IDB4MTAsCisgR1ZQX05PQkFOSyA9IDB4MjAsCisgR1ZQXzE0TUhaID0gMHg0MCwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IE5vZGUgeworIF9fYmUzMiBsbl9TdWNjOworIF9fYmUzMiBsbl9QcmVkOworIF9fdTggbG5fVHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zOCBsbl9Qcmk7CisgX19iZTMyIGxuX05hbWU7Cit9IF9fcGFja2VkOworc3RydWN0IEV4cGFuc2lvblJvbSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZXJfVHlwZTsKKyBfX3U4IGVyX1Byb2R1Y3Q7CisgX191OCBlcl9GbGFnczsKKyBfX3U4IGVyX1Jlc2VydmVkMDM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUxNiBlcl9NYW51ZmFjdHVyZXI7CisgX19iZTMyIGVyX1NlcmlhbE51bWJlcjsKKyBfX2JlMTYgZXJfSW5pdERpYWdWZWM7CisgX191OCBlcl9SZXNlcnZlZDBjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGVyX1Jlc2VydmVkMGQ7CisgX191OCBlcl9SZXNlcnZlZDBlOworIF9fdTggZXJfUmVzZXJ2ZWQwZjsKK30gX19wYWNrZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFUlRfVFlQRU1BU0sgMHhjMAorI2RlZmluZSBFUlRfWk9SUk9JSSAweGMwCisjZGVmaW5lIEVSVF9aT1JST0lJSSAweDgwCisjZGVmaW5lIEVSVEJfTUVNTElTVCA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFUlRGX01FTUxJU1QgKDE8PDUpCitzdHJ1Y3QgQ29uZmlnRGV2IHsKKyBzdHJ1Y3QgTm9kZSBjZF9Ob2RlOworIF9fdTggY2RfRmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggY2RfUGFkOworIHN0cnVjdCBFeHBhbnNpb25Sb20gY2RfUm9tOworIF9fYmUzMiBjZF9Cb2FyZEFkZHI7CisgX19iZTMyIGNkX0JvYXJkU2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19iZTE2IGNkX1Nsb3RBZGRyOworIF9fYmUxNiBjZF9TbG90U2l6ZTsKKyBfX2JlMzIgY2RfRHJpdmVyOworIF9fYmUzMiBjZF9OZXh0Q0Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fYmUzMiBjZF9VbnVzZWRbNF07Cit9IF9fcGFja2VkOworI2RlZmluZSBaT1JST19OVU1fQVVUTyAxNgorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9saW51eC96b3Jyb19pZHMuaCBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvem9ycm9faWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViZjBiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkvbGludXgvem9ycm9faWRzLmgKQEAgLTAsMCArMSw1NTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfUEFDSUZJQ19QRVJJUEhFUkFMUyAweDAwRDMKKyNkZWZpbmUgWk9SUk9fUFJPRF9QQUNJRklDX1BFUklQSEVSQUxTX1NFXzIwMDBfQTUwMCBaT1JST19JRChQQUNJRklDX1BFUklQSEVSQUxTLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BBQ0lGSUNfUEVSSVBIRVJBTFNfU0NTSSBaT1JST19JRChQQUNJRklDX1BFUklQSEVSQUxTLCAweDBBLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9NQUNST1NZU1RFTVNfVVNBXzIgMHgwMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19XQVJQX0VOR0lORSBaT1JST19JRChNQUNST1NZU1RFTVNfVVNBXzIsIDB4MTMsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0tVUEtFXzEgMHgwMERECisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfR09MRU1fUkFNX0JPWF8yTUIgWk9SUk9fSUQoS1VQS0VfMSwgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUVNUEhJUyAweDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfTUVNUEhJU19TVE9STUJSSU5HRVIgWk9SUk9fSUQoTUVNUEhJUywgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfM19TVEFURSAweDAyMDAKKyNkZWZpbmUgWk9SUk9fUFJPRF8zX1NUQVRFX01FR0FNSVhfMjAwMCBaT1JST19JRCgzX1NUQVRFLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9DT01NT0RPUkVfQlJBVU5TQ0hXRUlHIDB4MDIwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwODhfQTIyODYgWk9SUk9fSUQoQ09NTU9ET1JFX0JSQVVOU0NIV0VJRywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIyODYgWk9SUk9fSUQoQ09NTU9ET1JFX0JSQVVOU0NIV0VJRywgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTQwOTFfMSBaT1JST19JRChDT01NT0RPUkVfQlJBVU5TQ0hXRUlHLCAweDU0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjM4NlNYXzEgWk9SUk9fSUQoQ09NTU9ET1JFX0JSQVVOU0NIV0VJRywgMHg2NywgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSAweDAyMDIKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwOTBBIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTU5MF9BMjA5MV8xIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTU5MF9BMjA5MV8yIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgwMywgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMDkwQiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMDYwIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgwOSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTU5MF9BMjA1Ml9BMjA1OF9BMjA5MSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MEEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0E1NjBfUkFNIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgyMCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMjMyX1BST1RPVFlQRSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NDUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMjMyIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg0NiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTI2MjAgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDUwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjYzMCBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NTEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0NCTV9BNDA5MV8yIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg1NCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwNjVfMSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NUEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX1JPTVVMQVRPUiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NjAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EzMDAwX1RFU1RfRklYVFVSRSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NjEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjM4NlNYXzIgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDY3LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA2NV8yIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg3MCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8yIDB4MDIwMworI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA5MEFfQ00gWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8yLCAweDAzLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVNfMiAweDAyRjQKKyNkZWZpbmUgWk9SUk9fUFJPRF9QUFNfRVhQODAwMCBaT1JST19JRChQUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNU18yLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9LT0xGRl9DT01QVVRFUl9TVVBQTElFUyAweDAyRkYKKyNkZWZpbmUgWk9SUk9fUFJPRF9LQ1NfUE9XRVJfUENfQk9BUkQgWk9SUk9fSUQoS09MRkZfQ09NUFVURVJfU1VQUExJRVMsIDB4MDAsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9DQVJEQ09fMSAweDAzRUMKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQVJEQ09fS1JPTk9TXzIwMDBfMSBaT1JST19JRChDQVJEQ09fMSwgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQVJEQ09fQTEwMDBfMSBaT1JST19JRChDQVJEQ09fMSwgMHgwQywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQVJEQ09fRVNDT1JUIFpPUlJPX0lEKENBUkRDT18xLCAweDBFLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9DQVJEQ09fQTI0MTAgWk9SUk9fSUQoQ0FSRENPXzEsIDB4RjUsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0FfU1FVQVJFRCAweDAzRUQKKyNkZWZpbmUgWk9SUk9fUFJPRF9BX1NRVUFSRURfTElWRV8yMDAwIFpPUlJPX0lEKEFfU1FVQVJFRCwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NU1BFQ19DT01NVU5JQ0FUSU9OUyAweDAzRUUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQ09NU1BFQ19DT01NVU5JQ0FUSU9OU19BWDIwMDAgWk9SUk9fSUQoQ09NU1BFQ19DT01NVU5JQ0FUSU9OUywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQU5BS0lOX1JFU0VBUkNIIDB4MDNGMQorI2RlZmluZSBaT1JST19QUk9EX0FOQUtJTl9SRVNFQVJDSF9FQVNZTCBaT1JST19JRChBTkFLSU5fUkVTRUFSQ0gsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX01JQ1JPQk9USUNTIDB4MDNGMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19TVEFSQk9BUkRfSUkgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfU1RBUkRSSVZFIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTXzhfVVBfQSBaT1JST19JRChNSUNST0JPVElDUywgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU184X1VQX1ogWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4MDQsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX0RFTFRBX1JBTSBaT1JST19JRChNSUNST0JPVElDUywgMHgyMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU184X1NUQVJfUkFNIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDQwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTXzhfU1RBUiBaT1JST19JRChNSUNST0JPVElDUywgMHg0MSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19WWExfUkFNXzMyIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDQ0LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19WWExfNjgwMzAgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4NDUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfREVMVEEgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4NjAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfTUJYXzEyMDBfMTIwMFpfUkFNIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDgxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX0hBUkRGUkFNRV8yMDAwXzEgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4OTYsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX0hBUkRGUkFNRV8yMDAwXzIgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4OUUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfTUJYXzEyMDBfMTIwMFogWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4QzEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0FDQ0VTU19BU1NPQ0lBVEVTX0FMRUdSQSAweDAzRjQKKyNkZWZpbmUgWk9SUk9fTUFOVUZfRVhQQU5TSU9OX1RFQ0hOT0xPR0lFUyAweDAzRjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0FTREcgMHgwM0ZGCisjZGVmaW5lIFpPUlJPX1BST0RfQVNER19NRU1PUllfMSBaT1JST19JRChBU0RHLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FTREdfTUVNT1JZXzIgWk9SUk9fSUQoQVNERywgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BU0RHX0VCOTIwX0xBTl9ST1ZFUiBaT1JST19JRChBU0RHLCAweEZFLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9BU0RHX0dQSUJfRFVBTElFRUU0ODhfVFdJTl9YIFpPUlJPX0lEKEFTREcsIDB4RkYsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0lNVFJPTklDU18xIDB4MDQwNAorI2RlZmluZSBaT1JST19QUk9EX0lNVFJPTklDU19IVVJSSUNBTkVfMjgwMF8xIFpPUlJPX0lEKElNVFJPTklDU18xLCAweDM5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lNVFJPTklDU19IVVJSSUNBTkVfMjgwMF8yIFpPUlJPX0lEKElNVFJPTklDU18xLCAweDU3LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0JNX1VOSVZFUlNJVFlfT0ZfTE9XRUxMIDB4MDQwNgorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjQxMCBaT1JST19JRChDQk1fVU5JVkVSU0lUWV9PRl9MT1dFTEwsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0FNRVJJU1RBUiAweDA0MUQKKyNkZWZpbmUgWk9SUk9fUFJPRF9BTUVSSVNUQVJfQTIwNjUgWk9SUk9fSUQoQU1FUklTVEFSLCAweDAxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9BTUVSSVNUQVJfQTU2MCBaT1JST19JRChBTUVSSVNUQVIsIDB4MDksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQU1FUklTVEFSX0E0MDY2IFpPUlJPX0lEKEFNRVJJU1RBUiwgMHgwQSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfU1VQUkEgMHgwNDIwCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfU1VQUkFEUklWRV80eDQgWk9SUk9fSUQoU1VQUkEsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzEwMDBfUkFNIFpPUlJPX0lEKFNVUFJBLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzIwMDBfRE1BIFpPUlJPX0lEKFNVUFJBLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzUwMCBaT1JST19JRChTVVBSQSwgMHgwNSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV81MDBfU0NTSSBaT1JST19JRChTVVBSQSwgMHgwOCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfNTAwWFBfMjAwMF9SQU0gWk9SUk9fSUQoU1VQUkEsIDB4MDksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfNTAwUlhfMjAwMF9SQU0gWk9SUk9fSUQoU1VQUkEsIDB4MEEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfMjQwMFpJIFpPUlJPX0lEKFNVUFJBLCAweDBCLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzUwMFhQX1NVUFJBRFJJVkVfV09SRFNZTkMgWk9SUk9fSUQoU1VQUkEsIDB4MEMsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1NVUFJBX1NVUFJBRFJJVkVfV09SRFNZTkNfSUkgWk9SUk9fSUQoU1VQUkEsIDB4MEQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfMjQwMFpJUExVUyBaT1JST19JRChTVVBSQSwgMHgxMCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NUFVURVJfU1lTVEVNU19BU1NPQ0lBVEVTIDB4MDQyMgorI2RlZmluZSBaT1JST19QUk9EX0NTQV9NQUdOVU0gWk9SUk9fSUQoQ09NUFVURVJfU1lTVEVNU19BU1NPQ0lBVEVTLCAweDExLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9DU0FfMTJfR0FVR0UgWk9SUk9fSUQoQ09NUFVURVJfU1lTVEVNU19BU1NPQ0lBVEVTLCAweDE1LCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9NQVJDX01JQ0hBRUxfR1JPVEggMHgwNDM5CisjZGVmaW5lIFpPUlJPX01BTlVGX01fVEVDSCAweDA1MDIKKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDX0FUNTAwXzEgWk9SUk9fSUQoTV9URUNILCAweDAzLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzEgMHgwNkUxCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9TRVJJRVNfSSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMSwgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQllURUJPWCAweDA3REEKKyNkZWZpbmUgWk9SUk9fUFJPRF9CWVRFQk9YX0E1MDAgWk9SUk9fSUQoQllURUJPWCwgMHgwMCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0RLQl9QT1dFUl9DT01QVVRJTkcgMHgwN0RDCisjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19TRUNVUkVLRVkgWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHgwOSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9ES0JfUE9XRVJfQ09NUFVUSU5HX0RLTV8zMTI4IFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MEUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19SQVBJRF9GSVJFIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MEYsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfREtNXzEyMDIgWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHgxMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9ES0JfUE9XRVJfQ09NUFVUSU5HX0NPQlJBX1ZJUEVSX0lJXzY4RUMwMzAgWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHgxMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9ES0JfUE9XRVJfQ09NUFVUSU5HX1dJTERGSVJFXzA2MF8xIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MTcsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19XSUxERklSRV8wNjBfMiBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweEZGLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIgMHgwN0UxCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9TRVJJRVNfSV80SyBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1NFUklFU19JXzE2S18yIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lfMTZLXzMgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MDMsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfMzAwMV9JREVfMSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUXzMwMDFfUkFNIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDA5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lJX1JBTV8xIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBBLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9FUENfQkFTRSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wNDBfMSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHgyMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzA0MF9TQ1NJXzEgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4MzApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0ExMjkxIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDQwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9DT01CT18wMzBfUjQgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4NjApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0dWUF9DT01CT18wMzBfUjRfU0NTSSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHg3MCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfUEhPTkVQQUsgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4NzgpCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lPX0VYVEVOREVSIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDk4KQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9HRk9SQ0VfMDMwIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGEwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzAzMF9TQ1NJIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGIwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9BNTMwIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGMwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9BNTMwX1NDU0kgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4ZDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0NPTUJPXzAzMF9SMyBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhlMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0NPTUJPXzAzMF9SM19TQ1NJIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGYwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9TRVJJRVNfSUkgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4ZjgpCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF8zMDAxX0lERV8yIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBELCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9HRk9SQ0VfMDQwXzA2MCBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgxNiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9WSVNJT05fMjQgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MjAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wNDBfMiBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHhGRiwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0FMSUZPUk5JQV9BQ0NFU1NfU1lORVJHWSAweDA3RTUKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQUxJRk9STklBX0FDQ0VTU19TWU5FUkdZX01BTElCVSBaT1JST19JRChDQUxJRk9STklBX0FDQ0VTU19TWU5FUkdZLCAweDAxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfWEVURUMgMHgwN0U2CisjZGVmaW5lIFpPUlJPX1BST0RfWEVURUNfRkFTVENBUkQgWk9SUk9fSUQoWEVURUMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfWEVURUNfRkFTVENBUkRfUkFNIFpPUlJPX0lEKFhFVEVDLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1hFVEVDX0ZBU1RDQVJEX1BMVVMgWk9SUk9fSUQoWEVURUMsIDB4MDMsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9QUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNUyAweDA3RUEKKyNkZWZpbmUgWk9SUk9fUFJPRF9QUFNfTUVSQ1VSWSBaT1JST19JRChQUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNUywgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QUFNfQTMwMDBfNjgwNDAgWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUFBTX0EyMDAwXzY4MDQwIFpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TLCAweDY5LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9QUFNfWkVVUyBaT1JST19JRChQUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNUywgMHg5NiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QUFNfQTUwMF82ODA0MCBaT1JST19JRChQUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNUywgMHhCQiwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfWEVCRUMgMHgwN0VDCisjZGVmaW5lIFpPUlJPX01BTlVGX1NQSVJJVF9URUNITk9MT0dZIDB4MDdGMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9JTlNJREVSX0lOMTAwMCBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9JTlNJREVSX0lONTAwIFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NQSVJJVF9URUNITk9MT0dZX1NJTjUwMCBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9IREFfNTA2IFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA0LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9BWF9TIFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NQSVJJVF9URUNITk9MT0dZX09DVEFCWVRFIFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NQSVJJVF9URUNITk9MT0dZX0lOTUFURSBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfU1BJUklUX1RFQ0hOT0xPR1lfMiAweDA3RjMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0JTQ19BTEZBREFUQV8xIDB4MDdGRQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19BTEZfM18xIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8xLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9CU0NfQUxGQURBVEFfMiAweDA4MDEKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfQUxGXzJfMSBaT1JST19JRChCU0NfQUxGQURBVEFfMiwgMHgwMSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRl8yXzIgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzIsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRl8zXzIgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzIsIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0NBUkRDT18yIDB4MDgwMgorI2RlZmluZSBaT1JST19QUk9EX0NBUkRDT19LUk9OT1NfMjAwMF8yIFpPUlJPX0lEKENBUkRDT18yLCAweDA0LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9DQVJEQ09fQTEwMDBfMiBaT1JST19JRChDQVJEQ09fMiwgMHgwQywgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSk9DSEhFSU0gMHgwODA0CisjZGVmaW5lIFpPUlJPX1BST0RfSk9DSEhFSU1fUkFNIFpPUlJPX0lEKEpPQ0hIRUlNLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9DSEVDS1BPSU5UX1RFQ0hOT0xPR0lFUyAweDA4MDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQ0hFQ0tQT0lOVF9URUNITk9MT0dJRVNfU0VSSUFMX1NPTFVUSU9OIFpPUlJPX0lEKENIRUNLUE9JTlRfVEVDSE5PTE9HSUVTLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9FRE9UUk9OSUsgMHgwODEwCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX0lFRUVfNDg4IFpPUlJPX0lEKEVET1RST05JSywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfODAzMiBaT1JST19JRChFRE9UUk9OSUssIDB4MDIsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19NVUxUSVNFUklBTCBaT1JST19JRChFRE9UUk9OSUssIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX1ZJREVPRElHSVRJWkVSIFpPUlJPX0lEKEVET1RST05JSywgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfUEFSQUxMRUxfSU8gWk9SUk9fSUQoRURPVFJPTklLLCAweDA1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19QSUNfUFJPVE9ZUElORyBaT1JST19JRChFRE9UUk9OSUssIDB4MDYsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19BREMgWk9SUk9fSUQoRURPVFJPTklLLCAweDA3LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19WTUUgWk9SUk9fSUQoRURPVFJPTklLLCAweDA4LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19EU1A5NjAwMCBaT1JST19JRChFRE9UUk9OSUssIDB4MDksIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX05FU19JTkMgMHgwODEzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX05FU19JTkNfUkFNIFpPUlJPX0lEKE5FU19JTkMsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0lDRCAweDA4MTcKKyNkZWZpbmUgWk9SUk9fUFJPRF9JQ0RfQURWQU5UQUdFXzIwMDBfU0NTSSBaT1JST19JRChJQ0QsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSUNEX0FEVkFOVEFHRV9JREUgWk9SUk9fSUQoSUNELCAweDAzLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9JQ0RfQURWQU5UQUdFXzIwODBfUkFNIFpPUlJPX0lEKElDRCwgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfS1VQS0VfMiAweDA4MTkKKyNkZWZpbmUgWk9SUk9fUFJPRF9LVVBLRV9PTVRJIFpPUlJPX0lEKEtVUEtFXzIsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfU0NTSV9JSSBaT1JST19JRChLVVBLRV8yLCAweDAyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9LVVBLRV9HT0xFTV9CT1ggWk9SUk9fSUQoS1VQS0VfMiwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9LVVBLRV8wMzBfODgyIFpPUlJPX0lEKEtVUEtFXzIsIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfU0NTSV9BVCBaT1JST19JRChLVVBLRV8yLCAweDA1LCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9HUkVBVF9WQUxMRVlfUFJPRFVDVFNfMyAweDA4MUQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0EyMDAwX1JBTTggWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzMsIDB4MDksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9TRVJJRVNfSUlfUkFNXzIgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzMsIDB4MEEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0lOVEVSV09SS1NfTkVUV09SSyAweDA4MUUKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSEFSRElUQUxfU1lOVEhFU0lTIDB4MDgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9IQVJESVRBTF9TWU5USEVTSVNfVFFNXzY4MDMwXzY4ODgyIFpPUlJPX0lEKEhBUkRJVEFMX1NZTlRIRVNJUywgMHgxNCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVBQTElFRF9FTkdJTkVFUklORyAweDA4MjgKKyNkZWZpbmUgWk9SUk9fUFJPRF9BUFBMSUVEX0VOR0lORUVSSU5HX0RMMjAwMCBaT1JST19JRChBUFBMSUVEX0VOR0lORUVSSU5HLCAweDEwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FQUExJRURfRU5HSU5FRVJJTkdfUkFNX1dPUktTIFpPUlJPX0lEKEFQUExJRURfRU5HSU5FRVJJTkcsIDB4RTAsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9CU0NfQUxGQURBVEFfMyAweDA4MkMKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfT0tUQUdPTl8yMDA4IFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDA1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19UQU5ERU1fQVRfMjAwOF81MDggWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MDYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRkFfUkFNXzEyMDAgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MDcsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0JTQ19PS1RBR09OXzIwMDhfUkFNIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDA4LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19NVUxUSUZBQ0VfSSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgxMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfTVVMVElGQUNFX0lJIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDExLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19NVUxUSUZBQ0VfSUlJIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDEyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfRlJBTUVNQVNURVJfSUkgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MjAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0dSQUZGSVRJX1JBTSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgyMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfR1JBRkZJVElfUkVHIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDIyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19JU0ROX01BU1RFUkNBUkQgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4NDAsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0JTQ19JU0ROX01BU1RFUkNBUkRfSUkgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4NDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1BIT0VOSVggMHgwODM1CisjZGVmaW5lIFpPUlJPX1BST0RfUEhPRU5JWF9TVDUwNiBaT1JST19JRChQSE9FTklYLCAweDIxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIT0VOSVhfU0NTSSBaT1JST19JRChQSE9FTklYLCAweDIyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9QSE9FTklYX1JBTSBaT1JST19JRChQSE9FTklYLCAweEJFLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9BRFZBTkNFRF9TVE9SQUdFX1NZU1RFTVMgMHgwODM2CisjZGVmaW5lIFpPUlJPX1BST0RfQURWQU5DRURfU1RPUkFHRV9TWVNURU1TX05FWFVTIFpPUlJPX0lEKEFEVkFOQ0VEX1NUT1JBR0VfU1lTVEVNUywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BRFZBTkNFRF9TVE9SQUdFX1NZU1RFTVNfTkVYVVNfUkFNIFpPUlJPX0lEKEFEVkFOQ0VEX1NUT1JBR0VfU1lTVEVNUywgMHgwOCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0lNUFVMU0UgMHgwODM4CisjZGVmaW5lIFpPUlJPX1BST0RfSU1QVUxTRV9GSVJFQ1JBQ0tFUl8yNCBaT1JST19JRChJTVBVTFNFLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9JVlMgMHgwODQwCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX0dSQU5EU0xBTV9QSUNfMiBaT1JST19JRChJVlMsIDB4MDIsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0lWU19HUkFORFNMQU1fUElDXzEgWk9SUk9fSUQoSVZTLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lWU19PVkVSRFJJVkUgWk9SUk9fSUQoSVZTLCAweDEwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lWU19UUlVNUENBUkRfQ0xBU1NJQyBaT1JST19JRChJVlMsIDB4MzAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX1RSVU1QQ0FSRF9QUk9fR1JBTkRTTEFNIFpPUlJPX0lEKElWUywgMHgzNCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX01FVEFfNCBaT1JST19JRChJVlMsIDB4NDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX1dBVkVUT09MUyBaT1JST19JRChJVlMsIDB4QkYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX1ZFQ1RPUl8xIFpPUlJPX0lEKElWUywgMHhGMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfVkVDVE9SXzIgWk9SUk9fSUQoSVZTLCAweEY0LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfVkVDVE9SXzEgMHgwODQxCisjZGVmaW5lIFpPUlJPX1BST0RfVkVDVE9SX0NPTk5FQ1RJT05fMSBaT1JST19JRChWRUNUT1JfMSwgMHhFMywgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfWFBFUlRfUFJPREVWIDB4MDg0NQorI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9WSVNJT05BX1JBTSBaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9WSVNJT05BX1JFRyBaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfWFBFUlRfUFJPREVWX01FUkxJTl9SQU0gWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9NRVJMSU5fUkVHXzEgWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9NRVJMSU5fUkVHXzIgWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweEM5LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfSFlEUkFfU1lTVEVNUyAweDA4NDkKKyNkZWZpbmUgWk9SUk9fUFJPRF9IWURSQV9TWVNURU1TX0FNSUdBTkVUIFpPUlJPX0lEKEhZRFJBX1NZU1RFTVMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1NVTlJJWkVfSU5EVVNUUklFUyAweDA4NEYKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVU5SSVpFX0lORFVTVFJJRVNfQUQxMDEyIFpPUlJPX0lEKFNVTlJJWkVfSU5EVVNUUklFUywgMHgwMSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfU1VOUklaRV9JTkRVU1RSSUVTX0FENTE2IFpPUlJPX0lEKFNVTlJJWkVfSU5EVVNUUklFUywgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVU5SSVpFX0lORFVTVFJJRVNfREQ1MTIgWk9SUk9fSUQoU1VOUklaRV9JTkRVU1RSSUVTLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9UUklDRVJBVE9QUyAweDA4NTAKKyNkZWZpbmUgWk9SUk9fUFJPRF9UUklDRVJBVE9QU19NVUxUSV9JTyBaT1JST19JRChUUklDRVJBVE9QUywgMHgwMSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0FQUExJRURfTUFHSUMgMHgwODUxCisjZGVmaW5lIFpPUlJPX1BST0RfQVBQTElFRF9NQUdJQ19ETUlfUkVTT0xWRVIgWk9SUk9fSUQoQVBQTElFRF9NQUdJQywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BUFBMSUVEX01BR0lDX0RJR0lUQUxfQlJPQURDQVNURVIgWk9SUk9fSUQoQVBQTElFRF9NQUdJQywgMHgwNiwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfR0ZYX0JBU0UgMHgwODVFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0dGWF9CQVNFX0dEQV8xX1ZSQU0gWk9SUk9fSUQoR0ZYX0JBU0UsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR0ZYX0JBU0VfR0RBXzEgWk9SUk9fSUQoR0ZYX0JBU0UsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1JPQ1RFQyAweDA4NjAKKyNkZWZpbmUgWk9SUk9fUFJPRF9ST0NURUNfUkhfODAwQyBaT1JST19JRChST0NURUMsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1JPQ1RFQ19SSF84MDBDX1JBTSBaT1JST19JRChST0NURUMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0tBVE8gMHgwODYxCisjZGVmaW5lIFpPUlJPX1BST0RfS0FUT19NRUxPRFkgWk9SUk9fSUQoS0FUTywgMHg4MCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSEVMRlJJQ0hfMSAweDA4NjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfUkFJTkJPV19JSSBaT1JST19JRChIRUxGUklDSF8xLCAweDIwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1JBSU5CT1dfSUlJIFpPUlJPX0lEKEhFTEZSSUNIXzEsIDB4MjEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0FUTEFOVElTIDB4MDg2MgorI2RlZmluZSBaT1JST19NQU5VRl9QUk9UQVIgMHgwODY0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9BQ1MgMHgwODY1CisjZGVmaW5lIFpPUlJPX01BTlVGX1NPRlRXQVJFX1JFU1VMVFNfRU5URVJQUklTRVMgMHgwODY2CisjZGVmaW5lIFpPUlJPX1BST0RfU09GVFdBUkVfUkVTVUxUU19FTlRFUlBSSVNFU19HT0xERU5fR0FURV8yX0JVU19QTFVTIFpPUlJPX0lEKFNPRlRXQVJFX1JFU1VMVFNfRU5URVJQUklTRVMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX01BU09CT1NISSAweDA4NkQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfTUFTT0JPU0hJX01BU1RFUl9DQVJEX1NDMjAxIFpPUlJPX0lEKE1BU09CT1NISSwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQVNPQk9TSElfTUFTVEVSX0NBUkRfTUM3MDIgWk9SUk9fSUQoTUFTT0JPU0hJLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BU09CT1NISV9NVkRfODE5IFpPUlJPX0lEKE1BU09CT1NISSwgMHgwNywgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUFJTkhBVFRBTl9EQVRBIDB4MDg2RgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUlOSEFUVEFOX0RBVEFfSURFIFpPUlJPX0lEKE1BSU5IQVRUQU5fREFUQSwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfVklMTEFHRV9UUk9OSUMgMHgwODc3CisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfRE9NSU5PX1JBTSBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19ET01JTk9fUkVHIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDAyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19ET01JTk9fMTZNX1BST1RPVFlQRSBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lJX0lJX1BMVVNfUkFNIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDBCLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSUlfSUlfUExVU19SRUcgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MEMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JSV9JSV9QTFVTX1NFR01FTlRFRF9NT0RFIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDBELCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lWX1oyX1JBTTEgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MTUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JVl9aMl9SQU0yIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSVZfWjJfUkVHIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE3LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSVZfWjMgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MTgsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX0FSSUFETkUgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4QzksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfQVJJQURORTIgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4Q0EsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1VUSUxJVElFU19VTkxJTUlURUQgMHgwODdCCisjZGVmaW5lIFpPUlJPX1BST0RfVVRJTElUSUVTX1VOTElNSVRFRF9FTVBMQU5UX0RFTFVYRSBaT1JST19JRChVVElMSVRJRVNfVU5MSU1JVEVELCAweDE1LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9VVElMSVRJRVNfVU5MSU1JVEVEX0VNUExBTlRfREVMVVhFMiBaT1JST19JRChVVElMSVRJRVNfVU5MSU1JVEVELCAweDIwLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9BTUlUUklYIDB4MDg4MAorI2RlZmluZSBaT1JST19QUk9EX0FNSVRSSVhfTVVMVElfSU8gWk9SUk9fSUQoQU1JVFJJWCwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BTUlUUklYX0NEX1JBTSBaT1JST19JRChBTUlUUklYLCAweDAyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVJNQVggMHgwODg1CisjZGVmaW5lIFpPUlJPX1BST0RfQVJNQVhfT01OSUJVUyBaT1JST19JRChBUk1BWCwgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfWkVVUyAweDA4OEQKKyNkZWZpbmUgWk9SUk9fUFJPRF9aRVVTX1NQSURFUiBaT1JST19JRChaRVVTLCAweDA0LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfTkVXVEVLIDB4MDg4RgorI2RlZmluZSBaT1JST19QUk9EX05FV1RFS19WSURFT1RPQVNURVIgWk9SUk9fSUQoTkVXVEVLLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9NX1RFQ0hfR0VSTUFOWSAweDA4OTAKKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDX0FUNTAwXzIgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX01URUNfNjgwMzAgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ182ODAyMEkgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MDYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ19BMTIwMF9UNjgwMzBfUlRDIFpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDIwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01URUNfVklQRVJfTUtfVl9FX01BVFJJWF81MzAgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MjEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX01URUNfOF9NQl9SQU0gWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MjIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ19WSVBFUl9NS19WX0VfTUFUUklYXzUzMF9TQ1NJX0lERSBaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgyNCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzQgMHgwODkxCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0VHU18yOF8yNF9TUEVDVFJVTV9SQU0gWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzQsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0dWUF9FR1NfMjhfMjRfU1BFQ1RSVU1fUkVHIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU180LCAweDAyLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9BUE9MTE9fMSAweDA4OTIKKyNkZWZpbmUgWk9SUk9fUFJPRF9BUE9MTE9fQTEyMDAgWk9SUk9fSUQoQVBPTExPXzEsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0hFTEZSSUNIXzIgMHgwODkzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1BJQ0NPTE9fUkFNIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MDUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfUElDQ09MT19SRUcgWk9SUk9fSUQoSEVMRlJJQ0hfMiwgMHgwNiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9QRUdHWV9QTFVTX01QRUcgWk9SUk9fSUQoSEVMRlJJQ0hfMiwgMHgwNywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9WSURFT0NSVU5DSEVSIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MDgsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1NENjRfUkFNIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MEEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfU0Q2NF9SRUcgWk9SUk9fSUQoSEVMRlJJQ0hfMiwgMHgwQiwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUFDUk9TWVNURU1TX1VTQSAweDA4OUIKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfV0FSUF9FTkdJTkVfNDB4eCBaT1JST19JRChNQUNST1NZU1RFTVNfVVNBLCAweDEzLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfRUxCT1hfQ09NUFVURVIgMHgwODlFCisjZGVmaW5lIFpPUlJPX1BST0RfRUxCT1hfQ09NUFVURVJfMTIwMF80IFpPUlJPX0lEKEVMQk9YX0NPTVBVVEVSLCAweDA2LCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9IQVJNU19QUk9GRVNTSU9OQUwgMHgwQTAwCisjZGVmaW5lIFpPUlJPX1BST0RfSEFSTVNfUFJPRkVTU0lPTkFMXzAzMF9QTFVTIFpPUlJPX0lEKEhBUk1TX1BST0ZFU1NJT05BTCwgMHgxMCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfSEFSTVNfUFJPRkVTU0lPTkFMXzM1MDAgWk9SUk9fSUQoSEFSTVNfUFJPRkVTU0lPTkFMLCAweEQwLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9NSUNST05JSyAweDBBNTAKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST05JS19SQ0FfMTIwIFpPUlJPX0lEKE1JQ1JPTklLLCAweDBBLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9NSUNST05JSzIgMHgwRjBGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX01JQ1JPTklLMl9aM0kgWk9SUk9fSUQoTUlDUk9OSUsyLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9NRUdBTUlDUk8gMHgxMDAwCisjZGVmaW5lIFpPUlJPX1BST0RfTUVHQU1JQ1JPX1NDUkFNXzUwMCBaT1JST19JRChNRUdBTUlDUk8sIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUVHQU1JQ1JPX1NDUkFNXzUwMF9SQU0gWk9SUk9fSUQoTUVHQU1JQ1JPLCAweDA0LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfSU1UUk9OSUNTXzIgMHgxMDI4CisjZGVmaW5lIFpPUlJPX1BST0RfSU1UUk9OSUNTX0hVUlJJQ0FORV8yODAwXzMgWk9SUk9fSUQoSU1UUk9OSUNTXzIsIDB4MzksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSU1UUk9OSUNTX0hVUlJJQ0FORV8yODAwXzQgWk9SUk9fSUQoSU1UUk9OSUNTXzIsIDB4NTcsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0lORElWSURVQUxfQ09NUFVURVJTIDB4MTIxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9JTkRJVklEVUFMX0NPTVBVVEVSU19CVURESEEgWk9SUk9fSUQoSU5ESVZJRFVBTF9DT01QVVRFUlMsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSU5ESVZJRFVBTF9DT01QVVRFUlNfWF9TVVJGIFpPUlJPX0lEKElORElWSURVQUxfQ09NUFVURVJTLCAweDE3LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lORElWSURVQUxfQ09NUFVURVJTX0NBVFdFQVNFTCBaT1JST19JRChJTkRJVklEVUFMX0NPTVBVVEVSUywgMHgyQSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfS1VQS0VfMyAweDEyNDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfR09MRU1fSERfMzAwMCBaT1JST19JRChLVVBLRV8zLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9JVEggMHgxMzg4CisjZGVmaW5lIFpPUlJPX1BST0RfSVRIX0lTRE5fTUFTVEVSX0lJIFpPUlJPX0lEKElUSCwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfVk1DIDB4MTM4OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9WTUNfSVNETl9CTEFTVEVSX1oyIFpPUlJPX0lEKFZNQywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WTUNfSFlQRVJDT01fNCBaT1JST19JRChWTUMsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0lORk9STUFUSU9OIDB4MTU3QworI2RlZmluZSBaT1JST19QUk9EX0lORk9STUFUSU9OX0lTRE5fRU5HSU5FX0kgWk9SUk9fSUQoSU5GT1JNQVRJT04sIDB4NjQsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9WT1JURVggMHgyMDE3CisjZGVmaW5lIFpPUlJPX1BST0RfVk9SVEVYX0dPTERFTl9HQVRFXzgwMzg2U1ggWk9SUk9fSUQoVk9SVEVYLCAweDA3LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZPUlRFWF9HT0xERU5fR0FURV9SQU0gWk9SUk9fSUQoVk9SVEVYLCAweDA4LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZPUlRFWF9HT0xERU5fR0FURV84MDQ4NiBaT1JST19JRChWT1JURVgsIDB4MDksIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9FWFBBTlNJT05fU1lTVEVNUyAweDIwNjIKKyNkZWZpbmUgWk9SUk9fUFJPRF9FWFBBTlNJT05fU1lTVEVNU19EQVRBRkxZRVJfNDAwMFNYIFpPUlJPX0lEKEVYUEFOU0lPTl9TWVNURU1TLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0VYUEFOU0lPTl9TWVNURU1TX0RBVEFGTFlFUl80MDAwU1hfUkFNIFpPUlJPX0lEKEVYUEFOU0lPTl9TWVNURU1TLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9SRUFEWVNPRlQgMHgyMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1JFQURZU09GVF9BTUFYX0lJX0lWIFpPUlJPX0lEKFJFQURZU09GVCwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUEhBU0U1IDB4MjE0MAorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF9SQU0gWk9SUk9fSUQoUEhBU0U1LCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRCBaT1JST19JRChQSEFTRTUsIDB4MDIsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjIwX0lWIFpPUlJPX0lEKFBIQVNFNSwgMHgwNiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfRkFTVExBTkVfWjNfUkFNIFpPUlJPX0lEKFBIQVNFNSwgMHgwQSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfMTIzMF9JSV9GQVNUTEFORV9aM19DWUJFUlNDU0lfQ1lCRVJTVE9STTA2MCBaT1JST19JRChQSEFTRTUsIDB4MEIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzEyMjBfQ1lCRVJTVE9STSBaT1JST19JRChQSEFTRTUsIDB4MEMsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjMwIFpPUlJPX0lEKFBIQVNFNSwgMHgwRCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfMTIzMF9JVl8xMjYwIFpPUlJPX0lEKFBIQVNFNSwgMHgxMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfMjA2MCBaT1JST19JRChQSEFTRTUsIDB4MTgsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0NZQkVSU1RPUk1fTUtfSUkgWk9SUk9fSUQoUEhBU0U1LCAweDE5LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQ1lCRVJWSVNJT042NCBaT1JST19JRChQSEFTRTUsIDB4MjIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0NZQkVSVklTSU9ONjRfM0RfUFJPVE9UWVBFIFpPUlJPX0lEKFBIQVNFNSwgMHgzMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQ1lCRVJWSVNJT042NF8zRCBaT1JST19JRChQSEFTRTUsIDB4NDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0NZQkVSU1RPUk1fTUtfSUlJIFpPUlJPX0lEKFBIQVNFNSwgMHg2NCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzYwM0VfUExVUyBaT1JST19JRChQSEFTRTUsIDB4NmUsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0RQUyAweDIxNjkKKyNkZWZpbmUgWk9SUk9fUFJPRF9EUFNfUEVSU09OQUxfQU5JTUFUSU9OX1JFQ09SREVSIFpPUlJPX0lEKERQUywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVBPTExPXzIgMHgyMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19QUk9EX0FQT0xMT19BNjIwXzY4MDIwXzEgWk9SUk9fSUQoQVBPTExPXzIsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQVBPTExPX0E2MjBfNjgwMjBfMiBaT1JST19JRChBUE9MTE9fMiwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVBPTExPXzMgMHgyMjIyCisjZGVmaW5lIFpPUlJPX1BST0RfQVBPTExPX0FUX0FQT0xMTyBaT1JST19JRChBUE9MTE9fMywgMHgyMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfQVBPTExPXzEyMzBfMTI0MF8xMjYwXzIwMzBfNDA0MF80MDYwIFpPUlJPX0lEKEFQT0xMT18zLCAweDIzLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9QRVRTT0ZGX0xQIDB4MzhBNQorI2RlZmluZSBaT1JST19QUk9EX1BFVFNPRkZfTFBfREVMRklOQSBaT1JST19JRChQRVRTT0ZGX0xQLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BFVFNPRkZfTFBfREVMRklOQV9MSVRFIFpPUlJPX0lEKFBFVFNPRkZfTFAsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBaT1JST19NQU5VRl9VV0VfR0VSTEFDSCAweDNGRjcKKyNkZWZpbmUgWk9SUk9fUFJPRF9VV0VfR0VSTEFDSF9SQU1fUk9NIFpPUlJPX0lEKFVXRV9HRVJMQUNILCAweGQ0LCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9BQ1QgMHg0MjMxCisjZGVmaW5lIFpPUlJPX1BST0RfQUNUX1BSRUxVREUgWk9SUk9fSUQoQUNULCAweDAxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUFDUk9TWVNURU1TX0dFUk1BTlkgMHg0NzU0CisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX01BRVNUUk8gWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1ZMQUIgWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX01BRVNUUk9fUFJPIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDA1LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfUkVUSU5BIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDA2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19NVUxUSV9FVk9MVVRJT04gWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MDgsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1RPQ0NBVEEgWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MEMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1JFVElOQV9aMyBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgxMCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1ZMQUJfTU9USU9OIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDEyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19BTFRBSVMgWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MTMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX0ZBTENPTl8wNDAgWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4RkQsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTUJJVEVDIDB4Njc2NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfU0tJX1BFUklQSEVSQUxTIDB4ODAwMAorI2RlZmluZSBaT1JST19QUk9EX1NLSV9QRVJJUEhFUkFMU19NQVNUX0ZJUkVCQUxMIFpPUlJPX0lEKFNLSV9QRVJJUEhFUkFMUywgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TS0lfUEVSSVBIRVJBTFNfU0NTSV9EVUFMX1NFUklBTCBaT1JST19JRChTS0lfUEVSSVBIRVJBTFMsIDB4ODAsIDApCisjZGVmaW5lIFpPUlJPX01BTlVGX1JFSVNfV0FSRV8yIDB4QTlBRAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9SRUlTX1dBUkVfU0NBTl9LSU5HIFpPUlJPX0lEKFJFSVNfV0FSRV8yLCAweDExLCAwKQorI2RlZmluZSBaT1JST19NQU5VRl9DQU1FUk9OIDB4QUEwMQorI2RlZmluZSBaT1JST19QUk9EX0NBTUVST05fUEVSU09OQUxfQTQgWk9SUk9fSUQoQ0FNRVJPTiwgMHgxMCwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUkVJU19XQVJFIDB4QUExMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9SRUlTX1dBUkVfSEFORFlTQ0FOTkVSIFpPUlJPX0lEKFJFSVNfV0FSRSwgMHgxMSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUEhPRU5JWF8yIDB4QjVBOAorI2RlZmluZSBaT1JST19QUk9EX1BIT0VOSVhfU1Q1MDZfMiBaT1JST19JRChQSE9FTklYXzIsIDB4MjEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhPRU5JWF9TQ1NJXzIgWk9SUk9fSUQoUEhPRU5JWF8yLCAweDIyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWk9SUk9fUFJPRF9QSE9FTklYX1JBTV8yIFpPUlJPX0lEKFBIT0VOSVhfMiwgMHhCRSwgMCkKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NQklURUNfMiAweEMwMDgKKyNkZWZpbmUgWk9SUk9fUFJPRF9DT01CSVRFQ19IRCBaT1JST19JRChDT01CSVRFQ18yLCAweDJBLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NPTUJJVEVDX1NSQU0gWk9SUk9fSUQoQ09NQklURUNfMiwgMHgyQiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX01BTlVGX0hBQ0tFUiAweDA3REIKKyNkZWZpbmUgWk9SUk9fUFJPRF9HRU5FUkFMX1BST1RPVFlQRSBaT1JST19JRChIQUNLRVIsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSEFDS0VSX1NDU0kgWk9SUk9fSUQoSEFDS0VSLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1JFU09VUkNFX01BTkFHRU1FTlRfRk9SQ0VfUVVJQ0tORVRfUU4yMDAwIFpPUlJPX0lEKEhBQ0tFUiwgMHgwMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFpPUlJPX1BST0RfVkVDVE9SX0NPTk5FQ1RJT05fMiBaT1JST19JRChIQUNLRVIsIDB4RTAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVkVDVE9SX0NPTk5FQ1RJT05fMyBaT1JST19JRChIQUNLRVIsIDB4RTEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVkVDVE9SX0NPTk5FQ1RJT05fNCBaT1JST19JRChIQUNLRVIsIDB4RTIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVkVDVE9SX0NPTk5FQ1RJT05fNSBaT1JST19JRChIQUNLRVIsIDB4RTMsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9yZG1hL2liX3VzZXJfdmVyYnMuaCBiL2xpYmMva2VybmVsL3VhcGkvcmRtYS9pYl91c2VyX3ZlcmJzLmgKaW5kZXggZWU2NmM0NS4uZGQ5MzFkOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9yZG1hL2liX3VzZXJfdmVyYnMuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL3JkbWEvaWJfdXNlcl92ZXJicy5oCkBAIC0yMSw3NTQgKzIxLDg3MSBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjZGVmaW5lIElCX1VTRVJfVkVSQlNfQUJJX1ZFUlNJT04gNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUJfVVNFUl9WRVJCU19DTURfVEhSRVNIT0xEIDUwCiBlbnVtIHsKICBJQl9VU0VSX1ZFUkJTX0NNRF9HRVRfQ09OVEVYVCwKICBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9ERVZJQ0UsCi0gSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUE9SVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUE9SVCwKICBJQl9VU0VSX1ZFUkJTX0NNRF9BTExPQ19QRCwKICBJQl9VU0VSX1ZFUkJTX0NNRF9ERUFMTE9DX1BELAogIElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9BSCwKLSBJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfQUgsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9BSCwKICBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9BSCwKICBJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX0FILAogIElCX1VTRVJfVkVSQlNfQ01EX1JFR19NUiwKLSBJQl9VU0VSX1ZFUkJTX0NNRF9SRUdfU01SLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJQl9VU0VSX1ZFUkJTX0NNRF9SRUdfU01SLAogIElCX1VTRVJfVkVSQlNfQ01EX1JFUkVHX01SLAogIElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX01SLAogIElCX1VTRVJfVkVSQlNfQ01EX0RFUkVHX01SLAotIElCX1VTRVJfVkVSQlNfQ01EX0FMTE9DX01XLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJQl9VU0VSX1ZFUkJTX0NNRF9BTExPQ19NVywKICBJQl9VU0VSX1ZFUkJTX0NNRF9CSU5EX01XLAogIElCX1VTRVJfVkVSQlNfQ01EX0RFQUxMT0NfTVcsCiAgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX0NPTVBfQ0hBTk5FTCwKLSBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQ1EsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DUSwKICBJQl9VU0VSX1ZFUkJTX0NNRF9SRVNJWkVfQ1EsCiAgSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9DUSwKICBJQl9VU0VSX1ZFUkJTX0NNRF9QT0xMX0NRLAotIElCX1VTRVJfVkVSQlNfQ01EX1BFRUtfQ1EsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElCX1VTRVJfVkVSQlNfQ01EX1BFRUtfQ1EsCiAgSUJfVVNFUl9WRVJCU19DTURfUkVRX05PVElGWV9DUSwKICBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfUVAsCiAgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUVAsCi0gSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX1FQLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfUVAsCiAgSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9RUCwKICBJQl9VU0VSX1ZFUkJTX0NNRF9QT1NUX1NFTkQsCiAgSUJfVVNFUl9WRVJCU19DTURfUE9TVF9SRUNWLAotIElCX1VTRVJfVkVSQlNfQ01EX0FUVEFDSF9NQ0FTVCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgSUJfVVNFUl9WRVJCU19DTURfQVRUQUNIX01DQVNULAogIElCX1VTRVJfVkVSQlNfQ01EX0RFVEFDSF9NQ0FTVCwKICBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfU1JRLAogIElCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9TUlEsCi0gSUJfVVNFUl9WRVJCU19DTURfUVVFUllfU1JRLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9TUlEsCiAgSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9TUlEsCiAgSUJfVVNFUl9WRVJCU19DTURfUE9TVF9TUlFfUkVDViwKICBJQl9VU0VSX1ZFUkJTX0NNRF9PUEVOX1hSQ0QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElCX1VTRVJfVkVSQlNfQ01EX0NMT1NFX1hSQ0QsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9YU1JRLAotIElCX1VTRVJfVkVSQlNfQ01EX09QRU5fUVAKKyBJQl9VU0VSX1ZFUkJTX0NNRF9PUEVOX1FQLAogfTsKLXN0cnVjdCBpYl91dmVyYnNfYXN5bmNfZXZlbnRfZGVzYyB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CisgSUJfVVNFUl9WRVJCU19FWF9DTURfQ1JFQVRFX0ZMT1cgPSBJQl9VU0VSX1ZFUkJTX0NNRF9USFJFU0hPTEQsCisgSUJfVVNFUl9WRVJCU19FWF9DTURfREVTVFJPWV9GTE9XCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpYl91dmVyYnNfYXN5bmNfZXZlbnRfZGVzYyB7CiAgX191NjQgZWxlbWVudDsKICBfX3UzMiBldmVudF90eXBlOwogIF9fdTMyIHJlc2VydmVkOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IGliX3V2ZXJic19jb21wX2V2ZW50X2Rlc2MgewogIF9fdTY0IGNxX2hhbmRsZTsKIH07Ci1zdHJ1Y3QgaWJfdXZlcmJzX2NtZF9oZHIgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUJfVVNFUl9WRVJCU19DTURfQ09NTUFORF9NQVNLIDB4ZmYKKyNkZWZpbmUgSUJfVVNFUl9WRVJCU19DTURfRkxBR1NfTUFTSyAweGZmMDAwMDAwdQorI2RlZmluZSBJQl9VU0VSX1ZFUkJTX0NNRF9GTEFHU19TSElGVCAyNAorI2RlZmluZSBJQl9VU0VSX1ZFUkJTX0NNRF9GTEFHX0VYVEVOREVEIDB4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaWJfdXZlcmJzX2NtZF9oZHIgewogIF9fdTMyIGNvbW1hbmQ7CiAgX191MTYgaW5fd29yZHM7CiAgX191MTYgb3V0X3dvcmRzOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IGliX3V2ZXJic19leF9jbWRfaGRyIHsKKyBfX3U2NCByZXNwb25zZTsKKyBfX3UxNiBwcm92aWRlcl9pbl93b3JkczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgcHJvdmlkZXJfb3V0X3dvcmRzOworIF9fdTMyIGNtZF9oZHJfcmVzZXJ2ZWQ7Cit9Owogc3RydWN0IGliX3V2ZXJic19nZXRfY29udGV4dCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlc3BvbnNlOwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX2dldF9jb250ZXh0X3Jlc3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhc3luY19mZDsKICBfX3UzMiBudW1fY29tcF92ZWN0b3JzOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X2RldmljZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlc3BvbnNlOwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X2RldmljZV9yZXNwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZndfdmVyOwogIF9fYmU2NCBub2RlX2d1aWQ7CiAgX19iZTY0IHN5c19pbWFnZV9ndWlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBtYXhfbXJfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcGFnZV9zaXplX2NhcDsKICBfX3UzMiB2ZW5kb3JfaWQ7CiAgX191MzIgdmVuZG9yX3BhcnRfaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGh3X3ZlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3FwOwogIF9fdTMyIG1heF9xcF93cjsKICBfX3UzMiBkZXZpY2VfY2FwX2ZsYWdzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfc2dlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfc2dlX3JkOwogIF9fdTMyIG1heF9jcTsKICBfX3UzMiBtYXhfY3FlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfbXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9wZDsKICBfX3UzMiBtYXhfcXBfcmRfYXRvbTsKICBfX3UzMiBtYXhfZWVfcmRfYXRvbTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3Jlc19yZF9hdG9tOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfcXBfaW5pdF9yZF9hdG9tOwogIF9fdTMyIG1heF9lZV9pbml0X3JkX2F0b207CiAgX191MzIgYXRvbWljX2NhcDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X2VlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfcmRkOwogIF9fdTMyIG1heF9tdzsKICBfX3UzMiBtYXhfcmF3X2lwdjZfcXA7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9yYXdfZXRoeV9xcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X21jYXN0X2dycDsKICBfX3UzMiBtYXhfbWNhc3RfcXBfYXR0YWNoOwogIF9fdTMyIG1heF90b3RhbF9tY2FzdF9xcF9hdHRhY2g7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9haDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X2ZtcjsKICBfX3UzMiBtYXhfbWFwX3Blcl9mbXI7CiAgX191MzIgbWF4X3NycTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3NycV93cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3NycV9zZ2U7CiAgX191MTYgbWF4X3BrZXlzOwogIF9fdTggbG9jYWxfY2FfYWNrX2RlbGF5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHBoeXNfcG9ydF9jbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcmVzZXJ2ZWRbNF07CiB9Owogc3RydWN0IGliX3V2ZXJic19xdWVyeV9wb3J0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzcG9uc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcG9ydF9udW07CiAgX191OCByZXNlcnZlZFs3XTsKICBfX3U2NCBkcml2ZXJfZGF0YVswXTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfcXVlcnlfcG9ydF9yZXNwIHsKICBfX3UzMiBwb3J0X2NhcF9mbGFnczsKICBfX3UzMiBtYXhfbXNnX3N6OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBiYWRfcGtleV9jbnRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxa2V5X3Zpb2xfY250cjsKICBfX3UzMiBnaWRfdGJsX2xlbjsKICBfX3UxNiBwa2V5X3RibF9sZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGxpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgc21fbGlkOwogIF9fdTggc3RhdGU7CiAgX191OCBtYXhfbXR1OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGFjdGl2ZV9tdHU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbG1jOwogIF9fdTggbWF4X3ZsX251bTsKICBfX3U4IHNtX3NsOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHN1Ym5ldF90aW1lb3V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGluaXRfdHlwZV9yZXBseTsKICBfX3U4IGFjdGl2ZV93aWR0aDsKICBfX3U4IGFjdGl2ZV9zcGVlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwaHlzX3N0YXRlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGxpbmtfbGF5ZXI7CiAgX191OCByZXNlcnZlZFsyXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19hbGxvY19wZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlc3BvbnNlOwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX2FsbG9jX3BkX3Jlc3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwZF9oYW5kbGU7CiB9Owogc3RydWN0IGliX3V2ZXJic19kZWFsbG9jX3BkIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGRfaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX29wZW5feHJjZCB7CiAgX191NjQgcmVzcG9uc2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvZmxhZ3M7CiAgX191NjQgZHJpdmVyX2RhdGFbMF07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfb3Blbl94cmNkX3Jlc3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB4cmNkX2hhbmRsZTsKIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2Nsb3NlX3hyY2QgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB4cmNkX2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGliX3V2ZXJic19yZWdfbXIgewogIF9fdTY0IHJlc3BvbnNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBzdGFydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbGVuZ3RoOwogIF9fdTY0IGhjYV92YTsKICBfX3UzMiBwZF9oYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFjY2Vzc19mbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZHJpdmVyX2RhdGFbMF07CiB9Owogc3RydWN0IGliX3V2ZXJic19yZWdfbXJfcmVzcCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1yX2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbGtleTsKICBfX3UzMiBya2V5OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX2RlcmVnX21yIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbXJfaGFuZGxlOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfYWxsb2NfbXcgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZXNwb25zZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGRfaGFuZGxlOwogIF9fdTggbXdfdHlwZTsKICBfX3U4IHJlc2VydmVkWzNdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19hbGxvY19td19yZXNwIHsKICBfX3UzMiBtd19oYW5kbGU7CiAgX191MzIgcmtleTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfZGVhbGxvY19tdyB7CiAgX191MzIgbXdfaGFuZGxlOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9jb21wX2NoYW5uZWwgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZXNwb25zZTsKIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9jb21wX2NoYW5uZWxfcmVzcCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9jcSB7CiAgX191NjQgcmVzcG9uc2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHVzZXJfaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjcWU7CiAgX191MzIgY29tcF92ZWN0b3I7CiAgX19zMzIgY29tcF9jaGFubmVsOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZHJpdmVyX2RhdGFbMF07CiB9Owogc3RydWN0IGliX3V2ZXJic19jcmVhdGVfY3FfcmVzcCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNxX2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY3FlOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfcmVzaXplX2NxIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzcG9uc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNxX2hhbmRsZTsKICBfX3UzMiBjcWU7CiAgX191NjQgZHJpdmVyX2RhdGFbMF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX3Jlc2l6ZV9jcV9yZXNwIHsKICBfX3UzMiBjcWU7CiAgX191MzIgcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX3BvbGxfY3EgewogIF9fdTY0IHJlc3BvbnNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjcV9oYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG5lOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfd2MgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB3cl9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3RhdHVzOwogIF9fdTMyIG9wY29kZTsKICBfX3UzMiB2ZW5kb3JfZXJyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBieXRlX2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIF9fdTMyIGltbV9kYXRhOwogIF9fdTMyIGludmFsaWRhdGVfcmtleTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcXBfbnVtOwogIF9fdTMyIHNyY19xcDsKICBfX3UzMiB3Y19mbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgcGtleV9pbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgc2xpZDsKICBfX3U4IHNsOwogIF9fdTggZGxpZF9wYXRoX2JpdHM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcG9ydF9udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcmVzZXJ2ZWQ7CiB9Owogc3RydWN0IGliX3V2ZXJic19wb2xsX2NxX3Jlc3AgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWQ7CiAgc3RydWN0IGliX3V2ZXJic193YyB3Y1swXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19yZXFfbm90aWZ5X2NxIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY3FfaGFuZGxlOwogIF9fdTMyIHNvbGljaXRlZF9vbmx5OwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfY3EgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZXNwb25zZTsKICBfX3UzMiBjcV9oYW5kbGU7CiAgX191MzIgcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfY3FfcmVzcCB7CiAgX191MzIgY29tcF9ldmVudHNfcmVwb3J0ZWQ7CiAgX191MzIgYXN5bmNfZXZlbnRzX3JlcG9ydGVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19nbG9iYWxfcm91dGUgewogIF9fdTggZGdpZFsxNl07CiAgX191MzIgZmxvd19sYWJlbDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBzZ2lkX2luZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGhvcF9saW1pdDsKICBfX3U4IHRyYWZmaWNfY2xhc3M7CiAgX191OCByZXNlcnZlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfYWhfYXR0ciB7CiAgc3RydWN0IGliX3V2ZXJic19nbG9iYWxfcm91dGUgZ3JoOwogIF9fdTE2IGRsaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc2w7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc3JjX3BhdGhfYml0czsKICBfX3U4IHN0YXRpY19yYXRlOwogIF9fdTggaXNfZ2xvYmFsOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHBvcnRfbnVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJlc2VydmVkOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfcXBfYXR0ciB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHFwX2F0dHJfbWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcXBfc3RhdGU7CiAgX191MzIgY3VyX3FwX3N0YXRlOwogIF9fdTMyIHBhdGhfbXR1OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwYXRoX21pZ19zdGF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcWtleTsKICBfX3UzMiBycV9wc247CiAgX191MzIgc3FfcHNuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBkZXN0X3FwX251bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcXBfYWNjZXNzX2ZsYWdzOwogIHN0cnVjdCBpYl91dmVyYnNfYWhfYXR0ciBhaF9hdHRyOwogIHN0cnVjdCBpYl91dmVyYnNfYWhfYXR0ciBhbHRfYWhfYXR0cjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3NlbmRfd3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9yZWN2X3dyOwogIF9fdTMyIG1heF9zZW5kX3NnZTsKICBfX3UzMiBtYXhfcmVjdl9zZ2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9pbmxpbmVfZGF0YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgcGtleV9pbmRleDsKICBfX3UxNiBhbHRfcGtleV9pbmRleDsKICBfX3U4IGVuX3NxZF9hc3luY19ub3RpZnk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc3FfZHJhaW5pbmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbWF4X3JkX2F0b21pYzsKICBfX3U4IG1heF9kZXN0X3JkX2F0b21pYzsKICBfX3U4IG1pbl9ybnJfdGltZXI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcG9ydF9udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdGltZW91dDsKICBfX3U4IHJldHJ5X2NudDsKICBfX3U4IHJucl9yZXRyeTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBhbHRfcG9ydF9udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYWx0X3RpbWVvdXQ7CiAgX191OCByZXNlcnZlZFs1XTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19jcmVhdGVfcXAgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZXNwb25zZTsKICBfX3U2NCB1c2VyX2hhbmRsZTsKICBfX3UzMiBwZF9oYW5kbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNlbmRfY3FfaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZWN2X2NxX2hhbmRsZTsKICBfX3UzMiBzcnFfaGFuZGxlOwogIF9fdTMyIG1heF9zZW5kX3dyOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfcmVjdl93cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3NlbmRfc2dlOwogIF9fdTMyIG1heF9yZWN2X3NnZTsKICBfX3UzMiBtYXhfaW5saW5lX2RhdGE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc3Ffc2lnX2FsbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBxcF90eXBlOwogIF9fdTggaXNfc3JxOwogIF9fdTggcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX29wZW5fcXAgewogIF9fdTY0IHJlc3BvbnNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB1c2VyX2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGRfaGFuZGxlOwogIF9fdTMyIHFwbjsKICBfX3U4IHFwX3R5cGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcmVzZXJ2ZWRbN107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3FwX3Jlc3AgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxcF9oYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHFwbjsKICBfX3UzMiBtYXhfc2VuZF93cjsKICBfX3UzMiBtYXhfcmVjdl93cjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3NlbmRfc2dlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfcmVjdl9zZ2U7CiAgX191MzIgbWF4X2lubGluZV9kYXRhOwogIF9fdTMyIHJlc2VydmVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19xcF9kZXN0IHsKICBfX3U4IGRnaWRbMTZdOwogIF9fdTMyIGZsb3dfbGFiZWw7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGRsaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHJlc2VydmVkOwogIF9fdTggc2dpZF9pbmRleDsKICBfX3U4IGhvcF9saW1pdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCB0cmFmZmljX2NsYXNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNsOwogIF9fdTggc3JjX3BhdGhfYml0czsKICBfX3U4IHN0YXRpY19yYXRlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGlzX2dsb2JhbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwb3J0X251bTsKIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X3FwIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzcG9uc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHFwX2hhbmRsZTsKICBfX3UzMiBhdHRyX21hc2s7CiAgX191NjQgZHJpdmVyX2RhdGFbMF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X3FwX3Jlc3AgewogIHN0cnVjdCBpYl91dmVyYnNfcXBfZGVzdCBkZXN0OwogIHN0cnVjdCBpYl91dmVyYnNfcXBfZGVzdCBhbHRfZGVzdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3NlbmRfd3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9yZWN2X3dyOwogIF9fdTMyIG1heF9zZW5kX3NnZTsKICBfX3UzMiBtYXhfcmVjdl9zZ2U7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9pbmxpbmVfZGF0YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcWtleTsKICBfX3UzMiBycV9wc247CiAgX191MzIgc3FfcHNuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBkZXN0X3FwX251bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcXBfYWNjZXNzX2ZsYWdzOwogIF9fdTE2IHBrZXlfaW5kZXg7CiAgX191MTYgYWx0X3BrZXlfaW5kZXg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcXBfc3RhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggY3VyX3FwX3N0YXRlOwogIF9fdTggcGF0aF9tdHU7CiAgX191OCBwYXRoX21pZ19zdGF0ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBzcV9kcmFpbmluZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBtYXhfcmRfYXRvbWljOwogIF9fdTggbWF4X2Rlc3RfcmRfYXRvbWljOwogIF9fdTggbWluX3Jucl90aW1lcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwb3J0X251bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCB0aW1lb3V0OwogIF9fdTggcmV0cnlfY250OwogIF9fdTggcm5yX3JldHJ5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGFsdF9wb3J0X251bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBhbHRfdGltZW91dDsKICBfX3U4IHNxX3NpZ19hbGw7CiAgX191OCByZXNlcnZlZFs1XTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZHJpdmVyX2RhdGFbMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpYl91dmVyYnNfbW9kaWZ5X3FwIHsKICBzdHJ1Y3QgaWJfdXZlcmJzX3FwX2Rlc3QgZGVzdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGliX3V2ZXJic19xcF9kZXN0IGFsdF9kZXN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxcF9oYW5kbGU7CiAgX191MzIgYXR0cl9tYXNrOwogIF9fdTMyIHFrZXk7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJxX3BzbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3FfcHNuOwogIF9fdTMyIGRlc3RfcXBfbnVtOwogIF9fdTMyIHFwX2FjY2Vzc19mbGFnczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgcGtleV9pbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgYWx0X3BrZXlfaW5kZXg7CiAgX191OCBxcF9zdGF0ZTsKICBfX3U4IGN1cl9xcF9zdGF0ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwYXRoX210dTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwYXRoX21pZ19zdGF0ZTsKICBfX3U4IGVuX3NxZF9hc3luY19ub3RpZnk7CiAgX191OCBtYXhfcmRfYXRvbWljOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG1heF9kZXN0X3JkX2F0b21pYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBtaW5fcm5yX3RpbWVyOwogIF9fdTggcG9ydF9udW07CiAgX191OCB0aW1lb3V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJldHJ5X2NudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBybnJfcmV0cnk7CiAgX191OCBhbHRfcG9ydF9udW07CiAgX191OCBhbHRfdGltZW91dDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCByZXNlcnZlZFsyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZHJpdmVyX2RhdGFbMF07CiB9Owogc3RydWN0IGliX3V2ZXJic19tb2RpZnlfcXBfcmVzcCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX2Rlc3Ryb3lfcXAgewogIF9fdTY0IHJlc3BvbnNlOwogIF9fdTMyIHFwX2hhbmRsZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpYl91dmVyYnNfZGVzdHJveV9xcF9yZXNwIHsKICBfX3UzMiBldmVudHNfcmVwb3J0ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX3NnZSB7CiAgX191NjQgYWRkcjsKICBfX3UzMiBsZW5ndGg7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxrZXk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpYl91dmVyYnNfc2VuZF93ciB7CiAgX191NjQgd3JfaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG51bV9zZ2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG9wY29kZTsKICBfX3UzMiBzZW5kX2ZsYWdzOwogIHVuaW9uIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW1tX2RhdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGludmFsaWRhdGVfcmtleTsKICB9IGV4OwogIHVuaW9uIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVtb3RlX2FkZHI7CiAgX191MzIgcmtleTsKICBfX3UzMiByZXNlcnZlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSByZG1hOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIF9fdTY0IHJlbW90ZV9hZGRyOwogIF9fdTY0IGNvbXBhcmVfYWRkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBzd2FwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBya2V5OwogIF9fdTMyIHJlc2VydmVkOwogIH0gYXRvbWljOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhaDsKICBfX3UzMiByZW1vdGVfcXBuOwogIF9fdTMyIHJlbW90ZV9xa2V5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSB1ZDsKICB9IHdyOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX3Bvc3Rfc2VuZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlc3BvbnNlOwogIF9fdTMyIHFwX2hhbmRsZTsKICBfX3UzMiB3cl9jb3VudDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc2dlX2NvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3cWVfc2l6ZTsKICBzdHJ1Y3QgaWJfdXZlcmJzX3NlbmRfd3Igc2VuZF93clswXTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19wb3N0X3NlbmRfcmVzcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJhZF93cjsKIH07CiBzdHJ1Y3QgaWJfdXZlcmJzX3JlY3Zfd3IgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB3cl9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbnVtX3NnZTsKICBfX3UzMiByZXNlcnZlZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19wb3N0X3JlY3YgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZXNwb25zZTsKICBfX3UzMiBxcF9oYW5kbGU7CiAgX191MzIgd3JfY291bnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNnZV9jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd3FlX3NpemU7CiAgc3RydWN0IGliX3V2ZXJic19yZWN2X3dyIHJlY3Zfd3JbMF07CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfcG9zdF9yZWN2X3Jlc3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBiYWRfd3I7CiB9Owogc3RydWN0IGliX3V2ZXJic19wb3N0X3NycV9yZWN2IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzcG9uc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNycV9oYW5kbGU7CiAgX191MzIgd3JfY291bnQ7CiAgX191MzIgc2dlX2NvdW50OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3cWVfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGliX3V2ZXJic19yZWN2X3dyIHJlY3ZbMF07CiB9Owogc3RydWN0IGliX3V2ZXJic19wb3N0X3NycV9yZWN2X3Jlc3AgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBiYWRfd3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX2FoIHsKICBfX3U2NCByZXNwb25zZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdXNlcl9oYW5kbGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBkX2hhbmRsZTsKICBfX3UzMiByZXNlcnZlZDsKICBzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgYXR0cjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX2FoX3Jlc3AgewogIF9fdTMyIGFoX2hhbmRsZTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19kZXN0cm95X2FoIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYWhfaGFuZGxlOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfYXR0YWNoX21jYXN0IHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBnaWRbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxcF9oYW5kbGU7CiAgX191MTYgbWxpZDsKICBfX3UxNiByZXNlcnZlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZHJpdmVyX2RhdGFbMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpYl91dmVyYnNfZGV0YWNoX21jYXN0IHsKICBfX3U4IGdpZFsxNl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHFwX2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgbWxpZDsKICBfX3UxNiByZXNlcnZlZDsKICBfX3U2NCBkcml2ZXJfZGF0YVswXTsKK307CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGliX3V2ZXJic19mbG93X3NwZWNfaGRyIHsKKyBfX3UzMiB0eXBlOworIF9fdTE2IHNpemU7CisgX191MTYgcmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGZsb3dfc3BlY19kYXRhWzBdOworfTsKK3N0cnVjdCBpYl91dmVyYnNfZmxvd19ldGhfZmlsdGVyIHsKKyBfX3U4IGRzdF9tYWNbNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggc3JjX21hY1s2XTsKKyBfX2JlMTYgZXRoZXJfdHlwZTsKKyBfX2JlMTYgdmxhbl90YWc7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpYl91dmVyYnNfZmxvd19zcGVjX2V0aCB7CisgdW5pb24geworIHN0cnVjdCBpYl91dmVyYnNfZmxvd19zcGVjX2hkciBoZHI7Cisgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdHlwZTsKKyBfX3UxNiBzaXplOworIF9fdTE2IHJlc2VydmVkOworIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIH07Cisgc3RydWN0IGliX3V2ZXJic19mbG93X2V0aF9maWx0ZXIgdmFsOworIHN0cnVjdCBpYl91dmVyYnNfZmxvd19ldGhfZmlsdGVyIG1hc2s7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpYl91dmVyYnNfZmxvd19pcHY0X2ZpbHRlciB7CisgX19iZTMyIHNyY19pcDsKKyBfX2JlMzIgZHN0X2lwOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfc3BlY19pcHY0IHsKKyB1bmlvbiB7Cisgc3RydWN0IGliX3V2ZXJic19mbG93X3NwZWNfaGRyIGhkcjsKKyBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0eXBlOworIF9fdTE2IHNpemU7CisgX191MTYgcmVzZXJ2ZWQ7CisgfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfTsKKyBzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfaXB2NF9maWx0ZXIgdmFsOworIHN0cnVjdCBpYl91dmVyYnNfZmxvd19pcHY0X2ZpbHRlciBtYXNrOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfdGNwX3VkcF9maWx0ZXIgeworIF9fYmUxNiBkc3RfcG9ydDsKKyBfX2JlMTYgc3JjX3BvcnQ7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpYl91dmVyYnNfZmxvd19zcGVjX3RjcF91ZHAgeworIHVuaW9uIHsKKyBzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfc3BlY19oZHIgaGRyOworIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHR5cGU7CisgX191MTYgc2l6ZTsKKyBfX3UxNiByZXNlcnZlZDsKKyB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9OworIHN0cnVjdCBpYl91dmVyYnNfZmxvd190Y3BfdWRwX2ZpbHRlciB2YWw7Cisgc3RydWN0IGliX3V2ZXJic19mbG93X3RjcF91ZHBfZmlsdGVyIG1hc2s7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpYl91dmVyYnNfZmxvd19hdHRyIHsKKyBfX3UzMiB0eXBlOworIF9fdTE2IHNpemU7CisgX191MTYgcHJpb3JpdHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggbnVtX29mX3NwZWNzOworIF9fdTggcmVzZXJ2ZWRbMl07CisgX191OCBwb3J0OworIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfc3BlY19oZHIgZmxvd19zcGVjc1swXTsKK307CitzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9mbG93IHsKKyBfX3UzMiBjb21wX21hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHFwX2hhbmRsZTsKKyBzdHJ1Y3QgaWJfdXZlcmJzX2Zsb3dfYXR0ciBmbG93X2F0dHI7Cit9Oworc3RydWN0IGliX3V2ZXJic19jcmVhdGVfZmxvd19yZXNwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgY29tcF9tYXNrOworIF9fdTMyIGZsb3dfaGFuZGxlOworfTsKK3N0cnVjdCBpYl91dmVyYnNfZGVzdHJveV9mbG93IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgY29tcF9tYXNrOworIF9fdTMyIGZsb3dfaGFuZGxlOwogfTsKIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3NycSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJlc3BvbnNlOwogIF9fdTY0IHVzZXJfaGFuZGxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwZF9oYW5kbGU7CiAgX191MzIgbWF4X3dyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfc2dlOwogIF9fdTMyIHNycV9saW1pdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZHJpdmVyX2RhdGFbMF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3hzcnEgewogIF9fdTY0IHJlc3BvbnNlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB1c2VyX2hhbmRsZTsKICBfX3UzMiBzcnFfdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGRfaGFuZGxlOwogIF9fdTMyIG1heF93cjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4X3NnZTsKICBfX3UzMiBzcnFfbGltaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkOwogIF9fdTMyIHhyY2RfaGFuZGxlOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjcV9oYW5kbGU7CiAgX191NjQgZHJpdmVyX2RhdGFbMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3NycV9yZXNwIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3JxX2hhbmRsZTsKICBfX3UzMiBtYXhfd3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9zZ2U7CiAgX191MzIgc3JxbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IGliX3V2ZXJic19tb2RpZnlfc3JxIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3JxX2hhbmRsZTsKICBfX3UzMiBhdHRyX21hc2s7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF93cjsKICBfX3UzMiBzcnFfbGltaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X3NycSB7CiAgX191NjQgcmVzcG9uc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNycV9oYW5kbGU7CiAgX191MzIgcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X3NycV9yZXNwIHsKICBfX3UzMiBtYXhfd3I7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1heF9zZ2U7CiAgX191MzIgc3JxX2xpbWl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGliX3V2ZXJic19kZXN0cm95X3NycSB7CiAgX191NjQgcmVzcG9uc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNycV9oYW5kbGU7CiAgX191MzIgcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBpYl91dmVyYnNfZGVzdHJveV9zcnFfcmVzcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGV2ZW50c19yZXBvcnRlZDsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL3JkbWEvcmRtYV91c2VyX2NtLmggYi9saWJjL2tlcm5lbC91YXBpL3JkbWEvcmRtYV91c2VyX2NtLmgKaW5kZXggN2FiNGNmMC4uNzRlNWEwNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9yZG1hL3JkbWFfdXNlcl9jbS5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvcmRtYS9yZG1hX3VzZXJfY20uaApAQCAtMjksOSArMjksOSBAQAogZW51bSB7CiAgUkRNQV9VU0VSX0NNX0NNRF9DUkVBVEVfSUQsCiAgUkRNQV9VU0VSX0NNX0NNRF9ERVNUUk9ZX0lELAotIFJETUFfVVNFUl9DTV9DTURfQklORF9BRERSLAorIFJETUFfVVNFUl9DTV9DTURfQklORF9JUCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0gUkRNQV9VU0VSX0NNX0NNRF9SRVNPTFZFX0FERFIsCisgUkRNQV9VU0VSX0NNX0NNRF9SRVNPTFZFX0lQLAogIFJETUFfVVNFUl9DTV9DTURfUkVTT0xWRV9ST1VURSwKICBSRE1BX1VTRVJfQ01fQ01EX1FVRVJZX1JPVVRFLAogIFJETUFfVVNFUl9DTV9DTURfQ09OTkVDVCwKQEAgLTQ3LDkgKzQ3LDE0IEBACiAgUkRNQV9VU0VSX0NNX0NNRF9TRVRfT1BUSU9OLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSRE1BX1VTRVJfQ01fQ01EX05PVElGWSwKLSBSRE1BX1VTRVJfQ01fQ01EX0pPSU5fTUNBU1QsCisgUkRNQV9VU0VSX0NNX0NNRF9KT0lOX0lQX01DQVNULAogIFJETUFfVVNFUl9DTV9DTURfTEVBVkVfTUNBU1QsCi0gUkRNQV9VU0VSX0NNX0NNRF9NSUdSQVRFX0lECisgUkRNQV9VU0VSX0NNX0NNRF9NSUdSQVRFX0lELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBSRE1BX1VTRVJfQ01fQ01EX1FVRVJZLAorIFJETUFfVVNFUl9DTV9DTURfQklORCwKKyBSRE1BX1VTRVJfQ01fQ01EX1JFU09MVkVfQUREUiwKKyBSRE1BX1VTRVJfQ01fQ01EX0pPSU5fTUNBU1QKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHJkbWFfdWNtX2NtZF9oZHIgewpAQCAtODEsMjkgKzg2LDU0IEBACiAgX191MzIgZXZlbnRzX3JlcG9ydGVkOwogfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi1zdHJ1Y3QgcmRtYV91Y21fYmluZF9hZGRyIHsKK3N0cnVjdCByZG1hX3VjbV9iaW5kX2lwIHsKICBfX3U2NCByZXNwb25zZTsKICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CiAgX191MzIgaWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLXN0cnVjdCByZG1hX3VjbV9yZXNvbHZlX2FkZHIgeworc3RydWN0IHJkbWFfdWNtX2JpbmQgeworIF9fdTMyIGlkOworIF9fdTE2IGFkZHJfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgcmVzZXJ2ZWQ7Cisgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjsKK307CitzdHJ1Y3QgcmRtYV91Y21fcmVzb2x2ZV9pcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjX2FkZHI7CiAgc3RydWN0IHNvY2thZGRyX2luNiBkc3RfYWRkcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CiAgX191MzIgdGltZW91dF9tczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IHJkbWFfdWNtX3Jlc29sdmVfYWRkciB7CisgX191MzIgaWQ7CisgX191MzIgdGltZW91dF9tczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgc3JjX3NpemU7CisgX191MTYgZHN0X3NpemU7CisgX191MzIgcmVzZXJ2ZWQ7Cisgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3JjX2FkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGRzdF9hZGRyOwogfTsKIHN0cnVjdCByZG1hX3VjbV9yZXNvbHZlX3JvdXRlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRpbWVvdXRfbXM7CiB9Owotc3RydWN0IHJkbWFfdWNtX3F1ZXJ5X3JvdXRlIHsKK2VudW0geworIFJETUFfVVNFUl9DTV9RVUVSWV9BRERSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBSRE1BX1VTRVJfQ01fUVVFUllfUEFUSCwKKyBSRE1BX1VTRVJfQ01fUVVFUllfR0lECit9Oworc3RydWN0IHJkbWFfdWNtX3F1ZXJ5IHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgcmVzcG9uc2U7CiAgX191MzIgaWQ7Ci0gX191MzIgcmVzZXJ2ZWQ7CisgX191MzIgb3B0aW9uOwogfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmRtYV91Y21fcXVlcnlfcm91dGVfcmVzcCB7CkBAIC0xMTcsMTI3ICsxNDcsMTU1IEBACiAgX191OCByZXNlcnZlZFszXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Oworc3RydWN0IHJkbWFfdWNtX3F1ZXJ5X2FkZHJfcmVzcCB7CisgX191NjQgbm9kZV9ndWlkOworIF9fdTggcG9ydF9udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggcmVzZXJ2ZWQ7CisgX191MTYgcGtleTsKKyBfX3UxNiBzcmNfc2l6ZTsKKyBfX3UxNiBkc3Rfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3JjX2FkZHI7Cisgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZHN0X2FkZHI7Cit9Oworc3RydWN0IHJkbWFfdWNtX3F1ZXJ5X3BhdGhfcmVzcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG51bV9wYXRoczsKKyBfX3UzMiByZXNlcnZlZDsKKyBzdHJ1Y3QgaWJfcGF0aF9yZWNfZGF0YSBwYXRoX2RhdGFbMF07Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByZG1hX3VjbV9jb25uX3BhcmFtIHsKICBfX3UzMiBxcF9udW07Ci0gX191MzIgcmVzZXJ2ZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHFrZXk7CiAgX191OCBwcml2YXRlX2RhdGFbUkRNQV9NQVhfUFJJVkFURV9EQVRBXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwcml2YXRlX2RhdGFfbGVuOwogIF9fdTggc3JxOwogIF9fdTggcmVzcG9uZGVyX3Jlc291cmNlczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBpbml0aWF0b3JfZGVwdGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZmxvd19jb250cm9sOwogIF9fdTggcmV0cnlfY291bnQ7CiAgX191OCBybnJfcmV0cnlfY291bnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdmFsaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCByZG1hX3VjbV91ZF9wYXJhbSB7CiAgX191MzIgcXBfbnVtOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBxa2V5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaWJfdXZlcmJzX2FoX2F0dHIgYWhfYXR0cjsKICBfX3U4IHByaXZhdGVfZGF0YVtSRE1BX01BWF9QUklWQVRFX0RBVEFdOwogIF9fdTggcHJpdmF0ZV9kYXRhX2xlbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCByZXNlcnZlZFs3XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9Owogc3RydWN0IHJkbWFfdWNtX2Nvbm5lY3QgewogIHN0cnVjdCByZG1hX3VjbV9jb25uX3BhcmFtIGNvbm5fcGFyYW07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZDsKIH07CiBzdHJ1Y3QgcmRtYV91Y21fbGlzdGVuIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJhY2tsb2c7CiB9Owogc3RydWN0IHJkbWFfdWNtX2FjY2VwdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHVpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHJkbWFfdWNtX2Nvbm5fcGFyYW0gY29ubl9wYXJhbTsKICBfX3UzMiBpZDsKICBfX3UzMiByZXNlcnZlZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByZG1hX3VjbV9yZWplY3QgewogIF9fdTMyIGlkOwogIF9fdTggcHJpdmF0ZV9kYXRhX2xlbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCByZXNlcnZlZFszXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwcml2YXRlX2RhdGFbUkRNQV9NQVhfUFJJVkFURV9EQVRBXTsKIH07CiBzdHJ1Y3QgcmRtYV91Y21fZGlzY29ubmVjdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgcmRtYV91Y21faW5pdF9xcF9hdHRyIHsKICBfX3U2NCByZXNwb25zZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHFwX3N0YXRlOwogfTsKIHN0cnVjdCByZG1hX3VjbV9ub3RpZnkgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZXZlbnQ7CiB9Owotc3RydWN0IHJkbWFfdWNtX2pvaW5fbWNhc3QgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCByZG1hX3VjbV9qb2luX2lwX21jYXN0IHsKICBfX3U2NCByZXNwb25zZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgdWlkOwogIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKICBfX3UzMiBpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCByZG1hX3VjbV9qb2luX21jYXN0IHsKKyBfX3U2NCByZXNwb25zZTsKKyBfX3U2NCB1aWQ7CisgX191MzIgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTE2IGFkZHJfc2l6ZTsKKyBfX3UxNiByZXNlcnZlZDsKKyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmRtYV91Y21fZ2V0X2V2ZW50IHsKICBfX3U2NCByZXNwb25zZTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHJkbWFfdWNtX2V2ZW50X3Jlc3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB1aWQ7CiAgX191MzIgaWQ7CiAgX191MzIgZXZlbnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHN0YXR1czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHN0cnVjdCByZG1hX3VjbV9jb25uX3BhcmFtIGNvbm47CiAgc3RydWN0IHJkbWFfdWNtX3VkX3BhcmFtIHVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IHBhcmFtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIHsKICBSRE1BX09QVElPTl9JRCA9IDAsCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJETUFfT1BUSU9OX0lCID0gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBlbnVtIHsKICBSRE1BX09QVElPTl9JRF9UT1MgPSAwLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSRE1BX09QVElPTl9JRF9SRVVTRUFERFIgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSRE1BX09QVElPTl9JRF9BRk9OTFkgPSAyLAogIFJETUFfT1BUSU9OX0lCX1BBVEggPSAxCiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByZG1hX3VjbV9zZXRfb3B0aW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgb3B0dmFsOwogIF9fdTMyIGlkOwogIF9fdTMyIGxldmVsOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvcHRuYW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvcHRsZW47CiB9Owogc3RydWN0IHJkbWFfdWNtX21pZ3JhdGVfaWQgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByZXNwb25zZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWQ7CiAgX191MzIgZmQ7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByZG1hX3VjbV9taWdyYXRlX3Jlc3AgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBldmVudHNfcmVwb3J0ZWQ7CiB9OwogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9hc291bmQuaCBiL2xpYmMva2VybmVsL3VhcGkvc291bmQvYXNvdW5kLmgKaW5kZXggNTAwZDkyNC4uOWQxODdhYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9hc291bmQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2Fzb3VuZC5oCkBAIC02Nyw5MjMgKzY3LDkyNSBAQAogIFNORFJWX0hXREVQX0lGQUNFX0hEQSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU05EUlZfSFdERVBfSUZBQ0VfVVNCX1NUUkVBTSwKLSBTTkRSVl9IV0RFUF9JRkFDRV9MQVNUID0gU05EUlZfSFdERVBfSUZBQ0VfVVNCX1NUUkVBTQorIFNORFJWX0hXREVQX0lGQUNFX0ZXX0RJQ0UsCisgU05EUlZfSFdERVBfSUZBQ0VfTEFTVCA9IFNORFJWX0hXREVQX0lGQUNFX0ZXX0RJQ0UKIH07Ci1zdHJ1Y3Qgc25kX2h3ZGVwX2luZm8gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBzbmRfaHdkZXBfaW5mbyB7CiAgdW5zaWduZWQgaW50IGRldmljZTsKICBpbnQgY2FyZDsKICB1bnNpZ25lZCBjaGFyIGlkWzY0XTsKLSB1bnNpZ25lZCBjaGFyIG5hbWVbODBdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIG5hbWVbODBdOwogIGludCBpZmFjZTsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKIH07Ci1zdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyB7CiAgdW5zaWduZWQgaW50IHZlcnNpb247CiAgdW5zaWduZWQgY2hhciBpZFszMl07CiAgdW5zaWduZWQgaW50IG51bV9kc3BzOwotIHVuc2lnbmVkIGludCBkc3BfbG9hZGVkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgZHNwX2xvYWRlZDsKICB1bnNpZ25lZCBpbnQgY2hpcF9yZWFkeTsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzE2XTsKIH07Ci1zdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9pbWFnZSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UgewogIHVuc2lnbmVkIGludCBpbmRleDsKICB1bnNpZ25lZCBjaGFyIG5hbWVbNjRdOwogIHVuc2lnbmVkIGNoYXIgX191c2VyICppbWFnZTsKLSBzaXplX3QgbGVuZ3RoOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzaXplX3QgbGVuZ3RoOwogIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7CiB9OwogI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9QVkVSU0lPTiBfSU9SICgnSCcsIDB4MDAsIGludCkKLSNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfSU5GTyBfSU9SICgnSCcsIDB4MDEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX0lORk8gX0lPUiAoJ0gnLCAweDAxLCBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8pCiAjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX0RTUF9TVEFUVVMgX0lPUignSCcsIDB4MDIsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cykKICNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfRFNQX0xPQUQgX0lPVygnSCcsIDB4MDMsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX2ltYWdlKQogI2RlZmluZSBTTkRSVl9QQ01fVkVSU0lPTiBTTkRSVl9QUk9UT0NPTF9WRVJTSU9OKDIsIDAsIDExKQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHNuZF9wY21fdWZyYW1lc190OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBzbmRfcGNtX3VmcmFtZXNfdDsKIHR5cGVkZWYgc2lnbmVkIGxvbmcgc25kX3BjbV9zZnJhbWVzX3Q7CiBlbnVtIHsKICBTTkRSVl9QQ01fQ0xBU1NfR0VORVJJQyA9IDAsCi0gU05EUlZfUENNX0NMQVNTX01VTFRJLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9QQ01fQ0xBU1NfTVVMVEksCiAgU05EUlZfUENNX0NMQVNTX01PREVNLAogIFNORFJWX1BDTV9DTEFTU19ESUdJVElaRVIsCiAgU05EUlZfUENNX0NMQVNTX0xBU1QgPSBTTkRSVl9QQ01fQ0xBU1NfRElHSVRJWkVSLAotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSB7CiAgU05EUlZfUENNX1NVQkNMQVNTX0dFTkVSSUNfTUlYID0gMCwKICBTTkRSVl9QQ01fU1VCQ0xBU1NfTVVMVElfTUlYLAotIFNORFJWX1BDTV9TVUJDTEFTU19MQVNUID0gU05EUlZfUENNX1NVQkNMQVNTX01VTFRJX01JWCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfUENNX1NVQkNMQVNTX0xBU1QgPSBTTkRSVl9QQ01fU1VCQ0xBU1NfTVVMVElfTUlYLAogfTsKIGVudW0gewogIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgPSAwLAotIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAogIFNORFJWX1BDTV9TVFJFQU1fTEFTVCA9IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKIH07CiB0eXBlZGVmIGludCBfX2JpdHdpc2Ugc25kX3BjbV9hY2Nlc3NfdDsKLSNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19NTUFQX0lOVEVSTEVBVkVEICgoX19mb3JjZSBzbmRfcGNtX2FjY2Vzc190KSAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19NTUFQX0lOVEVSTEVBVkVEICgoX19mb3JjZSBzbmRfcGNtX2FjY2Vzc190KSAwKQogI2RlZmluZSBTTkRSVl9QQ01fQUNDRVNTX01NQVBfTk9OSU5URVJMRUFWRUQgKChfX2ZvcmNlIHNuZF9wY21fYWNjZXNzX3QpIDEpCiAjZGVmaW5lIFNORFJWX1BDTV9BQ0NFU1NfTU1BUF9DT01QTEVYICgoX19mb3JjZSBzbmRfcGNtX2FjY2Vzc190KSAyKQogI2RlZmluZSBTTkRSVl9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVEICgoX19mb3JjZSBzbmRfcGNtX2FjY2Vzc190KSAzKQotI2RlZmluZSBTTkRSVl9QQ01fQUNDRVNTX1JXX05PTklOVEVSTEVBVkVEICgoX19mb3JjZSBzbmRfcGNtX2FjY2Vzc190KSA0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19SV19OT05JTlRFUkxFQVZFRCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgNCkKICNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19MQVNUIFNORFJWX1BDTV9BQ0NFU1NfUldfTk9OSU5URVJMRUFWRUQKIHR5cGVkZWYgaW50IF9fYml0d2lzZSBzbmRfcGNtX2Zvcm1hdF90OwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1M4ICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAwKQotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1U4ICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VOCAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDIpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UxNl9MRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNCkKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMTZfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UxNl9CRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDYpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzI0X0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA3KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNF9MRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgOCkKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjRfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNF9CRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgOSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDEwKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9CRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMTEpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTMyX0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxMikKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMzJfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDEzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMzJfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDEzKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxNCkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9GTE9BVF9CRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMTUpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9MRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMTYpCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9CRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMTcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjRfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE3KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRV9MRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMTgpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxOSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9NVV9MQVcgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDIwKQotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0FfTEFXICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAyMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfQV9MQVcgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDIxKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0lNQV9BRFBDTSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMjIpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfTVBFRyAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMjMpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfR1NNICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAyNCkKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TUEVDSUFMICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfU1BFQ0lBTCAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzEpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzI0XzNMRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzIpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzI0XzNCRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzMpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTI0XzNMRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzQpCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTI0XzNCRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM1KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM2KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM3KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyMF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM4KQotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyMF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjBfM0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzOSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMThfM0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0MCkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMThfM0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0MSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMThfM0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0MikKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMThfM0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0MykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTE4XzNCRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDMpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRzcyM18yNCAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDQpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRzcyM18yNF8xQiAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDUpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRzcyM180MCAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDYpCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRzcyM180MF8xQiAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0c3MjNfNDBfMUIgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQ3KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0RTRF9VOCAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDgpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRFNEX1UxNl9MRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDkpCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfTEFTVCBTTkRSVl9QQ01fRk9STUFUX0RTRF9VMTZfTEUKLSNpZmRlZiBTTkRSVl9MSVRUTEVfRU5ESUFOCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmZGVmIFNORFJWX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMTYgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMTYgU05EUlZfUENNX0ZPUk1BVF9VMTZfTEUKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMjQgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjQgU05EUlZfUENNX0ZPUk1BVF9VMjRfTEUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTI0IFNORFJWX1BDTV9GT1JNQVRfVTI0X0xFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzMyIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTMyIFNORFJWX1BDTV9GT1JNQVRfVTMyX0xFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRkxPQVQgU05EUlZfUENNX0ZPUk1BVF9GTE9BVF9MRQotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjQgU05EUlZfUENNX0ZPUk1BVF9GTE9BVDY0X0xFCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjQgU05EUlZfUENNX0ZPUk1BVF9GTE9BVDY0X0xFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0xFCiAjZW5kaWYKICNpZmRlZiBTTkRSVl9CSUdfRU5ESUFOCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzE2IFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MxNiBTTkRSVl9QQ01fRk9STUFUX1MxNl9CRQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UxNiBTTkRSVl9QQ01fRk9STUFUX1UxNl9CRQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyNCBTTkRSVl9QQ01fRk9STUFUX1MyNF9CRQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNCBTTkRSVl9QQ01fRk9STUFUX1UyNF9CRQotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MzMiBTTkRSVl9QQ01fRk9STUFUX1MzMl9CRQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMzIgU05EUlZfUENNX0ZPUk1BVF9TMzJfQkUKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMzIgU05EUlZfUENNX0ZPUk1BVF9VMzJfQkUKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9GTE9BVCBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0JFCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NCBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjRfQkUKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9JRUM5NThfU1VCRlJBTUUgU05EUlZfUENNX0ZPUk1BVF9JRUM5NThfU1VCRlJBTUVfQkUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0JFCiAjZW5kaWYKIHR5cGVkZWYgaW50IF9fYml0d2lzZSBzbmRfcGNtX3N1YmZvcm1hdF90OwogI2RlZmluZSBTTkRSVl9QQ01fU1VCRk9STUFUX1NURCAoKF9fZm9yY2Ugc25kX3BjbV9zdWJmb3JtYXRfdCkgMCkKLSNkZWZpbmUgU05EUlZfUENNX1NVQkZPUk1BVF9MQVNUIFNORFJWX1BDTV9TVUJGT1JNQVRfU1RECiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fU1VCRk9STUFUX0xBU1QgU05EUlZfUENNX1NVQkZPUk1BVF9TVEQKICNkZWZpbmUgU05EUlZfUENNX0lORk9fTU1BUCAweDAwMDAwMDAxCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgMHgwMDAwMDAwMgogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19ET1VCTEUgMHgwMDAwMDAwNAotI2RlZmluZSBTTkRSVl9QQ01fSU5GT19CQVRDSCAweDAwMDAwMDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19CQVRDSCAweDAwMDAwMDEwCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIDB4MDAwMDAxMDAKICNkZWZpbmUgU05EUlZfUENNX0lORk9fTk9OSU5URVJMRUFWRUQgMHgwMDAwMDIwMAogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19DT01QTEVYIDB4MDAwMDA0MDAKLSNkZWZpbmUgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgMHgwMDAxMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgMHgwMDAxMDAwMAogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19PVkVSUkFOR0UgMHgwMDAyMDAwMAogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19SRVNVTUUgMHgwMDA0MDAwMAogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19QQVVTRSAweDAwMDgwMDAwCi0jZGVmaW5lIFNORFJWX1BDTV9JTkZPX0hBTEZfRFVQTEVYIDB4MDAxMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0hBTEZfRFVQTEVYIDB4MDAxMDAwMDAKICNkZWZpbmUgU05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYIDB4MDAyMDAwMDAKICNkZWZpbmUgU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCAweDAwNDAwMDAwCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX05PX1BFUklPRF9XQUtFVVAgMHgwMDgwMDAwMAotI2RlZmluZSBTTkRSVl9QQ01fSU5GT19IQVNfV0FMTF9DTE9DSyAweDAxMDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fSU5GT19IQVNfV0FMTF9DTE9DSyAweDAxMDAwMDAwCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0ZJRk9fSU5fRlJBTUVTIDB4ODAwMDAwMDAKIHR5cGVkZWYgaW50IF9fYml0d2lzZSBzbmRfcGNtX3N0YXRlX3Q7CiAjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9PUEVOICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDApCi0jZGVmaW5lIFNORFJWX1BDTV9TVEFURV9TRVRVUCAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX1NUQVRFX1NFVFVQICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDEpCiAjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9QUkVQQVJFRCAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSAyKQogI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfUlVOTklORyAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSAzKQogI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfWFJVTiAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSA0KQotI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfRFJBSU5JTkcgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgNSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9EUkFJTklORyAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSA1KQogI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfUEFVU0VEICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDYpCiAjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgNykKICNkZWZpbmUgU05EUlZfUENNX1NUQVRFX0RJU0NPTk5FQ1RFRCAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSA4KQotI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfTEFTVCBTTkRSVl9QQ01fU1RBVEVfRElTQ09OTkVDVEVECiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfTEFTVCBTTkRSVl9QQ01fU1RBVEVfRElTQ09OTkVDVEVECiBlbnVtIHsKICBTTkRSVl9QQ01fTU1BUF9PRkZTRVRfREFUQSA9IDB4MDAwMDAwMDAsCiAgU05EUlZfUENNX01NQVBfT0ZGU0VUX1NUQVRVUyA9IDB4ODAwMDAwMDAsCi0gU05EUlZfUENNX01NQVBfT0ZGU0VUX0NPTlRST0wgPSAweDgxMDAwMDAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9QQ01fTU1BUF9PRkZTRVRfQ09OVFJPTCA9IDB4ODEwMDAwMDAsCiB9OwogdW5pb24gc25kX3BjbV9zeW5jX2lkIHsKICB1bnNpZ25lZCBjaGFyIGlkWzE2XTsKLSB1bnNpZ25lZCBzaG9ydCBpZDE2WzhdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBzaG9ydCBpZDE2WzhdOwogIHVuc2lnbmVkIGludCBpZDMyWzRdOwogfTsKIHN0cnVjdCBzbmRfcGNtX2luZm8gewotIHVuc2lnbmVkIGludCBkZXZpY2U7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCBkZXZpY2U7CiAgdW5zaWduZWQgaW50IHN1YmRldmljZTsKICBpbnQgc3RyZWFtOwogIGludCBjYXJkOwotIHVuc2lnbmVkIGNoYXIgaWRbNjRdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIGlkWzY0XTsKICB1bnNpZ25lZCBjaGFyIG5hbWVbODBdOwogIHVuc2lnbmVkIGNoYXIgc3VibmFtZVszMl07CiAgaW50IGRldl9jbGFzczsKLSBpbnQgZGV2X3N1YmNsYXNzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgZGV2X3N1YmNsYXNzOwogIHVuc2lnbmVkIGludCBzdWJkZXZpY2VzX2NvdW50OwogIHVuc2lnbmVkIGludCBzdWJkZXZpY2VzX2F2YWlsOwogIHVuaW9uIHNuZF9wY21fc3luY19pZCBzeW5jOwotIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0XTsKIH07CiB0eXBlZGVmIGludCBzbmRfcGNtX2h3X3BhcmFtX3Q7CiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9BQ0NFU1MgMAotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQgMQogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fU1VCRk9STUFUIDIKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX01BU0sgU05EUlZfUENNX0hXX1BBUkFNX0FDQ0VTUwogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fTEFTVF9NQVNLIFNORFJWX1BDTV9IV19QQVJBTV9TVUJGT1JNQVQKLSNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX1NBTVBMRV9CSVRTIDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9TQU1QTEVfQklUUyA4CiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9GUkFNRV9CSVRTIDkKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTIDEwCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFIDExCi0jZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfVElNRSAxMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9USU1FIDEyCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfU0laRSAxMwogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX0JZVEVTIDE0CiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTIDE1Ci0jZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfVElNRSAxNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9USU1FIDE2CiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfU0laRSAxNwogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTIDE4CiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9USUNLX1RJTUUgMTkKLSNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX0lOVEVSVkFMIFNORFJWX1BDTV9IV19QQVJBTV9TQU1QTEVfQklUUwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX0lOVEVSVkFMIFNORFJWX1BDTV9IV19QQVJBTV9TQU1QTEVfQklUUwogI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fTEFTVF9JTlRFUlZBTCBTTkRSVl9QQ01fSFdfUEFSQU1fVElDS19USU1FCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTVNfTk9SRVNBTVBMRSAoMTw8MCkKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNU19FWFBPUlRfQlVGRkVSICgxPDwxKQotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1TX05PX1BFUklPRF9XQUtFVVAgKDE8PDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1TX05PX1BFUklPRF9XQUtFVVAgKDE8PDIpCiBzdHJ1Y3Qgc25kX2ludGVydmFsIHsKICB1bnNpZ25lZCBpbnQgbWluLCBtYXg7CiAgdW5zaWduZWQgaW50IG9wZW5taW46MSwKLSBvcGVubWF4OjEsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIG9wZW5tYXg6MSwKICBpbnRlZ2VyOjEsCiAgZW1wdHk6MTsKIH07Ci0jZGVmaW5lIFNORFJWX01BU0tfTUFYIDI1NgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfTUFTS19NQVggMjU2CiBzdHJ1Y3Qgc25kX21hc2sgewogIF9fdTMyIGJpdHNbKFNORFJWX01BU0tfTUFYKzMxKS8zMl07CiB9Owotc3RydWN0IHNuZF9wY21faHdfcGFyYW1zIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgewogIHVuc2lnbmVkIGludCBmbGFnczsKICBzdHJ1Y3Qgc25kX21hc2sgbWFza3NbU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfTUFTSyAtCiAgU05EUlZfUENNX0hXX1BBUkFNX0ZJUlNUX01BU0sgKyAxXTsKLSBzdHJ1Y3Qgc25kX21hc2sgbXJlc1s1XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHNuZF9tYXNrIG1yZXNbNV07CiAgc3RydWN0IHNuZF9pbnRlcnZhbCBpbnRlcnZhbHNbU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfSU5URVJWQUwgLQogIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9JTlRFUlZBTCArIDFdOwogIHN0cnVjdCBzbmRfaW50ZXJ2YWwgaXJlc1s5XTsKLSB1bnNpZ25lZCBpbnQgcm1hc2s7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCBybWFzazsKICB1bnNpZ25lZCBpbnQgY21hc2s7CiAgdW5zaWduZWQgaW50IGluZm87CiAgdW5zaWduZWQgaW50IG1zYml0czsKLSB1bnNpZ25lZCBpbnQgcmF0ZV9udW07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCByYXRlX251bTsKICB1bnNpZ25lZCBpbnQgcmF0ZV9kZW47CiAgc25kX3BjbV91ZnJhbWVzX3QgZmlmb19zaXplOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OwogZW51bSB7CiAgU05EUlZfUENNX1RTVEFNUF9OT05FID0gMCwKICBTTkRSVl9QQ01fVFNUQU1QX0VOQUJMRSwKLSBTTkRSVl9QQ01fVFNUQU1QX0xBU1QgPSBTTkRSVl9QQ01fVFNUQU1QX0VOQUJMRSwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfUENNX1RTVEFNUF9MQVNUID0gU05EUlZfUENNX1RTVEFNUF9FTkFCTEUsCiB9Owogc3RydWN0IHNuZF9wY21fc3dfcGFyYW1zIHsKICBpbnQgdHN0YW1wX21vZGU7Ci0gdW5zaWduZWQgaW50IHBlcmlvZF9zdGVwOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgcGVyaW9kX3N0ZXA7CiAgdW5zaWduZWQgaW50IHNsZWVwX21pbjsKICBzbmRfcGNtX3VmcmFtZXNfdCBhdmFpbF9taW47CiAgc25kX3BjbV91ZnJhbWVzX3QgeGZlcl9hbGlnbjsKLSBzbmRfcGNtX3VmcmFtZXNfdCBzdGFydF90aHJlc2hvbGQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHNuZF9wY21fdWZyYW1lc190IHN0YXJ0X3RocmVzaG9sZDsKICBzbmRfcGNtX3VmcmFtZXNfdCBzdG9wX3RocmVzaG9sZDsKICBzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3RocmVzaG9sZDsKICBzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3NpemU7Ci0gc25kX3BjbV91ZnJhbWVzX3QgYm91bmRhcnk7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHNuZF9wY21fdWZyYW1lc190IGJvdW5kYXJ5OwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwogfTsKIHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbyB7Ci0gdW5zaWduZWQgaW50IGNoYW5uZWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCBjaGFubmVsOwogIF9fa2VybmVsX29mZl90IG9mZnNldDsKICB1bnNpZ25lZCBpbnQgZmlyc3Q7CiAgdW5zaWduZWQgaW50IHN0ZXA7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3Qgc25kX3BjbV9zdGF0dXMgewogIHNuZF9wY21fc3RhdGVfdCBzdGF0ZTsKICBzdHJ1Y3QgdGltZXNwZWMgdHJpZ2dlcl90c3RhbXA7Ci0gc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsKICBzbmRfcGNtX3VmcmFtZXNfdCBhcHBsX3B0cjsKICBzbmRfcGNtX3VmcmFtZXNfdCBod19wdHI7CiAgc25kX3BjbV9zZnJhbWVzX3QgZGVsYXk7Ci0gc25kX3BjbV91ZnJhbWVzX3QgYXZhaWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHNuZF9wY21fdWZyYW1lc190IGF2YWlsOwogIHNuZF9wY21fdWZyYW1lc190IGF2YWlsX21heDsKICBzbmRfcGNtX3VmcmFtZXNfdCBvdmVycmFuZ2U7CiAgc25kX3BjbV9zdGF0ZV90IHN1c3BlbmRlZF9zdGF0ZTsKLSBfX3UzMiByZXNlcnZlZF9hbGlnbm1lbnQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJlc2VydmVkX2FsaWdubWVudDsKICBzdHJ1Y3QgdGltZXNwZWMgYXVkaW9fdHN0YW1wOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNTYtc2l6ZW9mKHN0cnVjdCB0aW1lc3BlYyldOwogfTsKLXN0cnVjdCBzbmRfcGNtX21tYXBfc3RhdHVzIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgc25kX3BjbV9tbWFwX3N0YXR1cyB7CiAgc25kX3BjbV9zdGF0ZV90IHN0YXRlOwogIGludCBwYWQxOwogIHNuZF9wY21fdWZyYW1lc190IGh3X3B0cjsKLSBzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOwogIHNuZF9wY21fc3RhdGVfdCBzdXNwZW5kZWRfc3RhdGU7CiAgc3RydWN0IHRpbWVzcGVjIGF1ZGlvX3RzdGFtcDsKIH07Ci1zdHJ1Y3Qgc25kX3BjbV9tbWFwX2NvbnRyb2wgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBzbmRfcGNtX21tYXBfY29udHJvbCB7CiAgc25kX3BjbV91ZnJhbWVzX3QgYXBwbF9wdHI7CiAgc25kX3BjbV91ZnJhbWVzX3QgYXZhaWxfbWluOwogfTsKLSNkZWZpbmUgU05EUlZfUENNX1NZTkNfUFRSX0hXU1lOQyAoMTw8MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9TWU5DX1BUUl9IV1NZTkMgKDE8PDApCiAjZGVmaW5lIFNORFJWX1BDTV9TWU5DX1BUUl9BUFBMICgxPDwxKQogI2RlZmluZSBTTkRSVl9QQ01fU1lOQ19QVFJfQVZBSUxfTUlOICgxPDwyKQogc3RydWN0IHNuZF9wY21fc3luY19wdHIgewotIHVuc2lnbmVkIGludCBmbGFnczsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgaW50IGZsYWdzOwogIHVuaW9uIHsKICBzdHJ1Y3Qgc25kX3BjbV9tbWFwX3N0YXR1cyBzdGF0dXM7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07Ci0gfSBzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9IHM7CiAgdW5pb24gewogIHN0cnVjdCBzbmRfcGNtX21tYXBfY29udHJvbCBjb250cm9sOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwotIH0gYzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfSBjOwogfTsKIHN0cnVjdCBzbmRfeGZlcmkgewogIHNuZF9wY21fc2ZyYW1lc190IHJlc3VsdDsKLSB2b2lkIF9fdXNlciAqYnVmOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB2b2lkIF9fdXNlciAqYnVmOwogIHNuZF9wY21fdWZyYW1lc190IGZyYW1lczsKIH07CiBzdHJ1Y3Qgc25kX3hmZXJuIHsKLSBzbmRfcGNtX3NmcmFtZXNfdCByZXN1bHQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHNuZF9wY21fc2ZyYW1lc190IHJlc3VsdDsKICB2b2lkIF9fdXNlciAqIF9fdXNlciAqYnVmczsKICBzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXM7CiB9OwotZW51bSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB7CiAgU05EUlZfUENNX1RTVEFNUF9UWVBFX0dFVFRJTUVPRkRBWSA9IDAsCiAgU05EUlZfUENNX1RTVEFNUF9UWVBFX01PTk9UT05JQywKICBTTkRSVl9QQ01fVFNUQU1QX1RZUEVfTEFTVCA9IFNORFJWX1BDTV9UU1RBTVBfVFlQRV9NT05PVE9OSUMsCi19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBlbnVtIHsKICBTTkRSVl9DSE1BUF9VTktOT1dOID0gMCwKICBTTkRSVl9DSE1BUF9OQSwKLSBTTkRSVl9DSE1BUF9NT05PLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9DSE1BUF9NT05PLAogIFNORFJWX0NITUFQX0ZMLAogIFNORFJWX0NITUFQX0ZSLAogIFNORFJWX0NITUFQX1JMLAotIFNORFJWX0NITUFQX1JSLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9DSE1BUF9SUiwKICBTTkRSVl9DSE1BUF9GQywKICBTTkRSVl9DSE1BUF9MRkUsCiAgU05EUlZfQ0hNQVBfU0wsCi0gU05EUlZfQ0hNQVBfU1IsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX0NITUFQX1NSLAogIFNORFJWX0NITUFQX1JDLAogIFNORFJWX0NITUFQX0ZMQywKICBTTkRSVl9DSE1BUF9GUkMsCi0gU05EUlZfQ0hNQVBfUkxDLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9DSE1BUF9STEMsCiAgU05EUlZfQ0hNQVBfUlJDLAogIFNORFJWX0NITUFQX0ZMVywKICBTTkRSVl9DSE1BUF9GUlcsCi0gU05EUlZfQ0hNQVBfRkxILAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9DSE1BUF9GTEgsCiAgU05EUlZfQ0hNQVBfRkNILAogIFNORFJWX0NITUFQX0ZSSCwKICBTTkRSVl9DSE1BUF9UQywKLSBTTkRSVl9DSE1BUF9URkwsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX0NITUFQX1RGTCwKICBTTkRSVl9DSE1BUF9URlIsCiAgU05EUlZfQ0hNQVBfVEZDLAogIFNORFJWX0NITUFQX1RSTCwKLSBTTkRSVl9DSE1BUF9UUlIsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX0NITUFQX1RSUiwKICBTTkRSVl9DSE1BUF9UUkMsCiAgU05EUlZfQ0hNQVBfVEZMQywKICBTTkRSVl9DSE1BUF9URlJDLAotIFNORFJWX0NITUFQX1RTTCwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfQ0hNQVBfVFNMLAogIFNORFJWX0NITUFQX1RTUiwKICBTTkRSVl9DSE1BUF9MTEZFLAogIFNORFJWX0NITUFQX1JMRkUsCi0gU05EUlZfQ0hNQVBfQkMsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX0NITUFQX0JDLAogIFNORFJWX0NITUFQX0JMQywKICBTTkRSVl9DSE1BUF9CUkMsCiAgU05EUlZfQ0hNQVBfTEFTVCA9IFNORFJWX0NITUFQX0JSQywKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgU05EUlZfQ0hNQVBfUE9TSVRJT05fTUFTSyAweGZmZmYKICNkZWZpbmUgU05EUlZfQ0hNQVBfUEhBU0VfSU5WRVJTRSAoMHgwMSA8PCAxNikKICNkZWZpbmUgU05EUlZfQ0hNQVBfRFJJVkVSX1NQRUMgKDB4MDIgPDwgMTYpCi0jZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QVkVSU0lPTiBfSU9SKCdBJywgMHgwMCwgaW50KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1BWRVJTSU9OIF9JT1IoJ0EnLCAweDAwLCBpbnQpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9JTkZPIF9JT1IoJ0EnLCAweDAxLCBzdHJ1Y3Qgc25kX3BjbV9pbmZvKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVFNUQU1QIF9JT1coJ0EnLCAweDAyLCBpbnQpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9UVFNUQU1QIF9JT1coJ0EnLCAweDAzLCBpbnQpCi0jZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV19SRUZJTkUgX0lPV1IoJ0EnLCAweDEwLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdfUkVGSU5FIF9JT1dSKCdBJywgMHgxMCwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdfUEFSQU1TIF9JT1dSKCdBJywgMHgxMSwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdfRlJFRSBfSU8oJ0EnLCAweDEyKQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1dfUEFSQU1TIF9JT1dSKCdBJywgMHgxMywgc3RydWN0IHNuZF9wY21fc3dfcGFyYW1zKQotI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1RBVFVTIF9JT1IoJ0EnLCAweDIwLCBzdHJ1Y3Qgc25kX3BjbV9zdGF0dXMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfU1RBVFVTIF9JT1IoJ0EnLCAweDIwLCBzdHJ1Y3Qgc25kX3BjbV9zdGF0dXMpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9ERUxBWSBfSU9SKCdBJywgMHgyMSwgc25kX3BjbV9zZnJhbWVzX3QpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV1NZTkMgX0lPKCdBJywgMHgyMikKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NZTkNfUFRSIF9JT1dSKCdBJywgMHgyMywgc3RydWN0IHNuZF9wY21fc3luY19wdHIpCi0jZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9DSEFOTkVMX0lORk8gX0lPUignQScsIDB4MzIsIHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9DSEFOTkVMX0lORk8gX0lPUignQScsIDB4MzIsIHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbykKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1BSRVBBUkUgX0lPKCdBJywgMHg0MCkKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFU0VUIF9JTygnQScsIDB4NDEpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TVEFSVCBfSU8oJ0EnLCAweDQyKQotI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfRFJPUCBfSU8oJ0EnLCAweDQzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0RST1AgX0lPKCdBJywgMHg0MykKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0RSQUlOIF9JTygnQScsIDB4NDQpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QQVVTRSBfSU9XKCdBJywgMHg0NSwgaW50KQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVXSU5EIF9JT1coJ0EnLCAweDQ2LCBzbmRfcGNtX3VmcmFtZXNfdCkKLSNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFU1VNRSBfSU8oJ0EnLCAweDQ3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFU1VNRSBfSU8oJ0EnLCAweDQ3KQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfWFJVTiBfSU8oJ0EnLCAweDQ4KQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfRk9SV0FSRCBfSU9XKCdBJywgMHg0OSwgc25kX3BjbV91ZnJhbWVzX3QpCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9XUklURUlfRlJBTUVTIF9JT1coJ0EnLCAweDUwLCBzdHJ1Y3Qgc25kX3hmZXJpKQotI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVBRElfRlJBTUVTIF9JT1IoJ0EnLCAweDUxLCBzdHJ1Y3Qgc25kX3hmZXJpKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFQURJX0ZSQU1FUyBfSU9SKCdBJywgMHg1MSwgc3RydWN0IHNuZF94ZmVyaSkKICNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1dSSVRFTl9GUkFNRVMgX0lPVygnQScsIDB4NTIsIHN0cnVjdCBzbmRfeGZlcm4pCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRUFETl9GUkFNRVMgX0lPUignQScsIDB4NTMsIHN0cnVjdCBzbmRfeGZlcm4pCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9MSU5LIF9JT1coJ0EnLCAweDYwLCBpbnQpCi0jZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9VTkxJTksgX0lPKCdBJywgMHg2MSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9VTkxJTksgX0lPKCdBJywgMHg2MSkKICNkZWZpbmUgU05EUlZfUkFXTUlESV9WRVJTSU9OIFNORFJWX1BST1RPQ09MX1ZFUlNJT04oMiwgMCwgMCkKIGVudW0gewogIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCA9IDAsCi0gU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULAogIFNORFJWX1JBV01JRElfU1RSRUFNX0xBU1QgPSBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKIH07CiAjZGVmaW5lIFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQgMHgwMDAwMDAwMQotI2RlZmluZSBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQgMHgwMDAwMDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUIDB4MDAwMDAwMDIKICNkZWZpbmUgU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWCAweDAwMDAwMDA0CiBzdHJ1Y3Qgc25kX3Jhd21pZGlfaW5mbyB7CiAgdW5zaWduZWQgaW50IGRldmljZTsKLSB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlOwogIGludCBzdHJlYW07CiAgaW50IGNhcmQ7CiAgdW5zaWduZWQgaW50IGZsYWdzOwotIHVuc2lnbmVkIGNoYXIgaWRbNjRdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIGlkWzY0XTsKICB1bnNpZ25lZCBjaGFyIG5hbWVbODBdOwogIHVuc2lnbmVkIGNoYXIgc3VibmFtZVszMl07CiAgdW5zaWduZWQgaW50IHN1YmRldmljZXNfY291bnQ7Ci0gdW5zaWduZWQgaW50IHN1YmRldmljZXNfYXZhaWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCBzdWJkZXZpY2VzX2F2YWlsOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwogfTsKIHN0cnVjdCBzbmRfcmF3bWlkaV9wYXJhbXMgewotIGludCBzdHJlYW07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGludCBzdHJlYW07CiAgc2l6ZV90IGJ1ZmZlcl9zaXplOwogIHNpemVfdCBhdmFpbF9taW47CiAgdW5zaWduZWQgaW50IG5vX2FjdGl2ZV9zZW5zaW5nOiAxOwotIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTZdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzE2XTsKIH07CiBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3RhdHVzIHsKICBpbnQgc3RyZWFtOwotIHN0cnVjdCB0aW1lc3BlYyB0c3RhbXA7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB0aW1lc3BlYyB0c3RhbXA7CiAgc2l6ZV90IGF2YWlsOwogIHNpemVfdCB4cnVuczsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzE2XTsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9QVkVSU0lPTiBfSU9SKCdXJywgMHgwMCwgaW50KQogI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX0lORk8gX0lPUignVycsIDB4MDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKQogI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1BBUkFNUyBfSU9XUignVycsIDB4MTAsIHN0cnVjdCBzbmRfcmF3bWlkaV9wYXJhbXMpCi0jZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfU1RBVFVTIF9JT1dSKCdXJywgMHgyMCwgc3RydWN0IHNuZF9yYXdtaWRpX3N0YXR1cykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfU1RBVFVTIF9JT1dSKCdXJywgMHgyMCwgc3RydWN0IHNuZF9yYXdtaWRpX3N0YXR1cykKICNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9EUk9QIF9JT1coJ1cnLCAweDMwLCBpbnQpCiAjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfRFJBSU4gX0lPVygnVycsIDB4MzEsIGludCkKICNkZWZpbmUgU05EUlZfVElNRVJfVkVSU0lPTiBTTkRSVl9QUk9UT0NPTF9WRVJTSU9OKDIsIDAsIDYpCi1lbnVtIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHsKICBTTkRSVl9USU1FUl9DTEFTU19OT05FID0gLTEsCiAgU05EUlZfVElNRVJfQ0xBU1NfU0xBVkUgPSAwLAogIFNORFJWX1RJTUVSX0NMQVNTX0dMT0JBTCwKLSBTTkRSVl9USU1FUl9DTEFTU19DQVJELAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9USU1FUl9DTEFTU19DQVJELAogIFNORFJWX1RJTUVSX0NMQVNTX1BDTSwKICBTTkRSVl9USU1FUl9DTEFTU19MQVNUID0gU05EUlZfVElNRVJfQ0xBU1NfUENNLAogfTsKLWVudW0gewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gewogIFNORFJWX1RJTUVSX1NDTEFTU19OT05FID0gMCwKICBTTkRSVl9USU1FUl9TQ0xBU1NfQVBQTElDQVRJT04sCiAgU05EUlZfVElNRVJfU0NMQVNTX1NFUVVFTkNFUiwKLSBTTkRSVl9USU1FUl9TQ0xBU1NfT1NTX1NFUVVFTkNFUiwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EUlZfVElNRVJfU0NMQVNTX09TU19TRVFVRU5DRVIsCiAgU05EUlZfVElNRVJfU0NMQVNTX0xBU1QgPSBTTkRSVl9USU1FUl9TQ0xBU1NfT1NTX1NFUVVFTkNFUiwKIH07CiAjZGVmaW5lIFNORFJWX1RJTUVSX0dMT0JBTF9TWVNURU0gMAotI2RlZmluZSBTTkRSVl9USU1FUl9HTE9CQUxfUlRDIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1RJTUVSX0dMT0JBTF9SVEMgMQogI2RlZmluZSBTTkRSVl9USU1FUl9HTE9CQUxfSFBFVCAyCiAjZGVmaW5lIFNORFJWX1RJTUVSX0dMT0JBTF9IUlRJTUVSIDMKICNkZWZpbmUgU05EUlZfVElNRVJfRkxHX1NMQVZFICgxPDwwKQotc3RydWN0IHNuZF90aW1lcl9pZCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHNuZF90aW1lcl9pZCB7CiAgaW50IGRldl9jbGFzczsKICBpbnQgZGV2X3NjbGFzczsKICBpbnQgY2FyZDsKLSBpbnQgZGV2aWNlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgZGV2aWNlOwogIGludCBzdWJkZXZpY2U7CiB9Owogc3RydWN0IHNuZF90aW1lcl9naW5mbyB7Ci0gc3RydWN0IHNuZF90aW1lcl9pZCB0aWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBzbmRfdGltZXJfaWQgdGlkOwogIHVuc2lnbmVkIGludCBmbGFnczsKICBpbnQgY2FyZDsKICB1bnNpZ25lZCBjaGFyIGlkWzY0XTsKLSB1bnNpZ25lZCBjaGFyIG5hbWVbODBdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBjaGFyIG5hbWVbODBdOwogIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQwOwogIHVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbjsKICB1bnNpZ25lZCBsb25nIHJlc29sdXRpb25fbWluOwotIHVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbl9tYXg7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGxvbmcgcmVzb2x1dGlvbl9tYXg7CiAgdW5zaWduZWQgaW50IGNsaWVudHM7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFszMl07CiB9Owotc3RydWN0IHNuZF90aW1lcl9ncGFyYW1zIHsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgc25kX3RpbWVyX2dwYXJhbXMgewogIHN0cnVjdCBzbmRfdGltZXJfaWQgdGlkOwogIHVuc2lnbmVkIGxvbmcgcGVyaW9kX251bTsKICB1bnNpZ25lZCBsb25nIHBlcmlvZF9kZW47Ci0gdW5zaWduZWQgY2hhciByZXNlcnZlZFszMl07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMzJdOwogfTsKIHN0cnVjdCBzbmRfdGltZXJfZ3N0YXR1cyB7CiAgc3RydWN0IHNuZF90aW1lcl9pZCB0aWQ7Ci0gdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBsb25nIHJlc29sdXRpb247CiAgdW5zaWduZWQgbG9uZyByZXNvbHV0aW9uX251bTsKICB1bnNpZ25lZCBsb25nIHJlc29sdXRpb25fZGVuOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMzJdOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IHNuZF90aW1lcl9zZWxlY3QgewogIHN0cnVjdCBzbmRfdGltZXJfaWQgaWQ7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFszMl07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiBzdHJ1Y3Qgc25kX3RpbWVyX2luZm8gewogIHVuc2lnbmVkIGludCBmbGFnczsKICBpbnQgY2FyZDsKLSB1bnNpZ25lZCBjaGFyIGlkWzY0XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciBpZFs2NF07CiAgdW5zaWduZWQgY2hhciBuYW1lWzgwXTsKICB1bnNpZ25lZCBsb25nIHJlc2VydmVkMDsKICB1bnNpZ25lZCBsb25nIHJlc29sdXRpb247Ci0gdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwogfTsKICNkZWZpbmUgU05EUlZfVElNRVJfUFNGTEdfQVVUTyAoMTw8MCkKICNkZWZpbmUgU05EUlZfVElNRVJfUFNGTEdfRVhDTFVTSVZFICgxPDwxKQotI2RlZmluZSBTTkRSVl9USU1FUl9QU0ZMR19FQVJMWV9FVkVOVCAoMTw8MikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1RJTUVSX1BTRkxHX0VBUkxZX0VWRU5UICgxPDwyKQogc3RydWN0IHNuZF90aW1lcl9wYXJhbXMgewogIHVuc2lnbmVkIGludCBmbGFnczsKICB1bnNpZ25lZCBpbnQgdGlja3M7Ci0gdW5zaWduZWQgaW50IHF1ZXVlX3NpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGludCBxdWV1ZV9zaXplOwogIHVuc2lnbmVkIGludCByZXNlcnZlZDA7CiAgdW5zaWduZWQgaW50IGZpbHRlcjsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzYwXTsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBzbmRfdGltZXJfc3RhdHVzIHsKICBzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOwogIHVuc2lnbmVkIGludCByZXNvbHV0aW9uOwotIHVuc2lnbmVkIGludCBsb3N0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBpbnQgbG9zdDsKICB1bnNpZ25lZCBpbnQgb3ZlcnJ1bjsKICB1bnNpZ25lZCBpbnQgcXVldWU7CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1BWRVJTSU9OIF9JT1IoJ1QnLCAweDAwLCBpbnQpCiAjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX05FWFRfREVWSUNFIF9JT1dSKCdUJywgMHgwMSwgc3RydWN0IHNuZF90aW1lcl9pZCkKICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfVFJFQUQgX0lPVygnVCcsIDB4MDIsIGludCkKLSNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfR0lORk8gX0lPV1IoJ1QnLCAweDAzLCBzdHJ1Y3Qgc25kX3RpbWVyX2dpbmZvKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfR0lORk8gX0lPV1IoJ1QnLCAweDAzLCBzdHJ1Y3Qgc25kX3RpbWVyX2dpbmZvKQogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9HUEFSQU1TIF9JT1coJ1QnLCAweDA0LCBzdHJ1Y3Qgc25kX3RpbWVyX2dwYXJhbXMpCiAjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0dTVEFUVVMgX0lPV1IoJ1QnLCAweDA1LCBzdHJ1Y3Qgc25kX3RpbWVyX2dzdGF0dXMpCiAjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NFTEVDVCBfSU9XKCdUJywgMHgxMCwgc3RydWN0IHNuZF90aW1lcl9zZWxlY3QpCi0jZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0lORk8gX0lPUignVCcsIDB4MTEsIHN0cnVjdCBzbmRfdGltZXJfaW5mbykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0lORk8gX0lPUignVCcsIDB4MTEsIHN0cnVjdCBzbmRfdGltZXJfaW5mbykKICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfUEFSQU1TIF9JT1coJ1QnLCAweDEyLCBzdHJ1Y3Qgc25kX3RpbWVyX3BhcmFtcykKICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RBVFVTIF9JT1IoJ1QnLCAweDE0LCBzdHJ1Y3Qgc25kX3RpbWVyX3N0YXR1cykKICNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RBUlQgX0lPKCdUJywgMHhhMCkKLSNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RPUCBfSU8oJ1QnLCAweGExKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RPUCBfSU8oJ1QnLCAweGExKQogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9DT05USU5VRSBfSU8oJ1QnLCAweGEyKQogI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9QQVVTRSBfSU8oJ1QnLCAweGEzKQogc3RydWN0IHNuZF90aW1lcl9yZWFkIHsKLSB1bnNpZ25lZCBpbnQgcmVzb2x1dGlvbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgaW50IHJlc29sdXRpb247CiAgdW5zaWduZWQgaW50IHRpY2tzOwogfTsKIGVudW0gewotIFNORFJWX1RJTUVSX0VWRU5UX1JFU09MVVRJT04gPSAwLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9USU1FUl9FVkVOVF9SRVNPTFVUSU9OID0gMCwKICBTTkRSVl9USU1FUl9FVkVOVF9USUNLLAogIFNORFJWX1RJTUVSX0VWRU5UX1NUQVJULAogIFNORFJWX1RJTUVSX0VWRU5UX1NUT1AsCi0gU05EUlZfVElNRVJfRVZFTlRfQ09OVElOVUUsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX1RJTUVSX0VWRU5UX0NPTlRJTlVFLAogIFNORFJWX1RJTUVSX0VWRU5UX1BBVVNFLAogIFNORFJWX1RJTUVSX0VWRU5UX0VBUkxZLAogIFNORFJWX1RJTUVSX0VWRU5UX1NVU1BFTkQsCi0gU05EUlZfVElNRVJfRVZFTlRfUkVTVU1FLAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9USU1FUl9FVkVOVF9SRVNVTUUsCiAgU05EUlZfVElNRVJfRVZFTlRfTVNUQVJUID0gU05EUlZfVElNRVJfRVZFTlRfU1RBUlQgKyAxMCwKICBTTkRSVl9USU1FUl9FVkVOVF9NU1RPUCA9IFNORFJWX1RJTUVSX0VWRU5UX1NUT1AgKyAxMCwKICBTTkRSVl9USU1FUl9FVkVOVF9NQ09OVElOVUUgPSBTTkRSVl9USU1FUl9FVkVOVF9DT05USU5VRSArIDEwLAotIFNORFJWX1RJTUVSX0VWRU5UX01QQVVTRSA9IFNORFJWX1RJTUVSX0VWRU5UX1BBVVNFICsgMTAsCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFNORFJWX1RJTUVSX0VWRU5UX01QQVVTRSA9IFNORFJWX1RJTUVSX0VWRU5UX1BBVVNFICsgMTAsCiAgU05EUlZfVElNRVJfRVZFTlRfTVNVU1BFTkQgPSBTTkRSVl9USU1FUl9FVkVOVF9TVVNQRU5EICsgMTAsCiAgU05EUlZfVElNRVJfRVZFTlRfTVJFU1VNRSA9IFNORFJWX1RJTUVSX0VWRU5UX1JFU1VNRSArIDEwLAogfTsKLXN0cnVjdCBzbmRfdGltZXJfdHJlYWQgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBzbmRfdGltZXJfdHJlYWQgewogIGludCBldmVudDsKICBzdHJ1Y3QgdGltZXNwZWMgdHN0YW1wOwogIHVuc2lnbmVkIGludCB2YWw7Ci19OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiAjZGVmaW5lIFNORFJWX0NUTF9WRVJTSU9OIFNORFJWX1BST1RPQ09MX1ZFUlNJT04oMiwgMCwgNykKIHN0cnVjdCBzbmRfY3RsX2NhcmRfaW5mbyB7CiAgaW50IGNhcmQ7Ci0gaW50IHBhZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IHBhZDsKICB1bnNpZ25lZCBjaGFyIGlkWzE2XTsKICB1bnNpZ25lZCBjaGFyIGRyaXZlclsxNl07CiAgdW5zaWduZWQgY2hhciBuYW1lWzMyXTsKLSB1bnNpZ25lZCBjaGFyIGxvbmduYW1lWzgwXTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciBsb25nbmFtZVs4MF07CiAgdW5zaWduZWQgY2hhciByZXNlcnZlZF9bMTZdOwogIHVuc2lnbmVkIGNoYXIgbWl4ZXJuYW1lWzgwXTsKICB1bnNpZ25lZCBjaGFyIGNvbXBvbmVudHNbMTI4XTsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHR5cGVkZWYgaW50IF9fYml0d2lzZSBzbmRfY3RsX2VsZW1fdHlwZV90OwogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX05PTkUgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDApCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTiAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX3R5cGVfdCkgMSkKLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSAyKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDMpCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfQllURVMgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDQpCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfSUVDOTU4ICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSA1KQotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI2NCAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX3R5cGVfdCkgNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjY0ICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSA2KQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0xBU1QgU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSNjQKIHR5cGVkZWYgaW50IF9fYml0d2lzZSBzbmRfY3RsX2VsZW1faWZhY2VfdDsKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfQ0FSRCAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDApCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX0hXREVQICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX0hXREVQICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMSkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV9pZmFjZV90KSAyKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00gKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV9pZmFjZV90KSAzKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9SQVdNSURJICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgNCkKLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfVElNRVIgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV9pZmFjZV90KSA1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfVElNRVIgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV9pZmFjZV90KSA1KQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9TRVFVRU5DRVIgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV9pZmFjZV90KSA2KQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9MQVNUIFNORFJWX0NUTF9FTEVNX0lGQUNFX1NFUVVFTkNFUgogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCAoMTw8MCkKLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1dSSVRFICgxPDwxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1dSSVRFICgxPDwxKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIChTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRHxTTkRSVl9DVExfRUxFTV9BQ0NFU1NfV1JJVEUpCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRSAoMTw8MikKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RJTUVTVEFNUCAoMTw8MykKLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEICgxPDw0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEICgxPDw0KQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1dSSVRFICgxPDw1KQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQURXUklURSAoU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEfFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfV1JJVEUpCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ09NTUFORCAoMTw8NikKLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFICgxPDw4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFICgxPDw4KQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfTE9DSyAoMTw8OSkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX09XTkVSICgxPDwxMCkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSyAoMTw8MjgpCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19VU0VSICgxPDwyOSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19VU0VSICgxPDwyOSkKICNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QwIDB4MDAwMAogI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDEgMHgwMTAwCiAjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EMiAweDAyMDAKLSNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QzIDB4MDMwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QzIDB4MDMwMAogI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDNob3QgKFNORFJWX0NUTF9QT1dFUl9EM3wweDAwMDApCiAjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EM2NvbGQgKFNORFJWX0NUTF9QT1dFUl9EM3wweDAwMDEpCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lEX05BTUVfTUFYTEVOIDQ0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNuZF9jdGxfZWxlbV9pZCB7CiAgdW5zaWduZWQgaW50IG51bWlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzbmRfY3RsX2VsZW1faWZhY2VfdCBpZmFjZTsKICB1bnNpZ25lZCBpbnQgZGV2aWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlOwogIHVuc2lnbmVkIGNoYXIgbmFtZVs0NF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBpbmRleDsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNuZF9jdGxfZWxlbV9saXN0IHsKICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgc3BhY2U7CiAgdW5zaWduZWQgaW50IHVzZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBjb3VudDsKICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkIF9fdXNlciAqcGlkczsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs1MF07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyB7CiAgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc25kX2N0bF9lbGVtX3R5cGVfdCB0eXBlOwogIHVuc2lnbmVkIGludCBhY2Nlc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBjb3VudDsKICBfX2tlcm5lbF9waWRfdCBvd25lcjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgbWluOwogIGxvbmcgbWF4OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIHN0ZXA7CiAgfSBpbnRlZ2VyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIGxvbmcgbG9uZyBtaW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgbG9uZyBtYXg7CiAgbG9uZyBsb25nIHN0ZXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gaW50ZWdlcjY0OwogIHN0cnVjdCB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBpdGVtczsKICB1bnNpZ25lZCBpbnQgaXRlbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBuYW1lWzY0XTsKICBfX3U2NCBuYW1lc19wdHI7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBuYW1lc19sZW5ndGg7CiAgfSBlbnVtZXJhdGVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzEyOF07CiAgfSB2YWx1ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHVuc2lnbmVkIHNob3J0IGRbNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0ICpkX3B0cjsKICB9IGRpbWVuOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzY0LTQqc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgewogIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQgaWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBpbmRpcmVjdDogMTsKICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBsb25nIHZhbHVlWzEyOF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgKnZhbHVlX3B0cjsKICB9IGludGVnZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBsb25nIGxvbmcgdmFsdWVbNjRdOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIGxvbmcgKnZhbHVlX3B0cjsKICB9IGludGVnZXI2NDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHVuc2lnbmVkIGludCBpdGVtWzEyOF07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCAqaXRlbV9wdHI7CiAgfSBlbnVtZXJhdGVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgdW5zaWduZWQgY2hhciBkYXRhWzUxMl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgKmRhdGFfcHRyOwogIH0gYnl0ZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzbmRfYWVzX2llYzk1OCBpZWM5NTg7CiAgfSB2YWx1ZTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRpbWVzcGVjIHRzdGFtcDsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzEyOC1zaXplb2Yoc3RydWN0IHRpbWVzcGVjKV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKIHN0cnVjdCBzbmRfY3RsX3RsdiB7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBudW1pZDsKICB1bnNpZ25lZCBpbnQgbGVuZ3RoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdGx2WzBdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QVkVSU0lPTiBfSU9SKCdVJywgMHgwMCwgaW50KQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfQ0FSRF9JTkZPIF9JT1IoJ1UnLCAweDAxLCBzdHJ1Y3Qgc25kX2N0bF9jYXJkX2luZm8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9MSVNUIF9JT1dSKCdVJywgMHgxMCwgc3RydWN0IHNuZF9jdGxfZWxlbV9saXN0KQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9JTkZPIF9JT1dSKCdVJywgMHgxMSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVBRCBfSU9XUignVScsIDB4MTIsIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUpCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1dSSVRFIF9JT1dSKCdVJywgMHgxMywgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX0xPQ0sgX0lPVygnVScsIDB4MTQsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1VOTE9DSyBfSU9XKCdVJywgMHgxNSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9TVUJTQ1JJQkVfRVZFTlRTIF9JT1dSKCdVJywgMHgxNiwgaW50KQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9BREQgX0lPV1IoJ1UnLCAweDE3LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9SRVBMQUNFIF9JT1dSKCdVJywgMHgxOCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9SRU1PVkUgX0lPV1IoJ1UnLCAweDE5LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9SRUFEIF9JT1dSKCdVJywgMHgxYSwgc3RydWN0IHNuZF9jdGxfdGx2KQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfVExWX1dSSVRFIF9JT1dSKCdVJywgMHgxYiwgc3RydWN0IHNuZF9jdGxfdGx2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9DT01NQU5EIF9JT1dSKCdVJywgMHgxYywgc3RydWN0IHNuZF9jdGxfdGx2KQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfSFdERVBfTkVYVF9ERVZJQ0UgX0lPV1IoJ1UnLCAweDIwLCBpbnQpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfSFdERVBfSU5GTyBfSU9SKCdVJywgMHgyMSwgc3RydWN0IHNuZF9od2RlcF9pbmZvKQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUENNX05FWFRfREVWSUNFIF9JT1IoJ1UnLCAweDMwLCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUENNX0lORk8gX0lPV1IoJ1UnLCAweDMxLCBzdHJ1Y3Qgc25kX3BjbV9pbmZvKQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUENNX1BSRUZFUl9TVUJERVZJQ0UgX0lPVygnVScsIDB4MzIsIGludCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9SQVdNSURJX05FWFRfREVWSUNFIF9JT1dSKCdVJywgMHg0MCwgaW50KQogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUkFXTUlESV9JTkZPIF9JT1dSKCdVJywgMHg0MSwgc3RydWN0IHNuZF9yYXdtaWRpX2luZm8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUkFXTUlESV9QUkVGRVJfU1VCREVWSUNFIF9JT1coJ1UnLCAweDQyLCBpbnQpCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QT1dFUiBfSU9XUignVScsIDB4ZDAsIGludCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QT1dFUl9TVEFURSBfSU9SKCdVJywgMHhkMSwgaW50KQogZW51bSBzbmRydl9jdGxfZXZlbnRfdHlwZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNORFJWX0NUTF9FVkVOVF9FTEVNID0gMCwKICBTTkRSVl9DVExfRVZFTlRfTEFTVCA9IFNORFJWX0NUTF9FVkVOVF9FTEVNLAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFICgxPDwwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTyAoMTw8MSkKICNkZWZpbmUgU05EUlZfQ1RMX0VWRU5UX01BU0tfQUREICgxPDwyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0VWRU5UX01BU0tfVExWICgxPDwzKQogI2RlZmluZSBTTkRSVl9DVExfRVZFTlRfTUFTS19SRU1PVkUgKH4wVSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX2N0bF9ldmVudCB7CiAgaW50IHR5cGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbWFzazsKICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkIGlkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGVsZW07CiAgdW5zaWduZWQgY2hhciBkYXRhOFs2MF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gZGF0YTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9OT05FICIiCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX1BMQVlCQUNLICJQbGF5YmFjayAiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9DQVBUVVJFICJDYXB0dXJlICIKICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X05PTkUgIiIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9TV0lUQ0ggIlN3aXRjaCIKICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X1ZPTFVNRSAiVm9sdW1lIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X0RFRkFVTFQgIkRlZmF1bHQiCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9NQVNLICJNYXNrIgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X0NPTl9NQVNLICJDb24gTWFzayIKICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4X1BST19NQVNLICJQcm8gTWFzayIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9QQ01fU1RSRUFNICJQQ00gU3RyZWFtIgogI2RlZmluZSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoZXhwbCxkaXJlY3Rpb24sd2hhdCkgIklFQzk1OCAiIGV4cGwgU05EUlZfQ1RMX05BTUVfIyNkaXJlY3Rpb24gU05EUlZfQ1RMX05BTUVfSUVDOTU4XyMjd2hhdAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9jb21wcmVzc19vZmZsb2FkLmggYi9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2NvbXByZXNzX29mZmxvYWQuaAppbmRleCBjMTQxYjdhLi41YjA2NzQxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2NvbXByZXNzX29mZmxvYWQuaAorKysgYi9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2NvbXByZXNzX29mZmxvYWQuaApAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZC5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxzb3VuZC9jb21wcmVzc19wYXJhbXMuaD4KLSNkZWZpbmUgU05EUlZfQ09NUFJFU1NfVkVSU0lPTiBTTkRSVl9QUk9UT0NPTF9WRVJTSU9OKDAsIDEsIDEpCisjZGVmaW5lIFNORFJWX0NPTVBSRVNTX1ZFUlNJT04gU05EUlZfUFJPVE9DT0xfVkVSU0lPTigwLCAxLCAyKQogc3RydWN0IHNuZF9jb21wcmVzc2VkX2J1ZmZlciB7CiAgX191MzIgZnJhZ21lbnRfc2l6ZTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC0zOCw4ICszOCw4IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJ5dGVfb2Zmc2V0OwogIF9fdTMyIGNvcGllZF90b3RhbDsKLSBzbmRfcGNtX3VmcmFtZXNfdCBwY21fZnJhbWVzOwotIHNuZF9wY21fdWZyYW1lc190IHBjbV9pb19mcmFtZXM7CisgX191MzIgcGNtX2ZyYW1lczsKKyBfX3UzMiBwY21faW9fZnJhbWVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzYW1wbGluZ19yYXRlOwogfTsKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvc291bmQvY29tcHJlc3NfcGFyYW1zLmggYi9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2NvbXByZXNzX3BhcmFtcy5oCmluZGV4IDBiY2U5YTAuLjhhYTBiZmUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL3VhcGkvc291bmQvY29tcHJlc3NfcGFyYW1zLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9jb21wcmVzc19wYXJhbXMuaApAQCAtMjMsMjIxICsyMywyMjMgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1BWF9OVU1fQ09ERUNfREVTQ1JJUFRPUlMgMzIKICNkZWZpbmUgTUFYX05VTV9CSVRSQVRFUyAzMgorI2RlZmluZSBNQVhfTlVNX1NBTVBMRV9SQVRFUyAzMgogI2RlZmluZSBTTkRfQVVESU9DT0RFQ19QQ00gKChfX3UzMikgMHgwMDAwMDAwMSkKLSNkZWZpbmUgU05EX0FVRElPQ09ERUNfTVAzICgoX191MzIpIDB4MDAwMDAwMDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9DT0RFQ19NUDMgKChfX3UzMikgMHgwMDAwMDAwMikKICNkZWZpbmUgU05EX0FVRElPQ09ERUNfQU1SICgoX191MzIpIDB4MDAwMDAwMDMpCiAjZGVmaW5lIFNORF9BVURJT0NPREVDX0FNUldCICgoX191MzIpIDB4MDAwMDAwMDQpCiAjZGVmaW5lIFNORF9BVURJT0NPREVDX0FNUldCUExVUyAoKF9fdTMyKSAweDAwMDAwMDA1KQotI2RlZmluZSBTTkRfQVVESU9DT0RFQ19BQUMgKChfX3UzMikgMHgwMDAwMDAwNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT0NPREVDX0FBQyAoKF9fdTMyKSAweDAwMDAwMDA2KQogI2RlZmluZSBTTkRfQVVESU9DT0RFQ19XTUEgKChfX3UzMikgMHgwMDAwMDAwNykKICNkZWZpbmUgU05EX0FVRElPQ09ERUNfUkVBTCAoKF9fdTMyKSAweDAwMDAwMDA4KQogI2RlZmluZSBTTkRfQVVESU9DT0RFQ19WT1JCSVMgKChfX3UzMikgMHgwMDAwMDAwOSkKLSNkZWZpbmUgU05EX0FVRElPQ09ERUNfRkxBQyAoKF9fdTMyKSAweDAwMDAwMDBBKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfRkxBQyAoKF9fdTMyKSAweDAwMDAwMDBBKQogI2RlZmluZSBTTkRfQVVESU9DT0RFQ19JRUM2MTkzNyAoKF9fdTMyKSAweDAwMDAwMDBCKQogI2RlZmluZSBTTkRfQVVESU9DT0RFQ19HNzIzXzEgKChfX3UzMikgMHgwMDAwMDAwQykKICNkZWZpbmUgU05EX0FVRElPQ09ERUNfRzcyOSAoKF9fdTMyKSAweDAwMDAwMDBEKQotI2RlZmluZSBTTkRfQVVESU9DT0RFQ19NQVggU05EX0FVRElPQ09ERUNfRzcyOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfTUFYIFNORF9BVURJT0NPREVDX0c3MjkKICNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9QQ00gKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPQ0hBTk1PREVfTVAzX01PTk8gKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPQ0hBTk1PREVfTVAzX1NURVJFTyAoKF9fdTMyKSAweDAwMDAwMDAyKQotI2RlZmluZSBTTkRfQVVESU9DSEFOTU9ERV9NUDNfSk9JTlRTVEVSRU8gKChfX3UzMikgMHgwMDAwMDAwNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT0NIQU5NT0RFX01QM19KT0lOVFNURVJFTyAoKF9fdTMyKSAweDAwMDAwMDA0KQogI2RlZmluZSBTTkRfQVVESU9DSEFOTU9ERV9NUDNfRFVBTCAoKF9fdTMyKSAweDAwMDAwMDA4KQogI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX0FNUiAoKF9fdTMyKSAweDAwMDAwMDAxKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0FNUl9EVFhfT0ZGICgoX191MzIpIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFNORF9BVURJT01PREVfQU1SX1ZBRDEgKChfX3UzMikgMHgwMDAwMDAwMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfQU1SX1ZBRDEgKChfX3UzMikgMHgwMDAwMDAwMikKICNkZWZpbmUgU05EX0FVRElPTU9ERV9BTVJfVkFEMiAoKF9fdTMyKSAweDAwMDAwMDA0KQogI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfVU5ERUZJTkVEICgoX191MzIpIDB4MDAwMDAwMDApCiAjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9DT05GT1JNQU5DRSAoKF9fdTMyKSAweDAwMDAwMDAxKQotI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfSUYxICgoX191MzIpIDB4MDAwMDAwMDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfSUYxICgoX191MzIpIDB4MDAwMDAwMDIpCiAjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9JRjIgKChfX3UzMikgMHgwMDAwMDAwNCkKICNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX0ZTRiAoKF9fdTMyKSAweDAwMDAwMDA4KQogI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfUlRQUEFZTE9BRCAoKF9fdTMyKSAweDAwMDAwMDEwKQotI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfSVRVICgoX191MzIpIDB4MDAwMDAwMjApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfSVRVICgoX191MzIpIDB4MDAwMDAwMjApCiAjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfQU1SV0IgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9BTVJXQl9EVFhfT0ZGICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT01PREVfQU1SV0JfVkFEMSAoKF9fdTMyKSAweDAwMDAwMDAyKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX0FNUldCX1ZBRDIgKChfX3UzMikgMHgwMDAwMDAwNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfQU1SV0JfVkFEMiAoKF9fdTMyKSAweDAwMDAwMDA0KQogI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX0FNUldCUExVUyAoKF9fdTMyKSAweDAwMDAwMDAxKQogI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX0FBQyAoKF9fdTMyKSAweDAwMDAwMDAxKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19NQUlOICgoX191MzIpIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFNORF9BVURJT01PREVfQUFDX0xDICgoX191MzIpIDB4MDAwMDAwMDIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19MQyAoKF9fdTMyKSAweDAwMDAwMDAyKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19TU1IgKChfX3UzMikgMHgwMDAwMDAwNCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfTFRQICgoX191MzIpIDB4MDAwMDAwMDgpCiAjZGVmaW5lIFNORF9BVURJT01PREVfQUFDX0hFICgoX191MzIpIDB4MDAwMDAwMTApCi0jZGVmaW5lIFNORF9BVURJT01PREVfQUFDX1NDQUxBQkxFICgoX191MzIpIDB4MDAwMDAwMjApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19TQ0FMQUJMRSAoKF9fdTMyKSAweDAwMDAwMDIwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19FUkxDICgoX191MzIpIDB4MDAwMDAwNDApCiAjZGVmaW5lIFNORF9BVURJT01PREVfQUFDX0xEICgoX191MzIpIDB4MDAwMDAwODApCiAjZGVmaW5lIFNORF9BVURJT01PREVfQUFDX0hFX1BTICgoX191MzIpIDB4MDAwMDAxMDApCi0jZGVmaW5lIFNORF9BVURJT01PREVfQUFDX0hFX01QUyAoKF9fdTMyKSAweDAwMDAwMjAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfSEVfTVBTICgoX191MzIpIDB4MDAwMDAyMDApCiAjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9NUDJBRFRTICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9NUDRBRFRTICgoX191MzIpIDB4MDAwMDAwMDIpCiAjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9NUDRMT0FTICgoX191MzIpIDB4MDAwMDAwMDQpCi0jZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9NUDRMQVRNICgoX191MzIpIDB4MDAwMDAwMDgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfTVA0TEFUTSAoKF9fdTMyKSAweDAwMDAwMDA4KQogI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfQURJRiAoKF9fdTMyKSAweDAwMDAwMDEwKQogI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfTVA0RkYgKChfX3UzMikgMHgwMDAwMDAyMCkKICNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX1JBVyAoKF9fdTMyKSAweDAwMDAwMDQwKQotI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX1dNQTcgKChfX3UzMikgMHgwMDAwMDAwMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfV01BNyAoKF9fdTMyKSAweDAwMDAwMDAxKQogI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX1dNQTggKChfX3UzMikgMHgwMDAwMDAwMikKICNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9XTUE5ICgoX191MzIpIDB4MDAwMDAwMDQpCiAjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfV01BMTAgKChfX3UzMikgMHgwMDAwMDAwOCkKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9XTUFfTEVWRUwxICgoX191MzIpIDB4MDAwMDAwMDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX1dNQV9MRVZFTDEgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9XTUFfTEVWRUwyICgoX191MzIpIDB4MDAwMDAwMDIpCiAjZGVmaW5lIFNORF9BVURJT01PREVfV01BX0xFVkVMMyAoKF9fdTMyKSAweDAwMDAwMDA0KQogI2RlZmluZSBTTkRfQVVESU9NT0RFX1dNQV9MRVZFTDQgKChfX3UzMikgMHgwMDAwMDAwOCkKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9XTUFQUk9fTEVWRUxNMCAoKF9fdTMyKSAweDAwMDAwMDEwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9XTUFQUk9fTEVWRUxNMCAoKF9fdTMyKSAweDAwMDAwMDEwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX1dNQVBST19MRVZFTE0xICgoX191MzIpIDB4MDAwMDAwMjApCiAjZGVmaW5lIFNORF9BVURJT01PREVfV01BUFJPX0xFVkVMTTIgKChfX3UzMikgMHgwMDAwMDA0MCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9XTUFQUk9fTEVWRUxNMyAoKF9fdTMyKSAweDAwMDAwMDgwKQotI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfV01BX0FTRiAoKF9fdTMyKSAweDAwMDAwMDAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX1dNQV9BU0YgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX1dNQV9OT0FTRl9IRFIgKChfX3UzMikgMHgwMDAwMDAwMikKICNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9SRUFMQVVESU8gKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9SRUFMQVVESU9fRzIgKChfX3UzMikgMHgwMDAwMDAwMSkKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9SRUFMQVVESU9fOCAoKF9fdTMyKSAweDAwMDAwMDAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9SRUFMQVVESU9fOCAoKF9fdTMyKSAweDAwMDAwMDAyKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX1JFQUxBVURJT18xMCAoKF9fdTMyKSAweDAwMDAwMDA0KQogI2RlZmluZSBTTkRfQVVESU9NT0RFX1JFQUxBVURJT19TVVJST1VORCAoKF9fdTMyKSAweDAwMDAwMDA4KQogI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX1ZPUkJJUyAoKF9fdTMyKSAweDAwMDAwMDAxKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX1ZPUkJJUyAoKF9fdTMyKSAweDAwMDAwMDAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9WT1JCSVMgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9GTEFDICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT01PREVfRkxBQ19MRVZFTDAgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9GTEFDX0xFVkVMMSAoKF9fdTMyKSAweDAwMDAwMDAyKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX0ZMQUNfTEVWRUwyICgoX191MzIpIDB4MDAwMDAwMDQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0ZMQUNfTEVWRUwyICgoX191MzIpIDB4MDAwMDAwMDQpCiAjZGVmaW5lIFNORF9BVURJT01PREVfRkxBQ19MRVZFTDMgKChfX3UzMikgMHgwMDAwMDAwOCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9GTEFDX0xFVkVMNCAoKF9fdTMyKSAweDAwMDAwMDEwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0ZMQUNfTEVWRUw1ICgoX191MzIpIDB4MDAwMDAwMjApCi0jZGVmaW5lIFNORF9BVURJT01PREVfRkxBQ19MRVZFTDYgKChfX3UzMikgMHgwMDAwMDA0MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfRkxBQ19MRVZFTDYgKChfX3UzMikgMHgwMDAwMDA0MCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9GTEFDX0xFVkVMNyAoKF9fdTMyKSAweDAwMDAwMDgwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0ZMQUNfTEVWRUw4ICgoX191MzIpIDB4MDAwMDAxMDApCiAjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9GTEFDICgoX191MzIpIDB4MDAwMDAwMDEpCi0jZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9GTEFDX09HRyAoKF9fdTMyKSAweDAwMDAwMDAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX0ZMQUNfT0dHICgoX191MzIpIDB4MDAwMDAwMDIpCiAjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfSUVDNjE5MzcgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9JRUM2MTkzN19TUERJRiAoKF9fdTMyKSAweDAwMDAwMDAyKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19SRUZfU1RSRUFNX0hFQURFUiAoKF9fdTMyKSAweDAwMDAwMDAwKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19MUENNICgoX191MzIpIDB4MDAwMDAwMDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19MUENNICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0FDMyAoKF9fdTMyKSAweDAwMDAwMDAyKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19NUEVHMSAoKF9fdTMyKSAweDAwMDAwMDA0KQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19NUDMgKChfX3UzMikgMHgwMDAwMDAwOCkKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfTVBFRzIgKChfX3UzMikgMHgwMDAwMDAxMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX01QRUcyICgoX191MzIpIDB4MDAwMDAwMTApCiAjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0FBQ0xDICgoX191MzIpIDB4MDAwMDAwMjApCiAjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0RUUyAoKF9fdTMyKSAweDAwMDAwMDQwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19BVFJBQyAoKF9fdTMyKSAweDAwMDAwMDgwKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19TQUNEICgoX191MzIpIDB4MDAwMDAxMDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19TQUNEICgoX191MzIpIDB4MDAwMDAxMDApCiAjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0VBQzMgKChfX3UzMikgMHgwMDAwMDIwMCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfRFRTX0hEICgoX191MzIpIDB4MDAwMDA0MDApCiAjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX01MUCAoKF9fdTMyKSAweDAwMDAwODAwKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19EU1QgKChfX3UzMikgMHgwMDAwMTAwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0RTVCAoKF9fdTMyKSAweDAwMDAxMDAwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19XTUFQUk8gKChfX3UzMikgMHgwMDAwMjAwMCkKICNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfUkVGX0NYVCAoKF9fdTMyKSAweDAwMDA0MDAwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19IRV9BQUMgKChfX3UzMikgMHgwMDAwODAwMCkKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfSEVfQUFDMiAoKF9fdTMyKSAweDAwMDEwMDAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfSEVfQUFDMiAoKF9fdTMyKSAweDAwMDEwMDAwKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19NUEVHX1NVUlJPVU5EICgoX191MzIpIDB4MDAwMjAwMDApCiAjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfRzcyM18xICgoX191MzIpIDB4MDAwMDAwMDEpCiAjZGVmaW5lIFNORF9BVURJT01PREVfRzcyM18xX0FOTkVYX0EgKChfX3UzMikgMHgwMDAwMDAwMSkKLSNkZWZpbmUgU05EX0FVRElPTU9ERV9HNzIzXzFfQU5ORVhfQiAoKF9fdTMyKSAweDAwMDAwMDAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9HNzIzXzFfQU5ORVhfQiAoKF9fdTMyKSAweDAwMDAwMDAyKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0c3MjNfMV9BTk5FWF9DICgoX191MzIpIDB4MDAwMDAwMDQpCiAjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfRzcyOSAoKF9fdTMyKSAweDAwMDAwMDAxKQogI2RlZmluZSBTTkRfQVVESU9NT0RFX0c3MjlfQU5ORVhfQSAoKF9fdTMyKSAweDAwMDAwMDAxKQotI2RlZmluZSBTTkRfQVVESU9NT0RFX0c3MjlfQU5ORVhfQiAoKF9fdTMyKSAweDAwMDAwMDAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9HNzI5X0FOTkVYX0IgKChfX3UzMikgMHgwMDAwMDAwMikKICNkZWZpbmUgU05EX1JBVEVDT05UUk9MTU9ERV9DT05TVEFOVEJJVFJBVEUgKChfX3UzMikgMHgwMDAwMDAwMSkKICNkZWZpbmUgU05EX1JBVEVDT05UUk9MTU9ERV9WQVJJQUJMRUJJVFJBVEUgKChfX3UzMikgMHgwMDAwMDAwMikKIHN0cnVjdCBzbmRfZW5jX3dtYSB7Ci0gX191MzIgc3VwZXJfYmxvY2tfYWxpZ247CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHN1cGVyX2Jsb2NrX2FsaWduOwogfTsKIHN0cnVjdCBzbmRfZW5jX3ZvcmJpcyB7CiAgX19zMzIgcXVhbGl0eTsKLSBfX3UzMiBtYW5hZ2VkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBtYW5hZ2VkOwogIF9fdTMyIG1heF9iaXRfcmF0ZTsKICBfX3UzMiBtaW5fYml0X3JhdGU7CiAgX191MzIgZG93bm1peDsKLX07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKIHN0cnVjdCBzbmRfZW5jX3JlYWwgewogIF9fdTMyIHF1YW50X2JpdHM7CiAgX191MzIgc3RhcnRfcmVnaW9uOwotIF9fdTMyIG51bV9yZWdpb25zOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBudW1fcmVnaW9uczsKIH07CiBzdHJ1Y3Qgc25kX2VuY19mbGFjIHsKICBfX3UzMiBudW07Ci0gX191MzIgZ2FpbjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZ2FpbjsKIH07CiBzdHJ1Y3Qgc25kX2VuY19nZW5lcmljIHsKICBfX3UzMiBidzsKLSBfX3MzMiByZXNlcnZlZFsxNV07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczMyIHJlc2VydmVkWzE1XTsKIH07CiB1bmlvbiBzbmRfY29kZWNfb3B0aW9ucyB7CiAgc3RydWN0IHNuZF9lbmNfd21hIHdtYTsKLSBzdHJ1Y3Qgc25kX2VuY192b3JiaXMgdm9yYmlzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3Qgc25kX2VuY192b3JiaXMgdm9yYmlzOwogIHN0cnVjdCBzbmRfZW5jX3JlYWwgcmVhbDsKICBzdHJ1Y3Qgc25kX2VuY19mbGFjIGZsYWM7CiAgc3RydWN0IHNuZF9lbmNfZ2VuZXJpYyBnZW5lcmljOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Owogc3RydWN0IHNuZF9jb2RlY19kZXNjIHsKICBfX3UzMiBtYXhfY2g7Ci0gX191MzIgc2FtcGxlX3JhdGVzOwotIF9fdTMyIGJpdF9yYXRlW01BWF9OVU1fQklUUkFURVNdOworIF9fdTMyIHNhbXBsZV9yYXRlc1tNQVhfTlVNX1NBTVBMRV9SQVRFU107CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG51bV9zYW1wbGVfcmF0ZXM7CisgX191MzIgYml0X3JhdGVbTUFYX05VTV9CSVRSQVRFU107CiAgX191MzIgbnVtX2JpdHJhdGVzOwogIF9fdTMyIHJhdGVfY29udHJvbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcHJvZmlsZXM7CiAgX191MzIgbW9kZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZvcm1hdHM7CiAgX191MzIgbWluX2J1ZmZlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbMTVdOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX2NvZGVjIHsKICBfX3UzMiBpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY2hfaW47CiAgX191MzIgY2hfb3V0OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzYW1wbGVfcmF0ZTsKICBfX3UzMiBiaXRfcmF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmF0ZV9jb250cm9sOwogIF9fdTMyIHByb2ZpbGU7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxldmVsOwogIF9fdTMyIGNoX21vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZvcm1hdDsKICBfX3UzMiBhbGlnbjsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gc25kX2NvZGVjX29wdGlvbnMgb3B0aW9uczsKICBfX3UzMiByZXNlcnZlZFszXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9maXJld2lyZS5oIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9maXJld2lyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMGZkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2ZpcmV3aXJlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfVUFQSV9TT1VORF9GSVJFV0lSRV9IX0lOQ0xVREVECisjZGVmaW5lIF9VQVBJX1NPVU5EX0ZJUkVXSVJFX0hfSU5DTFVERUQKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2RlZmluZSBTTkRSVl9GSVJFV0lSRV9FVkVOVF9MT0NLX1NUQVRVUyAweDAwMDAxMGNjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9GSVJFV0lSRV9FVkVOVF9ESUNFX05PVElGSUNBVElPTiAweGQxY2UwMDRlCitzdHJ1Y3Qgc25kX2ZpcmV3aXJlX2V2ZW50X2NvbW1vbiB7CisgdW5zaWduZWQgaW50IHR5cGU7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBzbmRfZmlyZXdpcmVfZXZlbnRfbG9ja19zdGF0dXMgeworIHVuc2lnbmVkIGludCB0eXBlOworIHVuc2lnbmVkIGludCBzdGF0dXM7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBzbmRfZmlyZXdpcmVfZXZlbnRfZGljZV9ub3RpZmljYXRpb24geworIHVuc2lnbmVkIGludCB0eXBlOworIHVuc2lnbmVkIGludCBub3RpZmljYXRpb247Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3VuaW9uIHNuZF9maXJld2lyZV9ldmVudCB7Cisgc3RydWN0IHNuZF9maXJld2lyZV9ldmVudF9jb21tb24gY29tbW9uOworIHN0cnVjdCBzbmRfZmlyZXdpcmVfZXZlbnRfbG9ja19zdGF0dXMgbG9ja19zdGF0dXM7Cisgc3RydWN0IHNuZF9maXJld2lyZV9ldmVudF9kaWNlX25vdGlmaWNhdGlvbiBkaWNlX25vdGlmaWNhdGlvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBTTkRSVl9GSVJFV0lSRV9JT0NUTF9HRVRfSU5GTyBfSU9SKCdIJywgMHhmOCwgc3RydWN0IHNuZF9maXJld2lyZV9nZXRfaW5mbykKKyNkZWZpbmUgU05EUlZfRklSRVdJUkVfSU9DVExfTE9DSyBfSU8oJ0gnLCAweGY5KQorI2RlZmluZSBTTkRSVl9GSVJFV0lSRV9JT0NUTF9VTkxPQ0sgX0lPKCdIJywgMHhmYSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0ZJUkVXSVJFX1RZUEVfRElDRSAxCitzdHJ1Y3Qgc25kX2ZpcmV3aXJlX2dldF9pbmZvIHsKKyB1bnNpZ25lZCBpbnQgdHlwZTsKKyB1bnNpZ25lZCBpbnQgY2FyZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciBndWlkWzhdOworIGNoYXIgZGV2aWNlX25hbWVbMTZdOworfTsKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkvc291bmQvaGRzcG0uaCBiL2xpYmMva2VybmVsL3VhcGkvc291bmQvaGRzcG0uaAppbmRleCA2ZmRmYThmLi44YjM2ODhmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL3NvdW5kL2hkc3BtLmgKKysrIGIvbGliYy9rZXJuZWwvdWFwaS9zb3VuZC9oZHNwbS5oCkBAIC05NCw3ICs5NCw3IEBACiAgZW51bSBoZHNwbV9sdGNfZnJhbWUgZnJhbWU7CiAgZW51bSBoZHNwbV9sdGNfaW5wdXRfZm9ybWF0IGlucHV0X2Zvcm1hdDsKIH07Ci0jZGVmaW5lIFNORFJWX0hEU1BNX0lPQ1RMX0dFVF9MVEMgX0lPUignSCcsIDB4NDYsIHN0cnVjdCBoZHNwbV9taXhlcl9pb2N0bCkKKyNkZWZpbmUgU05EUlZfSERTUE1fSU9DVExfR0VUX0xUQyBfSU9SKCdIJywgMHg0Niwgc3RydWN0IGhkc3BtX2x0YykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGhkc3BtX3N5bmMgewogIGhkc3BtX3N5bmNfbm9fbG9jayA9IDAsCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC91YXBpL3ZpZGVvL2FkZi5oIGIvbGliYy9rZXJuZWwvdWFwaS92aWRlby9hZGYuaAppbmRleCAwNTdlYzQ2Li5mZTIzZTAxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC91YXBpL3ZpZGVvL2FkZi5oCisrKyBiL2xpYmMva2VybmVsL3VhcGkvdmlkZW8vYWRmLmgKQEAgLTYyLDcgKzYyLDcgQEAKIHN0cnVjdCBhZGZfdnN5bmNfZXZlbnQgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgYWRmX2V2ZW50IGJhc2U7Ci0gX191NjQgdGltZXN0YW1wOworIF9fYWxpZ25lZF91NjQgdGltZXN0YW1wOwogfTsKIHN0cnVjdCBhZGZfaG90cGx1Z19ldmVudCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtNzcsMTIgKzc3LDEyIEBACiAgX191MzIgaDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZm9ybWF0OwotIF9fczY0IGZkW0FERl9NQVhfUExBTkVTXTsKKyBfX3MzMiBmZFtBREZfTUFYX1BMQU5FU107CiAgX191MzIgb2Zmc2V0W0FERl9NQVhfUExBTkVTXTsKICBfX3UzMiBwaXRjaFtBREZfTUFYX1BMQU5FU107CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbl9wbGFuZXM7Ci0gX19zNjQgYWNxdWlyZV9mZW5jZTsKKyBfX3MzMiBhY3F1aXJlX2ZlbmNlOwogfTsKICNkZWZpbmUgQURGX01BWF9CVUZGRVJTICg0MDk2IC8gc2l6ZW9mKHN0cnVjdCBhZGZfYnVmZmVyX2NvbmZpZykpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtOTQsNyArOTQsNyBAQAogIHN0cnVjdCBhZGZfYnVmZmVyX2NvbmZpZyBfX3VzZXIgKmJ1ZnM7CiAgc2l6ZV90IGN1c3RvbV9kYXRhX3NpemU7CiAgdm9pZCBfX3VzZXIgKmN1c3RvbV9kYXRhOwotIF9fczY0IGNvbXBsZXRlX2ZlbmNlOworIF9fczMyIGNvbXBsZXRlX2ZlbmNlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIEFERl9NQVhfSU5URVJGQUNFUyAoNDA5NiAvIHNpemVvZihfX3UzMikpCkBAIC0xMDMsNyArMTAzLDcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgaDsKICBfX3UzMiBmb3JtYXQ7Ci0gX19zNjQgZmQ7CisgX19zMzIgZmQ7CiAgX191MzIgb2Zmc2V0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwaXRjaDsKQEAgLTExMSw3ICsxMTEsNyBAQAogc3RydWN0IGFkZl9zaW1wbGVfcG9zdF9jb25maWcgewogIHN0cnVjdCBhZGZfYnVmZmVyX2NvbmZpZyBidWY7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIF9fczY0IGNvbXBsZXRlX2ZlbmNlOworIF9fczMyIGNvbXBsZXRlX2ZlbmNlOwogfTsKIHN0cnVjdCBhZGZfYXR0YWNobWVudF9jb25maWcgewogIF9fdTMyIG92ZXJsYXlfZW5naW5lOwpAQCAtMTYxLDE4ICsxNjEsMjAgQEAKIH07CiAjZGVmaW5lIEFERl9NQVhfU1VQUE9SVEVEX0ZPUk1BVFMgKDQwOTYgLyBzaXplb2YoX191MzIpKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQURGX1NFVF9FVkVOVCBfSU9XKCdEJywgMCwgc3RydWN0IGFkZl9zZXRfZXZlbnQpCi0jZGVmaW5lIEFERl9CTEFOSyBfSU9XKCdEJywgMSwgX191OCkKLSNkZWZpbmUgQURGX1BPU1RfQ09ORklHIF9JT1coJ0QnLCAyLCBzdHJ1Y3QgYWRmX3Bvc3RfY29uZmlnKQotI2RlZmluZSBBREZfU0VUX01PREUgX0lPVygnRCcsIDMsIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbykKKyNkZWZpbmUgQURGX0lPQ1RMX1RZUEUgJ0QnCisjZGVmaW5lIEFERl9JT0NUTF9OUl9DVVNUT00gMTI4CisjZGVmaW5lIEFERl9TRVRfRVZFTlQgX0lPVyhBREZfSU9DVExfVFlQRSwgMCwgc3RydWN0IGFkZl9zZXRfZXZlbnQpCisjZGVmaW5lIEFERl9CTEFOSyBfSU9XKEFERl9JT0NUTF9UWVBFLCAxLCBfX3U4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQURGX0dFVF9ERVZJQ0VfREFUQSBfSU9SKCdEJywgNCwgc3RydWN0IGFkZl9kZXZpY2VfZGF0YSkKLSNkZWZpbmUgQURGX0dFVF9JTlRFUkZBQ0VfREFUQSBfSU9SKCdEJywgNSwgc3RydWN0IGFkZl9pbnRlcmZhY2VfZGF0YSkKLSNkZWZpbmUgQURGX0dFVF9PVkVSTEFZX0VOR0lORV9EQVRBICAgX0lPUignRCcsIDYsIHN0cnVjdCBhZGZfb3ZlcmxheV9lbmdpbmVfZGF0YSkKLSNkZWZpbmUgQURGX1NJTVBMRV9QT1NUX0NPTkZJRyBfSU9XKCdEJywgNywgc3RydWN0IGFkZl9zaW1wbGVfcG9zdF9jb25maWcpCisjZGVmaW5lIEFERl9QT1NUX0NPTkZJRyBfSU9XKEFERl9JT0NUTF9UWVBFLCAyLCBzdHJ1Y3QgYWRmX3Bvc3RfY29uZmlnKQorI2RlZmluZSBBREZfU0VUX01PREUgX0lPVyhBREZfSU9DVExfVFlQRSwgMywgICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8pCisjZGVmaW5lIEFERl9HRVRfREVWSUNFX0RBVEEgX0lPUihBREZfSU9DVExfVFlQRSwgNCwgc3RydWN0IGFkZl9kZXZpY2VfZGF0YSkKKyNkZWZpbmUgQURGX0dFVF9JTlRFUkZBQ0VfREFUQSBfSU9SKEFERl9JT0NUTF9UWVBFLCA1LCAgIHN0cnVjdCBhZGZfaW50ZXJmYWNlX2RhdGEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBBREZfU0lNUExFX0JVRkZFUl9BTExPQyBfSU9XKCdEJywgOCwgc3RydWN0IGFkZl9zaW1wbGVfYnVmZmVyX2FsbG9jKQotI2RlZmluZSBBREZfQVRUQUNIIF9JT1coJ0QnLCA5LCBzdHJ1Y3QgYWRmX2F0dGFjaG1lbnRfY29uZmlnKQotI2RlZmluZSBBREZfREVUQUNIIF9JT1coJ0QnLCAxMCwgc3RydWN0IGFkZl9hdHRhY2htZW50X2NvbmZpZykKKyNkZWZpbmUgQURGX0dFVF9PVkVSTEFZX0VOR0lORV9EQVRBICAgX0lPUihBREZfSU9DVExfVFlQRSwgNiwgICBzdHJ1Y3QgYWRmX292ZXJsYXlfZW5naW5lX2RhdGEpCisjZGVmaW5lIEFERl9TSU1QTEVfUE9TVF9DT05GSUcgX0lPVyhBREZfSU9DVExfVFlQRSwgNywgICBzdHJ1Y3QgYWRmX3NpbXBsZV9wb3N0X2NvbmZpZykKKyNkZWZpbmUgQURGX1NJTVBMRV9CVUZGRVJfQUxMT0MgX0lPVyhBREZfSU9DVExfVFlQRSwgOCwgICBzdHJ1Y3QgYWRmX3NpbXBsZV9idWZmZXJfYWxsb2MpCisjZGVmaW5lIEFERl9BVFRBQ0ggX0lPVyhBREZfSU9DVExfVFlQRSwgOSwgICBzdHJ1Y3QgYWRmX2F0dGFjaG1lbnRfY29uZmlnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQURGX0RFVEFDSCBfSU9XKEFERl9JT0NUTF9UWVBFLCAxMCwgICBzdHJ1Y3QgYWRmX2F0dGFjaG1lbnRfY29uZmlnKQogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdWFwaS94ZW4vZ250YWxsb2MuaCBiL2xpYmMva2VybmVsL3VhcGkveGVuL2dudGFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA3Njg0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkveGVuL2dudGFsbG9jLmgKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1BVQkxJQ19HTlRBTExPQ19IX18KKyNkZWZpbmUgX19MSU5VWF9QVUJMSUNfR05UQUxMT0NfSF9fCisjZGVmaW5lIElPQ1RMX0dOVEFMTE9DX0FMTE9DX0dSRUYgIF9JT0MoX0lPQ19OT05FLCAnRycsIDUsIHNpemVvZihzdHJ1Y3QgaW9jdGxfZ250YWxsb2NfYWxsb2NfZ3JlZikpCitzdHJ1Y3QgaW9jdGxfZ250YWxsb2NfYWxsb2NfZ3JlZiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQxNl90IGRvbWlkOworIHVpbnQxNl90IGZsYWdzOworIHVpbnQzMl90IGNvdW50OworIHVpbnQ2NF90IGluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MzJfdCBncmVmX2lkc1sxXTsKK307CisjZGVmaW5lIEdOVEFMTE9DX0ZMQUdfV1JJVEFCTEUgMQorI2RlZmluZSBJT0NUTF9HTlRBTExPQ19ERUFMTE9DX0dSRUYgIF9JT0MoX0lPQ19OT05FLCAnRycsIDYsIHNpemVvZihzdHJ1Y3QgaW9jdGxfZ250YWxsb2NfZGVhbGxvY19ncmVmKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgaW9jdGxfZ250YWxsb2NfZGVhbGxvY19ncmVmIHsKKyB1aW50NjRfdCBpbmRleDsKKyB1aW50MzJfdCBjb3VudDsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJT0NUTF9HTlRBTExPQ19TRVRfVU5NQVBfTk9USUZZICBfSU9DKF9JT0NfTk9ORSwgJ0cnLCA3LCBzaXplb2Yoc3RydWN0IGlvY3RsX2dudGFsbG9jX3VubWFwX25vdGlmeSkpCitzdHJ1Y3QgaW9jdGxfZ250YWxsb2NfdW5tYXBfbm90aWZ5IHsKKyB1aW50NjRfdCBpbmRleDsKKyB1aW50MzJfdCBhY3Rpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGV2ZW50X2NoYW5uZWxfcG9ydDsKK307CisjZGVmaW5lIFVOTUFQX05PVElGWV9DTEVBUl9CWVRFIDB4MQorI2RlZmluZSBVTk1BUF9OT1RJRllfU0VORF9FVkVOVCAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3VhcGkveGVuL2dudGRldi5oIGIvbGliYy9rZXJuZWwvdWFwaS94ZW4vZ250ZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhMmEzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3VhcGkveGVuL2dudGRldi5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9QVUJMSUNfR05UREVWX0hfXworI2RlZmluZSBfX0xJTlVYX1BVQkxJQ19HTlRERVZfSF9fCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dyYW50X3JlZiB7CisgdWludDMyX3QgZG9taWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IHJlZjsKK307CisjZGVmaW5lIElPQ1RMX0dOVERFVl9NQVBfR1JBTlRfUkVGICBfSU9DKF9JT0NfTk9ORSwgJ0cnLCAwLCBzaXplb2Yoc3RydWN0IGlvY3RsX2dudGRldl9tYXBfZ3JhbnRfcmVmKSkKK3N0cnVjdCBpb2N0bF9nbnRkZXZfbWFwX2dyYW50X3JlZiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGNvdW50OworIHVpbnQzMl90IHBhZDsKKyB1aW50NjRfdCBpbmRleDsKKyBzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dyYW50X3JlZiByZWZzWzFdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIElPQ1RMX0dOVERFVl9VTk1BUF9HUkFOVF9SRUYgIF9JT0MoX0lPQ19OT05FLCAnRycsIDEsIHNpemVvZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX2dyYW50X3JlZikpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX2dyYW50X3JlZiB7CisgdWludDY0X3QgaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQzMl90IGNvdW50OworIHVpbnQzMl90IHBhZDsKK307CisjZGVmaW5lIElPQ1RMX0dOVERFVl9HRVRfT0ZGU0VUX0ZPUl9WQUREUiAgX0lPQyhfSU9DX05PTkUsICdHJywgMiwgc2l6ZW9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfZ2V0X29mZnNldF9mb3JfdmFkZHIpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBpb2N0bF9nbnRkZXZfZ2V0X29mZnNldF9mb3JfdmFkZHIgeworIHVpbnQ2NF90IHZhZGRyOworIHVpbnQ2NF90IG9mZnNldDsKKyB1aW50MzJfdCBjb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgcGFkOworfTsKKyNkZWZpbmUgSU9DVExfR05UREVWX1NFVF9NQVhfR1JBTlRTICBfSU9DKF9JT0NfTk9ORSwgJ0cnLCAzLCBzaXplb2Yoc3RydWN0IGlvY3RsX2dudGRldl9zZXRfbWF4X2dyYW50cykpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X3NldF9tYXhfZ3JhbnRzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgY291bnQ7Cit9OworI2RlZmluZSBJT0NUTF9HTlRERVZfU0VUX1VOTUFQX05PVElGWSAgX0lPQyhfSU9DX05PTkUsICdHJywgNywgc2l6ZW9mKHN0cnVjdCBpb2N0bF9nbnRkZXZfdW5tYXBfbm90aWZ5KSkKK3N0cnVjdCBpb2N0bF9nbnRkZXZfdW5tYXBfbm90aWZ5IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDY0X3QgaW5kZXg7CisgdWludDMyX3QgYWN0aW9uOworIHVpbnQzMl90IGV2ZW50X2NoYW5uZWxfcG9ydDsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVTk1BUF9OT1RJRllfQ0xFQVJfQllURSAweDEKKyNkZWZpbmUgVU5NQVBfTk9USUZZX1NFTkRfRVZFTlQgMHgyCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL2dldGhuYW1hZGRyLmMgYi9saWJjL25ldGJzZC9nZXRobmFtYWRkci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWU2NTc2Li4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL2dldGhuYW1hZGRyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDA1ICswLDAgQEAKLS8qCSROZXRCU0Q6IGdldGhuYW1hZGRyLmMsdiAxLjcwIDIwMDYvMDMvMjIgMDA6MDM6NTEgY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqICsrQ29weXJpZ2h0KysgMTk4NSwgMTk4OCwgMTk5MwotICogLQotICogQ29weXJpZ2h0IChjKSAxOTg1LCAxOTg4LCAxOTkzCi0gKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiAtCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAotICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLSAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAotICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAotICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCi0gKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLSAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCi0gKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLgotICogLQotICogLS1Db3B5cmlnaHQtLQotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxzeXMvdW4uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0jaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKLSNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNsdWRlIDxzeXNsb2cuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2lmbmRlZiBMT0dfQVVUSAotIyBkZWZpbmUgTE9HX0FVVEggMAotI2VuZGlmCi0KLSNkZWZpbmUgTVVMVElfUFRSU19BUkVfQUxJQVNFUyAxCS8qIFhYWCAtIGV4cGVyaW1lbnRhbCAqLwotCi0jaW5jbHVkZSAibnNzd2l0Y2guaCIKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLy8gVGhpcyBzaG91bGQgYmUgc3luY2hyb25pemVkIHRvIFJlc3BvbnNlQ29kZS5oCi1zdGF0aWMgY29uc3QgaW50IERuc1Byb3h5UXVlcnlSZXN1bHQgPSAyMjI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGNvbnN0IEFza2VkRm9yR290W10gPQotCQkJICAiZ2V0aG9zdGJ5Ki5nZXRhbnN3ZXI6IGFza2VkIGZvciBcIiVzXCIsIGdvdCBcIiVzXCIiOwotCi0jZGVmaW5lCU1BWFBBQ0tFVAkoNjQqMTAyNCkKLQotdHlwZWRlZiB1bmlvbiB7Ci0gICAgSEVBREVSIGhkcjsKLSAgICB1X2NoYXIgYnVmW01BWFBBQ0tFVF07Ci19IHF1ZXJ5YnVmOwotCi10eXBlZGVmIHVuaW9uIHsKLSAgICBpbnQzMl90IGFsOwotICAgIGNoYXIgYWM7Ci19IGFsaWduOwotCi0jaWZkZWYgREVCVUcKLXN0YXRpYyB2b2lkIGRwcmludGYoY29uc3QgY2hhciAqLCByZXNfc3RhdGUsIC4uLikKLQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKF9fcHJpbnRmX18sIDEsIDMpKSk7Ci0jZW5kaWYKLXN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqZ2V0YW5zd2VyKGNvbnN0IHF1ZXJ5YnVmICosIGludCwgY29uc3QgY2hhciAqLCBpbnQsCi0gICAgcmVzX3N0YXRlKTsKLXN0YXRpYyB2b2lkIG1hcF92NHY2X2FkZHJlc3MoY29uc3QgY2hhciAqLCBjaGFyICopOwotc3RhdGljIHZvaWQgbWFwX3Y0djZfaG9zdGVudChzdHJ1Y3QgaG9zdGVudCAqLCBjaGFyICoqLCBjaGFyICopOwotc3RhdGljIHZvaWQgYWRkcnNvcnQoY2hhciAqKiwgaW50LCByZXNfc3RhdGUpOwotCi1zdGF0aWMgdm9pZCBfc2V0aHRlbnQoaW50KTsKLXN0YXRpYyB2b2lkIF9lbmRodGVudCh2b2lkKTsKLXN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqX2dldGh0ZW50KHZvaWQpOwotdm9pZCBodF9zZXRob3N0ZW50KGludCk7Ci12b2lkIGh0X2VuZGhvc3RlbnQodm9pZCk7Ci1zdHJ1Y3QgaG9zdGVudCAqaHRfZ2V0aG9zdGJ5bmFtZShjaGFyICopOwotc3RydWN0IGhvc3RlbnQgKmh0X2dldGhvc3RieWFkZHIoY29uc3QgY2hhciAqLCBpbnQsIGludCk7Ci12b2lkIGRuc19zZXJ2aWNlKHZvaWQpOwotI3VuZGVmIGRuX3NraXBuYW1lCi1pbnQgZG5fc2tpcG5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKTsKLXN0YXRpYyBpbnQgX2dldGh0YnlhZGRyKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKLXN0YXRpYyBpbnQgX2dldGh0YnluYW1lKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKLXN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqX2dldGh0YnluYW1lMihjb25zdCBjaGFyICosIGludCk7Ci1zdGF0aWMgaW50IF9kbnNfZ2V0aHRieWFkZHIodm9pZCAqLCB2b2lkICosIHZhX2xpc3QpOwotc3RhdGljIGludCBfZG5zX2dldGh0YnluYW1lKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKLQotc3RhdGljIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1lX2ludGVybmFsKGNvbnN0IGNoYXIgKiwgaW50LCByZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgaW50KTsKLQotc3RhdGljIGNvbnN0IG5zX3NyYyBkZWZhdWx0X2Ruc19maWxlc1tdID0gewotCXsgTlNTUkNfRklMRVMsIAlOU19TVUNDRVNTIH0sCi0JeyBOU1NSQ19ETlMsIAlOU19TVUNDRVNTIH0sCi0JeyAwLCAwIH0KLX07Ci0KLQotI2lmZGVmIERFQlVHCi1zdGF0aWMgdm9pZAotZHByaW50Zihjb25zdCBjaGFyICptc2csIHJlc19zdGF0ZSByZXMsIC4uLikKLXsKLQlhc3NlcnQobXNnICE9IE5VTEwpOwotCi0JaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykgewotCQlpbnQgc2F2ZSA9IGVycm5vOwotCQl2YV9saXN0IGFwOwotCi0JCXZhX3N0YXJ0IChhcCwgcmVzKTsKLQkJdnByaW50Zihtc2csIGFwKTsKLQkJdmFfZW5kIChhcCk7Ci0KLQkJZXJybm8gPSBzYXZlOwotCX0KLX0KLSNlbHNlCi0jIGRlZmluZSBkcHJpbnRmKG1zZywgcmVzLCBudW0pICgodm9pZCkwKSAvKm5hZGEqLwotI2VuZGlmCi0KLSNkZWZpbmUgQk9VTkRFRF9JTkNSKHgpIFwKLQlkbyB7IFwKLQkJQk9VTkRTX0NIRUNLKGNwLCAoeCkpOyBcCi0JCWNwICs9ICh4KTsgXAotCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQotCi0jZGVmaW5lIEJPVU5EU19DSEVDSyhwdHIsIGNvdW50KSBcCi0JZG8geyBcCi0JCWlmIChlb20gLSAocHRyKSA8IChjb3VudCkpIHsgXAotCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOyBcCi0JCQlyZXR1cm4gTlVMTDsgXAotCQl9IFwKLQl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKLWdldGFuc3dlcihjb25zdCBxdWVyeWJ1ZiAqYW5zd2VyLCBpbnQgYW5zbGVuLCBjb25zdCBjaGFyICpxbmFtZSwgaW50IHF0eXBlLAotICAgIHJlc19zdGF0ZSByZXMpCi17Ci0JY29uc3QgSEVBREVSICpocDsKLQljb25zdCB1X2NoYXIgKmNwOwotCWludCBuOwotCWNvbnN0IHVfY2hhciAqZW9tLCAqZXJkYXRhOwotCWNoYXIgKmJwLCAqKmFwLCAqKmhhcCwgKmVwOwotCWludCB0eXBlLCBjbGFzcywgYW5jb3VudCwgcWRjb3VudDsKLQlpbnQgaGF2ZWFuc3dlciwgaGFkX2Vycm9yOwotCWludCB0b29iaWcgPSAwOwotCWNoYXIgdGJ1ZltNQVhETkFNRV07Ci0JY29uc3QgY2hhciAqdG5hbWU7Ci0JaW50ICgqbmFtZV9vaykoY29uc3QgY2hhciAqKTsKLQlyZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKLQotCWFzc2VydChhbnN3ZXIgIT0gTlVMTCk7Ci0JYXNzZXJ0KHFuYW1lICE9IE5VTEwpOwotCi0JdG5hbWUgPSBxbmFtZTsKLQlycy0+aG9zdC5oX25hbWUgPSBOVUxMOwotCWVvbSA9IGFuc3dlci0+YnVmICsgYW5zbGVuOwotCXN3aXRjaCAocXR5cGUpIHsKLQljYXNlIFRfQToKLQljYXNlIFRfQUFBQToKLQkJbmFtZV9vayA9IHJlc19obm9rOwotCQlicmVhazsKLQljYXNlIFRfUFRSOgotCQluYW1lX29rID0gcmVzX2Rub2s7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBOVUxMOwkvKiBYWFggc2hvdWxkIGJlIGFib3J0KCk7ICovCi0JfQotCS8qCi0JICogZmluZCBmaXJzdCBzYXRpc2ZhY3RvcnkgYW5zd2VyCi0JICovCi0JaHAgPSAmYW5zd2VyLT5oZHI7Ci0JYW5jb3VudCA9IG50b2hzKGhwLT5hbmNvdW50KTsKLQlxZGNvdW50ID0gbnRvaHMoaHAtPnFkY291bnQpOwotCWJwID0gcnMtPmhvc3RidWY7Ci0JZXAgPSBycy0+aG9zdGJ1ZiArIHNpemVvZiBycy0+aG9zdGJ1ZjsKLQljcCA9IGFuc3dlci0+YnVmOwotCUJPVU5ERURfSU5DUihIRklYRURTWik7Ci0JaWYgKHFkY291bnQgIT0gMSkgewotCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCBicCwgZXAgLSBicCk7Ci0JaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykoYnApKSB7Ci0JCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCUJPVU5ERURfSU5DUihuICsgUUZJWEVEU1opOwotCWlmIChxdHlwZSA9PSBUX0EgfHwgcXR5cGUgPT0gVF9BQUFBKSB7Ci0JCS8qIHJlc19zZW5kKCkgaGFzIGFscmVhZHkgdmVyaWZpZWQgdGhhdCB0aGUgcXVlcnkgbmFtZSBpcyB0aGUKLQkJICogc2FtZSBhcyB0aGUgb25lIHdlIHNlbnQ7IHRoaXMganVzdCBnZXRzIHRoZSBleHBhbmRlZCBuYW1lCi0JCSAqIChpLmUuLCB3aXRoIHRoZSBzdWNjZWVkaW5nIHNlYXJjaC1kb21haW4gdGFja2VkIG9uKS4KLQkJICovCi0JCW4gPSBzdHJsZW4oYnApICsgMTsJCS8qIGZvciB0aGUgXDAgKi8KLQkJaWYgKG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKLQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCXJzLT5ob3N0LmhfbmFtZSA9IGJwOwotCQlicCArPSBuOwotCQkvKiBUaGUgcW5hbWUgY2FuIGJlIGFiYnJldmlhdGVkLCBidXQgaF9uYW1lIGlzIG5vdyBhYnNvbHV0ZS4gKi8KLQkJcW5hbWUgPSBycy0+aG9zdC5oX25hbWU7Ci0JfQotCWFwID0gcnMtPmhvc3RfYWxpYXNlczsKLQkqYXAgPSBOVUxMOwotCXJzLT5ob3N0LmhfYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7Ci0JaGFwID0gcnMtPmhfYWRkcl9wdHJzOwotCSpoYXAgPSBOVUxMOwotCXJzLT5ob3N0LmhfYWRkcl9saXN0ID0gcnMtPmhfYWRkcl9wdHJzOwotCWhhdmVhbnN3ZXIgPSAwOwotCWhhZF9lcnJvciA9IDA7Ci0Jd2hpbGUgKGFuY291bnQtLSA+IDAgJiYgY3AgPCBlb20gJiYgIWhhZF9lcnJvcikgewotCQluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCBicCwgZXAgLSBicCk7Ci0JCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKGJwKSkgewotCQkJaGFkX2Vycm9yKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQljcCArPSBuOwkJCS8qIG5hbWUgKi8KLQkJQk9VTkRTX0NIRUNLKGNwLCAzICogSU5UMTZTWiArIElOVDMyU1opOwotCQl0eXBlID0gX2dldHNob3J0KGNwKTsKLSAJCWNwICs9IElOVDE2U1o7CQkJLyogdHlwZSAqLwotCQljbGFzcyA9IF9nZXRzaG9ydChjcCk7Ci0gCQljcCArPSBJTlQxNlNaICsgSU5UMzJTWjsJLyogY2xhc3MsIFRUTCAqLwotCQluID0gX2dldHNob3J0KGNwKTsKLQkJY3AgKz0gSU5UMTZTWjsJCQkvKiBsZW4gKi8KLQkJQk9VTkRTX0NIRUNLKGNwLCBuKTsKLQkJZXJkYXRhID0gY3AgKyBuOwotCQlpZiAoY2xhc3MgIT0gQ19JTikgewotCQkJLyogWFhYIC0gZGVidWc/IHN5c2xvZz8gKi8KLQkJCWNwICs9IG47Ci0JCQljb250aW51ZTsJCS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KLQkJfQotCQlpZiAoKHF0eXBlID09IFRfQSB8fCBxdHlwZSA9PSBUX0FBQUEpICYmIHR5cGUgPT0gVF9DTkFNRSkgewotCQkJaWYgKGFwID49ICZycy0+aG9zdF9hbGlhc2VzW01BWEFMSUFTRVMtMV0pCi0JCQkJY29udGludWU7Ci0JCQluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCB0YnVmLCBzaXplb2YgdGJ1Zik7Ci0JCQlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKSh0YnVmKSkgewotCQkJCWhhZF9lcnJvcisrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJY3AgKz0gbjsKLQkJCWlmIChjcCAhPSBlcmRhdGEpIHsKLQkJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQkvKiBTdG9yZSBhbGlhcy4gKi8KLQkJCSphcCsrID0gYnA7Ci0JCQluID0gc3RybGVuKGJwKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KLQkJCWlmIChuID49IE1BWEhPU1ROQU1FTEVOKSB7Ci0JCQkJaGFkX2Vycm9yKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlicCArPSBuOwotCQkJLyogR2V0IGNhbm9uaWNhbCBuYW1lLiAqLwotCQkJbiA9IHN0cmxlbih0YnVmKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KLQkJCWlmIChuID4gZXAgLSBicCB8fCBuID49IE1BWEhPU1ROQU1FTEVOKSB7Ci0JCQkJaGFkX2Vycm9yKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlzdHJsY3B5KGJwLCB0YnVmLCAoc2l6ZV90KShlcCAtIGJwKSk7Ci0JCQlycy0+aG9zdC5oX25hbWUgPSBicDsKLQkJCWJwICs9IG47Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAocXR5cGUgPT0gVF9QVFIgJiYgdHlwZSA9PSBUX0NOQU1FKSB7Ci0JCQluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCB0YnVmLCBzaXplb2YgdGJ1Zik7Ci0JCQlpZiAobiA8IDAgfHwgIXJlc19kbm9rKHRidWYpKSB7Ci0JCQkJaGFkX2Vycm9yKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQljcCArPSBuOwotCQkJaWYgKGNwICE9IGVyZGF0YSkgewotCQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJCS8qIEdldCBjYW5vbmljYWwgbmFtZS4gKi8KLQkJCW4gPSBzdHJsZW4odGJ1ZikgKyAxOwkvKiBmb3IgdGhlIFwwICovCi0JCQlpZiAobiA+IGVwIC0gYnAgfHwgbiA+PSBNQVhIT1NUTkFNRUxFTikgewotCQkJCWhhZF9lcnJvcisrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc3RybGNweShicCwgdGJ1ZiwgKHNpemVfdCkoZXAgLSBicCkpOwotCQkJdG5hbWUgPSBicDsKLQkJCWJwICs9IG47Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodHlwZSAhPSBxdHlwZSkgewotCQkJaWYgKHR5cGUgIT0gVF9LRVkgJiYgdHlwZSAhPSBUX1NJRykKLQkJCQlzeXNsb2coTE9HX05PVElDRXxMT0dfQVVUSCwKLQkgICAgICAgImdldGhvc3RieSouZ2V0YW5zd2VyOiBhc2tlZCBmb3IgXCIlcyAlcyAlc1wiLCBnb3QgdHlwZSBcIiVzXCIiLAotCQkJCSAgICAgICBxbmFtZSwgcF9jbGFzcyhDX0lOKSwgcF90eXBlKHF0eXBlKSwKLQkJCQkgICAgICAgcF90eXBlKHR5cGUpKTsKLQkJCWNwICs9IG47Ci0JCQljb250aW51ZTsJCS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KLQkJfQotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBUX1BUUjoKLQkJCWlmIChzdHJjYXNlY21wKHRuYW1lLCBicCkgIT0gMCkgewotCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAotCQkJCSAgICAgICBBc2tlZEZvckdvdCwgcW5hbWUsIGJwKTsKLQkJCQljcCArPSBuOwotCQkJCWNvbnRpbnVlOwkvKiBYWFggLSBoYWRfZXJyb3IrKyA/ICovCi0JCQl9Ci0JCQluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCBicCwgZXAgLSBicCk7Ci0JCQlpZiAoKG4gPCAwKSB8fCAhcmVzX2hub2soYnApKSB7Ci0JCQkJaGFkX2Vycm9yKys7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWYgTVVMVElfUFRSU19BUkVfQUxJQVNFUwotCQkJY3AgKz0gbjsKLQkJCWlmIChjcCAhPSBlcmRhdGEpIHsKLQkJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9Ci0JCQlpZiAoIWhhdmVhbnN3ZXIpCi0JCQkJcnMtPmhvc3QuaF9uYW1lID0gYnA7Ci0JCQllbHNlIGlmIChhcCA8ICZycy0+aG9zdF9hbGlhc2VzW01BWEFMSUFTRVMtMV0pCi0JCQkJKmFwKysgPSBicDsKLQkJCWVsc2UKLQkJCQluID0gLTE7Ci0JCQlpZiAobiAhPSAtMSkgewotCQkJCW4gPSBzdHJsZW4oYnApICsgMTsJLyogZm9yIHRoZSBcMCAqLwotCQkJCWlmIChuID49IE1BWEhPU1ROQU1FTEVOKSB7Ci0JCQkJCWhhZF9lcnJvcisrOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJYnAgKz0gbjsKLQkJCX0KLQkJCWJyZWFrOwotI2Vsc2UKLQkJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOwotCQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpIHsKLQkJCQluID0gc3RybGVuKGJwKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KLQkJCQlpZiAobiA+PSBNQVhIT1NUTkFNRUxFTikgewotCQkJCQloYWRfZXJyb3IrKzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWJwICs9IG47Ci0JCQkJbWFwX3Y0djZfaG9zdGVudCgmcnMtPmhvc3QsICZicCwgZXApOwotCQkJfQotCQkJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7Ci0JCQlyZXR1cm4gJnJzLT5ob3N0OwotI2VuZGlmCi0JCWNhc2UgVF9BOgotCQljYXNlIFRfQUFBQToKLQkJCWlmIChzdHJjYXNlY21wKHJzLT5ob3N0LmhfbmFtZSwgYnApICE9IDApIHsKLQkJCQlzeXNsb2coTE9HX05PVElDRXxMT0dfQVVUSCwKLQkJCQkgICAgICAgQXNrZWRGb3JHb3QsIHJzLT5ob3N0LmhfbmFtZSwgYnApOwotCQkJCWNwICs9IG47Ci0JCQkJY29udGludWU7CS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KLQkJCX0KLQkJCWlmIChuICE9IHJzLT5ob3N0LmhfbGVuZ3RoKSB7Ci0JCQkJY3AgKz0gbjsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICh0eXBlID09IFRfQUFBQSkgewotCQkJCXN0cnVjdCBpbjZfYWRkciBpbjY7Ci0JCQkJbWVtY3B5KCZpbjYsIGNwLCBJTjZBRERSU1opOwotCQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmaW42KSkgewotCQkJCQljcCArPSBuOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoIWhhdmVhbnN3ZXIpIHsKLQkJCQlpbnQgbm47Ci0KLQkJCQlycy0+aG9zdC5oX25hbWUgPSBicDsKLQkJCQlubiA9IHN0cmxlbihicCkgKyAxOwkvKiBmb3IgdGhlIFwwICovCi0JCQkJYnAgKz0gbm47Ci0JCQl9Ci0KLQkJCWJwICs9IHNpemVvZihhbGlnbikgLQotCQkJICAgIChzaXplX3QpKCh1X2xvbmcpYnAgJSBzaXplb2YoYWxpZ24pKTsKLQotCQkJaWYgKGJwICsgbiA+PSAmcnMtPmhvc3RidWZbc2l6ZW9mIHJzLT5ob3N0YnVmXSkgewotCQkJCWRwcmludGYoInNpemUgKCVkKSB0b28gYmlnXG4iLCByZXMsIG4pOwotCQkJCWhhZF9lcnJvcisrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGhhcCA+PSAmcnMtPmhfYWRkcl9wdHJzW01BWEFERFJTLTFdKSB7Ci0JCQkJaWYgKCF0b29iaWcrKykKLQkJCQkJZHByaW50ZigiVG9vIG1hbnkgYWRkcmVzc2VzICglZClcbiIsCi0JCQkJCQlyZXMsIE1BWEFERFJTKTsKLQkJCQljcCArPSBuOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJKHZvaWQpbWVtY3B5KCpoYXArKyA9IGJwLCBjcCwgKHNpemVfdCluKTsKLQkJCWJwICs9IG47Ci0JCQljcCArPSBuOwotCQkJaWYgKGNwICE9IGVyZGF0YSkgewotCQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYWJvcnQoKTsKLQkJfQotCQlpZiAoIWhhZF9lcnJvcikKLQkJCWhhdmVhbnN3ZXIrKzsKLQl9Ci0JaWYgKGhhdmVhbnN3ZXIpIHsKLQkJKmFwID0gTlVMTDsKLQkJKmhhcCA9IE5VTEw7Ci0JCS8qCi0JCSAqIE5vdGU6IHdlIHNvcnQgZXZlbiBpZiBob3N0IGNhbiB0YWtlIG9ubHkgb25lIGFkZHJlc3MKLQkJICogaW4gaXRzIHJldHVybiBzdHJ1Y3R1cmVzIC0gc2hvdWxkIGdpdmUgaXQgdGhlICJiZXN0IgotCQkgKiBhZGRyZXNzIGluIHRoYXQgY2FzZSwgbm90IHNvbWUgcmFuZG9tIG9uZQotCQkgKi8KLQkJaWYgKHJlcy0+bnNvcnQgJiYgaGF2ZWFuc3dlciA+IDEgJiYgcXR5cGUgPT0gVF9BKQotCQkJYWRkcnNvcnQocnMtPmhfYWRkcl9wdHJzLCBoYXZlYW5zd2VyLCByZXMpOwotCQlpZiAoIXJzLT5ob3N0LmhfbmFtZSkgewotCQkJbiA9IHN0cmxlbihxbmFtZSkgKyAxOwkvKiBmb3IgdGhlIFwwICovCi0JCQlpZiAobiA+IGVwIC0gYnAgfHwgbiA+PSBNQVhIT1NUTkFNRUxFTikKLQkJCQlnb3RvIG5vX3JlY292ZXJ5OwotCQkJc3RybGNweShicCwgcW5hbWUsIChzaXplX3QpKGVwIC0gYnApKTsKLQkJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOwotCQkJYnAgKz0gbjsKLQkJfQotCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikKLQkJCW1hcF92NHY2X2hvc3RlbnQoJnJzLT5ob3N0LCAmYnAsIGVwKTsKLQkJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7Ci0JCXJldHVybiAmcnMtPmhvc3Q7Ci0JfQotIG5vX3JlY292ZXJ5OgotCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotaW50Ci1nZXRob3N0YnluYW1lX3IoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGhvc3RlbnQgKmhwLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sCi0gICAgc3RydWN0IGhvc3RlbnQqKnJlc3VsdCwgaW50ICplcnJvcnApCi17Ci0gICAgICAgIHN0cnVjdCBob3N0ZW50ICpyZXM7Ci0KLSAgICAgICAgcmVzID0gZ2V0aG9zdGJ5bmFtZShuYW1lKTsKLSAgICAgICAgKmVycm9ycCA9IGhfZXJybm87Ci0gICAgICAgIGlmIChyZXMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICpyZXN1bHQgPSBOVUxMOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoaHAsIHJlcywgc2l6ZW9mICpocCk7Ci0gICAgICAgICpyZXN1bHQgPSBocDsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBob3N0ZW50ICoKLWdldGhvc3RieW5hbWUoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgaG9zdGVudCAqaHA7Ci0JcmVzX3N0YXRlIHJlcyA9IF9fcmVzX2dldF9zdGF0ZSgpOwotCi0JaWYgKHJlcyA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWFzc2VydChuYW1lICE9IE5VTEwpOwotCi0JLyogdHJ5IElQdjYgZmlyc3QgLSBpZiB0aGF0IGZhaWxzIGRvIElQdjQgKi8KLQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikgewotCQlocCA9IGdldGhvc3RieW5hbWVfaW50ZXJuYWwobmFtZSwgQUZfSU5FVDYsIHJlcywgTlVMTCwgMCk7Ci0JCWlmIChocCkgewotCQkJX19yZXNfcHV0X3N0YXRlKHJlcyk7Ci0JCQlyZXR1cm4gaHA7Ci0JCX0KLQl9Ci0JaHAgPSBnZXRob3N0YnluYW1lX2ludGVybmFsKG5hbWUsIEFGX0lORVQsIHJlcywgTlVMTCwgMCk7Ci0JX19yZXNfcHV0X3N0YXRlKHJlcyk7Ci0JcmV0dXJuIGhwOwotfQotCi1zdHJ1Y3QgaG9zdGVudCAqCi1nZXRob3N0YnluYW1lMihjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYpCi17Ci0JcmV0dXJuIGFuZHJvaWRfZ2V0aG9zdGJ5bmFtZWZvcmlmYWNlKG5hbWUsIGFmLCBOVUxMLCAwKTsKLX0KLQotc3RydWN0IGhvc3RlbnQgKgotYW5kcm9pZF9nZXRob3N0YnluYW1lZm9yaWZhY2UoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmLCBjb25zdCBjaGFyICppZmFjZSwgaW50IG1hcmspCi17Ci0Jc3RydWN0IGhvc3RlbnQgKmhwOwotCXJlc19zdGF0ZSByZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKLQotCWlmIChyZXMgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0JaHAgPSBnZXRob3N0YnluYW1lX2ludGVybmFsKG5hbWUsIGFmLCByZXMsIGlmYWNlLCBtYXJrKTsKLQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKLQlyZXR1cm4gaHA7Ci19Ci0KLQotc3RhdGljIEZJTEUqIGFuZHJvaWRfb3Blbl9wcm94eSgpCi17Ci0JaW50IHNvY2s7Ci0JY29uc3QgaW50IG9uZSA9IDE7Ci0Jc3RydWN0IHNvY2thZGRyX3VuIHByb3h5X2FkZHI7Ci0KLQlzb2NrID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKLQlpZiAoc29jayA8IDApIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0Jc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsICZvbmUsIHNpemVvZihvbmUpKTsKLQltZW1zZXQoJnByb3h5X2FkZHIsIDAsIHNpemVvZihwcm94eV9hZGRyKSk7Ci0JcHJveHlfYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKLQlzdHJsY3B5KHByb3h5X2FkZHIuc3VuX3BhdGgsICIvZGV2L3NvY2tldC9kbnNwcm94eWQiLCBzaXplb2YocHJveHlfYWRkci5zdW5fcGF0aCkpOwotCWlmIChURU1QX0ZBSUxVUkVfUkVUUlkoY29ubmVjdChzb2NrLAotCQkJKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopICZwcm94eV9hZGRyLAotCQkJc2l6ZW9mKHByb3h5X2FkZHIpKSkgIT0gMCkgewotCQljbG9zZShzb2NrKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIGZkb3Blbihzb2NrLCAicisiKTsKLX0KLQotc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKLWFuZHJvaWRfcmVhZF9ob3N0ZW50KEZJTEUqIHByb3h5KQotewotCXVpbnQzMl90IHNpemU7Ci0JY2hhciBidWZbNF07Ci0JaWYgKGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIHByb3h5KSAhPSBzaXplb2YoYnVmKSkgcmV0dXJuIE5VTEw7Ci0KLQkvKiBUaGlzIGlzIHJlYWRpbmcgc2VyaWFsaXplZCBkYXRhIGZyb20gc3lzdGVtL25ldGQvRG5zUHJveHlMaXN0ZW5lci5jcHAKLQkgKiBhbmQgY2hhbmdlcyBoZXJlIG5lZWQgdG8gYmUgbWF0Y2hlZCB0aGVyZSAqLwotCWludCByZXN1bHRfY29kZSA9IHN0cnRvbChidWYsIE5VTEwsIDEwKTsKLQlpZiAocmVzdWx0X2NvZGUgIT0gRG5zUHJveHlRdWVyeVJlc3VsdCkgewotCQlmcmVhZCgmc2l6ZSwgMSwgc2l6ZW9mKHNpemUpLCBwcm94eSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChmcmVhZCgmc2l6ZSwgMSwgc2l6ZW9mKHNpemUpLCBwcm94eSkgIT0gc2l6ZW9mKHNpemUpKSByZXR1cm4gTlVMTDsKLQlzaXplID0gbnRvaGwoc2l6ZSk7Ci0JcmVzX3N0YXRpYyBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKLQltZW1zZXQoJnJzLT5ob3N0LCAwLCBzaXplb2YocnMtPmhvc3QpKTsKLQljaGFyICpwdHIgPSBycy0+aG9zdGJ1ZjsKLQotCWlmIChmcmVhZChwdHIsIDEsIHNpemUsIHByb3h5KSAhPSBzaXplKSByZXR1cm4gTlVMTDsKLQlwdHIgKz0gc2l6ZTsKLQlycy0+aG9zdC5oX25hbWUgPSBycy0+aG9zdGJ1ZjsKLQotCWNoYXIgKiphbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKLQlycy0+aG9zdC5oX2FsaWFzZXMgPSBycy0+aG9zdF9hbGlhc2VzOwotCXdoaWxlICgxKSB7Ci0JCWlmIChmcmVhZCgmc2l6ZSwgMSwgc2l6ZW9mKHNpemUpLCBwcm94eSkgIT0gc2l6ZW9mKHNpemUpKSByZXR1cm4gTlVMTDsKLQkJc2l6ZSA9IG50b2hsKHNpemUpOwotCi0JCWlmIChzaXplID09IDApIHsKLQkJCSphbGlhc2VzID0gTlVMTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChmcmVhZChwdHIsIDEsIHNpemUsIHByb3h5KSAhPSBzaXplKSByZXR1cm4gTlVMTDsKLQkJKmFsaWFzZXMrKyA9IHB0cjsKLQkJcHRyICs9IHNpemU7Ci0JfQotCi0JaWYgKGZyZWFkKCZzaXplLCAxLCBzaXplb2Yoc2l6ZSksIHByb3h5KSAhPSBzaXplb2Yoc2l6ZSkpIHJldHVybiBOVUxMOwotCXJzLT5ob3N0LmhfYWRkcnR5cGUgPSBudG9obChzaXplKTsKLQotCWlmIChmcmVhZCgmc2l6ZSwgMSwgc2l6ZW9mKHNpemUpLCBwcm94eSkgIT0gc2l6ZW9mKHNpemUpKSByZXR1cm4gTlVMTDsKLQlycy0+aG9zdC5oX2xlbmd0aCA9IG50b2hsKHNpemUpOwotCi0JY2hhciAqKmFkZHJzID0gcnMtPmhfYWRkcl9wdHJzOwotCXJzLT5ob3N0LmhfYWRkcl9saXN0ID0gcnMtPmhfYWRkcl9wdHJzOwotCXdoaWxlICgxKSB7Ci0JCWlmIChmcmVhZCgmc2l6ZSwgMSwgc2l6ZW9mKHNpemUpLCBwcm94eSkgIT0gc2l6ZW9mKHNpemUpKSByZXR1cm4gTlVMTDsKLQkJc2l6ZSA9IG50b2hsKHNpemUpOwotCQlpZiAoc2l6ZSA9PSAwKSB7Ci0JCQkqYWRkcnMgPSBOVUxMOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGZyZWFkKHB0ciwgMSwgc2l6ZSwgcHJveHkpICE9IHNpemUpIHJldHVybiBOVUxMOwotCQkqYWRkcnMrKyA9IHB0cjsKLQkJcHRyICs9IHNpemU7Ci0JfQotCi0JcmV0dXJuICZycy0+aG9zdDsKLX0KLQotCi1zdGF0aWMgc3RydWN0IGhvc3RlbnQgKgotZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbF9yZWFsKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhZiwgcmVzX3N0YXRlIHJlcykKLXsKLQljb25zdCBjaGFyICpjcDsKLQljaGFyICpicCwgKmVwOwotCWludCBzaXplOwotCXN0cnVjdCBob3N0ZW50ICpocDsKLQlyZXNfc3RhdGljIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOwotCi0Jc3RhdGljIGNvbnN0IG5zX2R0YWIgZHRhYltdID0gewotCQlOU19GSUxFU19DQihfZ2V0aHRieW5hbWUsIE5VTEwpCi0JCXsgTlNTUkNfRE5TLCBfZG5zX2dldGh0YnluYW1lLCBOVUxMIH0sCS8qIGZvcmNlIC1ESEVTSU9EICovCi0JCXsgMCwgMCwgMCB9Ci0JfTsKLQotCWFzc2VydChuYW1lICE9IE5VTEwpOwotCi0Jc3dpdGNoIChhZikgewotCWNhc2UgQUZfSU5FVDoKLQkJc2l6ZSA9IElOQUREUlNaOwotCQlicmVhazsKLQljYXNlIEFGX0lORVQ2OgotCQlzaXplID0gSU42QUREUlNaOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7Ci0JCWVycm5vID0gRUFGTk9TVVBQT1JUOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlycy0+aG9zdC5oX2FkZHJ0eXBlID0gYWY7Ci0JcnMtPmhvc3QuaF9sZW5ndGggPSBzaXplOwotCi0JLyoKLQkgKiBpZiB0aGVyZSBhcmVuJ3QgYW55IGRvdHMsIGl0IGNvdWxkIGJlIGEgdXNlci1sZXZlbCBhbGlhcy4KLQkgKiB0aGlzIGlzIGFsc28gZG9uZSBpbiByZXNfbnF1ZXJ5KCkgc2luY2Ugd2UgYXJlIG5vdCB0aGUgb25seQotCSAqIGZ1bmN0aW9uIHRoYXQgbG9va3MgdXAgaG9zdCBuYW1lcy4KLQkgKi8KLQlpZiAoIXN0cmNocihuYW1lLCAnLicpICYmIChjcCA9IF9faG9zdGFsaWFzKG5hbWUpKSkKLQkJbmFtZSA9IGNwOwotCi0JLyoKLQkgKiBkaXNhbGxvdyBuYW1lcyBjb25zaXN0aW5nIG9ubHkgb2YgZGlnaXRzL2RvdHMsIHVubGVzcwotCSAqIHRoZXkgZW5kIGluIGEgZG90LgotCSAqLwotCWlmIChpc2RpZ2l0KCh1X2NoYXIpIG5hbWVbMF0pKQotCQlmb3IgKGNwID0gbmFtZTs7ICsrY3ApIHsKLQkJCWlmICghKmNwKSB7Ci0JCQkJaWYgKCotLWNwID09ICcuJykKLQkJCQkJYnJlYWs7Ci0JCQkJLyoKLQkJCQkgKiBBbGwtbnVtZXJpYywgbm8gZG90IGF0IHRoZSBlbmQuCi0JCQkJICogRmFrZSB1cCBhIGhvc3RlbnQgYXMgaWYgd2UnZCBhY3R1YWxseQotCQkJCSAqIGRvbmUgYSBsb29rdXAuCi0JCQkJICovCi0JCQkJaWYgKGluZXRfcHRvbihhZiwgbmFtZSwKLQkJCQkgICAgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpIDw9IDApIHsKLQkJCQkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOwotCQkJCQlyZXR1cm4gTlVMTDsKLQkJCQl9Ci0JCQkJc3RybmNweShycy0+aG9zdGJ1ZiwgbmFtZSwgTUFYRE5BTUUpOwotCQkJCXJzLT5ob3N0YnVmW01BWEROQU1FXSA9ICdcMCc7Ci0JCQkJYnAgPSBycy0+aG9zdGJ1ZiArIE1BWEROQU1FOwotCQkJCWVwID0gcnMtPmhvc3RidWYgKyBzaXplb2YgcnMtPmhvc3RidWY7Ci0JCQkJcnMtPmhvc3QuaF9uYW1lID0gcnMtPmhvc3RidWY7Ci0JCQkJcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKLQkJCQlycy0+aG9zdF9hbGlhc2VzWzBdID0gTlVMTDsKLQkJCQlycy0+aF9hZGRyX3B0cnNbMF0gPSAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcjsKLQkJCQlycy0+aF9hZGRyX3B0cnNbMV0gPSBOVUxMOwotCQkJCXJzLT5ob3N0LmhfYWRkcl9saXN0ID0gcnMtPmhfYWRkcl9wdHJzOwotCQkJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KQotCQkJCQltYXBfdjR2Nl9ob3N0ZW50KCZycy0+aG9zdCwgJmJwLCBlcCk7Ci0JCQkJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7Ci0JCQkJcmV0dXJuICZycy0+aG9zdDsKLQkJCX0KLQkJCWlmICghaXNkaWdpdCgodV9jaGFyKSAqY3ApICYmICpjcCAhPSAnLicpCi0JCQkJYnJlYWs7Ci0JCX0KLQlpZiAoKGlzeGRpZ2l0KCh1X2NoYXIpIG5hbWVbMF0pICYmIHN0cmNocihuYW1lLCAnOicpICE9IE5VTEwpIHx8Ci0JICAgIG5hbWVbMF0gPT0gJzonKQotCQlmb3IgKGNwID0gbmFtZTs7ICsrY3ApIHsKLQkJCWlmICghKmNwKSB7Ci0JCQkJaWYgKCotLWNwID09ICcuJykKLQkJCQkJYnJlYWs7Ci0JCQkJLyoKLQkJCQkgKiBBbGwtSVB2Ni1sZWdhbCwgbm8gZG90IGF0IHRoZSBlbmQuCi0JCQkJICogRmFrZSB1cCBhIGhvc3RlbnQgYXMgaWYgd2UnZCBhY3R1YWxseQotCQkJCSAqIGRvbmUgYSBsb29rdXAuCi0JCQkJICovCi0JCQkJaWYgKGluZXRfcHRvbihhZiwgbmFtZSwKLQkJCQkgICAgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpIDw9IDApIHsKLQkJCQkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOwotCQkJCQlyZXR1cm4gTlVMTDsKLQkJCQl9Ci0JCQkJc3RybmNweShycy0+aG9zdGJ1ZiwgbmFtZSwgTUFYRE5BTUUpOwotCQkJCXJzLT5ob3N0YnVmW01BWEROQU1FXSA9ICdcMCc7Ci0JCQkJYnAgPSBycy0+aG9zdGJ1ZiArIE1BWEROQU1FOwotCQkJCWVwID0gcnMtPmhvc3RidWYgKyBzaXplb2YgcnMtPmhvc3RidWY7Ci0JCQkJcnMtPmhvc3QuaF9uYW1lID0gcnMtPmhvc3RidWY7Ci0JCQkJcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKLQkJCQlycy0+aG9zdF9hbGlhc2VzWzBdID0gTlVMTDsKLQkJCQlycy0+aF9hZGRyX3B0cnNbMF0gPSAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcjsKLQkJCQlycy0+aF9hZGRyX3B0cnNbMV0gPSBOVUxMOwotCQkJCXJzLT5ob3N0LmhfYWRkcl9saXN0ID0gcnMtPmhfYWRkcl9wdHJzOwotCQkJCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOwotCQkJCXJldHVybiAmcnMtPmhvc3Q7Ci0JCQl9Ci0JCQlpZiAoIWlzeGRpZ2l0KCh1X2NoYXIpICpjcCkgJiYgKmNwICE9ICc6JyAmJiAqY3AgIT0gJy4nKQotCQkJCWJyZWFrOwotCQl9Ci0KLQlocCA9IE5VTEw7Ci0JaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOwotCWlmIChuc2Rpc3BhdGNoKCZocCwgZHRhYiwgTlNEQl9IT1NUUywgImdldGhvc3RieW5hbWUiLAotCSAgICBkZWZhdWx0X2Ruc19maWxlcywgbmFtZSwgc3RybGVuKG5hbWUpLCBhZikgIT0gTlNfU1VDQ0VTUykgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7Ci0JcmV0dXJuIGhwOwotfQotCi0KLS8vIHZlcnkgc2ltaWxhciBpbiBwcm94eS1uZXNzIHRvIGFuZHJvaWRfZ2V0YWRkcmluZm9fcHJveHkKLXN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqCi1nZXRob3N0YnluYW1lX2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhZiwgcmVzX3N0YXRlIHJlcywgY29uc3QgY2hhciAqaWZhY2UsIGludCBtYXJrKQotewotCWNvbnN0IGNoYXIgKmNhY2hlX21vZGUgPSBnZXRlbnYoIkFORFJPSURfRE5TX01PREUiKTsKLQlGSUxFKiBwcm94eSA9IE5VTEw7Ci0Jc3RydWN0IGhvc3RlbnQgKnJlc3VsdCA9IE5VTEw7Ci0KLQlpZiAoY2FjaGVfbW9kZSAhPSBOVUxMICYmIHN0cmNtcChjYWNoZV9tb2RlLCAibG9jYWwiKSA9PSAwKSB7Ci0JCXJlc19zZXRpZmFjZShyZXMsIGlmYWNlKTsKLQkJcmVzX3NldG1hcmsocmVzLCBtYXJrKTsKLQkJcmV0dXJuIGdldGhvc3RieW5hbWVfaW50ZXJuYWxfcmVhbChuYW1lLCBhZiwgcmVzKTsKLQl9Ci0KLQlwcm94eSA9IGFuZHJvaWRfb3Blbl9wcm94eSgpOwotCWlmIChwcm94eSA9PSBOVUxMKSBnb3RvIGV4aXQ7Ci0KLQkvKiBUaGlzIGlzIHdyaXRpbmcgdG8gc3lzdGVtL25ldGQvRG5zUHJveHlMaXN0ZW5lci5jcHAgYW5kIGNoYW5nZXMKLQkgKiBoZXJlIG5lZWQgdG8gYmUgbWF0Y2hlZCB0aGVyZSAqLwotCWlmIChmcHJpbnRmKHByb3h5LCAiZ2V0aG9zdGJ5bmFtZSAlcyAlcyAlZCIsCi0JCQlpZmFjZSA9PSBOVUxMID8gIl4iIDogaWZhY2UsCi0JCQluYW1lID09IE5VTEwgPyAiXiIgOiBuYW1lLAotCQkJYWYpIDwgMCkgewotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKGZwdXRjKDAsIHByb3h5KSA9PSBFT0YgfHwgZmZsdXNoKHByb3h5KSAhPSAwKSB7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlyZXN1bHQgPSBhbmRyb2lkX3JlYWRfaG9zdGVudChwcm94eSk7Ci0KLWV4aXQ6Ci0JaWYgKHByb3h5ICE9IE5VTEwpIHsKLQkJZmNsb3NlKHByb3h5KTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1zdHJ1Y3QgaG9zdGVudCAqCi1hbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZV9wcm94eShjb25zdCB2b2lkICphZGRyLAotICAgIHNvY2tsZW5fdCBsZW4sIGludCBhZiwgY29uc3QgY2hhciogaWZhY2UsIGludCBtYXJrKQotewotCXN0cnVjdCBob3N0ZW50ICpyZXN1bHQgPSBOVUxMOwotCUZJTEUqIHByb3h5ID0gYW5kcm9pZF9vcGVuX3Byb3h5KCk7Ci0KLQlpZiAocHJveHkgPT0gTlVMTCkgZ290byBleGl0OwotCi0JY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07ICAvL2JpZyBlbm91Z2ggZm9yIElQdjQgYW5kIElQdjYKLQljb25zdCBjaGFyICogYWRkclN0ciA9IGluZXRfbnRvcChhZiwgYWRkciwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKGFkZHJTdHIgPT0gTlVMTCkgZ290byBleGl0OwotCi0JaWYgKGZwcmludGYocHJveHksICJnZXRob3N0YnlhZGRyICVzICVkICVkICVzIiwKLQkJCWFkZHJTdHIsIGxlbiwgYWYsIGlmYWNlID09IE5VTEwgPyAiXiIgOiBpZmFjZSkgPCAwKSB7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoZnB1dGMoMCwgcHJveHkpID09IEVPRiB8fCBmZmx1c2gocHJveHkpICE9IDApIHsKLQkJZ290byBleGl0OwotCX0KLQotCXJlc3VsdCA9IGFuZHJvaWRfcmVhZF9ob3N0ZW50KHByb3h5KTsKLWV4aXQ6Ci0JaWYgKHByb3h5ICE9IE5VTEwpIHsKLQkJZmNsb3NlKHByb3h5KTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RydWN0IGhvc3RlbnQgKgotYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9yaWZhY2VfcmVhbChjb25zdCB2b2lkICphZGRyLAotICAgIHNvY2tsZW5fdCBsZW4sIGludCBhZiwgY29uc3QgY2hhciogaWZhY2UsIGludCBtYXJrKQotewotCWNvbnN0IHVfY2hhciAqdWFkZHIgPSAoY29uc3QgdV9jaGFyICopYWRkcjsKLQlzb2NrbGVuX3Qgc2l6ZTsKLQlzdHJ1Y3QgaG9zdGVudCAqaHA7Ci0Jc3RhdGljIGNvbnN0IG5zX2R0YWIgZHRhYltdID0gewotCQlOU19GSUxFU19DQihfZ2V0aHRieWFkZHIsIE5VTEwpCi0JCXsgTlNTUkNfRE5TLCBfZG5zX2dldGh0YnlhZGRyLCBOVUxMIH0sCS8qIGZvcmNlIC1ESEVTSU9EICovCi0JCXsgMCwgMCwgMCB9Ci0JfTsKLQotCWFzc2VydChhZGRyICE9IE5VTEwpOwotCi0JaWYgKGFmID09IEFGX0lORVQ2ICYmIGxlbiA9PSBJTjZBRERSU1ogJiYKLQkgICAgKElONl9JU19BRERSX0xJTktMT0NBTCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopKGNvbnN0IHZvaWQgKil1YWRkcikgfHwKLQkgICAgIElONl9JU19BRERSX1NJVEVMT0NBTCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopKGNvbnN0IHZvaWQgKil1YWRkcikpKSB7Ci0JCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWlmIChhZiA9PSBBRl9JTkVUNiAmJiBsZW4gPT0gSU42QUREUlNaICYmCi0JICAgIChJTjZfSVNfQUREUl9WNE1BUFBFRCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopKGNvbnN0IHZvaWQgKil1YWRkcikgfHwKLQkgICAgIElONl9JU19BRERSX1Y0Q09NUEFUKChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKikoY29uc3Qgdm9pZCAqKXVhZGRyKSkpIHsKLQkJLyogVW5tYXAuICovCi0JCWFkZHIgKz0gSU42QUREUlNaIC0gSU5BRERSU1o7Ci0JCXVhZGRyICs9IElONkFERFJTWiAtIElOQUREUlNaOwotCQlhZiA9IEFGX0lORVQ7Ci0JCWxlbiA9IElOQUREUlNaOwotCX0KLQlzd2l0Y2ggKGFmKSB7Ci0JY2FzZSBBRl9JTkVUOgotCQlzaXplID0gSU5BRERSU1o7Ci0JCWJyZWFrOwotCWNhc2UgQUZfSU5FVDY6Ci0JCXNpemUgPSBJTjZBRERSU1o7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVycm5vID0gRUFGTk9TVVBQT1JUOwotCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlpZiAoc2l6ZSAhPSBsZW4pIHsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWhwID0gTlVMTDsKLQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7Ci0JaWYgKG5zZGlzcGF0Y2goJmhwLCBkdGFiLCBOU0RCX0hPU1RTLCAiZ2V0aG9zdGJ5YWRkciIsCi0JCWRlZmF1bHRfZG5zX2ZpbGVzLCB1YWRkciwgbGVuLCBhZiwgaWZhY2UsIG1hcmspICE9IE5TX1NVQ0NFU1MpCi0JCXJldHVybiBOVUxMOwotCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOwotCXJldHVybiBocDsKLX0KLQotc3RydWN0IGhvc3RlbnQgKgotYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9yaWZhY2UoY29uc3Qgdm9pZCAqYWRkciwgc29ja2xlbl90IGxlbiwgaW50IGFmLCBjb25zdCBjaGFyKiBpZmFjZSwgaW50IG1hcmspCi17Ci0JY29uc3QgY2hhciAqY2FjaGVfbW9kZSA9IGdldGVudigiQU5EUk9JRF9ETlNfTU9ERSIpOwotCi0JaWYgKGNhY2hlX21vZGUgPT0gTlVMTCB8fCBzdHJjbXAoY2FjaGVfbW9kZSwgImxvY2FsIikgIT0gMCkgewotCQlyZXR1cm4gYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9yaWZhY2VfcHJveHkoYWRkciwgbGVuLCBhZiwgaWZhY2UsIG1hcmspOwotCX0gZWxzZSB7Ci0JCXJldHVybiBhbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZV9yZWFsKGFkZHIsbGVuLCBhZiwgaWZhY2UsIG1hcmspOwotCX0KLX0KLQotc3RydWN0IGhvc3RlbnQgKgotZ2V0aG9zdGJ5YWRkcihjb25zdCB2b2lkICphZGRyLCBzb2NrbGVuX3QgbGVuLCBpbnQgYWYpCi17Ci0JcmV0dXJuIGFuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcmlmYWNlKGFkZHIsIGxlbiwgYWYsIE5VTEwsIDApOwotfQotCi0KLXN0YXRpYyB2b2lkCi1fc2V0aHRlbnQoaW50IGYpCi17Ci0gICAgcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7Ci0gICAgaWYgKHJzID09IE5VTEwpIHJldHVybjsKLQlpZiAoIXJzLT5ob3N0ZikKLQkJcnMtPmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApOwotCWVsc2UKLQkJcmV3aW5kKHJzLT5ob3N0Zik7Ci0JcnMtPnN0YXlvcGVuID0gZjsKLX0KLQotc3RhdGljIHZvaWQKLV9lbmRodGVudCh2b2lkKQotewotICAgIHJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOwotICAgIGlmIChycyA9PSBOVUxMKSByZXR1cm47Ci0KLQlpZiAocnMtPmhvc3RmICYmICFycy0+c3RheW9wZW4pIHsKLQkJKHZvaWQpIGZjbG9zZShycy0+aG9zdGYpOwotCQlycy0+aG9zdGYgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKLV9nZXRodGVudCh2b2lkKQotewotCWNoYXIgKnA7Ci0JY2hhciAqY3AsICoqcTsKLQlpbnQgYWYsIGxlbjsKLQlyZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKLQotCWlmICghcnMtPmhvc3RmICYmICEocnMtPmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApKSkgewotCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7Ci0JCXJldHVybiBOVUxMOwotCX0KLSBhZ2FpbjoKLQlpZiAoIShwID0gZmdldHMocnMtPmhvc3RidWYsIHNpemVvZiBycy0+aG9zdGJ1ZiwgcnMtPmhvc3RmKSkpIHsKLQkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JaWYgKCpwID09ICcjJykKLQkJZ290byBhZ2FpbjsKLQlpZiAoIShjcCA9IHN0cnBicmsocCwgIiNcbiIpKSkKLQkJZ290byBhZ2FpbjsKLQkqY3AgPSAnXDAnOwotCWlmICghKGNwID0gc3RycGJyayhwLCAiIFx0IikpKQotCQlnb3RvIGFnYWluOwotCSpjcCsrID0gJ1wwJzsKLQlpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBwLCAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcikgPiAwKSB7Ci0JCWFmID0gQUZfSU5FVDY7Ci0JCWxlbiA9IElONkFERFJTWjsKLQl9IGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVULCBwLCAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcikgPiAwKSB7Ci0JCXJlc19zdGF0ZSByZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKLQkJaWYgKHJlcyA9PSBOVUxMKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KSB7Ci0JCQltYXBfdjR2Nl9hZGRyZXNzKChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyLAotCQkJICAgIChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyKTsKLQkJCWFmID0gQUZfSU5FVDY7Ci0JCQlsZW4gPSBJTjZBRERSU1o7Ci0JCX0gZWxzZSB7Ci0JCQlhZiA9IEFGX0lORVQ7Ci0JCQlsZW4gPSBJTkFERFJTWjsKLQkJfQotCQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKLQl9IGVsc2UgewotCQlnb3RvIGFnYWluOwotCX0KLQkvKiBpZiB0aGlzIGlzIG5vdCBzb21ldGhpbmcgd2UncmUgbG9va2luZyBmb3IsIHNraXAgaXQuICovCi0JaWYgKHJzLT5ob3N0LmhfYWRkcnR5cGUgIT0gMCAmJiBycy0+aG9zdC5oX2FkZHJ0eXBlICE9IGFmKQotCQlnb3RvIGFnYWluOwotCWlmIChycy0+aG9zdC5oX2xlbmd0aCAhPSAwICYmIHJzLT5ob3N0LmhfbGVuZ3RoICE9IGxlbikKLQkJZ290byBhZ2FpbjsKLQlycy0+aF9hZGRyX3B0cnNbMF0gPSAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcjsKLQlycy0+aF9hZGRyX3B0cnNbMV0gPSBOVUxMOwotCXJzLT5ob3N0LmhfYWRkcl9saXN0ID0gcnMtPmhfYWRkcl9wdHJzOwotCXJzLT5ob3N0LmhfbGVuZ3RoID0gbGVuOwotCXJzLT5ob3N0LmhfYWRkcnR5cGUgPSBhZjsKLQl3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKLQkJY3ArKzsKLQlycy0+aG9zdC5oX25hbWUgPSBjcDsKLQlxID0gcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKLQlpZiAoKGNwID0gc3RycGJyayhjcCwgIiBcdCIpKSAhPSBOVUxMKQotCQkqY3ArKyA9ICdcMCc7Ci0Jd2hpbGUgKGNwICYmICpjcCkgewotCQlpZiAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykgewotCQkJY3ArKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChxIDwgJnJzLT5ob3N0X2FsaWFzZXNbTUFYQUxJQVNFUyAtIDFdKQotCQkJKnErKyA9IGNwOwotCQlpZiAoKGNwID0gc3RycGJyayhjcCwgIiBcdCIpKSAhPSBOVUxMKQotCQkJKmNwKysgPSAnXDAnOwotCX0KLQkqcSA9IE5VTEw7Ci0JaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7Ci0JcmV0dXJuICZycy0+aG9zdDsKLX0KLQotLypBUkdTVVNFRCovCi1pbnQKLV9nZXRodGJ5bmFtZSh2b2lkICpydiwgdm9pZCAqY2JfZGF0YSwgdmFfbGlzdCBhcCkKLXsKLQlzdHJ1Y3QgaG9zdGVudCAqaHA7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgYWY7Ci0KLQlhc3NlcnQocnYgIT0gTlVMTCk7Ci0KLQluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOwotCS8qIE5PU1RSSUNUIHNraXAgbGVuICovKHZvaWQpdmFfYXJnKGFwLCBpbnQpOwotCWFmID0gdmFfYXJnKGFwLCBpbnQpOwotCi0JaHAgPSBOVUxMOwotI2lmIDAKLQl7Ci0JCXJlc19zdGF0ZSByZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKLQkJaWYgKHJlcyA9PSBOVUxMKQotCQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikKLQkJCWhwID0gX2dldGh0YnluYW1lMihuYW1lLCBBRl9JTkVUNik7Ci0JCWlmIChocD09TlVMTCkKLQkJCWhwID0gX2dldGh0YnluYW1lMihuYW1lLCBBRl9JTkVUKTsKLQkJX19yZXNfcHV0X3N0YXRlKHJlcyk7Ci0JfQotI2Vsc2UKLQlocCA9IF9nZXRodGJ5bmFtZTIobmFtZSwgYWYpOwotI2VuZGlmCi0JKigoc3RydWN0IGhvc3RlbnQgKiopcnYpID0gaHA7Ci0JaWYgKGhwID09IE5VTEwpIHsKLQkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOwotCQlyZXR1cm4gTlNfTk9URk9VTkQ7Ci0JfQotCXJldHVybiBOU19TVUNDRVNTOwotfQotCi1zdGF0aWMgc3RydWN0IGhvc3RlbnQgKgotX2dldGh0YnluYW1lMihjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYpCi17Ci0Jc3RydWN0IGhvc3RlbnQgKnA7Ci0JY2hhciAqdG1wYnVmLCAqcHRyLCAqKmNwOwotCWludCBudW07Ci0Jc2l6ZV90IGxlbjsKLQlyZXNfc3RhdGljIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOwotCi0JYXNzZXJ0KG5hbWUgIT0gTlVMTCk7Ci0KLQlfc2V0aHRlbnQocnMtPnN0YXlvcGVuKTsKLQlwdHIgPSB0bXBidWYgPSBOVUxMOwotCW51bSA9IDA7Ci0Jd2hpbGUgKChwID0gX2dldGh0ZW50KCkpICE9IE5VTEwgJiYgbnVtIDwgTUFYQUREUlMpIHsKLQkJaWYgKHAtPmhfYWRkcnR5cGUgIT0gYWYpCi0JCQljb250aW51ZTsKLQkJaWYgKHN0cmNhc2VjbXAocC0+aF9uYW1lLCBuYW1lKSAhPSAwKSB7Ci0JCQlmb3IgKGNwID0gcC0+aF9hbGlhc2VzOyAqY3AgIT0gTlVMTDsgY3ArKykKLQkJCQlpZiAoc3RyY2FzZWNtcCgqY3AsIG5hbWUpID09IDApCi0JCQkJCWJyZWFrOwotCQkJaWYgKCpjcCA9PSBOVUxMKSBjb250aW51ZTsKLQkJfQotCi0JCWlmIChudW0gPT0gMCkgewotCQkJc2l6ZV90IGJ1ZnNpemU7Ci0JCQljaGFyICpzcmM7Ci0KLQkJCWJ1ZnNpemUgPSBzdHJsZW4ocC0+aF9uYW1lKSArIDIgKwotCQkJCSAgTUFYQUREUlMgKiBwLT5oX2xlbmd0aCArCi0JCQkJICBBTElHTkJZVEVTOwotCQkJZm9yIChjcCA9IHAtPmhfYWxpYXNlczsgKmNwICE9IE5VTEw7IGNwKyspCi0JCQkJYnVmc2l6ZSArPSBzdHJsZW4oKmNwKSArIDE7Ci0KLQkJCWlmICgodG1wYnVmID0gbWFsbG9jKGJ1ZnNpemUpKSA9PSBOVUxMKSB7Ci0JCQkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCi0JCQlwdHIgPSB0bXBidWY7Ci0JCQlzcmMgPSBwLT5oX25hbWU7Ci0JCQl3aGlsZSAoKCpwdHIrKyA9ICpzcmMrKykgIT0gJ1wwJyk7Ci0JCQlmb3IgKGNwID0gcC0+aF9hbGlhc2VzOyAqY3AgIT0gTlVMTDsgY3ArKykgewotCQkJCXNyYyA9ICpjcDsKLQkJCQl3aGlsZSAoKCpwdHIrKyA9ICpzcmMrKykgIT0gJ1wwJyk7Ci0JCQl9Ci0JCQkqcHRyKysgPSAnXDAnOwotCi0JCQlwdHIgPSAoY2hhciAqKSh2b2lkICopQUxJR04ocHRyKTsKLQkJfQotCi0JCSh2b2lkKW1lbWNweShwdHIsIHAtPmhfYWRkcl9saXN0WzBdLCAoc2l6ZV90KXAtPmhfbGVuZ3RoKTsKLQkJcHRyICs9IHAtPmhfbGVuZ3RoOwotCQludW0rKzsKLQl9Ci0JX2VuZGh0ZW50KCk7Ci0JaWYgKG51bSA9PSAwKSByZXR1cm4gTlVMTDsKLQotCWxlbiA9IHB0ciAtIHRtcGJ1ZjsKLQlpZiAobGVuID4gKHNpemVvZihycy0+aG9zdGJ1ZikgLSBBTElHTkJZVEVTKSkgewotCQlmcmVlKHRtcGJ1Zik7Ci0JCWVycm5vID0gRU5PU1BDOwotCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlwdHIgPSBtZW1jcHkoKHZvaWQgKilBTElHTihycy0+aG9zdGJ1ZiksIHRtcGJ1ZiwgbGVuKTsKLQlmcmVlKHRtcGJ1Zik7Ci0KLQlycy0+aG9zdC5oX25hbWUgPSBwdHI7Ci0Jd2hpbGUgKCpwdHIrKyk7Ci0KLQljcCA9IHJzLT5ob3N0X2FsaWFzZXM7Ci0Jd2hpbGUgKCpwdHIpIHsKLQkJKmNwKysgPSBwdHI7Ci0JCXdoaWxlICgqcHRyKyspOwotCX0KLQlwdHIrKzsKLQkqY3AgPSBOVUxMOwotCi0JcHRyID0gKGNoYXIgKikodm9pZCAqKUFMSUdOKHB0cik7Ci0JY3AgPSBycy0+aF9hZGRyX3B0cnM7Ci0Jd2hpbGUgKG51bS0tKSB7Ci0JCSpjcCsrID0gcHRyOwotCQlwdHIgKz0gcnMtPmhvc3QuaF9sZW5ndGg7Ci0JfQotCSpjcCA9IE5VTEw7Ci0KLQlyZXR1cm4gJnJzLT5ob3N0OwotfQotCi0vKkFSR1NVU0VEKi8KLXN0YXRpYyBpbnQKLV9nZXRodGJ5YWRkcih2b2lkICpydiwgdm9pZCAqY2JfZGF0YSwgdmFfbGlzdCBhcCkKLXsKLQlzdHJ1Y3QgaG9zdGVudCAqcDsKLQljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyOwotCWludCBsZW4sIGFmOwotCXJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOwotCi0JYXNzZXJ0KHJ2ICE9IE5VTEwpOwotCi0JYWRkciA9IHZhX2FyZyhhcCwgdW5zaWduZWQgY2hhciAqKTsKLQlsZW4gPSB2YV9hcmcoYXAsIGludCk7Ci0JYWYgPSB2YV9hcmcoYXAsIGludCk7Ci0KLQlycy0+aG9zdC5oX2xlbmd0aCA9IGxlbjsKLQlycy0+aG9zdC5oX2FkZHJ0eXBlID0gYWY7Ci0KLQlfc2V0aHRlbnQocnMtPnN0YXlvcGVuKTsKLQl3aGlsZSAoKHAgPSBfZ2V0aHRlbnQoKSkgIT0gTlVMTCkKLQkJaWYgKHAtPmhfYWRkcnR5cGUgPT0gYWYgJiYgIW1lbWNtcChwLT5oX2FkZHIsIGFkZHIsCi0JCSAgICAoc2l6ZV90KWxlbikpCi0JCQlicmVhazsKLQlfZW5kaHRlbnQoKTsKLQkqKChzdHJ1Y3QgaG9zdGVudCAqKilydikgPSBwOwotCWlmIChwPT1OVUxMKSB7Ci0JCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKLQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCX0KLQlyZXR1cm4gTlNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIHZvaWQKLW1hcF92NHY2X2FkZHJlc3MoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QpCi17Ci0JdV9jaGFyICpwID0gKHVfY2hhciAqKWRzdDsKLQljaGFyIHRtcFtJTkFERFJTWl07Ci0JaW50IGk7Ci0KLQlhc3NlcnQoc3JjICE9IE5VTEwpOwotCWFzc2VydChkc3QgIT0gTlVMTCk7Ci0KLQkvKiBTdGFzaCBhIHRlbXBvcmFyeSBjb3B5IHNvIG91ciBjYWxsZXIgY2FuIHVwZGF0ZSBpbiBwbGFjZS4gKi8KLQkodm9pZCltZW1jcHkodG1wLCBzcmMsIElOQUREUlNaKTsKLQkvKiBNYXJrIHRoaXMgaXB2NiBhZGRyIGFzIGEgbWFwcGVkIGlwdjQuICovCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCi0JCSpwKysgPSAweDAwOwotCSpwKysgPSAweGZmOwotCSpwKysgPSAweGZmOwotCS8qIFJldHJpZXZlIHRoZSBzYXZlZCBjb3B5IGFuZCB3ZSdyZSBkb25lLiAqLwotCSh2b2lkKW1lbWNweSgodm9pZCAqKXAsIHRtcCwgSU5BRERSU1opOwotfQotCi1zdGF0aWMgdm9pZAotbWFwX3Y0djZfaG9zdGVudChzdHJ1Y3QgaG9zdGVudCAqaHAsIGNoYXIgKipicHAsIGNoYXIgKmVwKQotewotCWNoYXIgKiphcDsKLQotCWFzc2VydChocCAhPSBOVUxMKTsKLQlhc3NlcnQoYnBwICE9IE5VTEwpOwotCWFzc2VydChlcCAhPSBOVUxMKTsKLQotCWlmIChocC0+aF9hZGRydHlwZSAhPSBBRl9JTkVUIHx8IGhwLT5oX2xlbmd0aCAhPSBJTkFERFJTWikKLQkJcmV0dXJuOwotCWhwLT5oX2FkZHJ0eXBlID0gQUZfSU5FVDY7Ci0JaHAtPmhfbGVuZ3RoID0gSU42QUREUlNaOwotCWZvciAoYXAgPSBocC0+aF9hZGRyX2xpc3Q7ICphcDsgYXArKykgewotCQlpbnQgaSA9IHNpemVvZihhbGlnbikgLSAoc2l6ZV90KSgodV9sb25nKSpicHAgJSBzaXplb2YoYWxpZ24pKTsKLQotCQlpZiAoZXAgLSAqYnBwIDwgKGkgKyBJTjZBRERSU1opKSB7Ci0JCQkvKiBPdXQgb2YgbWVtb3J5LiAgVHJ1bmNhdGUgYWRkcmVzcyBsaXN0IGhlcmUuICBYWFggKi8KLQkJCSphcCA9IE5VTEw7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJKmJwcCArPSBpOwotCQltYXBfdjR2Nl9hZGRyZXNzKCphcCwgKmJwcCk7Ci0JCSphcCA9ICpicHA7Ci0JCSpicHAgKz0gSU42QUREUlNaOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWFkZHJzb3J0KGNoYXIgKiphcCwgaW50IG51bSwgcmVzX3N0YXRlIHJlcykKLXsKLQlpbnQgaSwgajsKLQljaGFyICoqcDsKLQlzaG9ydCBhdmFsW01BWEFERFJTXTsKLQlpbnQgbmVlZHNvcnQgPSAwOwotCi0JYXNzZXJ0KGFwICE9IE5VTEwpOwotCi0JcCA9IGFwOwotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgcCsrKSB7Ci0JICAgIGZvciAoaiA9IDAgOyAodW5zaWduZWQpaiA8IHJlcy0+bnNvcnQ7IGorKykKLQkJaWYgKHJlcy0+c29ydF9saXN0W2pdLmFkZHIuc19hZGRyID09Ci0JCSAgICAoKChzdHJ1Y3QgaW5fYWRkciAqKSh2b2lkICopKCpwKSktPnNfYWRkciAmCi0JCSAgICByZXMtPnNvcnRfbGlzdFtqXS5tYXNrKSkKLQkJCWJyZWFrOwotCSAgICBhdmFsW2ldID0gajsKLQkgICAgaWYgKG5lZWRzb3J0ID09IDAgJiYgaSA+IDAgJiYgaiA8IGF2YWxbaS0xXSkKLQkJbmVlZHNvcnQgPSBpOwotCX0KLQlpZiAoIW5lZWRzb3J0KQotCSAgICByZXR1cm47Ci0KLQl3aGlsZSAobmVlZHNvcnQgPCBudW0pIHsKLQkgICAgZm9yIChqID0gbmVlZHNvcnQgLSAxOyBqID49IDA7IGotLSkgewotCQlpZiAoYXZhbFtqXSA+IGF2YWxbaisxXSkgewotCQkgICAgY2hhciAqaHA7Ci0KLQkJICAgIGkgPSBhdmFsW2pdOwotCQkgICAgYXZhbFtqXSA9IGF2YWxbaisxXTsKLQkJICAgIGF2YWxbaisxXSA9IGk7Ci0KLQkJICAgIGhwID0gYXBbal07Ci0JCSAgICBhcFtqXSA9IGFwW2orMV07Ci0JCSAgICBhcFtqKzFdID0gaHA7Ci0JCX0gZWxzZQotCQkgICAgYnJlYWs7Ci0JICAgIH0KLQkgICAgbmVlZHNvcnQrKzsKLQl9Ci19Ci0KLXN0cnVjdCBob3N0ZW50ICoKLWdldGhvc3RlbnQodm9pZCkKLXsKLSAgICByZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKLQlycy0+aG9zdC5oX2FkZHJ0eXBlID0gMDsKLQlycy0+aG9zdC5oX2xlbmd0aCA9IDA7Ci0JcmV0dXJuIF9nZXRodGVudCgpOwotfQotCi0vKkFSR1NVU0VEKi8KLXN0YXRpYyBpbnQKLV9kbnNfZ2V0aHRieW5hbWUodm9pZCAqcnYsIHZvaWQgKmNiX2RhdGEsIHZhX2xpc3QgYXApCi17Ci0JcXVlcnlidWYgKmJ1ZjsKLQlpbnQgbiwgdHlwZTsKLQlzdHJ1Y3QgaG9zdGVudCAqaHA7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgYWY7Ci0JcmVzX3N0YXRlIHJlczsKLQotCWFzc2VydChydiAhPSBOVUxMKTsKLQotCW5hbWUgPSB2YV9hcmcoYXAsIGNoYXIgKik7Ci0JLyogTk9TVFJJQ1Qgc2tpcCBsZW4gKi8odm9pZCl2YV9hcmcoYXAsIGludCk7Ci0JYWYgPSB2YV9hcmcoYXAsIGludCk7Ci0KLQlzd2l0Y2ggKGFmKSB7Ci0JY2FzZSBBRl9JTkVUOgotCQl0eXBlID0gVF9BOwotCQlicmVhazsKLQljYXNlIEFGX0lORVQ2OgotCQl0eXBlID0gVF9BQUFBOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gTlNfVU5BVkFJTDsKLQl9Ci0JYnVmID0gbWFsbG9jKHNpemVvZigqYnVmKSk7Ci0JaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0JCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKLQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCX0KLQlyZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKLQlpZiAocmVzID09IE5VTEwpIHsKLQkJZnJlZShidWYpOwotCQlyZXR1cm4gTlNfTk9URk9VTkQ7Ci0JfQotCW4gPSByZXNfbnNlYXJjaChyZXMsIG5hbWUsIENfSU4sIHR5cGUsIGJ1Zi0+YnVmLCBzaXplb2YoYnVmLT5idWYpKTsKLQlpZiAobiA8IDApIHsKLQkJZnJlZShidWYpOwotCQlkcHJpbnRmKCJyZXNfbnNlYXJjaCBmYWlsZWQgKCVkKVxuIiwgcmVzLCBuKTsKLQkJX19yZXNfcHV0X3N0YXRlKHJlcyk7Ci0JCXJldHVybiBOU19OT1RGT1VORDsKLQl9Ci0JaHAgPSBnZXRhbnN3ZXIoYnVmLCBuLCBuYW1lLCB0eXBlLCByZXMpOwotCWZyZWUoYnVmKTsKLQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKLQlpZiAoaHAgPT0gTlVMTCkKLQkJc3dpdGNoIChoX2Vycm5vKSB7Ci0JCWNhc2UgSE9TVF9OT1RfRk9VTkQ6Ci0JCQlyZXR1cm4gTlNfTk9URk9VTkQ7Ci0JCWNhc2UgVFJZX0FHQUlOOgotCQkJcmV0dXJuIE5TX1RSWUFHQUlOOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIE5TX1VOQVZBSUw7Ci0JCX0KLQkqKChzdHJ1Y3QgaG9zdGVudCAqKilydikgPSBocDsKLQlyZXR1cm4gTlNfU1VDQ0VTUzsKLX0KLQotLypBUkdTVVNFRCovCi1zdGF0aWMgaW50Ci1fZG5zX2dldGh0YnlhZGRyKHZvaWQgKnJ2LCB2b2lkCSpjYl9kYXRhLCB2YV9saXN0IGFwKQotewotCWNoYXIgcWJ1ZltNQVhETkFNRSArIDFdLCAqcXAsICplcDsKLQlpbnQgbjsKLQlxdWVyeWJ1ZiAqYnVmOwotCXN0cnVjdCBob3N0ZW50ICpocDsKLQljb25zdCB1bnNpZ25lZCBjaGFyICp1YWRkcjsKLQlpbnQgbGVuLCBhZiwgYWR2YW5jZTsKLQlyZXNfc3RhdGUgcmVzOwotCWNvbnN0IGNoYXIqIGlmYWNlOwotCWludCBtYXJrOwotCXJlc19zdGF0aWMgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7Ci0KLQlhc3NlcnQocnYgIT0gTlVMTCk7Ci0KLQl1YWRkciA9IHZhX2FyZyhhcCwgdW5zaWduZWQgY2hhciAqKTsKLQlsZW4gPSB2YV9hcmcoYXAsIGludCk7Ci0JYWYgPSB2YV9hcmcoYXAsIGludCk7Ci0JaWZhY2UgPSB2YV9hcmcoYXAsIGNoYXIgKik7Ci0JbWFyayA9IHZhX2FyZyhhcCwgaW50KTsKLQotCXN3aXRjaCAoYWYpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCSh2b2lkKXNucHJpbnRmKHFidWYsIHNpemVvZihxYnVmKSwgIiV1LiV1LiV1LiV1LmluLWFkZHIuYXJwYSIsCi0JCSAgICAodWFkZHJbM10gJiAweGZmKSwgKHVhZGRyWzJdICYgMHhmZiksCi0JCSAgICAodWFkZHJbMV0gJiAweGZmKSwgKHVhZGRyWzBdICYgMHhmZikpOwotCQlicmVhazsKLQotCWNhc2UgQUZfSU5FVDY6Ci0JCXFwID0gcWJ1ZjsKLQkJZXAgPSBxYnVmICsgc2l6ZW9mKHFidWYpIC0gMTsKLQkJZm9yIChuID0gSU42QUREUlNaIC0gMTsgbiA+PSAwOyBuLS0pIHsKLQkJCWFkdmFuY2UgPSBzbnByaW50ZihxcCwgKHNpemVfdCkoZXAgLSBxcCksICIleC4leC4iLAotCQkJICAgIHVhZGRyW25dICYgMHhmLAotCQkJICAgICgodW5zaWduZWQgaW50KXVhZGRyW25dID4+IDQpICYgMHhmKTsKLQkJCWlmIChhZHZhbmNlID4gMCAmJiBxcCArIGFkdmFuY2UgPCBlcCkKLQkJCQlxcCArPSBhZHZhbmNlOwotCQkJZWxzZSB7Ci0JCQkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOwotCQkJCXJldHVybiBOU19OT1RGT1VORDsKLQkJCX0KLQkJfQotCQlpZiAoc3RybGNhdChxYnVmLCAiaXA2LmFycGEiLCBzaXplb2YocWJ1ZikpID49IHNpemVvZihxYnVmKSkgewotCQkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOwotCQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWFib3J0KCk7Ci0JfQotCi0JYnVmID0gbWFsbG9jKHNpemVvZigqYnVmKSk7Ci0JaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0JCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKLQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCX0KLQlyZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKLQlpZiAocmVzID09IE5VTEwpIHsKLQkJZnJlZShidWYpOwotCQlyZXR1cm4gTlNfTk9URk9VTkQ7Ci0JfQotCXJlc19zZXRpZmFjZShyZXMsIGlmYWNlKTsKLQlyZXNfc2V0bWFyayhyZXMsIG1hcmspOwotCW4gPSByZXNfbnF1ZXJ5KHJlcywgcWJ1ZiwgQ19JTiwgVF9QVFIsIGJ1Zi0+YnVmLCBzaXplb2YoYnVmLT5idWYpKTsKLQlpZiAobiA8IDApIHsKLQkJZnJlZShidWYpOwotCQlkcHJpbnRmKCJyZXNfbnF1ZXJ5IGZhaWxlZCAoJWQpXG4iLCByZXMsIG4pOwotCQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKLQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCX0KLQlocCA9IGdldGFuc3dlcihidWYsIG4sIHFidWYsIFRfUFRSLCByZXMpOwotCWZyZWUoYnVmKTsKLQlpZiAoaHAgPT0gTlVMTCkgewotCQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKLQkJc3dpdGNoIChoX2Vycm5vKSB7Ci0JCWNhc2UgSE9TVF9OT1RfRk9VTkQ6Ci0JCQlyZXR1cm4gTlNfTk9URk9VTkQ7Ci0JCWNhc2UgVFJZX0FHQUlOOgotCQkJcmV0dXJuIE5TX1RSWUFHQUlOOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIE5TX1VOQVZBSUw7Ci0JCX0KLQl9Ci0JaHAtPmhfYWRkcnR5cGUgPSBhZjsKLQlocC0+aF9sZW5ndGggPSBsZW47Ci0JKHZvaWQpbWVtY3B5KHJzLT5ob3N0X2FkZHIsIHVhZGRyLCAoc2l6ZV90KWxlbik7Ci0JcnMtPmhfYWRkcl9wdHJzWzBdID0gKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHI7Ci0JcnMtPmhfYWRkcl9wdHJzWzFdID0gTlVMTDsKLQlpZiAoYWYgPT0gQUZfSU5FVCAmJiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikpIHsKLQkJbWFwX3Y0djZfYWRkcmVzcygoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkciwKLQkJICAgIChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyKTsKLQkJaHAtPmhfYWRkcnR5cGUgPSBBRl9JTkVUNjsKLQkJaHAtPmhfbGVuZ3RoID0gSU42QUREUlNaOwotCX0KLQotCV9fcmVzX3B1dF9zdGF0ZShyZXMpOwotCSooKHN0cnVjdCBob3N0ZW50ICoqKXJ2KSA9IGhwOwotCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOwotCXJldHVybiBOU19TVUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvaW5ldC9uc2FwX2FkZHIuYyBiL2xpYmMvbmV0YnNkL2luZXQvbnNhcF9hZGRyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxOGJkMzMuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvaW5ldC9uc2FwX2FkZHIuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKgkkTmV0QlNEOiBuc2FwX2FkZHIuYyx2IDEuMiAyMDA0LzA1LzIwIDIzOjEyOjMzIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWYgMAotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNhcF9hZGRyLmMsdiAxLjIuMjA2LjEgMjAwNC8wMy8wOSAwODozMzozMyBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IG5zYXBfYWRkci5jLHYgMS4yIDIwMDQvMDUvMjAgMjM6MTI6MzMgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLQotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCi0jaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKLSNlbHNlCi0jaW5jbHVkZSA8cmVzb2x2Lmg+Ci0jZW5kaWYKLQotc3RhdGljIGNoYXIKLXh0b2IoaW50IGMpIHsKLQlyZXR1cm4gKGMgLSAoKChjID49ICcwJykgJiYgKGMgPD0gJzknKSkgPyAnMCcgOiAnNycpKTsKLX0KLQotdV9pbnQKLWluZXRfbnNhcF9hZGRyKGNvbnN0IGNoYXIgKmFzY2lpLCB1X2NoYXIgKmJpbmFyeSwgaW50IG1heGxlbikgewotCXVfY2hhciBjLCBuaWI7Ci0JdV9pbnQgbGVuID0gMDsKLQotCWFzc2VydChhc2NpaSAhPSBOVUxMKTsKLQlhc3NlcnQoYmluYXJ5ICE9IE5VTEwpOwotCi0JaWYgKGFzY2lpWzBdICE9ICcwJyB8fCAoYXNjaWlbMV0gIT0gJ3gnICYmIGFzY2lpWzFdICE9ICdYJykpCi0JCXJldHVybiAoMCk7Ci0JYXNjaWkgKz0gMjsKLQotCXdoaWxlICgoYyA9ICphc2NpaSsrKSAhPSAnXDAnICYmIGxlbiA8ICh1X2ludCltYXhsZW4pIHsKLQkJaWYgKGMgPT0gJy4nIHx8IGMgPT0gJysnIHx8IGMgPT0gJy8nKQotCQkJY29udGludWU7Ci0JCWlmICghaXNhc2NpaShjKSkKLQkJCXJldHVybiAoMCk7Ci0JCWlmIChpc2xvd2VyKGMpKQotCQkJYyA9IHRvdXBwZXIoYyk7Ci0JCWlmIChpc3hkaWdpdChjKSkgewotCQkJbmliID0geHRvYihjKTsKLQkJCWMgPSAqYXNjaWkrKzsKLQkJCWlmIChjICE9ICdcMCcpIHsKLQkJCQljID0gdG91cHBlcihjKTsKLQkJCQlpZiAoaXN4ZGlnaXQoYykpIHsKLQkJCQkJKmJpbmFyeSsrID0gKG5pYiA8PCA0KSB8IHh0b2IoYyk7Ci0JCQkJCWxlbisrOwotCQkJCX0gZWxzZQotCQkJCQlyZXR1cm4gKDApOwotCQkJfQotCQkJZWxzZQotCQkJCXJldHVybiAoMCk7Ci0JCX0KLQkJZWxzZQotCQkJcmV0dXJuICgwKTsKLQl9Ci0JcmV0dXJuIChsZW4pOwotfQotCi1jaGFyICoKLWluZXRfbnNhcF9udG9hKGludCBiaW5sZW4sIGNvbnN0IHVfY2hhciAqYmluYXJ5LCBjaGFyICphc2NpaSkgewotCWludCBuaWI7Ci0JaW50IGk7Ci0Jc3RhdGljIGNoYXIgdG1wYnVmWzIrMjU1KjNdOwotCWNoYXIgKnN0YXJ0OwotCi0JYXNzZXJ0KGJpbmFyeSAhPSBOVUxMKTsKLQotCWlmIChhc2NpaSkKLQkJc3RhcnQgPSBhc2NpaTsKLQllbHNlIHsKLQkJYXNjaWkgPSB0bXBidWY7Ci0JCXN0YXJ0ID0gdG1wYnVmOwotCX0KLQotCSphc2NpaSsrID0gJzAnOwotCSphc2NpaSsrID0gJ3gnOwotCi0JaWYgKGJpbmxlbiA+IDI1NSkKLQkJYmlubGVuID0gMjU1OwotCi0JZm9yIChpID0gMDsgaSA8IGJpbmxlbjsgaSsrKSB7Ci0JCW5pYiA9ICh1X2ludDMyX3QpKmJpbmFyeSA+PiA0OwotCQkqYXNjaWkrKyA9IG5pYiArIChuaWIgPCAxMCA/ICcwJyA6ICc3Jyk7Ci0JCW5pYiA9ICpiaW5hcnkrKyAmIDB4MGY7Ci0JCSphc2NpaSsrID0gbmliICsgKG5pYiA8IDEwID8gJzAnIDogJzcnKTsKLQkJaWYgKCgoaSAlIDIpID09IDAgJiYgKGkgKyAxKSA8IGJpbmxlbikpCi0JCQkqYXNjaWkrKyA9ICcuJzsKLQl9Ci0JKmFzY2lpID0gJ1wwJzsKLQlyZXR1cm4gKHN0YXJ0KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfbmFtZS5jIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc19uYW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZDJmNjAuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvbmFtZXNlci9uc19uYW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NzAgKzAsMCBAQAotLyoJJE5ldEJTRDogbnNfbmFtZS5jLHYgMS4zIDIwMDQvMTEvMDcgMDI6MTk6NDkgY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZm5kZWYgbGludAotI2lmZGVmIG5vdGRlZgotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfbmFtZS5jLHYgMS4zLjIuNC40LjIgMjAwNC8wNS8wNCAwMzoyNzo0NyBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IG5zX25hbWUuYyx2IDEuMyAyMDA0LzExLzA3IDAyOjE5OjQ5IGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jZWxzZQotI2luY2x1ZGUgPHJlc29sdi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotI2lmZGVmIFNQUklOVEZfQ0hBUgotIyBkZWZpbmUgU1BSSU5URih4KSBzdHJsZW4oc3ByaW50Zi8qKi94KQotI2Vsc2UKLSMgZGVmaW5lIFNQUklOVEYoeCkgKChzaXplX3Qpc3ByaW50ZiB4KQotI2VuZGlmCi0KLSNkZWZpbmUgTlNfVFlQRV9FTFQJCQkweDQwIC8qIEVETlMwIGV4dGVuZGVkIGxhYmVsIHR5cGUgKi8KLSNkZWZpbmUgRE5TX0xBQkVMVFlQRV9CSVRTVFJJTkcJCTB4NDEKLQotLyogRGF0YS4gKi8KLQotc3RhdGljIGNvbnN0IGNoYXIJZGlnaXRzW10gPSAiMDEyMzQ1Njc4OSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0dmFsdWVbMjU2XSA9IHsKLQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJLyoxNiovCi0JLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qMzIqLwotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjQ4Ki8KLQkgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyo2NCovCi0JLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qODAqLwotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjk2Ki8KLQktMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyoxMTIqLwotCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjEyOCovCi0JLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qMjU2Ki8KLX07Ci0KLS8qIEZvcndhcmQuICovCi0KLXN0YXRpYyBpbnQJCXNwZWNpYWwoaW50KTsKLXN0YXRpYyBpbnQJCXByaW50YWJsZShpbnQpOwotc3RhdGljIGludAkJZG5fZmluZChjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCi0JCQkJY29uc3QgdV9jaGFyICogY29uc3QgKiwKLQkJCQljb25zdCB1X2NoYXIgKiBjb25zdCAqKTsKLXN0YXRpYyBpbnQJCWVuY29kZV9iaXRzcmluZyhjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICosCi0JCQkJCXVuc2lnbmVkIGNoYXIgKiosIHVuc2lnbmVkIGNoYXIgKiosCi0JCQkJCXVuc2lnbmVkIGNvbnN0IGNoYXIgKik7Ci1zdGF0aWMgaW50CQlsYWJlbGxlbihjb25zdCB1X2NoYXIgKik7Ci1zdGF0aWMgaW50CQlkZWNvZGVfYml0c3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiosCi0JCQkJCSBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci0KLS8qIFB1YmxpYy4gKi8KLQotLyoKLSAqIG5zX25hbWVfbnRvcChzcmMsIGRzdCwgZHN0c2l6KQotICoJQ29udmVydCBhbiBlbmNvZGVkIGRvbWFpbiBuYW1lIHRvIHByaW50YWJsZSBhc2NpaSBhcyBwZXIgUkZDMTAzNS4KLSAqIHJldHVybjoKLSAqCU51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIGJ1ZmZlciwgb3IgLTEgKHdpdGggZXJybm8gc2V0KQotICogbm90ZXM6Ci0gKglUaGUgcm9vdCBpcyByZXR1cm5lZCBhcyAiLiIKLSAqCUFsbCBvdGhlciBkb21haW5zIGFyZSByZXR1cm5lZCBpbiBub24gYWJzb2x1dGUgZm9ybQotICovCi1pbnQKLW5zX25hbWVfbnRvcChjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQotewotCWNvbnN0IHVfY2hhciAqY3A7Ci0JY2hhciAqZG4sICplb207Ci0JdV9jaGFyIGM7Ci0JdV9pbnQgbjsKLQlpbnQgbDsKLQotCWNwID0gc3JjOwotCWRuID0gZHN0OwotCWVvbSA9IGRzdCArIGRzdHNpejsKLQotCXdoaWxlICgobiA9ICpjcCsrKSAhPSAwKSB7Ci0JCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7Ci0JCQkvKiBTb21lIGtpbmQgb2YgY29tcHJlc3Npb24gcG9pbnRlci4gKi8KLQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQlpZiAoZG4gIT0gZHN0KSB7Ci0JCQlpZiAoZG4gPj0gZW9tKSB7Ci0JCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0KLQkJCSpkbisrID0gJy4nOwotCQl9Ci0JCWlmICgobCA9IGxhYmVsbGVuKGNwIC0gMSkpIDwgMCkgewotCQkJZXJybm8gPSBFTVNHU0laRTsgLyogWFhYICovCi0JCQlyZXR1cm4oLTEpOwotCQl9Ci0JCWlmIChkbiArIGwgPj0gZW9tKSB7Ci0JCQllcnJubyA9IEVNU0dTSVpFOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSA9PSBOU19UWVBFX0VMVCkgewotCQkJaW50IG07Ci0KLQkJCWlmIChuICE9IEROU19MQUJFTFRZUEVfQklUU1RSSU5HKSB7Ci0JCQkJLyogWFhYOiBsYWJlbGxlbiBzaG91bGQgcmVqZWN0IHRoaXMgY2FzZSAqLwotCQkJCWVycm5vID0gRUlOVkFMOwotCQkJCXJldHVybigtMSk7Ci0JCQl9Ci0JCQlpZiAoKG0gPSBkZWNvZGVfYml0c3RyaW5nKCZjcCwgZG4sIGVvbSkpIDwgMCkKLQkJCXsKLQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCXJldHVybigtMSk7Ci0JCQl9Ci0JCQlkbiArPSBtOwotCQkJY29udGludWU7Ci0JCX0KLQkJZm9yICg7IGwgPiAwOyBsLS0pIHsKLQkJCWMgPSAqY3ArKzsKLQkJCWlmIChzcGVjaWFsKGMpKSB7Ci0JCQkJaWYgKGRuICsgMSA+PSBlb20pIHsKLQkJCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQkJcmV0dXJuICgtMSk7Ci0JCQkJfQotCQkJCSpkbisrID0gJ1xcJzsKLQkJCQkqZG4rKyA9IChjaGFyKWM7Ci0JCQl9IGVsc2UgaWYgKCFwcmludGFibGUoYykpIHsKLQkJCQlpZiAoZG4gKyAzID49IGVvbSkgewotCQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl9Ci0JCQkJKmRuKysgPSAnXFwnOwotCQkJCSpkbisrID0gZGlnaXRzW2MgLyAxMDBdOwotCQkJCSpkbisrID0gZGlnaXRzWyhjICUgMTAwKSAvIDEwXTsKLQkJCQkqZG4rKyA9IGRpZ2l0c1tjICUgMTBdOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoZG4gPj0gZW9tKSB7Ci0JCQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQkJCXJldHVybiAoLTEpOwotCQkJCX0KLQkJCQkqZG4rKyA9IChjaGFyKWM7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGRuID09IGRzdCkgewotCQlpZiAoZG4gPj0gZW9tKSB7Ci0JCQllcnJubyA9IEVNU0dTSVpFOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJKmRuKysgPSAnLic7Ci0JfQotCWlmIChkbiA+PSBlb20pIHsKLQkJZXJybm8gPSBFTVNHU0laRTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCSpkbisrID0gJ1wwJzsKLQlyZXR1cm4gKGRuIC0gZHN0KTsKLX0KLQotLyoKLSAqIG5zX25hbWVfcHRvbihzcmMsIGRzdCwgZHN0c2l6KQotICoJQ29udmVydCBhIGFzY2lpIHN0cmluZyBpbnRvIGFuIGVuY29kZWQgZG9tYWluIG5hbWUgYXMgcGVyIFJGQzEwMzUuCi0gKiByZXR1cm46Ci0gKgktMSBpZiBpdCBmYWlscwotICoJMSBpZiBzdHJpbmcgd2FzIGZ1bGx5IHF1YWxpZmllZAotICoJMCBpcyBzdHJpbmcgd2FzIG5vdCBmdWxseSBxdWFsaWZpZWQKLSAqIG5vdGVzOgotICoJRW5mb3JjZXMgbGFiZWwgYW5kIGRvbWFpbiBsZW5ndGggbGltaXRzLgotICovCi0KLWludAotbnNfbmFtZV9wdG9uKGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QsIHNpemVfdCBkc3RzaXopCi17Ci0JdV9jaGFyICpsYWJlbCwgKmJwLCAqZW9tOwotCWludCBjLCBuLCBlc2NhcGVkLCBlID0gMDsKLQljaGFyICpjcDsKLQotCWVzY2FwZWQgPSAwOwotCWJwID0gZHN0OwotCWVvbSA9IGRzdCArIGRzdHNpejsKLQlsYWJlbCA9IGJwKys7Ci0KLQl3aGlsZSAoKGMgPSAqc3JjKyspICE9IDApIHsKLQkJaWYgKGVzY2FwZWQpIHsKLQkJCWlmIChjID09ICdbJykgeyAvKiBzdGFydCBhIGJpdCBzdHJpbmcgbGFiZWwgKi8KLQkJCQlpZiAoKGNwID0gc3RyY2hyKHNyYywgJ10nKSkgPT0gTlVMTCkgewotCQkJCQllcnJubyA9IEVJTlZBTDsgLyogPz8/ICovCi0JCQkJCXJldHVybigtMSk7Ci0JCQkJfQotCQkJCWlmICgoZSA9IGVuY29kZV9iaXRzcmluZygmc3JjLCBjcCArIDIsCi0JCQkJCQkJICZsYWJlbCwgJmJwLCBlb20pKQotCQkJCSAgICAhPSAwKSB7Ci0JCQkJCWVycm5vID0gZTsKLQkJCQkJcmV0dXJuKC0xKTsKLQkJCQl9Ci0JCQkJZXNjYXBlZCA9IDA7Ci0JCQkJbGFiZWwgPSBicCsrOwotCQkJCWlmICgoYyA9ICpzcmMrKykgPT0gMCkKLQkJCQkJZ290byBkb25lOwotCQkJCWVsc2UgaWYgKGMgIT0gJy4nKSB7Ci0JCQkJCWVycm5vID0gRUlOVkFMOwotCQkJCQlyZXR1cm4oLTEpOwotCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWVsc2UgaWYgKChjcCA9IHN0cmNocihkaWdpdHMsIGMpKSAhPSBOVUxMKSB7Ci0JCQkJbiA9IChjcCAtIGRpZ2l0cykgKiAxMDA7Ci0JCQkJaWYgKChjID0gKnNyYysrKSA9PSAwIHx8Ci0JCQkJICAgIChjcCA9IHN0cmNocihkaWdpdHMsIGMpKSA9PSBOVUxMKSB7Ci0JCQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQkJCXJldHVybiAoLTEpOwotCQkJCX0KLQkJCQluICs9IChjcCAtIGRpZ2l0cykgKiAxMDsKLQkJCQlpZiAoKGMgPSAqc3JjKyspID09IDAgfHwKLQkJCQkgICAgKGNwID0gc3RyY2hyKGRpZ2l0cywgYykpID09IE5VTEwpIHsKLQkJCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQkJcmV0dXJuICgtMSk7Ci0JCQkJfQotCQkJCW4gKz0gKGNwIC0gZGlnaXRzKTsKLQkJCQlpZiAobiA+IDI1NSkgewotCQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl9Ci0JCQkJYyA9IG47Ci0JCQl9Ci0JCQllc2NhcGVkID0gMDsKLQkJfSBlbHNlIGlmIChjID09ICdcXCcpIHsKLQkJCWVzY2FwZWQgPSAxOwotCQkJY29udGludWU7Ci0JCX0gZWxzZSBpZiAoYyA9PSAnLicpIHsKLQkJCWMgPSAoYnAgLSBsYWJlbCAtIDEpOwotCQkJaWYgKChjICYgTlNfQ01QUlNGTEdTKSAhPSAwKSB7CS8qIExhYmVsIHRvbyBiaWcuICovCi0JCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0KLQkJCWlmIChsYWJlbCA+PSBlb20pIHsKLQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCQkJKmxhYmVsID0gYzsKLQkJCS8qIEZ1bGx5IHF1YWxpZmllZCA/ICovCi0JCQlpZiAoKnNyYyA9PSAnXDAnKSB7Ci0JCQkJaWYgKGMgIT0gMCkgewotCQkJCQlpZiAoYnAgPj0gZW9tKSB7Ci0JCQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCQkJcmV0dXJuICgtMSk7Ci0JCQkJCX0KLQkJCQkJKmJwKysgPSAnXDAnOwotCQkJCX0KLQkJCQlpZiAoKGJwIC0gZHN0KSA+IE1BWENETkFNRSkgewotCQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl9Ci0JCQkJcmV0dXJuICgxKTsKLQkJCX0KLQkJCWlmIChjID09IDAgfHwgKnNyYyA9PSAnLicpIHsKLQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCQkJbGFiZWwgPSBicCsrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGJwID49IGVvbSkgewotCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCSpicCsrID0gKHVfY2hhciljOwotCX0KLQljID0gKGJwIC0gbGFiZWwgLSAxKTsKLQlpZiAoKGMgJiBOU19DTVBSU0ZMR1MpICE9IDApIHsJCS8qIExhYmVsIHRvbyBiaWcuICovCi0JCWVycm5vID0gRU1TR1NJWkU7Ci0JCXJldHVybiAoLTEpOwotCX0KLSAgZG9uZToKLQlpZiAobGFiZWwgPj0gZW9tKSB7Ci0JCWVycm5vID0gRU1TR1NJWkU7Ci0JCXJldHVybiAoLTEpOwotCX0KLQkqbGFiZWwgPSBjOwotCWlmIChjICE9IDApIHsKLQkJaWYgKGJwID49IGVvbSkgewotCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCSpicCsrID0gMDsKLQl9Ci0JaWYgKChicCAtIGRzdCkgPiBNQVhDRE5BTUUpIHsJLyogc3JjIHRvbyBiaWcgKi8KLQkJZXJybm8gPSBFTVNHU0laRTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBuc19uYW1lX250b2woc3JjLCBkc3QsIGRzdHNpeikKLSAqCUNvbnZlcnQgYSBuZXR3b3JrIHN0cmluZ3MgbGFiZWxzIGludG8gYWxsIGxvd2VyY2FzZS4KLSAqIHJldHVybjoKLSAqCU51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIGJ1ZmZlciwgb3IgLTEgKHdpdGggZXJybm8gc2V0KQotICogbm90ZXM6Ci0gKglFbmZvcmNlcyBsYWJlbCBhbmQgZG9tYWluIGxlbmd0aCBsaW1pdHMuCi0gKi8KLQotaW50Ci1uc19uYW1lX250b2woY29uc3QgdV9jaGFyICpzcmMsIHVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQotewotCWNvbnN0IHVfY2hhciAqY3A7Ci0JdV9jaGFyICpkbiwgKmVvbTsKLQl1X2NoYXIgYzsKLQl1X2ludCBuOwotCWludCBsOwotCi0JY3AgPSBzcmM7Ci0JZG4gPSBkc3Q7Ci0JZW9tID0gZHN0ICsgZHN0c2l6OwotCi0JaWYgKGRuID49IGVvbSkgewotCQllcnJubyA9IEVNU0dTSVpFOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0Jd2hpbGUgKChuID0gKmNwKyspICE9IDApIHsKLQkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSA9PSBOU19DTVBSU0ZMR1MpIHsKLQkJCS8qIFNvbWUga2luZCBvZiBjb21wcmVzc2lvbiBwb2ludGVyLiAqLwotCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCSpkbisrID0gbjsKLQkJaWYgKChsID0gbGFiZWxsZW4oY3AgLSAxKSkgPCAwKSB7Ci0JCQllcnJubyA9IEVNU0dTSVpFOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJaWYgKGRuICsgbCA+PSBlb20pIHsKLQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQlmb3IgKDsgbCA+IDA7IGwtLSkgewotCQkJYyA9ICpjcCsrOwotCQkJaWYgKGlzdXBwZXIoYykpCi0JCQkJKmRuKysgPSB0b2xvd2VyKGMpOwotCQkJZWxzZQotCQkJCSpkbisrID0gYzsKLQkJfQotCX0KLQkqZG4rKyA9ICdcMCc7Ci0JcmV0dXJuIChkbiAtIGRzdCk7Ci19Ci0KLS8qCi0gKiBuc19uYW1lX3VucGFjayhtc2csIGVvbSwgc3JjLCBkc3QsIGRzdHNpeikKLSAqCVVucGFjayBhIGRvbWFpbiBuYW1lIGZyb20gYSBtZXNzYWdlLCBzb3VyY2UgbWF5IGJlIGNvbXByZXNzZWQuCi0gKiByZXR1cm46Ci0gKgktMSBpZiBpdCBmYWlscywgb3IgY29uc3VtZWQgb2N0ZXRzIGlmIGl0IHN1Y2NlZWRzLgotICovCi1pbnQKLW5zX25hbWVfdW5wYWNrKGNvbnN0IHVfY2hhciAqbXNnLCBjb25zdCB1X2NoYXIgKmVvbSwgY29uc3QgdV9jaGFyICpzcmMsCi0JICAgICAgIHVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQotewotCWNvbnN0IHVfY2hhciAqc3JjcCwgKmRzdGxpbTsKLQl1X2NoYXIgKmRzdHA7Ci0JaW50IG4sIGxlbiwgY2hlY2tlZCwgbDsKLQotCWxlbiA9IC0xOwotCWNoZWNrZWQgPSAwOwotCWRzdHAgPSBkc3Q7Ci0Jc3JjcCA9IHNyYzsKLQlkc3RsaW0gPSBkc3QgKyBkc3RzaXo7Ci0JaWYgKHNyY3AgPCBtc2cgfHwgc3JjcCA+PSBlb20pIHsKLQkJZXJybm8gPSBFTVNHU0laRTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCS8qIEZldGNoIG5leHQgbGFiZWwgaW4gZG9tYWluIG5hbWUuICovCi0Jd2hpbGUgKChuID0gKnNyY3ArKykgIT0gMCkgewotCQkvKiBDaGVjayBmb3IgaW5kaXJlY3Rpb24uICovCi0JCXN3aXRjaCAobiAmIE5TX0NNUFJTRkxHUykgewotCQljYXNlIDA6Ci0JCWNhc2UgTlNfVFlQRV9FTFQ6Ci0JCQkvKiBMaW1pdCBjaGVja3MuICovCi0JCQlpZiAoKGwgPSBsYWJlbGxlbihzcmNwIC0gMSkpIDwgMCkgewotCQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQkJcmV0dXJuKC0xKTsKLQkJCX0KLQkJCWlmIChkc3RwICsgbCArIDEgPj0gZHN0bGltIHx8IHNyY3AgKyBsID49IGVvbSkgewotCQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9Ci0JCQljaGVja2VkICs9IGwgKyAxOwotCQkJKmRzdHArKyA9IG47Ci0JCQltZW1jcHkoZHN0cCwgc3JjcCwgKHNpemVfdClsKTsKLQkJCWRzdHAgKz0gbDsKLQkJCXNyY3AgKz0gbDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTlNfQ01QUlNGTEdTOgotCQkJaWYgKHNyY3AgPj0gZW9tKSB7Ci0JCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0KLQkJCWlmIChsZW4gPCAwKQotCQkJCWxlbiA9IHNyY3AgLSBzcmMgKyAxOwotCQkJc3JjcCA9IG1zZyArICgoKG4gJiAweDNmKSA8PCA4KSB8ICgqc3JjcCAmIDB4ZmYpKTsKLQkJCWlmIChzcmNwIDwgbXNnIHx8IHNyY3AgPj0gZW9tKSB7ICAvKiBPdXQgb2YgcmFuZ2UuICovCi0JCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0KLQkJCWNoZWNrZWQgKz0gMjsKLQkJCS8qCi0JCQkgKiBDaGVjayBmb3IgbG9vcHMgaW4gdGhlIGNvbXByZXNzZWQgbmFtZTsKLQkJCSAqIGlmIHdlJ3ZlIGxvb2tlZCBhdCB0aGUgd2hvbGUgbWVzc2FnZSwKLQkJCSAqIHRoZXJlIG11c3QgYmUgYSBsb29wLgotCQkJICovCi0JCQlpZiAoY2hlY2tlZCA+PSBlb20gLSBtc2cpIHsKLQkJCQllcnJubyA9IEVNU0dTSVpFOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQlyZXR1cm4gKC0xKTsJCQkvKiBmbGFnIGVycm9yICovCi0JCX0KLQl9Ci0JKmRzdHAgPSAnXDAnOwotCWlmIChsZW4gPCAwKQotCQlsZW4gPSBzcmNwIC0gc3JjOwotCXJldHVybiAobGVuKTsKLX0KLQotLyoKLSAqIG5zX25hbWVfcGFjayhzcmMsIGRzdCwgZHN0c2l6LCBkbnB0cnMsIGxhc3RkbnB0cikKLSAqCVBhY2sgZG9tYWluIG5hbWUgJ2RvbWFpbicgaW50byAnY29tcF9kbicuCi0gKiByZXR1cm46Ci0gKglTaXplIG9mIHRoZSBjb21wcmVzc2VkIG5hbWUsIG9yIC0xLgotICogbm90ZXM6Ci0gKgknZG5wdHJzJyBpcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBwcmV2aW91cyBjb21wcmVzc2VkIG5hbWVzLgotICoJZG5wdHJzWzBdIGlzIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtZXNzYWdlLiBUaGUgYXJyYXkKLSAqCWVuZHMgd2l0aCBOVUxMLgotICoJJ2xhc3RkbnB0cicgaXMgYSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5IHBvaW50ZWQgdG8KLSAqCWJ5ICdkbnB0cnMnLgotICogU2lkZSBlZmZlY3RzOgotICoJVGhlIGxpc3Qgb2YgcG9pbnRlcnMgaW4gZG5wdHJzIGlzIHVwZGF0ZWQgZm9yIGxhYmVscyBpbnNlcnRlZCBpbnRvCi0gKgl0aGUgbWVzc2FnZSBhcyB3ZSBjb21wcmVzcyB0aGUgbmFtZS4gIElmICdkbnB0cicgaXMgTlVMTCwgd2UgZG9uJ3QKLSAqCXRyeSB0byBjb21wcmVzcyBuYW1lcy4gSWYgJ2xhc3RkbnB0cicgaXMgTlVMTCwgd2UgZG9uJ3QgdXBkYXRlIHRoZQotICoJbGlzdC4KLSAqLwotaW50Ci1uc19uYW1lX3BhY2soY29uc3QgdV9jaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgZHN0c2l6LAotCSAgICAgY29uc3QgdV9jaGFyICoqZG5wdHJzLCBjb25zdCB1X2NoYXIgKipsYXN0ZG5wdHIpCi17Ci0JdV9jaGFyICpkc3RwOwotCWNvbnN0IHVfY2hhciAqKmNwcCwgKipscHAsICplb2IsICptc2c7Ci0JY29uc3QgdV9jaGFyICpzcmNwOwotCWludCBuLCBsLCBmaXJzdCA9IDE7Ci0KLQlzcmNwID0gc3JjOwotCWRzdHAgPSBkc3Q7Ci0JZW9iID0gZHN0cCArIGRzdHNpejsKLQlscHAgPSBjcHAgPSBOVUxMOwotCWlmIChkbnB0cnMgIT0gTlVMTCkgewotCQlpZiAoKG1zZyA9ICpkbnB0cnMrKykgIT0gTlVMTCkgewotCQkJZm9yIChjcHAgPSBkbnB0cnM7ICpjcHAgIT0gTlVMTDsgY3BwKyspCi0JCQkJOwotCQkJbHBwID0gY3BwOwkvKiBlbmQgb2YgbGlzdCB0byBzZWFyY2ggKi8KLQkJfQotCX0gZWxzZQotCQltc2cgPSBOVUxMOwotCi0JLyogbWFrZSBzdXJlIHRoZSBkb21haW4gd2UgYXJlIGFib3V0IHRvIGFkZCBpcyBsZWdhbCAqLwotCWwgPSAwOwotCWRvIHsKLQkJaW50IGwwOwotCi0JCW4gPSAqc3JjcDsKLQkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSA9PSBOU19DTVBSU0ZMR1MpIHsKLQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQlpZiAoKGwwID0gbGFiZWxsZW4oc3JjcCkpIDwgMCkgewotCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQlyZXR1cm4oLTEpOwotCQl9Ci0JCWwgKz0gbDAgKyAxOwotCQlpZiAobCA+IE1BWENETkFNRSkgewotCQkJZXJybm8gPSBFTVNHU0laRTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCXNyY3AgKz0gbDAgKyAxOwotCX0gd2hpbGUgKG4gIT0gMCk7Ci0KLQkvKiBmcm9tIGhlcmUgb24gd2UgbmVlZCB0byByZXNldCBjb21wcmVzc2lvbiBwb2ludGVyIGFycmF5IG9uIGVycm9yICovCi0Jc3JjcCA9IHNyYzsKLQlkbyB7Ci0JCS8qIExvb2sgdG8gc2VlIGlmIHdlIGNhbiB1c2UgcG9pbnRlcnMuICovCi0JCW4gPSAqc3JjcDsKLQkJaWYgKG4gIT0gMCAmJiBtc2cgIT0gTlVMTCkgewotCQkJbCA9IGRuX2ZpbmQoc3JjcCwgbXNnLCAoY29uc3QgdV9jaGFyICogY29uc3QgKilkbnB0cnMsCi0JCQkJICAgIChjb25zdCB1X2NoYXIgKiBjb25zdCAqKWxwcCk7Ci0JCQlpZiAobCA+PSAwKSB7Ci0JCQkJaWYgKGRzdHAgKyAxID49IGVvYikgewotCQkJCQlnb3RvIGNsZWFudXA7Ci0JCQkJfQotCQkJCSpkc3RwKysgPSAoKHVfaW50MzJfdClsID4+IDgpIHwgTlNfQ01QUlNGTEdTOwotCQkJCSpkc3RwKysgPSBsICUgMjU2OwotCQkJCXJldHVybiAoZHN0cCAtIGRzdCk7Ci0JCQl9Ci0JCQkvKiBOb3QgZm91bmQsIHNhdmUgaXQuICovCi0JCQlpZiAobGFzdGRucHRyICE9IE5VTEwgJiYgY3BwIDwgbGFzdGRucHRyIC0gMSAmJgotCQkJICAgIChkc3RwIC0gbXNnKSA8IDB4NDAwMCAmJiBmaXJzdCkgewotCQkJCSpjcHArKyA9IGRzdHA7Ci0JCQkJKmNwcCA9IE5VTEw7Ci0JCQkJZmlyc3QgPSAwOwotCQkJfQotCQl9Ci0JCS8qIGNvcHkgbGFiZWwgdG8gYnVmZmVyICovCi0JCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7Ci0JCQkvKiBTaG91bGQgbm90IGhhcHBlbi4gKi8KLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCQluID0gbGFiZWxsZW4oc3JjcCk7Ci0JCWlmIChkc3RwICsgMSArIG4gPj0gZW9iKSB7Ci0JCQlnb3RvIGNsZWFudXA7Ci0JCX0KLQkJbWVtY3B5KGRzdHAsIHNyY3AsIChzaXplX3QpKG4gKyAxKSk7Ci0JCXNyY3AgKz0gbiArIDE7Ci0JCWRzdHAgKz0gbiArIDE7Ci0JfSB3aGlsZSAobiAhPSAwKTsKLQotCWlmIChkc3RwID4gZW9iKSB7Ci1jbGVhbnVwOgotCQlpZiAobXNnICE9IE5VTEwpCi0JCQkqbHBwID0gTlVMTDsKLQkJZXJybm8gPSBFTVNHU0laRTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoZHN0cCAtIGRzdCk7Ci19Ci0KLS8qCi0gKiBuc19uYW1lX3VuY29tcHJlc3MobXNnLCBlb20sIHNyYywgZHN0LCBkc3RzaXopCi0gKglFeHBhbmQgY29tcHJlc3NlZCBkb21haW4gbmFtZSB0byBwcmVzZW50YXRpb24gZm9ybWF0LgotICogcmV0dXJuOgotICoJTnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3V0IG9mIGBzcmMnLCBvciAtMSAod2l0aCBlcnJubyBzZXQpLgotICogbm90ZToKLSAqCVJvb3QgZG9tYWluIHJldHVybnMgYXMgIi4iIG5vdCAiIi4KLSAqLwotaW50Ci1uc19uYW1lX3VuY29tcHJlc3MoY29uc3QgdV9jaGFyICptc2csIGNvbnN0IHVfY2hhciAqZW9tLCBjb25zdCB1X2NoYXIgKnNyYywKLQkJICAgY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQotewotCXVfY2hhciB0bXBbTlNfTUFYQ0ROQU1FXTsKLQlpbnQgbjsKLQotCWlmICgobiA9IG5zX25hbWVfdW5wYWNrKG1zZywgZW9tLCBzcmMsIHRtcCwgc2l6ZW9mIHRtcCkpID09IC0xKQotCQlyZXR1cm4gKC0xKTsKLQlpZiAobnNfbmFtZV9udG9wKHRtcCwgZHN0LCBkc3RzaXopID09IC0xKQotCQlyZXR1cm4gKC0xKTsKLQlyZXR1cm4gKG4pOwotfQotCi0vKgotICogbnNfbmFtZV9jb21wcmVzcyhzcmMsIGRzdCwgZHN0c2l6LCBkbnB0cnMsIGxhc3RkbnB0cikKLSAqCUNvbXByZXNzIGEgZG9tYWluIG5hbWUgaW50byB3aXJlIGZvcm1hdCwgdXNpbmcgY29tcHJlc3Npb24gcG9pbnRlcnMuCi0gKiByZXR1cm46Ci0gKglOdW1iZXIgb2YgYnl0ZXMgY29uc3VtZWQgaW4gYGRzdCcgb3IgLTEgKHdpdGggZXJybm8gc2V0KS4KLSAqIG5vdGVzOgotICoJJ2RucHRycycgaXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gcHJldmlvdXMgY29tcHJlc3NlZCBuYW1lcy4KLSAqCWRucHRyc1swXSBpcyBhIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbWVzc2FnZS4KLSAqCVRoZSBsaXN0IGVuZHMgd2l0aCBOVUxMLiAgJ2xhc3RkbnB0cicgaXMgYSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlCi0gKglhcnJheSBwb2ludGVkIHRvIGJ5ICdkbnB0cnMnLiBTaWRlIGVmZmVjdCBpcyB0byB1cGRhdGUgdGhlIGxpc3Qgb2YKLSAqCXBvaW50ZXJzIGZvciBsYWJlbHMgaW5zZXJ0ZWQgaW50byB0aGUgbWVzc2FnZSBhcyB3ZSBjb21wcmVzcyB0aGUgbmFtZS4KLSAqCUlmICdkbnB0cicgaXMgTlVMTCwgd2UgZG9uJ3QgdHJ5IHRvIGNvbXByZXNzIG5hbWVzLiBJZiAnbGFzdGRucHRyJwotICoJaXMgTlVMTCwgd2UgZG9uJ3QgdXBkYXRlIHRoZSBsaXN0LgotICovCi1pbnQKLW5zX25hbWVfY29tcHJlc3MoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeiwKLQkJIGNvbnN0IHVfY2hhciAqKmRucHRycywgY29uc3QgdV9jaGFyICoqbGFzdGRucHRyKQotewotCXVfY2hhciB0bXBbTlNfTUFYQ0ROQU1FXTsKLQotCWlmIChuc19uYW1lX3B0b24oc3JjLCB0bXAsIHNpemVvZiB0bXApID09IC0xKQotCQlyZXR1cm4gKC0xKTsKLQlyZXR1cm4gKG5zX25hbWVfcGFjayh0bXAsIGRzdCwgKGludClkc3RzaXosIGRucHRycywgbGFzdGRucHRyKSk7Ci19Ci0KLS8qCi0gKiBSZXNldCBkbnB0cnMgc28gdGhhdCB0aGVyZSBhcmUgbm8gYWN0aXZlIHJlZmVyZW5jZXMgdG8gcG9pbnRlcnMgYXQgb3IKLSAqIGFmdGVyIHNyYy4KLSAqLwotdm9pZAotbnNfbmFtZV9yb2xsYmFjayhjb25zdCB1X2NoYXIgKnNyYywgY29uc3QgdV9jaGFyICoqZG5wdHJzLAotCQkgY29uc3QgdV9jaGFyICoqbGFzdGRucHRyKQotewotCXdoaWxlIChkbnB0cnMgPCBsYXN0ZG5wdHIgJiYgKmRucHRycyAhPSBOVUxMKSB7Ci0JCWlmICgqZG5wdHJzID49IHNyYykgewotCQkJKmRucHRycyA9IE5VTEw7Ci0JCQlicmVhazsKLQkJfQotCQlkbnB0cnMrKzsKLQl9Ci19Ci0KLS8qCi0gKiBuc19uYW1lX3NraXAocHRycHRyLCBlb20pCi0gKglBZHZhbmNlICpwdHJwdHIgdG8gc2tpcCBvdmVyIHRoZSBjb21wcmVzc2VkIG5hbWUgaXQgcG9pbnRzIGF0LgotICogcmV0dXJuOgotICoJMCBvbiBzdWNjZXNzLCAtMSAod2l0aCBlcnJubyBzZXQpIG9uIGZhaWx1cmUuCi0gKi8KLWludAotbnNfbmFtZV9za2lwKGNvbnN0IHVfY2hhciAqKnB0cnB0ciwgY29uc3QgdV9jaGFyICplb20pCi17Ci0JY29uc3QgdV9jaGFyICpjcDsKLQl1X2ludCBuOwotCWludCBsOwotCi0JY3AgPSAqcHRycHRyOwotCXdoaWxlIChjcCA8IGVvbSAmJiAobiA9ICpjcCsrKSAhPSAwKSB7Ci0JCS8qIENoZWNrIGZvciBpbmRpcmVjdGlvbi4gKi8KLQkJc3dpdGNoIChuICYgTlNfQ01QUlNGTEdTKSB7Ci0JCWNhc2UgMDoJCQkvKiBub3JtYWwgY2FzZSwgbiA9PSBsZW4gKi8KLQkJCWNwICs9IG47Ci0JCQljb250aW51ZTsKLQkJY2FzZSBOU19UWVBFX0VMVDogLyogRUROUzAgZXh0ZW5kZWQgbGFiZWwgKi8KLQkJCWlmICgobCA9IGxhYmVsbGVuKGNwIC0gMSkpIDwgMCkgewotCQkJCWVycm5vID0gRU1TR1NJWkU7IC8qIFhYWCAqLwotCQkJCXJldHVybigtMSk7Ci0JCQl9Ci0JCQljcCArPSBsOwotCQkJY29udGludWU7Ci0JCWNhc2UgTlNfQ01QUlNGTEdTOgkvKiBpbmRpcmVjdGlvbiAqLwotCQkJY3ArKzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgkJLyogaWxsZWdhbCB0eXBlICovCi0JCQllcnJubyA9IEVNU0dTSVpFOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWlmIChjcCA+IGVvbSkgewotCQllcnJubyA9IEVNU0dTSVpFOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JKnB0cnB0ciA9IGNwOwotCXJldHVybiAoMCk7Ci19Ci0KLS8qIFByaXZhdGUuICovCi0KLS8qCi0gKiBzcGVjaWFsKGNoKQotICoJVGhpbmtpbmcgaW4gbm9uaW50ZXJuYXRpb25hbGl6ZWQgVVNBU0NJSSAocGVyIHRoZSBETlMgc3BlYyksCi0gKglpcyB0aGlzIGNoYXJhY3RlZCBzcGVjaWFsICgiaW4gbmVlZCBvZiBxdW90aW5nIikgPwotICogcmV0dXJuOgotICoJYm9vbGVhbi4KLSAqLwotc3RhdGljIGludAotc3BlY2lhbChpbnQgY2gpIHsKLQlzd2l0Y2ggKGNoKSB7Ci0JY2FzZSAweDIyOiAvKiAnIicgKi8KLQljYXNlIDB4MkU6IC8qICcuJyAqLwotCWNhc2UgMHgzQjogLyogJzsnICovCi0JY2FzZSAweDVDOiAvKiAnXFwnICovCi0JY2FzZSAweDI4OiAvKiAnKCcgKi8KLQljYXNlIDB4Mjk6IC8qICcpJyAqLwotCS8qIFNwZWNpYWwgbW9kaWZpZXJzIGluIHpvbmUgZmlsZXMuICovCi0JY2FzZSAweDQwOiAvKiAnQCcgKi8KLQljYXNlIDB4MjQ6IC8qICckJyAqLwotCQlyZXR1cm4gKDEpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotCi0vKgotICogcHJpbnRhYmxlKGNoKQotICoJVGhpbmtpbmcgaW4gbm9uaW50ZXJuYXRpb25hbGl6ZWQgVVNBU0NJSSAocGVyIHRoZSBETlMgc3BlYyksCi0gKglpcyB0aGlzIGNoYXJhY3RlciB2aXNpYmxlIGFuZCBub3QgYSBzcGFjZSB3aGVuIHByaW50ZWQgPwotICogcmV0dXJuOgotICoJYm9vbGVhbi4KLSAqLwotc3RhdGljIGludAotcHJpbnRhYmxlKGludCBjaCkgewotCXJldHVybiAoY2ggPiAweDIwICYmIGNoIDwgMHg3Zik7Ci19Ci0KLS8qCi0gKglUaGlua2luZyBpbiBub25pbnRlcm5hdGlvbmFsaXplZCBVU0FTQ0lJIChwZXIgdGhlIEROUyBzcGVjKSwKLSAqCWNvbnZlcnQgdGhpcyBjaGFyYWN0ZXIgdG8gbG93ZXIgY2FzZSBpZiBpdCdzIHVwcGVyIGNhc2UuCi0gKi8KLXN0YXRpYyBpbnQKLW1rbG93ZXIoaW50IGNoKSB7Ci0JaWYgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSkKLQkJcmV0dXJuIChjaCArIDB4MjApOwotCXJldHVybiAoY2gpOwotfQotCi0vKgotICogZG5fZmluZChkb21haW4sIG1zZywgZG5wdHJzLCBsYXN0ZG5wdHIpCi0gKglTZWFyY2ggZm9yIHRoZSBjb3VudGVkLWxhYmVsIG5hbWUgaW4gYW4gYXJyYXkgb2YgY29tcHJlc3NlZCBuYW1lcy4KLSAqIHJldHVybjoKLSAqCW9mZnNldCBmcm9tIG1zZyBpZiBmb3VuZCwgb3IgLTEuCi0gKiBub3RlczoKLSAqCWRucHRycyBpcyB0aGUgcG9pbnRlciB0byB0aGUgZmlyc3QgbmFtZSBvbiB0aGUgbGlzdCwKLSAqCW5vdCB0aGUgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIG1lc3NhZ2UuCi0gKi8KLXN0YXRpYyBpbnQKLWRuX2ZpbmQoY29uc3QgdV9jaGFyICpkb21haW4sIGNvbnN0IHVfY2hhciAqbXNnLAotCWNvbnN0IHVfY2hhciAqIGNvbnN0ICpkbnB0cnMsCi0JY29uc3QgdV9jaGFyICogY29uc3QgKmxhc3RkbnB0cikKLXsKLQljb25zdCB1X2NoYXIgKmRuLCAqY3AsICpzcDsKLQljb25zdCB1X2NoYXIgKiBjb25zdCAqY3BwOwotCXVfaW50IG47Ci0KLQlmb3IgKGNwcCA9IGRucHRyczsgY3BwIDwgbGFzdGRucHRyOyBjcHArKykgewotCQlzcCA9ICpjcHA7Ci0JCS8qCi0JCSAqIHRlcm1pbmF0ZSBzZWFyY2ggb246Ci0JCSAqIHJvb3QgbGFiZWwKLQkJICogY29tcHJlc3Npb24gcG9pbnRlcgotCQkgKiB1bnVzYWJsZSBvZmZzZXQKLQkJICovCi0JCXdoaWxlICgqc3AgIT0gMCAmJiAoKnNwICYgTlNfQ01QUlNGTEdTKSA9PSAwICYmCi0JCSAgICAgICAoc3AgLSBtc2cpIDwgMHg0MDAwKSB7Ci0JCQlkbiA9IGRvbWFpbjsKLQkJCWNwID0gc3A7Ci0JCQl3aGlsZSAoKG4gPSAqY3ArKykgIT0gMCkgewotCQkJCS8qCi0JCQkJICogY2hlY2sgZm9yIGluZGlyZWN0aW9uCi0JCQkJICovCi0JCQkJc3dpdGNoIChuICYgTlNfQ01QUlNGTEdTKSB7Ci0JCQkJY2FzZSAwOgkJLyogbm9ybWFsIGNhc2UsIG4gPT0gbGVuICovCi0JCQkJCW4gPSBsYWJlbGxlbihjcCAtIDEpOyAvKiBYWFggKi8KLQotCQkJCQlpZiAobiAhPSAqZG4rKykKLQkJCQkJCWdvdG8gbmV4dDsKLQotCQkJCQlmb3IgKDsgbiA+IDA7IG4tLSkKLQkJCQkJCWlmIChta2xvd2VyKCpkbisrKSAhPQotCQkJCQkJICAgIG1rbG93ZXIoKmNwKyspKQotCQkJCQkJCWdvdG8gbmV4dDsKLQkJCQkJLyogSXMgbmV4dCByb290IGZvciBib3RoID8gKi8KLQkJCQkJaWYgKCpkbiA9PSAnXDAnICYmICpjcCA9PSAnXDAnKQotCQkJCQkJcmV0dXJuIChzcCAtIG1zZyk7Ci0JCQkJCWlmICgqZG4pCi0JCQkJCQljb250aW51ZTsKLQkJCQkJZ290byBuZXh0OwotCQkJCWNhc2UgTlNfQ01QUlNGTEdTOgkvKiBpbmRpcmVjdGlvbiAqLwotCQkJCQljcCA9IG1zZyArICgoKG4gJiAweDNmKSA8PCA4KSB8ICpjcCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJZGVmYXVsdDoJLyogaWxsZWdhbCB0eXBlICovCi0JCQkJCWVycm5vID0gRU1TR1NJWkU7Ci0JCQkJCXJldHVybiAoLTEpOwotCQkJCX0KLQkJCX0KLSBuZXh0OiA7Ci0JCQlzcCArPSAqc3AgKyAxOwotCQl9Ci0JfQotCWVycm5vID0gRU5PRU5UOwotCXJldHVybiAoLTEpOwotfQotCi1zdGF0aWMgaW50Ci1kZWNvZGVfYml0c3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKipjcHAsIGNoYXIgKmRuLCBjb25zdCBjaGFyICplb20pCi17Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSAqY3BwOwotCWNoYXIgKmJlZyA9IGRuLCB0YzsKLQlpbnQgYiwgYmxlbiwgcGxlbiwgaTsKLQotCWlmICgoYmxlbiA9ICgqY3AgJiAweGZmKSkgPT0gMCkKLQkJYmxlbiA9IDI1NjsKLQlwbGVuID0gKGJsZW4gKyAzKSAvIDQ7Ci0JcGxlbiArPSBzaXplb2YoIlxcW3gvXSIpICsgKGJsZW4gPiA5OSA/IDMgOiAoYmxlbiA+IDkpID8gMiA6IDEpOwotCWlmIChkbiArIHBsZW4gPj0gZW9tKQotCQlyZXR1cm4oLTEpOwotCi0JY3ArKzsKLQlpID0gU1BSSU5URigoZG4sICJcXFt4IikpOwotCWlmIChpIDwgMCkKLQkJcmV0dXJuICgtMSk7Ci0JZG4gKz0gaTsKLQlmb3IgKGIgPSBibGVuOyBiID4gNzsgYiAtPSA4LCBjcCsrKSB7Ci0JCWkgPSBTUFJJTlRGKChkbiwgIiUwMngiLCAqY3AgJiAweGZmKSk7Ci0JCWlmIChpIDwgMCkKLQkJCXJldHVybiAoLTEpOwotCQlkbiArPSBpOwotCX0KLQlpZiAoYiA+IDQpIHsKLQkJdGMgPSAqY3ArKzsKLQkJaSA9IFNQUklOVEYoKGRuLCAiJTAyeCIsIHRjICYgKDB4ZmYgPDwgKDggLSBiKSkpKTsKLQkJaWYgKGkgPCAwKQotCQkJcmV0dXJuICgtMSk7Ci0JCWRuICs9IGk7Ci0JfSBlbHNlIGlmIChiID4gMCkgewotCQl0YyA9ICpjcCsrOwotCQlpID0gU1BSSU5URigoZG4sICIlMXgiLAotCQkJICAgICAgICgoKHVfaW50MzJfdCl0YyA+PiA0KSAmIDB4MGYpICYgKDB4MGYgPDwgKDQgLSBiKSkpKTsKLQkJaWYgKGkgPCAwKQotCQkJcmV0dXJuICgtMSk7Ci0JCWRuICs9IGk7Ci0JfQotCWkgPSBTUFJJTlRGKChkbiwgIi8lZF0iLCBibGVuKSk7Ci0JaWYgKGkgPCAwKQotCQlyZXR1cm4gKC0xKTsKLQlkbiArPSBpOwotCi0JKmNwcCA9IGNwOwotCXJldHVybihkbiAtIGJlZyk7Ci19Ci0KLXN0YXRpYyBpbnQKLWVuY29kZV9iaXRzcmluZyhjb25zdCBjaGFyICoqYnAsIGNvbnN0IGNoYXIgKmVuZCwgdW5zaWduZWQgY2hhciAqKmxhYmVscCwKLQkgICAgICAgIHVuc2lnbmVkIGNoYXIgKiogZHN0LCB1bnNpZ25lZCBjb25zdCBjaGFyICplb20pCi17Ci0JaW50IGFmdGVyc2xhc2ggPSAwOwotCWNvbnN0IGNoYXIgKmNwID0gKmJwOwotCXVuc2lnbmVkIGNoYXIgKnRwOwotCWNoYXIgYzsKLQljb25zdCBjaGFyICpiZWdfYmxlbjsKLQljaGFyICplbmRfYmxlbiA9IE5VTEw7Ci0JaW50IHZhbHVlID0gMCwgY291bnQgPSAwLCB0YmNvdW50ID0gMCwgYmxlbiA9IDA7Ci0KLQliZWdfYmxlbiA9IGVuZF9ibGVuID0gTlVMTDsKLQotCS8qIGEgYml0c3RyaW5nIG11c3QgY29udGFpbiBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgKi8KLQlpZiAoZW5kIC0gY3AgPCAyKQotCQlyZXR1cm4oRUlOVkFMKTsKLQotCS8qIFhYWDogY3VycmVudGx5LCBvbmx5IGhleCBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQgKi8KLQlpZiAoKmNwKysgIT0gJ3gnKQotCQlyZXR1cm4oRUlOVkFMKTsKLQlpZiAoIWlzeGRpZ2l0KCgqY3ApICYgMHhmZikpIC8qIHJlamVjdCAnXFt4L0JMRU5dJyAqLwotCQlyZXR1cm4oRUlOVkFMKTsKLQotCWZvciAodHAgPSAqZHN0ICsgMTsgY3AgPCBlbmQgJiYgdHAgPCBlb207IGNwKyspIHsKLQkJc3dpdGNoKChjID0gKmNwKSkgewotCQljYXNlICddJzoJLyogZW5kIG9mIHRoZSBiaXRzdHJpbmcgKi8KLQkJCWlmIChhZnRlcnNsYXNoKSB7Ci0JCQkJaWYgKGJlZ19ibGVuID09IE5VTEwpCi0JCQkJCXJldHVybihFSU5WQUwpOwotCQkJCWJsZW4gPSAoaW50KXN0cnRvbChiZWdfYmxlbiwgJmVuZF9ibGVuLCAxMCk7Ci0JCQkJaWYgKCplbmRfYmxlbiAhPSAnXScpCi0JCQkJCXJldHVybihFSU5WQUwpOwotCQkJfQotCQkJaWYgKGNvdW50KQotCQkJCSp0cCsrID0gKCh2YWx1ZSA8PCA0KSAmIDB4ZmYpOwotCQkJY3ArKzsJLyogc2tpcCAnXScgKi8KLQkJCWdvdG8gZG9uZTsKLQkJY2FzZSAnLyc6Ci0JCQlhZnRlcnNsYXNoID0gMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWYgKGFmdGVyc2xhc2gpIHsKLQkJCQlpZiAoIWlzZGlnaXQoYyYweGZmKSkKLQkJCQkJcmV0dXJuKEVJTlZBTCk7Ci0JCQkJaWYgKGJlZ19ibGVuID09IE5VTEwpIHsKLQotCQkJCQlpZiAoYyA9PSAnMCcpIHsKLQkJCQkJCS8qIGJsZW4gbmV2ZXIgYmVnaW5ncyB3aXRoIDAgKi8KLQkJCQkJCXJldHVybihFSU5WQUwpOwotCQkJCQl9Ci0JCQkJCWJlZ19ibGVuID0gY3A7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoIWlzeGRpZ2l0KGMmMHhmZikpCi0JCQkJCXJldHVybihFSU5WQUwpOwotCQkJCXZhbHVlIDw8PSA0OwotCQkJCXZhbHVlICs9IGRpZ2l0dmFsdWVbKGludCljXTsKLQkJCQljb3VudCArPSA0OwotCQkJCXRiY291bnQgKz0gNDsKLQkJCQlpZiAodGJjb3VudCA+IDI1NikKLQkJCQkJcmV0dXJuKEVJTlZBTCk7Ci0JCQkJaWYgKGNvdW50ID09IDgpIHsKLQkJCQkJKnRwKysgPSB2YWx1ZTsKLQkJCQkJY291bnQgPSAwOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotICBkb25lOgotCWlmIChjcCA+PSBlbmQgfHwgdHAgPj0gZW9tKQotCQlyZXR1cm4oRU1TR1NJWkUpOwotCi0JLyoKLQkgKiBiaXQgbGVuZ3RoIHZhbGlkYXRpb246Ci0JICogSWYgYSA8bGVuZ3RoPiBpcyBwcmVzZW50LCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgPGJpdC1kYXRhPgotCSAqIE1VU1QgYmUganVzdCBzdWZmaWNpZW50IHRvIGNvbnRhaW4gdGhlIG51bWJlciBvZiBiaXRzIHNwZWNpZmllZAotCSAqIGJ5IHRoZSA8bGVuZ3RoPi4gSWYgdGhlcmUgYXJlIGluc2lnbmlmaWNhbnQgYml0cyBpbiBhIGZpbmFsCi0JICogaGV4YWRlY2ltYWwgb3Igb2N0YWwgZGlnaXQsIHRoZXkgTVVTVCBiZSB6ZXJvLgotCSAqIFJGQyAyNjczLCBTZWN0aW9uIDMuMi4KLQkgKi8KLQlpZiAoYmxlbiA+IDApIHsKLQkJaW50IHRyYWlsbGVuOwotCi0JCWlmICgoKGJsZW4gKyAzKSAmIH4zKSAhPSB0YmNvdW50KQotCQkJcmV0dXJuKEVJTlZBTCk7Ci0JCXRyYWlsbGVuID0gdGJjb3VudCAtIGJsZW47IC8qIGJldHdlZW4gMCBhbmQgMyAqLwotCQlpZiAoKCh2YWx1ZSA8PCAoOCAtIHRyYWlsbGVuKSkgJiAweGZmKSAhPSAwKQotCQkJcmV0dXJuKEVJTlZBTCk7Ci0JfQotCWVsc2UKLQkJYmxlbiA9IHRiY291bnQ7Ci0JaWYgKGJsZW4gPT0gMjU2KQotCQlibGVuID0gMDsKLQotCS8qIGVuY29kZSB0aGUgdHlwZSBhbmQgdGhlIHNpZ25pZmljYW50IGJpdCBmaWVsZHMgKi8KLQkqKmxhYmVscCA9IEROU19MQUJFTFRZUEVfQklUU1RSSU5HOwotCSoqZHN0ID0gYmxlbjsKLQotCSpicCA9IGNwOwotCSpkc3QgPSB0cDsKLQotCXJldHVybigwKTsKLX0KLQotc3RhdGljIGludAotbGFiZWxsZW4oY29uc3QgdV9jaGFyICpscCkKLXsKLQlpbnQgYml0bGVuOwotCXVfY2hhciBsID0gKmxwOwotCi0JaWYgKChsICYgTlNfQ01QUlNGTEdTKSA9PSBOU19DTVBSU0ZMR1MpIHsKLQkJLyogc2hvdWxkIGJlIGF2b2lkZWQgYnkgdGhlIGNhbGxlciAqLwotCQlyZXR1cm4oLTEpOwotCX0KLQotCWlmICgobCAmIE5TX0NNUFJTRkxHUykgPT0gTlNfVFlQRV9FTFQpIHsKLQkJaWYgKGwgPT0gRE5TX0xBQkVMVFlQRV9CSVRTVFJJTkcpIHsKLQkJCWlmICgoYml0bGVuID0gKihscCArIDEpKSA9PSAwKQotCQkJCWJpdGxlbiA9IDI1NjsKLQkJCXJldHVybigoYml0bGVuICsgNyApIC8gOCArIDEpOwotCQl9Ci0JCXJldHVybigtMSk7CS8qIHVua253b24gRUxUICovCi0JfQotCXJldHVybihsKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfbmV0aW50LmMgYi9saWJjL25ldGJzZC9uYW1lc2VyL25zX25ldGludC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjI5NjRmLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfbmV0aW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgkkTmV0QlNEOiBuc19uZXRpbnQuYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjE5OjAwIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWZuZGVmIGxpbnQKLSNpZmRlZiBub3RkZWYKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX25ldGludC5jLHYgMS4xLjIwNi4xIDIwMDQvMDMvMDkgMDg6MzM6NDQgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBuc19uZXRpbnQuYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjE5OjAwIGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZgotCi0vKiBJbXBvcnQuICovCi0KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLQotLyogUHVibGljLiAqLwotCi11X2ludDE2X3QKLW5zX2dldDE2KGNvbnN0IHVfY2hhciAqc3JjKSB7Ci0JdV9pbnQgZHN0OwotCi0JTlNfR0VUMTYoZHN0LCBzcmMpOwotCXJldHVybiAoZHN0KTsKLX0KLQotdV9pbnQzMl90Ci1uc19nZXQzMihjb25zdCB1X2NoYXIgKnNyYykgewotCXVfbG9uZyBkc3Q7Ci0KLQlOU19HRVQzMihkc3QsIHNyYyk7Ci0JcmV0dXJuIChkc3QpOwotfQotCi12b2lkCi1uc19wdXQxNih1X2ludDE2X3Qgc3JjLCB1X2NoYXIgKmRzdCkgewotCU5TX1BVVDE2KHNyYywgZHN0KTsKLX0KLQotdm9pZAotbnNfcHV0MzIodV9pbnQzMl90IHNyYywgdV9jaGFyICpkc3QpIHsKLQlOU19QVVQzMihzcmMsIGRzdCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX3BhcnNlLmMgYi9saWJjL25ldGJzZC9uYW1lc2VyL25zX3BhcnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkOTQ4NjAuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvbmFtZXNlci9uc19wYXJzZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjA5ICswLDAgQEAKLS8qCSROZXRCU0Q6IG5zX3BhcnNlLmMsdiAxLjIgMjAwNC8wNS8yMCAyMDozNTowNSBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmbmRlZiBsaW50Ci0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBuc19wYXJzZS5jLHYgMS4zLjIuMS40LjEgMjAwNC8wMy8wOSAwODozMzo0NCBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IG5zX3BhcnNlLmMsdiAxLjIgMjAwNC8wNS8yMCAyMDozNTowNSBjaHJpc3RvcyBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYKLQotLyogSW1wb3J0LiAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jZWxzZQotI2luY2x1ZGUgPHJlc29sdi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIEZvcndhcmQuICovCi0KLXN0YXRpYyB2b2lkCXNldHNlY3Rpb24obnNfbXNnICptc2csIG5zX3NlY3Qgc2VjdCk7Ci0KLS8qIE1hY3Jvcy4gKi8KLQotI2RlZmluZSBSRVRFUlIoZXJyKSBkbyB7IGVycm5vID0gKGVycik7IHJldHVybiAoLTEpOyB9IHdoaWxlICgvKk5PVFJFQUNIRUQqLy8qQ09OU1RDT05EKi8wKQotCi0vKiBQdWJsaWMuICovCi0KLS8qIFRoZXNlIG5lZWQgdG8gYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIG5yZXMuaDpuc19mbGFnIGVudW0uICovCi1jb25zdCBzdHJ1Y3QgX25zX2ZsYWdkYXRhIF9uc19mbGFnZGF0YVsxNl0gPSB7Ci0JeyAweDgwMDAsIDE1IH0sCQkvKiBxci4gKi8KLQl7IDB4NzgwMCwgMTEgfSwJCS8qIG9wY29kZS4gKi8KLQl7IDB4MDQwMCwgMTAgfSwJCS8qIGFhLiAqLwotCXsgMHgwMjAwLCA5IH0sCQkvKiB0Yy4gKi8KLQl7IDB4MDEwMCwgOCB9LAkJLyogcmQuICovCi0JeyAweDAwODAsIDcgfSwJCS8qIHJhLiAqLwotCXsgMHgwMDQwLCA2IH0sCQkvKiB6LiAqLwotCXsgMHgwMDIwLCA1IH0sCQkvKiBhZC4gKi8KLQl7IDB4MDAxMCwgNCB9LAkJLyogY2QuICovCi0JeyAweDAwMGYsIDAgfSwJCS8qIHJjb2RlLiAqLwotCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDEvNikuICovCi0JeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoMi82KS4gKi8KLQl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICgzLzYpLiAqLwotCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDQvNikuICovCi0JeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoNS82KS4gKi8KLQl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICg2LzYpLiAqLwotfTsKLQotaW50IG5zX21zZ19nZXRmbGFnKG5zX21zZyBoYW5kbGUsIGludCBmbGFnKSB7Ci0JcmV0dXJuKCh1X2ludDMyX3QpKChoYW5kbGUpLl9mbGFncyAmIF9uc19mbGFnZGF0YVtmbGFnXS5tYXNrKSA+PiBfbnNfZmxhZ2RhdGFbZmxhZ10uc2hpZnQpOwotfQotCi1pbnQKLW5zX3NraXBycihjb25zdCB1X2NoYXIgKnB0ciwgY29uc3QgdV9jaGFyICplb20sIG5zX3NlY3Qgc2VjdGlvbiwgaW50IGNvdW50KSB7Ci0JY29uc3QgdV9jaGFyICpvcHRyID0gcHRyOwotCi0JZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgewotCQlpbnQgYiwgcmRsZW5ndGg7Ci0KLQkJYiA9IGRuX3NraXBuYW1lKHB0ciwgZW9tKTsKLQkJaWYgKGIgPCAwKQotCQkJUkVURVJSKEVNU0dTSVpFKTsKLQkJcHRyICs9IGIvKk5hbWUqLyArIE5TX0lOVDE2U1ovKlR5cGUqLyArIE5TX0lOVDE2U1ovKkNsYXNzKi87Ci0JCWlmIChzZWN0aW9uICE9IG5zX3NfcWQpIHsKLQkJCWlmIChwdHIgKyBOU19JTlQzMlNaICsgTlNfSU5UMTZTWiA+IGVvbSkKLQkJCQlSRVRFUlIoRU1TR1NJWkUpOwotCQkJcHRyICs9IE5TX0lOVDMyU1ovKlRUTCovOwotCQkJTlNfR0VUMTYocmRsZW5ndGgsIHB0cik7Ci0JCQlwdHIgKz0gcmRsZW5ndGgvKlJEYXRhKi87Ci0JCX0KLQl9Ci0JaWYgKHB0ciA+IGVvbSkKLQkJUkVURVJSKEVNU0dTSVpFKTsKLQlyZXR1cm4gKHB0ciAtIG9wdHIpOwotfQotCi1pbnQKLW5zX2luaXRwYXJzZShjb25zdCB1X2NoYXIgKm1zZywgaW50IG1zZ2xlbiwgbnNfbXNnICpoYW5kbGUpIHsKLQljb25zdCB1X2NoYXIgKmVvbSA9IG1zZyArIG1zZ2xlbjsKLQlpbnQgaTsKLQotCW1lbXNldChoYW5kbGUsIDB4NWUsIHNpemVvZiAqaGFuZGxlKTsKLQloYW5kbGUtPl9tc2cgPSBtc2c7Ci0JaGFuZGxlLT5fZW9tID0gZW9tOwotCWlmIChtc2cgKyBOU19JTlQxNlNaID4gZW9tKQotCQlSRVRFUlIoRU1TR1NJWkUpOwotCU5TX0dFVDE2KGhhbmRsZS0+X2lkLCBtc2cpOwotCWlmIChtc2cgKyBOU19JTlQxNlNaID4gZW9tKQotCQlSRVRFUlIoRU1TR1NJWkUpOwotCU5TX0dFVDE2KGhhbmRsZS0+X2ZsYWdzLCBtc2cpOwotCWZvciAoaSA9IDA7IGkgPCBuc19zX21heDsgaSsrKSB7Ci0JCWlmIChtc2cgKyBOU19JTlQxNlNaID4gZW9tKQotCQkJUkVURVJSKEVNU0dTSVpFKTsKLQkJTlNfR0VUMTYoaGFuZGxlLT5fY291bnRzW2ldLCBtc2cpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbnNfc19tYXg7IGkrKykKLQkJaWYgKGhhbmRsZS0+X2NvdW50c1tpXSA9PSAwKQotCQkJaGFuZGxlLT5fc2VjdGlvbnNbaV0gPSBOVUxMOwotCQllbHNlIHsKLQkJCWludCBiID0gbnNfc2tpcHJyKG1zZywgZW9tLCAobnNfc2VjdClpLAotCQkJCQkgIGhhbmRsZS0+X2NvdW50c1tpXSk7Ci0KLQkJCWlmIChiIDwgMCkKLQkJCQlyZXR1cm4gKC0xKTsKLQkJCWhhbmRsZS0+X3NlY3Rpb25zW2ldID0gbXNnOwotCQkJbXNnICs9IGI7Ci0JCX0KLQlpZiAobXNnICE9IGVvbSkKLQkJUkVURVJSKEVNU0dTSVpFKTsKLQlzZXRzZWN0aW9uKGhhbmRsZSwgbnNfc19tYXgpOwotCXJldHVybiAoMCk7Ci19Ci0KLWludAotbnNfcGFyc2Vycihuc19tc2cgKmhhbmRsZSwgbnNfc2VjdCBzZWN0aW9uLCBpbnQgcnJudW0sIG5zX3JyICpycikgewotCWludCBiOwotCi0JLyogTWFrZSBzZWN0aW9uIHJpZ2h0LiAqLwotCWlmICgodW5zaWduZWQpc2VjdGlvbiA+PSAodW5zaWduZWQpbnNfc19tYXgpCi0JCVJFVEVSUihFTk9ERVYpOwotCWlmIChzZWN0aW9uICE9IGhhbmRsZS0+X3NlY3QpCi0JCXNldHNlY3Rpb24oaGFuZGxlLCBzZWN0aW9uKTsKLQotCS8qIE1ha2UgcnJudW0gcmlnaHQuICovCi0JaWYgKHJybnVtID09IC0xKQotCQlycm51bSA9IGhhbmRsZS0+X3JybnVtOwotCWlmIChycm51bSA8IDAgfHwgcnJudW0gPj0gaGFuZGxlLT5fY291bnRzWyhpbnQpc2VjdGlvbl0pCi0JCVJFVEVSUihFTk9ERVYpOwotCWlmIChycm51bSA8IGhhbmRsZS0+X3JybnVtKQotCQlzZXRzZWN0aW9uKGhhbmRsZSwgc2VjdGlvbik7Ci0JaWYgKHJybnVtID4gaGFuZGxlLT5fcnJudW0pIHsKLQkJYiA9IG5zX3NraXBycihoYW5kbGUtPl9tc2dfcHRyLCBoYW5kbGUtPl9lb20sIHNlY3Rpb24sCi0JCQkgICAgICBycm51bSAtIGhhbmRsZS0+X3JybnVtKTsKLQotCQlpZiAoYiA8IDApCi0JCQlyZXR1cm4gKC0xKTsKLQkJaGFuZGxlLT5fbXNnX3B0ciArPSBiOwotCQloYW5kbGUtPl9ycm51bSA9IHJybnVtOwotCX0KLQotCS8qIERvIHRoZSBwYXJzZS4gKi8KLQliID0gZG5fZXhwYW5kKGhhbmRsZS0+X21zZywgaGFuZGxlLT5fZW9tLAotCQkgICAgICBoYW5kbGUtPl9tc2dfcHRyLCByci0+bmFtZSwgTlNfTUFYRE5BTUUpOwotCWlmIChiIDwgMCkKLQkJcmV0dXJuICgtMSk7Ci0JaGFuZGxlLT5fbXNnX3B0ciArPSBiOwotCWlmIChoYW5kbGUtPl9tc2dfcHRyICsgTlNfSU5UMTZTWiArIE5TX0lOVDE2U1ogPiBoYW5kbGUtPl9lb20pCi0JCVJFVEVSUihFTVNHU0laRSk7Ci0JTlNfR0VUMTYocnItPnR5cGUsIGhhbmRsZS0+X21zZ19wdHIpOwotCU5TX0dFVDE2KHJyLT5ycl9jbGFzcywgaGFuZGxlLT5fbXNnX3B0cik7Ci0JaWYgKHNlY3Rpb24gPT0gbnNfc19xZCkgewotCQlyci0+dHRsID0gMDsKLQkJcnItPnJkbGVuZ3RoID0gMDsKLQkJcnItPnJkYXRhID0gTlVMTDsKLQl9IGVsc2UgewotCQlpZiAoaGFuZGxlLT5fbXNnX3B0ciArIE5TX0lOVDMyU1ogKyBOU19JTlQxNlNaID4gaGFuZGxlLT5fZW9tKQotCQkJUkVURVJSKEVNU0dTSVpFKTsKLQkJTlNfR0VUMzIocnItPnR0bCwgaGFuZGxlLT5fbXNnX3B0cik7Ci0JCU5TX0dFVDE2KHJyLT5yZGxlbmd0aCwgaGFuZGxlLT5fbXNnX3B0cik7Ci0JCWlmIChoYW5kbGUtPl9tc2dfcHRyICsgcnItPnJkbGVuZ3RoID4gaGFuZGxlLT5fZW9tKQotCQkJUkVURVJSKEVNU0dTSVpFKTsKLQkJcnItPnJkYXRhID0gaGFuZGxlLT5fbXNnX3B0cjsKLQkJaGFuZGxlLT5fbXNnX3B0ciArPSByci0+cmRsZW5ndGg7Ci0JfQotCWlmICgrK2hhbmRsZS0+X3JybnVtID4gaGFuZGxlLT5fY291bnRzWyhpbnQpc2VjdGlvbl0pCi0JCXNldHNlY3Rpb24oaGFuZGxlLCAobnNfc2VjdCkoKGludClzZWN0aW9uICsgMSkpOwotCi0JLyogQWxsIGRvbmUuICovCi0JcmV0dXJuICgwKTsKLX0KLQotLyogUHJpdmF0ZS4gKi8KLQotc3RhdGljIHZvaWQKLXNldHNlY3Rpb24obnNfbXNnICptc2csIG5zX3NlY3Qgc2VjdCkgewotCW1zZy0+X3NlY3QgPSBzZWN0OwotCWlmIChzZWN0ID09IG5zX3NfbWF4KSB7Ci0JCW1zZy0+X3JybnVtID0gLTE7Ci0JCW1zZy0+X21zZ19wdHIgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCW1zZy0+X3JybnVtID0gMDsKLQkJbXNnLT5fbXNnX3B0ciA9IG1zZy0+X3NlY3Rpb25zWyhpbnQpc2VjdF07Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmFtZXNlci9uc19wcmludC5jIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc19wcmludC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDY1ZTYyLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfcHJpbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDkxNSArMCwwIEBACi0vKgkkTmV0QlNEOiBuc19wcmludC5jLHYgMS41IDIwMDQvMTEvMDcgMDI6MTk6NDkgY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZm5kZWYgbGludAotI2lmZGVmIG5vdGRlZgotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfcHJpbnQuYyx2IDEuMy4yLjEuNC41IDIwMDQvMDcvMjggMjA6MTY6NDUgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBuc19wcmludC5jLHYgMS41IDIwMDQvMTEvMDcgMDI6MTk6NDkgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmCi0KLS8qIEltcG9ydC4gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLQotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLQotI2luY2x1ZGUgPGlzYy9hc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8aXNjL2RzdC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCi0jaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKLSNlbHNlCi0jaW5jbHVkZSA8cmVzb2x2Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi0jaWZkZWYgU1BSSU5URl9DSEFSCi0jIGRlZmluZSBTUFJJTlRGKHgpIHN0cmxlbihzcHJpbnRmLyoqL3gpCi0jZWxzZQotIyBkZWZpbmUgU1BSSU5URih4KSAoKHNpemVfdClzcHJpbnRmIHgpCi0jZW5kaWYKLQotI2lmbmRlZiBNSU4KLSNkZWZpbmUJTUlOKHgseSkJKCh4KTwoeSk/KHgpOih5KSkKLSNlbmRpZgotCi0vKiBGb3J3YXJkLiAqLwotCi1zdGF0aWMgc2l6ZV90CXBydW5lX29yaWdpbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpvcmlnaW4pOwotc3RhdGljIGludAljaGFyc3RyKGNvbnN0IHVfY2hhciAqcmRhdGEsIGNvbnN0IHVfY2hhciAqZWRhdGEsCi0JCQljaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7Ci1zdGF0aWMgaW50CWFkZG5hbWUoY29uc3QgdV9jaGFyICptc2csIHNpemVfdCBtc2dsZW4sCi0JCQljb25zdCB1X2NoYXIgKipwLCBjb25zdCBjaGFyICpvcmlnaW4sCi0JCQljaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7Ci1zdGF0aWMgdm9pZAlhZGRsZW4oc2l6ZV90IGxlbiwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOwotc3RhdGljIGludAlhZGRzdHIoY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAotCQkgICAgICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOwotc3RhdGljIGludAlhZGR0YWIoc2l6ZV90IGxlbiwgc2l6ZV90IHRhcmdldCwgaW50IHNwYWNlZCwKLQkJICAgICAgIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKLQotLyogTWFjcm9zLiAqLwotCi0jZGVmaW5lCVQoeCkgXAotCWRvIHsgXAotCQlpZiAoKHgpIDwgMCkgXAotCQkJcmV0dXJuICgtMSk7IFwKLQl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotLyogUHVibGljLiAqLwotCi0vKgotICogaW50Ci0gKiBuc19zcHJpbnRycihoYW5kbGUsIHJyLCBuYW1lX2N0eCwgb3JpZ2luLCBidWYsIGJ1ZmxlbikKLSAqCUNvbnZlcnQgYW4gUlIgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KLSAqIHJldHVybjoKLSAqCU51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gdG8gYnVmLCBvciAtMSAoY2hlY2sgZXJybm8pLgotICovCi1pbnQKLW5zX3NwcmludHJyKGNvbnN0IG5zX21zZyAqaGFuZGxlLCBjb25zdCBuc19yciAqcnIsCi0JICAgIGNvbnN0IGNoYXIgKm5hbWVfY3R4LCBjb25zdCBjaGFyICpvcmlnaW4sCi0JICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsKLQlpbnQgbjsKLQotCW4gPSBuc19zcHJpbnRycmYobnNfbXNnX2Jhc2UoKmhhbmRsZSksIG5zX21zZ19zaXplKCpoYW5kbGUpLAotCQkJIG5zX3JyX25hbWUoKnJyKSwgbnNfcnJfY2xhc3MoKnJyKSwgbnNfcnJfdHlwZSgqcnIpLAotCQkJIG5zX3JyX3R0bCgqcnIpLCBuc19ycl9yZGF0YSgqcnIpLCBuc19ycl9yZGxlbigqcnIpLAotCQkJIG5hbWVfY3R4LCBvcmlnaW4sIGJ1ZiwgYnVmbGVuKTsKLQlyZXR1cm4gKG4pOwotfQotCi0vKgotICogaW50Ci0gKiBuc19zcHJpbnRycmYobXNnLCBtc2dsZW4sIG5hbWUsIGNsYXNzLCB0eXBlLCB0dGwsIHJkYXRhLCByZGxlbiwKLSAqCSAgICAgICBuYW1lX2N0eCwgb3JpZ2luLCBidWYsIGJ1ZmxlbikKLSAqCUNvbnZlcnQgdGhlIGZpZWxkcyBvZiBhbiBSUiBpbnRvIHByZXNlbnRhdGlvbiBmb3JtYXQuCi0gKiByZXR1cm46Ci0gKglOdW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIHRvIGJ1Ziwgb3IgLTEgKGNoZWNrIGVycm5vKS4KLSAqLwotaW50Ci1uc19zcHJpbnRycmYoY29uc3QgdV9jaGFyICptc2csIHNpemVfdCBtc2dsZW4sCi0JICAgIGNvbnN0IGNoYXIgKm5hbWUsIG5zX2NsYXNzIGNsYXNzLCBuc190eXBlIHR5cGUsCi0JICAgIHVfbG9uZyB0dGwsIGNvbnN0IHVfY2hhciAqcmRhdGEsIHNpemVfdCByZGxlbiwKLQkgICAgY29uc3QgY2hhciAqbmFtZV9jdHgsIGNvbnN0IGNoYXIgKm9yaWdpbiwKLQkgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQotewotCWNvbnN0IGNoYXIgKm9idWYgPSBidWY7Ci0JY29uc3QgdV9jaGFyICplZGF0YSA9IHJkYXRhICsgcmRsZW47Ci0JaW50IHNwYWNlZCA9IDA7Ci0KLQljb25zdCBjaGFyICpjb21tZW50OwotCWNoYXIgdG1wWzEwMF07Ci0JaW50IGxlbiwgeDsKLQotCS8qCi0JICogT3duZXIuCi0JICovCi0JaWYgKG5hbWVfY3R4ICE9IE5VTEwgJiYgbnNfc2FtZW5hbWUobmFtZV9jdHgsIG5hbWUpID09IDEpIHsKLQkJVChhZGRzdHIoIlx0XHRcdCIsIChzaXplX3QpMywgJmJ1ZiwgJmJ1ZmxlbikpOwotCX0gZWxzZSB7Ci0JCWxlbiA9IHBydW5lX29yaWdpbihuYW1lLCBvcmlnaW4pOwotCQlpZiAoKm5hbWUgPT0gJ1wwJykgewotCQkJZ290byByb290OwotCQl9IGVsc2UgaWYgKGxlbiA9PSAwKSB7Ci0JCQlUKGFkZHN0cigiQFx0XHRcdCIsIChzaXplX3QpNCwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQl9IGVsc2UgewotCQkJVChhZGRzdHIobmFtZSwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQkJCS8qIE9yaWdpbiBub3QgdXNlZCBvciBub3Qgcm9vdCwgYW5kIG5vIHRyYWlsaW5nIGRvdD8gKi8KLQkJCWlmICgoKG9yaWdpbiA9PSBOVUxMIHx8IG9yaWdpblswXSA9PSAnXDAnKSB8fAotCQkJICAgIChvcmlnaW5bMF0gIT0gJy4nICYmIG9yaWdpblsxXSAhPSAnXDAnICYmCi0JCQkgICAgbmFtZVtsZW5dID09ICdcMCcpKSAmJiBuYW1lW2xlbiAtIDFdICE9ICcuJykgewotIHJvb3Q6Ci0JCQkJVChhZGRzdHIoIi4iLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKLQkJCQlsZW4rKzsKLQkJCX0KLQkJCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAyNCwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFRUTCwgQ2xhc3MsIFR5cGUuCi0JICovCi0JVCh4ID0gbnNfZm9ybWF0X3R0bCh0dGwsIGJ1ZiwgYnVmbGVuKSk7Ci0JYWRkbGVuKChzaXplX3QpeCwgJmJ1ZiwgJmJ1Zmxlbik7Ci0JbGVuID0gU1BSSU5URigodG1wLCAiICVzICVzIiwgcF9jbGFzcyhjbGFzcyksIHBfdHlwZSh0eXBlKSkpOwotCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KSh4ICsgbGVuKSwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkvKgotCSAqIFJEYXRhLgotCSAqLwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgbnNfdF9hOgotCQlpZiAocmRsZW4gIT0gKHNpemVfdClOU19JTkFERFJTWikKLQkJCWdvdG8gZm9ybWVycjsKLQkJKHZvaWQpIGluZXRfbnRvcChBRl9JTkVULCByZGF0YSwgYnVmLCBidWZsZW4pOwotCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOwotCQlicmVhazsKLQotCWNhc2UgbnNfdF9jbmFtZToKLQljYXNlIG5zX3RfbWI6Ci0JY2FzZSBuc190X21nOgotCWNhc2UgbnNfdF9tcjoKLQljYXNlIG5zX3RfbnM6Ci0JY2FzZSBuc190X3B0cjoKLQljYXNlIG5zX3RfZG5hbWU6Ci0JCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKLQkJYnJlYWs7Ci0KLQljYXNlIG5zX3RfaGluZm86Ci0JY2FzZSBuc190X2lzZG46Ci0JCS8qIEZpcnN0IHdvcmQuICovCi0JCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKLQkJaWYgKGxlbiA9PSAwKQotCQkJZ290byBmb3JtZXJyOwotCQlyZGF0YSArPSBsZW47Ci0JCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQotCQkvKiBTZWNvbmQgd29yZCwgb3B0aW9uYWwgaW4gSVNETiByZWNvcmRzLiAqLwotCQlpZiAodHlwZSA9PSBuc190X2lzZG4gJiYgcmRhdGEgPT0gZWRhdGEpCi0JCQlicmVhazsKLQotCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWlmIChsZW4gPT0gMCkKLQkJCWdvdG8gZm9ybWVycjsKLQkJcmRhdGEgKz0gbGVuOwotCQlicmVhazsKLQotCWNhc2UgbnNfdF9zb2E6IHsKLQkJdV9sb25nIHQ7Ci0KLQkJLyogU2VydmVyIG5hbWUuICovCi0JCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKLQkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBBZG1pbmlzdHJhdG9yIG5hbWUuICovCi0JCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKLQkJVChhZGRzdHIoIiAoXG4iLCAoc2l6ZV90KTMsICZidWYsICZidWZsZW4pKTsKLQkJc3BhY2VkID0gMDsKLQotCQlpZiAoKGVkYXRhIC0gcmRhdGEpICE9IDUqTlNfSU5UMzJTWikKLQkJCWdvdG8gZm9ybWVycjsKLQotCQkvKiBTZXJpYWwgbnVtYmVyLiAqLwotCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKLQkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJWx1IiwgdCkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKLQkJVChhZGRzdHIoIjsgc2VyaWFsXG4iLCAoc2l6ZV90KTksICZidWYsICZidWZsZW4pKTsKLQkJc3BhY2VkID0gMDsKLQotCQkvKiBSZWZyZXNoIGludGVydmFsLiAqLwotCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKLQkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKLQkJVChsZW4gPSBuc19mb3JtYXRfdHRsKHQsIGJ1ZiwgYnVmbGVuKSk7Ci0JCWFkZGxlbigoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1Zmxlbik7Ci0JCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKLQkJVChhZGRzdHIoIjsgcmVmcmVzaFxuIiwgKHNpemVfdCkxMCwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlzcGFjZWQgPSAwOwotCi0JCS8qIFJldHJ5IGludGVydmFsLiAqLwotCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKLQkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKLQkJVChsZW4gPSBuc19mb3JtYXRfdHRsKHQsIGJ1ZiwgYnVmbGVuKSk7Ci0JCWFkZGxlbigoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1Zmxlbik7Ci0JCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKLQkJVChhZGRzdHIoIjsgcmV0cnlcbiIsIChzaXplX3QpOCwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlzcGFjZWQgPSAwOwotCi0JCS8qIEV4cGlyeS4gKi8KLQkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7Ci0JCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQobGVuID0gbnNfZm9ybWF0X3R0bCh0LCBidWYsIGJ1ZmxlbikpOwotCQlhZGRsZW4oKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pOwotCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkc3RyKCI7IGV4cGlyeVxuIiwgKHNpemVfdCk5LCAmYnVmLCAmYnVmbGVuKSk7Ci0JCXNwYWNlZCA9IDA7Ci0KLQkJLyogTWluaW11bSBUVEwuICovCi0JCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOwotCQlUKGFkZHN0cigiXHRcdFx0XHRcdCIsIChzaXplX3QpNSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlUKGxlbiA9IG5zX2Zvcm1hdF90dGwodCwgYnVmLCBidWZsZW4pKTsKLQkJYWRkbGVuKChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKTsKLQkJVChhZGRzdHIoIiApIiwgKHNpemVfdCkyLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKLQkJVChhZGRzdHIoIjsgbWluaW11bVxuIiwgKHNpemVfdCkxMCwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCWJyZWFrOwotCSAgICB9Ci0KLQljYXNlIG5zX3RfbXg6Ci0JY2FzZSBuc190X2Fmc2RiOgotCWNhc2UgbnNfdF9ydDogewotCQl1X2ludCB0OwotCi0JCWlmIChyZGxlbiA8IChzaXplX3QpTlNfSU5UMTZTWikKLQkJCWdvdG8gZm9ybWVycjsKLQotCQkvKiBQcmlvcml0eS4gKi8KLQkJdCA9IG5zX2dldDE2KHJkYXRhKTsKLQkJcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgdCkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogVGFyZ2V0LiAqLwotCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJYnJlYWs7Ci0JICAgIH0KLQotCWNhc2UgbnNfdF9weDogewotCQl1X2ludCB0OwotCi0JCWlmIChyZGxlbiA8IChzaXplX3QpTlNfSU5UMTZTWikKLQkJCWdvdG8gZm9ybWVycjsKLQotCQkvKiBQcmlvcml0eS4gKi8KLQkJdCA9IG5zX2dldDE2KHJkYXRhKTsKLQkJcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgdCkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogTmFtZTEuICovCi0JCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKLQkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBOYW1lMi4gKi8KLQkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCWJyZWFrOwotCSAgICB9Ci0KLQljYXNlIG5zX3RfeDI1OgotCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWlmIChsZW4gPT0gMCkKLQkJCWdvdG8gZm9ybWVycjsKLQkJcmRhdGEgKz0gbGVuOwotCQlicmVhazsKLQotCWNhc2UgbnNfdF90eHQ6Ci0JCXdoaWxlIChyZGF0YSA8IGVkYXRhKSB7Ci0JCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCQlpZiAobGVuID09IDApCi0JCQkJZ290byBmb3JtZXJyOwotCQkJcmRhdGEgKz0gbGVuOwotCQkJaWYgKHJkYXRhIDwgZWRhdGEpCi0JCQkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgbnNfdF9uc2FwOiB7Ci0JCWNoYXIgdFsyKzI1NSozXTsKLQotCQkodm9pZCkgaW5ldF9uc2FwX250b2EoKGludClyZGxlbiwgcmRhdGEsIHQpOwotCQlUKGFkZHN0cih0LCBzdHJsZW4odCksICZidWYsICZidWZsZW4pKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQotCWNhc2UgbnNfdF9hYWFhOgotCQlpZiAocmRsZW4gIT0gKHNpemVfdClOU19JTjZBRERSU1opCi0JCQlnb3RvIGZvcm1lcnI7Ci0JCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVDYsIHJkYXRhLCBidWYsIGJ1Zmxlbik7Ci0JCWFkZGxlbihzdHJsZW4oYnVmKSwgJmJ1ZiwgJmJ1Zmxlbik7Ci0JCWJyZWFrOwotCi0JY2FzZSBuc190X2xvYzogewotCQljaGFyIHRbMjU1XTsKLQotCQkvKiBYWFggcHJvdG9jb2wgZm9ybWF0IGNoZWNraW5nPyAqLwotCQkodm9pZCkgbG9jX250b2EocmRhdGEsIHQpOwotCQlUKGFkZHN0cih0LCBzdHJsZW4odCksICZidWYsICZidWZsZW4pKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQotCWNhc2UgbnNfdF9uYXB0cjogewotCQl1X2ludCBvcmRlciwgcHJlZmVyZW5jZTsKLQkJY2hhciB0WzUwXTsKLQotCQlpZiAocmRsZW4gPCAyVSpOU19JTlQxNlNaKQotCQkJZ290byBmb3JtZXJyOwotCi0JCS8qIE9yZGVyLCBQcmVjZWRlbmNlLiAqLwotCQlvcmRlciA9IG5zX2dldDE2KHJkYXRhKTsJcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJcHJlZmVyZW5jZSA9IG5zX2dldDE2KHJkYXRhKTsJcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJbGVuID0gU1BSSU5URigodCwgIiV1ICV1ICIsIG9yZGVyLCBwcmVmZXJlbmNlKSk7Ci0JCVQoYWRkc3RyKHQsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogRmxhZ3MuICovCi0JCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKLQkJaWYgKGxlbiA9PSAwKQotCQkJZ290byBmb3JtZXJyOwotCQlyZGF0YSArPSBsZW47Ci0JCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogU2VydmljZS4gKi8KLQkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlpZiAobGVuID09IDApCi0JCQlnb3RvIGZvcm1lcnI7Ci0JCXJkYXRhICs9IGxlbjsKLQkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBSZWdleHAuICovCi0JCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKLQkJaWYgKGxlbiA8IDApCi0JCQlyZXR1cm4gKC0xKTsKLQkJaWYgKGxlbiA9PSAwKQotCQkJZ290byBmb3JtZXJyOwotCQlyZGF0YSArPSBsZW47Ci0JCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogU2VydmVyLiAqLwotCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWJyZWFrOwotCSAgICB9Ci0KLQljYXNlIG5zX3Rfc3J2OiB7Ci0JCXVfaW50IHByaW9yaXR5LCB3ZWlnaHQsIHBvcnQ7Ci0JCWNoYXIgdFs1MF07Ci0KLQkJaWYgKHJkbGVuIDwgM1UqTlNfSU5UMTZTWikKLQkJCWdvdG8gZm9ybWVycjsKLQotCQkvKiBQcmlvcml0eSwgV2VpZ2h0LCBQb3J0LiAqLwotCQlwcmlvcml0eSA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCXdlaWdodCAgID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJcG9ydCAgICAgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOwotCQlsZW4gPSBTUFJJTlRGKCh0LCAiJXUgJXUgJXUgIiwgcHJpb3JpdHksIHdlaWdodCwgcG9ydCkpOwotCQlUKGFkZHN0cih0LCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCS8qIFNlcnZlci4gKi8KLQkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQlicmVhazsKLQkgICAgfQotCi0JY2FzZSBuc190X21pbmZvOgotCWNhc2UgbnNfdF9ycDoKLQkJLyogTmFtZTEuICovCi0JCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKLQkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBOYW1lMi4gKi8KLQkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCWJyZWFrOwotCi0JY2FzZSBuc190X3drczogewotCQlpbnQgbiwgbGNudDsKLQotCQlpZiAocmRsZW4gPCAxVSArIE5TX0lOVDMyU1opCi0JCQlnb3RvIGZvcm1lcnI7Ci0KLQkJLyogQWRkcmVzcy4gKi8KLQkJKHZvaWQpIGluZXRfbnRvcChBRl9JTkVULCByZGF0YSwgYnVmLCBidWZsZW4pOwotCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOwotCQlyZGF0YSArPSBOU19JTkFERFJTWjsKLQotCQkvKiBQcm90b2NvbC4gKi8KLQkJbGVuID0gU1BSSU5URigodG1wLCAiICV1ICggIiwgKnJkYXRhKSk7Ci0JCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQkJcmRhdGEgKz0gTlNfSU5UOFNaOwotCi0JCS8qIEJpdCBtYXAuICovCi0JCW4gPSAwOwotCQlsY250ID0gMDsKLQkJd2hpbGUgKHJkYXRhIDwgZWRhdGEpIHsKLQkJCXVfaW50IGMgPSAqcmRhdGErKzsKLQkJCWRvIHsKLQkJCQlpZiAoYyAmIDAyMDApIHsKLQkJCQkJaWYgKGxjbnQgPT0gMCkgewotCQkJCQkJVChhZGRzdHIoIlxuXHRcdFx0XHQiLCAoc2l6ZV90KTUsCi0JCQkJCQkJICZidWYsICZidWZsZW4pKTsKLQkJCQkJCWxjbnQgPSAxMDsKLQkJCQkJCXNwYWNlZCA9IDA7Ci0JCQkJCX0KLQkJCQkJbGVuID0gU1BSSU5URigodG1wLCAiJWQgIiwgbikpOwotCQkJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCQkJCWxjbnQtLTsKLQkJCQl9Ci0JCQkJYyA8PD0gMTsKLQkJCX0gd2hpbGUgKCsrbiAmIDA3KTsKLQkJfQotCQlUKGFkZHN0cigiKSIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCWJyZWFrOwotCSAgICB9Ci0KLQljYXNlIG5zX3Rfa2V5OiB7Ci0JCWNoYXIgYmFzZTY0X2tleVtOU19NRDVSU0FfTUFYX0JBU0U2NF07Ci0JCXVfaW50IGtleWZsYWdzLCBwcm90b2NvbCwgYWxnb3JpdGhtLCBrZXlfaWQ7Ci0JCWNvbnN0IGNoYXIgKmxlYWRlcjsKLQkJaW50IG47Ci0KLQkJaWYgKHJkbGVuIDwgMFUgKyBOU19JTlQxNlNaICsgTlNfSU5UOFNaICsgTlNfSU5UOFNaKQotCQkJZ290byBmb3JtZXJyOwotCi0JCS8qIEtleSBmbGFncywgUHJvdG9jb2wsIEFsZ29yaXRobS4gKi8KLSNpZm5kZWYgX0xJQkMKLQkJa2V5X2lkID0gZHN0X3NfZG5zX2tleV9pZChyZGF0YSwgZWRhdGEtcmRhdGEpOwotI2Vsc2UKLQkJa2V5X2lkID0gMDsKLSNlbmRpZgotCQlrZXlmbGFncyA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCXByb3RvY29sID0gKnJkYXRhKys7Ci0JCWFsZ29yaXRobSA9ICpyZGF0YSsrOwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIweCUwNHggJXUgJXUiLAotCQkJICAgICAgIGtleWZsYWdzLCBwcm90b2NvbCwgYWxnb3JpdGhtKSk7Ci0JCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBQdWJsaWMga2V5IGRhdGEuICovCi0JCWxlbiA9IGI2NF9udG9wKHJkYXRhLCAoc2l6ZV90KShlZGF0YSAtIHJkYXRhKSwKLQkJCSAgICAgICBiYXNlNjRfa2V5LCBzaXplb2YgYmFzZTY0X2tleSk7Ci0JCWlmIChsZW4gPCAwKQotCQkJZ290byBmb3JtZXJyOwotCQlpZiAobGVuID4gMTUpIHsKLQkJCVQoYWRkc3RyKCIgKCIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQkJbGVhZGVyID0gIlxuXHRcdCI7Ci0JCQlzcGFjZWQgPSAwOwotCQl9IGVsc2UKLQkJCWxlYWRlciA9ICIgIjsKLQkJZm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSA0OCkgewotCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQkJVChhZGRzdHIoYmFzZTY0X2tleSArIG4sIChzaXplX3QpTUlOKGxlbiAtIG4sIDQ4KSwKLQkJCQkgJmJ1ZiwgJmJ1ZmxlbikpOwotCQl9Ci0JCWlmIChsZW4gPiAxNSkKLQkJCVQoYWRkc3RyKCIgKSIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQluID0gU1BSSU5URigodG1wLCAiIDsga2V5X3RhZz0gJXUiLCBrZXlfaWQpKTsKLQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KW4sICZidWYsICZidWZsZW4pKTsKLQotCQlicmVhazsKLQkgICAgfQotCi0JY2FzZSBuc190X3NpZzogewotCQljaGFyIGJhc2U2NF9rZXlbTlNfTUQ1UlNBX01BWF9CQVNFNjRdOwotCQl1X2ludCB0eXAsIGFsZ29yaXRobSwgbGFiZWxzLCBmb290cHJpbnQ7Ci0JCWNvbnN0IGNoYXIgKmxlYWRlcjsKLQkJdV9sb25nIHQ7Ci0JCWludCBuOwotCi0JCWlmIChyZGxlbiA8IDIyVSkKLQkJCWdvdG8gZm9ybWVycjsKLQotCQkvKiBUeXBlIGNvdmVyZWQsIEFsZ29yaXRobSwgTGFiZWwgY291bnQsIE9yaWdpbmFsIFRUTC4gKi8KLQkgICAgICAgIHR5cCA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWFsZ29yaXRobSA9ICpyZGF0YSsrOwotCQlsYWJlbHMgPSAqcmRhdGErKzsKLQkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICVkICVkICVsdSAiLAotCQkJICAgICAgIHBfdHlwZSgoaW50KXR5cCksIGFsZ29yaXRobSwgbGFiZWxzLCB0KSk7Ci0JCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQkJaWYgKGxhYmVscyA+ICh1X2ludClkbl9jb3VudF9sYWJlbHMobmFtZSkpCi0JCQlnb3RvIGZvcm1lcnI7Ci0KLQkJLyogU2lnbmF0dXJlIGV4cGlyeS4gKi8KLQkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogVGltZSBzaWduZWQuICovCi0JCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOwotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlcyAiLCBwX3NlY3N0b2RhdGUodCkpKTsKLQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCS8qIFNpZ25hdHVyZSBGb290cHJpbnQuICovCi0JCWZvb3RwcmludCA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsIGZvb3RwcmludCkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogU2lnbmVyJ3MgbmFtZS4gKi8KLQkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCi0JCS8qIFNpZ25hdHVyZS4gKi8KLQkJbGVuID0gYjY0X250b3AocmRhdGEsIChzaXplX3QpKGVkYXRhIC0gcmRhdGEpLAotCQkJICAgICAgIGJhc2U2NF9rZXksIHNpemVvZiBiYXNlNjRfa2V5KTsKLQkJaWYgKGxlbiA+IDE1KSB7Ci0JCQlUKGFkZHN0cigiICgiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKLQkJCWxlYWRlciA9ICJcblx0XHQiOwotCQkJc3BhY2VkID0gMDsKLQkJfSBlbHNlCi0JCQlsZWFkZXIgPSAiICI7Ci0JCWlmIChsZW4gPCAwKQotCQkJZ290byBmb3JtZXJyOwotCQlmb3IgKG4gPSAwOyBuIDwgbGVuOyBuICs9IDQ4KSB7Ci0JCQlUKGFkZHN0cihsZWFkZXIsIHN0cmxlbihsZWFkZXIpLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCQlUKGFkZHN0cihiYXNlNjRfa2V5ICsgbiwgKHNpemVfdClNSU4obGVuIC0gbiwgNDgpLAotCQkJCSAmYnVmLCAmYnVmbGVuKSk7Ci0JCX0KLQkJaWYgKGxlbiA+IDE1KQotCQkJVChhZGRzdHIoIiApIiwgKHNpemVfdCkyLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWJyZWFrOwotCSAgICB9Ci0KLQljYXNlIG5zX3Rfbnh0OiB7Ci0JCWludCBuLCBjOwotCi0JCS8qIE5leHQgZG9tYWluIG5hbWUuICovCi0JCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBUeXBlIGJpdCBtYXAuICovCi0JCW4gPSBlZGF0YSAtIHJkYXRhOwotCQlmb3IgKGMgPSAwOyBjIDwgbio4OyBjKyspCi0JCQlpZiAoTlNfTlhUX0JJVF9JU1NFVChjLCByZGF0YSkpIHsKLQkJCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIgJXMiLCBwX3R5cGUoYykpKTsKLQkJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCQl9Ci0JCWJyZWFrOwotCSAgICB9Ci0KLQljYXNlIG5zX3RfY2VydDogewotCQl1X2ludCBjX3R5cGUsIGtleV90YWcsIGFsZzsKLQkJaW50IG47Ci0JCXVuc2lnbmVkIGludCBzaXo7Ci0JCWNoYXIgYmFzZTY0X2NlcnRbODE5Ml0sIHRtcDFbNDBdOwotCQljb25zdCBjaGFyICpsZWFkZXI7Ci0KLQkJY190eXBlICA9IG5zX2dldDE2KHJkYXRhKTsgcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJa2V5X3RhZyA9IG5zX2dldDE2KHJkYXRhKTsgcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJYWxnID0gKHVfaW50KSAqcmRhdGErKzsKLQotCQlsZW4gPSBTUFJJTlRGKCh0bXAxLCAiJWQgJWQgJWQgIiwgY190eXBlLCBrZXlfdGFnLCBhbGcpKTsKLQkJVChhZGRzdHIodG1wMSwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQkJc2l6ID0gKGVkYXRhLXJkYXRhKSo0LzMgKyA0OyAvKiAiKzQiIGFjY291bnRzIGZvciB0cmFpbGluZyBcMCAqLwotCQlpZiAoc2l6ID4gc2l6ZW9mKGJhc2U2NF9jZXJ0KSAqIDMvNCkgewotCQkJY29uc3QgY2hhciAqc3RyID0gInJlY29yZCB0b28gbG9uZyB0byBwcmludCI7Ci0JCQlUKGFkZHN0cihzdHIsIHN0cmxlbihzdHIpLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlsZW4gPSBiNjRfbnRvcChyZGF0YSwgKHNpemVfdCkoZWRhdGEtcmRhdGEpLAotCQkJICAgIGJhc2U2NF9jZXJ0LCBzaXopOwotCi0JCQlpZiAobGVuIDwgMCkKLQkJCQlnb3RvIGZvcm1lcnI7Ci0JCQllbHNlIGlmIChsZW4gPiAxNSkgewotCQkJCVQoYWRkc3RyKCIgKCIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQkJCWxlYWRlciA9ICJcblx0XHQiOwotCQkJCXNwYWNlZCA9IDA7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJbGVhZGVyID0gIiAiOwotCi0JCQlmb3IgKG4gPSAwOyBuIDwgbGVuOyBuICs9IDQ4KSB7Ci0JCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwKLQkJCQkJICZidWYsICZidWZsZW4pKTsKLQkJCQlUKGFkZHN0cihiYXNlNjRfY2VydCArIG4sIChzaXplX3QpTUlOKGxlbiAtIG4sIDQ4KSwKLQkJCQkJICZidWYsICZidWZsZW4pKTsKLQkJCX0KLQkJCWlmIChsZW4gPiAxNSkKLQkJCQlUKGFkZHN0cigiICkiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKLQkJfQotCQlicmVhazsKLQkgICAgfQotCi0JY2FzZSBuc190X3RrZXk6IHsKLQkJLyogS0pEIC0gbmVlZCB0byBjb21wbGV0ZSB0aGlzICovCi0JCXVfbG9uZyB0OwotCQlpbnQgbW9kZSwgZXJyLCBrZXlzaXplOwotCi0JCS8qIEFsZ29yaXRobSBuYW1lLiAqLwotCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0KLQkJLyogSW5jZXB0aW9uLiAqLwotCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKSk7Ci0JCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBFeHBlcmF0aW9uLiAqLwotCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKSk7Ci0JCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBNb2RlICwgRXJyb3IsIEtleSBTaXplLiAqLwotCQkvKiBQcmlvcml0eSwgV2VpZ2h0LCBQb3J0LiAqLwotCQltb2RlID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJZXJyICA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7Ci0JCWtleXNpemUgID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgJXUgJXUgIiwgbW9kZSwgZXJyLCBrZXlzaXplKSk7Ci0JCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQotCQkvKiBYWFggbmVlZCB0byBkdW1wIGtleSwgcHJpbnQgb3RoZXJkYXRhIGxlbmd0aCAmIG90aGVyIGRhdGEgKi8KLQkJYnJlYWs7Ci0JICAgIH0KLQotCWNhc2UgbnNfdF90c2lnOiB7Ci0JCS8qIEJFVyAtIG5lZWQgdG8gY29tcGxldGUgdGhpcyAqLwotCQlpbnQgbjsKLQotCQlUKGxlbiA9IGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCXJkYXRhICs9IDg7IC8qIHRpbWUgKi8KLQkJbiA9IG5zX2dldDE2KHJkYXRhKTsgcmRhdGEgKz0gSU5UMTZTWjsKLQkJcmRhdGEgKz0gbjsgLyogc2lnICovCi0JCW4gPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IElOVDE2U1o7IC8qIG9yaWdpbmFsIGlkICovCi0JCXNwcmludGYoYnVmLCAiJWQiLCBuc19nZXQxNihyZGF0YSkpOwotCQlyZGF0YSArPSBJTlQxNlNaOwotCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOwotCQlicmVhazsKLQkgICAgfQotCi0JY2FzZSBuc190X2E2OiB7Ci0JCXN0cnVjdCBpbjZfYWRkciBhOwotCQlpbnQgcGJ5dGUsIHBiaXQ7Ci0KLQkJLyogcHJlZml4IGxlbmd0aCAqLwotCQlpZiAocmRsZW4gPT0gMFUpIGdvdG8gZm9ybWVycjsKLQkJbGVuID0gU1BSSU5URigodG1wLCAiJWQgIiwgKnJkYXRhKSk7Ci0JCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQkJcGJpdCA9ICpyZGF0YTsKLQkJaWYgKHBiaXQgPiAxMjgpIGdvdG8gZm9ybWVycjsKLQkJcGJ5dGUgPSAocGJpdCAmIH43KSAvIDg7Ci0JCXJkYXRhKys7Ci0KLQkJLyogYWRkcmVzcyBzdWZmaXg6IHByb3ZpZGVkIG9ubHkgd2hlbiBwcmVmaXggbGVuICE9IDEyOCAqLwotCQlpZiAocGJpdCA8IDEyOCkgewotCQkJaWYgKHJkYXRhICsgcGJ5dGUgPj0gZWRhdGEpIGdvdG8gZm9ybWVycjsKLQkJCW1lbXNldCgmYSwgMCwgc2l6ZW9mKGEpKTsKLQkJCW1lbWNweSgmYS5zNl9hZGRyW3BieXRlXSwgcmRhdGEsIHNpemVvZihhKSAtIHBieXRlKTsKLQkJCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVDYsICZhLCBidWYsIGJ1Zmxlbik7Ci0JCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOwotCQkJcmRhdGEgKz0gc2l6ZW9mKGEpIC0gcGJ5dGU7Ci0JCX0KLQotCQkvKiBwcmVmaXggbmFtZTogcHJvdmlkZWQgb25seSB3aGVuIHByZWZpeCBsZW4gPiAwICovCi0JCWlmIChwYml0ID09IDApCi0JCQlicmVhazsKLQkJaWYgKHJkYXRhID49IGVkYXRhKSBnb3RvIGZvcm1lcnI7Ci0JCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKLQotCQlicmVhazsKLQkgICAgfQotCi0JY2FzZSBuc190X29wdDogewotCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSBieXRlcyIsIGNsYXNzKSk7Ci0JCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQotCWRlZmF1bHQ6Ci0JCWNvbW1lbnQgPSAidW5rbm93biBSUiB0eXBlIjsKLQkJZ290byBoZXhpZnk7Ci0JfQotCXJldHVybiAoYnVmIC0gb2J1Zik7Ci0gZm9ybWVycjoKLQljb21tZW50ID0gIlJSIGZvcm1hdCBlcnJvciI7Ci0gaGV4aWZ5OiB7Ci0JaW50IG4sIG07Ci0JY2hhciAqcDsKLQotCWxlbiA9IFNQUklOVEYoKHRtcCwgIlxcIyAldHUlc1x0OyAlcyIsIGVkYXRhIC0gcmRhdGEsCi0JCSAgICAgICByZGxlbiAhPSAwID8gIiAoIiA6ICIiLCBjb21tZW50KSk7Ci0JVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOwotCXdoaWxlIChyZGF0YSA8IGVkYXRhKSB7Ci0JCXAgPSB0bXA7Ci0JCXAgKz0gU1BSSU5URigocCwgIlxuXHQiKSk7Ci0JCXNwYWNlZCA9IDA7Ci0JCW4gPSBNSU4oMTYsIGVkYXRhIC0gcmRhdGEpOwotCQlmb3IgKG0gPSAwOyBtIDwgbjsgbSsrKQotCQkJcCArPSBTUFJJTlRGKChwLCAiJTAyeCAiLCByZGF0YVttXSkpOwotCQlUKGFkZHN0cih0bXAsIChzaXplX3QpKHAgLSB0bXApLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCWlmIChuIDwgMTYpIHsKLQkJCVQoYWRkc3RyKCIpIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7Ci0JCQlUKGFkZHRhYigoc2l6ZV90KShwIC0gdG1wICsgMSksIChzaXplX3QpNDgsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOwotCQl9Ci0JCXAgPSB0bXA7Ci0JCXAgKz0gU1BSSU5URigocCwgIjsgIikpOwotCQlmb3IgKG0gPSAwOyBtIDwgbjsgbSsrKQotCQkJKnArKyA9IChpc2FzY2lpKHJkYXRhW21dKSAmJiBpc3ByaW50KHJkYXRhW21dKSkKLQkJCQk/IHJkYXRhW21dCi0JCQkJOiAnLic7Ci0JCVQoYWRkc3RyKHRtcCwgKHNpemVfdCkocCAtIHRtcCksICZidWYsICZidWZsZW4pKTsKLQkJcmRhdGEgKz0gbjsKLQl9Ci0JcmV0dXJuIChidWYgLSBvYnVmKTsKLSAgICB9Ci19Ci0KLS8qIFByaXZhdGUuICovCi0KLS8qCi0gKiBzaXplX3QKLSAqIHBydW5lX29yaWdpbihuYW1lLCBvcmlnaW4pCi0gKglGaW5kIG91dCBpZiB0aGUgbmFtZSBpcyBhdCBvciB1bmRlciB0aGUgY3VycmVudCBvcmlnaW4uCi0gKiByZXR1cm46Ci0gKglOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBuYW1lIGJlZm9yZSBzdGFydCBvZiBvcmlnaW4sCi0gKglvciBsZW5ndGggb2YgbmFtZSBpZiBvcmlnaW4gZG9lcyBub3QgbWF0Y2guCi0gKiBub3RlczoKLSAqCVRoaXMgZnVuY3Rpb24gc2hvdWxkIHNoYXJlIGNvZGUgd2l0aCBzYW1lZG9tYWluKCkuCi0gKi8KLXN0YXRpYyBzaXplX3QKLXBydW5lX29yaWdpbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpvcmlnaW4pIHsKLQljb25zdCBjaGFyICpvbmFtZSA9IG5hbWU7Ci0KLQl3aGlsZSAoKm5hbWUgIT0gJ1wwJykgewotCQlpZiAob3JpZ2luICE9IE5VTEwgJiYgbnNfc2FtZW5hbWUobmFtZSwgb3JpZ2luKSA9PSAxKQotCQkJcmV0dXJuIChuYW1lIC0gb25hbWUgLSAobmFtZSA+IG9uYW1lKSk7Ci0JCXdoaWxlICgqbmFtZSAhPSAnXDAnKSB7Ci0JCQlpZiAoKm5hbWUgPT0gJ1xcJykgewotCQkJCW5hbWUrKzsKLQkJCQkvKiBYWFggbmVlZCB0byBoYW5kbGUgXG5ubiBmb3JtLiAqLwotCQkJCWlmICgqbmFtZSA9PSAnXDAnKQotCQkJCQlicmVhazsKLQkJCX0gZWxzZSBpZiAoKm5hbWUgPT0gJy4nKSB7Ci0JCQkJbmFtZSsrOwotCQkJCWJyZWFrOwotCQkJfQotCQkJbmFtZSsrOwotCQl9Ci0JfQotCXJldHVybiAobmFtZSAtIG9uYW1lKTsKLX0KLQotLyoKLSAqIGludAotICogY2hhcnN0cihyZGF0YSwgZWRhdGEsIGJ1ZiwgYnVmbGVuKQotICoJRm9ybWF0IGEgPGNoYXJhY3Rlci1zdHJpbmc+IGludG8gdGhlIHByZXNlbnRhdGlvbiBidWZmZXIuCi0gKiByZXR1cm46Ci0gKglOdW1iZXIgb2YgcmRhdGEgb2N0ZXRzIGNvbnN1bWVkCi0gKgkwIGZvciBwcm90b2NvbCBmb3JtYXQgZXJyb3IKLSAqCS0xIGZvciBvdXRwdXQgYnVmZmVyIGVycm9yCi0gKiBzaWRlIGVmZmVjdHM6Ci0gKglidWZmZXIgaXMgYWR2YW5jZWQgb24gc3VjY2Vzcy4KLSAqLwotc3RhdGljIGludAotY2hhcnN0cihjb25zdCB1X2NoYXIgKnJkYXRhLCBjb25zdCB1X2NoYXIgKmVkYXRhLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgewotCWNvbnN0IHVfY2hhciAqb2RhdGEgPSByZGF0YTsKLQlzaXplX3Qgc2F2ZV9idWZsZW4gPSAqYnVmbGVuOwotCWNoYXIgKnNhdmVfYnVmID0gKmJ1ZjsKLQotCWlmIChhZGRzdHIoIlwiIiwgKHNpemVfdCkxLCBidWYsIGJ1ZmxlbikgPCAwKQotCQlnb3RvIGVub3NwYzsKLQlpZiAocmRhdGEgPCBlZGF0YSkgewotCQlpbnQgbiA9ICpyZGF0YTsKLQotCQlpZiAocmRhdGEgKyAxICsgbiA8PSBlZGF0YSkgewotCQkJcmRhdGErKzsKLQkJCXdoaWxlIChuLS0gPiAwKSB7Ci0JCQkJaWYgKHN0cmNocigiXG5cIlxcIiwgKnJkYXRhKSAhPSBOVUxMKQotCQkJCQlpZiAoYWRkc3RyKCJcXCIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkKLQkJCQkJCWdvdG8gZW5vc3BjOwotCQkJCWlmIChhZGRzdHIoKGNvbnN0IGNoYXIgKilyZGF0YSwgKHNpemVfdCkxLAotCQkJCQkgICBidWYsIGJ1ZmxlbikgPCAwKQotCQkJCQlnb3RvIGVub3NwYzsKLQkJCQlyZGF0YSsrOwotCQkJfQotCQl9Ci0JfQotCWlmIChhZGRzdHIoIlwiIiwgKHNpemVfdCkxLCBidWYsIGJ1ZmxlbikgPCAwKQotCQlnb3RvIGVub3NwYzsKLQlyZXR1cm4gKHJkYXRhIC0gb2RhdGEpOwotIGVub3NwYzoKLQllcnJubyA9IEVOT1NQQzsKLQkqYnVmID0gc2F2ZV9idWY7Ci0JKmJ1ZmxlbiA9IHNhdmVfYnVmbGVuOwotCXJldHVybiAoLTEpOwotfQotCi1zdGF0aWMgaW50Ci1hZGRuYW1lKGNvbnN0IHVfY2hhciAqbXNnLCBzaXplX3QgbXNnbGVuLAotCWNvbnN0IHVfY2hhciAqKnBwLCBjb25zdCBjaGFyICpvcmlnaW4sCi0JY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pCi17Ci0Jc2l6ZV90IG5ld2xlbiwgc2F2ZV9idWZsZW4gPSAqYnVmbGVuOwotCWNoYXIgKnNhdmVfYnVmID0gKmJ1ZjsKLQlpbnQgbjsKLQotCW4gPSBkbl9leHBhbmQobXNnLCBtc2cgKyBtc2dsZW4sICpwcCwgKmJ1ZiwgKGludCkqYnVmbGVuKTsKLQlpZiAobiA8IDApCi0JCWdvdG8gZW5vc3BjOwkvKiBHdWVzcy4gKi8KLQluZXdsZW4gPSBwcnVuZV9vcmlnaW4oKmJ1Ziwgb3JpZ2luKTsKLQlpZiAoKipidWYgPT0gJ1wwJykgewotCQlnb3RvIHJvb3Q7Ci0JfSBlbHNlIGlmIChuZXdsZW4gPT0gMFUpIHsKLQkJLyogVXNlICJAIiBpbnN0ZWFkIG9mIG5hbWUuICovCi0JCWlmIChuZXdsZW4gKyAyID4gKmJ1ZmxlbikKLQkJCWdvdG8gZW5vc3BjOyAgICAgICAgLyogTm8gcm9vbSBmb3IgIkBcMCIuICovCi0JCSgqYnVmKVtuZXdsZW4rK10gPSAnQCc7Ci0JCSgqYnVmKVtuZXdsZW5dID0gJ1wwJzsKLQl9IGVsc2UgewotCQlpZiAoKChvcmlnaW4gPT0gTlVMTCB8fCBvcmlnaW5bMF0gPT0gJ1wwJykgfHwKLQkJICAgIChvcmlnaW5bMF0gIT0gJy4nICYmIG9yaWdpblsxXSAhPSAnXDAnICYmCi0JCSAgICAoKmJ1ZilbbmV3bGVuXSA9PSAnXDAnKSkgJiYgKCpidWYpW25ld2xlbiAtIDFdICE9ICcuJykgewotCQkJLyogTm8gdHJhaWxpbmcgZG90LiAqLwotIHJvb3Q6Ci0JCQlpZiAobmV3bGVuICsgMiA+ICpidWZsZW4pCi0JCQkJZ290byBlbm9zcGM7CS8qIE5vIHJvb20gZm9yICIuXDAiLiAqLwotCQkJKCpidWYpW25ld2xlbisrXSA9ICcuJzsKLQkJCSgqYnVmKVtuZXdsZW5dID0gJ1wwJzsKLQkJfQotCX0KLQkqcHAgKz0gbjsKLQlhZGRsZW4obmV3bGVuLCBidWYsIGJ1Zmxlbik7Ci0JKipidWYgPSAnXDAnOwotCXJldHVybiAobmV3bGVuKTsKLSBlbm9zcGM6Ci0JZXJybm8gPSBFTk9TUEM7Ci0JKmJ1ZiA9IHNhdmVfYnVmOwotCSpidWZsZW4gPSBzYXZlX2J1ZmxlbjsKLQlyZXR1cm4gKC0xKTsKLX0KLQotc3RhdGljIHZvaWQKLWFkZGxlbihzaXplX3QgbGVuLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgewotCWFzc2VydChsZW4gPD0gKmJ1Zmxlbik7Ci0JKmJ1ZiArPSBsZW47Ci0JKmJ1ZmxlbiAtPSBsZW47Ci19Ci0KLXN0YXRpYyBpbnQKLWFkZHN0cihjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKSB7Ci0JaWYgKGxlbiA+PSAqYnVmbGVuKSB7Ci0JCWVycm5vID0gRU5PU1BDOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JbWVtY3B5KCpidWYsIHNyYywgbGVuKTsKLQlhZGRsZW4obGVuLCBidWYsIGJ1Zmxlbik7Ci0JKipidWYgPSAnXDAnOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWFkZHRhYihzaXplX3QgbGVuLCBzaXplX3QgdGFyZ2V0LCBpbnQgc3BhY2VkLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgewotCXNpemVfdCBzYXZlX2J1ZmxlbiA9ICpidWZsZW47Ci0JY2hhciAqc2F2ZV9idWYgPSAqYnVmOwotCWludCB0OwotCi0JaWYgKHNwYWNlZCB8fCBsZW4gPj0gdGFyZ2V0IC0gMSkgewotCQlUKGFkZHN0cigiICAiLCAoc2l6ZV90KTIsIGJ1ZiwgYnVmbGVuKSk7Ci0JCXNwYWNlZCA9IDE7Ci0JfSBlbHNlIHsKLQkJZm9yICh0ID0gKHRhcmdldCAtIGxlbiAtIDEpIC8gODsgdCA+PSAwOyB0LS0pCi0JCQlpZiAoYWRkc3RyKCJcdCIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkgewotCQkJCSpidWZsZW4gPSBzYXZlX2J1ZmxlbjsKLQkJCQkqYnVmID0gc2F2ZV9idWY7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9Ci0JCXNwYWNlZCA9IDA7Ci0JfQotCXJldHVybiAoc3BhY2VkKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfc2FtZWRvbWFpbi5jIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc19zYW1lZG9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZmRiNjEuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvbmFtZXNlci9uc19zYW1lZG9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTEgKzAsMCBAQAotLyoJJE5ldEJTRDogbnNfc2FtZWRvbWFpbi5jLHYgMS4yIDIwMDQvMDUvMjAgMjA6MzU6MDUgY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotICogQ29weXJpZ2h0IChjKSAxOTk1LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZm5kZWYgbGludAotI2lmZGVmIG5vdGRlZgotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfc2FtZWRvbWFpbi5jLHYgMS4xLjIuMi40LjIgMjAwNC8wMy8xNiAxMjozNDoxNyBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IG5zX3NhbWVkb21haW4uYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjM1OjA1IGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmbmRlZiBfTElCQwotLyoKLSAqIGludAotICogbnNfc2FtZWRvbWFpbihhLCBiKQotICoJQ2hlY2sgd2hldGhlciBhIG5hbWUgYmVsb25ncyB0byBhIGRvbWFpbi4KLSAqIElucHV0czoKLSAqCWEgLSB0aGUgZG9tYWluIHdob3NlIGFuY2VzdG9yeSBpcyBiZWluZyB2ZXJpZmllZAotICoJYiAtIHRoZSBwb3RlbnRpYWwgYW5jZXN0b3Igd2UncmUgY2hlY2tpbmcgYWdhaW5zdAotICogUmV0dXJuOgotICoJYm9vbGVhbiAtIGlzIGEgYXQgb3IgYmVsb3cgYj8KLSAqIE5vdGVzOgotICoJVHJhaWxpbmcgZG90cyBhcmUgZmlyc3QgcmVtb3ZlZCBmcm9tIG5hbWUgYW5kIGRvbWFpbi4KLSAqCUFsd2F5cyBjb21wYXJlIGNvbXBsZXRlIHN1YmRvbWFpbnMsIG5vdCBvbmx5IHdoZXRoZXIgdGhlCi0gKglkb21haW4gbmFtZSBpcyB0aGUgdHJhaWxpbmcgc3RyaW5nIG9mIHRoZSBnaXZlbiBuYW1lLgotICoKLSAqCSJob3N0LmZvb2Jhci50b3AiIGxpZXMgaW4gImZvb2Jhci50b3AiIGFuZCBpbiAidG9wIiBhbmQgaW4gIiIKLSAqCWJ1dCBOT1QgaW4gImJhci50b3AiCi0gKi8KLQotaW50Ci1uc19zYW1lZG9tYWluKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpIHsKLQlzaXplX3QgbGEsIGxiOwotCWludCBkaWZmLCBpLCBlc2NhcGVkOwotCWNvbnN0IGNoYXIgKmNwOwotCi0JbGEgPSBzdHJsZW4oYSk7Ci0JbGIgPSBzdHJsZW4oYik7Ci0KLQkvKiBJZ25vcmUgYSB0cmFpbGluZyBsYWJlbCBzZXBhcmF0b3IgKGkuZS4gYW4gdW5lc2NhcGVkIGRvdCkgaW4gJ2EnLiAqLwotCWlmIChsYSAhPSAwVSAmJiBhW2xhIC0gMV0gPT0gJy4nKSB7Ci0JCWVzY2FwZWQgPSAwOwotCQkvKiBOb3RlIHRoaXMgbG9vcCBkb2Vzbid0IGdldCBleGVjdXRlZCBpZiBsYT09MS4gKi8KLQkJZm9yIChpID0gbGEgLSAyOyBpID49IDA7IGktLSkKLQkJCWlmIChhW2ldID09ICdcXCcpIHsKLQkJCQlpZiAoZXNjYXBlZCkKLQkJCQkJZXNjYXBlZCA9IDA7Ci0JCQkJZWxzZQotCQkJCQllc2NhcGVkID0gMTsKLQkJCX0gZWxzZQotCQkJCWJyZWFrOwotCQlpZiAoIWVzY2FwZWQpCi0JCQlsYS0tOwotCX0KLQotCS8qIElnbm9yZSBhIHRyYWlsaW5nIGxhYmVsIHNlcGFyYXRvciAoaS5lLiBhbiB1bmVzY2FwZWQgZG90KSBpbiAnYicuICovCi0JaWYgKGxiICE9IDBVICYmIGJbbGIgLSAxXSA9PSAnLicpIHsKLQkJZXNjYXBlZCA9IDA7Ci0JCS8qIG5vdGUgdGhpcyBsb29wIGRvZXNuJ3QgZ2V0IGV4ZWN1dGVkIGlmIGxiPT0xICovCi0JCWZvciAoaSA9IGxiIC0gMjsgaSA+PSAwOyBpLS0pCi0JCQlpZiAoYltpXSA9PSAnXFwnKSB7Ci0JCQkJaWYgKGVzY2FwZWQpCi0JCQkJCWVzY2FwZWQgPSAwOwotCQkJCWVsc2UKLQkJCQkJZXNjYXBlZCA9IDE7Ci0JCQl9IGVsc2UKLQkJCQlicmVhazsKLQkJaWYgKCFlc2NhcGVkKQotCQkJbGItLTsKLQl9Ci0KLQkvKiBsYiA9PSAwIG1lYW5zICdiJyBpcyB0aGUgcm9vdCBkb21haW4sIHNvICdhJyBtdXN0IGJlIGluICdiJy4gKi8KLQlpZiAobGIgPT0gMFUpCi0JCXJldHVybiAoMSk7Ci0KLQkvKiAnYicgbG9uZ2VyIHRoYW4gJ2EnIG1lYW5zICdhJyBjYW4ndCBiZSBpbiAnYicuICovCi0JaWYgKGxiID4gbGEpCi0JCXJldHVybiAoMCk7Ci0KLQkvKiAnYScgYW5kICdiJyBiZWluZyBlcXVhbCBhdCB0aGlzIHBvaW50IGluZGljYXRlcyBzYW1lbmVzcy4gKi8KLQlpZiAobGIgPT0gbGEpCi0JCXJldHVybiAoc3RybmNhc2VjbXAoYSwgYiwgbGIpID09IDApOwotCi0JLyogT2ssIHdlIGtub3cgbGEgPiBsYi4gKi8KLQotCWRpZmYgPSBsYSAtIGxiOwotCi0JLyoKLQkgKiBJZiAnYScgaXMgb25seSAxIGNoYXJhY3RlciBsb25nZXIgdGhhbiAnYicsIHRoZW4gaXQgY2FuJ3QgYmUKLQkgKiBhIHN1YmRvbWFpbiBvZiAnYicgKGJlY2F1c2Ugb2YgdGhlIG5lZWQgZm9yIHRoZSAnLicgbGFiZWwKLQkgKiBzZXBhcmF0b3IpLgotCSAqLwotCWlmIChkaWZmIDwgMikKLQkJcmV0dXJuICgwKTsKLQotCS8qCi0JICogSWYgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGxhc3QgJ2xiJyBjaGFyYWN0ZXJzIG9mICdiJwotCSAqIGlzbid0ICcuJywgdGhlbiBpdCBjYW4ndCBiZSBhIG1hdGNoICh0aGlzIGxldHMgdXMgYXZvaWQKLQkgKiBoYXZpbmcgImZvb2Jhci5jb20iIG1hdGNoICJiYXIuY29tIikuCi0JICovCi0JaWYgKGFbZGlmZiAtIDFdICE9ICcuJykKLQkJcmV0dXJuICgwKTsKLQotCS8qCi0JICogV2UncmUgbm90IHN1cmUgYWJvdXQgdGhhdCAnLicsIGhvd2V2ZXIuICBJdCBjb3VsZCBiZSBlc2NhcGVkCi0gICAgICAgICAqIGFuZCB0aHVzIG5vdCBhIHJlYWxseSBhIGxhYmVsIHNlcGFyYXRvci4KLQkgKi8KLQllc2NhcGVkID0gMDsKLQlmb3IgKGkgPSBkaWZmIC0gMjsgaSA+PSAwOyBpLS0pCi0JCWlmIChhW2ldID09ICdcXCcpIHsKLQkJCWlmIChlc2NhcGVkKQotCQkJCWVzY2FwZWQgPSAwOwotCQkJZWxzZQotCQkJCWVzY2FwZWQgPSAxOwotCQl9IGVsc2UKLQkJCWJyZWFrOwotCWlmIChlc2NhcGVkKQotCQlyZXR1cm4gKDApOwotCi0JLyogTm93IGNvbXBhcmUgYWxpZ25lZCB0cmFpbGluZyBzdWJzdHJpbmcuICovCi0JY3AgPSBhICsgZGlmZjsKLQlyZXR1cm4gKHN0cm5jYXNlY21wKGNwLCBiLCBsYikgPT0gMCk7Ci19Ci0KLS8qCi0gKiBpbnQKLSAqIG5zX3N1YmRvbWFpbihhLCBiKQotICoJaXMgImEiIGEgc3ViZG9tYWluIG9mICJiIj8KLSAqLwotaW50Ci1uc19zdWJkb21haW4oY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikgewotCXJldHVybiAobnNfc2FtZW5hbWUoYSwgYikgIT0gMSAmJiBuc19zYW1lZG9tYWluKGEsIGIpKTsKLX0KLSNlbmRpZgotCi0vKgotICogaW50Ci0gKiBuc19tYWtlY2Fub24oc3JjLCBkc3QsIGRzdHNpemUpCi0gKgltYWtlIGEgY2Fub25pY2FsIGNvcHkgb2YgZG9tYWluIG5hbWUgInNyYyIKLSAqIG5vdGVzOgotICoJZm9vIC0+IGZvby4KLSAqCWZvby4gLT4gZm9vLgotICoJZm9vLi4gLT4gZm9vLgotICoJZm9vXC4gLT4gZm9vXC4uCi0gKglmb29cXC4gLT4gZm9vXFwuCi0gKi8KLQotaW50Ci1uc19tYWtlY2Fub24oY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplKSB7Ci0Jc2l6ZV90IG4gPSBzdHJsZW4oc3JjKTsKLQotCWlmIChuICsgc2l6ZW9mICIuIiA+IGRzdHNpemUpIHsJCQkvKiBOb3RlOiBzaXplb2YgPT0gMiAqLwotCQllcnJubyA9IEVNU0dTSVpFOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0Jc3RyY3B5KGRzdCwgc3JjKTsKLQl3aGlsZSAobiA+PSAxVSAmJiBkc3RbbiAtIDFdID09ICcuJykJCS8qIEVuZHMgaW4gIi4iICovCi0JCWlmIChuID49IDJVICYmIGRzdFtuIC0gMl0gPT0gJ1xcJyAmJgkvKiBFbmRzIGluICJcLiIgKi8KLQkJICAgIChuIDwgM1UgfHwgZHN0W24gLSAzXSAhPSAnXFwnKSkJLyogQnV0IG5vdCAiXFwuIiAqLwotCQkJYnJlYWs7Ci0JCWVsc2UKLQkJCWRzdFstLW5dID0gJ1wwJzsKLQlkc3RbbisrXSA9ICcuJzsKLQlkc3Rbbl0gPSAnXDAnOwotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBpbnQKLSAqIG5zX3NhbWVuYW1lKGEsIGIpCi0gKglkZXRlcm1pbmUgd2hldGhlciBkb21haW4gbmFtZSAiYSIgaXMgdGhlIHNhbWUgYXMgZG9tYWluIG5hbWUgImIiCi0gKiByZXR1cm46Ci0gKgktMSBvbiBlcnJvcgotICoJMCBpZiBuYW1lcyBkaWZmZXIKLSAqCTEgaWYgbmFtZXMgYXJlIHRoZSBzYW1lCi0gKi8KLQotaW50Ci1uc19zYW1lbmFtZShjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKSB7Ci0JY2hhciB0YVtOU19NQVhETkFNRV0sIHRiW05TX01BWEROQU1FXTsKLQotCWlmIChuc19tYWtlY2Fub24oYSwgdGEsIHNpemVvZiB0YSkgPCAwIHx8Ci0JICAgIG5zX21ha2VjYW5vbihiLCB0Yiwgc2l6ZW9mIHRiKSA8IDApCi0JCXJldHVybiAoLTEpOwotCWlmIChzdHJjYXNlY21wKHRhLCB0YikgPT0gMCkKLQkJcmV0dXJuICgxKTsKLQllbHNlCi0JCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX3R0bC5jIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc190dGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5ODMzMS4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX3R0bC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCSROZXRCU0Q6IG5zX3R0bC5jLHYgMS4yIDIwMDQvMDUvMjAgMjA6MzU6MDUgY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZm5kZWYgbGludAotI2lmZGVmIG5vdGRlZgotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfdHRsLmMsdiAxLjEuMjA2LjEgMjAwNC8wMy8wOSAwODozMzo0NSBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IG5zX3R0bC5jLHYgMS4yIDIwMDQvMDUvMjAgMjA6MzU6MDUgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmCi0KLS8qIEltcG9ydC4gKi8KLQotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZmRlZiBTUFJJTlRGX0NIQVIKLSMgZGVmaW5lIFNQUklOVEYoeCkgc3RybGVuKHNwcmludGYvKioveCkKLSNlbHNlCi0jIGRlZmluZSBTUFJJTlRGKHgpICgoc2l6ZV90KXNwcmludGYgeCkKLSNlbmRpZgotCi0vKiBGb3J3YXJkLiAqLwotCi1zdGF0aWMgaW50CWZtdDEoaW50IHQsIGNoYXIgcywgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOwotCi0vKiBNYWNyb3MuICovCi0KLSNkZWZpbmUgVCh4KSBkbyB7IGlmICgoeCkgPCAwKSByZXR1cm4gKC0xKTsgfSB3aGlsZSgwKQotCi0vKiBQdWJsaWMuICovCi0KLWludAotbnNfZm9ybWF0X3R0bCh1X2xvbmcgc3JjLCBjaGFyICpkc3QsIHNpemVfdCBkc3RsZW4pIHsKLQljaGFyICpvZHN0ID0gZHN0OwotCWludCBzZWNzLCBtaW5zLCBob3VycywgZGF5cywgd2Vla3MsIHg7Ci0JY2hhciAqcDsKLQotCXNlY3MgPSBzcmMgJSA2MDsgICBzcmMgLz0gNjA7Ci0JbWlucyA9IHNyYyAlIDYwOyAgIHNyYyAvPSA2MDsKLQlob3VycyA9IHNyYyAlIDI0OyAgc3JjIC89IDI0OwotCWRheXMgPSBzcmMgJSA3OyAgICBzcmMgLz0gNzsKLQl3ZWVrcyA9IHNyYzsgICAgICAgc3JjID0gMDsKLQotCXggPSAwOwotCWlmICh3ZWVrcykgewotCQlUKGZtdDEod2Vla3MsICdXJywgJmRzdCwgJmRzdGxlbikpOwotCQl4Kys7Ci0JfQotCWlmIChkYXlzKSB7Ci0JCVQoZm10MShkYXlzLCAnRCcsICZkc3QsICZkc3RsZW4pKTsKLQkJeCsrOwotCX0KLQlpZiAoaG91cnMpIHsKLQkJVChmbXQxKGhvdXJzLCAnSCcsICZkc3QsICZkc3RsZW4pKTsKLQkJeCsrOwotCX0KLQlpZiAobWlucykgewotCQlUKGZtdDEobWlucywgJ00nLCAmZHN0LCAmZHN0bGVuKSk7Ci0JCXgrKzsKLQl9Ci0JaWYgKHNlY3MgfHwgISh3ZWVrcyB8fCBkYXlzIHx8IGhvdXJzIHx8IG1pbnMpKSB7Ci0JCVQoZm10MShzZWNzLCAnUycsICZkc3QsICZkc3RsZW4pKTsKLQkJeCsrOwotCX0KLQotCWlmICh4ID4gMSkgewotCQlpbnQgY2g7Ci0KLQkJZm9yIChwID0gb2RzdDsgKGNoID0gKnApICE9ICdcMCc7IHArKykKLQkJCWlmIChpc2FzY2lpKGNoKSAmJiBpc3VwcGVyKGNoKSkKLQkJCQkqcCA9IHRvbG93ZXIoY2gpOwotCX0KLQotCXJldHVybiAoZHN0IC0gb2RzdCk7Ci19Ci0KLSNpZm5kZWYgX0xJQkMKLWludAotbnNfcGFyc2VfdHRsKGNvbnN0IGNoYXIgKnNyYywgdV9sb25nICpkc3QpIHsKLQl1X2xvbmcgdHRsLCB0bXA7Ci0JaW50IGNoLCBkaWdpdHMsIGRpcnR5OwotCi0JdHRsID0gMDsKLQl0bXAgPSAwOwotCWRpZ2l0cyA9IDA7Ci0JZGlydHkgPSAwOwotCXdoaWxlICgoY2ggPSAqc3JjKyspICE9ICdcMCcpIHsKLQkJaWYgKCFpc2FzY2lpKGNoKSB8fCAhaXNwcmludChjaCkpCi0JCQlnb3RvIGVpbnZhbDsKLQkJaWYgKGlzZGlnaXQoY2gpKSB7Ci0JCQl0bXAgKj0gMTA7Ci0JCQl0bXAgKz0gKGNoIC0gJzAnKTsKLQkJCWRpZ2l0cysrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGRpZ2l0cyA9PSAwKQotCQkJZ290byBlaW52YWw7Ci0JCWlmIChpc2xvd2VyKGNoKSkKLQkJCWNoID0gdG91cHBlcihjaCk7Ci0JCXN3aXRjaCAoY2gpIHsKLQkJY2FzZSAnVyc6ICB0bXAgKj0gNzsJLypGQUxMVEhST1VHSCovCi0JCWNhc2UgJ0QnOiAgdG1wICo9IDI0OwkvKkZBTExUSFJPVUdIKi8KLQkJY2FzZSAnSCc6ICB0bXAgKj0gNjA7CS8qRkFMTFRIUk9VR0gqLwotCQljYXNlICdNJzogIHRtcCAqPSA2MDsJLypGQUxMVEhST1VHSCovCi0JCWNhc2UgJ1MnOiAgYnJlYWs7Ci0JCWRlZmF1bHQ6ICAgZ290byBlaW52YWw7Ci0JCX0KLQkJdHRsICs9IHRtcDsKLQkJdG1wID0gMDsKLQkJZGlnaXRzID0gMDsKLQkJZGlydHkgPSAxOwotCX0KLQlpZiAoZGlnaXRzID4gMCkgewotCQlpZiAoZGlydHkpCi0JCQlnb3RvIGVpbnZhbDsKLQkJZWxzZQotCQkJdHRsICs9IHRtcDsKLQl9Ci0JKmRzdCA9IHR0bDsKLQlyZXR1cm4gKDApOwotCi0gZWludmFsOgotCWVycm5vID0gRUlOVkFMOwotCXJldHVybiAoLTEpOwotfQotI2VuZGlmCi0KLS8qIFByaXZhdGUuICovCi0KLXN0YXRpYyBpbnQKLWZtdDEoaW50IHQsIGNoYXIgcywgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIHsKLQljaGFyIHRtcFs1MF07Ci0Jc2l6ZV90IGxlbjsKLQotCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVkJWMiLCB0LCBzKSk7Ci0JaWYgKGxlbiArIDEgPiAqYnVmbGVuKQotCQlyZXR1cm4gKC0xKTsKLQlzdHJjcHkoKmJ1ZiwgdG1wKTsKLQkqYnVmICs9IGxlbjsKLQkqYnVmbGVuIC09IGxlbjsKLQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L2Jhc2U2NC5jIGIvbGliYy9uZXRic2QvbmV0L2Jhc2U2NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjcwNzAzLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25ldC9iYXNlNjQuYworKysgL2Rldi9udWxsCkBAIC0xLDM0MCArMCwwIEBACi0vKgkkTmV0QlNEOiBiYXNlNjQuYyx2IDEuOCAyMDAyLzExLzExIDAxOjE1OjE3IHRob3JwZWogRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NiBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSU5URVJORVQgU09GVFdBUkUgQ09OU09SVElVTSBESVNDTEFJTVMKLSAqIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSU5URVJORVQgU09GVFdBUkUKLSAqIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi0gKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUwotICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0vKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk1IGJ5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4KLSAqCi0gKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuIChoZXJlaW5hZnRlciBjYWxsZWQgSUJNKSBncmFudHMKLSAqIHBlcm1pc3Npb24gdW5kZXIgaXRzIGNvcHlyaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIFNvZnR3YXJlIHdpdGggb3Igd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCi0gKiBhbGwgcGFyYWdyYXBocyBvZiB0aGlzIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgSUJNCi0gKiBub3QgYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIG1hcmtldGluZyBvZiBhbnkgcHJvZHVjdCBpbmNvcnBvcmF0aW5nCi0gKiB0aGUgU29mdHdhcmUgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLCB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCi0gKiBwZXJtaXNzaW9uLgotICoKLSAqIFRvIHRoZSBleHRlbnQgaXQgaGFzIGEgcmlnaHQgdG8gZG8gc28sIElCTSBncmFudHMgYW4gaW1tdW5pdHkgZnJvbSBzdWl0Ci0gKiB1bmRlciBpdHMgcGF0ZW50cywgaWYgYW55LCBmb3IgdGhlIHVzZSwgc2FsZSBvciBtYW51ZmFjdHVyZSBvZiBwcm9kdWN0cyB0bwotICogdGhlIGV4dGVudCB0aGF0IHN1Y2ggcHJvZHVjdHMgYXJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgRG9tYWluIE5hbWUgU3lzdGVtCi0gKiBkeW5hbWljIHVwZGF0ZXMgaW4gVENQL0lQIG5ldHdvcmtzIGJ5IG1lYW5zIG9mIHRoZSBTb2Z0d2FyZS4gIE5vIGltbXVuaXR5IGlzCi0gKiBncmFudGVkIGZvciBhbnkgcHJvZHVjdCBwZXIgc2Ugb3IgZm9yIGFueSBvdGhlciBmdW5jdGlvbiBvZiBhbnkgcHJvZHVjdC4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgQU5EIElCTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKLSAqIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLAotICogRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgQVJJU0lORwotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KLSAqIElGIElCTSBJUyBBUFBSSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IGJhc2U2NC5jLHYgMS44IDIwMDIvMTEvMTEgMDE6MTU6MTcgdGhvcnBlaiBFeHAgJCIpOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jZWxzZQotI2luY2x1ZGUgPHJlc29sdi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1zdGF0aWMgY29uc3QgY2hhciBCYXNlNjRbXSA9Ci0JIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOwotc3RhdGljIGNvbnN0IGNoYXIgUGFkNjQgPSAnPSc7Ci0KLS8qIChGcm9tIFJGQzE1MjEgYW5kIGRyYWZ0LWlldGYtZG5zc2VjLXNlY2V4dC0wMy50eHQpCi0gICBUaGUgZm9sbG93aW5nIGVuY29kaW5nIHRlY2huaXF1ZSBpcyB0YWtlbiBmcm9tIFJGQyAxNTIxIGJ5IEJvcmVuc3RlaW4KLSAgIGFuZCBGcmVlZC4gIEl0IGlzIHJlcHJvZHVjZWQgaGVyZSBpbiBhIHNsaWdodGx5IGVkaXRlZCBmb3JtIGZvcgotICAgY29udmVuaWVuY2UuCi0KLSAgIEEgNjUtY2hhcmFjdGVyIHN1YnNldCBvZiBVUy1BU0NJSSBpcyB1c2VkLCBlbmFibGluZyA2IGJpdHMgdG8gYmUKLSAgIHJlcHJlc2VudGVkIHBlciBwcmludGFibGUgY2hhcmFjdGVyLiAoVGhlIGV4dHJhIDY1dGggY2hhcmFjdGVyLCAiPSIsCi0gICBpcyB1c2VkIHRvIHNpZ25pZnkgYSBzcGVjaWFsIHByb2Nlc3NpbmcgZnVuY3Rpb24uKQotCi0gICBUaGUgZW5jb2RpbmcgcHJvY2VzcyByZXByZXNlbnRzIDI0LWJpdCBncm91cHMgb2YgaW5wdXQgYml0cyBhcyBvdXRwdXQKLSAgIHN0cmluZ3Mgb2YgNCBlbmNvZGVkIGNoYXJhY3RlcnMuIFByb2NlZWRpbmcgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBhCi0gICAyNC1iaXQgaW5wdXQgZ3JvdXAgaXMgZm9ybWVkIGJ5IGNvbmNhdGVuYXRpbmcgMyA4LWJpdCBpbnB1dCBncm91cHMuCi0gICBUaGVzZSAyNCBiaXRzIGFyZSB0aGVuIHRyZWF0ZWQgYXMgNCBjb25jYXRlbmF0ZWQgNi1iaXQgZ3JvdXBzLCBlYWNoCi0gICBvZiB3aGljaCBpcyB0cmFuc2xhdGVkIGludG8gYSBzaW5nbGUgZGlnaXQgaW4gdGhlIGJhc2U2NCBhbHBoYWJldC4KLQotICAgRWFjaCA2LWJpdCBncm91cCBpcyB1c2VkIGFzIGFuIGluZGV4IGludG8gYW4gYXJyYXkgb2YgNjQgcHJpbnRhYmxlCi0gICBjaGFyYWN0ZXJzLiBUaGUgY2hhcmFjdGVyIHJlZmVyZW5jZWQgYnkgdGhlIGluZGV4IGlzIHBsYWNlZCBpbiB0aGUKLSAgIG91dHB1dCBzdHJpbmcuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSAxOiBUaGUgQmFzZTY0IEFscGhhYmV0Ci0KLSAgICAgIFZhbHVlIEVuY29kaW5nICBWYWx1ZSBFbmNvZGluZyAgVmFsdWUgRW5jb2RpbmcgIFZhbHVlIEVuY29kaW5nCi0gICAgICAgICAgMCBBICAgICAgICAgICAgMTcgUiAgICAgICAgICAgIDM0IGkgICAgICAgICAgICA1MSB6Ci0gICAgICAgICAgMSBCICAgICAgICAgICAgMTggUyAgICAgICAgICAgIDM1IGogICAgICAgICAgICA1MiAwCi0gICAgICAgICAgMiBDICAgICAgICAgICAgMTkgVCAgICAgICAgICAgIDM2IGsgICAgICAgICAgICA1MyAxCi0gICAgICAgICAgMyBEICAgICAgICAgICAgMjAgVSAgICAgICAgICAgIDM3IGwgICAgICAgICAgICA1NCAyCi0gICAgICAgICAgNCBFICAgICAgICAgICAgMjEgViAgICAgICAgICAgIDM4IG0gICAgICAgICAgICA1NSAzCi0gICAgICAgICAgNSBGICAgICAgICAgICAgMjIgVyAgICAgICAgICAgIDM5IG4gICAgICAgICAgICA1NiA0Ci0gICAgICAgICAgNiBHICAgICAgICAgICAgMjMgWCAgICAgICAgICAgIDQwIG8gICAgICAgICAgICA1NyA1Ci0gICAgICAgICAgNyBIICAgICAgICAgICAgMjQgWSAgICAgICAgICAgIDQxIHAgICAgICAgICAgICA1OCA2Ci0gICAgICAgICAgOCBJICAgICAgICAgICAgMjUgWiAgICAgICAgICAgIDQyIHEgICAgICAgICAgICA1OSA3Ci0gICAgICAgICAgOSBKICAgICAgICAgICAgMjYgYSAgICAgICAgICAgIDQzIHIgICAgICAgICAgICA2MCA4Ci0gICAgICAgICAxMCBLICAgICAgICAgICAgMjcgYiAgICAgICAgICAgIDQ0IHMgICAgICAgICAgICA2MSA5Ci0gICAgICAgICAxMSBMICAgICAgICAgICAgMjggYyAgICAgICAgICAgIDQ1IHQgICAgICAgICAgICA2MiArCi0gICAgICAgICAxMiBNICAgICAgICAgICAgMjkgZCAgICAgICAgICAgIDQ2IHUgICAgICAgICAgICA2MyAvCi0gICAgICAgICAxMyBOICAgICAgICAgICAgMzAgZSAgICAgICAgICAgIDQ3IHYKLSAgICAgICAgIDE0IE8gICAgICAgICAgICAzMSBmICAgICAgICAgICAgNDggdyAgICAgICAgIChwYWQpID0KLSAgICAgICAgIDE1IFAgICAgICAgICAgICAzMiBnICAgICAgICAgICAgNDkgeAotICAgICAgICAgMTYgUSAgICAgICAgICAgIDMzIGggICAgICAgICAgICA1MCB5Ci0KLSAgIFNwZWNpYWwgcHJvY2Vzc2luZyBpcyBwZXJmb3JtZWQgaWYgZmV3ZXIgdGhhbiAyNCBiaXRzIGFyZSBhdmFpbGFibGUKLSAgIGF0IHRoZSBlbmQgb2YgdGhlIGRhdGEgYmVpbmcgZW5jb2RlZC4gIEEgZnVsbCBlbmNvZGluZyBxdWFudHVtIGlzCi0gICBhbHdheXMgY29tcGxldGVkIGF0IHRoZSBlbmQgb2YgYSBxdWFudGl0eS4gIFdoZW4gZmV3ZXIgdGhhbiAyNCBpbnB1dAotICAgYml0cyBhcmUgYXZhaWxhYmxlIGluIGFuIGlucHV0IGdyb3VwLCB6ZXJvIGJpdHMgYXJlIGFkZGVkIChvbiB0aGUKLSAgIHJpZ2h0KSB0byBmb3JtIGFuIGludGVncmFsIG51bWJlciBvZiA2LWJpdCBncm91cHMuICBQYWRkaW5nIGF0IHRoZQotICAgZW5kIG9mIHRoZSBkYXRhIGlzIHBlcmZvcm1lZCB1c2luZyB0aGUgJz0nIGNoYXJhY3Rlci4KLQotICAgU2luY2UgYWxsIGJhc2U2NCBpbnB1dCBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygb2N0ZXRzLCBvbmx5IHRoZQotICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgZm9sbG93aW5nIGNhc2VzIGNhbiBhcmlzZToKLQotICAgICAgICgxKSB0aGUgZmluYWwgcXVhbnR1bSBvZiBlbmNvZGluZyBpbnB1dCBpcyBhbiBpbnRlZ3JhbAotICAgICAgICAgICBtdWx0aXBsZSBvZiAyNCBiaXRzOyBoZXJlLCB0aGUgZmluYWwgdW5pdCBvZiBlbmNvZGVkCi0JICAgb3V0cHV0IHdpbGwgYmUgYW4gaW50ZWdyYWwgbXVsdGlwbGUgb2YgNCBjaGFyYWN0ZXJzCi0JICAgd2l0aCBubyAiPSIgcGFkZGluZywKLSAgICAgICAoMikgdGhlIGZpbmFsIHF1YW50dW0gb2YgZW5jb2RpbmcgaW5wdXQgaXMgZXhhY3RseSA4IGJpdHM7Ci0gICAgICAgICAgIGhlcmUsIHRoZSBmaW5hbCB1bml0IG9mIGVuY29kZWQgb3V0cHV0IHdpbGwgYmUgdHdvCi0JICAgY2hhcmFjdGVycyBmb2xsb3dlZCBieSB0d28gIj0iIHBhZGRpbmcgY2hhcmFjdGVycywgb3IKLSAgICAgICAoMykgdGhlIGZpbmFsIHF1YW50dW0gb2YgZW5jb2RpbmcgaW5wdXQgaXMgZXhhY3RseSAxNiBiaXRzOwotICAgICAgICAgICBoZXJlLCB0aGUgZmluYWwgdW5pdCBvZiBlbmNvZGVkIG91dHB1dCB3aWxsIGJlIHRocmVlCi0JICAgY2hhcmFjdGVycyBmb2xsb3dlZCBieSBvbmUgIj0iIHBhZGRpbmcgY2hhcmFjdGVyLgotICAgKi8KLQotaW50Ci1iNjRfbnRvcChzcmMsIHNyY2xlbmd0aCwgdGFyZ2V0LCB0YXJnc2l6ZSkKLQl1X2NoYXIgY29uc3QgKnNyYzsKLQlzaXplX3Qgc3JjbGVuZ3RoOwotCWNoYXIgKnRhcmdldDsKLQlzaXplX3QgdGFyZ3NpemU7Ci17Ci0Jc2l6ZV90IGRhdGFsZW5ndGggPSAwOwotCXVfY2hhciBpbnB1dFszXSA9IHsgMCwgMCwgMCB9OyAgLyogbWFrZSBjb21waWxlciBoYXBweSAqLwotCXVfY2hhciBvdXRwdXRbNF07Ci0Jc2l6ZV90IGk7Ci0KLQlhc3NlcnQoc3JjICE9IE5VTEwpOwotCWFzc2VydCh0YXJnZXQgIT0gTlVMTCk7Ci0KLQl3aGlsZSAoMiA8IHNyY2xlbmd0aCkgewotCQlpbnB1dFswXSA9ICpzcmMrKzsKLQkJaW5wdXRbMV0gPSAqc3JjKys7Ci0JCWlucHV0WzJdID0gKnNyYysrOwotCQlzcmNsZW5ndGggLT0gMzsKLQotCQlvdXRwdXRbMF0gPSAodV9pbnQzMl90KWlucHV0WzBdID4+IDI7Ci0JCW91dHB1dFsxXSA9ICgodV9pbnQzMl90KShpbnB1dFswXSAmIDB4MDMpIDw8IDQpICsKLQkJICAgICgodV9pbnQzMl90KWlucHV0WzFdID4+IDQpOwotCQlvdXRwdXRbMl0gPSAoKHVfaW50MzJfdCkoaW5wdXRbMV0gJiAweDBmKSA8PCAyKSArCi0JCSAgICAoKHVfaW50MzJfdClpbnB1dFsyXSA+PiA2KTsKLQkJb3V0cHV0WzNdID0gaW5wdXRbMl0gJiAweDNmOwotCQlhc3NlcnQob3V0cHV0WzBdIDwgNjQpOwotCQlhc3NlcnQob3V0cHV0WzFdIDwgNjQpOwotCQlhc3NlcnQob3V0cHV0WzJdIDwgNjQpOwotCQlhc3NlcnQob3V0cHV0WzNdIDwgNjQpOwotCi0JCWlmIChkYXRhbGVuZ3RoICsgNCA+IHRhcmdzaXplKQotCQkJcmV0dXJuICgtMSk7Ci0JCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFswXV07Ci0JCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFsxXV07Ci0JCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFsyXV07Ci0JCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFszXV07Ci0JfQotCi0JLyogTm93IHdlIHdvcnJ5IGFib3V0IHBhZGRpbmcuICovCi0JaWYgKDAgIT0gc3JjbGVuZ3RoKSB7Ci0JCS8qIEdldCB3aGF0J3MgbGVmdC4gKi8KLQkJaW5wdXRbMF0gPSBpbnB1dFsxXSA9IGlucHV0WzJdID0gJ1wwJzsKLQkJZm9yIChpID0gMDsgaSA8IHNyY2xlbmd0aDsgaSsrKQotCQkJaW5wdXRbaV0gPSAqc3JjKys7Ci0KLQkJb3V0cHV0WzBdID0gKHVfaW50MzJfdClpbnB1dFswXSA+PiAyOwotCQlvdXRwdXRbMV0gPSAoKHVfaW50MzJfdCkoaW5wdXRbMF0gJiAweDAzKSA8PCA0KSArCi0JCSAgICAoKHVfaW50MzJfdClpbnB1dFsxXSA+PiA0KTsKLQkJb3V0cHV0WzJdID0gKCh1X2ludDMyX3QpKGlucHV0WzFdICYgMHgwZikgPDwgMikgKwotCQkgICAgKCh1X2ludDMyX3QpaW5wdXRbMl0gPj4gNik7Ci0JCWFzc2VydChvdXRwdXRbMF0gPCA2NCk7Ci0JCWFzc2VydChvdXRwdXRbMV0gPCA2NCk7Ci0JCWFzc2VydChvdXRwdXRbMl0gPCA2NCk7Ci0KLQkJaWYgKGRhdGFsZW5ndGggKyA0ID4gdGFyZ3NpemUpCi0JCQlyZXR1cm4gKC0xKTsKLQkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzBdXTsKLQkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzFdXTsKLQkJaWYgKHNyY2xlbmd0aCA9PSAxKQotCQkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBQYWQ2NDsKLQkJZWxzZQotCQkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzJdXTsKLQkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBQYWQ2NDsKLQl9Ci0JaWYgKGRhdGFsZW5ndGggPj0gdGFyZ3NpemUpCi0JCXJldHVybiAoLTEpOwotCXRhcmdldFtkYXRhbGVuZ3RoXSA9ICdcMCc7CS8qIFJldHVybmVkIHZhbHVlIGRvZXNuJ3QgY291bnQgXDAuICovCi0JcmV0dXJuIChkYXRhbGVuZ3RoKTsKLX0KLQotLyogc2tpcHMgYWxsIHdoaXRlc3BhY2UgYW55d2hlcmUuCi0gICBjb252ZXJ0cyBjaGFyYWN0ZXJzLCBmb3VyIGF0IGEgdGltZSwgc3RhcnRpbmcgYXQgKG9yIGFmdGVyKQotICAgc3JjIGZyb20gYmFzZSAtIDY0IG51bWJlcnMgaW50byB0aHJlZSA4IGJpdCBieXRlcyBpbiB0aGUgdGFyZ2V0IGFyZWEuCi0gICBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF0YSBieXRlcyBzdG9yZWQgYXQgdGhlIHRhcmdldCwgb3IgLTEgb24gZXJyb3IuCi0gKi8KLQotaW50Ci1iNjRfcHRvbihzcmMsIHRhcmdldCwgdGFyZ3NpemUpCi0JY2hhciBjb25zdCAqc3JjOwotCXVfY2hhciAqdGFyZ2V0OwotCXNpemVfdCB0YXJnc2l6ZTsKLXsKLQlzaXplX3QgdGFyaW5kZXg7Ci0JaW50IHN0YXRlLCBjaDsKLQljaGFyICpwb3M7Ci0KLQlhc3NlcnQoc3JjICE9IE5VTEwpOwotCWFzc2VydCh0YXJnZXQgIT0gTlVMTCk7Ci0KLQlzdGF0ZSA9IDA7Ci0JdGFyaW5kZXggPSAwOwotCi0Jd2hpbGUgKChjaCA9ICh1X2NoYXIpICpzcmMrKykgIT0gJ1wwJykgewotCQlpZiAoaXNzcGFjZShjaCkpCS8qIFNraXAgd2hpdGVzcGFjZSBhbnl3aGVyZS4gKi8KLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjaCA9PSBQYWQ2NCkKLQkJCWJyZWFrOwotCi0JCXBvcyA9IHN0cmNocihCYXNlNjQsIGNoKTsKLQkJaWYgKHBvcyA9PSAwKSAJCS8qIEEgbm9uLWJhc2U2NCBjaGFyYWN0ZXIuICovCi0JCQlyZXR1cm4gKC0xKTsKLQotCQlzd2l0Y2ggKHN0YXRlKSB7Ci0JCWNhc2UgMDoKLQkJCWlmICh0YXJnZXQpIHsKLQkJCQlpZiAodGFyaW5kZXggPj0gdGFyZ3NpemUpCi0JCQkJCXJldHVybiAoLTEpOwotCQkJCXRhcmdldFt0YXJpbmRleF0gPSAocG9zIC0gQmFzZTY0KSA8PCAyOwotCQkJfQotCQkJc3RhdGUgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWlmICh0YXJnZXQpIHsKLQkJCQlpZiAodGFyaW5kZXggKyAxID49IHRhcmdzaXplKQotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl0YXJnZXRbdGFyaW5kZXhdIHw9Ci0JCQkJICAgICh1X2ludDMyX3QpKHBvcyAtIEJhc2U2NCkgPj4gNDsKLQkJCQl0YXJnZXRbdGFyaW5kZXgrMV0gID0gKChwb3MgLSBCYXNlNjQpICYgMHgwZikKLQkJCQkJCQk8PCA0IDsKLQkJCX0KLQkJCXRhcmluZGV4Kys7Ci0JCQlzdGF0ZSA9IDI7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJaWYgKHRhcmdldCkgewotCQkJCWlmICh0YXJpbmRleCArIDEgPj0gdGFyZ3NpemUpCi0JCQkJCXJldHVybiAoLTEpOwotCQkJCXRhcmdldFt0YXJpbmRleF0gfD0KLQkJCQkJKHVfaW50MzJfdCkocG9zIC0gQmFzZTY0KSA+PiAyOwotCQkJCXRhcmdldFt0YXJpbmRleCsxXSA9ICgocG9zIC0gQmFzZTY0KSAmIDB4MDMpCi0JCQkJCQkJPDwgNjsKLQkJCX0KLQkJCXRhcmluZGV4Kys7Ci0JCQlzdGF0ZSA9IDM7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJaWYgKHRhcmdldCkgewotCQkJCWlmICh0YXJpbmRleCA+PSB0YXJnc2l6ZSkKLQkJCQkJcmV0dXJuICgtMSk7Ci0JCQkJdGFyZ2V0W3RhcmluZGV4XSB8PSAocG9zIC0gQmFzZTY0KTsKLQkJCX0KLQkJCXRhcmluZGV4Kys7Ci0JCQlzdGF0ZSA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWFib3J0KCk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFdlIGFyZSBkb25lIGRlY29kaW5nIEJhc2UtNjQgY2hhcnMuICBMZXQncyBzZWUgaWYgd2UgZW5kZWQKLQkgKiBvbiBhIGJ5dGUgYm91bmRhcnksIGFuZC9vciB3aXRoIGVycm9uZW91cyB0cmFpbGluZyBjaGFyYWN0ZXJzLgotCSAqLwotCi0JaWYgKGNoID09IFBhZDY0KSB7CQkvKiBXZSBnb3QgYSBwYWQgY2hhci4gKi8KLQkJY2ggPSAqc3JjKys7CQkvKiBTa2lwIGl0LCBnZXQgbmV4dC4gKi8KLQkJc3dpdGNoIChzdGF0ZSkgewotCQljYXNlIDA6CQkvKiBJbnZhbGlkID0gaW4gZmlyc3QgcG9zaXRpb24gKi8KLQkJY2FzZSAxOgkJLyogSW52YWxpZCA9IGluIHNlY29uZCBwb3NpdGlvbiAqLwotCQkJcmV0dXJuICgtMSk7Ci0KLQkJY2FzZSAyOgkJLyogVmFsaWQsIG1lYW5zIG9uZSBieXRlIG9mIGluZm8gKi8KLQkJCS8qIFNraXAgYW55IG51bWJlciBvZiBzcGFjZXMuICovCi0JCQlmb3IgKDsgY2ggIT0gJ1wwJzsgY2ggPSAodV9jaGFyKSAqc3JjKyspCi0JCQkJaWYgKCFpc3NwYWNlKGNoKSkKLQkJCQkJYnJlYWs7Ci0JCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgYW5vdGhlciB0cmFpbGluZyA9IHNpZ24uICovCi0JCQlpZiAoY2ggIT0gUGFkNjQpCi0JCQkJcmV0dXJuICgtMSk7Ci0JCQljaCA9ICpzcmMrKzsJCS8qIFNraXAgdGhlID0gKi8KLQkJCS8qIEZhbGwgdGhyb3VnaCB0byAic2luZ2xlIHRyYWlsaW5nID0iIGNhc2UuICovCi0JCQkvKiBGQUxMVEhST1VHSCAqLwotCi0JCWNhc2UgMzoJCS8qIFZhbGlkLCBtZWFucyB0d28gYnl0ZXMgb2YgaW5mbyAqLwotCQkJLyoKLQkJCSAqIFdlIGtub3cgdGhpcyBjaGFyIGlzIGFuID0uICBJcyB0aGVyZSBhbnl0aGluZyBidXQKLQkJCSAqIHdoaXRlc3BhY2UgYWZ0ZXIgaXQ/Ci0JCQkgKi8KLQkJCWZvciAoOyBjaCAhPSAnXDAnOyBjaCA9ICh1X2NoYXIpICpzcmMrKykKLQkJCQlpZiAoIWlzc3BhY2UoY2gpKQotCQkJCQlyZXR1cm4gKC0xKTsKLQotCQkJLyoKLQkJCSAqIE5vdyBtYWtlIHN1cmUgZm9yIGNhc2VzIDIgYW5kIDMgdGhhdCB0aGUgImV4dHJhIgotCQkJICogYml0cyB0aGF0IHNsb3BwZWQgcGFzdCB0aGUgbGFzdCBmdWxsIGJ5dGUgd2VyZQotCQkJICogemVyb3MuICBJZiB3ZSBkb24ndCBjaGVjayB0aGVtLCB0aGV5IGJlY29tZSBhCi0JCQkgKiBzdWJsaW1pbmFsIGNoYW5uZWwuCi0JCQkgKi8KLQkJCWlmICh0YXJnZXQgJiYgdGFyZ2V0W3RhcmluZGV4XSAhPSAwKQotCQkJCXJldHVybiAoLTEpOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogV2UgZW5kZWQgYnkgc2VlaW5nIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gIE1ha2Ugc3VyZSB3ZQotCQkgKiBoYXZlIG5vIHBhcnRpYWwgYnl0ZXMgbHlpbmcgYXJvdW5kLgotCQkgKi8KLQkJaWYgKHN0YXRlICE9IDApCi0JCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlyZXR1cm4gKHRhcmluZGV4KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9nZXRhZGRyaW5mby5jIGIvbGliYy9uZXRic2QvbmV0L2dldGFkZHJpbmZvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMmY3NGEuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvbmV0L2dldGFkZHJpbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDY1ICswLDAgQEAKLS8qCSROZXRCU0Q6IGdldGFkZHJpbmZvLmMsdiAxLjgyIDIwMDYvMDMvMjUgMTI6MDk6NDAgcnBhdWxvIEV4cCAkCSovCi0vKgkkS0FNRTogZ2V0YWRkcmluZm8uYyx2IDEuMjkgMjAwMC8wOC8zMSAxNzoyNjo1NyBpdG9qdW4gRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgYW5kIDE5OTggV0lERSBQcm9qZWN0LgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIElzc3VlcyB0byBiZSBkaXNjdXNzZWQ6Ci0gKiAtIFRocmVhZCBzYWZlLW5lc3MgbXVzdCBiZSBjaGVja2VkLgotICogLSBSZXR1cm4gdmFsdWVzLiAgVGhlcmUgYXJlIG5vbnN0YW5kYXJkIHJldHVybiB2YWx1ZXMgZGVmaW5lZCBhbmQgdXNlZAotICogICBpbiB0aGUgc291cmNlIGNvZGUuICBUaGlzIGlzIGJlY2F1c2UgUkZDMjU1MyBpcyBzaWxlbnQgYWJvdXQgd2hpY2ggZXJyb3IKLSAqICAgY29kZSBtdXN0IGJlIHJldHVybmVkIGZvciB3aGljaCBzaXR1YXRpb24uCi0gKiAtIElQdjQgY2xhc3NmdWwgKHNob3J0ZW5lZCkgZm9ybS4gIFJGQzI1NTMgaXMgc2lsZW50IGFib3V0IGl0LiAgWE5FVCA1LjIKLSAqICAgc2F5cyB0byB1c2UgaW5ldF9hdG9uKCkgdG8gY29udmVydCBJUHY0IG51bWVyaWMgdG8gYmluYXJ5IChhbG93cwotICogICBjbGFzc2Z1bCBmb3JtIGFzIGEgcmVzdWx0KS4KLSAqICAgY3VycmVudCBjb2RlIC0gZGlzYWxsb3cgY2xhc3NmdWwgZm9ybSBmb3IgSVB2NCAoZHVlIHRvIHVzZSBvZiBpbmV0X3B0b24pLgotICogLSBmcmVlYWRkcmluZm8oTlVMTCkuICBSRkMyNTUzIGlzIHNpbGVudCBhYm91dCBpdC4gIFhORVQgNS4yIHNheXMgaXQgaXMKLSAqICAgaW52YWxpZC4KLSAqICAgY3VycmVudCBjb2RlIC0gU0VHViBvbiBmcmVlYWRkcmluZm8oTlVMTCkKLSAqIE5vdGU6Ci0gKiAtIFdlIHVzZSBnZXRpcG5vZGVieW5hbWUoKSBqdXN0IGZvciB0aHJlYWQtc2FmZW5lc3MuICBUaGVyZSdzIG5vIGludGVudAotICogICB0byBsZXQgaXQgZG8gUEZfVU5TUEVDIChhY3R1YWxseSB3ZSBuZXZlciBwYXNzIFBGX1VOU1BFQyB0bwotICogICBnZXRpcG5vZGVieW5hbWUoKS4KLSAqIC0gVGhlIGNvZGUgZmlsdGVycyBvdXQgQUZzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCwKLSAqICAgd2hlbiBnbG9iYmluZyBOVUxMIGhvc3RuYW1lICh0byBsb29wYmFjaywgb3Igd2lsZGNhcmQpLiAgSXMgaXQgdGhlIHJpZ2h0Ci0gKiAgIHRoaW5nIHRvIGRvPyAgV2hhdCBpcyB0aGUgcmVsYXRpb25zaGlwIHdpdGggcG9zdC1SRkMyNTUzIEFJX0FERFJDT05GSUcKLSAqICAgaW4gYWlfZmxhZ3M/Ci0gKiAtIChwb3N0LTI1NTMpIHNlbWFudGljcyBvZiBBSV9BRERSQ09ORklHIGl0c2VsZiBpcyB0b28gdmFndWUuCi0gKiAgICgxKSB3aGF0IHNob3VsZCB3ZSBkbyBhZ2FpbnN0IG51bWVyaWMgaG9zdG5hbWUgKDIpIHdoYXQgc2hvdWxkIHdlIGRvCi0gKiAgIGFnYWluc3QgTlVMTCBob3N0bmFtZSAoMykgd2hhdCBpcyBBSV9BRERSQ09ORklHIGl0c2VsZi4gIEFGIG5vdCByZWFkeT8KLSAqICAgbm9uLWxvb3BiYWNrIGFkZHJlc3MgY29uZmlndXJlZD8gIGdsb2JhbCBhZGRyZXNzIGNvbmZpZ3VyZWQ/Ci0gKiAtIFRvIGF2b2lkIHNlYXJjaCBvcmRlciBpc3N1ZSwgd2UgaGF2ZSBhIGJpZyBhbW91bnQgb2YgY29kZSBkdXBsaWNhdGUKLSAqICAgZnJvbSBnZXRobmFtYWRkci5jIGFuZCBzb21lIG90aGVyIHBsYWNlcy4gIFRoZSBpc3N1ZXMgdGhhdCB0aGVyZSdzIG5vCi0gKiAgIGxvd2VyIGxheWVyIGZ1bmN0aW9uIHRvIGxvb2t1cCAiSVB2NCBvciBJUHY2IiByZWNvcmQuICBDYWxsaW5nCi0gKiAgIGdldGhvc3RieW5hbWUyIGZyb20gZ2V0YWRkcmluZm8gd2lsbCBlbmQgdXAgaW4gd3Jvbmcgc2VhcmNoIG9yZGVyLCBhcwotICogICBmb2xsb3dzOgotICoJLSBUaGUgY29kZSBtYWtlcyB1c2Ugb2YgZm9sbG93aW5nIGNhbGxzIHdoZW4gYXNrZWQgdG8gcmVzb2x2ZXIgd2l0aAotICoJICBhaV9mYW1pbHkgID0gUEZfVU5TUEVDOgotICoJCWdldGlwbm9kZWJ5bmFtZShob3N0LCBBRl9JTkVUNik7Ci0gKgkJZ2V0aXBub2RlYnluYW1lKGhvc3QsIEFGX0lORVQpOwotICoJICBUaGlzIHdpbGwgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgcXVlcmllcyBpZiB0aGUgbm9kZSBpcyBjb25maWd1cmUgdG8KLSAqCSAgcHJlZmVyIC9ldGMvaG9zdHMgdGhhbiBETlM6Ci0gKgkJbG9va3VwIC9ldGMvaG9zdHMgZm9yIElQdjYgYWRkcmVzcwotICoJCWxvb2t1cCBETlMgZm9yIElQdjYgYWRkcmVzcwotICoJCWxvb2t1cCAvZXRjL2hvc3RzIGZvciBJUHY0IGFkZHJlc3MKLSAqCQlsb29rdXAgRE5TIGZvciBJUHY0IGFkZHJlc3MKLSAqCSAgd2hpY2ggbWF5IG5vdCBtZWV0IHBlb3BsZSdzIHJlcXVpcmVtZW50LgotICoJICBUaGUgcmlnaHQgdGhpbmcgdG8gaGFwcGVuIGlzIHRvIGhhdmUgdW5kZXJseWluZyBsYXllciB3aGljaCBkb2VzCi0gKgkgIFBGX1VOU1BFQyBsb29rdXAgKGxvb2t1cCBib3RoKSBhbmQgcmV0dXJuIGNoYWluIG9mIGFkZHJpbmZvcy4KLSAqCSAgVGhpcyB3b3VsZCByZXN1bHQgaW4gYSBiaXQgb2YgY29kZSBkdXBsaWNhdGUgd2l0aCBfZG5zX2doYnluYW1lKCkgYW5kCi0gKgkgIGZyaWVuZHMuCi0gKi8KLQotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8c3lzL3VuLmg+Ci0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jaW5jbHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8c3lzbG9nLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSAibnNzd2l0Y2guaCIKLQotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgotI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLwotCi10eXBlZGVmIHVuaW9uIHNvY2thZGRyX3VuaW9uIHsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgICAgIGdlbmVyaWM7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luICBpbjsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGluNjsKLX0gc29ja2FkZHJfdW5pb247Ci0KLSNkZWZpbmUgU1VDQ0VTUyAwCi0jZGVmaW5lIEFOWSAwCi0jZGVmaW5lIFlFUyAxCi0jZGVmaW5lIE5PICAwCi0KLXN0YXRpYyBjb25zdCBjaGFyIGluX2FkZHJhbnlbXSA9IHsgMCwgMCwgMCwgMCB9Owotc3RhdGljIGNvbnN0IGNoYXIgaW5fbG9vcGJhY2tbXSA9IHsgMTI3LCAwLCAwLCAxIH07Ci0jaWZkZWYgSU5FVDYKLXN0YXRpYyBjb25zdCBjaGFyIGluNl9hZGRyYW55W10gPSB7Ci0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotfTsKLXN0YXRpYyBjb25zdCBjaGFyIGluNl9sb29wYmFja1tdID0gewotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEKLX07Ci0jZW5kaWYKLQotLy8gVGhpcyBzaG91bGQgYmUgc3luY2hyb25pemVkIHRvIFJlc3BvbnNlQ29kZS5oCi1zdGF0aWMgY29uc3QgaW50IERuc1Byb3h5UXVlcnlSZXN1bHQgPSAyMjI7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZkIHsKLQlpbnQgYV9hZjsKLQlpbnQgYV9hZGRybGVuOwotCWludCBhX3NvY2tsZW47Ci0JaW50IGFfb2ZmOwotCWNvbnN0IGNoYXIgKmFfYWRkcmFueTsKLQljb25zdCBjaGFyICphX2xvb3BiYWNrOwotCWludCBhX3Njb3BlZDsKLX0gYWZkbCBbXSA9IHsKLSNpZmRlZiBJTkVUNgotCXtQRl9JTkVUNiwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksCi0JIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSwKLQkgb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX2luNiwgc2luNl9hZGRyKSwKLQkgaW42X2FkZHJhbnksIGluNl9sb29wYmFjaywgMX0sCi0jZW5kaWYKLQl7UEZfSU5FVCwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwKLQkgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbiksCi0JIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl9pbiwgc2luX2FkZHIpLAotCSBpbl9hZGRyYW55LCBpbl9sb29wYmFjaywgMH0sCi0JezAsIDAsIDAsIDAsIE5VTEwsIE5VTEwsIDB9LAotfTsKLQotc3RydWN0IGV4cGxvcmUgewotCWludCBlX2FmOwotCWludCBlX3NvY2t0eXBlOwotCWludCBlX3Byb3RvY29sOwotCWNvbnN0IGNoYXIgKmVfcHJvdG9zdHI7Ci0JaW50IGVfd2lsZDsKLSNkZWZpbmUgV0lMRF9BRihleCkJCSgoZXgpLT5lX3dpbGQgJiAweDAxKQotI2RlZmluZSBXSUxEX1NPQ0tUWVBFKGV4KQkoKGV4KS0+ZV93aWxkICYgMHgwMikKLSNkZWZpbmUgV0lMRF9QUk9UT0NPTChleCkJKChleCktPmVfd2lsZCAmIDB4MDQpCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV4cGxvcmUgZXhwbG9yZVtdID0gewotI2lmIDAKLQl7IFBGX0xPQ0FMLCAwLCBBTlksIEFOWSwgTlVMTCwgMHgwMSB9LAotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQl7IFBGX0lORVQ2LCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgInVkcCIsIDB4MDcgfSwKLQl7IFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICJ0Y3AiLCAweDA3IH0sCi0JeyBQRl9JTkVUNiwgU09DS19SQVcsIEFOWSwgTlVMTCwgMHgwNSB9LAotI2VuZGlmCi0JeyBQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgInVkcCIsIDB4MDcgfSwKLQl7IFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgInRjcCIsIDB4MDcgfSwKLQl7IFBGX0lORVQsIFNPQ0tfUkFXLCBBTlksIE5VTEwsIDB4MDUgfSwKLQl7IFBGX1VOU1BFQywgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICJ1ZHAiLCAweDA3IH0sCi0JeyBQRl9VTlNQRUMsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgInRjcCIsIDB4MDcgfSwKLQl7IFBGX1VOU1BFQywgU09DS19SQVcsIEFOWSwgTlVMTCwgMHgwNSB9LAotCXsgLTEsIDAsIDAsIE5VTEwsIDAgfSwKLX07Ci0KLSNpZmRlZiBJTkVUNgotI2RlZmluZSBQVE9OX01BWAkxNgotI2Vsc2UKLSNkZWZpbmUgUFRPTl9NQVgJNAotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBuc19zcmMgZGVmYXVsdF9kbnNfZmlsZXNbXSA9IHsKLQl7IE5TU1JDX0ZJTEVTLCAJTlNfU1VDQ0VTUyB9LAotCXsgTlNTUkNfRE5TLCAJTlNfU1VDQ0VTUyB9LAotCXsgMCwgMCB9Ci19OwotCi0jZGVmaW5lIE1BWFBBQ0tFVAkoNjQqMTAyNCkKLQotdHlwZWRlZiB1bmlvbiB7Ci0JSEVBREVSIGhkcjsKLQl1X2NoYXIgYnVmW01BWFBBQ0tFVF07Ci19IHF1ZXJ5YnVmOwotCi1zdHJ1Y3QgcmVzX3RhcmdldCB7Ci0Jc3RydWN0IHJlc190YXJnZXQgKm5leHQ7Ci0JY29uc3QgY2hhciAqbmFtZTsJLyogZG9tYWluIG5hbWUgKi8KLQlpbnQgcWNsYXNzLCBxdHlwZTsJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KLQl1X2NoYXIgKmFuc3dlcjsJCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCi0JaW50IGFuc2xlbjsJCS8qIHNpemUgb2YgYW5zd2VyIGJ1ZmZlciAqLwotCWludCBuOwkJCS8qIHJlc3VsdCBsZW5ndGggKi8KLX07Ci0KLXN0YXRpYyBpbnQgc3RyMm51bWJlcihjb25zdCBjaGFyICopOwotc3RhdGljIGludCBleHBsb3JlX2ZxZG4oY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKiwKLQljb25zdCBjaGFyICosIHN0cnVjdCBhZGRyaW5mbyAqKiwgY29uc3QgY2hhciAqaWZhY2UsIGludCBtYXJrKTsKLXN0YXRpYyBpbnQgZXhwbG9yZV9udWxsKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLAotCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqKTsKLXN0YXRpYyBpbnQgZXhwbG9yZV9udW1lcmljKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBjb25zdCBjaGFyICosCi0JY29uc3QgY2hhciAqLCBzdHJ1Y3QgYWRkcmluZm8gKiosIGNvbnN0IGNoYXIgKik7Ci1zdGF0aWMgaW50IGV4cGxvcmVfbnVtZXJpY19zY29wZShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLAotCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqKTsKLXN0YXRpYyBpbnQgZ2V0X2Nhbm9ubmFtZShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwKLQlzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqKTsKLXN0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKmdldF9haShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwKLQljb25zdCBzdHJ1Y3QgYWZkICosIGNvbnN0IGNoYXIgKik7Ci1zdGF0aWMgaW50IGdldF9wb3J0bWF0Y2goY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKik7Ci1zdGF0aWMgaW50IGdldF9wb3J0KGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBjb25zdCBjaGFyICosIGludCk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGFmZCAqZmluZF9hZmQoaW50KTsKLSNpZmRlZiBJTkVUNgotc3RhdGljIGludCBpcDZfc3RyMnNjb3BlaWQoY2hhciAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHVfaW50MzJfdCAqKTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IGFkZHJpbmZvICpnZXRhbnN3ZXIoY29uc3QgcXVlcnlidWYgKiwgaW50LCBjb25zdCBjaGFyICosIGludCwKLQljb25zdCBzdHJ1Y3QgYWRkcmluZm8gKik7Ci1zdGF0aWMgaW50IF9kbnNfZ2V0YWRkcmluZm8odm9pZCAqLCB2b2lkICosIHZhX2xpc3QpOwotc3RhdGljIHZvaWQgX3NldGh0ZW50KEZJTEUgKiopOwotc3RhdGljIHZvaWQgX2VuZGh0ZW50KEZJTEUgKiopOwotc3RhdGljIHN0cnVjdCBhZGRyaW5mbyAqX2dldGh0ZW50KEZJTEUgKiosIGNvbnN0IGNoYXIgKiwKLSAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKik7Ci1zdGF0aWMgaW50IF9maWxlc19nZXRhZGRyaW5mbyh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7Ci0KLXN0YXRpYyBpbnQgcmVzX3F1ZXJ5Tihjb25zdCBjaGFyICosIHN0cnVjdCByZXNfdGFyZ2V0ICosIHJlc19zdGF0ZSk7Ci1zdGF0aWMgaW50IHJlc19zZWFyY2hOKGNvbnN0IGNoYXIgKiwgc3RydWN0IHJlc190YXJnZXQgKiwgcmVzX3N0YXRlKTsKLXN0YXRpYyBpbnQgcmVzX3F1ZXJ5ZG9tYWluTihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKLQlzdHJ1Y3QgcmVzX3RhcmdldCAqLCByZXNfc3RhdGUpOwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFpX2Vycmxpc3RbXSA9IHsKLQkiU3VjY2VzcyIsCi0JIkFkZHJlc3MgZmFtaWx5IGZvciBob3N0bmFtZSBub3Qgc3VwcG9ydGVkIiwJLyogRUFJX0FERFJGQU1JTFkgKi8KLQkiVGVtcG9yYXJ5IGZhaWx1cmUgaW4gbmFtZSByZXNvbHV0aW9uIiwJCS8qIEVBSV9BR0FJTiAgICAgICovCi0JIkludmFsaWQgdmFsdWUgZm9yIGFpX2ZsYWdzIiwJCSAgICAgICAJLyogRUFJX0JBREZMQUdTICAgKi8KLQkiTm9uLXJlY292ZXJhYmxlIGZhaWx1cmUgaW4gbmFtZSByZXNvbHV0aW9uIiwgCS8qIEVBSV9GQUlMICAgICAgICovCi0JImFpX2ZhbWlseSBub3Qgc3VwcG9ydGVkIiwJCQkvKiBFQUlfRkFNSUxZICAgICAqLwotCSJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIiwgCQkJLyogRUFJX01FTU9SWSAgICAgKi8KLQkiTm8gYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggaG9zdG5hbWUiLCAJCS8qIEVBSV9OT0RBVEEgICAgICovCi0JImhvc3RuYW1lIG5vciBzZXJ2bmFtZSBwcm92aWRlZCwgb3Igbm90IGtub3duIiwJLyogRUFJX05PTkFNRSAgICAgKi8KLQkic2Vydm5hbWUgbm90IHN1cHBvcnRlZCBmb3IgYWlfc29ja3R5cGUiLAkvKiBFQUlfU0VSVklDRSAgICAqLwotCSJhaV9zb2NrdHlwZSBub3Qgc3VwcG9ydGVkIiwgCQkJLyogRUFJX1NPQ0tUWVBFICAgKi8KLQkiU3lzdGVtIGVycm9yIHJldHVybmVkIGluIGVycm5vIiwgCQkvKiBFQUlfU1lTVEVNICAgICAqLwotCSJJbnZhbGlkIHZhbHVlIGZvciBoaW50cyIsCQkJLyogRUFJX0JBREhJTlRTCSAgKi8KLQkiUmVzb2x2ZWQgcHJvdG9jb2wgaXMgdW5rbm93biIsCQkJLyogRUFJX1BST1RPQ09MICAgKi8KLQkiQXJndW1lbnQgYnVmZmVyIG92ZXJmbG93IiwJCQkvKiBFQUlfT1ZFUkZMT1cgICAqLwotCSJVbmtub3duIGVycm9yIiwgCQkJCS8qIEVBSV9NQVggICAgICAgICovCi19OwotCi0vKiBYWFggbWFjcm9zIHRoYXQgbWFrZSBleHRlcm5hbCByZWZlcmVuY2UgaXMgQkFELiAqLwotCi0jZGVmaW5lIEdFVF9BSShhaSwgYWZkLCBhZGRyKSAJCQkJCVwKLWRvIHsgCQkJCQkJCQlcCi0JLyogZXh0ZXJuYWwgcmVmZXJlbmNlOiBwYWksIGVycm9yLCBhbmQgbGFiZWwgZnJlZSAqLyAJXAotCShhaSkgPSBnZXRfYWkocGFpLCAoYWZkKSwgKGFkZHIpKTsgCQkJXAotCWlmICgoYWkpID09IE5VTEwpIHsgCQkJCQlcCi0JCWVycm9yID0gRUFJX01FTU9SWTsgCQkJCVwKLQkJZ290byBmcmVlOyAJCQkJCVwKLQl9IAkJCQkJCQlcCi19IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZSBHRVRfUE9SVChhaSwgc2VydikgCQkJCQlcCi1kbyB7IAkJCQkJCQkJXAotCS8qIGV4dGVybmFsIHJlZmVyZW5jZTogZXJyb3IgYW5kIGxhYmVsIGZyZWUgKi8gCQlcCi0JZXJyb3IgPSBnZXRfcG9ydCgoYWkpLCAoc2VydiksIDApOyAJCQlcCi0JaWYgKGVycm9yICE9IDApIAkJCQkJXAotCQlnb3RvIGZyZWU7IAkJCQkJXAotfSB3aGlsZSAoLypDT05TVENPTkQqLzApCi0KLSNkZWZpbmUgR0VUX0NBTk9OTkFNRShhaSwgc3RyKSAJCQkJCVwKLWRvIHsgCQkJCQkJCQlcCi0JLyogZXh0ZXJuYWwgcmVmZXJlbmNlOiBwYWksIGVycm9yIGFuZCBsYWJlbCBmcmVlICovIAlcCi0JZXJyb3IgPSBnZXRfY2Fub25uYW1lKHBhaSwgKGFpKSwgKHN0cikpOyAJCVwKLQlpZiAoZXJyb3IgIT0gMCkgCQkJCQlcCi0JCWdvdG8gZnJlZTsgCQkJCQlcCi19IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZSBFUlIoZXJyKSAJCQkJCQlcCi1kbyB7IAkJCQkJCQkJXAotCS8qIGV4dGVybmFsIHJlZmVyZW5jZTogZXJyb3IsIGFuZCBsYWJlbCBiYWQgKi8gCQlcCi0JZXJyb3IgPSAoZXJyKTsgCQkJCQkJXAotCWdvdG8gYmFkOyAJCQkJCQlcCi0JLypOT1RSRUFDSEVEKi8gCQkJCQkJXAotfSB3aGlsZSAoLypDT05TVENPTkQqLzApCi0KLSNkZWZpbmUgTUFUQ0hfRkFNSUxZKHgsIHksIHcpIAkJCQkJCVwKLQkoKHgpID09ICh5KSB8fCAoLypDT05TVENPTkQqLyh3KSAmJiAoKHgpID09IFBGX1VOU1BFQyB8fCAJXAotCSAgICAoeSkgPT0gUEZfVU5TUEVDKSkpCi0jZGVmaW5lIE1BVENIKHgsIHksIHcpIAkJCQkJCQlcCi0JKCh4KSA9PSAoeSkgfHwgKC8qQ09OU1RDT05EKi8odykgJiYgKCh4KSA9PSBBTlkgfHwgKHkpID09IEFOWSkpKQotCi1jb25zdCBjaGFyICoKLWdhaV9zdHJlcnJvcihpbnQgZWNvZGUpCi17Ci0JaWYgKGVjb2RlIDwgMCB8fCBlY29kZSA+IEVBSV9NQVgpCi0JCWVjb2RlID0gRUFJX01BWDsKLQlyZXR1cm4gYWlfZXJybGlzdFtlY29kZV07Ci19Ci0KLXZvaWQKLWZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKmFpKQotewotCXN0cnVjdCBhZGRyaW5mbyAqbmV4dDsKLQotCWFzc2VydChhaSAhPSBOVUxMKTsKLQotCWRvIHsKLQkJbmV4dCA9IGFpLT5haV9uZXh0OwotCQlpZiAoYWktPmFpX2Nhbm9ubmFtZSkKLQkJCWZyZWUoYWktPmFpX2Nhbm9ubmFtZSk7Ci0JCS8qIG5vIG5lZWQgdG8gZnJlZShhaS0+YWlfYWRkcikgKi8KLQkJZnJlZShhaSk7Ci0JCWFpID0gbmV4dDsKLQl9IHdoaWxlIChhaSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXN0cjJudW1iZXIoY29uc3QgY2hhciAqcCkKLXsKLQljaGFyICplcDsKLQl1bnNpZ25lZCBsb25nIHY7Ci0KLQlhc3NlcnQocCAhPSBOVUxMKTsKLQotCWlmICgqcCA9PSAnXDAnKQotCQlyZXR1cm4gLTE7Ci0JZXAgPSBOVUxMOwotCWVycm5vID0gMDsKLQl2ID0gc3RydG91bChwLCAmZXAsIDEwKTsKLQlpZiAoZXJybm8gPT0gMCAmJiBlcCAmJiAqZXAgPT0gJ1wwJyAmJiB2IDw9IFVJTlRfTUFYKQotCQlyZXR1cm4gdjsKLQllbHNlCi0JCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIENvbm5lY3QgYSBVRFAgc29ja2V0IHRvIGEgZ2l2ZW4gdW5pY2FzdCBhZGRyZXNzLiBUaGlzIHdpbGwgY2F1c2Ugbm8gbmV0d29yawotICogdHJhZmZpYywgYnV0IHdpbGwgZmFpbCBmYXN0IGlmIHRoZSBzeXN0ZW0gaGFzIG5vIG9yIGxpbWl0ZWQgcmVhY2hhYmlsaXR5IHRvCi0gKiB0aGUgZGVzdGluYXRpb24gKGUuZy4sIG5vIElQdjQgYWRkcmVzcywgbm8gSVB2NiBkZWZhdWx0IHJvdXRlLCAuLi4pLgotICovCi1zdGF0aWMgaW50Ci1fdGVzdF9jb25uZWN0KGludCBwZiwgc3RydWN0IHNvY2thZGRyICphZGRyLCBzaXplX3QgYWRkcmxlbikgewotCWludCBzID0gc29ja2V0KHBmLCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7Ci0JaWYgKHMgPCAwKQotCQlyZXR1cm4gMDsKLQlpbnQgcmV0OwotCWRvIHsKLQkJcmV0ID0gY29ubmVjdChzLCBhZGRyLCBhZGRybGVuKTsKLQl9IHdoaWxlIChyZXQgPCAwICYmIGVycm5vID09IEVJTlRSKTsKLQlpbnQgc3VjY2VzcyA9IChyZXQgPT0gMCk7Ci0JZG8gewotCQlyZXQgPSBjbG9zZShzKTsKLQl9IHdoaWxlIChyZXQgPCAwICYmIGVycm5vID09IEVJTlRSKTsKLQlyZXR1cm4gc3VjY2VzczsKLX0KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGRldGVybWluZSB3aGV0aGVyIElQdjQgb3IgSVB2NiBjb25uZWN0aXZpdHkgaXMKLSAqIGF2YWlsYWJsZSBpbiBvcmRlciB0byBpbXBsZW1lbnQgQUlfQUREUkNPTkZJRy4KLSAqCi0gKiBTdHJpY3RseSBzcGVha2luZywgQUlfQUREUkNPTkZJRyBzaG91bGQgbm90IGxvb2sgYXQgd2hldGhlciBjb25uZWN0aXZpdHkgaXMKLSAqIGF2YWlsYWJsZSwgYnV0IHdoZXRoZXIgYWRkcmVzc2VzIG9mIHRoZSBzcGVjaWZpZWQgZmFtaWx5IGFyZSAiY29uZmlndXJlZAotICogb24gdGhlIGxvY2FsIHN5c3RlbSIuIEhvd2V2ZXIsIGJpb25pYyBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IGdldGlmYWRkcnMsCi0gKiBzbyBjaGVja2luZyBmb3IgY29ubmVjdGl2aXR5IGlzIHRoZSBuZXh0IGJlc3QgdGhpbmcuCi0gKi8KLXN0YXRpYyBpbnQKLV9oYXZlX2lwdjYoKSB7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNl90ZXN0ID0gewotCQkuc2luNl9mYW1pbHkgPSBBRl9JTkVUNiwKLQkJLnNpbjZfYWRkci5zNl9hZGRyID0geyAgLy8gMjAwMDo6Ci0JCQkweDIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfQotCQl9OwotICAgICAgICBzb2NrYWRkcl91bmlvbiBhZGRyID0geyAuaW42ID0gc2luNl90ZXN0IH07Ci0JcmV0dXJuIF90ZXN0X2Nvbm5lY3QoUEZfSU5FVDYsICZhZGRyLmdlbmVyaWMsIHNpemVvZihhZGRyLmluNikpOwotfQotCi1zdGF0aWMgaW50Ci1faGF2ZV9pcHY0KCkgewotCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3Rlc3QgPSB7Ci0JCS5zaW5fZmFtaWx5ID0gQUZfSU5FVCwKLQkJLnNpbl9hZGRyLnNfYWRkciA9IF9fY29uc3RhbnRfaHRvbmwoMHgwODA4MDgwOEwpICAvLyA4LjguOC44Ci0JfTsKLSAgICAgICAgc29ja2FkZHJfdW5pb24gYWRkciA9IHsgLmluID0gc2luX3Rlc3QgfTsKLSAgICAgICAgcmV0dXJuIF90ZXN0X2Nvbm5lY3QoUEZfSU5FVCwgJmFkZHIuZ2VuZXJpYywgc2l6ZW9mKGFkZHIuaW4pKTsKLX0KLQotLy8gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgcmV0dXJucyBvbiBlcnJvci4KLXN0YXRpYyBpbnQKLWFuZHJvaWRfZ2V0YWRkcmluZm9fcHJveHkoCi0gICAgY29uc3QgY2hhciAqaG9zdG5hbWUsIGNvbnN0IGNoYXIgKnNlcnZuYW1lLAotICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcywgY29uc3QgY2hhciAqaWZhY2UpCi17Ci0JaW50IHNvY2s7Ci0JY29uc3QgaW50IG9uZSA9IDE7Ci0Jc3RydWN0IHNvY2thZGRyX3VuIHByb3h5X2FkZHI7Ci0JRklMRSogcHJveHkgPSBOVUxMOwotCWludCBzdWNjZXNzID0gMDsKLQotCS8vIENsZWFyIHRoaXMgYXQgc3RhcnQsIGFzIHdlIHVzZSBpdHMgbm9uLU5VTExuZXNzIGxhdGVyIChpbiB0aGUKLQkvLyBlcnJvciBwYXRoKSB0byBkZWNpZGUgaWYgd2UgaGF2ZSB0byBmcmVlIHVwIGFueSBtZW1vcnkgd2UKLQkvLyBhbGxvY2F0ZWQgaW4gdGhlIHByb2Nlc3MgKGJlZm9yZSBmYWlsaW5nKS4KLQkqcmVzID0gTlVMTDsKLQotCS8vIEJvZ3VzIHRoaW5ncyB3ZSBjYW4ndCBzZXJpYWxpemUuICBEb24ndCB1c2UgdGhlIHByb3h5LiAgVGhlc2Ugd2lsbCBmYWlsIC0gbGV0IHRoZW0uCi0JaWYgKChob3N0bmFtZSAhPSBOVUxMICYmCi0JICAgICBzdHJjc3BuKGhvc3RuYW1lLCAiIFxuXHJcdF4nXCIiKSAhPSBzdHJsZW4oaG9zdG5hbWUpKSB8fAotCSAgICAoc2Vydm5hbWUgIT0gTlVMTCAmJgotCSAgICAgc3RyY3NwbihzZXJ2bmFtZSwgIiBcblxyXHReJ1wiIikgIT0gc3RybGVuKHNlcnZuYW1lKSkpIHsKLQkJcmV0dXJuIEVBSV9OT0RBVEE7Ci0JfQotCi0Jc29jayA9IHNvY2tldChBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7Ci0JaWYgKHNvY2sgPCAwKSB7Ci0JCXJldHVybiBFQUlfTk9EQVRBOwotCX0KLQotCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmb25lLCBzaXplb2Yob25lKSk7Ci0JbWVtc2V0KCZwcm94eV9hZGRyLCAwLCBzaXplb2YocHJveHlfYWRkcikpOwotCXByb3h5X2FkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7Ci0Jc3RybGNweShwcm94eV9hZGRyLnN1bl9wYXRoLCAiL2Rldi9zb2NrZXQvZG5zcHJveHlkIiwKLQkJc2l6ZW9mKHByb3h5X2FkZHIuc3VuX3BhdGgpKTsKLQlpZiAoVEVNUF9GQUlMVVJFX1JFVFJZKGNvbm5lY3Qoc29jaywKLQkJCQkgICAgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopICZwcm94eV9hZGRyLAotCQkJCSAgICAgICBzaXplb2YocHJveHlfYWRkcikpKSAhPSAwKSB7Ci0JCWNsb3NlKHNvY2spOwotCQlyZXR1cm4gRUFJX05PREFUQTsKLQl9Ci0KLQkvLyBTZW5kIHRoZSByZXF1ZXN0LgotCXByb3h5ID0gZmRvcGVuKHNvY2ssICJyKyIpOwotCWlmIChmcHJpbnRmKHByb3h5LCAiZ2V0YWRkcmluZm8gJXMgJXMgJWQgJWQgJWQgJWQgJXMiLAotCQkgICAgaG9zdG5hbWUgPT0gTlVMTCA/ICJeIiA6IGhvc3RuYW1lLAotCQkgICAgc2Vydm5hbWUgPT0gTlVMTCA/ICJeIiA6IHNlcnZuYW1lLAotCQkgICAgaGludHMgPT0gTlVMTCA/IC0xIDogaGludHMtPmFpX2ZsYWdzLAotCQkgICAgaGludHMgPT0gTlVMTCA/IC0xIDogaGludHMtPmFpX2ZhbWlseSwKLQkJICAgIGhpbnRzID09IE5VTEwgPyAtMSA6IGhpbnRzLT5haV9zb2NrdHlwZSwKLQkJICAgIGhpbnRzID09IE5VTEwgPyAtMSA6IGhpbnRzLT5haV9wcm90b2NvbCwKLQkJICAgIGlmYWNlID09IE5VTEwgPyAiXiIgOiBpZmFjZSkgPCAwKSB7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JLy8gbGl0ZXJhbCBOVUxMIGJ5dGUgYXQgZW5kLCByZXF1aXJlZCBieSBGcmFtZXdvcmtMaXN0ZW5lcgotCWlmIChmcHV0YygwLCBwcm94eSkgPT0gRU9GIHx8Ci0JICAgIGZmbHVzaChwcm94eSkgIT0gMCkgewotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JY2hhciBidWZbNF07Ci0JLy8gcmVhZCByZXN1bHQgY29kZSBmb3IgZ2V0aG9zdGJ5YWRkcgotCWlmIChmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBwcm94eSkgIT0gc2l6ZW9mKGJ1ZikpIHsKLQkJZ290byBleGl0OwotCX0KLQotCWludCByZXN1bHRfY29kZSA9IChpbnQpc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwotCS8vIHZlcmlmeSB0aGUgY29kZSBpdHNlbGYKLQlpZiAocmVzdWx0X2NvZGUgIT0gRG5zUHJveHlRdWVyeVJlc3VsdCApIHsKLQkJZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgcHJveHkpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0Jc3RydWN0IGFkZHJpbmZvKiBhaSA9IE5VTEw7Ci0Jc3RydWN0IGFkZHJpbmZvKiogbmV4dHJlcyA9IHJlczsKLQl3aGlsZSAoMSkgewotCQl1aW50MzJfdCBhZGRyaW5mb19sZW47Ci0JCWlmIChmcmVhZCgmYWRkcmluZm9fbGVuLCBzaXplb2YoYWRkcmluZm9fbGVuKSwKLQkJCSAgMSwgcHJveHkpICE9IDEpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWFkZHJpbmZvX2xlbiA9IG50b2hsKGFkZHJpbmZvX2xlbik7Ci0JCWlmIChhZGRyaW5mb19sZW4gPT0gMCkgewotCQkJc3VjY2VzcyA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChhZGRyaW5mb19sZW4gPCBzaXplb2Yoc3RydWN0IGFkZHJpbmZvKSkgewotCQkJYnJlYWs7Ci0JCX0KLQkJc3RydWN0IGFkZHJpbmZvKiBhaSA9IGNhbGxvYygxLCBhZGRyaW5mb19sZW4gKwotCQkJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkpOwotCQlpZiAoYWkgPT0gTlVMTCkgewotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoZnJlYWQoYWksIGFkZHJpbmZvX2xlbiwgMSwgcHJveHkpICE9IDEpIHsKLQkJCS8vIEVycm9yOyBmYWxsIHRocm91Z2guCi0JCQlicmVhazsKLQkJfQotCi0JCS8vIFplcm8gb3V0IHRoZSBwb2ludGVyIGZpZWxkcyB3ZSBjb3BpZWQgd2hpY2ggYXJlbid0Ci0JCS8vIHZhbGlkIGluIHRoaXMgYWRkcmVzcyBzcGFjZS4KLQkJYWktPmFpX2FkZHIgPSBOVUxMOwotCQlhaS0+YWlfY2Fub25uYW1lID0gTlVMTDsKLQkJYWktPmFpX25leHQgPSBOVUxMOwotCi0JCS8vIHN0cnVjdCBzb2NrYWRkcgotCQl1aW50MzJfdCBhZGRyX2xlbjsKLQkJaWYgKGZyZWFkKCZhZGRyX2xlbiwgc2l6ZW9mKGFkZHJfbGVuKSwgMSwgcHJveHkpICE9IDEpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWFkZHJfbGVuID0gbnRvaGwoYWRkcl9sZW4pOwotCQlpZiAoYWRkcl9sZW4gIT0gMCkgewotCQkJaWYgKGFkZHJfbGVuID4gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKSkgewotCQkJCS8vIEJvZ3VzOyB0b28gYmlnLgotCQkJCWJyZWFrOwotCQkJfQotCQkJc3RydWN0IHNvY2thZGRyKiBhZGRyID0gKHN0cnVjdCBzb2NrYWRkciopKGFpICsgMSk7Ci0JCQlpZiAoZnJlYWQoYWRkciwgYWRkcl9sZW4sIDEsIHByb3h5KSAhPSAxKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlhaS0+YWlfYWRkciA9IGFkZHI7Ci0JCX0KLQotCQkvLyBjYW5ub25uYW1lCi0JCXVpbnQzMl90IG5hbWVfbGVuOwotCQlpZiAoZnJlYWQoJm5hbWVfbGVuLCBzaXplb2YobmFtZV9sZW4pLCAxLCBwcm94eSkgIT0gMSkgewotCQkJYnJlYWs7Ci0JCX0KLQkJbmFtZV9sZW4gPSBudG9obChuYW1lX2xlbik7Ci0JCWlmIChuYW1lX2xlbiAhPSAwKSB7Ci0JCQlhaS0+YWlfY2Fub25uYW1lID0gKGNoYXIqKSBtYWxsb2MobmFtZV9sZW4pOwotCQkJaWYgKGZyZWFkKGFpLT5haV9jYW5vbm5hbWUsIG5hbWVfbGVuLCAxLCBwcm94eSkgIT0gMSkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGFpLT5haV9jYW5vbm5hbWVbbmFtZV9sZW4gLSAxXSAhPSAnXDAnKSB7Ci0JCQkJLy8gVGhlIHByb3h5IHNob3VsZCBiZSByZXR1cm5pbmcgdGhpcwotCQkJCS8vIE5VTEwtdGVybWluYXRlZC4KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCSpuZXh0cmVzID0gYWk7Ci0JCW5leHRyZXMgPSAmYWktPmFpX25leHQ7Ci0JCWFpID0gTlVMTDsKLQl9Ci0KLQlpZiAoYWkgIT0gTlVMTCkgewotCQkvLyBDbGVhbiB1cCBwYXJ0aWFsbHktYnVpbHQgYWRkcmluZm8gdGhhdCB3ZSBuZXZlciBlbmRlZCB1cAotCQkvLyBhdHRhY2hpbmcgdG8gdGhlIHJlc3BvbnNlLgotCQlmcmVlYWRkcmluZm8oYWkpOwotCX0KLWV4aXQ6Ci0JaWYgKHByb3h5ICE9IE5VTEwpIHsKLQkJZmNsb3NlKHByb3h5KTsKLQl9Ci0KLQlpZiAoc3VjY2VzcykgewotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvLyBQcm94eSBmYWlsZWQ7Ci0JLy8gY2xlYW4gdXAgbWVtb3J5IHdlIG1pZ2h0J3ZlIGFsbG9jYXRlZC4KLQlpZiAoKnJlcykgewotCQlmcmVlYWRkcmluZm8oKnJlcyk7Ci0JCSpyZXMgPSBOVUxMOwotCX0KLQlyZXR1cm4gRUFJX05PREFUQTsKLX0KLQotaW50Ci1nZXRhZGRyaW5mbyhjb25zdCBjaGFyICpob3N0bmFtZSwgY29uc3QgY2hhciAqc2Vydm5hbWUsCi0gICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgc3RydWN0IGFkZHJpbmZvICoqcmVzKQotewotCXJldHVybiBhbmRyb2lkX2dldGFkZHJpbmZvZm9yaWZhY2UoaG9zdG5hbWUsIHNlcnZuYW1lLCBoaW50cywgTlVMTCwgMCwgcmVzKTsKLX0KLQotaW50Ci1hbmRyb2lkX2dldGFkZHJpbmZvZm9yaWZhY2UoY29uc3QgY2hhciAqaG9zdG5hbWUsIGNvbnN0IGNoYXIgKnNlcnZuYW1lLAotICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsIGNvbnN0IGNoYXIgKmlmYWNlLCBpbnQgbWFyaywgc3RydWN0IGFkZHJpbmZvICoqcmVzKQotewotCXN0cnVjdCBhZGRyaW5mbyBzZW50aW5lbDsKLQlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKLQlpbnQgZXJyb3IgPSAwOwotCXN0cnVjdCBhZGRyaW5mbyBhaTsKLQlzdHJ1Y3QgYWRkcmluZm8gYWkwOwotCXN0cnVjdCBhZGRyaW5mbyAqcGFpOwotCWNvbnN0IHN0cnVjdCBleHBsb3JlICpleDsKLQljb25zdCBjaGFyKiBjYWNoZV9tb2RlID0gZ2V0ZW52KCJBTkRST0lEX0ROU19NT0RFIik7Ci0KLQkvKiBob3N0bmFtZSBpcyBhbGxvd2VkIHRvIGJlIE5VTEwgKi8KLQkvKiBzZXJ2bmFtZSBpcyBhbGxvd2VkIHRvIGJlIE5VTEwgKi8KLQkvKiBoaW50cyBpcyBhbGxvd2VkIHRvIGJlIE5VTEwgKi8KLQlhc3NlcnQocmVzICE9IE5VTEwpOwotCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOwotCWN1ciA9ICZzZW50aW5lbDsKLQlwYWkgPSAmYWk7Ci0JcGFpLT5haV9mbGFncyA9IDA7Ci0JcGFpLT5haV9mYW1pbHkgPSBQRl9VTlNQRUM7Ci0JcGFpLT5haV9zb2NrdHlwZSA9IEFOWTsKLQlwYWktPmFpX3Byb3RvY29sID0gQU5ZOwotCXBhaS0+YWlfYWRkcmxlbiA9IDA7Ci0JcGFpLT5haV9jYW5vbm5hbWUgPSBOVUxMOwotCXBhaS0+YWlfYWRkciA9IE5VTEw7Ci0JcGFpLT5haV9uZXh0ID0gTlVMTDsKLQotCWlmIChob3N0bmFtZSA9PSBOVUxMICYmIHNlcnZuYW1lID09IE5VTEwpCi0JCXJldHVybiBFQUlfTk9OQU1FOwotCWlmIChoaW50cykgewotCQkvKiBlcnJvciBjaGVjayBmb3IgaGludHMgKi8KLQkJaWYgKGhpbnRzLT5haV9hZGRybGVuIHx8IGhpbnRzLT5haV9jYW5vbm5hbWUgfHwKLQkJICAgIGhpbnRzLT5haV9hZGRyIHx8IGhpbnRzLT5haV9uZXh0KQotCQkJRVJSKEVBSV9CQURISU5UUyk7IC8qIHh4eCAqLwotCQlpZiAoaGludHMtPmFpX2ZsYWdzICYgfkFJX01BU0spCi0JCQlFUlIoRUFJX0JBREZMQUdTKTsKLQkJc3dpdGNoIChoaW50cy0+YWlfZmFtaWx5KSB7Ci0JCWNhc2UgUEZfVU5TUEVDOgotCQljYXNlIFBGX0lORVQ6Ci0jaWZkZWYgSU5FVDYKLQkJY2FzZSBQRl9JTkVUNjoKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlFUlIoRUFJX0ZBTUlMWSk7Ci0JCX0KLQkJbWVtY3B5KHBhaSwgaGludHMsIHNpemVvZigqcGFpKSk7Ci0KLQkJLyoKLQkJICogaWYgYm90aCBzb2NrdHlwZS9wcm90b2NvbCBhcmUgc3BlY2lmaWVkLCBjaGVjayBpZiB0aGV5Ci0JCSAqIGFyZSBtZWFuaW5nZnVsIGNvbWJpbmF0aW9uLgotCQkgKi8KLQkJaWYgKHBhaS0+YWlfc29ja3R5cGUgIT0gQU5ZICYmIHBhaS0+YWlfcHJvdG9jb2wgIT0gQU5ZKSB7Ci0JCQlmb3IgKGV4ID0gZXhwbG9yZTsgZXgtPmVfYWYgPj0gMDsgZXgrKykgewotCQkJCWlmIChwYWktPmFpX2ZhbWlseSAhPSBleC0+ZV9hZikKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKGV4LT5lX3NvY2t0eXBlID09IEFOWSkKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKGV4LT5lX3Byb3RvY29sID09IEFOWSkKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKHBhaS0+YWlfc29ja3R5cGUgPT0gZXgtPmVfc29ja3R5cGUKLQkJCQkgJiYgcGFpLT5haV9wcm90b2NvbCAhPSBleC0+ZV9wcm90b2NvbCkgewotCQkJCQlFUlIoRUFJX0JBREhJTlRTKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIGNoZWNrIGZvciBzcGVjaWFsIGNhc2VzLiAgKDEpIG51bWVyaWMgc2Vydm5hbWUgaXMgZGlzYWxsb3dlZCBpZgotCSAqIHNvY2t0eXBlL3Byb3RvY29sIGFyZSBsZWZ0IHVuc3BlY2lmaWVkLiAoMikgc2Vydm5hbWUgaXMgZGlzYWxsb3dlZAotCSAqIGZvciByYXcgYW5kIG90aGVyIGluZXR7LDZ9IHNvY2tldHMuCi0JICovCi0JaWYgKE1BVENIX0ZBTUlMWShwYWktPmFpX2ZhbWlseSwgUEZfSU5FVCwgMSkKLSNpZmRlZiBQRl9JTkVUNgotCSB8fCBNQVRDSF9GQU1JTFkocGFpLT5haV9mYW1pbHksIFBGX0lORVQ2LCAxKQotI2VuZGlmCi0JICAgICkgewotCQlhaTAgPSAqcGFpOwkvKiBiYWNrdXAgKnBhaSAqLwotCi0JCWlmIChwYWktPmFpX2ZhbWlseSA9PSBQRl9VTlNQRUMpIHsKLSNpZmRlZiBQRl9JTkVUNgotCQkJcGFpLT5haV9mYW1pbHkgPSBQRl9JTkVUNjsKLSNlbHNlCi0JCQlwYWktPmFpX2ZhbWlseSA9IFBGX0lORVQ7Ci0jZW5kaWYKLQkJfQotCQllcnJvciA9IGdldF9wb3J0bWF0Y2gocGFpLCBzZXJ2bmFtZSk7Ci0JCWlmIChlcnJvcikKLQkJCUVSUihlcnJvcik7Ci0KLQkJKnBhaSA9IGFpMDsKLQl9Ci0KLQlhaTAgPSAqcGFpOwotCi0JLyogTlVMTCBob3N0bmFtZSwgb3IgbnVtZXJpYyBob3N0bmFtZSAqLwotCWZvciAoZXggPSBleHBsb3JlOyBleC0+ZV9hZiA+PSAwOyBleCsrKSB7Ci0JCSpwYWkgPSBhaTA7Ci0KLQkJLyogUEZfVU5TUEVDIGVudHJpZXMgYXJlIHByZXBhcmVkIGZvciBETlMgcXVlcmllcyBvbmx5ICovCi0JCWlmIChleC0+ZV9hZiA9PSBQRl9VTlNQRUMpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIU1BVENIX0ZBTUlMWShwYWktPmFpX2ZhbWlseSwgZXgtPmVfYWYsIFdJTERfQUYoZXgpKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIU1BVENIKHBhaS0+YWlfc29ja3R5cGUsIGV4LT5lX3NvY2t0eXBlLCBXSUxEX1NPQ0tUWVBFKGV4KSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFNQVRDSChwYWktPmFpX3Byb3RvY29sLCBleC0+ZV9wcm90b2NvbCwgV0lMRF9QUk9UT0NPTChleCkpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHBhaS0+YWlfZmFtaWx5ID09IFBGX1VOU1BFQykKLQkJCXBhaS0+YWlfZmFtaWx5ID0gZXgtPmVfYWY7Ci0JCWlmIChwYWktPmFpX3NvY2t0eXBlID09IEFOWSAmJiBleC0+ZV9zb2NrdHlwZSAhPSBBTlkpCi0JCQlwYWktPmFpX3NvY2t0eXBlID0gZXgtPmVfc29ja3R5cGU7Ci0JCWlmIChwYWktPmFpX3Byb3RvY29sID09IEFOWSAmJiBleC0+ZV9wcm90b2NvbCAhPSBBTlkpCi0JCQlwYWktPmFpX3Byb3RvY29sID0gZXgtPmVfcHJvdG9jb2w7Ci0KLQkJaWYgKGhvc3RuYW1lID09IE5VTEwpCi0JCQllcnJvciA9IGV4cGxvcmVfbnVsbChwYWksIHNlcnZuYW1lLCAmY3VyLT5haV9uZXh0KTsKLQkJZWxzZQotCQkJZXJyb3IgPSBleHBsb3JlX251bWVyaWNfc2NvcGUocGFpLCBob3N0bmFtZSwgc2Vydm5hbWUsCi0JCQkgICAgJmN1ci0+YWlfbmV4dCk7Ci0KLQkJaWYgKGVycm9yKQotCQkJZ290byBmcmVlOwotCi0JCXdoaWxlIChjdXItPmFpX25leHQpCi0JCQljdXIgPSBjdXItPmFpX25leHQ7Ci0JfQotCi0JLyoKLQkgKiBYWFgKLQkgKiBJZiBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIEFGMSBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgRlFETgotCSAqIHJlcHJlc2VudGF0aW9uIG9mIEFGMiwgd2UgbmVlZCB0byB0aGluayBhZ2FpbiBhYm91dCB0aGUgY29kZSBiZWxvdy4KLQkgKi8KLQlpZiAoc2VudGluZWwuYWlfbmV4dCkKLQkJZ290byBnb29kOwotCi0JaWYgKGhvc3RuYW1lID09IE5VTEwpCi0JCUVSUihFQUlfTk9EQVRBKTsKLQlpZiAocGFpLT5haV9mbGFncyAmIEFJX05VTUVSSUNIT1NUKQotCQlFUlIoRUFJX05PTkFNRSk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogQkVHSU4gQU5EUk9JRCBDSEFOR0VTOyBwcm94eWluZyB0byB0aGUgY2FjaGUKLSAgICAgICAgICovCi0JaWYgKGNhY2hlX21vZGUgPT0gTlVMTCB8fCBzdHJjbXAoY2FjaGVfbW9kZSwgImxvY2FsIikgIT0gMCkgewotCQkvLyB3ZSdyZSBub3QgdGhlIHByb3h5IC0gcGFzcyB0aGUgcmVxdWVzdCB0byB0aGVtCi0JCXJldHVybiBhbmRyb2lkX2dldGFkZHJpbmZvX3Byb3h5KGhvc3RuYW1lLCBzZXJ2bmFtZSwgaGludHMsIHJlcywgaWZhY2UpOwotCX0KLQotCS8qCi0JICogaG9zdG5hbWUgYXMgYWxwaGFiZXRpY2FsIG5hbWUuCi0JICogd2Ugd291bGQgbGlrZSB0byBwcmVmZXIgQUZfSU5FVDYgdGhhbiBBRl9JTkVULCBzbyB3ZSdsbCBtYWtlIGEKLQkgKiBvdXRlciBsb29wIGJ5IEFGcy4KLQkgKi8KLQlmb3IgKGV4ID0gZXhwbG9yZTsgZXgtPmVfYWYgPj0gMDsgZXgrKykgewotCQkqcGFpID0gYWkwOwotCi0JCS8qIHJlcXVpcmUgZXhhY3QgbWF0Y2ggZm9yIGZhbWlseSBmaWVsZCAqLwotCQlpZiAocGFpLT5haV9mYW1pbHkgIT0gZXgtPmVfYWYpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIU1BVENIKHBhaS0+YWlfc29ja3R5cGUsIGV4LT5lX3NvY2t0eXBlLAotCQkJCVdJTERfU09DS1RZUEUoZXgpKSkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFNQVRDSChwYWktPmFpX3Byb3RvY29sLCBleC0+ZV9wcm90b2NvbCwKLQkJCQlXSUxEX1BST1RPQ09MKGV4KSkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHBhaS0+YWlfc29ja3R5cGUgPT0gQU5ZICYmIGV4LT5lX3NvY2t0eXBlICE9IEFOWSkKLQkJCXBhaS0+YWlfc29ja3R5cGUgPSBleC0+ZV9zb2NrdHlwZTsKLQkJaWYgKHBhaS0+YWlfcHJvdG9jb2wgPT0gQU5ZICYmIGV4LT5lX3Byb3RvY29sICE9IEFOWSkKLQkJCXBhaS0+YWlfcHJvdG9jb2wgPSBleC0+ZV9wcm90b2NvbDsKLQotCQllcnJvciA9IGV4cGxvcmVfZnFkbihwYWksIGhvc3RuYW1lLCBzZXJ2bmFtZSwKLQkJCSZjdXItPmFpX25leHQsIGlmYWNlLCBtYXJrKTsKLQotCQl3aGlsZSAoY3VyICYmIGN1ci0+YWlfbmV4dCkKLQkJCWN1ciA9IGN1ci0+YWlfbmV4dDsKLQl9Ci0KLQkvKiBYWFggKi8KLQlpZiAoc2VudGluZWwuYWlfbmV4dCkKLQkJZXJyb3IgPSAwOwotCi0JaWYgKGVycm9yKQotCQlnb3RvIGZyZWU7Ci0JaWYgKGVycm9yID09IDApIHsKLQkJaWYgKHNlbnRpbmVsLmFpX25leHQpIHsKLSBnb29kOgotCQkJKnJlcyA9IHNlbnRpbmVsLmFpX25leHQ7Ci0JCQlyZXR1cm4gU1VDQ0VTUzsKLQkJfSBlbHNlCi0JCQllcnJvciA9IEVBSV9GQUlMOwotCX0KLSBmcmVlOgotIGJhZDoKLQlpZiAoc2VudGluZWwuYWlfbmV4dCkKLQkJZnJlZWFkZHJpbmZvKHNlbnRpbmVsLmFpX25leHQpOwotCSpyZXMgPSBOVUxMOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoKLSAqIEZRRE4gaG9zdG5hbWUsIEROUyBsb29rdXAKLSAqLwotc3RhdGljIGludAotZXhwbG9yZV9mcWRuKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwgc3RydWN0IGFkZHJpbmZvICoqcmVzLCBjb25zdCBjaGFyICppZmFjZSwgaW50IG1hcmspCi17Ci0Jc3RydWN0IGFkZHJpbmZvICpyZXN1bHQ7Ci0Jc3RydWN0IGFkZHJpbmZvICpjdXI7Ci0JaW50IGVycm9yID0gMDsKLQlzdGF0aWMgY29uc3QgbnNfZHRhYiBkdGFiW10gPSB7Ci0JCU5TX0ZJTEVTX0NCKF9maWxlc19nZXRhZGRyaW5mbywgTlVMTCkKLQkJeyBOU1NSQ19ETlMsIF9kbnNfZ2V0YWRkcmluZm8sIE5VTEwgfSwJLyogZm9yY2UgLURIRVNJT0QgKi8KLQkJTlNfTklTX0NCKF95cF9nZXRhZGRyaW5mbywgTlVMTCkKLQkJeyAwLCAwLCAwIH0KLQl9OwotCi0JYXNzZXJ0KHBhaSAhPSBOVUxMKTsKLQkvKiBob3N0bmFtZSBtYXkgYmUgTlVMTCAqLwotCS8qIHNlcnZuYW1lIG1heSBiZSBOVUxMICovCi0JYXNzZXJ0KHJlcyAhPSBOVUxMKTsKLQotCXJlc3VsdCA9IE5VTEw7Ci0KLQkvKgotCSAqIGlmIHRoZSBzZXJ2bmFtZSBkb2VzIG5vdCBtYXRjaCBzb2NrdHlwZS9wcm90b2NvbCwgaWdub3JlIGl0LgotCSAqLwotCWlmIChnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpICE9IDApCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoIChuc2Rpc3BhdGNoKCZyZXN1bHQsIGR0YWIsIE5TREJfSE9TVFMsICJnZXRhZGRyaW5mbyIsCi0JCQlkZWZhdWx0X2Ruc19maWxlcywgaG9zdG5hbWUsIHBhaSwgaWZhY2UsIG1hcmspKSB7Ci0JY2FzZSBOU19UUllBR0FJTjoKLQkJZXJyb3IgPSBFQUlfQUdBSU47Ci0JCWdvdG8gZnJlZTsKLQljYXNlIE5TX1VOQVZBSUw6Ci0JCWVycm9yID0gRUFJX0ZBSUw7Ci0JCWdvdG8gZnJlZTsKLQljYXNlIE5TX05PVEZPVU5EOgotCQllcnJvciA9IEVBSV9OT0RBVEE7Ci0JCWdvdG8gZnJlZTsKLQljYXNlIE5TX1NVQ0NFU1M6Ci0JCWVycm9yID0gMDsKLQkJZm9yIChjdXIgPSByZXN1bHQ7IGN1cjsgY3VyID0gY3VyLT5haV9uZXh0KSB7Ci0JCQlHRVRfUE9SVChjdXIsIHNlcnZuYW1lKTsKLQkJCS8qIGNhbm9ubmFtZSBzaG91bGQgYmUgZmlsbGVkIGFscmVhZHkgKi8KLQkJfQotCQlicmVhazsKLQl9Ci0KLQkqcmVzID0gcmVzdWx0OwotCi0JcmV0dXJuIDA7Ci0KLWZyZWU6Ci0JaWYgKHJlc3VsdCkKLQkJZnJlZWFkZHJpbmZvKHJlc3VsdCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKgotICogaG9zdG5hbWUgPT0gTlVMTC4KLSAqIHBhc3NpdmUgc29ja2V0IC0+IGFueWFkZHIgKDAuMC4wLjAgb3IgOjopCi0gKiBub24tcGFzc2l2ZSBzb2NrZXQgLT4gbG9jYWxob3N0ICgxMjcuMC4wLjEgb3IgOjoxKQotICovCi1zdGF0aWMgaW50Ci1leHBsb3JlX251bGwoY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWksIGNvbnN0IGNoYXIgKnNlcnZuYW1lLAotICAgIHN0cnVjdCBhZGRyaW5mbyAqKnJlcykKLXsKLQlpbnQgczsKLQljb25zdCBzdHJ1Y3QgYWZkICphZmQ7Ci0Jc3RydWN0IGFkZHJpbmZvICpjdXI7Ci0Jc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsOwotCWludCBlcnJvcjsKLQotCWFzc2VydChwYWkgIT0gTlVMTCk7Ci0JLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KLQlhc3NlcnQocmVzICE9IE5VTEwpOwotCi0JKnJlcyA9IE5VTEw7Ci0Jc2VudGluZWwuYWlfbmV4dCA9IE5VTEw7Ci0JY3VyID0gJnNlbnRpbmVsOwotCi0JLyoKLQkgKiBmaWx0ZXIgb3V0IEFGcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwKLQkgKiBYWFggZXJybm8/Ci0JICovCi0JcyA9IHNvY2tldChwYWktPmFpX2ZhbWlseSwgU09DS19ER1JBTSwgMCk7Ci0JaWYgKHMgPCAwKSB7Ci0JCWlmIChlcnJubyAhPSBFTUZJTEUpCi0JCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJY2xvc2Uocyk7Ci0KLQkvKgotCSAqIGlmIHRoZSBzZXJ2bmFtZSBkb2VzIG5vdCBtYXRjaCBzb2NrdHlwZS9wcm90b2NvbCwgaWdub3JlIGl0LgotCSAqLwotCWlmIChnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpICE9IDApCi0JCXJldHVybiAwOwotCi0JYWZkID0gZmluZF9hZmQocGFpLT5haV9mYW1pbHkpOwotCWlmIChhZmQgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocGFpLT5haV9mbGFncyAmIEFJX1BBU1NJVkUpIHsKLQkJR0VUX0FJKGN1ci0+YWlfbmV4dCwgYWZkLCBhZmQtPmFfYWRkcmFueSk7Ci0JCS8qIHh4eCBtZWFuaW5nbGVzcz8KLQkJICogR0VUX0NBTk9OTkFNRShjdXItPmFpX25leHQsICJhbnlhZGRyIik7Ci0JCSAqLwotCQlHRVRfUE9SVChjdXItPmFpX25leHQsIHNlcnZuYW1lKTsKLQl9IGVsc2UgewotCQlHRVRfQUkoY3VyLT5haV9uZXh0LCBhZmQsIGFmZC0+YV9sb29wYmFjayk7Ci0JCS8qIHh4eCBtZWFuaW5nbGVzcz8KLQkJICogR0VUX0NBTk9OTkFNRShjdXItPmFpX25leHQsICJsb2NhbGhvc3QiKTsKLQkJICovCi0JCUdFVF9QT1JUKGN1ci0+YWlfbmV4dCwgc2Vydm5hbWUpOwotCX0KLQljdXIgPSBjdXItPmFpX25leHQ7Ci0KLQkqcmVzID0gc2VudGluZWwuYWlfbmV4dDsKLQlyZXR1cm4gMDsKLQotZnJlZToKLQlpZiAoc2VudGluZWwuYWlfbmV4dCkKLQkJZnJlZWFkZHJpbmZvKHNlbnRpbmVsLmFpX25leHQpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoKLSAqIG51bWVyaWMgaG9zdG5hbWUKLSAqLwotc3RhdGljIGludAotZXhwbG9yZV9udW1lcmljKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBjaGFyICpob3N0bmFtZSwKLSAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwgc3RydWN0IGFkZHJpbmZvICoqcmVzLCBjb25zdCBjaGFyICpjYW5vbm5hbWUpCi17Ci0JY29uc3Qgc3RydWN0IGFmZCAqYWZkOwotCXN0cnVjdCBhZGRyaW5mbyAqY3VyOwotCXN0cnVjdCBhZGRyaW5mbyBzZW50aW5lbDsKLQlpbnQgZXJyb3I7Ci0JY2hhciBwdG9uW1BUT05fTUFYXTsKLQotCWFzc2VydChwYWkgIT0gTlVMTCk7Ci0JLyogaG9zdG5hbWUgbWF5IGJlIE5VTEwgKi8KLQkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLwotCWFzc2VydChyZXMgIT0gTlVMTCk7Ci0KLQkqcmVzID0gTlVMTDsKLQlzZW50aW5lbC5haV9uZXh0ID0gTlVMTDsKLQljdXIgPSAmc2VudGluZWw7Ci0KLQkvKgotCSAqIGlmIHRoZSBzZXJ2bmFtZSBkb2VzIG5vdCBtYXRjaCBzb2NrdHlwZS9wcm90b2NvbCwgaWdub3JlIGl0LgotCSAqLwotCWlmIChnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpICE9IDApCi0JCXJldHVybiAwOwotCi0JYWZkID0gZmluZF9hZmQocGFpLT5haV9mYW1pbHkpOwotCWlmIChhZmQgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKGFmZC0+YV9hZikgewotI2lmIDAgLypYL09wZW4gc3BlYyovCi0JY2FzZSBBRl9JTkVUOgotCQlpZiAoaW5ldF9hdG9uKGhvc3RuYW1lLCAoc3RydWN0IGluX2FkZHIgKilwdG9uKSA9PSAxKSB7Ci0JCQlpZiAocGFpLT5haV9mYW1pbHkgPT0gYWZkLT5hX2FmIHx8Ci0JCQkgICAgcGFpLT5haV9mYW1pbHkgPT0gUEZfVU5TUEVDIC8qPyovKSB7Ci0JCQkJR0VUX0FJKGN1ci0+YWlfbmV4dCwgYWZkLCBwdG9uKTsKLQkJCQlHRVRfUE9SVChjdXItPmFpX25leHQsIHNlcnZuYW1lKTsKLQkJCQlpZiAoKHBhaS0+YWlfZmxhZ3MgJiBBSV9DQU5PTk5BTUUpKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIFNldCB0aGUgbnVtZXJpYyBhZGRyZXNzIGl0c2VsZiBhcwotCQkJCQkgKiB0aGUgY2Fub25pY2FsIG5hbWUsIGJhc2VkIG9uIGEKLQkJCQkJICogY2xhcmlmaWNhdGlvbiBpbiByZmMyNTUzYmlzLTAzLgotCQkJCQkgKi8KLQkJCQkJR0VUX0NBTk9OTkFNRShjdXItPmFpX25leHQsIGNhbm9ubmFtZSk7Ci0JCQkJfQotCQkJCXdoaWxlIChjdXIgJiYgY3VyLT5haV9uZXh0KQotCQkJCQljdXIgPSBjdXItPmFpX25leHQ7Ci0JCQl9IGVsc2UKLQkJCQlFUlIoRUFJX0ZBTUlMWSk7CS8qeHh4Ki8KLQkJfQotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCWlmIChpbmV0X3B0b24oYWZkLT5hX2FmLCBob3N0bmFtZSwgcHRvbikgPT0gMSkgewotCQkJaWYgKHBhaS0+YWlfZmFtaWx5ID09IGFmZC0+YV9hZiB8fAotCQkJICAgIHBhaS0+YWlfZmFtaWx5ID09IFBGX1VOU1BFQyAvKj8qLykgewotCQkJCUdFVF9BSShjdXItPmFpX25leHQsIGFmZCwgcHRvbik7Ci0JCQkJR0VUX1BPUlQoY3VyLT5haV9uZXh0LCBzZXJ2bmFtZSk7Ci0JCQkJaWYgKChwYWktPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKSkgewotCQkJCQkvKgotCQkJCQkgKiBTZXQgdGhlIG51bWVyaWMgYWRkcmVzcyBpdHNlbGYgYXMKLQkJCQkJICogdGhlIGNhbm9uaWNhbCBuYW1lLCBiYXNlZCBvbiBhCi0JCQkJCSAqIGNsYXJpZmljYXRpb24gaW4gcmZjMjU1M2Jpcy0wMy4KLQkJCQkJICovCi0JCQkJCUdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCBjYW5vbm5hbWUpOwotCQkJCX0KLQkJCQl3aGlsZSAoY3VyLT5haV9uZXh0KQotCQkJCQljdXIgPSBjdXItPmFpX25leHQ7Ci0JCQl9IGVsc2UKLQkJCQlFUlIoRUFJX0ZBTUlMWSk7CS8qeHh4Ki8KLQkJfQotCQlicmVhazsKLQl9Ci0KLQkqcmVzID0gc2VudGluZWwuYWlfbmV4dDsKLQlyZXR1cm4gMDsKLQotZnJlZToKLWJhZDoKLQlpZiAoc2VudGluZWwuYWlfbmV4dCkKLQkJZnJlZWFkZHJpbmZvKHNlbnRpbmVsLmFpX25leHQpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoKLSAqIG51bWVyaWMgaG9zdG5hbWUgd2l0aCBzY29wZQotICovCi1zdGF0aWMgaW50Ci1leHBsb3JlX251bWVyaWNfc2NvcGUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWksIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAotICAgIGNvbnN0IGNoYXIgKnNlcnZuYW1lLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCi17Ci0jaWYgIWRlZmluZWQoU0NPUEVfREVMSU1JVEVSKSB8fCAhZGVmaW5lZChJTkVUNikKLQlyZXR1cm4gZXhwbG9yZV9udW1lcmljKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKLSNlbHNlCi0JY29uc3Qgc3RydWN0IGFmZCAqYWZkOwotCXN0cnVjdCBhZGRyaW5mbyAqY3VyOwotCWludCBlcnJvcjsKLQljaGFyICpjcCwgKmhvc3RuYW1lMiA9IE5VTEwsICpzY29wZSwgKmFkZHI7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCWFzc2VydChwYWkgIT0gTlVMTCk7Ci0JLyogaG9zdG5hbWUgbWF5IGJlIE5VTEwgKi8KLQkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLwotCWFzc2VydChyZXMgIT0gTlVMTCk7Ci0KLQkvKgotCSAqIGlmIHRoZSBzZXJ2bmFtZSBkb2VzIG5vdCBtYXRjaCBzb2NrdHlwZS9wcm90b2NvbCwgaWdub3JlIGl0LgotCSAqLwotCWlmIChnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpICE9IDApCi0JCXJldHVybiAwOwotCi0JYWZkID0gZmluZF9hZmQocGFpLT5haV9mYW1pbHkpOwotCWlmIChhZmQgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWFmZC0+YV9zY29wZWQpCi0JCXJldHVybiBleHBsb3JlX251bWVyaWMocGFpLCBob3N0bmFtZSwgc2Vydm5hbWUsIHJlcywgaG9zdG5hbWUpOwotCi0JY3AgPSBzdHJjaHIoaG9zdG5hbWUsIFNDT1BFX0RFTElNSVRFUik7Ci0JaWYgKGNwID09IE5VTEwpCi0JCXJldHVybiBleHBsb3JlX251bWVyaWMocGFpLCBob3N0bmFtZSwgc2Vydm5hbWUsIHJlcywgaG9zdG5hbWUpOwotCi0JLyoKLQkgKiBIYW5kbGUgc3BlY2lhbCBjYXNlIG9mIDxzY29wZWRfYWRkcmVzcz48ZGVsaW1pdGVyPjxzY29wZSBpZD4KLQkgKi8KLQlob3N0bmFtZTIgPSBzdHJkdXAoaG9zdG5hbWUpOwotCWlmIChob3N0bmFtZTIgPT0gTlVMTCkKLQkJcmV0dXJuIEVBSV9NRU1PUlk7Ci0JLyogdGVybWluYXRlIGF0IHRoZSBkZWxpbWl0ZXIgKi8KLQlob3N0bmFtZTJbY3AgLSBob3N0bmFtZV0gPSAnXDAnOwotCWFkZHIgPSBob3N0bmFtZTI7Ci0Jc2NvcGUgPSBjcCArIDE7Ci0KLQllcnJvciA9IGV4cGxvcmVfbnVtZXJpYyhwYWksIGFkZHIsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKLQlpZiAoZXJyb3IgPT0gMCkgewotCQl1X2ludDMyX3Qgc2NvcGVpZDsKLQotCQlmb3IgKGN1ciA9ICpyZXM7IGN1cjsgY3VyID0gY3VyLT5haV9uZXh0KSB7Ci0JCQlpZiAoY3VyLT5haV9mYW1pbHkgIT0gQUZfSU5FVDYpCi0JCQkJY29udGludWU7Ci0JCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWN1ci0+YWlfYWRkcjsKLQkJCWlmIChpcDZfc3RyMnNjb3BlaWQoc2NvcGUsIHNpbjYsICZzY29wZWlkKSA9PSAtMSkgewotCQkJCWZyZWUoaG9zdG5hbWUyKTsKLQkJCQlyZXR1cm4oRUFJX05PREFUQSk7IC8qIFhYWDogaXMgcmV0dXJuIE9LPyAqLwotCQkJfQotCQkJc2luNi0+c2luNl9zY29wZV9pZCA9IHNjb3BlaWQ7Ci0JCX0KLQl9Ci0KLQlmcmVlKGhvc3RuYW1lMik7Ci0KLQlyZXR1cm4gZXJyb3I7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGludAotZ2V0X2Nhbm9ubmFtZShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgc3RydWN0IGFkZHJpbmZvICphaSwgY29uc3QgY2hhciAqc3RyKQotewotCi0JYXNzZXJ0KHBhaSAhPSBOVUxMKTsKLQlhc3NlcnQoYWkgIT0gTlVMTCk7Ci0JYXNzZXJ0KHN0ciAhPSBOVUxMKTsKLQotCWlmICgocGFpLT5haV9mbGFncyAmIEFJX0NBTk9OTkFNRSkgIT0gMCkgewotCQlhaS0+YWlfY2Fub25uYW1lID0gc3RyZHVwKHN0cik7Ci0JCWlmIChhaS0+YWlfY2Fub25uYW1lID09IE5VTEwpCi0JCQlyZXR1cm4gRUFJX01FTU9SWTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKgotZ2V0X2FpKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBzdHJ1Y3QgYWZkICphZmQsIGNvbnN0IGNoYXIgKmFkZHIpCi17Ci0JY2hhciAqcDsKLQlzdHJ1Y3QgYWRkcmluZm8gKmFpOwotCi0JYXNzZXJ0KHBhaSAhPSBOVUxMKTsKLQlhc3NlcnQoYWZkICE9IE5VTEwpOwotCWFzc2VydChhZGRyICE9IE5VTEwpOwotCi0JYWkgPSAoc3RydWN0IGFkZHJpbmZvICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRkcmluZm8pCi0JCSsgKGFmZC0+YV9zb2NrbGVuKSk7Ci0JaWYgKGFpID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JbWVtY3B5KGFpLCBwYWksIHNpemVvZihzdHJ1Y3QgYWRkcmluZm8pKTsKLQlhaS0+YWlfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKShhaSArIDEpOwotCW1lbXNldChhaS0+YWlfYWRkciwgMCwgKHNpemVfdClhZmQtPmFfc29ja2xlbik7Ci0KLSNpZmRlZiBIQVZFX1NBX0xFTgotCWFpLT5haV9hZGRyLT5zYV9sZW4gPSBhZmQtPmFfc29ja2xlbjsKLSNlbmRpZgotCi0JYWktPmFpX2FkZHJsZW4gPSBhZmQtPmFfc29ja2xlbjsKLSNpZiBkZWZpbmVkIChfX2FscGhhX18pIHx8IChkZWZpbmVkKF9faTM4Nl9fKSAmJiBkZWZpbmVkKF9MUDY0KSkgfHwgZGVmaW5lZChfX3NwYXJjNjRfXykKLQlhaS0+X19haV9wYWQwID0gMDsKLSNlbmRpZgotCWFpLT5haV9hZGRyLT5zYV9mYW1pbHkgPSBhaS0+YWlfZmFtaWx5ID0gYWZkLT5hX2FmOwotCXAgPSAoY2hhciAqKSh2b2lkICopKGFpLT5haV9hZGRyKTsKLQltZW1jcHkocCArIGFmZC0+YV9vZmYsIGFkZHIsIChzaXplX3QpYWZkLT5hX2FkZHJsZW4pOwotCXJldHVybiBhaTsKLX0KLQotc3RhdGljIGludAotZ2V0X3BvcnRtYXRjaChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmFpLCBjb25zdCBjaGFyICpzZXJ2bmFtZSkKLXsKLQotCWFzc2VydChhaSAhPSBOVUxMKTsKLQkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLwotCi0JcmV0dXJuIGdldF9wb3J0KGFpLCBzZXJ2bmFtZSwgMSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWdldF9wb3J0KGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqYWksIGNvbnN0IGNoYXIgKnNlcnZuYW1lLCBpbnQgbWF0Y2hvbmx5KQotewotCWNvbnN0IGNoYXIgKnByb3RvOwotCXN0cnVjdCBzZXJ2ZW50ICpzcDsKLQlpbnQgcG9ydDsKLQlpbnQgYWxsb3dudW1lcmljOwotCi0JYXNzZXJ0KGFpICE9IE5VTEwpOwotCS8qIHNlcnZuYW1lIG1heSBiZSBOVUxMICovCi0KLQlpZiAoc2Vydm5hbWUgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0Jc3dpdGNoIChhaS0+YWlfZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOgotI2lmZGVmIEFGX0lORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLSNlbmRpZgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzd2l0Y2ggKGFpLT5haV9zb2NrdHlwZSkgewotCWNhc2UgU09DS19SQVc6Ci0JCXJldHVybiBFQUlfU0VSVklDRTsKLQljYXNlIFNPQ0tfREdSQU06Ci0JY2FzZSBTT0NLX1NUUkVBTToKLQkJYWxsb3dudW1lcmljID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBBTlk6Ci0jaWYgMSAgLyogQU5EUk9JRC1TUEVDSUZJQyBDSEFOR0UgVE8gTUFUQ0ggR0xJQkMgKi8KLQkJYWxsb3dudW1lcmljID0gMTsKLSNlbHNlCi0JCWFsbG93bnVtZXJpYyA9IDA7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIEVBSV9TT0NLVFlQRTsKLQl9Ci0KLQlwb3J0ID0gc3RyMm51bWJlcihzZXJ2bmFtZSk7Ci0JaWYgKHBvcnQgPj0gMCkgewotCQlpZiAoIWFsbG93bnVtZXJpYykKLQkJCXJldHVybiBFQUlfU0VSVklDRTsKLQkJaWYgKHBvcnQgPCAwIHx8IHBvcnQgPiA2NTUzNSkKLQkJCXJldHVybiBFQUlfU0VSVklDRTsKLQkJcG9ydCA9IGh0b25zKHBvcnQpOwotCX0gZWxzZSB7Ci0JCWlmIChhaS0+YWlfZmxhZ3MgJiBBSV9OVU1FUklDU0VSVikKLQkJCXJldHVybiBFQUlfTk9OQU1FOwotCi0JCXN3aXRjaCAoYWktPmFpX3NvY2t0eXBlKSB7Ci0JCWNhc2UgU09DS19ER1JBTToKLQkJCXByb3RvID0gInVkcCI7Ci0JCQlicmVhazsKLQkJY2FzZSBTT0NLX1NUUkVBTToKLQkJCXByb3RvID0gInRjcCI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByb3RvID0gTlVMTDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKChzcCA9IGdldHNlcnZieW5hbWUoc2Vydm5hbWUsIHByb3RvKSkgPT0gTlVMTCkKLQkJCXJldHVybiBFQUlfU0VSVklDRTsKLQkJcG9ydCA9IHNwLT5zX3BvcnQ7Ci0JfQotCi0JaWYgKCFtYXRjaG9ubHkpIHsKLQkJc3dpdGNoIChhaS0+YWlfZmFtaWx5KSB7Ci0JCWNhc2UgQUZfSU5FVDoKLQkJCSgoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKikKLQkJCSAgICBhaS0+YWlfYWRkciktPnNpbl9wb3J0ID0gcG9ydDsKLQkJCWJyZWFrOwotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKQotCQkJICAgIGFpLT5haV9hZGRyKS0+c2luNl9wb3J0ID0gcG9ydDsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhZmQgKgotZmluZF9hZmQoaW50IGFmKQotewotCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKLQotCWlmIChhZiA9PSBQRl9VTlNQRUMpCi0JCXJldHVybiBOVUxMOwotCWZvciAoYWZkID0gYWZkbDsgYWZkLT5hX2FmOyBhZmQrKykgewotCQlpZiAoYWZkLT5hX2FmID09IGFmKQotCQkJcmV0dXJuIGFmZDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLSNpZmRlZiBJTkVUNgotLyogY29udmVydCBhIHN0cmluZyB0byBhIHNjb3BlIGlkZW50aWZpZXIuIFhYWDogSVB2NiBzcGVjaWZpYyAqLwotc3RhdGljIGludAotaXA2X3N0cjJzY29wZWlkKGNoYXIgKnNjb3BlLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42LCB1X2ludDMyX3QgKnNjb3BlaWQpCi17Ci0JdV9sb25nIGxzY29wZWlkOwotCXN0cnVjdCBpbjZfYWRkciAqYTY7Ci0JY2hhciAqZXA7Ci0KLQlhc3NlcnQoc2NvcGUgIT0gTlVMTCk7Ci0JYXNzZXJ0KHNpbjYgIT0gTlVMTCk7Ci0JYXNzZXJ0KHNjb3BlaWQgIT0gTlVMTCk7Ci0KLQlhNiA9ICZzaW42LT5zaW42X2FkZHI7Ci0KLQkvKiBlbXB0eSBzY29wZWlkIHBvcnRpb24gaXMgaW52YWxpZCAqLwotCWlmICgqc2NvcGUgPT0gJ1wwJykKLQkJcmV0dXJuIC0xOwotCi0JaWYgKElONl9JU19BRERSX0xJTktMT0NBTChhNikgfHwgSU42X0lTX0FERFJfTUNfTElOS0xPQ0FMKGE2KSkgewotCQkvKgotCQkgKiBXZSBjdXJyZW50bHkgYXNzdW1lIGEgb25lLXRvLW9uZSBtYXBwaW5nIGJldHdlZW4gbGlua3MKLQkJICogYW5kIGludGVyZmFjZXMsIHNvIHdlIHNpbXBseSB1c2UgaW50ZXJmYWNlIGluZGljZXMgZm9yCi0JCSAqIGxpa2UtbG9jYWwgc2NvcGVzLgotCQkgKi8KLQkJKnNjb3BlaWQgPSBpZl9uYW1ldG9pbmRleChzY29wZSk7Ci0JCWlmICgqc2NvcGVpZCA9PSAwKQotCQkJZ290byB0cnludW1lcmljOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBzdGlsbCB1bmNsZWFyIGFib3V0IGxpdGVyYWwsIGFsbG93IG51bWVyaWMgb25seSAtIHBsYWNlaG9sZGVyICovCi0JaWYgKElONl9JU19BRERSX1NJVEVMT0NBTChhNikgfHwgSU42X0lTX0FERFJfTUNfU0lURUxPQ0FMKGE2KSkKLQkJZ290byB0cnludW1lcmljOwotCWlmIChJTjZfSVNfQUREUl9NQ19PUkdMT0NBTChhNikpCi0JCWdvdG8gdHJ5bnVtZXJpYzsKLQllbHNlCi0JCWdvdG8gdHJ5bnVtZXJpYzsJLyogZ2xvYmFsICovCi0KLQkvKiB0cnkgdG8gY29udmVydCB0byBhIG51bWVyaWMgaWQgYXMgYSBsYXN0IHJlc29ydCAqLwotICB0cnludW1lcmljOgotCWVycm5vID0gMDsKLQlsc2NvcGVpZCA9IHN0cnRvdWwoc2NvcGUsICZlcCwgMTApOwotCSpzY29wZWlkID0gKHVfaW50MzJfdCkobHNjb3BlaWQgJiAweGZmZmZmZmZmVUwpOwotCWlmIChlcnJubyA9PSAwICYmIGVwICYmICplcCA9PSAnXDAnICYmICpzY29wZWlkID09IGxzY29wZWlkKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiAtMTsKLX0KLSNlbmRpZgotCi0vKiBjb2RlIGR1cGxpY2F0ZSB3aXRoIGdldGhuYW1hZGRyLmMgKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgQXNrZWRGb3JHb3RbXSA9Ci0JImdldGhvc3RieSouZ2V0YW5zd2VyOiBhc2tlZCBmb3IgXCIlc1wiLCBnb3QgXCIlc1wiIjsKLQotI2RlZmluZSBCT1VOREVEX0lOQ1IoeCkgXAotCWRvIHsgXAotCQlCT1VORFNfQ0hFQ0soY3AsICh4KSk7IFwKLQkJY3AgKz0gKHgpOyBcCi0JfSB3aGlsZSAoLypDT05TVENPTkQqLzApCi0KLSNkZWZpbmUgQk9VTkRTX0NIRUNLKHB0ciwgY291bnQpIFwKLQlkbyB7IFwKLQkJaWYgKGVvbSAtIChwdHIpIDwgKGNvdW50KSkgeyBoX2Vycm5vID0gTk9fUkVDT1ZFUlk7IHJldHVybiBOVUxMOyB9IFwKLQl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotc3RhdGljIHN0cnVjdCBhZGRyaW5mbyAqCi1nZXRhbnN3ZXIoY29uc3QgcXVlcnlidWYgKmFuc3dlciwgaW50IGFuc2xlbiwgY29uc3QgY2hhciAqcW5hbWUsIGludCBxdHlwZSwKLSAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSkKLXsKLQlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWwsICpjdXI7Ci0Jc3RydWN0IGFkZHJpbmZvIGFpOwotCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKLQljaGFyICpjYW5vbm5hbWU7Ci0JY29uc3QgSEVBREVSICpocDsKLQljb25zdCB1X2NoYXIgKmNwOwotCWludCBuOwotCWNvbnN0IHVfY2hhciAqZW9tOwotCWNoYXIgKmJwLCAqZXA7Ci0JaW50IHR5cGUsIGNsYXNzLCBhbmNvdW50LCBxZGNvdW50OwotCWludCBoYXZlYW5zd2VyLCBoYWRfZXJyb3I7Ci0JY2hhciB0YnVmW01BWEROQU1FXTsKLQlpbnQgKCpuYW1lX29rKSAoY29uc3QgY2hhciAqKTsKLQljaGFyIGhvc3RidWZbOCoxMDI0XTsKLQotCWFzc2VydChhbnN3ZXIgIT0gTlVMTCk7Ci0JYXNzZXJ0KHFuYW1lICE9IE5VTEwpOwotCWFzc2VydChwYWkgIT0gTlVMTCk7Ci0KLQltZW1zZXQoJnNlbnRpbmVsLCAwLCBzaXplb2Yoc2VudGluZWwpKTsKLQljdXIgPSAmc2VudGluZWw7Ci0KLQljYW5vbm5hbWUgPSBOVUxMOwotCWVvbSA9IGFuc3dlci0+YnVmICsgYW5zbGVuOwotCXN3aXRjaCAocXR5cGUpIHsKLQljYXNlIFRfQToKLQljYXNlIFRfQUFBQToKLQljYXNlIFRfQU5ZOgkvKnVzZSBUX0FOWSBvbmx5IGZvciBUX0EvVF9BQUFBIGxvb2t1cCovCi0JCW5hbWVfb2sgPSByZXNfaG5vazsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIE5VTEw7CS8qIFhYWCBzaG91bGQgYmUgYWJvcnQoKTsgKi8KLQl9Ci0JLyoKLQkgKiBmaW5kIGZpcnN0IHNhdGlzZmFjdG9yeSBhbnN3ZXIKLQkgKi8KLQlocCA9ICZhbnN3ZXItPmhkcjsKLQlhbmNvdW50ID0gbnRvaHMoaHAtPmFuY291bnQpOwotCXFkY291bnQgPSBudG9ocyhocC0+cWRjb3VudCk7Ci0JYnAgPSBob3N0YnVmOwotCWVwID0gaG9zdGJ1ZiArIHNpemVvZiBob3N0YnVmOwotCWNwID0gYW5zd2VyLT5idWY7Ci0JQk9VTkRFRF9JTkNSKEhGSVhFRFNaKTsKLQlpZiAocWRjb3VudCAhPSAxKSB7Ci0JCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgYnAsIGVwIC0gYnApOwotCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKGJwKSkgewotCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCUJPVU5ERURfSU5DUihuICsgUUZJWEVEU1opOwotCWlmIChxdHlwZSA9PSBUX0EgfHwgcXR5cGUgPT0gVF9BQUFBIHx8IHF0eXBlID09IFRfQU5ZKSB7Ci0JCS8qIHJlc19zZW5kKCkgaGFzIGFscmVhZHkgdmVyaWZpZWQgdGhhdCB0aGUgcXVlcnkgbmFtZSBpcyB0aGUKLQkJICogc2FtZSBhcyB0aGUgb25lIHdlIHNlbnQ7IHRoaXMganVzdCBnZXRzIHRoZSBleHBhbmRlZCBuYW1lCi0JCSAqIChpLmUuLCB3aXRoIHRoZSBzdWNjZWVkaW5nIHNlYXJjaC1kb21haW4gdGFja2VkIG9uKS4KLQkJICovCi0JCW4gPSBzdHJsZW4oYnApICsgMTsJCS8qIGZvciB0aGUgXDAgKi8KLQkJaWYgKG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKLQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJY2Fub25uYW1lID0gYnA7Ci0JCWJwICs9IG47Ci0JCS8qIFRoZSBxbmFtZSBjYW4gYmUgYWJicmV2aWF0ZWQsIGJ1dCBoX25hbWUgaXMgbm93IGFic29sdXRlLiAqLwotCQlxbmFtZSA9IGNhbm9ubmFtZTsKLQl9Ci0JaGF2ZWFuc3dlciA9IDA7Ci0JaGFkX2Vycm9yID0gMDsKLQl3aGlsZSAoYW5jb3VudC0tID4gMCAmJiBjcCA8IGVvbSAmJiAhaGFkX2Vycm9yKSB7Ci0JCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKLQkJaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykoYnApKSB7Ci0JCQloYWRfZXJyb3IrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWNwICs9IG47CQkJLyogbmFtZSAqLwotCQlCT1VORFNfQ0hFQ0soY3AsIDMgKiBJTlQxNlNaICsgSU5UMzJTWik7Ci0JCXR5cGUgPSBfZ2V0c2hvcnQoY3ApOwotIAkJY3AgKz0gSU5UMTZTWjsJCQkvKiB0eXBlICovCi0JCWNsYXNzID0gX2dldHNob3J0KGNwKTsKLSAJCWNwICs9IElOVDE2U1ogKyBJTlQzMlNaOwkvKiBjbGFzcywgVFRMICovCi0JCW4gPSBfZ2V0c2hvcnQoY3ApOwotCQljcCArPSBJTlQxNlNaOwkJCS8qIGxlbiAqLwotCQlCT1VORFNfQ0hFQ0soY3AsIG4pOwotCQlpZiAoY2xhc3MgIT0gQ19JTikgewotCQkJLyogWFhYIC0gZGVidWc/IHN5c2xvZz8gKi8KLQkJCWNwICs9IG47Ci0JCQljb250aW51ZTsJCS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KLQkJfQotCQlpZiAoKHF0eXBlID09IFRfQSB8fCBxdHlwZSA9PSBUX0FBQUEgfHwgcXR5cGUgPT0gVF9BTlkpICYmCi0JCSAgICB0eXBlID09IFRfQ05BTUUpIHsKLQkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIHRidWYsIHNpemVvZiB0YnVmKTsKLQkJCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKHRidWYpKSB7Ci0JCQkJaGFkX2Vycm9yKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQljcCArPSBuOwotCQkJLyogR2V0IGNhbm9uaWNhbCBuYW1lLiAqLwotCQkJbiA9IHN0cmxlbih0YnVmKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KLQkJCWlmIChuID4gZXAgLSBicCB8fCBuID49IE1BWEhPU1ROQU1FTEVOKSB7Ci0JCQkJaGFkX2Vycm9yKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlzdHJsY3B5KGJwLCB0YnVmLCAoc2l6ZV90KShlcCAtIGJwKSk7Ci0JCQljYW5vbm5hbWUgPSBicDsKLQkJCWJwICs9IG47Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAocXR5cGUgPT0gVF9BTlkpIHsKLQkJCWlmICghKHR5cGUgPT0gVF9BIHx8IHR5cGUgPT0gVF9BQUFBKSkgewotCQkJCWNwICs9IG47Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAodHlwZSAhPSBxdHlwZSkgewotCQkJaWYgKHR5cGUgIT0gVF9LRVkgJiYgdHlwZSAhPSBUX1NJRykKLQkJCQlzeXNsb2coTE9HX05PVElDRXxMT0dfQVVUSCwKLQkgICAgICAgImdldGhvc3RieSouZ2V0YW5zd2VyOiBhc2tlZCBmb3IgXCIlcyAlcyAlc1wiLCBnb3QgdHlwZSBcIiVzXCIiLAotCQkJCSAgICAgICBxbmFtZSwgcF9jbGFzcyhDX0lOKSwgcF90eXBlKHF0eXBlKSwKLQkJCQkgICAgICAgcF90eXBlKHR5cGUpKTsKLQkJCWNwICs9IG47Ci0JCQljb250aW51ZTsJCS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KLQkJfQotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBUX0E6Ci0JCWNhc2UgVF9BQUFBOgotCQkJaWYgKHN0cmNhc2VjbXAoY2Fub25uYW1lLCBicCkgIT0gMCkgewotCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAotCQkJCSAgICAgICBBc2tlZEZvckdvdCwgY2Fub25uYW1lLCBicCk7Ci0JCQkJY3AgKz0gbjsKLQkJCQljb250aW51ZTsJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLwotCQkJfQotCQkJaWYgKHR5cGUgPT0gVF9BICYmIG4gIT0gSU5BRERSU1opIHsKLQkJCQljcCArPSBuOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKHR5cGUgPT0gVF9BQUFBICYmIG4gIT0gSU42QUREUlNaKSB7Ci0JCQkJY3AgKz0gbjsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICh0eXBlID09IFRfQUFBQSkgewotCQkJCXN0cnVjdCBpbjZfYWRkciBpbjY7Ci0JCQkJbWVtY3B5KCZpbjYsIGNwLCBJTjZBRERSU1opOwotCQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmaW42KSkgewotCQkJCQljcCArPSBuOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoIWhhdmVhbnN3ZXIpIHsKLQkJCQlpbnQgbm47Ci0KLQkJCQljYW5vbm5hbWUgPSBicDsKLQkJCQlubiA9IHN0cmxlbihicCkgKyAxOwkvKiBmb3IgdGhlIFwwICovCi0JCQkJYnAgKz0gbm47Ci0JCQl9Ci0KLQkJCS8qIGRvbid0IG92ZXJ3cml0ZSBwYWkgKi8KLQkJCWFpID0gKnBhaTsKLQkJCWFpLmFpX2ZhbWlseSA9ICh0eXBlID09IFRfQSkgPyBBRl9JTkVUIDogQUZfSU5FVDY7Ci0JCQlhZmQgPSBmaW5kX2FmZChhaS5haV9mYW1pbHkpOwotCQkJaWYgKGFmZCA9PSBOVUxMKSB7Ci0JCQkJY3AgKz0gbjsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWN1ci0+YWlfbmV4dCA9IGdldF9haSgmYWksIGFmZCwgKGNvbnN0IGNoYXIgKiljcCk7Ci0JCQlpZiAoY3VyLT5haV9uZXh0ID09IE5VTEwpCi0JCQkJaGFkX2Vycm9yKys7Ci0JCQl3aGlsZSAoY3VyICYmIGN1ci0+YWlfbmV4dCkKLQkJCQljdXIgPSBjdXItPmFpX25leHQ7Ci0JCQljcCArPSBuOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlhYm9ydCgpOwotCQl9Ci0JCWlmICghaGFkX2Vycm9yKQotCQkJaGF2ZWFuc3dlcisrOwotCX0KLQlpZiAoaGF2ZWFuc3dlcikgewotCQlpZiAoIWNhbm9ubmFtZSkKLQkJCSh2b2lkKWdldF9jYW5vbm5hbWUocGFpLCBzZW50aW5lbC5haV9uZXh0LCBxbmFtZSk7Ci0JCWVsc2UKLQkJCSh2b2lkKWdldF9jYW5vbm5hbWUocGFpLCBzZW50aW5lbC5haV9uZXh0LCBjYW5vbm5hbWUpOwotCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKLQkJcmV0dXJuIHNlbnRpbmVsLmFpX25leHQ7Ci0JfQotCi0JaF9lcnJubyA9IE5PX1JFQ09WRVJZOwotCXJldHVybiBOVUxMOwotfQotCi1zdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtIHsKLQlzdHJ1Y3QgYWRkcmluZm8gKmFpOwotCWludCBoYXNfc3JjX2FkZHI7Ci0Jc29ja2FkZHJfdW5pb24gc3JjX2FkZHI7Ci0JaW50IG9yaWdpbmFsX29yZGVyOwotfTsKLQotLypBUkdTVVNFRCovCi1zdGF0aWMgaW50Ci1fZ2V0X3Njb3BlKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcikKLXsKLQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwotCQlpZiAoSU42X0lTX0FERFJfTVVMVElDQVNUKCZhZGRyNi0+c2luNl9hZGRyKSkgewotCQkJcmV0dXJuIElQVjZfQUREUl9NQ19TQ09QRSgmYWRkcjYtPnNpbjZfYWRkcik7Ci0JCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0soJmFkZHI2LT5zaW42X2FkZHIpIHx8Ci0JCQkgICBJTjZfSVNfQUREUl9MSU5LTE9DQUwoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQkvKgotCQkJICogUkZDIDQyOTEgc2VjdGlvbiAyLjUuMyBzYXlzIGxvb3BiYWNrIGlzIHRvIGJlIHRyZWF0ZWQgYXMgaGF2aW5nCi0JCQkgKiBsaW5rLWxvY2FsIHNjb3BlLgotCQkJICovCi0JCQlyZXR1cm4gSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTDsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gSVBWNl9BRERSX1NDT1BFX1NJVEVMT0NBTDsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBJUFY2X0FERFJfU0NPUEVfR0xPQkFMOwotCQl9Ci0JfSBlbHNlIGlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewotCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHI0ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7Ci0JCXVuc2lnbmVkIGxvbmcgaW50IG5hID0gbnRvaGwoYWRkcjQtPnNpbl9hZGRyLnNfYWRkcik7Ci0KLQkJaWYgKElOX0xPT1BCQUNLKG5hKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTI3LjAuMC4wLzggKi8KLQkJICAgIChuYSAmIDB4ZmZmZjAwMDApID09IDB4YTlmZTAwMDApIHsgICAgICAgICAgLyogMTY5LjI1NC4wLjAvMTYgKi8KLQkJCXJldHVybiBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFJGQyA2NzI0IHNlY3Rpb24gMy4yLiBPdGhlciBJUHY0IGFkZHJlc3NlcywgaW5jbHVkaW5nIHByaXZhdGUgYWRkcmVzc2VzCi0JCQkgKiBhbmQgc2hhcmVkIGFkZHJlc3NlcyAoMTAwLjY0LjAuMC8xMCksIGFyZSBhc3NpZ25lZCBnbG9iYWwgc2NvcGUuCi0JCQkgKi8KLQkJCXJldHVybiBJUFY2X0FERFJfU0NPUEVfR0xPQkFMOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLgotCQkgKiBSZXR1cm4gYSBzY29wZSB3aXRoIGxvdyBwcmlvcml0eSBhcyBhIGxhc3QgcmVzb3J0LgotCQkgKi8KLQkJcmV0dXJuIElQVjZfQUREUl9TQ09QRV9OT0RFTE9DQUw7Ci0JfQotfQotCi0vKiBUaGVzZSBtYWNyb3MgYXJlIG1vZGVsbGVkIGFmdGVyIHRoZSBvbmVzIGluIDxuZXRpbmV0L2luNi5oPi4gKi8KLQotLyogUkZDIDQzODAsIHNlY3Rpb24gMi42ICovCi0jZGVmaW5lIElONl9JU19BRERSX1RFUkVETyhhKQkgXAotCSgoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMF0pID09IG50b2hsKDB4MjAwMTAwMDApKSkKLQotLyogUkZDIDMwNTYsIHNlY3Rpb24gMi4gKi8KLSNkZWZpbmUgSU42X0lTX0FERFJfNlRPNChhKQkgXAotCSgoKGEpLT5zNl9hZGRyWzBdID09IDB4MjApICYmICgoYSktPnM2X2FkZHJbMV0gPT0gMHgwMikpCi0KLS8qIDZib25lIHRlc3RpbmcgYWRkcmVzcyBhcmVhICgzZmZlOjovMTYpLCBkZXByZWNhdGVkIGluIFJGQyAzNzAxLiAqLwotI2RlZmluZSBJTjZfSVNfQUREUl82Qk9ORShhKSAgICAgIFwKLQkoKChhKS0+czZfYWRkclswXSA9PSAweDNmKSAmJiAoKGEpLT5zNl9hZGRyWzFdID09IDB4ZmUpKQotCi0vKgotICogR2V0IHRoZSBsYWJlbCBmb3IgYSBnaXZlbiBJUHY0L0lQdjYgYWRkcmVzcy4KLSAqIFJGQyA2NzI0LCBzZWN0aW9uIDIuMS4KLSAqLwotCi0vKkFSR1NVU0VEKi8KLXN0YXRpYyBpbnQKLV9nZXRfbGFiZWwoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyKQotewotCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewotCQlyZXR1cm4gNDsKLQl9IGVsc2UgaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHI7Ci0JCWlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZhZGRyNi0+c2luNl9hZGRyKSkgewotCQkJcmV0dXJuIDQ7Ci0JCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfNlRPNCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAyOwotCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1RFUkVETygmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiA1OwotCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1VMQSgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAxMzsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9WNENPTVBBVCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAzOwotCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1NJVEVMT0NBTCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAxMTsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl82Qk9ORSgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAxMjsKLQkJfSBlbHNlIHsKLQkJCS8qIEFsbCBvdGhlciBJUHY2IGFkZHJlc3NlcywgaW5jbHVkaW5nIGdsb2JhbCB1bmljYXN0IGFkZHJlc3Nlcy4gKi8KLQkJCXJldHVybiAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLgotCQkgKiBSZXR1cm4gYSBzZW1pLXJhbmRvbSBsYWJlbCBhcyBhIGxhc3QgcmVzb3J0LgotCQkgKi8KLQkJcmV0dXJuIDE7Ci0JfQotfQotCi0vKgotICogR2V0IHRoZSBwcmVjZWRlbmNlIGZvciBhIGdpdmVuIElQdjQvSVB2NiBhZGRyZXNzLgotICogUkZDIDY3MjQsIHNlY3Rpb24gMi4xLgotICovCi0KLS8qQVJHU1VTRUQqLwotc3RhdGljIGludAotX2dldF9wcmVjZWRlbmNlKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcikKLXsKLQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJcmV0dXJuIDM1OwotCX0gZWxzZSBpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwotCQlpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0soJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gNTA7Ci0JCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gMzU7Ci0JCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfNlRPNCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAzMDsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9URVJFRE8oJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gNTsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9VTEEoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gMzsKLQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9WNENPTVBBVCgmYWRkcjYtPnNpbjZfYWRkcikgfHwKLQkJICAgICAgICAgICBJTjZfSVNfQUREUl9TSVRFTE9DQUwoJmFkZHI2LT5zaW42X2FkZHIpIHx8Ci0JCSAgICAgICAgICAgSU42X0lTX0FERFJfNkJPTkUoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfSBlbHNlIHsKLQkJCS8qIEFsbCBvdGhlciBJUHY2IGFkZHJlc3NlcywgaW5jbHVkaW5nIGdsb2JhbCB1bmljYXN0IGFkZHJlc3Nlcy4gKi8KLQkJCXJldHVybiA0MDsKLQkJfQotCX0gZWxzZSB7Ci0JCXJldHVybiAxOwotCX0KLX0KLQotLyoKLSAqIEZpbmQgbnVtYmVyIG9mIG1hdGNoaW5nIGluaXRpYWwgYml0cyBiZXR3ZWVuIHRoZSB0d28gYWRkcmVzc2VzIGExIGFuZCBhMi4KLSAqLwotCi0vKkFSR1NVU0VEKi8KLXN0YXRpYyBpbnQKLV9jb21tb25fcHJlZml4X2xlbihjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmExLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmEyKQotewotCWNvbnN0IGNoYXIgKnAxID0gKGNvbnN0IGNoYXIgKilhMTsKLQljb25zdCBjaGFyICpwMiA9IChjb25zdCBjaGFyICopYTI7Ci0JdW5zaWduZWQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoKmExKTsgKytpKSB7Ci0JCWludCB4LCBqOwotCi0JCWlmIChwMVtpXSA9PSBwMltpXSkgewotCQkJY29udGludWU7Ci0JCX0KLQkJeCA9IHAxW2ldIF4gcDJbaV07Ci0JCWZvciAoaiA9IDA7IGogPCBDSEFSX0JJVDsgKytqKSB7Ci0JCQlpZiAoeCAmICgxIDw8IChDSEFSX0JJVCAtIDEpKSkgewotCQkJCXJldHVybiBpICogQ0hBUl9CSVQgKyBqOwotCQkJfQotCQkJeCA8PD0gMTsKLQkJfQotCX0KLQlyZXR1cm4gc2l6ZW9mKCphMSkgKiBDSEFSX0JJVDsKLX0KLQotLyoKLSAqIENvbXBhcmUgdHdvIHNvdXJjZS9kZXN0aW5hdGlvbiBhZGRyZXNzIHBhaXJzLgotICogUkZDIDY3MjQsIHNlY3Rpb24gNi4KLSAqLwotCi0vKkFSR1NVU0VEKi8KLXN0YXRpYyBpbnQKLV9yZmM2NzI0X2NvbXBhcmUoY29uc3Qgdm9pZCAqcHRyMSwgY29uc3Qgdm9pZCogcHRyMikKLXsKLQljb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICphMSA9IChjb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICopcHRyMTsKLQljb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICphMiA9IChjb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICopcHRyMjsKLQlpbnQgc2NvcGVfc3JjMSwgc2NvcGVfZHN0MSwgc2NvcGVfbWF0Y2gxOwotCWludCBzY29wZV9zcmMyLCBzY29wZV9kc3QyLCBzY29wZV9tYXRjaDI7Ci0JaW50IGxhYmVsX3NyYzEsIGxhYmVsX2RzdDEsIGxhYmVsX21hdGNoMTsKLQlpbnQgbGFiZWxfc3JjMiwgbGFiZWxfZHN0MiwgbGFiZWxfbWF0Y2gyOwotCWludCBwcmVjZWRlbmNlMSwgcHJlY2VkZW5jZTI7Ci0JaW50IHByZWZpeGxlbjEsIHByZWZpeGxlbjI7Ci0KLQkvKiBSdWxlIDE6IEF2b2lkIHVudXNhYmxlIGRlc3RpbmF0aW9ucy4gKi8KLQlpZiAoYTEtPmhhc19zcmNfYWRkciAhPSBhMi0+aGFzX3NyY19hZGRyKSB7Ci0JCXJldHVybiBhMi0+aGFzX3NyY19hZGRyIC0gYTEtPmhhc19zcmNfYWRkcjsKLQl9Ci0KLQkvKiBSdWxlIDI6IFByZWZlciBtYXRjaGluZyBzY29wZS4gKi8KLQlzY29wZV9zcmMxID0gX2dldF9zY29wZSgmYTEtPnNyY19hZGRyLmdlbmVyaWMpOwotCXNjb3BlX2RzdDEgPSBfZ2V0X3Njb3BlKGExLT5haS0+YWlfYWRkcik7Ci0Jc2NvcGVfbWF0Y2gxID0gKHNjb3BlX3NyYzEgPT0gc2NvcGVfZHN0MSk7Ci0KLQlzY29wZV9zcmMyID0gX2dldF9zY29wZSgmYTItPnNyY19hZGRyLmdlbmVyaWMpOwotCXNjb3BlX2RzdDIgPSBfZ2V0X3Njb3BlKGEyLT5haS0+YWlfYWRkcik7Ci0Jc2NvcGVfbWF0Y2gyID0gKHNjb3BlX3NyYzIgPT0gc2NvcGVfZHN0Mik7Ci0KLQlpZiAoc2NvcGVfbWF0Y2gxICE9IHNjb3BlX21hdGNoMikgewotCQlyZXR1cm4gc2NvcGVfbWF0Y2gyIC0gc2NvcGVfbWF0Y2gxOwotCX0KLQotCS8qCi0JICogUnVsZSAzOiBBdm9pZCBkZXByZWNhdGVkIGFkZHJlc3Nlcy4KLQkgKiBUT0RPKHNlc3NlKTogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBnb29kIHdheSBvZiBmaW5kaW5nIHRoaXMuCi0JICovCi0KLQkvKgotCSAqIFJ1bGUgNDogUHJlZmVyIGhvbWUgYWRkcmVzc2VzLgotCSAqIFRPRE8oc2Vzc2UpOiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIGdvb2Qgd2F5IG9mIGZpbmRpbmcgdGhpcy4KLQkgKi8KLQotCS8qIFJ1bGUgNTogUHJlZmVyIG1hdGNoaW5nIGxhYmVsLiAqLwotCWxhYmVsX3NyYzEgPSBfZ2V0X2xhYmVsKCZhMS0+c3JjX2FkZHIuZ2VuZXJpYyk7Ci0JbGFiZWxfZHN0MSA9IF9nZXRfbGFiZWwoYTEtPmFpLT5haV9hZGRyKTsKLQlsYWJlbF9tYXRjaDEgPSAobGFiZWxfc3JjMSA9PSBsYWJlbF9kc3QxKTsKLQotCWxhYmVsX3NyYzIgPSBfZ2V0X2xhYmVsKCZhMi0+c3JjX2FkZHIuZ2VuZXJpYyk7Ci0JbGFiZWxfZHN0MiA9IF9nZXRfbGFiZWwoYTItPmFpLT5haV9hZGRyKTsKLQlsYWJlbF9tYXRjaDIgPSAobGFiZWxfc3JjMiA9PSBsYWJlbF9kc3QyKTsKLQotCWlmIChsYWJlbF9tYXRjaDEgIT0gbGFiZWxfbWF0Y2gyKSB7Ci0JCXJldHVybiBsYWJlbF9tYXRjaDIgLSBsYWJlbF9tYXRjaDE7Ci0JfQotCi0JLyogUnVsZSA2OiBQcmVmZXIgaGlnaGVyIHByZWNlZGVuY2UuICovCi0JcHJlY2VkZW5jZTEgPSBfZ2V0X3ByZWNlZGVuY2UoYTEtPmFpLT5haV9hZGRyKTsKLQlwcmVjZWRlbmNlMiA9IF9nZXRfcHJlY2VkZW5jZShhMi0+YWktPmFpX2FkZHIpOwotCWlmIChwcmVjZWRlbmNlMSAhPSBwcmVjZWRlbmNlMikgewotCQlyZXR1cm4gcHJlY2VkZW5jZTIgLSBwcmVjZWRlbmNlMTsKLQl9Ci0KLQkvKgotCSAqIFJ1bGUgNzogUHJlZmVyIG5hdGl2ZSB0cmFuc3BvcnQuCi0JICogVE9ETyhzZXNzZSk6IFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgZ29vZCB3YXkgb2YgZmluZGluZyB0aGlzLgotCSAqLwotCi0JLyogUnVsZSA4OiBQcmVmZXIgc21hbGxlciBzY29wZS4gKi8KLQlpZiAoc2NvcGVfZHN0MSAhPSBzY29wZV9kc3QyKSB7Ci0JCXJldHVybiBzY29wZV9kc3QxIC0gc2NvcGVfZHN0MjsKLQl9Ci0KLQkvKgotCSAqIFJ1bGUgOTogVXNlIGxvbmdlc3QgbWF0Y2hpbmcgcHJlZml4LgotICAgICAgICAgKiBXZSBpbXBsZW1lbnQgdGhpcyBmb3IgSVB2NiBvbmx5LCBhcyB0aGUgcnVsZXMgaW4gUkZDIDY3MjQgZG9uJ3Qgc2VlbQotICAgICAgICAgKiB0byB3b3JrIHZlcnkgd2VsbCBkaXJlY3RseSBhcHBsaWVkIHRvIElQdjQuIChnbGliYyB1c2VzIGluZm9ybWF0aW9uIGZyb20KLSAgICAgICAgICogdGhlIHJvdXRpbmcgdGFibGUgZm9yIGEgY3VzdG9tIElQdjQgaW1wbGVtZW50YXRpb24gaGVyZS4pCi0JICovCi0JaWYgKGExLT5oYXNfc3JjX2FkZHIgJiYgYTEtPmFpLT5haV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYKLQkgICAgYTItPmhhc19zcmNfYWRkciAmJiBhMi0+YWktPmFpX2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphMV9zcmMgPSAmYTEtPnNyY19hZGRyLmluNjsKLQkJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqYTFfZHN0ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhMS0+YWktPmFpX2FkZHI7Ci0JCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmEyX3NyYyA9ICZhMi0+c3JjX2FkZHIuaW42OwotCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphMl9kc3QgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKWEyLT5haS0+YWlfYWRkcjsKLQkJcHJlZml4bGVuMSA9IF9jb21tb25fcHJlZml4X2xlbigmYTFfc3JjLT5zaW42X2FkZHIsICZhMV9kc3QtPnNpbjZfYWRkcik7Ci0JCXByZWZpeGxlbjIgPSBfY29tbW9uX3ByZWZpeF9sZW4oJmEyX3NyYy0+c2luNl9hZGRyLCAmYTJfZHN0LT5zaW42X2FkZHIpOwotCQlpZiAocHJlZml4bGVuMSAhPSBwcmVmaXhsZW4yKSB7Ci0JCQlyZXR1cm4gcHJlZml4bGVuMiAtIHByZWZpeGxlbjE7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFJ1bGUgMTA6IExlYXZlIHRoZSBvcmRlciB1bmNoYW5nZWQuCi0JICogV2UgbmVlZCB0aGlzIHNpbmNlIHFzb3J0KCkgaXMgbm90IG5lY2Vzc2FyaWx5IHN0YWJsZS4KLQkgKi8KLQlyZXR1cm4gYTEtPm9yaWdpbmFsX29yZGVyIC0gYTItPm9yaWdpbmFsX29yZGVyOwotfQotCi0vKgotICogRmluZCB0aGUgc291cmNlIGFkZHJlc3MgdGhhdCB3aWxsIGJlIHVzZWQgaWYgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIGdpdmVuCi0gKiBhZGRyZXNzLiBzcmNfYWRkciBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGEgc3RydWN0IHNvY2thZGRyX2luNi4KLSAqCi0gKiBSZXR1cm5zIDEgaWYgYSBzb3VyY2UgYWRkcmVzcyB3YXMgZm91bmQsIDAgaWYgdGhlIGFkZHJlc3MgaXMgdW5yZWFjaGFibGUsCi0gKiBhbmQgLTEgaWYgYSBmYXRhbCBlcnJvciBvY2N1cnJlZC4gSWYgMCBvciAxLCB0aGUgY29udGVudHMgb2Ygc3JjX2FkZHIgYXJlCi0gKiB1bmRlZmluZWQuCi0gKi8KLQotLypBUkdTVVNFRCovCi1zdGF0aWMgaW50Ci1fZmluZF9zcmNfYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCBzb2NrYWRkciAqc3JjX2FkZHIpCi17Ci0JaW50IHNvY2s7Ci0JaW50IHJldDsKLQlzb2NrbGVuX3QgbGVuOwotCi0Jc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQlicmVhazsKLQljYXNlIEFGX0lORVQ2OgotCQlsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIE5vIGtub3duIHVzYWJsZSBzb3VyY2UgYWRkcmVzcyBmb3Igbm9uLUlORVQgZmFtaWxpZXMuICovCi0JCXJldHVybiAwOwotCX0KLQotCXNvY2sgPSBzb2NrZXQoYWRkci0+c2FfZmFtaWx5LCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7Ci0JaWYgKHNvY2sgPT0gLTEpIHsKLQkJaWYgKGVycm5vID09IEVBRk5PU1VQUE9SVCkgewotCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlkbyB7Ci0JCXJldCA9IGNvbm5lY3Qoc29jaywgYWRkciwgbGVuKTsKLQl9IHdoaWxlIChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOwotCi0JaWYgKHJldCA9PSAtMSkgewotCQljbG9zZShzb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGdldHNvY2tuYW1lKHNvY2ssIHNyY19hZGRyLCAmbGVuKSA9PSAtMSkgewotCQljbG9zZShzb2NrKTsKLQkJcmV0dXJuIC0xOwotCX0KLQljbG9zZShzb2NrKTsKLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIFNvcnQgdGhlIGxpbmtlZCBsaXN0IHN0YXJ0aW5nIGF0IHNlbnRpbmVsLT5haV9uZXh0IGluIFJGQzY3MjQgb3JkZXIuCi0gKiBXaWxsIGxlYXZlIHRoZSBsaXN0IHVuY2hhbmdlZCBpZiBhbiBlcnJvciBvY2N1cnMuCi0gKi8KLQotLypBUkdTVVNFRCovCi1zdGF0aWMgdm9pZAotX3JmYzY3MjRfc29ydChzdHJ1Y3QgYWRkcmluZm8gKmxpc3Rfc2VudGluZWwpCi17Ci0Jc3RydWN0IGFkZHJpbmZvICpjdXI7Ci0JaW50IG5lbGVtID0gMCwgaTsKLQlzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICplbGVtczsKLQotCWN1ciA9IGxpc3Rfc2VudGluZWwtPmFpX25leHQ7Ci0Jd2hpbGUgKGN1cikgewotCQkrK25lbGVtOwotCQljdXIgPSBjdXItPmFpX25leHQ7Ci0JfQotCi0JZWxlbXMgPSAoc3RydWN0IGFkZHJpbmZvX3NvcnRfZWxlbSAqKW1hbGxvYyhuZWxlbSAqIHNpemVvZihzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtKSk7Ci0JaWYgKGVsZW1zID09IE5VTEwpIHsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKgotCSAqIENvbnZlcnQgdGhlIGxpbmtlZCBsaXN0IHRvIGFuIGFycmF5IHRoYXQgYWxzbyBjb250YWlucyB0aGUgY2FuZGlkYXRlCi0JICogc291cmNlIGFkZHJlc3MgZm9yIGVhY2ggZGVzdGluYXRpb24gYWRkcmVzcy4KLQkgKi8KLQlmb3IgKGkgPSAwLCBjdXIgPSBsaXN0X3NlbnRpbmVsLT5haV9uZXh0OyBpIDwgbmVsZW07ICsraSwgY3VyID0gY3VyLT5haV9uZXh0KSB7Ci0JCWludCBoYXNfc3JjX2FkZHI7Ci0JCWFzc2VydChjdXIgIT0gTlVMTCk7Ci0JCWVsZW1zW2ldLmFpID0gY3VyOwotCQllbGVtc1tpXS5vcmlnaW5hbF9vcmRlciA9IGk7Ci0KLQkJaGFzX3NyY19hZGRyID0gX2ZpbmRfc3JjX2FkZHIoY3VyLT5haV9hZGRyLCAmZWxlbXNbaV0uc3JjX2FkZHIuZ2VuZXJpYyk7Ci0JCWlmIChoYXNfc3JjX2FkZHIgPT0gLTEpIHsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQkJZWxlbXNbaV0uaGFzX3NyY19hZGRyID0gaGFzX3NyY19hZGRyOwotCX0KLQotCS8qIFNvcnQgdGhlIGFkZHJlc3NlcywgYW5kIHJlYXJyYW5nZSB0aGUgbGlua2VkIGxpc3Qgc28gaXQgbWF0Y2hlcyB0aGUgc29ydGVkIG9yZGVyLiAqLwotCXFzb3J0KCh2b2lkICopZWxlbXMsIG5lbGVtLCBzaXplb2Yoc3RydWN0IGFkZHJpbmZvX3NvcnRfZWxlbSksIF9yZmM2NzI0X2NvbXBhcmUpOwotCi0JbGlzdF9zZW50aW5lbC0+YWlfbmV4dCA9IGVsZW1zWzBdLmFpOwotCWZvciAoaSA9IDA7IGkgPCBuZWxlbSAtIDE7ICsraSkgewotCQllbGVtc1tpXS5haS0+YWlfbmV4dCA9IGVsZW1zW2kgKyAxXS5haTsKLQl9Ci0JZWxlbXNbbmVsZW0gLSAxXS5haS0+YWlfbmV4dCA9IE5VTEw7Ci0KLWVycm9yOgotCWZyZWUoZWxlbXMpOwotfQotCi1zdGF0aWMgYm9vbCBfdXNpbmdfZGVmYXVsdF9kbnMoY29uc3QgY2hhciAqaWZhY2UpCi17Ci0JY2hhciBidWZbSUZfTkFNRVNJWkUrMV07Ci0Jc2l6ZV90IGlmX2xlbjsKLQotCS8vIGNvbW1vbiBjYXNlCi0JaWYgKGlmYWNlID09IE5VTEwgfHwgKmlmYWNlID09ICdcMCcpIHJldHVybiB0cnVlOwotCi0JaWZfbGVuID0gX3Jlc29sdl9nZXRfZGVmYXVsdF9pZmFjZShidWYsIHNpemVvZihidWYpKTsKLQlpZiAoaWZfbGVuICE9IDAgJiYgaWZfbGVuICsgMSA8PSBzaXplb2YoYnVmKSkgewotCQlpZiAoc3RyY21wKGJ1ZiwgaWZhY2UpID09IDApIHJldHVybiB0cnVlOwotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qQVJHU1VTRUQqLwotc3RhdGljIGludAotX2Ruc19nZXRhZGRyaW5mbyh2b2lkICpydiwgdm9pZAkqY2JfZGF0YSwgdmFfbGlzdCBhcCkKLXsKLQlzdHJ1Y3QgYWRkcmluZm8gKmFpOwotCXF1ZXJ5YnVmICpidWYsICpidWYyOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWk7Ci0Jc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsLCAqY3VyOwotCXN0cnVjdCByZXNfdGFyZ2V0IHEsIHEyOwotCXJlc19zdGF0ZSByZXM7Ci0JY29uc3QgY2hhciogaWZhY2U7Ci0JaW50IG1hcms7Ci0KLQluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOwotCXBhaSA9IHZhX2FyZyhhcCwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICopOwotCWlmYWNlID0gdmFfYXJnKGFwLCBjaGFyICopOwotCW1hcmsgPSB2YV9hcmcoYXAsIGludCk7Ci0JLy9mcHJpbnRmKHN0ZGVyciwgIl9kbnNfZ2V0YWRkcmluZm8oKSBuYW1lID0gJyVzJ1xuIiwgbmFtZSk7Ci0KLQltZW1zZXQoJnEsIDAsIHNpemVvZihxKSk7Ci0JbWVtc2V0KCZxMiwgMCwgc2l6ZW9mKHEyKSk7Ci0JbWVtc2V0KCZzZW50aW5lbCwgMCwgc2l6ZW9mKHNlbnRpbmVsKSk7Ci0JY3VyID0gJnNlbnRpbmVsOwotCi0JYnVmID0gbWFsbG9jKHNpemVvZigqYnVmKSk7Ci0JaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0JCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKLQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCX0KLQlidWYyID0gbWFsbG9jKHNpemVvZigqYnVmMikpOwotCWlmIChidWYyID09IE5VTEwpIHsKLQkJZnJlZShidWYpOwotCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7Ci0JCXJldHVybiBOU19OT1RGT1VORDsKLQl9Ci0KLQlzd2l0Y2ggKHBhaS0+YWlfZmFtaWx5KSB7Ci0JY2FzZSBBRl9VTlNQRUM6Ci0JCS8qIHByZWZlciBJUHY2ICovCi0JCXEubmFtZSA9IG5hbWU7Ci0JCXEucWNsYXNzID0gQ19JTjsKLQkJcS5hbnN3ZXIgPSBidWYtPmJ1ZjsKLQkJcS5hbnNsZW4gPSBzaXplb2YoYnVmLT5idWYpOwotCQlpbnQgcXVlcnlfaXB2NiA9IDEsIHF1ZXJ5X2lwdjQgPSAxOwotCQlpZiAocGFpLT5haV9mbGFncyAmIEFJX0FERFJDT05GSUcpIHsKLQkJCS8vIE9ubHkgaW1wbGVtZW50IEFJX0FERFJDT05GSUcgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdAotCQkJLy8gdXNpbmcgaXRzIG93biBETlMgc2VydmVycywgc2luY2Ugb3VyIGltcGxlbWVudGF0aW9uCi0JCQkvLyBvbmx5IHdvcmtzIG9uIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24uCi0JCQlpZiAoX3VzaW5nX2RlZmF1bHRfZG5zKGlmYWNlKSkgewotCQkJCXF1ZXJ5X2lwdjYgPSBfaGF2ZV9pcHY2KCk7Ci0JCQkJcXVlcnlfaXB2NCA9IF9oYXZlX2lwdjQoKTsKLQkJCX0KLQkJfQotCQlpZiAocXVlcnlfaXB2NikgewotCQkJcS5xdHlwZSA9IFRfQUFBQTsKLQkJCWlmIChxdWVyeV9pcHY0KSB7Ci0JCQkJcS5uZXh0ID0gJnEyOwotCQkJCXEyLm5hbWUgPSBuYW1lOwotCQkJCXEyLnFjbGFzcyA9IENfSU47Ci0JCQkJcTIucXR5cGUgPSBUX0E7Ci0JCQkJcTIuYW5zd2VyID0gYnVmMi0+YnVmOwotCQkJCXEyLmFuc2xlbiA9IHNpemVvZihidWYyLT5idWYpOwotCQkJfQotCQl9IGVsc2UgaWYgKHF1ZXJ5X2lwdjQpIHsKLQkJCXEucXR5cGUgPSBUX0E7Ci0JCX0gZWxzZSB7Ci0JCQlmcmVlKGJ1Zik7Ci0JCQlmcmVlKGJ1ZjIpOwotCQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgQUZfSU5FVDoKLQkJcS5uYW1lID0gbmFtZTsKLQkJcS5xY2xhc3MgPSBDX0lOOwotCQlxLnF0eXBlID0gVF9BOwotCQlxLmFuc3dlciA9IGJ1Zi0+YnVmOwotCQlxLmFuc2xlbiA9IHNpemVvZihidWYtPmJ1Zik7Ci0JCWJyZWFrOwotCWNhc2UgQUZfSU5FVDY6Ci0JCXEubmFtZSA9IG5hbWU7Ci0JCXEucWNsYXNzID0gQ19JTjsKLQkJcS5xdHlwZSA9IFRfQUFBQTsKLQkJcS5hbnN3ZXIgPSBidWYtPmJ1ZjsKLQkJcS5hbnNsZW4gPSBzaXplb2YoYnVmLT5idWYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlmcmVlKGJ1Zik7Ci0JCWZyZWUoYnVmMik7Ci0JCXJldHVybiBOU19VTkFWQUlMOwotCX0KLQotCXJlcyA9IF9fcmVzX2dldF9zdGF0ZSgpOwotCWlmIChyZXMgPT0gTlVMTCkgewotCQlmcmVlKGJ1Zik7Ci0JCWZyZWUoYnVmMik7Ci0JCXJldHVybiBOU19OT1RGT1VORDsKLQl9Ci0KLQkvKiB0aGlzIGp1c3Qgc2V0cyBvdXIgaWZhY2UgdmFsIGluIHRoZSB0aHJlYWQgcHJpdmF0ZSBkYXRhIHNvIHdlIGRvbid0IGhhdmUgdG8KLQkgKiBtb2RpZnkgdGhlIGFwaSdzIGFsbCB0aGUgd2F5IGRvd24gdG8gcmVzX3NlbmQuYydzIHJlc19uc2VuZC4gIFdlIGNvdWxkCi0JICogZnVsbHkgcG9wdWxhdGUgdGhlIHRocmVhZCBwcml2YXRlIGRhdGEgaGVyZSwgYnV0IGlmIHdlIGdldCBkb3duIHRoZXJlCi0JICogYW5kIGhhdmUgYSBjYWNoZSBoaXQgdGhhdCB3b3VsZCBiZSB3YXN0ZWQsIHNvIHdlIGRvIHRoZSByZXN0IHRoZXJlIG9uIG1pc3MKLQkgKi8KLQlyZXNfc2V0aWZhY2UocmVzLCBpZmFjZSk7Ci0JcmVzX3NldG1hcmsocmVzLCBtYXJrKTsKLQlpZiAocmVzX3NlYXJjaE4obmFtZSwgJnEsIHJlcykgPCAwKSB7Ci0JCV9fcmVzX3B1dF9zdGF0ZShyZXMpOwotCQlmcmVlKGJ1Zik7Ci0JCWZyZWUoYnVmMik7Ci0JCXJldHVybiBOU19OT1RGT1VORDsKLQl9Ci0JYWkgPSBnZXRhbnN3ZXIoYnVmLCBxLm4sIHEubmFtZSwgcS5xdHlwZSwgcGFpKTsKLQlpZiAoYWkpIHsKLQkJY3VyLT5haV9uZXh0ID0gYWk7Ci0JCXdoaWxlIChjdXIgJiYgY3VyLT5haV9uZXh0KQotCQkJY3VyID0gY3VyLT5haV9uZXh0OwotCX0KLQlpZiAocS5uZXh0KSB7Ci0JCWFpID0gZ2V0YW5zd2VyKGJ1ZjIsIHEyLm4sIHEyLm5hbWUsIHEyLnF0eXBlLCBwYWkpOwotCQlpZiAoYWkpCi0JCQljdXItPmFpX25leHQgPSBhaTsKLQl9Ci0JZnJlZShidWYpOwotCWZyZWUoYnVmMik7Ci0JaWYgKHNlbnRpbmVsLmFpX25leHQgPT0gTlVMTCkgewotCQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKLQkJc3dpdGNoIChoX2Vycm5vKSB7Ci0JCWNhc2UgSE9TVF9OT1RfRk9VTkQ6Ci0JCQlyZXR1cm4gTlNfTk9URk9VTkQ7Ci0JCWNhc2UgVFJZX0FHQUlOOgotCQkJcmV0dXJuIE5TX1RSWUFHQUlOOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIE5TX1VOQVZBSUw7Ci0JCX0KLQl9Ci0KLQlfcmZjNjcyNF9zb3J0KCZzZW50aW5lbCk7Ci0KLQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKLQotCSooKHN0cnVjdCBhZGRyaW5mbyAqKilydikgPSBzZW50aW5lbC5haV9uZXh0OwotCXJldHVybiBOU19TVUNDRVNTOwotfQotCi1zdGF0aWMgdm9pZAotX3NldGh0ZW50KEZJTEUgKipob3N0ZikKLXsKLQotCWlmICghKmhvc3RmKQotCQkqaG9zdGYgPSBmb3BlbihfUEFUSF9IT1NUUywgInIiICk7Ci0JZWxzZQotCQlyZXdpbmQoKmhvc3RmKTsKLX0KLQotc3RhdGljIHZvaWQKLV9lbmRodGVudChGSUxFICoqaG9zdGYpCi17Ci0KLQlpZiAoKmhvc3RmKSB7Ci0JCSh2b2lkKSBmY2xvc2UoKmhvc3RmKTsKLQkJKmhvc3RmID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKgotX2dldGh0ZW50KEZJTEUgKipob3N0ZiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWkpCi17Ci0JY2hhciAqcDsKLQljaGFyICpjcCwgKnRuYW1lLCAqY25hbWU7Ci0Jc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzMCwgKnJlczsKLQlpbnQgZXJyb3I7Ci0JY29uc3QgY2hhciAqYWRkcjsKLQljaGFyIGhvc3RidWZbOCoxMDI0XTsKLQotLy8JZnByaW50ZihzdGRlcnIsICJfZ2V0aHRlbnQoKSBuYW1lID0gJyVzJ1xuIiwgbmFtZSk7Ci0JYXNzZXJ0KG5hbWUgIT0gTlVMTCk7Ci0JYXNzZXJ0KHBhaSAhPSBOVUxMKTsKLQotCWlmICghKmhvc3RmICYmICEoKmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApKSkKLQkJcmV0dXJuIChOVUxMKTsKLSBhZ2FpbjoKLQlpZiAoIShwID0gZmdldHMoaG9zdGJ1Ziwgc2l6ZW9mIGhvc3RidWYsICpob3N0ZikpKQotCQlyZXR1cm4gKE5VTEwpOwotCWlmICgqcCA9PSAnIycpCi0JCWdvdG8gYWdhaW47Ci0JaWYgKCEoY3AgPSBzdHJwYnJrKHAsICIjXG4iKSkpCi0JCWdvdG8gYWdhaW47Ci0JKmNwID0gJ1wwJzsKLQlpZiAoIShjcCA9IHN0cnBicmsocCwgIiBcdCIpKSkKLQkJZ290byBhZ2FpbjsKLQkqY3ArKyA9ICdcMCc7Ci0JYWRkciA9IHA7Ci0JLyogaWYgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlJ3JlIGxvb2tpbmcgZm9yLCBza2lwIGl0LiAqLwotCWNuYW1lID0gTlVMTDsKLQl3aGlsZSAoY3AgJiYgKmNwKSB7Ci0JCWlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7Ci0JCQljcCsrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFjbmFtZSkKLQkJCWNuYW1lID0gY3A7Ci0JCXRuYW1lID0gY3A7Ci0JCWlmICgoY3AgPSBzdHJwYnJrKGNwLCAiIFx0IikpICE9IE5VTEwpCi0JCQkqY3ArKyA9ICdcMCc7Ci0vLwkJZnByaW50ZihzdGRlcnIsICJcdHRuYW1lID0gJyVzJyIsIHRuYW1lKTsKLQkJaWYgKHN0cmNhc2VjbXAobmFtZSwgdG5hbWUpID09IDApCi0JCQlnb3RvIGZvdW5kOwotCX0KLQlnb3RvIGFnYWluOwotCi1mb3VuZDoKLQloaW50cyA9ICpwYWk7Ci0JaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKLQllcnJvciA9IGdldGFkZHJpbmZvKGFkZHIsIE5VTEwsICZoaW50cywgJnJlczApOwotCWlmIChlcnJvcikKLQkJZ290byBhZ2FpbjsKLQlmb3IgKHJlcyA9IHJlczA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0KSB7Ci0JCS8qIGNvdmVyIGl0IHVwICovCi0JCXJlcy0+YWlfZmxhZ3MgPSBwYWktPmFpX2ZsYWdzOwotCi0JCWlmIChwYWktPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKSB7Ci0JCQlpZiAoZ2V0X2Nhbm9ubmFtZShwYWksIHJlcywgY25hbWUpICE9IDApIHsKLQkJCQlmcmVlYWRkcmluZm8ocmVzMCk7Ci0JCQkJZ290byBhZ2FpbjsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gcmVzMDsKLX0KLQotLypBUkdTVVNFRCovCi1zdGF0aWMgaW50Ci1fZmlsZXNfZ2V0YWRkcmluZm8odm9pZCAqcnYsIHZvaWQgKmNiX2RhdGEsIHZhX2xpc3QgYXApCi17Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaTsKLQlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWwsICpjdXI7Ci0Jc3RydWN0IGFkZHJpbmZvICpwOwotCUZJTEUgKmhvc3RmID0gTlVMTDsKLQotCW5hbWUgPSB2YV9hcmcoYXAsIGNoYXIgKik7Ci0JcGFpID0gdmFfYXJnKGFwLCBzdHJ1Y3QgYWRkcmluZm8gKik7Ci0KLS8vCWZwcmludGYoc3RkZXJyLCAiX2ZpbGVzX2dldGFkZHJpbmZvKCkgbmFtZSA9ICclcydcbiIsIG5hbWUpOwotCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOwotCWN1ciA9ICZzZW50aW5lbDsKLQotCV9zZXRodGVudCgmaG9zdGYpOwotCXdoaWxlICgocCA9IF9nZXRodGVudCgmaG9zdGYsIG5hbWUsIHBhaSkpICE9IE5VTEwpIHsKLQkJY3VyLT5haV9uZXh0ID0gcDsKLQkJd2hpbGUgKGN1ciAmJiBjdXItPmFpX25leHQpCi0JCQljdXIgPSBjdXItPmFpX25leHQ7Ci0JfQotCV9lbmRodGVudCgmaG9zdGYpOwotCi0JKigoc3RydWN0IGFkZHJpbmZvICoqKXJ2KSA9IHNlbnRpbmVsLmFpX25leHQ7Ci0JaWYgKHNlbnRpbmVsLmFpX25leHQgPT0gTlVMTCkKLQkJcmV0dXJuIE5TX05PVEZPVU5EOwotCXJldHVybiBOU19TVUNDRVNTOwotfQotCi0vKiByZXNvbHZlciBsb2dpYyAqLwotCi0vKgotICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgYXdhaXQgYW5zd2VyLgotICogUmV0dXJuZWQgYW5zd2VyIGlzIHBsYWNlZCBpbiBzdXBwbGllZCBidWZmZXIgImFuc3dlciIuCi0gKiBQZXJmb3JtIHByZWxpbWluYXJ5IGNoZWNrIG9mIGFuc3dlciwgcmV0dXJuaW5nIHN1Y2Nlc3Mgb25seQotICogaWYgbm8gZXJyb3IgaXMgaW5kaWNhdGVkIGFuZCB0aGUgYW5zd2VyIGNvdW50IGlzIG5vbnplcm8uCi0gKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgotICogRXJyb3IgbnVtYmVyIGlzIGxlZnQgaW4gaF9lcnJuby4KLSAqCi0gKiBDYWxsZXIgbXVzdCBwYXJzZSBhbnN3ZXIgYW5kIGRldGVybWluZSB3aGV0aGVyIGl0IGFuc3dlcnMgdGhlIHF1ZXN0aW9uLgotICovCi1zdGF0aWMgaW50Ci1yZXNfcXVlcnlOKGNvbnN0IGNoYXIgKm5hbWUsIC8qIGRvbWFpbiBuYW1lICovIHN0cnVjdCByZXNfdGFyZ2V0ICp0YXJnZXQsCi0gICAgcmVzX3N0YXRlIHJlcykKLXsKLQl1X2NoYXIgYnVmW01BWFBBQ0tFVF07Ci0JSEVBREVSICpocDsKLQlpbnQgbjsKLQlzdHJ1Y3QgcmVzX3RhcmdldCAqdDsKLQlpbnQgcmNvZGU7Ci0JaW50IGFuY291bnQ7Ci0KLQlhc3NlcnQobmFtZSAhPSBOVUxMKTsKLQkvKiBYWFg6IHRhcmdldCBtYXkgYmUgTlVMTD8/PyAqLwotCi0JcmNvZGUgPSBOT0VSUk9SOwotCWFuY291bnQgPSAwOwotCi0JZm9yICh0ID0gdGFyZ2V0OyB0OyB0ID0gdC0+bmV4dCkgewotCQlpbnQgY2xhc3MsIHR5cGU7Ci0JCXVfY2hhciAqYW5zd2VyOwotCQlpbnQgYW5zbGVuOwotCi0JCWhwID0gKEhFQURFUiAqKSh2b2lkICopdC0+YW5zd2VyOwotCQlocC0+cmNvZGUgPSBOT0VSUk9SOwkvKiBkZWZhdWx0ICovCi0KLQkJLyogbWFrZSBpdCBlYXNpZXIuLi4gKi8KLQkJY2xhc3MgPSB0LT5xY2xhc3M7Ci0JCXR5cGUgPSB0LT5xdHlwZTsKLQkJYW5zd2VyID0gdC0+YW5zd2VyOwotCQlhbnNsZW4gPSB0LT5hbnNsZW47Ci0jaWZkZWYgREVCVUcKLQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJCXByaW50ZigiOzsgcmVzX25xdWVyeSglcywgJWQsICVkKVxuIiwgbmFtZSwgY2xhc3MsIHR5cGUpOwotI2VuZGlmCi0KLQkJbiA9IHJlc19ubWtxdWVyeShyZXMsIFFVRVJZLCBuYW1lLCBjbGFzcywgdHlwZSwgTlVMTCwgMCwgTlVMTCwKLQkJICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotI2lmZGVmIFJFU19VU0VfRUROUzAKLQkJaWYgKG4gPiAwICYmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0VETlMwKSAhPSAwKQotCQkJbiA9IHJlc19ub3B0KHJlcywgbiwgYnVmLCBzaXplb2YoYnVmKSwgYW5zbGVuKTsKLSNlbmRpZgotCQlpZiAobiA8PSAwKSB7Ci0jaWZkZWYgREVCVUcKLQkJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCQkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5OiBta3F1ZXJ5IGZhaWxlZFxuIik7Ci0jZW5kaWYKLQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKLQkJCXJldHVybiBuOwotCQl9Ci0JCW4gPSByZXNfbnNlbmQocmVzLCBidWYsIG4sIGFuc3dlciwgYW5zbGVuKTsKLSNpZiAwCi0JCWlmIChuIDwgMCkgewotI2lmZGVmIERFQlVHCi0JCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKQotCQkJCXByaW50ZigiOzsgcmVzX3F1ZXJ5OiBzZW5kIGVycm9yXG4iKTsKLSNlbmRpZgotCQkJaF9lcnJubyA9IFRSWV9BR0FJTjsKLQkJCXJldHVybiBuOwotCQl9Ci0jZW5kaWYKLQotCQlpZiAobiA8IDAgfHwgaHAtPnJjb2RlICE9IE5PRVJST1IgfHwgbnRvaHMoaHAtPmFuY291bnQpID09IDApIHsKLQkJCXJjb2RlID0gaHAtPnJjb2RlOwkvKiByZWNvcmQgbW9zdCByZWNlbnQgZXJyb3IgKi8KLSNpZmRlZiBERUJVRwotCQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJCQlwcmludGYoIjs7IHJjb2RlID0gJXUsIGFuY291bnQ9JXVcbiIsIGhwLT5yY29kZSwKLQkJCQkgICAgbnRvaHMoaHAtPmFuY291bnQpKTsKLSNlbmRpZgotCQkJY29udGludWU7Ci0JCX0KLQotCQlhbmNvdW50ICs9IG50b2hzKGhwLT5hbmNvdW50KTsKLQotCQl0LT5uID0gbjsKLQl9Ci0KLQlpZiAoYW5jb3VudCA9PSAwKSB7Ci0JCXN3aXRjaCAocmNvZGUpIHsKLQkJY2FzZSBOWERPTUFJTjoKLQkJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKLQkJCWJyZWFrOwotCQljYXNlIFNFUlZGQUlMOgotCQkJaF9lcnJubyA9IFRSWV9BR0FJTjsKLQkJCWJyZWFrOwotCQljYXNlIE5PRVJST1I6Ci0JCQloX2Vycm5vID0gTk9fREFUQTsKLQkJCWJyZWFrOwotCQljYXNlIEZPUk1FUlI6Ci0JCWNhc2UgTk9USU1QOgotCQljYXNlIFJFRlVTRUQ6Ci0JCWRlZmF1bHQ6Ci0JCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7Ci0JCQlicmVhazsKLQkJfQotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiBhbmNvdW50OwotfQotCi0vKgotICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgcmV0cmlldmUgYW5zd2VyIGluIHN1cHBsaWVkIGJ1ZmZlci4KLSAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmVzcG9uc2Ugb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCi0gKiBJZiBlbmFibGVkLCBpbXBsZW1lbnQgc2VhcmNoIHJ1bGVzIHVudGlsIGFuc3dlciBvciB1bnJlY292ZXJhYmxlIGZhaWx1cmUKLSAqIGlzIGRldGVjdGVkLiAgRXJyb3IgY29kZSwgaWYgYW55LCBpcyBsZWZ0IGluIGhfZXJybm8uCi0gKi8KLXN0YXRpYyBpbnQKLXJlc19zZWFyY2hOKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCByZXNfdGFyZ2V0ICp0YXJnZXQsIHJlc19zdGF0ZSByZXMpCi17Ci0JY29uc3QgY2hhciAqY3AsICogY29uc3QgKmRvbWFpbjsKLQlIRUFERVIgKmhwOwotCXVfaW50IGRvdHM7Ci0JaW50IHRyYWlsaW5nX2RvdCwgcmV0LCBzYXZlZF9oZXJybm87Ci0JaW50IGdvdF9ub2RhdGEgPSAwLCBnb3Rfc2VydmZhaWwgPSAwLCB0cmllZF9hc19pcyA9IDA7Ci0KLQlhc3NlcnQobmFtZSAhPSBOVUxMKTsKLQlhc3NlcnQodGFyZ2V0ICE9IE5VTEwpOwotCi0JaHAgPSAoSEVBREVSICopKHZvaWQgKil0YXJnZXQtPmFuc3dlcjsJLypYWFgqLwotCi0JZXJybm8gPSAwOwotCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsJLyogZGVmYXVsdCwgaWYgd2UgbmV2ZXIgcXVlcnkgKi8KLQlkb3RzID0gMDsKLQlmb3IgKGNwID0gbmFtZTsgKmNwOyBjcCsrKQotCQlkb3RzICs9ICgqY3AgPT0gJy4nKTsKLQl0cmFpbGluZ19kb3QgPSAwOwotCWlmIChjcCA+IG5hbWUgJiYgKi0tY3AgPT0gJy4nKQotCQl0cmFpbGluZ19kb3QrKzsKLQotCi0gICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJyZXNfc2VhcmNoTigpIG5hbWUgPSAnJXMnXG4iLCBuYW1lKTsKLQotCS8qCi0JICogaWYgdGhlcmUgYXJlbid0IGFueSBkb3RzLCBpdCBjb3VsZCBiZSBhIHVzZXItbGV2ZWwgYWxpYXMKLQkgKi8KLQlpZiAoIWRvdHMgJiYgKGNwID0gX19ob3N0YWxpYXMobmFtZSkpICE9IE5VTEwpIHsKLQkJcmV0ID0gcmVzX3F1ZXJ5TihjcCwgdGFyZ2V0LCByZXMpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qCi0JICogSWYgdGhlcmUgYXJlIGRvdHMgaW4gdGhlIG5hbWUgYWxyZWFkeSwgbGV0J3MganVzdCBnaXZlIGl0IGEgdHJ5Ci0JICogJ2FzIGlzJy4gIFRoZSB0aHJlc2hvbGQgY2FuIGJlIHNldCB3aXRoIHRoZSAibmRvdHMiIG9wdGlvbi4KLQkgKi8KLQlzYXZlZF9oZXJybm8gPSAtMTsKLQlpZiAoZG90cyA+PSByZXMtPm5kb3RzKSB7Ci0JCXJldCA9IHJlc19xdWVyeWRvbWFpbk4obmFtZSwgTlVMTCwgdGFyZ2V0LCByZXMpOwotCQlpZiAocmV0ID4gMCkKLQkJCXJldHVybiAocmV0KTsKLQkJc2F2ZWRfaGVycm5vID0gaF9lcnJubzsKLQkJdHJpZWRfYXNfaXMrKzsKLQl9Ci0KLQkvKgotCSAqIFdlIGRvIGF0IGxlYXN0IG9uZSBsZXZlbCBvZiBzZWFyY2ggaWYKLQkgKgktIHRoZXJlIGlzIG5vIGRvdCBhbmQgUkVTX0RFRk5BTUUgaXMgc2V0LCBvcgotCSAqCS0gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGRvdCwgdGhlcmUgaXMgbm8gdHJhaWxpbmcgZG90LAotCSAqCSAgYW5kIFJFU19ETlNSQ0ggaXMgc2V0LgotCSAqLwotCWlmICgoIWRvdHMgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUZOQU1FUykpIHx8Ci0JICAgIChkb3RzICYmICF0cmFpbGluZ19kb3QgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19ETlNSQ0gpKSkgewotCQlpbnQgZG9uZSA9IDA7Ci0KLQkJLyogVW5mb3J0dW5hdGVseSB3ZSBuZWVkIHRvIHNldCBzdHVmZiB1cCBiZWZvcmUKLQkJICogdGhlIGRvbWFpbiBzdHVmZiBpcyB0cmllZC4gIFdpbGwgaGF2ZSBhIGJldHRlcgotCQkgKiBmaXggYWZ0ZXIgdGhyZWFkIHBvb2xzIGFyZSB1c2VkLgotCQkgKi8KLQkJX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX2lmYWNlKHJlcyk7Ci0KLQkJZm9yIChkb21haW4gPSAoY29uc3QgY2hhciAqIGNvbnN0ICopcmVzLT5kbnNyY2g7Ci0JCSAgICpkb21haW4gJiYgIWRvbmU7Ci0JCSAgIGRvbWFpbisrKSB7Ci0KLQkJCXJldCA9IHJlc19xdWVyeWRvbWFpbk4obmFtZSwgKmRvbWFpbiwgdGFyZ2V0LCByZXMpOwotCQkJaWYgKHJldCA+IDApCi0JCQkJcmV0dXJuIHJldDsKLQotCQkJLyoKLQkJCSAqIElmIG5vIHNlcnZlciBwcmVzZW50LCBnaXZlIHVwLgotCQkJICogSWYgbmFtZSBpc24ndCBmb3VuZCBpbiB0aGlzIGRvbWFpbiwKLQkJCSAqIGtlZXAgdHJ5aW5nIGhpZ2hlciBkb21haW5zIGluIHRoZSBzZWFyY2ggbGlzdAotCQkJICogKGlmIHRoYXQncyBlbmFibGVkKS4KLQkJCSAqIE9uIGEgTk9fREFUQSBlcnJvciwga2VlcCB0cnlpbmcsIG90aGVyd2lzZQotCQkJICogYSB3aWxkY2FyZCBlbnRyeSBvZiBhbm90aGVyIHR5cGUgY291bGQga2VlcCB1cwotCQkJICogZnJvbSBmaW5kaW5nIHRoaXMgZW50cnkgaGlnaGVyIGluIHRoZSBkb21haW4uCi0JCQkgKiBJZiB3ZSBnZXQgc29tZSBvdGhlciBlcnJvciAobmVnYXRpdmUgYW5zd2VyIG9yCi0JCQkgKiBzZXJ2ZXIgZmFpbHVyZSksIHRoZW4gc3RvcCBzZWFyY2hpbmcgdXAsCi0JCQkgKiBidXQgdHJ5IHRoZSBpbnB1dCBuYW1lIGJlbG93IGluIGNhc2UgaXQncwotCQkJICogZnVsbHktcXVhbGlmaWVkLgotCQkJICovCi0JCQlpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEKSB7Ci0JCQkJaF9lcnJubyA9IFRSWV9BR0FJTjsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0KLQkJCXN3aXRjaCAoaF9lcnJubykgewotCQkJY2FzZSBOT19EQVRBOgotCQkJCWdvdF9ub2RhdGErKzsKLQkJCQkvKiBGQUxMVEhST1VHSCAqLwotCQkJY2FzZSBIT1NUX05PVF9GT1VORDoKLQkJCQkvKiBrZWVwIHRyeWluZyAqLwotCQkJCWJyZWFrOwotCQkJY2FzZSBUUllfQUdBSU46Ci0JCQkJaWYgKGhwLT5yY29kZSA9PSBTRVJWRkFJTCkgewotCQkJCQkvKiB0cnkgbmV4dCBzZWFyY2ggZWxlbWVudCwgaWYgYW55ICovCi0JCQkJCWdvdF9zZXJ2ZmFpbCsrOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJLyogYW55dGhpbmcgZWxzZSBpbXBsaWVzIHRoYXQgd2UncmUgZG9uZSAqLwotCQkJCWRvbmUrKzsKLQkJCX0KLQkJCS8qCi0JCQkgKiBpZiB3ZSBnb3QgaGVyZSBmb3Igc29tZSByZWFzb24gb3RoZXIgdGhhbiBETlNSQ0gsCi0JCQkgKiB3ZSBvbmx5IHdhbnRlZCBvbmUgaXRlcmF0aW9uIG9mIHRoZSBsb29wLCBzbyBzdG9wLgotCQkJICovCi0JCQlpZiAoIShyZXMtPm9wdGlvbnMgJiBSRVNfRE5TUkNIKSkKLQkJCSAgICAgICAgZG9uZSsrOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBpZiB3ZSBoYXZlIG5vdCBhbHJlYWR5IHRyaWVkIHRoZSBuYW1lICJhcyBpcyIsIGRvIHRoYXQgbm93LgotCSAqIG5vdGUgdGhhdCB3ZSBkbyB0aGlzIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgZG90cyB3ZXJlIGluIHRoZQotCSAqIG5hbWUgb3Igd2hldGhlciBpdCBlbmRzIHdpdGggYSBkb3QuCi0JICovCi0JaWYgKCF0cmllZF9hc19pcykgewotCQlyZXQgPSByZXNfcXVlcnlkb21haW5OKG5hbWUsIE5VTEwsIHRhcmdldCwgcmVzKTsKLQkJaWYgKHJldCA+IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qCi0JICogaWYgd2UgZ290IGhlcmUsIHdlIGRpZG4ndCBzYXRpc2Z5IHRoZSBzZWFyY2guCi0JICogaWYgd2UgZGlkIGFuIGluaXRpYWwgZnVsbCBxdWVyeSwgcmV0dXJuIHRoYXQgcXVlcnkncyBoX2Vycm5vCi0JICogKG5vdGUgdGhhdCB3ZSB3b3VsZG4ndCBiZSBoZXJlIGlmIHRoYXQgcXVlcnkgaGFkIHN1Y2NlZWRlZCkuCi0JICogZWxzZSBpZiB3ZSBldmVyIGdvdCBhIG5vZGF0YSwgc2VuZCB0aGF0IGJhY2sgYXMgdGhlIHJlYXNvbi4KLQkgKiBlbHNlIHNlbmQgYmFjayBtZWFuaW5nbGVzcyBoX2Vycm5vLCB0aGF0IGJlaW5nIHRoZSBvbmUgZnJvbQotCSAqIHRoZSBsYXN0IEROU1JDSCB3ZSBkaWQuCi0JICovCi0JaWYgKHNhdmVkX2hlcnJubyAhPSAtMSkKLQkJaF9lcnJubyA9IHNhdmVkX2hlcnJubzsKLQllbHNlIGlmIChnb3Rfbm9kYXRhKQotCQloX2Vycm5vID0gTk9fREFUQTsKLQllbHNlIGlmIChnb3Rfc2VydmZhaWwpCi0JCWhfZXJybm8gPSBUUllfQUdBSU47Ci0JcmV0dXJuIC0xOwotfQotCi0vKgotICogUGVyZm9ybSBhIGNhbGwgb24gcmVzX3F1ZXJ5IG9uIHRoZSBjb25jYXRlbmF0aW9uIG9mIG5hbWUgYW5kIGRvbWFpbiwKLSAqIHJlbW92aW5nIGEgdHJhaWxpbmcgZG90IGZyb20gbmFtZSBpZiBkb21haW4gaXMgTlVMTC4KLSAqLwotc3RhdGljIGludAotcmVzX3F1ZXJ5ZG9tYWluTihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb21haW4sCi0gICAgc3RydWN0IHJlc190YXJnZXQgKnRhcmdldCwgcmVzX3N0YXRlIHJlcykKLXsKLQljaGFyIG5idWZbTUFYRE5BTUVdOwotCWNvbnN0IGNoYXIgKmxvbmduYW1lID0gbmJ1ZjsKLQlzaXplX3QgbiwgZDsKLQotCWFzc2VydChuYW1lICE9IE5VTEwpOwotCS8qIFhYWDogdGFyZ2V0IG1heSBiZSBOVUxMPz8/ICovCi0KLSNpZmRlZiBERUJVRwotCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCXByaW50ZigiOzsgcmVzX3F1ZXJ5ZG9tYWluKCVzLCAlcylcbiIsCi0JCQluYW1lLCBkb21haW4/ZG9tYWluOiI8TmlsPiIpOwotI2VuZGlmCi0JaWYgKGRvbWFpbiA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIENoZWNrIGZvciB0cmFpbGluZyAnLic7Ci0JCSAqIGNvcHkgd2l0aG91dCAnLicgaWYgcHJlc2VudC4KLQkJICovCi0JCW4gPSBzdHJsZW4obmFtZSk7Ci0JCWlmIChuICsgMSA+IHNpemVvZihuYnVmKSkgewotCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWlmIChuID4gMCAmJiBuYW1lWy0tbl0gPT0gJy4nKSB7Ci0JCQlzdHJuY3B5KG5idWYsIG5hbWUsIG4pOwotCQkJbmJ1ZltuXSA9ICdcMCc7Ci0JCX0gZWxzZQotCQkJbG9uZ25hbWUgPSBuYW1lOwotCX0gZWxzZSB7Ci0JCW4gPSBzdHJsZW4obmFtZSk7Ci0JCWQgPSBzdHJsZW4oZG9tYWluKTsKLQkJaWYgKG4gKyAxICsgZCArIDEgPiBzaXplb2YobmJ1ZikpIHsKLQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlzbnByaW50ZihuYnVmLCBzaXplb2YobmJ1ZiksICIlcy4lcyIsIG5hbWUsIGRvbWFpbik7Ci0JfQotCXJldHVybiByZXNfcXVlcnlOKGxvbmduYW1lLCB0YXJnZXQsIHJlcyk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0bmFtZWluZm8uYyBiL2xpYmMvbmV0YnNkL25ldC9nZXRuYW1laW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWQyNjc1Li4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25ldC9nZXRuYW1laW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYwICswLDAgQEAKLS8qCSROZXRCU0Q6IGdldG5hbWVpbmZvLmMsdiAxLjUzIDIwMTIvMDkvMjYgMjM6MTM6MDAgY2hyaXN0b3MgRXhwICQJKi8KLS8qCSRLQU1FOiBnZXRuYW1laW5mby5jLHYgMS40NSAyMDAwLzA5LzI1IDIyOjQzOjU2IGl0b2p1biBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDAwIEJlbiBIYXJyaXMuCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBJc3N1ZXMgdG8gYmUgZGlzY3Vzc2VkOgotICogLSBUaHJlYWQgc2FmZS1uZXNzIG11c3QgYmUgY2hlY2tlZAotICogLSBSRkMyNTUzIHNheXMgdGhhdCB3ZSBzaG91bGQgcmFpc2UgZXJyb3Igb24gc2hvcnQgYnVmZmVyLiAgWC9PcGVuIHNheXMKLSAqICAgd2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgcmVzdWx0LiAgV2Ugb2JleSBSRkMyNTUzIChhbmQgWC9PcGVuIHNob3VsZCBiZQotICogICBtb2RpZmllZCkuICBpcG5nd2cgcm91Z2ggY29uc2Vuc3VzIHNlZW1zIHRvIGZvbGxvdyBSRkMyNTUzLgotICogLSBXaGF0IGlzICJsb2NhbCIgaW4gTklfRlFETj8KLSAqIC0gTklfTkFNRVJFUUQgYW5kIE5JX05VTUVSSUNIT1NUIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlci4KLSAqIC0gKEtBTUUgZXh0ZW5zaW9uKSBhbHdheXMgYXR0YWNoIHRleHR1YWwgc2NvcGVpZCAoZmU4MDo6MSVsbzApLCBpZgotICogICBzaW42X3Njb3BlX2lkIGlzIGZpbGxlZCAtIHN0YW5kYXJkaXphdGlvbiBzdGF0dXM/Ci0gKiAgIFhYWCBicmVha3MgYmFja3dhcmQgY29tcGF0IGZvciBjb2RlIHRoYXQgZXhwZWN0cyBubyBzY29wZWlkLgotICogICBiZXdhcmUgb24gbWVyZ2UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotX19SQ1NJRCgiJE5ldEJTRDogZ2V0bmFtZWluZm8uYyx2IDEuNTMgMjAxMi8wOS8yNiAyMzoxMzowMCBjaHJpc3RvcyBFeHAgJCIpOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxzeXMvdW4uaD4KLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpbmNsdWRlIDxuZXQvaWZfaWVlZTEzOTQuaD4KLSNpbmNsdWRlIDxuZXQvaWZfdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jZGVmaW5lIE1JTih4LHkpICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWZkIHsKLQlpbnQJCWFfYWY7Ci0Jc29ja2xlbl90CWFfYWRkcmxlbjsKLQlzb2NrbGVuX3QJYV9zb2NrbGVuOwotCWludAkJYV9vZmY7Ci19IGFmZGwgW10gPSB7Ci0jaWZkZWYgSU5FVDYKLQl7UEZfSU5FVDYsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksCi0JCW9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl9pbjYsIHNpbjZfYWRkcil9LAotI2VuZGlmCi0Je1BGX0lORVQsIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLAotCQlvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW4sIHNpbl9hZGRyKX0sCi0JezAsIDAsIDAsIDB9LAotfTsKLQotc3RydWN0IHNvY2tpbmV0IHsKLQl1X2NoYXIJc2lfbGVuOwotCXVfY2hhcglzaV9mYW1pbHk7Ci0JdV9zaG9ydAlzaV9wb3J0OwotfTsKLQotc3RhdGljIGludCBnZXRuYW1laW5mb19pbmV0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QsIGNoYXIgKiwKLSAgICBzb2NrbGVuX3QsIGNoYXIgKiwgc29ja2xlbl90LCBpbnQsIGNvbnN0IGNoYXIqLCBpbnQpOwotI2lmZGVmIElORVQ2Ci1zdGF0aWMgaW50IGlwNl9wYXJzZW51bWVyaWMoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLAotCQkJCSBzb2NrbGVuX3QsIGludCk7Ci1zdGF0aWMgaW50IGlwNl9zYTJzdHIoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqLCBjaGFyICosIHNpemVfdCwgaW50KTsKLSNlbmRpZgotc3RhdGljIGludCBnZXRuYW1laW5mb19sb2NhbChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90LCBjaGFyICosCi0gICAgc29ja2xlbl90LCBjaGFyICosIHNvY2tsZW5fdCwgaW50KTsKLQotLyoKLSAqIFRvcC1sZXZlbCBnZXRuYW1laW5mbygpIGNvZGUuICBMb29rIGF0IHRoZSBhZGRyZXNzIGZhbWlseSwgYW5kIHBpY2sgYW4KLSAqIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIGNhbGwuCi0gKi8KLWludCBnZXRuYW1laW5mbyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqIHNhLCBzb2NrbGVuX3Qgc2FsZW4sIGNoYXIqIGhvc3QsIHNpemVfdCBob3N0bGVuLCBjaGFyKiBzZXJ2LCBzaXplX3Qgc2VydmxlbiwgaW50IGZsYWdzKQotewotCXJldHVybiBhbmRyb2lkX2dldG5hbWVpbmZvZm9yaWZhY2Uoc2EsIHNhbGVuLCBob3N0LCBob3N0bGVuLCBzZXJ2LCBzZXJ2bGVuLCBmbGFncywgTlVMTCwgMCk7Ci19Ci0KLWludCBhbmRyb2lkX2dldG5hbWVpbmZvZm9yaWZhY2UoY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzYSwgc29ja2xlbl90IHNhbGVuLCBjaGFyKiBob3N0LCBzaXplX3QgaG9zdGxlbiwgY2hhciogc2Vydiwgc2l6ZV90IHNlcnZsZW4sIGludCBmbGFncywgY29uc3QgY2hhciogaWZhY2UsIGludCBtYXJrKQotewotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQljYXNlIEFGX0lORVQ2OgotCQlyZXR1cm4gZ2V0bmFtZWluZm9faW5ldChzYSwgc2FsZW4sIGhvc3QsIGhvc3RsZW4sCi0JCQkJc2Vydiwgc2VydmxlbiwgZmxhZ3MsIGlmYWNlLCBtYXJrKTsKLQljYXNlIEFGX0xPQ0FMOgotCQlyZXR1cm4gZ2V0bmFtZWluZm9fbG9jYWwoc2EsIHNhbGVuLCBob3N0LCBob3N0bGVuLAotCQkgICAgc2Vydiwgc2VydmxlbiwgZmxhZ3MpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBFQUlfRkFNSUxZOwotCX0KLX0KLQotLyoKLSAqIGdldG5hbWVpbmZvX2xvY2FsKCk6Ci0gKiBGb3JtYXQgYW4gbG9jYWwgYWRkcmVzcyBpbnRvIGEgcHJpbnRhYmxlIGZvcm1hdC4KLSAqLwotLyogQVJHU1VTRUQgKi8KLXN0YXRpYyBpbnQKLWdldG5hbWVpbmZvX2xvY2FsKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIHNvY2tsZW5fdCBzYWxlbiwKLSAgICBjaGFyICpob3N0LCBzb2NrbGVuX3QgaG9zdGxlbiwgY2hhciAqc2Vydiwgc29ja2xlbl90IHNlcnZsZW4sCi0gICAgaW50IGZsYWdzIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQotewotICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl91biAqc3VuID0KLSAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl91biAqKShjb25zdCB2b2lkICopc2E7Ci0KLSAgICAgICBpZiAoc2FsZW4gPCAoc29ja2xlbl90KSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKSkgewotICAgICAgICAgICByZXR1cm4gRUFJX0ZBTUlMWTsKLSAgICAgICB9Ci0KLSAgICAgICBpZiAoc2VydiAhPSBOVUxMICYmIHNlcnZsZW4gPiAwKQotICAgICAgICAgICAgICAgc2VydlswXSA9ICdcMCc7Ci0KLSAgICAgICBpZiAoaG9zdCAmJiBob3N0bGVuID4gMCkKLSAgICAgICAgICAgICAgIHN0cmxjcHkoaG9zdCwgc3VuLT5zdW5fcGF0aCwKLSAgICAgICAgICAgICAgICAgICBNSU4oKHNvY2tsZW5fdCkgc2l6ZW9mKHN1bi0+c3VuX3BhdGgpICsgMSwgaG9zdGxlbikpOwotCi0gICAgICAgcmV0dXJuIDA7Ci19Ci0KLS8qIE9uIHN1Y2Nlc3MgbGVuZ3RoIG9mIHRoZSBob3N0IG5hbWUgaXMgcmV0dXJuZWQuIEEgcmV0dXJuCi0gKiB2YWx1ZSBvZiAwIG1lYW5zIHRoZXJlJ3Mgbm8gaG9zdCBuYW1lIGFzc29jaWF0ZWQgd2l0aAotICogdGhlIGFkZHJlc3MuIE9uIGZhaWx1cmUgLTEgaXMgcmV0dXJuZWQgaW4gd2hpY2ggY2FzZQotICogbm9ybWFsIGV4ZWN1dGlvbiBmbG93IHNoYWxsIGNvbnRpbnVlLiAqLwotc3RhdGljIGludAotYW5kcm9pZF9nZXRob3N0YnlhZGRyX3Byb3h5KGNoYXIqIG5hbWVCdWYsIHNpemVfdCBuYW1lQnVmTGVuLCBjb25zdCB2b2lkICphZGRyLCBzb2NrbGVuX3QgYWRkckxlbiwgaW50IGFkZHJGYW1pbHksIGNvbnN0IGNoYXIqIGlmYWNlLCBpbnQgbWFyaykKLXsKLQlzdHJ1Y3QgaG9zdGVudCAqaG9zdFJlc3VsdCA9Ci0JCQlhbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZV9wcm94eShhZGRyLCBhZGRyTGVuLCBhZGRyRmFtaWx5LCBpZmFjZSwgbWFyayk7Ci0KLQlpZiAoaG9zdFJlc3VsdCA9PSBOVUxMKSByZXR1cm4gMDsKLQotCWludCBsZW5ndGhSZXN1bHQgPSBzdHJsZW4oaG9zdFJlc3VsdC0+aF9uYW1lKTsKLQotCWlmIChuYW1lQnVmKSBzdHJuY3B5KG5hbWVCdWYsIGhvc3RSZXN1bHQtPmhfbmFtZSwgbmFtZUJ1Zkxlbik7Ci0JcmV0dXJuIGxlbmd0aFJlc3VsdDsKLX0KLQotLyoKLSAqIGdldG5hbWVpbmZvX2luZXQoKToKLSAqIEZvcm1hdCBhbiBJUHY0IG9yIElQdjYgc29ja2FkZHIgaW50byBhIHByaW50YWJsZSBzdHJpbmcuCi0gKi8KLXN0YXRpYyBpbnQKLWdldG5hbWVpbmZvX2luZXQoY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzYSwgc29ja2xlbl90IHNhbGVuLAotICAgICAgIGNoYXIgKmhvc3QsIHNvY2tsZW5fdCBob3N0bGVuLAotICAgICAgIGNoYXIgKnNlcnYsIHNvY2tsZW5fdCBzZXJ2bGVuLAotICAgICAgIGludCBmbGFncywgY29uc3QgY2hhciogaWZhY2UsIGludCBtYXJrKQotewotCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKLQlzdHJ1Y3Qgc2VydmVudCAqc3A7Ci0Jc3RydWN0IGhvc3RlbnQgKmhwOwotCXVfc2hvcnQgcG9ydDsKLQlpbnQgZmFtaWx5LCBpOwotCWNvbnN0IGNoYXIgKmFkZHI7Ci0JdWludDMyX3QgdjRhOwotCWNoYXIgbnVtc2Vydls1MTJdOwotCWNoYXIgbnVtYWRkcls1MTJdOwotCi0JLyogc2EgaXMgY2hlY2tlZCBiZWxvdyAqLwotCS8qIGhvc3QgbWF5IGJlIE5VTEwgKi8KLQkvKiBzZXJ2IG1heSBiZSBOVUxMICovCi0KLQlpZiAoc2EgPT0gTlVMTCkKLQkJcmV0dXJuIEVBSV9GQUlMOwotCi0JZmFtaWx5ID0gc2EtPnNhX2ZhbWlseTsKLQlmb3IgKGkgPSAwOyBhZmRsW2ldLmFfYWY7IGkrKykKLQkJaWYgKGFmZGxbaV0uYV9hZiA9PSBmYW1pbHkpIHsKLQkJCWFmZCA9ICZhZmRsW2ldOwotCQkJZ290byBmb3VuZDsKLQkJfQotCXJldHVybiBFQUlfRkFNSUxZOwotCi0gZm91bmQ6Ci0JLy8gaHR0cDovL2IvMTg4OTI3NTogY2FsbGVycyBzaG91bGQgYmUgYWxsb3dlZCB0byBwcm92aWRlIHRvbyBtdWNoCi0JLy8gc3BhY2UsIGJ1dCBub3QgdG9vIGxpdHRsZS4KLQlpZiAoc2FsZW4gPCBhZmQtPmFfc29ja2xlbikgewotCQlyZXR1cm4gRUFJX0ZBTUlMWTsKLQl9Ci0KLQkvKiBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KLQlwb3J0ID0gKChjb25zdCBzdHJ1Y3Qgc29ja2luZXQgKikoY29uc3Qgdm9pZCAqKXNhKS0+c2lfcG9ydDsKLQlhZGRyID0gKGNvbnN0IGNoYXIgKikoY29uc3Qgdm9pZCAqKXNhICsgYWZkLT5hX29mZjsKLQotCWlmIChzZXJ2ID09IE5VTEwgfHwgc2VydmxlbiA9PSAwKSB7Ci0JCS8qCi0JCSAqIGRvIG5vdGhpbmcgaW4gdGhpcyBjYXNlLgotCQkgKiBpbiBjYXNlIHlvdSBhcmUgd29uZGVyaW5nIGlmICImJiIgaXMgbW9yZSBjb3JyZWN0IHRoYW4KLQkJICogInx8IiBoZXJlOiByZmMyNTUzYmlzLTAzIHNheXMgdGhhdCBzZXJ2ID09IE5VTEwgT1IKLQkJICogc2VydmxlbiA9PSAwIG1lYW5zIHRoYXQgdGhlIGNhbGxlciBkb2VzIG5vdCB3YW50IHRoZSByZXN1bHQuCi0JCSAqLwotCX0gZWxzZSB7Ci0JCWlmIChmbGFncyAmIE5JX05VTUVSSUNTRVJWKQotCQkJc3AgPSBOVUxMOwotCQllbHNlIHsKLQkJCXNwID0gZ2V0c2VydmJ5cG9ydChwb3J0LAotCQkJCShmbGFncyAmIE5JX0RHUkFNKSA/ICJ1ZHAiIDogInRjcCIpOwotCQl9Ci0JCWlmIChzcCkgewotCQkJaWYgKHN0cmxlbihzcC0+c19uYW1lKSArIDEgPiAoc2l6ZV90KXNlcnZsZW4pCi0JCQkJcmV0dXJuIEVBSV9NRU1PUlk7Ci0JCQlzdHJsY3B5KHNlcnYsIHNwLT5zX25hbWUsIHNlcnZsZW4pOwotCQl9IGVsc2UgewotCQkJc25wcmludGYobnVtc2Vydiwgc2l6ZW9mKG51bXNlcnYpLCAiJXUiLCBudG9ocyhwb3J0KSk7Ci0JCQlpZiAoc3RybGVuKG51bXNlcnYpICsgMSA+IChzaXplX3Qpc2VydmxlbikKLQkJCQlyZXR1cm4gRUFJX01FTU9SWTsKLQkJCXN0cmxjcHkoc2VydiwgbnVtc2Vydiwgc2Vydmxlbik7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCXY0YSA9ICh1aW50MzJfdCkKLQkJICAgIG50b2hsKCgoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopCi0JCSAgICAoY29uc3Qgdm9pZCAqKXNhKS0+c2luX2FkZHIuc19hZGRyKTsKLQkJaWYgKElOX01VTFRJQ0FTVCh2NGEpIHx8IElOX0VYUEVSSU1FTlRBTCh2NGEpKQotCQkJZmxhZ3MgfD0gTklfTlVNRVJJQ0hPU1Q7Ci0JCXY0YSA+Pj0gSU5fQ0xBU1NBX05TSElGVDsKLQkJaWYgKHY0YSA9PSAwKQotCQkJZmxhZ3MgfD0gTklfTlVNRVJJQ0hPU1Q7Ci0JCWJyZWFrOwotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkgICAgewotCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCQlzaW42ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhOwotCQlzd2l0Y2ggKHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyWzBdKSB7Ci0JCWNhc2UgMHgwMDoKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkKLQkJCQk7Ci0JCQllbHNlIGlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmc2luNi0+c2luNl9hZGRyKSkKLQkJCQk7Ci0JCQllbHNlCi0JCQkJZmxhZ3MgfD0gTklfTlVNRVJJQ0hPU1Q7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKLQkJCX0KLQkJCWVsc2UgaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luNi0+c2luNl9hZGRyKSkKLQkJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKLQkJCWJyZWFrOwotCQl9Ci0JICAgIH0KLQkJYnJlYWs7Ci0jZW5kaWYKLQl9Ci0JaWYgKGhvc3QgPT0gTlVMTCB8fCBob3N0bGVuID09IDApIHsKLQkJLyoKLQkJICogZG8gbm90aGluZyBpbiB0aGlzIGNhc2UuCi0JCSAqIGluIGNhc2UgeW91IGFyZSB3b25kZXJpbmcgaWYgIiYmIiBpcyBtb3JlIGNvcnJlY3QgdGhhbgotCQkgKiAifHwiIGhlcmU6IHJmYzI1NTNiaXMtMDMgc2F5cyB0aGF0IGhvc3QgPT0gTlVMTCBvcgotCQkgKiBob3N0bGVuID09IDAgbWVhbnMgdGhhdCB0aGUgY2FsbGVyIGRvZXMgbm90IHdhbnQgdGhlIHJlc3VsdC4KLQkJICovCi0JfSBlbHNlIGlmIChmbGFncyAmIE5JX05VTUVSSUNIT1NUKSB7Ci0JCXNpemVfdCBudW1hZGRybGVuOwotCi0JCS8qIE5VTUVSSUNIT1NUIGFuZCBOQU1FUkVRRCBjb25mbGljdHMgd2l0aCBlYWNoIG90aGVyICovCi0JCWlmIChmbGFncyAmIE5JX05BTUVSRVFEKQotCQkJcmV0dXJuIEVBSV9OT05BTUU7Ci0KLQkJc3dpdGNoKGFmZC0+YV9hZikgewotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCXsKLQkJCWludCBlcnJvcjsKLQotCQkJaWYgKChlcnJvciA9IGlwNl9wYXJzZW51bWVyaWMoc2EsIGFkZHIsIGhvc3QsCi0JCQkJCQkgICAgICBob3N0bGVuLCBmbGFncykpICE9IDApCi0JCQkJcmV0dXJuKGVycm9yKTsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCWlmIChpbmV0X250b3AoYWZkLT5hX2FmLCBhZGRyLCBudW1hZGRyLCBzaXplb2YobnVtYWRkcikpCi0JCQkgICAgPT0gTlVMTCkKLQkJCQlyZXR1cm4gRUFJX1NZU1RFTTsKLQkJCW51bWFkZHJsZW4gPSBzdHJsZW4obnVtYWRkcik7Ci0JCQlpZiAobnVtYWRkcmxlbiArIDEgPiAoc2l6ZV90KWhvc3RsZW4pIC8qIGRvbid0IGZvcmdldCB0ZXJtaW5hdG9yICovCi0JCQkJcmV0dXJuIEVBSV9NRU1PUlk7Ci0JCQlzdHJsY3B5KGhvc3QsIG51bWFkZHIsIGhvc3RsZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgaG9zdGVudCBhbmRyb2lkX3Byb3h5X2hvc3RlbnQ7Ci0JCWNoYXIgYW5kcm9pZF9wcm94eV9idWZbTUFYRE5BTUVdOwotCi0JCWludCBob3N0bmFtZWxlbiA9IGFuZHJvaWRfZ2V0aG9zdGJ5YWRkcl9wcm94eShhbmRyb2lkX3Byb3h5X2J1ZiwKLQkJCQlNQVhETkFNRSwgYWRkciwgYWZkLT5hX2FkZHJsZW4sIGFmZC0+YV9hZiwgaWZhY2UsIG1hcmspOwotCQlpZiAoaG9zdG5hbWVsZW4gPiAwKSB7Ci0JCQlocCA9ICZhbmRyb2lkX3Byb3h5X2hvc3RlbnQ7Ci0JCQlocC0+aF9uYW1lID0gYW5kcm9pZF9wcm94eV9idWY7Ci0JCX0gZWxzZSBpZiAoIWhvc3RuYW1lbGVuKSB7Ci0JCQlocCA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQlocCA9IGFuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcmlmYWNlKGFkZHIsIGFmZC0+YV9hZGRybGVuLCBhZmQtPmFfYWYsCi0JCQkJCWlmYWNlLCBtYXJrKTsKLQkJfQotCi0JCWlmIChocCkgewotI2lmIDAKLQkJCS8qCi0JCQkgKiBjb21tZW50ZWQgb3V0LCBzaW5jZSAiZm9yIGxvY2FsIGhvc3QiIGlzIG5vdAotCQkJICogaW1wbGVtZW50ZWQgaGVyZSAtIHNlZSBSRkMyNTUzIHAzMAotCQkJICovCi0JCQlpZiAoZmxhZ3MgJiBOSV9OT0ZRRE4pIHsKLQkJCQljaGFyICpwOwotCQkJCXAgPSBzdHJjaHIoaHAtPmhfbmFtZSwgJy4nKTsKLQkJCQlpZiAocCkKLQkJCQkJKnAgPSAnXDAnOwotCQkJfQotI2VuZGlmCi0JCQlpZiAoc3RybGVuKGhwLT5oX25hbWUpICsgMSA+IChzaXplX3QpaG9zdGxlbikgewotCQkJCXJldHVybiBFQUlfTUVNT1JZOwotCQkJfQotCQkJc3RybGNweShob3N0LCBocC0+aF9uYW1lLCBob3N0bGVuKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChmbGFncyAmIE5JX05BTUVSRVFEKQotCQkJCXJldHVybiBFQUlfTk9OQU1FOwotCQkJc3dpdGNoKGFmZC0+YV9hZikgewotI2lmZGVmIElORVQ2Ci0JCQljYXNlIEFGX0lORVQ2OgotCQkJewotCQkJCWludCBlcnJvcjsKLQotCQkJCWlmICgoZXJyb3IgPSBpcDZfcGFyc2VudW1lcmljKHNhLCBhZGRyLCBob3N0LAotCQkJCQkJCSAgICAgIGhvc3RsZW4sCi0JCQkJCQkJICAgICAgZmxhZ3MpKSAhPSAwKQotCQkJCQlyZXR1cm4oZXJyb3IpOwotCQkJCWJyZWFrOwotCQkJfQotI2VuZGlmCi0JCQlkZWZhdWx0OgotCQkJCWlmIChpbmV0X250b3AoYWZkLT5hX2FmLCBhZGRyLCBob3N0LAotCQkJCSAgICBob3N0bGVuKSA9PSBOVUxMKQotCQkJCQlyZXR1cm4gRUFJX1NZU1RFTTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4oMCk7Ci19Ci0KLSNpZmRlZiBJTkVUNgotc3RhdGljIGludAotaXA2X3BhcnNlbnVtZXJpYyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjb25zdCBjaGFyICphZGRyLCBjaGFyICpob3N0LAotICAgICAgIHNvY2tsZW5fdCBob3N0bGVuLCBpbnQgZmxhZ3MpCi17Ci0Jc2l6ZV90IG51bWFkZHJsZW47Ci0JY2hhciBudW1hZGRyWzUxMl07Ci0KLQlhc3NlcnQoc2EgIT0gTlVMTCk7Ci0JYXNzZXJ0KGFkZHIgIT0gTlVMTCk7Ci0JYXNzZXJ0KGhvc3QgIT0gTlVMTCk7Ci0KLQlpZiAoaW5ldF9udG9wKEFGX0lORVQ2LCBhZGRyLCBudW1hZGRyLCBzaXplb2YobnVtYWRkcikpID09IE5VTEwpCi0JCXJldHVybiBFQUlfU1lTVEVNOwotCi0JbnVtYWRkcmxlbiA9IHN0cmxlbihudW1hZGRyKTsKLQlpZiAobnVtYWRkcmxlbiArIDEgPiAoc2l6ZV90KWhvc3RsZW4pIC8qIGRvbid0IGZvcmdldCB0ZXJtaW5hdG9yICovCi0JCXJldHVybiBFQUlfT1ZFUkZMT1c7Ci0Jc3RybGNweShob3N0LCBudW1hZGRyLCBob3N0bGVuKTsKLQotCWlmICgoKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhKS0+c2luNl9zY29wZV9pZCkgewotCQljaGFyIHpvbmVidWZbTUFYSE9TVE5BTUVMRU5dOwotCQlpbnQgem9uZWxlbjsKLQotCQl6b25lbGVuID0gaXA2X3NhMnN0cigKLQkJICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKGNvbnN0IHZvaWQgKilzYSwKLQkJICAgIHpvbmVidWYsIHNpemVvZih6b25lYnVmKSwgZmxhZ3MpOwotCQlpZiAoem9uZWxlbiA8IDApCi0JCQlyZXR1cm4gRUFJX09WRVJGTE9XOwotCQlpZiAoKHNpemVfdCkgem9uZWxlbiArIDEgKyBudW1hZGRybGVuICsgMSA+IChzaXplX3QpaG9zdGxlbikKLQkJCXJldHVybiBFQUlfT1ZFUkZMT1c7Ci0JCS8qIGNvbnN0cnVjdCA8bnVtZXJpYy1hZGRyPjxkZWxpbT48em9uZWlkPiAqLwotCQltZW1jcHkoaG9zdCArIG51bWFkZHJsZW4gKyAxLCB6b25lYnVmLAotCQkgICAgKHNpemVfdCl6b25lbGVuKTsKLQkJaG9zdFtudW1hZGRybGVuXSA9IFNDT1BFX0RFTElNSVRFUjsKLQkJaG9zdFtudW1hZGRybGVuICsgMSArIHpvbmVsZW5dID0gJ1wwJzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQVJHU1VTRUQgKi8KLXN0YXRpYyBpbnQKLWlwNl9zYTJzdHIoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2E2LCBjaGFyICpidWYsIHNpemVfdCBidWZzaXosIGludCBmbGFncykKLXsKLQl1bnNpZ25lZCBpbnQgaWZpbmRleDsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmE2OwotCWludCBuOwotCi0JYXNzZXJ0KHNhNiAhPSBOVUxMKTsKLQlhc3NlcnQoYnVmICE9IE5VTEwpOwotCi0JaWZpbmRleCA9ICh1bnNpZ25lZCBpbnQpc2E2LT5zaW42X3Njb3BlX2lkOwotCWE2ID0gJnNhNi0+c2luNl9hZGRyOwotCi0jaWZkZWYgTklfTlVNRVJJQ1NDT1BFCi0JaWYgKChmbGFncyAmIE5JX05VTUVSSUNTQ09QRSkgIT0gMCkgewotCQluID0gc25wcmludGYoYnVmLCBidWZzaXosICIldSIsIHNhNi0+c2luNl9zY29wZV9pZCk7Ci0JCWlmIChuIDwgMCB8fCBuID49IGJ1ZnNpeikKLQkJCXJldHVybiAtMTsKLQkJZWxzZQotCQkJcmV0dXJuIG47Ci0JfQotI2VuZGlmCi0KLQkvKiBpZl9pbmRleHRvbmFtZSgpIGRvZXMgbm90IHRha2UgYnVmZmVyIHNpemUuICBub3QgYSBnb29kIGFwaS4uLiAqLwotCWlmICgoSU42X0lTX0FERFJfTElOS0xPQ0FMKGE2KSB8fCBJTjZfSVNfQUREUl9NQ19MSU5LTE9DQUwoYTYpKSAmJgotCSAgICBidWZzaXogPj0gSUZfTkFNRVNJWkUpIHsKLQkJY2hhciAqcCA9IGlmX2luZGV4dG9uYW1lKGlmaW5kZXgsIGJ1Zik7Ci0JCWlmIChwKSB7Ci0JCQlyZXR1cm4oc3RybGVuKHApKTsKLQkJfQotCX0KLQotCS8qIGxhc3QgcmVzb3J0ICovCi0JbiA9IHNucHJpbnRmKGJ1ZiwgYnVmc2l6LCAiJXUiLCBzYTYtPnNpbjZfc2NvcGVfaWQpOwotCWlmIChuIDwgMCB8fCAoc2l6ZV90KSBuID49IGJ1ZnNpeikKLQkJcmV0dXJuIC0xOwotCWVsc2UKLQkJcmV0dXJuIG47Ci19Ci0jZW5kaWYgLyogSU5FVDYgKi8KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lLmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5bmFtZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWE1MjhlLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlICJzZXJ2ZW50LmgiCi0KLXN0cnVjdCBzZXJ2ZW50ICoKLWdldHNlcnZieW5hbWUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcHJvdG8pCi17Ci0gICAgcmVzX3N0YXRpYyAgICAgICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKLSAgICBzdHJ1Y3Qgc2VydmVudCogIHM7Ci0KLSAgICBpZiAocnMgPT0gTlVMTCB8fCBwcm90byA9PSBOVUxMIHx8IG5hbWUgPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcnMtPnNlcnZlbnRfcHRyID0gTlVMTDsKLSAgICB3aGlsZSAoMSkgewotICAgICAgICBzdHJ1Y3Qgc2VydmVudCogIHMgPSBnZXRzZXJ2ZW50X3IocnMpOwotICAgICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICggIXN0cmNtcCggcy0+c19uYW1lLCBuYW1lICkgJiYgIXN0cmNtcCggcy0+c19wcm90bywgcHJvdG8gKSApCi0gICAgICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0LmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5cG9ydC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWQ3ZTIzLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlICJzZXJ2ZW50LmgiCi0KLXN0cnVjdCBzZXJ2ZW50ICoKLWdldHNlcnZieXBvcnQoaW50IHBvcnQsIGNvbnN0IGNoYXIgKnByb3RvKQotewotICAgIHJlc19zdGF0aWMgICAgICAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7Ci0gICAgc3RydWN0IHNlcnZlbnQqICBzOwotCi0gICAgaWYgKHJzID09IE5VTEwgfHwgcHJvdG8gPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcnMtPnNlcnZlbnRfcHRyID0gTlVMTDsKLSAgICB3aGlsZSAoMSkgewotICAgICAgICBzdHJ1Y3Qgc2VydmVudCogIHMgPSBnZXRzZXJ2ZW50X3IocnMpOwotICAgICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICggcy0+c19wb3J0ID09IHBvcnQgJiYgIXN0cmNtcCggcy0+c19wcm90bywgcHJvdG8gKSApCi0gICAgICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9uc2Rpc3BhdGNoLmMgYi9saWJjL25ldGJzZC9uZXQvbnNkaXNwYXRjaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTI4MmJlLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL25ldC9uc2Rpc3BhdGNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoJJE5ldEJTRDogbnNkaXNwYXRjaC5jLHYgMS4zMCAyMDA1LzExLzI5IDAzOjExOjU5IGNocmlzdG9zIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDA0IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgotICogYnkgTHVrZSBNZXdidXJuOyBhbmQgYnkgSmFzb24gUi4gVGhvcnBlLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECi0gKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCi0gKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLSAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMyBOZXR3b3JrcyBBc3NvY2lhdGVzIFRlY2hub2xvZ3ksIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGRldmVsb3BlZCBmb3IgdGhlIEZyZWVCU0QgUHJvamVjdCBieQotICogSmFjcXVlcyBBLiBWaWRyaW5lLCBTYWZlcG9ydCBOZXR3b3JrIFNlcnZpY2VzLCBhbmQgTmV0d29yawotICogQXNzb2NpYXRlcyBMYWJvcmF0b3JpZXMsIHRoZSBTZWN1cml0eSBSZXNlYXJjaCBEaXZpc2lvbiBvZiBOZXR3b3JrCi0gKiBBc3NvY2lhdGVzLCBJbmMuIHVuZGVyIERBUlBBL1NQQVdBUiBjb250cmFjdCBONjYwMDEtMDEtQy04MDM1Ci0gKiAoIkNCT1NTIiksIGFzIHBhcnQgb2YgdGhlIERBUlBBIENIQVRTIHJlc2VhcmNoIHByb2dyYW0uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpZmRlZiBfX0VMRl9fCi0jaW5jbHVkZSA8ZGxmY24uaD4KLSNlbmRpZiAvKiBfX0VMRl9fICovCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNkZWZpbmUgX05TX1BSSVZBVEUKLSNpbmNsdWRlIDxuc3N3aXRjaC5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1zdGF0aWMgbnNzX21ldGhvZAotX25zbWV0aG9kKGNvbnN0IGNoYXIgKnNvdXJjZSwgY29uc3QgY2hhciAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKm1ldGhvZCwKLSAgICBjb25zdCBuc19kdGFiIGRpc3BfdGFiW10sIHZvaWQgKipjYl9kYXRhKQotewotCWludAljdXJkaXNwOwotCi0JaWYgKGRpc3BfdGFiICE9IE5VTEwpIHsKLQkJZm9yIChjdXJkaXNwID0gMDsgZGlzcF90YWJbY3VyZGlzcF0uc3JjICE9IE5VTEw7IGN1cmRpc3ArKykgewotCQkJaWYgKHN0cmNhc2VjbXAoc291cmNlLCBkaXNwX3RhYltjdXJkaXNwXS5zcmMpID09IDApIHsKLQkJCQkqY2JfZGF0YSA9IGRpc3BfdGFiW2N1cmRpc3BdLmNiX2RhdGE7Ci0JCQkJcmV0dXJuIChkaXNwX3RhYltjdXJkaXNwXS5jYWxsYmFjayk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkqY2JfZGF0YSA9IE5VTEw7Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQotaW50Ci0vKkFSR1NVU0VEKi8KLW5zZGlzcGF0Y2godm9pZCAqcmV0dmFsLCBjb25zdCBuc19kdGFiIGRpc3BfdGFiW10sIGNvbnN0IGNoYXIgKmRhdGFiYXNlLAotCSAgICBjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IG5zX3NyYyBkZWZhdWx0c1tdLCAuLi4pCi17Ci0JdmFfbGlzdAkJIGFwOwotCWludAkJIGksIHJlc3VsdDsKLQljb25zdCBuc19zcmMJKnNyY2xpc3Q7Ci0JaW50CQkgc3JjbGlzdHNpemU7Ci0JbnNzX21ldGhvZAkgY2I7Ci0Jdm9pZAkJKmNiX2RhdGE7Ci0KLQkvKiByZXR2YWwgbWF5IGJlIE5VTEwgKi8KLQkvKiBkaXNwX3RhYiBtYXkgYmUgTlVMTCAqLwotCWFzc2VydChkYXRhYmFzZSAhPSBOVUxMKTsKLQlhc3NlcnQobWV0aG9kICE9IE5VTEwpOwotCWFzc2VydChkZWZhdWx0cyAhPSBOVUxMKTsKLQlpZiAoZGF0YWJhc2UgPT0gTlVMTCB8fCBtZXRob2QgPT0gTlVMTCB8fCBkZWZhdWx0cyA9PSBOVUxMKQotCQlyZXR1cm4gKE5TX1VOQVZBSUwpOwotCi0gICAgICAgIHNyY2xpc3QgPSBkZWZhdWx0czsKLSAgICAgICAgc3JjbGlzdHNpemUgPSAwOwotICAgICAgICB3aGlsZSAoc3JjbGlzdFtzcmNsaXN0c2l6ZV0ubmFtZSAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHNyY2xpc3RzaXplKys7Ci0KLQlyZXN1bHQgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IHNyY2xpc3RzaXplOyBpKyspIHsKLQkJY2IgPSBfbnNtZXRob2Qoc3JjbGlzdFtpXS5uYW1lLCBkYXRhYmFzZSwgbWV0aG9kLAotCQkgICAgZGlzcF90YWIsICZjYl9kYXRhKTsKLQkJcmVzdWx0ID0gMDsKLQkJaWYgKGNiICE9IE5VTEwpIHsKLQkJCXZhX3N0YXJ0KGFwLCBkZWZhdWx0cyk7Ci0JCQlyZXN1bHQgPSAoKmNiKShyZXR2YWwsIGNiX2RhdGEsIGFwKTsKLQkJCXZhX2VuZChhcCk7Ci0JCQlpZiAoZGVmYXVsdHNbMF0uZmxhZ3MgJiBOU19GT1JDRUFMTCkKLQkJCQljb250aW51ZTsKLQkJCWlmIChyZXN1bHQgJiBzcmNsaXN0W2ldLmZsYWdzKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCXJlc3VsdCAmPSBOU19TVEFUVVNNQVNLOwkvKiBjbGVhciBwcml2YXRlIGZsYWdzIGluIHJlc3VsdCAqLwotCi0JcmV0dXJuIChyZXN1bHQgPyByZXN1bHQgOiBOU19OT1RGT1VORCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvcmVlbnRyYW50LmggYi9saWJjL25ldGJzZC9uZXQvcmVlbnRyYW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYmZmMDguLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvbmV0L3JlZW50cmFudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCSROZXRCU0Q6IHJlZW50cmFudC5oLHYgMS4xMCAyMDA0LzEyLzE0IDAwOjIzOjE5IG5hdGhhbncgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgsIDIwMDMgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBKLlQuIENvbmtsaW4sIGJ5IE5hdGhhbiBKLiBXaWxsaWFtcywgYW5kIGJ5IEphc29uIFIuIFRob3JwZS4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAotICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwotICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFJlcXVpcmVtZW50czoKLSAqIAotICogMS4gVGhlIHRocmVhZCBzYWZlIG1lY2hhbmlzbSBzaG91bGQgYmUgbGlnaHR3ZWlnaHQgc28gdGhlIGxpYnJhcnkgY2FuCi0gKiAgICBiZSB1c2VkIGJ5IG5vbi10aHJlYWRlZCBhcHBsaWNhdGlvbnMgd2l0aG91dCB1bnJlYXNvbmFibGUgb3ZlcmhlYWQuCi0gKiAKLSAqIDIuIFRoZXJlIHNob3VsZCBiZSBubyBkZXBlbmRlbmN5IG9uIGEgdGhyZWFkIGVuZ2luZSBmb3Igbm9uLXRocmVhZGVkCi0gKiAgICBhcHBsaWNhdGlvbnMuCi0gKiAKLSAqIDMuIFRoZXJlIHNob3VsZCBiZSBubyBkZXBlbmRlbmN5IG9uIGFueSBwYXJ0aWN1bGFyIHRocmVhZCBlbmdpbmUuCi0gKiAKLSAqIDQuIFRoZSBsaWJyYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGJlIGNvbXBpbGVkIHdpdGhvdXQgc3VwcG9ydCBmb3IgdGhyZWFkCi0gKiAgICBzYWZldHkuCi0gKiAKLSAqIAotICogUmF0aW9uYWxlOgotICogCi0gKiBPbmUgYXBwcm9hY2ggZm9yIHRocmVhZCBzYWZldHkgaXMgdG8gcHJvdmlkZSBkaXNjcmV0ZSB2ZXJzaW9ucyBvZiB0aGUKLSAqIGxpYnJhcnk6IG9uZSB0aHJlYWQgc2FmZSwgdGhlIG90aGVyIG5vdC4gIFRoZSBkaXNhZHZhbnRhZ2Ugb2YgdGhpcyBpcwotICogdGhhdCBsaWJjIGlzIHJhdGhlciBsYXJnZSwgYW5kIHR3byBjb3BpZXMgb2YgYSBsaWJyYXJ5IHdoaWNoIGFyZSA5OSUrCi0gKiBpZGVudGljYWwgaXMgbm90IGFuIGVmZmljZW50IHVzZSBvZiByZXNvdXJjZXMuCi0gKiAKLSAqIEFub3RoZXIgYXBwcm9hY2ggaXMgdG8gcHJvdmlkZSBhIHNpbmdsZSB0aHJlYWQgc2FmZSBsaWJyYXJ5LiAgSG93ZXZlciwKLSAqIGl0IHNob3VsZCBub3QgYWRkIHNpZ25pZmljYW50IHJ1biB0aW1lIG9yIGNvZGUgc2l6ZSBvdmVyaGVhZCB0byBub24tCi0gKiB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuCi0gKiAKLSAqIFNpbmNlIHRoZSBOZXRCU0QgQyBsaWJyYXJ5IGlzIHVzZWQgaW4gb3RoZXIgcHJvamVjdHMsIGl0IHNob3VsZCBiZQotICogZWFzeSB0byByZXBsYWNlIHRoZSBtdXR1YWwgZXhjbHVzaW9uIHByaW1pdGl2ZXMgd2l0aCBvbmVzIHByb3ZpZGVkIGJ5Ci0gKiBhbm90aGVyIHN5c3RlbS4gIFNpbWlsYXJseSwgaXQgc2hvdWxkIGFsc28gYmUgZWFzeSB0byByZW1vdmUgYWxsCi0gKiBzdXBwb3J0IGZvciB0aHJlYWQgc2FmZXR5IGNvbXBsZXRlbHkgaWYgdGhlIHRhcmdldCBlbnZpcm9ubWVudCBkb2VzCi0gKiBub3Qgc3VwcG9ydCB0aHJlYWRzLgotICogCi0gKiAKLSAqIEltcGxlbWVudGF0aW9uIERldGFpbHM6Ci0gKiAKLSAqIFRoZSB0aHJlYWQgcHJpbWl0aXZlcyB1c2VkIGJ5IHRoZSBsaWJyYXJ5IChtdXRleF90LCBtdXRleF9sb2NrLCBldGMuKQotICogYXJlIG1hY3JvcyB3aGljaCBleHBhbmQgdG8gdGhlIGNvb3Jlc3BvbmRpbmcgcHJpbWl0aXZlcyBwcm92aWRlZCBieQotICogdGhlIHRocmVhZCBlbmdpbmUgb3IgdG8gbm90aGluZy4gIFRoZSBsYXR0ZXIgaXMgdXNlZCBzbyB0aGF0IGNvZGUgaXMKLSAqIG5vdCB1bnJlYXNvbmFibHkgY2x1dHRlcmVkIHdpdGggI2lmZGVmcyB3aGVuIGFsbCB0aHJlYWQgc2FmZSBzdXBwb3J0Ci0gKiBpcyByZW1vdmVkLgotICogCi0gKiBUaGUgdGhyZWFkIG1hY3JvcyBjYW4gYmUgZGlyZWN0bHkgbWFwcGVkIHRvIHRoZSBtdXRleCBwcmltaXRpdmVzIGZyb20KLSAqIHB0aHJlYWRzLCBob3dldmVyIGl0IHNob3VsZCBiZSByZWFzb25hYmx5IGVhc3kgdG8gd3JhcCBhbm90aGVyIG11dGV4Ci0gKiBpbXBsZW1lbnRhdGlvbiBzbyBpdCBwcmVzZW50cyBhIHNpbWlsYXIgaW50ZXJmYWNlLgotICogCi0gKiBUaGUgdGhyZWFkIGZ1bmN0aW9ucyBvcGVyYXRlIGJ5IGRpc3BhdGNoaW5nIHRvIHN5bWJvbHMgd2hpY2ggYXJlLCBieQotICogZGVmYXVsdCwgd2Vhay1hbGlhc2VkIHRvIG5vLW9wIGZ1bmN0aW9ucyBpbiB0aHJlYWQtc3R1Yi90aHJlYWQtc3R1Yi5jCi0gKiAoc29tZSB1c2VzIG9mIHRocmVhZCBvcGVyYXRpb25zIGFyZSBjb25kaXRpb25hbCBvbiBfX2lzdGhyZWFkZWQsIGJ1dAotICogbm90IGFsbCBvZiB0aGVtIGFyZSkuCi0gKgotICogV2hlbiB0aGUgdGhyZWFkIGxpYnJhcnkgaXMgbGlua2VkIGluLCBpdCBwcm92aWRlcyBzdHJvbmctYWxpYXMgdmVyc2lvbnMKLSAqIG9mIHRob3NlIHN5bWJvbHMgd2hpY2ggZGlzcGF0Y2ggdG8gaXRzIG93biByZWFsIHRocmVhZCBvcGVyYXRpb25zLgotICoKLSAqLwotCi0jaWZkZWYgX1JFRU5UUkFOVAotCi0vKgotICogQWJ0cmFjdCB0aHJlYWQgaW50ZXJmYWNlIGZvciB0aHJlYWQtc2FmZSBsaWJyYXJpZXMuICBUaGVzZSByb3V0aW5lcwotICogd2lsbCB1c2Ugc3R1YnMgaW4gbGliYyBpZiB0aGUgYXBwbGljYXRpb24gaXMgbm90IGxpbmtlZCBhZ2FpbnN0IHRoZQotICogcHRocmVhZCBsaWJyYXJ5LCBhbmQgdGhlIHJlYWwgZnVuY3Rpb24gaW4gdGhlIHB0aHJlYWQgbGlicmFyeSBpZiBpdAotICogaXMuCi0gKi8KLQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotI2RlZmluZQltdXRleF90CQkJcHRocmVhZF9tdXRleF90Ci0jZGVmaW5lCU1VVEVYX0lOSVRJQUxJWkVSCVBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKLQotI2RlZmluZQltdXRleGF0dHJfdAkJcHRocmVhZF9tdXRleGF0dHJfdAotCi0jZGVmaW5lCU1VVEVYX1RZUEVfTk9STUFMCVBUSFJFQURfTVVURVhfTk9STUFMCi0jZGVmaW5lCU1VVEVYX1RZUEVfRVJST1JDSEVDSwlQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sKLSNkZWZpbmUJTVVURVhfVFlQRV9SRUNVUlNJVkUJUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUKLQotI2RlZmluZQljb25kX3QJCQlwdGhyZWFkX2NvbmRfdAotI2RlZmluZQlDT05EX0lOSVRJQUxJWkVSCVBUSFJFQURfQ09ORF9JTklUSUFMSVpFUgotCi0jZGVmaW5lCWNvbmRhdHRyX3QJCXB0aHJlYWRfY29uZGF0dHJfdAotCi0jZGVmaW5lCXJ3bG9ja190CQlwdGhyZWFkX3J3bG9ja190Ci0jZGVmaW5lCVJXTE9DS19JTklUSUFMSVpFUglQVEhSRUFEX1JXTE9DS19JTklUSUFMSVpFUgotCi0jZGVmaW5lCXJ3bG9ja2F0dHJfdAkJcHRocmVhZF9yd2xvY2thdHRyX3QKLQotI2RlZmluZQl0aHJlYWRfa2V5X3QJCXB0aHJlYWRfa2V5X3QKLQotI2RlZmluZQl0aHJfdAkJCXB0aHJlYWRfdAotCi0jZGVmaW5lCXRocmF0dHJfdAkJcHRocmVhZF9hdHRyX3QKLQotI2RlZmluZQlvbmNlX3QJCQlwdGhyZWFkX29uY2VfdAotI2RlZmluZQlPTkNFX0lOSVRJQUxJWkVSCVBUSFJFQURfT05DRV9JTklUCi0KLSNpZm5kZWYgX19MSUJDX1RIUkVBRF9TVFVCUwotCi1fX0JFR0lOX0RFQ0xTCi1pbnQJX19saWJjX211dGV4X2luaXQobXV0ZXhfdCAqLCBjb25zdCBtdXRleGF0dHJfdCAqKTsKLWludAlfX2xpYmNfbXV0ZXhfbG9jayhtdXRleF90ICopOwotaW50CV9fbGliY19tdXRleF90cnlsb2NrKG11dGV4X3QgKik7Ci1pbnQJX19saWJjX211dGV4X3VubG9jayhtdXRleF90ICopOwotaW50CV9fbGliY19tdXRleF9kZXN0cm95KG11dGV4X3QgKik7Ci0KLWludAlfX2xpYmNfbXV0ZXhhdHRyX2luaXQobXV0ZXhhdHRyX3QgKik7Ci1pbnQJX19saWJjX211dGV4YXR0cl9zZXR0eXBlKG11dGV4YXR0cl90ICosIGludCk7Ci1pbnQJX19saWJjX211dGV4YXR0cl9kZXN0cm95KG11dGV4YXR0cl90ICopOwotX19FTkRfREVDTFMKLQotI2RlZmluZQltdXRleF9pbml0KG0sIGEpCV9fbGliY19tdXRleF9pbml0KChtKSwgKGEpKQotI2RlZmluZQltdXRleF9sb2NrKG0pCQlfX2xpYmNfbXV0ZXhfbG9jaygobSkpCi0jZGVmaW5lCW11dGV4X3RyeWxvY2sobSkJX19saWJjX211dGV4X3RyeWxvY2soKG0pKQotI2RlZmluZQltdXRleF91bmxvY2sobSkJCV9fbGliY19tdXRleF91bmxvY2soKG0pKQotI2RlZmluZQltdXRleF9kZXN0cm95KG0pCV9fbGliY19tdXRleF9kZXN0cm95KChtKSkKLQotI2RlZmluZQltdXRleGF0dHJfaW5pdChtYSkJX19saWJjX211dGV4YXR0cl9pbml0KChtYSkpCi0jZGVmaW5lCW11dGV4YXR0cl9zZXR0eXBlKG1hLCB0KSBfX2xpYmNfbXV0ZXhhdHRyX3NldHR5cGUoKG1hKSwgKHQpKQotI2RlZmluZQltdXRleGF0dHJfZGVzdHJveShtYSkJX19saWJjX211dGV4YXR0cl9kZXN0cm95KChtYSkpCi0KLV9fQkVHSU5fREVDTFMKLWludAlfX2xpYmNfY29uZF9pbml0KGNvbmRfdCAqLCBjb25zdCBjb25kYXR0cl90ICopOwotaW50CV9fbGliY19jb25kX3NpZ25hbChjb25kX3QgKik7Ci1pbnQJX19saWJjX2NvbmRfYnJvYWRjYXN0KGNvbmRfdCAqKTsKLWludAlfX2xpYmNfY29uZF93YWl0KGNvbmRfdCAqLCBtdXRleF90ICopOwotaW50CV9fbGliY19jb25kX3RpbWVkd2FpdChjb25kX3QgKiwgbXV0ZXhfdCAqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7Ci1pbnQJX19saWJjX2NvbmRfZGVzdHJveShjb25kX3QgKik7Ci1fX0VORF9ERUNMUwotCi0jZGVmaW5lCWNvbmRfaW5pdChjLCB0LCBhKSAgICAgCV9fbGliY19jb25kX2luaXQoKGMpLCAoYSkpCi0jZGVmaW5lCWNvbmRfc2lnbmFsKGMpCQlfX2xpYmNfY29uZF9zaWduYWwoKGMpKQotI2RlZmluZQljb25kX2Jyb2FkY2FzdChjKQlfX2xpYmNfY29uZF9icm9hZGNhc3QoKGMpKQotI2RlZmluZQljb25kX3dhaXQoYywgbSkJCV9fbGliY19jb25kX3dhaXQoKGMpLCAobSkpCi0jZGVmaW5lCWNvbmRfdGltZWR3YWl0KGMsIG0sIHQpCV9fbGliY19jb25kX3RpbWVkd2FpdCgoYyksIChtKSwgKHQpKQotI2RlZmluZQljb25kX2Rlc3Ryb3koYykJCV9fbGliY19jb25kX2Rlc3Ryb3koKGMpKQotCi1fX0JFR0lOX0RFQ0xTCi1pbnQJX19saWJjX3J3bG9ja19pbml0KHJ3bG9ja190ICosIGNvbnN0IHJ3bG9ja2F0dHJfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX3JkbG9jayhyd2xvY2tfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX3dybG9jayhyd2xvY2tfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX3RyeXJkbG9jayhyd2xvY2tfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX3RyeXdybG9jayhyd2xvY2tfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX3VubG9jayhyd2xvY2tfdCAqKTsKLWludAlfX2xpYmNfcndsb2NrX2Rlc3Ryb3kocndsb2NrX3QgKik7Ci1fX0VORF9ERUNMUwotCi0jZGVmaW5lCXJ3bG9ja19pbml0KGwsIGEpCV9fbGliY19yd2xvY2tfaW5pdCgobCksIChhKSkKLSNkZWZpbmUJcndsb2NrX3JkbG9jayhsKQlfX2xpYmNfcndsb2NrX3JkbG9jaygobCkpCi0jZGVmaW5lCXJ3bG9ja193cmxvY2sobCkJX19saWJjX3J3bG9ja193cmxvY2soKGwpKQotI2RlZmluZQlyd2xvY2tfdHJ5cmRsb2NrKGwpCV9fbGliY19yd2xvY2tfdHJ5cmRsb2NrKChsKSkKLSNkZWZpbmUJcndsb2NrX3RyeXdybG9jayhsKQlfX2xpYmNfcndsb2NrX3RyeXdybG9jaygobCkpCi0jZGVmaW5lCXJ3bG9ja191bmxvY2sobCkJX19saWJjX3J3bG9ja191bmxvY2soKGwpKQotI2RlZmluZQlyd2xvY2tfZGVzdHJveShsKQlfX2xpYmNfcndsb2NrX2Rlc3Ryb3koKGwpKQotCi1fX0JFR0lOX0RFQ0xTCi1pbnQJX19saWJjX3Rocl9rZXljcmVhdGUodGhyZWFkX2tleV90ICosIHZvaWQgKCopKHZvaWQgKikpOwotaW50CV9fbGliY190aHJfc2V0c3BlY2lmaWModGhyZWFkX2tleV90LCBjb25zdCB2b2lkICopOwotdm9pZAkqX19saWJjX3Rocl9nZXRzcGVjaWZpYyh0aHJlYWRfa2V5X3QpOwotaW50CV9fbGliY190aHJfa2V5ZGVsZXRlKHRocmVhZF9rZXlfdCk7Ci1fX0VORF9ERUNMUwotCi0jZGVmaW5lCXRocl9rZXljcmVhdGUoaywgZCkJX19saWJjX3Rocl9rZXljcmVhdGUoKGspLCAoZCkpCi0jZGVmaW5lCXRocl9zZXRzcGVjaWZpYyhrLCBwKQlfX2xpYmNfdGhyX3NldHNwZWNpZmljKChrKSwgKHApKQotI2RlZmluZQl0aHJfZ2V0c3BlY2lmaWMoaykJX19saWJjX3Rocl9nZXRzcGVjaWZpYygoaykpCi0jZGVmaW5lCXRocl9rZXlkZWxldGUoaykJX19saWJjX3Rocl9rZXlkZWxldGUoKGspKQotCi1fX0JFR0lOX0RFQ0xTCi1pbnQJX19saWJjX3Rocl9vbmNlKG9uY2VfdCAqLCB2b2lkICgqKSh2b2lkKSk7Ci1pbnQJX19saWJjX3Rocl9zaWdzZXRtYXNrKGludCwgY29uc3Qgc2lnc2V0X3QgKiwgc2lnc2V0X3QgKik7Ci10aHJfdAlfX2xpYmNfdGhyX3NlbGYodm9pZCk7Ci1pbnQJX19saWJjX3Rocl95aWVsZCh2b2lkKTsKLXZvaWQJX19saWJjX3Rocl9jcmVhdGUodGhyX3QgKiwgY29uc3QgdGhyYXR0cl90ICosCi0JICAgIHZvaWQgKigqKSh2b2lkICopLCB2b2lkICopOwotdm9pZAlfX2xpYmNfdGhyX2V4aXQodm9pZCAqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKLWludAkqX19saWJjX3Rocl9lcnJubyh2b2lkKTsKLWludAlfX2xpYmNfdGhyX3NldGNhbmNlbHN0YXRlKGludCwgaW50ICopOwotCi1leHRlcm4gaW50IF9faXN0aHJlYWRlZDsKLV9fRU5EX0RFQ0xTCi0KLSNkZWZpbmUJdGhyX29uY2UobywgZikJCV9fbGliY190aHJfb25jZSgobyksIChmKSkKLSNkZWZpbmUJdGhyX3NpZ3NldG1hc2soZiwgbiwgbykJX19saWJjX3Rocl9zaWdzZXRtYXNrKChmKSwgKG4pLCAobykpCi0jZGVmaW5lCXRocl9zZWxmKCkJCV9fbGliY190aHJfc2VsZigpCi0jZGVmaW5lCXRocl95aWVsZCgpCQlfX2xpYmNfdGhyX3lpZWxkKCkKLSNkZWZpbmUJdGhyX2NyZWF0ZSh0cCwgdGEsIGYsIGEpIF9fbGliY190aHJfY3JlYXRlKCh0cCksICh0YSksIChmKSwgKGEpKQotI2RlZmluZQl0aHJfZXhpdCh2KQkJX19saWJjX3Rocl9leGl0KCh2KSkKLSNkZWZpbmUJdGhyX2Vycm5vKCkJCV9fbGliY190aHJfZXJybm8oKQotI2RlZmluZQl0aHJfZW5hYmxlZCgpCQkoX19pc3RocmVhZGVkKQotI2RlZmluZSB0aHJfc2V0Y2FuY2Vsc3RhdGUobiwgbykgX19saWJjX3Rocl9zZXRjYW5jZWxzdGF0ZSgobiksKG8pKQotI2VuZGlmIC8qIF9fTElCQ19USFJFQURfU1RVQlMgKi8KLQotI2RlZmluZQlGTE9DS0ZJTEUoZnApCQlfX2Zsb2NrZmlsZV9pbnRlcm5hbChmcCwgMSkKLSNkZWZpbmUJRlVOTE9DS0ZJTEUoZnApCQlfX2Z1bmxvY2tmaWxlX2ludGVybmFsKGZwLCAxKQotCi0jZWxzZSAvKiBfUkVFTlRSQU5UICovCi0KLSNkZWZpbmUJbXV0ZXhfaW5pdChtLCBhKQotI2RlZmluZQltdXRleF9sb2NrKG0pCi0jZGVmaW5lCW11dGV4X3RyeWxvY2sobSkKLSNkZWZpbmUJbXV0ZXhfdW5sb2NrKG0pCi0jZGVmaW5lCW11dGV4X2Rlc3Ryb3kobSkKLQotI2RlZmluZQljb25kX2luaXQoYywgdCwgYSkKLSNkZWZpbmUJY29uZF9zaWduYWwoYykKLSNkZWZpbmUJY29uZF9icm9hZGNhc3QoYykKLSNkZWZpbmUJY29uZF93YWl0KGMsIG0pCi0jZGVmaW5lCWNvbmRfdGltZWR3YWl0KGMsIG0sIHQpCi0jZGVmaW5lCWNvbmRfZGVzdHJveShjKQotCi0jZGVmaW5lCXJ3bG9ja19pbml0KGwsIGEpCi0jZGVmaW5lCXJ3bG9ja19yZGxvY2sobCkKLSNkZWZpbmUJcndsb2NrX3dybG9jayhsKQotI2RlZmluZQlyd2xvY2tfdHJ5cmRsb2NrKGwpCi0jZGVmaW5lCXJ3bG9ja190cnl3cmxvY2sobCkKLSNkZWZpbmUJcndsb2NrX3VubG9jayhsKQotI2RlZmluZQlyd2xvY2tfZGVzdHJveShsKQotCi0jZGVmaW5lCXRocl9rZXljcmVhdGUoaywgZCkKLSNkZWZpbmUJdGhyX3NldHNwZWNpZmljKGssIHApCi0jZGVmaW5lCXRocl9nZXRzcGVjaWZpYyhrKQotI2RlZmluZQl0aHJfa2V5ZGVsZXRlKGspCi0KLSNkZWZpbmUJdGhyX29uY2UobywgZikKLSNkZWZpbmUJdGhyX3NpZ3NldG1hc2soZiwgbiwgbykKLSNkZWZpbmUJdGhyX3NlbGYoKQotI2RlZmluZQl0aHJfZXJybm8oKQotCi0jZGVmaW5lCUZMT0NLRklMRShmcCkJCQotI2RlZmluZQlGVU5MT0NLRklMRShmcCkJCQotCi0jZW5kaWYgLyogX1JFRU5UUkFOVCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L2hlcnJvci5jIGIvbGliYy9uZXRic2QvcmVzb2x2L2hlcnJvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTBlNjQxLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9oZXJyb3IuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKgkkTmV0QlNEOiBoZXJyb3IuYyx2IDEuNCAyMDA0LzA1LzIzIDA1OjA5OjUyIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKLSAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmZGVmIG5vdGRlZgotc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKWhlcnJvci5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci1zdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBoZXJyb3IuYyx2IDEuMi4yMDYuMSAyMDA0LzAzLzA5IDA4OjMzOjU0IG1hcmthIEV4cCI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDogaGVycm9yLmMsdiAxLjQgMjAwNC8wNS8yMyAwNTowOTo1MiBjaHJpc3RvcyBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3Vpby5oPgotCi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotCi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2Vsc2UKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaWZuZGVmIERFX0NPTlNUCi0jZGVmaW5lIERFX0NPTlNUKGMsdikgICB2ID0gKChjKSA/IFwKLSAgICBzdHJjaHIoKGNvbnN0IHZvaWQgKikoYyksICooY29uc3QgY2hhciAqKShjb25zdCB2b2lkICopKGMpKSA6IE5VTEwpCi0jZW5kaWYKLQotY29uc3QgY2hhciAqIGNvbnN0IGhfZXJybGlzdFtdID0gewotCSJSZXNvbHZlciBFcnJvciAwIChubyBlcnJvcikiLAotCSJVbmtub3duIGhvc3QiLAkJCQkvKiAxIEhPU1RfTk9UX0ZPVU5EICovCi0JIkhvc3QgbmFtZSBsb29rdXAgZmFpbHVyZSIsCQkvKiAyIFRSWV9BR0FJTiAqLwotCSJVbmtub3duIHNlcnZlciBlcnJvciIsCQkJLyogMyBOT19SRUNPVkVSWSAqLwotCSJObyBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCBuYW1lIiwJLyogNCBOT19BRERSRVNTICovCi19OwotY29uc3QgaW50CWhfbmVyciA9IHsgc2l6ZW9mIGhfZXJybGlzdCAvIHNpemVvZiBoX2Vycmxpc3RbMF0gfTsKLQotLyoKLSAqIGhlcnJvciAtLQotICoJcHJpbnQgdGhlIGVycm9yIGluZGljYXRlZCBieSB0aGUgaF9lcnJubyB2YWx1ZS4KLSAqLwotdm9pZAotaGVycm9yKGNvbnN0IGNoYXIgKnMpIHsKLQlzdHJ1Y3QgaW92ZWMgaW92WzRdLCAqdiA9IGlvdjsKLQljaGFyICp0OwotCi0JaWYgKHMgIT0gTlVMTCAmJiAqcyAhPSAnXDAnKSB7Ci0JCURFX0NPTlNUKHMsIHQpOwotCQl2LT5pb3ZfYmFzZSA9IHQ7Ci0JCXYtPmlvdl9sZW4gPSBzdHJsZW4odCk7Ci0JCXYrKzsKLQkJREVfQ09OU1QoIjogIiwgdCk7Ci0JCXYtPmlvdl9iYXNlID0gdDsKLQkJdi0+aW92X2xlbiA9IDI7Ci0JCXYrKzsKLQl9Ci0JREVfQ09OU1QoaHN0cmVycm9yKGhfZXJybm8pLCB0KTsKLQl2LT5pb3ZfYmFzZSA9IHQ7Ci0Jdi0+aW92X2xlbiA9IHN0cmxlbih2LT5pb3ZfYmFzZSk7Ci0JdisrOwotCURFX0NPTlNUKCJcbiIsIHQpOwotCXYtPmlvdl9iYXNlID0gdDsKLQl2LT5pb3ZfbGVuID0gMTsKLQl3cml0ZXYoU1RERVJSX0ZJTEVOTywgaW92LCAodiAtIGlvdikgKyAxKTsKLX0KLQotLyoKLSAqIGhzdHJlcnJvciAtLQotICoJcmV0dXJuIHRoZSBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gImhvc3QiIGVycm5vIHZhbHVlLgotICovCi1jb25zdCBjaGFyICoKLWhzdHJlcnJvcihpbnQgZXJyKSB7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiAoIlJlc29sdmVyIGludGVybmFsIGVycm9yIik7Ci0JZWxzZSBpZiAoZXJyIDwgaF9uZXJyKQotCQlyZXR1cm4gKGhfZXJybGlzdFtlcnJdKTsKLQlyZXR1cm4gKCJVbmtub3duIHJlc29sdmVyIGVycm9yIik7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NhY2hlLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NhY2hlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZGYwODUuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jYWNoZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSAicHRocmVhZC5oIgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLSNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2luY2x1ZGUgPGxpbnV4L2lmLmg+Ci0KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2luY2x1ZGUgInJlc29sdl9pZmFjZS5oIgotI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCi0KLS8qIFRoaXMgY29kZSBpbXBsZW1lbnRzIGEgc21hbGwgYW5kICpzaW1wbGUqIEROUyByZXNvbHZlciBjYWNoZS4KLSAqCi0gKiBJdCBpcyBvbmx5IHVzZWQgdG8gY2FjaGUgRE5TIGFuc3dlcnMgZm9yIGEgdGltZSBkZWZpbmVkIGJ5IHRoZSBzbWFsbGVzdCBUVEwKLSAqIGFtb25nIHRoZSBhbnN3ZXIgcmVjb3JkcyBpbiBvcmRlciB0byByZWR1Y2UgRE5TIHRyYWZmaWMuIEl0IGlzIG5vdCBzdXBwb3NlZAotICogdG8gYmUgYSBmdWxsIEROUyBjYWNoZSwgc2luY2Ugd2UgcGxhbiB0byBpbXBsZW1lbnQgdGhhdCBpbiB0aGUgZnV0dXJlIGluIGEKLSAqIGRlZGljYXRlZCBwcm9jZXNzIHJ1bm5pbmcgb24gdGhlIHN5c3RlbS4KLSAqCi0gKiBOb3RlIHRoYXQgaXRzIGRlc2lnbiBpcyBrZXB0IHNpbXBsZSB2ZXJ5IGludGVudGlvbmFsbHksIGkuZS46Ci0gKgotICogIC0gaXQgdGFrZXMgcmF3IEROUyBxdWVyeSBwYWNrZXQgZGF0YSBhcyBpbnB1dCwgYW5kIHJldHVybnMgcmF3IEROUwotICogICAgYW5zd2VyIHBhY2tldCBkYXRhIGFzIG91dHB1dAotICoKLSAqICAgICh0aGlzIG1lYW5zIHRoYXQgdHdvIHNpbWlsYXIgcXVlcmllcyB0aGF0IGVuY29kZSB0aGUgRE5TIG5hbWUKLSAqICAgICBkaWZmZXJlbnRseSB3aWxsIGJlIHRyZWF0ZWQgZGlzdGluY3RseSkuCi0gKgotICogICAgdGhlIHNtYWxsZXN0IFRUTCB2YWx1ZSBhbW9uZyB0aGUgYW5zd2VyIHJlY29yZHMgYXJlIHVzZWQgYXMgdGhlIHRpbWUKLSAqICAgIHRvIGtlZXAgYW4gYW5zd2VyIGluIHRoZSBjYWNoZS4KLSAqCi0gKiAgICB0aGlzIGlzIGJhZCwgYnV0IHdlIGFic29sdXRlbHkgd2FudCB0byBhdm9pZCBwYXJzaW5nIHRoZSBhbnN3ZXIgcGFja2V0cwotICogICAgKGFuZCBzaG91bGQgYmUgc29sdmVkIGJ5IHRoZSBsYXRlciBmdWxsIEROUyBjYWNoZSBwcm9jZXNzKS4KLSAqCi0gKiAgLSB0aGUgaW1wbGVtZW50YXRpb24gaXMganVzdCBhIChxdWVyeS1kYXRhKSA9PiAoYW5zd2VyLWRhdGEpIGhhc2ggdGFibGUKLSAqICAgIHdpdGggYSB0cml2aWFsIGxlYXN0LXJlY2VudGx5LXVzZWQgZXhwaXJhdGlvbiBwb2xpY3kuCi0gKgotICogRG9pbmcgdGhpcyBrZWVwcyB0aGUgY29kZSBzaW1wbGUgYW5kIGF2b2lkcyB0byBkZWFsIHdpdGggYSBsb3Qgb2YgdGhpbmdzCi0gKiB0aGF0IGEgZnVsbCBETlMgY2FjaGUgaXMgZXhwZWN0ZWQgdG8gZG8uCi0gKgotICogVGhlIEFQSSBpcyBhbHNvIHZlcnkgc2ltcGxlOgotICoKLSAqICAgLSB0aGUgY2xpZW50IGNhbGxzIF9yZXNvbHZfY2FjaGVfZ2V0KCkgdG8gb2J0YWluIGEgaGFuZGxlIHRvIHRoZSBjYWNoZS4KLSAqICAgICB0aGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgY2FjaGUgb24gZmlyc3QgdXNhZ2UuIHRoZSByZXN1bHQgY2FuIGJlIE5VTEwKLSAqICAgICBpZiB0aGUgY2FjaGUgaXMgZGlzYWJsZWQuCi0gKgotICogICAtIHRoZSBjbGllbnQgY2FsbHMgX3Jlc29sdl9jYWNoZV9sb29rdXAoKSBiZWZvcmUgcGVyZm9ybWluZyBhIHF1ZXJ5Ci0gKgotICogICAgIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIFJFU09MVl9DQUNIRV9GT1VORCwgYSBjb3B5IG9mIHRoZSBhbnN3ZXIgZGF0YQotICogICAgIGhhcyBiZWVuIGNvcGllZCBpbnRvIHRoZSBjbGllbnQtcHJvdmlkZWQgYW5zd2VyIGJ1ZmZlci4KLSAqCi0gKiAgICAgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgUkVTT0xWX0NBQ0hFX05PVEZPVU5ELCB0aGUgY2xpZW50IHNob3VsZCBwZXJmb3JtCi0gKiAgICAgYSByZXF1ZXN0IG5vcm1hbGx5LCAqdGhlbiogY2FsbCBfcmVzb2x2X2NhY2hlX2FkZCgpIHRvIGFkZCB0aGUgcmVjZWl2ZWQKLSAqICAgICBhbnN3ZXIgdG8gdGhlIGNhY2hlLgotICoKLSAqICAgICBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBSRVNPTFZfQ0FDSEVfVU5TVVBQT1JURUQsIHRoZSBjbGllbnQgc2hvdWxkCi0gKiAgICAgcGVyZm9ybSBhIHJlcXVlc3Qgbm9ybWFsbHksIGFuZCAqbm90KiBjYWxsIF9yZXNvbHZfY2FjaGVfYWRkKCkKLSAqCi0gKiAgICAgbm90ZSB0aGF0IFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBhbnN3ZXIgYnVmZmVyCi0gKiAgICAgaXMgdG9vIHNob3J0IHRvIGFjY29tb2RhdGUgdGhlIGNhY2hlZCByZXN1bHQuCi0gKgotICogIC0gd2hlbiBuZXR3b3JrIHNldHRpbmdzIGNoYW5nZSwgdGhlIGNhY2hlIG11c3QgYmUgZmx1c2hlZCBzaW5jZSB0aGUgbGlzdAotICogICAgb2YgRE5TIHNlcnZlcnMgcHJvYmFibHkgY2hhbmdlZC4gdGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcKLSAqICAgIF9yZXNvbHZfY2FjaGVfcmVzZXQoKQotICoKLSAqICAgIHRoZSBwYXJhbWV0ZXIgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGFuIGV2ZXItaW5jcmVhc2luZyBnZW5lcmF0aW9uCi0gKiAgICBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCBuZXR3b3JrIHNldHRpbmdzIHN0YXRlLgotICoKLSAqICAgIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHNldmVyYWwgdGhyZWFkcyBjb3VsZCBkZXRlY3QgdGhlIHNhbWUgbmV0d29yawotICogICAgc2V0dGluZ3MgY2hhbmdlIChidXQgYXQgZGlmZmVyZW50IHRpbWVzKSBhbmQgd2lsbCBhbGwgZW5kIHVwIGNhbGxpbmcgdGhlCi0gKiAgICBzYW1lIGZ1bmN0aW9uLiBDb21wYXJpbmcgd2l0aCB0aGUgbGFzdCB1c2VkIGdlbmVyYXRpb24gbnVtYmVyIGVuc3VyZXMKLSAqICAgIHRoYXQgdGhlIGNhY2hlIGlzIG9ubHkgZmx1c2hlZCBvbmNlIHBlciBuZXR3b3JrIGNoYW5nZS4KLSAqLwotCi0vKiB0aGUgbmFtZSBvZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB0aGUgZmlyc3QgdGltZQotICogdGhpcyBjb2RlIGlzIGNhbGxlZCBpZiBpdHMgdmFsdWUgaXMgIjAiLCB0aGVuIHRoZSByZXNvbHZlciBjYWNoZSBpcwotICogZGlzYWJsZWQuCi0gKi8KLSNkZWZpbmUgIENPTkZJR19FTlYgICJCSU9OSUNfRE5TQ0FDSEUiCi0KLS8qIGVudHJpZXMgb2xkZXIgdGhhbiBDT05GSUdfU0VDT05EUyBzZWNvbmRzIGFyZSBhbHdheXMgZGlzY2FyZGVkLgotICovCi0jZGVmaW5lICBDT05GSUdfU0VDT05EUyAgICAoNjAqMTApICAgIC8qIDEwIG1pbnV0ZXMgKi8KLQotLyogZGVmYXVsdCBudW1iZXIgb2YgZW50cmllcyBrZXB0IGluIHRoZSBjYWNoZS4gVGhpcyB2YWx1ZSBoYXMgYmVlbgotICogZGV0ZXJtaW5lZCBieSBicm93c2luZyB0aHJvdWdoIHZhcmlvdXMgc2l0ZXMgYW5kIGNvdW50aW5nIHRoZSBudW1iZXIKLSAqIG9mIGNvcnJlc3BvbmRpbmcgcmVxdWVzdHMuIEtlZXAgaW4gbWluZCB0aGF0IG91ciBmcmFtZXdvcmsgaXMgY3VycmVudGx5Ci0gKiBwZXJmb3JtaW5nIHR3byByZXF1ZXN0cyBwZXIgbmFtZSBsb29rdXAgKG9uZSBmb3IgSVB2NCwgdGhlIG90aGVyIGZvciBJUHY2KQotICoKLSAqICAgIHd3dy5nb29nbGUuY29tICAgICAgNAotICogICAgd3d3LnlzZWFyY2guY29tICAgICA2Ci0gKiAgICB3d3cuYW1hem9uLmNvbSAgICAgIDgKLSAqICAgIHd3dy5ueXRpbWVzLmNvbSAgICAgMjIKLSAqICAgIHd3dy5lc3BuLmNvbSAgICAgICAgMjgKLSAqICAgIHd3dy5tc24uY29tICAgICAgICAgMjgKLSAqICAgIHd3dy5sZW1vbmRlLmZyICAgICAgMzUKLSAqCi0gKiAoZGV0ZXJtaW5lZCBpbiAyMDA5LTItMTcgZnJvbSBQYXJpcywgRnJhbmNlLCByZXN1bHRzIG1heSB2YXJ5IGRlcGVuZGluZwotICogIG9uIGxvY2F0aW9uKQotICoKLSAqIG1vc3QgaGlnaC1sZXZlbCB3ZWJzaXRlcyB1c2UgbG90cyBvZiBtZWRpYS9hZCBzZXJ2ZXJzIHdpdGggZGlmZmVyZW50IG5hbWVzCi0gKiBidXQgdGhlc2UgYXJlIGdlbmVyYWxseSByZXVzZWQgd2hlbiBicm93c2luZyB0aHJvdWdoIHRoZSBzaXRlLgotICoKLSAqIEFzIHN1Y2gsIGEgdmFsdWUgb2YgNjQgc2hvdWxkIGJlIHJlbGF0aXZlbHkgY29tZm9ydGFibGUgYXQgdGhlIG1vbWVudC4KLSAqCi0gKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICogTk9URSAtIHRoaXMgaGFzIGNoYW5nZWQuCi0gKiAqIDEpIHdlJ3ZlIGFkZGVkIElQdjYgc3VwcG9ydCBzbyBlYWNoIGRucyBxdWVyeSByZXN1bHRzIGluIDIgcmVzcG9uc2VzCi0gKiAqIDIpIHdlJ3ZlIG1hZGUgdGhpcyBhIHN5c3RlbS13aWRlIGNhY2hlLCBzbyB0aGUgY29zdCBpcyBsZXNzIChpdCdzIG5vdAotICogKiAgICBkdXBsaWNhdGVkIGluIGVhY2ggcHJvY2VzcykgYW5kIHRoZSBuZWVkIGlzIGdyZWF0ZXIgKG1vcmUgcHJvY2Vzc2VzCi0gKiAqICAgIG1ha2luZyBkaWZmZXJlbnQgcmVxdWVzdHMpLgotICogKiBVcHBpbmcgYnkgMnggZm9yIElQdjYKLSAqICogVXBwaW5nIGJ5IGFub3RoZXIgNXggZm9yIHRoZSBjZW50cmFsaXplZCBuYXR1cmUKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLSNkZWZpbmUgIENPTkZJR19NQVhfRU5UUklFUyAgICA2NCAqIDIgKiA1Ci0vKiBuYW1lIG9mIHRoZSBzeXN0ZW0gcHJvcGVydHkgdGhhdCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGNhY2hlIHNpemUgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0vKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIHNldCB0byAxIHRvIGRlYnVnIGNhY2hlIG9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgIERFQlVHICAgICAgIDAKLQotLyogc2V0IHRvIDEgdG8gZGVidWcgcXVlcnkgZGF0YSAqLwotI2RlZmluZSAgREVCVUdfREFUQSAgMAotCi0jdW5kZWYgWExPRwotI2lmIERFQlVHCi0jICBpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgotIyAgZGVmaW5lIFhMT0coLi4uKSAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsImxpYmMiLF9fVkFfQVJHU19fKQotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotLyoqIEJPVU5ERUQgQlVGRkVSIEZPUk1BVFRJTkcKLSAqKi8KLQotLyogdGVjaG5pY2FsIG5vdGU6Ci0gKgotICogICB0aGUgZm9sbG93aW5nIGRlYnVnZ2luZyByb3V0aW5lcyBhcmUgdXNlZCB0byBhcHBlbmQgZGF0YSB0byBhIGJvdW5kZWQKLSAqICAgYnVmZmVyIHRoZXkgdGFrZSB0d28gcGFyYW1ldGVycyB0aGF0IGFyZToKLSAqCi0gKiAgIC0gcCA6IGEgcG9pbnRlciB0byB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlcgotICogICAgICAgICB0aGlzIHZhbHVlIGlzIGluaXRpYWxseSBzZXQgdG8gdGhlIGJ1ZmZlcidzIGFkZHJlc3MuCi0gKgotICogICAtIGVuZCA6IHRoZSBhZGRyZXNzIG9mIHRoZSBidWZmZXIncyBsaW1pdCwgaS5lLiBvZiB0aGUgZmlyc3QgYnl0ZQotICogICAgICAgICAgIGFmdGVyIHRoZSBidWZmZXIuIHRoaXMgYWRkcmVzcyBzaG91bGQgbmV2ZXIgYmUgdG91Y2hlZC4KLSAqCi0gKiAgICAgICAgICAgSU1QT1JUQU5UOiBpdCBpcyBhc3N1bWVkIHRoYXQgZW5kID4gYnVmZmVyX2FkZHJlc3MsIGkuZS4KLSAqICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIGJ1ZmZlciBpcyBhdCBsZWFzdCBvbmUgYnl0ZS4KLSAqCi0gKiAgIHRoZSBfYnByaW50XygpIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG5ldyB2YWx1ZSBvZiAncCcgYWZ0ZXIgdGhlIGRhdGEKLSAqICAgaGFzIGJlZW4gYXBwZW5kZWQsIGFuZCBhbHNvIGVuc3VyZSB0aGUgZm9sbG93aW5nOgotICoKLSAqICAgLSB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBuZXZlciBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gJ2VuZCcKLSAqCi0gKiAgIC0gYSByZXR1cm4gdmFsdWUgZXF1YWwgdG8gJ2VuZCcgbWVhbnMgdGhhdCB0cnVuY2F0aW9uIG9jY3VyZWQKLSAqICAgICAoaW4gd2hpY2ggY2FzZSwgZW5kWy0xXSB3aWxsIGJlIHNldCB0byAwKQotICoKLSAqICAgLSBhZnRlciByZXR1cm5pbmcgZnJvbSBhIF9icHJpbnRfKCkgZnVuY3Rpb24sIHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIKLSAqICAgICBpcyBhbHdheXMgMC10ZXJtaW5hdGVkLCBldmVuIGluIHRoZSBldmVudCBvZiB0cnVuY2F0aW9uLgotICoKLSAqICB0aGVzZSBjb252ZW50aW9ucyBhbGxvdyB5b3UgdG8gY2FsbCBfYnByaW50XyBmdW5jdGlvbnMgbXVsdGlwbGUgdGltZXMgYW5kCi0gKiAgb25seSBjaGVjayBmb3IgdHJ1bmNhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSwgYXMgaW46Ci0gKgotICogICAgIGNoYXIgIGJ1ZmZbMTAwMF0sICpwID0gYnVmZiwgKmVuZCA9IHAgKyBzaXplb2YoYnVmZik7Ci0gKgotICogICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCAnIicpOwotICogICAgIHAgPSBfYnByaW50X3MocCwgZW5kLCBteV9zdHJpbmcpOwotICogICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCAnIicpOwotICoKLSAqICAgICBpZiAocCA+PSBlbmQpIHsKLSAqICAgICAgICAvLyBidWZmZXIgd2FzIHRvbyBzbWFsbAotICogICAgIH0KLSAqCi0gKiAgICAgcHJpbnRmKCAiJXMiLCBidWZmICk7Ci0gKi8KLQotLyogYWRkIGEgY2hhciB0byBhIGJvdW5kZWQgYnVmZmVyICovCi1zdGF0aWMgY2hhcioKLV9icHJpbnRfYyggY2hhciogIHAsIGNoYXIqICBlbmQsIGludCAgYyApCi17Ci0gICAgaWYgKHAgPCBlbmQpIHsKLSAgICAgICAgaWYgKHArMSA9PSBlbmQpCi0gICAgICAgICAgICAqcCsrID0gMDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAqcCsrID0gKGNoYXIpIGM7Ci0gICAgICAgICAgICAqcCAgID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcDsKLX0KLQotLyogYWRkIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLwotc3RhdGljIGNoYXIqCi1fYnByaW50X2IoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBjb25zdCBjaGFyKiAgYnVmLCBpbnQgIGxlbiApCi17Ci0gICAgaW50ICBhdmFpbCA9IGVuZCAtIHA7Ci0KLSAgICBpZiAoYXZhaWwgPD0gMCB8fCBsZW4gPD0gMCkKLSAgICAgICAgcmV0dXJuIHA7Ci0KLSAgICBpZiAoYXZhaWwgPiBsZW4pCi0gICAgICAgIGF2YWlsID0gbGVuOwotCi0gICAgbWVtY3B5KCBwLCBidWYsIGF2YWlsICk7Ci0gICAgcCArPSBhdmFpbDsKLQotICAgIGlmIChwIDwgZW5kKQotICAgICAgICBwWzBdID0gMDsKLSAgICBlbHNlCi0gICAgICAgIGVuZFstMV0gPSAwOwotCi0gICAgcmV0dXJuIHA7Ci19Ci0KLS8qIGFkZCBhIHN0cmluZyB0byBhIGJvdW5kZWQgYnVmZmVyICovCi1zdGF0aWMgY2hhcioKLV9icHJpbnRfcyggY2hhciogIHAsIGNoYXIqICBlbmQsIGNvbnN0IGNoYXIqICBzdHIgKQotewotICAgIHJldHVybiBfYnByaW50X2IocCwgZW5kLCBzdHIsIHN0cmxlbihzdHIpKTsKLX0KLQotLyogYWRkIGEgZm9ybWF0dGVkIHN0cmluZyB0byBhIGJvdW5kZWQgYnVmZmVyICovCi1zdGF0aWMgY2hhcioKLV9icHJpbnQoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBjb25zdCBjaGFyKiAgZm9ybWF0LCAuLi4gKQotewotICAgIGludCAgICAgIGF2YWlsLCBuOwotICAgIHZhX2xpc3QgIGFyZ3M7Ci0KLSAgICBhdmFpbCA9IGVuZCAtIHA7Ci0KLSAgICBpZiAoYXZhaWwgPD0gMCkKLSAgICAgICAgcmV0dXJuIHA7Ci0KLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIG4gPSB2c25wcmludGYoIHAsIGF2YWlsLCBmb3JtYXQsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLQotICAgIC8qIGNlcnRhaW4gQyBsaWJyYXJpZXMgcmV0dXJuIC0xIGluIGNhc2Ugb2YgdHJ1bmNhdGlvbiAqLwotICAgIGlmIChuIDwgMCB8fCBuID4gYXZhaWwpCi0gICAgICAgIG4gPSBhdmFpbDsKLQotICAgIHAgKz0gbjsKLSAgICAvKiBjZXJ0YWluIEMgbGlicmFyaWVzIGRvIG5vdCB6ZXJvLXRlcm1pbmF0ZSBpbiBjYXNlIG9mIHRydW5jYXRpb24gKi8KLSAgICBpZiAocCA9PSBlbmQpCi0gICAgICAgIHBbLTFdID0gMDsKLQotICAgIHJldHVybiBwOwotfQotCi0vKiBhZGQgYSBoZXggdmFsdWUgdG8gYSBib3VuZGVkIGJ1ZmZlciwgdXAgdG8gOCBkaWdpdHMgKi8KLXN0YXRpYyBjaGFyKgotX2JwcmludF9oZXgoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCB1bnNpZ25lZCAgdmFsdWUsIGludCAgbnVtRGlnaXRzICkKLXsKLSAgICBjaGFyICAgdGV4dFtzaXplb2YodW5zaWduZWQpKjJdOwotICAgIGludCAgICBubiA9IDA7Ci0KLSAgICB3aGlsZSAobnVtRGlnaXRzLS0gPiAwKSB7Ci0gICAgICAgIHRleHRbbm4rK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKHZhbHVlID4+IChudW1EaWdpdHMqNCkpICYgMTVdOwotICAgIH0KLSAgICByZXR1cm4gX2JwcmludF9iKHAsIGVuZCwgdGV4dCwgbm4pOwotfQotCi0vKiBhZGQgdGhlIGhleGFkZWNpbWFsIGR1bXAgb2Ygc29tZSBtZW1vcnkgYXJlYSB0byBhIGJvdW5kZWQgYnVmZmVyICovCi1zdGF0aWMgY2hhcioKLV9icHJpbnRfaGV4ZHVtcCggY2hhciogIHAsIGNoYXIqICBlbmQsIGNvbnN0IHVpbnQ4X3QqICBkYXRhLCBpbnQgIGRhdGFsZW4gKQotewotICAgIGludCAgIGxpbmVTaXplID0gMTY7Ci0KLSAgICB3aGlsZSAoZGF0YWxlbiA+IDApIHsKLSAgICAgICAgaW50ICBhdmFpbCA9IGRhdGFsZW47Ci0gICAgICAgIGludCAgbm47Ci0KLSAgICAgICAgaWYgKGF2YWlsID4gbGluZVNpemUpCi0gICAgICAgICAgICBhdmFpbCA9IGxpbmVTaXplOwotCi0gICAgICAgIGZvciAobm4gPSAwOyBubiA8IGF2YWlsOyBubisrKSB7Ci0gICAgICAgICAgICBpZiAobm4gPiAwKQotICAgICAgICAgICAgICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCAnICcpOwotICAgICAgICAgICAgcCA9IF9icHJpbnRfaGV4KHAsIGVuZCwgZGF0YVtubl0sIDIpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoIDsgbm4gPCBsaW5lU2l6ZTsgbm4rKyApIHsKLSAgICAgICAgICAgIHAgPSBfYnByaW50X3MocCwgZW5kLCAiICAgIik7Ci0gICAgICAgIH0KLSAgICAgICAgcCA9IF9icHJpbnRfcyhwLCBlbmQsICIgICIpOwotCi0gICAgICAgIGZvciAobm4gPSAwOyBubiA8IGF2YWlsOyBubisrKSB7Ci0gICAgICAgICAgICBpbnQgIGMgPSBkYXRhW25uXTsKLQotICAgICAgICAgICAgaWYgKGMgPCAzMiB8fCBjID4gMTI3KQotICAgICAgICAgICAgICAgIGMgPSAnLic7Ci0KLSAgICAgICAgICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCBjKTsKLSAgICAgICAgfQotICAgICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJ1xuJyk7Ci0KLSAgICAgICAgZGF0YSAgICArPSBhdmFpbDsKLSAgICAgICAgZGF0YWxlbiAtPSBhdmFpbDsKLSAgICB9Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLS8qIGR1bXAgdGhlIGNvbnRlbnQgb2YgYSBxdWVyeSBvZiBwYWNrZXQgdG8gdGhlIGxvZyAqLwotc3RhdGljIHZvaWQKLVhMT0dfQllURVMoIGNvbnN0IHZvaWQqICBiYXNlLCBpbnQgIGxlbiApCi17Ci0gICAgY2hhciAgYnVmZlsxMDI0XTsKLSAgICBjaGFyKiAgcCA9IGJ1ZmYsICplbmQgPSBwICsgc2l6ZW9mKGJ1ZmYpOwotCi0gICAgcCA9IF9icHJpbnRfaGV4ZHVtcChwLCBlbmQsIGJhc2UsIGxlbik7Ci0gICAgWExPRygiJXMiLGJ1ZmYpOwotfQotCi0jZWxzZSAvKiAhREVCVUcgKi8KLSMgIGRlZmluZSAgWExPRyguLi4pICAgICAgICAoKHZvaWQpMCkKLSMgIGRlZmluZSAgWExPR19CWVRFUyhhLGIpICAoKHZvaWQpMCkKLSNlbmRpZgotCi1zdGF0aWMgdGltZV90Ci1fdGltZV9ub3coIHZvaWQgKQotewotICAgIHN0cnVjdCB0aW1ldmFsICB0djsKLQotICAgIGdldHRpbWVvZmRheSggJnR2LCBOVUxMICk7Ci0gICAgcmV0dXJuIHR2LnR2X3NlYzsKLX0KLQotLyogcmVtaW5kZXI6IHRoZSBnZW5lcmFsIGZvcm1hdCBvZiBhIEROUyBwYWNrZXQgaXMgdGhlIGZvbGxvd2luZzoKLSAqCi0gKiAgICBIRUFERVIgICgxMiBieXRlcykKLSAqICAgIFFVRVNUSU9OICAodmFyaWFibGUpCi0gKiAgICBBTlNXRVIgKHZhcmlhYmxlKQotICogICAgQVVUSE9SSVRZICh2YXJpYWJsZSkKLSAqICAgIEFERElUSU9OTkFMICh2YXJpYWJsZSkKLSAqCi0gKiB0aGUgSEVBREVSIGlzIG1hZGUgb2Y6Ci0gKgotICogICBJRCAgICAgOiAxNiA6IDE2LWJpdCB1bmlxdWUgcXVlcnkgaWRlbnRpZmljYXRpb24gZmllbGQKLSAqCi0gKiAgIFFSICAgICA6ICAxIDogc2V0IHRvIDAgZm9yIHF1ZXJpZXMsIGFuZCAxIGZvciByZXNwb25zZXMKLSAqICAgT3Bjb2RlIDogIDQgOiBzZXQgdG8gMCBmb3IgcXVlcmllcwotICogICBBQSAgICAgOiAgMSA6IHNldCB0byAwIGZvciBxdWVyaWVzCi0gKiAgIFRDICAgICA6ICAxIDogdHJ1bmNhdGlvbiBmbGFnLCB3aWxsIGJlIHNldCB0byAwIGluIHF1ZXJpZXMKLSAqICAgUkQgICAgIDogIDEgOiByZWN1cnNpb24gZGVzaXJlZAotICoKLSAqICAgUkEgICAgIDogIDEgOiByZWN1cnNpb24gYXZhaWxhYmxlICgwIGluIHF1ZXJpZXMpCi0gKiAgIFogICAgICA6ICAzIDogdGhyZWUgcmVzZXJ2ZWQgemVybyBiaXRzCi0gKiAgIFJDT0RFICA6ICA0IDogcmVzcG9uc2UgY29kZSAoYWx3YXlzIDA9Tk9FUlJPUiBpbiBxdWVyaWVzKQotICoKLSAqICAgUURDb3VudDogMTYgOiBxdWVzdGlvbiBjb3VudAotICogICBBTkNvdW50OiAxNiA6IEFuc3dlciBjb3VudCAoMCBpbiBxdWVyaWVzKQotICogICBOU0NvdW50OiAxNjogQXV0aG9yaXR5IFJlY29yZCBjb3VudCAoMCBpbiBxdWVyaWVzKQotICogICBBUkNvdW50OiAxNjogQWRkaXRpb25uYWwgUmVjb3JkIGNvdW50ICgwIGluIHF1ZXJpZXMpCi0gKgotICogdGhlIFFVRVNUSU9OIGlzIG1hZGUgb2YgUURDb3VudCBRdWVzdGlvbiBSZWNvcmQgKFFScykKLSAqIHRoZSBBTlNXRVIgaXMgbWFkZSBvZiBBTkNvdW50IFJScwotICogdGhlIEFVVEhPUklUWSBpcyBtYWRlIG9mIE5TQ291bnQgUlJzCi0gKiB0aGUgQURESVRJT05OQUwgaXMgbWFkZSBvZiBBUkNvdW50IFJScwotICoKLSAqIEVhY2ggUXVlc3Rpb24gUmVjb3JkIChRUikgaXMgbWFkZSBvZjoKLSAqCi0gKiAgIFFOQU1FICAgOiB2YXJpYWJsZSA6IFF1ZXJ5IEROUyBOQU1FCi0gKiAgIFRZUEUgICAgOiAxNiAgICAgICA6IHR5cGUgb2YgcXVlcnkgKEE9MSwgUFRSPTEyLCBNWD0xNSwgQUFBQT0yOCwgQUxMPTI1NSkKLSAqICAgQ0xBU1MgICA6IDE2ICAgICAgIDogY2xhc3Mgb2YgcXVlcnkgKElOPTEpCi0gKgotICogRWFjaCBSZXNvdXJjZSBSZWNvcmQgKFJSKSBpcyBtYWRlIG9mOgotICoKLSAqICAgTkFNRSAgICA6IHZhcmlhYmxlIDogRE5TIE5BTUUKLSAqICAgVFlQRSAgICA6IDE2ICAgICAgIDogdHlwZSBvZiBxdWVyeSAoQT0xLCBQVFI9MTIsIE1YPTE1LCBBQUFBPTI4LCBBTEw9MjU1KQotICogICBDTEFTUyAgIDogMTYgICAgICAgOiBjbGFzcyBvZiBxdWVyeSAoSU49MSkKLSAqICAgVFRMICAgICA6IDMyICAgICAgIDogc2Vjb25kcyB0byBjYWNoZSB0aGlzIFJSICgwPW5vbmUpCi0gKiAgIFJETEVOR1RIOiAxNiAgICAgICA6IHNpemUgb2YgUkREQVRBIGluIGJ5dGVzCi0gKiAgIFJEREFUQSAgOiB2YXJpYWJsZSA6IFJSIGRhdGEgKGRlcGVuZHMgb24gVFlQRSkKLSAqCi0gKiBFYWNoIFFOQU1FIGNvbnRhaW5zIGEgZG9tYWluIG5hbWUgZW5jb2RlZCBhcyBhIHNlcXVlbmNlIG9mICdsYWJlbHMnCi0gKiB0ZXJtaW5hdGVkIGJ5IGEgemVyby4gRWFjaCBsYWJlbCBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci0gKgotICogICAgTEVOICA6IDggICAgIDogbGVuZ2h0IG9mIGxhYmVsIChNVVNUIGJlIDwgNjQpCi0gKiAgICBOQU1FIDogOCpMRU4gOiBsYWJlbCBsZW5ndGggKG11c3QgZXhjbHVkZSBkb3RzKQotICoKLSAqIEEgdmFsdWUgb2YgMCBpbiB0aGUgZW5jb2RpbmcgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlICdyb290JyBkb21haW4gYW5kCi0gKiB0ZXJtaW5hdGVzIHRoZSBlbmNvZGluZy4gU28gJ3d3dy5hbmRyb2lkLmNvbScgd2lsbCBiZSBlbmNvZGVkIGFzOgotICoKLSAqICAgPDM+d3d3PDc+YW5kcm9pZDwzPmNvbTwwPgotICoKLSAqIFdoZXJlIDxuPiByZXByZXNlbnRzIHRoZSBieXRlIHdpdGggdmFsdWUgJ24nCi0gKgotICogRWFjaCBOQU1FIHJlZmxlY3RzIHRoZSBRTkFNRSBvZiB0aGUgcXVlc3Rpb24sIGJ1dCBoYXMgYSBzbGlnaHRseSBtb3JlCi0gKiBjb21wbGV4IGVuY29kaW5nIGluIG9yZGVyIHRvIHByb3ZpZGUgbWVzc2FnZSBjb21wcmVzc2lvbi4gVGhpcyBpcyBhY2hpZXZlZAotICogYnkgdXNpbmcgYSAyLWJ5dGUgcG9pbnRlciwgd2l0aCBmb3JtYXQ6Ci0gKgotICogICAgVFlQRSAgIDogMiAgOiAwYjExIHRvIGluZGljYXRlIGEgcG9pbnRlciwgMGIwMSBhbmQgMGIxMCBhcmUgcmVzZXJ2ZWQKLSAqICAgIE9GRlNFVCA6IDE0IDogb2Zmc2V0IHRvIGFub3RoZXIgcGFydCBvZiB0aGUgRE5TIHBhY2tldAotICoKLSAqIFRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBETlMgcGFja2V0IGFuZCBtdXN0IHBvaW50Ci0gKiBBIHBvaW50ZXIgdGVybWluYXRlcyB0aGUgZW5jb2RpbmcuCi0gKgotICogVGhlIE5BTUUgY2FuIGJlIGVuY29kZWQgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKLSAqCi0gKiAgIC0gYSBzZXF1ZW5jZSBvZiBzaW1wbGUgbGFiZWxzIHRlcm1pbmF0ZWQgYnkgMCAobGlrZSBRTkFNRXMpCi0gKiAgIC0gYSBzaW5nbGUgcG9pbnRlcgotICogICAtIGEgc2VxdWVuY2Ugb2Ygc2ltcGxlIGxhYmVscyB0ZXJtaW5hdGVkIGJ5IGEgcG9pbnRlcgotICoKLSAqIEEgcG9pbnRlciBzaGFsbCBhbHdheXMgcG9pbnQgdG8gZWl0aGVyIGEgcG9pbnRlciBvZiBhIHNlcXVlbmNlIG9mCi0gKiBsYWJlbHMgKHdoaWNoIGNhbiB0aGVtc2VsdmVzIGJlIHRlcm1pbmF0ZWQgYnkgZWl0aGVyIGEgMCBvciBhIHBvaW50ZXIpCi0gKgotICogVGhlIGV4cGFuZGVkIGxlbmd0aCBvZiBhIGdpdmVuIGRvbWFpbiBuYW1lIHNob3VsZCBub3QgZXhjZWVkIDI1NSBieXRlcy4KLSAqCi0gKiBOT1RFOiB3ZSBkb24ndCBwYXJzZSB0aGUgYW5zd2VyIHBhY2tldHMsIHNvIGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIE5BTUUKLSAqICAgICAgIHJlY29yZHMsIG9ubHkgUU5BTUVzLgotICovCi0KLSNkZWZpbmUgIEROU19IRUFERVJfU0laRSAgMTIKLQotI2RlZmluZSAgRE5TX1RZUEVfQSAgICJcMDBcMDEiICAgLyogYmlnLWVuZGlhbiBkZWNpbWFsIDEgKi8KLSNkZWZpbmUgIEROU19UWVBFX1BUUiAiXDAwXDAxNCIgIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAxMiAqLwotI2RlZmluZSAgRE5TX1RZUEVfTVggICJcMDBcMDE3IiAgLyogYmlnLWVuZGlhbiBkZWNpbWFsIDE1ICovCi0jZGVmaW5lICBETlNfVFlQRV9BQUFBICJcMDBcMDM0IiAvKiBiaWctZW5kaWFuIGRlY2ltYWwgMjggKi8KLSNkZWZpbmUgIEROU19UWVBFX0FMTCAiXDAwXDAzNzciIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAyNTUgKi8KLQotI2RlZmluZSAgRE5TX0NMQVNTX0lOICJcMDBcMDEiICAgLyogYmlnLWVuZGlhbiBkZWNpbWFsIDEgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNvbnN0IHVpbnQ4X3QqICBiYXNlOwotICAgIGNvbnN0IHVpbnQ4X3QqICBlbmQ7Ci0gICAgY29uc3QgdWludDhfdCogIGN1cnNvcjsKLX0gRG5zUGFja2V0OwotCi1zdGF0aWMgdm9pZAotX2Ruc1BhY2tldF9pbml0KCBEbnNQYWNrZXQqICBwYWNrZXQsIGNvbnN0IHVpbnQ4X3QqICBidWZmLCBpbnQgIGJ1ZmZsZW4gKQotewotICAgIHBhY2tldC0+YmFzZSAgID0gYnVmZjsKLSAgICBwYWNrZXQtPmVuZCAgICA9IGJ1ZmYgKyBidWZmbGVuOwotICAgIHBhY2tldC0+Y3Vyc29yID0gYnVmZjsKLX0KLQotc3RhdGljIHZvaWQKLV9kbnNQYWNrZXRfcmV3aW5kKCBEbnNQYWNrZXQqICBwYWNrZXQgKQotewotICAgIHBhY2tldC0+Y3Vyc29yID0gcGFja2V0LT5iYXNlOwotfQotCi1zdGF0aWMgdm9pZAotX2Ruc1BhY2tldF9za2lwKCBEbnNQYWNrZXQqICBwYWNrZXQsIGludCAgY291bnQgKQotewotICAgIGNvbnN0IHVpbnQ4X3QqICBwID0gcGFja2V0LT5jdXJzb3IgKyBjb3VudDsKLQotICAgIGlmIChwID4gcGFja2V0LT5lbmQpCi0gICAgICAgIHAgPSBwYWNrZXQtPmVuZDsKLQotICAgIHBhY2tldC0+Y3Vyc29yID0gcDsKLX0KLQotc3RhdGljIGludAotX2Ruc1BhY2tldF9yZWFkSW50MTYoIERuc1BhY2tldCogIHBhY2tldCApCi17Ci0gICAgY29uc3QgdWludDhfdCogIHAgPSBwYWNrZXQtPmN1cnNvcjsKLQotICAgIGlmIChwKzIgPiBwYWNrZXQtPmVuZCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgcGFja2V0LT5jdXJzb3IgPSBwKzI7Ci0gICAgcmV0dXJuIChwWzBdPDwgOCkgfCBwWzFdOwotfQotCi0vKiogUVVFUlkgQ0hFQ0tJTkcKLSAqKi8KLQotLyogY2hlY2sgYnl0ZXMgaW4gYSBkbnMgcGFja2V0LiByZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLgotICogdGhlIGN1cnNvciBpcyBvbmx5IGFkdmFuY2VkIGluIHRoZSBjYXNlIG9mIHN1Y2Nlc3MKLSAqLwotc3RhdGljIGludAotX2Ruc1BhY2tldF9jaGVja0J5dGVzKCBEbnNQYWNrZXQqICBwYWNrZXQsIGludCAgbnVtQnl0ZXMsIGNvbnN0IHZvaWQqICBieXRlcyApCi17Ci0gICAgY29uc3QgdWludDhfdCogIHAgPSBwYWNrZXQtPmN1cnNvcjsKLQotICAgIGlmIChwICsgbnVtQnl0ZXMgPiBwYWNrZXQtPmVuZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobWVtY21wKHAsIGJ5dGVzLCBudW1CeXRlcykgIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBwYWNrZXQtPmN1cnNvciA9IHAgKyBudW1CeXRlczsKLSAgICByZXR1cm4gMTsKLX0KLQotLyogcGFyc2UgYW5kIHNraXAgYSBnaXZlbiBRTkFNRSBzdG9yZWQgaW4gYSBxdWVyeSBwYWNrZXQsCi0gKiBmcm9tIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4gcmV0dXJucyAxIG9uIHN1Y2Nlc3MsCi0gKiBvciAwIGZvciBtYWxmb3JtZWQgZGF0YS4KLSAqLwotc3RhdGljIGludAotX2Ruc1BhY2tldF9jaGVja1FOYW1lKCBEbnNQYWNrZXQqICBwYWNrZXQgKQotewotICAgIGNvbnN0IHVpbnQ4X3QqICBwICAgPSBwYWNrZXQtPmN1cnNvcjsKLSAgICBjb25zdCB1aW50OF90KiAgZW5kID0gcGFja2V0LT5lbmQ7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGludCAgYzsKLQotICAgICAgICBpZiAocCA+PSBlbmQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjID0gKnArKzsKLQotICAgICAgICBpZiAoYyA9PSAwKSB7Ci0gICAgICAgICAgICBwYWNrZXQtPmN1cnNvciA9IHA7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHdlIGRvbid0IGV4cGVjdCBsYWJlbCBjb21wcmVzc2lvbiBpbiBRTkFNRXMgKi8KLSAgICAgICAgaWYgKGMgPj0gNjQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBwICs9IGM7Ci0gICAgICAgIC8qIHdlIHJlbHkgb24gdGhlIGJvdW5kIGNoZWNrIGF0IHRoZSBzdGFydAotICAgICAgICAgKiBvZiB0aGUgbG9vcCBoZXJlICovCi0gICAgfQotICAgIC8qIG1hbGZvcm1lZCBkYXRhICovCi0gICAgWExPRygibWFsZm9ybWVkIFFOQU1FIik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHBhcnNlIGFuZCBza2lwIGEgZ2l2ZW4gUVIgc3RvcmVkIGluIGEgcGFja2V0LgotICogcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIGFuZCAwIG9uIGZhaWx1cmUKLSAqLwotc3RhdGljIGludAotX2Ruc1BhY2tldF9jaGVja1FSKCBEbnNQYWNrZXQqICBwYWNrZXQgKQotewotICAgIGlmICghX2Ruc1BhY2tldF9jaGVja1FOYW1lKHBhY2tldCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLyogVFlQRSBtdXN0IGJlIG9uZSBvZiB0aGUgdGhpbmdzIHdlIHN1cHBvcnQgKi8KLSAgICBpZiAoIV9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIEROU19UWVBFX0EpICYmCi0gICAgICAgICFfZG5zUGFja2V0X2NoZWNrQnl0ZXMocGFja2V0LCAyLCBETlNfVFlQRV9QVFIpICYmCi0gICAgICAgICFfZG5zUGFja2V0X2NoZWNrQnl0ZXMocGFja2V0LCAyLCBETlNfVFlQRV9NWCkgJiYKLSAgICAgICAgIV9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIEROU19UWVBFX0FBQUEpICYmCi0gICAgICAgICFfZG5zUGFja2V0X2NoZWNrQnl0ZXMocGFja2V0LCAyLCBETlNfVFlQRV9BTEwpKQotICAgIHsKLSAgICAgICAgWExPRygidW5zdXBwb3J0ZWQgVFlQRSIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgLyogQ0xBU1MgbXVzdCBiZSBJTiAqLwotICAgIGlmICghX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgRE5TX0NMQVNTX0lOKSkgewotICAgICAgICBYTE9HKCJ1bnN1cHBvcnRlZCBDTEFTUyIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMTsKLX0KLQotLyogY2hlY2sgdGhlIGhlYWRlciBvZiBhIEROUyBRdWVyeSBwYWNrZXQsIHJldHVybiAxIGlmIGl0IGlzIG9uZQotICogdHlwZSBvZiBxdWVyeSB3ZSBjYW4gY2FjaGUsIG9yIDAgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQKLV9kbnNQYWNrZXRfY2hlY2tRdWVyeSggRG5zUGFja2V0KiAgcGFja2V0ICkKLXsKLSAgICBjb25zdCB1aW50OF90KiAgcCA9IHBhY2tldC0+YmFzZTsKLSAgICBpbnQgICAgICAgICAgICAgcWRDb3VudCwgYW5Db3VudCwgZG5Db3VudCwgYXJDb3VudDsKLQotICAgIGlmIChwICsgRE5TX0hFQURFUl9TSVpFID4gcGFja2V0LT5lbmQpIHsKLSAgICAgICAgWExPRygicXVlcnkgcGFja2V0IHRvbyBzbWFsbCIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiBRUiBtdXN0IGJlIHNldCB0byAwLCBvcGNvZGUgbXVzdCBiZSAwIGFuZCBBQSBtdXN0IGJlIDAgKi8KLSAgICAvKiBSQSwgWiwgYW5kIFJDT0RFIG11c3QgYmUgMCAqLwotICAgIGlmICgocFsyXSAmIDB4RkMpICE9IDAgfHwgcFszXSAhPSAwKSB7Ci0gICAgICAgIFhMT0coInF1ZXJ5IHBhY2tldCBmbGFncyB1bnN1cHBvcnRlZCIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiBOb3RlIHRoYXQgd2UgaWdub3JlIHRoZSBUQyBhbmQgUkQgYml0cyBoZXJlIGZvciB0aGUKLSAgICAgKiBmb2xsb3dpbmcgcmVhc29uczoKLSAgICAgKgotICAgICAqIC0gdGhlcmUgaXMgbm8gcG9pbnQgZm9yIGEgcXVlcnkgcGFja2V0IHNlbnQgdG8gYSBzZXJ2ZXIKLSAgICAgKiAgIHRvIGhhdmUgdGhlIFRDIGJpdCBzZXQsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gbWlnaHQKLSAgICAgKiAgIHNldCB0aGUgYml0IGluIHRoZSBxdWVyeSBidWZmZXIgZm9yIGl0cyBvd24gbmVlZHMKLSAgICAgKiAgIGJldHdlZW4gYSBfcmVzb2x2X2NhY2hlX2xvb2t1cCBhbmQgYQotICAgICAqICAgX3Jlc29sdl9jYWNoZV9hZGQuIFdlIHNob3VsZCBub3QgZnJlYWsgb3V0IGlmIHRoaXMKLSAgICAgKiAgIGlzIHRoZSBjYXNlLgotICAgICAqCi0gICAgICogLSB3ZSBjb25zaWRlciB0aGF0IHRoZSByZXN1bHQgZnJvbSBhIFJEPTAgb3IgYSBSRD0xCi0gICAgICogICBxdWVyeSBtaWdodCBiZSBkaWZmZXJlbnQsIGhlbmNlIHRoYXQgdGhlIFJEIGJpdAotICAgICAqICAgc2hvdWxkIGJlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBjYWNoZWQgcmVzdWx0LgotICAgICAqCi0gICAgICogICB0aGlzIGltcGxpZXMgdGhhdCBSRCBpcyBjaGVja2VkIHdoZW4gaGFzaGluZyBvcgotICAgICAqICAgY29tcGFyaW5nIHF1ZXJ5IHBhY2tldHMsIGJ1dCBub3QgVEMKLSAgICAgKi8KLQotICAgIC8qIEFOQ09VTlQsIEROQ09VTlQgYW5kIEFSQ09VTlQgbXVzdCBiZSAwICovCi0gICAgcWRDb3VudCA9IChwWzRdIDw8IDgpIHwgcFs1XTsKLSAgICBhbkNvdW50ID0gKHBbNl0gPDwgOCkgfCBwWzddOwotICAgIGRuQ291bnQgPSAocFs4XSA8PCA4KSB8IHBbOV07Ci0gICAgYXJDb3VudCA9IChwWzEwXTw8IDgpIHwgcFsxMV07Ci0KLSAgICBpZiAoYW5Db3VudCAhPSAwIHx8IGRuQ291bnQgIT0gMCB8fCBhckNvdW50ICE9IDApIHsKLSAgICAgICAgWExPRygicXVlcnkgcGFja2V0IGNvbnRhaW5zIG5vbi1xdWVyeSByZWNvcmRzIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChxZENvdW50ID09IDApIHsKLSAgICAgICAgWExPRygicXVlcnkgcGFja2V0IGRvZXNuJ3QgY29udGFpbiBxdWVyeSByZWNvcmQiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyogQ2hlY2sgUURDT1VOVCBRUnMgKi8KLSAgICBwYWNrZXQtPmN1cnNvciA9IHAgKyBETlNfSEVBREVSX1NJWkU7Ci0KLSAgICBmb3IgKDtxZENvdW50ID4gMDsgcWRDb3VudC0tKQotICAgICAgICBpZiAoIV9kbnNQYWNrZXRfY2hlY2tRUihwYWNrZXQpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gMTsKLX0KLQotLyoqIFFVRVJZIERFQlVHR0lORwotICoqLwotI2lmIERFQlVHCi1zdGF0aWMgY2hhcioKLV9kbnNQYWNrZXRfYnByaW50UU5hbWUoRG5zUGFja2V0KiAgcGFja2V0LCBjaGFyKiAgYnAsIGNoYXIqICBiZW5kKQotewotICAgIGNvbnN0IHVpbnQ4X3QqICBwICAgPSBwYWNrZXQtPmN1cnNvcjsKLSAgICBjb25zdCB1aW50OF90KiAgZW5kID0gcGFja2V0LT5lbmQ7Ci0gICAgaW50ICAgICAgICAgICAgIGZpcnN0ID0gMTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgaW50ICBjOwotCi0gICAgICAgIGlmIChwID49IGVuZCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGMgPSAqcCsrOwotCi0gICAgICAgIGlmIChjID09IDApIHsKLSAgICAgICAgICAgIHBhY2tldC0+Y3Vyc29yID0gcDsKLSAgICAgICAgICAgIHJldHVybiBicDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHdlIGRvbid0IGV4cGVjdCBsYWJlbCBjb21wcmVzc2lvbiBpbiBRTkFNRXMgKi8KLSAgICAgICAgaWYgKGMgPj0gNjQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoZmlyc3QpCi0gICAgICAgICAgICBmaXJzdCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJwID0gX2JwcmludF9jKGJwLCBiZW5kLCAnLicpOwotCi0gICAgICAgIGJwID0gX2JwcmludF9iKGJwLCBiZW5kLCAoY29uc3QgY2hhciopcCwgYyk7Ci0KLSAgICAgICAgcCArPSBjOwotICAgICAgICAvKiB3ZSByZWx5IG9uIHRoZSBib3VuZCBjaGVjayBhdCB0aGUgc3RhcnQKLSAgICAgICAgICogb2YgdGhlIGxvb3AgaGVyZSAqLwotICAgIH0KLSAgICAvKiBtYWxmb3JtZWQgZGF0YSAqLwotICAgIGJwID0gX2JwcmludF9zKGJwLCBiZW5kLCAiPE1BTEZPUk1FRD4iKTsKLSAgICByZXR1cm4gYnA7Ci19Ci0KLXN0YXRpYyBjaGFyKgotX2Ruc1BhY2tldF9icHJpbnRRUihEbnNQYWNrZXQqICBwYWNrZXQsIGNoYXIqICBwLCBjaGFyKiAgZW5kKQotewotI2RlZmluZSAgUVEoeCkgICB7IEROU19UWVBFXyMjeCwgI3ggfQotICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewotICAgICAgICBjb25zdCBjaGFyKiAgdHlwZUJ5dGVzOwotICAgICAgICBjb25zdCBjaGFyKiAgdHlwZVN0cmluZzsKLSAgICB9IHFUeXBlc1tdID0KLSAgICB7Ci0gICAgICAgIFFRKEEpLCBRUShQVFIpLCBRUShNWCksIFFRKEFBQUEpLCBRUShBTEwpLAotICAgICAgICB7IE5VTEwsIE5VTEwgfQotICAgIH07Ci0gICAgaW50ICAgICAgICAgIG5uOwotICAgIGNvbnN0IGNoYXIqICB0eXBlU3RyaW5nID0gTlVMTDsKLQotICAgIC8qIGR1bXAgUU5BTUUgKi8KLSAgICBwID0gX2Ruc1BhY2tldF9icHJpbnRRTmFtZShwYWNrZXQsIHAsIGVuZCk7Ci0KLSAgICAvKiBkdW1wIFRZUEUgKi8KLSAgICBwID0gX2JwcmludF9zKHAsIGVuZCwgIiAoIik7Ci0KLSAgICBmb3IgKG5uID0gMDsgcVR5cGVzW25uXS50eXBlQnl0ZXMgIT0gTlVMTDsgbm4rKykgewotICAgICAgICBpZiAoX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgcVR5cGVzW25uXS50eXBlQnl0ZXMpKSB7Ci0gICAgICAgICAgICB0eXBlU3RyaW5nID0gcVR5cGVzW25uXS50eXBlU3RyaW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodHlwZVN0cmluZyAhPSBOVUxMKQotICAgICAgICBwID0gX2JwcmludF9zKHAsIGVuZCwgdHlwZVN0cmluZyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGludCAgdHlwZUNvZGUgPSBfZG5zUGFja2V0X3JlYWRJbnQxNihwYWNrZXQpOwotICAgICAgICBwID0gX2JwcmludChwLCBlbmQsICJVTktOT1dOLSVkIiwgdHlwZUNvZGUpOwotICAgIH0KLQotICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCAnKScpOwotCi0gICAgLyogc2tpcCBDTEFTUyAqLwotICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDIpOwotICAgIHJldHVybiBwOwotfQotCi0vKiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIHBhY2tldCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQgKi8KLXN0YXRpYyBjaGFyKgotX2Ruc1BhY2tldF9icHJpbnRRdWVyeSggRG5zUGFja2V0KiAgcGFja2V0LCBjaGFyKiAgcCwgY2hhciogIGVuZCApCi17Ci0gICAgaW50ICAgcWRDb3VudDsKLQotICAgIGlmIChwYWNrZXQtPmJhc2VbMl0gJiAweDEpIHsKLSAgICAgICAgcCA9IF9icHJpbnRfcyhwLCBlbmQsICJSRUNVUlNJVkUgIik7Ci0gICAgfQotCi0gICAgX2Ruc1BhY2tldF9za2lwKHBhY2tldCwgNCk7Ci0gICAgcWRDb3VudCA9IF9kbnNQYWNrZXRfcmVhZEludDE2KHBhY2tldCk7Ci0gICAgX2Ruc1BhY2tldF9za2lwKHBhY2tldCwgNik7Ci0KLSAgICBmb3IgKCA7IHFkQ291bnQgPiAwOyBxZENvdW50LS0gKSB7Ci0gICAgICAgIHAgPSBfZG5zUGFja2V0X2JwcmludFFSKHBhY2tldCwgcCwgZW5kKTsKLSAgICB9Ci0gICAgcmV0dXJuIHA7Ci19Ci0jZW5kaWYKLQotCi0vKiogUVVFUlkgSEFTSElORyBTVVBQT1JUCi0gKioKLSAqKiBUSEUgRk9MTE9XSU5HIENPREUgQVNTVU1FUyBUSEFUIFRIRSBJTlBVVCBQQUNLRVQgSEFTIEFMUkVBRFkKLSAqKiBCRUVOIFNVQ0NFU0ZVTExZIENIRUNLRUQuCi0gKiovCi0KLS8qIHVzZSAzMi1iaXQgRk5WIGhhc2ggZnVuY3Rpb24gKi8KLSNkZWZpbmUgIEZOVl9NVUxUICAgMTY3Nzc2MTlVCi0jZGVmaW5lICBGTlZfQkFTSVMgIDIxNjYxMzYyNjFVCi0KLXN0YXRpYyB1bnNpZ25lZAotX2Ruc1BhY2tldF9oYXNoQnl0ZXMoIERuc1BhY2tldCogIHBhY2tldCwgaW50ICBudW1CeXRlcywgdW5zaWduZWQgIGhhc2ggKQotewotICAgIGNvbnN0IHVpbnQ4X3QqICBwICAgPSBwYWNrZXQtPmN1cnNvcjsKLSAgICBjb25zdCB1aW50OF90KiAgZW5kID0gcGFja2V0LT5lbmQ7Ci0KLSAgICB3aGlsZSAobnVtQnl0ZXMgPiAwICYmIHAgPCBlbmQpIHsKLSAgICAgICAgaGFzaCA9IGhhc2gqRk5WX01VTFQgXiAqcCsrOwotICAgIH0KLSAgICBwYWNrZXQtPmN1cnNvciA9IHA7Ci0gICAgcmV0dXJuIGhhc2g7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkCi1fZG5zUGFja2V0X2hhc2hRTmFtZSggRG5zUGFja2V0KiAgcGFja2V0LCB1bnNpZ25lZCAgaGFzaCApCi17Ci0gICAgY29uc3QgdWludDhfdCogIHAgICA9IHBhY2tldC0+Y3Vyc29yOwotICAgIGNvbnN0IHVpbnQ4X3QqICBlbmQgPSBwYWNrZXQtPmVuZDsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgaW50ICBjOwotCi0gICAgICAgIGlmIChwID49IGVuZCkgeyAgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KLSAgICAgICAgICAgIFhMT0coIiVzOiBJTlRFUk5BTF9FUlJPUjogcmVhZC1vdmVyZmxvdyAhIVxuIiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYyA9ICpwKys7Ci0KLSAgICAgICAgaWYgKGMgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChjID49IDY0KSB7Ci0gICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IG1hbGZvcm1lZCBkb21haW4gISFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAocCArIGMgPj0gZW5kKSB7Ci0gICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IHNpbXBsZSBsYWJlbCByZWFkLW92ZXJmbG93ICEhXG4iLAotICAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKGMgPiAwKSB7Ci0gICAgICAgICAgICBoYXNoID0gaGFzaCpGTlZfTVVMVCBeICpwKys7Ci0gICAgICAgICAgICBjICAgLT0gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBwYWNrZXQtPmN1cnNvciA9IHA7Ci0gICAgcmV0dXJuIGhhc2g7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZAotX2Ruc1BhY2tldF9oYXNoUVIoIERuc1BhY2tldCogIHBhY2tldCwgdW5zaWduZWQgIGhhc2ggKQotewotICAgIGhhc2ggPSBfZG5zUGFja2V0X2hhc2hRTmFtZShwYWNrZXQsIGhhc2gpOwotICAgIGhhc2ggPSBfZG5zUGFja2V0X2hhc2hCeXRlcyhwYWNrZXQsIDQsIGhhc2gpOyAvKiBUWVBFIGFuZCBDTEFTUyAqLwotICAgIHJldHVybiBoYXNoOwotfQotCi1zdGF0aWMgdW5zaWduZWQKLV9kbnNQYWNrZXRfaGFzaFF1ZXJ5KCBEbnNQYWNrZXQqICBwYWNrZXQgKQotewotICAgIHVuc2lnbmVkICBoYXNoID0gRk5WX0JBU0lTOwotICAgIGludCAgICAgICBjb3VudDsKLSAgICBfZG5zUGFja2V0X3Jld2luZChwYWNrZXQpOwotCi0gICAgLyogd2UgaWdub3JlIHRoZSBUQyBiaXQgZm9yIHJlYXNvbnMgZXhwbGFpbmVkIGluCi0gICAgICogX2Ruc1BhY2tldF9jaGVja1F1ZXJ5KCkuCi0gICAgICoKLSAgICAgKiBob3dldmVyIHdlIGhhc2ggdGhlIFJEIGJpdCB0byBkaWZmZXJlbnRpYXRlCi0gICAgICogYmV0d2VlbiBhbnN3ZXJzIGZvciByZWN1cnNpdmUgYW5kIG5vbi1yZWN1cnNpdmUKLSAgICAgKiBxdWVyaWVzLgotICAgICAqLwotICAgIGhhc2ggPSBoYXNoKkZOVl9NVUxUIF4gKHBhY2tldC0+YmFzZVsyXSAmIDEpOwotCi0gICAgLyogYXNzdW1lOiBvdGhlciBmbGFncyBhcmUgMCAqLwotICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDQpOwotCi0gICAgLyogcmVhZCBRRENPVU5UICovCi0gICAgY291bnQgPSBfZG5zUGFja2V0X3JlYWRJbnQxNihwYWNrZXQpOwotCi0gICAgLyogYXNzdW1lOiBBTmNvdW50LCBOU2NvdW50LCBBUmNvdW50IGFyZSAwICovCi0gICAgX2Ruc1BhY2tldF9za2lwKHBhY2tldCwgNik7Ci0KLSAgICAvKiBoYXNoIFFEQ09VTlQgUVJzICovCi0gICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0gKQotICAgICAgICBoYXNoID0gX2Ruc1BhY2tldF9oYXNoUVIocGFja2V0LCBoYXNoKTsKLQotICAgIHJldHVybiBoYXNoOwotfQotCi0KLS8qKiBRVUVSWSBDT01QQVJJU09OCi0gKioKLSAqKiBUSEUgRk9MTE9XSU5HIENPREUgQVNTVU1FUyBUSEFUIFRIRSBJTlBVVCBQQUNLRVRTIEhBVkUgQUxSRUFEWQotICoqIEJFRU4gU1VDQ0VTRlVMTFkgQ0hFQ0tFRC4KLSAqKi8KLQotc3RhdGljIGludAotX2Ruc1BhY2tldF9pc0VxdWFsRG9tYWluTmFtZSggRG5zUGFja2V0KiAgcGFjazEsIERuc1BhY2tldCogIHBhY2syICkKLXsKLSAgICBjb25zdCB1aW50OF90KiAgcDEgICA9IHBhY2sxLT5jdXJzb3I7Ci0gICAgY29uc3QgdWludDhfdCogIGVuZDEgPSBwYWNrMS0+ZW5kOwotICAgIGNvbnN0IHVpbnQ4X3QqICBwMiAgID0gcGFjazItPmN1cnNvcjsKLSAgICBjb25zdCB1aW50OF90KiAgZW5kMiA9IHBhY2syLT5lbmQ7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGludCAgYzEsIGMyOwotCi0gICAgICAgIGlmIChwMSA+PSBlbmQxIHx8IHAyID49IGVuZDIpIHsKLSAgICAgICAgICAgIFhMT0coIiVzOiBJTlRFUk5BTF9FUlJPUjogcmVhZC1vdmVyZmxvdyAhIVxuIiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGMxID0gKnAxKys7Ci0gICAgICAgIGMyID0gKnAyKys7Ci0gICAgICAgIGlmIChjMSAhPSBjMikKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChjMSA9PSAwKSB7Ci0gICAgICAgICAgICBwYWNrMS0+Y3Vyc29yID0gcDE7Ci0gICAgICAgICAgICBwYWNrMi0+Y3Vyc29yID0gcDI7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYzEgPj0gNjQpIHsKLSAgICAgICAgICAgIFhMT0coIiVzOiBJTlRFUk5BTF9FUlJPUjogbWFsZm9ybWVkIGRvbWFpbiAhIVxuIiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmICgocDErYzEgPiBlbmQxKSB8fCAocDIrYzEgPiBlbmQyKSkgewotICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBzaW1wbGUgbGFiZWwgcmVhZC1vdmVyZmxvdyAhIVxuIiwKLSAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtZW1jbXAocDEsIHAyLCBjMSkgIT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwMSArPSBjMTsKLSAgICAgICAgcDIgKz0gYzE7Ci0gICAgICAgIC8qIHdlIHJlbHkgb24gdGhlIGJvdW5kIGNoZWNrcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGxvb3AgKi8KLSAgICB9Ci0gICAgLyogbm90IHRoZSBzYW1lLCBvciBvbmUgaXMgbWFsZm9ybWVkICovCi0gICAgWExPRygiZGlmZmVyZW50IEROIik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLV9kbnNQYWNrZXRfaXNFcXVhbEJ5dGVzKCBEbnNQYWNrZXQqICBwYWNrMSwgRG5zUGFja2V0KiAgcGFjazIsIGludCAgbnVtQnl0ZXMgKQotewotICAgIGNvbnN0IHVpbnQ4X3QqICBwMSA9IHBhY2sxLT5jdXJzb3I7Ci0gICAgY29uc3QgdWludDhfdCogIHAyID0gcGFjazItPmN1cnNvcjsKLQotICAgIGlmICggcDEgKyBudW1CeXRlcyA+IHBhY2sxLT5lbmQgfHwgcDIgKyBudW1CeXRlcyA+IHBhY2syLT5lbmQgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICggbWVtY21wKHAxLCBwMiwgbnVtQnl0ZXMpICE9IDAgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHBhY2sxLT5jdXJzb3IgKz0gbnVtQnl0ZXM7Ci0gICAgcGFjazItPmN1cnNvciArPSBudW1CeXRlczsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGludAotX2Ruc1BhY2tldF9pc0VxdWFsUVIoIERuc1BhY2tldCogIHBhY2sxLCBEbnNQYWNrZXQqICBwYWNrMiApCi17Ci0gICAgLyogY29tcGFyZSBkb21haW4gbmFtZSBlbmNvZGluZyArIFRZUEUgKyBDTEFTUyAqLwotICAgIGlmICggIV9kbnNQYWNrZXRfaXNFcXVhbERvbWFpbk5hbWUocGFjazEsIHBhY2syKSB8fAotICAgICAgICAgIV9kbnNQYWNrZXRfaXNFcXVhbEJ5dGVzKHBhY2sxLCBwYWNrMiwgMisyKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQKLV9kbnNQYWNrZXRfaXNFcXVhbFF1ZXJ5KCBEbnNQYWNrZXQqICBwYWNrMSwgRG5zUGFja2V0KiAgcGFjazIgKQotewotICAgIGludCAgY291bnQxLCBjb3VudDI7Ci0KLSAgICAvKiBjb21wYXJlIHRoZSBoZWFkZXJzLCBpZ25vcmUgbW9zdCBmaWVsZHMgKi8KLSAgICBfZG5zUGFja2V0X3Jld2luZChwYWNrMSk7Ci0gICAgX2Ruc1BhY2tldF9yZXdpbmQocGFjazIpOwotCi0gICAgLyogY29tcGFyZSBSRCwgaWdub3JlIFRDLCBzZWUgY29tbWVudCBpbiBfZG5zUGFja2V0X2NoZWNrUXVlcnkgKi8KLSAgICBpZiAoKHBhY2sxLT5iYXNlWzJdICYgMSkgIT0gKHBhY2syLT5iYXNlWzJdICYgMSkpIHsKLSAgICAgICAgWExPRygiZGlmZmVyZW50IFJEIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qIGFzc3VtZTogb3RoZXIgZmxhZ3MgYXJlIGFsbCAwICovCi0gICAgX2Ruc1BhY2tldF9za2lwKHBhY2sxLCA0KTsKLSAgICBfZG5zUGFja2V0X3NraXAocGFjazIsIDQpOwotCi0gICAgLyogY29tcGFyZSBRRENPVU5UICovCi0gICAgY291bnQxID0gX2Ruc1BhY2tldF9yZWFkSW50MTYocGFjazEpOwotICAgIGNvdW50MiA9IF9kbnNQYWNrZXRfcmVhZEludDE2KHBhY2syKTsKLSAgICBpZiAoY291bnQxICE9IGNvdW50MiB8fCBjb3VudDEgPCAwKSB7Ci0gICAgICAgIFhMT0coImRpZmZlcmVudCBRRENPVU5UIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qIGFzc3VtZTogQU5jb3VudCwgTlNjb3VudCBhbmQgQVJjb3VudCBhcmUgYWxsIDAgKi8KLSAgICBfZG5zUGFja2V0X3NraXAocGFjazEsIDYpOwotICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrMiwgNik7Ci0KLSAgICAvKiBjb21wYXJlIHRoZSBRRENPVU5UIFFScyAqLwotICAgIGZvciAoIDsgY291bnQxID4gMDsgY291bnQxLS0gKSB7Ci0gICAgICAgIGlmICghX2Ruc1BhY2tldF9pc0VxdWFsUVIocGFjazEsIHBhY2syKSkgewotICAgICAgICAgICAgWExPRygiZGlmZmVyZW50IFFSIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0vKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIGNhY2hlIGVudHJ5LiBmb3Igc2ltcGxpY2l0eSwgJ2hhc2gnIGFuZCAnaGxpbmsnIGFyZSBpbmxpbmVkIGluIHRoaXMKLSAqIHN0cnVjdHVyZSB0aG91Z2ggdGhleSBhcmUgY29uY2VwdHVhbGx5IHBhcnQgb2YgdGhlIGhhc2ggdGFibGUuCi0gKgotICogc2ltaWxhcmx5LCBtcnVfbmV4dCBhbmQgbXJ1X3ByZXYgYXJlIHBhcnQgb2YgdGhlIGdsb2JhbCBNUlUgbGlzdAotICovCi10eXBlZGVmIHN0cnVjdCBFbnRyeSB7Ci0gICAgdW5zaWduZWQgaW50ICAgICBoYXNoOyAgIC8qIGhhc2ggdmFsdWUgKi8KLSAgICBzdHJ1Y3QgRW50cnkqICAgIGhsaW5rOyAgLyogbmV4dCBpbiBjb2xsaXNpb24gY2hhaW4gKi8KLSAgICBzdHJ1Y3QgRW50cnkqICAgIG1ydV9wcmV2OwotICAgIHN0cnVjdCBFbnRyeSogICAgbXJ1X25leHQ7Ci0KLSAgICBjb25zdCB1aW50OF90KiAgIHF1ZXJ5OwotICAgIGludCAgICAgICAgICAgICAgcXVlcnlsZW47Ci0gICAgY29uc3QgdWludDhfdCogICBhbnN3ZXI7Ci0gICAgaW50ICAgICAgICAgICAgICBhbnN3ZXJsZW47Ci0gICAgdGltZV90ICAgICAgICAgICBleHBpcmVzOyAgIC8qIHRpbWVfdCB3aGVuIHRoZSBlbnRyeSBpc24ndCB2YWxpZCBhbnkgbW9yZSAqLwotICAgIGludCAgICAgICAgICAgICAgaWQ7ICAgICAgICAvKiBmb3IgZGVidWdnaW5nIHB1cnBvc2UgKi8KLX0gRW50cnk7Ci0KLS8qKgotICogRmluZCB0aGUgVFRMIGZvciBhIG5lZ2F0aXZlIEROUyByZXN1bHQuICBUaGlzIGlzIGRlZmluZWQgYXMgdGhlIG1pbmltdW0KLSAqIG9mIHRoZSBTT0EgcmVjb3JkcyBUVEwgYW5kIHRoZSBNSU5JTVVNLVRUTCBmaWVsZCAoUkZDLTIzMDgpLgotICoKLSAqIFJldHVybiAwIGlmIG5vdCBmb3VuZC4KLSAqLwotc3RhdGljIHVfbG9uZwotYW5zd2VyX2dldE5lZ2F0aXZlVFRMKG5zX21zZyBoYW5kbGUpIHsKLSAgICBpbnQgbiwgbnNjb3VudDsKLSAgICB1X2xvbmcgcmVzdWx0ID0gMDsKLSAgICBuc19yciBycjsKLQotICAgIG5zY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX25zKTsKLSAgICBmb3IgKG4gPSAwOyBuIDwgbnNjb3VudDsgbisrKSB7Ci0gICAgICAgIGlmICgobnNfcGFyc2VycigmaGFuZGxlLCBuc19zX25zLCBuLCAmcnIpID09IDApICYmIChuc19ycl90eXBlKHJyKSA9PSBuc190X3NvYSkpIHsKLSAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcmRhdGEgPSBuc19ycl9yZGF0YShycik7IC8vIGZpbmQgdGhlIGRhdGEKLSAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqZWRhdGEgPSByZGF0YSArIG5zX3JyX3JkbGVuKHJyKTsgLy8gYWRkIHRoZSBsZW4gdG8gZmluZCB0aGUgZW5kCi0gICAgICAgICAgICBpbnQgbGVuOwotICAgICAgICAgICAgdV9sb25nIHR0bCwgcmVjX3Jlc3VsdCA9IG5zX3JyX3R0bChycik7Ci0KLSAgICAgICAgICAgIC8vIGZpbmQgdGhlIE1JTklNVU0tVFRMIGZpZWxkIGZyb20gdGhlIGJsb2Igb2YgYmluYXJ5IGRhdGEgZm9yIHRoaXMgcmVjb3JkCi0gICAgICAgICAgICAvLyBza2lwIHRoZSBzZXJ2ZXIgbmFtZQotICAgICAgICAgICAgbGVuID0gZG5fc2tpcG5hbWUocmRhdGEsIGVkYXRhKTsKLSAgICAgICAgICAgIGlmIChsZW4gPT0gLTEpIGNvbnRpbnVlOyAvLyBlcnJvciBza2lwcGluZwotICAgICAgICAgICAgcmRhdGEgKz0gbGVuOwotCi0gICAgICAgICAgICAvLyBza2lwIHRoZSBhZG1pbiBuYW1lCi0gICAgICAgICAgICBsZW4gPSBkbl9za2lwbmFtZShyZGF0YSwgZWRhdGEpOwotICAgICAgICAgICAgaWYgKGxlbiA9PSAtMSkgY29udGludWU7IC8vIGVycm9yIHNraXBwaW5nCi0gICAgICAgICAgICByZGF0YSArPSBsZW47Ci0KLSAgICAgICAgICAgIGlmIChlZGF0YSAtIHJkYXRhICE9IDUqTlNfSU5UMzJTWikgY29udGludWU7Ci0gICAgICAgICAgICAvLyBza2lwOiBzZXJpYWwgbnVtYmVyICsgcmVmcmVzaCBpbnRlcnZhbCArIHJldHJ5IGludGVydmFsICsgZXhwaXJ5Ci0gICAgICAgICAgICByZGF0YSArPSBOU19JTlQzMlNaICogNDsKLSAgICAgICAgICAgIC8vIGZpbmFsbHkgcmVhZCB0aGUgTUlOSU1VTSBUVEwKLSAgICAgICAgICAgIHR0bCA9IG5zX2dldDMyKHJkYXRhKTsKLSAgICAgICAgICAgIGlmICh0dGwgPCByZWNfcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgcmVjX3Jlc3VsdCA9IHR0bDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIE5vdyB0aGF0IHRoZSByZWNvcmQgaXMgcmVhZCBzdWNjZXNzZnVsbHksIGFwcGx5IHRoZSBuZXcgbWluIFRUTAotICAgICAgICAgICAgaWYgKG4gPT0gMCB8fCByZWNfcmVzdWx0IDwgcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVjX3Jlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKioKLSAqIFBhcnNlIHRoZSBhbnN3ZXIgcmVjb3JkcyBhbmQgZmluZCB0aGUgYXBwcm9wcmlhdGUKLSAqIHNtYWxsZXN0IFRUTCBhbW9uZyB0aGUgcmVjb3Jkcy4gIFRoaXMgbWlnaHQgYmUgZnJvbQotICogdGhlIGFuc3dlciByZWNvcmRzIGlmIGZvdW5kIG9yIGZyb20gdGhlIFNPQSByZWNvcmQKLSAqIGlmIGl0J3MgYSBuZWdhdGl2ZSByZXN1bHQuCi0gKgotICogVGhlIHJldHVybmVkIFRUTCBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8KLSAqIGtlZXAgdGhlIGFuc3dlciBpbiB0aGUgY2FjaGUuCi0gKgotICogSW4gY2FzZSBvZiBwYXJzZSBlcnJvciB6ZXJvICgwKSBpcyByZXR1cm5lZCB3aGljaAotICogaW5kaWNhdGVzIHRoYXQgdGhlIGFuc3dlciBzaGFsbCBub3QgYmUgY2FjaGVkLgotICovCi1zdGF0aWMgdV9sb25nCi1hbnN3ZXJfZ2V0VFRMKGNvbnN0IHZvaWQqIGFuc3dlciwgaW50IGFuc3dlcmxlbikKLXsKLSAgICBuc19tc2cgaGFuZGxlOwotICAgIGludCBhbmNvdW50LCBuOwotICAgIHVfbG9uZyByZXN1bHQsIHR0bDsKLSAgICBuc19yciBycjsKLQotICAgIHJlc3VsdCA9IDA7Ci0gICAgaWYgKG5zX2luaXRwYXJzZShhbnN3ZXIsIGFuc3dlcmxlbiwgJmhhbmRsZSkgPj0gMCkgewotICAgICAgICAvLyBnZXQgbnVtYmVyIG9mIGFuc3dlciByZWNvcmRzCi0gICAgICAgIGFuY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX2FuKTsKLQotICAgICAgICBpZiAoYW5jb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBhIHJlc3BvbnNlIHdpdGggbm8gYW5zd2Vycz8gIENhY2hlIHRoaXMgbmVnYXRpdmUgcmVzdWx0LgotICAgICAgICAgICAgcmVzdWx0ID0gYW5zd2VyX2dldE5lZ2F0aXZlVFRMKGhhbmRsZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgYW5jb3VudDsgbisrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5zX3BhcnNlcnIoJmhhbmRsZSwgbnNfc19hbiwgbiwgJnJyKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHR0bCA9IG5zX3JyX3R0bChycik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuID09IDAgfHwgdHRsIDwgcmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0dGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBYTE9HKCJuc19wYXJzZXJyIGZhaWxlZCBhbmNvdW50IG5vID0gJWQuIGVycm5vID0gJXNcbiIsIG4sIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgWExPRygibnNfcGFyc2VyciBmYWlsZWQuICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotICAgIH0KLQotICAgIFhMT0coIlRUTCA9ICVkXG4iLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQKLWVudHJ5X2ZyZWUoIEVudHJ5KiAgZSApCi17Ci0gICAgLyogZXZlcnl0aGluZyBpcyBhbGxvY2F0ZWQgaW4gYSBzaW5nbGUgbWVtb3J5IGJsb2NrICovCi0gICAgaWYgKGUpIHsKLSAgICAgICAgZnJlZShlKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWVudHJ5X21ydV9yZW1vdmUoIEVudHJ5KiAgZSApCi17Ci0gICAgZS0+bXJ1X3ByZXYtPm1ydV9uZXh0ID0gZS0+bXJ1X25leHQ7Ci0gICAgZS0+bXJ1X25leHQtPm1ydV9wcmV2ID0gZS0+bXJ1X3ByZXY7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWVudHJ5X21ydV9hZGQoIEVudHJ5KiAgZSwgRW50cnkqICBsaXN0ICkKLXsKLSAgICBFbnRyeSogIGZpcnN0ID0gbGlzdC0+bXJ1X25leHQ7Ci0KLSAgICBlLT5tcnVfbmV4dCA9IGZpcnN0OwotICAgIGUtPm1ydV9wcmV2ID0gbGlzdDsKLQotICAgIGxpc3QtPm1ydV9uZXh0ICA9IGU7Ci0gICAgZmlyc3QtPm1ydV9wcmV2ID0gZTsKLX0KLQotLyogY29tcHV0ZSB0aGUgaGFzaCBvZiBhIGdpdmVuIGVudHJ5LCB0aGlzIGlzIGEgaGFzaCBvZiBtb3N0Ci0gKiBkYXRhIGluIHRoZSBxdWVyeSAoa2V5KSAqLwotc3RhdGljIHVuc2lnbmVkCi1lbnRyeV9oYXNoKCBjb25zdCBFbnRyeSogIGUgKQotewotICAgIERuc1BhY2tldCAgcGFja1sxXTsKLQotICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrLCBlLT5xdWVyeSwgZS0+cXVlcnlsZW4pOwotICAgIHJldHVybiBfZG5zUGFja2V0X2hhc2hRdWVyeShwYWNrKTsKLX0KLQotLyogaW5pdGlhbGl6ZSBhbiBFbnRyeSBhcyBhIHNlYXJjaCBrZXksIHRoaXMgYWxzbyBjaGVja3MgdGhlIGlucHV0IHF1ZXJ5IHBhY2tldAotICogcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIG9yIDAgaW4gY2FzZSBvZiB1bnN1cHBvcnRlZC9tYWxmb3JtZWQgZGF0YSAqLwotc3RhdGljIGludAotZW50cnlfaW5pdF9rZXkoIEVudHJ5KiAgZSwgY29uc3Qgdm9pZCogIHF1ZXJ5LCBpbnQgIHF1ZXJ5bGVuICkKLXsKLSAgICBEbnNQYWNrZXQgIHBhY2tbMV07Ci0KLSAgICBtZW1zZXQoZSwgMCwgc2l6ZW9mKCplKSk7Ci0KLSAgICBlLT5xdWVyeSAgICA9IHF1ZXJ5OwotICAgIGUtPnF1ZXJ5bGVuID0gcXVlcnlsZW47Ci0gICAgZS0+aGFzaCAgICAgPSBlbnRyeV9oYXNoKGUpOwotCi0gICAgX2Ruc1BhY2tldF9pbml0KHBhY2ssIHF1ZXJ5LCBxdWVyeWxlbik7Ci0KLSAgICByZXR1cm4gX2Ruc1BhY2tldF9jaGVja1F1ZXJ5KHBhY2spOwotfQotCi0vKiBhbGxvY2F0ZSBhIG5ldyBlbnRyeSBhcyBhIGNhY2hlIG5vZGUgKi8KLXN0YXRpYyBFbnRyeSoKLWVudHJ5X2FsbG9jKCBjb25zdCBFbnRyeSogIGluaXQsIGNvbnN0IHZvaWQqICBhbnN3ZXIsIGludCAgYW5zd2VybGVuICkKLXsKLSAgICBFbnRyeSogIGU7Ci0gICAgaW50ICAgICBzaXplOwotCi0gICAgc2l6ZSA9IHNpemVvZigqZSkgKyBpbml0LT5xdWVyeWxlbiArIGFuc3dlcmxlbjsKLSAgICBlICAgID0gY2FsbG9jKHNpemUsIDEpOwotICAgIGlmIChlID09IE5VTEwpCi0gICAgICAgIHJldHVybiBlOwotCi0gICAgZS0+aGFzaCAgICAgPSBpbml0LT5oYXNoOwotICAgIGUtPnF1ZXJ5ICAgID0gKGNvbnN0IHVpbnQ4X3QqKShlKzEpOwotICAgIGUtPnF1ZXJ5bGVuID0gaW5pdC0+cXVlcnlsZW47Ci0KLSAgICBtZW1jcHkoIChjaGFyKillLT5xdWVyeSwgaW5pdC0+cXVlcnksIGUtPnF1ZXJ5bGVuICk7Ci0KLSAgICBlLT5hbnN3ZXIgICAgPSBlLT5xdWVyeSArIGUtPnF1ZXJ5bGVuOwotICAgIGUtPmFuc3dlcmxlbiA9IGFuc3dlcmxlbjsKLQotICAgIG1lbWNweSggKGNoYXIqKWUtPmFuc3dlciwgYW5zd2VyLCBlLT5hbnN3ZXJsZW4gKTsKLQotICAgIHJldHVybiBlOwotfQotCi1zdGF0aWMgaW50Ci1lbnRyeV9lcXVhbHMoIGNvbnN0IEVudHJ5KiAgZTEsIGNvbnN0IEVudHJ5KiAgZTIgKQotewotICAgIERuc1BhY2tldCAgcGFjazFbMV0sIHBhY2syWzFdOwotCi0gICAgaWYgKGUxLT5xdWVyeWxlbiAhPSBlMi0+cXVlcnlsZW4pIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrMSwgZTEtPnF1ZXJ5LCBlMS0+cXVlcnlsZW4pOwotICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrMiwgZTItPnF1ZXJ5LCBlMi0+cXVlcnlsZW4pOwotCi0gICAgcmV0dXJuIF9kbnNQYWNrZXRfaXNFcXVhbFF1ZXJ5KHBhY2sxLCBwYWNrMik7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLS8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBXZSB1c2UgYSBzaW1wbGUgaGFzaCB0YWJsZSB3aXRoIGV4dGVybmFsIGNvbGxpc2lvbiBsaXN0cwotICogZm9yIHNpbXBsaWNpdHksIHRoZSBoYXNoLXRhYmxlIGZpZWxkcyAnaGFzaCcgYW5kICdobGluaycgYXJlCi0gKiBpbmxpbmVkIGluIHRoZSBFbnRyeSBzdHJ1Y3R1cmUuCi0gKi8KLQotLyogTWF4aW11bSB0aW1lIGZvciBhIHRocmVhZCB0byB3YWl0IGZvciBhbiBwZW5kaW5nIHJlcXVlc3QgKi8KLSNkZWZpbmUgUEVORElOR19SRVFVRVNUX1RJTUVPVVQgMjA7Ci0KLXR5cGVkZWYgc3RydWN0IHBlbmRpbmdfcmVxX2luZm8gewotICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBoYXNoOwotICAgIHB0aHJlYWRfY29uZF90ICAgICAgICAgICAgICBjb25kOwotICAgIHN0cnVjdCBwZW5kaW5nX3JlcV9pbmZvKiAgICBuZXh0OwotfSBQZW5kaW5nUmVxSW5mbzsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVzb2x2X2NhY2hlIHsKLSAgICBpbnQgICAgICAgICAgICAgIG1heF9lbnRyaWVzOwotICAgIGludCAgICAgICAgICAgICAgbnVtX2VudHJpZXM7Ci0gICAgRW50cnkgICAgICAgICAgICBtcnVfbGlzdDsKLSAgICBwdGhyZWFkX211dGV4X3QgIGxvY2s7Ci0gICAgdW5zaWduZWQgICAgICAgICBnZW5lcmF0aW9uOwotICAgIGludCAgICAgICAgICAgICAgbGFzdF9pZDsKLSAgICBFbnRyeSogICAgICAgICAgIGVudHJpZXM7Ci0gICAgUGVuZGluZ1JlcUluZm8gICBwZW5kaW5nX3JlcXVlc3RzOwotfSBDYWNoZTsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8gewotICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBpZm5hbWVbSUZfTkFNRVNJWkUgKyAxXTsKLSAgICBzdHJ1Y3QgaW5fYWRkciAgICAgICAgICAgICAgaWZhZGRyOwotICAgIENhY2hlKiAgICAgICAgICAgICAgICAgICAgICBjYWNoZTsKLSAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qICAgbmV4dDsKLSAgICBjaGFyKiAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNlcnZlcnNbTUFYTlMgKzFdOwotICAgIHN0cnVjdCBhZGRyaW5mbyogICAgICAgICAgICBuc2FkZHJpbmZvW01BWE5TICsgMV07Ci0gICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgIGRlZmRuYW1lWzI1Nl07Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGRuc3JjaF9vZmZzZXRbTUFYRE5TUkNIKzFdOyAgLy8gb2Zmc2V0cyBpbnRvIGRlZmRuYW1lCi19IENhY2hlSW5mbzsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVzb2x2X3BpZGlmYWNlX2luZm8gewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkOwotICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZuYW1lW0lGX05BTUVTSVpFICsgMV07Ci0gICAgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKiAgICBuZXh0OwotfSBQaWRJZmFjZUluZm87Ci10eXBlZGVmIHN0cnVjdCByZXNvbHZfdWlkaWZhY2VfaW5mbyB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfc3RhcnQ7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfZW5kOwotICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZuYW1lW0lGX05BTUVTSVpFICsgMV07Ci0gICAgc3RydWN0IHJlc29sdl91aWRpZmFjZV9pbmZvKiAgICBuZXh0OwotfSBVaWRJZmFjZUluZm87Ci0KLSNkZWZpbmUgIEhUQUJMRV9WQUxJRCh4KSAgKCh4KSAhPSBOVUxMICYmICh4KSAhPSBIVEFCTEVfREVMRVRFRCkKLQotc3RhdGljIHZvaWQKLV9jYWNoZV9mbHVzaF9wZW5kaW5nX3JlcXVlc3RzX2xvY2tlZCggc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUgKQotewotICAgIHN0cnVjdCBwZW5kaW5nX3JlcV9pbmZvICpyaSwgKnRtcDsKLSAgICBpZiAoY2FjaGUpIHsKLSAgICAgICAgcmkgPSBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0OwotCi0gICAgICAgIHdoaWxlIChyaSkgewotICAgICAgICAgICAgdG1wID0gcmk7Ci0gICAgICAgICAgICByaSA9IHJpLT5uZXh0OwotICAgICAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmdG1wLT5jb25kKTsKLQotICAgICAgICAgICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJnRtcC0+Y29uZCk7Ci0gICAgICAgICAgICBmcmVlKHRtcCk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0ID0gTlVMTDsKLSAgICB9Ci19Ci0KLS8qIHJldHVybiAwIGlmIG5vIHBlbmRpbmcgcmVxdWVzdCBpcyBmb3VuZCBtYXRjaGluZyB0aGUga2V5Ci0gKiBpZiBhIG1hdGNoaW5nIHJlcXVlc3QgaXMgZm91bmQgdGhlIGNhbGxpbmcgdGhyZWFkIHdpbGwgd2FpdAotICogYW5kIHJldHVybiAxIHdoZW4gcmVsZWFzZWQgKi8KLXN0YXRpYyBpbnQKLV9jYWNoZV9jaGVja19wZW5kaW5nX3JlcXVlc3RfbG9ja2VkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBjYWNoZSwgRW50cnkqIGtleSApCi17Ci0gICAgc3RydWN0IHBlbmRpbmdfcmVxX2luZm8gKnJpLCAqcHJldjsKLSAgICBpbnQgZXhpc3QgPSAwOwotCi0gICAgaWYgKGNhY2hlICYmIGtleSkgewotICAgICAgICByaSA9IGNhY2hlLT5wZW5kaW5nX3JlcXVlc3RzLm5leHQ7Ci0gICAgICAgIHByZXYgPSAmY2FjaGUtPnBlbmRpbmdfcmVxdWVzdHM7Ci0gICAgICAgIHdoaWxlIChyaSkgewotICAgICAgICAgICAgaWYgKHJpLT5oYXNoID09IGtleS0+aGFzaCkgewotICAgICAgICAgICAgICAgIGV4aXN0ID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByZXYgPSByaTsKLSAgICAgICAgICAgIHJpID0gcmktPm5leHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWV4aXN0KSB7Ci0gICAgICAgICAgICByaSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBlbmRpbmdfcmVxX2luZm8pKTsKLSAgICAgICAgICAgIGlmIChyaSkgewotICAgICAgICAgICAgICAgIHJpLT5oYXNoID0ga2V5LT5oYXNoOwotICAgICAgICAgICAgICAgIHB0aHJlYWRfY29uZF9pbml0KCZyaS0+Y29uZCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgcHJldi0+bmV4dCA9IHJpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzID0gezAsMH07Ci0gICAgICAgICAgICBYTE9HKCJXYWl0aW5nIGZvciBwcmV2aW91cyByZXF1ZXN0Iik7Ci0gICAgICAgICAgICB0cy50dl9zZWMgPSBfdGltZV9ub3coKSArIFBFTkRJTkdfUkVRVUVTVF9USU1FT1VUOwotICAgICAgICAgICAgcHRocmVhZF9jb25kX3RpbWVkd2FpdCgmcmktPmNvbmQsICZjYWNoZS0+bG9jaywgJnRzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBleGlzdDsKLX0KLQotLyogbm90aWZ5IGFueSB3YWl0aW5nIHRocmVhZCB0aGF0IHdhaXRpbmcgb24gYSByZXF1ZXN0Ci0gKiBtYXRjaGluZyB0aGUga2V5IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBjYWNoZSAqLwotc3RhdGljIHZvaWQKLV9jYWNoZV9ub3RpZnlfd2FpdGluZ190aWRfbG9ja2VkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBjYWNoZSwgRW50cnkqIGtleSApCi17Ci0gICAgc3RydWN0IHBlbmRpbmdfcmVxX2luZm8gKnJpLCAqcHJldjsKLQotICAgIGlmIChjYWNoZSAmJiBrZXkpIHsKLSAgICAgICAgcmkgPSBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0OwotICAgICAgICBwcmV2ID0gJmNhY2hlLT5wZW5kaW5nX3JlcXVlc3RzOwotICAgICAgICB3aGlsZSAocmkpIHsKLSAgICAgICAgICAgIGlmIChyaS0+aGFzaCA9PSBrZXktPmhhc2gpIHsKLSAgICAgICAgICAgICAgICBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZyaS0+Y29uZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmV2ID0gcmk7Ci0gICAgICAgICAgICByaSA9IHJpLT5uZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcmVtb3ZlIGl0ZW0gZnJvbSBsaXN0IGFuZCBkZXN0cm95Ci0gICAgICAgIGlmIChyaSkgewotICAgICAgICAgICAgcHJldi0+bmV4dCA9IHJpLT5uZXh0OwotICAgICAgICAgICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJnJpLT5jb25kKTsKLSAgICAgICAgICAgIGZyZWUocmkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKiBub3RpZnkgdGhlIGNhY2hlIHRoYXQgdGhlIHF1ZXJ5IGZhaWxlZCAqLwotdm9pZAotX3Jlc29sdl9jYWNoZV9xdWVyeV9mYWlsZWQoIHN0cnVjdCByZXNvbHZfY2FjaGUqIGNhY2hlLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIHF1ZXJ5LAotICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIHF1ZXJ5bGVuKQotewotICAgIEVudHJ5ICAgIGtleVsxXTsKLQotICAgIGlmIChjYWNoZSAmJiBlbnRyeV9pbml0X2tleShrZXksIHF1ZXJ5LCBxdWVyeWxlbikpIHsKLSAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZjYWNoZS0+bG9jayk7Ci0gICAgICAgIF9jYWNoZV9ub3RpZnlfd2FpdGluZ190aWRfbG9ja2VkKGNhY2hlLCBrZXkpOwotICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmY2FjaGUtPmxvY2spOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLV9jYWNoZV9mbHVzaF9sb2NrZWQoIENhY2hlKiAgY2FjaGUgKQotewotICAgIGludCAgICAgbm47Ci0KLSAgICBmb3IgKG5uID0gMDsgbm4gPCBjYWNoZS0+bWF4X2VudHJpZXM7IG5uKyspCi0gICAgewotICAgICAgICBFbnRyeSoqICBwbm9kZSA9IChFbnRyeSoqKSAmY2FjaGUtPmVudHJpZXNbbm5dOwotCi0gICAgICAgIHdoaWxlICgqcG5vZGUgIT0gTlVMTCkgewotICAgICAgICAgICAgRW50cnkqICBub2RlID0gKnBub2RlOwotICAgICAgICAgICAgKnBub2RlID0gbm9kZS0+aGxpbms7Ci0gICAgICAgICAgICBlbnRyeV9mcmVlKG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gZmx1c2ggcGVuZGluZyByZXF1ZXN0Ci0gICAgX2NhY2hlX2ZsdXNoX3BlbmRpbmdfcmVxdWVzdHNfbG9ja2VkKGNhY2hlKTsKLQotICAgIGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dCA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfcHJldiA9ICZjYWNoZS0+bXJ1X2xpc3Q7Ci0gICAgY2FjaGUtPm51bV9lbnRyaWVzICAgICAgID0gMDsKLSAgICBjYWNoZS0+bGFzdF9pZCAgICAgICAgICAgPSAwOwotCi0gICAgWExPRygiKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgotICAgICAgICAgIioqKiBETlMgQ0FDSEUgRkxVU0hFRCAqKipcbiIKLSAgICAgICAgICIqKioqKioqKioqKioqKioqKioqKioqKioqIik7Ci19Ci0KLXN0YXRpYyBpbnQKLV9yZXNfY2FjaGVfZ2V0X21heF9lbnRyaWVzKCB2b2lkICkKLXsKLSAgICBpbnQgY2FjaGVfc2l6ZSA9IENPTkZJR19NQVhfRU5UUklFUzsKLQotICAgIGNvbnN0IGNoYXIqIGNhY2hlX21vZGUgPSBnZXRlbnYoIkFORFJPSURfRE5TX01PREUiKTsKLSAgICBpZiAoY2FjaGVfbW9kZSA9PSBOVUxMIHx8IHN0cmNtcChjYWNoZV9tb2RlLCAibG9jYWwiKSAhPSAwKSB7Ci0gICAgICAgIC8vIERvbid0IHVzZSB0aGUgY2FjaGUgaW4gbG9jYWwgbW9kZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBwcm94eSBpdHNlbGYuCi0gICAgICAgIGNhY2hlX3NpemUgPSAwOwotICAgIH0KLQotICAgIFhMT0coImNhY2hlIHNpemU6ICVkIiwgY2FjaGVfc2l6ZSk7Ci0gICAgcmV0dXJuIGNhY2hlX3NpemU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlKgotX3Jlc29sdl9jYWNoZV9jcmVhdGUoIHZvaWQgKQotewotICAgIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZTsKLQotICAgIGNhY2hlID0gY2FsbG9jKHNpemVvZigqY2FjaGUpLCAxKTsKLSAgICBpZiAoY2FjaGUpIHsKLSAgICAgICAgY2FjaGUtPm1heF9lbnRyaWVzID0gX3Jlc19jYWNoZV9nZXRfbWF4X2VudHJpZXMoKTsKLSAgICAgICAgY2FjaGUtPmVudHJpZXMgPSBjYWxsb2Moc2l6ZW9mKCpjYWNoZS0+ZW50cmllcyksIGNhY2hlLT5tYXhfZW50cmllcyk7Ci0gICAgICAgIGlmIChjYWNoZS0+ZW50cmllcykgewotICAgICAgICAgICAgY2FjaGUtPmdlbmVyYXRpb24gPSB+MFU7Ci0gICAgICAgICAgICBwdGhyZWFkX211dGV4X2luaXQoICZjYWNoZS0+bG9jaywgTlVMTCApOwotICAgICAgICAgICAgY2FjaGUtPm1ydV9saXN0Lm1ydV9wcmV2ID0gY2FjaGUtPm1ydV9saXN0Lm1ydV9uZXh0ID0gJmNhY2hlLT5tcnVfbGlzdDsKLSAgICAgICAgICAgIFhMT0coIiVzOiBjYWNoZSBjcmVhdGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZnJlZShjYWNoZSk7Ci0gICAgICAgICAgICBjYWNoZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNhY2hlOwotfQotCi0KLSNpZiBERUJVRwotc3RhdGljIHZvaWQKLV9kdW1wX3F1ZXJ5KCBjb25zdCB1aW50OF90KiAgcXVlcnksIGludCAgcXVlcnlsZW4gKQotewotICAgIGNoYXIgICAgICAgdGVtcFsyNTZdLCAqcD10ZW1wLCAqZW5kPXArc2l6ZW9mKHRlbXApOwotICAgIERuc1BhY2tldCAgcGFja1sxXTsKLQotICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrLCBxdWVyeSwgcXVlcnlsZW4pOwotICAgIHAgPSBfZG5zUGFja2V0X2JwcmludFF1ZXJ5KHBhY2ssIHAsIGVuZCk7Ci0gICAgWExPRygiUVVFUlk6ICVzIiwgdGVtcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fY2FjaGVfZHVtcF9tcnUoIENhY2hlKiAgY2FjaGUgKQotewotICAgIGNoYXIgICAgdGVtcFs1MTJdLCAqcD10ZW1wLCAqZW5kPXArc2l6ZW9mKHRlbXApOwotICAgIEVudHJ5KiAgZTsKLQotICAgIHAgPSBfYnByaW50KHRlbXAsIGVuZCwgIk1SVSBMSVNUICglMmQpOiAiLCBjYWNoZS0+bnVtX2VudHJpZXMpOwotICAgIGZvciAoZSA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dDsgZSAhPSAmY2FjaGUtPm1ydV9saXN0OyBlID0gZS0+bXJ1X25leHQpCi0gICAgICAgIHAgPSBfYnByaW50KHAsIGVuZCwgIiAlZCIsIGUtPmlkKTsKLQotICAgIFhMT0coIiVzIiwgdGVtcCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZHVtcF9hbnN3ZXIoY29uc3Qgdm9pZCogYW5zd2VyLCBpbnQgYW5zd2VybGVuKQotewotICAgIHJlc19zdGF0ZSBzdGF0ZXA7Ci0gICAgRklMRSogZnA7Ci0gICAgY2hhciogYnVmOwotICAgIGludCBmaWxlTGVuOwotCi0gICAgZnAgPSBmb3BlbigiL2RhdGEvcmVzbG9nLnR4dCIsICJ3KyIpOwotICAgIGlmIChmcCAhPSBOVUxMKSB7Ci0gICAgICAgIHN0YXRlcCA9IF9fcmVzX2dldF9zdGF0ZSgpOwotCi0gICAgICAgIHJlc19wcXVlcnkoc3RhdGVwLCBhbnN3ZXIsIGFuc3dlcmxlbiwgZnApOwotCi0gICAgICAgIC8vR2V0IGZpbGUgbGVuZ3RoCi0gICAgICAgIGZzZWVrKGZwLCAwLCBTRUVLX0VORCk7Ci0gICAgICAgIGZpbGVMZW49ZnRlbGwoZnApOwotICAgICAgICBmc2VlayhmcCwgMCwgU0VFS19TRVQpOwotICAgICAgICBidWYgPSAoY2hhciAqKW1hbGxvYyhmaWxlTGVuKzEpOwotICAgICAgICBpZiAoYnVmICE9IE5VTEwpIHsKLSAgICAgICAgICAgIC8vUmVhZCBmaWxlIGNvbnRlbnRzIGludG8gYnVmZmVyCi0gICAgICAgICAgICBmcmVhZChidWYsIGZpbGVMZW4sIDEsIGZwKTsKLSAgICAgICAgICAgIFhMT0coIiVzXG4iLCBidWYpOwotICAgICAgICAgICAgZnJlZShidWYpOwotICAgICAgICB9Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZSgiL2RhdGEvcmVzbG9nLnR4dCIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgZXJybm8gPSAwOyAvLyBlbHNlIGRlYnVnIGlzIGludHJvZHVjaW5nIGVycm9yIHNpZ25hbHMKLSAgICAgICAgWExPRygiX2R1bXBfYW5zd2VyOiBjYW4ndCBvcGVuIGZpbGVcbiIpOwotICAgIH0KLX0KLSNlbmRpZgotCi0jaWYgREVCVUcKLSMgIGRlZmluZSAgWExPR19RVUVSWShxLGxlbikgICBfZHVtcF9xdWVyeSgocSksIChsZW4pKQotIyAgZGVmaW5lICBYTE9HX0FOU1dFUihhLCBsZW4pIF9kdW1wX2Fuc3dlcigoYSksIChsZW4pKQotI2Vsc2UKLSMgIGRlZmluZSAgWExPR19RVUVSWShxLGxlbikgICAoKHZvaWQpMCkKLSMgIGRlZmluZSAgWExPR19BTlNXRVIoYSxsZW4pICAoKHZvaWQpMCkKLSNlbmRpZgotCi0vKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGZpbmQgYSBrZXkgd2l0aGluIHRoZSBoYXNoIHRhYmxlCi0gKiBJbiBjYXNlIG9mIHN1Y2Nlc3MsIGl0IHdpbGwgcmV0dXJuIGEgKnBvaW50ZXIqIHRvIHRoZSBoYXNoZWQga2V5LgotICogSW4gY2FzZSBvZiBmYWlsdXJlLCBpdCB3aWxsIHJldHVybiBhICpwb2ludGVyKiB0byBOVUxMCi0gKgotICogU28sIHRoZSBjYWxsZXIgbXVzdCBjaGVjayAnKnJlc3VsdCcgdG8gY2hlY2sgZm9yIHN1Y2Nlc3MvZmFpbHVyZS4KLSAqCi0gKiBUaGUgbWFpbiBpZGVhIGlzIHRoYXQgdGhlIHJlc3VsdCBjYW4gbGF0ZXIgYmUgdXNlZCBkaXJlY3RseSBpbgotICogY2FsbHMgdG8gX3Jlc29sdl9jYWNoZV9hZGQgb3IgX3Jlc29sdl9jYWNoZV9yZW1vdmUgYXMgdGhlICdsb29rdXAnCi0gKiBwYXJhbWV0ZXIuIFRoaXMgbWFrZXMgdGhlIGNvZGUgc2ltcGxlciBhbmQgYXZvaWRzIHJlLXNlYXJjaGluZwotICogZm9yIHRoZSBrZXkgcG9zaXRpb24gaW4gdGhlIGh0YWJsZS4KLSAqCi0gKiBUaGUgcmVzdWx0IG9mIGEgbG9va3VwX3AgaXMgb25seSB2YWxpZCB1bnRpbCB5b3UgYWx0ZXIgdGhlIGhhc2gKLSAqIHRhYmxlLgotICovCi1zdGF0aWMgRW50cnkqKgotX2NhY2hlX2xvb2t1cF9wKCBDYWNoZSogICBjYWNoZSwKLSAgICAgICAgICAgICAgICAgRW50cnkqICAga2V5ICkKLXsKLSAgICBpbnQgICAgICBpbmRleCA9IGtleS0+aGFzaCAlIGNhY2hlLT5tYXhfZW50cmllczsKLSAgICBFbnRyeSoqICBwbm9kZSA9IChFbnRyeSoqKSAmY2FjaGUtPmVudHJpZXNbIGluZGV4IF07Ci0KLSAgICB3aGlsZSAoKnBub2RlICE9IE5VTEwpIHsKLSAgICAgICAgRW50cnkqICBub2RlID0gKnBub2RlOwotCi0gICAgICAgIGlmIChub2RlID09IE5VTEwpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAobm9kZS0+aGFzaCA9PSBrZXktPmhhc2ggJiYgZW50cnlfZXF1YWxzKG5vZGUsIGtleSkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBwbm9kZSA9ICZub2RlLT5obGluazsKLSAgICB9Ci0gICAgcmV0dXJuIHBub2RlOwotfQotCi0vKiBBZGQgYSBuZXcgZW50cnkgdG8gdGhlIGhhc2ggdGFibGUuICdsb29rdXAnIG11c3QgYmUgdGhlCi0gKiByZXN1bHQgb2YgYW4gaW1tZWRpYXRlIHByZXZpb3VzIGZhaWxlZCBfbG9va3VwX3AoKSBjYWxsCi0gKiAoaS5lLiB3aXRoICpsb29rdXAgPT0gTlVMTCksIGFuZCAnZScgaXMgdGhlIHBvaW50ZXIgdG8gdGhlCi0gKiBuZXdseSBjcmVhdGVkIGVudHJ5Ci0gKi8KLXN0YXRpYyB2b2lkCi1fY2FjaGVfYWRkX3AoIENhY2hlKiAgIGNhY2hlLAotICAgICAgICAgICAgICBFbnRyeSoqICBsb29rdXAsCi0gICAgICAgICAgICAgIEVudHJ5KiAgIGUgKQotewotICAgICpsb29rdXAgPSBlOwotICAgIGUtPmlkID0gKytjYWNoZS0+bGFzdF9pZDsKLSAgICBlbnRyeV9tcnVfYWRkKGUsICZjYWNoZS0+bXJ1X2xpc3QpOwotICAgIGNhY2hlLT5udW1fZW50cmllcyArPSAxOwotCi0gICAgWExPRygiJXM6IGVudHJ5ICVkIGFkZGVkIChjb3VudD0lZCkiLCBfX0ZVTkNUSU9OX18sCi0gICAgICAgICBlLT5pZCwgY2FjaGUtPm51bV9lbnRyaWVzKTsKLX0KLQotLyogUmVtb3ZlIGFuIGV4aXN0aW5nIGVudHJ5IGZyb20gdGhlIGhhc2ggdGFibGUsCi0gKiAnbG9va3VwJyBtdXN0IGJlIHRoZSByZXN1bHQgb2YgYW4gaW1tZWRpYXRlIHByZXZpb3VzCi0gKiBhbmQgc3VjY2VzZnVsIF9sb29rdXBfcCgpIGNhbGwuCi0gKi8KLXN0YXRpYyB2b2lkCi1fY2FjaGVfcmVtb3ZlX3AoIENhY2hlKiAgIGNhY2hlLAotICAgICAgICAgICAgICAgICBFbnRyeSoqICBsb29rdXAgKQotewotICAgIEVudHJ5KiAgZSAgPSAqbG9va3VwOwotCi0gICAgWExPRygiJXM6IGVudHJ5ICVkIHJlbW92ZWQgKGNvdW50PSVkKSIsIF9fRlVOQ1RJT05fXywKLSAgICAgICAgIGUtPmlkLCBjYWNoZS0+bnVtX2VudHJpZXMtMSk7Ci0KLSAgICBlbnRyeV9tcnVfcmVtb3ZlKGUpOwotICAgICpsb29rdXAgPSBlLT5obGluazsKLSAgICBlbnRyeV9mcmVlKGUpOwotICAgIGNhY2hlLT5udW1fZW50cmllcyAtPSAxOwotfQotCi0vKiBSZW1vdmUgdGhlIG9sZGVzdCBlbnRyeSBmcm9tIHRoZSBoYXNoIHRhYmxlLgotICovCi1zdGF0aWMgdm9pZAotX2NhY2hlX3JlbW92ZV9vbGRlc3QoIENhY2hlKiAgY2FjaGUgKQotewotICAgIEVudHJ5KiAgIG9sZGVzdCA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfcHJldjsKLSAgICBFbnRyeSoqICBsb29rdXAgPSBfY2FjaGVfbG9va3VwX3AoY2FjaGUsIG9sZGVzdCk7Ci0KLSAgICBpZiAoKmxvb2t1cCA9PSBOVUxMKSB7IC8qIHNob3VsZCBub3QgaGFwcGVuICovCi0gICAgICAgIFhMT0coIiVzOiBPTERFU1QgTk9UIElOIEhUQUJMRSA/IiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgWExPRygiQ2FjaGUgZnVsbCAtIHJlbW92aW5nIG9sZGVzdCIpOwotICAgICAgICBYTE9HX1FVRVJZKG9sZGVzdC0+cXVlcnksIG9sZGVzdC0+cXVlcnlsZW4pOwotICAgIH0KLSAgICBfY2FjaGVfcmVtb3ZlX3AoY2FjaGUsIGxvb2t1cCk7Ci19Ci0KLS8qIFJlbW92ZSBhbGwgZXhwaXJlZCBlbnRyaWVzIGZyb20gdGhlIGhhc2ggdGFibGUuCi0gKi8KLXN0YXRpYyB2b2lkIF9jYWNoZV9yZW1vdmVfZXhwaXJlZChDYWNoZSogY2FjaGUpIHsKLSAgICBFbnRyeSogZTsKLSAgICB0aW1lX3Qgbm93ID0gX3RpbWVfbm93KCk7Ci0KLSAgICBmb3IgKGUgPSBjYWNoZS0+bXJ1X2xpc3QubXJ1X25leHQ7IGUgIT0gJmNhY2hlLT5tcnVfbGlzdDspIHsKLSAgICAgICAgLy8gRW50cnkgaXMgb2xkLCByZW1vdmUKLSAgICAgICAgaWYgKG5vdyA+PSBlLT5leHBpcmVzKSB7Ci0gICAgICAgICAgICBFbnRyeSoqIGxvb2t1cCA9IF9jYWNoZV9sb29rdXBfcChjYWNoZSwgZSk7Ci0gICAgICAgICAgICBpZiAoKmxvb2t1cCA9PSBOVUxMKSB7IC8qIHNob3VsZCBub3QgaGFwcGVuICovCi0gICAgICAgICAgICAgICAgWExPRygiJXM6IEVOVFJZIE5PVCBJTiBIVEFCTEUgPyIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZSA9IGUtPm1ydV9uZXh0OwotICAgICAgICAgICAgX2NhY2hlX3JlbW92ZV9wKGNhY2hlLCBsb29rdXApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZSA9IGUtPm1ydV9uZXh0OwotICAgICAgICB9Ci0gICAgfQotfQotCi1SZXNvbHZDYWNoZVN0YXR1cwotX3Jlc29sdl9jYWNoZV9sb29rdXAoIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHF1ZXJ5bGVuLAotICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICBhbnN3ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFuc3dlcnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgKmFuc3dlcmxlbiApCi17Ci0gICAgRW50cnkgICAgICBrZXlbMV07Ci0gICAgRW50cnkqKiAgICBsb29rdXA7Ci0gICAgRW50cnkqICAgICBlOwotICAgIHRpbWVfdCAgICAgbm93OwotCi0gICAgUmVzb2x2Q2FjaGVTdGF0dXMgIHJlc3VsdCA9IFJFU09MVl9DQUNIRV9OT1RGT1VORDsKLQotICAgIFhMT0coIiVzOiBsb29rdXAiLCBfX0ZVTkNUSU9OX18pOwotICAgIFhMT0dfUVVFUlkocXVlcnksIHF1ZXJ5bGVuKTsKLQotICAgIC8qIHdlIGRvbid0IGNhY2hlIG1hbGZvcm1lZCBxdWVyaWVzICovCi0gICAgaWYgKCFlbnRyeV9pbml0X2tleShrZXksIHF1ZXJ5LCBxdWVyeWxlbikpIHsKLSAgICAgICAgWExPRygiJXM6IHVuc3VwcG9ydGVkIHF1ZXJ5IiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgcmV0dXJuIFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRDsKLSAgICB9Ci0gICAgLyogbG9va3VwIGNhY2hlICovCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCAmY2FjaGUtPmxvY2sgKTsKLQotICAgIC8qIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgX2xvb2t1cF9wIHRvIHVuZGVyc3RhbmQgdGhpcy4KLSAgICAgKiB0aGUgZnVuY3Rpb24gYWx3YXlzIHJldHVybiBhIG5vbi1OVUxMIHBvaW50ZXIuCi0gICAgICovCi0gICAgbG9va3VwID0gX2NhY2hlX2xvb2t1cF9wKGNhY2hlLCBrZXkpOwotICAgIGUgICAgICA9ICpsb29rdXA7Ci0KLSAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgIFhMT0coICJOT1QgSU4gQ0FDSEUiKTsKLSAgICAgICAgLy8gY2FsbGluZyB0aHJlYWQgd2lsbCB3YWl0IGlmIGFuIG91dHN0YW5kaW5nIHJlcXVlc3QgaXMgZm91bmQKLSAgICAgICAgLy8gdGhhdCBtYXRjaGluZyB0aGlzIHF1ZXJ5Ci0gICAgICAgIGlmICghX2NhY2hlX2NoZWNrX3BlbmRpbmdfcmVxdWVzdF9sb2NrZWQoY2FjaGUsIGtleSkpIHsKLSAgICAgICAgICAgIGdvdG8gRXhpdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxvb2t1cCA9IF9jYWNoZV9sb29rdXBfcChjYWNoZSwga2V5KTsKLSAgICAgICAgICAgIGUgPSAqbG9va3VwOwotICAgICAgICAgICAgaWYgKGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIG5vdyA9IF90aW1lX25vdygpOwotCi0gICAgLyogcmVtb3ZlIHN0YWxlIGVudHJpZXMgaGVyZSAqLwotICAgIGlmIChub3cgPj0gZS0+ZXhwaXJlcykgewotICAgICAgICBYTE9HKCAiIE5PVCBJTiBDQUNIRSAoU1RBTEUgRU5UUlkgJXAgRElTQ0FSREVEKSIsICpsb29rdXAgKTsKLSAgICAgICAgWExPR19RVUVSWShlLT5xdWVyeSwgZS0+cXVlcnlsZW4pOwotICAgICAgICBfY2FjaGVfcmVtb3ZlX3AoY2FjaGUsIGxvb2t1cCk7Ci0gICAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICAqYW5zd2VybGVuID0gZS0+YW5zd2VybGVuOwotICAgIGlmIChlLT5hbnN3ZXJsZW4gPiBhbnN3ZXJzaXplKSB7Ci0gICAgICAgIC8qIE5PVEU6IHdlIHJldHVybiBVTlNVUFBPUlRFRCBpZiB0aGUgYW5zd2VyIGJ1ZmZlciBpcyB0b28gc2hvcnQgKi8KLSAgICAgICAgcmVzdWx0ID0gUkVTT0xWX0NBQ0hFX1VOU1VQUE9SVEVEOwotICAgICAgICBYTE9HKCIgQU5TV0VSIFRPTyBMT05HIik7Ci0gICAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICBtZW1jcHkoIGFuc3dlciwgZS0+YW5zd2VyLCBlLT5hbnN3ZXJsZW4gKTsKLQotICAgIC8qIGJ1bXAgdXAgdGhpcyBlbnRyeSB0byB0aGUgdG9wIG9mIHRoZSBNUlUgbGlzdCAqLwotICAgIGlmIChlICE9IGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dCkgewotICAgICAgICBlbnRyeV9tcnVfcmVtb3ZlKCBlICk7Ci0gICAgICAgIGVudHJ5X21ydV9hZGQoIGUsICZjYWNoZS0+bXJ1X2xpc3QgKTsKLSAgICB9Ci0KLSAgICBYTE9HKCAiRk9VTkQgSU4gQ0FDSEUgZW50cnk9JXAiLCBlICk7Ci0gICAgcmVzdWx0ID0gUkVTT0xWX0NBQ0hFX0ZPVU5EOwotCi1FeGl0OgotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmY2FjaGUtPmxvY2sgKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLXZvaWQKLV9yZXNvbHZfY2FjaGVfYWRkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgIHF1ZXJ5LAotICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBxdWVyeWxlbiwKLSAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgYW5zd2VyLAotICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBhbnN3ZXJsZW4gKQotewotICAgIEVudHJ5ICAgIGtleVsxXTsKLSAgICBFbnRyeSogICBlOwotICAgIEVudHJ5KiogIGxvb2t1cDsKLSAgICB1X2xvbmcgICB0dGw7Ci0KLSAgICAvKiBkb24ndCBhc3N1bWUgdGhhdCB0aGUgcXVlcnkgaGFzIGFscmVhZHkgYmVlbiBjYWNoZWQKLSAgICAgKi8KLSAgICBpZiAoIWVudHJ5X2luaXRfa2V5KCBrZXksIHF1ZXJ5LCBxdWVyeWxlbiApKSB7Ci0gICAgICAgIFhMT0coICIlczogcGFzc2VkIGludmFsaWQgcXVlcnkgPyIsIF9fRlVOQ1RJT05fXyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwdGhyZWFkX211dGV4X2xvY2soICZjYWNoZS0+bG9jayApOwotCi0gICAgWExPRyggIiVzOiBxdWVyeToiLCBfX0ZVTkNUSU9OX18gKTsKLSAgICBYTE9HX1FVRVJZKHF1ZXJ5LHF1ZXJ5bGVuKTsKLSAgICBYTE9HX0FOU1dFUihhbnN3ZXIsIGFuc3dlcmxlbik7Ci0jaWYgREVCVUdfREFUQQotICAgIFhMT0coICJhbnN3ZXI6Iik7Ci0gICAgWExPR19CWVRFUyhhbnN3ZXIsYW5zd2VybGVuKTsKLSNlbmRpZgotCi0gICAgbG9va3VwID0gX2NhY2hlX2xvb2t1cF9wKGNhY2hlLCBrZXkpOwotICAgIGUgICAgICA9ICpsb29rdXA7Ci0KLSAgICBpZiAoZSAhPSBOVUxMKSB7IC8qIHNob3VsZCBub3QgaGFwcGVuICovCi0gICAgICAgIFhMT0coIiVzOiBBTFJFQURZIElOIENBQ0hFICglcCkgPyBJR05PUklORyBBREQiLAotICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZSk7Ci0gICAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICBpZiAoY2FjaGUtPm51bV9lbnRyaWVzID49IGNhY2hlLT5tYXhfZW50cmllcykgewotICAgICAgICBfY2FjaGVfcmVtb3ZlX2V4cGlyZWQoY2FjaGUpOwotICAgICAgICBpZiAoY2FjaGUtPm51bV9lbnRyaWVzID49IGNhY2hlLT5tYXhfZW50cmllcykgewotICAgICAgICAgICAgX2NhY2hlX3JlbW92ZV9vbGRlc3QoY2FjaGUpOwotICAgICAgICB9Ci0gICAgICAgIC8qIG5lZWQgdG8gbG9va3VwIGFnYWluICovCi0gICAgICAgIGxvb2t1cCA9IF9jYWNoZV9sb29rdXBfcChjYWNoZSwga2V5KTsKLSAgICAgICAgZSAgICAgID0gKmxvb2t1cDsKLSAgICAgICAgaWYgKGUgIT0gTlVMTCkgewotICAgICAgICAgICAgWExPRygiJXM6IEFMUkVBRFkgSU4gQ0FDSEUgKCVwKSA/IElHTk9SSU5HIEFERCIsCi0gICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBlKTsKLSAgICAgICAgICAgIGdvdG8gRXhpdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHR0bCA9IGFuc3dlcl9nZXRUVEwoYW5zd2VyLCBhbnN3ZXJsZW4pOwotICAgIGlmICh0dGwgPiAwKSB7Ci0gICAgICAgIGUgPSBlbnRyeV9hbGxvYyhrZXksIGFuc3dlciwgYW5zd2VybGVuKTsKLSAgICAgICAgaWYgKGUgIT0gTlVMTCkgewotICAgICAgICAgICAgZS0+ZXhwaXJlcyA9IHR0bCArIF90aW1lX25vdygpOwotICAgICAgICAgICAgX2NhY2hlX2FkZF9wKGNhY2hlLCBsb29rdXAsIGUpOwotICAgICAgICB9Ci0gICAgfQotI2lmIERFQlVHCi0gICAgX2NhY2hlX2R1bXBfbXJ1KGNhY2hlKTsKLSNlbmRpZgotRXhpdDoKLSAgICBfY2FjaGVfbm90aWZ5X3dhaXRpbmdfdGlkX2xvY2tlZChjYWNoZSwga2V5KTsKLSAgICBwdGhyZWFkX211dGV4X3VubG9jayggJmNhY2hlLT5sb2NrICk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLS8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwotLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgcHRocmVhZF9vbmNlX3QgICAgICAgIF9yZXNfY2FjaGVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotCi0vLyBIZWFkIG9mIHRoZSBsaXN0IG9mIGNhY2hlcy4gIFByb3RlY3RlZCBieSBfcmVzX2NhY2hlX2xpc3RfbG9jay4KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8gX3Jlc19jYWNoZV9saXN0OwotCi0vLyBMaXN0IG9mIHBpZCBpZmFjZSBwYWlycwotc3RhdGljIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyBfcmVzX3BpZGlmYWNlX2xpc3Q7Ci0KLS8vIExpc3Qgb2YgdWlkIGlmYWNlIHBhaXJzCi1zdGF0aWMgc3RydWN0IHJlc29sdl91aWRpZmFjZV9pbmZvIF9yZXNfdWlkaWZhY2VfbGlzdDsKLQotLy8gbmFtZSBvZiB0aGUgY3VycmVudCBkZWZhdWx0IGludGVmYWNlCi1zdGF0aWMgY2hhciAgICAgICAgICAgIF9yZXNfZGVmYXVsdF9pZm5hbWVbSUZfTkFNRVNJWkUgKyAxXTsKLQotLy8gbG9jayBwcm90ZWN0aW5nIGV2ZXJ5dGhpbmcgaW4gdGhlIF9yZXNvbHZlX2NhY2hlX2luZm8gc3RydWN0cyAobmV4dCBwdHIsIGV0YykKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgX3Jlc19jYWNoZV9saXN0X2xvY2s7Ci0KLS8vIGxvY2sgcHJvdGVjdGluZyB0aGUgX3Jlc19waWRfaWZhY2VfbGlzdAotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBfcmVzX3BpZGlmYWNlX2xpc3RfbG9jazsKLQotLy8gbG9jayBwcm90ZWN0aW5nIHRoZSBfcmVzX3VpZGlmYWNlX2xpc3QKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgX3Jlc191aWRpZmFjZV9saXN0X2xvY2s7Ci0KLS8qIGxvb2t1cCB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgbmFtZSAqLwotc3RhdGljIGNoYXIgKl9nZXRfZGVmYXVsdF9pZmFjZV9sb2NrZWQoKTsKLS8qIGZpbmQgdGhlIGZpcnN0IGNhY2hlIHRoYXQgaGFzIGFuIGFzc29jaWF0ZWQgaW50ZXJmYWNlIGFuZCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSAqLwotc3RhdGljIGNoYXIqIF9maW5kX2FueV9pZmFjZV9uYW1lX2xvY2tlZCggdm9pZCApOwotCi0vKiBpbnNlcnQgcmVzb2x2X2NhY2hlX2luZm8gaW50byB0aGUgbGlzdCBvZiByZXNvbHZfY2FjaGVfaW5mb3MgKi8KLXN0YXRpYyB2b2lkIF9pbnNlcnRfY2FjaGVfaW5mb19sb2NrZWQoc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvKTsKLS8qIGNyZWF0ZXMgYSByZXNvbHZfY2FjaGVfaW5mbyAqLwotc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogX2NyZWF0ZV9jYWNoZV9pbmZvKCB2b2lkICk7Ci0vKiBnZXRzIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcmZhY2UgbmFtZSwgb3IgTlVMTCBpZiBub25lIGV4aXN0cyAqLwotc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGUqIF9maW5kX25hbWVkX2NhY2hlX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUpOwotLyogZ2V0cyBhIHJlc29sdl9jYWNoZV9pbmZvIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcmZhY2UgbmFtZSwgb3IgTlVMTCBpZiBub3QgZm91bmQgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIF9maW5kX2NhY2hlX2luZm9fbG9ja2VkKGNvbnN0IGNoYXIqIGlmbmFtZSk7Ci0vKiBsb29rIHVwIHRoZSBuYW1lZCBjYWNoZSwgYW5kIGNyZWF0ZXMgb25lIGlmIG5lZWRlZCAqLwotc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGUqIF9nZXRfcmVzX2NhY2hlX2Zvcl9pZmFjZV9sb2NrZWQoY29uc3QgY2hhciogaWZuYW1lKTsKLS8qIGVtcHR5IHRoZSBuYW1lZCBjYWNoZSAqLwotc3RhdGljIHZvaWQgX2ZsdXNoX2NhY2hlX2Zvcl9pZmFjZV9sb2NrZWQoY29uc3QgY2hhciogaWZuYW1lKTsKLS8qIGVtcHR5IHRoZSBuYW1lc2VydmVycyBzZXQgZm9yIHRoZSBuYW1lZCBjYWNoZSAqLwotc3RhdGljIHZvaWQgX2ZyZWVfbmFtZXNlcnZlcnNfbG9ja2VkKHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbyk7Ci0vKiBsb29rdXAgdGhlIG5hbXNlcnZlciBmb3IgdGhlIG5hbWUgaW50ZXJmYWNlICovCi1zdGF0aWMgaW50IF9nZXRfbmFtZXNlcnZlcl9sb2NrZWQoY29uc3QgY2hhciogaWZuYW1lLCBpbnQgbiwgY2hhciogYWRkciwgaW50IGFkZHJMZW4pOwotLyogbG9va3VwIHRoZSBhZGRyIG9mIHRoZSBuYW1lc2VydmVyIGZvciB0aGUgbmFtZWQgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IGFkZHJpbmZvKiBfZ2V0X25hbWVzZXJ2ZXJfYWRkcl9sb2NrZWQoY29uc3QgY2hhciogaWZuYW1lLCBpbnQgbik7Ci0vKiBsb29rdXAgdGhlIGludGVmYWNlJ3MgYWRkcmVzcyAqLwotc3RhdGljIHN0cnVjdCBpbl9hZGRyKiBfZ2V0X2FkZHJfbG9ja2VkKGNvbnN0IGNoYXIgKiBpZm5hbWUpOwotLyogcmV0dXJuIDEgaWYgdGhlIHByb3ZpZGVkIGxpc3Qgb2YgbmFtZSBzZXJ2ZXJzIGRpZmZlcnMgZnJvbSB0aGUgbGlzdCBvZiBuYW1lIHNlcnZlcnMKLSAqIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGUgcHJvdmlkZWQgY2FjaGVfaW5mbyAqLwotc3RhdGljIGludCBfcmVzb2x2X2lzX25hbWVzZXJ2ZXJzX2VxdWFsX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8sCi0gICAgICAgIGNvbnN0IGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycyk7Ci0vKiByZW1vdmUgYSByZXNvbHZfcGlkaWZhY2VfaW5mbyBzdHJ1Y3R1cmUgZnJvbSBfcmVzX3BpZGlmYWNlX2xpc3QgKi8KLXN0YXRpYyB2b2lkIF9yZW1vdmVfcGlkaWZhY2VfaW5mb19sb2NrZWQoaW50IHBpZCk7Ci0vKiBnZXQgYSByZXNvbHZfcGlkaWZhY2VfaW5mbyBzdHJ1Y3R1cmUgZnJvbSBfcmVzX3BpZGlmYWNlX2xpc3Qgd2l0aCBhIGNlcnRhaW4gcGlkICovCi1zdGF0aWMgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKiBfZ2V0X3BpZF9pZmFjZV9pbmZvX2xvY2tlZChpbnQgcGlkKTsKLQotLyogcmVtb3ZlIGEgcmVzb2x2X3BpZGlmYWNlX2luZm8gc3RydWN0dXJlIGZyb20gX3Jlc191aWRpZmFjZV9saXN0ICovCi1zdGF0aWMgaW50IF9yZW1vdmVfdWlkaWZhY2VfaW5mb19sb2NrZWQoY29uc3QgY2hhciogaWZhY2UsIGludCB1aWRfc3RhcnQsIGludCB1aWRfZW5kKTsKLS8qIGdldCBhIHJlc29sdl91aWRpZmFjZV9pbmZvIHN0cnVjdHVyZSBmcm9tIF9yZXNfdWlkaWZhY2VfbGlzdCB3aXRoIGEgY2VydGFpbiB1aWQgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X3VpZGlmYWNlX2luZm8qIF9nZXRfdWlkX2lmYWNlX2luZm9fbG9ja2VkKGludCB1aWQpOwotCi1zdGF0aWMgdm9pZAotX3Jlc19jYWNoZV9pbml0KHZvaWQpCi17Ci0gICAgY29uc3QgY2hhciogIGVudiA9IGdldGVudihDT05GSUdfRU5WKTsKLQotICAgIGlmIChlbnYgJiYgYXRvaShlbnYpID09IDApIHsKLSAgICAgICAgLyogdGhlIGNhY2hlIGlzIGRpc2FibGVkICovCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtZW1zZXQoJl9yZXNfZGVmYXVsdF9pZm5hbWUsIDAsIHNpemVvZihfcmVzX2RlZmF1bHRfaWZuYW1lKSk7Ci0gICAgbWVtc2V0KCZfcmVzX2NhY2hlX2xpc3QsIDAsIHNpemVvZihfcmVzX2NhY2hlX2xpc3QpKTsKLSAgICBtZW1zZXQoJl9yZXNfcGlkaWZhY2VfbGlzdCwgMCwgc2l6ZW9mKF9yZXNfcGlkaWZhY2VfbGlzdCkpOwotICAgIG1lbXNldCgmX3Jlc191aWRpZmFjZV9saXN0LCAwLCBzaXplb2YoX3Jlc191aWRpZmFjZV9saXN0KSk7Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZfcmVzX2NhY2hlX2xpc3RfbG9jaywgTlVMTCk7Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jaywgTlVMTCk7Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZfcmVzX3VpZGlmYWNlX2xpc3RfbG9jaywgTlVMTCk7Ci19Ci0KLXN0cnVjdCByZXNvbHZfY2FjaGUqCi1fX2dldF9yZXNfY2FjaGUoY29uc3QgY2hhciogaWZuYW1lKQotewotICAgIHN0cnVjdCByZXNvbHZfY2FjaGUgKmNhY2hlOwotCi0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0KLSAgICBjaGFyKiBpZmFjZTsKLSAgICBpZiAoaWZuYW1lID09IE5VTEwgfHwgaWZuYW1lWzBdID09ICdcMCcpIHsKLSAgICAgICAgaWZhY2UgPSBfZ2V0X2RlZmF1bHRfaWZhY2VfbG9ja2VkKCk7Ci0gICAgICAgIGlmIChpZmFjZVswXSA9PSAnXDAnKSB7Ci0gICAgICAgICAgICBjaGFyKiB0bXAgPSBfZmluZF9hbnlfaWZhY2VfbmFtZV9sb2NrZWQoKTsKLSAgICAgICAgICAgIGlmICh0bXApIHsKLSAgICAgICAgICAgICAgICBpZmFjZSA9IHRtcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmYWNlID0gKGNoYXIgKikgaWZuYW1lOwotICAgIH0KLQotICAgIGNhY2hlID0gX2dldF9yZXNfY2FjaGVfZm9yX2lmYWNlX2xvY2tlZChpZmFjZSk7Ci0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotICAgIFhMT0coIl9nZXRfcmVzX2NhY2hlOiBpZmFjZSA9ICVzLCBjYWNoZT0lcFxuIiwgaWZhY2UsIGNhY2hlKTsKLSAgICByZXR1cm4gY2FjaGU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlKgotX2dldF9yZXNfY2FjaGVfZm9yX2lmYWNlX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUpCi17Ci0gICAgaWYgKGlmbmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHN0cnVjdCByZXNvbHZfY2FjaGUqIGNhY2hlID0gX2ZpbmRfbmFtZWRfY2FjaGVfbG9ja2VkKGlmbmFtZSk7Ci0gICAgaWYgKCFjYWNoZSkgewotICAgICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8gPSBfY3JlYXRlX2NhY2hlX2luZm8oKTsKLSAgICAgICAgaWYgKGNhY2hlX2luZm8pIHsKLSAgICAgICAgICAgIGNhY2hlID0gX3Jlc29sdl9jYWNoZV9jcmVhdGUoKTsKLSAgICAgICAgICAgIGlmIChjYWNoZSkgewotICAgICAgICAgICAgICAgIGludCBsZW4gPSBzaXplb2YoY2FjaGVfaW5mby0+aWZuYW1lKTsKLSAgICAgICAgICAgICAgICBjYWNoZV9pbmZvLT5jYWNoZSA9IGNhY2hlOwotICAgICAgICAgICAgICAgIHN0cm5jcHkoY2FjaGVfaW5mby0+aWZuYW1lLCBpZm5hbWUsIGxlbiAtIDEpOwotICAgICAgICAgICAgICAgIGNhY2hlX2luZm8tPmlmbmFtZVtsZW4gLSAxXSA9ICdcMCc7Ci0KLSAgICAgICAgICAgICAgICBfaW5zZXJ0X2NhY2hlX2luZm9fbG9ja2VkKGNhY2hlX2luZm8pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmcmVlKGNhY2hlX2luZm8pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjYWNoZTsKLX0KLQotdm9pZAotX3Jlc29sdl9jYWNoZV9yZXNldCh1bnNpZ25lZCAgZ2VuZXJhdGlvbikKLXsKLSAgICBYTE9HKCIlczogZ2VuZXJhdGlvbj0lZCIsIF9fRlVOQ1RJT05fXywgZ2VuZXJhdGlvbik7Ci0KLSAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLQotICAgIGNoYXIqIGlmbmFtZSA9IF9nZXRfZGVmYXVsdF9pZmFjZV9sb2NrZWQoKTsKLSAgICAvLyBpZiBkZWZhdWx0IGludGVyZmFjZSBub3Qgc2V0IHRoZW4gdXNlIHRoZSBmaXJzdCBjYWNoZQotICAgIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcmZhY2UgYXMgdGhlIGRlZmF1bHQgb25lLgotICAgIC8vIE5vdGU6IENvcGllZCB0aGUgY29kZSBmcm9tIF9fZ2V0X3Jlc19jYWNoZSBzaW5jZSB0aGlzCi0gICAgLy8gbWV0aG9kIHdpbGwgYmUgZGVsZXRlZC9vYnNvbGV0ZSB3aGVuIGNhY2hlIHBlciBpbnRlcmZhY2UKLSAgICAvLyBpbXBsZW1lbnRlZCBhbGwgb3ZlcgotICAgIGlmIChpZm5hbWVbMF0gPT0gJ1wwJykgewotICAgICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8gPSBfcmVzX2NhY2hlX2xpc3QubmV4dDsKLSAgICAgICAgd2hpbGUgKGNhY2hlX2luZm8pIHsKLSAgICAgICAgICAgIGlmIChjYWNoZV9pbmZvLT5pZm5hbWVbMF0gIT0gJ1wwJykgewotICAgICAgICAgICAgICAgIGlmbmFtZSA9IGNhY2hlX2luZm8tPmlmbmFtZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FjaGVfaW5mbyA9IGNhY2hlX2luZm8tPm5leHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUgPSBfZ2V0X3Jlc19jYWNoZV9mb3JfaWZhY2VfbG9ja2VkKGlmbmFtZSk7Ci0KLSAgICBpZiAoY2FjaGUgIT0gTlVMTCkgewotICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soICZjYWNoZS0+bG9jayApOwotICAgICAgICBpZiAoY2FjaGUtPmdlbmVyYXRpb24gIT0gZ2VuZXJhdGlvbikgewotICAgICAgICAgICAgX2NhY2hlX2ZsdXNoX2xvY2tlZChjYWNoZSk7Ci0gICAgICAgICAgICBjYWNoZS0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247Ci0gICAgICAgIH0KLSAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soICZjYWNoZS0+bG9jayApOwotICAgIH0KLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfZmx1c2hfY2FjaGVfZm9yX2RlZmF1bHRfaWZhY2Uodm9pZCkKLXsKLSAgICBjaGFyKiBpZm5hbWU7Ci0KLSAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLQotICAgIGlmbmFtZSA9IF9nZXRfZGVmYXVsdF9pZmFjZV9sb2NrZWQoKTsKLSAgICBfZmx1c2hfY2FjaGVfZm9yX2lmYWNlX2xvY2tlZChpZm5hbWUpOwotCi0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLX0KLQotdm9pZAotX3Jlc29sdl9mbHVzaF9jYWNoZV9mb3JfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKQotewotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotCi0gICAgX2ZsdXNoX2NhY2hlX2Zvcl9pZmFjZV9sb2NrZWQoaWZuYW1lKTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZmx1c2hfY2FjaGVfZm9yX2lmYWNlX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUpCi17Ci0gICAgc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUgPSBfZmluZF9uYW1lZF9jYWNoZV9sb2NrZWQoaWZuYW1lKTsKLSAgICBpZiAoY2FjaGUpIHsKLSAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZjYWNoZS0+bG9jayk7Ci0gICAgICAgIF9jYWNoZV9mbHVzaF9sb2NrZWQoY2FjaGUpOwotICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmY2FjaGUtPmxvY2spOwotICAgIH0KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyoKLV9jcmVhdGVfY2FjaGVfaW5mbyh2b2lkKQotewotICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogIGNhY2hlX2luZm87Ci0KLSAgICBjYWNoZV9pbmZvID0gY2FsbG9jKHNpemVvZigqY2FjaGVfaW5mbyksIDEpOwotICAgIHJldHVybiBjYWNoZV9pbmZvOwotfQotCi1zdGF0aWMgdm9pZAotX2luc2VydF9jYWNoZV9pbmZvX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8pCi17Ci0gICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBsYXN0OwotCi0gICAgZm9yIChsYXN0ID0gJl9yZXNfY2FjaGVfbGlzdDsgbGFzdC0+bmV4dDsgbGFzdCA9IGxhc3QtPm5leHQpOwotCi0gICAgbGFzdC0+bmV4dCA9IGNhY2hlX2luZm87Ci0KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvbHZfY2FjaGUqCi1fZmluZF9uYW1lZF9jYWNoZV9sb2NrZWQoY29uc3QgY2hhciogaWZuYW1lKSB7Ci0KLSAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGluZm8gPSBfZmluZF9jYWNoZV9pbmZvX2xvY2tlZChpZm5hbWUpOwotCi0gICAgaWYgKGluZm8gIT0gTlVMTCkgcmV0dXJuIGluZm8tPmNhY2hlOwotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qCi1fZmluZF9jYWNoZV9pbmZvX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUpCi17Ci0gICAgaWYgKGlmbmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbyA9IF9yZXNfY2FjaGVfbGlzdC5uZXh0OwotCi0gICAgd2hpbGUgKGNhY2hlX2luZm8pIHsKLSAgICAgICAgaWYgKHN0cmNtcChjYWNoZV9pbmZvLT5pZm5hbWUsIGlmbmFtZSkgPT0gMCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYWNoZV9pbmZvID0gY2FjaGVfaW5mby0+bmV4dDsKLSAgICB9Ci0gICAgcmV0dXJuIGNhY2hlX2luZm87Ci19Ci0KLXN0YXRpYyBjaGFyKgotX2dldF9kZWZhdWx0X2lmYWNlX2xvY2tlZCh2b2lkKQotewotCi0gICAgY2hhciogaWZhY2UgPSBfcmVzX2RlZmF1bHRfaWZuYW1lOwotCi0gICAgcmV0dXJuIGlmYWNlOwotfQotCi1zdGF0aWMgY2hhcioKLV9maW5kX2FueV9pZmFjZV9uYW1lX2xvY2tlZCggdm9pZCApIHsKLSAgICBjaGFyKiBpZm5hbWUgPSBOVUxMOwotCi0gICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvID0gX3Jlc19jYWNoZV9saXN0Lm5leHQ7Ci0gICAgd2hpbGUgKGNhY2hlX2luZm8pIHsKLSAgICAgICAgaWYgKGNhY2hlX2luZm8tPmlmbmFtZVswXSAhPSAnXDAnKSB7Ci0gICAgICAgICAgICBpZm5hbWUgPSBjYWNoZV9pbmZvLT5pZm5hbWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhY2hlX2luZm8gPSBjYWNoZV9pbmZvLT5uZXh0OwotICAgIH0KLQotICAgIHJldHVybiBpZm5hbWU7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfc2V0X2RlZmF1bHRfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKQotewotICAgIFhMT0coIl9yZXNvbHZfc2V0X2RlZmF1bHRfaWYgaWZuYW1lICVzXG4iLGlmbmFtZSk7Ci0KLSAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLQotICAgIGludCBzaXplID0gc2l6ZW9mKF9yZXNfZGVmYXVsdF9pZm5hbWUpOwotICAgIG1lbXNldChfcmVzX2RlZmF1bHRfaWZuYW1lLCAwLCBzaXplKTsKLSAgICBzdHJuY3B5KF9yZXNfZGVmYXVsdF9pZm5hbWUsIGlmbmFtZSwgc2l6ZSAtIDEpOwotICAgIF9yZXNfZGVmYXVsdF9pZm5hbWVbc2l6ZSAtIDFdID0gJ1wwJzsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfc2V0X25hbWVzZXJ2ZXJzX2Zvcl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUsIGNvbnN0IGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycywKLSAgICAgICAgY29uc3QgY2hhciAqZG9tYWlucykKLXsKLSAgICBpbnQgaSwgcnQsIGluZGV4OwotICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50czsKLSAgICBjaGFyIHNidWZbTklfTUFYU0VSVl07Ci0gICAgcmVnaXN0ZXIgY2hhciAqY3A7Ci0gICAgaW50ICpvZmZzZXQ7Ci0KLSAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLQotICAgIC8vIGNyZWF0ZXMgdGhlIGNhY2hlIGlmIG5vdCBjcmVhdGVkCi0gICAgX2dldF9yZXNfY2FjaGVfZm9yX2lmYWNlX2xvY2tlZChpZm5hbWUpOwotCi0gICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvID0gX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQoaWZuYW1lKTsKLQotICAgIGlmIChjYWNoZV9pbmZvICE9IE5VTEwgJiYKLSAgICAgICAgICAgICFfcmVzb2x2X2lzX25hbWVzZXJ2ZXJzX2VxdWFsX2xvY2tlZChjYWNoZV9pbmZvLCBzZXJ2ZXJzLCBudW1zZXJ2ZXJzKSkgewotICAgICAgICAvLyBmcmVlIGN1cnJlbnQgYmVmb3JlIGFkZGluZyBuZXcKLSAgICAgICAgX2ZyZWVfbmFtZXNlcnZlcnNfbG9ja2VkKGNhY2hlX2luZm8pOwotCi0gICAgICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwotICAgICAgICBoaW50cy5haV9mYW1pbHkgPSBQRl9VTlNQRUM7Ci0gICAgICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsgLypkdW1teSovCi0gICAgICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfTlVNRVJJQ0hPU1Q7Ci0gICAgICAgIHNwcmludGYoc2J1ZiwgIiV1IiwgTkFNRVNFUlZFUl9QT1JUKTsKLQotICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1zZXJ2ZXJzICYmIGkgPCBNQVhOUzsgaSsrKSB7Ci0gICAgICAgICAgICBydCA9IGdldGFkZHJpbmZvKHNlcnZlcnNbaV0sIHNidWYsICZoaW50cywgJmNhY2hlX2luZm8tPm5zYWRkcmluZm9baW5kZXhdKTsKLSAgICAgICAgICAgIGlmIChydCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY2FjaGVfaW5mby0+bmFtZXNlcnZlcnNbaW5kZXhdID0gc3RyZHVwKHNlcnZlcnNbaV0pOwotICAgICAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICAgICAgWExPRygiX3Jlc29sdl9zZXRfbmFtZXNlcnZlcnNfZm9yX2lmYWNlOiBpZmFjZSA9ICVzLCBhZGRyID0gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpZm5hbWUsIHNlcnZlcnNbaV0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjYWNoZV9pbmZvLT5uc2FkZHJpbmZvW2luZGV4XSA9IE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjb2RlIG1vdmVkIGZyb20gcmVzX2luaXQuYywgbG9hZF9kb21haW5fc2VhcmNoX2xpc3QKLSAgICAgICAgc3RybGNweShjYWNoZV9pbmZvLT5kZWZkbmFtZSwgZG9tYWlucywgc2l6ZW9mKGNhY2hlX2luZm8tPmRlZmRuYW1lKSk7Ci0gICAgICAgIGlmICgoY3AgPSBzdHJjaHIoY2FjaGVfaW5mby0+ZGVmZG5hbWUsICdcbicpKSAhPSBOVUxMKQotICAgICAgICAgICAgKmNwID0gJ1wwJzsKLSAgICAgICAgY3AgPSBjYWNoZV9pbmZvLT5kZWZkbmFtZTsKLSAgICAgICAgb2Zmc2V0ID0gY2FjaGVfaW5mby0+ZG5zcmNoX29mZnNldDsKLSAgICAgICAgd2hpbGUgKG9mZnNldCA8IGNhY2hlX2luZm8tPmRuc3JjaF9vZmZzZXQgKyBNQVhETlNSQ0gpIHsKLSAgICAgICAgICAgIHdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSAvKiBza2lwIGxlYWRpbmcgd2hpdGUgc3BhY2UgKi8KLSAgICAgICAgICAgICAgICBjcCsrOwotICAgICAgICAgICAgaWYgKCpjcCA9PSAnXDAnKSAvKiBzdG9wIGlmIG5vdGhpbmcgbW9yZSB0byBkbyAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgKm9mZnNldCsrID0gY3AgLSBjYWNoZV9pbmZvLT5kZWZkbmFtZTsgLyogcmVjb3JkIHRoaXMgc2VhcmNoIGRvbWFpbiAqLwotICAgICAgICAgICAgd2hpbGUgKCpjcCkgeyAvKiB6ZXJvLXRlcm1pbmF0ZSBpdCAqLwotICAgICAgICAgICAgICAgIGlmICgqY3AgPT0gJyAnfHwgKmNwID09ICdcdCcpIHsKLSAgICAgICAgICAgICAgICAgICAgKmNwKysgPSAnXDAnOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3ArKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAqb2Zmc2V0ID0gLTE7IC8qIGNhY2hlX2luZm8tPmRuc3JjaF9vZmZzZXQgaGFzIE1BWEROU1JDSCsxIGl0ZW1zICovCi0KLSAgICAgICAgLy8gZmx1c2ggY2FjaGUgc2luY2UgbmV3IHNldHRpbmdzCi0gICAgICAgIF9mbHVzaF9jYWNoZV9mb3JfaWZhY2VfbG9ja2VkKGlmbmFtZSk7Ci0KLSAgICB9Ci0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotfQotCi1zdGF0aWMgaW50Ci1fcmVzb2x2X2lzX25hbWVzZXJ2ZXJzX2VxdWFsX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8sCi0gICAgICAgIGNvbnN0IGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycykKLXsKLSAgICBpbnQgaTsKLSAgICBjaGFyKiogbnM7Ci0gICAgaW50IGVxdWFsID0gMTsKLQotICAgIC8vIGNvbXBhcmUgZWFjaCBuYW1lIHNlcnZlciBhZ2FpbnN0IGN1cnJlbnQgbmFtZSBzZXJ2ZXJzCi0gICAgaWYgKG51bXNlcnZlcnMgPiBNQVhOUykgbnVtc2VydmVycyA9IE1BWE5TOwotICAgIGZvciAoaSA9IDA7IGkgPCBudW1zZXJ2ZXJzICYmIGVxdWFsOyBpKyspIHsKLSAgICAgICAgbnMgPSBjYWNoZV9pbmZvLT5uYW1lc2VydmVyczsKLSAgICAgICAgZXF1YWwgPSAwOwotICAgICAgICB3aGlsZSgqbnMpIHsKLSAgICAgICAgICAgIGlmIChzdHJjbXAoKm5zLCBzZXJ2ZXJzW2ldKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgZXF1YWwgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbnMrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBlcXVhbDsKLX0KLQotc3RhdGljIHZvaWQKLV9mcmVlX25hbWVzZXJ2ZXJzX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8pCi17Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8PSBNQVhOUzsgaSsrKSB7Ci0gICAgICAgIGZyZWUoY2FjaGVfaW5mby0+bmFtZXNlcnZlcnNbaV0pOwotICAgICAgICBjYWNoZV9pbmZvLT5uYW1lc2VydmVyc1tpXSA9IE5VTEw7Ci0gICAgICAgIGlmIChjYWNoZV9pbmZvLT5uc2FkZHJpbmZvW2ldICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGZyZWVhZGRyaW5mbyhjYWNoZV9pbmZvLT5uc2FkZHJpbmZvW2ldKTsKLSAgICAgICAgICAgIGNhY2hlX2luZm8tPm5zYWRkcmluZm9baV0gPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotfQotCi1pbnQKLV9yZXNvbHZfY2FjaGVfZ2V0X25hbWVzZXJ2ZXIoaW50IG4sIGNoYXIqIGFkZHIsIGludCBhZGRyTGVuKQotewotICAgIGNoYXIgKmlmbmFtZTsKLSAgICBpbnQgcmVzdWx0ID0gMDsKLQotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotCi0gICAgaWZuYW1lID0gX2dldF9kZWZhdWx0X2lmYWNlX2xvY2tlZCgpOwotICAgIHJlc3VsdCA9IF9nZXRfbmFtZXNlcnZlcl9sb2NrZWQoaWZuYW1lLCBuLCBhZGRyLCBhZGRyTGVuKTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludAotX2dldF9uYW1lc2VydmVyX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUsIGludCBuLCBjaGFyKiBhZGRyLCBpbnQgYWRkckxlbikKLXsKLSAgICBpbnQgbGVuID0gMDsKLSAgICBjaGFyKiBuczsKLSAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm87Ci0KLSAgICBpZiAobiA8IDEgfHwgbiA+IE1BWE5TIHx8ICFhZGRyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNhY2hlX2luZm8gPSBfZmluZF9jYWNoZV9pbmZvX2xvY2tlZChpZm5hbWUpOwotICAgIGlmIChjYWNoZV9pbmZvKSB7Ci0gICAgICAgIG5zID0gY2FjaGVfaW5mby0+bmFtZXNlcnZlcnNbbiAtIDFdOwotICAgICAgICBpZiAobnMpIHsKLSAgICAgICAgICAgIGxlbiA9IHN0cmxlbihucyk7Ci0gICAgICAgICAgICBpZiAobGVuIDwgYWRkckxlbikgewotICAgICAgICAgICAgICAgIHN0cm5jcHkoYWRkciwgbnMsIGxlbik7Ci0gICAgICAgICAgICAgICAgYWRkcltsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbGVuID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBsZW47Ci19Ci0KLXN0cnVjdCBhZGRyaW5mbyoKLV9jYWNoZV9nZXRfbmFtZXNlcnZlcl9hZGRyKGludCBuKQotewotICAgIHN0cnVjdCBhZGRyaW5mbyAqcmVzdWx0OwotICAgIGNoYXIqIGlmbmFtZTsKLQotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotCi0gICAgaWZuYW1lID0gX2dldF9kZWZhdWx0X2lmYWNlX2xvY2tlZCgpOwotCi0gICAgcmVzdWx0ID0gX2dldF9uYW1lc2VydmVyX2FkZHJfbG9ja2VkKGlmbmFtZSwgbik7Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgc3RydWN0IGFkZHJpbmZvKgotX2dldF9uYW1lc2VydmVyX2FkZHJfbG9ja2VkKGNvbnN0IGNoYXIqIGlmbmFtZSwgaW50IG4pCi17Ci0gICAgc3RydWN0IGFkZHJpbmZvKiBhaSA9IE5VTEw7Ci0gICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvOwotCi0gICAgaWYgKG4gPCAxIHx8IG4gPiBNQVhOUykKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBjYWNoZV9pbmZvID0gX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQoaWZuYW1lKTsKLSAgICBpZiAoY2FjaGVfaW5mbykgewotICAgICAgICBhaSA9IGNhY2hlX2luZm8tPm5zYWRkcmluZm9bbiAtIDFdOwotICAgIH0KLSAgICByZXR1cm4gYWk7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfc2V0X2FkZHJfb2ZfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lLCBzdHJ1Y3QgaW5fYWRkciogYWRkcikKLXsKLSAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLSAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8gPSBfZmluZF9jYWNoZV9pbmZvX2xvY2tlZChpZm5hbWUpOwotICAgIGlmIChjYWNoZV9pbmZvKSB7Ci0gICAgICAgIG1lbWNweSgmY2FjaGVfaW5mby0+aWZhZGRyLCBhZGRyLCBzaXplb2YoKmFkZHIpKTsKLQotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgIFhMT0coImFkZHJlc3Mgb2YgaW50ZXJmYWNlICVzIGlzICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBpZm5hbWUsIGluZXRfbnRvYShjYWNoZV9pbmZvLT5pZmFkZHIpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotfQotCi1zdHJ1Y3QgaW5fYWRkcioKLV9yZXNvbHZfZ2V0X2FkZHJfb2ZfZGVmYXVsdF9pZmFjZSh2b2lkKQotewotICAgIHN0cnVjdCBpbl9hZGRyKiBhaSA9IE5VTEw7Ci0gICAgY2hhciogaWZuYW1lOwotCi0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0gICAgaWZuYW1lID0gX2dldF9kZWZhdWx0X2lmYWNlX2xvY2tlZCgpOwotICAgIGFpID0gX2dldF9hZGRyX2xvY2tlZChpZm5hbWUpOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0KLSAgICByZXR1cm4gYWk7Ci19Ci0KLXN0cnVjdCBpbl9hZGRyKgotX3Jlc29sdl9nZXRfYWRkcl9vZl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUpCi17Ci0gICAgc3RydWN0IGluX2FkZHIqIGFpID0gTlVMTDsKLQotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotICAgIGFpID1fZ2V0X2FkZHJfbG9ja2VkKGlmbmFtZSk7Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLSAgICByZXR1cm4gYWk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW5fYWRkcioKLV9nZXRfYWRkcl9sb2NrZWQoY29uc3QgY2hhciAqIGlmbmFtZSkKLXsKLSAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8gPSBfZmluZF9jYWNoZV9pbmZvX2xvY2tlZChpZm5hbWUpOwotICAgIGlmIChjYWNoZV9pbmZvKSB7Ci0gICAgICAgIHJldHVybiAmY2FjaGVfaW5mby0+aWZhZGRyOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLV9yZW1vdmVfcGlkaWZhY2VfaW5mb19sb2NrZWQoaW50IHBpZCkgewotICAgIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyogcmVzdWx0ID0gJl9yZXNfcGlkaWZhY2VfbGlzdDsKLSAgICBzdHJ1Y3QgcmVzb2x2X3BpZGlmYWNlX2luZm8qIHByZXYgPSBOVUxMOwotCi0gICAgd2hpbGUgKHJlc3VsdCAhPSBOVUxMICYmIHJlc3VsdC0+cGlkICE9IHBpZCkgewotICAgICAgICBwcmV2ID0gcmVzdWx0OwotICAgICAgICByZXN1bHQgPSByZXN1bHQtPm5leHQ7Ci0gICAgfQotICAgIGlmIChwcmV2ICE9IE5VTEwgJiYgcmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgcHJldi0+bmV4dCA9IHJlc3VsdC0+bmV4dDsKLSAgICAgICAgZnJlZShyZXN1bHQpOwotICAgIH0KLX0KLQotc3RhdGljIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyoKLV9nZXRfcGlkX2lmYWNlX2luZm9fbG9ja2VkKGludCBwaWQpCi17Ci0gICAgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKiByZXN1bHQgPSAmX3Jlc19waWRpZmFjZV9saXN0OwotICAgIHdoaWxlIChyZXN1bHQgIT0gTlVMTCAmJiByZXN1bHQtPnBpZCAhPSBwaWQpIHsKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5uZXh0OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfc2V0X2lmYWNlX2Zvcl9waWQoY29uc3QgY2hhciogaWZuYW1lLCBpbnQgcGlkKQotewotICAgIC8vIG1ha2Ugc3VyZSB0aGUgcGlkIGlmYWNlIGxpc3QgaXMgY3JlYXRlZAotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19waWRpZmFjZV9saXN0X2xvY2spOwotCi0gICAgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKiBwaWRpZmFjZV9pbmZvID0gX2dldF9waWRfaWZhY2VfaW5mb19sb2NrZWQocGlkKTsKLSAgICBpZiAoIXBpZGlmYWNlX2luZm8pIHsKLSAgICAgICAgcGlkaWZhY2VfaW5mbyA9IGNhbGxvYyhzaXplb2YoKnBpZGlmYWNlX2luZm8pLCAxKTsKLSAgICAgICAgaWYgKHBpZGlmYWNlX2luZm8pIHsKLSAgICAgICAgICAgIHBpZGlmYWNlX2luZm8tPnBpZCA9IHBpZDsKLSAgICAgICAgICAgIGludCBsZW4gPSBzaXplb2YocGlkaWZhY2VfaW5mby0+aWZuYW1lKTsKLSAgICAgICAgICAgIHN0cm5jcHkocGlkaWZhY2VfaW5mby0+aWZuYW1lLCBpZm5hbWUsIGxlbiAtIDEpOwotICAgICAgICAgICAgcGlkaWZhY2VfaW5mby0+aWZuYW1lW2xlbiAtIDFdID0gJ1wwJzsKLQotICAgICAgICAgICAgcGlkaWZhY2VfaW5mby0+bmV4dCA9IF9yZXNfcGlkaWZhY2VfbGlzdC5uZXh0OwotICAgICAgICAgICAgX3Jlc19waWRpZmFjZV9saXN0Lm5leHQgPSBwaWRpZmFjZV9pbmZvOwotCi0gICAgICAgICAgICBYTE9HKCJfcmVzb2x2X3NldF9pZmFjZV9mb3JfcGlkOiBwaWQgJWQgLCBpZmFjZSAlc1xuIiwgcGlkLCBpZm5hbWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgWExPRygiX3Jlc29sdl9zZXRfaWZhY2VfZm9yX3BpZCBmYWlsaW5nIGNhbGxvYyIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfcGlkaWZhY2VfbGlzdF9sb2NrKTsKLX0KLQotdm9pZAotX3Jlc29sdl9jbGVhcl9pZmFjZV9mb3JfcGlkKGludCBwaWQpCi17Ci0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jayk7Ci0KLSAgICBfcmVtb3ZlX3BpZGlmYWNlX2luZm9fbG9ja2VkKHBpZCk7Ci0KLSAgICBYTE9HKCJfcmVzb2x2X2NsZWFyX2lmYWNlX2Zvcl9waWQ6IHBpZCAlZFxuIiwgcGlkKTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jayk7Ci19Ci0KLWludAotX3Jlc29sdl9nZXRfcGlkc19hc3NvY2lhdGVkX2ludGVyZmFjZShpbnQgcGlkLCBjaGFyKiBidWZmLCBpbnQgYnVmZkxlbikKLXsKLSAgICBpbnQgbGVuID0gMDsKLQotICAgIGlmICghYnVmZikgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jayk7Ci0KLSAgICBzdHJ1Y3QgcmVzb2x2X3BpZGlmYWNlX2luZm8qIHBpZGlmYWNlX2luZm8gPSBfZ2V0X3BpZF9pZmFjZV9pbmZvX2xvY2tlZChwaWQpOwotICAgIGJ1ZmZbMF0gPSAnXDAnOwotICAgIGlmIChwaWRpZmFjZV9pbmZvKSB7Ci0gICAgICAgIGxlbiA9IHN0cmxlbihwaWRpZmFjZV9pbmZvLT5pZm5hbWUpOwotICAgICAgICBpZiAobGVuIDwgYnVmZkxlbikgewotICAgICAgICAgICAgc3RybmNweShidWZmLCBwaWRpZmFjZV9pbmZvLT5pZm5hbWUsIGxlbik7Ci0gICAgICAgICAgICBidWZmW2xlbl0gPSAnXDAnOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgWExPRygiX3Jlc29sdl9nZXRfcGlkc19hc3NvY2lhdGVkX2ludGVyZmFjZSBidWZmOiAlc1xuIiwgYnVmZik7Ci0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19waWRpZmFjZV9saXN0X2xvY2spOwotCi0gICAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludAotX3JlbW92ZV91aWRpZmFjZV9pbmZvX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUsIGludCB1aWRfc3RhcnQsIGludCB1aWRfZW5kKSB7Ci0gICAgc3RydWN0IHJlc29sdl91aWRpZmFjZV9pbmZvKiByZXN1bHQgPSBfcmVzX3VpZGlmYWNlX2xpc3QubmV4dDsKLSAgICBzdHJ1Y3QgcmVzb2x2X3VpZGlmYWNlX2luZm8qIHByZXYgPSAmX3Jlc191aWRpZmFjZV9saXN0OwotICAgIHdoaWxlIChyZXN1bHQgIT0gTlVMTCAmJiAhKHJlc3VsdC0+dWlkX3N0YXJ0ID09IHVpZF9zdGFydCAmJiByZXN1bHQtPnVpZF9lbmQgPT0gdWlkX2VuZCAmJgotICAgICAgICAgICAgIXN0cmNtcChyZXN1bHQtPmlmbmFtZSwgaWZuYW1lKSkpIHsKLSAgICAgICAgcHJldiA9IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5uZXh0OwotICAgIH0KLSAgICBpZiAocHJldiAhPSBOVUxMICYmIHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgIHByZXYtPm5leHQgPSByZXN1bHQtPm5leHQ7Ci0gICAgICAgIGZyZWUocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVycm5vID0gRUlOVkFMOwotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvbHZfdWlkaWZhY2VfaW5mbyoKLV9nZXRfdWlkX2lmYWNlX2luZm9fbG9ja2VkKGludCB1aWQpCi17Ci0gICAgc3RydWN0IHJlc29sdl91aWRpZmFjZV9pbmZvKiByZXN1bHQgPSBfcmVzX3VpZGlmYWNlX2xpc3QubmV4dDsKLSAgICB3aGlsZSAocmVzdWx0ICE9IE5VTEwgJiYgIShyZXN1bHQtPnVpZF9zdGFydCA8PSB1aWQgJiYgcmVzdWx0LT51aWRfZW5kID49IHVpZCkpIHsKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5uZXh0OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfY2xlYXJfaWZhY2VfdWlkX3JhbmdlX21hcHBpbmcoKQotewotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc191aWRpZmFjZV9saXN0X2xvY2spOwotICAgIHN0cnVjdCByZXNvbHZfdWlkaWZhY2VfaW5mbyAqY3VycmVudCA9IF9yZXNfdWlkaWZhY2VfbGlzdC5uZXh0OwotICAgIHN0cnVjdCByZXNvbHZfdWlkaWZhY2VfaW5mbyAqbmV4dDsKLSAgICB3aGlsZSAoY3VycmVudCAhPSBOVUxMKSB7Ci0gICAgICAgIG5leHQgPSBjdXJyZW50LT5uZXh0OwotICAgICAgICBmcmVlKGN1cnJlbnQpOwotICAgICAgICBjdXJyZW50ID0gbmV4dDsKLSAgICB9Ci0gICAgX3Jlc191aWRpZmFjZV9saXN0Lm5leHQgPSBOVUxMOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3VpZGlmYWNlX2xpc3RfbG9jayk7Ci19Ci0KLXZvaWQKLV9yZXNvbHZfY2xlYXJfaWZhY2VfcGlkX21hcHBpbmcoKQotewotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19waWRpZmFjZV9saXN0X2xvY2spOwotICAgIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyAqY3VycmVudCA9IF9yZXNfcGlkaWZhY2VfbGlzdC5uZXh0OwotICAgIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyAqbmV4dDsKLSAgICB3aGlsZSAoY3VycmVudCAhPSBOVUxMKSB7Ci0gICAgICAgIG5leHQgPSBjdXJyZW50LT5uZXh0OwotICAgICAgICBmcmVlKGN1cnJlbnQpOwotICAgICAgICBjdXJyZW50ID0gbmV4dDsKLSAgICB9Ci0gICAgX3Jlc19waWRpZmFjZV9saXN0Lm5leHQgPSBOVUxMOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jayk7Ci19Ci0KLWludAotX3Jlc29sdl9zZXRfaWZhY2VfZm9yX3VpZF9yYW5nZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCB1aWRfc3RhcnQsIGludCB1aWRfZW5kKQotewotICAgIGludCBydiA9IDA7Ci0gICAgc3RydWN0IHJlc29sdl91aWRpZmFjZV9pbmZvKiB1aWRpZmFjZV9pbmZvOwotICAgIC8vIG1ha2Ugc3VyZSB0aGUgdWlkIGlmYWNlIGxpc3QgaXMgY3JlYXRlZAotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIGlmICh1aWRfc3RhcnQgPiB1aWRfZW5kKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc191aWRpZmFjZV9saXN0X2xvY2spOwotICAgIHVpZGlmYWNlX2luZm8gPSBjYWxsb2Moc2l6ZW9mKCp1aWRpZmFjZV9pbmZvKSwgMSk7Ci0gICAgaWYgKHVpZGlmYWNlX2luZm8pIHsKLSAgICAgICAgdWlkaWZhY2VfaW5mby0+dWlkX3N0YXJ0ID0gdWlkX3N0YXJ0OwotICAgICAgICB1aWRpZmFjZV9pbmZvLT51aWRfZW5kID0gdWlkX2VuZDsKLSAgICAgICAgaW50IGxlbiA9IHNpemVvZih1aWRpZmFjZV9pbmZvLT5pZm5hbWUpOwotICAgICAgICBzdHJuY3B5KHVpZGlmYWNlX2luZm8tPmlmbmFtZSwgaWZuYW1lLCBsZW4gLSAxKTsKLSAgICAgICAgdWlkaWZhY2VfaW5mby0+aWZuYW1lW2xlbiAtIDFdID0gJ1wwJzsKLQotICAgICAgICB1aWRpZmFjZV9pbmZvLT5uZXh0ID0gX3Jlc191aWRpZmFjZV9saXN0Lm5leHQ7Ci0gICAgICAgIF9yZXNfdWlkaWZhY2VfbGlzdC5uZXh0ID0gdWlkaWZhY2VfaW5mbzsKLQotICAgICAgICBYTE9HKCJfcmVzb2x2X3NldF9pZmFjZV9mb3JfdWlkX3JhbmdlOiBbJWQsJWRdLCBpZmFjZSAlc1xuIiwgdWlkX3N0YXJ0LCB1aWRfZW5kLAotICAgICAgICAgICAgICAgIGlmbmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgWExPRygiX3Jlc29sdl9zZXRfaWZhY2VfZm9yX3VpZF9yYW5nZSBmYWlsaW5nIGNhbGxvY1xuIik7Ci0gICAgICAgIHJ2ID0gLTE7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgIH0KLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3VpZGlmYWNlX2xpc3RfbG9jayk7Ci0gICAgcmV0dXJuIHJ2OwotfQotCi1pbnQKLV9yZXNvbHZfY2xlYXJfaWZhY2VfZm9yX3VpZF9yYW5nZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCB1aWRfc3RhcnQsIGludCB1aWRfZW5kKQotewotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc191aWRpZmFjZV9saXN0X2xvY2spOwotCi0gICAgaW50IHJ2ID0gX3JlbW92ZV91aWRpZmFjZV9pbmZvX2xvY2tlZChpZm5hbWUsIHVpZF9zdGFydCwgdWlkX2VuZCk7Ci0KLSAgICBYTE9HKCJfcmVzb2x2X2NsZWFyX2lmYWNlX2Zvcl91aWRfcmFuZ2U6IFslZCwlZF0gaWZhY2UgJXNcbiIsIHVpZF9zdGFydCwgdWlkX2VuZCwgaWZuYW1lKTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3VpZGlmYWNlX2xpc3RfbG9jayk7Ci0KLSAgICByZXR1cm4gcnY7Ci19Ci0KLWludAotX3Jlc29sdl9nZXRfdWlkc19hc3NvY2lhdGVkX2ludGVyZmFjZShpbnQgdWlkLCBjaGFyKiBidWZmLCBpbnQgYnVmZkxlbikKLXsKLSAgICBpbnQgbGVuID0gMDsKLQotICAgIGlmICghYnVmZikgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX3VpZGlmYWNlX2xpc3RfbG9jayk7Ci0KLSAgICBzdHJ1Y3QgcmVzb2x2X3VpZGlmYWNlX2luZm8qIHVpZGlmYWNlX2luZm8gPSBfZ2V0X3VpZF9pZmFjZV9pbmZvX2xvY2tlZCh1aWQpOwotICAgIGJ1ZmZbMF0gPSAnXDAnOwotICAgIGlmICh1aWRpZmFjZV9pbmZvKSB7Ci0gICAgICAgIGxlbiA9IHN0cmxlbih1aWRpZmFjZV9pbmZvLT5pZm5hbWUpOwotICAgICAgICBpZiAobGVuIDwgYnVmZkxlbikgewotICAgICAgICAgICAgc3RybmNweShidWZmLCB1aWRpZmFjZV9pbmZvLT5pZm5hbWUsIGxlbik7Ci0gICAgICAgICAgICBidWZmW2xlbl0gPSAnXDAnOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgWExPRygiX3Jlc29sdl9nZXRfdWlkc19hc3NvY2lhdGVkX2ludGVyZmFjZSBidWZmOiAlc1xuIiwgYnVmZik7Ci0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc191aWRpZmFjZV9saXN0X2xvY2spOwotCi0gICAgcmV0dXJuIGxlbjsKLX0KLQotc2l6ZV90Ci1fcmVzb2x2X2dldF9kZWZhdWx0X2lmYWNlKGNoYXIqIGJ1ZmYsIHNpemVfdCBidWZmTGVuKQotewotICAgIGlmICghYnVmZiB8fCBidWZmTGVuID09IDApIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0KLSAgICBjaGFyKiBpZm5hbWUgPSBfZ2V0X2RlZmF1bHRfaWZhY2VfbG9ja2VkKCk7IC8vIG5ldmVyIG51bGwsIGJ1dCBtYXkgYmUgZW1wdHkKLQotICAgIC8vIGlmIGRlZmF1bHQgaW50ZXJmYWNlIG5vdCBzZXQgZ2l2ZSB1cC4KLSAgICBpZiAoaWZuYW1lWzBdID09ICdcMCcpIHsKLSAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgc2l6ZV90IGxlbiA9IHN0cmxlbihpZm5hbWUpOwotICAgIGlmIChsZW4gPCBidWZmTGVuKSB7Ci0gICAgICAgIHN0cm5jcHkoYnVmZiwgaWZuYW1lLCBsZW4pOwotICAgICAgICBidWZmW2xlbl0gPSAnXDAnOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZmZbMF0gPSAnXDAnOwotICAgIH0KLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci0KLSAgICByZXR1cm4gbGVuOwotfQotCi12b2lkCi1fcmVzb2x2X3BvcHVsYXRlX3Jlc19mb3JfaWZhY2UocmVzX3N0YXRlIHN0YXRwKQotewotICAgIGlmIChzdGF0cCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdHAtPmlmYWNlWzBdID09ICdcMCcpIHsgLy8gbm8gaW50ZXJmYWNlIHNldCBhc3NpZ24gZGVmYXVsdAotICAgICAgICBzaXplX3QgaWZfbGVuID0gX3Jlc29sdl9nZXRfZGVmYXVsdF9pZmFjZShzdGF0cC0+aWZhY2UsIHNpemVvZihzdGF0cC0+aWZhY2UpKTsKLSAgICAgICAgaWYgKGlmX2xlbiArIDEgPiBzaXplb2Yoc3RhdHAtPmlmYWNlKSkgewotICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBjYW4ndCBmaXQgaW50ZXJmYWNlIG5hbWUgaW50byBzdGF0cC0+aWZhY2UuXG4iLCBfX0ZVTkNUSU9OX18pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpZl9sZW4gPT0gMCkgewotICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBjYW4ndCBmaW5kIGFueSBzdWl0YWJsZSBpbnRlcmZhY2VzLlxuIiwgX19GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwotCi0gICAgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBpbmZvID0gX2ZpbmRfY2FjaGVfaW5mb19sb2NrZWQoc3RhdHAtPmlmYWNlKTsKLSAgICBpZiAoaW5mbyAhPSBOVUxMKSB7Ci0gICAgICAgIGludCBuc2VydjsKLSAgICAgICAgc3RydWN0IGFkZHJpbmZvKiBhaTsKLSAgICAgICAgWExPRygiX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX2lmYWNlOiAlc1xuIiwgc3RhdHAtPmlmYWNlKTsKLSAgICAgICAgZm9yIChuc2VydiA9IDA7IG5zZXJ2IDwgTUFYTlM7IG5zZXJ2KyspIHsKLSAgICAgICAgICAgIGFpID0gaW5mby0+bnNhZGRyaW5mb1tuc2Vydl07Ci0gICAgICAgICAgICBpZiAoYWkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKHNpemVfdCkgYWktPmFpX2FkZHJsZW4gPD0gc2l6ZW9mKHN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1swXSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHAtPl91Ll9leHQuZXh0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbbnNlcnZdLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pOwotICAgICAgICAgICAgICAgICAgICBzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSBBRl9VTlNQRUM7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChzaXplX3QpIGFpLT5haV9hZGRybGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD0gc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFswXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwgYWktPmFpX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpLT5haV9hZGRybGVuKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0uc2luX2ZhbWlseSA9IEFGX1VOU1BFQzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgWExPRygiX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX2lmYWNlIGZvdW5kIHRvbyBsb25nIGFkZHJsZW4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzdGF0cC0+bnNjb3VudCA9IG5zZXJ2OwotICAgICAgICAvLyBub3cgZG8gc2VhcmNoIGRvbWFpbnMuICBOb3RlIHRoYXQgd2UgY2FjaGUgdGhlIG9mZnNldHMgYXMgdGhpcyBjb2RlIHJ1bnMgYWxvdAotICAgICAgICAvLyBidXQgdGhlIHNldHRpbmcvb2Zmc2V0LWNvbXB1dGVyIG9ubHkgcnVucyB3aGVuIHNldC9jaGFuZ2VkCi0gICAgICAgIHN0cmxjcHkoc3RhdHAtPmRlZmRuYW1lLCBpbmZvLT5kZWZkbmFtZSwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkpOwotICAgICAgICByZWdpc3RlciBjaGFyICoqcHAgPSBzdGF0cC0+ZG5zcmNoOwotICAgICAgICByZWdpc3RlciBpbnQgKnAgPSBpbmZvLT5kbnNyY2hfb2Zmc2V0OwotICAgICAgICB3aGlsZSAocHAgPCBzdGF0cC0+ZG5zcmNoICsgTUFYRE5TUkNIICYmICpwICE9IC0xKSB7Ci0gICAgICAgICAgICAqcHArKyA9ICZzdGF0cC0+ZGVmZG5hbWUgKyAqcCsrOwotICAgICAgICB9Ci0gICAgfQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NvbXAuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfY29tcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2I4MWI0Li4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfY29tcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qCSROZXRCU0Q6IHJlc19jb21wLmMsdiAxLjYgMjAwNC8wNS8yMiAyMzo0NzowOSBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkzCi0gKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0Ci0gKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgotICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0Ci0gKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCi0gKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKLSAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKLSAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUwotICogU09GVFdBUkUuCi0gKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX2NvbXAuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2NvbXAuYyx2IDEuMS4yLjEuNC4xIDIwMDQvMDMvMDkgMDg6MzM6NTQgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiByZXNfY29tcC5jLHYgMS42IDIwMDQvMDUvMjIgMjM6NDc6MDkgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jZWxzZQotI2luY2x1ZGUgPHJlc29sdi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotLyoKLSAqIEV4cGFuZCBjb21wcmVzc2VkIGRvbWFpbiBuYW1lICdzcmMnIHRvIGZ1bGwgZG9tYWluIG5hbWUuCi0gKiAnbXNnJyBpcyBhIHBvaW50ZXIgdG8gdGhlIGJlZ2luaW5nIG9mIHRoZSBtZXNzYWdlLAotICogJ2VvbScgcG9pbnRzIHRvIHRoZSBmaXJzdCBsb2NhdGlvbiBhZnRlciB0aGUgbWVzc2FnZSwKLSAqICdkc3QnIGlzIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBvZiBzaXplICdkc3RzaXonIGZvciB0aGUgcmVzdWx0LgotICogUmV0dXJuIHNpemUgb2YgY29tcHJlc3NlZCBuYW1lIG9yIC0xIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KLSAqLwotaW50Ci1kbl9leHBhbmQoY29uc3QgdV9jaGFyICptc2csIGNvbnN0IHVfY2hhciAqZW9tLCBjb25zdCB1X2NoYXIgKnNyYywKLQkgIGNoYXIgKmRzdCwgaW50IGRzdHNpeikKLXsKLQlpbnQgbiA9IG5zX25hbWVfdW5jb21wcmVzcyhtc2csIGVvbSwgc3JjLCBkc3QsIChzaXplX3QpZHN0c2l6KTsKLQotCWlmIChuID4gMCAmJiBkc3RbMF0gPT0gJy4nKQotCQlkc3RbMF0gPSAnXDAnOwotCXJldHVybiAobik7Ci19Ci0KLS8qCi0gKiBQYWNrIGRvbWFpbiBuYW1lICdleHBfZG4nIGluIHByZXNlbnRhdGlvbiBmb3JtIGludG8gJ2NvbXBfZG4nLgotICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIG5hbWUgb3IgLTEuCi0gKiAnbGVuZ3RoJyBpcyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSAnY29tcF9kbicuCi0gKi8KLWludAotZG5fY29tcChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgZHN0c2l6LAotCXVfY2hhciAqKmRucHRycywgdV9jaGFyICoqbGFzdGRucHRyKQotewotCXJldHVybiAobnNfbmFtZV9jb21wcmVzcyhzcmMsIGRzdCwgKHNpemVfdClkc3RzaXosCi0JCQkJIChjb25zdCB1X2NoYXIgKiopZG5wdHJzLAotCQkJCSAoY29uc3QgdV9jaGFyICoqKWxhc3RkbnB0cikpOwotfQotCi0vKgotICogU2tpcCBvdmVyIGEgY29tcHJlc3NlZCBkb21haW4gbmFtZS4gUmV0dXJuIHRoZSBzaXplIG9yIC0xLgotICovCi1pbnQKLWRuX3NraXBuYW1lKGNvbnN0IHVfY2hhciAqcHRyLCBjb25zdCB1X2NoYXIgKmVvbSkgewotCWNvbnN0IHVfY2hhciAqc2F2ZXB0ciA9IHB0cjsKLQotCWlmIChuc19uYW1lX3NraXAoJnB0ciwgZW9tKSA9PSAtMSkKLQkJcmV0dXJuICgtMSk7Ci0JcmV0dXJuIChwdHIgLSBzYXZlcHRyKTsKLX0KLQotLyoKLSAqIFZlcmlmeSB0aGF0IGEgZG9tYWluIG5hbWUgdXNlcyBhbiBhY2NlcHRhYmxlIGNoYXJhY3RlciBzZXQuCi0gKi8KLQotLyoKLSAqIE5vdGUgdGhlIGNvbnNwaWN1b3VzIGFic2VuY2Ugb2YgY3R5cGUgbWFjcm9zIGluIHRoZXNlIGRlZmluaXRpb25zLiAgT24KLSAqIG5vbi1BU0NJSSBob3N0cywgd2UgY2FuJ3QgZGVwZW5kIG9uIHN0cmluZyBsaXRlcmFscyBvciBjdHlwZSBtYWNyb3MgdG8KLSAqIHRlbGwgdXMgYW55dGhpbmcgYWJvdXQgbmV0d29yay1mb3JtYXQgZGF0YS4gIFRoZSByZXN0IG9mIHRoZSBCSU5EIHN5c3RlbQotICogaXMgbm90IGNhcmVmdWwgYWJvdXQgdGhpcywgYnV0IGZvciBzb21lIHJlYXNvbiwgd2UncmUgZG9pbmcgaXQgcmlnaHQgaGVyZS4KLSAqLwotCi0vKiBCSU9OSUM6IFdlIGFsc28gYWNjZXB0IHVuZGVyc2NvcmVzIGluIHRoZSBtaWRkbGUgb2YgbGFiZWxzLgotICogICAgICAgICBUaGlzIGV4dGVuc2lvbiBpcyBuZWVkZWQgdG8gbWFrZSByZXNvbHV0aW9uIG9uIHNvbWUgVlBOIG5ldHdvcmtzCi0gKiAgICAgICAgIHdvcmsgcHJvcGVybHkuCi0gKi8KLQotI2RlZmluZSBQRVJJT0QgMHgyZQotI2RlZmluZQloeXBoZW5jaGFyKGMpICgoYykgPT0gMHgyZCkKLSNkZWZpbmUgYnNsYXNoY2hhcihjKSAoKGMpID09IDB4NWMpCi0jZGVmaW5lIHBlcmlvZGNoYXIoYykgKChjKSA9PSBQRVJJT0QpCi0jZGVmaW5lIGFzdGVyY2hhcihjKSAoKGMpID09IDB4MmEpCi0jZGVmaW5lIGFscGhhY2hhcihjKSAoKChjKSA+PSAweDQxICYmIChjKSA8PSAweDVhKSBcCi0JCSAgIHx8ICgoYykgPj0gMHg2MSAmJiAoYykgPD0gMHg3YSkpCi0jZGVmaW5lIGRpZ2l0Y2hhcihjKSAoKGMpID49IDB4MzAgJiYgKGMpIDw9IDB4MzkpCi0jZGVmaW5lIHVuZGVyc2NvcmVjaGFyKGMpICAoKGMpID09IDB4NWYpCi0KLSNkZWZpbmUgYm9yZGVyY2hhcihjKSAoYWxwaGFjaGFyKGMpIHx8IGRpZ2l0Y2hhcihjKSkKLSNkZWZpbmUgbWlkZGxlY2hhcihjKSAoYm9yZGVyY2hhcihjKSB8fCBoeXBoZW5jaGFyKGMpIHx8IHVuZGVyc2NvcmVjaGFyKGMpKQotI2RlZmluZQlkb21haW5jaGFyKGMpICgoYykgPiAweDIwICYmIChjKSA8IDB4N2YpCi0KLWludAotcmVzX2hub2soY29uc3QgY2hhciAqZG4pIHsKLQlpbnQgcGNoID0gUEVSSU9ELCBjaCA9ICpkbisrOwotCi0Jd2hpbGUgKGNoICE9ICdcMCcpIHsKLQkJaW50IG5jaCA9ICpkbisrOwotCi0JCWlmIChwZXJpb2RjaGFyKGNoKSkgewotCQkJOwotCQl9IGVsc2UgaWYgKHBlcmlvZGNoYXIocGNoKSkgewotCQkJaWYgKCFib3JkZXJjaGFyKGNoKSkKLQkJCQlyZXR1cm4gKDApOwotCQl9IGVsc2UgaWYgKHBlcmlvZGNoYXIobmNoKSB8fCBuY2ggPT0gJ1wwJykgewotCQkJaWYgKCFib3JkZXJjaGFyKGNoKSkKLQkJCQlyZXR1cm4gKDApOwotCQl9IGVsc2UgewotCQkJaWYgKCFtaWRkbGVjaGFyKGNoKSkKLQkJCQlyZXR1cm4gKDApOwotCQl9Ci0JCXBjaCA9IGNoLCBjaCA9IG5jaDsKLQl9Ci0JcmV0dXJuICgxKTsKLX0KLQotLyoKLSAqIGhvc3RuYW1lLWxpa2UgKEEsIE1YLCBXS1MpIG93bmVycyBjYW4gaGF2ZSAiKiIgYXMgdGhlaXIgZmlyc3QgbGFiZWwKLSAqIGJ1dCBtdXN0IG90aGVyd2lzZSBiZSBhcyBhIGhvc3QgbmFtZS4KLSAqLwotaW50Ci1yZXNfb3dub2soY29uc3QgY2hhciAqZG4pIHsKLQlpZiAoYXN0ZXJjaGFyKGRuWzBdKSkgewotCQlpZiAocGVyaW9kY2hhcihkblsxXSkpCi0JCQlyZXR1cm4gKHJlc19obm9rKGRuKzIpKTsKLQkJaWYgKGRuWzFdID09ICdcMCcpCi0JCQlyZXR1cm4gKDEpOwotCX0KLQlyZXR1cm4gKHJlc19obm9rKGRuKSk7Ci19Ci0KLS8qCi0gKiBTT0EgUk5BTUVzIGFuZCBSUCBSTkFNRXMgY2FuIGhhdmUgYW55IHByaW50YWJsZSBjaGFyYWN0ZXIgaW4gdGhlaXIgZmlyc3QKLSAqIGxhYmVsLCBidXQgdGhlIHJlc3Qgb2YgdGhlIG5hbWUgaGFzIHRvIGxvb2sgbGlrZSBhIGhvc3QgbmFtZS4KLSAqLwotaW50Ci1yZXNfbWFpbG9rKGNvbnN0IGNoYXIgKmRuKSB7Ci0JaW50IGNoLCBlc2NhcGVkID0gMDsKLQotCS8qICIuIiBpcyBhIHZhbGlkIG1pc3NpbmcgcmVwcmVzZW50YXRpb24gKi8KLQlpZiAoKmRuID09ICdcMCcpCi0JCXJldHVybiAoMSk7Ci0KLQkvKiBvdGhlcndpc2UgPGxhYmVsPi48aG9zdG5hbWU+ICovCi0Jd2hpbGUgKChjaCA9ICpkbisrKSAhPSAnXDAnKSB7Ci0JCWlmICghZG9tYWluY2hhcihjaCkpCi0JCQlyZXR1cm4gKDApOwotCQlpZiAoIWVzY2FwZWQgJiYgcGVyaW9kY2hhcihjaCkpCi0JCQlicmVhazsKLQkJaWYgKGVzY2FwZWQpCi0JCQllc2NhcGVkID0gMDsKLQkJZWxzZSBpZiAoYnNsYXNoY2hhcihjaCkpCi0JCQllc2NhcGVkID0gMTsKLQl9Ci0JaWYgKHBlcmlvZGNoYXIoY2gpKQotCQlyZXR1cm4gKHJlc19obm9rKGRuKSk7Ci0JcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgcXVpdGUgbGliZXJhbCwgc2luY2UgUkZDIDEwMzQncyBjaGFyYWN0ZXIgc2V0cyBhcmUgb25seQotICogcmVjb21tZW5kYXRpb25zLgotICovCi1pbnQKLXJlc19kbm9rKGNvbnN0IGNoYXIgKmRuKSB7Ci0JaW50IGNoOwotCi0Jd2hpbGUgKChjaCA9ICpkbisrKSAhPSAnXDAnKQotCQlpZiAoIWRvbWFpbmNoYXIoY2gpKQotCQkJcmV0dXJuICgwKTsKLQlyZXR1cm4gKDEpOwotfQotCi0jaWZkZWYgQklORF80X0NPTVBBVAotLyoKLSAqIFRoaXMgbW9kdWxlIG11c3QgZXhwb3J0IHRoZSBmb2xsb3dpbmcgZXh0ZXJuYWxseS12aXNpYmxlIHN5bWJvbHM6Ci0gKglfX19wdXRsb25nCi0gKglfX19wdXRzaG9ydAotICoJX19nZXRsb25nCi0gKglfX2dldHNob3J0Ci0gKiBOb3RlIHRoYXQgb25lIF8gY29tZXMgZnJvbSBDIGFuZCB0aGUgb3RoZXJzIGNvbWUgZnJvbSB1cy4KLSAqLwotdm9pZCBfX3B1dGxvbmcodV9pbnQzMl90IHNyYywgdV9jaGFyICpkc3QpIHsgbnNfcHV0MzIoc3JjLCBkc3QpOyB9Ci12b2lkIF9fcHV0c2hvcnQodV9pbnQxNl90IHNyYywgdV9jaGFyICpkc3QpIHsgbnNfcHV0MTYoc3JjLCBkc3QpOyB9Ci0jaWZuZGVmIF9fdWx0cml4X18KLXVfaW50MzJfdCBfZ2V0bG9uZyhjb25zdCB1X2NoYXIgKnNyYykgeyByZXR1cm4gKG5zX2dldDMyKHNyYykpOyB9Ci11X2ludDE2X3QgX2dldHNob3J0KGNvbnN0IHVfY2hhciAqc3JjKSB7IHJldHVybiAobnNfZ2V0MTYoc3JjKSk7IH0KLSNlbmRpZiAvKl9fdWx0cml4X18qLwotI2VuZGlmIC8qQklORF80X0NPTVBBVCovCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NvbXBhdC5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jb21wYXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhMWQ1Zi4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NvbXBhdC5jCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoJJE5ldEJTRDogcmVzX2NvbXBhdC5jLHYgMS4xIDIwMDQvMDYvMDkgMTg6MDc6MDMgY2hyaXN0b3MgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBDaHJpc3RvcyBab3VsYXMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKLSAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKLSAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IHJlc19jb21wYXQuYyx2IDEuMSAyMDA0LzA2LzA5IDE4OjA3OjAzIGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZGVmaW5lIF9fT0xEX1JFU19TVEFURQotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jZWxzZQotI2luY2x1ZGUgInJlc29sdi5oIgotI2VuZGlmCi0KLSN1bmRlZiBfcmVzCi0KLS8qCi0gKiBCaW5hcnkgQ29tcGF0aWJpbGl0eTsgdGhpcyBzeW1ib2wgZG9lcyBub3QgYXBwZWFyIGluIGEgaGVhZGVyIGZpbGUKLSAqIE1vc3QgdXNlcmxhbmQgcHJvZ3JhbXMgdXNlIHRoaXMgdG8gc2V0IHJlc19vcHRpb25zIGJlZm9yZSByZXNfaW5pdCgpCi0gKiBpcyBjYWxsZWQuIFRoZXJlIGFyZSBob29rcyB0byByZXNfaW5pdCgpIHRvIGNvbnN1bHQgdGhlIGRhdGEgaW4gdGhpcwotICogc3RydWN0dXJlLiBUaGUgaG9va3MgYXJlIHByb3ZpZGVkIGluZGlyZWN0bHkgYnkgdGhlIHR3byBmdW5jdGlvbnMgYmVsb3cuCi0gKiBXZSBkZXBlbmQgb24gdGhlIGZhY3QgdGhlIHRoZSBmaXJzdCA0NDAgWzMyIGJpdCBtYWNoaW5lc10gYnl0ZXMgYXJlCi0gKiBzaGFyZWQgYmV0d2VlbiB0aGUgdHdvIHN0cnVjdHVyZXMuCi0gKi8KLSNpZm5kZWYgX19CSU5EX05PU1RBVElDCi1zdHJ1Y3QgX19yZXNfc3RhdGUgX3JlcwotI2lmIGRlZmluZWQoX19CSU5EX1JFU19URVhUKQotCT0geyBSRVNfVElNRU9VVCwgfSAgICAgIC8qIE1vdG9yb2xhLCBldCBhbC4gKi8KLSMgZW5kaWYKLTsKLQotdm9pZCAqX19yZXNfZ2V0X29sZF9zdGF0ZSh2b2lkKTsKLXZvaWQgX19yZXNfcHV0X29sZF9zdGF0ZSh2b2lkICopOwotCi12b2lkICoKLV9fcmVzX2dldF9vbGRfc3RhdGUodm9pZCkKLXsKLQlyZXR1cm4gJl9yZXM7Ci19Ci0KLXZvaWQKLV9fcmVzX3B1dF9vbGRfc3RhdGUodm9pZCAqcmVzKQotewotCSh2b2lkKW1lbWNweSgmX3JlcywgcmVzLCBzaXplb2YoX3JlcykpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RhdGEuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTVhMzA4Li4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGF0YS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzI3ICswLDAgQEAKLS8qCSROZXRCU0Q6IHJlc19kYXRhLmMsdiAxLjggMjAwNC8wNi8wOSAxODowNzowMyBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmZGVmIG5vdGRlZgotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2RhdGEuYyx2IDEuMS4yMDYuMiAyMDA0LzAzLzE2IDEyOjM0OjE4IG1hcmthIEV4cCI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDogcmVzX2RhdGEuYyx2IDEuOCAyMDA0LzA2LzA5IDE4OjA3OjAzIGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0KLV9fTElCQ19ISURERU5fXwotY29uc3QgY2hhciAqIGNvbnN0IF9yZXNfb3Bjb2Rlc1tdID0gewotCSJRVUVSWSIsCi0JIklRVUVSWSIsCi0JIkNRVUVSWU0iLAotCSJDUVVFUllVIiwJLyogZXhwZXJpbWVudGFsICovCi0JIk5PVElGWSIsCS8qIGV4cGVyaW1lbnRhbCAqLwotCSJVUERBVEUiLAotCSI2IiwKLQkiNyIsCi0JIjgiLAotCSI5IiwKLQkiMTAiLAotCSIxMSIsCi0JIjEyIiwKLQkiMTMiLAotCSJaT05FSU5JVCIsCi0JIlpPTkVSRUYiLAotfTsKLQotI2lmZGVmIEJJTkRfVVBEQVRFCi1jb25zdCBjaGFyICogY29uc3QgX3Jlc19zZWN0aW9uY29kZXNbXSA9IHsKLQkiWk9ORSIsCi0JIlBSRVJFUVVJU0lURVMiLAotCSJVUERBVEUiLAotCSJBRERJVElPTkFMIiwKLX07Ci0jZW5kaWYKLQotI2lmbmRlZiBfX0JJTkRfTk9TVEFUSUMKLWV4dGVybiBzdHJ1Y3QgX19yZXNfc3RhdGUgX25yZXM7Ci0KLS8qIFByb3RvLiAqLwotCi1pbnQgIHJlc19vdXJzZXJ2ZXJfcChjb25zdCByZXNfc3RhdGUsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKTsKLQotI2RlZmluZSByZXNfbmVlZF9pbml0KCkgICAoKF9ucmVzLm9wdGlvbnMgJiBSRVNfSU5JVCkgPT0gMFUpCi0KLWludAotcmVzX2luaXQodm9pZCkgewotCWludCBydjsKLQlleHRlcm4gaW50IF9fcmVzX3Zpbml0KHJlc19zdGF0ZSwgaW50KTsKLSNpZmRlZiBDT01QQVRfX1JFUwotCS8qCi0JICogQ29tcGF0aWJpbGl0eSB3aXRoIHByb2dyYW0gdGhhdCB3ZXJlIGFjY2Vzc2luZyBfcmVzIGRpcmVjdGx5Ci0JICogdG8gc2V0IG9wdGlvbnMuIFdlIGtlZXAgYW5vdGhlciBzdHJ1Y3QgcmVzIHRoYXQgaXMgdGhlIHNhbWUKLQkgKiBzaXplIGFzIHRoZSBvcmlnaW5hbCByZXMgc3RydWN0dXJlLCBhbmQgdGhlbiBjb3B5IGZpZWxkcyB0bwotCSAqIGl0IHNvIHRoYXQgd2UgYWNoaWV2ZSB0aGUgc2FtZSBpbml0aWFsaXphdGlvbgotCSAqLwotCWV4dGVybiB2b2lkICpfX3Jlc19nZXRfb2xkX3N0YXRlKHZvaWQpOwotCWV4dGVybiB2b2lkIF9fcmVzX3B1dF9vbGRfc3RhdGUodm9pZCAqKTsKLQlyZXNfc3RhdGUgb3JlcyA9IF9fcmVzX2dldF9vbGRfc3RhdGUoKTsKLQotCWlmIChvcmVzLT5vcHRpb25zICE9IDApCi0JCV9ucmVzLm9wdGlvbnMgPSBvcmVzLT5vcHRpb25zOwotCWlmIChvcmVzLT5yZXRyYW5zICE9IDApCi0JCV9ucmVzLnJldHJhbnMgPSBvcmVzLT5yZXRyYW5zOwotCWlmIChvcmVzLT5yZXRyeSAhPSAwKQotCQlfbnJlcy5yZXRyeSA9IG9yZXMtPnJldHJ5OwotI2VuZGlmCi0KLQkvKgotCSAqIFRoZXNlIHRocmVlIGZpZWxkcyB1c2VkIHRvIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuICBUaGlzIG1hZGUKLQkgKiBpdCBoYXJkIHRvIHVzZSB0aGlzIGNvZGUgaW4gYSBzaGFyZWQgbGlicmFyeS4gIEl0IGlzIG5lY2Vzc2FyeSwKLQkgKiBub3cgdGhhdCB3ZSdyZSBkb2luZyBkeW5hbWljIGluaXRpYWxpemF0aW9uIGhlcmUsIHRoYXQgd2UgcHJlc2VydmUKLQkgKiB0aGUgb2xkIHNlbWFudGljczogaWYgYW4gYXBwbGljYXRpb24gbW9kaWZpZXMgb25lIG9mIHRoZXNlIHRocmVlCi0JICogZmllbGRzIG9mIF9yZXMgYmVmb3JlIHJlc19pbml0KCkgaXMgY2FsbGVkLCByZXNfaW5pdCgpIHdpbGwgbm90Ci0JICogYWx0ZXIgdGhlbS4gIE9mIGNvdXJzZSwgaWYgYW4gYXBwbGljYXRpb24gaXMgc2V0dGluZyB0aGVtIHRvCi0JICogX3plcm9fIGJlZm9yZSBjYWxsaW5nIHJlc19pbml0KCksIGhvcGluZyB0byBvdmVycmlkZSB3aGF0IHVzZWQKLQkgKiB0byBiZSB0aGUgc3RhdGljIGRlZmF1bHQsIHdlIGNhbid0IGRldGVjdCBpdCBhbmQgdW5leHBlY3RlZCByZXN1bHRzCi0JICogd2lsbCBmb2xsb3cuICBaZXJvIGZvciBhbnkgb2YgdGhlc2UgZmllbGRzIHdvdWxkIG1ha2Ugbm8gc2Vuc2UsCi0JICogc28gb25lIGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQgdGhlIGFwcGxpY2F0aW9ucyB3ZXJlIGFscmVhZHkgZ2V0dGluZwotCSAqIHVuZXhwZWN0ZWQgcmVzdWx0cy4KLQkgKgotCSAqIF9ucmVzLm9wdGlvbnMgaXMgdHJpY2t5IHNpbmNlIHNvbWUgYXBwcyB3ZXJlIGtub3duIHRvIGRpZGRsZSB0aGUgYml0cwotCSAqIGJlZm9yZSByZXNfaW5pdCgpIHdhcyBmaXJzdCBjYWxsZWQuIFdlIGNhbid0IHJlcGxpY2F0ZSB0aGF0IHNlbWFudGljCi0JICogd2l0aCBkeW5hbWljIGluaXRpYWxpemF0aW9uICh0aGV5IG1heSBoYXZlIHR1cm5lZCBiaXRzIG9mZiB0aGF0IGFyZQotCSAqIHNldCBpbiBSRVNfREVGQVVMVCkuICBPdXIgc29sdXRpb24gaXMgdG8gZGVjbGFyZSBzdWNoIGFwcGxpY2F0aW9ucwotCSAqICJicm9rZW4iLiAgVGhleSBjb3VsZCBmb29sIHVzIGJ5IHNldHRpbmcgUkVTX0lOSVQgYnV0IG5vbmUgZG8gKHlldCkuCi0JICovCi0JaWYgKCFfbnJlcy5yZXRyYW5zKQotCQlfbnJlcy5yZXRyYW5zID0gUkVTX1RJTUVPVVQ7Ci0JaWYgKCFfbnJlcy5yZXRyeSkKLQkJX25yZXMucmV0cnkgPSA0OwotCWlmICghKF9ucmVzLm9wdGlvbnMgJiBSRVNfSU5JVCkpCi0JCV9ucmVzLm9wdGlvbnMgPSBSRVNfREVGQVVMVDsKLQotCS8qCi0JICogVGhpcyBvbmUgdXNlZCB0byBpbml0aWFsaXplIGltcGxpY2l0bHkgdG8gemVybywgc28gdW5sZXNzIHRoZSBhcHAKLQkgKiBoYXMgc2V0IGl0IHRvIHNvbWV0aGluZyBpbiBwYXJ0aWN1bGFyLCB3ZSBjYW4gcmFuZG9taXplIGl0IG5vdy4KLQkgKi8KLQlpZiAoIV9ucmVzLmlkKQotCQlfbnJlcy5pZCA9IHJlc19yYW5kb21pZCgpOwotCi0JcnYgPSBfX3Jlc192aW5pdCgmX25yZXMsIDEpOwotI2lmZGVmIENPTVBBVF9fUkVTCi0JX19yZXNfcHV0X29sZF9zdGF0ZSgmX25yZXMpOwotI2VuZGlmCi0JcmV0dXJuIHJ2OwotfQotCi12b2lkCi1wX3F1ZXJ5KGNvbnN0IHVfY2hhciAqbXNnKSB7Ci0JZnBfcXVlcnkobXNnLCBzdGRvdXQpOwotfQotCi12b2lkCi1mcF9xdWVyeShjb25zdCB1X2NoYXIgKm1zZywgRklMRSAqZmlsZSkgewotCWZwX25xdWVyeShtc2csIFBBQ0tFVFNaLCBmaWxlKTsKLX0KLQotdm9pZAotZnBfbnF1ZXJ5KGNvbnN0IHVfY2hhciAqbXNnLCBpbnQgbGVuLCBGSUxFICpmaWxlKSB7Ci0JaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKQotCQlyZXR1cm47Ci0KLQlyZXNfcHF1ZXJ5KCZfbnJlcywgbXNnLCBsZW4sIGZpbGUpOwotfQotCi1pbnQKLXJlc19ta3F1ZXJ5KGludCBvcCwJCQkvKiBvcGNvZGUgb2YgcXVlcnkgKi8KLQkgICAgY29uc3QgY2hhciAqZG5hbWUsCQkvKiBkb21haW4gbmFtZSAqLwotCSAgICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLwotCSAgICBjb25zdCB1X2NoYXIgKmRhdGEsCQkvKiByZXNvdXJjZSByZWNvcmQgZGF0YSAqLwotCSAgICBpbnQgZGF0YWxlbiwJCS8qIGxlbmd0aCBvZiBkYXRhICovCi0JICAgIGNvbnN0IHVfY2hhciAqbmV3cnJfaW4sCS8qIG5ldyByciBmb3IgbW9kaWZ5IG9yIGFwcGVuZCAqLwotCSAgICB1X2NoYXIgKmJ1ZiwJCS8qIGJ1ZmZlciB0byBwdXQgcXVlcnkgKi8KLQkgICAgaW50IGJ1ZmxlbikJCQkvKiBzaXplIG9mIGJ1ZmZlciAqLwotewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlyZXR1cm4gKHJlc19ubWtxdWVyeSgmX25yZXMsIG9wLCBkbmFtZSwgY2xhc3MsIHR5cGUsCi0JCQkgICAgIGRhdGEsIGRhdGFsZW4sCi0JCQkgICAgIG5ld3JyX2luLCBidWYsIGJ1ZmxlbikpOwotfQotCi0jaWZkZWYgX0xJQlJFU09MVgotaW50Ci1yZXNfbWt1cGRhdGUobnNfdXBkcmVjICpycmVjcF9pbiwgdV9jaGFyICpidWYsIGludCBidWZsZW4pIHsKLQlpZiAocmVzX25lZWRfaW5pdCgpICYmIHJlc19pbml0KCkgPT0gLTEpIHsKLQkJUkVTX1NFVF9IX0VSUk5PKCZfbnJlcywgTkVUREJfSU5URVJOQUwpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlyZXR1cm4gKHJlc19ubWt1cGRhdGUoJl9ucmVzLCBycmVjcF9pbiwgYnVmLCBidWZsZW4pKTsKLX0KLSNlbmRpZgotCi1pbnQKLXJlc19xdWVyeShjb25zdCBjaGFyICpuYW1lLAkvKiBkb21haW4gbmFtZSAqLwotCSAgaW50IGNsYXNzLCBpbnQgdHlwZSwJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KLQkgIHVfY2hhciAqYW5zd2VyLAkvKiBidWZmZXIgdG8gcHV0IGFuc3dlciAqLwotCSAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyIGJ1ZmZlciAqLwotewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlyZXR1cm4gKHJlc19ucXVlcnkoJl9ucmVzLCBuYW1lLCBjbGFzcywgdHlwZSwgYW5zd2VyLCBhbnNsZW4pKTsKLX0KLQotdm9pZAotcmVzX3NlbmRfc2V0cWhvb2socmVzX3NlbmRfcWhvb2sgaG9vaykgewotCV9ucmVzLnFob29rID0gaG9vazsKLX0KLQotdm9pZAotcmVzX3NlbmRfc2V0cmhvb2socmVzX3NlbmRfcmhvb2sgaG9vaykgewotCV9ucmVzLnJob29rID0gaG9vazsKLX0KLQotaW50Ci1yZXNfaXNvdXJzZXJ2ZXIoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICppbnApIHsKLQlyZXR1cm4gKHJlc19vdXJzZXJ2ZXJfcCgmX25yZXMsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikoY29uc3Qgdm9pZCAqKWlucCkpOwotfQotCi1pbnQKLXJlc19zZW5kKGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeikgewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQkvKiBlcnJubyBzaG91bGQgaGF2ZSBiZWVuIHNldCBieSByZXNfaW5pdCgpIGluIHRoaXMgY2FzZS4gKi8KLQkJcmV0dXJuICgtMSk7Ci0JfQotCi0JcmV0dXJuIChyZXNfbnNlbmQoJl9ucmVzLCBidWYsIGJ1ZmxlbiwgYW5zLCBhbnNzaXopKTsKLX0KLQotI2lmZGVmIF9MSUJSRVNPTFYKLWludAotcmVzX3NlbmRzaWduZWQoY29uc3QgdV9jaGFyICpidWYsIGludCBidWZsZW4sIG5zX3RzaWdfa2V5ICprZXksCi0JICAgICAgIHVfY2hhciAqYW5zLCBpbnQgYW5zc2l6KQotewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQkvKiBlcnJubyBzaG91bGQgaGF2ZSBiZWVuIHNldCBieSByZXNfaW5pdCgpIGluIHRoaXMgY2FzZS4gKi8KLQkJcmV0dXJuICgtMSk7Ci0JfQotCi0JcmV0dXJuIChyZXNfbnNlbmRzaWduZWQoJl9ucmVzLCBidWYsIGJ1Zmxlbiwga2V5LCBhbnMsIGFuc3NpeikpOwotfQotI2VuZGlmCi0KLXZvaWQKLXJlc19jbG9zZSh2b2lkKSB7Ci0JcmVzX25jbG9zZSgmX25yZXMpOwotfQotCi0jaWZkZWYgX0xJQlJFU09MVgotaW50Ci1yZXNfdXBkYXRlKG5zX3VwZHJlYyAqcnJlY3BfaW4pIHsKLQlpZiAocmVzX25lZWRfaW5pdCgpICYmIHJlc19pbml0KCkgPT0gLTEpIHsKLQkJUkVTX1NFVF9IX0VSUk5PKCZfbnJlcywgTkVUREJfSU5URVJOQUwpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlyZXR1cm4gKHJlc19udXBkYXRlKCZfbnJlcywgcnJlY3BfaW4sIE5VTEwpKTsKLX0KLSNlbmRpZgotCi1pbnQKLXJlc19zZWFyY2goY29uc3QgY2hhciAqbmFtZSwJLyogZG9tYWluIG5hbWUgKi8KLQkgICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLwotCSAgIHVfY2hhciAqYW5zd2VyLAkvKiBidWZmZXIgdG8gcHV0IGFuc3dlciAqLwotCSAgIGludCBhbnNsZW4pCQkvKiBzaXplIG9mIGFuc3dlciAqLwotewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQotCXJldHVybiAocmVzX25zZWFyY2goJl9ucmVzLCBuYW1lLCBjbGFzcywgdHlwZSwgYW5zd2VyLCBhbnNsZW4pKTsKLX0KLQotaW50Ci1yZXNfcXVlcnlkb21haW4oY29uc3QgY2hhciAqbmFtZSwKLQkJY29uc3QgY2hhciAqZG9tYWluLAotCQlpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLwotCQl1X2NoYXIgKmFuc3dlciwJCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCi0JCWludCBhbnNsZW4pCQkvKiBzaXplIG9mIGFuc3dlciAqLwotewotCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgewotCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQotCXJldHVybiAocmVzX25xdWVyeWRvbWFpbigmX25yZXMsIG5hbWUsIGRvbWFpbiwKLQkJCQkgY2xhc3MsIHR5cGUsCi0JCQkJIGFuc3dlciwgYW5zbGVuKSk7Ci19Ci0KLWludAotcmVzX29wdChpbnQgYSwgdV9jaGFyICpiLCBpbnQgYywgaW50IGQpCi17Ci0JcmV0dXJuIHJlc19ub3B0KCZfbnJlcywgYSwgYiwgYywgZCk7Ci19Ci0KLWNvbnN0IGNoYXIgKgotaG9zdGFsaWFzKGNvbnN0IGNoYXIgKm5hbWUpIHsKLQlyZXR1cm4gTlVMTDsKLX0KLQotI2lmZGVmIHVsdHJpeAotaW50Ci1sb2NhbF9ob3N0bmFtZV9sZW5ndGgoY29uc3QgY2hhciAqaG9zdG5hbWUpIHsKLQlpbnQgbGVuX2hvc3QsIGxlbl9kb21haW47Ci0KLQlpZiAoISpfbnJlcy5kZWZkbmFtZSkKLQkJcmVzX2luaXQoKTsKLQlsZW5faG9zdCA9IHN0cmxlbihob3N0bmFtZSk7Ci0JbGVuX2RvbWFpbiA9IHN0cmxlbihfbnJlcy5kZWZkbmFtZSk7Ci0JaWYgKGxlbl9ob3N0ID4gbGVuX2RvbWFpbiAmJgotCSAgICAhc3RyY2FzZWNtcChob3N0bmFtZSArIGxlbl9ob3N0IC0gbGVuX2RvbWFpbiwgX25yZXMuZGVmZG5hbWUpICYmCi0JICAgIGhvc3RuYW1lW2xlbl9ob3N0IC0gbGVuX2RvbWFpbiAtIDFdID09ICcuJykKLQkJcmV0dXJuIChsZW5faG9zdCAtIGxlbl9kb21haW4gLSAxKTsKLQlyZXR1cm4gKDApOwotfQotI2VuZGlmIC8qdWx0cml4Ki8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RlYnVnLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RlYnVnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZTU4M2IuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19kZWJ1Zy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE3NSArMCwwIEBACi0vKgkkTmV0QlNEOiByZXNfZGVidWcuYyx2IDEuNyAyMDA0LzExLzA3IDAyOjI1OjAxIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODUKLSAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKLSAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCi0gKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKLSAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKLSAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAotICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi0gKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUwotICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0vKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk1IGJ5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4KLSAqCi0gKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuIChoZXJlaW5hZnRlciBjYWxsZWQgSUJNKSBncmFudHMKLSAqIHBlcm1pc3Npb24gdW5kZXIgaXRzIGNvcHlyaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIFNvZnR3YXJlIHdpdGggb3Igd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCi0gKiBhbGwgcGFyYWdyYXBocyBvZiB0aGlzIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgSUJNCi0gKiBub3QgYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIG1hcmtldGluZyBvZiBhbnkgcHJvZHVjdCBpbmNvcnBvcmF0aW5nCi0gKiB0aGUgU29mdHdhcmUgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLCB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCi0gKiBwZXJtaXNzaW9uLgotICoKLSAqIFRvIHRoZSBleHRlbnQgaXQgaGFzIGEgcmlnaHQgdG8gZG8gc28sIElCTSBncmFudHMgYW4gaW1tdW5pdHkgZnJvbSBzdWl0Ci0gKiB1bmRlciBpdHMgcGF0ZW50cywgaWYgYW55LCBmb3IgdGhlIHVzZSwgc2FsZSBvciBtYW51ZmFjdHVyZSBvZiBwcm9kdWN0cyB0bwotICogdGhlIGV4dGVudCB0aGF0IHN1Y2ggcHJvZHVjdHMgYXJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgRG9tYWluIE5hbWUgU3lzdGVtCi0gKiBkeW5hbWljIHVwZGF0ZXMgaW4gVENQL0lQIG5ldHdvcmtzIGJ5IG1lYW5zIG9mIHRoZSBTb2Z0d2FyZS4gIE5vIGltbXVuaXR5IGlzCi0gKiBncmFudGVkIGZvciBhbnkgcHJvZHVjdCBwZXIgc2Ugb3IgZm9yIGFueSBvdGhlciBmdW5jdGlvbiBvZiBhbnkgcHJvZHVjdC4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgQU5EIElCTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKLSAqIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLAotICogRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgQVJJU0lORwotICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KLSAqIElGIElCTSBJUyBBUFBSSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX2RlYnVnLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IHJlc19kZWJ1Zy5jLHYgMS4zLjIuNS40LjUgMjAwNC8wNy8yOCAyMDoxNjo0NiBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IHJlc19kZWJ1Zy5jLHYgMS43IDIwMDQvMTEvMDcgMDI6MjU6MDEgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLQotCi0jaWZkZWYgU1BSSU5URl9DSEFSCi0jIGRlZmluZSBTUFJJTlRGKHgpIHN0cmxlbihzcHJpbnRmLyoqL3gpCi0jZWxzZQotIyBkZWZpbmUgU1BSSU5URih4KSBzcHJpbnRmIHgKLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgY2hhciAqcHJlY3NpemVfbnRvYSh1X2ludDMyX3QpOwotCi1leHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IF9yZXNfb3Bjb2Rlc1tdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBfcmVzX3NlY3Rpb25jb2Rlc1tdOwotCi0jaWZuZGVmIF9MSUJDCi0vKgotICogUHJpbnQgdGhlIGN1cnJlbnQgb3B0aW9ucy4KLSAqLwotdm9pZAotZnBfcmVzc3RhdChjb25zdCByZXNfc3RhdGUgc3RhdHAsIEZJTEUgKmZpbGUpIHsKLQl1X2xvbmcgbWFzazsKLQotCWZwcmludGYoZmlsZSwgIjs7IHJlcyBvcHRpb25zOiIpOwotCWZvciAobWFzayA9IDE7ICBtYXNrICE9IDBVOyAgbWFzayA8PD0gMSkKLQkJaWYgKHN0YXRwLT5vcHRpb25zICYgbWFzaykKLQkJCWZwcmludGYoZmlsZSwgIiAlcyIsIHBfb3B0aW9uKG1hc2spKTsKLQlwdXRjKCdcbicsIGZpbGUpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkCi1kb19zZWN0aW9uKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwKLQkgICBuc19tc2cgKmhhbmRsZSwgbnNfc2VjdCBzZWN0aW9uLAotCSAgIGludCBwZmxhZywgRklMRSAqZmlsZSkKLXsKLQlpbnQgbiwgc2ZsYWcsIHJybnVtOwotCWludCBidWZsZW4gPSAyMDQ4OwotCWNoYXIgKmJ1ZjsKLQluc19vcGNvZGUgb3Bjb2RlOwotCW5zX3JyIHJyOwotCi0JLyoKLQkgKiBQcmludCBhbnN3ZXIgcmVjb3Jkcy4KLQkgKi8KLQlzZmxhZyA9IChzdGF0cC0+cGZjb2RlICYgcGZsYWcpOwotCWlmIChzdGF0cC0+cGZjb2RlICYmICFzZmxhZykKLQkJcmV0dXJuOwotCi0JYnVmID0gbWFsbG9jKChzaXplX3QpYnVmbGVuKTsKLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJZnByaW50ZihmaWxlLCAiOzsgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlvcGNvZGUgPSAobnNfb3Bjb2RlKSBuc19tc2dfZ2V0ZmxhZygqaGFuZGxlLCBuc19mX29wY29kZSk7Ci0JcnJudW0gPSAwOwotCWZvciAoOzspIHsKLQkJaWYgKG5zX3BhcnNlcnIoaGFuZGxlLCBzZWN0aW9uLCBycm51bSwgJnJyKSkgewotCQkJaWYgKGVycm5vICE9IEVOT0RFVikKLQkJCQlmcHJpbnRmKGZpbGUsICI7OyBuc19wYXJzZXJyOiAlc1xuIiwKLQkJCQkJc3RyZXJyb3IoZXJybm8pKTsKLQkJCWVsc2UgaWYgKHJybnVtID4gMCAmJiBzZmxhZyAhPSAwICYmCi0JCQkJIChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMSkpCi0JCQkJcHV0YygnXG4nLCBmaWxlKTsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCQlpZiAocnJudW0gPT0gMCAmJiBzZmxhZyAhPSAwICYmIChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMSkpCi0JCQlmcHJpbnRmKGZpbGUsICI7OyAlcyBTRUNUSU9OOlxuIiwKLQkJCQlwX3NlY3Rpb24oc2VjdGlvbiwgb3Bjb2RlKSk7Ci0JCWlmIChzZWN0aW9uID09IG5zX3NfcWQpCi0JCQlmcHJpbnRmKGZpbGUsICI7O1x0JXMsIHR5cGUgPSAlcywgY2xhc3MgPSAlc1xuIiwKLQkJCQluc19ycl9uYW1lKHJyKSwKLQkJCQlwX3R5cGUobnNfcnJfdHlwZShycikpLAotCQkJCXBfY2xhc3MobnNfcnJfY2xhc3MocnIpKSk7Ci0JCWVsc2UgaWYgKHNlY3Rpb24gPT0gbnNfc19hciAmJiBuc19ycl90eXBlKHJyKSA9PSBuc190X29wdCkgewotCQkJdV9pbnQzMl90IHR0bCA9IG5zX3JyX3R0bChycik7Ci0JCQlmcHJpbnRmKGZpbGUsCi0JCQkJIjsgRUROUzogdmVyc2lvbjogJXUsIHVkcD0ldSwgZmxhZ3M9JTA0eFxuIiwKLQkJCQkodHRsPj4xNikmMHhmZiwgbnNfcnJfY2xhc3MocnIpLCB0dGwmMHhmZmZmKTsKLQkJfSBlbHNlIHsKLQkJCW4gPSBuc19zcHJpbnRycihoYW5kbGUsICZyciwgTlVMTCwgTlVMTCwKLQkJCQkJYnVmLCAodV9pbnQpYnVmbGVuKTsKLQkJCWlmIChuIDwgMCkgewotCQkJCWlmIChlcnJubyA9PSBFTk9TUEMpIHsKLQkJCQkJZnJlZShidWYpOwotCQkJCQlidWYgPSBOVUxMOwotCQkJCQlpZiAoYnVmbGVuIDwgMTMxMDcyKQotCQkJCQkJYnVmID0gbWFsbG9jKChzaXplX3QpKGJ1ZmxlbiArPSAxMDI0KSk7Ci0JCQkJCWlmIChidWYgPT0gTlVMTCkgewotCQkJCQkJZnByaW50ZihmaWxlLAotCQkJCSAgICAgICAgICAgICAgIjs7IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOwotCQkJCQkgICAgICByZXR1cm47Ci0JCQkJCX0KLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWZwcmludGYoZmlsZSwgIjs7IG5zX3NwcmludHJyOiAlc1xuIiwKLQkJCQkJc3RyZXJyb3IoZXJybm8pKTsKLQkJCQlnb3RvIGNsZWFudXA7Ci0JCQl9Ci0JCQlmcHV0cyhidWYsIGZpbGUpOwotCQkJZnB1dGMoJ1xuJywgZmlsZSk7Ci0JCX0KLQkJcnJudW0rKzsKLQl9Ci0gY2xlYW51cDoKLQlpZiAoYnVmICE9IE5VTEwpCi0JCWZyZWUoYnVmKTsKLX0KLQotLyoKLSAqIFByaW50IHRoZSBjb250ZW50cyBvZiBhIHF1ZXJ5LgotICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBwcmltYXJpbHkgYSBkZWJ1Z2dpbmcgcm91dGluZS4KLSAqLwotdm9pZAotcmVzX3BxdWVyeShjb25zdCByZXNfc3RhdGUgc3RhdHAsIGNvbnN0IHVfY2hhciAqbXNnLCBpbnQgbGVuLCBGSUxFICpmaWxlKSB7Ci0JbnNfbXNnIGhhbmRsZTsKLQlpbnQgcWRjb3VudCwgYW5jb3VudCwgbnNjb3VudCwgYXJjb3VudDsKLQl1X2ludCBvcGNvZGUsIHJjb2RlLCBpZDsKLQotCWlmIChuc19pbml0cGFyc2UobXNnLCBsZW4sICZoYW5kbGUpIDwgMCkgewotCQlmcHJpbnRmKGZpbGUsICI7OyBuc19pbml0cGFyc2U6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwotCQlyZXR1cm47Ci0JfQotCW9wY29kZSA9IG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9vcGNvZGUpOwotCXJjb2RlID0gbnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3Jjb2RlKTsKLQlpZCA9IG5zX21zZ19pZChoYW5kbGUpOwotCXFkY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX3FkKTsKLQlhbmNvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19hbik7Ci0JbnNjb3VudCA9IG5zX21zZ19jb3VudChoYW5kbGUsIG5zX3NfbnMpOwotCWFyY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX2FyKTsKLQotCS8qCi0JICogUHJpbnQgaGVhZGVyIGZpZWxkcy4KLQkgKi8KLQlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRFgpIHx8IHJjb2RlKQotCQlmcHJpbnRmKGZpbGUsCi0JCQkiOzsgLT4+SEVBREVSPDwtIG9wY29kZTogJXMsIHN0YXR1czogJXMsIGlkOiAlZFxuIiwKLQkJCV9yZXNfb3Bjb2Rlc1tvcGNvZGVdLCBwX3Jjb2RlKChpbnQpcmNvZGUpLCBpZCk7Ci0JaWYgKCghc3RhdHAtPnBmY29kZSkgfHwgKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX0hFQURYKSkKLQkJcHV0YygnOycsIGZpbGUpOwotCWlmICgoIXN0YXRwLT5wZmNvZGUpIHx8IChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMikpIHsKLQkJZnByaW50ZihmaWxlLCAiOyBmbGFnczoiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9xcikpCi0JCQlmcHJpbnRmKGZpbGUsICIgcXIiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9hYSkpCi0JCQlmcHJpbnRmKGZpbGUsICIgYWEiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl90YykpCi0JCQlmcHJpbnRmKGZpbGUsICIgdGMiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9yZCkpCi0JCQlmcHJpbnRmKGZpbGUsICIgcmQiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9yYSkpCi0JCQlmcHJpbnRmKGZpbGUsICIgcmEiKTsKLQkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl96KSkKLQkJCWZwcmludGYoZmlsZSwgIiA/PyIpOwotCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX2FkKSkKLQkJCWZwcmludGYoZmlsZSwgIiBhZCIpOwotCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX2NkKSkKLQkJCWZwcmludGYoZmlsZSwgIiBjZCIpOwotCX0KLQlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRDEpKSB7Ci0JCWZwcmludGYoZmlsZSwgIjsgJXM6ICVkIiwKLQkJCXBfc2VjdGlvbihuc19zX3FkLCAoaW50KW9wY29kZSksIHFkY291bnQpOwotCQlmcHJpbnRmKGZpbGUsICIsICVzOiAlZCIsCi0JCQlwX3NlY3Rpb24obnNfc19hbiwgKGludClvcGNvZGUpLCBhbmNvdW50KTsKLQkJZnByaW50ZihmaWxlLCAiLCAlczogJWQiLAotCQkJcF9zZWN0aW9uKG5zX3NfbnMsIChpbnQpb3Bjb2RlKSwgbnNjb3VudCk7Ci0JCWZwcmludGYoZmlsZSwgIiwgJXM6ICVkIiwKLQkJCXBfc2VjdGlvbihuc19zX2FyLCAoaW50KW9wY29kZSksIGFyY291bnQpOwotCX0KLQlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmCi0JCShSRVNfUFJGX0hFQURYIHwgUkVTX1BSRl9IRUFEMiB8IFJFU19QUkZfSEVBRDEpKSkgewotCQlwdXRjKCdcbicsZmlsZSk7Ci0JfQotCS8qCi0JICogUHJpbnQgdGhlIHZhcmlvdXMgc2VjdGlvbnMuCi0JICovCi0JZG9fc2VjdGlvbihzdGF0cCwgJmhhbmRsZSwgbnNfc19xZCwgUkVTX1BSRl9RVUVTLCBmaWxlKTsKLQlkb19zZWN0aW9uKHN0YXRwLCAmaGFuZGxlLCBuc19zX2FuLCBSRVNfUFJGX0FOUywgZmlsZSk7Ci0JZG9fc2VjdGlvbihzdGF0cCwgJmhhbmRsZSwgbnNfc19ucywgUkVTX1BSRl9BVVRILCBmaWxlKTsKLQlkb19zZWN0aW9uKHN0YXRwLCAmaGFuZGxlLCBuc19zX2FyLCBSRVNfUFJGX0FERCwgZmlsZSk7Ci0JaWYgKHFkY291bnQgPT0gMCAmJiBhbmNvdW50ID09IDAgJiYKLQkgICAgbnNjb3VudCA9PSAwICYmIGFyY291bnQgPT0gMCkKLQkJcHV0YygnXG4nLCBmaWxlKTsKLX0KLQotY29uc3QgdV9jaGFyICoKLXBfY2RubmFtZShjb25zdCB1X2NoYXIgKmNwLCBjb25zdCB1X2NoYXIgKm1zZywgaW50IGxlbiwgRklMRSAqZmlsZSkgewotCWNoYXIgbmFtZVtNQVhETkFNRV07Ci0JaW50IG47Ci0KLQlpZiAoKG4gPSBkbl9leHBhbmQobXNnLCBtc2cgKyBsZW4sIGNwLCBuYW1lLCBzaXplb2YgbmFtZSkpIDwgMCkKLQkJcmV0dXJuIChOVUxMKTsKLQlpZiAobmFtZVswXSA9PSAnXDAnKQotCQlwdXRjKCcuJywgZmlsZSk7Ci0JZWxzZQotCQlmcHV0cyhuYW1lLCBmaWxlKTsKLQlyZXR1cm4gKGNwICsgbik7Ci19Ci0KLWNvbnN0IHVfY2hhciAqCi1wX2NkbmFtZShjb25zdCB1X2NoYXIgKmNwLCBjb25zdCB1X2NoYXIgKm1zZywgRklMRSAqZmlsZSkgewotCXJldHVybiAocF9jZG5uYW1lKGNwLCBtc2csIFBBQ0tFVFNaLCBmaWxlKSk7Ci19Ci0KLS8qIFJldHVybiBhIGZ1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSBmcm9tIGEgY29tcHJlc3NlZCBuYW1lICh3aXRoCi0gICBsZW5ndGggc3VwcGxpZWQpLiAgKi8KLQotY29uc3QgdV9jaGFyICoKLXBfZnFubmFtZShjcCwgbXNnLCBtc2dsZW4sIG5hbWUsIG5hbWVsZW4pCi0JY29uc3QgdV9jaGFyICpjcCwgKm1zZzsKLQlpbnQgbXNnbGVuOwotCWNoYXIgKm5hbWU7Ci0JaW50IG5hbWVsZW47Ci17Ci0JaW50IG4sIG5ld2xlbjsKLQotCWlmICgobiA9IGRuX2V4cGFuZChtc2csIGNwICsgbXNnbGVuLCBjcCwgbmFtZSwgbmFtZWxlbikpIDwgMCkKLQkJcmV0dXJuIChOVUxMKTsKLQluZXdsZW4gPSBzdHJsZW4obmFtZSk7Ci0JaWYgKG5ld2xlbiA9PSAwIHx8IG5hbWVbbmV3bGVuIC0gMV0gIT0gJy4nKSB7Ci0JCWlmIChuZXdsZW4gKyAxID49IG5hbWVsZW4pCS8qIExhY2sgc3BhY2UgZm9yIGZpbmFsIGRvdCAqLwotCQkJcmV0dXJuIChOVUxMKTsKLQkJZWxzZQotCQkJc3RyY3B5KG5hbWUgKyBuZXdsZW4sICIuIik7Ci0JfQotCXJldHVybiAoY3AgKyBuKTsKLX0KLQotLyogWFhYOgl0aGUgcmVzdCBvZiB0aGVzZSBmdW5jdGlvbnMgbmVlZCB0byBiZWNvbWUgbGVuZ3RoLWxpbWl0ZWQsIHRvby4gKi8KLQotY29uc3QgdV9jaGFyICoKLXBfZnFuYW1lKGNvbnN0IHVfY2hhciAqY3AsIGNvbnN0IHVfY2hhciAqbXNnLCBGSUxFICpmaWxlKSB7Ci0JY2hhciBuYW1lW01BWEROQU1FXTsKLQljb25zdCB1X2NoYXIgKm47Ci0KLQluID0gcF9mcW5uYW1lKGNwLCBtc2csIE1BWENETkFNRSwgbmFtZSwgc2l6ZW9mIG5hbWUpOwotCWlmIChuID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JZnB1dHMobmFtZSwgZmlsZSk7Ci0JcmV0dXJuIChuKTsKLX0KLQotLyoKLSAqIE5hbWVzIG9mIFJSIGNsYXNzZXMgYW5kIHFjbGFzc2VzLiAgQ2xhc3NlcyBhbmQgcWNsYXNzZXMgYXJlIHRoZSBzYW1lLCBleGNlcHQKLSAqIHRoYXQgQ19BTlkgaXMgYSBxY2xhc3MgYnV0IG5vdCBhIGNsYXNzLiAgKFlvdSBjYW4gYXNrIGZvciByZWNvcmRzIG9mIGNsYXNzCi0gKiBDX0FOWSwgYnV0IHlvdSBjYW4ndCBoYXZlIGFueSByZWNvcmRzIG9mIHRoYXQgY2xhc3MgaW4gdGhlIGRhdGFiYXNlLikKLSAqLwotY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2NsYXNzX3N5bXNbXSA9IHsKLQl7Q19JTiwJCSJJTiIsCQkoY2hhciAqKTB9LAotCXtDX0NIQU9TLAkiQ0giLAkJKGNoYXIgKikwfSwKLQl7Q19DSEFPUywJIkNIQU9TIiwJKGNoYXIgKikwfSwKLQl7Q19IUywJCSJIUyIsCQkoY2hhciAqKTB9LAotCXtDX0hTLAkJIkhFU0lPRCIsCShjaGFyICopMH0sCi0Je0NfQU5ZLAkJIkFOWSIsCQkoY2hhciAqKTB9LAotCXtDX05PTkUsCSJOT05FIiwJCShjaGFyICopMH0sCi0Je0NfSU4sIAkJKGNoYXIgKikwLAkoY2hhciAqKTB9Ci19OwotCi0vKgotICogTmFtZXMgb2YgbWVzc2FnZSBzZWN0aW9ucy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9kZWZhdWx0X3NlY3Rpb25fc3ltc1tdID0gewotCXtuc19zX3FkLAkiUVVFUlkiLAkoY2hhciAqKTB9LAotCXtuc19zX2FuLAkiQU5TV0VSIiwJKGNoYXIgKikwfSwKLQl7bnNfc19ucywJIkFVVEhPUklUWSIsCShjaGFyICopMH0sCi0Je25zX3NfYXIsCSJBRERJVElPTkFMIiwJKGNoYXIgKikwfSwKLQl7MCwgICAgICAgICAgICAgKGNoYXIgKikwLAkoY2hhciAqKTB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX3VwZGF0ZV9zZWN0aW9uX3N5bXNbXSA9IHsKLQl7U19aT05FLAkiWk9ORSIsCQkoY2hhciAqKTB9LAotCXtTX1BSRVJFUSwJIlBSRVJFUVVJU0lURSIsCShjaGFyICopMH0sCi0Je1NfVVBEQVRFLAkiVVBEQVRFIiwJKGNoYXIgKikwfSwKLQl7U19BRERULAkiQURESVRJT05BTCIsCShjaGFyICopMH0sCi0JezAsICAgICAgICAgICAgIChjaGFyICopMCwJKGNoYXIgKikwfQotfTsKLQotY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2tleV9zeW1zW10gPSB7Ci0Je05TX0FMR19NRDVSU0EsCQkiUlNBIiwJCSJSU0EgS0VZIHdpdGggTUQ1IGhhc2gifSwKLQl7TlNfQUxHX0RILAkJIkRIIiwJCSJEaWZmaWUgSGVsbG1hbiJ9LAotCXtOU19BTEdfRFNBLAkJIkRTQSIsCQkiRGlnaXRhbCBTaWduYXR1cmUgQWxnb3JpdGhtIn0sCi0Je05TX0FMR19FWFBJUkVfT05MWSwJIkVYUElSRU9OTFkiLAkiTm8gYWxnb3JpdGhtIn0sCi0Je05TX0FMR19QUklWQVRFX09JRCwJIlBSSVZBVEUiLAkiQWxnb3JpdGhtIG9idGFpbmVkIGZyb20gT0lEIn0sCi0JezAsCQkJTlVMTCwJCU5VTEx9Ci19OwotCi1jb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfY2VydF9zeW1zW10gPSB7Ci0Je2NlcnRfdF9wa2l4LAkiUEtJWCIsCQkiUEtJWCAoWC41MDl2MykgQ2VydGlmaWNhdGUifSwKLQl7Y2VydF90X3Nwa2ksCSJTUEtJIiwJCSJTUEtJIGNlcnRpZmljYXRlIn0sCi0Je2NlcnRfdF9wZ3AsCSJQR1AiLAkJIlBHUCBjZXJ0aWZpY2F0ZSJ9LAotCXtjZXJ0X3RfdXJsLAkiVVJMIiwJCSJVUkwgUHJpdmF0ZSJ9LAotCXtjZXJ0X3Rfb2lkLAkiT0lEIiwJCSJPSUQgUHJpdmF0ZSJ9LAotCXswLAkJTlVMTCwJCU5VTEx9Ci19OwotCi0vKgotICogTmFtZXMgb2YgUlIgdHlwZXMgYW5kIHF0eXBlcy4gIFR5cGVzIGFuZCBxdHlwZXMgYXJlIHRoZSBzYW1lLCBleGNlcHQKLSAqIHRoYXQgVF9BTlkgaXMgYSBxdHlwZSBidXQgbm90IGEgdHlwZS4gIChZb3UgY2FuIGFzayBmb3IgcmVjb3JkcyBvZiB0eXBlCi0gKiBUX0FOWSwgYnV0IHlvdSBjYW4ndCBoYXZlIGFueSByZWNvcmRzIG9mIHRoYXQgdHlwZSBpbiB0aGUgZGF0YWJhc2UuKQotICovCi1jb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfdHlwZV9zeW1zW10gPSB7Ci0Je25zX3RfYSwJIkEiLAkJImFkZHJlc3MifSwKLQl7bnNfdF9ucywJIk5TIiwJCSJuYW1lIHNlcnZlciJ9LAotCXtuc190X21kLAkiTUQiLAkJIm1haWwgZGVzdGluYXRpb24gKGRlcHJlY2F0ZWQpIn0sCi0Je25zX3RfbWYsCSJNRiIsCQkibWFpbCBmb3J3YXJkZXIgKGRlcHJlY2F0ZWQpIn0sCi0Je25zX3RfY25hbWUsCSJDTkFNRSIsCSJjYW5vbmljYWwgbmFtZSJ9LAotCXtuc190X3NvYSwJIlNPQSIsCQkic3RhcnQgb2YgYXV0aG9yaXR5In0sCi0Je25zX3RfbWIsCSJNQiIsCQkibWFpbGJveCJ9LAotCXtuc190X21nLAkiTUciLAkJIm1haWwgZ3JvdXAgbWVtYmVyIn0sCi0Je25zX3RfbXIsCSJNUiIsCQkibWFpbCByZW5hbWUifSwKLQl7bnNfdF9udWxsLAkiTlVMTCIsCQkibnVsbCJ9LAotCXtuc190X3drcywJIldLUyIsCQkid2VsbC1rbm93biBzZXJ2aWNlIChkZXByZWNhdGVkKSJ9LAotCXtuc190X3B0ciwJIlBUUiIsCQkiZG9tYWluIG5hbWUgcG9pbnRlciJ9LAotCXtuc190X2hpbmZvLAkiSElORk8iLAkiaG9zdCBpbmZvcm1hdGlvbiJ9LAotCXtuc190X21pbmZvLAkiTUlORk8iLAkibWFpbGJveCBpbmZvcm1hdGlvbiJ9LAotCXtuc190X214LAkiTVgiLAkJIm1haWwgZXhjaGFuZ2VyIn0sCi0Je25zX3RfdHh0LAkiVFhUIiwJCSJ0ZXh0In0sCi0Je25zX3RfcnAsCSJSUCIsCQkicmVzcG9uc2libGUgcGVyc29uIn0sCi0Je25zX3RfYWZzZGIsCSJBRlNEQiIsCSJEQ0Ugb3IgQUZTIHNlcnZlciJ9LAotCXtuc190X3gyNSwJIlgyNSIsCQkiWDI1IGFkZHJlc3MifSwKLQl7bnNfdF9pc2RuLAkiSVNETiIsCQkiSVNETiBhZGRyZXNzIn0sCi0Je25zX3RfcnQsCSJSVCIsCQkicm91dGVyIn0sCi0Je25zX3RfbnNhcCwJIk5TQVAiLAkJIm5zYXAgYWRkcmVzcyJ9LAotCXtuc190X25zYXBfcHRyLAkiTlNBUF9QVFIiLAkiZG9tYWluIG5hbWUgcG9pbnRlciJ9LAotCXtuc190X3NpZywJIlNJRyIsCQkic2lnbmF0dXJlIn0sCi0Je25zX3Rfa2V5LAkiS0VZIiwJCSJrZXkifSwKLQl7bnNfdF9weCwJIlBYIiwJCSJtYXBwaW5nIGluZm9ybWF0aW9uIn0sCi0Je25zX3RfZ3BvcywJIkdQT1MiLAkJImdlb2dyYXBoaWNhbCBwb3NpdGlvbiAod2l0aGRyYXduKSJ9LAotCXtuc190X2FhYWEsCSJBQUFBIiwJCSJJUHY2IGFkZHJlc3MifSwKLQl7bnNfdF9sb2MsCSJMT0MiLAkJImxvY2F0aW9uIn0sCi0Je25zX3Rfbnh0LAkiTlhUIiwJCSJuZXh0IHZhbGlkIG5hbWUgKHVuaW1wbGVtZW50ZWQpIn0sCi0Je25zX3RfZWlkLAkiRUlEIiwJCSJlbmRwb2ludCBpZGVudGlmaWVyICh1bmltcGxlbWVudGVkKSJ9LAotCXtuc190X25pbWxvYywJIk5JTUxPQyIsCSJOSU1ST0QgbG9jYXRvciAodW5pbXBsZW1lbnRlZCkifSwKLQl7bnNfdF9zcnYsCSJTUlYiLAkJInNlcnZlciBzZWxlY3Rpb24ifSwKLQl7bnNfdF9hdG1hLAkiQVRNQSIsCQkiQVRNIGFkZHJlc3MgKHVuaW1wbGVtZW50ZWQpIn0sCi0Je25zX3RfdGtleSwJIlRLRVkiLAkJInRrZXkifSwKLQl7bnNfdF90c2lnLAkiVFNJRyIsCQkidHJhbnNhY3Rpb24gc2lnbmF0dXJlIn0sCi0Je25zX3RfaXhmciwJIklYRlIiLAkJImluY3JlbWVudGFsIHpvbmUgdHJhbnNmZXIifSwKLQl7bnNfdF9heGZyLAkiQVhGUiIsCQkiem9uZSB0cmFuc2ZlciJ9LAotCXtuc190X3p4ZnIsCSJaWEZSIiwJCSJjb21wcmVzc2VkIHpvbmUgdHJhbnNmZXIifSwKLQl7bnNfdF9tYWlsYiwJIk1BSUxCIiwJIm1haWxib3gtcmVsYXRlZCBkYXRhIChkZXByZWNhdGVkKSJ9LAotCXtuc190X21haWxhLAkiTUFJTEEiLAkibWFpbCBhZ2VudCAoZGVwcmVjYXRlZCkifSwKLQl7bnNfdF9uYXB0ciwJIk5BUFRSIiwJIlVSTiBOYW1pbmcgQXV0aG9yaXR5In0sCi0Je25zX3Rfa3gsCSJLWCIsCQkiS2V5IEV4Y2hhbmdlIn0sCi0Je25zX3RfY2VydCwJIkNFUlQiLAkJIkNlcnRpZmljYXRlIn0sCi0Je25zX3RfYTYsCSJBNiIsCQkiSVB2NiBBZGRyZXNzIn0sCi0Je25zX3RfZG5hbWUsCSJETkFNRSIsCSJkbmFtZSJ9LAotCXtuc190X3NpbmssCSJTSU5LIiwJCSJLaXRjaGVuIFNpbmsgKGV4cGVyaW1lbnRhbCkifSwKLQl7bnNfdF9vcHQsCSJPUFQiLAkJIkVETlMgT3B0aW9ucyJ9LAotCXtuc190X2FueSwJIkFOWSIsCQkiXCJhbnlcIiJ9LAotCXswLCAJCU5VTEwsCQlOVUxMfQotfTsKLQotLyoKLSAqIE5hbWVzIG9mIEROUyByY29kZXMuCi0gKi8KLWNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9yY29kZV9zeW1zW10gPSB7Ci0Je25zX3Jfbm9lcnJvciwJIk5PRVJST1IiLAkJIm5vIGVycm9yIn0sCi0Je25zX3JfZm9ybWVyciwJIkZPUk1FUlIiLAkJImZvcm1hdCBlcnJvciJ9LAotCXtuc19yX3NlcnZmYWlsLAkiU0VSVkZBSUwiLAkJInNlcnZlciBmYWlsZWQifSwKLQl7bnNfcl9ueGRvbWFpbiwJIk5YRE9NQUlOIiwJCSJubyBzdWNoIGRvbWFpbiBuYW1lIn0sCi0Je25zX3Jfbm90aW1wbCwJIk5PVElNUCIsCQkibm90IGltcGxlbWVudGVkIn0sCi0Je25zX3JfcmVmdXNlZCwJIlJFRlVTRUQiLAkJInJlZnVzZWQifSwKLQl7bnNfcl95eGRvbWFpbiwJIllYRE9NQUlOIiwJCSJkb21haW4gbmFtZSBleGlzdHMifSwKLQl7bnNfcl95eHJyc2V0LAkiWVhSUlNFVCIsCQkicnJzZXQgZXhpc3RzIn0sCi0Je25zX3JfbnhycnNldCwJIk5YUlJTRVQiLAkJInJyc2V0IGRvZXNuJ3QgZXhpc3QifSwKLQl7bnNfcl9ub3RhdXRoLAkiTk9UQVVUSCIsCQkibm90IGF1dGhvcml0YXRpdmUifSwKLQl7bnNfcl9ub3R6b25lLAkiTk9UWk9ORSIsCQkiTm90IGluIHpvbmUifSwKLQl7bnNfcl9tYXgsCSIiLAkJCSIifSwKLQl7bnNfcl9iYWRzaWcsCSJCQURTSUciLAkJImJhZCBzaWduYXR1cmUifSwKLQl7bnNfcl9iYWRrZXksCSJCQURLRVkiLAkJImJhZCBrZXkifSwKLQl7bnNfcl9iYWR0aW1lLAkiQkFEVElNRSIsCQkiYmFkIHRpbWUifSwKLQl7MCwgCQlOVUxMLAkJCU5VTEx9Ci19OwotCi1pbnQKLXN5bV9zdG9uKGNvbnN0IHN0cnVjdCByZXNfc3ltICpzeW1zLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgKnN1Y2Nlc3MpIHsKLQlmb3IgKDsgc3ltcy0+bmFtZSAhPSAwOyBzeW1zKyspIHsKLQkJaWYgKHN0cmNhc2VjbXAgKG5hbWUsIHN5bXMtPm5hbWUpID09IDApIHsKLQkJCWlmIChzdWNjZXNzKQotCQkJCSpzdWNjZXNzID0gMTsKLQkJCXJldHVybiAoc3ltcy0+bnVtYmVyKTsKLQkJfQotCX0KLQlpZiAoc3VjY2VzcykKLQkJKnN1Y2Nlc3MgPSAwOwotCXJldHVybiAoc3ltcy0+bnVtYmVyKTsJCS8qIFRoZSBkZWZhdWx0IHZhbHVlLiAqLwotfQotCi1jb25zdCBjaGFyICoKLXN5bV9udG9zKGNvbnN0IHN0cnVjdCByZXNfc3ltICpzeW1zLCBpbnQgbnVtYmVyLCBpbnQgKnN1Y2Nlc3MpIHsKLQlzdGF0aWMgY2hhciB1bm5hbWVbMjBdOwotCi0JZm9yICg7IHN5bXMtPm5hbWUgIT0gMDsgc3ltcysrKSB7Ci0JCWlmIChudW1iZXIgPT0gc3ltcy0+bnVtYmVyKSB7Ci0JCQlpZiAoc3VjY2VzcykKLQkJCQkqc3VjY2VzcyA9IDE7Ci0JCQlyZXR1cm4gKHN5bXMtPm5hbWUpOwotCQl9Ci0JfQotCi0Jc3ByaW50Zih1bm5hbWUsICIlZCIsIG51bWJlcik7CQkvKiBYWFggbm9ucmVlbnRyYW50ICovCi0JaWYgKHN1Y2Nlc3MpCi0JCSpzdWNjZXNzID0gMDsKLQlyZXR1cm4gKHVubmFtZSk7Ci19Ci0KLWNvbnN0IGNoYXIgKgotc3ltX250b3AoY29uc3Qgc3RydWN0IHJlc19zeW0gKnN5bXMsIGludCBudW1iZXIsIGludCAqc3VjY2VzcykgewotCXN0YXRpYyBjaGFyIHVubmFtZVsyMF07Ci0KLQlmb3IgKDsgc3ltcy0+bmFtZSAhPSAwOyBzeW1zKyspIHsKLQkJaWYgKG51bWJlciA9PSBzeW1zLT5udW1iZXIpIHsKLQkJCWlmIChzdWNjZXNzKQotCQkJCSpzdWNjZXNzID0gMTsKLQkJCXJldHVybiAoc3ltcy0+aHVtYW5uYW1lKTsKLQkJfQotCX0KLQlzcHJpbnRmKHVubmFtZSwgIiVkIiwgbnVtYmVyKTsJCS8qIFhYWCBub25yZWVudHJhbnQgKi8KLQlpZiAoc3VjY2VzcykKLQkJKnN1Y2Nlc3MgPSAwOwotCXJldHVybiAodW5uYW1lKTsKLX0KLQotLyoKLSAqIFJldHVybiBhIHN0cmluZyBmb3IgdGhlIHR5cGUuCi0gKi8KLWNvbnN0IGNoYXIgKgotcF90eXBlKGludCB0eXBlKSB7Ci0JaW50IHN1Y2Nlc3M7Ci0JY29uc3QgY2hhciAqcmVzdWx0OwotCXN0YXRpYyBjaGFyIHR5cGVidWZbMjBdOwotCi0JcmVzdWx0ID0gc3ltX250b3MoX19wX3R5cGVfc3ltcywgdHlwZSwgJnN1Y2Nlc3MpOwotCWlmIChzdWNjZXNzKQotCQlyZXR1cm4gKHJlc3VsdCk7Ci0JaWYgKHR5cGUgPCAwIHx8IHR5cGUgPiAweGZmZmYpCi0JCXJldHVybiAoIkJBRFRZUEUiKTsKLQlzcHJpbnRmKHR5cGVidWYsICJUWVBFJWQiLCB0eXBlKTsKLQlyZXR1cm4gKHR5cGVidWYpOwotfQotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIGZvciB0aGUgdHlwZS4KLSAqLwotY29uc3QgY2hhciAqCi1wX3NlY3Rpb24oaW50IHNlY3Rpb24sIGludCBvcGNvZGUpIHsKLQljb25zdCBzdHJ1Y3QgcmVzX3N5bSAqc3ltYm9sczsKLQotCXN3aXRjaCAob3Bjb2RlKSB7Ci0JY2FzZSBuc19vX3VwZGF0ZToKLQkJc3ltYm9scyA9IF9fcF91cGRhdGVfc2VjdGlvbl9zeW1zOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzeW1ib2xzID0gX19wX2RlZmF1bHRfc2VjdGlvbl9zeW1zOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIChzeW1fbnRvcyhzeW1ib2xzLCBzZWN0aW9uLCAoaW50ICopMCkpOwotfQotCi0vKgotICogUmV0dXJuIGEgbW5lbW9uaWMgZm9yIGNsYXNzLgotICovCi1jb25zdCBjaGFyICoKLXBfY2xhc3MoaW50IGNsYXNzKSB7Ci0JaW50IHN1Y2Nlc3M7Ci0JY29uc3QgY2hhciAqcmVzdWx0OwotCXN0YXRpYyBjaGFyIGNsYXNzYnVmWzIwXTsKLQotCXJlc3VsdCA9IHN5bV9udG9zKF9fcF9jbGFzc19zeW1zLCBjbGFzcywgJnN1Y2Nlc3MpOwotCWlmIChzdWNjZXNzKQotCQlyZXR1cm4gKHJlc3VsdCk7Ci0JaWYgKGNsYXNzIDwgMCB8fCBjbGFzcyA+IDB4ZmZmZikKLQkJcmV0dXJuICgiQkFEQ0xBU1MiKTsKLQlzcHJpbnRmKGNsYXNzYnVmLCAiQ0xBU1MlZCIsIGNsYXNzKTsKLQlyZXR1cm4gKGNsYXNzYnVmKTsKLX0KLQotLyoKLSAqIFJldHVybiBhIG1uZW1vbmljIGZvciBhbiBvcHRpb24KLSAqLwotY29uc3QgY2hhciAqCi1wX29wdGlvbih1X2xvbmcgb3B0aW9uKSB7Ci0Jc3RhdGljIGNoYXIgbmJ1Zls0MF07Ci0KLQlzd2l0Y2ggKG9wdGlvbikgewotCWNhc2UgUkVTX0lOSVQ6CQlyZXR1cm4gImluaXQiOwotCWNhc2UgUkVTX0RFQlVHOgkJcmV0dXJuICJkZWJ1ZyI7Ci0JY2FzZSBSRVNfQUFPTkxZOglyZXR1cm4gImFhb25seSh1bmltcGwpIjsKLQljYXNlIFJFU19VU0VWQzoJCXJldHVybiAidXNldmMiOwotCWNhc2UgUkVTX1BSSU1BUlk6CXJldHVybiAicHJpbXJ5KHVuaW1wbCkiOwotCWNhc2UgUkVTX0lHTlRDOgkJcmV0dXJuICJpZ250YyI7Ci0JY2FzZSBSRVNfUkVDVVJTRToJcmV0dXJuICJyZWN1cnMiOwotCWNhc2UgUkVTX0RFRk5BTUVTOglyZXR1cm4gImRlZm5hbSI7Ci0JY2FzZSBSRVNfU1RBWU9QRU46CXJldHVybiAic3R5b3BuIjsKLQljYXNlIFJFU19ETlNSQ0g6CXJldHVybiAiZG5zcmNoIjsKLQljYXNlIFJFU19JTlNFQ1VSRTE6CXJldHVybiAiaW5zZWN1cmUxIjsKLQljYXNlIFJFU19JTlNFQ1VSRTI6CXJldHVybiAiaW5zZWN1cmUyIjsKLQljYXNlIFJFU19OT0FMSUFTRVM6CXJldHVybiAibm9hbGlhc2VzIjsKLQljYXNlIFJFU19VU0VfSU5FVDY6CXJldHVybiAiaW5ldDYiOwotI2lmZGVmIFJFU19VU0VfRUROUzAJLyogS0FNRSBleHRlbnNpb24gKi8KLQljYXNlIFJFU19VU0VfRUROUzA6CXJldHVybiAiZWRuczAiOwotI2VuZGlmCi0jaWZkZWYgUkVTX1VTRV9ETkFNRQotCWNhc2UgUkVTX1VTRV9ETkFNRToJcmV0dXJuICJkbmFtZSI7Ci0jZW5kaWYKLSNpZmRlZiBSRVNfVVNFX0ROU1NFQwotCWNhc2UgUkVTX1VTRV9ETlNTRUM6CXJldHVybiAiZG5zc2VjIjsKLSNlbmRpZgotI2lmZGVmIFJFU19OT1RMRFFVRVJZCi0JY2FzZSBSRVNfTk9UTERRVUVSWToJcmV0dXJuICJuby10bGQtcXVlcnkiOwotI2VuZGlmCi0jaWZkZWYgUkVTX05PX05JQkJMRTIKLQljYXNlIFJFU19OT19OSUJCTEUyOglyZXR1cm4gIm5vLW5pYmJsZTIiOwotI2VuZGlmCi0JCQkJLyogWFhYIG5vbnJlZW50cmFudCAqLwotCWRlZmF1bHQ6CQlzcHJpbnRmKG5idWYsICI/MHglbHg/IiwgKHVfbG9uZylvcHRpb24pOwotCQkJCXJldHVybiAobmJ1Zik7Ci0JfQotfQotCi0vKgotICogUmV0dXJuIGEgbW5lbW9uaWMgZm9yIGEgdGltZSB0byBsaXZlLgotICovCi1jb25zdCBjaGFyICoKLXBfdGltZSh1X2ludDMyX3QgdmFsdWUpIHsKLQlzdGF0aWMgY2hhciBuYnVmWzQwXTsJCS8qIFhYWCBub25yZWVudHJhbnQgKi8KLQotCWlmIChuc19mb3JtYXRfdHRsKCh1X2xvbmcpdmFsdWUsIG5idWYsIHNpemVvZiBuYnVmKSA8IDApCi0JCXNwcmludGYobmJ1ZiwgIiV1IiwgdmFsdWUpOwotCXJldHVybiAobmJ1Zik7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gYSBzdHJpbmcgZm9yIHRoZSByY29kZS4KLSAqLwotY29uc3QgY2hhciAqCi1wX3Jjb2RlKGludCByY29kZSkgewotCXJldHVybiAoc3ltX250b3MoX19wX3Jjb2RlX3N5bXMsIHJjb2RlLCAoaW50ICopMCkpOwotfQotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIGZvciBhIHJlc19zb2NrYWRkcl91bmlvbi4KLSAqLwotY29uc3QgY2hhciAqCi1wX3NvY2t1bih1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gdSwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkgewotCWNoYXIgcmV0W3NpemVvZiAiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6MTIzLjEyMy4xMjMuMTIzIl07Ci0KLQlzd2l0Y2ggKHUuc2luLnNpbl9mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCWluZXRfbnRvcChBRl9JTkVULCAmdS5zaW4uc2luX2FkZHIsIHJldCwgc2l6ZW9mIHJldCk7Ci0JCWJyZWFrOwotI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCi0JY2FzZSBBRl9JTkVUNjoKLQkJaW5ldF9udG9wKEFGX0lORVQ2LCAmdS5zaW42LnNpbjZfYWRkciwgcmV0LCBzaXplb2YgcmV0KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlzcHJpbnRmKHJldCwgIlthZiVkXSIsIHUuc2luLnNpbl9mYW1pbHkpOwotCQlicmVhazsKLQl9Ci0JaWYgKHNpemUgPiAwVSkgewotCQlzdHJuY3B5KGJ1ZiwgcmV0LCBzaXplIC0gMSk7Ci0JCWJ1ZltzaXplIC0gMV0gPSAnMCc7Ci0JfQotCXJldHVybiAoYnVmKTsKLX0KLQotLyoKLSAqIHJvdXRpbmVzIHRvIGNvbnZlcnQgYmV0d2VlbiBvbi10aGUtd2lyZSBSUiBmb3JtYXQgYW5kIHpvbmUgZmlsZSBmb3JtYXQuCi0gKiBEb2VzIG5vdCBjb250YWluIGNvbnZlcnNpb24gdG8vZnJvbSBkZWNpbWFsIGRlZ3JlZXM7IGRpdmlkZSBvciBtdWx0aXBseQotICogYnkgNjAqNjAqMTAwMCBmb3IgdGhhdC4KLSAqLwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBvd2Vyb2Z0ZW5bMTBdID0gezEsIDEwLCAxMDAsIDEwMDAsIDEwMDAwLCAxMDAwMDAsCi0JCQkJICAgICAgMTAwMDAwMCwxMDAwMDAwMCwxMDAwMDAwMDAsMTAwMDAwMDAwMH07Ci0KLS8qIHRha2VzIGFuIFhlWSBwcmVjaXNpb24vc2l6ZSB2YWx1ZSwgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKLXByZWNzaXplX250b2EocHJlYykKLQl1X2ludDMyX3QgcHJlYzsKLXsKLQlzdGF0aWMgY2hhciByZXRidWZbc2l6ZW9mICI5MDAwMDAwMC4wMCJdOwkvKiBYWFggbm9ucmVlbnRyYW50ICovCi0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JaW50IG1hbnRpc3NhLCBleHBvbmVudDsKLQotCW1hbnRpc3NhID0gKGludCkoKHByZWMgPj4gNCkgJiAweDBmKSAlIDEwOwotCWV4cG9uZW50ID0gKGludCkoKHByZWMgPj4gMCkgJiAweDBmKSAlIDEwOwotCi0JdmFsID0gbWFudGlzc2EgKiBwb3dlcm9mdGVuW2V4cG9uZW50XTsKLQotCSh2b2lkKSBzcHJpbnRmKHJldGJ1ZiwgIiVsdS4lLjJsdSIsIHZhbC8xMDAsIHZhbCUxMDApOwotCXJldHVybiAocmV0YnVmKTsKLX0KLQotLyogY29udmVydHMgYXNjaWkgc2l6ZS9wcmVjaXNpb24gWCAqIDEwKipZKGNtKSB0byAweFhZLiAgbW92ZXMgcG9pbnRlci4gKi8KLXN0YXRpYyB1X2ludDhfdAotcHJlY3NpemVfYXRvbihjb25zdCBjaGFyICoqc3RycHRyKSB7Ci0JdW5zaWduZWQgaW50IG12YWwgPSAwLCBjbXZhbCA9IDA7Ci0JdV9pbnQ4X3QgcmV0dmFsID0gMDsKLQljb25zdCBjaGFyICpjcDsKLQlpbnQgZXhwb25lbnQ7Ci0JaW50IG1hbnRpc3NhOwotCi0JY3AgPSAqc3RycHRyOwotCi0Jd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkKLQkJbXZhbCA9IG12YWwgKiAxMCArICgqY3ArKyAtICcwJyk7Ci0KLQlpZiAoKmNwID09ICcuJykgewkJLyogY2VudGltZXRlcnMgKi8KLQkJY3ArKzsKLQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgewotCQkJY212YWwgPSAoKmNwKysgLSAnMCcpICogMTA7Ci0JCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7Ci0JCQkJY212YWwgKz0gKCpjcCsrIC0gJzAnKTsKLQkJCX0KLQkJfQotCX0KLQljbXZhbCA9IChtdmFsICogMTAwKSArIGNtdmFsOwotCi0JZm9yIChleHBvbmVudCA9IDA7IGV4cG9uZW50IDwgOTsgZXhwb25lbnQrKykKLQkJaWYgKGNtdmFsIDwgcG93ZXJvZnRlbltleHBvbmVudCsxXSkKLQkJCWJyZWFrOwotCi0JbWFudGlzc2EgPSBjbXZhbCAvIHBvd2Vyb2Z0ZW5bZXhwb25lbnRdOwotCWlmIChtYW50aXNzYSA+IDkpCi0JCW1hbnRpc3NhID0gOTsKLQotCXJldHZhbCA9IChtYW50aXNzYSA8PCA0KSB8IGV4cG9uZW50OwotCi0JKnN0cnB0ciA9IGNwOwotCi0JcmV0dXJuIChyZXR2YWwpOwotfQotCi0vKiBjb252ZXJ0cyBhc2NpaSBsYXQvbG9uIHRvIHVuc2lnbmVkIGVuY29kZWQgMzItYml0IG51bWJlci4gIG1vdmVzIHBvaW50ZXIuICovCi1zdGF0aWMgdV9pbnQzMl90Ci1sYXRsb24ydWwoY29uc3QgY2hhciAqKmxhdGxvbnN0cnB0ciwgaW50ICp3aGljaCkgewotCWNvbnN0IGNoYXIgKmNwOwotCXVfaW50MzJfdCByZXR2YWw7Ci0JaW50IGRlZyA9IDAsIG1pbiA9IDAsIHNlY3MgPSAwLCBzZWNzZnJhYyA9IDA7Ci0KLQljcCA9ICpsYXRsb25zdHJwdHI7Ci0KLQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQotCQlkZWcgPSBkZWcgKiAxMCArICgqY3ArKyAtICcwJyk7Ci0KLQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQotCQljcCsrOwotCi0JaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSkKLQkJZ290byBmbmRoZW1pOwotCi0Jd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkKLQkJbWluID0gbWluICogMTAgKyAoKmNwKysgLSAnMCcpOwotCi0Jd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKLQkJY3ArKzsKLQotCWlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkpCi0JCWdvdG8gZm5kaGVtaTsKLQotCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCi0JCXNlY3MgPSBzZWNzICogMTAgKyAoKmNwKysgLSAnMCcpOwotCi0JaWYgKCpjcCA9PSAnLicpIHsJCS8qIGRlY2ltYWwgc2Vjb25kcyAqLwotCQljcCsrOwotCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7Ci0JCQlzZWNzZnJhYyA9ICgqY3ArKyAtICcwJykgKiAxMDA7Ci0JCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7Ci0JCQkJc2Vjc2ZyYWMgKz0gKCpjcCsrIC0gJzAnKSAqIDEwOwotCQkJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKLQkJCQkJc2Vjc2ZyYWMgKz0gKCpjcCsrIC0gJzAnKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQl3aGlsZSAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkJLyogaWYgYW55IHRyYWlsaW5nIGdhcmJhZ2UgKi8KLQkJY3ArKzsKLQotCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCi0JCWNwKys7Ci0KLSBmbmRoZW1pOgotCXN3aXRjaCAoKmNwKSB7Ci0JY2FzZSAnTic6IGNhc2UgJ24nOgotCWNhc2UgJ0UnOiBjYXNlICdlJzoKLQkJcmV0dmFsID0gKCh1bnNpZ25lZCkxPDwzMSkKLQkJCSsgKCgoKChkZWcgKiA2MCkgKyBtaW4pICogNjApICsgc2VjcykgKiAxMDAwKQotCQkJKyBzZWNzZnJhYzsKLQkJYnJlYWs7Ci0JY2FzZSAnUyc6IGNhc2UgJ3MnOgotCWNhc2UgJ1cnOiBjYXNlICd3JzoKLQkJcmV0dmFsID0gKCh1bnNpZ25lZCkxPDwzMSkKLQkJCS0gKCgoKChkZWcgKiA2MCkgKyBtaW4pICogNjApICsgc2VjcykgKiAxMDAwKQotCQkJLSBzZWNzZnJhYzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dmFsID0gMDsJLyogaW52YWxpZCB2YWx1ZSAtLSBpbmRpY2F0ZXMgZXJyb3IgKi8KLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoICgqY3ApIHsKLQljYXNlICdOJzogY2FzZSAnbic6Ci0JY2FzZSAnUyc6IGNhc2UgJ3MnOgotCQkqd2hpY2ggPSAxOwkvKiBsYXRpdHVkZSAqLwotCQlicmVhazsKLQljYXNlICdFJzogY2FzZSAnZSc6Ci0JY2FzZSAnVyc6IGNhc2UgJ3cnOgotCQkqd2hpY2ggPSAyOwkvKiBsb25naXR1ZGUgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKndoaWNoID0gMDsJLyogZXJyb3IgKi8KLQkJYnJlYWs7Ci0JfQotCi0JY3ArKzsJCQkvKiBza2lwIHRoZSBoZW1pc3BoZXJlICovCi0KLQl3aGlsZSAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkJLyogaWYgYW55IHRyYWlsaW5nIGdhcmJhZ2UgKi8KLQkJY3ArKzsKLQotCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCS8qIG1vdmUgdG8gbmV4dCBmaWVsZCAqLwotCQljcCsrOwotCi0JKmxhdGxvbnN0cnB0ciA9IGNwOwotCi0JcmV0dXJuIChyZXR2YWwpOwotfQotCi0vKiBjb252ZXJ0cyBhIHpvbmUgZmlsZSByZXByZXNlbnRhdGlvbiBpbiBhIHN0cmluZyB0byBhbiBSREFUQSBvbi10aGUtd2lyZQotICogcmVwcmVzZW50YXRpb24uICovCi1pbnQKLWxvY19hdG9uKGFzY2lpLCBiaW5hcnkpCi0JY29uc3QgY2hhciAqYXNjaWk7Ci0JdV9jaGFyICpiaW5hcnk7Ci17Ci0JY29uc3QgY2hhciAqY3AsICptYXhjcDsKLQl1X2NoYXIgKmJjcDsKLQotCXVfaW50MzJfdCBsYXRpdCA9IDAsIGxvbmdpdCA9IDAsIGFsdCA9IDA7Ci0JdV9pbnQzMl90IGxsdGVtcDEgPSAwLCBsbHRlbXAyID0gMDsKLQlpbnQgYWx0bWV0ZXJzID0gMCwgYWx0ZnJhYyA9IDAsIGFsdHNpZ24gPSAxOwotCXVfaW50OF90IGhwID0gMHgxNjsJLyogZGVmYXVsdCA9IDFlNiBjbSA9IDEwMDAwLjAwbSA9IDEwa20gKi8KLQl1X2ludDhfdCB2cCA9IDB4MTM7CS8qIGRlZmF1bHQgPSAxZTMgY20gPSAxMC4wMG0gKi8KLQl1X2ludDhfdCBzaXogPSAweDEyOwkvKiBkZWZhdWx0ID0gMWUyIGNtID0gMS4wMG0gKi8KLQlpbnQgd2hpY2gxID0gMCwgd2hpY2gyID0gMDsKLQotCWNwID0gYXNjaWk7Ci0JbWF4Y3AgPSBjcCArIHN0cmxlbihhc2NpaSk7Ci0KLQlsbHRlbXAxID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMSk7Ci0KLQlsbHRlbXAyID0gbGF0bG9uMnVsKCZjcCwgJndoaWNoMik7Ci0KLQlzd2l0Y2ggKHdoaWNoMSArIHdoaWNoMikgewotCWNhc2UgMzoJCQkvKiAxICsgMiwgdGhlIG9ubHkgdmFsaWQgY29tYmluYXRpb24gKi8KLQkJaWYgKCh3aGljaDEgPT0gMSkgJiYgKHdoaWNoMiA9PSAyKSkgeyAvKiBub3JtYWwgY2FzZSAqLwotCQkJbGF0aXQgPSBsbHRlbXAxOwotCQkJbG9uZ2l0ID0gbGx0ZW1wMjsKLQkJfSBlbHNlIGlmICgod2hpY2gxID09IDIpICYmICh3aGljaDIgPT0gMSkpIHsgLyogcmV2ZXJzZWQgKi8KLQkJCWxvbmdpdCA9IGxsdGVtcDE7Ci0JCQlsYXRpdCA9IGxsdGVtcDI7Ci0JCX0gZWxzZSB7CS8qIHNvbWUga2luZCBvZiBicm9rZW5uZXNzICovCi0JCQlyZXR1cm4gKDApOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CQkvKiB3ZSBkaWRuJ3QgZ2V0IG9uZSBvZiBlYWNoICovCi0JCXJldHVybiAoMCk7Ci0JfQotCi0JLyogYWx0aXR1ZGUgKi8KLQlpZiAoKmNwID09ICctJykgewotCQlhbHRzaWduID0gLTE7Ci0JCWNwKys7Ci0JfQotCi0JaWYgKCpjcCA9PSAnKycpCi0JCWNwKys7Ci0KLQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQotCQlhbHRtZXRlcnMgPSBhbHRtZXRlcnMgKiAxMCArICgqY3ArKyAtICcwJyk7Ci0KLQlpZiAoKmNwID09ICcuJykgewkJLyogZGVjaW1hbCBtZXRlcnMgKi8KLQkJY3ArKzsKLQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgewotCQkJYWx0ZnJhYyA9ICgqY3ArKyAtICcwJykgKiAxMDsKLQkJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKLQkJCQlhbHRmcmFjICs9ICgqY3ArKyAtICcwJyk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlhbHQgPSAoMTAwMDAwMDAgKyAoYWx0c2lnbiAqIChhbHRtZXRlcnMgKiAxMDAgKyBhbHRmcmFjKSkpOwotCi0Jd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKSAvKiBpZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0gKi8KLQkJY3ArKzsKLQotCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQotCQljcCsrOwotCi0JaWYgKGNwID49IG1heGNwKQotCQlnb3RvIGRlZmF1bHRzOwotCi0Jc2l6ID0gcHJlY3NpemVfYXRvbigmY3ApOwotCi0Jd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQkvKiBpZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0gKi8KLQkJY3ArKzsKLQotCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQotCQljcCsrOwotCi0JaWYgKGNwID49IG1heGNwKQotCQlnb3RvIGRlZmF1bHRzOwotCi0JaHAgPSBwcmVjc2l6ZV9hdG9uKCZjcCk7Ci0KLQl3aGlsZSAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpCS8qIGlmIHRyYWlsaW5nIGdhcmJhZ2Ugb3IgbSAqLwotCQljcCsrOwotCi0Jd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpCi0JCWNwKys7Ci0KLQlpZiAoY3AgPj0gbWF4Y3ApCi0JCWdvdG8gZGVmYXVsdHM7Ci0KLQl2cCA9IHByZWNzaXplX2F0b24oJmNwKTsKLQotIGRlZmF1bHRzOgotCi0JYmNwID0gYmluYXJ5OwotCSpiY3ArKyA9ICh1X2ludDhfdCkgMDsJLyogdmVyc2lvbiBieXRlICovCi0JKmJjcCsrID0gc2l6OwotCSpiY3ArKyA9IGhwOwotCSpiY3ArKyA9IHZwOwotCVBVVExPTkcobGF0aXQsYmNwKTsKLQlQVVRMT05HKGxvbmdpdCxiY3ApOwotCVBVVExPTkcoYWx0LGJjcCk7Ci0KLQlyZXR1cm4gKDE2KTsJCS8qIHNpemUgb2YgUlIgaW4gb2N0ZXRzICovCi19Ci0KLS8qIHRha2VzIGFuIG9uLXRoZS13aXJlIExPQyBSUiBhbmQgZm9ybWF0cyBpdCBpbiBhIGh1bWFuIHJlYWRhYmxlIGZvcm1hdC4gKi8KLWNvbnN0IGNoYXIgKgotbG9jX250b2EoYmluYXJ5LCBhc2NpaSkKLQljb25zdCB1X2NoYXIgKmJpbmFyeTsKLQljaGFyICphc2NpaTsKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqZXJyb3IgPSAiPyI7Ci0Jc3RhdGljIGNoYXIgdG1wYnVmW3NpemVvZgotIjEwMDAgNjAgNjAuMDAwIE4gMTAwMCA2MCA2MC4wMDAgVyAtMTIzNDU2NzguMDBtIDkwMDAwMDAwLjAwbSA5MDAwMDAwMC4wMG0gOTAwMDAwMDAuMDBtIl07Ci0JY29uc3QgdV9jaGFyICpjcCA9IGJpbmFyeTsKLQotCWludCBsYXRkZWcsIGxhdG1pbiwgbGF0c2VjLCBsYXRzZWNmcmFjOwotCWludCBsb25nZGVnLCBsb25nbWluLCBsb25nc2VjLCBsb25nc2VjZnJhYzsKLQljaGFyIG5vcnRoc291dGgsIGVhc3R3ZXN0OwotCWNvbnN0IGNoYXIgKmFsdHNpZ247Ci0JaW50IGFsdG1ldGVycywgYWx0ZnJhYzsKLQotCWNvbnN0IHVfaW50MzJfdCByZWZlcmVuY2VhbHQgPSAxMDAwMDAgKiAxMDA7Ci0KLQlpbnQzMl90IGxhdHZhbCwgbG9uZ3ZhbCwgYWx0dmFsOwotCXVfaW50MzJfdCB0ZW1wbDsKLQl1X2ludDhfdCBzaXpldmFsLCBocHZhbCwgdnB2YWwsIHZlcnNpb252YWw7Ci0KLQljaGFyICpzaXplc3RyLCAqaHBzdHIsICp2cHN0cjsKLQotCXZlcnNpb252YWwgPSAqY3ArKzsKLQotCWlmIChhc2NpaSA9PSBOVUxMKQotCQlhc2NpaSA9IHRtcGJ1ZjsKLQotCWlmICh2ZXJzaW9udmFsKSB7Ci0JCSh2b2lkKSBzcHJpbnRmKGFzY2lpLCAiOyBlcnJvcjogdW5rbm93biBMT0MgUlIgdmVyc2lvbiIpOwotCQlyZXR1cm4gKGFzY2lpKTsKLQl9Ci0KLQlzaXpldmFsID0gKmNwKys7Ci0KLQlocHZhbCA9ICpjcCsrOwotCXZwdmFsID0gKmNwKys7Ci0KLQlHRVRMT05HKHRlbXBsLCBjcCk7Ci0JbGF0dmFsID0gKHRlbXBsIC0gKCh1bnNpZ25lZCkxPDwzMSkpOwotCi0JR0VUTE9ORyh0ZW1wbCwgY3ApOwotCWxvbmd2YWwgPSAodGVtcGwgLSAoKHVuc2lnbmVkKTE8PDMxKSk7Ci0KLQlHRVRMT05HKHRlbXBsLCBjcCk7Ci0JaWYgKHRlbXBsIDwgcmVmZXJlbmNlYWx0KSB7IC8qIGJlbG93IFdHUyA4NCBzcGhlcm9pZCAqLwotCQlhbHR2YWwgPSByZWZlcmVuY2VhbHQgLSB0ZW1wbDsKLQkJYWx0c2lnbiA9ICItIjsKLQl9IGVsc2UgewotCQlhbHR2YWwgPSB0ZW1wbCAtIHJlZmVyZW5jZWFsdDsKLQkJYWx0c2lnbiA9ICIiOwotCX0KLQotCWlmIChsYXR2YWwgPCAwKSB7Ci0JCW5vcnRoc291dGggPSAnUyc7Ci0JCWxhdHZhbCA9IC1sYXR2YWw7Ci0JfSBlbHNlCi0JCW5vcnRoc291dGggPSAnTic7Ci0KLQlsYXRzZWNmcmFjID0gbGF0dmFsICUgMTAwMDsKLQlsYXR2YWwgPSBsYXR2YWwgLyAxMDAwOwotCWxhdHNlYyA9IGxhdHZhbCAlIDYwOwotCWxhdHZhbCA9IGxhdHZhbCAvIDYwOwotCWxhdG1pbiA9IGxhdHZhbCAlIDYwOwotCWxhdHZhbCA9IGxhdHZhbCAvIDYwOwotCWxhdGRlZyA9IGxhdHZhbDsKLQotCWlmIChsb25ndmFsIDwgMCkgewotCQllYXN0d2VzdCA9ICdXJzsKLQkJbG9uZ3ZhbCA9IC1sb25ndmFsOwotCX0gZWxzZQotCQllYXN0d2VzdCA9ICdFJzsKLQotCWxvbmdzZWNmcmFjID0gbG9uZ3ZhbCAlIDEwMDA7Ci0JbG9uZ3ZhbCA9IGxvbmd2YWwgLyAxMDAwOwotCWxvbmdzZWMgPSBsb25ndmFsICUgNjA7Ci0JbG9uZ3ZhbCA9IGxvbmd2YWwgLyA2MDsKLQlsb25nbWluID0gbG9uZ3ZhbCAlIDYwOwotCWxvbmd2YWwgPSBsb25ndmFsIC8gNjA7Ci0JbG9uZ2RlZyA9IGxvbmd2YWw7Ci0KLQlhbHRmcmFjID0gYWx0dmFsICUgMTAwOwotCWFsdG1ldGVycyA9IChhbHR2YWwgLyAxMDApOwotCi0Jc2l6ZXN0ciA9IHN0cmR1cChwcmVjc2l6ZV9udG9hKCh1X2ludDMyX3Qpc2l6ZXZhbCkpOwotCWhwc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EoKHVfaW50MzJfdClocHZhbCkpOwotCXZwc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EoKHVfaW50MzJfdCl2cHZhbCkpOwotCi0Jc3ByaW50Zihhc2NpaSwKLQkgICAgIiVkICUuMmQgJS4yZC4lLjNkICVjICVkICUuMmQgJS4yZC4lLjNkICVjICVzJWQuJS4yZG0gJXNtICVzbSAlc20iLAotCQlsYXRkZWcsIGxhdG1pbiwgbGF0c2VjLCBsYXRzZWNmcmFjLCBub3J0aHNvdXRoLAotCQlsb25nZGVnLCBsb25nbWluLCBsb25nc2VjLCBsb25nc2VjZnJhYywgZWFzdHdlc3QsCi0JCWFsdHNpZ24sIGFsdG1ldGVycywgYWx0ZnJhYywKLQkJKHNpemVzdHIgIT0gTlVMTCkgPyBzaXplc3RyIDogZXJyb3IsCi0JCShocHN0ciAhPSBOVUxMKSA/IGhwc3RyIDogZXJyb3IsCi0JCSh2cHN0ciAhPSBOVUxMKSA/IHZwc3RyIDogZXJyb3IpOwotCi0JaWYgKHNpemVzdHIgIT0gTlVMTCkKLQkJZnJlZShzaXplc3RyKTsKLQlpZiAoaHBzdHIgIT0gTlVMTCkKLQkJZnJlZShocHN0cik7Ci0JaWYgKHZwc3RyICE9IE5VTEwpCi0JCWZyZWUodnBzdHIpOwotCi0JcmV0dXJuIChhc2NpaSk7Ci19Ci0KLQotLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgRE5TIGhpZXJhcmNoeSBsZXZlbHMgaW4gdGhlIG5hbWUuICovCi1pbnQKLWRuX2NvdW50X2xhYmVscyhjb25zdCBjaGFyICpuYW1lKSB7Ci0JaW50IGksIGxlbiwgY291bnQ7Ci0KLQlsZW4gPSBzdHJsZW4obmFtZSk7Ci0JZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJLyogWFhYIG5lZWQgdG8gY2hlY2sgZm9yIFwuIG9yIHVzZSBuYW1lZCdzIG5sYWJlbHMoKS4gKi8KLQkJaWYgKG5hbWVbaV0gPT0gJy4nKQotCQkJY291bnQrKzsKLQl9Ci0KLQkvKiBkb24ndCBjb3VudCBpbml0aWFsIHdpbGRjYXJkICovCi0JaWYgKG5hbWVbMF0gPT0gJyonKQotCQlpZiAoY291bnQpCi0JCQljb3VudC0tOwotCi0JLyogZG9uJ3QgY291bnQgdGhlIG51bGwgbGFiZWwgZm9yIHJvb3QuICovCi0JLyogaWYgdGVybWluYXRpbmcgJy4nIG5vdCBmb3VuZCwgbXVzdCBhZGp1c3QgKi8KLQkvKiBjb3VudCB0byBpbmNsdWRlIGxhc3QgbGFiZWwgKi8KLQlpZiAobGVuID4gMCAmJiBuYW1lW2xlbi0xXSAhPSAnLicpCi0JCWNvdW50Kys7Ci0JcmV0dXJuIChjb3VudCk7Ci19Ci0KLQotLyoKLSAqIE1ha2UgZGF0ZXMgZXhwcmVzc2VkIGluIHNlY29uZHMtc2luY2UtSmFuLTEtMTk3MCBlYXN5IHRvIHJlYWQuCi0gKiBTSUcgcmVjb3JkcyBhcmUgcmVxdWlyZWQgdG8gYmUgcHJpbnRlZCBsaWtlIHRoaXMsIGJ5IHRoZSBTZWN1cmUgRE5TIFJGQy4KLSAqLwotY2hhciAqCi1wX3NlY3N0b2RhdGUgKHVfbG9uZyBzZWNzKSB7Ci0JLyogWFhYIG5vbnJlZW50cmFudCAqLwotCXN0YXRpYyBjaGFyIG91dHB1dFsxNV07CQkvKiBZWVlZTU1EREhITU1TUyBhbmQgbnVsbCAqLwotCXRpbWVfdCBteWNsb2NrID0gc2VjczsKLQlzdHJ1Y3QgdG0gKm15dGltZTsKLSNpZmRlZiBIQVZFX1RJTUVfUgotCXN0cnVjdCB0bSByZXM7Ci0KLQlteXRpbWUgPSBnbXRpbWVfcigmbXljbG9jaywgJnJlcyk7Ci0jZWxzZQotCW15dGltZSA9IGdtdGltZSgmbXljbG9jayk7Ci0jZW5kaWYKLQlteXRpbWUtPnRtX3llYXIgKz0gMTkwMDsKLQlteXRpbWUtPnRtX21vbiArPSAxOwotCXNwcmludGYob3V0cHV0LCAiJTA0ZCUwMmQlMDJkJTAyZCUwMmQlMDJkIiwKLQkJbXl0aW1lLT50bV95ZWFyLCBteXRpbWUtPnRtX21vbiwgbXl0aW1lLT50bV9tZGF5LAotCQlteXRpbWUtPnRtX2hvdXIsIG15dGltZS0+dG1fbWluLCBteXRpbWUtPnRtX3NlYyk7Ci0JcmV0dXJuIChvdXRwdXQpOwotfQotCi11X2ludDE2X3QKLXJlc19uYW1ldG9jbGFzcyhjb25zdCBjaGFyICpidWYsIGludCAqc3VjY2Vzc3ApIHsKLQl1bnNpZ25lZCBsb25nIHJlc3VsdDsKLQljaGFyICplbmRwdHI7Ci0JaW50IHN1Y2Nlc3M7Ci0KLQlyZXN1bHQgPSBzeW1fc3RvbihfX3BfY2xhc3Nfc3ltcywgYnVmLCAmc3VjY2Vzcyk7Ci0JaWYgKHN1Y2Nlc3MpCi0JCWdvdG8gZG9uZTsKLQotCWlmIChzdHJuY2FzZWNtcChidWYsICJDTEFTUyIsIDUpICE9IDAgfHwKLQkgICAgIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpYnVmWzVdKSkKLQkJZ290byBkb25lOwotCWVycm5vID0gMDsKLQlyZXN1bHQgPSBzdHJ0b3VsKGJ1ZiArIDUsICZlbmRwdHIsIDEwKTsKLQlpZiAoZXJybm8gPT0gMCAmJiAqZW5kcHRyID09ICdcMCcgJiYgcmVzdWx0IDw9IDB4ZmZmZlUpCi0JCXN1Y2Nlc3MgPSAxOwotIGRvbmU6Ci0JaWYgKHN1Y2Nlc3NwKQotCQkqc3VjY2Vzc3AgPSBzdWNjZXNzOwotCXJldHVybiAodV9pbnQxNl90KShyZXN1bHQpOwotfQotCi11X2ludDE2X3QKLXJlc19uYW1ldG90eXBlKGNvbnN0IGNoYXIgKmJ1ZiwgaW50ICpzdWNjZXNzcCkgewotCXVuc2lnbmVkIGxvbmcgcmVzdWx0OwotCWNoYXIgKmVuZHB0cjsKLQlpbnQgc3VjY2VzczsKLQotCXJlc3VsdCA9IHN5bV9zdG9uKF9fcF90eXBlX3N5bXMsIGJ1ZiwgJnN1Y2Nlc3MpOwotCWlmIChzdWNjZXNzKQotCQlnb3RvIGRvbmU7Ci0KLQlpZiAoc3RybmNhc2VjbXAoYnVmLCAidHlwZSIsIDQpICE9IDAgfHwKLQkgICAgIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpYnVmWzRdKSkKLQkJZ290byBkb25lOwotCWVycm5vID0gMDsKLQlyZXN1bHQgPSBzdHJ0b3VsKGJ1ZiArIDQsICZlbmRwdHIsIDEwKTsKLQlpZiAoZXJybm8gPT0gMCAmJiAqZW5kcHRyID09ICdcMCcgJiYgcmVzdWx0IDw9IDB4ZmZmZlUpCi0JCXN1Y2Nlc3MgPSAxOwotIGRvbmU6Ci0JaWYgKHN1Y2Nlc3NwKQotCQkqc3VjY2Vzc3AgPSBzdWNjZXNzOwotCXJldHVybiAodV9pbnQxNl90KShyZXN1bHQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19pbml0LmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2luaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ViNDEyYi4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2luaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDgxNiArMCwwIEBACi0vKgkkTmV0QlNEOiByZXNfaW5pdC5jLHYgMS44IDIwMDYvMDMvMTkgMDM6MTA6MDggY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk4OSwgMTk5MwotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAotICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLSAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAotICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAotICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCi0gKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLSAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCi0gKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX2luaXQuYwk4LjEgKEJlcmtlbGV5KSA2LzcvOTMiOwotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2luaXQuYyx2IDEuOS4yLjUuNC4yIDIwMDQvMDMvMTYgMTI6MzQ6MTggbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiByZXNfaW5pdC5jLHYgMS44IDIwMDYvMDMvMTkgMDM6MTA6MDggY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotCi0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgotI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLwotCi0jaWZuZGVmIE1JTgotI2RlZmluZQlNSU4oeCx5KQkoKHgpPCh5KT8oeCk6KHkpKQotI2VuZGlmCi0KLS8qIGVuc3VyZSB0aGF0IHNvY2thZGRyX2luNiBhbmQgSU42QUREUl9BTllfSU5JVCBhcmUgZGVjbGFyZWQgLyBkZWZpbmVkICovCi0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCi0jaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKLSNlbHNlCi0jaW5jbHVkZSA8cmVzb2x2Lmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCi0KLS8qIE9wdGlvbnMuICBTaG91bGQgYWxsIGJlIGxlZnQgYWxvbmUuICovCi0jaWZuZGVmIERFQlVHCi0jZGVmaW5lIERFQlVHCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgcmVzX3NldG9wdGlvbnMgX19QKChyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHNvcnRfbWFza1tdID0gIi8mIjsKLSNkZWZpbmUgSVNTT1JUTUFTSyhjaCkgKHN0cmNocihzb3J0X21hc2ssIGNoKSAhPSBOVUxMKQotc3RhdGljIHVfaW50MzJfdCBuZXRfbWFzayBfX1AoKHN0cnVjdCBpbl9hZGRyKSk7Ci0KLSNpZiAhZGVmaW5lZChpc2FzY2lpKQkvKiBYWFggLSBjb3VsZCBiZSBhIGZ1bmN0aW9uICovCi0jIGRlZmluZSBpc2FzY2lpKGMpICghKGMgJiAwMjAwKSkKLSNlbmRpZgotCi0vKgotICogUmVzb2x2ZXIgc3RhdGUgZGVmYXVsdCBzZXR0aW5ncy4KLSAqLwotCi0vKgotICogU2V0IHVwIGRlZmF1bHQgc2V0dGluZ3MuICBJZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGV4aXN0LCB0aGUgdmFsdWVzCi0gKiB0aGVyZSB3aWxsIGhhdmUgcHJlY2VkZW5jZS4gIE90aGVyd2lzZSwgdGhlIHNlcnZlciBhZGRyZXNzIGlzIHNldCB0bwotICogSU5BRERSX0FOWSBhbmQgdGhlIGRlZmF1bHQgZG9tYWluIG5hbWUgY29tZXMgZnJvbSB0aGUgZ2V0aG9zdG5hbWUoKS4KLSAqCi0gKiBBbiBpbnRlcnJpbSB2ZXJzaW9uIG9mIHRoaXMgY29kZSAoQklORCA0LjksIHByZS00LjRCU0QpIHVzZWQgMTI3LjAuMC4xCi0gKiByYXRoZXIgdGhhbiBJTkFERFJfQU5ZICgiMC4wLjAuMCIpIGFzIHRoZSBkZWZhdWx0IG5hbWUgc2VydmVyIGFkZHJlc3MKLSAqIHNpbmNlIGl0IHdhcyBub3RlZCB0aGF0IElOQUREUl9BTlkgYWN0dWFsbHkgbWVhbnQgYGB0aGUgZmlyc3QgaW50ZXJmYWNlCi0gKiB5b3UgImlmY29uZmlnIidkIGF0IGJvb3QgdGltZScnIGFuZCBpZiB0aGlzIHdhcyBhIFNMSVAgb3IgUFBQIGludGVyZmFjZSwKLSAqIGl0IGhhZCB0byBiZSAidXAiIGluIG9yZGVyIGZvciB5b3UgdG8gcmVhY2ggeW91ciBvd24gbmFtZSBzZXJ2ZXIuICBJdAotICogd2FzIGxhdGVyIGRlY2lkZWQgdGhhdCBzaW5jZSB0aGUgcmVjb21tZW5kZWQgcHJhY3RpY2UgaXMgdG8gYWx3YXlzCi0gKiBpbnN0YWxsIGxvY2FsIHN0YXRpYyByb3V0ZXMgdGhyb3VnaCAxMjcuMC4wLjEgZm9yIGFsbCB5b3VyIG5ldHdvcmsKLSAqIGludGVyZmFjZXMsIHRoYXQgd2UgY291bGQgc29sdmUgdGhpcyBwcm9ibGVtIHdpdGhvdXQgYSBjb2RlIGNoYW5nZS4KLSAqCi0gKiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIHNob3VsZCBhbHdheXMgYmUgdXNlZCwgc2luY2UgaXQgaXMgdGhlIG9ubHkgd2F5Ci0gKiB0byBzcGVjaWZ5IGEgZGVmYXVsdCBkb21haW4uICBJZiB5b3UgYXJlIHJ1bm5pbmcgYSBzZXJ2ZXIgb24geW91ciBsb2NhbAotICogbWFjaGluZSwgeW91IHNob3VsZCBzYXkgIm5hbWVzZXJ2ZXIgMC4wLjAuMCIgb3IgIm5hbWVzZXJ2ZXIgMTI3LjAuMC4xIgotICogaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAqCi0gKiBSZXR1cm4gMCBpZiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LCAtMSBvbiBlcnJvcgotICovCi1pbnQKLXJlc19uaW5pdChyZXNfc3RhdGUgc3RhdHApIHsKLQlleHRlcm4gaW50IF9fcmVzX3Zpbml0KHJlc19zdGF0ZSwgaW50KTsKLQotCXJldHVybiAoX19yZXNfdmluaXQoc3RhdHAsIDApKTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgcmVhY2hhYmxlIGJ5IHJlc19kYXRhLmMgYnV0IG5vdCBwdWJsaWNseS4gKi8KLWludAotX19yZXNfdmluaXQocmVzX3N0YXRlIHN0YXRwLCBpbnQgcHJlaW5pdCkgewotCXJlZ2lzdGVyIEZJTEUgKmZwOwotCXJlZ2lzdGVyIGNoYXIgKmNwLCAqKnBwOwotCXJlZ2lzdGVyIGludCBuOwotCWNoYXIgYnVmW0JVRlNJWl07Ci0JaW50IG5zZXJ2ID0gMDsgICAgLyogbnVtYmVyIG9mIG5hbWVzZXJ2ZXIgcmVjb3JkcyByZWFkIGZyb20gZmlsZSAqLwotCWludCBoYXZlZW52ID0gMDsKLQlpbnQgaGF2ZXNlYXJjaCA9IDA7Ci0JaW50IG5zb3J0ID0gMDsKLQljaGFyICpuZXQ7Ci0JaW50IGRvdHM7Ci0JdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIHVbMl07Ci0KLSAgICAgICAgaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19JTklUKSAhPSAwVSkKLSAgICAgICAgICAgICAgICByZXNfbmRlc3Ryb3koc3RhdHApOwotCi0JaWYgKCFwcmVpbml0KSB7Ci0JCXN0YXRwLT5yZXRyYW5zID0gUkVTX1RJTUVPVVQ7Ci0JCXN0YXRwLT5yZXRyeSA9IFJFU19ERkxSRVRSWTsKLQkJc3RhdHAtPm9wdGlvbnMgPSBSRVNfREVGQVVMVDsKLQkJc3RhdHAtPmlkID0gcmVzX3JhbmRvbWlkKCk7Ci0JfQotCi0JbWVtc2V0KHUsIDAsIHNpemVvZih1KSk7Ci0jaWZkZWYgVVNFTE9PUEJBQ0sKLQl1W25zZXJ2XS5zaW4uc2luX2FkZHIgPSBpbmV0X21ha2VhZGRyKElOX0xPT1BCQUNLTkVULCAxKTsKLSNlbHNlCi0JdVtuc2Vydl0uc2luLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7Ci0jZW5kaWYKLQl1W25zZXJ2XS5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JdVtuc2Vydl0uc2luLnNpbl9wb3J0ID0gaHRvbnMoTkFNRVNFUlZFUl9QT1JUKTsKLSNpZmRlZiBIQVZFX1NBX0xFTgotCXVbbnNlcnZdLnNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQluc2VydisrOwotI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCi0jaWZkZWYgVVNFTE9PUEJBQ0sKLQl1W25zZXJ2XS5zaW42LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7Ci0jZWxzZQotCXVbbnNlcnZdLnNpbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7Ci0jZW5kaWYKLQl1W25zZXJ2XS5zaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0JdVtuc2Vydl0uc2luNi5zaW42X3BvcnQgPSBodG9ucyhOQU1FU0VSVkVSX1BPUlQpOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0JdVtuc2Vydl0uc2luNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCW5zZXJ2Kys7Ci0jZW5kaWYKLQlzdGF0cC0+bnNjb3VudCA9IDA7Ci0Jc3RhdHAtPm5kb3RzID0gMTsKLQlzdGF0cC0+cGZjb2RlID0gMDsKLQlzdGF0cC0+X3Zjc29jayA9IC0xOwotCXN0YXRwLT5fZmxhZ3MgPSAwOwotCXN0YXRwLT5xaG9vayA9IE5VTEw7Ci0Jc3RhdHAtPnJob29rID0gTlVMTDsKLQlzdGF0cC0+X3UuX2V4dC5uc2NvdW50ID0gMDsKLQlzdGF0cC0+X3UuX2V4dC5leHQgPSBtYWxsb2Moc2l6ZW9mKCpzdGF0cC0+X3UuX2V4dC5leHQpKTsKLQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0ICE9IE5VTEwpIHsKLQkgICAgICAgIG1lbXNldChzdGF0cC0+X3UuX2V4dC5leHQsIDAsIHNpemVvZigqc3RhdHAtPl91Ll9leHQuZXh0KSk7Ci0JCXN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1swXS5zaW4gPSBzdGF0cC0+bnNhZGRyOwotCQlzdHJjcHkoc3RhdHAtPl91Ll9leHQuZXh0LT5uc3VmZml4LCAiaXA2LmFycGEiKTsKLQkJc3RyY3B5KHN0YXRwLT5fdS5fZXh0LmV4dC0+bnN1ZmZpeDIsICJpcDYuaW50Iik7Ci0JfQotCXN0YXRwLT5uc29ydCA9IDA7Ci0JcmVzX3NldHNlcnZlcnMoc3RhdHAsIHUsIG5zZXJ2KTsKLQotI2lmIDAgLyogSUdOT1JFIFRIRSBFTlZJUk9OTUVOVCAqLwotCS8qIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGxvY2FsIGRvbWFpbiBkZWZpbml0aW9uICovCi0JaWYgKChjcCA9IGdldGVudigiTE9DQUxET01BSU4iKSkgIT0gTlVMTCkgewotCQkodm9pZClzdHJuY3B5KHN0YXRwLT5kZWZkbmFtZSwgY3AsIHNpemVvZihzdGF0cC0+ZGVmZG5hbWUpIC0gMSk7Ci0JCXN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKLQkJaGF2ZWVudisrOwotCi0JCS8qCi0JCSAqIFNldCBzZWFyY2ggbGlzdCB0byBiZSBibGFuay1zZXBhcmF0ZWQgc3RyaW5ncwotCQkgKiBmcm9tIHJlc3Qgb2YgZW52IHZhbHVlLiAgUGVybWl0cyB1c2VycyBvZiBMT0NBTERPTUFJTgotCQkgKiB0byBzdGlsbCBoYXZlIGEgc2VhcmNoIGxpc3QsIGFuZCBhbnlvbmUgdG8gc2V0IHRoZQotCQkgKiBvbmUgdGhhdCB0aGV5IHdhbnQgdG8gdXNlIGFzIGFuIGluZGl2aWR1YWwgKGV2ZW4gbW9yZQotCQkgKiBpbXBvcnRhbnQgbm93IHRoYXQgdGhlIHJmYzE1MzUgc3R1ZmYgcmVzdHJpY3RzIHNlYXJjaGVzKQotCQkgKi8KLQkJY3AgPSBzdGF0cC0+ZGVmZG5hbWU7Ci0JCXBwID0gc3RhdHAtPmRuc3JjaDsKLQkJKnBwKysgPSBjcDsKLQkJZm9yIChuID0gMDsgKmNwICYmIHBwIDwgc3RhdHAtPmRuc3JjaCArIE1BWEROU1JDSDsgY3ArKykgewotCQkJaWYgKCpjcCA9PSAnXG4nKQkvKiBzaWxseSBiYWNrd2FyZHMgY29tcGF0ICovCi0JCQkJYnJlYWs7Ci0JCQllbHNlIGlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7Ci0JCQkJKmNwID0gMDsKLQkJCQluID0gMTsKLQkJCX0gZWxzZSBpZiAobikgewotCQkJCSpwcCsrID0gY3A7Ci0JCQkJbiA9IDA7Ci0JCQkJaGF2ZXNlYXJjaCA9IDE7Ci0JCQl9Ci0JCX0KLQkJLyogbnVsbCB0ZXJtaW5hdGUgbGFzdCBkb21haW4gaWYgdGhlcmUgYXJlIGV4Y2VzcyAqLwotCQl3aGlsZSAoKmNwICE9ICdcMCcgJiYgKmNwICE9ICcgJyAmJiAqY3AgIT0gJ1x0JyAmJiAqY3AgIT0gJ1xuJykKLQkJCWNwKys7Ci0JCSpjcCA9ICdcMCc7Ci0JCSpwcCsrID0gMDsKLQl9Ci0JaWYgKG5zZXJ2ID4gMCkKLQkJc3RhdHAtPm5zY291bnQgPSBuc2VydjsKLSNlbmRpZgotCi0jaWZuZGVmIEFORFJPSURfQ0hBTkdFUyAvKiAhQU5EUk9JRF9DSEFOR0VTIC0gSUdOT1JFIHJlc29sdi5jb25mIGluIEFuZHJvaWQgKi8KLSNkZWZpbmUJTUFUQ0gobGluZSwgbmFtZSkgXAotCSghc3RybmNtcChsaW5lLCBuYW1lLCBzaXplb2YobmFtZSkgLSAxKSAmJiBcCi0JKGxpbmVbc2l6ZW9mKG5hbWUpIC0gMV0gPT0gJyAnIHx8IFwKLQkgbGluZVtzaXplb2YobmFtZSkgLSAxXSA9PSAnXHQnKSkKLQotCW5zZXJ2ID0gMDsKLQlpZiAoKGZwID0gZm9wZW4oX1BBVEhfUkVTQ09ORiwgInIiKSkgIT0gTlVMTCkgewotCSAgICAvKiByZWFkIHRoZSBjb25maWcgZmlsZSAqLwotCSAgICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICE9IE5VTEwpIHsKLQkJLyogc2tpcCBjb21tZW50cyAqLwotCQlpZiAoKmJ1ZiA9PSAnOycgfHwgKmJ1ZiA9PSAnIycpCi0JCQljb250aW51ZTsKLQkJLyogcmVhZCBkZWZhdWx0IGRvbWFpbiBuYW1lICovCi0JCWlmIChNQVRDSChidWYsICJkb21haW4iKSkgewotCQkgICAgaWYgKGhhdmVlbnYpCS8qIHNraXAgaWYgaGF2ZSBmcm9tIGVudmlyb24gKi8KLQkJCSAgICBjb250aW51ZTsKLQkJICAgIGNwID0gYnVmICsgc2l6ZW9mKCJkb21haW4iKSAtIDE7Ci0JCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKLQkJCSAgICBjcCsrOwotCQkgICAgaWYgKCgqY3AgPT0gJ1wwJykgfHwgKCpjcCA9PSAnXG4nKSkKLQkJCSAgICBjb250aW51ZTsKLQkJICAgIHN0cm5jcHkoc3RhdHAtPmRlZmRuYW1lLCBjcCwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxKTsKLQkJICAgIHN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKLQkJICAgIGlmICgoY3AgPSBzdHJwYnJrKHN0YXRwLT5kZWZkbmFtZSwgIiBcdFxuIikpICE9IE5VTEwpCi0JCQkgICAgKmNwID0gJ1wwJzsKLQkJICAgIGhhdmVzZWFyY2ggPSAwOwotCQkgICAgY29udGludWU7Ci0JCX0KLQkJLyogc2V0IHNlYXJjaCBsaXN0ICovCi0JCWlmIChNQVRDSChidWYsICJzZWFyY2giKSkgewotCQkgICAgaWYgKGhhdmVlbnYpCS8qIHNraXAgaWYgaGF2ZSBmcm9tIGVudmlyb24gKi8KLQkJCSAgICBjb250aW51ZTsKLQkJICAgIGNwID0gYnVmICsgc2l6ZW9mKCJzZWFyY2giKSAtIDE7Ci0JCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKLQkJCSAgICBjcCsrOwotCQkgICAgaWYgKCgqY3AgPT0gJ1wwJykgfHwgKCpjcCA9PSAnXG4nKSkKLQkJCSAgICBjb250aW51ZTsKLQkJICAgIHN0cm5jcHkoc3RhdHAtPmRlZmRuYW1lLCBjcCwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxKTsKLQkJICAgIHN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKLQkJICAgIGlmICgoY3AgPSBzdHJjaHIoc3RhdHAtPmRlZmRuYW1lLCAnXG4nKSkgIT0gTlVMTCkKLQkJCSAgICAqY3AgPSAnXDAnOwotCQkgICAgLyoKLQkJICAgICAqIFNldCBzZWFyY2ggbGlzdCB0byBiZSBibGFuay1zZXBhcmF0ZWQgc3RyaW5ncwotCQkgICAgICogb24gcmVzdCBvZiBsaW5lLgotCQkgICAgICovCi0JCSAgICBjcCA9IHN0YXRwLT5kZWZkbmFtZTsKLQkJICAgIHBwID0gc3RhdHAtPmRuc3JjaDsKLQkJICAgICpwcCsrID0gY3A7Ci0JCSAgICBmb3IgKG4gPSAwOyAqY3AgJiYgcHAgPCBzdGF0cC0+ZG5zcmNoICsgTUFYRE5TUkNIOyBjcCsrKSB7Ci0JCQkgICAgaWYgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpIHsKLQkJCQkgICAgKmNwID0gMDsKLQkJCQkgICAgbiA9IDE7Ci0JCQkgICAgfSBlbHNlIGlmIChuKSB7Ci0JCQkJICAgICpwcCsrID0gY3A7Ci0JCQkJICAgIG4gPSAwOwotCQkJICAgIH0KLQkJICAgIH0KLQkJICAgIC8qIG51bGwgdGVybWluYXRlIGxhc3QgZG9tYWluIGlmIHRoZXJlIGFyZSBleGNlc3MgKi8KLQkJICAgIHdoaWxlICgqY3AgIT0gJ1wwJyAmJiAqY3AgIT0gJyAnICYmICpjcCAhPSAnXHQnKQotCQkJICAgIGNwKys7Ci0JCSAgICAqY3AgPSAnXDAnOwotCQkgICAgKnBwKysgPSAwOwotCQkgICAgaGF2ZXNlYXJjaCA9IDE7Ci0JCSAgICBjb250aW51ZTsKLQkJfQotCQkvKiByZWFkIG5hbWVzZXJ2ZXJzIHRvIHF1ZXJ5ICovCi0JCWlmIChNQVRDSChidWYsICJuYW1lc2VydmVyIikgJiYgbnNlcnYgPCBNQVhOUykgewotCQkgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWk7Ci0JCSAgICBjaGFyIHNidWZbTklfTUFYU0VSVl07Ci0JCSAgICBjb25zdCBzaXplX3QgbWluc2l6ID0KLQkJICAgICAgICBzaXplb2Yoc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzWzBdKTsKLQotCQkgICAgY3AgPSBidWYgKyBzaXplb2YoIm5hbWVzZXJ2ZXIiKSAtIDE7Ci0JCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKLQkJCWNwKys7Ci0JCSAgICBjcFtzdHJjc3BuKGNwLCAiOyMgXHRcbiIpXSA9ICdcMCc7Ci0JCSAgICBpZiAoKCpjcCAhPSAnXDAnKSAmJiAoKmNwICE9ICdcbicpKSB7Ci0JCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKLQkJCWhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKLQkJCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsJLypkdW1teSovCi0JCQloaW50cy5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUOwotCQkJc3ByaW50ZihzYnVmLCAiJXUiLCBOQU1FU0VSVkVSX1BPUlQpOwotCQkJaWYgKGdldGFkZHJpbmZvKGNwLCBzYnVmLCAmaGludHMsICZhaSkgPT0gMCAmJgotCQkJICAgIGFpLT5haV9hZGRybGVuIDw9IG1pbnNpeikgewotCQkJICAgIGlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkgewotCQkJCW1lbWNweSgmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW25zZXJ2XSwKLQkJCQkgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKLQkJCSAgICB9Ci0JCQkgICAgaWYgKGFpLT5haV9hZGRybGVuIDw9Ci0JCQkgICAgICAgIHNpemVvZihzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdKSkgewotCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKLQkJCQkgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKLQkJCSAgICB9IGVsc2UKLQkJCQlzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSAwOwotCQkJICAgIGZyZWVhZGRyaW5mbyhhaSk7Ci0JCQkgICAgbnNlcnYrKzsKLQkJCX0KLQkJICAgIH0KLQkJICAgIGNvbnRpbnVlOwotCQl9Ci0JCWlmIChNQVRDSChidWYsICJzb3J0bGlzdCIpKSB7Ci0JCSAgICBzdHJ1Y3QgaW5fYWRkciBhOwotCi0JCSAgICBjcCA9IGJ1ZiArIHNpemVvZigic29ydGxpc3QiKSAtIDE7Ci0JCSAgICB3aGlsZSAobnNvcnQgPCBNQVhSRVNPTFZTT1JUKSB7Ci0JCQl3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKLQkJCSAgICBjcCsrOwotCQkJaWYgKCpjcCA9PSAnXDAnIHx8ICpjcCA9PSAnXG4nIHx8ICpjcCA9PSAnOycpCi0JCQkgICAgYnJlYWs7Ci0JCQluZXQgPSBjcDsKLQkJCXdoaWxlICgqY3AgJiYgIUlTU09SVE1BU0soKmNwKSAmJiAqY3AgIT0gJzsnICYmCi0JCQkgICAgICAgaXNhc2NpaSgqY3ApICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCi0JCQkJY3ArKzsKLQkJCW4gPSAqY3A7Ci0JCQkqY3AgPSAwOwotCQkJaWYgKGluZXRfYXRvbihuZXQsICZhKSkgewotCQkJICAgIHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLmFkZHIgPSBhOwotCQkJICAgIGlmIChJU1NPUlRNQVNLKG4pKSB7Ci0JCQkJKmNwKysgPSBuOwotCQkJCW5ldCA9IGNwOwotCQkJCXdoaWxlICgqY3AgJiYgKmNwICE9ICc7JyAmJgotCQkJCQlpc2FzY2lpKCpjcCkgJiYKLQkJCQkJIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKLQkJCQkgICAgY3ArKzsKLQkJCQluID0gKmNwOwotCQkJCSpjcCA9IDA7Ci0JCQkJaWYgKGluZXRfYXRvbihuZXQsICZhKSkgewotCQkJCSAgICBzdGF0cC0+c29ydF9saXN0W25zb3J0XS5tYXNrID0gYS5zX2FkZHI7Ci0JCQkJfSBlbHNlIHsKLQkJCQkgICAgc3RhdHAtPnNvcnRfbGlzdFtuc29ydF0ubWFzayA9Ci0JCQkJCW5ldF9tYXNrKHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLmFkZHIpOwotCQkJCX0KLQkJCSAgICB9IGVsc2UgewotCQkJCXN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLm1hc2sgPQotCQkJCSAgICBuZXRfbWFzayhzdGF0cC0+c29ydF9saXN0W25zb3J0XS5hZGRyKTsKLQkJCSAgICB9Ci0JCQkgICAgbnNvcnQrKzsKLQkJCX0KLQkJCSpjcCA9IG47Ci0JCSAgICB9Ci0JCSAgICBjb250aW51ZTsKLQkJfQotCQlpZiAoTUFUQ0goYnVmLCAib3B0aW9ucyIpKSB7Ci0JCSAgICByZXNfc2V0b3B0aW9ucyhzdGF0cCwgYnVmICsgc2l6ZW9mKCJvcHRpb25zIikgLSAxLCAiY29uZiIpOwotCQkgICAgY29udGludWU7Ci0JCX0KLQkgICAgfQotCSAgICBpZiAobnNlcnYgPiAwKQotCQlzdGF0cC0+bnNjb3VudCA9IG5zZXJ2OwotCSAgICBzdGF0cC0+bnNvcnQgPSBuc29ydDsKLQkgICAgKHZvaWQpIGZjbG9zZShmcCk7Ci0JfQotI2VuZGlmIC8qICFBTkRST0lEX0NIQU5HRVMgKi8KLS8qCi0gKiBMYXN0IGNoYW5jZSB0byBnZXQgYSBuYW1lc2VydmVyLiAgVGhpcyBzaG91bGQgbm90IG5vcm1hbGx5Ci0gKiBiZSBuZWNlc3NhcnkKLSAqLwotI2lmZGVmIE5PX1JFU09MVl9DT05GCi0JaWYobnNlcnYgPT0gMCkKLQkJbnNlcnYgPSBnZXRfbmFtZXNlcnZlcnMoc3RhdHApOwotI2VuZGlmCi0KLQlpZiAoc3RhdHAtPmRlZmRuYW1lWzBdID09IDAgJiYKLQkgICAgZ2V0aG9zdG5hbWUoYnVmLCBzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDEpID09IDAgJiYKLQkgICAgKGNwID0gc3RyY2hyKGJ1ZiwgJy4nKSkgIT0gTlVMTCkKLQkJc3RyY3B5KHN0YXRwLT5kZWZkbmFtZSwgY3AgKyAxKTsKLQotCS8qIGZpbmQgY29tcG9uZW50cyBvZiBsb2NhbCBkb21haW4gdGhhdCBtaWdodCBiZSBzZWFyY2hlZCAqLwotCWlmIChoYXZlc2VhcmNoID09IDApIHsKLQkJcHAgPSBzdGF0cC0+ZG5zcmNoOwotCQkqcHArKyA9IHN0YXRwLT5kZWZkbmFtZTsKLQkJKnBwID0gTlVMTDsKLQotCQlkb3RzID0gMDsKLQkJZm9yIChjcCA9IHN0YXRwLT5kZWZkbmFtZTsgKmNwOyBjcCsrKQotCQkJZG90cyArPSAoKmNwID09ICcuJyk7Ci0KLQkJY3AgPSBzdGF0cC0+ZGVmZG5hbWU7Ci0JCXdoaWxlIChwcCA8IHN0YXRwLT5kbnNyY2ggKyBNQVhERkxTUkNIKSB7Ci0JCQlpZiAoZG90cyA8IExPQ0FMRE9NQUlOUEFSVFMpCi0JCQkJYnJlYWs7Ci0JCQljcCA9IHN0cmNocihjcCwgJy4nKSArIDE7ICAgIC8qIHdlIGtub3cgdGhlcmUgaXMgb25lICovCi0JCQkqcHArKyA9IGNwOwotCQkJZG90cy0tOwotCQl9Ci0JCSpwcCA9IE5VTEw7Ci0jaWZkZWYgREVCVUcKLQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB7Ci0JCQlwcmludGYoIjs7IHJlc19pbml0KCkuLi4gZGVmYXVsdCBkbnNyY2ggbGlzdDpcbiIpOwotCQkJZm9yIChwcCA9IHN0YXRwLT5kbnNyY2g7ICpwcDsgcHArKykKLQkJCQlwcmludGYoIjs7XHQlc1xuIiwgKnBwKTsKLQkJCXByaW50ZigiOztcdC4uRU5ELi5cbiIpOwotCQl9Ci0jZW5kaWYKLQl9Ci0KLQlpZiAoKGNwID0gZ2V0ZW52KCJSRVNfT1BUSU9OUyIpKSAhPSBOVUxMKQotCQlyZXNfc2V0b3B0aW9ucyhzdGF0cCwgY3AsICJlbnYiKTsKLQlpZiAobnNlcnYgPiAwKSB7Ci0JCXN0YXRwLT5uc2NvdW50ID0gbnNlcnY7Ci0JCXN0YXRwLT5vcHRpb25zIHw9IFJFU19JTklUOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgdm9pZAotcmVzX3NldG9wdGlvbnMocmVzX3N0YXRlIHN0YXRwLCBjb25zdCBjaGFyICpvcHRpb25zLCBjb25zdCBjaGFyICpzb3VyY2UpCi17Ci0JY29uc3QgY2hhciAqY3AgPSBvcHRpb25zOwotCWludCBpOwotCXN0cnVjdCBfX3Jlc19zdGF0ZV9leHQgKmV4dCA9IHN0YXRwLT5fdS5fZXh0LmV4dDsKLQotI2lmZGVmIERFQlVHCi0JaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQotCQlwcmludGYoIjs7IHJlc19zZXRvcHRpb25zKFwiJXNcIiwgXCIlc1wiKS4uLlxuIiwKLQkJICAgICAgIG9wdGlvbnMsIHNvdXJjZSk7Ci0jZW5kaWYKLQl3aGlsZSAoKmNwKSB7Ci0JCS8qIHNraXAgbGVhZGluZyBhbmQgaW5uZXIgcnVucyBvZiBzcGFjZXMgKi8KLQkJd2hpbGUgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpCi0JCQljcCsrOwotCQkvKiBzZWFyY2ggZm9yIGFuZCBwcm9jZXNzIGluZGl2aWR1YWwgb3B0aW9ucyAqLwotCQlpZiAoIXN0cm5jbXAoY3AsICJuZG90czoiLCBzaXplb2YoIm5kb3RzOiIpIC0gMSkpIHsKLQkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJuZG90czoiKSAtIDEpOwotCQkJaWYgKGkgPD0gUkVTX01BWE5ET1RTKQotCQkJCXN0YXRwLT5uZG90cyA9IGk7Ci0JCQllbHNlCi0JCQkJc3RhdHAtPm5kb3RzID0gUkVTX01BWE5ET1RTOwotI2lmZGVmIERFQlVHCi0JCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCQkJcHJpbnRmKCI7O1x0bmRvdHM9JWRcbiIsIHN0YXRwLT5uZG90cyk7Ci0jZW5kaWYKLQkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgInRpbWVvdXQ6Iiwgc2l6ZW9mKCJ0aW1lb3V0OiIpIC0gMSkpIHsKLQkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJ0aW1lb3V0OiIpIC0gMSk7Ci0JCQlpZiAoaSA8PSBSRVNfTUFYUkVUUkFOUykKLQkJCQlzdGF0cC0+cmV0cmFucyA9IGk7Ci0JCQllbHNlCi0JCQkJc3RhdHAtPnJldHJhbnMgPSBSRVNfTUFYUkVUUkFOUzsKLSNpZmRlZiBERUJVRwotCQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQotCQkJCXByaW50ZigiOztcdHRpbWVvdXQ9JWRcbiIsIHN0YXRwLT5yZXRyYW5zKTsKLSNlbmRpZgotCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiYXR0ZW1wdHM6Iiwgc2l6ZW9mKCJhdHRlbXB0czoiKSAtIDEpKXsKLQkJCWkgPSBhdG9pKGNwICsgc2l6ZW9mKCJhdHRlbXB0czoiKSAtIDEpOwotCQkJaWYgKGkgPD0gUkVTX01BWFJFVFJZKQotCQkJCXN0YXRwLT5yZXRyeSA9IGk7Ci0JCQllbHNlCi0JCQkJc3RhdHAtPnJldHJ5ID0gUkVTX01BWFJFVFJZOwotI2lmZGVmIERFQlVHCi0JCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCQkJcHJpbnRmKCI7O1x0YXR0ZW1wdHM9JWRcbiIsIHN0YXRwLT5yZXRyeSk7Ci0jZW5kaWYKLQkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgImRlYnVnIiwgc2l6ZW9mKCJkZWJ1ZyIpIC0gMSkpIHsKLSNpZmRlZiBERUJVRwotCQkJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpKSB7Ci0JCQkJcHJpbnRmKCI7OyByZXNfc2V0b3B0aW9ucyhcIiVzXCIsIFwiJXNcIikuLlxuIiwKLQkJCQkgICAgICAgb3B0aW9ucywgc291cmNlKTsKLQkJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfREVCVUc7Ci0JCQl9Ci0JCQlwcmludGYoIjs7XHRkZWJ1Z1xuIik7Ci0jZW5kaWYKLQkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgIm5vX3RsZF9xdWVyeSIsCi0JCQkJICAgIHNpemVvZigibm9fdGxkX3F1ZXJ5IikgLSAxKSB8fAotCQkJICAgIXN0cm5jbXAoY3AsICJuby10bGQtcXVlcnkiLAotCQkJCSAgICBzaXplb2YoIm5vLXRsZC1xdWVyeSIpIC0gMSkpIHsKLQkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19OT1RMRFFVRVJZOwotCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiaW5ldDYiLCBzaXplb2YoImluZXQ2IikgLSAxKSkgewotCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX1VTRV9JTkVUNjsKLQkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgInJvdGF0ZSIsIHNpemVvZigicm90YXRlIikgLSAxKSkgewotCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX1JPVEFURTsKLQkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgIm5vLWNoZWNrLW5hbWVzIiwKLQkJCQkgICAgc2l6ZW9mKCJuby1jaGVjay1uYW1lcyIpIC0gMSkpIHsKLQkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19OT0NIRUNLTkFNRTsKLQkJfQotI2lmZGVmIFJFU19VU0VfRUROUzAKLQkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJlZG5zMCIsIHNpemVvZigiZWRuczAiKSAtIDEpKSB7Ci0JCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfVVNFX0VETlMwOwotCQl9Ci0jZW5kaWYKLQkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJkbmFtZSIsIHNpemVvZigiZG5hbWUiKSAtIDEpKSB7Ci0JCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfVVNFX0ROQU1FOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJuY21wKGNwLCAibmliYmxlOiIsIHNpemVvZigibmliYmxlOiIpIC0gMSkpIHsKLQkJCWlmIChleHQgPT0gTlVMTCkKLQkJCQlnb3RvIHNraXA7Ci0JCQljcCArPSBzaXplb2YoIm5pYmJsZToiKSAtIDE7Ci0JCQlpID0gTUlOKHN0cmNzcG4oY3AsICIgXHQiKSwgc2l6ZW9mKGV4dC0+bnN1ZmZpeCkgLSAxKTsKLQkJCXN0cm5jcHkoZXh0LT5uc3VmZml4LCBjcCwgKHNpemVfdClpKTsKLQkJCWV4dC0+bnN1ZmZpeFtpXSA9ICdcMCc7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJuaWJibGUyOiIsIHNpemVvZigibmliYmxlMjoiKSAtIDEpKSB7Ci0JCQlpZiAoZXh0ID09IE5VTEwpCi0JCQkJZ290byBza2lwOwotCQkJY3AgKz0gc2l6ZW9mKCJuaWJibGUyOiIpIC0gMTsKLQkJCWkgPSBNSU4oc3RyY3NwbihjcCwgIiBcdCIpLCBzaXplb2YoZXh0LT5uc3VmZml4MikgLSAxKTsKLQkJCXN0cm5jcHkoZXh0LT5uc3VmZml4MiwgY3AsIChzaXplX3QpaSk7Ci0JCQlleHQtPm5zdWZmaXgyW2ldID0gJ1wwJzsKLQkJfQotCQllbHNlIGlmICghc3RybmNtcChjcCwgInY2cmV2bW9kZToiLCBzaXplb2YoInY2cmV2bW9kZToiKSAtIDEpKSB7Ci0JCQljcCArPSBzaXplb2YoInY2cmV2bW9kZToiKSAtIDE7Ci0JCQkvKiAibmliYmxlIiBhbmQgImJpdHN0cmluZyIgdXNlZCB0byBiZSB2YWxpZCAqLwotCQkJaWYgKCFzdHJuY21wKGNwLCAic2luZ2xlIiwgc2l6ZW9mKCJzaW5nbGUiKSAtIDEpKSB7Ci0JCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX05PX05JQkJMRTI7Ci0JCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiYm90aCIsIHNpemVvZigiYm90aCIpIC0gMSkpIHsKLQkJCQlzdGF0cC0+b3B0aW9ucyAmPQotCQkJCQkgflJFU19OT19OSUJCTEUyOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJLyogWFhYIC0gcHJpbnQgYSB3YXJuaW5nIGhlcmU/ICovCi0JCX0KLSAgIHNraXA6Ci0JCS8qIHNraXAgdG8gbmV4dCBydW4gb2Ygc3BhY2VzICovCi0JCXdoaWxlICgqY3AgJiYgKmNwICE9ICcgJyAmJiAqY3AgIT0gJ1x0JykKLQkJCWNwKys7Ci0JfQotfQotCi0vKiBYWFggLSBzaG91bGQgcmVhbGx5IHN1cHBvcnQgQ0lEUiB3aGljaCBtZWFucyBleHBsaWNpdCBtYXNrcyBhbHdheXMuICovCi1zdGF0aWMgdV9pbnQzMl90Ci1uZXRfbWFzayhpbikJCS8qIFhYWCAtIHNob3VsZCByZWFsbHkgdXNlIHN5c3RlbSdzIHZlcnNpb24gb2YgdGhpcyAqLwotCXN0cnVjdCBpbl9hZGRyIGluOwotewotCXJlZ2lzdGVyIHVfaW50MzJfdCBpID0gbnRvaGwoaW4uc19hZGRyKTsKLQotCWlmIChJTl9DTEFTU0EoaSkpCi0JCXJldHVybiAoaHRvbmwoSU5fQ0xBU1NBX05FVCkpOwotCWVsc2UgaWYgKElOX0NMQVNTQihpKSkKLQkJcmV0dXJuIChodG9ubChJTl9DTEFTU0JfTkVUKSk7Ci0JcmV0dXJuIChodG9ubChJTl9DTEFTU0NfTkVUKSk7Ci19Ci0KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLXN0YXRpYyBpbnQKLXJlYWxfcmFuZG9taWQodV9pbnQgKnJhbmRvbV92YWx1ZSkgewotCS8qIG9wZW4gdGhlIG5vbmJsb2NraW5nIHJhbmRvbSBkZXZpY2UsIHJldHVybmluZyAtMSBvbiBmYWlsdXJlICovCi0JaW50IHJhbmRvbV9kZXZpY2UgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7Ci0JaWYgKHJhbmRvbV9kZXZpY2UgPCAwKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiByZWFkIGZyb20gdGhlIHJhbmRvbSBkZXZpY2UsIHJldHVybmluZyAtMSBvbiBmYWlsdXJlIChvciB0b28gbWFueSByZXRyaWVzKSovCi0JdV9pbnQgcmV0cnkgPSA1OwotCWZvciAocmV0cnk7IHJldHJ5ID4gMDsgcmV0cnktLSkgewotCQlpbnQgcmV0dmFsID0gcmVhZChyYW5kb21fZGV2aWNlLCByYW5kb21fdmFsdWUsIHNpemVvZih1X2ludCkpOwotCQlpZiAocmV0dmFsID09IHNpemVvZih1X2ludCkpIHsKLQkJCSpyYW5kb21fdmFsdWUgJj0gMHhmZmZmOwotCQkJY2xvc2UocmFuZG9tX2RldmljZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIGlmICgocmV0dmFsIDwgMCkgJiYgKGVycm5vICE9IEVJTlRSKSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQljbG9zZShyYW5kb21fZGV2aWNlKTsKLQlyZXR1cm4gLTE7Ci19Ci0jZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCi0KLXVfaW50Ci1yZXNfcmFuZG9taWQodm9pZCkgewotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotCWludCBzdGF0dXMgPSAwOwotCXVfaW50IG91dHB1dCA9IDA7Ci0Jc3RhdHVzID0gcmVhbF9yYW5kb21pZCgmb3V0cHV0KTsKLQlpZiAoc3RhdHVzICE9IC0xKSB7Ci0JCXJldHVybiBvdXRwdXQ7Ci0JfQotI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7Ci0JcmV0dXJuICgweGZmZmYgJiAobm93LnR2X3NlYyBeIG5vdy50dl91c2VjIF4gZ2V0cGlkKCkpKTsKLX0KLQotLyoKLSAqIFRoaXMgcm91dGluZSBpcyBmb3IgY2xvc2luZyB0aGUgc29ja2V0IGlmIGEgdmlydHVhbCBjaXJjdWl0IGlzIHVzZWQgYW5kCi0gKiB0aGUgcHJvZ3JhbSB3YW50cyB0byBjbG9zZSBpdC4gIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZW5kaG9zdGVudCgpCi0gKiB3aGljaCBleHBlY3RzIHRvIGNsb3NlIHRoZSBzb2NrZXQuCi0gKgotICogVGhpcyByb3V0aW5lIGlzIG5vdCBleHBlY3RlZCB0byBiZSB1c2VyIHZpc2libGUuCi0gKi8KLXZvaWQKLXJlc19uY2xvc2UocmVzX3N0YXRlIHN0YXRwKSB7Ci0JaW50IG5zOwotCi0JaWYgKHN0YXRwLT5fdmNzb2NrID49IDApIHsKLQkJKHZvaWQpIGNsb3NlKHN0YXRwLT5fdmNzb2NrKTsKLQkJc3RhdHAtPl92Y3NvY2sgPSAtMTsKLQkJc3RhdHAtPl9mbGFncyAmPSB+KFJFU19GX1ZDIHwgUkVTX0ZfQ09OTik7Ci0JfQotCWZvciAobnMgPSAwOyBucyA8IHN0YXRwLT5fdS5fZXh0Lm5zY291bnQ7IG5zKyspIHsKLQkJaWYgKHN0YXRwLT5fdS5fZXh0Lm5zc29ja3NbbnNdICE9IC0xKSB7Ci0JCQkodm9pZCkgY2xvc2Uoc3RhdHAtPl91Ll9leHQubnNzb2Nrc1tuc10pOwotCQkJc3RhdHAtPl91Ll9leHQubnNzb2Nrc1tuc10gPSAtMTsKLQkJfQotCX0KLX0KLQotdm9pZAotcmVzX25kZXN0cm95KHJlc19zdGF0ZSBzdGF0cCkgewotCXJlc19uY2xvc2Uoc3RhdHApOwotCWlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkKLQkJZnJlZShzdGF0cC0+X3UuX2V4dC5leHQpOwotCXN0YXRwLT5vcHRpb25zICY9IH5SRVNfSU5JVDsKLQlzdGF0cC0+X3UuX2V4dC5leHQgPSBOVUxMOwotfQotCi1jb25zdCBjaGFyICoKLXJlc19nZXRfbmliYmxlc3VmZml4KHJlc19zdGF0ZSBzdGF0cCkgewotCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCi0JCXJldHVybiAoc3RhdHAtPl91Ll9leHQuZXh0LT5uc3VmZml4KTsKLQlyZXR1cm4gKCJpcDYuYXJwYSIpOwotfQotCi1jb25zdCBjaGFyICoKLXJlc19nZXRfbmliYmxlc3VmZml4MihyZXNfc3RhdGUgc3RhdHApIHsKLQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQotCQlyZXR1cm4gKHN0YXRwLT5fdS5fZXh0LmV4dC0+bnN1ZmZpeDIpOwotCXJldHVybiAoImlwNi5pbnQiKTsKLX0KLQotdm9pZAotcmVzX3NldHNlcnZlcnMocmVzX3N0YXRlIHN0YXRwLCBjb25zdCB1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gKnNldCwgaW50IGNudCkgewotCWludCBpLCBuc2VydjsKLQlzaXplX3Qgc2l6ZTsKLQotCS8qIGNsb3NlIG9wZW4gc2VydmVycyAqLwotCXJlc19uY2xvc2Uoc3RhdHApOwotCi0JLyogY2F1c2UgcnR0IHRpbWVzIHRvIGJlIGZvcmdvdHRlbiAqLwotCXN0YXRwLT5fdS5fZXh0Lm5zY291bnQgPSAwOwotCi0JbnNlcnYgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjbnQgJiYgbnNlcnYgPCBNQVhOUzsgaSsrKSB7Ci0JCXN3aXRjaCAoc2V0LT5zaW4uc2luX2ZhbWlseSkgewotCQljYXNlIEFGX0lORVQ6Ci0JCQlzaXplID0gc2l6ZW9mKHNldC0+c2luKTsKLQkJCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCi0JCQkJbWVtY3B5KCZzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbbnNlcnZdLAotCQkJCQkmc2V0LT5zaW4sIHNpemUpOwotCQkJaWYgKHNpemUgPD0gc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0pKQotCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKLQkJCQkJJnNldC0+c2luLCBzaXplKTsKLSNpZmRlZiBub3RkZWYKLQkJCWVsc2UKLQkJCQlzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSAwOwotI2VuZGlmCi0JCQluc2VydisrOwotCQkJYnJlYWs7Ci0KLSNpZmRlZiBIQVNfSU5FVDZfU1RSVUNUUwotCQljYXNlIEFGX0lORVQ2OgotCQkJc2l6ZSA9IHNpemVvZihzZXQtPnNpbjYpOwotCQkJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKLQkJCQltZW1jcHkoJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tuc2Vydl0sCi0JCQkJCSZzZXQtPnNpbjYsIHNpemUpOwotCQkJaWYgKHNpemUgPD0gc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0pKQotCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKLQkJCQkJJnNldC0+c2luNiwgc2l6ZSk7Ci0JCQllbHNlCi0JCQkJc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XS5zaW5fZmFtaWx5ID0gMDsKLQkJCW5zZXJ2Kys7Ci0JCQlicmVhazsKLSNlbmRpZgotCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlzZXQrKzsKLQl9Ci0Jc3RhdHAtPm5zY291bnQgPSBuc2VydjsKLQotfQotCi1pbnQKLXJlc19nZXRzZXJ2ZXJzKHJlc19zdGF0ZSBzdGF0cCwgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICpzZXQsIGludCBjbnQpIHsKLQlpbnQgaTsKLQlzaXplX3Qgc2l6ZTsKLQl1X2ludDE2X3QgZmFtaWx5OwotCi0JZm9yIChpID0gMDsgaSA8IHN0YXRwLT5uc2NvdW50ICYmIGkgPCBjbnQ7IGkrKykgewotCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQotCQkJZmFtaWx5ID0gc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW2ldLnNpbi5zaW5fZmFtaWx5OwotCQllbHNlCi0JCQlmYW1pbHkgPSBzdGF0cC0+bnNhZGRyX2xpc3RbaV0uc2luX2ZhbWlseTsKLQotCQlzd2l0Y2ggKGZhbWlseSkgewotCQljYXNlIEFGX0lORVQ6Ci0JCQlzaXplID0gc2l6ZW9mKHNldC0+c2luKTsKLQkJCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCi0JCQkJbWVtY3B5KCZzZXQtPnNpbiwKLQkJCQkgICAgICAgJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tpXSwKLQkJCQkgICAgICAgc2l6ZSk7Ci0JCQllbHNlCi0JCQkJbWVtY3B5KCZzZXQtPnNpbiwgJnN0YXRwLT5uc2FkZHJfbGlzdFtpXSwKLQkJCQkgICAgICAgc2l6ZSk7Ci0JCQlicmVhazsKLQotI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCi0JCWNhc2UgQUZfSU5FVDY6Ci0JCQlzaXplID0gc2l6ZW9mKHNldC0+c2luNik7Ci0JCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQotCQkJCW1lbWNweSgmc2V0LT5zaW42LAotCQkJCSAgICAgICAmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW2ldLAotCQkJCSAgICAgICBzaXplKTsKLQkJCWVsc2UKLQkJCQltZW1jcHkoJnNldC0+c2luNiwgJnN0YXRwLT5uc2FkZHJfbGlzdFtpXSwKLQkJCQkgICAgICAgc2l6ZSk7Ci0JCQlicmVhazsKLSNlbmRpZgotCi0JCWRlZmF1bHQ6Ci0JCQlzZXQtPnNpbi5zaW5fZmFtaWx5ID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCXNldCsrOwotCX0KLQlyZXR1cm4gKHN0YXRwLT5uc2NvdW50KTsKLX0KLQotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotdm9pZCByZXNfc2V0aWZhY2UocmVzX3N0YXRlIHN0YXRwLCBjb25zdCBjaGFyKiBpZmFjZSkKLXsKLQlpZiAoc3RhdHAgIT0gTlVMTCkgewotCQkvLyBzZXQgaW50ZXJmYWNlCi0JCWlmIChpZmFjZSAmJiBpZmFjZVswXSAhPSAnXDAnKSB7Ci0JCQlpbnQgbGVuID0gc2l6ZW9mKHN0YXRwLT5pZmFjZSk7Ci0JCQlzdHJuY3B5KHN0YXRwLT5pZmFjZSwgaWZhY2UsIGxlbiAtIDEpOwotCQkJc3RhdHAtPmlmYWNlW2xlbiAtIDFdID0gJ1wwJzsKLQkJfSBlbHNlIHsKLQkJCXN0YXRwLT5pZmFjZVswXSA9ICdcMCc7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgcmVzX3NldG1hcmsocmVzX3N0YXRlIHN0YXRwLCBpbnQgbWFyaykKLXsKLQlpZiAoc3RhdHAgIT0gTlVMTCkgewotCQlzdGF0cC0+X21hcmsgPSBtYXJrOwotCX0KLX0KLSNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfbWtxdWVyeS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19ta3F1ZXJ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNGRlN2YuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19ta3F1ZXJ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoJJE5ldEJTRDogcmVzX21rcXVlcnkuYyx2IDEuNiAyMDA2LzAxLzI0IDE3OjQwOjMyIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAocXVlcnkgaWQgcmFuZG9taXphdGlvbikKLSAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MwotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAotICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLSAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAotICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAotICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCi0gKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLSAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCi0gKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX21rcXVlcnkuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX21rcXVlcnkuYyx2IDEuMS4yLjIuNC4yIDIwMDQvMDMvMTYgMTI6MzQ6MTggbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiByZXNfbWtxdWVyeS5jLHYgMS42IDIwMDYvMDEvMjQgMTc6NDA6MzIgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2Vsc2UKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIE9wdGlvbnMuICBMZWF2ZSB0aGVtIG9uLiAqLwotI2lmbmRlZiBERUJVRwotI2RlZmluZSBERUJVRwotI2VuZGlmCi0KLSNpZm5kZWYgbGludAotI2RlZmluZSBVTlVTRUQoYSkJKHZvaWQpJmEKLSNlbHNlCi0jZGVmaW5lIFVOVVNFRChhKQlhID0gYQotI2VuZGlmCi0KLWV4dGVybiBjb25zdCBjaGFyICpfcmVzX29wY29kZXNbXTsKLQotLyoKLSAqIEZvcm0gYWxsIHR5cGVzIG9mIHF1ZXJpZXMuCi0gKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSByZXN1bHQgb3IgLTEuCi0gKi8KLWludAotcmVzX25ta3F1ZXJ5KHJlc19zdGF0ZSBzdGF0cCwKLQkgICAgIGludCBvcCwJCQkvKiBvcGNvZGUgb2YgcXVlcnkgKi8KLQkgICAgIGNvbnN0IGNoYXIgKmRuYW1lLAkJLyogZG9tYWluIG5hbWUgKi8KLQkgICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCi0JICAgICBjb25zdCB1X2NoYXIgKmRhdGEsCS8qIHJlc291cmNlIHJlY29yZCBkYXRhICovCi0JICAgICBpbnQgZGF0YWxlbiwJCS8qIGxlbmd0aCBvZiBkYXRhICovCi0JICAgICBjb25zdCB1X2NoYXIgKm5ld3JyX2luLAkvKiBuZXcgcnIgZm9yIG1vZGlmeSBvciBhcHBlbmQgKi8KLQkgICAgIHVfY2hhciAqYnVmLAkJLyogYnVmZmVyIHRvIHB1dCBxdWVyeSAqLwotCSAgICAgaW50IGJ1ZmxlbikJCS8qIHNpemUgb2YgYnVmZmVyICovCi17Ci0JcmVnaXN0ZXIgSEVBREVSICpocDsKLQlyZWdpc3RlciB1X2NoYXIgKmNwLCAqZXA7Ci0JcmVnaXN0ZXIgaW50IG47Ci0JdV9jaGFyICpkbnB0cnNbMjBdLCAqKmRwcCwgKipsYXN0ZG5wdHI7Ci0KLQlVTlVTRUQobmV3cnJfaW4pOwotCi0jaWZkZWYgREVCVUcKLQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCXByaW50ZigiOzsgcmVzX25ta3F1ZXJ5KCVzLCAlcywgJXMsICVzKVxuIiwKLQkJICAgICAgIF9yZXNfb3Bjb2Rlc1tvcF0sIGRuYW1lLCBwX2NsYXNzKGNsYXNzKSwgcF90eXBlKHR5cGUpKTsKLSNlbmRpZgotCS8qCi0JICogSW5pdGlhbGl6ZSBoZWFkZXIgZmllbGRzLgotCSAqLwotCWlmICgoYnVmID09IE5VTEwpIHx8IChidWZsZW4gPCBIRklYRURTWikpCi0JCXJldHVybiAoLTEpOwotCW1lbXNldChidWYsIDAsIEhGSVhFRFNaKTsKLQlocCA9IChIRUFERVIgKikodm9pZCAqKWJ1ZjsKLQlocC0+aWQgPSBodG9ucyhyZXNfcmFuZG9taWQoKSk7Ci0JaHAtPm9wY29kZSA9IG9wOwotCWhwLT5yZCA9IChzdGF0cC0+b3B0aW9ucyAmIFJFU19SRUNVUlNFKSAhPSAwVTsKLQlocC0+cmNvZGUgPSBOT0VSUk9SOwotCWNwID0gYnVmICsgSEZJWEVEU1o7Ci0JZXAgPSBidWYgKyBidWZsZW47Ci0JZHBwID0gZG5wdHJzOwotCSpkcHArKyA9IGJ1ZjsKLQkqZHBwKysgPSBOVUxMOwotCWxhc3RkbnB0ciA9IGRucHRycyArIHNpemVvZiBkbnB0cnMgLyBzaXplb2YgZG5wdHJzWzBdOwotCS8qCi0JICogcGVyZm9ybSBvcGNvZGUgc3BlY2lmaWMgcHJvY2Vzc2luZwotCSAqLwotCXN3aXRjaCAob3ApIHsKLQljYXNlIFFVRVJZOgkvKkZBTExUSFJPVUdIKi8KLQljYXNlIE5TX05PVElGWV9PUDoKLQkJaWYgKGVwIC0gY3AgPCBRRklYRURTWikKLQkJCXJldHVybiAoLTEpOwotCQlpZiAoKG4gPSBkbl9jb21wKGRuYW1lLCBjcCwgZXAgLSBjcCAtIFFGSVhFRFNaLCBkbnB0cnMsCi0JCSAgICBsYXN0ZG5wdHIpKSA8IDApCi0JCQlyZXR1cm4gKC0xKTsKLQkJY3AgKz0gbjsKLQkJbnNfcHV0MTYodHlwZSwgY3ApOwotCQljcCArPSBJTlQxNlNaOwotCQluc19wdXQxNihjbGFzcywgY3ApOwotCQljcCArPSBJTlQxNlNaOwotCQlocC0+cWRjb3VudCA9IGh0b25zKDEpOwotCQlpZiAob3AgPT0gUVVFUlkgfHwgZGF0YSA9PSBOVUxMKQotCQkJYnJlYWs7Ci0JCS8qCi0JCSAqIE1ha2UgYW4gYWRkaXRpb25hbCByZWNvcmQgZm9yIGNvbXBsZXRpb24gZG9tYWluLgotCQkgKi8KLQkJaWYgKChlcCAtIGNwKSA8IFJSRklYRURTWikKLQkJCXJldHVybiAoLTEpOwotCQluID0gZG5fY29tcCgoY29uc3QgY2hhciAqKWRhdGEsIGNwLCBlcCAtIGNwIC0gUlJGSVhFRFNaLAotCQkJICAgIGRucHRycywgbGFzdGRucHRyKTsKLQkJaWYgKG4gPCAwKQotCQkJcmV0dXJuICgtMSk7Ci0JCWNwICs9IG47Ci0JCW5zX3B1dDE2KFRfTlVMTCwgY3ApOwotCQljcCArPSBJTlQxNlNaOwotCQluc19wdXQxNihjbGFzcywgY3ApOwotCQljcCArPSBJTlQxNlNaOwotCQluc19wdXQzMigwLCBjcCk7Ci0JCWNwICs9IElOVDMyU1o7Ci0JCW5zX3B1dDE2KDAsIGNwKTsKLQkJY3AgKz0gSU5UMTZTWjsKLQkJaHAtPmFyY291bnQgPSBodG9ucygxKTsKLQkJYnJlYWs7Ci0KLQljYXNlIElRVUVSWToKLQkJLyoKLQkJICogSW5pdGlhbGl6ZSBhbnN3ZXIgc2VjdGlvbgotCQkgKi8KLQkJaWYgKGVwIC0gY3AgPCAxICsgUlJGSVhFRFNaICsgZGF0YWxlbikKLQkJCXJldHVybiAoLTEpOwotCQkqY3ArKyA9ICdcMCc7CS8qIG5vIGRvbWFpbiBuYW1lICovCi0JCW5zX3B1dDE2KHR5cGUsIGNwKTsKLQkJY3AgKz0gSU5UMTZTWjsKLQkJbnNfcHV0MTYoY2xhc3MsIGNwKTsKLQkJY3AgKz0gSU5UMTZTWjsKLQkJbnNfcHV0MzIoMCwgY3ApOwotCQljcCArPSBJTlQzMlNaOwotCQluc19wdXQxNihkYXRhbGVuLCBjcCk7Ci0JCWNwICs9IElOVDE2U1o7Ci0JCWlmIChkYXRhbGVuKSB7Ci0JCQltZW1jcHkoY3AsIGRhdGEsIChzaXplX3QpZGF0YWxlbik7Ci0JCQljcCArPSBkYXRhbGVuOwotCQl9Ci0JCWhwLT5hbmNvdW50ID0gaHRvbnMoMSk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoY3AgLSBidWYpOwotfQotCi0jaWZkZWYgUkVTX1VTRV9FRE5TMAotLyogYXR0YWNoIE9QVCBwc2V1ZG8tUlIsIGFzIGRvY3VtZW50ZWQgaW4gUkZDMjY3MSAoRUROUzApLiAqLwotI2lmbmRlZiBUX09QVAotI2RlZmluZSBUX09QVAk0MQotI2VuZGlmCi0KLWludAotcmVzX25vcHQocmVzX3N0YXRlIHN0YXRwLAotCSBpbnQgbjAsCQkvKiBjdXJyZW50IG9mZnNldCBpbiBidWZmZXIgKi8KLQkgdV9jaGFyICpidWYsCQkvKiBidWZmZXIgdG8gcHV0IHF1ZXJ5ICovCi0JIGludCBidWZsZW4sCQkvKiBzaXplIG9mIGJ1ZmZlciAqLwotCSBpbnQgYW5zbGVuKQkJLyogVURQIGFuc3dlciBidWZmZXIgc2l6ZSAqLwotewotCXJlZ2lzdGVyIEhFQURFUiAqaHA7Ci0JcmVnaXN0ZXIgdV9jaGFyICpjcCwgKmVwOwotCXVfaW50MTZfdCBmbGFncyA9IDA7Ci0KLSNpZmRlZiBERUJVRwotCWlmICgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpICE9IDBVKQotCQlwcmludGYoIjs7IHJlc19ub3B0KClcbiIpOwotI2VuZGlmCi0KLQlocCA9IChIRUFERVIgKikodm9pZCAqKWJ1ZjsKLQljcCA9IGJ1ZiArIG4wOwotCWVwID0gYnVmICsgYnVmbGVuOwotCi0JaWYgKChlcCAtIGNwKSA8IDEgKyBSUkZJWEVEU1opCi0JCXJldHVybiAoLTEpOwotCi0JKmNwKysgPSAwOwkvKiAiLiIgKi8KLQotCW5zX3B1dDE2KFRfT1BULCBjcCk7CS8qIFRZUEUgKi8KLQljcCArPSBJTlQxNlNaOwotCW5zX3B1dDE2KGFuc2xlbiAmIDB4ZmZmZiwgY3ApOwkvKiBDTEFTUyA9IFVEUCBwYXlsb2FkIHNpemUgKi8KLQljcCArPSBJTlQxNlNaOwotCSpjcCsrID0gTk9FUlJPUjsJLyogZXh0ZW5kZWQgUkNPREUgKi8KLQkqY3ArKyA9IDA7CQkvKiBFRE5TIHZlcnNpb24gKi8KLQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfVVNFX0ROU1NFQykgewotI2lmZGVmIERFQlVHCi0JCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJCXByaW50ZigiOzsgcmVzX29wdCgpLi4uIEVORFMwIEROU1NFQ1xuIik7Ci0jZW5kaWYKLQkJZmxhZ3MgfD0gTlNfT1BUX0ROU1NFQ19PSzsKLQl9Ci0JbnNfcHV0MTYoZmxhZ3MsIGNwKTsKLQljcCArPSBJTlQxNlNaOwotCW5zX3B1dDE2KDAsIGNwKTsJLyogUkRMRU4gKi8KLQljcCArPSBJTlQxNlNaOwotCWhwLT5hcmNvdW50ID0gaHRvbnMobnRvaHMoaHAtPmFyY291bnQpICsgMSk7Ci0KLQlyZXR1cm4gKGNwIC0gYnVmKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19xdWVyeS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19xdWVyeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzFlODNjLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfcXVlcnkuYworKysgL2Rldi9udWxsCkBAIC0xLDQyNCArMCwwIEBACi0vKgkkTmV0QlNEOiByZXNfcXVlcnkuYyx2IDEuNyAyMDA2LzAxLzI0IDE3OjQxOjI1IGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKLSAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKLSAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCi0gKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKLSAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKLSAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAotICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi0gKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUwotICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmZGVmIG5vdGRlZgotc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlc19xdWVyeS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci1zdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiByZXNfcXVlcnkuYyx2IDEuMi4yLjMuNC4yIDIwMDQvMDMvMTYgMTI6MzQ6MTkgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiByZXNfcXVlcnkuYyx2IDEuNyAyMDA2LzAxLzI0IDE3OjQxOjI1IGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0jZWxzZQotI2luY2x1ZGUgPHJlc29sdi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSBESVNBQkxFX0hPU1RfQUxJQVMgMQotCi0vKiBPcHRpb25zLiAgTGVhdmUgdGhlbSBvbi4gKi8KLSNpZm5kZWYgREVCVUcKLSNkZWZpbmUgREVCVUcKLSNlbmRpZgotCi0jaWYgUEFDS0VUU1ogPiAxMDI0Ci0jZGVmaW5lIE1BWFBBQ0tFVAlQQUNLRVRTWgotI2Vsc2UKLSNkZWZpbmUgTUFYUEFDS0VUCTEwMjQKLSNlbmRpZgotCi0vKgotICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgYXdhaXQgYW5zd2VyLgotICogUmV0dXJuZWQgYW5zd2VyIGlzIHBsYWNlZCBpbiBzdXBwbGllZCBidWZmZXIgImFuc3dlciIuCi0gKiBQZXJmb3JtIHByZWxpbWluYXJ5IGNoZWNrIG9mIGFuc3dlciwgcmV0dXJuaW5nIHN1Y2Nlc3Mgb25seQotICogaWYgbm8gZXJyb3IgaXMgaW5kaWNhdGVkIGFuZCB0aGUgYW5zd2VyIGNvdW50IGlzIG5vbnplcm8uCi0gKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgotICogRXJyb3IgbnVtYmVyIGlzIGxlZnQgaW4gSF9FUlJOTy4KLSAqCi0gKiBDYWxsZXIgbXVzdCBwYXJzZSBhbnN3ZXIgYW5kIGRldGVybWluZSB3aGV0aGVyIGl0IGFuc3dlcnMgdGhlIHF1ZXN0aW9uLgotICovCi1pbnQKLXJlc19ucXVlcnkocmVzX3N0YXRlIHN0YXRwLAotCSAgIGNvbnN0IGNoYXIgKm5hbWUsCS8qIGRvbWFpbiBuYW1lICovCi0JICAgaW50IGNsYXNzLCBpbnQgdHlwZSwJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KLQkgICB1X2NoYXIgKmFuc3dlciwJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KLQkgICBpbnQgYW5zbGVuKQkJLyogc2l6ZSBvZiBhbnN3ZXIgYnVmZmVyICovCi17Ci0JdV9jaGFyIGJ1ZltNQVhQQUNLRVRdOwotCUhFQURFUiAqaHAgPSAoSEVBREVSICopKHZvaWQgKilhbnN3ZXI7Ci0JaW50IG47Ci0JdV9pbnQgb2ZsYWdzOwotCi0Jb2ZsYWdzID0gc3RhdHAtPl9mbGFnczsKLQotYWdhaW46Ci0JaHAtPnJjb2RlID0gTk9FUlJPUjsJLyogZGVmYXVsdCAqLwotCi0jaWZkZWYgREVCVUcKLQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCXByaW50ZigiOzsgcmVzX3F1ZXJ5KCVzLCAlZCwgJWQpXG4iLCBuYW1lLCBjbGFzcywgdHlwZSk7Ci0jZW5kaWYKLQotCW4gPSByZXNfbm1rcXVlcnkoc3RhdHAsIFFVRVJZLCBuYW1lLCBjbGFzcywgdHlwZSwgTlVMTCwgMCwgTlVMTCwKLQkJCSBidWYsIHNpemVvZihidWYpKTsKLSNpZmRlZiBSRVNfVVNFX0VETlMwCi0JaWYgKG4gPiAwICYmIChzdGF0cC0+X2ZsYWdzICYgUkVTX0ZfRUROUzBFUlIpID09IDAgJiYKLQkgICAgKHN0YXRwLT5vcHRpb25zICYgKFJFU19VU0VfRUROUzB8UkVTX1VTRV9ETlNTRUMpKSAhPSAwVSkKLQkJbiA9IHJlc19ub3B0KHN0YXRwLCBuLCBidWYsIHNpemVvZihidWYpLCBhbnNsZW4pOwotI2VuZGlmCi0JaWYgKG4gPD0gMCkgewotI2lmZGVmIERFQlVHCi0JCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJCXByaW50ZigiOzsgcmVzX3F1ZXJ5OiBta3F1ZXJ5IGZhaWxlZFxuIik7Ci0jZW5kaWYKLQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19SRUNPVkVSWSk7Ci0JCXJldHVybiAobik7Ci0JfQotCW4gPSByZXNfbnNlbmQoc3RhdHAsIGJ1ZiwgbiwgYW5zd2VyLCBhbnNsZW4pOwotCWlmIChuIDwgMCkgewotI2lmZGVmIFJFU19VU0VfRUROUzAKLQkJLyogaWYgdGhlIHF1ZXJ5IGNob2tlZCB3aXRoIEVETlMwLCByZXRyeSB3aXRob3V0IEVETlMwICovCi0JCWlmICgoc3RhdHAtPm9wdGlvbnMgJiAoUkVTX1VTRV9FRE5TMHxSRVNfVVNFX0ROU1NFQykpICE9IDBVICYmCi0JCSAgICAoKG9mbGFncyBeIHN0YXRwLT5fZmxhZ3MpICYgUkVTX0ZfRUROUzBFUlIpICE9IDApIHsKLQkJCXN0YXRwLT5fZmxhZ3MgfD0gUkVTX0ZfRUROUzBFUlI7Ci0JCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCi0JCQkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5OiByZXRyeSB3aXRob3V0IEVETlMwXG4iKTsKLQkJCWdvdG8gYWdhaW47Ci0JCX0KLSNlbmRpZgotI2lmZGVmIERFQlVHCi0JCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJCXByaW50ZigiOzsgcmVzX3F1ZXJ5OiBzZW5kIGVycm9yXG4iKTsKLSNlbmRpZgotCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7Ci0JCXJldHVybiAobik7Ci0JfQotCi0JaWYgKGhwLT5yY29kZSAhPSBOT0VSUk9SIHx8IG50b2hzKGhwLT5hbmNvdW50KSA9PSAwKSB7Ci0jaWZkZWYgREVCVUcKLQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQotCQkJcHJpbnRmKCI7OyByY29kZSA9ICglcyksIGNvdW50cyA9IGFuOiVkIG5zOiVkIGFyOiVkXG4iLAotCQkJICAgICAgIHBfcmNvZGUoaHAtPnJjb2RlKSwKLQkJCSAgICAgICBudG9ocyhocC0+YW5jb3VudCksCi0JCQkgICAgICAgbnRvaHMoaHAtPm5zY291bnQpLAotCQkJICAgICAgIG50b2hzKGhwLT5hcmNvdW50KSk7Ci0jZW5kaWYKLQkJc3dpdGNoIChocC0+cmNvZGUpIHsKLQkJY2FzZSBOWERPTUFJTjoKLQkJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgSE9TVF9OT1RfRk9VTkQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0VSVkZBSUw6Ci0JCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7Ci0JCQlicmVhazsKLQkJY2FzZSBOT0VSUk9SOgotCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19EQVRBKTsKLQkJCWJyZWFrOwotCQljYXNlIEZPUk1FUlI6Ci0JCWNhc2UgTk9USU1QOgotCQljYXNlIFJFRlVTRUQ6Ci0JCWRlZmF1bHQ6Ci0JCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIE5PX1JFQ09WRVJZKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldHVybiAoLTEpOwotCX0KLQlyZXR1cm4gKG4pOwotfQotCi0vKgotICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgcmV0cmlldmUgYW5zd2VyIGluIHN1cHBsaWVkIGJ1ZmZlci4KLSAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmVzcG9uc2Ugb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCi0gKiBJZiBlbmFibGVkLCBpbXBsZW1lbnQgc2VhcmNoIHJ1bGVzIHVudGlsIGFuc3dlciBvciB1bnJlY292ZXJhYmxlIGZhaWx1cmUKLSAqIGlzIGRldGVjdGVkLiAgRXJyb3IgY29kZSwgaWYgYW55LCBpcyBsZWZ0IGluIEhfRVJSTk8uCi0gKi8KLWludAotcmVzX25zZWFyY2gocmVzX3N0YXRlIHN0YXRwLAotCSAgICBjb25zdCBjaGFyICpuYW1lLAkvKiBkb21haW4gbmFtZSAqLwotCSAgICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLwotCSAgICB1X2NoYXIgKmFuc3dlciwJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KLQkgICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCi17Ci0JY29uc3QgY2hhciAqY3AsICogY29uc3QgKmRvbWFpbjsKLQlIRUFERVIgKmhwID0gKEhFQURFUiAqKSh2b2lkICopYW5zd2VyOwotCWNoYXIgdG1wW05TX01BWEROQU1FXTsKLQl1X2ludCBkb3RzOwotCWludCB0cmFpbGluZ19kb3QsIHJldCwgc2F2ZWRfaGVycm5vOwotCWludCBnb3Rfbm9kYXRhID0gMCwgZ290X3NlcnZmYWlsID0gMCwgcm9vdF9vbl9saXN0ID0gMDsKLQlpbnQgdHJpZWRfYXNfaXMgPSAwOwotCWludCBzZWFyY2hlZCA9IDA7Ci0KLQllcnJubyA9IDA7Ci0JUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBIT1NUX05PVF9GT1VORCk7ICAvKiBUcnVlIGlmIHdlIG5ldmVyIHF1ZXJ5LiAqLwotCi0JZG90cyA9IDA7Ci0JZm9yIChjcCA9IG5hbWU7ICpjcCAhPSAnXDAnOyBjcCsrKQotCQlkb3RzICs9ICgqY3AgPT0gJy4nKTsKLQl0cmFpbGluZ19kb3QgPSAwOwotCWlmIChjcCA+IG5hbWUgJiYgKi0tY3AgPT0gJy4nKQotCQl0cmFpbGluZ19kb3QrKzsKLQotCS8qIElmIHRoZXJlIGFyZW4ndCBhbnkgZG90cywgaXQgY291bGQgYmUgYSB1c2VyLWxldmVsIGFsaWFzLiAqLwotCWlmICghZG90cyAmJiAoY3AgPSByZXNfaG9zdGFsaWFzKHN0YXRwLCBuYW1lLCB0bXAsIHNpemVvZiB0bXApKSE9IE5VTEwpCi0JCXJldHVybiAocmVzX25xdWVyeShzdGF0cCwgY3AsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOwotCi0JLyoKLQkgKiBJZiB0aGVyZSBhcmUgZW5vdWdoIGRvdHMgaW4gdGhlIG5hbWUsIGxldCdzIGp1c3QgZ2l2ZSBpdCBhCi0JICogdHJ5ICdhcyBpcycuIFRoZSB0aHJlc2hvbGQgY2FuIGJlIHNldCB3aXRoIHRoZSAibmRvdHMiIG9wdGlvbi4KLQkgKiBBbHNvLCBxdWVyeSAnYXMgaXMnLCBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nIGRvdCBpbiB0aGUgbmFtZS4KLQkgKi8KLQlzYXZlZF9oZXJybm8gPSAtMTsKLQlpZiAoZG90cyA+PSBzdGF0cC0+bmRvdHMgfHwgdHJhaWxpbmdfZG90KSB7Ci0JCXJldCA9IHJlc19ucXVlcnlkb21haW4oc3RhdHAsIG5hbWUsIE5VTEwsIGNsYXNzLCB0eXBlLAotCQkJCQkgYW5zd2VyLCBhbnNsZW4pOwotCQlpZiAocmV0ID4gMCB8fCB0cmFpbGluZ19kb3QpCi0JCQlyZXR1cm4gKHJldCk7Ci0JCXNhdmVkX2hlcnJubyA9IHN0YXRwLT5yZXNfaF9lcnJubzsKLQkJdHJpZWRfYXNfaXMrKzsKLQl9Ci0KLQkvKgotCSAqIFdlIGRvIGF0IGxlYXN0IG9uZSBsZXZlbCBvZiBzZWFyY2ggaWYKLQkgKgktIHRoZXJlIGlzIG5vIGRvdCBhbmQgUkVTX0RFRk5BTUUgaXMgc2V0LCBvcgotCSAqCS0gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGRvdCwgdGhlcmUgaXMgbm8gdHJhaWxpbmcgZG90LAotCSAqCSAgYW5kIFJFU19ETlNSQ0ggaXMgc2V0LgotCSAqLwotCWlmICgoIWRvdHMgJiYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFRk5BTUVTKSAhPSAwVSkgfHwKLQkgICAgKGRvdHMgJiYgIXRyYWlsaW5nX2RvdCAmJiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfRE5TUkNIKSAhPSAwVSkpIHsKLQkJaW50IGRvbmUgPSAwOwotCi0JCS8qIFVuZm9ydHVuYXRlbHkgd2UgbmVlZCB0byBsb2FkIGludGVyZmFjZSBpbmZvCi0JCSAqIChkbnMgc2VydmVycywgc2VhcmNoIGRvbWFpbnMpIGJlZm9yZQotCQkgKiB0aGUgZG9tYWluIHN0dWZmIGlzIHRyaWVkLiAgV2lsbCBoYXZlIGEgYmV0dGVyCi0JCSAqIGZpeCBhZnRlciB0aHJlYWQgcG9vbHMgYXJlIHVzZWQgYXMgdGhpcyB3aWxsCi0JCSAqIGJlIGxvYWRlZCBvbmNlIGZvciB0aGUgdGhyZWFkIGluc3RlYWQgb2YgZWFjaAotCQkgKiB0aW1lIGEgcXVlcnkgaXMgdHJpZWQuCi0JCSAqLwotCQlfcmVzb2x2X3BvcHVsYXRlX3Jlc19mb3JfaWZhY2Uoc3RhdHApOwotCi0JCWZvciAoZG9tYWluID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKXN0YXRwLT5kbnNyY2g7Ci0JCSAgICAgKmRvbWFpbiAmJiAhZG9uZTsKLQkJICAgICBkb21haW4rKykgewotCQkJc2VhcmNoZWQgPSAxOwotCi0JCQlpZiAoZG9tYWluWzBdWzBdID09ICdcMCcgfHwKLQkJCSAgICAoZG9tYWluWzBdWzBdID09ICcuJyAmJiBkb21haW5bMF1bMV0gPT0gJ1wwJykpCi0JCQkJcm9vdF9vbl9saXN0Kys7Ci0KLQkJCXJldCA9IHJlc19ucXVlcnlkb21haW4oc3RhdHAsIG5hbWUsICpkb21haW4sCi0JCQkJCSAgICAgICBjbGFzcywgdHlwZSwKLQkJCQkJICAgICAgIGFuc3dlciwgYW5zbGVuKTsKLQkJCWlmIChyZXQgPiAwKQotCQkJCXJldHVybiAocmV0KTsKLQotCQkJLyoKLQkJCSAqIElmIG5vIHNlcnZlciBwcmVzZW50LCBnaXZlIHVwLgotCQkJICogSWYgbmFtZSBpc24ndCBmb3VuZCBpbiB0aGlzIGRvbWFpbiwKLQkJCSAqIGtlZXAgdHJ5aW5nIGhpZ2hlciBkb21haW5zIGluIHRoZSBzZWFyY2ggbGlzdAotCQkJICogKGlmIHRoYXQncyBlbmFibGVkKS4KLQkJCSAqIE9uIGEgTk9fREFUQSBlcnJvciwga2VlcCB0cnlpbmcsIG90aGVyd2lzZQotCQkJICogYSB3aWxkY2FyZCBlbnRyeSBvZiBhbm90aGVyIHR5cGUgY291bGQga2VlcCB1cwotCQkJICogZnJvbSBmaW5kaW5nIHRoaXMgZW50cnkgaGlnaGVyIGluIHRoZSBkb21haW4uCi0JCQkgKiBJZiB3ZSBnZXQgc29tZSBvdGhlciBlcnJvciAobmVnYXRpdmUgYW5zd2VyIG9yCi0JCQkgKiBzZXJ2ZXIgZmFpbHVyZSksIHRoZW4gc3RvcCBzZWFyY2hpbmcgdXAsCi0JCQkgKiBidXQgdHJ5IHRoZSBpbnB1dCBuYW1lIGJlbG93IGluIGNhc2UgaXQncwotCQkJICogZnVsbHktcXVhbGlmaWVkLgotCQkJICovCi0JCQlpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEKSB7Ci0JCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBUUllfQUdBSU4pOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCi0JCQlzd2l0Y2ggKHN0YXRwLT5yZXNfaF9lcnJubykgewotCQkJY2FzZSBOT19EQVRBOgotCQkJCWdvdF9ub2RhdGErKzsKLQkJCQkvKiBGQUxMVEhST1VHSCAqLwotCQkJY2FzZSBIT1NUX05PVF9GT1VORDoKLQkJCQkvKiBrZWVwIHRyeWluZyAqLwotCQkJCWJyZWFrOwotCQkJY2FzZSBUUllfQUdBSU46Ci0JCQkJaWYgKGhwLT5yY29kZSA9PSBTRVJWRkFJTCkgewotCQkJCQkvKiB0cnkgbmV4dCBzZWFyY2ggZWxlbWVudCwgaWYgYW55ICovCi0JCQkJCWdvdF9zZXJ2ZmFpbCsrOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJLyogYW55dGhpbmcgZWxzZSBpbXBsaWVzIHRoYXQgd2UncmUgZG9uZSAqLwotCQkJCWRvbmUrKzsKLQkJCX0KLQotCQkJLyogaWYgd2UgZ290IGhlcmUgZm9yIHNvbWUgcmVhc29uIG90aGVyIHRoYW4gRE5TUkNILAotCQkJICogd2Ugb25seSB3YW50ZWQgb25lIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgc28gc3RvcC4KLQkJCSAqLwotCQkJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ETlNSQ0gpID09IDBVKQotCQkJCWRvbmUrKzsKLQkJfQotCX0KLQotCS8qCi0JICogSWYgdGhlIHF1ZXJ5IGhhcyBub3QgYWxyZWFkeSBiZWVuIHRyaWVkIGFzIGlzIHRoZW4gdHJ5IGl0Ci0JICogdW5sZXNzIFJFU19OT1RMRFFVRVJZIGlzIHNldCBhbmQgdGhlcmUgd2VyZSBubyBkb3RzLgotCSAqLwotCWlmICgoZG90cyB8fCAhc2VhcmNoZWQgfHwgKHN0YXRwLT5vcHRpb25zICYgUkVTX05PVExEUVVFUlkpID09IDBVKSAmJgotCSAgICAhKHRyaWVkX2FzX2lzIHx8IHJvb3Rfb25fbGlzdCkpIHsKLQkJcmV0ID0gcmVzX25xdWVyeWRvbWFpbihzdGF0cCwgbmFtZSwgTlVMTCwgY2xhc3MsIHR5cGUsCi0JCQkJICAgICAgIGFuc3dlciwgYW5zbGVuKTsKLQkJaWYgKHJldCA+IDApCi0JCQlyZXR1cm4gKHJldCk7Ci0JfQotCi0JLyogaWYgd2UgZ290IGhlcmUsIHdlIGRpZG4ndCBzYXRpc2Z5IHRoZSBzZWFyY2guCi0JICogaWYgd2UgZGlkIGFuIGluaXRpYWwgZnVsbCBxdWVyeSwgcmV0dXJuIHRoYXQgcXVlcnkncyBIX0VSUk5PCi0JICogKG5vdGUgdGhhdCB3ZSB3b3VsZG4ndCBiZSBoZXJlIGlmIHRoYXQgcXVlcnkgaGFkIHN1Y2NlZWRlZCkuCi0JICogZWxzZSBpZiB3ZSBldmVyIGdvdCBhIG5vZGF0YSwgc2VuZCB0aGF0IGJhY2sgYXMgdGhlIHJlYXNvbi4KLQkgKiBlbHNlIHNlbmQgYmFjayBtZWFuaW5nbGVzcyBIX0VSUk5PLCB0aGF0IGJlaW5nIHRoZSBvbmUgZnJvbQotCSAqIHRoZSBsYXN0IEROU1JDSCB3ZSBkaWQuCi0JICovCi0JaWYgKHNhdmVkX2hlcnJubyAhPSAtMSkKLQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBzYXZlZF9oZXJybm8pOwotCWVsc2UgaWYgKGdvdF9ub2RhdGEpCi0JCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fREFUQSk7Ci0JZWxzZSBpZiAoZ290X3NlcnZmYWlsKQotCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7Ci0JcmV0dXJuICgtMSk7Ci19Ci0KLS8qCi0gKiBQZXJmb3JtIGEgY2FsbCBvbiByZXNfcXVlcnkgb24gdGhlIGNvbmNhdGVuYXRpb24gb2YgbmFtZSBhbmQgZG9tYWluLAotICogcmVtb3ZpbmcgYSB0cmFpbGluZyBkb3QgZnJvbSBuYW1lIGlmIGRvbWFpbiBpcyBOVUxMLgotICovCi1pbnQKLXJlc19ucXVlcnlkb21haW4ocmVzX3N0YXRlIHN0YXRwLAotCSAgICBjb25zdCBjaGFyICpuYW1lLAotCSAgICBjb25zdCBjaGFyICpkb21haW4sCi0JICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCi0JICAgIHVfY2hhciAqYW5zd2VyLAkJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KLQkgICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCi17Ci0JY2hhciBuYnVmW01BWEROQU1FXTsKLQljb25zdCBjaGFyICpsb25nbmFtZSA9IG5idWY7Ci0JaW50IG4sIGQ7Ci0KLSNpZmRlZiBERUJVRwotCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKLQkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5ZG9tYWluKCVzLCAlcywgJWQsICVkKVxuIiwKLQkJICAgICAgIG5hbWUsIGRvbWFpbj9kb21haW46IjxOaWw+IiwgY2xhc3MsIHR5cGUpOwotI2VuZGlmCi0JaWYgKGRvbWFpbiA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIENoZWNrIGZvciB0cmFpbGluZyAnLic7Ci0JCSAqIGNvcHkgd2l0aG91dCAnLicgaWYgcHJlc2VudC4KLQkJICovCi0JCW4gPSBzdHJsZW4obmFtZSk7Ci0JCWlmIChuID49IE1BWEROQU1FKSB7Ci0JCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIE5PX1JFQ09WRVJZKTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCW4tLTsKLQkJaWYgKG4gPj0gMCAmJiBuYW1lW25dID09ICcuJykgewotCQkJc3RybmNweShuYnVmLCBuYW1lLCAoc2l6ZV90KW4pOwotCQkJbmJ1ZltuXSA9ICdcMCc7Ci0JCX0gZWxzZQotCQkJbG9uZ25hbWUgPSBuYW1lOwotCX0gZWxzZSB7Ci0JCW4gPSBzdHJsZW4obmFtZSk7Ci0JCWQgPSBzdHJsZW4oZG9tYWluKTsKLQkJaWYgKG4gKyBkICsgMSA+PSBNQVhETkFNRSkgewotCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19SRUNPVkVSWSk7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQlzcHJpbnRmKG5idWYsICIlcy4lcyIsIG5hbWUsIGRvbWFpbik7Ci0JfQotCXJldHVybiAocmVzX25xdWVyeShzdGF0cCwgbG9uZ25hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOwotfQotCi1jb25zdCBjaGFyICoKLXJlc19ob3N0YWxpYXMoY29uc3QgcmVzX3N0YXRlIHN0YXRwLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICpkc3QsIHNpemVfdCBzaXopIHsKLQlyZXR1cm4gKE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19yYW5kb20uYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfcmFuZG9tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NzBjNGYuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19yYW5kb20uYworKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKiAkT3BlbkJTRDogcmVzX3JhbmRvbS5jLHYgMS4xNyAyMDA4LzA0LzEzIDAwOjI4OjM1IGRqbSBFeHAgJCAqLwotCi0vKgotICogQ29weXJpZ2h0IDE5OTcgTmllbHMgUHJvdm9zIDxwcm92b3NAcGh5c25ldC51bmktaGFtYnVyZy5kZT4KLSAqIENvcHlyaWdodCAyMDA4IERhbWllbiBNaWxsZXIgPGRqbUBvcGVuYnNkLm9yZz4KLSAqIENvcHlyaWdodCAyMDA4IEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAodGhyZWFkLXNhZmV0eSkKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhlbyBkZSBSYWFkdCA8ZGVyYWFkdEBvcGVuYnNkLm9yZz4gY2FtZSB1cCB3aXRoIHRoZSBpZGVhIG9mIHVzaW5nCi0gKiBzdWNoIGEgbWF0aGVtYXRpY2FsIHN5c3RlbSB0byBnZW5lcmF0ZSBtb3JlIHJhbmRvbSAoeWV0IG5vbi1yZXBlYXRpbmcpCi0gKiBpZHMgdG8gc29sdmUgdGhlIHJlc29sdmVyL25hbWVkIHByb2JsZW0uICBCdXQgTmllbHMgZGVzaWduZWQgdGhlCi0gKiBhY3R1YWwgc3lzdGVtIGJhc2VkIG9uIHRoZSBjb25zdHJhaW50cy4KLSAqCi0gKiBMYXRlciBtb2RpZmllZCBieSBEYW1pZW4gTWlsbGVyIHRvIHdyYXAgdGhlIExDRyBvdXRwdXQgaW4gYSAxNS1iaXQKLSAqIHBlcm11dGF0aW9uIGdlbmVyYXRvciBiYXNlZCBvbiBhIEx1YnktUmFja29mZiBibG9jayBjaXBoZXIuIFRoaXMKLSAqIGVuc3VyZXMgdGhlIG91dHB1dCBpcyBub24tcmVwZWF0aW5nIGFuZCBwcmVzZXJ2ZXMgdGhlIE1TQiB0d2lkZGxlCi0gKiB0cmljaywgYnV0IG1ha2VzIGl0IG1vcmUgcmVzaXN0YW50IHRvIExDRyBwcmVkaWN0aW9uLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogc2VlZCA9IHJhbmRvbSAxNWJpdAotICogbiA9IHByaW1lLCBnMCA9IGdlbmVyYXRvciB0byBuLAotICogaiA9IHJhbmRvbSBzbyB0aGF0IGdjZChqLG4tMSkgPT0gMQotICogZyA9IGcwXmogbW9kIG4gd2lsbCBiZSBhIGdlbmVyYXRvciBhZ2Fpbi4KLSAqCi0gKiBYWzBdID0gcmFuZG9tIHNlZWQuCi0gKiBYW25dID0gYSpYW24tMV0rYiBtb2QgbSBpcyBhIExpbmVhciBDb25ncnVlbnRpYWwgR2VuZXJhdG9yCi0gKiB3aXRoIGEgPSA3XihldmVuIHJhbmRvbSkgbW9kIG0sCi0gKiAgICAgIGIgPSByYW5kb20gd2l0aCBnY2QoYixtKSA9PSAxCi0gKiAgICAgIG0gPSAzMTEwNCBhbmQgYSBtYXhpbWFsIHBlcmlvZCBvZiBtLTEuCi0gKgotICogVGhlIHRyYW5zYWN0aW9uIGlkIGlzIGRldGVybWluZWQgYnk6Ci0gKiBpZFtuXSA9IHNlZWQgeG9yIChnXlhbbl0gbW9kIG4pCi0gKgotICogRWZmZWN0aXZseSB0aGUgaWQgaXMgcmVzdHJpY3RlZCB0byB0aGUgbG93ZXIgMTUgYml0cywgdGh1cwotICogeWllbGRpbmcgdHdvIGRpZmZlcmVudCBjeWNsZXMgYnkgdG9nZ2xpbmcgdGhlIG1zYiBvbiBhbmQgb2ZmLgotICogVGhpcyBhdm9pZHMgcmV1c2UgaXNzdWVzIGNhdXNlZCBieSByZXNlZWRpbmcuCi0gKgotICogVGhlIG91dHB1dCBvZiB0aGlzIGdlbmVyYXRvciBpcyB0aGVuIHJhbmRvbWx5IHBlcm11dGVkIHRob3VnaCBhCi0gKiBjdXN0b20gMTUgYml0IEx1YnktUmFja29mZiBibG9jayBjaXBoZXIuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLyogQklPTklDLUJFR0lOICovCi1zdGF0aWMgcHRocmVhZF9tdXRleF90ICAgICAgICAgX3Jlc19yYW5kb21fbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0jZGVmaW5lICBfUkVTX1JBTkRPTV9MT0NLKCkgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX3JhbmRvbV9sb2NrKQotI2RlZmluZSAgX1JFU19SQU5ET01fVU5MT0NLKCkgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3JhbmRvbV9sb2NrKQotLyogQklPTklDLUVORCAqLwotCi0jZGVmaW5lIFJVX09VVCAgCTE4MAkvKiBUaW1lIGFmdGVyIHdpY2ggd2lsbCBiZSByZXNlZWRlZCAqLwotI2RlZmluZSBSVV9NQVgJCTMwMDAwCS8qIFVuaXEgY3ljbGUsIGF2b2lkIGJsYWNramFjayBwcmVkaWN0aW9uICovCi0jZGVmaW5lIFJVX0dFTgkJMgkvKiBTdGFydGluZyBnZW5lcmF0b3IgKi8KLSNkZWZpbmUgUlVfTgkJMzI3NDkJLyogUlVfTi0xID0gMioyKjMqMjcyOSAqLwotI2RlZmluZSBSVV9BR0VOCQk3CS8qIGRldGVybWluZSBydV9hIGFzIFJVX0FHRU5eKDIqcmFuZCkgKi8KLSNkZWZpbmUgUlVfTQkJMzExMDQJLyogUlVfTSA9IDJeNyozXjUgLSBkb24ndCBjaGFuZ2UgKi8KLSNkZWZpbmUgUlVfUk9VTkRTCTExCS8qIE51bWJlciBvZiByb3VuZHMgZm9yIHBlcm11dGUgKG9kZCkgKi8KLQotc3RydWN0IHByZl9jdHggewotCS8qIFBSRiBsb29rdXAgdGFibGUgZm9yIG9kZCByb3VuZHMgKDcgYml0cyBpbnB1dCB0byA4IGJpdHMgb3V0cHV0KSAqLwotCXVfY2hhciBwcmY3WyhSVV9ST1VORFMgLyAyKSAqICgxIDw8IDcpXTsKLQotCS8qIFBSRiBsb29rdXAgdGFibGUgZm9yIGV2ZW4gcm91bmRzICg4IGJpdHMgaW5wdXQgdG8gNyBiaXRzIG91dHB1dCkgKi8KLQl1X2NoYXIgcHJmOFsoKFJVX1JPVU5EUyArIDEpIC8gMikgKiAoMSA8PCA4KV07Ci19OwotCi0jZGVmaW5lIFBGQUNfTiAzCi1jb25zdCBzdGF0aWMgdV9pbnQxNl90IHBmYWN0c1tQRkFDX05dID0gewotCTIsCi0JMywKLQkyNzI5Ci19OwotCi1zdGF0aWMgdV9pbnQxNl90IHJ1X3g7Ci1zdGF0aWMgdV9pbnQxNl90IHJ1X3NlZWQsIHJ1X3NlZWQyOwotc3RhdGljIHVfaW50MTZfdCBydV9hLCBydV9iOwotc3RhdGljIHVfaW50MTZfdCBydV9nOwotc3RhdGljIHVfaW50MTZfdCBydV9jb3VudGVyID0gMDsKLXN0YXRpYyB1X2ludDE2X3QgcnVfbXNiID0gMDsKLXN0YXRpYyBzdHJ1Y3QgcHJmX2N0eCAqcnVfcHJmID0gTlVMTDsKLXN0YXRpYyBsb25nIHJ1X3Jlc2VlZDsKLQotc3RhdGljIHVfaW50MTZfdCBwbW9kKHVfaW50MTZfdCwgdV9pbnQxNl90LCB1X2ludDE2X3QpOwotc3RhdGljIHZvaWQgcmVzX2luaXRpZCh2b2lkKTsKLQotLyoKLSAqIERvIGEgZmFzdCBtb2R1bGFyIGV4cG9uYXRpb24sIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgaW4gdGhlIHJhbmdlCi0gKiBvZiAwIC0gKG1vZC0xKQotICovCi1zdGF0aWMgdV9pbnQxNl90Ci1wbW9kKHVfaW50MTZfdCBnZW4sIHVfaW50MTZfdCBleHAsIHVfaW50MTZfdCBtb2QpCi17Ci0JdV9pbnQxNl90IHMsIHQsIHU7Ci0KLQlzID0gMTsKLQl0ID0gZ2VuOwotCXUgPSBleHA7Ci0KLQl3aGlsZSAodSkgewotCQlpZiAodSAmIDEpCi0JCQlzID0gKHMgKiB0KSAlIG1vZDsKLQkJdSA+Pj0gMTsKLQkJdCA9ICh0ICogdCkgJSBtb2Q7Ci0JfQotCXJldHVybiAocyk7Ci19Ci0KLS8qCi0gKiAxNS1iaXQgcGVybXV0YXRpb24gYmFzZWQgb24gTHVieS1SYWNrb2ZmIGJsb2NrIGNpcGhlcgotICovCi11X2ludAotcGVybXV0ZTE1KHVfaW50IGluKQotewotCWludCBpOwotCXVfaW50IGxlZnQsIHJpZ2h0LCB0bXA7Ci0KLQlpZiAocnVfcHJmID09IE5VTEwpCi0JCXJldHVybiBpbjsKLQotCWxlZnQgPSAoaW4gPj4gOCkgJiAweDdmOwotCXJpZ2h0ID0gaW4gJiAweGZmOwotCi0JLyoKLQkgKiBFYWNoIHJvdW5kIHN3YXBzIHRoZSB3aWR0aCBvZiBsZWZ0IGFuZCByaWdodC4gRXZlbiByb3VuZHMgaGF2ZQotCSAqIGEgNy1iaXQgbGVmdCwgb2RkIHJvdW5kcyBoYXZlIGFuIDgtYml0IGxlZnQuCVNpbmNlIHRoaXMgdXNlcyBhbgotCSAqIG9kZCBudW1iZXIgb2Ygcm91bmRzLCBsZWZ0IGlzIGFsd2F5cyA4IGJpdHMgd2lkZSBhdCB0aGUgZW5kLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBSVV9ST1VORFM7IGkrKykgewotCQlpZiAoKGkgJiAxKSA9PSAwKQotCQkJdG1wID0gcnVfcHJmLT5wcmY4WyhpIDw8ICg4IC0gMSkpIHwgcmlnaHRdICYgMHg3ZjsKLQkJZWxzZQotCQkJdG1wID0gcnVfcHJmLT5wcmY3WygoaSAtIDEpIDw8ICg3IC0gMSkpIHwgcmlnaHRdOwotCQl0bXAgXj0gbGVmdDsKLQkJbGVmdCA9IHJpZ2h0OwotCQlyaWdodCA9IHRtcDsKLQl9Ci0KLQlyZXR1cm4gKHJpZ2h0IDw8IDgpIHwgbGVmdDsKLX0KLQotLyoKLSAqIEluaXRpYWxpemVzIHRoZSBzZWVkIGFuZCBjaG9vc2VzIGEgc3VpdGFibGUgZ2VuZXJhdG9yLiBBbHNvIHRvZ2dsZXMKLSAqIHRoZSBtc2IgZmxhZy4gVGhlIG1zYiBmbGFnIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdHdvIGRpc3RpbmN0Ci0gKiBjeWNsZXMgb2YgcmFuZG9tIG51bWJlcnMgYW5kIHRodXMgYXZvaWRpbmcgcmV1c2Ugb2YgaWRzLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gcmVzX3JhbmRvbWlkKCkgd2hlbiBuZWVkZWQsIGFuCi0gKiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IGl0LgotICovCi1zdGF0aWMgdm9pZAotcmVzX2luaXRpZCh2b2lkKQotewotCXVfaW50MTZfdCBqLCBpOwotCXVfaW50MzJfdCB0bXA7Ci0JaW50IG5vcHJpbWUgPSAxOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCi0JcnVfeCA9IGFyYzRyYW5kb21fdW5pZm9ybShSVV9NKTsKLQotCS8qIDE1IGJpdHMgb2YgcmFuZG9tIHNlZWQgKi8KLQl0bXAgPSBhcmM0cmFuZG9tKCk7Ci0JcnVfc2VlZCA9ICh0bXAgPj4gMTYpICYgMHg3RkZGOwotCXJ1X3NlZWQyID0gdG1wICYgMHg3RkZGOwotCi0JLyogRGV0ZXJtaW5lIHRoZSBMQ0cgd2UgdXNlICovCi0JdG1wID0gYXJjNHJhbmRvbSgpOwotCXJ1X2IgPSAodG1wICYgMHhmZmZlKSB8IDE7Ci0JcnVfYSA9IHBtb2QoUlVfQUdFTiwgKHRtcCA+PiAxNikgJiAweGZmZmUsIFJVX00pOwotCXdoaWxlIChydV9iICUgMyA9PSAwKQotCQlydV9iICs9IDI7Ci0KLQlqID0gYXJjNHJhbmRvbV91bmlmb3JtKFJVX04pOwotCi0JLyoKLQkgKiBEbyBhIGZhc3QgZ2NkKGosUlVfTi0xKSwgc28gd2UgY2FuIGZpbmQgYSBqIHdpdGgKLQkgKiBnY2QoaiwgUlVfTi0xKSA9PSAxLCBnaXZpbmcgYSBuZXcgZ2VuZXJhdG9yIGZvcgotCSAqIFJVX0dFTl5qIG1vZCBSVV9OCi0JICovCi0KLQl3aGlsZSAobm9wcmltZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgUEZBQ19OOyBpKyspCi0JCQlpZiAoaiAlIHBmYWN0c1tpXSA9PSAwKQotCQkJCWJyZWFrOwotCi0JCWlmIChpID49IFBGQUNfTikKLQkJCW5vcHJpbWUgPSAwOwotCQllbHNlCi0JCQlqID0gKGogKyAxKSAlIFJVX047Ci0JfQotCi0JcnVfZyA9IHBtb2QoUlVfR0VOLCBqLCBSVV9OKTsKLQlydV9jb3VudGVyID0gMDsKLQotCS8qIEluaXRpYWxpc2UgUFJGIGZvciBMdWJ5LVJhY2tvZmYgcGVybXV0YXRpb24gKi8KLQlpZiAocnVfcHJmID09IE5VTEwpCi0JCXJ1X3ByZiA9IG1hbGxvYyhzaXplb2YoKnJ1X3ByZikpOwotCWlmIChydV9wcmYgIT0gTlVMTCkKLQkJYXJjNHJhbmRvbV9idWYocnVfcHJmLCBzaXplb2YoKnJ1X3ByZikpOwotCi0JZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JcnVfcmVzZWVkID0gdHYudHZfc2VjICsgUlVfT1VUOwotCXJ1X21zYiA9IHJ1X21zYiA9PSAweDgwMDAgPyAwIDogMHg4MDAwOwotfQotCi11X2ludAotcmVzX3JhbmRvbWlkKHZvaWQpCi17Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0gICAgICAgIHVfaW50ICByZXN1bHQ7Ci0KLSAgICAgICAgX1JFU19SQU5ET01fTE9DSygpCi0JZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Ci0JaWYgKHJ1X2NvdW50ZXIgPj0gUlVfTUFYIHx8IHR2LnR2X3NlYyA+IHJ1X3Jlc2VlZCkKLQkJcmVzX2luaXRpZCgpOwotCi0JLyogTGluZWFyIENvbmdydWVudGlhbCBHZW5lcmF0b3IgKi8KLQlydV94ID0gKHJ1X2EgKiBydV94ICsgcnVfYikgJSBSVV9NOwotCXJ1X2NvdW50ZXIrKzsKLQotCXJlc3VsdCA9IHBlcm11dGUxNShydV9zZWVkIF4gcG1vZChydV9nLCBydV9zZWVkMiArIHJ1X3gsIFJVX04pKSB8IHJ1X21zYjsKLSAgICAgICAgX1JFU19SQU5ET01fVU5MT0NLKCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2lmIDAKLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JaW50IGksIG47Ci0JdV9pbnQxNl90IHdlcnQ7Ci0KLQlyZXNfaW5pdGlkKCk7Ci0KLQlwcmludGYoIkdlbmVyYXRvcjogJXVcbiIsIHJ1X2cpOwotCXByaW50ZigiU2VlZDogJXVcbiIsIHJ1X3NlZWQpOwotCXByaW50ZigiUmVzZWVkIGF0ICVsZFxuIiwgcnVfcmVzZWVkKTsKLQlwcmludGYoIlJ1X1g6ICV1XG4iLCBydV94KTsKLQlwcmludGYoIlJ1X0E6ICV1XG4iLCBydV9hKTsKLQlwcmludGYoIlJ1X0I6ICV1XG4iLCBydV9iKTsKLQotCW4gPSBhcmdjID4gMSA/IGF0b2koYXJndlsxXSkgOiA2MDAwMTsKLQlmb3IgKGk9MDtpPG47aSsrKSB7Ci0JCXdlcnQgPSByZXNfcmFuZG9taWQoKTsKLQkJcHJpbnRmKCIldVxuIiwgd2VydCk7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfc2VuZC5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zZW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ODdiZGMuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zZW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzU1ICswLDAgQEAKLS8qCSROZXRCU0Q6IHJlc19zZW5kLmMsdiAxLjkgMjAwNi8wMS8yNCAxNzo0MToyNSBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IDIwMDggIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAoc291cmNlIHBvcnQgcmFuZG9taXphdGlvbikKLSAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk4OSwgMTk5MwotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAotICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLSAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAotICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAotICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCi0gKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLSAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCi0gKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX3NlbmQuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX3NlbmQuYyx2IDEuNS4yLjIuNC41IDIwMDQvMDgvMTAgMDI6MTk6NTYgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiByZXNfc2VuZC5jLHYgMS45IDIwMDYvMDEvMjQgMTc6NDE6MjUgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotLyogc2V0IHRvIDEgdG8gdXNlIG91ciBzbWFsbC9zaW1wbGUvbGltaXRlZCBETlMgY2FjaGUgKi8KLSNkZWZpbmUgIFVTRV9SRVNPTFZfQ0FDSEUgIDEKLQotLyoKLSAqIFNlbmQgcXVlcnkgdG8gbmFtZSBzZXJ2ZXIgYW5kIHdhaXQgZm9yIHJlcGx5LgotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxzeXMvdWlvLmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2Vsc2UKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSA8aXNjL2V2ZW50bGliLmg+Ci0KLSNpZiBVU0VfUkVTT0xWX0NBQ0hFCi0jICBpbmNsdWRlIDxyZXNvbHZfY2FjaGUuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKLQotI2lmbmRlZiBERV9DT05TVAotI2RlZmluZSBERV9DT05TVChjLHYpICAgdiA9ICgoYykgPyBcCi0gICAgc3RyY2hyKChjb25zdCB2b2lkICopKGMpLCAqKGNvbnN0IGNoYXIgKikoY29uc3Qgdm9pZCAqKShjKSkgOiBOVUxMKQotI2VuZGlmCi0KLS8qIE9wdGlvbnMuICBMZWF2ZSB0aGVtIG9uLiAqLwotI2lmbmRlZiBERUJVRwotI2RlZmluZSBERUJVRwotI2VuZGlmCi0jaW5jbHVkZSAicmVzX2RlYnVnLmgiCi0jaW5jbHVkZSAicmVzX3ByaXZhdGUuaCIKLQotI2RlZmluZSBFWFQocmVzKSAoKHJlcyktPl91Ll9leHQpCi0jZGVmaW5lIERCRyAwCi0KLXN0YXRpYyBjb25zdCBpbnQgaGlnaGVzdEZEID0gRkRfU0VUU0laRSAtIDE7Ci0KLS8qIEZvcndhcmQuICovCi0KLXN0YXRpYyBpbnQJCWdldF9zYWxlbiBfX1AoKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSk7Ci1zdGF0aWMgc3RydWN0IHNvY2thZGRyICogZ2V0X25zYWRkciBfX1AoKHJlc19zdGF0ZSwgc2l6ZV90KSk7Ci1zdGF0aWMgaW50CQlzZW5kX3ZjKHJlc19zdGF0ZSwgY29uc3QgdV9jaGFyICosIGludCwKLQkJCQl1X2NoYXIgKiwgaW50LCBpbnQgKiwgaW50KTsKLXN0YXRpYyBpbnQJCXNlbmRfZGcocmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LAotCQkJCXVfY2hhciAqLCBpbnQsIGludCAqLCBpbnQsCi0JCQkJaW50ICosIGludCAqKTsKLXN0YXRpYyB2b2lkCQlBZXJyb3IoY29uc3QgcmVzX3N0YXRlLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgaW50LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpOwotc3RhdGljIHZvaWQJCVBlcnJvcihjb25zdCByZXNfc3RhdGUsIEZJTEUgKiwgY29uc3QgY2hhciAqLCBpbnQpOwotc3RhdGljIGludAkJc29ja19lcShzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICopOwotI2lmZGVmIE5FRURfUFNFTEVDVAotc3RhdGljIGludAkJcHNlbGVjdChpbnQsIHZvaWQgKiwgdm9pZCAqLCB2b2lkICosCi0JCQkJc3RydWN0IHRpbWVzcGVjICosCi0JCQkJY29uc3Qgc2lnc2V0X3QgKik7Ci0jZW5kaWYKLXZvaWQgcmVzX3BxdWVyeShjb25zdCByZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsIEZJTEUgKik7Ci1zdGF0aWMgaW50IGNvbm5lY3Rfd2l0aF90aW1lb3V0KGludCBzb2NrLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKm5zYXAsCi0JCQlzb2NrbGVuX3Qgc2FsZW4sIGludCBzZWMpOwotc3RhdGljIGludCByZXRyeWluZ19zZWxlY3QoY29uc3QgaW50IHNvY2ssIGZkX3NldCAqcmVhZHNldCwgZmRfc2V0ICp3cml0ZXNldCwKLQkJCWNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqZmluaXNoKTsKLQotLyogQklPTklDLUJFR0lOOiBpbXBsZW1lbnQgc291cmNlIHBvcnQgcmFuZG9taXphdGlvbiAqLwotdHlwZWRlZiB1bmlvbiB7Ci0gICAgc3RydWN0IHNvY2thZGRyICAgICAgc2E7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luICAgc2luOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgIHNpbjY7Ci19IF9zb2NrYWRkcl91bmlvbjsKLQotc3RhdGljIGludAotcmFuZG9tX2JpbmQoIGludCAgcywgaW50ICBmYW1pbHkgKQotewotICAgIF9zb2NrYWRkcl91bmlvbiAgdTsKLSAgICBpbnQgICAgICAgICAgICAgIGo7Ci0gICAgc29ja2xlbl90ICAgICAgICBzbGVuOwotCi0gICAgLyogY2xlYXIgYWxsLCB0aGlzIGFsc28gc2V0cyB0aGUgSVA0LzYgYWRkcmVzcyB0byAnYW55JyAqLwotICAgIG1lbXNldCggJnUsIDAsIHNpemVvZiB1ICk7Ci0KLSAgICBzd2l0Y2ggKGZhbWlseSkgewotICAgICAgICBjYXNlIEFGX0lORVQ6Ci0gICAgICAgICAgICB1LnNpbi5zaW5fZmFtaWx5ID0gZmFtaWx5OwotICAgICAgICAgICAgc2xlbiAgICAgICAgICAgICA9IHNpemVvZiB1LnNpbjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFGX0lORVQ2OgotICAgICAgICAgICAgdS5zaW42LnNpbjZfZmFtaWx5ID0gZmFtaWx5OwotICAgICAgICAgICAgc2xlbiAgICAgICAgICAgICAgID0gc2l6ZW9mIHUuc2luNjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJybm8gPSBFUFJPVE87Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgLyogZmlyc3QgdHJ5IHRvIGJpbmQgdG8gYSByYW5kb20gc291cmNlIHBvcnQgYSBmZXcgdGltZXMgKi8KLSAgICBmb3IgKGogPSAwOyBqIDwgMTA7IGorKykgewotICAgICAgICAvKiBmaW5kIGEgcmFuZG9tIHBvcnQgYmV0d2VlbiAxMDI1IC4uIDY1NTM0ICovCi0gICAgICAgIGludCAgcG9ydCA9IDEwMjUgKyAocmVzX3JhbmRvbWlkKCkgJSAoNjU1MzUtMTAyNSkpOwotICAgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpCi0gICAgICAgICAgICB1LnNpbi5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1LnNpbjYuc2luNl9wb3J0ID0gaHRvbnMocG9ydCk7Ci0KLSAgICAgICAgaWYgKCAhYmluZCggcywgJnUuc2EsIHNsZW4gKSApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiBub3RoaW5nIGFmdGVyIDEwIHRyaWVzLCBvdXIgbmV0d29yayB0YWJsZSBpcyBwcm9iYWJseSBidXN5ICovCi0gICAgLyogbGV0IHRoZSBzeXN0ZW0gZGVjaWRlIHdoaWNoIHBvcnQgaXMgYmVzdCAqLwotICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkKLSAgICAgICAgdS5zaW4uc2luX3BvcnQgPSAwOwotICAgIGVsc2UKLSAgICAgICAgdS5zaW42LnNpbjZfcG9ydCA9IDA7Ci0KLSAgICByZXR1cm4gYmluZCggcywgJnUuc2EsIHNsZW4gKTsKLX0KLS8qIEJJT05JQy1FTkQgKi8KLQotc3RhdGljIGNvbnN0IGludCBuaWZsYWdzID0gTklfTlVNRVJJQ0hPU1QgfCBOSV9OVU1FUklDU0VSVjsKLQotLyogUHVibGljLiAqLwotCi0vKiBpbnQKLSAqIHJlc19pc291cnNlcnZlcihpbmEpCi0gKglsb29rcyB1cCAiaW5hIiBpbiBfcmVzLm5zX2FkZHJfbGlzdFtdCi0gKiByZXR1cm5zOgotICoJMCAgOiBub3QgZm91bmQKLSAqCT4wIDogZm91bmQKLSAqIGF1dGhvcjoKLSAqCXBhdWwgdml4aWUsIDI5bWF5OTQKLSAqLwotX19MSUJDX0hJRERFTl9fIGludAotcmVzX291cnNlcnZlcl9wKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSkgewotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqaW5wLCAqc3J2OwotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmluNnAsICpzcnY2OwotCWludCBuczsKLQotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQkJaW5wID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKShjb25zdCB2b2lkICopc2E7Ci0JCWZvciAobnMgPSAwOyAgbnMgPCBzdGF0cC0+bnNjb3VudDsgIG5zKyspIHsKLQkJCXNydiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKWdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOwotCQkJaWYgKHNydi0+c2luX2ZhbWlseSA9PSBpbnAtPnNpbl9mYW1pbHkgJiYKLQkJCSAgICBzcnYtPnNpbl9wb3J0ID09IGlucC0+c2luX3BvcnQgJiYKLQkJCSAgICAoc3J2LT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSB8fAotCQkJICAgICBzcnYtPnNpbl9hZGRyLnNfYWRkciA9PSBpbnAtPnNpbl9hZGRyLnNfYWRkcikpCi0JCQkJcmV0dXJuICgxKTsKLQkJfQotCQlicmVhazsKLQljYXNlIEFGX0lORVQ2OgotCQlpZiAoRVhUKHN0YXRwKS5leHQgPT0gTlVMTCkKLQkJCWJyZWFrOwotCQlpbjZwID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhOwotCQlmb3IgKG5zID0gMDsgIG5zIDwgc3RhdHAtPm5zY291bnQ7ICBucysrKSB7Ci0JCQlzcnY2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOwotCQkJaWYgKHNydjYtPnNpbjZfZmFtaWx5ID09IGluNnAtPnNpbjZfZmFtaWx5ICYmCi0JCQkgICAgc3J2Ni0+c2luNl9wb3J0ID09IGluNnAtPnNpbjZfcG9ydCAmJgotI2lmZGVmIEhBVkVfU0lONl9TQ09QRV9JRAotCQkJICAgIChzcnY2LT5zaW42X3Njb3BlX2lkID09IDAgfHwKLQkJCSAgICAgc3J2Ni0+c2luNl9zY29wZV9pZCA9PSBpbjZwLT5zaW42X3Njb3BlX2lkKSAmJgotI2VuZGlmCi0JCQkgICAgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzcnY2LT5zaW42X2FkZHIpIHx8Ci0JCQkgICAgIElONl9BUkVfQUREUl9FUVVBTCgmc3J2Ni0+c2luNl9hZGRyLCAmaW42cC0+c2luNl9hZGRyKSkpCi0JCQkJcmV0dXJuICgxKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotLyogaW50Ci0gKiByZXNfbmFtZWlucXVlcnkobmFtZSwgdHlwZSwgY2xhc3MsIGJ1ZiwgZW9tKQotICoJbG9vayBmb3IgKG5hbWUsdHlwZSxjbGFzcykgaW4gdGhlIHF1ZXJ5IHNlY3Rpb24gb2YgcGFja2V0IChidWYsZW9tKQotICogcmVxdWlyZXM6Ci0gKglidWYgKyBIRklYRURTWiA8PSBlb20KLSAqIHJldHVybnM6Ci0gKgktMSA6IGZvcm1hdCBlcnJvcgotICoJMCAgOiBub3QgZm91bmQKLSAqCT4wIDogZm91bmQKLSAqIGF1dGhvcjoKLSAqCXBhdWwgdml4aWUsIDI5bWF5OTQKLSAqLwotaW50Ci1yZXNfbmFtZWlucXVlcnkoY29uc3QgY2hhciAqbmFtZSwgaW50IHR5cGUsIGludCBjbGFzcywKLQkJY29uc3QgdV9jaGFyICpidWYsIGNvbnN0IHVfY2hhciAqZW9tKQotewotCWNvbnN0IHVfY2hhciAqY3AgPSBidWYgKyBIRklYRURTWjsKLQlpbnQgcWRjb3VudCA9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZiktPnFkY291bnQpOwotCi0Jd2hpbGUgKHFkY291bnQtLSA+IDApIHsKLQkJY2hhciB0bmFtZVtNQVhETkFNRSsxXTsKLQkJaW50IG4sIHR0eXBlLCB0Y2xhc3M7Ci0KLQkJbiA9IGRuX2V4cGFuZChidWYsIGVvbSwgY3AsIHRuYW1lLCBzaXplb2YgdG5hbWUpOwotCQlpZiAobiA8IDApCi0JCQlyZXR1cm4gKC0xKTsKLQkJY3AgKz0gbjsKLQkJaWYgKGNwICsgMiAqIElOVDE2U1ogPiBlb20pCi0JCQlyZXR1cm4gKC0xKTsKLQkJdHR5cGUgPSBuc19nZXQxNihjcCk7IGNwICs9IElOVDE2U1o7Ci0JCXRjbGFzcyA9IG5zX2dldDE2KGNwKTsgY3AgKz0gSU5UMTZTWjsKLQkJaWYgKHR0eXBlID09IHR5cGUgJiYgdGNsYXNzID09IGNsYXNzICYmCi0JCSAgICBuc19zYW1lbmFtZSh0bmFtZSwgbmFtZSkgPT0gMSkKLQkJCXJldHVybiAoMSk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qIGludAotICogcmVzX3F1ZXJpZXNtYXRjaChidWYxLCBlb20xLCBidWYyLCBlb20yKQotICoJaXMgdGhlcmUgYSAxOjEgbWFwcGluZyBvZiAobmFtZSx0eXBlLGNsYXNzKQotICoJaW4gKGJ1ZjEsZW9tMSkgYW5kIChidWYyLGVvbTIpPwotICogcmV0dXJuczoKLSAqCS0xIDogZm9ybWF0IGVycm9yCi0gKgkwICA6IG5vdCBhIDE6MSBtYXBwaW5nCi0gKgk+MCA6IGlzIGEgMToxIG1hcHBpbmcKLSAqIGF1dGhvcjoKLSAqCXBhdWwgdml4aWUsIDI5bWF5OTQKLSAqLwotaW50Ci1yZXNfcXVlcmllc21hdGNoKGNvbnN0IHVfY2hhciAqYnVmMSwgY29uc3QgdV9jaGFyICplb20xLAotCQkgY29uc3QgdV9jaGFyICpidWYyLCBjb25zdCB1X2NoYXIgKmVvbTIpCi17Ci0JY29uc3QgdV9jaGFyICpjcCA9IGJ1ZjEgKyBIRklYRURTWjsKLQlpbnQgcWRjb3VudCA9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZjEpLT5xZGNvdW50KTsKLQotCWlmIChidWYxICsgSEZJWEVEU1ogPiBlb20xIHx8IGJ1ZjIgKyBIRklYRURTWiA+IGVvbTIpCi0JCXJldHVybiAoLTEpOwotCi0JLyoKLQkgKiBPbmx5IGhlYWRlciBzZWN0aW9uIHByZXNlbnQgaW4gcmVwbGllcyB0bwotCSAqIGR5bmFtaWMgdXBkYXRlIHBhY2tldHMuCi0JICovCi0JaWYgKCgoKGNvbnN0IEhFQURFUiAqKShjb25zdCB2b2lkICopYnVmMSktPm9wY29kZSA9PSBuc19vX3VwZGF0ZSkgJiYKLQkgICAgKCgoY29uc3QgSEVBREVSICopKGNvbnN0IHZvaWQgKilidWYyKS0+b3Bjb2RlID09IG5zX29fdXBkYXRlKSkKLQkJcmV0dXJuICgxKTsKLQotCWlmIChxZGNvdW50ICE9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZjIpLT5xZGNvdW50KSkKLQkJcmV0dXJuICgwKTsKLQl3aGlsZSAocWRjb3VudC0tID4gMCkgewotCQljaGFyIHRuYW1lW01BWEROQU1FKzFdOwotCQlpbnQgbiwgdHR5cGUsIHRjbGFzczsKLQotCQluID0gZG5fZXhwYW5kKGJ1ZjEsIGVvbTEsIGNwLCB0bmFtZSwgc2l6ZW9mIHRuYW1lKTsKLQkJaWYgKG4gPCAwKQotCQkJcmV0dXJuICgtMSk7Ci0JCWNwICs9IG47Ci0JCWlmIChjcCArIDIgKiBJTlQxNlNaID4gZW9tMSkKLQkJCXJldHVybiAoLTEpOwotCQl0dHlwZSA9IG5zX2dldDE2KGNwKTsJY3AgKz0gSU5UMTZTWjsKLQkJdGNsYXNzID0gbnNfZ2V0MTYoY3ApOyBjcCArPSBJTlQxNlNaOwotCQlpZiAoIXJlc19uYW1laW5xdWVyeSh0bmFtZSwgdHR5cGUsIHRjbGFzcywgYnVmMiwgZW9tMikpCi0JCQlyZXR1cm4gKDApOwotCX0KLQlyZXR1cm4gKDEpOwotfQotCi0KLWludAotcmVzX25zZW5kKHJlc19zdGF0ZSBzdGF0cCwKLQkgIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeikKLXsKLQlpbnQgZ290c29tZXdoZXJlLCB0ZXJybm8sIHRyeSwgdl9jaXJjdWl0LCByZXNwbGVuLCBucywgbjsKLQljaGFyIGFidWZbTklfTUFYSE9TVF07Ci0jaWYgVVNFX1JFU09MVl9DQUNIRQotICAgICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGU7Ci0gICAgICAgIFJlc29sdkNhY2hlU3RhdHVzICAgICBjYWNoZV9zdGF0dXMgPSBSRVNPTFZfQ0FDSEVfVU5TVVBQT1JURUQ7Ci0jZW5kaWYKLQotI2lmICFVU0VfUkVTT0xWX0NBQ0hFCi0JaWYgKHN0YXRwLT5uc2NvdW50ID09IDApIHsKLQkJZXJybm8gPSBFU1JDSDsKLQkJcmV0dXJuICgtMSk7Ci0JfQotI2VuZGlmCi0KLQlpZiAoYW5zc2l6IDwgSEZJWEVEU1opIHsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwgKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1FVRVJZKSwKLQkJKHN0ZG91dCwgIjs7IHJlc19zZW5kKClcbiIpLCBidWYsIGJ1Zmxlbik7Ci0Jdl9jaXJjdWl0ID0gKHN0YXRwLT5vcHRpb25zICYgUkVTX1VTRVZDKSB8fCBidWZsZW4gPiBQQUNLRVRTWjsKLQlnb3Rzb21ld2hlcmUgPSAwOwotCXRlcnJubyA9IEVUSU1FRE9VVDsKLQotI2lmIFVTRV9SRVNPTFZfQ0FDSEUKLQkvLyBnZXQgdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZXJmYWNlCi0JY2FjaGUgPSBfX2dldF9yZXNfY2FjaGUoc3RhdHAtPmlmYWNlKTsKLQlpZiAoY2FjaGUgIT0gTlVMTCkgewotCQlpbnQgIGFuc2xlbiA9IDA7Ci0JCWNhY2hlX3N0YXR1cyA9IF9yZXNvbHZfY2FjaGVfbG9va3VwKAotCQkJCWNhY2hlLCBidWYsIGJ1ZmxlbiwKLQkJCQlhbnMsIGFuc3NpeiwgJmFuc2xlbik7Ci0KLQkJaWYgKGNhY2hlX3N0YXR1cyA9PSBSRVNPTFZfQ0FDSEVfRk9VTkQpIHsKLQkJCXJldHVybiBhbnNsZW47Ci0JCX0gZWxzZSB7Ci0JCQkvLyBoYWQgYSBjYWNoZSBtaXNzIGZvciBhIGtub3duIGludGVyZmFjZSwgc28gcG9wdWxhdGUgdGhlIHRocmVhZCBwcml2YXRlCi0JCQkvLyBkYXRhIHNvIHRoZSBub3JtYWwgcmVzb2x2ZSBwYXRoIGNhbiBkbyBpdHMgdGhpbmcKLQkJCV9yZXNvbHZfcG9wdWxhdGVfcmVzX2Zvcl9pZmFjZShzdGF0cCk7Ci0JCX0KLQl9Ci0KLQlpZiAoc3RhdHAtPm5zY291bnQgPT0gMCkgewotCQllcnJubyA9IEVTUkNIOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0jZW5kaWYKLQotCS8qCi0JICogSWYgdGhlIG5zX2FkZHJfbGlzdCBpbiB0aGUgcmVzb2x2ZXIgY29udGV4dCBoYXMgY2hhbmdlZCwgdGhlbgotCSAqIGludmFsaWRhdGUgb3VyIGNhY2hlZCBjb3B5IGFuZCB0aGUgYXNzb2NpYXRlZCB0aW1pbmcgZGF0YS4KLQkgKi8KLQlpZiAoRVhUKHN0YXRwKS5uc2NvdW50ICE9IDApIHsKLQkJaW50IG5lZWRjbG9zZSA9IDA7Ci0JCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHBlZXI7Ci0JCXNvY2tsZW5fdCBwZWVybGVuOwotCi0JCWlmIChFWFQoc3RhdHApLm5zY291bnQgIT0gc3RhdHAtPm5zY291bnQpCi0JCQluZWVkY2xvc2UrKzsKLQkJZWxzZQotCQkJZm9yIChucyA9IDA7IG5zIDwgc3RhdHAtPm5zY291bnQ7IG5zKyspIHsKLQkJCQlpZiAoc3RhdHAtPm5zYWRkcl9saXN0W25zXS5zaW5fZmFtaWx5ICYmCi0JCQkJICAgICFzb2NrX2VxKChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZzdGF0cC0+bnNhZGRyX2xpc3RbbnNdLAotCQkJCQkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuc10pKSB7Ci0JCQkJCW5lZWRjbG9zZSsrOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlpZiAoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9PSAtMSkKLQkJCQkJY29udGludWU7Ci0JCQkJcGVlcmxlbiA9IHNpemVvZihwZWVyKTsKLQkJCQlpZiAoZ2V0cGVlcm5hbWUoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSwKLQkJCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsICZwZWVybGVuKSA8IDApIHsKLQkJCQkJbmVlZGNsb3NlKys7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAoIXNvY2tfZXEoKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsCi0JCQkJICAgIGdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpKSkgewotCQkJCQluZWVkY2xvc2UrKzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQlpZiAobmVlZGNsb3NlKSB7Ci0JCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJCUVYVChzdGF0cCkubnNjb3VudCA9IDA7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE1heWJlIGluaXRpYWxpemUgb3VyIHByaXZhdGUgY29weSBvZiB0aGUgbnNfYWRkcl9saXN0LgotCSAqLwotCWlmIChFWFQoc3RhdHApLm5zY291bnQgPT0gMCkgewotCQlmb3IgKG5zID0gMDsgbnMgPCBzdGF0cC0+bnNjb3VudDsgbnMrKykgewotCQkJRVhUKHN0YXRwKS5uc3RpbWVzW25zXSA9IFJFU19NQVhUSU1FOwotCQkJRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9IC0xOwotCQkJaWYgKCFzdGF0cC0+bnNhZGRyX2xpc3RbbnNdLnNpbl9mYW1pbHkpCi0JCQkJY29udGludWU7Ci0JCQlFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuc10uc2luID0KLQkJCQkgc3RhdHAtPm5zYWRkcl9saXN0W25zXTsKLQkJfQotCQlFWFQoc3RhdHApLm5zY291bnQgPSBzdGF0cC0+bnNjb3VudDsKLQl9Ci0KLQkvKgotCSAqIFNvbWUgcmVzb2x2ZXJzIHdhbnQgdG8gZXZlbiBvdXQgdGhlIGxvYWQgb24gdGhlaXIgbmFtZXNlcnZlcnMuCi0JICogTm90ZSB0aGF0IFJFU19CTEFTVCBvdmVycmlkZXMgUkVTX1JPVEFURS4KLQkgKi8KLQlpZiAoKHN0YXRwLT5vcHRpb25zICYgUkVTX1JPVEFURSkgIT0gMFUgJiYKLQkgICAgKHN0YXRwLT5vcHRpb25zICYgUkVTX0JMQVNUKSA9PSAwVSkgewotCQl1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gaW51OwotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gaW5hOwotCQlpbnQgbGFzdG5zID0gc3RhdHAtPm5zY291bnQgLSAxOwotCQlpbnQgZmQ7Ci0JCXVfaW50MTZfdCBuc3RpbWU7Ci0KLQkJaWYgKEVYVChzdGF0cCkuZXh0ICE9IE5VTEwpCi0JCQlpbnUgPSBFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1swXTsKLQkJaW5hID0gc3RhdHAtPm5zYWRkcl9saXN0WzBdOwotCQlmZCA9IEVYVChzdGF0cCkubnNzb2Nrc1swXTsKLQkJbnN0aW1lID0gRVhUKHN0YXRwKS5uc3RpbWVzWzBdOwotCQlmb3IgKG5zID0gMDsgbnMgPCBsYXN0bnM7IG5zKyspIHsKLQkJCWlmIChFWFQoc3RhdHApLmV4dCAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuc10gPQotCQkJCQlFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tucyArIDFdOwotCQkJc3RhdHAtPm5zYWRkcl9saXN0W25zXSA9IHN0YXRwLT5uc2FkZHJfbGlzdFtucyArIDFdOwotCQkJRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9IEVYVChzdGF0cCkubnNzb2Nrc1tucyArIDFdOwotCQkJRVhUKHN0YXRwKS5uc3RpbWVzW25zXSA9IEVYVChzdGF0cCkubnN0aW1lc1tucyArIDFdOwotCQl9Ci0JCWlmIChFWFQoc3RhdHApLmV4dCAhPSBOVUxMKQotCQkJRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbGFzdG5zXSA9IGludTsKLQkJc3RhdHAtPm5zYWRkcl9saXN0W2xhc3Ruc10gPSBpbmE7Ci0JCUVYVChzdGF0cCkubnNzb2Nrc1tsYXN0bnNdID0gZmQ7Ci0JCUVYVChzdGF0cCkubnN0aW1lc1tsYXN0bnNdID0gbnN0aW1lOwotCX0KLQotCS8qCi0JICogU2VuZCByZXF1ZXN0LCBSRVRSWSB0aW1lcywgb3IgdW50aWwgc3VjY2Vzc2Z1bC4KLQkgKi8KLQlmb3IgKHRyeSA9IDA7IHRyeSA8IHN0YXRwLT5yZXRyeTsgdHJ5KyspIHsKLQkgICAgZm9yIChucyA9IDA7IG5zIDwgc3RhdHAtPm5zY291bnQ7IG5zKyspIHsKLQkJc3RydWN0IHNvY2thZGRyICpuc2FwOwotCQlpbnQgbnNhcGxlbjsKLQkJbnNhcCA9IGdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOwotCQluc2FwbGVuID0gZ2V0X3NhbGVuKG5zYXApOwotCQlzdGF0cC0+X2ZsYWdzICY9IH5SRVNfRl9MQVNUTUFTSzsKLQkJc3RhdHAtPl9mbGFncyB8PSAobnMgPDwgUkVTX0ZfTEFTVFNISUZUKTsKLSBzYW1lX25zOgotCQlpZiAoc3RhdHAtPnFob29rKSB7Ci0JCQlpbnQgZG9uZSA9IDAsIGxvb3BzID0gMDsKLQotCQkJZG8gewotCQkJCXJlc19zZW5kaG9va2FjdCBhY3Q7Ci0KLQkJCQlhY3QgPSAoKnN0YXRwLT5xaG9vaykoJm5zYXAsICZidWYsICZidWZsZW4sCi0JCQkJCQkgICAgICBhbnMsIGFuc3NpeiwgJnJlc3BsZW4pOwotCQkJCXN3aXRjaCAoYWN0KSB7Ci0JCQkJY2FzZSByZXNfZ29haGVhZDoKLQkJCQkJZG9uZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgcmVzX25leHRuczoKLQkJCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQkJCWdvdG8gbmV4dF9uczsKLQkJCQljYXNlIHJlc19kb25lOgotCQkJCQlyZXR1cm4gKHJlc3BsZW4pOwotCQkJCWNhc2UgcmVzX21vZGlmaWVkOgotCQkJCQkvKiBnaXZlIHRoZSBob29rIGFub3RoZXIgdHJ5ICovCi0JCQkJCWlmICgrK2xvb3BzIDwgNDIpIC8qZG91ZyBhZGFtcyovCi0JCQkJCQlicmVhazsKLQkJCQkJLypGQUxMVEhST1VHSCovCi0JCQkJY2FzZSByZXNfZXJyb3I6Ci0JCQkJCS8qRkFMTFRIUk9VR0gqLwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWdvdG8gZmFpbDsKLQkJCQl9Ci0JCQl9IHdoaWxlICghZG9uZSk7Ci0JCX0KLQotCQlEcHJpbnQoKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgJiYKLQkJCWdldG5hbWVpbmZvKG5zYXAsIChzb2NrbGVuX3QpbnNhcGxlbiwgYWJ1Ziwgc2l6ZW9mKGFidWYpLAotCQkJCU5VTEwsIDAsIG5pZmxhZ3MpID09IDApLAotCQkJCShzdGRvdXQsICI7OyBRdWVyeWluZyBzZXJ2ZXIgKCMgJWQpIGFkZHJlc3MgPSAlc1xuIiwKLQkJCQlucyArIDEsIGFidWYpKTsKLQotCi0JCWlmICh2X2NpcmN1aXQpIHsKLQkJCS8qIFVzZSBWQzsgYXQgbW9zdCBvbmUgYXR0ZW1wdCBwZXIgc2VydmVyLiAqLwotCQkJdHJ5ID0gc3RhdHAtPnJldHJ5OwotCi0JCQluID0gc2VuZF92YyhzdGF0cCwgYnVmLCBidWZsZW4sIGFucywgYW5zc2l6LCAmdGVycm5vLAotCQkJCSAgICBucyk7Ci0KLQkJCWlmIChEQkcpIHsKLQkJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAotCQkJCQkidXNlZCBzZW5kX3ZjICVkXG4iLCBuKTsKLQkJCX0KLQotCQkJaWYgKG4gPCAwKQotCQkJCWdvdG8gZmFpbDsKLQkJCWlmIChuID09IDApCi0JCQkJZ290byBuZXh0X25zOwotCQkJcmVzcGxlbiA9IG47Ci0JCX0gZWxzZSB7Ci0JCQkvKiBVc2UgZGF0YWdyYW1zLiAqLwotCQkJaWYgKERCRykgewotCQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2luZyBzZW5kX2RnXG4iKTsKLQkJCX0KLQotCQkJbiA9IHNlbmRfZGcoc3RhdHAsIGJ1ZiwgYnVmbGVuLCBhbnMsIGFuc3NpeiwgJnRlcnJubywKLQkJCQkgICAgbnMsICZ2X2NpcmN1aXQsICZnb3Rzb21ld2hlcmUpOwotCQkJaWYgKERCRykgewotCQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2VkIHNlbmRfZGcgJWRcbiIsbik7Ci0JCQl9Ci0KLQkJCWlmIChuIDwgMCkKLQkJCQlnb3RvIGZhaWw7Ci0JCQlpZiAobiA9PSAwKQotCQkJCWdvdG8gbmV4dF9uczsKLQkJCWlmIChEQkcpIHsKLQkJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLCAidGltZT0lbGRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUoTlVMTCkpOwotCQkJfQotCQkJaWYgKHZfY2lyY3VpdCkKLQkJCQlnb3RvIHNhbWVfbnM7Ci0JCQlyZXNwbGVuID0gbjsKLQkJfQotCi0JCURwcmludCgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8Ci0JCSAgICAgICAoKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSAmJgotCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX0hFQUQxKSksCi0JCSAgICAgICAoc3Rkb3V0LCAiOzsgZ290IGFuc3dlcjpcbiIpKTsKLQotCQlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwKLQkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSksCi0JCQkoc3Rkb3V0LCAiJXMiLCAiIiksCi0JCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOwotCi0jaWYgVVNFX1JFU09MVl9DQUNIRQotICAgICAgICAgICAgICAgIGlmIChjYWNoZV9zdGF0dXMgPT0gUkVTT0xWX0NBQ0hFX05PVEZPVU5EKSB7Ci0gICAgICAgICAgICAgICAgICAgIF9yZXNvbHZfY2FjaGVfYWRkKGNhY2hlLCBidWYsIGJ1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zLCByZXNwbGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLQkJLyoKLQkJICogSWYgd2UgaGF2ZSB0ZW1wb3JhcmlseSBvcGVuZWQgYSB2aXJ0dWFsIGNpcmN1aXQsCi0JCSAqIG9yIGlmIHdlIGhhdmVuJ3QgYmVlbiBhc2tlZCB0byBrZWVwIGEgc29ja2V0IG9wZW4sCi0JCSAqIGNsb3NlIHRoZSBzb2NrZXQuCi0JCSAqLwotCQlpZiAoKHZfY2lyY3VpdCAmJiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfVVNFVkMpID09IDBVKSB8fAotCQkgICAgKHN0YXRwLT5vcHRpb25zICYgUkVTX1NUQVlPUEVOKSA9PSAwVSkgewotCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCX0KLQkJaWYgKHN0YXRwLT5yaG9vaykgewotCQkJaW50IGRvbmUgPSAwLCBsb29wcyA9IDA7Ci0KLQkJCWRvIHsKLQkJCQlyZXNfc2VuZGhvb2thY3QgYWN0OwotCi0JCQkJYWN0ID0gKCpzdGF0cC0+cmhvb2spKG5zYXAsIGJ1ZiwgYnVmbGVuLAotCQkJCQkJICAgICAgYW5zLCBhbnNzaXosICZyZXNwbGVuKTsKLQkJCQlzd2l0Y2ggKGFjdCkgewotCQkJCWNhc2UgcmVzX2dvYWhlYWQ6Ci0JCQkJY2FzZSByZXNfZG9uZToKLQkJCQkJZG9uZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgcmVzX25leHRuczoKLQkJCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQkJCWdvdG8gbmV4dF9uczsKLQkJCQljYXNlIHJlc19tb2RpZmllZDoKLQkJCQkJLyogZ2l2ZSB0aGUgaG9vayBhbm90aGVyIHRyeSAqLwotCQkJCQlpZiAoKytsb29wcyA8IDQyKSAvKmRvdWcgYWRhbXMqLwotCQkJCQkJYnJlYWs7Ci0JCQkJCS8qRkFMTFRIUk9VR0gqLwotCQkJCWNhc2UgcmVzX2Vycm9yOgotCQkJCQkvKkZBTExUSFJPVUdIKi8KLQkJCQlkZWZhdWx0OgotCQkJCQlnb3RvIGZhaWw7Ci0JCQkJfQotCQkJfSB3aGlsZSAoIWRvbmUpOwotCi0JCX0KLQkJcmV0dXJuIChyZXNwbGVuKTsKLSBuZXh0X25zOiA7Ci0JICAgfSAvKmZvcmVhY2ggbnMqLwotCX0gLypmb3JlYWNoIHJldHJ5Ki8KLQlyZXNfbmNsb3NlKHN0YXRwKTsKLQlpZiAoIXZfY2lyY3VpdCkgewotCQlpZiAoIWdvdHNvbWV3aGVyZSkKLQkJCWVycm5vID0gRUNPTk5SRUZVU0VEOwkvKiBubyBuYW1lc2VydmVycyBmb3VuZCAqLwotCQllbHNlCi0JCQllcnJubyA9IEVUSU1FRE9VVDsJLyogbm8gYW5zd2VyIG9idGFpbmVkICovCi0JfSBlbHNlCi0JCWVycm5vID0gdGVycm5vOwotCi0jaWYgVVNFX1JFU09MVl9DQUNIRQotICAgICAgICBfcmVzb2x2X2NhY2hlX3F1ZXJ5X2ZhaWxlZChjYWNoZSwgYnVmLCBidWZsZW4pOwotI2VuZGlmCi0KLQlyZXR1cm4gKC0xKTsKLSBmYWlsOgotI2lmIFVTRV9SRVNPTFZfQ0FDSEUKLQlfcmVzb2x2X2NhY2hlX3F1ZXJ5X2ZhaWxlZChjYWNoZSwgYnVmLCBidWZsZW4pOwotI2VuZGlmCi0JcmVzX25jbG9zZShzdGF0cCk7Ci0JcmV0dXJuICgtMSk7Ci19Ci0KLS8qIFByaXZhdGUgKi8KLQotc3RhdGljIGludAotZ2V0X3NhbGVuKHNhKQotCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2E7Ci17Ci0KLSNpZmRlZiBIQVZFX1NBX0xFTgotCS8qIFRoZXJlIGFyZSBwZW9wbGUgZG8gbm90IHNldCBzYV9sZW4uICBCZSBmb3JnaXZpbmcgdG8gdGhlbS4gKi8KLQlpZiAoc2EtPnNhX2xlbikKLQkJcmV0dXJuIChzYS0+c2FfbGVuKTsKLSNlbmRpZgotCi0JaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKLQkJcmV0dXJuIChzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0JZWxzZSBpZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKLQkJcmV0dXJuIChzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCWVsc2UKLQkJcmV0dXJuICgwKTsJLyogdW5rbm93biwgZGllIG9uIGNvbm5lY3QgKi8KLX0KLQotLyoKLSAqIHBpY2sgYXBwcm9wcmlhdGUgbnNhZGRyX2xpc3QgZm9yIHVzZS4gIHNlZSByZXNfaW5pdCgpIGZvciBpbml0aWFsaXphdGlvbi4KLSAqLwotc3RhdGljIHN0cnVjdCBzb2NrYWRkciAqCi1nZXRfbnNhZGRyKHN0YXRwLCBuKQotCXJlc19zdGF0ZSBzdGF0cDsKLQlzaXplX3QgbjsKLXsKLQotCWlmICghc3RhdHAtPm5zYWRkcl9saXN0W25dLnNpbl9mYW1pbHkgJiYgRVhUKHN0YXRwKS5leHQpIHsKLQkJLyoKLQkJICogLSBFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuXSBob2xkcyBhbiBhZGRyZXNzIHRoYXQgaXMgbGFyZ2VyCi0JCSAqICAgdGhhbiBzdHJ1Y3Qgc29ja2FkZHIsIGFuZAotCQkgKiAtIHVzZXIgY29kZSBkaWQgbm90IHVwZGF0ZSBzdGF0cC0+bnNhZGRyX2xpc3Rbbl0uCi0JCSAqLwotCQlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJkVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW25dOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIC0gdXNlciBjb2RlIHVwZGF0ZWQgc3RhdHAtPm5zYWRkcl9saXN0W25dLCBvcgotCQkgKiAtIHN0YXRwLT5uc2FkZHJfbGlzdFtuXSBoYXMgdGhlIHNhbWUgY29udGVudCBhcwotCQkgKiAgIEVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW25dLgotCQkgKi8KLQkJcmV0dXJuIChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZzdGF0cC0+bnNhZGRyX2xpc3Rbbl07Ci0JfQotfQotCi1zdGF0aWMgaW50IGdldF90aW1lb3V0KGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgY29uc3QgaW50IG5zKQotewotCWludCB0aW1lb3V0ID0gKHN0YXRwLT5yZXRyYW5zIDw8IG5zKTsKLQlpZiAobnMgPiAwKSB7Ci0JCXRpbWVvdXQgLz0gc3RhdHAtPm5zY291bnQ7Ci0JfQotCWlmICh0aW1lb3V0IDw9IDApIHsKLQkJdGltZW91dCA9IDE7Ci0JfQotCWlmIChEQkcpIHsKLQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwgInVzaW5nIHRpbWVvdXQgb2YgJWQgc2VjXG4iLCB0aW1lb3V0KTsKLQl9Ci0KLQlyZXR1cm4gdGltZW91dDsKLX0KLQotc3RhdGljIGludAotc2VuZF92YyhyZXNfc3RhdGUgc3RhdHAsCi0JY29uc3QgdV9jaGFyICpidWYsIGludCBidWZsZW4sIHVfY2hhciAqYW5zLCBpbnQgYW5zc2l6LAotCWludCAqdGVycm5vLCBpbnQgbnMpCi17Ci0JY29uc3QgSEVBREVSICpocCA9IChjb25zdCBIRUFERVIgKikoY29uc3Qgdm9pZCAqKWJ1ZjsKLQlIRUFERVIgKmFuaHAgPSAoSEVBREVSICopKHZvaWQgKilhbnM7Ci0Jc3RydWN0IHNvY2thZGRyICpuc2FwOwotCWludCBuc2FwbGVuOwotCWludCB0cnVuY2F0aW5nLCBjb25ucmVzZXQsIHJlc3BsZW4sIG47Ci0Jc3RydWN0IGlvdmVjIGlvdlsyXTsKLQl1X3Nob3J0IGxlbjsKLQl1X2NoYXIgKmNwOwotCXZvaWQgKnRtcDsKLQotCWlmIChEQkcpIHsKLQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwgInVzaW5nIHNlbmRfdmNcbiIpOwotCX0KLQotCW5zYXAgPSBnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKTsKLQluc2FwbGVuID0gZ2V0X3NhbGVuKG5zYXApOwotCi0JY29ubnJlc2V0ID0gMDsKLSBzYW1lX25zOgotCXRydW5jYXRpbmcgPSAwOwotCi0JLyogQXJlIHdlIHN0aWxsIHRhbGtpbmcgdG8gd2hvbSB3ZSB3YW50IHRvIHRhbGsgdG8/ICovCi0JaWYgKHN0YXRwLT5fdmNzb2NrID49IDAgJiYgKHN0YXRwLT5fZmxhZ3MgJiBSRVNfRl9WQykgIT0gMCkgewotCQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBwZWVyOwotCQlzb2NrbGVuX3Qgc2l6ZSA9IHNpemVvZiBwZWVyOwotCQlpbnQgb2xkX21hcms7Ci0JCWludCBtYXJrX3NpemUgPSBzaXplb2Yob2xkX21hcmspOwotCQlpZiAoZ2V0cGVlcm5hbWUoc3RhdHAtPl92Y3NvY2ssCi0JCQkJKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsICZzaXplKSA8IDAgfHwKLQkJICAgICFzb2NrX2VxKChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZwZWVyLCBuc2FwKSB8fAotCQkJZ2V0c29ja29wdChzdGF0cC0+X3Zjc29jaywgU09MX1NPQ0tFVCwgU09fTUFSSywgJm9sZF9tYXJrLCAmbWFya19zaXplKSA8IDAgfHwKLQkJCW9sZF9tYXJrICE9IHN0YXRwLT5fbWFyaykgewotCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQlzdGF0cC0+X2ZsYWdzICY9IH5SRVNfRl9WQzsKLQkJfQotCX0KLQotCWlmIChzdGF0cC0+X3Zjc29jayA8IDAgfHwgKHN0YXRwLT5fZmxhZ3MgJiBSRVNfRl9WQykgPT0gMCkgewotCQlpZiAoc3RhdHAtPl92Y3NvY2sgPj0gMCkKLQkJCXJlc19uY2xvc2Uoc3RhdHApOwotCi0JCXN0YXRwLT5fdmNzb2NrID0gc29ja2V0KG5zYXAtPnNhX2ZhbWlseSwgU09DS19TVFJFQU0sIDApOwotCQlpZiAoc3RhdHAtPl92Y3NvY2sgPiBoaWdoZXN0RkQpIHsKLQkJCXJlc19uY2xvc2Uoc3RhdHApOwotCQkJZXJybm8gPSBFTk9UU09DSzsKLQkJfQotCQlpZiAoc3RhdHAtPl92Y3NvY2sgPCAwKSB7Ci0JCQlzd2l0Y2ggKGVycm5vKSB7Ci0JCQljYXNlIEVQUk9UT05PU1VQUE9SVDoKLSNpZmRlZiBFUEZOT1NVUFBPUlQKLQkJCWNhc2UgRVBGTk9TVVBQT1JUOgotI2VuZGlmCi0JCQljYXNlIEVBRk5PU1VQUE9SVDoKLQkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNvY2tldCh2YykiLCBlcnJubyk7Ci0JCQkJcmV0dXJuICgwKTsKLQkJCWRlZmF1bHQ6Ci0JCQkJKnRlcnJubyA9IGVycm5vOwotCQkJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic29ja2V0KHZjKSIsIGVycm5vKTsKLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0KLQkJfQotCQlpZiAoc3RhdHAtPl9tYXJrICE9IDApIHsKLQkJCWlmIChzZXRzb2Nrb3B0KHN0YXRwLT5fdmNzb2NrLCBTT0xfU09DS0VULAotCQkJCSAgICAgICAgU09fTUFSSywgJnN0YXRwLT5fbWFyaywgc2l6ZW9mKHN0YXRwLT5fbWFyaykpIDwgMCkgewotCQkJCSp0ZXJybm8gPSBlcnJubzsKLQkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNldHNvY2tvcHQiLCBlcnJubyk7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCQl9Ci0JCWVycm5vID0gMDsKLQkJaWYgKHJhbmRvbV9iaW5kKHN0YXRwLT5fdmNzb2NrLG5zYXAtPnNhX2ZhbWlseSkgPCAwKSB7Ci0JCQkqdGVycm5vID0gZXJybm87Ci0JCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImJpbmQvdmMiLCBlcnJubywgbnNhcCwKLQkJCSAgICBuc2FwbGVuKTsKLQkJCXJlc19uY2xvc2Uoc3RhdHApOwotCQkJcmV0dXJuICgwKTsKLQkJfQotCQlpZiAoY29ubmVjdF93aXRoX3RpbWVvdXQoc3RhdHAtPl92Y3NvY2ssIG5zYXAsIChzb2NrbGVuX3QpbnNhcGxlbiwKLQkJCQlnZXRfdGltZW91dChzdGF0cCwgbnMpKSA8IDApIHsKLQkJCSp0ZXJybm8gPSBlcnJubzsKLQkJCUFlcnJvcihzdGF0cCwgc3RkZXJyLCAiY29ubmVjdC92YyIsIGVycm5vLCBuc2FwLAotCQkJICAgIG5zYXBsZW4pOwotCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JCXN0YXRwLT5fZmxhZ3MgfD0gUkVTX0ZfVkM7Ci0JfQotCi0JLyoKLQkgKiBTZW5kIGxlbmd0aCAmIG1lc3NhZ2UKLQkgKi8KLQluc19wdXQxNigodV9zaG9ydClidWZsZW4sICh1X2NoYXIqKSh2b2lkICopJmxlbik7Ci0JaW92WzBdID0gZXZDb25zSW92ZWMoJmxlbiwgSU5UMTZTWik7Ci0JREVfQ09OU1QoYnVmLCB0bXApOwotCWlvdlsxXSA9IGV2Q29uc0lvdmVjKHRtcCwgKHNpemVfdClidWZsZW4pOwotCWlmICh3cml0ZXYoc3RhdHAtPl92Y3NvY2ssIGlvdiwgMikgIT0gKElOVDE2U1ogKyBidWZsZW4pKSB7Ci0JCSp0ZXJybm8gPSBlcnJubzsKLQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJ3cml0ZSBmYWlsZWQiLCBlcnJubyk7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQlyZXR1cm4gKDApOwotCX0KLQkvKgotCSAqIFJlY2VpdmUgbGVuZ3RoICYgcmVzcG9uc2UKLQkgKi8KLSByZWFkX2xlbjoKLQljcCA9IGFuczsKLQlsZW4gPSBJTlQxNlNaOwotCXdoaWxlICgobiA9IHJlYWQoc3RhdHAtPl92Y3NvY2ssIChjaGFyICopY3AsIChzaXplX3QpbGVuKSkgPiAwKSB7Ci0JCWNwICs9IG47Ci0JCWlmICgobGVuIC09IG4pID09IDApCi0JCQlicmVhazsKLQl9Ci0JaWYgKG4gPD0gMCkgewotCQkqdGVycm5vID0gZXJybm87Ci0JCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAicmVhZCBmYWlsZWQiLCBlcnJubyk7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQkvKgotCQkgKiBBIGxvbmcgcnVubmluZyBwcm9jZXNzIG1pZ2h0IGdldCBpdHMgVENQCi0JCSAqIGNvbm5lY3Rpb24gcmVzZXQgaWYgdGhlIHJlbW90ZSBzZXJ2ZXIgd2FzCi0JCSAqIHJlc3RhcnRlZC4gIFJlcXVlcnkgdGhlIHNlcnZlciBpbnN0ZWFkIG9mCi0JCSAqIHRyeWluZyBhIG5ldyBvbmUuICBXaGVuIHRoZXJlIGlzIG9ubHkgb25lCi0JCSAqIHNlcnZlciwgdGhpcyBtZWFucyB0aGF0IGEgcXVlcnkgbWlnaHQgd29yawotCQkgKiBpbnN0ZWFkIG9mIGZhaWxpbmcuICBXZSBvbmx5IGFsbG93IG9uZSByZXNldAotCQkgKiBwZXIgcXVlcnkgdG8gcHJldmVudCBsb29waW5nLgotCQkgKi8KLQkJaWYgKCp0ZXJybm8gPT0gRUNPTk5SRVNFVCAmJiAhY29ubnJlc2V0KSB7Ci0JCQljb25ucmVzZXQgPSAxOwotCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQlnb3RvIHNhbWVfbnM7Ci0JCX0KLQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCXJlc3BsZW4gPSBuc19nZXQxNihhbnMpOwotCWlmIChyZXNwbGVuID4gYW5zc2l6KSB7Ci0JCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKLQkJICAgICAgIChzdGRvdXQsICI7OyByZXNwb25zZSB0cnVuY2F0ZWRcbiIpCi0JCSAgICAgICApOwotCQl0cnVuY2F0aW5nID0gMTsKLQkJbGVuID0gYW5zc2l6OwotCX0gZWxzZQotCQlsZW4gPSByZXNwbGVuOwotCWlmIChsZW4gPCBIRklYRURTWikgewotCQkvKgotCQkgKiBVbmRlcnNpemVkIG1lc3NhZ2UuCi0JCSAqLwotCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCi0JCSAgICAgICAoc3Rkb3V0LCAiOzsgdW5kZXJzaXplZDogJWRcbiIsIGxlbikpOwotCQkqdGVycm5vID0gRU1TR1NJWkU7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQlyZXR1cm4gKDApOwotCX0KLQljcCA9IGFuczsKLQl3aGlsZSAobGVuICE9IDAgJiYgKG4gPSByZWFkKHN0YXRwLT5fdmNzb2NrLCAoY2hhciAqKWNwLCAoc2l6ZV90KWxlbikpID4gMCl7Ci0JCWNwICs9IG47Ci0JCWxlbiAtPSBuOwotCX0KLQlpZiAobiA8PSAwKSB7Ci0JCSp0ZXJybm8gPSBlcnJubzsKLQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJyZWFkKHZjKSIsIGVycm5vKTsKLQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCWlmICh0cnVuY2F0aW5nKSB7Ci0JCS8qCi0JCSAqIEZsdXNoIHJlc3Qgb2YgYW5zd2VyIHNvIGNvbm5lY3Rpb24gc3RheXMgaW4gc3luY2guCi0JCSAqLwotCQlhbmhwLT50YyA9IDE7Ci0JCWxlbiA9IHJlc3BsZW4gLSBhbnNzaXo7Ci0JCXdoaWxlIChsZW4gIT0gMCkgewotCQkJY2hhciBqdW5rW1BBQ0tFVFNaXTsKLQotCQkJbiA9IHJlYWQoc3RhdHAtPl92Y3NvY2ssIGp1bmssCi0JCQkJIChsZW4gPiBzaXplb2YganVuaykgPyBzaXplb2YganVuayA6IGxlbik7Ci0JCQlpZiAobiA+IDApCi0JCQkJbGVuIC09IG47Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBJZiB0aGUgY2FsbGluZyBhcHBsaWNhdGluZyBoYXMgYmFpbGVkIG91dCBvZgotCSAqIGEgcHJldmlvdXMgY2FsbCBhbmQgZmFpbGVkIHRvIGFycmFuZ2UgdG8gaGF2ZQotCSAqIHRoZSBjaXJjdWl0IGNsb3NlZCBvciB0aGUgc2VydmVyIGhhcyBnb3QKLQkgKiBpdHNlbGYgY29uZnVzZWQsIHRoZW4gZHJvcCB0aGUgcGFja2V0IGFuZAotCSAqIHdhaXQgZm9yIHRoZSBjb3JyZWN0IG9uZS4KLQkgKi8KLQlpZiAoaHAtPmlkICE9IGFuaHAtPmlkKSB7Ci0JCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAotCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKLQkJCShzdGRvdXQsICI7OyBvbGQgYW5zd2VyICh1bmV4cGVjdGVkKTpcbiIpLAotCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXo6IHJlc3BsZW4pOwotCQlnb3RvIHJlYWRfbGVuOwotCX0KLQotCS8qCi0JICogQWxsIGlzIHdlbGwsIG9yIHRoZSBlcnJvciBpcyBmYXRhbC4gIFNpZ25hbCB0aGF0IHRoZQotCSAqIG5leHQgbmFtZXNlcnZlciBvdWdodCBub3QgYmUgdHJpZWQuCi0JICovCi0JcmV0dXJuIChyZXNwbGVuKTsKLX0KLQotLyogcmV0dXJuIC0xIG9uIGVycm9yIChlcnJubyBzZXQpLCAwIG9uIHN1Y2Nlc3MgKi8KLXN0YXRpYyBpbnQKLWNvbm5lY3Rfd2l0aF90aW1lb3V0KGludCBzb2NrLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKm5zYXAsIHNvY2tsZW5fdCBzYWxlbiwgaW50IHNlYykKLXsKLQlpbnQgcmVzLCBvcmlnZmxhZ3M7Ci0JZmRfc2V0IHJzZXQsIHdzZXQ7Ci0Jc3RydWN0IHRpbWVzcGVjIG5vdywgdGltZW91dCwgZmluaXNoOwotCi0Jb3JpZ2ZsYWdzID0gZmNudGwoc29jaywgRl9HRVRGTCwgMCk7Ci0JZmNudGwoc29jaywgRl9TRVRGTCwgb3JpZ2ZsYWdzIHwgT19OT05CTE9DSyk7Ci0KLQlyZXMgPSBjb25uZWN0KHNvY2ssIG5zYXAsIHNhbGVuKTsKLQlpZiAocmVzIDwgMCAmJiBlcnJubyAhPSBFSU5QUk9HUkVTUykgewotICAgICAgICAgICAgICAgIHJlcyA9IC0xOwotICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLQl9Ci0JaWYgKHJlcyAhPSAwKSB7Ci0JCW5vdyA9IGV2Tm93VGltZSgpOwotCQl0aW1lb3V0ID0gZXZDb25zVGltZSgobG9uZylzZWMsIDBMKTsKLQkJZmluaXNoID0gZXZBZGRUaW1lKG5vdywgdGltZW91dCk7Ci0JCWlmIChEQkcpIHsKLQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICIgICVkIHNlbmRfdmNcbiIsIHNvY2spOwotCQl9Ci0KLQkJcmVzID0gcmV0cnlpbmdfc2VsZWN0KHNvY2ssICZyc2V0LCAmd3NldCwgJmZpbmlzaCk7Ci0JCWlmIChyZXMgPD0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gLTE7Ci0JCX0KLQl9Ci1kb25lOgotCWZjbnRsKHNvY2ssIEZfU0VURkwsIG9yaWdmbGFncyk7Ci0JaWYgKERCRykgewotCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAotCQkJIiAgJWQgY29ubmVjdF93aXRoX3RpbWVvdXQgcmV0dXJuaW5nICVkXG4iLCBzb2NrLCByZXMpOwotCX0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50Ci1yZXRyeWluZ19zZWxlY3QoY29uc3QgaW50IHNvY2ssIGZkX3NldCAqcmVhZHNldCwgZmRfc2V0ICp3cml0ZXNldCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpmaW5pc2gpCi17Ci0Jc3RydWN0IHRpbWVzcGVjIG5vdywgdGltZW91dDsKLQlpbnQgbiwgZXJyb3I7Ci0Jc29ja2xlbl90IGxlbjsKLQotCi1yZXRyeToKLQlpZiAoREJHKSB7Ci0JCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICIgICVkIHJldHlpbmdfc2VsZWN0XG4iLCBzb2NrKTsKLQl9Ci0KLQlub3cgPSBldk5vd1RpbWUoKTsKLQlpZiAocmVhZHNldCkgewotCQlGRF9aRVJPKHJlYWRzZXQpOwotCQlGRF9TRVQoc29jaywgcmVhZHNldCk7Ci0JfQotCWlmICh3cml0ZXNldCkgewotCQlGRF9aRVJPKHdyaXRlc2V0KTsKLQkJRkRfU0VUKHNvY2ssIHdyaXRlc2V0KTsKLQl9Ci0JaWYgKGV2Q21wVGltZSgqZmluaXNoLCBub3cpID4gMCkKLQkJdGltZW91dCA9IGV2U3ViVGltZSgqZmluaXNoLCBub3cpOwotCWVsc2UKLQkJdGltZW91dCA9IGV2Q29uc1RpbWUoMEwsIDBMKTsKLQotCW4gPSBwc2VsZWN0KHNvY2sgKyAxLCByZWFkc2V0LCB3cml0ZXNldCwgTlVMTCwgJnRpbWVvdXQsIE5VTEwpOwotCWlmIChuID09IDApIHsKLQkJaWYgKERCRykgewotCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICIgbGliYyIsCi0JCQkJIiAgJWQgcmV0cnlpbmdfc2VsZWN0IHRpbWVvdXRcbiIsIHNvY2spOwotCQl9Ci0JCWVycm5vID0gRVRJTUVET1VUOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKG4gPCAwKSB7Ci0JCWlmIChlcnJubyA9PSBFSU5UUikKLQkJCWdvdG8gcmV0cnk7Ci0JCWlmIChEQkcpIHsKLQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsCi0JCQkJIiAgJWQgcmV0cnlpbmdfc2VsZWN0IGdvdCBlcnJvciAlZFxuIixzb2NrLCBuKTsKLQkJfQotCQlyZXR1cm4gbjsKLQl9Ci0JaWYgKChyZWFkc2V0ICYmIEZEX0lTU0VUKHNvY2ssIHJlYWRzZXQpKSB8fCAod3JpdGVzZXQgJiYgRkRfSVNTRVQoc29jaywgd3JpdGVzZXQpKSkgewotCQlsZW4gPSBzaXplb2YoZXJyb3IpOwotCQlpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19FUlJPUiwgJmVycm9yLCAmbGVuKSA8IDAgfHwgZXJyb3IpIHsKLQkJCWVycm5vID0gZXJyb3I7Ci0JCQlpZiAoREJHKSB7Ci0JCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKLQkJCQkJIiAgJWQgcmV0cnlpbmdfc2VsZWN0IGRvdCBlcnJvcjIgJWRcbiIsIHNvY2ssIGVycm5vKTsKLQkJCX0KLQotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCWlmIChEQkcpIHsKLQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKLQkJCSIgICVkIHJldHJ5aW5nX3NlbGVjdCByZXR1cm5pbmcgJWRcbiIsc29jaywgbik7Ci0JfQotCi0JcmV0dXJuIG47Ci19Ci0KLQotc3RhdGljIGludAotc2VuZF9kZyhyZXNfc3RhdGUgc3RhdHAsCi0JY29uc3QgdV9jaGFyICpidWYsIGludCBidWZsZW4sIHVfY2hhciAqYW5zLCBpbnQgYW5zc2l6LAotCWludCAqdGVycm5vLCBpbnQgbnMsIGludCAqdl9jaXJjdWl0LCBpbnQgKmdvdHNvbWV3aGVyZSkKLXsKLQljb25zdCBIRUFERVIgKmhwID0gKGNvbnN0IEhFQURFUiAqKShjb25zdCB2b2lkICopYnVmOwotCUhFQURFUiAqYW5ocCA9IChIRUFERVIgKikodm9pZCAqKWFuczsKLQljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKm5zYXA7Ci0JaW50IG5zYXBsZW47Ci0Jc3RydWN0IHRpbWVzcGVjIG5vdywgdGltZW91dCwgZmluaXNoOwotCWZkX3NldCBkc21hc2s7Ci0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZnJvbTsKLQlzb2NrbGVuX3QgZnJvbWxlbjsKLQlpbnQgcmVzcGxlbiwgc2Vjb25kcywgbiwgczsKLQotCW5zYXAgPSBnZXRfbnNhZGRyKHN0YXRwLCAoc2l6ZV90KW5zKTsKLQluc2FwbGVuID0gZ2V0X3NhbGVuKG5zYXApOwotCWlmIChFWFQoc3RhdHApLm5zc29ja3NbbnNdID09IC0xKSB7Ci0JCUVYVChzdGF0cCkubnNzb2Nrc1tuc10gPSBzb2NrZXQobnNhcC0+c2FfZmFtaWx5LCBTT0NLX0RHUkFNLCAwKTsKLQkJaWYgKEVYVChzdGF0cCkubnNzb2Nrc1tuc10gPiBoaWdoZXN0RkQpIHsKLQkJCXJlc19uY2xvc2Uoc3RhdHApOwotCQkJZXJybm8gPSBFTk9UU09DSzsKLQkJfQotCQlpZiAoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA8IDApIHsKLQkJCXN3aXRjaCAoZXJybm8pIHsKLQkJCWNhc2UgRVBST1RPTk9TVVBQT1JUOgotI2lmZGVmIEVQRk5PU1VQUE9SVAotCQkJY2FzZSBFUEZOT1NVUFBPUlQ6Ci0jZW5kaWYKLQkJCWNhc2UgRUFGTk9TVVBQT1JUOgotCQkJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic29ja2V0KGRnKSIsIGVycm5vKTsKLQkJCQlyZXR1cm4gKDApOwotCQkJZGVmYXVsdDoKLQkJCQkqdGVycm5vID0gZXJybm87Ci0JCQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJzb2NrZXQoZGcpIiwgZXJybm8pOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCQl9Ci0KLQkJaWYgKHN0YXRwLT5fbWFyayAhPSAwKSB7Ci0JCQlpZiAoc2V0c29ja29wdChFWFQoc3RhdHApLm5zc29ja3NbbnNdLCBTT0xfU09DS0VULAotCQkJCQlTT19NQVJLLCAmKHN0YXRwLT5fbWFyayksIHNpemVvZihzdGF0cC0+X21hcmspKSA8IDApIHsKLQkJCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCX0KLSNpZm5kZWYgQ0FOTk9UX0NPTk5FQ1RfREdSQU0KLQkJLyoKLQkJICogT24gYSA0LjNCU0QrIG1hY2hpbmUgKGNsaWVudCBhbmQgc2VydmVyLAotCQkgKiBhY3R1YWxseSksIHNlbmRpbmcgdG8gYSBuYW1lc2VydmVyIGRhdGFncmFtCi0JCSAqIHBvcnQgd2l0aCBubyBuYW1lc2VydmVyIHdpbGwgY2F1c2UgYW4KLQkJICogSUNNUCBwb3J0IHVucmVhY2hhYmxlIG1lc3NhZ2UgdG8gYmUgcmV0dXJuZWQuCi0JCSAqIElmIG91ciBkYXRhZ3JhbSBzb2NrZXQgaXMgImNvbm5lY3RlZCIgdG8gdGhlCi0JCSAqIHNlcnZlciwgd2UgZ2V0IGFuIEVDT05OUkVGVVNFRCBlcnJvciBvbiB0aGUgbmV4dAotCQkgKiBzb2NrZXQgb3BlcmF0aW9uLCBhbmQgc2VsZWN0IHJldHVybnMgaWYgdGhlCi0JCSAqIGVycm9yIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuICBXZSBjYW4gdGh1cyBkZXRlY3QKLQkJICogdGhlIGFic2VuY2Ugb2YgYSBuYW1lc2VydmVyIHdpdGhvdXQgdGltaW5nIG91dC4KLQkJICovCi0JCWlmIChyYW5kb21fYmluZChFWFQoc3RhdHApLm5zc29ja3NbbnNdLCBuc2FwLT5zYV9mYW1pbHkpIDwgMCkgewotCQkJQWVycm9yKHN0YXRwLCBzdGRlcnIsICJiaW5kKGRnKSIsIGVycm5vLCBuc2FwLAotCQkJICAgIG5zYXBsZW4pOwotCQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JCWlmIChjb25uZWN0KEVYVChzdGF0cCkubnNzb2Nrc1tuc10sIG5zYXAsIChzb2NrbGVuX3QpbnNhcGxlbikgPCAwKSB7Ci0JCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImNvbm5lY3QoZGcpIiwgZXJybm8sIG5zYXAsCi0JCQkgICAgbnNhcGxlbik7Ci0JCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLSNlbmRpZiAvKiAhQ0FOTk9UX0NPTk5FQ1RfREdSQU0gKi8KLQkJRHByaW50KHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHLAotCQkgICAgICAgKHN0ZG91dCwgIjs7IG5ldyBERyBzb2NrZXRcbiIpKQotCi0JfQotCXMgPSBFWFQoc3RhdHApLm5zc29ja3NbbnNdOwotI2lmbmRlZiBDQU5OT1RfQ09OTkVDVF9ER1JBTQotCWlmIChzZW5kKHMsIChjb25zdCBjaGFyKilidWYsIChzaXplX3QpYnVmbGVuLCAwKSAhPSBidWZsZW4pIHsKLQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJzZW5kIiwgZXJybm8pOwotCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0jZWxzZSAvKiAhQ0FOTk9UX0NPTk5FQ1RfREdSQU0gKi8KLQlpZiAoc2VuZHRvKHMsIChjb25zdCBjaGFyKilidWYsIGJ1ZmxlbiwgMCwgbnNhcCwgbnNhcGxlbikgIT0gYnVmbGVuKQotCXsKLQkJQWVycm9yKHN0YXRwLCBzdGRlcnIsICJzZW5kdG8iLCBlcnJubywgbnNhcCwgbnNhcGxlbik7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQlyZXR1cm4gKDApOwotCX0KLSNlbmRpZiAvKiAhQ0FOTk9UX0NPTk5FQ1RfREdSQU0gKi8KLQotCS8qCi0JICogV2FpdCBmb3IgcmVwbHkuCi0JICovCi0Jc2Vjb25kcyA9IGdldF90aW1lb3V0KHN0YXRwLCBucyk7Ci0Jbm93ID0gZXZOb3dUaW1lKCk7Ci0JdGltZW91dCA9IGV2Q29uc1RpbWUoKGxvbmcpc2Vjb25kcywgMEwpOwotCWZpbmlzaCA9IGV2QWRkVGltZShub3csIHRpbWVvdXQpOwotcmV0cnk6Ci0JbiA9IHJldHJ5aW5nX3NlbGVjdChzLCAmZHNtYXNrLCBOVUxMLCAmZmluaXNoKTsKLQotCWlmIChuID09IDApIHsKLQkJRHByaW50KHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHLCAoc3Rkb3V0LCAiOzsgdGltZW91dFxuIikpOwotCQkqZ290c29tZXdoZXJlID0gMTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JaWYgKG4gPCAwKSB7Ci0JCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic2VsZWN0IiwgZXJybm8pOwotCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JZXJybm8gPSAwOwotCWZyb21sZW4gPSBzaXplb2YoZnJvbSk7Ci0JcmVzcGxlbiA9IHJlY3Zmcm9tKHMsIChjaGFyKilhbnMsIChzaXplX3QpYW5zc2l6LDAsCi0JCQkgICAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmZnJvbSwgJmZyb21sZW4pOwotCWlmIChyZXNwbGVuIDw9IDApIHsKLQkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJyZWN2ZnJvbSIsIGVycm5vKTsKLQkJcmVzX25jbG9zZShzdGF0cCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCSpnb3Rzb21ld2hlcmUgPSAxOwotCWlmIChyZXNwbGVuIDwgSEZJWEVEU1opIHsKLQkJLyoKLQkJICogVW5kZXJzaXplZCBtZXNzYWdlLgotCQkgKi8KLQkJRHByaW50KHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHLAotCQkgICAgICAgKHN0ZG91dCwgIjs7IHVuZGVyc2l6ZWQ6ICVkXG4iLAotCQkJcmVzcGxlbikpOwotCQkqdGVycm5vID0gRU1TR1NJWkU7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQlyZXR1cm4gKDApOwotCX0KLQlpZiAoaHAtPmlkICE9IGFuaHAtPmlkKSB7Ci0JCS8qCi0JCSAqIHJlc3BvbnNlIGZyb20gb2xkIHF1ZXJ5LCBpZ25vcmUgaXQuCi0JCSAqIFhYWCAtIHBvdGVudGlhbCBzZWN1cml0eSBoYXphcmQgY291bGQKLQkJICoJIGJlIGRldGVjdGVkIGhlcmUuCi0JCSAqLwotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotCQlfX2xpYmNfYW5kcm9pZF9sb2dfZXZlbnRfdWlkKEJJT05JQ19FVkVOVF9SRVNPTFZFUl9PTERfUkVTUE9OU0UpOwotI2VuZGlmCi0JCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAotCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKLQkJCShzdGRvdXQsICI7OyBvbGQgYW5zd2VyOlxuIiksCi0JCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOwotCQlnb3RvIHJldHJ5OwotCX0KLQlpZiAoIShzdGF0cC0+b3B0aW9ucyAmIFJFU19JTlNFQ1VSRTEpICYmCi0JICAgICFyZXNfb3Vyc2VydmVyX3Aoc3RhdHAsIChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZmcm9tKSkgewotCQkvKgotCQkgKiByZXNwb25zZSBmcm9tIHdyb25nIHNlcnZlcj8gaWdub3JlIGl0LgotCQkgKiBYWFggLSBwb3RlbnRpYWwgc2VjdXJpdHkgaGF6YXJkIGNvdWxkCi0JCSAqCSBiZSBkZXRlY3RlZCBoZXJlLgotCQkgKi8KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLQkJX19saWJjX2FuZHJvaWRfbG9nX2V2ZW50X3VpZChCSU9OSUNfRVZFTlRfUkVTT0xWRVJfV1JPTkdfU0VSVkVSKTsKLSNlbmRpZgotCQlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwKLQkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSksCi0JCQkoc3Rkb3V0LCAiOzsgbm90IG91ciBzZXJ2ZXI6XG4iKSwKLQkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotI2lmZGVmIFJFU19VU0VfRUROUzAKLQlpZiAoYW5ocC0+cmNvZGUgPT0gRk9STUVSUiAmJiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfVVNFX0VETlMwKSAhPSAwVSkgewotCQkvKgotCQkgKiBEbyBub3QgcmV0cnkgaWYgdGhlIHNlcnZlciBkbyBub3QgdW5kZXJzdGFuZCBFRE5TMC4KLQkJICogVGhlIGNhc2UgaGFzIHRvIGJlIGNhcHR1cmVkIGhlcmUsIGFzIEZPUk1FUlIgcGFja2V0IGRvIG5vdAotCQkgKiBjYXJyeSBxdWVyeSBzZWN0aW9uLCBoZW5jZSByZXNfcXVlcmllc21hdGNoKCkgcmV0dXJucyAwLgotCQkgKi8KLQkJRHByaW50UShzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKLQkJCShzdGRvdXQsICJzZXJ2ZXIgcmVqZWN0ZWQgcXVlcnkgd2l0aCBFRE5TMDpcbiIpLAotCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXogOiByZXNwbGVuKTsKLQkJLyogcmVjb3JkIHRoZSBlcnJvciAqLwotCQlzdGF0cC0+X2ZsYWdzIHw9IFJFU19GX0VETlMwRVJSOwotCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0jZW5kaWYKLQlpZiAoIShzdGF0cC0+b3B0aW9ucyAmIFJFU19JTlNFQ1VSRTIpICYmCi0JICAgICFyZXNfcXVlcmllc21hdGNoKGJ1ZiwgYnVmICsgYnVmbGVuLAotCQkJICAgICAgYW5zLCBhbnMgKyBhbnNzaXopKSB7Ci0JCS8qCi0JCSAqIHJlc3BvbnNlIGNvbnRhaW5zIHdyb25nIHF1ZXJ5PyBpZ25vcmUgaXQuCi0JCSAqIFhYWCAtIHBvdGVudGlhbCBzZWN1cml0eSBoYXphcmQgY291bGQKLQkJICoJIGJlIGRldGVjdGVkIGhlcmUuCi0JCSAqLwotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotCQlfX2xpYmNfYW5kcm9pZF9sb2dfZXZlbnRfdWlkKEJJT05JQ19FVkVOVF9SRVNPTFZFUl9XUk9OR19RVUVSWSk7Ci0jZW5kaWYKLQkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8Ci0JCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAotCQkJKHN0ZG91dCwgIjs7IHdyb25nIHF1ZXJ5IG5hbWU6XG4iKSwKLQkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7Ci0JCWdvdG8gcmV0cnk7OwotCX0KLQlpZiAoYW5ocC0+cmNvZGUgPT0gU0VSVkZBSUwgfHwKLQkgICAgYW5ocC0+cmNvZGUgPT0gTk9USU1QIHx8Ci0JICAgIGFuaHAtPnJjb2RlID09IFJFRlVTRUQpIHsKLQkJRHByaW50UShzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKLQkJCShzdGRvdXQsICJzZXJ2ZXIgcmVqZWN0ZWQgcXVlcnk6XG4iKSwKLQkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7Ci0JCXJlc19uY2xvc2Uoc3RhdHApOwotCQkvKiBkb24ndCByZXRyeSBpZiBjYWxsZWQgZnJvbSBkaWcgKi8KLQkJaWYgKCFzdGF0cC0+cGZjb2RlKQotCQkJcmV0dXJuICgwKTsKLQl9Ci0JaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfSUdOVEMpICYmIGFuaHAtPnRjKSB7Ci0JCS8qCi0JCSAqIFRvIGdldCB0aGUgcmVzdCBvZiBhbnN3ZXIsCi0JCSAqIHVzZSBUQ1Agd2l0aCBzYW1lIHNlcnZlci4KLQkJICovCi0JCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKLQkJICAgICAgIChzdGRvdXQsICI7OyB0cnVuY2F0ZWQgYW5zd2VyXG4iKSk7Ci0JCSp2X2NpcmN1aXQgPSAxOwotCQlyZXNfbmNsb3NlKHN0YXRwKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0JLyoKLQkgKiBBbGwgaXMgd2VsbCwgb3IgdGhlIGVycm9yIGlzIGZhdGFsLiAgU2lnbmFsIHRoYXQgdGhlCi0JICogbmV4dCBuYW1lc2VydmVyIG91Z2h0IG5vdCBiZSB0cmllZC4KLQkgKi8KLQlyZXR1cm4gKHJlc3BsZW4pOwotfQotCi1zdGF0aWMgdm9pZAotQWVycm9yKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgRklMRSAqZmlsZSwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZXJyb3IsCi0gICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWxlbikKLXsKLQlpbnQgc2F2ZSA9IGVycm5vOwotCWNoYXIgaGJ1ZltOSV9NQVhIT1NUXTsKLQljaGFyIHNidWZbTklfTUFYU0VSVl07Ci0KLQlhbGVuID0gYWxlbjsKLQotCWlmICgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpICE9IDBVKSB7Ci0JCWlmIChnZXRuYW1laW5mbyhhZGRyZXNzLCAoc29ja2xlbl90KWFsZW4sIGhidWYsIHNpemVvZihoYnVmKSwKLQkJICAgIHNidWYsIHNpemVvZihzYnVmKSwgbmlmbGFncykpIHsKLQkJCXN0cm5jcHkoaGJ1ZiwgIj8iLCBzaXplb2YoaGJ1ZikgLSAxKTsKLQkJCWhidWZbc2l6ZW9mKGhidWYpIC0gMV0gPSAnXDAnOwotCQkJc3RybmNweShzYnVmLCAiPyIsIHNpemVvZihzYnVmKSAtIDEpOwotCQkJc2J1ZltzaXplb2Yoc2J1ZikgLSAxXSA9ICdcMCc7Ci0JCX0KLQkJZnByaW50ZihmaWxlLCAicmVzX3NlbmQ6ICVzIChbJXNdLiVzKTogJXNcbiIsCi0JCQlzdHJpbmcsIGhidWYsIHNidWYsIHN0cmVycm9yKGVycm9yKSk7Ci0JfQotCWVycm5vID0gc2F2ZTsKLX0KLQotc3RhdGljIHZvaWQKLVBlcnJvcihjb25zdCByZXNfc3RhdGUgc3RhdHAsIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGVycm9yKSB7Ci0JaW50IHNhdmUgPSBlcnJubzsKLQotCWlmICgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpICE9IDBVKQotCQlmcHJpbnRmKGZpbGUsICJyZXNfc2VuZDogJXM6ICVzXG4iLAotCQkJc3RyaW5nLCBzdHJlcnJvcihlcnJvcikpOwotCWVycm5vID0gc2F2ZTsKLX0KLQotc3RhdGljIGludAotc29ja19lcShzdHJ1Y3Qgc29ja2FkZHIgKmEsIHN0cnVjdCBzb2NrYWRkciAqYikgewotCXN0cnVjdCBzb2NrYWRkcl9pbiAqYTQsICpiNDsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphNiwgKmI2OwotCi0JaWYgKGEtPnNhX2ZhbWlseSAhPSBiLT5zYV9mYW1pbHkpCi0JCXJldHVybiAwOwotCXN3aXRjaCAoYS0+c2FfZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOgotCQlhNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKWE7Ci0JCWI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopYjsKLQkJcmV0dXJuIGE0LT5zaW5fcG9ydCA9PSBiNC0+c2luX3BvcnQgJiYKLQkJICAgIGE0LT5zaW5fYWRkci5zX2FkZHIgPT0gYjQtPnNpbl9hZGRyLnNfYWRkcjsKLQljYXNlIEFGX0lORVQ2OgotCQlhNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKilhOwotCQliNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKiliOwotCQlyZXR1cm4gYTYtPnNpbjZfcG9ydCA9PSBiNi0+c2luNl9wb3J0ICYmCi0jaWZkZWYgSEFWRV9TSU42X1NDT1BFX0lECi0JCSAgICBhNi0+c2luNl9zY29wZV9pZCA9PSBiNi0+c2luNl9zY29wZV9pZCAmJgotI2VuZGlmCi0JCSAgICBJTjZfQVJFX0FERFJfRVFVQUwoJmE2LT5zaW42X2FkZHIsICZiNi0+c2luNl9hZGRyKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLSNpZmRlZiBORUVEX1BTRUxFQ1QKLS8qIFhYWCBuZWVkcyB0byBtb3ZlIHRvIHRoZSBwb3J0aW5nIGxpYnJhcnkuICovCi1zdGF0aWMgaW50Ci1wc2VsZWN0KGludCBuZmRzLCB2b2lkICpyZmRzLCB2b2lkICp3ZmRzLCB2b2lkICplZmRzLAotCXN0cnVjdCB0aW1lc3BlYyAqdHNwLCBjb25zdCBzaWdzZXRfdCAqc2lnbWFzaykKLXsKLQlzdHJ1Y3QgdGltZXZhbCB0diwgKnR2cDsKLQlzaWdzZXRfdCBzaWdzOwotCWludCBuOwotCi0JaWYgKHRzcCkgewotCQl0dnAgPSAmdHY7Ci0JCXR2ID0gZXZUaW1lVmFsKCp0c3ApOwotCX0gZWxzZQotCQl0dnAgPSBOVUxMOwotCWlmIChzaWdtYXNrKQotCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgc2lnbWFzaywgJnNpZ3MpOwotCW4gPSBzZWxlY3QobmZkcywgcmZkcywgd2ZkcywgZWZkcywgdHZwKTsKLQlpZiAoc2lnbWFzaykKLQkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZzaWdzLCBOVUxMKTsKLQlpZiAodHNwKQotCQkqdHNwID0gZXZUaW1lU3BlYyh0dik7Ci0JcmV0dXJuIChuKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zdGF0ZS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zdGF0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWQwMWExLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfc3RhdGUuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2luY2x1ZGUgInJlc29sdl9jYWNoZS5oIgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2RlZmluZSBfUkVBTExZX0lOQ0xVREVfU1lTX19TWVNURU1fUFJPUEVSVElFU19IXwotI2luY2x1ZGUgPHN5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaD4KLQotLyogU2V0IHRvIDEgdG8gZW5hYmxlIGRlYnVnIHRyYWNlcyAqLwotI2RlZmluZSBERUJVRyAwCi0KLSNpZiBERUJVRwotIyAgaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgLyogZm9yIGdldHRpZCgpICovCi0jICBkZWZpbmUgRCguLi4pIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCJsaWJjIiwgX19WQV9BUkdTX18pCi0jZWxzZQotIyAgZGVmaW5lIEQoLi4uKSAgZG97fXdoaWxlKDApCi0jZW5kaWYKLQotc3RhdGljIHB0aHJlYWRfa2V5X3QgICBfcmVzX2tleTsKLXN0YXRpYyBwdGhyZWFkX29uY2VfdCAgX3Jlc19vbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBpbnQgICAgICAgICAgICAgICAgICBfaF9lcnJubzsKLSAgICBzdHJ1Y3QgX19yZXNfc3RhdGUgIF9ucmVzWzFdOwotICAgIHVuc2lnbmVkICAgICAgICAgICAgIF9zZXJpYWw7Ci0gICAgc3RydWN0IHByb3BfaW5mbyogICBfcGk7Ci0gICAgc3RydWN0IHJlc19zdGF0aWMgICBfcnN0YXRpY1sxXTsKLX0gX3Jlc190aHJlYWQ7Ci0KLXN0YXRpYyBfcmVzX3RocmVhZCoKLV9yZXNfdGhyZWFkX2FsbG9jKHZvaWQpCi17Ci0gICAgX3Jlc190aHJlYWQqICBydCA9IGNhbGxvYygxLCBzaXplb2YoKnJ0KSk7Ci0KLSAgICBpZiAocnQpIHsKLSAgICAgICAgcnQtPl9oX2Vycm5vID0gMDsKLSAgICAgICAgLyogU3BlY2lhbCBzeXN0ZW0gcHJvcGVydHkgd2hpY2ggdHJhY2tzIGFueSBjaGFuZ2VzIHRvICduZXQuKicuICovCi0gICAgICAgIHJ0LT5fc2VyaWFsID0gMDsKLSAgICAgICAgcnQtPl9waSA9IChzdHJ1Y3QgcHJvcF9pbmZvKikgX19zeXN0ZW1fcHJvcGVydHlfZmluZCgibmV0LmNoYW5nZSIpOwotICAgICAgICBpZiAocnQtPl9waSkgewotICAgICAgICAgICAgcnQtPl9zZXJpYWwgPSBfX3N5c3RlbV9wcm9wZXJ0eV9zZXJpYWwocnQtPl9waSk7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KHJ0LT5fcnN0YXRpYywgMCwgc2l6ZW9mIHJ0LT5fcnN0YXRpYyk7Ci0gICAgfQotICAgIHJldHVybiBydDsKLX0KLQotc3RhdGljIHZvaWQKLV9yZXNfc3RhdGljX2RvbmUoIHJlc19zdGF0aWMgIHJzICkKLXsKLSAgICAvKiBmb3J0dW5hdGVseSwgdGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJlLCBzaW5jZSB0aGUKLSAgICAgKiBwb2ludHMgaW4gaF9hZGRyX3B0cnMgYW5kIGhvc3RfYWxpYXNlcyBzaG91bGQgYWxsCi0gICAgICogcG9pbnQgdG8gJ2hvc3RidWYnCi0gICAgICovCi0gICAgaWYgKHJzLT5ob3N0ZikgeyAgLyogc2hvdWxkIG5vdCBoYXBwZW4gaW4gdGhlb3J5LCBidXQganVzdCBiZSBzYWZlICovCi0gICAgICAgIGZjbG9zZShycy0+aG9zdGYpOwotICAgICAgICBycy0+aG9zdGYgPSBOVUxMOwotICAgIH0KLSAgICBmcmVlKHJzLT5zZXJ2ZW50LnNfYWxpYXNlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fcmVzX3RocmVhZF9mcmVlKCB2b2lkKiAgX3J0ICkKLXsKLSAgICBfcmVzX3RocmVhZCogIHJ0ID0gX3J0OwotCi0gICAgRCgiJXM6IHJ0PSVwIGZvciB0aHJlYWQ9JWQiLCBfX0ZVTkNUSU9OX18sIHJ0LCBnZXR0aWQoKSk7Ci0KLSAgICBfcmVzX3N0YXRpY19kb25lKHJ0LT5fcnN0YXRpYyk7Ci0gICAgcmVzX25kZXN0cm95KHJ0LT5fbnJlcyk7Ci0gICAgZnJlZShydCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fcmVzX2luaXRfa2V5KCB2b2lkICkKLXsKLSAgICBwdGhyZWFkX2tleV9jcmVhdGUoICZfcmVzX2tleSwgX3Jlc190aHJlYWRfZnJlZSApOwotfQotCi1zdGF0aWMgX3Jlc190aHJlYWQqCi1fcmVzX3RocmVhZF9nZXQodm9pZCkKLXsKLSAgICBfcmVzX3RocmVhZCogIHJ0OwotICAgIHB0aHJlYWRfb25jZSggJl9yZXNfb25jZSwgX3Jlc19pbml0X2tleSApOwotICAgIHJ0ID0gcHRocmVhZF9nZXRzcGVjaWZpYyggX3Jlc19rZXkgKTsKLQotICAgIGlmIChydCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIFdlIGFscmVhZHkgaGF2ZSBvbmUgdGhyZWFkLXNwZWNpZmljIEROUyBzdGF0ZSBvYmplY3QuCi0gICAgICAgICAqIENoZWNrIHRoZSBzZXJpYWwgdmFsdWUgZm9yIGFueSBjaGFuZ2VzIHRvIG5ldC4qIHByb3BlcnRpZXMgKi8KLSAgICAgICAgRCgiJXM6IENhbGxlZCBmb3IgdGlkPSVkIHJ0PSVwIHJ0LT5waT0lcCBydC0+c2VyaWFsPSVkIiwKLSAgICAgICAgICAgX19GVU5DVElPTl9fLCBnZXR0aWQoKSwgcnQsIHJ0LT5fcGksIHJ0LT5fc2VyaWFsKTsKLSAgICAgICAgaWYgKHJ0LT5fcGkgPT0gTlVMTCkgewotICAgICAgICAgICAgLyogVGhlIHByb3BlcnR5IHdhc24ndCBjcmVhdGVkIHdoZW4gX3Jlc190aHJlYWRfZ2V0KCkgd2FzCi0gICAgICAgICAgICAgKiBjYWxsZWQgdGhlIGxhc3QgdGltZS4gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gdmVyeQotICAgICAgICAgICAgICogZWFybHkgZHVyaW5nIHRoZSBib290IHNlcXVlbmNlLiBGaXJzdCwgbGV0J3MgdHJ5IHRvIHNlZSBpZiBpdAotICAgICAgICAgICAgICogaXMgaGVyZSBub3cuICovCi0gICAgICAgICAgICBydC0+X3BpID0gKHN0cnVjdCBwcm9wX2luZm8qKSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKCJuZXQuY2hhbmdlIik7Ci0gICAgICAgICAgICBpZiAocnQtPl9waSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgLyogU3RpbGwgbm90aGluZywgcmV0dXJuIGN1cnJlbnQgc3RhdGUgKi8KLSAgICAgICAgICAgICAgICBEKCIlczogZXhpdGluZyBmb3IgdGlkPSVkIHJ0PSVkIHNpbmNlIHN5c3RlbSBwcm9wZXJ0eSBub3QgZm91bmQiLAotICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBnZXR0aWQoKSwgcnQpOwotICAgICAgICAgICAgICAgIHJldHVybiBydDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocnQtPl9zZXJpYWwgPT0gX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHJ0LT5fcGkpKSB7Ci0gICAgICAgICAgICAvKiBOb3RoaW5nIGNoYW5nZWQsIHNvIHJldHVybiB0aGUgY3VycmVudCBzdGF0ZSAqLwotICAgICAgICAgICAgRCgiJXM6IHRpZD0lZCBydD0lcCBub3RoaW5nIGNoYW5nZWQsIHJldHVybmluZyIsCi0gICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZ2V0dGlkKCksIHJ0KTsKLSAgICAgICAgICAgIHJldHVybiBydDsKLSAgICAgICAgfQotICAgICAgICAvKiBVcGRhdGUgdGhlIHJlY29yZGVkIHNlcmlhbCBudW1iZXIsIGFuZCBnbyByZXNldCB0aGUgc3RhdGUgKi8KLSAgICAgICAgcnQtPl9zZXJpYWwgPSBfX3N5c3RlbV9wcm9wZXJ0eV9zZXJpYWwocnQtPl9waSk7Ci0gICAgICAgIGdvdG8gUkVTRVRfU1RBVEU7Ci0gICAgfQotCi0gICAgLyogSXQgaXMgdGhlIGZpcnN0IHRpbWUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gdGhpcyB0aHJlYWQsCi0gICAgICogd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgdGhyZWFkLXNwZWNpZmljIEROUyByZXNvbHZlciBzdGF0ZS4gKi8KLSAgICBydCA9IF9yZXNfdGhyZWFkX2FsbG9jKCk7Ci0gICAgaWYgKHJ0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoIF9yZXNfa2V5LCBydCApOwotICAgIEQoIiVzOiB0aWQ9JWQgQ3JlYXRlZCBuZXcgRE5TIHN0YXRlIHJ0PSVwIiwKLSAgICAgIF9fRlVOQ1RJT05fXywgZ2V0dGlkKCksIHJ0KTsKLQotUkVTRVRfU1RBVEU6Ci0gICAgLyogUmVzZXQgdGhlIHN0YXRlLCBub3RlIHRoYXQgcmVzX25pbml0KCkgY2FuIG5vdyBwcm9wZXJseSByZXNldAotICAgICAqIGFuIGV4aXN0aW5nIHN0YXRlIHdpdGhvdXQgbGVha2luZyBtZW1vcnkuCi0gICAgICovCi0gICAgRCgiJXM6IHRpZD0lZCwgcnQ9JXAsIHJlc2V0dGluZyBETlMgc3RhdGUgKG9wdGlvbnMgUkVTX0lOSVQ9JWQpIiwKLSAgICAgIF9fRlVOQ1RJT05fXywgZ2V0dGlkKCksIHJ0LCAocnQtPl9ucmVzLT5vcHRpb25zICYgUkVTX0lOSVQpICE9IDApOwotICAgIGlmICggcmVzX25pbml0KCBydC0+X25yZXMgKSA8IDAgKSB7Ci0gICAgICAgIC8qIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KLSAgICAgICAgRCgiJXM6IHRpZD0lZCBydD0lcCwgd29vdCwgcmVzX25pbml0KCkgcmV0dXJuZWQgPCAwIiwKLSAgICAgICAgICBfX0ZVTkNUSU9OX18sIGdldHRpZCgpLCBydCk7Ci0gICAgICAgIF9yZXNfdGhyZWFkX2ZyZWUocnQpOwotICAgICAgICBwdGhyZWFkX3NldHNwZWNpZmljKCBfcmVzX2tleSwgTlVMTCApOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIHJ0OwotfQotCi1fX0xJQkNfSElEREVOX18KLXN0cnVjdCBfX3Jlc19zdGF0ZSBfbnJlczsKLQotI2lmIDAKLXN0cnVjdCByZXNvbHZfY2FjaGUqCi1fX2dldF9yZXNfY2FjaGUodm9pZCkKLXsKLSAgICBfcmVzX3RocmVhZCogIHJ0ID0gX3Jlc190aHJlYWRfZ2V0KCk7Ci0KLSAgICBpZiAoIXJ0KQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmICghcnQtPl9jYWNoZSkgewotICAgICAgICBydC0+X2NhY2hlID0gX3Jlc29sdl9jYWNoZV9jcmVhdGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJ0LT5fY2FjaGU7Ci19Ci0jZW5kaWYKLQotaW50KgotX19nZXRfaF9lcnJubyh2b2lkKQotewotICAgIF9yZXNfdGhyZWFkKiAgcnQgICAgPSBfcmVzX3RocmVhZF9nZXQoKTsKLSAgICBzdGF0aWMgaW50ICAgIHBhbmljID0gTkVUREJfSU5URVJOQUw7Ci0KLSAgICByZXR1cm4gcnQgPyAmcnQtPl9oX2Vycm5vIDogJnBhbmljOwotfQotCi1yZXNfc3RhdGUKLV9fcmVzX2dldF9zdGF0ZSh2b2lkKQotewotICAgIF9yZXNfdGhyZWFkKiAgcnQgPSBfcmVzX3RocmVhZF9nZXQoKTsKLQotICAgIHJldHVybiBydCA/IHJ0LT5fbnJlcyA6IE5VTEw7Ci19Ci0KLXZvaWQKLV9fcmVzX3B1dF9zdGF0ZShyZXNfc3RhdGUgcmVzKQotewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KLSAgICByZXM9cmVzOwotfQotCi1yZXNfc3RhdGljCi1fX3Jlc19nZXRfc3RhdGljKHZvaWQpCi17Ci0gICAgX3Jlc190aHJlYWQqICBydCA9IF9yZXNfdGhyZWFkX2dldCgpOwotCi0gICAgcmV0dXJuIHJ0ID8gcnQtPl9yc3RhdGljIDogTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9FcnJub1Jlc3RvcmVyLmggYi9saWJjL3ByaXZhdGUvRXJybm9SZXN0b3Jlci5oCmluZGV4IGVkNmFiNjIuLmY0NjczOTMgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9FcnJub1Jlc3RvcmVyLmgKKysrIGIvbGliYy9wcml2YXRlL0Vycm5vUmVzdG9yZXIuaApAQCAtMTksNiArMTksOCBAQAogCiAjaW5jbHVkZSA8ZXJybm8uaD4KIAorI2luY2x1ZGUgImJpb25pY19tYWNyb3MuaCIKKwogY2xhc3MgRXJybm9SZXN0b3JlciB7CiAgcHVibGljOgogICBleHBsaWNpdCBFcnJub1Jlc3RvcmVyKCkgOiBzYXZlZF9lcnJub18oZXJybm8pIHsKQEAgLTM1LDkgKzM3LDcgQEAKICBwcml2YXRlOgogICBpbnQgc2F2ZWRfZXJybm9fOwogCi0gIC8vIERpc2FsbG93IGNvcHkgYW5kIGFzc2lnbm1lbnQuCi0gIEVycm5vUmVzdG9yZXIoY29uc3QgRXJybm9SZXN0b3JlciYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBFcnJub1Jlc3RvcmVyJik7CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFcnJub1Jlc3RvcmVyKTsKIH07CiAKICNlbmRpZiAvLyBFUlJOT19SRVNUT1JFUl9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvS2VybmVsQXJndW1lbnRCbG9jay5oIGIvbGliYy9wcml2YXRlL0tlcm5lbEFyZ3VtZW50QmxvY2suaAppbmRleCAxMDU5NjVlLi5jOGVhNDk3IDEwMDY0NAotLS0gYS9saWJjL3ByaXZhdGUvS2VybmVsQXJndW1lbnRCbG9jay5oCisrKyBiL2xpYmMvcHJpdmF0ZS9LZXJuZWxBcmd1bWVudEJsb2NrLmgKQEAgLTE4LDkgKzE4LDEyIEBACiAjZGVmaW5lIEtFUk5FTF9BUkdVTUVOVF9CTE9DS19ICiAKICNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlIDxsaW5rLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3lzL2F1eHYuaD4KIAorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21hY3Jvcy5oIgorCiBzdHJ1Y3QgYWJvcnRfbXNnX3Q7CiAKIC8vIFdoZW4gdGhlIGtlcm5lbCBzdGFydHMgdGhlIGR5bmFtaWMgbGlua2VyLCBpdCBwYXNzZXMgYSBwb2ludGVyIHRvIGEgYmxvY2sKQEAgLTQzLDE0ICs0NiwxNCBAQAogICAgIH0KICAgICArK3A7IC8vIFNraXAgc2Vjb25kIE5VTEw7CiAKLSAgICBhdXh2ID0gcmVpbnRlcnByZXRfY2FzdDxFbGZfYXV4dl90Kj4ocCk7CisgICAgYXV4diA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhhdXh2X3QpKj4ocCk7CiAgIH0KIAogICAvLyBTaW1pbGFyIHRvIDo6Z2V0YXV4dmFsIGJ1dCBkb2Vzbid0IHJlcXVpcmUgdGhlIGxpYmMgZ2xvYmFsIHZhcmlhYmxlcyB0byBiZSBzZXQgdXAsCiAgIC8vIHNvIGl0J3Mgc2FmZSB0byBjYWxsIHRoaXMgcmVhbGx5IGVhcmx5IG9uLiBUaGlzIGZ1bmN0aW9uIGFsc28gbGV0cyB5b3UgZGlzdGluZ3Vpc2gKICAgLy8gYmV0d2VlbiB0aGUgaW5hYmlsaXR5IHRvIGZpbmQgdGhlIGdpdmVuIHR5cGUgYW5kIGl0cyB2YWx1ZSBqdXN0IGhhcHBlbmluZyB0byBiZSAwLgogICB1bnNpZ25lZCBsb25nIGdldGF1eHZhbCh1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wqIGZvdW5kX21hdGNoID0gTlVMTCkgewotICAgIGZvciAoRWxmX2F1eHZfdCogdiA9IGF1eHY7IHYtPmFfdHlwZSAhPSBBVF9OVUxMOyArK3YpIHsKKyAgICBmb3IgKEVsZlcoYXV4dl90KSogdiA9IGF1eHY7IHYtPmFfdHlwZSAhPSBBVF9OVUxMOyArK3YpIHsKICAgICAgIGlmICh2LT5hX3R5cGUgPT0gdHlwZSkgewogICAgICAgICBpZiAoZm91bmRfbWF0Y2ggIT0gTlVMTCkgewogICAgICAgICAgICAgKmZvdW5kX21hdGNoID0gdHJ1ZTsKQEAgLTY3LDE0ICs3MCwxMiBAQAogICBpbnQgYXJnYzsKICAgY2hhcioqIGFyZ3Y7CiAgIGNoYXIqKiBlbnZwOwotICBFbGZfYXV4dl90KiBhdXh2OworICBFbGZXKGF1eHZfdCkqIGF1eHY7CiAKICAgYWJvcnRfbXNnX3QqKiBhYm9ydF9tZXNzYWdlX3B0cjsKIAogIHByaXZhdGU6Ci0gIC8vIERpc2FsbG93IGNvcHkgYW5kIGFzc2lnbm1lbnQuCi0gIEtlcm5lbEFyZ3VtZW50QmxvY2soY29uc3QgS2VybmVsQXJndW1lbnRCbG9jayYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBLZXJuZWxBcmd1bWVudEJsb2NrJik7CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihLZXJuZWxBcmd1bWVudEJsb2NrKTsKIH07CiAKICNlbmRpZiAvLyBLRVJORUxfQVJHVU1FTlRfQkxPQ0tfSApkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL05ldGRDbGllbnREaXNwYXRjaC5oIGIvbGliYy9wcml2YXRlL05ldGRDbGllbnREaXNwYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkODk0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvTmV0ZENsaWVudERpc3BhdGNoLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgUFJJVkFURV9ORVREX0NMSUVOVF9ESVNQQVRDSF9ICisjZGVmaW5lIFBSSVZBVEVfTkVURF9DTElFTlRfRElTUEFUQ0hfSAorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCitfX0JFR0lOX0RFQ0xTCisKK3N0cnVjdCBOZXRkQ2xpZW50RGlzcGF0Y2ggeworICAgIGludCAoKmFjY2VwdDQpKGludCwgc3RydWN0IHNvY2thZGRyKiwgc29ja2xlbl90KiwgaW50KTsKKyAgICBpbnQgKCpjb25uZWN0KShpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciosIHNvY2tsZW5fdCk7CisgICAgaW50ICgqc29ja2V0KShpbnQsIGludCwgaW50KTsKKyAgICB1bnNpZ25lZCAoKm5ldElkRm9yUmVzb2x2KSh1bnNpZ25lZCk7Cit9OworCitleHRlcm4gX19MSUJDX0hJRERFTl9fIHN0cnVjdCBOZXRkQ2xpZW50RGlzcGF0Y2ggX19uZXRkQ2xpZW50RGlzcGF0Y2g7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAgLy8gUFJJVkFURV9ORVREX0NMSUVOVF9ESVNQQVRDSF9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvU2NvcGVHdWFyZC5oIGIvbGliYy9wcml2YXRlL1Njb3BlR3VhcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODNlMzIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL1Njb3BlR3VhcmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBTQ09QRV9HVUFSRF9ICisjZGVmaW5lIFNDT1BFX0dVQVJEX0gKKworLy8gVE9ETzogaW5jbHVkZSBleHBsaWNpdCBzdGQ6Om1vdmUgd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZQordGVtcGxhdGU8dHlwZW5hbWUgRj4KK2NsYXNzIFNjb3BlR3VhcmQgeworIHB1YmxpYzoKKyAgU2NvcGVHdWFyZChGIGYpIDogZl8oZiksIGFjdGl2ZV8odHJ1ZSkge30KKworICBTY29wZUd1YXJkKFNjb3BlR3VhcmQmJiB0aGF0KSA6IGZfKHRoYXQuZl8pLCBhY3RpdmVfKHRoYXQuYWN0aXZlXykgeworICAgIHRoYXQuYWN0aXZlXyA9IGZhbHNlOworICB9CisKKyAgflNjb3BlR3VhcmQoKSB7CisgICAgaWYgKGFjdGl2ZV8pIHsKKyAgICAgIGZfKCk7CisgICAgfQorICB9CisKKyAgdm9pZCBkaXNhYmxlKCkgeworICAgIGFjdGl2ZV8gPSBmYWxzZTsKKyAgfQorIHByaXZhdGU6CisgIEYgZl87CisgIGJvb2wgYWN0aXZlXzsKKworICBTY29wZUd1YXJkKCkgPSBkZWxldGU7CisgIFNjb3BlR3VhcmQoY29uc3QgU2NvcGVHdWFyZCYpID0gZGVsZXRlOworICBTY29wZUd1YXJkJiBvcGVyYXRvcj0oY29uc3QgU2NvcGVHdWFyZCYpID0gZGVsZXRlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1Njb3BlR3VhcmQ8VD4gY3JlYXRlX3Njb3BlX2d1YXJkKFQgZikgeworICByZXR1cm4gU2NvcGVHdWFyZDxUPihmKTsKK30KKworI2VuZGlmICAvLyBTQ09QRV9HVUFSRF9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvU2NvcGVkRmQuaCBiL2xpYmMvcHJpdmF0ZS9TY29wZWRGZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NmMxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvU2NvcGVkRmQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBTQ09QRURfRkRfSAorI2RlZmluZSBTQ09QRURfRkRfSAorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiYmlvbmljX21hY3Jvcy5oIgorCisvLyBBIHNtYXJ0IHBvaW50ZXIgdGhhdCBjbG9zZXMgdGhlIGdpdmVuIGZkIG9uIGdvaW5nIG91dCBvZiBzY29wZS4KKy8vIFVzZSB0aGlzIHdoZW4gdGhlIGZkIGlzIGluY2lkZW50YWwgdG8gdGhlIHB1cnBvc2Ugb2YgeW91ciBmdW5jdGlvbiwKKy8vIGJ1dCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIG9uIGV4aXQuCitjbGFzcyBTY29wZWRGZCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2NvcGVkRmQoaW50IGZkKSA6IGZkKGZkKSB7CisgICAgfQorCisgICAgflNjb3BlZEZkKCkgeworICAgICAgcmVzZXQoKTsKKyAgICB9CisKKyAgICBpbnQgZ2V0KCkgY29uc3QgeworICAgICAgICByZXR1cm4gZmQ7CisgICAgfQorCisgICAgaW50IHJlbGVhc2UoKSBfX2F0dHJpYnV0ZV9fKCh3YXJuX3VudXNlZF9yZXN1bHQpKSB7CisgICAgICAgIGludCBsb2NhbEZkID0gZmQ7CisgICAgICAgIGZkID0gLTE7CisgICAgICAgIHJldHVybiBsb2NhbEZkOworICAgIH0KKworICAgIHZvaWQgcmVzZXQoaW50IG5ld19mZCA9IC0xKSB7CisgICAgICBpZiAoZmQgIT0gLTEpIHsKKyAgICAgICAgICBURU1QX0ZBSUxVUkVfUkVUUlkoY2xvc2UoZmQpKTsKKyAgICAgIH0KKyAgICAgIGZkID0gbmV3X2ZkOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgZmQ7CisKKyAgICAvLyBEaXNhbGxvdyBjb3B5IGFuZCBhc3NpZ25tZW50LgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTY29wZWRGZCk7Cit9OworCisjZW5kaWYgIC8vIFNDT1BFRF9GRF9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmggYi9saWJjL3ByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgKaW5kZXggMDZiOGUzNy4uNDNkYmRjMSAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL1Njb3BlZFB0aHJlYWRNdXRleExvY2tlci5oCisrKyBiL2xpYmMvcHJpdmF0ZS9TY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIuaApAQCAtMTksNiArMTksOCBAQAogCiAjaW5jbHVkZSA8cHRocmVhZC5oPgogCisjaW5jbHVkZSAiYmlvbmljX21hY3Jvcy5oIgorCiBjbGFzcyBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgewogIHB1YmxpYzoKICAgZXhwbGljaXQgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyKHB0aHJlYWRfbXV0ZXhfdCogbXUpIDogbXVfKG11KSB7CkBAIC0zMiw5ICszNCw3IEBACiAgcHJpdmF0ZToKICAgcHRocmVhZF9tdXRleF90KiBtdV87CiAKLSAgLy8gRGlzYWxsb3cgY29weSBhbmQgYXNzaWdubWVudC4KLSAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyKGNvbnN0IFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciYpOwotICB2b2lkIG9wZXJhdG9yPShjb25zdCBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXImKTsKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNjb3BlZFB0aHJlYWRNdXRleExvY2tlcik7CiB9OwogCiAjZW5kaWYgLy8gU0NPUEVEX1BUSFJFQURfTVVURVhfTE9DS0VSX0gKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9TY29wZWRSZWFkZGlyLmggYi9saWJjL3ByaXZhdGUvU2NvcGVkUmVhZGRpci5oCmluZGV4IDc5NzgwOWEuLjg0YzFiOTMgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9TY29wZWRSZWFkZGlyLmgKKysrIGIvbGliYy9wcml2YXRlL1Njb3BlZFJlYWRkaXIuaApAQCAtMTksNiArMTksOCBAQAogCiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKKwogY2xhc3MgU2NvcGVkUmVhZGRpciB7CiAgcHVibGljOgogICBTY29wZWRSZWFkZGlyKGNvbnN0IGNoYXIqIHBhdGgpIHsKQEAgLTQyLDkgKzQ0LDcgQEAKICBwcml2YXRlOgogICBESVIqIGRpcl87CiAKLSAgLy8gRGlzYWxsb3cgY29weSBhbmQgYXNzaWdubWVudC4KLSAgU2NvcGVkUmVhZGRpcihjb25zdCBTY29wZWRSZWFkZGlyJik7Ci0gIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFNjb3BlZFJlYWRkaXImKTsKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNjb3BlZFJlYWRkaXIpOwogfTsKIAogI2VuZGlmIC8vIFNDT1BFRF9SRUFERElSX0gKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9hcnBhX25hbWVzZXIuaCBiL2xpYmMvcHJpdmF0ZS9hcnBhX25hbWVzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxYzNlZS4uMDAwMDAwMAotLS0gYS9saWJjL3ByaXZhdGUvYXJwYV9uYW1lc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NzYgKzAsMCBAQAotLyoJJE5ldEJTRDogbmFtZXNlci5oLHYgMS4xOSAyMDA1LzEyLzI2IDE5OjAxOjQ3IHBlcnJ5IEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5ODksIDE5OTMKLSAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotLyoKLSAqCUlkOiBuYW1lc2VyLmgsdiAxLjIuMi40LjQuMSAyMDA0LzAzLzA5IDA4OjMzOjMwIG1hcmthIEV4cAotICovCi0KLSNpZm5kZWYgX0FSUEFfTkFNRVNFUl9IXwotI2RlZmluZSBfQVJQQV9OQU1FU0VSX0hfCi0KLSNkZWZpbmUgQklORF80X0NPTVBBVAotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLS8qCi0gKiBSZXZpc2lvbiBpbmZvcm1hdGlvbi4gIFRoaXMgaXMgdGhlIHJlbGVhc2UgZGF0ZSBpbiBZWVlZTU1ERCBmb3JtYXQuCi0gKiBJdCBjYW4gY2hhbmdlIGV2ZXJ5IGRheSBzbyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gd2l0aCBpdCBpcyB1c2UgaXQKLSAqIGluIHByZXByb2Nlc3NvciBjb21tYW5kcyBzdWNoIGFzICIjaWYgKF9fTkFNRVNFUiA+IDE5OTMxMTA0KSIuICBEbyBub3QKLSAqIGNvbXBhcmUgZm9yIGVxdWFsaXR5OyByYXRoZXIsIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB5b3VyIGxpYmJpbmQuYQotICogY29udGFpbnMgYSBuZXcgZW5vdWdoIGxpYi9uYW1lc2VyLyB0byBzdXBwb3J0IHRoZSBmZWF0dXJlIHlvdSBuZWVkLgotICovCi0KLSNkZWZpbmUgX19OQU1FU0VSCTE5OTkxMDA2CS8qIE5ldyBpbnRlcmZhY2UgdmVyc2lvbiBzdGFtcC4gKi8KLQotLyoKLSAqIERlZmluZSBjb25zdGFudHMgYmFzZWQgb24gUkZDIDg4MywgUkZDIDEwMzQsIFJGQyAxMDM1Ci0gKi8KLSNkZWZpbmUgTlNfUEFDS0VUU1oJNTEyCS8qIGRlZmF1bHQgVURQIHBhY2tldCBzaXplICovCi0jZGVmaW5lIE5TX01BWEROQU1FCTEwMjUJLyogbWF4aW11bSBkb21haW4gbmFtZSAqLwotI2RlZmluZSBOU19NQVhNU0cJNjU1MzUJLyogbWF4aW11bSBtZXNzYWdlIHNpemUgKi8KLSNkZWZpbmUgTlNfTUFYQ0ROQU1FCTI1NQkvKiBtYXhpbXVtIGNvbXByZXNzZWQgZG9tYWluIG5hbWUgKi8KLSNkZWZpbmUgTlNfTUFYTEFCRUwJNjMJLyogbWF4aW11bSBsZW5ndGggb2YgZG9tYWluIGxhYmVsICovCi0jZGVmaW5lIE5TX0hGSVhFRFNaCTEyCS8qICMvYnl0ZXMgb2YgZml4ZWQgZGF0YSBpbiBoZWFkZXIgKi8KLSNkZWZpbmUgTlNfUUZJWEVEU1oJNAkvKiAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gcXVlcnkgKi8KLSNkZWZpbmUgTlNfUlJGSVhFRFNaCTEwCS8qICMvYnl0ZXMgb2YgZml4ZWQgZGF0YSBpbiByIHJlY29yZCAqLwotI2RlZmluZSBOU19JTlQzMlNaCTQJLyogIy9ieXRlcyBvZiBkYXRhIGluIGEgdWludDMyX3QgKi8KLSNkZWZpbmUgTlNfSU5UMTZTWgkyCS8qICMvYnl0ZXMgb2YgZGF0YSBpbiBhIHVpbnQxNl90ICovCi0jZGVmaW5lIE5TX0lOVDhTWgkxCS8qICMvYnl0ZXMgb2YgZGF0YSBpbiBhIHVpbnQ4X3QgKi8KLSNkZWZpbmUgTlNfSU5BRERSU1oJNAkvKiBJUHY0IFRfQSAqLwotI2RlZmluZSBOU19JTjZBRERSU1oJMTYJLyogSVB2NiBUX0FBQUEgKi8KLSNkZWZpbmUgTlNfQ01QUlNGTEdTCTB4YzAJLyogRmxhZyBiaXRzIGluZGljYXRpbmcgbmFtZSBjb21wcmVzc2lvbi4gKi8KLSNkZWZpbmUgTlNfREVGQVVMVFBPUlQJNTMJLyogRm9yIGJvdGggVENQIGFuZCBVRFAuICovCi0KLS8qCi0gKiBUaGVzZSBjYW4gYmUgZXhwYW5kZWQgd2l0aCBzeW5vbnltcywganVzdCBrZWVwIG5zX3BhcnNlLmM6bnNfcGFyc2VyZWNvcmQoKQotICogaW4gc3luY2ggd2l0aCBpdC4KLSAqLwotdHlwZWRlZiBlbnVtIF9fbnNfc2VjdCB7Ci0JbnNfc19xZCA9IDAsCQkvKiBRdWVyeTogUXVlc3Rpb24uICovCi0JbnNfc196biA9IDAsCQkvKiBVcGRhdGU6IFpvbmUuICovCi0JbnNfc19hbiA9IDEsCQkvKiBRdWVyeTogQW5zd2VyLiAqLwotCW5zX3NfcHIgPSAxLAkJLyogVXBkYXRlOiBQcmVyZXF1aXNpdGVzLiAqLwotCW5zX3NfbnMgPSAyLAkJLyogUXVlcnk6IE5hbWUgc2VydmVycy4gKi8KLQluc19zX3VkID0gMiwJCS8qIFVwZGF0ZTogVXBkYXRlLiAqLwotCW5zX3NfYXIgPSAzLAkJLyogUXVlcnl8VXBkYXRlOiBBZGRpdGlvbmFsIHJlY29yZHMuICovCi0JbnNfc19tYXggPSA0Ci19IG5zX3NlY3Q7Ci0KLS8qCi0gKiBUaGlzIGlzIGEgbWVzc2FnZSBoYW5kbGUuICBJdCBpcyBjYWxsZXIgYWxsb2NhdGVkIGFuZCBoYXMgbm8gZHluYW1pYyBkYXRhLgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgaW50ZW5kZWQgdG8gYmUgb3BhcXVlIHRvIGFsbCBidXQgbnNfcGFyc2UuYywgdGh1cyB0aGUKLSAqIGxlYWRpbmcgXydzIG9uIHRoZSBtZW1iZXIgbmFtZXMuICBVc2UgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucywgbm90IHRoZSBfJ3MuCi0gKi8KLXR5cGVkZWYgc3RydWN0IF9fbnNfbXNnIHsKLQljb25zdCB1X2NoYXIJKl9tc2csICpfZW9tOwotCXVpbnQxNl90CV9pZCwgX2ZsYWdzLCBfY291bnRzW25zX3NfbWF4XTsKLQljb25zdCB1X2NoYXIJKl9zZWN0aW9uc1tuc19zX21heF07Ci0JbnNfc2VjdAkJX3NlY3Q7Ci0JaW50CQlfcnJudW07Ci0JY29uc3QgdV9jaGFyCSpfbXNnX3B0cjsKLX0gbnNfbXNnOwotCi0vKiBQcml2YXRlIGRhdGEgc3RydWN0dXJlIC0gZG8gbm90IHVzZSBmcm9tIG91dHNpZGUgbGlicmFyeS4gKi8KLXN0cnVjdCBfbnNfZmxhZ2RhdGEgeyAgaW50IG1hc2ssIHNoaWZ0OyAgfTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgX25zX2ZsYWdkYXRhIF9uc19mbGFnZGF0YVtdOwotCi0vKiBBY2Nlc3NvciBtYWNyb3MgLSB0aGlzIGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuICovCi0KLSNkZWZpbmUgbnNfbXNnX2lkKGhhbmRsZSkgKChoYW5kbGUpLl9pZCArIDApCi0jZGVmaW5lIG5zX21zZ19iYXNlKGhhbmRsZSkgKChoYW5kbGUpLl9tc2cgKyAwKQotI2RlZmluZSBuc19tc2dfZW5kKGhhbmRsZSkgKChoYW5kbGUpLl9lb20gKyAwKQotI2RlZmluZSBuc19tc2dfc2l6ZShoYW5kbGUpICgoc2l6ZV90KSgoaGFuZGxlKS5fZW9tIC0gKGhhbmRsZSkuX21zZykpCi0jZGVmaW5lIG5zX21zZ19jb3VudChoYW5kbGUsIHNlY3Rpb24pICgoaGFuZGxlKS5fY291bnRzW3NlY3Rpb25dICsgMCkKLQotLyoKLSAqIFRoaXMgaXMgYSBwYXJzZWQgcmVjb3JkLiAgSXQgaXMgY2FsbGVyIGFsbG9jYXRlZCBhbmQgaGFzIG5vIGR5bmFtaWMgZGF0YS4KLSAqLwotdHlwZWRlZglzdHJ1Y3QgX19uc19yciB7Ci0JY2hhcgkJbmFtZVtOU19NQVhETkFNRV07Ci0JdWludDE2X3QJdHlwZTsKLQl1aW50MTZfdAlycl9jbGFzczsKLQl1aW50MzJfdAl0dGw7Ci0JdWludDE2X3QJcmRsZW5ndGg7Ci0JY29uc3QgdV9jaGFyICoJcmRhdGE7Ci19IG5zX3JyOwotCi0vKiBBY2Nlc3NvciBtYWNyb3MgLSB0aGlzIGlzIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuICovCi0jZGVmaW5lIG5zX3JyX25hbWUocnIpCSgoKHJyKS5uYW1lWzBdICE9ICdcMCcpID8gKHJyKS5uYW1lIDogIi4iKQotI2RlZmluZSBuc19ycl90eXBlKHJyKQkoKG5zX3R5cGUpKChycikudHlwZSArIDApKQotI2RlZmluZSBuc19ycl9jbGFzcyhycikJKChuc19jbGFzcykoKHJyKS5ycl9jbGFzcyArIDApKQotI2RlZmluZSBuc19ycl90dGwocnIpCSgodV9sb25nKShycikudHRsICsgMCkKLSNkZWZpbmUgbnNfcnJfcmRsZW4ocnIpCSgoc2l6ZV90KShycikucmRsZW5ndGggKyAwKQotI2RlZmluZSBuc19ycl9yZGF0YShycikJKChycikucmRhdGEgKyAwKQotCi0vKgotICogVGhlc2UgZG9uJ3QgaGF2ZSB0byBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyBpbiB0aGUgcGFja2V0IGZsYWdzIHdvcmQsCi0gKiBhbmQgdGhleSBjYW4gZXZlbiBvdmVybGFwIGluIHNvbWUgY2FzZXMsIGJ1dCB0aGV5IHdpbGwgbmVlZCB0byBiZSBrZXB0Ci0gKiBpbiBzeW5jaCB3aXRoIG5zX3BhcnNlLmM6bnNfZmxhZ2RhdGFbXS4KLSAqLwotdHlwZWRlZiBlbnVtIF9fbnNfZmxhZyB7Ci0JbnNfZl9xciwJCS8qIFF1ZXN0aW9uL1Jlc3BvbnNlLiAqLwotCW5zX2Zfb3Bjb2RlLAkJLyogT3BlcmF0aW9uIGNvZGUuICovCi0JbnNfZl9hYSwJCS8qIEF1dGhvcml0YXRpdmUgQW5zd2VyLiAqLwotCW5zX2ZfdGMsCQkvKiBUcnVuY2F0aW9uIG9jY3VycmVkLiAqLwotCW5zX2ZfcmQsCQkvKiBSZWN1cnNpb24gRGVzaXJlZC4gKi8KLQluc19mX3JhLAkJLyogUmVjdXJzaW9uIEF2YWlsYWJsZS4gKi8KLQluc19mX3osCQkJLyogTUJaLiAqLwotCW5zX2ZfYWQsCQkvKiBBdXRoZW50aWMgRGF0YSAoRE5TU0VDKS4gKi8KLQluc19mX2NkLAkJLyogQ2hlY2tpbmcgRGlzYWJsZWQgKEROU1NFQykuICovCi0JbnNfZl9yY29kZSwJCS8qIFJlc3BvbnNlIGNvZGUuICovCi0JbnNfZl9tYXgKLX0gbnNfZmxhZzsKLQotLyoKLSAqIEN1cnJlbnRseSBkZWZpbmVkIG9wY29kZXMuCi0gKi8KLXR5cGVkZWYgZW51bSBfX25zX29wY29kZSB7Ci0JbnNfb19xdWVyeSA9IDAsCQkvKiBTdGFuZGFyZCBxdWVyeS4gKi8KLQluc19vX2lxdWVyeSA9IDEsCS8qIEludmVyc2UgcXVlcnkgKGRlcHJlY2F0ZWQvdW5zdXBwb3J0ZWQpLiAqLwotCW5zX29fc3RhdHVzID0gMiwJLyogTmFtZSBzZXJ2ZXIgc3RhdHVzIHF1ZXJ5ICh1bnN1cHBvcnRlZCkuICovCi0JCQkJLyogT3Bjb2RlIDMgaXMgdW5kZWZpbmVkL3Jlc2VydmVkLiAqLwotCW5zX29fbm90aWZ5ID0gNCwJLyogWm9uZSBjaGFuZ2Ugbm90aWZpY2F0aW9uLiAqLwotCW5zX29fdXBkYXRlID0gNSwJLyogWm9uZSB1cGRhdGUgbWVzc2FnZS4gKi8KLQluc19vX21heCA9IDYKLX0gbnNfb3Bjb2RlOwotCi0vKgotICogQ3VycmVudGx5IGRlZmluZWQgcmVzcG9uc2UgY29kZXMuCi0gKi8KLXR5cGVkZWYJZW51bSBfX25zX3Jjb2RlIHsKLQluc19yX25vZXJyb3IgPSAwLAkvKiBObyBlcnJvciBvY2N1cnJlZC4gKi8KLQluc19yX2Zvcm1lcnIgPSAxLAkvKiBGb3JtYXQgZXJyb3IuICovCi0JbnNfcl9zZXJ2ZmFpbCA9IDIsCS8qIFNlcnZlciBmYWlsdXJlLiAqLwotCW5zX3Jfbnhkb21haW4gPSAzLAkvKiBOYW1lIGVycm9yLiAqLwotCW5zX3Jfbm90aW1wbCA9IDQsCS8qIFVuaW1wbGVtZW50ZWQuICovCi0JbnNfcl9yZWZ1c2VkID0gNSwJLyogT3BlcmF0aW9uIHJlZnVzZWQuICovCi0JLyogdGhlc2UgYXJlIGZvciBCSU5EX1VQREFURSAqLwotCW5zX3JfeXhkb21haW4gPSA2LAkvKiBOYW1lIGV4aXN0cyAqLwotCW5zX3JfeXhycnNldCA9IDcsCS8qIFJSc2V0IGV4aXN0cyAqLwotCW5zX3JfbnhycnNldCA9IDgsCS8qIFJSc2V0IGRvZXMgbm90IGV4aXN0ICovCi0JbnNfcl9ub3RhdXRoID0gOSwJLyogTm90IGF1dGhvcml0YXRpdmUgZm9yIHpvbmUgKi8KLQluc19yX25vdHpvbmUgPSAxMCwJLyogWm9uZSBvZiByZWNvcmQgZGlmZmVyZW50IGZyb20gem9uZSBzZWN0aW9uICovCi0JbnNfcl9tYXggPSAxMSwKLQkvKiBUaGUgZm9sbG93aW5nIGFyZSBFRE5TIGV4dGVuZGVkIHJjb2RlcyAqLwotCW5zX3JfYmFkdmVycyA9IDE2LAotCS8qIFRoZSBmb2xsb3dpbmcgYXJlIFRTSUcgZXJyb3JzICovCi0JbnNfcl9iYWRzaWcgPSAxNiwKLQluc19yX2JhZGtleSA9IDE3LAotCW5zX3JfYmFkdGltZSA9IDE4Ci19IG5zX3Jjb2RlOwotCi0vKiBCSU5EX1VQREFURSAqLwotdHlwZWRlZiBlbnVtIF9fbnNfdXBkYXRlX29wZXJhdGlvbiB7Ci0JbnNfdW9wX2RlbGV0ZSA9IDAsCi0JbnNfdW9wX2FkZCA9IDEsCi0JbnNfdW9wX21heCA9IDIKLX0gbnNfdXBkYXRlX29wZXJhdGlvbjsKLQotLyoKLSAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIFRTSUcgYXV0aGVudGljYXRlZCBtZXNzYWdlcwotICovCi1zdHJ1Y3QgbnNfdHNpZ19rZXkgewotICAgICAgICBjaGFyIG5hbWVbTlNfTUFYRE5BTUVdLCBhbGdbTlNfTUFYRE5BTUVdOwotICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwotICAgICAgICBpbnQgbGVuOwotfTsKLXR5cGVkZWYgc3RydWN0IG5zX3RzaWdfa2V5IG5zX3RzaWdfa2V5OwotCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgVFNJRyBhdXRoZW50aWNhdGVkIFRDUCBtZXNzYWdlcwotICovCi1zdHJ1Y3QgbnNfdGNwX3RzaWdfc3RhdGUgewotCWludCBjb3VudGVyOwotCXN0cnVjdCBkc3Rfa2V5ICprZXk7Ci0Jdm9pZCAqY3R4OwotCXVuc2lnbmVkIGNoYXIgc2lnW05TX1BBQ0tFVFNaXTsKLQlpbnQgc2lnbGVuOwotfTsKLXR5cGVkZWYgc3RydWN0IG5zX3RjcF90c2lnX3N0YXRlIG5zX3RjcF90c2lnX3N0YXRlOwotCi0jZGVmaW5lIE5TX1RTSUdfRlVER0UgMzAwCi0jZGVmaW5lIE5TX1RTSUdfVENQX0NPVU5UIDEwMAotI2RlZmluZSBOU19UU0lHX0FMR19ITUFDX01ENSAiSE1BQy1NRDUuU0lHLUFMRy5SRUcuSU5UIgotCi0jZGVmaW5lIE5TX1RTSUdfRVJST1JfTk9fVFNJRyAtMTAKLSNkZWZpbmUgTlNfVFNJR19FUlJPUl9OT19TUEFDRSAtMTEKLSNkZWZpbmUgTlNfVFNJR19FUlJPUl9GT1JNRVJSIC0xMgotCi0vKgotICogQ3VycmVudGx5IGRlZmluZWQgdHlwZSB2YWx1ZXMgZm9yIHJlc291cmNlcyBhbmQgcXVlcmllcy4KLSAqLwotdHlwZWRlZiBlbnVtIF9fbnNfdHlwZSB7Ci0JbnNfdF9pbnZhbGlkID0gMCwJLyogQ29va2llLiAqLwotCW5zX3RfYSA9IDEsCQkvKiBIb3N0IGFkZHJlc3MuICovCi0JbnNfdF9ucyA9IDIsCQkvKiBBdXRob3JpdGF0aXZlIHNlcnZlci4gKi8KLQluc190X21kID0gMywJCS8qIE1haWwgZGVzdGluYXRpb24uICovCi0JbnNfdF9tZiA9IDQsCQkvKiBNYWlsIGZvcndhcmRlci4gKi8KLQluc190X2NuYW1lID0gNSwJCS8qIENhbm9uaWNhbCBuYW1lLiAqLwotCW5zX3Rfc29hID0gNiwJCS8qIFN0YXJ0IG9mIGF1dGhvcml0eSB6b25lLiAqLwotCW5zX3RfbWIgPSA3LAkJLyogTWFpbGJveCBkb21haW4gbmFtZS4gKi8KLQluc190X21nID0gOCwJCS8qIE1haWwgZ3JvdXAgbWVtYmVyLiAqLwotCW5zX3RfbXIgPSA5LAkJLyogTWFpbCByZW5hbWUgbmFtZS4gKi8KLQluc190X251bGwgPSAxMCwJCS8qIE51bGwgcmVzb3VyY2UgcmVjb3JkLiAqLwotCW5zX3Rfd2tzID0gMTEsCQkvKiBXZWxsIGtub3duIHNlcnZpY2UuICovCi0JbnNfdF9wdHIgPSAxMiwJCS8qIERvbWFpbiBuYW1lIHBvaW50ZXIuICovCi0JbnNfdF9oaW5mbyA9IDEzLAkvKiBIb3N0IGluZm9ybWF0aW9uLiAqLwotCW5zX3RfbWluZm8gPSAxNCwJLyogTWFpbGJveCBpbmZvcm1hdGlvbi4gKi8KLQluc190X214ID0gMTUsCQkvKiBNYWlsIHJvdXRpbmcgaW5mb3JtYXRpb24uICovCi0JbnNfdF90eHQgPSAxNiwJCS8qIFRleHQgc3RyaW5ncy4gKi8KLQluc190X3JwID0gMTcsCQkvKiBSZXNwb25zaWJsZSBwZXJzb24uICovCi0JbnNfdF9hZnNkYiA9IDE4LAkvKiBBRlMgY2VsbCBkYXRhYmFzZS4gKi8KLQluc190X3gyNSA9IDE5LAkJLyogWF8yNSBjYWxsaW5nIGFkZHJlc3MuICovCi0JbnNfdF9pc2RuID0gMjAsCQkvKiBJU0ROIGNhbGxpbmcgYWRkcmVzcy4gKi8KLQluc190X3J0ID0gMjEsCQkvKiBSb3V0ZXIuICovCi0JbnNfdF9uc2FwID0gMjIsCQkvKiBOU0FQIGFkZHJlc3MuICovCi0JbnNfdF9uc2FwX3B0ciA9IDIzLAkvKiBSZXZlcnNlIE5TQVAgbG9va3VwIChkZXByZWNhdGVkKS4gKi8KLQluc190X3NpZyA9IDI0LAkJLyogU2VjdXJpdHkgc2lnbmF0dXJlLiAqLwotCW5zX3Rfa2V5ID0gMjUsCQkvKiBTZWN1cml0eSBrZXkuICovCi0JbnNfdF9weCA9IDI2LAkJLyogWC40MDAgbWFpbCBtYXBwaW5nLiAqLwotCW5zX3RfZ3BvcyA9IDI3LAkJLyogR2VvZ3JhcGhpY2FsIHBvc2l0aW9uICh3aXRoZHJhd24pLiAqLwotCW5zX3RfYWFhYSA9IDI4LAkJLyogSXA2IEFkZHJlc3MuICovCi0JbnNfdF9sb2MgPSAyOSwJCS8qIExvY2F0aW9uIEluZm9ybWF0aW9uLiAqLwotCW5zX3Rfbnh0ID0gMzAsCQkvKiBOZXh0IGRvbWFpbiAoc2VjdXJpdHkpLiAqLwotCW5zX3RfZWlkID0gMzEsCQkvKiBFbmRwb2ludCBpZGVudGlmaWVyLiAqLwotCW5zX3RfbmltbG9jID0gMzIsCS8qIE5pbXJvZCBMb2NhdG9yLiAqLwotCW5zX3Rfc3J2ID0gMzMsCQkvKiBTZXJ2ZXIgU2VsZWN0aW9uLiAqLwotCW5zX3RfYXRtYSA9IDM0LAkJLyogQVRNIEFkZHJlc3MgKi8KLQluc190X25hcHRyID0gMzUsCS8qIE5hbWluZyBBdXRob3JpdHkgUG9pblRlUiAqLwotCW5zX3Rfa3ggPSAzNiwJCS8qIEtleSBFeGNoYW5nZSAqLwotCW5zX3RfY2VydCA9IDM3LAkJLyogQ2VydGlmaWNhdGlvbiByZWNvcmQgKi8KLQluc190X2E2ID0gMzgsCQkvKiBJUHY2IGFkZHJlc3MgKGRlcHJlY2F0ZXMgQUFBQSkgKi8KLQluc190X2RuYW1lID0gMzksCS8qIE5vbi10ZXJtaW5hbCBETkFNRSAoZm9yIElQdjYpICovCi0JbnNfdF9zaW5rID0gNDAsCQkvKiBLaXRjaGVuIHNpbmsgKGV4cGVyaW1lbnRhdGwpICovCi0JbnNfdF9vcHQgPSA0MSwJCS8qIEVETlMwIG9wdGlvbiAobWV0YS1SUikgKi8KLQluc190X2FwbCA9IDQyLAkJLyogQWRkcmVzcyBwcmVmaXggbGlzdCAoUkZDIDMxMjMpICovCi0JbnNfdF90a2V5ID0gMjQ5LAkvKiBUcmFuc2FjdGlvbiBrZXkgKi8KLQluc190X3RzaWcgPSAyNTAsCS8qIFRyYW5zYWN0aW9uIHNpZ25hdHVyZS4gKi8KLQluc190X2l4ZnIgPSAyNTEsCS8qIEluY3JlbWVudGFsIHpvbmUgdHJhbnNmZXIuICovCi0JbnNfdF9heGZyID0gMjUyLAkvKiBUcmFuc2ZlciB6b25lIG9mIGF1dGhvcml0eS4gKi8KLQluc190X21haWxiID0gMjUzLAkvKiBUcmFuc2ZlciBtYWlsYm94IHJlY29yZHMuICovCi0JbnNfdF9tYWlsYSA9IDI1NCwJLyogVHJhbnNmZXIgbWFpbCBhZ2VudCByZWNvcmRzLiAqLwotCW5zX3RfYW55ID0gMjU1LAkJLyogV2lsZGNhcmQgbWF0Y2guICovCi0JbnNfdF96eGZyID0gMjU2LAkvKiBCSU5ELXNwZWNpZmljLCBub25zdGFuZGFyZC4gKi8KLQluc190X21heCA9IDY1NTM2Ci19IG5zX3R5cGU7Ci0KLS8qIEV4Y2x1c2l2ZWx5IGEgUVRZUEU/IChub3QgYWxzbyBhbiBSVFlQRSkgKi8KLSNkZWZpbmUJbnNfdF9xdF9wKHQpIChuc190X3hmcl9wKHQpIHx8ICh0KSA9PSBuc190X2FueSB8fCBcCi0JCSAgICAgICh0KSA9PSBuc190X21haWxiIHx8ICh0KSA9PSBuc190X21haWxhKQotLyogU29tZSBraW5kIG9mIG1ldGEtUlI/IChub3QgYSBRVFlQRSwgYnV0IGFsc28gbm90IGFuIFJUWVBFKSAqLwotI2RlZmluZQluc190X21ycl9wKHQpICgodCkgPT0gbnNfdF90c2lnIHx8ICh0KSA9PSBuc190X29wdCkKLS8qIEV4Y2x1c2l2ZWx5IGFuIFJUWVBFPyAobm90IGFsc28gYSBRVFlQRSBvciBhIG1ldGEtUlIpICovCi0jZGVmaW5lIG5zX3RfcnJfcCh0KSAoIW5zX3RfcXRfcCh0KSAmJiAhbnNfdF9tcnJfcCh0KSkKLSNkZWZpbmUgbnNfdF91ZHBfcCh0KSAoKHQpICE9IG5zX3RfYXhmciAmJiAodCkgIT0gbnNfdF96eGZyKQotI2RlZmluZSBuc190X3hmcl9wKHQpICgodCkgPT0gbnNfdF9heGZyIHx8ICh0KSA9PSBuc190X2l4ZnIgfHwgXAotCQkgICAgICAgKHQpID09IG5zX3RfenhmcikKLQotLyoKLSAqIFZhbHVlcyBmb3IgY2xhc3MgZmllbGQKLSAqLwotdHlwZWRlZiBlbnVtIF9fbnNfY2xhc3MgewotCW5zX2NfaW52YWxpZCA9IDAsCS8qIENvb2tpZS4gKi8KLQluc19jX2luID0gMSwJCS8qIEludGVybmV0LiAqLwotCW5zX2NfMiA9IDIsCQkvKiB1bmFsbG9jYXRlZC91bnN1cHBvcnRlZC4gKi8KLQluc19jX2NoYW9zID0gMywJCS8qIE1JVCBDaGFvcy1uZXQuICovCi0JbnNfY19ocyA9IDQsCQkvKiBNSVQgSGVzaW9kLiAqLwotCS8qIFF1ZXJ5IGNsYXNzIHZhbHVlcyB3aGljaCBkbyBub3QgYXBwZWFyIGluIHJlc291cmNlIHJlY29yZHMgKi8KLQluc19jX25vbmUgPSAyNTQsCS8qIGZvciBwcmVyZXEuIHNlY3Rpb25zIGluIHVwZGF0ZSByZXF1ZXN0cyAqLwotCW5zX2NfYW55ID0gMjU1LAkJLyogV2lsZGNhcmQgbWF0Y2guICovCi0JbnNfY19tYXggPSA2NTUzNgotfSBuc19jbGFzczsKLQotLyogRE5TU0VDIGNvbnN0YW50cy4gKi8KLQotdHlwZWRlZiBlbnVtIF9fbnNfa2V5X3R5cGVzIHsKLQluc19rdF9yc2EgPSAxLAkJLyoga2V5IHR5cGUgUlNBL01ENSAqLwotCW5zX2t0X2RoICA9IDIsCQkvKiBEaWZmaWUgSGVsbG1hbiAqLwotCW5zX2t0X2RzYSA9IDMsCQkvKiBEaWdpdGFsIFNpZ25hdHVyZSBTdGFuZGFyZCAoTUFOREFUT1JZKSAqLwotCW5zX2t0X3ByaXZhdGUgPSAyNTQJLyogUHJpdmF0ZSBrZXkgdHlwZSBzdGFydHMgd2l0aCBPSUQgKi8KLX0gbnNfa2V5X3R5cGVzOwotCi10eXBlZGVmIGVudW0gX19uc19jZXJ0X3R5cGVzIHsKLQljZXJ0X3RfcGtpeCA9IDEsCS8qIFBLSVggKFguNTA5djMpICovCi0JY2VydF90X3Nwa2kgPSAyLAkvKiBTUEtJICovCi0JY2VydF90X3BncCAgPSAzLAkvKiBQR1AgKi8KLQljZXJ0X3RfdXJsICA9IDI1MywJLyogVVJMIHByaXZhdGUgdHlwZSAqLwotCWNlcnRfdF9vaWQgID0gMjU0CS8qIE9JRCBwcml2YXRlIHR5cGUgKi8KLX0gbnNfY2VydF90eXBlczsKLQotLyogRmxhZ3MgZmllbGQgb2YgdGhlIEtFWSBSUiByZGF0YS4gKi8KLSNkZWZpbmUJTlNfS0VZX1RZUEVNQVNLCQkweEMwMDAJLyogTWFzayBmb3IgInR5cGUiIGJpdHMgKi8KLSNkZWZpbmUJTlNfS0VZX1RZUEVfQVVUSF9DT05GCTB4MDAwMAkvKiBLZXkgdXNhYmxlIGZvciBib3RoICovCi0jZGVmaW5lCU5TX0tFWV9UWVBFX0NPTkZfT05MWQkweDgwMDAJLyogS2V5IHVzYWJsZSBmb3IgY29uZmlkZW50aWFsaXR5ICovCi0jZGVmaW5lCU5TX0tFWV9UWVBFX0FVVEhfT05MWQkweDQwMDAJLyogS2V5IHVzYWJsZSBmb3IgYXV0aGVudGljYXRpb24gKi8KLSNkZWZpbmUJTlNfS0VZX1RZUEVfTk9fS0VZCTB4QzAwMAkvKiBObyBrZXkgdXNhYmxlIGZvciBlaXRoZXI7IG5vIGtleSAqLwotLyogVGhlIHR5cGUgYml0cyBjYW4gYWxzbyBiZSBpbnRlcnByZXRlZCBpbmRlcGVuZGVudGx5LCBhcyBzaW5nbGUgYml0czogKi8KLSNkZWZpbmUJTlNfS0VZX05PX0FVVEgJCTB4ODAwMAkvKiBLZXkgdW51c2FibGUgZm9yIGF1dGhlbnRpY2F0aW9uICovCi0jZGVmaW5lCU5TX0tFWV9OT19DT05GCQkweDQwMDAJLyogS2V5IHVudXNhYmxlIGZvciBjb25maWRlbnRpYWxpdHkgKi8KLSNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEMgkweDIwMDAJLyogU2VjdXJpdHkgaXMgKm1hbmRhdG9yeSogaWYgYml0PTAgKi8KLSNkZWZpbmUJTlNfS0VZX0VYVEVOREVEX0ZMQUdTCTB4MTAwMAkvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLwotI2RlZmluZQlOU19LRVlfUkVTRVJWRUQ0CTB4MDgwMCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KLSNkZWZpbmUJTlNfS0VZX1JFU0VSVkVENQkweDA0MDAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCi0jZGVmaW5lCU5TX0tFWV9OQU1FX1RZUEUJMHgwMzAwCS8qIHRoZXNlIGJpdHMgZGV0ZXJtaW5lIHRoZSB0eXBlICovCi0jZGVmaW5lCU5TX0tFWV9OQU1FX1VTRVIJMHgwMDAwCS8qIGtleSBpcyBhc3NvYy4gd2l0aCB1c2VyICovCi0jZGVmaW5lCU5TX0tFWV9OQU1FX0VOVElUWQkweDAyMDAJLyoga2V5IGlzIGFzc29jLiB3aXRoIGVudGl0eSBlZyBob3N0ICovCi0jZGVmaW5lCU5TX0tFWV9OQU1FX1pPTkUJMHgwMTAwCS8qIGtleSBpcyB6b25lIGtleSAqLwotI2RlZmluZQlOU19LRVlfTkFNRV9SRVNFUlZFRAkweDAzMDAJLyogcmVzZXJ2ZWQgbWVhbmluZyAqLwotI2RlZmluZQlOU19LRVlfUkVTRVJWRUQ4CTB4MDA4MCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KLSNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEOQkweDAwNDAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCi0jZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDEwCTB4MDAyMCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KLSNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEMTEJMHgwMDEwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLwotI2RlZmluZQlOU19LRVlfU0lHTkFUT1JZTUFTSwkweDAwMEYJLyoga2V5IGNhbiBzaWduIFJSJ3Mgb2Ygc2FtZSBuYW1lICovCi0jZGVmaW5lCU5TX0tFWV9SRVNFUlZFRF9CSVRNQVNLICggTlNfS0VZX1JFU0VSVkVEMiB8IFwKLQkJCQkgIE5TX0tFWV9SRVNFUlZFRDQgfCBcCi0JCQkJICBOU19LRVlfUkVTRVJWRUQ1IHwgXAotCQkJCSAgTlNfS0VZX1JFU0VSVkVEOCB8IFwKLQkJCQkgIE5TX0tFWV9SRVNFUlZFRDkgfCBcCi0JCQkJICBOU19LRVlfUkVTRVJWRUQxMCB8IFwKLQkJCQkgIE5TX0tFWV9SRVNFUlZFRDExICkKLSNkZWZpbmUgTlNfS0VZX1JFU0VSVkVEX0JJVE1BU0syIDB4RkZGRiAvKiBubyBiaXRzIGRlZmluZWQgaGVyZSAqLwotCi0vKiBUaGUgQWxnb3JpdGhtIGZpZWxkIG9mIHRoZSBLRVkgYW5kIFNJRyBSUidzIGlzIGFuIGludGVnZXIsIHsxLi4yNTR9ICovCi0jZGVmaW5lCU5TX0FMR19NRDVSU0EJCTEJLyogTUQ1IHdpdGggUlNBICovCi0jZGVmaW5lCU5TX0FMR19ESCAgICAgICAgICAgICAgIDIJLyogRGlmZmllIEhlbGxtYW4gS0VZICovCi0jZGVmaW5lCU5TX0FMR19EU0EgICAgICAgICAgICAgIDMJLyogRFNBIEtFWSAqLwotI2RlZmluZQlOU19BTEdfRFNTICAgICAgICAgICAgICBOU19BTEdfRFNBCi0jZGVmaW5lCU5TX0FMR19FWFBJUkVfT05MWQkyNTMJLyogTm8gYWxnLCBubyBzZWN1cml0eSAqLwotI2RlZmluZQlOU19BTEdfUFJJVkFURV9PSUQJMjU0CS8qIEtleSBiZWdpbnMgd2l0aCBPSUQgZ2l2aW5nIGFsZyAqLwotCi0vKiBQcm90b2NvbCB2YWx1ZXMgICovCi0vKiB2YWx1ZSAwIGlzIHJlc2VydmVkICovCi0jZGVmaW5lIE5TX0tFWV9QUk9UX1RMUyAgICAgICAgIDEKLSNkZWZpbmUgTlNfS0VZX1BST1RfRU1BSUwgICAgICAgMgotI2RlZmluZSBOU19LRVlfUFJPVF9ETlNTRUMgICAgICAzCi0jZGVmaW5lIE5TX0tFWV9QUk9UX0lQU0VDICAgICAgIDQKLSNkZWZpbmUgTlNfS0VZX1BST1RfQU5ZCQkyNTUKLQotLyogU2lnbmF0dXJlcyAqLwotI2RlZmluZQlOU19NRDVSU0FfTUlOX0JJVFMJIDUxMgkvKiBTaXplIG9mIGEgbW9kIG9yIGV4cCBpbiBiaXRzICovCi0jZGVmaW5lCU5TX01ENVJTQV9NQVhfQklUUwk0MDk2Ci0JLyogVG90YWwgb2YgYmluYXJ5IG1vZCBhbmQgZXhwICovCi0jZGVmaW5lCU5TX01ENVJTQV9NQVhfQllURVMJKChOU19NRDVSU0FfTUFYX0JJVFMrNy84KSoyKzMpCi0JLyogTWF4IGxlbmd0aCBvZiB0ZXh0IHNpZyBibG9jayAqLwotI2RlZmluZQlOU19NRDVSU0FfTUFYX0JBU0U2NAkoKChOU19NRDVSU0FfTUFYX0JZVEVTKzIpLzMpKjQpCi0jZGVmaW5lIE5TX01ENVJTQV9NSU5fU0laRQkoKE5TX01ENVJTQV9NSU5fQklUUys3KS84KQotI2RlZmluZSBOU19NRDVSU0FfTUFYX1NJWkUJKChOU19NRDVSU0FfTUFYX0JJVFMrNykvOCkKLQotI2RlZmluZSBOU19EU0FfU0lHX1NJWkUgICAgICAgICA0MQotI2RlZmluZSBOU19EU0FfTUlOX1NJWkUgICAgICAgICAyMTMKLSNkZWZpbmUgTlNfRFNBX01BWF9CWVRFUyAgICAgICAgNDA1Ci0KLS8qIE9mZnNldHMgaW50byBTSUcgcmVjb3JkIHJkYXRhIHRvIGZpbmQgdmFyaW91cyB2YWx1ZXMgKi8KLSNkZWZpbmUJTlNfU0lHX1RZUEUJMAkvKiBUeXBlIGZsYWdzICovCi0jZGVmaW5lCU5TX1NJR19BTEcJMgkvKiBBbGdvcml0aG0gKi8KLSNkZWZpbmUJTlNfU0lHX0xBQkVMUwkzCS8qIEhvdyBtYW55IGxhYmVscyBpbiBuYW1lICovCi0jZGVmaW5lCU5TX1NJR19PVFRMCTQJLyogT3JpZ2luYWwgVFRMICovCi0jZGVmaW5lCU5TX1NJR19FWFBJUgk4CS8qIEV4cGlyYXRpb24gdGltZSAqLwotI2RlZmluZQlOU19TSUdfU0lHTkVECTEyCS8qIFNpZ25hdHVyZSB0aW1lICovCi0jZGVmaW5lCU5TX1NJR19GT09UCTE2CS8qIEtleSBmb290cHJpbnQgKi8KLSNkZWZpbmUJTlNfU0lHX1NJR05FUgkxOAkvKiBEb21haW4gbmFtZSBvZiB3aG8gc2lnbmVkIGl0ICovCi0KLS8qIEhvdyBSUiB0eXBlcyBhcmUgcmVwcmVzZW50ZWQgYXMgYml0LWZsYWdzIGluIE5YVCByZWNvcmRzICovCi0jZGVmaW5lCU5TX05YVF9CSVRTIDgKLSNkZWZpbmUJTlNfTlhUX0JJVF9TRVQoICBuLHApIChwWyhuKS9OU19OWFRfQklUU10gfD0gICgweDgwPj4oKG4pJU5TX05YVF9CSVRTKSkpCi0jZGVmaW5lCU5TX05YVF9CSVRfQ0xFQVIobixwKSAocFsobikvTlNfTlhUX0JJVFNdICY9IH4oMHg4MD4+KChuKSVOU19OWFRfQklUUykpKQotI2RlZmluZQlOU19OWFRfQklUX0lTU0VUKG4scCkgKHBbKG4pL05TX05YVF9CSVRTXSAmICAgKDB4ODA+PigobiklTlNfTlhUX0JJVFMpKSkKLSNkZWZpbmUgTlNfTlhUX01BWCAxMjcKLQotLyoKLSAqIEVETlMwIGV4dGVuZGVkIGZsYWdzLCBob3N0IG9yZGVyLgotICovCi0jZGVmaW5lIE5TX09QVF9ETlNTRUNfT0sJMHg4MDAwVQotCi0vKgotICogSW5saW5lIHZlcnNpb25zIG9mIGdldC9wdXQgc2hvcnQvbG9uZy4gIFBvaW50ZXIgaXMgYWR2YW5jZWQuCi0gKi8KLSNkZWZpbmUgTlNfR0VUMTYocywgY3ApIGRvIHsgXAotCWNvbnN0IHVfY2hhciAqdF9jcCA9IChjb25zdCB1X2NoYXIgKikoY3ApOyBcCi0JKHMpID0gKCh1aW50MTZfdCl0X2NwWzBdIDw8IDgpIFwKLQkgICAgfCAoKHVpbnQxNl90KXRfY3BbMV0pIFwKLQkgICAgOyBcCi0JKGNwKSArPSBOU19JTlQxNlNaOyBcCi19IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZSBOU19HRVQzMihsLCBjcCkgZG8geyBcCi0JY29uc3QgdV9jaGFyICp0X2NwID0gKGNvbnN0IHVfY2hhciAqKShjcCk7IFwKLQkobCkgPSAoKHVpbnQzMl90KXRfY3BbMF0gPDwgMjQpIFwKLQkgICAgfCAoKHVpbnQzMl90KXRfY3BbMV0gPDwgMTYpIFwKLQkgICAgfCAoKHVpbnQzMl90KXRfY3BbMl0gPDwgOCkgXAotCSAgICB8ICgodWludDMyX3QpdF9jcFszXSkgXAotCSAgICA7IFwKLQkoY3ApICs9IE5TX0lOVDMyU1o7IFwKLX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQotCi0jZGVmaW5lIE5TX1BVVDE2KHMsIGNwKSBkbyB7IFwKLQl1aW50MzJfdCB0X3MgPSAodWludDMyX3QpKHMpOyBcCi0JdV9jaGFyICp0X2NwID0gKHVfY2hhciAqKShjcCk7IFwKLQkqdF9jcCsrID0gdF9zID4+IDg7IFwKLQkqdF9jcCAgID0gdF9zOyBcCi0JKGNwKSArPSBOU19JTlQxNlNaOyBcCi19IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZSBOU19QVVQzMihsLCBjcCkgZG8geyBcCi0JdWludDMyX3QgdF9sID0gKHVpbnQzMl90KShsKTsgXAotCXVfY2hhciAqdF9jcCA9ICh1X2NoYXIgKikoY3ApOyBcCi0JKnRfY3ArKyA9IHRfbCA+PiAyNDsgXAotCSp0X2NwKysgPSB0X2wgPj4gMTY7IFwKLQkqdF9jcCsrID0gdF9sID4+IDg7IFwKLQkqdF9jcCAgID0gdF9sOyBcCi0JKGNwKSArPSBOU19JTlQzMlNaOyBcCi19IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotLyoKLSAqIEFOU0kgQyBpZGVudGlmaWVyIGhpZGluZyBmb3IgYmluZCdzIGxpYi9uYW1lc2VyLgotICovCi0jZGVmaW5lCW5zX21zZ19nZXRmbGFnCQlfX25zX21zZ19nZXRmbGFnCi0jZGVmaW5lIG5zX2dldDE2CQlfX25zX2dldDE2Ci0jZGVmaW5lIG5zX2dldDMyCQlfX25zX2dldDMyCi0jZGVmaW5lIG5zX3B1dDE2CQlfX25zX3B1dDE2Ci0jZGVmaW5lIG5zX3B1dDMyCQlfX25zX3B1dDMyCi0jZGVmaW5lIG5zX2luaXRwYXJzZQkJX19uc19pbml0cGFyc2UKLSNkZWZpbmUgbnNfc2tpcHJyCQlfX25zX3NraXBycgotI2RlZmluZSBuc19wYXJzZXJyCQlfX25zX3BhcnNlcnIKLSNkZWZpbmUJbnNfc3ByaW50cnIJCV9fbnNfc3ByaW50cnIKLSNkZWZpbmUJbnNfc3ByaW50cnJmCQlfX25zX3NwcmludHJyZgotI2RlZmluZQluc19mb3JtYXRfdHRsCQlfX25zX2Zvcm1hdF90dGwKLSNkZWZpbmUJbnNfcGFyc2VfdHRsCQlfX25zX3BhcnNlX3R0bAotI2RlZmluZSBuc19kYXRldG9zZWNzCQlfX25zX2RhdGV0b3NlY3MKLSNkZWZpbmUJbnNfbmFtZV9udG9sCQlfX25zX25hbWVfbnRvbAotI2RlZmluZQluc19uYW1lX250b3AJCV9fbnNfbmFtZV9udG9wCi0jZGVmaW5lCW5zX25hbWVfcHRvbgkJX19uc19uYW1lX3B0b24KLSNkZWZpbmUJbnNfbmFtZV91bnBhY2sJCV9fbnNfbmFtZV91bnBhY2sKLSNkZWZpbmUJbnNfbmFtZV9wYWNrCQlfX25zX25hbWVfcGFjawotI2RlZmluZQluc19uYW1lX2NvbXByZXNzCV9fbnNfbmFtZV9jb21wcmVzcwotI2RlZmluZQluc19uYW1lX3VuY29tcHJlc3MJX19uc19uYW1lX3VuY29tcHJlc3MKLSNkZWZpbmUJbnNfbmFtZV9za2lwCQlfX25zX25hbWVfc2tpcAotI2RlZmluZQluc19uYW1lX3JvbGxiYWNrCV9fbnNfbmFtZV9yb2xsYmFjawotI2RlZmluZQluc19zaWduCQkJX19uc19zaWduCi0jZGVmaW5lCW5zX3NpZ24yCQlfX25zX3NpZ24yCi0jZGVmaW5lCW5zX3NpZ25fdGNwCQlfX25zX3NpZ25fdGNwCi0jZGVmaW5lCW5zX3NpZ25fdGNwMgkJX19uc19zaWduX3RjcDIKLSNkZWZpbmUJbnNfc2lnbl90Y3BfaW5pdAlfX25zX3NpZ25fdGNwX2luaXQKLSNkZWZpbmUgbnNfZmluZF90c2lnCQlfX25zX2ZpbmRfdHNpZwotI2RlZmluZQluc192ZXJpZnkJCV9fbnNfdmVyaWZ5Ci0jZGVmaW5lCW5zX3ZlcmlmeV90Y3AJCV9fbnNfdmVyaWZ5X3RjcAotI2RlZmluZQluc192ZXJpZnlfdGNwX2luaXQJX19uc192ZXJpZnlfdGNwX2luaXQKLSNkZWZpbmUJbnNfc2FtZWRvbWFpbgkJX19uc19zYW1lZG9tYWluCi0jZGVmaW5lCW5zX3N1YmRvbWFpbgkJX19uc19zdWJkb21haW4KLSNkZWZpbmUJbnNfbWFrZWNhbm9uCQlfX25zX21ha2VjYW5vbgotI2RlZmluZQluc19zYW1lbmFtZQkJX19uc19zYW1lbmFtZQotCi1fX0JFR0lOX0RFQ0xTCi1pbnQJCW5zX21zZ19nZXRmbGFnKG5zX21zZywgaW50KTsKLXVpbnQxNl90CW5zX2dldDE2KGNvbnN0IHVfY2hhciAqKTsKLXVpbnQzMl90CW5zX2dldDMyKGNvbnN0IHVfY2hhciAqKTsKLXZvaWQJCW5zX3B1dDE2KHVpbnQxNl90LCB1X2NoYXIgKik7Ci12b2lkCQluc19wdXQzMih1aW50MzJfdCwgdV9jaGFyICopOwotaW50CQluc19pbml0cGFyc2UoY29uc3QgdV9jaGFyICosIGludCwgbnNfbXNnICopOwotaW50CQluc19za2lwcnIoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBuc19zZWN0LCBpbnQpOwotaW50CQluc19wYXJzZXJyKG5zX21zZyAqLCBuc19zZWN0LCBpbnQsIG5zX3JyICopOwotaW50CQluc19zcHJpbnRycihjb25zdCBuc19tc2cgKiwgY29uc3QgbnNfcnIgKiwKLQkJCQkgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKLWludAkJbnNfc3ByaW50cnJmKGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwKLQkJCQkgIG5zX2NsYXNzLCBuc190eXBlLCB1X2xvbmcsIGNvbnN0IHVfY2hhciAqLAotCQkJCSAgc2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKLQkJCQkgIGNoYXIgKiwgc2l6ZV90KTsKLWludAkJbnNfZm9ybWF0X3R0bCh1X2xvbmcsIGNoYXIgKiwgc2l6ZV90KTsKLWludAkJbnNfcGFyc2VfdHRsKGNvbnN0IGNoYXIgKiwgdV9sb25nICopOwotdWludDMyX3QJbnNfZGF0ZXRvc2Vjcyhjb25zdCBjaGFyICpjcCwgaW50ICplcnJwKTsKLWludAkJbnNfbmFtZV9udG9sKGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKLWludAkJbnNfbmFtZV9udG9wKGNvbnN0IHVfY2hhciAqLCBjaGFyICosIHNpemVfdCk7Ci1pbnQJCW5zX25hbWVfcHRvbihjb25zdCBjaGFyICosIHVfY2hhciAqLCBzaXplX3QpOwotaW50CQluc19uYW1lX3VucGFjayhjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCi0JCQkJICAgIGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKLWludAkJbnNfbmFtZV9wYWNrKGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgaW50LAotCQkJCSAgY29uc3QgdV9jaGFyICoqLCBjb25zdCB1X2NoYXIgKiopOwotaW50CQluc19uYW1lX3VuY29tcHJlc3MoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAotCQkJCQljb25zdCB1X2NoYXIgKiwgY2hhciAqLCBzaXplX3QpOwotaW50CQluc19uYW1lX2NvbXByZXNzKGNvbnN0IGNoYXIgKiwgdV9jaGFyICosIHNpemVfdCwKLQkJCQkgICAgICBjb25zdCB1X2NoYXIgKiosIGNvbnN0IHVfY2hhciAqKik7Ci1pbnQJCW5zX25hbWVfc2tpcChjb25zdCB1X2NoYXIgKiosIGNvbnN0IHVfY2hhciAqKTsKLXZvaWQJCW5zX25hbWVfcm9sbGJhY2soY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKiwKLQkJCQkgICAgICBjb25zdCB1X2NoYXIgKiopOwotaW50CQluc19zaWduKHVfY2hhciAqLCBpbnQgKiwgaW50LCBpbnQsIHZvaWQgKiwKLQkJCSAgICAgY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCAqLCB0aW1lX3QpOwotaW50CQluc19zaWduMih1X2NoYXIgKiwgaW50ICosIGludCwgaW50LCB2b2lkICosCi0JCQkgICAgICBjb25zdCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiwgaW50ICosIHRpbWVfdCwKLQkJCSAgICAgIHVfY2hhciAqKiwgdV9jaGFyICoqKTsKLWludAkJbnNfc2lnbl90Y3AodV9jaGFyICosIGludCAqLCBpbnQsIGludCwKLQkJCQkgbnNfdGNwX3RzaWdfc3RhdGUgKiwgaW50KTsKLWludAkJbnNfc2lnbl90Y3AyKHVfY2hhciAqLCBpbnQgKiwgaW50LCBpbnQsCi0JCQkJICBuc190Y3BfdHNpZ19zdGF0ZSAqLCBpbnQsCi0JCQkJICB1X2NoYXIgKiosIHVfY2hhciAqKik7Ci1pbnQJCW5zX3NpZ25fdGNwX2luaXQodm9pZCAqLCBjb25zdCB1X2NoYXIgKiwgaW50LAotCQkJCQluc190Y3BfdHNpZ19zdGF0ZSAqKTsKLXVfY2hhcgkJKm5zX2ZpbmRfdHNpZyh1X2NoYXIgKiwgdV9jaGFyICopOwotaW50CQluc192ZXJpZnkodV9jaGFyICosIGludCAqLCB2b2lkICosCi0JCQkgICAgICAgY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCAqLAotCQkJICAgICAgIHRpbWVfdCAqLCBpbnQpOwotaW50CQluc192ZXJpZnlfdGNwKHVfY2hhciAqLCBpbnQgKiwgbnNfdGNwX3RzaWdfc3RhdGUgKiwgaW50KTsKLWludAkJbnNfdmVyaWZ5X3RjcF9pbml0KHZvaWQgKiwgY29uc3QgdV9jaGFyICosIGludCwKLQkJCQkJbnNfdGNwX3RzaWdfc3RhdGUgKik7Ci1pbnQJCW5zX3NhbWVkb21haW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotaW50CQluc19zdWJkb21haW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotaW50CQluc19tYWtlY2Fub24oY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCk7Ci1pbnQJCW5zX3NhbWVuYW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLV9fRU5EX0RFQ0xTCi0KLSNpZmRlZiBCSU5EXzRfQ09NUEFUCi0jaW5jbHVkZSAiYXJwYV9uYW1lc2VyX2NvbXBhdC5oIgotI2VuZGlmCi0KLSNpZiAwCi0jICBpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgotIyAgZGVmaW5lIFhMT0coLi4uKSAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsImxpYmMiLF9fVkFfQVJHU19fKQotI2Vsc2UKLSNkZWZpbmUgIFhMT0coLi4uKSAgIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhX0FSUEFfTkFNRVNFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2FycGFfbmFtZXNlcl9jb21wYXQuaCBiL2xpYmMvcHJpdmF0ZS9hcnBhX25hbWVzZXJfY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YmRmZDAuLjAwMDAwMDAKLS0tIGEvbGliYy9wcml2YXRlL2FycGFfbmFtZXNlcl9jb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKgkkTmV0QlNEOiBuYW1lc2VyX2NvbXBhdC5oLHYgMS4xLjEuMiAyMDA0LzExLzA3IDAxOjI4OjI3IGNocmlzdG9zIEV4cCAkCSovCi0KLS8qIENvcHlyaWdodCAoYykgMTk4MywgMTk4OQotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0gKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiAgICAgIGZyb20gbmFtZXNlci5oCTguMSAoQmVya2VsZXkpIDYvMi85MwotICoJSWQ6IG5hbWVzZXJfY29tcGF0LmgsdiAxLjEuMi4zLjQuMiAyMDA0LzA3LzAxIDA0OjQzOjQxIG1hcmthIEV4cAotICovCi0KLSNpZm5kZWYgX0FSUEFfTkFNRVNFUl9DT01QQVRfCi0jZGVmaW5lCV9BUlBBX05BTUVTRVJfQ09NUEFUXwotCi0jZGVmaW5lCV9fQklORAkJMTk5NTA2MjEJLyogKERFQUQpIGludGVyZmFjZSB2ZXJzaW9uIHN0YW1wLiAqLwotCi0jaW5jbHVkZSA8ZW5kaWFuLmg+Ci0KLSNpZm5kZWYgQllURV9PUkRFUgotI2lmIChCU0QgPj0gMTk5MTAzKQotIyBpbmNsdWRlIDxtYWNoaW5lL2VuZGlhbi5oPgotI2Vsc2UKLSNpZmRlZiBfX2xpbnV4Ci0jIGluY2x1ZGUgPGVuZGlhbi5oPgotI2Vsc2UKLSNkZWZpbmUJTElUVExFX0VORElBTgkxMjM0CS8qIGxlYXN0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKHZheCwgcGMpICovCi0jZGVmaW5lCUJJR19FTkRJQU4JNDMyMQkvKiBtb3N0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKElCTSwgbmV0KSAqLwotI2RlZmluZQlQRFBfRU5ESUFOCTM0MTIJLyogTFNCIGZpcnN0IGluIHdvcmQsIE1TVyBmaXJzdCBpbiBsb25nIChwZHApKi8KLQotI2lmIGRlZmluZWQodmF4KSB8fCBkZWZpbmVkKG5zMzIwMDApIHx8IGRlZmluZWQoc3VuMzg2KSB8fCBkZWZpbmVkKGkzODYpIHx8IFwKLSAgICBkZWZpbmVkKE1JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKEJJVF9aRVJPX09OX1JJR0hUKSB8fCBcCi0gICAgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hbHBoYSkgfHwgXAotICAgIChkZWZpbmVkKF9fTHlueF9fKSAmJiBkZWZpbmVkKF9feDg2X18pKQotI2RlZmluZSBCWVRFX09SREVSCUxJVFRMRV9FTkRJQU4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChzZWwpIHx8IGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKG1jNjgwMDApIHx8IGRlZmluZWQoc3BhcmMpIHx8IFwKLSAgICBkZWZpbmVkKGlzNjhrKSB8fCBkZWZpbmVkKHRhaG9lKSB8fCBkZWZpbmVkKGlibTAzMikgfHwgZGVmaW5lZChpYm0zNzApIHx8IFwKLSAgICBkZWZpbmVkKE1JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKF9JQk1SMikgfHwgZGVmaW5lZChER1VYKSB8fFwKLSAgICBkZWZpbmVkKGFwb2xsbykgfHwgZGVmaW5lZChfX2NvbnZleF9fKSB8fCBkZWZpbmVkKF9DUkFZKSB8fCBcCi0gICAgZGVmaW5lZChfX2hwcGEpIHx8IGRlZmluZWQoX19ocDkwMDApIHx8IFwKLSAgICBkZWZpbmVkKF9faHA5MDAwczMwMCkgfHwgZGVmaW5lZChfX2hwOTAwMHM3MDApIHx8IFwKLSAgICBkZWZpbmVkKF9faHAzMDAwczkwMCkgfHwgZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoTVBFKSB8fCBcCi0gICAgZGVmaW5lZCAoQklUX1pFUk9fT05fTEVGVCkgfHwgZGVmaW5lZChtNjhrKSB8fCBkZWZpbmVkKF9fc3BhcmMpIHx8ICBcCi0gICAgKGRlZmluZWQoX19MeW54X18pICYmIFwKLSAgICAgKGRlZmluZWQoX182OGtfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjX18pKSkKLSNkZWZpbmUgQllURV9PUkRFUglCSUdfRU5ESUFOCi0jZW5kaWYKLSNlbmRpZiAvKiBfX2xpbnV4ICovCi0jZW5kaWYgLyogQlNEICovCi0jZW5kaWYgLyogQllURV9PUkRFUiAqLwotCi0jaWYgIWRlZmluZWQoQllURV9PUkRFUikgfHwgXAotICAgIChCWVRFX09SREVSICE9IEJJR19FTkRJQU4gJiYgQllURV9PUkRFUiAhPSBMSVRUTEVfRU5ESUFOICYmIFwKLSAgICBCWVRFX09SREVSICE9IFBEUF9FTkRJQU4pCi0JLyogeW91IG11c3QgZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QgYml0IG9yZGVyIGlzIGZvcgotCSAqIHlvdXIgY29tcGlsZXIgLSB0aGUgbmV4dCBsaW5lIGlzIGFuIGludGVudGlvbmFsIGVycm9yCi0JICogd2hpY2ggd2lsbCBmb3JjZSB5b3VyIGNvbXBpbGVzIHRvIGJvbWIgdW50aWwgeW91IGZpeAotCSAqIHRoZSBhYm92ZSBtYWNyb3MuCi0JICovCi0gICNlcnJvciAiVW5kZWZpbmVkIG9yIGludmFsaWQgQllURV9PUkRFUiI7Ci0jZW5kaWYKLQotLyoKLSAqIFN0cnVjdHVyZSBmb3IgcXVlcnkgaGVhZGVyLiAgVGhlIG9yZGVyIG9mIHRoZSBmaWVsZHMgaXMgbWFjaGluZS0gYW5kCi0gKiBjb21waWxlci1kZXBlbmRlbnQsIGRlcGVuZGluZyBvbiB0aGUgYnl0ZS9iaXQgb3JkZXIgYW5kIHRoZSBsYXlvdXQKLSAqIG9mIGJpdCBmaWVsZHMuICBXZSB1c2UgYml0IGZpZWxkcyBvbmx5IGluIGludCB2YXJpYWJsZXMsIGFzIHRoaXMKLSAqIGlzIGFsbCBBTlNJIHJlcXVpcmVzLiAgVGhpcyByZXF1aXJlcyBhIHNvbWV3aGF0IGNvbmZ1c2luZyByZWFycmFuZ2VtZW50LgotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZAlpZCA6MTY7CQkvKiBxdWVyeSBpZGVudGlmaWNhdGlvbiBudW1iZXIgKi8KLSNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KLQkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCi0JdW5zaWduZWQJcXI6IDE7CQkvKiByZXNwb25zZSBmbGFnICovCi0JdW5zaWduZWQJb3Bjb2RlOiA0OwkvKiBwdXJwb3NlIG9mIG1lc3NhZ2UgKi8KLQl1bnNpZ25lZAlhYTogMTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLwotCXVuc2lnbmVkCXRjOiAxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KLQl1bnNpZ25lZAlyZDogMTsJCS8qIHJlY3Vyc2lvbiBkZXNpcmVkICovCi0JCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KLQl1bnNpZ25lZAlyYTogMTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KLQl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KLQl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KLQl1bnNpZ25lZAljZDogMTsJCS8qIGNoZWNraW5nIGRpc2FibGVkIGJ5IHJlc29sdmVyICovCi0JdW5zaWduZWQJcmNvZGUgOjQ7CS8qIHJlc3BvbnNlIGNvZGUgKi8KLSNlbmRpZgotI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTiB8fCBCWVRFX09SREVSID09IFBEUF9FTkRJQU4KLQkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCi0JdW5zaWduZWQJcmQgOjE7CQkvKiByZWN1cnNpb24gZGVzaXJlZCAqLwotCXVuc2lnbmVkCXRjIDoxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KLQl1bnNpZ25lZAlhYSA6MTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLwotCXVuc2lnbmVkCW9wY29kZSA6NDsJLyogcHVycG9zZSBvZiBtZXNzYWdlICovCi0JdW5zaWduZWQJcXIgOjE7CQkvKiByZXNwb25zZSBmbGFnICovCi0JCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KLQl1bnNpZ25lZAlyY29kZSA6NDsJLyogcmVzcG9uc2UgY29kZSAqLwotCXVuc2lnbmVkCWNkOiAxOwkJLyogY2hlY2tpbmcgZGlzYWJsZWQgYnkgcmVzb2x2ZXIgKi8KLQl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KLQl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KLQl1bnNpZ25lZAlyYSA6MTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KLSNlbmRpZgotCQkJLyogcmVtYWluaW5nIGJ5dGVzICovCi0JdW5zaWduZWQJcWRjb3VudCA6MTY7CS8qIG51bWJlciBvZiBxdWVzdGlvbiBlbnRyaWVzICovCi0JdW5zaWduZWQJYW5jb3VudCA6MTY7CS8qIG51bWJlciBvZiBhbnN3ZXIgZW50cmllcyAqLwotCXVuc2lnbmVkCW5zY291bnQgOjE2OwkvKiBudW1iZXIgb2YgYXV0aG9yaXR5IGVudHJpZXMgKi8KLQl1bnNpZ25lZAlhcmNvdW50IDoxNjsJLyogbnVtYmVyIG9mIHJlc291cmNlIGVudHJpZXMgKi8KLX0gSEVBREVSOwotCi0jZGVmaW5lIFBBQ0tFVFNaCU5TX1BBQ0tFVFNaCi0jZGVmaW5lIE1BWEROQU1FCU5TX01BWEROQU1FCi0jZGVmaW5lIE1BWENETkFNRQlOU19NQVhDRE5BTUUKLSNkZWZpbmUgTUFYTEFCRUwJTlNfTUFYTEFCRUwKLSNkZWZpbmUJSEZJWEVEU1oJTlNfSEZJWEVEU1oKLSNkZWZpbmUgUUZJWEVEU1oJTlNfUUZJWEVEU1oKLSNkZWZpbmUgUlJGSVhFRFNaCU5TX1JSRklYRURTWgotI2RlZmluZQlJTlQzMlNaCQlOU19JTlQzMlNaCi0jZGVmaW5lCUlOVDE2U1oJCU5TX0lOVDE2U1oKLSNkZWZpbmUJSU5UOFNaCQlOU19JTlQ4U1oKLSNkZWZpbmUJSU5BRERSU1oJTlNfSU5BRERSU1oKLSNkZWZpbmUJSU42QUREUlNaCU5TX0lONkFERFJTWgotI2RlZmluZQlJTkRJUl9NQVNLCU5TX0NNUFJTRkxHUwotI2RlZmluZSBOQU1FU0VSVkVSX1BPUlQJTlNfREVGQVVMVFBPUlQKLQotI2RlZmluZSBTX1pPTkUJCW5zX3Nfem4KLSNkZWZpbmUgU19QUkVSRVEJbnNfc19wcgotI2RlZmluZSBTX1VQREFURQluc19zX3VkCi0jZGVmaW5lIFNfQUREVAkJbnNfc19hcgotCi0jZGVmaW5lIFFVRVJZCQluc19vX3F1ZXJ5Ci0jZGVmaW5lIElRVUVSWQkJbnNfb19pcXVlcnkKLSNkZWZpbmUgU1RBVFVTCQluc19vX3N0YXR1cwotI2RlZmluZQlOU19OT1RJRllfT1AJbnNfb19ub3RpZnkKLSNkZWZpbmUJTlNfVVBEQVRFX09QCW5zX29fdXBkYXRlCi0KLSNkZWZpbmUgTk9FUlJPUgkJbnNfcl9ub2Vycm9yCi0jZGVmaW5lIEZPUk1FUlIJCW5zX3JfZm9ybWVycgotI2RlZmluZSBTRVJWRkFJTAluc19yX3NlcnZmYWlsCi0jZGVmaW5lIE5YRE9NQUlOCW5zX3Jfbnhkb21haW4KLSNkZWZpbmUgTk9USU1QCQluc19yX25vdGltcGwKLSNkZWZpbmUgUkVGVVNFRAkJbnNfcl9yZWZ1c2VkCi0jZGVmaW5lIFlYRE9NQUlOCW5zX3JfeXhkb21haW4KLSNkZWZpbmUgWVhSUlNFVAkJbnNfcl95eHJyc2V0Ci0jZGVmaW5lIE5YUlJTRVQJCW5zX3JfbnhycnNldAotI2RlZmluZSBOT1RBVVRICQluc19yX25vdGF1dGgKLSNkZWZpbmUgTk9UWk9ORQkJbnNfcl9ub3R6b25lCi0vKiNkZWZpbmUgQkFEU0lHCQluc19yX2JhZHNpZyovCi0vKiNkZWZpbmUgQkFES0VZCQluc19yX2JhZGtleSovCi0vKiNkZWZpbmUgQkFEVElNRQkJbnNfcl9iYWR0aW1lKi8KLQotCi0jZGVmaW5lIERFTEVURQkJbnNfdW9wX2RlbGV0ZQotI2RlZmluZSBBREQJCW5zX3VvcF9hZGQKLQotI2RlZmluZSBUX0EJCW5zX3RfYQotI2RlZmluZSBUX05TCQluc190X25zCi0jZGVmaW5lIFRfTUQJCW5zX3RfbWQKLSNkZWZpbmUgVF9NRgkJbnNfdF9tZgotI2RlZmluZSBUX0NOQU1FCQluc190X2NuYW1lCi0jZGVmaW5lIFRfU09BCQluc190X3NvYQotI2RlZmluZSBUX01CCQluc190X21iCi0jZGVmaW5lIFRfTUcJCW5zX3RfbWcKLSNkZWZpbmUgVF9NUgkJbnNfdF9tcgotI2RlZmluZSBUX05VTEwJCW5zX3RfbnVsbAotI2RlZmluZSBUX1dLUwkJbnNfdF93a3MKLSNkZWZpbmUgVF9QVFIJCW5zX3RfcHRyCi0jZGVmaW5lIFRfSElORk8JCW5zX3RfaGluZm8KLSNkZWZpbmUgVF9NSU5GTwkJbnNfdF9taW5mbwotI2RlZmluZSBUX01YCQluc190X214Ci0jZGVmaW5lIFRfVFhUCQluc190X3R4dAotI2RlZmluZQlUX1JQCQluc190X3JwCi0jZGVmaW5lIFRfQUZTREIJCW5zX3RfYWZzZGIKLSNkZWZpbmUgVF9YMjUJCW5zX3RfeDI1Ci0jZGVmaW5lIFRfSVNETgkJbnNfdF9pc2RuCi0jZGVmaW5lIFRfUlQJCW5zX3RfcnQKLSNkZWZpbmUgVF9OU0FQCQluc190X25zYXAKLSNkZWZpbmUgVF9OU0FQX1BUUgluc190X25zYXBfcHRyCi0jZGVmaW5lCVRfU0lHCQluc190X3NpZwotI2RlZmluZQlUX0tFWQkJbnNfdF9rZXkKLSNkZWZpbmUJVF9QWAkJbnNfdF9weAotI2RlZmluZQlUX0dQT1MJCW5zX3RfZ3BvcwotI2RlZmluZQlUX0FBQUEJCW5zX3RfYWFhYQotI2RlZmluZQlUX0xPQwkJbnNfdF9sb2MKLSNkZWZpbmUJVF9OWFQJCW5zX3Rfbnh0Ci0jZGVmaW5lCVRfRUlECQluc190X2VpZAotI2RlZmluZQlUX05JTUxPQwluc190X25pbWxvYwotI2RlZmluZQlUX1NSVgkJbnNfdF9zcnYKLSNkZWZpbmUgVF9BVE1BCQluc190X2F0bWEKLSNkZWZpbmUgVF9OQVBUUgkJbnNfdF9uYXB0cgotI2RlZmluZSBUX0E2CQluc190X2E2Ci0jZGVmaW5lCVRfVFNJRwkJbnNfdF90c2lnCi0jZGVmaW5lCVRfSVhGUgkJbnNfdF9peGZyCi0jZGVmaW5lIFRfQVhGUgkJbnNfdF9heGZyCi0jZGVmaW5lIFRfTUFJTEIJCW5zX3RfbWFpbGIKLSNkZWZpbmUgVF9NQUlMQQkJbnNfdF9tYWlsYQotI2RlZmluZSBUX0FOWQkJbnNfdF9hbnkKLQotI2RlZmluZSBDX0lOCQluc19jX2luCi0jZGVmaW5lIENfQ0hBT1MJCW5zX2NfY2hhb3MKLSNkZWZpbmUgQ19IUwkJbnNfY19ocwotLyogQklORF9VUERBVEUgKi8KLSNkZWZpbmUgQ19OT05FCQluc19jX25vbmUKLSNkZWZpbmUgQ19BTlkJCW5zX2NfYW55Ci0KLSNkZWZpbmUJR0VUU0hPUlQJCU5TX0dFVDE2Ci0jZGVmaW5lCUdFVExPTkcJCQlOU19HRVQzMgotI2RlZmluZQlQVVRTSE9SVAkJTlNfUFVUMTYKLSNkZWZpbmUJUFVUTE9ORwkJCU5TX1BVVDMyCi0KLSNlbmRpZiAvKiBfQVJQQV9OQU1FU0VSX0NPTVBBVF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXNtLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX2FzbS5oCmluZGV4IDgwM2ZmMjkuLjdjMjY4NmYgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXNtLmgKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19hc20uaApAQCAtMjksMTUgKzI5LDMyIEBACiAjaWZuZGVmIF9QUklWQVRFX0JJT05JQ19BU01fSF8KICNkZWZpbmUgX1BSSVZBVEVfQklPTklDX0FTTV9IXwogCi0jaWYgIWRlZmluZWQoX19taXBzX18pCi0vKiA8bWFjaGluZS9hc20uaD4gY2F1c2VzIHRyb3VibGUgb24gbWlwcyBieSBpbmNsdWRpbmcgcmVnZGVmcy5oLiAqLwotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4gLyogRm9yIHN5c3RlbSBjYWxsIG51bWJlcnMuICovCiAjZGVmaW5lIE1BWF9FUlJOTyA0MDk1ICAvKiBGb3IgcmVjb2duaXppbmcgc3lzdGVtIGNhbGwgZXJyb3IgcmV0dXJucy4gKi8KIAotLyogVE9ETzogYWRkIEVOVFJZX1BSSVZBVEUuICovCi0vKiBUT0RPOiBhZGQgQVNNX0FMSUFTIG1hY3JvLiAqLworI2RlZmluZSBfX2Jpb25pY19hc21fY3VzdG9tX2VudHJ5KGYpCisjZGVmaW5lIF9fYmlvbmljX2FzbV9jdXN0b21fZW5kKGYpCisjZGVmaW5lIF9fYmlvbmljX2FzbV9mdW5jdGlvbl90eXBlIEBmdW5jdGlvbgorCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworI2RlZmluZSBFTlRSWShmKSBcCisgICAgLnRleHQ7IFwKKyAgICAuZ2xvYmwgZjsgXAorICAgIF9BTElHTl9URVhUOyBcCisgICAgLnR5cGUgZiwgX19iaW9uaWNfYXNtX2Z1bmN0aW9uX3R5cGU7IFwKKyAgICBmOiBcCisgICAgX19iaW9uaWNfYXNtX2N1c3RvbV9lbnRyeShmKTsgXAorICAgIC5jZmlfc3RhcnRwcm9jIFwKKworI2RlZmluZSBFTkQoZikgXAorICAgIC5jZmlfZW5kcHJvYzsgXAorICAgIC5zaXplIGYsIC4tZjsgXAorICAgIF9fYmlvbmljX2FzbV9jdXN0b21fZW5kKGYpIFwKKworLyogTGlrZSBFTlRSWSwgYnV0IHdpdGggaGlkZGVuIHZpc2liaWxpdHkuICovCisjZGVmaW5lIEVOVFJZX1BSSVZBVEUoZikgXAorICAgIEVOVFJZKGYpOyBcCisgICAgLmhpZGRlbiBmIFwKIAogI2VuZGlmIC8qIF9QUklWQVRFX0JJT05JQ19BU01fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXV4di5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19hdXh2LmgKaW5kZXggNjljNTM0MS4uNTNmY2M0OSAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL2Jpb25pY19hdXh2LmgKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19hdXh2LmgKQEAgLTI5LDExICsyOSwxMiBAQAogI2RlZmluZSBfUFJJVkFURV9CSU9OSUNfQVVYVl9IXwogCiAjaW5jbHVkZSA8ZWxmLmg+CisjaW5jbHVkZSA8bGluay5oPgogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogCiBfX0JFR0lOX0RFQ0xTCiAKLWV4dGVybiBFbGZfYXV4dl90KiBfX2xpYmNfYXV4djsKK2V4dGVybiBFbGZXKGF1eHZfdCkqIF9fbGliY19hdXh2OwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX2NvbmZpZy5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzk4MTFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19jb25maWcuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX0NPTkZJR19IXworI2RlZmluZSBfQklPTklDX0NPTkZJR19IXworCisvLyB2YWxsb2MoMykgYW5kIHB2YWxsb2MoMykgd2VyZSByZW1vdmVkIGZyb20gUE9TSVggMjAwNC4gV2UgZG8gbm90IGluY2x1ZGUgdGhlbQorLy8gZm9yIExQNjQsIGJ1dCB0aGUgc3ltYm9scyByZW1haW4gaW4gTFAzMiBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkuCisjaWYgIWRlZmluZWQoX19MUDY0X18pCisjZGVmaW5lIEhBVkVfREVQUkVDQVRFRF9NQUxMT0NfRlVOQ1MgMQorI2VuZGlmCisKKyNlbmRpZiAvLyBfQklPTklDX0NPTkZJR19IXwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19mdXRleC5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19mdXRleC5oCmluZGV4IGJmYzM1MjAuLmJkMmJkMzYgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfZnV0ZXguaAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX2Z1dGV4LmgKQEAgLTI4LDM0ICsyOCw0MyBAQAogI2lmbmRlZiBfQklPTklDX0ZVVEVYX0gKICNkZWZpbmUgX0JJT05JQ19GVVRFWF9ICiAKKyNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAKIF9fQkVHSU5fREVDTFMKIAotZXh0ZXJuIGludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpOwotZXh0ZXJuIGludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpOworc3RydWN0IHRpbWVzcGVjOwogCi1leHRlcm4gaW50IF9fZnV0ZXhfc3lzY2FsbDModm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgb3AsIGludCB2YWwpOwotZXh0ZXJuIGludCBfX2Z1dGV4X3N5c2NhbGw0KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IG9wLCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpOworc3RhdGljIGlubGluZSBfX2Fsd2F5c19pbmxpbmUgaW50IF9fZnV0ZXgodm9sYXRpbGUgdm9pZCogZnR4LCBpbnQgb3AsIGludCB2YWx1ZSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KSB7CisgIC8vIE91ciBnZW5lcmF0ZWQgc3lzY2FsbCBhc3NlbWJsZXIgc2V0cyBlcnJubywgYnV0IG91ciBjYWxsZXJzIChwdGhyZWFkIGZ1bmN0aW9ucykgZG9uJ3Qgd2FudCB0by4KKyAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisgIGludCByZXN1bHQgPSBzeXNjYWxsKF9fTlJfZnV0ZXgsIGZ0eCwgb3AsIHZhbHVlLCB0aW1lb3V0KTsKKyAgaWYgKF9fcHJlZGljdF9mYWxzZShyZXN1bHQgPT0gLTEpKSB7CisgICAgcmVzdWx0ID0gLWVycm5vOworICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KIAotI2lmbmRlZiBGVVRFWF9QUklWQVRFX0ZMQUcKLSNkZWZpbmUgRlVURVhfUFJJVkFURV9GTEFHICAxMjgKLSNlbmRpZgorc3RhdGljIGlubGluZSBpbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQqIGZ0eCwgaW50IGNvdW50KSB7CisgIHJldHVybiBfX2Z1dGV4KGZ0eCwgRlVURVhfV0FLRSwgY291bnQsIE5VTEwpOworfQogCi0jaWZuZGVmIEZVVEVYX1dBSVRfUFJJVkFURQotI2RlZmluZSBGVVRFWF9XQUlUX1BSSVZBVEUgIChGVVRFWF9XQUlUfEZVVEVYX1BSSVZBVEVfRkxBRykKLSNlbmRpZgorc3RhdGljIGlubGluZSBpbnQgX19mdXRleF93YWtlX2V4KHZvbGF0aWxlIHZvaWQqIGZ0eCwgYm9vbCBzaGFyZWQsIGludCBjb3VudCkgeworICByZXR1cm4gX19mdXRleChmdHgsIHNoYXJlZCA/IEZVVEVYX1dBS0UgOiBGVVRFWF9XQUtFX1BSSVZBVEUsIGNvdW50LCBOVUxMKTsKK30KIAotI2lmbmRlZiBGVVRFWF9XQUtFX1BSSVZBVEUKLSNkZWZpbmUgRlVURVhfV0FLRV9QUklWQVRFICAoRlVURVhfV0FLRXxGVVRFWF9QUklWQVRFX0ZMQUcpCi0jZW5kaWYKK3N0YXRpYyBpbmxpbmUgaW50IF9fZnV0ZXhfd2FpdCh2b2xhdGlsZSB2b2lkKiBmdHgsIGludCB2YWx1ZSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB0aW1lb3V0KSB7CisgIHJldHVybiBfX2Z1dGV4KGZ0eCwgRlVURVhfV0FJVCwgdmFsdWUsIHRpbWVvdXQpOworfQogCi0vKiBMaWtlIF9fZnV0ZXhfd2FpdC93YWtlLCBidXQgdGFrZSBhbiBhZGRpdGlvbmFsICdwc2hhcmVkJyBhcmd1bWVudC4KLSAqIHdoZW4gbm9uLTAsIHRoaXMgd2lsbCB1c2Ugbm9ybWFsIGZ1dGV4ZXMuIE90aGVyd2lzZSwgcHJpdmF0ZSBmdXRleGVzLgotICovCi1leHRlcm4gaW50IF9fZnV0ZXhfd2FrZV9leCh2b2xhdGlsZSB2b2lkICpmdHgsIGludCBwc2hhcmVkLCBpbnQgdmFsKTsKLWV4dGVybiBpbnQgX19mdXRleF93YWl0X2V4KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IHBzaGFyZWQsIGludCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCk7CitzdGF0aWMgaW5saW5lIGludCBfX2Z1dGV4X3dhaXRfZXgodm9sYXRpbGUgdm9pZCogZnR4LCBib29sIHNoYXJlZCwgaW50IHZhbHVlLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIHRpbWVvdXQpIHsKKyAgcmV0dXJuIF9fZnV0ZXgoZnR4LCBzaGFyZWQgPyBGVVRFWF9XQUlUIDogRlVURVhfV0FJVF9QUklWQVRFLCB2YWx1ZSwgdGltZW91dCk7Cit9CiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfbWFjcm9zLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX21hY3Jvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNzk0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX21hY3Jvcy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9CSU9OSUNfTUFDUk9TX0hfCisjZGVmaW5lIF9CSU9OSUNfTUFDUk9TX0hfCisKKy8vIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTiBkaXNhbGxvd3MgdGhlIGNvcHkgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMuCisvLyBJdCBnb2VzIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgaW4gYSBjbGFzcy4KKyNkZWZpbmUgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSBcCisgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXAorICB2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgYWxsIHRoZSBpbXBsaWNpdCBjb25zdHJ1Y3RvcnMsIG5hbWVseSB0aGUKKy8vIGRlZmF1bHQgY29uc3RydWN0b3IsIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMuCisvLworLy8gVGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzCisvLyB0aGF0IHdhbnRzIHRvIHByZXZlbnQgYW55b25lIGZyb20gaW5zdGFudGlhdGluZyBpdC4gVGhpcyBpcworLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9yIGNsYXNzZXMgY29udGFpbmluZyBvbmx5IHN0YXRpYyBtZXRob2RzLgorI2RlZmluZSBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoVHlwZU5hbWUpIFwKKyAgVHlwZU5hbWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkKKworI2RlZmluZSBCSU9OSUNfQUxJR04odmFsdWUsIGFsaWdubWVudCkgXAorICAoKCh2YWx1ZSkgKyAoYWxpZ25tZW50KSAtIDEpICYgfigoYWxpZ25tZW50KSAtIDEpKQorCisjZGVmaW5lIEJJT05JQ19ST1VORF9VUF9QT1dFUl9PRl8yKHZhbHVlKSBcCisgIChzaXplb2YodmFsdWUpID09IDgpIFwKKyAgICA/ICgxVUwgPDwgKDY0IC0gX19idWlsdGluX2Nsemwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmFsdWUpKSkpIFwKKyAgICA6ICgxVUwgPDwgKDMyIC0gX19idWlsdGluX2NseihzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSkpKQorCisjZW5kaWYgLy8gX0JJT05JQ19NQUNST1NfSF8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfbWJzdGF0ZS5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19tYnN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4YjQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfbWJzdGF0ZS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX01CU1RBVEVfSAorI2RlZmluZSBfQklPTklDX01CU1RBVEVfSAorCisjaW5jbHVkZSA8d2NoYXIuaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogVGhlc2UgcmV0dXJuIHZhbHVlcyBhcmUgc3BlY2lmaWVkIGJ5IFBPU0lYIGZvciBtdWx0aWJ5dGUgY29udmVyc2lvbgorICogZnVuY3Rpb25zLgorICovCisjZGVmaW5lIF9fTUJfRVJSX0lMTEVHQUxfU0VRVUVOQ0Ugc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKyNkZWZpbmUgX19NQl9FUlJfSU5DT01QTEVURV9TRVFVRU5DRSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKQorCisjZGVmaW5lIF9fTUJfSVNfRVJSKHJ2KSAocnYgPT0gX19NQl9FUlJfSUxMRUdBTF9TRVFVRU5DRSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcnYgPT0gX19NQl9FUlJfSU5DT01QTEVURV9TRVFVRU5DRSkKKworc2l6ZV90IG1ic3RhdGVfYnl0ZXNfc29fZmFyKGNvbnN0IG1ic3RhdGVfdCogcHMpOwordm9pZCBtYnN0YXRlX3NldF9ieXRlKG1ic3RhdGVfdCogcHMsIGludCBpLCBjaGFyIGJ5dGUpOwordWludDhfdCBtYnN0YXRlX2dldF9ieXRlKGNvbnN0IG1ic3RhdGVfdCogcHMsIGludCBuKTsKK3NpemVfdCByZXNldF9hbmRfcmV0dXJuX2lsbGVnYWwoaW50IF9lcnJubywgbWJzdGF0ZV90KiBwcyk7CitzaXplX3QgcmVzZXRfYW5kX3JldHVybihpbnQgX3JldHVybiwgbWJzdGF0ZV90KiBwcyk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBfQklPTklDX01CU1RBVEVfSApkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19uYW1lX21lbS5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19uYW1lX21lbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjYxNjNkLi4wMDAwMDAwCi0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfbmFtZV9tZW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgX0JJT05JQ19OQU1FX01FTV9ICi0jZGVmaW5lIF9CSU9OSUNfTkFNRV9NRU1fSAotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLV9fQkVHSU5fREVDTFMKLQotaW50IF9fYmlvbmljX25hbWVfbWVtKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUpOwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfcHJjdGwuaCBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfcHJjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDNjY2NiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19wcmN0bC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEJJT05JQ19QUkNUTF9ICisjZGVmaW5lIEJJT05JQ19QUkNUTF9ICisKKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKworLy8gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBieSBBbmRyb2lkIGtlcm5lbHMsIHNvIGl0J3Mgbm90IGluIHRoZSB1YXBpIGhlYWRlcnMuCisjZGVmaW5lIFBSX1NFVF9WTUEgICAweDUzNTY0ZDQxCisjZGVmaW5lIFBSX1NFVF9WTUFfQU5PTl9OQU1FICAgIDAKKworI2VuZGlmIC8vIEJJT05JQ19QUkNUTF9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX3N0cmluZ191dGlscy5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19zdHJpbmdfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBlY2NmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19zdHJpbmdfdXRpbHMuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX1NUUklOR19VVElMU19IXworI2RlZmluZSBfQklPTklDX1NUUklOR19VVElMU19IXworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBlbmRzX3dpdGgoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyKSB7CisgIHNpemVfdCBzMV9sZW5ndGggPSBzdHJsZW4oczEpOworICBzaXplX3QgczJfbGVuZ3RoID0gc3RybGVuKHMyKTsKKyAgaWYgKHMyX2xlbmd0aCA+IHMxX2xlbmd0aCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4gbWVtY21wKHMxICsgKHMxX2xlbmd0aCAtIHMyX2xlbmd0aCksIHMyLCBzMl9sZW5ndGgpID09IDA7Cit9CisKKyNlbmRpZiAvLyBfQklPTklDX1NUUklOR19VVElMU19IXwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY190aW1lLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX3RpbWUuaAppbmRleCA3YzgwZjU5Li4wMzBkY2ZkIDEwMDY0NAotLS0gYS9saWJjL3ByaXZhdGUvYmlvbmljX3RpbWUuaAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX3RpbWUuaApAQCAtMzMsMzEgKzMzLDggQEAKIAogX19CRUdJTl9ERUNMUwogCi0jaWZuZGVmIF9CSU9OSUNfU1RSRlRJTUVfVFpfREVDTEFSRUQKLSNkZWZpbmUgX0JJT05JQ19TVFJGVElNRV9UWl9ERUNMQVJFRAotCi1zdHJ1Y3Qgc3RyZnRpbWVfbG9jYWxlIHsKLSAgICBjb25zdCBjaGFyICogIG1vblsxMl07Ci0gICAgY29uc3QgY2hhciAqICBtb250aFsxMl07Ci0gICAgY29uc3QgY2hhciAqICBzdGFuZGFsb25lX21vbnRoWzEyXTsKLSAgICBjb25zdCBjaGFyICogIHdkYXlbN107Ci0gICAgY29uc3QgY2hhciAqICB3ZWVrZGF5WzddOwotICAgIGNvbnN0IGNoYXIgKiAgWF9mbXQ7Ci0gICAgY29uc3QgY2hhciAqICB4X2ZtdDsKLSAgICBjb25zdCBjaGFyICogIGNfZm10OwotICAgIGNvbnN0IGNoYXIgKiAgYW07Ci0gICAgY29uc3QgY2hhciAqICBwbTsKLSAgICBjb25zdCBjaGFyICogIGRhdGVfZm10OwotfTsKLQotLyoKLSAqIE5vdGU6IHlvdSBzaG91bGQgY29uc2lkZXIgdGhlc2UgZXh0ZW5zaW9ucyBkZXByZWNhdGVkIGFuZCB1c2UgbWFuYWdlZCBjb2RlIG9yIGljdTRjIGluc3RlYWQuCi0gKi8KLWV4dGVybiBzaXplX3Qgc3RyZnRpbWVfdHooY2hhciogcywgc2l6ZV90IG1heCwgY29uc3QgY2hhciogZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0qIHRtLCBjb25zdCBzdHJ1Y3Qgc3RyZnRpbWVfbG9jYWxlKiBsYyk7Ci1leHRlcm4gdGltZV90IG1rdGltZV90eihzdHJ1Y3QgdG0qIGNvbnN0IHRtcCwgY2hhciBjb25zdCogdHopOwotZXh0ZXJuIHZvaWQgbG9jYWx0aW1lX3R6KGNvbnN0IHRpbWVfdCogY29uc3QgdGltZXAsIHN0cnVjdCB0bSogdG1wLCBjb25zdCBjaGFyKiB0eik7Ci0KLSNlbmRpZiAvKiBfQklPTklDX1NUUkZUSU1FX1RaX0RFQ0xBUkVEICovCisvLyBXZSBjYW4ndCByZW1vdmUgdGhpcyAoYW5kIHRoaXMgZmlsZSkgdW50aWwgd2UgZml4IE10cFV0aWxzLmNwcC4KK3RpbWVfdCBta3RpbWVfdHooc3RydWN0IHRtKiBjb25zdCwgY2hhciBjb25zdCopOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX3Rscy5oIGIvbGliYy9wcml2YXRlL2Jpb25pY190bHMuaAppbmRleCBhNDJhOGFiLi41NmE2MWJlIDEwMDY0NAotLS0gYS9saWJjL3ByaXZhdGUvYmlvbmljX3Rscy5oCisrKyBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfdGxzLmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN5cy9saW1pdHMuaD4KKyNpbmNsdWRlICJiaW9uaWNfbWFjcm9zLmgiCiAjaW5jbHVkZSAiX19nZXRfdGxzLmgiCiAKIF9fQkVHSU5fREVDTFMKQEAgLTQ2LDMyICs0NywyNyBAQAogICoqIHByZS1hbGxvY2F0ZWQgc2xvdCBkaXJlY3RseSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uKS4KICAqKi8KIAotLyogV2VsbC1rbm93biBUTFMgc2xvdHMuIFdoYXQgZGF0YSBnb2VzIGluIHdoaWNoIHNsb3QgaXMgYXJiaXRyYXJ5IHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuICovCisvLyBXZWxsLWtub3duIFRMUyBzbG90cy4gV2hhdCBkYXRhIGdvZXMgaW4gd2hpY2ggc2xvdCBpcyBhcmJpdHJhcnkgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KIGVudW0gewotICBUTFNfU0xPVF9TRUxGID0gMCwgLyogVGhlIGtlcm5lbCByZXF1aXJlcyB0aGlzIHNwZWNpZmljIHNsb3QgZm9yIHg4Ni4gKi8KKyAgVExTX1NMT1RfU0VMRiA9IDAsIC8vIFRoZSBrZXJuZWwgcmVxdWlyZXMgdGhpcyBzcGVjaWZpYyBzbG90IGZvciB4ODYuCiAgIFRMU19TTE9UX1RIUkVBRF9JRCwKICAgVExTX1NMT1RfRVJSTk8sCiAKLSAgLyogVGhpcyBzbG90IGluIHRoZSBjaGlsZCdzIFRMUyBpcyB1c2VkIHRvIHN5bmNocm9uaXplIHRoZSBwYXJlbnQgYW5kIGNoaWxkCi0gICAqIGR1cmluZyB0aHJlYWQgaW5pdGlhbGl6YXRpb24uIFRoZSBjaGlsZCBmaW5pc2hlcyB3aXRoIHRoaXMgbXV0ZXggYmVmb3JlCi0gICAqIHJ1bm5pbmcgYW55IGNvZGUgdGhhdCBjYW4gc2V0IGVycm5vLCBzbyB3ZSBjYW4gcmV1c2UgdGhlIGVycm5vIHNsb3QuICovCi0gIFRMU19TTE9UX1NUQVJUX01VVEVYID0gVExTX1NMT1RfRVJSTk8sCi0KLSAgLyogVGhlc2UgdHdvIGFyZW4ndCB1c2VkIGJ5IGJpb25pYyBpdHNlbGYsIGJ1dCBhbGxvdyB0aGUgZ3JhcGhpY3MgY29kZSB0bwotICAgKiBhY2Nlc3MgVExTIGRpcmVjdGx5IHJhdGhlciB0aGFuIHVzaW5nIHRoZSBwdGhyZWFkIEFQSS4gKi8KKyAgLy8gVGhlc2UgdHdvIGFyZW4ndCB1c2VkIGJ5IGJpb25pYyBpdHNlbGYsIGJ1dCBhbGxvdyB0aGUgZ3JhcGhpY3MgY29kZSB0bworICAvLyBhY2Nlc3MgVExTIGRpcmVjdGx5IHJhdGhlciB0aGFuIHVzaW5nIHRoZSBwdGhyZWFkIEFQSS4KICAgVExTX1NMT1RfT1BFTkdMX0FQSSA9IDMsCiAgIFRMU19TTE9UX09QRU5HTCA9IDQsCiAKLSAgLyogVGhpcyBzbG90IGlzIG9ubHkgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyIHRvCi0gICAqIGxpYmMuc28gd2hlbiB0aGUgQyBsaWJyYXJ5IGlzIGxvYWRlZCBpbiB0byBtZW1vcnkuIFRoZSBDIHJ1bnRpbWUgaW5pdAotICAgKiBmdW5jdGlvbiB3aWxsIHRoZW4gY2xlYXIgaXQuIFNpbmNlIGl0cyB1c2UgaXMgZXh0cmVtZWx5IHRlbXBvcmFyeSwKLSAgICogd2UgcmV1c2UgYW4gZXhpc3RpbmcgbG9jYXRpb24gdGhhdCBpc24ndCBuZWVkZWQgZHVyaW5nIGxpYmMgc3RhcnR1cC4gKi8KKyAgLy8gVGhpcyBzbG90IGlzIG9ubHkgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyIHRvCisgIC8vIGxpYmMuc28gd2hlbiB0aGUgQyBsaWJyYXJ5IGlzIGxvYWRlZCBpbiB0byBtZW1vcnkuIFRoZSBDIHJ1bnRpbWUgaW5pdAorICAvLyBmdW5jdGlvbiB3aWxsIHRoZW4gY2xlYXIgaXQuIFNpbmNlIGl0cyB1c2UgaXMgZXh0cmVtZWx5IHRlbXBvcmFyeSwKKyAgLy8gd2UgcmV1c2UgYW4gZXhpc3RpbmcgbG9jYXRpb24gdGhhdCBpc24ndCBuZWVkZWQgZHVyaW5nIGxpYmMgc3RhcnR1cC4KICAgVExTX1NMT1RfQklPTklDX1BSRUlOSVQgPSBUTFNfU0xPVF9PUEVOR0xfQVBJLAogCi0gIFRMU19TTE9UX1NUQUNLX0dVQVJEID0gNSwgLyogR0NDIHJlcXVpcmVzIHRoaXMgc3BlY2lmaWMgc2xvdCBmb3IgeDg2LiAqLworICBUTFNfU0xPVF9TVEFDS19HVUFSRCA9IDUsIC8vIEdDQyByZXF1aXJlcyB0aGlzIHNwZWNpZmljIHNsb3QgZm9yIHg4Ni4KICAgVExTX1NMT1RfRExFUlJPUiwKIAotICBUTFNfU0xPVF9GSVJTVF9VU0VSX1NMT1QgLyogTXVzdCBjb21lIGxhc3QhICovCisgIFRMU19TTE9UX0ZJUlNUX1VTRVJfU0xPVCAvLyBNdXN0IGNvbWUgbGFzdCEKIH07CiAKIC8qCkBAIC04MCwxNiArNzYsMjEgQEAKICAqIHB0aHJlYWRfa2V5X2NyZWF0ZTsgZ3JlcCBmb3IgR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUiB0byBmaW5kIHRob3NlLiBXZSBuZWVkIHRvIG1hbnVhbGx5CiAgKiBtYWludGFpbiB0aGF0IHNlY29uZCBudW1iZXIsIGJ1dCBwdGhyZWFkX3Rlc3Qgd2lsbCBmYWlsIGlmIHdlIGZvcmdldC4KICAqLwotI2RlZmluZSBHTE9CQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSX0NPVU5UIDQKKyNkZWZpbmUgR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUl9DT1VOVCA1CiAKLSNkZWZpbmUgQklPTklDX0FMSUdOKHgsIGEpICgoKHgpICsgKGEgLSAxKSkgJiB+KGEgLSAxKSkKKyNpZiBkZWZpbmVkKFVTRV9KRU1BTExPQykKKy8qIGplbWFsbG9jIHVzZXMgNSBrZXlzIGZvciBpdHNlbGYuICovCisjZGVmaW5lIEJJT05JQ19UTFNfUkVTRVJWRURfU0xPVFMgKEdMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVJfQ09VTlQgKyA1KQorI2Vsc2UKKyNkZWZpbmUgQklPTklDX1RMU19SRVNFUlZFRF9TTE9UUyBHTE9CQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSX0NPVU5UCisjZW5kaWYKIAogLyoKICAqIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBUTFMgYXJyYXkuCiAgKiBUaGlzIGluY2x1ZGVzIHNwYWNlIGZvciBwdGhyZWFkIGtleXMgYW5kIG91ciBvd24gaW50ZXJuYWwgc2xvdHMuCiAgKiBXZSBuZWVkIHRvIHJvdW5kIHVwIHRvIG1haW50YWluIHN0YWNrIGFsaWdubWVudC4KICAqLwotI2RlZmluZSBCSU9OSUNfVExTX1NMT1RTIEJJT05JQ19BTElHTihQVEhSRUFEX0tFWVNfTUFYICsgVExTX1NMT1RfRklSU1RfVVNFUl9TTE9UICsgR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUl9DT1VOVCwgNCkKKyNkZWZpbmUgQklPTklDX1RMU19TTE9UUyBCSU9OSUNfQUxJR04oUFRIUkVBRF9LRVlTX01BWCArIFRMU19TTE9UX0ZJUlNUX1VTRVJfU0xPVCArIEJJT05JQ19UTFNfUkVTRVJWRURfU0xPVFMsIDQpCiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9saWJjX2V2ZW50cy5oIGIvbGliYy9wcml2YXRlL2xpYmNfZXZlbnRzLmgKaW5kZXggNWQyMGY0Yi4uZjJiOTczZCAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL2xpYmNfZXZlbnRzLmgKKysrIGIvbGliYy9wcml2YXRlL2xpYmNfZXZlbnRzLmgKQEAgLTQwLDYgKzQwLDggQEAKICNkZWZpbmUgQklPTklDX0VWRU5UX1NUUk5DUFlfQlVGRkVSX09WRVJGTE9XICA4MDEyMAogI2RlZmluZSBCSU9OSUNfRVZFTlRfTUVNU0VUX0JVRkZFUl9PVkVSRkxPVyAgIDgwMTI1CiAjZGVmaW5lIEJJT05JQ19FVkVOVF9TVFJDUFlfQlVGRkVSX09WRVJGTE9XICAgODAxMzAKKyNkZWZpbmUgQklPTklDX0VWRU5UX1NUUENQWV9CVUZGRVJfT1ZFUkZMT1cgICA4MDEzNQorI2RlZmluZSBCSU9OSUNfRVZFTlRfU1RQTkNQWV9CVUZGRVJfT1ZFUkZMT1cgIDgwMTQwCiAKICNkZWZpbmUgQklPTklDX0VWRU5UX1JFU09MVkVSX09MRF9SRVNQT05TRSAgICA4MDMwMAogI2RlZmluZSBCSU9OSUNfRVZFTlRfUkVTT0xWRVJfV1JPTkdfU0VSVkVSICAgIDgwMzA1CmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvbGliY19sb2dnaW5nLmggYi9saWJjL3ByaXZhdGUvbGliY19sb2dnaW5nLmgKaW5kZXggMWNkY2I2ZS4uZGEyMTkyYiAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL2xpYmNfbG9nZ2luZy5oCisrKyBiL2xpYmMvcHJpdmF0ZS9saWJjX2xvZ2dpbmcuaApAQCAtNTIsMTkgKzUyLDI4IEBACiAgIEFORFJPSURfTE9HX1NJTEVOVCwgICAgIC8qIG9ubHkgZm9yIFNldE1pblByaW9yaXR5KCk7IG11c3QgYmUgbGFzdCAqLwogfTsKIAorZW51bSB7CisgIExPR19JRF9NSU4gPSAwLAorCisgIExPR19JRF9NQUlOID0gMCwKKyAgTE9HX0lEX1JBRElPID0gMSwKKyAgTE9HX0lEX0VWRU5UUyA9IDIsCisgIExPR19JRF9TWVNURU0gPSAzLAorICBMT0dfSURfQ1JBU0ggPSA0LAorCisgIExPR19JRF9NQVgKK307CisKIHN0cnVjdCBhYm9ydF9tc2dfdCB7CiAgIHNpemVfdCBzaXplOwogICBjaGFyIG1zZ1swXTsKIH07CiAKLV9fTElCQ19ISURERU5fXyB2b2lkIF9fbGliY19zZXRfYWJvcnRfbWVzc2FnZShjb25zdCBjaGFyKiBtc2cpOwotCiAvLwogLy8gRm9ybWF0cyBhIG1lc3NhZ2UgdG8gdGhlIGxvZyAocHJpb3JpdHkgJ2ZhdGFsJyksIHRoZW4gYWJvcnRzLgogLy8KIAotX19MSUJDX0hJRERFTl9fIF9fbm9yZXR1cm4gdm9pZCBfX2xpYmNfZmF0YWwoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCi0gICAgX19wcmludGZsaWtlKDEsIDIpOworX19MSUJDX0hJRERFTl9fIF9fbm9yZXR1cm4gdm9pZCBfX2xpYmNfZmF0YWwoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIF9fcHJpbnRmbGlrZSgxLCAyKTsKIAogLy8KIC8vIEZvcm1hdHMgYSBtZXNzYWdlIHRvIHRoZSBsb2cgKHByaW9yaXR5ICdmYXRhbCcpLCBidXQgZG9lc24ndCBhYm9ydC4KQEAgLTc3LDcgKzg2LDcgQEAKIAogLy8KIC8vIEZvcm1hdHRpbmcgcm91dGluZXMgZm9yIHRoZSBDIGxpYnJhcnkncyBpbnRlcm5hbCBkZWJ1Z2dpbmcuCi0vLyBVbmxpa2UgdGhlIHVzdWFsIGFsdGVybmF0aXZlcywgdGhlc2UgZG9uJ3QgYWxsb2NhdGUuCisvLyBVbmxpa2UgdGhlIHVzdWFsIGFsdGVybmF0aXZlcywgdGhlc2UgZG9uJ3QgYWxsb2NhdGUsIGFuZCB0aGV5IGRvbid0IGRyYWcgaW4gYWxsIG9mIHN0ZGlvLgogLy8KIAogX19MSUJDX0hJRERFTl9fIGludCBfX2xpYmNfZm9ybWF0X2J1ZmZlcihjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvbnNzd2l0Y2guaCBiL2xpYmMvcHJpdmF0ZS9uc3N3aXRjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDM4NDRiLi4wMDAwMDAwCi0tLSBhL2xpYmMvcHJpdmF0ZS9uc3N3aXRjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICswLDAgQEAKLS8qCSROZXRCU0Q6IG5zc3dpdGNoLmgsdiAxLjE4IDIwMDUvMTEvMjkgMDM6MTI6NTggY2hyaXN0b3MgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBMdWtlIE1ld2J1cm4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKLSAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKLSAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgX05TU1dJVENIX0gKLSNkZWZpbmUgX05TU1dJVENIX0gJMQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLSNkZWZpbmUJTlNTX01PRFVMRV9JTlRFUkZBQ0VfVkVSU0lPTgkwCi0KLSNpZm5kZWYgX1BBVEhfTlNfQ09ORgotI2RlZmluZSBfUEFUSF9OU19DT05GCSIvZXRjL25zc3dpdGNoLmNvbmYiCi0jZW5kaWYKLQotI2RlZmluZQlOU19DT05USU5VRQkwCi0jZGVmaW5lCU5TX1JFVFVSTgkxCi0KLS8qCi0gKiBMYXlvdXQgb2Y6Ci0gKgl1aW50MzJfdCBuc19zcmMuZmxhZ3MKLSAqLwotCS8qIG5zc3dpdGNoLmNvbmYgc3RhdHVzIGNvZGVzIGFuZCBuc2Rpc3BhdGNoKDMpIHJldHVybiB2YWx1ZXMgKi8KLSNkZWZpbmUJTlNfU1VDQ0VTUwkoMTw8MCkJCS8qIGVudHJ5IHdhcyBmb3VuZCAqLwotI2RlZmluZQlOU19VTkFWQUlMCSgxPDwxKQkJLyogc291cmNlIG5vdCByZXNwb25kaW5nLCBvciBjb3JydXB0ICovCi0jZGVmaW5lCU5TX05PVEZPVU5ECSgxPDwyKQkJLyogc291cmNlIHJlc3BvbmRlZCAnbm8gc3VjaCBlbnRyeScgKi8KLSNkZWZpbmUJTlNfVFJZQUdBSU4JKDE8PDMpCQkvKiBzb3VyY2UgYnVzeSwgbWF5IHJlc3BvbmQgdG8gcmV0cnlzICovCi0jZGVmaW5lCU5TX1NUQVRVU01BU0sJMHgwMDAwMDBmZgkvKiBiaXRtYXNrIHRvIGdldCB0aGUgc3RhdHVzIGZsYWdzICovCi0KLQkvKiBpbnRlcm5hbCBuc2Rpc3BhdGNoKDMpIGZsYWdzOyBub3Qgc2V0dGFibGUgaW4gbnNzd2l0Y2guY29uZig1KSAgKi8KLSNkZWZpbmUJTlNfRk9SQ0VBTEwJKDE8PDgpCQkvKiBmb3JjZSBhbGwgbWV0aG9kcyB0byBiZSBpbnZva2VkOyAqLwotCi0vKgotICogQ3VycmVudGx5IGltcGxlbWVudGVkIHNvdXJjZXMuCi0gKi8KLSNkZWZpbmUgTlNTUkNfRklMRVMJImZpbGVzIgkJLyogbG9jYWwgZmlsZXMgKi8KLSNkZWZpbmUJTlNTUkNfRE5TCSJkbnMiCQkvKiBETlM7IElOIGZvciBob3N0cywgSFMgZm9yIG90aGVycyAqLwotI2RlZmluZQlOU1NSQ19OSVMJIm5pcyIJCS8qIFlQL05JUyAqLwotI2RlZmluZQlOU1NSQ19DT01QQVQJImNvbXBhdCIJLyogcGFzc3dkLGdyb3VwIGluIFlQIGNvbXBhdCBtb2RlICovCi0KLS8qCi0gKiBDdXJyZW50bHkgaW1wbGVtZW50ZWQgZGF0YWJhc2VzLgotICovCi0jZGVmaW5lIE5TREJfSE9TVFMJCSJob3N0cyIKLSNkZWZpbmUgTlNEQl9HUk9VUAkJImdyb3VwIgotI2RlZmluZSBOU0RCX0dST1VQX0NPTVBBVAkiZ3JvdXBfY29tcGF0IgotI2RlZmluZSBOU0RCX05FVEdST1VQCQkibmV0Z3JvdXAiCi0jZGVmaW5lIE5TREJfTkVUV09SS1MJCSJuZXR3b3JrcyIKLSNkZWZpbmUgTlNEQl9QQVNTV0QJCSJwYXNzd2QiCi0jZGVmaW5lIE5TREJfUEFTU1dEX0NPTVBBVAkicGFzc3dkX2NvbXBhdCIKLSNkZWZpbmUgTlNEQl9TSEVMTFMJCSJzaGVsbHMiCi0KLS8qCi0gKiBTdWdnZXN0ZWQgZGF0YWJhc2VzIHRvIGltcGxlbWVudC4KLSAqLwotI2RlZmluZSBOU0RCX0FMSUFTRVMJCSJhbGlhc2VzIgotI2RlZmluZSBOU0RCX0FVVEgJCSJhdXRoIgotI2RlZmluZSBOU0RCX0FVVE9NT1VOVAkJImF1dG9tb3VudCIKLSNkZWZpbmUgTlNEQl9CT09UUEFSQU1TCQkiYm9vdHBhcmFtcyIKLSNkZWZpbmUgTlNEQl9FVEhFUlMJCSJldGhlcnMiCi0jZGVmaW5lIE5TREJfRVhQT1JUUwkJImV4cG9ydHMiCi0jZGVmaW5lIE5TREJfTkVUTUFTS1MJCSJuZXRtYXNrcyIKLSNkZWZpbmUgTlNEQl9QSE9ORVMJCSJwaG9uZXMiCi0jZGVmaW5lIE5TREJfUFJJTlRDQVAJCSJwcmludGNhcCIKLSNkZWZpbmUgTlNEQl9QUk9UT0NPTFMJCSJwcm90b2NvbHMiCi0jZGVmaW5lIE5TREJfUkVNT1RFCQkicmVtb3RlIgotI2RlZmluZSBOU0RCX1JQQwkJInJwYyIKLSNkZWZpbmUgTlNEQl9TRU5ETUFJTFZBUlMJInNlbmRtYWlsdmFycyIKLSNkZWZpbmUgTlNEQl9TRVJWSUNFUwkJInNlcnZpY2VzIgotI2RlZmluZSBOU0RCX1RFUk1DQVAJCSJ0ZXJtY2FwIgotI2RlZmluZSBOU0RCX1RUWVMJCSJ0dHlzIgotCi0vKgotICogbnNfZHRhYiBgY2FsbGJhY2snIGZ1bmN0aW9uIHNpZ25hdHVyZS4KLSAqLwotdHlwZWRlZglpbnQgKCpuc3NfbWV0aG9kKSh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7Ci0KLS8qCi0gKiBuc19kdGFiIC0gYG5zc3dpdGNoIGRpc3BhdGNoIHRhYmxlJwotICogQ29udGFpbnMgYW4gZW50cnkgZm9yIGVhY2ggc291cmNlIGFuZCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gY2FsbC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCWNvbnN0IGNoYXIJICpzcmM7Ci0JbnNzX21ldGhvZAkgY2FsbGJhY2s7Ci0Jdm9pZAkJICpjYl9kYXRhOwotfSBuc19kdGFiOwotCi0vKgotICogTWFjcm9zIHRvIGhlbHAgYnVpbGQgYW4gbnNfZHRhYltdCi0gKi8KLSNkZWZpbmUgTlNfRklMRVNfQ0IoRixDKQl7IE5TU1JDX0ZJTEVTLAlGLAlfX1VOQ09OU1QoQykgfSwKLSNkZWZpbmUgTlNfQ09NUEFUX0NCKEYsQykJeyBOU1NSQ19DT01QQVQsCUYsCV9fVU5DT05TVChDKSB9LAotCi0jaWZkZWYgSEVTSU9ECi0jICAgZGVmaW5lIE5TX0ROU19DQihGLEMpCXsgTlNTUkNfRE5TLAlGLAlfX1VOQ09OU1QoQykgfSwKLSNlbHNlCi0jICAgZGVmaW5lIE5TX0ROU19DQihGLEMpCi0jZW5kaWYKLQotI2lmZGVmIFlQCi0jICAgZGVmaW5lIE5TX05JU19DQihGLEMpCXsgTlNTUkNfTklTLAlGLAlfX1VOQ09OU1QoQykgfSwKLSNlbHNlCi0jICAgZGVmaW5lIE5TX05JU19DQihGLEMpCi0jZW5kaWYKLQotLyoKLSAqIG5zX3NyYyAtIGBuc3N3aXRjaCBzb3VyY2UnCi0gKiBVc2VkIGJ5IHRoZSBuc3BhcnNlciByb3V0aW5lcyB0byBzdG9yZSBhIG1hcHBpbmcgYmV0d2VlbiBhIHNvdXJjZQotICogYW5kIGl0cyBkaXNwYXRjaCBjb250cm9sIGZsYWdzIGZvciBhIGdpdmVuIGRhdGFiYXNlLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLQl1aW50MzJfdAkgZmxhZ3M7Ci19IG5zX3NyYzsKLQotCi0jaWYgMAotLyoKLSAqIERlZmF1bHQgc291cmNlbGlzdHMgKGlmIG5zc3dpdGNoLmNvbmYgaXMgbWlzc2luZywgY29ycnVwdCwKLSAqIG9yIHRoZSByZXF1ZXN0ZWQgZGF0YWJhc2UgZG9lc24ndCBoYXZlIGFuIGVudHJ5KQotICovCi1leHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0c3JjW107Ci1leHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0Y29tcGF0W107Ci1leHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0Y29tcGF0X2ZvcmNlYWxsW107Ci1leHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0ZmlsZXNbXTsKLWV4dGVybiBjb25zdCBuc19zcmMgX19uc2RlZmF1bHRmaWxlc19mb3JjZWFsbFtdOwotZXh0ZXJuIGNvbnN0IG5zX3NyYyBfX25zZGVmYXVsdG5pc1tdOwotZXh0ZXJuIGNvbnN0IG5zX3NyYyBfX25zZGVmYXVsdG5pc19mb3JjZWFsbFtdOwotI2VuZGlmCi0KLS8qCi0gKiBuc19tdGFiIC0gYG5zc3dpdGNoIG1ldGhvZCB0YWJsZScKLSAqIEFuIG5zc3dpdGNoIG1vZHVsZSBwcm92aWRlcyBhIG1hcHBpbmcgZnJvbSAoZGF0YWJhc2UgbmFtZSwgbWV0aG9kIG5hbWUpCi0gKiB0dXBsZXMgdG8gdGhlIG5zc19tZXRob2QgYW5kIGFzc29jaWF0ZWQgY2FsbGJhY2sgZGF0YS4gIEVmZmVjdGl2ZWx5LAotICogbnNfZHRhYiwgYnV0IHVzZWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JY29uc3QgY2hhcgkqZGF0YWJhc2U7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLQluc3NfbWV0aG9kCSBtZXRob2Q7Ci0Jdm9pZAkJKm1kYXRhOwotfSBuc19tdGFiOwotCi0vKgotICogbnNzX21vZHVsZV9yZWdpc3Rlcl9mbiAtIG1vZHVsZSByZWdpc3RyYXRpb24gZnVuY3Rpb24KLSAqCWNhbGxlZCBhdCBtb2R1bGUgbG9hZAotICogbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuIC0gbW9kdWxlIHVuLXJlZ2lzdHJhdGlvbiBmdW5jdGlvbgotICoJY2FsbGVkIGF0IG1vZHVsZSB1bmxvYWQKLSAqLwotdHlwZWRlZgl2b2lkICgqbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuKShuc19tdGFiICosIHVfaW50KTsKLXR5cGVkZWYJbnNfbXRhYiAqKCpuc3NfbW9kdWxlX3JlZ2lzdGVyX2ZuKShjb25zdCBjaGFyICosIHVfaW50ICosCi0JCQkJCSAgIG5zc19tb2R1bGVfdW5yZWdpc3Rlcl9mbiAqKTsKLQotI2lmZGVmIF9OU19QUklWQVRFCi0KLS8qCi0gKiBQcml2YXRlIGRhdGEgc3RydWN0dXJlcyBmb3IgYmFjay1lbmQgbnNzd2l0Y2ggaW1wbGVtZW50YXRpb24uCi0gKi8KLQotLyoKLSAqIG5zX2RidCAtIGBuc3N3aXRjaCBkYXRhYmFzZSB0aGFuZycKLSAqIEZvciBlYWNoIGRhdGFiYXNlIGluIC9ldGMvbnNzd2l0Y2guY29uZiB0aGVyZSBpcyBhIG5zX2RidCwgd2l0aCBpdHMKLSAqIG5hbWUgYW5kIGEgbGlzdCBvZiBuc19zcmMncyBjb250YWluaW5nIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24uCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQljb25zdCBjaGFyCSpuYW1lOwkJLyogbmFtZSBvZiBkYXRhYmFzZSAqLwotCW5zX3NyYwkJKnNyY2xpc3Q7CS8qIGxpc3Qgb2Ygc291cmNlcyAqLwotCXVfaW50CQkgc3JjbGlzdHNpemU7CS8qIHNpemUgb2Ygc3JjbGlzdCAqLwotfSBuc19kYnQ7Ci0KLS8qCi0gKiBuc19tb2QgLSBgbnNzd2l0Y2ggbW9kdWxlJwotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JY29uc3QgY2hhcgkqbmFtZTsJCS8qIG1vZHVsZSBuYW1lICovCi0Jdm9pZAkJKmhhbmRsZTsJLyogaGFuZGxlIGZyb20gZGxvcGVuKCkgKi8KLQluc19tdGFiCQkqbXRhYjsJCS8qIG1ldGhvZCB0YWJsZSAqLwotCXVfaW50CQkgbXRhYnNpemU7CS8qIHNpemUgb2YgbXRhYiAqLwotCQkJCQkvKiBjYWxsZWQgdG8gdW5sb2FkIG1vZHVsZSAqLwotCW5zc19tb2R1bGVfdW5yZWdpc3Rlcl9mbiB1bnJlZ2lzdGVyOwotfSBuc19tb2Q7Ci0KLSNlbmRpZiAvKiBfTlNfUFJJVkFURSAqLwotCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotX19CRUdJTl9ERUNMUwotaW50CW5zZGlzcGF0Y2godm9pZCAqLCBjb25zdCBuc19kdGFiIFtdLCBjb25zdCBjaGFyICosCi0JCQljb25zdCBjaGFyICosIGNvbnN0IG5zX3NyYyBbXSwgLi4uKTsKLQotI2lmZGVmIF9OU19QUklWQVRFCi1pbnQJCSBfbnNkYnRhZGRzcmMobnNfZGJ0ICosIGNvbnN0IG5zX3NyYyAqKTsKLXZvaWQJCSBfbnNkYnRkdW1wKGNvbnN0IG5zX2RidCAqKTsKLWludAkJIF9uc2RidHB1dChjb25zdCBuc19kYnQgKik7Ci12b2lkCQkgX25zeXllcnJvcihjb25zdCBjaGFyICopOwotaW50CQkgX25zeXlsZXgodm9pZCk7Ci0jZW5kaWYgLyogX05TX1BSSVZBVEUgKi8KLQotX19FTkRfREVDTFMKLQotI2VuZGlmIC8qICFfTlNTV0lUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL3Jlc29sdl9jYWNoZS5oIGIvbGliYy9wcml2YXRlL3Jlc29sdl9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGExMTgwLi4wMDAwMDAwCi0tLSBhL2xpYmMvcHJpdmF0ZS9yZXNvbHZfY2FjaGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIF9SRVNPTFZfQ0FDSEVfSF8KLSNkZWZpbmUgX1JFU09MVl9DQUNIRV9IXwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLXN0cnVjdCBfX3Jlc19zdGF0ZTsKLXN0cnVjdCByZXNvbHZfY2FjaGU7ICAvKiBmb3J3YXJkICovCi0KLS8qIGdldHMgdGhlIGNhY2hlIGZvciBhbiBpbnRlcmZhY2UuIFNldCBpZm5hbWUgYXJndW1lbnQgdG8gTlVMTCBvcgotICogZW1wdHkgYnVmZmVyICgnXDAnKSB0byBnZXQgY2FjaGUgZm9yIGRlZmF1bHQgaW50ZXJmYWNlLgotICogcmV0dXJuZWQgY2FjaGUgbWlnaHQgYmUgTlVMTCovCi1fX0xJQkNfSElEREVOX18KLWV4dGVybiBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgX19nZXRfcmVzX2NhY2hlKGNvbnN0IGNoYXIqIGlmbmFtZSk7Ci0KLS8qIHRoaXMgZ2V0cyBjYWxsZWQgZXZlcnl0aW1lIHdlIGRldGVjdCBzb21lIGNoYW5nZXMgaW4gdGhlIEROUyBjb25maWd1cmF0aW9uCi0gKiBhbmQgd2lsbCBmbHVzaCB0aGUgY2FjaGUgKi8KLV9fTElCQ19ISURERU5fXwotZXh0ZXJuIHZvaWQgIF9yZXNvbHZfY2FjaGVfcmVzZXQoIHVuc2lnbmVkICBnZW5lcmF0aW9uICk7Ci0KLS8qIEdldHMgdGhlIGFkZHJlc3Mgb2YgdGhlIG46dGggbmFtZSBzZXJ2ZXIgZm9yIHRoZSBkZWZhdWx0IGludGVyZmFjZQotICogUmV0dXJuIGxlbmd0aCBvZiBhZGRyZXNzIG9uIHN1Y2Nlc3MgZWxzZSAwLgotICogTm90ZTogVGhlIGZpcnN0IG5hbWUgc2VydmVyIGlzIGF0IG4gPSAxICovCi1fX0xJQkNfSElEREVOX18KLWV4dGVybiBpbnQgX3Jlc29sdl9jYWNoZV9nZXRfbmFtZXNlcnZlcihpbnQgbiwgY2hhciogYWRkciwgaW50IGFkZHJMZW4pOwotCi0vKiBHZXRzIHRoZSBhZGRyZXNzIG9mIHRoZSBuOnRoIG5hbWUgc2VydmVyIGZvciBhIGNlcnRhaW4gaW50ZXJmYWNlCi0gKiBSZXR1cm4gbGVuZ3RoIG9mIGFkZHJlc3Mgb24gc3VjY2VzcyBlbHNlIDAuCi0gKiBOb3RlOiBUaGUgZmlyc3QgbmFtZSBzZXJ2ZXIgaXMgYXQgbiA9IDEgKi8KLV9fTElCQ19ISURERU5fXwotZXh0ZXJuIGludCBfcmVzb2x2X2NhY2hlX2dldF9uYW1lc2VydmVyX2Zvcl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCBuLAotICAgICAgICBjaGFyKiBhZGRyLCBpbnQgYWRkckxlbik7Ci0KLS8qIEdldHMgYWRkcmluZm8gb2YgdGhlIG46dGggbmFtZSBzZXJ2ZXIgYXNzb2NpYXRlZCB3aXRoIGFuIGludGVyZmFjZS4KLSAqIE5VTEwgaXMgcmV0dXJuZWQgaWYgbm8gYWRkcmVzcyBpZiBmb3VuZC4KLSAqIE5vdGU6IFRoZSBmaXJzdCBuYW1lIHNlcnZlciBpcyBhdCBuID0gMS4gKi8KLV9fTElCQ19ISURERU5fXwotZXh0ZXJuIHN0cnVjdCBhZGRyaW5mbyogX3Jlc29sdl9jYWNoZV9nZXRfbmFtZXNlcnZlcl9hZGRyX2Zvcl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCBuKTsKLQotLyogR2V0cyBhZGRyaW5mbyBvZiB0aGUgbjp0aCBuYW1lIHNlcnZlciBhc3NvY2lhdGVkIHdpdGggdGhlIGRlZmF1bHQgaW50ZXJmYWNlCi0gKiBOVUxMIGlzIHJldHVybmVkIGlmIG5vIGFkZHJlc3MgaWYgZm91bmQuCi0gKiBOb3RlOiBUaGUgZmlyc3QgbmFtZSBzZXJ2ZXIgaXMgYXQgbiA9IDEuICovCi1fX0xJQkNfSElEREVOX18KLWV4dGVybiBzdHJ1Y3QgYWRkcmluZm8qIF9yZXNvbHZfY2FjaGVfZ2V0X25hbWVzZXJ2ZXJfYWRkcihpbnQgbik7Ci0KLS8qIGdldHMgdGhlIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWZhdWx0IGludGVyZmFjZSAqLwotX19MSUJDX0hJRERFTl9fCi1leHRlcm4gc3RydWN0IGluX2FkZHIqIF9yZXNvbHZfZ2V0X2FkZHJfb2ZfZGVmYXVsdF9pZmFjZSgpOwotCi0vKiBnZXRzIHRoZSBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGludGVyZmFjZSAqLwotX19MSUJDX0hJRERFTl9fCi1leHRlcm4gc3RydWN0IGluX2FkZHIqIF9yZXNvbHZfZ2V0X2FkZHJfb2ZfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKTsKLQotLyogQ29weSB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4KLSAqIFJldHVybnMgdGhlIHN0cmluZyBsZW5ndGggb2YgdGhlIGRlZmF1bHQgaW50ZXJmYWNlLAotICogYmUgdGhhdCBsZXNzIG9yIG1vcmUgdGhhbiB0aGUgYnVmZkxlbiwgb3IgMCBpZiBub3RoaW5nIGhhZCBiZWVuIHdyaXR0ZW4gKi8KLV9fTElCQ19ISURERU5fXwotIGV4dGVybiBzaXplX3QgX3Jlc29sdl9nZXRfZGVmYXVsdF9pZmFjZShjaGFyKiBidWZmLCBzaXplX3QgYnVmZkxlbik7Ci0KLS8qIHNldHMgdGhlIG5hbWUgc2VydmVyIGFkZHJlc3NlcyB0byB0aGUgcHJvdmlkZWQgcmVzX3N0YXRlIHN0cnVjdHVyZS4gVGhlCi0gKiBuYW1lIHNlcnZlcnMgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBjYWNoZSB3aGljaCBpcyBhc3NvY2lhdGVkCi0gKiB3aXRoIHRoZSBpbnRlcmZhY2UgdG8gd2hpY2ggdGhlIHJlc19zdGF0ZSBzdHJ1Y3R1cmUgaXMgYXNzb2NpYXRlZCAqLwotX19MSUJDX0hJRERFTl9fCi1leHRlcm4gdm9pZCBfcmVzb2x2X3BvcHVsYXRlX3Jlc19mb3JfaWZhY2Uoc3RydWN0IF9fcmVzX3N0YXRlKiBzdGF0cCk7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgUkVTT0xWX0NBQ0hFX1VOU1VQUE9SVEVELCAgLyogdGhlIGNhY2hlIGNhbid0IGhhbmRsZSB0aGF0IGtpbmQgb2YgcXVlcmllcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9yIHRoZSBhbnN3ZXIgYnVmZmVyIGlzIHRvbyBzbWFsbCAqLwotICAgIFJFU09MVl9DQUNIRV9OT1RGT1VORCwgICAgIC8qIHRoZSBjYWNoZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyBxdWVyeSAqLwotICAgIFJFU09MVl9DQUNIRV9GT1VORCAgICAgICAgIC8qIHRoZSBjYWNoZSBmb3VuZCB0aGUgYW5zd2VyICovCi19IFJlc29sdkNhY2hlU3RhdHVzOwotCi1fX0xJQkNfSElEREVOX18KLWV4dGVybiBSZXNvbHZDYWNoZVN0YXR1cwotX3Jlc29sdl9jYWNoZV9sb29rdXAoIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgcXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHF1ZXJ5bGVuLAotICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICBhbnN3ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFuc3dlcnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgKmFuc3dlcmxlbiApOwotCi0vKiBhZGQgYSAocXVlcnksYW5zd2VyKSB0byB0aGUgY2FjaGUsIG9ubHkgY2FsbCBpZiBfcmVzb2x2X2NhY2hlX2xvb2t1cAotICogZGlkIHJldHVybiBSRVNPTFZfQ0FDSEVfTk9URk9VTkQKLSAqLwotX19MSUJDX0hJRERFTl9fCi1leHRlcm4gdm9pZAotX3Jlc29sdl9jYWNoZV9hZGQoIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgcXVlcnksCi0gICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHF1ZXJ5bGVuLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICAgICAgICAgICBhbnN3ZXIsCi0gICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFuc3dlcmxlbiApOwotCi0vKiBOb3RpZnkgdGhlIGNhY2hlIGEgcmVxdWVzdCBmYWlsZWQgKi8KLV9fTElCQ19ISURERU5fXwotZXh0ZXJuIHZvaWQKLV9yZXNvbHZfY2FjaGVfcXVlcnlfZmFpbGVkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBjYWNoZSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBxdWVyeSwKLSAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBxdWVyeWxlbik7Ci0KLSNlbmRpZiAvKiBfUkVTT0xWX0NBQ0hFX0hfICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvcmVzb2x2X2lmYWNlLmggYi9saWJjL3ByaXZhdGUvcmVzb2x2X2lmYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMjQxMjQuLjAwMDAwMDAKLS0tIGEvbGliYy9wcml2YXRlL3Jlc29sdl9pZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgX1JFU09MVl9JRkFDRV9ICi0jZGVmaW5lIF9SRVNPTFZfSUZBQ0VfSAotCi0vKiBUaGlzIGhlYWRlciBjb250YWlucyBkZWNsYXJhdGlvbnMgcmVsYXRlZCB0byBwZXItaW50ZXJmYWNlIEROUwotICogc2VydmVyIHNlbGVjdGlvbi4gVGhleSBhcmUgdXNlZCBieSBzeXN0ZW0vbmV0ZC8gYW5kIHNob3VsZCBub3QgYmUKLSAqIGV4cG9zZWQgYnkgdGhlIEMgbGlicmFyeSdzIHB1YmxpYyBOREsgaGVhZGVycy4KLSAqCi0gKiBOT1RFOiA8cmVzb2x2Lmg+IGNvbnRhaW5zIHRoZSBzYW1lIGRlY2xhcmF0aW9ucywgdGhpcyB3aWxsIGJlIHJlbW92ZWQKLSAqICAgICAgICB3aGVuIHdlIGNoYW5nZSBzeXN0ZW0vbmV0ZCB0byB1c2UgdGhpcyBoZWFkZXIgaW5zdGVhZC4KLSAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLQotX19CRUdJTl9ERUNMUwotCi0vKiBVc2UgYSBndWFyZCBtYWNybyB1bnRpbCB3ZSByZW1vdmUgdGhlIHNhbWUgZGVmaW5pdGlvbnMgZnJvbSA8cmVzb2x2Lmg+ICovCi0jaWZuZGVmIF9CSU9OSUNfUkVTT0xWX0lGQUNFX0ZVTkNUSU9OU19ERUNMQVJFRAotI2RlZmluZSBfQklPTklDX1JFU09MVl9JRkFDRV9GVU5DVElPTlNfREVDTEFSRUQKLQotLyogU2V0IG5hbWUgb2YgZGVmYXVsdCBpbnRlcmZhY2UgKi8KLWV4dGVybiB2b2lkIF9yZXNvbHZfc2V0X2RlZmF1bHRfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKTsKLQotLyogc2V0IG5hbWUgc2VydmVycyBmb3IgYW4gaW50ZXJmYWNlICovCi1leHRlcm4gdm9pZCBfcmVzb2x2X3NldF9uYW1lc2VydmVyc19mb3JfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lLCBjb25zdCBjaGFyKiogc2VydmVycywgaW50IG51bXNlcnZlcnMsCi0gICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbnMpOwotCi0vKiB0ZWxsIHJlc29sdmVyIG9mIHRoZSBhZGRyZXNzIG9mIGFuIGludGVyZmFjZSAqLwotZXh0ZXJuIHZvaWQgX3Jlc29sdl9zZXRfYWRkcl9vZl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUsIHN0cnVjdCBpbl9hZGRyKiBhZGRyKTsKLQotLyogZmx1c2ggdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgKi8KLWV4dGVybiB2b2lkIF9yZXNvbHZfZmx1c2hfY2FjaGVfZm9yX2RlZmF1bHRfaWZhY2UoKTsKLQotLyogZmx1c2ggdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCBhIGNlcnRhaW4gaW50ZXJmYWNlICovCi1leHRlcm4gdm9pZCBfcmVzb2x2X2ZsdXNoX2NhY2hlX2Zvcl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUpOwotCi0vKiBzZXQgYSBwaWQgdG8gdXNlIHRoZSBuYW1lIHNlcnZlcnMgb2YgdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UgKi8KLWV4dGVybiB2b2lkIF9yZXNvbHZfc2V0X2lmYWNlX2Zvcl9waWQoY29uc3QgY2hhciogaWZuYW1lLCBpbnQgcGlkKTsKLQotLyogY2xlYXIgcGlkIGZyb20gYmVpbmcgYXNzb2NpYXRlZCB3aXRoIGFuIGludGVyZmFjZSAqLwotZXh0ZXJuIHZvaWQgX3Jlc29sdl9jbGVhcl9pZmFjZV9mb3JfcGlkKGludCBwaWQpOwotCi0vKiBjbGVhciB0aGUgZW50aXJlIG1hcHBpbmcgb2YgcGlkcyB0byBpbnRlcmZhY2VzLiAqLwotZXh0ZXJuIHZvaWQgX3Jlc29sdl9jbGVhcl9pZmFjZV9waWRfbWFwcGluZygpOwotCi0vKiogR2V0cyB0aGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlIHRvIHdoaWNoIHRoZSBwaWQgaXMgYXR0YWNoZWQuCi0gKiAgT24gZXJyb3IsIC0xIGlzIHJldHVybmVkLgotICogIElmIG5vIGludGVyZmFjZSBpcyBmb3VuZCwgMCBpcyByZXR1cm5lZCBhbmQgYnVmZiBpcyBzZXQgdG8gZW1wdHkgKCdcMCcpLgotICogIElmIGFuIGludGVyZmFjZSBpcyBmb3VuZCwgdGhlIG5hbWUgaXMgY29waWVkIHRvIGJ1ZmYgYW5kIHRoZSBsZW5ndGggb2YgdGhlIG5hbWUgaXMgcmV0dXJuZWQuCi0gKiAgQXJndW1lbnRzOiAgIHBpZCBUaGUgcGlkIHRvIGZpbmQgYW4gaW50ZXJmYWNlIGZvcgotICogICAgICAgICAgICAgICBidWZmIEEgYnVmZmVyIHRvIGNvcHkgdGhlIHJlc3VsdCB0bwotICogICAgICAgICAgICAgICBidWZmTGVuIExlbmd0aCBvZiBidWZmLiBBbiBpbnRlcmZhY2UgaXMgYXQgbW9zdCBJRl9OQU1FU0laRSBpbiBsZW5ndGggKi8KLWV4dGVybiBpbnQgX3Jlc29sdl9nZXRfcGlkc19hc3NvY2lhdGVkX2ludGVyZmFjZShpbnQgcGlkLCBjaGFyKiBidWZmLCBpbnQgYnVmZkxlbik7Ci0KLQotLyoqIHNldCBhIHVpZCByYW5nZSB0byB1c2UgdGhlIG5hbWUgc2VydmVycyBvZiB0aGUgc3BlY2lmaWVkIGludGVyZmFjZSAqLwotZXh0ZXJuIGludCBfcmVzb2x2X3NldF9pZmFjZV9mb3JfdWlkX3JhbmdlKGNvbnN0IGNoYXIqIGlmbmFtZSwgaW50IHVpZF9zdGFydCwgaW50IHVpZF9lbmQpOwotCi0vKiogUmVtb3ZlIGEgbWFwcGluZyBhZGRlZCBieSBfcmVzb2x2X3NldF9pZmFjZV9mb3JfdWlkX3JhbmdlLgotICogIElmIG5vIHN1Y2ggcnVsZSBleGlzdHMgLTEgaXMgcmV0dXJuZWQuICovCi1leHRlcm4gaW50IF9yZXNvbHZfY2xlYXJfaWZhY2VfZm9yX3VpZF9yYW5nZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCB1aWRfc3RhcnQsIGludCB1aWRfZW5kKTsKLQotLyogY2xlYXIgdGhlIGVudGlyZSBtYXBwaW5nIG9mIHVpZCByYW5nZXMgdG8gaW50ZXJmYWNlcy4gKi8KLWV4dGVybiB2b2lkIF9yZXNvbHZfY2xlYXJfaWZhY2VfdWlkX3JhbmdlX21hcHBpbmcoKTsKLQotLyoqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSB0byB3aGljaCB0aGUgdWlkIGlzIGF0dGFjaGVkLgotICogIE9uIGVycm9yLCAtMSBpcyByZXR1cm5lZC4KLSAqICBJZiBubyBpbnRlcmZhY2UgaXMgZm91bmQsIDAgaXMgcmV0dXJuZWQgYW5kIGJ1ZmYgaXMgc2V0IHRvIGVtcHR5ICgnXDAnKS4KLSAqICBJZiBhbiBpbnRlcmZhY2UgaXMgZm91bmQsIHRoZSBuYW1lIGlzIGNvcGllZCB0byBidWZmIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGlzIHJldHVybmVkLgotICogIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBydWxlcyBjb3ZlcmluZyB1aWQgdGhlIG1vc3QgcmVjZW50bHkgYWRkZWQgcnVsZSB3aWxsIGJlIHJldHVybmVkLgotICogIEFyZ3VtZW50czogICB1aWQgVGhlIHVpZCB0byBmaW5kIGFuIGludGVyZmFjZSBmb3IKLSAqICAgICAgICAgICAgICAgYnVmZiBBIGJ1ZmZlciB0byBjb3B5IHRoZSByZXN1bHQgdG8KLSAqICAgICAgICAgICAgICAgYnVmZkxlbiBMZW5ndGggb2YgYnVmZi4gQW4gaW50ZXJmYWNlIGlzIGF0IG1vc3QgSUZfTkFNRVNJWkUgaW4gbGVuZ3RoICovCi1leHRlcm4gaW50IF9yZXNvbHZfZ2V0X3VpZHNfYXNzb2NpYXRlZF9pbnRlcmZhY2UoaW50IHVpZCwgY2hhciogYnVmZiwgaW50IGJ1ZmZMZW4pOwotCi0jZW5kaWYgLyogX0JJT05JQ19SRVNPTFZfSUZBQ0VfRlVOQ1RJT05TX0RFQ0xBUkVEICovCi0KLV9fRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBfUkVTT0xWX0lGQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9yZXNvbHZfcHJpdmF0ZS5oIGIvbGliYy9wcml2YXRlL3Jlc29sdl9wcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YmNiODkuLjAwMDAwMDAKLS0tIGEvbGliYy9wcml2YXRlL3Jlc29sdl9wcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAotLyoJJE5ldEJTRDogcmVzb2x2LmgsdiAxLjMxIDIwMDUvMTIvMjYgMTk6MDE6NDcgcGVycnkgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4MywgMTk4NywgMTk4OQotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0vKgotICoJQCgjKXJlc29sdi5oCTguMSAoQmVya2VsZXkpIDYvMi85MwotICoJSWQ6IHJlc29sdi5oLHYgMS43LjIuMTEuNC4yIDIwMDQvMDYvMjUgMDA6NDE6MDUgbWFya2EgRXhwCi0gKi8KLQotI2lmbmRlZiBfUkVTT0xWX1BSSVZBVEVfSF8KLSNkZWZpbmUJX1JFU09MVl9QUklWQVRFX0hfCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotI2luY2x1ZGUgPHJlc29sdi5oPgotI2luY2x1ZGUgInJlc29sdl9zdGF0aWMuaCIKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLQotLyoKLSAqIFJldmlzaW9uIGluZm9ybWF0aW9uLiAgVGhpcyBpcyB0aGUgcmVsZWFzZSBkYXRlIGluIFlZWVlNTUREIGZvcm1hdC4KLSAqIEl0IGNhbiBjaGFuZ2UgZXZlcnkgZGF5IHNvIHRoZSByaWdodCB0aGluZyB0byBkbyB3aXRoIGl0IGlzIHVzZSBpdAotICogaW4gcHJlcHJvY2Vzc29yIGNvbW1hbmRzIHN1Y2ggYXMgIiNpZiAoX19SRVMgPiAxOTkzMTEwNCkiLiAgRG8gbm90Ci0gKiBjb21wYXJlIGZvciBlcXVhbGl0eTsgcmF0aGVyLCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgeW91ciByZXNvbHZlcgotICogaXMgbmV3IGVub3VnaCB0byBjb250YWluIGEgY2VydGFpbiBmZWF0dXJlLgotICovCi0KLSNkZWZpbmUJX19SRVMJMjAwMzAxMjQKLQotLyoKLSAqIFRoaXMgdXNlZCB0byBiZSBkZWZpbmVkIGluIHJlc19xdWVyeS5jLCBub3cgaXQncyBpbiBoZXJyb3IuYy4KLSAqIFtYWFggbm8gaXQncyBub3QuICBJdCdzIGluIGlycy9pcnNfZGF0YS5jXQotICogSXQgd2FzCi0gKiBuZXZlciBleHRlcm4nZCBieSBhbnkgKi5oIGZpbGUgYmVmb3JlIGl0IHdhcyBwbGFjZWQgaGVyZS4gIEZvciB0aHJlYWQKLSAqIGF3YXJlIHByb2dyYW1zLCB0aGUgbGFzdCBoX2Vycm5vIHZhbHVlIHNldCBpcyBzdG9yZWQgaW4gcmVzLT5oX2Vycm5vLgotICoKLSAqIFhYWDoJVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgZ29vZCByZWFzb24gZm9yIGV4cG9zaW5nIFJFU19TRVRfSF9FUlJOTwotICoJKGFuZCBfX2hfZXJybm9fc2V0KSB0byB0aGUgcHVibGljIHZpYSA8cmVzb2x2Lmg+LgotICogWFhYOglfX2hfZXJybm9fc2V0IGlzIHJlYWxseSBwYXJ0IG9mIElSUywgbm90IHBhcnQgb2YgdGhlIHJlc29sdmVyLgotICoJSWYgc29tZWJvZHkgd2FudHMgdG8gYnVpbGQgYW5kIHVzZSBhIHJlc29sdmVyIHRoYXQgZG9lc24ndCB1c2UgSVJTLAotICoJd2hhdCBkbyB0aGV5IGRvPyAgUGVyaGFwcyBzb21ldGhpbmcgbGlrZQotICoJCSNpZmRlZiBXQU5UX0lSUwotICoJCSMgZGVmaW5lIFJFU19TRVRfSF9FUlJOTyhyLHgpIF9faF9lcnJub19zZXQocix4KQotICoJCSNlbHNlCi0gKgkJIyBkZWZpbmUgUkVTX1NFVF9IX0VSUk5PKHIseCkgKGhfZXJybm8gPSAociktPnJlc19oX2Vycm5vID0gKHgpKQotICoJCSNlbmRpZgotICovCi0KLSNkZWZpbmUgUkVTX1NFVF9IX0VSUk5PKHIseCkgKGhfZXJybm8gPSAociktPnJlc19oX2Vycm5vID0gKHgpKQotc3RydWN0IF9fcmVzX3N0YXRlOyAvKiBmb3J3YXJkICovCi0KLS8qCi0gKiBSZXNvbHZlciBjb25maWd1cmF0aW9uIGZpbGUuCi0gKiBOb3JtYWxseSBub3QgcHJlc2VudCwgYnV0IG1heSBjb250YWluIHRoZSBhZGRyZXNzIG9mIHRoZQotICogaW5pdGlhbCBuYW1lIHNlcnZlcihzKSB0byBxdWVyeSBhbmQgdGhlIGRvbWFpbiBzZWFyY2ggbGlzdC4KLSAqLwotCi0jaWZuZGVmIF9QQVRIX1JFU0NPTkYKLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNkZWZpbmUgX1BBVEhfUkVTQ09ORiAgICAgICAgIi9ldGMvcHBwL3Jlc29sdi5jb25mIgotI2Vsc2UKLSNkZWZpbmUgX1BBVEhfUkVTQ09ORiAgICAgICAgIi9ldGMvcmVzb2x2LmNvbmYiCi0jZW5kaWYKLSNlbmRpZgotCi10eXBlZGVmIGVudW0geyByZXNfZ29haGVhZCwgcmVzX25leHRucywgcmVzX21vZGlmaWVkLCByZXNfZG9uZSwgcmVzX2Vycm9yIH0KLQlyZXNfc2VuZGhvb2thY3Q7Ci0KLXR5cGVkZWYgcmVzX3NlbmRob29rYWN0ICgqcmVzX3NlbmRfcWhvb2spKHN0cnVjdCBzb2NrYWRkciAqIGNvbnN0ICosCi0JCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqKiwgaW50ICosCi0JCQkJCSAgICAgIHVfY2hhciAqLCBpbnQsIGludCAqKTsKLQotdHlwZWRlZiByZXNfc2VuZGhvb2thY3QgKCpyZXNfc2VuZF9yaG9vaykoY29uc3Qgc3RydWN0IHNvY2thZGRyICosCi0JCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLAotCQkJCQkgICAgICBpbnQsIGludCAqKTsKLQotc3RydWN0IHJlc19zeW0gewotCWludAkJbnVtYmVyOwkgICAvKiBJZGVudGlmeWluZyBudW1iZXIsIGxpa2UgVF9NWCAqLwotCWNvbnN0IGNoYXIgKgluYW1lOwkgICAvKiBJdHMgc3ltYm9saWMgbmFtZSwgbGlrZSAiTVgiICovCi0JY29uc3QgY2hhciAqCWh1bWFubmFtZTsgLyogSXRzIGZ1biBuYW1lLCBsaWtlICJtYWlsIGV4Y2hhbmdlciIgKi8KLX07Ci0KLS8qCi0gKiBHbG9iYWwgZGVmaW5lcyBhbmQgdmFyaWFibGVzIGZvciByZXNvbHZlciBzdHViLgotICovCi0jZGVmaW5lCU1BWE5TCQkJMwkvKiBtYXggIyBuYW1lIHNlcnZlcnMgd2UnbGwgdHJhY2sgKi8KLSNkZWZpbmUJTUFYREZMU1JDSAkJMwkvKiAjIGRlZmF1bHQgZG9tYWluIGxldmVscyB0byB0cnkgKi8KLSNkZWZpbmUJTUFYRE5TUkNICQk2CS8qIG1heCAjIGRvbWFpbnMgaW4gc2VhcmNoIHBhdGggKi8KLSNkZWZpbmUJTE9DQUxET01BSU5QQVJUUwkyCS8qIG1pbiBsZXZlbHMgaW4gbmFtZSB0aGF0IGlzICJsb2NhbCIgKi8KLQotI2RlZmluZQlSRVNfVElNRU9VVAkJNQkvKiBtaW4uIHNlY29uZHMgYmV0d2VlbiByZXRyaWVzICovCi0jZGVmaW5lCU1BWFJFU09MVlNPUlQJCTEwCS8qIG51bWJlciBvZiBuZXQgdG8gc29ydCBvbiAqLwotI2RlZmluZQlSRVNfTUFYTkRPVFMJCTE1CS8qIHNob3VsZCByZWZsZWN0IGJpdCBmaWVsZCBzaXplICovCi0jZGVmaW5lCVJFU19NQVhSRVRSQU5TCQkzMAkvKiBvbmx5IGZvciByZXNvbHYuY29uZi9SRVNfT1BUSU9OUyAqLwotI2RlZmluZQlSRVNfTUFYUkVUUlkJCTUJLyogb25seSBmb3IgcmVzb2x2LmNvbmYvUkVTX09QVElPTlMgKi8KLSNkZWZpbmUJUkVTX0RGTFJFVFJZCQkyCS8qIERlZmF1bHQgIy90cmllcy4gKi8KLSNkZWZpbmUJUkVTX01BWFRJTUUJCTY1NTM1CS8qIEluZmluaXR5LCBpbiBtaWxsaXNlY29uZHMuICovCi0KLXN0cnVjdCBfX3Jlc19zdGF0ZV9leHQ7Ci0KLXN0cnVjdCBfX3Jlc19zdGF0ZSB7Ci0JY2hhcglpZmFjZVtJRl9OQU1FU0laRSsxXTsKLQlpbnQJcmV0cmFuczsJIAkvKiByZXRyYW5zbWlzc2lvbiB0aW1lIGludGVydmFsICovCi0JaW50CXJldHJ5OwkJCS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyYW5zbWl0ICovCi0jaWZkZWYgc3VuCi0JdV9pbnQJb3B0aW9uczsJCS8qIG9wdGlvbiBmbGFncyAtIHNlZSBiZWxvdy4gKi8KLSNlbHNlCi0JdV9sb25nCW9wdGlvbnM7CQkvKiBvcHRpb24gZmxhZ3MgLSBzZWUgYmVsb3cuICovCi0jZW5kaWYKLQlpbnQJbnNjb3VudDsJCS8qIG51bWJlciBvZiBuYW1lIHNlcnZlcnMgKi8KLQlzdHJ1Y3Qgc29ja2FkZHJfaW4KLQkJbnNhZGRyX2xpc3RbTUFYTlNdOwkvKiBhZGRyZXNzIG9mIG5hbWUgc2VydmVyICovCi0jZGVmaW5lCW5zYWRkcgluc2FkZHJfbGlzdFswXQkJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQl1X3Nob3J0CWlkOwkJCS8qIGN1cnJlbnQgbWVzc2FnZSBpZCAqLwotCWNoYXIJKmRuc3JjaFtNQVhETlNSQ0grMV07CS8qIGNvbXBvbmVudHMgb2YgZG9tYWluIHRvIHNlYXJjaCAqLwotCWNoYXIJZGVmZG5hbWVbMjU2XTsJCS8qIGRlZmF1bHQgZG9tYWluIChkZXByZWNhdGVkKSAqLwotI2lmZGVmIHN1bgotCXVfaW50CXBmY29kZTsJCQkvKiBSRVNfUFJGXyBmbGFncyAtIHNlZSBiZWxvdy4gKi8KLSNlbHNlCi0JdV9sb25nCXBmY29kZTsJCQkvKiBSRVNfUFJGXyBmbGFncyAtIHNlZSBiZWxvdy4gKi8KLSNlbmRpZgotCXVuc2lnbmVkIG5kb3RzOjQ7CQkvKiB0aHJlc2hvbGQgZm9yIGluaXRpYWwgYWJzLiBxdWVyeSAqLwotCXVuc2lnbmVkIG5zb3J0OjQ7CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gc29ydF9saXN0W10gKi8KLQljaGFyCXVudXNlZFszXTsKLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgaW5fYWRkcglhZGRyOwotCQl1aW50MzJfdAltYXNrOwotCX0gc29ydF9saXN0W01BWFJFU09MVlNPUlRdOwotI2lmZGVmIF9fT0xEX1JFU19TVEFURQotCWNoYXIgbG9va3Vwc1s0XTsKLSNlbHNlCi0JcmVzX3NlbmRfcWhvb2sgcWhvb2s7CQkvKiBxdWVyeSBob29rICovCi0JcmVzX3NlbmRfcmhvb2sgcmhvb2s7CQkvKiByZXNwb25zZSBob29rICovCi0JaW50CXJlc19oX2Vycm5vOwkJLyogbGFzdCBvbmUgc2V0IGZvciB0aGlzIGNvbnRleHQgKi8KLQlpbnQgX21hcms7ICAgICAgICAgIC8qIElmIG5vbi0wIFNFVF9NQVJLIHRvIF9tYXJrIG9uIGFsbCByZXF1ZXN0IHNvY2tldHMgKi8KLQlpbnQJX3Zjc29jazsJCS8qIFBSSVZBVEU6IGZvciByZXNfc2VuZCBWQyBpL28gKi8KLQl1X2ludAlfZmxhZ3M7CQkJLyogUFJJVkFURTogc2VlIGJlbG93ICovCi0JdV9pbnQJX3BhZDsJCQkvKiBtYWtlIF91IDY0IGJpdCBhbGlnbmVkICovCi0JdW5pb24gewotCQkvKiBPbiBhbiAzMi1iaXQgYXJjaCB0aGlzIG1lYW5zIDUxMmIgdG90YWwuICovCi0JCWNoYXIJcGFkWzcyIC0gNCpzaXplb2YgKGludCkgLSAyKnNpemVvZiAodm9pZCAqKV07Ci0JCXN0cnVjdCB7Ci0JCQl1aW50MTZfdAkJbnNjb3VudDsKLQkJCXVpbnQxNl90CQluc3RpbWVzW01BWE5TXTsJLyogbXMuICovCi0JCQlpbnQJCQluc3NvY2tzW01BWE5TXTsKLQkJCXN0cnVjdCBfX3Jlc19zdGF0ZV9leHQgKmV4dDsJLyogZXh0ZW50aW9uIGZvciBJUHY2ICovCi0JCX0gX2V4dDsKLQl9IF91OwotI2VuZGlmCi0gICAgICAgIHN0cnVjdCByZXNfc3RhdGljICAgcnN0YXRpY1sxXTsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IF9fcmVzX3N0YXRlICpyZXNfc3RhdGU7Ci0KLXVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiB7Ci0Jc3RydWN0IHNvY2thZGRyX2luCXNpbjsKLSNpZmRlZiBJTjZBRERSX0FOWV9JTklUCi0Jc3RydWN0IHNvY2thZGRyX2luNglzaW42OwotI2VuZGlmCi0jaWZkZWYgSVNDX0FMSUdONjQKLQlpbnQ2NF90CQkJX19hbGlnbjY0OwkvKiA2NGJpdCBhbGlnbm1lbnQgKi8KLSNlbHNlCi0JaW50MzJfdAkJCV9fYWxpZ24zMjsJLyogMzJiaXQgYWxpZ25tZW50ICovCi0jZW5kaWYKLQljaGFyCQkJX19zcGFjZVsxMjhdOyAgIC8qIG1heCBzaXplICovCi19OwotCi0vKgotICogUmVzb2x2ZXIgZmxhZ3MgKHVzZWQgdG8gYmUgZGlzY3JldGUgcGVyLW1vZHVsZSBzdGF0aWNzIGludHMpLgotICovCi0jZGVmaW5lCVJFU19GX1ZDCTB4MDAwMDAwMDEJLyogc29ja2V0IGlzIFRDUCAqLwotI2RlZmluZQlSRVNfRl9DT05OCTB4MDAwMDAwMDIJLyogc29ja2V0IGlzIGNvbm5lY3RlZCAqLwotI2RlZmluZQlSRVNfRl9FRE5TMEVSUgkweDAwMDAwMDA0CS8qIEVETlMwIGNhdXNlZCBlcnJvcnMgKi8KLSNkZWZpbmUJUkVTX0ZfX1VOVVNFRAkweDAwMDAwMDA4CS8qICh1bnVzZWQpICovCi0jZGVmaW5lCVJFU19GX0xBU1RNQVNLCTB4MDAwMDAwRjAJLyogb3JkaW5hbCBzZXJ2ZXIgb2YgbGFzdCByZXNfbnNlbmQgKi8KLSNkZWZpbmUJUkVTX0ZfTEFTVFNISUZUCTQJCS8qIGJpdCBwb3NpdGlvbiBvZiBMQVNUTUFTSyAiZmxhZyIgKi8KLSNkZWZpbmUJUkVTX0dFVExBU1QocmVzKSAoKChyZXMpLl9mbGFncyAmIFJFU19GX0xBU1RNQVNLKSA+PiBSRVNfRl9MQVNUU0hJRlQpCi0KLS8qIHJlc19maW5kem9uZWN1dDIoKSBvcHRpb25zICovCi0jZGVmaW5lCVJFU19FWEhBVVNUSVZFCTB4MDAwMDAwMDEJLyogYWx3YXlzIGRvIGFsbCBxdWVyaWVzICovCi0jZGVmaW5lCVJFU19JUFY0T05MWQkweDAwMDAwMDAyCS8qIElQdjQgb25seSAqLwotI2RlZmluZQlSRVNfSVBWNk9OTFkJMHgwMDAwMDAwNAkvKiBJUHY2IG9ubHkgKi8KLQotLyoKLSAqIFJlc29sdmVyIG9wdGlvbnMgKGtlZXAgdGhlc2UgaW4gc3luY2ggd2l0aCByZXNfZGVidWcuYywgcGxlYXNlKQotICovCi0jZGVmaW5lIFJFU19JTklUCTB4MDAwMDAwMDEJLyogYWRkcmVzcyBpbml0aWFsaXplZCAqLwotI2RlZmluZSBSRVNfREVCVUcJMHgwMDAwMDAwMgkvKiBwcmludCBkZWJ1ZyBtZXNzYWdlcyAqLwotI2RlZmluZSBSRVNfQUFPTkxZCTB4MDAwMDAwMDQJLyogYXV0aG9yaXRhdGl2ZSBhbnN3ZXJzIG9ubHkgKCFJTVBMKSovCi0jZGVmaW5lIFJFU19VU0VWQwkweDAwMDAwMDA4CS8qIHVzZSB2aXJ0dWFsIGNpcmN1aXQgKi8KLSNkZWZpbmUgUkVTX1BSSU1BUlkJMHgwMDAwMDAxMAkvKiBxdWVyeSBwcmltYXJ5IHNlcnZlciBvbmx5ICghSU1QTCkgKi8KLSNkZWZpbmUgUkVTX0lHTlRDCTB4MDAwMDAwMjAJLyogaWdub3JlIHRydWNhdGlvbiBlcnJvcnMgKi8KLSNkZWZpbmUgUkVTX1JFQ1VSU0UJMHgwMDAwMDA0MAkvKiByZWN1cnNpb24gZGVzaXJlZCAqLwotI2RlZmluZSBSRVNfREVGTkFNRVMJMHgwMDAwMDA4MAkvKiB1c2UgZGVmYXVsdCBkb21haW4gbmFtZSAqLwotI2RlZmluZSBSRVNfU1RBWU9QRU4JMHgwMDAwMDEwMAkvKiBLZWVwIFRDUCBzb2NrZXQgb3BlbiAqLwotI2RlZmluZSBSRVNfRE5TUkNICTB4MDAwMDAyMDAJLyogc2VhcmNoIHVwIGxvY2FsIGRvbWFpbiB0cmVlICovCi0jZGVmaW5lCVJFU19JTlNFQ1VSRTEJMHgwMDAwMDQwMAkvKiB0eXBlIDEgc2VjdXJpdHkgZGlzYWJsZWQgKi8KLSNkZWZpbmUJUkVTX0lOU0VDVVJFMgkweDAwMDAwODAwCS8qIHR5cGUgMiBzZWN1cml0eSBkaXNhYmxlZCAqLwotI2RlZmluZQlSRVNfTk9BTElBU0VTCTB4MDAwMDEwMDAJLyogc2h1dHMgb2ZmIEhPU1RBTElBU0VTIGZlYXR1cmUgKi8KLSNkZWZpbmUJUkVTX1VTRV9JTkVUNgkweDAwMDAyMDAwCS8qIHVzZS9tYXAgSVB2NiBpbiBnZXRob3N0YnluYW1lKCkgKi8KLSNkZWZpbmUgUkVTX1JPVEFURQkweDAwMDA0MDAwCS8qIHJvdGF0ZSBucyBsaXN0IGFmdGVyIGVhY2ggcXVlcnkgKi8KLSNkZWZpbmUJUkVTX05PQ0hFQ0tOQU1FCTB4MDAwMDgwMDAJLyogZG8gbm90IGNoZWNrIG5hbWVzIGZvciBzYW5pdHkuICovCi0jZGVmaW5lCVJFU19LRUVQVFNJRwkweDAwMDEwMDAwCS8qIGRvIG5vdCBzdHJpcCBUU0lHIHJlY29yZHMgKi8KLSNkZWZpbmUJUkVTX0JMQVNUCTB4MDAwMjAwMDAJLyogYmxhc3QgYWxsIHJlY3Vyc2l2ZSBzZXJ2ZXJzICovCi0jZGVmaW5lIFJFU19OT1RMRFFVRVJZCTB4MDAxMDAwMDAJLyogZG9uJ3QgdW5xdWFsaWZpZWQgbmFtZSBhcyBhIHRsZCAqLwotI2RlZmluZSBSRVNfVVNFX0ROU1NFQwkweDAwMjAwMDAwCS8qIHVzZSBETlNTRUMgdXNpbmcgT0sgYml0IGluIE9QVCAqLwotLyogI2RlZmluZSBSRVNfREVCVUcyCTB4MDA0MDAwMDAgKi8JLyogbnNsb29rdXAgaW50ZXJuYWwgKi8KLS8qIEtBTUUgZXh0ZW5zaW9uczogdXNlIGhpZ2hlciBiaXQgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBJU0MgdXNlICovCi0jZGVmaW5lIFJFU19VU0VfRE5BTUUJMHgxMDAwMDAwMAkvKiB1c2UgRE5BTUUgKi8KLSNkZWZpbmUgUkVTX1VTRV9FRE5TMAkweDQwMDAwMDAwCS8qIHVzZSBFRE5TMCBpZiBjb25maWd1cmVkICovCi0jZGVmaW5lIFJFU19OT19OSUJCTEUyCTB4ODAwMDAwMDAJLyogZGlzYWJsZSBhbHRlcm5hdGUgbmliYmxlIGxvb2t1cCAqLwotCi0jZGVmaW5lIFJFU19ERUZBVUxUCShSRVNfUkVDVVJTRSB8IFJFU19ERUZOQU1FUyB8IFwKLQkJCSBSRVNfRE5TUkNIIHwgUkVTX05PX05JQkJMRTIpCi0KLS8qCi0gKiBSZXNvbHZlciAicGZjb2RlIiB2YWx1ZXMuICBVc2VkIGJ5IGRpZy4KLSAqLwotI2RlZmluZSBSRVNfUFJGX1NUQVRTCTB4MDAwMDAwMDEKLSNkZWZpbmUgUkVTX1BSRl9VUERBVEUJMHgwMDAwMDAwMgotI2RlZmluZSBSRVNfUFJGX0NMQVNTICAgMHgwMDAwMDAwNAotI2RlZmluZSBSRVNfUFJGX0NNRAkweDAwMDAwMDA4Ci0jZGVmaW5lIFJFU19QUkZfUVVFUwkweDAwMDAwMDEwCi0jZGVmaW5lIFJFU19QUkZfQU5TCTB4MDAwMDAwMjAKLSNkZWZpbmUgUkVTX1BSRl9BVVRICTB4MDAwMDAwNDAKLSNkZWZpbmUgUkVTX1BSRl9BREQJMHgwMDAwMDA4MAotI2RlZmluZSBSRVNfUFJGX0hFQUQxCTB4MDAwMDAxMDAKLSNkZWZpbmUgUkVTX1BSRl9IRUFEMgkweDAwMDAwMjAwCi0jZGVmaW5lIFJFU19QUkZfVFRMSUQJMHgwMDAwMDQwMAotI2RlZmluZSBSRVNfUFJGX0hFQURYCTB4MDAwMDA4MDAKLSNkZWZpbmUgUkVTX1BSRl9RVUVSWQkweDAwMDAxMDAwCi0jZGVmaW5lIFJFU19QUkZfUkVQTFkJMHgwMDAwMjAwMAotI2RlZmluZSBSRVNfUFJGX0lOSVQJMHgwMDAwNDAwMAotI2RlZmluZSBSRVNfUFJGX1RSVU5DCTB4MDAwMDgwMDAKLS8qCQkJMHgwMDAxMDAwMAkqLwotCi0vKiBUaGluZ3MgaW52b2x2aW5nIGFuIGludGVybmFsIChzdGF0aWMpIHJlc29sdmVyIGNvbnRleHQuICovCi1fX0JFR0lOX0RFQ0xTCi1leHRlcm4gc3RydWN0IF9fcmVzX3N0YXRlICpfX3Jlc19nZXRfc3RhdGUodm9pZCk7Ci1leHRlcm4gdm9pZCBfX3Jlc19wdXRfc3RhdGUoc3RydWN0IF9fcmVzX3N0YXRlICopOwotCi0jaWZuZGVmIEFORFJPSURfQ0hBTkdFUwotLyoKLSAqIFNvdXJjZSBhbmQgQmluYXJ5IGNvbXBhdGliaWxpdHk7IF9yZXMgd2lsbCBub3Qgd29yayBwcm9wZXJseQotICogd2l0aCBtdWx0aS10aHJlYWRlZCBwcm9ncmFtcy4KLSAqLwotZXh0ZXJuIHN0cnVjdCBfX3Jlc19zdGF0ZSAqX19yZXNfc3RhdGUodm9pZCk7Ci0jZGVmaW5lIF9yZXMgKCpfX3Jlc19zdGF0ZSgpKQotI2VuZGlmCi0KLV9fRU5EX0RFQ0xTCi0KLSNpZm5kZWYgX19CSU5EX05PU1RBVElDCi0jZGVmaW5lIGZwX25xdWVyeQkJX19mcF9ucXVlcnkKLSNkZWZpbmUgZnBfcXVlcnkJCV9fZnBfcXVlcnkKLSNkZWZpbmUgaG9zdGFsaWFzCQlfX2hvc3RhbGlhcwotI2RlZmluZSBwX3F1ZXJ5CQkJX19wX3F1ZXJ5Ci0jZGVmaW5lIHJlc19jbG9zZQkJX19yZXNfY2xvc2UKLSNkZWZpbmUgcmVzX29wdAkJCV9fcmVzX29wdAotI2RlZmluZSByZXNfaXNvdXJzZXJ2ZXIJCV9fcmVzX2lzb3Vyc2VydmVyCi0jZGVmaW5lCXJlc19xdWVyeWRvbWFpbgkJX19yZXNfcXVlcnlkb21haW4KLSNkZWZpbmUgcmVzX3NlbmQJCV9fcmVzX3NlbmQKLSNkZWZpbmUgcmVzX3NlbmRzaWduZWQJCV9fcmVzX3NlbmRzaWduZWQKLQotI2lmZGVmIEJJTkRfUkVTX1BPU0lYMwotI2RlZmluZQlkbl9leHBhbmQJX19kbl9leHBhbmQKLSNkZWZpbmUJcmVzX2luaXQJX19yZXNfaW5pdAotI2RlZmluZQlyZXNfcXVlcnkJX19yZXNfcXVlcnkKLSNkZWZpbmUJcmVzX3NlYXJjaAlfX3Jlc19zZWFyY2gKLSNkZWZpbmUJcmVzX21rcXVlcnkJX19yZXNfbWtxdWVyeQotI2VuZGlmCi0KLV9fQkVHSU5fREVDTFMKLXZvaWQJCWZwX25xdWVyeShjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOwotdm9pZAkJZnBfcXVlcnkoY29uc3QgdV9jaGFyICosIEZJTEUgKik7Ci1jb25zdCBjaGFyICoJaG9zdGFsaWFzKGNvbnN0IGNoYXIgKik7Ci12b2lkCQlwX3F1ZXJ5KGNvbnN0IHVfY2hhciAqKTsKLXZvaWQJCXJlc19jbG9zZSh2b2lkKTsKLWludAkJcmVzX2luaXQodm9pZCk7Ci1pbnQJCXJlc19vcHQoaW50LCB1X2NoYXIgKiwgaW50LCBpbnQpOwotaW50CQlyZXNfaXNvdXJzZXJ2ZXIoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopOwotaW50CQlyZXNfbWtxdWVyeShpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGNvbnN0IHVfY2hhciAqLCBpbnQsIGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgaW50KTsKLWludAkJcmVzX3F1ZXJ5KGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpOwotaW50CQlyZXNfcXVlcnlkb21haW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKLWludAkJcmVzX3NlYXJjaChjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKLWludAkJcmVzX3NlbmQoY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19zZW5kc2lnbmVkKGNvbnN0IHVfY2hhciAqLCBpbnQsIG5zX3RzaWdfa2V5ICosIHVfY2hhciAqLCBpbnQpOwotX19FTkRfREVDTFMKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoU0hBUkVEX0xJQkJJTkQpIHx8IGRlZmluZWQoTElCKQotLyoKLSAqIElmIGxpYmJpbmQgaXMgYSBzaGFyZWQgb2JqZWN0ICh3ZWxsLCBETEwgYW55d2F5KQotICogdGhlc2UgZXh0ZXJucyBicmVhayB0aGUgbGlua2VyIHdoZW4gcmVzb2x2LmggaXMKLSAqIGluY2x1ZGVkIGJ5IGEgbGliIGNsaWVudCAobGlrZSBuYW1lZCkKLSAqIE1ha2UgdGhlbSBnbyBhd2F5IGlmIGEgY2xpZW50IGlzIGluY2x1ZGluZyB0aGlzCi0gKgotICovCi1leHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2tleV9zeW1zW107Ci1leHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2NlcnRfc3ltc1tdOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9jbGFzc19zeW1zW107Ci1leHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX3R5cGVfc3ltc1tdOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9yY29kZV9zeW1zW107Ci0jZW5kaWYgLyogU0hBUkVEX0xJQkJJTkQgKi8KLQotI2lmbmRlZiBBTkRST0lEX0NIQU5HRVMKLSNkZWZpbmUgZG5fY29tcAkJCV9fZG5fY29tcAotI2VuZGlmCi0jZGVmaW5lIGRuX2NvdW50X2xhYmVscwkJX19kbl9jb3VudF9sYWJlbHMKLSNkZWZpbmUgZG5fc2tpcG5hbWUJCV9fZG5fc2tpcG5hbWUKLSNkZWZpbmUgZnBfcmVzc3RhdAkJX19mcF9yZXNzdGF0Ci0jZGVmaW5lIGxvY19hdG9uCQlfX2xvY19hdG9uCi0jZGVmaW5lIGxvY19udG9hCQlfX2xvY19udG9hCi0jZGVmaW5lIHBfY2RuYW1lCQlfX3BfY2RuYW1lCi0jZGVmaW5lIHBfY2RubmFtZQkJX19wX2Nkbm5hbWUKLSNkZWZpbmUgcF9jbGFzcwkJCV9fcF9jbGFzcwotI2RlZmluZSBwX2ZxbmFtZQkJX19wX2ZxbmFtZQotI2RlZmluZSBwX2Zxbm5hbWUJCV9fcF9mcW5uYW1lCi0jZGVmaW5lIHBfb3B0aW9uCQlfX3Bfb3B0aW9uCi0jZGVmaW5lIHBfc2Vjc3RvZGF0ZQkJX19wX3NlY3N0b2RhdGUKLSNkZWZpbmUgcF9zZWN0aW9uCQlfX3Bfc2VjdGlvbgotI2RlZmluZSBwX3RpbWUJCQlfX3BfdGltZQotI2RlZmluZSBwX3R5cGUJCQlfX3BfdHlwZQotI2RlZmluZSBwX3Jjb2RlCQkJX19wX3Jjb2RlCi0jZGVmaW5lIHBfc29ja3VuCQlfX3Bfc29ja3VuCi0jZGVmaW5lIHB1dGxvbmcJCQlfX3B1dGxvbmcKLSNkZWZpbmUgcHV0c2hvcnQJCV9fcHV0c2hvcnQKLSNkZWZpbmUgcmVzX2Rub2sJCV9fcmVzX2Rub2sKLSNkZWZpbmUgcmVzX2ZpbmR6b25lY3V0CQlfX3Jlc19maW5kem9uZWN1dAotI2RlZmluZSByZXNfZmluZHpvbmVjdXQyCV9fcmVzX2ZpbmR6b25lY3V0MgotI2RlZmluZSByZXNfaG5vawkJX19yZXNfaG5vawotI2RlZmluZSByZXNfaG9zdGFsaWFzCQlfX3Jlc19ob3N0YWxpYXMKLSNkZWZpbmUgcmVzX21haWxvawkJX19yZXNfbWFpbG9rCi0jZGVmaW5lIHJlc19uYW1laW5xdWVyeQkJX19yZXNfbmFtZWlucXVlcnkKLSNkZWZpbmUgcmVzX25jbG9zZQkJX19yZXNfbmNsb3NlCi0jZGVmaW5lIHJlc19uaW5pdAkJX19yZXNfbmluaXQKLSNkZWZpbmUgcmVzX25ta3F1ZXJ5CQlfX3Jlc19ubWtxdWVyeQotI2RlZmluZSByZXNfcHF1ZXJ5CQlfX3Jlc19wcXVlcnkKLSNkZWZpbmUgcmVzX25xdWVyeQkJX19yZXNfbnF1ZXJ5Ci0jZGVmaW5lIHJlc19ucXVlcnlkb21haW4JX19yZXNfbnF1ZXJ5ZG9tYWluCi0jZGVmaW5lIHJlc19uc2VhcmNoCQlfX3Jlc19uc2VhcmNoCi0jZGVmaW5lIHJlc19uc2VuZAkJX19yZXNfbnNlbmQKLSNkZWZpbmUgcmVzX25zZW5kc2lnbmVkCQlfX3Jlc19uc2VuZHNpZ25lZAotI2RlZmluZSByZXNfbmlzb3Vyc2VydmVyCV9fcmVzX25pc291cnNlcnZlcgotI2RlZmluZSByZXNfb3dub2sJCV9fcmVzX293bm9rCi0jZGVmaW5lIHJlc19xdWVyaWVzbWF0Y2gJX19yZXNfcXVlcmllc21hdGNoCi0jZGVmaW5lIHJlc19yYW5kb21pZAkJX19yZXNfcmFuZG9taWQKLSNkZWZpbmUgc3ltX250b3AJCV9fc3ltX250b3AKLSNkZWZpbmUgc3ltX250b3MJCV9fc3ltX250b3MKLSNkZWZpbmUgc3ltX3N0b24JCV9fc3ltX3N0b24KLSNkZWZpbmUgcmVzX25vcHQJCV9fcmVzX25vcHQKLSNkZWZpbmUgcmVzX25kZXN0cm95CQlfX3Jlc19uZGVzdHJveQotI2RlZmluZQlyZXNfbmFtZXRvY2xhc3MJCV9fcmVzX25hbWV0b2NsYXNzCi0jZGVmaW5lCXJlc19uYW1ldG90eXBlCQlfX3Jlc19uYW1ldG90eXBlCi0jZGVmaW5lCXJlc19zZXRzZXJ2ZXJzCQlfX3Jlc19zZXRzZXJ2ZXJzCi0jZGVmaW5lCXJlc19nZXRzZXJ2ZXJzCQlfX3Jlc19nZXRzZXJ2ZXJzCi0jZGVmaW5lCXJlc19idWlsZHByb3RvbGlzdAlfX3Jlc19idWlsZHByb3RvbGlzdAotI2RlZmluZQlyZXNfZGVzdHJveXByb3RvbGlzdAlfX3Jlc19kZXN0cm95cHJvdG9saXN0Ci0jZGVmaW5lCXJlc19kZXN0cm95c2VydmljZWxpc3QJX19yZXNfZGVzdHJveXNlcnZpY2VsaXN0Ci0jZGVmaW5lCXJlc19nZXRfbmliYmxlc3VmZml4CV9fcmVzX2dldF9uaWJibGVzdWZmaXgKLSNkZWZpbmUJcmVzX2dldF9uaWJibGVzdWZmaXgyCV9fcmVzX2dldF9uaWJibGVzdWZmaXgyCi0jZGVmaW5lCXJlc19vdXJzZXJ2ZXJfcAkJX19yZXNfb3Vyc2VydmVyX3AKLSNkZWZpbmUJcmVzX3Byb3RvY29sbmFtZQlfX3Jlc19wcm90b2NvbG5hbWUKLSNkZWZpbmUJcmVzX3Byb3RvY29sbnVtYmVyCV9fcmVzX3Byb3RvY29sbnVtYmVyCi0jZGVmaW5lCXJlc19zZW5kX3NldHFob29rCV9fcmVzX3NlbmRfc2V0cWhvb2sKLSNkZWZpbmUJcmVzX3NlbmRfc2V0cmhvb2sJX19yZXNfc2VuZF9zZXRyaG9vawotI2RlZmluZQlyZXNfc2VydmljZW5hbWUJCV9fcmVzX3NlcnZpY2VuYW1lCi0jZGVmaW5lCXJlc19zZXJ2aWNlbnVtYmVyCV9fcmVzX3NlcnZpY2VudW1iZXIKLV9fQkVHSU5fREVDTFMKLWludAkJcmVzX2hub2soY29uc3QgY2hhciAqKTsKLWludAkJcmVzX293bm9rKGNvbnN0IGNoYXIgKik7Ci1pbnQJCXJlc19tYWlsb2soY29uc3QgY2hhciAqKTsKLWludAkJcmVzX2Rub2soY29uc3QgY2hhciAqKTsKLWludAkJc3ltX3N0b24oY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgY29uc3QgY2hhciAqLCBpbnQgKik7Ci1jb25zdCBjaGFyICoJc3ltX250b3MoY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgaW50LCBpbnQgKik7Ci1jb25zdCBjaGFyICoJc3ltX250b3AoY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgaW50LCBpbnQgKik7Ci0jaWZuZGVmIEFORFJPSURfQ0hBTkdFUwotaW50CQliNjRfbnRvcCh1X2NoYXIgY29uc3QgKiwgc2l6ZV90LCBjaGFyICosIHNpemVfdCk7Ci1pbnQJCWI2NF9wdG9uKGNoYXIgY29uc3QgKiwgdV9jaGFyICosIHNpemVfdCk7Ci0jZW5kaWYKLWludAkJbG9jX2F0b24oY29uc3QgY2hhciAqLCB1X2NoYXIgKik7Ci1jb25zdCBjaGFyICoJbG9jX250b2EoY29uc3QgdV9jaGFyICosIGNoYXIgKik7Ci1pbnQJCWRuX3NraXBuYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7Ci12b2lkCQlwdXRsb25nKHVpbnQzMl90LCB1X2NoYXIgKik7Ci12b2lkCQlwdXRzaG9ydCh1aW50MTZfdCwgdV9jaGFyICopOwotI2lmbmRlZiBfX3VsdHJpeF9fCi11aW50MTZfdAlfZ2V0c2hvcnQoY29uc3QgdV9jaGFyICopOwotdWludDMyX3QJX2dldGxvbmcoY29uc3QgdV9jaGFyICopOwotI2VuZGlmCi1jb25zdCBjaGFyICoJcF9jbGFzcyhpbnQpOwotY29uc3QgY2hhciAqCXBfdGltZSh1aW50MzJfdCk7Ci1jb25zdCBjaGFyICoJcF90eXBlKGludCk7Ci1jb25zdCBjaGFyICoJcF9yY29kZShpbnQpOwotY29uc3QgY2hhciAqCXBfc29ja3VuKHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiwgY2hhciAqLCBzaXplX3QpOwotY29uc3QgdV9jaGFyICoJcF9jZG5uYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOwotY29uc3QgdV9jaGFyICoJcF9jZG5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBGSUxFICopOwotY29uc3QgdV9jaGFyICoJcF9mcW5uYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwKLQkJCSAgICAgICBpbnQsIGNoYXIgKiwgaW50KTsKLWNvbnN0IHVfY2hhciAqCXBfZnFuYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgRklMRSAqKTsKLWNvbnN0IGNoYXIgKglwX29wdGlvbih1X2xvbmcpOwotY2hhciAqCQlwX3NlY3N0b2RhdGUodV9sb25nKTsKLWludAkJZG5fY291bnRfbGFiZWxzKGNvbnN0IGNoYXIgKik7Ci11X2ludAkJcmVzX3JhbmRvbWlkKHZvaWQpOwotaW50CQlyZXNfbmFtZWlucXVlcnkoY29uc3QgY2hhciAqLCBpbnQsIGludCwgY29uc3QgdV9jaGFyICosCi0JCQkJICAgICBjb25zdCB1X2NoYXIgKik7Ci1pbnQJCXJlc19xdWVyaWVzbWF0Y2goY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAotCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7Ci1jb25zdCBjaGFyICoJcF9zZWN0aW9uKGludCwgaW50KTsKLS8qIFRoaW5ncyBpbnZvbHZpbmcgYSByZXNvbHZlciBjb250ZXh0LiAqLwotaW50CQlyZXNfbmluaXQocmVzX3N0YXRlKTsKLWludAkJcmVzX25pc291cnNlcnZlcihjb25zdCByZXNfc3RhdGUsIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKLXZvaWQJCWZwX3Jlc3N0YXQoY29uc3QgcmVzX3N0YXRlLCBGSUxFICopOwotdm9pZAkJcmVzX3BxdWVyeShjb25zdCByZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsIEZJTEUgKik7Ci1jb25zdCBjaGFyICoJcmVzX2hvc3RhbGlhcyhjb25zdCByZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOwotaW50CQlyZXNfbnF1ZXJ5KHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19uc2VhcmNoKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19ucXVlcnlkb21haW4ocmVzX3N0YXRlLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKLQkJCQkgICAgICBpbnQsIGludCwgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19ubWtxdWVyeShyZXNfc3RhdGUsIGludCwgY29uc3QgY2hhciAqLCBpbnQsIGludCwKLQkJCQkgIGNvbnN0IHVfY2hhciAqLCBpbnQsIGNvbnN0IHVfY2hhciAqLAotCQkJCSAgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19uc2VuZChyZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQpOwotaW50CQlyZXNfbnNlbmRzaWduZWQocmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LAotCQkJCSAgICAgbnNfdHNpZ19rZXkgKiwgdV9jaGFyICosIGludCk7Ci1pbnQJCXJlc19maW5kem9uZWN1dChyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgbnNfY2xhc3MsIGludCwKLQkJCQkgICAgIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgaW5fYWRkciAqLCBpbnQpOwotaW50CQlyZXNfZmluZHpvbmVjdXQyKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBuc19jbGFzcywgaW50LAotCQkJCSAgICAgIGNoYXIgKiwgc2l6ZV90LAotCQkJCSAgICAgIHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiAqLCBpbnQpOwotdm9pZAkJcmVzX25jbG9zZShyZXNfc3RhdGUpOwotaW50CQlyZXNfbm9wdChyZXNfc3RhdGUsIGludCwgdV9jaGFyICosIGludCwgaW50KTsKLXZvaWQJCXJlc19zZW5kX3NldHFob29rKHJlc19zZW5kX3Fob29rKTsKLXZvaWQJCXJlc19zZW5kX3NldHJob29rKHJlc19zZW5kX3Job29rKTsKLWludAkJX19yZXNfdmluaXQocmVzX3N0YXRlLCBpbnQpOwotdm9pZAkJcmVzX2Rlc3Ryb3lzZXJ2aWNlbGlzdCh2b2lkKTsKLWNvbnN0IGNoYXIgKglyZXNfc2VydmljZW5hbWUodWludDE2X3QsIGNvbnN0IGNoYXIgKik7Ci1jb25zdCBjaGFyICoJcmVzX3Byb3RvY29sbmFtZShpbnQpOwotdm9pZAkJcmVzX2Rlc3Ryb3lwcm90b2xpc3Qodm9pZCk7Ci12b2lkCQlyZXNfYnVpbGRwcm90b2xpc3Qodm9pZCk7Ci1jb25zdCBjaGFyICoJcmVzX2dldF9uaWJibGVzdWZmaXgocmVzX3N0YXRlKTsKLWNvbnN0IGNoYXIgKglyZXNfZ2V0X25pYmJsZXN1ZmZpeDIocmVzX3N0YXRlKTsKLXZvaWQJCXJlc19uZGVzdHJveShyZXNfc3RhdGUpOwotdWludDE2X3QJcmVzX25hbWV0b2NsYXNzKGNvbnN0IGNoYXIgKiwgaW50ICopOwotdWludDE2X3QJcmVzX25hbWV0b3R5cGUoY29uc3QgY2hhciAqLCBpbnQgKik7Ci12b2lkCQlyZXNfc2V0c2VydmVycyhyZXNfc3RhdGUsCi0JCQkJICAgIGNvbnN0IHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiAqLCBpbnQpOwotaW50CQlyZXNfZ2V0c2VydmVycyhyZXNfc3RhdGUsCi0JCQkJICAgIHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiAqLCBpbnQpOwotCi12b2lkIHJlc19zZXRpZmFjZSgpOwotdm9pZCByZXNfc2V0bWFyaygpOwotdV9pbnQgIHJlc19yYW5kb21pZCh2b2lkKTsKLQotX19FTkRfREVDTFMKLQotI2VuZGlmIC8qICFfUkVTT0xWX1BSSVZBVEVfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS90aHJlYWRfcHJpdmF0ZS5oIGIvbGliYy9wcml2YXRlL3RocmVhZF9wcml2YXRlLmgKaW5kZXggYjE5YWQwOS4uMmUzYWMzZCAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL3RocmVhZF9wcml2YXRlLmgKKysrIGIvbGliYy9wcml2YXRlL3RocmVhZF9wcml2YXRlLmgKQEAgLTcsNiArNyw4IEBACiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKK19fQkVHSU5fREVDTFMKKwogLyoKICAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0aHJlYWQgbGlicmFyeSBpbnRlcmZhY2UgdG8gbGliYy4gIFRocmVhZAogICogbGlicmFyaWVzIG11c3QgaW1wbGVtZW50IHRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGhlcmUgZm9yIHByb3BlcgpAQCAtMTUsMTEgKzE3LDYgQEAKICAqLwogCiAvKgotICogVGhpcyB2YXJpYWJsZSBpcyAwIHVudGlsIGEgc2Vjb25kIHRocmVhZCBpcyBjcmVhdGVkLgotICovCi1leHRlcm4gaW50IF9faXN0aHJlYWRlZDsKLQotLyoKICAqIGhlbHBlciBtYWNybyB0byBtYWtlIHVuaXF1ZSBuYW1lcyBpbiB0aGUgdGhyZWFkIG5hbWVzcGFjZQogICovCiAjZGVmaW5lIF9fVEhSRUFEX05BTUUobmFtZSkJX19DT05DQVQoX3RocmVhZF90YWduYW1lXyxuYW1lKQpAQCAtMzYsMTYgKzMzLDIzIEBACiAjZGVmaW5lIF9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0sobmFtZSkgXAogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmX19USFJFQURfTkFNRShuYW1lKS5fcHJpdmF0ZV9sb2NrICkKIAotdm9pZAlfdGhyZWFkX2F0ZXhpdF9sb2NrKHZvaWQpOwotdm9pZAlfdGhyZWFkX2F0ZXhpdF91bmxvY2sodm9pZCk7CisvKiBOb3RlIHRoYXQgdGhlc2UgYXJlbid0IGNvbXBhdGlibGUgd2l0aCB0aGUgdXN1YWwgT3BlbkJTRCBvbmVzIHdoaWNoIGxhenktaW5pdGlhbGl6ZSEgKi8KKyNkZWZpbmUgX01VVEVYX0xPQ0sobCkgcHRocmVhZF9tdXRleF9sb2NrKChwdGhyZWFkX211dGV4X3QqKSBsKQorI2RlZmluZSBfTVVURVhfVU5MT0NLKGwpIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKChwdGhyZWFkX211dGV4X3QqKSBsKQogCi0jZGVmaW5lIF9BVEVYSVRfTE9DSygpCQlkbyB7CQkJCQlcCi0JCQkJCWlmIChfX2lzdGhyZWFkZWQpCQlcCi0JCQkJCQlfdGhyZWFkX2F0ZXhpdF9sb2NrKCk7CVwKLQkJCQl9IHdoaWxlICgwKQotI2RlZmluZSBfQVRFWElUX1VOTE9DSygpCWRvIHsJCQkJCVwKLQkJCQkJaWYgKF9faXN0aHJlYWRlZCkJCVwKLQkJCQkJCV90aHJlYWRfYXRleGl0X3VubG9jaygpO1wKLQkJCQl9IHdoaWxlICgwKQorX19MSUJDX0hJRERFTl9fIHZvaWQgIF90aHJlYWRfYXRleGl0X2xvY2sodm9pZCk7CitfX0xJQkNfSElEREVOX18gdm9pZCAgX3RocmVhZF9hdGV4aXRfdW5sb2NrKHZvaWQpOworCisjZGVmaW5lIF9BVEVYSVRfTE9DSygpIF90aHJlYWRfYXRleGl0X2xvY2soKQorI2RlZmluZSBfQVRFWElUX1VOTE9DSygpIF90aHJlYWRfYXRleGl0X3VubG9jaygpCisKK19fTElCQ19ISURERU5fXyB2b2lkICAgIF90aHJlYWRfYXJjNF9sb2NrKHZvaWQpOworX19MSUJDX0hJRERFTl9fIHZvaWQgICAgX3RocmVhZF9hcmM0X3VubG9jayh2b2lkKTsKKworI2RlZmluZSBfQVJDNF9MT0NLKCkgX3RocmVhZF9hcmM0X2xvY2soKQorI2RlZmluZSBfQVJDNF9VTkxPQ0soKSBfdGhyZWFkX2FyYzRfdW5sb2NrKCkKKyNkZWZpbmUgX0FSQzRfQVRGT1JLKGYpIHB0aHJlYWRfYXRmb3JrKE5VTEwsIE5VTEwsIChmKSkKKworX19FTkRfREVDTFMKIAogI2VuZGlmIC8qIF9USFJFQURfUFJJVkFURV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9hc3ByaW50Zi5jIGIvbGliYy9zdGRpby9hc3ByaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2Q4ZDYxLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vYXNwcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBhc3ByaW50Zi5jLHYgMS4xNSAyMDA1LzEwLzEwIDEyOjAwOjUyIGVzcGllIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi1pbnQKLWFzcHJpbnRmKGNoYXIgKipzdHIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCWludCByZXQ7Ci0JdmFfbGlzdCBhcDsKLQlGSUxFIGY7Ci0JdW5zaWduZWQgY2hhciAqX2Jhc2U7Ci0KLQlmLl9maWxlID0gLTE7Ci0JZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUiB8IF9fU0FMQzsKLQlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYygxMjgpOwotCWlmIChmLl9iZi5fYmFzZSA9PSBOVUxMKQotCQlnb3RvIGVycjsKLQlmLl9iZi5fc2l6ZSA9IGYuX3cgPSAxMjc7CQkvKiBMZWF2ZSByb29tIGZvciB0aGUgTlVMICovCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JcmV0ID0gX192ZnByaW50ZigmZiwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQlpZiAocmV0ID09IC0xKQotCQlnb3RvIGVycjsKLQkqZi5fcCA9ICdcMCc7Ci0JX2Jhc2UgPSByZWFsbG9jKGYuX2JmLl9iYXNlLCByZXQgKyAxKTsKLQlpZiAoX2Jhc2UgPT0gTlVMTCkKLQkJZ290byBlcnI7Ci0JKnN0ciA9IChjaGFyICopX2Jhc2U7Ci0JcmV0dXJuIChyZXQpOwotCi1lcnI6Ci0JZnJlZShmLl9iZi5fYmFzZSk7Ci0JKnN0ciA9IE5VTEw7Ci0JZXJybm8gPSBFTk9NRU07Ci0JcmV0dXJuICgtMSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZmbHVzaC5jIGIvbGliYy9zdGRpby9mZmx1c2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5YmRjYy4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2ZmbHVzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZmbHVzaC5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKiBGbHVzaCBhIHNpbmdsZSBmaWxlLCBvciAoaWYgZnAgaXMgTlVMTCkgYWxsIGZpbGVzLiAgKi8KLWludAotZmZsdXNoKEZJTEUgKmZwKQotewotCWludCByOwotCi0JaWYgKGZwID09IE5VTEwpCi0JCXJldHVybiAoX2Z3YWxrKF9fc2ZsdXNoX2xvY2tlZCkpOwotCUZMT0NLRklMRShmcCk7Ci0JaWYgKChmcC0+X2ZsYWdzICYgKF9fU1dSIHwgX19TUlcpKSA9PSAwKSB7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXIgPSBFT0Y7Ci0JfSBlbHNlCi0JCXIgPSBfX3NmbHVzaChmcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAocik7Ci19Ci0KLWludAotX19zZmx1c2goRklMRSAqZnApCi17Ci0JdW5zaWduZWQgY2hhciAqcDsKLQlpbnQgbiwgdDsKLQotCXQgPSBmcC0+X2ZsYWdzOwotCWlmICgodCAmIF9fU1dSKSA9PSAwKQotCQlyZXR1cm4gKDApOwotCi0JaWYgKChwID0gZnAtPl9iZi5fYmFzZSkgPT0gTlVMTCkKLQkJcmV0dXJuICgwKTsKLQotCW4gPSBmcC0+X3AgLSBwOwkJLyogd3JpdGUgdGhpcyBtdWNoICovCi0KLQkvKgotCSAqIFNldCB0aGVzZSBpbW1lZGlhdGVseSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGxvbmdqbXAgYW5kIHRvIGFsbG93Ci0JICogZXhjaGFuZ2UgYnVmZmVyaW5nICh2aWEgc2V0dmJ1ZikgaW4gdXNlciB3cml0ZSBmdW5jdGlvbi4KLQkgKi8KLQlmcC0+X3AgPSBwOwotCWZwLT5fdyA9IHQgJiAoX19TTEJGfF9fU05CRikgPyAwIDogZnAtPl9iZi5fc2l6ZTsKLQotCWZvciAoOyBuID4gMDsgbiAtPSB0LCBwICs9IHQpIHsKLQkJdCA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIChjaGFyICopcCwgbik7Ci0JCWlmICh0IDw9IDApIHsKLQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOwotCQkJcmV0dXJuIChFT0YpOwotCQl9Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLWludAotX19zZmx1c2hfbG9ja2VkKEZJTEUgKmZwKQotewotCWludCByOwotCi0JRkxPQ0tGSUxFKGZwKTsKLQlyID0gX19zZmx1c2goZnApOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHIpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mZ2V0Yy5jIGIvbGliYy9zdGRpby9mZ2V0Yy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTZkNTRlLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZmdldGMuYworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmZ2V0Yy5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLWludAotZmdldGMoRklMRSAqZnApCi17Ci0JcmV0dXJuIChnZXRjKGZwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZpbGVleHQuaCBiL2xpYmMvc3RkaW8vZmlsZWV4dC5oCmluZGV4IGIzNmE0NDguLjFmMmEzYTMgMTAwNjQ0Ci0tLSBhL2xpYmMvc3RkaW8vZmlsZWV4dC5oCisrKyBiL2xpYmMvc3RkaW8vZmlsZWV4dC5oCkBAIC0yOSw4ICsyOSwxMCBAQAogICogJENpdHJ1cyQKICAqLwogCisjaWZuZGVmIF9GSUxFRVhUX0hfCisjZGVmaW5lIF9GSUxFRVhUX0hfCisKICNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSAid2Npby5oIgogCiAvKgogICogZmlsZSBleHRlbnNpb24KQEAgLTUyLDIwICs1NCwxMyBAQAogCV9VQihmcCkuX2Jhc2UgPSBOVUxMOyBcCiAJX1VCKGZwKS5fc2l6ZSA9IDA7IFwKIAlXQ0lPX0lOSVQoZnApOyBcCi0JX0ZMT0NLX0lOSVQoZnApOyBcCisgICAgICAgIF9GTE9DSyhmcCkudmFsdWUgPSBfX1BUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRfVkFMVUU7IFwKIH0gd2hpbGUgKDApCiAKLS8qIEhlbHBlciBtYWNyb3MgdG8gYXZvaWQgYSBmdW5jdGlvbiBjYWxsIHdoZW4geW91IGtub3cgdGhhdCBmcCBpcyBub3QgTlVMTC4KLSAqIE5vdGljZSB0aGF0IHdlIGtlZXAgX0ZMT0NLX0lOSVQoKSBmYXN0IGJ5IHNsaWdodGx5IGJyZWFraW5nIG91ciBwdGhyZWFkCi0gKiBlbmNhcHN1bGF0aW9uLgotICovCi0jZGVmaW5lIF9GTE9DS19JTklUKGZwKSAgICBfRkxPQ0soZnApLnZhbHVlID0gX19QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUX1ZBTFVFCi0jZGVmaW5lIF9GTE9DS19MT0NLKGZwKSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9GTE9DSyhmcCkpCi0jZGVmaW5lIF9GTE9DS19UUllMT0NLKGZwKSBwdGhyZWFkX211dGV4X3RyeWxvY2soJl9GTE9DSyhmcCkpCi0jZGVmaW5lIF9GTE9DS19VTkxPQ0soZnApICBwdGhyZWFkX211dGV4X3VubG9jaygmX0ZMT0NLKGZwKSkKLQogI2RlZmluZSBfRklMRUVYVF9TRVRVUChmLCBmZXh0KSBcCiBkbyB7IFwKIAkoZiktPl9leHQuX2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKShmZXh0KTsgXAogCV9GSUxFRVhUX0lOSVQoZik7IFwKIH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfRklMRUVYVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9maW5kZnAuYyBiL2xpYmMvc3RkaW8vZmluZGZwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0M2M5MGEuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9maW5kZnAuYworKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKgkkT3BlbkJTRDogZmluZGZwLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0jaW5jbHVkZSAiZ2x1ZS5oIgotI2luY2x1ZGUgInByaXZhdGUvdGhyZWFkX3ByaXZhdGUuaCIKLQotaW50CV9fc2RpZGluaXQ7Ci0KLSNkZWZpbmUJTkRZTkFNSUMgMTAJCS8qIGFkZCB0ZW4gbW9yZSB3aGVuZXZlciBuZWNlc3NhcnkgKi8KLQotI2RlZmluZQlzdGQoZmxhZ3MsIGZpbGUpIFwKLQl7MCwwLDAsZmxhZ3MsZmlsZSx7MCwwfSwwLF9fc0YrZmlsZSxfX3NjbG9zZSxfX3NyZWFkLF9fc3NlZWssX19zd3JpdGUsIFwKLQkgeyh1bnNpZ25lZCBjaGFyICopKF9fc0ZleHQrZmlsZSksIDB9LE5VTEwsMCx7MCwwLDB9LHswfSx7MCwwfSwwLDB9Ci0vKgkgcCByIHcgZmxhZ3MgZmlsZSBfYmYgeiAgY29va2llICAgICAgY2xvc2UgICAgcmVhZCAgICBzZWVrICAgIHdyaXRlCi0JIGV4dCAqLwotCi0vKiB0aGUgdXN1YWwgLSAoc3RkaW4gKyBzdGRvdXQgKyBzdGRlcnIpICovCi1zdGF0aWMgRklMRSB1c3VhbFtGT1BFTl9NQVggLSAzXTsKLXN0YXRpYyBzdHJ1Y3QgX19zZmlsZWV4dCB1c3VhbGV4dFtGT1BFTl9NQVggLSAzXTsKLXN0YXRpYyBzdHJ1Y3QgZ2x1ZSB1Z2x1ZSA9IHsgMCwgRk9QRU5fTUFYIC0gMywgdXN1YWwgfTsKLXN0YXRpYyBzdHJ1Y3QgZ2x1ZSAqbGFzdGdsdWUgPSAmdWdsdWU7Ci1fVEhSRUFEX1BSSVZBVEVfTVVURVgoX19zZnBfbXV0ZXgpOwotCi1zdGF0aWMgc3RydWN0IF9fc2ZpbGVleHQgX19zRmV4dFszXSA9IHsKLQlfRklMRUVYVF9JTklUSUFMSVpFUiwKLQlfRklMRUVYVF9JTklUSUFMSVpFUiwKLQlfRklMRUVYVF9JTklUSUFMSVpFUiwKLX07Ci0KLUZJTEUgX19zRlszXSA9IHsKLQlzdGQoX19TUkQsIFNURElOX0ZJTEVOTyksCQkvKiBzdGRpbiAqLwotCXN0ZChfX1NXUiwgU1RET1VUX0ZJTEVOTyksCQkvKiBzdGRvdXQgKi8KLQlzdGQoX19TV1J8X19TTkJGLCBTVERFUlJfRklMRU5PKQkvKiBzdGRlcnIgKi8KLX07Ci1zdHJ1Y3QgZ2x1ZSBfX3NnbHVlID0geyAmdWdsdWUsIDMsIF9fc0YgfTsKLQotc3RhdGljIHN0cnVjdCBnbHVlICoKLW1vcmVnbHVlKGludCBuKQotewotCXN0cnVjdCBnbHVlICpnOwotCUZJTEUgKnA7Ci0Jc3RydWN0IF9fc2ZpbGVleHQgKnBleHQ7Ci0Jc3RhdGljIEZJTEUgZW1wdHk7Ci0JY2hhciAqZGF0YTsKLQotCWRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpnKSArIEFMSUdOQllURVMgKyBuICogc2l6ZW9mKEZJTEUpCi0JICAgICsgbiAqIHNpemVvZihzdHJ1Y3QgX19zZmlsZWV4dCkpOwotCWlmIChkYXRhID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JZyA9IChzdHJ1Y3QgZ2x1ZSAqKWRhdGE7Ci0JcCA9IChGSUxFICopQUxJR04oZGF0YSArIHNpemVvZigqZykpOwotCXBleHQgPSAoc3RydWN0IF9fc2ZpbGVleHQgKikKLQkgICAgKEFMSUdOKGRhdGEgKyBzaXplb2YoKmcpKSArIG4gKiBzaXplb2YoRklMRSkpOwotCWctPm5leHQgPSBOVUxMOwotCWctPm5pb2JzID0gbjsKLQlnLT5pb2JzID0gcDsKLQl3aGlsZSAoLS1uID49IDApIHsKLQkJKnAgPSBlbXB0eTsKLQkJX0ZJTEVFWFRfU0VUVVAocCwgcGV4dCk7Ci0JCXArKzsKLQkJcGV4dCsrOwotCX0KLQlyZXR1cm4gKGcpOwotfQotCi0vKgotICogRmluZCBhIGZyZWUgRklMRSBmb3IgZm9wZW4gZXQgYWwuCi0gKi8KLUZJTEUgKgotX19zZnAodm9pZCkKLXsKLQlGSUxFICpmcDsKLQlpbnQgbjsKLQlzdHJ1Y3QgZ2x1ZSAqZzsKLQotCWlmICghX19zZGlkaW5pdCkKLQkJX19zaW5pdCgpOwotCi0JX1RIUkVBRF9QUklWQVRFX01VVEVYX0xPQ0soX19zZnBfbXV0ZXgpOwotCWZvciAoZyA9ICZfX3NnbHVlOyBnICE9IE5VTEw7IGcgPSBnLT5uZXh0KSB7Ci0JCWZvciAoZnAgPSBnLT5pb2JzLCBuID0gZy0+bmlvYnM7IC0tbiA+PSAwOyBmcCsrKQotCQkJaWYgKGZwLT5fZmxhZ3MgPT0gMCkKLQkJCQlnb3RvIGZvdW5kOwotCX0KLQotCS8qIHJlbGVhc2UgbG9jayB3aGlsZSBtYWxsb2NpbmcgKi8KLQlfVEhSRUFEX1BSSVZBVEVfTVVURVhfVU5MT0NLKF9fc2ZwX211dGV4KTsKLQlpZiAoKGcgPSBtb3JlZ2x1ZShORFlOQU1JQykpID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JX1RIUkVBRF9QUklWQVRFX01VVEVYX0xPQ0soX19zZnBfbXV0ZXgpOwotCWxhc3RnbHVlLT5uZXh0ID0gZzsKLQlsYXN0Z2x1ZSA9IGc7Ci0JZnAgPSBnLT5pb2JzOwotZm91bmQ6Ci0JZnAtPl9mbGFncyA9IDE7CQkvKiByZXNlcnZlIHRoaXMgc2xvdDsgY2FsbGVyIHNldHMgcmVhbCBmbGFncyAqLwotCV9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0soX19zZnBfbXV0ZXgpOwotCWZwLT5fcCA9IE5VTEw7CQkvKiBubyBjdXJyZW50IHBvaW50ZXIgKi8KLQlmcC0+X3cgPSAwOwkJLyogbm90aGluZyB0byByZWFkIG9yIHdyaXRlICovCi0JZnAtPl9yID0gMDsKLQlmcC0+X2JmLl9iYXNlID0gTlVMTDsJLyogbm8gYnVmZmVyICovCi0JZnAtPl9iZi5fc2l6ZSA9IDA7Ci0JZnAtPl9sYmZzaXplID0gMDsJLyogbm90IGxpbmUgYnVmZmVyZWQgKi8KLQlmcC0+X2ZpbGUgPSAtMTsJCS8qIG5vIGZpbGUgKi8KLS8qCWZwLT5fY29va2llID0gPGFueT47ICovCS8qIGNhbGxlciBzZXRzIGNvb2tpZSwgX3JlYWQvX3dyaXRlIGV0YyAqLwotCWZwLT5fbGIuX2Jhc2UgPSBOVUxMOwkvKiBubyBsaW5lIGJ1ZmZlciAqLwotCWZwLT5fbGIuX3NpemUgPSAwOwotCV9GSUxFRVhUX0lOSVQoZnApOwotCXJldHVybiAoZnApOwotfQotCi0jaWYgMAotI2RlZmluZSBnZXRkdGFibGVzaXplKCkJc3lzY29uZihfU0NfT1BFTl9NQVgpCi0KLS8qCi0gKiBYWFguICBGb3JjZSBpbW1lZGlhdGUgYWxsb2NhdGlvbiBvZiBpbnRlcm5hbCBtZW1vcnkuICBOb3QgdXNlZCBieSBzdGRpbywKLSAqIGJ1dCBkb2N1bWVudGVkIGhpc3RvcmljYWxseSBmb3IgY2VydGFpbiBhcHBsaWNhdGlvbnMuICBCYWQgYXBwbGljYXRpb25zLgotICovCi12b2lkCi1mX3ByZWFsbG9jKHZvaWQpCi17Ci0Jc3RydWN0IGdsdWUgKmc7Ci0JaW50IG47Ci0KLQluID0gZ2V0ZHRhYmxlc2l6ZSgpIC0gRk9QRU5fTUFYICsgMjA7CQkvKiAyMCBmb3Igc2xvcC4gKi8KLQlmb3IgKGcgPSAmX19zZ2x1ZTsgKG4gLT0gZy0+bmlvYnMpID4gMCAmJiBnLT5uZXh0OyBnID0gZy0+bmV4dCkKLQkJLyogdm9pZCAqLzsKLQlpZiAobiA+IDAgJiYgKChnID0gbW9yZWdsdWUobikpICE9IE5VTEwpKSB7Ci0JCV9USFJFQURfUFJJVkFURV9NVVRFWF9MT0NLKF9fc2ZwX211dGV4KTsKLQkJbGFzdGdsdWUtPm5leHQgPSBnOwotCQlsYXN0Z2x1ZSA9IGc7Ci0JCV9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0soX19zZnBfbXV0ZXgpOwotCX0KLX0KLSNlbmRpZgotCi0vKgotICogZXhpdCgpIGNhbGxzIF9jbGVhbnVwKCkgdGhyb3VnaCAqX19jbGVhbnVwLCBzZXQgd2hlbmV2ZXIgd2UKLSAqIG9wZW4gb3IgYnVmZmVyIGEgZmlsZS4gIFRoaXMgY2hpY2FuZXJ5IGlzIGRvbmUgc28gdGhhdCBwcm9ncmFtcwotICogdGhhdCBkbyBub3QgdXNlIHN0ZGlvIG5lZWQgbm90IGxpbmsgaXQgYWxsIGluLgotICoKLSAqIFRoZSBuYW1lIGBfY2xlYW51cCcgaXMsIGFsYXMsIGZhaXJseSB3ZWxsIGtub3duIG91dHNpZGUgc3RkaW8uCi0gKi8KLXZvaWQKLV9jbGVhbnVwKHZvaWQpCi17Ci0JLyogKHZvaWQpIF9md2FsayhmY2xvc2UpOyAqLwotCSh2b2lkKSBfZndhbGsoX19zZmx1c2gpOwkJLyogYGNoZWF0aW5nJyAqLwotfQotCi0vKgotICogX19zaW5pdCgpIGlzIGNhbGxlZCB3aGVuZXZlciBzdGRpbydzIGludGVybmFsIHZhcmlhYmxlcyBtdXN0IGJlIHNldCB1cC4KLSAqLwotdm9pZAotX19zaW5pdCh2b2lkKQotewotCV9USFJFQURfUFJJVkFURV9NVVRFWChfX3Npbml0X211dGV4KTsKLQlpbnQgaTsKLQotCV9USFJFQURfUFJJVkFURV9NVVRFWF9MT0NLKF9fc2luaXRfbXV0ZXgpOwotCWlmIChfX3NkaWRpbml0KQotCQlnb3RvIG91dDsJLyogYmFpbCBvdXQgaWYgY2FsbGVyIGxvc3QgdGhlIHJhY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgRk9QRU5fTUFYIC0gMzsgaSsrKSB7Ci0JCV9GSUxFRVhUX1NFVFVQKHVzdWFsK2ksIHVzdWFsZXh0K2kpOwotCX0KLQkvKiBtYWtlIHN1cmUgd2UgY2xlYW4gdXAgb24gZXhpdCAqLwotCV9fY2xlYW51cCA9IF9jbGVhbnVwOyAvKiBjb25zZXJ2YXRpdmUgKi8KLQlfX3NkaWRpbml0ID0gMTsKLW91dDoKLQlfVEhSRUFEX1BSSVZBVEVfTVVURVhfVU5MT0NLKF9fc2luaXRfbXV0ZXgpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mbG9hdGlvLmggYi9saWJjL3N0ZGlvL2Zsb2F0aW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBmOTgwMS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2Zsb2F0aW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmbG9hdGlvLmgsdiAxLjMgMjAwMy8wNi8wMiAyMDoxODozNyBtaWxsZXJ0IEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIEZsb2F0aW5nIHBvaW50IHNjYW5mL3ByaW50ZiAoaW5wdXQvb3V0cHV0KSBkZWZpbml0aW9ucy4KLSAqLwotCi0vKiAxMS1iaXQgZXhwb25lbnQgKFZBWCBHIGZsb2F0aW5nIHBvaW50KSBpcyAzMDggZGVjaW1hbCBkaWdpdHMgKi8KLSNkZWZpbmUJTUFYRVhQCQkzMDgKLS8qIDEyOCBiaXQgZnJhY3Rpb24gdGFrZXMgdXAgMzkgZGVjaW1hbCBkaWdpdHM7IG1heCByZWFzb25hYmxlIHByZWNpc2lvbiAqLwotI2RlZmluZQlNQVhGUkFDVAkzOQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mcHJpbnRmLmMgYi9saWJjL3N0ZGlvL2ZwcmludGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQxNWIyZi4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2ZwcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmcHJpbnRmLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotaW50Ci1mcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgcmV0OwotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQlyZXQgPSB2ZnByaW50ZihmcCwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZwdXRjLmMgYi9saWJjL3N0ZGlvL2ZwdXRjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwODA5ZTIuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mcHV0Yy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZwdXRjLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi1pbnQKLWZwdXRjKGludCBjLCBGSUxFICpmcCkKLXsKLQlyZXR1cm4gKHB1dGMoYywgZnApKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnJlYWQuYyBiL2xpYmMvc3RkaW8vZnJlYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ5ZGIxNy4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2ZyZWFkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZyZWFkLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLXN0YXRpYyBpbnQKLWxmbHVzaChGSUxFICpmcCkKLXsKLSAgICBpZiAoKGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU1dSKSkgPT0gKF9fU0xCRnxfX1NXUikpCi0gICAgICAgIHJldHVybiAoX19zZmx1c2hfbG9ja2VkKGZwKSk7Ci0gICAgcmV0dXJuICgwKTsKLX0KLQotc2l6ZV90Ci1mcmVhZCh2b2lkICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgY291bnQsIEZJTEUgKmZwKQotewotICAgIHNpemVfdCByZXNpZDsKLSAgICBjaGFyICpwOwotICAgIGludCByOwotICAgIHNpemVfdCB0b3RhbDsKLQotICAgIC8qCi0gICAgICogVGhlIEFOU0kgc3RhbmRhcmQgcmVxdWlyZXMgYSByZXR1cm4gdmFsdWUgb2YgMCBmb3IgYSBjb3VudAotICAgICAqIG9yIGEgc2l6ZSBvZiAwLiAgUGVjdWxpYXJpbHksIGl0IGltcG9zZXMgbm8gc3VjaCByZXF1aXJlbWVudHMKLSAgICAgKiBvbiBmd3JpdGU7IGl0IG9ubHkgcmVxdWlyZXMgZnJlYWQgdG8gYmUgYnJva2VuLgotICAgICAqLwotICAgIGlmICgocmVzaWQgPSBjb3VudCAqIHNpemUpID09IDApCi0gICAgICAgIHJldHVybiAoMCk7Ci0gICAgRkxPQ0tGSUxFKGZwKTsKLSAgICBpZiAoZnAtPl9yIDwgMCkKLSAgICAgICAgZnAtPl9yID0gMDsKLSAgICB0b3RhbCA9IHJlc2lkOwotICAgIHAgPSBidWY7Ci0KLSNpZiAxICAvKiBCSU9OSUM6IG9wdGltaXplIHVuYnVmZmVyZWQgcmVhZHMgKi8KLSAgICBpZiAoZnAtPl9mbGFncyAmIF9fU05CRiAmJiBmcC0+X3VyID09IDApCi0gICAgewotICAgICAgICAvKiB0aGUgZm9sbG93aW5nIGNvbWVzIG1haW5seSBmcm9tIF9fc3JlZmlsbCgpLCB3aXRoIHNsaWdodAotICAgICAgICAgKiBtb2RpZmljYXRpb25zCi0gICAgICAgICAqLwotCi0gICAgICAgIC8qIG1ha2Ugc3VyZSBzdGRpbyBpcyBzZXQgdXAgKi8KLSAgICAgICAgaWYgKCFfX3NkaWRpbml0KQotICAgICAgICAgICAgX19zaW5pdCgpOwotCi0gICAgICAgIGZwLT5fciA9IDA7ICAgICAvKiBsYXJnZWx5IGEgY29udmVuaWVuY2UgZm9yIGNhbGxlcnMgKi8KLQotICAgICAgICAvKiBTeXNWIGRvZXMgbm90IG1ha2UgdGhpcyB0ZXN0OyB0YWtlIGl0IG91dCBmb3IgY29tcGF0aWJpbGl0eSAqLwotICAgICAgICBpZiAoZnAtPl9mbGFncyAmIF9fU0VPRikgewotICAgICAgICAgICAgRlVOTE9DS0ZJTEUoZnApOwotICAgICAgICAgICAgcmV0dXJuIChFT0YpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogaWYgbm90IGFscmVhZHkgcmVhZGluZywgaGF2ZSB0byBiZSByZWFkaW5nIGFuZCB3cml0aW5nICovCi0gICAgICAgIGlmICgoZnAtPl9mbGFncyAmIF9fU1JEKSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSVykgPT0gMCkgewotICAgICAgICAgICAgICAgIGZwLT5fZmxhZ3MgfD0gX19TRVJSOwotICAgICAgICAgICAgICAgIEZVTkxPQ0tGSUxFKGZwKTsKLSAgICAgICAgICAgICAgICBlcnJubyA9IEVCQURGOwotICAgICAgICAgICAgICAgIHJldHVybiAoRU9GKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIHN3aXRjaCB0byByZWFkaW5nICovCi0gICAgICAgICAgICBpZiAoZnAtPl9mbGFncyAmIF9fU1dSKSB7Ci0gICAgICAgICAgICAgICAgaWYgKF9fc2ZsdXNoKGZwKSkgewotICAgICAgICAgICAgICAgICAgICBGVU5MT0NLRklMRShmcCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoRU9GKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnAtPl9mbGFncyAmPSB+X19TV1I7Ci0gICAgICAgICAgICAgICAgZnAtPl93ID0gMDsKLSAgICAgICAgICAgICAgICBmcC0+X2xiZnNpemUgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZnAtPl9mbGFncyB8PSBfX1NSRDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBXZSB3ZXJlIHJlYWRpbmcuICBJZiB0aGVyZSBpcyBhbiB1bmdldGMgYnVmZmVyLAotICAgICAgICAgICAgICogd2UgbXVzdCBoYXZlIGJlZW4gcmVhZGluZyBmcm9tIHRoYXQuICBEcm9wIGl0LAotICAgICAgICAgICAgICogcmVzdG9yaW5nIHRoZSBwcmV2aW91cyBidWZmZXIgKGlmIGFueSkuICBJZiB0aGVyZQotICAgICAgICAgICAgICogaXMgYW55dGhpbmcgaW4gdGhhdCBidWZmZXIsIHJldHVybi4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKEhBU1VCKGZwKSkgewotICAgICAgICAgICAgICAgIEZSRUVVQihmcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBCZWZvcmUgcmVhZGluZyBmcm9tIGEgbGluZSBidWZmZXJlZCBvciB1bmJ1ZmZlcmVkIGZpbGUsCi0gICAgICAgICAqIGZsdXNoIGFsbCBsaW5lIGJ1ZmZlcmVkIG91dHB1dCBmaWxlcywgcGVyIHRoZSBBTlNJIEMKLSAgICAgICAgICogc3RhbmRhcmQuCi0gICAgICAgICAqLwotCi0gICAgICAgIGlmIChmcC0+X2ZsYWdzICYgKF9fU0xCRnxfX1NOQkYpKSB7Ci0gICAgICAgICAgICAvKiBJZ25vcmUgdGhpcyBmaWxlIGluIF9md2FsayB0byBkZWFkbG9jay4gKi8KLSAgICAgICAgICAgIGZwLT5fZmxhZ3MgfD0gX19TSUdOOwotICAgICAgICAgICAgKHZvaWQpIF9md2FsayhsZmx1c2gpOwotICAgICAgICAgICAgZnAtPl9mbGFncyAmPSB+X19TSUdOOwotCi0gICAgICAgICAgICAvKiBOb3cgZmx1c2ggdGhpcyBmaWxlIHdpdGhvdXQgbG9ja2luZyBpdC4gKi8KLSAgICAgICAgICAgIGlmICgoZnAtPl9mbGFncyAmIChfX1NMQkZ8X19TV1IpKSA9PSAoX19TTEJGfF9fU1dSKSkKLSAgICAgICAgICAgICAgICBfX3NmbHVzaChmcCk7Ci0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAocmVzaWQgPiAwKSB7Ci0gICAgICAgICAgICBpbnQgICBsZW4gPSAoKmZwLT5fcmVhZCkoZnAtPl9jb29raWUsIHAsIHJlc2lkICk7Ci0gICAgICAgICAgICBmcC0+X2ZsYWdzICY9IH5fX1NNT0Q7Ci0gICAgICAgICAgICBpZiAobGVuIDw9IDApIHsKLSAgICAgICAgICAgICAgICBpZiAobGVuID09IDApCi0gICAgICAgICAgICAgICAgICAgIGZwLT5fZmxhZ3MgfD0gX19TRU9GOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgRlVOTE9DS0ZJTEUoZnApOwotICAgICAgICAgICAgICAgIHJldHVybiAoKHRvdGFsIC0gcmVzaWQpIC8gc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwICAgICArPSBsZW47Ci0gICAgICAgICAgICByZXNpZCAtPSBsZW47Ci0gICAgICAgIH0KLSAgICAgICAgRlVOTE9DS0ZJTEUoZnApOwotICAgICAgICByZXR1cm4gKGNvdW50KTsKLSAgICB9Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgewotICAgICAgICB3aGlsZSAocmVzaWQgPiAoc2l6ZV90KShyID0gZnAtPl9yKSkgewotICAgICAgICAgICAgKHZvaWQpbWVtY3B5KCh2b2lkICopcCwgKHZvaWQgKilmcC0+X3AsIChzaXplX3Qpcik7Ci0gICAgICAgICAgICBmcC0+X3AgKz0gcjsKLSAgICAgICAgICAgIC8qIGZwLT5fciA9IDAgLi4uIGRvbmUgaW4gX19zcmVmaWxsICovCi0gICAgICAgICAgICBwICs9IHI7Ci0gICAgICAgICAgICByZXNpZCAtPSByOwotICAgICAgICAgICAgaWYgKF9fc3JlZmlsbChmcCkpIHsKLSAgICAgICAgICAgICAgICAvKiBubyBtb3JlIGlucHV0OiByZXR1cm4gcGFydGlhbCByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICBGVU5MT0NLRklMRShmcCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgodG90YWwgLSByZXNpZCkgLyBzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgICh2b2lkKW1lbWNweSgodm9pZCAqKXAsICh2b2lkICopZnAtPl9wLCByZXNpZCk7Ci0gICAgZnAtPl9yIC09IHJlc2lkOwotICAgIGZwLT5fcCArPSByZXNpZDsKLSAgICBGVU5MT0NLRklMRShmcCk7Ci0gICAgcmV0dXJuIChjb3VudCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZyZW9wZW4uYyBiL2xpYmMvc3RkaW8vZnJlb3Blbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDM4NmU5Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZnJlb3Blbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmcmVvcGVuLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jZGVmaW5lIF9fVVNFX0JTRAotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKgotICogUmUtZGlyZWN0IGFuIGV4aXN0aW5nLCBvcGVuIChwcm9iYWJseSkgZmlsZSB0byBzb21lIG90aGVyIGZpbGUuCi0gKiBBTlNJIGlzIHdyaXR0ZW4gc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBmaWxlIGdldHMgY2xvc2VkIGlmIGF0Ci0gKiBhbGwgcG9zc2libGUsIG5vIG1hdHRlciB3aGF0LgotICovCi1GSUxFICoKLWZyZW9wZW4oY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqbW9kZSwgRklMRSAqZnApCi17Ci0JaW50IGY7Ci0JaW50IGZsYWdzLCBpc29wZW4sIG9mbGFncywgc3ZlcnJubywgd2FudGZkOwotCi0JaWYgKChmbGFncyA9IF9fc2ZsYWdzKG1vZGUsICZvZmxhZ3MpKSA9PSAwKSB7Ci0JCSh2b2lkKSBmY2xvc2UoZnApOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCWlmICghX19zZGlkaW5pdCkKLQkJX19zaW5pdCgpOwotCi0JRkxPQ0tGSUxFKGZwKTsKLQotCS8qCi0JICogVGhlcmUgYXJlIGFjdHVhbGx5IHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uIGJlaW5nIGFibGUgdG8gImZyZW9wZW4iCi0JICogZGVzY3JpcHRvcnMgdGhhdCB3ZXJlbid0IG9yaWdpbmFsbHkgb3Blbi4gIEtlZXAgdGhpcyBmcm9tIGJyZWFraW5nLgotCSAqIFJlbWVtYmVyIHdoZXRoZXIgdGhlIHN0cmVhbSB3YXMgb3BlbiB0byBiZWdpbiB3aXRoLCBhbmQgd2hpY2ggZmlsZQotCSAqIGRlc2NyaXB0b3IgKGlmIGFueSkgd2FzIGFzc29jaWF0ZWQgd2l0aCBpdC4gIElmIGl0IHdhcyBhdHRhY2hlZCB0bwotCSAqIGEgZGVzY3JpcHRvciwgZGVmZXIgY2xvc2luZyBpdDsgZnJlb3BlbigiL2Rldi9zdGRpbiIsICJyIiwgc3RkaW4pCi0JICogc2hvdWxkIHdvcmsuICBUaGlzIGlzIHVubmVjZXNzYXJ5IGlmIGl0IHdhcyBub3QgYSBVbml4IGZpbGUuCi0JICovCi0JaWYgKGZwLT5fZmxhZ3MgPT0gMCkgewotCQlmcC0+X2ZsYWdzID0gX19TRU9GOwkvKiBob2xkIG9uIHRvIGl0ICovCi0JCWlzb3BlbiA9IDA7Ci0JCXdhbnRmZCA9IC0xOwotCX0gZWxzZSB7Ci0JCS8qIGZsdXNoIHRoZSBzdHJlYW07IEFOU0kgZG9lc24ndCByZXF1aXJlIHRoaXMuICovCi0JCWlmIChmcC0+X2ZsYWdzICYgX19TV1IpCi0JCQkodm9pZCkgX19zZmx1c2goZnApOwotCQkvKiBpZiBjbG9zZSBpcyBOVUxMLCBjbG9zaW5nIGlzIGEgbm8tb3AsIGhlbmNlIHBvaW50bGVzcyAqLwotCQlpc29wZW4gPSBmcC0+X2Nsb3NlICE9IE5VTEw7Ci0JCWlmICgod2FudGZkID0gZnAtPl9maWxlKSA8IDAgJiYgaXNvcGVuKSB7Ci0JCQkodm9pZCkgKCpmcC0+X2Nsb3NlKShmcC0+X2Nvb2tpZSk7Ci0JCQlpc29wZW4gPSAwOwotCQl9Ci0JfQotCi0JLyogR2V0IGEgbmV3IGRlc2NyaXB0b3IgdG8gcmVmZXIgdG8gdGhlIG5ldyBmaWxlLiAqLwotCWYgPSBvcGVuKGZpbGUsIG9mbGFncywgREVGRklMRU1PREUpOwotCWlmIChmIDwgMCAmJiBpc29wZW4pIHsKLQkJLyogSWYgb3V0IG9mIGZkJ3MgY2xvc2UgdGhlIG9sZCBvbmUgYW5kIHRyeSBhZ2Fpbi4gKi8KLQkJaWYgKGVycm5vID09IEVORklMRSB8fCBlcnJubyA9PSBFTUZJTEUpIHsKLQkJCSh2b2lkKSAoKmZwLT5fY2xvc2UpKGZwLT5fY29va2llKTsKLQkJCWlzb3BlbiA9IDA7Ci0JCQlmID0gb3BlbihmaWxlLCBvZmxhZ3MsIERFRkZJTEVNT0RFKTsKLQkJfQotCX0KLQlzdmVycm5vID0gZXJybm87Ci0KLQkvKgotCSAqIEZpbmlzaCBjbG9zaW5nIGZwLiAgRXZlbiBpZiB0aGUgb3BlbiBzdWNjZWVkZWQgYWJvdmUsIHdlIGNhbm5vdAotCSAqIGtlZXAgZnAtPl9iYXNlOiBpdCBtYXkgYmUgdGhlIHdyb25nIHNpemUuICBUaGlzIGxvc2VzIHRoZSBlZmZlY3QKLQkgKiBvZiBhbnkgc2V0YnVmZmVyIGNhbGxzLCBidXQgc3RkaW8gaGFzIGFsd2F5cyBkb25lIHRoaXMgYmVmb3JlLgotCSAqLwotCWlmIChpc29wZW4gJiYgZiAhPSB3YW50ZmQpCi0JCSh2b2lkKSAoKmZwLT5fY2xvc2UpKGZwLT5fY29va2llKTsKLQlpZiAoZnAtPl9mbGFncyAmIF9fU01CRikKLQkJZnJlZSgoY2hhciAqKWZwLT5fYmYuX2Jhc2UpOwotCWZwLT5fdyA9IDA7Ci0JZnAtPl9yID0gMDsKLQlmcC0+X3AgPSBOVUxMOwotCWZwLT5fYmYuX2Jhc2UgPSBOVUxMOwotCWZwLT5fYmYuX3NpemUgPSAwOwotCWZwLT5fbGJmc2l6ZSA9IDA7Ci0JaWYgKEhBU1VCKGZwKSkKLQkJRlJFRVVCKGZwKTsKLQlfVUIoZnApLl9zaXplID0gMDsKLQlXQ0lPX0ZSRUUoZnApOwotCWlmIChIQVNMQihmcCkpCi0JCUZSRUVMQihmcCk7Ci0JZnAtPl9sYi5fc2l6ZSA9IDA7Ci0KLQlpZiAoZiA8IDApIHsJCQkvKiBkaWQgbm90IGdldCBpdCBhZnRlciBhbGwgKi8KLQkJZnAtPl9mbGFncyA9IDA7CQkvKiBzZXQgaXQgZnJlZSAqLwotCQlGVU5MT0NLRklMRShmcCk7Ci0JCWVycm5vID0gc3ZlcnJubzsJLyogcmVzdG9yZSBpbiBjYXNlIF9jbG9zZSBjbG9iYmVyZWQgKi8KLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQkvKgotCSAqIElmIHJlb3BlbmluZyBzb21ldGhpbmcgdGhhdCB3YXMgb3BlbiBiZWZvcmUgb24gYSByZWFsIGZpbGUsIHRyeQotCSAqIHRvIG1haW50YWluIHRoZSBkZXNjcmlwdG9yLiAgVmFyaW91cyBDIGxpYnJhcnkgcm91dGluZXMgKHBlcnJvcikKLQkgKiBhc3N1bWUgc3RkZXJyIGlzIGFsd2F5cyBmZCBTVERFUlJfRklMRU5PLCBldmVuIGlmIGJlaW5nIGZyZW9wZW4nZC4KLQkgKi8KLQlpZiAod2FudGZkID49IDAgJiYgZiAhPSB3YW50ZmQpIHsKLQkJaWYgKGR1cDIoZiwgd2FudGZkKSA+PSAwKSB7Ci0JCQkodm9pZCkgY2xvc2UoZik7Ci0JCQlmID0gd2FudGZkOwotCQl9Ci0JfQotCi0JZnAtPl9mbGFncyA9IGZsYWdzOwotCWZwLT5fZmlsZSA9IGY7Ci0JZnAtPl9jb29raWUgPSBmcDsKLQlmcC0+X3JlYWQgPSBfX3NyZWFkOwotCWZwLT5fd3JpdGUgPSBfX3N3cml0ZTsKLQlmcC0+X3NlZWsgPSBfX3NzZWVrOwotCWZwLT5fY2xvc2UgPSBfX3NjbG9zZTsKLQotCS8qCi0JICogV2hlbiBvcGVuaW5nIGluIGFwcGVuZCBtb2RlLCBldmVuIHRob3VnaCB3ZSB1c2UgT19BUFBFTkQsCi0JICogd2UgbmVlZCB0byBzZWVrIHRvIHRoZSBlbmQgc28gdGhhdCBmdGVsbCgpIGdldHMgdGhlIHJpZ2h0Ci0JICogYW5zd2VyLiAgSWYgdGhlIHVzZXIgdGhlbiBhbHRlcnMgdGhlIHNlZWsgcG9pbnRlciwgb3IKLQkgKiB0aGUgZmlsZSBleHRlbmRzLCB0aGlzIHdpbGwgZmFpbCwgYnV0IHRoZXJlIGlzIG5vdCBtdWNoCi0JICogd2UgY2FuIGRvIGFib3V0IHRoaXMuICAoV2UgY291bGQgc2V0IF9fU0FQUCBhbmQgY2hlY2sgaW4KLQkgKiBmc2VlayBhbmQgZnRlbGwuKQotCSAqLwotCWlmIChvZmxhZ3MgJiBPX0FQUEVORCkKLQkJKHZvaWQpIF9fc3NlZWsoKHZvaWQgKilmcCwgKGZwb3NfdCkwLCBTRUVLX0VORCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAoZnApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mc2NhbmYuYyBiL2xpYmMvc3RkaW8vZnNjYW5mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmM2ZjZWIuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mc2NhbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmc2NhbmYuYyx2IDEuOSAyMDA1LzEwLzEwIDE3OjM3OjQ0IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1pbnQKLWZzY2FuZihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JaW50IHJldDsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JcmV0ID0gdmZzY2FuZihmcCwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZzZWVrLmMgYi9saWJjL3N0ZGlvL2ZzZWVrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Njk3ZjUuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mc2Vlay5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmc2Vlay5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotI2RlZmluZQlQT1NfRVJSCSgtKGZwb3NfdCkxKQotCi0vKgotICogU2VlayB0aGUgZ2l2ZW4gZmlsZSB0byB0aGUgZ2l2ZW4gb2Zmc2V0LgotICogYFdoZW5jZScgbXVzdCBiZSBvbmUgb2YgdGhlIHRocmVlIFNFRUtfKiBtYWNyb3MuCi0gKi8KLWludAotZnNlZWtvKEZJTEUgKmZwLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpCi17Ci0JZnBvc190ICgqc2Vla2ZuKSh2b2lkICosIGZwb3NfdCwgaW50KTsKLQlmcG9zX3QgdGFyZ2V0LCBjdXJvZmY7Ci0Jc2l6ZV90IG47Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0JaW50IGhhdmVwb3M7Ci0KLQkvKiBtYWtlIHN1cmUgc3RkaW8gaXMgc2V0IHVwICovCi0JaWYgKCFfX3NkaWRpbml0KQotCQlfX3Npbml0KCk7Ci0KLQkvKgotCSAqIEhhdmUgdG8gYmUgYWJsZSB0byBzZWVrLgotCSAqLwotCWlmICgoc2Vla2ZuID0gZnAtPl9zZWVrKSA9PSBOVUxMKSB7Ci0JCWVycm5vID0gRVNQSVBFOwkJCS8qIGhpc3RvcmljIHByYWN0aWNlICovCi0JCXJldHVybiAoRU9GKTsKLQl9Ci0KLQkvKgotCSAqIENoYW5nZSBhbnkgU0VFS19DVVIgdG8gU0VFS19TRVQsIGFuZCBjaGVjayBgd2hlbmNlJyBhcmd1bWVudC4KLQkgKiBBZnRlciB0aGlzLCB3aGVuY2UgaXMgZWl0aGVyIFNFRUtfU0VUIG9yIFNFRUtfRU5ELgotCSAqLwotCUZMT0NLRklMRShmcCk7Ci0Jc3dpdGNoICh3aGVuY2UpIHsKLQotCWNhc2UgU0VFS19DVVI6Ci0JCS8qCi0JCSAqIEluIG9yZGVyIHRvIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc3RyZWFtIG9mZnNldCwKLQkJICogd2UgaGF2ZSB0byBmaXJzdCBmaW5kIHRoZSBjdXJyZW50IHN0cmVhbSBvZmZzZXQgYSBsYQotCQkgKiBmdGVsbCAoc2VlIGZ0ZWxsIGZvciBkZXRhaWxzKS4KLQkJICovCi0JCV9fc2ZsdXNoKGZwKTsJLyogbWF5IGFkanVzdCBzZWVrIG9mZnNldCBvbiBhcHBlbmQgc3RyZWFtICovCi0JCWlmIChmcC0+X2ZsYWdzICYgX19TT0ZGKQotCQkJY3Vyb2ZmID0gZnAtPl9vZmZzZXQ7Ci0JCWVsc2UgewotCQkJY3Vyb2ZmID0gKCpzZWVrZm4pKGZwLT5fY29va2llLCAoZnBvc190KTAsIFNFRUtfQ1VSKTsKLQkJCWlmIChjdXJvZmYgPT0gKGZwb3NfdCktMSkgewotCQkJCUZVTkxPQ0tGSUxFKGZwKTsKLQkJCQlyZXR1cm4gKEVPRik7Ci0JCQl9Ci0JCX0KLQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NSRCkgewotCQkJY3Vyb2ZmIC09IGZwLT5fcjsKLQkJCWlmIChIQVNVQihmcCkpCi0JCQkJY3Vyb2ZmIC09IGZwLT5fdXI7Ci0JCX0gZWxzZSBpZiAoZnAtPl9mbGFncyAmIF9fU1dSICYmIGZwLT5fcCAhPSBOVUxMKQotCQkJY3Vyb2ZmICs9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7Ci0KLQkJb2Zmc2V0ICs9IGN1cm9mZjsKLQkJd2hlbmNlID0gU0VFS19TRVQ7Ci0JCWhhdmVwb3MgPSAxOwotCQlicmVhazsKLQotCWNhc2UgU0VFS19TRVQ6Ci0JY2FzZSBTRUVLX0VORDoKLQkJY3Vyb2ZmID0gMDsJCS8qIFhYWCBqdXN0IHRvIGtlZXAgZ2NjIHF1aWV0ICovCi0JCWhhdmVwb3MgPSAwOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCUZVTkxPQ0tGSUxFKGZwKTsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0KLQkvKgotCSAqIENhbiBvbmx5IG9wdGltaXNlIGlmOgotCSAqCXJlYWRpbmcgKGFuZCBub3QgcmVhZGluZy1hbmQtd3JpdGluZyk7Ci0JICoJbm90IHVuYnVmZmVyZWQ7IGFuZAotCSAqCXRoaXMgaXMgYSBgcmVndWxhcicgVW5peCBmaWxlIChhbmQgaGVuY2Ugc2Vla2ZuPT1fX3NzZWVrKS4KLQkgKiBXZSBtdXN0IGNoZWNrIF9fTkJGIGZpcnN0LCBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgX19OQkYKLQkgKiBhbmQgX19TT1BUIGJvdGggc2V0LgotCSAqLwotCWlmIChmcC0+X2JmLl9iYXNlID09IE5VTEwpCi0JCV9fc21ha2VidWYoZnApOwotCWlmIChmcC0+X2ZsYWdzICYgKF9fU1dSIHwgX19TUlcgfCBfX1NOQkYgfCBfX1NOUFQpKQotCQlnb3RvIGR1bWI7Ci0JaWYgKChmcC0+X2ZsYWdzICYgX19TT1BUKSA9PSAwKSB7Ci0JCWlmIChzZWVrZm4gIT0gX19zc2VlayB8fAotCQkgICAgZnAtPl9maWxlIDwgMCB8fCBmc3RhdChmcC0+X2ZpbGUsICZzdCkgfHwKLQkJICAgIChzdC5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHKSB7Ci0JCQlmcC0+X2ZsYWdzIHw9IF9fU05QVDsKLQkJCWdvdG8gZHVtYjsKLQkJfQotCQlmcC0+X2Jsa3NpemUgPSBzdC5zdF9ibGtzaXplOwotCQlmcC0+X2ZsYWdzIHw9IF9fU09QVDsKLQl9Ci0KLQkvKgotCSAqIFdlIGFyZSByZWFkaW5nOyB3ZSBjYW4gdHJ5IHRvIG9wdGltaXNlLgotCSAqIEZpZ3VyZSBvdXQgd2hlcmUgd2UgYXJlIGdvaW5nIGFuZCB3aGVyZSB3ZSBhcmUgbm93LgotCSAqLwotCWlmICh3aGVuY2UgPT0gU0VFS19TRVQpCi0JCXRhcmdldCA9IG9mZnNldDsKLQllbHNlIHsKLQkJaWYgKGZzdGF0KGZwLT5fZmlsZSwgJnN0KSkKLQkJCWdvdG8gZHVtYjsKLQkJdGFyZ2V0ID0gc3Quc3Rfc2l6ZSArIG9mZnNldDsKLQl9Ci0KLQlpZiAoIWhhdmVwb3MpIHsKLQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NPRkYpCi0JCQljdXJvZmYgPSBmcC0+X29mZnNldDsKLQkJZWxzZSB7Ci0JCQljdXJvZmYgPSAoKnNlZWtmbikoZnAtPl9jb29raWUsIChmcG9zX3QpMCwgU0VFS19DVVIpOwotCQkJaWYgKGN1cm9mZiA9PSBQT1NfRVJSKQotCQkJCWdvdG8gZHVtYjsKLQkJfQotCQljdXJvZmYgLT0gZnAtPl9yOwotCQlpZiAoSEFTVUIoZnApKQotCQkJY3Vyb2ZmIC09IGZwLT5fdXI7Ci0JfQotCi0JLyoKLQkgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGlucHV0IGJ1ZmZlciAocHJldGVuZGluZwotCSAqIHRoYXQgYW55IHVuZ2V0YygpIGlucHV0IGhhcyBiZWVuIGRpc2NhcmRlZCkuICBBZGp1c3QgY3VycmVudAotCSAqIG9mZnNldCBiYWNrd2FyZHMgYnkgdGhpcyBjb3VudCBzbyB0aGF0IGl0IHJlcHJlc2VudHMgdGhlCi0JICogZmlsZSBvZmZzZXQgZm9yIHRoZSBmaXJzdCBieXRlIGluIHRoZSBjdXJyZW50IGlucHV0IGJ1ZmZlci4KLQkgKi8KLQlpZiAoSEFTVUIoZnApKSB7Ci0JCWN1cm9mZiArPSBmcC0+X3I7CS8qIGtpbGwgb2ZmIHVuZ2V0YyAqLwotCQluID0gZnAtPl91cCAtIGZwLT5fYmYuX2Jhc2U7Ci0JCWN1cm9mZiAtPSBuOwotCQluICs9IGZwLT5fdXI7Ci0JfSBlbHNlIHsKLQkJbiA9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7Ci0JCWN1cm9mZiAtPSBuOwotCQluICs9IGZwLT5fcjsKLQl9Ci0KLQkvKgotCSAqIElmIHRoZSB0YXJnZXQgb2Zmc2V0IGlzIHdpdGhpbiB0aGUgY3VycmVudCBidWZmZXIsCi0JICogc2ltcGx5IGFkanVzdCB0aGUgcG9pbnRlcnMsIGNsZWFyIEVPRiwgdW5kbyB1bmdldGMoKSwKLQkgKiBhbmQgcmV0dXJuLiAgKElmIHRoZSBidWZmZXIgd2FzIG1vZGlmaWVkLCB3ZSBoYXZlIHRvCi0JICogc2tpcCB0aGlzOyBzZWUgZmdldGxuLmMuKQotCSAqLwotCWlmICgoZnAtPl9mbGFncyAmIF9fU01PRCkgPT0gMCAmJgotCSAgICB0YXJnZXQgPj0gY3Vyb2ZmICYmIHRhcmdldCA8IChmcG9zX3QpKGN1cm9mZiArIG4pKSB7Ci0JCWludCBvID0gdGFyZ2V0IC0gY3Vyb2ZmOwotCi0JCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2UgKyBvOwotCQlmcC0+X3IgPSBuIC0gbzsKLQkJaWYgKEhBU1VCKGZwKSkKLQkJCUZSRUVVQihmcCk7Ci0JCWZwLT5fZmxhZ3MgJj0gfl9fU0VPRjsKLQkJRlVOTE9DS0ZJTEUoZnApOwotCQlyZXR1cm4gKDApOwotCX0KLQotCS8qCi0JICogVGhlIHBsYWNlIHdlIHdhbnQgdG8gZ2V0IHRvIGlzIG5vdCB3aXRoaW4gdGhlIGN1cnJlbnQgYnVmZmVyLAotCSAqIGJ1dCB3ZSBjYW4gc3RpbGwgYmUga2luZCB0byB0aGUga2VybmVsIGNvcHlvdXQgbWVjaGFuaXNtLgotCSAqIEJ5IGFsaWduaW5nIHRoZSBmaWxlIG9mZnNldCB0byBhIGJsb2NrIGJvdW5kYXJ5LCB3ZSBjYW4gbGV0Ci0JICogdGhlIGtlcm5lbCB1c2UgdGhlIFZNIGhhcmR3YXJlIHRvIG1hcCBwYWdlcyBpbnN0ZWFkIG9mCi0JICogY29weWluZyBieXRlcyBsYWJvcmlvdXNseS4gIFVzaW5nIGEgYmxvY2sgYm91bmRhcnkgYWxzbwotCSAqIGVuc3VyZXMgdGhhdCB3ZSBvbmx5IHJlYWQgb25lIGJsb2NrLCByYXRoZXIgdGhhbiB0d28uCi0JICovCi0JY3Vyb2ZmID0gdGFyZ2V0ICYgfihmcC0+X2Jsa3NpemUgLSAxKTsKLQlpZiAoKCpzZWVrZm4pKGZwLT5fY29va2llLCBjdXJvZmYsIFNFRUtfU0VUKSA9PSBQT1NfRVJSKQotCQlnb3RvIGR1bWI7Ci0JZnAtPl9yID0gMDsKLQlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOwotCWlmIChIQVNVQihmcCkpCi0JCUZSRUVVQihmcCk7Ci0JZnAtPl9mbGFncyAmPSB+X19TRU9GOwotCW4gPSB0YXJnZXQgLSBjdXJvZmY7Ci0JaWYgKG4pIHsKLQkJaWYgKF9fc3JlZmlsbChmcCkgfHwgKHNpemVfdClmcC0+X3IgPCBuKQotCQkJZ290byBkdW1iOwotCQlmcC0+X3AgKz0gbjsKLQkJZnAtPl9yIC09IG47Ci0JfQotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKDApOwotCi0JLyoKLQkgKiBXZSBnZXQgaGVyZSBpZiB3ZSBjYW5ub3Qgb3B0aW1pc2UgdGhlIHNlZWsgLi4uIGp1c3QKLQkgKiBkbyBpdC4gIEFsbG93IHRoZSBzZWVrIGZ1bmN0aW9uIHRvIGNoYW5nZSBmcC0+X2JmLl9iYXNlLgotCSAqLwotZHVtYjoKLQlpZiAoX19zZmx1c2goZnApIHx8Ci0JICAgICgqc2Vla2ZuKShmcC0+X2Nvb2tpZSwgKGZwb3NfdClvZmZzZXQsIHdoZW5jZSkgPT0gUE9TX0VSUikgewotCQlGVU5MT0NLRklMRShmcCk7Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0JLyogc3VjY2VzczogY2xlYXIgRU9GIGluZGljYXRvciBhbmQgZGlzY2FyZCB1bmdldGMoKSBkYXRhICovCi0JaWYgKEhBU1VCKGZwKSkKLQkJRlJFRVVCKGZwKTsKLQlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOwotCWZwLT5fciA9IDA7Ci0JLyogZnAtPl93ID0gMDsgKi8JLyogdW5uZWNlc3NhcnkgKEkgdGhpbmsuLi4pICovCi0JZnAtPl9mbGFncyAmPSB+X19TRU9GOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogZnNlZWsoKSdzIG9mZnNldCBpcyBhIGxvbmcgYW5kIHNpemVvZihvZmZfdCkgIT0gc2l6ZW9mKGxvbmcpIG9uIGFsbCBhcmNoZXMKLSAqLwotI2lmIGRlZmluZWQoX19hbHBoYV9fKSAmJiBkZWZpbmVkKF9faW5kcl9yZWZlcmVuY2UpCi1fX2luZHJfcmVmZXJlbmNlKGZzZWVrbywgZnNlZWspOwotI2Vsc2UKLWludAotZnNlZWsoRklMRSAqZnAsIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKQotewotCW9mZl90IG9mZiA9IG9mZnNldDsKLQotCXJldHVybihmc2Vla28oZnAsIG9mZiwgd2hlbmNlKSk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnRlbGwuYyBiL2xpYmMvc3RkaW8vZnRlbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY4NTBlZS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2Z0ZWxsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZ0ZWxsLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLS8qCi0gKiBmdGVsbG86IHJldHVybiBjdXJyZW50IG9mZnNldC4KLSAqLwotb2ZmX3QKLWZ0ZWxsbyhGSUxFICpmcCkKLXsKLQlmcG9zX3QgcG9zOwotCi0JaWYgKGZwLT5fc2VlayA9PSBOVUxMKSB7Ci0JCWVycm5vID0gRVNQSVBFOwkJCS8qIGhpc3RvcmljIHByYWN0aWNlICovCi0JCXBvcyA9IC0xOwotICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogRmluZCBvZmZzZXQgb2YgdW5kZXJseWluZyBJL08gb2JqZWN0LCB0aGVuCi0JICogYWRqdXN0IGZvciBidWZmZXJlZCBieXRlcy4KLQkgKi8KLSAgICAgICAgRkxPQ0tGSUxFKGZwKTsKLQlfX3NmbHVzaChmcCk7CQkvKiBtYXkgYWRqdXN0IHNlZWsgb2Zmc2V0IG9uIGFwcGVuZCBzdHJlYW0gKi8KLQlpZiAoZnAtPl9mbGFncyAmIF9fU09GRikKLQkJcG9zID0gZnAtPl9vZmZzZXQ7Ci0JZWxzZSB7Ci0JCXBvcyA9ICgqZnAtPl9zZWVrKShmcC0+X2Nvb2tpZSwgKGZwb3NfdCkwLCBTRUVLX0NVUik7Ci0JCWlmIChwb3MgPT0gLTEpCi0JCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGZwLT5fZmxhZ3MgJiBfX1NSRCkgewotCQkvKgotCQkgKiBSZWFkaW5nLiAgQW55IHVucmVhZCBjaGFyYWN0ZXJzIChpbmNsdWRpbmcKLQkJICogdGhvc2UgZnJvbSB1bmdldGMpIGNhdXNlIHRoZSBwb3NpdGlvbiB0byBiZQotCQkgKiBzbWFsbGVyIHRoYW4gdGhhdCBpbiB0aGUgdW5kZXJseWluZyBvYmplY3QuCi0JCSAqLwotCQlwb3MgLT0gZnAtPl9yOwotCQlpZiAoSEFTVUIoZnApKQotCQkJcG9zIC09IGZwLT5fdXI7Ci0JfSBlbHNlIGlmIChmcC0+X2ZsYWdzICYgX19TV1IgJiYgZnAtPl9wICE9IE5VTEwpIHsKLQkJLyoKLQkJICogV3JpdGluZy4gIEFueSBidWZmZXJlZCBjaGFyYWN0ZXJzIGNhdXNlIHRoZQotCQkgKiBwb3NpdGlvbiB0byBiZSBncmVhdGVyIHRoYW4gdGhhdCBpbiB0aGUKLQkJICogdW5kZXJseWluZyBvYmplY3QuCi0JCSAqLwotCQlwb3MgKz0gZnAtPl9wIC0gZnAtPl9iZi5fYmFzZTsKLQl9Ci1vdXQ6CUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHBvcyk7Ci19Ci0KLS8qCi0gKiBmdGVsbCgpIHJldHVybnMgYSBsb25nIGFuZCBzaXplb2Yob2ZmX3QpICE9IHNpemVvZihsb25nKSBvbiBhbGwgYXJjaGVzCi0gKi8KLSNpZiBkZWZpbmVkKF9fYWxwaGFfXykgJiYgZGVmaW5lZChfX2luZHJfcmVmZXJlbmNlKQotX19pbmRyX3JlZmVyZW5jZShmdGVsbG8sIGZ0ZWxsKTsKLSNlbHNlCi1sb25nCi1mdGVsbChGSUxFICpmcCkKLXsKLQlsb25nIHBvczsKLQotCXBvcyA9IChsb25nKWZ0ZWxsbyhmcCk7Ci0JcmV0dXJuKHBvcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnZ3cml0ZS5jIGIvbGliYy9zdGRpby9mdndyaXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZDA2MDQuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mdndyaXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZ2d3JpdGUuYyx2IDEuMTQgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0jaW5jbHVkZSAiZnZ3cml0ZS5oIgotCi0vKgotICogV3JpdGUgc29tZSBtZW1vcnkgcmVnaW9ucy4gIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIEVPRiBvbiBlcnJvci4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgbGFyZ2UgYW5kIHVuc2lnaHRseSwgYnV0IG1vc3Qgb2YgdGhlIHVnbGluZXNzIGR1ZQotICogdG8gdGhlIHRocmVlIGRpZmZlcmVudCBraW5kcyBvZiBvdXRwdXQgYnVmZmVyaW5nIGlzIGhhbmRsZWQgaGVyZS4KLSAqLwotX19MSUJDX0hJRERFTl9fIGludAotX19zZnZ3cml0ZShGSUxFICpmcCwgc3RydWN0IF9fc3VpbyAqdWlvKQotewotCXNpemVfdCBsZW47Ci0JY29uc3QgY2hhciAqcDsKLQlzdHJ1Y3QgX19zaW92ICppb3Y7Ci0JaW50IHcsIHM7Ci0JY2hhciAqbmw7Ci0JaW50IG5sa25vd24sIG5sZGlzdDsKLQotCWlmICgobGVuID0gdWlvLT51aW9fcmVzaWQpID09IDApCi0JCXJldHVybiAoMCk7Ci0JLyogbWFrZSBzdXJlIHdlIGNhbiB3cml0ZSAqLwotCWlmIChjYW50d3JpdGUoZnApKSB7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0KLSNkZWZpbmUJTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCi0jZGVmaW5lCUNPUFkobikJICAodm9pZCltZW1jcHkoKHZvaWQgKilmcC0+X3AsICh2b2lkICopcCwgKHNpemVfdCkobikpCi0KLQlpb3YgPSB1aW8tPnVpb19pb3Y7Ci0JcCA9IGlvdi0+aW92X2Jhc2U7Ci0JbGVuID0gaW92LT5pb3ZfbGVuOwotCWlvdisrOwotI2RlZmluZSBHRVRJT1YoZXh0cmFfd29yaykgXAotCXdoaWxlIChsZW4gPT0gMCkgeyBcCi0JCWV4dHJhX3dvcms7IFwKLQkJcCA9IGlvdi0+aW92X2Jhc2U7IFwKLQkJbGVuID0gaW92LT5pb3ZfbGVuOyBcCi0JCWlvdisrOyBcCi0JfQotCWlmIChmcC0+X2ZsYWdzICYgX19TTkJGKSB7Ci0JCS8qCi0JCSAqIFVuYnVmZmVyZWQ6IHdyaXRlIHVwIHRvIEJVRlNJWiBieXRlcyBhdCBhIHRpbWUuCi0JCSAqLwotCQlkbyB7Ci0JCQlHRVRJT1YoOyk7Ci0jaWYgMSAgLyogQklPTklDOiBkb24ndCBsaW1pdCB0byAxS0Igd3JpdGVzICovCi0JCQl3ID0gKCpmcC0+X3dyaXRlKShmcC0+X2Nvb2tpZSwgcCwgbGVuKTsKLSNlbHNlCi0JCQl3ID0gKCpmcC0+X3dyaXRlKShmcC0+X2Nvb2tpZSwgcCwgTUlOKGxlbiwgQlVGU0laMikpOwotI2VuZGlmCi0JCQlpZiAodyA8PSAwKQotCQkJCWdvdG8gZXJyOwotCQkJcCArPSB3OwotCQkJbGVuIC09IHc7Ci0JCX0gd2hpbGUgKCh1aW8tPnVpb19yZXNpZCAtPSB3KSAhPSAwKTsKLQl9IGVsc2UgaWYgKChmcC0+X2ZsYWdzICYgX19TTEJGKSA9PSAwKSB7Ci0JCS8qCi0JCSAqIEZ1bGx5IGJ1ZmZlcmVkOiBmaWxsIHBhcnRpYWxseSBmdWxsIGJ1ZmZlciwgaWYgYW55LAotCQkgKiBhbmQgdGhlbiBmbHVzaC4gIElmIHRoZXJlIGlzIG5vIHBhcnRpYWwgYnVmZmVyLCB3cml0ZQotCQkgKiBvbmUgX2JmLl9zaXplIGJ5dGUgY2h1bmsgZGlyZWN0bHkgKHdpdGhvdXQgY29weWluZykuCi0JCSAqCi0JCSAqIFN0cmluZyBvdXRwdXQgaXMgYSBzcGVjaWFsIGNhc2U6IHdyaXRlIGFzIG1hbnkgYnl0ZXMKLQkJICogYXMgZml0LCBidXQgcHJldGVuZCB3ZSB3cm90ZSBldmVyeXRoaW5nLiAgVGhpcyBtYWtlcwotCQkgKiBzbnByaW50ZigpIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCwgcmF0aGVyCi0JCSAqIHRoYW4gdGhlIG51bWJlciB1c2VkLCBhbmQgYXZvaWRzIGl0cyB3cml0ZSBmdW5jdGlvbgotCQkgKiAoc28gdGhhdCB0aGUgd3JpdGUgZnVuY3Rpb24gY2FuIGJlIGludmFsaWQpLgotCQkgKi8KLQkJZG8gewotCQkJR0VUSU9WKDspOwotCQkJaWYgKChmcC0+X2ZsYWdzICYgKF9fU0FMQyB8IF9fU1NUUikpID09Ci0JCQkgICAgKF9fU0FMQyB8IF9fU1NUUikgJiYgZnAtPl93IDwgKGludClsZW4pIHsKLQkJCQlzaXplX3QgYmxlbiA9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7Ci0JCQkJdW5zaWduZWQgY2hhciAqX2Jhc2U7Ci0JCQkJaW50IF9zaXplOwotCi0JCQkJLyogQWxsb2NhdGUgc3BhY2UgZXhwb25lbnRpYWxseS4gKi8KLQkJCQlfc2l6ZSA9IGZwLT5fYmYuX3NpemU7Ci0JCQkJZG8gewotCQkJCQlfc2l6ZSA9IChfc2l6ZSA8PCAxKSArIDE7Ci0JCQkJfSB3aGlsZSAoX3NpemUgPCAoaW50KShibGVuICsgbGVuKSk7Ci0JCQkJX2Jhc2UgPSByZWFsbG9jKGZwLT5fYmYuX2Jhc2UsIF9zaXplICsgMSk7Ci0JCQkJaWYgKF9iYXNlID09IE5VTEwpCi0JCQkJCWdvdG8gZXJyOwotCQkJCWZwLT5fdyArPSBfc2l6ZSAtIGZwLT5fYmYuX3NpemU7Ci0JCQkJZnAtPl9iZi5fYmFzZSA9IF9iYXNlOwotCQkJCWZwLT5fYmYuX3NpemUgPSBfc2l6ZTsKLQkJCQlmcC0+X3AgPSBfYmFzZSArIGJsZW47Ci0JCQl9Ci0JCQl3ID0gZnAtPl93OwotCQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NTVFIpIHsKLQkJCQlpZiAoKGludClsZW4gPCB3KQotCQkJCQl3ID0gbGVuOwotCQkJCUNPUFkodyk7CS8qIGNvcHkgTUlOKGZwLT5fdyxsZW4pLCAqLwotCQkJCWZwLT5fdyAtPSB3OwotCQkJCWZwLT5fcCArPSB3OwotCQkJCXcgPSBsZW47CS8qIGJ1dCBwcmV0ZW5kIGNvcGllZCBhbGwgKi8KLQkJCX0gZWxzZSBpZiAoZnAtPl9wID4gZnAtPl9iZi5fYmFzZSAmJiAoaW50KWxlbiA+IHcpIHsKLQkJCQkvKiBmaWxsIGFuZCBmbHVzaCAqLwotCQkJCUNPUFkodyk7Ci0JCQkJLyogZnAtPl93IC09IHc7ICovIC8qIHVubmVlZGVkICovCi0JCQkJZnAtPl9wICs9IHc7Ci0JCQkJaWYgKGZmbHVzaChmcCkpCi0JCQkJCWdvdG8gZXJyOwotCQkJfSBlbHNlIGlmICgoaW50KWxlbiA+PSAodyA9IGZwLT5fYmYuX3NpemUpKSB7Ci0JCQkJLyogd3JpdGUgZGlyZWN0bHkgKi8KLQkJCQl3ID0gKCpmcC0+X3dyaXRlKShmcC0+X2Nvb2tpZSwgcCwgdyk7Ci0JCQkJaWYgKHcgPD0gMCkKLQkJCQkJZ290byBlcnI7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGZpbGwgYW5kIGRvbmUgKi8KLQkJCQl3ID0gbGVuOwotCQkJCUNPUFkodyk7Ci0JCQkJZnAtPl93IC09IHc7Ci0JCQkJZnAtPl9wICs9IHc7Ci0JCQl9Ci0JCQlwICs9IHc7Ci0JCQlsZW4gLT0gdzsKLQkJfSB3aGlsZSAoKHVpby0+dWlvX3Jlc2lkIC09IHcpICE9IDApOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIExpbmUgYnVmZmVyZWQ6IGxpa2UgZnVsbHkgYnVmZmVyZWQsIGJ1dCB3ZQotCQkgKiBtdXN0IGNoZWNrIGZvciBuZXdsaW5lcy4gIENvbXB1dGUgdGhlIGRpc3RhbmNlCi0JCSAqIHRvIHRoZSBmaXJzdCBuZXdsaW5lIChpbmNsdWRpbmcgdGhlIG5ld2xpbmUpLAotCQkgKiBvciBgaW5maW5pdHknIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gcHJldGVuZAotCQkgKiB0aGF0IHRoZSBhbW91bnQgdG8gd3JpdGUgaXMgTUlOKGxlbixubGRpc3QpLgotCQkgKi8KLQkJbmxrbm93biA9IDA7Ci0JCW5sZGlzdCA9IDA7CS8qIFhYWCBqdXN0IHRvIGtlZXAgZ2NjIGhhcHB5ICovCi0JCWRvIHsKLQkJCUdFVElPVihubGtub3duID0gMCk7Ci0JCQlpZiAoIW5sa25vd24pIHsKLQkJCQlubCA9IG1lbWNocigodm9pZCAqKXAsICdcbicsIGxlbik7Ci0JCQkJbmxkaXN0ID0gbmwgPyBubCArIDEgLSBwIDogKGludClsZW4gKyAxOwotCQkJCW5sa25vd24gPSAxOwotCQkJfQotCQkJcyA9IE1JTigoaW50KWxlbiwgbmxkaXN0KTsKLQkJCXcgPSBmcC0+X3cgKyBmcC0+X2JmLl9zaXplOwotCQkJaWYgKGZwLT5fcCA+IGZwLT5fYmYuX2Jhc2UgJiYgcyA+IHcpIHsKLQkJCQlDT1BZKHcpOwotCQkJCS8qIGZwLT5fdyAtPSB3OyAqLwotCQkJCWZwLT5fcCArPSB3OwotCQkJCWlmIChmZmx1c2goZnApKQotCQkJCQlnb3RvIGVycjsKLQkJCX0gZWxzZSBpZiAocyA+PSAodyA9IGZwLT5fYmYuX3NpemUpKSB7Ci0JCQkJdyA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIHAsIHcpOwotCQkJCWlmICh3IDw9IDApCi0JCQkJCWdvdG8gZXJyOwotCQkJfSBlbHNlIHsKLQkJCQl3ID0gczsKLQkJCQlDT1BZKHcpOwotCQkJCWZwLT5fdyAtPSB3OwotCQkJCWZwLT5fcCArPSB3OwotCQkJfQotCQkJaWYgKChubGRpc3QgLT0gdykgPT0gMCkgewotCQkJCS8qIGNvcGllZCB0aGUgbmV3bGluZTogZmx1c2ggYW5kIGZvcmdldCAqLwotCQkJCWlmIChmZmx1c2goZnApKQotCQkJCQlnb3RvIGVycjsKLQkJCQlubGtub3duID0gMDsKLQkJCX0KLQkJCXAgKz0gdzsKLQkJCWxlbiAtPSB3OwotCQl9IHdoaWxlICgodWlvLT51aW9fcmVzaWQgLT0gdykgIT0gMCk7Ci0JfQotCXJldHVybiAoMCk7Ci0KLWVycjoKLQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKLQlyZXR1cm4gKEVPRik7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2Z2d3JpdGUuaCBiL2xpYmMvc3RkaW8vZnZ3cml0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmY2NWRlLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZnZ3cml0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZ2d3JpdGUuaCx2IDEuNSAyMDAzLzA2LzAyIDIwOjE4OjM3IG1pbGxlcnQgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogSS9PIGRlc2NyaXB0b3JzIGZvciBfX3NmdndyaXRlKCkuCi0gKi8KLXN0cnVjdCBfX3Npb3YgewotCWNvbnN0IHZvaWQJKmlvdl9iYXNlOwotCXNpemVfdAlpb3ZfbGVuOwotfTsKLXN0cnVjdCBfX3N1aW8gewotCXN0cnVjdAlfX3Npb3YgKnVpb19pb3Y7Ci0JaW50CXVpb19pb3ZjbnQ7Ci0JaW50CXVpb19yZXNpZDsKLX07Ci0KLWV4dGVybiBpbnQgX19zZnZ3cml0ZShGSUxFICosIHN0cnVjdCBfX3N1aW8gKik7CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2dldHMuYyBiL2xpYmMvc3RkaW8vZ2V0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2UyZWRkLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZ2V0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGdldHMuYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLV9fd2Fybl9yZWZlcmVuY2VzKGdldHMsCi0gICAgIndhcm5pbmc6IGdldHMoKSBpcyB2ZXJ5IHVuc2FmZTsgY29uc2lkZXIgdXNpbmcgZmdldHMoKSIpOwotCi1jaGFyICoKLWdldHMoY2hhciAqYnVmKQotewotCWludCBjOwotCWNoYXIgKnM7Ci0KLQlGTE9DS0ZJTEUoc3RkaW4pOwotCWZvciAocyA9IGJ1ZjsgKGMgPSBnZXRjaGFyX3VubG9ja2VkKCkpICE9ICdcbic7KQotCQlpZiAoYyA9PSBFT0YpCi0JCQlpZiAocyA9PSBidWYpIHsKLQkJCQlGVU5MT0NLRklMRShzdGRpbik7Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0gZWxzZQotCQkJCWJyZWFrOwotCQllbHNlCi0JCQkqcysrID0gYzsKLQkqcyA9ICdcMCc7Ci0JRlVOTE9DS0ZJTEUoc3RkaW4pOwotCXJldHVybiAoYnVmKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZ2x1ZS5oIGIvbGliYy9zdGRpby9nbHVlLmgKaW5kZXggNzNjZWY2My4uNGVhZDIwYSAxMDA2NDQKLS0tIGEvbGliYy9zdGRpby9nbHVlLmgKKysrIGIvbGliYy9zdGRpby9nbHVlLmgKQEAgLTQyLDQgKzQyLDUgQEAKIAlGSUxFCSppb2JzOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBnbHVlIF9fc2dsdWU7CisvKiBUaGlzIHdhcyByZWZlcmVuY2VkIGJ5IGEgY291cGxlIG9mIGRpZmZlcmVudCBwaWVjZXMgb2YgbWlkZGxld2FyZSBhbmQgdGhlIENyeXN0YXggTkRLLiAqLworX19MSUJDNjRfSElEREVOX18gZXh0ZXJuIHN0cnVjdCBnbHVlIF9fc2dsdWU7CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2xvY2FsLmggYi9saWJjL3N0ZGlvL2xvY2FsLmgKaW5kZXggYTE3NWQ2Zi4uMTMxODhlZSAxMDA2NDQKLS0tIGEvbGliYy9zdGRpby9sb2NhbC5oCisrKyBiL2xpYmMvc3RkaW8vbG9jYWwuaApAQCAtMzIsMzcgKzMyLDU1IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSAid2Npby5oIgotI2luY2x1ZGUgImZpbGVleHQuaCIKLQotCiAvKgogICogSW5mb3JtYXRpb24gbG9jYWwgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBzdGRpbywKICAqIGluIHBhcnRpY3VsYXIsIG1hY3JvcyBhbmQgcHJpdmF0ZSB2YXJpYWJsZXMuCiAgKi8KIAotaW50CV9fc2ZsdXNoKEZJTEUgKik7Ci1pbnQJX19zZmx1c2hfbG9ja2VkKEZJTEUgKik7Ci1GSUxFCSpfX3NmcCh2b2lkKTsKLWludAlfX3NyZWZpbGwoRklMRSAqKTsKLWludAlfX3NyZWFkKHZvaWQgKiwgY2hhciAqLCBpbnQpOwotaW50CV9fc3dyaXRlKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQpOwotZnBvc190CV9fc3NlZWsodm9pZCAqLCBmcG9zX3QsIGludCk7Ci1pbnQJX19zY2xvc2Uodm9pZCAqKTsKLXZvaWQJX19zaW5pdCh2b2lkKTsKLXZvaWQJX2NsZWFudXAodm9pZCk7Ci12b2lkCV9fc21ha2VidWYoRklMRSAqKTsKLWludAlfX3N3aGF0YnVmKEZJTEUgKiwgc2l6ZV90ICosIGludCAqKTsKLWludAlfZndhbGsoaW50ICgqKShGSUxFICopKTsKLWludAlfX3N3c2V0dXAoRklMRSAqKTsKLWludAlfX3NmbGFncyhjb25zdCBjaGFyICosIGludCAqKTsKLWludAlfX3ZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOworI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSAid2Npby5oIgorI2luY2x1ZGUgImZpbGVleHQuaCIKIAogLyoKLSAqIEZ1bmN0aW9uIHRvIGNsZWFuIHVwIHN0cmVhbXMsIGNhbGxlZCBmcm9tIGFib3J0KCkgYW5kIGV4aXQoKS4KKyAqIEFuZHJvaWQgPD0gS2l0S2F0IGhhZCBnZXRjL3B1dGMgbWFjcm9zIGluIDxzdGRpby5oPiB0aGF0IHJlZmVycmVkCisgKiB0byBfX3NyZ2V0L19fc3didWYsIHNvIHRob3NlIHN5bWJvbHMgbmVlZCB0byBiZSBwdWJsaWMgZm9yIExQMzIKKyAqIGJ1dCBjYW4gYmUgaGlkZGVuIGZvciBMUDY0LgogICovCi1leHRlcm4gdm9pZCAoKl9fY2xlYW51cCkodm9pZCk7Ci1leHRlcm4gaW50IF9fc2RpZGluaXQ7CitfX0xJQkM2NF9ISURERU5fXyBpbnQgX19zcmdldChGSUxFKik7CitfX0xJQkM2NF9ISURERU5fXyBpbnQgX19zd2J1ZihpbnQsIEZJTEUqKTsKK19fTElCQzY0X0hJRERFTl9fIGludCBfX3NyZWZpbGwoRklMRSopOworCisvKiBUaGlzIHdhcyByZWZlcmVuY2VkIGJ5IHRoZSBhcHBvcnRhYmxlIG1pZGRsZXdhcmUgZm9yIExQMzIuICovCitfX0xJQkM2NF9ISURERU5fXyBpbnQgX19zd3NldHVwKEZJTEUqKTsKKworLyogVGhlc2Ugd2VyZSByZWZlcmVuY2VkIGJ5IGEgY291cGxlIG9mIGRpZmZlcmVudCBwaWVjZXMgb2YgbWlkZGxld2FyZSBhbmQgdGhlIENyeXN0YXggTkRLLiAqLworX19MSUJDNjRfSElEREVOX18gZXh0ZXJuIGludCBfX3NkaWRpbml0OworX19MSUJDNjRfSElEREVOX18gaW50IF9fc2ZsYWdzKGNvbnN0IGNoYXIqLCBpbnQqKTsKK19fTElCQzY0X0hJRERFTl9fIEZJTEUqIF9fc2ZwKHZvaWQpOworX19MSUJDNjRfSElEREVOX18gdm9pZCBfX3Npbml0KHZvaWQpOworX19MSUJDNjRfSElEREVOX18gdm9pZCBfX3NtYWtlYnVmKEZJTEUqKTsKKworLyogVGhlc2UgYXJlIHJlZmVyZW5jZWQgYnkgdGhlIEdyZWVkIGZvciBHbG9yeSBmcmFuY2hpc2UuICovCitfX0xJQkM2NF9ISURERU5fXyBpbnQgX19zZmx1c2goRklMRSAqKTsKK19fTElCQzY0X0hJRERFTl9fIGludCBfX3NyZWFkKHZvaWQgKiwgY2hhciAqLCBpbnQpOworX19MSUJDNjRfSElEREVOX18gaW50IF9fc3dyaXRlKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQpOworX19MSUJDNjRfSElEREVOX18gZnBvc190IF9fc3NlZWsodm9pZCAqLCBmcG9zX3QsIGludCk7CitfX0xJQkM2NF9ISURERU5fXyBpbnQgX19zY2xvc2Uodm9pZCAqKTsKK19fTElCQzY0X0hJRERFTl9fIGludCBfZndhbGsoaW50ICgqKShGSUxFICopKTsKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGhpZGRlbikKKworaW50CV9fc2ZsdXNoX2xvY2tlZChGSUxFICopOwordm9pZAlfY2xlYW51cCh2b2lkKTsKK2ludAlfX3N3aGF0YnVmKEZJTEUgKiwgc2l6ZV90ICosIGludCAqKTsKK3dpbnRfdCBfX2ZnZXR3Y191bmxvY2soRklMRSAqKTsKK3dpbnRfdAlfX3VuZ2V0d2Mod2ludF90LCBGSUxFICopOworaW50CV9fdmZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CitpbnQJX19zdmZzY2FuZihGSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIF9fdmFfbGlzdCk7CitpbnQJX192ZndwcmludGYoRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LCBfX3ZhX2xpc3QpOworaW50CV9fdmZ3c2NhbmYoRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LCBfX3ZhX2xpc3QpOworCitleHRlcm4gdm9pZCBfX2F0ZXhpdF9yZWdpc3Rlcl9jbGVhbnVwKHZvaWQgKCopKHZvaWQpKTsKIAogLyoKICAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBGSUxFIGNhbm5vdCBiZSB3cml0dGVuIG5vdy4KQEAgLTkxLDcgKzEwOSwzMSBAQAogCShmcCktPl9sYi5fYmFzZSA9IE5VTEw7IFwKIH0KIAotI2RlZmluZSBGTE9DS0ZJTEUoZnApICAgZG8geyBpZiAoX19pc3RocmVhZGVkKSBmbG9ja2ZpbGUoZnApOyB9IHdoaWxlICgwKQotI2RlZmluZSBGVU5MT0NLRklMRShmcCkgZG8geyBpZiAoX19pc3RocmVhZGVkKSBmdW5sb2NrZmlsZShmcCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIEZMT0NLRklMRShmcCkgICBmbG9ja2ZpbGUoZnApCisjZGVmaW5lIEZVTkxPQ0tGSUxFKGZwKSBmdW5sb2NrZmlsZShmcCkKIAogI2RlZmluZSBGTE9BVElOR19QT0lOVAorI2RlZmluZSBQUklOVEZfV0lERV9DSEFSCisjZGVmaW5lIFNDQU5GX1dJREVfQ0hBUgorI2RlZmluZSBOT19QUklOVEZfUEVSQ0VOVF9OCisKKy8qIE9wZW5CU0QgZXhwb3NlcyB0aGVzZSBpbiA8c3RkaW8uaD4sIGJ1dCB3ZSBvbmx5IHdhbnQgdGhlbSBleHBvc2VkIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4gKi8KKyNkZWZpbmUgX19zZmVvZihwKSAgICAgKCgocCktPl9mbGFncyAmIF9fU0VPRikgIT0gMCkKKyNkZWZpbmUgX19zZmVycm9yKHApICAgKCgocCktPl9mbGFncyAmIF9fU0VSUikgIT0gMCkKKyNkZWZpbmUgX19zY2xlYXJlcnIocCkgKCh2b2lkKSgocCktPl9mbGFncyAmPSB+KF9fU0VSUnxfX1NFT0YpKSkKKyNkZWZpbmUgX19zZmlsZW5vKHApICAgKChwKS0+X2ZpbGUpCisjZGVmaW5lIF9fc2dldGMocCkgKC0tKHApLT5fciA8IDAgPyBfX3NyZ2V0KHApIDogKGludCkoKihwKS0+X3ArKykpCitzdGF0aWMgX19pbmxpbmUgaW50IF9fc3B1dGMoaW50IF9jLCBGSUxFKiBfcCkgeworICBpZiAoLS1fcC0+X3cgPj0gMCB8fCAoX3AtPl93ID49IF9wLT5fbGJmc2l6ZSAmJiAoY2hhcilfYyAhPSAnXG4nKSkgeworICAgIHJldHVybiAoKl9wLT5fcCsrID0gX2MpOworICB9IGVsc2UgeworICAgIHJldHVybiAoX19zd2J1ZihfYywgX3ApKTsKKyAgfQorfQorCisvKiBPcGVuQlNEIGRlY2xhcmVzIHRoZXNlIGluIGZ2d3JpdGUuaCBidXQgd2Ugd2FudCB0byBlbnN1cmUgdGhleSdyZSBoaWRkZW4uICovCitzdHJ1Y3QgX19zdWlvOworZXh0ZXJuIGludCBfX3NmdndyaXRlKEZJTEUgKiwgc3RydWN0IF9fc3VpbyAqKTsKK3dpbnRfdCBfX2ZwdXR3Y191bmxvY2sod2NoYXJfdCB3YywgRklMRSAqZnApOworCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcApkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9wcmludGYuYyBiL2xpYmMvc3RkaW8vcHJpbnRmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNGI0MzUuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9wcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBwcmludGYuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1pbnQKLXByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgcmV0OwotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQlyZXQgPSB2ZnByaW50ZihzdGRvdXQsIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci0JcmV0dXJuIChyZXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9yZWZpbGwuYyBiL2xpYmMvc3RkaW8vcmVmaWxsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjYjZiNzguLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9yZWZpbGwuYworKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKgkkT3BlbkJTRDogcmVmaWxsLmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLXN0YXRpYyBpbnQKLWxmbHVzaChGSUxFICpmcCkKLXsKLQlpZiAoKGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU1dSKSkgPT0gKF9fU0xCRnxfX1NXUikpCi0JCXJldHVybiAoX19zZmx1c2hfbG9ja2VkKGZwKSk7IC8qIGlnbm9yZWQuLi4gKi8KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogUmVmaWxsIGEgc3RkaW8gYnVmZmVyLgotICogUmV0dXJuIEVPRiBvbiBlb2Ygb3IgZXJyb3IsIDAgb3RoZXJ3aXNlLgotICovCi1pbnQKLV9fc3JlZmlsbChGSUxFICpmcCkKLXsKLQotCS8qIG1ha2Ugc3VyZSBzdGRpbyBpcyBzZXQgdXAgKi8KLQlpZiAoIV9fc2RpZGluaXQpCi0JCV9fc2luaXQoKTsKLQotCWZwLT5fciA9IDA7CQkvKiBsYXJnZWx5IGEgY29udmVuaWVuY2UgZm9yIGNhbGxlcnMgKi8KLQotCS8qIFN5c1YgZG9lcyBub3QgbWFrZSB0aGlzIHRlc3Q7IHRha2UgaXQgb3V0IGZvciBjb21wYXRpYmlsaXR5ICovCi0JaWYgKGZwLT5fZmxhZ3MgJiBfX1NFT0YpCi0JCXJldHVybiAoRU9GKTsKLQotCS8qIGlmIG5vdCBhbHJlYWR5IHJlYWRpbmcsIGhhdmUgdG8gYmUgcmVhZGluZyBhbmQgd3JpdGluZyAqLwotCWlmICgoZnAtPl9mbGFncyAmIF9fU1JEKSA9PSAwKSB7Ci0JCWlmICgoZnAtPl9mbGFncyAmIF9fU1JXKSA9PSAwKSB7Ci0JCQllcnJubyA9IEVCQURGOwotCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7Ci0JCQlyZXR1cm4gKEVPRik7Ci0JCX0KLQkJLyogc3dpdGNoIHRvIHJlYWRpbmcgKi8KLQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUikgewotCQkJaWYgKF9fc2ZsdXNoKGZwKSkKLQkJCQlyZXR1cm4gKEVPRik7Ci0JCQlmcC0+X2ZsYWdzICY9IH5fX1NXUjsKLQkJCWZwLT5fdyA9IDA7Ci0JCQlmcC0+X2xiZnNpemUgPSAwOwotCQl9Ci0JCWZwLT5fZmxhZ3MgfD0gX19TUkQ7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogV2Ugd2VyZSByZWFkaW5nLiAgSWYgdGhlcmUgaXMgYW4gdW5nZXRjIGJ1ZmZlciwKLQkJICogd2UgbXVzdCBoYXZlIGJlZW4gcmVhZGluZyBmcm9tIHRoYXQuICBEcm9wIGl0LAotCQkgKiByZXN0b3JpbmcgdGhlIHByZXZpb3VzIGJ1ZmZlciAoaWYgYW55KS4gIElmIHRoZXJlCi0JCSAqIGlzIGFueXRoaW5nIGluIHRoYXQgYnVmZmVyLCByZXR1cm4uCi0JCSAqLwotCQlpZiAoSEFTVUIoZnApKSB7Ci0JCQlGUkVFVUIoZnApOwotCQkJaWYgKChmcC0+X3IgPSBmcC0+X3VyKSAhPSAwKSB7Ci0JCQkJZnAtPl9wID0gZnAtPl91cDsKLQkJCQlyZXR1cm4gKDApOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGZwLT5fYmYuX2Jhc2UgPT0gTlVMTCkKLQkJX19zbWFrZWJ1ZihmcCk7Ci0KLQkvKgotCSAqIEJlZm9yZSByZWFkaW5nIGZyb20gYSBsaW5lIGJ1ZmZlcmVkIG9yIHVuYnVmZmVyZWQgZmlsZSwKLQkgKiBmbHVzaCBhbGwgbGluZSBidWZmZXJlZCBvdXRwdXQgZmlsZXMsIHBlciB0aGUgQU5TSSBDCi0JICogc3RhbmRhcmQuCi0JICovCi0JaWYgKGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU05CRikpIHsKLQkJLyogSWdub3JlIHRoaXMgZmlsZSBpbiBfZndhbGsgdG8gYXZvaWQgcG90ZW50aWFsIGRlYWRsb2NrLiAqLwotCQlmcC0+X2ZsYWdzIHw9IF9fU0lHTjsKLQkJKHZvaWQpIF9md2FsayhsZmx1c2gpOwotCQlmcC0+X2ZsYWdzICY9IH5fX1NJR047Ci0KLQkJLyogTm93IGZsdXNoIHRoaXMgZmlsZSB3aXRob3V0IGxvY2tpbmcgaXQuICovCi0JCWlmICgoZnAtPl9mbGFncyAmIChfX1NMQkZ8X19TV1IpKSA9PSAoX19TTEJGfF9fU1dSKSkKLQkJICAgIF9fc2ZsdXNoKGZwKTsKLQl9Ci0JZnAtPl9wID0gZnAtPl9iZi5fYmFzZTsKLQlmcC0+X3IgPSAoKmZwLT5fcmVhZCkoZnAtPl9jb29raWUsIChjaGFyICopZnAtPl9wLCBmcC0+X2JmLl9zaXplKTsKLQlmcC0+X2ZsYWdzICY9IH5fX1NNT0Q7CS8qIGJ1ZmZlciBjb250ZW50cyBhcmUgYWdhaW4gcHJpc3RpbmUgKi8KLQlpZiAoZnAtPl9yIDw9IDApIHsKLQkJaWYgKGZwLT5fciA9PSAwKQotCQkJZnAtPl9mbGFncyB8PSBfX1NFT0Y7Ci0JCWVsc2UgewotCQkJZnAtPl9yID0gMDsKLQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOwotCQl9Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vc2NhbmYuYyBiL2xpYmMvc3RkaW8vc2NhbmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzExOTRkMC4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL3NjYW5mLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgkkT3BlbkJTRDogc2NhbmYuYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1pbnQKLXNjYW5mKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCWludCByZXQ7Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXJldCA9IHZmc2NhbmYoc3RkaW4sIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci0JcmV0dXJuIChyZXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9zc2NhbmYuYyBiL2xpYmMvc3RkaW8vc3NjYW5mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYmRmMWMuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9zc2NhbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzc2NhbmYuYyx2IDEuMTIgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKiBBUkdTVVNFRCAqLwotc3RhdGljIGludAotZW9mcmVhZCh2b2lkICpjb29raWUsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQotCXJldHVybiAoMCk7Ci19Ci0KLWludAotc3NjYW5mKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JaW50IHJldDsKLQl2YV9saXN0IGFwOwotCUZJTEUgZjsKLQlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OwotCi0JX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKLQlmLl9mbGFncyA9IF9fU1JEOwotCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopc3RyOwotCWYuX2JmLl9zaXplID0gZi5fciA9IHN0cmxlbihzdHIpOwotCWYuX3JlYWQgPSBlb2ZyZWFkOwotCWYuX2xiLl9iYXNlID0gTlVMTDsKLQl2YV9zdGFydChhcCwgZm10KTsKLQlyZXQgPSB2ZnNjYW5mKCZmLCBmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotCXJldHVybiAocmV0KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vc3RkaW8uYyBiL2xpYmMvc3RkaW8vc3RkaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU5NmViZi4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL3N0ZGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RkaW8uYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotLyoKLSAqIFNtYWxsIHN0YW5kYXJkIEkvTy9zZWVrL2Nsb3NlIGZ1bmN0aW9ucy4KLSAqIFRoZXNlIG1haW50YWluIHRoZSBga25vd24gc2VlayBvZmZzZXQnIGZvciBzZWVrIG9wdGltaXNhdGlvbi4KLSAqLwotaW50Ci1fX3NyZWFkKHZvaWQgKmNvb2tpZSwgY2hhciAqYnVmLCBpbnQgbikKLXsKLQlGSUxFICpmcCA9IGNvb2tpZTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVhZChmcC0+X2ZpbGUsIGJ1Ziwgbik7Ci0JLyogaWYgdGhlIHJlYWQgc3VjY2VlZGVkLCB1cGRhdGUgdGhlIGN1cnJlbnQgb2Zmc2V0ICovCi0JaWYgKHJldCA+PSAwKQotCQlmcC0+X29mZnNldCArPSByZXQ7Ci0JZWxzZQotCQlmcC0+X2ZsYWdzICY9IH5fX1NPRkY7CS8qIHBhcmFub2lhICovCi0JcmV0dXJuIChyZXQpOwotfQotCi1pbnQKLV9fc3dyaXRlKHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqYnVmLCBpbnQgbikKLXsKLQlGSUxFICpmcCA9IGNvb2tpZTsKLQotCWlmIChmcC0+X2ZsYWdzICYgX19TQVBQKQotCQkodm9pZCkgbHNlZWsoZnAtPl9maWxlLCAob2ZmX3QpMCwgU0VFS19FTkQpOwotCWZwLT5fZmxhZ3MgJj0gfl9fU09GRjsJLyogaW4gY2FzZSBGQVBQRU5EIG1vZGUgaXMgc2V0ICovCi0JcmV0dXJuICh3cml0ZShmcC0+X2ZpbGUsIGJ1ZiwgbikpOwotfQotCi1mcG9zX3QKLV9fc3NlZWsodm9pZCAqY29va2llLCBmcG9zX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQotewotCUZJTEUgKmZwID0gY29va2llOwotCW9mZl90IHJldDsKLQotCXJldCA9IGxzZWVrKGZwLT5fZmlsZSwgKG9mZl90KW9mZnNldCwgd2hlbmNlKTsKLQlpZiAocmV0ID09IChvZmZfdCktMSkKLQkJZnAtPl9mbGFncyAmPSB+X19TT0ZGOwotCWVsc2UgewotCQlmcC0+X2ZsYWdzIHw9IF9fU09GRjsKLQkJZnAtPl9vZmZzZXQgPSByZXQ7Ci0JfQotCXJldHVybiAocmV0KTsKLX0KLQotaW50Ci1fX3NjbG9zZSh2b2lkICpjb29raWUpCi17Ci0JcmV0dXJuIChjbG9zZSgoKEZJTEUgKiljb29raWUpLT5fZmlsZSkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby91bmdldGMuYyBiL2xpYmMvc3RkaW8vdW5nZXRjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0OTNkMjEuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby91bmdldGMuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgkkT3BlbkJTRDogdW5nZXRjLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi1zdGF0aWMgaW50IF9fc3VibW9yZShGSUxFICopOwotLyoKLSAqIEV4cGFuZCB0aGUgdW5nZXRjIGJ1ZmZlciBgaW4gcGxhY2UnLiAgVGhhdCBpcywgYWRqdXN0IGZwLT5fcCB3aGVuCi0gKiB0aGUgYnVmZmVyIG1vdmVzLCBzbyB0aGF0IGl0IHBvaW50cyB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoZSBlbmQsCi0gKiBhbmQgbW92ZSB0aGUgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBhcm91bmQgYXMgbmVjZXNzYXJ5IHNvIHRoYXQgdGhleQotICogYXJlIGFsbCBhdCB0aGUgZW5kIChzdGFjay1zdHlsZSkuCi0gKi8KLXN0YXRpYyBpbnQKLV9fc3VibW9yZShGSUxFICpmcCkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyICpwOwotCi0JaWYgKF9VQihmcCkuX2Jhc2UgPT0gZnAtPl91YnVmKSB7Ci0JCS8qCi0JCSAqIEdldCBhIG5ldyBidWZmZXIgKHJhdGhlciB0aGFuIGV4cGFuZGluZyB0aGUgb2xkIG9uZSkuCi0JCSAqLwotCQlpZiAoKHAgPSBtYWxsb2MoKHNpemVfdClCVUZTSVopKSA9PSBOVUxMKQotCQkJcmV0dXJuIChFT0YpOwotCQlfVUIoZnApLl9iYXNlID0gcDsKLQkJX1VCKGZwKS5fc2l6ZSA9IEJVRlNJWjsKLQkJcCArPSBCVUZTSVogLSBzaXplb2YoZnAtPl91YnVmKTsKLQkJZm9yIChpID0gc2l6ZW9mKGZwLT5fdWJ1Zik7IC0taSA+PSAwOykKLQkJCXBbaV0gPSBmcC0+X3VidWZbaV07Ci0JCWZwLT5fcCA9IHA7Ci0JCXJldHVybiAoMCk7Ci0JfQotCWkgPSBfVUIoZnApLl9zaXplOwotCXAgPSByZWFsbG9jKF9VQihmcCkuX2Jhc2UsIGkgPDwgMSk7Ci0JaWYgKHAgPT0gTlVMTCkKLQkJcmV0dXJuIChFT0YpOwotCS8qIG5vIG92ZXJsYXAgKGhlbmNlIGNhbiB1c2UgbWVtY3B5KSBiZWNhdXNlIHdlIGRvdWJsZWQgdGhlIHNpemUgKi8KLQkodm9pZCltZW1jcHkoKHZvaWQgKikocCArIGkpLCAodm9pZCAqKXAsIChzaXplX3QpaSk7Ci0JZnAtPl9wID0gcCArIGk7Ci0JX1VCKGZwKS5fYmFzZSA9IHA7Ci0JX1VCKGZwKS5fc2l6ZSA9IGkgPDwgMTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLXVuZ2V0YyhpbnQgYywgRklMRSAqZnApCi17Ci0JaWYgKGMgPT0gRU9GKQotCQlyZXR1cm4gKEVPRik7Ci0JaWYgKCFfX3NkaWRpbml0KQotCQlfX3Npbml0KCk7Ci0JRkxPQ0tGSUxFKGZwKTsKLQlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7Ci0JaWYgKChmcC0+X2ZsYWdzICYgX19TUkQpID09IDApIHsKLQkJLyoKLQkJICogTm90IGFscmVhZHkgcmVhZGluZzogbm8gZ29vZCB1bmxlc3MgcmVhZGluZy1hbmQtd3JpdGluZy4KLQkJICogT3RoZXJ3aXNlLCBmbHVzaCBhbnkgY3VycmVudCB3cml0ZSBzdHVmZi4KLQkJICovCi0JCWlmICgoZnAtPl9mbGFncyAmIF9fU1JXKSA9PSAwKSB7Ci1lcnJvcjoJCQlGVU5MT0NLRklMRShmcCk7Ci0JCQlyZXR1cm4gKEVPRik7Ci0JCX0KLQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUikgewotCQkJaWYgKF9fc2ZsdXNoKGZwKSkKLQkJCQlnb3RvIGVycm9yOwotCQkJZnAtPl9mbGFncyAmPSB+X19TV1I7Ci0JCQlmcC0+X3cgPSAwOwotCQkJZnAtPl9sYmZzaXplID0gMDsKLQkJfQotCQlmcC0+X2ZsYWdzIHw9IF9fU1JEOwotCX0KLQljID0gKHVuc2lnbmVkIGNoYXIpYzsKLQotCS8qCi0JICogSWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgdW5nZXRjJ2luZywganVzdCBjb250aW51ZS4KLQkgKiBUaGlzIG1heSByZXF1aXJlIGV4cGFuZGluZyB0aGUgY3VycmVudCB1bmdldGMgYnVmZmVyLgotCSAqLwotCWlmIChIQVNVQihmcCkpIHsKLQkJaWYgKGZwLT5fciA+PSBfVUIoZnApLl9zaXplICYmIF9fc3VibW9yZShmcCkpCi0JCQlnb3RvIGVycm9yOwotCQkqLS1mcC0+X3AgPSBjOwotaW5jX3JldDoJZnAtPl9yKys7Ci0JCUZVTkxPQ0tGSUxFKGZwKTsKLQkJcmV0dXJuIChjKTsKLQl9Ci0JZnAtPl9mbGFncyAmPSB+X19TRU9GOwotCi0JLyoKLQkgKiBJZiB3ZSBjYW4gaGFuZGxlIHRoaXMgYnkgc2ltcGx5IGJhY2tpbmcgdXAsIGRvIHNvLAotCSAqIGJ1dCBuZXZlciByZXBsYWNlIHRoZSBvcmlnaW5hbCBjaGFyYWN0ZXIuCi0JICogKFRoaXMgbWFrZXMgc3NjYW5mKCkgd29yayB3aGVuIHNjYW5uaW5nIGBjb25zdCcgZGF0YS4pCi0JICovCi0JaWYgKGZwLT5fYmYuX2Jhc2UgIT0gTlVMTCAmJiBmcC0+X3AgPiBmcC0+X2JmLl9iYXNlICYmCi0JICAgIGZwLT5fcFstMV0gPT0gYykgewotCQlmcC0+X3AtLTsKLQkJZ290byBpbmNfcmV0OwotCX0KLQotCS8qCi0JICogQ3JlYXRlIGFuIHVuZ2V0YyBidWZmZXIuCi0JICogSW5pdGlhbGx5LCB3ZSB3aWxsIHVzZSB0aGUgYHJlc2VydmUnIGJ1ZmZlci4KLQkgKi8KLQlmcC0+X3VyID0gZnAtPl9yOwotCWZwLT5fdXAgPSBmcC0+X3A7Ci0JX1VCKGZwKS5fYmFzZSA9IGZwLT5fdWJ1ZjsKLQlfVUIoZnApLl9zaXplID0gc2l6ZW9mKGZwLT5fdWJ1Zik7Ci0JZnAtPl91YnVmW3NpemVvZihmcC0+X3VidWYpIC0gMV0gPSBjOwotCWZwLT5fcCA9ICZmcC0+X3VidWZbc2l6ZW9mKGZwLT5fdWJ1ZikgLSAxXTsKLQlmcC0+X3IgPSAxOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKGMpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92YXNwcmludGYuYyBiL2xpYmMvc3RkaW8vdmFzcHJpbnRmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzBjY2IuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby92YXNwcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiB2YXNwcmludGYuYyx2IDEuMTMgMjAwNi8wMS8wNiAxODo1MzowNCBtaWxsZXJ0IEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+Ci0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi1pbnQKLXZhc3ByaW50ZihjaGFyICoqc3RyLCBjb25zdCBjaGFyICpmbXQsIF9fdmFfbGlzdCBhcCkKLXsKLQlpbnQgcmV0OwotCUZJTEUgZjsKLQlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OwotCXVuc2lnbmVkIGNoYXIgKl9iYXNlOwotCi0JX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKLQlmLl9maWxlID0gLTE7Ci0JZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUiB8IF9fU0FMQzsKLQlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYygxMjgpOwotCWlmIChmLl9iZi5fYmFzZSA9PSBOVUxMKQotCQlnb3RvIGVycjsKLQlmLl9iZi5fc2l6ZSA9IGYuX3cgPSAxMjc7CQkvKiBMZWF2ZSByb29tIGZvciB0aGUgTlVMICovCi0JcmV0ID0gX192ZnByaW50ZigmZiwgZm10LCBhcCk7Ci0JaWYgKHJldCA9PSAtMSkKLQkJZ290byBlcnI7Ci0JKmYuX3AgPSAnXDAnOwotCV9iYXNlID0gcmVhbGxvYyhmLl9iZi5fYmFzZSwgcmV0ICsgMSk7Ci0JaWYgKF9iYXNlID09IE5VTEwpCi0JCWdvdG8gZXJyOwotCSpzdHIgPSAoY2hhciAqKV9iYXNlOwotCXJldHVybiAocmV0KTsKLQotZXJyOgotCWZyZWUoZi5fYmYuX2Jhc2UpOwotCSpzdHIgPSBOVUxMOwotCWVycm5vID0gRU5PTUVNOwotCXJldHVybiAoLTEpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92ZnByaW50Zi5jIGIvbGliYy9zdGRpby92ZnByaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTAxMTQ1Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vdmZwcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMjkgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHZmcHJpbnRmLmMsdiAxLjM3IDIwMDYvMDEvMTMgMTc6NTY6MTggbWlsbGVydCBFeHAgJAkqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBBY3R1YWwgcHJpbnRmIGlubmFyZHMuCi0gKgotICogVGhpcyBjb2RlIGlzIGxhcmdlIGFuZCBjb21wbGljYXRlZC4uLgotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAibG9jYWwuaCIKLSNpbmNsdWRlICJmdndyaXRlLmgiCi0KLXN0YXRpYyB2b2lkIF9fZmluZF9hcmd1bWVudHMoY29uc3QgY2hhciAqZm10MCwgdmFfbGlzdCBhcCwgdmFfbGlzdCAqKmFyZ3RhYmxlLAotICAgIHNpemVfdCAqYXJndGFibGVzaXopOwotc3RhdGljIGludCBfX2dyb3dfdHlwZV90YWJsZSh1bnNpZ25lZCBjaGFyICoqdHlwZXRhYmxlLCBpbnQgKnRhYmxlc2l6ZSk7Ci0KLS8qCi0gKiBGbHVzaCBvdXQgYWxsIHRoZSB2ZWN0b3JzIGRlZmluZWQgYnkgdGhlIGdpdmVuIHVpbywKLSAqIHRoZW4gcmVzZXQgaXQgc28gdGhhdCBpdCBjYW4gYmUgcmV1c2VkLgotICovCi1zdGF0aWMgaW50Ci1fX3NwcmludChGSUxFICpmcCwgc3RydWN0IF9fc3VpbyAqdWlvKQotewotCWludCBlcnI7Ci0KLQlpZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgewotCQl1aW8tPnVpb19pb3ZjbnQgPSAwOwotCQlyZXR1cm4gKDApOwotCX0KLQllcnIgPSBfX3NmdndyaXRlKGZwLCB1aW8pOwotCXVpby0+dWlvX3Jlc2lkID0gMDsKLQl1aW8tPnVpb19pb3ZjbnQgPSAwOwotCXJldHVybiAoZXJyKTsKLX0KLQotLyoKLSAqIEhlbHBlciBmdW5jdGlvbiBmb3IgYGZwcmludGYgdG8gdW5idWZmZXJlZCB1bml4IGZpbGUnOiBjcmVhdGVzIGEKLSAqIHRlbXBvcmFyeSBidWZmZXIuICBXZSBvbmx5IHdvcmsgb24gd3JpdGUtb25seSBmaWxlczsgdGhpcyBhdm9pZHMKLSAqIHdvcnJpZXMgYWJvdXQgdW5nZXRjIGJ1ZmZlcnMgYW5kIHNvIGZvcnRoLgotICovCi1zdGF0aWMgaW50Ci1fX3NicHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCi17Ci0JaW50IHJldDsKLQlGSUxFIGZha2U7Ci0Jc3RydWN0IF9fc2ZpbGVleHQgZmFrZWV4dDsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltCVUZTSVpdOwotCi0JX0ZJTEVFWFRfU0VUVVAoJmZha2UsICZmYWtlZXh0KTsKLQkvKiBjb3B5IHRoZSBpbXBvcnRhbnQgdmFyaWFibGVzICovCi0JZmFrZS5fZmxhZ3MgPSBmcC0+X2ZsYWdzICYgfl9fU05CRjsKLQlmYWtlLl9maWxlID0gZnAtPl9maWxlOwotCWZha2UuX2Nvb2tpZSA9IGZwLT5fY29va2llOwotCWZha2UuX3dyaXRlID0gZnAtPl93cml0ZTsKLQotCS8qIHNldCB1cCB0aGUgYnVmZmVyICovCi0JZmFrZS5fYmYuX2Jhc2UgPSBmYWtlLl9wID0gYnVmOwotCWZha2UuX2JmLl9zaXplID0gZmFrZS5fdyA9IHNpemVvZihidWYpOwotCWZha2UuX2xiZnNpemUgPSAwOwkvKiBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IEp1c3QgSW4gQ2FzZSAqLwotCi0JLyogZG8gdGhlIHdvcmssIHRoZW4gY29weSBhbnkgZXJyb3Igc3RhdHVzICovCi0JcmV0ID0gX192ZnByaW50ZigmZmFrZSwgZm10LCBhcCk7Ci0JaWYgKHJldCA+PSAwICYmIF9fc2ZsdXNoKCZmYWtlKSkKLQkJcmV0ID0gRU9GOwotCWlmIChmYWtlLl9mbGFncyAmIF9fU0VSUikKLQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7Ci0JcmV0dXJuIChyZXQpOwotfQotCi0KLSNpZmRlZiBGTE9BVElOR19QT0lOVAotI2luY2x1ZGUgPGxvY2FsZS5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlICJmbG9hdGlvLmgiCi0KLSNkZWZpbmUJQlVGCQkoTUFYRVhQK01BWEZSQUNUKzEpCS8qICsgZGVjaW1hbCBwb2ludCAqLwotI2RlZmluZQlERUZQUkVDCQk2Ci0KLXN0YXRpYyBjaGFyICpjdnQoZG91YmxlLCBpbnQsIGludCwgY2hhciAqLCBpbnQgKiwgaW50LCBpbnQgKik7Ci1zdGF0aWMgaW50IGV4cG9uZW50KGNoYXIgKiwgaW50LCBpbnQpOwotI2Vsc2UgLyogbm8gRkxPQVRJTkdfUE9JTlQgKi8KLSNkZWZpbmUJQlVGCQk0MAotI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCi0KLSNkZWZpbmUgU1RBVElDX0FSR19UQkxfU0laRSA4CS8qIFNpemUgb2Ygc3RhdGljIGFyZ3VtZW50IHRhYmxlLiAqLwotCi0vKiBCSU9OSUM6IGRvIG5vdCBsaW5rIGxpYm0gZm9yIG9ubHkgdHdvIHJhdGhlciBzaW1wbGUgZnVuY3Rpb25zICovCi0jaWZkZWYgRkxPQVRJTkdfUE9JTlQKLXN0YXRpYyAgaW50ICBfbXlfaXNpbmYoZG91YmxlKTsKLXN0YXRpYyAgaW50ICBfbXlfaXNuYW4oZG91YmxlKTsKLSNlbmRpZgotCi0vKgotICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIGRpZ2l0cyB0byBsZXR0ZXJzIGFuZCB2aWNlIHZlcnNhCi0gKi8KLSNkZWZpbmUJdG9fZGlnaXQoYykJKChjKSAtICcwJykKLSNkZWZpbmUgaXNfZGlnaXQoYykJKCh1bnNpZ25lZCl0b19kaWdpdChjKSA8PSA5KQotI2RlZmluZQl0b19jaGFyKG4pCSgobikgKyAnMCcpCi0KLS8qCi0gKiBGbGFncyB1c2VkIGR1cmluZyBjb252ZXJzaW9uLgotICovCi0jZGVmaW5lCUFMVAkJMHgwMDAxCQkvKiBhbHRlcm5hdGUgZm9ybSAqLwotI2RlZmluZQlIRVhQUkVGSVgJMHgwMDAyCQkvKiBhZGQgMHggb3IgMFggcHJlZml4ICovCi0jZGVmaW5lCUxBREpVU1QJCTB4MDAwNAkJLyogbGVmdCBhZGp1c3RtZW50ICovCi0jZGVmaW5lCUxPTkdEQkwJCTB4MDAwOAkJLyogbG9uZyBkb3VibGU7IHVuaW1wbGVtZW50ZWQgKi8KLSNkZWZpbmUJTE9OR0lOVAkJMHgwMDEwCQkvKiBsb25nIGludGVnZXIgKi8KLSNkZWZpbmUJTExPTkdJTlQJMHgwMDIwCQkvKiBsb25nIGxvbmcgaW50ZWdlciAqLwotI2RlZmluZQlTSE9SVElOVAkweDAwNDAJCS8qIHNob3J0IGludGVnZXIgKi8KLSNkZWZpbmUJWkVST1BBRAkJMHgwMDgwCQkvKiB6ZXJvIChhcyBvcHBvc2VkIHRvIGJsYW5rKSBwYWQgKi8KLSNkZWZpbmUgRlBUCQkweDAxMDAJCS8qIEZsb2F0aW5nIHBvaW50IG51bWJlciAqLwotI2RlZmluZSBQVFJJTlQJCTB4MDIwMAkJLyogKHVuc2lnbmVkKSBwdHJkaWZmX3QgKi8KLSNkZWZpbmUgU0laRUlOVAkJMHgwNDAwCQkvKiAoc2lnbmVkKSBzaXplX3QgKi8KLSNkZWZpbmUgQ0hBUklOVAkJMHgwODAwCQkvKiA4IGJpdCBpbnRlZ2VyICovCi0jZGVmaW5lIE1BWElOVAkJMHgxMDAwCQkvKiBsYXJnZXN0IGludGVnZXIgc2l6ZSAoaW50bWF4X3QpICovCi0KLWludAotdmZwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdDAsIF9fdmFfbGlzdCBhcCkKLXsKLQlpbnQgcmV0OwotCi0JRkxPQ0tGSUxFKGZwKTsKLQlyZXQgPSBfX3ZmcHJpbnRmKGZwLCBmbXQwLCBhcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAocmV0KTsKLX0KLQotaW50Ci1fX3ZmcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQwLCBfX3ZhX2xpc3QgYXApCi17Ci0JY2hhciAqZm10OwkvKiBmb3JtYXQgc3RyaW5nICovCi0JaW50IGNoOwkvKiBjaGFyYWN0ZXIgZnJvbSBmbXQgKi8KLQlpbnQgbiwgbSwgbjI7CS8qIGhhbmR5IGludGVnZXJzIChzaG9ydCB0ZXJtIHVzYWdlKSAqLwotCWNoYXIgKmNwOwkvKiBoYW5keSBjaGFyIHBvaW50ZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCi0JY2hhciAqY3BfZnJlZSA9IE5VTEw7ICAvKiBCSU9OSUM6IGNvcHkgb2YgY3AgdG8gYmUgZnJlZWQgYWZ0ZXIgdXNhZ2UgKi8KLQlzdHJ1Y3QgX19zaW92ICppb3ZwOy8qIGZvciBQUklOVCBtYWNybyAqLwotCWludCBmbGFnczsJLyogZmxhZ3MgYXMgYWJvdmUgKi8KLQlpbnQgcmV0OwkJLyogcmV0dXJuIHZhbHVlIGFjY3VtdWxhdG9yICovCi0JaW50IHdpZHRoOwkJLyogd2lkdGggZnJvbSBmb3JtYXQgKCU4ZCksIG9yIDAgKi8KLQlpbnQgcHJlYzsJCS8qIHByZWNpc2lvbiBmcm9tIGZvcm1hdCAoJS4zZCksIG9yIC0xICovCi0JY2hhciBzaWduOwkJLyogc2lnbiBwcmVmaXggKCcgJywgJysnLCAnLScsIG9yIFwwKSAqLwotCXdjaGFyX3Qgd2M7Ci0Jdm9pZCogcHM7Ci0jaWZkZWYgRkxPQVRJTkdfUE9JTlQKLQljaGFyICpkZWNpbWFsX3BvaW50ID0gIi4iOwotCWNoYXIgc29mdHNpZ247CQkvKiB0ZW1wb3JhcnkgbmVnYXRpdmUgc2lnbiBmb3IgZmxvYXRzICovCi0JZG91YmxlIF9kb3VibGUgPSAwLjsJLyogZG91YmxlIHByZWNpc2lvbiBhcmd1bWVudHMgJVtlRWZnR10gKi8KLQlpbnQgZXhwdDsJCS8qIGludGVnZXIgdmFsdWUgb2YgZXhwb25lbnQgKi8KLQlpbnQgZXhwc2l6ZSA9IDA7CS8qIGNoYXJhY3RlciBjb3VudCBmb3IgZXhwc3RyICovCi0JaW50IG5kaWc7CQkvKiBhY3R1YWwgbnVtYmVyIG9mIGRpZ2l0cyByZXR1cm5lZCBieSBjdnQgKi8KLQljaGFyIGV4cHN0cls3XTsJCS8qIGJ1ZmZlciBmb3IgZXhwb25lbnQgc3RyaW5nICovCi0jZW5kaWYKLQotCXVpbnRtYXhfdCBfdW1heDsJLyogaW50ZWdlciBhcmd1bWVudHMgJVtkaW91eFhdICovCi0JZW51bSB7IE9DVCwgREVDLCBIRVggfSBiYXNlOy8qIGJhc2UgZm9yIFtkaW91eFhdIGNvbnZlcnNpb24gKi8KLQlpbnQgZHByZWM7CQkvKiBhIGNvcHkgb2YgcHJlYyBpZiBbZGlvdXhYXSwgMCBvdGhlcndpc2UgKi8KLQlpbnQgcmVhbHN6OwkJLyogZmllbGQgc2l6ZSBleHBhbmRlZCBieSBkcHJlYyAqLwotCWludCBzaXplOwkJLyogc2l6ZSBvZiBjb252ZXJ0ZWQgZmllbGQgb3Igc3RyaW5nICovCi0JY2hhciogeGRpZ3MgPSBOVUxMOwkJLyogZGlnaXRzIGZvciBbeFhdIGNvbnZlcnNpb24gKi8KLSNkZWZpbmUgTklPViA4Ci0Jc3RydWN0IF9fc3VpbyB1aW87CS8qIG91dHB1dCBpbmZvcm1hdGlvbjogc3VtbWFyeSAqLwotCXN0cnVjdCBfX3Npb3YgaW92W05JT1ZdOy8qIC4uLiBhbmQgaW5kaXZpZHVhbCBpbyB2ZWN0b3JzICovCi0JY2hhciBidWZbQlVGXTsJCS8qIHNwYWNlIGZvciAlYywgJVtkaW91eFhdLCAlW2VFZmdHXSAqLwotCWNoYXIgb3hbMl07CQkvKiBzcGFjZSBmb3IgMHggaGV4LXByZWZpeCAqLwotCXZhX2xpc3QgKmFyZ3RhYmxlOwkvKiBhcmdzLCBidWlsdCBkdWUgdG8gcG9zaXRpb25hbCBhcmcgKi8KLQl2YV9saXN0IHN0YXRhcmd0YWJsZVtTVEFUSUNfQVJHX1RCTF9TSVpFXTsKLQlzaXplX3QgYXJndGFibGVzaXo7Ci0JaW50IG5leHRhcmc7CQkvKiAxLWJhc2VkIGFyZ3VtZW50IGluZGV4ICovCi0JdmFfbGlzdCBvcmdhcDsJCS8qIG9yaWdpbmFsIGFyZ3VtZW50IHBvaW50ZXIgKi8KLQkvKgotCSAqIENob29zZSBQQURTSVpFIHRvIHRyYWRlIGVmZmljaWVuY3kgdnMuIHNpemUuICBJZiBsYXJnZXIgcHJpbnRmCi0JICogZmllbGRzIG9jY3VyIGZyZXF1ZW50bHksIGluY3JlYXNlIFBBRFNJWkUgYW5kIG1ha2UgdGhlIGluaXRpYWxpc2VycwotCSAqIGJlbG93IGxvbmdlci4KLQkgKi8KLSNkZWZpbmUJUEFEU0laRQkxNgkJLyogcGFkIGNodW5rIHNpemUgKi8KLQlzdGF0aWMgY29uc3QgY2hhciBibGFua3NbUEFEU0laRV0gPQotCSB7JyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnfTsKLQlzdGF0aWMgY29uc3QgY2hhciB6ZXJvZXNbUEFEU0laRV0gPQotCSB7JzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnfTsKLQotCS8qCi0JICogQkVXQVJFLCB0aGVzZSBgZ290byBlcnJvcicgb24gZXJyb3IsIGFuZCBQQUQgdXNlcyBgbicuCi0JICovCi0jZGVmaW5lCVBSSU5UKHB0ciwgbGVuKSBkbyB7IFwKLQlpb3ZwLT5pb3ZfYmFzZSA9IChwdHIpOyBcCi0JaW92cC0+aW92X2xlbiA9IChsZW4pOyBcCi0JdWlvLnVpb19yZXNpZCArPSAobGVuKTsgXAotCWlvdnArKzsgXAotCWlmICgrK3Vpby51aW9faW92Y250ID49IE5JT1YpIHsgXAotCQlpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBcCi0JCQlnb3RvIGVycm9yOyBcCi0JCWlvdnAgPSBpb3Y7IFwKLQl9IFwKLX0gd2hpbGUgKDApCi0jZGVmaW5lCVBBRChob3dtYW55LCB3aXRoKSBkbyB7IFwKLQlpZiAoKG4gPSAoaG93bWFueSkpID4gMCkgeyBcCi0JCXdoaWxlIChuID4gUEFEU0laRSkgeyBcCi0JCQlQUklOVCh3aXRoLCBQQURTSVpFKTsgXAotCQkJbiAtPSBQQURTSVpFOyBcCi0JCX0gXAotCQlQUklOVCh3aXRoLCBuKTsgXAotCX0gXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUJRkxVU0goKSBkbyB7IFwKLQlpZiAodWlvLnVpb19yZXNpZCAmJiBfX3NwcmludChmcCwgJnVpbykpIFwKLQkJZ290byBlcnJvcjsgXAotCXVpby51aW9faW92Y250ID0gMDsgXAotCWlvdnAgPSBpb3Y7IFwKLX0gd2hpbGUgKDApCi0KLQkvKgotCSAqIFRvIGV4dGVuZCBzaG9ydHMgcHJvcGVybHksIHdlIG5lZWQgYm90aCBzaWduZWQgYW5kIHVuc2lnbmVkCi0JICogYXJndW1lbnQgZXh0cmFjdGlvbiBtZXRob2RzLgotCSAqLwotI2RlZmluZQlTQVJHKCkgXAotCSgoaW50bWF4X3QpKGZsYWdzJk1BWElOVCA/IEdFVEFSRyhpbnRtYXhfdCkgOiBcCi0JICAgIGZsYWdzJkxMT05HSU5UID8gR0VUQVJHKGxvbmcgbG9uZykgOiBcCi0JICAgIGZsYWdzJkxPTkdJTlQgPyBHRVRBUkcobG9uZykgOiBcCi0JICAgIGZsYWdzJlBUUklOVCA/IEdFVEFSRyhwdHJkaWZmX3QpIDogXAotCSAgICBmbGFncyZTSVpFSU5UID8gR0VUQVJHKHNzaXplX3QpIDogXAotCSAgICBmbGFncyZTSE9SVElOVCA/IChzaG9ydClHRVRBUkcoaW50KSA6IFwKLQkgICAgZmxhZ3MmQ0hBUklOVCA/IChfX3NpZ25lZCBjaGFyKUdFVEFSRyhpbnQpIDogXAotCSAgICBHRVRBUkcoaW50KSkpCi0jZGVmaW5lCVVBUkcoKSBcCi0JKCh1aW50bWF4X3QpKGZsYWdzJk1BWElOVCA/IEdFVEFSRyh1aW50bWF4X3QpIDogXAotCSAgICBmbGFncyZMTE9OR0lOVCA/IEdFVEFSRyh1bnNpZ25lZCBsb25nIGxvbmcpIDogXAotCSAgICBmbGFncyZMT05HSU5UID8gR0VUQVJHKHVuc2lnbmVkIGxvbmcpIDogXAotCSAgICBmbGFncyZQVFJJTlQgPyAodWludHB0cl90KUdFVEFSRyhwdHJkaWZmX3QpIDogLyogWFhYICovIFwKLQkgICAgZmxhZ3MmU0laRUlOVCA/IEdFVEFSRyhzaXplX3QpIDogXAotCSAgICBmbGFncyZTSE9SVElOVCA/ICh1bnNpZ25lZCBzaG9ydClHRVRBUkcoaW50KSA6IFwKLQkgICAgZmxhZ3MmQ0hBUklOVCA/ICh1bnNpZ25lZCBjaGFyKUdFVEFSRyhpbnQpIDogXAotCSAgICBHRVRBUkcodW5zaWduZWQgaW50KSkpCi0KLQkgLyoKLQkgICogR2V0ICogYXJndW1lbnRzLCBpbmNsdWRpbmcgdGhlIGZvcm0gKm5uJC4gIFByZXNlcnZlIHRoZSBuZXh0YXJnCi0JICAqIHRoYXQgdGhlIGFyZ3VtZW50IGNhbiBiZSBnb3R0ZW4gb25jZSB0aGUgdHlwZSBpcyBkZXRlcm1pbmVkLgotCSAgKi8KLSNkZWZpbmUgR0VUQVNURVIodmFsKSBcCi0JbjIgPSAwOyBcCi0JY3AgPSBmbXQ7IFwKLQl3aGlsZSAoaXNfZGlnaXQoKmNwKSkgeyBcCi0JCW4yID0gMTAgKiBuMiArIHRvX2RpZ2l0KCpjcCk7IFwKLQkJY3ArKzsgXAotCX0gXAotCWlmICgqY3AgPT0gJyQnKSB7IFwKLQkJaW50IGhvbGQgPSBuZXh0YXJnOyBcCi0JCWlmIChhcmd0YWJsZSA9PSBOVUxMKSB7IFwKLQkJCWFyZ3RhYmxlID0gc3RhdGFyZ3RhYmxlOyBcCi0JCQlfX2ZpbmRfYXJndW1lbnRzKGZtdDAsIG9yZ2FwLCAmYXJndGFibGUsICZhcmd0YWJsZXNpeik7IFwKLQkJfSBcCi0JCW5leHRhcmcgPSBuMjsgXAotCQl2YWwgPSBHRVRBUkcoaW50KTsgXAotCQluZXh0YXJnID0gaG9sZDsgXAotCQlmbXQgPSArK2NwOyBcCi0JfSBlbHNlIHsgXAotCQl2YWwgPSBHRVRBUkcoaW50KTsgXAotCX0KLQotLyoKLSogR2V0IHRoZSBhcmd1bWVudCBpbmRleGVkIGJ5IG5leHRhcmcuICAgSWYgdGhlIGFyZ3VtZW50IHRhYmxlIGlzCi0qIGJ1aWx0LCB1c2UgaXQgdG8gZ2V0IHRoZSBhcmd1bWVudC4gIElmIGl0cyBub3QsIGdldCB0aGUgbmV4dAotKiBhcmd1bWVudCAoYW5kIGFyZ3VtZW50cyBtdXN0IGJlIGdvdHRlbiBzZXF1ZW50aWFsbHkpLgotKi8KLSNkZWZpbmUgR0VUQVJHKHR5cGUpIFwKLQkoKChhcmd0YWJsZSAhPSBOVUxMKSA/ICh2b2lkKShhcCA9IGFyZ3RhYmxlW25leHRhcmddKSA6ICh2b2lkKTApLCBcCi0JIG5leHRhcmcrKywgdmFfYXJnKGFwLCB0eXBlKSkKLQotCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKLQkvKiBzb3JyeSwgZnByaW50ZihyZWFkX29ubHlfZmlsZSwgIiIpIHJldHVybnMgRU9GLCBub3QgMCAqLwotCWlmIChjYW50d3JpdGUoZnApKSB7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0KLQkvKiBvcHRpbWlzZSBmcHJpbnRmKHN0ZGVycikgKGFuZCBvdGhlciB1bmJ1ZmZlcmVkIFVuaXggZmlsZXMpICovCi0JaWYgKChmcC0+X2ZsYWdzICYgKF9fU05CRnxfX1NXUnxfX1NSVykpID09IChfX1NOQkZ8X19TV1IpICYmCi0JICAgIGZwLT5fZmlsZSA+PSAwKQotCQlyZXR1cm4gKF9fc2JwcmludGYoZnAsIGZtdDAsIGFwKSk7Ci0KLQlmbXQgPSAoY2hhciAqKWZtdDA7Ci0JYXJndGFibGUgPSBOVUxMOwotCW5leHRhcmcgPSAxOwotCXZhX2NvcHkob3JnYXAsIGFwKTsKLQl1aW8udWlvX2lvdiA9IGlvdnAgPSBpb3Y7Ci0JdWlvLnVpb19yZXNpZCA9IDA7Ci0JdWlvLnVpb19pb3ZjbnQgPSAwOwotCXJldCA9IDA7Ci0KLQltZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKLQkvKgotCSAqIFNjYW4gdGhlIGZvcm1hdCBmb3IgY29udmVyc2lvbnMgKGAlJyBjaGFyYWN0ZXIpLgotCSAqLwotCWZvciAoOzspIHsKLQkJY3AgPSBmbXQ7Ci0jaWYgMSAgLyogQklPTklDICovCi0gICAgICAgICAgICAgICAgbiA9IC0xOwotICAgICAgICAgICAgICAgIHdoaWxlICggKHdjID0gKmZtdCkgIT0gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdjID09ICclJykgewotICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBmbXQrKzsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotCQl3aGlsZSAoKG4gPSBtYnJ0b3djKCZ3YywgZm10LCBNQl9DVVJfTUFYLCAmcHMpKSA+IDApIHsKLQkJCWZtdCArPSBuOwotCQkJaWYgKHdjID09ICclJykgewotCQkJCWZtdC0tOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0jZW5kaWYKLQkJaWYgKChtID0gZm10IC0gY3ApICE9IDApIHsKLQkJCVBSSU5UKGNwLCBtKTsKLQkJCXJldCArPSBtOwotCQl9Ci0JCWlmIChuIDw9IDApCi0JCQlnb3RvIGRvbmU7Ci0JCWZtdCsrOwkJLyogc2tpcCBvdmVyICclJyAqLwotCi0JCWZsYWdzID0gMDsKLQkJZHByZWMgPSAwOwotCQl3aWR0aCA9IDA7Ci0JCXByZWMgPSAtMTsKLQkJc2lnbiA9ICdcMCc7Ci0KLXJmbGFnOgkJY2ggPSAqZm10Kys7Ci1yZXN3aXRjaDoJc3dpdGNoIChjaCkgewotCQljYXNlICcgJzoKLQkJCS8qCi0JCQkgKiBgYElmIHRoZSBzcGFjZSBhbmQgKyBmbGFncyBib3RoIGFwcGVhciwgdGhlIHNwYWNlCi0JCQkgKiBmbGFnIHdpbGwgYmUgaWdub3JlZC4nJwotCQkJICoJLS0gQU5TSSBYM0oxMQotCQkJICovCi0JCQlpZiAoIXNpZ24pCi0JCQkJc2lnbiA9ICcgJzsKLQkJCWdvdG8gcmZsYWc7Ci0JCWNhc2UgJyMnOgotCQkJZmxhZ3MgfD0gQUxUOwotCQkJZ290byByZmxhZzsKLQkJY2FzZSAnKic6Ci0JCQkvKgotCQkJICogYGBBIG5lZ2F0aXZlIGZpZWxkIHdpZHRoIGFyZ3VtZW50IGlzIHRha2VuIGFzIGEKLQkJCSAqIC0gZmxhZyBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLicnCi0JCQkgKgktLSBBTlNJIFgzSjExCi0JCQkgKiBUaGV5IGRvbid0IGV4Y2x1ZGUgZmllbGQgd2lkdGhzIHJlYWQgZnJvbSBhcmdzLgotCQkJICovCi0JCQlHRVRBU1RFUih3aWR0aCk7Ci0JCQlpZiAod2lkdGggPj0gMCkKLQkJCQlnb3RvIHJmbGFnOwotCQkJd2lkdGggPSAtd2lkdGg7Ci0JCQkvKiBGQUxMVEhST1VHSCAqLwotCQljYXNlICctJzoKLQkJCWZsYWdzIHw9IExBREpVU1Q7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICcrJzoKLQkJCXNpZ24gPSAnKyc7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICcuJzoKLQkJCWlmICgoY2ggPSAqZm10KyspID09ICcqJykgewotCQkJCUdFVEFTVEVSKG4pOwotCQkJCXByZWMgPSBuIDwgMCA/IC0xIDogbjsKLQkJCQlnb3RvIHJmbGFnOwotCQkJfQotCQkJbiA9IDA7Ci0JCQl3aGlsZSAoaXNfZGlnaXQoY2gpKSB7Ci0JCQkJbiA9IDEwICogbiArIHRvX2RpZ2l0KGNoKTsKLQkJCQljaCA9ICpmbXQrKzsKLQkJCX0KLQkJCWlmIChjaCA9PSAnJCcpIHsKLQkJCQluZXh0YXJnID0gbjsKLQkJCQlpZiAoYXJndGFibGUgPT0gTlVMTCkgewotCQkJCQlhcmd0YWJsZSA9IHN0YXRhcmd0YWJsZTsKLQkJCQkJX19maW5kX2FyZ3VtZW50cyhmbXQwLCBvcmdhcCwKLQkJCQkJICAgICZhcmd0YWJsZSwgJmFyZ3RhYmxlc2l6KTsKLQkJCQl9Ci0JCQkJZ290byByZmxhZzsKLQkJCX0KLQkJCXByZWMgPSBuIDwgMCA/IC0xIDogbjsKLQkJCWdvdG8gcmVzd2l0Y2g7Ci0JCWNhc2UgJzAnOgotCQkJLyoKLQkJCSAqIGBgTm90ZSB0aGF0IDAgaXMgdGFrZW4gYXMgYSBmbGFnLCBub3QgYXMgdGhlCi0JCQkgKiBiZWdpbm5pbmcgb2YgYSBmaWVsZCB3aWR0aC4nJwotCQkJICoJLS0gQU5TSSBYM0oxMQotCQkJICovCi0JCQlmbGFncyB8PSBaRVJPUEFEOwotCQkJZ290byByZmxhZzsKLQkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6Ci0JCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKLQkJCW4gPSAwOwotCQkJZG8gewotCQkJCW4gPSAxMCAqIG4gKyB0b19kaWdpdChjaCk7Ci0JCQkJY2ggPSAqZm10Kys7Ci0JCQl9IHdoaWxlIChpc19kaWdpdChjaCkpOwotCQkJaWYgKGNoID09ICckJykgewotCQkJCW5leHRhcmcgPSBuOwotCQkJCWlmIChhcmd0YWJsZSA9PSBOVUxMKSB7Ci0JCQkJCWFyZ3RhYmxlID0gc3RhdGFyZ3RhYmxlOwotCQkJCQlfX2ZpbmRfYXJndW1lbnRzKGZtdDAsIG9yZ2FwLAotCQkJCQkgICAgJmFyZ3RhYmxlLCAmYXJndGFibGVzaXopOwotCQkJCX0KLQkJCQlnb3RvIHJmbGFnOwotCQkJfQotCQkJd2lkdGggPSBuOwotCQkJZ290byByZXN3aXRjaDsKLSNpZmRlZiBGTE9BVElOR19QT0lOVAotCQljYXNlICdMJzoKLQkJCWZsYWdzIHw9IExPTkdEQkw7Ci0JCQlnb3RvIHJmbGFnOwotI2VuZGlmCi0JCWNhc2UgJ2gnOgotCQkJaWYgKCpmbXQgPT0gJ2gnKSB7Ci0JCQkJZm10Kys7Ci0JCQkJZmxhZ3MgfD0gQ0hBUklOVDsKLQkJCX0gZWxzZSB7Ci0JCQkJZmxhZ3MgfD0gU0hPUlRJTlQ7Ci0JCQl9Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICdqJzoKLQkJCWZsYWdzIHw9IE1BWElOVDsKLQkJCWdvdG8gcmZsYWc7Ci0JCWNhc2UgJ2wnOgotCQkJaWYgKCpmbXQgPT0gJ2wnKSB7Ci0JCQkJZm10Kys7Ci0JCQkJZmxhZ3MgfD0gTExPTkdJTlQ7Ci0JCQl9IGVsc2UgewotCQkJCWZsYWdzIHw9IExPTkdJTlQ7Ci0JCQl9Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICdxJzoKLQkJCWZsYWdzIHw9IExMT05HSU5UOwotCQkJZ290byByZmxhZzsKLQkJY2FzZSAndCc6Ci0JCQlmbGFncyB8PSBQVFJJTlQ7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICd6JzoKLQkJCWZsYWdzIHw9IFNJWkVJTlQ7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICdjJzoKLQkJCSooY3AgPSBidWYpID0gR0VUQVJHKGludCk7Ci0JCQlzaXplID0gMTsKLQkJCXNpZ24gPSAnXDAnOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ0QnOgotCQkJZmxhZ3MgfD0gTE9OR0lOVDsKLQkJCS8qRkFMTFRIUk9VR0gqLwotCQljYXNlICdkJzoKLQkJY2FzZSAnaSc6Ci0JCQlfdW1heCA9IFNBUkcoKTsKLQkJCWlmICgoaW50bWF4X3QpX3VtYXggPCAwKSB7Ci0JCQkJX3VtYXggPSAtX3VtYXg7Ci0JCQkJc2lnbiA9ICctJzsKLQkJCX0KLQkJCWJhc2UgPSBERUM7Ci0JCQlnb3RvIG51bWJlcjsKLSNpZmRlZiBGTE9BVElOR19QT0lOVAotCQljYXNlICdlJzoKLQkJY2FzZSAnRSc6Ci0JCWNhc2UgJ2YnOgotCQljYXNlICdnJzoKLQkJY2FzZSAnRyc6Ci0JCQlpZiAocHJlYyA9PSAtMSkgewotCQkJCXByZWMgPSBERUZQUkVDOwotCQkJfSBlbHNlIGlmICgoY2ggPT0gJ2cnIHx8IGNoID09ICdHJykgJiYgcHJlYyA9PSAwKSB7Ci0JCQkJcHJlYyA9IDE7Ci0JCQl9Ci0KLQkJCWlmIChmbGFncyAmIExPTkdEQkwpIHsKLQkJCQlfZG91YmxlID0gKGRvdWJsZSkgR0VUQVJHKGxvbmcgZG91YmxlKTsKLQkJCX0gZWxzZSB7Ci0JCQkJX2RvdWJsZSA9IEdFVEFSRyhkb3VibGUpOwotCQkJfQotCi0JCQkvKiBkbyB0aGlzIGJlZm9yZSB0cmlja3kgcHJlY2lzaW9uIGNoYW5nZXMgKi8KLQkJCWlmIChfbXlfaXNpbmYoX2RvdWJsZSkpIHsKLQkJCQlpZiAoX2RvdWJsZSA8IDApCi0JCQkJCXNpZ24gPSAnLSc7Ci0JCQkJY3AgPSAiSW5mIjsKLQkJCQlzaXplID0gMzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChfbXlfaXNuYW4oX2RvdWJsZSkpIHsKLQkJCQljcCA9ICJOYU4iOwotCQkJCXNpemUgPSAzOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlmbGFncyB8PSBGUFQ7Ci0JCQljcCA9IGN2dChfZG91YmxlLCBwcmVjLCBmbGFncywgJnNvZnRzaWduLAotCQkJCSZleHB0LCBjaCwgJm5kaWcpOwotCQkgICAgY3BfZnJlZSA9IGNwOwotCQkJaWYgKGNoID09ICdnJyB8fCBjaCA9PSAnRycpIHsKLQkJCQlpZiAoZXhwdCA8PSAtNCB8fCBleHB0ID4gcHJlYykKLQkJCQkJY2ggPSAoY2ggPT0gJ2cnKSA/ICdlJyA6ICdFJzsKLQkJCQllbHNlCi0JCQkJCWNoID0gJ2cnOwotCQkJfQotCQkJaWYgKGNoIDw9ICdlJykgewkvKiAnZScgb3IgJ0UnIGZtdCAqLwotCQkJCS0tZXhwdDsKLQkJCQlleHBzaXplID0gZXhwb25lbnQoZXhwc3RyLCBleHB0LCBjaCk7Ci0JCQkJc2l6ZSA9IGV4cHNpemUgKyBuZGlnOwotCQkJCWlmIChuZGlnID4gMSB8fCBmbGFncyAmIEFMVCkKLQkJCQkJKytzaXplOwotCQkJfSBlbHNlIGlmIChjaCA9PSAnZicpIHsJCS8qIGYgZm10ICovCi0JCQkJaWYgKGV4cHQgPiAwKSB7Ci0JCQkJCXNpemUgPSBleHB0OwotCQkJCQlpZiAocHJlYyB8fCBmbGFncyAmIEFMVCkKLQkJCQkJCXNpemUgKz0gcHJlYyArIDE7Ci0JCQkJfSBlbHNlCS8qICIwLlgiICovCi0JCQkJCXNpemUgPSBwcmVjICsgMjsKLQkJCX0gZWxzZSBpZiAoZXhwdCA+PSBuZGlnKSB7CS8qIGZpeGVkIGcgZm10ICovCi0JCQkJc2l6ZSA9IGV4cHQ7Ci0JCQkJaWYgKGZsYWdzICYgQUxUKQotCQkJCQkrK3NpemU7Ci0JCQl9IGVsc2UKLQkJCQlzaXplID0gbmRpZyArIChleHB0ID4gMCA/Ci0JCQkJCTEgOiAyIC0gZXhwdCk7Ci0KLQkJCWlmIChzb2Z0c2lnbikKLQkJCQlzaWduID0gJy0nOwotCQkJYnJlYWs7Ci0jZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KLS8qIHRoZSBBbmRyb2lkIHNlY3VyaXR5IHRlYW0gc3VnZ2VzdHMgcmVtb3Zpbmcgc3VwcG9ydCBmb3IgJW4KLSAqIHNpbmNlIGl0IGhhcyBubyByZWFsIHByYWN0aWNhbCB2YWx1ZSwgYW5kIGNvdWxkIGxlYWQgdG8KLSAqIHJ1bm5pbmcgbWFsaWNpb3VzIGNvZGUgKGZvciByZWFsbHkgYnVnZ3kgcHJvZ3JhbXMgdGhhdAotICogc2VuZCB0byBwcmludGYoKSB1c2VyLWdlbmVyYXRlZCBmb3JtYXR0aW5nIHN0cmluZ3MpLgotICovCi0jaWYgMAotCQljYXNlICduJzoKLQkJCWlmIChmbGFncyAmIExMT05HSU5UKQotCQkJCSpHRVRBUkcobG9uZyBsb25nICopID0gcmV0OwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HSU5UKQotCQkJCSpHRVRBUkcobG9uZyAqKSA9IHJldDsKLQkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlRJTlQpCi0JCQkJKkdFVEFSRyhzaG9ydCAqKSA9IHJldDsKLQkJCWVsc2UgaWYgKGZsYWdzICYgQ0hBUklOVCkKLQkJCQkqR0VUQVJHKF9fc2lnbmVkIGNoYXIgKikgPSByZXQ7Ci0JCQllbHNlIGlmIChmbGFncyAmIFBUUklOVCkKLQkJCQkqR0VUQVJHKHB0cmRpZmZfdCAqKSA9IHJldDsKLQkJCWVsc2UgaWYgKGZsYWdzICYgU0laRUlOVCkKLQkJCQkqR0VUQVJHKHNzaXplX3QgKikgPSByZXQ7Ci0JCQllbHNlIGlmIChmbGFncyAmIE1BWElOVCkKLQkJCQkqR0VUQVJHKGludG1heF90ICopID0gcmV0OwotCQkJZWxzZQotCQkJCSpHRVRBUkcoaW50ICopID0gcmV0OwotCQkJY29udGludWU7CS8qIG5vIG91dHB1dCAqLwotI2VuZGlmCi0JCWNhc2UgJ08nOgotCQkJZmxhZ3MgfD0gTE9OR0lOVDsKLQkJCS8qRkFMTFRIUk9VR0gqLwotCQljYXNlICdvJzoKLQkJCV91bWF4ID0gVUFSRygpOwotCQkJYmFzZSA9IE9DVDsKLQkJCWdvdG8gbm9zaWduOwotCQljYXNlICdwJzoKLQkJCS8qCi0JCQkgKiBgYFRoZSBhcmd1bWVudCBzaGFsbCBiZSBhIHBvaW50ZXIgdG8gdm9pZC4gIFRoZQotCQkJICogdmFsdWUgb2YgdGhlIHBvaW50ZXIgaXMgY29udmVydGVkIHRvIGEgc2VxdWVuY2UKLQkJCSAqIG9mIHByaW50YWJsZSBjaGFyYWN0ZXJzLCBpbiBhbiBpbXBsZW1lbnRhdGlvbi0KLQkJCSAqIGRlZmluZWQgbWFubmVyLicnCi0JCQkgKgktLSBBTlNJIFgzSjExCi0JCQkgKi8KLQkJCS8qIE5PU1RSSUNUICovCi0JCQlfdW1heCA9ICh1X2xvbmcpR0VUQVJHKHZvaWQgKik7Ci0JCQliYXNlID0gSEVYOwotCQkJeGRpZ3MgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0JCQlmbGFncyB8PSBIRVhQUkVGSVg7Ci0JCQljaCA9ICd4JzsKLQkJCWdvdG8gbm9zaWduOwotCQljYXNlICdzJzoKLQkJCWlmICgoY3AgPSBHRVRBUkcoY2hhciAqKSkgPT0gTlVMTCkKLQkJCQljcCA9ICIobnVsbCkiOwotCQkJaWYgKHByZWMgPj0gMCkgewotCQkJCS8qCi0JCQkJICogY2FuJ3QgdXNlIHN0cmxlbjsgY2FuIG9ubHkgbG9vayBmb3IgdGhlCi0JCQkJICogTlVMIGluIHRoZSBmaXJzdCBgcHJlYycgY2hhcmFjdGVycywgYW5kCi0JCQkJICogc3RybGVuKCkgd2lsbCBnbyBmdXJ0aGVyLgotCQkJCSAqLwotCQkJCWNoYXIgKnAgPSBtZW1jaHIoY3AsIDAsIHByZWMpOwotCi0JCQkJaWYgKHAgIT0gTlVMTCkgewotCQkJCQlzaXplID0gcCAtIGNwOwotCQkJCQlpZiAoc2l6ZSA+IHByZWMpCi0JCQkJCQlzaXplID0gcHJlYzsKLQkJCQl9IGVsc2UKLQkJCQkJc2l6ZSA9IHByZWM7Ci0JCQl9IGVsc2UKLQkJCQlzaXplID0gc3RybGVuKGNwKTsKLQkJCXNpZ24gPSAnXDAnOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ1UnOgotCQkJZmxhZ3MgfD0gTE9OR0lOVDsKLQkJCS8qRkFMTFRIUk9VR0gqLwotCQljYXNlICd1JzoKLQkJCV91bWF4ID0gVUFSRygpOwotCQkJYmFzZSA9IERFQzsKLQkJCWdvdG8gbm9zaWduOwotCQljYXNlICdYJzoKLQkJCXhkaWdzID0gIjAxMjM0NTY3ODlBQkNERUYiOwotCQkJZ290byBoZXg7Ci0JCWNhc2UgJ3gnOgotCQkJeGRpZ3MgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci1oZXg6CQkJX3VtYXggPSBVQVJHKCk7Ci0JCQliYXNlID0gSEVYOwotCQkJLyogbGVhZGluZyAweC9YIG9ubHkgaWYgbm9uLXplcm8gKi8KLQkJCWlmIChmbGFncyAmIEFMVCAmJiBfdW1heCAhPSAwKQotCQkJCWZsYWdzIHw9IEhFWFBSRUZJWDsKLQotCQkJLyogdW5zaWduZWQgY29udmVyc2lvbnMgKi8KLW5vc2lnbjoJCQlzaWduID0gJ1wwJzsKLQkJCS8qCi0JCQkgKiBgYC4uLiBkaW91WHggY29udmVyc2lvbnMgLi4uIGlmIGEgcHJlY2lzaW9uIGlzCi0JCQkgKiBzcGVjaWZpZWQsIHRoZSAwIGZsYWcgd2lsbCBiZSBpZ25vcmVkLicnCi0JCQkgKgktLSBBTlNJIFgzSjExCi0JCQkgKi8KLW51bWJlcjoJCQlpZiAoKGRwcmVjID0gcHJlYykgPj0gMCkKLQkJCQlmbGFncyAmPSB+WkVST1BBRDsKLQotCQkJLyoKLQkJCSAqIGBgVGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGEgemVybyB2YWx1ZSB3aXRoIGFuCi0JCQkgKiBleHBsaWNpdCBwcmVjaXNpb24gb2YgemVybyBpcyBubyBjaGFyYWN0ZXJzLicnCi0JCQkgKgktLSBBTlNJIFgzSjExCi0JCQkgKi8KLQkJCWNwID0gYnVmICsgQlVGOwotCQkJaWYgKF91bWF4ICE9IDAgfHwgcHJlYyAhPSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBVbnNpZ25lZCBtb2QgaXMgaGFyZCwgYW5kIHVuc2lnbmVkIG1vZAotCQkJCSAqIGJ5IGEgY29uc3RhbnQgaXMgZWFzaWVyIHRoYW4gdGhhdCBieQotCQkJCSAqIGEgdmFyaWFibGU7IGhlbmNlIHRoaXMgc3dpdGNoLgotCQkJCSAqLwotCQkJCXN3aXRjaCAoYmFzZSkgewotCQkJCWNhc2UgT0NUOgotCQkJCQlkbyB7Ci0JCQkJCQkqLS1jcCA9IHRvX2NoYXIoX3VtYXggJiA3KTsKLQkJCQkJCV91bWF4ID4+PSAzOwotCQkJCQl9IHdoaWxlIChfdW1heCk7Ci0JCQkJCS8qIGhhbmRsZSBvY3RhbCBsZWFkaW5nIDAgKi8KLQkJCQkJaWYgKGZsYWdzICYgQUxUICYmICpjcCAhPSAnMCcpCi0JCQkJCQkqLS1jcCA9ICcwJzsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIERFQzoKLQkJCQkJLyogbWFueSBudW1iZXJzIGFyZSAxIGRpZ2l0ICovCi0JCQkJCXdoaWxlIChfdW1heCA+PSAxMCkgewotCQkJCQkJKi0tY3AgPSB0b19jaGFyKF91bWF4ICUgMTApOwotCQkJCQkJX3VtYXggLz0gMTA7Ci0JCQkJCX0KLQkJCQkJKi0tY3AgPSB0b19jaGFyKF91bWF4KTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIEhFWDoKLQkJCQkJZG8gewotCQkJCQkJKi0tY3AgPSB4ZGlnc1tfdW1heCAmIDE1XTsKLQkJCQkJCV91bWF4ID4+PSA0OwotCQkJCQl9IHdoaWxlIChfdW1heCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJZGVmYXVsdDoKLQkJCQkJY3AgPSAiYnVnIGluIHZmcHJpbnRmOiBiYWQgYmFzZSI7Ci0JCQkJCXNpemUgPSBzdHJsZW4oY3ApOwotCQkJCQlnb3RvIHNraXBzaXplOwotCQkJCX0KLQkJCX0KLQkJCXNpemUgPSBidWYgKyBCVUYgLSBjcDsKLQkJc2tpcHNpemU6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoJLyogIiU/IiBwcmludHMgPywgdW5sZXNzID8gaXMgTlVMICovCi0JCQlpZiAoY2ggPT0gJ1wwJykKLQkJCQlnb3RvIGRvbmU7Ci0JCQkvKiBwcmV0ZW5kIGl0IHdhcyAlYyB3aXRoIGFyZ3VtZW50IGNoICovCi0JCQljcCA9IGJ1ZjsKLQkJCSpjcCA9IGNoOwotCQkJc2l6ZSA9IDE7Ci0JCQlzaWduID0gJ1wwJzsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyoKLQkJICogQWxsIHJlYXNvbmFibGUgZm9ybWF0cyB3aW5kIHVwIGhlcmUuICBBdCB0aGlzIHBvaW50LCBgY3AnCi0JCSAqIHBvaW50cyB0byBhIHN0cmluZyB3aGljaCAoaWYgbm90IGZsYWdzJkxBREpVU1QpIHNob3VsZCBiZQotCQkgKiBwYWRkZWQgb3V0IHRvIGB3aWR0aCcgcGxhY2VzLiAgSWYgZmxhZ3MmWkVST1BBRCwgaXQgc2hvdWxkCi0JCSAqIGZpcnN0IGJlIHByZWZpeGVkIGJ5IGFueSBzaWduIG9yIG90aGVyIHByZWZpeDsgb3RoZXJ3aXNlLAotCQkgKiBpdCBzaG91bGQgYmUgYmxhbmsgcGFkZGVkIGJlZm9yZSB0aGUgcHJlZml4IGlzIGVtaXR0ZWQuCi0JCSAqIEFmdGVyIGFueSBsZWZ0LWhhbmQgcGFkZGluZyBhbmQgcHJlZml4aW5nLCBlbWl0IHplcm9lcwotCQkgKiByZXF1aXJlZCBieSBhIGRlY2ltYWwgW2Rpb3V4WF0gcHJlY2lzaW9uLCB0aGVuIHByaW50IHRoZQotCQkgKiBzdHJpbmcgcHJvcGVyLCB0aGVuIGVtaXQgemVyb2VzIHJlcXVpcmVkIGJ5IGFueSBsZWZ0b3ZlcgotCQkgKiBmbG9hdGluZyBwcmVjaXNpb247IGZpbmFsbHksIGlmIExBREpVU1QsIHBhZCB3aXRoIGJsYW5rcy4KLQkJICoKLQkJICogQ29tcHV0ZSBhY3R1YWwgc2l6ZSwgc28gd2Uga25vdyBob3cgbXVjaCB0byBwYWQuCi0JCSAqIHNpemUgZXhjbHVkZXMgZGVjaW1hbCBwcmVjOyByZWFsc3ogaW5jbHVkZXMgaXQuCi0JCSAqLwotCQlyZWFsc3ogPSBkcHJlYyA+IHNpemUgPyBkcHJlYyA6IHNpemU7Ci0JCWlmIChzaWduKQotCQkJcmVhbHN6Kys7Ci0JCWVsc2UgaWYgKGZsYWdzICYgSEVYUFJFRklYKQotCQkJcmVhbHN6Kz0gMjsKLQotCQkvKiByaWdodC1hZGp1c3RpbmcgYmxhbmsgcGFkZGluZyAqLwotCQlpZiAoKGZsYWdzICYgKExBREpVU1R8WkVST1BBRCkpID09IDApCi0JCQlQQUQod2lkdGggLSByZWFsc3osIGJsYW5rcyk7Ci0KLQkJLyogcHJlZml4ICovCi0JCWlmIChzaWduKSB7Ci0JCQlQUklOVCgmc2lnbiwgMSk7Ci0JCX0gZWxzZSBpZiAoZmxhZ3MgJiBIRVhQUkVGSVgpIHsKLQkJCW94WzBdID0gJzAnOwotCQkJb3hbMV0gPSBjaDsKLQkJCVBSSU5UKG94LCAyKTsKLQkJfQotCi0JCS8qIHJpZ2h0LWFkanVzdGluZyB6ZXJvIHBhZGRpbmcgKi8KLQkJaWYgKChmbGFncyAmIChMQURKVVNUfFpFUk9QQUQpKSA9PSBaRVJPUEFEKQotCQkJUEFEKHdpZHRoIC0gcmVhbHN6LCB6ZXJvZXMpOwotCi0JCS8qIGxlYWRpbmcgemVyb2VzIGZyb20gZGVjaW1hbCBwcmVjaXNpb24gKi8KLQkJUEFEKGRwcmVjIC0gc2l6ZSwgemVyb2VzKTsKLQotCQkvKiB0aGUgc3RyaW5nIG9yIG51bWJlciBwcm9wZXIgKi8KLSNpZmRlZiBGTE9BVElOR19QT0lOVAotCQlpZiAoKGZsYWdzICYgRlBUKSA9PSAwKSB7Ci0JCQlQUklOVChjcCwgc2l6ZSk7Ci0JCX0gZWxzZSB7CS8qIGdsdWUgdG9nZXRoZXIgZl9wIGZyYWdtZW50cyAqLwotCQkJaWYgKGNoID49ICdmJykgewkvKiAnZicgb3IgJ2cnICovCi0JCQkJaWYgKF9kb3VibGUgPT0gMCkgewotCQkJCQkvKiBrbHVkZ2UgZm9yIF9fZHRvYSBpcnJlZ3VsYXJpdHkgKi8KLQkJCQkJUFJJTlQoIjAiLCAxKTsKLQkJCQkJaWYgKGV4cHQgPCBuZGlnIHx8IChmbGFncyAmIEFMVCkgIT0gMCkgewotCQkJCQkJUFJJTlQoZGVjaW1hbF9wb2ludCwgMSk7Ci0JCQkJCQlQQUQobmRpZyAtIDEsIHplcm9lcyk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgaWYgKGV4cHQgPD0gMCkgewotCQkJCQlQUklOVCgiMCIsIDEpOwotCQkJCQlQUklOVChkZWNpbWFsX3BvaW50LCAxKTsKLQkJCQkJUEFEKC1leHB0LCB6ZXJvZXMpOwotCQkJCQlQUklOVChjcCwgbmRpZyk7Ci0JCQkJfSBlbHNlIGlmIChleHB0ID49IG5kaWcpIHsKLQkJCQkJUFJJTlQoY3AsIG5kaWcpOwotCQkJCQlQQUQoZXhwdCAtIG5kaWcsIHplcm9lcyk7Ci0JCQkJCWlmIChmbGFncyAmIEFMVCkKLQkJCQkJCVBSSU5UKCIuIiwgMSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJUFJJTlQoY3AsIGV4cHQpOwotCQkJCQljcCArPSBleHB0OwotCQkJCQlQUklOVCgiLiIsIDEpOwotCQkJCQlQUklOVChjcCwgbmRpZy1leHB0KTsKLQkJCQl9Ci0JCQl9IGVsc2UgewkvKiAnZScgb3IgJ0UnICovCi0JCQkJaWYgKG5kaWcgPiAxIHx8IGZsYWdzICYgQUxUKSB7Ci0JCQkJCW94WzBdID0gKmNwKys7Ci0JCQkJCW94WzFdID0gJy4nOwotCQkJCQlQUklOVChveCwgMik7Ci0JCQkJCWlmIChfZG91YmxlKSB7Ci0JCQkJCQlQUklOVChjcCwgbmRpZy0xKTsKLQkJCQkJfSBlbHNlCS8qIDAuWzAuLl0gKi8KLQkJCQkJCS8qIF9fZHRvYSBpcnJlZ3VsYXJpdHkgKi8KLQkJCQkJCVBBRChuZGlnIC0gMSwgemVyb2VzKTsKLQkJCQl9IGVsc2UJLyogWGVZWVkgKi8KLQkJCQkJUFJJTlQoY3AsIDEpOwotCQkJCVBSSU5UKGV4cHN0ciwgZXhwc2l6ZSk7Ci0JCQl9Ci0JCX0KLSNlbHNlCi0JCVBSSU5UKGNwLCBzaXplKTsKLSNlbmRpZgotCQkvKiBsZWZ0LWFkanVzdGluZyBwYWRkaW5nIChhbHdheXMgYmxhbmspICovCi0JCWlmIChmbGFncyAmIExBREpVU1QpCi0JCQlQQUQod2lkdGggLSByZWFsc3osIGJsYW5rcyk7Ci0KLQkJLyogZmluYWxseSwgYWRqdXN0IHJldCAqLwotCQlyZXQgKz0gd2lkdGggPiByZWFsc3ogPyB3aWR0aCA6IHJlYWxzejsKLQotCQlGTFVTSCgpOwkvKiBjb3B5IG91dCB0aGUgSS9PIHZlY3RvcnMgKi8KLSNpZiAxICAgLyogQklPTklDOiByZW1vdmUgbWVtb3J5IGxlYWsgd2hlbiBwcmludGluZyBkb3VibGVzICovCi0JCWlmIChjcF9mcmVlKSB7Ci0JCSAgZnJlZShjcF9mcmVlKTsKLQkJICBjcF9mcmVlID0gTlVMTDsKLQkJfQotI2VuZGlmCi0JfQotZG9uZToKLQlGTFVTSCgpOwotZXJyb3I6Ci0jaWYgMSAgIC8qIEJJT05JQzogcmVtb3ZlIG1lbW9yeSBsZWFrIHdoZW4gcHJpbnRpbmcgZG91YmxlcyAqLwotICAgIGlmIChjcF9mcmVlKSB7Ci0gICAgICAgIGZyZWUoY3BfZnJlZSk7Ci0gICAgICAgIGNwX2ZyZWUgPSBOVUxMOwotICAgIH0KLSNlbmRpZgotCWlmIChhcmd0YWJsZSAhPSBOVUxMICYmIGFyZ3RhYmxlICE9IHN0YXRhcmd0YWJsZSkgewotCQltdW5tYXAoYXJndGFibGUsIGFyZ3RhYmxlc2l6KTsKLQkJYXJndGFibGUgPSBOVUxMOwotCX0KLSAgICAgICAgdmFfZW5kKG9yZ2FwKTsKLQlyZXR1cm4gKF9fc2ZlcnJvcihmcCkgPyBFT0YgOiByZXQpOwotCS8qIE5PVFJFQUNIRUQgKi8KLX0KLQotLyoKLSAqIFR5cGUgaWRzIGZvciBhcmd1bWVudCB0eXBlIHRhYmxlLgotICovCi0jZGVmaW5lIFRfVU5VU0VECTAKLSNkZWZpbmUgVF9TSE9SVAkJMQotI2RlZmluZSBUX1VfU0hPUlQJMgotI2RlZmluZSBUUF9TSE9SVAkzCi0jZGVmaW5lIFRfSU5UCQk0Ci0jZGVmaW5lIFRfVV9JTlQJCTUKLSNkZWZpbmUgVFBfSU5UCQk2Ci0jZGVmaW5lIFRfTE9ORwkJNwotI2RlZmluZSBUX1VfTE9ORwk4Ci0jZGVmaW5lIFRQX0xPTkcJCTkKLSNkZWZpbmUgVF9MTE9ORwkJMTAKLSNkZWZpbmUgVF9VX0xMT05HCTExCi0jZGVmaW5lIFRQX0xMT05HCTEyCi0jZGVmaW5lIFRfRE9VQkxFCTEzCi0jZGVmaW5lIFRfTE9OR19ET1VCTEUJMTQKLSNkZWZpbmUgVFBfQ0hBUgkJMTUKLSNkZWZpbmUgVFBfVk9JRAkJMTYKLSNkZWZpbmUgVF9QVFJJTlQJMTcKLSNkZWZpbmUgVFBfUFRSSU5UCTE4Ci0jZGVmaW5lIFRfU0laRUlOVAkxOQotI2RlZmluZSBUX1NTSVpFSU5UCTIwCi0jZGVmaW5lIFRQX1NTSVpFSU5UCTIxCi0jZGVmaW5lIFRfTUFYSU5UCTIyCi0jZGVmaW5lIFRfTUFYVUlOVAkyMwotI2RlZmluZSBUUF9NQVhJTlQJMjQKLQotLyoKLSAqIEZpbmQgYWxsIGFyZ3VtZW50cyB3aGVuIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIgaXMgZW5jb3VudGVyZWQuICBSZXR1cm5zIGEKLSAqIHRhYmxlLCBpbmRleGVkIGJ5IGFyZ3VtZW50IG51bWJlciwgb2YgcG9pbnRlcnMgdG8gZWFjaCBhcmd1bWVudHMuICBUaGUKLSAqIGluaXRpYWwgYXJndW1lbnQgdGFibGUgc2hvdWxkIGJlIGFuIGFycmF5IG9mIFNUQVRJQ19BUkdfVEJMX1NJWkUgZW50cmllcy4KLSAqIEl0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIG1tYXAtZWQgb25lIGlmIGl0IG92ZXJmbG93cyAobWFsbG9jIGNhbm5vdCBiZQotICogdXNlZCBzaW5jZSB3ZSBhcmUgYXR0ZW1wdGluZyB0byBtYWtlIHNucHJpbnRmIHRocmVhZCBzYWZlLCBhbmQgYWxsb2NhIGlzCi0gKiBwcm9ibGVtYXRpYyBzaW5jZSB3ZSBoYXZlIG5lc3RlZCBmdW5jdGlvbnMuLikKLSAqLwotc3RhdGljIHZvaWQKLV9fZmluZF9hcmd1bWVudHMoY29uc3QgY2hhciAqZm10MCwgdmFfbGlzdCBhcCwgdmFfbGlzdCAqKmFyZ3RhYmxlLAotICAgIHNpemVfdCAqYXJndGFibGVzaXopCi17Ci0JY2hhciAqZm10OwkvKiBmb3JtYXQgc3RyaW5nICovCi0JaW50IGNoOwkvKiBjaGFyYWN0ZXIgZnJvbSBmbXQgKi8KLQlpbnQgbiwgbjI7CS8qIGhhbmR5IGludGVnZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCi0JY2hhciAqY3A7CS8qIGhhbmR5IGNoYXIgcG9pbnRlciAoc2hvcnQgdGVybSB1c2FnZSkgKi8KLQlpbnQgZmxhZ3M7CS8qIGZsYWdzIGFzIGFib3ZlICovCi0JdW5zaWduZWQgY2hhciAqdHlwZXRhYmxlOyAvKiB0YWJsZSBvZiB0eXBlcyAqLwotCXVuc2lnbmVkIGNoYXIgc3RhdHR5cGV0YWJsZVtTVEFUSUNfQVJHX1RCTF9TSVpFXTsKLQlpbnQgdGFibGVzaXplOwkJLyogY3VycmVudCBzaXplIG9mIHR5cGUgdGFibGUgKi8KLQlpbnQgdGFibGVtYXg7CQkvKiBsYXJnZXN0IHVzZWQgaW5kZXggaW4gdGFibGUgKi8KLQlpbnQgbmV4dGFyZzsJCS8qIDEtYmFzZWQgYXJndW1lbnQgaW5kZXggKi8KLQl3Y2hhcl90IHdjOwotCXZvaWQqIHBzOwotCi0JLyoKLQkgKiBBZGQgYW4gYXJndW1lbnQgdHlwZSB0byB0aGUgdGFibGUsIGV4cGFuZGluZyBpZiBuZWNlc3NhcnkuCi0JICovCi0jZGVmaW5lIEFERFRZUEUodHlwZSkgXAotCSgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gXAotCQlfX2dyb3dfdHlwZV90YWJsZSgmdHlwZXRhYmxlLCAmdGFibGVzaXplKSA6IDAsIFwKLQkobmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIFwKLQl0eXBldGFibGVbbmV4dGFyZysrXSA9IHR5cGUpCi0KLSNkZWZpbmUJQUREU0FSRygpIFwKLSAgICAgICAgKChmbGFncyZNQVhJTlQpID8gQUREVFlQRShUX01BWElOVCkgOiBcCi0JICAgICgoZmxhZ3MmUFRSSU5UKSA/IEFERFRZUEUoVF9QVFJJTlQpIDogXAotCSAgICAoKGZsYWdzJlNJWkVJTlQpID8gQUREVFlQRShUX1NTSVpFSU5UKSA6IFwKLQkgICAgKChmbGFncyZMTE9OR0lOVCkgPyBBRERUWVBFKFRfTExPTkcpIDogXAotCSAgICAoKGZsYWdzJkxPTkdJTlQpID8gQUREVFlQRShUX0xPTkcpIDogXAotCSAgICAoKGZsYWdzJlNIT1JUSU5UKSA/IEFERFRZUEUoVF9TSE9SVCkgOiBBRERUWVBFKFRfSU5UKSkpKSkpKQotCi0jZGVmaW5lCUFERFVBUkcoKSBcCi0gICAgICAgICgoZmxhZ3MmTUFYSU5UKSA/IEFERFRZUEUoVF9NQVhVSU5UKSA6IFwKLQkgICAgKChmbGFncyZQVFJJTlQpID8gQUREVFlQRShUX1BUUklOVCkgOiBcCi0JICAgICgoZmxhZ3MmU0laRUlOVCkgPyBBRERUWVBFKFRfU0laRUlOVCkgOiBcCi0JICAgICgoZmxhZ3MmTExPTkdJTlQpID8gQUREVFlQRShUX1VfTExPTkcpIDogXAotCSAgICAoKGZsYWdzJkxPTkdJTlQpID8gQUREVFlQRShUX1VfTE9ORykgOiBcCi0JICAgICgoZmxhZ3MmU0hPUlRJTlQpID8gQUREVFlQRShUX1VfU0hPUlQpIDogQUREVFlQRShUX1VfSU5UKSkpKSkpKQotCi0JLyoKLQkgKiBBZGQgKiBhcmd1bWVudHMgdG8gdGhlIHR5cGUgYXJyYXkuCi0JICovCi0jZGVmaW5lIEFEREFTVEVSKCkgXAotCW4yID0gMDsgXAotCWNwID0gZm10OyBcCi0Jd2hpbGUgKGlzX2RpZ2l0KCpjcCkpIHsgXAotCQluMiA9IDEwICogbjIgKyB0b19kaWdpdCgqY3ApOyBcCi0JCWNwKys7IFwKLQl9IFwKLQlpZiAoKmNwID09ICckJykgeyBcCi0JCWludCBob2xkID0gbmV4dGFyZzsgXAotCQluZXh0YXJnID0gbjI7IFwKLQkJQUREVFlQRShUX0lOVCk7IFwKLQkJbmV4dGFyZyA9IGhvbGQ7IFwKLQkJZm10ID0gKytjcDsgXAotCX0gZWxzZSB7IFwKLQkJQUREVFlQRShUX0lOVCk7IFwKLQl9Ci0JZm10ID0gKGNoYXIgKilmbXQwOwotCXR5cGV0YWJsZSA9IHN0YXR0eXBldGFibGU7Ci0JdGFibGVzaXplID0gU1RBVElDX0FSR19UQkxfU0laRTsKLQl0YWJsZW1heCA9IDA7Ci0JbmV4dGFyZyA9IDE7Ci0JbWVtc2V0KHR5cGV0YWJsZSwgVF9VTlVTRUQsIFNUQVRJQ19BUkdfVEJMX1NJWkUpOwotCW1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOwotCi0JLyoKLQkgKiBTY2FuIHRoZSBmb3JtYXQgZm9yIGNvbnZlcnNpb25zIChgJScgY2hhcmFjdGVyKS4KLQkgKi8KLQlmb3IgKDs7KSB7Ci0JCWNwID0gZm10OwotI2lmIDEgIC8qIEJJT05JQyAqLwotICAgICAgICAgICAgICAgIG4gPSAtMTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKHdjID0gKmZtdCkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAod2MgPT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZtdCsrOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0JCXdoaWxlICgobiA9IG1icnRvd2MoJndjLCBmbXQsIE1CX0NVUl9NQVgsICZwcykpID4gMCkgewotCQkJZm10ICs9IG47Ci0JCQlpZiAod2MgPT0gJyUnKSB7Ci0JCQkJZm10LS07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQlpZiAobiA8PSAwKQotCQkJZ290byBkb25lOwotCQlmbXQrKzsJCS8qIHNraXAgb3ZlciAnJScgKi8KLQotCQlmbGFncyA9IDA7Ci0KLXJmbGFnOgkJY2ggPSAqZm10Kys7Ci1yZXN3aXRjaDoJc3dpdGNoIChjaCkgewotCQljYXNlICcgJzoKLQkJY2FzZSAnIyc6Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICcqJzoKLQkJCUFEREFTVEVSKCk7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICctJzoKLQkJY2FzZSAnKyc6Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICcuJzoKLQkJCWlmICgoY2ggPSAqZm10KyspID09ICcqJykgewotCQkJCUFEREFTVEVSKCk7Ci0JCQkJZ290byByZmxhZzsKLQkJCX0KLQkJCXdoaWxlIChpc19kaWdpdChjaCkpIHsKLQkJCQljaCA9ICpmbXQrKzsKLQkJCX0KLQkJCWdvdG8gcmVzd2l0Y2g7Ci0JCWNhc2UgJzAnOgotCQkJZ290byByZmxhZzsKLQkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6Ci0JCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKLQkJCW4gPSAwOwotCQkJZG8gewotCQkJCW4gPSAxMCAqIG4gKyB0b19kaWdpdChjaCk7Ci0JCQkJY2ggPSAqZm10Kys7Ci0JCQl9IHdoaWxlIChpc19kaWdpdChjaCkpOwotCQkJaWYgKGNoID09ICckJykgewotCQkJCW5leHRhcmcgPSBuOwotCQkJCWdvdG8gcmZsYWc7Ci0JCQl9Ci0JCQlnb3RvIHJlc3dpdGNoOwotI2lmZGVmIEZMT0FUSU5HX1BPSU5UCi0JCWNhc2UgJ0wnOgotCQkJZmxhZ3MgfD0gTE9OR0RCTDsKLQkJCWdvdG8gcmZsYWc7Ci0jZW5kaWYKLQkJY2FzZSAnaCc6Ci0JCQlpZiAoKmZtdCA9PSAnaCcpIHsKLQkJCQlmbXQrKzsKLQkJCQlmbGFncyB8PSBDSEFSSU5UOwotCQkJfSBlbHNlIHsKLQkJCQlmbGFncyB8PSBTSE9SVElOVDsKLQkJCX0KLQkJCWdvdG8gcmZsYWc7Ci0JCWNhc2UgJ2wnOgotCQkJaWYgKCpmbXQgPT0gJ2wnKSB7Ci0JCQkJZm10Kys7Ci0JCQkJZmxhZ3MgfD0gTExPTkdJTlQ7Ci0JCQl9IGVsc2UgewotCQkJCWZsYWdzIHw9IExPTkdJTlQ7Ci0JCQl9Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICdxJzoKLQkJCWZsYWdzIHw9IExMT05HSU5UOwotCQkJZ290byByZmxhZzsKLQkJY2FzZSAndCc6Ci0JCQlmbGFncyB8PSBQVFJJTlQ7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICd6JzoKLQkJCWZsYWdzIHw9IFNJWkVJTlQ7Ci0JCQlnb3RvIHJmbGFnOwotCQljYXNlICdjJzoKLQkJCUFERFRZUEUoVF9JTlQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ0QnOgotCQkJZmxhZ3MgfD0gTE9OR0lOVDsKLQkJCS8qRkFMTFRIUk9VR0gqLwotCQljYXNlICdkJzoKLQkJY2FzZSAnaSc6Ci0JCQlBRERTQVJHKCk7Ci0JCQlicmVhazsKLSNpZmRlZiBGTE9BVElOR19QT0lOVAotCQljYXNlICdlJzoKLQkJY2FzZSAnRSc6Ci0JCWNhc2UgJ2YnOgotCQljYXNlICdnJzoKLQkJY2FzZSAnRyc6Ci0JCQlpZiAoZmxhZ3MgJiBMT05HREJMKQotCQkJCUFERFRZUEUoVF9MT05HX0RPVUJMRSk7Ci0JCQllbHNlCi0JCQkJQUREVFlQRShUX0RPVUJMRSk7Ci0JCQlicmVhazsKLSNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLwotCQljYXNlICduJzoKLQkJCWlmIChmbGFncyAmIExMT05HSU5UKQotCQkJCUFERFRZUEUoVFBfTExPTkcpOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HSU5UKQotCQkJCUFERFRZUEUoVFBfTE9ORyk7Ci0JCQllbHNlIGlmIChmbGFncyAmIFNIT1JUSU5UKQotCQkJCUFERFRZUEUoVFBfU0hPUlQpOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCi0JCQkJQUREVFlQRShUUF9QVFJJTlQpOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSVpFSU5UKQotCQkJCUFERFRZUEUoVFBfU1NJWkVJTlQpOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCi0JCQkJQUREVFlQRShUUF9NQVhJTlQpOwotCQkJZWxzZQotCQkJCUFERFRZUEUoVFBfSU5UKTsKLQkJCWNvbnRpbnVlOwkvKiBubyBvdXRwdXQgKi8KLQkJY2FzZSAnTyc6Ci0JCQlmbGFncyB8PSBMT05HSU5UOwotCQkJLypGQUxMVEhST1VHSCovCi0JCWNhc2UgJ28nOgotCQkJQUREVUFSRygpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ3AnOgotCQkJQUREVFlQRShUUF9WT0lEKTsKLQkJCWJyZWFrOwotCQljYXNlICdzJzoKLQkJCUFERFRZUEUoVFBfQ0hBUik7Ci0JCQlicmVhazsKLQkJY2FzZSAnVSc6Ci0JCQlmbGFncyB8PSBMT05HSU5UOwotCQkJLypGQUxMVEhST1VHSCovCi0JCWNhc2UgJ3UnOgotCQljYXNlICdYJzoKLQkJY2FzZSAneCc6Ci0JCQlBRERVQVJHKCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoJLyogIiU/IiBwcmludHMgPywgdW5sZXNzID8gaXMgTlVMICovCi0JCQlpZiAoY2ggPT0gJ1wwJykKLQkJCQlnb3RvIGRvbmU7Ci0JCQlicmVhazsKLQkJfQotCX0KLWRvbmU6Ci0JLyoKLQkgKiBCdWlsZCB0aGUgYXJndW1lbnQgdGFibGUuCi0JICovCi0JaWYgKHRhYmxlbWF4ID49IFNUQVRJQ19BUkdfVEJMX1NJWkUpIHsKLQkJKmFyZ3RhYmxlc2l6ID0gc2l6ZW9mICh2YV9saXN0KSAqICh0YWJsZW1heCArIDEpOwotCQkqYXJndGFibGUgPSAodmFfbGlzdCAqKW1tYXAoTlVMTCwgKmFyZ3RhYmxlc2l6LAotCQkgICAgUFJPVF9XUklURXxQUk9UX1JFQUQsIE1BUF9BTk9OfE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JfQotCi0jaWYgMAotCS8qIFhYWCBpcyB0aGlzIHJlcXVpcmVkPyAqLwotCSgqYXJndGFibGUpIFswXSA9IE5VTEw7Ci0jZW5kaWYKLQlmb3IgKG4gPSAxOyBuIDw9IHRhYmxlbWF4OyBuKyspIHsKLQkJdmFfY29weSgoKmFyZ3RhYmxlKVtuXSwgYXApOwotCQlzd2l0Y2ggKHR5cGV0YWJsZVtuXSkgewotCQljYXNlIFRfVU5VU0VEOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgaW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFRfU0hPUlQ6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCBpbnQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVF9VX1NIT1JUOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgaW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFRQX1NIT1JUOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgc2hvcnQgKik7Ci0JCQlicmVhazsKLQkJY2FzZSBUX0lOVDoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGludCk7Ci0JCQlicmVhazsKLQkJY2FzZSBUX1VfSU5UOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgdW5zaWduZWQgaW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFRQX0lOVDoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGludCAqKTsKLQkJCWJyZWFrOwotCQljYXNlIFRfTE9ORzoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGxvbmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVF9VX0xPTkc6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nKTsKLQkJCWJyZWFrOwotCQljYXNlIFRQX0xPTkc6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCBsb25nICopOwotCQkJYnJlYWs7Ci0JCWNhc2UgVF9MTE9ORzoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGxvbmcgbG9uZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBUX1VfTExPTkc6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nIGxvbmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVFBfTExPTkc6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCBsb25nIGxvbmcgKik7Ci0JCQlicmVhazsKLQkJY2FzZSBUX0RPVUJMRToKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGRvdWJsZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBUX0xPTkdfRE9VQkxFOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgbG9uZyBkb3VibGUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVFBfQ0hBUjoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIGNoYXIgKik7Ci0JCQlicmVhazsKLQkJY2FzZSBUUF9WT0lEOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgdm9pZCAqKTsKLQkJCWJyZWFrOwotCQljYXNlIFRfUFRSSU5UOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgcHRyZGlmZl90KTsKLQkJCWJyZWFrOwotCQljYXNlIFRQX1BUUklOVDoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIHB0cmRpZmZfdCAqKTsKLQkJCWJyZWFrOwotCQljYXNlIFRfU0laRUlOVDoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIHNpemVfdCk7Ci0JCQlicmVhazsKLQkJY2FzZSBUX1NTSVpFSU5UOgotCQkJKHZvaWQpIHZhX2FyZyhhcCwgc3NpemVfdCk7Ci0JCQlicmVhazsKLQkJY2FzZSBUUF9TU0laRUlOVDoKLQkJCSh2b2lkKSB2YV9hcmcoYXAsIHNzaXplX3QgKik7Ci0JCQlicmVhazsKLQkJY2FzZSBUUF9NQVhJTlQ6Ci0JCQkodm9pZCkgdmFfYXJnKGFwLCBpbnRtYXhfdCAqKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKHR5cGV0YWJsZSAhPSBOVUxMICYmIHR5cGV0YWJsZSAhPSBzdGF0dHlwZXRhYmxlKSB7Ci0JCW11bm1hcCh0eXBldGFibGUsICphcmd0YWJsZXNpeik7Ci0JCXR5cGV0YWJsZSA9IE5VTEw7Ci0JfQotfQotCi0vKgotICogSW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHR5cGUgdGFibGUuCi0gKi8KLXN0YXRpYyBpbnQKLV9fZ3Jvd190eXBlX3RhYmxlKHVuc2lnbmVkIGNoYXIgKip0eXBldGFibGUsIGludCAqdGFibGVzaXplKQotewotCXVuc2lnbmVkIGNoYXIgKm9sZHRhYmxlID0gKnR5cGV0YWJsZTsKLQlpbnQgbmV3c2l6ZSA9ICp0YWJsZXNpemUgKiAyOwotCi0JaWYgKCp0YWJsZXNpemUgPT0gU1RBVElDX0FSR19UQkxfU0laRSkgewotCQkqdHlwZXRhYmxlID0gKHVuc2lnbmVkIGNoYXIgKiltbWFwKE5VTEwsCi0JCSAgICBzaXplb2YgKHVuc2lnbmVkIGNoYXIpICogbmV3c2l6ZSwgUFJPVF9XUklURXxQUk9UX1JFQUQsCi0JCSAgICBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIDApOwotCQkvKiBYWFggdW5jaGVja2VkICovCi0JCW1lbWNweSggKnR5cGV0YWJsZSwgb2xkdGFibGUsICp0YWJsZXNpemUpOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGNoYXIgKm5ldyA9ICh1bnNpZ25lZCBjaGFyICopbW1hcChOVUxMLAotCQkgICAgc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSAqIG5ld3NpemUsIFBST1RfV1JJVEV8UFJPVF9SRUFELAotCQkgICAgTUFQX0FOT058TUFQX1BSSVZBVEUsIC0xLCAwKTsKLQkJbWVtbW92ZShuZXcsICp0eXBldGFibGUsICp0YWJsZXNpemUpOwotCQltdW5tYXAoKnR5cGV0YWJsZSwgKnRhYmxlc2l6ZSk7Ci0JCSp0eXBldGFibGUgPSBuZXc7Ci0JCS8qIFhYWCB1bmNoZWNrZWQgKi8KLQl9Ci0JbWVtc2V0KCp0eXBldGFibGUgKyAqdGFibGVzaXplLCBUX1VOVVNFRCwgKG5ld3NpemUgLSAqdGFibGVzaXplKSk7Ci0KLQkqdGFibGVzaXplID0gbmV3c2l6ZTsKLQlyZXR1cm4oMCk7Ci19Ci0KLQotI2lmZGVmIEZMT0FUSU5HX1BPSU5UCi0KLWV4dGVybiBjaGFyICpfX2R0b2EoZG91YmxlLCBpbnQsIGludCwgaW50ICosIGludCAqLCBjaGFyICoqKTsKLQotc3RhdGljIGNoYXIgKgotY3Z0KGRvdWJsZSB2YWx1ZSwgaW50IG5kaWdpdHMsIGludCBmbGFncywgY2hhciAqc2lnbiwgaW50ICpkZWNwdCwgaW50IGNoLAotICAgIGludCAqbGVuZ3RoKQotewotCWludCBtb2RlLCBkc2duOwotCWNoYXIgKmRpZ2l0cywgKmJwLCAqcnZlOwotCi0JaWYgKGNoID09ICdmJykgewotCQltb2RlID0gMzsJCS8qIG5kaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgKi8KLQl9IGVsc2UgewotCQkvKiBUbyBvYnRhaW4gbmRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBmb3IgdGhlICdlJwotCQkgKiBhbmQgJ0UnIGZvcm1hdHMsIHJvdW5kIHRvIG5kaWdpdHMgKyAxIHNpZ25pZmljYW50Ci0JCSAqIGZpZ3VyZXMuCi0JCSAqLwotCQlpZiAoY2ggPT0gJ2UnIHx8IGNoID09ICdFJykgewotCQkJbmRpZ2l0cysrOwotCQl9Ci0JCW1vZGUgPSAyOwkJLyogbmRpZ2l0cyBzaWduaWZpY2FudCBkaWdpdHMgKi8KLQl9Ci0KLQlpZiAodmFsdWUgPCAwKSB7Ci0JCXZhbHVlID0gLXZhbHVlOwotCQkqc2lnbiA9ICctJzsKLQl9IGVsc2UKLQkJKnNpZ24gPSAnXDAwMCc7Ci0JZGlnaXRzID0gX19kdG9hKHZhbHVlLCBtb2RlLCBuZGlnaXRzLCBkZWNwdCwgJmRzZ24sICZydmUpOwotCWlmICgoY2ggIT0gJ2cnICYmIGNoICE9ICdHJykgfHwgZmxhZ3MgJiBBTFQpIHsJLyogUHJpbnQgdHJhaWxpbmcgemVyb3MgKi8KLQkJYnAgPSBkaWdpdHMgKyBuZGlnaXRzOwotCQlpZiAoY2ggPT0gJ2YnKSB7Ci0JCQlpZiAoKmRpZ2l0cyA9PSAnMCcgJiYgdmFsdWUpCi0JCQkJKmRlY3B0ID0gLW5kaWdpdHMgKyAxOwotCQkJYnAgKz0gKmRlY3B0OwotCQl9Ci0JCWlmICh2YWx1ZSA9PSAwKQkvKiBrbHVkZ2UgZm9yIF9fZHRvYSBpcnJlZ3VsYXJpdHkgKi8KLQkJCXJ2ZSA9IGJwOwotCQl3aGlsZSAocnZlIDwgYnApCi0JCQkqcnZlKysgPSAnMCc7Ci0JfQotCSpsZW5ndGggPSBydmUgLSBkaWdpdHM7Ci0JcmV0dXJuIChkaWdpdHMpOwotfQotCi1zdGF0aWMgaW50Ci1leHBvbmVudChjaGFyICpwMCwgaW50IGV4cCwgaW50IGZtdGNoKQotewotCWNoYXIgKnAsICp0OwotCWNoYXIgZXhwYnVmW01BWEVYUF07Ci0KLQlwID0gcDA7Ci0JKnArKyA9IGZtdGNoOwotCWlmIChleHAgPCAwKSB7Ci0JCWV4cCA9IC1leHA7Ci0JCSpwKysgPSAnLSc7Ci0JfQotCWVsc2UKLQkJKnArKyA9ICcrJzsKLQl0ID0gZXhwYnVmICsgTUFYRVhQOwotCWlmIChleHAgPiA5KSB7Ci0JCWRvIHsKLQkJCSotLXQgPSB0b19jaGFyKGV4cCAlIDEwKTsKLQkJfSB3aGlsZSAoKGV4cCAvPSAxMCkgPiA5KTsKLQkJKi0tdCA9IHRvX2NoYXIoZXhwKTsKLQkJZm9yICg7IHQgPCBleHBidWYgKyBNQVhFWFA7ICpwKysgPSAqdCsrKTsKLQl9Ci0JZWxzZSB7Ci0JCSpwKysgPSAnMCc7Ci0JCSpwKysgPSB0b19jaGFyKGV4cCk7Ci0JfQotCXJldHVybiAocCAtIHAwKTsKLX0KLQotCi0vKiBCSU9OSUMgKi8KLSNpbmNsdWRlIDxtYWNoaW5lL2llZWUuaD4KLXR5cGVkZWYgdW5pb24gewotICAgIGRvdWJsZSAgICAgICAgICAgICAgZDsKLSAgICBzdHJ1Y3QgaWVlZV9kb3VibGUgIGk7Ci19IGllZWVfdTsKLQotc3RhdGljIGludAotX215X2lzaW5mIChkb3VibGUgIHZhbHVlKQotewotICAgIGllZWVfdSAgIHU7Ci0KLSAgICB1LmQgPSB2YWx1ZTsKLSAgICByZXR1cm4gKHUuaS5kYmxfZXhwID09IDIwNDcgJiYgdS5pLmRibF9mcmFjaCA9PSAwICYmIHUuaS5kYmxfZnJhY2wgPT0gMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLV9teV9pc25hbiAoZG91YmxlICB2YWx1ZSkKLXsKLSAgICBpZWVlX3UgICB1OwotCi0gICAgdS5kID0gdmFsdWU7Ci0gICAgcmV0dXJuICh1LmkuZGJsX2V4cCA9PSAyMDQ3ICYmICh1LmkuZGJsX2ZyYWNoICE9IDAgfHwgdS5pLmRibF9mcmFjbCAhPSAwKSk7Ci19Ci0jZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdmZzY2FuZi5jIGIvbGliYy9zdGRpby92ZnNjYW5mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZjQwNGUuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby92ZnNjYW5mLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MDMgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHZmc2NhbmYuYyx2IDEuMjEgMjAwNi8wMS8xMyAyMTozMzoyOCBtaWxsZXJ0IEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0jaWZkZWYgRkxPQVRJTkdfUE9JTlQKLSNpbmNsdWRlICJmbG9hdGlvLmgiCi0jZW5kaWYKLQotI2RlZmluZQlCVUYJCTUxMwkvKiBNYXhpbXVtIGxlbmd0aCBvZiBudW1lcmljIHN0cmluZy4gKi8KLQotLyoKLSAqIEZsYWdzIHVzZWQgZHVyaW5nIGNvbnZlcnNpb24uCi0gKi8KLSNkZWZpbmUJTE9ORwkJMHgwMDAwMQkvKiBsOiBsb25nIG9yIGRvdWJsZSAqLwotI2RlZmluZQlMT05HREJMCQkweDAwMDAyCS8qIEw6IGxvbmcgZG91YmxlOyB1bmltcGxlbWVudGVkICovCi0jZGVmaW5lCVNIT1JUCQkweDAwMDA0CS8qIGg6IHNob3J0ICovCi0jZGVmaW5lCVNIT1JUU0hPUlQJMHgwMDAwOAkvKiBoaDogOCBiaXQgaW50ZWdlciAqLwotI2RlZmluZSBMTE9ORwkJMHgwMDAxMAkvKiBsbDogbG9uZyBsb25nICgrIGRlcHJlY2F0ZWQgcTogcXVhZCkgKi8KLSNkZWZpbmUJUE9JTlRFUgkJMHgwMDAyMAkvKiBwOiB2b2lkICogKGFzIGhleCkgKi8KLSNkZWZpbmUJU0laRUlOVAkJMHgwMDA0MAkvKiB6OiAoc2lnbmVkKSBzaXplX3QgKi8KLSNkZWZpbmUJTUFYSU5UCQkweDAwMDgwCS8qIGo6IGludG1heF90ICovCi0jZGVmaW5lCVBUUklOVAkJMHgwMDEwMAkvKiB0OiBwdHJkaWZmX3QgKi8KLSNkZWZpbmUJTk9TS0lQCQkweDAwMjAwCS8qIFsgb3IgYzogZG8gbm90IHNraXAgYmxhbmtzICovCi0jZGVmaW5lCVNVUFBSRVNTCTB4MDA0MDAJLyogKjogc3VwcHJlc3MgYXNzaWdubWVudCAqLwotI2RlZmluZQlVTlNJR05FRAkweDAwODAwCS8qICVbb3VweFhdIGNvbnZlcnNpb25zICovCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIGluIG51bWVyaWMgY29udmVyc2lvbnMgb25seToKLSAqIFNJR05PSywgSEFWRVNJR04sIE5ESUdJVFMsIERQVE9LLCBhbmQgRVhQT0sgYXJlIGZvciBmbG9hdGluZyBwb2ludDsKLSAqIFNJR05PSywgSEFWRVNJR04sIE5ESUdJVFMsIFBGWE9LLCBhbmQgTlpESUdJVFMgYXJlIGZvciBpbnRlZ3JhbC4KLSAqLwotI2RlZmluZQlTSUdOT0sJCTB4MDEwMDAJLyogKy8tIGlzIChzdGlsbCkgbGVnYWwgKi8KLSNkZWZpbmUJSEFWRVNJR04JMHgwMjAwMAkvKiBzaWduIGRldGVjdGVkICovCi0jZGVmaW5lCU5ESUdJVFMJCTB4MDQwMDAJLyogbm8gZGlnaXRzIGRldGVjdGVkICovCi0KLSNkZWZpbmUJRFBUT0sJCTB4MDgwMDAJLyogKGZsb2F0KSBkZWNpbWFsIHBvaW50IGlzIHN0aWxsIGxlZ2FsICovCi0jZGVmaW5lCUVYUE9LCQkweDEwMDAwCS8qIChmbG9hdCkgZXhwb25lbnQgKGUrMywgZXRjKSBzdGlsbCBsZWdhbCAqLwotCi0jZGVmaW5lCVBGWE9LCQkweDA4MDAwCS8qIDB4IHByZWZpeCBpcyAoc3RpbGwpIGxlZ2FsICovCi0jZGVmaW5lCU5aRElHSVRTCTB4MTAwMDAJLyogbm8gemVybyBkaWdpdHMgZGV0ZWN0ZWQgKi8KLQotLyoKLSAqIENvbnZlcnNpb24gdHlwZXMuCi0gKi8KLSNkZWZpbmUJQ1RfQ0hBUgkJMAkvKiAlYyBjb252ZXJzaW9uICovCi0jZGVmaW5lCUNUX0NDTAkJMQkvKiAlWy4uLl0gY29udmVyc2lvbiAqLwotI2RlZmluZQlDVF9TVFJJTkcJMgkvKiAlcyBjb252ZXJzaW9uICovCi0jZGVmaW5lCUNUX0lOVAkJMwkvKiBpbnRlZ2VyLCBpLmUuLCBzdHJ0b2ltYXggb3Igc3RydG91bWF4ICovCi0jZGVmaW5lCUNUX0ZMT0FUCTQJLyogZmxvYXRpbmcsIGkuZS4sIHN0cnRvZCAqLwotCi0jZGVmaW5lIHVfY2hhciB1bnNpZ25lZCBjaGFyCi0jZGVmaW5lIHVfbG9uZyB1bnNpZ25lZCBsb25nCi0KLXN0YXRpYyB1X2NoYXIgKl9fc2NjbChjaGFyICosIHVfY2hhciAqKTsKLQotI2lmICFkZWZpbmVkKFZGU0NBTkYpCi0jZGVmaW5lIFZGU0NBTkYJdmZzY2FuZgotI2VuZGlmCi0KLS8qCi0gKiB2ZnNjYW5mCi0gKi8KLWludAotVkZTQ0FORihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10MCwgX192YV9saXN0IGFwKQotewotCXVfY2hhciAqZm10ID0gKHVfY2hhciAqKWZtdDA7Ci0JaW50IGM7CQkvKiBjaGFyYWN0ZXIgZnJvbSBmb3JtYXQsIG9yIGNvbnZlcnNpb24gKi8KLQlzaXplX3Qgd2lkdGg7CS8qIGZpZWxkIHdpZHRoLCBvciAwICovCi0JY2hhciAqcDsJLyogcG9pbnRzIGludG8gYWxsIGtpbmRzIG9mIHN0cmluZ3MgKi8KLQlpbnQgbjsJCS8qIGhhbmR5IGludGVnZXIgKi8KLQlpbnQgZmxhZ3M7CS8qIGZsYWdzIGFzIGRlZmluZWQgYWJvdmUgKi8KLQljaGFyICpwMDsJLyogc2F2ZXMgb3JpZ2luYWwgdmFsdWUgb2YgcCB3aGVuIG5lY2Vzc2FyeSAqLwotCWludCBuYXNzaWduZWQ7CQkvKiBudW1iZXIgb2YgZmllbGRzIGFzc2lnbmVkICovCi0JaW50IG5yZWFkOwkJLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29uc3VtZWQgZnJvbSBmcCAqLwotCWludCBiYXNlOwkJLyogYmFzZSBhcmd1bWVudCB0byBzdHJ0b2ltYXgvc3RydG91aW1heCAqLwotCWNoYXIgY2NsdGFiWzI1Nl07CS8qIGNoYXJhY3RlciBjbGFzcyB0YWJsZSBmb3IgJVsuLi5dICovCi0JY2hhciBidWZbQlVGXTsJCS8qIGJ1ZmZlciBmb3IgbnVtZXJpYyBjb252ZXJzaW9ucyAqLwotCi0JLyogYGJhc2VmaXgnIGlzIHVzZWQgdG8gYXZvaWQgYGlmJyB0ZXN0cyBpbiB0aGUgaW50ZWdlciBzY2FubmVyICovCi0Jc3RhdGljIHNob3J0IGJhc2VmaXhbMTddID0KLQkJeyAxMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYgfTsKLQotCUZMT0NLRklMRShmcCk7Ci0JX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOwotCi0JbmFzc2lnbmVkID0gMDsKLQlucmVhZCA9IDA7Ci0JYmFzZSA9IDA7CQkvKiBYWFgganVzdCB0byBrZWVwIGdjYyBoYXBweSAqLwotCWZvciAoOzspIHsKLQkJYyA9ICpmbXQrKzsKLQkJaWYgKGMgPT0gMCkgewotCQkJRlVOTE9DS0ZJTEUoZnApOwotCQkJcmV0dXJuIChuYXNzaWduZWQpOwotCQl9Ci0JCWlmIChpc3NwYWNlKGMpKSB7Ci0JCQl3aGlsZSAoKGZwLT5fciA+IDAgfHwgX19zcmVmaWxsKGZwKSA9PSAwKSAmJgotCQkJICAgIGlzc3BhY2UoKmZwLT5fcCkpCi0JCQkJbnJlYWQrKywgZnAtPl9yLS0sIGZwLT5fcCsrOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGMgIT0gJyUnKQotCQkJZ290byBsaXRlcmFsOwotCQl3aWR0aCA9IDA7Ci0JCWZsYWdzID0gMDsKLQkJLyoKLQkJICogc3dpdGNoIG9uIHRoZSBmb3JtYXQuICBjb250aW51ZSBpZiBkb25lOwotCQkgKiBicmVhayBvbmNlIGZvcm1hdCB0eXBlIGlzIGRlcml2ZWQuCi0JCSAqLwotYWdhaW46CQljID0gKmZtdCsrOwotCQlzd2l0Y2ggKGMpIHsKLQkJY2FzZSAnJSc6Ci1saXRlcmFsOgotCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCi0JCQkJZ290byBpbnB1dF9mYWlsdXJlOwotCQkJaWYgKCpmcC0+X3AgIT0gYykKLQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7Ci0JCQlmcC0+X3ItLSwgZnAtPl9wKys7Ci0JCQlucmVhZCsrOwotCQkJY29udGludWU7Ci0KLQkJY2FzZSAnKic6Ci0JCQlmbGFncyB8PSBTVVBQUkVTUzsKLQkJCWdvdG8gYWdhaW47Ci0JCWNhc2UgJ2onOgotCQkJZmxhZ3MgfD0gTUFYSU5UOwotCQkJZ290byBhZ2FpbjsKLQkJY2FzZSAnTCc6Ci0JCQlmbGFncyB8PQotCQkJCSgqZm10ID09ICdkJykgPyBMTE9ORyA6Ci0JCQkJKCpmbXQgPT0gJ2knKSA/IExMT05HIDoKLQkJCQkoKmZtdCA9PSAnbycpID8gTExPTkcgOgotCQkJCSgqZm10ID09ICd1JykgPyBMTE9ORyA6Ci0JCQkJKCpmbXQgPT0gJ3gnKSA/IExMT05HIDoKLQkJCQlMT05HREJMOwotCQkJZ290byBhZ2FpbjsKLQkJY2FzZSAnaCc6Ci0JCQlpZiAoKmZtdCA9PSAnaCcpIHsKLQkJCQlmbXQrKzsKLQkJCQlmbGFncyB8PSBTSE9SVFNIT1JUOwotCQkJfSBlbHNlIHsKLQkJCQlmbGFncyB8PSBTSE9SVDsKLQkJCX0KLQkJCWdvdG8gYWdhaW47Ci0JCWNhc2UgJ2wnOgotCQkJaWYgKCpmbXQgPT0gJ2wnKSB7Ci0JCQkJZm10Kys7Ci0JCQkJZmxhZ3MgfD0gTExPTkc7Ci0JCQl9IGVsc2UgewotCQkJCWZsYWdzIHw9IExPTkc7Ci0JCQl9Ci0JCQlnb3RvIGFnYWluOwotCQljYXNlICdxJzoKLQkJCWZsYWdzIHw9IExMT05HOwkJLyogZGVwcmVjYXRlZCAqLwotCQkJZ290byBhZ2FpbjsKLQkJY2FzZSAndCc6Ci0JCQlmbGFncyB8PSBQVFJJTlQ7Ci0JCQlnb3RvIGFnYWluOwotCQljYXNlICd6JzoKLQkJCWZsYWdzIHw9IFNJWkVJTlQ7Ci0JCQlnb3RvIGFnYWluOwotCi0JCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKLQkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgotCQkJd2lkdGggPSB3aWR0aCAqIDEwICsgYyAtICcwJzsKLQkJCWdvdG8gYWdhaW47Ci0KLQkJLyoKLQkJICogQ29udmVyc2lvbnMuCi0JCSAqIFRob3NlIG1hcmtlZCBgY29tcGF0JyBhcmUgZm9yIDQuWzEyM11CU0QgY29tcGF0aWJpbGl0eS4KLQkJICoKLQkJICogKEFjY29yZGluZyB0byBBTlNJLCBFIGFuZCBYIGZvcm1hdHMgYXJlIHN1cHBvc2VkCi0JCSAqIHRvIHRoZSBzYW1lIGFzIGUgYW5kIHguICBTb3JyeSBhYm91dCB0aGF0LikKLQkJICovCi0JCWNhc2UgJ0QnOgkvKiBjb21wYXQgKi8KLQkJCWZsYWdzIHw9IExPTkc7Ci0JCQkvKiBGQUxMVEhST1VHSCAqLwotCQljYXNlICdkJzoKLQkJCWMgPSBDVF9JTlQ7Ci0JCQliYXNlID0gMTA7Ci0JCQlicmVhazsKLQotCQljYXNlICdpJzoKLQkJCWMgPSBDVF9JTlQ7Ci0JCQliYXNlID0gMDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgJ08nOgkvKiBjb21wYXQgKi8KLQkJCWZsYWdzIHw9IExPTkc7Ci0JCQkvKiBGQUxMVEhST1VHSCAqLwotCQljYXNlICdvJzoKLQkJCWMgPSBDVF9JTlQ7Ci0JCQlmbGFncyB8PSBVTlNJR05FRDsKLQkJCWJhc2UgPSA4OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAndSc6Ci0JCQljID0gQ1RfSU5UOwotCQkJZmxhZ3MgfD0gVU5TSUdORUQ7Ci0JCQliYXNlID0gMTA7Ci0JCQlicmVhazsKLQotCQljYXNlICdYJzoKLQkJY2FzZSAneCc6Ci0JCQlmbGFncyB8PSBQRlhPSzsJLyogZW5hYmxlIDB4IHByZWZpeGluZyAqLwotCQkJYyA9IENUX0lOVDsKLQkJCWZsYWdzIHw9IFVOU0lHTkVEOwotCQkJYmFzZSA9IDE2OwotCQkJYnJlYWs7Ci0KLSNpZmRlZiBGTE9BVElOR19QT0lOVAotCQljYXNlICdFJzoKLQkJY2FzZSAnRyc6Ci0JCWNhc2UgJ2UnOiAKLQkJY2FzZSAnZic6IAotCQljYXNlICdnJzoKLQkJCWMgPSBDVF9GTE9BVDsKLQkJCWJyZWFrOwotI2VuZGlmCi0KLQkJY2FzZSAncyc6Ci0JCQljID0gQ1RfU1RSSU5HOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAnWyc6Ci0JCQlmbXQgPSBfX3NjY2woY2NsdGFiLCBmbXQpOwotCQkJZmxhZ3MgfD0gTk9TS0lQOwotCQkJYyA9IENUX0NDTDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgJ2MnOgotCQkJZmxhZ3MgfD0gTk9TS0lQOwotCQkJYyA9IENUX0NIQVI7Ci0JCQlicmVhazsKLQotCQljYXNlICdwJzoJLyogcG9pbnRlciBmb3JtYXQgaXMgbGlrZSBoZXggKi8KLQkJCWZsYWdzIHw9IFBPSU5URVIgfCBQRlhPSzsKLQkJCWMgPSBDVF9JTlQ7Ci0JCQlmbGFncyB8PSBVTlNJR05FRDsKLQkJCWJhc2UgPSAxNjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgJ24nOgotCQkJaWYgKGZsYWdzICYgU1VQUFJFU1MpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoZmxhZ3MgJiBTSE9SVFNIT1JUKQotCQkJCSp2YV9hcmcoYXAsIF9fc2lnbmVkIGNoYXIgKikgPSBucmVhZDsKLQkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlQpCi0JCQkJKnZhX2FyZyhhcCwgc2hvcnQgKikgPSBucmVhZDsKLQkJCWVsc2UgaWYgKGZsYWdzICYgTE9ORykKLQkJCQkqdmFfYXJnKGFwLCBsb25nICopID0gbnJlYWQ7Ci0JCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCi0JCQkJKnZhX2FyZyhhcCwgc3NpemVfdCAqKSA9IG5yZWFkOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCi0JCQkJKnZhX2FyZyhhcCwgcHRyZGlmZl90ICopID0gbnJlYWQ7Ci0JCQllbHNlIGlmIChmbGFncyAmIExMT05HKQotCQkJCSp2YV9hcmcoYXAsIGxvbmcgbG9uZyAqKSA9IG5yZWFkOwotCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCi0JCQkJKnZhX2FyZyhhcCwgaW50bWF4X3QgKikgPSBucmVhZDsKLQkJCWVsc2UKLQkJCQkqdmFfYXJnKGFwLCBpbnQgKikgPSBucmVhZDsKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIERpc2d1c3RpbmcgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaGFja3MuCVhYWAotCQkgKi8KLQkJY2FzZSAnXDAnOgkvKiBjb21wYXQgKi8KLQkJCUZVTkxPQ0tGSUxFKGZwKTsKLQkJCXJldHVybiAoRU9GKTsKLQotCQlkZWZhdWx0OgkvKiBjb21wYXQgKi8KLQkJCWlmIChpc3VwcGVyKGMpKQotCQkJCWZsYWdzIHw9IExPTkc7Ci0JCQljID0gQ1RfSU5UOwotCQkJYmFzZSA9IDEwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgotCQkgKiBXZSBoYXZlIGEgY29udmVyc2lvbiB0aGF0IHJlcXVpcmVzIGlucHV0LgotCQkgKi8KLQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCi0JCQlnb3RvIGlucHV0X2ZhaWx1cmU7Ci0KLQkJLyoKLQkJICogQ29uc3VtZSBsZWFkaW5nIHdoaXRlIHNwYWNlLCBleGNlcHQgZm9yIGZvcm1hdHMKLQkJICogdGhhdCBzdXBwcmVzcyB0aGlzLgotCQkgKi8KLQkJaWYgKChmbGFncyAmIE5PU0tJUCkgPT0gMCkgewotCQkJd2hpbGUgKGlzc3BhY2UoKmZwLT5fcCkpIHsKLQkJCQlucmVhZCsrOwotCQkJCWlmICgtLWZwLT5fciA+IDApCi0JCQkJCWZwLT5fcCsrOwotCQkJCWVsc2UgaWYgKF9fc3JlZmlsbChmcCkpCi0JCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKLQkJCX0KLQkJCS8qCi0JCQkgKiBOb3RlIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBpbgotCQkJICogdGhlIGJ1ZmZlciwgc28gY29udmVyc2lvbnMgdGhhdCBkbyBub3Qgc2V0IE5PU0tJUAotCQkJICogY2Egbm8gbG9uZ2VyIHJlc3VsdCBpbiBhbiBpbnB1dCBmYWlsdXJlLgotCQkJICovCi0JCX0KLQotCQkvKgotCQkgKiBEbyB0aGUgY29udmVyc2lvbi4KLQkJICovCi0JCXN3aXRjaCAoYykgewotCi0JCWNhc2UgQ1RfQ0hBUjoKLQkJCS8qIHNjYW4gYXJiaXRyYXJ5IGNoYXJhY3RlcnMgKHNldHMgTk9TS0lQKSAqLwotCQkJaWYgKHdpZHRoID09IDApCi0JCQkJd2lkdGggPSAxOwotCQkJaWYgKGZsYWdzICYgU1VQUFJFU1MpIHsKLQkJCQlzaXplX3Qgc3VtID0gMDsKLQkJCQlmb3IgKDs7KSB7Ci0JCQkJCWlmICgobiA9IGZwLT5fcikgPCAoaW50KXdpZHRoKSB7Ci0JCQkJCQlzdW0gKz0gbjsKLQkJCQkJCXdpZHRoIC09IG47Ci0JCQkJCQlmcC0+X3AgKz0gbjsKLQkJCQkJCWlmIChfX3NyZWZpbGwoZnApKSB7Ci0JCQkJCQkJaWYgKHN1bSA9PSAwKQotCQkJCQkJCSAgICBnb3RvIGlucHV0X2ZhaWx1cmU7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzdW0gKz0gd2lkdGg7Ci0JCQkJCQlmcC0+X3IgLT0gd2lkdGg7Ci0JCQkJCQlmcC0+X3AgKz0gd2lkdGg7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQlucmVhZCArPSBzdW07Ci0JCQl9IGVsc2UgewotCQkJCXNpemVfdCByID0gZnJlYWQoKHZvaWQgKil2YV9hcmcoYXAsIGNoYXIgKiksIDEsCi0JCQkJICAgIHdpZHRoLCBmcCk7Ci0KLQkJCQlpZiAociA9PSAwKQotCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7Ci0JCQkJbnJlYWQgKz0gcjsKLQkJCQluYXNzaWduZWQrKzsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgQ1RfQ0NMOgotCQkJLyogc2NhbiBhIChub25lbXB0eSkgY2hhcmFjdGVyIGNsYXNzIChzZXRzIE5PU0tJUCkgKi8KLQkJCWlmICh3aWR0aCA9PSAwKQotCQkJCXdpZHRoID0gKHNpemVfdCl+MDsJLyogYGluZmluaXR5JyAqLwotCQkJLyogdGFrZSBvbmx5IHRob3NlIHRoaW5ncyBpbiB0aGUgY2xhc3MgKi8KLQkJCWlmIChmbGFncyAmIFNVUFBSRVNTKSB7Ci0JCQkJbiA9IDA7Ci0JCQkJd2hpbGUgKGNjbHRhYlsqZnAtPl9wXSkgewotCQkJCQluKyssIGZwLT5fci0tLCBmcC0+X3ArKzsKLQkJCQkJaWYgKC0td2lkdGggPT0gMCkKLQkJCQkJCWJyZWFrOwotCQkJCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkgewotCQkJCQkJaWYgKG4gPT0gMCkKLQkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAobiA9PSAwKQotCQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7Ci0JCQl9IGVsc2UgewotCQkJCXAwID0gcCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKLQkJCQl3aGlsZSAoY2NsdGFiWypmcC0+X3BdKSB7Ci0JCQkJCWZwLT5fci0tOwotCQkJCQkqcCsrID0gKmZwLT5fcCsrOwotCQkJCQlpZiAoLS13aWR0aCA9PSAwKQotCQkJCQkJYnJlYWs7Ci0JCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7Ci0JCQkJCQlpZiAocCA9PSBwMCkKLQkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQluID0gcCAtIHAwOwotCQkJCWlmIChuID09IDApCi0JCQkJCWdvdG8gbWF0Y2hfZmFpbHVyZTsKLQkJCQkqcCA9ICdcMCc7Ci0JCQkJbmFzc2lnbmVkKys7Ci0JCQl9Ci0JCQlucmVhZCArPSBuOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDVF9TVFJJTkc6Ci0JCQkvKiBsaWtlIENDTCwgYnV0IHplcm8tbGVuZ3RoIHN0cmluZyBPSywgJiBubyBOT1NLSVAgKi8KLQkJCWlmICh3aWR0aCA9PSAwKQotCQkJCXdpZHRoID0gKHNpemVfdCl+MDsKLQkJCWlmIChmbGFncyAmIFNVUFBSRVNTKSB7Ci0JCQkJbiA9IDA7Ci0JCQkJd2hpbGUgKCFpc3NwYWNlKCpmcC0+X3ApKSB7Ci0JCQkJCW4rKywgZnAtPl9yLS0sIGZwLT5fcCsrOwotCQkJCQlpZiAoLS13aWR0aCA9PSAwKQotCQkJCQkJYnJlYWs7Ci0JCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCW5yZWFkICs9IG47Ci0JCQl9IGVsc2UgewotCQkJCXAwID0gcCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKLQkJCQl3aGlsZSAoIWlzc3BhY2UoKmZwLT5fcCkpIHsKLQkJCQkJZnAtPl9yLS07Ci0JCQkJCSpwKysgPSAqZnAtPl9wKys7Ci0JCQkJCWlmICgtLXdpZHRoID09IDApCi0JCQkJCQlicmVhazsKLQkJCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJKnAgPSAnXDAnOwotCQkJCW5yZWFkICs9IHAgLSBwMDsKLQkJCQluYXNzaWduZWQrKzsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCi0JCWNhc2UgQ1RfSU5UOgotCQkJLyogc2NhbiBhbiBpbnRlZ2VyIGFzIGlmIGJ5IHN0cnRvaW1heC9zdHJ0b3VtYXggKi8KLSNpZmRlZiBoYXJkd2F5Ci0JCQlpZiAod2lkdGggPT0gMCB8fCB3aWR0aCA+IHNpemVvZihidWYpIC0gMSkKLQkJCQl3aWR0aCA9IHNpemVvZihidWYpIC0gMTsKLSNlbHNlCi0JCQkvKiBzaXplX3QgaXMgdW5zaWduZWQsIGhlbmNlIHRoaXMgb3B0aW1pc2F0aW9uICovCi0JCQlpZiAoLS13aWR0aCA+IHNpemVvZihidWYpIC0gMikKLQkJCQl3aWR0aCA9IHNpemVvZihidWYpIC0gMjsKLQkJCXdpZHRoKys7Ci0jZW5kaWYKLQkJCWZsYWdzIHw9IFNJR05PSyB8IE5ESUdJVFMgfCBOWkRJR0lUUzsKLQkJCWZvciAocCA9IGJ1Zjsgd2lkdGg7IHdpZHRoLS0pIHsKLQkJCQljID0gKmZwLT5fcDsKLQkJCQkvKgotCQkJCSAqIFN3aXRjaCBvbiB0aGUgY2hhcmFjdGVyOyBgZ290byBvaycKLQkJCQkgKiBpZiB3ZSBhY2NlcHQgaXQgYXMgYSBwYXJ0IG9mIG51bWJlci4KLQkJCQkgKi8KLQkJCQlzd2l0Y2ggKGMpIHsKLQotCQkJCS8qCi0JCQkJICogVGhlIGRpZ2l0IDAgaXMgYWx3YXlzIGxlZ2FsLCBidXQgaXMKLQkJCQkgKiBzcGVjaWFsLiAgRm9yICVpIGNvbnZlcnNpb25zLCBpZiBubwotCQkJCSAqIGRpZ2l0cyAoemVybyBvciBub256ZXJvKSBoYXZlIGJlZW4KLQkJCQkgKiBzY2FubmVkIChvbmx5IHNpZ25zKSwgd2Ugd2lsbCBoYXZlCi0JCQkJICogYmFzZT09MC4gIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkIHNldAotCQkJCSAqIGl0IHRvIDggYW5kIGVuYWJsZSAweCBwcmVmaXhpbmcuCi0JCQkJICogQWxzbywgaWYgd2UgaGF2ZSBub3Qgc2Nhbm5lZCB6ZXJvIGRpZ2l0cwotCQkJCSAqIGJlZm9yZSB0aGlzLCBkbyBub3QgdHVybiBvZmYgcHJlZml4aW5nCi0JCQkJICogKHNvbWVvbmUgZWxzZSB3aWxsIHR1cm4gaXQgb2ZmIGlmIHdlCi0JCQkJICogaGF2ZSBzY2FubmVkIGFueSBub256ZXJvIGRpZ2l0cykuCi0JCQkJICovCi0JCQkJY2FzZSAnMCc6Ci0JCQkJCWlmIChiYXNlID09IDApIHsKLQkJCQkJCWJhc2UgPSA4OwotCQkJCQkJZmxhZ3MgfD0gUEZYT0s7Ci0JCQkJCX0KLQkJCQkJaWYgKGZsYWdzICYgTlpESUdJVFMpCi0JCQkJCSAgICBmbGFncyAmPSB+KFNJR05PS3xOWkRJR0lUU3xORElHSVRTKTsKLQkJCQkJZWxzZQotCQkJCQkgICAgZmxhZ3MgJj0gfihTSUdOT0t8UEZYT0t8TkRJR0lUUyk7Ci0JCQkJCWdvdG8gb2s7Ci0KLQkJCQkvKiAxIHRocm91Z2ggNyBhbHdheXMgbGVnYWwgKi8KLQkJCQljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOgotCQkJCWNhc2UgJzQnOiBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOgotCQkJCQliYXNlID0gYmFzZWZpeFtiYXNlXTsKLQkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOwotCQkJCQlnb3RvIG9rOwotCi0JCQkJLyogZGlnaXRzIDggYW5kIDkgb2sgaWZmIGRlY2ltYWwgb3IgaGV4ICovCi0JCQkJY2FzZSAnOCc6IGNhc2UgJzknOgotCQkJCQliYXNlID0gYmFzZWZpeFtiYXNlXTsKLQkJCQkJaWYgKGJhc2UgPD0gOCkKLQkJCQkJCWJyZWFrOwkvKiBub3QgbGVnYWwgaGVyZSAqLwotCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IFBGWE9LIHwgTkRJR0lUUyk7Ci0JCQkJCWdvdG8gb2s7Ci0KLQkJCQkvKiBsZXR0ZXJzIG9rIGlmZiBoZXggKi8KLQkJCQljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOgotCQkJCWNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6Ci0JCQkJY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzoKLQkJCQljYXNlICdkJzogY2FzZSAnZSc6IGNhc2UgJ2YnOgotCQkJCQkvKiBubyBuZWVkIHRvIGZpeCBiYXNlIGhlcmUgKi8KLQkJCQkJaWYgKGJhc2UgPD0gMTApCi0JCQkJCQlicmVhazsJLyogbm90IGxlZ2FsIGhlcmUgKi8KLQkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOwotCQkJCQlnb3RvIG9rOwotCi0JCQkJLyogc2lnbiBvayBvbmx5IGFzIGZpcnN0IGNoYXJhY3RlciAqLwotCQkJCWNhc2UgJysnOiBjYXNlICctJzoKLQkJCQkJaWYgKGZsYWdzICYgU0lHTk9LKSB7Ci0JCQkJCQlmbGFncyAmPSB+U0lHTk9LOwotCQkJCQkJZmxhZ3MgfD0gSEFWRVNJR047Ci0JCQkJCQlnb3RvIG9rOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCi0JCQkJLyoKLQkJCQkgKiB4IG9rIGlmZiBmbGFnIHN0aWxsIHNldCBhbmQgMm5kIGNoYXIgKG9yCi0JCQkJICogM3JkIGNoYXIgaWYgd2UgaGF2ZSBhIHNpZ24pLgotCQkJCSAqLwotCQkJCWNhc2UgJ3gnOiBjYXNlICdYJzoKLQkJCQkJaWYgKChmbGFncyAmIFBGWE9LKSAmJiBwID09Ci0JCQkJCSAgICBidWYgKyAxICsgISEoZmxhZ3MgJiBIQVZFU0lHTikpIHsKLQkJCQkJCWJhc2UgPSAxNjsJLyogaWYgJWkgKi8KLQkJCQkJCWZsYWdzICY9IH5QRlhPSzsKLQkJCQkJCWdvdG8gb2s7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJLyoKLQkJCQkgKiBJZiB3ZSBnb3QgaGVyZSwgYyBpcyBub3QgYSBsZWdhbCBjaGFyYWN0ZXIKLQkJCQkgKiBmb3IgYSBudW1iZXIuICBTdG9wIGFjY3VtdWxhdGluZyBkaWdpdHMuCi0JCQkJICovCi0JCQkJYnJlYWs7Ci0JCW9rOgotCQkJCS8qCi0JCQkJICogYyBpcyBsZWdhbDogc3RvcmUgaXQgYW5kIGxvb2sgYXQgdGhlIG5leHQuCi0JCQkJICovCi0JCQkJKnArKyA9IGM7Ci0JCQkJaWYgKC0tZnAtPl9yID4gMCkKLQkJCQkJZnAtPl9wKys7Ci0JCQkJZWxzZSBpZiAoX19zcmVmaWxsKGZwKSkKLQkJCQkJYnJlYWs7CQkvKiBFT0YgKi8KLQkJCX0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBoYWQgb25seSBhIHNpZ24sIGl0IGlzIG5vIGdvb2Q7IHB1c2gKLQkJCSAqIGJhY2sgdGhlIHNpZ24uICBJZiB0aGUgbnVtYmVyIGVuZHMgaW4gYHgnLAotCQkJICogaXQgd2FzIFtzaWduXSAnMCcgJ3gnLCBzbyBwdXNoIGJhY2sgdGhlIHgKLQkJCSAqIGFuZCB0cmVhdCBpdCBhcyBbc2lnbl0gJzAnLgotCQkJICovCi0JCQlpZiAoZmxhZ3MgJiBORElHSVRTKSB7Ci0JCQkJaWYgKHAgPiBidWYpCi0JCQkJCSh2b2lkKSB1bmdldGMoKih1X2NoYXIgKiktLXAsIGZwKTsKLQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7Ci0JCQl9Ci0JCQljID0gKCh1X2NoYXIgKilwKVstMV07Ci0JCQlpZiAoYyA9PSAneCcgfHwgYyA9PSAnWCcpIHsKLQkJCQktLXA7Ci0JCQkJKHZvaWQpIHVuZ2V0YyhjLCBmcCk7Ci0JCQl9Ci0JCQlpZiAoKGZsYWdzICYgU1VQUFJFU1MpID09IDApIHsKLQkJCQl1aW50bWF4X3QgcmVzOwotCi0JCQkJKnAgPSAnXDAnOwotCQkJCWlmIChmbGFncyAmIFVOU0lHTkVEKQotCQkJCQlyZXMgPSBzdHJ0b3VtYXgoYnVmLCBOVUxMLCBiYXNlKTsKLQkJCQllbHNlCi0JCQkJCXJlcyA9IHN0cnRvaW1heChidWYsIE5VTEwsIGJhc2UpOwotCQkJCWlmIChmbGFncyAmIFBPSU5URVIpCi0JCQkJCSp2YV9hcmcoYXAsIHZvaWQgKiopID0KLQkJCQkJICAgICh2b2lkICopKHVpbnRwdHJfdClyZXM7Ci0JCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCi0JCQkJCSp2YV9hcmcoYXAsIGludG1heF90ICopID0gcmVzOwotCQkJCWVsc2UgaWYgKGZsYWdzICYgTExPTkcpCi0JCQkJCSp2YV9hcmcoYXAsIGxvbmcgbG9uZyAqKSA9IHJlczsKLQkJCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCi0JCQkJCSp2YV9hcmcoYXAsIHNzaXplX3QgKikgPSByZXM7Ci0JCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCi0JCQkJCSp2YV9hcmcoYXAsIHB0cmRpZmZfdCAqKSA9IHJlczsKLQkJCQllbHNlIGlmIChmbGFncyAmIExPTkcpCi0JCQkJCSp2YV9hcmcoYXAsIGxvbmcgKikgPSByZXM7Ci0JCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVCkKLQkJCQkJKnZhX2FyZyhhcCwgc2hvcnQgKikgPSByZXM7Ci0JCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVFNIT1JUKQotCQkJCQkqdmFfYXJnKGFwLCBfX3NpZ25lZCBjaGFyICopID0gcmVzOwotCQkJCWVsc2UKLQkJCQkJKnZhX2FyZyhhcCwgaW50ICopID0gcmVzOwotCQkJCW5hc3NpZ25lZCsrOwotCQkJfQotCQkJbnJlYWQgKz0gcCAtIGJ1ZjsKLQkJCWJyZWFrOwotCi0jaWZkZWYgRkxPQVRJTkdfUE9JTlQKLQkJY2FzZSBDVF9GTE9BVDoKLQkJCS8qIHNjYW4gYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYXMgaWYgYnkgc3RydG9kICovCi0jaWZkZWYgaGFyZHdheQotCQkJaWYgKHdpZHRoID09IDAgfHwgd2lkdGggPiBzaXplb2YoYnVmKSAtIDEpCi0JCQkJd2lkdGggPSBzaXplb2YoYnVmKSAtIDE7Ci0jZWxzZQotCQkJLyogc2l6ZV90IGlzIHVuc2lnbmVkLCBoZW5jZSB0aGlzIG9wdGltaXNhdGlvbiAqLwotCQkJaWYgKC0td2lkdGggPiBzaXplb2YoYnVmKSAtIDIpCi0JCQkJd2lkdGggPSBzaXplb2YoYnVmKSAtIDI7Ci0JCQl3aWR0aCsrOwotI2VuZGlmCi0JCQlmbGFncyB8PSBTSUdOT0sgfCBORElHSVRTIHwgRFBUT0sgfCBFWFBPSzsKLQkJCWZvciAocCA9IGJ1Zjsgd2lkdGg7IHdpZHRoLS0pIHsKLQkJCQljID0gKmZwLT5fcDsKLQkJCQkvKgotCQkJCSAqIFRoaXMgY29kZSBtaW1pY2tzIHRoZSBpbnRlZ2VyIGNvbnZlcnNpb24KLQkJCQkgKiBjb2RlLCBidXQgaXMgbXVjaCBzaW1wbGVyLgotCQkJCSAqLwotCQkJCXN3aXRjaCAoYykgewotCi0JCQkJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6Ci0JCQkJY2FzZSAnNCc6IGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6Ci0JCQkJY2FzZSAnOCc6IGNhc2UgJzknOgotCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IE5ESUdJVFMpOwotCQkJCQlnb3RvIGZvazsKLQotCQkJCWNhc2UgJysnOiBjYXNlICctJzoKLQkJCQkJaWYgKGZsYWdzICYgU0lHTk9LKSB7Ci0JCQkJCQlmbGFncyAmPSB+U0lHTk9LOwotCQkJCQkJZ290byBmb2s7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnLic6Ci0JCQkJCWlmIChmbGFncyAmIERQVE9LKSB7Ci0JCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IERQVE9LKTsKLQkJCQkJCWdvdG8gZm9rOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ2UnOiBjYXNlICdFJzoKLQkJCQkJLyogbm8gZXhwb25lbnQgd2l0aG91dCBzb21lIGRpZ2l0cyAqLwotCQkJCQlpZiAoKGZsYWdzJihORElHSVRTfEVYUE9LKSkgPT0gRVhQT0spIHsKLQkJCQkJCWZsYWdzID0KLQkJCQkJCSAgICAoZmxhZ3MgJiB+KEVYUE9LfERQVE9LKSkgfAotCQkJCQkJICAgIFNJR05PSyB8IE5ESUdJVFM7Ci0JCQkJCQlnb3RvIGZvazsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCWZvazoKLQkJCQkqcCsrID0gYzsKLQkJCQlpZiAoLS1mcC0+X3IgPiAwKQotCQkJCQlmcC0+X3ArKzsKLQkJCQllbHNlIGlmIChfX3NyZWZpbGwoZnApKQotCQkJCQlicmVhazsJLyogRU9GICovCi0JCQl9Ci0JCQkvKgotCQkJICogSWYgbm8gZGlnaXRzLCBtaWdodCBiZSBtaXNzaW5nIGV4cG9uZW50IGRpZ2l0cwotCQkJICogKGp1c3QgZ2l2ZSBiYWNrIHRoZSBleHBvbmVudCkgb3IgbWlnaHQgYmUgbWlzc2luZwotCQkJICogcmVndWxhciBkaWdpdHMsIGJ1dCBoYWQgc2lnbiBhbmQvb3IgZGVjaW1hbCBwb2ludC4KLQkJCSAqLwotCQkJaWYgKGZsYWdzICYgTkRJR0lUUykgewotCQkJCWlmIChmbGFncyAmIEVYUE9LKSB7Ci0JCQkJCS8qIG5vIGRpZ2l0cyBhdCBhbGwgKi8KLQkJCQkJd2hpbGUgKHAgPiBidWYpCi0JCQkJCQl1bmdldGMoKih1X2NoYXIgKiktLXAsIGZwKTsKLQkJCQkJZ290byBtYXRjaF9mYWlsdXJlOwotCQkJCX0KLQkJCQkvKiBqdXN0IGEgYmFkIGV4cG9uZW50IChlIGFuZCBtYXliZSBzaWduKSAqLwotCQkJCWMgPSAqKHVfY2hhciAqKS0tcDsKLQkJCQlpZiAoYyAhPSAnZScgJiYgYyAhPSAnRScpIHsKLQkJCQkJKHZvaWQpIHVuZ2V0YyhjLCBmcCk7Lyogc2lnbiAqLwotCQkJCQljID0gKih1X2NoYXIgKiktLXA7Ci0JCQkJfQotCQkJCSh2b2lkKSB1bmdldGMoYywgZnApOwotCQkJfQotCQkJaWYgKChmbGFncyAmIFNVUFBSRVNTKSA9PSAwKSB7Ci0JCQkJZG91YmxlIHJlczsKLQotCQkJCSpwID0gJ1wwJzsKLQkJCQlyZXMgPSBzdHJ0b2QoYnVmLCAoY2hhciAqKikgTlVMTCk7Ci0JCQkJaWYgKGZsYWdzICYgTE9OR0RCTCkKLQkJCQkJKnZhX2FyZyhhcCwgbG9uZyBkb3VibGUgKikgPSByZXM7Ci0JCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HKQotCQkJCQkqdmFfYXJnKGFwLCBkb3VibGUgKikgPSByZXM7Ci0JCQkJZWxzZQotCQkJCQkqdmFfYXJnKGFwLCBmbG9hdCAqKSA9IHJlczsKLQkJCQluYXNzaWduZWQrKzsKLQkJCX0KLQkJCW5yZWFkICs9IHAgLSBidWY7Ci0JCQlicmVhazsKLSNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLwotCQl9Ci0JfQotaW5wdXRfZmFpbHVyZToKLQlpZiAobmFzc2lnbmVkID09IDApCi0JCW5hc3NpZ25lZCA9IC0xOwotbWF0Y2hfZmFpbHVyZToKLQlGVU5MT0NLRklMRShmcCk7Ci0JcmV0dXJuIChuYXNzaWduZWQpOwotfQotCi0vKgotICogRmlsbCBpbiB0aGUgZ2l2ZW4gdGFibGUgZnJvbSB0aGUgc2NhbnNldCBhdCB0aGUgZ2l2ZW4gZm9ybWF0Ci0gKiAoanVzdCBhZnRlciBgWycpLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIHBhc3QgdGhlCi0gKiBjbG9zaW5nIGBdJy4gIFRoZSB0YWJsZSBoYXMgYSAxIHdoZXJldmVyIGNoYXJhY3RlcnMgc2hvdWxkIGJlCi0gKiBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNjYW5zZXQuCi0gKi8KLXN0YXRpYyB1X2NoYXIgKgotX19zY2NsKGNoYXIgKnRhYiwgdV9jaGFyICpmbXQpCi17Ci0JaW50IGMsIG4sIHY7Ci0KLQkvKiBmaXJzdCBgY2xlYXInIHRoZSB3aG9sZSB0YWJsZSAqLwotCWMgPSAqZm10Kys7CQkvKiBmaXJzdCBjaGFyIGhhdCA9PiBuZWdhdGVkIHNjYW5zZXQgKi8KLQlpZiAoYyA9PSAnXicpIHsKLQkJdiA9IDE7CQkvKiBkZWZhdWx0ID0+IGFjY2VwdCAqLwotCQljID0gKmZtdCsrOwkvKiBnZXQgbmV3IGZpcnN0IGNoYXIgKi8KLQl9IGVsc2UKLQkJdiA9IDA7CQkvKiBkZWZhdWx0ID0+IHJlamVjdCAqLwotCS8qIHNob3VsZCBwcm9iYWJseSB1c2UgbWVtc2V0IGhlcmUgKi8KLQlmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspCi0JCXRhYltuXSA9IHY7Ci0JaWYgKGMgPT0gMCkKLQkJcmV0dXJuIChmbXQgLSAxKTsvKiBmb3JtYXQgZW5kZWQgYmVmb3JlIGNsb3NpbmcgXSAqLwotCi0JLyoKLQkgKiBOb3cgc2V0IHRoZSBlbnRyaWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFjdHVhbCBzY2Fuc2V0Ci0JICogdG8gdGhlIG9wcG9zaXRlIG9mIHRoZSBhYm92ZS4KLQkgKgotCSAqIFRoZSBmaXJzdCBjaGFyYWN0ZXIgbWF5IGJlICddJyAob3IgJy0nKSB3aXRob3V0IGJlaW5nIHNwZWNpYWw7Ci0JICogdGhlIGxhc3QgY2hhcmFjdGVyIG1heSBiZSAnLScuCi0JICovCi0JdiA9IDEgLSB2OwotCWZvciAoOzspIHsKLQkJdGFiW2NdID0gdjsJCS8qIHRha2UgY2hhcmFjdGVyIGMgKi8KLWRvc3dpdGNoOgotCQluID0gKmZtdCsrOwkJLyogYW5kIGV4YW1pbmUgdGhlIG5leHQgKi8KLQkJc3dpdGNoIChuKSB7Ci0KLQkJY2FzZSAwOgkJCS8qIGZvcm1hdCBlbmRlZCB0b28gc29vbiAqLwotCQkJcmV0dXJuIChmbXQgLSAxKTsKLQotCQljYXNlICctJzoKLQkJCS8qCi0JCQkgKiBBIHNjYW5zZXQgb2YgdGhlIGZvcm0KLQkJCSAqCVswMSstXQotCQkJICogaXMgZGVmaW5lZCBhcyBgdGhlIGRpZ2l0IDAsIHRoZSBkaWdpdCAxLAotCQkJICogdGhlIGNoYXJhY3RlciArLCB0aGUgY2hhcmFjdGVyIC0nLCBidXQKLQkJCSAqIHRoZSBlZmZlY3Qgb2YgYSBzY2Fuc2V0IHN1Y2ggYXMKLQkJCSAqCVthLXpBLVowLTldCi0JCQkgKiBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiAgVGhlIFY3IFVuaXgKLQkJCSAqIHNjYW5mIHRyZWF0cyBgYS16JyBhcyBgdGhlIGxldHRlcnMgYSB0aHJvdWdoCi0JCQkgKiB6JywgYnV0IHRyZWF0cyBgYS1hJyBhcyBgdGhlIGxldHRlciBhLCB0aGUKLQkJCSAqIGNoYXJhY3RlciAtLCBhbmQgdGhlIGxldHRlciBhJy4KLQkJCSAqCi0JCQkgKiBGb3IgY29tcGF0aWJpbGl0eSwgdGhlIGAtJyBpcyBub3QgY29uc2lkZXJkCi0JCQkgKiB0byBkZWZpbmUgYSByYW5nZSBpZiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZwotCQkJICogaXQgaXMgZWl0aGVyIGEgY2xvc2UgYnJhY2tldCAocmVxdWlyZWQgYnkgQU5TSSkKLQkJCSAqIG9yIGlzIG5vdCBudW1lcmljYWxseSBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3RlcgotCQkJICogd2UganVzdCBzdG9yZWQgaW4gdGhlIHRhYmxlIChjKS4KLQkJCSAqLwotCQkJbiA9ICpmbXQ7Ci0JCQlpZiAobiA9PSAnXScgfHwgbiA8IGMpIHsKLQkJCQljID0gJy0nOwotCQkJCWJyZWFrOwkvKiByZXN1bWUgdGhlIGZvcig7OykgKi8KLQkJCX0KLQkJCWZtdCsrOwotCQkJZG8gewkJLyogZmlsbCBpbiB0aGUgcmFuZ2UgKi8KLQkJCQl0YWJbKytjXSA9IHY7Ci0JCQl9IHdoaWxlIChjIDwgbik7Ci0jaWYgMQkvKiBYWFggYW5vdGhlciBkaXNndXN0aW5nIGNvbXBhdGliaWxpdHkgaGFjayAqLwotCQkJLyoKLQkJCSAqIEFsYXMsIHRoZSBWNyBVbml4IHNjYW5mIGFsc28gdHJlYXRzIGZvcm1hdHMKLQkJCSAqIHN1Y2ggYXMgW2EtYy1lXSBhcyBgdGhlIGxldHRlcnMgYSB0aHJvdWdoIGUnLgotCQkJICogVGhpcyB0b28gaXMgcGVybWl0dGVkIGJ5IHRoZSBzdGFuZGFyZC4uLi4KLQkJCSAqLwotCQkJZ290byBkb3N3aXRjaDsKLSNlbHNlCi0JCQljID0gKmZtdCsrOwotCQkJaWYgKGMgPT0gMCkKLQkJCQlyZXR1cm4gKGZtdCAtIDEpOwotCQkJaWYgKGMgPT0gJ10nKQotCQkJCXJldHVybiAoZm10KTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0KLQkJY2FzZSAnXSc6CQkvKiBlbmQgb2Ygc2NhbnNldCAqLwotCQkJcmV0dXJuIChmbXQpOwotCi0JCWRlZmF1bHQ6CQkvKiBqdXN0IGFub3RoZXIgY2hhcmFjdGVyICovCi0JCQljID0gbjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCS8qIE5PVFJFQUNIRUQgKi8KLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdnNucHJpbnRmLmMgYi9saWJjL3N0ZGlvL3ZzbnByaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTMwZjk0Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vdnNucHJpbnRmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgkkT3BlbkJTRDogdnNucHJpbnRmLmMsdiAxLjEyIDIwMDYvMDEvMDYgMTg6NTM6MDQgbWlsbGVydCBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi1pbnQKLXZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBuLCBjb25zdCBjaGFyICpmbXQsIF9fdmFfbGlzdCBhcCkKLXsKLQlpbnQgcmV0OwotCWNoYXIgZHVtbXk7Ci0JRklMRSBmOwotCXN0cnVjdCBfX3NmaWxlZXh0IGZleHQ7Ci0KLQlfRklMRUVYVF9TRVRVUCgmZiwgJmZleHQpOwotCi0JLyogV2hpbGUgc25wcmludGYoMykgc3BlY2lmaWVzIHNpemVfdCBzdGRpbyB1c2VzIGFuIGludCBpbnRlcm5hbGx5ICovCi0JaWYgKG4gPiBJTlRfTUFYKQotCQluID0gSU5UX01BWDsKLQkvKiBTdGRpbyBpbnRlcm5hbHMgZG8gbm90IGRlYWwgY29ycmVjdGx5IHdpdGggemVybyBsZW5ndGggYnVmZmVyICovCi0JaWYgKG4gPT0gMCkgewotCQlzdHIgPSAmZHVtbXk7Ci0JCW4gPSAxOwotCX0KLQlmLl9maWxlID0gLTE7Ci0JZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUjsKLQlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKXN0cjsKLQlmLl9iZi5fc2l6ZSA9IGYuX3cgPSBuIC0gMTsKLQlyZXQgPSBfX3ZmcHJpbnRmKCZmLCBmbXQsIGFwKTsKLQkqZi5fcCA9ICdcMCc7Ci0JcmV0dXJuIChyZXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92c3ByaW50Zi5jIGIvbGliYy9zdGRpby92c3ByaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDZlZThhLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vdnNwcmludGYuYworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCSRPcGVuQlNEOiB2c3ByaW50Zi5jLHYgMS4xMyAyMDA2LzAxLzA2IDE4OjUzOjA0IG1pbGxlcnQgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotI2lmIGRlZmluZWQoQVBJV0FSTikKLV9fd2Fybl9yZWZlcmVuY2VzKHZzcHJpbnRmLAotICAgICJ3YXJuaW5nOiB2c3ByaW50ZigpIGlzIG9mdGVuIG1pc3VzZWQsIHBsZWFzZSB1c2UgdnNucHJpbnRmKCkiKTsKLSNlbmRpZgotCi1pbnQKLXZzcHJpbnRmKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm10LCBfX3ZhX2xpc3QgYXApCi17Ci0JaW50IHJldDsKLQlGSUxFIGY7Ci0Jc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKLQotCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7Ci0JZi5fZmlsZSA9IC0xOwotCWYuX2ZsYWdzID0gX19TV1IgfCBfX1NTVFI7Ci0JZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKilzdHI7Ci0JZi5fYmYuX3NpemUgPSBmLl93ID0gSU5UX01BWDsKLQlyZXQgPSBfX3ZmcHJpbnRmKCZmLCBmbXQsIGFwKTsKLQkqZi5fcCA9ICdcMCc7Ci0JcmV0dXJuIChyZXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92c3NjYW5mLmMgYi9saWJjL3N0ZGlvL3Zzc2NhbmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM0ZDgwNS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL3Zzc2NhbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCSRPcGVuQlNEOiB2c3NjYW5mLmMsdiAxLjExIDIwMDYvMDEvMDYgMTg6NTM6MDQgbWlsbGVydCBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIERvbm4gU2VlbGV5IGF0IFVVTkVUIFRlY2hub2xvZ2llcywgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKiBBUkdTVVNFRCAqLwotc3RhdGljIGludAotZW9mcmVhZCh2b2lkICpjb29raWUsIGNoYXIgKmJ1ZiwgaW50IGxlbikKLXsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLXZzc2NhbmYoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmbXQsIF9fdmFfbGlzdCBhcCkKLXsKLQlGSUxFIGY7Ci0Jc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKLQotCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7Ci0JZi5fZmxhZ3MgPSBfX1NSRDsKLQlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKXN0cjsKLQlmLl9iZi5fc2l6ZSA9IGYuX3IgPSBzdHJsZW4oc3RyKTsKLQlmLl9yZWFkID0gZW9mcmVhZDsKLQlmLl9sYi5fYmFzZSA9IE5VTEw7Ci0JcmV0dXJuICh2ZnNjYW5mKCZmLCBmbXQsIGFwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3didWYuYyBiL2xpYmMvc3RkaW8vd2J1Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDlhYzU5Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vd2J1Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHdidWYuYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotLyoKLSAqIFdyaXRlIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaW50byB0aGUgKHByb2JhYmx5IGZ1bGwpIGJ1ZmZlciBmb3IKLSAqIHRoZSBnaXZlbiBmaWxlLiAgRmx1c2ggdGhlIGJ1ZmZlciBvdXQgaWYgaXQgaXMgb3IgYmVjb21lcyBmdWxsLAotICogb3IgaWYgYz09J1xuJyBhbmQgdGhlIGZpbGUgaXMgbGluZSBidWZmZXJlZC4KLSAqLwotaW50Ci1fX3N3YnVmKGludCBjLCBGSUxFICpmcCkKLXsKLQlpbnQgbjsKLQotCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKLQkvKgotCSAqIEluIGNhc2Ugd2UgY2Fubm90IHdyaXRlLCBvciBsb25nam1wIHRha2VzIHVzIG91dCBlYXJseSwKLQkgKiBtYWtlIHN1cmUgX3cgaXMgMCAoaWYgZnVsbHktIG9yIHVuLWJ1ZmZlcmVkKSBvciAtX2JmLl9zaXplCi0JICogKGlmIGxpbmUgYnVmZmVyZWQpIHNvIHRoYXQgd2Ugd2lsbCBnZXQgY2FsbGVkIGFnYWluLgotCSAqIElmIHdlIGRpZCBub3QgZG8gdGhpcywgYSBzdWZmaWNpZW50IG51bWJlciBvZiBwdXRjKCkKLQkgKiBjYWxscyBtaWdodCB3cmFwIF93IGZyb20gbmVnYXRpdmUgdG8gcG9zaXRpdmUuCi0JICovCi0JZnAtPl93ID0gZnAtPl9sYmZzaXplOwotCWlmIChjYW50d3JpdGUoZnApKSB7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0JYyA9ICh1bnNpZ25lZCBjaGFyKWM7Ci0KLQkvKgotCSAqIElmIGl0IGlzIGNvbXBsZXRlbHkgZnVsbCwgZmx1c2ggaXQgb3V0LiAgVGhlbiwgaW4gYW55IGNhc2UsCi0JICogc3R1ZmYgYyBpbnRvIHRoZSBidWZmZXIuICBJZiB0aGlzIGNhdXNlcyB0aGUgYnVmZmVyIHRvIGZpbGwKLQkgKiBjb21wbGV0ZWx5LCBvciBpZiBjIGlzICdcbicgYW5kIHRoZSBmaWxlIGlzIGxpbmUgYnVmZmVyZWQsCi0JICogZmx1c2ggaXQgKHBlcmhhcHMgYSBzZWNvbmQgdGltZSkuICBUaGUgc2Vjb25kIGZsdXNoIHdpbGwgYWx3YXlzCi0JICogaGFwcGVuIG9uIHVuYnVmZmVyZWQgc3RyZWFtcywgd2hlcmUgX2JmLl9zaXplPT0xOyBfX3NmbHVzaCgpCi0JICogZ3VhcmFudGVlcyB0aGF0IHB1dGMoKSB3aWxsIGFsd2F5cyBjYWxsIHdidWYoKSBieSBzZXR0aW5nIF93Ci0JICogdG8gMCwgc28gd2UgbmVlZCBub3QgZG8gYW55dGhpbmcgZWxzZS4KLQkgKi8KLQluID0gZnAtPl9wIC0gZnAtPl9iZi5fYmFzZTsKLQlpZiAobiA+PSBmcC0+X2JmLl9zaXplKSB7Ci0JCWlmIChfX3NmbHVzaChmcCkpCi0JCQlyZXR1cm4gKEVPRik7Ci0JCW4gPSAwOwotCX0KLQlmcC0+X3ctLTsKLQkqZnAtPl9wKysgPSBjOwotCWlmICgrK24gPT0gZnAtPl9iZi5fc2l6ZSB8fCAoZnAtPl9mbGFncyAmIF9fU0xCRiAmJiBjID09ICdcbicpKQotCQlpZiAoX19zZmx1c2goZnApKQotCQkJcmV0dXJuIChFT0YpOwotCXJldHVybiAoYyk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3djaW8uaCBiL2xpYmMvc3RkaW8vd2Npby5oCmluZGV4IGRkNmRiMjEuLjU4NGEzZjIgMTAwNjQ0Ci0tLSBhL2xpYmMvc3RkaW8vd2Npby5oCisrKyBiL2xpYmMvc3RkaW8vd2Npby5oCkBAIC0xLDM0ICsxLDM0IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKy8qCSRPcGVuQlNEOiB3Y2lvLmgsdiAxLjIgMjAxMy8wNC8xNyAxNzo0MDozNSB0ZWR1IEV4cCAkCSovCisvKiAkTmV0QlNEOiB3Y2lvLmgsdiAxLjMgMjAwMy8wMS8xOCAxMTozMDowMCB0aG9ycGVqIEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKTIwMDEgQ2l0cnVzIFByb2plY3QsCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkQ2l0cnVzJAogICovCiAKLS8qIHRoaXMgZmlsZSBpcyBvbmx5IHVzZWQgdG8gcXVpZXQgdGhlIEJTRCBzdGRpbyBpbXBsZW1lbnRhdGlvbgotICogc2luY2Ugd2UgZG9uJ3QgaW1wbGVtZW50IHdjaGFyIHN1cHBvcnQgYXQgYWxsCi0gKi8KICNpZm5kZWYgX1dDSU9fSF8KICNkZWZpbmUgX1dDSU9fSF8KIApAQCAtMzYsMjIgKzM2LDQ2IEBACiAjZGVmaW5lIFdDSU9fVU5HRVRXQ19CVUZTSVpFIDEKIAogc3RydWN0IHdjaGFyX2lvX2RhdGEgewotICAgICAgICBpbnQgZHVtbXk7CisJbWJzdGF0ZV90IHdjaW9fbWJzdGF0ZV9pbjsKKwltYnN0YXRlX3Qgd2Npb19tYnN0YXRlX291dDsKKworCXdjaGFyX3Qgd2Npb191bmdldHdjX2J1ZltXQ0lPX1VOR0VUV0NfQlVGU0laRV07CisJc2l6ZV90IHdjaW9fdW5nZXR3Y19pbmJ1ZjsKKworCWludCB3Y2lvX21vZGU7IC8qIG9yaWVudGF0aW9uICovCiB9OwogCi0vKiBCSU9OSUM6IGRpc2FibGUgd2NoYXIgc3VwcG9ydCAqLwogI2RlZmluZSBXQ0lPX0dFVChmcCkgXAotCSgoc3RydWN0IHdjaGFyX2lvX2RhdGEqKSAwKQorCShfRVhUKGZwKSA/ICYoX0VYVChmcCktPl93Y2lvKSA6IChzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSAqKTApCiAKLSNkZWZpbmUgX1NFVF9PUklFTlRBVElPTihmcCwgbW9kZSkgKCh2b2lkKTApCisjZGVmaW5lIF9TRVRfT1JJRU5UQVRJT04oZnAsIG1vZGUpIFwKK2RvIHtcCisJc3RydWN0IHdjaGFyX2lvX2RhdGEgKl93Y2lvID0gV0NJT19HRVQoZnApOyBcCisJaWYgKF93Y2lvICYmIF93Y2lvLT53Y2lvX21vZGUgPT0gMCkgXAorCQlfd2Npby0+d2Npb19tb2RlID0gKG1vZGUpO1wKK30gd2hpbGUgKDApCiAKIC8qCiAgKiBXQ0lPX0ZSRUUgc2hvdWxkIGJlIGNhbGxlZCBieSBmY2xvc2UKICAqLwotI2RlZmluZSBXQ0lPX0ZSRUUoZnApICgodm9pZCkoMCkpCisjZGVmaW5lIFdDSU9fRlJFRShmcCkgXAorZG8ge1wKKwlzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSAqX3djaW8gPSBXQ0lPX0dFVChmcCk7IFwKKwlpZiAoX3djaW8pIHsgXAorCQlfd2Npby0+d2Npb19tb2RlID0gMDtcCisJCV93Y2lvLT53Y2lvX3VuZ2V0d2NfaW5idWYgPSAwO1wKKwl9IFwKK30gd2hpbGUgKDApCiAKLSNkZWZpbmUgV0NJT19GUkVFVUIoZnApICgodm9pZCkwKQorI2RlZmluZSBXQ0lPX0ZSRUVVQihmcCkgXAorZG8ge1wKKwlzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSAqX3djaW8gPSBXQ0lPX0dFVChmcCk7IFwKKwlpZiAoX3djaW8pIHsgXAorCQlfd2Npby0+d2Npb191bmdldHdjX2luYnVmID0gMDtcCisJfSBcCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIFdDSU9fSU5JVChmcCkgICgodm9pZCkwKQorI2RlZmluZSBXQ0lPX0lOSVQoZnApIFwKKwltZW1zZXQoJihfRVhUKGZwKS0+X3djaW8pLCAwLCBzaXplb2Yoc3RydWN0IHdjaGFyX2lvX2RhdGEpKQogCiAjZW5kaWYgLypfV0NJT19IXyovCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdGV4aXQuYyBiL2xpYmMvc3RkbGliL2F0ZXhpdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTE0NDM0Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL2F0ZXhpdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBhdGV4aXQuYyx2IDEuMTQgMjAwNy8wOS8wNSAyMDo0Nzo0NyBjaGwgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgRGFuaWVsIEhhcnRtZWllcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KLSAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgImF0ZXhpdC5oIgotI2luY2x1ZGUgInByaXZhdGUvdGhyZWFkX3ByaXZhdGUuaCIKLQotaW50IF9fYXRleGl0X2ludmFsaWQgPSAxOwotc3RydWN0IGF0ZXhpdCAqX19hdGV4aXQ7Ci0KLS8qCi0gKiBGdW5jdGlvbiBwb2ludGVycyBhcmUgc3RvcmVkIGluIGEgbGlua2VkIGxpc3Qgb2YgcGFnZXMuIFRoZSBsaXN0Ci0gKiBpcyBpbml0aWFsbHkgZW1wdHksIGFuZCBwYWdlcyBhcmUgYWxsb2NhdGVkIG9uIGRlbWFuZC4gVGhlIGZpcnN0Ci0gKiBmdW5jdGlvbiBwb2ludGVyIGluIHRoZSBmaXJzdCBhbGxvY2F0ZWQgcGFnZSAodGhlIGxhc3Qgb25lIGluCi0gKiB0aGUgbGlua2VkIGxpc3QpIHdhcyByZXNlcnZlZCBmb3IgdGhlIGNsZWFudXAgZnVuY3Rpb24uCi0gKiBUT0RPOiBzd2l0Y2ggdG8gdGhlIHJlZ3VsYXIgRnJlZUJTRC9OZXRCU0QgYXRleGl0IGltcGxlbWVudGF0aW9uLgotICoKLSAqIE91dHNpZGUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMsIGFsbCBwYWdlcyBhcmUgbXByb3RlY3QoKSdlZAotICogdG8gcHJldmVudCB1bmludGVudGlvbmFsL21hbGljaW91cyBjb3JydXB0aW9uLgotICovCi0KLS8qCi0gKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIHBlcmZvcm1lZCBhdCBleGl0IG9yIHdoZW4gYSBzaGFyZWQgb2JqZWN0Ci0gKiB3aXRoIHRoZSBnaXZlbiBkc28gaGFuZGxlIGlzIHVubG9hZGVkIGR5bmFtaWNhbGx5LiAgQWxzbyB1c2VkIGFzCi0gKiB0aGUgYmFja2VuZCBmb3IgYXRleGl0KCkuICBGb3IgbW9yZSBpbmZvIG9uIHRoaXMgQVBJLCBzZWU6Ci0gKgotICoJaHR0cDovL3d3dy5jb2Rlc291cmNlcnkuY29tL2N4eC1hYmkvYWJpLmh0bWwjZHNvLWR0b3IKLSAqLwotaW50Ci1fX2N4YV9hdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZywgdm9pZCAqZHNvKQotewotCXN0cnVjdCBhdGV4aXQgKnAgPSBfX2F0ZXhpdDsKLQlzdHJ1Y3QgYXRleGl0X2ZuICpmbnA7Ci0JaW50IHBnc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0JaW50IHJldCA9IC0xOwotCi0JaWYgKHBnc2l6ZSA8IChpbnQpc2l6ZW9mKCpwKSkKLQkJcmV0dXJuICgtMSk7Ci0JX0FURVhJVF9MT0NLKCk7Ci0JcCA9IF9fYXRleGl0OwotCWlmIChwICE9IE5VTEwpIHsKLQkJaWYgKHAtPmluZCArIDEgPj0gcC0+bWF4KQotCQkJcCA9IE5VTEw7Ci0JCWVsc2UgaWYgKG1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpCi0JCQlnb3RvIHVubG9jazsKLQl9Ci0JaWYgKHAgPT0gTlVMTCkgewotCQlwID0gbW1hcChOVUxMLCBwZ3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCSAgICBNQVBfQU5PTiB8IE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JCWlmIChwID09IE1BUF9GQUlMRUQpCi0JCQlnb3RvIHVubG9jazsKLQkJaWYgKF9fYXRleGl0ID09IE5VTEwpIHsKLQkJCW1lbXNldCgmcC0+Zm5zWzBdLCAwLCBzaXplb2YocC0+Zm5zWzBdKSk7Ci0JCQlwLT5pbmQgPSAxOwotCQl9IGVsc2UKLQkJCXAtPmluZCA9IDA7Ci0JCXAtPm1heCA9IChwZ3NpemUgLSAoKGNoYXIgKikmcC0+Zm5zWzBdIC0gKGNoYXIgKilwKSkgLwotCQkgICAgc2l6ZW9mKHAtPmZuc1swXSk7Ci0JCXAtPm5leHQgPSBfX2F0ZXhpdDsKLQkJX19hdGV4aXQgPSBwOwotCQlpZiAoX19hdGV4aXRfaW52YWxpZCkKLQkJCV9fYXRleGl0X2ludmFsaWQgPSAwOwotCX0KLQlmbnAgPSAmcC0+Zm5zW3AtPmluZCsrXTsKLQlmbnAtPmZuX3B0ci5jeGFfZnVuYyA9IGZ1bmM7Ci0JZm5wLT5mbl9hcmcgPSBhcmc7Ci0JZm5wLT5mbl9kc28gPSBkc287Ci0JaWYgKG1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEKSkKLQkJZ290byB1bmxvY2s7Ci0JcmV0ID0gMDsKLXVubG9jazoKLQlfQVRFWElUX1VOTE9DSygpOwotCXJldHVybiAocmV0KTsKLX0KLQotLyoKLSAqIENhbGwgYWxsIGhhbmRsZXJzIHJlZ2lzdGVyZWQgd2l0aCBfX2N4YV9hdGV4aXQoKSBmb3IgdGhlIHNoYXJlZAotICogb2JqZWN0IG93bmluZyAnZHNvJy4KLSAqIE5vdGU6IGlmICdkc28nIGlzIE5VTEwsIHRoZW4gYWxsIHJlbWFpbmluZyBoYW5kbGVycyBhcmUgY2FsbGVkLgotICovCi12b2lkCi1fX2N4YV9maW5hbGl6ZSh2b2lkICpkc28pCi17Ci0Jc3RydWN0IGF0ZXhpdCAqcCwgKnE7Ci0Jc3RydWN0IGF0ZXhpdF9mbiBmbjsKLQlpbnQgbiwgcGdzaXplID0gZ2V0cGFnZXNpemUoKTsKLQlzdGF0aWMgaW50IGNhbGxfZGVwdGg7Ci0KLQlpZiAoX19hdGV4aXRfaW52YWxpZCkKLQkJcmV0dXJuOwotCi0JX0FURVhJVF9MT0NLKCk7Ci0JY2FsbF9kZXB0aCsrOwotCi0JZm9yIChwID0gX19hdGV4aXQ7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpIHsKLQkJZm9yIChuID0gcC0+aW5kOyAtLW4gPj0gMDspIHsKLQkJCWlmIChwLT5mbnNbbl0uZm5fcHRyLmN4YV9mdW5jID09IE5VTEwpCi0JCQkJY29udGludWU7CS8qIGFscmVhZHkgY2FsbGVkICovCi0JCQlpZiAoZHNvICE9IE5VTEwgJiYgZHNvICE9IHAtPmZuc1tuXS5mbl9kc28pCi0JCQkJY29udGludWU7CS8qIHdyb25nIERTTyAqLwotCi0JCQkvKgotCQkJICogTWFyayBoYW5kbGVyIGFzIGhhdmluZyBiZWVuIGFscmVhZHkgY2FsbGVkIHRvIGF2b2lkCi0JCQkgKiBkdXBlcyBhbmQgbG9vcHMsIHRoZW4gY2FsbCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24uCi0JCQkgKi8KLQkJCWZuID0gcC0+Zm5zW25dOwotCQkJaWYgKG1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkgPT0gMCkgewotCQkJCXAtPmZuc1tuXS5mbl9wdHIuY3hhX2Z1bmMgPSBOVUxMOwotCQkJCW1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEKTsKLQkJCX0KLQkJCV9BVEVYSVRfVU5MT0NLKCk7Ci0jaWYgQU5EUk9JRAotICAgICAgICAgICAgICAgICAgICAgICAgLyogaXQgbG9va3MgbGlrZSB3ZSBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB3aXRoIGFuIGFyZ3VtZW50LCBldmVuIGlmIGRzbyBpcyBub3QgTlVMTC4gT3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGF0aWMgZGVzdHJ1Y3RvcnMgd2lsbCBub3QgYmUgY2FsbGVkIHByb3Blcmx5IG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgQVJNLgotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAoKmZuLmZuX3B0ci5jeGFfZnVuYykoZm4uZm5fYXJnKTsKLSNlbHNlIC8qICFBTkRST0lEICovCi0JCQlpZiAoZHNvICE9IE5VTEwpCi0JCQkJKCpmbi5mbl9wdHIuY3hhX2Z1bmMpKGZuLmZuX2FyZyk7Ci0JCQllbHNlCi0JCQkJKCpmbi5mbl9wdHIuc3RkX2Z1bmMpKCk7Ci0jZW5kaWYgLyogIUFORFJPSUQgKi8KLQkJCV9BVEVYSVRfTE9DSygpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBJZiBjYWxsZWQgdmlhIGV4aXQoKSwgdW5tYXAgdGhlIHBhZ2VzIHNpbmNlIHdlIGhhdmUgbm93IHJ1bgotCSAqIGFsbCB0aGUgaGFuZGxlcnMuICBXZSBkZWZlciB0aGlzIHVudGlsIGNhbGxkZXB0aCA9PSAwIHNvIHRoYXQKLQkgKiB3ZSBkb24ndCB1bm1hcCB0aGluZ3MgcHJlbWF0dXJlbHkgaWYgY2FsbGVkIHJlY3Vyc2l2ZWx5LgotCSAqLwotCWlmIChkc28gPT0gTlVMTCAmJiAtLWNhbGxfZGVwdGggPT0gMCkgewotCQlmb3IgKHAgPSBfX2F0ZXhpdDsgcCAhPSBOVUxMOyApIHsKLQkJCXEgPSBwOwotCQkJcCA9IHAtPm5leHQ7Ci0JCQltdW5tYXAocSwgcGdzaXplKTsKLQkJfQotCQlfX2F0ZXhpdCA9IE5VTEw7Ci0JfQotCV9BVEVYSVRfVU5MT0NLKCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdGV4aXQuaCBiL2xpYmMvc3RkbGliL2F0ZXhpdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjNlNWFiLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL2F0ZXhpdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGF0ZXhpdC5oLHYgMS43IDIwMDcvMDkvMDMgMTQ6NDA6MTYgbWlsbGVydCBFeHAgJCAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDAyIERhbmllbCBIYXJ0bWVpZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCi0gKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0KLXN0cnVjdCBhdGV4aXQgewotCXN0cnVjdCBhdGV4aXQgKm5leHQ7CQkvKiBuZXh0IGluIGxpc3QgKi8KLQlpbnQgaW5kOwkJCS8qIG5leHQgaW5kZXggaW4gdGhpcyB0YWJsZSAqLwotCWludCBtYXg7CQkJLyogbWF4IGVudHJpZXMgPj0gQVRFWElUX1NJWkUgKi8KLQlzdHJ1Y3QgYXRleGl0X2ZuIHsKLQkJdW5pb24gewotCQkJdm9pZCAoKnN0ZF9mdW5jKSh2b2lkKTsKLQkJCXZvaWQgKCpjeGFfZnVuYykodm9pZCAqKTsKLQkJfSBmbl9wdHI7Ci0JCXZvaWQgKmZuX2FyZzsJCS8qIGFyZ3VtZW50IGZvciBDWEEgY2FsbGJhY2sgKi8KLQkJdm9pZCAqZm5fZHNvOwkJLyogc2hhcmVkIG1vZHVsZSBoYW5kbGUgKi8KLQl9IGZuc1sxXTsJCQkvKiB0aGUgdGFibGUgaXRzZWxmICovCi19OwotCi1fX0JFR0lOX0RFQ0xTCi0KLWV4dGVybiBpbnQgX19hdGV4aXRfaW52YWxpZDsKLWV4dGVybiBzdHJ1Y3QgYXRleGl0ICpfX2F0ZXhpdDsJCS8qIHBvaW50cyB0byBoZWFkIG9mIExJRk8gc3RhY2sgKi8KLQotaW50CV9fY3hhX2F0ZXhpdCh2b2lkICgqKSh2b2lkICopLCB2b2lkICosIHZvaWQgKik7Ci12b2lkCV9fY3hhX2ZpbmFsaXplKHZvaWQgKik7Ci0KLV9fRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9jdHlwZV8uYyBiL2xpYmMvc3RkbGliL2N0eXBlXy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzAzZjY0Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL2N0eXBlXy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBjdHlwZV8uYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjMzIGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg5IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgotICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKLSAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKLSAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCi0gKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSAiY3R5cGVfcHJpdmF0ZS5oIgotCi0jZGVmaW5lIF9VIF9DVFlQRV9VCi0jZGVmaW5lIF9MIF9DVFlQRV9MCi0jZGVmaW5lIF9OIF9DVFlQRV9OCi0jZGVmaW5lIF9TIF9DVFlQRV9TCi0jZGVmaW5lIF9QIF9DVFlQRV9QCi0jZGVmaW5lIF9DIF9DVFlQRV9DCi0jZGVmaW5lIF9YIF9DVFlQRV9YCi0jZGVmaW5lIF9CIF9DVFlQRV9CCi0KLWNvbnN0IGNoYXIgX0NfY3R5cGVfWzEgKyBDVFlQRV9OVU1fQ0hBUlNdID0gewotCTAsCi0JX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAotCV9DLAlfQ3xfUywJX0N8X1MsCV9DfF9TLAlfQ3xfUywJX0N8X1MsCV9DLAlfQywKLQlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCi0JX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAotICAgX1N8KGNoYXIpX0IsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAotCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwKLQlfTiwJX04sCV9OLAlfTiwJX04sCV9OLAlfTiwJX04sCi0JX04sCV9OLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAotCV9QLAlfVXxfWCwJX1V8X1gsCV9VfF9YLAlfVXxfWCwJX1V8X1gsCV9VfF9YLAlfVSwKLQlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCi0JX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAotCV9VLAlfVSwJX1UsCV9QLAlfUCwJX1AsCV9QLAlfUCwKLQlfUCwJX0x8X1gsCV9MfF9YLAlfTHxfWCwJX0x8X1gsCV9MfF9YLAlfTHxfWCwJX0wsCi0JX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAotCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwKLQkvKiBkZXRlcm1pbmUgcHJpbnRhYmlsaXR5IGJhc2VkIG9uIHRoZSBJUzAgODg1OSA4LWJpdCBzdGFuZGFyZCAqLwotCV9MLAlfTCwJX0wsCV9QLAlfUCwJX1AsCV9QLAlfQywKLQotCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywgLyogODAgKi8KLQlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsIC8qIDg4ICovCi0JX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLCAvKiA5MCAqLwotCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywgLyogOTggKi8KLQlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEEwICovCi0JX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBBOCAqLwotCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogQjAgKi8KLQlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEI4ICovCi0JX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBDMCAqLwotCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogQzggKi8KLQlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEQwICovCi0JX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBEOCAqLwotCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogRTAgKi8KLQlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEU4ICovCi0JX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBGMCAqLwotCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCAgLyogRjggKi8KLX07Ci0KLWNvbnN0IGNoYXIgKl9jdHlwZV8gPSBfQ19jdHlwZV87Ci0KLQotLy8gVE9ETzogZml4IHRoZSBoZWFkZXIgZmlsZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGR1cGxpY2F0ZSBhbGwgdGhpcyBpbmxpbmVkIHN0dWZmLgotCi0jaWYgMSAvKiBuZGVmIE5ERUJVRyAqLwotaW50IGlzYWxudW0oaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9VfF9MfF9OKSkpOwotfQotCi1pbnQgaXNhbHBoYShpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX1V8X0wpKSk7Ci19Ci0KLWludCBpc2NudHJsKGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9DKSk7Ci19Ci0KLWludCBpc2RpZ2l0KGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9OKSk7Ci19Ci0KLWludCBpc2dyYXBoKGludCBjKQotewotCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfUHxfVXxfTHxfTikpKTsKLX0KLQotaW50IGlzbG93ZXIoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0wpKTsKLX0KLQotaW50IGlzcHJpbnQoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9QfF9VfF9MfF9OfF9CKSkpOwotfQotCi1pbnQgaXNwdW5jdChpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfUCkpOwotfQotCi1pbnQgaXNzcGFjZShpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfUykpOwotfQotCi1pbnQgaXN1cHBlcihpbnQgYykKLXsKLQlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfVSkpOwotfQotCi1pbnQgaXN4ZGlnaXQoaW50IGMpCi17Ci0JcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9OfF9YKSkpOwotfQotCi0jaWYgX19CU0RfVklTSUJMRSB8fCBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSB8fCBfX1BPU0lYX1ZJU0lCTEUgPiAyMDAxMTIgXAotICAgIHx8IF9fWFBHX1ZJU0lCTEUgPiA2MDAKLWludCBpc2JsYW5rKGludCBjKQotewotCXJldHVybiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKTsKLX0KLSNlbmRpZgotCi0jaWYgX19CU0RfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFCi1pbnQgaXNhc2NpaShpbnQgYykKLXsKLQlyZXR1cm4gKCh1bnNpZ25lZCBpbnQpYyA8PSAwMTc3KTsKLX0KLQotaW50IHRvYXNjaWkoaW50IGMpCi17Ci0JcmV0dXJuIChjICYgMDE3Nyk7Ci19Ci0KLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUgKi8KLQotI2VuZGlmIC8qICFOREJFVUcgKi8KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2dldGVudi5jIGIvbGliYy9zdGRsaWIvZ2V0ZW52LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMzY3YjMuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRsaWIvZ2V0ZW52LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgkkT3BlbkJTRDogZ2V0ZW52LmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4NywgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotY2hhciAqX19maW5kZW52KGNvbnN0IGNoYXIgKm5hbWUsIGludCAqb2Zmc2V0KTsKLQotLyoKLSAqIF9fZmluZGVudiAtLQotICoJUmV0dXJucyBwb2ludGVyIHRvIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBuYW1lLCBpZiBhbnksIGVsc2UgTlVMTC4KLSAqCVNldHMgb2Zmc2V0IHRvIGJlIHRoZSBvZmZzZXQgb2YgdGhlIG5hbWUvdmFsdWUgY29tYmluYXRpb24gaW4gdGhlCi0gKgllbnZpcm9ubWVudGFsIGFycmF5LCBmb3IgdXNlIGJ5IHNldGVudigzKSBhbmQgdW5zZXRlbnYoMykuCi0gKglFeHBsaWNpdGx5IHJlbW92ZXMgJz0nIGluIGFyZ3VtZW50IG5hbWUuCi0gKgotICoJVGhpcyByb3V0aW5lICpzaG91bGQqIGJlIGEgc3RhdGljOyBkb24ndCB1c2UgaXQuCi0gKi8KLWNoYXIgKgotX19maW5kZW52KGNvbnN0IGNoYXIgKm5hbWUsIGludCAqb2Zmc2V0KQotewotCWV4dGVybiBjaGFyICoqZW52aXJvbjsKLQlpbnQgbGVuLCBpOwotCWNvbnN0IGNoYXIgKm5wOwotCWNoYXIgKipwLCAqY3A7Ci0KLQlpZiAobmFtZSA9PSBOVUxMIHx8IGVudmlyb24gPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQlmb3IgKG5wID0gbmFtZTsgKm5wICYmICpucCAhPSAnPSc7ICsrbnApCi0JCTsKLQlsZW4gPSBucCAtIG5hbWU7Ci0JZm9yIChwID0gZW52aXJvbjsgKGNwID0gKnApICE9IE5VTEw7ICsrcCkgewotCQlmb3IgKG5wID0gbmFtZSwgaSA9IGxlbjsgaSAmJiAqY3A7IGktLSkKLQkJCWlmICgqY3ArKyAhPSAqbnArKykKLQkJCQlicmVhazsKLQkJaWYgKGkgPT0gMCAmJiAqY3ArKyA9PSAnPScpIHsKLQkJCSpvZmZzZXQgPSBwIC0gZW52aXJvbjsKLQkJCXJldHVybiAoY3ApOwotCQl9Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLS8qCi0gKiBnZXRlbnYgLS0KLSAqCVJldHVybnMgcHRyIHRvIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBuYW1lLCBpZiBhbnksIGVsc2UgTlVMTC4KLSAqLwotY2hhciAqCi1nZXRlbnYoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlpbnQgb2Zmc2V0OwotCi0JcmV0dXJuIChfX2ZpbmRlbnYobmFtZSwgJm9mZnNldCkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvcHV0ZW52LmMgYi9saWJjL3N0ZGxpYi9wdXRlbnYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ0ODJmNi4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9wdXRlbnYuYworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCSRPcGVuQlNEOiBwdXRlbnYuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MwotICogICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLWludAotcHV0ZW52KGNvbnN0IGNoYXIgKnN0cikKLXsKLQljaGFyICpwLCAqZXF1YWw7Ci0JaW50IHJ2YWw7Ci0KLQlpZiAoKHAgPSBzdHJkdXAoc3RyKSkgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7Ci0JaWYgKChlcXVhbCA9IHN0cmNocihwLCAnPScpKSA9PSBOVUxMKSB7Ci0JCSh2b2lkKWZyZWUocCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQkqZXF1YWwgPSAnXDAnOwotCXJ2YWwgPSBzZXRlbnYocCwgZXF1YWwgKyAxLCAxKTsKLQkodm9pZClmcmVlKHApOwotCXJldHVybiAocnZhbCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zZXRlbnYuYyBiL2xpYmMvc3RkbGliL3NldGVudi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTZkYjVlLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL3NldGVudi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzZXRlbnYuYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg3IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotY2hhciAqX19maW5kZW52KGNvbnN0IGNoYXIgKm5hbWUsIGludCAqb2Zmc2V0KTsKLQotZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwotCi0vKgotICogc2V0ZW52IC0tCi0gKglTZXQgdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlICJuYW1lIiB0byBiZQotICoJInZhbHVlIi4gIElmIHJld3JpdGUgaXMgc2V0LCByZXBsYWNlIGFueSBjdXJyZW50IHZhbHVlLgotICovCi1pbnQKLXNldGVudihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgaW50IHJld3JpdGUpCi17Ci0Jc3RhdGljIGNoYXIgKipsYXN0ZW52OwkJCS8qIGxhc3QgdmFsdWUgb2YgZW52aXJvbiAqLwotCWNoYXIgKkM7Ci0JaW50IGxfdmFsdWUsIG9mZnNldDsKLQotCWlmICgqdmFsdWUgPT0gJz0nKQkJCS8qIG5vIGA9JyBpbiB2YWx1ZSAqLwotCQkrK3ZhbHVlOwotCWxfdmFsdWUgPSBzdHJsZW4odmFsdWUpOwotCWlmICgoQyA9IF9fZmluZGVudihuYW1lLCAmb2Zmc2V0KSkpIHsJLyogZmluZCBpZiBhbHJlYWR5IGV4aXN0cyAqLwotCQlpZiAoIXJld3JpdGUpCi0JCQlyZXR1cm4gKDApOwotCQlpZiAoKGludClzdHJsZW4oQykgPj0gbF92YWx1ZSkgewkvKiBvbGQgbGFyZ2VyOyBjb3B5IG92ZXIgKi8KLQkJCXdoaWxlICgoKkMrKyA9ICp2YWx1ZSsrKSkKLQkJCQk7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JfSBlbHNlIHsJCQkJCS8qIGNyZWF0ZSBuZXcgc2xvdCAqLwotCQlzaXplX3QgY250OwotCQljaGFyICoqUDsKLQotCQlmb3IgKFAgPSBlbnZpcm9uOyAqUCAhPSBOVUxMOyBQKyspCi0JCQk7Ci0JCWNudCA9IFAgLSBlbnZpcm9uOwotICAgICAgICBQID0gKGNoYXIgKiopcmVhbGxvYyhsYXN0ZW52LCBzaXplb2YoY2hhciAqKSAqIChjbnQgKyAyKSk7Ci0JCWlmICghUCkKLQkJCXJldHVybiAoLTEpOwotCQlpZiAobGFzdGVudiAhPSBlbnZpcm9uKQotCQkJbWVtY3B5KFAsIGVudmlyb24sIGNudCAqIHNpemVvZihjaGFyICopKTsKLQkJbGFzdGVudiA9IGVudmlyb24gPSBQOwotCQlvZmZzZXQgPSBjbnQ7Ci0JCWVudmlyb25bY250ICsgMV0gPSBOVUxMOwotCX0KLQlmb3IgKEMgPSAoY2hhciAqKW5hbWU7ICpDICYmICpDICE9ICc9JzsgKytDKQotCQk7CQkJCS8qIG5vIGA9JyBpbiBuYW1lICovCi0JaWYgKCEoZW52aXJvbltvZmZzZXRdID0JCQkvKiBuYW1lICsgYD0nICsgdmFsdWUgKi8KLQkgICAgbWFsbG9jKChzaXplX3QpKChpbnQpKEMgLSBuYW1lKSArIGxfdmFsdWUgKyAyKSkpKQotCQlyZXR1cm4gKC0xKTsKLQlmb3IgKEMgPSBlbnZpcm9uW29mZnNldF07ICgqQyA9ICpuYW1lKyspICYmICpDICE9ICc9JzsgKytDKQotCQk7Ci0JZm9yICgqQysrID0gJz0nOyAoKkMrKyA9ICp2YWx1ZSsrKTsgKQotCQk7Ci0JcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIHVuc2V0ZW52KG5hbWUpIC0tCi0gKglEZWxldGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSAibmFtZSIuCi0gKi8KLWludAotdW5zZXRlbnYoY29uc3QgY2hhciAqbmFtZSkKLXsKLQljaGFyICoqUDsKLQlpbnQgb2Zmc2V0OwotCi0Jd2hpbGUgKF9fZmluZGVudihuYW1lLCAmb2Zmc2V0KSkJLyogaWYgc2V0IG11bHRpcGxlIHRpbWVzICovCi0JCWZvciAoUCA9ICZlbnZpcm9uW29mZnNldF07OyArK1ApCi0JCQlpZiAoISgqUCA9ICooUCArIDEpKSkKLQkJCQlicmVhazsKLQotICAgICAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvZC5jIGIvbGliYy9zdGRsaWIvc3RydG9kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MzRkOWEuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRsaWIvc3RydG9kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzA4ICswLDAgQEAKLS8qCSROZXRCU0Q6IHN0cnRvZC5jLHYgMS40NS4yLjEgMjAwNS8wNC8xOSAxMzozNTo1NCB0cm9uIEV4cCAkCSovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTEgYnkgQVQmVC4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBlbnRpcmUgbm90aWNlCi0gKiBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIGFueSBzb2Z0d2FyZSB3aGljaCBpcyBvciBpbmNsdWRlcyBhIGNvcHkKLSAqIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBpbiBhbGwgY29waWVzIG9mIHRoZSBzdXBwb3J0aW5nCi0gKiBkb2N1bWVudGF0aW9uIGZvciBzdWNoIHNvZnR3YXJlLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5UWS4gIElOIFBBUlRJQ1VMQVIsIE5FSVRIRVIgVEhFIEFVVEhPUiBOT1IgQVQmVCBNQUtFUyBBTlkKLSAqIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1FUkNIQU5UQUJJTElUWQotICogT0YgVEhJUyBTT0ZUV0FSRSBPUiBJVFMgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0bwotCURhdmlkIE0uIEdheQotCUFUJlQgQmVsbCBMYWJvcmF0b3JpZXMsIFJvb20gMkMtNDYzCi0JNjAwIE1vdW50YWluIEF2ZW51ZQotCU11cnJheSBIaWxsLCBOSiAwNzk3NC0yMDcwCi0JVS5TLkEuCi0JZG1nQHJlc2VhcmNoLmF0dC5jb20gb3IgcmVzZWFyY2ghZG1nCi0gKi8KLQotLyogc3RydG9kIGZvciBJRUVFLSwgVkFYLSwgYW5kIElCTS1hcml0aG1ldGljIG1hY2hpbmVzLgotICoKLSAqIFRoaXMgc3RydG9kIHJldHVybnMgYSBuZWFyZXN0IG1hY2hpbmUgbnVtYmVyIHRvIHRoZSBpbnB1dCBkZWNpbWFsCi0gKiBzdHJpbmcgKG9yIHNldHMgZXJybm8gdG8gRVJBTkdFKS4gIFdpdGggSUVFRSBhcml0aG1ldGljLCB0aWVzIGFyZQotICogYnJva2VuIGJ5IHRoZSBJRUVFIHJvdW5kLWV2ZW4gcnVsZS4gIE90aGVyd2lzZSB0aWVzIGFyZSBicm9rZW4gYnkKLSAqIGJpYXNlZCByb3VuZGluZyAoYWRkIGhhbGYgYW5kIGNob3ApLgotICoKLSAqIEluc3BpcmVkIGxvb3NlbHkgYnkgV2lsbGlhbSBELiBDbGluZ2VyJ3MgcGFwZXIgIkhvdyB0byBSZWFkIEZsb2F0aW5nCi0gKiBQb2ludCBOdW1iZXJzIEFjY3VyYXRlbHkiIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiA5Mi0xMDFdLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKgotICoJMS4gV2Ugb25seSByZXF1aXJlIElFRUUsIElCTSwgb3IgVkFYIGRvdWJsZS1wcmVjaXNpb24KLSAqCQlhcml0aG1ldGljIChub3QgSUVFRSBkb3VibGUtZXh0ZW5kZWQpLgotICoJMi4gV2UgZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyBpbiBhIGNhc2UgdGhhdAotICoJCUNsaW5nZXIgbWlzc2VkIC0tIHdoZW4gd2UncmUgY29tcHV0aW5nIGQgKiAxMF5uCi0gKgkJZm9yIGEgc21hbGwgaW50ZWdlciBkIGFuZCB0aGUgaW50ZWdlciBuIGlzIG5vdCB0b28KLSAqCQltdWNoIGxhcmdlciB0aGFuIDIyICh0aGUgbWF4aW11bSBpbnRlZ2VyIGsgZm9yIHdoaWNoCi0gKgkJd2UgY2FuIHJlcHJlc2VudCAxMF5rIGV4YWN0bHkpLCB3ZSBtYXkgYmUgYWJsZSB0bwotICoJCWNvbXB1dGUgKGQqMTBeaykgKiAxMF4oZS1rKSB3aXRoIGp1c3Qgb25lIHJvdW5kb2ZmLgotICoJMy4gUmF0aGVyIHRoYW4gYSBiaXQtYXQtYS10aW1lIGFkanVzdG1lbnQgb2YgdGhlIGJpbmFyeQotICoJCXJlc3VsdCBpbiB0aGUgaGFyZCBjYXNlLCB3ZSB1c2UgZmxvYXRpbmctcG9pbnQKLSAqCQlhcml0aG1ldGljIHRvIGRldGVybWluZSB0aGUgYWRqdXN0bWVudCB0byB3aXRoaW4KLSAqCQlvbmUgYml0OyBvbmx5IGluIHJlYWxseSBoYXJkIGNhc2VzIGRvIHdlIG5lZWQgdG8KLSAqCQljb21wdXRlIGEgc2Vjb25kIHJlc2lkdWFsLgotICoJNC4gQmVjYXVzZSBvZiAzLiwgd2UgZG9uJ3QgbmVlZCBhIGxhcmdlIHRhYmxlIG9mIHBvd2VycyBvZiAxMAotICoJCWZvciB0ZW4tdG8tZSAoanVzdCBzb21lIHNtYWxsIHRhYmxlcywgZS5nLiBvZiAxMF5rCi0gKgkJZm9yIDAgPD0gayA8PSAyMikuCi0gKi8KLQotLyoKLSAqICNkZWZpbmUgSUVFRV9MSVRUTEVfRU5ESUFOIGZvciBJRUVFLWFyaXRobWV0aWMgbWFjaGluZXMgd2hlcmUgdGhlIGxlYXN0Ci0gKglzaWduaWZpY2FudCBieXRlIGhhcyB0aGUgbG93ZXN0IGFkZHJlc3MuCi0gKiAjZGVmaW5lIElFRUVfQklHX0VORElBTiBmb3IgSUVFRS1hcml0aG1ldGljIG1hY2hpbmVzIHdoZXJlIHRoZSBtb3N0Ci0gKglzaWduaWZpY2FudCBieXRlIGhhcyB0aGUgbG93ZXN0IGFkZHJlc3MuCi0gKiAjZGVmaW5lIExvbmcgaW50IG9uIG1hY2hpbmVzIHdpdGggMzItYml0IGludHMgYW5kIDY0LWJpdCBsb25ncy4KLSAqICNkZWZpbmUgU3VkZGVuX1VuZGVyZmxvdyBmb3IgSUVFRS1mb3JtYXQgbWFjaGluZXMgd2l0aG91dCBncmFkdWFsCi0gKgl1bmRlcmZsb3cgKGkuZS4sIHRoYXQgZmx1c2ggdG8gemVybyBvbiB1bmRlcmZsb3cpLgotICogI2RlZmluZSBJQk0gZm9yIElCTSBtYWluZnJhbWUtc3R5bGUgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4KLSAqICNkZWZpbmUgVkFYIGZvciBWQVgtc3R5bGUgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4KLSAqICNkZWZpbmUgVW5zaWduZWRfU2hpZnRzIGlmID4+IGRvZXMgdHJlYXRzIGl0cyBsZWZ0IG9wZXJhbmQgYXMgdW5zaWduZWQuCi0gKiAjZGVmaW5lIE5vX2xlZnRyaWdodCB0byBvbWl0IGxlZnQtcmlnaHQgbG9naWMgaW4gZmFzdCBmbG9hdGluZy1wb2ludAotICoJY29tcHV0YXRpb24gb2YgZHRvYS4KLSAqICNkZWZpbmUgQ2hlY2tfRkxUX1JPVU5EUyBpZiBGTFRfUk9VTkRTIGNhbiBhc3N1bWUgdGhlIHZhbHVlcyAyIG9yIDMuCi0gKiAjZGVmaW5lIFJORF9QUk9EUVVPVCB0byB1c2Ugcm5kX3Byb2QgYW5kIHJuZF9xdW90IChhc3NlbWJseSByb3V0aW5lcwotICoJdGhhdCB1c2UgZXh0ZW5kZWQtcHJlY2lzaW9uIGluc3RydWN0aW9ucyB0byBjb21wdXRlIHJvdW5kZWQKLSAqCXByb2R1Y3RzIGFuZCBxdW90aWVudHMpIHdpdGggSUJNLgotICogI2RlZmluZSBST1VORF9CSUFTRUQgZm9yIElFRUUtZm9ybWF0IHdpdGggYmlhc2VkIHJvdW5kaW5nLgotICogI2RlZmluZSBJbmFjY3VyYXRlX0RpdmlkZSBmb3IgSUVFRS1mb3JtYXQgd2l0aCBjb3JyZWN0bHkgcm91bmRlZAotICoJcHJvZHVjdHMgYnV0IGluYWNjdXJhdGUgcXVvdGllbnRzLCBlLmcuLCBmb3IgSW50ZWwgaTg2MC4KLSAqICNkZWZpbmUgSnVzdF8xNiB0byBzdG9yZSAxNiBiaXRzIHBlciAzMi1iaXQgTG9uZyB3aGVuIGRvaW5nIGhpZ2gtcHJlY2lzaW9uCi0gKglpbnRlZ2VyIGFyaXRobWV0aWMuICBXaGV0aGVyIHRoaXMgc3BlZWRzIHRoaW5ncyB1cCBvciBzbG93cyB0aGluZ3MKLSAqCWRvd24gZGVwZW5kcyBvbiB0aGUgbWFjaGluZSBhbmQgdGhlIG51bWJlciBiZWluZyBjb252ZXJ0ZWQuCi0gKiAjZGVmaW5lIEtSX2hlYWRlcnMgZm9yIG9sZC1zdHlsZSBDIGZ1bmN0aW9uIGhlYWRlcnMuCi0gKiAjZGVmaW5lIEJhZF9mbG9hdF9oIGlmIHlvdXIgc3lzdGVtIGxhY2tzIGEgZmxvYXQuaCBvciBpZiBpdCBkb2VzIG5vdAotICoJZGVmaW5lIHNvbWUgb3IgYWxsIG9mIERCTF9ESUcsIERCTF9NQVhfMTBfRVhQLCBEQkxfTUFYX0VYUCwKLSAqCUZMVF9SQURJWCwgRkxUX1JPVU5EUywgYW5kIERCTF9NQVguCi0gKiAjZGVmaW5lIE1BTExPQyB5b3VyX21hbGxvYywgd2hlcmUgeW91cl9tYWxsb2MobikgYWN0cyBsaWtlIG1hbGxvYyhuKQotICoJaWYgbWVtb3J5IGlzIGF2YWlsYWJsZSBhbmQgb3RoZXJ3aXNlIGRvZXMgc29tZXRoaW5nIHlvdSBkZWVtCi0gKglhcHByb3ByaWF0ZS4gIElmIE1BTExPQyBpcyB1bmRlZmluZWQsIG1hbGxvYyB3aWxsIGJlIGludm9rZWQKLSAqCWRpcmVjdGx5IC0tIGFuZCBhc3N1bWVkIGFsd2F5cyB0byBzdWNjZWVkLgotICovCi0KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jZGVmaW5lIG11dGV4X2xvY2soeCkgcHRocmVhZF9tdXRleF9sb2NrKHgpCi0jZGVmaW5lIG11dGV4X3VubG9jayh4KSBwdGhyZWFkX211dGV4X3VubG9jayh4KQotI2VuZGlmCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IHN0cnRvZC5jLHYgMS40NS4yLjEgMjAwNS8wNC8xOSAxMzozNTo1NCB0cm9uIEV4cCAkIik7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jZGVmaW5lIFVuc2lnbmVkX1NoaWZ0cwotI2lmIGRlZmluZWQoX19tNjhrX18pIHx8IGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBcCi0gICAgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX25zMzJrX18pIHx8IGRlZmluZWQoX19hbHBoYV9fKSB8fCBcCi0gICAgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3NoX18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAotICAgIGRlZmluZWQoX19ocHBhX18pIHx8IFwKLSAgICAoZGVmaW5lZChfX2FybV9fKSAmJiBkZWZpbmVkKF9fVkZQX0ZQX18pKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQotI2luY2x1ZGUgPGVuZGlhbi5oPgotI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgotI2RlZmluZSBJRUVFX0JJR19FTkRJQU4KLSNlbHNlCi0jZGVmaW5lIElFRUVfTElUVExFX0VORElBTgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19WRlBfRlBfXykKLS8qCi0gKiBBbHRob3VnaCB0aGUgQ1BVIGlzIGxpdHRsZSBlbmRpYW4gdGhlIEZQIGhhcyBkaWZmZXJlbnQKLSAqIGJ5dGUgYW5kIHdvcmQgZW5kaWFubmVzcy4gVGhlIGJ5dGUgb3JkZXIgaXMgc3RpbGwgbGl0dGxlIGVuZGlhbgotICogYnV0IHRoZSB3b3JkIG9yZGVyIGlzIGJpZyBlbmRpYW4uCi0gKi8KLSNkZWZpbmUgSUVFRV9CSUdfRU5ESUFOCi0jZW5kaWYKLQotI2lmZGVmIF9fdmF4X18KLSNkZWZpbmUgVkFYCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQoX19zaF9fKQotI2RlZmluZQlOQU5fV09SRDAJMHg3ZmY0MDAwMAotI2Vsc2UKLSNkZWZpbmUJTkFOX1dPUkQwCTB4N2ZmODAwMDAKLSNlbmRpZgotI2RlZmluZQlOQU5fV09SRDEJMAotCi0jZGVmaW5lIExvbmcJaW50MzJfdAotI2RlZmluZSBVTG9uZwl1X2ludDMyX3QKLQotI2lmZGVmIERFQlVHCi0jaW5jbHVkZSAic3RkaW8uaCIKLSNkZWZpbmUgQnVnKHgpIHtmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB4KTsgZXhpdCgxKTt9Ci0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jaW5jbHVkZSAibWFsbG9jLmgiCi0jaW5jbHVkZSAibWVtb3J5LmgiCi0jZWxzZQotI2lmbmRlZiBLUl9oZWFkZXJzCi0jaW5jbHVkZSAic3RkbGliLmgiCi0jaW5jbHVkZSAic3RyaW5nLmgiCi0jaWZuZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgImxvY2FsZS5oIgotI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLwotI2Vsc2UKLSNpbmNsdWRlICJtYWxsb2MuaCIKLSNpbmNsdWRlICJtZW1vcnkuaCIKLSNlbmRpZgotI2VuZGlmCi0jaWZuZGVmIEFORFJPSURfQ0hBTkdFUwotI2luY2x1ZGUgImV4dGVybi5oIgotI2luY2x1ZGUgInJlZW50cmFudC5oIgotI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLwotCi0jaWZkZWYgTUFMTE9DCi0jaWZkZWYgS1JfaGVhZGVycwotZXh0ZXJuIGNoYXIgKk1BTExPQygpOwotI2Vsc2UKLWV4dGVybiB2b2lkICpNQUxMT0Moc2l6ZV90KTsKLSNlbmRpZgotI2Vsc2UKLSNkZWZpbmUgTUFMTE9DIG1hbGxvYwotI2VuZGlmCi0KLSNpbmNsdWRlICJjdHlwZS5oIgotI2luY2x1ZGUgImVycm5vLmgiCi0jaW5jbHVkZSAiZmxvYXQuaCIKLQotI2lmbmRlZiBfX01BVEhfSF9fCi0jaW5jbHVkZSAibWF0aC5oIgotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2lmbmRlZiBDT05TVAotI2lmZGVmIEtSX2hlYWRlcnMKLSNkZWZpbmUgQ09OU1QgLyogYmxhbmsgKi8KLSNlbHNlCi0jZGVmaW5lIENPTlNUIGNvbnN0Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgVW5zaWduZWRfU2hpZnRzCi0jZGVmaW5lIFNpZ25fRXh0ZW5kKGEsYikgaWYgKGIgPCAwKSBhIHw9IDB4ZmZmZjAwMDA7Ci0jZWxzZQotI2RlZmluZSBTaWduX0V4dGVuZChhLGIpIC8qbm8tb3AqLwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKElFRUVfTElUVExFX0VORElBTikgKyBkZWZpbmVkKElFRUVfQklHX0VORElBTikgKyBkZWZpbmVkKFZBWCkgKyBcCi0gICAgZGVmaW5lZChJQk0pICE9IDEKLUV4YWN0bHkgb25lIG9mIElFRUVfTElUVExFX0VORElBTiBJRUVFX0JJR19FTkRJQU4sIFZBWCwgb3IKLUlCTSBzaG91bGQgYmUgZGVmaW5lZC4KLSNlbmRpZgotCi10eXBlZGVmIHVuaW9uIHsKLQlkb3VibGUgZDsKLQlVTG9uZyB1bFsyXTsKLX0gX2RvdWJsZTsKLSNkZWZpbmUgdmFsdWUoeCkgKCh4KS5kKQotI2lmZGVmIElFRUVfTElUVExFX0VORElBTgotI2RlZmluZSB3b3JkMCh4KSAoKHgpLnVsWzFdKQotI2RlZmluZSB3b3JkMSh4KSAoKHgpLnVsWzBdKQotI2Vsc2UKLSNkZWZpbmUgd29yZDAoeCkgKCh4KS51bFswXSkKLSNkZWZpbmUgd29yZDEoeCkgKCh4KS51bFsxXSkKLSNlbmRpZgotCi0vKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gb2YgU3RvcmVpbmMgaXMgYXBwcm9wcmlhdGUgZm9yIE1JUFMgcHJvY2Vzc29ycy4KLSAqIEFuIGFsdGVybmF0aXZlIHRoYXQgbWlnaHQgYmUgYmV0dGVyIG9uIHNvbWUgbWFjaGluZXMgaXMKLSAqICNkZWZpbmUgU3RvcmVpbmMoYSxiLGMpICgqYSsrID0gYiA8PCAxNiB8IGMgJiAweGZmZmYpCi0gKi8KLSNpZiBkZWZpbmVkKElFRUVfTElUVExFX0VORElBTikgKyBkZWZpbmVkKFZBWCkgKyBkZWZpbmVkKF9fYXJtX18pCi0jZGVmaW5lIFN0b3JlaW5jKGEsYixjKSBcCi0gICAgKCgodV9zaG9ydCAqKSh2b2lkICopYSlbMV0gPSBcCi0JKHVfc2hvcnQpYiwgKCh1X3Nob3J0ICopKHZvaWQgKilhKVswXSA9ICh1X3Nob3J0KWMsIGErKykKLSNlbHNlCi0jZGVmaW5lIFN0b3JlaW5jKGEsYixjKSBcCi0gICAgKCgodV9zaG9ydCAqKSh2b2lkICopYSlbMF0gPSBcCi0JKHVfc2hvcnQpYiwgKCh1X3Nob3J0ICopKHZvaWQgKilhKVsxXSA9ICh1X3Nob3J0KWMsIGErKykKLSNlbmRpZgotCi0vKiAjZGVmaW5lIFAgREJMX01BTlRfRElHICovCi0vKiBUZW5fcG1heCA9IGZsb29yKFAqbG9nKDIpL2xvZyg1KSkgKi8KLS8qIEJsZXRjaCA9IChoaWdoZXN0IHBvd2VyIG9mIDIgPCBEQkxfTUFYXzEwX0VYUCkgLyAxNiAqLwotLyogUXVpY2tfbWF4ID0gZmxvb3IoKFAtMSkqbG9nKEZMVF9SQURJWCkvbG9nKDEwKSAtIDEpICovCi0vKiBJbnRfbWF4ID0gZmxvb3IoUCpsb2coRkxUX1JBRElYKS9sb2coMTApIC0gMSkgKi8KLQotI2lmIGRlZmluZWQoSUVFRV9MSVRUTEVfRU5ESUFOKSArIGRlZmluZWQoSUVFRV9CSUdfRU5ESUFOKQotI2RlZmluZSBFeHBfc2hpZnQgIDIwCi0jZGVmaW5lIEV4cF9zaGlmdDEgMjAKLSNkZWZpbmUgRXhwX21zazEgICAgMHgxMDAwMDAKLSNkZWZpbmUgRXhwX21zazExICAgMHgxMDAwMDAKLSNkZWZpbmUgRXhwX21hc2sgIDB4N2ZmMDAwMDAKLSNkZWZpbmUgUCA1MwotI2RlZmluZSBCaWFzIDEwMjMKLSNkZWZpbmUgSUVFRV9Bcml0aAotI2RlZmluZSBFbWluICgtMTAyMikKLSNkZWZpbmUgRXhwXzEgIDB4M2ZmMDAwMDAKLSNkZWZpbmUgRXhwXzExIDB4M2ZmMDAwMDAKLSNkZWZpbmUgRWJpdHMgMTEKLSNkZWZpbmUgRnJhY19tYXNrICAweGZmZmZmCi0jZGVmaW5lIEZyYWNfbWFzazEgMHhmZmZmZgotI2RlZmluZSBUZW5fcG1heCAyMgotI2RlZmluZSBCbGV0Y2ggMHgxMAotI2RlZmluZSBCbmRyeV9tYXNrICAweGZmZmZmCi0jZGVmaW5lIEJuZHJ5X21hc2sxIDB4ZmZmZmYKLSNkZWZpbmUgTFNCIDEKLSNkZWZpbmUgU2lnbl9iaXQgMHg4MDAwMDAwMAotI2RlZmluZSBMb2cyUCAxCi0jZGVmaW5lIFRpbnkwIDAKLSNkZWZpbmUgVGlueTEgMQotI2RlZmluZSBRdWlja19tYXggMTQKLSNkZWZpbmUgSW50X21heCAxNAotI2RlZmluZSBJbmZpbml0ZSh4KSAod29yZDAoeCkgPT0gMHg3ZmYwMDAwMCkgLyogc3VmZmljaWVudCB0ZXN0IGZvciBoZXJlICovCi0jZWxzZQotI3VuZGVmICBTdWRkZW5fVW5kZXJmbG93Ci0jZGVmaW5lIFN1ZGRlbl9VbmRlcmZsb3cKLSNpZmRlZiBJQk0KLSNkZWZpbmUgRXhwX3NoaWZ0ICAyNAotI2RlZmluZSBFeHBfc2hpZnQxIDI0Ci0jZGVmaW5lIEV4cF9tc2sxICAgMHgxMDAwMDAwCi0jZGVmaW5lIEV4cF9tc2sxMSAgMHgxMDAwMDAwCi0jZGVmaW5lIEV4cF9tYXNrICAweDdmMDAwMDAwCi0jZGVmaW5lIFAgMTQKLSNkZWZpbmUgQmlhcyA2NQotI2RlZmluZSBFeHBfMSAgMHg0MTAwMDAwMAotI2RlZmluZSBFeHBfMTEgMHg0MTAwMDAwMAotI2RlZmluZSBFYml0cyA4CS8qIGV4cG9uZW50IGhhcyA3IGJpdHMsIGJ1dCA4IGlzIHRoZSByaWdodCB2YWx1ZSBpbiBiMmQgKi8KLSNkZWZpbmUgRnJhY19tYXNrICAweGZmZmZmZgotI2RlZmluZSBGcmFjX21hc2sxIDB4ZmZmZmZmCi0jZGVmaW5lIEJsZXRjaCA0Ci0jZGVmaW5lIFRlbl9wbWF4IDIyCi0jZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZWZmZmZmCi0jZGVmaW5lIEJuZHJ5X21hc2sxIDB4ZmZmZmZmCi0jZGVmaW5lIExTQiAxCi0jZGVmaW5lIFNpZ25fYml0IDB4ODAwMDAwMDAKLSNkZWZpbmUgTG9nMlAgNAotI2RlZmluZSBUaW55MCAweDEwMDAwMAotI2RlZmluZSBUaW55MSAwCi0jZGVmaW5lIFF1aWNrX21heCAxNAotI2RlZmluZSBJbnRfbWF4IDE1Ci0jZWxzZSAvKiBWQVggKi8KLSNkZWZpbmUgRXhwX3NoaWZ0ICAyMwotI2RlZmluZSBFeHBfc2hpZnQxIDcKLSNkZWZpbmUgRXhwX21zazEgICAgMHg4MAotI2RlZmluZSBFeHBfbXNrMTEgICAweDgwMDAwMAotI2RlZmluZSBFeHBfbWFzayAgMHg3ZjgwCi0jZGVmaW5lIFAgNTYKLSNkZWZpbmUgQmlhcyAxMjkKLSNkZWZpbmUgRXhwXzEgIDB4NDA4MDAwMDAKLSNkZWZpbmUgRXhwXzExIDB4NDA4MAotI2RlZmluZSBFYml0cyA4Ci0jZGVmaW5lIEZyYWNfbWFzayAgMHg3ZmZmZmYKLSNkZWZpbmUgRnJhY19tYXNrMSAweGZmZmYwMDdmCi0jZGVmaW5lIFRlbl9wbWF4IDI0Ci0jZGVmaW5lIEJsZXRjaCAyCi0jZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZmZmZjAwN2YKLSNkZWZpbmUgQm5kcnlfbWFzazEgMHhmZmZmMDA3ZgotI2RlZmluZSBMU0IgMHgxMDAwMAotI2RlZmluZSBTaWduX2JpdCAweDgwMDAKLSNkZWZpbmUgTG9nMlAgMQotI2RlZmluZSBUaW55MCAweDgwCi0jZGVmaW5lIFRpbnkxIDAKLSNkZWZpbmUgUXVpY2tfbWF4IDE1Ci0jZGVmaW5lIEludF9tYXggMTUKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSUVFRV9Bcml0aAotI2RlZmluZSBST1VORF9CSUFTRUQKLSNlbmRpZgotCi0jaWZkZWYgUk5EX1BST0RRVU9UCi0jZGVmaW5lIHJvdW5kZWRfcHJvZHVjdChhLGIpIGEgPSBybmRfcHJvZChhLCBiKQotI2RlZmluZSByb3VuZGVkX3F1b3RpZW50KGEsYikgYSA9IHJuZF9xdW90KGEsIGIpCi0jaWZkZWYgS1JfaGVhZGVycwotZXh0ZXJuIGRvdWJsZSBybmRfcHJvZCgpLCBybmRfcXVvdCgpOwotI2Vsc2UKLWV4dGVybiBkb3VibGUgcm5kX3Byb2QoZG91YmxlLCBkb3VibGUpLCBybmRfcXVvdChkb3VibGUsIGRvdWJsZSk7Ci0jZW5kaWYKLSNlbHNlCi0jZGVmaW5lIHJvdW5kZWRfcHJvZHVjdChhLGIpIGEgKj0gYgotI2RlZmluZSByb3VuZGVkX3F1b3RpZW50KGEsYikgYSAvPSBiCi0jZW5kaWYKLQotI2RlZmluZSBCaWcwIChGcmFjX21hc2sxIHwgRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtMSkpCi0jZGVmaW5lIEJpZzEgMHhmZmZmZmZmZgotCi0jaWZuZGVmIEp1c3RfMTYKLS8qIFdoZW4gUGFja18zMiBpcyBub3QgZGVmaW5lZCwgd2Ugc3RvcmUgMTYgYml0cyBwZXIgMzItYml0IExvbmcuCi0gKiBUaGlzIG1ha2VzIHNvbWUgaW5uZXIgbG9vcHMgc2ltcGxlciBhbmQgc29tZXRpbWVzIHNhdmVzIHdvcmsKLSAqIGR1cmluZyBtdWx0aXBsaWNhdGlvbnMsIGJ1dCBpdCBvZnRlbiBzZWVtcyB0byBtYWtlIHRoaW5ncyBzbGlnaHRseQotICogc2xvd2VyLiAgSGVuY2UgdGhlIGRlZmF1bHQgaXMgbm93IHRvIHN0b3JlIDMyIGJpdHMgcGVyIExvbmcuCi0gKi8KLSNpZm5kZWYgUGFja18zMgotI2RlZmluZSBQYWNrXzMyCi0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIEttYXggMTUKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIGRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciAqczAwLCBjaGFyICoqc2UpOwotZXh0ZXJuICJDIiBjaGFyICpfX2R0b2EoZG91YmxlIGQsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywKLQkJCWludCAqZGVjcHQsIGludCAqc2lnbiwgY2hhciAqKnJ2ZSk7Ci0jZW5kaWYKLQotIHN0cnVjdAotQmlnaW50IHsKLQlzdHJ1Y3QgQmlnaW50ICpuZXh0OwotCWludCBrLCBtYXh3ZHMsIHNpZ24sIHdkczsKLQlVTG9uZyB4WzFdOwotfTsKLQotIHR5cGVkZWYgc3RydWN0IEJpZ2ludCBCaWdpbnQ7Ci0KLSBzdGF0aWMgQmlnaW50ICpmcmVlbGlzdFtLbWF4KzFdOwotCi0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCi0gc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBmcmVlbGlzdF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0jZWxzZQotI2lmZGVmIF9SRUVOVFJBTlQKLSBzdGF0aWMgbXV0ZXhfdCBmcmVlbGlzdF9tdXRleCA9IE1VVEVYX0lOSVRJQUxJWkVSOwotI2VuZGlmCi0jZW5kaWYKLQotLyogU3BlY2lhbCB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIGFuIGludmFsaWQgQmlnaW50IHZhbHVlLAotICogZS5nLiB3aGVuIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoZSBpZGVhIGlzIHRoYXQgd2UKLSAqIHdhbnQgdG8gYXZvaWQgaW50cm9kdWNpbmcgTlVMTCBjaGVja3MgZXZlcnl0aW1lIGEgYmlnaW50Ci0gKiBjb21wdXRhdGlvbiBpcyBwZXJmb3JtZWQuIEFsc28gdGhlIE5VTEwgdmFsdWUgY2FuIGFsc28gYmUKLSAqIGFscmVhZHkgdXNlZCB0byBpbmRpY2F0ZSAidmFsdWUgbm90IGluaXRpYWxpemVkIHlldCIgYW5kCi0gKiByZXR1cm5pbmcgTlVMTCBtaWdodCBhbHRlciB0aGUgZXhlY3V0aW9uIGNvZGUgcGF0aCBpbgotICogY2FzZSBvZiBPT00uCi0gKi8KLSNkZWZpbmUgIEJJR0lOVF9JTlZBTElEICAgKChCaWdpbnQgKikmYmlnaW50X2ludmFsaWRfdmFsdWUpCi0KLXN0YXRpYyBjb25zdCBCaWdpbnQgYmlnaW50X2ludmFsaWRfdmFsdWU7Ci0KLQotLyogUmV0dXJuIEJJR0lOVF9JTlZBTElEIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KLSAqCi0gKiBNb3N0IG9mIHRoZSBjb2RlIGhlcmUgZGVwZW5kcyBvbiB0aGUgZmFjdCB0aGF0IHRoaXMgZnVuY3Rpb24KLSAqIG5ldmVyIHJldHVybnMgTlVMTC4KLSAqLwotIHN0YXRpYyBCaWdpbnQgKgotQmFsbG9jCi0jaWZkZWYgS1JfaGVhZGVycwotCShrKSBpbnQgazsKLSNlbHNlCi0JKGludCBrKQotI2VuZGlmCi17Ci0JaW50IHg7Ci0JQmlnaW50ICpydjsKLQotCW11dGV4X2xvY2soJmZyZWVsaXN0X211dGV4KTsKLQotCWlmICgocnYgPSBmcmVlbGlzdFtrXSkgIT0gTlVMTCkgewotCQlmcmVlbGlzdFtrXSA9IHJ2LT5uZXh0OwotCX0KLQllbHNlIHsKLQkJeCA9IDEgPDwgazsKLQkJcnYgPSAoQmlnaW50ICopTUFMTE9DKHNpemVvZihCaWdpbnQpICsgKHgtMSkqc2l6ZW9mKExvbmcpKTsKLQkJaWYgKHJ2ID09IE5VTEwpIHsKLQkJICAgICAgICBydiA9IEJJR0lOVF9JTlZBTElEOwotCQkJZ290byBFWElUOwotCQl9Ci0JCXJ2LT5rID0gazsKLQkJcnYtPm1heHdkcyA9IHg7Ci0JfQotCXJ2LT5zaWduID0gcnYtPndkcyA9IDA7Ci1FWElUOgotCW11dGV4X3VubG9jaygmZnJlZWxpc3RfbXV0ZXgpOwotCi0JcmV0dXJuIHJ2OwotfQotCi0gc3RhdGljIHZvaWQKLUJmcmVlCi0jaWZkZWYgS1JfaGVhZGVycwotCSh2KSBCaWdpbnQgKnY7Ci0jZWxzZQotCShCaWdpbnQgKnYpCi0jZW5kaWYKLXsKLQlpZiAodiAmJiB2ICE9IEJJR0lOVF9JTlZBTElEKSB7Ci0JCW11dGV4X2xvY2soJmZyZWVsaXN0X211dGV4KTsKLQotCQl2LT5uZXh0ID0gZnJlZWxpc3Rbdi0+a107Ci0JCWZyZWVsaXN0W3YtPmtdID0gdjsKLQotCQltdXRleF91bmxvY2soJmZyZWVsaXN0X211dGV4KTsKLQl9Ci19Ci0KLSNkZWZpbmUgQmNvcHlfdmFsaWQoeCx5KSBtZW1jcHkoJih4KS0+c2lnbiwgJih5KS0+c2lnbiwgXAotICAgICh5KS0+d2RzKnNpemVvZihMb25nKSArIDIqc2l6ZW9mKGludCkpCi0KLSNkZWZpbmUgQmNvcHkoeCx5KSAgQmNvcHlfcHRyKCYoeCksKHkpKQotCi0gc3RhdGljIHZvaWQKLUJjb3B5X3B0cihCaWdpbnQgKipweCwgQmlnaW50ICp5KQotewotCWlmICgqcHggPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybjsgLyogbm8gc3BhY2UgdG8gc3RvcmUgY29weSAqLwotCWlmICh5ID09IEJJR0lOVF9JTlZBTElEKSB7Ci0JCUJmcmVlKCpweCk7IC8qIGludmFsaWQgaW5wdXQgKi8KLQkJKnB4ID0gQklHSU5UX0lOVkFMSUQ7Ci0JfSBlbHNlIHsKLQkJQmNvcHlfdmFsaWQoKnB4LHkpOwotCX0KLX0KLQotIHN0YXRpYyBCaWdpbnQgKgotbXVsdGFkZAotI2lmZGVmIEtSX2hlYWRlcnMKLQkoYiwgbSwgYSkgQmlnaW50ICpiOyBpbnQgbSwgYTsKLSNlbHNlCi0JKEJpZ2ludCAqYiwgaW50IG0sIGludCBhKQkvKiBtdWx0aXBseSBieSBtIGFuZCBhZGQgYSAqLwotI2VuZGlmCi17Ci0JaW50IGksIHdkczsKLQlVTG9uZyAqeCwgeTsKLSNpZmRlZiBQYWNrXzMyCi0JVUxvbmcgeGksIHo7Ci0jZW5kaWYKLQlCaWdpbnQgKmIxOwotCi0JaWYgKGIgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBiOwotCi0Jd2RzID0gYi0+d2RzOwotCXggPSBiLT54OwotCWkgPSAwOwotCWRvIHsKLSNpZmRlZiBQYWNrXzMyCi0JCXhpID0gKng7Ci0JCXkgPSAoeGkgJiAweGZmZmYpICogbSArIGE7Ci0JCXogPSAoeGkgPj4gMTYpICogbSArICh5ID4+IDE2KTsKLQkJYSA9IChpbnQpKHogPj4gMTYpOwotCQkqeCsrID0gKHogPDwgMTYpICsgKHkgJiAweGZmZmYpOwotI2Vsc2UKLQkJeSA9ICp4ICogbSArIGE7Ci0JCWEgPSAoaW50KSh5ID4+IDE2KTsKLQkJKngrKyA9IHkgJiAweGZmZmY7Ci0jZW5kaWYKLQl9Ci0Jd2hpbGUoKytpIDwgd2RzKTsKLQlpZiAoYSkgewotCQlpZiAod2RzID49IGItPm1heHdkcykgewotCQkJYjEgPSBCYWxsb2MoYi0+aysxKTsKLQkJCWlmIChiMSA9PSBCSUdJTlRfSU5WQUxJRCkgewotCQkJCUJmcmVlKGIpOwotCQkJCXJldHVybiBiMTsKLQkJCX0KLQkJCUJjb3B5X3ZhbGlkKGIxLCBiKTsKLQkJCUJmcmVlKGIpOwotCQkJYiA9IGIxOwotCQkJfQotCQliLT54W3dkcysrXSA9IGE7Ci0JCWItPndkcyA9IHdkczsKLQl9Ci0JcmV0dXJuIGI7Ci19Ci0KLSBzdGF0aWMgQmlnaW50ICoKLXMyYgotI2lmZGVmIEtSX2hlYWRlcnMKLQkocywgbmQwLCBuZCwgeTkpIENPTlNUIGNoYXIgKnM7IGludCBuZDAsIG5kOyBVTG9uZyB5OTsKLSNlbHNlCi0JKENPTlNUIGNoYXIgKnMsIGludCBuZDAsIGludCBuZCwgVUxvbmcgeTkpCi0jZW5kaWYKLXsKLQlCaWdpbnQgKmI7Ci0JaW50IGksIGs7Ci0JTG9uZyB4LCB5OwotCi0JeCA9IChuZCArIDgpIC8gOTsKLQlmb3IoayA9IDAsIHkgPSAxOyB4ID4geTsgeSA8PD0gMSwgaysrKSA7Ci0jaWZkZWYgUGFja18zMgotCWIgPSBCYWxsb2Moayk7Ci0JaWYgKGIgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBiOwotCWItPnhbMF0gPSB5OTsKLQliLT53ZHMgPSAxOwotI2Vsc2UKLQliID0gQmFsbG9jKGsrMSk7Ci0JaWYgKGIgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBiOwotCi0JYi0+eFswXSA9IHk5ICYgMHhmZmZmOwotCWItPndkcyA9IChiLT54WzFdID0geTkgPj4gMTYpID8gMiA6IDE7Ci0jZW5kaWYKLQotCWkgPSA5OwotCWlmICg5IDwgbmQwKSB7Ci0JCXMgKz0gOTsKLQkJZG8gYiA9IG11bHRhZGQoYiwgMTAsICpzKysgLSAnMCcpOwotCQkJd2hpbGUoKytpIDwgbmQwKTsKLQkJcysrOwotCX0KLQllbHNlCi0JCXMgKz0gMTA7Ci0JZm9yKDsgaSA8IG5kOyBpKyspCi0JCWIgPSBtdWx0YWRkKGIsIDEwLCAqcysrIC0gJzAnKTsKLQlyZXR1cm4gYjsKLX0KLQotIHN0YXRpYyBpbnQKLWhpMGJpdHMKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKHgpIFVMb25nIHg7Ci0jZWxzZQotCShVTG9uZyB4KQotI2VuZGlmCi17Ci0JaW50IGsgPSAwOwotCi0JaWYgKCEoeCAmIDB4ZmZmZjAwMDApKSB7Ci0JCWsgPSAxNjsKLQkJeCA8PD0gMTY7Ci0JfQotCWlmICghKHggJiAweGZmMDAwMDAwKSkgewotCQlrICs9IDg7Ci0JCXggPDw9IDg7Ci0JfQotCWlmICghKHggJiAweGYwMDAwMDAwKSkgewotCQlrICs9IDQ7Ci0JCXggPDw9IDQ7Ci0JfQotCWlmICghKHggJiAweGMwMDAwMDAwKSkgewotCQlrICs9IDI7Ci0JCXggPDw9IDI7Ci0JfQotCWlmICghKHggJiAweDgwMDAwMDAwKSkgewotCQlrKys7Ci0JCWlmICghKHggJiAweDQwMDAwMDAwKSkKLQkJCXJldHVybiAzMjsKLQl9Ci0JcmV0dXJuIGs7Ci19Ci0KLSBzdGF0aWMgaW50Ci1sbzBiaXRzCi0jaWZkZWYgS1JfaGVhZGVycwotCSh5KSBVTG9uZyAqeTsKLSNlbHNlCi0JKFVMb25nICp5KQotI2VuZGlmCi17Ci0JaW50IGs7Ci0JVUxvbmcgeCA9ICp5OwotCi0JaWYgKHggJiA3KSB7Ci0JCWlmICh4ICYgMSkKLQkJCXJldHVybiAwOwotCQlpZiAoeCAmIDIpIHsKLQkJCSp5ID0geCA+PiAxOwotCQkJcmV0dXJuIDE7Ci0JCQl9Ci0JCSp5ID0geCA+PiAyOwotCQlyZXR1cm4gMjsKLQl9Ci0JayA9IDA7Ci0JaWYgKCEoeCAmIDB4ZmZmZikpIHsKLQkJayA9IDE2OwotCQl4ID4+PSAxNjsKLQl9Ci0JaWYgKCEoeCAmIDB4ZmYpKSB7Ci0JCWsgKz0gODsKLQkJeCA+Pj0gODsKLQl9Ci0JaWYgKCEoeCAmIDB4ZikpIHsKLQkJayArPSA0OwotCQl4ID4+PSA0OwotCX0KLQlpZiAoISh4ICYgMHgzKSkgewotCQlrICs9IDI7Ci0JCXggPj49IDI7Ci0JfQotCWlmICghKHggJiAxKSkgewotCQlrKys7Ci0JCXggPj49IDE7Ci0JCWlmICgheCAmIDEpCi0JCQlyZXR1cm4gMzI7Ci0JfQotCSp5ID0geDsKLQlyZXR1cm4gazsKLX0KLQotIHN0YXRpYyBCaWdpbnQgKgotaTJiCi0jaWZkZWYgS1JfaGVhZGVycwotCShpKSBpbnQgaTsKLSNlbHNlCi0JKGludCBpKQotI2VuZGlmCi17Ci0JQmlnaW50ICpiOwotCi0JYiA9IEJhbGxvYygxKTsKLQlpZiAoYiAhPSBCSUdJTlRfSU5WQUxJRCkgewotCQliLT54WzBdID0gaTsKLQkJYi0+d2RzID0gMTsKLQkJfQotCXJldHVybiBiOwotfQotCi0gc3RhdGljIEJpZ2ludCAqCi1tdWx0Ci0jaWZkZWYgS1JfaGVhZGVycwotCShhLCBiKSBCaWdpbnQgKmEsICpiOwotI2Vsc2UKLQkoQmlnaW50ICphLCBCaWdpbnQgKmIpCi0jZW5kaWYKLXsKLQlCaWdpbnQgKmM7Ci0JaW50IGssIHdhLCB3Yiwgd2M7Ci0JVUxvbmcgY2FycnksIHksIHo7Ci0JVUxvbmcgKngsICp4YSwgKnhhZSwgKnhiLCAqeGJlLCAqeGMsICp4YzA7Ci0jaWZkZWYgUGFja18zMgotCVVMb25nIHoyOwotI2VuZGlmCi0KLQlpZiAoYSA9PSBCSUdJTlRfSU5WQUxJRCB8fCBiID09IEJJR0lOVF9JTlZBTElEKQotCQlyZXR1cm4gQklHSU5UX0lOVkFMSUQ7Ci0KLQlpZiAoYS0+d2RzIDwgYi0+d2RzKSB7Ci0JCWMgPSBhOwotCQlhID0gYjsKLQkJYiA9IGM7Ci0JfQotCWsgPSBhLT5rOwotCXdhID0gYS0+d2RzOwotCXdiID0gYi0+d2RzOwotCXdjID0gd2EgKyB3YjsKLQlpZiAod2MgPiBhLT5tYXh3ZHMpCi0JCWsrKzsKLQljID0gQmFsbG9jKGspOwotCWlmIChjID09IEJJR0lOVF9JTlZBTElEKQotCQlyZXR1cm4gYzsKLQlmb3IoeCA9IGMtPngsIHhhID0geCArIHdjOyB4IDwgeGE7IHgrKykKLQkJKnggPSAwOwotCXhhID0gYS0+eDsKLQl4YWUgPSB4YSArIHdhOwotCXhiID0gYi0+eDsKLQl4YmUgPSB4YiArIHdiOwotCXhjMCA9IGMtPng7Ci0jaWZkZWYgUGFja18zMgotCWZvcig7IHhiIDwgeGJlOyB4YisrLCB4YzArKykgewotCQlpZiAoKHkgPSAqeGIgJiAweGZmZmYpICE9IDApIHsKLQkJCXggPSB4YTsKLQkJCXhjID0geGMwOwotCQkJY2FycnkgPSAwOwotCQkJZG8gewotCQkJCXogPSAoKnggJiAweGZmZmYpICogeSArICgqeGMgJiAweGZmZmYpICsgY2Fycnk7Ci0JCQkJY2FycnkgPSB6ID4+IDE2OwotCQkJCXoyID0gKCp4KysgPj4gMTYpICogeSArICgqeGMgPj4gMTYpICsgY2Fycnk7Ci0JCQkJY2FycnkgPSB6MiA+PiAxNjsKLQkJCQlTdG9yZWluYyh4YywgejIsIHopOwotCQkJfQotCQkJd2hpbGUoeCA8IHhhZSk7Ci0JCQkqeGMgPSBjYXJyeTsKLQkJfQotCQlpZiAoKHkgPSAqeGIgPj4gMTYpICE9IDApIHsKLQkJCXggPSB4YTsKLQkJCXhjID0geGMwOwotCQkJY2FycnkgPSAwOwotCQkJejIgPSAqeGM7Ci0JCQlkbyB7Ci0JCQkJeiA9ICgqeCAmIDB4ZmZmZikgKiB5ICsgKCp4YyA+PiAxNikgKyBjYXJyeTsKLQkJCQljYXJyeSA9IHogPj4gMTY7Ci0JCQkJU3RvcmVpbmMoeGMsIHosIHoyKTsKLQkJCQl6MiA9ICgqeCsrID4+IDE2KSAqIHkgKyAoKnhjICYgMHhmZmZmKSArIGNhcnJ5OwotCQkJCWNhcnJ5ID0gejIgPj4gMTY7Ci0JCQl9Ci0JCQl3aGlsZSh4IDwgeGFlKTsKLQkJCSp4YyA9IHoyOwotCQl9Ci0JfQotI2Vsc2UKLQlmb3IoOyB4YiA8IHhiZTsgeGMwKyspIHsKLQkJaWYgKHkgPSAqeGIrKykgewotCQkJeCA9IHhhOwotCQkJeGMgPSB4YzA7Ci0JCQljYXJyeSA9IDA7Ci0JCQlkbyB7Ci0JCQkJeiA9ICp4KysgKiB5ICsgKnhjICsgY2Fycnk7Ci0JCQkJY2FycnkgPSB6ID4+IDE2OwotCQkJCSp4YysrID0geiAmIDB4ZmZmZjsKLQkJCX0KLQkJCXdoaWxlKHggPCB4YWUpOwotCQkJKnhjID0gY2Fycnk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQlmb3IoeGMwID0gYy0+eCwgeGMgPSB4YzAgKyB3Yzsgd2MgPiAwICYmICEqLS14YzsgLS13YykgOwotCWMtPndkcyA9IHdjOwotCXJldHVybiBjOwotfQotCi0gc3RhdGljIEJpZ2ludCAqcDVzOwotIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgcDVzX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLQotIHN0YXRpYyBCaWdpbnQgKgotcG93NW11bHQKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7Ci0jZWxzZQotCShCaWdpbnQgKmIsIGludCBrKQotI2VuZGlmCi17Ci0JQmlnaW50ICpiMSwgKnA1LCAqcDUxOwotCWludCBpOwotCXN0YXRpYyBjb25zdCBpbnQgcDA1WzNdID0geyA1LCAyNSwgMTI1IH07Ci0KLQlpZiAoYiA9PSBCSUdJTlRfSU5WQUxJRCkKLQkJcmV0dXJuIGI7Ci0KLQlpZiAoKGkgPSBrICYgMykgIT0gMCkKLQkJYiA9IG11bHRhZGQoYiwgcDA1W2ktMV0sIDApOwotCi0JaWYgKCEoayA9ICh1bnNpZ25lZCBpbnQpIGsgPj4gMikpCi0JCXJldHVybiBiOwotCW11dGV4X2xvY2soJnA1c19tdXRleCk7Ci0JaWYgKCEocDUgPSBwNXMpKSB7Ci0JCS8qIGZpcnN0IHRpbWUgKi8KLQkJcDUgPSBpMmIoNjI1KTsKLQkJaWYgKHA1ID09IEJJR0lOVF9JTlZBTElEKSB7Ci0JCQlCZnJlZShiKTsKLQkJCW11dGV4X3VubG9jaygmcDVzX211dGV4KTsKLQkJCXJldHVybiBwNTsKLQkJfQotCQlwNXMgPSBwNTsKLQkJcDUtPm5leHQgPSAwOwotCX0KLQlmb3IoOzspIHsKLQkJaWYgKGsgJiAxKSB7Ci0JCQliMSA9IG11bHQoYiwgcDUpOwotCQkJQmZyZWUoYik7Ci0JCQliID0gYjE7Ci0JCX0KLQkJaWYgKCEoayA9ICh1bnNpZ25lZCBpbnQpIGsgPj4gMSkpCi0JCQlicmVhazsKLQkJaWYgKCEocDUxID0gcDUtPm5leHQpKSB7Ci0JCQlwNTEgPSBtdWx0KHA1LHA1KTsKLQkJCWlmIChwNTEgPT0gQklHSU5UX0lOVkFMSUQpIHsKLQkJCQlCZnJlZShiKTsKLQkJCQltdXRleF91bmxvY2soJnA1c19tdXRleCk7Ci0JCQkJcmV0dXJuIHA1MTsKLQkJCX0KLQkJCXA1LT5uZXh0ID0gcDUxOwotCQkJcDUxLT5uZXh0ID0gMDsKLQkJfQotCQlwNSA9IHA1MTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwNXNfbXV0ZXgpOwotCXJldHVybiBiOwotfQotCi0gc3RhdGljIEJpZ2ludCAqCi1sc2hpZnQKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7Ci0jZWxzZQotCShCaWdpbnQgKmIsIGludCBrKQotI2VuZGlmCi17Ci0JaW50IGksIGsxLCBuLCBuMTsKLQlCaWdpbnQgKmIxOwotCVVMb25nICp4LCAqeDEsICp4ZSwgejsKLQotCWlmIChiID09IEJJR0lOVF9JTlZBTElEKQotCQlyZXR1cm4gYjsKLQotI2lmZGVmIFBhY2tfMzIKLQluID0gKHVuc2lnbmVkIGludClrID4+IDU7Ci0jZWxzZQotCW4gPSAodW5zaWduZWQgaW50KWsgPj4gNDsKLSNlbmRpZgotCWsxID0gYi0+azsKLQluMSA9IG4gKyBiLT53ZHMgKyAxOwotCWZvcihpID0gYi0+bWF4d2RzOyBuMSA+IGk7IGkgPDw9IDEpCi0JCWsxKys7Ci0JYjEgPSBCYWxsb2MoazEpOwotCWlmIChiMSA9PSBCSUdJTlRfSU5WQUxJRCkgewotCQlCZnJlZShiKTsKLQkJcmV0dXJuIGIxOwotCX0KLQl4MSA9IGIxLT54OwotCWZvcihpID0gMDsgaSA8IG47IGkrKykKLQkJKngxKysgPSAwOwotCXggPSBiLT54OwotCXhlID0geCArIGItPndkczsKLSNpZmRlZiBQYWNrXzMyCi0JaWYgKGsgJj0gMHgxZikgewotCQlrMSA9IDMyIC0gazsKLQkJeiA9IDA7Ci0JCWRvIHsKLQkJCSp4MSsrID0gKnggPDwgayB8IHo7Ci0JCQl6ID0gKngrKyA+PiBrMTsKLQkJfQotCQl3aGlsZSh4IDwgeGUpOwotCQlpZiAoKCp4MSA9IHopICE9IDApCi0JCQkrK24xOwotCX0KLSNlbHNlCi0JaWYgKGsgJj0gMHhmKSB7Ci0JCWsxID0gMTYgLSBrOwotCQl6ID0gMDsKLQkJZG8gewotCQkJKngxKysgPSAqeCA8PCBrICAmIDB4ZmZmZiB8IHo7Ci0JCQl6ID0gKngrKyA+PiBrMTsKLQkJfQotCQl3aGlsZSh4IDwgeGUpOwotCQlpZiAoKngxID0geikKLQkJCSsrbjE7Ci0JfQotI2VuZGlmCi0JZWxzZSBkbwotCQkqeDErKyA9ICp4Kys7Ci0JCXdoaWxlKHggPCB4ZSk7Ci0JYjEtPndkcyA9IG4xIC0gMTsKLQlCZnJlZShiKTsKLQlyZXR1cm4gYjE7Ci19Ci0KLSBzdGF0aWMgaW50Ci1jbXAKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKGEsIGIpIEJpZ2ludCAqYSwgKmI7Ci0jZWxzZQotCShCaWdpbnQgKmEsIEJpZ2ludCAqYikKLSNlbmRpZgotewotCVVMb25nICp4YSwgKnhhMCwgKnhiLCAqeGIwOwotCWludCBpLCBqOwotCi0JaWYgKGEgPT0gQklHSU5UX0lOVkFMSUQgfHwgYiA9PSBCSUdJTlRfSU5WQUxJRCkKLSNpZmRlZiBERUJVRwotCQlCdWcoImNtcCBjYWxsZWQgd2l0aCBhIG9yIGIgaW52YWxpZCIpOwotI2Vsc2UKLQkJcmV0dXJuIDA7IC8qIGVxdWFsIC0gdGhlIGJlc3Qgd2UgY2FuIGRvIHJpZ2h0IG5vdyAqLwotI2VuZGlmCi0KLQlpID0gYS0+d2RzOwotCWogPSBiLT53ZHM7Ci0jaWZkZWYgREVCVUcKLQlpZiAoaSA+IDEgJiYgIWEtPnhbaS0xXSkKLQkJQnVnKCJjbXAgY2FsbGVkIHdpdGggYS0+eFthLT53ZHMtMV0gPT0gMCIpOwotCWlmIChqID4gMSAmJiAhYi0+eFtqLTFdKQotCQlCdWcoImNtcCBjYWxsZWQgd2l0aCBiLT54W2ItPndkcy0xXSA9PSAwIik7Ci0jZW5kaWYKLQlpZiAoaSAtPSBqKQotCQlyZXR1cm4gaTsKLQl4YTAgPSBhLT54OwotCXhhID0geGEwICsgajsKLQl4YjAgPSBiLT54OwotCXhiID0geGIwICsgajsKLQlmb3IoOzspIHsKLQkJaWYgKCotLXhhICE9ICotLXhiKQotCQkJcmV0dXJuICp4YSA8ICp4YiA/IC0xIDogMTsKLQkJaWYgKHhhIDw9IHhhMCkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotIHN0YXRpYyBCaWdpbnQgKgotZGlmZgotI2lmZGVmIEtSX2hlYWRlcnMKLQkoYSwgYikgQmlnaW50ICphLCAqYjsKLSNlbHNlCi0JKEJpZ2ludCAqYSwgQmlnaW50ICpiKQotI2VuZGlmCi17Ci0JQmlnaW50ICpjOwotCWludCBpLCB3YSwgd2I7Ci0JTG9uZyBib3Jyb3csIHk7CS8qIFdlIG5lZWQgc2lnbmVkIHNoaWZ0cyBoZXJlLiAqLwotCVVMb25nICp4YSwgKnhhZSwgKnhiLCAqeGJlLCAqeGM7Ci0jaWZkZWYgUGFja18zMgotCUxvbmcgejsKLSNlbmRpZgotCi0JaWYgKGEgPT0gQklHSU5UX0lOVkFMSUQgfHwgYiA9PSBCSUdJTlRfSU5WQUxJRCkKLQkJcmV0dXJuIEJJR0lOVF9JTlZBTElEOwotCi0JaSA9IGNtcChhLGIpOwotCWlmICghaSkgewotCQljID0gQmFsbG9jKDApOwotCQlpZiAoYyAhPSBCSUdJTlRfSU5WQUxJRCkgewotCQkJYy0+d2RzID0gMTsKLQkJCWMtPnhbMF0gPSAwOwotCQkJfQotCQlyZXR1cm4gYzsKLQl9Ci0JaWYgKGkgPCAwKSB7Ci0JCWMgPSBhOwotCQlhID0gYjsKLQkJYiA9IGM7Ci0JCWkgPSAxOwotCX0KLQllbHNlCi0JCWkgPSAwOwotCWMgPSBCYWxsb2MoYS0+ayk7Ci0JaWYgKGMgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBjOwotCWMtPnNpZ24gPSBpOwotCXdhID0gYS0+d2RzOwotCXhhID0gYS0+eDsKLQl4YWUgPSB4YSArIHdhOwotCXdiID0gYi0+d2RzOwotCXhiID0gYi0+eDsKLQl4YmUgPSB4YiArIHdiOwotCXhjID0gYy0+eDsKLQlib3Jyb3cgPSAwOwotI2lmZGVmIFBhY2tfMzIKLQlkbyB7Ci0JCXkgPSAoKnhhICYgMHhmZmZmKSAtICgqeGIgJiAweGZmZmYpICsgYm9ycm93OwotCQlib3Jyb3cgPSAoVUxvbmcpeSA+PiAxNjsKLQkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKLQkJeiA9ICgqeGErKyA+PiAxNikgLSAoKnhiKysgPj4gMTYpICsgYm9ycm93OwotCQlib3Jyb3cgPSAoVUxvbmcpeiA+PiAxNjsKLQkJU2lnbl9FeHRlbmQoYm9ycm93LCB6KTsKLQkJU3RvcmVpbmMoeGMsIHosIHkpOwotCX0KLQl3aGlsZSh4YiA8IHhiZSk7Ci0Jd2hpbGUoeGEgPCB4YWUpIHsKLQkJeSA9ICgqeGEgJiAweGZmZmYpICsgYm9ycm93OwotCQlib3Jyb3cgPSAoVUxvbmcpeSA+PiAxNjsKLQkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKLQkJeiA9ICgqeGErKyA+PiAxNikgKyBib3Jyb3c7Ci0JCWJvcnJvdyA9IChVTG9uZyl6ID4+IDE2OwotCQlTaWduX0V4dGVuZChib3Jyb3csIHopOwotCQlTdG9yZWluYyh4YywgeiwgeSk7Ci0JfQotI2Vsc2UKLQlkbyB7Ci0JCXkgPSAqeGErKyAtICp4YisrICsgYm9ycm93OwotCQlib3Jyb3cgPSB5ID4+IDE2OwotCQlTaWduX0V4dGVuZChib3Jyb3csIHkpOwotCQkqeGMrKyA9IHkgJiAweGZmZmY7Ci0JfQotCXdoaWxlKHhiIDwgeGJlKTsKLQl3aGlsZSh4YSA8IHhhZSkgewotCQl5ID0gKnhhKysgKyBib3Jyb3c7Ci0JCWJvcnJvdyA9IHkgPj4gMTY7Ci0JCVNpZ25fRXh0ZW5kKGJvcnJvdywgeSk7Ci0JCSp4YysrID0geSAmIDB4ZmZmZjsKLQl9Ci0jZW5kaWYKLQl3aGlsZSghKi0teGMpCi0JCXdhLS07Ci0JYy0+d2RzID0gd2E7Ci0JcmV0dXJuIGM7Ci19Ci0KLSBzdGF0aWMgZG91YmxlCi11bHAKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKF94KSBkb3VibGUgX3g7Ci0jZWxzZQotCShkb3VibGUgX3gpCi0jZW5kaWYKLXsKLQlfZG91YmxlIHg7Ci0JTG9uZyBMOwotCV9kb3VibGUgYTsKLQotCXZhbHVlKHgpID0gX3g7Ci0JTCA9ICh3b3JkMCh4KSAmIEV4cF9tYXNrKSAtIChQLTEpKkV4cF9tc2sxOwotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JaWYgKEwgPiAwKSB7Ci0jZW5kaWYKLSNpZmRlZiBJQk0KLQkJTCB8PSBFeHBfbXNrMSA+PiA0OwotI2VuZGlmCi0JCXdvcmQwKGEpID0gTDsKLQkJd29yZDEoYSkgPSAwOwotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JfQotCWVsc2UgewotCQlMID0gKFVMb25nKS1MID4+IEV4cF9zaGlmdDsKLQkJaWYgKEwgPCBFeHBfc2hpZnQpIHsKLQkJCXdvcmQwKGEpID0gMHg4MDAwMCA+PiBMOwotCQkJd29yZDEoYSkgPSAwOwotCQl9Ci0JCWVsc2UgewotCQkJd29yZDAoYSkgPSAwOwotCQkJTCAtPSBFeHBfc2hpZnQ7Ci0JCQl3b3JkMShhKSA9IEwgPj0gMzEgPyAxIDogMSA8PCAoMzEgLSBMKTsKLQkJfQotCX0KLSNlbmRpZgotCXJldHVybiB2YWx1ZShhKTsKLX0KLQotIHN0YXRpYyBkb3VibGUKLWIyZAotI2lmZGVmIEtSX2hlYWRlcnMKLQkoYSwgZSkgQmlnaW50ICphOyBpbnQgKmU7Ci0jZWxzZQotCShCaWdpbnQgKmEsIGludCAqZSkKLSNlbmRpZgotewotCVVMb25nICp4YSwgKnhhMCwgdywgeSwgejsKLQlpbnQgazsKLQlfZG91YmxlIGQ7Ci0jaWZkZWYgVkFYCi0JVUxvbmcgZDAsIGQxOwotI2Vsc2UKLSNkZWZpbmUgZDAgd29yZDAoZCkKLSNkZWZpbmUgZDEgd29yZDEoZCkKLSNlbmRpZgotCi0JaWYgKGEgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBOQU47Ci0KLQl4YTAgPSBhLT54OwotCXhhID0geGEwICsgYS0+d2RzOwotCXkgPSAqLS14YTsKLSNpZmRlZiBERUJVRwotCWlmICgheSkgQnVnKCJ6ZXJvIHkgaW4gYjJkIik7Ci0jZW5kaWYKLQlrID0gaGkwYml0cyh5KTsKLQkqZSA9IDMyIC0gazsKLSNpZmRlZiBQYWNrXzMyCi0JaWYgKGsgPCBFYml0cykgewotCQlkMCA9IEV4cF8xIHwgeSA+PiAoRWJpdHMgLSBrKTsKLQkJdyA9IHhhID4geGEwID8gKi0teGEgOiAwOwotCQlkMSA9IHkgPDwgKCgzMi1FYml0cykgKyBrKSB8IHcgPj4gKEViaXRzIC0gayk7Ci0JCWdvdG8gcmV0X2Q7Ci0JfQotCXogPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKLQlpZiAoayAtPSBFYml0cykgewotCQlkMCA9IEV4cF8xIHwgeSA8PCBrIHwgeiA+PiAoMzIgLSBrKTsKLQkJeSA9IHhhID4geGEwID8gKi0teGEgOiAwOwotCQlkMSA9IHogPDwgayB8IHkgPj4gKDMyIC0gayk7Ci0JfQotCWVsc2UgewotCQlkMCA9IEV4cF8xIHwgeTsKLQkJZDEgPSB6OwotCX0KLSNlbHNlCi0JaWYgKGsgPCBFYml0cyArIDE2KSB7Ci0JCXogPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKLQkJZDAgPSBFeHBfMSB8IHkgPDwgayAtIEViaXRzIHwgeiA+PiBFYml0cyArIDE2IC0gazsKLQkJdyA9IHhhID4geGEwID8gKi0teGEgOiAwOwotCQl5ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7Ci0JCWQxID0geiA8PCBrICsgMTYgLSBFYml0cyB8IHcgPDwgayAtIEViaXRzIHwgeSA+PiAxNiArIEViaXRzIC0gazsKLQkJZ290byByZXRfZDsKLQl9Ci0JeiA9IHhhID4geGEwID8gKi0teGEgOiAwOwotCXcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKLQlrIC09IEViaXRzICsgMTY7Ci0JZDAgPSBFeHBfMSB8IHkgPDwgayArIDE2IHwgeiA8PCBrIHwgdyA+PiAxNiAtIGs7Ci0JeSA9IHhhID4geGEwID8gKi0teGEgOiAwOwotCWQxID0gdyA8PCBrICsgMTYgfCB5IDw8IGs7Ci0jZW5kaWYKLSByZXRfZDoKLSNpZmRlZiBWQVgKLQl3b3JkMChkKSA9IGQwID4+IDE2IHwgZDAgPDwgMTY7Ci0Jd29yZDEoZCkgPSBkMSA+PiAxNiB8IGQxIDw8IDE2OwotI2Vsc2UKLSN1bmRlZiBkMAotI3VuZGVmIGQxCi0jZW5kaWYKLQlyZXR1cm4gdmFsdWUoZCk7Ci19Ci0KLSBzdGF0aWMgQmlnaW50ICoKLWQyYgotI2lmZGVmIEtSX2hlYWRlcnMKLQkoX2QsIGUsIGJpdHMpIGRvdWJsZSBkOyBpbnQgKmUsICpiaXRzOwotI2Vsc2UKLQkoZG91YmxlIF9kLCBpbnQgKmUsIGludCAqYml0cykKLSNlbmRpZgotewotCUJpZ2ludCAqYjsKLQlpbnQgZGUsIGksIGs7Ci0JVUxvbmcgKngsIHksIHo7Ci0JX2RvdWJsZSBkOwotI2lmZGVmIFZBWAotCVVMb25nIGQwLCBkMTsKLSNlbmRpZgotCi0JdmFsdWUoZCkgPSBfZDsKLSNpZmRlZiBWQVgKLQlkMCA9IHdvcmQwKGQpID4+IDE2IHwgd29yZDAoZCkgPDwgMTY7Ci0JZDEgPSB3b3JkMShkKSA+PiAxNiB8IHdvcmQxKGQpIDw8IDE2OwotI2Vsc2UKLSNkZWZpbmUgZDAgd29yZDAoZCkKLSNkZWZpbmUgZDEgd29yZDEoZCkKLSNlbmRpZgotCi0jaWZkZWYgUGFja18zMgotCWIgPSBCYWxsb2MoMSk7Ci0jZWxzZQotCWIgPSBCYWxsb2MoMik7Ci0jZW5kaWYKLQlpZiAoYiA9PSBCSUdJTlRfSU5WQUxJRCkKLQkJcmV0dXJuIGI7Ci0JeCA9IGItPng7Ci0KLQl6ID0gZDAgJiBGcmFjX21hc2s7Ci0JZDAgJj0gMHg3ZmZmZmZmZjsJLyogY2xlYXIgc2lnbiBiaXQsIHdoaWNoIHdlIGlnbm9yZSAqLwotI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKLQlkZSA9IChpbnQpKGQwID4+IEV4cF9zaGlmdCk7Ci0jaWZuZGVmIElCTQotCXogfD0gRXhwX21zazExOwotI2VuZGlmCi0jZWxzZQotCWlmICgoZGUgPSAoaW50KShkMCA+PiBFeHBfc2hpZnQpKSAhPSAwKQotCQl6IHw9IEV4cF9tc2sxOwotI2VuZGlmCi0jaWZkZWYgUGFja18zMgotCWlmICgoeSA9IGQxKSAhPSAwKSB7Ci0JCWlmICgoayA9IGxvMGJpdHMoJnkpKSAhPSAwKSB7Ci0JCQl4WzBdID0geSB8IHogPDwgKDMyIC0gayk7Ci0JCQl6ID4+PSBrOwotCQl9Ci0JCWVsc2UKLQkJCXhbMF0gPSB5OwotCQlpID0gYi0+d2RzID0gKHhbMV0gPSB6KSA/IDIgOiAxOwotCX0KLQllbHNlIHsKLSNpZmRlZiBERUJVRwotCQlpZiAoIXopCi0JCQlCdWcoIlplcm8gcGFzc2VkIHRvIGQyYiIpOwotI2VuZGlmCi0JCWsgPSBsbzBiaXRzKCZ6KTsKLQkJeFswXSA9IHo7Ci0JCWkgPSBiLT53ZHMgPSAxOwotCQlrICs9IDMyOwotCX0KLSNlbHNlCi0JaWYgKHkgPSBkMSkgewotCQlpZiAoayA9IGxvMGJpdHMoJnkpKQotCQkJaWYgKGsgPj0gMTYpIHsKLQkJCQl4WzBdID0geSB8IHogPDwgMzIgLSBrICYgMHhmZmZmOwotCQkJCXhbMV0gPSB6ID4+IGsgLSAxNiAmIDB4ZmZmZjsKLQkJCQl4WzJdID0geiA+PiBrOwotCQkJCWkgPSAyOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJeFswXSA9IHkgJiAweGZmZmY7Ci0JCQkJeFsxXSA9IHkgPj4gMTYgfCB6IDw8IDE2IC0gayAmIDB4ZmZmZjsKLQkJCQl4WzJdID0geiA+PiBrICYgMHhmZmZmOwotCQkJCXhbM10gPSB6ID4+IGsrMTY7Ci0JCQkJaSA9IDM7Ci0JCQl9Ci0JCWVsc2UgewotCQkJeFswXSA9IHkgJiAweGZmZmY7Ci0JCQl4WzFdID0geSA+PiAxNjsKLQkJCXhbMl0gPSB6ICYgMHhmZmZmOwotCQkJeFszXSA9IHogPj4gMTY7Ci0JCQlpID0gMzsKLQkJfQotCX0KLQllbHNlIHsKLSNpZmRlZiBERUJVRwotCQlpZiAoIXopCi0JCQlCdWcoIlplcm8gcGFzc2VkIHRvIGQyYiIpOwotI2VuZGlmCi0JCWsgPSBsbzBiaXRzKCZ6KTsKLQkJaWYgKGsgPj0gMTYpIHsKLQkJCXhbMF0gPSB6OwotCQkJaSA9IDA7Ci0JCX0KLQkJZWxzZSB7Ci0JCQl4WzBdID0geiAmIDB4ZmZmZjsKLQkJCXhbMV0gPSB6ID4+IDE2OwotCQkJaSA9IDE7Ci0JCX0KLQkJayArPSAzMjsKLQl9Ci0Jd2hpbGUoIXhbaV0pCi0JCS0taTsKLQliLT53ZHMgPSBpICsgMTsKLSNlbmRpZgotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JaWYgKGRlKSB7Ci0jZW5kaWYKLSNpZmRlZiBJQk0KLQkJKmUgPSAoZGUgLSBCaWFzIC0gKFAtMSkgPDwgMikgKyBrOwotCQkqYml0cyA9IDQqUCArIDggLSBrIC0gaGkwYml0cyh3b3JkMChkKSAmIEZyYWNfbWFzayk7Ci0jZWxzZQotCQkqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgazsKLQkJKmJpdHMgPSBQIC0gazsKLSNlbmRpZgotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JfQotCWVsc2UgewotCQkqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgMSArIGs7Ci0jaWZkZWYgUGFja18zMgotCQkqYml0cyA9IDMyKmkgLSBoaTBiaXRzKHhbaS0xXSk7Ci0jZWxzZQotCQkqYml0cyA9IChpKzIpKjE2IC0gaGkwYml0cyh4W2ldKTsKLSNlbmRpZgotCQl9Ci0jZW5kaWYKLQlyZXR1cm4gYjsKLX0KLSN1bmRlZiBkMAotI3VuZGVmIGQxCi0KLSBzdGF0aWMgZG91YmxlCi1yYXRpbwotI2lmZGVmIEtSX2hlYWRlcnMKLQkoYSwgYikgQmlnaW50ICphLCAqYjsKLSNlbHNlCi0JKEJpZ2ludCAqYSwgQmlnaW50ICpiKQotI2VuZGlmCi17Ci0JX2RvdWJsZSBkYSwgZGI7Ci0JaW50IGssIGthLCBrYjsKLQotCWlmIChhID09IEJJR0lOVF9JTlZBTElEIHx8IGIgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiBOQU47IC8qIGZvciBsYWNrIG9mIGJldHRlciB2YWx1ZSA/ICovCi0KLQl2YWx1ZShkYSkgPSBiMmQoYSwgJmthKTsKLQl2YWx1ZShkYikgPSBiMmQoYiwgJmtiKTsKLSNpZmRlZiBQYWNrXzMyCi0JayA9IGthIC0ga2IgKyAzMiooYS0+d2RzIC0gYi0+d2RzKTsKLSNlbHNlCi0JayA9IGthIC0ga2IgKyAxNiooYS0+d2RzIC0gYi0+d2RzKTsKLSNlbmRpZgotI2lmZGVmIElCTQotCWlmIChrID4gMCkgewotCQl3b3JkMChkYSkgKz0gKGsgPj4gMikqRXhwX21zazE7Ci0JCWlmIChrICY9IDMpCi0JCQlkYSAqPSAxIDw8IGs7Ci0JfQotCWVsc2UgewotCQlrID0gLWs7Ci0JCXdvcmQwKGRiKSArPSAoayA+PiAyKSpFeHBfbXNrMTsKLQkJaWYgKGsgJj0gMykKLQkJCWRiICo9IDEgPDwgazsKLQl9Ci0jZWxzZQotCWlmIChrID4gMCkKLQkJd29yZDAoZGEpICs9IGsqRXhwX21zazE7Ci0JZWxzZSB7Ci0JCWsgPSAtazsKLQkJd29yZDAoZGIpICs9IGsqRXhwX21zazE7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIHZhbHVlKGRhKSAvIHZhbHVlKGRiKTsKLX0KLQotc3RhdGljIENPTlNUIGRvdWJsZQotdGVuc1tdID0gewotCQkxZTAsIDFlMSwgMWUyLCAxZTMsIDFlNCwgMWU1LCAxZTYsIDFlNywgMWU4LCAxZTksCi0JCTFlMTAsIDFlMTEsIDFlMTIsIDFlMTMsIDFlMTQsIDFlMTUsIDFlMTYsIDFlMTcsIDFlMTgsIDFlMTksCi0JCTFlMjAsIDFlMjEsIDFlMjIKLSNpZmRlZiBWQVgKLQkJLCAxZTIzLCAxZTI0Ci0jZW5kaWYKLX07Ci0KLSNpZmRlZiBJRUVFX0FyaXRoCi1zdGF0aWMgQ09OU1QgZG91YmxlIGJpZ3RlbnNbXSA9IHsgMWUxNiwgMWUzMiwgMWU2NCwgMWUxMjgsIDFlMjU2IH07Ci1zdGF0aWMgQ09OU1QgZG91YmxlIHRpbnl0ZW5zW10gPSB7IDFlLTE2LCAxZS0zMiwgMWUtNjQsIDFlLTEyOCwgMWUtMjU2IH07Ci0jZGVmaW5lIG5fYmlndGVucyA1Ci0jZWxzZQotI2lmZGVmIElCTQotc3RhdGljIENPTlNUIGRvdWJsZSBiaWd0ZW5zW10gPSB7IDFlMTYsIDFlMzIsIDFlNjQgfTsKLXN0YXRpYyBDT05TVCBkb3VibGUgdGlueXRlbnNbXSA9IHsgMWUtMTYsIDFlLTMyLCAxZS02NCB9OwotI2RlZmluZSBuX2JpZ3RlbnMgMwotI2Vsc2UKLXN0YXRpYyBDT05TVCBkb3VibGUgYmlndGVuc1tdID0geyAxZTE2LCAxZTMyIH07Ci1zdGF0aWMgQ09OU1QgZG91YmxlIHRpbnl0ZW5zW10gPSB7IDFlLTE2LCAxZS0zMiB9OwotI2RlZmluZSBuX2JpZ3RlbnMgMgotI2VuZGlmCi0jZW5kaWYKLQotIGRvdWJsZQotc3RydG9kCi0jaWZkZWYgS1JfaGVhZGVycwotCShzMDAsIHNlKSBDT05TVCBjaGFyICpzMDA7IGNoYXIgKipzZTsKLSNlbHNlCi0JKENPTlNUIGNoYXIgKnMwMCwgY2hhciAqKnNlKQotI2VuZGlmCi17Ci0JaW50IGJiMiwgYmI1LCBiYmUsIGJkMiwgYmQ1LCBiYmJpdHMsIGJzMiwgYywgZHNpZ24sCi0JCSBlLCBlMSwgZXNpZ24sIGksIGosIGssIG5kLCBuZDAsIG5mLCBueiwgbnowLCBzaWduOwotCUNPTlNUIGNoYXIgKnMsICpzMCwgKnMxOwotCWRvdWJsZSBhYWRqLCBhYWRqMSwgYWRqOwotCV9kb3VibGUgcnYsIHJ2MDsKLQlMb25nIEw7Ci0JVUxvbmcgeSwgejsKLQlCaWdpbnQgKmJiMSwgKmJkMDsKLQlCaWdpbnQgKmJiID0gTlVMTCwgKmJkID0gTlVMTCwgKmJzID0gTlVMTCwgKmRlbHRhID0gTlVMTDsvKiBwYWNpZnkgZ2NjICovCi0KLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLQlDT05TVCBjaGFyIGRlY2ltYWxfcG9pbnQgPSAnLic7Ci0jZWxzZSAvKiBBTkRST0lEX0NIQU5HRVMgKi8KLSNpZm5kZWYgS1JfaGVhZGVycwotCUNPTlNUIGNoYXIgZGVjaW1hbF9wb2ludCA9IGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludFswXTsKLSNlbHNlCi0JQ09OU1QgY2hhciBkZWNpbWFsX3BvaW50ID0gJy4nOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KLQotCXNpZ24gPSBuejAgPSBueiA9IDA7Ci0JdmFsdWUocnYpID0gMC47Ci0KLQotCWZvcihzID0gczAwOyBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqcyk7IHMrKykKLQkJOwotCi0JaWYgKCpzID09ICctJykgewotCQlzaWduID0gMTsKLQkJcysrOwotCX0gZWxzZSBpZiAoKnMgPT0gJysnKSB7Ci0JCXMrKzsKLQl9Ci0KLQlpZiAoKnMgPT0gJ1wwJykgewotCQlzID0gczAwOwotCQlnb3RvIHJldDsKLQl9Ci0KLQkvKiAiSU5GIiBvciAiSU5GSU5JVFkiICovCi0JaWYgKHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKnMpID09ICdpJyAmJiBzdHJuY2FzZWNtcChzLCAiaW5mIiwgMykgPT0gMCkgewotCQlpZiAoc3RybmNhc2VjbXAocyArIDMsICJpbml0eSIsIDUpID09IDApCi0JCQlzICs9IDg7Ci0JCWVsc2UKLQkJCXMgKz0gMzsKLQotCQl2YWx1ZShydikgPSBIVUdFX1ZBTDsKLQkJZ290byByZXQ7Ci0JfQotCi0jaWZkZWYgSUVFRV9Bcml0aAotCS8qICJOQU4iIG9yICJOQU4obi1jaGFyLXNlcXVlbmNlLW9wdCkiICovCi0JaWYgKHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKnMpID09ICduJyAmJiBzdHJuY2FzZWNtcChzLCAibmFuIiwgMykgPT0gMCkgewotCQkvKiBCdWlsZCBhIHF1aWV0IE5hTi4gKi8KLQkJd29yZDAocnYpID0gTkFOX1dPUkQwOwotCQl3b3JkMShydikgPSBOQU5fV09SRDE7Ci0JCXMrPSAzOwotCi0JCS8qIERvbid0IGludGVycHJldCAobi1jaGFyLXNlcXVlbmNlLW9wdCksIGZvciBub3cuICovCi0JCWlmICgqcyA9PSAnKCcpIHsKLQkJCXMwID0gczsKLQkJCWZvciAocysrOyAqcyAhPSAnKScgJiYgKnMgIT0gJ1wwJzsgcysrKQotCQkJCTsKLQkJCWlmICgqcyA9PSAnKScpCi0JCQkJcysrOwkvKiBTa2lwIG92ZXIgY2xvc2luZyBwYXJlbiAuLi4gKi8KLQkJCWVsc2UKLQkJCQlzID0gczA7CS8qIC4uLiBvdGhlcndpc2UgZ28gYmFjay4gKi8KLQkJfQotCi0JCWdvdG8gcmV0OwotCX0KLSNlbmRpZgotCi0JaWYgKCpzID09ICcwJykgewotCQluejAgPSAxOwotCQl3aGlsZSgqKytzID09ICcwJykgOwotCQlpZiAoISpzKQotCQkJZ290byByZXQ7Ci0JfQotCXMwID0gczsKLQl5ID0geiA9IDA7Ci0JZm9yKG5kID0gbmYgPSAwOyAoYyA9ICpzKSA+PSAnMCcgJiYgYyA8PSAnOSc7IG5kKyssIHMrKykKLQkJaWYgKG5kIDwgOSkKLQkJCXkgPSAxMCp5ICsgYyAtICcwJzsKLQkJZWxzZSBpZiAobmQgPCAxNikKLQkJCXogPSAxMCp6ICsgYyAtICcwJzsKLQluZDAgPSBuZDsKLQlpZiAoYyA9PSBkZWNpbWFsX3BvaW50KSB7Ci0JCWMgPSAqKytzOwotCQlpZiAoIW5kKSB7Ci0JCQlmb3IoOyBjID09ICcwJzsgYyA9ICorK3MpCi0JCQkJbnorKzsKLQkJCWlmIChjID4gJzAnICYmIGMgPD0gJzknKSB7Ci0JCQkJczAgPSBzOwotCQkJCW5mICs9IG56OwotCQkJCW56ID0gMDsKLQkJCQlnb3RvIGhhdmVfZGlnOwotCQkJCX0KLQkJCWdvdG8gZGlnX2RvbmU7Ci0JCX0KLQkJZm9yKDsgYyA+PSAnMCcgJiYgYyA8PSAnOSc7IGMgPSAqKytzKSB7Ci0gaGF2ZV9kaWc6Ci0JCQlueisrOwotCQkJaWYgKGMgLT0gJzAnKSB7Ci0JCQkJbmYgKz0gbno7Ci0JCQkJZm9yKGkgPSAxOyBpIDwgbno7IGkrKykKLQkJCQkJaWYgKG5kKysgPCA5KQotCQkJCQkJeSAqPSAxMDsKLQkJCQkJZWxzZSBpZiAobmQgPD0gREJMX0RJRyArIDEpCi0JCQkJCQl6ICo9IDEwOwotCQkJCWlmIChuZCsrIDwgOSkKLQkJCQkJeSA9IDEwKnkgKyBjOwotCQkJCWVsc2UgaWYgKG5kIDw9IERCTF9ESUcgKyAxKQotCQkJCQl6ID0gMTAqeiArIGM7Ci0JCQkJbnogPSAwOwotCQkJfQotCQl9Ci0JfQotIGRpZ19kb25lOgotCWUgPSAwOwotCWlmIChjID09ICdlJyB8fCBjID09ICdFJykgewotCQlpZiAoIW5kICYmICFueiAmJiAhbnowKSB7Ci0JCQlzID0gczAwOwotCQkJZ290byByZXQ7Ci0JCX0KLQkJczAwID0gczsKLQkJZXNpZ24gPSAwOwotCQlzd2l0Y2goYyA9ICorK3MpIHsKLQkJCWNhc2UgJy0nOgotCQkJCWVzaWduID0gMTsKLQkJCQkvKiBGQUxMVEhST1VHSCAqLwotCQkJY2FzZSAnKyc6Ci0JCQkJYyA9ICorK3M7Ci0JCX0KLQkJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7Ci0JCQl3aGlsZShjID09ICcwJykKLQkJCQljID0gKisrczsKLQkJCWlmIChjID4gJzAnICYmIGMgPD0gJzknKSB7Ci0JCQkJTCA9IGMgLSAnMCc7Ci0JCQkJczEgPSBzOwotCQkJCXdoaWxlKChjID0gKisrcykgPj0gJzAnICYmIGMgPD0gJzknKQotCQkJCQlMID0gMTAqTCArIGMgLSAnMCc7Ci0JCQkJaWYgKHMgLSBzMSA+IDggfHwgTCA+IDE5OTk5KQotCQkJCQkvKiBBdm9pZCBjb25mdXNpb24gZnJvbSBleHBvbmVudHMKLQkJCQkJICogc28gbGFyZ2UgdGhhdCBlIG1pZ2h0IG92ZXJmbG93LgotCQkJCQkgKi8KLQkJCQkJZSA9IDE5OTk5OyAvKiBzYWZlIGZvciAxNiBiaXQgaW50cyAqLwotCQkJCWVsc2UKLQkJCQkJZSA9IChpbnQpTDsKLQkJCQlpZiAoZXNpZ24pCi0JCQkJCWUgPSAtZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQllID0gMDsKLQkJfQotCQllbHNlCi0JCQlzID0gczAwOwotCX0KLQlpZiAoIW5kKSB7Ci0JCWlmICghbnogJiYgIW56MCkKLQkJCXMgPSBzMDA7Ci0JCWdvdG8gcmV0OwotCX0KLQllMSA9IGUgLT0gbmY7Ci0KLQkvKiBOb3cgd2UgaGF2ZSBuZDAgZGlnaXRzLCBzdGFydGluZyBhdCBzMCwgZm9sbG93ZWQgYnkgYQotCSAqIGRlY2ltYWwgcG9pbnQsIGZvbGxvd2VkIGJ5IG5kLW5kMCBkaWdpdHMuICBUaGUgbnVtYmVyIHdlJ3JlCi0JICogYWZ0ZXIgaXMgdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhvc2UgZGlnaXRzIHRpbWVzCi0JICogMTAqKmUgKi8KLQotCWlmICghbmQwKQotCQluZDAgPSBuZDsKLQlrID0gbmQgPCBEQkxfRElHICsgMSA/IG5kIDogREJMX0RJRyArIDE7Ci0JdmFsdWUocnYpID0geTsKLQlpZiAoayA+IDkpCi0JCXZhbHVlKHJ2KSA9IHRlbnNbayAtIDldICogdmFsdWUocnYpICsgejsKLQliZDAgPSAwOwotCWlmIChuZCA8PSBEQkxfRElHCi0jaWZuZGVmIFJORF9QUk9EUVVPVAotCQkmJiBGTFRfUk9VTkRTID09IDEKLSNlbmRpZgotCQkpIHsKLQkJaWYgKCFlKQotCQkJZ290byByZXQ7Ci0JCWlmIChlID4gMCkgewotCQkJaWYgKGUgPD0gVGVuX3BtYXgpIHsKLSNpZmRlZiBWQVgKLQkJCQlnb3RvIHZheF9vdmZsX2NoZWNrOwotI2Vsc2UKLQkJCQkvKiB2YWx1ZShydikgPSAqLyByb3VuZGVkX3Byb2R1Y3QodmFsdWUocnYpLAotCQkJCSAgICB0ZW5zW2VdKTsKLQkJCQlnb3RvIHJldDsKLSNlbmRpZgotCQkJfQotCQkJaSA9IERCTF9ESUcgLSBuZDsKLQkJCWlmIChlIDw9IFRlbl9wbWF4ICsgaSkgewotCQkJCS8qIEEgZmFuY2llciB0ZXN0IHdvdWxkIHNvbWV0aW1lcyBsZXQgdXMgZG8KLQkJCQkgKiB0aGlzIGZvciBsYXJnZXIgaSB2YWx1ZXMuCi0JCQkJICovCi0JCQkJZSAtPSBpOwotCQkJCXZhbHVlKHJ2KSAqPSB0ZW5zW2ldOwotI2lmZGVmIFZBWAotCQkJCS8qIFZBWCBleHBvbmVudCByYW5nZSBpcyBzbyBuYXJyb3cgd2UgbXVzdAotCQkJCSAqIHdvcnJ5IGFib3V0IG92ZXJmbG93IGhlcmUuLi4KLQkJCQkgKi8KLSB2YXhfb3ZmbF9jaGVjazoKLQkJCQl3b3JkMChydikgLT0gUCpFeHBfbXNrMTsKLQkJCQkvKiB2YWx1ZShydikgPSAqLyByb3VuZGVkX3Byb2R1Y3QodmFsdWUocnYpLAotCQkJCSAgICB0ZW5zW2VdKTsKLQkJCQlpZiAoKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKQotCQkJCSA+IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEtUCkpCi0JCQkJCWdvdG8gb3ZmbDsKLQkJCQl3b3JkMChydikgKz0gUCpFeHBfbXNrMTsKLSNlbHNlCi0JCQkJLyogdmFsdWUocnYpID0gKi8gcm91bmRlZF9wcm9kdWN0KHZhbHVlKHJ2KSwKLQkJCQkgICAgdGVuc1tlXSk7Ci0jZW5kaWYKLQkJCQlnb3RvIHJldDsKLQkJCX0KLQkJfQotI2lmbmRlZiBJbmFjY3VyYXRlX0RpdmlkZQotCQllbHNlIGlmIChlID49IC1UZW5fcG1heCkgewotCQkJLyogdmFsdWUocnYpID0gKi8gcm91bmRlZF9xdW90aWVudCh2YWx1ZShydiksCi0JCQkgICAgdGVuc1stZV0pOwotCQkJZ290byByZXQ7Ci0JCX0KLSNlbmRpZgotCX0KLQllMSArPSBuZCAtIGs7Ci0KLQkvKiBHZXQgc3RhcnRpbmcgYXBwcm94aW1hdGlvbiA9IHJ2ICogMTAqKmUxICovCi0KLQlpZiAoZTEgPiAwKSB7Ci0JCWlmICgoaSA9IGUxICYgMTUpICE9IDApCi0JCQl2YWx1ZShydikgKj0gdGVuc1tpXTsKLQkJaWYgKGUxICY9IH4xNSkgewotCQkJaWYgKGUxID4gREJMX01BWF8xMF9FWFApIHsKLSBvdmZsOgotCQkJCWVycm5vID0gRVJBTkdFOwotCQkJCXZhbHVlKHJ2KSA9IEhVR0VfVkFMOwotCQkJCWlmIChiZDApCi0JCQkJCWdvdG8gcmV0ZnJlZTsKLQkJCQlnb3RvIHJldDsKLQkJCX0KLQkJCWlmICgoZTEgPSAodW5zaWduZWQgaW50KWUxID4+IDQpICE9IDApIHsKLQkJCQlmb3IoaiA9IDA7IGUxID4gMTsgaisrLAotCQkJCSAgICBlMSA9ICh1bnNpZ25lZCBpbnQpZTEgPj4gMSkKLQkJCQkJaWYgKGUxICYgMSkKLQkJCQkJCXZhbHVlKHJ2KSAqPSBiaWd0ZW5zW2pdOwotCQkJLyogVGhlIGxhc3QgbXVsdGlwbGljYXRpb24gY291bGQgb3ZlcmZsb3cuICovCi0JCQkJd29yZDAocnYpIC09IFAqRXhwX21zazE7Ci0JCQkJdmFsdWUocnYpICo9IGJpZ3RlbnNbal07Ci0JCQkJaWYgKCh6ID0gd29yZDAocnYpICYgRXhwX21hc2spCi0JCQkJID4gRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtUCkpCi0JCQkJCWdvdG8gb3ZmbDsKLQkJCQlpZiAoeiA+IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEtUCkpIHsKLQkJCQkJLyogc2V0IHRvIGxhcmdlc3QgbnVtYmVyICovCi0JCQkJCS8qIChDYW4ndCB0cnVzdCBEQkxfTUFYKSAqLwotCQkJCQl3b3JkMChydikgPSBCaWcwOwotCQkJCQl3b3JkMShydikgPSBCaWcxOwotCQkJCQl9Ci0JCQkJZWxzZQotCQkJCQl3b3JkMChydikgKz0gUCpFeHBfbXNrMTsKLQkJCX0KLQkJfQotCX0KLQllbHNlIGlmIChlMSA8IDApIHsKLQkJZTEgPSAtZTE7Ci0JCWlmICgoaSA9IGUxICYgMTUpICE9IDApCi0JCQl2YWx1ZShydikgLz0gdGVuc1tpXTsKLQkJaWYgKGUxICY9IH4xNSkgewotCQkJZTEgPSAodW5zaWduZWQgaW50KWUxID4+IDQ7Ci0JCQlpZiAoZTEgPj0gMSA8PCBuX2JpZ3RlbnMpCi0JCQkJZ290byB1bmRmbDsKLQkJCWZvcihqID0gMDsgZTEgPiAxOyBqKyssCi0JCQkgICAgZTEgPSAodW5zaWduZWQgaW50KWUxID4+IDEpCi0JCQkJaWYgKGUxICYgMSkKLQkJCQkJdmFsdWUocnYpICo9IHRpbnl0ZW5zW2pdOwotCQkJLyogVGhlIGxhc3QgbXVsdGlwbGljYXRpb24gY291bGQgdW5kZXJmbG93LiAqLwotCQkJdmFsdWUocnYwKSA9IHZhbHVlKHJ2KTsKLQkJCXZhbHVlKHJ2KSAqPSB0aW55dGVuc1tqXTsKLQkJCWlmICghdmFsdWUocnYpKSB7Ci0JCQkJdmFsdWUocnYpID0gMi4qdmFsdWUocnYwKTsKLQkJCQl2YWx1ZShydikgKj0gdGlueXRlbnNbal07Ci0JCQkJaWYgKCF2YWx1ZShydikpIHsKLSB1bmRmbDoKLQkJCQkJdmFsdWUocnYpID0gMC47Ci0JCQkJCWVycm5vID0gRVJBTkdFOwotCQkJCQlpZiAoYmQwKQotCQkJCQkJZ290byByZXRmcmVlOwotCQkJCQlnb3RvIHJldDsKLQkJCQl9Ci0JCQkJd29yZDAocnYpID0gVGlueTA7Ci0JCQkJd29yZDEocnYpID0gVGlueTE7Ci0JCQkJLyogVGhlIHJlZmluZW1lbnQgYmVsb3cgd2lsbCBjbGVhbgotCQkJCSAqIHRoaXMgYXBwcm94aW1hdGlvbiB1cC4KLQkJCQkgKi8KLQkJCX0KLQkJfQotCX0KLQotCS8qIE5vdyB0aGUgaGFyZCBwYXJ0IC0tIGFkanVzdGluZyBydiB0byB0aGUgY29ycmVjdCB2YWx1ZS4qLwotCi0JLyogUHV0IGRpZ2l0cyBpbnRvIGJkOiB0cnVlIHZhbHVlID0gYmQgKiAxMF5lICovCi0KLQliZDAgPSBzMmIoczAsIG5kMCwgbmQsIHkpOwotCi0JZm9yKDs7KSB7Ci0JCWJkID0gQmFsbG9jKGJkMC0+ayk7Ci0JCUJjb3B5KGJkLCBiZDApOwotCQliYiA9IGQyYih2YWx1ZShydiksICZiYmUsICZiYmJpdHMpOwkvKiBydiA9IGJiICogMl5iYmUgKi8KLQkJYnMgPSBpMmIoMSk7Ci0KLQkJaWYgKGUgPj0gMCkgewotCQkJYmIyID0gYmI1ID0gMDsKLQkJCWJkMiA9IGJkNSA9IGU7Ci0JCX0KLQkJZWxzZSB7Ci0JCQliYjIgPSBiYjUgPSAtZTsKLQkJCWJkMiA9IGJkNSA9IDA7Ci0JCX0KLQkJaWYgKGJiZSA+PSAwKQotCQkJYmIyICs9IGJiZTsKLQkJZWxzZQotCQkJYmQyIC09IGJiZTsKLQkJYnMyID0gYmIyOwotI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKLSNpZmRlZiBJQk0KLQkJaiA9IDEgKyA0KlAgLSAzIC0gYmJiaXRzICsgKChiYmUgKyBiYmJpdHMgLSAxKSAmIDMpOwotI2Vsc2UKLQkJaiA9IFAgKyAxIC0gYmJiaXRzOwotI2VuZGlmCi0jZWxzZQotCQlpID0gYmJlICsgYmJiaXRzIC0gMTsJLyogbG9nYihydikgKi8KLQkJaWYgKGkgPCBFbWluKQkvKiBkZW5vcm1hbCAqLwotCQkJaiA9IGJiZSArIChQLUVtaW4pOwotCQllbHNlCi0JCQlqID0gUCArIDEgLSBiYmJpdHM7Ci0jZW5kaWYKLQkJYmIyICs9IGo7Ci0JCWJkMiArPSBqOwotCQlpID0gYmIyIDwgYmQyID8gYmIyIDogYmQyOwotCQlpZiAoaSA+IGJzMikKLQkJCWkgPSBiczI7Ci0JCWlmIChpID4gMCkgewotCQkJYmIyIC09IGk7Ci0JCQliZDIgLT0gaTsKLQkJCWJzMiAtPSBpOwotCQl9Ci0JCWlmIChiYjUgPiAwKSB7Ci0JCQlicyA9IHBvdzVtdWx0KGJzLCBiYjUpOwotCQkJYmIxID0gbXVsdChicywgYmIpOwotCQkJQmZyZWUoYmIpOwotCQkJYmIgPSBiYjE7Ci0JCX0KLQkJaWYgKGJiMiA+IDApCi0JCQliYiA9IGxzaGlmdChiYiwgYmIyKTsKLQkJaWYgKGJkNSA+IDApCi0JCQliZCA9IHBvdzVtdWx0KGJkLCBiZDUpOwotCQlpZiAoYmQyID4gMCkKLQkJCWJkID0gbHNoaWZ0KGJkLCBiZDIpOwotCQlpZiAoYnMyID4gMCkKLQkJCWJzID0gbHNoaWZ0KGJzLCBiczIpOwotCQlkZWx0YSA9IGRpZmYoYmIsIGJkKTsKLQkJZHNpZ24gPSBkZWx0YS0+c2lnbjsKLQkJZGVsdGEtPnNpZ24gPSAwOwotCQlpID0gY21wKGRlbHRhLCBicyk7Ci0JCWlmIChpIDwgMCkgewotCQkJLyogRXJyb3IgaXMgbGVzcyB0aGFuIGhhbGYgYW4gdWxwIC0tIGNoZWNrIGZvcgotCQkJICogc3BlY2lhbCBjYXNlIG9mIG1hbnRpc3NhIGEgcG93ZXIgb2YgdHdvLgotCQkJICovCi0JCQlpZiAoZHNpZ24gfHwgd29yZDEocnYpIHx8IHdvcmQwKHJ2KSAmIEJuZHJ5X21hc2spCi0JCQkJYnJlYWs7Ci0JCQlkZWx0YSA9IGxzaGlmdChkZWx0YSxMb2cyUCk7Ci0JCQlpZiAoY21wKGRlbHRhLCBicykgPiAwKQotCQkJCWdvdG8gZHJvcF9kb3duOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgPT0gMCkgewotCQkJLyogZXhhY3RseSBoYWxmLXdheSBiZXR3ZWVuICovCi0JCQlpZiAoZHNpZ24pIHsKLQkJCQlpZiAoKHdvcmQwKHJ2KSAmIEJuZHJ5X21hc2sxKSA9PSBCbmRyeV9tYXNrMQotCQkJCSAmJiAgd29yZDEocnYpID09IDB4ZmZmZmZmZmYpIHsKLQkJCQkJLypib3VuZGFyeSBjYXNlIC0tIGluY3JlbWVudCBleHBvbmVudCovCi0JCQkJCXdvcmQwKHJ2KSA9ICh3b3JkMChydikgJiBFeHBfbWFzaykKLQkJCQkJCSsgRXhwX21zazEKLSNpZmRlZiBJQk0KLQkJCQkJCXwgRXhwX21zazEgPj4gNAotI2VuZGlmCi0JCQkJCQk7Ci0JCQkJCXdvcmQxKHJ2KSA9IDA7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKCEod29yZDAocnYpICYgQm5kcnlfbWFzaykgJiYgIXdvcmQxKHJ2KSkgewotIGRyb3BfZG93bjoKLQkJCQkvKiBib3VuZGFyeSBjYXNlIC0tIGRlY3JlbWVudCBleHBvbmVudCAqLwotI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKLQkJCQlMID0gd29yZDAocnYpICYgRXhwX21hc2s7Ci0jaWZkZWYgSUJNCi0JCQkJaWYgKEwgPCAgRXhwX21zazEpCi0jZWxzZQotCQkJCWlmIChMIDw9IEV4cF9tc2sxKQotI2VuZGlmCi0JCQkJCWdvdG8gdW5kZmw7Ci0JCQkJTCAtPSBFeHBfbXNrMTsKLSNlbHNlCi0JCQkJTCA9ICh3b3JkMChydikgJiBFeHBfbWFzaykgLSBFeHBfbXNrMTsKLSNlbmRpZgotCQkJCXdvcmQwKHJ2KSA9IEwgfCBCbmRyeV9tYXNrMTsKLQkJCQl3b3JkMShydikgPSAweGZmZmZmZmZmOwotI2lmZGVmIElCTQotCQkJCWdvdG8gY29udDsKLSNlbHNlCi0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCX0KLSNpZm5kZWYgUk9VTkRfQklBU0VECi0JCQlpZiAoISh3b3JkMShydikgJiBMU0IpKQotCQkJCWJyZWFrOwotI2VuZGlmCi0JCQlpZiAoZHNpZ24pCi0JCQkJdmFsdWUocnYpICs9IHVscCh2YWx1ZShydikpOwotI2lmbmRlZiBST1VORF9CSUFTRUQKLQkJCWVsc2UgewotCQkJCXZhbHVlKHJ2KSAtPSB1bHAodmFsdWUocnYpKTsKLSNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdwotCQkJCWlmICghdmFsdWUocnYpKQotCQkJCQlnb3RvIHVuZGZsOwotI2VuZGlmCi0JCQl9Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgoYWFkaiA9IHJhdGlvKGRlbHRhLCBicykpIDw9IDIuKSB7Ci0JCQlpZiAoZHNpZ24pCi0JCQkJYWFkaiA9IGFhZGoxID0gMS47Ci0JCQllbHNlIGlmICh3b3JkMShydikgfHwgd29yZDAocnYpICYgQm5kcnlfbWFzaykgewotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JCQkJaWYgKHdvcmQxKHJ2KSA9PSBUaW55MSAmJiAhd29yZDAocnYpKQotCQkJCQlnb3RvIHVuZGZsOwotI2VuZGlmCi0JCQkJYWFkaiA9IDEuOwotCQkJCWFhZGoxID0gLTEuOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLyogc3BlY2lhbCBjYXNlIC0tIHBvd2VyIG9mIEZMVF9SQURJWCB0byBiZSAqLwotCQkJCS8qIHJvdW5kZWQgZG93bi4uLiAqLwotCi0JCQkJaWYgKGFhZGogPCAyLi9GTFRfUkFESVgpCi0JCQkJCWFhZGogPSAxLi9GTFRfUkFESVg7Ci0JCQkJZWxzZQotCQkJCQlhYWRqICo9IDAuNTsKLQkJCQlhYWRqMSA9IC1hYWRqOwotCQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWFhZGogKj0gMC41OwotCQkJYWFkajEgPSBkc2lnbiA/IGFhZGogOiAtYWFkajsKLSNpZmRlZiBDaGVja19GTFRfUk9VTkRTCi0JCQlzd2l0Y2goRkxUX1JPVU5EUykgewotCQkJCWNhc2UgMjogLyogdG93YXJkcyAraW5maW5pdHkgKi8KLQkJCQkJYWFkajEgLT0gMC41OwotCQkJCQlicmVhazsKLQkJCQljYXNlIDA6IC8qIHRvd2FyZHMgMCAqLwotCQkJCWNhc2UgMzogLyogdG93YXJkcyAtaW5maW5pdHkgKi8KLQkJCQkJYWFkajEgKz0gMC41OwotCQkJfQotI2Vsc2UKLQkJCWlmIChGTFRfUk9VTkRTID09IDApCi0JCQkJYWFkajEgKz0gMC41OwotI2VuZGlmCi0JCX0KLQkJeSA9IHdvcmQwKHJ2KSAmIEV4cF9tYXNrOwotCi0JCS8qIENoZWNrIGZvciBvdmVyZmxvdyAqLwotCi0JCWlmICh5ID09IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEpKSB7Ci0JCQl2YWx1ZShydjApID0gdmFsdWUocnYpOwotCQkJd29yZDAocnYpIC09IFAqRXhwX21zazE7Ci0JCQlhZGogPSBhYWRqMSAqIHVscCh2YWx1ZShydikpOwotCQkJdmFsdWUocnYpICs9IGFkajsKLQkJCWlmICgod29yZDAocnYpICYgRXhwX21hc2spID49Ci0JCQkJCUV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLVApKSB7Ci0JCQkJaWYgKHdvcmQwKHJ2MCkgPT0gQmlnMCAmJiB3b3JkMShydjApID09IEJpZzEpCi0JCQkJCWdvdG8gb3ZmbDsKLQkJCQl3b3JkMChydikgPSBCaWcwOwotCQkJCXdvcmQxKHJ2KSA9IEJpZzE7Ci0JCQkJZ290byBjb250OwotCQkJfQotCQkJZWxzZQotCQkJCXdvcmQwKHJ2KSArPSBQKkV4cF9tc2sxOwotCQl9Ci0JCWVsc2UgewotI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKLQkJCWlmICgod29yZDAocnYpICYgRXhwX21hc2spIDw9IFAqRXhwX21zazEpIHsKLQkJCQl2YWx1ZShydjApID0gdmFsdWUocnYpOwotCQkJCXdvcmQwKHJ2KSArPSBQKkV4cF9tc2sxOwotCQkJCWFkaiA9IGFhZGoxICogdWxwKHZhbHVlKHJ2KSk7Ci0JCQkJdmFsdWUocnYpICs9IGFkajsKLSNpZmRlZiBJQk0KLQkJCQlpZiAoKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKSA8ICBQKkV4cF9tc2sxKQotI2Vsc2UKLQkJCQlpZiAoKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKSA8PSBQKkV4cF9tc2sxKQotI2VuZGlmCi0JCQkJewotCQkJCQlpZiAod29yZDAocnYwKSA9PSBUaW55MAotCQkJCQkgJiYgd29yZDEocnYwKSA9PSBUaW55MSkKLQkJCQkJCWdvdG8gdW5kZmw7Ci0JCQkJCXdvcmQwKHJ2KSA9IFRpbnkwOwotCQkJCQl3b3JkMShydikgPSBUaW55MTsKLQkJCQkJZ290byBjb250OwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCXdvcmQwKHJ2KSAtPSBQKkV4cF9tc2sxOwotCQkJCX0KLQkJCWVsc2UgewotCQkJCWFkaiA9IGFhZGoxICogdWxwKHZhbHVlKHJ2KSk7Ci0JCQkJdmFsdWUocnYpICs9IGFkajsKLQkJCX0KLSNlbHNlCi0JCQkvKiBDb21wdXRlIGFkaiBzbyB0aGF0IHRoZSBJRUVFIHJvdW5kaW5nIHJ1bGVzIHdpbGwKLQkJCSAqIGNvcnJlY3RseSByb3VuZCBydiArIGFkaiBpbiBzb21lIGhhbGYtd2F5IGNhc2VzLgotCQkJICogSWYgcnYgKiB1bHAocnYpIGlzIGRlbm9ybWFsaXplZCAoaS5lLiwKLQkJCSAqIHkgPD0gKFAtMSkqRXhwX21zazEpLCB3ZSBtdXN0IGFkanVzdCBhYWRqIHRvIGF2b2lkCi0JCQkgKiB0cm91YmxlIGZyb20gYml0cyBsb3N0IHRvIGRlbm9ybWFsaXphdGlvbjsKLQkJCSAqIGV4YW1wbGU6IDEuMmUtMzA3IC4KLQkJCSAqLwotCQkJaWYgKHkgPD0gKFAtMSkqRXhwX21zazEgJiYgYWFkaiA+PSAxLikgewotCQkJCWFhZGoxID0gKGRvdWJsZSkoaW50KShhYWRqICsgMC41KTsKLQkJCQlpZiAoIWRzaWduKQotCQkJCQlhYWRqMSA9IC1hYWRqMTsKLQkJCX0KLQkJCWFkaiA9IGFhZGoxICogdWxwKHZhbHVlKHJ2KSk7Ci0JCQl2YWx1ZShydikgKz0gYWRqOwotI2VuZGlmCi0JCX0KLQkJeiA9IHdvcmQwKHJ2KSAmIEV4cF9tYXNrOwotCQlpZiAoeSA9PSB6KSB7Ci0JCQkvKiBDYW4gd2Ugc3RvcCBub3c/ICovCi0JCQlMID0gYWFkajsKLQkJCWFhZGogLT0gTDsKLQkJCS8qIFRoZSB0b2xlcmFuY2VzIGJlbG93IGFyZSBjb25zZXJ2YXRpdmUuICovCi0JCQlpZiAoZHNpZ24gfHwgd29yZDEocnYpIHx8IHdvcmQwKHJ2KSAmIEJuZHJ5X21hc2spIHsKLQkJCQlpZiAoYWFkaiA8IC40OTk5OTk5IHx8IGFhZGogPiAuNTAwMDAwMSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQllbHNlIGlmIChhYWRqIDwgLjQ5OTk5OTkvRkxUX1JBRElYKQotCQkJCWJyZWFrOwotCQl9Ci0gY29udDoKLQkJQmZyZWUoYmIpOwotCQlCZnJlZShiZCk7Ci0JCUJmcmVlKGJzKTsKLQkJQmZyZWUoZGVsdGEpOwotCX0KLSByZXRmcmVlOgotCUJmcmVlKGJiKTsKLQlCZnJlZShiZCk7Ci0JQmZyZWUoYnMpOwotCUJmcmVlKGJkMCk7Ci0JQmZyZWUoZGVsdGEpOwotIHJldDoKLQlpZiAoc2UpCi0JCS8qIExJTlRFRCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiAqLwotCQkqc2UgPSAoY2hhciAqKXM7Ci0JcmV0dXJuIHNpZ24gPyAtdmFsdWUocnYpIDogdmFsdWUocnYpOwotfQotCi0gc3RhdGljIGludAotcXVvcmVtCi0jaWZkZWYgS1JfaGVhZGVycwotCShiLCBTKSBCaWdpbnQgKmIsICpTOwotI2Vsc2UKLQkoQmlnaW50ICpiLCBCaWdpbnQgKlMpCi0jZW5kaWYKLXsKLQlpbnQgbjsKLQlMb25nIGJvcnJvdywgeTsKLQlVTG9uZyBjYXJyeSwgcSwgeXM7Ci0JVUxvbmcgKmJ4LCAqYnhlLCAqc3gsICpzeGU7Ci0jaWZkZWYgUGFja18zMgotCUxvbmcgejsKLQlVTG9uZyBzaSwgenM7Ci0jZW5kaWYKLQotCWlmIChiID09IEJJR0lOVF9JTlZBTElEIHx8IFMgPT0gQklHSU5UX0lOVkFMSUQpCi0JCXJldHVybiAwOwotCi0JbiA9IFMtPndkczsKLSNpZmRlZiBERUJVRwotCS8qZGVidWcqLyBpZiAoYi0+d2RzID4gbikKLQkvKmRlYnVnKi8JQnVnKCJvdmVyc2l6ZSBiIGluIHF1b3JlbSIpOwotI2VuZGlmCi0JaWYgKGItPndkcyA8IG4pCi0JCXJldHVybiAwOwotCXN4ID0gUy0+eDsKLQlzeGUgPSBzeCArIC0tbjsKLQlieCA9IGItPng7Ci0JYnhlID0gYnggKyBuOwotCXEgPSAqYnhlIC8gKCpzeGUgKyAxKTsJLyogZW5zdXJlIHEgPD0gdHJ1ZSBxdW90aWVudCAqLwotI2lmZGVmIERFQlVHCi0JLypkZWJ1ZyovIGlmIChxID4gOSkKLQkvKmRlYnVnKi8JQnVnKCJvdmVyc2l6ZWQgcXVvdGllbnQgaW4gcXVvcmVtIik7Ci0jZW5kaWYKLQlpZiAocSkgewotCQlib3Jyb3cgPSAwOwotCQljYXJyeSA9IDA7Ci0JCWRvIHsKLSNpZmRlZiBQYWNrXzMyCi0JCQlzaSA9ICpzeCsrOwotCQkJeXMgPSAoc2kgJiAweGZmZmYpICogcSArIGNhcnJ5OwotCQkJenMgPSAoc2kgPj4gMTYpICogcSArICh5cyA+PiAxNik7Ci0JCQljYXJyeSA9IHpzID4+IDE2OwotCQkJeSA9ICgqYnggJiAweGZmZmYpIC0gKHlzICYgMHhmZmZmKSArIGJvcnJvdzsKLQkJCWJvcnJvdyA9IChVTG9uZyl5ID4+IDE2OwotCQkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKLQkJCXogPSAoKmJ4ID4+IDE2KSAtICh6cyAmIDB4ZmZmZikgKyBib3Jyb3c7Ci0JCQlib3Jyb3cgPSAoVUxvbmcpeiA+PiAxNjsKLQkJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeik7Ci0JCQlTdG9yZWluYyhieCwgeiwgeSk7Ci0jZWxzZQotCQkJeXMgPSAqc3grKyAqIHEgKyBjYXJyeTsKLQkJCWNhcnJ5ID0geXMgPj4gMTY7Ci0JCQl5ID0gKmJ4IC0gKHlzICYgMHhmZmZmKSArIGJvcnJvdzsKLQkJCWJvcnJvdyA9IHkgPj4gMTY7Ci0JCQlTaWduX0V4dGVuZChib3Jyb3csIHkpOwotCQkJKmJ4KysgPSB5ICYgMHhmZmZmOwotI2VuZGlmCi0JCX0KLQkJd2hpbGUoc3ggPD0gc3hlKTsKLQkJaWYgKCEqYnhlKSB7Ci0JCQlieCA9IGItPng7Ci0JCQl3aGlsZSgtLWJ4ZSA+IGJ4ICYmICEqYnhlKQotCQkJCS0tbjsKLQkJCWItPndkcyA9IG47Ci0JCX0KLQl9Ci0JaWYgKGNtcChiLCBTKSA+PSAwKSB7Ci0JCXErKzsKLQkJYm9ycm93ID0gMDsKLQkJY2FycnkgPSAwOwotCQlieCA9IGItPng7Ci0JCXN4ID0gUy0+eDsKLQkJZG8gewotI2lmZGVmIFBhY2tfMzIKLQkJCXNpID0gKnN4Kys7Ci0JCQl5cyA9IChzaSAmIDB4ZmZmZikgKyBjYXJyeTsKLQkJCXpzID0gKHNpID4+IDE2KSArICh5cyA+PiAxNik7Ci0JCQljYXJyeSA9IHpzID4+IDE2OwotCQkJeSA9ICgqYnggJiAweGZmZmYpIC0gKHlzICYgMHhmZmZmKSArIGJvcnJvdzsKLQkJCWJvcnJvdyA9IChVTG9uZyl5ID4+IDE2OwotCQkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKLQkJCXogPSAoKmJ4ID4+IDE2KSAtICh6cyAmIDB4ZmZmZikgKyBib3Jyb3c7Ci0JCQlib3Jyb3cgPSAoVUxvbmcpeiA+PiAxNjsKLQkJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeik7Ci0JCQlTdG9yZWluYyhieCwgeiwgeSk7Ci0jZWxzZQotCQkJeXMgPSAqc3grKyArIGNhcnJ5OwotCQkJY2FycnkgPSB5cyA+PiAxNjsKLQkJCXkgPSAqYnggLSAoeXMgJiAweGZmZmYpICsgYm9ycm93OwotCQkJYm9ycm93ID0geSA+PiAxNjsKLQkJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeSk7Ci0JCQkqYngrKyA9IHkgJiAweGZmZmY7Ci0jZW5kaWYKLQkJfQotCQl3aGlsZShzeCA8PSBzeGUpOwotCQlieCA9IGItPng7Ci0JCWJ4ZSA9IGJ4ICsgbjsKLQkJaWYgKCEqYnhlKSB7Ci0JCQl3aGlsZSgtLWJ4ZSA+IGJ4ICYmICEqYnhlKQotCQkJCS0tbjsKLQkJCWItPndkcyA9IG47Ci0JCX0KLQl9Ci0JcmV0dXJuIHE7Ci19Ci0KLS8qIGZyZWVkdG9hKHMpIG11c3QgYmUgdXNlZCB0byBmcmVlIHZhbHVlcyBzIHJldHVybmVkIGJ5IGR0b2EKLSAqIHdoZW4gTVVMVElQTEVfVEhSRUFEUyBpcyAjZGVmaW5lZC4gIEl0IHNob3VsZCBiZSB1c2VkIGluIGFsbCBjYXNlcywKLSAqIGJ1dCBmb3IgY29uc2lzdGVuY3kgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIGR0b2EsIGl0IGlzIG9wdGlvbmFsCi0gKiB3aGVuIE1VTFRJUExFX1RIUkVBRFMgaXMgbm90IGRlZmluZWQuCi0gKi8KLQotdm9pZAotI2lmZGVmIEtSX2hlYWRlcnMKLWZyZWVkdG9hKHMpIGNoYXIgKnM7Ci0jZWxzZQotZnJlZWR0b2EoY2hhciAqcykKLSNlbmRpZgotewotCWZyZWUocyk7Ci19Ci0KLQotCi0vKiBkdG9hIGZvciBJRUVFIGFyaXRobWV0aWMgKGRtZyk6IGNvbnZlcnQgZG91YmxlIHRvIEFTQ0lJIHN0cmluZy4KLSAqCi0gKiBJbnNwaXJlZCBieSAiSG93IHRvIFByaW50IEZsb2F0aW5nLVBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgYnkKLSAqIEd1eSBMLiBTdGVlbGUsIEpyLiBhbmQgSm9uIEwuIFdoaXRlIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiA5Mi0xMDFdLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKgkxLiBSYXRoZXIgdGhhbiBpdGVyYXRpbmcsIHdlIHVzZSBhIHNpbXBsZSBudW1lcmljIG92ZXJlc3RpbWF0ZQotICoJICAgdG8gZGV0ZXJtaW5lIGsgPSBmbG9vcihsb2cxMChkKSkuICBXZSBzY2FsZSByZWxldmFudAotICoJICAgcXVhbnRpdGllcyB1c2luZyBPKGxvZzIoaykpIHJhdGhlciB0aGFuIE8oaykgbXVsdGlwbGljYXRpb25zLgotICoJMi4gRm9yIHNvbWUgbW9kZXMgPiAyIChjb3JyZXNwb25kaW5nIHRvIGVjdnQgYW5kIGZjdnQpLCB3ZSBkb24ndAotICoJICAgdHJ5IHRvIGdlbmVyYXRlIGRpZ2l0cyBzdHJpY3RseSBsZWZ0IHRvIHJpZ2h0LiAgSW5zdGVhZCwgd2UKLSAqCSAgIGNvbXB1dGUgd2l0aCBmZXdlciBiaXRzIGFuZCBwcm9wYWdhdGUgdGhlIGNhcnJ5IGlmIG5lY2Vzc2FyeQotICoJICAgd2hlbiByb3VuZGluZyB0aGUgZmluYWwgZGlnaXQgdXAuICBUaGlzIGlzIG9mdGVuIGZhc3Rlci4KLSAqCTMuIFVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgaW5wdXQgd2lsbCBiZSByb3VuZGVkIG5lYXJlc3QsCi0gKgkgICBtb2RlIDAgcmVuZGVycyAxZTIzIGFzIDFlMjMgcmF0aGVyIHRoYW4gOS45OTk5OTk5OTk5OTk5OTllMjIuCi0gKgkgICBUaGF0IGlzLCB3ZSBhbGxvdyBlcXVhbGl0eSBpbiBzdG9wcGluZyB0ZXN0cyB3aGVuIHRoZQotICoJICAgcm91bmQtbmVhcmVzdCBydWxlIHdpbGwgZ2l2ZSB0aGUgc2FtZSBmbG9hdGluZy1wb2ludCB2YWx1ZQotICoJICAgYXMgd291bGQgc2F0aXNmYWN0aW9uIG9mIHRoZSBzdG9wcGluZyB0ZXN0IHdpdGggc3RyaWN0Ci0gKgkgICBpbmVxdWFsaXR5LgotICoJNC4gV2UgcmVtb3ZlIGNvbW1vbiBmYWN0b3JzIG9mIHBvd2VycyBvZiAyIGZyb20gcmVsZXZhbnQKLSAqCSAgIHF1YW50aXRpZXMuCi0gKgk1LiBXaGVuIGNvbnZlcnRpbmcgZmxvYXRpbmctcG9pbnQgaW50ZWdlcnMgbGVzcyB0aGFuIDFlMTYsCi0gKgkgICB3ZSB1c2UgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyByYXRoZXIgdGhhbiByZXNvcnRpbmcKLSAqCSAgIHRvIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2Vycy4KLSAqCTYuIFdoZW4gYXNrZWQgdG8gcHJvZHVjZSBmZXdlciB0aGFuIDE1IGRpZ2l0cywgd2UgZmlyc3QgdHJ5Ci0gKgkgICB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljOyB3ZSByZXNvcnQgdG8KLSAqCSAgIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMgb25seSBpZiB3ZSBjYW5ub3QKLSAqCSAgIGd1YXJhbnRlZSB0aGF0IHRoZSBmbG9hdGluZy1wb2ludCBjYWxjdWxhdGlvbiBoYXMgZ2l2ZW4KLSAqCSAgIHRoZSBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHQuICBGb3IgayByZXF1ZXN0ZWQgZGlnaXRzIGFuZAotICoJICAgInVuaWZvcm1seSIgZGlzdHJpYnV0ZWQgaW5wdXQsIHRoZSBwcm9iYWJpbGl0eSBpcwotICoJICAgc29tZXRoaW5nIGxpa2UgMTBeKGstMTUpIHRoYXQgd2UgbXVzdCByZXNvcnQgdG8gdGhlIExvbmcKLSAqCSAgIGNhbGN1bGF0aW9uLgotICovCi0KLV9fTElCQ19ISURERU5fXyAgY2hhciAqCi1fX2R0b2EKLSNpZmRlZiBLUl9oZWFkZXJzCi0JKF9kLCBtb2RlLCBuZGlnaXRzLCBkZWNwdCwgc2lnbiwgcnZlKQotCWRvdWJsZSBfZDsgaW50IG1vZGUsIG5kaWdpdHMsICpkZWNwdCwgKnNpZ247IGNoYXIgKipydmU7Ci0jZWxzZQotCShkb3VibGUgX2QsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLCBjaGFyICoqcnZlKQotI2VuZGlmCi17Ci0gLyoJQXJndW1lbnRzIG5kaWdpdHMsIGRlY3B0LCBzaWduIGFyZSBzaW1pbGFyIHRvIHRob3NlCi0Jb2YgZWN2dCBhbmQgZmN2dDsgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQgZnJvbQotCXRoZSByZXR1cm5lZCBzdHJpbmcuICBJZiBub3QgbnVsbCwgKnJ2ZSBpcyBzZXQgdG8gcG9pbnQKLQl0byB0aGUgZW5kIG9mIHRoZSByZXR1cm4gdmFsdWUuICBJZiBkIGlzICstSW5maW5pdHkgb3IgTmFOLAotCXRoZW4gKmRlY3B0IGlzIHNldCB0byA5OTk5LgotCi0JbW9kZToKLQkJMCA9PT4gc2hvcnRlc3Qgc3RyaW5nIHRoYXQgeWllbGRzIGQgd2hlbiByZWFkIGluCi0JCQlhbmQgcm91bmRlZCB0byBuZWFyZXN0LgotCQkxID09PiBsaWtlIDAsIGJ1dCB3aXRoIFN0ZWVsZSAmIFdoaXRlIHN0b3BwaW5nIHJ1bGU7Ci0JCQllLmcuIHdpdGggSUVFRSBQNzU0IGFyaXRobWV0aWMgLCBtb2RlIDAgZ2l2ZXMKLQkJCTFlMjMgd2hlcmVhcyBtb2RlIDEgZ2l2ZXMgOS45OTk5OTk5OTk5OTk5OTllMjIuCi0JCTIgPT0+IG1heCgxLG5kaWdpdHMpIHNpZ25pZmljYW50IGRpZ2l0cy4gIFRoaXMgZ2l2ZXMgYQotCQkJcmV0dXJuIHZhbHVlIHNpbWlsYXIgdG8gdGhhdCBvZiBlY3Z0LCBleGNlcHQKLQkJCXRoYXQgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQuCi0JCTMgPT0+IHRocm91Z2ggbmRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50LiAgVGhpcwotCQkJZ2l2ZXMgYSByZXR1cm4gdmFsdWUgc2ltaWxhciB0byB0aGF0IGZyb20gZmN2dCwKLQkJCWV4Y2VwdCB0aGF0IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBwcmVzc2VkLCBhbmQKLQkJCW5kaWdpdHMgY2FuIGJlIG5lZ2F0aXZlLgotCQk0LTkgc2hvdWxkIGdpdmUgdGhlIHNhbWUgcmV0dXJuIHZhbHVlcyBhcyAyLTMsIGkuZS4sCi0JCQk0IDw9IG1vZGUgPD0gOSA9PT4gc2FtZSByZXR1cm4gYXMgbW9kZQotCQkJMiArIChtb2RlICYgMSkuICBUaGVzZSBtb2RlcyBhcmUgbWFpbmx5IGZvcgotCQkJZGVidWdnaW5nOyBvZnRlbiB0aGV5IHJ1biBzbG93ZXIgYnV0IHNvbWV0aW1lcwotCQkJZmFzdGVyIHRoYW4gbW9kZXMgMi0zLgotCQk0LDUsOCw5ID09PiBsZWZ0LXRvLXJpZ2h0IGRpZ2l0IGdlbmVyYXRpb24uCi0JCTYtOSA9PT4gZG9uJ3QgdHJ5IGZhc3QgZmxvYXRpbmctcG9pbnQgZXN0aW1hdGUKLQkJCShpZiBhcHBsaWNhYmxlKS4KLQotCQlWYWx1ZXMgb2YgbW9kZSBvdGhlciB0aGFuIDAtOSBhcmUgdHJlYXRlZCBhcyBtb2RlIDAuCi0KLQkJU3VmZmljaWVudCBzcGFjZSBpcyBhbGxvY2F0ZWQgdG8gdGhlIHJldHVybiB2YWx1ZQotCQl0byBob2xkIHRoZSBzdXBwcmVzc2VkIHRyYWlsaW5nIHplcm9zLgotCSovCi0KLQlpbnQgYmJpdHMsIGIyLCBiNSwgYmUsIGRpZywgaSwgaWVwcywgaWxpbTAsCi0JCWosIGpqMSwgaywgazAsIGtfY2hlY2ssIGxlZnRyaWdodCwgbTIsIG01LCBzMiwgczUsCi0JCXRyeV9xdWljazsKLQlpbnQgaWxpbSA9IDAsIGlsaW0xID0gMCwgc3BlY19jYXNlID0gMDsJLyogcGFjaWZ5IGdjYyAqLwotCUxvbmcgTDsKLSNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdwotCWludCBkZW5vcm07Ci0JVUxvbmcgeDsKLSNlbmRpZgotCUJpZ2ludCAqYiwgKmIxLCAqZGVsdGEsICptaGksICpTOwotCUJpZ2ludCAqbWxvID0gTlVMTDsgLyogcGFjaWZ5IGdjYyAqLwotCWRvdWJsZSBkczsKLQljaGFyICpzLCAqczA7Ci0JQmlnaW50ICpyZXN1bHQgPSBOVUxMOwotCWludCByZXN1bHRfayA9IDA7Ci0JX2RvdWJsZSBkLCBkMiwgZXBzOwotCi0JdmFsdWUoZCkgPSBfZDsKLQotCWlmICh3b3JkMChkKSAmIFNpZ25fYml0KSB7Ci0JCS8qIHNldCBzaWduIGZvciBldmVyeXRoaW5nLCBpbmNsdWRpbmcgMCdzIGFuZCBOYU5zICovCi0JCSpzaWduID0gMTsKLQkJd29yZDAoZCkgJj0gflNpZ25fYml0OwkvKiBjbGVhciBzaWduIGJpdCAqLwotCX0KLQllbHNlCi0JCSpzaWduID0gMDsKLQotI2lmIGRlZmluZWQoSUVFRV9Bcml0aCkgKyBkZWZpbmVkKFZBWCkKLSNpZmRlZiBJRUVFX0FyaXRoCi0JaWYgKCh3b3JkMChkKSAmIEV4cF9tYXNrKSA9PSBFeHBfbWFzaykKLSNlbHNlCi0JaWYgKHdvcmQwKGQpICA9PSAweDgwMDApCi0jZW5kaWYKLQl7Ci0JCS8qIEluZmluaXR5IG9yIE5hTiAqLwotCQkqZGVjcHQgPSA5OTk5OwotCQlzID0KLSNpZmRlZiBJRUVFX0FyaXRoCi0JCQkhd29yZDEoZCkgJiYgISh3b3JkMChkKSAmIDB4ZmZmZmYpID8gIkluZmluaXR5IiA6Ci0jZW5kaWYKLQkJCQkiTmFOIjsKLQkJcmVzdWx0ID0gQmFsbG9jKHN0cmxlbihzKSsxKTsKLQkJaWYgKHJlc3VsdCA9PSBCSUdJTlRfSU5WQUxJRCkKLQkJCXJldHVybiBOVUxMOwotCQlzMCA9IChjaGFyICopKHZvaWQgKilyZXN1bHQ7Ci0JCXN0cmNweShzMCwgcyk7Ci0JCWlmIChydmUpCi0JCQkqcnZlID0KLSNpZmRlZiBJRUVFX0FyaXRoCi0JCQkJczBbM10gPyBzMCArIDggOgotI2VuZGlmCi0JCQkJczAgKyAzOwotCQlyZXR1cm4gczA7Ci0JfQotI2VuZGlmCi0jaWZkZWYgSUJNCi0JdmFsdWUoZCkgKz0gMDsgLyogbm9ybWFsaXplICovCi0jZW5kaWYKLQlpZiAoIXZhbHVlKGQpKSB7Ci0JCSpkZWNwdCA9IDE7Ci0JCXJlc3VsdCA9IEJhbGxvYygyKTsKLQkJaWYgKHJlc3VsdCA9PSBCSUdJTlRfSU5WQUxJRCkKLQkJCXJldHVybiBOVUxMOwotCQlzMCA9IChjaGFyICopKHZvaWQgKilyZXN1bHQ7Ci0JCXN0cmNweShzMCwgIjAiKTsKLQkJaWYgKHJ2ZSkKLQkJCSpydmUgPSBzMCArIDE7Ci0JCXJldHVybiBzMDsKLQl9Ci0KLQliID0gZDJiKHZhbHVlKGQpLCAmYmUsICZiYml0cyk7Ci0jaWZkZWYgU3VkZGVuX1VuZGVyZmxvdwotCWkgPSAoaW50KSh3b3JkMChkKSA+PiBFeHBfc2hpZnQxICYgKEV4cF9tYXNrPj5FeHBfc2hpZnQxKSk7Ci0jZWxzZQotCWlmICgoaSA9IChpbnQpKHdvcmQwKGQpID4+IEV4cF9zaGlmdDEgJiAoRXhwX21hc2s+PkV4cF9zaGlmdDEpKSkgIT0gMCkgewotI2VuZGlmCi0JCXZhbHVlKGQyKSA9IHZhbHVlKGQpOwotCQl3b3JkMChkMikgJj0gRnJhY19tYXNrMTsKLQkJd29yZDAoZDIpIHw9IEV4cF8xMTsKLSNpZmRlZiBJQk0KLQkJaWYgKGogPSAxMSAtIGhpMGJpdHMod29yZDAoZDIpICYgRnJhY19tYXNrKSkKLQkJCXZhbHVlKGQyKSAvPSAxIDw8IGo7Ci0jZW5kaWYKLQotCQkvKiBsb2coeCkJfj1+IGxvZygxLjUpICsgKHgtMS41KS8xLjUKLQkJICogbG9nMTAoeCkJID0gIGxvZyh4KSAvIGxvZygxMCkKLQkJICoJCX49fiBsb2coMS41KS9sb2coMTApICsgKHgtMS41KS8oMS41KmxvZygxMCkpCi0JCSAqIGxvZzEwKGQpID0gKGktQmlhcykqbG9nKDIpL2xvZygxMCkgKyBsb2cxMChkMikKLQkJICoKLQkJICogVGhpcyBzdWdnZXN0cyBjb21wdXRpbmcgYW4gYXBwcm94aW1hdGlvbiBrIHRvIGxvZzEwKGQpIGJ5Ci0JCSAqCi0JCSAqIGsgPSAoaSAtIEJpYXMpKjAuMzAxMDI5OTk1NjYzOTgxCi0JCSAqCSsgKCAoZDItMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkxMjU5MDU1NjgxICk7Ci0JCSAqCi0JCSAqIFdlIHdhbnQgayB0byBiZSB0b28gbGFyZ2UgcmF0aGVyIHRoYW4gdG9vIHNtYWxsLgotCQkgKiBUaGUgZXJyb3IgaW4gdGhlIGZpcnN0LW9yZGVyIFRheWxvciBzZXJpZXMgYXBwcm94aW1hdGlvbgotCQkgKiBpcyBpbiBvdXIgZmF2b3IsIHNvIHdlIGp1c3Qgcm91bmQgdXAgdGhlIGNvbnN0YW50IGVub3VnaAotCQkgKiB0byBjb21wZW5zYXRlIGZvciBhbnkgZXJyb3IgaW4gdGhlIG11bHRpcGxpY2F0aW9uIG9mCi0JCSAqIChpIC0gQmlhcykgYnkgMC4zMDEwMjk5OTU2NjM5ODE7IHNpbmNlIHxpIC0gQmlhc3wgPD0gMTA3NywKLQkJICogYW5kIDEwNzcgKiAwLjMwMTAzICogMl4tNTIgfj1+IDcuMmUtMTQsCi0JCSAqIGFkZGluZyAxZS0xMyB0byB0aGUgY29uc3RhbnQgdGVybSBtb3JlIHRoYW4gc3VmZmljZXMuCi0JCSAqIEhlbmNlIHdlIGFkanVzdCB0aGUgY29uc3RhbnQgdGVybSB0byAwLjE3NjA5MTI1OTA1NTguCi0JCSAqIChXZSBjb3VsZCBnZXQgYSBtb3JlIGFjY3VyYXRlIGsgYnkgaW52b2tpbmcgbG9nMTAsCi0JCSAqICBidXQgdGhpcyBpcyBwcm9iYWJseSBub3Qgd29ydGh3aGlsZS4pCi0JCSAqLwotCi0JCWkgLT0gQmlhczsKLSNpZmRlZiBJQk0KLQkJaSA8PD0gMjsKLQkJaSArPSBqOwotI2VuZGlmCi0jaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKLQkJZGVub3JtID0gMDsKLQl9Ci0JZWxzZSB7Ci0JCS8qIGQgaXMgZGVub3JtYWxpemVkICovCi0KLQkJaSA9IGJiaXRzICsgYmUgKyAoQmlhcyArIChQLTEpIC0gMSk7Ci0JCXggPSBpID4gMzIgID8gd29yZDAoZCkgPDwgKDY0IC0gaSkgfCB3b3JkMShkKSA+PiAoaSAtIDMyKQotCQkJICAgIDogd29yZDEoZCkgPDwgKDMyIC0gaSk7Ci0JCXZhbHVlKGQyKSA9IHg7Ci0JCXdvcmQwKGQyKSAtPSAzMSpFeHBfbXNrMTsgLyogYWRqdXN0IGV4cG9uZW50ICovCi0JCWkgLT0gKEJpYXMgKyAoUC0xKSAtIDEpICsgMTsKLQkJZGVub3JtID0gMTsKLQl9Ci0jZW5kaWYKLQlkcyA9ICh2YWx1ZShkMiktMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkxMjU5MDU1OCArCi0JICAgIGkqMC4zMDEwMjk5OTU2NjM5ODE7Ci0JayA9IChpbnQpZHM7Ci0JaWYgKGRzIDwgMC4gJiYgZHMgIT0gaykKLQkJay0tOwkvKiB3YW50IGsgPSBmbG9vcihkcykgKi8KLQlrX2NoZWNrID0gMTsKLQlpZiAoayA+PSAwICYmIGsgPD0gVGVuX3BtYXgpIHsKLQkJaWYgKHZhbHVlKGQpIDwgdGVuc1trXSkKLQkJCWstLTsKLQkJa19jaGVjayA9IDA7Ci0JfQotCWogPSBiYml0cyAtIGkgLSAxOwotCWlmIChqID49IDApIHsKLQkJYjIgPSAwOwotCQlzMiA9IGo7Ci0JfQotCWVsc2UgewotCQliMiA9IC1qOwotCQlzMiA9IDA7Ci0JfQotCWlmIChrID49IDApIHsKLQkJYjUgPSAwOwotCQlzNSA9IGs7Ci0JCXMyICs9IGs7Ci0JfQotCWVsc2UgewotCQliMiAtPSBrOwotCQliNSA9IC1rOwotCQlzNSA9IDA7Ci0JfQotCWlmIChtb2RlIDwgMCB8fCBtb2RlID4gOSkKLQkJbW9kZSA9IDA7Ci0JdHJ5X3F1aWNrID0gMTsKLQlpZiAobW9kZSA+IDUpIHsKLQkJbW9kZSAtPSA0OwotCQl0cnlfcXVpY2sgPSAwOwotCX0KLQlsZWZ0cmlnaHQgPSAxOwotCXN3aXRjaChtb2RlKSB7Ci0JCWNhc2UgMDoKLQkJY2FzZSAxOgotCQkJaWxpbSA9IGlsaW0xID0gLTE7Ci0JCQlpID0gMTg7Ci0JCQluZGlnaXRzID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlsZWZ0cmlnaHQgPSAwOwotCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJY2FzZSA0OgotCQkJaWYgKG5kaWdpdHMgPD0gMCkKLQkJCQluZGlnaXRzID0gMTsKLQkJCWlsaW0gPSBpbGltMSA9IGkgPSBuZGlnaXRzOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWxlZnRyaWdodCA9IDA7Ci0JCQkvKiBGQUxMVEhST1VHSCAqLwotCQljYXNlIDU6Ci0JCQlpID0gbmRpZ2l0cyArIGsgKyAxOwotCQkJaWxpbSA9IGk7Ci0JCQlpbGltMSA9IGkgLSAxOwotCQkJaWYgKGkgPD0gMCkKLQkJCQlpID0gMTsKLQl9Ci0JaiA9IHNpemVvZihVTG9uZyk7Ci0gICAgICAgIGZvcihyZXN1bHRfayA9IDA7IChpbnQpKHNpemVvZihCaWdpbnQpIC0gc2l6ZW9mKFVMb25nKSkgKyBqIDw9IGk7Ci0JCWogPDw9IDEpIHJlc3VsdF9rKys7Ci0gICAgICAgIC8vIHRoaXMgaXMgcmVhbGx5IGEgdWdseSBoYWNrLCB0aGUgY29kZSB1c2VzIEJhbGxvYwotICAgICAgICAvLyBpbnN0ZWFkIG9mIG1hbGxvYywgYnV0IGNhc3RzIHRoZSByZXN1bHQgaW50byBhIGNoYXIqCi0gICAgICAgIC8vIGl0IHNlZW1zIHRoZSBvbmx5IHJlYXNvbiB0byBkbyB0aGF0IGlzIGR1ZSB0byB0aGUKLSAgICAgICAgLy8gY29tcGxpY2F0ZWQgd2F5IHRoZSBibG9jayBzaXplIG5lZWQgdG8gYmUgY29tcHV0ZWQKLSAgICAgICAgLy8gYnV1dXJrLi4uLgotCXJlc3VsdCA9IEJhbGxvYyhyZXN1bHRfayk7Ci0JaWYgKHJlc3VsdCA9PSBCSUdJTlRfSU5WQUxJRCkgewotCQlCZnJlZShiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXMgPSBzMCA9IChjaGFyICopKHZvaWQgKilyZXN1bHQ7Ci0KLQlpZiAoaWxpbSA+PSAwICYmIGlsaW0gPD0gUXVpY2tfbWF4ICYmIHRyeV9xdWljaykgewotCi0JCS8qIFRyeSB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLiAqLwotCi0JCWkgPSAwOwotCQl2YWx1ZShkMikgPSB2YWx1ZShkKTsKLQkJazAgPSBrOwotCQlpbGltMCA9IGlsaW07Ci0JCWllcHMgPSAyOyAvKiBjb25zZXJ2YXRpdmUgKi8KLQkJaWYgKGsgPiAwKSB7Ci0JCQlkcyA9IHRlbnNbayYweGZdOwotCQkJaiA9ICh1bnNpZ25lZCBpbnQpayA+PiA0OwotCQkJaWYgKGogJiBCbGV0Y2gpIHsKLQkJCQkvKiBwcmV2ZW50IG92ZXJmbG93cyAqLwotCQkJCWogJj0gQmxldGNoIC0gMTsKLQkJCQl2YWx1ZShkKSAvPSBiaWd0ZW5zW25fYmlndGVucy0xXTsKLQkJCQlpZXBzKys7Ci0JCQkJfQotCQkJZm9yKDsgajsgaiA9ICh1bnNpZ25lZCBpbnQpaiA+PiAxLCBpKyspCi0JCQkJaWYgKGogJiAxKSB7Ci0JCQkJCWllcHMrKzsKLQkJCQkJZHMgKj0gYmlndGVuc1tpXTsKLQkJCQkJfQotCQkJdmFsdWUoZCkgLz0gZHM7Ci0JCX0KLQkJZWxzZSBpZiAoKGpqMSA9IC1rKSAhPSAwKSB7Ci0JCQl2YWx1ZShkKSAqPSB0ZW5zW2pqMSAmIDB4Zl07Ci0JCQlmb3IoaiA9ICh1bnNpZ25lZCBpbnQpamoxID4+IDQ7IGo7Ci0JCQkgICAgaiA9ICh1bnNpZ25lZCBpbnQpaiA+PiAxLCBpKyspCi0JCQkJaWYgKGogJiAxKSB7Ci0JCQkJCWllcHMrKzsKLQkJCQkJdmFsdWUoZCkgKj0gYmlndGVuc1tpXTsKLQkJCQl9Ci0JCX0KLQkJaWYgKGtfY2hlY2sgJiYgdmFsdWUoZCkgPCAxLiAmJiBpbGltID4gMCkgewotCQkJaWYgKGlsaW0xIDw9IDApCi0JCQkJZ290byBmYXN0X2ZhaWxlZDsKLQkJCWlsaW0gPSBpbGltMTsKLQkJCWstLTsKLQkJCXZhbHVlKGQpICo9IDEwLjsKLQkJCWllcHMrKzsKLQkJfQotCQl2YWx1ZShlcHMpID0gaWVwcyp2YWx1ZShkKSArIDcuOwotCQl3b3JkMChlcHMpIC09IChQLTEpKkV4cF9tc2sxOwotCQlpZiAoaWxpbSA9PSAwKSB7Ci0JCQlTID0gbWhpID0gMDsKLQkJCXZhbHVlKGQpIC09IDUuOwotCQkJaWYgKHZhbHVlKGQpID4gdmFsdWUoZXBzKSkKLQkJCQlnb3RvIG9uZV9kaWdpdDsKLQkJCWlmICh2YWx1ZShkKSA8IC12YWx1ZShlcHMpKQotCQkJCWdvdG8gbm9fZGlnaXRzOwotCQkJZ290byBmYXN0X2ZhaWxlZDsKLQkJfQotI2lmbmRlZiBOb19sZWZ0cmlnaHQKLQkJaWYgKGxlZnRyaWdodCkgewotCQkJLyogVXNlIFN0ZWVsZSAmIFdoaXRlIG1ldGhvZCBvZiBvbmx5Ci0JCQkgKiBnZW5lcmF0aW5nIGRpZ2l0cyBuZWVkZWQuCi0JCQkgKi8KLQkJCXZhbHVlKGVwcykgPSAwLjUvdGVuc1tpbGltLTFdIC0gdmFsdWUoZXBzKTsKLQkJCWZvcihpID0gMDs7KSB7Ci0JCQkJTCA9IHZhbHVlKGQpOwotCQkJCXZhbHVlKGQpIC09IEw7Ci0JCQkJKnMrKyA9ICcwJyArIChpbnQpTDsKLQkJCQlpZiAodmFsdWUoZCkgPCB2YWx1ZShlcHMpKQotCQkJCQlnb3RvIHJldDE7Ci0JCQkJaWYgKDEuIC0gdmFsdWUoZCkgPCB2YWx1ZShlcHMpKQotCQkJCQlnb3RvIGJ1bXBfdXA7Ci0JCQkJaWYgKCsraSA+PSBpbGltKQotCQkJCQlicmVhazsKLQkJCQl2YWx1ZShlcHMpICo9IDEwLjsKLQkJCQl2YWx1ZShkKSAqPSAxMC47Ci0JCQkJfQotCQl9Ci0JCWVsc2UgewotI2VuZGlmCi0JCQkvKiBHZW5lcmF0ZSBpbGltIGRpZ2l0cywgdGhlbiBmaXggdGhlbSB1cC4gKi8KLQkJCXZhbHVlKGVwcykgKj0gdGVuc1tpbGltLTFdOwotCQkJZm9yKGkgPSAxOzsgaSsrLCB2YWx1ZShkKSAqPSAxMC4pIHsKLQkJCQlMID0gdmFsdWUoZCk7Ci0JCQkJdmFsdWUoZCkgLT0gTDsKLQkJCQkqcysrID0gJzAnICsgKGludClMOwotCQkJCWlmIChpID09IGlsaW0pIHsKLQkJCQkJaWYgKHZhbHVlKGQpID4gMC41ICsgdmFsdWUoZXBzKSkKLQkJCQkJCWdvdG8gYnVtcF91cDsKLQkJCQkJZWxzZSBpZiAodmFsdWUoZCkgPCAwLjUgLSB2YWx1ZShlcHMpKSB7Ci0JCQkJCQl3aGlsZSgqLS1zID09ICcwJyk7Ci0JCQkJCQlzKys7Ci0JCQkJCQlnb3RvIHJldDE7Ci0JCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLSNpZm5kZWYgTm9fbGVmdHJpZ2h0Ci0JCX0KLSNlbmRpZgotIGZhc3RfZmFpbGVkOgotCQlzID0gczA7Ci0JCXZhbHVlKGQpID0gdmFsdWUoZDIpOwotCQlrID0gazA7Ci0JCWlsaW0gPSBpbGltMDsKLQl9Ci0KLQkvKiBEbyB3ZSBoYXZlIGEgInNtYWxsIiBpbnRlZ2VyPyAqLwotCi0JaWYgKGJlID49IDAgJiYgayA8PSBJbnRfbWF4KSB7Ci0JCS8qIFllcy4gKi8KLQkJZHMgPSB0ZW5zW2tdOwotCQlpZiAobmRpZ2l0cyA8IDAgJiYgaWxpbSA8PSAwKSB7Ci0JCQlTID0gbWhpID0gMDsKLQkJCWlmIChpbGltIDwgMCB8fCB2YWx1ZShkKSA8PSA1KmRzKQotCQkJCWdvdG8gbm9fZGlnaXRzOwotCQkJZ290byBvbmVfZGlnaXQ7Ci0JCX0KLQkJZm9yKGkgPSAxOzsgaSsrKSB7Ci0JCQlMID0gdmFsdWUoZCkgLyBkczsKLQkJCXZhbHVlKGQpIC09IEwqZHM7Ci0jaWZkZWYgQ2hlY2tfRkxUX1JPVU5EUwotCQkJLyogSWYgRkxUX1JPVU5EUyA9PSAyLCBMIHdpbGwgdXN1YWxseSBiZSBoaWdoIGJ5IDEgKi8KLQkJCWlmICh2YWx1ZShkKSA8IDApIHsKLQkJCQlMLS07Ci0JCQkJdmFsdWUoZCkgKz0gZHM7Ci0JCQl9Ci0jZW5kaWYKLQkJCSpzKysgPSAnMCcgKyAoaW50KUw7Ci0JCQlpZiAoaSA9PSBpbGltKSB7Ci0JCQkJdmFsdWUoZCkgKz0gdmFsdWUoZCk7Ci0JCQkJaWYgKHZhbHVlKGQpID4gZHMgfHwgKHZhbHVlKGQpID09IGRzICYmIEwgJiAxKSkgewotIGJ1bXBfdXA6Ci0JCQkJCXdoaWxlKCotLXMgPT0gJzknKQotCQkJCQkJaWYgKHMgPT0gczApIHsKLQkJCQkJCQlrKys7Ci0JCQkJCQkJKnMgPSAnMCc7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCSsrKnMrKzsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoISh2YWx1ZShkKSAqPSAxMC4pKQotCQkJCWJyZWFrOwotCQkJfQotCQlnb3RvIHJldDE7Ci0JfQotCi0JbTIgPSBiMjsKLQltNSA9IGI1OwotCW1oaSA9IG1sbyA9IDA7Ci0JaWYgKGxlZnRyaWdodCkgewotCQlpZiAobW9kZSA8IDIpIHsKLQkJCWkgPQotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JCQkJZGVub3JtID8gYmUgKyAoQmlhcyArIChQLTEpIC0gMSArIDEpIDoKLSNlbmRpZgotI2lmZGVmIElCTQotCQkJCTEgKyA0KlAgLSAzIC0gYmJpdHMgKyAoKGJiaXRzICsgYmUgLSAxKSAmIDMpOwotI2Vsc2UKLQkJCQkxICsgUCAtIGJiaXRzOwotI2VuZGlmCi0JCX0KLQkJZWxzZSB7Ci0JCQlqID0gaWxpbSAtIDE7Ci0JCQlpZiAobTUgPj0gaikKLQkJCQltNSAtPSBqOwotCQkJZWxzZSB7Ci0JCQkJczUgKz0gaiAtPSBtNTsKLQkJCQliNSArPSBqOwotCQkJCW01ID0gMDsKLQkJCX0KLQkJCWlmICgoaSA9IGlsaW0pIDwgMCkgewotCQkJCW0yIC09IGk7Ci0JCQkJaSA9IDA7Ci0JCQl9Ci0JCX0KLQkJYjIgKz0gaTsKLQkJczIgKz0gaTsKLQkJbWhpID0gaTJiKDEpOwotCX0KLQlpZiAobTIgPiAwICYmIHMyID4gMCkgewotCQlpID0gbTIgPCBzMiA/IG0yIDogczI7Ci0JCWIyIC09IGk7Ci0JCW0yIC09IGk7Ci0JCXMyIC09IGk7Ci0JfQotCWlmIChiNSA+IDApIHsKLQkJaWYgKGxlZnRyaWdodCkgewotCQkJaWYgKG01ID4gMCkgewotCQkJCW1oaSA9IHBvdzVtdWx0KG1oaSwgbTUpOwotCQkJCWIxID0gbXVsdChtaGksIGIpOwotCQkJCUJmcmVlKGIpOwotCQkJCWIgPSBiMTsKLQkJCX0KLQkJCWlmICgoaiA9IGI1IC0gbTUpICE9IDApCi0JCQkJYiA9IHBvdzVtdWx0KGIsIGopOwotCQkJfQotCQllbHNlCi0JCQliID0gcG93NW11bHQoYiwgYjUpOwotCX0KLQlTID0gaTJiKDEpOwotCWlmIChzNSA+IDApCi0JCVMgPSBwb3c1bXVsdChTLCBzNSk7Ci0KLQkvKiBDaGVjayBmb3Igc3BlY2lhbCBjYXNlIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4gKi8KLQotCWlmIChtb2RlIDwgMikgewotCQlpZiAoIXdvcmQxKGQpICYmICEod29yZDAoZCkgJiBCbmRyeV9tYXNrKQotI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93Ci0JCSAmJiB3b3JkMChkKSAmIEV4cF9tYXNrCi0jZW5kaWYKLQkJCQkpIHsKLQkJCS8qIFRoZSBzcGVjaWFsIGNhc2UgKi8KLQkJCWIyICs9IExvZzJQOwotCQkJczIgKz0gTG9nMlA7Ci0JCQlzcGVjX2Nhc2UgPSAxOwotCQkJfQotCQllbHNlCi0JCQlzcGVjX2Nhc2UgPSAwOwotCX0KLQotCS8qIEFycmFuZ2UgZm9yIGNvbnZlbmllbnQgY29tcHV0YXRpb24gb2YgcXVvdGllbnRzOgotCSAqIHNoaWZ0IGxlZnQgaWYgbmVjZXNzYXJ5IHNvIGRpdmlzb3IgaGFzIDQgbGVhZGluZyAwIGJpdHMuCi0JICoKLQkgKiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNvbXB1dGUgbGVhZGluZyAyOCBiaXRzIG9mIFMgb25jZQotCSAqIGFuZCBmb3IgYWxsIGFuZCBwYXNzIHRoZW0gYW5kIGEgc2hpZnQgdG8gcXVvcmVtLCBzbyBpdAotCSAqIGNhbiBkbyBzaGlmdHMgYW5kIG9ycyB0byBjb21wdXRlIHRoZSBudW1lcmF0b3IgZm9yIHEuCi0JICovCi0JaWYgKFMgPT0gQklHSU5UX0lOVkFMSUQpIHsKLQkJaSA9IDA7Ci0JfSBlbHNlIHsKLSNpZmRlZiBQYWNrXzMyCi0JCWlmICgoaSA9ICgoczUgPyAzMiAtIGhpMGJpdHMoUy0+eFtTLT53ZHMtMV0pIDogMSkgKyBzMikgJiAweDFmKSAhPSAwKQotCQkJaSA9IDMyIC0gaTsKLSNlbHNlCi0JCWlmIChpID0gKChzNSA/IDMyIC0gaGkwYml0cyhTLT54W1MtPndkcy0xXSkgOiAxKSArIHMyKSAmIDB4ZikKLQkJCWkgPSAxNiAtIGk7Ci0jZW5kaWYKLQl9Ci0KLQlpZiAoaSA+IDQpIHsKLQkJaSAtPSA0OwotCQliMiArPSBpOwotCQltMiArPSBpOwotCQlzMiArPSBpOwotCX0KLQllbHNlIGlmIChpIDwgNCkgewotCQlpICs9IDI4OwotCQliMiArPSBpOwotCQltMiArPSBpOwotCQlzMiArPSBpOwotCX0KLQlpZiAoYjIgPiAwKQotCQliID0gbHNoaWZ0KGIsIGIyKTsKLQlpZiAoczIgPiAwKQotCQlTID0gbHNoaWZ0KFMsIHMyKTsKLQlpZiAoa19jaGVjaykgewotCQlpZiAoY21wKGIsUykgPCAwKSB7Ci0JCQlrLS07Ci0JCQliID0gbXVsdGFkZChiLCAxMCwgMCk7CS8qIHdlIGJvdGNoZWQgdGhlIGsgZXN0aW1hdGUgKi8KLQkJCWlmIChsZWZ0cmlnaHQpCi0JCQkJbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKLQkJCWlsaW0gPSBpbGltMTsKLQkJCX0KLQl9Ci0JaWYgKGlsaW0gPD0gMCAmJiBtb2RlID4gMikgewotCQlpZiAoaWxpbSA8IDAgfHwgY21wKGIsUyA9IG11bHRhZGQoUyw1LDApKSA8PSAwKSB7Ci0JCQkvKiBubyBkaWdpdHMsIGZjdnQgc3R5bGUgKi8KLSBub19kaWdpdHM6Ci0JCQlrID0gLTEgLSBuZGlnaXRzOwotCQkJZ290byByZXQ7Ci0JCX0KLSBvbmVfZGlnaXQ6Ci0JCSpzKysgPSAnMSc7Ci0JCWsrKzsKLQkJZ290byByZXQ7Ci0JfQotCWlmIChsZWZ0cmlnaHQpIHsKLQkJaWYgKG0yID4gMCkKLQkJCW1oaSA9IGxzaGlmdChtaGksIG0yKTsKLQotCQkvKiBDb21wdXRlIG1sbyAtLSBjaGVjayBmb3Igc3BlY2lhbCBjYXNlCi0JCSAqIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4KLQkJICovCi0KLQkJbWxvID0gbWhpOwotCQlpZiAoc3BlY19jYXNlKSB7Ci0JCQltaGkgPSBCYWxsb2MobWhpLT5rKTsKLQkJCUJjb3B5KG1oaSwgbWxvKTsKLQkJCW1oaSA9IGxzaGlmdChtaGksIExvZzJQKTsKLQkJfQotCi0JCWZvcihpID0gMTs7aSsrKSB7Ci0JCQlkaWcgPSBxdW9yZW0oYixTKSArICcwJzsKLQkJCS8qIERvIHdlIHlldCBoYXZlIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHN0cmluZwotCQkJICogdGhhdCB3aWxsIHJvdW5kIHRvIGQ/Ci0JCQkgKi8KLQkJCWogPSBjbXAoYiwgbWxvKTsKLQkJCWRlbHRhID0gZGlmZihTLCBtaGkpOwotCQkJamoxID0gZGVsdGEtPnNpZ24gPyAxIDogY21wKGIsIGRlbHRhKTsKLQkJCUJmcmVlKGRlbHRhKTsKLSNpZm5kZWYgUk9VTkRfQklBU0VECi0JCQlpZiAoamoxID09IDAgJiYgIW1vZGUgJiYgISh3b3JkMShkKSAmIDEpKSB7Ci0JCQkJaWYgKGRpZyA9PSAnOScpCi0JCQkJCWdvdG8gcm91bmRfOV91cDsKLQkJCQlpZiAoaiA+IDApCi0JCQkJCWRpZysrOwotCQkJCSpzKysgPSBkaWc7Ci0JCQkJZ290byByZXQ7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlmIChqIDwgMCB8fCAoaiA9PSAwICYmICFtb2RlCi0jaWZuZGVmIFJPVU5EX0JJQVNFRAotCQkJCQkJCSYmICEod29yZDEoZCkgJiAxKQotI2VuZGlmCi0JCQkJCSkpIHsKLQkJCQlpZiAoamoxID4gMCkgewotCQkJCQliID0gbHNoaWZ0KGIsIDEpOwotCQkJCQlqajEgPSBjbXAoYiwgUyk7Ci0JCQkJCWlmICgoamoxID4gMCB8fCAoamoxID09IDAgJiYgZGlnICYgMSkpCi0JCQkJCSYmIGRpZysrID09ICc5JykKLQkJCQkJCWdvdG8gcm91bmRfOV91cDsKLQkJCQkJfQotCQkJCSpzKysgPSBkaWc7Ci0JCQkJZ290byByZXQ7Ci0JCQl9Ci0JCQlpZiAoamoxID4gMCkgewotCQkJCWlmIChkaWcgPT0gJzknKSB7IC8qIHBvc3NpYmxlIGlmIGkgPT0gMSAqLwotIHJvdW5kXzlfdXA6Ci0JCQkJCSpzKysgPSAnOSc7Ci0JCQkJCWdvdG8gcm91bmRvZmY7Ci0JCQkJCX0KLQkJCQkqcysrID0gZGlnICsgMTsKLQkJCQlnb3RvIHJldDsKLQkJCX0KLQkJCSpzKysgPSBkaWc7Ci0JCQlpZiAoaSA9PSBpbGltKQotCQkJCWJyZWFrOwotCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOwotCQkJaWYgKG1sbyA9PSBtaGkpCi0JCQkJbWxvID0gbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKLQkJCWVsc2UgewotCQkJCW1sbyA9IG11bHRhZGQobWxvLCAxMCwgMCk7Ci0JCQkJbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKLQkJCX0KLQkJfQotCX0KLQllbHNlCi0JCWZvcihpID0gMTs7IGkrKykgewotCQkJKnMrKyA9IGRpZyA9IHF1b3JlbShiLFMpICsgJzAnOwotCQkJaWYgKGkgPj0gaWxpbSkKLQkJCQlicmVhazsKLQkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsKLQkJfQotCi0JLyogUm91bmQgb2ZmIGxhc3QgZGlnaXQgKi8KLQotCWIgPSBsc2hpZnQoYiwgMSk7Ci0JaiA9IGNtcChiLCBTKTsKLQlpZiAoaiA+IDAgfHwgKGogPT0gMCAmJiBkaWcgJiAxKSkgewotIHJvdW5kb2ZmOgotCQl3aGlsZSgqLS1zID09ICc5JykKLQkJCWlmIChzID09IHMwKSB7Ci0JCQkJaysrOwotCQkJCSpzKysgPSAnMSc7Ci0JCQkJZ290byByZXQ7Ci0JCQkJfQotCQkrKypzKys7Ci0JfQotCWVsc2UgewotCQl3aGlsZSgqLS1zID09ICcwJyk7Ci0JCXMrKzsKLQl9Ci0gcmV0OgotCUJmcmVlKFMpOwotCWlmIChtaGkpIHsKLQkJaWYgKG1sbyAmJiBtbG8gIT0gbWhpKQotCQkJQmZyZWUobWxvKTsKLQkJQmZyZWUobWhpKTsKLQl9Ci0gcmV0MToKLQlCZnJlZShiKTsKLQlpZiAocyA9PSBzMCkgewkJCQkvKiBkb24ndCByZXR1cm4gZW1wdHkgc3RyaW5nICovCi0JCSpzKysgPSAnMCc7Ci0JCWsgPSAwOwotCX0KLQkqcyA9IDA7Ci0JKmRlY3B0ID0gayArIDE7Ci0JaWYgKHJ2ZSkKLQkJKnJ2ZSA9IHM7Ci0JcmV0dXJuIHMwOwotfQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvaW1heC5jIGIvbGliYy9zdGRsaWIvc3RydG9pbWF4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNDMyM2QuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRsaWIvc3RydG9pbWF4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cnRvaW1heC5jLHYgMS4xIDIwMDYvMDEvMTMgMTc6NTg6MDkgbWlsbGVydCBFeHAgJAkqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotCi0vKgotICogQ29udmVydCBhIHN0cmluZyB0byBhbiBpbnRtYXhfdAotICoKLSAqIElnbm9yZXMgYGxvY2FsZScgc3R1ZmYuICBBc3N1bWVzIHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjYXNlCi0gKiBhbHBoYWJldHMgYW5kIGRpZ2l0cyBhcmUgZWFjaCBjb250aWd1b3VzLgotICovCi1pbnRtYXhfdAotc3RydG9pbWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQotewotCWNvbnN0IGNoYXIgKnM7Ci0JaW50bWF4X3QgYWNjLCBjdXRvZmY7Ci0JaW50IGM7Ci0JaW50IG5lZywgYW55LCBjdXRsaW07Ci0KLQkvKgotCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCi0JICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQotCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgotCSAqLwotCXMgPSBucHRyOwotCWRvIHsKLQkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOwotCX0gd2hpbGUgKGlzc3BhY2UoYykpOwotCWlmIChjID09ICctJykgewotCQluZWcgPSAxOwotCQljID0gKnMrKzsKLQl9IGVsc2UgewotCQluZWcgPSAwOwotCQlpZiAoYyA9PSAnKycpCi0JCQljID0gKnMrKzsKLQl9Ci0JaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKLQkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7Ci0JCWMgPSBzWzFdOwotCQlzICs9IDI7Ci0JCWJhc2UgPSAxNjsKLQl9Ci0JaWYgKGJhc2UgPT0gMCkKLQkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOwotCi0JLyoKLQkgKiBDb21wdXRlIHRoZSBjdXRvZmYgdmFsdWUgYmV0d2VlbiBsZWdhbCBudW1iZXJzIGFuZCBpbGxlZ2FsCi0JICogbnVtYmVycy4gIFRoYXQgaXMgdGhlIGxhcmdlc3QgbGVnYWwgdmFsdWUsIGRpdmlkZWQgYnkgdGhlCi0JICogYmFzZS4gIEFuIGlucHV0IG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLCBpZgotCSAqIGZvbGxvd2VkIGJ5IGEgbGVnYWwgaW5wdXQgY2hhcmFjdGVyLCBpcyB0b28gYmlnLiAgT25lIHRoYXQKLQkgKiBpcyBlcXVhbCB0byB0aGlzIHZhbHVlIG1heSBiZSB2YWxpZCBvciBub3Q7IHRoZSBsaW1pdAotCSAqIGJldHdlZW4gdmFsaWQgYW5kIGludmFsaWQgbnVtYmVycyBpcyB0aGVuIGJhc2VkIG9uIHRoZSBsYXN0Ci0JICogZGlnaXQuICBGb3IgaW5zdGFuY2UsIGlmIHRoZSByYW5nZSBmb3IgaW50bWF4X3QgaXMKLQkgKiBbLTkyMjMzNzIwMzY4NTQ3NzU4MDguLjkyMjMzNzIwMzY4NTQ3NzU4MDddIGFuZCB0aGUgaW5wdXQgYmFzZQotCSAqIGlzIDEwLCBjdXRvZmYgd2lsbCBiZSBzZXQgdG8gOTIyMzM3MjAzNjg1NDc3NTgwIGFuZCBjdXRsaW0gdG8KLQkgKiBlaXRoZXIgNyAobmVnPT0wKSBvciA4IChuZWc9PTEpLCBtZWFuaW5nIHRoYXQgaWYgd2UgaGF2ZQotCSAqIGFjY3VtdWxhdGVkIGEgdmFsdWUgPiA5MjIzMzcyMDM2ODU0Nzc1ODAsIG9yIGVxdWFsIGJ1dCB0aGUKLQkgKiBuZXh0IGRpZ2l0IGlzID4gNyAob3IgOCksIHRoZSBudW1iZXIgaXMgdG9vIGJpZywgYW5kIHdlIHdpbGwKLQkgKiByZXR1cm4gYSByYW5nZSBlcnJvci4KLQkgKgotCSAqIFNldCBhbnkgaWYgYW55IGBkaWdpdHMnIGNvbnN1bWVkOyBtYWtlIGl0IG5lZ2F0aXZlIHRvIGluZGljYXRlCi0JICogb3ZlcmZsb3cuCi0JICovCi0KLQkvKiBCSU9OSUM6IGF2b2lkIGRpdmlzaW9uIGFuZCBtb2R1bGUgZm9yIGNvbW1vbiBjYXNlcyAqLwotI2RlZmluZSAgQ0FTRV9CQVNFKHgpIFwKLSAgICAgICAgICAgIGNhc2UgeDogIFwKLQkgICAgICAgIGlmIChuZWcpIHsgXAotICAgICAgICAgICAgICAgICAgICBjdXRsaW0gPSBJTlRNQVhfTUlOICUgeDsgXAotCQkgICAgY3V0b2ZmID0gSU5UTUFYX01JTiAvIHg7IFwKLQkgICAgICAgIH0gZWxzZSB7IFwKLQkJICAgIGN1dGxpbSA9IElOVE1BWF9NQVggJSB4OyBcCi0JCSAgICBjdXRvZmYgPSBJTlRNQVhfTUFYIC8geDsgXAotCQkgfTsgXAotCQkgYnJlYWsKLQotCXN3aXRjaCAoYmFzZSkgewotICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIGlmIChuZWcpIHsKLSAgICAgICAgICAgICAgICAgICAgY3V0bGltID0gKGludCkoSU5UTUFYX01JTiAlIDQpOwotICAgICAgICAgICAgICAgICAgICBjdXRvZmYgPSBJTlRNQVhfTUlOIC8gNDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjdXRsaW0gPSAoaW50KShJTlRNQVhfTUFYICUgNCk7Ci0gICAgICAgICAgICAgICAgICAgIGN1dG9mZiA9IElOVE1BWF9NQVggLyA0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotCSAgICBDQVNFX0JBU0UoOCk7Ci0JICAgIENBU0VfQkFTRSgxMCk7Ci0JICAgIENBU0VfQkFTRSgxNik7Ci0JICAgIGRlZmF1bHQ6Ci0JICAgICAgICAgICAgICBjdXRvZmYgID0gbmVnID8gSU5UTUFYX01JTiA6IElOVE1BWF9NQVg7Ci0JCSAgICAgIGN1dGxpbSAgPSBjdXRvZmYgJSBiYXNlOwotCSAgICAgICAgICAgICAgY3V0b2ZmIC89IGJhc2U7Ci0JfQotI3VuZGVmIENBU0VfQkFTRQotCi0JaWYgKG5lZykgewotCQlpZiAoY3V0bGltID4gMCkgewotCQkJY3V0bGltIC09IGJhc2U7Ci0JCQljdXRvZmYgKz0gMTsKLQkJfQotCQljdXRsaW0gPSAtY3V0bGltOwotCX0KLQlmb3IgKGFjYyA9IDAsIGFueSA9IDA7OyBjID0gKHVuc2lnbmVkIGNoYXIpICpzKyspIHsKLQkJaWYgKGlzZGlnaXQoYykpCi0JCQljIC09ICcwJzsKLQkJZWxzZSBpZiAoaXNhbHBoYShjKSkKLQkJCWMgLT0gaXN1cHBlcihjKSA/ICdBJyAtIDEwIDogJ2EnIC0gMTA7Ci0JCWVsc2UKLQkJCWJyZWFrOwotCQlpZiAoYyA+PSBiYXNlKQotCQkJYnJlYWs7Ci0JCWlmIChhbnkgPCAwKQotCQkJY29udGludWU7Ci0JCWlmIChuZWcpIHsKLQkJCWlmIChhY2MgPCBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKLQkJCQlhbnkgPSAtMTsKLQkJCQlhY2MgPSBJTlRNQVhfTUlOOwotCQkJCWVycm5vID0gRVJBTkdFOwotCQkJfSBlbHNlIHsKLQkJCQlhbnkgPSAxOwotCQkJCWFjYyAqPSBiYXNlOwotCQkJCWFjYyAtPSBjOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgewotCQkJCWFueSA9IC0xOwotCQkJCWFjYyA9IElOVE1BWF9NQVg7Ci0JCQkJZXJybm8gPSBFUkFOR0U7Ci0JCQl9IGVsc2UgewotCQkJCWFueSA9IDE7Ci0JCQkJYWNjICo9IGJhc2U7Ci0JCQkJYWNjICs9IGM7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGVuZHB0ciAhPSAwKQotCQkqZW5kcHRyID0gKGNoYXIgKikgKGFueSA/IHMgLSAxIDogbnB0cik7Ci0JcmV0dXJuIChhY2MpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc3RydG9sLmMgYi9saWJjL3N0ZGxpYi9zdHJ0b2wuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNjZGJjZC4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9zdHJ0b2wuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RydG9sLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLQotLyoKLSAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBsb25nIGludGVnZXIuCi0gKgotICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKLSAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCi0gKi8KLWxvbmcKLXN0cnRvbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKLXsKLQljb25zdCBjaGFyICpzOwotCWxvbmcgYWNjLCBjdXRvZmY7Ci0JaW50IGM7Ci0JaW50IG5lZywgYW55LCBjdXRsaW07Ci0KLQkvKgotCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCi0JICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQotCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgotCSAqLwotCXMgPSBucHRyOwotCWRvIHsKLQkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOwotCX0gd2hpbGUgKGlzc3BhY2UoYykpOwotCWlmIChjID09ICctJykgewotCQluZWcgPSAxOwotCQljID0gKnMrKzsKLQl9IGVsc2UgewotCQluZWcgPSAwOwotCQlpZiAoYyA9PSAnKycpCi0JCQljID0gKnMrKzsKLQl9Ci0JaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKLQkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7Ci0JCWMgPSBzWzFdOwotCQlzICs9IDI7Ci0JCWJhc2UgPSAxNjsKLQl9Ci0JaWYgKGJhc2UgPT0gMCkKLQkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOwotCi0JLyoKLQkgKiBDb21wdXRlIHRoZSBjdXRvZmYgdmFsdWUgYmV0d2VlbiBsZWdhbCBudW1iZXJzIGFuZCBpbGxlZ2FsCi0JICogbnVtYmVycy4gIFRoYXQgaXMgdGhlIGxhcmdlc3QgbGVnYWwgdmFsdWUsIGRpdmlkZWQgYnkgdGhlCi0JICogYmFzZS4gIEFuIGlucHV0IG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLCBpZgotCSAqIGZvbGxvd2VkIGJ5IGEgbGVnYWwgaW5wdXQgY2hhcmFjdGVyLCBpcyB0b28gYmlnLiAgT25lIHRoYXQKLQkgKiBpcyBlcXVhbCB0byB0aGlzIHZhbHVlIG1heSBiZSB2YWxpZCBvciBub3Q7IHRoZSBsaW1pdAotCSAqIGJldHdlZW4gdmFsaWQgYW5kIGludmFsaWQgbnVtYmVycyBpcyB0aGVuIGJhc2VkIG9uIHRoZSBsYXN0Ci0JICogZGlnaXQuICBGb3IgaW5zdGFuY2UsIGlmIHRoZSByYW5nZSBmb3IgbG9uZ3MgaXMKLQkgKiBbLTIxNDc0ODM2NDguLjIxNDc0ODM2NDddIGFuZCB0aGUgaW5wdXQgYmFzZSBpcyAxMCwKLQkgKiBjdXRvZmYgd2lsbCBiZSBzZXQgdG8gMjE0NzQ4MzY0IGFuZCBjdXRsaW0gdG8gZWl0aGVyCi0JICogNyAobmVnPT0wKSBvciA4IChuZWc9PTEpLCBtZWFuaW5nIHRoYXQgaWYgd2UgaGF2ZSBhY2N1bXVsYXRlZAotCSAqIGEgdmFsdWUgPiAyMTQ3NDgzNjQsIG9yIGVxdWFsIGJ1dCB0aGUgbmV4dCBkaWdpdCBpcyA+IDcgKG9yIDgpLAotCSAqIHRoZSBudW1iZXIgaXMgdG9vIGJpZywgYW5kIHdlIHdpbGwgcmV0dXJuIGEgcmFuZ2UgZXJyb3IuCi0JICoKLQkgKiBTZXQgYW55IGlmIGFueSBgZGlnaXRzJyBjb25zdW1lZDsgbWFrZSBpdCBuZWdhdGl2ZSB0byBpbmRpY2F0ZQotCSAqIG92ZXJmbG93LgotCSAqLwotCWN1dG9mZiA9IG5lZyA/IExPTkdfTUlOIDogTE9OR19NQVg7Ci0JY3V0bGltID0gY3V0b2ZmICUgYmFzZTsKLQljdXRvZmYgLz0gYmFzZTsKLQlpZiAobmVnKSB7Ci0JCWlmIChjdXRsaW0gPiAwKSB7Ci0JCQljdXRsaW0gLT0gYmFzZTsKLQkJCWN1dG9mZiArPSAxOwotCQl9Ci0JCWN1dGxpbSA9IC1jdXRsaW07Ci0JfQotCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgewotCQlpZiAoaXNkaWdpdChjKSkKLQkJCWMgLT0gJzAnOwotCQllbHNlIGlmIChpc2FscGhhKGMpKQotCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKLQkJZWxzZQotCQkJYnJlYWs7Ci0JCWlmIChjID49IGJhc2UpCi0JCQlicmVhazsKLQkJaWYgKGFueSA8IDApCi0JCQljb250aW51ZTsKLQkJaWYgKG5lZykgewotCQkJaWYgKGFjYyA8IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgewotCQkJCWFueSA9IC0xOwotCQkJCWFjYyA9IExPTkdfTUlOOwotCQkJCWVycm5vID0gRVJBTkdFOwotCQkJfSBlbHNlIHsKLQkJCQlhbnkgPSAxOwotCQkJCWFjYyAqPSBiYXNlOwotCQkJCWFjYyAtPSBjOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgewotCQkJCWFueSA9IC0xOwotCQkJCWFjYyA9IExPTkdfTUFYOwotCQkJCWVycm5vID0gRVJBTkdFOwotCQkJfSBlbHNlIHsKLQkJCQlhbnkgPSAxOwotCQkJCWFjYyAqPSBiYXNlOwotCQkJCWFjYyArPSBjOwotCQkJfQotCQl9Ci0JfQotCWlmIChlbmRwdHIgIT0gMCkKLQkJKmVuZHB0ciA9IChjaGFyICopIChhbnkgPyBzIC0gMSA6IG5wdHIpOwotCXJldHVybiAoYWNjKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvbGwuYyBiL2xpYmMvc3RkbGliL3N0cnRvbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M3NTI3MS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9zdHJ0b2xsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKiAkT3BlbkJTRDogc3RydG9sbC5jLHYgMS42IDIwMDUvMTEvMTAgMTA6MDA6MTcgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLQotLyoKLSAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBsb25nIGxvbmcuCi0gKgotICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKLSAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCi0gKi8KLWxvbmcgbG9uZwotc3RydG9sbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKLXsKLSAgICByZXR1cm4gc3RydG9pbWF4KG5wdHIsIGVuZHB0ciwgYmFzZSk7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvdWwuYyBiL2xpYmMvc3RkbGliL3N0cnRvdWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkYmI2Zi4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9zdHJ0b3VsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cnRvdWwuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkwIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLS8qCi0gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgaW50ZWdlci4KLSAqCi0gKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQotICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KLSAqLwotdW5zaWduZWQgbG9uZwotc3RydG91bChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKLXsKLQljb25zdCBjaGFyICpzOwotCXVuc2lnbmVkIGxvbmcgYWNjLCBjdXRvZmY7Ci0JaW50IGM7Ci0JaW50IG5lZywgYW55LCBjdXRsaW07Ci0KLQkvKgotCSAqIFNlZSBzdHJ0b2wgZm9yIGNvbW1lbnRzIGFzIHRvIHRoZSBsb2dpYyB1c2VkLgotCSAqLwotCXMgPSBucHRyOwotCWRvIHsKLQkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOwotCX0gd2hpbGUgKGlzc3BhY2UoYykpOwotCWlmIChjID09ICctJykgewotCQluZWcgPSAxOwotCQljID0gKnMrKzsKLQl9IGVsc2UgewotCQluZWcgPSAwOwotCQlpZiAoYyA9PSAnKycpCi0JCQljID0gKnMrKzsKLQl9Ci0JaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKLQkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7Ci0JCWMgPSBzWzFdOwotCQlzICs9IDI7Ci0JCWJhc2UgPSAxNjsKLQl9Ci0JaWYgKGJhc2UgPT0gMCkKLQkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOwotCi0JY3V0b2ZmID0gVUxPTkdfTUFYIC8gKHVuc2lnbmVkIGxvbmcpYmFzZTsKLQljdXRsaW0gPSBVTE9OR19NQVggJSAodW5zaWduZWQgbG9uZyliYXNlOwotCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgewotCQlpZiAoaXNkaWdpdChjKSkKLQkJCWMgLT0gJzAnOwotCQllbHNlIGlmIChpc2FscGhhKGMpKQotCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKLQkJZWxzZQotCQkJYnJlYWs7Ci0JCWlmIChjID49IGJhc2UpCi0JCQlicmVhazsKLQkJaWYgKGFueSA8IDApCi0JCQljb250aW51ZTsKLQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgewotCQkJYW55ID0gLTE7Ci0JCQlhY2MgPSBVTE9OR19NQVg7Ci0JCQllcnJubyA9IEVSQU5HRTsKLQkJfSBlbHNlIHsKLQkJCWFueSA9IDE7Ci0JCQlhY2MgKj0gKHVuc2lnbmVkIGxvbmcpYmFzZTsKLQkJCWFjYyArPSBjOwotCQl9Ci0JfQotCWlmIChuZWcgJiYgYW55ID4gMCkKLQkJYWNjID0gLWFjYzsKLQlpZiAoZW5kcHRyICE9IDApCi0JCSplbmRwdHIgPSAoY2hhciAqKSAoYW55ID8gcyAtIDEgOiBucHRyKTsKLQlyZXR1cm4gKGFjYyk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zdHJ0b3VsbC5jIGIvbGliYy9zdGRsaWIvc3RydG91bGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY2OThhYy4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9zdHJ0b3VsbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cnRvdWxsLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotCi0vKgotICogQ29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nIGxvbmcuCi0gKgotICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKLSAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCi0gKi8KLXVuc2lnbmVkIGxvbmcgbG9uZwotc3RydG91bGwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCi17Ci0gICAgcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpc3RydG91bWF4KG5wdHIsIGVuZHB0ciwgYmFzZSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zdHJ0b3VtYXguYyBiL2xpYmMvc3RkbGliL3N0cnRvdW1heC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWZmNjIzLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL3N0cnRvdW1heC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzdHJ0b3VtYXguYyx2IDEuMSAyMDA2LzAxLzEzIDE3OjU4OjA5IG1pbGxlcnQgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLQotLyoKLSAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSB1aW50bWF4X3QuCi0gKgotICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKLSAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCi0gKi8KLXVpbnRtYXhfdAotc3RydG91bWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQotewotCWNvbnN0IGNoYXIgKnM7Ci0JdWludG1heF90IGFjYywgY3V0b2ZmOwotCWludCBjOwotCWludCBuZWcsIGFueSwgY3V0bGltOwotCi0JLyoKLQkgKiBTZWUgc3RydG9xIGZvciBjb21tZW50cyBhcyB0byB0aGUgbG9naWMgdXNlZC4KLQkgKi8KLQlzID0gbnB0cjsKLQlkbyB7Ci0JCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKLQl9IHdoaWxlIChpc3NwYWNlKGMpKTsKLQlpZiAoYyA9PSAnLScpIHsKLQkJbmVnID0gMTsKLQkJYyA9ICpzKys7Ci0JfSBlbHNlIHsKLQkJbmVnID0gMDsKLQkJaWYgKGMgPT0gJysnKQotCQkJYyA9ICpzKys7Ci0JfQotCWlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmCi0JICAgIGMgPT0gJzAnICYmICgqcyA9PSAneCcgfHwgKnMgPT0gJ1gnKSkgewotCQljID0gc1sxXTsKLQkJcyArPSAyOwotCQliYXNlID0gMTY7Ci0JfQotCWlmIChiYXNlID09IDApCi0JCWJhc2UgPSBjID09ICcwJyA/IDggOiAxMDsKLQotICAgICAgICAvKiBCSU9OSUM6IGF2b2lkIGRpdmlzaW9uIGFuZCBtb2R1bG8gZm9yIGNvbW1vbiBjYXNlcyAqLwotI2RlZmluZSAgQ0FTRV9CQVNFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGNhc2UgeDogY3V0b2ZmID0gVUlOVE1BWF9NQVggLyB4OyAgICBcCi0JICAgICAgICAgICAgY3V0bGltID0gVUlOVE1BWF9NQVggJSB4OyAgICBcCi0JCSAgICBicmVhawotCi0gICAgICAgIHN3aXRjaCAoYmFzZSkgewotICAgICAgICBDQVNFX0JBU0UoOCk7Ci0JQ0FTRV9CQVNFKDEwKTsKLQlDQVNFX0JBU0UoMTYpOwotCWRlZmF1bHQ6Ci0JICAgIGN1dG9mZiA9IFVJTlRNQVhfTUFYIC8gYmFzZTsKLQkgICAgY3V0bGltID0gVUlOVE1BWF9NQVggJSBiYXNlOwotCX0KLQotCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgewotCQlpZiAoaXNkaWdpdChjKSkKLQkJCWMgLT0gJzAnOwotCQllbHNlIGlmIChpc2FscGhhKGMpKQotCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKLQkJZWxzZQotCQkJYnJlYWs7Ci0JCWlmIChjID49IGJhc2UpCi0JCQlicmVhazsKLQkJaWYgKGFueSA8IDApCi0JCQljb250aW51ZTsKLQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgewotCQkJYW55ID0gLTE7Ci0JCQlhY2MgPSBVSU5UTUFYX01BWDsKLQkJCWVycm5vID0gRVJBTkdFOwotCQl9IGVsc2UgewotCQkJYW55ID0gMTsKLQkJCWFjYyAqPSAodWludG1heF90KWJhc2U7Ci0JCQlhY2MgKz0gYzsKLQkJfQotCX0KLQlpZiAobmVnICYmIGFueSA+IDApCi0JCWFjYyA9IC1hY2M7Ci0JaWYgKGVuZHB0ciAhPSAwKQotCQkqZW5kcHRyID0gKGNoYXIgKikgKGFueSA/IHMgLSAxIDogbnB0cik7Ci0JcmV0dXJuIChhY2MpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvaW5kZXguYyBiL2xpYmMvc3RyaW5nL2luZGV4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYmZiYTQuLjAwMDAwMDAKLS0tIGEvbGliYy9zdHJpbmcvaW5kZXguYworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCSRPcGVuQlNEOiBpbmRleC5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLWNoYXIgKgotaW5kZXgoY29uc3QgY2hhciAqcCwgaW50IGNoKQotewotCWZvciAoOzsgKytwKSB7Ci0JCWlmICgqcCA9PSAoY2hhcikgY2gpCi0JCQlyZXR1cm4oKGNoYXIgKilwKTsKLQkJaWYgKCEqcCkKLQkJCXJldHVybigoY2hhciAqKU5VTEwpOwotCX0KLQkvKiBOT1RSRUFDSEVEICovCi19CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1jbXAxNi5jIGIvbGliYy9zdHJpbmcvbWVtY21wMTYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI2NzcyMi4uMDAwMDAwMAotLS0gYS9saWJjL3N0cmluZy9tZW1jbXAxNi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLUNvcHlyaWdodCAoYykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KLS8qIFVub3B0aW1pc2VkIHZlcnNpb24gb2YgX19tZW1jbXAxNiAqLwotaW50IF9fbWVtY21wMTYoY29uc3QgdW5zaWduZWQgc2hvcnQgKnB0cjEsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwdHIyLCBzaXplX3QgbikKLXsKLSAgc2l6ZV90IGk7Ci0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgIGlmICgqcHRyMSAhPSAqcHRyMikKLSAgICAgIHJldHVybiAqcHRyMSAtICpwdHIyOwotICAgIHB0cjErKzsKLSAgICBwdHIyKys7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJjYXQuYyBiL2xpYmMvc3RyaW5nL3N0cmNhdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2VhNTIyLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RyaW5nL3N0cmNhdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cmNhdC5jLHYgMS44IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChBUElXQVJOKQotX193YXJuX3JlZmVyZW5jZXMoc3RyY2F0LAotICAgICJ3YXJuaW5nOiBzdHJjYXQoKSBpcyBhbG1vc3QgYWx3YXlzIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc3RybGNhdCgpIik7Ci0jZW5kaWYKLQotY2hhciAqCi1zdHJjYXQoY2hhciAqcywgY29uc3QgY2hhciAqYXBwZW5kKQotewotCWNoYXIgKnNhdmUgPSBzOwotCi0JZm9yICg7ICpzOyArK3MpOwotCXdoaWxlICgoKnMrKyA9ICphcHBlbmQrKykgIT0gJ1wwJyk7Ci0JcmV0dXJuKHNhdmUpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyY21wLmMgYi9saWJjL3N0cmluZy9zdHJjbXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE2ZmQxMS4uMDAwMDAwMAotLS0gYS9saWJjL3N0cmluZy9zdHJjbXAuYworKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzdHJjbXAuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KLSNlbmRpZgotCi0vKgotICogQ29tcGFyZSBzdHJpbmdzLgotICovCi1pbnQKLXN0cmNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCi17Ci0Jd2hpbGUgKCpzMSA9PSAqczIrKykKLQkJaWYgKCpzMSsrID09IDApCi0JCQlyZXR1cm4gKDApOwotCXJldHVybiAoKih1bnNpZ25lZCBjaGFyICopczEgLSAqKHVuc2lnbmVkIGNoYXIgKiktLXMyKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNweS5jIGIvbGliYy9zdHJpbmcvc3RyY3B5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMjFkNjcuLjAwMDAwMDAKLS0tIGEvbGliYy9zdHJpbmcvc3RyY3B5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RyY3B5LmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotY2hhciAqCi1zdHJjcHkoY2hhciAqdG8sIGNvbnN0IGNoYXIgKmZyb20pCi17Ci0JY2hhciAqc2F2ZSA9IHRvOwotCi0JZm9yICg7ICgqdG8gPSAqZnJvbSkgIT0gJ1wwJzsgKytmcm9tLCArK3RvKTsKLQlyZXR1cm4oc2F2ZSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJsZW4uYyBiL2xpYmMvc3RyaW5nL3N0cmxlbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmQ5ZWM0Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RyaW5nL3N0cmxlbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cmxlbi5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KLSNlbmRpZgotCi1zaXplX3QKLXN0cmxlbihjb25zdCBjaGFyICpzdHIpCi17Ci0JY29uc3QgY2hhciAqczsKLQotCWZvciAocyA9IHN0cjsgKnM7ICsrcykKLQkJOwotCXJldHVybiAocyAtIHN0cik7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cm5jbXAuYyBiL2xpYmMvc3RyaW5nL3N0cm5jbXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc2ODgwOC4uMDAwMDAwMAotLS0gYS9saWJjL3N0cmluZy9zdHJuY21wLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RybmNtcC5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmICFkZWZpbmVkKF9LRVJORUwpICYmICFkZWZpbmVkKF9TVEFOREFMT05FKQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaWIvbGlia2Vybi9saWJrZXJuLmg+Ci0jZW5kaWYKLQotaW50Ci1zdHJuY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pCi17Ci0JaWYgKG4gPT0gMCkKLQkJcmV0dXJuICgwKTsKLQlkbyB7Ci0JCWlmICgqczEgIT0gKnMyKyspCi0JCQlyZXR1cm4gKCoodW5zaWduZWQgY2hhciAqKXMxIC0gKih1bnNpZ25lZCBjaGFyICopLS1zMik7Ci0JCWlmICgqczErKyA9PSAwKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoLS1uICE9IDApOwotCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJuY3B5LmMgYi9saWJjL3N0cmluZy9zdHJuY3B5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MjZjYmUuLjAwMDAwMDAKLS0tIGEvbGliYy9zdHJpbmcvc3RybmNweS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cm5jcHkuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KLSNlbmRpZgotCi0vKgotICogQ29weSBzcmMgdG8gZHN0LCB0cnVuY2F0aW5nIG9yIG51bGwtcGFkZGluZyB0byBhbHdheXMgY29weSBuIGJ5dGVzLgotICogUmV0dXJuIGRzdC4KLSAqLwotY2hhciAqCi1zdHJuY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikKLXsKLQlpZiAobiAhPSAwKSB7Ci0JCWNoYXIgKmQgPSBkc3Q7Ci0JCWNvbnN0IGNoYXIgKnMgPSBzcmM7Ci0KLQkJZG8gewotCQkJaWYgKCgqZCsrID0gKnMrKykgPT0gMCkgewotCQkJCS8qIE5VTCBwYWQgdGhlIHJlbWFpbmluZyBuLTEgYnl0ZXMgKi8KLQkJCQl3aGlsZSAoLS1uICE9IDApCi0JCQkJCSpkKysgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IHdoaWxlICgtLW4gIT0gMCk7Ci0JfQotCXJldHVybiAoZHN0KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cnJjaHIuYyBiL2xpYmMvc3RyaW5nL3N0cnJjaHIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUyMzA2YS4uMDAwMDAwMAotLS0gYS9saWJjL3N0cmluZy9zdHJyY2hyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgkkT3BlbkJTRDogcmluZGV4LmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLWNoYXIgKgotc3RycmNocihjb25zdCBjaGFyICpwLCBpbnQgY2gpCi17Ci0JcmV0dXJuIF9fc3RycmNocl9jaGsocCwgY2gsIF9fQklPTklDX0ZPUlRJRllfVU5LTk9XTl9TSVpFKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cnNlcC5jIGIvbGliYy9zdHJpbmcvc3Ryc2VwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NGJjNWIuLjAwMDAwMDAKLS0tIGEvbGliYy9zdHJpbmcvc3Ryc2VwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgkkT3BlbkJTRDogc3Ryc2VwLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJAkqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0vKgotICogR2V0IG5leHQgdG9rZW4gZnJvbSBzdHJpbmcgKnN0cmluZ3AsIHdoZXJlIHRva2VucyBhcmUgcG9zc2libHktZW1wdHkKLSAqIHN0cmluZ3Mgc2VwYXJhdGVkIGJ5IGNoYXJhY3RlcnMgZnJvbSBkZWxpbS4KLSAqCi0gKiBXcml0ZXMgTlVMcyBpbnRvIHRoZSBzdHJpbmcgYXQgKnN0cmluZ3AgdG8gZW5kIHRva2Vucy4KLSAqIGRlbGltIG5lZWQgbm90IHJlbWFpbiBjb25zdGFudCBmcm9tIGNhbGwgdG8gY2FsbC4KLSAqIE9uIHJldHVybiwgKnN0cmluZ3AgcG9pbnRzIHBhc3QgdGhlIGxhc3QgTlVMIHdyaXR0ZW4gKGlmIHRoZXJlIG1pZ2h0Ci0gKiBiZSBmdXJ0aGVyIHRva2VucyksIG9yIGlzIE5VTEwgKGlmIHRoZXJlIGFyZSBkZWZpbml0ZWx5IG5vIG1vcmUgdG9rZW5zKS4KLSAqCi0gKiBJZiAqc3RyaW5ncCBpcyBOVUxMLCBzdHJzZXAgcmV0dXJucyBOVUxMLgotICovCi1jaGFyICoKLXN0cnNlcChjaGFyICoqc3RyaW5ncCwgY29uc3QgY2hhciAqZGVsaW0pCi17Ci0JY2hhciAqczsKLQljb25zdCBjaGFyICpzcGFucDsKLQlpbnQgYywgc2M7Ci0JY2hhciAqdG9rOwotCi0JaWYgKChzID0gKnN0cmluZ3ApID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JZm9yICh0b2sgPSBzOzspIHsKLQkJYyA9ICpzKys7Ci0JCXNwYW5wID0gZGVsaW07Ci0JCWRvIHsKLQkJCWlmICgoc2MgPSAqc3BhbnArKykgPT0gYykgewotCQkJCWlmIChjID09IDApCi0JCQkJCXMgPSBOVUxMOwotCQkJCWVsc2UKLQkJCQkJc1stMV0gPSAwOwotCQkJCSpzdHJpbmdwID0gczsKLQkJCQlyZXR1cm4gKHRvayk7Ci0JCQl9Ci0JCX0gd2hpbGUgKHNjICE9IDApOwotCX0KLQkvKiBOT1RSRUFDSEVEICovCi19CmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL2Jpb25pY191dGlscy5weSBiL2xpYmMvdG9vbHMvYmlvbmljX3V0aWxzLnB5CmluZGV4IDg4ZGRkNTUuLmMzOGVmYjUgMTAwNjQ0Ci0tLSBhL2xpYmMvdG9vbHMvYmlvbmljX3V0aWxzLnB5CisrKyBiL2xpYmMvdG9vbHMvYmlvbmljX3V0aWxzLnB5CkBAIC0yLDcgKzIsNyBAQAogCiBpbXBvcnQgc3lzLCBvcywgY29tbWFuZHMsIHN0cmluZwogCi1hbGxfYXJjaGVzID0gWyAiYXJtIiwgImFybTY0IiwgIm1pcHMiLCAieDg2IiwgIng4Nl82NCIgXQorYWxsX2FyY2hlcyA9IFsgImFybSIsICJhcm02NCIsICJtaXBzIiwgIm1pcHM2NCIsICJ4ODYiLCAieDg2XzY0IiBdCiAKICMgYmFzaWMgZGVidWdnaW5nIHRyYWNlIHN1cHBvcnQKICMgY2FsbCBEX3NldGxldmVsIHRvIHNldCB0aGUgdmVyYm9zaXR5IGxldmVsCkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICAgICAgICAgICAgICBpZiBhcmNoIGluIGFsbF9hcmNoZXM6CiAgICAgICAgICAgICAgICAgICAgIHRbYXJjaF0gPSBUcnVlCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgRSgiaW52YWxpZCBzeXNjYWxsIGFyY2hpdGVjdHVyZSBsaXN0IGluICclcyciICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgRSgiaW52YWxpZCBzeXNjYWxsIGFyY2hpdGVjdHVyZSAnJXMnIGluICclcyciICUgKGFyY2gsIGxpbmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBzZWxmLnN5c2NhbGxzLmFwcGVuZCh0KQpkaWZmIC0tZ2l0IGEvbGliYy90b29scy9jaGVjay1zeW1ib2xzLWdsaWJjLnB5IGIvbGliYy90b29scy9jaGVjay1zeW1ib2xzLWdsaWJjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4YTEwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Rvb2xzL2NoZWNrLXN5bWJvbHMtZ2xpYmMucHkKQEAgLTAsMCArMSwxNTMgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKK2ltcG9ydCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKwordG9vbGNoYWluID0gb3MuZW52aXJvblsnQU5EUk9JRF9UT09MQ0hBSU4nXQorYXJjaCA9IHJlLnN1YihyJy4qL2xpbnV4LXg4Ni8oW14vXSspLy4qJywgcidcMScsIHRvb2xjaGFpbikKKworZGVmIEdldFN5bWJvbHNGcm9tU28oc29fZmlsZSk6CisgICMgRXhhbXBsZSByZWFkZWxmIG91dHB1dDoKKyAgIyAgIDI2NDogMDAwMTYyM2MgICAgIDQgRlVOQyAgICBHTE9CQUwgREVGQVVMVCAgICA4IGNhYnNmCisgICMgICAyNjY6IDAwMDE2MjQ0ICAgICA0IEZVTkMgICAgR0xPQkFMIERFRkFVTFQgICAgOCBkcmVtZgorICAjICAgMjY3OiAwMDAxOTAxOCAgICAgNCBPQkpFQ1QgIEdMT0JBTCBERUZBVUxUICAgMTEgX19mZV9kZmxfZW52CisgICMgICAyNjg6IDAwMDAwMDAwICAgICAwIEZVTkMgICAgR0xPQkFMIERFRkFVTFQgIFVORCBfX2FlYWJpX2RjbXBsdAorCisgIHIgPSByZS5jb21waWxlKHInICtcZCs6IFswLTlhLWZdKyArXGQrIChJP0ZVTkN8T0JKRUNUKSArXFMrICtcUysgK1xkKyAoXFMrKScpCisKKyAgc3ltYm9scyA9IHNldCgpCisKKyAgZm9yIGxpbmUgaW4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydyZWFkZWxmJywgJy0tZHluLXN5bXMnLCAnLVcnLCBzb19maWxlXSkuc3BsaXQoJ1xuJyk6CisgICAgaWYgJyBISURERU4gJyBpbiBsaW5lIG9yICcgVU5EICcgaW4gbGluZToKKyAgICAgIGNvbnRpbnVlCisgICAgbSA9IHIubWF0Y2gobGluZSkKKyAgICBpZiBtOgorICAgICAgc3ltYm9sID0gbS5ncm91cCgyKQorICAgICAgc3ltYm9sID0gcmUuc3ViKCdALionLCAnJywgc3ltYm9sKQorICAgICAgc3ltYm9scy5hZGQoc3ltYm9sKQorCisgIHJldHVybiBzeW1ib2xzCisKK2RlZiBHZXRTeW1ib2xzRnJvbUFuZHJvaWRTbygqZmlsZXMpOgorICBzeW1ib2xzID0gc2V0KCkKKyAgZm9yIGYgaW4gZmlsZXM6CisgICAgc3ltYm9scyA9IHN5bWJvbHMgfCBHZXRTeW1ib2xzRnJvbVNvKCclcy9zeXN0ZW0vbGliNjQvJXMnICUgKG9zLmVudmlyb25bJ0FORFJPSURfUFJPRFVDVF9PVVQnXSwgZikpCisgIHJldHVybiBzeW1ib2xzCisKK2RlZiBHZXRTeW1ib2xzRnJvbVN5c3RlbVNvKCpmaWxlcyk6CisgIHN5bWJvbHMgPSBzZXQoKQorICBmb3IgZiBpbiBmaWxlczoKKyAgICBmID0gZ2xvYi5nbG9iKCcvbGliL3g4Nl82NC1saW51eC1nbnUvJXMnICUgZilbLTFdCisgICAgc3ltYm9scyA9IHN5bWJvbHMgfCBHZXRTeW1ib2xzRnJvbVNvKGYpCisgIHJldHVybiBzeW1ib2xzCisKK2RlZiBNYW5nbGVHbGliY05hbWVUb0Jpb25pYyhuYW1lKToKKyAgaWYgbmFtZSBpbiBnbGliY190b19iaW9uaWNfbmFtZXM6CisgICAgcmV0dXJuIGdsaWJjX3RvX2Jpb25pY19uYW1lc1tuYW1lXQorICByZXR1cm4gbmFtZQorCitnbGliY190b19iaW9uaWNfbmFtZXMgPSB7CisgICdfX3Jlc19pbml0JzogJ3Jlc19pbml0JywKKyAgJ19fcmVzX21rcXVlcnknOiAncmVzX21rcXVlcnknLAorICAnX19yZXNfcXVlcnknOiAncmVzX3F1ZXJ5JywKKyAgJ19fcmVzX3NlYXJjaCc6ICdyZXNfc2VhcmNoJywKK30KKworZ2xpYmMgPSBHZXRTeW1ib2xzRnJvbVN5c3RlbVNvKCdsaWJjLnNvLionLCAnbGlicnQuc28uKicsICdsaWJwdGhyZWFkLnNvLionLCAnbGlicmVzb2x2LnNvLionLCAnbGlibS5zby4qJykKK2Jpb25pYyA9IEdldFN5bWJvbHNGcm9tQW5kcm9pZFNvKCdsaWJjLnNvJywgJ2xpYm0uc28nKQorCitnbGliYyA9IG1hcChNYW5nbGVHbGliY05hbWVUb0Jpb25pYywgZ2xpYmMpCisKKyMgYmlvbmljIGluY2x1ZGVzIHZhcmlvdXMgQlNEIHN5bWJvbHMgdG8gZWFzZSBwb3J0aW5nIG90aGVyIEJTRC1saWNlbnNlZCBjb2RlLgorYnNkX3N0dWZmID0gc2V0KFsKKyAgJ2Jhc2VuYW1lX3InLAorICAnZGlybmFtZV9yJywKKyAgJ2ZnZXRsbicsCisgICdmcHVyZ2UnLAorICAnZnVub3BlbicsCisgICdnYW1tYV9yJywKKyAgJ2dhbW1hZl9yJywKKyAgJ2dldHByb2duYW1lJywKKyAgJ3NldHByb2duYW1lJywKKyAgJ3N0cmxjYXQnLAorICAnc3RybGNweScsCisgICdzeXNfc2lnbmFtZScsCisgICd3Y3NsY2F0JywKKyAgJ3djc2xjcHknCitdKQorIyBTb21lIHN5bWJvbHMgYXJlIHBhcnQgb2YgdGhlIEZPUlRJRlkgaW1wbGVtZW50YXRpb24uCitGT1JUSUZZX3N0dWZmID0gc2V0KFsKKyAgJ19fRkRfQ0xSX2NoaycsCisgICdfX0ZEX0lTU0VUX2NoaycsCisgICdfX0ZEX1NFVF9jaGsnLAorICAnX19zdGFja19jaGtfZ3VhcmQnLAorICAnX19zdHBuY3B5X2NoazInLAorICAnX19zdHJjaHJfY2hrJywKKyAgJ19fc3RybGNhdF9jaGsnLAorICAnX19zdHJsY3B5X2NoaycsCisgICdfX3N0cmxlbl9jaGsnLAorICAnX19zdHJuY3B5X2NoazInLAorICAnX19zdHJyY2hyX2NoaycsCisgICdfX3VtYXNrX2NoaycKK10pCisjIFNvbWUgc3ltYm9scyBhcmUgdXNlZCB0byBpbXBsZW1lbnQgcHVibGljIG1hY3Jvcy4KK21hY3JvX3N0dWZmID0gc2V0KFsKKyAgJ19fYXNzZXJ0MicsCisgICdfX2Vycm5vJywKKyAgJ19fZmVfZGZsX2VudicsCisgICdfX2dldF9oX2Vycm5vJywKK10pCisjIGJpb25pYyBleHBvc2VzIHZhcmlvdXMgTGludXggZmVhdHVyZXMgdGhhdCBnbGliYyBkb2Vzbid0LgorbGludXhfc3R1ZmYgPSBzZXQoWworICAnZ2V0YXV4dmFsJywKKyAgJ2dldHRpZCcsCisgICd0Z2tpbGwnCitdKQorIyBTb21lIHN0YW5kYXJkIHN0dWZmIGlzbid0IHlldCBpbiB0aGUgdmVyc2lvbnMgb2YgZ2xpYmMgd2UncmUgdXNpbmcuCitzdGRfc3R1ZmYgPSBzZXQoWworICAnYXRfcXVpY2tfZXhpdCcsCisgICdjMTZydG9tYicsCisgICdjMzJydG9tYicsCisgICdtYnJ0b2MxNicsCisgICdtYnJ0b2MzMicsCitdKQorIyBUaGVzZSBoYXZlIG1hbmdsZWQgbmFtZXMgaW4gZ2xpYmMsIHdpdGggYSBtYWNybyB0YWtpbmcgdGhlICJvYnZpb3VzIiBuYW1lLgord2VpcmRfc3R1ZmYgPSBzZXQoWworICAnZnN0YXQnLAorICAnZnN0YXQ2NCcsCisgICdmc3RhdGF0JywKKyAgJ2ZzdGF0YXQ2NCcsCisgICdpc2Zpbml0ZScsCisgICdpc2Zpbml0ZWYnLAorICAnaXNmaW5pdGVsJywKKyAgJ2lzbm9ybWFsJywKKyAgJ2lzbm9ybWFsZicsCisgICdpc25vcm1hbGwnLAorICAnbHN0YXQnLAorICAnbHN0YXQ2NCcsCisgICdta25vZCcsCisgICdta25vZGF0JywKKyAgJ3N0YXQnLAorICAnc3RhdDY0JywKK10pCisKK3ByaW50ICdnbGliYzonCitmb3Igc3ltYm9sIGluIHNvcnRlZChnbGliYyk6CisgIHByaW50IHN5bWJvbAorCitwcmludAorcHJpbnQgJ2Jpb25pYzonCitmb3Igc3ltYm9sIGluIHNvcnRlZChiaW9uaWMpOgorICBwcmludCBzeW1ib2wKKworcHJpbnQKK3ByaW50ICdpbiBiaW9uaWMgYnV0IG5vdCBnbGliYzonCithbGxvd2VkX3N0dWZmID0gKGJzZF9zdHVmZiB8IEZPUlRJRllfc3R1ZmYgfCBsaW51eF9zdHVmZiB8IG1hY3JvX3N0dWZmIHwgc3RkX3N0dWZmIHwgd2VpcmRfc3R1ZmYpCitmb3Igc3ltYm9sIGluIHNvcnRlZCgoYmlvbmljIC0gYWxsb3dlZF9zdHVmZikuZGlmZmVyZW5jZShnbGliYykpOgorICBwcmludCBzeW1ib2wKKworc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvZ2VuZXJhdGUtTk9USUNFLnB5IGIvbGliYy90b29scy9nZW5lcmF0ZS1OT1RJQ0UucHkKaW5kZXggNTExNTMxNy4uOGNkNzVhMyAxMDA3NTUKLS0tIGEvbGliYy90b29scy9nZW5lcmF0ZS1OT1RJQ0UucHkKKysrIGIvbGliYy90b29scy9nZW5lcmF0ZS1OT1RJQ0UucHkKQEAgLTI1LDcgKzI1LDcgQEAKICAgICByZXR1cm4gRmFsc2UKIAogZGVmIElzQXV0b0dlbmVyYXRlZChjb250ZW50KToKLSAgICBpZiAiZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5IiBpbiBjb250ZW50IG9yICJnZW5lcmF0ZWQgYnkgZ2Vuc2Vydi5weSIgaW4gY29udGVudDoKKyAgICBpZiAiR2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5IiBpbiBjb250ZW50IG9yICJnZW5lcmF0ZWQgYnkgZ2Vuc2Vydi5weSIgaW4gY29udGVudDoKICAgICAgICAgcmV0dXJuIFRydWUKICAgICBpZiAiVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyIiBpbiBjb250ZW50OgogICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtNTUsMTAgKzU1LDEzIEBACiAgICAgICAgICAgICBicmVhawogICAgICAgICBpZiAiXHRjaXRydXMgSWQ6ICIgaW4gbGluZXNbaV06CiAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiAiXHQkT3BlbkJTRDogIiBpbiBsaW5lc1tpXSBvciAiICRGcmVlQlNEOiAiIGluIGxpbmVzW2ldIG9yICJcdCROZXRCU0Q6ICIgaW4gbGluZXNbaV06CisgICAgICAgIGlmICJcdCRDaXRydXM6ICIgaW4gbGluZXNbaV0gb3IgIlx0JE9wZW5CU0Q6ICIgaW4gbGluZXNbaV0gb3IgIiAkRnJlZUJTRDogIiBpbiBsaW5lc1tpXSBvciAiXHQkTmV0QlNEOiAiIGluIGxpbmVzW2ldOgogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgIiRGcmVlQlNEJCIgaW4gbGluZXNbaV0gb3IgIiRDaXRydXMkIiBpbiBsaW5lc1tpXToKICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICMgT3BlbkJTRCBsaWtlcyB0byBzYXkgd2hlcmUgc3R1ZmYgb3JpZ2luYWxseSBjYW1lIGZyb206CisgICAgICAgIGlmICJPcmlnaW5hbCB2ZXJzaW9uIElEOiIgaW4gbGluZXNbaV06CisgICAgICAgICAgICBicmVhawogICAgICAgICBpICs9IDEKIAogICAgIGVuZCA9IGkKQEAgLTc0LDcgKzc3LDcgQEAKICAgICBmb3IgbGluZSBpbiBsaW5lc1tzdGFydDplbmRdOgogICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJcdCIsICIgICAgIikKICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiLyogIiwgIiIpCi0gICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIiAqICIsICIiKQorICAgICAgICBsaW5lID0gcmUuc3ViKCJeIFwqICIsICIiLCBsaW5lKQogICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCIqKiAiLCAiIikKICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiIyAiLCAiIikKICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIrK0NvcHlyaWdodCsrIik6CkBAIC0xNDEsNyArMTQ0LDcgQEAKIAogICAgICAgICAgICAgaSA9IDAKICAgICAgICAgICAgIHdoaWxlIGkgPCBsZW4obGluZXMpOgotICAgICAgICAgICAgICAgIGlmICJDb3B5cmlnaHQiIGluIGxpbmVzW2ldOgorICAgICAgICAgICAgICAgIGlmICJDb3B5cmlnaHQiIGluIGxpbmVzW2ldIGFuZCBub3QgIkAoIykgQ29weXJpZ2h0IiBpbiBsaW5lc1tpXToKICAgICAgICAgICAgICAgICAgICAgaSA9IEV4dHJhY3RDb3B5cmlnaHRBdChsaW5lcywgaSkKICAgICAgICAgICAgICAgICBpICs9IDEKIApkaWZmIC0tZ2l0IGEvbGliYy90b29scy9nZW5saWJnY2NfY29tcGF0LnB5IGIvbGliYy90b29scy9nZW5saWJnY2NfY29tcGF0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyOGJmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Rvb2xzL2dlbmxpYmdjY19jb21wYXQucHkKQEAgLTAsMCArMSwxMzYgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKycnJworLyogVGhpcyBmaWxlIGdlbmVyYXRlcyBsaWJnY2NfY29tcGF0LmMgZmlsZSB0aGF0IGNvbnRhaW5zIGR1bW15CisgKiByZWZlcmVuY2VzIHRvIGxpYmdjYy5hIGZ1bmN0aW9ucyB0byBmb3JjZSB0aGUgZHluYW1pYyBsaW5rZXIKKyAqIHRvIGNvcHkgdGhlaXIgZGVmaW5pdGlvbiBpbnRvIHRoZSBmaW5hbCBsaWJjLnNvIGJpbmFyeS4KKyAqCisgKiBUaGV5IGFyZSByZXF1aXJlZCB0byBlbnN1cmUgYmFja3dhcmRzIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGgKKyAqIGxpYmMuc28gcHJvdmlkZWQgYnkgdGhlIHBsYXRmb3JtIGFuZCBiaW5hcmllcyBidWlsdCB3aXRoIHRoZSBOREsgb3IKKyAqIGRpZmZlcmVudCB2ZXJzaW9ucy9jb25maWd1cmF0aW9ucyBvZiB0b29sY2hhaW5zLgorICoKKyAqIE5vdywgZm9yIGEgbW9yZSBlbGFib3JhdGUgZGVzY3JpcHRpb24gb2YgdGhlIGlzc3VlOgorICoKKyAqIGxpYmdjYy5hIGlzIGEgY29tcGlsZXItc3BlY2lmaWMgbGlicmFyeSBjb250YWluaW5nIHZhcmlvdXMgaGVscGVyCisgKiBmdW5jdGlvbnMgdXNlZCB0byBpbXBsZW1lbnQgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBuZWNlc3NhcmlseQorICogc3VwcG9ydGVkIGJ5IHRoZSB0YXJnZXQgQ1BVLiBGb3IgZXhhbXBsZSwgaW50ZWdlciBkaXZpc2lvbiBkb2Vzbid0IGhhdmUgYQorICogY29ycmVzcG9uZGluZyBDUFUgaW5zdHJ1Y3Rpb24gb24gQVJNdjUsIGFuZCBpcyBpbnN0ZWFkIGltcGxlbWVudGVkIGluIHRoZQorICogY29tcGlsZXItZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSBhcyBhIGNhbGwgdG8gYW4gX19pZGl2IGhlbHBlciBmdW5jdGlvbi4KKyAqCisgKiBOb3JtYWxseSwgb25lIGhhcyB0byBwbGFjZSBsaWJnY2MuYSBpbiB0aGUgbGluayBjb21tYW5kIHVzZWQgdG8gZ2VuZXJhdGUKKyAqIHRhcmdldCBiaW5hcmllcyAoc2hhcmVkIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMpIGFmdGVyIGFsbCBvYmplY3RzIGFuZAorICogc3RhdGljIGxpYnJhcmllcywgYnV0IGJlZm9yZSBkZXBlbmRlbnQgc2hhcmVkIGxpYnJhcmllcywgaS5lLiBzb21ldGhpbmcKKyAqIGxpa2U6CisgKiAgICAgICAgIGdjYyA8b3B0aW9ucz4gLW8gbGliZm9vLnNvICBmb28uYSBsaWJnY2MuYSAtbGMgLWxtCisgKgorICogVGhpcyBlbnN1cmVzIHRoYXQgYW55IGhlbHBlciBmdW5jdGlvbiBuZWVkZWQgYnkgdGhlIGNvZGUgaW4gZm9vLmEgaXMgY29waWVkCisgKiBpbnRvIHRoZSBmaW5hbCBsaWJmb28uc28uIEhvd2V2ZXIsIGRvaW5nIHNvIHdpbGwgbGluayBhIGJ1bmNoIG9mIG90aGVyIF9fY3hhCisgKiBmdW5jdGlvbnMgZnJvbSBsaWJnY2MuYSBpbnRvIGVhY2ggLnNvIGFuZCBleGVjdXRhYmxlLCBjYXVzaW5nIDRrKyBpbmNyZWFzZQorICogaW4gZXZlcnkgYmluYXJ5LiBUaGVyZWZvcmUgdGhlIEFuZHJvaWQgcGxhdGZvcm0gYnVpbGQgc3lzdGVtIGhhcyBiZWVuCisgKiB1c2luZyB0aGlzIGluc3RlYWQ6CisgKgorICogICAgICAgICBnY2MgPG9wdGlvbnM+IC1vIGxpYmZvby5zbyBmb28uYSAtbGMgLWxtIGxpYmdjYy5hCisgKgorICogVGhlIHByb2JsZW0gd2l0aCB0aGlzIGlzIHRoYXQgaWYgb25lIGhlbHBlciBmdW5jdGlvbiBuZWVkZWQgYnkgZm9vLmEgaGFzCisgKiBhbHJlYWR5IGJlZW4gY29waWVkIGludG8gbGliYy5zbyBvciBsaWJtLnNvLCB0aGVuIG5vdGhpbmcgd2lsbCBiZSBjb3BpZWQKKyAqIGludG8gbGliZm9vLnNvLiBJbnN0ZWFkLCBhIHN5bWJvbCBpbXBvcnQgZGVmaW5pdGlvbiB3aWxsIGJlIGFkZGVkIHRvIGl0CisgKiBzbyBsaWJmb28uc28gY2FuIGRpcmVjdGx5IGNhbGwgdGhlIG9uZSBpbiBsaWJjLnNvIGF0IHJ1bnRpbWUuCisgKgorICogV2hlbiByZWZyZXNoaW5nIHRvb2xjaGFpbnMgZm9yIG5ldyB2ZXJzaW9ucyBvciB1c2luZyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlCisgKiBmbGFncywgdGhlIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGNvcGllZCB0byBsaWJjLnNvIG1heSBjaGFuZ2UsIHdoaWNoCisgKiByZXN1bHRlZCBpbiBzb21lIG5hdGl2ZSBzaGFyZWQgbGlicmFyaWVzIGdlbmVyYXRlZCB3aXRoIHRoZSBOREsgb3IgcHJlYnVpbHRzCisgKiBmcm9tIHZlbmRvcnMgdG8gZmFpbCB0byBsb2FkIHByb3Blcmx5LgorICoKKyAqIFRoZSBOREsgaGFzIGJlZW4gZml4ZWQgYWZ0ZXIgMS42X3IxIHRvIHVzZSB0aGUgY29ycmVjdCBsaW5rIGNvbW1hbmQsIHNvCisgKiBhbnkgbmF0aXZlIHNoYXJlZCBsaWJyYXJ5IGdlbmVyYXRlZCB3aXRoIGl0IHNob3VsZCBub3cgYmUgc2FmZSBmcm9tIHRoYXQKKyAqIHByb2JsZW0uIE9uIHRoZSBvdGhlciBoYW5kLCBleGlzdGluZyBzaGFyZWQgbGlicmFyaWVzIGRpc3RyaWJ1dGVkIHdpdGgKKyAqIGFwcGxpY2F0aW9ucyB0aGF0IHdlcmUgZ2VuZXJhdGVkIHdpdGggYSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBOREsKKyAqIHN0aWxsIG5lZWQgYWxsIDEuNS8xLjYgaGVscGVyIGZ1bmN0aW9ucyBpbiBsaWJjLnNvIGFuZCBsaWJtLnNvCisgKgorICogQWZ0ZXIgMy4yLCB0aGUgdG9vbGNoYWluIHdhcyB1cGRhdGVkIGFnYWluLCBhZGRpbmcgX19hZWFiaV9mMnVpeiB0byB0aGUKKyAqIGxpc3Qgb2YgcmVxdWlyZW1lbnRzLiBUZWNobmljYWxseSwgdGhpcyBpcyBkdWUgdG8gbWlzLWxpbmtlZCBOREsgbGlicmFyaWVzCisgKiBidXQgaXQgaXMgZWFzaWVyIHRvIGFkZCBhIHNpbmdsZSBmdW5jdGlvbiBoZXJlIHRoYW4gYXNraW5nIHNldmVyYWwgYXBwCisgKiBkZXZlbG9wZXJzIHRvIGZpeCB0aGVpciBidWlsZC4KKyAqCisgKiBUaGUgX19hZWFiaV9pZGl2IGZ1bmN0aW9uIGlzIGFkZGVkIHRvIHRoZSBsaXN0IHNpbmNlIGNvcnRleC1hMTUgc3VwcG9ydHMKKyAqIEhXIGlkaXYgaW5zdHJ1Y3Rpb25zIHNvIHRoZSBzeXN0ZW0gbGliYy5zbyBkb2Vzbid0IHB1bGwgaW4gdGhlIHJlZmVyZW5jZSB0bworICogX19hZWFiaV9pZGl2IGJ1dCBsZWdhY3kgbGlicmFyaWVzIGJ1aWx0IGFnYWluc3QgY29ydGV4LWE5IHRhcmdldHMgc3RpbGwgbmVlZAorICogaXQuCisgKgorICogRmluYWwgbm90ZTogc29tZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IHNob3VsZCByZWFsbHkgYmUgaW4gbGlibS5zbyB0bworICogICAgICAgICAgICAgY29tcGxldGVseSByZWZsZWN0IHRoZSBzdGF0ZSBvZiAxLjUvMS42IHN5c3RlbSBpbWFnZXMuIEhvd2V2ZXIsCisgKiAgICAgICAgICAgICBzaW5jZSBsaWJtLnNvIGRlcGVuZHMgb24gbGliYy5zbywgaXQncyBlYXNpZXIgdG8gcHV0IGFsbCBvZgorICogICAgICAgICAgICAgdGhlc2UgaW4gbGliYy5zbyBpbnN0ZWFkLCBzaW5jZSB0aGUgZHluYW1pYyBsaW5rZXIgd2lsbCBhbHdheXMKKyAqICAgICAgICAgICAgIHNlYXJjaCBpbiBsaWJjLnNvIGJlZm9yZSBsaWJtLnNvIGZvciBkZXBlbmRlbmNpZXMuCisgKi8KKycnJworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCByZQorCitsaWJnY2NfY29tcGF0X2hlYWRlciA9ICIvKiBHZW5lcmF0ZWQgYnkgZ2VubGliZ2NjX2NvbXBhdC5weSAqL1xuXG4iCisKK2NsYXNzIEdlbmVyYXRvcjoKKyAgICBkZWYgcHJvY2VzcyhzZWxmKToKKyAgICAgICAgYW5kcm9pZF9idWlsZF90b3BfcGF0aCA9IG9zLmVudmlyb25bIkFORFJPSURfQlVJTERfVE9QIl0KKworICAgICAgICBwcmludCAiKiBBTkRST0lEX0JVSUxEX1RPUD0iICsgYW5kcm9pZF9idWlsZF90b3BfcGF0aAorCisgICAgICAgICMgQ2hlY2sgVEFSR0VUX0FSQ0gKKyAgICAgICAgYXJjaCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiQ0FMTEVEX0ZST01fU0VUVVA9dHJ1ZSBCVUlMRF9TWVNURU09YnVpbGQvY29yZSBtYWtlIC0tbm8tcHJpbnQtZGlyZWN0b3J5IC1mIGJ1aWxkL2NvcmUvY29uZmlnLm1rIGR1bXB2YXItVEFSR0VUX0FSQ0giXSwKKyAgICAgICAgICAgICAgICAgICAgY3dkPWFuZHJvaWRfYnVpbGRfdG9wX3BhdGgsIHNoZWxsPVRydWUpLnN0cmlwKCkKKworICAgICAgICBpZiBhcmNoICE9ICdhcm0nIGFuZCBhcmNoICE9ICd4ODYnOgorICAgICAgICAgICAgc3lzLmV4aXQoIkVycm9yOiBJbnZhbGlkIFRBUkdFVF9BUkNIPSciICsgYXJjaCArICInIGV4cGVjdGluZyAnYXJtJyBvciAneDg2JyIpCisKKyAgICAgICAgYnVpbGRfcGF0aCA9ICBhbmRyb2lkX2J1aWxkX3RvcF9wYXRoICsgIi9iaW9uaWMvbGliYyIKKyAgICAgICAgZmlsZV9uYW1lID0gImxpYmdjY19jb21wYXQuYyIKKyAgICAgICAgZmlsZV9wYXRoID0gYnVpbGRfcGF0aCArICIvYXJjaC0iICsgYXJjaCArICIvYmlvbmljLyIgKyBmaWxlX25hbWUKKworICAgICAgICBidWlsZF9vdXRwdXRfZmlsZV9wYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpWzFdCisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJPTkVfU0hPVF9NQUtFRklMRT1iaW9uaWMvbGliYy9BbmRyb2lkLm1rIG1ha2UgLUMgIiArIGFuZHJvaWRfYnVpbGRfdG9wX3BhdGgKKyAgICAgICAgICAgICAgICAgICAgKyAiIC1mIGJ1aWxkL2NvcmUvbWFpbi5tayBhbGxfbW9kdWxlcyBUQVJHRVRfTElCR0NDPSAtajIwIC1CIDI+JjEgfCB0ZWUgIiArIGJ1aWxkX291dHB1dF9maWxlX3BhdGhdLAorICAgICAgICAgICAgICAgICAgICBjd2Q9YnVpbGRfcGF0aCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgcC53YWl0KCkKKworICAgICAgICBwcmludCAiKiBCdWlsZCBjb21wbGV0ZSwgbG9nZmlsZTogIiArIGJ1aWxkX291dHB1dF9maWxlX3BhdGgKKworICAgICAgICBzeW1ib2xfc2V0ID0gc2V0KCkKKyAgICAgICAgcHJvZz1yZS5jb21waWxlKCIoPzw9dW5kZWZpbmVkIHJlZmVyZW5jZSB0byAnKVx3KyIpCisgICAgICAgIGZkID0gb3BlbihidWlsZF9vdXRwdXRfZmlsZV9wYXRoLCAncicpCisgICAgICAgIGZvciBsaW5lIGluIGZkOgorICAgICAgICAgICAgbSA9IHByb2cuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHN5bWJvbF9zZXQuYWRkKG0uZ3JvdXAoMCkpCisKKyAgICAgICAgZmQuY2xvc2UoKQorCisgICAgICAgIHN5bWJvbF9saXN0ID0gc29ydGVkKHN5bWJvbF9zZXQpCisKKyAgICAgICAgcHJpbnQgIiogRm91bmQgIiArIHJlcHIobGVuKHN5bWJvbF9saXN0KSkgKyAiIHJlZmVyZW5jZWQgc3ltYm9sczogIiArIHJlcHIoc3ltYm9sX2xpc3QpCisKKyAgICAgICAgaWYgMCA9PSBsZW4oc3ltYm9sX2xpc3QpOgorICAgICAgICAgICAgc3lzLmV4aXQoIkVycm9yOiBzeW1ib2wgbGlzdCBpcyBlbXB0eSwgcGxlYXNlIGNoZWNrIHRoZSBidWlsZCBsb2c6ICIgKyBidWlsZF9vdXRwdXRfZmlsZV9wYXRoKQorCisgICAgICAgIHByaW50ICIqIEdlbmVyYXRpbmcgIiArIGZpbGVfcGF0aAorICAgICAgICBmcmVzID0gb3BlbihmaWxlX3BhdGgsICd3JykKKyAgICAgICAgZnJlcy53cml0ZShsaWJnY2NfY29tcGF0X2hlYWRlcikKKworICAgICAgICBmb3Igc3ltX25hbWUgaW4gc3ltYm9sX2xpc3Q6CisgICAgICAgICAgICBmcmVzLndyaXRlKCJleHRlcm4gY2hhciAiK3N5bV9uYW1lKyI7XG4iKQorICAgICAgICBmcmVzLndyaXRlKCJcbiIpOworCisgICAgICAgIGZyZXMud3JpdGUoInZvaWQqIF9fYmlvbmljX2xpYmdjY19jb21wYXRfc3ltYm9sc1tdID0ge1xuIik7CisgICAgICAgIGZvciBzeW1fbmFtZSBpbiBzeW1ib2xfbGlzdDoKKyAgICAgICAgICAgIGZyZXMud3JpdGUoIiAgICAmIitzeW1fbmFtZSsiLFxuIikKKyAgICAgICAgZnJlcy53cml0ZSgifTtcbiIpOworCisgICAgICAgIGZyZXMuY2xvc2UoKQorCitnZW5lcmF0b3IgPSBHZW5lcmF0b3IoKQorZ2VuZXJhdG9yLnByb2Nlc3MoKQorCmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL2dlbnN5c2NhbGxzLnB5IGIvbGliYy90b29scy9nZW5zeXNjYWxscy5weQppbmRleCA5N2RjNjI4Li5lOGVjNjM2IDEwMDc1NQotLS0gYS9saWJjL3Rvb2xzL2dlbnN5c2NhbGxzLnB5CisrKyBiL2xpYmMvdG9vbHMvZ2Vuc3lzY2FsbHMucHkKQEAgLTQ4LDggKzQ4LDggQEAKIAogCiBmdW5jdGlvbl9hbGlhcyA9ICIiIgotICAgIC5nbG9ibCBfQ19MQUJFTCglKGFsaWFzKXMpCi0gICAgLmVxdSBfQ19MQUJFTCglKGFsaWFzKXMpLCBfQ19MQUJFTCglKGZ1bmMpcykKKyAgICAuZ2xvYmwgJShhbGlhcylzCisgICAgLmVxdSAlKGFsaWFzKXMsICUoZnVuYylzCiAiIiIKIAogCkBAIC02NSwxMyArNjUsMTIgQEAKICAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgYnhscyAgICBscgogICAgIG5lZyAgICAgcjAsIHIwCi0gICAgYiAgICAgICBfX3NldF9lcnJubworICAgIGIgICAgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIEVORCglKGZ1bmMpcykKICIiIgogCiBhcm1fZWFiaV9jYWxsX2xvbmcgPSBzeXNjYWxsX3N0dWJfaGVhZGVyICsgIiIiXAogICAgIG1vdiAgICAgaXAsIHNwCi0gICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CiAgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KICAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDE2CiAgICAgLmNmaV9yZWxfb2Zmc2V0IHI0LCAwCkBAIC04Niw3ICs4NSw3IEBACiAgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQogICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGIgICAgICAgX19zZXRfZXJybm8KKyAgICBiICAgICAgIF9fc2V0X2Vycm5vX2ludGVybmFsCiBFTkQoJShmdW5jKXMpCiAiIiIKIApAQCAtOTYsMTkgKzk1LDEyIEBACiAjCiAKIGFybTY0X2NhbGwgPSBzeXNjYWxsX3N0dWJfaGVhZGVyICsgIiIiXAotICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCi0gICAgbW92ICAgICB4MjksICBzcAotICAgIHN0ciAgICAgeDgsICAgICAgIFtzcCwgIy0xNl0hCi0KICAgICBtb3YgICAgIHg4LCAlKF9fTlJfbmFtZSlzCiAgICAgc3ZjICAgICAjMAogCi0gICAgbGRyICAgICB4OCwgICAgICAgW3NwXSwgIzE2Ci0gICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2Ci0KICAgICBjbW4gICAgIHgwLCAjKE1BWF9FUlJOTyArIDEpCiAgICAgY25lZyAgICB4MCwgeDAsIGhpCi0gICAgYi5oaSAgICBfX3NldF9lcnJubworICAgIGIuaGkgICAgX19zZXRfZXJybm9faW50ZXJuYWwKIAogICAgIHJldAogRU5EKCUoZnVuYylzKQpAQCAtMTE5LDI5ICsxMTEsNDkgQEAKICMgTUlQUyBhc3NlbWJsZXIgdGVtcGxhdGVzIGZvciBlYWNoIHN5c2NhbGwgc3R1YgogIwogCi1taXBzX2NhbGwgPSAiLyogIiArIHdhcm5pbmcgKyAiICovXG4iICsgXAotIiIiCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsICUoZnVuYylzCi0gICAgLmFsaWduIDQKLSAgICAuZW50ICUoZnVuYylzCi0KLSUoZnVuYylzOgorbWlwc19jYWxsID0gc3lzY2FsbF9zdHViX2hlYWRlciArICIiIlwKICAgICAuc2V0IG5vcmVvcmRlcgotICAgIC5jcGxvYWQgJHQ5Ci0gICAgbGkgJHYwLCAlKF9fTlJfbmFtZSlzCisgICAgLmNwbG9hZCB0OQorICAgIGxpIHYwLCAlKF9fTlJfbmFtZSlzCiAgICAgc3lzY2FsbAotICAgIGJuZXogJGEzLCAxZgotICAgIG1vdmUgJGEwLCAkdjAKLSAgICBqICRyYQorICAgIGJuZXogYTMsIDFmCisgICAgbW92ZSBhMCwgdjAKKyAgICBqIHJhCiAgICAgbm9wCiAxOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5CisgICAgbGEgdDksX19zZXRfZXJybm9faW50ZXJuYWwKKyAgICBqIHQ5CiAgICAgbm9wCiAgICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCAlKGZ1bmMpcworRU5EKCUoZnVuYylzKQorIiIiCisKKworIworIyBNSVBTNjQgYXNzZW1ibGVyIHRlbXBsYXRlcyBmb3IgZWFjaCBzeXNjYWxsIHN0dWIKKyMKKworbWlwczY0X2NhbGwgPSBzeXNjYWxsX3N0dWJfaGVhZGVyICsgIiIiXAorICAgIC5zZXQgcHVzaAorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgbGkgdjAsICUoX19OUl9uYW1lKXMKKyAgICBzeXNjYWxsCisgICAgYm5leiBhMywgMWYKKyAgICBtb3ZlIGEwLCB2MAorICAgIGogcmEKKyAgICBub3AKKzE6CisgICAgbW92ZSB0MCwgcmEKKyAgICBiYWwgICAgIDJmCisgICAgbm9wCisyOgorICAgIC5jcHNldHVwIHJhLCB0MSwgMmIKKyAgICBMQSB0OSxfX3NldF9lcnJub19pbnRlcm5hbAorICAgIC5jcHJldHVybgorICAgIGogdDkKKyAgICBtb3ZlIHJhLCB0MAorICAgIC5zZXQgcG9wCitFTkQoJShmdW5jKXMpCiAiIiIKIAogCkBAIC0xNTgsOSArMTcwLDggQEAKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlJWVheAogICAgIHB1c2hsICAgJSVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogICAgIGFkZGwgICAgJDQsICUlZXNwCi0gICAgb3JsICAgICAkLTEsICUlZWF4CiAxOgogIiIiCiAKQEAgLTE4MSw4ICsxOTIsNyBAQAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICUlZWF4CiAgICAgbW92bCAgICAlJWVheCwgJSVlZGkKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgb3JxICAgICAkLTEsICUlcmF4CisgICAgY2FsbCAgICBfX3NldF9lcnJub19pbnRlcm5hbAogMToKICAgICByZXQKIEVORCglKGZ1bmMpcykKQEAgLTI2OSw3ICsyNzksNyBAQAogCiAgICAgIyBVc2UgaGlkZGVuIHZpc2liaWxpdHkgZm9yIGFueSBmdW5jdGlvbnMgYmVnaW5uaW5nIHdpdGggdW5kZXJzY29yZXMuCiAgICAgaWYgcG9pbnRlcl9sZW5ndGggPT0gNjQgYW5kIHN5c2NhbGxbImZ1bmMiXS5zdGFydHN3aXRoKCJfXyIpOgotICAgICAgICBzdHViICs9ICcuaGlkZGVuIF9DX0xBQkVMKCcgKyBzeXNjYWxsWyJmdW5jIl0gKyAnKVxuJworICAgICAgICBzdHViICs9ICcuaGlkZGVuICcgKyBzeXNjYWxsWyJmdW5jIl0gKyAnXG4nCiAKICAgICByZXR1cm4gc3R1YgogCkBAIC0yODksNiArMjk5LDEwIEBACiAgICAgcmV0dXJuIG1pcHNfY2FsbCAlIHN5c2NhbGwKIAogCitkZWYgbWlwczY0X2dlbnN0dWIoc3lzY2FsbCk6CisgICAgcmV0dXJuIG1pcHM2NF9jYWxsICUgc3lzY2FsbAorCisKIGRlZiB4ODZfZ2Vuc3R1YihzeXNjYWxsKToKICAgICByZXN1bHQgICAgID0gc3lzY2FsbF9zdHViX2hlYWRlciAlIHN5c2NhbGwKIApAQCAtMjk2LDE3ICszMTAsMjAgQEAKICAgICBzdGFja19iaWFzID0gbnVtcGFyYW1zKjQgKyA0CiAgICAgb2Zmc2V0ID0gMAogICAgIG1vdl9yZXN1bHQgPSAiIgotICAgIGNmaV9yZXN1bHQgPSAiICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgJWRcbiIgJSAobnVtcGFyYW1zKjQpCisgICAgZmlyc3RfcHVzaCA9IFRydWUKICAgICBmb3IgcmVnaXN0ZXIgaW4geDg2X3JlZ2lzdGVyc1s6bnVtcGFyYW1zXToKICAgICAgICAgcmVzdWx0ICAgICArPSAiICAgIHB1c2hsICAgJSUlc1xuIiAlIHJlZ2lzdGVyCisgICAgICAgIGlmIGZpcnN0X3B1c2g6CisgICAgICAgICAgcmVzdWx0ICAgKz0gIiAgICAuY2ZpX2RlZl9jZmFfb2Zmc2V0IDhcbiIKKyAgICAgICAgICByZXN1bHQgICArPSAiICAgIC5jZmlfcmVsX29mZnNldCAlcywgMFxuIiAlIHJlZ2lzdGVyCisgICAgICAgICAgZmlyc3RfcHVzaCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgcmVzdWx0ICAgKz0gIiAgICAuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IDRcbiIKKyAgICAgICAgICByZXN1bHQgICArPSAiICAgIC5jZmlfcmVsX29mZnNldCAlcywgMFxuIiAlIHJlZ2lzdGVyCiAgICAgICAgIG1vdl9yZXN1bHQgKz0gIiAgICBtb3YgICAgICVkKCUlZXNwKSwgJSUlc1xuIiAlIChzdGFja19iaWFzK29mZnNldCwgcmVnaXN0ZXIpCi0gICAgICAgIGNmaV9yZXN1bHQgKz0gIiAgICAuY2ZpX3JlbF9vZmZzZXQgJXMsICVkXG4iICUgKHJlZ2lzdGVyLCBvZmZzZXQpCiAgICAgICAgIG9mZnNldCArPSA0CiAKLSAgICBpZiBudW1wYXJhbXM6Ci0gICAgICAgIHJlc3VsdCArPSBjZmlfcmVzdWx0Ci0gICAgICAgIHJlc3VsdCArPSBtb3ZfcmVzdWx0Ci0KKyAgICByZXN1bHQgKz0gbW92X3Jlc3VsdAogICAgIHJlc3VsdCArPSB4ODZfY2FsbCAlIHN5c2NhbGwKIAogICAgIGZvciByZWdpc3RlciBpbiByZXZlcnNlZCh4ODZfcmVnaXN0ZXJzWzpudW1wYXJhbXNdKToKQEAgLTMyNiwxMCArMzQzLDExIEBACiAKICAgICAjIHNhdmUgdGhlIHJlZ3Mgd2UgbmVlZAogICAgIHJlc3VsdCArPSAiICAgIHB1c2hsICAgJWVieFxuIgotICAgIHJlc3VsdCArPSAiICAgIHB1c2hsICAgJWVjeFxuIgogICAgIHJlc3VsdCArPSAiICAgIC5jZmlfZGVmX2NmYV9vZmZzZXQgOFxuIgogICAgIHJlc3VsdCArPSAiICAgIC5jZmlfcmVsX29mZnNldCBlYngsIDBcbiIKLSAgICByZXN1bHQgKz0gIiAgICAuY2ZpX3JlbF9vZmZzZXQgZWN4LCA0XG4iCisgICAgcmVzdWx0ICs9ICIgICAgcHVzaGwgICAlZWN4XG4iCisgICAgcmVzdWx0ICs9ICIgICAgLmNmaV9hZGp1c3RfY2ZhX29mZnNldCA0XG4iCisgICAgcmVzdWx0ICs9ICIgICAgLmNmaV9yZWxfb2Zmc2V0IGVjeCwgMFxuIgogICAgIHN0YWNrX2JpYXMgPSAxMgogCiAgICAgIyBzZXQgdGhlIGNhbGwgaWQgKCVlYngpCkBAIC0zOTcsNiArNDE1LDkgQEAKICAgICAgICAgICAgIGlmIHN5c2NhbGwuaGFzX2tleSgibWlwcyIpOgogICAgICAgICAgICAgICAgIHN5c2NhbGxbImFzbS1taXBzIl0gPSBhZGRfZm9vdGVyKDMyLCBtaXBzX2dlbnN0dWIoc3lzY2FsbCksIHN5c2NhbGwpCiAKKyAgICAgICAgICAgIGlmIHN5c2NhbGwuaGFzX2tleSgibWlwczY0Iik6CisgICAgICAgICAgICAgICAgc3lzY2FsbFsiYXNtLW1pcHM2NCJdID0gYWRkX2Zvb3Rlcig2NCwgbWlwczY0X2dlbnN0dWIoc3lzY2FsbCksIHN5c2NhbGwpCisKICAgICAgICAgICAgIGlmIHN5c2NhbGwuaGFzX2tleSgieDg2XzY0Iik6CiAgICAgICAgICAgICAgICAgc3lzY2FsbFsiYXNtLXg4Nl82NCJdID0gYWRkX2Zvb3Rlcig2NCwgeDg2XzY0X2dlbnN0dWIoc3lzY2FsbCksIHN5c2NhbGwpCiAKQEAgLTQzOSwyMCArNDYwLDYgQEAKICAgICAgICAgc2VsZi5vdGhlcl9maWxlcy5hcHBlbmQoZ2xpYmNfc3lzY2FsbHNfaF9wYXRoKQogCiAKLSAgICAjIFdyaXRlIHRoZSBjb250ZW50cyBvZiBzeXNjYWxscy5tay4KLSAgICBkZWYgZ2VuX2FyY2hfc3lzY2FsbHNfbWsoc2VsZiwgYXJjaCk6Ci0gICAgICAgIHBhdGggPSAiYXJjaC0lcy9zeXNjYWxscy5tayIgJSBhcmNoCi0gICAgICAgIEQoImdlbmVyYXRpbmcgIiArIHBhdGgpCi0gICAgICAgIGZwID0gY3JlYXRlX2ZpbGUocGF0aCkKLSAgICAgICAgZnAud3JpdGUoIiMgJXNcbiIgJSB3YXJuaW5nKQotICAgICAgICBmcC53cml0ZSgic3lzY2FsbF9zcmMgOj1cbiIpCi0gICAgICAgIGZvciBzeXNjYWxsIGluIHNvcnRlZChzZWxmLnN5c2NhbGxzLCBrZXk9bGFtYmRhIHN5c2NhbGw6IHN5c2NhbGxbImZ1bmMiXSk6Ci0gICAgICAgICAgICBpZiBzeXNjYWxsLmhhc19rZXkoImFzbS0lcyIgJSBhcmNoKToKLSAgICAgICAgICAgICAgICBmcC53cml0ZSgic3lzY2FsbF9zcmMgKz0gYXJjaC0lcy9zeXNjYWxscy8lcy5TXG4iICUgKGFyY2gsIHN5c2NhbGxbImZ1bmMiXSkpCi0gICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgc2VsZi5vdGhlcl9maWxlcy5hcHBlbmQocGF0aCkKLQotCiAgICAgIyBXcml0ZSBlYWNoIHN5c2NhbGwgc3R1Yi4KICAgICBkZWYgZ2VuX3N5c2NhbGxfc3R1YnMoc2VsZik6CiAgICAgICAgIGZvciBzeXNjYWxsIGluIHNlbGYuc3lzY2FsbHM6CkBAIC00ODcsOCArNDk0LDYgQEAKICAgICAgICAgRCgicmUtZ2VuZXJhdGluZyBzdHVicyBhbmQgc3VwcG9ydCBmaWxlcy4uLiIpCiAKICAgICAgICAgc2VsZi5nZW5fZ2xpYmNfc3lzY2FsbHNfaCgpCi0gICAgICAgIGZvciBhcmNoIGluIGFsbF9hcmNoZXM6Ci0gICAgICAgICAgICBzZWxmLmdlbl9hcmNoX3N5c2NhbGxzX21rKGFyY2gpCiAgICAgICAgIHNlbGYuZ2VuX3N5c2NhbGxfc3R1YnMoKQogCiAgICAgICAgIEQoImNvbXBhcmluZyBmaWxlcy4uLiIpCmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL3pvbmVpbmZvL1pvbmVDb21wYWN0b3IuamF2YSBiL2xpYmMvdG9vbHMvem9uZWluZm8vWm9uZUNvbXBhY3Rvci5qYXZhCmluZGV4IGY0N2FmZDEuLmJmMzE1M2UgMTAwNjQ0Ci0tLSBhL2xpYmMvdG9vbHMvem9uZWluZm8vWm9uZUNvbXBhY3Rvci5qYXZhCisrKyBiL2xpYmMvdG9vbHMvem9uZWluZm8vWm9uZUNvbXBhY3Rvci5qYXZhCkBAIC0xLDkgKzEsNiBAQAogCiBpbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsKIGltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBsaWJjb3JlLmlvLkJ1ZmZlckl0ZXJhdG9yOwotaW1wb3J0IGxpYmNvcmUudXRpbC5ab25lSW5mbzsKIAogLy8gdXNhZ2U6IGphdmEgWm9uZUNvbXBpbGVyIDxzZXR1cCBmaWxlPiA8ZGF0YSBkaXJlY3Rvcnk+IDxvdXRwdXQgZGlyZWN0b3J5PiA8dHpkYXRhIHZlcnNpb24+CiAvLwpAQCAtMjcsNjYgKzI0LDIwIEBACiAvLwogCiBwdWJsaWMgY2xhc3MgWm9uZUNvbXBhY3RvciB7Ci0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnl0ZUFycmF5QnVmZmVySXRlcmF0b3JCRSBleHRlbmRzIEJ1ZmZlckl0ZXJhdG9yIHsKLSAgICBwcml2YXRlIGZpbmFsIGJ5dGVbXSBieXRlczsKLSAgICBwcml2YXRlIGludCBvZmZzZXQgPSAwOwotCi0gICAgcHVibGljIEJ5dGVBcnJheUJ1ZmZlckl0ZXJhdG9yQkUoYnl0ZVtdIGJ5dGVzKSB7Ci0gICAgICB0aGlzLmJ5dGVzID0gYnl0ZXM7Ci0gICAgICB0aGlzLm9mZnNldCA9IDA7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2VlayhpbnQgb2Zmc2V0KSB7Ci0gICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBza2lwKGludCBieXRlQ291bnQpIHsKLSAgICAgIHRoaXMub2Zmc2V0ICs9IGJ5dGVDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZWFkQnl0ZUFycmF5KGJ5dGVbXSBkc3QsIGludCBkc3RPZmZzZXQsIGludCBieXRlQ291bnQpIHsKLSAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnl0ZXMsIG9mZnNldCwgZHN0LCBkc3RPZmZzZXQsIGJ5dGVDb3VudCk7Ci0gICAgICBvZmZzZXQgKz0gYnl0ZUNvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyBieXRlIHJlYWRCeXRlKCkgewotICAgICAgcmV0dXJuIGJ5dGVzW29mZnNldCsrXTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IHJlYWRJbnQoKSB7Ci0gICAgICByZXR1cm4gKChyZWFkQnl0ZSgpICYgMHhmZikgPDwgMjQpIHwgKChyZWFkQnl0ZSgpICYgMHhmZikgPDwgMTYpIHwgKChyZWFkQnl0ZSgpICYgMHhmZikgPDwgOCkgfCAocmVhZEJ5dGUoKSAmIDB4ZmYpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlYWRJbnRBcnJheShpbnRbXSBkc3QsIGludCBkc3RPZmZzZXQsIGludCBpbnRDb3VudCkgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRDb3VudDsgKytpKSB7Ci0gICAgICAgIGRzdFtkc3RPZmZzZXQrK10gPSByZWFkSW50KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHNob3J0IHJlYWRTaG9ydCgpIHsKLSAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLSAgfQotCi0gIC8vIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYSB6b25lIG5hbWUsIGluY2x1ZGluZyAnXDAnIHRlcm1pbmF0b3IKKyAgLy8gTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBhIHpvbmUgbmFtZSwgaW5jbHVkaW5nICdcMCcgdGVybWluYXRvci4KICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWE5BTUUgPSA0MDsKIAotICAvLyBab25lIG5hbWUgc3lub255bXMKKyAgLy8gWm9uZSBuYW1lIHN5bm9ueW1zLgogICBwcml2YXRlIE1hcDxTdHJpbmcsU3RyaW5nPiBsaW5rcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7CiAKLSAgLy8gRmlsZSBzdGFydGluZyBieXRlcyBieSB6b25lIG5hbWUKLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLEludGVnZXI+IHN0YXJ0cyA9IG5ldyBIYXNoTWFwPFN0cmluZyxJbnRlZ2VyPigpOworICAvLyBGaWxlIG9mZnNldHMgYnkgem9uZSBuYW1lLgorICBwcml2YXRlIE1hcDxTdHJpbmcsSW50ZWdlcj4gb2Zmc2V0cyA9IG5ldyBIYXNoTWFwPFN0cmluZyxJbnRlZ2VyPigpOwogCi0gIC8vIEZpbGUgbGVuZ3RocyBieSB6b25lIG5hbWUKKyAgLy8gRmlsZSBsZW5ndGhzIGJ5IHpvbmUgbmFtZS4KICAgcHJpdmF0ZSBNYXA8U3RyaW5nLEludGVnZXI+IGxlbmd0aHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsSW50ZWdlcj4oKTsKIAotICAvLyBSYXcgR01UIG9mZnNldHMgYnkgem9uZSBuYW1lCi0gIHByaXZhdGUgTWFwPFN0cmluZyxJbnRlZ2VyPiBvZmZzZXRzID0gbmV3IEhhc2hNYXA8U3RyaW5nLEludGVnZXI+KCk7Ci0gIHByaXZhdGUgaW50IHN0YXJ0ID0gMDsKLQotICAvLyBDb25jYXRlbmF0ZSB0aGUgY29udGVudHMgb2YgJ2luRmlsZScgb250byAnb3V0JwotICAvLyBhbmQgcmV0dXJuIHRoZSBjb250ZW50cyBhcyBhIGJ5dGUgYXJyYXkuCi0gIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBjb3B5RmlsZShGaWxlIGluRmlsZSwgT3V0cHV0U3RyZWFtIG91dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgIC8vIENvbmNhdGVuYXRlIHRoZSBjb250ZW50cyBvZiAnaW5GaWxlJyBvbnRvICdvdXQnLgorICBwcml2YXRlIHN0YXRpYyB2b2lkIGNvcHlGaWxlKEZpbGUgaW5GaWxlLCBPdXRwdXRTdHJlYW0gb3V0KSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICBieXRlW10gcmV0ID0gbmV3IGJ5dGVbMF07CiAKICAgICBJbnB1dFN0cmVhbSBpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oaW5GaWxlKTsKQEAgLTEwNCwxNCArNTUsMTQgQEAKICAgICAgIHJldCA9IG5yZXQ7CiAgICAgfQogICAgIG91dC5mbHVzaCgpOwotICAgIHJldHVybiByZXQ7CiAgIH0KIAogICBwdWJsaWMgWm9uZUNvbXBhY3RvcihTdHJpbmcgc2V0dXBGaWxlLCBTdHJpbmcgZGF0YURpcmVjdG9yeSwgU3RyaW5nIHpvbmVUYWJGaWxlLCBTdHJpbmcgb3V0cHV0RGlyZWN0b3J5LCBTdHJpbmcgdmVyc2lvbikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gUmVhZCB0aGUgc2V0dXAgZmlsZSwgYW5kIGNvbmNhdGVuYXRlIGFsbCB0aGUgZGF0YS4KKyAgICAvLyBSZWFkIHRoZSBzZXR1cCBmaWxlIGFuZCBjb25jYXRlbmF0ZSBhbGwgdGhlIGRhdGEuCiAgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFsbERhdGEgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CiAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHNldHVwRmlsZSkpOwogICAgIFN0cmluZyBzOworICAgIGludCBvZmZzZXQgPSAwOwogICAgIHdoaWxlICgocyA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICBzID0gcy50cmltKCk7CiAgICAgICBpZiAocy5zdGFydHNXaXRoKCJMaW5rIikpIHsKQEAgLTEyNSwxNiArNzYsMTEgQEAKICAgICAgICAgaWYgKGxpbmsgPT0gbnVsbCkgewogICAgICAgICAgIEZpbGUgc291cmNlRmlsZSA9IG5ldyBGaWxlKGRhdGFEaXJlY3RvcnksIHMpOwogICAgICAgICAgIGxvbmcgbGVuZ3RoID0gc291cmNlRmlsZS5sZW5ndGgoKTsKLSAgICAgICAgICBzdGFydHMucHV0KHMsIHN0YXJ0KTsKKyAgICAgICAgICBvZmZzZXRzLnB1dChzLCBvZmZzZXQpOwogICAgICAgICAgIGxlbmd0aHMucHV0KHMsIChpbnQpIGxlbmd0aCk7CiAKLSAgICAgICAgICBzdGFydCArPSBsZW5ndGg7Ci0gICAgICAgICAgYnl0ZVtdIGRhdGEgPSBjb3B5RmlsZShzb3VyY2VGaWxlLCBhbGxEYXRhKTsKLQotICAgICAgICAgIEJ1ZmZlckl0ZXJhdG9yIGl0ID0gbmV3IEJ5dGVBcnJheUJ1ZmZlckl0ZXJhdG9yQkUoZGF0YSk7Ci0gICAgICAgICAgVGltZVpvbmUgdHogPSBab25lSW5mby5tYWtlVGltZVpvbmUocywgaXQpOwotICAgICAgICAgIGludCBnbXRPZmZzZXQgPSB0ei5nZXRSYXdPZmZzZXQoKTsKLSAgICAgICAgICBvZmZzZXRzLnB1dChzLCBnbXRPZmZzZXQpOworICAgICAgICAgIG9mZnNldCArPSBsZW5ndGg7CisgICAgICAgICAgY29weUZpbGUoc291cmNlRmlsZSwgYWxsRGF0YSk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0xNDYsOSArOTIsOCBAQAogICAgICAgU3RyaW5nIGZyb20gPSBpdC5uZXh0KCk7CiAgICAgICBTdHJpbmcgdG8gPSBsaW5rcy5nZXQoZnJvbSk7CiAKLSAgICAgIHN0YXJ0cy5wdXQoZnJvbSwgc3RhcnRzLmdldCh0bykpOwotICAgICAgbGVuZ3Rocy5wdXQoZnJvbSwgbGVuZ3Rocy5nZXQodG8pKTsKICAgICAgIG9mZnNldHMucHV0KGZyb20sIG9mZnNldHMuZ2V0KHRvKSk7CisgICAgICBsZW5ndGhzLnB1dChmcm9tLCBsZW5ndGhzLmdldCh0bykpOwogICAgIH0KIAogICAgIC8vIENyZWF0ZS90cnVuY2F0ZSB0aGUgZGVzdGluYXRpb24gZmlsZS4KQEAgLTE3OCw3ICsxMjMsNyBAQAogCiAgICAgLy8gV3JpdGUgdGhlIGluZGV4LgogICAgIEFycmF5TGlzdDxTdHJpbmc+IHNvcnRlZE9sc29uSWRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgc29ydGVkT2xzb25JZHMuYWRkQWxsKHN0YXJ0cy5rZXlTZXQoKSk7CisgICAgc29ydGVkT2xzb25JZHMuYWRkQWxsKG9mZnNldHMua2V5U2V0KCkpOwogICAgIENvbGxlY3Rpb25zLnNvcnQoc29ydGVkT2xzb25JZHMpOwogICAgIGl0ID0gc29ydGVkT2xzb25JZHMuaXRlcmF0b3IoKTsKICAgICB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CkBAIC0xODgsOSArMTMzLDkgQEAKICAgICAgIH0KIAogICAgICAgZi53cml0ZSh0b0FzY2lpKG5ldyBieXRlW01BWE5BTUVdLCB6b25lTmFtZSkpOwotICAgICAgZi53cml0ZUludChzdGFydHMuZ2V0KHpvbmVOYW1lKSk7Ci0gICAgICBmLndyaXRlSW50KGxlbmd0aHMuZ2V0KHpvbmVOYW1lKSk7CiAgICAgICBmLndyaXRlSW50KG9mZnNldHMuZ2V0KHpvbmVOYW1lKSk7CisgICAgICBmLndyaXRlSW50KGxlbmd0aHMuZ2V0KHpvbmVOYW1lKSk7CisgICAgICBmLndyaXRlSW50KDApOyAvLyBVc2VkIHRvIGJlIHJhdyBHTVQgb2Zmc2V0LiBObyBsb25nZXIgdXNlZC4KICAgICB9CiAKICAgICBpbnQgZGF0YV9vZmZzZXQgPSAoaW50KSBmLmdldEZpbGVQb2ludGVyKCk7CmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL3pvbmVpbmZvL3VwZGF0ZS10emRhdGEucHkgYi9saWJjL3Rvb2xzL3pvbmVpbmZvL3VwZGF0ZS10emRhdGEucHkKaW5kZXggODk1NjEzNi4uZTgwMGU4ZiAxMDA3NTUKLS0tIGEvbGliYy90b29scy96b25laW5mby91cGRhdGUtdHpkYXRhLnB5CisrKyBiL2xpYmMvdG9vbHMvem9uZWluZm8vdXBkYXRlLXR6ZGF0YS5weQpAQCAtMSwzNiArMSw0MCBAQAogIyEvdXNyL2Jpbi9weXRob24KIAotIiIiVXBkYXRlcyB0aGUgdHpkYXRhIGZpbGUuIiIiCisiIiJVcGRhdGVzIHRoZSB0aW1lem9uZSBkYXRhIGhlbGQgaW4gYmlvbmljIGFuZCBJQ1UuIiIiCiAKIGltcG9ydCBmdHBsaWIKK2ltcG9ydCBnbG9iCiBpbXBvcnQgaHR0cGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGFyZmlsZQogaW1wb3J0IHRlbXBmaWxlCiAKLSMgRmluZCB0aGUgYmlvbmljIGRpcmVjdG9yeSwgc2VhcmNoaW5nIHVwd2FyZCBmcm9tIHRoaXMgc2NyaXB0LgotYmlvbmljX2xpYmNfdG9vbHNfem9uZWluZm9fZGlyID0gb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pKQotYmlvbmljX2xpYmNfdG9vbHNfZGlyID0gb3MucGF0aC5kaXJuYW1lKGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2RpcikKLWJpb25pY19saWJjX2RpciA9IG9zLnBhdGguZGlybmFtZShiaW9uaWNfbGliY190b29sc19kaXIpCi1iaW9uaWNfZGlyID0gb3MucGF0aC5kaXJuYW1lKGJpb25pY19saWJjX2RpcikKLWJpb25pY19saWJjX3pvbmVpbmZvX2RpciA9ICclcy9saWJjL3pvbmVpbmZvJyAlIGJpb25pY19kaXIKLQotaWYgbm90IG9zLnBhdGguaXNkaXIoYmlvbmljX2xpYmNfdG9vbHNfem9uZWluZm9fZGlyKToKLSAgcHJpbnQgIkNvdWxkbid0IGZpbmQgYmlvbmljL2xpYmMvdG9vbHMvem9uZWluZm8hIgotICBzeXMuZXhpdCgxKQotaWYgbm90IG9zLnBhdGguaXNkaXIoYmlvbmljX2xpYmNfem9uZWluZm9fZGlyKToKLSAgcHJpbnQgIkNvdWxkbid0IGZpbmQgYmlvbmljL2xpYmMvem9uZWluZm8hIgotICBzeXMuZXhpdCgxKQotCi1wcmludCAnRm91bmQgYmlvbmljIGluICVzLi4uJyAlIGJpb25pY19kaXIKLQotCiByZWdpb25zID0gWydhZnJpY2EnLCAnYW50YXJjdGljYScsICdhc2lhJywgJ2F1c3RyYWxhc2lhJywgJ2JhY2t3YXJkJywKICAgICAgICAgICAgJ2V0Y2V0ZXJhJywgJ2V1cm9wZScsICdub3J0aGFtZXJpY2EnLCAnc291dGhhbWVyaWNhJ10KIAorZGVmIENoZWNrRGlyRXhpc3RzKGRpciwgZGlybmFtZSk6CisgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRpcik6CisgICAgcHJpbnQgIkNvdWxkbid0IGZpbmQgJXMgKCVzKSEiICUgKGRpcm5hbWUsIGRpcikKKyAgICBzeXMuZXhpdCgxKQorCitiaW9uaWNfbGliY190b29sc196b25laW5mb19kaXIgPSBvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguZGlybmFtZShzeXMuYXJndlswXSkpCisKKyMgRmluZCB0aGUgYmlvbmljIGRpcmVjdG9yeSwgc2VhcmNoaW5nIHVwd2FyZCBmcm9tIHRoaXMgc2NyaXB0LgorYmlvbmljX2RpciA9IG9zLnBhdGgucmVhbHBhdGgoJyVzLy4uLy4uLy4uJyAlIGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2RpcikKK2Jpb25pY19saWJjX3pvbmVpbmZvX2RpciA9ICclcy9saWJjL3pvbmVpbmZvJyAlIGJpb25pY19kaXIKK0NoZWNrRGlyRXhpc3RzKGJpb25pY19saWJjX3pvbmVpbmZvX2RpciwgJ2Jpb25pYy9saWJjL3pvbmVpbmZvJykKK0NoZWNrRGlyRXhpc3RzKGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2RpciwgJ2Jpb25pYy9saWJjL3Rvb2xzL3pvbmVpbmZvJykKK3ByaW50ICdGb3VuZCBiaW9uaWMgaW4gJXMgLi4uJyAlIGJpb25pY19kaXIKKworIyBGaW5kIHRoZSBpY3U0YyBkaXJlY3RvcnkuCitpY3VfZGlyID0gb3MucGF0aC5yZWFscGF0aCgnJXMvLi4vZXh0ZXJuYWwvaWN1L2ljdTRjL3NvdXJjZScgJSBiaW9uaWNfZGlyKQorQ2hlY2tEaXJFeGlzdHMoaWN1X2RpciwgJ2V4dGVybmFsL2ljdS9pY3U0Yy9zb3VyY2UnKQorcHJpbnQgJ0ZvdW5kIGljdSBpbiAlcyAuLi4nICUgaWN1X2RpcgorCiAKIGRlZiBHZXRDdXJyZW50VHpEYXRhVmVyc2lvbigpOgogICByZXR1cm4gb3BlbignJXMvdHpkYXRhJyAlIGJpb25pY19saWJjX3pvbmVpbmZvX2RpcikucmVhZCgpLnNwbGl0KCdceDAwJywgMSlbMF0KQEAgLTY1LDUwICs2OSw4MSBAQAogICBwcmludCAnQ3JlYXRlZCB0ZW1wb3JhcnkgZGlyZWN0b3J5ICIlcyIuLi4nICUgdG1wX2RpcgogCiAKLWRlZiBGdHBSZXRyaWV2ZShmdHAsIGZpbGVuYW1lKToKK2RlZiBGdHBSZXRyaWV2ZUZpbGUoZnRwLCBmaWxlbmFtZSk6CiAgIGZ0cC5yZXRyYmluYXJ5KCdSRVRSICVzJyAlIGZpbGVuYW1lLCBvcGVuKGZpbGVuYW1lLCAnd2InKS53cml0ZSkKIAogCi1kZWYgRnRwVXBncmFkZShmdHAsIGRhdGFfZmlsZW5hbWUpOgorZGVmIEZ0cFJldHJpZXZlRmlsZUFuZFNpZ25hdHVyZShmdHAsIGRhdGFfZmlsZW5hbWUpOgogICAiIiJEb3dubG9hZHMgYW5kIHJlcGFja2FnZXMgdGhlIGdpdmVuIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gRlRQIHNlcnZlci4iIiIKLSAgU3dpdGNoVG9OZXdUZW1wb3JhcnlEaXJlY3RvcnkoKQotCiAgIHByaW50ICdEb3dubG9hZGluZyBkYXRhLi4uJwotICBGdHBSZXRyaWV2ZShmdHAsIGRhdGFfZmlsZW5hbWUpCisgIEZ0cFJldHJpZXZlRmlsZShmdHAsIGRhdGFfZmlsZW5hbWUpCiAKICAgcHJpbnQgJ0Rvd25sb2FkaW5nIHNpZ25hdHVyZS4uLicKICAgc2lnbmF0dXJlX2ZpbGVuYW1lID0gJyVzLmFzYycgJSBkYXRhX2ZpbGVuYW1lCi0gIEZ0cFJldHJpZXZlKGZ0cCwgc2lnbmF0dXJlX2ZpbGVuYW1lKQotCi0gIEV4dHJhY3RBbmRDb21waWxlKGRhdGFfZmlsZW5hbWUpCisgIEZ0cFJldHJpZXZlRmlsZShmdHAsIHNpZ25hdHVyZV9maWxlbmFtZSkKIAogCi1kZWYgSHR0cFJldHJpZXZlKGh0dHAsIHBhdGgsIG91dHB1dF9maWxlbmFtZSk6CitkZWYgSHR0cFJldHJpZXZlRmlsZShodHRwLCBwYXRoLCBvdXRwdXRfZmlsZW5hbWUpOgogICBodHRwLnJlcXVlc3QoIkdFVCIsIHBhdGgpCiAgIGYgPSBvcGVuKG91dHB1dF9maWxlbmFtZSwgJ3diJykKICAgZi53cml0ZShodHRwLmdldHJlc3BvbnNlKCkucmVhZCgpKQogICBmLmNsb3NlKCkKIAogCi1kZWYgSHR0cFVwZ3JhZGUoaHR0cCwgZGF0YV9maWxlbmFtZSk6CitkZWYgSHR0cFJldHJpZXZlRmlsZUFuZFNpZ25hdHVyZShodHRwLCBkYXRhX2ZpbGVuYW1lKToKICAgIiIiRG93bmxvYWRzIGFuZCByZXBhY2thZ2VzIHRoZSBnaXZlbiBkYXRhIGZyb20gdGhlIGdpdmVuIEhUVFAgc2VydmVyLiIiIgotICBTd2l0Y2hUb05ld1RlbXBvcmFyeURpcmVjdG9yeSgpCi0KICAgcGF0aCA9ICIvdGltZS16b25lcy9yZXBvc2l0b3J5L3JlbGVhc2VzLyVzIiAlIGRhdGFfZmlsZW5hbWUKIAogICBwcmludCAnRG93bmxvYWRpbmcgZGF0YS4uLicKLSAgSHR0cFJldHJpZXZlKGh0dHAsIHBhdGgsIGRhdGFfZmlsZW5hbWUpCisgIEh0dHBSZXRyaWV2ZUZpbGUoaHR0cCwgcGF0aCwgZGF0YV9maWxlbmFtZSkKIAogICBwcmludCAnRG93bmxvYWRpbmcgc2lnbmF0dXJlLi4uJwogICBzaWduYXR1cmVfZmlsZW5hbWUgPSAnJXMuYXNjJyAlIGRhdGFfZmlsZW5hbWUKLSAgSHR0cFJldHJpZXZlKGh0dHAsICIlcy5hc2MiICUgcGF0aCwgc2lnbmF0dXJlX2ZpbGVuYW1lKQotCi0gIEV4dHJhY3RBbmRDb21waWxlKGRhdGFfZmlsZW5hbWUpCisgIEh0dHBSZXRyaWV2ZWZpbGUoaHR0cCwgIiVzLmFzYyIgJSBwYXRoLCBzaWduYXR1cmVfZmlsZW5hbWUpCiAKIAotZGVmIEV4dHJhY3RBbmRDb21waWxlKGRhdGFfZmlsZW5hbWUpOgotICBuZXdfdmVyc2lvbiA9IHJlLnNlYXJjaCgnKHR6ZGF0YS4rKVxcLnRhclxcLmd6JywgZGF0YV9maWxlbmFtZSkuZ3JvdXAoMSkKK2RlZiBCdWlsZEljdVRvb2xzQW5kRGF0YShkYXRhX2ZpbGVuYW1lKToKKyAgIyBLZWVwIHRyYWNrIG9mIHRoZSBvcmlnaW5hbCBjd2Qgc28gd2UgY2FuIGdvIGJhY2sgdG8gaXQgYXQgdGhlIGVuZC4KKyAgb3JpZ2luYWxfd29ya2luZ19kaXIgPSBvcy5nZXRjd2QoKQogCisgICMgQ3JlYXRlIGEgZGlyZWN0b3J5IHRvIHJ1biAnbWFrZScgZnJvbS4KKyAgaWN1X3dvcmtpbmdfZGlyID0gJyVzL2ljdScgJSBvcmlnaW5hbF93b3JraW5nX2RpcgorICBvcy5ta2RpcihpY3Vfd29ya2luZ19kaXIpCisgIG9zLmNoZGlyKGljdV93b3JraW5nX2RpcikKKworICAjIEJ1aWxkIHRoZSBJQ1UgdG9vbHMuCisgIHByaW50ICdDb25maWd1cmluZyBJQ1UgdG9vbHMuLi4nCisgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJyVzL3J1bkNvbmZpZ3VyZUlDVScgJSBpY3VfZGlyLCAnTGludXgnXSkKKyAgcHJpbnQgJ01ha2luZyBJQ1UgdG9vbHMuLi4nCisgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ21ha2UnLCAnLWozMiddKQorCisgICMgUnVuIHRoZSBJQ1UgdG9vbHMuCisgIG9zLmNoZGlyKCd0b29scy90emNvZGUnKQorICBzaHV0aWwuY29weWZpbGUoJyVzLyVzJyAlIChvcmlnaW5hbF93b3JraW5nX2RpciwgZGF0YV9maWxlbmFtZSksIGRhdGFfZmlsZW5hbWUpCisgIHByaW50ICdNYWtpbmcgSUNVIGRhdGEuLi4nCisgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ21ha2UnXSkKKworICAjIENvcHkgdGhlIG91dHB1dCBmaWxlcyB0byB0aGVpciB1bHRpbWF0ZSBkZXN0aW5hdGlvbi4KKyAgaWN1X3R4dF9kYXRhX2RpciA9ICclcy9kYXRhL21pc2MnICUgaWN1X2RpcgorICBwcmludCAnQ29weWluZyB6b25laW5mbzY0LnR4dCB0byAlcyAuLi4nICUgaWN1X3R4dF9kYXRhX2RpcgorICBzaHV0aWwuY29weSgnem9uZWluZm82NC50eHQnLCBpY3VfdHh0X2RhdGFfZGlyKQorCisgIG9zLmNoZGlyKGljdV93b3JraW5nX2RpcikKKyAgaWN1X2RhdF9kYXRhX2RpciA9ICclcy9zdHViZGF0YScgJSBpY3VfZGlyCisgIGRhdGZpbGVzID0gZ2xvYi5nbG9iKCdkYXRhL291dC90bXAvaWN1ZHQ/P2wuZGF0JykKKyAgaWYgbGVuKGRhdGZpbGVzKSAhPSAxOgorICAgIHByaW50ICdFUlJPUjogVW5leHBlY3RlZGx5IGZvdW5kICVkIC5kYXQgZmlsZXMgKCVzKS4gSGFsdGluZy4nICUgKGxlbihkYXRmaWxlcyksIGRhdGZpbGVzKQorICAgIHN5cy5leGl0KDEpCisKKyAgZGF0ZmlsZSA9IGRhdGZpbGVzWzBdCisgIHByaW50ICdDb3B5aW5nICVzIHRvICVzIC4uLicgJSAoZGF0ZmlsZSwgaWN1X2RhdF9kYXRhX2RpcikKKyAgc2h1dGlsLmNvcHkoZGF0ZmlsZSwgaWN1X2RhdF9kYXRhX2RpcikKKworICAjIFN3aXRjaCBiYWNrIHRvIHRoZSBvcmlnaW5hbCB3b3JraW5nIGN3ZC4KKyAgb3MuY2hkaXIob3JpZ2luYWxfd29ya2luZ19kaXIpCisKKworZGVmIENoZWNrU2lnbmF0dXJlKGRhdGFfZmlsZW5hbWUpOgogICBzaWduYXR1cmVfZmlsZW5hbWUgPSAnJXMuYXNjJyAlIGRhdGFfZmlsZW5hbWUKICAgcHJpbnQgJ1ZlcmlmeWluZyBzaWduYXR1cmUuLi4nCiAgICMgSWYgdGhpcyBmYWlscyBmb3IgeW91LCB5b3UgcHJvYmFibHkgbmVlZCB0byBpbXBvcnQgUGF1bCBFZ2dlcnQncyBwdWJsaWMga2V5OgpAQCAtMTE2LDYgKzE1MSwxMCBAQAogICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydncGcnLCAnLS10cnVzdGVkLWtleT1FRDk3RTkwRTYyQUE3RTM0JywgJy0tdmVyaWZ5JywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfZmlsZW5hbWUsIGRhdGFfZmlsZW5hbWVdKQogCisKK2RlZiBCdWlsZEJpb25pY1Rvb2xzQW5kRGF0YShkYXRhX2ZpbGVuYW1lKToKKyAgbmV3X3ZlcnNpb24gPSByZS5zZWFyY2goJyh0emRhdGEuKylcXC50YXJcXC5neicsIGRhdGFfZmlsZW5hbWUpLmdyb3VwKDEpCisKICAgcHJpbnQgJ0V4dHJhY3RpbmcuLi4nCiAgIG9zLm1rZGlyKCdleHRyYWN0ZWQnKQogICB0YXIgPSB0YXJmaWxlLm9wZW4oZGF0YV9maWxlbmFtZSwgJ3InKQpAQCAtMTMwLDExICsxNjksOCBAQAogICBXcml0ZVNldHVwRmlsZSgpCiAKICAgcHJpbnQgJ0NhbGxpbmcgWm9uZUNvbXBhY3RvciB0byB1cGRhdGUgYmlvbmljIHRvICVzLi4uJyAlIG5ld192ZXJzaW9uCi0gIGxpYmNvcmVfc3JjX2RpciA9ICclcy8uLi9saWJjb3JlL2x1bmkvc3JjL21haW4vamF2YS8nICUgYmlvbmljX2RpcgogICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydqYXZhYycsICctZCcsICcuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnJXMvWm9uZUNvbXBhY3Rvci5qYXZhJyAlIGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnJXMvbGliY29yZS91dGlsL1pvbmVJbmZvLmphdmEnICUgbGliY29yZV9zcmNfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICclcy9saWJjb3JlL2lvL0J1ZmZlckl0ZXJhdG9yLmphdmEnICUgbGliY29yZV9zcmNfZGlyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJXMvWm9uZUNvbXBhY3Rvci5qYXZhJyAlIGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2Rpcl0pCiAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJ2phdmEnLCAnWm9uZUNvbXBhY3RvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NldHVwJywgJ2RhdGEnLCAnZXh0cmFjdGVkL3pvbmUudGFiJywKICAgICAgICAgICAgICAgICAgICAgICAgICBiaW9uaWNfbGliY196b25laW5mb19kaXIsIG5ld192ZXJzaW9uXSkKQEAgLTE3NSwxMCArMjExLDE2IEBACiAgIGZvciBmaWxlbmFtZSBpbiB0emRhdGFfZmlsZW5hbWVzOgogICAgIGlmIGZpbGVuYW1lID4gY3VycmVudF9maWxlbmFtZToKICAgICAgIHByaW50ICdGb3VuZCBuZXcgdHpkYXRhOiAlcycgJSBmaWxlbmFtZQorICAgICAgU3dpdGNoVG9OZXdUZW1wb3JhcnlEaXJlY3RvcnkoKQogICAgICAgaWYgdXNlX2Z0cDoKLSAgICAgICAgRnRwVXBncmFkZShmdHAsIGZpbGVuYW1lKQorICAgICAgICBGdHBSZXRyaWV2ZUZpbGVBbmRTaWduYXR1cmUoZnRwLCBmaWxlbmFtZSkKICAgICAgIGVsc2U6Ci0gICAgICAgIEh0dHBVcGdyYWRlKGh0dHAsIGZpbGVuYW1lKQorICAgICAgICBIdHRwUmV0cmlldmVGaWxlQW5kU2lnbmF0dXJlKGh0dHAsIGZpbGVuYW1lKQorCisgICAgICBDaGVja1NpZ25hdHVyZShmaWxlbmFtZSkKKyAgICAgIEJ1aWxkSWN1VG9vbHNBbmREYXRhKGZpbGVuYW1lKQorICAgICAgQnVpbGRCaW9uaWNUb29sc0FuZERhdGEoZmlsZW5hbWUpCisgICAgICBwcmludCAnTG9vayBpbiAlcyBhbmQgJXMgZm9yIG5ldyBkYXRhIGZpbGVzJyAlIChiaW9uaWNfZGlyLCBpY3VfZGlyKQogICAgICAgc3lzLmV4aXQoMCkKIAogICBwcmludCAnWW91IGFscmVhZHkgaGF2ZSB0aGUgbGF0ZXN0IHR6ZGF0YSAoJXMpIScgJSBjdXJyZW50X3ZlcnNpb24KZGlmZiAtLWdpdCBhL2xpYmMvdHpjb2RlL2xvY2FsdGltZS5jIGIvbGliYy90emNvZGUvbG9jYWx0aW1lLmMKaW5kZXggZTI1OTliNC4uM2JiZWQ5MCAxMDA2NDQKLS0tIGEvbGliYy90emNvZGUvbG9jYWx0aW1lLmMKKysrIGIvbGliYy90emNvZGUvbG9jYWx0aW1lLmMKQEAgLTc0LDkgKzc0LDkgQEAKICNkZWZpbmUgV0lMREFCQlIgICAgIiAgICIKICNlbmRpZiAvKiAhZGVmaW5lZCBXSUxEQUJCUiAqLwogCi1zdGF0aWMgY2hhciAgICAgd2lsZGFiYnJbXSA9IFdJTERBQkJSOworc3RhdGljIGNvbnN0IGNoYXIgICAgICAgd2lsZGFiYnJbXSA9IFdJTERBQkJSOwogCi1zdGF0aWMgY29uc3QgY2hhciAgIGdtdFtdID0gIkdNVCI7CitzdGF0aWMgY29uc3QgY2hhciBnbXRbXSA9ICJHTVQiOwogCiAvKgogKiogVGhlIERTVCBydWxlcyB0byB1c2UgaWYgVFogaGFzIG5vIHJ1bGVzIGFuZCB3ZSBjYW4ndCBsb2FkIFRaREVGUlVMRVMuCkBAIC04OSw3ICs4OSw3IEBACiAjZGVmaW5lIFRaREVGUlVMRVNUUklORyAiLE00LjEuMCxNMTAuNS4wIgogI2VuZGlmIC8qICFkZWZpbmVkIFRaREVGRFNUICovCiAKLXN0cnVjdCB0dGluZm8geyAgICAgICAgICAgICAvKiB0aW1lIHR5cGUgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCB0dGluZm8geyAgICAgICAgICAgICAgLyogdGltZSB0eXBlIGluZm9ybWF0aW9uICovCiAgICAgaW50X2Zhc3QzMl90IHR0X2dtdG9mZjsgIC8qIFVUIG9mZnNldCBpbiBzZWNvbmRzICovCiAgICAgaW50ICAgICAgICAgIHR0X2lzZHN0OyAgIC8qIHVzZWQgdG8gc2V0IHRtX2lzZHN0ICovCiAgICAgaW50ICAgICAgICAgIHR0X2FiYnJpbmQ7IC8qIGFiYnJldmlhdGlvbiBsaXN0IGluZGV4ICovCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgaW50ICAgICAgICAgIHR0X3R0aXNnbXQ7IC8qIFRSVUUgaWYgdHJhbnNpdGlvbiBpcyBVVCAqLwogfTsKIAotc3RydWN0IGxzaW5mbyB7ICAgICAgICAgICAgIC8qIGxlYXAgc2Vjb25kIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgbHNpbmZvIHsgICAgICAgICAgICAgIC8qIGxlYXAgc2Vjb25kIGluZm9ybWF0aW9uICovCiAgICAgdGltZV90ICAgICAgIGxzX3RyYW5zOyAgIC8qIHRyYW5zaXRpb24gdGltZSAqLwogICAgIGludF9mYXN0NjRfdCBsc19jb3JyOyAgICAvKiBjb3JyZWN0aW9uIHRvIGFwcGx5ICovCiB9OwpAQCAtMTEyLDMyICsxMTIsMzIgQEAKICNlbmRpZiAvKiAhZGVmaW5lZCBUWk5BTUVfTUFYICovCiAKIHN0cnVjdCBzdGF0ZSB7Ci0gICAgaW50ICAgICBsZWFwY250OwotICAgIGludCAgICAgdGltZWNudDsKLSAgICBpbnQgICAgIHR5cGVjbnQ7Ci0gICAgaW50ICAgICBjaGFyY250OwotICAgIGludCAgICAgZ29iYWNrOwotICAgIGludCAgICAgZ29haGVhZDsKLSAgICB0aW1lX3QgICAgICBhdHNbVFpfTUFYX1RJTUVTXTsKLSAgICB1bnNpZ25lZCBjaGFyICAgdHlwZXNbVFpfTUFYX1RJTUVTXTsKLSAgICBzdHJ1Y3QgdHRpbmZvICAgdHRpc1tUWl9NQVhfVFlQRVNdOwotICAgIGNoYXIgICAgICAgIGNoYXJzW0JJR0dFU1QoQklHR0VTVChUWl9NQVhfQ0hBUlMgKyAxLCBzaXplb2YgZ210KSwKLSAgICAgICAgICAgICAgICAoMiAqIChNWV9UWk5BTUVfTUFYICsgMSkpKV07Ci0gICAgc3RydWN0IGxzaW5mbyAgIGxzaXNbVFpfTUFYX0xFQVBTXTsKLSAgICBpbnQgZGVmYXVsdHR5cGU7IC8qIGZvciBlYXJseSB0aW1lcyBvciBpZiBubyB0cmFuc2l0aW9ucyAqLworICAgIGludCAgICAgICAgICAgbGVhcGNudDsKKyAgICBpbnQgICAgICAgICAgIHRpbWVjbnQ7CisgICAgaW50ICAgICAgICAgICB0eXBlY250OworICAgIGludCAgICAgICAgICAgY2hhcmNudDsKKyAgICBpbnQgICAgICAgICAgIGdvYmFjazsKKyAgICBpbnQgICAgICAgICAgIGdvYWhlYWQ7CisgICAgdGltZV90ICAgICAgICBhdHNbVFpfTUFYX1RJTUVTXTsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVzW1RaX01BWF9USU1FU107CisgICAgc3RydWN0IHR0aW5mbyB0dGlzW1RaX01BWF9UWVBFU107CisgICAgY2hhciAgICAgICAgICBjaGFyc1tCSUdHRVNUKEJJR0dFU1QoVFpfTUFYX0NIQVJTICsgMSwgc2l6ZW9mIGdtdCksCisgICAgICAgICAgICAgICAgICAoMiAqIChNWV9UWk5BTUVfTUFYICsgMSkpKV07CisgICAgc3RydWN0IGxzaW5mbyBsc2lzW1RaX01BWF9MRUFQU107CisgICAgaW50ICAgICAgICAgICBkZWZhdWx0dHlwZTsgLyogZm9yIGVhcmx5IHRpbWVzIG9yIGlmIG5vIHRyYW5zaXRpb25zICovCiB9OwogCiBzdHJ1Y3QgcnVsZSB7Ci0gICAgaW50ICAgICAgICAgIHJfdHlwZTsgICAgIC8qIHR5cGUgb2YgcnVsZS0tc2VlIGJlbG93ICovCi0gICAgaW50ICAgICAgICAgIHJfZGF5OyAgICAgIC8qIGRheSBudW1iZXIgb2YgcnVsZSAqLwotICAgIGludCAgICAgICAgICByX3dlZWs7ICAgICAvKiB3ZWVrIG51bWJlciBvZiBydWxlICovCi0gICAgaW50ICAgICAgICAgIHJfbW9uOyAgICAgIC8qIG1vbnRoIG51bWJlciBvZiBydWxlICovCi0gICAgaW50X2Zhc3QzMl90IHJfdGltZTsgICAgIC8qIHRyYW5zaXRpb24gdGltZSBvZiBydWxlICovCisgICAgaW50ICAgICAgICAgIHJfdHlwZTsgLyogdHlwZSBvZiBydWxlOyBzZWUgYmVsb3cgKi8KKyAgICBpbnQgICAgICAgICAgcl9kYXk7ICAvKiBkYXkgbnVtYmVyIG9mIHJ1bGUgKi8KKyAgICBpbnQgICAgICAgICAgcl93ZWVrOyAvKiB3ZWVrIG51bWJlciBvZiBydWxlICovCisgICAgaW50ICAgICAgICAgIHJfbW9uOyAgLyogbW9udGggbnVtYmVyIG9mIHJ1bGUgKi8KKyAgICBpbnRfZmFzdDMyX3Qgcl90aW1lOyAvKiB0cmFuc2l0aW9uIHRpbWUgb2YgcnVsZSAqLwogfTsKIAotI2RlZmluZSBKVUxJQU5fREFZICAgICAgMCAgIC8qIEpuIC0gSnVsaWFuIGRheSAqLwotI2RlZmluZSBEQVlfT0ZfWUVBUiAgICAgMSAgIC8qIG4gLSBkYXkgb2YgeWVhciAqLwotI2RlZmluZSBNT05USF9OVEhfREFZX09GX1dFRUsgICAyICAgLyogTW0ubi5kIC0gbW9udGgsIHdlZWssIGRheSBvZiB3ZWVrICovCisjZGVmaW5lIEpVTElBTl9EQVkgICAgICAgICAgICAgMCAgICAgICAvKiBKbiA9IEp1bGlhbiBkYXkgKi8KKyNkZWZpbmUgREFZX09GX1lFQVIgICAgICAgICAgICAxICAgICAgIC8qIG4gPSBkYXkgb2YgeWVhciAqLworI2RlZmluZSBNT05USF9OVEhfREFZX09GX1dFRUsgIDIgICAgICAgLyogTW0ubi5kID0gbW9udGgsIHdlZWssIGRheSBvZiB3ZWVrICovCiAKIC8qCiAqKiBQcm90b3R5cGVzIGZvciBzdGF0aWMgZnVuY3Rpb25zLgpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKIHN0YXRpYyBpbnQgX19iaW9uaWNfb3Blbl90emRhdGEoY29uc3QgY2hhciosIGludCopOwogc3RhdGljIGludF9mYXN0MzJfdCBkZXR6Y29kZShjb25zdCBjaGFyICogY29kZXApOwotc3RhdGljIHRpbWVfdCAgIGRldHpjb2RlNjQoY29uc3QgY2hhciAqIGNvZGVwKTsKK3N0YXRpYyBpbnRfZmFzdDY0X3QgZGV0emNvZGU2NChjb25zdCBjaGFyICogY29kZXApOwogc3RhdGljIGludCAgICAgIGRpZmZlcl9ieV9yZXBlYXQodGltZV90IHQxLCB0aW1lX3QgdDApOwogc3RhdGljIGNvbnN0IGNoYXIgKiBnZXR6bmFtZShjb25zdCBjaGFyICogc3RycCkgQVRUUklCVVRFX1BVUkU7CiBzdGF0aWMgY29uc3QgY2hhciAqIGdldHF6bmFtZShjb25zdCBjaGFyICogc3RycCwgY29uc3QgaW50IGRlbGltKQpAQCAtMTU4LDEzICsxNTgsMTQgQEAKIHN0YXRpYyBjb25zdCBjaGFyICogZ2V0b2Zmc2V0KGNvbnN0IGNoYXIgKiBzdHJwLCBpbnRfZmFzdDMyX3QgKiBvZmZzZXRwKTsKIHN0YXRpYyBjb25zdCBjaGFyICogZ2V0cnVsZShjb25zdCBjaGFyICogc3RycCwgc3RydWN0IHJ1bGUgKiBydWxlcCk7CiBzdGF0aWMgdm9pZCAgICAgZ210bG9hZChzdHJ1Y3Qgc3RhdGUgKiBzcCk7Ci1zdGF0aWMgc3RydWN0IHRtICogIGdtdHN1Yihjb25zdCB0aW1lX3QgKiB0aW1lcCwgY29uc3QgaW50X2Zhc3QzMl90IG9mZnNldCwKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiB0bXAsIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KK3N0YXRpYyBzdHJ1Y3QgdG0gKiAgZ210c3ViKGNvbnN0IHRpbWVfdCAqIHRpbWVwLCBpbnRfZmFzdDMyX3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqIHRtcCwgc3RydWN0IHN0YXRlICogc3ApOyAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgogc3RhdGljIHN0cnVjdCB0bSAqICBsb2NhbHN1Yihjb25zdCB0aW1lX3QgKiB0aW1lcCwgaW50X2Zhc3QzMl90IG9mZnNldCwKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiB0bXAsIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiB0bXAsIHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KIHN0YXRpYyBpbnQgICAgICBpbmNyZW1lbnRfb3ZlcmZsb3coaW50ICogbnVtYmVyLCBpbnQgZGVsdGEpOwogc3RhdGljIGludCAgICAgIGxlYXBzX3RocnVfZW5kX29mKGludCB5KSBBVFRSSUJVVEVfUFVSRTsKIHN0YXRpYyBpbnQgICAgICBpbmNyZW1lbnRfb3ZlcmZsb3czMihpbnRfZmFzdDMyX3QgKiBudW1iZXIsIGludCBkZWx0YSk7CitzdGF0aWMgaW50ICAgICAgaW5jcmVtZW50X292ZXJmbG93X3RpbWUodGltZV90ICp0LCBpbnRfZmFzdDMyX3QgZGVsdGEpOwogc3RhdGljIGludCAgICAgIG5vcm1hbGl6ZV9vdmVyZmxvdzMyKGludF9mYXN0MzJfdCAqIHRlbnNwdHIsCiAgICAgICAgICAgICAgICAgaW50ICogdW5pdHNwdHIsIGludCBiYXNlKTsKIHN0YXRpYyBpbnQgICAgICBub3JtYWxpemVfb3ZlcmZsb3coaW50ICogdGVuc3B0ciwgaW50ICogdW5pdHNwdHIsCkBAIC0xNzIsMzIgKzE3MywzMiBAQAogc3RhdGljIHZvaWQgICAgIHNldHR6bmFtZSh2b2lkKTsKIHN0YXRpYyB0aW1lX3QgICAgICAgdGltZTEoc3RydWN0IHRtICogdG1wLAogICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqICgqZnVuY3ApKGNvbnN0IHRpbWVfdCAqLAotICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCwgc3RydWN0IHRtICosIGNvbnN0IHN0cnVjdCBzdGF0ZSAqKSwgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzdGF0ZSouCi0gICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90IG9mZnNldCwgY29uc3Qgc3RydWN0IHN0YXRlICogc3ApOyAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgotc3RhdGljIHRpbWVfdCAgICAgICB0aW1lMihzdHJ1Y3QgdG0gKiBjb25zdCB0bXAsCi0gICAgICAgICAgICAgICAgc3RydWN0IHRtICogKCpjb25zdCBmdW5jcCkoY29uc3QgdGltZV90ICosCi0gICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90LCBzdHJ1Y3QgdG0qLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiksIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3RhdGUqLgotICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCBvZmZzZXQsIGludCAqIG9rYXlwLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiBzcCk7IC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCisgICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90LCBzdHJ1Y3QgdG0gKiwgc3RydWN0IHN0YXRlICopLCAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHN0YXRlKi4KKyAgICAgICAgICAgICAgICBpbnRfZmFzdDMyX3QsIHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KK3N0YXRpYyB0aW1lX3QgICAgICAgdGltZTIoc3RydWN0IHRtICogdG1wLAorICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqICgqZnVuY3ApKGNvbnN0IHRpbWVfdCAqLAorICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCwgc3RydWN0IHRtKiwgc3RydWN0IHN0YXRlICopLCAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHN0YXRlKi4KKyAgICAgICAgICAgICAgICBpbnRfZmFzdDMyX3Qgb2Zmc2V0LCBpbnQgKiBva2F5cCwgc3RydWN0IHN0YXRlICogc3ApOyAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgogc3RhdGljIHRpbWVfdCAgICAgICB0aW1lMnN1YihzdHJ1Y3QgdG0gKnRtcCwKICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiAoKmZ1bmNwKSAoY29uc3QgdGltZV90ICosCi0gICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90LCBzdHJ1Y3QgdG0qLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiksIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3RhdGUqLgotICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCBvZmZzZXQsIGludCAqIG9rYXlwLCBpbnQgZG9fbm9ybV9zZWNzLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiBzcCk7IC8vIGFuZHJvaWQtY2hhbmdlOiBhZGRlZCBzcC4KKyAgICAgICAgICAgICAgICBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSosIHN0cnVjdCBzdGF0ZSAqKSwgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzdGF0ZSouCisgICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90IG9mZnNldCwgaW50ICogb2theXAsIGludCBkb19ub3JtX3NlY3MsIHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2U6IGFkZGVkIHNwLgogc3RhdGljIHN0cnVjdCB0bSAqICB0aW1lc3ViKGNvbnN0IHRpbWVfdCAqIHRpbWVwLCBpbnRfZmFzdDMyX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwLCBzdHJ1Y3QgdG0gKiB0bXApOwogc3RhdGljIGludCAgICAgIHRtY29tcChjb25zdCBzdHJ1Y3QgdG0gKiBhdG1wLAogICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0bSAqIGJ0bXApOwotc3RhdGljIHRpbWVfdCB0cmFuc3RpbWUodGltZV90IGphbmZpcnN0LCBpbnQgeWVhciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBydWxlICogcnVsZXAsIGludF9mYXN0MzJfdCBvZmZzZXQpCitzdGF0aWMgaW50X2Zhc3QzMl90IHRyYW5zdGltZShpbnQgeWVhciwgY29uc3Qgc3RydWN0IHJ1bGUgKiBydWxlcCwKKyAgICAgICAgICAgICAgICBpbnRfZmFzdDMyX3Qgb2Zmc2V0KQogICAgICAgICBBVFRSSUJVVEVfUFVSRTsKLXN0YXRpYyBpbnQJCXR5cGVzZXF1aXYoY29uc3Qgc3RydWN0IHN0YXRlICogc3AsIGludCBhLCBpbnQgYik7CitzdGF0aWMgaW50ICAgICAgdHlwZXNlcXVpdihjb25zdCBzdHJ1Y3Qgc3RhdGUgKiBzcCwgaW50IGEsIGludCBiKTsKIHN0YXRpYyBpbnQgICAgICB0emxvYWQoY29uc3QgY2hhciAqIG5hbWUsIHN0cnVjdCBzdGF0ZSAqIHNwLAogICAgICAgICAgICAgICAgIGludCBkb2V4dGVuZCk7CiBzdGF0aWMgaW50ICAgICAgdHpwYXJzZShjb25zdCBjaGFyICogbmFtZSwgc3RydWN0IHN0YXRlICogc3AsCiAgICAgICAgICAgICAgICAgaW50IGxhc3RkaXRjaCk7CiAKICNpZmRlZiBBTExfU1RBVEUKLXN0YXRpYyBzdHJ1Y3Qgc3RhdGUgKiAgIGxjbHB0cjsKLXN0YXRpYyBzdHJ1Y3Qgc3RhdGUgKiAgIGdtdHB0cjsKK3N0YXRpYyBzdHJ1Y3Qgc3RhdGUgKiBsY2xwdHI7CitzdGF0aWMgc3RydWN0IHN0YXRlICogZ210cHRyOwogI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCiAKICNpZm5kZWYgQUxMX1NUQVRFCkBAIC0yMTEsMTMgKzIxMiwxMyBAQAogI2RlZmluZSBUWl9TVFJMRU5fTUFYIDI1NQogI2VuZGlmIC8qICFkZWZpbmVkIFRaX1NUUkxFTl9NQVggKi8KIAotc3RhdGljIGNoYXIgICAgIGxjbF9UWm5hbWVbVFpfU1RSTEVOX01BWCArIDFdOwotc3RhdGljIGludCAgICAgIGxjbF9pc19zZXQ7Ci1zdGF0aWMgaW50ICAgICAgZ210X2lzX3NldDsKK3N0YXRpYyBjaGFyIGxjbF9UWm5hbWVbVFpfU1RSTEVOX01BWCArIDFdOworc3RhdGljIGludCAgbGNsX2lzX3NldDsKK3N0YXRpYyBpbnQgIGdtdF9pc19zZXQ7CiAKLWNoYXIgKiAgICAgICAgICB0em5hbWVbMl0gPSB7Ci0gICAgd2lsZGFiYnIsCi0gICAgd2lsZGFiYnIKK2NoYXIgKiB0em5hbWVbMl0gPSB7CisgICAgKGNoYXIgKikgd2lsZGFiYnIsCisgICAgKGNoYXIgKikgd2lsZGFiYnIKIH07CiAKIC8qCkBAIC0yMzEsNDYgKzIzMiw0NSBAQAogc3RhdGljIHN0cnVjdCB0bSAgICB0bUdsb2JhbDsKIAogI2lmZGVmIFVTR19DT01QQVQKLWxvbmcJCQl0aW1lem9uZSA9IDA7Ci1pbnQJCQlkYXlsaWdodCA9IDA7Citsb25nICAgICAgICAgICAgICAgIHRpbWV6b25lID0gMDsKK2ludCAgICAgICAgICAgICAgICAgZGF5bGlnaHQgPSAwOwogI2VuZGlmIC8qIGRlZmluZWQgVVNHX0NPTVBBVCAqLwogCiAjaWZkZWYgQUxUWk9ORQotbG9uZwkJCWFsdHpvbmUgPSAwOworbG9uZyAgICAgICAgICAgICAgICBhbHR6b25lID0gMDsKICNlbmRpZiAvKiBkZWZpbmVkIEFMVFpPTkUgKi8KIAogc3RhdGljIGludF9mYXN0MzJfdAogZGV0emNvZGUoY29uc3QgY2hhciAqY29uc3QgY29kZXApCiB7Ci0JcmVnaXN0ZXIgaW50X2Zhc3QzMl90CXJlc3VsdDsKLQlyZWdpc3RlciBpbnQJCWk7CisgICAgcmVnaXN0ZXIgaW50X2Zhc3QzMl90IHJlc3VsdDsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgaTsKIAotCXJlc3VsdCA9IChjb2RlcFswXSAmIDB4ODApID8gLTEgOiAwOwotCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCi0JCXJlc3VsdCA9IChyZXN1bHQgPDwgOCkgfCAoY29kZXBbaV0gJiAweGZmKTsKLQlyZXR1cm4gcmVzdWx0OworICAgIHJlc3VsdCA9IChjb2RlcFswXSAmIDB4ODApID8gLTEgOiAwOworICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgOCkgfCAoY29kZXBbaV0gJiAweGZmKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdGltZV90CitzdGF0aWMgaW50X2Zhc3Q2NF90CiBkZXR6Y29kZTY0KGNvbnN0IGNoYXIgKmNvbnN0IGNvZGVwKQogewotCXJlZ2lzdGVyIHRpbWVfdAlyZXN1bHQ7Ci0JcmVnaXN0ZXIgaW50CWk7CisgICAgcmVnaXN0ZXIgaW50X2Zhc3Q2NF90IHJlc3VsdDsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgaTsKIAotCXJlc3VsdCA9IChjb2RlcFswXSAmIDB4ODApID8gICh+KGludF9mYXN0NjRfdCkgMCkgOiAwOwotCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCi0JCXJlc3VsdCA9IHJlc3VsdCAqIDI1NiArIChjb2RlcFtpXSAmIDB4ZmYpOwotCXJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0ID0gKGNvZGVwWzBdICYgMHg4MCkgPyAtMSA6IDA7CisgICAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKyAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8PCA4KSB8IChjb2RlcFtpXSAmIDB4ZmYpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkCiBzZXR0em5hbWUodm9pZCkKIHsKLSAgICByZWdpc3RlciBzdHJ1Y3Qgc3RhdGUgKiBjb25zdCAgIHNwID0gbGNscHRyOwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGk7CisgICAgcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogY29uc3Qgc3AgPSBsY2xwdHI7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgICAgICAgaTsKIAotICAgIHR6bmFtZVswXSA9IHdpbGRhYmJyOwotICAgIHR6bmFtZVsxXSA9IHdpbGRhYmJyOworICAgIHR6bmFtZVswXSA9IHR6bmFtZVsxXSA9IChjaGFyICopIHdpbGRhYmJyOwogI2lmZGVmIFVTR19DT01QQVQKICAgICBkYXlsaWdodCA9IDA7CiAgICAgdGltZXpvbmUgPSAwOwpAQCAtMjc4LDEyICsyNzgsMTAgQEAKICNpZmRlZiBBTFRaT05FCiAgICAgYWx0em9uZSA9IDA7CiAjZW5kaWYgLyogZGVmaW5lZCBBTFRaT05FICovCi0jaWZkZWYgQUxMX1NUQVRFCiAgICAgaWYgKHNwID09IE5VTEwpIHsKLSAgICAgICAgdHpuYW1lWzBdID0gdHpuYW1lWzFdID0gZ210OworICAgICAgICB0em5hbWVbMF0gPSB0em5hbWVbMV0gPSAoY2hhciAqKSBnbXQ7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KICAgICAvKgogICAgICoqIEFuZCB0byBnZXQgdGhlIGxhdGVzdCB6b25lIG5hbWVzIGludG8gdHpuYW1lLiAuIC4KICAgICAqLwpAQCAtMzMxLDEyICszMjksMTIgQEAKIH0KIAogc3RhdGljIGludAotZGlmZmVyX2J5X3JlcGVhdChjb25zdCB0aW1lX3QgdDEsIGNvbnN0IHRpbWVfdCB0MCkKK2RpZmZlcl9ieV9yZXBlYXQoY29uc3QgdGltZV90IHQxIF9fdW51c2VkLCBjb25zdCB0aW1lX3QgdDAgX191bnVzZWQpCiB7Ci0JaWYgKFRZUEVfQklUKHRpbWVfdCkgLSBUWVBFX1NJR05FRCh0aW1lX3QpIDwgU0VDU1BFUlJFUEVBVF9CSVRTKQotCQkJcmV0dXJuIDA7Ci0jaWYgX19MUDY0X18gLy8gMzItYml0IEFuZHJvaWQgb25seSBoYXMgYSBzaWduZWQgMzItYml0IHRpbWVfdDsgNjQtYml0IEFuZHJvaWQgaXMgZml4ZWQuCi0JcmV0dXJuIHQxIC0gdDAgPT0gU0VDU1BFUlJFUEVBVDsKKyAgICBpZiAoVFlQRV9CSVQodGltZV90KSAtIFRZUEVfU0lHTkVEKHRpbWVfdCkgPCBTRUNTUEVSUkVQRUFUX0JJVFMpCisgICAgICAgIHJldHVybiAwOworI2lmIGRlZmluZWQoX19MUDY0X18pIC8vIDMyLWJpdCBBbmRyb2lkIG9ubHkgaGFzIGEgc2lnbmVkIDMyLWJpdCB0aW1lX3Q7IDY0LWJpdCBBbmRyb2lkIGlzIGZpeGVkLgorICAgIHJldHVybiB0MSAtIHQwID09IFNFQ1NQRVJSRVBFQVQ7CiAjZW5kaWYKIH0KIApAQCAtMzQ0LDQyICszNDIsNjcgQEAKIHR6bG9hZChyZWdpc3RlciBjb25zdCBjaGFyKiBuYW1lLCByZWdpc3RlciBzdHJ1Y3Qgc3RhdGUqIGNvbnN0IHNwLAogICAgICAgIHJlZ2lzdGVyIGNvbnN0IGludCBkb2V4dGVuZCkKIHsKLSAgICByZWdpc3RlciBjb25zdCBjaGFyICogICAgICAgcDsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBpOwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGZpZDsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBzdG9yZWQ7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgbnJlYWQ7CisgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqIHA7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgIGk7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgIGZpZDsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgc3RvcmVkOworICAgIHJlZ2lzdGVyIGludCAgICAgICAgICBucmVhZDsKICAgICB0eXBlZGVmIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHR6aGVhZCAgIHR6aGVhZDsKLSAgICAgICAgY2hhciAgICAgICAgYnVmWzIgKiBzaXplb2Yoc3RydWN0IHR6aGVhZCkgKwotICAgICAgICAgICAgICAgICAgICAyICogc2l6ZW9mICpzcCArCi0gICAgICAgICAgICAgICAgICAgIDQgKiBUWl9NQVhfVElNRVNdOworICAgICAgICBzdHJ1Y3QgdHpoZWFkIHR6aGVhZDsKKyAgICAgICAgY2hhciAgICAgICAgICBidWZbMiAqIHNpemVvZihzdHJ1Y3QgdHpoZWFkKSArCisgICAgICAgICAgICAgICAgICAgICAgMiAqIHNpemVvZiAqc3AgKworICAgICAgICAgICAgICAgICAgICAgIDQgKiBUWl9NQVhfVElNRVNdOwogICAgIH0gdV90OwotI2lmZGVmIEFMTF9TVEFURQotICAgIHJlZ2lzdGVyIHVfdCAqCQkJdXA7CisgICAgdW5pb24gbG9jYWxfc3RvcmFnZSB7CisgICAgICAgIC8qCisgICAgICAgICoqIFNlY3Rpb24gNC45LjEgb2YgdGhlIEMgc3RhbmRhcmQgc2F5cyB0aGF0CisgICAgICAgICoqICJGSUxFTkFNRV9NQVggZXhwYW5kcyB0byBhbiBpbnRlZ3JhbCBjb25zdGFudCBleHByZXNzaW9uCisgICAgICAgICoqIHRoYXQgaXMgdGhlIHNpemUgbmVlZGVkIGZvciBhbiBhcnJheSBvZiBjaGFyIGxhcmdlIGVub3VnaAorICAgICAgICAqKiB0byBob2xkIHRoZSBsb25nZXN0IGZpbGUgbmFtZSBzdHJpbmcgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgKiogZ3VhcmFudGVlcyBjYW4gYmUgb3BlbmVkLiIKKyAgICAgICAgKi8KKyAgICAgICAgLy9jaGFyICAgICAgICAgICAgZnVsbG5hbWVbRklMRU5BTUVfTUFYICsgMV07CiAKLSAgICB1cCA9ICh1X3QgKikgY2FsbG9jKDEsIHNpemVvZiAqdXApOwotICAgIGlmICh1cCA9PSBOVUxMKQorICAgICAgICAvKiBUaGUgbWFpbiBwYXJ0IG9mIHRoZSBzdG9yYWdlIGZvciB0aGlzIGZ1bmN0aW9uLiAgKi8KKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVfdCB1OworICAgICAgICAgICAgc3RydWN0IHN0YXRlIHN0OworICAgICAgICB9IHU7CisgICAgfTsKKyAgICAvL3JlZ2lzdGVyIGNoYXIgKmZ1bGxuYW1lOworICAgIHJlZ2lzdGVyIHVfdCAqdXA7CisgICAgcmVnaXN0ZXIgdW5pb24gbG9jYWxfc3RvcmFnZSAqbHNwOworI2lmZGVmIEFMTF9TVEFURQorICAgIGxzcCA9IG1hbGxvYyhzaXplb2YgKmxzcCk7CisgICAgaWYgKCFsc3ApCiAgICAgICAgIHJldHVybiAtMTsKICNlbHNlIC8qICFkZWZpbmVkIEFMTF9TVEFURSAqLwotICAgIHVfdAkJCQl1OwotICAgIHJlZ2lzdGVyIHVfdCAqIGNvbnN0CQl1cCA9ICZ1OworICAgIHVuaW9uIGxvY2FsX3N0b3JhZ2UgbHM7CisgICAgbHNwID0gJmxzOwogI2VuZGlmIC8qICFkZWZpbmVkIEFMTF9TVEFURSAqLworICAgIC8vZnVsbG5hbWUgPSBsc3AtPmZ1bGxuYW1lOworICAgIHVwID0gJmxzcC0+dS51OwogCiAgICAgc3AtPmdvYmFjayA9IHNwLT5nb2FoZWFkID0gRkFMU0U7Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCAmJiAobmFtZSA9IFRaREVGQVVMVCkgPT0gTlVMTCkKLSAgICAgICAgZ290byBvb3BzOworCisgICAgaWYgKCEgbmFtZSkgeworICAgICAgICBuYW1lID0gVFpERUZBVUxUOworICAgICAgICBpZiAoISBuYW1lKQorICAgICAgICAgICAgZ290byBvb3BzOworICAgIH0KKwogICAgIGludCB0b3JlYWQ7CiAgICAgZmlkID0gX19iaW9uaWNfb3Blbl90emRhdGEobmFtZSwgJnRvcmVhZCk7Ci0gICAgaWYgKGZpZCA8IDApIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBucmVhZCA9IHJlYWQoZmlkLCB1cC0+YnVmLCB0b3JlYWQpOworICAgIGlmIChmaWQgPCAwKQorICAgICAgICBnb3RvIG9vcHM7CisKKyAgICBucmVhZCA9IHJlYWQoZmlkLCB1cC0+YnVmLCBzaXplb2YgdXAtPmJ1Zik7CiAgICAgaWYgKGNsb3NlKGZpZCkgPCAwIHx8IG5yZWFkIDw9IDApCiAgICAgICAgIGdvdG8gb29wczsKICAgICBmb3IgKHN0b3JlZCA9IDQ7IHN0b3JlZCA8PSA4OyBzdG9yZWQgKj0gMikgewotICAgICAgICBpbnQgICAgIHR0aXNzdGRjbnQ7Ci0gICAgICAgIGludCAgICAgdHRpc2dtdGNudDsKKyAgICAgICAgaW50IHR0aXNzdGRjbnQ7CisgICAgICAgIGludCB0dGlzZ210Y250OworICAgICAgICBpbnQgdGltZWNudDsKIAogICAgICAgICB0dGlzc3RkY250ID0gKGludCkgZGV0emNvZGUodXAtPnR6aGVhZC50emhfdHRpc3N0ZGNudCk7CiAgICAgICAgIHR0aXNnbXRjbnQgPSAoaW50KSBkZXR6Y29kZSh1cC0+dHpoZWFkLnR6aF90dGlzZ210Y250KTsKQEAgLTM5NiwyNCArNDE5LDQ1IEBACiAgICAgICAgICAgICAodHRpc2dtdGNudCAhPSBzcC0+dHlwZWNudCAmJiB0dGlzZ210Y250ICE9IDApKQogICAgICAgICAgICAgICAgIGdvdG8gb29wczsKICAgICAgICAgaWYgKG5yZWFkIC0gKHAgLSB1cC0+YnVmKSA8Ci0gICAgICAgICAgICBzcC0+dGltZWNudCAqIHN0b3JlZCArICAgICAgLyogYXRzICovCi0gICAgICAgICAgICBzcC0+dGltZWNudCArICAgICAgICAgICAvKiB0eXBlcyAqLwotICAgICAgICAgICAgc3AtPnR5cGVjbnQgKiA2ICsgICAgICAgLyogdHRpbmZvcyAqLwotICAgICAgICAgICAgc3AtPmNoYXJjbnQgKyAgICAgICAgICAgLyogY2hhcnMgKi8KLSAgICAgICAgICAgIHNwLT5sZWFwY250ICogKHN0b3JlZCArIDQpICsgICAgLyogbHNpbmZvcyAqLwotICAgICAgICAgICAgdHRpc3N0ZGNudCArICAgICAgICAgICAgLyogdHRpc3N0ZHMgKi8KLSAgICAgICAgICAgIHR0aXNnbXRjbnQpICAgICAgICAgLyogdHRpc2dtdHMgKi8KKyAgICAgICAgICAgIHNwLT50aW1lY250ICogc3RvcmVkICsgICAgICAgLyogYXRzICovCisgICAgICAgICAgICBzcC0+dGltZWNudCArICAgICAgICAgICAgICAgIC8qIHR5cGVzICovCisgICAgICAgICAgICBzcC0+dHlwZWNudCAqIDYgKyAgICAgICAgICAgIC8qIHR0aW5mb3MgKi8KKyAgICAgICAgICAgIHNwLT5jaGFyY250ICsgICAgICAgICAgICAgICAgLyogY2hhcnMgKi8KKyAgICAgICAgICAgIHNwLT5sZWFwY250ICogKHN0b3JlZCArIDQpICsgLyogbHNpbmZvcyAqLworICAgICAgICAgICAgdHRpc3N0ZGNudCArICAgICAgICAgICAgICAgICAvKiB0dGlzc3RkcyAqLworICAgICAgICAgICAgdHRpc2dtdGNudCkgICAgICAgICAgICAgICAgICAvKiB0dGlzZ210cyAqLwogICAgICAgICAgICAgICAgIGdvdG8gb29wczsKKyAgICAgICAgdGltZWNudCA9IDA7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcC0+dGltZWNudDsgKytpKSB7Ci0gICAgICAgICAgICBzcC0+YXRzW2ldID0gKHN0b3JlZCA9PSA0KSA/Ci0gICAgICAgICAgICAgICAgZGV0emNvZGUocCkgOiBkZXR6Y29kZTY0KHApOworICAgICAgICAgICAgaW50X2Zhc3Q2NF90IGF0CisgICAgICAgICAgICAgID0gc3RvcmVkID09IDQgPyBkZXR6Y29kZShwKSA6IGRldHpjb2RlNjQocCk7CisgICAgICAgICAgICBzcC0+dHlwZXNbaV0gPSAoKFRZUEVfU0lHTkVEKHRpbWVfdCkKKyAgICAgICAgICAgICAgICAgICAgID8gdGltZV90X21pbiA8PSBhdAorICAgICAgICAgICAgICAgICAgICAgOiAwIDw9IGF0KQorICAgICAgICAgICAgICAgICAgICAmJiBhdCA8PSB0aW1lX3RfbWF4KTsKKyAgICAgICAgICAgIGlmIChzcC0+dHlwZXNbaV0pIHsKKyAgICAgICAgICAgICAgICBpZiAoaSAmJiAhdGltZWNudCAmJiBhdCAhPSB0aW1lX3RfbWluKSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICoqIEtlZXAgdGhlIGVhcmxpZXIgcmVjb3JkLCBidXQgdHdlYWsKKyAgICAgICAgICAgICAgICAgICAgKiogaXQgc28gdGhhdCBpdCBzdGFydHMgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgKiogbWluaW11bSB0aW1lX3QgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIHNwLT50eXBlc1tpIC0gMV0gPSAxOworICAgICAgICAgICAgICAgICAgICBzcC0+YXRzW3RpbWVjbnQrK10gPSB0aW1lX3RfbWluOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcC0+YXRzW3RpbWVjbnQrK10gPSBhdDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHAgKz0gc3RvcmVkOwogICAgICAgICB9CisgICAgICAgIHRpbWVjbnQgPSAwOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3AtPnRpbWVjbnQ7ICsraSkgewotICAgICAgICAgICAgc3AtPnR5cGVzW2ldID0gKHVuc2lnbmVkIGNoYXIpICpwKys7Ci0gICAgICAgICAgICBpZiAoc3AtPnR5cGVzW2ldID49IHNwLT50eXBlY250KQorICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0eXAgPSAqcCsrOworICAgICAgICAgICAgaWYgKHNwLT50eXBlY250IDw9IHR5cCkKICAgICAgICAgICAgICAgICBnb3RvIG9vcHM7CisgICAgICAgICAgICBpZiAoc3AtPnR5cGVzW2ldKQorICAgICAgICAgICAgICAgIHNwLT50eXBlc1t0aW1lY250KytdID0gdHlwOwogICAgICAgICB9CisgICAgICAgIHNwLT50aW1lY250ID0gdGltZWNudDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpIHsKICAgICAgICAgICAgIHJlZ2lzdGVyIHN0cnVjdCB0dGluZm8gKiAgICB0dGlzcDsKIApAQCAtNDY4LDQ0ICs1MTIsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8qCi0gICAgICAgICoqIE91dC1vZi1zb3J0IGF0cyBzaG91bGQgbWVhbiB3ZSdyZSBydW5uaW5nIG9uIGEKLSAgICAgICAgKiogc2lnbmVkIHRpbWVfdCBzeXN0ZW0gYnV0IHVzaW5nIGEgZGF0YSBmaWxlIHdpdGgKLSAgICAgICAgKiogdW5zaWduZWQgdmFsdWVzIChvciB2aWNlIHZlcnNhKS4KLSAgICAgICAgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwLT50aW1lY250OyArK2kpCi0gICAgICAgICAgICBpZiAoKGkgPCBzcC0+dGltZWNudCAtIDEgJiYKLSAgICAgICAgICAgICAgICBzcC0+YXRzW2ldID4gc3AtPmF0c1tpICsgMV0pIHx8Ci0gICAgICAgICAgICAgICAgKGkgPT0gc3AtPnRpbWVjbnQgLSAxICYmICFUWVBFX1NJR05FRCh0aW1lX3QpICYmCi0gICAgICAgICAgICAgICAgc3AtPmF0c1tpXSA+Ci0gICAgICAgICAgICAgICAgKChzdG9yZWQgPT0gNCkgPyBJTlQzMl9NQVggOiBJTlQ2NF9NQVgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoVFlQRV9TSUdORUQodGltZV90KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICoqIElnbm9yZSB0aGUgZW5kIChlYXN5KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzcC0+dGltZWNudCA9IGkgKyAxOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICoqIElnbm9yZSB0aGUgYmVnaW5uaW5nIChoYXJkZXIpLgotICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCAgICBqOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgICAgKiogS2VlcCB0aGUgcmVjb3JkIHJpZ2h0IGJlZm9yZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICoqIGVwb2NoIGJvdW5kYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgKiogYnV0IHR3ZWFrIGl0IHNvIHRoYXQgaXQgc3RhcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAqKiByaWdodCB3aXRoIHRoZSBlcG9jaAotICAgICAgICAgICAgICAgICAgICAgICAgKiogKHRoYW5rcyB0byBEb3VnIEJhaWxleSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmF0c1tpXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqICsgaSA8IHNwLT50aW1lY250OyArK2opIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcC0+YXRzW2pdID0gc3AtPmF0c1tqICsgaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AtPnR5cGVzW2pdID0gc3AtPnR5cGVzW2ogKyBpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNwLT50aW1lY250ID0gajsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgLyoKICAgICAgICAgKiogSWYgdGhpcyBpcyBhbiBvbGQgZmlsZSwgd2UncmUgZG9uZS4KICAgICAgICAgKi8KICAgICAgICAgaWYgKHVwLT50emhlYWQudHpoX3ZlcnNpb25bMF0gPT0gJ1wwJykKQEAgLTUxNCw0NCArNTIwLDQ0IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBucmVhZDsgKytpKQogICAgICAgICAgICAgdXAtPmJ1ZltpXSA9IHBbaV07CiAgICAgICAgIC8qCi0gICAgICAgICoqIElmIHRoaXMgaXMgYSBuYXJyb3cgdGltZV90IHN5c3RlbSwgd2UncmUgZG9uZS4KKyAgICAgICAgKiogSWYgdGhpcyBpcyBhIHNpZ25lZCBuYXJyb3cgdGltZV90IHN5c3RlbSwgd2UncmUgZG9uZS4KICAgICAgICAgKi8KLSAgICAgICAgaWYgKHN0b3JlZCA+PSAoaW50KSBzaXplb2YodGltZV90KSkKKyAgICAgICAgaWYgKFRZUEVfU0lHTkVEKHRpbWVfdCkgJiYgc3RvcmVkID49IChpbnQpIHNpemVvZih0aW1lX3QpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmIChkb2V4dGVuZCAmJiBucmVhZCA+IDIgJiYKICAgICAgICAgdXAtPmJ1ZlswXSA9PSAnXG4nICYmIHVwLT5idWZbbnJlYWQgLSAxXSA9PSAnXG4nICYmCiAgICAgICAgIHNwLT50eXBlY250ICsgMiA8PSBUWl9NQVhfVFlQRVMpIHsKLSAgICAgICAgICAgIHN0cnVjdCBzdGF0ZSAgICB0czsKLSAgICAgICAgICAgIHJlZ2lzdGVyIGludCAgICByZXN1bHQ7CisgICAgICAgICAgICBzdHJ1Y3Qgc3RhdGUgICAgKnRzID0gJmxzcC0+dS5zdDsKKyAgICAgICAgICAgIHJlZ2lzdGVyIGludCByZXN1bHQ7CiAKICAgICAgICAgICAgIHVwLT5idWZbbnJlYWQgLSAxXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXN1bHQgPSB0enBhcnNlKCZ1cC0+YnVmWzFdLCAmdHMsIEZBTFNFKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gMCAmJiB0cy50eXBlY250ID09IDIgJiYKLSAgICAgICAgICAgICAgICBzcC0+Y2hhcmNudCArIHRzLmNoYXJjbnQgPD0gVFpfTUFYX0NIQVJTKSB7CisgICAgICAgICAgICByZXN1bHQgPSB0enBhcnNlKCZ1cC0+YnVmWzFdLCB0cywgRkFMU0UpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAwICYmIHRzLT50eXBlY250ID09IDIgJiYKKyAgICAgICAgICAgICAgICBzcC0+Y2hhcmNudCArIHRzLT5jaGFyY250IDw9IFRaX01BWF9DSEFSUykgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQotICAgICAgICAgICAgICAgICAgICAgICAgdHMudHRpc1tpXS50dF9hYmJyaW5kICs9CisgICAgICAgICAgICAgICAgICAgICAgICB0cy0+dHRpc1tpXS50dF9hYmJyaW5kICs9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmNoYXJjbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cy5jaGFyY250OyArK2kpCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cy0+Y2hhcmNudDsgKytpKQogICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmNoYXJzW3NwLT5jaGFyY250KytdID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy5jaGFyc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy0+Y2hhcnNbaV07CiAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHRzLnRpbWVjbnQgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIHRzLmF0c1tpXSA8PQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHRzLT50aW1lY250ICYmCisgICAgICAgICAgICAgICAgICAgICAgICB0cy0+YXRzW2ldIDw9CiAgICAgICAgICAgICAgICAgICAgICAgICBzcC0+YXRzW3NwLT50aW1lY250IC0gMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHRzLnRpbWVjbnQgJiYKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCB0cy0+dGltZWNudCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgc3AtPnRpbWVjbnQgPCBUWl9NQVhfVElNRVMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNwLT5hdHNbc3AtPnRpbWVjbnRdID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy5hdHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHMtPmF0c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNwLT50eXBlc1tzcC0+dGltZWNudF0gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwLT50eXBlY250ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy50eXBlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy0+dHlwZXNbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICArK3NwLT50aW1lY250OwogICAgICAgICAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNwLT50dGlzW3NwLT50eXBlY250KytdID0gdHMudHRpc1swXTsKLSAgICAgICAgICAgICAgICAgICAgc3AtPnR0aXNbc3AtPnR5cGVjbnQrK10gPSB0cy50dGlzWzFdOworICAgICAgICAgICAgICAgICAgICBzcC0+dHRpc1tzcC0+dHlwZWNudCsrXSA9IHRzLT50dGlzWzBdOworICAgICAgICAgICAgICAgICAgICBzcC0+dHRpc1tzcC0+dHlwZWNudCsrXSA9IHRzLT50dGlzWzFdOwogICAgICAgICAgICAgfQogICAgIH0KICAgICBpZiAoc3AtPnRpbWVjbnQgPiAxKSB7CkBAIC02MTgsMzEgKzYyNCwzMSBAQAogc3RhdGljIGludAogdHlwZXNlcXVpdihjb25zdCBzdHJ1Y3Qgc3RhdGUgKmNvbnN0IHNwLCBjb25zdCBpbnQgYSwgY29uc3QgaW50IGIpCiB7Ci0JcmVnaXN0ZXIgaW50CXJlc3VsdDsKKyAgICByZWdpc3RlciBpbnQgcmVzdWx0OwogCi0JaWYgKHNwID09IE5VTEwgfHwKLQkJYSA8IDAgfHwgYSA+PSBzcC0+dHlwZWNudCB8fAotCQliIDwgMCB8fCBiID49IHNwLT50eXBlY250KQotCQkJcmVzdWx0ID0gRkFMU0U7Ci0JZWxzZSB7Ci0JCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKglhcCA9ICZzcC0+dHRpc1thXTsKLQkJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHR0aW5mbyAqCWJwID0gJnNwLT50dGlzW2JdOwotCQlyZXN1bHQgPSBhcC0+dHRfZ210b2ZmID09IGJwLT50dF9nbXRvZmYgJiYKLQkJCWFwLT50dF9pc2RzdCA9PSBicC0+dHRfaXNkc3QgJiYKLQkJCWFwLT50dF90dGlzc3RkID09IGJwLT50dF90dGlzc3RkICYmCi0JCQlhcC0+dHRfdHRpc2dtdCA9PSBicC0+dHRfdHRpc2dtdCAmJgotCQkJc3RyY21wKCZzcC0+Y2hhcnNbYXAtPnR0X2FiYnJpbmRdLAotCQkJJnNwLT5jaGFyc1ticC0+dHRfYWJicmluZF0pID09IDA7Ci0JfQotCXJldHVybiByZXN1bHQ7CisgICAgaWYgKHNwID09IE5VTEwgfHwKKyAgICAgICAgYSA8IDAgfHwgYSA+PSBzcC0+dHlwZWNudCB8fAorICAgICAgICBiIDwgMCB8fCBiID49IHNwLT50eXBlY250KQorICAgICAgICAgICAgcmVzdWx0ID0gRkFMU0U7CisgICAgZWxzZSB7CisgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKiAgYXAgPSAmc3AtPnR0aXNbYV07CisgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKiAgYnAgPSAmc3AtPnR0aXNbYl07CisgICAgICAgIHJlc3VsdCA9IGFwLT50dF9nbXRvZmYgPT0gYnAtPnR0X2dtdG9mZiAmJgorICAgICAgICAgICAgYXAtPnR0X2lzZHN0ID09IGJwLT50dF9pc2RzdCAmJgorICAgICAgICAgICAgYXAtPnR0X3R0aXNzdGQgPT0gYnAtPnR0X3R0aXNzdGQgJiYKKyAgICAgICAgICAgIGFwLT50dF90dGlzZ210ID09IGJwLT50dF90dGlzZ210ICYmCisgICAgICAgICAgICBzdHJjbXAoJnNwLT5jaGFyc1thcC0+dHRfYWJicmluZF0sCisgICAgICAgICAgICAmc3AtPmNoYXJzW2JwLT50dF9hYmJyaW5kXSkgPT0gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGNvbnN0IGludCAgICBtb25fbGVuZ3Roc1syXVtNT05TUEVSWUVBUl0gPSB7CitzdGF0aWMgY29uc3QgaW50IG1vbl9sZW5ndGhzWzJdW01PTlNQRVJZRUFSXSA9IHsKICAgICB7IDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEgfSwKICAgICB7IDMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEgfQogfTsKIAotc3RhdGljIGNvbnN0IGludCAgICB5ZWFyX2xlbmd0aHNbMl0gPSB7CitzdGF0aWMgY29uc3QgaW50IHllYXJfbGVuZ3Roc1syXSA9IHsKICAgICBEQVlTUEVSTllFQVIsIERBWVNQRVJMWUVBUgogfTsKIApAQCAtNjc1LDcgKzY4MSw3IEBACiBzdGF0aWMgY29uc3QgY2hhciAqCiBnZXRxem5hbWUocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RycCwgY29uc3QgaW50IGRlbGltKQogewotICAgIHJlZ2lzdGVyIGludCAgICBjOworICAgIHJlZ2lzdGVyIGludCBjOwogCiAgICAgd2hpbGUgKChjID0gKnN0cnApICE9ICdcMCcgJiYgYyAhPSBkZWxpbSkKICAgICAgICAgKytzdHJwOwpAQCAtNjkyLDggKzY5OCw4IEBACiBzdGF0aWMgY29uc3QgY2hhciAqCiBnZXRudW0ocmVnaXN0ZXIgY29uc3QgY2hhciAqIHN0cnAsIGludCAqIGNvbnN0IG51bXAsIGNvbnN0IGludCBtaW4sIGNvbnN0IGludCBtYXgpCiB7Ci0gICAgcmVnaXN0ZXIgY2hhciAgIGM7Ci0gICAgcmVnaXN0ZXIgaW50ICAgIG51bTsKKyAgICByZWdpc3RlciBjaGFyIGM7CisgICAgcmVnaXN0ZXIgaW50ICBudW07CiAKICAgICBpZiAoc3RycCA9PSBOVUxMIHx8ICFpc19kaWdpdChjID0gKnN0cnApKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTcyNCwxMCArNzMwLDEwIEBACiAgICAgaW50IG51bTsKIAogICAgIC8qCi0gICAgKiogYEhPVVJTUEVSREFZICogREFZU1BFUldFRUsgLSAxJyBhbGxvd3MgcXVhc2ktUG9zaXggcnVsZXMgbGlrZQorICAgICoqICdIT1VSU1BFUkRBWSAqIERBWVNQRVJXRUVLIC0gMScgYWxsb3dzIHF1YXNpLVBvc2l4IHJ1bGVzIGxpa2UKICAgICAqKiAiTTEwLjQuNi8yNiIsIHdoaWNoIGRvZXMgbm90IGNvbmZvcm0gdG8gUG9zaXgsCiAgICAgKiogYnV0IHdoaWNoIHNwZWNpZmllcyB0aGUgZXF1aXZhbGVudCBvZgotICAgICoqIGBgMDI6MDAgb24gdGhlIGZpcnN0IFN1bmRheSBvbiBvciBhZnRlciAyMyBPY3QnJy4KKyAgICAqKiAiMDI6MDAgb24gdGhlIGZpcnN0IFN1bmRheSBvbiBvciBhZnRlciAyMyBPY3QiLgogICAgICovCiAgICAgc3RycCA9IGdldG51bShzdHJwLCAmbnVtLCAwLCBIT1VSU1BFUkRBWSAqIERBWVNQRVJXRUVLIC0gMSk7CiAgICAgaWYgKHN0cnAgPT0gTlVMTCkKQEAgLTc0MSw3ICs3NDcsNyBAQAogICAgICAgICAqc2Vjc3AgKz0gbnVtICogU0VDU1BFUk1JTjsKICAgICAgICAgaWYgKCpzdHJwID09ICc6JykgewogICAgICAgICAgICAgKytzdHJwOwotICAgICAgICAgICAgLyogYFNFQ1NQRVJNSU4nIGFsbG93cyBmb3IgbGVhcCBzZWNvbmRzLiAqLworICAgICAgICAgICAgLyogJ1NFQ1NQRVJNSU4nIGFsbG93cyBmb3IgbGVhcCBzZWNvbmRzLiAqLwogICAgICAgICAgICAgc3RycCA9IGdldG51bShzdHJwLCAmbnVtLCAwLCBTRUNTUEVSTUlOKTsKICAgICAgICAgICAgIGlmIChzdHJwID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03NjEsNyArNzY3LDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyICoKIGdldG9mZnNldChyZWdpc3RlciBjb25zdCBjaGFyICpzdHJwLCBpbnRfZmFzdDMyX3QgKmNvbnN0IG9mZnNldHApCiB7Ci0gICAgcmVnaXN0ZXIgaW50ICAgIG5lZyA9IDA7CisgICAgcmVnaXN0ZXIgaW50IG5lZyA9IDA7CiAKICAgICBpZiAoKnN0cnAgPT0gJy0nKSB7CiAgICAgICAgIG5lZyA9IDE7CkBAIC04MzAsMTkgKzgzNiwxOCBAQAogfQogCiAvKgotKiogR2l2ZW4gdGhlIEVwb2NoLXJlbGF0aXZlIHRpbWUgb2YgSmFudWFyeSAxLCAwMDowMDowMCBVVEMsIGluIGEgeWVhciwgdGhlCi0qKiB5ZWFyLCBhIHJ1bGUsIGFuZCB0aGUgb2Zmc2V0IGZyb20gVVQgYXQgdGhlIHRpbWUgdGhhdCBydWxlIHRha2VzIGVmZmVjdCwKLSoqIGNhbGN1bGF0ZSB0aGUgRXBvY2gtcmVsYXRpdmUgdGltZSB0aGF0IHJ1bGUgdGFrZXMgZWZmZWN0LgorKiogR2l2ZW4gYSB5ZWFyLCBhIHJ1bGUsIGFuZCB0aGUgb2Zmc2V0IGZyb20gVVQgYXQgdGhlIHRpbWUgdGhhdCBydWxlIHRha2VzCisqKiBlZmZlY3QsIGNhbGN1bGF0ZSB0aGUgeWVhci1yZWxhdGl2ZSB0aW1lIHRoYXQgcnVsZSB0YWtlcyBlZmZlY3QuCiAqLwogCi1zdGF0aWMgdGltZV90Ci10cmFuc3RpbWUoY29uc3QgdGltZV90IGphbmZpcnN0LCBjb25zdCBpbnQgeWVhciwKLSAgICAgICAgICByZWdpc3RlciBjb25zdCBzdHJ1Y3QgcnVsZSAqY29uc3QgcnVsZXAsIGNvbnN0IGludF9mYXN0MzJfdCBvZmZzZXQpCitzdGF0aWMgaW50X2Zhc3QzMl90Cit0cmFuc3RpbWUoY29uc3QgaW50IHllYXIsIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBydWxlICpjb25zdCBydWxlcCwKKyAgICAgICAgICBjb25zdCBpbnRfZmFzdDMyX3Qgb2Zmc2V0KQogewotICAgIHJlZ2lzdGVyIGludCAgICBsZWFweWVhcjsKLSAgICByZWdpc3RlciB0aW1lX3QgdmFsdWU7Ci0gICAgcmVnaXN0ZXIgaW50ICAgIGk7Ci0gICAgaW50ICAgICBkLCBtMSwgeXkwLCB5eTEsIHl5MiwgZG93OworICAgIHJlZ2lzdGVyIGludCAgICAgICAgICBsZWFweWVhcjsKKyAgICByZWdpc3RlciBpbnRfZmFzdDMyX3QgdmFsdWU7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgIGk7CisgICAgaW50IGQsIG0xLCB5eTAsIHl5MSwgeXkyLCBkb3c7CiAKICAgICBJTklUSUFMSVpFKHZhbHVlKTsKICAgICBsZWFweWVhciA9IGlzbGVhcCh5ZWFyKTsKQEAgLTg1Niw3ICs4NjEsNyBAQAogICAgICAgICAqKiBhZGQgU0VDU1BFUkRBWSB0aW1lcyB0aGUgZGF5IG51bWJlci0xIHRvIHRoZSB0aW1lIG9mCiAgICAgICAgICoqIEphbnVhcnkgMSwgbWlkbmlnaHQsIHRvIGdldCB0aGUgZGF5LgogICAgICAgICAqLwotICAgICAgICB2YWx1ZSA9IGphbmZpcnN0ICsgKHJ1bGVwLT5yX2RheSAtIDEpICogU0VDU1BFUkRBWTsKKyAgICAgICAgdmFsdWUgPSAocnVsZXAtPnJfZGF5IC0gMSkgKiBTRUNTUEVSREFZOwogICAgICAgICBpZiAobGVhcHllYXIgJiYgcnVsZXAtPnJfZGF5ID49IDYwKQogICAgICAgICAgICAgdmFsdWUgKz0gU0VDU1BFUkRBWTsKICAgICAgICAgYnJlYWs7CkBAIC04NjcsMTYgKzg3MiwxMyBAQAogICAgICAgICAqKiBKdXN0IGFkZCBTRUNTUEVSREFZIHRpbWVzIHRoZSBkYXkgbnVtYmVyIHRvIHRoZSB0aW1lIG9mCiAgICAgICAgICoqIEphbnVhcnkgMSwgbWlkbmlnaHQsIHRvIGdldCB0aGUgZGF5LgogICAgICAgICAqLwotICAgICAgICB2YWx1ZSA9IGphbmZpcnN0ICsgcnVsZXAtPnJfZGF5ICogU0VDU1BFUkRBWTsKKyAgICAgICAgdmFsdWUgPSBydWxlcC0+cl9kYXkgKiBTRUNTUEVSREFZOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTU9OVEhfTlRIX0RBWV9PRl9XRUVLOgogICAgICAgICAvKgogICAgICAgICAqKiBNbS5uLmQgLSBudGggImR0aCBkYXkiIG9mIG1vbnRoIG0uCiAgICAgICAgICovCi0gICAgICAgIHZhbHVlID0gamFuZmlyc3Q7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBydWxlcC0+cl9tb24gLSAxOyArK2kpCi0gICAgICAgICAgICB2YWx1ZSArPSBtb25fbGVuZ3Roc1tsZWFweWVhcl1baV0gKiBTRUNTUEVSREFZOwogCiAgICAgICAgIC8qCiAgICAgICAgICoqIFVzZSBaZWxsZXIncyBDb25ncnVlbmNlIHRvIGdldCBkYXktb2Ytd2VlayBvZiBmaXJzdCBkYXkgb2YKQEAgLTkwOSwxMyArOTExLDE1IEBACiAgICAgICAgIC8qCiAgICAgICAgICoqICJkIiBpcyB0aGUgZGF5LW9mLW1vbnRoICh6ZXJvLW9yaWdpbikgb2YgdGhlIGRheSB3ZSB3YW50LgogICAgICAgICAqLwotICAgICAgICB2YWx1ZSArPSBkICogU0VDU1BFUkRBWTsKKyAgICAgICAgdmFsdWUgPSBkICogU0VDU1BFUkRBWTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHJ1bGVwLT5yX21vbiAtIDE7ICsraSkKKyAgICAgICAgICAgIHZhbHVlICs9IG1vbl9sZW5ndGhzW2xlYXB5ZWFyXVtpXSAqIFNFQ1NQRVJEQVk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIC8qCi0gICAgKiogInZhbHVlIiBpcyB0aGUgRXBvY2gtcmVsYXRpdmUgdGltZSBvZiAwMDowMDowMCBVVCBvbiB0aGUgZGF5IGluCi0gICAgKiogcXVlc3Rpb24uIFRvIGdldCB0aGUgRXBvY2gtcmVsYXRpdmUgdGltZSBvZiB0aGUgc3BlY2lmaWVkIGxvY2FsCisgICAgKiogInZhbHVlIiBpcyB0aGUgeWVhci1yZWxhdGl2ZSB0aW1lIG9mIDAwOjAwOjAwIFVUIG9uIHRoZSBkYXkgaW4KKyAgICAqKiBxdWVzdGlvbi4gVG8gZ2V0IHRoZSB5ZWFyLXJlbGF0aXZlIHRpbWUgb2YgdGhlIHNwZWNpZmllZCBsb2NhbAogICAgICoqIHRpbWUgb24gdGhhdCBkYXksIGFkZCB0aGUgdHJhbnNpdGlvbiB0aW1lIGFuZCB0aGUgY3VycmVudCBvZmZzZXQKICAgICAqKiBmcm9tIFVULgogICAgICovCkBAIC05MzEsMTkgKzkzNSwxNiBAQAogdHpwYXJzZShjb25zdCBjaGFyICogbmFtZSwgcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogY29uc3Qgc3AsCiAgICAgICAgIGNvbnN0IGludCBsYXN0ZGl0Y2gpCiB7Ci0gICAgY29uc3QgY2hhciAqICAgICAgICAgICAgc3RkbmFtZTsKLSAgICBjb25zdCBjaGFyICogICAgICAgICAgICBkc3RuYW1lOwotICAgIHNpemVfdCAgICAgICAgICAgICAgc3RkbGVuOwotICAgIHNpemVfdCAgICAgICAgICAgICAgZHN0bGVuOwotICAgIGludF9mYXN0MzJfdCAgICAgICAgICAgICAgICBzdGRvZmZzZXQ7Ci0gICAgaW50X2Zhc3QzMl90ICAgICAgICAgICAgICAgIGRzdG9mZnNldDsKLSAgICByZWdpc3RlciB0aW1lX3QgKiAgICAgICAgICAgYXRwOwotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKiAgICB0eXBlcDsKLSAgICByZWdpc3RlciBjaGFyICogICAgICAgICBjcDsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBsb2FkX3Jlc3VsdDsKLSAgICBzdGF0aWMgc3RydWN0IHR0aW5mbyAgICB6dHRpbmZvOworICAgIGNvbnN0IGNoYXIgKiAgICAgICAgIHN0ZG5hbWU7CisgICAgY29uc3QgY2hhciAqICAgICAgICAgZHN0bmFtZTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICBzdGRsZW47CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgZHN0bGVuOworICAgIGludF9mYXN0MzJfdCAgICAgICAgIHN0ZG9mZnNldDsKKyAgICBpbnRfZmFzdDMyX3QgICAgICAgICBkc3RvZmZzZXQ7CisgICAgcmVnaXN0ZXIgY2hhciAqICAgICAgY3A7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgbG9hZF9yZXN1bHQ7CisgICAgc3RhdGljIHN0cnVjdCB0dGluZm8genR0aW5mbzsKIAotICAgIElOSVRJQUxJWkUoZHN0bmFtZSk7CiAgICAgc3RkbmFtZSA9IG5hbWU7CiAgICAgaWYgKGxhc3RkaXRjaCkgewogICAgICAgICBzdGRsZW4gPSBzdHJsZW4obmFtZSk7ICAvKiBsZW5ndGggb2Ygc3RhbmRhcmQgem9uZSBuYW1lICovCkBAIC05OTQsMTMgKzk5NSwxMiBAQAogICAgICAgICBpZiAoKm5hbWUgPT0gJ1wwJyAmJiBsb2FkX3Jlc3VsdCAhPSAwKQogICAgICAgICAgICAgbmFtZSA9IFRaREVGUlVMRVNUUklORzsKICAgICAgICAgaWYgKCpuYW1lID09ICcsJyB8fCAqbmFtZSA9PSAnOycpIHsKLSAgICAgICAgICAgIHN0cnVjdCBydWxlIHN0YXJ0OwotICAgICAgICAgICAgc3RydWN0IHJ1bGUgZW5kOwotICAgICAgICAgICAgcmVnaXN0ZXIgaW50ICAgIHllYXI7Ci0gICAgICAgICAgICByZWdpc3RlciBpbnQgICAgeWVhcmxpbTsKLSAgICAgICAgICAgIHJlZ2lzdGVyIHRpbWVfdCBqYW5maXJzdDsKLSAgICAgICAgICAgIHRpbWVfdCAgICAgIHN0YXJ0dGltZTsKLSAgICAgICAgICAgIHRpbWVfdCAgICAgIGVuZHRpbWU7CisgICAgICAgICAgICBzdHJ1Y3QgcnVsZSAgc3RhcnQ7CisgICAgICAgICAgICBzdHJ1Y3QgcnVsZSAgZW5kOworICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHllYXI7CisgICAgICAgICAgICByZWdpc3RlciBpbnQgeWVhcmxpbTsKKyAgICAgICAgICAgIHJlZ2lzdGVyIGludCB0aW1lY250OworICAgICAgICAgICAgdGltZV90ICAgICAgIGphbmZpcnN0OwogCiAgICAgICAgICAgICArK25hbWU7CiAgICAgICAgICAgICBpZiAoKG5hbWUgPSBnZXRydWxlKG5hbWUsICZzdGFydCkpID09IE5VTEwpCkBAIC0xMDIyLDQ2ICsxMDIyLDQ4IEBACiAgICAgICAgICAgICBzcC0+dHRpc1sxXS50dF9nbXRvZmYgPSAtc3Rkb2Zmc2V0OwogICAgICAgICAgICAgc3AtPnR0aXNbMV0udHRfaXNkc3QgPSAwOwogICAgICAgICAgICAgc3AtPnR0aXNbMV0udHRfYWJicmluZCA9IDA7Ci0gICAgICAgICAgICBhdHAgPSBzcC0+YXRzOwotICAgICAgICAgICAgdHlwZXAgPSBzcC0+dHlwZXM7CisgICAgICAgICAgICBzcC0+ZGVmYXVsdHR5cGUgPSAwOworICAgICAgICAgICAgdGltZWNudCA9IDA7CiAgICAgICAgICAgICBqYW5maXJzdCA9IDA7CiAgICAgICAgICAgICB5ZWFybGltID0gRVBPQ0hfWUVBUiArIFlFQVJTUEVSUkVQRUFUOwogICAgICAgICAgICAgZm9yICh5ZWFyID0gRVBPQ0hfWUVBUjsgeWVhciA8IHllYXJsaW07IHllYXIrKykgewotICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCB5ZWFyc2VjczsKLQotICAgICAgICAgICAgICAgIHN0YXJ0dGltZSA9IHRyYW5zdGltZShqYW5maXJzdCwgeWVhciwgJnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICBzdGRvZmZzZXQpOwotICAgICAgICAgICAgICAgIGVuZHRpbWUgPSB0cmFuc3RpbWUoamFuZmlyc3QsIHllYXIsICZlbmQsCi0gICAgICAgICAgICAgICAgICAgIGRzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90CisgICAgICAgICAgICAgICAgICBzdGFydHRpbWUgPSB0cmFuc3RpbWUoeWVhciwgJnN0YXJ0LCBzdGRvZmZzZXQpLAorICAgICAgICAgICAgICAgICAgZW5kdGltZSA9IHRyYW5zdGltZSh5ZWFyLCAmZW5kLCBkc3RvZmZzZXQpOworICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdAogICAgICAgICAgICAgICAgIHllYXJzZWNzID0gKHllYXJfbGVuZ3Roc1tpc2xlYXAoeWVhcildCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBTRUNTUEVSREFZKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhcnR0aW1lID4gZW5kdGltZQorICAgICAgICAgICAgICAgIGludCByZXZlcnNlZCA9IGVuZHRpbWUgPCBzdGFydHRpbWU7CisgICAgICAgICAgICAgICAgaWYgKHJldmVyc2VkKSB7CisgICAgICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCBzd2FwID0gc3RhcnR0aW1lOworICAgICAgICAgICAgICAgICAgICBzdGFydHRpbWUgPSBlbmR0aW1lOworICAgICAgICAgICAgICAgICAgICBlbmR0aW1lID0gc3dhcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJldmVyc2VkCiAgICAgICAgICAgICAgICAgICAgIHx8IChzdGFydHRpbWUgPCBlbmR0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoZW5kdGltZSAtIHN0YXJ0dGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgKHllYXJzZWNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoc3Rkb2Zmc2V0IC0gZHN0b2Zmc2V0KSkpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoJnNwLT5hdHNbVFpfTUFYX1RJTUVTIC0gMl0gPCBhdHApCisgICAgICAgICAgICAgICAgICAgIGlmIChUWl9NQVhfVElNRVMgLSAyIDwgdGltZWNudCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB5ZWFybGltID0geWVhciArIFlFQVJTUEVSUkVQRUFUICsgMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0dGltZSA+IGVuZHRpbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICphdHArKyA9IGVuZHRpbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqdHlwZXArKyA9IDE7ICAgLyogRFNUIGVuZHMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICphdHArKyA9IHN0YXJ0dGltZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICp0eXBlcCsrID0gMDsgICAvKiBEU1QgYmVnaW5zICovCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqYXRwKysgPSBzdGFydHRpbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqdHlwZXArKyA9IDA7ICAgLyogRFNUIGJlZ2lucyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICphdHArKyA9IGVuZHRpbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqdHlwZXArKyA9IDE7ICAgLyogRFNUIGVuZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgc3AtPmF0c1t0aW1lY250XSA9IGphbmZpcnN0OworICAgICAgICAgICAgICAgICAgICBpZiAoaW5jcmVtZW50X292ZXJmbG93X3RpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICgmc3AtPmF0c1t0aW1lY250XSwgc3RhcnR0aW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBzcC0+dHlwZXNbdGltZWNudCsrXSA9IHJldmVyc2VkOworICAgICAgICAgICAgICAgICAgICBzcC0+YXRzW3RpbWVjbnRdID0gamFuZmlyc3Q7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmNyZW1lbnRfb3ZlcmZsb3dfdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgKCZzcC0+YXRzW3RpbWVjbnRdLCBlbmR0aW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBzcC0+dHlwZXNbdGltZWNudCsrXSA9ICFyZXZlcnNlZDsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGltZV90X21heCAtIGphbmZpcnN0IDwgeWVhcnNlY3MpCisgICAgICAgICAgICAgICAgaWYgKGluY3JlbWVudF9vdmVyZmxvd190aW1lKCZqYW5maXJzdCwgeWVhcnNlY3MpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBqYW5maXJzdCArPSB5ZWFyc2VjczsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNwLT50aW1lY250ID0gYXRwIC0gc3AtPmF0czsKLSAgICAgICAgICAgIGlmICghc3AtPnRpbWVjbnQpCi0gICAgICAgICAgICAgICAgc3AtPnR5cGVjbnQgPSAxOwkvKiBQZXJwZXR1YWwgRFNULiAgKi8KKyAgICAgICAgICAgIHNwLT50aW1lY250ID0gdGltZWNudDsKKyAgICAgICAgICAgIGlmICghdGltZWNudCkKKyAgICAgICAgICAgICAgICBzcC0+dHlwZWNudCA9IDE7ICAgIC8qIFBlcnBldHVhbCBEU1QuICAqLwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVnaXN0ZXIgaW50X2Zhc3QzMl90ICAgdGhlaXJzdGRvZmZzZXQ7CiAgICAgICAgICAgICByZWdpc3RlciBpbnRfZmFzdDMyX3QgICB0aGVpcmRzdG9mZnNldDsKQEAgLTExNDYsNiArMTE0OCw3IEBACiAgICAgICAgICAgICBzcC0+dHRpc1sxXS50dF9pc2RzdCA9IFRSVUU7CiAgICAgICAgICAgICBzcC0+dHRpc1sxXS50dF9hYmJyaW5kID0gc3RkbGVuICsgMTsKICAgICAgICAgICAgIHNwLT50eXBlY250ID0gMjsKKyAgICAgICAgICAgIHNwLT5kZWZhdWx0dHlwZSA9IDA7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBkc3RsZW4gPSAwOwpAQCAtMTE1NSw2ICsxMTU4LDcgQEAKICAgICAgICAgc3AtPnR0aXNbMF0udHRfZ210b2ZmID0gLXN0ZG9mZnNldDsKICAgICAgICAgc3AtPnR0aXNbMF0udHRfaXNkc3QgPSAwOwogICAgICAgICBzcC0+dHRpc1swXS50dF9hYmJyaW5kID0gMDsKKyAgICAgICAgc3AtPmRlZmF1bHR0eXBlID0gMDsKICAgICB9CiAgICAgc3AtPmNoYXJjbnQgPSBzdGRsZW4gKyAxOwogICAgIGlmIChkc3RsZW4gIT0gMCkKQEAgLTExOTUsNyArMTE5OSw3IEBACiAKICNpZmRlZiBBTExfU1RBVEUKICAgICBpZiAobGNscHRyID09IE5VTEwpIHsKLSAgICAgICAgbGNscHRyID0gY2FsbG9jKDEsIHNpemVvZiAqbGNscHRyKTsKKyAgICAgICAgbGNscHRyID0gbWFsbG9jKHNpemVvZiAqbGNscHRyKTsKICAgICAgICAgaWYgKGxjbHB0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBzZXR0em5hbWUoKTsgICAgLyogYWxsIHdlIGNhbiBkbyAqLwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIxMiw3ICsxMjE2LDcgQEAKIHN0YXRpYyB2b2lkCiB0enNldF9sb2NrZWQodm9pZCkKIHsKLSAgICByZWdpc3RlciBjb25zdCBjaGFyICogICBuYW1lID0gTlVMTDsKKyAgICByZWdpc3RlciBjb25zdCBjaGFyICogbmFtZTsKIAogICAgIG5hbWUgPSBnZXRlbnYoIlRaIik7CiAKQEAgLTEyMzUsNyArMTIzOSw3IEBACiAKICNpZmRlZiBBTExfU1RBVEUKICAgICBpZiAobGNscHRyID09IE5VTEwpIHsKLSAgICAgICAgbGNscHRyID0gY2FsbG9jKDEsIHNpemVvZiAqbGNscHRyKTsKKyAgICAgICAgbGNscHRyID0gbWFsbG9jKHNpemVvZiAqbGNscHRyKTsKICAgICAgICAgaWYgKGxjbHB0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBzZXR0em5hbWUoKTsgICAgLyogYWxsIHdlIGNhbiBkbyAqLwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTI3OSwyNyArMTI4MywyNSBAQAogLypBUkdTVVNFRCovCiBzdGF0aWMgc3RydWN0IHRtICoKIGxvY2Fsc3ViKGNvbnN0IHRpbWVfdCAqIGNvbnN0IHRpbWVwLCBjb25zdCBpbnRfZmFzdDMyX3Qgb2Zmc2V0LAotICAgICAgICAgc3RydWN0IHRtICogY29uc3QgdG1wLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiBzcCkgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KKyAgICAgICAgIHN0cnVjdCB0bSAqIGNvbnN0IHRtcCwgc3RydWN0IHN0YXRlICogc3ApIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHR0aW5mbyAqICB0dGlzcDsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBpOwotICAgIHJlZ2lzdGVyIHN0cnVjdCB0bSAqICAgICAgICByZXN1bHQ7Ci0gICAgY29uc3QgdGltZV90ICAgICAgICAgICAgdCA9ICp0aW1lcDsKKyAgICByZWdpc3RlciBjb25zdCBzdHJ1Y3QgdHRpbmZvICogdHRpc3A7CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgaTsKKyAgICByZWdpc3RlciBzdHJ1Y3QgdG0gKiByZXN1bHQ7CisgICAgY29uc3QgdGltZV90ICAgICAgICAgdCA9ICp0aW1lcDsKIAogICAgIC8vIEJFR0lOIGFuZHJvaWQtY2hhbmdlZDogc3VwcG9ydCB1c2VyLXN1cHBsaWVkIHNwLgogICAgIGlmIChzcCA9PSBOVUxMKSB7CiAgICAgICAgIHNwID0gbGNscHRyOwogICAgIH0KICAgICAvLyBFTkQgYW5kcm9pZC1jaGFuZ2VkCi0jaWZkZWYgQUxMX1NUQVRFCiAgICAgaWYgKHNwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBnbXRzdWIodGltZXAsIG9mZnNldCwgdG1wLCBzcCk7IC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCi0jZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KICAgICBpZiAoKHNwLT5nb2JhY2sgJiYgdCA8IHNwLT5hdHNbMF0pIHx8CiAgICAgICAgIChzcC0+Z29haGVhZCAmJiB0ID4gc3AtPmF0c1tzcC0+dGltZWNudCAtIDFdKSkgewogICAgICAgICAgICAgdGltZV90ICAgICAgICAgIG5ld3QgPSB0OwotICAgICAgICAgICAgcmVnaXN0ZXIgdGltZV90ICAgICBzZWNvbmRzOwotICAgICAgICAgICAgcmVnaXN0ZXIgdGltZV90ICAgICB5ZWFyczsKKyAgICAgICAgICAgIHJlZ2lzdGVyIHRpbWVfdCBzZWNvbmRzOworICAgICAgICAgICAgcmVnaXN0ZXIgdGltZV90IHllYXJzOwogCiAgICAgICAgICAgICBpZiAodCA8IHNwLT5hdHNbMF0pCiAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHNwLT5hdHNbMF0gLSB0OwpAQCAtMTMzMCw4ICsxMzMyLDggQEAKICAgICBpZiAoc3AtPnRpbWVjbnQgPT0gMCB8fCB0IDwgc3AtPmF0c1swXSkgewogICAgICAgICBpID0gc3AtPmRlZmF1bHR0eXBlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlZ2lzdGVyIGludCAgICBsbyA9IDE7Ci0gICAgICAgIHJlZ2lzdGVyIGludCAgICBoaSA9IHNwLT50aW1lY250OworICAgICAgICByZWdpc3RlciBpbnQgbG8gPSAxOworICAgICAgICByZWdpc3RlciBpbnQgaGkgPSBzcC0+dGltZWNudDsKIAogICAgICAgICB3aGlsZSAobG8gPCBoaSkgewogICAgICAgICAgICAgcmVnaXN0ZXIgaW50ICAgIG1pZCA9IChsbyArIGhpKSA+PiAxOwpAQCAtMTM3MSw3ICsxMzczLDcgQEAKIHN0cnVjdCB0bSAqCiBsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKiBjb25zdCB0aW1lcCwgc3RydWN0IHRtICogdG1wKQogewotICAgIHN0cnVjdCB0bSogIHJlc3VsdDsKKyAgICBzdHJ1Y3QgdG0qIHJlc3VsdDsKIAogICAgIF90ekxvY2soKTsKICAgICB0enNldF9sb2NrZWQoKTsKQEAgLTEzODcsMTggKzEzODksMTggQEAKIAogc3RhdGljIHN0cnVjdCB0bSAqCiBnbXRzdWIoY29uc3QgdGltZV90ICogY29uc3QgdGltZXAsIGNvbnN0IGludF9mYXN0MzJfdCBvZmZzZXQsCi0gICAgICAgc3RydWN0IHRtICpjb25zdCB0bXAsIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwKSAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgorICAgICAgIHN0cnVjdCB0bSAqY29uc3QgdG1wLCBzdHJ1Y3Qgc3RhdGUgKiBzcCBfX3VudXNlZCkgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KIHsKLSAgICByZWdpc3RlciBzdHJ1Y3QgdG0gKiAgICByZXN1bHQ7Ci0KLSAgICAodm9pZCkgc3A7IC8vIGFuZHJvaWQtYWRkZWQ6IHVudXNlZC4KKyAgICByZWdpc3RlciBzdHJ1Y3QgdG0gKiByZXN1bHQ7CiAKICAgICBpZiAoIWdtdF9pc19zZXQpIHsKLSAgICAgICAgZ210X2lzX3NldCA9IFRSVUU7CiAjaWZkZWYgQUxMX1NUQVRFCi0gICAgICAgIGdtdHB0ciA9IGNhbGxvYygxLCBzaXplb2YgKmdtdHB0cik7Ci0gICAgICAgIGlmIChnbXRwdHIgIT0gTlVMTCkKKyAgICAgICAgZ210cHRyID0gbWFsbG9jKHNpemVvZiAqZ210cHRyKTsKKyAgICAgICAgZ210X2lzX3NldCA9IGdtdHB0ciAhPSBOVUxMOworI2Vsc2UKKyAgICAgICAgZ210X2lzX3NldCA9IFRSVUU7CiAjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKyAgICAgICAgaWYgKGdtdF9pc19zZXQpCiAgICAgICAgICAgICBnbXRsb2FkKGdtdHB0cik7CiAgICAgfQogICAgIHJlc3VsdCA9IHRpbWVzdWIodGltZXAsIG9mZnNldCwgZ210cHRyLCB0bXApOwpAQCAtMTQwOCwxOCArMTQxMCw3IEBACiAgICAgKiogIlVUK3h4eHgiIG9yICJVVC14eHh4IiBpZiBvZmZzZXQgaXMgbm9uLXplcm8sCiAgICAgKiogYnV0IHRoaXMgaXMgbm8gdGltZSBmb3IgYSB0cmVhc3VyZSBodW50LgogICAgICovCi0gICAgaWYgKG9mZnNldCAhPSAwKQotICAgICAgICB0bXAtPlRNX1pPTkUgPSB3aWxkYWJicjsKLSAgICBlbHNlIHsKLSNpZmRlZiBBTExfU1RBVEUKLSAgICAgICAgaWYgKGdtdHB0ciA9PSBOVUxMKQotICAgICAgICAgICAgdG1wLT5UTV9aT05FID0gZ210OwotICAgICAgICBlbHNlICAgIHRtcC0+VE1fWk9ORSA9IGdtdHB0ci0+Y2hhcnM7Ci0jZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KLSNpZm5kZWYgQUxMX1NUQVRFCi0gICAgICAgIHRtcC0+VE1fWk9ORSA9IGdtdHB0ci0+Y2hhcnM7Ci0jZW5kaWYgLyogU3RhdGUgRmFybSAqLwotICAgIH0KKyAgICB0bXAtPlRNX1pPTkUgPSBvZmZzZXQgPyB3aWxkYWJiciA6IGdtdHB0ciA/IGdtdHB0ci0+Y2hhcnMgOiBnbXQ7CiAjZW5kaWYgLyogZGVmaW5lZCBUTV9aT05FICovCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0MzcsNyArMTQyOCw3IEBACiBzdHJ1Y3QgdG0gKgogZ210aW1lX3IoY29uc3QgdGltZV90ICogY29uc3QgdGltZXAsIHN0cnVjdCB0bSAqIHRtcCkKIHsKLSAgICBzdHJ1Y3QgdG0qICByZXN1bHQ7CisgICAgc3RydWN0IHRtKiByZXN1bHQ7CiAKICAgICBfdHpMb2NrKCk7CiAgICAgcmVzdWx0ID0gZ210c3ViKHRpbWVwLCAwTCwgdG1wLCBOVUxMKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBleHRyYSBwYXJhbWV0ZXIuCkBAIC0xNDQ2LDYgKzE0MzcsMTYgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWZkZWYgU1REX0lOU1BJUkVECisKK3N0cnVjdCB0bSAqCitvZmZ0aW1lKGNvbnN0IHRpbWVfdCAqY29uc3QgdGltZXAsIGNvbnN0IGxvbmcgb2Zmc2V0KQoreworICAgIHJldHVybiBnbXRzdWIodGltZXAsIG9mZnNldCwgJnRtR2xvYmFsLCBOVUxMKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBleHRyYSBwYXJhbWV0ZXIuCit9CisKKyNlbmRpZiAvKiBkZWZpbmVkIFNURF9JTlNQSVJFRCAqLworCiAvKgogKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGVhcCB5ZWFycyB0aHJvdWdoIHRoZSBlbmQgb2YgdGhlIGdpdmVuIHllYXIKICoqIHdoZXJlLCB0byBtYWtlIHRoZSBtYXRoIGVhc3ksIHRoZSBhbnN3ZXIgZm9yIHllYXIgemVybyBpcyBkZWZpbmVkIGFzIHplcm8uCkBAIC0xNDYzLDI0ICsxNDY0LDE5IEBACiAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBzdGF0ZSAqY29uc3Qgc3AsCiAgICAgICAgIHJlZ2lzdGVyIHN0cnVjdCB0bSAqY29uc3QgdG1wKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBsc2luZm8gKiAgbHA7Ci0gICAgcmVnaXN0ZXIgdGltZV90ICAgICAgICAgdGRheXM7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgaWRheXM7ICAvKiB1bnNpZ25lZCB3b3VsZCBiZSBzbyAyMDAzICovCi0gICAgcmVnaXN0ZXIgaW50X2Zhc3Q2NF90ICAgICAgICAgICByZW07Ci0gICAgaW50ICAgICAgICAgICAgIHk7Ci0gICAgcmVnaXN0ZXIgY29uc3QgaW50ICogICAgICAgIGlwOwotICAgIHJlZ2lzdGVyIGludF9mYXN0NjRfdCAgICAgICAgICAgY29ycjsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBoaXQ7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgaTsKKyAgICByZWdpc3RlciBjb25zdCBzdHJ1Y3QgbHNpbmZvICogbHA7CisgICAgcmVnaXN0ZXIgdGltZV90ICAgICAgIHRkYXlzOworICAgIHJlZ2lzdGVyIGludCAgICAgICAgICBpZGF5czsgIC8qIHVuc2lnbmVkIHdvdWxkIGJlIHNvIDIwMDMgKi8KKyAgICByZWdpc3RlciBpbnRfZmFzdDY0X3QgcmVtOworICAgIGludCAgICAgICAgICAgICAgICAgICB5OworICAgIHJlZ2lzdGVyIGNvbnN0IGludCAqICBpcDsKKyAgICByZWdpc3RlciBpbnRfZmFzdDY0X3QgY29ycjsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgaGl0OworICAgIHJlZ2lzdGVyIGludCAgICAgICAgICBpOwogCiAgICAgY29yciA9IDA7CiAgICAgaGl0ID0gMDsKLSNpZmRlZiBBTExfU1RBVEUKICAgICBpID0gKHNwID09IE5VTEwpID8gMCA6IHNwLT5sZWFwY250OwotI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCi0jaWZuZGVmIEFMTF9TVEFURQotICAgIGkgPSBzcC0+bGVhcGNudDsKLSNlbmRpZiAvKiBTdGF0ZSBGYXJtICovCiAgICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgICAgIGxwID0gJnNwLT5sc2lzW2ldOwogICAgICAgICBpZiAoKnRpbWVwID49IGxwLT5sc190cmFucykgewpAQCAtMTYzMSw2MSArMTYyNyw3NyBAQAogc3RhdGljIGludAogaW5jcmVtZW50X292ZXJmbG93KGludCAqY29uc3QgaXAsIGludCBqKQogewotCXJlZ2lzdGVyIGludCBjb25zdAlpID0gKmlwOworICAgIHJlZ2lzdGVyIGludCBjb25zdCBpID0gKmlwOwogCi0JLyoKLQkqKiBJZiBpID49IDAgdGhlcmUgY2FuIG9ubHkgYmUgb3ZlcmZsb3cgaWYgaSArIGogPiBJTlRfTUFYCi0JKiogb3IgaWYgaiA+IElOVF9NQVggLSBpOyBnaXZlbiBpID49IDAsIElOVF9NQVggLSBpIGNhbm5vdCBvdmVyZmxvdy4KLQkqKiBJZiBpIDwgMCB0aGVyZSBjYW4gb25seSBiZSBvdmVyZmxvdyBpZiBpICsgaiA8IElOVF9NSU4KLQkqKiBvciBpZiBqIDwgSU5UX01JTiAtIGk7IGdpdmVuIGkgPCAwLCBJTlRfTUlOIC0gaSBjYW5ub3Qgb3ZlcmZsb3cuCi0JKi8KLQlpZiAoKGkgPj0gMCkgPyAoaiA+IElOVF9NQVggLSBpKSA6IChqIDwgSU5UX01JTiAtIGkpKQotCQlyZXR1cm4gVFJVRTsKLQkqaXAgKz0gajsKLQlyZXR1cm4gRkFMU0U7CisgICAgLyoKKyAgICAqKiBJZiBpID49IDAgdGhlcmUgY2FuIG9ubHkgYmUgb3ZlcmZsb3cgaWYgaSArIGogPiBJTlRfTUFYCisgICAgKiogb3IgaWYgaiA+IElOVF9NQVggLSBpOyBnaXZlbiBpID49IDAsIElOVF9NQVggLSBpIGNhbm5vdCBvdmVyZmxvdy4KKyAgICAqKiBJZiBpIDwgMCB0aGVyZSBjYW4gb25seSBiZSBvdmVyZmxvdyBpZiBpICsgaiA8IElOVF9NSU4KKyAgICAqKiBvciBpZiBqIDwgSU5UX01JTiAtIGk7IGdpdmVuIGkgPCAwLCBJTlRfTUlOIC0gaSBjYW5ub3Qgb3ZlcmZsb3cuCisgICAgKi8KKyAgICBpZiAoKGkgPj0gMCkgPyAoaiA+IElOVF9NQVggLSBpKSA6IChqIDwgSU5UX01JTiAtIGkpKQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAqaXAgKz0gajsKKyAgICByZXR1cm4gRkFMU0U7CiB9CiAKIHN0YXRpYyBpbnQKIGluY3JlbWVudF9vdmVyZmxvdzMyKGludF9mYXN0MzJfdCAqY29uc3QgbHAsIGludCBjb25zdCBtKQogewotCXJlZ2lzdGVyIGludF9mYXN0MzJfdCBjb25zdAlsID0gKmxwOworICAgIHJlZ2lzdGVyIGludF9mYXN0MzJfdCBjb25zdCBsID0gKmxwOwogCi0JaWYgKChsID49IDApID8gKG0gPiBJTlRfRkFTVDMyX01BWCAtIGwpIDogKG0gPCBJTlRfRkFTVDMyX01JTiAtIGwpKQotCQlyZXR1cm4gVFJVRTsKLQkqbHAgKz0gbTsKLQlyZXR1cm4gRkFMU0U7CisgICAgaWYgKChsID49IDApID8gKG0gPiBJTlRfRkFTVDMyX01BWCAtIGwpIDogKG0gPCBJTlRfRkFTVDMyX01JTiAtIGwpKQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAqbHAgKz0gbTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBpbnQKK2luY3JlbWVudF9vdmVyZmxvd190aW1lKHRpbWVfdCAqdHAsIGludF9mYXN0MzJfdCBqKQoreworICAgIC8qCisgICAgKiogVGhpcyBpcyBsaWtlCisgICAgKiogJ2lmICghICh0aW1lX3RfbWluIDw9ICp0cCArIGogJiYgKnRwICsgaiA8PSB0aW1lX3RfbWF4KSkgLi4uJywKKyAgICAqKiBleGNlcHQgdGhhdCBpdCBkb2VzIHRoZSByaWdodCB0aGluZyBldmVuIGlmICp0cCArIGogd291bGQgb3ZlcmZsb3cuCisgICAgKi8KKyAgICBpZiAoISAoaiA8IDAKKyAgICAgICAgICAgPyAoVFlQRV9TSUdORUQodGltZV90KSA/IHRpbWVfdF9taW4gLSBqIDw9ICp0cCA6IC0xIC0gaiA8ICp0cCkKKyAgICAgICAgICAgOiAqdHAgPD0gdGltZV90X21heCAtIGopKQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAqdHAgKz0gajsKKyAgICByZXR1cm4gRkFMU0U7CiB9CiAKIHN0YXRpYyBpbnQKIG5vcm1hbGl6ZV9vdmVyZmxvdyhpbnQgKmNvbnN0IHRlbnNwdHIsIGludCAqY29uc3QgdW5pdHNwdHIsIGNvbnN0IGludCBiYXNlKQogewotCXJlZ2lzdGVyIGludAl0ZW5zZGVsdGE7CisgICAgcmVnaXN0ZXIgaW50IHRlbnNkZWx0YTsKIAotCXRlbnNkZWx0YSA9ICgqdW5pdHNwdHIgPj0gMCkgPwotCQkoKnVuaXRzcHRyIC8gYmFzZSkgOgotCQkoLTEgLSAoLTEgLSAqdW5pdHNwdHIpIC8gYmFzZSk7Ci0JKnVuaXRzcHRyIC09IHRlbnNkZWx0YSAqIGJhc2U7Ci0JcmV0dXJuIGluY3JlbWVudF9vdmVyZmxvdyh0ZW5zcHRyLCB0ZW5zZGVsdGEpOworICAgIHRlbnNkZWx0YSA9ICgqdW5pdHNwdHIgPj0gMCkgPworICAgICAgICAoKnVuaXRzcHRyIC8gYmFzZSkgOgorICAgICAgICAoLTEgLSAoLTEgLSAqdW5pdHNwdHIpIC8gYmFzZSk7CisgICAgKnVuaXRzcHRyIC09IHRlbnNkZWx0YSAqIGJhc2U7CisgICAgcmV0dXJuIGluY3JlbWVudF9vdmVyZmxvdyh0ZW5zcHRyLCB0ZW5zZGVsdGEpOwogfQogCiBzdGF0aWMgaW50CiBub3JtYWxpemVfb3ZlcmZsb3czMihpbnRfZmFzdDMyX3QgKmNvbnN0IHRlbnNwdHIsIGludCAqY29uc3QgdW5pdHNwdHIsCi0JCSAgICAgY29uc3QgaW50IGJhc2UpCisgICAgICAgICAgICAgY29uc3QgaW50IGJhc2UpCiB7Ci0JcmVnaXN0ZXIgaW50CXRlbnNkZWx0YTsKKyAgICByZWdpc3RlciBpbnQgdGVuc2RlbHRhOwogCi0JdGVuc2RlbHRhID0gKCp1bml0c3B0ciA+PSAwKSA/Ci0JCSgqdW5pdHNwdHIgLyBiYXNlKSA6Ci0JCSgtMSAtICgtMSAtICp1bml0c3B0cikgLyBiYXNlKTsKLQkqdW5pdHNwdHIgLT0gdGVuc2RlbHRhICogYmFzZTsKLQlyZXR1cm4gaW5jcmVtZW50X292ZXJmbG93MzIodGVuc3B0ciwgdGVuc2RlbHRhKTsKKyAgICB0ZW5zZGVsdGEgPSAoKnVuaXRzcHRyID49IDApID8KKyAgICAgICAgKCp1bml0c3B0ciAvIGJhc2UpIDoKKyAgICAgICAgKC0xIC0gKC0xIC0gKnVuaXRzcHRyKSAvIGJhc2UpOworICAgICp1bml0c3B0ciAtPSB0ZW5zZGVsdGEgKiBiYXNlOworICAgIHJldHVybiBpbmNyZW1lbnRfb3ZlcmZsb3czMih0ZW5zcHRyLCB0ZW5zZGVsdGEpOwogfQogCiBzdGF0aWMgaW50CiB0bWNvbXAocmVnaXN0ZXIgY29uc3Qgc3RydWN0IHRtICogY29uc3QgYXRtcCwKICAgICAgICByZWdpc3RlciBjb25zdCBzdHJ1Y3QgdG0gKiBjb25zdCBidG1wKQogewotICAgIHJlZ2lzdGVyIGludCAgICByZXN1bHQ7CisgICAgcmVnaXN0ZXIgaW50IHJlc3VsdDsKIAogICAgIGlmIChhdG1wLT50bV95ZWFyICE9IGJ0bXAtPnRtX3llYXIpCiAgICAgICAgIHJldHVybiBhdG1wLT50bV95ZWFyIDwgYnRtcC0+dG1feWVhciA/IC0xIDogMTsKQEAgLTE2OTksMjEgKzE3MTEsMjEgQEAKIAogc3RhdGljIHRpbWVfdAogdGltZTJzdWIoc3RydWN0IHRtICogY29uc3QgdG1wLAotICAgICAgICAgc3RydWN0IHRtICooKmNvbnN0IGZ1bmNwKShjb25zdCB0aW1lX3QqLCBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSosIGNvbnN0IHN0cnVjdCBzdGF0ZSopLAorICAgICAgICAgc3RydWN0IHRtICooKmNvbnN0IGZ1bmNwKShjb25zdCB0aW1lX3QqLCBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSosIHN0cnVjdCBzdGF0ZSopLAogICAgICAgICAgY29uc3QgaW50X2Zhc3QzMl90IG9mZnNldCwKICAgICAgICAgIGludCAqIGNvbnN0IG9rYXlwLAotICAgICAgICAgY29uc3QgaW50IGRvX25vcm1fc2VjcywgY29uc3Qgc3RydWN0IHN0YXRlICogc3ApIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AKKyAgICAgICAgIGNvbnN0IGludCBkb19ub3JtX3NlY3MsIHN0cnVjdCBzdGF0ZSAqIHNwKSAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwCiB7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgZGlyOwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGksIGo7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgc2F2ZWRfc2Vjb25kczsKLSAgICByZWdpc3RlciBpbnRfZmFzdDMyX3QgICAgICAgICAgIGxpOwotICAgIHJlZ2lzdGVyIHRpbWVfdCAgICAgICAgIGxvOwotICAgIHJlZ2lzdGVyIHRpbWVfdCAgICAgICAgIGhpOwotICAgIGludF9mYXN0MzJfdCAgICAgICAgICAgICAgICB5OwotICAgIHRpbWVfdCAgICAgICAgICAgICAgbmV3dDsKLSAgICB0aW1lX3QgICAgICAgICAgICAgIHQ7Ci0gICAgc3RydWN0IHRtICAgICAgICAgICB5b3VydG0sIG15dG07CisgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgIGRpcjsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgaSwgajsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgc2F2ZWRfc2Vjb25kczsKKyAgICByZWdpc3RlciBpbnRfZmFzdDMyX3QgbGk7CisgICAgcmVnaXN0ZXIgdGltZV90ICAgICAgIGxvOworICAgIHJlZ2lzdGVyIHRpbWVfdCAgICAgICBoaTsKKyAgICBpbnRfZmFzdDMyX3QgICAgICAgICAgeTsKKyAgICB0aW1lX3QgICAgICAgICAgICAgICAgbmV3dDsKKyAgICB0aW1lX3QgICAgICAgICAgICAgICAgdDsKKyAgICBzdHJ1Y3QgdG0gICAgICAgICAgICAgeW91cnRtLCBteXRtOwogCiAgICAgKm9rYXlwID0gRkFMU0U7CiAgICAgeW91cnRtID0gKnRtcDsKQEAgLTE4MzcsMTQgKzE4NDksMTIgQEAKICAgICAgICAgKi8KICAgICAgICAgLy8gQkVHSU4gYW5kcm9pZC1jaGFuZ2VkOiBzdXBwb3J0IHVzZXItc3VwcGxpZWQgc3AKICAgICAgICAgaWYgKHNwID09IE5VTEwpIHsKLSAgICAgICAgICAgIHNwID0gKGNvbnN0IHN0cnVjdCBzdGF0ZSAqKQorICAgICAgICAgICAgc3AgPSAoc3RydWN0IHN0YXRlICopCiAgICAgICAgICAgICAgICAgKChmdW5jcCA9PSBsb2NhbHN1YikgPyBsY2xwdHIgOiBnbXRwdHIpOwogICAgICAgICB9CiAgICAgICAgIC8vIEVORCBhbmRyb2lkLWNoYW5nZWQKLSNpZmRlZiBBTExfU1RBVEUKICAgICAgICAgaWYgKHNwID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gV1JPTkc7Ci0jZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KICAgICAgICAgZm9yIChpID0gc3AtPnR5cGVjbnQgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICAgICAgaWYgKHNwLT50dGlzW2ldLnR0X2lzZHN0ICE9IHlvdXJ0bS50bV9pc2RzdCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE4ODAsMTEgKzE4OTAsMTEgQEAKIAogc3RhdGljIHRpbWVfdAogdGltZTIoc3RydWN0IHRtICogY29uc3QgdG1wLAotICAgICAgc3RydWN0IHRtICogKCpjb25zdCBmdW5jcCkoY29uc3QgdGltZV90ICosIGludF9mYXN0MzJfdCwgc3RydWN0IHRtICosIGNvbnN0IHN0cnVjdCBzdGF0ZSAqKSwgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KKyAgICAgIHN0cnVjdCB0bSAqICgqY29uc3QgZnVuY3ApKGNvbnN0IHRpbWVfdCAqLCBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSAqLCBzdHJ1Y3Qgc3RhdGUgKiksIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCiAgICAgICBjb25zdCBpbnRfZmFzdDMyX3Qgb2Zmc2V0LAotICAgICAgaW50ICpjb25zdCBva2F5cCwgY29uc3Qgc3RydWN0IHN0YXRlKiBzcCkgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KKyAgICAgIGludCAqY29uc3Qgb2theXAsIHN0cnVjdCBzdGF0ZSogc3ApIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCiB7Ci0gICAgdGltZV90ICB0OworICAgIHRpbWVfdCB0OwogCiAgICAgLyoKICAgICAqKiBGaXJzdCB0cnkgd2l0aG91dCBub3JtYWxpemF0aW9uIG9mIHNlY29uZHMKQEAgLTE4OTcsMTYgKzE5MDcsMTYgQEAKIAogc3RhdGljIHRpbWVfdAogdGltZTEoc3RydWN0IHRtICogY29uc3QgdG1wLAotICAgICAgc3RydWN0IHRtICogKCogY29uc3QgZnVuY3ApIChjb25zdCB0aW1lX3QgKiwgaW50X2Zhc3QzMl90LCBzdHJ1Y3QgdG0gKiwgY29uc3Qgc3RydWN0IHN0YXRlICopLCAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgotICAgICAgY29uc3QgaW50X2Zhc3QzMl90IG9mZnNldCwgY29uc3Qgc3RydWN0IHN0YXRlICogc3ApIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCisgICAgICBzdHJ1Y3QgdG0gKiAoKiBjb25zdCBmdW5jcCkgKGNvbnN0IHRpbWVfdCAqLCBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSAqLCBzdHJ1Y3Qgc3RhdGUgKiksIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCisgICAgICBjb25zdCBpbnRfZmFzdDMyX3Qgb2Zmc2V0LCBzdHJ1Y3Qgc3RhdGUgKiBzcCkgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KIHsKLSAgICByZWdpc3RlciB0aW1lX3QgICAgICAgICB0OwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIHNhbWVpLCBvdGhlcmk7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgc2FtZWluZCwgb3RoZXJpbmQ7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgaTsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBuc2VlbjsKLSAgICBpbnQgICAgICAgICAgICAgc2VlbltUWl9NQVhfVFlQRVNdOwotICAgIGludCAgICAgICAgICAgICB0eXBlc1tUWl9NQVhfVFlQRVNdOworICAgIHJlZ2lzdGVyIHRpbWVfdCB0OworICAgIHJlZ2lzdGVyIGludCAgICBzYW1laSwgb3RoZXJpOworICAgIHJlZ2lzdGVyIGludCAgICBzYW1laW5kLCBvdGhlcmluZDsKKyAgICByZWdpc3RlciBpbnQgICAgaTsKKyAgICByZWdpc3RlciBpbnQgICAgbnNlZW47CisgICAgY2hhciAgICAgICAgICAgIHNlZW5bVFpfTUFYX1RZUEVTXTsKKyAgICB1bnNpZ25lZCBjaGFyICAgdHlwZXNbVFpfTUFYX1RZUEVTXTsKICAgICBpbnQgICAgICAgICAgICAgb2theTsKIAogICAgIGlmICh0bXAgPT0gTlVMTCkgewpAQCAtMTkxNiwxNyArMTkyNiwxNSBAQAogICAgIGlmICh0bXAtPnRtX2lzZHN0ID4gMSkKICAgICAgICAgdG1wLT50bV9pc2RzdCA9IDE7CiAgICAgdCA9IHRpbWUyKHRtcCwgZnVuY3AsIG9mZnNldCwgJm9rYXksIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KLSNpZmRlZiBQQ1RTCi0gICAgLyoKLSAgICAqKiBQQ1RTIGNvZGUgY291cnRlc3kgR3JhbnQgU3VsbGl2YW4uCi0gICAgKi8KICAgICBpZiAob2theSkKICAgICAgICAgcmV0dXJuIHQ7CiAgICAgaWYgKHRtcC0+dG1faXNkc3QgPCAwKQorI2lmZGVmIFBDVFMKKyAgICAgICAgLyoKKyAgICAgICAgKiogUE9TSVggQ29uZm9ybWFuY2UgVGVzdCBTdWl0ZSBjb2RlIGNvdXJ0ZXN5IEdyYW50IFN1bGxpdmFuLgorICAgICAgICAqLwogICAgICAgICB0bXAtPnRtX2lzZHN0ID0gMDsgIC8qIHJlc2V0IHRvIHN0ZCBhbmQgdHJ5IGFnYWluICovCi0jZW5kaWYgLyogZGVmaW5lZCBQQ1RTICovCi0jaWZuZGVmIFBDVFMKLSAgICBpZiAob2theSB8fCB0bXAtPnRtX2lzZHN0IDwgMCkKKyNlbHNlCiAgICAgICAgIHJldHVybiB0OwogI2VuZGlmIC8qICFkZWZpbmVkIFBDVFMgKi8KICAgICAvKgpAQCAtMTkzNywxMyArMTk0NSwxMSBAQAogICAgICovCiAgICAgLy8gQkVHSU4gYW5kcm9pZC1jaGFuZ2VkOiBzdXBwb3J0IHVzZXItc3VwcGxpZWQgc3AuCiAgICAgaWYgKHNwID09IE5VTEwpIHsKLSAgICAgICAgc3AgPSAoY29uc3Qgc3RydWN0IHN0YXRlICopICgoZnVuY3AgPT0gbG9jYWxzdWIpID8gIGxjbHB0ciA6IGdtdHB0cik7CisgICAgICAgIHNwID0gKHN0cnVjdCBzdGF0ZSAqKSAoKGZ1bmNwID09IGxvY2Fsc3ViKSA/ICBsY2xwdHIgOiBnbXRwdHIpOwogICAgIH0KICAgICAvLyBCRUdJTiBhbmRyb2lkLWNoYW5nZWQKLSNpZmRlZiBBTExfU1RBVEUKICAgICBpZiAoc3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFdST05HOwotI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCiAgICAgZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpCiAgICAgICAgIHNlZW5baV0gPSBGQUxTRTsKICAgICBuc2VlbiA9IDA7CkBAIC0xOTk3LDcgKzIwMDMsNyBAQAogdGltZV90CiB0aW1lZ20oc3RydWN0IHRtICogY29uc3QgdG1wKQogewotICAgIHRpbWVfdCAgcmVzdWx0OworICAgIHRpbWVfdCByZXN1bHQ7CiAKICAgICBpZiAodG1wICE9IE5VTEwpCiAgICAgICAgIHRtcC0+dG1faXNkc3QgPSAwOwpAQCAtMjAwOCw2ICsyMDE0LDE0IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordGltZV90Cit0aW1lb2ZmKHN0cnVjdCB0bSAqY29uc3QgdG1wLCBjb25zdCBsb25nIG9mZnNldCkKK3sKKyAgICBpZiAodG1wICE9IE5VTEwpCisgICAgICAgIHRtcC0+dG1faXNkc3QgPSAwOworICAgIHJldHVybiB0aW1lMSh0bXAsIGdtdHN1Yiwgb2Zmc2V0LCBOVUxMKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBleHRyYSBwYXJhbWV0ZXIuCit9CisKICNlbmRpZiAvKiBkZWZpbmVkIFNURF9JTlNQSVJFRCAqLwogCiAjaWZkZWYgQ01VQ1MKQEAgLTIwMjAsNyArMjAzNCw3IEBACiBsb25nCiBndGltZShzdHJ1Y3QgdG0gKiBjb25zdCB0bXApCiB7Ci0gICAgY29uc3QgdGltZV90ICAgIHQgPSBta3RpbWUodG1wKTsKKyAgICBjb25zdCB0aW1lX3QgdCA9IG1rdGltZSh0bXApOwogCiAgICAgaWYgKHQgPT0gV1JPTkcpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTIwNDYsOSArMjA2MCw5IEBACiBzdGF0aWMgaW50X2Zhc3Q2NF90CiBsZWFwY29ycih0aW1lX3QgKiB0aW1lcCkKIHsKLSAgICByZWdpc3RlciBzdHJ1Y3Qgc3RhdGUgKiAgICAgc3A7Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGxzaW5mbyAqICAgIGxwOwotICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGk7CisgICAgcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogIHNwOworICAgIHJlZ2lzdGVyIHN0cnVjdCBsc2luZm8gKiBscDsKKyAgICByZWdpc3RlciBpbnQgICAgICAgICAgICAgaTsKIAogICAgIHNwID0gbGNscHRyOwogICAgIGkgPSBzcC0+bGVhcGNudDsKQEAgLTIwNzAsOCArMjA4NCw4IEBACiB0aW1lX3QKIHBvc2l4MnRpbWUodGltZV90IHQpCiB7Ci0gICAgdGltZV90ICB4OwotICAgIHRpbWVfdCAgeTsKKyAgICB0aW1lX3QgeDsKKyAgICB0aW1lX3QgeTsKIAogICAgIHR6c2V0KCk7CiAgICAgLyoKQEAgLTIxMDgsMTAgKzIxMjIsNiBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPGFycGEvaW5ldC5oPiAvLyBGb3IgbnRvaGwoMykuCiAKLXN0YXRpYyBpbnQgdG9faW50KHVuc2lnbmVkIGNoYXIqIHMpIHsKLSAgcmV0dXJuIChzWzBdIDw8IDI0KSB8IChzWzFdIDw8IDE2KSB8IChzWzJdIDw8IDgpIHwgc1szXTsKLX0KLQogc3RhdGljIGludCBfX2Jpb25pY19vcGVuX3R6ZGF0YV9wYXRoKGNvbnN0IGNoYXIqIHBhdGhfcHJlZml4X3ZhcmlhYmxlLCBjb25zdCBjaGFyKiBwYXRoX3N1ZmZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBvbHNvbl9pZCwgaW50KiBkYXRhX3NpemUpIHsKICAgY29uc3QgY2hhciogcGF0aF9wcmVmaXggPSBnZXRlbnYocGF0aF9wcmVmaXhfdmFyaWFibGUpOwpAQCAtMjExOSwxMSArMjEyOSwxNyBAQAogICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVzIG5vdCBzZXQhXG4iLCBfX0ZVTkNUSU9OX18sIHBhdGhfcHJlZml4X3ZhcmlhYmxlKTsKICAgICByZXR1cm4gLTE7CiAgIH0KLSAgY2hhciBwYXRoW1BBVEhfTUFYXTsKLSAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLCBwYXRoX3ByZWZpeCwgcGF0aF9zdWZmaXgpOworICBzaXplX3QgcGF0aF9sZW5ndGggPSBzdHJsZW4ocGF0aF9wcmVmaXgpICsgMSArIHN0cmxlbihwYXRoX3N1ZmZpeCkgKyAxOworICBjaGFyKiBwYXRoID0gbWFsbG9jKHBhdGhfbGVuZ3RoKTsKKyAgaWYgKHBhdGggPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkbid0IGFsbG9jYXRlICV6dS1ieXRlIHBhdGhcbiIsIF9fRlVOQ1RJT05fXywgcGF0aF9sZW5ndGgpOworICAgIHJldHVybiAtMTsKKyAgfQorICBzbnByaW50ZihwYXRoLCBwYXRoX2xlbmd0aCwgIiVzLyVzIiwgcGF0aF9wcmVmaXgsIHBhdGhfc3VmZml4KTsKICAgaW50IGZkID0gVEVNUF9GQUlMVVJFX1JFVFJZKG9wZW4ocGF0aCwgT1BFTl9NT0RFKSk7CiAgIGlmIChmZCA9PSAtMSkgewogICAgIFhMT0coKCIlczogY291bGQgbm90IG9wZW4gXCIlc1wiOiAlc1xuIiwgX19GVU5DVElPTl9fLCBwYXRoLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICBmcmVlKHBhdGgpOwogICAgIHJldHVybiAtMjsgLy8gRGlzdGluZ3Vpc2ggZmFpbHVyZSB0byBmaW5kIGFueSBkYXRhIGZyb20gZmFpbHVyZSB0byBmaW5kIGEgc3BlY2lmaWMgaWQuCiAgIH0KIApAQCAtMjE0Miw2ICsyMTU4LDcgQEAKICAgaWYgKGJ5dGVzX3JlYWQgIT0gc2l6ZW9mKGhlYWRlcikpIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBub3QgcmVhZCBoZWFkZXIgb2YgXCIlc1wiOiAlc1xuIiwKICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcGF0aCwgKGJ5dGVzX3JlYWQgPT0gLTEpID8gc3RyZXJyb3IoZXJybm8pIDogInNob3J0IHJlYWQiKTsKKyAgICBmcmVlKHBhdGgpOwogICAgIGNsb3NlKGZkKTsKICAgICByZXR1cm4gLTE7CiAgIH0KQEAgLTIxNDksNiArMjE2Niw3IEBACiAgIGlmIChzdHJuY21wKGhlYWRlci50emRhdGFfdmVyc2lvbiwgInR6ZGF0YSIsIDYpICE9IDAgfHwgaGVhZGVyLnR6ZGF0YV92ZXJzaW9uWzExXSAhPSAwKSB7CiAgICAgZnByaW50ZihzdGRlcnIsICIlczogYmFkIG1hZ2ljIGluIFwiJXNcIjogXCIlLjZzXCJcbiIsCiAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHBhdGgsIGhlYWRlci50emRhdGFfdmVyc2lvbik7CisgICAgZnJlZShwYXRoKTsKICAgICBjbG9zZShmZCk7CiAgICAgcmV0dXJuIC0xOwogICB9CkBAIC0yMTYzLDM0ICsyMTgxLDU4IEBACiAgIGlmIChURU1QX0ZBSUxVUkVfUkVUUlkobHNlZWsoZmQsIG50b2hsKGhlYWRlci5pbmRleF9vZmZzZXQpLCBTRUVLX1NFVCkpID09IC0xKSB7CiAgICAgZnByaW50ZihzdGRlcnIsICIlczogY291bGRuJ3Qgc2VlayB0byBpbmRleCBpbiBcIiVzXCI6ICVzXG4iLAogICAgICAgICAgICAgX19GVU5DVElPTl9fLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgIGZyZWUocGF0aCk7CiAgICAgY2xvc2UoZmQpOwogICAgIHJldHVybiAtMTsKICAgfQogCiAgIG9mZl90IHNwZWNpZmljX3pvbmVfb2Zmc2V0ID0gLTE7CisgIHNzaXplX3QgaW5kZXhfc2l6ZSA9IG50b2hsKGhlYWRlci5kYXRhX29mZnNldCkgLSBudG9obChoZWFkZXIuaW5kZXhfb2Zmc2V0KTsKKyAgY2hhciogaW5kZXggPSBtYWxsb2MoaW5kZXhfc2l6ZSk7CisgIGlmIChpbmRleCA9PSBOVUxMKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogY291bGRuJ3QgYWxsb2NhdGUgJXpkLWJ5dGUgaW5kZXggZm9yIFwiJXNcIlxuIiwKKyAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgaW5kZXhfc2l6ZSwgcGF0aCk7CisgICAgZnJlZShwYXRoKTsKKyAgICBjbG9zZShmZCk7CisgICAgcmV0dXJuIC0xOworICB9CisgIGlmIChURU1QX0ZBSUxVUkVfUkVUUlkocmVhZChmZCwgaW5kZXgsIGluZGV4X3NpemUpKSAhPSBpbmRleF9zaXplKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogY291bGQgbm90IHJlYWQgaW5kZXggb2YgXCIlc1wiOiAlc1xuIiwKKyAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcGF0aCwgKGJ5dGVzX3JlYWQgPT0gLTEpID8gc3RyZXJyb3IoZXJybm8pIDogInNob3J0IHJlYWQiKTsKKyAgICBmcmVlKHBhdGgpOworICAgIGZyZWUoaW5kZXgpOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gLTE7CisgIH0KIAogICBzdGF0aWMgY29uc3Qgc2l6ZV90IE5BTUVfTEVOR1RIID0gNDA7Ci0gIHVuc2lnbmVkIGNoYXIgYnVmW05BTUVfTEVOR1RIICsgMyAqIHNpemVvZihpbnQzMl90KV07CisgIHN0cnVjdCBpbmRleF9lbnRyeV90IHsKKyAgICBjaGFyIGJ1ZltOQU1FX0xFTkdUSF07CisgICAgaW50MzJfdCBzdGFydDsKKyAgICBpbnQzMl90IGxlbmd0aDsKKyAgICBpbnQzMl90IHVudXNlZDsgLy8gV2FzIHJhdyBHTVQgb2Zmc2V0OyBhbHdheXMgMCBzaW5jZSB0emRhdGEyMDE0ZiAoTCkuCisgIH07CiAKLSAgc2l6ZV90IGlkX2NvdW50ID0gKG50b2hsKGhlYWRlci5kYXRhX29mZnNldCkgLSBudG9obChoZWFkZXIuaW5kZXhfb2Zmc2V0KSkgLyBzaXplb2YoYnVmKTsKKyAgc2l6ZV90IGlkX2NvdW50ID0gKG50b2hsKGhlYWRlci5kYXRhX29mZnNldCkgLSBudG9obChoZWFkZXIuaW5kZXhfb2Zmc2V0KSkgLyBzaXplb2Yoc3RydWN0IGluZGV4X2VudHJ5X3QpOworICBzdHJ1Y3QgaW5kZXhfZW50cnlfdCogZW50cnkgPSAoc3RydWN0IGluZGV4X2VudHJ5X3QqKSBpbmRleDsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZF9jb3VudDsgKytpKSB7Ci0gICAgaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShyZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSkgIT0gKHNzaXplX3QpIHNpemVvZihidWYpKSB7Ci0gICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjaGFyIHRoaXNfaWRbTkFNRV9MRU5HVEggKyAxXTsKLSAgICBtZW1jcHkodGhpc19pZCwgYnVmLCBOQU1FX0xFTkdUSCk7CisgICAgbWVtY3B5KHRoaXNfaWQsIGVudHJ5LT5idWYsIE5BTUVfTEVOR1RIKTsKICAgICB0aGlzX2lkW05BTUVfTEVOR1RIXSA9ICdcMCc7CiAKICAgICBpZiAoc3RyY21wKHRoaXNfaWQsIG9sc29uX2lkKSA9PSAwKSB7Ci0gICAgICBzcGVjaWZpY196b25lX29mZnNldCA9IHRvX2ludChidWYgKyBOQU1FX0xFTkdUSCkgKyBudG9obChoZWFkZXIuZGF0YV9vZmZzZXQpOwotICAgICAgKmRhdGFfc2l6ZSA9IHRvX2ludChidWYgKyBOQU1FX0xFTkdUSCArIHNpemVvZihpbnQzMl90KSk7CisgICAgICBzcGVjaWZpY196b25lX29mZnNldCA9IG50b2hsKGVudHJ5LT5zdGFydCkgKyBudG9obChoZWFkZXIuZGF0YV9vZmZzZXQpOworICAgICAgKmRhdGFfc2l6ZSA9IG50b2hsKGVudHJ5LT5sZW5ndGgpOwogICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgKytlbnRyeTsKICAgfQorICBmcmVlKGluZGV4KTsKIAogICBpZiAoc3BlY2lmaWNfem9uZV9vZmZzZXQgPT0gLTEpIHsKICAgICBYTE9HKCgiJXM6IGNvdWxkbid0IGZpbmQgem9uZSBcIiVzXCJcbiIsIF9fRlVOQ1RJT05fXywgb2xzb25faWQpKTsKKyAgICBmcmVlKHBhdGgpOwogICAgIGNsb3NlKGZkKTsKICAgICByZXR1cm4gLTE7CiAgIH0KQEAgLTIxOTgsMTIgKzIyNDAsMTQgQEAKICAgaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShsc2VlayhmZCwgc3BlY2lmaWNfem9uZV9vZmZzZXQsIFNFRUtfU0VUKSkgPT0gLTEpIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBub3Qgc2VlayB0byAlbGQgaW4gXCIlc1wiOiAlc1xuIiwKICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgc3BlY2lmaWNfem9uZV9vZmZzZXQsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgZnJlZShwYXRoKTsKICAgICBjbG9zZShmZCk7CiAgICAgcmV0dXJuIC0xOwogICB9CiAKICAgLy8gVE9ETzogY2hlY2sgdGhhdCB0aGVyZSdzIFRaX01BR0lDIGF0IHRoaXMgb2Zmc2V0LCBzbyB3ZSBjYW4gZmFsbCBiYWNrIHRvIHRoZSBvdGhlciBmaWxlIGlmIG5vdC4KIAorICBmcmVlKHBhdGgpOwogICByZXR1cm4gZmQ7CiB9CiAKQEAgLTIyMjUsMTIgKzIyNjksMTIgQEAKICAgX3R6TG9jaygpOwogCiAgIC8vIE91ciBzaW5nbGUtaXRlbSBjYWNoZS4KLSAgc3RhdGljIGNoYXIqIGdDYWNoZWRUaW1lWm9uZU5hbWU7Ci0gIHN0YXRpYyBzdHJ1Y3Qgc3RhdGUgZ0NhY2hlZFRpbWVab25lOworICBzdGF0aWMgY2hhciogZ19jYWNoZWRfdGltZV96b25lX25hbWU7CisgIHN0YXRpYyBzdHJ1Y3Qgc3RhdGUgZ19jYWNoZWRfdGltZV96b25lOwogCiAgIC8vIERvIHdlIGFscmVhZHkgaGF2ZSB0aGlzIHRpbWV6b25lIGNhY2hlZD8KLSAgaWYgKGdDYWNoZWRUaW1lWm9uZU5hbWUgIT0gTlVMTCAmJiBzdHJjbXAobmFtZSwgZ0NhY2hlZFRpbWVab25lTmFtZSkgPT0gMCkgewotICAgICpzcCA9IGdDYWNoZWRUaW1lWm9uZTsKKyAgaWYgKGdfY2FjaGVkX3RpbWVfem9uZV9uYW1lICE9IE5VTEwgJiYgc3RyY21wKG5hbWUsIGdfY2FjaGVkX3RpbWVfem9uZV9uYW1lKSA9PSAwKSB7CisgICAgKnNwID0gZ19jYWNoZWRfdGltZV96b25lOwogICAgIF90elVubG9jaygpOwogICAgIHJldHVybiAwOwogICB9CkBAIC0yMjM5LDkgKzIyODMsOSBAQAogICBpbnQgcmMgPSB0emxvYWQobmFtZSwgc3AsIGRvZXh0ZW5kKTsKICAgaWYgKHJjID09IDApIHsKICAgICAvLyBVcGRhdGUgdGhlIGNhY2hlLgotICAgIGZyZWUoZ0NhY2hlZFRpbWVab25lTmFtZSk7Ci0gICAgZ0NhY2hlZFRpbWVab25lTmFtZSA9IHN0cmR1cChuYW1lKTsKLSAgICBnQ2FjaGVkVGltZVpvbmUgPSAqc3A7CisgICAgZnJlZShnX2NhY2hlZF90aW1lX3pvbmVfbmFtZSk7CisgICAgZ19jYWNoZWRfdGltZV96b25lX25hbWUgPSBzdHJkdXAobmFtZSk7CisgICAgZ19jYWNoZWRfdGltZV96b25lID0gKnNwOwogICB9CiAKICAgX3R6VW5sb2NrKCk7CkBAIC0yMjQ5LDIzICsyMjkzLDIxIEBACiB9CiAKIC8vIE5vbi1zdGFuZGFyZCBBUEk6IG1rdGltZSgzKSBidXQgd2l0aCBhbiBleHBsaWNpdCB0aW1lem9uZSBwYXJhbWV0ZXIuCi10aW1lX3QgbWt0aW1lX3R6KHN0cnVjdCB0bSogY29uc3QgdG1wLCBjb25zdCBjaGFyKiB0eikgewotICBzdHJ1Y3Qgc3RhdGUgc3Q7Ci0gIGlmIChfX2Jpb25pY190emxvYWRfY2FjaGVkKHR6LCAmc3QsIFRSVUUpICE9IDApIHsKLSAgICAvLyBUT0RPOiBub3Qgc3VyZSB3aGF0J3MgYmVzdCBoZXJlLCBidXQgZm9yIG5vdywgd2UgZmFsbCBiYWNrIHRvIGdtdC4KLSAgICBnbXRsb2FkKCZzdCk7Ci0gIH0KLSAgcmV0dXJuIHRpbWUxKHRtcCwgbG9jYWxzdWIsIDBMLCAmc3QpOwotfQorLy8gVGhpcyBjYW4ndCBhY3R1YWxseSBiZSBoaWRkZW4vcmVtb3ZlZCB1bnRpbCB3ZSBmaXggTXRwVXRpbHMuY3BwCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSB0aW1lX3QgbWt0aW1lX3R6KHN0cnVjdCB0bSogY29uc3QgdG1wLCBjb25zdCBjaGFyKiB0eikgeworICBzdHJ1Y3Qgc3RhdGUqIHN0ID0gbWFsbG9jKHNpemVvZigqc3QpKTsKKyAgdGltZV90IHJldHVybl92YWx1ZTsKIAotLy8gTm9uLXN0YW5kYXJkIEFQSTogbG9jYWx0aW1lKDMpIGJ1dCB3aXRoIGFuIGV4cGxpY2l0IHRpbWV6b25lIHBhcmFtZXRlci4KLXZvaWQgbG9jYWx0aW1lX3R6KGNvbnN0IHRpbWVfdCogY29uc3QgdGltZXAsIHN0cnVjdCB0bSogdG1wLCBjb25zdCBjaGFyKiB0eikgewotICBzdHJ1Y3Qgc3RhdGUgc3Q7Ci0gIGlmIChfX2Jpb25pY190emxvYWRfY2FjaGVkKHR6LCAmc3QsIFRSVUUpICE9IDApIHsKKyAgaWYgKHN0ID09IE5VTEwpCisgICAgcmV0dXJuIDA7CisgIGlmIChfX2Jpb25pY190emxvYWRfY2FjaGVkKHR6LCBzdCwgVFJVRSkgIT0gMCkgewogICAgIC8vIFRPRE86IG5vdCBzdXJlIHdoYXQncyBiZXN0IGhlcmUsIGJ1dCBmb3Igbm93LCB3ZSBmYWxsIGJhY2sgdG8gZ210LgotICAgIGdtdGxvYWQoJnN0KTsKKyAgICBnbXRsb2FkKHN0KTsKICAgfQotICBsb2NhbHN1Yih0aW1lcCwgMEwsIHRtcCwgJnN0KTsKKworICByZXR1cm5fdmFsdWUgPSB0aW1lMSh0bXAsIGxvY2Fsc3ViLCAwTCwgc3QpOworICBmcmVlKHN0KTsKKyAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIAogLy8gRU5EIGFuZHJvaWQtYWRkZWQKZGlmZiAtLWdpdCBhL2xpYmMvdHpjb2RlL3ByaXZhdGUuaCBiL2xpYmMvdHpjb2RlL3ByaXZhdGUuaAppbmRleCAzYTE5MzA1Li5jMzBjNzExIDEwMDY0NAotLS0gYS9saWJjL3R6Y29kZS9wcml2YXRlLmgKKysrIGIvbGliYy90emNvZGUvcHJpdmF0ZS5oCkBAIC0xOSw3ICsxOSw3IEBACiAKIC8qCiAqKiBEZWZhdWx0cyBmb3IgcHJlcHJvY2Vzc29yIHN5bWJvbHMuCi0qKiBZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIGluIHlvdXIgQyBjb21waWxlciBvcHRpb25zLCBlLmcuIGAtREhBVkVfQURKVElNRT0wJy4KKyoqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgaW4geW91ciBDIGNvbXBpbGVyIG9wdGlvbnMsIGUuZy4gJy1ESEFWRV9BREpUSU1FPTAnLgogKi8KIAogI2lmbmRlZiBIQVZFX0FESlRJTUUKQEAgLTM0LDYgKzM0LDEwIEBACiAjZGVmaW5lIEhBVkVfSU5DT01QQVRJQkxFX0NUSU1FX1IJMAogI2VuZGlmIC8qICFkZWZpbmVkIElOQ09NUEFUSUJMRV9DVElNRV9SICovCiAKKyNpZm5kZWYgSEFWRV9MSU5LCisjZGVmaW5lIEhBVkVfTElOSwkJMQorI2VuZGlmIC8qICFkZWZpbmVkIEhBVkVfTElOSyAqLworCiAjaWZuZGVmIEhBVkVfU0VUVElNRU9GREFZCiAjZGVmaW5lIEhBVkVfU0VUVElNRU9GREFZCTMKICNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1NFVFRJTUVPRkRBWSAqLwpAQCAtNTgsOSArNjIsMTEgQEAKICNkZWZpbmUgSEFWRV9VVE1QWF9ICQkwCiAjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9VVE1QWF9IICovCiAKKyNpZiAhZGVmaW5lZChfX0FORFJPSURfXykKICNpZm5kZWYgTE9DQUxFX0hPTUUKICNkZWZpbmUgTE9DQUxFX0hPTUUJCSIvdXNyL2xpYi9sb2NhbGUiCiAjZW5kaWYgLyogIWRlZmluZWQgTE9DQUxFX0hPTUUgKi8KKyNlbmRpZiAvLyBfX0FORFJPSURfXwogCiAjaWYgSEFWRV9JTkNPTVBBVElCTEVfQ1RJTUVfUgogI2RlZmluZSBhc2N0aW1lX3IgX2luY29tcGF0aWJsZV9hc2N0aW1lX3IKQEAgLTExNiw4ICsxMjIsOSBAQAogKi8KICNpZm5kZWYgSEFWRV9TVERJTlRfSAogI2RlZmluZSBIQVZFX1NURElOVF9IIFwKLQkoMTk5OTAxIDw9IF9fU1REQ19WRVJTSU9OX18gfHwgXAotCTIgPCAoX19HTElCQ19fICsgKDAgPCBfX0dMSUJDX01JTk9SX18pKSkKKyAgICgxOTk5MDEgPD0gX19TVERDX1ZFUlNJT05fXyBcCisgICAgfHwgMiA8IF9fR0xJQkNfXyArICgxIDw9IF9fR0xJQkNfTUlOT1JfXykJXAorICAgIHx8IF9fQ1lHV0lOX18pCiAjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9TVERJTlRfSCAqLwogCiAjaWYgSEFWRV9TVERJTlRfSApAQCAtMjAxLDYgKzIwOCwxMCBAQAogI2RlZmluZSBJTlQzMl9NSU4gKC0xIC0gSU5UMzJfTUFYKQogI2VuZGlmIC8qICFkZWZpbmVkIElOVDMyX01JTiAqLwogCisjaWZuZGVmIFNJWkVfTUFYCisjZGVmaW5lIFNJWkVfTUFYICgoc2l6ZV90KSAtMSkKKyNlbmRpZgorCiAjaWYgMiA8IF9fR05VQ19fICsgKDk2IDw9IF9fR05VQ19NSU5PUl9fKQogIyBkZWZpbmUgQVRUUklCVVRFX0NPTlNUIF9fYXR0cmlidXRlX18gKChjb25zdCkpCiAjIGRlZmluZSBBVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQpAQCAtMzQzLDI5ICszNTQsMTUgQEAKICoqIElOSVRJQUxJWkUoeCkKICovCiAKLSNpZm5kZWYgR05VQ19vcl9saW50CiAjaWZkZWYgbGludAotI2RlZmluZSBHTlVDX29yX2xpbnQKLSNlbmRpZiAvKiBkZWZpbmVkIGxpbnQgKi8KLSNpZm5kZWYgbGludAotI2lmZGVmIF9fR05VQ19fCi0jZGVmaW5lIEdOVUNfb3JfbGludAotI2VuZGlmIC8qIGRlZmluZWQgX19HTlVDX18gKi8KLSNlbmRpZiAvKiAhZGVmaW5lZCBsaW50ICovCi0jZW5kaWYgLyogIWRlZmluZWQgR05VQ19vcl9saW50ICovCi0KLSNpZm5kZWYgSU5JVElBTElaRQotI2lmZGVmIEdOVUNfb3JfbGludAotI2RlZmluZSBJTklUSUFMSVpFKHgpCSgoeCkgPSAwKQotI2VuZGlmIC8qIGRlZmluZWQgR05VQ19vcl9saW50ICovCi0jaWZuZGVmIEdOVUNfb3JfbGludAotI2RlZmluZSBJTklUSUFMSVpFKHgpCi0jZW5kaWYgLyogIWRlZmluZWQgR05VQ19vcl9saW50ICovCi0jZW5kaWYgLyogIWRlZmluZWQgSU5JVElBTElaRSAqLworIyBkZWZpbmUgSU5JVElBTElaRSh4KQkoKHgpID0gMCkKKyNlbHNlCisjIGRlZmluZSBJTklUSUFMSVpFKHgpCisjZW5kaWYKIAogLyoKICoqIEZvciB0aGUgYmVuZWZpdCBvZiBHTlUgZm9say4uLgotKiogYF8oTVNHSUQpJyB1c2VzIHRoZSBjdXJyZW50IGxvY2FsZSdzIG1lc3NhZ2UgbGlicmFyeSBzdHJpbmcgZm9yIE1TR0lELgorKiogJ18oTVNHSUQpJyB1c2VzIHRoZSBjdXJyZW50IGxvY2FsZSdzIG1lc3NhZ2UgbGlicmFyeSBzdHJpbmcgZm9yIE1TR0lELgogKiogVGhlIGRlZmF1bHQgaXMgdG8gdXNlIGdldHRleHQgaWYgYXZhaWxhYmxlLCBhbmQgdXNlIE1TR0lEIG90aGVyd2lzZS4KICovCiAKQEAgLTM3Nyw5ICszNzQsOSBAQAogI2VuZGlmIC8qICFIQVZFX0dFVFRFWFQgKi8KICNlbmRpZiAvKiAhZGVmaW5lZCBfICovCiAKLSNpZm5kZWYgVFpfRE9NQUlOCi0jZGVmaW5lIFRaX0RPTUFJTiAidHoiCi0jZW5kaWYgLyogIWRlZmluZWQgVFpfRE9NQUlOICovCisjaWYgIWRlZmluZWQgVFpfRE9NQUlOICYmIGRlZmluZWQgVFpfRE9NQUlORElSCisjIGRlZmluZSBUWl9ET01BSU4gInR6IgorI2VuZGlmCiAKICNpZiBIQVZFX0lOQ09NUEFUSUJMRV9DVElNRV9SCiAjdW5kZWYgYXNjdGltZV9yCmRpZmYgLS1naXQgYS9saWJjL3R6Y29kZS9zdHJmdGltZS5jIGIvbGliYy90emNvZGUvc3RyZnRpbWUuYwppbmRleCAxMTY0YTEzLi40MzI4YjRjIDEwMDY0NAotLS0gYS9saWJjL3R6Y29kZS9zdHJmdGltZS5jCisrKyBiL2xpYmMvdHpjb2RlL3N0cmZ0aW1lLmMKQEAgLTEsMTIgKzEsOSBAQAotI2lmbmRlZiBsaW50Ci0jaWZuZGVmIE5PSUQKLXN0YXRpYyBjaGFyIGVsc2llaWRbXSA9ICJAKCMpc3RyZnRpbWUuYyA4LjEiOwogLyoKLSoqIEJhc2VkIG9uIHRoZSBVQ0IgdmVyc2lvbiB3aXRoIHRoZSBJRCBhcHBlYXJpbmcgYmVsb3cuCisqKiBCYXNlZCBvbiB0aGUgVUNCIHZlcnNpb24gd2l0aCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgc2Njc2lkCisqKiBhcHBlYXJpbmcgYmVsb3cuCisqKgogKiogVGhpcyBpcyBBTlNJaXNoIG9ubHkgd2hlbiAibXVsdGlieXRlIGNoYXJhY3RlciA9PSBwbGFpbiBjaGFyYWN0ZXIiLgogKi8KLSNlbmRpZiAvKiAhZGVmaW5lZCBOT0lEICovCi0jZW5kaWYgLyogIWRlZmluZWQgbGludCAqLwogCiAjaW5jbHVkZSAicHJpdmF0ZS5oIgogCkBAIC0yMiwzMCArMTksMjkgQEAKICoqIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIEJlcmtlbGV5LiBUaGUgbmFtZSBvZiB0aGUKICoqIFVuaXZlcnNpdHkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAqKiBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0qKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorKiogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCiAqKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAogKiogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogKi8KIAotI2lmbmRlZiBMSUJDX1NDQ1MKLSNpZm5kZWYgbGludAotc3RhdGljIGNvbnN0IGNoYXIgICBzY2NzaWRbXSA9ICJAKCMpc3RyZnRpbWUuYyAgNS40IChCZXJrZWxleSkgMy8xNC84OSI7Ci0jZW5kaWYgLyogIWRlZmluZWQgbGludCAqLwotI2VuZGlmIC8qICFkZWZpbmVkIExJQkNfU0NDUyAqLwotCiAjaW5jbHVkZSAidHpmaWxlLmgiCiAjaW5jbHVkZSAiZmNudGwuaCIKICNpbmNsdWRlICJsb2NhbGUuaCIKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHRpbWU2NC5oPgotI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3RpbWUuaCIgIC8qIGZvciBzdHJmdGltZV90eiAqLwogCi0vKiBzdHJ1Y3QgbGNfdGltZV9UIGlzIG5vdyBkZWZpbmVkIGFzIHN0cmZ0aW1lX2xvY2FsZQotICogaW4gPHRpbWUuaD4KLSAqLwotI2lmIDEKLSNkZWZpbmUgIGxjX3RpbWVfVCAgICBzdHJmdGltZV9sb2NhbGUKKyNpZiBfX0FORFJPSURfXworCisvKiBMUDMyIGhhZCBhIDMyLWJpdCB0aW1lX3QsIHNvIHdlIG5lZWQgdG8gd29yayBhcm91bmQgdGhhdCBoZXJlLiAqLworI2lmIGRlZmluZWQoX19MUDY0X18pCisjZGVmaW5lIHRpbWU2NF90IHRpbWVfdAorI2RlZmluZSBta3RpbWU2NCBta3RpbWUKICNlbHNlCisjaW5jbHVkZSA8dGltZTY0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNlbmRpZgorCiBzdHJ1Y3QgbGNfdGltZV9UIHsKICAgICBjb25zdCBjaGFyICogICAgbW9uW01PTlNQRVJZRUFSXTsKICAgICBjb25zdCBjaGFyICogICAgbW9udGhbTU9OU1BFUllFQVJdOwpAQCAtNTgsOSArNTQsMTYgQEAKICAgICBjb25zdCBjaGFyICogICAgcG07CiAgICAgY29uc3QgY2hhciAqICAgIGRhdGVfZm10OwogfTsKLSNlbmRpZgogCisjaWZkZWYgTE9DQUxFX0hPTUUKKyNpbmNsdWRlICJzeXMvc3RhdC5oIgorc3RhdGljIHN0cnVjdCBsY190aW1lX1QgICAgICAgICAgICAgICAgbG9jYWxlYnVmOworc3RhdGljIHN0cnVjdCBsY190aW1lX1QgKiAgICAgIF9sb2Modm9pZCk7CisjZGVmaW5lIExvY2FsZSBfbG9jKCkKKyNlbmRpZiAvKiBkZWZpbmVkIExPQ0FMRV9IT01FICovCisjaWZuZGVmIExPQ0FMRV9IT01FCiAjZGVmaW5lIExvY2FsZSAgKCZDX3RpbWVfbG9jYWxlKQorI2VuZGlmIC8qICFkZWZpbmVkIExPQ0FMRV9IT01FICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGNfdGltZV9UICAgQ190aW1lX2xvY2FsZSA9IHsKICAgICB7CkBAIC03MCw5ICs3Myw2IEBACiAgICAgICAgICJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIsICJKdW5lIiwKICAgICAgICAgIkp1bHkiLCAiQXVndXN0IiwgIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIgogICAgIH0sIHsKLSAgICAgICAgIkphbnVhcnkiLCAiRmVicnVhcnkiLCAiTWFyY2giLCAiQXByaWwiLCAiTWF5IiwgIkp1bmUiLAotICAgICAgICAiSnVseSIsICJBdWd1c3QiLCAiU2VwdGVtYmVyIiwgIk9jdG9iZXIiLCAiTm92ZW1iZXIiLCAiRGVjZW1iZXIiCi0gICAgfSwgewogICAgICAgICAiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwKICAgICAgICAgIlRodSIsICJGcmkiLCAiU2F0IgogICAgIH0sIHsKQEAgLTExNCw3ICsxMTQsNyBAQAogc3RhdGljIGNoYXIgKiAgIF9hZGQoY29uc3QgY2hhciAqLCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKIHN0YXRpYyBjaGFyICogICBfY29udihpbnQsIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBjb25zdCBjaGFyICopOwogc3RhdGljIGNoYXIgKiAgIF9mbXQoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKiwgY2hhciAqLCBjb25zdCBjaGFyICosCi0gICAgICAgICAgICBpbnQgKiwgY29uc3Qgc3RydWN0IHN0cmZ0aW1lX2xvY2FsZSopOworICAgICAgICAgICAgaW50ICopOwogc3RhdGljIGNoYXIgKiAgIF95Y29udihpbnQsIGludCwgaW50LCBpbnQsIGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogc3RhdGljIGNoYXIgKiAgIGdldGZvcm1hdChpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKik7CiAKQEAgLTEzMiwzMCArMTMyLDE5IEBACiAjZGVmaW5lIEZPUkNFX0xPV0VSX0NBU0UgMHgxMDAKIAogc2l6ZV90Ci1zdHJmdGltZShzLCBtYXhzaXplLCBmb3JtYXQsIHQpCi1jaGFyICogY29uc3QgICAgICAgIHM7Ci1jb25zdCBzaXplX3QgICAgICAgIG1heHNpemU7Ci1jb25zdCBjaGFyICogY29uc3QgIGZvcm1hdDsKLWNvbnN0IHN0cnVjdCB0bSAqIGNvbnN0IHQ7Ci17Ci0gICAgcmV0dXJuIHN0cmZ0aW1lX3R6KHMsIG1heHNpemUsIGZvcm1hdCwgdCwgTG9jYWxlKTsKLX0KLQotc2l6ZV90Ci1zdHJmdGltZV90eihzLCBtYXhzaXplLCBmb3JtYXQsIHQsIGxvY2FsZSkKLWNoYXIgKiBjb25zdCAgICAgICAgczsKLWNvbnN0IHNpemVfdCAgICAgICAgbWF4c2l6ZTsKLWNvbnN0IGNoYXIgKiBjb25zdCAgZm9ybWF0OwotY29uc3Qgc3RydWN0IHRtICogY29uc3QgdDsKLWNvbnN0IHN0cnVjdCBzdHJmdGltZV9sb2NhbGUgKmxvY2FsZTsKK3N0cmZ0aW1lKGNoYXIgKiBjb25zdCBzLCBjb25zdCBzaXplX3QgbWF4c2l6ZSwgY29uc3QgY2hhciAqY29uc3QgZm9ybWF0LAorICAgICAgICBjb25zdCBzdHJ1Y3QgdG0gKmNvbnN0IHQpCiB7CiAgICAgY2hhciAqICBwOwogICAgIGludCB3YXJuOwogCiAgICAgdHpzZXQoKTsKKyNpZmRlZiBMT0NBTEVfSE9NRQorICAgIGxvY2FsZWJ1Zi5tb25bMF0gPSAwOworI2VuZGlmIC8qIGRlZmluZWQgTE9DQUxFX0hPTUUgKi8KICAgICB3YXJuID0gSU5fTk9ORTsKLSAgICBwID0gX2ZtdCgoKGZvcm1hdCA9PSBOVUxMKSA/ICIlYyIgOiBmb3JtYXQpLCB0LCBzLCBzICsgbWF4c2l6ZSwgJndhcm4sIGxvY2FsZSk7Ci0jaWYgMCAgLyogaWZuZGVmIE5PX1JVTl9USU1FX1dBUk5JTkdTX0FCT1VUX1lFQVJfMjAwMF9QUk9CTEVNU19USEFOS19ZT1UgKi8KKyAgICBwID0gX2ZtdCgoKGZvcm1hdCA9PSBOVUxMKSA/ICIlYyIgOiBmb3JtYXQpLCB0LCBzLCBzICsgbWF4c2l6ZSwgJndhcm4pOworI2lmbmRlZiBOT19SVU5fVElNRV9XQVJOSU5HU19BQk9VVF9ZRUFSXzIwMDBfUFJPQkxFTVNfVEhBTktfWU9VCiAgICAgaWYgKHdhcm4gIT0gSU5fTk9ORSAmJiBnZXRlbnYoWUVBUl8yMDAwX05BTUUpICE9IE5VTEwpIHsKICAgICAgICAgKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICAgICAgICAgaWYgKGZvcm1hdCA9PSBOVUxMKQpAQCAtMTk0LDEzICsxODMsOCBAQAogfQogCiBzdGF0aWMgY2hhciAqCi1fZm10KGZvcm1hdCwgdCwgcHQsIHB0bGltLCB3YXJucCwgbG9jYWxlKQotY29uc3QgY2hhciAqICAgICAgICBmb3JtYXQ7Ci1jb25zdCBzdHJ1Y3QgdG0gKiBjb25zdCB0OwotY2hhciAqICAgICAgICAgIHB0OwotY29uc3QgY2hhciAqIGNvbnN0ICBwdGxpbTsKLWludCAqICAgICAgICAgICB3YXJucDsKLWNvbnN0IHN0cnVjdCBzdHJmdGltZV9sb2NhbGUqIGxvY2FsZTsKK19mbXQoY29uc3QgY2hhciAqZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKmNvbnN0IHQsIGNoYXIgKiBwdCwKKyAgICAgICAgY29uc3QgY2hhciAqY29uc3QgcHRsaW0sIGludCAqd2FybnApCiB7CiAgICAgZm9yICggOyAqZm9ybWF0OyArK2Zvcm1hdCkgewogICAgICAgICBpZiAoKmZvcm1hdCA9PSAnJScpIHsKQEAgLTIxMywzMyArMTk3LDI2IEBACiAgICAgICAgICAgICBjYXNlICdBJzoKICAgICAgICAgICAgICAgICBwdCA9IF9hZGQoKHQtPnRtX3dkYXkgPCAwIHx8CiAgICAgICAgICAgICAgICAgICAgIHQtPnRtX3dkYXkgPj0gREFZU1BFUldFRUspID8KLSAgICAgICAgICAgICAgICAgICAgIj8iIDogbG9jYWxlLT53ZWVrZGF5W3QtPnRtX3dkYXldLAorICAgICAgICAgICAgICAgICAgICAiPyIgOiBMb2NhbGUtPndlZWtkYXlbdC0+dG1fd2RheV0sCiAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSwgbW9kaWZpZXIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY2FzZSAnYSc6CiAgICAgICAgICAgICAgICAgcHQgPSBfYWRkKCh0LT50bV93ZGF5IDwgMCB8fAogICAgICAgICAgICAgICAgICAgICB0LT50bV93ZGF5ID49IERBWVNQRVJXRUVLKSA/Ci0gICAgICAgICAgICAgICAgICAgICI/IiA6IGxvY2FsZS0+d2RheVt0LT50bV93ZGF5XSwKKyAgICAgICAgICAgICAgICAgICAgIj8iIDogTG9jYWxlLT53ZGF5W3QtPnRtX3dkYXldLAogICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ0InOgotICAgICAgICAgICAgICAgIGlmIChtb2RpZmllciA9PSAnLScpIHsKLSAgICAgICAgICAgICAgICAgICAgcHQgPSBfYWRkKCh0LT50bV9tb24gPCAwIHx8CisgICAgICAgICAgICAgICAgcHQgPSBfYWRkKCh0LT50bV9tb24gPCAwIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQtPnRtX21vbiA+PSBNT05TUEVSWUVBUikgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPyIgOiBsb2NhbGUtPnN0YW5kYWxvbmVfbW9udGhbdC0+dG1fbW9uXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj8iIDogTG9jYWxlLT5tb250aFt0LT50bV9tb25dLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdCA9IF9hZGQoKHQtPnRtX21vbiA8IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+dG1fbW9uID49IE1PTlNQRVJZRUFSKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI/IiA6IGxvY2FsZS0+bW9udGhbdC0+dG1fbW9uXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQsIHB0bGltLCBtb2RpZmllcik7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY2FzZSAnYic6CiAgICAgICAgICAgICBjYXNlICdoJzoKICAgICAgICAgICAgICAgICBwdCA9IF9hZGQoKHQtPnRtX21vbiA8IDAgfHwKICAgICAgICAgICAgICAgICAgICAgdC0+dG1fbW9uID49IE1PTlNQRVJZRUFSKSA/Ci0gICAgICAgICAgICAgICAgICAgICI/IiA6IGxvY2FsZS0+bW9uW3QtPnRtX21vbl0sCisgICAgICAgICAgICAgICAgICAgICI/IiA6IExvY2FsZS0+bW9uW3QtPnRtX21vbl0sCiAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSwgbW9kaWZpZXIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY2FzZSAnQyc6CkBAIC0yNTcsNyArMjM0LDcgQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaW50IHdhcm4yID0gSU5fU09NRTsKIAotICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChsb2NhbGUtPmNfZm10LCB0LCBwdCwgcHRsaW0sIHdhcm5wLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChMb2NhbGUtPmNfZm10LCB0LCBwdCwgcHRsaW0sICZ3YXJuMik7CiAgICAgICAgICAgICAgICAgaWYgKHdhcm4yID09IElOX0FMTCkKICAgICAgICAgICAgICAgICAgICAgd2FybjIgPSBJTl9USElTOwogICAgICAgICAgICAgICAgIGlmICh3YXJuMiA+ICp3YXJucCkKQEAgLTI2NSw3ICsyNDIsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ0QnOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVtLyVkLyV5IiwgdCwgcHQsIHB0bGltLCB3YXJucCwgbG9jYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQgPSBfZm10KCIlbS8lZC8leSIsIHQsIHB0LCBwdGxpbSwgd2FybnApOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgY2FzZSAnZCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ID0gX2NvbnYodC0+dG1fbWRheSwKQEAgLTI5OSw3ICsyNzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVZLSVtLSVkIiwgdCwgcHQsIHB0bGltLCB3YXJucCwgbG9jYWxlKTsKKyAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVZLSVtLSVkIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdIJzoKICAgICAgICAgICAgICAgICBwdCA9IF9jb252KHQtPnRtX2hvdXIsCkBAIC0zNDAsNyArMzE3LDcgQEAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICoqIEFmdGVyIGFsbCB0aGlzIHRpbWUsIHN0aWxsIHVuY2xhaW1lZCEKICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHB0ID0gX2FkZCgia2l0Y2hlbiBzaW5rIiwgcHQsIHB0bGltLCBtb2RpZmllcik7CisgICAgICAgICAgICAgICAgcHQgPSBfYWRkKCJraXRjaGVuIHNpbmsiLCBwdCwgcHRsaW0pOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmIC8qIGRlZmluZWQgS0lUQ0hFTl9TSU5LICovCiAgICAgICAgICAgICBjYXNlICdsJzoKQEAgLTM3NiwyMSArMzUzLDIxIEBACiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdwJzoKICAgICAgICAgICAgICAgICBwdCA9IF9hZGQoKHQtPnRtX2hvdXIgPj0gKEhPVVJTUEVSREFZIC8gMikpID8KLSAgICAgICAgICAgICAgICAgICAgbG9jYWxlLT5wbSA6Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsZS0+YW0sCisgICAgICAgICAgICAgICAgICAgIExvY2FsZS0+cG0gOgorICAgICAgICAgICAgICAgICAgICBMb2NhbGUtPmFtLAogICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ1AnOgogICAgICAgICAgICAgICAgIHB0ID0gX2FkZCgodC0+dG1faG91ciA+PSAoSE9VUlNQRVJEQVkgLyAyKSkgPwotICAgICAgICAgICAgICAgICAgICBsb2NhbGUtPnBtIDoKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxlLT5hbSwKKyAgICAgICAgICAgICAgICAgICAgTG9jYWxlLT5wbSA6CisgICAgICAgICAgICAgICAgICAgIExvY2FsZS0+YW0sCiAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSwgRk9SQ0VfTE9XRVJfQ0FTRSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdSJzoKLSAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVIOiVNIiwgdCwgcHQsIHB0bGltLCB3YXJucCwgbG9jYWxlKTsKKyAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVIOiVNIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdyJzoKLSAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVJOiVNOiVTICVwIiwgdCwgcHQsIHB0bGltLCB3YXJucCwgbG9jYWxlKTsKKyAgICAgICAgICAgICAgICBwdCA9IF9mbXQoIiVJOiVNOiVTICVwIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjYXNlICdTJzoKICAgICAgICAgICAgICAgICBwdCA9IF9jb252KHQtPnRtX3NlYywKQEAgLTQxNiw3ICszOTMsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ1QnOgotICAgICAgICAgICAgICAgIHB0ID0gX2ZtdCgiJUg6JU06JVMiLCB0LCBwdCwgcHRsaW0sIHdhcm5wLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdCgiJUg6JU06JVMiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ3QnOgogICAgICAgICAgICAgICAgIHB0ID0gX2FkZCgiXHQiLCBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKQEAgLTQ0Nyw3ICs0MjQsNyBAQAogKiogKDAxLTUzKS4iCiAqKiAoYWRvLCAxOTkzLTA1LTI0KQogKioKLSoqIEZyb20gImh0dHA6Ly93d3cuZnQudW5pLWVybGFuZ2VuLmRlL35tc2t1aG4vaXNvLXRpbWUuaHRtbCIgYnkgTWFya3VzIEt1aG46CisqKiBGcm9tIDxodHRwOi8vd3d3LmZ0LnVuaS1lcmxhbmdlbi5kZS9+bXNrdWhuL2lzby10aW1lLmh0bWw+IGJ5IE1hcmt1cyBLdWhuOgogKiogIldlZWsgMDEgb2YgYSB5ZWFyIGlzIHBlciBkZWZpbml0aW9uIHRoZSBmaXJzdCB3ZWVrIHdoaWNoIGhhcyB0aGUKICoqIFRodXJzZGF5IGluIHRoaXMgeWVhciwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgd2VlayB3aGljaCBjb250YWlucwogKiogdGhlIGZvdXJ0aCBkYXkgb2YgSmFudWFyeS4gSW4gb3RoZXIgd29yZHMsIHRoZSBmaXJzdCB3ZWVrIG9mIGEgbmV3IHllYXIKQEAgLTUxNywxMSArNDk0LDcgQEAKICNlbmRpZiAvKiBkZWZpbmVkIFhQRzRfMTk5NF8wNF8wOSAqLwogICAgICAgICAgICAgICAgICAgICBpZiAoKmZvcm1hdCA9PSAnVicpCiAgICAgICAgICAgICAgICAgICAgICAgICBwdCA9IF9jb252KHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMDJkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMDJkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwgIiUwMmQiLCAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0pOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgqZm9ybWF0ID09ICdnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgKndhcm5wID0gSU5fQUxMOwpAQCAtNTM3LDcgKzUxMCw3IEBACiAgICAgICAgICAgICAgICAgKiogImRhdGUgYXMgZGQtYmJiLVlZWVkiCiAgICAgICAgICAgICAgICAgKiogKGFkbywgMTk5My0wNS0yNCkKICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHB0ID0gX2ZtdCgiJWUtJWItJVkiLCB0LCBwdCwgcHRsaW0sIHdhcm5wLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdCgiJWUtJWItJVkiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ1cnOgogICAgICAgICAgICAgICAgIHB0ID0gX2NvbnYoKHQtPnRtX3lkYXkgKyBEQVlTUEVSV0VFSyAtCkBAIC01NTIsMTMgKzUyNSwxMyBAQAogICAgICAgICAgICAgICAgIHB0ID0gX2NvbnYodC0+dG1fd2RheSwgIiVkIiwgcHQsIHB0bGltKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ1gnOgotICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChsb2NhbGUtPlhfZm10LCB0LCBwdCwgcHRsaW0sIHdhcm5wLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChMb2NhbGUtPlhfZm10LCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJ3gnOgogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbnQgd2FybjIgPSBJTl9TT01FOwogCi0gICAgICAgICAgICAgICAgcHQgPSBfZm10KGxvY2FsZS0+eF9mbXQsIHQsIHB0LCBwdGxpbSwgJndhcm4yLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChMb2NhbGUtPnhfZm10LCB0LCBwdCwgcHRsaW0sICZ3YXJuMik7CiAgICAgICAgICAgICAgICAgaWYgKHdhcm4yID09IElOX0FMTCkKICAgICAgICAgICAgICAgICAgICAgd2FybjIgPSBJTl9USElTOwogICAgICAgICAgICAgICAgIGlmICh3YXJuMiA+ICp3YXJucCkKQEAgLTY0Nyw4ICs2MjAsOCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJysnOgotICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChsb2NhbGUtPmRhdGVfZm10LCB0LCBwdCwgcHRsaW0sCi0gICAgICAgICAgICAgICAgICAgIHdhcm5wLCBsb2NhbGUpOworICAgICAgICAgICAgICAgIHB0ID0gX2ZtdChMb2NhbGUtPmRhdGVfZm10LCB0LCBwdCwgcHRsaW0sCisgICAgICAgICAgICAgICAgICAgIHdhcm5wKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNhc2UgJyUnOgogICAgICAgICAgICAgLyoKQEAgLTY2OCwxMSArNjQxLDggQEAKIH0KIAogc3RhdGljIGNoYXIgKgotX2NvbnYobiwgZm9ybWF0LCBwdCwgcHRsaW0pCi1jb25zdCBpbnQgICAgICAgbjsKLWNvbnN0IGNoYXIgKiBjb25zdCAgZm9ybWF0OwotY2hhciAqIGNvbnN0ICAgICAgICBwdDsKLWNvbnN0IGNoYXIgKiBjb25zdCAgcHRsaW07CitfY29udihjb25zdCBpbnQgbiwgY29uc3QgY2hhciAqY29uc3QgZm9ybWF0LCBjaGFyICpjb25zdCBwdCwKKyAgICAgICAgY29uc3QgY2hhciAqY29uc3QgcHRsaW0pCiB7CiAgICAgY2hhciAgICBidWZbSU5UX1NUUkxFTl9NQVhJTVVNKGludCkgKyAxXTsKIApAQCAtNjgxLDExICs2NTEsNyBAQAogfQogCiBzdGF0aWMgY2hhciAqCi1fYWRkKHN0ciwgcHQsIHB0bGltLCBtb2RpZmllcikKLWNvbnN0IGNoYXIgKiAgICAgICAgc3RyOwotY2hhciAqICAgICAgICAgIHB0OwotY29uc3QgY2hhciAqIGNvbnN0ICBwdGxpbTsKLWludCAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOworX2FkZChjb25zdCBjaGFyICpzdHIsIGNoYXIgKnB0LCBjb25zdCBjaGFyICpjb25zdCBwdGxpbSwgaW50IG1vZGlmaWVyKQogewogICAgICAgICBpbnQgYzsKIApAQCAtNzMzLDE0ICs2OTksOCBAQAogKi8KIAogc3RhdGljIGNoYXIgKgotX3ljb252KGEsIGIsIGNvbnZlcnRfdG9wLCBjb252ZXJ0X3l5LCBwdCwgcHRsaW0sIG1vZGlmaWVyKQotY29uc3QgaW50ICAgICAgIGE7Ci1jb25zdCBpbnQgICAgICAgYjsKLWNvbnN0IGludCAgICAgICBjb252ZXJ0X3RvcDsKLWNvbnN0IGludCAgICAgICBjb252ZXJ0X3l5OwotY2hhciAqICAgICAgICAgIHB0OwotY29uc3QgY2hhciAqIGNvbnN0ICBwdGxpbTsKLWludCAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOworX3ljb252KGNvbnN0IGludCBhLCBjb25zdCBpbnQgYiwgY29uc3QgaW50IGNvbnZlcnRfdG9wLCBjb25zdCBpbnQgY29udmVydF95eSwKKyAgICAgICAgY2hhciAqcHQsIGNvbnN0IGNoYXIgKmNvbnN0IHB0bGltLCBpbnQgbW9kaWZpZXIpCiB7CiAgICAgcmVnaXN0ZXIgaW50ICAgIGxlYWQ7CiAgICAgcmVnaXN0ZXIgaW50ICAgIHRyYWlsOwpAQCAtNzU5LDEzICs3MTksOSBAQAogICAgIGlmIChjb252ZXJ0X3RvcCkgewogICAgICAgICBpZiAobGVhZCA9PSAwICYmIHRyYWlsIDwgMCkKICAgICAgICAgICAgIHB0ID0gX2FkZCgiLTAiLCBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKLSAgICAgICAgZWxzZSAgICBwdCA9IF9jb252KGxlYWQsIGdldGZvcm1hdChtb2RpZmllciwgIiUwMmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUyZCIsICIlZCIsICIlMDJkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisgICAgICAgIGVsc2UgICAgcHQgPSBfY29udihsZWFkLCBnZXRmb3JtYXQobW9kaWZpZXIsICIlMDJkIiwgIiUyZCIsICIlZCIsICIlMDJkIiksIHB0LCBwdGxpbSk7CiAgICAgfQogICAgIGlmIChjb252ZXJ0X3l5KQotICAgICAgICBwdCA9IF9jb252KCgodHJhaWwgPCAwKSA/IC10cmFpbCA6IHRyYWlsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwgIiUwMmQiLCAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisgICAgICAgIHB0ID0gX2NvbnYoKCh0cmFpbCA8IDApID8gLXRyYWlsIDogdHJhaWwpLCBnZXRmb3JtYXQobW9kaWZpZXIsICIlMDJkIiwgIiUyZCIsICIlZCIsICIlMDJkIiksIHB0LCBwdGxpbSk7CiAgICAgcmV0dXJuIHB0OwogfQpkaWZmIC0tZ2l0IGEvbGliYy90emNvZGUvdHpmaWxlLmggYi9saWJjL3R6Y29kZS90emZpbGUuaAppbmRleCBhMjk1NWRkLi41Mjk2NTBkIDEwMDY0NAotLS0gYS9saWJjL3R6Y29kZS90emZpbGUuaAorKysgYi9saWJjL3R6Y29kZS90emZpbGUuaApAQCAtMTAxLDE2ICsxMDEsOCBAQAogI2VuZGlmIC8qICFkZWZpbmVkIFRaX01BWF9USU1FUyAqLwogCiAjaWZuZGVmIFRaX01BWF9UWVBFUwotI2lmbmRlZiBOT1NPTEFSCisvKiBUaGlzIG11c3QgYmUgYXQgbGVhc3QgMTcgZm9yIEV1cm9wZS9TYW1hcmEgYW5kIEV1cm9wZS9WaWxuaXVzLiAgKi8KICNkZWZpbmUgVFpfTUFYX1RZUEVTCTI1NiAvKiBMaW1pdGVkIGJ5IHdoYXQgKHVuc2lnbmVkIGNoYXIpJ3MgY2FuIGhvbGQgKi8KLSNlbmRpZiAvKiAhZGVmaW5lZCBOT1NPTEFSICovCi0jaWZkZWYgTk9TT0xBUgotLyoKLSoqIE11c3QgYmUgYXQgbGVhc3QgMTQgZm9yIEV1cm9wZS9SaWdhIGFzIG9mIEphbiAxMiAxOTk1LAotKiogYXMgbm90ZWQgYnkgRWFybCBDaGV3LgotKi8KLSNkZWZpbmUgVFpfTUFYX1RZUEVTCTIwCS8qIE1heGltdW0gbnVtYmVyIG9mIGxvY2FsIHRpbWUgdHlwZXMgKi8KLSNlbmRpZiAvKiAhZGVmaW5lZCBOT1NPTEFSICovCiAjZW5kaWYgLyogIWRlZmluZWQgVFpfTUFYX1RZUEVTICovCiAKICNpZm5kZWYgVFpfTUFYX0NIQVJTCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9hbGFybS5jIGIvbGliYy91bmlzdGQvYWxhcm0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlZGVhOS4uMDAwMDAwMAotLS0gYS9saWJjL3VuaXN0ZC9hbGFybS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylhbGFybS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLy9fX0ZCU0RJRCgiJEZyZWVCU0Q6IC9yZXBvbWFuL3IvbmN2cy9zcmMvbGliL2xpYmMvZ2VuL2FsYXJtLmMsdiAxLjMgMjAwNy8wMS8wOSAwMDoyNzo1MyBpbXAgRXhwICQiKTsKLQotLyoKLSAqIEJhY2t3YXJkcyBjb21wYXRpYmxlIGFsYXJtLgotICovCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotdW5zaWduZWQgaW50Ci1hbGFybShzZWNzKQotCXVuc2lnbmVkIGludCBzZWNzOwotewotCXN0cnVjdCBpdGltZXJ2YWwgaXQsIG9pdHY7Ci0Jc3RydWN0IGl0aW1lcnZhbCAqaXRwID0gJml0OwotCi0gICAgaXRwLT5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsKLSAgICBpdHAtPml0X2ludGVydmFsLnR2X3NlYyA9IDA7Ci0JaXRwLT5pdF92YWx1ZS50dl9zZWMgPSBzZWNzOwotCWl0cC0+aXRfdmFsdWUudHZfdXNlYyA9IDA7Ci0JaWYgKHNldGl0aW1lcihJVElNRVJfUkVBTCwgaXRwLCAmb2l0dikgPCAwKQotI2lmIDEgLyogQklPTklDOiBTYW1lIGJlaGF2aW91ciB0aGFuIEdMaWJjIGZvciBlcnJvcnMgKi8KLQkJcmV0dXJuIDA7Ci0jZWxzZQotCQlyZXR1cm4gKC0xKTsKLSNlbmRpZgotCWlmIChvaXR2Lml0X3ZhbHVlLnR2X3VzZWMpCi0JCW9pdHYuaXRfdmFsdWUudHZfc2VjKys7Ci0JcmV0dXJuIChvaXR2Lml0X3ZhbHVlLnR2X3NlYyk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9leGVjLmMgYi9saWJjL3VuaXN0ZC9leGVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZTJhNGUuLjAwMDAwMDAKLS0tIGEvbGliYy91bmlzdGQvZXhlYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBleGVjLmMsdiAxLjE4IDIwMDUvMDgvMDggMDg6MDU6MzQgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy91aW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHBhdGhzLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8YWxsb2NhLmg+Ci0KLWV4dGVybiBjaGFyICoqZW52aXJvbjsKLQotaW50Ci1leGVjbChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphcmcsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCWNoYXIgKiphcmd2OwotCWludCBuOwotCi0JdmFfc3RhcnQoYXAsIGFyZyk7Ci0JbiA9IDE7Ci0Jd2hpbGUgKHZhX2FyZyhhcCwgY2hhciAqKSAhPSBOVUxMKQotCQluKys7Ci0JdmFfZW5kKGFwKTsKLQlhcmd2ID0gYWxsb2NhKChuICsgMSkgKiBzaXplb2YoKmFyZ3YpKTsKLQlpZiAoYXJndiA9PSBOVUxMKSB7Ci0JCWVycm5vID0gRU5PTUVNOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JdmFfc3RhcnQoYXAsIGFyZyk7Ci0JbiA9IDE7Ci0JYXJndlswXSA9IChjaGFyICopYXJnOwotCXdoaWxlICgoYXJndltuXSA9IHZhX2FyZyhhcCwgY2hhciAqKSkgIT0gTlVMTCkKLQkJbisrOwotCXZhX2VuZChhcCk7Ci0JcmV0dXJuIChleGVjdmUobmFtZSwgYXJndiwgZW52aXJvbikpOwotfQotCi1pbnQKLWV4ZWNsZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphcmcsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCWNoYXIgKiphcmd2LCAqKmVudnA7Ci0JaW50IG47Ci0KLQl2YV9zdGFydChhcCwgYXJnKTsKLQluID0gMTsKLQl3aGlsZSAodmFfYXJnKGFwLCBjaGFyICopICE9IE5VTEwpCi0JCW4rKzsKLQl2YV9lbmQoYXApOwotCWFyZ3YgPSBhbGxvY2EoKG4gKyAxKSAqIHNpemVvZigqYXJndikpOwotCWlmIChhcmd2ID09IE5VTEwpIHsKLQkJZXJybm8gPSBFTk9NRU07Ci0JCXJldHVybiAoLTEpOwotCX0KLQl2YV9zdGFydChhcCwgYXJnKTsKLQluID0gMTsKLQlhcmd2WzBdID0gKGNoYXIgKilhcmc7Ci0Jd2hpbGUgKChhcmd2W25dID0gdmFfYXJnKGFwLCBjaGFyICopKSAhPSBOVUxMKQotCQluKys7Ci0JZW52cCA9IHZhX2FyZyhhcCwgY2hhciAqKik7Ci0JdmFfZW5kKGFwKTsKLQlyZXR1cm4gKGV4ZWN2ZShuYW1lLCBhcmd2LCBlbnZwKSk7Ci19Ci0KLWludAotZXhlY2xwKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmFyZywgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0JY2hhciAqKmFyZ3Y7Ci0JaW50IG47Ci0KLQl2YV9zdGFydChhcCwgYXJnKTsKLQluID0gMTsKLQl3aGlsZSAodmFfYXJnKGFwLCBjaGFyICopICE9IE5VTEwpCi0JCW4rKzsKLQl2YV9lbmQoYXApOwotCWFyZ3YgPSBhbGxvY2EoKG4gKyAxKSAqIHNpemVvZigqYXJndikpOwotCWlmIChhcmd2ID09IE5VTEwpIHsKLQkJZXJybm8gPSBFTk9NRU07Ci0JCXJldHVybiAoLTEpOwotCX0KLQl2YV9zdGFydChhcCwgYXJnKTsKLQluID0gMTsKLQlhcmd2WzBdID0gKGNoYXIgKilhcmc7Ci0Jd2hpbGUgKChhcmd2W25dID0gdmFfYXJnKGFwLCBjaGFyICopKSAhPSBOVUxMKQotCQluKys7Ci0JdmFfZW5kKGFwKTsKLQlyZXR1cm4gKGV4ZWN2cChuYW1lLCBhcmd2KSk7Ci19Ci0KLWludAotZXhlY3YoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqIGNvbnN0ICphcmd2KQotewotCSh2b2lkKWV4ZWN2ZShuYW1lLCBhcmd2LCBlbnZpcm9uKTsKLQlyZXR1cm4gKC0xKTsKLX0KLQotaW50Ci1leGVjdnAoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqIGNvbnN0ICphcmd2KQotewotCWNoYXIgKiptZW1wOwotCWludCBjbnQsIGxwLCBsbiwgbGVuOwotCWNoYXIgKnA7Ci0JaW50IGVhY2NlcyA9IDA7Ci0JY2hhciAqYnAsICpjdXIsICpwYXRoLCBidWZbTUFYUEFUSExFTl07Ci0KLQkvKgotCSAqIERvIG5vdCBhbGxvdyBudWxsIG5hbWUKLQkgKi8KLQlpZiAobmFtZSA9PSBOVUxMIHx8ICpuYW1lID09ICdcMCcpIHsKLQkJZXJybm8gPSBFTk9FTlQ7Ci0JCXJldHVybiAoLTEpOwotIAl9Ci0KLQkvKiBJZiBpdCdzIGFuIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggbmFtZSwgaXQncyBlYXN5LiAqLwotCWlmIChzdHJjaHIobmFtZSwgJy8nKSkgewotCQlicCA9IChjaGFyICopbmFtZTsKLQkJY3VyID0gcGF0aCA9IE5VTEw7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCWJwID0gYnVmOwotCi0JLyogR2V0IHRoZSBwYXRoIHdlJ3JlIHNlYXJjaGluZy4gKi8KLQlpZiAoIShwYXRoID0gZ2V0ZW52KCJQQVRIIikpKQotCQlwYXRoID0gX1BBVEhfREVGUEFUSDsKLQlsZW4gPSBzdHJsZW4ocGF0aCkgKyAxOwotCWN1ciA9IGFsbG9jYShsZW4pOwotCWlmIChjdXIgPT0gTlVMTCkgewotCQllcnJubyA9IEVOT01FTTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXN0cmxjcHkoY3VyLCBwYXRoLCBsZW4pOwotCXBhdGggPSBjdXI7Ci0Jd2hpbGUgKChwID0gc3Ryc2VwKCZjdXIsICI6IikpKSB7Ci0JCS8qCi0JCSAqIEl0J3MgYSBTSEVMTCBwYXRoIC0tIGRvdWJsZSwgbGVhZGluZyBhbmQgdHJhaWxpbmcgY29sb25zCi0JCSAqIG1lYW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotCQkgKi8KLQkJaWYgKCEqcCkgewotCQkJcCA9ICIuIjsKLQkJCWxwID0gMTsKLQkJfSBlbHNlCi0JCQlscCA9IHN0cmxlbihwKTsKLQkJbG4gPSBzdHJsZW4obmFtZSk7Ci0KLQkJLyoKLQkJICogSWYgdGhlIHBhdGggaXMgdG9vIGxvbmcgY29tcGxhaW4uICBUaGlzIGlzIGEgcG9zc2libGUKLQkJICogc2VjdXJpdHkgaXNzdWU7IGdpdmVuIGEgd2F5IHRvIG1ha2UgdGhlIHBhdGggdG9vIGxvbmcKLQkJICogdGhlIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIHdyb25nIHByb2dyYW0uCi0JCSAqLwotCQlpZiAobHAgKyBsbiArIDIgPiAoaW50KXNpemVvZihidWYpKSB7Ci0JCQlzdHJ1Y3QgaW92ZWMgaW92WzNdOwotCi0JCQlpb3ZbMF0uaW92X2Jhc2UgPSAiZXhlY3ZwOiAiOwotCQkJaW92WzBdLmlvdl9sZW4gPSA4OwotCQkJaW92WzFdLmlvdl9iYXNlID0gcDsKLQkJCWlvdlsxXS5pb3ZfbGVuID0gbHA7Ci0JCQlpb3ZbMl0uaW92X2Jhc2UgPSAiOiBwYXRoIHRvbyBsb25nXG4iOwotCQkJaW92WzJdLmlvdl9sZW4gPSAxNjsKLQkJCSh2b2lkKXdyaXRldihTVERFUlJfRklMRU5PLCBpb3YsIDMpOwotCQkJY29udGludWU7Ci0JCX0KLQkJbWVtY3B5KGJ1ZiwgcCwgbHApOwotCQlidWZbbHBdID0gJy8nOwotCQltZW1jcHkoYnVmICsgbHAgKyAxLCBuYW1lLCBsbik7Ci0JCWJ1ZltscCArIGxuICsgMV0gPSAnXDAnOwotCi1yZXRyeToJCSh2b2lkKWV4ZWN2ZShicCwgYXJndiwgZW52aXJvbik7Ci0JCXN3aXRjaChlcnJubykgewotCQljYXNlIEUyQklHOgotCQkJZ290byBkb25lOwotCQljYXNlIEVJU0RJUjoKLQkJY2FzZSBFTE9PUDoKLQkJY2FzZSBFTkFNRVRPT0xPTkc6Ci0JCWNhc2UgRU5PRU5UOgotCQkJYnJlYWs7Ci0JCWNhc2UgRU5PRVhFQzoKLQkJCWZvciAoY250ID0gMDsgYXJndltjbnRdOyArK2NudCkKLQkJCQk7Ci0JCQltZW1wID0gYWxsb2NhKChjbnQgKyAyKSAqIHNpemVvZihjaGFyICopKTsKLQkJCWlmIChtZW1wID09IE5VTEwpCi0JCQkJZ290byBkb25lOwotCQkJbWVtcFswXSA9ICJzaCI7Ci0JCQltZW1wWzFdID0gYnA7Ci0JCQltZW1jcHkobWVtcCArIDIsIGFyZ3YgKyAxLCBjbnQgKiBzaXplb2YoY2hhciAqKSk7Ci0JCQkodm9pZClleGVjdmUoX1BBVEhfQlNIRUxMLCBtZW1wLCBlbnZpcm9uKTsKLQkJCWdvdG8gZG9uZTsKLQkJY2FzZSBFTk9NRU06Ci0JCQlnb3RvIGRvbmU7Ci0JCWNhc2UgRU5PVERJUjoKLQkJCWJyZWFrOwotCQljYXNlIEVUWFRCU1k6Ci0JCQkvKgotCQkJICogV2UgdXNlZCB0byByZXRyeSBoZXJlLCBidXQgc2goMSkgZG9lc24ndC4KLQkJCSAqLwotCQkJZ290byBkb25lOwotCQljYXNlIEVBQ0NFUzoKLQkJCWVhY2NlcyA9IDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLQlpZiAoZWFjY2VzKQotCQllcnJubyA9IEVBQ0NFUzsKLQllbHNlIGlmICghZXJybm8pCi0JCWVycm5vID0gRU5PRU5UOwotZG9uZToKLQlyZXR1cm4gKC0xKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2ZubWF0Y2guYyBiL2xpYmMvdW5pc3RkL2ZubWF0Y2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkMWEzYy4uMDAwMDAwMAotLS0gYS9saWJjL3VuaXN0ZC9mbm1hdGNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ODAgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZubWF0Y2guYyx2IDEuMTYgMjAxMS8xMi8wNiAxMTo0Nzo0NiBzdHNwIEV4cCAkCSovCi0KLS8qIENvcHlyaWdodCAoYykgMjAxMSwgVk13YXJlLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVk13YXJlLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFZNV0FSRSwgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBUb2RkIEMuIE1pbGxlciA8bWlsbGVydEBvcGVuYnNkLm9yZz4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0vKiBBdXRob3JlZCBieSBXaWxsaWFtIEEuIFJvd2UgSnIuIDx3cm93ZTsgYXBhY2hlLm9yZywgdm13YXJlLmNvbT4sIEFwcmlsIDIwMTEKLSAqCi0gKiBEZXJpdmVkIGZyb20gVGhlIE9wZW4gR3JvdXAgQmFzZSBTcGVjaWZpY2F0aW9ucyBJc3N1ZSA3LCBJRUVFIFN0ZCAxMDAzLjEtMjAwOAotICogYXMgZGVzY3JpYmVkIGluOwotICogICBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9mdW5jdGlvbnMvZm5tYXRjaC5odG1sCi0gKgotICogRmlsZW5hbWUgcGF0dGVybiBtYXRjaGVzIGRlZmluZWQgaW4gc2VjdGlvbiAyLjEzLCAiUGF0dGVybiBNYXRjaGluZyBOb3RhdGlvbiIKLSAqIGZyb20gY2hhcHRlciAyLiAiU2hlbGwgQ29tbWFuZCBMYW5ndWFnZSIKLSAqICAgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvdXRpbGl0aWVzL1YzX2NoYXAwMi5odG1sI3RhZ18xOF8xMwotICogd2hlcmU7IDEuIEEgYnJhY2tldCBleHByZXNzaW9uIHN0YXJ0aW5nIHdpdGggYW4gdW5xdW90ZWQgPGNpcmN1bWZsZXg+ICdeJyAKLSAqIGNoYXJhY3RlciBDT05USU5VRVMgdG8gc3BlY2lmeSBhIG5vbi1tYXRjaGluZyBsaXN0OyAyLiBhbiBleHBsaWNpdCA8cGVyaW9kPiAnLicgCi0gKiBpbiBhIGJyYWNrZXQgZXhwcmVzc2lvbiBtYXRjaGluZyBsaXN0LCBlLmcuICJbLmFiY10iIGRvZXMgTk9UIG1hdGNoIGEgbGVhZGluZyAKLSAqIDxwZXJpb2Q+IGluIGEgZmlsZW5hbWU7IDMuIGEgPGxlZnQtc3F1YXJlLWJyYWNrZXQ+ICdbJyB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UKLSAqIGEgdmFsaWQgYnJhY2tldCBleHByZXNzaW9uIGlzIHRyZWF0ZWQgYXMgYW4gb3JkaW5hcnkgY2hhcmFjdGVyOyA0LiBhIGRpZmZlcmluZwotICogbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aGluIHBhdHRlcm4gYW5kIHN0cmluZyB3aWxsIE5PVCBtYXRjaDsKLSAqIDUuIGEgdHJhaWxpbmcgJ1wnIGluIEZOTV9FU0NBUEUgbW9kZSBpcyB0cmVhdGVkIGFzIGFuIG9yZGluYXJ5ICdcJyBjaGFyYWN0ZXIuCi0gKgotICogQnJhY2tldCBleHBhbnNpb24gZGVmaW5lZCBpbiBzZWN0aW9uIDkuMy41LCAiUkUgQnJhY2tldCBFeHByZXNzaW9uIiwKLSAqIGZyb20gY2hhcHRlciA5LCAiUmVndWxhciBFeHByZXNzaW9ucyIKLSAqICAgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvYmFzZWRlZnMvVjFfY2hhcDA5Lmh0bWwjdGFnXzA5XzAzXzA1Ci0gKiB3aXRoIG5vIHN1cHBvcnQgZm9yIGNvbGxhdGluZyBzeW1ib2xzLCBlcXVpdmFsZW5jZSBjbGFzcyBleHByZXNzaW9ucyBvciAKLSAqIGNoYXJhY3RlciBjbGFzcyBleHByZXNzaW9ucy4gIEEgcGFydGlhbCByYW5nZSBleHByZXNzaW9uIHdpdGggYSBsZWFkaW5nIAotICogaHlwaGVuIGZvbGxvd2luZyBhIHZhbGlkIHJhbmdlIGV4cHJlc3Npb24gd2lsbCBtYXRjaCBvbmx5IHRoZSBvcmRpbmFyeQotICogPGh5cGhlbj4gYW5kIHRoZSBlbmRpbmcgY2hhcmFjdGVyIChlLmcuICJbYS1tLXpdIiB3aWxsIG1hdGNoIGNoYXJhY3RlcnMgCi0gKiAnYScgdGhyb3VnaCAnbScsIGEgPGh5cGhlbj4gJy0nLCBvciBhICd6JykuCi0gKgotICogU3VwcG9ydHMgQlNEIGV4dGVuc2lvbnMgRk5NX0xFQURJTkdfRElSIHRvIG1hdGNoIHBhdHRlcm4gdG8gdGhlIGVuZCBvZiBvbmUKLSAqIHBhdGggc2VnbWVudCBvZiBzdHJpbmcsIGFuZCBGTk1fQ0FTRUZPTEQgdG8gaWdub3JlIGFscGhhIGNhc2UuCi0gKgotICogTk9URTogT25seSBQT1NJWC9DIHNpbmdsZSBieXRlIGxvY2FsZXMgYXJlIGNvcnJlY3RseSBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLgotICogTm90YWJseSwgbm9uLVBPU0lYIGxvY2FsZXMgd2l0aCBGTk1fQ0FTRUZPTEQgcHJvZHVjZSB1bmRlZmluZWQgcmVzdWx0cywKLSAqIHBhcnRpY3VsYXJseSBpbiByYW5nZXMgb2YgbWl4ZWQgY2FzZSAoZS5nLiAiW0Etel0iKSBvciBzcGFubmluZyBhbHBoYSBhbmQKLSAqIG5vbmFscGhhIGNoYXJhY3RlcnMgd2l0aGluIGEgcmFuZ2UuCi0gKgotICogWFhYIGNvbW1lbnRzIGJlbG93IGluZGljYXRlIHBvcnRpbmcgcmVxdWlyZWQgZm9yIG11bHRpLWJ5dGUgY2hhcmFjdGVyIHNldHMKLSAqIGFuZCBub24tUE9TSVggbG9jYWxlIGNvbGxhdGlvbiBvcmRlcnM7IHJlcXVpcmVzIG1iciogQVBJcyB0byB0cmFjayBzaGlmdAotICogc3RhdGUgb2YgcGF0dGVybiBhbmQgc3RyaW5nIChyZXdpbmRpbmcgcGF0dGVybiBhbmQgc3RyaW5nIHJlcGVhdGVkbHkpLgotICoKLSAqIENlcnRhaW4gcGFydHMgb2YgdGhlIGNvZGUgYXNzdW1lIDB4MDAtMHgzRiBhcmUgdW5pcXVlIHdpdGggYW55IE1CQ1MgKGUuZy4KLSAqIFVURi04LCBTSElGVC1KSVMsIGV0YykuICBBbnkgaW1wbGVtZW50YXRpb24gYWxsb3dpbmcgJ1wnIGFzIGFuIGFsdGVybmF0ZQotICogcGF0aCBkZWxpbWl0ZXIgbXVzdCBiZSBhd2FyZSB0aGF0IDB4NUMgaXMgTk9UIHVuaXF1ZSB3aXRoaW4gU0hJRlQtSklTLgotICovCi0KLSNpbmNsdWRlIDxmbm1hdGNoLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotI2luY2x1ZGUgImNoYXJjbGFzcy5oIgotCi0jZGVmaW5lCVJBTkdFX01BVENICTEKLSNkZWZpbmUJUkFOR0VfTk9NQVRDSAkwCi0jZGVmaW5lCVJBTkdFX0VSUk9SCSgtMSkKLQotc3RhdGljIGludAotY2xhc3NtYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyIHRlc3QsIGludCBmb2xkY2FzZSwgY29uc3QgY2hhciAqKmVwKQotewotCXN0cnVjdCBjY2xhc3MgKmNjOwotCWNvbnN0IGNoYXIgKmNvbG9uOwotCXNpemVfdCBsZW47Ci0JaW50IHJ2YWwgPSBSQU5HRV9OT01BVENIOwotCWNvbnN0IGNoYXIgKiBjb25zdCBtaXNtYXRjaCA9IHBhdHRlcm47Ci0KLQlpZiAoKnBhdHRlcm4gIT0gJ1snIHx8IHBhdHRlcm5bMV0gIT0gJzonKSB7Ci0JCSplcCA9IG1pc21hdGNoOwotCQlyZXR1cm4oUkFOR0VfRVJST1IpOwotCX0KLQotCXBhdHRlcm4gKz0gMjsKLQotCWlmICgoY29sb24gPSBzdHJjaHIocGF0dGVybiwgJzonKSkgPT0gTlVMTCB8fCBjb2xvblsxXSAhPSAnXScpIHsKLQkJKmVwID0gbWlzbWF0Y2g7Ci0JCXJldHVybihSQU5HRV9FUlJPUik7Ci0JfQotCSplcCA9IGNvbG9uICsgMjsKLQlsZW4gPSAoc2l6ZV90KShjb2xvbiAtIHBhdHRlcm4pOwotCi0JaWYgKGZvbGRjYXNlICYmIHN0cm5jbXAocGF0dGVybiwgInVwcGVyOl0iLCA3KSA9PSAwKQotCQlwYXR0ZXJuID0gImxvd2VyOl0iOwotCWZvciAoY2MgPSBjY2xhc3NlczsgY2MtPm5hbWUgIT0gTlVMTDsgY2MrKykgewotCQlpZiAoIXN0cm5jbXAocGF0dGVybiwgY2MtPm5hbWUsIGxlbikgJiYgY2MtPm5hbWVbbGVuXSA9PSAnXDAnKSB7Ci0JCQlpZiAoY2MtPmlzY3R5cGUoKHVuc2lnbmVkIGNoYXIpdGVzdCkpCi0JCQkJcnZhbCA9IFJBTkdFX01BVENIOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGNjLT5uYW1lID09IE5VTEwpIHsKLQkJLyogaW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MsIHRyZWF0IGFzIG5vcm1hbCB0ZXh0ICovCi0JCSplcCA9IG1pc21hdGNoOwotCQlydmFsID0gUkFOR0VfRVJST1I7Ci0JfQotCXJldHVybihydmFsKTsKLX0KLQotLyogTW9zdCBNQkNTL2NvbGxhdGlvbi9jYXNlIGlzc3VlcyBoYW5kbGVkIGhlcmUuICBXaWxkY2FyZCAnKicgaXMgbm90IGhhbmRsZWQuCi0gKiBFT1MgJ1wwJyBhbmQgdGhlIEZOTV9QQVRITkFNRSAnLycgZGVsaW1pdGVycyBhcmUgbm90IGFkdmFuY2VkIG92ZXIsIAotICogaG93ZXZlciB0aGUgIlwvIiBzZXF1ZW5jZSBpcyBhZHZhbmNlZCB0byAnLycuCi0gKgotICogQm90aCBwYXR0ZXJuIGFuZCBzdHJpbmcgYXJlICoqY2hhciB0byBzdXBwb3J0IHBvaW50ZXIgaW5jcmVtZW50IG9mIGFyYml0cmFyeQotICogbXVsdGlieXRlIGNoYXJhY3RlcnMgZm9yIHRoZSBnaXZlbiBsb2NhbGUsIGluIGEgbGF0ZXIgaXRlcmF0aW9uIG9mIHRoaXMgY29kZQotICovCi1zdGF0aWMgaW50IGZubWF0Y2hfY2goY29uc3QgY2hhciAqKnBhdHRlcm4sIGNvbnN0IGNoYXIgKipzdHJpbmcsIGludCBmbGFncykKLXsKLSAgICBjb25zdCBjaGFyICogY29uc3QgbWlzbWF0Y2ggPSAqcGF0dGVybjsKLSAgICBjb25zdCBpbnQgbm9jYXNlID0gISEoZmxhZ3MgJiBGTk1fQ0FTRUZPTEQpOwotICAgIGNvbnN0IGludCBlc2NhcGUgPSAhKGZsYWdzICYgRk5NX05PRVNDQVBFKTsKLSAgICBjb25zdCBpbnQgc2xhc2ggPSAhIShmbGFncyAmIEZOTV9QQVRITkFNRSk7Ci0gICAgaW50IHJlc3VsdCA9IEZOTV9OT01BVENIOwotICAgIGNvbnN0IGNoYXIgKnN0YXJ0Y2g7Ci0gICAgaW50IG5lZ2F0ZTsKLQotICAgIGlmICgqKnBhdHRlcm4gPT0gJ1snKQotICAgIHsKLSAgICAgICAgKysqcGF0dGVybjsKLQotICAgICAgICAvKiBIYW5kbGUgbmVnYXRpb24sIGVpdGhlciBsZWFkaW5nICEgb3IgXiBvcGVyYXRvcnMgKG5ldmVyIGJvdGgpICovCi0gICAgICAgIG5lZ2F0ZSA9ICgoKipwYXR0ZXJuID09ICchJykgfHwgKCoqcGF0dGVybiA9PSAnXicpKTsKLSAgICAgICAgaWYgKG5lZ2F0ZSkKLSAgICAgICAgICAgICsrKnBhdHRlcm47Ci0KLSAgICAgICAgLyogJ10nIGlzIGFuIG9yZGluYXJ5IGNoYXJhY3RlciBhdCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHBhdHRlcm4gKi8KLSAgICAgICAgaWYgKCoqcGF0dGVybiA9PSAnXScpCi0gICAgICAgICAgICBnb3RvIGxlYWRpbmdjbG9zZWJyYWNlOwotCi0gICAgICAgIHdoaWxlICgqKnBhdHRlcm4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgqKnBhdHRlcm4gPT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgKysqcGF0dGVybjsKLSAgICAgICAgICAgICAgICAvKiBYWFg6IEZpeCBmb3IgTUJDUyBjaGFyYWN0ZXIgd2lkdGggKi8KLSAgICAgICAgICAgICAgICArKypzdHJpbmc7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgXiBuZWdhdGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZXNjYXBlICYmICgqKnBhdHRlcm4gPT0gJ1xcJykpIHsKLSAgICAgICAgICAgICAgICArKypwYXR0ZXJuOwotCi0gICAgICAgICAgICAgICAgLyogUGF0dGVybnMgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggJ10nLCBub3QgRU9TICovCi0gICAgICAgICAgICAgICAgaWYgKCEqKnBhdHRlcm4pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBQYXR0ZXJucyBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCAnXScgbm90ICcvJyAqLwotICAgICAgICAgICAgaWYgKHNsYXNoICYmICgqKnBhdHRlcm4gPT0gJy8nKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLyogTWF0Y2ggY2hhcmFjdGVyIGNsYXNzZXMuICovCi0gICAgICAgICAgICBpZiAoY2xhc3NtYXRjaCgqcGF0dGVybiwgKipzdHJpbmcsIG5vY2FzZSwgcGF0dGVybikKLSAgICAgICAgICAgICAgICA9PSBSQU5HRV9NQVRDSCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLWxlYWRpbmdjbG9zZWJyYWNlOgotICAgICAgICAgICAgLyogTG9vayBhdCBvbmx5IHdlbGwtZm9ybWVkIHJhbmdlIHBhdHRlcm5zOyAKLSAgICAgICAgICAgICAqICJ4LV0iIGlzIG5vdCBhbGxvd2VkIHVubGVzcyBlc2NhcGVkICgieC1cXSIpCi0gICAgICAgICAgICAgKiBYWFg6IEZpeCBmb3IgbG9jYWxlL01CQ1MgY2hhcmFjdGVyIHdpZHRoCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICgoKCpwYXR0ZXJuKVsxXSA9PSAnLScpICYmICgoKnBhdHRlcm4pWzJdICE9ICddJykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhcnRjaCA9ICpwYXR0ZXJuOwotICAgICAgICAgICAgICAgICpwYXR0ZXJuICs9IChlc2NhcGUgJiYgKCgqcGF0dGVybilbMl0gPT0gJ1xcJykpID8gMyA6IDI7Ci0KLSAgICAgICAgICAgICAgICAvKiBOT1QgYSBwcm9wZXJseSBiYWxhbmNlZCBbZXhwcl0gcGF0dGVybiwgRU9TIHRlcm1pbmF0ZWQgCi0gICAgICAgICAgICAgICAgICogb3IgcmFuZ2VzIGNvbnRhaW5pbmcgYSBzbGFzaCBpbiBGTk1fUEFUSE5BTUUgbW9kZSBwYXR0ZXJuCi0gICAgICAgICAgICAgICAgICogZmFsbCBvdXQgdG8gdG8gdGhlIHJld2luZCBhbmQgdGVzdCAnWycgbGl0ZXJhbCBjb2RlIHBhdGgKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoISoqcGF0dGVybiB8fCAoc2xhc2ggJiYgKCoqcGF0dGVybiA9PSAnLycpKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAvKiBYWFg6IGhhbmRsZSBsb2NhbGUvTUJDUyBjb21wYXJpc29uLCBhZHZhbmNlIGJ5IE1CQ1MgY2hhciB3aWR0aCAqLwotICAgICAgICAgICAgICAgIGlmICgoKipzdHJpbmcgPj0gKnN0YXJ0Y2gpICYmICgqKnN0cmluZyA8PSAqKnBhdHRlcm4pKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vY2FzZSAmJiAoaXN1cHBlcigqKnN0cmluZykgfHwgaXN1cHBlcigqc3RhcnRjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzdXBwZXIoKipwYXR0ZXJuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodG9sb3dlcigqKnN0cmluZykgPj0gdG9sb3dlcigqc3RhcnRjaCkpIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh0b2xvd2VyKCoqc3RyaW5nKSA8PSB0b2xvd2VyKCoqcGF0dGVybikpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwOwotCi0gICAgICAgICAgICAgICAgKysqcGF0dGVybjsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogWFhYOiBoYW5kbGUgbG9jYWxlL01CQ1MgY29tcGFyaXNvbiwgYWR2YW5jZSBieSBNQkNTIGNoYXIgd2lkdGggKi8KLSAgICAgICAgICAgIGlmICgoKipzdHJpbmcgPT0gKipwYXR0ZXJuKSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICAgICAgZWxzZSBpZiAobm9jYXNlICYmIChpc3VwcGVyKCoqc3RyaW5nKSB8fCBpc3VwcGVyKCoqcGF0dGVybikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHRvbG93ZXIoKipzdHJpbmcpID09IHRvbG93ZXIoKipwYXR0ZXJuKSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKLQotICAgICAgICAgICAgKysqcGF0dGVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE5PVCBhIHByb3Blcmx5IGJhbGFuY2VkIFtleHByXSBwYXR0ZXJuOyBSZXdpbmQKLSAgICAgICAgICogYW5kIHJlc2V0IHJlc3VsdCB0byB0ZXN0ICdbJyBsaXRlcmFsCi0gICAgICAgICAqLwotICAgICAgICAqcGF0dGVybiA9IG1pc21hdGNoOwotICAgICAgICByZXN1bHQgPSBGTk1fTk9NQVRDSDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKipwYXR0ZXJuID09ICc/JykgewotICAgICAgICAvKiBPcHRpbWl6ZSAnPycgbWF0Y2ggYmVmb3JlIHVuZXNjYXBpbmcgKipwYXR0ZXJuICovCi0gICAgICAgIGlmICghKipzdHJpbmcgfHwgKHNsYXNoICYmICgqKnN0cmluZyA9PSAnLycpKSkKLSAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKLSAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgZ290byBmbm1hdGNoX2NoX3N1Y2Nlc3M7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVzY2FwZSAmJiAoKipwYXR0ZXJuID09ICdcXCcpICYmICgqcGF0dGVybilbMV0pIHsKLSAgICAgICAgKysqcGF0dGVybjsKLSAgICB9Ci0KLSAgICAvKiBYWFg6IGhhbmRsZSBsb2NhbGUvTUJDUyBjb21wYXJpc29uLCBhZHZhbmNlIGJ5IHRoZSBNQkNTIGNoYXIgd2lkdGggKi8KLSAgICBpZiAoKipzdHJpbmcgPT0gKipwYXR0ZXJuKQotICAgICAgICByZXN1bHQgPSAwOwotICAgIGVsc2UgaWYgKG5vY2FzZSAmJiAoaXN1cHBlcigqKnN0cmluZykgfHwgaXN1cHBlcigqKnBhdHRlcm4pKQotICAgICAgICAgICAgICAgICAgICAmJiAodG9sb3dlcigqKnN0cmluZykgPT0gdG9sb3dlcigqKnBhdHRlcm4pKSkKLSAgICAgICAgcmVzdWx0ID0gMDsKLQotICAgIC8qIFJlZnVzZSB0byBhZHZhbmNlIG92ZXIgdHJhaWxpbmcgc2xhc2ggb3IgbnVsbHMKLSAgICAgKi8KLSAgICBpZiAoISoqc3RyaW5nIHx8ICEqKnBhdHRlcm4gfHwgKHNsYXNoICYmICgoKipzdHJpbmcgPT0gJy8nKSB8fCAoKipwYXR0ZXJuID09ICcvJykpKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotZm5tYXRjaF9jaF9zdWNjZXNzOgotICAgICsrKnBhdHRlcm47Ci0gICAgKysqc3RyaW5nOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotaW50IGZubWF0Y2goY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgZHVtbXlzdHJpbmdbMl0gPSB7JyAnLCAwfTsKLSAgICBjb25zdCBpbnQgZXNjYXBlID0gIShmbGFncyAmIEZOTV9OT0VTQ0FQRSk7Ci0gICAgY29uc3QgaW50IHNsYXNoID0gISEoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpOwotICAgIGNvbnN0IGludCBsZWFkaW5nX2RpciA9ICEhKGZsYWdzICYgRk5NX0xFQURJTkdfRElSKTsKLSAgICBjb25zdCBjaGFyICpzdHJlbmRzZWc7Ci0gICAgY29uc3QgY2hhciAqZHVtbXlwdHI7Ci0gICAgY29uc3QgY2hhciAqbWF0Y2hwdHI7Ci0gICAgaW50IHdpbGQ7Ci0gICAgLyogRm9yICcqJyB3aWxkIHByb2Nlc3Npbmcgb25seTsgc3VycHJlc3MgJ3VzZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uJwotICAgICAqIHdhcm5pbmdzIHdpdGggZHVtbXkgaW5pdGlhbGl6YXRpb24gdmFsdWVzOwotICAgICAqLwotICAgIGNvbnN0IGNoYXIgKnN0cnN0YXJ0c2VnID0gTlVMTDsKLSAgICBjb25zdCBjaGFyICptaXNtYXRjaCA9IE5VTEw7Ci0gICAgaW50IG1hdGNobGVuID0gMDsKLQotICAgIGlmIChzdHJubGVuKHBhdHRlcm4sIFBBVEhfTUFYKSA9PSBQQVRIX01BWCB8fAotICAgICAgICBzdHJubGVuKHN0cmluZywgUEFUSF9NQVgpID09IFBBVEhfTUFYKQotICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7Ci0KLSAgICBpZiAoKnBhdHRlcm4gPT0gJyonKQotICAgICAgICBnb3RvIGZpcnN0c2VnbWVudDsKLQotICAgIHdoaWxlICgqcGF0dGVybiAmJiAqc3RyaW5nKQotICAgIHsKLSAgICAgICAgLyogUHJlLWRlY29kZSAiXC8iIHdoaWNoIGhhcyBubyBzcGVjaWFsIHNpZ25pZmljYW5jZSwgYW5kCi0gICAgICAgICAqIG1hdGNoIGJhbGFuY2VkIHNsYXNoZXMsIHN0YXJ0aW5nIGEgbmV3IHNlZ21lbnQgcGF0dGVybgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHNsYXNoICYmIGVzY2FwZSAmJiAoKnBhdHRlcm4gPT0gJ1xcJykgJiYgKHBhdHRlcm5bMV0gPT0gJy8nKSkKLSAgICAgICAgICAgICsrcGF0dGVybjsKLSAgICAgICAgaWYgKHNsYXNoICYmICgqcGF0dGVybiA9PSAnLycpICYmICgqc3RyaW5nID09ICcvJykpIHsKLSAgICAgICAgICAgICsrcGF0dGVybjsKLSAgICAgICAgICAgICsrc3RyaW5nOwotICAgICAgICB9ICAgICAgICAgICAgCi0KLWZpcnN0c2VnbWVudDoKLSAgICAgICAgLyogQXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHNlZ21lbnQsIHZhbGlkYXRlIGxlYWRpbmcgcGVyaW9kIGJlaGF2aW9yLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKChmbGFncyAmIEZOTV9QRVJJT0QpICYmICgqc3RyaW5nID09ICcuJykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgqcGF0dGVybiA9PSAnLicpCi0gICAgICAgICAgICAgICAgKytwYXR0ZXJuOwotICAgICAgICAgICAgZWxzZSBpZiAoZXNjYXBlICYmICgqcGF0dGVybiA9PSAnXFwnKSAmJiAocGF0dGVyblsxXSA9PSAnLicpKQotICAgICAgICAgICAgICAgIHBhdHRlcm4gKz0gMjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7Ci0gICAgICAgICAgICArK3N0cmluZzsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIERldGVybWluZSB0aGUgZW5kIG9mIHN0cmluZyBzZWdtZW50Ci0gICAgICAgICAqCi0gICAgICAgICAqIFByZXN1bWVzICcvJyBjaGFyYWN0ZXIgaXMgdW5pcXVlLCBub3QgY29tcG9zaXRlIGluIGFueSBNQkNTIGVuY29kaW5nCi0gICAgICAgICAqLwotICAgICAgICBpZiAoc2xhc2gpIHsKLSAgICAgICAgICAgIHN0cmVuZHNlZyA9IHN0cmNocihzdHJpbmcsICcvJyk7Ci0gICAgICAgICAgICBpZiAoIXN0cmVuZHNlZykKLSAgICAgICAgICAgICAgICBzdHJlbmRzZWcgPSBzdHJjaHIoc3RyaW5nLCAnXDAnKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0cmVuZHNlZyA9IHN0cmNocihzdHJpbmcsICdcMCcpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQWxsb3cgcGF0dGVybiAnKicgdG8gYmUgY29uc3VtZWQgZXZlbiB3aXRoIG5vIHJlbWFpbmluZyBzdHJpbmcgdG8gbWF0Y2gKLSAgICAgICAgICovCi0gICAgICAgIHdoaWxlICgqcGF0dGVybikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKChzdHJpbmcgPiBzdHJlbmRzZWcpCi0gICAgICAgICAgICAgICAgfHwgKChzdHJpbmcgPT0gc3RyZW5kc2VnKSAmJiAoKnBhdHRlcm4gIT0gJyonKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChzbGFzaCAmJiAoKCpwYXR0ZXJuID09ICcvJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChlc2NhcGUgJiYgKCpwYXR0ZXJuID09ICdcXCcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwYXR0ZXJuWzFdID09ICcvJykpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLyogUmVkdWNlIGdyb3VwcyBvZiAnKicgYW5kICc/JyB0byBuICc/JyBtYXRjaGVzCi0gICAgICAgICAgICAgKiBmb2xsb3dlZCBieSBvbmUgJyonIHRlc3QgZm9yIHNpbXBsaWNpdHkKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZm9yICh3aWxkID0gMDsgKCgqcGF0dGVybiA9PSAnKicpIHx8ICgqcGF0dGVybiA9PSAnPycpKTsgKytwYXR0ZXJuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgqcGF0dGVybiA9PSAnKicpIHsKLSAgICAgICAgICAgICAgICAgICAgd2lsZCA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmluZyA8IHN0cmVuZHNlZykgeyAgLyogJiYgKCpwYXR0ZXJuID09ICc/JykgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBBZHZhbmNlIDEgY2hhciBmb3IgTUJDUyBsb2NhbGUgKi8KLSAgICAgICAgICAgICAgICAgICAgKytzdHJpbmc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgeyAgLyogKHN0cmluZyA+PSBzdHJlbmRzZWcpICYmICgqcGF0dGVybiA9PSAnPycpICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh3aWxkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0cnN0YXJ0c2VnID0gc3RyaW5nOwotICAgICAgICAgICAgICAgIG1pc21hdGNoID0gcGF0dGVybjsKLQotICAgICAgICAgICAgICAgIC8qIENvdW50IGZpeGVkIChub24gJyonKSBjaGFyIG1hdGNoZXMgcmVtYWluaW5nIGluIHBhdHRlcm4KLSAgICAgICAgICAgICAgICAgKiBleGNsdWRpbmcgJy8nIChvciAiXC8iKSBhbmQgJyonCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgZm9yIChtYXRjaHB0ciA9IHBhdHRlcm4sIG1hdGNobGVuID0gMDsgMTsgKyttYXRjaGxlbikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoKm1hdGNocHRyID09ICdcMCcpIAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHNsYXNoICYmICgoKm1hdGNocHRyID09ICcvJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGVzY2FwZSAmJiAoKm1hdGNocHRyID09ICdcXCcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1hdGNocHRyWzFdID09ICcvJykpKSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbXBhcmUgcHJlY2lzZWx5IHRoaXMgbWFueSB0cmFpbGluZyBzdHJpbmcgY2hhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgcmVzdWx0aW5nIG1hdGNoIG5lZWRzIG5vIHdpbGRjYXJkIGxvb3AKLSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBBZGp1c3QgZm9yIE1CQ1MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcgKyBtYXRjaGxlbiA+IHN0cmVuZHNlZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmVuZHNlZyAtIG1hdGNobGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgd2lsZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICgqbWF0Y2hwdHIgPT0gJyonKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgYXQgbGVhc3QgdGhpcyBtYW55IHRyYWlsaW5nIHN0cmluZyBjaGFycyByZW1haW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGZvciB0aGUgZmlyc3QgY29tcGFyaXNvbgotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IEFkanVzdCBmb3IgTUJDUyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZyArIG1hdGNobGVuID4gc3RyZW5kc2VnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogQmVnaW4gZmlyc3Qgd2lsZCBjb21wYXJpc29uIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8qIFNraXAgZm9yd2FyZCBpbiBwYXR0ZXJuIGJ5IGEgc2luZ2xlIGNoYXJhY3RlciBtYXRjaAotICAgICAgICAgICAgICAgICAgICAgKiBVc2UgYSBkdW1teSBmbm1hdGNoX2NoKCkgdGVzdCB0byBjb3VudCBvbmUgIltyYW5nZV0iIGVzY2FwZQotICAgICAgICAgICAgICAgICAgICAgKi8gCi0gICAgICAgICAgICAgICAgICAgIC8qIFhYWDogQWRqdXN0IGZvciBNQkNTICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChlc2NhcGUgJiYgKCptYXRjaHB0ciA9PSAnXFwnKSAmJiBtYXRjaHB0clsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hwdHIgKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgqbWF0Y2hwdHIgPT0gJ1snKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1teXB0ciA9IGR1bW15c3RyaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgZm5tYXRjaF9jaCgmbWF0Y2hwdHIsICZkdW1teXB0ciwgZmxhZ3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgKyttYXRjaHB0cjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogSW5jcmVtZW50YWxseSBtYXRjaCBzdHJpbmcgYWdhaW5zdCB0aGUgcGF0dGVybgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB3aGlsZSAoKnBhdHRlcm4gJiYgKHN0cmluZyA8IHN0cmVuZHNlZykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogU3VjY2VzczsgYmVnaW4gYSBuZXcgd2lsZCBwYXR0ZXJuIHNlYXJjaAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmICgqcGF0dGVybiA9PSAnKicpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgaWYgKHNsYXNoICYmICgoKnN0cmluZyA9PSAnLycpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKnBhdHRlcm4gPT0gJy8nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGVzY2FwZSAmJiAoKnBhdHRlcm4gPT0gJ1xcJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHBhdHRlcm5bMV0gPT0gJy8nKSkpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIC8qIENvbXBhcmUgY2gncyAodGhlIHBhdHRlcm4gaXMgYWR2YW5jZWQgb3ZlciAiXC8iIHRvIHRoZSAnLycsCi0gICAgICAgICAgICAgICAgICogYnV0IHNsYXNoZXMgd2lsbCBtaXNtYXRjaCwgYW5kIGFyZSBub3QgY29uc3VtZWQpCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKCFmbm1hdGNoX2NoKCZwYXR0ZXJuLCAmc3RyaW5nLCBmbGFncykpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgLyogRmFpbGVkIHRvIG1hdGNoLCBsb29wIGFnYWluc3QgbmV4dCBjaGFyIG9mZnNldCBvZiBzdHJpbmcgc2VnbWVudCAKLSAgICAgICAgICAgICAgICAgKiB1bnRpbCBub3QgZW5vdWdoIHN0cmluZyBjaGFycyByZW1haW4gdG8gbWF0Y2ggdGhlIGZpeGVkIHBhdHRlcm4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAod2lsZCkgewotICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IEFkdmFuY2UgMSBjaGFyIGZvciBNQkNTIGxvY2FsZSAqLwotICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSArK3N0cnN0YXJ0c2VnOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nICsgbWF0Y2hsZW4gPiBzdHJlbmRzZWcpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7Ci0KLSAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IG1pc21hdGNoOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKnN0cmluZyAmJiAhKChzbGFzaCB8fCBsZWFkaW5nX2RpcikgJiYgKCpzdHJpbmcgPT0gJy8nKSkpCi0gICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7Ci0KLSAgICAgICAgaWYgKCpwYXR0ZXJuICYmICEoc2xhc2ggJiYgKCgqcGF0dGVybiA9PSAnLycpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZXNjYXBlICYmICgqcGF0dGVybiA9PSAnXFwnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocGF0dGVyblsxXSA9PSAnLycpKSkpKQotICAgICAgICAgICAgcmV0dXJuIEZOTV9OT01BVENIOwotCi0gICAgICAgIGlmIChsZWFkaW5nX2RpciAmJiAhKnBhdHRlcm4gJiYgKnN0cmluZyA9PSAnLycpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiBXaGVyZSBib3RoIHBhdHRlcm4gYW5kIHN0cmluZyBhcmUgYXQgRU9TLCBkZWNsYXJlIHN1Y2Nlc3MKLSAgICAgKi8KLSAgICBpZiAoISpzdHJpbmcgJiYgISpwYXR0ZXJuKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIHBhdHRlcm4gZGlkbid0IG1hdGNoIHRvIHRoZSBlbmQgb2Ygc3RyaW5nICovCi0gICAgcmV0dXJuIEZOTV9OT01BVENIOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc3lzbG9nLmMgYi9saWJjL3VuaXN0ZC9zeXNsb2cuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3ODQ3NS4uMDAwMDAwMAotLS0gYS9saWJjL3VuaXN0ZC9zeXNsb2cuYworKysgL2Rldi9udWxsCkBAIC0xLDM2OCArMCwwIEBACi0vKgkkT3BlbkJTRDogc3lzbG9nLmMsdiAxLjI4IDIwMDUvMDgvMDggMDg6MDU6MzQgZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5ODgsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPHN5cy91aW8uaD4KLSNpbmNsdWRlIDxzeXNsb2cuaD4KLSNpbmNsdWRlIDxzeXMvdW4uaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHBhdGhzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzbG9nX2RhdGEgc2RhdGEgPSBTWVNMT0dfREFUQV9JTklUOwotCi1leHRlcm4gY29uc3QgY2hhcgkqX19wcm9nbmFtZTsJCS8qIFByb2dyYW0gbmFtZSwgZnJvbSBjcnQwLiAqLwotCi1zdGF0aWMgdm9pZAlkaXNjb25uZWN0bG9nX3Ioc3RydWN0IHN5c2xvZ19kYXRhICopOwkvKiBkaXNjb25uZWN0IGZyb20gc3lzbG9nZCAqLwotc3RhdGljIHZvaWQJY29ubmVjdGxvZ19yKHN0cnVjdCBzeXNsb2dfZGF0YSAqKTsJLyogKHJlKWNvbm5lY3QgdG8gc3lzbG9nZCAqLwotCi0vKgotICogc3lzbG9nLCB2c3lzbG9nIC0tCi0gKglwcmludCBtZXNzYWdlIG9uIGxvZyBmaWxlOyBvdXRwdXQgaXMgaW50ZW5kZWQgZm9yIHN5c2xvZ2QoOCkuCi0gKi8KLXZvaWQKLXN5c2xvZyhpbnQgcHJpLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JdnN5c2xvZyhwcmksIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLXZvaWQKLXZzeXNsb2coaW50IHByaSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQotewotCXZzeXNsb2dfcihwcmksICZzZGF0YSwgZm10LCBhcCk7Ci19Ci0KLXZvaWQKLW9wZW5sb2coY29uc3QgY2hhciAqaWRlbnQsIGludCBsb2dzdGF0LCBpbnQgbG9nZmFjKQotewotCW9wZW5sb2dfcihpZGVudCwgbG9nc3RhdCwgbG9nZmFjLCAmc2RhdGEpOwotfQotCi12b2lkCi1jbG9zZWxvZyh2b2lkKQotewotCWNsb3NlbG9nX3IoJnNkYXRhKTsKLX0KLQotLyogc2V0bG9nbWFzayAtLSBzZXQgdGhlIGxvZyBtYXNrIGxldmVsICovCi1pbnQKLXNldGxvZ21hc2soaW50IHBtYXNrKQotewotCXJldHVybiBzZXRsb2dtYXNrX3IocG1hc2ssICZzZGF0YSk7Ci19Ci0KLS8qIFJlZW50cmFudCB2ZXJzaW9uIG9mIHN5c2xvZywgaS5lLiBzeXNsb2dfcigpICovCi0KLXZvaWQKLXN5c2xvZ19yKGludCBwcmksIHN0cnVjdCBzeXNsb2dfZGF0YSAqZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXZzeXNsb2dfcihwcmksIGRhdGEsIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLXZvaWQKLXZzeXNsb2dfcihpbnQgcHJpLCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKLXsKLQlpbnQgY250OwotCWNoYXIgY2gsICpwLCAqdDsKLQl0aW1lX3Qgbm93OwotCWludCBmZCwgc2F2ZWRfZXJybm8sIGVycm9yOwotI2RlZmluZQlUQlVGX0xFTgkyMDQ4Ci0jZGVmaW5lCUZNVF9MRU4JCTEwMjQKLQljaGFyICpzdGRwID0gTlVMTCwgdGJ1ZltUQlVGX0xFTl0sIGZtdF9jcHlbRk1UX0xFTl07Ci0JaW50IHRidWZfbGVmdCwgZm10X2xlZnQsIHBybGVuOwotCi0jZGVmaW5lCUlOVEVSTkFMTE9HCUxPR19FUlJ8TE9HX0NPTlN8TE9HX1BFUlJPUnxMT0dfUElECi0JLyogQ2hlY2sgZm9yIGludmFsaWQgYml0cy4gKi8KLQlpZiAocHJpICYgfihMT0dfUFJJTUFTS3xMT0dfRkFDTUFTSykpIHsKLQkJaWYgKGRhdGEgPT0gJnNkYXRhKSB7Ci0JCQlzeXNsb2coSU5URVJOQUxMT0csCi0JCQkgICAgInN5c2xvZzogdW5rbm93biBmYWNpbGl0eS9wcmlvcml0eTogJXgiLCBwcmkpOwotCQl9IGVsc2UgewotCQkJc3lzbG9nX3IoSU5URVJOQUxMT0csIGRhdGEsCi0JCQkgICAgInN5c2xvZ19yOiB1bmtub3duIGZhY2lsaXR5L3ByaW9yaXR5OiAleCIsIHByaSk7Ci0JCX0KLQkJcHJpICY9IExPR19QUklNQVNLfExPR19GQUNNQVNLOwotCX0KLQotCS8qIENoZWNrIHByaW9yaXR5IGFnYWluc3Qgc2V0bG9nbWFzayB2YWx1ZXMuICovCi0JaWYgKCEoTE9HX01BU0soTE9HX1BSSShwcmkpKSAmIGRhdGEtPmxvZ19tYXNrKSkKLQkJcmV0dXJuOwotCi0Jc2F2ZWRfZXJybm8gPSBlcnJubzsKLQotCS8qIFNldCBkZWZhdWx0IGZhY2lsaXR5IGlmIG5vbmUgc3BlY2lmaWVkLiAqLwotCWlmICgocHJpICYgTE9HX0ZBQ01BU0spID09IDApCi0JCXByaSB8PSBkYXRhLT5sb2dfZmFjOwotCi0JLyogSWYgd2UgaGF2ZSBiZWVuIGNhbGxlZCB0aHJvdWdoIHN5c2xvZygpLCBubyBuZWVkIGZvciByZWVudHJhbmN5LiAqLwotCWlmIChkYXRhID09ICZzZGF0YSkKLQkJKHZvaWQpdGltZSgmbm93KTsKLQotCXAgPSB0YnVmOwotCXRidWZfbGVmdCA9IFRCVUZfTEVOOwotCi0jZGVmaW5lCURFQygpCVwKLQlkbyB7CQkJCQlcCi0JCWlmIChwcmxlbiA8IDApCQkJXAotCQkJcHJsZW4gPSAwOwkJXAotCQlpZiAocHJsZW4gPj0gdGJ1Zl9sZWZ0KQkJXAotCQkJcHJsZW4gPSB0YnVmX2xlZnQgLSAxOwlcCi0JCXAgKz0gcHJsZW47CQkJXAotCQl0YnVmX2xlZnQgLT0gcHJsZW47CQlcCi0JfSB3aGlsZSAoMCkKLQotCXBybGVuID0gc25wcmludGYocCwgdGJ1Zl9sZWZ0LCAiPCVkPiIsIHByaSk7Ci0JREVDKCk7Ci0KLQkvKiAKLQkgKiBzeXNsb2dkIHdpbGwgZXhwYW5kIHRpbWUgYXV0b21hZ2ljYWxseSBmb3IgcmVlbnRyYW50IGNhc2UsIGFuZAotCSAqIGZvciBub3JtYWwgY2FzZSwganVzdCBkbyBsaWtlIGJlZm9yZQotCSAqLwotCWlmIChkYXRhID09ICZzZGF0YSkgewotCQlwcmxlbiA9IHN0cmZ0aW1lKHAsIHRidWZfbGVmdCwgIiVoICVlICVUICIsIGxvY2FsdGltZSgmbm93KSk7Ci0JCURFQygpOwotCX0KLQotCWlmIChkYXRhLT5sb2dfc3RhdCAmIExPR19QRVJST1IpCi0JCXN0ZHAgPSBwOwotCWlmIChkYXRhLT5sb2dfdGFnID09IE5VTEwpCi0JCWRhdGEtPmxvZ190YWcgPSBfX3Byb2duYW1lOwotCWlmIChkYXRhLT5sb2dfdGFnICE9IE5VTEwpIHsKLQkJcHJsZW4gPSBzbnByaW50ZihwLCB0YnVmX2xlZnQsICIlcyIsIGRhdGEtPmxvZ190YWcpOwotCQlERUMoKTsKLQl9Ci0JaWYgKGRhdGEtPmxvZ19zdGF0ICYgTE9HX1BJRCkgewotCQlwcmxlbiA9IHNucHJpbnRmKHAsIHRidWZfbGVmdCwgIlslbGRdIiwgKGxvbmcpZ2V0cGlkKCkpOwotCQlERUMoKTsKLQl9Ci0JaWYgKGRhdGEtPmxvZ190YWcgIT0gTlVMTCkgewotCQlpZiAodGJ1Zl9sZWZ0ID4gMSkgewotCQkJKnArKyA9ICc6JzsKLQkJCXRidWZfbGVmdC0tOwotCQl9Ci0JCWlmICh0YnVmX2xlZnQgPiAxKSB7Ci0JCQkqcCsrID0gJyAnOwotCQkJdGJ1Zl9sZWZ0LS07Ci0JCX0KLQl9Ci0KLQkvKiBzdHJlcnJvcigpIGlzIG5vdCByZWVudHJhbnQgKi8KLQotCWZvciAodCA9IGZtdF9jcHksIGZtdF9sZWZ0ID0gRk1UX0xFTjsgKGNoID0gKmZtdCk7ICsrZm10KSB7Ci0JCWlmIChjaCA9PSAnJScgJiYgZm10WzFdID09ICdtJykgewotCQkJKytmbXQ7Ci0JCQlpZiAoZGF0YSA9PSAmc2RhdGEpIHsKLQkJCQlwcmxlbiA9IHNucHJpbnRmKHQsIGZtdF9sZWZ0LCAiJXMiLAotCQkJCSAgICBzdHJlcnJvcihzYXZlZF9lcnJubykpOyAKLQkJCX0gZWxzZSB7Ci0JCQkJcHJsZW4gPSBzbnByaW50Zih0LCBmbXRfbGVmdCwgIkVycm9yICVkIiwKLQkJCQkgICAgc2F2ZWRfZXJybm8pOyAKLQkJCX0KLQkJCWlmIChwcmxlbiA8IDApCi0JCQkJcHJsZW4gPSAwOwotCQkJaWYgKHBybGVuID49IGZtdF9sZWZ0KQotCQkJCXBybGVuID0gZm10X2xlZnQgLSAxOwotCQkJdCArPSBwcmxlbjsKLQkJCWZtdF9sZWZ0IC09IHBybGVuOwotCQl9IGVsc2UgaWYgKGNoID09ICclJyAmJiBmbXRbMV0gPT0gJyUnICYmIGZtdF9sZWZ0ID4gMikgewotCQkJKnQrKyA9ICclJzsKLQkJCSp0KysgPSAnJSc7Ci0JCQlmbXQrKzsKLQkJCWZtdF9sZWZ0IC09IDI7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZm10X2xlZnQgPiAxKSB7Ci0JCQkJKnQrKyA9IGNoOwotCQkJCWZtdF9sZWZ0LS07Ci0JCQl9Ci0JCX0KLQl9Ci0JKnQgPSAnXDAnOwotCi0JcHJsZW4gPSB2c25wcmludGYocCwgdGJ1Zl9sZWZ0LCBmbXRfY3B5LCBhcCk7Ci0JREVDKCk7Ci0JY250ID0gcCAtIHRidWY7Ci0KLQkvKiBPdXRwdXQgdG8gc3RkZXJyIGlmIHJlcXVlc3RlZC4gKi8KLQlpZiAoZGF0YS0+bG9nX3N0YXQgJiBMT0dfUEVSUk9SKSB7Ci0JCXN0cnVjdCBpb3ZlYyBpb3ZbMl07Ci0KLQkJaW92WzBdLmlvdl9iYXNlID0gc3RkcDsKLQkJaW92WzBdLmlvdl9sZW4gPSBjbnQgLSAoc3RkcCAtIHRidWYpOwotCQlpb3ZbMV0uaW92X2Jhc2UgPSAiXG4iOwotCQlpb3ZbMV0uaW92X2xlbiA9IDE7Ci0JCSh2b2lkKXdyaXRldihTVERFUlJfRklMRU5PLCBpb3YsIDIpOwotCX0KLQotCS8qIEdldCBjb25uZWN0ZWQsIG91dHB1dCB0aGUgbWVzc2FnZSB0byB0aGUgbG9jYWwgbG9nZ2VyLiAqLwotCWlmICghZGF0YS0+b3BlbmVkKQotCQlvcGVubG9nX3IoZGF0YS0+bG9nX3RhZywgZGF0YS0+bG9nX3N0YXQsIDAsIGRhdGEpOwotCWNvbm5lY3Rsb2dfcihkYXRhKTsKLQotCS8qCi0JICogSWYgdGhlIHNlbmQoKSBmYWlsZWQsIHRoZXJlIGFyZSB0d28gbGlrZWx5IHNjZW5hcmlvczoKLQkgKiAgMSkgc3lzbG9nZCB3YXMgcmVzdGFydGVkCi0JICogIDIpIC9kZXYvbG9nIGlzIG91dCBvZiBzb2NrZXQgYnVmZmVyIHNwYWNlCi0JICogV2UgYXR0ZW1wdCB0byByZWNvbm5lY3QgdG8gL2Rldi9sb2cgdG8gdGFrZSBjYXJlIG9mCi0JICogY2FzZSAjMSBhbmQga2VlcCBzZW5kKClpbmcgZGF0YSB0byBjb3ZlciBjYXNlICMyCi0JICogdG8gZ2l2ZSBzeXNsb2dkIGEgY2hhbmNlIHRvIGVtcHR5IGl0cyBzb2NrZXQgYnVmZmVyLgotCSAqLwotCWlmICgoZXJyb3IgPSBzZW5kKGRhdGEtPmxvZ19maWxlLCB0YnVmLCBjbnQsIDApKSA8IDApIHsKLQkJaWYgKGVycm5vICE9IEVOT0JVRlMpIHsKLQkJCWRpc2Nvbm5lY3Rsb2dfcihkYXRhKTsKLQkJCWNvbm5lY3Rsb2dfcihkYXRhKTsKLQkJfQotCQlkbyB7Ci0JCQl1c2xlZXAoMSk7Ci0JCQlpZiAoKGVycm9yID0gc2VuZChkYXRhLT5sb2dfZmlsZSwgdGJ1ZiwgY250LCAwKSkgPj0gMCkKLQkJCQlicmVhazsKLQkJfSB3aGlsZSAoZXJybm8gPT0gRU5PQlVGUyk7Ci0JfQotCi0JLyoKLQkgKiBPdXRwdXQgdGhlIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGU7IHRyeSBub3QgdG8gYmxvY2sKLQkgKiBhcyBhIGJsb2NraW5nIGNvbnNvbGUgc2hvdWxkIG5vdCBzdG9wIG90aGVyIHByb2Nlc3Nlcy4KLQkgKiBNYWtlIHN1cmUgdGhlIGVycm9yIHJlcG9ydGVkIGlzIHRoZSBvbmUgZnJvbSB0aGUgc3lzbG9nZCBmYWlsdXJlLgotCSAqLwotCWlmIChlcnJvciA9PSAtMSAmJiAoZGF0YS0+bG9nX3N0YXQgJiBMT0dfQ09OUykgJiYKLQkgICAgKGZkID0gb3BlbihfUEFUSF9DT05TT0xFLCBPX1dST05MWXxPX05PTkJMT0NLLCAwKSkgPj0gMCkgewotCQlzdHJ1Y3QgaW92ZWMgaW92WzJdOwotCQkKLQkJcCA9IHN0cmNocih0YnVmLCAnPicpICsgMTsKLQkJaW92WzBdLmlvdl9iYXNlID0gcDsKLQkJaW92WzBdLmlvdl9sZW4gPSBjbnQgLSAocCAtIHRidWYpOwotCQlpb3ZbMV0uaW92X2Jhc2UgPSAiXHJcbiI7Ci0JCWlvdlsxXS5pb3ZfbGVuID0gMjsKLQkJKHZvaWQpd3JpdGV2KGZkLCBpb3YsIDIpOwotCQkodm9pZCljbG9zZShmZCk7Ci0JfQotCi0JaWYgKGRhdGEgIT0gJnNkYXRhKQotCQljbG9zZWxvZ19yKGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZAotZGlzY29ubmVjdGxvZ19yKHN0cnVjdCBzeXNsb2dfZGF0YSAqZGF0YSkKLXsKLQkvKgotCSAqIElmIHRoZSB1c2VyIGNsb3NlZCB0aGUgRkQgYW5kIG9wZW5lZCBhbm90aGVyIGluIHRoZSBzYW1lIHNsb3QsCi0JICogdGhhdCdzIHRoZWlyIHByb2JsZW0uICBUaGV5IHNob3VsZCBjbG9zZSBpdCBiZWZvcmUgY2FsbGluZyBvbgotCSAqIHN5c3RlbSBzZXJ2aWNlcy4KLQkgKi8KLQlpZiAoZGF0YS0+bG9nX2ZpbGUgIT0gLTEpIHsKLQkJY2xvc2UoZGF0YS0+bG9nX2ZpbGUpOwotCQlkYXRhLT5sb2dfZmlsZSA9IC0xOwotCX0KLQlkYXRhLT5jb25uZWN0ZWQgPSAwOwkJLyogcmV0cnkgY29ubmVjdCAqLwotfQotCi1zdGF0aWMgdm9pZAotY29ubmVjdGxvZ19yKHN0cnVjdCBzeXNsb2dfZGF0YSAqZGF0YSkKLXsKLSAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCBzb2NrYWRkciAgICAgc3lzbG9nQWRkcjsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX3VuICBzeXNsb2dBZGRyVW47Ci0gICAgfSB1OwotCi0jZGVmaW5lIFN5c2xvZ0FkZHIgICB1LnN5c2xvZ0FkZHJVbgotCi0JaWYgKGRhdGEtPmxvZ19maWxlID09IC0xKSB7Ci0JCWlmICgoZGF0YS0+bG9nX2ZpbGUgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19ER1JBTSwgMCkpID09IC0xKQotCQkJcmV0dXJuOwotCQkodm9pZClmY250bChkYXRhLT5sb2dfZmlsZSwgRl9TRVRGRCwgMSk7Ci0JfQotCWlmIChkYXRhLT5sb2dfZmlsZSAhPSAtMSAmJiAhZGF0YS0+Y29ubmVjdGVkKSB7Ci0JCW1lbXNldCgmU3lzbG9nQWRkciwgJ1wwJywgc2l6ZW9mKFN5c2xvZ0FkZHIpKTsKLSNpZiAwCi0gICAgICAgICAgICAgICAgLyogQklPTklDOiBubyBzdW5fbGVuIGZpZWxkIHRvIGZpbGwgb24gTGludXggKi8KLQkJU3lzbG9nQWRkci5zdW5fbGVuID0gc2l6ZW9mKFN5c2xvZ0FkZHIpOwotI2VuZGlmCi0JCVN5c2xvZ0FkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7Ci0JCXN0cmxjcHkoU3lzbG9nQWRkci5zdW5fcGF0aCwgX1BBVEhfTE9HLAotCQkgICAgc2l6ZW9mKFN5c2xvZ0FkZHIuc3VuX3BhdGgpKTsKLQkJaWYgKGNvbm5lY3QoZGF0YS0+bG9nX2ZpbGUsICZ1LnN5c2xvZ0FkZHIsCi0JCSAgICBzaXplb2YoU3lzbG9nQWRkcikpID09IC0xKSB7Ci0JCQkodm9pZCljbG9zZShkYXRhLT5sb2dfZmlsZSk7Ci0JCQlkYXRhLT5sb2dfZmlsZSA9IC0xOwotCQl9IGVsc2UKLQkJCWRhdGEtPmNvbm5lY3RlZCA9IDE7Ci0JfQotfQotCi12b2lkCi1vcGVubG9nX3IoY29uc3QgY2hhciAqaWRlbnQsIGludCBsb2dzdGF0LCBpbnQgbG9nZmFjLCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEpCi17Ci0JaWYgKGlkZW50ICE9IE5VTEwpCi0JCWRhdGEtPmxvZ190YWcgPSBpZGVudDsKLQlkYXRhLT5sb2dfc3RhdCA9IGxvZ3N0YXQ7Ci0JaWYgKGxvZ2ZhYyAhPSAwICYmIChsb2dmYWMgJn4gTE9HX0ZBQ01BU0spID09IDApCi0JCWRhdGEtPmxvZ19mYWMgPSBsb2dmYWM7Ci0KLQlpZiAoZGF0YS0+bG9nX3N0YXQgJiBMT0dfTkRFTEFZKQkvKiBvcGVuIGltbWVkaWF0ZWx5ICovCi0JCWNvbm5lY3Rsb2dfcihkYXRhKTsKLQotCWRhdGEtPm9wZW5lZCA9IDE7CS8qIGlkZW50IGFuZCBmYWNpbGl0eSBoYXMgYmVlbiBzZXQgKi8KLX0KLQotdm9pZAotY2xvc2Vsb2dfcihzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEpCi17Ci0JKHZvaWQpY2xvc2UoZGF0YS0+bG9nX2ZpbGUpOwotCWRhdGEtPmxvZ19maWxlID0gLTE7Ci0JZGF0YS0+Y29ubmVjdGVkID0gMDsKLQlkYXRhLT5sb2dfdGFnID0gTlVMTDsKLX0KLQotLyogc2V0bG9nbWFzayAtLSBzZXQgdGhlIGxvZyBtYXNrIGxldmVsICovCi1pbnQKLXNldGxvZ21hc2tfcihpbnQgcG1hc2ssIHN0cnVjdCBzeXNsb2dfZGF0YSAqZGF0YSkKLXsKLQlpbnQgb21hc2s7Ci0KLQlvbWFzayA9IGRhdGEtPmxvZ19tYXNrOwotCWlmIChwbWFzayAhPSAwKQotCQlkYXRhLT5sb2dfbWFzayA9IHBtYXNrOwotCXJldHVybiAob21hc2spOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc3lzdGVtLmMgYi9saWJjL3VuaXN0ZC9zeXN0ZW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJjYzM3ZS4uMDAwMDAwMAotLS0gYS9saWJjL3VuaXN0ZC9zeXN0ZW0uYworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBzeXN0ZW0uYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8cGF0aHMuaD4KLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotCi1leHRlcm4gY2hhciAqKmVudmlyb247Ci0KLWludAotc3lzdGVtKGNvbnN0IGNoYXIgKmNvbW1hbmQpCi17Ci0gIHBpZF90IHBpZDsKLQlzaWdfdCBpbnRzYXZlLCBxdWl0c2F2ZTsKLQlzaWdzZXRfdCBtYXNrLCBvbWFzazsKLQlpbnQgcHN0YXQ7Ci0JY2hhciAqYXJncFtdID0geyJzaCIsICItYyIsIE5VTEwsIE5VTEx9OwotCi0JaWYgKCFjb21tYW5kKQkJLyoganVzdCBjaGVja2luZy4uLiAqLwotCQlyZXR1cm4oMSk7Ci0KLQlhcmdwWzJdID0gKGNoYXIgKiljb21tYW5kOwotCi0Jc2lnZW1wdHlzZXQoJm1hc2spOwotCXNpZ2FkZHNldCgmbWFzaywgU0lHQ0hMRCk7Ci0Jc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbWFzaywgJm9tYXNrKTsKLQlzd2l0Y2ggKHBpZCA9IHZmb3JrKCkpIHsKLQljYXNlIC0xOgkJCS8qIGVycm9yICovCi0JCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb21hc2ssIE5VTEwpOwotCQlyZXR1cm4oLTEpOwotCWNhc2UgMDoJCQkJLyogY2hpbGQgKi8KLQkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbWFzaywgTlVMTCk7Ci0JCWV4ZWN2ZShfUEFUSF9CU0hFTEwsIGFyZ3AsIGVudmlyb24pOwotICAgIF9leGl0KDEyNyk7Ci0gIH0KLQotCWludHNhdmUgPSAoc2lnX3QpICBic2Rfc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7Ci0JcXVpdHNhdmUgPSAoc2lnX3QpIGJzZF9zaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7Ci0JcGlkID0gd2FpdHBpZChwaWQsIChpbnQgKikmcHN0YXQsIDApOwotCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb21hc2ssIE5VTEwpOwotCSh2b2lkKWJzZF9zaWduYWwoU0lHSU5ULCBpbnRzYXZlKTsKLQkodm9pZClic2Rfc2lnbmFsKFNJR1FVSVQsIHF1aXRzYXZlKTsKLQlyZXR1cm4gKHBpZCA9PSAtMSA/IC0xIDogcHN0YXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvdGltZS5jIGIvbGliYy91bmlzdGQvdGltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGFhNjJjLi4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL3RpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCSRPcGVuQlNEOiB0aW1lLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNCBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDx0aW1lLmg+Ci0KLXRpbWVfdAotdGltZSh0aW1lX3QgKnQpCi17Ci0Jc3RydWN0IHRpbWV2YWwgdHQ7Ci0JdGltZV90IHJldDsKLQotCWlmIChnZXR0aW1lb2ZkYXkoJnR0LCAoc3RydWN0IHRpbWV6b25lICopMCkgPCAwKQotCQlyZXQgPSAtMTsKLQllbHNlCi0JCXJldCA9IHR0LnR2X3NlYzsKLQlpZiAodCAhPSBOVUxMKQotCQkqdCA9IHJldDsKLQlyZXR1cm4gcmV0OwotfQotCi0vLyByZXR1cm4gbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIENQVSB0aW1lIGluIHRpY2tzIHJlbGF0aXZlIHRvIHVuc3BlY2lmaWVkIGVwb2NoCi1zdGF0aWMgaW5saW5lIGNsb2NrX3QgY2xvY2tfbm93KHZvaWQpCi17Ci0Jc3RydWN0IHRpbWVzcGVjIHRtOwotCWNsb2NrX2dldHRpbWUoIENMT0NLX01PTk9UT05JQywgJnRtKTsKLQlyZXR1cm4gdG0udHZfc2VjICogQ0xPQ0tTX1BFUl9TRUMgKyAodG0udHZfbnNlYyAqIChDTE9DS1NfUEVSX1NFQy8xZTkpKTsKLX0KLQotLy8gaW5pdGlhbGl6ZWQgYnkgdGhlIGNvbnN0cnVjdG9yIGJlbG93Ci1zdGF0aWMgY2xvY2tfdCBjbG9ja19zdGFydDsKLQotLy8gY2FsbGVkIGJ5IGRsb3BlbiB3aGVuIC5zbyBpcyBsb2FkZWQKLV9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgc3RhdGljIHZvaWQgY2xvY2tfY3J0MCh2b2lkKQotewotCWNsb2NrX3N0YXJ0ID0gY2xvY2tfbm93KCk7Ci19Ci0KLS8vIHJldHVybiBlbGFwc2VkIENQVSB0aW1lIGluIGNsb2NrIHRpY2tzLCBzaW5jZSBzdGFydCBvZiBwcm9ncmFtIGV4ZWN1dGlvbgotLy8gKHNwZWMgc2F5cyBlcG9jaCBpcyB1bmRlZmluZWQsIGJ1dCBnbGliYyB1c2VzIGNydDAgYXMgZXBvY2gpCi1jbG9ja190Ci1jbG9jayh2b2lkKQotewotCS8vIG5vdGUgdGhhdCBpZiB3ZSBhcmUgZXhlY3V0aW5nIGluIGEgZGlmZmVyZW50IHRocmVhZCB0aGFuIGNydDAsIHRoZW4gdGhlCi0JLy8gcHRocmVhZF9jcmVhdGUgdGhhdCBtYWRlIHVzIGhhZCBhIG1lbW9yeSBiYXJyaWVyIHNvIGNsb2NrX3N0YXJ0IGlzIGRlZmluZWQKLQlyZXR1cm4gY2xvY2tfbm93KCkgLSBjbG9ja19zdGFydDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZGxtYWxsb2MvbWFsbG9jLmMgYi9saWJjL3Vwc3RyZWFtLWRsbWFsbG9jL21hbGxvYy5jCmluZGV4IDNlZjliNjEuLjQzNjJmNDkgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tZGxtYWxsb2MvbWFsbG9jLmMKKysrIGIvbGliYy91cHN0cmVhbS1kbG1hbGxvYy9tYWxsb2MuYwpAQCAtNTMxNywxMiArNTMxNywxOSBAQAogICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIGJ5dGVzKTsKIH0KIAorLyogQkVHSU4gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBvdmVyZmxvdyBjaGVjayAqLwogdm9pZCogZGxwdmFsbG9jKHNpemVfdCBieXRlcykgewogICBzaXplX3QgcGFnZXN6OworICBzaXplX3Qgc2l6ZTsKICAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CiAgIHBhZ2VzeiA9IG1wYXJhbXMucGFnZV9zaXplOwotICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIChieXRlcyArIHBhZ2VzeiAtIFNJWkVfVF9PTkUpICYgfihwYWdlc3ogLSBTSVpFX1RfT05FKSk7CisgIHNpemUgPSAoYnl0ZXMgKyBwYWdlc3ogLSBTSVpFX1RfT05FKSAmIH4ocGFnZXN6IC0gU0laRV9UX09ORSk7CisgIGlmIChzaXplIDwgYnl0ZXMpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIHNpemUpOwogfQorLyogRU5EIGFuZHJvaWQtY2hhbmdlICovCiAKIHZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjaHVua3NbXSkgewpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9mcmVlYnNkLWNvbXBhdC5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9mcmVlYnNkLWNvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZjE0MjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvYW5kcm9pZC9pbmNsdWRlL2ZyZWVic2QtY29tcGF0LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19GUkVFQlNEX0NPTVBBVF9IX2luY2x1ZGVkCisjZGVmaW5lIF9CSU9OSUNfRlJFRUJTRF9DT01QQVRfSF9pbmNsdWRlZAorCisjZGVmaW5lIF9fVVNFX0JTRAorI2RlZmluZSBSRVBMQUNFX0dFVE9QVAorCisvKgorICogRnJlZUJTRCdzIGxpYmMgaGFzIHRocmVlIHN5bWJvbHMgZm9yIGV2ZXJ5IHN5bWJvbDoKKyAqCisgKiAgICAgX19mIHdpbGwgYmUgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4KKyAqICAgICBfZiB3aWxsIGJlIGEgd2VhayByZWZlcmVuY2UgdG8gX19mICh1c2VkIGZvciBjYWxscyB0byBmIGZyb20gd2l0aGluIHRoZSBsaWJyYXJ5KS4KKyAqICAgICBmIHdpbGwgYmUgYSB3ZWFrIHJlZmVyZW5jZSB0byBfX2YgKHVzZWQgZm9yIGNhbGxzIHRvIGYgZnJvbSBvdXRzaWRlIHRoZSBsaWJyYXJ5KS4KKyAqCisgKiBXZSBjb2xsYXBzZSB0aGlzIGludG8ganVzdCB0aGUgb25lIHN5bWJvbCwgZi4KKyAqLworCisvKiBQcmV2ZW50IHdlYWsgcmVmZXJlbmNlIGdlbmVyYXRpb24uICovCisjZGVmaW5lIF9fd2Vha19yZWZlcmVuY2Uoc3ltLGFsaWFzKQorCisvKiBFbnN1cmUgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmIGdldHMgdGhlIHVuZGVyc2NvcmUtZnJlZSBuYW1lLiAqLworI2RlZmluZSBfX3NsZWVwIHNsZWVwCisjZGVmaW5lIF9fdXNsZWVwIHVzbGVlcAorCisvKiBSZWRpcmVjdCBpbnRlcm5hbCBDIGxpYnJhcnkgY2FsbHMgdG8gdGhlIHB1YmxpYyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgX2Nsb3NlIGNsb3NlCisjZGVmaW5lIF9mY250bCBmY250bAorI2RlZmluZSBfZnN0YXQgZnN0YXQKKyNkZWZpbmUgX25hbm9zbGVlcCBuYW5vc2xlZXAKKyNkZWZpbmUgX29wZW4gb3BlbgorCisvKiBUaGlzIG9uZSBpcyBvbmx5IG5lZWRlZCBhcyBsb25nIGFzIHdlIGhhdmUgYSBtaXggb2YgT3BlbkJTRCBhbmQgRnJlZUJTRCBzdGRpby4gKi8KKyNkZWZpbmUgX3NzZWVrIF9fc3NlZWsKKworLyogVGhpcyBpcyBpbiBCU0QncyA8c3RkbGliLmg+LiAqLworI2luY2x1ZGUgPHN0ZGludC5oPgorZXh0ZXJuIHVpbnQzMl90IGFyYzRyYW5kb21fdW5pZm9ybSh1aW50MzJfdCB1cHBlcl9ib3VuZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9saWJjX3ByaXZhdGUuaCBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9hbmRyb2lkL2luY2x1ZGUvbGliY19wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhNjQzMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9hbmRyb2lkL2luY2x1ZGUvbGliY19wcml2YXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19GUkVFQlNEX0xJQkNfUFJJVkFURV9IX2luY2x1ZGVkCisjZGVmaW5lIF9CSU9OSUNfRlJFRUJTRF9MSUJDX1BSSVZBVEVfSF9pbmNsdWRlZAorCisjZGVmaW5lIFNURElPX1RIUkVBRF9MT0NLKCkgICAvKiBUT0RPOiB1bnRpbCB3ZSBoYXZlIHRoZSBGcmVlQlNEIGZpbmRmcC5jLCB0aGlzIGlzIHVzZWxlc3MuICovCisjZGVmaW5lIFNURElPX1RIUkVBRF9VTkxPQ0soKSAvKiBUT0RPOiB1bnRpbCB3ZSBoYXZlIHRoZSBGcmVlQlNEIGZpbmRmcC5jLCB0aGlzIGlzIHVzZWxlc3MuICovCisKKyNkZWZpbmUgT1JJRU5UKGZwLCBvKSAvKiBPbmx5IG5lZWRlZCBmb3Igd2lkZS1jaGFyYWN0ZXIgc3RyZWFtIHN1cHBvcnQuICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL3VuLW5hbWVzcGFjZS5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9uYW1lc3BhY2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGxpYmMvdXBzdHJlYW0tZnJlZWJzZC91bi1uYW1lc3BhY2UuaApjb3B5IHRvIGxpYmMvdXBzdHJlYW0tZnJlZWJzZC9hbmRyb2lkL2luY2x1ZGUvbmFtZXNwYWNlLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9zcGlubG9jay5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9zcGlubG9jay5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLWZyZWVic2Qvc3BpbmxvY2suaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1mcmVlYnNkL2FuZHJvaWQvaW5jbHVkZS9zcGlubG9jay5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvdW4tbmFtZXNwYWNlLmggYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvYW5kcm9pZC9pbmNsdWRlL3VuLW5hbWVzcGFjZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvdW4tbmFtZXNwYWNlLmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tZnJlZWJzZC9hbmRyb2lkL2luY2x1ZGUvdW4tbmFtZXNwYWNlLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9mcmVlYnNkLWNvbXBhdC5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2ZyZWVic2QtY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0ZGM2NzkuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2ZyZWVic2QtY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBfQklPTklDX0ZSRUVCU0RfQ09NUEFUX0hfaW5jbHVkZWQKLSNkZWZpbmUgX0JJT05JQ19GUkVFQlNEX0NPTVBBVF9IX2luY2x1ZGVkCi0KLSNkZWZpbmUgX19VU0VfQlNECi0jZGVmaW5lIFJFUExBQ0VfR0VUT1BUCi0KLS8qCi0gKiBGcmVlQlNEJ3MgbGliYyBoYXMgdGhyZWUgc3ltYm9scyBmb3IgZXZlcnkgc3ltYm9sOgotICoKLSAqICAgICBfX2Ygd2lsbCBiZSB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLgotICogICAgIF9mIHdpbGwgYmUgYSB3ZWFrIHJlZmVyZW5jZSB0byBfX2YgKHVzZWQgZm9yIGNhbGxzIHRvIGYgZnJvbSB3aXRoaW4gdGhlIGxpYnJhcnkpLgotICogICAgIGYgd2lsbCBiZSBhIHdlYWsgcmVmZXJlbmNlIHRvIF9fZiAodXNlZCBmb3IgY2FsbHMgdG8gZiBmcm9tIG91dHNpZGUgdGhlIGxpYnJhcnkpLgotICoKLSAqIFdlIGNvbGxhcHNlIHRoaXMgaW50byBqdXN0IHRoZSBvbmUgc3ltYm9sLCBmLgotICovCi0KLS8qIFByZXZlbnQgd2VhayByZWZlcmVuY2UgZ2VuZXJhdGlvbi4gKi8KLSNkZWZpbmUgX193ZWFrX3JlZmVyZW5jZShzeW0sYWxpYXMpCi0KLS8qIEVuc3VyZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgZ2V0cyB0aGUgdW5kZXJzY29yZS1mcmVlIG5hbWUuICovCi0jZGVmaW5lIF9fc2xlZXAgc2xlZXAKLSNkZWZpbmUgX191c2xlZXAgdXNsZWVwCi0KLS8qIFJlZGlyZWN0IGludGVybmFsIEMgbGlicmFyeSBjYWxscyB0byB0aGUgcHVibGljIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBfY2xvc2UgY2xvc2UKLSNkZWZpbmUgX2ZjbnRsIGZjbnRsCi0jZGVmaW5lIF9mc3RhdCBmc3RhdAotI2RlZmluZSBfbmFub3NsZWVwIG5hbm9zbGVlcAotI2RlZmluZSBfb3BlbiBvcGVuCi0KLS8qIFRoaXMgb25lIGlzIG9ubHkgbmVlZGVkIGFzIGxvbmcgYXMgd2UgaGF2ZSBhIG1peCBvZiBPcGVuQlNEIGFuZCBGcmVlQlNEIHN0ZGlvLiAqLwotI2RlZmluZSBfc3NlZWsgX19zc2VlawotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9nZW4vbGRleHAuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9nZW4vbGRleHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODdmNjczCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL2dlbi9sZGV4cC5jCkBAIC0wLDAgKzEsMTIzIEBACisvKiBAKCMpc19zY2FsYm4uYyA1LjEgOTMvMDkvMjQgKi8KKy8qIEAoIylmZGxpYm0uaCA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKy8qIEJpdCBmaWRkbGluZyByb3V0aW5lcyBjb3BpZWQgZnJvbSBtc3VuL3NyYy9tYXRoX3ByaXZhdGUuaCx2IDEuMTUgKi8KKworI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorCit0eXBlZGVmIHVuaW9uCit7CisgIGRvdWJsZSB2YWx1ZTsKKyAgc3RydWN0CisgIHsKKyAgICB1X2ludDMyX3QgbXN3OworICAgIHVfaW50MzJfdCBsc3c7CisgIH0gcGFydHM7Cit9IGllZWVfZG91YmxlX3NoYXBlX3R5cGU7CisKKyNlbmRpZgorCisjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisKK3R5cGVkZWYgdW5pb24KK3sKKyAgZG91YmxlIHZhbHVlOworICBzdHJ1Y3QKKyAgeworICAgIHVfaW50MzJfdCBsc3c7CisgICAgdV9pbnQzMl90IG1zdzsKKyAgfSBwYXJ0czsKK30gaWVlZV9kb3VibGVfc2hhcGVfdHlwZTsKKworI2VuZGlmCisKKy8qIEdldCB0d28gMzIgYml0IGludHMgZnJvbSBhIGRvdWJsZS4gICovCisKKyNkZWZpbmUgRVhUUkFDVF9XT1JEUyhpeDAsaXgxLGQpCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBld191OwkJCQkJXAorICBld191LnZhbHVlID0gKGQpOwkJCQkJCVwKKyAgKGl4MCkgPSBld191LnBhcnRzLm1zdzsJCQkJCVwKKyAgKGl4MSkgPSBld191LnBhcnRzLmxzdzsJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIEdldCB0aGUgbW9yZSBzaWduaWZpY2FudCAzMiBiaXQgaW50IGZyb20gYSBkb3VibGUuICAqLworCisjZGVmaW5lIEdFVF9ISUdIX1dPUkQoaSxkKQkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIGdoX3U7CQkJCQlcCisgIGdoX3UudmFsdWUgPSAoZCk7CQkJCQkJXAorICAoaSkgPSBnaF91LnBhcnRzLm1zdzsJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBTZXQgdGhlIG1vcmUgc2lnbmlmaWNhbnQgMzIgYml0cyBvZiBhIGRvdWJsZSBmcm9tIGFuIGludC4gICovCisKKyNkZWZpbmUgU0VUX0hJR0hfV09SRChkLHYpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgc2hfdTsJCQkJCVwKKyAgc2hfdS52YWx1ZSA9IChkKTsJCQkJCQlcCisgIHNoX3UucGFydHMubXN3ID0gKHYpOwkJCQkJCVwKKyAgKGQpID0gc2hfdS52YWx1ZTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK3R3bzU0ICAgPSAgMS44MDE0Mzk4NTA5NDgxOTg0MDAwMGUrMTYsIC8qIDB4NDM1MDAwMDAsIDB4MDAwMDAwMDAgKi8KK3R3b201NCAgPSAgNS41NTExMTUxMjMxMjU3ODI3MDIxMmUtMTcsIC8qIDB4M0M5MDAwMDAsIDB4MDAwMDAwMDAgKi8KK2h1Z2UgICA9IDEuMGUrMzAwLAordGlueSAgID0gMS4wZS0zMDA7CisKK3N0YXRpYyBkb3VibGUKK19jb3B5c2lnbihkb3VibGUgeCwgZG91YmxlIHkpCit7CisJdV9pbnQzMl90IGh4LGh5OworCUdFVF9ISUdIX1dPUkQoaHgseCk7CisJR0VUX0hJR0hfV09SRChoeSx5KTsKKwlTRVRfSElHSF9XT1JEKHgsKGh4JjB4N2ZmZmZmZmYpfChoeSYweDgwMDAwMDAwKSk7CisJcmV0dXJuIHg7Cit9CisKK2RvdWJsZQorbGRleHAoZG91YmxlIHgsIGludCBuKQoreworCWludDMyX3QgayxoeCxseDsKKwlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOworICAgICAgICBrID0gKGh4JjB4N2ZmMDAwMDApPj4yMDsJCS8qIGV4dHJhY3QgZXhwb25lbnQgKi8KKyAgICAgICAgaWYgKGs9PTApIHsJCQkJLyogMCBvciBzdWJub3JtYWwgeCAqLworICAgICAgICAgICAgaWYgKChseHwoaHgmMHg3ZmZmZmZmZikpPT0wKSByZXR1cm4geDsgLyogKy0wICovCisJICAgIHggKj0gdHdvNTQ7CisJICAgIEdFVF9ISUdIX1dPUkQoaHgseCk7CisJICAgIGsgPSAoKGh4JjB4N2ZmMDAwMDApPj4yMCkgLSA1NDsKKyAgICAgICAgICAgIGlmIChuPCAtNTAwMDApIHJldHVybiB0aW55Kng7IAkvKnVuZGVyZmxvdyovCisJICAgIH0KKyAgICAgICAgaWYgKGs9PTB4N2ZmKSByZXR1cm4geCt4OwkJLyogTmFOIG9yIEluZiAqLworICAgICAgICBrID0gaytuOworICAgICAgICBpZiAoayA+ICAweDdmZSkgcmV0dXJuIGh1Z2UqX2NvcHlzaWduKGh1Z2UseCk7IC8qIG92ZXJmbG93ICAqLworICAgICAgICBpZiAoayA+IDApIAkJCQkvKiBub3JtYWwgcmVzdWx0ICovCisJICAgIHtTRVRfSElHSF9XT1JEKHgsKGh4JjB4ODAwZmZmZmYpfChrPDwyMCkpOyByZXR1cm4geDt9CisgICAgICAgIGlmIChrIDw9IC01NCkgeworICAgICAgICAgICAgaWYgKG4gPiA1MDAwMCkgCS8qIGluIGNhc2UgaW50ZWdlciBvdmVyZmxvdyBpbiBuK2sgKi8KKwkJcmV0dXJuIGh1Z2UqX2NvcHlzaWduKGh1Z2UseCk7CS8qb3ZlcmZsb3cqLworCSAgICBlbHNlIHJldHVybiB0aW55Kl9jb3B5c2lnbih0aW55LHgpOyAJLyp1bmRlcmZsb3cqLworCX0KKyAgICAgICAgayArPSA1NDsJCQkJLyogc3Vibm9ybWFsIHJlc3VsdCAqLworCVNFVF9ISUdIX1dPUkQoeCwoaHgmMHg4MDBmZmZmZil8KGs8PDIwKSk7CisgICAgICAgIHJldHVybiB4KnR3b201NDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9jbHJlcnIuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9jbHJlcnIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE2MWE2ZS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vY2xyZXJyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIyljbHJlcnIuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0KLSN1bmRlZiBjbGVhcmVycgotI3VuZGVmIGNsZWFyZXJyX3VubG9ja2VkCi0KLXZvaWQKLWNsZWFyZXJyKEZJTEUgKmZwKQotewotCUZMT0NLRklMRShmcCk7Ci0JX19zY2xlYXJlcnIoZnApOwotCUZVTkxPQ0tGSUxFKGZwKTsKLX0KLQotdm9pZAotY2xlYXJlcnJfdW5sb2NrZWQoRklMRSAqZnApCi17Ci0KLQlfX3NjbGVhcmVycihmcCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmRvcGVuLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmRvcGVuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMTliOWYuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Zkb3Blbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZkb3Blbi5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAibG9jYWwuaCIKLQotRklMRSAqCi1mZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlKQotewotCUZJTEUgKmZwOwotCWludCBmbGFncywgb2ZsYWdzLCBmZGZsYWdzLCB0bXA7Ci0KLQkvKgotCSAqIEZpbGUgZGVzY3JpcHRvcnMgYXJlIGEgZnVsbCBpbnQsIGJ1dCBfZmlsZSBpcyBvbmx5IGEgc2hvcnQuCi0JICogSWYgd2UgZ2V0IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yIHRoYXQgaXMgZ3JlYXRlciB0aGFuCi0JICogU0hSVF9NQVgsIHRoZW4gdGhlIGZkIHdpbGwgZ2V0IHNpZ24tZXh0ZW5kZWQgaW50byBhbgotCSAqIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yLiAgSGFuZGxlIHRoaXMgY2FzZSBieSBmYWlsaW5nIHRoZQotCSAqIG9wZW4uCi0JICovCi0JaWYgKGZkID4gU0hSVF9NQVgpIHsKLQkJZXJybm8gPSBFTUZJTEU7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JaWYgKChmbGFncyA9IF9fc2ZsYWdzKG1vZGUsICZvZmxhZ3MpKSA9PSAwKQotCQlyZXR1cm4gKE5VTEwpOwotCi0JLyogTWFrZSBzdXJlIHRoZSBtb2RlIHRoZSB1c2VyIHdhbnRzIGlzIGEgc3Vic2V0IG9mIHRoZSBhY3R1YWwgbW9kZS4gKi8KLQlpZiAoKGZkZmxhZ3MgPSBfZmNudGwoZmQsIEZfR0VURkwsIDApKSA8IDApCi0JCXJldHVybiAoTlVMTCk7Ci0JdG1wID0gZmRmbGFncyAmIE9fQUNDTU9ERTsKLQlpZiAodG1wICE9IE9fUkRXUiAmJiAodG1wICE9IChvZmxhZ3MgJiBPX0FDQ01PREUpKSkgewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlpZiAoKGZwID0gX19zZnAoKSkgPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQotCWlmICgob2ZsYWdzICYgT19DTE9FWEVDKSAmJiBfZmNudGwoZmQsIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0xKSB7Ci0JCWZwLT5fZmxhZ3MgPSAwOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCWZwLT5fZmxhZ3MgPSBmbGFnczsKLQkvKgotCSAqIElmIG9wZW5lZCBmb3IgYXBwZW5kaW5nLCBidXQgdW5kZXJseWluZyBkZXNjcmlwdG9yIGRvZXMgbm90IGhhdmUKLQkgKiBPX0FQUEVORCBiaXQgc2V0LCBhc3NlcnQgX19TQVBQIHNvIHRoYXQgX19zd3JpdGUoKSBjYWxsZXIKLQkgKiB3aWxsIF9zc2VlaygpIHRvIHRoZSBlbmQgYmVmb3JlIHdyaXRlLgotCSAqLwotCWlmICgob2ZsYWdzICYgT19BUFBFTkQpICYmICEoZmRmbGFncyAmIE9fQVBQRU5EKSkKLQkJZnAtPl9mbGFncyB8PSBfX1NBUFA7Ci0JZnAtPl9maWxlID0gZmQ7Ci0JZnAtPl9jb29raWUgPSBmcDsKLQlmcC0+X3JlYWQgPSBfX3NyZWFkOwotCWZwLT5fd3JpdGUgPSBfX3N3cml0ZTsKLQlmcC0+X3NlZWsgPSBfX3NzZWVrOwotCWZwLT5fY2xvc2UgPSBfX3NjbG9zZTsKLQlyZXR1cm4gKGZwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZW9mLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmVvZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTcwMjQ4Li4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZW9mLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmZW9mLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotCi0jdW5kZWYgZmVvZgotI3VuZGVmIGZlb2ZfdW5sb2NrZWQKLQotaW50Ci1mZW9mKEZJTEUgKmZwKQotewotCWludAlyZXQ7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCXJldD0gX19zZmVvZihmcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAocmV0KTsKLX0KLQotaW50Ci1mZW9mX3VubG9ja2VkKEZJTEUgKmZwKQotewotCi0JcmV0dXJuIChfX3NmZW9mKGZwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmVycm9yLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmVycm9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlMGY4ZjkuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZlcnJvci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmVycm9yLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotCi0jdW5kZWYgZmVycm9yCi0jdW5kZWYgZmVycm9yX3VubG9ja2VkCi0KLWludAotZmVycm9yKEZJTEUgKmZwKQotewotCWludAlyZXQ7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCXJldCA9IF9fc2ZlcnJvcihmcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAocmV0KTsKLX0KLQotaW50Ci1mZXJyb3JfdW5sb2NrZWQoRklMRSAqZnApCi17Ci0KLQlyZXR1cm4gKF9fc2ZlcnJvcihmcCkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRsbi5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRsbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzc5ZGUyLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZ2V0bG4uYworKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmZ2V0bG4uYwk4LjIgKEJlcmtlbGV5KSAxLzIvOTQiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0jaW5jbHVkZSAibG9jYWwuaCIKLQotLyoKLSAqIEV4cGFuZCB0aGUgbGluZSBidWZmZXIuICBSZXR1cm4gLTEgb24gZXJyb3IuCi0jaWZkZWYgbm90ZGVmCi0gKiBUaGUgYG5ldyBzaXplJyBkb2VzIG5vdCBhY2NvdW50IGZvciBhIHRlcm1pbmF0aW5nICdcMCcsCi0gKiBzbyB3ZSBhZGQgMSBoZXJlLgotI2VuZGlmCi0gKi8KLWludAotX19zbGJleHBhbmQoRklMRSAqZnAsIHNpemVfdCBuZXdzaXplKQotewotCXZvaWQgKnA7Ci0KLSNpZmRlZiBub3RkZWYKLQkrK25ld3NpemU7Ci0jZW5kaWYKLQlpZiAoZnAtPl9sYi5fc2l6ZSA+PSBuZXdzaXplKQotCQlyZXR1cm4gKDApOwotCWlmICgocCA9IHJlYWxsb2MoZnAtPl9sYi5fYmFzZSwgbmV3c2l6ZSkpID09IE5VTEwpCi0JCXJldHVybiAoLTEpOwotCWZwLT5fbGIuX2Jhc2UgPSBwOwotCWZwLT5fbGIuX3NpemUgPSBuZXdzaXplOwotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBHZXQgYW4gaW5wdXQgbGluZS4gIFRoZSByZXR1cm5lZCBwb2ludGVyIG9mdGVuIChidXQgbm90IGFsd2F5cykKLSAqIHBvaW50cyBpbnRvIGEgc3RkaW8gYnVmZmVyLiAgRmdldGxuIGRvZXMgbm90IGFsdGVyIHRoZSB0ZXh0IG9mCi0gKiB0aGUgcmV0dXJuZWQgbGluZSAod2hpY2ggaXMgdGh1cyBub3QgYSBDIHN0cmluZyBiZWNhdXNlIGl0IHdpbGwKLSAqIG5vdCBuZWNlc3NhcmlseSBlbmQgd2l0aCAnXDAnKSwgYnV0IGRvZXMgYWxsb3cgY2FsbGVycyB0byBtb2RpZnkKLSAqIGl0IGlmIHRoZXkgd2lzaC4gIFRodXMsIHdlIHNldCBfX1NNT0QgaW4gY2FzZSB0aGUgY2FsbGVyIGRvZXMuCi0gKi8KLWNoYXIgKgotZmdldGxuKEZJTEUgKmZwLCBzaXplX3QgKmxlbnApCi17Ci0JdW5zaWduZWQgY2hhciAqcDsKLQlzaXplX3QgbGVuOwotCXNpemVfdCBvZmY7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCU9SSUVOVChmcCwgLTEpOwotCS8qIG1ha2Ugc3VyZSB0aGVyZSBpcyBpbnB1dCAqLwotCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7Ci0JCSpsZW5wID0gMDsKLQkJRlVOTE9DS0ZJTEUoZnApOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCS8qIGxvb2sgZm9yIGEgbmV3bGluZSBpbiB0aGUgaW5wdXQgKi8KLQlpZiAoKHAgPSBtZW1jaHIoKHZvaWQgKilmcC0+X3AsICdcbicsIChzaXplX3QpZnAtPl9yKSkgIT0gTlVMTCkgewotCQljaGFyICpyZXQ7Ci0KLQkJLyoKLQkJICogRm91bmQgb25lLiAgRmxhZyBidWZmZXIgYXMgbW9kaWZpZWQgdG8ga2VlcCBmc2VlayBmcm9tCi0JCSAqIGBvcHRpbWlzaW5nJyBhIGJhY2t3YXJkIHNlZWssIGluIGNhc2UgdGhlIHVzZXIgc3RvbXBzIG9uCi0JCSAqIHRoZSB0ZXh0LgotCQkgKi8KLQkJcCsrOwkJLyogYWR2YW5jZSBvdmVyIGl0ICovCi0JCXJldCA9IChjaGFyICopZnAtPl9wOwotCQkqbGVucCA9IGxlbiA9IHAgLSBmcC0+X3A7Ci0JCWZwLT5fZmxhZ3MgfD0gX19TTU9EOwotCQlmcC0+X3IgLT0gbGVuOwotCQlmcC0+X3AgPSBwOwotCQlGVU5MT0NLRklMRShmcCk7Ci0JCXJldHVybiAocmV0KTsKLQl9Ci0KLQkvKgotCSAqIFdlIGhhdmUgdG8gY29weSB0aGUgY3VycmVudCBidWZmZXJlZCBkYXRhIHRvIHRoZSBsaW5lIGJ1ZmZlci4KLQkgKiBBcyBhIGJvbnVzLCB0aG91Z2gsIHdlIGNhbiBsZWF2ZSBvZmYgdGhlIF9fU01PRC4KLQkgKgotCSAqIE9QVElNSVNUSUMgaXMgbGVuZ3RoIHRoYXQgd2UgKG9wdGltaXN0aWNhbGx5KSBleHBlY3Qgd2lsbAotCSAqIGFjY29tbW9kYXRlIHRoZSBgcmVzdCcgb2YgdGhlIHN0cmluZywgb24gZWFjaCB0cmlwIHRocm91Z2ggdGhlCi0JICogbG9vcCBiZWxvdy4KLQkgKi8KLSNkZWZpbmUgT1BUSU1JU1RJQyA4MAotCi0JZm9yIChsZW4gPSBmcC0+X3IsIG9mZiA9IDA7OyBsZW4gKz0gZnAtPl9yKSB7Ci0JCXNpemVfdCBkaWZmOwotCi0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyByb29tIGZvciBtb3JlIGJ5dGVzLiAgQ29weSBkYXRhIGZyb20KLQkJICogZmlsZSBidWZmZXIgdG8gbGluZSBidWZmZXIsIHJlZmlsbCBmaWxlIGFuZCBsb29rIGZvcgotCQkgKiBuZXdsaW5lLiAgVGhlIGxvb3Agc3RvcHMgb25seSB3aGVuIHdlIGZpbmQgYSBuZXdsaW5lLgotCQkgKi8KLQkJaWYgKF9fc2xiZXhwYW5kKGZwLCBsZW4gKyBPUFRJTUlTVElDKSkKLQkJCWdvdG8gZXJyb3I7Ci0JCSh2b2lkKW1lbWNweSgodm9pZCAqKShmcC0+X2xiLl9iYXNlICsgb2ZmKSwgKHZvaWQgKilmcC0+X3AsCi0JCSAgICBsZW4gLSBvZmYpOwotCQlvZmYgPSBsZW47Ci0JCWlmIChfX3NyZWZpbGwoZnApKQotCQkJYnJlYWs7CS8qIEVPRiBvciBlcnJvcjogcmV0dXJuIHBhcnRpYWwgbGluZSAqLwotCQlpZiAoKHAgPSBtZW1jaHIoKHZvaWQgKilmcC0+X3AsICdcbicsIChzaXplX3QpZnAtPl9yKSkgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGdvdCBpdDogZmluaXNoIHVwIHRoZSBsaW5lIChsaWtlIGNvZGUgYWJvdmUpICovCi0JCXArKzsKLQkJZGlmZiA9IHAgLSBmcC0+X3A7Ci0JCWxlbiArPSBkaWZmOwotCQlpZiAoX19zbGJleHBhbmQoZnAsIGxlbikpCi0JCQlnb3RvIGVycm9yOwotCQkodm9pZCltZW1jcHkoKHZvaWQgKikoZnAtPl9sYi5fYmFzZSArIG9mZiksICh2b2lkICopZnAtPl9wLAotCQkgICAgZGlmZik7Ci0JCWZwLT5fciAtPSBkaWZmOwotCQlmcC0+X3AgPSBwOwotCQlicmVhazsKLQl9Ci0JKmxlbnAgPSBsZW47Ci0jaWZkZWYgbm90ZGVmCi0JZnAtPl9sYi5fYmFzZVtsZW5dID0gMDsKLSNlbmRpZgotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKChjaGFyICopZnAtPl9sYi5fYmFzZSk7Ci0KLWVycm9yOgotCSpsZW5wID0gMDsJCS8qID8/PyAqLwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKE5VTEwpOwkJLyogPz8/ICovCi19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmdldHBvcy5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRwb3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE2MWY0My4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmdldHBvcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmdldHBvcy5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotaW50Ci1mZ2V0cG9zKEZJTEUgKiBfX3Jlc3RyaWN0IGZwLCBmcG9zX3QgKiBfX3Jlc3RyaWN0IHBvcykKLXsKLQkvKgotCSAqIGZ0ZWxsbyBpcyB0aHJlYWQtc2FmZTsgbm8gbmVlZCB0byBsb2NrIGZwLgotCSAqLwotCWlmICgoKnBvcyA9IGZ0ZWxsbyhmcCkpID09IChmcG9zX3QpLTEpCi0JCXJldHVybiAoLTEpOwotCWVsc2UKLQkJcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZ2V0cy5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYmY1NTkuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmdldHMuYwk4LjIgKEJlcmtlbGV5KSAxMi8yMi85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKLSNpbmNsdWRlICJsb2NhbC5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotCi0vKgotICogUmVhZCBhdCBtb3N0IG4tMSBjaGFyYWN0ZXJzIGZyb20gdGhlIGdpdmVuIGZpbGUuCi0gKiBTdG9wIHdoZW4gYSBuZXdsaW5lIGhhcyBiZWVuIHJlYWQsIG9yIHRoZSBjb3VudCBydW5zIG91dC4KLSAqIFJldHVybiBmaXJzdCBhcmd1bWVudCwgb3IgTlVMTCBpZiBubyBjaGFyYWN0ZXJzIHdlcmUgcmVhZC4KLSAqLwotY2hhciAqCi1mZ2V0cyhjaGFyICogX19yZXN0cmljdCBidWYsIGludCBuLCBGSUxFICogX19yZXN0cmljdCBmcCkKLXsKLQlzaXplX3QgbGVuOwotCWNoYXIgKnM7Ci0JdW5zaWduZWQgY2hhciAqcCwgKnQ7Ci0KLQlpZiAobiA8PSAwKQkJLyogc2FuaXR5IGNoZWNrICovCi0JCXJldHVybiAoTlVMTCk7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCU9SSUVOVChmcCwgLTEpOwotCXMgPSBidWY7Ci0Jbi0tOwkJCS8qIGxlYXZlIHNwYWNlIGZvciBOVUwgKi8KLQl3aGlsZSAobiAhPSAwKSB7Ci0JCS8qCi0JCSAqIElmIHRoZSBidWZmZXIgaXMgZW1wdHksIHJlZmlsbCBpdC4KLQkJICovCi0JCWlmICgobGVuID0gZnAtPl9yKSA8PSAwKSB7Ci0JCQlpZiAoX19zcmVmaWxsKGZwKSkgewotCQkJCS8qIEVPRi9lcnJvcjogc3RvcCB3aXRoIHBhcnRpYWwgb3Igbm8gbGluZSAqLwotCQkJCWlmIChzID09IGJ1ZikgewotCQkJCQlGVU5MT0NLRklMRShmcCk7Ci0JCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCQkJbGVuID0gZnAtPl9yOwotCQl9Ci0JCXAgPSBmcC0+X3A7Ci0KLQkJLyoKLQkJICogU2NhbiB0aHJvdWdoIGF0IG1vc3QgbiBieXRlcyBvZiB0aGUgY3VycmVudCBidWZmZXIsCi0JCSAqIGxvb2tpbmcgZm9yICdcbicuICBJZiBmb3VuZCwgY29weSB1cCB0byBhbmQgaW5jbHVkaW5nCi0JCSAqIG5ld2xpbmUsIGFuZCBzdG9wLiAgT3RoZXJ3aXNlLCBjb3B5IGVudGlyZSBjaHVuawotCQkgKiBhbmQgbG9vcC4KLQkJICovCi0JCWlmIChsZW4gPiBuKQotCQkJbGVuID0gbjsKLQkJdCA9IG1lbWNocigodm9pZCAqKXAsICdcbicsIGxlbik7Ci0JCWlmICh0ICE9IE5VTEwpIHsKLQkJCWxlbiA9ICsrdCAtIHA7Ci0JCQlmcC0+X3IgLT0gbGVuOwotCQkJZnAtPl9wID0gdDsKLQkJCSh2b2lkKW1lbWNweSgodm9pZCAqKXMsICh2b2lkICopcCwgbGVuKTsKLQkJCXNbbGVuXSA9IDA7Ci0JCQlGVU5MT0NLRklMRShmcCk7Ci0JCQlyZXR1cm4gKGJ1Zik7Ci0JCX0KLQkJZnAtPl9yIC09IGxlbjsKLQkJZnAtPl9wICs9IGxlbjsKLQkJKHZvaWQpbWVtY3B5KCh2b2lkICopcywgKHZvaWQgKilwLCBsZW4pOwotCQlzICs9IGxlbjsKLQkJbiAtPSBsZW47Ci0JfQotCSpzID0gMDsKLQlGVU5MT0NLRklMRShmcCk7Ci0JcmV0dXJuIChidWYpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWMxODMwLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9maWxlbm8uYworKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZpbGVuby5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKLSNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKLQotI3VuZGVmIGZpbGVubwotI3VuZGVmIGZpbGVub191bmxvY2tlZAotCi1pbnQKLWZpbGVubyhGSUxFICpmcCkKLXsKLQlpbnQgZmQ7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCWZkID0gX19zZmlsZW5vKGZwKTsKLQlGVU5MT0NLRklMRShmcCk7Ci0KLQlyZXR1cm4gKGZkKTsKLX0KLQotaW50Ci1maWxlbm9fdW5sb2NrZWQoRklMRSAqZnApCi17Ci0KLQlyZXR1cm4gKF9fc2ZpbGVubyhmcCkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXJnZS5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXJnZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjA1YmRmLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mcHVyZ2UuYworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZwdXJnZS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0KLS8qCi0gKiBmcHVyZ2U6IGxpa2UgZmZsdXNoLCBidXQgd2l0aG91dCB3cml0aW5nIGFueXRoaW5nOiBsZWF2ZSB0aGUKLSAqIGdpdmVuIEZJTEUncyBidWZmZXIgZW1wdHkuCi0gKi8KLWludAotZnB1cmdlKEZJTEUgKmZwKQotewotCWludCByZXR2YWw7Ci0JRkxPQ0tGSUxFKGZwKTsKLQlpZiAoIWZwLT5fZmxhZ3MpIHsKLQkJZXJybm8gPSBFQkFERjsKLQkJcmV0dmFsID0gRU9GOwotCX0gZWxzZSB7Ci0JCWlmIChIQVNVQihmcCkpCi0JCQlGUkVFVUIoZnApOwotCQlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOwotCQlmcC0+X3IgPSAwOwotCQlmcC0+X3cgPSBmcC0+X2ZsYWdzICYgKF9fU0xCRnxfX1NOQkZ8X19TUkQpID8gMCA6IGZwLT5fYmYuX3NpemU7Ci0JCXJldHZhbCA9IDA7Ci0JfQotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHJldHZhbCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZnB1dHMuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mcHV0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjhmMmM5Li4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mcHV0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZnB1dHMuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAiZnZ3cml0ZS5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLS8qCi0gKiBXcml0ZSB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBnaXZlbiBmaWxlLgotICovCi1pbnQKLWZwdXRzKGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IHMsIEZJTEUgKiBfX3Jlc3RyaWN0IGZwKQotewotCWludCByZXR2YWw7Ci0Jc3RydWN0IF9fc3VpbyB1aW87Ci0Jc3RydWN0IF9fc2lvdiBpb3Y7Ci0KLQlpb3YuaW92X2Jhc2UgPSAodm9pZCAqKXM7Ci0JaW92Lmlvdl9sZW4gPSB1aW8udWlvX3Jlc2lkID0gc3RybGVuKHMpOwotCXVpby51aW9faW92ID0gJmlvdjsKLQl1aW8udWlvX2lvdmNudCA9IDE7Ci0JRkxPQ0tGSUxFKGZwKTsKLQlPUklFTlQoZnAsIC0xKTsKLQlyZXR2YWwgPSBfX3NmdndyaXRlKGZwLCAmdWlvKTsKLQlGVU5MT0NLRklMRShmcCk7Ci0JcmV0dXJuIChyZXR2YWwpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZXRwb3MuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mc2V0cG9zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YjhiNzguLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZXRwb3MuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZzZXRwb3MuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qCi0gKiBmc2V0cG9zOiBsaWtlIGZzZWVrLgotICovCi1pbnQKLWZzZXRwb3MoRklMRSAqaW9wLCBjb25zdCBmcG9zX3QgKnBvcykKLXsKLQlyZXR1cm4gKGZzZWVrbyhpb3AsIChvZmZfdCkqcG9zLCBTRUVLX1NFVCkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z1bm9wZW4uYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mdW5vcGVuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4M2ZlNTAuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z1bm9wZW4uYworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZ1bm9wZW4uYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2luY2x1ZGUgImxvY2FsLmgiCi0KLUZJTEUgKgotZnVub3Blbihjb25zdCB2b2lkICpjb29raWUsCi0JaW50ICgqcmVhZGZuKSh2b2lkICosIGNoYXIgKiwgaW50KSwKLQlpbnQgKCp3cml0ZWZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgaW50KSwKLQlmcG9zX3QgKCpzZWVrZm4pKHZvaWQgKiwgZnBvc190LCBpbnQpLAotCWludCAoKmNsb3NlZm4pKHZvaWQgKikpCi17Ci0JRklMRSAqZnA7Ci0JaW50IGZsYWdzOwotCi0JaWYgKHJlYWRmbiA9PSBOVUxMKSB7Ci0JCWlmICh3cml0ZWZuID09IE5VTEwpIHsJCS8qIGlsbGVnYWwgKi8KLQkJCWVycm5vID0gRUlOVkFMOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfSBlbHNlCi0JCQlmbGFncyA9IF9fU1dSOwkJLyogd3JpdGUgb25seSAqLwotCX0gZWxzZSB7Ci0JCWlmICh3cml0ZWZuID09IE5VTEwpCi0JCQlmbGFncyA9IF9fU1JEOwkJLyogcmVhZCBvbmx5ICovCi0JCWVsc2UKLQkJCWZsYWdzID0gX19TUlc7CQkvKiByZWFkLXdyaXRlICovCi0JfQotCWlmICgoZnAgPSBfX3NmcCgpKSA9PSBOVUxMKQotCQlyZXR1cm4gKE5VTEwpOwotCWZwLT5fZmxhZ3MgPSBmbGFnczsKLQlmcC0+X2ZpbGUgPSAtMTsKLQlmcC0+X2Nvb2tpZSA9ICh2b2lkICopY29va2llOwotCWZwLT5fcmVhZCA9IHJlYWRmbjsKLQlmcC0+X3dyaXRlID0gd3JpdGVmbjsKLQlmcC0+X3NlZWsgPSBzZWVrZm47Ci0JZnAtPl9jbG9zZSA9IGNsb3NlZm47Ci0JcmV0dXJuIChmcCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZndhbGsuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9md2Fsay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTE4MzdiLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9md2Fsay5jCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZndhbGsuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLSNpbmNsdWRlICJnbHVlLmgiCi0KLWludAotX2Z3YWxrKGludCAoKmZ1bmN0aW9uKShGSUxFICopKQotewotCUZJTEUgKmZwOwotCWludCBuLCByZXQ7Ci0Jc3RydWN0IGdsdWUgKmc7Ci0KLQlyZXQgPSAwOwotCS8qCi0JICogSXQgc2hvdWxkIGJlIHNhZmUgdG8gd2FsayB0aGUgbGlzdCB3aXRob3V0IGxvY2tpbmcgaXQ7Ci0JICogbmV3IG5vZGVzIGFyZSBvbmx5IGFkZGVkIHRvIHRoZSBlbmQgYW5kIG5vbmUgYXJlIGV2ZXIKLQkgKiByZW1vdmVkLgotCSAqCi0JICogQXZvaWQgbG9ja2luZyB0aGlzIGxpc3Qgd2hpbGUgd2Fsa2luZyBpdCBvciBlbHNlIHlvdSB3aWxsCi0JICogaW50cm9kdWNlIGEgcG90ZW50aWFsIGRlYWRsb2NrIGluIFthdCBsZWFzdF0gcmVmaWxsLmMuCi0JICovCi0JZm9yIChnID0gJl9fc2dsdWU7IGcgIT0gTlVMTDsgZyA9IGctPm5leHQpCi0JCWZvciAoZnAgPSBnLT5pb2JzLCBuID0gZy0+bmlvYnM7IC0tbiA+PSAwOyBmcCsrKQotCQkJaWYgKChmcC0+X2ZsYWdzICE9IDApICYmICgoZnAtPl9mbGFncyAmIF9fU0lHTikgPT0gMCkpCi0JCQkJcmV0IHw9ICgqZnVuY3Rpb24pKGZwKTsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZndyaXRlLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZndyaXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwN2QzNjIuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z3cml0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZndyaXRlLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAibG9jYWwuaCIKLSNpbmNsdWRlICJmdndyaXRlLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0KLS8qCi0gKiBXcml0ZSBgY291bnQnIG9iamVjdHMgKGVhY2ggc2l6ZSBgc2l6ZScpIGZyb20gbWVtb3J5IHRvIHRoZSBnaXZlbiBmaWxlLgotICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2hvbGUgb2JqZWN0cyB3cml0dGVuLgotICovCi1zaXplX3QKLWZ3cml0ZShjb25zdCB2b2lkICogX19yZXN0cmljdCBidWYsIHNpemVfdCBzaXplLCBzaXplX3QgY291bnQsIEZJTEUgKiBfX3Jlc3RyaWN0IGZwKQotewotCXNpemVfdCBuOwotCXN0cnVjdCBfX3N1aW8gdWlvOwotCXN0cnVjdCBfX3Npb3YgaW92OwotCi0JLyoKLQkgKiBBTlNJIGFuZCBTVVN2MiByZXF1aXJlIGEgcmV0dXJuIHZhbHVlIG9mIDAgaWYgc2l6ZSBvciBjb3VudCBhcmUgMC4KLQkgKi8KLQlpZiAoKGNvdW50ID09IDApIHx8IChzaXplID09IDApKQotCQlyZXR1cm4gKDApOwotCi0JLyoKLQkgKiBDaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gIEFzIGFuIG9wdGltaXphdGlvbiwgZmlyc3QgY2hlY2sgdGhhdAotCSAqIGF0IGxlYXN0IG9uZSBvZiB7Y291bnQsIHNpemV9IGlzIGF0IGxlYXN0IDJeMTYsIHNpbmNlIGlmIGJvdGgKLQkgKiB2YWx1ZXMgYXJlIGxlc3MgdGhhbiB0aGF0LCB0aGVpciBwcm9kdWN0IGNhbid0IHBvc3NpYmxlIG92ZXJmbG93Ci0JICogKHNpemVfdCBpcyBhbHdheXMgYXQgbGVhc3QgMzIgYml0cyBvbiBGcmVlQlNEKS4KLQkgKi8KLQlpZiAoKChjb3VudCB8IHNpemUpID4gMHhGRkZGKSAmJgotCSAgICAoY291bnQgPiBTSVpFX01BWCAvIHNpemUpKSB7Ci0JCWVycm5vID0gRUlOVkFMOwotCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKLQkJcmV0dXJuICgwKTsKLQl9Ci0KLQluID0gY291bnQgKiBzaXplOwotCi0JaW92Lmlvdl9iYXNlID0gKHZvaWQgKilidWY7Ci0JdWlvLnVpb19yZXNpZCA9IGlvdi5pb3ZfbGVuID0gbjsKLQl1aW8udWlvX2lvdiA9ICZpb3Y7Ci0JdWlvLnVpb19pb3ZjbnQgPSAxOwotCi0JRkxPQ0tGSUxFKGZwKTsKLQlPUklFTlQoZnAsIC0xKTsKLQkvKgotCSAqIFRoZSB1c3VhbCBjYXNlIGlzIHN1Y2Nlc3MgKF9fc2Z2d3JpdGUgcmV0dXJucyAwKTsKLQkgKiBza2lwIHRoZSBkaXZpZGUgaWYgdGhpcyBoYXBwZW5zLCBzaW5jZSBkaXZpZGVzIGFyZQotCSAqIGdlbmVyYWxseSBzbG93IGFuZCBzaW5jZSB0aGlzIG9jY3VycyB3aGVuZXZlciBzaXplPT0wLgotCSAqLwotCWlmIChfX3NmdndyaXRlKGZwLCAmdWlvKSAhPSAwKQotCSAgICBjb3VudCA9IChuIC0gdWlvLnVpb19yZXNpZCkgLyBzaXplOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKGNvdW50KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9nZXRjLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Yy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTYzYzhjLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9nZXRjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylnZXRjLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLSN1bmRlZiBnZXRjCi0jdW5kZWYgZ2V0Y191bmxvY2tlZAotCi1pbnQKLWdldGMoRklMRSAqZnApCi17Ci0JaW50IHJldHZhbDsKLQlGTE9DS0ZJTEUoZnApOwotCS8qIE9yaWVudGF0aW9uIHNldCBieSBfX3NnZXRjKCkgd2hlbiBidWZmZXIgaXMgZW1wdHkuICovCi0JLyogT1JJRU5UKGZwLCAtMSk7ICovCi0JcmV0dmFsID0gX19zZ2V0YyhmcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAocmV0dmFsKTsKLX0KLQotaW50Ci1nZXRjX3VubG9ja2VkKEZJTEUgKmZwKQotewotCi0JcmV0dXJuIChfX3NnZXRjKGZwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Y2hhci5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2dldGNoYXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEwNDBiYy4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Y2hhci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZ2V0Y2hhci5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0vKgotICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGdldGNoYXIuCi0gKi8KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0KLSN1bmRlZiBnZXRjaGFyCi0jdW5kZWYgZ2V0Y2hhcl91bmxvY2tlZAotCi1pbnQKLWdldGNoYXIoKQotewotCWludCByZXR2YWw7Ci0JRkxPQ0tGSUxFKHN0ZGluKTsKLQkvKiBPcmllbnRhdGlvbiBzZXQgYnkgX19zZ2V0YygpIHdoZW4gYnVmZmVyIGlzIGVtcHR5LiAqLwotCS8qIE9SSUVOVChzdGRpbiwgLTEpOyAqLwotCXJldHZhbCA9IF9fc2dldGMoc3RkaW4pOwotCUZVTkxPQ0tGSUxFKHN0ZGluKTsKLQlyZXR1cm4gKHJldHZhbCk7Ci19Ci0KLWludAotZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKQotewotCi0JcmV0dXJuIChfX3NnZXRjKHN0ZGluKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vbWFrZWJ1Zi5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL21ha2VidWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyMDg3ZS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vbWFrZWJ1Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKW1ha2VidWYuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKLQotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLS8qCi0gKiBBbGxvY2F0ZSBhIGZpbGUgYnVmZmVyLCBvciBzd2l0Y2ggdG8gdW5idWZmZXJlZCBJL08uCi0gKiBQZXIgdGhlIEFOU0kgQyBzdGFuZGFyZCwgQUxMIHR0eSBkZXZpY2VzIGRlZmF1bHQgdG8gbGluZSBidWZmZXJlZC4KLSAqCi0gKiBBcyBhIHNpZGUgZWZmZWN0LCB3ZSBzZXQgX19TT1BUIG9yIF9fU05QVCAoZW4vZGlzLWFibGUgZnNlZWsKLSAqIG9wdGltaXNhdGlvbikgcmlnaHQgYWZ0ZXIgdGhlIF9mc3RhdCgpIHRoYXQgZmluZHMgdGhlIGJ1ZmZlciBzaXplLgotICovCi12b2lkCi1fX3NtYWtlYnVmKEZJTEUgKmZwKQotewotCXZvaWQgKnA7Ci0JaW50IGZsYWdzOwotCXNpemVfdCBzaXplOwotCWludCBjb3VsZGJldHR5OwotCi0JaWYgKGZwLT5fZmxhZ3MgJiBfX1NOQkYpIHsKLQkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKLQkJZnAtPl9iZi5fc2l6ZSA9IDE7Ci0JCXJldHVybjsKLQl9Ci0JZmxhZ3MgPSBfX3N3aGF0YnVmKGZwLCAmc2l6ZSwgJmNvdWxkYmV0dHkpOwotCWlmICgocCA9IG1hbGxvYyhzaXplKSkgPT0gTlVMTCkgewotCQlmcC0+X2ZsYWdzIHw9IF9fU05CRjsKLQkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKLQkJZnAtPl9iZi5fc2l6ZSA9IDE7Ci0JCXJldHVybjsKLQl9Ci0JX19jbGVhbnVwID0gX2NsZWFudXA7Ci0JZmxhZ3MgfD0gX19TTUJGOwotCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSBwOwotCWZwLT5fYmYuX3NpemUgPSBzaXplOwotCWlmIChjb3VsZGJldHR5ICYmIGlzYXR0eShmcC0+X2ZpbGUpKQotCQlmbGFncyB8PSBfX1NMQkY7Ci0JZnAtPl9mbGFncyB8PSBmbGFnczsKLX0KLQotLyoKLSAqIEludGVybmFsIHJvdXRpbmUgdG8gZGV0ZXJtaW5lIGBwcm9wZXInIGJ1ZmZlcmluZyBmb3IgYSBmaWxlLgotICovCi1pbnQKLV9fc3doYXRidWYoRklMRSAqZnAsIHNpemVfdCAqYnVmc2l6ZSwgaW50ICpjb3VsZGJldHR5KQotewotCXN0cnVjdCBzdGF0IHN0OwotCi0JaWYgKGZwLT5fZmlsZSA8IDAgfHwgX2ZzdGF0KGZwLT5fZmlsZSwgJnN0KSA8IDApIHsKLQkJKmNvdWxkYmV0dHkgPSAwOwotCQkqYnVmc2l6ZSA9IEJVRlNJWjsKLQkJcmV0dXJuIChfX1NOUFQpOwotCX0KLQotCS8qIGNvdWxkIGJlIGEgdHR5IGlmZiBpdCBpcyBhIGNoYXJhY3RlciBkZXZpY2UgKi8KLQkqY291bGRiZXR0eSA9IChzdC5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGQ0hSOwotCWlmIChzdC5zdF9ibGtzaXplIDw9IDApIHsKLQkJKmJ1ZnNpemUgPSBCVUZTSVo7Ci0JCXJldHVybiAoX19TTlBUKTsKLQl9Ci0KLQkvKgotCSAqIE9wdGltaXNlIGZzZWVrKCkgb25seSBpZiBpdCBpcyBhIHJlZ3VsYXIgZmlsZS4gIChUaGUgdGVzdCBmb3IKLQkgKiBfX3NzZWVrIGlzIG1haW5seSBwYXJhbm9pYS4pICBJdCBpcyBzYWZlIHRvIHNldCBfYmxrc2l6ZQotCSAqIHVuY29uZGl0aW9uYWxseTsgaXQgd2lsbCBvbmx5IGJlIHVzZWQgaWYgX19TT1BUIGlzIGFsc28gc2V0LgotCSAqLwotCSpidWZzaXplID0gc3Quc3RfYmxrc2l6ZTsKLQlmcC0+X2Jsa3NpemUgPSBzdC5zdF9ibGtzaXplOwotCXJldHVybiAoKHN0LnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcgJiYgZnAtPl9zZWVrID09IF9fc3NlZWsgPwotCSAgICBfX1NPUFQgOiBfX1NOUFQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL21rdGVtcC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL21rdGVtcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODc4M2RkLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9ta3RlbXAuYworKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKW1rdGVtcC5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotCi1jaGFyICpfbWt0ZW1wKGNoYXIgKik7Ci0KLXN0YXRpYyBpbnQgX2dldHRlbXAoY2hhciAqLCBpbnQgKiwgaW50LCBpbnQpOwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYWRjaGFyW10gPQotIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKLQotaW50Ci1ta3N0ZW1wcyhjaGFyICpwYXRoLCBpbnQgc2xlbikKLXsKLQlpbnQgZmQ7Ci0KLQlyZXR1cm4gKF9nZXR0ZW1wKHBhdGgsICZmZCwgMCwgc2xlbikgPyBmZCA6IC0xKTsKLX0KLQotaW50Ci1ta3N0ZW1wKGNoYXIgKnBhdGgpCi17Ci0JaW50IGZkOwotCi0JcmV0dXJuIChfZ2V0dGVtcChwYXRoLCAmZmQsIDAsIDApID8gZmQgOiAtMSk7Ci19Ci0KLWNoYXIgKgotbWtkdGVtcChjaGFyICpwYXRoKQotewotCXJldHVybiAoX2dldHRlbXAocGF0aCwgKGludCAqKU5VTEwsIDEsIDApID8gcGF0aCA6IChjaGFyICopTlVMTCk7Ci19Ci0KLWNoYXIgKgotX21rdGVtcChjaGFyICpwYXRoKQotewotCXJldHVybiAoX2dldHRlbXAocGF0aCwgKGludCAqKU5VTEwsIDAsIDApID8gcGF0aCA6IChjaGFyICopTlVMTCk7Ci19Ci0KLV9fd2Fybl9yZWZlcmVuY2VzKG1rdGVtcCwKLSAgICAid2FybmluZzogbWt0ZW1wKCkgcG9zc2libHkgdXNlZCB1bnNhZmVseTsgY29uc2lkZXIgdXNpbmcgbWtzdGVtcCgpIik7Ci0KLWNoYXIgKgotbWt0ZW1wKGNoYXIgKnBhdGgpCi17Ci0JcmV0dXJuIChfbWt0ZW1wKHBhdGgpKTsKLX0KLQotc3RhdGljIGludAotX2dldHRlbXAoY2hhciAqcGF0aCwgaW50ICpkb29wZW4sIGludCBkb21rZGlyLCBpbnQgc2xlbikKLXsKLQljaGFyICpzdGFydCwgKnRydiwgKnN1ZmZwLCAqY2FycnlwOwotCWNoYXIgKnBhZDsKLQlzdHJ1Y3Qgc3RhdCBzYnVmOwotCWludCBydmFsOwotCXVpbnQzMl90IHJhbmQ7Ci0JY2hhciBjYXJyeWJ1ZltNQVhQQVRITEVOXTsKLQotCWlmICgoZG9vcGVuICE9IE5VTEwgJiYgZG9ta2RpcikgfHwgc2xlbiA8IDApIHsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JZm9yICh0cnYgPSBwYXRoOyAqdHJ2ICE9ICdcMCc7ICsrdHJ2KQotCQk7Ci0JaWYgKHRydiAtIHBhdGggPj0gTUFYUEFUSExFTikgewotCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JdHJ2IC09IHNsZW47Ci0Jc3VmZnAgPSB0cnY7Ci0JLS10cnY7Ci0JaWYgKHRydiA8IHBhdGggfHwgTlVMTCAhPSBzdHJjaHIoc3VmZnAsICcvJykpIHsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JLyogRmlsbCBzcGFjZSB3aXRoIHJhbmRvbSBjaGFyYWN0ZXJzICovCi0Jd2hpbGUgKHRydiA+PSBwYXRoICYmICp0cnYgPT0gJ1gnKSB7Ci0JCXJhbmQgPSBhcmM0cmFuZG9tX3VuaWZvcm0oc2l6ZW9mKHBhZGNoYXIpIC0gMSk7Ci0JCSp0cnYtLSA9IHBhZGNoYXJbcmFuZF07Ci0JfQotCXN0YXJ0ID0gdHJ2ICsgMTsKLQotCS8qIHNhdmUgZmlyc3QgY29tYmluYXRpb24gb2YgcmFuZG9tIGNoYXJhY3RlcnMgKi8KLQltZW1jcHkoY2FycnlidWYsIHN0YXJ0LCBzdWZmcCAtIHN0YXJ0KTsKLQotCS8qCi0JICogY2hlY2sgdGhlIHRhcmdldCBkaXJlY3RvcnkuCi0JICovCi0JaWYgKGRvb3BlbiAhPSBOVUxMIHx8IGRvbWtkaXIpIHsKLQkJZm9yICg7IHRydiA+IHBhdGg7IC0tdHJ2KSB7Ci0JCQlpZiAoKnRydiA9PSAnLycpIHsKLQkJCQkqdHJ2ID0gJ1wwJzsKLQkJCQlydmFsID0gc3RhdChwYXRoLCAmc2J1Zik7Ci0JCQkJKnRydiA9ICcvJzsKLQkJCQlpZiAocnZhbCAhPSAwKQotCQkJCQlyZXR1cm4gKDApOwotCQkJCWlmICghU19JU0RJUihzYnVmLnN0X21vZGUpKSB7Ci0JCQkJCWVycm5vID0gRU5PVERJUjsKLQkJCQkJcmV0dXJuICgwKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlmb3IgKDs7KSB7Ci0JCWlmIChkb29wZW4pIHsKLQkJCWlmICgoKmRvb3BlbiA9Ci0JCQkgICAgX29wZW4ocGF0aCwgT19DUkVBVHxPX0VYQ0x8T19SRFdSLCAwNjAwKSkgPj0gMCkKLQkJCQlyZXR1cm4gKDEpOwotCQkJaWYgKGVycm5vICE9IEVFWElTVCkKLQkJCQlyZXR1cm4gKDApOwotCQl9IGVsc2UgaWYgKGRvbWtkaXIpIHsKLQkJCWlmIChta2RpcihwYXRoLCAwNzAwKSA9PSAwKQotCQkJCXJldHVybiAoMSk7Ci0JCQlpZiAoZXJybm8gIT0gRUVYSVNUKQotCQkJCXJldHVybiAoMCk7Ci0JCX0gZWxzZSBpZiAobHN0YXQocGF0aCwgJnNidWYpKQotCQkJcmV0dXJuIChlcnJubyA9PSBFTk9FTlQpOwotCi0JCS8qIElmIHdlIGhhdmUgYSBjb2xsaXNpb24sIGN5Y2xlIHRocm91Z2ggdGhlIHNwYWNlIG9mIGZpbGVuYW1lcyAqLwotCQlmb3IgKHRydiA9IHN0YXJ0LCBjYXJyeXAgPSBjYXJyeWJ1Zjs7KSB7Ci0JCQkvKiBoYXZlIHdlIHRyaWVkIGFsbCBwb3NzaWJsZSBwZXJtdXRhdGlvbnM/ICovCi0JCQlpZiAodHJ2ID09IHN1ZmZwKQotCQkJCXJldHVybiAoMCk7IC8qIHllcyAtIGV4aXQgd2l0aCBFRVhJU1QgKi8KLQkJCXBhZCA9IHN0cmNocihwYWRjaGFyLCAqdHJ2KTsKLQkJCWlmIChwYWQgPT0gTlVMTCkgewotCQkJCS8qIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQkJCWVycm5vID0gRUlPOwotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCQkvKiBpbmNyZW1lbnQgY2hhcmFjdGVyICovCi0JCQkqdHJ2ID0gKCorK3BhZCA9PSAnXDAnKSA/IHBhZGNoYXJbMF0gOiAqcGFkOwotCQkJLyogY2FycnkgdG8gbmV4dCBwb3NpdGlvbj8gKi8KLQkJCWlmICgqdHJ2ID09ICpjYXJyeXApIHsKLQkJCQkvKiBpbmNyZW1lbnQgcG9zaXRpb24gYW5kIGxvb3AgKi8KLQkJCQkrK3RydjsKLQkJCQkrK2NhcnJ5cDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogdHJ5IHdpdGggbmV3IG5hbWUgKi8KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQkvKk5PVFJFQUNIRUQqLwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGMuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhZmZlY2UuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGMuYworKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXB1dGMuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAibG9jYWwuaCIKLSNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKLQotI3VuZGVmIHB1dGMKLSN1bmRlZiBwdXRjX3VubG9ja2VkCi0KLWludAotcHV0YyhpbnQgYywgRklMRSAqZnApCi17Ci0JaW50IHJldHZhbDsKLQlGTE9DS0ZJTEUoZnApOwotCS8qIE9yaWVudGF0aW9uIHNldCBieSBfX3NwdXRjKCkgd2hlbiBidWZmZXIgaXMgZnVsbC4gKi8KLQkvKiBPUklFTlQoZnAsIC0xKTsgKi8KLQlyZXR2YWwgPSBfX3NwdXRjKGMsIGZwKTsKLQlGVU5MT0NLRklMRShmcCk7Ci0JcmV0dXJuIChyZXR2YWwpOwotfQotCi1pbnQKLXB1dGNfdW5sb2NrZWQoaW50IGNoLCBGSUxFICpmcCkKLXsKLQotCXJldHVybiAoX19zcHV0YyhjaCwgZnApKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRjaGFyLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0Y2hhci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTYxNTU5Li4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRjaGFyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylwdXRjaGFyLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImxvY2FsLmgiCi0jaW5jbHVkZSAibGliY19wcml2YXRlLmgiCi0KLSN1bmRlZiBwdXRjaGFyCi0jdW5kZWYgcHV0Y2hhcl91bmxvY2tlZAotCi0vKgotICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIHB1dGNoYXIKLSAqLwotaW50Ci1wdXRjaGFyKGludCBjKQotewotCWludCByZXR2YWw7Ci0JRklMRSAqc28gPSBzdGRvdXQ7Ci0KLQlGTE9DS0ZJTEUoc28pOwotCS8qIE9yaWVudGF0aW9uIHNldCBieSBfX3NwdXRjKCkgd2hlbiBidWZmZXIgaXMgZnVsbC4gKi8KLQkvKiBPUklFTlQoc28sIC0xKTsgKi8KLQlyZXR2YWwgPSBfX3NwdXRjKGMsIHNvKTsKLQlGVU5MT0NLRklMRShzbyk7Ci0JcmV0dXJuIChyZXR2YWwpOwotfQotCi1pbnQKLXB1dGNoYXJfdW5sb2NrZWQoaW50IGNoKQotewotCi0JcmV0dXJuIChfX3NwdXRjKGNoLCBzdGRvdXQpKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRzLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWU3ZmMxLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylwdXRzLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgotI2luY2x1ZGUgImZ2d3JpdGUuaCIKLSNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKgotICogV3JpdGUgdGhlIGdpdmVuIHN0cmluZyB0byBzdGRvdXQsIGFwcGVuZGluZyBhIG5ld2xpbmUuCi0gKi8KLWludAotcHV0cyhjaGFyIGNvbnN0ICpzKQotewotCWludCByZXR2YWw7Ci0Jc2l6ZV90IGMgPSBzdHJsZW4ocyk7Ci0Jc3RydWN0IF9fc3VpbyB1aW87Ci0Jc3RydWN0IF9fc2lvdiBpb3ZbMl07Ci0KLQlpb3ZbMF0uaW92X2Jhc2UgPSAodm9pZCAqKXM7Ci0JaW92WzBdLmlvdl9sZW4gPSBjOwotCWlvdlsxXS5pb3ZfYmFzZSA9ICJcbiI7Ci0JaW92WzFdLmlvdl9sZW4gPSAxOwotCXVpby51aW9fcmVzaWQgPSBjICsgMTsKLQl1aW8udWlvX2lvdiA9ICZpb3ZbMF07Ci0JdWlvLnVpb19pb3ZjbnQgPSAyOwotCUZMT0NLRklMRShzdGRvdXQpOwotCU9SSUVOVChzdGRvdXQsIC0xKTsKLQlyZXR2YWwgPSBfX3NmdndyaXRlKHN0ZG91dCwgJnVpbykgPyBFT0YgOiAnXG4nOwotCUZVTkxPQ0tGSUxFKHN0ZG91dCk7Ci0JcmV0dXJuIChyZXR2YWwpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHcuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXR3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNjBjYWYuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHcuYworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXB1dHcuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCi0jaW5jbHVkZSAiZnZ3cml0ZS5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotCi1pbnQKLXB1dHcoaW50IHcsIEZJTEUgKmZwKQotewotCWludCByZXR2YWw7Ci0Jc3RydWN0IF9fc3VpbyB1aW87Ci0Jc3RydWN0IF9fc2lvdiBpb3Y7Ci0KLQlpb3YuaW92X2Jhc2UgPSAmdzsKLQlpb3YuaW92X2xlbiA9IHVpby51aW9fcmVzaWQgPSBzaXplb2Yodyk7Ci0JdWlvLnVpb19pb3YgPSAmaW92OwotCXVpby51aW9faW92Y250ID0gMTsKLQlGTE9DS0ZJTEUoZnApOwotCXJldHZhbCA9IF9fc2Z2d3JpdGUoZnAsICZ1aW8pOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHJldHZhbCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmVtb3ZlLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmVtb3ZlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOTg0YmEuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JlbW92ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVtb3ZlLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLWludAotcmVtb3ZlKGNvbnN0IGNoYXIgKmZpbGUpCi17Ci0Jc3RydWN0IHN0YXQgc2I7Ci0KLQlpZiAobHN0YXQoZmlsZSwgJnNiKSA8IDApCi0JCXJldHVybiAoLTEpOwotCWlmIChTX0lTRElSKHNiLnN0X21vZGUpKQotCQlyZXR1cm4gKHJtZGlyKGZpbGUpKTsKLQlyZXR1cm4gKHVubGluayhmaWxlKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmdldC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JnZXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRjMDMxMS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmdldC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmdldC5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKgotICogSGFuZGxlIGdldGMoKSB3aGVuIHRoZSBidWZmZXIgcmFuIG91dDoKLSAqIFJlZmlsbCwgdGhlbiByZXR1cm4gdGhlIGZpcnN0IGNoYXJhY3RlcgotICogaW4gdGhlIG5ld2x5LWZpbGxlZCBidWZmZXIuCi0gKi8KLWludAotX19zcmdldChGSUxFICpmcCkKLXsKLQlpZiAoX19zcmVmaWxsKGZwKSA9PSAwKSB7Ci0JCWZwLT5fci0tOwotCQlyZXR1cm4gKCpmcC0+X3ArKyk7Ci0JfQotCXJldHVybiAoRU9GKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWYuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM2NWY5Ny4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vc2V0YnVmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzZXRidWYuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotdm9pZAotc2V0YnVmKEZJTEUgKiBfX3Jlc3RyaWN0IGZwLCBjaGFyICogX19yZXN0cmljdCBidWYpCi17Ci0JKHZvaWQpIHNldHZidWYoZnAsIGJ1ZiwgYnVmID8gX0lPRkJGIDogX0lPTkJGLCBCVUZTSVopOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjVlYjNjLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWZmZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXNldGJ1ZmZlci5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotdm9pZAotc2V0YnVmZmVyKEZJTEUgKmZwLCBjaGFyICpidWYsIGludCBzaXplKQotewotCi0JKHZvaWQpc2V0dmJ1ZihmcCwgYnVmLCBidWYgPyBfSU9GQkYgOiBfSU9OQkYsIChzaXplX3Qpc2l6ZSk7Ci19Ci0KLS8qCi0gKiBzZXQgbGluZSBidWZmZXJpbmcKLSAqLwotaW50Ci1zZXRsaW5lYnVmKEZJTEUgKmZwKQotewotCi0JcmV0dXJuIChzZXR2YnVmKGZwLCAoY2hhciAqKU5VTEwsIF9JT0xCRiwgKHNpemVfdCkwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldHZidWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5Njk2MC4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXNldHZidWYuYwk4LjIgKEJlcmtlbGV5KSAxMS8xNi85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKLSNpbmNsdWRlICJsb2NhbC5oIgotI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgotCi0vKgotICogU2V0IG9uZSBvZiB0aGUgdGhyZWUga2luZHMgb2YgYnVmZmVyaW5nLCBvcHRpb25hbGx5IGluY2x1ZGluZwotICogYSBidWZmZXIuCi0gKi8KLWludAotc2V0dmJ1ZihGSUxFICogX19yZXN0cmljdCBmcCwgY2hhciAqIF9fcmVzdHJpY3QgYnVmLCBpbnQgbW9kZSwgc2l6ZV90IHNpemUpCi17Ci0JaW50IHJldCwgZmxhZ3M7Ci0Jc2l6ZV90IGlvc2l6ZTsKLQlpbnQgdHR5ZmxhZzsKLQotCS8qCi0JICogVmVyaWZ5IGFyZ3VtZW50cy4gIFRoZSBgaW50JyBsaW1pdCBvbiBgc2l6ZScgaXMgZHVlIHRvIHRoaXMKLQkgKiBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLiAgTm90ZSwgYnVmIGFuZCBzaXplIGFyZSBpZ25vcmVkCi0JICogd2hlbiBzZXR0aW5nIF9JT05CRi4KLQkgKi8KLQlpZiAobW9kZSAhPSBfSU9OQkYpCi0JCWlmICgobW9kZSAhPSBfSU9GQkYgJiYgbW9kZSAhPSBfSU9MQkYpIHx8IChpbnQpc2l6ZSA8IDApCi0JCQlyZXR1cm4gKEVPRik7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCS8qCi0JICogV3JpdGUgY3VycmVudCBidWZmZXIsIGlmIGFueS4gIERpc2NhcmQgdW5yZWFkIGlucHV0IChpbmNsdWRpbmcKLQkgKiB1bmdldGMgZGF0YSksIGNhbmNlbCBsaW5lIGJ1ZmZlcmluZywgYW5kIGZyZWUgb2xkIGJ1ZmZlciBpZgotCSAqIG1hbGxvYygpZWQuICBXZSBhbHNvIGNsZWFyIGFueSBlb2YgY29uZGl0aW9uLCBhcyBpZiB0aGlzIHdlcmUKLQkgKiBhIHNlZWsuCi0JICovCi0JcmV0ID0gMDsKLQkodm9pZClfX3NmbHVzaChmcCk7Ci0JaWYgKEhBU1VCKGZwKSkKLQkJRlJFRVVCKGZwKTsKLQlmcC0+X3IgPSBmcC0+X2xiZnNpemUgPSAwOwotCWZsYWdzID0gZnAtPl9mbGFnczsKLQlpZiAoZmxhZ3MgJiBfX1NNQkYpCi0JCWZyZWUoKHZvaWQgKilmcC0+X2JmLl9iYXNlKTsKLQlmbGFncyAmPSB+KF9fU0xCRiB8IF9fU05CRiB8IF9fU01CRiB8IF9fU09QVCB8IF9fU09GRiB8IF9fU05QVCB8IF9fU0VPRik7Ci0KLQkvKiBJZiBzZXR0aW5nIHVuYnVmZmVyZWQgbW9kZSwgc2tpcCBhbGwgdGhlIGhhcmQgd29yay4gKi8KLQlpZiAobW9kZSA9PSBfSU9OQkYpCi0JCWdvdG8gbmJmOwotCi0JLyoKLQkgKiBGaW5kIG9wdGltYWwgSS9PIHNpemUgZm9yIHNlZWsgb3B0aW1pemF0aW9uLiAgVGhpcyBhbHNvIHJldHVybnMKLQkgKiBhIGB0dHkgZmxhZycgdG8gc3VnZ2VzdCB0aGF0IHdlIGNoZWNrIGlzYXR0eShmZCksIGJ1dCB3ZSBkbyBub3QKLQkgKiBjYXJlIHNpbmNlIG91ciBjYWxsZXIgdG9sZCB1cyBob3cgdG8gYnVmZmVyLgotCSAqLwotCWZsYWdzIHw9IF9fc3doYXRidWYoZnAsICZpb3NpemUsICZ0dHlmbGFnKTsKLQlpZiAoc2l6ZSA9PSAwKSB7Ci0JCWJ1ZiA9IE5VTEw7CS8qIGZvcmNlIGxvY2FsIGFsbG9jYXRpb24gKi8KLQkJc2l6ZSA9IGlvc2l6ZTsKLQl9Ci0KLQkvKiBBbGxvY2F0ZSBidWZmZXIgaWYgbmVlZGVkLiAqLwotCWlmIChidWYgPT0gTlVMTCkgewotCQlpZiAoKGJ1ZiA9IG1hbGxvYyhzaXplKSkgPT0gTlVMTCkgewotCQkJLyoKLQkJCSAqIFVuYWJsZSB0byBob25vciB1c2VyJ3MgcmVxdWVzdC4gIFdlIHdpbGwgcmV0dXJuCi0JCQkgKiBmYWlsdXJlLCBidXQgdHJ5IGFnYWluIHdpdGggZmlsZSBzeXN0ZW0gc2l6ZS4KLQkJCSAqLwotCQkJcmV0ID0gRU9GOwotCQkJaWYgKHNpemUgIT0gaW9zaXplKSB7Ci0JCQkJc2l6ZSA9IGlvc2l6ZTsKLQkJCQlidWYgPSBtYWxsb2Moc2l6ZSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0JCQkvKiBObyBsdWNrOyBzd2l0Y2ggdG8gdW5idWZmZXJlZCBJL08uICovCi1uYmY6Ci0JCQlmcC0+X2ZsYWdzID0gZmxhZ3MgfCBfX1NOQkY7Ci0JCQlmcC0+X3cgPSAwOwotCQkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKLQkJCWZwLT5fYmYuX3NpemUgPSAxOwotCQkJRlVOTE9DS0ZJTEUoZnApOwotCQkJcmV0dXJuIChyZXQpOwotCQl9Ci0JCWZsYWdzIHw9IF9fU01CRjsKLQl9Ci0KLQkvKgotCSAqIEtpbGwgYW55IHNlZWsgb3B0aW1pemF0aW9uIGlmIHRoZSBidWZmZXIgaXMgbm90IHRoZQotCSAqIHJpZ2h0IHNpemUuCi0JICoKLQkgKiBTSE9VTEQgV0UgQUxMT1cgTVVMVElQTEVTIEhFUkUgKGkuZS4sIG9rIGlmZiAoc2l6ZSAlIGlvc2l6ZSkgPT0gMCk/Ci0JICovCi0JaWYgKHNpemUgIT0gaW9zaXplKQotCQlmbGFncyB8PSBfX1NOUFQ7Ci0KLQkvKgotCSAqIEZpeCB1cCB0aGUgRklMRSBmaWVsZHMsIGFuZCBzZXQgX19jbGVhbnVwIGZvciBvdXRwdXQgZmx1c2ggb24KLQkgKiBleGl0IChzaW5jZSB3ZSBhcmUgYnVmZmVyZWQgaW4gc29tZSB3YXkpLgotCSAqLwotCWlmIChtb2RlID09IF9JT0xCRikKLQkJZmxhZ3MgfD0gX19TTEJGOwotCWZwLT5fZmxhZ3MgPSBmbGFnczsKLQlmcC0+X2JmLl9iYXNlID0gZnAtPl9wID0gKHVuc2lnbmVkIGNoYXIgKilidWY7Ci0JZnAtPl9iZi5fc2l6ZSA9IHNpemU7Ci0JLyogZnAtPl9sYmZzaXplIGlzIHN0aWxsIDAgKi8KLQlpZiAoZmxhZ3MgJiBfX1NXUikgewotCQkvKgotCQkgKiBCZWdpbiBvciBjb250aW51ZSB3cml0aW5nOiBzZWUgX19zd3NldHVwKCkuICBOb3RlCi0JCSAqIHRoYXQgX19TTkJGIGlzIGltcG9zc2libGUgKGl0IHdhcyBoYW5kbGVkIGVhcmxpZXIpLgotCQkgKi8KLQkJaWYgKGZsYWdzICYgX19TTEJGKSB7Ci0JCQlmcC0+X3cgPSAwOwotCQkJZnAtPl9sYmZzaXplID0gLWZwLT5fYmYuX3NpemU7Ci0JCX0gZWxzZQotCQkJZnAtPl93ID0gc2l6ZTsKLQl9IGVsc2UgewotCQkvKiBiZWdpbi9jb250aW51ZSByZWFkaW5nLCBvciBzdGF5IGluIGludGVybWVkaWF0ZSBzdGF0ZSAqLwotCQlmcC0+X3cgPSAwOwotCX0KLQlfX2NsZWFudXAgPSBfY2xlYW51cDsKLQotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdGVtcG5hbS5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3RlbXBuYW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE1NzQ2Zi4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdGVtcG5hbS5jCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIyl0ZW1wbmFtLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8cGF0aHMuaD4KLQotX193YXJuX3JlZmVyZW5jZXModGVtcG5hbSwKLSAgICAid2FybmluZzogdGVtcG5hbSgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOwotCi1leHRlcm4gY2hhciAqX21rdGVtcChjaGFyICopOwotCi1jaGFyICoKLXRlbXBuYW0oY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpwZngpCi17Ci0JaW50IHN2ZXJybm87Ci0JY2hhciAqZiwgKm5hbWU7Ci0KLQlpZiAoIShuYW1lID0gbWFsbG9jKE1BWFBBVEhMRU4pKSkKLQkJcmV0dXJuKE5VTEwpOwotCi0JaWYgKCFwZngpCi0JCXBmeCA9ICJ0bXAuIjsKLQotCWlmIChpc3NldHVnaWQoKSA9PSAwICYmIChmID0gZ2V0ZW52KCJUTVBESVIiKSkpIHsKLQkJKHZvaWQpc25wcmludGYobmFtZSwgTUFYUEFUSExFTiwgIiVzJXMlc1hYWFhYWCIsIGYsCi0JCSAgICAqKGYgKyBzdHJsZW4oZikgLSAxKSA9PSAnLyc/ICIiOiAiLyIsIHBmeCk7Ci0JCWlmICgoZiA9IF9ta3RlbXAobmFtZSkpKQotCQkJcmV0dXJuKGYpOwotCX0KLQotCWlmICgoZiA9IChjaGFyICopZGlyKSkgewotCQkodm9pZClzbnByaW50ZihuYW1lLCBNQVhQQVRITEVOLCAiJXMlcyVzWFhYWFhYIiwgZiwKLQkJICAgICooZiArIHN0cmxlbihmKSAtIDEpID09ICcvJz8gIiI6ICIvIiwgcGZ4KTsKLQkJaWYgKChmID0gX21rdGVtcChuYW1lKSkpCi0JCQlyZXR1cm4oZik7Ci0JfQotCi0JZiA9IFBfdG1wZGlyOwotCSh2b2lkKXNucHJpbnRmKG5hbWUsIE1BWFBBVEhMRU4sICIlcyVzWFhYWFhYIiwgZiwgcGZ4KTsKLQlpZiAoKGYgPSBfbWt0ZW1wKG5hbWUpKSkKLQkJcmV0dXJuKGYpOwotCi0JZiA9IF9QQVRIX1RNUDsKLQkodm9pZClzbnByaW50ZihuYW1lLCBNQVhQQVRITEVOLCAiJXMlc1hYWFhYWCIsIGYsIHBmeCk7Ci0JaWYgKChmID0gX21rdGVtcChuYW1lKSkpCi0JCXJldHVybihmKTsKLQotCXN2ZXJybm8gPSBlcnJubzsKLQlmcmVlKG5hbWUpOwotCWVycm5vID0gc3ZlcnJubzsKLQlyZXR1cm4oTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdG1wbmFtLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdG1wbmFtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMzJkY2MuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3RtcG5hbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMsIDE5OTQKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpdG1wbmFtLmMJOC4zIChCZXJrZWxleSkgMy8yOC85NCI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1fX3dhcm5fcmVmZXJlbmNlcyh0bXBuYW0sCi0gICAgIndhcm5pbmc6IHRtcG5hbSgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOwotCi1leHRlcm4gY2hhciAqX21rdGVtcChjaGFyICopOwotCi1jaGFyICoKLXRtcG5hbShjaGFyICpzKQotewotCXN0YXRpYyB1X2xvbmcgdG1wY291bnQ7Ci0Jc3RhdGljIGNoYXIgYnVmW0xfdG1wbmFtXTsKLQotCWlmIChzID09IE5VTEwpCi0JCXMgPSBidWY7Ci0JKHZvaWQpc25wcmludGYocywgTF90bXBuYW0sICIlc3RtcC4lbHUuWFhYWFhYIiwgUF90bXBkaXIsIHRtcGNvdW50KTsKLQkrK3RtcGNvdW50OwotCXJldHVybiAoX21rdGVtcChzKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vd3NldHVwLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vd3NldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZjgyNDcuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3dzZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpd3NldHVwLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotLyoKLSAqIFZhcmlvdXMgb3V0cHV0IHJvdXRpbmVzIGNhbGwgd3NldHVwIHRvIGJlIHN1cmUgaXQgaXMgc2FmZSB0byB3cml0ZSwKLSAqIGJlY2F1c2UgZWl0aGVyIF9mbGFncyBkb2VzIG5vdCBpbmNsdWRlIF9fU1dSLCBvciBfYnVmIGlzIE5VTEwuCi0gKiBfd3NldHVwIHJldHVybnMgMCBpZiBPSyB0byB3cml0ZTsgb3RoZXJ3aXNlLCBpdCByZXR1cm5zIEVPRiBhbmQgc2V0cyBlcnJuby4KLSAqLwotaW50Ci1fX3N3c2V0dXAoRklMRSAqZnApCi17Ci0JLyogbWFrZSBzdXJlIHN0ZGlvIGlzIHNldCB1cCAqLwotCWlmICghX19zZGlkaW5pdCkKLQkJX19zaW5pdCgpOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgbm90IHdyaXRpbmcsIHdlIGhhZCBiZXR0ZXIgYmUgcmVhZGluZyBhbmQgd3JpdGluZy4KLQkgKi8KLQlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NXUikgPT0gMCkgewotCQlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSVykgPT0gMCkgewotCQkJZXJybm8gPSBFQkFERjsKLQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOwotCQkJcmV0dXJuIChFT0YpOwotCQl9Ci0JCWlmIChmcC0+X2ZsYWdzICYgX19TUkQpIHsKLQkJCS8qIGNsb2JiZXIgYW55IHVuZ2V0YyBkYXRhICovCi0JCQlpZiAoSEFTVUIoZnApKQotCQkJCUZSRUVVQihmcCk7Ci0JCQlmcC0+X2ZsYWdzICY9IH4oX19TUkR8X19TRU9GKTsKLQkJCWZwLT5fciA9IDA7Ci0JCQlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOwotCQl9Ci0JCWZwLT5fZmxhZ3MgfD0gX19TV1I7Ci0JfQotCi0JLyoKLQkgKiBNYWtlIGEgYnVmZmVyIGlmIG5lY2Vzc2FyeSwgdGhlbiBzZXQgX3cuCi0JICovCi0JaWYgKGZwLT5fYmYuX2Jhc2UgPT0gTlVMTCkKLQkJX19zbWFrZWJ1ZihmcCk7Ci0JaWYgKGZwLT5fZmxhZ3MgJiBfX1NMQkYpIHsKLQkJLyoKLQkJICogSXQgaXMgbGluZSBidWZmZXJlZCwgc28gbWFrZSBfbGJmc2l6ZSBiZSAtX2J1ZnNpemUKLQkJICogZm9yIHRoZSBwdXRjKCkgbWFjcm8uICBXZSB3aWxsIGNoYW5nZSBfbGJmc2l6ZSBiYWNrCi0JCSAqIHRvIDAgd2hlbmV2ZXIgd2UgdHVybiBvZmYgX19TV1IuCi0JCSAqLwotCQlmcC0+X3cgPSAwOwotCQlmcC0+X2xiZnNpemUgPSAtZnAtPl9iZi5fc2l6ZTsKLQl9IGVsc2UKLQkJZnAtPl93ID0gZnAtPl9mbGFncyAmIF9fU05CRiA/IDAgOiBmcC0+X2JmLl9zaXplOwotCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL3F1aWNrX2V4aXQuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvcXVpY2tfZXhpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmOGNkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL3F1aWNrX2V4aXQuYwpAQCAtMCwwICsxLDgwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBEYXZpZCBDaGlzbmFsbAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisvKioKKyAqIExpbmtlZCBsaXN0IG9mIHF1aWNrIGV4aXQgaGFuZGxlcnMuICBUaGlzIGlzIHNpbXBsZXIgdGhhbiB0aGUgYXRleGl0KCkKKyAqIHZlcnNpb24sIGJlY2F1c2UgaXQgaXMgbm90IHJlcXVpcmVkIHRvIHN1cHBvcnQgQysrIGRlc3RydWN0b3JzIG9yCisgKiBEU08tc3BlY2lmaWMgY2xlYW51cHMuCisgKi8KK3N0cnVjdCBxdWlja19leGl0X2hhbmRsZXIgeworCXN0cnVjdCBxdWlja19leGl0X2hhbmRsZXIgKm5leHQ7CisJdm9pZCAoKmNsZWFudXApKHZvaWQpOworfTsKKworLyoqCisgKiBMb2NrIHByb3RlY3RpbmcgdGhlIGhhbmRsZXJzIGxpc3QuCisgKi8KK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgYXRleGl0X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKy8qKgorICogU3RhY2sgb2YgY2xlYW51cCBoYW5kbGVycy4gIFRoZXNlIHdpbGwgYmUgaW52b2tlZCBpbiByZXZlcnNlIG9yZGVyIHdoZW4gCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcXVpY2tfZXhpdF9oYW5kbGVyICpoYW5kbGVyczsKKworaW50CithdF9xdWlja19leGl0KHZvaWQgKCpmdW5jKSh2b2lkKSkKK3sKKwlzdHJ1Y3QgcXVpY2tfZXhpdF9oYW5kbGVyICpoOworCQorCWggPSBtYWxsb2Moc2l6ZW9mKCpoKSk7CisKKwlpZiAoTlVMTCA9PSBoKQorCQlyZXR1cm4gKDEpOworCWgtPmNsZWFudXAgPSBmdW5jOworCXB0aHJlYWRfbXV0ZXhfbG9jaygmYXRleGl0X211dGV4KTsKKwloLT5uZXh0ID0gaGFuZGxlcnM7CisJaGFuZGxlcnMgPSBoOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhdGV4aXRfbXV0ZXgpOworCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3F1aWNrX2V4aXQoaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgcXVpY2tfZXhpdF9oYW5kbGVyICpoOworCisJLyoKKwkgKiBYWFg6IFRoZSBDKysgc3BlYyByZXF1aXJlcyB1cyB0byBjYWxsIHN0ZDo6dGVybWluYXRlIGlmIHRoZXJlIGlzIGFuCisJICogZXhjZXB0aW9uIGhlcmUuCisJICovCisJZm9yIChoID0gaGFuZGxlcnM7IE5VTEwgIT0gaDsgaCA9IGgtPm5leHQpCisJCWgtPmNsZWFudXAoKTsKKwlfRXhpdChzdGF0dXMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsY3B5LmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xjcHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwNGEwNi4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xjcHkuYworKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCi0gKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7Ci0gKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKLSAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0gKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCi0gKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKglmcm9tIE9wZW5CU0Q6IHN0cmxjcHkuYyx2IDEuNCAxOTk5LzA1LzAxIDE4OjU2OjQxIG1pbGxlcnQgRXhwCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIDAKLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IHdjc2xjcHkuYyx2IDEuMSAyMDAwLzEyLzIzIDIzOjE0OjM2IGl0b2p1biBFeHAgJCIpOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNlbmRpZgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8d2NoYXIuaD4KLQotLyoKLSAqIENvcHkgc3JjIHRvIHN0cmluZyBkc3Qgb2Ygc2l6ZSBzaXouICBBdCBtb3N0IHNpei0xIGNoYXJhY3RlcnMKLSAqIHdpbGwgYmUgY29waWVkLiAgQWx3YXlzIE5VTCB0ZXJtaW5hdGVzICh1bmxlc3Mgc2l6ID09IDApLgotICogUmV0dXJucyB3Y3NsZW4oc3JjKTsgaWYgcmV0dmFsID49IHNpeiwgdHJ1bmNhdGlvbiBvY2N1cnJlZC4KLSAqLwotc2l6ZV90Ci13Y3NsY3B5KHdjaGFyX3QgKmRzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3Qgc2l6KQotewotCXdjaGFyX3QgKmQgPSBkc3Q7Ci0JY29uc3Qgd2NoYXJfdCAqcyA9IHNyYzsKLQlzaXplX3QgbiA9IHNpejsKLQotCS8qIENvcHkgYXMgbWFueSBieXRlcyBhcyB3aWxsIGZpdCAqLwotCWlmIChuICE9IDAgJiYgLS1uICE9IDApIHsKLQkJZG8gewotCQkJaWYgKCgqZCsrID0gKnMrKykgPT0gMCkKLQkJCQlicmVhazsKLQkJfSB3aGlsZSAoLS1uICE9IDApOwotCX0KLQotCS8qIE5vdCBlbm91Z2ggcm9vbSBpbiBkc3QsIGFkZCBOVUwgYW5kIHRyYXZlcnNlIHJlc3Qgb2Ygc3JjICovCi0JaWYgKG4gPT0gMCkgewotCQlpZiAoc2l6ICE9IDApCi0JCQkqZCA9ICdcMCc7CQkvKiBOVUwtdGVybWluYXRlIGRzdCAqLwotCQl3aGlsZSAoKnMrKykKLQkJCTsKLQl9Ci0KLQlyZXR1cm4ocyAtIHNyYyAtIDEpOwkvKiBjb3VudCBkb2VzIG5vdCBpbmNsdWRlIE5VTCAqLwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzdHIuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2Nzc3RyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNTk4YTYuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzdHIuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIDAKLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzdHJzdHIuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVkZSA8d2NoYXIuaD4KLQotLyoKLSAqIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgZmluZCBpbiBzLgotICovCi13Y2hhcl90ICoKLXdjc3N0cihjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBzLCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmaW5kKQotewotCXdjaGFyX3QgYywgc2M7Ci0Jc2l6ZV90IGxlbjsKLQotCWlmICgoYyA9ICpmaW5kKyspICE9IEwnXDAnKSB7Ci0JCWxlbiA9IHdjc2xlbihmaW5kKTsKLQkJZG8gewotCQkJZG8gewotCQkJCWlmICgoc2MgPSAqcysrKSA9PSBMJ1wwJykKLQkJCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0gd2hpbGUgKHNjICE9IGMpOwotCQl9IHdoaWxlICh3Y3NuY21wKHMsIGZpbmQsIGxlbikgIT0gMCk7Ci0JCXMtLTsKLQl9Ci0JcmV0dXJuICgod2NoYXJfdCAqKXMpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYmNfcHJpdmF0ZS5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYmNfcHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2RiYjdlLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWJjX3ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIF9CSU9OSUNfRlJFRUJTRF9MSUJDX1BSSVZBVEVfSF9pbmNsdWRlZAotI2RlZmluZSBfQklPTklDX0ZSRUVCU0RfTElCQ19QUklWQVRFX0hfaW5jbHVkZWQKLQotI2RlZmluZSBGTE9DS0ZJTEUoZnApICAgZG8geyBpZiAoX19pc3RocmVhZGVkKSBmbG9ja2ZpbGUoZnApOyB9IHdoaWxlICgwKQotI2RlZmluZSBGVU5MT0NLRklMRShmcCkgZG8geyBpZiAoX19pc3RocmVhZGVkKSBmdW5sb2NrZmlsZShmcCk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU1RESU9fVEhSRUFEX0xPQ0soKSAgIC8qIFRPRE86IHVudGlsIHdlIGhhdmUgdGhlIEZyZWVCU0QgZmluZGZwLmMsIHRoaXMgaXMgdXNlbGVzcy4gKi8KLSNkZWZpbmUgU1RESU9fVEhSRUFEX1VOTE9DSygpIC8qIFRPRE86IHVudGlsIHdlIGhhdmUgdGhlIEZyZWVCU0QgZmluZGZwLmMsIHRoaXMgaXMgdXNlbGVzcy4gKi8KLQotI2RlZmluZSBPUklFTlQoZnAsIG8pIC8qIE9ubHkgbmVlZGVkIGZvciB3aWRlLWNoYXJhY3RlciBzdHJlYW0gc3VwcG9ydC4gKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbmFtZXNwYWNlLmggYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbmFtZXNwYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ODBiNTcuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL25hbWVzcGFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgX0JJT05JQ19GUkVFQlNEX05BTUVTUEFDRV9IX2luY2x1ZGVkCi0jZGVmaW5lIF9CSU9OSUNfRlJFRUJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAotCi1fX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpIGNoYXIqIF9ta3RlbXAoY2hhciopOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL1JFQURNRS50eHQgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9SRUFETUUudHh0CmluZGV4IDg2YWY2ZWIuLmUyZDE0NmUgMTAwNjQ0Ci0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL1JFQURNRS50eHQKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvUkVBRE1FLnR4dApAQCAtMiw4ICsyLDQgQEAKIGZpbGVzIGRpcmVjdGx5LiBNYWtlIGZpeGVzIHVwc3RyZWFtIGFuZCB0aGVuIHB1bGwgZG93biB0aGUgbmV3IHZlcnNpb24gb2YKIHRoZSBmaWxlLgogCi1Ob3RlIHRoYXQgY29kZSBpbiB0aGUgb3RoZXIgJ25ldGJzZCcgZGlyZWN0b3J5IGNvbnRhaW5zIEFuZHJvaWQgbW9kaWZpY2F0aW9ucy4KLVdlIHNob3VsZCB3b3JrIHRvd2FyZHMgZ2V0dGluZyBhcyBtYW55IG9mIHRob3NlIGNoYW5nZXMgYXMgcG9zc2libGUgdXBzdHJlYW0KLWFuZCB0aGVuIGxvc2luZyB0aG9zZSBmaWxlcyBpbiBmYXZvciBvZiBwdXJlIHVwc3RyZWFtIGNvcGllcyBoZXJlIGluc3RlYWQuCi0KIFRPRE86IHdyaXRlIGEgc2NyaXB0IHRvIG1ha2UgdGhpcyBwcm9jZXNzIGF1dG9tYXRlZC4KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2Vudi5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL2Vudi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9lbnYuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL2Vudi5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9leHRlcm4uaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9leHRlcm4uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvZXh0ZXJuLmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9leHRlcm4uaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvZmRfc2V0c2l6ZS5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL2ZkX3NldHNpemUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvZmRfc2V0c2l6ZS5oCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvZmRfc2V0c2l6ZS5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvbmFtZXNwYWNlLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvbmFtZXNwYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmNTQzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9uYW1lc3BhY2UuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX05FVEJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX05FVEJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAorCisvLyBOZXRCU0QgdXNlcyBfX3dlYWtfYWxpYXMgb24gYSBsb3Qgb2YgZnVuY3Rpb25zLiBXZSBkb24ndCB3YW50IHRoYXQuCisjaWYgZGVmaW5lZChfX3dlYWtfYWxpYXMpCisjdW5kZWYgX193ZWFrX2FsaWFzCisjZW5kaWYKKworX19MSUJDX0hJRERFTl9fIGludCBfX3Jlc19lbmFibGVfbXQodm9pZCk7CitfX0xJQkNfSElEREVOX18gaW50IF9fcmVzX2Rpc2FibGVfbXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL25ldGJzZC1jb21wYXQuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9uZXRic2QtY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxZTkwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9uZXRic2QtY29tcGF0LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19ORVRCU0RfQ09NUEFUX0hfaW5jbHVkZWQKKyNkZWZpbmUgX0JJT05JQ19ORVRCU0RfQ09NUEFUX0hfaW5jbHVkZWQKKworLy8gTmV0QlNEIHVzZXMgX0RJQUdBU1NFUlQgdG8gbnVsbC1jaGVjayBhcmd1bWVudHMgYW5kIHRoZSBsaWtlLgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2RlZmluZSBfRElBR0FTU0VSVChlKSAoKGUpID8gKHZvaWQpIDAgOiBfX2Fzc2VydDIoX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgI2UpKQorCisvLyBUT0RPOiB1cGRhdGUgb3VyIDxzeXMvY2RlZnMuaD4gdG8gc3VwcG9ydCB0aGlzIHByb3Blcmx5LgorI2RlZmluZSBfX3R5cGVfZml0KHQsIGEpICgwID09IDApCisKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX19VU0VfQlNECisKKy8vIFRPRE86IHdlIGRvbid0IHlldCBoYXZlIHRocmVhZC1zYWZlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyNkZWZpbmUgX19yZWFkbG9ja2VudigpIDAKKyNkZWZpbmUgX191bmxvY2tlbnYoKSAwCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KK19fTElCQ19ISURERU5fXyBpbnQgcmVhbGxvY2Fycih2b2lkKiwgc2l6ZV90LCBzaXplX3QpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL3BvcnRfYWZ0ZXIuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9wb3J0X2FmdGVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL3BvcnRfYWZ0ZXIuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL3BvcnRfYWZ0ZXIuaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL3BvcnRfYmVmb3JlLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvcG9ydF9iZWZvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmE5NDg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL3BvcnRfYmVmb3JlLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19ORVRCU0RfUE9SVF9CRUZPUkVfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX05FVEJTRF9QT1JUX0JFRk9SRV9IX2luY2x1ZGVkCisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisKKyNkZWZpbmUgSVNDX0ZPUk1BVF9QUklOVEYoYSxiKSBfX3ByaW50Zmxpa2UoYSxiKQorI2RlZmluZSBJU0NfU09DS0xFTl9UIHNvY2tsZW5fdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9yYW5kNDguaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9yYW5kNDguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjc5OTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL3JhbmQ0OC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCSROZXRCU0Q6IHJhbmQ0OC5oLHYgMS42IDIwMTEvMDUvMTggMTk6MzY6MzYgZHNsIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaWZuZGVmIF9SQU5ENDhfSF8KKyNkZWZpbmUgX1JBTkQ0OF9IXworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19fTElCQ19ISURERU5fXyB2b2lkCQlfX2RvcmFuZDQ4KHVuc2lnbmVkIHNob3J0WzNdKTsKK19fTElCQ19ISURERU5fXyB1bnNpZ25lZCBzaG9ydAlfX3JhbmQ0OF9zZWVkWzNdOworX19MSUJDX0hJRERFTl9fIHVuc2lnbmVkIHNob3J0CV9fcmFuZDQ4X211bHRbM107CitfX0xJQkNfSElEREVOX18gdW5zaWduZWQgc2hvcnQJX19yYW5kNDhfYWRkOworCisjZGVmaW5lCVJBTkQ0OF9TRUVEXzAJKDB4MzMwZSkKKyNkZWZpbmUJUkFORDQ4X1NFRURfMQkoMHhhYmNkKQorI2RlZmluZQlSQU5ENDhfU0VFRF8yCSgweDEyMzQpCisjZGVmaW5lCVJBTkQ0OF9NVUxUXzAJKDB4ZTY2ZCkKKyNkZWZpbmUJUkFORDQ4X01VTFRfMQkoMHhkZWVjKQorI2RlZmluZQlSQU5ENDhfTVVMVF8yCSgweDAwMDUpCisjZGVmaW5lCVJBTkQ0OF9BREQJKDB4MDAwYikKKworI2VuZGlmIC8qIF9SQU5ENDhfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9yZWVudHJhbnQuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9yZWVudHJhbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2E4ZmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvYW5kcm9pZC9pbmNsdWRlL3JlZW50cmFudC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9CSU9OSUNfTkVUQlNEX1JFRU5UUkFOVF9IX2luY2x1ZGVkCisjZGVmaW5lIF9CSU9OSUNfTkVUQlNEX1JFRU5UUkFOVF9IX2luY2x1ZGVkCisKKyNkZWZpbmUgX1JFRU5UUkFOVAorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisvLworLy8gTWFwIE5ldEJTRCBsaWJjIGludGVybmFsIGxvY2tpbmcgdG8gcHRocmVhZCBsb2NraW5nLgorLy8KKworI2RlZmluZSBNVVRFWF9JTklUSUFMSVpFUiBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSCisjZGVmaW5lIG11dGV4X3QgcHRocmVhZF9tdXRleF90CisjZGVmaW5lIG11dGV4X2xvY2soeCkgcHRocmVhZF9tdXRleF9sb2NrKHgpCisjZGVmaW5lIG11dGV4X3VubG9jayh4KSBwdGhyZWFkX211dGV4X3VubG9jayh4KQorCisjZGVmaW5lIFJXTE9DS19JTklUSUFMSVpFUiBQVEhSRUFEX1JXTE9DS19JTklUSUFMSVpFUgorI2RlZmluZSByd2xvY2tfdCBwdGhyZWFkX3J3bG9ja190CisjZGVmaW5lIHJ3bG9ja19yZGxvY2sgcHRocmVhZF9yd2xvY2tfcmRsb2NrCisjZGVmaW5lIHJ3bG9ja191bmxvY2sgcHRocmVhZF9yd2xvY2tfdW5sb2NrCisjZGVmaW5lIHJ3bG9ja193cmxvY2sgcHRocmVhZF9yd2xvY2tfd3Jsb2NrCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zaGExLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9hbmRyb2lkL2luY2x1ZGUvc3lzL3NoYTEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9pbmNsdWRlL3N5cy9zaGExLmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2FuZHJvaWQvaW5jbHVkZS9zeXMvc2hhMS5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9jb21tb24vbGliL2xpYmMvaW5ldC9pbmV0X2FkZHIuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9pbmV0L2luZXRfYWRkci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzYwY2U5Li4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9pbmV0L2luZXRfYWRkci5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qCSROZXRCU0Q6IGluZXRfYWRkci5jLHYgMS4zIDIwMTIvMDMvMDkgMTU6NDE6MTYgY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MCwgMTk5MwotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KLSAqIAotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAotICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKLSAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAotICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KLSAqIAotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKLSAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAotICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi0gKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUwotICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2lmICFkZWZpbmVkKF9LRVJORUwpICYmICFkZWZpbmVkKF9TVEFOREFMT05FKQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjb25zdCBjaGFyIHNjY3NpZFtdID0gIkAoIylpbmV0X2FkZHIuYwk4LjEgKEJlcmtlbGV5KSA2LzE3LzkzIjsKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IGluZXRfYWRkci5jLHYgMS4yLjIwNi4yIDIwMDQvMDMvMTcgMDA6Mjk6NDUgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBpbmV0X2FkZHIuYyx2IDEuMyAyMDEyLzAzLzA5IDE1OjQxOjE2IGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLSNpbmNsdWRlICJwb3J0X2JlZm9yZS5oIgotCi0jaW5jbHVkZSAibmFtZXNwYWNlLmgiCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0KLSNpbmNsdWRlIDxjdHlwZS5oPgotCi0jaW5jbHVkZSAicG9ydF9hZnRlci5oIgotCi0jaWZkZWYgX193ZWFrX2FsaWFzCi1fX3dlYWtfYWxpYXMoaW5ldF9hdG9uLF9pbmV0X2F0b24pCi0jZW5kaWYKLSNlbHNlCi0jaW5jbHVkZSA8bGliL2xpYmtlcm4vbGlia2Vybi5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCi0vKgotICogQXNjaWkgaW50ZXJuZXQgYWRkcmVzcyBpbnRlcnByZXRhdGlvbiByb3V0aW5lLgotICogVGhlIHZhbHVlIHJldHVybmVkIGlzIGluIG5ldHdvcmsgb3JkZXIuCi0gKi8KLXVpbnQzMl90Ci1pbmV0X2FkZHIoY29uc3QgY2hhciAqY3ApIHsKLQlzdHJ1Y3QgaW5fYWRkciB2YWw7Ci0KLQlpZiAoaW5ldF9hdG9uKGNwLCAmdmFsKSkKLQkJcmV0dXJuICh2YWwuc19hZGRyKTsKLQlyZXR1cm4gKElOQUREUl9OT05FKTsKLX0KLQotLyogCi0gKiBDaGVjayB3aGV0aGVyICJjcCIgaXMgYSB2YWxpZCBhc2NpaSByZXByZXNlbnRhdGlvbgotICogb2YgYW4gSW50ZXJuZXQgYWRkcmVzcyBhbmQgY29udmVydCB0byBhIGJpbmFyeSBhZGRyZXNzLgotICogUmV0dXJucyAxIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkLCAwIGlmIG5vdC4KLSAqIFRoaXMgcmVwbGFjZXMgaW5ldF9hZGRyLCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gd2hpY2gKLSAqIGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGZhaWx1cmUgYW5kIGEgbG9jYWwgYnJvYWRjYXN0IGFkZHJlc3MuCi0gKi8KLWludAotaW5ldF9hdG9uKGNvbnN0IGNoYXIgKmNwLCBzdHJ1Y3QgaW5fYWRkciAqYWRkcikgewotCXVpbnQzMl90IHZhbDsKLQlpbnQgYmFzZTsKLQlzaXplX3QgbjsKLQljaGFyIGM7Ci0JdWludDhfdCBwYXJ0c1s0XTsKLQl1aW50OF90ICpwcCA9IHBhcnRzOwotCWludCBkaWdpdDsKLQotCWMgPSAqY3A7Ci0JZm9yICg7OykgewotCQkvKgotCQkgKiBDb2xsZWN0IG51bWJlciB1cCB0byBgYC4nJy4KLQkJICogVmFsdWVzIGFyZSBzcGVjaWZpZWQgYXMgZm9yIEM6Ci0JCSAqIDB4PWhleCwgMD1vY3RhbCwgaXNkaWdpdD1kZWNpbWFsLgotCQkgKi8KLQkJaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKWMpKQotCQkJcmV0dXJuICgwKTsKLQkJdmFsID0gMDsgYmFzZSA9IDEwOyBkaWdpdCA9IDA7Ci0JCWlmIChjID09ICcwJykgewotCQkJYyA9ICorK2NwOwotCQkJaWYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnKQotCQkJCWJhc2UgPSAxNiwgYyA9ICorK2NwOwotCQkJZWxzZSB7Ci0JCQkJYmFzZSA9IDg7Ci0JCQkJZGlnaXQgPSAxIDsKLQkJCX0KLQkJfQotCQlmb3IgKDs7KSB7Ci0JCQlpZiAoaXNhc2NpaShjKSAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKWMpKSB7Ci0JCQkJaWYgKGJhc2UgPT0gOCAmJiAoYyA9PSAnOCcgfHwgYyA9PSAnOScpKQotCQkJCQlyZXR1cm4gKDApOwotCQkJCXZhbCA9ICh2YWwgKiBiYXNlKSArIChjIC0gJzAnKTsKLQkJCQljID0gKisrY3A7Ci0JCQkJZGlnaXQgPSAxOwotCQkJfSBlbHNlIGlmIChiYXNlID09IDE2ICYmIGlzYXNjaWkoYykgJiYgCi0JCQkJICAgaXN4ZGlnaXQoKHVuc2lnbmVkIGNoYXIpYykpIHsKLQkJCQl2YWwgPSAodmFsIDw8IDQpIHwKLQkJCQkJKGMgKyAxMCAtIChpc2xvd2VyKCh1bnNpZ25lZCBjaGFyKWMpID8gJ2EnIDogJ0EnKSk7Ci0JCQkJYyA9ICorK2NwOwotCQkJCWRpZ2l0ID0gMTsKLQkJCX0gZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChjID09ICcuJykgewotCQkJLyoKLQkJCSAqIEludGVybmV0IGZvcm1hdDoKLQkJCSAqCWEuYi5jLmQKLQkJCSAqCWEuYi5jCSh3aXRoIGMgdHJlYXRlZCBhcyAxNiBiaXRzKQotCQkJICoJYS5iCSh3aXRoIGIgdHJlYXRlZCBhcyAyNCBiaXRzKQotCQkJICovCi0JCQlpZiAocHAgPj0gcGFydHMgKyAzIHx8IHZhbCA+IDB4ZmZVKQotCQkJCXJldHVybiAoMCk7Ci0JCQkqcHArKyA9IHZhbDsKLQkJCWMgPSAqKytjcDsKLQkJfSBlbHNlCi0JCQlicmVhazsKLQl9Ci0JLyoKLQkgKiBDaGVjayBmb3IgdHJhaWxpbmcgY2hhcmFjdGVycy4KLQkgKi8KLQlpZiAoYyAhPSAnXDAnICYmICghaXNhc2NpaShjKSB8fCAhaXNzcGFjZSgodW5zaWduZWQgY2hhciljKSkpCi0JCXJldHVybiAoMCk7Ci0JLyoKLQkgKiBEaWQgd2UgZ2V0IGEgdmFsaWQgZGlnaXQ/Ci0JICovCi0JaWYgKCFkaWdpdCkKLQkJcmV0dXJuICgwKTsKLQkvKgotCSAqIENvbmNvY3QgdGhlIGFkZHJlc3MgYWNjb3JkaW5nIHRvCi0JICogdGhlIG51bWJlciBvZiBwYXJ0cyBzcGVjaWZpZWQuCi0JICovCi0JbiA9IHBwIC0gcGFydHMgKyAxOwotCXN3aXRjaCAobikgewotCWNhc2UgMToJCQkJLyogYSAtLSAzMiBiaXRzICovCi0JCWJyZWFrOwotCi0JY2FzZSAyOgkJCQkvKiBhLmIgLS0gOC4yNCBiaXRzICovCi0JCWlmICh2YWwgPiAweGZmZmZmZlUpCi0JCQlyZXR1cm4gKDApOwotCQl2YWwgfD0gcGFydHNbMF0gPDwgMjQ7Ci0JCWJyZWFrOwotCi0JY2FzZSAzOgkJCQkvKiBhLmIuYyAtLSA4LjguMTYgYml0cyAqLwotCQlpZiAodmFsID4gMHhmZmZmVSkKLQkJCXJldHVybiAoMCk7Ci0JCXZhbCB8PSAocGFydHNbMF0gPDwgMjQpIHwgKHBhcnRzWzFdIDw8IDE2KTsKLQkJYnJlYWs7Ci0KLQljYXNlIDQ6CQkJCS8qIGEuYi5jLmQgLS0gOC44LjguOCBiaXRzICovCi0JCWlmICh2YWwgPiAweGZmVSkKLQkJCXJldHVybiAoMCk7Ci0JCXZhbCB8PSAocGFydHNbMF0gPDwgMjQpIHwgKHBhcnRzWzFdIDw8IDE2KSB8IChwYXJ0c1syXSA8PCA4KTsKLQkJYnJlYWs7Ci0JfQotCWlmIChhZGRyICE9IE5VTEwpCi0JCWFkZHItPnNfYWRkciA9IGh0b25sKHZhbCk7Ci0JcmV0dXJuICgxKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9zdGRsaWIvcmFuZG9tLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9jb21tb24vbGliL2xpYmMvc3RkbGliL3JhbmRvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NTAzYzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9jb21tb24vbGliL2xpYmMvc3RkbGliL3JhbmRvbS5jCkBAIC0wLDAgKzEsNTMwIEBACisvKgkkTmV0QlNEOiByYW5kb20uYyx2IDEuNCAyMDE0LzA2LzEyIDIwOjU5OjQ2IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXJhbmRvbS5jCTguMiAoQmVya2VsZXkpIDUvMTkvOTUiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IHJhbmRvbS5jLHYgMS40IDIwMTQvMDYvMTIgMjA6NTk6NDYgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJyZWVudHJhbnQuaCIKKworI2lmZGVmIF9fd2Vha19hbGlhcworX193ZWFrX2FsaWFzKGluaXRzdGF0ZSxfaW5pdHN0YXRlKQorX193ZWFrX2FsaWFzKHJhbmRvbSxfcmFuZG9tKQorX193ZWFrX2FsaWFzKHNldHN0YXRlLF9zZXRzdGF0ZSkKK19fd2Vha19hbGlhcyhzcmFuZG9tLF9zcmFuZG9tKQorI2VuZGlmCisKKworI2lmZGVmIF9SRUVOVFJBTlQKK3N0YXRpYyBtdXRleF90IHJhbmRvbV9tdXRleCA9IE1VVEVYX0lOSVRJQUxJWkVSOworI2VuZGlmCisjZWxzZQorI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KKyNkZWZpbmUgbXV0ZXhfbG9jayhhKQkodm9pZCkwCisjZGVmaW5lIG11dGV4X3VubG9jayhhKSAodm9pZCkwCisjZW5kaWYKKworI2lmbmRlZiBTTUFMTF9SQU5ET00KK3N0YXRpYyB2b2lkIHNyYW5kb21fdW5sb2NrZWQodW5zaWduZWQgaW50KTsKK3N0YXRpYyBsb25nIHJhbmRvbV91bmxvY2tlZCh2b2lkKTsKKworI2RlZmluZSBVU0VfQkVUVEVSX1JBTkRPTQorCisvKgorICogcmFuZG9tLmM6CisgKgorICogQW4gaW1wcm92ZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIHBhY2thZ2UuICBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQKKyAqIHJhbmQoKS9zcmFuZCgpIGxpa2UgaW50ZXJmYWNlLCB0aGlzIHBhY2thZ2UgYWxzbyBoYXMgYSBzcGVjaWFsIHN0YXRlIGluZm8KKyAqIGludGVyZmFjZS4gIFRoZSBpbml0c3RhdGUoKSByb3V0aW5lIGlzIGNhbGxlZCB3aXRoIGEgc2VlZCwgYW4gYXJyYXkgb2YKKyAqIGJ5dGVzLCBhbmQgYSBjb3VudCBvZiBob3cgbWFueSBieXRlcyBhcmUgYmVpbmcgcGFzc2VkIGluOyB0aGlzIGFycmF5IGlzCisgKiB0aGVuIGluaXRpYWxpemVkIHRvIGNvbnRhaW4gaW5mb3JtYXRpb24gZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiB3aXRoCisgKiB0aGF0IG11Y2ggc3RhdGUgaW5mb3JtYXRpb24uICBHb29kIHNpemVzIGZvciB0aGUgYW1vdW50IG9mIHN0YXRlCisgKiBpbmZvcm1hdGlvbiBhcmUgMzIsIDY0LCAxMjgsIGFuZCAyNTYgYnl0ZXMuICBUaGUgc3RhdGUgY2FuIGJlIHN3aXRjaGVkIGJ5CisgKiBjYWxsaW5nIHRoZSBzZXRzdGF0ZSgpIHJvdXRpbmUgd2l0aCB0aGUgc2FtZSBhcnJheSBhcyB3YXMgaW5pdGlhbGxpemVkCisgKiB3aXRoIGluaXRzdGF0ZSgpLiAgQnkgZGVmYXVsdCwgdGhlIHBhY2thZ2UgcnVucyB3aXRoIDEyOCBieXRlcyBvZiBzdGF0ZQorICogaW5mb3JtYXRpb24gYW5kIGdlbmVyYXRlcyBmYXIgYmV0dGVyIHJhbmRvbSBudW1iZXJzIHRoYW4gYSBsaW5lYXIKKyAqIGNvbmdydWVudGlhbCBnZW5lcmF0b3IuICBJZiB0aGUgYW1vdW50IG9mIHN0YXRlIGluZm9ybWF0aW9uIGlzIGxlc3MgdGhhbgorICogMzIgYnl0ZXMsIGEgc2ltcGxlIGxpbmVhciBjb25ncnVlbnRpYWwgUi5OLkcuIGlzIHVzZWQuCisgKgorICogSW50ZXJuYWxseSwgdGhlIHN0YXRlIGluZm9ybWF0aW9uIGlzIHRyZWF0ZWQgYXMgYW4gYXJyYXkgb2YgaW50czsgdGhlCisgKiB6ZXJvZXRoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRoZSB0eXBlIG9mIFIuTi5HLiBiZWluZyB1c2VkIChzbWFsbAorICogaW50ZWdlcik7IHRoZSByZW1haW5kZXIgb2YgdGhlIGFycmF5IGlzIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhlCisgKiBSLk4uRy4gIFRodXMsIDMyIGJ5dGVzIG9mIHN0YXRlIGluZm9ybWF0aW9uIHdpbGwgZ2l2ZSA3IGludHMgd29ydGggb2YKKyAqIHN0YXRlIGluZm9ybWF0aW9uLCB3aGljaCB3aWxsIGFsbG93IGEgZGVncmVlIHNldmVuIHBvbHlub21pYWwuICAoTm90ZToKKyAqIHRoZSB6ZXJvZXRoIHdvcmQgb2Ygc3RhdGUgaW5mb3JtYXRpb24gYWxzbyBoYXMgc29tZSBvdGhlciBpbmZvcm1hdGlvbgorICogc3RvcmVkIGluIGl0IC0tIHNlZSBzZXRzdGF0ZSgpIGZvciBkZXRhaWxzKS4KKyAqIAorICogVGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiB0ZWNobmlxdWUgaXMgYSBsaW5lYXIgZmVlZGJhY2sgc2hpZnQgcmVnaXN0ZXIKKyAqIGFwcHJvYWNoLCBlbXBsb3lpbmcgdHJpbm9taWFscyAoc2luY2UgdGhlcmUgYXJlIGZld2VyIHRlcm1zIHRvIHN1bSB1cCB0aGF0CisgKiB3YXkpLiAgSW4gdGhpcyBhcHByb2FjaCwgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBhbGwgdGhlIG51bWJlcnMgaW4KKyAqIHRoZSBzdGF0ZSB0YWJsZSB3aWxsIGFjdCBhcyBhIGxpbmVhciBmZWVkYmFjayBzaGlmdCByZWdpc3RlciwgYW5kIHdpbGwKKyAqIGhhdmUgcGVyaW9kIDJeZGVnIC0gMSAod2hlcmUgZGVnIGlzIHRoZSBkZWdyZWUgb2YgdGhlIHBvbHlub21pYWwgYmVpbmcKKyAqIHVzZWQsIGFzc3VtaW5nIHRoYXQgdGhlIHBvbHlub21pYWwgaXMgaXJyZWR1Y2libGUgYW5kIHByaW1pdGl2ZSkuICBUaGUKKyAqIGhpZ2hlciBvcmRlciBiaXRzIHdpbGwgaGF2ZSBsb25nZXIgcGVyaW9kcywgc2luY2UgdGhlaXIgdmFsdWVzIGFyZSBhbHNvCisgKiBpbmZsdWVuY2VkIGJ5IHBzZXVkby1yYW5kb20gY2FycmllcyBvdXQgb2YgdGhlIGxvd2VyIGJpdHMuICBUaGUgdG90YWwKKyAqIHBlcmlvZCBvZiB0aGUgZ2VuZXJhdG9yIGlzIGFwcHJveGltYXRlbHkgZGVnKigyKipkZWcgLSAxKTsgdGh1cyBkb3VibGluZworICogdGhlIGFtb3VudCBvZiBzdGF0ZSBpbmZvcm1hdGlvbiBoYXMgYSB2YXN0IGluZmx1ZW5jZSBvbiB0aGUgcGVyaW9kIG9mIHRoZQorICogZ2VuZXJhdG9yLiAgTm90ZTogdGhlIGRlZyooMioqZGVnIC0gMSkgaXMgYW4gYXBwcm94aW1hdGlvbiBvbmx5IGdvb2QgZm9yCisgKiBsYXJnZSBkZWcsIHdoZW4gdGhlIHBlcmlvZCBvZiB0aGUgc2hpZnQgcmVnaXN0ZXIgaXMgdGhlIGRvbWluYW50IGZhY3Rvci4KKyAqIFdpdGggZGVnIGVxdWFsIHRvIHNldmVuLCB0aGUgcGVyaW9kIGlzIGFjdHVhbGx5IG11Y2ggbG9uZ2VyIHRoYW4gdGhlCisgKiA3KigyKio3IC0gMSkgcHJlZGljdGVkIGJ5IHRoaXMgZm9ybXVsYS4KKyAqCisgKiBNb2RpZmllZCAyOCBEZWNlbWJlciAxOTk0IGJ5IEphY29iIFMuIFJvc2VuYmVyZy4KKyAqIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZToKKyAqIEFsbCByZWZlcmVuY2VzIHRvIHRoZSB0eXBlIHVfaW50IGhhdmUgYmVlbiBjaGFuZ2VkIHRvIHVuc2lnbmVkIGxvbmcuCisgKiBBbGwgcmVmZXJlbmNlcyB0byB0eXBlIGludCBoYXZlIGJlZW4gY2hhbmdlZCB0byB0eXBlIGxvbmcuICBPdGhlcgorICogY2xlYW51cHMgaGF2ZSBiZWVuIG1hZGUgYXMgd2VsbC4gIEEgd2FybmluZyBmb3IgYm90aCBpbml0c3RhdGUgYW5kCisgKiBzZXRzdGF0ZSBoYXMgYmVlbiBpbnNlcnRlZCB0byB0aGUgZWZmZWN0IHRoYXQgb24gU3BhcmMgcGxhdGZvcm1zCisgKiB0aGUgJ2FyZ19zdGF0ZScgdmFyaWFibGUgbXVzdCBiZSBmb3JjZWQgdG8gYmVnaW4gb24gd29yZCBib3VuZGFyaWVzLgorICogVGhpcyBjYW4gYmUgZWFzaWx5IGRvbmUgYnkgY2FzdGluZyBhIGxvbmcgaW50ZWdlciBhcnJheSB0byBjaGFyICouCisgKiBUaGUgb3ZlcmFsbCBsb2dpYyBoYXMgYmVlbiBsZWZ0IFNUUklDVExZIGFsb25lLiAgVGhpcyBzb2Z0d2FyZSB3YXMKKyAqIHRlc3RlZCBvbiBib3RoIGEgVkFYIGFuZCBTdW4gU3BhY3NTdGF0aW9uIHdpdGggZXhhY3RseSB0aGUgc2FtZQorICogcmVzdWx0cy4gIFRoZSBuZXcgdmVyc2lvbiBhbmQgdGhlIG9yaWdpbmFsIGdpdmUgSURFTlRJQ0FMIHJlc3VsdHMuCisgKiBUaGUgbmV3IHZlcnNpb24gaXMgc29tZXdoYXQgZmFzdGVyIHRoYW4gdGhlIG9yaWdpbmFsLiAgQXMgdGhlCisgKiBkb2N1bWVudGF0aW9uIHNheXM6ICAiQnkgZGVmYXVsdCwgdGhlIHBhY2thZ2UgcnVucyB3aXRoIDEyOCBieXRlcyBvZgorICogc3RhdGUgaW5mb3JtYXRpb24gYW5kIGdlbmVyYXRlcyBmYXIgYmV0dGVyIHJhbmRvbSBudW1iZXJzIHRoYW4gYSBsaW5lYXIKKyAqIGNvbmdydWVudGlhbCBnZW5lcmF0b3IuICBJZiB0aGUgYW1vdW50IG9mIHN0YXRlIGluZm9ybWF0aW9uIGlzIGxlc3MgdGhhbgorICogMzIgYnl0ZXMsIGEgc2ltcGxlIGxpbmVhciBjb25ncnVlbnRpYWwgUi5OLkcuIGlzIHVzZWQuIiAgRm9yIGEgYnVmZmVyIG9mCisgKiAxMjggYnl0ZXMsIHRoaXMgbmV3IHZlcnNpb24gcnVucyBhYm91dCAxOSBwZXJjZW50IGZhc3RlciBhbmQgZm9yIGEgMTYKKyAqIGJ5dGUgYnVmZmVyIGl0IGlzIGFib3V0IDUgcGVyY2VudCBmYXN0ZXIuCisgKgorICogTW9kaWZpZWQgMDcgSmFudWFyeSAyMDAyIGJ5IEphc29uIFIuIFRob3JwZS4KKyAqIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZToKKyAqIEFsbCB0aGUgcmVmZXJlbmNlcyB0byAibG9uZyIgaGF2ZSBiZWVuIGNoYW5nZWQgYmFjayB0byAiaW50Ii4gIFRoaXMKKyAqIGZpeGVzIG1lbW9yeSBjb3JydXB0aW9uIHByb2JsZW1zIG9uIExQNjQgcGxhdGZvcm1zLgorICovCisKKy8qCisgKiBGb3IgZWFjaCBvZiB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMsIHdlIGhhdmUgYQorICogYnJlYWsgdmFsdWUgb24gdGhlIGFtb3VudCBvZiBzdGF0ZSBpbmZvcm1hdGlvbiAoeW91IG5lZWQgYXQgbGVhc3QgdGhpcworICogbWFueSBieXRlcyBvZiBzdGF0ZSBpbmZvIHRvIHN1cHBvcnQgdGhpcyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciksIGEgZGVncmVlCisgKiBmb3IgdGhlIHBvbHlub21pYWwgKGFjdHVhbGx5IGEgdHJpbm9taWFsKSB0aGF0IHRoZSBSLk4uRy4gaXMgYmFzZWQgb24sIGFuZAorICogdGhlIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUgdHdvIGxvd2VyIG9yZGVyIGNvZWZmaWNpZW50cyBvZiB0aGUgdHJpbm9taWFsLgorICovCisjZGVmaW5lCVRZUEVfMAkJMAkJLyogbGluZWFyIGNvbmdydWVudGlhbCAqLworI2RlZmluZQlCUkVBS18wCQk4CisjZGVmaW5lCURFR18wCQkwCisjZGVmaW5lCVNFUF8wCQkwCisKKyNkZWZpbmUJVFlQRV8xCQkxCQkvKiB4Kio3ICsgeCoqMyArIDEgKi8KKyNkZWZpbmUJQlJFQUtfMQkJMzIKKyNkZWZpbmUJREVHXzEJCTcKKyNkZWZpbmUJU0VQXzEJCTMKKworI2RlZmluZQlUWVBFXzIJCTIJCS8qIHgqKjE1ICsgeCArIDEgKi8KKyNkZWZpbmUJQlJFQUtfMgkJNjQKKyNkZWZpbmUJREVHXzIJCTE1CisjZGVmaW5lCVNFUF8yCQkxCisKKyNkZWZpbmUJVFlQRV8zCQkzCQkvKiB4KiozMSArIHgqKjMgKyAxICovCisjZGVmaW5lCUJSRUFLXzMJCTEyOAorI2RlZmluZQlERUdfMwkJMzEKKyNkZWZpbmUJU0VQXzMJCTMKKworI2RlZmluZQlUWVBFXzQJCTQJCS8qIHgqKjYzICsgeCArIDEgKi8KKyNkZWZpbmUJQlJFQUtfNAkJMjU2CisjZGVmaW5lCURFR180CQk2MworI2RlZmluZQlTRVBfNAkJMQorCisvKgorICogQXJyYXkgdmVyc2lvbnMgb2YgdGhlIGFib3ZlIGluZm9ybWF0aW9uIHRvIG1ha2UgY29kZSBydW4gZmFzdGVyIC0tCisgKiByZWxpZXMgb24gZmFjdCB0aGF0IFRZUEVfaSA9PSBpLgorICovCisjZGVmaW5lCU1BWF9UWVBFUwk1CQkvKiBtYXggbnVtYmVyIG9mIHR5cGVzIGFib3ZlICovCisKK3N0YXRpYyBjb25zdCBpbnQgZGVncmVlc1tNQVhfVFlQRVNdID0JeyBERUdfMCwgREVHXzEsIERFR18yLCBERUdfMywgREVHXzQgfTsKK3N0YXRpYyBjb25zdCBpbnQgc2Vwc1tNQVhfVFlQRVNdID0JeyBTRVBfMCwgU0VQXzEsIFNFUF8yLCBTRVBfMywgU0VQXzQgfTsKKworLyoKKyAqIEluaXRpYWxseSwgZXZlcnl0aGluZyBpcyBzZXQgdXAgYXMgaWYgZnJvbToKKyAqCisgKglpbml0c3RhdGUoMSwgJnJhbmR0YmwsIDEyOCk7CisgKgorICogTm90ZSB0aGF0IHRoaXMgaW5pdGlhbGl6YXRpb24gdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgc3JhbmRvbSgpCisgKiBhZHZhbmNlcyB0aGUgZnJvbnQgYW5kIHJlYXIgcG9pbnRlcnMgMTAqcmFuZF9kZWcgdGltZXMsIGFuZCBoZW5jZSB0aGUKKyAqIHJlYXIgcG9pbnRlciB3aGljaCBzdGFydHMgYXQgMCB3aWxsIGFsc28gZW5kIHVwIGF0IHplcm87IHRodXMgdGhlIHplcm9ldGgKKyAqIGVsZW1lbnQgb2YgdGhlIHN0YXRlIGluZm9ybWF0aW9uLCB3aGljaCBjb250YWlucyBpbmZvIGFib3V0IHRoZSBjdXJyZW50CisgKiBwb3NpdGlvbiBvZiB0aGUgcmVhciBwb2ludGVyIGlzIGp1c3QKKyAqCisgKglNQVhfVFlQRVMgKiAocnB0ciAtIHN0YXRlKSArIFRZUEVfMyA9PSBUWVBFXzMuCisgKi8KKworLyogTElOVEVEICovCitzdGF0aWMgaW50IHJhbmR0YmxbREVHXzMgKyAxXSA9IHsKKwlUWVBFXzMsCisjaWZkZWYgVVNFX0JFVFRFUl9SQU5ET00KKwkweDk5MTUzOWIxLCAweDE2YTViY2UzLCAweDY3NzRhNGNkLAorCTB4M2UwMTUxMWUsIDB4NGU1MDhhYWEsIDB4NjEwNDhjMDUsCisJMHhmNTUwMDYxNywgMHg4NDZiNzExNSwgMHg2YTE5ODkyYywKKwkweDg5NmE5N2FmLCAweGRiNDhmOTM2LCAweDE0ODk4NDU0LAorCTB4MzdmZmQxMDYsIDB4YjU4YmZmOWMsIDB4NTllMTcxMDQsCisJMHhjZjkxOGE0OSwgMHgwOTM3OGM4MywgMHg1MmM3YTQ3MSwKKwkweDhkMjkzZWE5LCAweDFmNGZjMzAxLCAweGMzZGI3MWJlLAorCTB4MzliNDRlMWMsIDB4ZjhhNDRlZjksIDB4NGM4YjgwYjEsCisJMHgxOWVkYzMyOCwgMHg4N2JmNGJkZCwgMHhjOWIyNDBlNSwKKwkweGU5ZWU0YjFiLCAweDQzODJhZWU3LCAweDUzNWI2YjQxLAorCTB4ZjNiZWM1ZGEsCisjZWxzZQorCTB4OWEzMTkwMzksIDB4MzJkOWMwMjQsIDB4OWI2NjMxODIsCisJMHg1ZGExZjM0MiwgMHhkZTNiODFlMCwgMHhkZjBhNmZiNSwKKwkweGYxMDNiYzAyLCAweDQ4ZjM0MGZiLCAweDc0NDllNTZiLAorCTB4YmViMWRiYjAsIDB4YWI1YzU5MTgsIDB4OTQ2NTU0ZmQsCisJMHg4YzJlNjgwZiwgMHhlYjNkNzk5ZiwgMHhiMTFlZTBiNywKKwkweDJkNDM2Yjg2LCAweGRhNjcyZTJhLCAweDE1ODhjYTg4LAorCTB4ZTM2OTczNWQsIDB4OTA0ZjM1ZjcsIDB4ZDcxNThmZDYsCisJMHg2ZmE2ZjA1MSwgMHg2MTZlNmI5NiwgMHhhYzk0ZWZkYywKKwkweDM2NDEzZjkzLCAweGM2MjJjMjk4LCAweGY1YTQyYWI4LAorCTB4OGE4OGQ3N2IsIDB4ZjVhZDlkMGUsIDB4ODk5OTIyMGIsCisJMHgyN2ZiNDdiOSwKKyNlbmRpZiAvKiBVU0VfQkVUVEVSX1JBTkRPTSAqLworfTsKKworLyoKKyAqIGZwdHIgYW5kIHJwdHIgYXJlIHR3byBwb2ludGVycyBpbnRvIHRoZSBzdGF0ZSBpbmZvLCBhIGZyb250IGFuZCBhIHJlYXIKKyAqIHBvaW50ZXIuICBUaGVzZSB0d28gcG9pbnRlcnMgYXJlIGFsd2F5cyByYW5kX3NlcCBwbGFjZXMgYXBhcnRzLCBhcyB0aGV5CisgKiBjeWNsZSBjeWNsaWNhbGx5IHRocm91Z2ggdGhlIHN0YXRlIGluZm9ybWF0aW9uLiAgKFllcywgdGhpcyBkb2VzIG1lYW4gd2UKKyAqIGNvdWxkIGdldCBhd2F5IHdpdGgganVzdCBvbmUgcG9pbnRlciwgYnV0IHRoZSBjb2RlIGZvciByYW5kb20oKSBpcyBtb3JlCisgKiBlZmZpY2llbnQgdGhpcyB3YXkpLiAgVGhlIHBvaW50ZXJzIGFyZSBsZWZ0IHBvc2l0aW9uZWQgYXMgdGhleSB3b3VsZCBiZQorICogZnJvbSB0aGUgY2FsbAorICoKKyAqCWluaXRzdGF0ZSgxLCByYW5kdGJsLCAxMjgpOworICoKKyAqIChUaGUgcG9zaXRpb24gb2YgdGhlIHJlYXIgcG9pbnRlciwgcnB0ciwgaXMgcmVhbGx5IDAgKGFzIGV4cGxhaW5lZCBhYm92ZQorICogaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHJhbmR0YmwpIGJlY2F1c2UgdGhlIHN0YXRlIHRhYmxlIHBvaW50ZXIgaXMgc2V0CisgKiB0byBwb2ludCB0byByYW5kdGJsWzFdIChhcyBleHBsYWluZWQgYmVsb3cpLgorICovCitzdGF0aWMgaW50ICpmcHRyID0gJnJhbmR0YmxbU0VQXzMgKyAxXTsKK3N0YXRpYyBpbnQgKnJwdHIgPSAmcmFuZHRibFsxXTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdGhpbmdzIGFyZSB0aGUgcG9pbnRlciB0byB0aGUgc3RhdGUgaW5mb3JtYXRpb24gdGFibGUsIHRoZQorICogdHlwZSBvZiB0aGUgY3VycmVudCBnZW5lcmF0b3IsIHRoZSBkZWdyZWUgb2YgdGhlIGN1cnJlbnQgcG9seW5vbWlhbCBiZWluZworICogdXNlZCwgYW5kIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gdGhlIHR3byBwb2ludGVycy4gIE5vdGUgdGhhdCBmb3IgZWZmaWNpZW5jeQorICogb2YgcmFuZG9tKCksIHdlIHJlbWVtYmVyIHRoZSBmaXJzdCBsb2NhdGlvbiBvZiB0aGUgc3RhdGUgaW5mb3JtYXRpb24sIG5vdAorICogdGhlIHplcm9ldGguICBIZW5jZSBpdCBpcyB2YWxpZCB0byBhY2Nlc3Mgc3RhdGVbLTFdLCB3aGljaCBpcyB1c2VkIHRvCisgKiBzdG9yZSB0aGUgdHlwZSBvZiB0aGUgUi5OLkcuICBBbHNvLCB3ZSByZW1lbWJlciB0aGUgbGFzdCBsb2NhdGlvbiwgc2luY2UKKyAqIHRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBpbmRleGluZyBldmVyeSB0aW1lIHRvIGZpbmQgdGhlIGFkZHJlc3Mgb2YKKyAqIHRoZSBsYXN0IGVsZW1lbnQgdG8gc2VlIGlmIHRoZSBmcm9udCBhbmQgcmVhciBwb2ludGVycyBoYXZlIHdyYXBwZWQuCisgKi8KK3N0YXRpYyBpbnQgKnN0YXRlID0gJnJhbmR0YmxbMV07CitzdGF0aWMgaW50IHJhbmRfdHlwZSA9IFRZUEVfMzsKK3N0YXRpYyBpbnQgcmFuZF9kZWcgPSBERUdfMzsKK3N0YXRpYyBpbnQgcmFuZF9zZXAgPSBTRVBfMzsKK3N0YXRpYyBpbnQgKmVuZF9wdHIgPSAmcmFuZHRibFtERUdfMyArIDFdOworCisvKgorICogc3JhbmRvbToKKyAqCisgKiBJbml0aWFsaXplIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBiYXNlZCBvbiB0aGUgZ2l2ZW4gc2VlZC4gIElmIHRoZQorICogdHlwZSBpcyB0aGUgdHJpdmlhbCBuby1zdGF0ZS1pbmZvcm1hdGlvbiB0eXBlLCBqdXN0IHJlbWVtYmVyIHRoZSBzZWVkLgorICogT3RoZXJ3aXNlLCBpbml0aWFsaXplcyBzdGF0ZVtdIGJhc2VkIG9uIHRoZSBnaXZlbiAic2VlZCIgdmlhIGEgbGluZWFyCisgKiBjb25ncnVlbnRpYWwgZ2VuZXJhdG9yLiAgVGhlbiwgdGhlIHBvaW50ZXJzIGFyZSBzZXQgdG8ga25vd24gbG9jYXRpb25zCisgKiB0aGF0IGFyZSBleGFjdGx5IHJhbmRfc2VwIHBsYWNlcyBhcGFydC4gIExhc3RseSwgaXQgY3ljbGVzIHRoZSBzdGF0ZQorICogaW5mb3JtYXRpb24gYSBnaXZlbiBudW1iZXIgb2YgdGltZXMgdG8gZ2V0IHJpZCBvZiBhbnkgaW5pdGlhbCBkZXBlbmRlbmNpZXMKKyAqIGludHJvZHVjZWQgYnkgdGhlIEwuQy5SLk4uRy4gIE5vdGUgdGhhdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcmFuZHRibFtdCisgKiBmb3IgZGVmYXVsdCB1c2FnZSByZWxpZXMgb24gdmFsdWVzIHByb2R1Y2VkIGJ5IHRoaXMgcm91dGluZS4KKyAqLworc3RhdGljIHZvaWQKK3NyYW5kb21fdW5sb2NrZWQodW5zaWduZWQgaW50IHgpCit7CisJaW50IGk7CisKKwlpZiAocmFuZF90eXBlID09IFRZUEVfMCkKKwkJc3RhdGVbMF0gPSB4OworCWVsc2UgeworCQlzdGF0ZVswXSA9IHg7CisJCWZvciAoaSA9IDE7IGkgPCByYW5kX2RlZzsgaSsrKSB7CisjaWZkZWYgVVNFX0JFVFRFUl9SQU5ET00KKwkJCWludCB4MSwgaGksIGxvLCB0OworCisJCQkvKgorCQkJICogQ29tcHV0ZSB4W24gKyAxXSA9ICg3XjUgKiB4W25dKSBtb2QgKDJeMzEgLSAxKS4KKwkJCSAqIEZyb20gIlJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yczogZ29vZCBvbmVzIGFyZSBoYXJkCisJCQkgKiB0byBmaW5kIiwgUGFyayBhbmQgTWlsbGVyLCBDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNLAorCQkJICogdm9sLiAzMSwgbm8uIDEwLAorCQkJICogT2N0b2JlciAxOTg4LCBwLiAxMTk1LgorCQkJICovCisJCQl4MSA9IHN0YXRlW2kgLSAxXTsKKwkJCWhpID0geDEgLyAxMjc3NzM7CisJCQlsbyA9IHgxICUgMTI3NzczOworCQkJdCA9IDE2ODA3ICogbG8gLSAyODM2ICogaGk7CisJCQlpZiAodCA8PSAwKQorCQkJCXQgKz0gMHg3ZmZmZmZmZjsKKwkJCXN0YXRlW2ldID0gdDsKKyNlbHNlCisJCQlzdGF0ZVtpXSA9IDExMDM1MTUyNDUgKiBzdGF0ZVtpIC0gMV0gKyAxMjM0NTsKKyNlbmRpZiAvKiBVU0VfQkVUVEVSX1JBTkRPTSAqLworCQl9CisJCWZwdHIgPSAmc3RhdGVbcmFuZF9zZXBdOworCQlycHRyID0gJnN0YXRlWzBdOworCQlmb3IgKGkgPSAwOyBpIDwgMTAgKiByYW5kX2RlZzsgaSsrKQorCQkJKHZvaWQpcmFuZG9tX3VubG9ja2VkKCk7CisJfQorfQorCit2b2lkCitzcmFuZG9tKHVuc2lnbmVkIGludCB4KQoreworCisJbXV0ZXhfbG9jaygmcmFuZG9tX211dGV4KTsKKwlzcmFuZG9tX3VubG9ja2VkKHgpOworCW11dGV4X3VubG9jaygmcmFuZG9tX211dGV4KTsKK30KKworLyoKKyAqIGluaXRzdGF0ZToKKyAqCisgKiBJbml0aWFsaXplIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBpbiB0aGUgZ2l2ZW4gYXJyYXkgb2YgbiBieXRlcyBmb3IgZnV0dXJlCisgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24uICBCYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGFyZSBnaXZlbiwgYW5kCisgKiB0aGUgYnJlYWsgdmFsdWVzIGZvciB0aGUgZGlmZmVyZW50IFIuTi5HLidzLCB3ZSBjaG9vc2UgdGhlIGJlc3QgKGxhcmdlc3QpCisgKiBvbmUgd2UgY2FuIGFuZCBzZXQgdGhpbmdzIHVwIGZvciBpdC4gIHNyYW5kb20oKSBpcyB0aGVuIGNhbGxlZCB0bworICogaW5pdGlhbGl6ZSB0aGUgc3RhdGUgaW5mb3JtYXRpb24uCisgKiAKKyAqIE5vdGUgdGhhdCBvbiByZXR1cm4gZnJvbSBzcmFuZG9tKCksIHdlIHNldCBzdGF0ZVstMV0gdG8gYmUgdGhlIHR5cGUKKyAqIG11bHRpcGxleGVkIHdpdGggdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlYXIgcG9pbnRlcjsgdGhpcyBpcyBzbworICogc3VjY2Vzc2l2ZSBjYWxscyB0byBpbml0c3RhdGUoKSB3b24ndCBsb3NlIHRoaXMgaW5mb3JtYXRpb24gYW5kIHdpbGwgYmUKKyAqIGFibGUgdG8gcmVzdGFydCB3aXRoIHNldHN0YXRlKCkuCisgKiAKKyAqIE5vdGU6IHRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpcyBzYXZlIHRoZSBjdXJyZW50IHN0YXRlLCBpZiBhbnksIGp1c3QgbGlrZQorICogc2V0c3RhdGUoKSBzbyB0aGF0IGl0IGRvZXNuJ3QgbWF0dGVyIHdoZW4gaW5pdHN0YXRlIGlzIGNhbGxlZC4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgb2xkIHN0YXRlLgorICoKKyAqIE5vdGU6IFRoZSBTcGFyYyBwbGF0Zm9ybSByZXF1aXJlcyB0aGF0IGFyZ19zdGF0ZSBiZWdpbiBvbiBhbiBpbnQKKyAqIHdvcmQgYm91bmRhcnk7IG90aGVyd2lzZSBhIGJ1cyBlcnJvciB3aWxsIG9jY3VyLiBFdmVuIHNvLCBsaW50IHdpbGwKKyAqIGNvbXBsYWluIGFib3V0IG1pcy1hbGlnbm1lbnQsIGJ1dCB5b3Ugc2hvdWxkIGRpc3JlZ2FyZCB0aGVzZSBtZXNzYWdlcy4KKyAqLworY2hhciAqCitpbml0c3RhdGUoCisJdW5zaWduZWQgaW50IHNlZWQsCQkvKiBzZWVkIGZvciBSLk4uRy4gKi8KKwljaGFyICphcmdfc3RhdGUsCQkvKiBwb2ludGVyIHRvIHN0YXRlIGFycmF5ICovCisJc2l6ZV90IG4pCQkJLyogIyBieXRlcyBvZiBzdGF0ZSBpbmZvICovCit7CisJdm9pZCAqb3N0YXRlID0gKHZvaWQgKikoJnN0YXRlWy0xXSk7CisJaW50ICppbnRfYXJnX3N0YXRlOworCisJX0RJQUdBU1NFUlQoYXJnX3N0YXRlICE9IE5VTEwpOworCisJaW50X2FyZ19zdGF0ZSA9IChpbnQgKikodm9pZCAqKWFyZ19zdGF0ZTsKKworCW11dGV4X2xvY2soJnJhbmRvbV9tdXRleCk7CisJaWYgKHJhbmRfdHlwZSA9PSBUWVBFXzApCisJCXN0YXRlWy0xXSA9IHJhbmRfdHlwZTsKKwllbHNlCisJCXN0YXRlWy0xXSA9IE1BWF9UWVBFUyAqIChpbnQpKHJwdHIgLSBzdGF0ZSkgKyByYW5kX3R5cGU7CisJaWYgKG4gPCBCUkVBS18wKSB7CisJCW11dGV4X3VubG9jaygmcmFuZG9tX211dGV4KTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9IGVsc2UgaWYgKG4gPCBCUkVBS18xKSB7CisJCXJhbmRfdHlwZSA9IFRZUEVfMDsKKwkJcmFuZF9kZWcgPSBERUdfMDsKKwkJcmFuZF9zZXAgPSBTRVBfMDsKKwl9IGVsc2UgaWYgKG4gPCBCUkVBS18yKSB7CisJCXJhbmRfdHlwZSA9IFRZUEVfMTsKKwkJcmFuZF9kZWcgPSBERUdfMTsKKwkJcmFuZF9zZXAgPSBTRVBfMTsKKwl9IGVsc2UgaWYgKG4gPCBCUkVBS18zKSB7CisJCXJhbmRfdHlwZSA9IFRZUEVfMjsKKwkJcmFuZF9kZWcgPSBERUdfMjsKKwkJcmFuZF9zZXAgPSBTRVBfMjsKKwl9IGVsc2UgaWYgKG4gPCBCUkVBS180KSB7CisJCXJhbmRfdHlwZSA9IFRZUEVfMzsKKwkJcmFuZF9kZWcgPSBERUdfMzsKKwkJcmFuZF9zZXAgPSBTRVBfMzsKKwl9IGVsc2UgeworCQlyYW5kX3R5cGUgPSBUWVBFXzQ7CisJCXJhbmRfZGVnID0gREVHXzQ7CisJCXJhbmRfc2VwID0gU0VQXzQ7CisJfQorCXN0YXRlID0gKGludCAqKSAoaW50X2FyZ19zdGF0ZSArIDEpOyAvKiBmaXJzdCBsb2NhdGlvbiAqLworCWVuZF9wdHIgPSAmc3RhdGVbcmFuZF9kZWddOwkvKiBtdXN0IHNldCBlbmRfcHRyIGJlZm9yZSBzcmFuZG9tICovCisJc3JhbmRvbV91bmxvY2tlZChzZWVkKTsKKwlpZiAocmFuZF90eXBlID09IFRZUEVfMCkKKwkJaW50X2FyZ19zdGF0ZVswXSA9IHJhbmRfdHlwZTsKKwllbHNlCisJCWludF9hcmdfc3RhdGVbMF0gPSBNQVhfVFlQRVMgKiAoaW50KShycHRyIC0gc3RhdGUpICsgcmFuZF90eXBlOworCW11dGV4X3VubG9jaygmcmFuZG9tX211dGV4KTsKKwlyZXR1cm4oKGNoYXIgKilvc3RhdGUpOworfQorCisvKgorICogc2V0c3RhdGU6CisgKgorICogUmVzdG9yZSB0aGUgc3RhdGUgZnJvbSB0aGUgZ2l2ZW4gc3RhdGUgYXJyYXkuCisgKgorICogTm90ZTogaXQgaXMgaW1wb3J0YW50IHRoYXQgd2UgYWxzbyByZW1lbWJlciB0aGUgbG9jYXRpb25zIG9mIHRoZSBwb2ludGVycworICogaW4gdGhlIGN1cnJlbnQgc3RhdGUgaW5mb3JtYXRpb24sIGFuZCByZXN0b3JlIHRoZSBsb2NhdGlvbnMgb2YgdGhlIHBvaW50ZXJzCisgKiBmcm9tIHRoZSBvbGQgc3RhdGUgaW5mb3JtYXRpb24uICBUaGlzIGlzIGRvbmUgYnkgbXVsdGlwbGV4aW5nIHRoZSBwb2ludGVyCisgKiBsb2NhdGlvbiBpbnRvIHRoZSB6ZXJvZXRoIHdvcmQgb2YgdGhlIHN0YXRlIGluZm9ybWF0aW9uLgorICoKKyAqIE5vdGUgdGhhdCBkdWUgdG8gdGhlIG9yZGVyIGluIHdoaWNoIHRoaW5ncyBhcmUgZG9uZSwgaXQgaXMgT0sgdG8gY2FsbAorICogc2V0c3RhdGUoKSB3aXRoIHRoZSBzYW1lIHN0YXRlIGFzIHRoZSBjdXJyZW50IHN0YXRlLgorICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvbGQgc3RhdGUgaW5mb3JtYXRpb24uCisgKgorICogTm90ZTogVGhlIFNwYXJjIHBsYXRmb3JtIHJlcXVpcmVzIHRoYXQgYXJnX3N0YXRlIGJlZ2luIG9uIGEgbG9uZworICogd29yZCBib3VuZGFyeTsgb3RoZXJ3aXNlIGEgYnVzIGVycm9yIHdpbGwgb2NjdXIuIEV2ZW4gc28sIGxpbnQgd2lsbAorICogY29tcGxhaW4gYWJvdXQgbWlzLWFsaWdubWVudCwgYnV0IHlvdSBzaG91bGQgZGlzcmVnYXJkIHRoZXNlIG1lc3NhZ2VzLgorICovCitjaGFyICoKK3NldHN0YXRlKGNoYXIgKmFyZ19zdGF0ZSkJCS8qIHBvaW50ZXIgdG8gc3RhdGUgYXJyYXkgKi8KK3sKKwlpbnQgKm5ld19zdGF0ZTsKKwlpbnQgdHlwZTsKKwlpbnQgcmVhcjsKKwl2b2lkICpvc3RhdGUgPSAodm9pZCAqKSgmc3RhdGVbLTFdKTsKKworCV9ESUFHQVNTRVJUKGFyZ19zdGF0ZSAhPSBOVUxMKTsKKworCW5ld19zdGF0ZSA9IChpbnQgKikodm9pZCAqKWFyZ19zdGF0ZTsKKwl0eXBlID0gKGludCkobmV3X3N0YXRlWzBdICUgTUFYX1RZUEVTKTsKKwlyZWFyID0gKGludCkobmV3X3N0YXRlWzBdIC8gTUFYX1RZUEVTKTsKKworCW11dGV4X2xvY2soJnJhbmRvbV9tdXRleCk7CisJaWYgKHJhbmRfdHlwZSA9PSBUWVBFXzApCisJCXN0YXRlWy0xXSA9IHJhbmRfdHlwZTsKKwllbHNlCisJCXN0YXRlWy0xXSA9IE1BWF9UWVBFUyAqIChpbnQpKHJwdHIgLSBzdGF0ZSkgKyByYW5kX3R5cGU7CisJc3dpdGNoKHR5cGUpIHsKKwljYXNlIFRZUEVfMDoKKwljYXNlIFRZUEVfMToKKwljYXNlIFRZUEVfMjoKKwljYXNlIFRZUEVfMzoKKwljYXNlIFRZUEVfNDoKKwkJcmFuZF90eXBlID0gdHlwZTsKKwkJcmFuZF9kZWcgPSBkZWdyZWVzW3R5cGVdOworCQlyYW5kX3NlcCA9IHNlcHNbdHlwZV07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW11dGV4X3VubG9jaygmcmFuZG9tX211dGV4KTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJc3RhdGUgPSAoaW50ICopIChuZXdfc3RhdGUgKyAxKTsKKwlpZiAocmFuZF90eXBlICE9IFRZUEVfMCkgeworCQlycHRyID0gJnN0YXRlW3JlYXJdOworCQlmcHRyID0gJnN0YXRlWyhyZWFyICsgcmFuZF9zZXApICUgcmFuZF9kZWddOworCX0KKwllbmRfcHRyID0gJnN0YXRlW3JhbmRfZGVnXTsJCS8qIHNldCBlbmRfcHRyIHRvbyAqLworCW11dGV4X3VubG9jaygmcmFuZG9tX211dGV4KTsKKwlyZXR1cm4oKGNoYXIgKilvc3RhdGUpOworfQorCisvKgorICogcmFuZG9tOgorICoKKyAqIElmIHdlIGFyZSB1c2luZyB0aGUgdHJpdmlhbCBUWVBFXzAgUi5OLkcuLCBqdXN0IGRvIHRoZSBvbGQgbGluZWFyCisgKiBjb25ncnVlbnRpYWwgYml0LiAgT3RoZXJ3aXNlLCB3ZSBkbyBvdXIgZmFuY3kgdHJpbm9taWFsIHN0dWZmLCB3aGljaCBpcworICogdGhlIHNhbWUgaW4gYWxsIHRoZSBvdGhlciBjYXNlcyBkdWUgdG8gYWxsIHRoZSBnbG9iYWwgdmFyaWFibGVzIHRoYXQgaGF2ZQorICogYmVlbiBzZXQgdXAuICBUaGUgYmFzaWMgb3BlcmF0aW9uIGlzIHRvIGFkZCB0aGUgbnVtYmVyIGF0IHRoZSByZWFyIHBvaW50ZXIKKyAqIGludG8gdGhlIG9uZSBhdCB0aGUgZnJvbnQgcG9pbnRlci4gIFRoZW4gYm90aCBwb2ludGVycyBhcmUgYWR2YW5jZWQgdG8KKyAqIHRoZSBuZXh0IGxvY2F0aW9uIGN5Y2xpY2FsbHkgaW4gdGhlIHRhYmxlLiAgVGhlIHZhbHVlIHJldHVybmVkIGlzIHRoZSBzdW0KKyAqIGdlbmVyYXRlZCwgcmVkdWNlZCB0byAzMSBiaXRzIGJ5IHRocm93aW5nIGF3YXkgdGhlICJsZWFzdCByYW5kb20iIGxvdyBiaXQuCisgKgorICogTm90ZTogdGhlIGNvZGUgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgYm90aCB0aGUgZnJvbnQgYW5kCisgKiByZWFyIHBvaW50ZXJzIGNhbid0IHdyYXAgb24gdGhlIHNhbWUgY2FsbCBieSBub3QgdGVzdGluZyB0aGUgcmVhcgorICogcG9pbnRlciBpZiB0aGUgZnJvbnQgb25lIGhhcyB3cmFwcGVkLgorICoKKyAqIFJldHVybnMgYSAzMS1iaXQgcmFuZG9tIG51bWJlci4KKyAqLworc3RhdGljIGxvbmcKK3JhbmRvbV91bmxvY2tlZCh2b2lkKQoreworCWludCBpOworCWludCAqZiwgKnI7CisKKwlpZiAocmFuZF90eXBlID09IFRZUEVfMCkgeworCQlpID0gc3RhdGVbMF07CisJCXN0YXRlWzBdID0gaSA9IChpICogMTEwMzUxNTI0NSArIDEyMzQ1KSAmIDB4N2ZmZmZmZmY7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVXNlIGxvY2FsIHZhcmlhYmxlcyByYXRoZXIgdGhhbiBzdGF0aWMgdmFyaWFibGVzIGZvciBzcGVlZC4KKwkJICovCisJCWYgPSBmcHRyOyByID0gcnB0cjsKKwkJKmYgKz0gKnI7CisJCS8qIGNodWNraW5nIGxlYXN0IHJhbmRvbSBiaXQgKi8KKwkJaSA9ICgodW5zaWduZWQgaW50KSpmID4+IDEpICYgMHg3ZmZmZmZmZjsKKwkJaWYgKCsrZiA+PSBlbmRfcHRyKSB7CisJCQlmID0gc3RhdGU7CisJCQkrK3I7CisJCX0KKwkJZWxzZSBpZiAoKytyID49IGVuZF9wdHIpIHsKKwkJCXIgPSBzdGF0ZTsKKwkJfQorCisJCWZwdHIgPSBmOyBycHRyID0gcjsKKwl9CisJcmV0dXJuKGkpOworfQorCitsb25nCityYW5kb20odm9pZCkKK3sKKwlsb25nIHI7CisKKwltdXRleF9sb2NrKCZyYW5kb21fbXV0ZXgpOworCXIgPSByYW5kb21fdW5sb2NrZWQoKTsKKwltdXRleF91bmxvY2soJnJhbmRvbV9tdXRleCk7CisJcmV0dXJuIChyKTsKK30KKyNlbHNlCitsb25nCityYW5kb20odm9pZCkKK3sKKwlzdGF0aWMgdV9sb25nIHJhbmRzZWVkID0gMTsKKwlsb25nIHgsIGhpLCBsbywgdDsKKyAKKwkvKgorCSAqIENvbXB1dGUgeFtuICsgMV0gPSAoN141ICogeFtuXSkgbW9kICgyXjMxIC0gMSkuCisJICogRnJvbSAiUmFuZG9tIG51bWJlciBnZW5lcmF0b3JzOiBnb29kIG9uZXMgYXJlIGhhcmQgdG8gZmluZCIsCisJICogUGFyayBhbmQgTWlsbGVyLCBDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNLCB2b2wuIDMxLCBuby4gMTAsCisJICogT2N0b2JlciAxOTg4LCBwLiAxMTk1LgorCSAqLworCXggPSByYW5kc2VlZDsKKwloaSA9IHggLyAxMjc3NzM7CisJbG8gPSB4ICUgMTI3NzczOworCXQgPSAxNjgwNyAqIGxvIC0gMjgzNiAqIGhpOworCWlmICh0IDw9IDApCisJCXQgKz0gMHg3ZmZmZmZmZjsKKwlyYW5kc2VlZCA9IHQ7CisJcmV0dXJuICh0KTsKK30KKyNlbmRpZiAvKiBTTUFMTF9SQU5ET00gKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL2Z0dy5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL2Z0dy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9mdHcuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL2Z0dy5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9uZnR3LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vbmZ0dy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9uZnR3LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi9uZnR3LmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL25pY2UuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi9uaWNlLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL25pY2UuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL25pY2UuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vcG9wZW4uYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi9wb3Blbi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9wb3Blbi5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vcG9wZW4uYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vcHNpZ25hbC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL3BzaWduYWwuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vcHNpZ25hbC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vcHNpZ25hbC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi91dGltZS5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL3V0aW1lLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3V0aW1lLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2dlbi91dGltZS5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9nZW4vdXRtcC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL3V0bXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmIwNzk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvZ2VuL3V0bXAuYwpAQCAtMCwwICsxLDEwNiBAQAorLyoJJE5ldEJTRDogdXRtcC5jLHYgMS4xMCAyMDExLzEwLzE1IDIzOjAwOjAyIGNocmlzdG9zIEV4cCAkCSAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMiBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IENocmlzdG9zIFpvdWxhcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiB1dG1wLmMsdiAxLjEwIDIwMTEvMTAvMTUgMjM6MDA6MDIgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1dG1wLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworc3RhdGljIHN0cnVjdCB1dG1wIHV0bXA7CitzdGF0aWMgRklMRSAqdXQ7CitzdGF0aWMgY2hhciB1dGZpbGVbTUFYUEFUSExFTl0gPSBfUEFUSF9VVE1QOworCit2b2lkCitzZXR1dGVudCh2b2lkKQoreworCWlmICh1dCA9PSBOVUxMKQorCQlyZXR1cm47CisJKHZvaWQpZnNlZWtvKHV0LCAob2ZmX3QpMCwgU0VFS19TRVQpOworfQorCitzdHJ1Y3QgdXRtcCAqCitnZXR1dGVudCh2b2lkKQoreworCWlmICh1dCA9PSBOVUxMKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQlvZmZfdCBudW1lbnRyaWVzOworCQlpZiAoKHV0ID0gZm9wZW4odXRmaWxlLCAicmUiKSkgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoZnN0YXQoZmlsZW5vKHV0KSwgJnN0KSA9PSAtMSkKKwkJCWdvdG8gb3V0OworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGEgYW4gb2xkIHZlcnNpb24gdXRtcCBmaWxlIGJhaWwuCisJCSAqLworCQludW1lbnRyaWVzID0gc3Quc3Rfc2l6ZSAvIHNpemVvZih1dG1wKTsKKwkJaWYgKChvZmZfdCkobnVtZW50cmllcyAqIHNpemVvZih1dG1wKSkgIT0gc3Quc3Rfc2l6ZSkKKwkJCWdvdG8gb3V0OworCX0KKwlpZiAoZnJlYWQoJnV0bXAsIHNpemVvZih1dG1wKSwgMSwgdXQpID09IDEpCisJCXJldHVybiAmdXRtcDsKK291dDoKKwkodm9pZClmY2xvc2UodXQpOworCXJldHVybiBOVUxMOworfQorCit2b2lkCitlbmR1dGVudCh2b2lkKQoreworCWlmICh1dCAhPSBOVUxMKSB7CisJCSh2b2lkKWZjbG9zZSh1dCk7CisJCXV0ID0gTlVMTDsKKwl9Cit9CisKK2ludAordXRtcG5hbWUoY29uc3QgY2hhciAqZm5hbWUpCit7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihmbmFtZSk7CisKKwlpZiAobGVuID49IHNpemVvZih1dGZpbGUpKQorCQlyZXR1cm4gMDsKKworCS8qIG11c3Qgbm90IGVuZCBpbiB4ISAqLworCWlmIChmbmFtZVtsZW4gLSAxXSA9PSAneCcpCisJCXJldHVybiAwOworCisJKHZvaWQpc3RybGNweSh1dGZpbGUsIGZuYW1lLCBzaXplb2YodXRmaWxlKSk7CisJZW5kdXRlbnQoKTsKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvYXNzZXJ0aW9ucy5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5jbHVkZS9pc2MvYXNzZXJ0aW9ucy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL2Fzc2VydGlvbnMuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5jbHVkZS9pc2MvYXNzZXJ0aW9ucy5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL2RzdC5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5jbHVkZS9pc2MvZHN0LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvZHN0LmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luY2x1ZGUvaXNjL2RzdC5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL2V2ZW50bGliLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlL2lzYy9ldmVudGxpYi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL2V2ZW50bGliLmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luY2x1ZGUvaXNjL2V2ZW50bGliLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvaGVhcC5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5jbHVkZS9pc2MvaGVhcC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL2hlYXAuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5jbHVkZS9pc2MvaGVhcC5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL2xpc3QuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luY2x1ZGUvaXNjL2xpc3QuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9saXN0LmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luY2x1ZGUvaXNjL2xpc3QuaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9tZW1jbHVzdGVyLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlL2lzYy9tZW1jbHVzdGVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvbWVtY2x1c3Rlci5oCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlL2lzYy9tZW1jbHVzdGVyLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2luY2x1ZGUvcmVzb2x2X210LmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlL3Jlc29sdl9tdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYThkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmNsdWRlL3Jlc29sdl9tdC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCSROZXRCU0Q6IHJlc29sdl9tdC5oLHYgMS4xLjEuMyAyMDA5LzA0LzEyIDE2OjM1OjQ0IGNocmlzdG9zIEV4cCAkCSovCisKKyNpZm5kZWYgX1JFU09MVl9NVF9ICisjZGVmaW5lIF9SRVNPTFZfTVRfSAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2luY2x1ZGUgPHJlc29sdi5oPgorCisvKiBBY2Nlc3MgZnVuY3Rpb25zIGZvciB0aGUgbGlicmVzb2x2IHByaXZhdGUgaW50ZXJmYWNlICovCisKK2ludAlfX3Jlc19lbmFibGVfbXQodm9pZCk7CitpbnQJX19yZXNfZGlzYWJsZV9tdCh2b2lkKTsKKworLyogUGVyLXRocmVhZCBjb250ZXh0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKK2ludAlub19ob3N0c19mYWxsYmFja19wcml2YXRlOworaW50CXJldHJ5X3NhdmU7CitpbnQJcmV0cnlfcHJpdmF0ZTsKK2NoYXIJaW5ldF9uc2FwX250b2FfdG1wYnVmWzI1NSozXTsKK2NoYXIJc3ltX250b3NfdW5uYW1lWzIwXTsKK2NoYXIJc3ltX250b3BfdW5uYW1lWzIwXTsKK2NoYXIJcF9vcHRpb25fbmJ1Zls0MF07CitjaGFyCXBfdGltZV9uYnVmWzQwXTsKK2NoYXIJcHJlY3NpemVfbnRvYV9yZXRidWZbc2l6ZW9mICI5MDAwMDAwMC4wMCJdOworY2hhcglsb2NfbnRvYV90bXBidWZbc2l6ZW9mCisiMTAwMCA2MCA2MC4wMDAgTiAxMDAwIDYwIDYwLjAwMCBXIC0xMjM0NTY3OC4wMG0gOTAwMDAwMDAuMDBtIDkwMDAwMDAwLjAwbSA5MDAwMDAwMC4wMG0iXTsKK2NoYXIJcF9zZWNzdG9kYXRlX291dHB1dFsxNV07Cit9IG10Y3R4cmVzX3Q7CisKKy8qIFRocmVhZC1zcGVjaWZpYyBkYXRhIChUU0QpICovCisKK210Y3R4cmVzX3QJKl9fX210Y3R4cmVzKHZvaWQpOworI2RlZmluZSBtdGN0eHJlcwkoX19fbXRjdHhyZXMoKSkKKworLyogVmFyaW91cyBzdGF0aWMgZGF0YSB0aGF0IHNob3VsZCBiZSBUU0QgKi8KKworI2RlZmluZSBzeW1fbnRvc191bm5hbWUJCShtdGN0eHJlcy0+c3ltX250b3NfdW5uYW1lKQorI2RlZmluZSBzeW1fbnRvcF91bm5hbWUJCShtdGN0eHJlcy0+c3ltX250b3BfdW5uYW1lKQorI2RlZmluZSBpbmV0X25zYXBfbnRvYV90bXBidWYJKG10Y3R4cmVzLT5pbmV0X25zYXBfbnRvYV90bXBidWYpCisjZGVmaW5lIHBfb3B0aW9uX25idWYJCShtdGN0eHJlcy0+cF9vcHRpb25fbmJ1ZikKKyNkZWZpbmUgcF90aW1lX25idWYJCShtdGN0eHJlcy0+cF90aW1lX25idWYpCisjZGVmaW5lIHByZWNzaXplX250b2FfcmV0YnVmCShtdGN0eHJlcy0+cHJlY3NpemVfbnRvYV9yZXRidWYpCisjZGVmaW5lIGxvY19udG9hX3RtcGJ1ZgkJKG10Y3R4cmVzLT5sb2NfbnRvYV90bXBidWYpCisjZGVmaW5lIHBfc2Vjc3RvZGF0ZV9vdXRwdXQJKG10Y3R4cmVzLT5wX3NlY3N0b2RhdGVfb3V0cHV0KQorCisjZW5kaWYgLyogX1JFU09MVl9NVF9IICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pbmV0L25zYXBfYWRkci5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5ldC9uc2FwX2FkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjMzMjA1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaW5ldC9uc2FwX2FkZHIuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoJJE5ldEJTRDogbnNhcF9hZGRyLmMsdiAxLjYgMjAwOS8wNC8xMiAxNzowNzoxNyBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zYXBfYWRkci5jLHYgMS41IDIwMDUvMDcvMjggMDY6NTE6NDggbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBuc2FwX2FkZHIuYyx2IDEuNiAyMDA5LzA0LzEyIDE3OjA3OjE3IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlICJwb3J0X2JlZm9yZS5oIgorCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNpbmNsdWRlIDxyZXNvbHZfbXQuaD4KKworI2luY2x1ZGUgInBvcnRfYWZ0ZXIuaCIKKworI2lmZGVmIF9fd2Vha19hbGlhcworX193ZWFrX2FsaWFzKGluZXRfbnNhcF9hZGRyLF9pbmV0X25zYXBfYWRkcikKK19fd2Vha19hbGlhcyhpbmV0X25zYXBfbnRvYSxfaW5ldF9uc2FwX250b2EpCisjZW5kaWYKKworc3RhdGljIGNoYXIKK3h0b2IoaW50IGMpIHsKKwlyZXR1cm4gKGMgLSAoKChjID49ICcwJykgJiYgKGMgPD0gJzknKSkgPyAnMCcgOiAnNycpKTsKK30KKwordV9pbnQKK2luZXRfbnNhcF9hZGRyKGNvbnN0IGNoYXIgKmFzY2lpLCB1X2NoYXIgKmJpbmFyeSwgaW50IG1heGxlbikgeworCXVfY2hhciBjLCBuaWI7CisJdV9pbnQgbGVuID0gMDsKKworCV9ESUFHQVNTRVJUKGFzY2lpICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKGJpbmFyeSAhPSBOVUxMKTsKKworCWlmIChhc2NpaVswXSAhPSAnMCcgfHwgKGFzY2lpWzFdICE9ICd4JyAmJiBhc2NpaVsxXSAhPSAnWCcpKQorCQlyZXR1cm4gKDApOworCWFzY2lpICs9IDI7CisKKwl3aGlsZSAoKGMgPSAqYXNjaWkrKykgIT0gJ1wwJyAmJiBsZW4gPCAodV9pbnQpbWF4bGVuKSB7CisJCWlmIChjID09ICcuJyB8fCBjID09ICcrJyB8fCBjID09ICcvJykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlzYXNjaWkoYykpCisJCQlyZXR1cm4gKDApOworCQlpZiAoaXNsb3dlcihjKSkKKwkJCWMgPSB0b3VwcGVyKGMpOworCQlpZiAoaXN4ZGlnaXQoYykpIHsKKwkJCW5pYiA9IHh0b2IoYyk7CisJCQljID0gKmFzY2lpKys7CisJCQlpZiAoYyAhPSAnXDAnKSB7CisJCQkJYyA9IHRvdXBwZXIoYyk7CisJCQkJaWYgKGlzeGRpZ2l0KGMpKSB7CisJCQkJCSpiaW5hcnkrKyA9IChuaWIgPDwgNCkgfCB4dG9iKGMpOworCQkJCQlsZW4rKzsKKwkJCQl9IGVsc2UKKwkJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlyZXR1cm4gKDApOworCQl9CisJCWVsc2UKKwkJCXJldHVybiAoMCk7CisJfQorCXJldHVybiAobGVuKTsKK30KKworY2hhciAqCitpbmV0X25zYXBfbnRvYShpbnQgYmlubGVuLCBjb25zdCB1X2NoYXIgKmJpbmFyeSwgY2hhciAqYXNjaWkpIHsKKwlpbnQgbmliOworCWludCBpOworCWNoYXIgKnRtcGJ1ZiA9IGluZXRfbnNhcF9udG9hX3RtcGJ1ZjsKKwljaGFyICpzdGFydDsKKworCV9ESUFHQVNTRVJUKGJpbmFyeSAhPSBOVUxMKTsKKworCWlmIChhc2NpaSkKKwkJc3RhcnQgPSBhc2NpaTsKKwllbHNlIHsKKwkJYXNjaWkgPSB0bXBidWY7CisJCXN0YXJ0ID0gdG1wYnVmOworCX0KKworCSphc2NpaSsrID0gJzAnOworCSphc2NpaSsrID0gJ3gnOworCisJaWYgKGJpbmxlbiA+IDI1NSkKKwkJYmlubGVuID0gMjU1OworCisJZm9yIChpID0gMDsgaSA8IGJpbmxlbjsgaSsrKSB7CisJCW5pYiA9ICh1X2ludDMyX3QpKmJpbmFyeSA+PiA0OworCQkqYXNjaWkrKyA9IG5pYiArIChuaWIgPCAxMCA/ICcwJyA6ICc3Jyk7CisJCW5pYiA9ICpiaW5hcnkrKyAmIDB4MGY7CisJCSphc2NpaSsrID0gbmliICsgKG5pYiA8IDEwID8gJzAnIDogJzcnKTsKKwkJaWYgKCgoaSAlIDIpID09IDAgJiYgKGkgKyAxKSA8IGJpbmxlbikpCisJCQkqYXNjaWkrKyA9ICcuJzsKKwl9CisJKmFzY2lpID0gJ1wwJzsKKwlyZXR1cm4gKHN0YXJ0KTsKK30KKworLyohIFxmaWxlICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2lzYy9ldl9zdHJlYW1zLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pc2MvZXZfc3RyZWFtcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2lzYy9ldl9zdHJlYW1zLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2lzYy9ldl9zdHJlYW1zLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3RpbWVycy5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaXNjL2V2X3RpbWVycy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2lzYy9ldl90aW1lcnMuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvaXNjL2V2X3RpbWVycy5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2lzYy9ldmVudGxpYl9wLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9pc2MvZXZlbnRsaWJfcC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2lzYy9ldmVudGxpYl9wLmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL2lzYy9ldmVudGxpYl9wLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvY2NsYXNzLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9jY2xhc3MuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9jY2xhc3MuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvY2NsYXNzLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvY25hbWUuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L2NuYW1lLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvY25hbWUuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvY25hbWUuaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9lbmdpbmUuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L2VuZ2luZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L2VuZ2luZS5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9lbmdpbmUuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdjb21wLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9yZWdjb21wLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnY29tcC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9yZWdjb21wLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZXJyb3IuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3JlZ2Vycm9yLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZXJyb3IuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvcmVnZXJyb3IuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdleDIuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3JlZ2V4Mi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2V4Mi5oCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9yZWdleDIuaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdleGVjLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9yZWdleGVjLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZXhlYy5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC9yZWdleGVjLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZnJlZS5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvcmVnZnJlZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2ZyZWUuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVnZXgvcmVnZnJlZS5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3V0aWxzLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9yZWdleC91dGlscy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3V0aWxzLmgKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3JlZ2V4L3V0aWxzLmgKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3Jlc29sdi9tdGN0eHJlcy5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvcmVzb2x2L210Y3R4cmVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzMjgxYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3Jlc29sdi9tdGN0eHJlcy5jCkBAIC0wLDAgKzEsMTMwIEBACisvKgkkTmV0QlNEOiBtdGN0eHJlcy5jLHYgMS40IDIwMDcvMDMvMzAgMjA6NDA6NTIgZ2hlbiBFeHAgJAkqLworCisjaW5jbHVkZSA8cG9ydF9iZWZvcmUuaD4KKyNpZmRlZiBET19QVEhSRUFEUworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxyZXNvbHZfbXQuaD4KKyNpbmNsdWRlIDxwb3J0X2FmdGVyLmg+CisKKyNpZmRlZiBET19QVEhSRUFEUworc3RhdGljIHB0aHJlYWRfa2V5X3QJa2V5Oworc3RhdGljIGludAkJbXRfa2V5X2luaXRpYWxpemVkID0gMDsKKworc3RhdGljIGludAkJX19yZXNfaW5pdF9jdHgodm9pZCk7CitzdGF0aWMgdm9pZAkJX19yZXNfZGVzdHJveV9jdHgodm9pZCAqKTsKKworI2lmIGRlZmluZWQoc3VuKSAmJiAhZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEgaW5pdAkoX210Y3R4cmVzX2luaXQpCisjZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgbXRjdHhyZXNfdAlzaGFyZWRjdHg7CisKKyNpZmRlZiBET19QVEhSRUFEUworLyoKKyAqIEluaXRpYWxpemUgdGhlIFRTRCBrZXkuIEJ5IGRvaW5nIHRoaXMgYXQgbGlicmFyeSBsb2FkIHRpbWUsIHdlJ3JlCisgKiBpbXBsaWNpdGx5IHJ1bm5pbmcgd2l0aG91dCBpbnRlcmZlcmVuY2UgZnJvbSBvdGhlciB0aHJlYWRzLCBzbyB0aGVyZSdzCisgKiBubyBuZWVkIGZvciBsb2NraW5nLgorICovCitzdGF0aWMgdm9pZAorX210Y3R4cmVzX2luaXQodm9pZCkgeworCWludCBwdGhyZWFkX2tleWNyZWF0ZV9yZXQ7CisKKwlwdGhyZWFkX2tleWNyZWF0ZV9yZXQgPSBwdGhyZWFkX2tleV9jcmVhdGUoJmtleSwgX19yZXNfZGVzdHJveV9jdHgpOworCWlmIChwdGhyZWFkX2tleWNyZWF0ZV9yZXQgPT0gMCkKKwkJbXRfa2V5X2luaXRpYWxpemVkID0gMTsKK30KKyNlbmRpZgorCisvKgorICogVG8gc3VwcG9ydCBiaW5hcmllcyB0aGF0IHVzZWQgdGhlIHByaXZhdGUgTVQtc2FmZSBpbnRlcmZhY2UgaW4KKyAqIFNvbGFyaXMgOCwgd2Ugc3RpbGwgbmVlZCB0byBwcm92aWRlIHRoZSBfX3Jlc19lbmFibGVfbXQoKQorICogYW5kIF9fcmVzX2Rpc2FibGVfbXQoKSBlbnRyeSBwb2ludHMuIFRoZXkncmUgZG8tbm90aGluZyByb3V0aW5lcy4KKyAqLworaW50CitfX3Jlc19lbmFibGVfbXQodm9pZCkgeworCXJldHVybiAoLTEpOworfQorCitpbnQKK19fcmVzX2Rpc2FibGVfbXQodm9pZCkgeworCXJldHVybiAoMCk7Cit9CisKKyNpZmRlZiBET19QVEhSRUFEUworc3RhdGljIGludAorX19yZXNfaW5pdF9jdHgodm9pZCkgeworCisJbXRjdHhyZXNfdAkqbXQ7CisJaW50CQlyZXQ7CisKKworCWlmIChwdGhyZWFkX2dldHNwZWNpZmljKGtleSkgIT0gMCkgeworCQkvKiBBbHJlYWR5IGV4aXN0cyAqLworCQlyZXR1cm4gKDApOworCX0KKworCWlmICgobXQgPSBtYWxsb2Moc2l6ZW9mIChtdGN0eHJlc190KSkpID09IDApIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAoLTEpOworCX0KKworCW1lbXNldChtdCwgMCwgc2l6ZW9mIChtdGN0eHJlc190KSk7CisKKwlpZiAoKHJldCA9IHB0aHJlYWRfc2V0c3BlY2lmaWMoa2V5LCBtdCkpICE9IDApIHsKKwkJZnJlZShtdCk7CisJCWVycm5vID0gcmV0OworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorX19yZXNfZGVzdHJveV9jdHgodm9pZCAqdmFsdWUpIHsKKworCW10Y3R4cmVzX3QJKm10ID0gKG10Y3R4cmVzX3QgKil2YWx1ZTsKKworCWlmIChtdCAhPSAwKQorCQlmcmVlKG10KTsKK30KKyNlbmRpZgorCittdGN0eHJlc190ICoKK19fX210Y3R4cmVzKHZvaWQpIHsKKyNpZmRlZiBET19QVEhSRUFEUworCW10Y3R4cmVzX3QJKm10OworCisJLyoKKwkgKiBUaGlzIGlmIGNsYXVzZSBzaG91bGQgb25seSBiZSBleGVjdXRlZCBpZiB3ZSBhcmUgbGlua2luZworCSAqIHN0YXRpY2FsbHkuICBXaGVuIGxpbmtlZCBkeW5hbWljYWxseSBfbXRjdHhyZXNfaW5pdCgpIHNob3VsZAorCSAqIGJlIGNhbGxlZCBhdCBiaW5kaW5nIHRpbWUgZHVlIHRoZSAjcHJhZ21hIGFib3ZlLgorCSAqLworCWlmICghbXRfa2V5X2luaXRpYWxpemVkKSB7CisJCXN0YXRpYyBwdGhyZWFkX211dGV4X3Qga2V5bG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisgICAgICAgICAgICAgICAgaWYgKHB0aHJlYWRfbXV0ZXhfbG9jaygma2V5bG9jaykgPT0gMCkgeworCQkJX210Y3R4cmVzX2luaXQoKTsKKwkJCSh2b2lkKSBwdGhyZWFkX211dGV4X3VubG9jaygma2V5bG9jayk7CisJCX0KKwl9CisKKwkvKgorCSAqIElmIHdlIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBpbiB0aGlzIHRocmVhZCByZXR1cm4gdGhlIGV4aXN0aW5nCisJICogY29udGV4dC4gIE90aGVyd2lzZSByZWNyZWF0IGEgbmV3IGNvbnRleHQgYW5kIHJldHVybiBpdC4gIElmCisJICogdGhhdCBmYWlscyByZXR1cm4gYSBnbG9iYWwgY29udGV4dC4KKwkgKi8KKwlpZiAobXRfa2V5X2luaXRpYWxpemVkKSB7CisJCWlmICgoKG10ID0gcHRocmVhZF9nZXRzcGVjaWZpYyhrZXkpKSAhPSAwKSB8fAorCQkgICAgKF9fcmVzX2luaXRfY3R4KCkgPT0gMCAmJgorCQkgICAgIChtdCA9IHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KSkgIT0gMCkpIHsKKwkJCXJldHVybiAobXQpOworCQl9CisJfQorI2VuZGlmCisJcmV0dXJuICgmc2hhcmVkY3R4KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL19yYW5kNDguYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9fcmFuZDQ4LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL19yYW5kNDguYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL19yYW5kNDguYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvYnNlYXJjaC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2JzZWFyY2guYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvYnNlYXJjaC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvYnNlYXJjaC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9kaXYuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9kaXYuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvZGl2LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9kaXYuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvZHJhbmQ0OC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2RyYW5kNDguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvZHJhbmQ0OC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvZHJhbmQ0OC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9lcmFuZDQ4LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvZXJhbmQ0OC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9lcmFuZDQ4LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9lcmFuZDQ4LmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9pbnNxdWUuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9pbnNxdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTAyMGFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2luc3F1ZS5jCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAxOTkzIEpvaG4gQnJlemFrCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiBpbnNxdWUuYyx2IDEuMyAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHNlYXJjaC5oPgorCitzdHJ1Y3QgcWVsZW0geworICAgICAgICBzdHJ1Y3QgcWVsZW0gKnFfZm9ydzsKKyAgICAgICAgc3RydWN0IHFlbGVtICpxX2JhY2s7Cit9OworCit2b2lkCitpbnNxdWUodm9pZCAqZW50cnksIHZvaWQgKnByZWQpCit7CisJc3RydWN0IHFlbGVtICplID0gKHN0cnVjdCBxZWxlbSAqKSBlbnRyeTsKKwlzdHJ1Y3QgcWVsZW0gKnAgPSAoc3RydWN0IHFlbGVtICopIHByZWQ7CisKKwlfRElBR0FTU0VSVChlICE9IDApOworCisJZS0+cV9iYWNrID0gcDsKKwlpZiAocCkgeworCQllLT5xX2ZvcncgPSBwLT5xX2Zvcnc7CisJCWlmIChwLT5xX2ZvcncpCisJCQlwLT5xX2ZvcnctPnFfYmFjayA9IGU7CisJCXAtPnFfZm9ydyA9IGU7CisJfSBlbHNlCisJCWUtPnFfZm9ydyA9IDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9qcmFuZDQ4LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvanJhbmQ0OC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9qcmFuZDQ4LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9qcmFuZDQ4LmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2xkaXYuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9sZGl2LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2xkaXYuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2xkaXYuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbGxkaXYuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9sbGRpdi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9sbGRpdi5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbGxkaXYuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbHJhbmQ0OC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL2xyYW5kNDguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbHJhbmQ0OC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbHJhbmQ0OC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9tcmFuZDQ4LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvbXJhbmQ0OC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9tcmFuZDQ4LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9tcmFuZDQ4LmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL25yYW5kNDguYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9ucmFuZDQ4LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL25yYW5kNDguYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL25yYW5kNDguYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3JhbmRfci5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3JhbmRfci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MmIyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvcmFuZF9yLmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE5ldEJTRDogcmFuZF9yLmMsdiAxLjYgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY2hhciAqc2Njc2lkID0gImZyb206IEAoIylyYW5kLmMJNS42IChCZXJrZWxleSkgNi8yNC85MSI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmFuZF9yLmMsdiAxLjYgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2ludAorcmFuZF9yKHVuc2lnbmVkIGludCAqc2VlZCkKK3sKKwlfRElBR0FTU0VSVChzZWVkICE9IE5VTEwpOworCisJcmV0dXJuICgoKnNlZWQgPSAqc2VlZCAqIDExMDM1MTUyNDUgKyAxMjM0NSkgJiBSQU5EX01BWCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9yZWFsbG9jYXJyLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvcmVhbGxvY2Fyci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9yZWFsbG9jYXJyLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9yZWFsbG9jYXJyLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9yZW1xdWUuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9yZW1xdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDYwYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3JlbXF1ZS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChjKSAxOTkzIEpvaG4gQnJlemFrCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiAgYXJlIG1ldDoKKyAqICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiByZW1xdWUuYyx2IDEuMyAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHNlYXJjaC5oPgorCitzdHJ1Y3QgcWVsZW0geworICAgICAgICBzdHJ1Y3QgcWVsZW0gKnFfZm9ydzsKKyAgICAgICAgc3RydWN0IHFlbGVtICpxX2JhY2s7Cit9OworCit2b2lkCityZW1xdWUodm9pZCAqZWxlbWVudCkKK3sKKwlzdHJ1Y3QgcWVsZW0gKmUgPSAoc3RydWN0IHFlbGVtICopIGVsZW1lbnQ7CisKKwlfRElBR0FTU0VSVChlICE9IDApOworCisJaWYgKGUtPnFfZm9ydykKKwkJZS0+cV9mb3J3LT5xX2JhY2sgPSBlLT5xX2JhY2s7CisJaWYgKGUtPnFfYmFjaykKKwkJZS0+cV9iYWNrLT5xX2ZvcncgPSBlLT5xX2Zvcnc7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9zZWVkNDguYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9zZWVkNDguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvc2VlZDQ4LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0ZGxpYi9zZWVkNDguYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvc3JhbmQ0OC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RkbGliL3NyYW5kNDguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvc3JhbmQ0OC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdGRsaWIvc3JhbmQ0OC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9tZW1jY3B5LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdHJpbmcvbWVtY2NweS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9tZW1jY3B5LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0cmluZy9tZW1jY3B5LmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RyaW5nL3N0cmNhc2VzdHIuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0cmluZy9zdHJjYXNlc3RyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RyaW5nL3N0cmNhc2VzdHIuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNhc2VzdHIuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdHJpbmcvc3RyY29sbC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNvbGwuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdHJpbmcvc3RyY29sbC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdHJpbmcvc3RyY29sbC5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJ4ZnJtLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWIvbGliYy9zdHJpbmcvc3RyeGZybS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJ4ZnJtLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYi9saWJjL3N0cmluZy9zdHJ4ZnJtLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvdW5pc3RkL2tpbGxwZy5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3VuaXN0ZC9raWxscGcuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1uZXRic2QvbGliL2xpYmMvdW5pc3RkL2tpbGxwZy5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2NvbXBhdC00My9jcmVhdC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9jb21wYXQtNDMvY3JlYXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2MGJlYS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2NvbXBhdC00My9jcmVhdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoJJE5ldEJTRDogY3JlYXQuYyx2IDEuMTAgMjAwMy8wOC8wNyAxNjo0MjozOSBhZ2MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLSNpZiAwCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpY3JlYXQuYwk4LjEgKEJlcmtlbGV5KSA2LzIvOTMiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGNyZWF0LmMsdiAxLjEwIDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0KLWludAotY3JlYXQoY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpCi17Ci0KLQlfRElBR0FTU0VSVChwYXRoICE9IE5VTEwpOwotCi0JcmV0dXJuKG9wZW4ocGF0aCwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCBtb2RlKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9zZXRqbXBlcnIuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3NldGptcGVyci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjE0MzJlLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3NldGptcGVyci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoJJE5ldEJTRDogc2V0am1wZXJyLmMsdiAxLjggMjAxMi8wNi8yNCAxNToyNjowMyBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTgwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzZXRqbXBlcnIuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IHNldGptcGVyci5jLHYgMS44IDIwMTIvMDYvMjQgMTU6MjY6MDMgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotLyoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSBsb25nam1wKCkgd2hlbiBhbiBlcnJvciBvY2N1cnMuCi0gKiBQcm9ncmFtcyB0aGF0IHdpc2ggdG8gZXhpdCBncmFjZWZ1bGx5IGZyb20gdGhpcyBlcnJvciBtYXkKLSAqIHdyaXRlIHRoZWlyIG93biB2ZXJzaW9ucy4KLSAqIElmIHRoaXMgcm91dGluZSByZXR1cm5zLCB0aGUgcHJvZ3JhbSBpcyBhYm9ydGVkLgotICovCi0KLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotdm9pZAotbG9uZ2ptcGVycm9yKHZvaWQpCi17Ci0jZGVmaW5lCUVSUk1TRwkibG9uZ2ptcCBib3RjaC5cbiIKLQkodm9pZCl3cml0ZShTVERFUlJfRklMRU5PLCBFUlJNU0csIHNpemVvZihFUlJNU0cpIC0gMSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9udG9hLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9udG9hLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZDAyM2IuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmV0L2luZXRfbnRvYS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoJJE5ldEJTRDogaW5ldF9udG9hLmMsdiAxLjIgMjAxMi8wMy8xMyAyMToxMzozOCBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylpbmV0X250b2EuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGluZXRfbnRvYS5jLHYgMS4yIDIwMTIvMDMvMTMgMjE6MTM6MzggY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmZGVmIF9fd2Vha19hbGlhcwotX193ZWFrX2FsaWFzKGluZXRfbnRvYSxfaW5ldF9udG9hKQotI2VuZGlmCi0KLS8qCi0gKiBDb252ZXJ0IG5ldHdvcmstZm9ybWF0IGludGVybmV0IGFkZHJlc3MKLSAqIHRvIGJhc2UgMjU2IGQuZC5kLmQgcmVwcmVzZW50YXRpb24uCi0gKi8KLS8qY29uc3QqLyBjaGFyICoKLWluZXRfbnRvYShzdHJ1Y3QgaW5fYWRkciBpbikgewotCXN0YXRpYyBjaGFyIHJldFsxOF07Ci0KLQlzdHJsY3B5KHJldCwgIltpbmV0X250b2EgZXJyb3JdIiwgc2l6ZW9mKHJldCkpOwotCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVCwgJmluLCByZXQsIChzb2NrbGVuX3Qpc2l6ZW9mIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X250b3AuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X250b3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBjNTVhOC4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9udG9wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLyoJJE5ldEJTRDogaW5ldF9udG9wLmMsdiAxLjkgMjAxMi8wMy8yMCAxNzowODoxMyBtYXR0IEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi0jaWYgMAotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogaW5ldF9udG9wLmMsdiAxLjUgMjAwNS8xMS8wMyAyMjo1OTo1MiBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGluZXRfbnRvcC5jLHYgMS45IDIwMTIvMDMvMjAgMTc6MDg6MTMgbWF0dCBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSAicG9ydF9iZWZvcmUuaCIKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLQotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgInBvcnRfYWZ0ZXIuaCIKLQotI2lmZGVmIF9fd2Vha19hbGlhcwotX193ZWFrX2FsaWFzKGluZXRfbnRvcCxfaW5ldF9udG9wKQotI2VuZGlmCi0KLS8qJQotICogV0FSTklORzogRG9uJ3QgZXZlbiBjb25zaWRlciB0cnlpbmcgdG8gY29tcGlsZSB0aGlzIG9uIGEgc3lzdGVtIHdoZXJlCi0gKiBzaXplb2YoaW50KSA8IDQuICBzaXplb2YoaW50KSA+IDQgaXMgZmluZTsgYWxsIHRoZSB3b3JsZCdzIG5vdCBhIFZBWC4KLSAqLwotCi1zdGF0aWMgY29uc3QgY2hhciAqaW5ldF9udG9wNChjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSk7Ci1zdGF0aWMgY29uc3QgY2hhciAqaW5ldF9udG9wNihjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSk7Ci0KLS8qIGNoYXIgKgotICogaW5ldF9udG9wKGFmLCBzcmMsIGRzdCwgc2l6ZSkKLSAqCWNvbnZlcnQgYSBuZXR3b3JrIGZvcm1hdCBhZGRyZXNzIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQuCi0gKiByZXR1cm46Ci0gKglwb2ludGVyIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQgYWRkcmVzcyAoYGRzdCcpLCBvciBOVUxMIChzZWUgZXJybm8pLgotICogYXV0aG9yOgotICoJUGF1bCBWaXhpZSwgMTk5Ni4KLSAqLwotY29uc3QgY2hhciAqCi1pbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc29ja2xlbl90IHNpemUpCi17Ci0KLQlfRElBR0FTU0VSVChzcmMgIT0gTlVMTCk7Ci0JX0RJQUdBU1NFUlQoZHN0ICE9IE5VTEwpOwotCi0Jc3dpdGNoIChhZikgewotCWNhc2UgQUZfSU5FVDoKLQkJcmV0dXJuIChpbmV0X250b3A0KHNyYywgZHN0LCBzaXplKSk7Ci0JY2FzZSBBRl9JTkVUNjoKLQkJcmV0dXJuIChpbmV0X250b3A2KHNyYywgZHN0LCBzaXplKSk7Ci0JZGVmYXVsdDoKLQkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCS8qIE5PVFJFQUNIRUQgKi8KLX0KLQotLyogY29uc3QgY2hhciAqCi0gKiBpbmV0X250b3A0KHNyYywgZHN0LCBzaXplKQotICoJZm9ybWF0IGFuIElQdjQgYWRkcmVzcywgbW9yZSBvciBsZXNzIGxpa2UgaW5ldF9udG9hKCkKLSAqIHJldHVybjoKLSAqCWBkc3QnIChhcyBhIGNvbnN0KQotICogbm90ZXM6Ci0gKgkoMSkgdXNlcyBubyBzdGF0aWNzCi0gKgkoMikgdGFrZXMgYSB1X2NoYXIqIG5vdCBhbiBpbl9hZGRyIGFzIGlucHV0Ci0gKiBhdXRob3I6Ci0gKglQYXVsIFZpeGllLCAxOTk2LgotICovCi1zdGF0aWMgY29uc3QgY2hhciAqCi1pbmV0X250b3A0KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNvY2tsZW5fdCBzaXplKQotewotCWNoYXIgdG1wW3NpemVvZiAiMjU1LjI1NS4yNTUuMjU1Il07Ci0JaW50IGw7Ci0KLQlfRElBR0FTU0VSVChzcmMgIT0gTlVMTCk7Ci0JX0RJQUdBU1NFUlQoZHN0ICE9IE5VTEwpOwotCi0JbCA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIldS4ldS4ldS4ldSIsCi0JICAgIHNyY1swXSwgc3JjWzFdLCBzcmNbMl0sIHNyY1szXSk7Ci0JaWYgKGwgPD0gMCB8fCAoc29ja2xlbl90KSBsID49IHNpemUpIHsKLQkJZXJybm8gPSBFTk9TUEM7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOwotCXJldHVybiAoZHN0KTsKLX0KLQotLyogY29uc3QgY2hhciAqCi0gKiBpbmV0X250b3A2KHNyYywgZHN0LCBzaXplKQotICoJY29udmVydCBJUHY2IGJpbmFyeSBhZGRyZXNzIGludG8gcHJlc2VudGF0aW9uIChwcmludGFibGUpIGZvcm1hdAotICogYXV0aG9yOgotICoJUGF1bCBWaXhpZSwgMTk5Ni4KLSAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgotaW5ldF9udG9wNihjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSkKLXsKLQkvKgotCSAqIE5vdGUgdGhhdCBpbnQzMl90IGFuZCBpbnQxNl90IG5lZWQgb25seSBiZSAiYXQgbGVhc3QiIGxhcmdlIGVub3VnaAotCSAqIHRvIGNvbnRhaW4gYSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuICBPbiBzb21lIHN5c3RlbXMsIGxpa2UKLQkgKiBDcmF5cywgdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBhbiBpbnRlZ2VyIHZhcmlhYmxlIHdpdGggMTYgYml0cy4KLQkgKiBLZWVwIHRoaXMgaW4gbWluZCBpZiB5b3UgdGhpbmsgdGhpcyBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNvZGVkCi0JICogdG8gdXNlIHBvaW50ZXIgb3ZlcmxheXMuICBBbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgotCSAqLwotCWNoYXIgdG1wW3NpemVvZiAiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6MjU1LjI1NS4yNTUuMjU1Il07Ci0JY2hhciAqdHAsICplcDsKLQlzdHJ1Y3QgeyBpbnQgYmFzZSwgbGVuOyB9IGJlc3QsIGN1cjsKLQl1X2ludCB3b3Jkc1tOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaXTsKLQlpbnQgaTsKLQlpbnQgYWR2YW5jZTsKLQotCV9ESUFHQVNTRVJUKHNyYyAhPSBOVUxMKTsKLQlfRElBR0FTU0VSVChkc3QgIT0gTlVMTCk7Ci0KLQkvKgotCSAqIFByZXByb2Nlc3M6Ci0JICoJQ29weSB0aGUgaW5wdXQgKGJ5dGV3aXNlKSBhcnJheSBpbnRvIGEgd29yZHdpc2UgYXJyYXkuCi0JICoJRmluZCB0aGUgbG9uZ2VzdCBydW4gb2YgMHgwMCdzIGluIHNyY1tdIGZvciA6OiBzaG9ydGhhbmRpbmcuCi0JICovCi0JbWVtc2V0KHdvcmRzLCAnXDAnLCBzaXplb2Ygd29yZHMpOwotCWZvciAoaSA9IDA7IGkgPCBOU19JTjZBRERSU1o7IGkrKykKLQkJd29yZHNbaSAvIDJdIHw9IChzcmNbaV0gPDwgKCgxIC0gKGkgJSAyKSkgPDwgMykpOwotCWJlc3QuYmFzZSA9IC0xOwotCWJlc3QubGVuID0gMDsKLQljdXIuYmFzZSA9IC0xOwotCWN1ci5sZW4gPSAwOwotCWZvciAoaSA9IDA7IGkgPCAoTlNfSU42QUREUlNaIC8gTlNfSU5UMTZTWik7IGkrKykgewotCQlpZiAod29yZHNbaV0gPT0gMCkgewotCQkJaWYgKGN1ci5iYXNlID09IC0xKQotCQkJCWN1ci5iYXNlID0gaSwgY3VyLmxlbiA9IDE7Ci0JCQllbHNlCi0JCQkJY3VyLmxlbisrOwotCQl9IGVsc2UgewotCQkJaWYgKGN1ci5iYXNlICE9IC0xKSB7Ci0JCQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCi0JCQkJCWJlc3QgPSBjdXI7Ci0JCQkJY3VyLmJhc2UgPSAtMTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoY3VyLmJhc2UgIT0gLTEpIHsKLQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCi0JCQliZXN0ID0gY3VyOwotCX0KLQlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGJlc3QubGVuIDwgMikKLQkJYmVzdC5iYXNlID0gLTE7Ci0KLQkvKgotCSAqIEZvcm1hdCB0aGUgcmVzdWx0LgotCSAqLwotCXRwID0gdG1wOwotCWVwID0gdG1wICsgc2l6ZW9mKHRtcCk7Ci0JZm9yIChpID0gMDsgaSA8IChOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaKTsgaSsrKSB7Ci0JCS8qIEFyZSB3ZSBpbnNpZGUgdGhlIGJlc3QgcnVuIG9mIDB4MDAncz8gKi8KLQkJaWYgKGJlc3QuYmFzZSAhPSAtMSAmJiBpID49IGJlc3QuYmFzZSAmJgotCQkgICAgaSA8IChiZXN0LmJhc2UgKyBiZXN0LmxlbikpIHsKLQkJCWlmIChpID09IGJlc3QuYmFzZSkKLQkJCQkqdHArKyA9ICc6JzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIEFyZSB3ZSBmb2xsb3dpbmcgYW4gaW5pdGlhbCBydW4gb2YgMHgwMHMgb3IgYW55IHJlYWwgaGV4PyAqLwotCQlpZiAoaSAhPSAwKSB7Ci0JCQlpZiAodHAgKyAxID49IGVwKQotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkqdHArKyA9ICc6JzsKLQkJfQotCQkvKiBJcyB0aGlzIGFkZHJlc3MgYW4gZW5jYXBzdWxhdGVkIElQdjQ/ICovCi0JCWlmIChpID09IDYgJiYgYmVzdC5iYXNlID09IDAgJiYKLQkJICAgIChiZXN0LmxlbiA9PSA2IHx8Ci0JCSAgICAoYmVzdC5sZW4gPT0gNyAmJiB3b3Jkc1s3XSAhPSAweDAwMDEpIHx8Ci0JCSAgICAoYmVzdC5sZW4gPT0gNSAmJiB3b3Jkc1s1XSA9PSAweGZmZmYpKSkgewotCQkJaWYgKCFpbmV0X250b3A0KHNyYysxMiwgdHAsIChzb2NrbGVuX3QpKGVwIC0gdHApKSkKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJdHAgKz0gc3RybGVuKHRwKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWFkdmFuY2UgPSBzbnByaW50Zih0cCwgKHNpemVfdCkoZXAgLSB0cCksICIleCIsIHdvcmRzW2ldKTsKLQkJaWYgKGFkdmFuY2UgPD0gMCB8fCBhZHZhbmNlID49IGVwIC0gdHApCi0JCQlyZXR1cm4gKE5VTEwpOwotCQl0cCArPSBhZHZhbmNlOwotCX0KLQkvKiBXYXMgaXQgYSB0cmFpbGluZyBydW4gb2YgMHgwMCdzPyAqLwotCWlmIChiZXN0LmJhc2UgIT0gLTEgJiYgKGJlc3QuYmFzZSArIGJlc3QubGVuKSA9PSAKLQkgICAgKE5TX0lONkFERFJTWiAvIE5TX0lOVDE2U1opKSB7Ci0JCWlmICh0cCArIDEgPj0gZXApCi0JCQlyZXR1cm4gKE5VTEwpOwotCQkqdHArKyA9ICc6JzsKLQl9Ci0JaWYgKHRwICsgMSA+PSBlcCkKLQkJcmV0dXJuIChOVUxMKTsKLQkqdHArKyA9ICdcMCc7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBvdmVyZmxvdywgY29weSwgYW5kIHdlJ3JlIGRvbmUuCi0JICovCi0JaWYgKChzaXplX3QpKHRwIC0gdG1wKSA+IHNpemUpIHsKLQkJZXJybm8gPSBFTk9TUEM7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOwotCXJldHVybiAoZHN0KTsKLX0KLQotLyohIFxmaWxlICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9wdG9uLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9wdG9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxZTlhNjkuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmV0L2luZXRfcHRvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEwICswLDAgQEAKLS8qCSROZXRCU0Q6IGluZXRfcHRvbi5jLHYgMS44IDIwMTIvMDMvMTMgMjE6MTM6MzggY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLSNpZiAwCi1zdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBpbmV0X3B0b24uYyx2IDEuNSAyMDA1LzA3LzI4IDA2OjUxOjQ3IG1hcmthIEV4cCI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDogaW5ldF9wdG9uLmMsdiAxLjggMjAxMi8wMy8xMyAyMToxMzozOCBjaHJpc3RvcyBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSAicG9ydF9iZWZvcmUuaCIKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaW5jbHVkZSAicG9ydF9hZnRlci5oIgotCi0jaWZkZWYgX193ZWFrX2FsaWFzCi1fX3dlYWtfYWxpYXMoaW5ldF9wdG9uLF9pbmV0X3B0b24pCi0jZW5kaWYKLQotLyolCi0gKiBXQVJOSU5HOiBEb24ndCBldmVuIGNvbnNpZGVyIHRyeWluZyB0byBjb21waWxlIHRoaXMgb24gYSBzeXN0ZW0gd2hlcmUKLSAqIHNpemVvZihpbnQpIDwgNC4gIHNpemVvZihpbnQpID4gNCBpcyBmaW5lOyBhbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgotICovCi0KLXN0YXRpYyBpbnQJaW5ldF9wdG9uNChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgcHRvbik7Ci1zdGF0aWMgaW50CWluZXRfcHRvbjYoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCk7Ci0KLS8qIGludAotICogaW5ldF9wdG9uKGFmLCBzcmMsIGRzdCkKLSAqCWNvbnZlcnQgZnJvbSBwcmVzZW50YXRpb24gZm9ybWF0ICh3aGljaCB1c3VhbGx5IG1lYW5zIEFTQ0lJIHByaW50YWJsZSkKLSAqCXRvIG5ldHdvcmsgZm9ybWF0ICh3aGljaCBpcyB1c3VhbGx5IHNvbWUga2luZCBvZiBiaW5hcnkgZm9ybWF0KS4KLSAqIHJldHVybjoKLSAqCTEgaWYgdGhlIGFkZHJlc3Mgd2FzIHZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgZmFtaWx5Ci0gKgkwIGlmIHRoZSBhZGRyZXNzIHdhc24ndCB2YWxpZCAoYGRzdCcgaXMgdW50b3VjaGVkIGluIHRoaXMgY2FzZSkKLSAqCS0xIGlmIHNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQgKGBkc3QnIGlzIHVudG91Y2hlZCBpbiB0aGlzIGNhc2UsIHRvbykKLSAqIGF1dGhvcjoKLSAqCVBhdWwgVml4aWUsIDE5OTYuCi0gKi8KLWludAotaW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpCi17Ci0KLQlfRElBR0FTU0VSVChzcmMgIT0gTlVMTCk7Ci0JX0RJQUdBU1NFUlQoZHN0ICE9IE5VTEwpOwotCi0Jc3dpdGNoIChhZikgewotCWNhc2UgQUZfSU5FVDoKLQkJcmV0dXJuIChpbmV0X3B0b240KHNyYywgZHN0LCAxKSk7Ci0JY2FzZSBBRl9JTkVUNjoKLQkJcmV0dXJuIChpbmV0X3B0b242KHNyYywgZHN0KSk7Ci0JZGVmYXVsdDoKLQkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0JCXJldHVybiAoLTEpOwotCX0KLQkvKiBOT1RSRUFDSEVEICovCi19Ci0KLS8qIGludAotICogaW5ldF9wdG9uNChzcmMsIGRzdCwgcHRvbikKLSAqCXdoZW4gbGFzdCBhcmcgaXMgMDogaW5ldF9hdG9uKCkuIHdpdGggaGV4YWRlY2ltYWwsIG9jdGFsIGFuZCBzaG9ydGhhbmQuCi0gKgl3aGVuIGxhc3QgYXJnIGlzIDE6IGluZXRfcHRvbigpLiBkZWNpbWFsIGRvdHRlZC1xdWFkIG9ubHkuCi0gKiByZXR1cm46Ci0gKgkxIGlmIGBzcmMnIGlzIGEgdmFsaWQgaW5wdXQsIGVsc2UgMC4KLSAqIG5vdGljZToKLSAqCWRvZXMgbm90IHRvdWNoIGBkc3QnIHVubGVzcyBpdCdzIHJldHVybmluZyAxLgotICogYXV0aG9yOgotICoJUGF1bCBWaXhpZSwgMTk5Ni4KLSAqLwotc3RhdGljIGludAotaW5ldF9wdG9uNChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgcHRvbikKLXsKLQl1X2ludDMyX3QgdmFsOwotCXVfaW50IGRpZ2l0LCBiYXNlOwotCXB0cmRpZmZfdCBuOwotCXVuc2lnbmVkIGNoYXIgYzsKLQl1X2ludCBwYXJ0c1s0XTsKLQl1X2ludCAqcHAgPSBwYXJ0czsKLQotCV9ESUFHQVNTRVJUKHNyYyAhPSBOVUxMKTsKLQlfRElBR0FTU0VSVChkc3QgIT0gTlVMTCk7Ci0KLQljID0gKnNyYzsKLQlmb3IgKDs7KSB7Ci0JCS8qCi0JCSAqIENvbGxlY3QgbnVtYmVyIHVwIHRvIGBgLicnLgotCQkgKiBWYWx1ZXMgYXJlIHNwZWNpZmllZCBhcyBmb3IgQzoKLQkJICogMHg9aGV4LCAwPW9jdGFsLCBpc2RpZ2l0PWRlY2ltYWwuCi0JCSAqLwotCQlpZiAoIWlzZGlnaXQoYykpCi0JCQlyZXR1cm4gKDApOwotCQl2YWwgPSAwOyBiYXNlID0gMTA7Ci0JCWlmIChjID09ICcwJykgewotCQkJYyA9ICorK3NyYzsKLQkJCWlmIChjID09ICd4JyB8fCBjID09ICdYJykKLQkJCQliYXNlID0gMTYsIGMgPSAqKytzcmM7Ci0JCQllbHNlIGlmIChpc2RpZ2l0KGMpICYmIGMgIT0gJzknKQotCQkJCWJhc2UgPSA4OwotCQl9Ci0JCS8qIGluZXRfcHRvbigpIHRha2VzIGRlY2ltYWwgb25seSAqLwotCQlpZiAocHRvbiAmJiBiYXNlICE9IDEwKQotCQkJcmV0dXJuICgwKTsKLQkJZm9yICg7OykgewotCQkJaWYgKGlzZGlnaXQoYykpIHsKLQkJCQlkaWdpdCA9IGMgLSAnMCc7Ci0JCQkJaWYgKGRpZ2l0ID49IGJhc2UpCi0JCQkJCWJyZWFrOwotCQkJCXZhbCA9ICh2YWwgKiBiYXNlKSArIGRpZ2l0OwotCQkJCWMgPSAqKytzcmM7Ci0JCQl9IGVsc2UgaWYgKGJhc2UgPT0gMTYgJiYgaXN4ZGlnaXQoYykpIHsKLQkJCQlkaWdpdCA9IGMgKyAxMCAtIChpc2xvd2VyKGMpID8gJ2EnIDogJ0EnKTsKLQkJCQlpZiAoZGlnaXQgPj0gMTYpCi0JCQkJCWJyZWFrOwotCQkJCXZhbCA9ICh2YWwgPDwgNCkgfCBkaWdpdDsKLQkJCQljID0gKisrc3JjOwotCQkJfSBlbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGMgPT0gJy4nKSB7Ci0JCQkvKgotCQkJICogSW50ZXJuZXQgZm9ybWF0OgotCQkJICoJYS5iLmMuZAotCQkJICoJYS5iLmMJKHdpdGggYyB0cmVhdGVkIGFzIDE2IGJpdHMpCi0JCQkgKglhLmIJKHdpdGggYiB0cmVhdGVkIGFzIDI0IGJpdHMpCi0JCQkgKglhCSh3aXRoIGEgdHJlYXRlZCBhcyAzMiBiaXRzKQotCQkJICovCi0JCQlpZiAocHAgPj0gcGFydHMgKyAzKQotCQkJCXJldHVybiAoMCk7Ci0JCQkqcHArKyA9IHZhbDsKLQkJCWMgPSAqKytzcmM7Ci0JCX0gZWxzZQotCQkJYnJlYWs7Ci0JfQotCS8qCi0JICogQ2hlY2sgZm9yIHRyYWlsaW5nIGNoYXJhY3RlcnMuCi0JICovCi0JaWYgKGMgIT0gJ1wwJyAmJiAhaXNzcGFjZShjKSkKLQkJcmV0dXJuICgwKTsKLQkvKgotCSAqIENvbmNvY3QgdGhlIGFkZHJlc3MgYWNjb3JkaW5nIHRvCi0JICogdGhlIG51bWJlciBvZiBwYXJ0cyBzcGVjaWZpZWQuCi0JICovCi0JbiA9IHBwIC0gcGFydHMgKyAxOwotCS8qIGluZXRfcHRvbigpIHRha2VzIGRvdHRlZC1xdWFkIG9ubHkuICBpdCBkb2VzIG5vdCB0YWtlIHNob3J0aGFuZC4gKi8KLQlpZiAocHRvbiAmJiBuICE9IDQpCi0JCXJldHVybiAoMCk7Ci0Jc3dpdGNoIChuKSB7Ci0KLQljYXNlIDA6Ci0JCXJldHVybiAoMCk7CQkvKiBpbml0aWFsIG5vbmRpZ2l0ICovCi0KLQljYXNlIDE6CQkJCS8qIGEgLS0gMzIgYml0cyAqLwotCQlicmVhazsKLQotCWNhc2UgMjoJCQkJLyogYS5iIC0tIDguMjQgYml0cyAqLwotCQlpZiAocGFydHNbMF0gPiAweGZmIHx8IHZhbCA+IDB4ZmZmZmZmKQotCQkJcmV0dXJuICgwKTsKLQkJdmFsIHw9IHBhcnRzWzBdIDw8IDI0OwotCQlicmVhazsKLQotCWNhc2UgMzoJCQkJLyogYS5iLmMgLS0gOC44LjE2IGJpdHMgKi8KLQkJaWYgKChwYXJ0c1swXSB8IHBhcnRzWzFdKSA+IDB4ZmYgfHwgdmFsID4gMHhmZmZmKQotCQkJcmV0dXJuICgwKTsKLQkJdmFsIHw9IChwYXJ0c1swXSA8PCAyNCkgfCAocGFydHNbMV0gPDwgMTYpOwotCQlicmVhazsKLQotCWNhc2UgNDoJCQkJLyogYS5iLmMuZCAtLSA4LjguOC44IGJpdHMgKi8KLQkJaWYgKChwYXJ0c1swXSB8IHBhcnRzWzFdIHwgcGFydHNbMl0gfCB2YWwpID4gMHhmZikKLQkJCXJldHVybiAoMCk7Ci0JCXZhbCB8PSAocGFydHNbMF0gPDwgMjQpIHwgKHBhcnRzWzFdIDw8IDE2KSB8IChwYXJ0c1syXSA8PCA4KTsKLQkJYnJlYWs7Ci0JfQotCWlmIChkc3QpIHsKLQkJdmFsID0gaHRvbmwodmFsKTsKLQkJbWVtY3B5KGRzdCwgJnZhbCwgTlNfSU5BRERSU1opOwotCX0KLQlyZXR1cm4gKDEpOwotfQotCi0vKiBpbnQKLSAqIGluZXRfcHRvbjYoc3JjLCBkc3QpCi0gKgljb252ZXJ0IHByZXNlbnRhdGlvbiBsZXZlbCBhZGRyZXNzIHRvIG5ldHdvcmsgb3JkZXIgYmluYXJ5IGZvcm0uCi0gKiByZXR1cm46Ci0gKgkxIGlmIGBzcmMnIGlzIGEgdmFsaWQgW1JGQzE4ODQgMi4yXSBhZGRyZXNzLCBlbHNlIDAuCi0gKiBub3RpY2U6Ci0gKgkoMSkgZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCi0gKgkoMikgOjogaW4gYSBmdWxsIGFkZHJlc3MgaXMgc2lsZW50bHkgaWdub3JlZC4KLSAqIGNyZWRpdDoKLSAqCWluc3BpcmVkIGJ5IE1hcmsgQW5kcmV3cy4KLSAqIGF1dGhvcjoKLSAqCVBhdWwgVml4aWUsIDE5OTYuCi0gKi8KLXN0YXRpYyBpbnQKLWluZXRfcHRvbjYoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciB4ZGlnaXRzX2xbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIiwKLQkJCSAgeGRpZ2l0c191W10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7Ci0JdV9jaGFyIHRtcFtOU19JTjZBRERSU1pdLCAqdHAsICplbmRwLCAqY29sb25wOwotCWNvbnN0IGNoYXIgKnhkaWdpdHMsICpjdXJ0b2s7Ci0JaW50IGNoLCBzZWVuX3hkaWdpdHM7Ci0JdV9pbnQgdmFsOwotCi0JX0RJQUdBU1NFUlQoc3JjICE9IE5VTEwpOwotCV9ESUFHQVNTRVJUKGRzdCAhPSBOVUxMKTsKLQotCW1lbXNldCgodHAgPSB0bXApLCAnXDAnLCBOU19JTjZBRERSU1opOwotCWVuZHAgPSB0cCArIE5TX0lONkFERFJTWjsKLQljb2xvbnAgPSBOVUxMOwotCS8qIExlYWRpbmcgOjogcmVxdWlyZXMgc29tZSBzcGVjaWFsIGhhbmRsaW5nLiAqLwotCWlmICgqc3JjID09ICc6JykKLQkJaWYgKCorK3NyYyAhPSAnOicpCi0JCQlyZXR1cm4gKDApOwotCWN1cnRvayA9IHNyYzsKLQlzZWVuX3hkaWdpdHMgPSAwOwotCXZhbCA9IDA7Ci0Jd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgewotCQljb25zdCBjaGFyICpwY2g7Ci0KLQkJaWYgKChwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX2wpLCBjaCkpID09IE5VTEwpCi0JCQlwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX3UpLCBjaCk7Ci0JCWlmIChwY2ggIT0gTlVMTCkgewotCQkJdmFsIDw8PSA0OwotCQkJdmFsIHw9IChpbnQpKHBjaCAtIHhkaWdpdHMpOwotCQkJaWYgKCsrc2Vlbl94ZGlnaXRzID4gNCkKLQkJCQlyZXR1cm4gKDApOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGNoID09ICc6JykgewotCQkJY3VydG9rID0gc3JjOwotCQkJaWYgKCFzZWVuX3hkaWdpdHMpIHsKLQkJCQlpZiAoY29sb25wKQotCQkJCQlyZXR1cm4gKDApOwotCQkJCWNvbG9ucCA9IHRwOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmICgqc3JjID09ICdcMCcpCi0JCQkJcmV0dXJuICgwKTsKLQkJCWlmICh0cCArIE5TX0lOVDE2U1ogPiBlbmRwKQotCQkJCXJldHVybiAoMCk7Ci0JCQkqdHArKyA9ICh1X2NoYXIpICh2YWwgPj4gOCkgJiAweGZmOwotCQkJKnRwKysgPSAodV9jaGFyKSB2YWwgJiAweGZmOwotCQkJc2Vlbl94ZGlnaXRzID0gMDsKLQkJCXZhbCA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY2ggPT0gJy4nICYmICgodHAgKyBOU19JTkFERFJTWikgPD0gZW5kcCkgJiYKLQkJICAgIGluZXRfcHRvbjQoY3VydG9rLCB0cCwgMSkgPiAwKSB7Ci0JCQl0cCArPSBOU19JTkFERFJTWjsKLQkJCXNlZW5feGRpZ2l0cyA9IDA7Ci0JCQlicmVhazsJLyolPCAnXFwwJyB3YXMgc2VlbiBieSBpbmV0X3B0b240KCkuICovCi0JCX0KLQkJcmV0dXJuICgwKTsKLQl9Ci0JaWYgKHNlZW5feGRpZ2l0cykgewotCQlpZiAodHAgKyBOU19JTlQxNlNaID4gZW5kcCkKLQkJCXJldHVybiAoMCk7Ci0JCSp0cCsrID0gKHVfY2hhcikgKHZhbCA+PiA4KSAmIDB4ZmY7Ci0JCSp0cCsrID0gKHVfY2hhcikgdmFsICYgMHhmZjsKLQl9Ci0JaWYgKGNvbG9ucCAhPSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFNpbmNlIHNvbWUgbWVtbW92ZSgpJ3MgZXJyb25lb3VzbHkgZmFpbCB0byBoYW5kbGUKLQkJICogb3ZlcmxhcHBpbmcgcmVnaW9ucywgd2UnbGwgZG8gdGhlIHNoaWZ0IGJ5IGhhbmQuCi0JCSAqLwotCQljb25zdCBwdHJkaWZmX3QgbiA9IHRwIC0gY29sb25wOwotCQlpbnQgaTsKLQotCQlpZiAodHAgPT0gZW5kcCkKLQkJCXJldHVybiAoMCk7Ci0JCWZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7Ci0JCQllbmRwWy0gaV0gPSBjb2xvbnBbbiAtIGldOwotCQkJY29sb25wW24gLSBpXSA9IDA7Ci0JCX0KLQkJdHAgPSBlbmRwOwotCX0KLQlpZiAodHAgIT0gZW5kcCkKLQkJcmV0dXJuICgwKTsKLQltZW1jcHkoZHN0LCB0bXAsIE5TX0lONkFERFJTWik7Ci0JcmV0dXJuICgxKTsKLX0KLQotLyohIFxmaWxlICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGlvL2dldGRlbGltLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGlvL2dldGRlbGltLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjY2UzNzYuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRkZWxpbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qICROZXRCU0Q6IGdldGRlbGltLmMsdiAxLjEzIDIwMTEvMDcvMjIgMjM6MTI6MzAgam9lcmcgRXhwICQgKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOSBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgotICogYnkgUm95IE1hcnBsZXMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fUkNTSUQoIiROZXRCU0Q6IGdldGRlbGltLmMsdiAxLjEzIDIwMTEvMDcvMjIgMjM6MTI6MzAgam9lcmcgRXhwICQiKTsKLQotI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgotCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJyZWVudHJhbnQuaCIKLSNpbmNsdWRlICJsb2NhbC5oIgotCi0jaWZkZWYgX193ZWFrX2FsaWFzCi1fX3dlYWtfYWxpYXMoZ2V0ZGVsaW0sIF9nZXRkZWxpbSkKLSNlbmRpZgotCi0vKiBNaW5pbXVtIGJ1ZmZlciBzaXplIHdlIGNyZWF0ZS4KLSAqIFRoaXMgc2hvdWxkIGFsbG93IGNvbmZpZyBmaWxlcyB0byBmaXQgaW50byBvdXIgcG93ZXIgb2YgMiBidWZmZXIgZ3Jvd3RoCi0gKiB3aXRob3V0IHRoZSBuZWVkIGZvciBhIHJlYWxsb2MuICovCi0jZGVmaW5lIE1JTkJVRgkxMjgKLQotc3NpemVfdAotX19nZXRkZWxpbShjaGFyICoqX19yZXN0cmljdCBidWYsIHNpemVfdCAqX19yZXN0cmljdCBidWZsZW4sCi0gICAgaW50IHNlcCwgRklMRSAqX19yZXN0cmljdCBmcCkKLXsKLQl1bnNpZ25lZCBjaGFyICpwOwotCXNpemVfdCBsZW4sIG5ld2xlbiwgb2ZmOwotCWNoYXIgKm5ld2I7Ci0KLQlfRElBR0FTU0VSVChmcCAhPSBOVUxMKTsKLQotCWlmIChidWYgPT0gTlVMTCB8fCBidWZsZW4gPT0gTlVMTCkgewotCQllcnJubyA9IEVJTlZBTDsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBJZiBidWYgaXMgTlVMTCwgd2UgaGF2ZSB0byBhc3N1bWUgYSBzaXplIG9mIHplcm8gKi8KLQlpZiAoKmJ1ZiA9PSBOVUxMKQotCQkqYnVmbGVuID0gMDsKLQotCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKLQlvZmYgPSAwOwotCWRvIHsKLQkJLyogSWYgdGhlIGlucHV0IGJ1ZmZlciBpcyBlbXB0eSwgcmVmaWxsIGl0ICovCi0JCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7Ci0JCQlpZiAoX19zZmVycm9yKGZwKSkKLQkJCQlnb3RvIGVycm9yOwotCQkJLyogTm8gZXJyb3IsIHNvIEVPRi4gKi8KLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogU2NhbiB0aHJvdWdoIGxvb2tpbmcgZm9yIHRoZSBzZXBhcmF0b3IgKi8KLQkJcCA9IG1lbWNocihmcC0+X3AsIHNlcCwgKHNpemVfdClmcC0+X3IpOwotCQlpZiAocCA9PSBOVUxMKQotCQkJbGVuID0gZnAtPl9yOwotCQllbHNlCi0JCQlsZW4gPSAocCAtIGZwLT5fcCkgKyAxOwotCi0JCW5ld2xlbiA9IG9mZiArIGxlbjsKLQkJLyogRW5zdXJlIHdlIGNhbiBoYW5kbGUgaXQgKi8KLQkJaWYgKG5ld2xlbiA8IG9mZiB8fCBuZXdsZW4gPiBTU0laRV9NQVgpIHsKLQkJCWVycm5vID0gRU9WRVJGTE9XOwotCQkJZ290byBlcnJvcjsKLQkJfQotCQluZXdsZW4rKzsgLyogcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIE5VTEwgdGVybWluYXRvciAqLwotCQlpZiAobmV3bGVuID4gKmJ1ZmxlbikgewotCQkJaWYgKG5ld2xlbiA8IE1JTkJVRikKLQkJCQluZXdsZW4gPSBNSU5CVUY7Ci0JCQlpZiAoIXBvd2Vyb2YyKG5ld2xlbikpIHsKLQkJCQkvKiBHcm93IHRoZSBidWZmZXIgdG8gdGhlIG5leHQgcG93ZXIgb2YgMiAqLwotCQkJCW5ld2xlbi0tOwotCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gMTsKLQkJCQluZXdsZW4gfD0gbmV3bGVuID4+IDI7Ci0JCQkJbmV3bGVuIHw9IG5ld2xlbiA+PiA0OwotCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gODsKLQkJCQluZXdsZW4gfD0gbmV3bGVuID4+IDE2OwotI2lmIFNJWkVfVF9NQVggPiAweGZmZmZmZmZmVQotCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gMzI7Ci0jZW5kaWYKLQkJCQluZXdsZW4rKzsKLQkJCX0KLQotCQkJbmV3YiA9IHJlYWxsb2MoKmJ1ZiwgbmV3bGVuKTsKLQkJCWlmIChuZXdiID09IE5VTEwpCi0JCQkJZ290byBlcnJvcjsKLQkJCSpidWYgPSBuZXdiOwotCQkJKmJ1ZmxlbiA9IG5ld2xlbjsKLQkJfQotCi0JCSh2b2lkKW1lbWNweSgoKmJ1ZiArIG9mZiksIGZwLT5fcCwgbGVuKTsKLQkJLyogU2FmZSwgbGVuIGlzIG5ldmVyIGdyZWF0ZXIgdGhhbiB3aGF0IGZwLT5fciBjYW4gZml0LiAqLwotCQlmcC0+X3IgLT0gKGludClsZW47Ci0JCWZwLT5fcCArPSAoaW50KWxlbjsKLQkJb2ZmICs9IGxlbjsKLQl9IHdoaWxlIChwID09IE5VTEwpOwotCi0JLyogUE9TSVggZGVtYW5kcyB3ZSByZXR1cm4gLTEgb24gRU9GLiAqLwotCWlmIChvZmYgPT0gMCkgCi0JCXJldHVybiAtMTsKLQotCWlmICgqYnVmICE9IE5VTEwpCi0JCSooKmJ1ZiArIG9mZikgPSAnXDAnOwotCXJldHVybiBvZmY7Ci0KLWVycm9yOgotCWZwLT5fZmxhZ3MgfD0gX19TRVJSOwotCXJldHVybiAtMTsKLX0KLQotc3NpemVfdAotZ2V0ZGVsaW0oY2hhciAqKl9fcmVzdHJpY3QgYnVmLCBzaXplX3QgKl9fcmVzdHJpY3QgYnVmbGVuLAotICAgIGludCBzZXAsIEZJTEUgKl9fcmVzdHJpY3QgZnApCi17Ci0Jc3NpemVfdCBuOwotCi0JRkxPQ0tGSUxFKGZwKTsKLQluID0gX19nZXRkZWxpbShidWYsIGJ1Zmxlbiwgc2VwLCBmcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiBuOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRsaW5lLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGlvL2dldGxpbmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVkNGJhYi4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGlvL2dldGxpbmUuYworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qICROZXRCU0Q6IGdldGxpbmUuYyx2IDEuMyAyMDA5LzEyLzAyIDA4OjQ2OjMzIHJveSBFeHAgJCAqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA5IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBSb3kgTWFycGxlcy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19SQ1NJRCgiJE5ldEJTRDogZ2V0bGluZS5jLHYgMS4zIDIwMDkvMTIvMDIgMDg6NDY6MzMgcm95IEV4cCAkIik7Ci0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZmRlZiBfX3dlYWtfYWxpYXMKLV9fd2Vha19hbGlhcyhnZXRsaW5lLCBfZ2V0bGluZSkKLSNlbmRpZgotCi1zc2l6ZV90Ci1nZXRsaW5lKGNoYXIgKipfX3Jlc3RyaWN0IGJ1Ziwgc2l6ZV90ICpfX3Jlc3RyaWN0IGJ1ZmxlbiwgRklMRSAqX19yZXN0cmljdCBmcCkKLXsKLQlyZXR1cm4gZ2V0ZGVsaW0oYnVmLCBidWZsZW4sICdcbicsIGZwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2V4aXQuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2V4aXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdlNmFkZi4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9leGl0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgkkTmV0QlNEOiBleGl0LmMsdiAxLjE1IDIwMTEvMDUvMTggMTk6MzY6MzYgZHNsIEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylleGl0LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBleGl0LmMsdiAxLjE1IDIwMTEvMDUvMTggMTk6MzY6MzYgZHNsIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpZmRlZiBfTElCQwotI2luY2x1ZGUgInJlZW50cmFudC5oIgotI2luY2x1ZGUgImF0ZXhpdC5oIgotI2VuZGlmCi0KLXZvaWQgKCpfX2NsZWFudXApKHZvaWQpOwotCi0vKgotICogRXhpdCwgZmx1c2hpbmcgc3RkaW8gYnVmZmVycyBpZiBuZWNlc3NhcnkuCi0gKi8KLXZvaWQKLWV4aXQoaW50IHN0YXR1cykKLXsKLQotI2lmZGVmIF9MSUJDCi0JX19jeGFfZmluYWxpemUoTlVMTCk7Ci0jZW5kaWYKLQlpZiAoX19jbGVhbnVwKQotCQkoKl9fY2xlYW51cCkoKTsKLQlfZXhpdChzdGF0dXMpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGRlbGV0ZS5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGRlbGV0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDAxN2RjLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RkZWxldGUuYworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCSROZXRCU0Q6IHRkZWxldGUuYyx2IDEuNiAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJAkqLwotCi0vKgotICogVHJlZSBzZWFyY2ggZ2VuZXJhbGl6ZWQgZnJvbSBLbnV0aCAoNi4yLjIpIEFsZ29yaXRobSBUIGp1c3QgbGlrZQotICogdGhlIEFUJlQgbWFuIHBhZ2Ugc2F5cy4KLSAqCi0gKiBUaGUgbm9kZV90IHN0cnVjdHVyZSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHksIGxpbnQgZG9lc24ndCBncm9rIGl0LgotICoKLSAqIFdyaXR0ZW4gYnkgcmVhZGluZyB0aGUgU3lzdGVtIFYgSW50ZXJmYWNlIERlZmluaXRpb24sIG5vdCB0aGUgY29kZS4KLSAqCi0gKiBUb3RhbGx5IHB1YmxpYyBkb21haW4uCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotX19SQ1NJRCgiJE5ldEJTRDogdGRlbGV0ZS5jLHYgMS42IDIwMTIvMDYvMjUgMjI6MzI6NDUgYWJzIEV4cCAkIik7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZGVmaW5lIF9TRUFSQ0hfUFJJVkFURQotI2luY2x1ZGUgPHNlYXJjaC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0KLS8qIGZpbmQgYSBub2RlIHdpdGgga2V5ICJ2a2V5IiBpbiB0cmVlICJ2cm9vdHAiICovCi12b2lkICoKLXRkZWxldGUoY29uc3Qgdm9pZCAqdmtleSwgdm9pZCAqKnZyb290cCwKLSAgICBpbnQgKCpjb21wYXIpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKLXsKLQlub2RlX3QgKipyb290cCA9IChub2RlX3QgKiopdnJvb3RwOwotCW5vZGVfdCAqcCwgKnEsICpyOwotCWludCAgY21wOwotCi0JX0RJQUdBU1NFUlQodmtleSAhPSBOVUxMKTsKLQlfRElBR0FTU0VSVChjb21wYXIgIT0gTlVMTCk7Ci0KLQlpZiAocm9vdHAgPT0gTlVMTCB8fCAocCA9ICpyb290cCkgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQl3aGlsZSAoKGNtcCA9ICgqY29tcGFyKSh2a2V5LCAoKnJvb3RwKS0+a2V5KSkgIT0gMCkgewotCQlwID0gKnJvb3RwOwotCQlyb290cCA9IChjbXAgPCAwKSA/Ci0JCSAgICAmKCpyb290cCktPmxsaW5rIDoJCS8qIGZvbGxvdyBsbGluayBicmFuY2ggKi8KLQkJICAgICYoKnJvb3RwKS0+cmxpbms7CQkvKiBmb2xsb3cgcmxpbmsgYnJhbmNoICovCi0JCWlmICgqcm9vdHAgPT0gTlVMTCkKLQkJCXJldHVybiBOVUxMOwkJLyoga2V5IG5vdCBmb3VuZCAqLwotCX0KLQlyID0gKCpyb290cCktPnJsaW5rOwkJCS8qIEQxOiAqLwotCWlmICgocSA9ICgqcm9vdHApLT5sbGluaykgPT0gTlVMTCkJLyogTGVmdCBOVUxMPyAqLwotCQlxID0gcjsKLQllbHNlIGlmIChyICE9IE5VTEwpIHsJCQkvKiBSaWdodCBsaW5rIGlzIE5VTEw/ICovCi0JCWlmIChyLT5sbGluayA9PSBOVUxMKSB7CQkvKiBEMjogRmluZCBzdWNjZXNzb3IgKi8KLQkJCXItPmxsaW5rID0gcTsKLQkJCXEgPSByOwotCQl9IGVsc2UgewkJCS8qIEQzOiBGaW5kIE5VTEwgbGluayAqLwotCQkJZm9yIChxID0gci0+bGxpbms7IHEtPmxsaW5rICE9IE5VTEw7IHEgPSByLT5sbGluaykKLQkJCQlyID0gcTsKLQkJCXItPmxsaW5rID0gcS0+cmxpbms7Ci0JCQlxLT5sbGluayA9ICgqcm9vdHApLT5sbGluazsKLQkJCXEtPnJsaW5rID0gKCpyb290cCktPnJsaW5rOwotCQl9Ci0JfQotCWlmIChwICE9ICpyb290cCkKLQkJZnJlZSgqcm9vdHApOwkJCS8qIEQ0OiBGcmVlIG5vZGUgKi8KLQkqcm9vdHAgPSBxOwkJCQkvKiBsaW5rIHBhcmVudCB0byBuZXcgbm9kZSAqLwotCXJldHVybiBwOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGZpbmQuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RmaW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkM2YzNjIuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGZpbmQuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCSROZXRCU0Q6IHRmaW5kLmMsdiAxLjcgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQJKi8KLQotLyoKLSAqIFRyZWUgc2VhcmNoIGdlbmVyYWxpemVkIGZyb20gS251dGggKDYuMi4yKSBBbGdvcml0aG0gVCBqdXN0IGxpa2UKLSAqIHRoZSBBVCZUIG1hbiBwYWdlIHNheXMuCi0gKgotICogVGhlIG5vZGVfdCBzdHJ1Y3R1cmUgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LCBsaW50IGRvZXNuJ3QgZ3JvayBpdC4KLSAqCi0gKiBXcml0dGVuIGJ5IHJlYWRpbmcgdGhlIFN5c3RlbSBWIEludGVyZmFjZSBEZWZpbml0aW9uLCBub3QgdGhlIGNvZGUuCi0gKgotICogVG90YWxseSBwdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IHRmaW5kLmMsdiAxLjcgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQiKTsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNkZWZpbmUgX1NFQVJDSF9QUklWQVRFCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c2VhcmNoLmg+Ci0KLS8qIGZpbmQgYSBub2RlIGJ5IGtleSAidmtleSIgaW4gdHJlZSAidnJvb3RwIiwgb3IgcmV0dXJuIDAgKi8KLXZvaWQgKgotdGZpbmQoY29uc3Qgdm9pZCAqdmtleSwgdm9pZCAqIGNvbnN0ICp2cm9vdHAsCi0gICAgaW50ICgqY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCi17Ci0Jbm9kZV90ICogY29uc3QgKnJvb3RwID0gKG5vZGVfdCAqIGNvbnN0Kil2cm9vdHA7Ci0KLQlfRElBR0FTU0VSVCh2a2V5ICE9IE5VTEwpOwotCV9ESUFHQVNTRVJUKGNvbXBhciAhPSBOVUxMKTsKLQotCWlmIChyb290cCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXdoaWxlICgqcm9vdHAgIT0gTlVMTCkgewkJLyogVDE6ICovCi0JCWludCByOwotCi0JCWlmICgociA9ICgqY29tcGFyKSh2a2V5LCAoKnJvb3RwKS0+a2V5KSkgPT0gMCkJLyogVDI6ICovCi0JCQlyZXR1cm4gKnJvb3RwOwkJLyoga2V5IGZvdW5kICovCi0JCXJvb3RwID0gKHIgPCAwKSA/Ci0JCSAgICAmKCpyb290cCktPmxsaW5rIDoJCS8qIFQzOiBmb2xsb3cgbGVmdCBicmFuY2ggKi8KLQkJICAgICYoKnJvb3RwKS0+cmxpbms7CQkvKiBUNDogZm9sbG93IHJpZ2h0IGJyYW5jaCAqLwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RzZWFyY2guYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RzZWFyY2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYyZmU5Yy4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi90c2VhcmNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgkkTmV0QlNEOiB0c2VhcmNoLmMsdiAxLjcgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQJKi8KLQotLyoKLSAqIFRyZWUgc2VhcmNoIGdlbmVyYWxpemVkIGZyb20gS251dGggKDYuMi4yKSBBbGdvcml0aG0gVCBqdXN0IGxpa2UKLSAqIHRoZSBBVCZUIG1hbiBwYWdlIHNheXMuCi0gKgotICogVGhlIG5vZGVfdCBzdHJ1Y3R1cmUgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LCBsaW50IGRvZXNuJ3QgZ3JvayBpdC4KLSAqCi0gKiBXcml0dGVuIGJ5IHJlYWRpbmcgdGhlIFN5c3RlbSBWIEludGVyZmFjZSBEZWZpbml0aW9uLCBub3QgdGhlIGNvZGUuCi0gKgotICogVG90YWxseSBwdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IHRzZWFyY2guYyx2IDEuNyAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJCIpOwotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2RlZmluZSBfU0VBUkNIX1BSSVZBVEUKLSNpbmNsdWRlIDxzZWFyY2guaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotLyogZmluZCBvciBpbnNlcnQgZGF0dW0gaW50byBzZWFyY2ggdHJlZSAqLwotdm9pZCAqCi10c2VhcmNoKGNvbnN0IHZvaWQgKnZrZXksIHZvaWQgKip2cm9vdHAsCi0gICAgaW50ICgqY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCi17Ci0Jbm9kZV90ICpxOwotCW5vZGVfdCAqKnJvb3RwID0gKG5vZGVfdCAqKil2cm9vdHA7Ci0KLQlfRElBR0FTU0VSVCh2a2V5ICE9IE5VTEwpOwotCV9ESUFHQVNTRVJUKGNvbXBhciAhPSBOVUxMKTsKLQotCWlmIChyb290cCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXdoaWxlICgqcm9vdHAgIT0gTlVMTCkgewkvKiBLbnV0aCdzIFQxOiAqLwotCQlpbnQgcjsKLQotCQlpZiAoKHIgPSAoKmNvbXBhcikodmtleSwgKCpyb290cCktPmtleSkpID09IDApCS8qIFQyOiAqLwotCQkJcmV0dXJuICpyb290cDsJCS8qIHdlIGZvdW5kIGl0ISAqLwotCi0JCXJvb3RwID0gKHIgPCAwKSA/Ci0JCSAgICAmKCpyb290cCktPmxsaW5rIDoJCS8qIFQzOiBmb2xsb3cgbGVmdCBicmFuY2ggKi8KLQkJICAgICYoKnJvb3RwKS0+cmxpbms7CQkvKiBUNDogZm9sbG93IHJpZ2h0IGJyYW5jaCAqLwotCX0KLQotCXEgPSBtYWxsb2Moc2l6ZW9mKG5vZGVfdCkpOwkJLyogVDU6IGtleSBub3QgZm91bmQgKi8KLQlpZiAocSAhPSAwKSB7CQkJCS8qIG1ha2UgbmV3IG5vZGUgKi8KLQkJKnJvb3RwID0gcTsJCQkvKiBsaW5rIG5ldyBub2RlIHRvIG9sZCAqLwotCQlxLT5rZXkgPSBfX1VOQ09OU1QodmtleSk7CS8qIGluaXRpYWxpemUgbmV3IG5vZGUgKi8KLQkJcS0+bGxpbmsgPSBxLT5ybGluayA9IE5VTEw7Ci0JfQotCXJldHVybiBxOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy90aHJlYWQtc3R1Yi9fX2lzdGhyZWFkZWQuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvdGhyZWFkLXN0dWIvX19pc3RocmVhZGVkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYzFiNmYuLjAwMDAwMDAKLS0tIGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy90aHJlYWQtc3R1Yi9fX2lzdGhyZWFkZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCSROZXRCU0Q6IF9faXN0aHJlYWRlZC5jLHYgMS4zIDIwMDkvMTIvMDEgMDE6MzM6MjUgZXhwbG9yZXIgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTkgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBNaWNoYWVsIEdyYWZmLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKLSAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IF9faXN0aHJlYWRlZC5jLHYgMS4zIDIwMDkvMTIvMDEgMDE6MzM6MjUgZXhwbG9yZXIgRXhwICQiKTsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLWludCBfX2lzdGhyZWFkZWQgPSAwOwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbmFtZXNwYWNlLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9uYW1lc3BhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRkNDE1MS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9uYW1lc3BhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIF9CSU9OSUNfTkVUQlNEX05BTUVTUEFDRV9IX2luY2x1ZGVkCi0jZGVmaW5lIF9CSU9OSUNfTkVUQlNEX05BTUVTUEFDRV9IX2luY2x1ZGVkCi0KLS8vIE5ldEJTRCB1c2VzIF9fd2Vha19hbGlhcyBvbiBhIGxvdCBvZiBmdW5jdGlvbnMuIFdlIGRvbid0IHdhbnQgdGhhdC4KLSNpZiBkZWZpbmVkKF9fd2Vha19hbGlhcykKLSN1bmRlZiBfX3dlYWtfYWxpYXMKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL25ldGJzZC1jb21wYXQuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL25ldGJzZC1jb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk2ZjEzZS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9uZXRic2QtY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBfQklPTklDX05FVEJTRF9DT01QQVRfSF9pbmNsdWRlZAotI2RlZmluZSBfQklPTklDX05FVEJTRF9DT01QQVRfSF9pbmNsdWRlZAotCi0vLyBOZXRCU0QgdXNlcyBfRElBR0FTU0VSVCB0byBudWxsLWNoZWNrIGFyZ3VtZW50cyBhbmQgdGhlIGxpa2UuCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZGVmaW5lIF9ESUFHQVNTRVJUKGUpICgoZSkgPyAodm9pZCkgMCA6IF9fYXNzZXJ0MihfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCAjZSkpCi0KLS8vIFRPRE86IHVwZGF0ZSBvdXIgPHN5cy9jZGVmcy5oPiB0byBzdXBwb3J0IHRoaXMgcHJvcGVybHkuCi0jZGVmaW5lIF9fdHlwZV9maXQodCwgYSkgKDAgPT0gMCkKLQotI2RlZmluZSBfR05VX1NPVVJDRQotCi0vLyBUT0RPOiB3ZSBkb24ndCB5ZXQgaGF2ZSB0aHJlYWQtc2FmZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0jZGVmaW5lIF9fcmVhZGxvY2tlbnYoKSAwCi0jZGVmaW5lIF9fdW5sb2NrZW52KCkgMAotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci1fX0xJQkNfSElEREVOX18gaW50IHJlYWxsb2NhcnIodm9pZCosIHNpemVfdCwgc2l6ZV90KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9wb3J0X2JlZm9yZS5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvcG9ydF9iZWZvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUwNmU1Mi4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9wb3J0X2JlZm9yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpZm5kZWYgX0JJT05JQ19ORVRCU0RfUE9SVF9CRUZPUkVfSF9pbmNsdWRlZAotI2RlZmluZSBfQklPTklDX05FVEJTRF9QT1JUX0JFRk9SRV9IX2luY2x1ZGVkCi0KLSNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlICJwcml2YXRlL2FycGFfbmFtZXNlci5oIgotCi0jZGVmaW5lIElTQ19GT1JNQVRfUFJJTlRGKGEsYikgX19wcmludGZsaWtlKGEsYikKLSNkZWZpbmUgSVNDX1NPQ0tMRU5fVCBzb2NrbGVuX3QKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9yYW5kNDguaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL3JhbmQ0OC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWQ4YjBkLi4wMDAwMDAwCi0tLSBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL3JhbmQ0OC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoJJE5ldEJTRDogcmFuZDQ4LmgsdiAxLjYgMjAxMS8wNS8xOCAxOTozNjozNiBkc2wgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKLSAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCi0gKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKLSAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCi0gKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgotICovCi0KLSNpZm5kZWYgX1JBTkQ0OF9IXwotI2RlZmluZSBfUkFORDQ4X0hfCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotZXh0ZXJuIHZvaWQJCV9fZG9yYW5kNDgodW5zaWduZWQgc2hvcnRbM10pOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0CV9fcmFuZDQ4X3NlZWRbM107Ci1leHRlcm4gdW5zaWduZWQgc2hvcnQJX19yYW5kNDhfbXVsdFszXTsKLWV4dGVybiB1bnNpZ25lZCBzaG9ydAlfX3JhbmQ0OF9hZGQ7Ci0KLSNkZWZpbmUJUkFORDQ4X1NFRURfMAkoMHgzMzBlKQotI2RlZmluZQlSQU5ENDhfU0VFRF8xCSgweGFiY2QpCi0jZGVmaW5lCVJBTkQ0OF9TRUVEXzIJKDB4MTIzNCkKLSNkZWZpbmUJUkFORDQ4X01VTFRfMAkoMHhlNjZkKQotI2RlZmluZQlSQU5ENDhfTVVMVF8xCSgweGRlZWMpCi0jZGVmaW5lCVJBTkQ0OF9NVUxUXzIJKDB4MDAwNSkKLSNkZWZpbmUJUkFORDQ4X0FERAkoMHgwMDBiKQotCi0jZW5kaWYgLyogX1JBTkQ0OF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvcmVlbnRyYW50LmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9yZWVudHJhbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI5NDVkYS4uMDAwMDAwMAotLS0gYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9yZWVudHJhbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaWZuZGVmIF9CSU9OSUNfTkVUQlNEX1JFRU5UUkFOVF9IX2luY2x1ZGVkCi0jZGVmaW5lIF9CSU9OSUNfTkVUQlNEX1JFRU5UUkFOVF9IX2luY2x1ZGVkCi0KLSNkZWZpbmUgX1JFRU5UUkFOVAotCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotCi0vLwotLy8gTWFwIE5ldEJTRCBsaWJjIGludGVybmFsIGxvY2tpbmcgdG8gcHRocmVhZCBsb2NraW5nLgotLy8KLQotI2RlZmluZSBNVVRFWF9JTklUSUFMSVpFUiBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSCi0jZGVmaW5lIG11dGV4X3QgcHRocmVhZF9tdXRleF90Ci0KLSNkZWZpbmUgUldMT0NLX0lOSVRJQUxJWkVSIFBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSCi0jZGVmaW5lIHJ3bG9ja190IHB0aHJlYWRfcndsb2NrX3QKLSNkZWZpbmUgcndsb2NrX3JkbG9jayBwdGhyZWFkX3J3bG9ja19yZGxvY2sKLSNkZWZpbmUgcndsb2NrX3VubG9jayBwdGhyZWFkX3J3bG9ja191bmxvY2sKLSNkZWZpbmUgcndsb2NrX3dybG9jayBwdGhyZWFkX3J3bG9ja193cmxvY2sKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvUkVBRE1FLnR4dCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjY0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvUkVBRE1FLnR4dApAQCAtMCwwICsxLDUgQEAKK1RoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHVwc3RyZWFtIE9wZW5CU0Qgc291cmNlLiBZb3Ugc2hvdWxkIG5vdCBlZGl0IHRoZXNlCitmaWxlcyBkaXJlY3RseS4gTWFrZSBmaXhlcyB1cHN0cmVhbSBhbmQgdGhlbiBwdWxsIGRvd24gdGhlIG5ldyB2ZXJzaW9uIG9mCit0aGUgZmlsZS4KKworVE9ETzogd3JpdGUgYSBzY3JpcHQgdG8gbWFrZSB0aGlzIHByb2Nlc3MgYXV0b21hdGVkLgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvZ2R0b2Ffc3VwcG9ydC5jcHAgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9nZHRvYV9zdXBwb3J0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTdiZjNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvZ2R0b2Ffc3VwcG9ydC5jcHAKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKK19fTElCQ19ISURERU5fXyBwdGhyZWFkX211dGV4X3QgX19kdG9hX2xvY2tzW10gPSB7IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIgfTsKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2luY2x1ZGUvYXJjNHJhbmRvbS5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9hcmM0cmFuZG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA3MjU3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2luY2x1ZGUvYXJjNHJhbmRvbS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCSRPcGVuQlNEOiBhcmM0cmFuZG9tX2xpbnV4LmgsdiAxLjcgMjAxNC8wNy8yMCAyMDo1MToxMyBiY29vayBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LCBEYXZpZCBNYXppZXJlcyA8ZG1AdXVuLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwOCwgRGFtaWVuIE1pbGxlciA8ZGptQG9wZW5ic2Qub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDEzLCBNYXJrdXMgRnJpZWRsIDxtYXJrdXNAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIFN0dWIgZnVuY3Rpb25zIGZvciBwb3J0YWJpbGl0eS4KKyAqLworCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworLy8gQW5kcm9pZCBnZXRzIHRoZXNlIGZyb20gInRocmVhZF9wcml2YXRlLmgiLgorI2luY2x1ZGUgInRocmVhZF9wcml2YXRlLmgiCisvL3N0YXRpYyBwdGhyZWFkX211dGV4X3QgYXJjNHJhbmRvbV9tdHggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworLy8jZGVmaW5lIF9BUkM0X0xPQ0soKSAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmYXJjNHJhbmRvbV9tdHgpCisvLyNkZWZpbmUgX0FSQzRfVU5MT0NLKCkgcHRocmVhZF9tdXRleF91bmxvY2soJmFyYzRyYW5kb21fbXR4KQorCisjaWZkZWYgX19HTElCQ19fCitleHRlcm4gdm9pZCAqX19kc29faGFuZGxlOworZXh0ZXJuIGludCBfX3JlZ2lzdGVyX2F0Zm9yayh2b2lkICgqKSh2b2lkKSwgdm9pZCgqKSh2b2lkKSwgdm9pZCAoKikodm9pZCksIHZvaWQgKik7CisjZGVmaW5lIF9BUkM0X0FURk9SSyhmKSBfX3JlZ2lzdGVyX2F0Zm9yayhOVUxMLCBOVUxMLCAoZiksIF9fZHNvX2hhbmRsZSkKKyNlbHNlCisjZGVmaW5lIF9BUkM0X0FURk9SSyhmKSBwdGhyZWFkX2F0Zm9yayhOVUxMLCBOVUxMLCAoZikpCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkCitfZ2V0ZW50cm9weV9mYWlsKHZvaWQpCit7CisJcmFpc2UoU0lHS0lMTCk7Cit9CisKK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgX3JzX2ZvcmtlZDsKKworc3RhdGljIGlubGluZSB2b2lkCitfcnNfZm9ya2hhbmRsZXIodm9pZCkKK3sKKwlfcnNfZm9ya2VkID0gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfcnNfZm9ya2RldGVjdCh2b2lkKQoreworCXN0YXRpYyBwaWRfdCBfcnNfcGlkID0gMDsKKwlwaWRfdCBwaWQgPSBnZXRwaWQoKTsKKworCWlmIChfcnNfcGlkID09IDAgfHwgX3JzX3BpZCAhPSBwaWQgfHwgX3JzX2ZvcmtlZCkgeworCQlfcnNfcGlkID0gcGlkOworCQlfcnNfZm9ya2VkID0gMDsKKwkJaWYgKHJzKQorCQkJbWVtc2V0KHJzLCAwLCBzaXplb2YoKnJzKSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludAorX3JzX2FsbG9jYXRlKHN0cnVjdCBfcnMgKipyc3AsIHN0cnVjdCBfcnN4ICoqcnN4cCkKK3sKKwlpZiAoKCpyc3AgPSBtbWFwKE5VTEwsIHNpemVvZigqKnJzcCksIFBST1RfUkVBRHxQUk9UX1dSSVRFLAorCSAgICBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIDApKSA9PSBNQVBfRkFJTEVEKQorCQlyZXR1cm4gKC0xKTsKKworCWlmICgoKnJzeHAgPSBtbWFwKE5VTEwsIHNpemVvZigqKnJzeHApLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKKwkgICAgTUFQX0FOT058TUFQX1BSSVZBVEUsIC0xLCAwKSkgPT0gTUFQX0ZBSUxFRCkgeworCQltdW5tYXAoKnJzeHAsIHNpemVvZigqKnJzeHApKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJX0FSQzRfQVRGT1JLKF9yc19mb3JraGFuZGxlcik7CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2luY2x1ZGUvYXJpdGguaCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2luY2x1ZGUvYXJpdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjYyZTRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9hcml0aC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIElFRUVfODA4NworCisjaWYgX19MUDY0X18KKyNkZWZpbmUgTG9uZyBpbnQKKyNlbmRpZgorCisjZGVmaW5lIElORk5BTl9DSEVDSworI2RlZmluZSBNVUxUSVBMRV9USFJFQURTCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9pbmNsdWRlL2dkX3FuYW4uaCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2luY2x1ZGUvZ2RfcW5hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTkwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvYW5kcm9pZC9pbmNsdWRlL2dkX3FuYW4uaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmIF9fYXJtX18KKworI2RlZmluZSBmX1FOQU4gIDB4ZmZmZmZmZmYKKworI2RlZmluZSBkX1FOQU4wIDB4ZmZmZmZmZmYKKyNkZWZpbmUgZF9RTkFOMSAweGZmZmZmZmZmCisKKyNlbGlmIF9fbWlwc19fCisKKyNkZWZpbmUgZl9RTkFOICAweDdmYmZmZmZmCisKKyNkZWZpbmUgZF9RTkFOMCAweDdmZjdmZmZmCisjZGVmaW5lIGRfUU5BTjEgMHhmZmZmZmZmZgorCisjZWxzZQorCisjZGVmaW5lIGZfUU5BTiAgMHhmZmMwMDAwMAorCisjZGVmaW5lIGRfUU5BTjAgMHgwMDAwMDAwMAorI2RlZmluZSBkX1FOQU4xIDB4ZmZmODAwMDAKKworI2VuZGlmCisKKy8qIGxvbmcgZG91YmxlLiAqLworI2lmIF9fTFA2NF9fCisjZGVmaW5lIGxkX1FOQU4wIDB4N2ZmZjgwMDAKKyNkZWZpbmUgbGRfUU5BTjEgMHgwMDAwMDAwMAorI2RlZmluZSBsZF9RTkFOMiAweDAwMDAwMDAwCisjZGVmaW5lIGxkX1FOQU4zIDB4MDAwMDAwMDAKKyNlbHNlCisvKiBzaXplb2YobG9uZyBkb3VibGUpID09IHNpemVvZihkb3VibGUpLCBzbyB3ZSBzaG91bGRuJ3QgYmUgdHJ5aW5nIHRvIHVzZSB0aGVzZSBjb25zdGFudHMuICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2luY2x1ZGUvb3BlbmJzZC1jb21wYXQuaCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9hbmRyb2lkL2luY2x1ZGUvb3BlbmJzZC1jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGFkMmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2FuZHJvaWQvaW5jbHVkZS9vcGVuYnNkLWNvbXBhdC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9CSU9OSUNfT1BFTkJTRF9DT01QQVRfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX09QRU5CU0RfQ09NUEFUX0hfaW5jbHVkZWQKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPiAvLyBGb3Igc2l6ZV90LgorCisjZGVmaW5lIF9fVVNFX0JTRAorCisvKiBPcGVuQlNEJ3MgPGN0eXBlLmg+IHVzZXMgdGhlc2UgbmFtZXMsIHdoaWNoIGNvbmZsaWN0ZWQgd2l0aCBzdGxwb3J0LgorICogQWRkaXRpb25hbGx5LCB3ZSBjaGFuZ2VkIHRoZSBudW1lcmljL2RpZ2l0IHR5cGUgZnJvbSBOIHRvIEQgZm9yIGxpYmN4eC4KKyAqLworI2RlZmluZSBfVSBfQ1RZUEVfVQorI2RlZmluZSBfTCBfQ1RZUEVfTAorI2RlZmluZSBfTiBfQ1RZUEVfRAorI2RlZmluZSBfUyBfQ1RZUEVfUworI2RlZmluZSBfUCBfQ1RZUEVfUAorI2RlZmluZSBfQyBfQ1RZUEVfQworI2RlZmluZSBfWCBfQ1RZUEVfWAorI2RlZmluZSBfQiBfQ1RZUEVfQgorCisvKiBPcGVuQlNEIGhhcyB0aGlzLCBidXQgd2UgY2FuJ3QgcmVhbGx5IGltcGxlbWVudCBpdCBjb3JyZWN0bHkgb24gTGludXguICovCisjZGVmaW5lIGlzc2V0dWdpZCgpIDAKKworI2RlZmluZSBleHBsaWNpdF9iemVybyhwLCBzKSBtZW1zZXQocCwgMCwgcykKKworLyogV2UgaGF2ZSBPcGVuQlNEJ3MgZ2V0ZW50cm9weV9saW51eC5jLCBidXQgd2UgZG9uJ3QgbWVudGlvbiBnZXRlbnRyb3B5IGluIGFueSBoZWFkZXIuICovCitfX0xJQkNfSElEREVOX18gZXh0ZXJuIGludCBnZXRlbnRyb3B5KHZvaWQqLCBzaXplX3QpOworCisvKiBMUDMyIE5ESyBjdHlwZS5oIGNvbnRhaW5lZCByZWZlcmVuY2VzIHRvIHRoZXNlLiAqLworX19MSUJDNjRfSElEREVOX18gZXh0ZXJuIGNvbnN0IHNob3J0KiBfdG9sb3dlcl90YWJfOworX19MSUJDNjRfSElEREVOX18gZXh0ZXJuIGNvbnN0IHNob3J0KiBfdG91cHBlcl90YWJfOworCitfX0xJQkNfSElEREVOX18gZXh0ZXJuIHN0cnVjdCBhdGV4aXQqIF9fYXRleGl0OworX19MSUJDX0hJRERFTl9fIGV4dGVybiBjb25zdCBjaGFyIF9DX2N0eXBlX1tdOworX19MSUJDX0hJRERFTl9fIGV4dGVybiBjb25zdCBzaG9ydCBfQ190b3VwcGVyX1tdOworX19MSUJDX0hJRERFTl9fIGV4dGVybiBjb25zdCBzaG9ydCBfQ190b2xvd2VyX1tdOworX19MSUJDX0hJRERFTl9fIGV4dGVybiBjaGFyKiBfX2ZpbmRlbnYoY29uc3QgY2hhciosIGludCwgaW50Kik7CitfX0xJQkNfSElEREVOX18gZXh0ZXJuIGNoYXIqIF9ta3RlbXAoY2hhciopOworCisvKiBUT0RPOiBoaWRlIHRoaXMgd2hlbiBhbmRyb2lkX3N1cHBvcnQuYSBpcyBmaXhlZCAoaHR0cDovL2IvMTYyOTg1ODApLiovCisvKl9fTElCQ19ISURERU5fXyovIGV4dGVybiBpbnQgX19pc3RocmVhZGVkOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9jcnlwdC9hcmM0cmFuZG9tLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvY3J5cHQvYXJjNHJhbmRvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MjQ4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvY3J5cHQvYXJjNHJhbmRvbS5jCkBAIC0wLDAgKzEsMTk1IEBACisvKgkkT3BlbkJTRDogYXJjNHJhbmRvbS5jLHYgMS41MCAyMDE0LzA3LzIxIDE4OjEzOjEyIGRlcmFhZHQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwgRGF2aWQgTWF6aWVyZXMgPGRtQHV1bi5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIERhbWllbiBNaWxsZXIgPGRqbUBvcGVuYnNkLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAxMywgTWFya3VzIEZyaWVkbCA8bWFya3VzQG9wZW5ic2Qub3JnPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBDaGFDaGEgYmFzZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm9yIE9wZW5CU0QuCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2RlZmluZSBLRVlTVFJFQU1fT05MWQorI2luY2x1ZGUgImNoYWNoYV9wcml2YXRlLmgiCisKKyNkZWZpbmUgbWluKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgaW5saW5lIF9faW5saW5lCisjZWxzZQkJCQkvKiAhX19HTlVDX18gKi8KKyNkZWZpbmUgaW5saW5lCisjZW5kaWYJCQkJLyogIV9fR05VQ19fICovCisKKyNkZWZpbmUgS0VZU1oJMzIKKyNkZWZpbmUgSVZTWgk4CisjZGVmaW5lIEJMT0NLU1oJNjQKKyNkZWZpbmUgUlNCVUZTWgkoMTYqQkxPQ0tTWikKKworLyogTWFya2VkIE1BUF9JTkhFUklUX1pFUk8sIHNvIHplcm8nZCBvdXQgaW4gZm9yayBjaGlsZHJlbi4gKi8KK3N0YXRpYyBzdHJ1Y3QgX3JzIHsKKwlzaXplX3QJCXJzX2hhdmU7CS8qIHZhbGlkIGJ5dGVzIGF0IGVuZCBvZiByc19idWYgKi8KKwlzaXplX3QJCXJzX2NvdW50OwkvKiBieXRlcyB0aWxsIHJlc2VlZCAqLworfSAqcnM7CisKKy8qIE1heWJlIGJlIHByZXNlcnZlZCBpbiBmb3JrIGNoaWxkcmVuLCBpZiBfcnNfYWxsb2NhdGUoKSBkZWNpZGVzLiAqLworc3RhdGljIHN0cnVjdCBfcnN4IHsKKwljaGFjaGFfY3R4CXJzX2NoYWNoYTsJLyogY2hhY2hhIGNvbnRleHQgZm9yIHJhbmRvbSBrZXlzdHJlYW0gKi8KKwl1X2NoYXIJCXJzX2J1ZltSU0JVRlNaXTsJLyoga2V5c3RyZWFtIGJsb2NrcyAqLworfSAqcnN4OworCitzdGF0aWMgaW5saW5lIGludCBfcnNfYWxsb2NhdGUoc3RydWN0IF9ycyAqKiwgc3RydWN0IF9yc3ggKiopOworc3RhdGljIGlubGluZSB2b2lkIF9yc19mb3JrZGV0ZWN0KHZvaWQpOworI2luY2x1ZGUgImFyYzRyYW5kb20uaCIKKworc3RhdGljIGlubGluZSB2b2lkIF9yc19yZWtleSh1X2NoYXIgKmRhdCwgc2l6ZV90IGRhdGxlbik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX3JzX2luaXQodV9jaGFyICpidWYsIHNpemVfdCBuKQoreworCWlmIChuIDwgS0VZU1ogKyBJVlNaKQorCQlyZXR1cm47CisKKwlpZiAocnMgPT0gTlVMTCkgeworCQlpZiAoX3JzX2FsbG9jYXRlKCZycywgJnJzeCkgPT0gLTEpCisJCQlhYm9ydCgpOworCX0KKworCWNoYWNoYV9rZXlzZXR1cCgmcnN4LT5yc19jaGFjaGEsIGJ1ZiwgS0VZU1ogKiA4LCAwKTsKKwljaGFjaGFfaXZzZXR1cCgmcnN4LT5yc19jaGFjaGEsIGJ1ZiArIEtFWVNaKTsKK30KKworc3RhdGljIHZvaWQKK19yc19zdGlyKHZvaWQpCit7CisJdV9jaGFyIHJuZFtLRVlTWiArIElWU1pdOworCisJaWYgKGdldGVudHJvcHkocm5kLCBzaXplb2Ygcm5kKSA9PSAtMSkKKwkJX2dldGVudHJvcHlfZmFpbCgpOworCisJaWYgKCFycykKKwkJX3JzX2luaXQocm5kLCBzaXplb2Yocm5kKSk7CisJZWxzZQorCQlfcnNfcmVrZXkocm5kLCBzaXplb2Yocm5kKSk7CisJZXhwbGljaXRfYnplcm8ocm5kLCBzaXplb2Yocm5kKSk7CS8qIGRpc2NhcmQgc291cmNlIHNlZWQgKi8KKworCS8qIGludmFsaWRhdGUgcnNfYnVmICovCisJcnMtPnJzX2hhdmUgPSAwOworCW1lbXNldChyc3gtPnJzX2J1ZiwgMCwgc2l6ZW9mKHJzeC0+cnNfYnVmKSk7CisKKwlycy0+cnNfY291bnQgPSAxNjAwMDAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK19yc19zdGlyX2lmX25lZWRlZChzaXplX3QgbGVuKQoreworCV9yc19mb3JrZGV0ZWN0KCk7CisJaWYgKCFycyB8fCBycy0+cnNfY291bnQgPD0gbGVuKQorCQlfcnNfc3RpcigpOworCWlmIChycy0+cnNfY291bnQgPD0gbGVuKQorCQlycy0+cnNfY291bnQgPSAwOworCWVsc2UKKwkJcnMtPnJzX2NvdW50IC09IGxlbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfcnNfcmVrZXkodV9jaGFyICpkYXQsIHNpemVfdCBkYXRsZW4pCit7CisjaWZuZGVmIEtFWVNUUkVBTV9PTkxZCisJbWVtc2V0KHJzeC0+cnNfYnVmLCAwLCBzaXplb2YocnN4LT5yc19idWYpKTsKKyNlbmRpZgorCS8qIGZpbGwgcnNfYnVmIHdpdGggdGhlIGtleXN0cmVhbSAqLworCWNoYWNoYV9lbmNyeXB0X2J5dGVzKCZyc3gtPnJzX2NoYWNoYSwgcnN4LT5yc19idWYsCisJICAgIHJzeC0+cnNfYnVmLCBzaXplb2YocnN4LT5yc19idWYpKTsKKwkvKiBtaXggaW4gb3B0aW9uYWwgdXNlciBwcm92aWRlZCBkYXRhICovCisJaWYgKGRhdCkgeworCQlzaXplX3QgaSwgbTsKKworCQltID0gbWluKGRhdGxlbiwgS0VZU1ogKyBJVlNaKTsKKwkJZm9yIChpID0gMDsgaSA8IG07IGkrKykKKwkJCXJzeC0+cnNfYnVmW2ldIF49IGRhdFtpXTsKKwl9CisJLyogaW1tZWRpYXRlbHkgcmVpbml0IGZvciBiYWNrdHJhY2tpbmcgcmVzaXN0YW5jZSAqLworCV9yc19pbml0KHJzeC0+cnNfYnVmLCBLRVlTWiArIElWU1opOworCW1lbXNldChyc3gtPnJzX2J1ZiwgMCwgS0VZU1ogKyBJVlNaKTsKKwlycy0+cnNfaGF2ZSA9IHNpemVvZihyc3gtPnJzX2J1ZikgLSBLRVlTWiAtIElWU1o7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX3JzX3JhbmRvbV9idWYodm9pZCAqX2J1Ziwgc2l6ZV90IG4pCit7CisJdV9jaGFyICpidWYgPSAodV9jaGFyICopX2J1ZjsKKwl1X2NoYXIgKmtleXN0cmVhbTsKKwlzaXplX3QgbTsKKworCV9yc19zdGlyX2lmX25lZWRlZChuKTsKKwl3aGlsZSAobiA+IDApIHsKKwkJaWYgKHJzLT5yc19oYXZlID4gMCkgeworCQkJbSA9IG1pbihuLCBycy0+cnNfaGF2ZSk7CisJCQlrZXlzdHJlYW0gPSByc3gtPnJzX2J1ZiArIHNpemVvZihyc3gtPnJzX2J1ZikKKwkJCSAgICAtIHJzLT5yc19oYXZlOworCQkJbWVtY3B5KGJ1Ziwga2V5c3RyZWFtLCBtKTsKKwkJCW1lbXNldChrZXlzdHJlYW0sIDAsIG0pOworCQkJYnVmICs9IG07CisJCQluIC09IG07CisJCQlycy0+cnNfaGF2ZSAtPSBtOworCQl9CisJCWlmIChycy0+cnNfaGF2ZSA9PSAwKQorCQkJX3JzX3Jla2V5KE5VTEwsIDApOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitfcnNfcmFuZG9tX3UzMih1aW50MzJfdCAqdmFsKQoreworCXVfY2hhciAqa2V5c3RyZWFtOworCisJX3JzX3N0aXJfaWZfbmVlZGVkKHNpemVvZigqdmFsKSk7CisJaWYgKHJzLT5yc19oYXZlIDwgc2l6ZW9mKCp2YWwpKQorCQlfcnNfcmVrZXkoTlVMTCwgMCk7CisJa2V5c3RyZWFtID0gcnN4LT5yc19idWYgKyBzaXplb2YocnN4LT5yc19idWYpIC0gcnMtPnJzX2hhdmU7CisJbWVtY3B5KHZhbCwga2V5c3RyZWFtLCBzaXplb2YoKnZhbCkpOworCW1lbXNldChrZXlzdHJlYW0sIDAsIHNpemVvZigqdmFsKSk7CisJcnMtPnJzX2hhdmUgLT0gc2l6ZW9mKCp2YWwpOworfQorCit1aW50MzJfdAorYXJjNHJhbmRvbSh2b2lkKQoreworCXVpbnQzMl90IHZhbDsKKworCV9BUkM0X0xPQ0soKTsKKwlfcnNfcmFuZG9tX3UzMigmdmFsKTsKKwlfQVJDNF9VTkxPQ0soKTsKKwlyZXR1cm4gdmFsOworfQorCit2b2lkCithcmM0cmFuZG9tX2J1Zih2b2lkICpidWYsIHNpemVfdCBuKQoreworCV9BUkM0X0xPQ0soKTsKKwlfcnNfcmFuZG9tX2J1ZihidWYsIG4pOworCV9BUkM0X1VOTE9DSygpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2NyeXB0L2FyYzRyYW5kb21fdW5pZm9ybS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2NyeXB0L2FyYzRyYW5kb21fdW5pZm9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYTlhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvY3J5cHQvYXJjNHJhbmRvbV91bmlmb3JtLmMKQEAgLTAsMCArMSw1NiBAQAorLyoJJE9wZW5CU0Q6IGFyYzRyYW5kb21fdW5pZm9ybS5jLHYgMS4xIDIwMTQvMDcvMTIgMTM6MjQ6NTQgZGVyYWFkdCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBEYW1pZW4gTWlsbGVyIDxkam1Ab3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKgorICogQ2FsY3VsYXRlIGEgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIHJhbmRvbSBudW1iZXIgbGVzcyB0aGFuIHVwcGVyX2JvdW5kCisgKiBhdm9pZGluZyAibW9kdWxvIGJpYXMiLgorICoKKyAqIFVuaWZvcm1pdHkgaXMgYWNoaWV2ZWQgYnkgZ2VuZXJhdGluZyBuZXcgcmFuZG9tIG51bWJlcnMgdW50aWwgdGhlIG9uZQorICogcmV0dXJuZWQgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzAsIDIqKjMyICUgdXBwZXJfYm91bmQpLiAgVGhpcworICogZ3VhcmFudGVlcyB0aGUgc2VsZWN0ZWQgcmFuZG9tIG51bWJlciB3aWxsIGJlIGluc2lkZQorICogWzIqKjMyICUgdXBwZXJfYm91bmQsIDIqKjMyKSB3aGljaCBtYXBzIGJhY2sgdG8gWzAsIHVwcGVyX2JvdW5kKQorICogYWZ0ZXIgcmVkdWN0aW9uIG1vZHVsbyB1cHBlcl9ib3VuZC4KKyAqLwordWludDMyX3QKK2FyYzRyYW5kb21fdW5pZm9ybSh1aW50MzJfdCB1cHBlcl9ib3VuZCkKK3sKKwl1aW50MzJfdCByLCBtaW47CisKKwlpZiAodXBwZXJfYm91bmQgPCAyKQorCQlyZXR1cm4gMDsKKworCS8qIDIqKjMyICUgeCA9PSAoMioqMzIgLSB4KSAlIHggKi8KKwltaW4gPSAtdXBwZXJfYm91bmQgJSB1cHBlcl9ib3VuZDsKKworCS8qCisJICogVGhpcyBjb3VsZCB0aGVvcmV0aWNhbGx5IGxvb3AgZm9yZXZlciBidXQgZWFjaCByZXRyeSBoYXMKKwkgKiBwID4gMC41ICh3b3JzdCBjYXNlLCB1c3VhbGx5IGZhciBiZXR0ZXIpIG9mIHNlbGVjdGluZyBhCisJICogbnVtYmVyIGluc2lkZSB0aGUgcmFuZ2Ugd2UgbmVlZCwgc28gaXQgc2hvdWxkIHJhcmVseSBuZWVkCisJICogdG8gcmUtcm9sbC4KKwkgKi8KKwlmb3IgKDs7KSB7CisJCXIgPSBhcmM0cmFuZG9tKCk7CisJCWlmIChyID49IG1pbikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByICUgdXBwZXJfYm91bmQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvY3J5cHQvY2hhY2hhX3ByaXZhdGUuaCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9jcnlwdC9jaGFjaGFfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMzY4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvY3J5cHQvY2hhY2hhX3ByaXZhdGUuaApAQCAtMCwwICsxLDIyMiBAQAorLyoKK2NoYWNoYS1tZXJnZWQuYyB2ZXJzaW9uIDIwMDgwMTE4CitELiBKLiBCZXJuc3RlaW4KK1B1YmxpYyBkb21haW4uCisqLworCisvKiAkT3BlbkJTRDogY2hhY2hhX3ByaXZhdGUuaCx2IDEuMiAyMDEzLzEwLzA0IDA3OjAyOjI3IGRqbSBFeHAgJCAqLworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHUzMiBpbnB1dFsxNl07IC8qIGNvdWxkIGJlIGNvbXByZXNzZWQgKi8KK30gY2hhY2hhX2N0eDsKKworI2RlZmluZSBVOEModikgKHYjI1UpCisjZGVmaW5lIFUzMkModikgKHYjI1UpCisKKyNkZWZpbmUgVThWKHYpICgodTgpKHYpICYgVThDKDB4RkYpKQorI2RlZmluZSBVMzJWKHYpICgodTMyKSh2KSAmIFUzMkMoMHhGRkZGRkZGRikpCisKKyNkZWZpbmUgUk9UTDMyKHYsIG4pIFwKKyAgKFUzMlYoKHYpIDw8IChuKSkgfCAoKHYpID4+ICgzMiAtIChuKSkpKQorCisjZGVmaW5lIFU4VE8zMl9MSVRUTEUocCkgXAorICAoKCh1MzIpKChwKVswXSkgICAgICApIHwgXAorICAgKCh1MzIpKChwKVsxXSkgPDwgIDgpIHwgXAorICAgKCh1MzIpKChwKVsyXSkgPDwgMTYpIHwgXAorICAgKCh1MzIpKChwKVszXSkgPDwgMjQpKQorCisjZGVmaW5lIFUzMlRPOF9MSVRUTEUocCwgdikgXAorICBkbyB7IFwKKyAgICAocClbMF0gPSBVOFYoKHYpICAgICAgKTsgXAorICAgIChwKVsxXSA9IFU4VigodikgPj4gIDgpOyBcCisgICAgKHApWzJdID0gVThWKCh2KSA+PiAxNik7IFwKKyAgICAocClbM10gPSBVOFYoKHYpID4+IDI0KTsgXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFJPVEFURSh2LGMpIChST1RMMzIodixjKSkKKyNkZWZpbmUgWE9SKHYsdykgKCh2KSBeICh3KSkKKyNkZWZpbmUgUExVUyh2LHcpIChVMzJWKCh2KSArICh3KSkpCisjZGVmaW5lIFBMVVNPTkUodikgKFBMVVMoKHYpLDEpKQorCisjZGVmaW5lIFFVQVJURVJST1VORChhLGIsYyxkKSBcCisgIGEgPSBQTFVTKGEsYik7IGQgPSBST1RBVEUoWE9SKGQsYSksMTYpOyBcCisgIGMgPSBQTFVTKGMsZCk7IGIgPSBST1RBVEUoWE9SKGIsYyksMTIpOyBcCisgIGEgPSBQTFVTKGEsYik7IGQgPSBST1RBVEUoWE9SKGQsYSksIDgpOyBcCisgIGMgPSBQTFVTKGMsZCk7IGIgPSBST1RBVEUoWE9SKGIsYyksIDcpOworCitzdGF0aWMgY29uc3QgY2hhciBzaWdtYVsxNl0gPSAiZXhwYW5kIDMyLWJ5dGUgayI7CitzdGF0aWMgY29uc3QgY2hhciB0YXVbMTZdID0gImV4cGFuZCAxNi1ieXRlIGsiOworCitzdGF0aWMgdm9pZAorY2hhY2hhX2tleXNldHVwKGNoYWNoYV9jdHggKngsY29uc3QgdTggKmssdTMyIGtiaXRzLHUzMiBpdmJpdHMpCit7CisgIGNvbnN0IGNoYXIgKmNvbnN0YW50czsKKworICB4LT5pbnB1dFs0XSA9IFU4VE8zMl9MSVRUTEUoayArIDApOworICB4LT5pbnB1dFs1XSA9IFU4VE8zMl9MSVRUTEUoayArIDQpOworICB4LT5pbnB1dFs2XSA9IFU4VE8zMl9MSVRUTEUoayArIDgpOworICB4LT5pbnB1dFs3XSA9IFU4VE8zMl9MSVRUTEUoayArIDEyKTsKKyAgaWYgKGtiaXRzID09IDI1NikgeyAvKiByZWNvbW1lbmRlZCAqLworICAgIGsgKz0gMTY7CisgICAgY29uc3RhbnRzID0gc2lnbWE7CisgIH0gZWxzZSB7IC8qIGtiaXRzID09IDEyOCAqLworICAgIGNvbnN0YW50cyA9IHRhdTsKKyAgfQorICB4LT5pbnB1dFs4XSA9IFU4VE8zMl9MSVRUTEUoayArIDApOworICB4LT5pbnB1dFs5XSA9IFU4VE8zMl9MSVRUTEUoayArIDQpOworICB4LT5pbnB1dFsxMF0gPSBVOFRPMzJfTElUVExFKGsgKyA4KTsKKyAgeC0+aW5wdXRbMTFdID0gVThUTzMyX0xJVFRMRShrICsgMTIpOworICB4LT5pbnB1dFswXSA9IFU4VE8zMl9MSVRUTEUoY29uc3RhbnRzICsgMCk7CisgIHgtPmlucHV0WzFdID0gVThUTzMyX0xJVFRMRShjb25zdGFudHMgKyA0KTsKKyAgeC0+aW5wdXRbMl0gPSBVOFRPMzJfTElUVExFKGNvbnN0YW50cyArIDgpOworICB4LT5pbnB1dFszXSA9IFU4VE8zMl9MSVRUTEUoY29uc3RhbnRzICsgMTIpOworfQorCitzdGF0aWMgdm9pZAorY2hhY2hhX2l2c2V0dXAoY2hhY2hhX2N0eCAqeCxjb25zdCB1OCAqaXYpCit7CisgIHgtPmlucHV0WzEyXSA9IDA7CisgIHgtPmlucHV0WzEzXSA9IDA7CisgIHgtPmlucHV0WzE0XSA9IFU4VE8zMl9MSVRUTEUoaXYgKyAwKTsKKyAgeC0+aW5wdXRbMTVdID0gVThUTzMyX0xJVFRMRShpdiArIDQpOworfQorCitzdGF0aWMgdm9pZAorY2hhY2hhX2VuY3J5cHRfYnl0ZXMoY2hhY2hhX2N0eCAqeCxjb25zdCB1OCAqbSx1OCAqYyx1MzIgYnl0ZXMpCit7CisgIHUzMiB4MCwgeDEsIHgyLCB4MywgeDQsIHg1LCB4NiwgeDcsIHg4LCB4OSwgeDEwLCB4MTEsIHgxMiwgeDEzLCB4MTQsIHgxNTsKKyAgdTMyIGowLCBqMSwgajIsIGozLCBqNCwgajUsIGo2LCBqNywgajgsIGo5LCBqMTAsIGoxMSwgajEyLCBqMTMsIGoxNCwgajE1OworICB1OCAqY3RhcmdldCA9IE5VTEw7CisgIHU4IHRtcFs2NF07CisgIHVfaW50IGk7CisKKyAgaWYgKCFieXRlcykgcmV0dXJuOworCisgIGowID0geC0+aW5wdXRbMF07CisgIGoxID0geC0+aW5wdXRbMV07CisgIGoyID0geC0+aW5wdXRbMl07CisgIGozID0geC0+aW5wdXRbM107CisgIGo0ID0geC0+aW5wdXRbNF07CisgIGo1ID0geC0+aW5wdXRbNV07CisgIGo2ID0geC0+aW5wdXRbNl07CisgIGo3ID0geC0+aW5wdXRbN107CisgIGo4ID0geC0+aW5wdXRbOF07CisgIGo5ID0geC0+aW5wdXRbOV07CisgIGoxMCA9IHgtPmlucHV0WzEwXTsKKyAgajExID0geC0+aW5wdXRbMTFdOworICBqMTIgPSB4LT5pbnB1dFsxMl07CisgIGoxMyA9IHgtPmlucHV0WzEzXTsKKyAgajE0ID0geC0+aW5wdXRbMTRdOworICBqMTUgPSB4LT5pbnB1dFsxNV07CisKKyAgZm9yICg7OykgeworICAgIGlmIChieXRlcyA8IDY0KSB7CisgICAgICBmb3IgKGkgPSAwO2kgPCBieXRlczsrK2kpIHRtcFtpXSA9IG1baV07CisgICAgICBtID0gdG1wOworICAgICAgY3RhcmdldCA9IGM7CisgICAgICBjID0gdG1wOworICAgIH0KKyAgICB4MCA9IGowOworICAgIHgxID0gajE7CisgICAgeDIgPSBqMjsKKyAgICB4MyA9IGozOworICAgIHg0ID0gajQ7CisgICAgeDUgPSBqNTsKKyAgICB4NiA9IGo2OworICAgIHg3ID0gajc7CisgICAgeDggPSBqODsKKyAgICB4OSA9IGo5OworICAgIHgxMCA9IGoxMDsKKyAgICB4MTEgPSBqMTE7CisgICAgeDEyID0gajEyOworICAgIHgxMyA9IGoxMzsKKyAgICB4MTQgPSBqMTQ7CisgICAgeDE1ID0gajE1OworICAgIGZvciAoaSA9IDIwO2kgPiAwO2kgLT0gMikgeworICAgICAgUVVBUlRFUlJPVU5EKCB4MCwgeDQsIHg4LHgxMikKKyAgICAgIFFVQVJURVJST1VORCggeDEsIHg1LCB4OSx4MTMpCisgICAgICBRVUFSVEVSUk9VTkQoIHgyLCB4Nix4MTAseDE0KQorICAgICAgUVVBUlRFUlJPVU5EKCB4MywgeDcseDExLHgxNSkKKyAgICAgIFFVQVJURVJST1VORCggeDAsIHg1LHgxMCx4MTUpCisgICAgICBRVUFSVEVSUk9VTkQoIHgxLCB4Nix4MTEseDEyKQorICAgICAgUVVBUlRFUlJPVU5EKCB4MiwgeDcsIHg4LHgxMykKKyAgICAgIFFVQVJURVJST1VORCggeDMsIHg0LCB4OSx4MTQpCisgICAgfQorICAgIHgwID0gUExVUyh4MCxqMCk7CisgICAgeDEgPSBQTFVTKHgxLGoxKTsKKyAgICB4MiA9IFBMVVMoeDIsajIpOworICAgIHgzID0gUExVUyh4MyxqMyk7CisgICAgeDQgPSBQTFVTKHg0LGo0KTsKKyAgICB4NSA9IFBMVVMoeDUsajUpOworICAgIHg2ID0gUExVUyh4NixqNik7CisgICAgeDcgPSBQTFVTKHg3LGo3KTsKKyAgICB4OCA9IFBMVVMoeDgsajgpOworICAgIHg5ID0gUExVUyh4OSxqOSk7CisgICAgeDEwID0gUExVUyh4MTAsajEwKTsKKyAgICB4MTEgPSBQTFVTKHgxMSxqMTEpOworICAgIHgxMiA9IFBMVVMoeDEyLGoxMik7CisgICAgeDEzID0gUExVUyh4MTMsajEzKTsKKyAgICB4MTQgPSBQTFVTKHgxNCxqMTQpOworICAgIHgxNSA9IFBMVVMoeDE1LGoxNSk7CisKKyNpZm5kZWYgS0VZU1RSRUFNX09OTFkKKyAgICB4MCA9IFhPUih4MCxVOFRPMzJfTElUVExFKG0gKyAwKSk7CisgICAgeDEgPSBYT1IoeDEsVThUTzMyX0xJVFRMRShtICsgNCkpOworICAgIHgyID0gWE9SKHgyLFU4VE8zMl9MSVRUTEUobSArIDgpKTsKKyAgICB4MyA9IFhPUih4MyxVOFRPMzJfTElUVExFKG0gKyAxMikpOworICAgIHg0ID0gWE9SKHg0LFU4VE8zMl9MSVRUTEUobSArIDE2KSk7CisgICAgeDUgPSBYT1IoeDUsVThUTzMyX0xJVFRMRShtICsgMjApKTsKKyAgICB4NiA9IFhPUih4NixVOFRPMzJfTElUVExFKG0gKyAyNCkpOworICAgIHg3ID0gWE9SKHg3LFU4VE8zMl9MSVRUTEUobSArIDI4KSk7CisgICAgeDggPSBYT1IoeDgsVThUTzMyX0xJVFRMRShtICsgMzIpKTsKKyAgICB4OSA9IFhPUih4OSxVOFRPMzJfTElUVExFKG0gKyAzNikpOworICAgIHgxMCA9IFhPUih4MTAsVThUTzMyX0xJVFRMRShtICsgNDApKTsKKyAgICB4MTEgPSBYT1IoeDExLFU4VE8zMl9MSVRUTEUobSArIDQ0KSk7CisgICAgeDEyID0gWE9SKHgxMixVOFRPMzJfTElUVExFKG0gKyA0OCkpOworICAgIHgxMyA9IFhPUih4MTMsVThUTzMyX0xJVFRMRShtICsgNTIpKTsKKyAgICB4MTQgPSBYT1IoeDE0LFU4VE8zMl9MSVRUTEUobSArIDU2KSk7CisgICAgeDE1ID0gWE9SKHgxNSxVOFRPMzJfTElUVExFKG0gKyA2MCkpOworI2VuZGlmCisKKyAgICBqMTIgPSBQTFVTT05FKGoxMik7CisgICAgaWYgKCFqMTIpIHsKKyAgICAgIGoxMyA9IFBMVVNPTkUoajEzKTsKKyAgICAgIC8qIHN0b3BwaW5nIGF0IDJeNzAgYnl0ZXMgcGVyIG5vbmNlIGlzIHVzZXIncyByZXNwb25zaWJpbGl0eSAqLworICAgIH0KKworICAgIFUzMlRPOF9MSVRUTEUoYyArIDAseDApOworICAgIFUzMlRPOF9MSVRUTEUoYyArIDQseDEpOworICAgIFUzMlRPOF9MSVRUTEUoYyArIDgseDIpOworICAgIFUzMlRPOF9MSVRUTEUoYyArIDEyLHgzKTsKKyAgICBVMzJUTzhfTElUVExFKGMgKyAxNix4NCk7CisgICAgVTMyVE84X0xJVFRMRShjICsgMjAseDUpOworICAgIFUzMlRPOF9MSVRUTEUoYyArIDI0LHg2KTsKKyAgICBVMzJUTzhfTElUVExFKGMgKyAyOCx4Nyk7CisgICAgVTMyVE84X0xJVFRMRShjICsgMzIseDgpOworICAgIFUzMlRPOF9MSVRUTEUoYyArIDM2LHg5KTsKKyAgICBVMzJUTzhfTElUVExFKGMgKyA0MCx4MTApOworICAgIFUzMlRPOF9MSVRUTEUoYyArIDQ0LHgxMSk7CisgICAgVTMyVE84X0xJVFRMRShjICsgNDgseDEyKTsKKyAgICBVMzJUTzhfTElUVExFKGMgKyA1Mix4MTMpOworICAgIFUzMlRPOF9MSVRUTEUoYyArIDU2LHgxNCk7CisgICAgVTMyVE84X0xJVFRMRShjICsgNjAseDE1KTsKKworICAgIGlmIChieXRlcyA8PSA2NCkgeworICAgICAgaWYgKGJ5dGVzIDwgNjQpIHsKKyAgICAgICAgZm9yIChpID0gMDtpIDwgYnl0ZXM7KytpKSBjdGFyZ2V0W2ldID0gY1tpXTsKKyAgICAgIH0KKyAgICAgIHgtPmlucHV0WzEyXSA9IGoxMjsKKyAgICAgIHgtPmlucHV0WzEzXSA9IGoxMzsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgYnl0ZXMgLT0gNjQ7CisgICAgYyArPSA2NDsKKyNpZm5kZWYgS0VZU1RSRUFNX09OTFkKKyAgICBtICs9IDY0OworI2VuZGlmCisgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9kbWlzYy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2RtaXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3OTVjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9kbWlzYy5jCkBAIC0wLDAgKzEsMjI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTggYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisjaWZuZGVmIE1VTFRJUExFX1RIUkVBRFMKKyBjaGFyICpkdG9hX3Jlc3VsdDsKKyNlbmRpZgorCisgY2hhciAqCisjaWZkZWYgS1JfaGVhZGVycworcnZfYWxsb2MoaSkgaW50IGk7CisjZWxzZQorcnZfYWxsb2MoaW50IGkpCisjZW5kaWYKK3sKKwlpbnQgaiwgaywgKnI7CisKKwlqID0gc2l6ZW9mKFVMb25nKTsKKwlmb3IoayA9IDA7CisJCXNpemVvZihCaWdpbnQpIC0gc2l6ZW9mKFVMb25nKSAtIHNpemVvZihpbnQpICsgaiA8PSBpOworCQlqIDw8PSAxKQorCQkJaysrOworCXIgPSAoaW50KilCYWxsb2Moayk7CisJaWYgKHIgPT0gTlVMTCkKKwkJcmV0dXJuICgKKyNpZm5kZWYgTVVMVElQTEVfVEhSRUFEUworCQlkdG9hX3Jlc3VsdCA9CisjZW5kaWYKKwkJCU5VTEwpOworCSpyID0gazsKKwlyZXR1cm4KKyNpZm5kZWYgTVVMVElQTEVfVEhSRUFEUworCWR0b2FfcmVzdWx0ID0KKyNlbmRpZgorCQkoY2hhciAqKShyKzEpOworCX0KKworIGNoYXIgKgorI2lmZGVmIEtSX2hlYWRlcnMKK25ydl9hbGxvYyhzLCBydmUsIG4pIGNoYXIgKnMsICoqcnZlOyBpbnQgbjsKKyNlbHNlCitucnZfYWxsb2MoY2hhciAqcywgY2hhciAqKnJ2ZSwgaW50IG4pCisjZW5kaWYKK3sKKwljaGFyICpydiwgKnQ7CisKKwl0ID0gcnYgPSBydl9hbGxvYyhuKTsKKwlpZiAodCA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCXdoaWxlKCgqdCA9ICpzKyspICE9MCkKKwkJdCsrOworCWlmIChydmUpCisJCSpydmUgPSB0OworCXJldHVybiBydjsKKwl9CisKKy8qIGZyZWVkdG9hKHMpIG11c3QgYmUgdXNlZCB0byBmcmVlIHZhbHVlcyBzIHJldHVybmVkIGJ5IGR0b2EKKyAqIHdoZW4gTVVMVElQTEVfVEhSRUFEUyBpcyAjZGVmaW5lZC4gIEl0IHNob3VsZCBiZSB1c2VkIGluIGFsbCBjYXNlcywKKyAqIGJ1dCBmb3IgY29uc2lzdGVuY3kgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIGR0b2EsIGl0IGlzIG9wdGlvbmFsCisgKiB3aGVuIE1VTFRJUExFX1RIUkVBRFMgaXMgbm90IGRlZmluZWQuCisgKi8KKworIHZvaWQKKyNpZmRlZiBLUl9oZWFkZXJzCitmcmVlZHRvYShzKSBjaGFyICpzOworI2Vsc2UKK2ZyZWVkdG9hKGNoYXIgKnMpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmIgPSAoQmlnaW50ICopKChpbnQgKilzIC0gMSk7CisJYi0+bWF4d2RzID0gMSA8PCAoYi0+ayA9ICooaW50KiliKTsKKwlCZnJlZShiKTsKKyNpZm5kZWYgTVVMVElQTEVfVEhSRUFEUworCWlmIChzID09IGR0b2FfcmVzdWx0KQorCQlkdG9hX3Jlc3VsdCA9IDA7CisjZW5kaWYKKwl9CisKKyBpbnQKK3F1b3JlbQorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYiwgUykgQmlnaW50ICpiLCAqUzsKKyNlbHNlCisJKEJpZ2ludCAqYiwgQmlnaW50ICpTKQorI2VuZGlmCit7CisJaW50IG47CisJVUxvbmcgKmJ4LCAqYnhlLCBxLCAqc3gsICpzeGU7CisjaWZkZWYgVUxMb25nCisJVUxMb25nIGJvcnJvdywgY2FycnksIHksIHlzOworI2Vsc2UKKwlVTG9uZyBib3Jyb3csIGNhcnJ5LCB5LCB5czsKKyNpZmRlZiBQYWNrXzMyCisJVUxvbmcgc2ksIHosIHpzOworI2VuZGlmCisjZW5kaWYKKworCW4gPSBTLT53ZHM7CisjaWZkZWYgREVCVUcKKwkvKmRlYnVnKi8gaWYgKGItPndkcyA+IG4pCisJLypkZWJ1ZyovCUJ1Zygib3ZlcnNpemUgYiBpbiBxdW9yZW0iKTsKKyNlbmRpZgorCWlmIChiLT53ZHMgPCBuKQorCQlyZXR1cm4gMDsKKwlzeCA9IFMtPng7CisJc3hlID0gc3ggKyAtLW47CisJYnggPSBiLT54OworCWJ4ZSA9IGJ4ICsgbjsKKwlxID0gKmJ4ZSAvICgqc3hlICsgMSk7CS8qIGVuc3VyZSBxIDw9IHRydWUgcXVvdGllbnQgKi8KKyNpZmRlZiBERUJVRworCS8qZGVidWcqLyBpZiAocSA+IDkpCisJLypkZWJ1ZyovCUJ1Zygib3ZlcnNpemVkIHF1b3RpZW50IGluIHF1b3JlbSIpOworI2VuZGlmCisJaWYgKHEpIHsKKwkJYm9ycm93ID0gMDsKKwkJY2FycnkgPSAwOworCQlkbyB7CisjaWZkZWYgVUxMb25nCisJCQl5cyA9ICpzeCsrICogKFVMTG9uZylxICsgY2Fycnk7CisJCQljYXJyeSA9IHlzID4+IDMyOworCQkJeSA9ICpieCAtICh5cyAmIDB4ZmZmZmZmZmZVTCkgLSBib3Jyb3c7CisJCQlib3Jyb3cgPSB5ID4+IDMyICYgMVVMOworCQkJKmJ4KysgPSB5ICYgMHhmZmZmZmZmZlVMOworI2Vsc2UKKyNpZmRlZiBQYWNrXzMyCisJCQlzaSA9ICpzeCsrOworCQkJeXMgPSAoc2kgJiAweGZmZmYpICogcSArIGNhcnJ5OworCQkJenMgPSAoc2kgPj4gMTYpICogcSArICh5cyA+PiAxNik7CisJCQljYXJyeSA9IHpzID4+IDE2OworCQkJeSA9ICgqYnggJiAweGZmZmYpIC0gKHlzICYgMHhmZmZmKSAtIGJvcnJvdzsKKwkJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCQl6ID0gKCpieCA+PiAxNikgLSAoenMgJiAweGZmZmYpIC0gYm9ycm93OworCQkJYm9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAxNjsKKwkJCVN0b3JlaW5jKGJ4LCB6LCB5KTsKKyNlbHNlCisJCQl5cyA9ICpzeCsrICogcSArIGNhcnJ5OworCQkJY2FycnkgPSB5cyA+PiAxNjsKKwkJCXkgPSAqYnggLSAoeXMgJiAweGZmZmYpIC0gYm9ycm93OworCQkJYm9ycm93ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJCSpieCsrID0geSAmIDB4ZmZmZjsKKyNlbmRpZgorI2VuZGlmCisJCQl9CisJCQl3aGlsZShzeCA8PSBzeGUpOworCQlpZiAoISpieGUpIHsKKwkJCWJ4ID0gYi0+eDsKKwkJCXdoaWxlKC0tYnhlID4gYnggJiYgISpieGUpCisJCQkJLS1uOworCQkJYi0+d2RzID0gbjsKKwkJCX0KKwkJfQorCWlmIChjbXAoYiwgUykgPj0gMCkgeworCQlxKys7CisJCWJvcnJvdyA9IDA7CisJCWNhcnJ5ID0gMDsKKwkJYnggPSBiLT54OworCQlzeCA9IFMtPng7CisJCWRvIHsKKyNpZmRlZiBVTExvbmcKKwkJCXlzID0gKnN4KysgKyBjYXJyeTsKKwkJCWNhcnJ5ID0geXMgPj4gMzI7CisJCQl5ID0gKmJ4IC0gKHlzICYgMHhmZmZmZmZmZlVMKSAtIGJvcnJvdzsKKwkJCWJvcnJvdyA9IHkgPj4gMzIgJiAxVUw7CisJCQkqYngrKyA9IHkgJiAweGZmZmZmZmZmVUw7CisjZWxzZQorI2lmZGVmIFBhY2tfMzIKKwkJCXNpID0gKnN4Kys7CisJCQl5cyA9IChzaSAmIDB4ZmZmZikgKyBjYXJyeTsKKwkJCXpzID0gKHNpID4+IDE2KSArICh5cyA+PiAxNik7CisJCQljYXJyeSA9IHpzID4+IDE2OworCQkJeSA9ICgqYnggJiAweGZmZmYpIC0gKHlzICYgMHhmZmZmKSAtIGJvcnJvdzsKKwkJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCQl6ID0gKCpieCA+PiAxNikgLSAoenMgJiAweGZmZmYpIC0gYm9ycm93OworCQkJYm9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAxNjsKKwkJCVN0b3JlaW5jKGJ4LCB6LCB5KTsKKyNlbHNlCisJCQl5cyA9ICpzeCsrICsgY2Fycnk7CisJCQljYXJyeSA9IHlzID4+IDE2OworCQkJeSA9ICpieCAtICh5cyAmIDB4ZmZmZikgLSBib3Jyb3c7CisJCQlib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQkJKmJ4KysgPSB5ICYgMHhmZmZmOworI2VuZGlmCisjZW5kaWYKKwkJCX0KKwkJCXdoaWxlKHN4IDw9IHN4ZSk7CisJCWJ4ID0gYi0+eDsKKwkJYnhlID0gYnggKyBuOworCQlpZiAoISpieGUpIHsKKwkJCXdoaWxlKC0tYnhlID4gYnggJiYgISpieGUpCisJCQkJLS1uOworCQkJYi0+d2RzID0gbjsKKwkJCX0KKwkJfQorCXJldHVybiBxOworCX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9kdG9hLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZHRvYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OGY3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZHRvYS5jCkBAIC0wLDAgKzEsODM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisvKiBkdG9hIGZvciBJRUVFIGFyaXRobWV0aWMgKGRtZyk6IGNvbnZlcnQgZG91YmxlIHRvIEFTQ0lJIHN0cmluZy4KKyAqCisgKiBJbnNwaXJlZCBieSAiSG93IHRvIFByaW50IEZsb2F0aW5nLVBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgYnkKKyAqIEd1eSBMLiBTdGVlbGUsIEpyLiBhbmQgSm9uIEwuIFdoaXRlIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiAxMTItMTI2XS4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICoJMS4gUmF0aGVyIHRoYW4gaXRlcmF0aW5nLCB3ZSB1c2UgYSBzaW1wbGUgbnVtZXJpYyBvdmVyZXN0aW1hdGUKKyAqCSAgIHRvIGRldGVybWluZSBrID0gZmxvb3IobG9nMTAoZCkpLiAgV2Ugc2NhbGUgcmVsZXZhbnQKKyAqCSAgIHF1YW50aXRpZXMgdXNpbmcgTyhsb2cyKGspKSByYXRoZXIgdGhhbiBPKGspIG11bHRpcGxpY2F0aW9ucy4KKyAqCTIuIEZvciBzb21lIG1vZGVzID4gMiAoY29ycmVzcG9uZGluZyB0byBlY3Z0IGFuZCBmY3Z0KSwgd2UgZG9uJ3QKKyAqCSAgIHRyeSB0byBnZW5lcmF0ZSBkaWdpdHMgc3RyaWN0bHkgbGVmdCB0byByaWdodC4gIEluc3RlYWQsIHdlCisgKgkgICBjb21wdXRlIHdpdGggZmV3ZXIgYml0cyBhbmQgcHJvcGFnYXRlIHRoZSBjYXJyeSBpZiBuZWNlc3NhcnkKKyAqCSAgIHdoZW4gcm91bmRpbmcgdGhlIGZpbmFsIGRpZ2l0IHVwLiAgVGhpcyBpcyBvZnRlbiBmYXN0ZXIuCisgKgkzLiBVbmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IGlucHV0IHdpbGwgYmUgcm91bmRlZCBuZWFyZXN0LAorICoJICAgbW9kZSAwIHJlbmRlcnMgMWUyMyBhcyAxZTIzIHJhdGhlciB0aGFuIDkuOTk5OTk5OTk5OTk5OTk5ZTIyLgorICoJICAgVGhhdCBpcywgd2UgYWxsb3cgZXF1YWxpdHkgaW4gc3RvcHBpbmcgdGVzdHMgd2hlbiB0aGUKKyAqCSAgIHJvdW5kLW5lYXJlc3QgcnVsZSB3aWxsIGdpdmUgdGhlIHNhbWUgZmxvYXRpbmctcG9pbnQgdmFsdWUKKyAqCSAgIGFzIHdvdWxkIHNhdGlzZmFjdGlvbiBvZiB0aGUgc3RvcHBpbmcgdGVzdCB3aXRoIHN0cmljdAorICoJICAgaW5lcXVhbGl0eS4KKyAqCTQuIFdlIHJlbW92ZSBjb21tb24gZmFjdG9ycyBvZiBwb3dlcnMgb2YgMiBmcm9tIHJlbGV2YW50CisgKgkgICBxdWFudGl0aWVzLgorICoJNS4gV2hlbiBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IGludGVnZXJzIGxlc3MgdGhhbiAxZTE2LAorICoJICAgd2UgdXNlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgcmF0aGVyIHRoYW4gcmVzb3J0aW5nCisgKgkgICB0byBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlcnMuCisgKgk2LiBXaGVuIGFza2VkIHRvIHByb2R1Y2UgZmV3ZXIgdGhhbiAxNSBkaWdpdHMsIHdlIGZpcnN0IHRyeQorICoJICAgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYzsgd2UgcmVzb3J0IHRvCisgKgkgICBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljIG9ubHkgaWYgd2UgY2Fubm90CisgKgkgICBndWFyYW50ZWUgdGhhdCB0aGUgZmxvYXRpbmctcG9pbnQgY2FsY3VsYXRpb24gaGFzIGdpdmVuCisgKgkgICB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0LiAgRm9yIGsgcmVxdWVzdGVkIGRpZ2l0cyBhbmQKKyAqCSAgICJ1bmlmb3JtbHkiIGRpc3RyaWJ1dGVkIGlucHV0LCB0aGUgcHJvYmFiaWxpdHkgaXMKKyAqCSAgIHNvbWV0aGluZyBsaWtlIDEwXihrLTE1KSB0aGF0IHdlIG11c3QgcmVzb3J0IHRvIHRoZSBMb25nCisgKgkgICBjYWxjdWxhdGlvbi4KKyAqLworCisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworI3VuZGVmIENoZWNrX0ZMVF9ST1VORFMKKyNkZWZpbmUgQ2hlY2tfRkxUX1JPVU5EUworI2Vsc2UKKyNkZWZpbmUgUm91bmRpbmcgRmx0X1JvdW5kcworI2VuZGlmCisKKyBjaGFyICoKK2R0b2EKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGQwLCBtb2RlLCBuZGlnaXRzLCBkZWNwdCwgc2lnbiwgcnZlKQorCWRvdWJsZSBkMDsgaW50IG1vZGUsIG5kaWdpdHMsICpkZWNwdCwgKnNpZ247IGNoYXIgKipydmU7CisjZWxzZQorCShkb3VibGUgZDAsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLCBjaGFyICoqcnZlKQorI2VuZGlmCit7CisgLyoJQXJndW1lbnRzIG5kaWdpdHMsIGRlY3B0LCBzaWduIGFyZSBzaW1pbGFyIHRvIHRob3NlCisJb2YgZWN2dCBhbmQgZmN2dDsgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQgZnJvbQorCXRoZSByZXR1cm5lZCBzdHJpbmcuICBJZiBub3QgbnVsbCwgKnJ2ZSBpcyBzZXQgdG8gcG9pbnQKKwl0byB0aGUgZW5kIG9mIHRoZSByZXR1cm4gdmFsdWUuICBJZiBkIGlzICstSW5maW5pdHkgb3IgTmFOLAorCXRoZW4gKmRlY3B0IGlzIHNldCB0byA5OTk5LgorCisJbW9kZToKKwkJMCA9PT4gc2hvcnRlc3Qgc3RyaW5nIHRoYXQgeWllbGRzIGQgd2hlbiByZWFkIGluCisJCQlhbmQgcm91bmRlZCB0byBuZWFyZXN0LgorCQkxID09PiBsaWtlIDAsIGJ1dCB3aXRoIFN0ZWVsZSAmIFdoaXRlIHN0b3BwaW5nIHJ1bGU7CisJCQllLmcuIHdpdGggSUVFRSBQNzU0IGFyaXRobWV0aWMgLCBtb2RlIDAgZ2l2ZXMKKwkJCTFlMjMgd2hlcmVhcyBtb2RlIDEgZ2l2ZXMgOS45OTk5OTk5OTk5OTk5OTllMjIuCisJCTIgPT0+IG1heCgxLG5kaWdpdHMpIHNpZ25pZmljYW50IGRpZ2l0cy4gIFRoaXMgZ2l2ZXMgYQorCQkJcmV0dXJuIHZhbHVlIHNpbWlsYXIgdG8gdGhhdCBvZiBlY3Z0LCBleGNlcHQKKwkJCXRoYXQgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQuCisJCTMgPT0+IHRocm91Z2ggbmRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50LiAgVGhpcworCQkJZ2l2ZXMgYSByZXR1cm4gdmFsdWUgc2ltaWxhciB0byB0aGF0IGZyb20gZmN2dCwKKwkJCWV4Y2VwdCB0aGF0IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBwcmVzc2VkLCBhbmQKKwkJCW5kaWdpdHMgY2FuIGJlIG5lZ2F0aXZlLgorCQk0LDUgPT0+IHNpbWlsYXIgdG8gMiBhbmQgMywgcmVzcGVjdGl2ZWx5LCBidXQgKGluCisJCQlyb3VuZC1uZWFyZXN0IG1vZGUpIHdpdGggdGhlIHRlc3RzIG9mIG1vZGUgMCB0bworCQkJcG9zc2libHkgcmV0dXJuIGEgc2hvcnRlciBzdHJpbmcgdGhhdCByb3VuZHMgdG8gZC4KKwkJCVdpdGggSUVFRSBhcml0aG1ldGljIGFuZCBjb21waWxhdGlvbiB3aXRoCisJCQktREhvbm9yX0ZMVF9ST1VORFMsIG1vZGVzIDQgYW5kIDUgYmVoYXZlIHRoZSBzYW1lCisJCQlhcyBtb2RlcyAyIGFuZCAzIHdoZW4gRkxUX1JPVU5EUyAhPSAxLgorCQk2LTkgPT0+IERlYnVnZ2luZyBtb2RlcyBzaW1pbGFyIHRvIG1vZGUgLSA0OiAgZG9uJ3QgdHJ5CisJCQlmYXN0IGZsb2F0aW5nLXBvaW50IGVzdGltYXRlIChpZiBhcHBsaWNhYmxlKS4KKworCQlWYWx1ZXMgb2YgbW9kZSBvdGhlciB0aGFuIDAtOSBhcmUgdHJlYXRlZCBhcyBtb2RlIDAuCisKKwkJU3VmZmljaWVudCBzcGFjZSBpcyBhbGxvY2F0ZWQgdG8gdGhlIHJldHVybiB2YWx1ZQorCQl0byBob2xkIHRoZSBzdXBwcmVzc2VkIHRyYWlsaW5nIHplcm9zLgorCSovCisKKwlpbnQgYmJpdHMsIGIyLCBiNSwgYmUsIGRpZywgaSwgaWVwcywgaWxpbSwgaWxpbTAsIGlsaW0xLAorCQlqLCBqMSwgaywgazAsIGtfY2hlY2ssIGxlZnRyaWdodCwgbTIsIG01LCBzMiwgczUsCisJCXNwZWNfY2FzZSwgdHJ5X3F1aWNrOworCUxvbmcgTDsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCWludCBkZW5vcm07CisJVUxvbmcgeDsKKyNlbmRpZgorCUJpZ2ludCAqYiwgKmIxLCAqZGVsdGEsICptbG8sICptaGksICpTOworCVUgZCwgZDIsIGVwczsKKwlkb3VibGUgZHM7CisJY2hhciAqcywgKnMwOworI2lmZGVmIFNFVF9JTkVYQUNUCisJaW50IGluZXhhY3QsIG9sZGluZXhhY3Q7CisjZW5kaWYKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTIC8qeyovCisJaW50IFJvdW5kaW5nOworI2lmZGVmIFRydXN0X0ZMVF9ST1VORFMgLyp7eyBvbmx5IGRlZmluZSB0aGlzIGlmIEZMVF9ST1VORFMgcmVhbGx5IHdvcmtzISAqLworCVJvdW5kaW5nID0gRmx0X1JvdW5kczsKKyNlbHNlIC8qfXsqLworCVJvdW5kaW5nID0gMTsKKwlzd2l0Y2goZmVnZXRyb3VuZCgpKSB7CisJICBjYXNlIEZFX1RPV0FSRFpFUk86CVJvdW5kaW5nID0gMDsgYnJlYWs7CisJICBjYXNlIEZFX1VQV0FSRDoJUm91bmRpbmcgPSAyOyBicmVhazsKKwkgIGNhc2UgRkVfRE9XTldBUkQ6CVJvdW5kaW5nID0gMzsKKwkgIH0KKyNlbmRpZiAvKn19Ki8KKyNlbmRpZiAvKn0qLworCisjaWZuZGVmIE1VTFRJUExFX1RIUkVBRFMKKwlpZiAoZHRvYV9yZXN1bHQpIHsKKwkJZnJlZWR0b2EoZHRvYV9yZXN1bHQpOworCQlkdG9hX3Jlc3VsdCA9IDA7CisJCX0KKyNlbmRpZgorCWQuZCA9IGQwOworCWlmICh3b3JkMCgmZCkgJiBTaWduX2JpdCkgeworCQkvKiBzZXQgc2lnbiBmb3IgZXZlcnl0aGluZywgaW5jbHVkaW5nIDAncyBhbmQgTmFOcyAqLworCQkqc2lnbiA9IDE7CisJCXdvcmQwKCZkKSAmPSB+U2lnbl9iaXQ7CS8qIGNsZWFyIHNpZ24gYml0ICovCisJCX0KKwllbHNlCisJCSpzaWduID0gMDsKKworI2lmIGRlZmluZWQoSUVFRV9Bcml0aCkgKyBkZWZpbmVkKFZBWCkKKyNpZmRlZiBJRUVFX0FyaXRoCisJaWYgKCh3b3JkMCgmZCkgJiBFeHBfbWFzaykgPT0gRXhwX21hc2spCisjZWxzZQorCWlmICh3b3JkMCgmZCkgID09IDB4ODAwMCkKKyNlbmRpZgorCQl7CisJCS8qIEluZmluaXR5IG9yIE5hTiAqLworCQkqZGVjcHQgPSA5OTk5OworI2lmZGVmIElFRUVfQXJpdGgKKwkJaWYgKCF3b3JkMSgmZCkgJiYgISh3b3JkMCgmZCkgJiAweGZmZmZmKSkKKwkJCXJldHVybiBucnZfYWxsb2MoIkluZmluaXR5IiwgcnZlLCA4KTsKKyNlbmRpZgorCQlyZXR1cm4gbnJ2X2FsbG9jKCJOYU4iLCBydmUsIDMpOworCQl9CisjZW5kaWYKKyNpZmRlZiBJQk0KKwlkdmFsKCZkKSArPSAwOyAvKiBub3JtYWxpemUgKi8KKyNlbmRpZgorCWlmICghZHZhbCgmZCkpIHsKKwkJKmRlY3B0ID0gMTsKKwkJcmV0dXJuIG5ydl9hbGxvYygiMCIsIHJ2ZSwgMSk7CisJCX0KKworI2lmZGVmIFNFVF9JTkVYQUNUCisJdHJ5X3F1aWNrID0gb2xkaW5leGFjdCA9IGdldF9pbmV4YWN0KCk7CisJaW5leGFjdCA9IDE7CisjZW5kaWYKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJaWYgKFJvdW5kaW5nID49IDIpIHsKKwkJaWYgKCpzaWduKQorCQkJUm91bmRpbmcgPSBSb3VuZGluZyA9PSAyID8gMCA6IDI7CisJCWVsc2UKKwkJCWlmIChSb3VuZGluZyAhPSAyKQorCQkJCVJvdW5kaW5nID0gMDsKKwkJfQorI2VuZGlmCisKKwliID0gZDJiKGR2YWwoJmQpLCAmYmUsICZiYml0cyk7CisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisJaSA9IChpbnQpKHdvcmQwKCZkKSA+PiBFeHBfc2hpZnQxICYgKEV4cF9tYXNrPj5FeHBfc2hpZnQxKSk7CisjZWxzZQorCWlmICgoIGkgPSAoaW50KSh3b3JkMCgmZCkgPj4gRXhwX3NoaWZ0MSAmIChFeHBfbWFzaz4+RXhwX3NoaWZ0MSkpICkhPTApIHsKKyNlbmRpZgorCQlkdmFsKCZkMikgPSBkdmFsKCZkKTsKKwkJd29yZDAoJmQyKSAmPSBGcmFjX21hc2sxOworCQl3b3JkMCgmZDIpIHw9IEV4cF8xMTsKKyNpZmRlZiBJQk0KKwkJaWYgKCggaiA9IDExIC0gaGkwYml0cyh3b3JkMCgmZDIpICYgRnJhY19tYXNrKSApIT0wKQorCQkJZHZhbCgmZDIpIC89IDEgPDwgajsKKyNlbmRpZgorCisJCS8qIGxvZyh4KQl+PX4gbG9nKDEuNSkgKyAoeC0xLjUpLzEuNQorCQkgKiBsb2cxMCh4KQkgPSAgbG9nKHgpIC8gbG9nKDEwKQorCQkgKgkJfj1+IGxvZygxLjUpL2xvZygxMCkgKyAoeC0xLjUpLygxLjUqbG9nKDEwKSkKKwkJICogbG9nMTAoJmQpID0gKGktQmlhcykqbG9nKDIpL2xvZygxMCkgKyBsb2cxMCgmZDIpCisJCSAqCisJCSAqIFRoaXMgc3VnZ2VzdHMgY29tcHV0aW5nIGFuIGFwcHJveGltYXRpb24gayB0byBsb2cxMCgmZCkgYnkKKwkJICoKKwkJICogayA9IChpIC0gQmlhcykqMC4zMDEwMjk5OTU2NjM5ODEKKwkJICoJKyAoIChkMi0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU2ODEgKTsKKwkJICoKKwkJICogV2Ugd2FudCBrIHRvIGJlIHRvbyBsYXJnZSByYXRoZXIgdGhhbiB0b28gc21hbGwuCisJCSAqIFRoZSBlcnJvciBpbiB0aGUgZmlyc3Qtb3JkZXIgVGF5bG9yIHNlcmllcyBhcHByb3hpbWF0aW9uCisJCSAqIGlzIGluIG91ciBmYXZvciwgc28gd2UganVzdCByb3VuZCB1cCB0aGUgY29uc3RhbnQgZW5vdWdoCisJCSAqIHRvIGNvbXBlbnNhdGUgZm9yIGFueSBlcnJvciBpbiB0aGUgbXVsdGlwbGljYXRpb24gb2YKKwkJICogKGkgLSBCaWFzKSBieSAwLjMwMTAyOTk5NTY2Mzk4MTsgc2luY2UgfGkgLSBCaWFzfCA8PSAxMDc3LAorCQkgKiBhbmQgMTA3NyAqIDAuMzAxMDMgKiAyXi01MiB+PX4gNy4yZS0xNCwKKwkJICogYWRkaW5nIDFlLTEzIHRvIHRoZSBjb25zdGFudCB0ZXJtIG1vcmUgdGhhbiBzdWZmaWNlcy4KKwkJICogSGVuY2Ugd2UgYWRqdXN0IHRoZSBjb25zdGFudCB0ZXJtIHRvIDAuMTc2MDkxMjU5MDU1OC4KKwkJICogKFdlIGNvdWxkIGdldCBhIG1vcmUgYWNjdXJhdGUgayBieSBpbnZva2luZyBsb2cxMCwKKwkJICogIGJ1dCB0aGlzIGlzIHByb2JhYmx5IG5vdCB3b3J0aHdoaWxlLikKKwkJICovCisKKwkJaSAtPSBCaWFzOworI2lmZGVmIElCTQorCQlpIDw8PSAyOworCQlpICs9IGo7CisjZW5kaWYKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQlkZW5vcm0gPSAwOworCQl9CisJZWxzZSB7CisJCS8qIGQgaXMgZGVub3JtYWxpemVkICovCisKKwkJaSA9IGJiaXRzICsgYmUgKyAoQmlhcyArIChQLTEpIC0gMSk7CisJCXggPSBpID4gMzIgID8gd29yZDAoJmQpIDw8ICg2NCAtIGkpIHwgd29yZDEoJmQpID4+IChpIC0gMzIpCisJCQkgICAgOiB3b3JkMSgmZCkgPDwgKDMyIC0gaSk7CisJCWR2YWwoJmQyKSA9IHg7CisJCXdvcmQwKCZkMikgLT0gMzEqRXhwX21zazE7IC8qIGFkanVzdCBleHBvbmVudCAqLworCQlpIC09IChCaWFzICsgKFAtMSkgLSAxKSArIDE7CisJCWRlbm9ybSA9IDE7CisJCX0KKyNlbmRpZgorCWRzID0gKGR2YWwoJmQyKS0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU4ICsgaSowLjMwMTAyOTk5NTY2Mzk4MTsKKwlrID0gKGludClkczsKKwlpZiAoZHMgPCAwLiAmJiBkcyAhPSBrKQorCQlrLS07CS8qIHdhbnQgayA9IGZsb29yKGRzKSAqLworCWtfY2hlY2sgPSAxOworCWlmIChrID49IDAgJiYgayA8PSBUZW5fcG1heCkgeworCQlpZiAoZHZhbCgmZCkgPCB0ZW5zW2tdKQorCQkJay0tOworCQlrX2NoZWNrID0gMDsKKwkJfQorCWogPSBiYml0cyAtIGkgLSAxOworCWlmIChqID49IDApIHsKKwkJYjIgPSAwOworCQlzMiA9IGo7CisJCX0KKwllbHNlIHsKKwkJYjIgPSAtajsKKwkJczIgPSAwOworCQl9CisJaWYgKGsgPj0gMCkgeworCQliNSA9IDA7CisJCXM1ID0gazsKKwkJczIgKz0gazsKKwkJfQorCWVsc2UgeworCQliMiAtPSBrOworCQliNSA9IC1rOworCQlzNSA9IDA7CisJCX0KKwlpZiAobW9kZSA8IDAgfHwgbW9kZSA+IDkpCisJCW1vZGUgPSAwOworCisjaWZuZGVmIFNFVF9JTkVYQUNUCisjaWZkZWYgQ2hlY2tfRkxUX1JPVU5EUworCXRyeV9xdWljayA9IFJvdW5kaW5nID09IDE7CisjZWxzZQorCXRyeV9xdWljayA9IDE7CisjZW5kaWYKKyNlbmRpZiAvKlNFVF9JTkVYQUNUKi8KKworCWlmIChtb2RlID4gNSkgeworCQltb2RlIC09IDQ7CisJCXRyeV9xdWljayA9IDA7CisJCX0KKwlsZWZ0cmlnaHQgPSAxOworCWlsaW0gPSBpbGltMSA9IC0xOwkvKiBWYWx1ZXMgZm9yIGNhc2VzIDAgYW5kIDE7IGRvbmUgaGVyZSB0byAqLworCQkJCS8qIHNpbGVuY2UgZXJyb25lb3VzICJnY2MgLVdhbGwiIHdhcm5pbmcuICovCisJc3dpdGNoKG1vZGUpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCQlpID0gMTg7CisJCQluZGlnaXRzID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlsZWZ0cmlnaHQgPSAwOworCQkJLyogbm8gYnJlYWsgKi8KKwkJY2FzZSA0OgorCQkJaWYgKG5kaWdpdHMgPD0gMCkKKwkJCQluZGlnaXRzID0gMTsKKwkJCWlsaW0gPSBpbGltMSA9IGkgPSBuZGlnaXRzOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWxlZnRyaWdodCA9IDA7CisJCQkvKiBubyBicmVhayAqLworCQljYXNlIDU6CisJCQlpID0gbmRpZ2l0cyArIGsgKyAxOworCQkJaWxpbSA9IGk7CisJCQlpbGltMSA9IGkgLSAxOworCQkJaWYgKGkgPD0gMCkKKwkJCQlpID0gMTsKKwkJfQorCXMgPSBzMCA9IHJ2X2FsbG9jKGkpOworCWlmIChzID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJaWYgKG1vZGUgPiAxICYmIFJvdW5kaW5nICE9IDEpCisJCWxlZnRyaWdodCA9IDA7CisjZW5kaWYKKworCWlmIChpbGltID49IDAgJiYgaWxpbSA8PSBRdWlja19tYXggJiYgdHJ5X3F1aWNrKSB7CisKKwkJLyogVHJ5IHRvIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuICovCisKKwkJaSA9IDA7CisJCWR2YWwoJmQyKSA9IGR2YWwoJmQpOworCQlrMCA9IGs7CisJCWlsaW0wID0gaWxpbTsKKwkJaWVwcyA9IDI7IC8qIGNvbnNlcnZhdGl2ZSAqLworCQlpZiAoayA+IDApIHsKKwkJCWRzID0gdGVuc1trJjB4Zl07CisJCQlqID0gayA+PiA0OworCQkJaWYgKGogJiBCbGV0Y2gpIHsKKwkJCQkvKiBwcmV2ZW50IG92ZXJmbG93cyAqLworCQkJCWogJj0gQmxldGNoIC0gMTsKKwkJCQlkdmFsKCZkKSAvPSBiaWd0ZW5zW25fYmlndGVucy0xXTsKKwkJCQlpZXBzKys7CisJCQkJfQorCQkJZm9yKDsgajsgaiA+Pj0gMSwgaSsrKQorCQkJCWlmIChqICYgMSkgeworCQkJCQlpZXBzKys7CisJCQkJCWRzICo9IGJpZ3RlbnNbaV07CisJCQkJCX0KKwkJCWR2YWwoJmQpIC89IGRzOworCQkJfQorCQllbHNlIGlmICgoIGoxID0gLWsgKSE9MCkgeworCQkJZHZhbCgmZCkgKj0gdGVuc1tqMSAmIDB4Zl07CisJCQlmb3IoaiA9IGoxID4+IDQ7IGo7IGogPj49IDEsIGkrKykKKwkJCQlpZiAoaiAmIDEpIHsKKwkJCQkJaWVwcysrOworCQkJCQlkdmFsKCZkKSAqPSBiaWd0ZW5zW2ldOworCQkJCQl9CisJCQl9CisJCWlmIChrX2NoZWNrICYmIGR2YWwoJmQpIDwgMS4gJiYgaWxpbSA+IDApIHsKKwkJCWlmIChpbGltMSA8PSAwKQorCQkJCWdvdG8gZmFzdF9mYWlsZWQ7CisJCQlpbGltID0gaWxpbTE7CisJCQlrLS07CisJCQlkdmFsKCZkKSAqPSAxMC47CisJCQlpZXBzKys7CisJCQl9CisJCWR2YWwoJmVwcykgPSBpZXBzKmR2YWwoJmQpICsgNy47CisJCXdvcmQwKCZlcHMpIC09IChQLTEpKkV4cF9tc2sxOworCQlpZiAoaWxpbSA9PSAwKSB7CisJCQlTID0gbWhpID0gMDsKKwkJCWR2YWwoJmQpIC09IDUuOworCQkJaWYgKGR2YWwoJmQpID4gZHZhbCgmZXBzKSkKKwkJCQlnb3RvIG9uZV9kaWdpdDsKKwkJCWlmIChkdmFsKCZkKSA8IC1kdmFsKCZlcHMpKQorCQkJCWdvdG8gbm9fZGlnaXRzOworCQkJZ290byBmYXN0X2ZhaWxlZDsKKwkJCX0KKyNpZm5kZWYgTm9fbGVmdHJpZ2h0CisJCWlmIChsZWZ0cmlnaHQpIHsKKwkJCS8qIFVzZSBTdGVlbGUgJiBXaGl0ZSBtZXRob2Qgb2Ygb25seQorCQkJICogZ2VuZXJhdGluZyBkaWdpdHMgbmVlZGVkLgorCQkJICovCisJCQlkdmFsKCZlcHMpID0gMC41L3RlbnNbaWxpbS0xXSAtIGR2YWwoJmVwcyk7CisJCQlmb3IoaSA9IDA7OykgeworCQkJCUwgPSBkdmFsKCZkKTsKKwkJCQlkdmFsKCZkKSAtPSBMOworCQkJCSpzKysgPSAnMCcgKyAoaW50KUw7CisJCQkJaWYgKGR2YWwoJmQpIDwgZHZhbCgmZXBzKSkKKwkJCQkJZ290byByZXQxOworCQkJCWlmICgxLiAtIGR2YWwoJmQpIDwgZHZhbCgmZXBzKSkKKwkJCQkJZ290byBidW1wX3VwOworCQkJCWlmICgrK2kgPj0gaWxpbSkKKwkJCQkJYnJlYWs7CisJCQkJZHZhbCgmZXBzKSAqPSAxMC47CisJCQkJZHZhbCgmZCkgKj0gMTAuOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisjZW5kaWYKKwkJCS8qIEdlbmVyYXRlIGlsaW0gZGlnaXRzLCB0aGVuIGZpeCB0aGVtIHVwLiAqLworCQkJZHZhbCgmZXBzKSAqPSB0ZW5zW2lsaW0tMV07CisJCQlmb3IoaSA9IDE7OyBpKyssIGR2YWwoJmQpICo9IDEwLikgeworCQkJCUwgPSAoTG9uZykoZHZhbCgmZCkpOworCQkJCWlmICghKGR2YWwoJmQpIC09IEwpKQorCQkJCQlpbGltID0gaTsKKwkJCQkqcysrID0gJzAnICsgKGludClMOworCQkJCWlmIChpID09IGlsaW0pIHsKKwkJCQkJaWYgKGR2YWwoJmQpID4gMC41ICsgZHZhbCgmZXBzKSkKKwkJCQkJCWdvdG8gYnVtcF91cDsKKwkJCQkJZWxzZSBpZiAoZHZhbCgmZCkgPCAwLjUgLSBkdmFsKCZlcHMpKSB7CisJCQkJCQl3aGlsZSgqLS1zID09ICcwJyk7CisJCQkJCQlzKys7CisJCQkJCQlnb3RvIHJldDE7CisJCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorI2lmbmRlZiBOb19sZWZ0cmlnaHQKKwkJCX0KKyNlbmRpZgorIGZhc3RfZmFpbGVkOgorCQlzID0gczA7CisJCWR2YWwoJmQpID0gZHZhbCgmZDIpOworCQlrID0gazA7CisJCWlsaW0gPSBpbGltMDsKKwkJfQorCisJLyogRG8gd2UgaGF2ZSBhICJzbWFsbCIgaW50ZWdlcj8gKi8KKworCWlmIChiZSA+PSAwICYmIGsgPD0gSW50X21heCkgeworCQkvKiBZZXMuICovCisJCWRzID0gdGVuc1trXTsKKwkJaWYgKG5kaWdpdHMgPCAwICYmIGlsaW0gPD0gMCkgeworCQkJUyA9IG1oaSA9IDA7CisJCQlpZiAoaWxpbSA8IDAgfHwgZHZhbCgmZCkgPD0gNSpkcykKKwkJCQlnb3RvIG5vX2RpZ2l0czsKKwkJCWdvdG8gb25lX2RpZ2l0OworCQkJfQorCQlmb3IoaSA9IDE7OyBpKyssIGR2YWwoJmQpICo9IDEwLikgeworCQkJTCA9IChMb25nKShkdmFsKCZkKSAvIGRzKTsKKwkJCWR2YWwoJmQpIC09IEwqZHM7CisjaWZkZWYgQ2hlY2tfRkxUX1JPVU5EUworCQkJLyogSWYgRkxUX1JPVU5EUyA9PSAyLCBMIHdpbGwgdXN1YWxseSBiZSBoaWdoIGJ5IDEgKi8KKwkJCWlmIChkdmFsKCZkKSA8IDApIHsKKwkJCQlMLS07CisJCQkJZHZhbCgmZCkgKz0gZHM7CisJCQkJfQorI2VuZGlmCisJCQkqcysrID0gJzAnICsgKGludClMOworCQkJaWYgKCFkdmFsKCZkKSkgeworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJaW5leGFjdCA9IDA7CisjZW5kaWYKKwkJCQlicmVhazsKKwkJCQl9CisJCQlpZiAoaSA9PSBpbGltKSB7CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJCWlmIChtb2RlID4gMSkKKwkJCQlzd2l0Y2goUm91bmRpbmcpIHsKKwkJCQkgIGNhc2UgMDogZ290byByZXQxOworCQkJCSAgY2FzZSAyOiBnb3RvIGJ1bXBfdXA7CisJCQkJICB9CisjZW5kaWYKKwkJCQlkdmFsKCZkKSArPSBkdmFsKCZkKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwkJCQlpZiAoZHZhbCgmZCkgPj0gZHMpCisjZWxzZQorCQkJCWlmIChkdmFsKCZkKSA+IGRzIHx8IChkdmFsKCZkKSA9PSBkcyAmJiBMICYgMSkpCisjZW5kaWYKKwkJCQkJeworIGJ1bXBfdXA6CisJCQkJCXdoaWxlKCotLXMgPT0gJzknKQorCQkJCQkJaWYgKHMgPT0gczApIHsKKwkJCQkJCQlrKys7CisJCQkJCQkJKnMgPSAnMCc7CisJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkrKypzKys7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCWdvdG8gcmV0MTsKKwkJfQorCisJbTIgPSBiMjsKKwltNSA9IGI1OworCW1oaSA9IG1sbyA9IDA7CisJaWYgKGxlZnRyaWdodCkgeworCQlpID0KKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQkJZGVub3JtID8gYmUgKyAoQmlhcyArIChQLTEpIC0gMSArIDEpIDoKKyNlbmRpZgorI2lmZGVmIElCTQorCQkJMSArIDQqUCAtIDMgLSBiYml0cyArICgoYmJpdHMgKyBiZSAtIDEpICYgMyk7CisjZWxzZQorCQkJMSArIFAgLSBiYml0czsKKyNlbmRpZgorCQliMiArPSBpOworCQlzMiArPSBpOworCQltaGkgPSBpMmIoMSk7CisJCWlmIChtaGkgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwlpZiAobTIgPiAwICYmIHMyID4gMCkgeworCQlpID0gbTIgPCBzMiA/IG0yIDogczI7CisJCWIyIC09IGk7CisJCW0yIC09IGk7CisJCXMyIC09IGk7CisJCX0KKwlpZiAoYjUgPiAwKSB7CisJCWlmIChsZWZ0cmlnaHQpIHsKKwkJCWlmIChtNSA+IDApIHsKKwkJCQltaGkgPSBwb3c1bXVsdChtaGksIG01KTsKKwkJCQlpZiAobWhpID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJYjEgPSBtdWx0KG1oaSwgYik7CisJCQkJaWYgKGIxID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJQmZyZWUoYik7CisJCQkJYiA9IGIxOworCQkJCX0KKwkJCWlmICgoIGogPSBiNSAtIG01ICkhPTApIHsKKwkJCQliID0gcG93NW11bHQoYiwgaik7CisJCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCWVsc2UgeworCQkJYiA9IHBvdzVtdWx0KGIsIGI1KTsKKwkJCWlmIChiID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfQorCVMgPSBpMmIoMSk7CisJaWYgKFMgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlpZiAoczUgPiAwKSB7CisJCVMgPSBwb3c1bXVsdChTLCBzNSk7CisJCWlmIChTID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisKKwkvKiBDaGVjayBmb3Igc3BlY2lhbCBjYXNlIHRoYXQgZCBpcyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4gKi8KKworCXNwZWNfY2FzZSA9IDA7CisJaWYgKChtb2RlIDwgMiB8fCBsZWZ0cmlnaHQpCisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJJiYgUm91bmRpbmcgPT0gMQorI2VuZGlmCisJCQkJKSB7CisJCWlmICghd29yZDEoJmQpICYmICEod29yZDAoJmQpICYgQm5kcnlfbWFzaykKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQkgJiYgd29yZDAoJmQpICYgKEV4cF9tYXNrICYgfkV4cF9tc2sxKQorI2VuZGlmCisJCQkJKSB7CisJCQkvKiBUaGUgc3BlY2lhbCBjYXNlICovCisJCQliMiArPSBMb2cyUDsKKwkJCXMyICs9IExvZzJQOworCQkJc3BlY19jYXNlID0gMTsKKwkJCX0KKwkJfQorCisJLyogQXJyYW5nZSBmb3IgY29udmVuaWVudCBjb21wdXRhdGlvbiBvZiBxdW90aWVudHM6CisJICogc2hpZnQgbGVmdCBpZiBuZWNlc3Nhcnkgc28gZGl2aXNvciBoYXMgNCBsZWFkaW5nIDAgYml0cy4KKwkgKgorCSAqIFBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgY29tcHV0ZSBsZWFkaW5nIDI4IGJpdHMgb2YgUyBvbmNlCisJICogYW5kIGZvciBhbGwgYW5kIHBhc3MgdGhlbSBhbmQgYSBzaGlmdCB0byBxdW9yZW0sIHNvIGl0CisJICogY2FuIGRvIHNoaWZ0cyBhbmQgb3JzIHRvIGNvbXB1dGUgdGhlIG51bWVyYXRvciBmb3IgcS4KKwkgKi8KKyNpZmRlZiBQYWNrXzMyCisJaWYgKCggaSA9ICgoczUgPyAzMiAtIGhpMGJpdHMoUy0+eFtTLT53ZHMtMV0pIDogMSkgKyBzMikgJiAweDFmICkhPTApCisJCWkgPSAzMiAtIGk7CisjZWxzZQorCWlmICgoIGkgPSAoKHM1ID8gMzIgLSBoaTBiaXRzKFMtPnhbUy0+d2RzLTFdKSA6IDEpICsgczIpICYgMHhmICkhPTApCisJCWkgPSAxNiAtIGk7CisjZW5kaWYKKwlpZiAoaSA+IDQpIHsKKwkJaSAtPSA0OworCQliMiArPSBpOworCQltMiArPSBpOworCQlzMiArPSBpOworCQl9CisJZWxzZSBpZiAoaSA8IDQpIHsKKwkJaSArPSAyODsKKwkJYjIgKz0gaTsKKwkJbTIgKz0gaTsKKwkJczIgKz0gaTsKKwkJfQorCWlmIChiMiA+IDApIHsKKwkJYiA9IGxzaGlmdChiLCBiMik7CisJCWlmIChiID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJaWYgKHMyID4gMCkgeworCQlTID0gbHNoaWZ0KFMsIHMyKTsKKwkJaWYgKFMgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwlpZiAoa19jaGVjaykgeworCQlpZiAoY21wKGIsUykgPCAwKSB7CisJCQlrLS07CisJCQliID0gbXVsdGFkZChiLCAxMCwgMCk7CS8qIHdlIGJvdGNoZWQgdGhlIGsgZXN0aW1hdGUgKi8KKwkJCWlmIChiID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWlmIChsZWZ0cmlnaHQpIHsKKwkJCQltaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQlpbGltID0gaWxpbTE7CisJCQl9CisJCX0KKwlpZiAoaWxpbSA8PSAwICYmIChtb2RlID09IDMgfHwgbW9kZSA9PSA1KSkgeworCQlTID0gbXVsdGFkZChTLDUsMCk7CisJCWlmIChTID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQlpZiAoaWxpbSA8IDAgfHwgY21wKGIsUykgPD0gMCkgeworCQkJLyogbm8gZGlnaXRzLCBmY3Z0IHN0eWxlICovCisgbm9fZGlnaXRzOgorCQkJayA9IC0xIC0gbmRpZ2l0czsKKwkJCWdvdG8gcmV0OworCQkJfQorIG9uZV9kaWdpdDoKKwkJKnMrKyA9ICcxJzsKKwkJaysrOworCQlnb3RvIHJldDsKKwkJfQorCWlmIChsZWZ0cmlnaHQpIHsKKwkJaWYgKG0yID4gMCkgeworCQkJbWhpID0gbHNoaWZ0KG1oaSwgbTIpOworCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisKKwkJLyogQ29tcHV0ZSBtbG8gLS0gY2hlY2sgZm9yIHNwZWNpYWwgY2FzZQorCQkgKiB0aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuCisJCSAqLworCisJCW1sbyA9IG1oaTsKKwkJaWYgKHNwZWNfY2FzZSkgeworCQkJbWhpID0gQmFsbG9jKG1oaS0+ayk7CisJCQlpZiAobWhpID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCUJjb3B5KG1oaSwgbWxvKTsKKwkJCW1oaSA9IGxzaGlmdChtaGksIExvZzJQKTsKKwkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCisJCWZvcihpID0gMTs7aSsrKSB7CisJCQlkaWcgPSBxdW9yZW0oYixTKSArICcwJzsKKwkJCS8qIERvIHdlIHlldCBoYXZlIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHN0cmluZworCQkJICogdGhhdCB3aWxsIHJvdW5kIHRvIGQ/CisJCQkgKi8KKwkJCWogPSBjbXAoYiwgbWxvKTsKKwkJCWRlbHRhID0gZGlmZihTLCBtaGkpOworCQkJaWYgKGRlbHRhID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWoxID0gZGVsdGEtPnNpZ24gPyAxIDogY21wKGIsIGRlbHRhKTsKKwkJCUJmcmVlKGRlbHRhKTsKKyNpZm5kZWYgUk9VTkRfQklBU0VECisJCQlpZiAoajEgPT0gMCAmJiBtb2RlICE9IDEgJiYgISh3b3JkMSgmZCkgJiAxKQorI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwkJCQkmJiBSb3VuZGluZyA+PSAxCisjZW5kaWYKKwkJCQkJCQkJICAgKSB7CisJCQkJaWYgKGRpZyA9PSAnOScpCisJCQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQlpZiAoaiA+IDApCisJCQkJCWRpZysrOworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJZWxzZSBpZiAoIWItPnhbMF0gJiYgYi0+d2RzIDw9IDEpCisJCQkJCWluZXhhY3QgPSAwOworI2VuZGlmCisJCQkJKnMrKyA9IGRpZzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisjZW5kaWYKKwkJCWlmIChqIDwgMCB8fCAoaiA9PSAwICYmIG1vZGUgIT0gMQorI2lmbmRlZiBST1VORF9CSUFTRUQKKwkJCQkJCQkmJiAhKHdvcmQxKCZkKSAmIDEpCisjZW5kaWYKKwkJCQkJKSkgeworCQkJCWlmICghYi0+eFswXSAmJiBiLT53ZHMgPD0gMSkgeworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJCWluZXhhY3QgPSAwOworI2VuZGlmCisJCQkJCWdvdG8gYWNjZXB0X2RpZzsKKwkJCQkJfQorI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwkJCQlpZiAobW9kZSA+IDEpCisJCQkJIHN3aXRjaChSb3VuZGluZykgeworCQkJCSAgY2FzZSAwOiBnb3RvIGFjY2VwdF9kaWc7CisJCQkJICBjYXNlIDI6IGdvdG8ga2VlcF9kaWc7CisJCQkJICB9CisjZW5kaWYgLypIb25vcl9GTFRfUk9VTkRTKi8KKwkJCQlpZiAoajEgPiAwKSB7CisJCQkJCWIgPSBsc2hpZnQoYiwgMSk7CisJCQkJCWlmIChiID09IE5VTEwpCisJCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCQlqMSA9IGNtcChiLCBTKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwkJCQkJaWYgKGoxID49IDAgLyopKi8KKyNlbHNlCisJCQkJCWlmICgoajEgPiAwIHx8IChqMSA9PSAwICYmIGRpZyAmIDEpKQorI2VuZGlmCisJCQkJCSYmIGRpZysrID09ICc5JykKKwkJCQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQkJfQorIGFjY2VwdF9kaWc6CisJCQkJKnMrKyA9IGRpZzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCQlpZiAoajEgPiAwKSB7CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJCWlmICghUm91bmRpbmcpCisJCQkJCWdvdG8gYWNjZXB0X2RpZzsKKyNlbmRpZgorCQkJCWlmIChkaWcgPT0gJzknKSB7IC8qIHBvc3NpYmxlIGlmIGkgPT0gMSAqLworIHJvdW5kXzlfdXA6CisJCQkJCSpzKysgPSAnOSc7CisJCQkJCWdvdG8gcm91bmRvZmY7CisJCQkJCX0KKwkJCQkqcysrID0gZGlnICsgMTsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworIGtlZXBfZGlnOgorI2VuZGlmCisJCQkqcysrID0gZGlnOworCQkJaWYgKGkgPT0gaWxpbSkKKwkJCQlicmVhazsKKwkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsKKwkJCWlmIChiID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWlmIChtbG8gPT0gbWhpKSB7CisJCQkJbWxvID0gbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKwkJCQlpZiAobWxvID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJZWxzZSB7CisJCQkJbWxvID0gbXVsdGFkZChtbG8sIDEwLCAwKTsKKwkJCQlpZiAobWxvID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKwkJCQlpZiAobWhpID09IE5VTEwpCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJfQorCQl9CisJZWxzZQorCQlmb3IoaSA9IDE7OyBpKyspIHsKKwkJCSpzKysgPSBkaWcgPSBxdW9yZW0oYixTKSArICcwJzsKKwkJCWlmICghYi0+eFswXSAmJiBiLT53ZHMgPD0gMSkgeworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJaW5leGFjdCA9IDA7CisjZW5kaWYKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCQlpZiAoaSA+PSBpbGltKQorCQkJCWJyZWFrOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOworCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCisJLyogUm91bmQgb2ZmIGxhc3QgZGlnaXQgKi8KKworI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwlzd2l0Y2goUm91bmRpbmcpIHsKKwkgIGNhc2UgMDogZ290byB0cmltemVyb3M7CisJICBjYXNlIDI6IGdvdG8gcm91bmRvZmY7CisJICB9CisjZW5kaWYKKwliID0gbHNoaWZ0KGIsIDEpOworCWlmIChiID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJaiA9IGNtcChiLCBTKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwlpZiAoaiA+PSAwKQorI2Vsc2UKKwlpZiAoaiA+IDAgfHwgKGogPT0gMCAmJiBkaWcgJiAxKSkKKyNlbmRpZgorCQl7Cisgcm91bmRvZmY6CisJCXdoaWxlKCotLXMgPT0gJzknKQorCQkJaWYgKHMgPT0gczApIHsKKwkJCQlrKys7CisJCQkJKnMrKyA9ICcxJzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCSsrKnMrKzsKKwkJfQorCWVsc2UgeworI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKyB0cmltemVyb3M6CisjZW5kaWYKKwkJd2hpbGUoKi0tcyA9PSAnMCcpOworCQlzKys7CisJCX0KKyByZXQ6CisJQmZyZWUoUyk7CisJaWYgKG1oaSkgeworCQlpZiAobWxvICYmIG1sbyAhPSBtaGkpCisJCQlCZnJlZShtbG8pOworCQlCZnJlZShtaGkpOworCQl9CisgcmV0MToKKyNpZmRlZiBTRVRfSU5FWEFDVAorCWlmIChpbmV4YWN0KSB7CisJCWlmICghb2xkaW5leGFjdCkgeworCQkJd29yZDAoJmQpID0gRXhwXzEgKyAoNzAgPDwgRXhwX3NoaWZ0KTsKKwkJCXdvcmQxKCZkKSA9IDA7CisJCQlkdmFsKCZkKSArPSAxLjsKKwkJCX0KKwkJfQorCWVsc2UgaWYgKCFvbGRpbmV4YWN0KQorCQljbGVhcl9pbmV4YWN0KCk7CisjZW5kaWYKKwlCZnJlZShiKTsKKwkqcyA9IDA7CisJKmRlY3B0ID0gayArIDE7CisJaWYgKHJ2ZSkKKwkJKnJ2ZSA9IHM7CisJcmV0dXJuIHMwOworCX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZHRvYS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxMWRlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZHRvYS5jCkBAIC0wLDAgKzEsODI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTkgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisgc3RhdGljIEJpZ2ludCAqCisjaWZkZWYgS1JfaGVhZGVycworYml0c3RvYihiaXRzLCBuYml0cywgYmJpdHMpIFVMb25nICpiaXRzOyBpbnQgbmJpdHM7IGludCAqYmJpdHM7CisjZWxzZQorYml0c3RvYihVTG9uZyAqYml0cywgaW50IG5iaXRzLCBpbnQgKmJiaXRzKQorI2VuZGlmCit7CisJaW50IGksIGs7CisJQmlnaW50ICpiOworCVVMb25nICpiZSwgKngsICp4MDsKKworCWkgPSBVTGJpdHM7CisJayA9IDA7CisJd2hpbGUoaSA8IG5iaXRzKSB7CisJCWkgPDw9IDE7CisJCWsrKzsKKwkJfQorI2lmbmRlZiBQYWNrXzMyCisJaWYgKCFrKQorCQlrID0gMTsKKyNlbmRpZgorCWIgPSBCYWxsb2Moayk7CisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwliZSA9IGJpdHMgKyAoKG5iaXRzIC0gMSkgPj4ga3NoaWZ0KTsKKwl4ID0geDAgPSBiLT54OworCWRvIHsKKwkJKngrKyA9ICpiaXRzICYgQUxMX09OOworI2lmZGVmIFBhY2tfMTYKKwkJKngrKyA9ICgqYml0cyA+PiAxNikgJiBBTExfT047CisjZW5kaWYKKwkJfSB3aGlsZSgrK2JpdHMgPD0gYmUpOworCWkgPSB4IC0geDA7CisJd2hpbGUoIXgwWy0taV0pCisJCWlmICghaSkgeworCQkJYi0+d2RzID0gMDsKKwkJCSpiYml0cyA9IDA7CisJCQlnb3RvIHJldDsKKwkJCX0KKwliLT53ZHMgPSBpICsgMTsKKwkqYmJpdHMgPSBpKlVMYml0cyArIDMyIC0gaGkwYml0cyhiLT54W2ldKTsKKyByZXQ6CisJcmV0dXJuIGI7CisJfQorCisvKiBkdG9hIGZvciBJRUVFIGFyaXRobWV0aWMgKGRtZyk6IGNvbnZlcnQgZG91YmxlIHRvIEFTQ0lJIHN0cmluZy4KKyAqCisgKiBJbnNwaXJlZCBieSAiSG93IHRvIFByaW50IEZsb2F0aW5nLVBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgYnkKKyAqIEd1eSBMLiBTdGVlbGUsIEpyLiBhbmQgSm9uIEwuIFdoaXRlIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiAxMTItMTI2XS4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICoJMS4gUmF0aGVyIHRoYW4gaXRlcmF0aW5nLCB3ZSB1c2UgYSBzaW1wbGUgbnVtZXJpYyBvdmVyZXN0aW1hdGUKKyAqCSAgIHRvIGRldGVybWluZSBrID0gZmxvb3IobG9nMTAoZCkpLiAgV2Ugc2NhbGUgcmVsZXZhbnQKKyAqCSAgIHF1YW50aXRpZXMgdXNpbmcgTyhsb2cyKGspKSByYXRoZXIgdGhhbiBPKGspIG11bHRpcGxpY2F0aW9ucy4KKyAqCTIuIEZvciBzb21lIG1vZGVzID4gMiAoY29ycmVzcG9uZGluZyB0byBlY3Z0IGFuZCBmY3Z0KSwgd2UgZG9uJ3QKKyAqCSAgIHRyeSB0byBnZW5lcmF0ZSBkaWdpdHMgc3RyaWN0bHkgbGVmdCB0byByaWdodC4gIEluc3RlYWQsIHdlCisgKgkgICBjb21wdXRlIHdpdGggZmV3ZXIgYml0cyBhbmQgcHJvcGFnYXRlIHRoZSBjYXJyeSBpZiBuZWNlc3NhcnkKKyAqCSAgIHdoZW4gcm91bmRpbmcgdGhlIGZpbmFsIGRpZ2l0IHVwLiAgVGhpcyBpcyBvZnRlbiBmYXN0ZXIuCisgKgkzLiBVbmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IGlucHV0IHdpbGwgYmUgcm91bmRlZCBuZWFyZXN0LAorICoJICAgbW9kZSAwIHJlbmRlcnMgMWUyMyBhcyAxZTIzIHJhdGhlciB0aGFuIDkuOTk5OTk5OTk5OTk5OTk5ZTIyLgorICoJICAgVGhhdCBpcywgd2UgYWxsb3cgZXF1YWxpdHkgaW4gc3RvcHBpbmcgdGVzdHMgd2hlbiB0aGUKKyAqCSAgIHJvdW5kLW5lYXJlc3QgcnVsZSB3aWxsIGdpdmUgdGhlIHNhbWUgZmxvYXRpbmctcG9pbnQgdmFsdWUKKyAqCSAgIGFzIHdvdWxkIHNhdGlzZmFjdGlvbiBvZiB0aGUgc3RvcHBpbmcgdGVzdCB3aXRoIHN0cmljdAorICoJICAgaW5lcXVhbGl0eS4KKyAqCTQuIFdlIHJlbW92ZSBjb21tb24gZmFjdG9ycyBvZiBwb3dlcnMgb2YgMiBmcm9tIHJlbGV2YW50CisgKgkgICBxdWFudGl0aWVzLgorICoJNS4gV2hlbiBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IGludGVnZXJzIGxlc3MgdGhhbiAxZTE2LAorICoJICAgd2UgdXNlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgcmF0aGVyIHRoYW4gcmVzb3J0aW5nCisgKgkgICB0byBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlcnMuCisgKgk2LiBXaGVuIGFza2VkIHRvIHByb2R1Y2UgZmV3ZXIgdGhhbiAxNSBkaWdpdHMsIHdlIGZpcnN0IHRyeQorICoJICAgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYzsgd2UgcmVzb3J0IHRvCisgKgkgICBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljIG9ubHkgaWYgd2UgY2Fubm90CisgKgkgICBndWFyYW50ZWUgdGhhdCB0aGUgZmxvYXRpbmctcG9pbnQgY2FsY3VsYXRpb24gaGFzIGdpdmVuCisgKgkgICB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0LiAgRm9yIGsgcmVxdWVzdGVkIGRpZ2l0cyBhbmQKKyAqCSAgICJ1bmlmb3JtbHkiIGRpc3RyaWJ1dGVkIGlucHV0LCB0aGUgcHJvYmFiaWxpdHkgaXMKKyAqCSAgIHNvbWV0aGluZyBsaWtlIDEwXihrLTE1KSB0aGF0IHdlIG11c3QgcmVzb3J0IHRvIHRoZSBMb25nCisgKgkgICBjYWxjdWxhdGlvbi4KKyAqLworCisgY2hhciAqCitnZHRvYQorI2lmZGVmIEtSX2hlYWRlcnMKKwkoZnBpLCBiZSwgYml0cywga2luZHAsIG1vZGUsIG5kaWdpdHMsIGRlY3B0LCBydmUpCisJRlBJICpmcGk7IGludCBiZTsgVUxvbmcgKmJpdHM7CisJaW50ICpraW5kcCwgbW9kZSwgbmRpZ2l0cywgKmRlY3B0OyBjaGFyICoqcnZlOworI2Vsc2UKKwkoRlBJICpmcGksIGludCBiZSwgVUxvbmcgKmJpdHMsIGludCAqa2luZHAsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgY2hhciAqKnJ2ZSkKKyNlbmRpZgoreworIC8qCUFyZ3VtZW50cyBuZGlnaXRzIGFuZCBkZWNwdCBhcmUgc2ltaWxhciB0byB0aGUgc2Vjb25kIGFuZCB0aGlyZAorCWFyZ3VtZW50cyBvZiBlY3Z0IGFuZCBmY3Z0OyB0cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZCBmcm9tCisJdGhlIHJldHVybmVkIHN0cmluZy4gIElmIG5vdCBudWxsLCAqcnZlIGlzIHNldCB0byBwb2ludAorCXRvIHRoZSBlbmQgb2YgdGhlIHJldHVybiB2YWx1ZS4gIElmIGQgaXMgKy1JbmZpbml0eSBvciBOYU4sCisJdGhlbiAqZGVjcHQgaXMgc2V0IHRvIDk5OTkuCisJYmUgPSBleHBvbmVudDogdmFsdWUgPSAoaW50ZWdlciByZXByZXNlbnRlZCBieSBiaXRzKSAqICgyIHRvIHRoZSBwb3dlciBvZiBiZSkuCisKKwltb2RlOgorCQkwID09PiBzaG9ydGVzdCBzdHJpbmcgdGhhdCB5aWVsZHMgZCB3aGVuIHJlYWQgaW4KKwkJCWFuZCByb3VuZGVkIHRvIG5lYXJlc3QuCisJCTEgPT0+IGxpa2UgMCwgYnV0IHdpdGggU3RlZWxlICYgV2hpdGUgc3RvcHBpbmcgcnVsZTsKKwkJCWUuZy4gd2l0aCBJRUVFIFA3NTQgYXJpdGhtZXRpYyAsIG1vZGUgMCBnaXZlcworCQkJMWUyMyB3aGVyZWFzIG1vZGUgMSBnaXZlcyA5Ljk5OTk5OTk5OTk5OTk5OWUyMi4KKwkJMiA9PT4gbWF4KDEsbmRpZ2l0cykgc2lnbmlmaWNhbnQgZGlnaXRzLiAgVGhpcyBnaXZlcyBhCisJCQlyZXR1cm4gdmFsdWUgc2ltaWxhciB0byB0aGF0IG9mIGVjdnQsIGV4Y2VwdAorCQkJdGhhdCB0cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZC4KKwkJMyA9PT4gdGhyb3VnaCBuZGlnaXRzIHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQuICBUaGlzCisJCQlnaXZlcyBhIHJldHVybiB2YWx1ZSBzaW1pbGFyIHRvIHRoYXQgZnJvbSBmY3Z0LAorCQkJZXhjZXB0IHRoYXQgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQsIGFuZAorCQkJbmRpZ2l0cyBjYW4gYmUgbmVnYXRpdmUuCisJCTQtOSBzaG91bGQgZ2l2ZSB0aGUgc2FtZSByZXR1cm4gdmFsdWVzIGFzIDItMywgaS5lLiwKKwkJCTQgPD0gbW9kZSA8PSA5ID09PiBzYW1lIHJldHVybiBhcyBtb2RlCisJCQkyICsgKG1vZGUgJiAxKS4gIFRoZXNlIG1vZGVzIGFyZSBtYWlubHkgZm9yCisJCQlkZWJ1Z2dpbmc7IG9mdGVuIHRoZXkgcnVuIHNsb3dlciBidXQgc29tZXRpbWVzCisJCQlmYXN0ZXIgdGhhbiBtb2RlcyAyLTMuCisJCTQsNSw4LDkgPT0+IGxlZnQtdG8tcmlnaHQgZGlnaXQgZ2VuZXJhdGlvbi4KKwkJNi05ID09PiBkb24ndCB0cnkgZmFzdCBmbG9hdGluZy1wb2ludCBlc3RpbWF0ZQorCQkJKGlmIGFwcGxpY2FibGUpLgorCisJCVZhbHVlcyBvZiBtb2RlIG90aGVyIHRoYW4gMC05IGFyZSB0cmVhdGVkIGFzIG1vZGUgMC4KKworCQlTdWZmaWNpZW50IHNwYWNlIGlzIGFsbG9jYXRlZCB0byB0aGUgcmV0dXJuIHZhbHVlCisJCXRvIGhvbGQgdGhlIHN1cHByZXNzZWQgdHJhaWxpbmcgemVyb3MuCisJKi8KKworCWludCBiYml0cywgYjIsIGI1LCBiZTAsIGRpZywgaSwgaWVwcywgaWxpbSwgaWxpbTAsIGlsaW0xLCBpbmV4OworCWludCBqLCBqMSwgaywgazAsIGtfY2hlY2ssIGtpbmQsIGxlZnRyaWdodCwgbTIsIG01LCBuYml0czsKKwlpbnQgcmRpciwgczIsIHM1LCBzcGVjX2Nhc2UsIHRyeV9xdWljazsKKwlMb25nIEw7CisJQmlnaW50ICpiLCAqYjEsICpkZWx0YSwgKm1sbywgKm1oaSwgKm1oaTEsICpTOworCWRvdWJsZSBkMiwgZHM7CisJY2hhciAqcywgKnMwOworCVUgZCwgZXBzOworCisjaWZuZGVmIE1VTFRJUExFX1RIUkVBRFMKKwlpZiAoZHRvYV9yZXN1bHQpIHsKKwkJZnJlZWR0b2EoZHRvYV9yZXN1bHQpOworCQlkdG9hX3Jlc3VsdCA9IDA7CisJCX0KKyNlbmRpZgorCWluZXggPSAwOworCWtpbmQgPSAqa2luZHAgJj0gflNUUlRPR19JbmV4YWN0OworCXN3aXRjaChraW5kICYgU1RSVE9HX1JldG1hc2spIHsKKwkgIGNhc2UgU1RSVE9HX1plcm86CisJCWdvdG8gcmV0X3plcm87CisJICBjYXNlIFNUUlRPR19Ob3JtYWw6CisJICBjYXNlIFNUUlRPR19EZW5vcm1hbDoKKwkJYnJlYWs7CisJICBjYXNlIFNUUlRPR19JbmZpbml0ZToKKwkJKmRlY3B0ID0gLTMyNzY4OworCQlyZXR1cm4gbnJ2X2FsbG9jKCJJbmZpbml0eSIsIHJ2ZSwgOCk7CisJICBjYXNlIFNUUlRPR19OYU46CisJCSpkZWNwdCA9IC0zMjc2ODsKKwkJcmV0dXJuIG5ydl9hbGxvYygiTmFOIiwgcnZlLCAzKTsKKwkgIGRlZmF1bHQ6CisJCXJldHVybiAwOworCSAgfQorCWIgPSBiaXRzdG9iKGJpdHMsIG5iaXRzID0gZnBpLT5uYml0cywgJmJiaXRzKTsKKwlpZiAoYiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWJlMCA9IGJlOworCWlmICggKGkgPSB0cmFpbHooYikpICE9MCkgeworCQlyc2hpZnQoYiwgaSk7CisJCWJlICs9IGk7CisJCWJiaXRzIC09IGk7CisJCX0KKwlpZiAoIWItPndkcykgeworCQlCZnJlZShiKTsKKyByZXRfemVybzoKKwkJKmRlY3B0ID0gMTsKKwkJcmV0dXJuIG5ydl9hbGxvYygiMCIsIHJ2ZSwgMSk7CisJCX0KKworCWR2YWwoJmQpID0gYjJkKGIsICZpKTsKKwlpID0gYmUgKyBiYml0cyAtIDE7CisJd29yZDAoJmQpICY9IEZyYWNfbWFzazE7CisJd29yZDAoJmQpIHw9IEV4cF8xMTsKKyNpZmRlZiBJQk0KKwlpZiAoIChqID0gMTEgLSBoaTBiaXRzKHdvcmQwKCZkKSAmIEZyYWNfbWFzaykpICE9MCkKKwkJZHZhbCgmZCkgLz0gMSA8PCBqOworI2VuZGlmCisKKwkvKiBsb2coeCkJfj1+IGxvZygxLjUpICsgKHgtMS41KS8xLjUKKwkgKiBsb2cxMCh4KQkgPSAgbG9nKHgpIC8gbG9nKDEwKQorCSAqCQl+PX4gbG9nKDEuNSkvbG9nKDEwKSArICh4LTEuNSkvKDEuNSpsb2coMTApKQorCSAqIGxvZzEwKCZkKSA9IChpLUJpYXMpKmxvZygyKS9sb2coMTApICsgbG9nMTAoZDIpCisJICoKKwkgKiBUaGlzIHN1Z2dlc3RzIGNvbXB1dGluZyBhbiBhcHByb3hpbWF0aW9uIGsgdG8gbG9nMTAoJmQpIGJ5CisJICoKKwkgKiBrID0gKGkgLSBCaWFzKSowLjMwMTAyOTk5NTY2Mzk4MQorCSAqCSsgKCAoZDItMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkxMjU5MDU1NjgxICk7CisJICoKKwkgKiBXZSB3YW50IGsgdG8gYmUgdG9vIGxhcmdlIHJhdGhlciB0aGFuIHRvbyBzbWFsbC4KKwkgKiBUaGUgZXJyb3IgaW4gdGhlIGZpcnN0LW9yZGVyIFRheWxvciBzZXJpZXMgYXBwcm94aW1hdGlvbgorCSAqIGlzIGluIG91ciBmYXZvciwgc28gd2UganVzdCByb3VuZCB1cCB0aGUgY29uc3RhbnQgZW5vdWdoCisJICogdG8gY29tcGVuc2F0ZSBmb3IgYW55IGVycm9yIGluIHRoZSBtdWx0aXBsaWNhdGlvbiBvZgorCSAqIChpIC0gQmlhcykgYnkgMC4zMDEwMjk5OTU2NjM5ODE7IHNpbmNlIHxpIC0gQmlhc3wgPD0gMTA3NywKKwkgKiBhbmQgMTA3NyAqIDAuMzAxMDMgKiAyXi01MiB+PX4gNy4yZS0xNCwKKwkgKiBhZGRpbmcgMWUtMTMgdG8gdGhlIGNvbnN0YW50IHRlcm0gbW9yZSB0aGFuIHN1ZmZpY2VzLgorCSAqIEhlbmNlIHdlIGFkanVzdCB0aGUgY29uc3RhbnQgdGVybSB0byAwLjE3NjA5MTI1OTA1NTguCisJICogKFdlIGNvdWxkIGdldCBhIG1vcmUgYWNjdXJhdGUgayBieSBpbnZva2luZyBsb2cxMCwKKwkgKiAgYnV0IHRoaXMgaXMgcHJvYmFibHkgbm90IHdvcnRod2hpbGUuKQorCSAqLworI2lmZGVmIElCTQorCWkgPDw9IDI7CisJaSArPSBqOworI2VuZGlmCisJZHMgPSAoZHZhbCgmZCktMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkxMjU5MDU1OCArIGkqMC4zMDEwMjk5OTU2NjM5ODE7CisKKwkvKiBjb3JyZWN0IGFzc3VtcHRpb24gYWJvdXQgZXhwb25lbnQgcmFuZ2UgKi8KKwlpZiAoKGogPSBpKSA8IDApCisJCWogPSAtajsKKwlpZiAoKGogLT0gMTA3NykgPiAwKQorCQlkcyArPSBqICogN2UtMTc7CisKKwlrID0gKGludClkczsKKwlpZiAoZHMgPCAwLiAmJiBkcyAhPSBrKQorCQlrLS07CS8qIHdhbnQgayA9IGZsb29yKGRzKSAqLworCWtfY2hlY2sgPSAxOworI2lmZGVmIElCTQorCWogPSBiZSArIGJiaXRzIC0gMTsKKwlpZiAoIChqMSA9IGogJiAzKSAhPTApCisJCWR2YWwoJmQpICo9IDEgPDwgajE7CisJd29yZDAoJmQpICs9IGogPDwgRXhwX3NoaWZ0IC0gMiAmIEV4cF9tYXNrOworI2Vsc2UKKwl3b3JkMCgmZCkgKz0gKGJlICsgYmJpdHMgLSAxKSA8PCBFeHBfc2hpZnQ7CisjZW5kaWYKKwlpZiAoayA+PSAwICYmIGsgPD0gVGVuX3BtYXgpIHsKKwkJaWYgKGR2YWwoJmQpIDwgdGVuc1trXSkKKwkJCWstLTsKKwkJa19jaGVjayA9IDA7CisJCX0KKwlqID0gYmJpdHMgLSBpIC0gMTsKKwlpZiAoaiA+PSAwKSB7CisJCWIyID0gMDsKKwkJczIgPSBqOworCQl9CisJZWxzZSB7CisJCWIyID0gLWo7CisJCXMyID0gMDsKKwkJfQorCWlmIChrID49IDApIHsKKwkJYjUgPSAwOworCQlzNSA9IGs7CisJCXMyICs9IGs7CisJCX0KKwllbHNlIHsKKwkJYjIgLT0gazsKKwkJYjUgPSAtazsKKwkJczUgPSAwOworCQl9CisJaWYgKG1vZGUgPCAwIHx8IG1vZGUgPiA5KQorCQltb2RlID0gMDsKKwl0cnlfcXVpY2sgPSAxOworCWlmIChtb2RlID4gNSkgeworCQltb2RlIC09IDQ7CisJCXRyeV9xdWljayA9IDA7CisJCX0KKwllbHNlIGlmIChpID49IC00IC0gRW1pbiB8fCBpIDwgRW1pbikKKwkJdHJ5X3F1aWNrID0gMDsKKwlsZWZ0cmlnaHQgPSAxOworCWlsaW0gPSBpbGltMSA9IC0xOwkvKiBWYWx1ZXMgZm9yIGNhc2VzIDAgYW5kIDE7IGRvbmUgaGVyZSB0byAqLworCQkJCS8qIHNpbGVuY2UgZXJyb25lb3VzICJnY2MgLVdhbGwiIHdhcm5pbmcuICovCisJc3dpdGNoKG1vZGUpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCQlpID0gKGludCkobmJpdHMgKiAuMzAxMDMpICsgMzsKKwkJCW5kaWdpdHMgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWxlZnRyaWdodCA9IDA7CisJCQkvKiBubyBicmVhayAqLworCQljYXNlIDQ6CisJCQlpZiAobmRpZ2l0cyA8PSAwKQorCQkJCW5kaWdpdHMgPSAxOworCQkJaWxpbSA9IGlsaW0xID0gaSA9IG5kaWdpdHM7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbGVmdHJpZ2h0ID0gMDsKKwkJCS8qIG5vIGJyZWFrICovCisJCWNhc2UgNToKKwkJCWkgPSBuZGlnaXRzICsgayArIDE7CisJCQlpbGltID0gaTsKKwkJCWlsaW0xID0gaSAtIDE7CisJCQlpZiAoaSA8PSAwKQorCQkJCWkgPSAxOworCQl9CisJcyA9IHMwID0gcnZfYWxsb2MoaSk7CisJaWYgKHMgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCWlmICggKHJkaXIgPSBmcGktPnJvdW5kaW5nIC0gMSkgIT0wKSB7CisJCWlmIChyZGlyIDwgMCkKKwkJCXJkaXIgPSAyOworCQlpZiAoa2luZCAmIFNUUlRPR19OZWcpCisJCQlyZGlyID0gMyAtIHJkaXI7CisJCX0KKworCS8qIE5vdyByZGlyID0gMCA9PT4gcm91bmQgbmVhciwgMSA9PT4gcm91bmQgdXAsIDIgPT0+IHJvdW5kIGRvd24uICovCisKKwlpZiAoaWxpbSA+PSAwICYmIGlsaW0gPD0gUXVpY2tfbWF4ICYmIHRyeV9xdWljayAmJiAhcmRpcgorI2lmbmRlZiBJTVBSRUNJU0VfSU5FWEFDVAorCQkmJiBrID09IDAKKyNlbmRpZgorCQkJCQkJCQkpIHsKKworCQkvKiBUcnkgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4gKi8KKworCQlpID0gMDsKKwkJZDIgPSBkdmFsKCZkKTsKKyNpZmRlZiBJQk0KKwkJaWYgKCAoaiA9IDExIC0gaGkwYml0cyh3b3JkMCgmZCkgJiBGcmFjX21hc2spKSAhPTApCisJCQlkdmFsKCZkKSAvPSAxIDw8IGo7CisjZW5kaWYKKwkJazAgPSBrOworCQlpbGltMCA9IGlsaW07CisJCWllcHMgPSAyOyAvKiBjb25zZXJ2YXRpdmUgKi8KKwkJaWYgKGsgPiAwKSB7CisJCQlkcyA9IHRlbnNbayYweGZdOworCQkJaiA9IGsgPj4gNDsKKwkJCWlmIChqICYgQmxldGNoKSB7CisJCQkJLyogcHJldmVudCBvdmVyZmxvd3MgKi8KKwkJCQlqICY9IEJsZXRjaCAtIDE7CisJCQkJZHZhbCgmZCkgLz0gYmlndGVuc1tuX2JpZ3RlbnMtMV07CisJCQkJaWVwcysrOworCQkJCX0KKwkJCWZvcig7IGo7IGogPj49IDEsIGkrKykKKwkJCQlpZiAoaiAmIDEpIHsKKwkJCQkJaWVwcysrOworCQkJCQlkcyAqPSBiaWd0ZW5zW2ldOworCQkJCQl9CisJCQl9CisJCWVsc2UgIHsKKwkJCWRzID0gMS47CisJCQlpZiAoIChqMSA9IC1rKSAhPTApIHsKKwkJCQlkdmFsKCZkKSAqPSB0ZW5zW2oxICYgMHhmXTsKKwkJCQlmb3IoaiA9IGoxID4+IDQ7IGo7IGogPj49IDEsIGkrKykKKwkJCQkJaWYgKGogJiAxKSB7CisJCQkJCQlpZXBzKys7CisJCQkJCQlkdmFsKCZkKSAqPSBiaWd0ZW5zW2ldOworCQkJCQkJfQorCQkJCX0KKwkJCX0KKwkJaWYgKGtfY2hlY2sgJiYgZHZhbCgmZCkgPCAxLiAmJiBpbGltID4gMCkgeworCQkJaWYgKGlsaW0xIDw9IDApCisJCQkJZ290byBmYXN0X2ZhaWxlZDsKKwkJCWlsaW0gPSBpbGltMTsKKwkJCWstLTsKKwkJCWR2YWwoJmQpICo9IDEwLjsKKwkJCWllcHMrKzsKKwkJCX0KKwkJZHZhbCgmZXBzKSA9IGllcHMqZHZhbCgmZCkgKyA3LjsKKwkJd29yZDAoJmVwcykgLT0gKFAtMSkqRXhwX21zazE7CisJCWlmIChpbGltID09IDApIHsKKwkJCVMgPSBtaGkgPSAwOworCQkJZHZhbCgmZCkgLT0gNS47CisJCQlpZiAoZHZhbCgmZCkgPiBkdmFsKCZlcHMpKQorCQkJCWdvdG8gb25lX2RpZ2l0OworCQkJaWYgKGR2YWwoJmQpIDwgLWR2YWwoJmVwcykpCisJCQkJZ290byBub19kaWdpdHM7CisJCQlnb3RvIGZhc3RfZmFpbGVkOworCQkJfQorI2lmbmRlZiBOb19sZWZ0cmlnaHQKKwkJaWYgKGxlZnRyaWdodCkgeworCQkJLyogVXNlIFN0ZWVsZSAmIFdoaXRlIG1ldGhvZCBvZiBvbmx5CisJCQkgKiBnZW5lcmF0aW5nIGRpZ2l0cyBuZWVkZWQuCisJCQkgKi8KKwkJCWR2YWwoJmVwcykgPSBkcyowLjUvdGVuc1tpbGltLTFdIC0gZHZhbCgmZXBzKTsKKwkJCWZvcihpID0gMDs7KSB7CisJCQkJTCA9IChMb25nKShkdmFsKCZkKS9kcyk7CisJCQkJZHZhbCgmZCkgLT0gTCpkczsKKwkJCQkqcysrID0gJzAnICsgKGludClMOworCQkJCWlmIChkdmFsKCZkKSA8IGR2YWwoJmVwcykpIHsKKwkJCQkJaWYgKGR2YWwoJmQpKQorCQkJCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisJCQkJCWdvdG8gcmV0MTsKKwkJCQkJfQorCQkJCWlmIChkcyAtIGR2YWwoJmQpIDwgZHZhbCgmZXBzKSkKKwkJCQkJZ290byBidW1wX3VwOworCQkJCWlmICgrK2kgPj0gaWxpbSkKKwkJCQkJYnJlYWs7CisJCQkJZHZhbCgmZXBzKSAqPSAxMC47CisJCQkJZHZhbCgmZCkgKj0gMTAuOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisjZW5kaWYKKwkJCS8qIEdlbmVyYXRlIGlsaW0gZGlnaXRzLCB0aGVuIGZpeCB0aGVtIHVwLiAqLworCQkJZHZhbCgmZXBzKSAqPSB0ZW5zW2lsaW0tMV07CisJCQlmb3IoaSA9IDE7OyBpKyssIGR2YWwoJmQpICo9IDEwLikgeworCQkJCWlmICggKEwgPSAoTG9uZykoZHZhbCgmZCkvZHMpKSAhPTApCisJCQkJCWR2YWwoJmQpIC09IEwqZHM7CisJCQkJKnMrKyA9ICcwJyArIChpbnQpTDsKKwkJCQlpZiAoaSA9PSBpbGltKSB7CisJCQkJCWRzICo9IDAuNTsKKwkJCQkJaWYgKGR2YWwoJmQpID4gZHMgKyBkdmFsKCZlcHMpKQorCQkJCQkJZ290byBidW1wX3VwOworCQkJCQllbHNlIGlmIChkdmFsKCZkKSA8IGRzIC0gZHZhbCgmZXBzKSkgeworCQkJCQkJaWYgKGR2YWwoJmQpKQorCQkJCQkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQkJCQkJZ290byBjbGVhcl90cmFpbGluZzA7CisJCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorI2lmbmRlZiBOb19sZWZ0cmlnaHQKKwkJCX0KKyNlbmRpZgorIGZhc3RfZmFpbGVkOgorCQlzID0gczA7CisJCWR2YWwoJmQpID0gZDI7CisJCWsgPSBrMDsKKwkJaWxpbSA9IGlsaW0wOworCQl9CisKKwkvKiBEbyB3ZSBoYXZlIGEgInNtYWxsIiBpbnRlZ2VyPyAqLworCisJaWYgKGJlID49IDAgJiYgayA8PSBJbnRfbWF4KSB7CisJCS8qIFllcy4gKi8KKwkJZHMgPSB0ZW5zW2tdOworCQlpZiAobmRpZ2l0cyA8IDAgJiYgaWxpbSA8PSAwKSB7CisJCQlTID0gbWhpID0gMDsKKwkJCWlmIChpbGltIDwgMCB8fCBkdmFsKCZkKSA8PSA1KmRzKQorCQkJCWdvdG8gbm9fZGlnaXRzOworCQkJZ290byBvbmVfZGlnaXQ7CisJCQl9CisJCWZvcihpID0gMTs7IGkrKywgZHZhbCgmZCkgKj0gMTAuKSB7CisJCQlMID0gZHZhbCgmZCkgLyBkczsKKwkJCWR2YWwoJmQpIC09IEwqZHM7CisjaWZkZWYgQ2hlY2tfRkxUX1JPVU5EUworCQkJLyogSWYgRkxUX1JPVU5EUyA9PSAyLCBMIHdpbGwgdXN1YWxseSBiZSBoaWdoIGJ5IDEgKi8KKwkJCWlmIChkdmFsKCZkKSA8IDApIHsKKwkJCQlMLS07CisJCQkJZHZhbCgmZCkgKz0gZHM7CisJCQkJfQorI2VuZGlmCisJCQkqcysrID0gJzAnICsgKGludClMOworCQkJaWYgKGR2YWwoJmQpID09IDAuKQorCQkJCWJyZWFrOworCQkJaWYgKGkgPT0gaWxpbSkgeworCQkJCWlmIChyZGlyKSB7CisJCQkJCWlmIChyZGlyID09IDEpCisJCQkJCQlnb3RvIGJ1bXBfdXA7CisJCQkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQkJCQlnb3RvIHJldDE7CisJCQkJCX0KKwkJCQlkdmFsKCZkKSArPSBkdmFsKCZkKTsKKyNpZmRlZiBST1VORF9CSUFTRUQKKwkJCQlpZiAoZHZhbCgmZCkgPj0gZHMpCisjZWxzZQorCQkJCWlmIChkdmFsKCZkKSA+IGRzIHx8IChkdmFsKCZkKSA9PSBkcyAmJiBMICYgMSkpCisjZW5kaWYKKwkJCQkJeworIGJ1bXBfdXA6CisJCQkJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQkJCQl3aGlsZSgqLS1zID09ICc5JykKKwkJCQkJCWlmIChzID09IHMwKSB7CisJCQkJCQkJaysrOworCQkJCQkJCSpzID0gJzAnOworCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJKysqcysrOworCQkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWluZXggPSBTVFJUT0dfSW5leGxvOworIGNsZWFyX3RyYWlsaW5nMDoKKwkJCQkJd2hpbGUoKi0tcyA9PSAnMCcpe30KKwkJCQkJKytzOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQlnb3RvIHJldDE7CisJCX0KKworCW0yID0gYjI7CisJbTUgPSBiNTsKKwltaGkgPSBtbG8gPSAwOworCWlmIChsZWZ0cmlnaHQpIHsKKwkJaSA9IG5iaXRzIC0gYmJpdHM7CisJCWlmIChiZSAtIGkrKyA8IGZwaS0+ZW1pbiAmJiBtb2RlICE9IDMgJiYgbW9kZSAhPSA1KSB7CisJCQkvKiBkZW5vcm1hbCAqLworCQkJaSA9IGJlIC0gZnBpLT5lbWluICsgMTsKKwkJCWlmIChtb2RlID49IDIgJiYgaWxpbSA+IDAgJiYgaWxpbSA8IGkpCisJCQkJZ290byBzbWFsbF9pbGltOworCQkJfQorCQllbHNlIGlmIChtb2RlID49IDIpIHsKKyBzbWFsbF9pbGltOgorCQkJaiA9IGlsaW0gLSAxOworCQkJaWYgKG01ID49IGopCisJCQkJbTUgLT0gajsKKwkJCWVsc2UgeworCQkJCXM1ICs9IGogLT0gbTU7CisJCQkJYjUgKz0gajsKKwkJCQltNSA9IDA7CisJCQkJfQorCQkJaWYgKChpID0gaWxpbSkgPCAwKSB7CisJCQkJbTIgLT0gaTsKKwkJCQlpID0gMDsKKwkJCQl9CisJCQl9CisJCWIyICs9IGk7CisJCXMyICs9IGk7CisJCW1oaSA9IGkyYigxKTsKKwkJaWYgKG1oaSA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlmIChtMiA+IDAgJiYgczIgPiAwKSB7CisJCWkgPSBtMiA8IHMyID8gbTIgOiBzMjsKKwkJYjIgLT0gaTsKKwkJbTIgLT0gaTsKKwkJczIgLT0gaTsKKwkJfQorCWlmIChiNSA+IDApIHsKKwkJaWYgKGxlZnRyaWdodCkgeworCQkJaWYgKG01ID4gMCkgeworCQkJCW1oaSA9IHBvdzVtdWx0KG1oaSwgbTUpOworCQkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQliMSA9IG11bHQobWhpLCBiKTsKKwkJCQlpZiAoYjEgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQlCZnJlZShiKTsKKwkJCQliID0gYjE7CisJCQkJfQorCQkJaWYgKCAoaiA9IGI1IC0gbTUpICE9MCkgeworCQkJCWIgPSBwb3c1bXVsdChiLCBqKTsKKwkJCQlpZiAoYiA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisJCQliID0gcG93NW11bHQoYiwgYjUpOworCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQl9CisJUyA9IGkyYigxKTsKKwlpZiAoUyA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWlmIChzNSA+IDApIHsKKwkJUyA9IHBvdzVtdWx0KFMsIHM1KTsKKwkJaWYgKFMgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKworCS8qIENoZWNrIGZvciBzcGVjaWFsIGNhc2UgdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBwb3dlciBvZiAyLiAqLworCisJc3BlY19jYXNlID0gMDsKKwlpZiAobW9kZSA8IDIpIHsKKwkJaWYgKGJiaXRzID09IDEgJiYgYmUwID4gZnBpLT5lbWluICsgMSkgeworCQkJLyogVGhlIHNwZWNpYWwgY2FzZSAqLworCQkJYjIrKzsKKwkJCXMyKys7CisJCQlzcGVjX2Nhc2UgPSAxOworCQkJfQorCQl9CisKKwkvKiBBcnJhbmdlIGZvciBjb252ZW5pZW50IGNvbXB1dGF0aW9uIG9mIHF1b3RpZW50czoKKwkgKiBzaGlmdCBsZWZ0IGlmIG5lY2Vzc2FyeSBzbyBkaXZpc29yIGhhcyA0IGxlYWRpbmcgMCBiaXRzLgorCSAqCisJICogUGVyaGFwcyB3ZSBzaG91bGQganVzdCBjb21wdXRlIGxlYWRpbmcgMjggYml0cyBvZiBTIG9uY2UKKwkgKiBhbmQgZm9yIGFsbCBhbmQgcGFzcyB0aGVtIGFuZCBhIHNoaWZ0IHRvIHF1b3JlbSwgc28gaXQKKwkgKiBjYW4gZG8gc2hpZnRzIGFuZCBvcnMgdG8gY29tcHV0ZSB0aGUgbnVtZXJhdG9yIGZvciBxLgorCSAqLworCWkgPSAoKHM1ID8gaGkwYml0cyhTLT54W1MtPndkcy0xXSkgOiBVTGJpdHMgLSAxKSAtIHMyIC0gNCkgJiBrbWFzazsKKwltMiArPSBpOworCWlmICgoYjIgKz0gaSkgPiAwKSB7CisJCWIgPSBsc2hpZnQoYiwgYjIpOworCQlpZiAoYiA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlmICgoczIgKz0gaSkgPiAwKSB7CisJCVMgPSBsc2hpZnQoUywgczIpOworCQlpZiAoUyA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCWlmIChrX2NoZWNrKSB7CisJCWlmIChjbXAoYixTKSA8IDApIHsKKwkJCWstLTsKKwkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsJLyogd2UgYm90Y2hlZCB0aGUgayBlc3RpbWF0ZSAqLworCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJaWYgKGxlZnRyaWdodCkgeworCQkJCW1oaSA9IG11bHRhZGQobWhpLCAxMCwgMCk7CisJCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCWlsaW0gPSBpbGltMTsKKwkJCX0KKwkJfQorCWlmIChpbGltIDw9IDAgJiYgbW9kZSA+IDIpIHsKKwkJUyA9IG11bHRhZGQoUyw1LDApOworCQlpZiAoUyA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJaWYgKGlsaW0gPCAwIHx8IGNtcChiLFMpIDw9IDApIHsKKwkJCS8qIG5vIGRpZ2l0cywgZmN2dCBzdHlsZSAqLworIG5vX2RpZ2l0czoKKwkJCWsgPSAtMSAtIG5kaWdpdHM7CisJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKwkJCWdvdG8gcmV0OworCQkJfQorIG9uZV9kaWdpdDoKKwkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCSpzKysgPSAnMSc7CisJCWsrKzsKKwkJZ290byByZXQ7CisJCX0KKwlpZiAobGVmdHJpZ2h0KSB7CisJCWlmIChtMiA+IDApIHsKKwkJCW1oaSA9IGxzaGlmdChtaGksIG0yKTsKKwkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCisJCS8qIENvbXB1dGUgbWxvIC0tIGNoZWNrIGZvciBzcGVjaWFsIGNhc2UKKwkJICogdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBwb3dlciBvZiAyLgorCQkgKi8KKworCQltbG8gPSBtaGk7CisJCWlmIChzcGVjX2Nhc2UpIHsKKwkJCW1oaSA9IEJhbGxvYyhtaGktPmspOworCQkJaWYgKG1oaSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlCY29weShtaGksIG1sbyk7CisJCQltaGkgPSBsc2hpZnQobWhpLCAxKTsKKwkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCisJCWZvcihpID0gMTs7aSsrKSB7CisJCQlkaWcgPSBxdW9yZW0oYixTKSArICcwJzsKKwkJCS8qIERvIHdlIHlldCBoYXZlIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHN0cmluZworCQkJICogdGhhdCB3aWxsIHJvdW5kIHRvIGQ/CisJCQkgKi8KKwkJCWogPSBjbXAoYiwgbWxvKTsKKwkJCWRlbHRhID0gZGlmZihTLCBtaGkpOworCQkJaWYgKGRlbHRhID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWoxID0gZGVsdGEtPnNpZ24gPyAxIDogY21wKGIsIGRlbHRhKTsKKwkJCUJmcmVlKGRlbHRhKTsKKyNpZm5kZWYgUk9VTkRfQklBU0VECisJCQlpZiAoajEgPT0gMCAmJiAhbW9kZSAmJiAhKGJpdHNbMF0gJiAxKSAmJiAhcmRpcikgeworCQkJCWlmIChkaWcgPT0gJzknKQorCQkJCQlnb3RvIHJvdW5kXzlfdXA7CisJCQkJaWYgKGogPD0gMCkgeworCQkJCQlpZiAoYi0+d2RzID4gMSB8fCBiLT54WzBdKQorCQkJCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisJCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZGlnKys7CisJCQkJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQkJCQl9CisJCQkJKnMrKyA9IGRpZzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisjZW5kaWYKKwkJCWlmIChqIDwgMCB8fCAoaiA9PSAwICYmICFtb2RlCisjaWZuZGVmIFJPVU5EX0JJQVNFRAorCQkJCQkJCSYmICEoYml0c1swXSAmIDEpCisjZW5kaWYKKwkJCQkJKSkgeworCQkJCWlmIChyZGlyICYmIChiLT53ZHMgPiAxIHx8IGItPnhbMF0pKSB7CisJCQkJCWlmIChyZGlyID09IDIpIHsKKwkJCQkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQkJCQkJZ290byBhY2NlcHQ7CisJCQkJCQl9CisJCQkJCXdoaWxlIChjbXAoUyxtaGkpID4gMCkgeworCQkJCQkJKnMrKyA9IGRpZzsKKwkJCQkJCW1oaTEgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCQkJaWYgKG1oaTEgPT0gTlVMTCkKKwkJCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCQkJaWYgKG1sbyA9PSBtaGkpCisJCQkJCQkJbWxvID0gbWhpMTsKKwkJCQkJCW1oaSA9IG1oaTE7CisJCQkJCQliID0gbXVsdGFkZChiLCAxMCwgMCk7CisJCQkJCQlpZiAoYiA9PSBOVUxMKQorCQkJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJCQlkaWcgPSBxdW9yZW0oYixTKSArICcwJzsKKwkJCQkJCX0KKwkJCQkJaWYgKGRpZysrID09ICc5JykKKwkJCQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCQkJCWdvdG8gYWNjZXB0OworCQkJCQl9CisJCQkJaWYgKGoxID4gMCkgeworCQkJCQliID0gbHNoaWZ0KGIsIDEpOworCQkJCQlpZiAoYiA9PSBOVUxMKQorCQkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQkJajEgPSBjbXAoYiwgUyk7CisjaWZkZWYgUk9VTkRfQklBU0VECisJCQkJCWlmIChqMSA+PSAwIC8qKSovCisjZWxzZQorCQkJCQlpZiAoKGoxID4gMCB8fCAoajEgPT0gMCAmJiBkaWcgJiAxKSkKKyNlbmRpZgorCQkJCQkmJiBkaWcrKyA9PSAnOScpCisJCQkJCQlnb3RvIHJvdW5kXzlfdXA7CisJCQkJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQkJCQl9CisJCQkJaWYgKGItPndkcyA+IDEgfHwgYi0+eFswXSkKKwkJCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisgYWNjZXB0OgorCQkJCSpzKysgPSBkaWc7CisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJaWYgKGoxID4gMCAmJiByZGlyICE9IDIpIHsKKwkJCQlpZiAoZGlnID09ICc5JykgeyAvKiBwb3NzaWJsZSBpZiBpID09IDEgKi8KKyByb3VuZF85X3VwOgorCQkJCQkqcysrID0gJzknOworCQkJCQlpbmV4ID0gU1RSVE9HX0luZXhoaTsKKwkJCQkJZ290byByb3VuZG9mZjsKKwkJCQkJfQorCQkJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQkJCSpzKysgPSBkaWcgKyAxOworCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJCSpzKysgPSBkaWc7CisJCQlpZiAoaSA9PSBpbGltKQorCQkJCWJyZWFrOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOworCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJaWYgKG1sbyA9PSBtaGkpIHsKKwkJCQltbG8gPSBtaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtbG8gPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQltbG8gPSBtdWx0YWRkKG1sbywgMTAsIDApOworCQkJCWlmIChtbG8gPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQltaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCWlmIChtaGkgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCX0KKwllbHNlCisJCWZvcihpID0gMTs7IGkrKykgeworCQkJKnMrKyA9IGRpZyA9IHF1b3JlbShiLFMpICsgJzAnOworCQkJaWYgKGkgPj0gaWxpbSkKKwkJCQlicmVhazsKKwkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsKKwkJCWlmIChiID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKworCS8qIFJvdW5kIG9mZiBsYXN0IGRpZ2l0ICovCisKKwlpZiAocmRpcikgeworCQlpZiAocmRpciA9PSAyIHx8IChiLT53ZHMgPD0gMSAmJiAhYi0+eFswXSkpCisJCQlnb3RvIGNob3B6ZXJvczsKKwkJZ290byByb3VuZG9mZjsKKwkJfQorCWIgPSBsc2hpZnQoYiwgMSk7CisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlqID0gY21wKGIsIFMpOworI2lmZGVmIFJPVU5EX0JJQVNFRAorCWlmIChqID49IDApCisjZWxzZQorCWlmIChqID4gMCB8fCAoaiA9PSAwICYmIGRpZyAmIDEpKQorI2VuZGlmCisJCXsKKyByb3VuZG9mZjoKKwkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCXdoaWxlKCotLXMgPT0gJzknKQorCQkJaWYgKHMgPT0gczApIHsKKwkJCQlrKys7CisJCQkJKnMrKyA9ICcxJzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCSsrKnMrKzsKKwkJfQorCWVsc2UgeworIGNob3B6ZXJvczoKKwkJaWYgKGItPndkcyA+IDEgfHwgYi0+eFswXSkKKwkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQl3aGlsZSgqLS1zID09ICcwJyl7fQorCQkrK3M7CisJCX0KKyByZXQ6CisJQmZyZWUoUyk7CisJaWYgKG1oaSkgeworCQlpZiAobWxvICYmIG1sbyAhPSBtaGkpCisJCQlCZnJlZShtbG8pOworCQlCZnJlZShtaGkpOworCQl9CisgcmV0MToKKwlCZnJlZShiKTsKKwkqcyA9IDA7CisJKmRlY3B0ID0gayArIDE7CisJaWYgKHJ2ZSkKKwkJKnJ2ZSA9IHM7CisJKmtpbmRwIHw9IGluZXg7CisJcmV0dXJuIHMwOworCX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZHRvYS5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxY2VhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZHRvYS5oCkBAIC0wLDAgKzEsMTU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTggYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpZm5kZWYgR0RUT0FfSF9JTkNMVURFRAorI2RlZmluZSBHRFRPQV9IX0lOQ0xVREVECisKKyNpbmNsdWRlICJhcml0aC5oIgorI2luY2x1ZGUgPHN0ZGRlZi5oPiAvKiBmb3Igc2l6ZV90ICovCisKKyNpZm5kZWYgTG9uZworI2RlZmluZSBMb25nIGludAorI2VuZGlmCisjaWZuZGVmIFVMb25nCit0eXBlZGVmIHVuc2lnbmVkIExvbmcgVUxvbmc7CisjZW5kaWYKKyNpZm5kZWYgVVNob3J0Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVTaG9ydDsKKyNlbmRpZgorCisjaWZuZGVmIEFOU0kKKyNpZmRlZiBLUl9oZWFkZXJzCisjZGVmaW5lIEFOU0koeCkgKCkKKyNkZWZpbmUgVm9pZCAvKm5vdGhpbmcqLworI2Vsc2UKKyNkZWZpbmUgQU5TSSh4KSB4CisjZGVmaW5lIFZvaWQgdm9pZAorI2VuZGlmCisjZW5kaWYgLyogQU5TSSAqLworCisjaWZuZGVmIENPTlNUCisjaWZkZWYgS1JfaGVhZGVycworI2RlZmluZSBDT05TVCAvKiBibGFuayAqLworI2Vsc2UKKyNkZWZpbmUgQ09OU1QgY29uc3QKKyNlbmRpZgorI2VuZGlmIC8qIENPTlNUICovCisKKyBlbnVtIHsJLyogcmV0dXJuIHZhbHVlcyBmcm9tIHN0cnRvZGcgKi8KKwlTVFJUT0dfWmVybwk9IDB4MDAwLAorCVNUUlRPR19Ob3JtYWwJPSAweDAwMSwKKwlTVFJUT0dfRGVub3JtYWwJPSAweDAwMiwKKwlTVFJUT0dfSW5maW5pdGUJPSAweDAwMywKKwlTVFJUT0dfTmFOCT0gMHgwMDQsCisJU1RSVE9HX05hTmJpdHMJPSAweDAwNSwKKwlTVFJUT0dfTm9OdW1iZXIJPSAweDAwNiwKKwlTVFJUT0dfTm9NZW1vcnkgPSAweDAwNywKKwlTVFJUT0dfUmV0bWFzawk9IDB4MDBmLAorCisJLyogVGhlIGZvbGxvd2luZyBtYXkgYmUgb3ItZWQgaW50byBvbmUgb2YgdGhlIGFib3ZlIHZhbHVlcy4gKi8KKworCVNUUlRPR19JbmV4bG8JPSAweDAxMCwgLyogcmV0dXJuZWQgcmVzdWx0IHJvdW5kZWQgdG93YXJkIHplcm8gKi8KKwlTVFJUT0dfSW5leGhpCT0gMHgwMjAsIC8qIHJldHVybmVkIHJlc3VsdCByb3VuZGVkIGF3YXkgZnJvbSB6ZXJvICovCisJU1RSVE9HX0luZXhhY3QJPSAweDAzMCwKKwlTVFJUT0dfVW5kZXJmbG93PSAweDA0MCwKKwlTVFJUT0dfT3ZlcmZsb3cJPSAweDA4MCwKKwlTVFJUT0dfTmVnCT0gMHgxMDAgLyogZG9lcyBub3QgYWZmZWN0IFNUUlRPR19JbmV4bG8gb3IgU1RSVE9HX0luZXhoaSAqLworCX07CisKKyB0eXBlZGVmIHN0cnVjdAorRlBJIHsKKwlpbnQgbmJpdHM7CisJaW50IGVtaW47CisJaW50IGVtYXg7CisJaW50IHJvdW5kaW5nOworCWludCBzdWRkZW5fdW5kZXJmbG93OworCX0gRlBJOworCitlbnVtIHsJLyogRlBJLnJvdW5kaW5nIHZhbHVlczogc2FtZSBhcyBGTFRfUk9VTkRTICovCisJRlBJX1JvdW5kX3plcm8gPSAwLAorCUZQSV9Sb3VuZF9uZWFyID0gMSwKKwlGUElfUm91bmRfdXAgPSAyLAorCUZQSV9Sb3VuZF9kb3duID0gMworCX07CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZXh0ZXJuIGNoYXIqIF9fZHRvYSAgQU5TSSgoZG91YmxlIGQsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwKKwkJCWludCAqc2lnbiwgY2hhciAqKnJ2ZSkpOworZXh0ZXJuIGNoYXIqIF9fZ2R0b2EgQU5TSSgoRlBJICpmcGksIGludCBiZSwgVUxvbmcgKmJpdHMsIGludCAqa2luZHAsCisJCQlpbnQgbW9kZSwgaW50IG5kaWdpdHMsIGludCAqZGVjcHQsIGNoYXIgKipydmUpKTsKK2V4dGVybiB2b2lkIF9fZnJlZWR0b2EgQU5TSSgoY2hhciopKTsKK2V4dGVybiBmbG9hdCAgc3RydG9mIEFOU0koKENPTlNUIGNoYXIgKiwgY2hhciAqKikpOworZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgQU5TSSgoQ09OU1QgY2hhciAqLCBjaGFyICoqKSk7CitleHRlcm4gaW50IF9fc3RydG9kZyBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBGUEkqLCBMb25nKiwgVUxvbmcqKSk7CisKK2V4dGVybiBjaGFyKglfX2dfZGRmbXQgIEFOU0koKGNoYXIqLCBkb3VibGUqLCBpbnQsIHNpemVfdCkpOworZXh0ZXJuIGNoYXIqCV9fZ19kZm10ICAgQU5TSSgoY2hhciosIGRvdWJsZSosIGludCwgc2l6ZV90KSk7CitleHRlcm4gY2hhcioJX19nX2ZmbXQgICBBTlNJKChjaGFyKiwgZmxvYXQqLCAgaW50LCBzaXplX3QpKTsKK2V4dGVybiBjaGFyKglfX2dfUWZtdCAgIEFOU0koKGNoYXIqLCB2b2lkKiwgICBpbnQsIHNpemVfdCkpOworZXh0ZXJuIGNoYXIqCV9fZ194Zm10ICAgQU5TSSgoY2hhciosIHZvaWQqLCAgIGludCwgc2l6ZV90KSk7CitleHRlcm4gY2hhcioJX19nX3hMZm10ICBBTlNJKChjaGFyKiwgdm9pZCosICAgaW50LCBzaXplX3QpKTsKKworZXh0ZXJuIGludAlfX3N0cnRvSWQgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGRvdWJsZSosIGRvdWJsZSopKTsKK2V4dGVybiBpbnQJX19zdHJ0b0lkZCBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBkb3VibGUqLCBkb3VibGUqKSk7CitleHRlcm4gaW50CV9fc3RydG9JZiAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgZmxvYXQqLCBmbG9hdCopKTsKK2V4dGVybiBpbnQJX19zdHJ0b0lRICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCB2b2lkKiwgdm9pZCopKTsKK2V4dGVybiBpbnQJX19zdHJ0b0l4ICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCB2b2lkKiwgdm9pZCopKTsKK2V4dGVybiBpbnQJX19zdHJ0b0l4TCBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCB2b2lkKiwgdm9pZCopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3JkICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBpbnQsIGRvdWJsZSopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3JkZCBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBpbnQsIGRvdWJsZSopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3JmICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBpbnQsIGZsb2F0KikpOworZXh0ZXJuIGludAlfX3N0cnRvclEgIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGludCwgdm9pZCopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3J4ICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBpbnQsIHZvaWQqKSk7CitleHRlcm4gaW50CV9fc3RydG9yeEwgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgaW50LCB2b2lkKikpOworI2lmIDEKK2V4dGVybiBpbnQJX19zdHJ0b2RJICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBkb3VibGUqKSk7CitleHRlcm4gaW50CV9fc3RydG9wZCAgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgZG91YmxlKikpOworZXh0ZXJuIGludAlfX3N0cnRvcGRkIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIGRvdWJsZSopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3BmICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCBmbG9hdCopKTsKK2V4dGVybiBpbnQJX19zdHJ0b3BRICBBTlNJKChDT05TVCBjaGFyKiwgY2hhcioqLCB2b2lkKikpOworZXh0ZXJuIGludAlfX3N0cnRvcHggIEFOU0koKENPTlNUIGNoYXIqLCBjaGFyKiosIHZvaWQqKSk7CitleHRlcm4gaW50CV9fc3RydG9weEwgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgdm9pZCopKTsKKyNlbHNlCisjZGVmaW5lIF9fc3RydG9wZChzLHNlLHgpIHN0cnRvcmQocyxzZSwxLHgpCisjZGVmaW5lIF9fc3RydG9wZGQocyxzZSx4KSBzdHJ0b3JkZChzLHNlLDEseCkKKyNkZWZpbmUgX19zdHJ0b3BmKHMsc2UseCkgc3RydG9yZihzLHNlLDEseCkKKyNkZWZpbmUgX19zdHJ0b3BRKHMsc2UseCkgc3RydG9yUShzLHNlLDEseCkKKyNkZWZpbmUgX19zdHJ0b3B4KHMsc2UseCkgc3RydG9yeChzLHNlLDEseCkKKyNkZWZpbmUgX19zdHJ0b3B4TChzLHNlLHgpIHN0cnRvcnhMKHMsc2UsMSx4KQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogR0RUT0FfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9hX2ZsdHJuZHMuaCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZHRvYV9mbHRybmRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlNWY5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZHRvYV9mbHRybmRzLmgKQEAgLTAsMCArMSwxOCBAQAorCUZQSSAqZnBpLCBmcGkxOworCWludCBSb3VuZGluZzsKKyNpZmRlZiBUcnVzdF9GTFRfUk9VTkRTIC8qe3sgb25seSBkZWZpbmUgdGhpcyBpZiBGTFRfUk9VTkRTIHJlYWxseSB3b3JrcyEgKi8KKwlSb3VuZGluZyA9IEZsdF9Sb3VuZHM7CisjZWxzZSAvKn17Ki8KKwlSb3VuZGluZyA9IDE7CisJc3dpdGNoKGZlZ2V0cm91bmQoKSkgeworCSAgY2FzZSBGRV9UT1dBUkRaRVJPOglSb3VuZGluZyA9IDA7IGJyZWFrOworCSAgY2FzZSBGRV9VUFdBUkQ6CVJvdW5kaW5nID0gMjsgYnJlYWs7CisJICBjYXNlIEZFX0RPV05XQVJEOglSb3VuZGluZyA9IDM7CisJICB9CisjZW5kaWYgLyp9fSovCisJZnBpID0gJmZwaTA7CisJaWYgKFJvdW5kaW5nICE9IDEpIHsKKwkJZnBpMSA9IGZwaTA7CisJCWZwaSA9ICZmcGkxOworCQlmcGkxLnJvdW5kaW5nID0gUm91bmRpbmc7CisJCX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZHRvYWltcC5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2dkdG9haW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EzNjk2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZHRvYWltcC5oCkBAIC0wLDAgKzEsNjY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGlzIGEgdmFyaWF0aW9uIG9uIGR0b2EuYyB0aGF0IGNvbnZlcnRzIGFyYml0YXJ5IGJpbmFyeQorICAgZmxvYXRpbmctcG9pbnQgZm9ybWF0cyB0byBhbmQgZnJvbSBkZWNpbWFsIG5vdGF0aW9uLiAgSXQgdXNlcworICAgZG91YmxlLXByZWNpc2lvbiBhcml0aG1ldGljIGludGVybmFsbHksIHNvIHRoZXJlIGFyZSBzdGlsbAorICAgdmFyaW91cyAjaWZkZWZzIHRoYXQgYWRhcHQgdGhlIGNhbGN1bGF0aW9ucyB0byB0aGUgbmF0aXZlCisgICBkb3VibGUtcHJlY2lzaW9uIGFyaXRobWV0aWMgKGFueSBvZiBJRUVFLCBWQVggRF9mbG9hdGluZywKKyAgIG9yIElCTSBtYWluZnJhbWUgYXJpdGhtZXRpYykuCisKKyAgIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICAgd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgorICovCisKKy8qIE9uIGEgbWFjaGluZSB3aXRoIElFRUUgZXh0ZW5kZWQtcHJlY2lzaW9uIHJlZ2lzdGVycywgaXQgaXMKKyAqIG5lY2Vzc2FyeSB0byBzcGVjaWZ5IGRvdWJsZS1wcmVjaXNpb24gKDUzLWJpdCkgcm91bmRpbmcgcHJlY2lzaW9uCisgKiBiZWZvcmUgaW52b2tpbmcgc3RydG9kIG9yIGR0b2EuICBJZiB0aGUgbWFjaGluZSB1c2VzICh0aGUgZXF1aXZhbGVudAorICogb2YpIEludGVsIDgweDg3IGFyaXRobWV0aWMsIHRoZSBjYWxsCisgKglfY29udHJvbDg3KFBDXzUzLCBNQ1dfUEMpOworICogZG9lcyB0aGlzIHdpdGggbWFueSBjb21waWxlcnMuICBXaGV0aGVyIHRoaXMgb3IgYW5vdGhlciBjYWxsIGlzCisgKiBhcHByb3ByaWF0ZSBkZXBlbmRzIG9uIHRoZSBjb21waWxlcjsgZm9yIHRoaXMgdG8gd29yaywgaXQgbWF5IGJlCisgKiBuZWNlc3NhcnkgdG8gI2luY2x1ZGUgImZsb2F0LmgiIG9yIGFub3RoZXIgc3lzdGVtLWRlcGVuZGVudCBoZWFkZXIKKyAqIGZpbGUuCisgKi8KKworLyogc3RydG9kIGZvciBJRUVFLSwgVkFYLSwgYW5kIElCTS1hcml0aG1ldGljIG1hY2hpbmVzLgorICoKKyAqIFRoaXMgc3RydG9kIHJldHVybnMgYSBuZWFyZXN0IG1hY2hpbmUgbnVtYmVyIHRvIHRoZSBpbnB1dCBkZWNpbWFsCisgKiBzdHJpbmcgKG9yIHNldHMgZXJybm8gdG8gRVJBTkdFKS4gIFdpdGggSUVFRSBhcml0aG1ldGljLCB0aWVzIGFyZQorICogYnJva2VuIGJ5IHRoZSBJRUVFIHJvdW5kLWV2ZW4gcnVsZS4gIE90aGVyd2lzZSB0aWVzIGFyZSBicm9rZW4gYnkKKyAqIGJpYXNlZCByb3VuZGluZyAoYWRkIGhhbGYgYW5kIGNob3ApLgorICoKKyAqIEluc3BpcmVkIGxvb3NlbHkgYnkgV2lsbGlhbSBELiBDbGluZ2VyJ3MgcGFwZXIgIkhvdyB0byBSZWFkIEZsb2F0aW5nCisgKiBQb2ludCBOdW1iZXJzIEFjY3VyYXRlbHkiIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBwLiAxMTItMTI2XS4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICoKKyAqCTEuIFdlIG9ubHkgcmVxdWlyZSBJRUVFLCBJQk0sIG9yIFZBWCBkb3VibGUtcHJlY2lzaW9uCisgKgkJYXJpdGhtZXRpYyAobm90IElFRUUgZG91YmxlLWV4dGVuZGVkKS4KKyAqCTIuIFdlIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgaW4gYSBjYXNlIHRoYXQKKyAqCQlDbGluZ2VyIG1pc3NlZCAtLSB3aGVuIHdlJ3JlIGNvbXB1dGluZyBkICogMTBebgorICoJCWZvciBhIHNtYWxsIGludGVnZXIgZCBhbmQgdGhlIGludGVnZXIgbiBpcyBub3QgdG9vCisgKgkJbXVjaCBsYXJnZXIgdGhhbiAyMiAodGhlIG1heGltdW0gaW50ZWdlciBrIGZvciB3aGljaAorICoJCXdlIGNhbiByZXByZXNlbnQgMTBeayBleGFjdGx5KSwgd2UgbWF5IGJlIGFibGUgdG8KKyAqCQljb21wdXRlIChkKjEwXmspICogMTBeKGUtaykgd2l0aCBqdXN0IG9uZSByb3VuZG9mZi4KKyAqCTMuIFJhdGhlciB0aGFuIGEgYml0LWF0LWEtdGltZSBhZGp1c3RtZW50IG9mIHRoZSBiaW5hcnkKKyAqCQlyZXN1bHQgaW4gdGhlIGhhcmQgY2FzZSwgd2UgdXNlIGZsb2F0aW5nLXBvaW50CisgKgkJYXJpdGhtZXRpYyB0byBkZXRlcm1pbmUgdGhlIGFkanVzdG1lbnQgdG8gd2l0aGluCisgKgkJb25lIGJpdDsgb25seSBpbiByZWFsbHkgaGFyZCBjYXNlcyBkbyB3ZSBuZWVkIHRvCisgKgkJY29tcHV0ZSBhIHNlY29uZCByZXNpZHVhbC4KKyAqCTQuIEJlY2F1c2Ugb2YgMy4sIHdlIGRvbid0IG5lZWQgYSBsYXJnZSB0YWJsZSBvZiBwb3dlcnMgb2YgMTAKKyAqCQlmb3IgdGVuLXRvLWUgKGp1c3Qgc29tZSBzbWFsbCB0YWJsZXMsIGUuZy4gb2YgMTBeaworICoJCWZvciAwIDw9IGsgPD0gMjIpLgorICovCisKKy8qCisgKiAjZGVmaW5lIElFRUVfODA4NyBmb3IgSUVFRS1hcml0aG1ldGljIG1hY2hpbmVzIHdoZXJlIHRoZSBsZWFzdAorICoJc2lnbmlmaWNhbnQgYnl0ZSBoYXMgdGhlIGxvd2VzdCBhZGRyZXNzLgorICogI2RlZmluZSBJRUVFX01DNjhrIGZvciBJRUVFLWFyaXRobWV0aWMgbWFjaGluZXMgd2hlcmUgdGhlIG1vc3QKKyAqCXNpZ25pZmljYW50IGJ5dGUgaGFzIHRoZSBsb3dlc3QgYWRkcmVzcy4KKyAqICNkZWZpbmUgTG9uZyBpbnQgb24gbWFjaGluZXMgd2l0aCAzMi1iaXQgaW50cyBhbmQgNjQtYml0IGxvbmdzLgorICogI2RlZmluZSBTdWRkZW5fVW5kZXJmbG93IGZvciBJRUVFLWZvcm1hdCBtYWNoaW5lcyB3aXRob3V0IGdyYWR1YWwKKyAqCXVuZGVyZmxvdyAoaS5lLiwgdGhhdCBmbHVzaCB0byB6ZXJvIG9uIHVuZGVyZmxvdykuCisgKiAjZGVmaW5lIElCTSBmb3IgSUJNIG1haW5mcmFtZS1zdHlsZSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgorICogI2RlZmluZSBWQVggZm9yIFZBWC1zdHlsZSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIChEX2Zsb2F0aW5nKS4KKyAqICNkZWZpbmUgTm9fbGVmdHJpZ2h0IHRvIG9taXQgbGVmdC1yaWdodCBsb2dpYyBpbiBmYXN0IGZsb2F0aW5nLXBvaW50CisgKgljb21wdXRhdGlvbiBvZiBkdG9hIGFuZCBnZHRvYS4gIFRoaXMgd2lsbCBjYXVzZSBtb2RlcyA0IGFuZCA1IHRvIGJlCisgKgl0cmVhdGVkIHRoZSBzYW1lIGFzIG1vZGVzIDIgYW5kIDMgZm9yIHNvbWUgaW5wdXRzLgorICogI2RlZmluZSBDaGVja19GTFRfUk9VTkRTIGlmIEZMVF9ST1VORFMgY2FuIGFzc3VtZSB0aGUgdmFsdWVzIDIgb3IgMy4KKyAqICNkZWZpbmUgUk5EX1BST0RRVU9UIHRvIHVzZSBybmRfcHJvZCBhbmQgcm5kX3F1b3QgKGFzc2VtYmx5IHJvdXRpbmVzCisgKgl0aGF0IHVzZSBleHRlbmRlZC1wcmVjaXNpb24gaW5zdHJ1Y3Rpb25zIHRvIGNvbXB1dGUgcm91bmRlZAorICoJcHJvZHVjdHMgYW5kIHF1b3RpZW50cykgd2l0aCBJQk0uCisgKiAjZGVmaW5lIFJPVU5EX0JJQVNFRCBmb3IgSUVFRS1mb3JtYXQgd2l0aCBiaWFzZWQgcm91bmRpbmcgYW5kIGFyaXRobWV0aWMKKyAqCXRoYXQgcm91bmRzIHRvd2FyZCArSW5maW5pdHkuCisgKiAjZGVmaW5lIFJPVU5EX0JJQVNFRF93aXRob3V0X1JvdW5kX1VwIGZvciBJRUVFLWZvcm1hdCB3aXRoIGJpYXNlZAorICoJcm91bmRpbmcgd2hlbiB0aGUgdW5kZXJseWluZyBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIHVzZXMKKyAqCXVuYmlhc2VkIHJvdW5kaW5nLiAgVGhpcyBwcmV2ZW50IHVzaW5nIG9yZGluYXJ5IGZsb2F0aW5nLXBvaW50CisgKglhcml0aG1ldGljIHdoZW4gdGhlIHJlc3VsdCBjb3VsZCBiZSBjb21wdXRlZCB3aXRoIG9uZSByb3VuZGluZyBlcnJvci4KKyAqICNkZWZpbmUgSW5hY2N1cmF0ZV9EaXZpZGUgZm9yIElFRUUtZm9ybWF0IHdpdGggY29ycmVjdGx5IHJvdW5kZWQKKyAqCXByb2R1Y3RzIGJ1dCBpbmFjY3VyYXRlIHF1b3RpZW50cywgZS5nLiwgZm9yIEludGVsIGk4NjAuCisgKiAjZGVmaW5lIE5PX0xPTkdfTE9ORyBvbiBtYWNoaW5lcyB0aGF0IGRvIG5vdCBoYXZlIGEgImxvbmcgbG9uZyIKKyAqCWludGVnZXIgdHlwZSAob2YgPj0gNjQgYml0cykuICBPbiBzdWNoIG1hY2hpbmVzLCB5b3UgY2FuCisgKgkjZGVmaW5lIEp1c3RfMTYgdG8gc3RvcmUgMTYgYml0cyBwZXIgMzItYml0IExvbmcgd2hlbiBkb2luZworICoJaGlnaC1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgV2hldGhlciB0aGlzIHNwZWVkcyB0aGluZ3MKKyAqCXVwIG9yIHNsb3dzIHRoaW5ncyBkb3duIGRlcGVuZHMgb24gdGhlIG1hY2hpbmUgYW5kIHRoZSBudW1iZXIKKyAqCWJlaW5nIGNvbnZlcnRlZC4gIElmIGxvbmcgbG9uZyBpcyBhdmFpbGFibGUgYW5kIHRoZSBuYW1lIGlzCisgKglzb21ldGhpbmcgb3RoZXIgdGhhbiAibG9uZyBsb25nIiwgI2RlZmluZSBMbG9uZyB0byBiZSB0aGUgbmFtZSwKKyAqCWFuZCBpZiAidW5zaWduZWQgTGxvbmciIGRvZXMgbm90IHdvcmsgYXMgYW4gdW5zaWduZWQgdmVyc2lvbiBvZgorICoJTGxvbmcsICNkZWZpbmUgI1VMTG9uZyB0byBiZSB0aGUgY29ycmVzcG9uZGluZyB1bnNpZ25lZCB0eXBlLgorICogI2RlZmluZSBLUl9oZWFkZXJzIGZvciBvbGQtc3R5bGUgQyBmdW5jdGlvbiBoZWFkZXJzLgorICogI2RlZmluZSBCYWRfZmxvYXRfaCBpZiB5b3VyIHN5c3RlbSBsYWNrcyBhIGZsb2F0Lmggb3IgaWYgaXQgZG9lcyBub3QKKyAqCWRlZmluZSBzb21lIG9yIGFsbCBvZiBEQkxfRElHLCBEQkxfTUFYXzEwX0VYUCwgREJMX01BWF9FWFAsCisgKglGTFRfUkFESVgsIEZMVF9ST1VORFMsIGFuZCBEQkxfTUFYLgorICogI2RlZmluZSBNQUxMT0MgeW91cl9tYWxsb2MsIHdoZXJlIHlvdXJfbWFsbG9jKG4pIGFjdHMgbGlrZSBtYWxsb2MobikKKyAqCWlmIG1lbW9yeSBpcyBhdmFpbGFibGUgYW5kIG90aGVyd2lzZSBkb2VzIHNvbWV0aGluZyB5b3UgZGVlbQorICoJYXBwcm9wcmlhdGUuICBJZiBNQUxMT0MgaXMgdW5kZWZpbmVkLCBtYWxsb2Mgd2lsbCBiZSBpbnZva2VkCisgKglkaXJlY3RseSAtLSBhbmQgYXNzdW1lZCBhbHdheXMgdG8gc3VjY2VlZC4gIFNpbWlsYXJseSwgaWYgeW91CisgKgl3YW50IHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBzeXN0ZW0ncyBmcmVlKCkgdG8gYmUgY2FsbGVkIHRvCisgKglyZWN5Y2xlIG1lbW9yeSBhY3F1aXJlZCBmcm9tIE1BTExPQywgI2RlZmluZSBGUkVFIHRvIGJlIHRoZQorICoJbmFtZSBvZiB0aGUgYWx0ZXJuYXRlIHJvdXRpbmUuICAoRlJFRSBvciBmcmVlIGlzIG9ubHkgY2FsbGVkIGluCisgKglwYXRob2xvZ2ljYWwgY2FzZXMsIGUuZy4sIGluIGEgZ2R0b2EgY2FsbCBhZnRlciBhIGdkdG9hIHJldHVybiBpbgorICoJbW9kZSAzIHdpdGggdGhvdXNhbmRzIG9mIGRpZ2l0cyByZXF1ZXN0ZWQuKQorICogI2RlZmluZSBPbWl0X1ByaXZhdGVfTWVtb3J5IHRvIG9taXQgbG9naWMgKGFkZGVkIEphbi4gMTk5OCkgZm9yIG1ha2luZworICoJbWVtb3J5IGFsbG9jYXRpb25zIGZyb20gYSBwcml2YXRlIHBvb2wgb2YgbWVtb3J5IHdoZW4gcG9zc2libGUuCisgKglXaGVuIHVzZWQsIHRoZSBwcml2YXRlIHBvb2wgaXMgUFJJVkFURV9NRU0gYnl0ZXMgbG9uZzogIDIzMDQgYnl0ZXMsCisgKgl1bmxlc3MgI2RlZmluZWQgdG8gYmUgYSBkaWZmZXJlbnQgbGVuZ3RoLiAgVGhpcyBkZWZhdWx0IGxlbmd0aAorICoJc3VmZmljZXMgdG8gZ2V0IHJpZCBvZiBNQUxMT0MgY2FsbHMgZXhjZXB0IGZvciB1bnVzdWFsIGNhc2VzLAorICoJc3VjaCBhcyBkZWNpbWFsLXRvLWJpbmFyeSBjb252ZXJzaW9uIG9mIGEgdmVyeSBsb25nIHN0cmluZyBvZgorICoJZGlnaXRzLiAgV2hlbiBjb252ZXJ0aW5nIElFRUUgZG91YmxlIHByZWNpc2lvbiB2YWx1ZXMsIHRoZQorICoJbG9uZ2VzdCBzdHJpbmcgZ2R0b2EgY2FuIHJldHVybiBpcyBhYm91dCA3NTEgYnl0ZXMgbG9uZy4gIEZvcgorICoJY29udmVyc2lvbnMgYnkgc3RydG9kIG9mIHN0cmluZ3Mgb2YgODAwIGRpZ2l0cyBhbmQgYWxsIGdkdG9hCisgKgljb252ZXJzaW9ucyBvZiBJRUVFIGRvdWJsZXMgaW4gc2luZ2xlLXRocmVhZGVkIGV4ZWN1dGlvbnMgd2l0aAorICoJOC1ieXRlIHBvaW50ZXJzLCBQUklWQVRFX01FTSA+PSA3NDAwIGFwcGVhcnMgdG8gc3VmZmljZTsgd2l0aAorICoJNC1ieXRlIHBvaW50ZXJzLCBQUklWQVRFX01FTSA+PSA3MTEyIGFwcGVhcnMgYWRlcXVhdGUuCisgKiAjZGVmaW5lIE5PX0lORk5BTl9DSEVDSyBpZiB5b3UgZG8gbm90IHdpc2ggdG8gaGF2ZSBJTkZOQU5fQ0hFQ0sKKyAqCSNkZWZpbmVkIGF1dG9tYXRpY2FsbHkgb24gSUVFRSBzeXN0ZW1zLiAgT24gc3VjaCBzeXN0ZW1zLAorICoJd2hlbiBJTkZOQU5fQ0hFQ0sgaXMgI2RlZmluZWQsIHN0cnRvZCBjaGVja3MKKyAqCWZvciBJbmZpbml0eSBhbmQgTmFOIChjYXNlIGluc2Vuc2l0aXZlbHkpLgorICoJV2hlbiBJTkZOQU5fQ0hFQ0sgaXMgI2RlZmluZWQgYW5kIE5vX0hleF9OYU4gaXMgbm90ICNkZWZpbmVkLAorICoJc3RydG9kZyBhbHNvIGFjY2VwdHMgKGNhc2UgaW5zZW5zaXRpdmVseSkgc3RyaW5ncyBvZiB0aGUgZm9ybQorICoJTmFOKHgpLCB3aGVyZSB4IGlzIGEgc3RyaW5nIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyAob3B0aW9uYWxseQorICoJcHJlY2VkZWQgYnkgMHggb3IgMFgpIGFuZCBzcGFjZXM7IGlmIHRoZXJlIGlzIG9ubHkgb25lIHN0cmluZworICoJb2YgaGV4YWRlY2ltYWwgZGlnaXRzLCBpdCBpcyB0YWtlbiBmb3IgdGhlIGZyYWN0aW9uIGJpdHMgb2YgdGhlCisgKglyZXN1bHRpbmcgTmFOOyBpZiB0aGVyZSBhcmUgdHdvIG9yIG1vcmUgc3RyaW5ncyBvZiBoZXhhZGVjaW1hbAorICoJZGlnaXRzLCBlYWNoIHN0cmluZyBpcyBhc3NpZ25lZCB0byB0aGUgbmV4dCBhdmFpbGFibGUgc2VxdWVuY2UKKyAqCW9mIDMyLWJpdCB3b3JkcyBvZiBmcmFjdGlvbnMgYml0cyAoc3RhcnRpbmcgd2l0aCB0aGUgbW9zdAorICoJc2lnbmlmaWNhbnQpLCByaWdodC1hbGlnbmVkIGluIGVhY2ggc2VxdWVuY2UuCisgKglVbmxlc3MgR0RUT0FfTk9OX1BFREFOVElDX05BTkNIRUNLIGlzICNkZWZpbmVkLCBpbnB1dCAiTmFOKC4uLikiCisgKglpcyBjb25zdW1lZCBldmVuIHdoZW4gLi4uIGhhcyB0aGUgd3JvbmcgZm9ybSAoaW4gd2hpY2ggY2FzZSB0aGUKKyAqCSIoLi4uKSIgaXMgY29uc3VtZWQgYnV0IGlnbm9yZWQpLgorICogI2RlZmluZSBNVUxUSVBMRV9USFJFQURTIGlmIHRoZSBzeXN0ZW0gb2ZmZXJzIHByZWVtcHRpdmVseSBzY2hlZHVsZWQKKyAqCW11bHRpcGxlIHRocmVhZHMuICBJbiB0aGlzIGNhc2UsIHlvdSBtdXN0IHByb3ZpZGUgKG9yIHN1aXRhYmx5CisgKgkjZGVmaW5lKSB0d28gbG9ja3MsIGFjcXVpcmVkIGJ5IEFDUVVJUkVfRFRPQV9MT0NLKG4pIGFuZCBmcmVlZAorICoJYnkgRlJFRV9EVE9BX0xPQ0sobikgZm9yIG4gPSAwIG9yIDEuICAoVGhlIHNlY29uZCBsb2NrLCBhY2Nlc3NlZAorICoJaW4gcG93NW11bHQsIGVuc3VyZXMgbGF6eSBldmFsdWF0aW9uIG9mIG9ubHkgb25lIGNvcHkgb2YgaGlnaAorICoJcG93ZXJzIG9mIDU7IG9taXR0aW5nIHRoaXMgbG9jayB3b3VsZCBpbnRyb2R1Y2UgYSBzbWFsbAorICoJcHJvYmFiaWxpdHkgb2Ygd2FzdGluZyBtZW1vcnksIGJ1dCB3b3VsZCBvdGhlcndpc2UgYmUgaGFybWxlc3MuKQorICoJWW91IG11c3QgYWxzbyBpbnZva2UgZnJlZWR0b2EocykgdG8gZnJlZSB0aGUgdmFsdWUgcyByZXR1cm5lZCBieQorICoJZHRvYS4gIFlvdSBtYXkgZG8gc28gd2hldGhlciBvciBub3QgTVVMVElQTEVfVEhSRUFEUyBpcyAjZGVmaW5lZC4KKyAqICNkZWZpbmUgSU1QUkVDSVNFX0lORVhBQ1QgaWYgeW91IGRvIG5vdCBjYXJlIGFib3V0IHRoZSBzZXR0aW5nIG9mCisgKgl0aGUgU1RSVE9HX0luZXhhY3QgYml0cyBpbiB0aGUgc3BlY2lhbCBjYXNlIG9mIGRvaW5nIElFRUUgZG91YmxlCisgKglwcmVjaXNpb24gY29udmVyc2lvbnMgKHdoaWNoIGNvdWxkIGFsc28gYmUgZG9uZSBieSB0aGUgc3RydG9kIGluCisgKglkdG9hLmMpLgorICogI2RlZmluZSBOT19IRVhfRlAgdG8gZGlzYWJsZSByZWNvZ25pdGlvbiBvZiBDOXgncyBoZXhhZGVjaW1hbAorICoJZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorICogI2RlZmluZSAtRE5PX0VSUk5PIHRvIHN1cHByZXNzIHNldHRpbmcgZXJybm8gKGluIHN0cnRvZC5jIGFuZAorICoJc3RydG9kZy5jKS4KKyAqICNkZWZpbmUgTk9fU1RSSU5HX0ggdG8gdXNlIHByaXZhdGUgdmVyc2lvbnMgb2YgbWVtY3B5LgorICoJT24gc29tZSBLJlIgc3lzdGVtcywgaXQgbWF5IGFsc28gYmUgbmVjZXNzYXJ5IHRvCisgKgkjZGVmaW5lIERFQ0xBUkVfU0laRV9UIGluIHRoaXMgY2FzZS4KKyAqICNkZWZpbmUgVVNFX0xPQ0FMRSB0byB1c2UgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgZGVjaW1hbF9wb2ludCB2YWx1ZS4KKyAqLworCisjaWZuZGVmIEdEVE9BSU1QX0hfSU5DTFVERUQKKyNkZWZpbmUgR0RUT0FJTVBfSF9JTkNMVURFRAorI2luY2x1ZGUgImdkdG9hLmgiCisjaW5jbHVkZSAiZ2RfcW5hbi5oIgorI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKyNpbmNsdWRlIDxmZW52Lmg+CisjZW5kaWYKKworI2lmZGVmIERFQlVHCisjaW5jbHVkZSAic3RkaW8uaCIKKyNkZWZpbmUgQnVnKHgpIHtmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCB4KTsgZXhpdCgxKTt9CisjZW5kaWYKKworI2luY2x1ZGUgInN0ZGxpYi5oIgorI2luY2x1ZGUgInN0cmluZy5oIgorCisjaWZkZWYgS1JfaGVhZGVycworI2RlZmluZSBDaGFyIGNoYXIKKyNlbHNlCisjZGVmaW5lIENoYXIgdm9pZAorI2VuZGlmCisKKyNpZmRlZiBNQUxMT0MKK2V4dGVybiBDaGFyICpNQUxMT0MgQU5TSSgoc2l6ZV90KSk7CisjZWxzZQorI2RlZmluZSBNQUxMT0MgbWFsbG9jCisjZW5kaWYKKworI3VuZGVmIElFRUVfQXJpdGgKKyN1bmRlZiBBdm9pZF9VbmRlcmZsb3cKKyNpZmRlZiBJRUVFX01DNjhrCisjZGVmaW5lIElFRUVfQXJpdGgKKyNlbmRpZgorI2lmZGVmIElFRUVfODA4NworI2RlZmluZSBJRUVFX0FyaXRoCisjZW5kaWYKKworI2luY2x1ZGUgImVycm5vLmgiCisjaWZkZWYgQmFkX2Zsb2F0X2gKKworI2lmZGVmIElFRUVfQXJpdGgKKyNkZWZpbmUgREJMX0RJRyAxNQorI2RlZmluZSBEQkxfTUFYXzEwX0VYUCAzMDgKKyNkZWZpbmUgREJMX01BWF9FWFAgMTAyNAorI2RlZmluZSBGTFRfUkFESVggMgorI2RlZmluZSBEQkxfTUFYIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4CisjZW5kaWYKKworI2lmZGVmIElCTQorI2RlZmluZSBEQkxfRElHIDE2CisjZGVmaW5lIERCTF9NQVhfMTBfRVhQIDc1CisjZGVmaW5lIERCTF9NQVhfRVhQIDYzCisjZGVmaW5lIEZMVF9SQURJWCAxNgorI2RlZmluZSBEQkxfTUFYIDcuMjM3MDA1NTc3MzMyMjYyMWUrNzUKKyNlbmRpZgorCisjaWZkZWYgVkFYCisjZGVmaW5lIERCTF9ESUcgMTYKKyNkZWZpbmUgREJMX01BWF8xMF9FWFAgMzgKKyNkZWZpbmUgREJMX01BWF9FWFAgMTI3CisjZGVmaW5lIEZMVF9SQURJWCAyCisjZGVmaW5lIERCTF9NQVggMS43MDE0MTE4MzQ2MDQ2OTIzZSszOAorI2RlZmluZSBuX2JpZ3RlbnMgMgorI2VuZGlmCisKKyNpZm5kZWYgTE9OR19NQVgKKyNkZWZpbmUgTE9OR19NQVggMjE0NzQ4MzY0NworI2VuZGlmCisKKyNlbHNlIC8qIGlmbmRlZiBCYWRfZmxvYXRfaCAqLworI2luY2x1ZGUgImZsb2F0LmgiCisjZW5kaWYgLyogQmFkX2Zsb2F0X2ggKi8KKworI2lmZGVmIElFRUVfQXJpdGgKKyNkZWZpbmUgU2NhbGVfQml0IDB4MTAKKyNkZWZpbmUgbl9iaWd0ZW5zIDUKKyNlbmRpZgorCisjaWZkZWYgSUJNCisjZGVmaW5lIG5fYmlndGVucyAzCisjZW5kaWYKKworI2lmZGVmIFZBWAorI2RlZmluZSBuX2JpZ3RlbnMgMgorI2VuZGlmCisKKyNpZm5kZWYgX19NQVRIX0hfXworI2luY2x1ZGUgIm1hdGguaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKElFRUVfODA4NykgKyBkZWZpbmVkKElFRUVfTUM2OGspICsgZGVmaW5lZChWQVgpICsgZGVmaW5lZChJQk0pICE9IDEKK0V4YWN0bHkgb25lIG9mIElFRUVfODA4NywgSUVFRV9NQzY4aywgVkFYLCBvciBJQk0gc2hvdWxkIGJlIGRlZmluZWQuCisjZW5kaWYKKwordHlwZWRlZiB1bmlvbiB7IGRvdWJsZSBkOyBVTG9uZyBMWzJdOyB9IFU7CisKKyNpZmRlZiBJRUVFXzgwODcKKyNkZWZpbmUgd29yZDAoeCkgKHgpLT5MWzFdCisjZGVmaW5lIHdvcmQxKHgpICh4KS0+TFswXQorI2Vsc2UKKyNkZWZpbmUgd29yZDAoeCkgKHgpLT5MWzBdCisjZGVmaW5lIHdvcmQxKHgpICh4KS0+TFsxXQorI2VuZGlmCisjZGVmaW5lIGR2YWwoeCkgKHgpLT5kCisKKy8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBvZiBTdG9yZWluYyBpcyBhcHByb3ByaWF0ZSBmb3IgTUlQUyBwcm9jZXNzb3JzLgorICogQW4gYWx0ZXJuYXRpdmUgdGhhdCBtaWdodCBiZSBiZXR0ZXIgb24gc29tZSBtYWNoaW5lcyBpcworICogI2RlZmluZSBTdG9yZWluYyhhLGIsYykgKCphKysgPSBiIDw8IDE2IHwgYyAmIDB4ZmZmZikKKyAqLworI2lmIGRlZmluZWQoSUVFRV84MDg3KSArIGRlZmluZWQoVkFYKQorI2RlZmluZSBTdG9yZWluYyhhLGIsYykgKCgodW5zaWduZWQgc2hvcnQgKilhKVsxXSA9ICh1bnNpZ25lZCBzaG9ydCliLCBcCisoKHVuc2lnbmVkIHNob3J0ICopYSlbMF0gPSAodW5zaWduZWQgc2hvcnQpYywgYSsrKQorI2Vsc2UKKyNkZWZpbmUgU3RvcmVpbmMoYSxiLGMpICgoKHVuc2lnbmVkIHNob3J0ICopYSlbMF0gPSAodW5zaWduZWQgc2hvcnQpYiwgXAorKCh1bnNpZ25lZCBzaG9ydCAqKWEpWzFdID0gKHVuc2lnbmVkIHNob3J0KWMsIGErKykKKyNlbmRpZgorCisvKiAjZGVmaW5lIFAgREJMX01BTlRfRElHICovCisvKiBUZW5fcG1heCA9IGZsb29yKFAqbG9nKDIpL2xvZyg1KSkgKi8KKy8qIEJsZXRjaCA9IChoaWdoZXN0IHBvd2VyIG9mIDIgPCBEQkxfTUFYXzEwX0VYUCkgLyAxNiAqLworLyogUXVpY2tfbWF4ID0gZmxvb3IoKFAtMSkqbG9nKEZMVF9SQURJWCkvbG9nKDEwKSAtIDEpICovCisvKiBJbnRfbWF4ID0gZmxvb3IoUCpsb2coRkxUX1JBRElYKS9sb2coMTApIC0gMSkgKi8KKworI2lmZGVmIElFRUVfQXJpdGgKKyNkZWZpbmUgRXhwX3NoaWZ0ICAyMAorI2RlZmluZSBFeHBfc2hpZnQxIDIwCisjZGVmaW5lIEV4cF9tc2sxICAgIDB4MTAwMDAwCisjZGVmaW5lIEV4cF9tc2sxMSAgIDB4MTAwMDAwCisjZGVmaW5lIEV4cF9tYXNrICAweDdmZjAwMDAwCisjZGVmaW5lIFAgNTMKKyNkZWZpbmUgQmlhcyAxMDIzCisjZGVmaW5lIEVtaW4gKC0xMDIyKQorI2RlZmluZSBFeHBfMSAgMHgzZmYwMDAwMAorI2RlZmluZSBFeHBfMTEgMHgzZmYwMDAwMAorI2RlZmluZSBFYml0cyAxMQorI2RlZmluZSBGcmFjX21hc2sgIDB4ZmZmZmYKKyNkZWZpbmUgRnJhY19tYXNrMSAweGZmZmZmCisjZGVmaW5lIFRlbl9wbWF4IDIyCisjZGVmaW5lIEJsZXRjaCAweDEwCisjZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZmZmZmYKKyNkZWZpbmUgQm5kcnlfbWFzazEgMHhmZmZmZgorI2RlZmluZSBMU0IgMQorI2RlZmluZSBTaWduX2JpdCAweDgwMDAwMDAwCisjZGVmaW5lIExvZzJQIDEKKyNkZWZpbmUgVGlueTAgMAorI2RlZmluZSBUaW55MSAxCisjZGVmaW5lIFF1aWNrX21heCAxNAorI2RlZmluZSBJbnRfbWF4IDE0CisKKyNpZm5kZWYgRmx0X1JvdW5kcworI2lmZGVmIEZMVF9ST1VORFMKKyNkZWZpbmUgRmx0X1JvdW5kcyBGTFRfUk9VTkRTCisjZWxzZQorI2RlZmluZSBGbHRfUm91bmRzIDEKKyNlbmRpZgorI2VuZGlmIC8qRmx0X1JvdW5kcyovCisKKyNlbHNlIC8qIGlmbmRlZiBJRUVFX0FyaXRoICovCisjdW5kZWYgIFN1ZGRlbl9VbmRlcmZsb3cKKyNkZWZpbmUgU3VkZGVuX1VuZGVyZmxvdworI2lmZGVmIElCTQorI3VuZGVmIEZsdF9Sb3VuZHMKKyNkZWZpbmUgRmx0X1JvdW5kcyAwCisjZGVmaW5lIEV4cF9zaGlmdCAgMjQKKyNkZWZpbmUgRXhwX3NoaWZ0MSAyNAorI2RlZmluZSBFeHBfbXNrMSAgIDB4MTAwMDAwMAorI2RlZmluZSBFeHBfbXNrMTEgIDB4MTAwMDAwMAorI2RlZmluZSBFeHBfbWFzayAgMHg3ZjAwMDAwMAorI2RlZmluZSBQIDE0CisjZGVmaW5lIEJpYXMgNjUKKyNkZWZpbmUgRXhwXzEgIDB4NDEwMDAwMDAKKyNkZWZpbmUgRXhwXzExIDB4NDEwMDAwMDAKKyNkZWZpbmUgRWJpdHMgOAkvKiBleHBvbmVudCBoYXMgNyBiaXRzLCBidXQgOCBpcyB0aGUgcmlnaHQgdmFsdWUgaW4gYjJkICovCisjZGVmaW5lIEZyYWNfbWFzayAgMHhmZmZmZmYKKyNkZWZpbmUgRnJhY19tYXNrMSAweGZmZmZmZgorI2RlZmluZSBCbGV0Y2ggNAorI2RlZmluZSBUZW5fcG1heCAyMgorI2RlZmluZSBCbmRyeV9tYXNrICAweGVmZmZmZgorI2RlZmluZSBCbmRyeV9tYXNrMSAweGZmZmZmZgorI2RlZmluZSBMU0IgMQorI2RlZmluZSBTaWduX2JpdCAweDgwMDAwMDAwCisjZGVmaW5lIExvZzJQIDQKKyNkZWZpbmUgVGlueTAgMHgxMDAwMDAKKyNkZWZpbmUgVGlueTEgMAorI2RlZmluZSBRdWlja19tYXggMTQKKyNkZWZpbmUgSW50X21heCAxNQorI2Vsc2UgLyogVkFYICovCisjdW5kZWYgRmx0X1JvdW5kcworI2RlZmluZSBGbHRfUm91bmRzIDEKKyNkZWZpbmUgRXhwX3NoaWZ0ICAyMworI2RlZmluZSBFeHBfc2hpZnQxIDcKKyNkZWZpbmUgRXhwX21zazEgICAgMHg4MAorI2RlZmluZSBFeHBfbXNrMTEgICAweDgwMDAwMAorI2RlZmluZSBFeHBfbWFzayAgMHg3ZjgwCisjZGVmaW5lIFAgNTYKKyNkZWZpbmUgQmlhcyAxMjkKKyNkZWZpbmUgRW1pbiAoLTEyNykKKyNkZWZpbmUgRXhwXzEgIDB4NDA4MDAwMDAKKyNkZWZpbmUgRXhwXzExIDB4NDA4MAorI2RlZmluZSBFYml0cyA4CisjZGVmaW5lIEZyYWNfbWFzayAgMHg3ZmZmZmYKKyNkZWZpbmUgRnJhY19tYXNrMSAweGZmZmYwMDdmCisjZGVmaW5lIFRlbl9wbWF4IDI0CisjZGVmaW5lIEJsZXRjaCAyCisjZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZmZmZjAwN2YKKyNkZWZpbmUgQm5kcnlfbWFzazEgMHhmZmZmMDA3ZgorI2RlZmluZSBMU0IgMHgxMDAwMAorI2RlZmluZSBTaWduX2JpdCAweDgwMDAKKyNkZWZpbmUgTG9nMlAgMQorI2RlZmluZSBUaW55MCAweDgwCisjZGVmaW5lIFRpbnkxIDAKKyNkZWZpbmUgUXVpY2tfbWF4IDE1CisjZGVmaW5lIEludF9tYXggMTUKKyNlbmRpZiAvKiBJQk0sIFZBWCAqLworI2VuZGlmIC8qIElFRUVfQXJpdGggKi8KKworI2lmbmRlZiBJRUVFX0FyaXRoCisjZGVmaW5lIFJPVU5EX0JJQVNFRAorI2Vsc2UKKyNpZmRlZiBST1VORF9CSUFTRURfd2l0aG91dF9Sb3VuZF9VcAorI3VuZGVmICBST1VORF9CSUFTRUQKKyNkZWZpbmUgUk9VTkRfQklBU0VECisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgUk5EX1BST0RRVU9UCisjZGVmaW5lIHJvdW5kZWRfcHJvZHVjdChhLGIpIGEgPSBybmRfcHJvZChhLCBiKQorI2RlZmluZSByb3VuZGVkX3F1b3RpZW50KGEsYikgYSA9IHJuZF9xdW90KGEsIGIpCisjaWZkZWYgS1JfaGVhZGVycworZXh0ZXJuIGRvdWJsZSBybmRfcHJvZCgpLCBybmRfcXVvdCgpOworI2Vsc2UKK2V4dGVybiBkb3VibGUgcm5kX3Byb2QoZG91YmxlLCBkb3VibGUpLCBybmRfcXVvdChkb3VibGUsIGRvdWJsZSk7CisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIHJvdW5kZWRfcHJvZHVjdChhLGIpIGEgKj0gYgorI2RlZmluZSByb3VuZGVkX3F1b3RpZW50KGEsYikgYSAvPSBiCisjZW5kaWYKKworI2RlZmluZSBCaWcwIChGcmFjX21hc2sxIHwgRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtMSkpCisjZGVmaW5lIEJpZzEgMHhmZmZmZmZmZgorCisjdW5kZWYgIFBhY2tfMTYKKyNpZm5kZWYgUGFja18zMgorI2RlZmluZSBQYWNrXzMyCisjZW5kaWYKKworI2lmZGVmIE5PX0xPTkdfTE9ORworI3VuZGVmIFVMTG9uZworI2lmZGVmIEp1c3RfMTYKKyN1bmRlZiBQYWNrXzMyCisjZGVmaW5lIFBhY2tfMTYKKy8qIFdoZW4gUGFja18zMiBpcyBub3QgZGVmaW5lZCwgd2Ugc3RvcmUgMTYgYml0cyBwZXIgMzItYml0IExvbmcuCisgKiBUaGlzIG1ha2VzIHNvbWUgaW5uZXIgbG9vcHMgc2ltcGxlciBhbmQgc29tZXRpbWVzIHNhdmVzIHdvcmsKKyAqIGR1cmluZyBtdWx0aXBsaWNhdGlvbnMsIGJ1dCBpdCBvZnRlbiBzZWVtcyB0byBtYWtlIHRoaW5ncyBzbGlnaHRseQorICogc2xvd2VyLiAgSGVuY2UgdGhlIGRlZmF1bHQgaXMgbm93IHRvIHN0b3JlIDMyIGJpdHMgcGVyIExvbmcuCisgKi8KKyNlbmRpZgorI2Vsc2UJLyogbG9uZyBsb25nIGF2YWlsYWJsZSAqLworI2lmbmRlZiBMbG9uZworI2RlZmluZSBMbG9uZyBsb25nIGxvbmcKKyNlbmRpZgorI2lmbmRlZiBVTExvbmcKKyNkZWZpbmUgVUxMb25nIHVuc2lnbmVkIExsb25nCisjZW5kaWYKKyNlbmRpZiAvKiBOT19MT05HX0xPTkcgKi8KKworI2lmZGVmIFBhY2tfMzIKKyNkZWZpbmUgVUxiaXRzIDMyCisjZGVmaW5lIGtzaGlmdCA1CisjZGVmaW5lIGttYXNrIDMxCisjZGVmaW5lIEFMTF9PTiAweGZmZmZmZmZmCisjZWxzZQorI2RlZmluZSBVTGJpdHMgMTYKKyNkZWZpbmUga3NoaWZ0IDQKKyNkZWZpbmUga21hc2sgMTUKKyNkZWZpbmUgQUxMX09OIDB4ZmZmZgorI2VuZGlmCisKKyNpZm5kZWYgTVVMVElQTEVfVEhSRUFEUworI2RlZmluZSBBQ1FVSVJFX0RUT0FfTE9DSyhuKQkvKm5vdGhpbmcqLworI2RlZmluZSBGUkVFX0RUT0FfTE9DSyhuKQkvKm5vdGhpbmcqLworI2Vsc2UKKyNpbmNsdWRlICJ0aHJlYWRfcHJpdmF0ZS5oIgorZXh0ZXJuIHZvaWQgKl9fZHRvYV9sb2Nrc1tdOworI2RlZmluZSBBQ1FVSVJFX0RUT0FfTE9DSyhuKQlfTVVURVhfTE9DSygmX19kdG9hX2xvY2tzW25dKQorI2RlZmluZSBGUkVFX0RUT0FfTE9DSyhuKQlfTVVURVhfVU5MT0NLKCZfX2R0b2FfbG9ja3Nbbl0pCisjZW5kaWYKKworI2RlZmluZSBLbWF4IDkKKworIHN0cnVjdAorQmlnaW50IHsKKwlzdHJ1Y3QgQmlnaW50ICpuZXh0OworCWludCBrLCBtYXh3ZHMsIHNpZ24sIHdkczsKKwlVTG9uZyB4WzFdOworCX07CisKKyB0eXBlZGVmIHN0cnVjdCBCaWdpbnQgQmlnaW50OworCisjaWZkZWYgTk9fU1RSSU5HX0gKKyNpZmRlZiBERUNMQVJFX1NJWkVfVAordHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OworI2VuZGlmCitleHRlcm4gdm9pZCBtZW1jcHlfRDJBIEFOU0koKHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KSk7CisjZGVmaW5lIEJjb3B5KHgseSkgbWVtY3B5X0QyQSgmeC0+c2lnbiwmeS0+c2lnbix5LT53ZHMqc2l6ZW9mKFVMb25nKSArIDIqc2l6ZW9mKGludCkpCisjZWxzZSAvKiAhTk9fU1RSSU5HX0ggKi8KKyNkZWZpbmUgQmNvcHkoeCx5KSBtZW1jcHkoJngtPnNpZ24sJnktPnNpZ24seS0+d2RzKnNpemVvZihVTG9uZykgKyAyKnNpemVvZihpbnQpKQorI2VuZGlmIC8qIE5PX1NUUklOR19IICovCisKKyNkZWZpbmUgZHRvYSBfX2R0b2EKKyNkZWZpbmUgZ2R0b2EgX19nZHRvYQorI2RlZmluZSBmcmVlZHRvYSBfX2ZyZWVkdG9hCisjZGVmaW5lIHN0cnRvZGcgX19zdHJ0b2RnCisjZGVmaW5lIGdfZGRmbXQgX19nX2RkZm10CisjZGVmaW5lIGdfZGZtdCBfX2dfZGZtdAorI2RlZmluZSBnX2ZmbXQgX19nX2ZmbXQKKyNkZWZpbmUgZ19RZm10IF9fZ19RZm10CisjZGVmaW5lIGdfeGZtdCBfX2dfeGZtdAorI2RlZmluZSBnX3hMZm10IF9fZ194TGZtdAorI2RlZmluZSBzdHJ0b0lkIF9fc3RydG9JZAorI2RlZmluZSBzdHJ0b0lkZCBfX3N0cnRvSWRkCisjZGVmaW5lIHN0cnRvSWYgX19zdHJ0b0lmCisjZGVmaW5lIHN0cnRvSVEgX19zdHJ0b0lRCisjZGVmaW5lIHN0cnRvSXggX19zdHJ0b0l4CisjZGVmaW5lIHN0cnRvSXhMIF9fc3RydG9JeEwKKyNkZWZpbmUgc3RydG9yZCBfX3N0cnRvcmQKKyNkZWZpbmUgc3RydG9yZGQgX19zdHJ0b3JkZAorI2RlZmluZSBzdHJ0b3JmIF9fc3RydG9yZgorI2RlZmluZSBzdHJ0b3JRIF9fc3RydG9yUQorI2RlZmluZSBzdHJ0b3J4IF9fc3RydG9yeAorI2RlZmluZSBzdHJ0b3J4TCBfX3N0cnRvcnhMCisjZGVmaW5lIHN0cnRvZEkgX19zdHJ0b2RJCisjZGVmaW5lIHN0cnRvcGQgX19zdHJ0b3BkCisjZGVmaW5lIHN0cnRvcGRkIF9fc3RydG9wZGQKKyNkZWZpbmUgc3RydG9wZiBfX3N0cnRvcGYKKyNkZWZpbmUgc3RydG9wUSBfX3N0cnRvcFEKKyNkZWZpbmUgc3RydG9weCBfX3N0cnRvcHgKKyNkZWZpbmUgc3RydG9weEwgX19zdHJ0b3B4TAorCisjZGVmaW5lIEJhbGxvYyBfX0JhbGxvY19EMkEKKyNkZWZpbmUgQmZyZWUgX19CZnJlZV9EMkEKKyNkZWZpbmUgVUx0b1EgX19VTHRvUV9EMkEKKyNkZWZpbmUgVUx0b2YgX19VTHRvZl9EMkEKKyNkZWZpbmUgVUx0b2QgX19VTHRvZF9EMkEKKyNkZWZpbmUgVUx0b2RkIF9fVUx0b2RkX0QyQQorI2RlZmluZSBVTHRveCBfX1VMdG94X0QyQQorI2RlZmluZSBVTHRveEwgX19VTHRveExfRDJBCisjZGVmaW5lIGFueV9vbiBfX2FueV9vbl9EMkEKKyNkZWZpbmUgYjJkIF9fYjJkX0QyQQorI2RlZmluZSBiaWd0ZW5zIF9fYmlndGVuc19EMkEKKyNkZWZpbmUgY21wIF9fY21wX0QyQQorI2RlZmluZSBjb3B5Yml0cyBfX2NvcHliaXRzX0QyQQorI2RlZmluZSBkMmIgX19kMmJfRDJBCisjZGVmaW5lIGRlY3JlbWVudCBfX2RlY3JlbWVudF9EMkEKKyNkZWZpbmUgZGlmZiBfX2RpZmZfRDJBCisjZGVmaW5lIGR0b2FfcmVzdWx0IF9fZHRvYV9yZXN1bHRfRDJBCisjZGVmaW5lIGdfX2ZtdCBfX2dfX2ZtdF9EMkEKKyNkZWZpbmUgZ2V0aGV4IF9fZ2V0aGV4X0QyQQorI2RlZmluZSBoZXhkaWcgX19oZXhkaWdfRDJBCisjZGVmaW5lIGhleG5hbiBfX2hleG5hbl9EMkEKKyNkZWZpbmUgaGkwYml0cyh4KSBfX2hpMGJpdHNfRDJBKChVTG9uZykoeCkpCisjZGVmaW5lIGhpMGJpdHNfRDJBIF9faGkwYml0c19EMkEKKyNkZWZpbmUgaTJiIF9faTJiX0QyQQorI2RlZmluZSBpbmNyZW1lbnQgX19pbmNyZW1lbnRfRDJBCisjZGVmaW5lIGxvMGJpdHMgX19sbzBiaXRzX0QyQQorI2RlZmluZSBsc2hpZnQgX19sc2hpZnRfRDJBCisjZGVmaW5lIG1hdGNoIF9fbWF0Y2hfRDJBCisjZGVmaW5lIG11bHQgX19tdWx0X0QyQQorI2RlZmluZSBtdWx0YWRkIF9fbXVsdGFkZF9EMkEKKyNkZWZpbmUgbnJ2X2FsbG9jIF9fbnJ2X2FsbG9jX0QyQQorI2RlZmluZSBwb3c1bXVsdCBfX3BvdzVtdWx0X0QyQQorI2RlZmluZSBxdW9yZW0gX19xdW9yZW1fRDJBCisjZGVmaW5lIHJhdGlvIF9fcmF0aW9fRDJBCisjZGVmaW5lIHJzaGlmdCBfX3JzaGlmdF9EMkEKKyNkZWZpbmUgcnZfYWxsb2MgX19ydl9hbGxvY19EMkEKKyNkZWZpbmUgczJiIF9fczJiX0QyQQorI2RlZmluZSBzZXRfb25lcyBfX3NldF9vbmVzX0QyQQorI2RlZmluZSBzdHJjcCBfX3N0cmNwX0QyQQorI2RlZmluZSBzdHJ0b0lnIF9fc3RydG9JZ19EMkEKKyNkZWZpbmUgc3VscCBfX3N1bHBfRDJBCisjZGVmaW5lIHN1bSBfX3N1bV9EMkEKKyNkZWZpbmUgdGVucyBfX3RlbnNfRDJBCisjZGVmaW5lIHRpbnl0ZW5zIF9fdGlueXRlbnNfRDJBCisjZGVmaW5lIHRpbnl0ZW5zIF9fdGlueXRlbnNfRDJBCisjZGVmaW5lIHRyYWlseiBfX3RyYWlsel9EMkEKKyNkZWZpbmUgdWxwIF9fdWxwX0QyQQorCisgZXh0ZXJuIGNoYXIgKmR0b2FfcmVzdWx0OworIGV4dGVybiBDT05TVCBkb3VibGUgYmlndGVuc1tdLCB0ZW5zW10sIHRpbnl0ZW5zW107CisgZXh0ZXJuIHVuc2lnbmVkIGNoYXIgaGV4ZGlnW107CisKKyBleHRlcm4gQmlnaW50ICpCYWxsb2MgQU5TSSgoaW50KSk7CisgZXh0ZXJuIHZvaWQgQmZyZWUgQU5TSSgoQmlnaW50KikpOworIGV4dGVybiB2b2lkIFVMdG9mIEFOU0koKFVMb25nKiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4gdm9pZCBVTHRvZCBBTlNJKChVTG9uZyosIFVMb25nKiwgTG9uZywgaW50KSk7CisgZXh0ZXJuIHZvaWQgVUx0b2RkIEFOU0koKFVMb25nKiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4gdm9pZCBVTHRvUSBBTlNJKChVTG9uZyosIFVMb25nKiwgTG9uZywgaW50KSk7CisgZXh0ZXJuIHZvaWQgVUx0b3ggQU5TSSgoVVNob3J0KiwgVUxvbmcqLCBMb25nLCBpbnQpKTsKKyBleHRlcm4gdm9pZCBVTHRveEwgQU5TSSgoVUxvbmcqLCBVTG9uZyosIExvbmcsIGludCkpOworIGV4dGVybiBVTG9uZyBhbnlfb24gQU5TSSgoQmlnaW50KiwgaW50KSk7CisgZXh0ZXJuIGRvdWJsZSBiMmQgQU5TSSgoQmlnaW50KiwgaW50KikpOworIGV4dGVybiBpbnQgY21wIEFOU0koKEJpZ2ludCosIEJpZ2ludCopKTsKKyBleHRlcm4gdm9pZCBjb3B5Yml0cyBBTlNJKChVTG9uZyosIGludCwgQmlnaW50KikpOworIGV4dGVybiBCaWdpbnQgKmQyYiBBTlNJKChkb3VibGUsIGludCosIGludCopKTsKKyBleHRlcm4gdm9pZCBkZWNyZW1lbnQgQU5TSSgoQmlnaW50KikpOworIGV4dGVybiBCaWdpbnQgKmRpZmYgQU5TSSgoQmlnaW50KiwgQmlnaW50KikpOworIGV4dGVybiBjaGFyICpkdG9hIEFOU0koKGRvdWJsZSBkLCBpbnQgbW9kZSwgaW50IG5kaWdpdHMsCisJCQlpbnQgKmRlY3B0LCBpbnQgKnNpZ24sIGNoYXIgKipydmUpKTsKKyBleHRlcm4gY2hhciAqZ19fZm10IEFOU0koKGNoYXIqLCBjaGFyKiwgY2hhciosIGludCwgVUxvbmcsIHNpemVfdCkpOworIGV4dGVybiBpbnQgZ2V0aGV4IEFOU0koKENPTlNUIGNoYXIqKiwgRlBJKiwgTG9uZyosIEJpZ2ludCoqLCBpbnQpKTsKKyBleHRlcm4gdm9pZCBoZXhkaWdfaW5pdF9EMkEoVm9pZCk7CisgZXh0ZXJuIGludCBoZXhuYW4gQU5TSSgoQ09OU1QgY2hhcioqLCBGUEkqLCBVTG9uZyopKTsKKyBleHRlcm4gaW50IGhpMGJpdHNfRDJBIEFOU0koKFVMb25nKSk7CisgZXh0ZXJuIEJpZ2ludCAqaTJiIEFOU0koKGludCkpOworIGV4dGVybiBCaWdpbnQgKmluY3JlbWVudCBBTlNJKChCaWdpbnQqKSk7CisgZXh0ZXJuIGludCBsbzBiaXRzIEFOU0koKFVMb25nKikpOworIGV4dGVybiBCaWdpbnQgKmxzaGlmdCBBTlNJKChCaWdpbnQqLCBpbnQpKTsKKyBleHRlcm4gaW50IG1hdGNoIEFOU0koKENPTlNUIGNoYXIqKiwgY2hhciopKTsKKyBleHRlcm4gQmlnaW50ICptdWx0IEFOU0koKEJpZ2ludCosIEJpZ2ludCopKTsKKyBleHRlcm4gQmlnaW50ICptdWx0YWRkIEFOU0koKEJpZ2ludCosIGludCwgaW50KSk7CisgZXh0ZXJuIGNoYXIgKm5ydl9hbGxvYyBBTlNJKChjaGFyKiwgY2hhciAqKiwgaW50KSk7CisgZXh0ZXJuIEJpZ2ludCAqcG93NW11bHQgQU5TSSgoQmlnaW50KiwgaW50KSk7CisgZXh0ZXJuIGludCBxdW9yZW0gQU5TSSgoQmlnaW50KiwgQmlnaW50KikpOworIGV4dGVybiBkb3VibGUgcmF0aW8gQU5TSSgoQmlnaW50KiwgQmlnaW50KikpOworIGV4dGVybiB2b2lkIHJzaGlmdCBBTlNJKChCaWdpbnQqLCBpbnQpKTsKKyBleHRlcm4gY2hhciAqcnZfYWxsb2MgQU5TSSgoaW50KSk7CisgZXh0ZXJuIEJpZ2ludCAqczJiIEFOU0koKENPTlNUIGNoYXIqLCBpbnQsIGludCwgVUxvbmcsIGludCkpOworIGV4dGVybiBCaWdpbnQgKnNldF9vbmVzIEFOU0koKEJpZ2ludCosIGludCkpOworIGV4dGVybiBjaGFyICpzdHJjcCBBTlNJKChjaGFyKiwgY29uc3QgY2hhciopKTsKKyBleHRlcm4gaW50IHN0cnRvSWcgQU5TSSgoQ09OU1QgY2hhciosIGNoYXIqKiwgRlBJKiwgTG9uZyosIEJpZ2ludCoqLCBpbnQqKSk7CisgZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgQU5TSSgoY29uc3QgY2hhciAqczAwLCBjaGFyICoqc2UpKTsKKyBleHRlcm4gQmlnaW50ICpzdW0gQU5TSSgoQmlnaW50KiwgQmlnaW50KikpOworIGV4dGVybiBpbnQgdHJhaWx6IEFOU0koKEJpZ2ludCopKTsKKyBleHRlcm4gZG91YmxlIHVscCBBTlNJKChVKikpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorLyoKKyAqIE5BTl9XT1JEMCBhbmQgTkFOX1dPUkQxIGFyZSBvbmx5IHJlZmVyZW5jZWQgaW4gc3RydG9kLmMuICBQcmlvciB0bworICogMjAwNTAxMTUsIHRoZXkgdXNlZCB0byBiZSBoYXJkLXdpcmVkIGhlcmUgKHRvIDB4N2ZmODAwMDAgYW5kIDAsCisgKiByZXNwZWN0aXZlbHkpLCBidXQgbm93IGFyZSBkZXRlcm1pbmVkIGJ5IGNvbXBpbGluZyBhbmQgcnVubmluZworICogcW5hbi5jIHRvIGdlbmVyYXRlIGdkX3FuYW4uaCwgd2hpY2ggc3BlY2lmaWVzIGRfUU5BTjAgYW5kIGRfUU5BTjEuCisgKiBGb3JtZXJseSBnZHRvYWltcC5oIHJlY29tbWVuZGVkIHN1cHBseWluZyBzdWl0YWJsZSAtRE5BTl9XT1JEMD0uLi4KKyAqIGFuZCAtRE5BTl9XT1JEMT0uLi4gIHZhbHVlcyBpZiBuZWNlc3NhcnkuICBUaGlzIHNob3VsZCBzdGlsbCB3b3JrLgorICogKE9uIEhQIFNlcmllcyA3MDAvODAwIG1hY2hpbmVzLCAtRE5BTl9XT1JEMD0weDdmZjQwMDAwIHdvcmtzLikKKyAqLworI2lmZGVmIElFRUVfQXJpdGgKKyNpZm5kZWYgTk9fSU5GTkFOX0NIRUNLCisjdW5kZWYgSU5GTkFOX0NIRUNLCisjZGVmaW5lIElORk5BTl9DSEVDSworI2VuZGlmCisjaWZkZWYgSUVFRV9NQzY4aworI2RlZmluZSBfMCAwCisjZGVmaW5lIF8xIDEKKyNpZm5kZWYgTkFOX1dPUkQwCisjZGVmaW5lIE5BTl9XT1JEMCBkX1FOQU4wCisjZW5kaWYKKyNpZm5kZWYgTkFOX1dPUkQxCisjZGVmaW5lIE5BTl9XT1JEMSBkX1FOQU4xCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIF8wIDEKKyNkZWZpbmUgXzEgMAorI2lmbmRlZiBOQU5fV09SRDAKKyNkZWZpbmUgTkFOX1dPUkQwIGRfUU5BTjEKKyNlbmRpZgorI2lmbmRlZiBOQU5fV09SRDEKKyNkZWZpbmUgTkFOX1dPUkQxIGRfUU5BTjAKKyNlbmRpZgorI2VuZGlmCisjZWxzZQorI3VuZGVmIElORk5BTl9DSEVDSworI2VuZGlmCisKKyN1bmRlZiBTSQorI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKyNkZWZpbmUgU0kgMQorI2Vsc2UKKyNkZWZpbmUgU0kgMAorI2VuZGlmCisKKyNlbmRpZiAvKiBHRFRPQUlNUF9IX0lOQ0xVREVEICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZ2V0aGV4LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZ2V0aGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjZTBmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nZXRoZXguYwpAQCAtMCwwICsxLDM2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4IGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworI2lmZGVmIFVTRV9MT0NBTEUKKyNpbmNsdWRlICJsb2NhbGUuaCIKKyNlbmRpZgorCisgaW50CisjaWZkZWYgS1JfaGVhZGVycworZ2V0aGV4KHNwLCBmcGksIGV4cCwgYnAsIHNpZ24pCisJQ09OU1QgY2hhciAqKnNwOyBGUEkgKmZwaTsgTG9uZyAqZXhwOyBCaWdpbnQgKipicDsgaW50IHNpZ247CisjZWxzZQorZ2V0aGV4KCBDT05TVCBjaGFyICoqc3AsIEZQSSAqZnBpLCBMb25nICpleHAsIEJpZ2ludCAqKmJwLCBpbnQgc2lnbikKKyNlbmRpZgoreworCUJpZ2ludCAqYjsKKwlDT05TVCB1bnNpZ25lZCBjaGFyICpkZWNwdCwgKnMwLCAqcywgKnMxOworCWludCBiaWcsIGVzaWduLCBoYXZlZGlnLCBpcnYsIGosIGssIG4sIG4wLCBuYml0cywgdXAsIHpyZXQ7CisJVUxvbmcgTCwgbG9zdGJpdHMsICp4OworCUxvbmcgZSwgZTE7CisjaWZkZWYgVVNFX0xPQ0FMRQorCWludCBpOworI2lmZGVmIE5PX0xPQ0FMRV9DQUNIRQorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlY2ltYWxwb2ludCA9ICh1bnNpZ25lZCBjaGFyKilsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQ7CisjZWxzZQorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlY2ltYWxwb2ludDsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciAqZGVjaW1hbHBvaW50X2NhY2hlOworCWlmICghKHMwID0gZGVjaW1hbHBvaW50X2NhY2hlKSkgeworCQlzMCA9ICh1bnNpZ25lZCBjaGFyKilsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQ7CisJCWlmICgoZGVjaW1hbHBvaW50X2NhY2hlID0gKGNoYXIqKU1BTExPQyhzdHJsZW4oczApICsgMSkpKSB7CisJCQlzdHJsY3B5KGRlY2ltYWxwb2ludF9jYWNoZSwgczAsIHN0cmxlbihzMCkgKyAxKTsKKwkJCXMwID0gZGVjaW1hbHBvaW50X2NhY2hlOworCQkJfQorCQl9CisJZGVjaW1hbHBvaW50ID0gczA7CisjZW5kaWYKKyNlbmRpZgorCisJaWYgKCFoZXhkaWdbJzAnXSkKKwkJaGV4ZGlnX2luaXRfRDJBKCk7CisJKmJwID0gMDsKKwloYXZlZGlnID0gMDsKKwlzMCA9ICooQ09OU1QgdW5zaWduZWQgY2hhciAqKilzcCArIDI7CisJd2hpbGUoczBbaGF2ZWRpZ10gPT0gJzAnKQorCQloYXZlZGlnKys7CisJczAgKz0gaGF2ZWRpZzsKKwlzID0gczA7CisJZGVjcHQgPSAwOworCXpyZXQgPSAwOworCWUgPSAwOworCWlmIChoZXhkaWdbKnNdKQorCQloYXZlZGlnKys7CisJZWxzZSB7CisJCXpyZXQgPSAxOworI2lmZGVmIFVTRV9MT0NBTEUKKwkJZm9yKGkgPSAwOyBkZWNpbWFscG9pbnRbaV07ICsraSkgeworCQkJaWYgKHNbaV0gIT0gZGVjaW1hbHBvaW50W2ldKQorCQkJCWdvdG8gcGNoZWNrOworCQkJfQorCQlkZWNwdCA9IHMgKz0gaTsKKyNlbHNlCisJCWlmICgqcyAhPSAnLicpCisJCQlnb3RvIHBjaGVjazsKKwkJZGVjcHQgPSArK3M7CisjZW5kaWYKKwkJaWYgKCFoZXhkaWdbKnNdKQorCQkJZ290byBwY2hlY2s7CisJCXdoaWxlKCpzID09ICcwJykKKwkJCXMrKzsKKwkJaWYgKGhleGRpZ1sqc10pCisJCQl6cmV0ID0gMDsKKwkJaGF2ZWRpZyA9IDE7CisJCXMwID0gczsKKwkJfQorCXdoaWxlKGhleGRpZ1sqc10pCisJCXMrKzsKKyNpZmRlZiBVU0VfTE9DQUxFCisJaWYgKCpzID09ICpkZWNpbWFscG9pbnQgJiYgIWRlY3B0KSB7CisJCWZvcihpID0gMTsgZGVjaW1hbHBvaW50W2ldOyArK2kpIHsKKwkJCWlmIChzW2ldICE9IGRlY2ltYWxwb2ludFtpXSkKKwkJCQlnb3RvIHBjaGVjazsKKwkJCX0KKwkJZGVjcHQgPSBzICs9IGk7CisjZWxzZQorCWlmICgqcyA9PSAnLicgJiYgIWRlY3B0KSB7CisJCWRlY3B0ID0gKytzOworI2VuZGlmCisJCXdoaWxlKGhleGRpZ1sqc10pCisJCQlzKys7CisJCX0vKn0qLworCWlmIChkZWNwdCkKKwkJZSA9IC0oKChMb25nKShzLWRlY3B0KSkgPDwgMik7CisgcGNoZWNrOgorCXMxID0gczsKKwliaWcgPSBlc2lnbiA9IDA7CisJc3dpdGNoKCpzKSB7CisJICBjYXNlICdwJzoKKwkgIGNhc2UgJ1AnOgorCQlzd2l0Y2goKisrcykgeworCQkgIGNhc2UgJy0nOgorCQkJZXNpZ24gPSAxOworCQkJLyogbm8gYnJlYWsgKi8KKwkJICBjYXNlICcrJzoKKwkJCXMrKzsKKwkJICB9CisJCWlmICgobiA9IGhleGRpZ1sqc10pID09IDAgfHwgbiA+IDB4MTkpIHsKKwkJCXMgPSBzMTsKKwkJCWJyZWFrOworCQkJfQorCQllMSA9IG4gLSAweDEwOworCQl3aGlsZSgobiA9IGhleGRpZ1sqKytzXSkgIT0wICYmIG4gPD0gMHgxOSkgeworCQkJaWYgKGUxICYgMHhmODAwMDAwMCkKKwkJCQliaWcgPSAxOworCQkJZTEgPSAxMCplMSArIG4gLSAweDEwOworCQkJfQorCQlpZiAoZXNpZ24pCisJCQllMSA9IC1lMTsKKwkJZSArPSBlMTsKKwkgIH0KKwkqc3AgPSAoY2hhciopczsKKwlpZiAoIWhhdmVkaWcpCisJCSpzcCA9IChjaGFyKilzMCAtIDE7CisJaWYgKHpyZXQpCisJCXJldHVybiBTVFJUT0dfWmVybzsKKwlpZiAoYmlnKSB7CisJCWlmIChlc2lnbikgeworCQkJc3dpdGNoKGZwaS0+cm91bmRpbmcpIHsKKwkJCSAgY2FzZSBGUElfUm91bmRfdXA6CisJCQkJaWYgKHNpZ24pCisJCQkJCWJyZWFrOworCQkJCWdvdG8gcmV0X3Rpbnk7CisJCQkgIGNhc2UgRlBJX1JvdW5kX2Rvd246CisJCQkJaWYgKCFzaWduKQorCQkJCQlicmVhazsKKwkJCQlnb3RvIHJldF90aW55OworCQkJICB9CisJCQlnb3RvIHJldHo7CisgcmV0X3Rpbnk6CisJCQliID0gQmFsbG9jKDApOworCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQliLT53ZHMgPSAxOworCQkJYi0+eFswXSA9IDE7CisJCQlnb3RvIGRyZXQ7CisJCQl9CisJCXN3aXRjaChmcGktPnJvdW5kaW5nKSB7CisJCSAgY2FzZSBGUElfUm91bmRfbmVhcjoKKwkJCWdvdG8gb3ZmbDE7CisJCSAgY2FzZSBGUElfUm91bmRfdXA6CisJCQlpZiAoIXNpZ24pCisJCQkJZ290byBvdmZsMTsKKwkJCWdvdG8gcmV0X2JpZzsKKwkJICBjYXNlIEZQSV9Sb3VuZF9kb3duOgorCQkJaWYgKHNpZ24pCisJCQkJZ290byBvdmZsMTsKKwkJCWdvdG8gcmV0X2JpZzsKKwkJICB9CisgcmV0X2JpZzoKKwkJbmJpdHMgPSBmcGktPm5iaXRzOworCQluMCA9IG4gPSBuYml0cyA+PiBrc2hpZnQ7CisJCWlmIChuYml0cyAmIGttYXNrKQorCQkJKytuOworCQlmb3IoaiA9IG4sIGsgPSAwOyBqID4+PSAxOyArK2spOworCQkqYnAgPSBiID0gQmFsbG9jKGspOworCQlpZiAoKmJwID09IE5VTEwpCisJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCWItPndkcyA9IG47CisJCWZvcihqID0gMDsgaiA8IG4wOyArK2opCisJCQliLT54W2pdID0gQUxMX09OOworCQlpZiAobiA+IG4wKQorCQkJYi0+eFtqXSA9IFVMYml0cyA+PiAoVUxiaXRzIC0gKG5iaXRzICYga21hc2spKTsKKwkJKmV4cCA9IGZwaS0+ZW1pbjsKKwkJcmV0dXJuIFNUUlRPR19Ob3JtYWwgfCBTVFJUT0dfSW5leGxvOworCQl9CisJbiA9IHMxIC0gczAgLSAxOworCWZvcihrID0gMDsgbiA+ICgxIDw8IChrc2hpZnQtMikpIC0gMTsgbiA+Pj0gMSkKKwkJaysrOworCWIgPSBCYWxsb2Moayk7CisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCXggPSBiLT54OworCW4gPSAwOworCUwgPSAwOworI2lmZGVmIFVTRV9MT0NBTEUKKwlmb3IoaSA9IDA7IGRlY2ltYWxwb2ludFtpKzFdOyArK2kpOworI2VuZGlmCisJd2hpbGUoczEgPiBzMCkgeworI2lmZGVmIFVTRV9MT0NBTEUKKwkJaWYgKCotLXMxID09IGRlY2ltYWxwb2ludFtpXSkgeworCQkJczEgLT0gaTsKKwkJCWNvbnRpbnVlOworCQkJfQorI2Vsc2UKKwkJaWYgKCotLXMxID09ICcuJykKKwkJCWNvbnRpbnVlOworI2VuZGlmCisJCWlmIChuID09IFVMYml0cykgeworCQkJKngrKyA9IEw7CisJCQlMID0gMDsKKwkJCW4gPSAwOworCQkJfQorCQlMIHw9IChoZXhkaWdbKnMxXSAmIDB4MGYpIDw8IG47CisJCW4gKz0gNDsKKwkJfQorCSp4KysgPSBMOworCWItPndkcyA9IG4gPSB4IC0gYi0+eDsKKwluID0gVUxiaXRzKm4gLSBoaTBiaXRzKEwpOworCW5iaXRzID0gZnBpLT5uYml0czsKKwlsb3N0Yml0cyA9IDA7CisJeCA9IGItPng7CisJaWYgKG4gPiBuYml0cykgeworCQluIC09IG5iaXRzOworCQlpZiAoYW55X29uKGIsbikpIHsKKwkJCWxvc3RiaXRzID0gMTsKKwkJCWsgPSBuIC0gMTsKKwkJCWlmICh4W2s+PmtzaGlmdF0gJiAxIDw8IChrICYga21hc2spKSB7CisJCQkJbG9zdGJpdHMgPSAyOworCQkJCWlmIChrID4gMCAmJiBhbnlfb24oYixrKSkKKwkJCQkJbG9zdGJpdHMgPSAzOworCQkJCX0KKwkJCX0KKwkJcnNoaWZ0KGIsIG4pOworCQllICs9IG47CisJCX0KKwllbHNlIGlmIChuIDwgbmJpdHMpIHsKKwkJbiA9IG5iaXRzIC0gbjsKKwkJYiA9IGxzaGlmdChiLCBuKTsKKwkJaWYgKGIgPT0gTlVMTCkKKwkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJZSAtPSBuOworCQl4ID0gYi0+eDsKKwkJfQorCWlmIChlID4gZnBpLT5lbWF4KSB7Cisgb3ZmbDoKKwkJQmZyZWUoYik7Cisgb3ZmbDE6CisjaWZuZGVmIE5PX0VSUk5PCisJCWVycm5vID0gRVJBTkdFOworI2VuZGlmCisJCXJldHVybiBTVFJUT0dfSW5maW5pdGUgfCBTVFJUT0dfT3ZlcmZsb3cgfCBTVFJUT0dfSW5leGhpOworCQl9CisJaXJ2ID0gU1RSVE9HX05vcm1hbDsKKwlpZiAoZSA8IGZwaS0+ZW1pbikgeworCQlpcnYgPSBTVFJUT0dfRGVub3JtYWw7CisJCW4gPSBmcGktPmVtaW4gLSBlOworCQlpZiAobiA+PSBuYml0cykgeworCQkJc3dpdGNoIChmcGktPnJvdW5kaW5nKSB7CisJCQkgIGNhc2UgRlBJX1JvdW5kX25lYXI6CisJCQkJaWYgKG4gPT0gbmJpdHMgJiYgKG4gPCAyIHx8IGFueV9vbihiLG4tMSkpKQorCQkJCQlnb3RvIG9uZV9iaXQ7CisJCQkJYnJlYWs7CisJCQkgIGNhc2UgRlBJX1JvdW5kX3VwOgorCQkJCWlmICghc2lnbikKKwkJCQkJZ290byBvbmVfYml0OworCQkJCWJyZWFrOworCQkJICBjYXNlIEZQSV9Sb3VuZF9kb3duOgorCQkJCWlmIChzaWduKSB7Cisgb25lX2JpdDoKKwkJCQkJeFswXSA9IGItPndkcyA9IDE7CisgZHJldDoKKwkJCQkJKmJwID0gYjsKKwkJCQkJKmV4cCA9IGZwaS0+ZW1pbjsKKyNpZm5kZWYgTk9fRVJSTk8KKwkJCQkJZXJybm8gPSBFUkFOR0U7CisjZW5kaWYKKwkJCQkJcmV0dXJuIFNUUlRPR19EZW5vcm1hbCB8IFNUUlRPR19JbmV4aGkKKwkJCQkJCXwgU1RSVE9HX1VuZGVyZmxvdzsKKwkJCQkJfQorCQkJICB9CisJCQlCZnJlZShiKTsKKyByZXR6OgorI2lmbmRlZiBOT19FUlJOTworCQkJZXJybm8gPSBFUkFOR0U7CisjZW5kaWYKKwkJCXJldHVybiBTVFJUT0dfWmVybyB8IFNUUlRPR19JbmV4bG8gfCBTVFJUT0dfVW5kZXJmbG93OworCQkJfQorCQlrID0gbiAtIDE7CisJCWlmIChsb3N0Yml0cykKKwkJCWxvc3RiaXRzID0gMTsKKwkJZWxzZSBpZiAoayA+IDApCisJCQlsb3N0Yml0cyA9IGFueV9vbihiLGspOworCQlpZiAoeFtrPj5rc2hpZnRdICYgMSA8PCAoayAmIGttYXNrKSkKKwkJCWxvc3RiaXRzIHw9IDI7CisJCW5iaXRzIC09IG47CisJCXJzaGlmdChiLG4pOworCQllID0gZnBpLT5lbWluOworCQl9CisJaWYgKGxvc3RiaXRzKSB7CisJCXVwID0gMDsKKwkJc3dpdGNoKGZwaS0+cm91bmRpbmcpIHsKKwkJICBjYXNlIEZQSV9Sb3VuZF96ZXJvOgorCQkJYnJlYWs7CisJCSAgY2FzZSBGUElfUm91bmRfbmVhcjoKKwkJCWlmIChsb3N0Yml0cyAmIDIKKwkJCSAmJiAobG9zdGJpdHMgfCB4WzBdKSAmIDEpCisJCQkJdXAgPSAxOworCQkJYnJlYWs7CisJCSAgY2FzZSBGUElfUm91bmRfdXA6CisJCQl1cCA9IDEgLSBzaWduOworCQkJYnJlYWs7CisJCSAgY2FzZSBGUElfUm91bmRfZG93bjoKKwkJCXVwID0gc2lnbjsKKwkJICB9CisJCWlmICh1cCkgeworCQkJayA9IGItPndkczsKKwkJCWIgPSBpbmNyZW1lbnQoYik7CisJCQlpZiAoYiA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCXggPSBiLT54OworCQkJaWYgKGlydiA9PSBTVFJUT0dfRGVub3JtYWwpIHsKKwkJCQlpZiAobmJpdHMgPT0gZnBpLT5uYml0cyAtIDEKKwkJCQkgJiYgeFtuYml0cyA+PiBrc2hpZnRdICYgMSA8PCAobmJpdHMgJiBrbWFzaykpCisJCQkJCWlydiA9ICBTVFJUT0dfTm9ybWFsOworCQkJCX0KKwkJCWVsc2UgaWYgKGItPndkcyA+IGsKKwkJCSB8fCAoKG4gPSBuYml0cyAmIGttYXNrKSAhPTAKKwkJCSAgICAgICYmIGhpMGJpdHMoeFtrLTFdKSA8IDMyLW4pKSB7CisJCQkJcnNoaWZ0KGIsMSk7CisJCQkJaWYgKCsrZSA+IGZwaS0+ZW1heCkKKwkJCQkJZ290byBvdmZsOworCQkJCX0KKwkJCWlydiB8PSBTVFJUT0dfSW5leGhpOworCQkJfQorCQllbHNlCisJCQlpcnYgfD0gU1RSVE9HX0luZXhsbzsKKwkJfQorCSpicCA9IGI7CisJKmV4cCA9IGU7CisJcmV0dXJuIGlydjsKKwl9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZ21pc2MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9nbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNzBlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvZ21pc2MuYwpAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTggYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisgdm9pZAorI2lmZGVmIEtSX2hlYWRlcnMKK3JzaGlmdChiLCBrKSBCaWdpbnQgKmI7IGludCBrOworI2Vsc2UKK3JzaGlmdChCaWdpbnQgKmIsIGludCBrKQorI2VuZGlmCit7CisJVUxvbmcgKngsICp4MSwgKnhlLCB5OworCWludCBuOworCisJeCA9IHgxID0gYi0+eDsKKwluID0gayA+PiBrc2hpZnQ7CisJaWYgKG4gPCBiLT53ZHMpIHsKKwkJeGUgPSB4ICsgYi0+d2RzOworCQl4ICs9IG47CisJCWlmIChrICY9IGttYXNrKSB7CisJCQluID0gVUxiaXRzIC0gazsKKwkJCXkgPSAqeCsrID4+IGs7CisJCQl3aGlsZSh4IDwgeGUpIHsKKwkJCQkqeDErKyA9ICh5IHwgKCp4IDw8IG4pKSAmIEFMTF9PTjsKKwkJCQl5ID0gKngrKyA+PiBrOworCQkJCX0KKwkJCWlmICgoKngxID0geSkgIT0wKQorCQkJCXgxKys7CisJCQl9CisJCWVsc2UKKwkJCXdoaWxlKHggPCB4ZSkKKwkJCQkqeDErKyA9ICp4Kys7CisJCX0KKwlpZiAoKGItPndkcyA9IHgxIC0gYi0+eCkgPT0gMCkKKwkJYi0+eFswXSA9IDA7CisJfQorCisgaW50CisjaWZkZWYgS1JfaGVhZGVycwordHJhaWx6KGIpIEJpZ2ludCAqYjsKKyNlbHNlCit0cmFpbHooQmlnaW50ICpiKQorI2VuZGlmCit7CisJVUxvbmcgTCwgKngsICp4ZTsKKwlpbnQgbiA9IDA7CisKKwl4ID0gYi0+eDsKKwl4ZSA9IHggKyBiLT53ZHM7CisJZm9yKG4gPSAwOyB4IDwgeGUgJiYgISp4OyB4KyspCisJCW4gKz0gVUxiaXRzOworCWlmICh4IDwgeGUpIHsKKwkJTCA9ICp4OworCQluICs9IGxvMGJpdHMoJkwpOworCQl9CisJcmV0dXJuIG47CisJfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2hkX2luaXQuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9oZF9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2ZTE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9oZF9pbml0LmMKQEAgLTAsMCArMSw1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworIHVuc2lnbmVkIGNoYXIgaGV4ZGlnWzI1Nl07CisKKyBzdGF0aWMgdm9pZAorI2lmZGVmIEtSX2hlYWRlcnMKK2h0aW5pdChoLCBzLCBpbmMpIHVuc2lnbmVkIGNoYXIgKmg7IHVuc2lnbmVkIGNoYXIgKnM7IGludCBpbmM7CisjZWxzZQoraHRpbml0KHVuc2lnbmVkIGNoYXIgKmgsIHVuc2lnbmVkIGNoYXIgKnMsIGludCBpbmMpCisjZW5kaWYKK3sKKwlpbnQgaSwgajsKKwlmb3IoaSA9IDA7IChqID0gc1tpXSkgIT0wOyBpKyspCisJCWhbal0gPSBpICsgaW5jOworCX0KKworIHZvaWQKK2hleGRpZ19pbml0X0QyQShWb2lkKQoreworI2RlZmluZSBVU0MgKHVuc2lnbmVkIGNoYXIgKikKKwlodGluaXQoaGV4ZGlnLCBVU0MgIjAxMjM0NTY3ODkiLCAweDEwKTsKKwlodGluaXQoaGV4ZGlnLCBVU0MgImFiY2RlZiIsIDB4MTAgKyAxMCk7CisJaHRpbml0KGhleGRpZywgVVNDICJBQkNERUYiLCAweDEwICsgMTApOworCX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9oZHRvYS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2hkdG9hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyZjZkNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9oZHRvYS5jCkBAIC0wLDAgKzEsMzMyIEBACisvKgkkT3BlbkJTRDogaGR0b2EuYyx2IDEuMiAyMDA5LzEwLzE2IDEyOjE1OjAzIG1hcnR5bmFzIEV4cCAkCSovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2llZWUuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImdkdG9haW1wLmgiCisKKy8qIFN0cmluZ3MgdmFsdWVzIHVzZWQgYnkgZHRvYSgpICovCisjZGVmaW5lCUlORlNUUgkiSW5maW5pdHkiCisjZGVmaW5lCU5BTlNUUgkiTmFOIgorCisjZGVmaW5lCURCTF9BREoJCShEQkxfTUFYX0VYUCAtIDIgKyAoKERCTF9NQU5UX0RJRyAtIDEpICUgNCkpCisjZGVmaW5lCUxEQkxfQURKCShMREJMX01BWF9FWFAgLSAyICsgKChMREJMX01BTlRfRElHIC0gMSkgJSA0KSkKKworLyoKKyAqIFJvdW5kIHVwIHRoZSBnaXZlbiBkaWdpdCBzdHJpbmcuICBJZiB0aGUgZGlnaXQgc3RyaW5nIGlzIGZmZi4uLmYsCisgKiB0aGlzIHByb2NlZHVyZSBzZXRzIGl0IHRvIDEwMC4uLjAgYW5kIHJldHVybnMgMSB0byBpbmRpY2F0ZSB0aGF0CisgKiB0aGUgZXhwb25lbnQgbmVlZHMgdG8gYmUgYnVtcGVkLiAgT3RoZXJ3aXNlLCAwIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgaW50Cityb3VuZHVwKGNoYXIgKnMwLCBpbnQgbmRpZ2l0cykKK3sKKwljaGFyICpzOworCisJZm9yIChzID0gczAgKyBuZGlnaXRzIC0gMTsgKnMgPT0gMHhmOyBzLS0pIHsKKwkJaWYgKHMgPT0gczApIHsKKwkJCSpzID0gMTsKKwkJCXJldHVybiAoMSk7CisJCX0KKwkJKnMgPSAwOworCX0KKwkrKypzOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBSb3VuZCB0aGUgZ2l2ZW4gZGlnaXQgc3RyaW5nIHRvIG5kaWdpdHMgZGlnaXRzIGFjY29yZGluZyB0byB0aGUKKyAqIGN1cnJlbnQgcm91bmRpbmcgbW9kZS4gIE5vdGUgdGhhdCB0aGlzIGNvdWxkIHByb2R1Y2UgYSBzdHJpbmcgd2hvc2UKKyAqIHZhbHVlIGlzIG5vdCByZXByZXNlbnRhYmxlIGluIHRoZSBjb3JyZXNwb25kaW5nIGZsb2F0aW5nLXBvaW50CisgKiB0eXBlLiAgVGhlIGV4cG9uZW50IHBvaW50ZWQgdG8gYnkgZGVjcHQgaXMgYWRqdXN0ZWQgaWYgbmVjZXNzYXJ5LgorICovCitzdGF0aWMgdm9pZAorZG9yb3VuZGluZyhjaGFyICpzMCwgaW50IG5kaWdpdHMsIGludCBzaWduLCBpbnQgKmRlY3B0KQoreworCWludCBhZGp1c3QgPSAwOwkvKiBkbyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgZXhwb25lbnQ/ICovCisKKwlzd2l0Y2ggKEZMVF9ST1VORFMpIHsKKwljYXNlIDA6CQkvKiB0b3dhcmQgemVybyAqLworCWRlZmF1bHQ6CS8qIGltcGxlbWVudGF0aW9uLWRlZmluZWQgKi8KKwkJYnJlYWs7CisJY2FzZSAxOgkJLyogdG8gbmVhcmVzdCwgaGFsZndheSByb3VuZHMgdG8gZXZlbiAqLworCQlpZiAoKHMwW25kaWdpdHNdID4gOCkgfHwKKwkJICAgIChzMFtuZGlnaXRzXSA9PSA4ICYmIHMwW25kaWdpdHMgKyAxXSAmIDEpKQorCQkJYWRqdXN0ID0gcm91bmR1cChzMCwgbmRpZ2l0cyk7CisJCWJyZWFrOworCWNhc2UgMjoJCS8qIHRvd2FyZCAraW5mICovCisJCWlmIChzaWduID09IDApCisJCQlhZGp1c3QgPSByb3VuZHVwKHMwLCBuZGlnaXRzKTsKKwkJYnJlYWs7CisJY2FzZSAzOgkJLyogdG93YXJkIC1pbmYgKi8KKwkJaWYgKHNpZ24gIT0gMCkKKwkJCWFkanVzdCA9IHJvdW5kdXAoczAsIG5kaWdpdHMpOworCQlicmVhazsKKwl9CisKKwlpZiAoYWRqdXN0KQorCQkqZGVjcHQgKz0gNDsKK30KKworLyoKKyAqIFRoaXMgcHJvY2VkdXJlIGNvbnZlcnRzIGEgZG91YmxlLXByZWNpc2lvbiBudW1iZXIgaW4gSUVFRSBmb3JtYXQKKyAqIGludG8gYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgZGlnaXRzIGFuZCBhbiBleHBvbmVudCBvZiAyLiAgSXRzCisgKiBiZWhhdmlvciBpcyBidWctZm9yLWJ1ZyBjb21wYXRpYmxlIHdpdGggZHRvYSgpIGluIG1vZGUgMiwgd2l0aCB0aGUKKyAqIGZvbGxvd2luZyBleGNlcHRpb25zOgorICoKKyAqIC0gQW4gbmRpZ2l0cyA8IDAgY2F1c2VzIGl0IHRvIHVzZSBhcyBtYW55IGRpZ2l0cyBhcyBuZWNlc3NhcnkgdG8KKyAqICAgcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS4KKyAqIC0gVGhlIGFkZGl0aW9uYWwgeGRpZ3MgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGVpdGhlciB0aGUgc3RyaW5nCisgKiAgICIwMTIzNDU2Nzg5QUJDREVGIiBvciB0aGUgc3RyaW5nICIwMTIzNDU2Nzg5YWJjZGVmIiwgZGVwZW5kaW5nIG9uCisgKiAgIHdoaWNoIGNhc2UgaXMgZGVzaXJlZC4KKyAqIC0gVGhpcyByb3V0aW5lIGRvZXMgbm90IHJlcGVhdCBkdG9hJ3MgbWlzdGFrZSBvZiBzZXR0aW5nIGRlY3B0CisgKiAgIHRvIDk5OTkgaW4gdGhlIGNhc2Ugb2YgYW4gaW5maW5pdHkgb3IgTmFOLiAgSU5UX01BWCBpcyB1c2VkCisgKiAgIGZvciB0aGlzIHB1cnBvc2UgaW5zdGVhZC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIEM5OSBzdGFuZGFyZCBkb2VzIG5vdCBzcGVjaWZ5IHdoYXQgdGhlIGxlYWRpbmcgZGlnaXQKKyAqIHNob3VsZCBiZSBmb3Igbm9uLXplcm8gbnVtYmVycy4gIEZvciBpbnN0YW5jZSwgMHgxLjNwMyBpcyB0aGUgc2FtZQorICogYXMgMHgyLjZwMiBpcyB0aGUgc2FtZSBhcyAweDQuY3AzLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBjaG9vc2VzIHRoZQorICogZmlyc3QgZGlnaXQgc28gdGhhdCBzdWJzZXF1ZW50IGRpZ2l0cyBhcmUgYWxpZ25lZCBvbiBuaWJibGUKKyAqIGJvdW5kYXJpZXMgKGJlZm9yZSByb3VuZGluZykuCisgKgorICogSW5wdXRzOglkLCB4ZGlncywgbmRpZ2l0cworICogT3V0cHV0czoJZGVjcHQsIHNpZ24sIHJ2ZQorICovCitjaGFyICoKK19faGR0b2EoZG91YmxlIGQsIGNvbnN0IGNoYXIgKnhkaWdzLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLAorICAgIGNoYXIgKipydmUpCit7CisJc3RhdGljIGNvbnN0IGludCBzaWdmaWdzID0gKERCTF9NQU5UX0RJRyArIDMpIC8gNDsKKwlzdHJ1Y3QgaWVlZV9kb3VibGUgKnAgPSAoc3RydWN0IGllZWVfZG91YmxlICopJmQ7CisJY2hhciAqcywgKnMwOworCWludCBidWZzaXplOworCisJKnNpZ24gPSBwLT5kYmxfc2lnbjsKKworCXN3aXRjaCAoZnBjbGFzc2lmeShkKSkgeworCWNhc2UgRlBfTk9STUFMOgorCQkqZGVjcHQgPSBwLT5kYmxfZXhwIC0gREJMX0FESjsKKwkJYnJlYWs7CisJY2FzZSBGUF9aRVJPOgorCQkqZGVjcHQgPSAxOworCQlyZXR1cm4gKG5ydl9hbGxvYygiMCIsIHJ2ZSwgMSkpOworCWNhc2UgRlBfU1VCTk9STUFMOgorCQlkICo9IDB4MXA1MTQ7CisJCSpkZWNwdCA9IHAtPmRibF9leHAgLSAoNTE0ICsgREJMX0FESik7CisJCWJyZWFrOworCWNhc2UgRlBfSU5GSU5JVEU6CisJCSpkZWNwdCA9IElOVF9NQVg7CisJCXJldHVybiAobnJ2X2FsbG9jKElORlNUUiwgcnZlLCBzaXplb2YoSU5GU1RSKSAtIDEpKTsKKwljYXNlIEZQX05BTjoKKwkJKmRlY3B0ID0gSU5UX01BWDsKKwkJcmV0dXJuIChucnZfYWxsb2MoTkFOU1RSLCBydmUsIHNpemVvZihOQU5TVFIpIC0gMSkpOworCWRlZmF1bHQ6CisJCWFib3J0KCk7CisJfQorCisJLyogRlBfTk9STUFMIG9yIEZQX1NVQk5PUk1BTCAqLworCisJaWYgKG5kaWdpdHMgPT0gMCkJCS8qIGR0b2EoKSBjb21wYXRpYmlsaXR5ICovCisJCW5kaWdpdHMgPSAxOworCisJLyoKKwkgKiBGb3Igc2ltcGxpY2l0eSwgd2UgZ2VuZXJhdGUgYWxsIHRoZSBkaWdpdHMgZXZlbiBpZiB0aGUKKwkgKiBjYWxsZXIgaGFzIHJlcXVlc3RlZCBmZXdlci4KKwkgKi8KKwlidWZzaXplID0gKHNpZ2ZpZ3MgPiBuZGlnaXRzKSA/IHNpZ2ZpZ3MgOiBuZGlnaXRzOworCXMwID0gcnZfYWxsb2MoYnVmc2l6ZSk7CisJaWYgKHMwID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwkvKgorCSAqIFdlIHdvcmsgZnJvbSByaWdodCB0byBsZWZ0LCBmaXJzdCBhZGRpbmcgYW55IHJlcXVlc3RlZCB6ZXJvCisJICogcGFkZGluZywgdGhlbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUKKwkgKiBtYW50aXNzYSwgZm9sbG93ZWQgYnkgdGhlIG1vc3Qgc2lnbmlmaWNhbnQuICBUaGUgYnVmZmVyIGlzCisJICogZmlsbGVkIHdpdGggdGhlIGJ5dGUgdmFsdWVzIDB4MCB0aHJvdWdoIDB4Ziwgd2hpY2ggYXJlCisJICogY29udmVydGVkIHRvIHhkaWdzWzB4MF0gdGhyb3VnaCB4ZGlnc1sweGZdIGFmdGVyIHRoZQorCSAqIHJvdW5kaW5nIHBoYXNlLgorCSAqLworCWZvciAocyA9IHMwICsgYnVmc2l6ZSAtIDE7IHMgPiBzMCArIHNpZ2ZpZ3MgLSAxOyBzLS0pCisJCSpzID0gMDsKKwlmb3IgKDsgcyA+IHMwICsgc2lnZmlncyAtIChEQkxfRlJBQ0xCSVRTIC8gNCkgLSAxICYmIHMgPiBzMDsgcy0tKSB7CisJCSpzID0gcC0+ZGJsX2ZyYWNsICYgMHhmOworCQlwLT5kYmxfZnJhY2wgPj49IDQ7CisJfQorCWZvciAoOyBzID4gczA7IHMtLSkgeworCQkqcyA9IHAtPmRibF9mcmFjaCAmIDB4ZjsKKwkJcC0+ZGJsX2ZyYWNoID4+PSA0OworCX0KKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBzbmFyZmVkIGFsbCB0aGUgYml0cyBpbiB0aGUKKwkgKiBtYW50aXNzYSwgd2l0aCB0aGUgcG9zc2libGUgZXhjZXB0aW9uIG9mIHRoZSBoaWdoZXN0LW9yZGVyCisJICogKHBhcnRpYWwpIG5pYmJsZSwgd2hpY2ggaXMgZGVhbHQgd2l0aCBieSB0aGUgbmV4dAorCSAqIHN0YXRlbWVudC4gIFdlIGFsc28gdGFjayBvbiB0aGUgaW1wbGljaXQgbm9ybWFsaXphdGlvbiBiaXQuCisJICovCisJKnMgPSBwLT5kYmxfZnJhY2ggfCAoMVUgPDwgKChEQkxfTUFOVF9ESUcgLSAxKSAlIDQpKTsKKworCS8qIElmIG5kaWdpdHMgPCAwLCB3ZSBhcmUgZXhwZWN0ZWQgdG8gYXV0by1zaXplIHRoZSBwcmVjaXNpb24uICovCisJaWYgKG5kaWdpdHMgPCAwKSB7CisJCWZvciAobmRpZ2l0cyA9IHNpZ2ZpZ3M7IHMwW25kaWdpdHMgLSAxXSA9PSAwOyBuZGlnaXRzLS0pCisJCQk7CisJfQorCisJaWYgKHNpZ2ZpZ3MgPiBuZGlnaXRzICYmIHMwW25kaWdpdHNdICE9IDApCisJCWRvcm91bmRpbmcoczAsIG5kaWdpdHMsIHAtPmRibF9zaWduLCBkZWNwdCk7CisKKwlzID0gczAgKyBuZGlnaXRzOworCWlmIChydmUgIT0gTlVMTCkKKwkJKnJ2ZSA9IHM7CisJKnMtLSA9ICdcMCc7CisJZm9yICg7IHMgPj0gczA7IHMtLSkKKwkJKnMgPSB4ZGlnc1sodW5zaWduZWQgaW50KSpzXTsKKworCXJldHVybiAoczApOworfQorCisjaWYgKExEQkxfTUFOVF9ESUcgPiBEQkxfTUFOVF9ESUcpCisKKy8qCisgKiBUaGlzIGlzIHRoZSBsb25nIGRvdWJsZSB2ZXJzaW9uIG9mIF9faGR0b2EoKS4KKyAqLworY2hhciAqCitfX2hsZHRvYShsb25nIGRvdWJsZSBlLCBjb25zdCBjaGFyICp4ZGlncywgaW50IG5kaWdpdHMsIGludCAqZGVjcHQsIGludCAqc2lnbiwKKyAgICBjaGFyICoqcnZlKQoreworCXN0YXRpYyBjb25zdCBpbnQgc2lnZmlncyA9IChMREJMX01BTlRfRElHICsgMykgLyA0OworCXN0cnVjdCBpZWVlX2V4dCAqcCA9IChzdHJ1Y3QgaWVlZV9leHQgKikmZTsKKwljaGFyICpzLCAqczA7CisJaW50IGJ1ZnNpemU7CisKKwkqc2lnbiA9IHAtPmV4dF9zaWduOworCisJc3dpdGNoIChmcGNsYXNzaWZ5KGUpKSB7CisJY2FzZSBGUF9OT1JNQUw6CisJCSpkZWNwdCA9IHAtPmV4dF9leHAgLSBMREJMX0FESjsKKwkJYnJlYWs7CisJY2FzZSBGUF9aRVJPOgorCQkqZGVjcHQgPSAxOworCQlyZXR1cm4gKG5ydl9hbGxvYygiMCIsIHJ2ZSwgMSkpOworCWNhc2UgRlBfU1VCTk9STUFMOgorCQllICo9IDB4MXA1MTRMOworCQkqZGVjcHQgPSBwLT5leHRfZXhwIC0gKDUxNCArIExEQkxfQURKKTsKKwkJYnJlYWs7CisJY2FzZSBGUF9JTkZJTklURToKKwkJKmRlY3B0ID0gSU5UX01BWDsKKwkJcmV0dXJuIChucnZfYWxsb2MoSU5GU1RSLCBydmUsIHNpemVvZihJTkZTVFIpIC0gMSkpOworCWNhc2UgRlBfTkFOOgorCQkqZGVjcHQgPSBJTlRfTUFYOworCQlyZXR1cm4gKG5ydl9hbGxvYyhOQU5TVFIsIHJ2ZSwgc2l6ZW9mKE5BTlNUUikgLSAxKSk7CisJZGVmYXVsdDoKKwkJYWJvcnQoKTsKKwl9CisKKwkvKiBGUF9OT1JNQUwgb3IgRlBfU1VCTk9STUFMICovCisKKwlpZiAobmRpZ2l0cyA9PSAwKQkJLyogZHRvYSgpIGNvbXBhdGliaWxpdHkgKi8KKwkJbmRpZ2l0cyA9IDE7CisKKwkvKgorCSAqIEZvciBzaW1wbGljaXR5LCB3ZSBnZW5lcmF0ZSBhbGwgdGhlIGRpZ2l0cyBldmVuIGlmIHRoZQorCSAqIGNhbGxlciBoYXMgcmVxdWVzdGVkIGZld2VyLgorCSAqLworCWJ1ZnNpemUgPSAoc2lnZmlncyA+IG5kaWdpdHMpID8gc2lnZmlncyA6IG5kaWdpdHM7CisJczAgPSBydl9hbGxvYyhidWZzaXplKTsKKwlpZiAoczAgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qCisJICogV2Ugd29yayBmcm9tIHJpZ2h0IHRvIGxlZnQsIGZpcnN0IGFkZGluZyBhbnkgcmVxdWVzdGVkIHplcm8KKwkgKiBwYWRkaW5nLCB0aGVuIHRoZSBsZWFzdCBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZQorCSAqIG1hbnRpc3NhLCBmb2xsb3dlZCBieSB0aGUgbW9zdCBzaWduaWZpY2FudC4gIFRoZSBidWZmZXIgaXMKKwkgKiBmaWxsZWQgd2l0aCB0aGUgYnl0ZSB2YWx1ZXMgMHgwIHRocm91Z2ggMHhmLCB3aGljaCBhcmUKKwkgKiBjb252ZXJ0ZWQgdG8geGRpZ3NbMHgwXSB0aHJvdWdoIHhkaWdzWzB4Zl0gYWZ0ZXIgdGhlCisJICogcm91bmRpbmcgcGhhc2UuCisJICovCisJZm9yIChzID0gczAgKyBidWZzaXplIC0gMTsgcyA+IHMwICsgc2lnZmlncyAtIDE7IHMtLSkKKwkJKnMgPSAwOworCWZvciAoOyBzID4gczAgKyBzaWdmaWdzIC0gKEVYVF9GUkFDTEJJVFMgLyA0KSAtIDEgJiYgcyA+IHMwOyBzLS0pIHsKKwkJKnMgPSBwLT5leHRfZnJhY2wgJiAweGY7CisJCXAtPmV4dF9mcmFjbCA+Pj0gNDsKKwl9CisjaWZkZWYgRVhUX0ZSQUNITUJJVFMKKwlmb3IgKDsgcyA+IHMwOyBzLS0pIHsKKwkJKnMgPSBwLT5leHRfZnJhY2htICYgMHhmOworCQlwLT5leHRfZnJhY2htID4+PSA0OworCX0KKyNlbmRpZgorI2lmZGVmIEVYVF9GUkFDTE1CSVRTCisJZm9yICg7IHMgPiBzMDsgcy0tKSB7CisJCSpzID0gcC0+ZXh0X2ZyYWNsbSAmIDB4ZjsKKwkJcC0+ZXh0X2ZyYWNsbSA+Pj0gNDsKKwl9CisjZW5kaWYKKwlmb3IgKDsgcyA+IHMwOyBzLS0pIHsKKwkJKnMgPSBwLT5leHRfZnJhY2ggJiAweGY7CisJCXAtPmV4dF9mcmFjaCA+Pj0gNDsKKwl9CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgc25hcmZlZCBhbGwgdGhlIGJpdHMgaW4gdGhlCisJICogbWFudGlzc2EsIHdpdGggdGhlIHBvc3NpYmxlIGV4Y2VwdGlvbiBvZiB0aGUgaGlnaGVzdC1vcmRlcgorCSAqIChwYXJ0aWFsKSBuaWJibGUsIHdoaWNoIGlzIGRlYWx0IHdpdGggYnkgdGhlIG5leHQKKwkgKiBzdGF0ZW1lbnQuICBXZSBhbHNvIHRhY2sgb24gdGhlIGltcGxpY2l0IG5vcm1hbGl6YXRpb24gYml0LgorCSAqLworCSpzID0gcC0+ZXh0X2ZyYWNoIHwgKDFVIDw8ICgoTERCTF9NQU5UX0RJRyAtIDEpICUgNCkpOworCisJLyogSWYgbmRpZ2l0cyA8IDAsIHdlIGFyZSBleHBlY3RlZCB0byBhdXRvLXNpemUgdGhlIHByZWNpc2lvbi4gKi8KKwlpZiAobmRpZ2l0cyA8IDApIHsKKwkJZm9yIChuZGlnaXRzID0gc2lnZmlnczsgczBbbmRpZ2l0cyAtIDFdID09IDA7IG5kaWdpdHMtLSkKKwkJCTsKKwl9CisKKwlpZiAoc2lnZmlncyA+IG5kaWdpdHMgJiYgczBbbmRpZ2l0c10gIT0gMCkKKwkJZG9yb3VuZGluZyhzMCwgbmRpZ2l0cywgcC0+ZXh0X3NpZ24sIGRlY3B0KTsKKworCXMgPSBzMCArIG5kaWdpdHM7CisJaWYgKHJ2ZSAhPSBOVUxMKQorCQkqcnZlID0gczsKKwkqcy0tID0gJ1wwJzsKKwlmb3IgKDsgcyA+PSBzMDsgcy0tKQorCQkqcyA9IHhkaWdzWyh1bnNpZ25lZCBpbnQpKnNdOworCisJcmV0dXJuIChzMCk7Cit9CisKKyNlbHNlCS8qIChMREJMX01BTlRfRElHID09IERCTF9NQU5UX0RJRykgKi8KKworY2hhciAqCitfX2hsZHRvYShsb25nIGRvdWJsZSBlLCBjb25zdCBjaGFyICp4ZGlncywgaW50IG5kaWdpdHMsIGludCAqZGVjcHQsIGludCAqc2lnbiwKKyAgICBjaGFyICoqcnZlKQoreworCXJldHVybiAoX19oZHRvYSgoZG91YmxlKWUsIHhkaWdzLCBuZGlnaXRzLCBkZWNwdCwgc2lnbiwgcnZlKSk7Cit9CisKKyNlbmRpZgkvKiAoTERCTF9NQU5UX0RJRyA9PSBEQkxfTUFOVF9ESUcpICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvaGV4bmFuLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvaGV4bmFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0MzcyMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9oZXhuYW4uYwpAQCAtMCwwICsxLDE1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAyMDAwIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworIHN0YXRpYyB2b2lkCisjaWZkZWYgS1JfaGVhZGVycworTF9zaGlmdCh4LCB4MSwgaSkgVUxvbmcgKng7IFVMb25nICp4MTsgaW50IGk7CisjZWxzZQorTF9zaGlmdChVTG9uZyAqeCwgVUxvbmcgKngxLCBpbnQgaSkKKyNlbmRpZgoreworCWludCBqOworCisJaSA9IDggLSBpOworCWkgPDw9IDI7CisJaiA9IFVMYml0cyAtIGk7CisJZG8geworCQkqeCB8PSB4WzFdIDw8IGo7CisJCXhbMV0gPj49IGk7CisJCX0gd2hpbGUoKyt4IDwgeDEpOworCX0KKworIGludAorI2lmZGVmIEtSX2hlYWRlcnMKK2hleG5hbihzcCwgZnBpLCB4MCkKKwlDT05TVCBjaGFyICoqc3A7IEZQSSAqZnBpOyBVTG9uZyAqeDA7CisjZWxzZQoraGV4bmFuKCBDT05TVCBjaGFyICoqc3AsIEZQSSAqZnBpLCBVTG9uZyAqeDApCisjZW5kaWYKK3sKKwlVTG9uZyBjLCBoLCAqeCwgKngxLCAqeGU7CisJQ09OU1QgY2hhciAqczsKKwlpbnQgaGF2ZWRpZywgaGQwLCBpLCBuYml0czsKKworCWlmICghaGV4ZGlnWycwJ10pCisJCWhleGRpZ19pbml0X0QyQSgpOworCW5iaXRzID0gZnBpLT5uYml0czsKKwl4ID0geDAgKyAobmJpdHMgPj4ga3NoaWZ0KTsKKwlpZiAobmJpdHMgJiBrbWFzaykKKwkJeCsrOworCSotLXggPSAwOworCXgxID0geGUgPSB4OworCWhhdmVkaWcgPSBoZDAgPSBpID0gMDsKKwlzID0gKnNwOworCS8qIGFsbG93IG9wdGlvbmFsIGluaXRpYWwgMHggb3IgMFggKi8KKwl3aGlsZSgoYyA9ICooQ09OU1QgdW5zaWduZWQgY2hhciopKHMrMSkpICYmIGMgPD0gJyAnKQorCQkrK3M7CisJaWYgKHNbMV0gPT0gJzAnICYmIChzWzJdID09ICd4JyB8fCBzWzJdID09ICdYJykKKwkgJiYgKihDT05TVCB1bnNpZ25lZCBjaGFyKikocyszKSA+ICcgJykKKwkJcyArPSAyOworCXdoaWxlKChjID0gKihDT05TVCB1bnNpZ25lZCBjaGFyKikrK3MpKSB7CisJCWlmICghKGggPSBoZXhkaWdbY10pKSB7CisJCQlpZiAoYyA8PSAnICcpIHsKKwkJCQlpZiAoaGQwIDwgaGF2ZWRpZykgeworCQkJCQlpZiAoeCA8IHgxICYmIGkgPCA4KQorCQkJCQkJTF9zaGlmdCh4LCB4MSwgaSk7CisJCQkJCWlmICh4IDw9IHgwKSB7CisJCQkJCQlpID0gODsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQloZDAgPSBoYXZlZGlnOworCQkJCQkqLS14ID0gMDsKKwkJCQkJeDEgPSB4OworCQkJCQlpID0gMDsKKwkJCQkJfQorCQkJCXdoaWxlKCooQ09OU1QgdW5zaWduZWQgY2hhciopKHMrMSkgPD0gJyAnKQorCQkJCQkrK3M7CisJCQkJaWYgKHNbMV0gPT0gJzAnICYmIChzWzJdID09ICd4JyB8fCBzWzJdID09ICdYJykKKwkJCQkgJiYgKihDT05TVCB1bnNpZ25lZCBjaGFyKikocyszKSA+ICcgJykKKwkJCQkJcyArPSAyOworCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCWlmICgvKigqLyBjID09ICcpJyAmJiBoYXZlZGlnKSB7CisJCQkJKnNwID0gcyArIDE7CisJCQkJYnJlYWs7CisJCQkJfQorI2lmbmRlZiBHRFRPQV9OT05fUEVEQU5USUNfTkFOQ0hFQ0sKKwkJCWRvIHsKKwkJCQlpZiAoLyooKi8gYyA9PSAnKScpIHsKKwkJCQkJKnNwID0gcyArIDE7CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSB3aGlsZSgoYyA9ICorK3MpKTsKKyNlbmRpZgorCQkJcmV0dXJuIFNUUlRPR19OYU47CisJCQl9CisJCWhhdmVkaWcrKzsKKwkJaWYgKCsraSA+IDgpIHsKKwkJCWlmICh4IDw9IHgwKQorCQkJCWNvbnRpbnVlOworCQkJaSA9IDE7CisJCQkqLS14ID0gMDsKKwkJCX0KKwkJKnggPSAoKnggPDwgNCkgfCAoaCAmIDB4Zik7CisJCX0KKwlpZiAoIWhhdmVkaWcpCisJCXJldHVybiBTVFJUT0dfTmFOOworCWlmICh4IDwgeDEgJiYgaSA8IDgpCisJCUxfc2hpZnQoeCwgeDEsIGkpOworCWlmICh4ID4geDApIHsKKwkJeDEgPSB4MDsKKwkJZG8gKngxKysgPSAqeCsrOworCQkJd2hpbGUoeCA8PSB4ZSk7CisJCWRvICp4MSsrID0gMDsKKwkJCXdoaWxlKHgxIDw9IHhlKTsKKwkJfQorCWVsc2UgeworCQkvKiB0cnVuY2F0ZSBoaWdoLW9yZGVyIHdvcmQgaWYgbmVjZXNzYXJ5ICovCisJCWlmICggKGkgPSBuYml0cyAmIChVTGJpdHMtMSkpICE9MCkKKwkJCSp4ZSAmPSAoKFVMb25nKTB4ZmZmZmZmZmYpID4+IChVTGJpdHMgLSBpKTsKKwkJfQorCWZvcih4MSA9IHhlOzsgLS14MSkgeworCQlpZiAoKngxICE9IDApCisJCQlicmVhazsKKwkJaWYgKHgxID09IHgwKSB7CisJCQkqeDEgPSAxOworCQkJYnJlYWs7CisJCQl9CisJCX0KKwlyZXR1cm4gU1RSVE9HX05hTmJpdHM7CisJfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2xkdG9hLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvbGR0b2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTNkNzFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL2xkdG9hLmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qCSRPcGVuQlNEOiBsZHRvYS5jLHYgMS4xIDIwMDgvMDkvMDcgMjA6MzY6MDggbWFydHluYXMgRXhwICQJKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmbmRlZiBfX3ZheF9fCisjaW5jbHVkZSA8bWFjaGluZS9pZWVlLmg+CisjZW5kaWYgLyogIV9fdmF4X18gKi8KKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImdkdG9haW1wLmgiCisKKyNpZiAoTERCTF9NQU5UX0RJRyA+IERCTF9NQU5UX0RJRykKKworLyoKKyAqIGxkdG9hKCkgaXMgYSB3cmFwcGVyIGZvciBnZHRvYSgpIHRoYXQgbWFrZXMgaXQgc21lbGwgbGlrZSBkdG9hKCksCisgKiBleGNlcHQgdGhhdCB0aGUgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnQgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZS4KKyAqIFdoZW4gZHRvYSgpIGlzIHBhc3NlZCBhIE5hTiBvciBpbmZpbml0eSwgaXQgc2V0cyBleHB0IHRvIDk5OTkuCisgKiBIb3dldmVyLCBhIGxvbmcgZG91YmxlIGNvdWxkIGhhdmUgYSB2YWxpZCBleHBvbmVudCBvZiA5OTk5LCBzbyB3ZQorICogdXNlIElOVF9NQVggaW4gbGR0b2EoKSBpbnN0ZWFkLgorICovCitjaGFyICoKK19fbGR0b2EobG9uZyBkb3VibGUgKmxkLCBpbnQgbW9kZSwgaW50IG5kaWdpdHMsIGludCAqZGVjcHQsIGludCAqc2lnbiwKKyAgICBjaGFyICoqcnZlKQoreworCUZQSSBmcGkgPSB7CisJCUxEQkxfTUFOVF9ESUcsCQkJLyogbmJpdHMgKi8KKwkJTERCTF9NSU5fRVhQIC0gTERCTF9NQU5UX0RJRywJLyogZW1pbiAqLworCQlMREJMX01BWF9FWFAgLSBMREJMX01BTlRfRElHLAkvKiBlbWF4ICovCisJCUZMVF9ST1VORFMsCSAgICAgICAJCS8qIHJvdW5kaW5nICovCisjaWZkZWYgU3VkZGVuX1VuZGVyZmxvdwkvKiB1bnVzZWQsIGJ1dCBjb3JyZWN0IGFueXdheSAqLworCQkxCisjZWxzZQorCQkwCisjZW5kaWYKKwl9OworCWludCBiZSwga2luZDsKKwljaGFyICpyZXQ7CisJc3RydWN0IGllZWVfZXh0ICpwID0gKHN0cnVjdCBpZWVlX2V4dCAqKWxkOworCXVpbnQzMl90IGJpdHNbKExEQkxfTUFOVF9ESUcgKyAzMSkgLyAzMl07CisJdm9pZCAqdmJpdHMgPSBiaXRzOworCisJLyoKKwkgKiBnZHRvYSBkb2Vzbid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIHNpZ24gb2YgdGhlIG51bWJlciwgc28KKwkgKiBpZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZlLCB3ZSBuZWVkIHRvIHN3YXAgcm91bmRpbmcgbW9kZXMgb2YKKwkgKiAyICh1cHdhcmRzKSBhbmQgMyAoZG93bndhcmRzKS4KKwkgKi8KKwkqc2lnbiA9IHAtPmV4dF9zaWduOworCWZwaS5yb3VuZGluZyBePSAoZnBpLnJvdW5kaW5nID4+IDEpICYgcC0+ZXh0X3NpZ247CisKKwliZSA9IHAtPmV4dF9leHAgLSAoTERCTF9NQVhfRVhQIC0gMSkgLSAoTERCTF9NQU5UX0RJRyAtIDEpOworCUVYVF9UT19BUlJBWTMyKHAsIGJpdHMpOworCisJc3dpdGNoIChmcGNsYXNzaWZ5KCpsZCkpIHsKKwljYXNlIEZQX05PUk1BTDoKKwkJa2luZCA9IFNUUlRPR19Ob3JtYWw7CisjaWZkZWYgRVhUX0lNUExJQ0lUX05CSVQKKwkJYml0c1tMREJMX01BTlRfRElHIC8gMzJdIHw9IDEgPDwgKChMREJMX01BTlRfRElHIC0gMSkgJSAzMik7CisjZW5kaWYgLyogRVhUX0lNUExJQ0lUX05CSVQgKi8KKwkJYnJlYWs7CisJY2FzZSBGUF9aRVJPOgorCQlraW5kID0gU1RSVE9HX1plcm87CisJCWJyZWFrOworCWNhc2UgRlBfU1VCTk9STUFMOgorCQlraW5kID0gU1RSVE9HX0Rlbm9ybWFsOworCQliZSsrOworCQlicmVhazsKKwljYXNlIEZQX0lORklOSVRFOgorCQlraW5kID0gU1RSVE9HX0luZmluaXRlOworCQlicmVhazsKKwljYXNlIEZQX05BTjoKKwkJa2luZCA9IFNUUlRPR19OYU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFib3J0KCk7CisJfQorCisJcmV0ID0gZ2R0b2EoJmZwaSwgYmUsIHZiaXRzLCAma2luZCwgbW9kZSwgbmRpZ2l0cywgZGVjcHQsIHJ2ZSk7CisJaWYgKCpkZWNwdCA9PSAtMzI3NjgpCisJCSpkZWNwdCA9IElOVF9NQVg7CisJcmV0dXJuIHJldDsKK30KKworI2Vsc2UgICAvKiAoTERCTF9NQU5UX0RJRyA9PSBEQkxfTUFOVF9ESUcpICovCisKK2NoYXIgKgorX19sZHRvYShsb25nIGRvdWJsZSAqbGQsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLAorICAgIGNoYXIgKipydmUpCit7CisJY2hhciAqcmV0OworCisJcmV0ID0gZHRvYSgoZG91YmxlKSpsZCwgbW9kZSwgbmRpZ2l0cywgZGVjcHQsIHNpZ24sIHJ2ZSk7CisJaWYgKCpkZWNwdCA9PSA5OTk5KQorCQkqZGVjcHQgPSBJTlRfTUFYOworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZiAgLyogKExEQkxfTUFOVF9ESUcgPT0gREJMX01BTlRfRElHKSAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL21pc2MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkNzA2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9taXNjLmMKQEAgLTAsMCArMSw5MDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgiCisKKyBzdGF0aWMgQmlnaW50ICpmcmVlbGlzdFtLbWF4KzFdOworI2lmbmRlZiBPbWl0X1ByaXZhdGVfTWVtb3J5CisjaWZuZGVmIFBSSVZBVEVfTUVNCisjZGVmaW5lIFBSSVZBVEVfTUVNIDIzMDQKKyNlbmRpZgorI2RlZmluZSBQUklWQVRFX21lbSAoKFBSSVZBVEVfTUVNK3NpemVvZihkb3VibGUpLTEpL3NpemVvZihkb3VibGUpKQorc3RhdGljIGRvdWJsZSBwcml2YXRlX21lbVtQUklWQVRFX21lbV0sICpwbWVtX25leHQgPSBwcml2YXRlX21lbTsKKyNlbmRpZgorCisgQmlnaW50ICoKK0JhbGxvYworI2lmZGVmIEtSX2hlYWRlcnMKKwkoaykgaW50IGs7CisjZWxzZQorCShpbnQgaykKKyNlbmRpZgoreworCWludCB4OworCUJpZ2ludCAqcnY7CisjaWZuZGVmIE9taXRfUHJpdmF0ZV9NZW1vcnkKKwl1bnNpZ25lZCBpbnQgbGVuOworI2VuZGlmCisKKwlBQ1FVSVJFX0RUT0FfTE9DSygwKTsKKwkvKiBUaGUgayA+IEttYXggY2FzZSBkb2VzIG5vdCBuZWVkIEFDUVVJUkVfRFRPQV9MT0NLKDApLCAqLworCS8qIGJ1dCB0aGlzIGNhc2Ugc2VlbXMgdmVyeSB1bmxpa2VseS4gKi8KKwlpZiAoayA8PSBLbWF4ICYmIChydiA9IGZyZWVsaXN0W2tdKSAhPTApIHsKKwkJZnJlZWxpc3Rba10gPSBydi0+bmV4dDsKKwkJfQorCWVsc2UgeworCQl4ID0gMSA8PCBrOworI2lmZGVmIE9taXRfUHJpdmF0ZV9NZW1vcnkKKwkJcnYgPSAoQmlnaW50ICopTUFMTE9DKHNpemVvZihCaWdpbnQpICsgKHgtMSkqc2l6ZW9mKFVMb25nKSk7CisJCWlmIChydiA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKyNlbHNlCisJCWxlbiA9IChzaXplb2YoQmlnaW50KSArICh4LTEpKnNpemVvZihVTG9uZykgKyBzaXplb2YoZG91YmxlKSAtIDEpCisJCQkvc2l6ZW9mKGRvdWJsZSk7CisJCWlmIChrIDw9IEttYXggJiYgcG1lbV9uZXh0IC0gcHJpdmF0ZV9tZW0gKyBsZW4gPD0gUFJJVkFURV9tZW0pIHsKKwkJCXJ2ID0gKEJpZ2ludCopcG1lbV9uZXh0OworCQkJcG1lbV9uZXh0ICs9IGxlbjsKKwkJCX0KKwkJZWxzZSB7CisJCQlydiA9IChCaWdpbnQqKU1BTExPQyhsZW4qc2l6ZW9mKGRvdWJsZSkpOworCQkJaWYgKHJ2ID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorI2VuZGlmCisJCXJ2LT5rID0gazsKKwkJcnYtPm1heHdkcyA9IHg7CisJCX0KKwlGUkVFX0RUT0FfTE9DSygwKTsKKwlydi0+c2lnbiA9IHJ2LT53ZHMgPSAwOworCXJldHVybiBydjsKKwl9CisKKyB2b2lkCitCZnJlZQorI2lmZGVmIEtSX2hlYWRlcnMKKwkodikgQmlnaW50ICp2OworI2Vsc2UKKwkoQmlnaW50ICp2KQorI2VuZGlmCit7CisJaWYgKHYpIHsKKwkJaWYgKHYtPmsgPiBLbWF4KQorI2lmZGVmIEZSRUUKKwkJCUZSRUUoKHZvaWQqKXYpOworI2Vsc2UKKwkJCWZyZWUoKHZvaWQqKXYpOworI2VuZGlmCisJCWVsc2UgeworCQkJQUNRVUlSRV9EVE9BX0xPQ0soMCk7CisJCQl2LT5uZXh0ID0gZnJlZWxpc3Rbdi0+a107CisJCQlmcmVlbGlzdFt2LT5rXSA9IHY7CisJCQlGUkVFX0RUT0FfTE9DSygwKTsKKwkJCX0KKwkJfQorCX0KKworIGludAorbG8wYml0cworI2lmZGVmIEtSX2hlYWRlcnMKKwkoeSkgVUxvbmcgKnk7CisjZWxzZQorCShVTG9uZyAqeSkKKyNlbmRpZgoreworCWludCBrOworCVVMb25nIHggPSAqeTsKKworCWlmICh4ICYgNykgeworCQlpZiAoeCAmIDEpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHggJiAyKSB7CisJCQkqeSA9IHggPj4gMTsKKwkJCXJldHVybiAxOworCQkJfQorCQkqeSA9IHggPj4gMjsKKwkJcmV0dXJuIDI7CisJCX0KKwlrID0gMDsKKwlpZiAoISh4ICYgMHhmZmZmKSkgeworCQlrID0gMTY7CisJCXggPj49IDE2OworCQl9CisJaWYgKCEoeCAmIDB4ZmYpKSB7CisJCWsgKz0gODsKKwkJeCA+Pj0gODsKKwkJfQorCWlmICghKHggJiAweGYpKSB7CisJCWsgKz0gNDsKKwkJeCA+Pj0gNDsKKwkJfQorCWlmICghKHggJiAweDMpKSB7CisJCWsgKz0gMjsKKwkJeCA+Pj0gMjsKKwkJfQorCWlmICghKHggJiAxKSkgeworCQlrKys7CisJCXggPj49IDE7CisJCWlmICgheCkKKwkJCXJldHVybiAzMjsKKwkJfQorCSp5ID0geDsKKwlyZXR1cm4gazsKKwl9CisKKyBCaWdpbnQgKgorbXVsdGFkZAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYiwgbSwgYSkgQmlnaW50ICpiOyBpbnQgbSwgYTsKKyNlbHNlCisJKEJpZ2ludCAqYiwgaW50IG0sIGludCBhKQkvKiBtdWx0aXBseSBieSBtIGFuZCBhZGQgYSAqLworI2VuZGlmCit7CisJaW50IGksIHdkczsKKyNpZmRlZiBVTExvbmcKKwlVTG9uZyAqeDsKKwlVTExvbmcgY2FycnksIHk7CisjZWxzZQorCVVMb25nIGNhcnJ5LCAqeCwgeTsKKyNpZmRlZiBQYWNrXzMyCisJVUxvbmcgeGksIHo7CisjZW5kaWYKKyNlbmRpZgorCUJpZ2ludCAqYjE7CisKKwl3ZHMgPSBiLT53ZHM7CisJeCA9IGItPng7CisJaSA9IDA7CisJY2FycnkgPSBhOworCWRvIHsKKyNpZmRlZiBVTExvbmcKKwkJeSA9ICp4ICogKFVMTG9uZyltICsgY2Fycnk7CisJCWNhcnJ5ID0geSA+PiAzMjsKKwkJKngrKyA9IHkgJiAweGZmZmZmZmZmVUw7CisjZWxzZQorI2lmZGVmIFBhY2tfMzIKKwkJeGkgPSAqeDsKKwkJeSA9ICh4aSAmIDB4ZmZmZikgKiBtICsgY2Fycnk7CisJCXogPSAoeGkgPj4gMTYpICogbSArICh5ID4+IDE2KTsKKwkJY2FycnkgPSB6ID4+IDE2OworCQkqeCsrID0gKHogPDwgMTYpICsgKHkgJiAweGZmZmYpOworI2Vsc2UKKwkJeSA9ICp4ICogbSArIGNhcnJ5OworCQljYXJyeSA9IHkgPj4gMTY7CisJCSp4KysgPSB5ICYgMHhmZmZmOworI2VuZGlmCisjZW5kaWYKKwkJfQorCQl3aGlsZSgrK2kgPCB3ZHMpOworCWlmIChjYXJyeSkgeworCQlpZiAod2RzID49IGItPm1heHdkcykgeworCQkJYjEgPSBCYWxsb2MoYi0+aysxKTsKKwkJCWlmIChiMSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlCY29weShiMSwgYik7CisJCQlCZnJlZShiKTsKKwkJCWIgPSBiMTsKKwkJCX0KKwkJYi0+eFt3ZHMrK10gPSBjYXJyeTsKKwkJYi0+d2RzID0gd2RzOworCQl9CisJcmV0dXJuIGI7CisJfQorCisgaW50CitoaTBiaXRzX0QyQQorI2lmZGVmIEtSX2hlYWRlcnMKKwkoeCkgVUxvbmcgeDsKKyNlbHNlCisJKFVMb25nIHgpCisjZW5kaWYKK3sKKwlpbnQgayA9IDA7CisKKwlpZiAoISh4ICYgMHhmZmZmMDAwMCkpIHsKKwkJayA9IDE2OworCQl4IDw8PSAxNjsKKwkJfQorCWlmICghKHggJiAweGZmMDAwMDAwKSkgeworCQlrICs9IDg7CisJCXggPDw9IDg7CisJCX0KKwlpZiAoISh4ICYgMHhmMDAwMDAwMCkpIHsKKwkJayArPSA0OworCQl4IDw8PSA0OworCQl9CisJaWYgKCEoeCAmIDB4YzAwMDAwMDApKSB7CisJCWsgKz0gMjsKKwkJeCA8PD0gMjsKKwkJfQorCWlmICghKHggJiAweDgwMDAwMDAwKSkgeworCQlrKys7CisJCWlmICghKHggJiAweDQwMDAwMDAwKSkKKwkJCXJldHVybiAzMjsKKwkJfQorCXJldHVybiBrOworCX0KKworIEJpZ2ludCAqCitpMmIKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGkpIGludCBpOworI2Vsc2UKKwkoaW50IGkpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmI7CisKKwliID0gQmFsbG9jKDEpOworCWlmIChiID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJYi0+eFswXSA9IGk7CisJYi0+d2RzID0gMTsKKwlyZXR1cm4gYjsKKwl9CisKKyBCaWdpbnQgKgorbXVsdAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYSwgYikgQmlnaW50ICphLCAqYjsKKyNlbHNlCisJKEJpZ2ludCAqYSwgQmlnaW50ICpiKQorI2VuZGlmCit7CisJQmlnaW50ICpjOworCWludCBrLCB3YSwgd2IsIHdjOworCVVMb25nICp4LCAqeGEsICp4YWUsICp4YiwgKnhiZSwgKnhjLCAqeGMwOworCVVMb25nIHk7CisjaWZkZWYgVUxMb25nCisJVUxMb25nIGNhcnJ5LCB6OworI2Vsc2UKKwlVTG9uZyBjYXJyeSwgejsKKyNpZmRlZiBQYWNrXzMyCisJVUxvbmcgejI7CisjZW5kaWYKKyNlbmRpZgorCisJaWYgKGEtPndkcyA8IGItPndkcykgeworCQljID0gYTsKKwkJYSA9IGI7CisJCWIgPSBjOworCQl9CisJayA9IGEtPms7CisJd2EgPSBhLT53ZHM7CisJd2IgPSBiLT53ZHM7CisJd2MgPSB3YSArIHdiOworCWlmICh3YyA+IGEtPm1heHdkcykKKwkJaysrOworCWMgPSBCYWxsb2Moayk7CisJaWYgKGMgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlmb3IoeCA9IGMtPngsIHhhID0geCArIHdjOyB4IDwgeGE7IHgrKykKKwkJKnggPSAwOworCXhhID0gYS0+eDsKKwl4YWUgPSB4YSArIHdhOworCXhiID0gYi0+eDsKKwl4YmUgPSB4YiArIHdiOworCXhjMCA9IGMtPng7CisjaWZkZWYgVUxMb25nCisJZm9yKDsgeGIgPCB4YmU7IHhjMCsrKSB7CisJCWlmICggKHkgPSAqeGIrKykgIT0wKSB7CisJCQl4ID0geGE7CisJCQl4YyA9IHhjMDsKKwkJCWNhcnJ5ID0gMDsKKwkJCWRvIHsKKwkJCQl6ID0gKngrKyAqIChVTExvbmcpeSArICp4YyArIGNhcnJ5OworCQkJCWNhcnJ5ID0geiA+PiAzMjsKKwkJCQkqeGMrKyA9IHogJiAweGZmZmZmZmZmVUw7CisJCQkJfQorCQkJCXdoaWxlKHggPCB4YWUpOworCQkJKnhjID0gY2Fycnk7CisJCQl9CisJCX0KKyNlbHNlCisjaWZkZWYgUGFja18zMgorCWZvcig7IHhiIDwgeGJlOyB4YisrLCB4YzArKykgeworCQlpZiAoICh5ID0gKnhiICYgMHhmZmZmKSAhPTApIHsKKwkJCXggPSB4YTsKKwkJCXhjID0geGMwOworCQkJY2FycnkgPSAwOworCQkJZG8geworCQkJCXogPSAoKnggJiAweGZmZmYpICogeSArICgqeGMgJiAweGZmZmYpICsgY2Fycnk7CisJCQkJY2FycnkgPSB6ID4+IDE2OworCQkJCXoyID0gKCp4KysgPj4gMTYpICogeSArICgqeGMgPj4gMTYpICsgY2Fycnk7CisJCQkJY2FycnkgPSB6MiA+PiAxNjsKKwkJCQlTdG9yZWluYyh4YywgejIsIHopOworCQkJCX0KKwkJCQl3aGlsZSh4IDwgeGFlKTsKKwkJCSp4YyA9IGNhcnJ5OworCQkJfQorCQlpZiAoICh5ID0gKnhiID4+IDE2KSAhPTApIHsKKwkJCXggPSB4YTsKKwkJCXhjID0geGMwOworCQkJY2FycnkgPSAwOworCQkJejIgPSAqeGM7CisJCQlkbyB7CisJCQkJeiA9ICgqeCAmIDB4ZmZmZikgKiB5ICsgKCp4YyA+PiAxNikgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHogPj4gMTY7CisJCQkJU3RvcmVpbmMoeGMsIHosIHoyKTsKKwkJCQl6MiA9ICgqeCsrID4+IDE2KSAqIHkgKyAoKnhjICYgMHhmZmZmKSArIGNhcnJ5OworCQkJCWNhcnJ5ID0gejIgPj4gMTY7CisJCQkJfQorCQkJCXdoaWxlKHggPCB4YWUpOworCQkJKnhjID0gejI7CisJCQl9CisJCX0KKyNlbHNlCisJZm9yKDsgeGIgPCB4YmU7IHhjMCsrKSB7CisJCWlmICggKHkgPSAqeGIrKykgIT0wKSB7CisJCQl4ID0geGE7CisJCQl4YyA9IHhjMDsKKwkJCWNhcnJ5ID0gMDsKKwkJCWRvIHsKKwkJCQl6ID0gKngrKyAqIHkgKyAqeGMgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHogPj4gMTY7CisJCQkJKnhjKysgPSB6ICYgMHhmZmZmOworCQkJCX0KKwkJCQl3aGlsZSh4IDwgeGFlKTsKKwkJCSp4YyA9IGNhcnJ5OworCQkJfQorCQl9CisjZW5kaWYKKyNlbmRpZgorCWZvcih4YzAgPSBjLT54LCB4YyA9IHhjMCArIHdjOyB3YyA+IDAgJiYgISotLXhjOyAtLXdjKSA7CisJYy0+d2RzID0gd2M7CisJcmV0dXJuIGM7CisJfQorCisgc3RhdGljIEJpZ2ludCAqcDVzOworCisgQmlnaW50ICoKK3BvdzVtdWx0CisjaWZkZWYgS1JfaGVhZGVycworCShiLCBrKSBCaWdpbnQgKmI7IGludCBrOworI2Vsc2UKKwkoQmlnaW50ICpiLCBpbnQgaykKKyNlbmRpZgoreworCUJpZ2ludCAqYjEsICpwNSwgKnA1MTsKKwlpbnQgaTsKKwlzdGF0aWMgaW50IHAwNVszXSA9IHsgNSwgMjUsIDEyNSB9OworCisJaWYgKCAoaSA9IGsgJiAzKSAhPTApIHsKKwkJYiA9IG11bHRhZGQoYiwgcDA1W2ktMV0sIDApOworCQlpZiAoYiA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCisJaWYgKCEoayA+Pj0gMikpCisJCXJldHVybiBiOworCWlmICgocDUgPSBwNXMpID09IDApIHsKKwkJLyogZmlyc3QgdGltZSAqLworI2lmZGVmIE1VTFRJUExFX1RIUkVBRFMKKwkJQUNRVUlSRV9EVE9BX0xPQ0soMSk7CisJCWlmICghKHA1ID0gcDVzKSkgeworCQkJcDUgPSBwNXMgPSBpMmIoNjI1KTsKKwkJCWlmIChwNSA9PSBOVUxMKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlwNS0+bmV4dCA9IDA7CisJCQl9CisJCUZSRUVfRFRPQV9MT0NLKDEpOworI2Vsc2UKKwkJcDUgPSBwNXMgPSBpMmIoNjI1KTsKKwkJaWYgKHA1ID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQlwNS0+bmV4dCA9IDA7CisjZW5kaWYKKwkJfQorCWZvcig7OykgeworCQlpZiAoayAmIDEpIHsKKwkJCWIxID0gbXVsdChiLCBwNSk7CisJCQlpZiAoYjEgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJQmZyZWUoYik7CisJCQliID0gYjE7CisJCQl9CisJCWlmICghKGsgPj49IDEpKQorCQkJYnJlYWs7CisJCWlmICgocDUxID0gcDUtPm5leHQpID09IDApIHsKKyNpZmRlZiBNVUxUSVBMRV9USFJFQURTCisJCQlBQ1FVSVJFX0RUT0FfTE9DSygxKTsKKwkJCWlmICghKHA1MSA9IHA1LT5uZXh0KSkgeworCQkJCXA1MSA9IHA1LT5uZXh0ID0gbXVsdChwNSxwNSk7CisJCQkJaWYgKHA1MSA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCXA1MS0+bmV4dCA9IDA7CisJCQkJfQorCQkJRlJFRV9EVE9BX0xPQ0soMSk7CisjZWxzZQorCQkJcDUxID0gcDUtPm5leHQgPSBtdWx0KHA1LHA1KTsKKwkJCWlmIChwNTEgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJcDUxLT5uZXh0ID0gMDsKKyNlbmRpZgorCQkJfQorCQlwNSA9IHA1MTsKKwkJfQorCXJldHVybiBiOworCX0KKworIEJpZ2ludCAqCitsc2hpZnQKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7CisjZWxzZQorCShCaWdpbnQgKmIsIGludCBrKQorI2VuZGlmCit7CisJaW50IGksIGsxLCBuLCBuMTsKKwlCaWdpbnQgKmIxOworCVVMb25nICp4LCAqeDEsICp4ZSwgejsKKworCW4gPSBrID4+IGtzaGlmdDsKKwlrMSA9IGItPms7CisJbjEgPSBuICsgYi0+d2RzICsgMTsKKwlmb3IoaSA9IGItPm1heHdkczsgbjEgPiBpOyBpIDw8PSAxKQorCQlrMSsrOworCWIxID0gQmFsbG9jKGsxKTsKKwlpZiAoYjEgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwl4MSA9IGIxLT54OworCWZvcihpID0gMDsgaSA8IG47IGkrKykKKwkJKngxKysgPSAwOworCXggPSBiLT54OworCXhlID0geCArIGItPndkczsKKwlpZiAoayAmPSBrbWFzaykgeworI2lmZGVmIFBhY2tfMzIKKwkJazEgPSAzMiAtIGs7CisJCXogPSAwOworCQlkbyB7CisJCQkqeDErKyA9ICp4IDw8IGsgfCB6OworCQkJeiA9ICp4KysgPj4gazE7CisJCQl9CisJCQl3aGlsZSh4IDwgeGUpOworCQlpZiAoKCp4MSA9IHopICE9MCkKKwkJCSsrbjE7CisjZWxzZQorCQlrMSA9IDE2IC0gazsKKwkJeiA9IDA7CisJCWRvIHsKKwkJCSp4MSsrID0gKnggPDwgayAgJiAweGZmZmYgfCB6OworCQkJeiA9ICp4KysgPj4gazE7CisJCQl9CisJCQl3aGlsZSh4IDwgeGUpOworCQlpZiAoKngxID0geikKKwkJCSsrbjE7CisjZW5kaWYKKwkJfQorCWVsc2UgZG8KKwkJKngxKysgPSAqeCsrOworCQl3aGlsZSh4IDwgeGUpOworCWIxLT53ZHMgPSBuMSAtIDE7CisJQmZyZWUoYik7CisJcmV0dXJuIGIxOworCX0KKworIGludAorY21wCisjaWZkZWYgS1JfaGVhZGVycworCShhLCBiKSBCaWdpbnQgKmEsICpiOworI2Vsc2UKKwkoQmlnaW50ICphLCBCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlVTG9uZyAqeGEsICp4YTAsICp4YiwgKnhiMDsKKwlpbnQgaSwgajsKKworCWkgPSBhLT53ZHM7CisJaiA9IGItPndkczsKKyNpZmRlZiBERUJVRworCWlmIChpID4gMSAmJiAhYS0+eFtpLTFdKQorCQlCdWcoImNtcCBjYWxsZWQgd2l0aCBhLT54W2EtPndkcy0xXSA9PSAwIik7CisJaWYgKGogPiAxICYmICFiLT54W2otMV0pCisJCUJ1ZygiY21wIGNhbGxlZCB3aXRoIGItPnhbYi0+d2RzLTFdID09IDAiKTsKKyNlbmRpZgorCWlmIChpIC09IGopCisJCXJldHVybiBpOworCXhhMCA9IGEtPng7CisJeGEgPSB4YTAgKyBqOworCXhiMCA9IGItPng7CisJeGIgPSB4YjAgKyBqOworCWZvcig7OykgeworCQlpZiAoKi0teGEgIT0gKi0teGIpCisJCQlyZXR1cm4gKnhhIDwgKnhiID8gLTEgOiAxOworCQlpZiAoeGEgPD0geGEwKQorCQkJYnJlYWs7CisJCX0KKwlyZXR1cm4gMDsKKwl9CisKKyBCaWdpbnQgKgorZGlmZgorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYSwgYikgQmlnaW50ICphLCAqYjsKKyNlbHNlCisJKEJpZ2ludCAqYSwgQmlnaW50ICpiKQorI2VuZGlmCit7CisJQmlnaW50ICpjOworCWludCBpLCB3YSwgd2I7CisJVUxvbmcgKnhhLCAqeGFlLCAqeGIsICp4YmUsICp4YzsKKyNpZmRlZiBVTExvbmcKKwlVTExvbmcgYm9ycm93LCB5OworI2Vsc2UKKwlVTG9uZyBib3Jyb3csIHk7CisjaWZkZWYgUGFja18zMgorCVVMb25nIHo7CisjZW5kaWYKKyNlbmRpZgorCisJaSA9IGNtcChhLGIpOworCWlmICghaSkgeworCQljID0gQmFsbG9jKDApOworCQlpZiAoYyA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJYy0+d2RzID0gMTsKKwkJYy0+eFswXSA9IDA7CisJCXJldHVybiBjOworCQl9CisJaWYgKGkgPCAwKSB7CisJCWMgPSBhOworCQlhID0gYjsKKwkJYiA9IGM7CisJCWkgPSAxOworCQl9CisJZWxzZQorCQlpID0gMDsKKwljID0gQmFsbG9jKGEtPmspOworCWlmIChjID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJYy0+c2lnbiA9IGk7CisJd2EgPSBhLT53ZHM7CisJeGEgPSBhLT54OworCXhhZSA9IHhhICsgd2E7CisJd2IgPSBiLT53ZHM7CisJeGIgPSBiLT54OworCXhiZSA9IHhiICsgd2I7CisJeGMgPSBjLT54OworCWJvcnJvdyA9IDA7CisjaWZkZWYgVUxMb25nCisJZG8geworCQl5ID0gKFVMTG9uZykqeGErKyAtICp4YisrIC0gYm9ycm93OworCQlib3Jyb3cgPSB5ID4+IDMyICYgMVVMOworCQkqeGMrKyA9IHkgJiAweGZmZmZmZmZmVUw7CisJCX0KKwkJd2hpbGUoeGIgPCB4YmUpOworCXdoaWxlKHhhIDwgeGFlKSB7CisJCXkgPSAqeGErKyAtIGJvcnJvdzsKKwkJYm9ycm93ID0geSA+PiAzMiAmIDFVTDsKKwkJKnhjKysgPSB5ICYgMHhmZmZmZmZmZlVMOworCQl9CisjZWxzZQorI2lmZGVmIFBhY2tfMzIKKwlkbyB7CisJCXkgPSAoKnhhICYgMHhmZmZmKSAtICgqeGIgJiAweGZmZmYpIC0gYm9ycm93OworCQlib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQl6ID0gKCp4YSsrID4+IDE2KSAtICgqeGIrKyA+PiAxNikgLSBib3Jyb3c7CisJCWJvcnJvdyA9ICh6ICYgMHgxMDAwMCkgPj4gMTY7CisJCVN0b3JlaW5jKHhjLCB6LCB5KTsKKwkJfQorCQl3aGlsZSh4YiA8IHhiZSk7CisJd2hpbGUoeGEgPCB4YWUpIHsKKwkJeSA9ICgqeGEgJiAweGZmZmYpIC0gYm9ycm93OworCQlib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQl6ID0gKCp4YSsrID4+IDE2KSAtIGJvcnJvdzsKKwkJYm9ycm93ID0gKHogJiAweDEwMDAwKSA+PiAxNjsKKwkJU3RvcmVpbmMoeGMsIHosIHkpOworCQl9CisjZWxzZQorCWRvIHsKKwkJeSA9ICp4YSsrIC0gKnhiKysgLSBib3Jyb3c7CisJCWJvcnJvdyA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCSp4YysrID0geSAmIDB4ZmZmZjsKKwkJfQorCQl3aGlsZSh4YiA8IHhiZSk7CisJd2hpbGUoeGEgPCB4YWUpIHsKKwkJeSA9ICp4YSsrIC0gYm9ycm93OworCQlib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQkqeGMrKyA9IHkgJiAweGZmZmY7CisJCX0KKyNlbmRpZgorI2VuZGlmCisJd2hpbGUoISotLXhjKQorCQl3YS0tOworCWMtPndkcyA9IHdhOworCXJldHVybiBjOworCX0KKworIGRvdWJsZQorYjJkCisjaWZkZWYgS1JfaGVhZGVycworCShhLCBlKSBCaWdpbnQgKmE7IGludCAqZTsKKyNlbHNlCisJKEJpZ2ludCAqYSwgaW50ICplKQorI2VuZGlmCit7CisJVUxvbmcgKnhhLCAqeGEwLCB3LCB5LCB6OworCWludCBrOworCVUgZDsKKyNpZmRlZiBWQVgKKwlVTG9uZyBkMCwgZDE7CisjZWxzZQorI2RlZmluZSBkMCB3b3JkMCgmZCkKKyNkZWZpbmUgZDEgd29yZDEoJmQpCisjZW5kaWYKKworCXhhMCA9IGEtPng7CisJeGEgPSB4YTAgKyBhLT53ZHM7CisJeSA9ICotLXhhOworI2lmZGVmIERFQlVHCisJaWYgKCF5KSBCdWcoInplcm8geSBpbiBiMmQiKTsKKyNlbmRpZgorCWsgPSBoaTBiaXRzKHkpOworCSplID0gMzIgLSBrOworI2lmZGVmIFBhY2tfMzIKKwlpZiAoayA8IEViaXRzKSB7CisJCWQwID0gRXhwXzEgfCB5ID4+IChFYml0cyAtIGspOworCQl3ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJCWQxID0geSA8PCAoKDMyLUViaXRzKSArIGspIHwgdyA+PiAoRWJpdHMgLSBrKTsKKwkJZ290byByZXRfZDsKKwkJfQorCXogPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwlpZiAoayAtPSBFYml0cykgeworCQlkMCA9IEV4cF8xIHwgeSA8PCBrIHwgeiA+PiAoMzIgLSBrKTsKKwkJeSA9IHhhID4geGEwID8gKi0teGEgOiAwOworCQlkMSA9IHogPDwgayB8IHkgPj4gKDMyIC0gayk7CisJCX0KKwllbHNlIHsKKwkJZDAgPSBFeHBfMSB8IHk7CisJCWQxID0gejsKKwkJfQorI2Vsc2UKKwlpZiAoayA8IEViaXRzICsgMTYpIHsKKwkJeiA9IHhhID4geGEwID8gKi0teGEgOiAwOworCQlkMCA9IEV4cF8xIHwgeSA8PCBrIC0gRWJpdHMgfCB6ID4+IEViaXRzICsgMTYgLSBrOworCQl3ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJCXkgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwkJZDEgPSB6IDw8IGsgKyAxNiAtIEViaXRzIHwgdyA8PCBrIC0gRWJpdHMgfCB5ID4+IDE2ICsgRWJpdHMgLSBrOworCQlnb3RvIHJldF9kOworCQl9CisJeiA9IHhhID4geGEwID8gKi0teGEgOiAwOworCXcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwlrIC09IEViaXRzICsgMTY7CisJZDAgPSBFeHBfMSB8IHkgPDwgayArIDE2IHwgeiA8PCBrIHwgdyA+PiAxNiAtIGs7CisJeSA9IHhhID4geGEwID8gKi0teGEgOiAwOworCWQxID0gdyA8PCBrICsgMTYgfCB5IDw8IGs7CisjZW5kaWYKKyByZXRfZDoKKyNpZmRlZiBWQVgKKwl3b3JkMCgmZCkgPSBkMCA+PiAxNiB8IGQwIDw8IDE2OworCXdvcmQxKCZkKSA9IGQxID4+IDE2IHwgZDEgPDwgMTY7CisjZW5kaWYKKwlyZXR1cm4gZHZhbCgmZCk7CisJfQorI3VuZGVmIGQwCisjdW5kZWYgZDEKKworIEJpZ2ludCAqCitkMmIKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGRkLCBlLCBiaXRzKSBkb3VibGUgZGQ7IGludCAqZSwgKmJpdHM7CisjZWxzZQorCShkb3VibGUgZGQsIGludCAqZSwgaW50ICpiaXRzKQorI2VuZGlmCit7CisJQmlnaW50ICpiOworCVUgZDsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCWludCBpOworI2VuZGlmCisJaW50IGRlLCBrOworCVVMb25nICp4LCB5LCB6OworI2lmZGVmIFZBWAorCVVMb25nIGQwLCBkMTsKKyNlbHNlCisjZGVmaW5lIGQwIHdvcmQwKCZkKQorI2RlZmluZSBkMSB3b3JkMSgmZCkKKyNlbmRpZgorCWQuZCA9IGRkOworI2lmZGVmIFZBWAorCWQwID0gd29yZDAoJmQpID4+IDE2IHwgd29yZDAoJmQpIDw8IDE2OworCWQxID0gd29yZDEoJmQpID4+IDE2IHwgd29yZDEoJmQpIDw8IDE2OworI2VuZGlmCisKKyNpZmRlZiBQYWNrXzMyCisJYiA9IEJhbGxvYygxKTsKKyNlbHNlCisJYiA9IEJhbGxvYygyKTsKKyNlbmRpZgorCWlmIChiID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJeCA9IGItPng7CisKKwl6ID0gZDAgJiBGcmFjX21hc2s7CisJZDAgJj0gMHg3ZmZmZmZmZjsJLyogY2xlYXIgc2lnbiBiaXQsIHdoaWNoIHdlIGlnbm9yZSAqLworI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwlkZSA9IChpbnQpKGQwID4+IEV4cF9zaGlmdCk7CisjaWZuZGVmIElCTQorCXogfD0gRXhwX21zazExOworI2VuZGlmCisjZWxzZQorCWlmICggKGRlID0gKGludCkoZDAgPj4gRXhwX3NoaWZ0KSkgIT0wKQorCQl6IHw9IEV4cF9tc2sxOworI2VuZGlmCisjaWZkZWYgUGFja18zMgorCWlmICggKHkgPSBkMSkgIT0wKSB7CisJCWlmICggKGsgPSBsbzBiaXRzKCZ5KSkgIT0wKSB7CisJCQl4WzBdID0geSB8IHogPDwgKDMyIC0gayk7CisJCQl6ID4+PSBrOworCQkJfQorCQllbHNlCisJCQl4WzBdID0geTsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQlpID0KKyNlbmRpZgorCQkgICAgIGItPndkcyA9ICh4WzFdID0geikgIT0wID8gMiA6IDE7CisJCX0KKwllbHNlIHsKKwkJayA9IGxvMGJpdHMoJnopOworCQl4WzBdID0gejsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQlpID0KKyNlbmRpZgorCQkgICAgYi0+d2RzID0gMTsKKwkJayArPSAzMjsKKwkJfQorI2Vsc2UKKwlpZiAoICh5ID0gZDEpICE9MCkgeworCQlpZiAoIChrID0gbG8wYml0cygmeSkpICE9MCkKKwkJCWlmIChrID49IDE2KSB7CisJCQkJeFswXSA9IHkgfCB6IDw8IDMyIC0gayAmIDB4ZmZmZjsKKwkJCQl4WzFdID0geiA+PiBrIC0gMTYgJiAweGZmZmY7CisJCQkJeFsyXSA9IHogPj4gazsKKwkJCQlpID0gMjsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQl4WzBdID0geSAmIDB4ZmZmZjsKKwkJCQl4WzFdID0geSA+PiAxNiB8IHogPDwgMTYgLSBrICYgMHhmZmZmOworCQkJCXhbMl0gPSB6ID4+IGsgJiAweGZmZmY7CisJCQkJeFszXSA9IHogPj4gaysxNjsKKwkJCQlpID0gMzsKKwkJCQl9CisJCWVsc2UgeworCQkJeFswXSA9IHkgJiAweGZmZmY7CisJCQl4WzFdID0geSA+PiAxNjsKKwkJCXhbMl0gPSB6ICYgMHhmZmZmOworCQkJeFszXSA9IHogPj4gMTY7CisJCQlpID0gMzsKKwkJCX0KKwkJfQorCWVsc2UgeworI2lmZGVmIERFQlVHCisJCWlmICgheikKKwkJCUJ1ZygiWmVybyBwYXNzZWQgdG8gZDJiIik7CisjZW5kaWYKKwkJayA9IGxvMGJpdHMoJnopOworCQlpZiAoayA+PSAxNikgeworCQkJeFswXSA9IHo7CisJCQlpID0gMDsKKwkJCX0KKwkJZWxzZSB7CisJCQl4WzBdID0geiAmIDB4ZmZmZjsKKwkJCXhbMV0gPSB6ID4+IDE2OworCQkJaSA9IDE7CisJCQl9CisJCWsgKz0gMzI7CisJCX0KKwl3aGlsZSgheFtpXSkKKwkJLS1pOworCWItPndkcyA9IGkgKyAxOworI2VuZGlmCisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwlpZiAoZGUpIHsKKyNlbmRpZgorI2lmZGVmIElCTQorCQkqZSA9IChkZSAtIEJpYXMgLSAoUC0xKSA8PCAyKSArIGs7CisJCSpiaXRzID0gNCpQICsgOCAtIGsgLSBoaTBiaXRzKHdvcmQwKCZkKSAmIEZyYWNfbWFzayk7CisjZWxzZQorCQkqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgazsKKwkJKmJpdHMgPSBQIC0gazsKKyNlbmRpZgorI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCX0KKwllbHNlIHsKKwkJKmUgPSBkZSAtIEJpYXMgLSAoUC0xKSArIDEgKyBrOworI2lmZGVmIFBhY2tfMzIKKwkJKmJpdHMgPSAzMippIC0gaGkwYml0cyh4W2ktMV0pOworI2Vsc2UKKwkJKmJpdHMgPSAoaSsyKSoxNiAtIGhpMGJpdHMoeFtpXSk7CisjZW5kaWYKKwkJfQorI2VuZGlmCisJcmV0dXJuIGI7CisJfQorI3VuZGVmIGQwCisjdW5kZWYgZDEKKworIENPTlNUIGRvdWJsZQorI2lmZGVmIElFRUVfQXJpdGgKK2JpZ3RlbnNbXSA9IHsgMWUxNiwgMWUzMiwgMWU2NCwgMWUxMjgsIDFlMjU2IH07CitDT05TVCBkb3VibGUgdGlueXRlbnNbXSA9IHsgMWUtMTYsIDFlLTMyLCAxZS02NCwgMWUtMTI4LCAxZS0yNTYKKwkJfTsKKyNlbHNlCisjaWZkZWYgSUJNCitiaWd0ZW5zW10gPSB7IDFlMTYsIDFlMzIsIDFlNjQgfTsKK0NPTlNUIGRvdWJsZSB0aW55dGVuc1tdID0geyAxZS0xNiwgMWUtMzIsIDFlLTY0IH07CisjZWxzZQorYmlndGVuc1tdID0geyAxZTE2LCAxZTMyIH07CitDT05TVCBkb3VibGUgdGlueXRlbnNbXSA9IHsgMWUtMTYsIDFlLTMyIH07CisjZW5kaWYKKyNlbmRpZgorCisgQ09OU1QgZG91YmxlCit0ZW5zW10gPSB7CisJCTFlMCwgMWUxLCAxZTIsIDFlMywgMWU0LCAxZTUsIDFlNiwgMWU3LCAxZTgsIDFlOSwKKwkJMWUxMCwgMWUxMSwgMWUxMiwgMWUxMywgMWUxNCwgMWUxNSwgMWUxNiwgMWUxNywgMWUxOCwgMWUxOSwKKwkJMWUyMCwgMWUyMSwgMWUyMgorI2lmZGVmIFZBWAorCQksIDFlMjMsIDFlMjQKKyNlbmRpZgorCQl9OworCisgY2hhciAqCisjaWZkZWYgS1JfaGVhZGVycworc3RyY3BfRDJBKGEsIGIpIGNoYXIgKmE7IGNoYXIgKmI7CisjZWxzZQorc3RyY3BfRDJBKGNoYXIgKmEsIENPTlNUIGNoYXIgKmIpCisjZW5kaWYKK3sKKwl3aGlsZSgoKmEgPSAqYisrKSkKKwkJYSsrOworCXJldHVybiBhOworCX0KKworI2lmZGVmIE5PX1NUUklOR19ICisKKyBDaGFyICoKKyNpZmRlZiBLUl9oZWFkZXJzCittZW1jcHlfRDJBKGEsIGIsIGxlbikgQ2hhciAqYTsgQ2hhciAqYjsgc2l6ZV90IGxlbjsKKyNlbHNlCittZW1jcHlfRDJBKHZvaWQgKmExLCB2b2lkICpiMSwgc2l6ZV90IGxlbikKKyNlbmRpZgoreworCWNoYXIgKmEgPSAoY2hhciopYTEsICphZSA9IGEgKyBsZW47CisJY2hhciAqYiA9IChjaGFyKiliMSwgKmEwID0gYTsKKwl3aGlsZShhIDwgYWUpCisJCSphKysgPSAqYisrOworCXJldHVybiBhMDsKKwl9CisKKyNlbmRpZiAvKiBOT19TVFJJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3NtaXNjLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDYzYTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3NtaXNjLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgiCisKKyBCaWdpbnQgKgorczJiCisjaWZkZWYgS1JfaGVhZGVycworCShzLCBuZDAsIG5kLCB5OSwgZHBsZW4pIENPTlNUIGNoYXIgKnM7IGludCBkcGxlbiwgbmQwLCBuZDsgVUxvbmcgeTk7CisjZWxzZQorCShDT05TVCBjaGFyICpzLCBpbnQgbmQwLCBpbnQgbmQsIFVMb25nIHk5LCBpbnQgZHBsZW4pCisjZW5kaWYKK3sKKwlCaWdpbnQgKmI7CisJaW50IGksIGs7CisJTG9uZyB4LCB5OworCisJeCA9IChuZCArIDgpIC8gOTsKKwlmb3IoayA9IDAsIHkgPSAxOyB4ID4geTsgeSA8PD0gMSwgaysrKSA7CisjaWZkZWYgUGFja18zMgorCWIgPSBCYWxsb2Moayk7CisJaWYgKGIgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwliLT54WzBdID0geTk7CisJYi0+d2RzID0gMTsKKyNlbHNlCisJYiA9IEJhbGxvYyhrKzEpOworCWlmIChiID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJYi0+eFswXSA9IHk5ICYgMHhmZmZmOworCWItPndkcyA9IChiLT54WzFdID0geTkgPj4gMTYpID8gMiA6IDE7CisjZW5kaWYKKworCWkgPSA5OworCWlmICg5IDwgbmQwKSB7CisJCXMgKz0gOTsKKwkJZG8geworCQkJYiA9IG11bHRhZGQoYiwgMTAsICpzKysgLSAnMCcpOworCQkJaWYgKGIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfSB3aGlsZSgrK2kgPCBuZDApOworCQlzICs9IGRwbGVuOworCQl9CisJZWxzZQorCQlzICs9IGRwbGVuICsgOTsKKwlmb3IoOyBpIDwgbmQ7IGkrKykgeworCQliID0gbXVsdGFkZChiLCAxMCwgKnMrKyAtICcwJyk7CisJCWlmIChiID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJcmV0dXJuIGI7CisJfQorCisgZG91YmxlCityYXRpbworI2lmZGVmIEtSX2hlYWRlcnMKKwkoYSwgYikgQmlnaW50ICphLCAqYjsKKyNlbHNlCisJKEJpZ2ludCAqYSwgQmlnaW50ICpiKQorI2VuZGlmCit7CisJVSBkYSwgZGI7CisJaW50IGssIGthLCBrYjsKKworCWR2YWwoJmRhKSA9IGIyZChhLCAma2EpOworCWR2YWwoJmRiKSA9IGIyZChiLCAma2IpOworCWsgPSBrYSAtIGtiICsgVUxiaXRzKihhLT53ZHMgLSBiLT53ZHMpOworI2lmZGVmIElCTQorCWlmIChrID4gMCkgeworCQl3b3JkMCgmZGEpICs9IChrID4+IDIpKkV4cF9tc2sxOworCQlpZiAoayAmPSAzKQorCQkJZHZhbCgmZGEpICo9IDEgPDwgazsKKwkJfQorCWVsc2UgeworCQlrID0gLWs7CisJCXdvcmQwKCZkYikgKz0gKGsgPj4gMikqRXhwX21zazE7CisJCWlmIChrICY9IDMpCisJCQlkdmFsKCZkYikgKj0gMSA8PCBrOworCQl9CisjZWxzZQorCWlmIChrID4gMCkKKwkJd29yZDAoJmRhKSArPSBrKkV4cF9tc2sxOworCWVsc2UgeworCQlrID0gLWs7CisJCXdvcmQwKCZkYikgKz0gaypFeHBfbXNrMTsKKwkJfQorI2VuZGlmCisJcmV0dXJuIGR2YWwoJmRhKSAvIGR2YWwoJmRiKTsKKwl9CisKKyNpZmRlZiBJTkZOQU5fQ0hFQ0sKKworIGludAorbWF0Y2gKKyNpZmRlZiBLUl9oZWFkZXJzCisJKHNwLCB0KSBjaGFyICoqc3AsICp0OworI2Vsc2UKKwkoQ09OU1QgY2hhciAqKnNwLCBjaGFyICp0KQorI2VuZGlmCit7CisJaW50IGMsIGQ7CisJQ09OU1QgY2hhciAqcyA9ICpzcDsKKworCXdoaWxlKCAoZCA9ICp0KyspICE9MCkgeworCQlpZiAoKGMgPSAqKytzKSA+PSAnQScgJiYgYyA8PSAnWicpCisJCQljICs9ICdhJyAtICdBJzsKKwkJaWYgKGMgIT0gZCkKKwkJCXJldHVybiAwOworCQl9CisJKnNwID0gcyArIDE7CisJcmV0dXJuIDE7CisJfQorI2VuZGlmIC8qIElORk5BTl9DSEVDSyAqLworCisgdm9pZAorI2lmZGVmIEtSX2hlYWRlcnMKK2NvcHliaXRzKGMsIG4sIGIpIFVMb25nICpjOyBpbnQgbjsgQmlnaW50ICpiOworI2Vsc2UKK2NvcHliaXRzKFVMb25nICpjLCBpbnQgbiwgQmlnaW50ICpiKQorI2VuZGlmCit7CisJVUxvbmcgKmNlLCAqeCwgKnhlOworI2lmZGVmIFBhY2tfMTYKKwlpbnQgbncsIG53MTsKKyNlbmRpZgorCisJY2UgPSBjICsgKChuLTEpID4+IGtzaGlmdCkgKyAxOworCXggPSBiLT54OworI2lmZGVmIFBhY2tfMzIKKwl4ZSA9IHggKyBiLT53ZHM7CisJd2hpbGUoeCA8IHhlKQorCQkqYysrID0gKngrKzsKKyNlbHNlCisJbncgPSBiLT53ZHM7CisJbncxID0gbncgJiAxOworCWZvcih4ZSA9IHggKyAobncgLSBudzEpOyB4IDwgeGU7IHggKz0gMikKKwkJU3RvcmVpbmMoYywgeFsxXSwgeFswXSk7CisJaWYgKG53MSkKKwkJKmMrKyA9ICp4OworI2VuZGlmCisJd2hpbGUoYyA8IGNlKQorCQkqYysrID0gMDsKKwl9CisKKyBVTG9uZworI2lmZGVmIEtSX2hlYWRlcnMKK2FueV9vbihiLCBrKSBCaWdpbnQgKmI7IGludCBrOworI2Vsc2UKK2FueV9vbihCaWdpbnQgKmIsIGludCBrKQorI2VuZGlmCit7CisJaW50IG4sIG53ZHM7CisJVUxvbmcgKngsICp4MCwgeDEsIHgyOworCisJeCA9IGItPng7CisJbndkcyA9IGItPndkczsKKwluID0gayA+PiBrc2hpZnQ7CisJaWYgKG4gPiBud2RzKQorCQluID0gbndkczsKKwllbHNlIGlmIChuIDwgbndkcyAmJiAoayAmPSBrbWFzaykpIHsKKwkJeDEgPSB4MiA9IHhbbl07CisJCXgxID4+PSBrOworCQl4MSA8PD0gazsKKwkJaWYgKHgxICE9IHgyKQorCQkJcmV0dXJuIDE7CisJCX0KKwl4MCA9IHg7CisJeCArPSBuOworCXdoaWxlKHggPiB4MCkKKwkJaWYgKCotLXgpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKKwl9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9kLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkNDdkOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdHJ0b2QuYwpAQCAtMCwwICsxLDExMDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OC0yMDAxIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKyNpZm5kZWYgTk9fRkVOVl9ICisjaW5jbHVkZSA8ZmVudi5oPgorI2VuZGlmCisKKyNpZmRlZiBVU0VfTE9DQUxFCisjaW5jbHVkZSAibG9jYWxlLmgiCisjZW5kaWYKKworI2lmZGVmIElFRUVfQXJpdGgKKyNpZm5kZWYgTk9fSUVFRV9TY2FsZQorI2RlZmluZSBBdm9pZF9VbmRlcmZsb3cKKyN1bmRlZiB0aW55dGVucworLyogVGhlIGZhY3RvciBvZiAyXjEwNiBpbiB0aW55dGVuc1s0XSBoZWxwcyB1cyBhdm9pZCBzZXR0aW5nIHRoZSB1bmRlcmZsb3cgKi8KKy8qIGZsYWcgdW5uZWNlc3NhcmlseS4gIEl0IGxlYWRzIHRvIGEgc29uZyBhbmQgZGFuY2UgYXQgdGhlIGVuZCBvZiBzdHJ0b2QuICovCitzdGF0aWMgQ09OU1QgZG91YmxlIHRpbnl0ZW5zW10gPSB7IDFlLTE2LCAxZS0zMiwgMWUtNjQsIDFlLTEyOCwKKwkJOTAwNzE5OTI1NDc0MDk5Mi4qOTAwNzE5OTI1NDc0MDk5Mi5lLTI1NgorCQl9OworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKyN1bmRlZiBDaGVja19GTFRfUk9VTkRTCisjZGVmaW5lIENoZWNrX0ZMVF9ST1VORFMKKyNlbHNlCisjZGVmaW5lIFJvdW5kaW5nIEZsdF9Sb3VuZHMKKyNlbmRpZgorCisjaWZkZWYgQXZvaWRfVW5kZXJmbG93IC8qeyovCisgc3RhdGljIGRvdWJsZQorc3VscAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoeCwgc2NhbGUpIFUgKng7IGludCBzY2FsZTsKKyNlbHNlCisJKFUgKngsIGludCBzY2FsZSkKKyNlbmRpZgoreworCVUgdTsKKwlkb3VibGUgcnY7CisJaW50IGk7CisKKwlydiA9IHVscCh4KTsKKwlpZiAoIXNjYWxlIHx8IChpID0gMipQICsgMSAtICgod29yZDAoeCkgJiBFeHBfbWFzaykgPj4gRXhwX3NoaWZ0KSkgPD0gMCkKKwkJcmV0dXJuIHJ2OyAvKiBJcyB0aGVyZSBhbiBleGFtcGxlIHdoZXJlIGkgPD0gMCA/ICovCisJd29yZDAoJnUpID0gRXhwXzEgKyAoaSA8PCBFeHBfc2hpZnQpOworCXdvcmQxKCZ1KSA9IDA7CisJcmV0dXJuIHJ2ICogdS5kOworCX0KKyNlbmRpZiAvKn0qLworCisgZG91YmxlCitzdHJ0b2QKKyNpZmRlZiBLUl9oZWFkZXJzCisJKHMwMCwgc2UpIENPTlNUIGNoYXIgKnMwMDsgY2hhciAqKnNlOworI2Vsc2UKKwkoQ09OU1QgY2hhciAqczAwLCBjaGFyICoqc2UpCisjZW5kaWYKK3sKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwlpbnQgc2NhbGU7CisjZW5kaWYKKwlpbnQgYmIyLCBiYjUsIGJiZSwgYmQyLCBiZDUsIGJiYml0cywgYnMyLCBjLCBkZWNwdCwgZHNpZ24sCisJCSBlLCBlMSwgZXNpZ24sIGksIGosIGssIG5kLCBuZDAsIG5mLCBueiwgbnowLCBzaWduOworCUNPTlNUIGNoYXIgKnMsICpzMCwgKnMxOworCWRvdWJsZSBhYWRqOworCUxvbmcgTDsKKwlVIGFkaiwgYWFkajEsIHJ2LCBydjA7CisJVUxvbmcgeSwgejsKKwlCaWdpbnQgKmJiID0gTlVMTCwgKmJiMSwgKmJkID0gTlVMTCwgKmJkMCA9IE5VTEwsICpicyA9IE5VTEwsICpkZWx0YSA9IE5VTEw7CisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJVUxvbmcgTHNiLCBMc2IxOworI2VuZGlmCisjaWZkZWYgU0VUX0lORVhBQ1QKKwlpbnQgaW5leGFjdCwgb2xkaW5leGFjdDsKKyNlbmRpZgorI2lmZGVmIFVTRV9MT0NBTEUgLyp7eyovCisjaWZkZWYgTk9fTE9DQUxFX0NBQ0hFCisJY2hhciAqZGVjaW1hbHBvaW50ID0gbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50OworCWludCBkcGxlbiA9IHN0cmxlbihkZWNpbWFscG9pbnQpOworI2Vsc2UKKwljaGFyICpkZWNpbWFscG9pbnQ7CisJc3RhdGljIGNoYXIgKmRlY2ltYWxwb2ludF9jYWNoZTsKKwlzdGF0aWMgaW50IGRwbGVuOworCWlmICghKHMwID0gZGVjaW1hbHBvaW50X2NhY2hlKSkgeworCQlzMCA9IGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludDsKKwkJaWYgKChkZWNpbWFscG9pbnRfY2FjaGUgPSAoY2hhciopTUFMTE9DKHN0cmxlbihzMCkgKyAxKSkpIHsKKwkJCXN0cmxjcHkoZGVjaW1hbHBvaW50X2NhY2hlLCBzMCwgc3RybGVuKHMwKSArIDEpOworCQkJczAgPSBkZWNpbWFscG9pbnRfY2FjaGU7CisJCQl9CisJCWRwbGVuID0gc3RybGVuKHMwKTsKKwkJfQorCWRlY2ltYWxwb2ludCA9IChjaGFyKilzMDsKKyNlbmRpZiAvKk5PX0xPQ0FMRV9DQUNIRSovCisjZWxzZSAgLypVU0VfTE9DQUxFfXsqLworI2RlZmluZSBkcGxlbiAxCisjZW5kaWYgLypVU0VfTE9DQUxFfX0qLworCisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUyAvKnsqLworCWludCBSb3VuZGluZzsKKyNpZmRlZiBUcnVzdF9GTFRfUk9VTkRTIC8qe3sgb25seSBkZWZpbmUgdGhpcyBpZiBGTFRfUk9VTkRTIHJlYWxseSB3b3JrcyEgKi8KKwlSb3VuZGluZyA9IEZsdF9Sb3VuZHM7CisjZWxzZSAvKn17Ki8KKwlSb3VuZGluZyA9IDE7CisJc3dpdGNoKGZlZ2V0cm91bmQoKSkgeworCSAgY2FzZSBGRV9UT1dBUkRaRVJPOglSb3VuZGluZyA9IDA7IGJyZWFrOworCSAgY2FzZSBGRV9VUFdBUkQ6CVJvdW5kaW5nID0gMjsgYnJlYWs7CisJICBjYXNlIEZFX0RPV05XQVJEOglSb3VuZGluZyA9IDM7CisJICB9CisjZW5kaWYgLyp9fSovCisjZW5kaWYgLyp9Ki8KKworCXNpZ24gPSBuejAgPSBueiA9IGRlY3B0ID0gMDsKKwlkdmFsKCZydikgPSAwLjsKKwlmb3IocyA9IHMwMDs7cysrKSBzd2l0Y2goKnMpIHsKKwkJY2FzZSAnLSc6CisJCQlzaWduID0gMTsKKwkJCS8qIG5vIGJyZWFrICovCisJCWNhc2UgJysnOgorCQkJaWYgKCorK3MpCisJCQkJZ290byBicmVhazI7CisJCQkvKiBubyBicmVhayAqLworCQljYXNlIDA6CisJCQlnb3RvIHJldDA7CisJCWNhc2UgJ1x0JzoKKwkJY2FzZSAnXG4nOgorCQljYXNlICdcdic6CisJCWNhc2UgJ1xmJzoKKwkJY2FzZSAnXHInOgorCQljYXNlICcgJzoKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJZ290byBicmVhazI7CisJCX0KKyBicmVhazI6CisJaWYgKCpzID09ICcwJykgeworI2lmbmRlZiBOT19IRVhfRlAgLyp7Ki8KKwkJeworCQlzdGF0aWMgRlBJIGZwaSA9IHsgNTMsIDEtMTAyMy01MysxLCAyMDQ2LTEwMjMtNTMrMSwgMSwgU0kgfTsKKwkJTG9uZyBleHA7CisJCVVMb25nIGJpdHNbMl07CisJCXN3aXRjaChzWzFdKSB7CisJCSAgY2FzZSAneCc6CisJCSAgY2FzZSAnWCc6CisJCQl7CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJRlBJIGZwaTEgPSBmcGk7CisJCQlmcGkxLnJvdW5kaW5nID0gUm91bmRpbmc7CisjZWxzZQorI2RlZmluZSBmcGkxIGZwaQorI2VuZGlmCisJCQlzd2l0Y2goKGkgPSBnZXRoZXgoJnMsICZmcGkxLCAmZXhwLCAmYmIsIHNpZ24pKSAmIFNUUlRPR19SZXRtYXNrKSB7CisJCQkgIGNhc2UgU1RSVE9HX05vTWVtb3J5OgorCQkJCWdvdG8gb3ZmbDsKKwkJCSAgY2FzZSBTVFJUT0dfTm9OdW1iZXI6CisJCQkJcyA9IHMwMDsKKwkJCQlzaWduID0gMDsKKwkJCSAgY2FzZSBTVFJUT0dfWmVybzoKKwkJCQlicmVhazsKKwkJCSAgZGVmYXVsdDoKKwkJCQlpZiAoYmIpIHsKKwkJCQkJY29weWJpdHMoYml0cywgZnBpLm5iaXRzLCBiYik7CisJCQkJCUJmcmVlKGJiKTsKKwkJCQkJfQorCQkJCVVMdG9kKCgoVSopJnJ2KS0+TCwgYml0cywgZXhwLCBpKTsKKwkJCSAgfX0KKwkJCWdvdG8gcmV0OworCQkgIH0KKwkJfQorI2VuZGlmIC8qfSovCisJCW56MCA9IDE7CisJCXdoaWxlKCorK3MgPT0gJzAnKSA7CisJCWlmICghKnMpCisJCQlnb3RvIHJldDsKKwkJfQorCXMwID0gczsKKwl5ID0geiA9IDA7CisJZm9yKG5kID0gbmYgPSAwOyAoYyA9ICpzKSA+PSAnMCcgJiYgYyA8PSAnOSc7IG5kKyssIHMrKykKKwkJaWYgKG5kIDwgOSkKKwkJCXkgPSAxMCp5ICsgYyAtICcwJzsKKwkJZWxzZSBpZiAobmQgPCAxNikKKwkJCXogPSAxMCp6ICsgYyAtICcwJzsKKwluZDAgPSBuZDsKKyNpZmRlZiBVU0VfTE9DQUxFCisJaWYgKGMgPT0gKmRlY2ltYWxwb2ludCkgeworCQlmb3IoaSA9IDE7IGRlY2ltYWxwb2ludFtpXTsgKytpKQorCQkJaWYgKHNbaV0gIT0gZGVjaW1hbHBvaW50W2ldKQorCQkJCWdvdG8gZGlnX2RvbmU7CisJCXMgKz0gaTsKKwkJYyA9ICpzOworI2Vsc2UKKwlpZiAoYyA9PSAnLicpIHsKKwkJYyA9ICorK3M7CisjZW5kaWYKKwkJZGVjcHQgPSAxOworCQlpZiAoIW5kKSB7CisJCQlmb3IoOyBjID09ICcwJzsgYyA9ICorK3MpCisJCQkJbnorKzsKKwkJCWlmIChjID4gJzAnICYmIGMgPD0gJzknKSB7CisJCQkJczAgPSBzOworCQkJCW5mICs9IG56OworCQkJCW56ID0gMDsKKwkJCQlnb3RvIGhhdmVfZGlnOworCQkJCX0KKwkJCWdvdG8gZGlnX2RvbmU7CisJCQl9CisJCWZvcig7IGMgPj0gJzAnICYmIGMgPD0gJzknOyBjID0gKisrcykgeworIGhhdmVfZGlnOgorCQkJbnorKzsKKwkJCWlmIChjIC09ICcwJykgeworCQkJCW5mICs9IG56OworCQkJCWZvcihpID0gMTsgaSA8IG56OyBpKyspCisJCQkJCWlmIChuZCsrIDwgOSkKKwkJCQkJCXkgKj0gMTA7CisJCQkJCWVsc2UgaWYgKG5kIDw9IERCTF9ESUcgKyAxKQorCQkJCQkJeiAqPSAxMDsKKwkJCQlpZiAobmQrKyA8IDkpCisJCQkJCXkgPSAxMCp5ICsgYzsKKwkJCQllbHNlIGlmIChuZCA8PSBEQkxfRElHICsgMSkKKwkJCQkJeiA9IDEwKnogKyBjOworCQkJCW56ID0gMDsKKwkJCQl9CisJCQl9CisJCX0vKn0qLworIGRpZ19kb25lOgorCWUgPSAwOworCWlmIChjID09ICdlJyB8fCBjID09ICdFJykgeworCQlpZiAoIW5kICYmICFueiAmJiAhbnowKSB7CisJCQlnb3RvIHJldDA7CisJCQl9CisJCXMwMCA9IHM7CisJCWVzaWduID0gMDsKKwkJc3dpdGNoKGMgPSAqKytzKSB7CisJCQljYXNlICctJzoKKwkJCQllc2lnbiA9IDE7CisJCQljYXNlICcrJzoKKwkJCQljID0gKisrczsKKwkJCX0KKwkJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7CisJCQl3aGlsZShjID09ICcwJykKKwkJCQljID0gKisrczsKKwkJCWlmIChjID4gJzAnICYmIGMgPD0gJzknKSB7CisJCQkJTCA9IGMgLSAnMCc7CisJCQkJczEgPSBzOworCQkJCXdoaWxlKChjID0gKisrcykgPj0gJzAnICYmIGMgPD0gJzknKQorCQkJCQlMID0gMTAqTCArIGMgLSAnMCc7CisJCQkJaWYgKHMgLSBzMSA+IDggfHwgTCA+IDE5OTk5KQorCQkJCQkvKiBBdm9pZCBjb25mdXNpb24gZnJvbSBleHBvbmVudHMKKwkJCQkJICogc28gbGFyZ2UgdGhhdCBlIG1pZ2h0IG92ZXJmbG93LgorCQkJCQkgKi8KKwkJCQkJZSA9IDE5OTk5OyAvKiBzYWZlIGZvciAxNiBiaXQgaW50cyAqLworCQkJCWVsc2UKKwkJCQkJZSA9IChpbnQpTDsKKwkJCQlpZiAoZXNpZ24pCisJCQkJCWUgPSAtZTsKKwkJCQl9CisJCQllbHNlCisJCQkJZSA9IDA7CisJCQl9CisJCWVsc2UKKwkJCXMgPSBzMDA7CisJCX0KKwlpZiAoIW5kKSB7CisJCWlmICghbnogJiYgIW56MCkgeworI2lmZGVmIElORk5BTl9DSEVDSworCQkJLyogQ2hlY2sgZm9yIE5hbiBhbmQgSW5maW5pdHkgKi8KKwkJCVVMb25nIGJpdHNbMl07CisJCQlzdGF0aWMgRlBJIGZwaW5hbiA9CS8qIG9ubHkgNTIgZXhwbGljaXQgYml0cyAqLworCQkJCXsgNTIsIDEtMTAyMy01MysxLCAyMDQ2LTEwMjMtNTMrMSwgMSwgU0kgfTsKKwkJCWlmICghZGVjcHQpCisJCQkgc3dpdGNoKGMpIHsKKwkJCSAgY2FzZSAnaSc6CisJCQkgIGNhc2UgJ0knOgorCQkJCWlmIChtYXRjaCgmcywibmYiKSkgeworCQkJCQktLXM7CisJCQkJCWlmICghbWF0Y2goJnMsImluaXR5IikpCisJCQkJCQkrK3M7CisJCQkJCXdvcmQwKCZydikgPSAweDdmZjAwMDAwOworCQkJCQl3b3JkMSgmcnYpID0gMDsKKwkJCQkJZ290byByZXQ7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCSAgY2FzZSAnbic6CisJCQkgIGNhc2UgJ04nOgorCQkJCWlmIChtYXRjaCgmcywgImFuIikpIHsKKyNpZm5kZWYgTm9fSGV4X05hTgorCQkJCQlpZiAoKnMgPT0gJygnIC8qKSovCisJCQkJCSAmJiBoZXhuYW4oJnMsICZmcGluYW4sIGJpdHMpCisJCQkJCQkJPT0gU1RSVE9HX05hTmJpdHMpIHsKKwkJCQkJCXdvcmQwKCZydikgPSAweDdmZjAwMDAwIHwgYml0c1sxXTsKKwkJCQkJCXdvcmQxKCZydikgPSBiaXRzWzBdOworCQkJCQkJfQorCQkJCQllbHNlIHsKKyNlbmRpZgorCQkJCQkJd29yZDAoJnJ2KSA9IE5BTl9XT1JEMDsKKwkJCQkJCXdvcmQxKCZydikgPSBOQU5fV09SRDE7CisjaWZuZGVmIE5vX0hleF9OYU4KKwkJCQkJCX0KKyNlbmRpZgorCQkJCQlnb3RvIHJldDsKKwkJCQkJfQorCQkJICB9CisjZW5kaWYgLyogSU5GTkFOX0NIRUNLICovCisgcmV0MDoKKwkJCXMgPSBzMDA7CisJCQlzaWduID0gMDsKKwkJCX0KKwkJZ290byByZXQ7CisJCX0KKwllMSA9IGUgLT0gbmY7CisKKwkvKiBOb3cgd2UgaGF2ZSBuZDAgZGlnaXRzLCBzdGFydGluZyBhdCBzMCwgZm9sbG93ZWQgYnkgYQorCSAqIGRlY2ltYWwgcG9pbnQsIGZvbGxvd2VkIGJ5IG5kLW5kMCBkaWdpdHMuICBUaGUgbnVtYmVyIHdlJ3JlCisJICogYWZ0ZXIgaXMgdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhvc2UgZGlnaXRzIHRpbWVzCisJICogMTAqKmUgKi8KKworCWlmICghbmQwKQorCQluZDAgPSBuZDsKKwlrID0gbmQgPCBEQkxfRElHICsgMSA/IG5kIDogREJMX0RJRyArIDE7CisJZHZhbCgmcnYpID0geTsKKwlpZiAoayA+IDkpIHsKKyNpZmRlZiBTRVRfSU5FWEFDVAorCQlpZiAoayA+IERCTF9ESUcpCisJCQlvbGRpbmV4YWN0ID0gZ2V0X2luZXhhY3QoKTsKKyNlbmRpZgorCQlkdmFsKCZydikgPSB0ZW5zW2sgLSA5XSAqIGR2YWwoJnJ2KSArIHo7CisJCX0KKwlpZiAobmQgPD0gREJMX0RJRworI2lmbmRlZiBSTkRfUFJPRFFVT1QKKyNpZm5kZWYgSG9ub3JfRkxUX1JPVU5EUworCQkmJiBGbHRfUm91bmRzID09IDEKKyNlbmRpZgorI2VuZGlmCisJCQkpIHsKKwkJaWYgKCFlKQorCQkJZ290byByZXQ7CisjaWZuZGVmIFJPVU5EX0JJQVNFRF93aXRob3V0X1JvdW5kX1VwCisJCWlmIChlID4gMCkgeworCQkJaWYgKGUgPD0gVGVuX3BtYXgpIHsKKyNpZmRlZiBWQVgKKwkJCQlnb3RvIHZheF9vdmZsX2NoZWNrOworI2Vsc2UKKyNpZmRlZiBIb25vcl9GTFRfUk9VTkRTCisJCQkJLyogcm91bmQgY29ycmVjdGx5IEZMVF9ST1VORFMgPSAyIG9yIDMgKi8KKwkJCQlpZiAoc2lnbikgeworCQkJCQlydi5kID0gLXJ2LmQ7CisJCQkJCXNpZ24gPSAwOworCQkJCQl9CisjZW5kaWYKKwkJCQkvKiBydiA9ICovIHJvdW5kZWRfcHJvZHVjdChkdmFsKCZydiksIHRlbnNbZV0pOworCQkJCWdvdG8gcmV0OworI2VuZGlmCisJCQkJfQorCQkJaSA9IERCTF9ESUcgLSBuZDsKKwkJCWlmIChlIDw9IFRlbl9wbWF4ICsgaSkgeworCQkJCS8qIEEgZmFuY2llciB0ZXN0IHdvdWxkIHNvbWV0aW1lcyBsZXQgdXMgZG8KKwkJCQkgKiB0aGlzIGZvciBsYXJnZXIgaSB2YWx1ZXMuCisJCQkJICovCisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJCS8qIHJvdW5kIGNvcnJlY3RseSBGTFRfUk9VTkRTID0gMiBvciAzICovCisJCQkJaWYgKHNpZ24pIHsKKwkJCQkJcnYuZCA9IC1ydi5kOworCQkJCQlzaWduID0gMDsKKwkJCQkJfQorI2VuZGlmCisJCQkJZSAtPSBpOworCQkJCWR2YWwoJnJ2KSAqPSB0ZW5zW2ldOworI2lmZGVmIFZBWAorCQkJCS8qIFZBWCBleHBvbmVudCByYW5nZSBpcyBzbyBuYXJyb3cgd2UgbXVzdAorCQkJCSAqIHdvcnJ5IGFib3V0IG92ZXJmbG93IGhlcmUuLi4KKwkJCQkgKi8KKyB2YXhfb3ZmbF9jaGVjazoKKwkJCQl3b3JkMCgmcnYpIC09IFAqRXhwX21zazE7CisJCQkJLyogcnYgPSAqLyByb3VuZGVkX3Byb2R1Y3QoZHZhbCgmcnYpLCB0ZW5zW2VdKTsKKwkJCQlpZiAoKHdvcmQwKCZydikgJiBFeHBfbWFzaykKKwkJCQkgPiBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy0xLVApKQorCQkJCQlnb3RvIG92Zmw7CisJCQkJd29yZDAoJnJ2KSArPSBQKkV4cF9tc2sxOworI2Vsc2UKKwkJCQkvKiBydiA9ICovIHJvdW5kZWRfcHJvZHVjdChkdmFsKCZydiksIHRlbnNbZV0pOworI2VuZGlmCisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJfQorI2lmbmRlZiBJbmFjY3VyYXRlX0RpdmlkZQorCQllbHNlIGlmIChlID49IC1UZW5fcG1heCkgeworI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwkJCS8qIHJvdW5kIGNvcnJlY3RseSBGTFRfUk9VTkRTID0gMiBvciAzICovCisJCQlpZiAoc2lnbikgeworCQkJCXJ2LmQgPSAtcnYuZDsKKwkJCQlzaWduID0gMDsKKwkJCQl9CisjZW5kaWYKKwkJCS8qIHJ2ID0gKi8gcm91bmRlZF9xdW90aWVudChkdmFsKCZydiksIHRlbnNbLWVdKTsKKwkJCWdvdG8gcmV0OworCQkJfQorI2VuZGlmCisjZW5kaWYgLyogUk9VTkRfQklBU0VEX3dpdGhvdXRfUm91bmRfVXAgKi8KKwkJfQorCWUxICs9IG5kIC0gazsKKworI2lmZGVmIElFRUVfQXJpdGgKKyNpZmRlZiBTRVRfSU5FWEFDVAorCWluZXhhY3QgPSAxOworCWlmIChrIDw9IERCTF9ESUcpCisJCW9sZGluZXhhY3QgPSBnZXRfaW5leGFjdCgpOworI2VuZGlmCisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJc2NhbGUgPSAwOworI2VuZGlmCisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCWlmIChSb3VuZGluZyA+PSAyKSB7CisJCWlmIChzaWduKQorCQkJUm91bmRpbmcgPSBSb3VuZGluZyA9PSAyID8gMCA6IDI7CisJCWVsc2UKKwkJCWlmIChSb3VuZGluZyAhPSAyKQorCQkJCVJvdW5kaW5nID0gMDsKKwkJfQorI2VuZGlmCisjZW5kaWYgLypJRUVFX0FyaXRoKi8KKworCS8qIEdldCBzdGFydGluZyBhcHByb3hpbWF0aW9uID0gcnYgKiAxMCoqZTEgKi8KKworCWlmIChlMSA+IDApIHsKKwkJaWYgKCAoaSA9IGUxICYgMTUpICE9MCkKKwkJCWR2YWwoJnJ2KSAqPSB0ZW5zW2ldOworCQlpZiAoZTEgJj0gfjE1KSB7CisJCQlpZiAoZTEgPiBEQkxfTUFYXzEwX0VYUCkgeworIG92Zmw6CisJCQkJLyogQ2FuJ3QgdHJ1c3QgSFVHRV9WQUwgKi8KKyNpZmRlZiBJRUVFX0FyaXRoCisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQkJCXN3aXRjaChSb3VuZGluZykgeworCQkJCSAgY2FzZSAwOiAvKiB0b3dhcmQgMCAqLworCQkJCSAgY2FzZSAzOiAvKiB0b3dhcmQgLWluZmluaXR5ICovCisJCQkJCXdvcmQwKCZydikgPSBCaWcwOworCQkJCQl3b3JkMSgmcnYpID0gQmlnMTsKKwkJCQkJYnJlYWs7CisJCQkJICBkZWZhdWx0OgorCQkJCQl3b3JkMCgmcnYpID0gRXhwX21hc2s7CisJCQkJCXdvcmQxKCZydikgPSAwOworCQkJCSAgfQorI2Vsc2UgLypIb25vcl9GTFRfUk9VTkRTKi8KKwkJCQl3b3JkMCgmcnYpID0gRXhwX21hc2s7CisJCQkJd29yZDEoJnJ2KSA9IDA7CisjZW5kaWYgLypIb25vcl9GTFRfUk9VTkRTKi8KKyNpZmRlZiBTRVRfSU5FWEFDVAorCQkJCS8qIHNldCBvdmVyZmxvdyBiaXQgKi8KKwkJCQlkdmFsKCZydjApID0gMWUzMDA7CisJCQkJZHZhbCgmcnYwKSAqPSBkdmFsKCZydjApOworI2VuZGlmCisjZWxzZSAvKklFRUVfQXJpdGgqLworCQkJCXdvcmQwKCZydikgPSBCaWcwOworCQkJCXdvcmQxKCZydikgPSBCaWcxOworI2VuZGlmIC8qSUVFRV9Bcml0aCovCisgcmFuZ2VfZXJyOgorCQkJCWlmIChiZDApIHsKKwkJCQkJQmZyZWUoYmIpOworCQkJCQlCZnJlZShiZCk7CisJCQkJCUJmcmVlKGJzKTsKKwkJCQkJQmZyZWUoYmQwKTsKKwkJCQkJQmZyZWUoZGVsdGEpOworCQkJCQl9CisjaWZuZGVmIE5PX0VSUk5PCisJCQkJZXJybm8gPSBFUkFOR0U7CisjZW5kaWYKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCQllMSA+Pj0gNDsKKwkJCWZvcihqID0gMDsgZTEgPiAxOyBqKyssIGUxID4+PSAxKQorCQkJCWlmIChlMSAmIDEpCisJCQkJCWR2YWwoJnJ2KSAqPSBiaWd0ZW5zW2pdOworCQkvKiBUaGUgbGFzdCBtdWx0aXBsaWNhdGlvbiBjb3VsZCBvdmVyZmxvdy4gKi8KKwkJCXdvcmQwKCZydikgLT0gUCpFeHBfbXNrMTsKKwkJCWR2YWwoJnJ2KSAqPSBiaWd0ZW5zW2pdOworCQkJaWYgKCh6ID0gd29yZDAoJnJ2KSAmIEV4cF9tYXNrKQorCQkJID4gRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtUCkpCisJCQkJZ290byBvdmZsOworCQkJaWYgKHogPiBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy0xLVApKSB7CisJCQkJLyogc2V0IHRvIGxhcmdlc3QgbnVtYmVyICovCisJCQkJLyogKENhbid0IHRydXN0IERCTF9NQVgpICovCisJCQkJd29yZDAoJnJ2KSA9IEJpZzA7CisJCQkJd29yZDEoJnJ2KSA9IEJpZzE7CisJCQkJfQorCQkJZWxzZQorCQkJCXdvcmQwKCZydikgKz0gUCpFeHBfbXNrMTsKKwkJCX0KKwkJfQorCWVsc2UgaWYgKGUxIDwgMCkgeworCQllMSA9IC1lMTsKKwkJaWYgKCAoaSA9IGUxICYgMTUpICE9MCkKKwkJCWR2YWwoJnJ2KSAvPSB0ZW5zW2ldOworCQlpZiAoZTEgPj49IDQpIHsKKwkJCWlmIChlMSA+PSAxIDw8IG5fYmlndGVucykKKwkJCQlnb3RvIHVuZGZsOworI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJaWYgKGUxICYgU2NhbGVfQml0KQorCQkJCXNjYWxlID0gMipQOworCQkJZm9yKGogPSAwOyBlMSA+IDA7IGorKywgZTEgPj49IDEpCisJCQkJaWYgKGUxICYgMSkKKwkJCQkJZHZhbCgmcnYpICo9IHRpbnl0ZW5zW2pdOworCQkJaWYgKHNjYWxlICYmIChqID0gMipQICsgMSAtICgod29yZDAoJnJ2KSAmIEV4cF9tYXNrKQorCQkJCQkJPj4gRXhwX3NoaWZ0KSkgPiAwKSB7CisJCQkJLyogc2NhbGVkIHJ2IGlzIGRlbm9ybWFsOyB6YXAgaiBsb3cgYml0cyAqLworCQkJCWlmIChqID49IDMyKSB7CisJCQkJCXdvcmQxKCZydikgPSAwOworCQkJCQlpZiAoaiA+PSA1MykKKwkJCQkJIHdvcmQwKCZydikgPSAoUCsyKSpFeHBfbXNrMTsKKwkJCQkJZWxzZQorCQkJCQkgd29yZDAoJnJ2KSAmPSAweGZmZmZmZmZmIDw8IChqLTMyKTsKKwkJCQkJfQorCQkJCWVsc2UKKwkJCQkJd29yZDEoJnJ2KSAmPSAweGZmZmZmZmZmIDw8IGo7CisJCQkJfQorI2Vsc2UKKwkJCWZvcihqID0gMDsgZTEgPiAxOyBqKyssIGUxID4+PSAxKQorCQkJCWlmIChlMSAmIDEpCisJCQkJCWR2YWwoJnJ2KSAqPSB0aW55dGVuc1tqXTsKKwkJCS8qIFRoZSBsYXN0IG11bHRpcGxpY2F0aW9uIGNvdWxkIHVuZGVyZmxvdy4gKi8KKwkJCWR2YWwoJnJ2MCkgPSBkdmFsKCZydik7CisJCQlkdmFsKCZydikgKj0gdGlueXRlbnNbal07CisJCQlpZiAoIWR2YWwoJnJ2KSkgeworCQkJCWR2YWwoJnJ2KSA9IDIuKmR2YWwoJnJ2MCk7CisJCQkJZHZhbCgmcnYpICo9IHRpbnl0ZW5zW2pdOworI2VuZGlmCisJCQkJaWYgKCFkdmFsKCZydikpIHsKKyB1bmRmbDoKKwkJCQkJZHZhbCgmcnYpID0gMC47CisJCQkJCWdvdG8gcmFuZ2VfZXJyOworCQkJCQl9CisjaWZuZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJCXdvcmQwKCZydikgPSBUaW55MDsKKwkJCQl3b3JkMSgmcnYpID0gVGlueTE7CisJCQkJLyogVGhlIHJlZmluZW1lbnQgYmVsb3cgd2lsbCBjbGVhbgorCQkJCSAqIHRoaXMgYXBwcm94aW1hdGlvbiB1cC4KKwkJCQkgKi8KKwkJCQl9CisjZW5kaWYKKwkJCX0KKwkJfQorCisJLyogTm93IHRoZSBoYXJkIHBhcnQgLS0gYWRqdXN0aW5nIHJ2IHRvIHRoZSBjb3JyZWN0IHZhbHVlLiovCisKKwkvKiBQdXQgZGlnaXRzIGludG8gYmQ6IHRydWUgdmFsdWUgPSBiZCAqIDEwXmUgKi8KKworCWJkMCA9IHMyYihzMCwgbmQwLCBuZCwgeSwgZHBsZW4pOworCWlmIChiZDAgPT0gTlVMTCkKKwkJZ290byBvdmZsOworCisJZm9yKDs7KSB7CisJCWJkID0gQmFsbG9jKGJkMC0+ayk7CisJCWlmIChiZCA9PSBOVUxMKQorCQkJZ290byBvdmZsOworCQlCY29weShiZCwgYmQwKTsKKwkJYmIgPSBkMmIoZHZhbCgmcnYpLCAmYmJlLCAmYmJiaXRzKTsJLyogcnYgPSBiYiAqIDJeYmJlICovCisJCWlmIChiYiA9PSBOVUxMKQorCQkJZ290byBvdmZsOworCQlicyA9IGkyYigxKTsKKwkJaWYgKGJzID09IE5VTEwpCisJCQlnb3RvIG92Zmw7CisKKwkJaWYgKGUgPj0gMCkgeworCQkJYmIyID0gYmI1ID0gMDsKKwkJCWJkMiA9IGJkNSA9IGU7CisJCQl9CisJCWVsc2UgeworCQkJYmIyID0gYmI1ID0gLWU7CisJCQliZDIgPSBiZDUgPSAwOworCQkJfQorCQlpZiAoYmJlID49IDApCisJCQliYjIgKz0gYmJlOworCQllbHNlCisJCQliZDIgLT0gYmJlOworCQliczIgPSBiYjI7CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworCQlpZiAoUm91bmRpbmcgIT0gMSkKKwkJCWJzMisrOworI2VuZGlmCisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJCUxzYiA9IExTQjsKKwkJTHNiMSA9IDA7CisJCWogPSBiYmUgLSBzY2FsZTsKKwkJaSA9IGogKyBiYmJpdHMgLSAxOwkvKiBsb2diKHJ2KSAqLworCQlqID0gUCArIDEgLSBiYmJpdHM7CisJCWlmIChpIDwgRW1pbikgewkvKiBkZW5vcm1hbCAqLworCQkJaSA9IEVtaW4gLSBpOworCQkJaiAtPSBpOworCQkJaWYgKGkgPCAzMikKKwkJCQlMc2IgPDw9IGk7CisJCQllbHNlCisJCQkJTHNiMSA9IExzYiA8PCAoaS0zMik7CisJCQl9CisjZWxzZSAvKkF2b2lkX1VuZGVyZmxvdyovCisjaWZkZWYgU3VkZGVuX1VuZGVyZmxvdworI2lmZGVmIElCTQorCQlqID0gMSArIDQqUCAtIDMgLSBiYmJpdHMgKyAoKGJiZSArIGJiYml0cyAtIDEpICYgMyk7CisjZWxzZQorCQlqID0gUCArIDEgLSBiYmJpdHM7CisjZW5kaWYKKyNlbHNlIC8qU3VkZGVuX1VuZGVyZmxvdyovCisJCWogPSBiYmU7CisJCWkgPSBqICsgYmJiaXRzIC0gMTsJLyogbG9nYigmcnYpICovCisJCWlmIChpIDwgRW1pbikJLyogZGVub3JtYWwgKi8KKwkJCWogKz0gUCAtIEVtaW47CisJCWVsc2UKKwkJCWogPSBQICsgMSAtIGJiYml0czsKKyNlbmRpZiAvKlN1ZGRlbl9VbmRlcmZsb3cqLworI2VuZGlmIC8qQXZvaWRfVW5kZXJmbG93Ki8KKwkJYmIyICs9IGo7CisJCWJkMiArPSBqOworI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQliZDIgKz0gc2NhbGU7CisjZW5kaWYKKwkJaSA9IGJiMiA8IGJkMiA/IGJiMiA6IGJkMjsKKwkJaWYgKGkgPiBiczIpCisJCQlpID0gYnMyOworCQlpZiAoaSA+IDApIHsKKwkJCWJiMiAtPSBpOworCQkJYmQyIC09IGk7CisJCQliczIgLT0gaTsKKwkJCX0KKwkJaWYgKGJiNSA+IDApIHsKKwkJCWJzID0gcG93NW11bHQoYnMsIGJiNSk7CisJCQlpZiAoYnMgPT0gTlVMTCkKKwkJCQlnb3RvIG92Zmw7CisJCQliYjEgPSBtdWx0KGJzLCBiYik7CisJCQlpZiAoYmIxID09IE5VTEwpCisJCQkJZ290byBvdmZsOworCQkJQmZyZWUoYmIpOworCQkJYmIgPSBiYjE7CisJCQl9CisJCWlmIChiYjIgPiAwKSB7CisJCQliYiA9IGxzaGlmdChiYiwgYmIyKTsKKwkJCWlmIChiYiA9PSBOVUxMKQorCQkJCWdvdG8gb3ZmbDsKKwkJCX0KKwkJaWYgKGJkNSA+IDApIHsKKwkJCWJkID0gcG93NW11bHQoYmQsIGJkNSk7CisJCQlpZiAoYmQgPT0gTlVMTCkKKwkJCQlnb3RvIG92Zmw7CisJCQl9CisJCWlmIChiZDIgPiAwKSB7CisJCQliZCA9IGxzaGlmdChiZCwgYmQyKTsKKwkJCWlmIChiZCA9PSBOVUxMKQorCQkJCWdvdG8gb3ZmbDsKKwkJCX0KKwkJaWYgKGJzMiA+IDApIHsKKwkJCWJzID0gbHNoaWZ0KGJzLCBiczIpOworCQkJaWYgKGJzID09IE5VTEwpCisJCQkJZ290byBvdmZsOworCQkJfQorCQlkZWx0YSA9IGRpZmYoYmIsIGJkKTsKKwkJaWYgKGRlbHRhID09IE5VTEwpCisJCQlnb3RvIG92Zmw7CisJCWRzaWduID0gZGVsdGEtPnNpZ247CisJCWRlbHRhLT5zaWduID0gMDsKKwkJaSA9IGNtcChkZWx0YSwgYnMpOworI2lmZGVmIEhvbm9yX0ZMVF9ST1VORFMKKwkJaWYgKFJvdW5kaW5nICE9IDEpIHsKKwkJCWlmIChpIDwgMCkgeworCQkJCS8qIEVycm9yIGlzIGxlc3MgdGhhbiBhbiB1bHAgKi8KKwkJCQlpZiAoIWRlbHRhLT54WzBdICYmIGRlbHRhLT53ZHMgPD0gMSkgeworCQkJCQkvKiBleGFjdCAqLworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJCWluZXhhY3QgPSAwOworI2VuZGlmCisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJaWYgKFJvdW5kaW5nKSB7CisJCQkJCWlmIChkc2lnbikgeworCQkJCQkJZHZhbCgmYWRqKSA9IDEuOworCQkJCQkJZ290byBhcHBseV9hZGo7CisJCQkJCQl9CisJCQkJCX0KKwkJCQllbHNlIGlmICghZHNpZ24pIHsKKwkJCQkJZHZhbCgmYWRqKSA9IC0xLjsKKwkJCQkJaWYgKCF3b3JkMSgmcnYpCisJCQkJCSAmJiAhKHdvcmQwKCZydikgJiBGcmFjX21hc2spKSB7CisJCQkJCQl5ID0gd29yZDAoJnJ2KSAmIEV4cF9tYXNrOworI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJCQkJaWYgKCFzY2FsZSB8fCB5ID4gMipQKkV4cF9tc2sxKQorI2Vsc2UKKwkJCQkJCWlmICh5KQorI2VuZGlmCisJCQkJCQkgIHsKKwkJCQkJCSAgZGVsdGEgPSBsc2hpZnQoZGVsdGEsTG9nMlApOworCQkJCQkJICBpZiAoZGVsdGEgPT0gTlVMTCkKKwkJCQkJCQlnb3RvIG92Zmw7CisJCQkJCQkgIGlmIChjbXAoZGVsdGEsIGJzKSA8PSAwKQorCQkJCQkJCWR2YWwoJmFkaikgPSAtMC41OworCQkJCQkJICB9CisJCQkJCQl9CisgYXBwbHlfYWRqOgorI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJCQlpZiAoc2NhbGUgJiYgKHkgPSB3b3JkMCgmcnYpICYgRXhwX21hc2spCisJCQkJCQk8PSAyKlAqRXhwX21zazEpCisJCQkJCSAgd29yZDAoJmFkaikgKz0gKDIqUCsxKSpFeHBfbXNrMSAtIHk7CisjZWxzZQorI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJCQkJaWYgKCh3b3JkMCgmcnYpICYgRXhwX21hc2spIDw9CisJCQkJCQkJUCpFeHBfbXNrMSkgeworCQkJCQkJd29yZDAoJnJ2KSArPSBQKkV4cF9tc2sxOworCQkJCQkJZHZhbCgmcnYpICs9IGFkaip1bHAoJnJ2KTsKKwkJCQkJCXdvcmQwKCZydikgLT0gUCpFeHBfbXNrMTsKKwkJCQkJCX0KKwkJCQkJZWxzZQorI2VuZGlmIC8qU3VkZGVuX1VuZGVyZmxvdyovCisjZW5kaWYgLypBdm9pZF9VbmRlcmZsb3cqLworCQkJCQlkdmFsKCZydikgKz0gYWRqLmQqdWxwKCZydik7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisJCQlkdmFsKCZhZGopID0gcmF0aW8oZGVsdGEsIGJzKTsKKwkJCWlmIChhZGouZCA8IDEuKQorCQkJCWR2YWwoJmFkaikgPSAxLjsKKwkJCWlmIChhZGouZCA8PSAweDdmZmZmZmZlKSB7CisJCQkJLyogZHZhbCgmYWRqKSA9IFJvdW5kaW5nID8gY2VpbCgmYWRqKSA6IGZsb29yKCZhZGopOyAqLworCQkJCXkgPSBhZGouZDsKKwkJCQlpZiAoeSAhPSBhZGouZCkgeworCQkJCQlpZiAoISgoUm91bmRpbmc+PjEpIF4gZHNpZ24pKQorCQkJCQkJeSsrOworCQkJCQlkdmFsKCZhZGopID0geTsKKwkJCQkJfQorCQkJCX0KKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwkJCWlmIChzY2FsZSAmJiAoeSA9IHdvcmQwKCZydikgJiBFeHBfbWFzaykgPD0gMipQKkV4cF9tc2sxKQorCQkJCXdvcmQwKCZhZGopICs9ICgyKlArMSkqRXhwX21zazEgLSB5OworI2Vsc2UKKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCQlpZiAoKHdvcmQwKCZydikgJiBFeHBfbWFzaykgPD0gUCpFeHBfbXNrMSkgeworCQkJCXdvcmQwKCZydikgKz0gUCpFeHBfbXNrMTsKKwkJCQlkdmFsKCZhZGopICo9IHVscCgmcnYpOworCQkJCWlmIChkc2lnbikKKwkJCQkJZHZhbCgmcnYpICs9IGFkajsKKwkJCQllbHNlCisJCQkJCWR2YWwoJnJ2KSAtPSBhZGo7CisJCQkJd29yZDAoJnJ2KSAtPSBQKkV4cF9tc2sxOworCQkJCWdvdG8gY29udDsKKwkJCQl9CisjZW5kaWYgLypTdWRkZW5fVW5kZXJmbG93Ki8KKyNlbmRpZiAvKkF2b2lkX1VuZGVyZmxvdyovCisJCQlkdmFsKCZhZGopICo9IHVscCgmcnYpOworCQkJaWYgKGRzaWduKSB7CisJCQkJaWYgKHdvcmQwKCZydikgPT0gQmlnMCAmJiB3b3JkMSgmcnYpID09IEJpZzEpCisJCQkJCWdvdG8gb3ZmbDsKKwkJCQlkdmFsKCZydikgKz0gYWRqLmQ7CisJCQkJfQorCQkJZWxzZQorCQkJCWR2YWwoJnJ2KSAtPSBhZGouZDsKKwkJCWdvdG8gY29udDsKKwkJCX0KKyNlbmRpZiAvKkhvbm9yX0ZMVF9ST1VORFMqLworCisJCWlmIChpIDwgMCkgeworCQkJLyogRXJyb3IgaXMgbGVzcyB0aGFuIGhhbGYgYW4gdWxwIC0tIGNoZWNrIGZvcgorCQkJICogc3BlY2lhbCBjYXNlIG9mIG1hbnRpc3NhIGEgcG93ZXIgb2YgdHdvLgorCQkJICovCisJCQlpZiAoZHNpZ24gfHwgd29yZDEoJnJ2KSB8fCB3b3JkMCgmcnYpICYgQm5kcnlfbWFzaworI2lmZGVmIElFRUVfQXJpdGgKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwkJCSB8fCAod29yZDAoJnJ2KSAmIEV4cF9tYXNrKSA8PSAoMipQKzEpKkV4cF9tc2sxCisjZWxzZQorCQkJIHx8ICh3b3JkMCgmcnYpICYgRXhwX21hc2spIDw9IEV4cF9tc2sxCisjZW5kaWYKKyNlbmRpZgorCQkJCSkgeworI2lmZGVmIFNFVF9JTkVYQUNUCisJCQkJaWYgKCFkZWx0YS0+eFswXSAmJiBkZWx0YS0+d2RzIDw9IDEpCisJCQkJCWluZXhhY3QgPSAwOworI2VuZGlmCisJCQkJYnJlYWs7CisJCQkJfQorCQkJaWYgKCFkZWx0YS0+eFswXSAmJiBkZWx0YS0+d2RzIDw9IDEpIHsKKwkJCQkvKiBleGFjdCByZXN1bHQgKi8KKyNpZmRlZiBTRVRfSU5FWEFDVAorCQkJCWluZXhhY3QgPSAwOworI2VuZGlmCisJCQkJYnJlYWs7CisJCQkJfQorCQkJZGVsdGEgPSBsc2hpZnQoZGVsdGEsTG9nMlApOworCQkJaWYgKGRlbHRhID09IE5VTEwpCisJCQkJZ290byBvdmZsOworCQkJaWYgKGNtcChkZWx0YSwgYnMpID4gMCkKKwkJCQlnb3RvIGRyb3BfZG93bjsKKwkJCWJyZWFrOworCQkJfQorCQlpZiAoaSA9PSAwKSB7CisJCQkvKiBleGFjdGx5IGhhbGYtd2F5IGJldHdlZW4gKi8KKwkJCWlmIChkc2lnbikgeworCQkJCWlmICgod29yZDAoJnJ2KSAmIEJuZHJ5X21hc2sxKSA9PSBCbmRyeV9tYXNrMQorCQkJCSAmJiAgd29yZDEoJnJ2KSA9PSAoCisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJCQkoc2NhbGUgJiYgKHkgPSB3b3JkMCgmcnYpICYgRXhwX21hc2spIDw9IDIqUCpFeHBfbXNrMSkKKwkJPyAoMHhmZmZmZmZmZiAmICgweGZmZmZmZmZmIDw8ICgyKlArMS0oeT4+RXhwX3NoaWZ0KSkpKSA6CisjZW5kaWYKKwkJCQkJCSAgIDB4ZmZmZmZmZmYpKSB7CisJCQkJCS8qYm91bmRhcnkgY2FzZSAtLSBpbmNyZW1lbnQgZXhwb25lbnQqLworCQkJCQlpZiAod29yZDAoJnJ2KSA9PSBCaWcwICYmIHdvcmQxKCZydikgPT0gQmlnMSkKKwkJCQkJCWdvdG8gb3ZmbDsKKwkJCQkJd29yZDAoJnJ2KSA9ICh3b3JkMCgmcnYpICYgRXhwX21hc2spCisJCQkJCQkrIEV4cF9tc2sxCisjaWZkZWYgSUJNCisJCQkJCQl8IEV4cF9tc2sxID4+IDQKKyNlbmRpZgorCQkJCQkJOworCQkJCQl3b3JkMSgmcnYpID0gMDsKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwkJCQkJZHNpZ24gPSAwOworI2VuZGlmCisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJZWxzZSBpZiAoISh3b3JkMCgmcnYpICYgQm5kcnlfbWFzaykgJiYgIXdvcmQxKCZydikpIHsKKyBkcm9wX2Rvd246CisJCQkJLyogYm91bmRhcnkgY2FzZSAtLSBkZWNyZW1lbnQgZXhwb25lbnQgKi8KKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93IC8qe3sqLworCQkJCUwgPSB3b3JkMCgmcnYpICYgRXhwX21hc2s7CisjaWZkZWYgSUJNCisJCQkJaWYgKEwgPCAgRXhwX21zazEpCisjZWxzZQorI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQkJCWlmIChMIDw9IChzY2FsZSA/ICgyKlArMSkqRXhwX21zazEgOiBFeHBfbXNrMSkpCisjZWxzZQorCQkJCWlmIChMIDw9IEV4cF9tc2sxKQorI2VuZGlmIC8qQXZvaWRfVW5kZXJmbG93Ki8KKyNlbmRpZiAvKklCTSovCisJCQkJCWdvdG8gdW5kZmw7CisJCQkJTCAtPSBFeHBfbXNrMTsKKyNlbHNlIC8qU3VkZGVuX1VuZGVyZmxvd317Ki8KKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwkJCQlpZiAoc2NhbGUpIHsKKwkJCQkJTCA9IHdvcmQwKCZydikgJiBFeHBfbWFzazsKKwkJCQkJaWYgKEwgPD0gKDIqUCsxKSpFeHBfbXNrMSkgeworCQkJCQkJaWYgKEwgPiAoUCsyKSpFeHBfbXNrMSkKKwkJCQkJCQkvKiByb3VuZCBldmVuID09PiAqLworCQkJCQkJCS8qIGFjY2VwdCBydiAqLworCQkJCQkJCWJyZWFrOworCQkJCQkJLyogcnYgPSBzbWFsbGVzdCBkZW5vcm1hbCAqLworCQkJCQkJZ290byB1bmRmbDsKKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmIC8qQXZvaWRfVW5kZXJmbG93Ki8KKwkJCQlMID0gKHdvcmQwKCZydikgJiBFeHBfbWFzaykgLSBFeHBfbXNrMTsKKyNlbmRpZiAvKlN1ZGRlbl9VbmRlcmZsb3d9fSovCisJCQkJd29yZDAoJnJ2KSA9IEwgfCBCbmRyeV9tYXNrMTsKKwkJCQl3b3JkMSgmcnYpID0gMHhmZmZmZmZmZjsKKyNpZmRlZiBJQk0KKwkJCQlnb3RvIGNvbnQ7CisjZWxzZQorCQkJCWJyZWFrOworI2VuZGlmCisJCQkJfQorI2lmbmRlZiBST1VORF9CSUFTRUQKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwkJCWlmIChMc2IxKSB7CisJCQkJaWYgKCEod29yZDAoJnJ2KSAmIExzYjEpKQorCQkJCQlicmVhazsKKwkJCQl9CisJCQllbHNlIGlmICghKHdvcmQxKCZydikgJiBMc2IpKQorCQkJCWJyZWFrOworI2Vsc2UKKwkJCWlmICghKHdvcmQxKCZydikgJiBMU0IpKQorCQkJCWJyZWFrOworI2VuZGlmCisjZW5kaWYKKwkJCWlmIChkc2lnbikKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwkJCQlkdmFsKCZydikgKz0gc3VscCgmcnYsIHNjYWxlKTsKKyNlbHNlCisJCQkJZHZhbCgmcnYpICs9IHVscCgmcnYpOworI2VuZGlmCisjaWZuZGVmIFJPVU5EX0JJQVNFRAorCQkJZWxzZSB7CisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJCQkJZHZhbCgmcnYpIC09IHN1bHAoJnJ2LCBzY2FsZSk7CisjZWxzZQorCQkJCWR2YWwoJnJ2KSAtPSB1bHAoJnJ2KTsKKyNlbmRpZgorI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCQkJaWYgKCFkdmFsKCZydikpCisJCQkJCWdvdG8gdW5kZmw7CisjZW5kaWYKKwkJCQl9CisjaWZkZWYgQXZvaWRfVW5kZXJmbG93CisJCQlkc2lnbiA9IDEgLSBkc2lnbjsKKyNlbmRpZgorI2VuZGlmCisJCQlicmVhazsKKwkJCX0KKwkJaWYgKChhYWRqID0gcmF0aW8oZGVsdGEsIGJzKSkgPD0gMi4pIHsKKwkJCWlmIChkc2lnbikKKwkJCQlhYWRqID0gZHZhbCgmYWFkajEpID0gMS47CisJCQllbHNlIGlmICh3b3JkMSgmcnYpIHx8IHdvcmQwKCZydikgJiBCbmRyeV9tYXNrKSB7CisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJCQlpZiAod29yZDEoJnJ2KSA9PSBUaW55MSAmJiAhd29yZDAoJnJ2KSkKKwkJCQkJZ290byB1bmRmbDsKKyNlbmRpZgorCQkJCWFhZGogPSAxLjsKKwkJCQlkdmFsKCZhYWRqMSkgPSAtMS47CisJCQkJfQorCQkJZWxzZSB7CisJCQkJLyogc3BlY2lhbCBjYXNlIC0tIHBvd2VyIG9mIEZMVF9SQURJWCB0byBiZSAqLworCQkJCS8qIHJvdW5kZWQgZG93bi4uLiAqLworCisJCQkJaWYgKGFhZGogPCAyLi9GTFRfUkFESVgpCisJCQkJCWFhZGogPSAxLi9GTFRfUkFESVg7CisJCQkJZWxzZQorCQkJCQlhYWRqICo9IDAuNTsKKwkJCQlkdmFsKCZhYWRqMSkgPSAtYWFkajsKKwkJCQl9CisJCQl9CisJCWVsc2UgeworCQkJYWFkaiAqPSAwLjU7CisJCQlkdmFsKCZhYWRqMSkgPSBkc2lnbiA/IGFhZGogOiAtYWFkajsKKyNpZmRlZiBDaGVja19GTFRfUk9VTkRTCisJCQlzd2l0Y2goUm91bmRpbmcpIHsKKwkJCQljYXNlIDI6IC8qIHRvd2FyZHMgK2luZmluaXR5ICovCisJCQkJCWR2YWwoJmFhZGoxKSAtPSAwLjU7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMDogLyogdG93YXJkcyAwICovCisJCQkJY2FzZSAzOiAvKiB0b3dhcmRzIC1pbmZpbml0eSAqLworCQkJCQlkdmFsKCZhYWRqMSkgKz0gMC41OworCQkJCX0KKyNlbHNlCisJCQlpZiAoRmx0X1JvdW5kcyA9PSAwKQorCQkJCWR2YWwoJmFhZGoxKSArPSAwLjU7CisjZW5kaWYgLypDaGVja19GTFRfUk9VTkRTKi8KKwkJCX0KKwkJeSA9IHdvcmQwKCZydikgJiBFeHBfbWFzazsKKworCQkvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8KKworCQlpZiAoeSA9PSBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy0xKSkgeworCQkJZHZhbCgmcnYwKSA9IGR2YWwoJnJ2KTsKKwkJCXdvcmQwKCZydikgLT0gUCpFeHBfbXNrMTsKKwkJCWR2YWwoJmFkaikgPSBkdmFsKCZhYWRqMSkgKiB1bHAoJnJ2KTsKKwkJCWR2YWwoJnJ2KSArPSBkdmFsKCZhZGopOworCQkJaWYgKCh3b3JkMCgmcnYpICYgRXhwX21hc2spID49CisJCQkJCUV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLVApKSB7CisJCQkJaWYgKHdvcmQwKCZydjApID09IEJpZzAgJiYgd29yZDEoJnJ2MCkgPT0gQmlnMSkKKwkJCQkJZ290byBvdmZsOworCQkJCXdvcmQwKCZydikgPSBCaWcwOworCQkJCXdvcmQxKCZydikgPSBCaWcxOworCQkJCWdvdG8gY29udDsKKwkJCQl9CisJCQllbHNlCisJCQkJd29yZDAoJnJ2KSArPSBQKkV4cF9tc2sxOworCQkJfQorCQllbHNlIHsKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwkJCWlmIChzY2FsZSAmJiB5IDw9IDIqUCpFeHBfbXNrMSkgeworCQkJCWlmIChhYWRqIDw9IDB4N2ZmZmZmZmYpIHsKKwkJCQkJaWYgKCh6ID0gYWFkaikgPD0gMCkKKwkJCQkJCXogPSAxOworCQkJCQlhYWRqID0gejsKKwkJCQkJZHZhbCgmYWFkajEpID0gZHNpZ24gPyBhYWRqIDogLWFhZGo7CisJCQkJCX0KKwkJCQl3b3JkMCgmYWFkajEpICs9ICgyKlArMSkqRXhwX21zazEgLSB5OworCQkJCX0KKwkJCWR2YWwoJmFkaikgPSBkdmFsKCZhYWRqMSkgKiB1bHAoJnJ2KTsKKwkJCWR2YWwoJnJ2KSArPSBkdmFsKCZhZGopOworI2Vsc2UKKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCQlpZiAoKHdvcmQwKCZydikgJiBFeHBfbWFzaykgPD0gUCpFeHBfbXNrMSkgeworCQkJCWR2YWwoJnJ2MCkgPSBkdmFsKCZydik7CisJCQkJd29yZDAoJnJ2KSArPSBQKkV4cF9tc2sxOworCQkJCWR2YWwoJmFkaikgPSBkdmFsKCZhYWRqMSkgKiB1bHAoJnJ2KTsKKwkJCQlkdmFsKCZydikgKz0gZHZhbCgmYWRqKTsKKyNpZmRlZiBJQk0KKwkJCQlpZiAoKHdvcmQwKCZydikgJiBFeHBfbWFzaykgPCAgUCpFeHBfbXNrMSkKKyNlbHNlCisJCQkJaWYgKCh3b3JkMCgmcnYpICYgRXhwX21hc2spIDw9IFAqRXhwX21zazEpCisjZW5kaWYKKwkJCQkJeworCQkJCQlpZiAod29yZDAoJnJ2MCkgPT0gVGlueTAKKwkJCQkJICYmIHdvcmQxKCZydjApID09IFRpbnkxKQorCQkJCQkJZ290byB1bmRmbDsKKwkJCQkJd29yZDAoJnJ2KSA9IFRpbnkwOworCQkJCQl3b3JkMSgmcnYpID0gVGlueTE7CisJCQkJCWdvdG8gY29udDsKKwkJCQkJfQorCQkJCWVsc2UKKwkJCQkJd29yZDAoJnJ2KSAtPSBQKkV4cF9tc2sxOworCQkJCX0KKwkJCWVsc2UgeworCQkJCWR2YWwoJmFkaikgPSBkdmFsKCZhYWRqMSkgKiB1bHAoJnJ2KTsKKwkJCQlkdmFsKCZydikgKz0gZHZhbCgmYWRqKTsKKwkJCQl9CisjZWxzZSAvKlN1ZGRlbl9VbmRlcmZsb3cqLworCQkJLyogQ29tcHV0ZSBkdmFsKCZhZGopIHNvIHRoYXQgdGhlIElFRUUgcm91bmRpbmcgcnVsZXMgd2lsbAorCQkJICogY29ycmVjdGx5IHJvdW5kIHJ2ICsgZHZhbCgmYWRqKSBpbiBzb21lIGhhbGYtd2F5IGNhc2VzLgorCQkJICogSWYgcnYgKiB1bHAoJnJ2KSBpcyBkZW5vcm1hbGl6ZWQgKGkuZS4sCisJCQkgKiB5IDw9IChQLTEpKkV4cF9tc2sxKSwgd2UgbXVzdCBhZGp1c3QgYWFkaiB0byBhdm9pZAorCQkJICogdHJvdWJsZSBmcm9tIGJpdHMgbG9zdCB0byBkZW5vcm1hbGl6YXRpb247CisJCQkgKiBleGFtcGxlOiAxLjJlLTMwNyAuCisJCQkgKi8KKwkJCWlmICh5IDw9IChQLTEpKkV4cF9tc2sxICYmIGFhZGogPiAxLikgeworCQkJCWR2YWwoJmFhZGoxKSA9IChkb3VibGUpKGludCkoYWFkaiArIDAuNSk7CisJCQkJaWYgKCFkc2lnbikKKwkJCQkJZHZhbCgmYWFkajEpID0gLWR2YWwoJmFhZGoxKTsKKwkJCQl9CisJCQlkdmFsKCZhZGopID0gZHZhbCgmYWFkajEpICogdWxwKCZydik7CisJCQlkdmFsKCZydikgKz0gYWRqOworI2VuZGlmIC8qU3VkZGVuX1VuZGVyZmxvdyovCisjZW5kaWYgLypBdm9pZF9VbmRlcmZsb3cqLworCQkJfQorCQl6ID0gd29yZDAoJnJ2KSAmIEV4cF9tYXNrOworI2lmbmRlZiBTRVRfSU5FWEFDVAorI2lmZGVmIEF2b2lkX1VuZGVyZmxvdworCQlpZiAoIXNjYWxlKQorI2VuZGlmCisJCWlmICh5ID09IHopIHsKKwkJCS8qIENhbiB3ZSBzdG9wIG5vdz8gKi8KKwkJCUwgPSAoTG9uZylhYWRqOworCQkJYWFkaiAtPSBMOworCQkJLyogVGhlIHRvbGVyYW5jZXMgYmVsb3cgYXJlIGNvbnNlcnZhdGl2ZS4gKi8KKwkJCWlmIChkc2lnbiB8fCB3b3JkMSgmcnYpIHx8IHdvcmQwKCZydikgJiBCbmRyeV9tYXNrKSB7CisJCQkJaWYgKGFhZGogPCAuNDk5OTk5OSB8fCBhYWRqID4gLjUwMDAwMDEpCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWVsc2UgaWYgKGFhZGogPCAuNDk5OTk5OS9GTFRfUkFESVgpCisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKKyBjb250OgorCQlCZnJlZShiYik7CisJCUJmcmVlKGJkKTsKKwkJQmZyZWUoYnMpOworCQlCZnJlZShkZWx0YSk7CisJCX0KKwlCZnJlZShiYik7CisJQmZyZWUoYmQpOworCUJmcmVlKGJzKTsKKwlCZnJlZShiZDApOworCUJmcmVlKGRlbHRhKTsKKyNpZmRlZiBTRVRfSU5FWEFDVAorCWlmIChpbmV4YWN0KSB7CisJCWlmICghb2xkaW5leGFjdCkgeworCQkJd29yZDAoJnJ2MCkgPSBFeHBfMSArICg3MCA8PCBFeHBfc2hpZnQpOworCQkJd29yZDEoJnJ2MCkgPSAwOworCQkJZHZhbCgmcnYwKSArPSAxLjsKKwkJCX0KKwkJfQorCWVsc2UgaWYgKCFvbGRpbmV4YWN0KQorCQljbGVhcl9pbmV4YWN0KCk7CisjZW5kaWYKKyNpZmRlZiBBdm9pZF9VbmRlcmZsb3cKKwlpZiAoc2NhbGUpIHsKKwkJd29yZDAoJnJ2MCkgPSBFeHBfMSAtIDIqUCpFeHBfbXNrMTsKKwkJd29yZDEoJnJ2MCkgPSAwOworCQlkdmFsKCZydikgKj0gZHZhbCgmcnYwKTsKKyNpZm5kZWYgTk9fRVJSTk8KKwkJLyogdHJ5IHRvIGF2b2lkIHRoZSBidWcgb2YgdGVzdGluZyBhbiA4MDg3IHJlZ2lzdGVyIHZhbHVlICovCisjaWZkZWYgSUVFRV9Bcml0aAorCQlpZiAoISh3b3JkMCgmcnYpICYgRXhwX21hc2spKQorI2Vsc2UKKwkJaWYgKHdvcmQwKCZydikgPT0gMCAmJiB3b3JkMSgmcnYpID09IDApCisjZW5kaWYKKwkJCWVycm5vID0gRVJBTkdFOworI2VuZGlmCisJCX0KKyNlbmRpZiAvKiBBdm9pZF9VbmRlcmZsb3cgKi8KKyNpZmRlZiBTRVRfSU5FWEFDVAorCWlmIChpbmV4YWN0ICYmICEod29yZDAoJnJ2KSAmIEV4cF9tYXNrKSkgeworCQkvKiBzZXQgdW5kZXJmbG93IGJpdCAqLworCQlkdmFsKCZydjApID0gMWUtMzAwOworCQlkdmFsKCZydjApICo9IGR2YWwoJnJ2MCk7CisJCX0KKyNlbmRpZgorIHJldDoKKwlpZiAoc2UpCisJCSpzZSA9IChjaGFyICopczsKKwlyZXR1cm4gc2lnbiA/IC1kdmFsKCZydikgOiBkdmFsKCZydik7CisJfQorCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9kZy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvZGcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTNmNmJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvZGcuYwpAQCAtMCwwICsxLDExNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OC0yMDAxIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworI2lmZGVmIFVTRV9MT0NBTEUKKyNpbmNsdWRlICJsb2NhbGUuaCIKKyNlbmRpZgorCisgc3RhdGljIENPTlNUIGludAorZml2ZXNiaXRzW10gPSB7CSAwLCAgMywgIDUsICA3LCAxMCwgMTIsIDE0LCAxNywgMTksIDIxLAorCQkyNCwgMjYsIDI4LCAzMSwgMzMsIDM1LCAzOCwgNDAsIDQyLCA0NSwKKwkJNDcsIDQ5LCA1MgorI2lmZGVmIFZBWAorCQksIDU0LCA1NgorI2VuZGlmCisJCX07CisKKyBCaWdpbnQgKgorI2lmZGVmIEtSX2hlYWRlcnMKK2luY3JlbWVudChiKSBCaWdpbnQgKmI7CisjZWxzZQoraW5jcmVtZW50KEJpZ2ludCAqYikKKyNlbmRpZgoreworCVVMb25nICp4LCAqeGU7CisJQmlnaW50ICpiMTsKKyNpZmRlZiBQYWNrXzE2CisJVUxvbmcgY2FycnkgPSAxLCB5OworI2VuZGlmCisKKwl4ID0gYi0+eDsKKwl4ZSA9IHggKyBiLT53ZHM7CisjaWZkZWYgUGFja18zMgorCWRvIHsKKwkJaWYgKCp4IDwgKFVMb25nKTB4ZmZmZmZmZmZMKSB7CisJCQkrKyp4OworCQkJcmV0dXJuIGI7CisJCQl9CisJCSp4KysgPSAwOworCQl9IHdoaWxlKHggPCB4ZSk7CisjZWxzZQorCWRvIHsKKwkJeSA9ICp4ICsgY2Fycnk7CisJCWNhcnJ5ID0geSA+PiAxNjsKKwkJKngrKyA9IHkgJiAweGZmZmY7CisJCWlmICghY2FycnkpCisJCQlyZXR1cm4gYjsKKwkJfSB3aGlsZSh4IDwgeGUpOworCWlmIChjYXJyeSkKKyNlbmRpZgorCXsKKwkJaWYgKGItPndkcyA+PSBiLT5tYXh3ZHMpIHsKKwkJCWIxID0gQmFsbG9jKGItPmsrMSk7CisJCQlpZiAoYjEgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJQmNvcHkoYjEsYik7CisJCQlCZnJlZShiKTsKKwkJCWIgPSBiMTsKKwkJCX0KKwkJYi0+eFtiLT53ZHMrK10gPSAxOworCQl9CisJcmV0dXJuIGI7CisJfQorCisgdm9pZAorI2lmZGVmIEtSX2hlYWRlcnMKK2RlY3JlbWVudChiKSBCaWdpbnQgKmI7CisjZWxzZQorZGVjcmVtZW50KEJpZ2ludCAqYikKKyNlbmRpZgoreworCVVMb25nICp4LCAqeGU7CisjaWZkZWYgUGFja18xNgorCVVMb25nIGJvcnJvdyA9IDEsIHk7CisjZW5kaWYKKworCXggPSBiLT54OworCXhlID0geCArIGItPndkczsKKyNpZmRlZiBQYWNrXzMyCisJZG8geworCQlpZiAoKngpIHsKKwkJCS0tKng7CisJCQlicmVhazsKKwkJCX0KKwkJKngrKyA9IDB4ZmZmZmZmZmZMOworCQl9CisJCXdoaWxlKHggPCB4ZSk7CisjZWxzZQorCWRvIHsKKwkJeSA9ICp4IC0gYm9ycm93OworCQlib3Jyb3cgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQkqeCsrID0geSAmIDB4ZmZmZjsKKwkJfSB3aGlsZShib3Jyb3cgJiYgeCA8IHhlKTsKKyNlbmRpZgorCX0KKworIHN0YXRpYyBpbnQKKyNpZmRlZiBLUl9oZWFkZXJzCithbGxfb24oYiwgbikgQmlnaW50ICpiOyBpbnQgbjsKKyNlbHNlCithbGxfb24oQmlnaW50ICpiLCBpbnQgbikKKyNlbmRpZgoreworCVVMb25nICp4LCAqeGU7CisKKwl4ID0gYi0+eDsKKwl4ZSA9IHggKyAobiA+PiBrc2hpZnQpOworCXdoaWxlKHggPCB4ZSkKKwkJaWYgKCgqeCsrICYgQUxMX09OKSAhPSBBTExfT04pCisJCQlyZXR1cm4gMDsKKwlpZiAobiAmPSBrbWFzaykKKwkJcmV0dXJuICgoKnggfCAoQUxMX09OIDw8IG4pKSAmIEFMTF9PTikgPT0gQUxMX09OOworCXJldHVybiAxOworCX0KKworIEJpZ2ludCAqCisjaWZkZWYgS1JfaGVhZGVycworc2V0X29uZXMoYiwgbikgQmlnaW50ICpiOyBpbnQgbjsKKyNlbHNlCitzZXRfb25lcyhCaWdpbnQgKmIsIGludCBuKQorI2VuZGlmCit7CisJaW50IGs7CisJVUxvbmcgKngsICp4ZTsKKworCWsgPSAobiArICgoMSA8PCBrc2hpZnQpIC0gMSkpID4+IGtzaGlmdDsKKwlpZiAoYi0+ayA8IGspIHsKKwkJQmZyZWUoYik7CisJCWIgPSBCYWxsb2Moayk7CisJCWlmIChiID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJayA9IG4gPj4ga3NoaWZ0OworCWlmIChuICY9IGttYXNrKQorCQlrKys7CisJYi0+d2RzID0gazsKKwl4ID0gYi0+eDsKKwl4ZSA9IHggKyBrOworCXdoaWxlKHggPCB4ZSkKKwkJKngrKyA9IEFMTF9PTjsKKwlpZiAobikKKwkJeFstMV0gPj49IFVMYml0cyAtIG47CisJcmV0dXJuIGI7CisJfQorCisgc3RhdGljIGludAorcnZPSworI2lmZGVmIEtSX2hlYWRlcnMKKyAoZCwgZnBpLCBleHAsIGJpdHMsIGV4YWN0LCByZCwgaXJ2KQorIFUgKmQ7IEZQSSAqZnBpOyBMb25nICpleHA7IFVMb25nICpiaXRzOyBpbnQgZXhhY3QsIHJkLCAqaXJ2OworI2Vsc2UKKyAoVSAqZCwgRlBJICpmcGksIExvbmcgKmV4cCwgVUxvbmcgKmJpdHMsIGludCBleGFjdCwgaW50IHJkLCBpbnQgKmlydikKKyNlbmRpZgoreworCUJpZ2ludCAqYjsKKwlVTG9uZyBjYXJyeSwgaW5leCwgbG9zdGJpdHM7CisJaW50IGJkaWYsIGUsIGosIGssIGsxLCBuYiwgcnY7CisKKwljYXJyeSA9IHJ2ID0gMDsKKwliID0gZDJiKGR2YWwoZCksICZlLCAmYmRpZik7CisJaWYgKGIgPT0gTlVMTCkgeworCQkqaXJ2ID0gU1RSVE9HX05vTWVtb3J5OworCQlyZXR1cm4gKDEpOworCX0KKwliZGlmIC09IG5iID0gZnBpLT5uYml0czsKKwllICs9IGJkaWY7CisJaWYgKGJkaWYgPD0gMCkgeworCQlpZiAoZXhhY3QpCisJCQlnb3RvIHRydW5jOworCQlnb3RvIHJldDsKKwkJfQorCWlmIChQID09IG5iKSB7CisJCWlmICgKKyNpZm5kZWYgSU1QUkVDSVNFX0lORVhBQ1QKKwkJCWV4YWN0ICYmCisjZW5kaWYKKwkJCWZwaS0+cm91bmRpbmcgPT0KKyNpZmRlZiBSTkRfUFJPRFFVT1QKKwkJCQkJRlBJX1JvdW5kX25lYXIKKyNlbHNlCisJCQkJCUZsdF9Sb3VuZHMKKyNlbmRpZgorCQkJKSBnb3RvIHRydW5jOworCQlnb3RvIHJldDsKKwkJfQorCXN3aXRjaChyZCkgeworCSAgY2FzZSAxOiAvKiByb3VuZCBkb3duICh0b3dhcmQgLUluZmluaXR5KSAqLworCQlnb3RvIHRydW5jOworCSAgY2FzZSAyOiAvKiByb3VuZCB1cCAodG93YXJkICtJbmZpbml0eSkgKi8KKwkJYnJlYWs7CisJICBkZWZhdWx0OiAvKiByb3VuZCBuZWFyICovCisJCWsgPSBiZGlmIC0gMTsKKwkJaWYgKGsgPCAwKQorCQkJZ290byB0cnVuYzsKKwkJaWYgKCFrKSB7CisJCQlpZiAoIWV4YWN0KQorCQkJCWdvdG8gcmV0OworCQkJaWYgKGItPnhbMF0gJiAyKQorCQkJCWJyZWFrOworCQkJZ290byB0cnVuYzsKKwkJCX0KKwkJaWYgKGItPnhbaz4+a3NoaWZ0XSAmICgoVUxvbmcpMSA8PCAoayAmIGttYXNrKSkpCisJCQlicmVhazsKKwkJZ290byB0cnVuYzsKKwkgIH0KKwkvKiAiYnJlYWsiIGNhc2VzOiByb3VuZCB1cCAxIGJpdCwgdGhlbiB0cnVuY2F0ZTsgYmRpZiA+IDAgKi8KKwljYXJyeSA9IDE7CisgdHJ1bmM6CisJaW5leCA9IGxvc3RiaXRzID0gMDsKKwlpZiAoYmRpZiA+IDApIHsKKwkJaWYgKCAobG9zdGJpdHMgPSBhbnlfb24oYiwgYmRpZikpICE9MCkKKwkJCWluZXggPSBTVFJUT0dfSW5leGxvOworCQlyc2hpZnQoYiwgYmRpZik7CisJCWlmIChjYXJyeSkgeworCQkJaW5leCA9IFNUUlRPR19JbmV4aGk7CisJCQliID0gaW5jcmVtZW50KGIpOworCQkJaWYgKGIgPT0gTlVMTCkgeworCQkJCSppcnYgPSBTVFJUT0dfTm9NZW1vcnk7CisJCQkJcmV0dXJuICgxKTsKKwkJCQl9CisJCQlpZiAoIChqID0gbmIgJiBrbWFzaykgIT0wKQorCQkJCWogPSBVTGJpdHMgLSBqOworCQkJaWYgKGhpMGJpdHMoYi0+eFtiLT53ZHMgLSAxXSkgIT0gaikgeworCQkJCWlmICghbG9zdGJpdHMpCisJCQkJCWxvc3RiaXRzID0gYi0+eFswXSAmIDE7CisJCQkJcnNoaWZ0KGIsIDEpOworCQkJCWUrKzsKKwkJCQl9CisJCQl9CisJCX0KKwllbHNlIGlmIChiZGlmIDwgMCkgeworCQliID0gbHNoaWZ0KGIsIC1iZGlmKTsKKwkJaWYgKGIgPT0gTlVMTCkgeworCQkJKmlydiA9IFNUUlRPR19Ob01lbW9yeTsKKwkJCXJldHVybiAoMSk7CisJCQl9CisJCX0KKwlpZiAoZSA8IGZwaS0+ZW1pbikgeworCQlrID0gZnBpLT5lbWluIC0gZTsKKwkJZSA9IGZwaS0+ZW1pbjsKKwkJaWYgKGsgPiBuYiB8fCBmcGktPnN1ZGRlbl91bmRlcmZsb3cpIHsKKwkJCWItPndkcyA9IGluZXggPSAwOworCQkJKmlydiA9IFNUUlRPR19VbmRlcmZsb3cgfCBTVFJUT0dfSW5leGxvOworCQkJfQorCQllbHNlIHsKKwkJCWsxID0gayAtIDE7CisJCQlpZiAoazEgPiAwICYmICFsb3N0Yml0cykKKwkJCQlsb3N0Yml0cyA9IGFueV9vbihiLCBrMSk7CisJCQlpZiAoIWxvc3RiaXRzICYmICFleGFjdCkKKwkJCQlnb3RvIHJldDsKKwkJCWxvc3RiaXRzIHw9CisJCQkgIGNhcnJ5ID0gYi0+eFtrMT4+a3NoaWZ0XSAmICgxIDw8IChrMSAmIGttYXNrKSk7CisJCQlyc2hpZnQoYiwgayk7CisJCQkqaXJ2ID0gU1RSVE9HX0Rlbm9ybWFsOworCQkJaWYgKGNhcnJ5KSB7CisJCQkJYiA9IGluY3JlbWVudChiKTsKKwkJCQlpZiAoYiA9PSBOVUxMKSB7CisJCQkJCSppcnYgPSBTVFJUT0dfTm9NZW1vcnk7CisJCQkJCXJldHVybiAoMSk7CisJCQkJCX0KKwkJCQlpbmV4ID0gU1RSVE9HX0luZXhoaSB8IFNUUlRPR19VbmRlcmZsb3c7CisJCQkJfQorCQkJZWxzZSBpZiAobG9zdGJpdHMpCisJCQkJaW5leCA9IFNUUlRPR19JbmV4bG8gfCBTVFJUT0dfVW5kZXJmbG93OworCQkJfQorCQl9CisJZWxzZSBpZiAoZSA+IGZwaS0+ZW1heCkgeworCQllID0gZnBpLT5lbWF4ICsgMTsKKwkJKmlydiA9IFNUUlRPR19JbmZpbml0ZSB8IFNUUlRPR19PdmVyZmxvdyB8IFNUUlRPR19JbmV4aGk7CisjaWZuZGVmIE5PX0VSUk5PCisJCWVycm5vID0gRVJBTkdFOworI2VuZGlmCisJCWItPndkcyA9IGluZXggPSAwOworCQl9CisJKmV4cCA9IGU7CisJY29weWJpdHMoYml0cywgbmIsIGIpOworCSppcnYgfD0gaW5leDsKKwlydiA9IDE7CisgcmV0OgorCUJmcmVlKGIpOworCXJldHVybiBydjsKKwl9CisKKyBzdGF0aWMgaW50CisjaWZkZWYgS1JfaGVhZGVycworbWFudGJpdHMoZCkgVSAqZDsKKyNlbHNlCittYW50Yml0cyhVICpkKQorI2VuZGlmCit7CisJVUxvbmcgTDsKKyNpZmRlZiBWQVgKKwlMID0gd29yZDEoZCkgPDwgMTYgfCB3b3JkMShkKSA+PiAxNjsKKwlpZiAoTCkKKyNlbHNlCisJaWYgKCAoTCA9IHdvcmQxKGQpKSAhPTApCisjZW5kaWYKKwkJcmV0dXJuIFAgLSBsbzBiaXRzKCZMKTsKKyNpZmRlZiBWQVgKKwlMID0gd29yZDAoZCkgPDwgMTYgfCB3b3JkMChkKSA+PiAxNiB8IEV4cF9tc2sxMTsKKyNlbHNlCisJTCA9IHdvcmQwKGQpIHwgRXhwX21zazE7CisjZW5kaWYKKwlyZXR1cm4gUCAtIDMyIC0gbG8wYml0cygmTCk7CisJfQorCisgaW50CitzdHJ0b2RnCisjaWZkZWYgS1JfaGVhZGVycworCShzMDAsIHNlLCBmcGksIGV4cCwgYml0cykKKwlDT05TVCBjaGFyICpzMDA7IGNoYXIgKipzZTsgRlBJICpmcGk7IExvbmcgKmV4cDsgVUxvbmcgKmJpdHM7CisjZWxzZQorCShDT05TVCBjaGFyICpzMDAsIGNoYXIgKipzZSwgRlBJICpmcGksIExvbmcgKmV4cCwgVUxvbmcgKmJpdHMpCisjZW5kaWYKK3sKKwlpbnQgYWJlLCBhYml0cywgYXN1YjsKKwlpbnQgYmIwLCBiYjIsIGJiNSwgYmJlLCBiZDIsIGJkNSwgYmJiaXRzLCBiczIsIGMsIGRlY3B0LCBkZW5vcm07CisJaW50IGRzaWduLCBlLCBlMSwgZTIsIGVtaW4sIGVzaWduLCBmaW5pc2hlZCwgaSwgaW5leCwgaXJ2OworCWludCBqLCBrLCBuYml0cywgbmQsIG5kMCwgbmYsIG56LCBuejAsIHJkLCBydmJpdHMsIHJ2ZSwgcnZlMSwgc2lnbjsKKwlpbnQgc3VkZGVuX3VuZGVyZmxvdzsKKwlDT05TVCBjaGFyICpzLCAqczAsICpzMTsKKwlkb3VibGUgYWRqMCwgdG9sOworCUxvbmcgTDsKKwlVIGFkaiwgcnY7CisJVUxvbmcgKmIsICpiZSwgeSwgejsKKwlCaWdpbnQgKmFiLCAqYmIsICpiYjEsICpiZCwgKmJkMCwgKmJzLCAqZGVsdGEsICpydmIsICpydmIwOworI2lmZGVmIFVTRV9MT0NBTEUgLyp7eyovCisjaWZkZWYgTk9fTE9DQUxFX0NBQ0hFCisJY2hhciAqZGVjaW1hbHBvaW50ID0gbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50OworCWludCBkcGxlbiA9IHN0cmxlbihkZWNpbWFscG9pbnQpOworI2Vsc2UKKwljaGFyICpkZWNpbWFscG9pbnQ7CisJc3RhdGljIGNoYXIgKmRlY2ltYWxwb2ludF9jYWNoZTsKKwlzdGF0aWMgaW50IGRwbGVuOworCWlmICghKHMwID0gZGVjaW1hbHBvaW50X2NhY2hlKSkgeworCQlzMCA9IGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludDsKKwkJaWYgKChkZWNpbWFscG9pbnRfY2FjaGUgPSAoY2hhciopTUFMTE9DKHN0cmxlbihzMCkgKyAxKSkpIHsKKwkJCXN0cmxjcHkoZGVjaW1hbHBvaW50X2NhY2hlLCBzMCwgc3RybGVuKHMwKSArIDEpOworCQkJczAgPSBkZWNpbWFscG9pbnRfY2FjaGU7CisJCQl9CisJCWRwbGVuID0gc3RybGVuKHMwKTsKKwkJfQorCWRlY2ltYWxwb2ludCA9IChjaGFyKilzMDsKKyNlbmRpZiAvKk5PX0xPQ0FMRV9DQUNIRSovCisjZWxzZSAgLypVU0VfTE9DQUxFfXsqLworI2RlZmluZSBkcGxlbiAxCisjZW5kaWYgLypVU0VfTE9DQUxFfX0qLworCisJaXJ2ID0gU1RSVE9HX1plcm87CisJZGVub3JtID0gc2lnbiA9IG56MCA9IG56ID0gMDsKKwlkdmFsKCZydikgPSAwLjsKKwlydmIgPSAwOworCW5iaXRzID0gZnBpLT5uYml0czsKKwlmb3IocyA9IHMwMDs7cysrKSBzd2l0Y2goKnMpIHsKKwkJY2FzZSAnLSc6CisJCQlzaWduID0gMTsKKwkJCS8qIG5vIGJyZWFrICovCisJCWNhc2UgJysnOgorCQkJaWYgKCorK3MpCisJCQkJZ290byBicmVhazI7CisJCQkvKiBubyBicmVhayAqLworCQljYXNlIDA6CisJCQlzaWduID0gMDsKKwkJCWlydiA9IFNUUlRPR19Ob051bWJlcjsKKwkJCXMgPSBzMDA7CisJCQlnb3RvIHJldDsKKwkJY2FzZSAnXHQnOgorCQljYXNlICdcbic6CisJCWNhc2UgJ1x2JzoKKwkJY2FzZSAnXGYnOgorCQljYXNlICdccic6CisJCWNhc2UgJyAnOgorCQkJY29udGludWU7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGJyZWFrMjsKKwkJfQorIGJyZWFrMjoKKwlpZiAoKnMgPT0gJzAnKSB7CisjaWZuZGVmIE5PX0hFWF9GUAorCQlzd2l0Y2goc1sxXSkgeworCQkgIGNhc2UgJ3gnOgorCQkgIGNhc2UgJ1gnOgorCQkJaXJ2ID0gZ2V0aGV4KCZzLCBmcGksIGV4cCwgJnJ2Yiwgc2lnbik7CisJCQlpZiAoaXJ2ID09IFNUUlRPR19Ob01lbW9yeSkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQlpZiAoaXJ2ID09IFNUUlRPR19Ob051bWJlcikgeworCQkJCXMgPSBzMDA7CisJCQkJc2lnbiA9IDA7CisJCQkJfQorCQkJZ290byByZXQ7CisJCSAgfQorI2VuZGlmCisJCW56MCA9IDE7CisJCXdoaWxlKCorK3MgPT0gJzAnKSA7CisJCWlmICghKnMpCisJCQlnb3RvIHJldDsKKwkJfQorCXN1ZGRlbl91bmRlcmZsb3cgPSBmcGktPnN1ZGRlbl91bmRlcmZsb3c7CisJczAgPSBzOworCXkgPSB6ID0gMDsKKwlmb3IoZGVjcHQgPSBuZCA9IG5mID0gMDsgKGMgPSAqcykgPj0gJzAnICYmIGMgPD0gJzknOyBuZCsrLCBzKyspCisJCWlmIChuZCA8IDkpCisJCQl5ID0gMTAqeSArIGMgLSAnMCc7CisJCWVsc2UgaWYgKG5kIDwgMTYpCisJCQl6ID0gMTAqeiArIGMgLSAnMCc7CisJbmQwID0gbmQ7CisjaWZkZWYgVVNFX0xPQ0FMRQorCWlmIChjID09ICpkZWNpbWFscG9pbnQpIHsKKwkJZm9yKGkgPSAxOyBkZWNpbWFscG9pbnRbaV07ICsraSkKKwkJCWlmIChzW2ldICE9IGRlY2ltYWxwb2ludFtpXSkKKwkJCQlnb3RvIGRpZ19kb25lOworCQlzICs9IGk7CisJCWMgPSAqczsKKyNlbHNlCisJaWYgKGMgPT0gJy4nKSB7CisJCWMgPSAqKytzOworI2VuZGlmCisJCWRlY3B0ID0gMTsKKwkJaWYgKCFuZCkgeworCQkJZm9yKDsgYyA9PSAnMCc7IGMgPSAqKytzKQorCQkJCW56Kys7CisJCQlpZiAoYyA+ICcwJyAmJiBjIDw9ICc5JykgeworCQkJCXMwID0gczsKKwkJCQluZiArPSBuejsKKwkJCQlueiA9IDA7CisJCQkJZ290byBoYXZlX2RpZzsKKwkJCQl9CisJCQlnb3RvIGRpZ19kb25lOworCQkJfQorCQlmb3IoOyBjID49ICcwJyAmJiBjIDw9ICc5JzsgYyA9ICorK3MpIHsKKyBoYXZlX2RpZzoKKwkJCW56Kys7CisJCQlpZiAoYyAtPSAnMCcpIHsKKwkJCQluZiArPSBuejsKKwkJCQlmb3IoaSA9IDE7IGkgPCBuejsgaSsrKQorCQkJCQlpZiAobmQrKyA8IDkpCisJCQkJCQl5ICo9IDEwOworCQkJCQllbHNlIGlmIChuZCA8PSBEQkxfRElHICsgMSkKKwkJCQkJCXogKj0gMTA7CisJCQkJaWYgKG5kKysgPCA5KQorCQkJCQl5ID0gMTAqeSArIGM7CisJCQkJZWxzZSBpZiAobmQgPD0gREJMX0RJRyArIDEpCisJCQkJCXogPSAxMCp6ICsgYzsKKwkJCQlueiA9IDA7CisJCQkJfQorCQkJfQorCQl9Lyp9Ki8KKyBkaWdfZG9uZToKKwllID0gMDsKKwlpZiAoYyA9PSAnZScgfHwgYyA9PSAnRScpIHsKKwkJaWYgKCFuZCAmJiAhbnogJiYgIW56MCkgeworCQkJaXJ2ID0gU1RSVE9HX05vTnVtYmVyOworCQkJcyA9IHMwMDsKKwkJCWdvdG8gcmV0OworCQkJfQorCQlzMDAgPSBzOworCQllc2lnbiA9IDA7CisJCXN3aXRjaChjID0gKisrcykgeworCQkJY2FzZSAnLSc6CisJCQkJZXNpZ24gPSAxOworCQkJY2FzZSAnKyc6CisJCQkJYyA9ICorK3M7CisJCQl9CisJCWlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgeworCQkJd2hpbGUoYyA9PSAnMCcpCisJCQkJYyA9ICorK3M7CisJCQlpZiAoYyA+ICcwJyAmJiBjIDw9ICc5JykgeworCQkJCUwgPSBjIC0gJzAnOworCQkJCXMxID0gczsKKwkJCQl3aGlsZSgoYyA9ICorK3MpID49ICcwJyAmJiBjIDw9ICc5JykKKwkJCQkJTCA9IDEwKkwgKyBjIC0gJzAnOworCQkJCWlmIChzIC0gczEgPiA4IHx8IEwgPiAxOTk5OSkKKwkJCQkJLyogQXZvaWQgY29uZnVzaW9uIGZyb20gZXhwb25lbnRzCisJCQkJCSAqIHNvIGxhcmdlIHRoYXQgZSBtaWdodCBvdmVyZmxvdy4KKwkJCQkJICovCisJCQkJCWUgPSAxOTk5OTsgLyogc2FmZSBmb3IgMTYgYml0IGludHMgKi8KKwkJCQllbHNlCisJCQkJCWUgPSAoaW50KUw7CisJCQkJaWYgKGVzaWduKQorCQkJCQllID0gLWU7CisJCQkJfQorCQkJZWxzZQorCQkJCWUgPSAwOworCQkJfQorCQllbHNlCisJCQlzID0gczAwOworCQl9CisJaWYgKCFuZCkgeworCQlpZiAoIW56ICYmICFuejApIHsKKyNpZmRlZiBJTkZOQU5fQ0hFQ0sKKwkJCS8qIENoZWNrIGZvciBOYW4gYW5kIEluZmluaXR5ICovCisJCQlpZiAoIWRlY3B0KQorCQkJIHN3aXRjaChjKSB7CisJCQkgIGNhc2UgJ2knOgorCQkJICBjYXNlICdJJzoKKwkJCQlpZiAobWF0Y2goJnMsIm5mIikpIHsKKwkJCQkJLS1zOworCQkJCQlpZiAoIW1hdGNoKCZzLCJpbml0eSIpKQorCQkJCQkJKytzOworCQkJCQlpcnYgPSBTVFJUT0dfSW5maW5pdGU7CisJCQkJCWdvdG8gaW5mbmFuZXhwOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkgIGNhc2UgJ24nOgorCQkJICBjYXNlICdOJzoKKwkJCQlpZiAobWF0Y2goJnMsICJhbiIpKSB7CisJCQkJCWlydiA9IFNUUlRPR19OYU47CisJCQkJCSpleHAgPSBmcGktPmVtYXggKyAxOworI2lmbmRlZiBOb19IZXhfTmFOCisJCQkJCWlmICgqcyA9PSAnKCcpIC8qKSovCisJCQkJCQlpcnYgPSBoZXhuYW4oJnMsIGZwaSwgYml0cyk7CisjZW5kaWYKKwkJCQkJZ290byBpbmZuYW5leHA7CisJCQkJCX0KKwkJCSAgfQorI2VuZGlmIC8qIElORk5BTl9DSEVDSyAqLworCQkJaXJ2ID0gU1RSVE9HX05vTnVtYmVyOworCQkJcyA9IHMwMDsKKwkJCX0KKwkJZ290byByZXQ7CisJCX0KKworCWlydiA9IFNUUlRPR19Ob3JtYWw7CisJZTEgPSBlIC09IG5mOworCXJkID0gMDsKKwlzd2l0Y2goZnBpLT5yb3VuZGluZyAmIDMpIHsKKwkgIGNhc2UgRlBJX1JvdW5kX3VwOgorCQlyZCA9IDIgLSBzaWduOworCQlicmVhazsKKwkgIGNhc2UgRlBJX1JvdW5kX3plcm86CisJCXJkID0gMTsKKwkJYnJlYWs7CisJICBjYXNlIEZQSV9Sb3VuZF9kb3duOgorCQlyZCA9IDEgKyBzaWduOworCSAgfQorCisJLyogTm93IHdlIGhhdmUgbmQwIGRpZ2l0cywgc3RhcnRpbmcgYXQgczAsIGZvbGxvd2VkIGJ5IGEKKwkgKiBkZWNpbWFsIHBvaW50LCBmb2xsb3dlZCBieSBuZC1uZDAgZGlnaXRzLiAgVGhlIG51bWJlciB3ZSdyZQorCSAqIGFmdGVyIGlzIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRob3NlIGRpZ2l0cyB0aW1lcworCSAqIDEwKiplICovCisKKwlpZiAoIW5kMCkKKwkJbmQwID0gbmQ7CisJayA9IG5kIDwgREJMX0RJRyArIDEgPyBuZCA6IERCTF9ESUcgKyAxOworCWR2YWwoJnJ2KSA9IHk7CisJaWYgKGsgPiA5KQorCQlkdmFsKCZydikgPSB0ZW5zW2sgLSA5XSAqIGR2YWwoJnJ2KSArIHo7CisJYmQwID0gMDsKKwlpZiAobmJpdHMgPD0gUCAmJiBuZCA8PSBEQkxfRElHKSB7CisJCWlmICghZSkgeworCQkJaWYgKHJ2T0soJnJ2LCBmcGksIGV4cCwgYml0cywgMSwgcmQsICZpcnYpKSB7CisJCQkJaWYgKGlydiA9PSBTVFJUT0dfTm9NZW1vcnkpCisJCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCQl9CisJCWVsc2UgaWYgKGUgPiAwKSB7CisJCQlpZiAoZSA8PSBUZW5fcG1heCkgeworI2lmZGVmIFZBWAorCQkJCWdvdG8gdmF4X292ZmxfY2hlY2s7CisjZWxzZQorCQkJCWkgPSBmaXZlc2JpdHNbZV0gKyBtYW50Yml0cygmcnYpIDw9IFA7CisJCQkJLyogcnYgPSAqLyByb3VuZGVkX3Byb2R1Y3QoZHZhbCgmcnYpLCB0ZW5zW2VdKTsKKwkJCQlpZiAocnZPSygmcnYsIGZwaSwgZXhwLCBiaXRzLCBpLCByZCwgJmlydikpIHsKKwkJCQkJaWYgKGlydiA9PSBTVFJUT0dfTm9NZW1vcnkpCisJCQkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQkJCWdvdG8gcmV0OworCQkJCQl9CisJCQkJZTEgLT0gZTsKKwkJCQlnb3RvIHJ2X25vdE9LOworI2VuZGlmCisJCQkJfQorCQkJaSA9IERCTF9ESUcgLSBuZDsKKwkJCWlmIChlIDw9IFRlbl9wbWF4ICsgaSkgeworCQkJCS8qIEEgZmFuY2llciB0ZXN0IHdvdWxkIHNvbWV0aW1lcyBsZXQgdXMgZG8KKwkJCQkgKiB0aGlzIGZvciBsYXJnZXIgaSB2YWx1ZXMuCisJCQkJICovCisJCQkJZTIgPSBlIC0gaTsKKwkJCQllMSAtPSBpOworCQkJCWR2YWwoJnJ2KSAqPSB0ZW5zW2ldOworI2lmZGVmIFZBWAorCQkJCS8qIFZBWCBleHBvbmVudCByYW5nZSBpcyBzbyBuYXJyb3cgd2UgbXVzdAorCQkJCSAqIHdvcnJ5IGFib3V0IG92ZXJmbG93IGhlcmUuLi4KKwkJCQkgKi8KKyB2YXhfb3ZmbF9jaGVjazoKKwkJCQlkdmFsKCZhZGopID0gZHZhbCgmcnYpOworCQkJCXdvcmQwKCZhZGopIC09IFAqRXhwX21zazE7CisJCQkJLyogYWRqID0gKi8gcm91bmRlZF9wcm9kdWN0KGR2YWwoJmFkaiksIHRlbnNbZTJdKTsKKwkJCQlpZiAoKHdvcmQwKCZhZGopICYgRXhwX21hc2spCisJCQkJID4gRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtMS1QKSkKKwkJCQkJZ290byBydl9ub3RPSzsKKwkJCQl3b3JkMCgmYWRqKSArPSBQKkV4cF9tc2sxOworCQkJCWR2YWwoJnJ2KSA9IGR2YWwoJmFkaik7CisjZWxzZQorCQkJCS8qIHJ2ID0gKi8gcm91bmRlZF9wcm9kdWN0KGR2YWwoJnJ2KSwgdGVuc1tlMl0pOworI2VuZGlmCisJCQkJaWYgKHJ2T0soJnJ2LCBmcGksIGV4cCwgYml0cywgMCwgcmQsICZpcnYpKSB7CisJCQkJCWlmIChpcnYgPT0gU1RSVE9HX05vTWVtb3J5KQorCQkJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJCQlnb3RvIHJldDsKKwkJCQkJfQorCQkJCWUxIC09IGUyOworCQkJCX0KKwkJCX0KKyNpZm5kZWYgSW5hY2N1cmF0ZV9EaXZpZGUKKwkJZWxzZSBpZiAoZSA+PSAtVGVuX3BtYXgpIHsKKwkJCS8qIHJ2ID0gKi8gcm91bmRlZF9xdW90aWVudChkdmFsKCZydiksIHRlbnNbLWVdKTsKKwkJCWlmIChydk9LKCZydiwgZnBpLCBleHAsIGJpdHMsIDAsIHJkLCAmaXJ2KSkgeworCQkJCWlmIChpcnYgPT0gU1RSVE9HX05vTWVtb3J5KQorCQkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJZTEgLT0gZTsKKwkJCX0KKyNlbmRpZgorCQl9CisgcnZfbm90T0s6CisJZTEgKz0gbmQgLSBrOworCisJLyogR2V0IHN0YXJ0aW5nIGFwcHJveGltYXRpb24gPSBydiAqIDEwKiplMSAqLworCisJZTIgPSAwOworCWlmIChlMSA+IDApIHsKKwkJaWYgKCAoaSA9IGUxICYgMTUpICE9MCkKKwkJCWR2YWwoJnJ2KSAqPSB0ZW5zW2ldOworCQlpZiAoZTEgJj0gfjE1KSB7CisJCQllMSA+Pj0gNDsKKwkJCXdoaWxlKGUxID49ICgxIDw8IChuX2JpZ3RlbnMtMSkpKSB7CisJCQkJZTIgKz0gKCh3b3JkMCgmcnYpICYgRXhwX21hc2spCisJCQkJCT4+IEV4cF9zaGlmdDEpIC0gQmlhczsKKwkJCQl3b3JkMCgmcnYpICY9IH5FeHBfbWFzazsKKwkJCQl3b3JkMCgmcnYpIHw9IEJpYXMgPDwgRXhwX3NoaWZ0MTsKKwkJCQlkdmFsKCZydikgKj0gYmlndGVuc1tuX2JpZ3RlbnMtMV07CisJCQkJZTEgLT0gMSA8PCAobl9iaWd0ZW5zLTEpOworCQkJCX0KKwkJCWUyICs9ICgod29yZDAoJnJ2KSAmIEV4cF9tYXNrKSA+PiBFeHBfc2hpZnQxKSAtIEJpYXM7CisJCQl3b3JkMCgmcnYpICY9IH5FeHBfbWFzazsKKwkJCXdvcmQwKCZydikgfD0gQmlhcyA8PCBFeHBfc2hpZnQxOworCQkJZm9yKGogPSAwOyBlMSA+IDA7IGorKywgZTEgPj49IDEpCisJCQkJaWYgKGUxICYgMSkKKwkJCQkJZHZhbCgmcnYpICo9IGJpZ3RlbnNbal07CisJCQl9CisJCX0KKwllbHNlIGlmIChlMSA8IDApIHsKKwkJZTEgPSAtZTE7CisJCWlmICggKGkgPSBlMSAmIDE1KSAhPTApCisJCQlkdmFsKCZydikgLz0gdGVuc1tpXTsKKwkJaWYgKGUxICY9IH4xNSkgeworCQkJZTEgPj49IDQ7CisJCQl3aGlsZShlMSA+PSAoMSA8PCAobl9iaWd0ZW5zLTEpKSkgeworCQkJCWUyICs9ICgod29yZDAoJnJ2KSAmIEV4cF9tYXNrKQorCQkJCQk+PiBFeHBfc2hpZnQxKSAtIEJpYXM7CisJCQkJd29yZDAoJnJ2KSAmPSB+RXhwX21hc2s7CisJCQkJd29yZDAoJnJ2KSB8PSBCaWFzIDw8IEV4cF9zaGlmdDE7CisJCQkJZHZhbCgmcnYpICo9IHRpbnl0ZW5zW25fYmlndGVucy0xXTsKKwkJCQllMSAtPSAxIDw8IChuX2JpZ3RlbnMtMSk7CisJCQkJfQorCQkJZTIgKz0gKCh3b3JkMCgmcnYpICYgRXhwX21hc2spID4+IEV4cF9zaGlmdDEpIC0gQmlhczsKKwkJCXdvcmQwKCZydikgJj0gfkV4cF9tYXNrOworCQkJd29yZDAoJnJ2KSB8PSBCaWFzIDw8IEV4cF9zaGlmdDE7CisJCQlmb3IoaiA9IDA7IGUxID4gMDsgaisrLCBlMSA+Pj0gMSkKKwkJCQlpZiAoZTEgJiAxKQorCQkJCQlkdmFsKCZydikgKj0gdGlueXRlbnNbal07CisJCQl9CisJCX0KKyNpZmRlZiBJQk0KKwkvKiBlMiBpcyBhIGNvcnJlY3Rpb24gdG8gdGhlIChiYXNlIDIpIGV4cG9uZW50IG9mIHRoZSByZXR1cm4KKwkgKiB2YWx1ZSwgcmVmbGVjdGluZyBhZGp1c3RtZW50cyBhYm92ZSB0byBhdm9pZCBvdmVyZmxvdyBpbiB0aGUKKwkgKiBuYXRpdmUgYXJpdGhtZXRpYy4gIEZvciBuYXRpdmUgSUJNIChiYXNlIDE2KSBhcml0aG1ldGljLCB3ZQorCSAqIG11c3QgbXVsdGlwbHkgZTIgYnkgNCB0byBjaGFuZ2UgZnJvbSBiYXNlIDE2IHRvIDIuCisJICovCisJZTIgPDw9IDI7CisjZW5kaWYKKwlydmIgPSBkMmIoZHZhbCgmcnYpLCAmcnZlLCAmcnZiaXRzKTsJLyogcnYgPSBydmIgKiAyXnJ2ZSAqLworCWlmIChydmIgPT0gTlVMTCkKKwkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCXJ2ZSArPSBlMjsKKwlpZiAoKGogPSBydmJpdHMgLSBuYml0cykgPiAwKSB7CisJCXJzaGlmdChydmIsIGopOworCQlydmJpdHMgPSBuYml0czsKKwkJcnZlICs9IGo7CisJCX0KKwliYjAgPSAwOwkvKiB0cmFpbGluZyB6ZXJvIGJpdHMgaW4gcnZiICovCisJZTIgPSBydmUgKyBydmJpdHMgLSBuYml0czsKKwlpZiAoZTIgPiBmcGktPmVtYXggKyAxKQorCQlnb3RvIGh1Z2U7CisJcnZlMSA9IHJ2ZSArIHJ2Yml0cyAtIG5iaXRzOworCWlmIChlMiA8IChlbWluID0gZnBpLT5lbWluKSkgeworCQlkZW5vcm0gPSAxOworCQlqID0gcnZlIC0gZW1pbjsKKwkJaWYgKGogPiAwKSB7CisJCQlydmIgPSBsc2hpZnQocnZiLCBqKTsKKwkJCWlmIChydmIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQlydmJpdHMgKz0gajsKKwkJCX0KKwkJZWxzZSBpZiAoaiA8IDApIHsKKwkJCXJ2Yml0cyArPSBqOworCQkJaWYgKHJ2Yml0cyA8PSAwKSB7CisJCQkJaWYgKHJ2Yml0cyA8IC0xKSB7CisgdWZsOgorCQkJCQlydmItPndkcyA9IDA7CisJCQkJCXJ2Yi0+eFswXSA9IDA7CisJCQkJCSpleHAgPSBlbWluOworCQkJCQlpcnYgPSBTVFJUT0dfVW5kZXJmbG93IHwgU1RSVE9HX0luZXhsbzsKKwkJCQkJZ290byByZXQ7CisJCQkJCX0KKwkJCQlydmItPnhbMF0gPSBydmItPndkcyA9IHJ2Yml0cyA9IDE7CisJCQkJfQorCQkJZWxzZQorCQkJCXJzaGlmdChydmIsIC1qKTsKKwkJCX0KKwkJcnZlID0gcnZlMSA9IGVtaW47CisJCWlmIChzdWRkZW5fdW5kZXJmbG93ICYmIGUyICsgMSA8IGVtaW4pCisJCQlnb3RvIHVmbDsKKwkJfQorCisJLyogTm93IHRoZSBoYXJkIHBhcnQgLS0gYWRqdXN0aW5nIHJ2IHRvIHRoZSBjb3JyZWN0IHZhbHVlLiovCisKKwkvKiBQdXQgZGlnaXRzIGludG8gYmQ6IHRydWUgdmFsdWUgPSBiZCAqIDEwXmUgKi8KKworCWJkMCA9IHMyYihzMCwgbmQwLCBuZCwgeSwgZHBsZW4pOworCWlmIChiZDAgPT0gTlVMTCkKKwkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCisJZm9yKDs7KSB7CisJCWJkID0gQmFsbG9jKGJkMC0+ayk7CisJCWlmIChiZCA9PSBOVUxMKQorCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQlCY29weShiZCwgYmQwKTsKKwkJYmIgPSBCYWxsb2MocnZiLT5rKTsKKwkJaWYgKGJiID09IE5VTEwpCisJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCUJjb3B5KGJiLCBydmIpOworCQliYmJpdHMgPSBydmJpdHMgLSBiYjA7CisJCWJiZSA9IHJ2ZSArIGJiMDsKKwkJYnMgPSBpMmIoMSk7CisJCWlmIChicyA9PSBOVUxMKQorCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCisJCWlmIChlID49IDApIHsKKwkJCWJiMiA9IGJiNSA9IDA7CisJCQliZDIgPSBiZDUgPSBlOworCQkJfQorCQllbHNlIHsKKwkJCWJiMiA9IGJiNSA9IC1lOworCQkJYmQyID0gYmQ1ID0gMDsKKwkJCX0KKwkJaWYgKGJiZSA+PSAwKQorCQkJYmIyICs9IGJiZTsKKwkJZWxzZQorCQkJYmQyIC09IGJiZTsKKwkJYnMyID0gYmIyOworCQlqID0gbmJpdHMgKyAxIC0gYmJiaXRzOworCQlpID0gYmJlICsgYmJiaXRzIC0gbmJpdHM7CisJCWlmIChpIDwgZW1pbikJLyogZGVub3JtYWwgKi8KKwkJCWogKz0gaSAtIGVtaW47CisJCWJiMiArPSBqOworCQliZDIgKz0gajsKKwkJaSA9IGJiMiA8IGJkMiA/IGJiMiA6IGJkMjsKKwkJaWYgKGkgPiBiczIpCisJCQlpID0gYnMyOworCQlpZiAoaSA+IDApIHsKKwkJCWJiMiAtPSBpOworCQkJYmQyIC09IGk7CisJCQliczIgLT0gaTsKKwkJCX0KKwkJaWYgKGJiNSA+IDApIHsKKwkJCWJzID0gcG93NW11bHQoYnMsIGJiNSk7CisJCQlpZiAoYnMgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQliYjEgPSBtdWx0KGJzLCBiYik7CisJCQlpZiAoYmIxID09IE5VTEwpCisJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJQmZyZWUoYmIpOworCQkJYmIgPSBiYjE7CisJCQl9CisJCWJiMiAtPSBiYjA7CisJCWlmIChiYjIgPiAwKSB7CisJCQliYiA9IGxzaGlmdChiYiwgYmIyKTsKKwkJCWlmIChiYiA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCX0KKwkJZWxzZSBpZiAoYmIyIDwgMCkKKwkJCXJzaGlmdChiYiwgLWJiMik7CisJCWlmIChiZDUgPiAwKSB7CisJCQliZCA9IHBvdzVtdWx0KGJkLCBiZDUpOworCQkJaWYgKGJkID09IE5VTEwpCisJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJfQorCQlpZiAoYmQyID4gMCkgeworCQkJYmQgPSBsc2hpZnQoYmQsIGJkMik7CisJCQlpZiAoYmQgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQl9CisJCWlmIChiczIgPiAwKSB7CisJCQlicyA9IGxzaGlmdChicywgYnMyKTsKKwkJCWlmIChicyA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCX0KKwkJYXN1YiA9IDE7CisJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQlkZWx0YSA9IGRpZmYoYmIsIGJkKTsKKwkJaWYgKGRlbHRhID09IE5VTEwpCisJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCWlmIChkZWx0YS0+d2RzIDw9IDEgJiYgIWRlbHRhLT54WzBdKQorCQkJYnJlYWs7CisJCWRzaWduID0gZGVsdGEtPnNpZ247CisJCWRlbHRhLT5zaWduID0gZmluaXNoZWQgPSAwOworCQlMID0gMDsKKwkJaSA9IGNtcChkZWx0YSwgYnMpOworCQlpZiAocmQgJiYgaSA8PSAwKSB7CisJCQlpcnYgPSBTVFJUT0dfTm9ybWFsOworCQkJaWYgKCAoZmluaXNoZWQgPSBkc2lnbiBeIChyZCYxKSkgIT0wKSB7CisJCQkJaWYgKGRzaWduICE9IDApIHsKKwkJCQkJaXJ2IHw9IFNUUlRPR19JbmV4aGk7CisJCQkJCWdvdG8gYWRqMTsKKwkJCQkJfQorCQkJCWlydiB8PSBTVFJUT0dfSW5leGxvOworCQkJCWlmIChydmUxID09IGVtaW4pCisJCQkJCWdvdG8gYWRqMTsKKwkJCQlmb3IoaSA9IDAsIGogPSBuYml0czsgaiA+PSBVTGJpdHM7CisJCQkJCQlpKyssIGogLT0gVUxiaXRzKSB7CisJCQkJCWlmIChydmItPnhbaV0gJiBBTExfT04pCisJCQkJCQlnb3RvIGFkajE7CisJCQkJCX0KKwkJCQlpZiAoaiA+IDEgJiYgbG8wYml0cyhydmItPnggKyBpKSA8IGogLSAxKQorCQkJCQlnb3RvIGFkajE7CisJCQkJcnZlID0gcnZlMSAtIDE7CisJCQkJcnZiID0gc2V0X29uZXMocnZiLCBydmJpdHMgPSBuYml0cyk7CisJCQkJaWYgKHJ2YiA9PSBOVUxMKQorCQkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQkJYnJlYWs7CisJCQkJfQorCQkJaXJ2IHw9IGRzaWduID8gU1RSVE9HX0luZXhsbyA6IFNUUlRPR19JbmV4aGk7CisJCQlicmVhazsKKwkJCX0KKwkJaWYgKGkgPCAwKSB7CisJCQkvKiBFcnJvciBpcyBsZXNzIHRoYW4gaGFsZiBhbiB1bHAgLS0gY2hlY2sgZm9yCisJCQkgKiBzcGVjaWFsIGNhc2Ugb2YgbWFudGlzc2EgYSBwb3dlciBvZiB0d28uCisJCQkgKi8KKwkJCWlydiA9IGRzaWduCisJCQkJPyBTVFJUT0dfTm9ybWFsIHwgU1RSVE9HX0luZXhsbworCQkJCTogU1RSVE9HX05vcm1hbCB8IFNUUlRPR19JbmV4aGk7CisJCQlpZiAoZHNpZ24gfHwgYmJiaXRzID4gMSB8fCBkZW5vcm0gfHwgcnZlMSA9PSBlbWluKQorCQkJCWJyZWFrOworCQkJZGVsdGEgPSBsc2hpZnQoZGVsdGEsMSk7CisJCQlpZiAoZGVsdGEgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQlpZiAoY21wKGRlbHRhLCBicykgPiAwKSB7CisJCQkJaXJ2ID0gU1RSVE9HX05vcm1hbCB8IFNUUlRPR19JbmV4bG87CisJCQkJZ290byBkcm9wX2Rvd247CisJCQkJfQorCQkJYnJlYWs7CisJCQl9CisJCWlmIChpID09IDApIHsKKwkJCS8qIGV4YWN0bHkgaGFsZi13YXkgYmV0d2VlbiAqLworCQkJaWYgKGRzaWduKSB7CisJCQkJaWYgKGRlbm9ybSAmJiBhbGxfb24ocnZiLCBydmJpdHMpKSB7CisJCQkJCS8qYm91bmRhcnkgY2FzZSAtLSBpbmNyZW1lbnQgZXhwb25lbnQqLworCQkJCQlydmItPndkcyA9IDE7CisJCQkJCXJ2Yi0+eFswXSA9IDE7CisJCQkJCXJ2ZSA9IGVtaW4gKyBuYml0cyAtIChydmJpdHMgPSAxKTsKKwkJCQkJaXJ2ID0gU1RSVE9HX05vcm1hbCB8IFNUUlRPR19JbmV4aGk7CisJCQkJCWRlbm9ybSA9IDA7CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJaXJ2ID0gU1RSVE9HX05vcm1hbCB8IFNUUlRPR19JbmV4bG87CisJCQkJfQorCQkJZWxzZSBpZiAoYmJiaXRzID09IDEpIHsKKwkJCQlpcnYgPSBTVFJUT0dfTm9ybWFsOworIGRyb3BfZG93bjoKKwkJCQkvKiBib3VuZGFyeSBjYXNlIC0tIGRlY3JlbWVudCBleHBvbmVudCAqLworCQkJCWlmIChydmUxID09IGVtaW4pIHsKKwkJCQkJaXJ2ID0gU1RSVE9HX05vcm1hbCB8IFNUUlRPR19JbmV4aGk7CisJCQkJCWlmIChydmItPndkcyA9PSAxICYmIHJ2Yi0+eFswXSA9PSAxKQorCQkJCQkJc3VkZGVuX3VuZGVyZmxvdyA9IDE7CisJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJcnZlIC09IG5iaXRzOworCQkJCXJ2YiA9IHNldF9vbmVzKHJ2YiwgcnZiaXRzID0gbmJpdHMpOworCQkJCWlmIChydmIgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJCWJyZWFrOworCQkJCX0KKwkJCWVsc2UKKwkJCQlpcnYgPSBTVFJUT0dfTm9ybWFsIHwgU1RSVE9HX0luZXhoaTsKKwkJCWlmICgoYmJiaXRzIDwgbmJpdHMgJiYgIWRlbm9ybSkgfHwgIShydmItPnhbMF0gJiAxKSkKKwkJCQlicmVhazsKKwkJCWlmIChkc2lnbikgeworCQkJCXJ2YiA9IGluY3JlbWVudChydmIpOworCQkJCWlmIChydmIgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJCWogPSBrbWFzayAmIChVTGJpdHMgLSAocnZiaXRzICYga21hc2spKTsKKwkJCQlpZiAoaGkwYml0cyhydmItPnhbcnZiLT53ZHMgLSAxXSkgIT0gaikKKwkJCQkJcnZiaXRzKys7CisJCQkJaXJ2ID0gU1RSVE9HX05vcm1hbCB8IFNUUlRPR19JbmV4aGk7CisJCQkJfQorCQkJZWxzZSB7CisJCQkJaWYgKGJiYml0cyA9PSAxKQorCQkJCQlnb3RvIHVuZGZsOworCQkJCWRlY3JlbWVudChydmIpOworCQkJCWlydiA9IFNUUlRPR19Ob3JtYWwgfCBTVFJUT0dfSW5leGxvOworCQkJCX0KKwkJCWJyZWFrOworCQkJfQorCQlpZiAoKGR2YWwoJmFkaikgPSByYXRpbyhkZWx0YSwgYnMpKSA8PSAyLikgeworIGFkajE6CisJCQlpbmV4ID0gU1RSVE9HX0luZXhsbzsKKwkJCWlmIChkc2lnbikgeworCQkJCWFzdWIgPSAwOworCQkJCWluZXggPSBTVFJUT0dfSW5leGhpOworCQkJCX0KKwkJCWVsc2UgaWYgKGRlbm9ybSAmJiBiYmJpdHMgPD0gMSkgeworIHVuZGZsOgorCQkJCXJ2Yi0+d2RzID0gMDsKKwkJCQlydmUgPSBlbWluOworCQkJCWlydiA9IFNUUlRPR19VbmRlcmZsb3cgfCBTVFJUT0dfSW5leGxvOworCQkJCWJyZWFrOworCQkJCX0KKwkJCWFkajAgPSBkdmFsKCZhZGopID0gMS47CisJCQl9CisJCWVsc2UgeworCQkJYWRqMCA9IGR2YWwoJmFkaikgKj0gMC41OworCQkJaWYgKGRzaWduKSB7CisJCQkJYXN1YiA9IDA7CisJCQkJaW5leCA9IFNUUlRPR19JbmV4bG87CisJCQkJfQorCQkJaWYgKGR2YWwoJmFkaikgPCAyMTQ3NDgzNjQ3LikgeworCQkJCUwgPSBhZGowOworCQkJCWFkajAgLT0gTDsKKwkJCQlzd2l0Y2gocmQpIHsKKwkJCQkgIGNhc2UgMDoKKwkJCQkJaWYgKGFkajAgPj0gLjUpCisJCQkJCQlnb3RvIGluY19MOworCQkJCQlicmVhazsKKwkJCQkgIGNhc2UgMToKKwkJCQkJaWYgKGFzdWIgJiYgYWRqMCA+IDAuKQorCQkJCQkJZ290byBpbmNfTDsKKwkJCQkJYnJlYWs7CisJCQkJICBjYXNlIDI6CisJCQkJCWlmICghYXN1YiAmJiBhZGowID4gMC4pIHsKKyBpbmNfTDoKKwkJCQkJCUwrKzsKKwkJCQkJCWluZXggPSBTVFJUT0dfSW5leGFjdCAtIGluZXg7CisJCQkJCQl9CisJCQkJICB9CisJCQkJZHZhbCgmYWRqKSA9IEw7CisJCQkJfQorCQkJfQorCQl5ID0gcnZlICsgcnZiaXRzOworCisJCS8qIGFkaiAqPSB1bHAoZHZhbCgmcnYpKTsgKi8KKwkJLyogaWYgKGFzdWIpIHJ2IC09IGFkajsgZWxzZSBydiArPSBhZGo7ICovCisKKwkJaWYgKCFkZW5vcm0gJiYgcnZiaXRzIDwgbmJpdHMpIHsKKwkJCXJ2YiA9IGxzaGlmdChydmIsIGogPSBuYml0cyAtIHJ2Yml0cyk7CisJCQlpZiAocnZiID09IE5VTEwpCisJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJcnZlIC09IGo7CisJCQlydmJpdHMgPSBuYml0czsKKwkJCX0KKwkJYWIgPSBkMmIoZHZhbCgmYWRqKSwgJmFiZSwgJmFiaXRzKTsKKwkJaWYgKGFiID09IE5VTEwpCisJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCWlmIChhYmUgPCAwKQorCQkJcnNoaWZ0KGFiLCAtYWJlKTsKKwkJZWxzZSBpZiAoYWJlID4gMCkgeworCQkJYWIgPSBsc2hpZnQoYWIsIGFiZSk7CisJCQlpZiAoYWIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQl9CisJCXJ2YjAgPSBydmI7CisJCWlmIChhc3ViKSB7CisJCQkvKiBydiAtPSBhZGo7ICovCisJCQlqID0gaGkwYml0cyhydmItPnhbcnZiLT53ZHMtMV0pOworCQkJcnZiID0gZGlmZihydmIsIGFiKTsKKwkJCWlmIChydmIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQlrID0gcnZiMC0+d2RzIC0gMTsKKwkJCWlmIChkZW5vcm0pCisJCQkJLyogZG8gbm90aGluZyAqLzsKKwkJCWVsc2UgaWYgKHJ2Yi0+d2RzIDw9IGsKKwkJCQl8fCBoaTBiaXRzKCBydmItPnhba10pID4KKwkJCQkgICBoaTBiaXRzKHJ2YjAtPnhba10pKSB7CisJCQkJLyogdW5saWtlbHk7IGNhbiBvbmx5IGhhdmUgbG9zdCAxIGhpZ2ggYml0ICovCisJCQkJaWYgKHJ2ZTEgPT0gZW1pbikgeworCQkJCQktLXJ2Yml0czsKKwkJCQkJZGVub3JtID0gMTsKKwkJCQkJfQorCQkJCWVsc2UgeworCQkJCQlydmIgPSBsc2hpZnQocnZiLCAxKTsKKwkJCQkJaWYgKHJ2YiA9PSBOVUxMKQorCQkJCQkJcmV0dXJuIChTVFJUT0dfTm9NZW1vcnkpOworCQkJCQktLXJ2ZTsKKwkJCQkJLS1ydmUxOworCQkJCQlMID0gZmluaXNoZWQgPSAwOworCQkJCQl9CisJCQkJfQorCQkJfQorCQllbHNlIHsKKwkJCXJ2YiA9IHN1bShydmIsIGFiKTsKKwkJCWlmIChydmIgPT0gTlVMTCkKKwkJCQlyZXR1cm4gKFNUUlRPR19Ob01lbW9yeSk7CisJCQlrID0gcnZiLT53ZHMgLSAxOworCQkJaWYgKGsgPj0gcnZiMC0+d2RzCisJCQkgfHwgaGkwYml0cyhydmItPnhba10pIDwgaGkwYml0cyhydmIwLT54W2tdKSkgeworCQkJCWlmIChkZW5vcm0pIHsKKwkJCQkJaWYgKCsrcnZiaXRzID09IG5iaXRzKQorCQkJCQkJZGVub3JtID0gMDsKKwkJCQkJfQorCQkJCWVsc2UgeworCQkJCQlyc2hpZnQocnZiLCAxKTsKKwkJCQkJcnZlKys7CisJCQkJCXJ2ZTErKzsKKwkJCQkJTCA9IDA7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCUJmcmVlKGFiKTsKKwkJQmZyZWUocnZiMCk7CisJCWlmIChmaW5pc2hlZCkKKwkJCWJyZWFrOworCisJCXogPSBydmUgKyBydmJpdHM7CisJCWlmICh5ID09IHogJiYgTCkgeworCQkJLyogQ2FuIHdlIHN0b3Agbm93PyAqLworCQkJdG9sID0gZHZhbCgmYWRqKSAqIDVlLTE2OyAvKiA+IG1heCByZWwgZXJyb3IgKi8KKwkJCWR2YWwoJmFkaikgPSBhZGowIC0gLjU7CisJCQlpZiAoZHZhbCgmYWRqKSA8IC10b2wpIHsKKwkJCQlpZiAoYWRqMCA+IHRvbCkgeworCQkJCQlpcnYgfD0gaW5leDsKKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQllbHNlIGlmIChkdmFsKCZhZGopID4gdG9sICYmIGFkajAgPCAxLiAtIHRvbCkgeworCQkJCWlydiB8PSBpbmV4OworCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJYmIwID0gZGVub3JtID8gMCA6IHRyYWlseihydmIpOworCQlCZnJlZShiYik7CisJCUJmcmVlKGJkKTsKKwkJQmZyZWUoYnMpOworCQlCZnJlZShkZWx0YSk7CisJCX0KKwlpZiAoIWRlbm9ybSAmJiAoaiA9IG5iaXRzIC0gcnZiaXRzKSkgeworCQlpZiAoaiA+IDApIHsKKwkJCXJ2YiA9IGxzaGlmdChydmIsIGopOworCQkJaWYgKHJ2YiA9PSBOVUxMKQorCQkJCXJldHVybiAoU1RSVE9HX05vTWVtb3J5KTsKKwkJCX0KKwkJZWxzZQorCQkJcnNoaWZ0KHJ2YiwgLWopOworCQlydmUgLT0gajsKKwkJfQorCSpleHAgPSBydmU7CisJQmZyZWUoYmIpOworCUJmcmVlKGJkKTsKKwlCZnJlZShicyk7CisJQmZyZWUoYmQwKTsKKwlCZnJlZShkZWx0YSk7CisJaWYgKHJ2ZSA+IGZwaS0+ZW1heCkgeworCQlzd2l0Y2goZnBpLT5yb3VuZGluZyAmIDMpIHsKKwkJICBjYXNlIEZQSV9Sb3VuZF9uZWFyOgorCQkJZ290byBodWdlOworCQkgIGNhc2UgRlBJX1JvdW5kX3VwOgorCQkJaWYgKCFzaWduKQorCQkJCWdvdG8gaHVnZTsKKwkJCWJyZWFrOworCQkgIGNhc2UgRlBJX1JvdW5kX2Rvd246CisJCQlpZiAoc2lnbikKKwkJCQlnb3RvIGh1Z2U7CisJCSAgfQorCQkvKiBSb3VuZCB0byBsYXJnZXN0IHJlcHJlc2VudGFibGUgbWFnbml0dWRlICovCisJCUJmcmVlKHJ2Yik7CisJCXJ2YiA9IDA7CisJCWlydiA9IFNUUlRPR19Ob3JtYWwgfCBTVFJUT0dfSW5leGxvOworCQkqZXhwID0gZnBpLT5lbWF4OworCQliID0gYml0czsKKwkJYmUgPSBiICsgKChmcGktPm5iaXRzICsgMzEpID4+IDUpOworCQl3aGlsZShiIDwgYmUpCisJCQkqYisrID0gLTE7CisJCWlmICgoaiA9IGZwaS0+bmJpdHMgJiAweDFmKSkKKwkJCSotLWJlID4+PSAoMzIgLSBqKTsKKwkJZ290byByZXQ7CisgaHVnZToKKwkJcnZiLT53ZHMgPSAwOworCQlpcnYgPSBTVFJUT0dfSW5maW5pdGUgfCBTVFJUT0dfT3ZlcmZsb3cgfCBTVFJUT0dfSW5leGhpOworI2lmbmRlZiBOT19FUlJOTworCQllcnJubyA9IEVSQU5HRTsKKyNlbmRpZgorIGluZm5hbmV4cDoKKwkJKmV4cCA9IGZwaS0+ZW1heCArIDE7CisJCX0KKyByZXQ6CisJaWYgKGRlbm9ybSkgeworCQlpZiAoc3VkZGVuX3VuZGVyZmxvdykgeworCQkJcnZiLT53ZHMgPSAwOworCQkJaXJ2ID0gU1RSVE9HX1VuZGVyZmxvdyB8IFNUUlRPR19JbmV4bG87CisjaWZuZGVmIE5PX0VSUk5PCisJCQllcnJubyA9IEVSQU5HRTsKKyNlbmRpZgorCQkJfQorCQllbHNlICB7CisJCQlpcnYgPSAoaXJ2ICYgflNUUlRPR19SZXRtYXNrKSB8CisJCQkJKHJ2Yi0+d2RzID4gMCA/IFNUUlRPR19EZW5vcm1hbCA6IFNUUlRPR19aZXJvKTsKKwkJCWlmIChpcnYgJiBTVFJUT0dfSW5leGFjdCkgeworCQkJCWlydiB8PSBTVFJUT0dfVW5kZXJmbG93OworI2lmbmRlZiBOT19FUlJOTworCQkJCWVycm5vID0gRVJBTkdFOworI2VuZGlmCisJCQkJfQorCQkJfQorCQl9CisJaWYgKHNlKQorCQkqc2UgPSAoY2hhciAqKXM7CisJaWYgKHNpZ24pCisJCWlydiB8PSBTVFJUT0dfTmVnOworCWlmIChydmIpIHsKKwkJY29weWJpdHMoYml0cywgbmJpdHMsIHJ2Yik7CisJCUJmcmVlKHJ2Yik7CisJCX0KKwlyZXR1cm4gaXJ2OworCX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdHJ0b2YuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZHRvYS9zdHJ0b2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjQ0OTFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvZi5jCkBAIC0wLDAgKzEsODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCwgMjAwMCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgiCisKKyBmbG9hdAorI2lmZGVmIEtSX2hlYWRlcnMKK3N0cnRvZihzLCBzcCkgQ09OU1QgY2hhciAqczsgY2hhciAqKnNwOworI2Vsc2UKK3N0cnRvZihDT05TVCBjaGFyICpzLCBjaGFyICoqc3ApCisjZW5kaWYKK3sKKwlzdGF0aWMgRlBJIGZwaTAgPSB7IDI0LCAxLTEyNy0yNCsxLCAgMjU0LTEyNy0yNCsxLCAxLCBTSSB9OworCVVMb25nIGJpdHNbMV07CisJTG9uZyBleHA7CisJaW50IGs7CisJdW5pb24geyBVTG9uZyBMWzFdOyBmbG9hdCBmOyB9IHU7CisjaWZkZWYgSG9ub3JfRkxUX1JPVU5EUworI2luY2x1ZGUgImdkdG9hX2ZsdHJuZHMuaCIKKyNlbHNlCisjZGVmaW5lIGZwaSAmZnBpMAorI2VuZGlmCisKKwlrID0gc3RydG9kZyhzLCBzcCwgZnBpLCAmZXhwLCBiaXRzKTsKKwlzd2l0Y2goayAmIFNUUlRPR19SZXRtYXNrKSB7CisJICBjYXNlIFNUUlRPR19Ob051bWJlcjoKKwkgIGNhc2UgU1RSVE9HX1plcm86CisJCXUuTFswXSA9IDA7CisJCWJyZWFrOworCisJICBjYXNlIFNUUlRPR19Ob3JtYWw6CisJICBjYXNlIFNUUlRPR19OYU5iaXRzOgorCQl1LkxbMF0gPSAoYml0c1swXSAmIDB4N2ZmZmZmKSB8ICgoZXhwICsgMHg3ZiArIDIzKSA8PCAyMyk7CisJCWJyZWFrOworCisJICBjYXNlIFNUUlRPR19EZW5vcm1hbDoKKwkJdS5MWzBdID0gYml0c1swXTsKKwkJYnJlYWs7CisKKwkgIGNhc2UgU1RSVE9HX05vTWVtb3J5OgorCQllcnJubyA9IEVSQU5HRTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwkgIGNhc2UgU1RSVE9HX0luZmluaXRlOgorCQl1LkxbMF0gPSAweDdmODAwMDAwOworCQlicmVhazsKKworCSAgY2FzZSBTVFJUT0dfTmFOOgorCQl1LkxbMF0gPSBmX1FOQU47CisJICB9CisJaWYgKGsgJiBTVFJUT0dfTmVnKQorCQl1LkxbMF0gfD0gMHg4MDAwMDAwMEw7CisJcmV0dXJuIHUuZjsKKwl9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9yUS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvclEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTVjYjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvclEuYwpAQCAtMCwwICsxLDEyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4LCAyMDAwIGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworI3VuZGVmIF8wCisjdW5kZWYgXzEKKworLyogb25lIG9yIHRoZSBvdGhlciBvZiBJRUVFX01DNjhrIG9yIElFRUVfODA4NyBzaG91bGQgYmUgI2RlZmluZWQgKi8KKworI2lmZGVmIElFRUVfTUM2OGsKKyNkZWZpbmUgXzAgMAorI2RlZmluZSBfMSAxCisjZGVmaW5lIF8yIDIKKyNkZWZpbmUgXzMgMworI2VuZGlmCisjaWZkZWYgSUVFRV84MDg3CisjZGVmaW5lIF8wIDMKKyNkZWZpbmUgXzEgMgorI2RlZmluZSBfMiAxCisjZGVmaW5lIF8zIDAKKyNlbmRpZgorCisgdm9pZAorI2lmZGVmIEtSX2hlYWRlcnMKK1VMdG9RKEwsIGJpdHMsIGV4cCwgaykgVUxvbmcgKkw7IFVMb25nICpiaXRzOyBMb25nIGV4cDsgaW50IGs7CisjZWxzZQorVUx0b1EoVUxvbmcgKkwsIFVMb25nICpiaXRzLCBMb25nIGV4cCwgaW50IGspCisjZW5kaWYKK3sKKwlzd2l0Y2goayAmIFNUUlRPR19SZXRtYXNrKSB7CisJICBjYXNlIFNUUlRPR19Ob051bWJlcjoKKwkgIGNhc2UgU1RSVE9HX1plcm86CisJCUxbMF0gPSBMWzFdID0gTFsyXSA9IExbM10gPSAwOworCQlicmVhazsKKworCSAgY2FzZSBTVFJUT0dfTm9ybWFsOgorCSAgY2FzZSBTVFJUT0dfTmFOYml0czoKKwkJTFtfM10gPSBiaXRzWzBdOworCQlMW18yXSA9IGJpdHNbMV07CisJCUxbXzFdID0gYml0c1syXTsKKwkJTFtfMF0gPSAoYml0c1szXSAmIH4weDEwMDAwKSB8ICgoZXhwICsgMHgzZmZmICsgMTEyKSA8PCAxNik7CisJCWJyZWFrOworCisJICBjYXNlIFNUUlRPR19EZW5vcm1hbDoKKwkJTFtfM10gPSBiaXRzWzBdOworCQlMW18yXSA9IGJpdHNbMV07CisJCUxbXzFdID0gYml0c1syXTsKKwkJTFtfMF0gPSBiaXRzWzNdOworCQlicmVhazsKKworCSAgY2FzZSBTVFJUT0dfTm9NZW1vcnk6CisJCWVycm5vID0gRVJBTkdFOworCQkvKiBGQUxMVEhST1VHSCAqLworCSAgY2FzZSBTVFJUT0dfSW5maW5pdGU6CisJCUxbXzBdID0gMHg3ZmZmMDAwMDsKKwkJTFtfMV0gPSBMW18yXSA9IExbXzNdID0gMDsKKwkJYnJlYWs7CisKKwkgIGNhc2UgU1RSVE9HX05hTjoKKwkJTFswXSA9IGxkX1FOQU4wOworCQlMWzFdID0gbGRfUU5BTjE7CisJCUxbMl0gPSBsZF9RTkFOMjsKKwkJTFszXSA9IGxkX1FOQU4zOworCSAgfQorCWlmIChrICYgU1RSVE9HX05lZykKKwkJTFtfMF0gfD0gMHg4MDAwMDAwMEw7CisJfQorCisgaW50CisjaWZkZWYgS1JfaGVhZGVycworc3RydG9yUShzLCBzcCwgcm91bmRpbmcsIEwpIENPTlNUIGNoYXIgKnM7IGNoYXIgKipzcDsgaW50IHJvdW5kaW5nOyB2b2lkICpMOworI2Vsc2UKK3N0cnRvclEoQ09OU1QgY2hhciAqcywgY2hhciAqKnNwLCBpbnQgcm91bmRpbmcsIHZvaWQgKkwpCisjZW5kaWYKK3sKKwlzdGF0aWMgRlBJIGZwaTAgPSB7IDExMywgMS0xNjM4My0xMTMrMSwgMzI3NjYtMTYzODMtMTEzKzEsIDEsIFNJIH07CisJRlBJICpmcGksIGZwaTE7CisJVUxvbmcgYml0c1s0XTsKKwlMb25nIGV4cDsKKwlpbnQgazsKKworCWZwaSA9ICZmcGkwOworCWlmIChyb3VuZGluZyAhPSBGUElfUm91bmRfbmVhcikgeworCQlmcGkxID0gZnBpMDsKKwkJZnBpMS5yb3VuZGluZyA9IHJvdW5kaW5nOworCQlmcGkgPSAmZnBpMTsKKwkJfQorCWsgPSBzdHJ0b2RnKHMsIHNwLCBmcGksICZleHAsIGJpdHMpOworCVVMdG9RKChVTG9uZyopTCwgYml0cywgZXhwLCBrKTsKKwlyZXR1cm4gazsKKwl9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3RydG9yZC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjZkMjY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N0cnRvcmQuYwpAQCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorCitDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDAgYnkgTHVjZW50IFRlY2hub2xvZ2llcworQWxsIFJpZ2h0cyBSZXNlcnZlZAorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkKK2dyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYW5kIHdhcnJhbnR5IGRpc2NsYWltZXIgYXBwZWFyIGluIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEx1Y2VudCBvciBhbnkgb2YgaXRzIGVudGl0aWVzCitub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitMVUNFTlQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuCitJTiBOTyBFVkVOVCBTSEFMTCBMVUNFTlQgT1IgQU5ZIE9GIElUUyBFTlRJVElFUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIKK0lOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCitBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRgorVEhJUyBTT0ZUV0FSRS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8gRGF2aWQgTS4gR2F5IChkbWcgYXQgYWNtIGRvdCBvcmcsCisgKiB3aXRoICIgYXQgIiBjaGFuZ2VkIGF0ICJAIiBhbmQgIiBkb3QgIiBjaGFuZ2VkIHRvICIuIikuCSovCisKKyNpbmNsdWRlICJnZHRvYWltcC5oIgorCisgdm9pZAorI2lmZGVmIEtSX2hlYWRlcnMKK1VMdG9kKEwsIGJpdHMsIGV4cCwgaykgVUxvbmcgKkw7IFVMb25nICpiaXRzOyBMb25nIGV4cDsgaW50IGs7CisjZWxzZQorVUx0b2QoVUxvbmcgKkwsIFVMb25nICpiaXRzLCBMb25nIGV4cCwgaW50IGspCisjZW5kaWYKK3sKKwlzd2l0Y2goayAmIFNUUlRPR19SZXRtYXNrKSB7CisJICBjYXNlIFNUUlRPR19Ob051bWJlcjoKKwkgIGNhc2UgU1RSVE9HX1plcm86CisJCUxbMF0gPSBMWzFdID0gMDsKKwkJYnJlYWs7CisKKwkgIGNhc2UgU1RSVE9HX0Rlbm9ybWFsOgorCQlMW18xXSA9IGJpdHNbMF07CisJCUxbXzBdID0gYml0c1sxXTsKKwkJYnJlYWs7CisKKwkgIGNhc2UgU1RSVE9HX05vcm1hbDoKKwkgIGNhc2UgU1RSVE9HX05hTmJpdHM6CisJCUxbXzFdID0gYml0c1swXTsKKwkJTFtfMF0gPSAoYml0c1sxXSAmIH4weDEwMDAwMCkgfCAoKGV4cCArIDB4M2ZmICsgNTIpIDw8IDIwKTsKKwkJYnJlYWs7CisKKwkgIGNhc2UgU1RSVE9HX05vTWVtb3J5OgorCQllcnJubyA9IEVSQU5HRTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwkgIGNhc2UgU1RSVE9HX0luZmluaXRlOgorCQlMW18wXSA9IDB4N2ZmMDAwMDA7CisJCUxbXzFdID0gMDsKKwkJYnJlYWs7CisKKwkgIGNhc2UgU1RSVE9HX05hTjoKKwkJTFswXSA9IGRfUU5BTjA7CisJCUxbMV0gPSBkX1FOQU4xOworCSAgfQorCWlmIChrICYgU1RSVE9HX05lZykKKwkJTFtfMF0gfD0gMHg4MDAwMDAwMEw7CisJfQorCisgaW50CisjaWZkZWYgS1JfaGVhZGVycworc3RydG9yZChzLCBzcCwgcm91bmRpbmcsIGQpIENPTlNUIGNoYXIgKnM7IGNoYXIgKipzcDsgaW50IHJvdW5kaW5nOyBkb3VibGUgKmQ7CisjZWxzZQorc3RydG9yZChDT05TVCBjaGFyICpzLCBjaGFyICoqc3AsIGludCByb3VuZGluZywgZG91YmxlICpkKQorI2VuZGlmCit7CisJc3RhdGljIEZQSSBmcGkwID0geyA1MywgMS0xMDIzLTUzKzEsIDIwNDYtMTAyMy01MysxLCAxLCBTSSB9OworCUZQSSAqZnBpLCBmcGkxOworCVVMb25nIGJpdHNbMl07CisJTG9uZyBleHA7CisJaW50IGs7CisKKwlmcGkgPSAmZnBpMDsKKwlpZiAocm91bmRpbmcgIT0gRlBJX1JvdW5kX25lYXIpIHsKKwkJZnBpMSA9IGZwaTA7CisJCWZwaTEucm91bmRpbmcgPSByb3VuZGluZzsKKwkJZnBpID0gJmZwaTE7CisJCX0KKwlrID0gc3RydG9kZyhzLCBzcCwgZnBpLCAmZXhwLCBiaXRzKTsKKwlVTHRvZCgoVUxvbmcqKWQsIGJpdHMsIGV4cCwgayk7CisJcmV0dXJuIGs7CisJfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N1bS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3N1bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZWI5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2Evc3VtLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisKK0NvcHlyaWdodCAoQykgMTk5OCBieSBMdWNlbnQgVGVjaG5vbG9naWVzCitBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgZGlzY2xhaW1lciBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTHVjZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK0xVQ0VOVCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4KK0lOIE5PIEVWRU5UIFNIQUxMIExVQ0VOVCBPUiBBTlkgT0YgSVRTIEVOVElUSUVTIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GCitUSElTIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQbGVhc2Ugc2VuZCBidWcgcmVwb3J0cyB0byBEYXZpZCBNLiBHYXkgKGRtZyBhdCBhY20gZG90IG9yZywKKyAqIHdpdGggIiBhdCAiIGNoYW5nZWQgYXQgIkAiIGFuZCAiIGRvdCAiIGNoYW5nZWQgdG8gIi4iKS4JKi8KKworI2luY2x1ZGUgImdkdG9haW1wLmgiCisKKyBCaWdpbnQgKgorI2lmZGVmIEtSX2hlYWRlcnMKK3N1bShhLCBiKSBCaWdpbnQgKmE7IEJpZ2ludCAqYjsKKyNlbHNlCitzdW0oQmlnaW50ICphLCBCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmM7CisJVUxvbmcgY2FycnksICp4YywgKnhhLCAqeGIsICp4ZSwgeTsKKyNpZmRlZiBQYWNrXzMyCisJVUxvbmcgejsKKyNlbmRpZgorCisJaWYgKGEtPndkcyA8IGItPndkcykgeworCQljID0gYjsgYiA9IGE7IGEgPSBjOworCQl9CisJYyA9IEJhbGxvYyhhLT5rKTsKKwlpZiAoYyA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWMtPndkcyA9IGEtPndkczsKKwljYXJyeSA9IDA7CisJeGEgPSBhLT54OworCXhiID0gYi0+eDsKKwl4YyA9IGMtPng7CisJeGUgPSB4YyArIGItPndkczsKKyNpZmRlZiBQYWNrXzMyCisJZG8geworCQl5ID0gKCp4YSAmIDB4ZmZmZikgKyAoKnhiICYgMHhmZmZmKSArIGNhcnJ5OworCQljYXJyeSA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCXogPSAoKnhhKysgPj4gMTYpICsgKCp4YisrID4+IDE2KSArIGNhcnJ5OworCQljYXJyeSA9ICh6ICYgMHgxMDAwMCkgPj4gMTY7CisJCVN0b3JlaW5jKHhjLCB6LCB5KTsKKwkJfQorCQl3aGlsZSh4YyA8IHhlKTsKKwl4ZSArPSBhLT53ZHMgLSBiLT53ZHM7CisJd2hpbGUoeGMgPCB4ZSkgeworCQl5ID0gKCp4YSAmIDB4ZmZmZikgKyBjYXJyeTsKKwkJY2FycnkgPSAoeSAmIDB4MTAwMDApID4+IDE2OworCQl6ID0gKCp4YSsrID4+IDE2KSArIGNhcnJ5OworCQljYXJyeSA9ICh6ICYgMHgxMDAwMCkgPj4gMTY7CisJCVN0b3JlaW5jKHhjLCB6LCB5KTsKKwkJfQorI2Vsc2UKKwlkbyB7CisJCXkgPSAqeGErKyArICp4YisrICsgY2Fycnk7CisJCWNhcnJ5ID0gKHkgJiAweDEwMDAwKSA+PiAxNjsKKwkJKnhjKysgPSB5ICYgMHhmZmZmOworCQl9CisJCXdoaWxlKHhjIDwgeGUpOworCXhlICs9IGEtPndkcyAtIGItPndkczsKKwl3aGlsZSh4YyA8IHhlKSB7CisJCXkgPSAqeGErKyArIGNhcnJ5OworCQljYXJyeSA9ICh5ICYgMHgxMDAwMCkgPj4gMTY7CisJCSp4YysrID0geSAmIDB4ZmZmZjsKKwkJfQorI2VuZGlmCisJaWYgKGNhcnJ5KSB7CisJCWlmIChjLT53ZHMgPT0gYy0+bWF4d2RzKSB7CisJCQliID0gQmFsbG9jKGMtPmsgKyAxKTsKKwkJCWlmIChiID09IE5VTEwpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCUJjb3B5KGIsIGMpOworCQkJQmZyZWUoYyk7CisJCQljID0gYjsKKwkJCX0KKwkJYy0+eFtjLT53ZHMrK10gPSAxOworCQl9CisJcmV0dXJuIGM7CisJfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3VscC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dkdG9hL3VscC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTlmODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2R0b2EvdWxwLmMKQEAgLTAsMCArMSw3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5IGJ5IEx1Y2VudCBUZWNobm9sb2dpZXMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5CitncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFuZCB3YXJyYW50eSBkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBMdWNlbnQgb3IgYW55IG9mIGl0cyBlbnRpdGllcworbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworTFVDRU5UIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLgorSU4gTk8gRVZFTlQgU0hBTEwgTFVDRU5UIE9SIEFOWSBPRiBJVFMgRU5USVRJRVMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSCitJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLAorQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YKK1RISVMgU09GVFdBUkUuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIERhdmlkIE0uIEdheSAoZG1nIGF0IGFjbSBkb3Qgb3JnLAorICogd2l0aCAiIGF0ICIgY2hhbmdlZCBhdCAiQCIgYW5kICIgZG90ICIgY2hhbmdlZCB0byAiLiIpLgkqLworCisjaW5jbHVkZSAiZ2R0b2FpbXAuaCIKKworIGRvdWJsZQordWxwCisjaWZkZWYgS1JfaGVhZGVycworCSh4KSBVICp4OworI2Vsc2UKKwkoVSAqeCkKKyNlbmRpZgoreworCUxvbmcgTDsKKwlVIGE7CisKKwlMID0gKHdvcmQwKHgpICYgRXhwX21hc2spIC0gKFAtMSkqRXhwX21zazE7CisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwlpZiAoTCA+IDApIHsKKyNlbmRpZgorI2lmZGVmIElCTQorCQlMIHw9IEV4cF9tc2sxID4+IDQ7CisjZW5kaWYKKwkJd29yZDAoJmEpID0gTDsKKwkJd29yZDEoJmEpID0gMDsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQl9CisJZWxzZSB7CisJCUwgPSAtTCA+PiBFeHBfc2hpZnQ7CisJCWlmIChMIDwgRXhwX3NoaWZ0KSB7CisJCQl3b3JkMCgmYSkgPSAweDgwMDAwID4+IEw7CisJCQl3b3JkMSgmYSkgPSAwOworCQkJfQorCQllbHNlIHsKKwkJCXdvcmQwKCZhKSA9IDA7CisJCQlMIC09IEV4cF9zaGlmdDsKKwkJCXdvcmQxKCZhKSA9IEwgPj0gMzEgPyAxIDogMSA8PCAoMzEgLSBMKTsKKwkJCX0KKwkJfQorI2VuZGlmCisJcmV0dXJuIGR2YWwoJmEpOworCX0KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vYWxhcm0uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vYWxhcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWY4NDdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9hbGFybS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBhbGFybS5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzMgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogQmFja3dhcmRzIGNvbXBhdGlibGUgYWxhcm0uCisgKi8KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCit1bnNpZ25lZCBpbnQKK2FsYXJtKHVuc2lnbmVkIGludCBzZWNzKQoreworCXN0cnVjdCBpdGltZXJ2YWwgaXQsIG9pdHY7CisJc3RydWN0IGl0aW1lcnZhbCAqaXRwID0gJml0OworCisJdGltZXJjbGVhcigmaXRwLT5pdF9pbnRlcnZhbCk7CisJaXRwLT5pdF92YWx1ZS50dl9zZWMgPSBzZWNzOworCWl0cC0+aXRfdmFsdWUudHZfdXNlYyA9IDA7CisJaWYgKHNldGl0aW1lcihJVElNRVJfUkVBTCwgaXRwLCAmb2l0dikgPCAwKQorCQlyZXR1cm4gKCh1bnNpZ25lZCBpbnQpIC0xKTsKKwlpZiAob2l0di5pdF92YWx1ZS50dl91c2VjKQorCQlvaXR2Lml0X3ZhbHVlLnR2X3NlYysrOworCXJldHVybiAob2l0di5pdF92YWx1ZS50dl9zZWMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvY2hhcmNsYXNzLmggYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2NoYXJjbGFzcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9jaGFyY2xhc3MuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9jaGFyY2xhc3MuaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9jdHlwZV8uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vY3R5cGVfLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljODI1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vY3R5cGVfLmMKQEAgLTAsMCArMSw3NiBAQAorLyoJJE9wZW5CU0Q6IGN0eXBlXy5jLHYgMS4xMCAyMDExLzA5LzIyIDA5OjA2OjEwIHN0c3AgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODkgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAoYykgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBBbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAorICogdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaAorICogQ28uIG9yIFVuaXggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLiBhbmQgYXJlIHJlcHJvZHVjZWQgaGVyZWluIHdpdGgKKyAqIHRoZSBwZXJtaXNzaW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlICJjdHlwZV9wcml2YXRlLmgiCisKK2NvbnN0IGNoYXIgX0NfY3R5cGVfWzEgKyBDVFlQRV9OVU1fQ0hBUlNdID0geworCTAsCisJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAorCV9DLAlfQ3xfUywJX0N8X1MsCV9DfF9TLAlfQ3xfUywJX0N8X1MsCV9DLAlfQywKKwlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCisJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAorICAgX1N8KGNoYXIpX0IsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAorCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwKKwlfTiwJX04sCV9OLAlfTiwJX04sCV9OLAlfTiwJX04sCisJX04sCV9OLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAorCV9QLAlfVXxfWCwJX1V8X1gsCV9VfF9YLAlfVXxfWCwJX1V8X1gsCV9VfF9YLAlfVSwKKwlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCisJX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAorCV9VLAlfVSwJX1UsCV9QLAlfUCwJX1AsCV9QLAlfUCwKKwlfUCwJX0x8X1gsCV9MfF9YLAlfTHxfWCwJX0x8X1gsCV9MfF9YLAlfTHxfWCwJX0wsCisJX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAorCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwKKwlfTCwJX0wsCV9MLAlfUCwJX1AsCV9QLAlfUCwJX0MsCisKKwkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsIC8qIDgwICovCisJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLCAvKiA4OCAqLworCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwgLyogOTAgKi8KKwkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsIC8qIDk4ICovCisJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLCAvKiBBMCAqLworCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwgLyogQTggKi8KKwkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsIC8qIEIwICovCisJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLCAvKiBCOCAqLworCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwgLyogQzAgKi8KKwkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsIC8qIEM4ICovCisJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLCAvKiBEMCAqLworCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwgLyogRDggKi8KKwkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsIC8qIEUwICovCisJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLCAvKiBFOCAqLworCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwgLyogRjAgKi8KKwkgMCwJIDAsCSAwLAkgMCwJIDAsCSAwLAkgMCwJIDAgIC8qIEY4ICovCit9OworCitjb25zdCBjaGFyICpfY3R5cGVfID0gX0NfY3R5cGVfOwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9leGVjLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2V4ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTJmN2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9leGVjLmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCSRPcGVuQlNEOiBleGVjLmMsdiAxLjIxIDIwMTMvMDkvMzAgMTI6MDI6MzMgbWlsbGVydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxwYXRocy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2V4dGVybiBjaGFyICoqZW52aXJvbjsKKworaW50CitleGVjbChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphcmcsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNoYXIgKiphcmd2OworCWludCBuOworCisJdmFfc3RhcnQoYXAsIGFyZyk7CisJbiA9IDE7CisJd2hpbGUgKHZhX2FyZyhhcCwgY2hhciAqKSAhPSBOVUxMKQorCQluKys7CisJdmFfZW5kKGFwKTsKKwlhcmd2ID0gYWxsb2NhKChuICsgMSkgKiBzaXplb2YoKmFyZ3YpKTsKKwlpZiAoYXJndiA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0xKTsKKwl9CisJdmFfc3RhcnQoYXAsIGFyZyk7CisJbiA9IDE7CisJYXJndlswXSA9IChjaGFyICopYXJnOworCXdoaWxlICgoYXJndltuXSA9IHZhX2FyZyhhcCwgY2hhciAqKSkgIT0gTlVMTCkKKwkJbisrOworCXZhX2VuZChhcCk7CisJcmV0dXJuIChleGVjdmUobmFtZSwgYXJndiwgZW52aXJvbikpOworfQorCitpbnQKK2V4ZWNsZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphcmcsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNoYXIgKiphcmd2LCAqKmVudnA7CisJaW50IG47CisKKwl2YV9zdGFydChhcCwgYXJnKTsKKwluID0gMTsKKwl3aGlsZSAodmFfYXJnKGFwLCBjaGFyICopICE9IE5VTEwpCisJCW4rKzsKKwl2YV9lbmQoYXApOworCWFyZ3YgPSBhbGxvY2EoKG4gKyAxKSAqIHNpemVvZigqYXJndikpOworCWlmIChhcmd2ID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAoLTEpOworCX0KKwl2YV9zdGFydChhcCwgYXJnKTsKKwluID0gMTsKKwlhcmd2WzBdID0gKGNoYXIgKilhcmc7CisJd2hpbGUgKChhcmd2W25dID0gdmFfYXJnKGFwLCBjaGFyICopKSAhPSBOVUxMKQorCQluKys7CisJZW52cCA9IHZhX2FyZyhhcCwgY2hhciAqKik7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gKGV4ZWN2ZShuYW1lLCBhcmd2LCBlbnZwKSk7Cit9CisKK2ludAorZXhlY2xwKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmFyZywgLi4uKQoreworCXZhX2xpc3QgYXA7CisJY2hhciAqKmFyZ3Y7CisJaW50IG47CisKKwl2YV9zdGFydChhcCwgYXJnKTsKKwluID0gMTsKKwl3aGlsZSAodmFfYXJnKGFwLCBjaGFyICopICE9IE5VTEwpCisJCW4rKzsKKwl2YV9lbmQoYXApOworCWFyZ3YgPSBhbGxvY2EoKG4gKyAxKSAqIHNpemVvZigqYXJndikpOworCWlmIChhcmd2ID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAoLTEpOworCX0KKwl2YV9zdGFydChhcCwgYXJnKTsKKwluID0gMTsKKwlhcmd2WzBdID0gKGNoYXIgKilhcmc7CisJd2hpbGUgKChhcmd2W25dID0gdmFfYXJnKGFwLCBjaGFyICopKSAhPSBOVUxMKQorCQluKys7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gKGV4ZWN2cChuYW1lLCBhcmd2KSk7Cit9CisKK2ludAorZXhlY3YoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqY29uc3QgKmFyZ3YpCit7CisJKHZvaWQpZXhlY3ZlKG5hbWUsIGFyZ3YsIGVudmlyb24pOworCXJldHVybiAoLTEpOworfQorCitpbnQKK2V4ZWN2cGUoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqY29uc3QgKmFyZ3YsIGNoYXIgKmNvbnN0ICplbnZwKQoreworCWNoYXIgKiptZW1wOworCWludCBjbnQ7CisJc2l6ZV90IGxwLCBsbiwgbGVuOworCWNoYXIgKnA7CisJaW50IGVhY2NlcyA9IDA7CisJY2hhciAqYnAsICpjdXIsICpwYXRoLCBidWZbUEFUSF9NQVhdOworCisJLyoKKwkgKiBEbyBub3QgYWxsb3cgbnVsbCBuYW1lCisJICovCisJaWYgKG5hbWUgPT0gTlVMTCB8fCAqbmFtZSA9PSAnXDAnKSB7CisJCWVycm5vID0gRU5PRU5UOworCQlyZXR1cm4gKC0xKTsKKyAJfQorCisJLyogSWYgaXQncyBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIG5hbWUsIGl0J3MgZWFzeS4gKi8KKwlpZiAoc3RyY2hyKG5hbWUsICcvJykpIHsKKwkJYnAgPSAoY2hhciAqKW5hbWU7CisJCWN1ciA9IHBhdGggPSBOVUxMOworCQlnb3RvIHJldHJ5OworCX0KKwlicCA9IGJ1ZjsKKworCS8qIEdldCB0aGUgcGF0aCB3ZSdyZSBzZWFyY2hpbmcuICovCisJaWYgKCEocGF0aCA9IGdldGVudigiUEFUSCIpKSkKKwkJcGF0aCA9IF9QQVRIX0RFRlBBVEg7CisJbGVuID0gc3RybGVuKHBhdGgpICsgMTsKKwljdXIgPSBhbGxvY2EobGVuKTsKKwlpZiAoY3VyID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAoLTEpOworCX0KKwlzdHJsY3B5KGN1ciwgcGF0aCwgbGVuKTsKKwlwYXRoID0gY3VyOworCXdoaWxlICgocCA9IHN0cnNlcCgmY3VyLCAiOiIpKSkgeworCQkvKgorCQkgKiBJdCdzIGEgU0hFTEwgcGF0aCAtLSBkb3VibGUsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNvbG9ucworCQkgKiBtZWFuIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKwkJICovCisJCWlmICghKnApIHsKKwkJCXAgPSAiLiI7CisJCQlscCA9IDE7CisJCX0gZWxzZQorCQkJbHAgPSBzdHJsZW4ocCk7CisJCWxuID0gc3RybGVuKG5hbWUpOworCisJCS8qCisJCSAqIElmIHRoZSBwYXRoIGlzIHRvbyBsb25nIGNvbXBsYWluLiAgVGhpcyBpcyBhIHBvc3NpYmxlCisJCSAqIHNlY3VyaXR5IGlzc3VlOyBnaXZlbiBhIHdheSB0byBtYWtlIHRoZSBwYXRoIHRvbyBsb25nCisJCSAqIHRoZSB1c2VyIG1heSBleGVjdXRlIHRoZSB3cm9uZyBwcm9ncmFtLgorCQkgKi8KKwkJaWYgKGxwICsgbG4gKyAyID4gc2l6ZW9mKGJ1ZikpIHsKKwkJCXN0cnVjdCBpb3ZlYyBpb3ZbM107CisKKwkJCWlvdlswXS5pb3ZfYmFzZSA9ICJleGVjdnA6ICI7CisJCQlpb3ZbMF0uaW92X2xlbiA9IDg7CisJCQlpb3ZbMV0uaW92X2Jhc2UgPSBwOworCQkJaW92WzFdLmlvdl9sZW4gPSBscDsKKwkJCWlvdlsyXS5pb3ZfYmFzZSA9ICI6IHBhdGggdG9vIGxvbmdcbiI7CisJCQlpb3ZbMl0uaW92X2xlbiA9IDE2OworCQkJKHZvaWQpd3JpdGV2KFNUREVSUl9GSUxFTk8sIGlvdiwgMyk7CisJCQljb250aW51ZTsKKwkJfQorCQliY29weShwLCBidWYsIGxwKTsKKwkJYnVmW2xwXSA9ICcvJzsKKwkJYmNvcHkobmFtZSwgYnVmICsgbHAgKyAxLCBsbik7CisJCWJ1ZltscCArIGxuICsgMV0gPSAnXDAnOworCityZXRyeToJCSh2b2lkKWV4ZWN2ZShicCwgYXJndiwgZW52cCk7CisJCXN3aXRjaChlcnJubykgeworCQljYXNlIEUyQklHOgorCQkJZ290byBkb25lOworCQljYXNlIEVJU0RJUjoKKwkJY2FzZSBFTE9PUDoKKwkJY2FzZSBFTkFNRVRPT0xPTkc6CisJCWNhc2UgRU5PRU5UOgorCQkJYnJlYWs7CisJCWNhc2UgRU5PRVhFQzoKKwkJCWZvciAoY250ID0gMDsgYXJndltjbnRdOyArK2NudCkKKwkJCQk7CisJCQltZW1wID0gYWxsb2NhKChjbnQgKyAyKSAqIHNpemVvZihjaGFyICopKTsKKwkJCWlmIChtZW1wID09IE5VTEwpCisJCQkJZ290byBkb25lOworCQkJbWVtcFswXSA9ICJzaCI7CisJCQltZW1wWzFdID0gYnA7CisJCQliY29weShhcmd2ICsgMSwgbWVtcCArIDIsIGNudCAqIHNpemVvZihjaGFyICopKTsKKwkJCSh2b2lkKWV4ZWN2ZShfUEFUSF9CU0hFTEwsIG1lbXAsIGVudnApOworCQkJZ290byBkb25lOworCQljYXNlIEVOT01FTToKKwkJCWdvdG8gZG9uZTsKKwkJY2FzZSBFTk9URElSOgorCQkJYnJlYWs7CisJCWNhc2UgRVRYVEJTWToKKwkJCS8qCisJCQkgKiBXZSB1c2VkIHRvIHJldHJ5IGhlcmUsIGJ1dCBzaCgxKSBkb2Vzbid0LgorCQkJICovCisJCQlnb3RvIGRvbmU7CisJCWNhc2UgRUFDQ0VTOgorCQkJZWFjY2VzID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBkb25lOworCQl9CisJfQorCWlmIChlYWNjZXMpCisJCWVycm5vID0gRUFDQ0VTOworCWVsc2UgaWYgKCFlcnJubykKKwkJZXJybm8gPSBFTk9FTlQ7Citkb25lOgorCXJldHVybiAoLTEpOworfQorCitpbnQKK2V4ZWN2cChjb25zdCBjaGFyICpuYW1lLCBjaGFyICpjb25zdCAqYXJndikKK3sKKyAgICByZXR1cm4gZXhlY3ZwZShuYW1lLCBhcmd2LCBlbnZpcm9uKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9mbm1hdGNoLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2ZubWF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzg2MGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9mbm1hdGNoLmMKQEAgLTAsMCArMSw0ODcgQEAKKy8qCSRPcGVuQlNEOiBmbm1hdGNoLmMsdiAxLjE3IDIwMTMvMTEvMjQgMjM6NTE6MjkgZGVyYWFkdCBFeHAgJAkqLworCisvKiBDb3B5cmlnaHQgKGMpIDIwMTEsIFZNd2FyZSwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFZNd2FyZSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBWTVdBUkUsIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVG9kZCBDLiBNaWxsZXIgPG1pbGxlcnRAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyogQXV0aG9yZWQgYnkgV2lsbGlhbSBBLiBSb3dlIEpyLiA8d3Jvd2U7IGFwYWNoZS5vcmcsIHZtd2FyZS5jb20+LCBBcHJpbCAyMDExCisgKgorICogRGVyaXZlZCBmcm9tIFRoZSBPcGVuIEdyb3VwIEJhc2UgU3BlY2lmaWNhdGlvbnMgSXNzdWUgNywgSUVFRSBTdGQgMTAwMy4xLTIwMDgKKyAqIGFzIGRlc2NyaWJlZCBpbjsKKyAqICAgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2ZubWF0Y2guaHRtbAorICoKKyAqIEZpbGVuYW1lIHBhdHRlcm4gbWF0Y2hlcyBkZWZpbmVkIGluIHNlY3Rpb24gMi4xMywgIlBhdHRlcm4gTWF0Y2hpbmcgTm90YXRpb24iCisgKiBmcm9tIGNoYXB0ZXIgMi4gIlNoZWxsIENvbW1hbmQgTGFuZ3VhZ2UiCisgKiAgIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9WM19jaGFwMDIuaHRtbCN0YWdfMThfMTMKKyAqIHdoZXJlOyAxLiBBIGJyYWNrZXQgZXhwcmVzc2lvbiBzdGFydGluZyB3aXRoIGFuIHVucXVvdGVkIDxjaXJjdW1mbGV4PiAnXicgCisgKiBjaGFyYWN0ZXIgQ09OVElOVUVTIHRvIHNwZWNpZnkgYSBub24tbWF0Y2hpbmcgbGlzdDsgMi4gYW4gZXhwbGljaXQgPHBlcmlvZD4gJy4nIAorICogaW4gYSBicmFja2V0IGV4cHJlc3Npb24gbWF0Y2hpbmcgbGlzdCwgZS5nLiAiWy5hYmNdIiBkb2VzIE5PVCBtYXRjaCBhIGxlYWRpbmcgCisgKiA8cGVyaW9kPiBpbiBhIGZpbGVuYW1lOyAzLiBhIDxsZWZ0LXNxdWFyZS1icmFja2V0PiAnWycgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlCisgKiBhIHZhbGlkIGJyYWNrZXQgZXhwcmVzc2lvbiBpcyB0cmVhdGVkIGFzIGFuIG9yZGluYXJ5IGNoYXJhY3RlcjsgNC4gYSBkaWZmZXJpbmcKKyAqIG51bWJlciBvZiBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGhpbiBwYXR0ZXJuIGFuZCBzdHJpbmcgd2lsbCBOT1QgbWF0Y2g7CisgKiA1LiBhIHRyYWlsaW5nICdcJyBpbiBGTk1fRVNDQVBFIG1vZGUgaXMgdHJlYXRlZCBhcyBhbiBvcmRpbmFyeSAnXCcgY2hhcmFjdGVyLgorICoKKyAqIEJyYWNrZXQgZXhwYW5zaW9uIGRlZmluZWQgaW4gc2VjdGlvbiA5LjMuNSwgIlJFIEJyYWNrZXQgRXhwcmVzc2lvbiIsCisgKiBmcm9tIGNoYXB0ZXIgOSwgIlJlZ3VsYXIgRXhwcmVzc2lvbnMiCisgKiAgIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Jhc2VkZWZzL1YxX2NoYXAwOS5odG1sI3RhZ18wOV8wM18wNQorICogd2l0aCBubyBzdXBwb3J0IGZvciBjb2xsYXRpbmcgc3ltYm9scywgZXF1aXZhbGVuY2UgY2xhc3MgZXhwcmVzc2lvbnMgb3IgCisgKiBjaGFyYWN0ZXIgY2xhc3MgZXhwcmVzc2lvbnMuICBBIHBhcnRpYWwgcmFuZ2UgZXhwcmVzc2lvbiB3aXRoIGEgbGVhZGluZyAKKyAqIGh5cGhlbiBmb2xsb3dpbmcgYSB2YWxpZCByYW5nZSBleHByZXNzaW9uIHdpbGwgbWF0Y2ggb25seSB0aGUgb3JkaW5hcnkKKyAqIDxoeXBoZW4+IGFuZCB0aGUgZW5kaW5nIGNoYXJhY3RlciAoZS5nLiAiW2EtbS16XSIgd2lsbCBtYXRjaCBjaGFyYWN0ZXJzIAorICogJ2EnIHRocm91Z2ggJ20nLCBhIDxoeXBoZW4+ICctJywgb3IgYSAneicpLgorICoKKyAqIFN1cHBvcnRzIEJTRCBleHRlbnNpb25zIEZOTV9MRUFESU5HX0RJUiB0byBtYXRjaCBwYXR0ZXJuIHRvIHRoZSBlbmQgb2Ygb25lCisgKiBwYXRoIHNlZ21lbnQgb2Ygc3RyaW5nLCBhbmQgRk5NX0NBU0VGT0xEIHRvIGlnbm9yZSBhbHBoYSBjYXNlLgorICoKKyAqIE5PVEU6IE9ubHkgUE9TSVgvQyBzaW5nbGUgYnl0ZSBsb2NhbGVzIGFyZSBjb3JyZWN0bHkgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4KKyAqIE5vdGFibHksIG5vbi1QT1NJWCBsb2NhbGVzIHdpdGggRk5NX0NBU0VGT0xEIHByb2R1Y2UgdW5kZWZpbmVkIHJlc3VsdHMsCisgKiBwYXJ0aWN1bGFybHkgaW4gcmFuZ2VzIG9mIG1peGVkIGNhc2UgKGUuZy4gIltBLXpdIikgb3Igc3Bhbm5pbmcgYWxwaGEgYW5kCisgKiBub25hbHBoYSBjaGFyYWN0ZXJzIHdpdGhpbiBhIHJhbmdlLgorICoKKyAqIFhYWCBjb21tZW50cyBiZWxvdyBpbmRpY2F0ZSBwb3J0aW5nIHJlcXVpcmVkIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlciBzZXRzCisgKiBhbmQgbm9uLVBPU0lYIGxvY2FsZSBjb2xsYXRpb24gb3JkZXJzOyByZXF1aXJlcyBtYnIqIEFQSXMgdG8gdHJhY2sgc2hpZnQKKyAqIHN0YXRlIG9mIHBhdHRlcm4gYW5kIHN0cmluZyAocmV3aW5kaW5nIHBhdHRlcm4gYW5kIHN0cmluZyByZXBlYXRlZGx5KS4KKyAqCisgKiBDZXJ0YWluIHBhcnRzIG9mIHRoZSBjb2RlIGFzc3VtZSAweDAwLTB4M0YgYXJlIHVuaXF1ZSB3aXRoIGFueSBNQkNTIChlLmcuCisgKiBVVEYtOCwgU0hJRlQtSklTLCBldGMpLiAgQW55IGltcGxlbWVudGF0aW9uIGFsbG93aW5nICdcJyBhcyBhbiBhbHRlcm5hdGUKKyAqIHBhdGggZGVsaW1pdGVyIG11c3QgYmUgYXdhcmUgdGhhdCAweDVDIGlzIE5PVCB1bmlxdWUgd2l0aGluIFNISUZULUpJUy4KKyAqLworCisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJjaGFyY2xhc3MuaCIKKworI2RlZmluZQlSQU5HRV9NQVRDSAkxCisjZGVmaW5lCVJBTkdFX05PTUFUQ0gJMAorI2RlZmluZQlSQU5HRV9FUlJPUgkoLTEpCisKK3N0YXRpYyBpbnQKK2NsYXNzbWF0Y2goY29uc3QgY2hhciAqcGF0dGVybiwgY2hhciB0ZXN0LCBpbnQgZm9sZGNhc2UsIGNvbnN0IGNoYXIgKiplcCkKK3sKKwlzdHJ1Y3QgY2NsYXNzICpjYzsKKwljb25zdCBjaGFyICpjb2xvbjsKKwlzaXplX3QgbGVuOworCWludCBydmFsID0gUkFOR0VfTk9NQVRDSDsKKwljb25zdCBjaGFyICogY29uc3QgbWlzbWF0Y2ggPSBwYXR0ZXJuOworCisJaWYgKCpwYXR0ZXJuICE9ICdbJyB8fCBwYXR0ZXJuWzFdICE9ICc6JykgeworCQkqZXAgPSBtaXNtYXRjaDsKKwkJcmV0dXJuKFJBTkdFX0VSUk9SKTsKKwl9CisKKwlwYXR0ZXJuICs9IDI7CisKKwlpZiAoKGNvbG9uID0gc3RyY2hyKHBhdHRlcm4sICc6JykpID09IE5VTEwgfHwgY29sb25bMV0gIT0gJ10nKSB7CisJCSplcCA9IG1pc21hdGNoOworCQlyZXR1cm4oUkFOR0VfRVJST1IpOworCX0KKwkqZXAgPSBjb2xvbiArIDI7CisJbGVuID0gKHNpemVfdCkoY29sb24gLSBwYXR0ZXJuKTsKKworCWlmIChmb2xkY2FzZSAmJiBzdHJuY21wKHBhdHRlcm4sICJ1cHBlcjpdIiwgNykgPT0gMCkKKwkJcGF0dGVybiA9ICJsb3dlcjpdIjsKKwlmb3IgKGNjID0gY2NsYXNzZXM7IGNjLT5uYW1lICE9IE5VTEw7IGNjKyspIHsKKwkJaWYgKCFzdHJuY21wKHBhdHRlcm4sIGNjLT5uYW1lLCBsZW4pICYmIGNjLT5uYW1lW2xlbl0gPT0gJ1wwJykgeworCQkJaWYgKGNjLT5pc2N0eXBlKCh1bnNpZ25lZCBjaGFyKXRlc3QpKQorCQkJCXJ2YWwgPSBSQU5HRV9NQVRDSDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChjYy0+bmFtZSA9PSBOVUxMKSB7CisJCS8qIGludmFsaWQgY2hhcmFjdGVyIGNsYXNzLCB0cmVhdCBhcyBub3JtYWwgdGV4dCAqLworCQkqZXAgPSBtaXNtYXRjaDsKKwkJcnZhbCA9IFJBTkdFX0VSUk9SOworCX0KKwlyZXR1cm4ocnZhbCk7Cit9CisKKy8qIE1vc3QgTUJDUy9jb2xsYXRpb24vY2FzZSBpc3N1ZXMgaGFuZGxlZCBoZXJlLiAgV2lsZGNhcmQgJyonIGlzIG5vdCBoYW5kbGVkLgorICogRU9TICdcMCcgYW5kIHRoZSBGTk1fUEFUSE5BTUUgJy8nIGRlbGltaXRlcnMgYXJlIG5vdCBhZHZhbmNlZCBvdmVyLCAKKyAqIGhvd2V2ZXIgdGhlICJcLyIgc2VxdWVuY2UgaXMgYWR2YW5jZWQgdG8gJy8nLgorICoKKyAqIEJvdGggcGF0dGVybiBhbmQgc3RyaW5nIGFyZSAqKmNoYXIgdG8gc3VwcG9ydCBwb2ludGVyIGluY3JlbWVudCBvZiBhcmJpdHJhcnkKKyAqIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGZvciB0aGUgZ2l2ZW4gbG9jYWxlLCBpbiBhIGxhdGVyIGl0ZXJhdGlvbiBvZiB0aGlzIGNvZGUKKyAqLworc3RhdGljIGludCBmbm1hdGNoX2NoKGNvbnN0IGNoYXIgKipwYXR0ZXJuLCBjb25zdCBjaGFyICoqc3RyaW5nLCBpbnQgZmxhZ3MpCit7CisgICAgY29uc3QgY2hhciAqIGNvbnN0IG1pc21hdGNoID0gKnBhdHRlcm47CisgICAgY29uc3QgaW50IG5vY2FzZSA9ICEhKGZsYWdzICYgRk5NX0NBU0VGT0xEKTsKKyAgICBjb25zdCBpbnQgZXNjYXBlID0gIShmbGFncyAmIEZOTV9OT0VTQ0FQRSk7CisgICAgY29uc3QgaW50IHNsYXNoID0gISEoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpOworICAgIGludCByZXN1bHQgPSBGTk1fTk9NQVRDSDsKKyAgICBjb25zdCBjaGFyICpzdGFydGNoOworICAgIGludCBuZWdhdGU7CisKKyAgICBpZiAoKipwYXR0ZXJuID09ICdbJykKKyAgICB7CisgICAgICAgICsrKnBhdHRlcm47CisKKyAgICAgICAgLyogSGFuZGxlIG5lZ2F0aW9uLCBlaXRoZXIgbGVhZGluZyAhIG9yIF4gb3BlcmF0b3JzIChuZXZlciBib3RoKSAqLworICAgICAgICBuZWdhdGUgPSAoKCoqcGF0dGVybiA9PSAnIScpIHx8ICgqKnBhdHRlcm4gPT0gJ14nKSk7CisgICAgICAgIGlmIChuZWdhdGUpCisgICAgICAgICAgICArKypwYXR0ZXJuOworCisgICAgICAgIC8qICddJyBpcyBhbiBvcmRpbmFyeSBjaGFyYWN0ZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBwYXR0ZXJuICovCisgICAgICAgIGlmICgqKnBhdHRlcm4gPT0gJ10nKQorICAgICAgICAgICAgZ290byBsZWFkaW5nY2xvc2VicmFjZTsKKworICAgICAgICB3aGlsZSAoKipwYXR0ZXJuKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKipwYXR0ZXJuID09ICddJykgeworICAgICAgICAgICAgICAgICsrKnBhdHRlcm47CisgICAgICAgICAgICAgICAgLyogWFhYOiBGaXggZm9yIE1CQ1MgY2hhcmFjdGVyIHdpZHRoICovCisgICAgICAgICAgICAgICAgKysqc3RyaW5nOworICAgICAgICAgICAgICAgIHJldHVybiAocmVzdWx0IF4gbmVnYXRlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGVzY2FwZSAmJiAoKipwYXR0ZXJuID09ICdcXCcpKSB7CisgICAgICAgICAgICAgICAgKysqcGF0dGVybjsKKworICAgICAgICAgICAgICAgIC8qIFBhdHRlcm5zIG11c3QgYmUgdGVybWluYXRlZCB3aXRoICddJywgbm90IEVPUyAqLworICAgICAgICAgICAgICAgIGlmICghKipwYXR0ZXJuKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogUGF0dGVybnMgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggJ10nIG5vdCAnLycgKi8KKyAgICAgICAgICAgIGlmIChzbGFzaCAmJiAoKipwYXR0ZXJuID09ICcvJykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8qIE1hdGNoIGNoYXJhY3RlciBjbGFzc2VzLiAqLworICAgICAgICAgICAgaWYgKGNsYXNzbWF0Y2goKnBhdHRlcm4sICoqc3RyaW5nLCBub2Nhc2UsIHBhdHRlcm4pCisgICAgICAgICAgICAgICAgPT0gUkFOR0VfTUFUQ0gpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAwOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCitsZWFkaW5nY2xvc2VicmFjZToKKyAgICAgICAgICAgIC8qIExvb2sgYXQgb25seSB3ZWxsLWZvcm1lZCByYW5nZSBwYXR0ZXJuczsgCisgICAgICAgICAgICAgKiAieC1dIiBpcyBub3QgYWxsb3dlZCB1bmxlc3MgZXNjYXBlZCAoIngtXF0iKQorICAgICAgICAgICAgICogWFhYOiBGaXggZm9yIGxvY2FsZS9NQkNTIGNoYXJhY3RlciB3aWR0aAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKCgqcGF0dGVybilbMV0gPT0gJy0nKSAmJiAoKCpwYXR0ZXJuKVsyXSAhPSAnXScpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0YXJ0Y2ggPSAqcGF0dGVybjsKKyAgICAgICAgICAgICAgICAqcGF0dGVybiArPSAoZXNjYXBlICYmICgoKnBhdHRlcm4pWzJdID09ICdcXCcpKSA/IDMgOiAyOworCisgICAgICAgICAgICAgICAgLyogTk9UIGEgcHJvcGVybHkgYmFsYW5jZWQgW2V4cHJdIHBhdHRlcm4sIEVPUyB0ZXJtaW5hdGVkIAorICAgICAgICAgICAgICAgICAqIG9yIHJhbmdlcyBjb250YWluaW5nIGEgc2xhc2ggaW4gRk5NX1BBVEhOQU1FIG1vZGUgcGF0dGVybgorICAgICAgICAgICAgICAgICAqIGZhbGwgb3V0IHRvIHRvIHRoZSByZXdpbmQgYW5kIHRlc3QgJ1snIGxpdGVyYWwgY29kZSBwYXRoCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCEqKnBhdHRlcm4gfHwgKHNsYXNoICYmICgqKnBhdHRlcm4gPT0gJy8nKSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLyogWFhYOiBoYW5kbGUgbG9jYWxlL01CQ1MgY29tcGFyaXNvbiwgYWR2YW5jZSBieSBNQkNTIGNoYXIgd2lkdGggKi8KKyAgICAgICAgICAgICAgICBpZiAoKCoqc3RyaW5nID49ICpzdGFydGNoKSAmJiAoKipzdHJpbmcgPD0gKipwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChub2Nhc2UgJiYgKGlzdXBwZXIoKHVuc2lnbmVkIGNoYXIpKipzdHJpbmcpIHx8CisJCQkgICAgaXN1cHBlcigodW5zaWduZWQgY2hhcikqc3RhcnRjaCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3VwcGVyKCh1bnNpZ25lZCBjaGFyKSoqcGF0dGVybikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKipzdHJpbmcpID49CisJCQkgICAgICAgIHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKnN0YXJ0Y2gpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodG9sb3dlcigodW5zaWduZWQgY2hhcikqKnN0cmluZykgPD0KKwkJCQl0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSoqcGF0dGVybikpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwOworCisgICAgICAgICAgICAgICAgKysqcGF0dGVybjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogWFhYOiBoYW5kbGUgbG9jYWxlL01CQ1MgY29tcGFyaXNvbiwgYWR2YW5jZSBieSBNQkNTIGNoYXIgd2lkdGggKi8KKyAgICAgICAgICAgIGlmICgoKipzdHJpbmcgPT0gKipwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAwOworICAgICAgICAgICAgZWxzZSBpZiAobm9jYXNlICYmIChpc3VwcGVyKCh1bnNpZ25lZCBjaGFyKSoqc3RyaW5nKSB8fAorCQkJICAgIGlzdXBwZXIoKHVuc2lnbmVkIGNoYXIpKipwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodG9sb3dlcigodW5zaWduZWQgY2hhcikqKnN0cmluZykgPT0KKwkJCQl0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSoqcGF0dGVybikpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisKKyAgICAgICAgICAgICsrKnBhdHRlcm47CisgICAgICAgIH0KKworICAgICAgICAvKiBOT1QgYSBwcm9wZXJseSBiYWxhbmNlZCBbZXhwcl0gcGF0dGVybjsgUmV3aW5kCisgICAgICAgICAqIGFuZCByZXNldCByZXN1bHQgdG8gdGVzdCAnWycgbGl0ZXJhbAorICAgICAgICAgKi8KKyAgICAgICAgKnBhdHRlcm4gPSBtaXNtYXRjaDsKKyAgICAgICAgcmVzdWx0ID0gRk5NX05PTUFUQ0g7CisgICAgfQorICAgIGVsc2UgaWYgKCoqcGF0dGVybiA9PSAnPycpIHsKKyAgICAgICAgLyogT3B0aW1pemUgJz8nIG1hdGNoIGJlZm9yZSB1bmVzY2FwaW5nICoqcGF0dGVybiAqLworICAgICAgICBpZiAoISoqc3RyaW5nIHx8IChzbGFzaCAmJiAoKipzdHJpbmcgPT0gJy8nKSkpCisgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgIGdvdG8gZm5tYXRjaF9jaF9zdWNjZXNzOworICAgIH0KKyAgICBlbHNlIGlmIChlc2NhcGUgJiYgKCoqcGF0dGVybiA9PSAnXFwnKSAmJiAoKnBhdHRlcm4pWzFdKSB7CisgICAgICAgICsrKnBhdHRlcm47CisgICAgfQorCisgICAgLyogWFhYOiBoYW5kbGUgbG9jYWxlL01CQ1MgY29tcGFyaXNvbiwgYWR2YW5jZSBieSB0aGUgTUJDUyBjaGFyIHdpZHRoICovCisgICAgaWYgKCoqc3RyaW5nID09ICoqcGF0dGVybikKKyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICBlbHNlIGlmIChub2Nhc2UgJiYgKGlzdXBwZXIoKHVuc2lnbmVkIGNoYXIpKipzdHJpbmcpIHx8CisJCSAgICBpc3VwcGVyKCh1bnNpZ25lZCBjaGFyKSoqcGF0dGVybikpCisgICAgICAgICAgICAgICAgICAgICYmICh0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSoqc3RyaW5nKSA9PQorCQkJdG9sb3dlcigodW5zaWduZWQgY2hhcikqKnBhdHRlcm4pKSkKKyAgICAgICAgcmVzdWx0ID0gMDsKKworICAgIC8qIFJlZnVzZSB0byBhZHZhbmNlIG92ZXIgdHJhaWxpbmcgc2xhc2ggb3IgbnVsbHMKKyAgICAgKi8KKyAgICBpZiAoISoqc3RyaW5nIHx8ICEqKnBhdHRlcm4gfHwgKHNsYXNoICYmICgoKipzdHJpbmcgPT0gJy8nKSB8fCAoKipwYXR0ZXJuID09ICcvJykpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworZm5tYXRjaF9jaF9zdWNjZXNzOgorICAgICsrKnBhdHRlcm47CisgICAgKysqc3RyaW5nOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworaW50IGZubWF0Y2goY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgZHVtbXlzdHJpbmdbMl0gPSB7JyAnLCAwfTsKKyAgICBjb25zdCBpbnQgZXNjYXBlID0gIShmbGFncyAmIEZOTV9OT0VTQ0FQRSk7CisgICAgY29uc3QgaW50IHNsYXNoID0gISEoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpOworICAgIGNvbnN0IGludCBsZWFkaW5nX2RpciA9ICEhKGZsYWdzICYgRk5NX0xFQURJTkdfRElSKTsKKyAgICBjb25zdCBjaGFyICpzdHJlbmRzZWc7CisgICAgY29uc3QgY2hhciAqZHVtbXlwdHI7CisgICAgY29uc3QgY2hhciAqbWF0Y2hwdHI7CisgICAgaW50IHdpbGQ7CisgICAgLyogRm9yICcqJyB3aWxkIHByb2Nlc3Npbmcgb25seTsgc3VycHJlc3MgJ3VzZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uJworICAgICAqIHdhcm5pbmdzIHdpdGggZHVtbXkgaW5pdGlhbGl6YXRpb24gdmFsdWVzOworICAgICAqLworICAgIGNvbnN0IGNoYXIgKnN0cnN0YXJ0c2VnID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICptaXNtYXRjaCA9IE5VTEw7CisgICAgaW50IG1hdGNobGVuID0gMDsKKworICAgIGlmIChzdHJubGVuKHBhdHRlcm4sIFBBVEhfTUFYKSA9PSBQQVRIX01BWCB8fAorICAgICAgICBzdHJubGVuKHN0cmluZywgUEFUSF9NQVgpID09IFBBVEhfTUFYKQorICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisKKyAgICBpZiAoKnBhdHRlcm4gPT0gJyonKQorICAgICAgICBnb3RvIGZpcnN0c2VnbWVudDsKKworICAgIHdoaWxlICgqcGF0dGVybiAmJiAqc3RyaW5nKQorICAgIHsKKyAgICAgICAgLyogUHJlLWRlY29kZSAiXC8iIHdoaWNoIGhhcyBubyBzcGVjaWFsIHNpZ25pZmljYW5jZSwgYW5kCisgICAgICAgICAqIG1hdGNoIGJhbGFuY2VkIHNsYXNoZXMsIHN0YXJ0aW5nIGEgbmV3IHNlZ21lbnQgcGF0dGVybgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHNsYXNoICYmIGVzY2FwZSAmJiAoKnBhdHRlcm4gPT0gJ1xcJykgJiYgKHBhdHRlcm5bMV0gPT0gJy8nKSkKKyAgICAgICAgICAgICsrcGF0dGVybjsKKyAgICAgICAgaWYgKHNsYXNoICYmICgqcGF0dGVybiA9PSAnLycpICYmICgqc3RyaW5nID09ICcvJykpIHsKKyAgICAgICAgICAgICsrcGF0dGVybjsKKyAgICAgICAgICAgICsrc3RyaW5nOworICAgICAgICB9ICAgICAgICAgICAgCisKK2ZpcnN0c2VnbWVudDoKKyAgICAgICAgLyogQXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHNlZ21lbnQsIHZhbGlkYXRlIGxlYWRpbmcgcGVyaW9kIGJlaGF2aW9yLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKChmbGFncyAmIEZOTV9QRVJJT0QpICYmICgqc3RyaW5nID09ICcuJykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgqcGF0dGVybiA9PSAnLicpCisgICAgICAgICAgICAgICAgKytwYXR0ZXJuOworICAgICAgICAgICAgZWxzZSBpZiAoZXNjYXBlICYmICgqcGF0dGVybiA9PSAnXFwnKSAmJiAocGF0dGVyblsxXSA9PSAnLicpKQorICAgICAgICAgICAgICAgIHBhdHRlcm4gKz0gMjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisgICAgICAgICAgICArK3N0cmluZzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIERldGVybWluZSB0aGUgZW5kIG9mIHN0cmluZyBzZWdtZW50CisgICAgICAgICAqCisgICAgICAgICAqIFByZXN1bWVzICcvJyBjaGFyYWN0ZXIgaXMgdW5pcXVlLCBub3QgY29tcG9zaXRlIGluIGFueSBNQkNTIGVuY29kaW5nCisgICAgICAgICAqLworICAgICAgICBpZiAoc2xhc2gpIHsKKyAgICAgICAgICAgIHN0cmVuZHNlZyA9IHN0cmNocihzdHJpbmcsICcvJyk7CisgICAgICAgICAgICBpZiAoIXN0cmVuZHNlZykKKyAgICAgICAgICAgICAgICBzdHJlbmRzZWcgPSBzdHJjaHIoc3RyaW5nLCAnXDAnKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN0cmVuZHNlZyA9IHN0cmNocihzdHJpbmcsICdcMCcpOworICAgICAgICB9CisKKyAgICAgICAgLyogQWxsb3cgcGF0dGVybiAnKicgdG8gYmUgY29uc3VtZWQgZXZlbiB3aXRoIG5vIHJlbWFpbmluZyBzdHJpbmcgdG8gbWF0Y2gKKyAgICAgICAgICovCisgICAgICAgIHdoaWxlICgqcGF0dGVybikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChzdHJpbmcgPiBzdHJlbmRzZWcpCisgICAgICAgICAgICAgICAgfHwgKChzdHJpbmcgPT0gc3RyZW5kc2VnKSAmJiAoKnBhdHRlcm4gIT0gJyonKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmIChzbGFzaCAmJiAoKCpwYXR0ZXJuID09ICcvJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChlc2NhcGUgJiYgKCpwYXR0ZXJuID09ICdcXCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwYXR0ZXJuWzFdID09ICcvJykpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogUmVkdWNlIGdyb3VwcyBvZiAnKicgYW5kICc/JyB0byBuICc/JyBtYXRjaGVzCisgICAgICAgICAgICAgKiBmb2xsb3dlZCBieSBvbmUgJyonIHRlc3QgZm9yIHNpbXBsaWNpdHkKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZm9yICh3aWxkID0gMDsgKCgqcGF0dGVybiA9PSAnKicpIHx8ICgqcGF0dGVybiA9PSAnPycpKTsgKytwYXR0ZXJuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgqcGF0dGVybiA9PSAnKicpIHsKKyAgICAgICAgICAgICAgICAgICAgd2lsZCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0cmluZyA8IHN0cmVuZHNlZykgeyAgLyogJiYgKCpwYXR0ZXJuID09ICc/JykgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBBZHZhbmNlIDEgY2hhciBmb3IgTUJDUyBsb2NhbGUgKi8KKyAgICAgICAgICAgICAgICAgICAgKytzdHJpbmc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeyAgLyogKHN0cmluZyA+PSBzdHJlbmRzZWcpICYmICgqcGF0dGVybiA9PSAnPycpICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh3aWxkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0cnN0YXJ0c2VnID0gc3RyaW5nOworICAgICAgICAgICAgICAgIG1pc21hdGNoID0gcGF0dGVybjsKKworICAgICAgICAgICAgICAgIC8qIENvdW50IGZpeGVkIChub24gJyonKSBjaGFyIG1hdGNoZXMgcmVtYWluaW5nIGluIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgKiBleGNsdWRpbmcgJy8nIChvciAiXC8iKSBhbmQgJyonCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgZm9yIChtYXRjaHB0ciA9IHBhdHRlcm4sIG1hdGNobGVuID0gMDsgMTsgKyttYXRjaGxlbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKm1hdGNocHRyID09ICdcMCcpIAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHNsYXNoICYmICgoKm1hdGNocHRyID09ICcvJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGVzY2FwZSAmJiAoKm1hdGNocHRyID09ICdcXCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG1hdGNocHRyWzFdID09ICcvJykpKSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbXBhcmUgcHJlY2lzZWx5IHRoaXMgbWFueSB0cmFpbGluZyBzdHJpbmcgY2hhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgcmVzdWx0aW5nIG1hdGNoIG5lZWRzIG5vIHdpbGRjYXJkIGxvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBBZGp1c3QgZm9yIE1CQ1MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcgKyBtYXRjaGxlbiA+IHN0cmVuZHNlZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmVuZHNlZyAtIG1hdGNobGVuOworICAgICAgICAgICAgICAgICAgICAgICAgd2lsZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICgqbWF0Y2hwdHIgPT0gJyonKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgYXQgbGVhc3QgdGhpcyBtYW55IHRyYWlsaW5nIHN0cmluZyBjaGFycyByZW1haW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGZvciB0aGUgZmlyc3QgY29tcGFyaXNvbgorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IEFkanVzdCBmb3IgTUJDUyAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZyArIG1hdGNobGVuID4gc3RyZW5kc2VnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogQmVnaW4gZmlyc3Qgd2lsZCBjb21wYXJpc29uIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8qIFNraXAgZm9yd2FyZCBpbiBwYXR0ZXJuIGJ5IGEgc2luZ2xlIGNoYXJhY3RlciBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgKiBVc2UgYSBkdW1teSBmbm1hdGNoX2NoKCkgdGVzdCB0byBjb3VudCBvbmUgIltyYW5nZV0iIGVzY2FwZQorICAgICAgICAgICAgICAgICAgICAgKi8gCisgICAgICAgICAgICAgICAgICAgIC8qIFhYWDogQWRqdXN0IGZvciBNQkNTICovCisgICAgICAgICAgICAgICAgICAgIGlmIChlc2NhcGUgJiYgKCptYXRjaHB0ciA9PSAnXFwnKSAmJiBtYXRjaHB0clsxXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hwdHIgKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgqbWF0Y2hwdHIgPT0gJ1snKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkdW1teXB0ciA9IGR1bW15c3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgZm5tYXRjaF9jaCgmbWF0Y2hwdHIsICZkdW1teXB0ciwgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKyttYXRjaHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogSW5jcmVtZW50YWxseSBtYXRjaCBzdHJpbmcgYWdhaW5zdCB0aGUgcGF0dGVybgorICAgICAgICAgICAgICovCisgICAgICAgICAgICB3aGlsZSAoKnBhdHRlcm4gJiYgKHN0cmluZyA8IHN0cmVuZHNlZykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU3VjY2VzczsgYmVnaW4gYSBuZXcgd2lsZCBwYXR0ZXJuIHNlYXJjaAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICgqcGF0dGVybiA9PSAnKicpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgaWYgKHNsYXNoICYmICgoKnN0cmluZyA9PSAnLycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKnBhdHRlcm4gPT0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGVzY2FwZSAmJiAoKnBhdHRlcm4gPT0gJ1xcJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHBhdHRlcm5bMV0gPT0gJy8nKSkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8qIENvbXBhcmUgY2gncyAodGhlIHBhdHRlcm4gaXMgYWR2YW5jZWQgb3ZlciAiXC8iIHRvIHRoZSAnLycsCisgICAgICAgICAgICAgICAgICogYnV0IHNsYXNoZXMgd2lsbCBtaXNtYXRjaCwgYW5kIGFyZSBub3QgY29uc3VtZWQpCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCFmbm1hdGNoX2NoKCZwYXR0ZXJuLCAmc3RyaW5nLCBmbGFncykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLyogRmFpbGVkIHRvIG1hdGNoLCBsb29wIGFnYWluc3QgbmV4dCBjaGFyIG9mZnNldCBvZiBzdHJpbmcgc2VnbWVudCAKKyAgICAgICAgICAgICAgICAgKiB1bnRpbCBub3QgZW5vdWdoIHN0cmluZyBjaGFycyByZW1haW4gdG8gbWF0Y2ggdGhlIGZpeGVkIHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAod2lsZCkgeworICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IEFkdmFuY2UgMSBjaGFyIGZvciBNQkNTIGxvY2FsZSAqLworICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSArK3N0cnN0YXJ0c2VnOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nICsgbWF0Y2hsZW4gPiBzdHJlbmRzZWcpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisKKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IG1pc21hdGNoOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoKnN0cmluZyAmJiAhKChzbGFzaCB8fCBsZWFkaW5nX2RpcikgJiYgKCpzdHJpbmcgPT0gJy8nKSkpCisgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisKKyAgICAgICAgaWYgKCpwYXR0ZXJuICYmICEoc2xhc2ggJiYgKCgqcGF0dGVybiA9PSAnLycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZXNjYXBlICYmICgqcGF0dGVybiA9PSAnXFwnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocGF0dGVyblsxXSA9PSAnLycpKSkpKQorICAgICAgICAgICAgcmV0dXJuIEZOTV9OT01BVENIOworCisgICAgICAgIGlmIChsZWFkaW5nX2RpciAmJiAhKnBhdHRlcm4gJiYgKnN0cmluZyA9PSAnLycpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBXaGVyZSBib3RoIHBhdHRlcm4gYW5kIHN0cmluZyBhcmUgYXQgRU9TLCBkZWNsYXJlIHN1Y2Nlc3MKKyAgICAgKi8KKyAgICBpZiAoISpzdHJpbmcgJiYgISpwYXR0ZXJuKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIHBhdHRlcm4gZGlkbid0IG1hdGNoIHRvIHRoZSBlbmQgb2Ygc3RyaW5nICovCisgICAgcmV0dXJuIEZOTV9OT01BVENIOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9mdG9rLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2Z0b2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQ2NjIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9mdG9rLmMKQEAgLTAsMCArMSw0MyBAQAorLyoJJE9wZW5CU0Q6IGZ0b2suYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM0IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk0IFNpZ21hU29mdCwgVGguIExvY2tlcnQgPHRob2xvQHNpZ21hc29mdC5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworICogT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL2lwYy5oPgorCitrZXlfdAorZnRvayhjb25zdCBjaGFyICpwYXRoLCBpbnQgaWQpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJcmV0dXJuIChrZXlfdCktMTsKKworCXJldHVybiAoa2V5X3QpCisJICAgICgoaWQgJiAweGZmKSA8PCAyNCB8IChzdC5zdF9kZXYgJiAweGZmKSA8PCAxNiB8IChzdC5zdF9pbm8gJiAweGZmZmYpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vZ2V0cHJvZ25hbWUuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vZ2V0cHJvZ25hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzA0NmFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9nZXRwcm9nbmFtZS5jCkBAIC0wLDAgKzEsMjYgQEAKKy8qICRPcGVuQlNEOiBnZXRwcm9nbmFtZS5jLHYgMS4zIDIwMTMvMTEvMTIgMDY6MDk6NDggZGVyYWFkdCBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBBbnRvaW5lIEphY291dG90IDxhamFjb3V0b3RAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitleHRlcm4gY29uc3QgY2hhciAqX19wcm9nbmFtZTsKKworY29uc3QgY2hhciAqCitnZXRwcm9nbmFtZSh2b2lkKQoreworCXJldHVybiAoX19wcm9nbmFtZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2lzY3R5cGUuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vaXNjdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MGI1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL2lzY3R5cGUuYwpAQCAtMCwwICsxLDE1MCBAQAorLyoJJE9wZW5CU0Q6IGlzY3R5cGUuYyx2IDEuMTEgMjAwNS8wOC8wOCAwODowNTozNCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCisgKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZpbmUgX0FOU0lfTElCUkFSWQorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI3VuZGVmIGlzYWxudW0KK2ludAoraXNhbG51bShpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gRU9GID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9VfF9MfF9OKSkpOworfQorCisjdW5kZWYgaXNhbHBoYQoraW50Citpc2FscGhhKGludCBjKQoreworCXJldHVybiAoYyA9PSBFT0YgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX1V8X0wpKSk7Cit9CisKKyN1bmRlZiBpc2JsYW5rCitpbnQKK2lzYmxhbmsoaW50IGMpCit7CisJcmV0dXJuIChjID09ICcgJyB8fCBjID09ICdcdCcpOworfQorCisjdW5kZWYgaXNjbnRybAoraW50Citpc2NudHJsKGludCBjKQoreworCXJldHVybiAoYyA9PSBFT0YgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfQykpOworfQorCisjdW5kZWYgaXNkaWdpdAoraW50Citpc2RpZ2l0KGludCBjKQoreworCXJldHVybiAoYyA9PSBFT0YgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfTikpOworfQorCisjdW5kZWYgaXNncmFwaAoraW50Citpc2dyYXBoKGludCBjKQoreworCXJldHVybiAoYyA9PSBFT0YgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX1B8X1V8X0x8X04pKSk7Cit9CisKKyN1bmRlZiBpc2xvd2VyCitpbnQKK2lzbG93ZXIoaW50IGMpCit7CisJcmV0dXJuIChjID09IEVPRiA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9MKSk7Cit9CisKKyN1bmRlZiBpc3ByaW50CitpbnQKK2lzcHJpbnQoaW50IGMpCit7CisJcmV0dXJuIChjID09IEVPRiA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfUHxfVXxfTHxfTnxfQikpKTsKK30KKworI3VuZGVmIGlzcHVuY3QKK2ludAoraXNwdW5jdChpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gRU9GID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX1ApKTsKK30KKworI3VuZGVmIGlzc3BhY2UKK2ludAoraXNzcGFjZShpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gRU9GID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX1MpKTsKK30KKworI3VuZGVmIGlzdXBwZXIKK2ludAoraXN1cHBlcihpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gRU9GID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX1UpKTsKK30KKworI3VuZGVmIGlzeGRpZ2l0CitpbnQKK2lzeGRpZ2l0KGludCBjKQoreworCXJldHVybiAoYyA9PSBFT0YgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX058X1gpKSk7Cit9CisKKyN1bmRlZiBpc2FzY2lpCitpbnQKK2lzYXNjaWkoaW50IGMpCit7CisJcmV0dXJuICgodW5zaWduZWQgaW50KWMgPD0gMDE3Nyk7Cit9CisKKyN1bmRlZiB0b2FzY2lpCitpbnQKK3RvYXNjaWkoaW50IGMpCit7CisJcmV0dXJuIChjICYgMDE3Nyk7Cit9CisKKyN1bmRlZiBfdG91cHBlcgoraW50CitfdG91cHBlcihpbnQgYykKK3sKKwlyZXR1cm4gKGMgLSAnYScgKyAnQScpOworfQorCisjdW5kZWYgX3RvbG93ZXIKK2ludAorX3RvbG93ZXIoaW50IGMpCit7CisJcmV0dXJuIChjIC0gJ0EnICsgJ2EnKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vc2V0cHJvZ25hbWUuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vc2V0cHJvZ25hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODlhMTVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi9zZXRwcm9nbmFtZS5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qICRPcGVuQlNEOiBzZXRwcm9nbmFtZS5jLHYgMS40IDIwMTMvMTEvMTIgMDY6MDk6NDggZGVyYWFkdCBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBBbnRvaW5lIEphY291dG90IDxhamFjb3V0b3RAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitleHRlcm4gY29uc3QgY2hhciAqX19wcm9nbmFtZTsKKwordm9pZAorc2V0cHJvZ25hbWUoY29uc3QgY2hhciAqcHJvZ25hbWUpCit7CisJY29uc3QgY2hhciAqdG1wbjsKKworCXRtcG4gPSBzdHJyY2hyKHByb2duYW1lLCAnLycpOworCWlmICh0bXBuID09IE5VTEwpCisJCV9fcHJvZ25hbWUgPSBwcm9nbmFtZTsKKwllbHNlCisJCV9fcHJvZ25hbWUgPSB0bXBuICsgMTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdGltZS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E1NzUwMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdGltZS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCSRPcGVuQlNEOiB0aW1lLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCit0aW1lX3QKK3RpbWUodGltZV90ICp0KQoreworCXN0cnVjdCB0aW1ldmFsIHR0OworCisJaWYgKGdldHRpbWVvZmRheSgmdHQsIChzdHJ1Y3QgdGltZXpvbmUgKikwKSA8IDApCisJCXJldHVybiAoLTEpOworCWlmICh0KQorCQkqdCA9ICh0aW1lX3QpdHQudHZfc2VjOworCXJldHVybiAodHQudHZfc2VjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3RvbG93ZXJfLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvZ2VuL3RvbG93ZXJfLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RkbGliL3RvbG93ZXJfLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdG9sb3dlcl8uYwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvdG91cHBlcl8uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9nZW4vdG91cHBlcl8uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdGRsaWIvdG91cHBlcl8uYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2dlbi90b3VwcGVyXy5jCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9jdHlwZV9wcml2YXRlLmggYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvaW5jbHVkZS9jdHlwZV9wcml2YXRlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RkbGliL2N0eXBlX3ByaXZhdGUuaApyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2luY2x1ZGUvY3R5cGVfcHJpdmF0ZS5oCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvaW5jbHVkZS9sYW5naW5mby5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2luY2x1ZGUvbGFuZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODcxYWI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2luY2x1ZGUvbGFuZ2luZm8uaApAQCAtMCwwICsxLDMgQEAKKy8qIEhhY2sgdG8gYnVpbGQgInZmcHJpbnRmLmMiLiAqLworI2RlZmluZSBSQURJWENIQVIgMQorI2RlZmluZSBubF9sYW5naW5mbyhpKSAoKGkgPT0gUkFESVhDSEFSKSA/IChjaGFyKikgIi4iIDogTlVMTCkKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvX3djc3RvZC5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9fd2NzdG9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5OTNhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvX3djc3RvZC5oCkBAIC0wLDAgKzEsMTUzIEBACisvKgkkT3BlbkJTRDogX3djc3RvZC5oLHYgMS4yIDIwMTMvMDYvMDIgMTU6MjI6MjAgbWF0dGhldyBFeHAgJAkqLworLyogJE5ldEJTRDogd2NzdG9kLmMsdiAxLjQgMjAwMS8xMC8yOCAxMjowODo0MyB5YW10IEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKTE5OTksIDIwMDAsIDIwMDEgQ2l0cnVzIFByb2plY3QsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCSRDaXRydXM6IHhwZzRkbC9GcmVlQlNEL2xpYi9saWJjL2xvY2FsZS93Y3N0b2QuYyx2IDEuMiAyMDAxLzA5LzI3IDE2OjIzOjU3IHlhbXQgRXhwICQKKyAqLworCisvKgorICogZnVuY3Rpb24gdGVtcGxhdGUgZm9yIHdjc3RvZiwgd2NzdG9kIGFuZCB3Y3N0b2xkLgorICoKKyAqIHBhcmFtZXRlcnM6CisgKglGVU5DTkFNRSA6IGZ1bmN0aW9uIG5hbWUKKyAqICAgICAgZmxvYXRfdHlwZSA6IHJldHVybiB0eXBlCisgKiAgICAgIFNUUlRPRF9GVU5DIDogY29udmVyc2lvbiBmdW5jdGlvbgorICovCisKK2Zsb2F0X3R5cGUKK0ZVTkNOQU1FKGNvbnN0IHdjaGFyX3QgKm5wdHIsIHdjaGFyX3QgKiplbmRwdHIpCit7CisJY29uc3Qgd2NoYXJfdCAqc3JjOworCXNpemVfdCBzaXplOworCWNvbnN0IHdjaGFyX3QgKnN0YXJ0OworCWNvbnN0IHdjaGFyX3QgKmFmdGVyc2lnbjsKKworCS8qCisJICogY2hlY2sgbGVuZ3RoIG9mIHN0cmluZyBhbmQgY2FsbCBzdHJ0b2QKKwkgKi8KKwlzcmMgPSBucHRyOworCisJLyogc2tpcCBzcGFjZSBmaXJzdCAqLworCXdoaWxlIChpc3dzcGFjZSgqc3JjKSkgeworCQlzcmMrKzsKKwl9CisKKwkvKiBnZXQgbGVuZ3RoIG9mIHN0cmluZyAqLworCXN0YXJ0ID0gc3JjOworCWlmICgqc3JjICYmIHdjc2NocihMIistIiwgKnNyYykpCisJCXNyYysrOworCWFmdGVyc2lnbiA9IHNyYzsKKwlpZiAod2NzbmNhc2VjbXAoc3JjLCBMImluZiIsIDMpID09IDApIHsKKwkJc3JjICs9IDM7CisJCWlmICh3Y3NuY2FzZWNtcChzcmMsIEwiaW5pdHkiLCA1KSA9PSAwKQorCQkJc3JjICs9IDU7CisJCWdvdG8gbWF0Y2g7CisJfQorCWlmICh3Y3NuY2FzZWNtcChzcmMsIEwibmFuIiwgMykgPT0gMCkgeworCQlzcmMgKz0gMzsKKwkJaWYgKCpzcmMgPT0gTCcoJykgeworCQkJc2l6ZSA9IDE7CisJCQl3aGlsZSAoc3JjW3NpemVdICE9IEwnXDAnICYmIHNyY1tzaXplXSAhPSBMJyknKQorCQkJCXNpemUrKzsKKwkJCWlmIChzcmNbc2l6ZV0gPT0gTCcpJykKKwkJCQlzcmMgKz0gc2l6ZSArIDE7CisJCX0KKwkJZ290byBtYXRjaDsKKwl9CisJc2l6ZSA9IHdjc3NwbihzcmMsIEwiMDEyMzQ1Njc4OSIpOworCXNyYyArPSBzaXplOworCWlmICgqc3JjID09IEwnLicpIHsvKiBYWFggdXNlIGxvY2FsZWNvbnYgKi8KKwkJc3JjKys7CisJCXNpemUgPSB3Y3NzcG4oc3JjLCBMIjAxMjM0NTY3ODkiKTsKKwkJc3JjICs9IHNpemU7CisJfQorCWlmICgqc3JjICYmIHdjc2NocihMIkVlIiwgKnNyYykpIHsKKwkJc3JjKys7CisJCWlmICgqc3JjICYmIHdjc2NocihMIistIiwgKnNyYykpCisJCQlzcmMrKzsKKwkJc2l6ZSA9IHdjc3NwbihzcmMsIEwiMDEyMzQ1Njc4OSIpOworCQlzcmMgKz0gc2l6ZTsKKwl9CittYXRjaDoKKwlzaXplID0gc3JjIC0gc3RhcnQ7CisKKwkvKgorCSAqIGNvbnZlcnQgdG8gYSBjaGFyLXN0cmluZyBhbmQgcGFzcyBpdCB0byBzdHJ0b2QuCisJICovCisJaWYgKHNyYyA+IGFmdGVyc2lnbikgeworCQltYnN0YXRlX3Qgc3Q7CisJCWNoYXIgKmJ1ZjsKKwkJY2hhciAqZW5kOworCQljb25zdCB3Y2hhcl90ICpzOworCQlzaXplX3Qgc2l6ZV9jb252ZXJ0ZWQ7CisJCWZsb2F0X3R5cGUgcmVzdWx0OworCQlzaXplX3QgYnVmc2l6ZTsKKworCQlzID0gc3RhcnQ7CisJCW1lbXNldCgmc3QsIDAsIHNpemVvZihzdCkpOworCQlidWZzaXplID0gd2NzbnJ0b21icyhOVUxMLCAmcywgc2l6ZSwgMCwgJnN0KTsKKworCQlidWYgPSBtYWxsb2MoYnVmc2l6ZSArIDEpOworCQlpZiAoIWJ1ZikgeworCQkJZXJybm8gPSBFTk9NRU07IC8qIFhYWCAqLworCQkJZ290byBmYWlsOworCQl9CisKKwkJcyA9IHN0YXJ0OworCQltZW1zZXQoJnN0LCAwLCBzaXplb2Yoc3QpKTsKKwkJc2l6ZV9jb252ZXJ0ZWQgPSB3Y3NucnRvbWJzKGJ1ZiwgJnMsIHNpemUsIGJ1ZnNpemUsICZzdCk7CisJCWlmIChzaXplX2NvbnZlcnRlZCAhPSBidWZzaXplKSB7CisJCQkvKiBYWFggc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJCWZyZWUoYnVmKTsKKwkJCWVycm5vID0gRUlMU0VROworCQkJZ290byBmYWlsOworCQl9CisKKwkJYnVmW2J1ZnNpemVdID0gMDsKKwkJcmVzdWx0ID0gU1RSVE9EX0ZVTkMoYnVmLCAmZW5kKTsKKworCQlpZiAoZW5kcHRyKSB7CisJCQljb25zdCBjaGFyICpzID0gYnVmOworCQkJbWVtc2V0KCZzdCwgMCwgc2l6ZW9mKHN0KSk7CisJCQlzaXplID0gbWJzbnJ0b3djcyhOVUxMLCAmcywgZW5kIC0gYnVmLCAwLCAmc3QpOworCisJCQkvKiBMSU5URUQgYmFkIGludGVyZmFjZSAqLworCQkJKmVuZHB0ciA9ICh3Y2hhcl90KilzdGFydCArIHNpemU7CisJCX0KKworCQlmcmVlKGJ1Zik7CisKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKK2ZhaWw6CisJaWYgKGVuZHB0cikKKwkJLyogTElOVEVEIGJhZCBpbnRlcmZhY2UgKi8KKwkJKmVuZHB0ciA9ICh3Y2hhcl90KilucHRyOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL193Y3N0b2wuaCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvX3djc3RvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDliYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL193Y3N0b2wuaApAQCAtMCwwICsxLDEzNiBAQAorLyoJJE9wZW5CU0Q6IF93Y3N0b2wuaCx2IDEuMSAyMDA1LzA3LzAxIDA4OjU5OjI3IGVzcGllIEV4cCAkCSovCisvKiAkTmV0QlNEOiBfd2NzdG9sLmgsdiAxLjIgMjAwMy8wOC8wNyAxNjo0MzowMyBhZ2MgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBPcmlnaW5hbCB2ZXJzaW9uIElEOgorICogQCgjKXN0cnRvbC5jCTguMSAoQmVya2VsZXkpIDYvNC85MworICogTmV0QlNEOiB3Y3N0b2wuYyx2IDEuMSAyMDAxLzA5LzI3IDE2OjMwOjM2IHlhbXQgRXhwCisgKiBDaXRydXM6IHhwZzRkbC9GcmVlQlNEL2xpYi9saWJjL2xvY2FsZS93Y3N0b2wuYyx2IDEuMiAyMDAxLzA5LzIxIDE2OjExOjQxIHlhbXQgRXhwCisgKi8KKworLyoKKyAqIGZ1bmN0aW9uIHRlbXBsYXRlIGZvciB3Y3N0b2wsIHdjc3RvbGwgYW5kIHdjc3RvaW1heC4KKyAqCisgKiBwYXJhbWV0ZXJzOgorICoJRlVOQ05BTUUgOiBmdW5jdGlvbiBuYW1lCisgKiAgICAgIGludF90eXBlIDogcmV0dXJuIHR5cGUKKyAqICAgICAgTUlOX1ZBTFVFIDogbG93ZXIgbGltaXQgb2YgdGhlIHJldHVybiB0eXBlCisgKiAgICAgIE1BWF9WQUxVRSA6IHVwcGVyIGxpbWl0IG9mIHRoZSByZXR1cm4gdHlwZQorICovCisKK2ludF90eXBlCitGVU5DTkFNRShjb25zdCB3Y2hhcl90ICpucHRyLCB3Y2hhcl90ICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwljb25zdCB3Y2hhcl90ICpzOworCWludF90eXBlIGFjYywgY3V0b2ZmOworCXdpbnRfdCB3YzsKKwlpbnQgaTsKKwlpbnQgbmVnLCBhbnksIGN1dGxpbTsKKworCS8qIGNoZWNrIGJhc2UgdmFsdWUgKi8KKwlpZiAoYmFzZSAmJiAoYmFzZSA8IDIgfHwgYmFzZSA+IDM2KSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBTa2lwIHdoaXRlIHNwYWNlIGFuZCBwaWNrIHVwIGxlYWRpbmcgKy8tIHNpZ24gaWYgYW55LgorCSAqIElmIGJhc2UgaXMgMCwgYWxsb3cgMHggZm9yIGhleCBhbmQgMCBmb3Igb2N0YWwsIGVsc2UKKwkgKiBhc3N1bWUgZGVjaW1hbDsgaWYgYmFzZSBpcyBhbHJlYWR5IDE2LCBhbGxvdyAweC4KKwkgKi8KKwlzID0gbnB0cjsKKwlkbyB7CisJCXdjID0gKHdjaGFyX3QpICpzKys7CisJfSB3aGlsZSAoaXN3c3BhY2Uod2MpKTsKKwlpZiAod2MgPT0gTCctJykgeworCQluZWcgPSAxOworCQl3YyA9ICpzKys7CisJfSBlbHNlIHsKKwkJbmVnID0gMDsKKwkJaWYgKHdjID09IEwnKycpCisJCQl3YyA9ICpzKys7CisJfQorCWlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmCisJICAgIHdjID09IEwnMCcgJiYgKCpzID09IEwneCcgfHwgKnMgPT0gTCdYJykpIHsKKwkJd2MgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IHdjID09IEwnMCcgPyA4IDogMTA7CisKKwkvKgorCSAqIFNlZSBzdHJ0b2wgZm9yIGNvbW1lbnRzIGFzIHRvIHRoZSBsb2dpYyB1c2VkLgorCSAqLworCWN1dG9mZiA9IG5lZyA/IE1JTl9WQUxVRSA6IE1BWF9WQUxVRTsKKwljdXRsaW0gPSAoaW50KShjdXRvZmYgJSBiYXNlKTsKKwljdXRvZmYgLz0gYmFzZTsKKwlpZiAobmVnKSB7CisJCWlmIChjdXRsaW0gPiAwKSB7CisJCQljdXRsaW0gLT0gYmFzZTsKKwkJCWN1dG9mZiArPSAxOworCQl9CisJCWN1dGxpbSA9IC1jdXRsaW07CisJfQorCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IHdjID0gKHdjaGFyX3QpICpzKyspIHsKKwkJaSA9IHdjdG9pbnQod2MpOworCQlpZiAoaSA9PSAtMSkKKwkJCWJyZWFrOworCQlpZiAoaSA+PSBiYXNlKQorCQkJYnJlYWs7CisJCWlmIChhbnkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChuZWcpIHsKKwkJCWlmIChhY2MgPCBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgaSA+IGN1dGxpbSkpIHsKKwkJCQlhbnkgPSAtMTsKKwkJCQlhY2MgPSBNSU5fVkFMVUU7CisJCQkJZXJybm8gPSBFUkFOR0U7CisJCQl9IGVsc2UgeworCQkJCWFueSA9IDE7CisJCQkJYWNjICo9IGJhc2U7CisJCQkJYWNjIC09IGk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYWNjID4gY3V0b2ZmIHx8IChhY2MgPT0gY3V0b2ZmICYmIGkgPiBjdXRsaW0pKSB7CisJCQkJYW55ID0gLTE7CisJCQkJYWNjID0gTUFYX1ZBTFVFOworCQkJCWVycm5vID0gRVJBTkdFOworCQkJfSBlbHNlIHsKKwkJCQlhbnkgPSAxOworCQkJCWFjYyAqPSBiYXNlOworCQkJCWFjYyArPSBpOworCQkJfQorCQl9CisJfQorCWlmIChlbmRwdHIgIT0gMCkKKwkJLyogTElOVEVEIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uICovCisJCSplbmRwdHIgPSAod2NoYXJfdCAqKShhbnkgPyBzIC0gMSA6IG5wdHIpOworCXJldHVybiAoYWNjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvX3djc3RvdWwuaCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvX3djc3RvdWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzZiMzhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9fd2NzdG91bC5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgkkT3BlbkJTRDogX3djc3RvdWwuaCx2IDEuMSAyMDA1LzA3LzAxIDA4OjU5OjI3IGVzcGllIEV4cCAkCSovCisvKiAkTmV0QlNEOiBfd2NzdG91bC5oLHYgMS4yIDIwMDMvMDgvMDcgMTY6NDM6MDMgYWdjIEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBPcmlnaW5hbCB2ZXJzaW9uIElEOgorICogQCgjKXN0cnRvdWwuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMKKyAqIENpdHJ1czogeHBnNGRsL0ZyZWVCU0QvbGliL2xpYmMvbG9jYWxlL3djc3RvdWwuYyx2IDEuMiAyMDAxLzA5LzIxIDE2OjExOjQxIHlhbXQgRXhwCisgKiBOZXRCU0Q6IHdjc3RvdWwuYyx2IDEuMSAyMDAxLzA5LzI3IDE2OjMwOjM3IHlhbXQgRXhwCisgKi8KKworLyoKKyAqIGZ1bmN0aW9uIHRlbXBsYXRlIGZvciB3Y3N0b3VsLCB3Y3N0b3VsbCBhbmQgd2NzdG91bWF4LgorICoKKyAqIHBhcmFtZXRlcnM6CisgKglGVU5DTkFNRSAgOiBmdW5jdGlvbiBuYW1lCisgKiAgICAgIHVpbnRfdHlwZSA6IHJldHVybiB0eXBlCisgKiAgICAgIE1BWF9WQUxVRSA6IHVwcGVyIGxpbWl0IG9mIHRoZSByZXR1cm4gdHlwZQorICovCisKK3VpbnRfdHlwZQorRlVOQ05BTUUoY29uc3Qgd2NoYXJfdCAqbnB0ciwgd2NoYXJfdCAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisJY29uc3Qgd2NoYXJfdCAqczsKKwl1aW50X3R5cGUgYWNjLCBjdXRvZmY7CisJd2ludF90IHdjOworCWludCBpOworCWludCBuZWcsIGFueSwgY3V0bGltOworCisJaWYgKGJhc2UgJiYgKGJhc2UgPCAyIHx8IGJhc2UgPiAzNikpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogU2tpcCB3aGl0ZSBzcGFjZSBhbmQgcGljayB1cCBsZWFkaW5nICsvLSBzaWduIGlmIGFueS4KKwkgKiBJZiBiYXNlIGlzIDAsIGFsbG93IDB4IGZvciBoZXggYW5kIDAgZm9yIG9jdGFsLCBlbHNlCisJICogYXNzdW1lIGRlY2ltYWw7IGlmIGJhc2UgaXMgYWxyZWFkeSAxNiwgYWxsb3cgMHguCisJICovCisJcyA9IG5wdHI7CisJZG8geworCQl3YyA9ICh3Y2hhcl90KSAqcysrOworCX0gd2hpbGUgKGlzd3NwYWNlKHdjKSk7CisJaWYgKHdjID09IEwnLScpIHsKKwkJbmVnID0gMTsKKwkJd2MgPSAqcysrOworCX0gZWxzZSB7CisJCW5lZyA9IDA7CisJCWlmICh3YyA9PSBMJysnKQorCQkJd2MgPSAqcysrOworCX0KKwlpZiAoKGJhc2UgPT0gMCB8fCBiYXNlID09IDE2KSAmJgorCSAgICB3YyA9PSBMJzAnICYmICgqcyA9PSBMJ3gnIHx8ICpzID09IEwnWCcpKSB7CisJCXdjID0gc1sxXTsKKwkJcyArPSAyOworCQliYXNlID0gMTY7CisJfQorCWlmIChiYXNlID09IDApCisJCWJhc2UgPSB3YyA9PSBMJzAnID8gOCA6IDEwOworCisJLyoKKwkgKiBTZWUgc3RydG91bCBmb3IgY29tbWVudHMgYXMgdG8gdGhlIGxvZ2ljIHVzZWQuCisJICovCisJY3V0b2ZmID0gTUFYX1ZBTFVFIC8gKHVpbnRfdHlwZSliYXNlOworCWN1dGxpbSA9IChpbnQpKE1BWF9WQUxVRSAlICh1aW50X3R5cGUpYmFzZSk7CisJZm9yIChhY2MgPSAwLCBhbnkgPSAwOzsgd2MgPSAod2NoYXJfdCkgKnMrKykgeworCQlpID0gd2N0b2ludCh3Yyk7CisJCWlmIChpID09ICh3aW50X3QpLTEpCisJCQlicmVhazsKKwkJaWYgKGkgPj0gYmFzZSkKKwkJCWJyZWFrOworCQlpZiAoYW55IDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoYWNjID4gY3V0b2ZmIHx8IChhY2MgPT0gY3V0b2ZmICYmIGkgPiBjdXRsaW0pKSB7CisJCQlhbnkgPSAtMTsKKwkJCWFjYyA9IE1BWF9WQUxVRTsKKwkJCWVycm5vID0gRVJBTkdFOworCQl9IGVsc2UgeworCQkJYW55ID0gMTsKKwkJCWFjYyAqPSAodWludF90eXBlKWJhc2U7CisJCQlhY2MgKz0gaTsKKwkJfQorCX0KKwlpZiAobmVnICYmIGFueSA+IDApCisJCWFjYyA9IC1hY2M7CisJaWYgKGVuZHB0ciAhPSAwKQorCQkvKiBMSU5URUQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gKi8KKwkJKmVuZHB0ciA9ICh3Y2hhcl90ICopKGFueSA/IHMgLSAxIDogbnB0cik7CisJcmV0dXJuIChhY2MpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9idG93Yy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9idG93Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MjczNDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL2J0b3djLmMKQEAgLTAsMCArMSw1MiBAQAorLyoJJE9wZW5CU0Q6IGJ0b3djLmMsdiAxLjIgMjAxMi8xMi8wNSAyMzoyMDowMCBkZXJhYWR0IEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIFRpbSBKLiBSb2JiaW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCit3aW50X3QKK2J0b3djKGludCBjKQoreworCW1ic3RhdGVfdCBtYnM7CisJY2hhciBjYzsKKwl3Y2hhcl90IHdjOworCisJaWYgKGMgPT0gRU9GKQorCQlyZXR1cm4gKFdFT0YpOworCS8qCisJICogV2UgZXhwZWN0IG1icnRvd2MoKSB0byByZXR1cm4gMCBvciAxLCBoZW5jZSB0aGUgY2hlY2sgZm9yIG4gPiAxCisJICogd2hpY2ggZGV0ZWN0cyBlcnJvciByZXR1cm4gdmFsdWVzIGFzIHdlbGwgYXMgImltcG9zc2libGUiIGJ5dGUKKwkgKiBjb3VudHMuCisJICovCisJbWVtc2V0KCZtYnMsIDAsIHNpemVvZihtYnMpKTsKKwljYyA9IChjaGFyKWM7CisJaWYgKG1icnRvd2MoJndjLCAmY2MsIDEsICZtYnMpID4gMSkKKwkJcmV0dXJuIChXRU9GKTsKKwlyZXR1cm4gKHdjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvbWJybGVuLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL21icmxlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDViZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL21icmxlbi5jCkBAIC0wLDAgKzEsMzkgQEAKKy8qCSRPcGVuQlNEOiBtYnJsZW4uYyx2IDEuMiAyMDEyLzEyLzA1IDIzOjIwOjAwIGRlcmFhZHQgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBUaW0gSi4gUm9iYmlucy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHdjaGFyLmg+CisKK3NpemVfdAorbWJybGVuKGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IHMsIHNpemVfdCBuLCBtYnN0YXRlX3QgKiBfX3Jlc3RyaWN0IHBzKQoreworCXN0YXRpYyBtYnN0YXRlX3QgbWJzOworCisJaWYgKHBzID09IE5VTEwpCisJCXBzID0gJm1iczsKKwlyZXR1cm4gKG1icnRvd2MoTlVMTCwgcywgbiwgcHMpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvbWJzdG93Y3MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvbWJzdG93Y3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTdhODU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS9tYnN0b3djcy5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCSRPcGVuQlNEOiBtYnN0b3djcy5jLHYgMS4yIDIwMTIvMTIvMDUgMjM6MjA6MDAgZGVyYWFkdCBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFRpbSBKLiBSb2JiaW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCitzaXplX3QKK21ic3Rvd2NzKHdjaGFyX3QgKiBfX3Jlc3RyaWN0IHB3Y3MsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IHMsIHNpemVfdCBuKQoreworCW1ic3RhdGVfdCBtYnM7CisJY29uc3QgY2hhciAqc3A7CisKKwltZW1zZXQoJm1icywgMCwgc2l6ZW9mKG1icykpOworCXNwID0gczsKKwlyZXR1cm4gKG1ic3J0b3djcyhwd2NzLCAmc3AsIG4sICZtYnMpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvbWJ0b3djLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL21idG93Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMGY0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL21idG93Yy5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCSRPcGVuQlNEOiBtYnRvd2MuYyx2IDEuMiAyMDEyLzEyLzA1IDIzOjIwOjAwIGRlcmFhZHQgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBUaW0gSi4gUm9iYmlucy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCitpbnQKK21idG93Yyh3Y2hhcl90ICogX19yZXN0cmljdCBwd2MsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IHMsIHNpemVfdCBuKQoreworCXN0YXRpYyBtYnN0YXRlX3QgbWJzOworCXNpemVfdCBydmFsOworCisJaWYgKHMgPT0gTlVMTCkgeworCQkvKiBObyBzdXBwb3J0IGZvciBzdGF0ZSBkZXBlbmRlbnQgZW5jb2RpbmdzLiAqLworCQltZW1zZXQoJm1icywgMCwgc2l6ZW9mKG1icykpOworCQlyZXR1cm4gKDApOworCX0KKwlydmFsID0gbWJydG93Yyhwd2MsIHMsIG4sICZtYnMpOworCWlmIChydmFsID09IChzaXplX3QpLTEgfHwgcnZhbCA9PSAoc2l6ZV90KS0yKQorCQlyZXR1cm4gKC0xKTsKKwlyZXR1cm4gKChpbnQpcnZhbCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc2NvbGwuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzY29sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzMyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc2NvbGwuYwpAQCAtMCwwICsxLDQxIEBACisvKgkkT3BlbkJTRDogd2NzY29sbC5jLHYgMS4yIDIwMTIvMTIvMDUgMjM6MjA6MDAgZGVyYWFkdCBFeHAgJCAqLworLyoJJE5ldEJTRDogd2NzY29sbC5jLHYgMS4xIDIwMDMvMDMvMDIgMjI6MTg6MTYgdHNoaW96YWsgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpMjAwMyBDaXRydXMgUHJvamVjdCwKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKy8qCisgKiBDb21wYXJlIHN0cmluZ3Mgd2l0aCB1c2luZyBjb2xsYXRpbmcgaW5mb3JtYXRpb24uCisgKi8KK2ludAord2NzY29sbChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIpCit7CisJLyogWFhYOiBMQ19DT0xMQVRFIHNob3VsZCBiZSBpbXBsZW1lbnRlZC4gKi8KKwlyZXR1cm4gKHdjc2NtcChzMSwgczIpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9kLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1N2QwYTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvZC5jCkBAIC0wLDAgKzEsMTMgQEAKKy8qCSRPcGVuQlNEOiB3Y3N0b2QuYyx2IDEuMyAyMDA5LzAxLzEzIDE4OjE4OjMxIGtldHRlbmlzIEV4cCAkCSovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKyNkZWZpbmUgRlVOQ05BTUUJd2NzdG9kCit0eXBlZGVmIGRvdWJsZQkJZmxvYXRfdHlwZTsKKyNkZWZpbmUgU1RSVE9EX0ZVTkMJc3RydG9kCisKKyNpbmNsdWRlICJfd2NzdG9kLmgiCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvZi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGQ3NmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2YuYwpAQCAtMCwwICsxLDEzIEBACisvKgkkT3BlbkJTRDogd2NzdG9mLmMsdiAxLjEgMjAwOS8wMS8xMyAxODoxODozMSBrZXR0ZW5pcyBFeHAgJAkqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHdjdHlwZS5oPgorCisjZGVmaW5lIEZVTkNOQU1FCXdjc3RvZgordHlwZWRlZiBmbG9hdAkJZmxvYXRfdHlwZTsKKyNkZWZpbmUgU1RSVE9EX0ZVTkMJc3RydG9mCisKKyNpbmNsdWRlICJfd2NzdG9kLmgiCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvaW1heC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2ltYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDZhN2M3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2ltYXguYwpAQCAtMCwwICsxLDE5IEBACisvKgkkT3BlbkJTRDogd2NzdG9pbWF4LmMsdiAxLjEgMjAwOS8wMS8xMyAxODoxMzo1MSBrZXR0ZW5pcyBFeHAgJAkqLworLyogJE5ldEJTRDogd2NzdG9sLmMsdiAxLjIgMjAwMy8wMy8xMSAwOToyMToyMyB0c2hpb3phayBFeHAgJCAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKworI2luY2x1ZGUgIndjdG9pbnQuaCIKKworI2RlZmluZQlGVU5DTkFNRQl3Y3N0b2ltYXgKK3R5cGVkZWYgaW50bWF4X3QJaW50X3R5cGU7CisjZGVmaW5lCU1JTl9WQUxVRQlJTlRNQVhfTUlOCisjZGVmaW5lCU1BWF9WQUxVRQlJTlRNQVhfTUFYCisKKyNpbmNsdWRlICJfd2NzdG9sLmgiCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvbC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzM5NWEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2wuYwpAQCAtMCwwICsxLDE4IEBACisvKgkkT3BlbkJTRDogd2NzdG9sLmMsdiAxLjIgMjAwNS8wOC8wOCAwODowNTozNSBlc3BpZSBFeHAgJAkqLworLyogJE5ldEJTRDogd2NzdG9sLmMsdiAxLjIgMjAwMy8wMy8xMSAwOToyMToyMyB0c2hpb3phayBFeHAgJCAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKyNpbmNsdWRlICJ3Y3RvaW50LmgiCisKKyNkZWZpbmUJRlVOQ05BTUUJd2NzdG9sCit0eXBlZGVmIGxvbmcgaW50X3R5cGU7CisjZGVmaW5lCU1JTl9WQUxVRQlMT05HX01JTgorI2RlZmluZQlNQVhfVkFMVUUJTE9OR19NQVgKKworI2luY2x1ZGUgIl93Y3N0b2wuaCIKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9sZC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2xkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0MjU0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9sZC5jCkBAIC0wLDAgKzEsMTMgQEAKKy8qCSRPcGVuQlNEOiB3Y3N0b2xkLmMsdiAxLjEgMjAwOS8wMS8xMyAxODoxODozMSBrZXR0ZW5pcyBFeHAgJAkqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPHdjdHlwZS5oPgorCisjZGVmaW5lIEZVTkNOQU1FCXdjc3RvbGQKK3R5cGVkZWYgbG9uZyBkb3VibGUJZmxvYXRfdHlwZTsKKyNkZWZpbmUgU1RSVE9EX0ZVTkMJc3RydG9sZAorCisjaW5jbHVkZSAiX3djc3RvZC5oIgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2xsLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjZkYjcwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b2xsLmMKQEAgLTAsMCArMSwxOCBAQAorLyoJJE9wZW5CU0Q6IHdjc3RvbGwuYyx2IDEuMiAyMDA1LzA4LzA4IDA4OjA1OjM1IGVzcGllIEV4cCAkCSovCisvKiAkTmV0QlNEOiB3Y3N0b2xsLmMsdiAxLjEgMjAwMy8wMy8xMSAwOToyMToyMyB0c2hpb3phayBFeHAgJCAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKyNpbmNsdWRlICJ3Y3RvaW50LmgiCisKKyNkZWZpbmUJRlVOQ05BTUUJd2NzdG9sbAordHlwZWRlZiBsb25nIGxvbmcgaW50IGludF90eXBlOworI2RlZmluZQlNSU5fVkFMVUUJTExPTkdfTUlOCisjZGVmaW5lCU1BWF9WQUxVRQlMTE9OR19NQVgKKworI2luY2x1ZGUgIl93Y3N0b2wuaCIKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9tYnMuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG9tYnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODA1NGM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b21icy5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCSRPcGVuQlNEOiB3Y3N0b21icy5jLHYgMS4yIDIwMTIvMTIvMDUgMjM6MjA6MDAgZGVyYWFkdCBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFRpbSBKLiBSb2JiaW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworc2l6ZV90Cit3Y3N0b21icyhjaGFyICogX19yZXN0cmljdCBzLCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBwd2NzLCBzaXplX3QgbikKK3sKKwltYnN0YXRlX3QgbWJzOworCWNvbnN0IHdjaGFyX3QgKnB3Y3NwOworCisJbWVtc2V0KCZtYnMsIDAsIHNpemVvZihtYnMpKTsKKwlwd2NzcCA9IHB3Y3M7CisJcmV0dXJuICh3Y3NydG9tYnMocywgJnB3Y3NwLCBuLCAmbWJzKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvdWwuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzdG91bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NjM4NjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvdWwuYwpAQCAtMCwwICsxLDE3IEBACisvKgkkT3BlbkJTRDogd2NzdG91bC5jLHYgMS4yIDIwMDUvMDgvMDggMDg6MDU6MzUgZXNwaWUgRXhwICQJKi8KKy8qCSROZXRCU0Q6IHdjc3RvdWwuYyx2IDEuMiAyMDAzLzAzLzExIDA5OjIxOjI0IHRzaGlvemFrIEV4cCAkCSovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKworI2luY2x1ZGUgIndjdG9pbnQuaCIKKworI2RlZmluZQlGVU5DTkFNRQl3Y3N0b3VsCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludF90eXBlOworI2RlZmluZQlNQVhfVkFMVUUJVUxPTkdfTUFYCisKKyNpbmNsdWRlICJfd2NzdG91bC5oIgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b3VsbC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b3VsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NzFjMzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvdWxsLmMKQEAgLTAsMCArMSwxNyBAQAorLyoJJE9wZW5CU0Q6IHdjc3RvdWxsLmMsdiAxLjIgMjAwNS8wOC8wOCAwODowNTozNSBlc3BpZSBFeHAgJAkqLworLyoJJE5ldEJTRDogd2NzdG91bGwuYyx2IDEuMSAyMDAzLzAzLzExIDA5OjIxOjI0IHRzaGlvemFrIEV4cCAkCSovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlIDx3Y3R5cGUuaD4KKworI2luY2x1ZGUgIndjdG9pbnQuaCIKKworI2RlZmluZQlGVU5DTkFNRQl3Y3N0b3VsbAordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfdHlwZTsKKyNkZWZpbmUJTUFYX1ZBTFVFCVVMTE9OR19NQVgKKworI2luY2x1ZGUgIl93Y3N0b3VsLmgiCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbG9jYWxlL3djc3RvdW1heC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b3VtYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2Q0NzEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N0b3VtYXguYwpAQCAtMCwwICsxLDE4IEBACisvKgkkT3BlbkJTRDogd2NzdG91bWF4LmMsdiAxLjEgMjAwOS8wMS8xMyAxODoxMzo1MSBrZXR0ZW5pcyBFeHAgJAkqLworLyoJJE5ldEJTRDogd2NzdG91bC5jLHYgMS4yIDIwMDMvMDMvMTEgMDk6MjE6MjQgdHNoaW96YWsgRXhwICQJKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisKKyNpbmNsdWRlICJ3Y3RvaW50LmgiCisKKyNkZWZpbmUJRlVOQ05BTUUJd2NzdG91bWF4Cit0eXBlZGVmIHVpbnRtYXhfdAl1aW50X3R5cGU7CisjZGVmaW5lCU1BWF9WQUxVRQlVSU5UTUFYX01BWAorCisjaW5jbHVkZSAiX3djc3RvdWwuaCIKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzeGZybS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3N4ZnJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThkYjRhOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2NzeGZybS5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qCSRPcGVuQlNEOiB3Y3N4ZnJtLmMsdiAxLjIgMjAxMi8xMi8wNSAyMzoyMDowMCBkZXJhYWR0IEV4cCAkICovCisvKgkkT3BlbkJTRDogd2NzeGZybS5jLHYgMS4yIDIwMTIvMTIvMDUgMjM6MjA6MDAgZGVyYWFkdCBFeHAgJAkqLworLyoJJE5ldEJTRDogbXVsdGlieXRlX3NiLmMsdiAxLjQgMjAwMy8wOC8wNyAxNjo0MzowNCBhZ2MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHdjaGFyLmg+CisKK3NpemVfdCAKK3djc3hmcm0od2NoYXJfdCAqZGVzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbikKK3sKKwlpZiAobiA9PSAwKQorCQlyZXR1cm4gd2NzbGVuKHNyYyk7CisJcmV0dXJuIHdjc2xjcHkoZGVzdCwgc3JjLCBuKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2N0b2IuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2N0b2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTFmNDBjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3RvYi5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCSRPcGVuQlNEOiB3Y3RvYi5jLHYgMS4yIDIwMTIvMTIvMDUgMjM6MjA6MDAgZGVyYWFkdCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBUaW0gSi4gUm9iYmlucy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworaW50Cit3Y3RvYih3aW50X3QgYykKK3sKKwltYnN0YXRlX3QgbWJzOworCWNoYXIgYnVmW01CX0xFTl9NQVhdOworCisJbWVtc2V0KCZtYnMsIDAsIHNpemVvZihtYnMpKTsKKwlpZiAoYyA9PSBXRU9GIHx8IHdjcnRvbWIoYnVmLCBjLCAmbWJzKSAhPSAxKQorCQlyZXR1cm4gKEVPRik7CisJcmV0dXJuICgodW5zaWduZWQgY2hhcikqYnVmKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2N0b2ludC5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3RvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliZjA4NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2N0b2ludC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCSRPcGVuQlNEOiB3Y3RvaW50LmgsdiAxLjEgMjAwNS8wNy8wMSAwODo1OToyNyBlc3BpZSBFeHAgJAkqLworLyogJE5ldEJTRDogX193Y3RvaW50LmgsdiAxLjEgMjAwMS8wOS8yOCAxMToyNTozNyB5YW10IEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKTIwMDEgQ2l0cnVzIFByb2plY3QsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCSRDaXRydXM6IHhwZzRkbC9GcmVlQlNEL2xpYi9saWJjL2xvY2FsZS9fX3djdG9pbnQuaCx2IDEuMSAyMDAxLzA5LzIxIDEzOjUyOjMyIHlhbXQgRXhwICQKKyAqLworCisKK19faW5saW5lIHN0YXRpYyBpbnQKK3djdG9pbnQod2NoYXJfdCB3YykKK3sKKwlpbnQgbjsKKworCXN3aXRjaCAod2MpIHsKKwljYXNlIEwnMCc6IG4gPSAwOyBicmVhazsKKwljYXNlIEwnMSc6IG4gPSAxOyBicmVhazsKKwljYXNlIEwnMic6IG4gPSAyOyBicmVhazsKKwljYXNlIEwnMyc6IG4gPSAzOyBicmVhazsKKwljYXNlIEwnNCc6IG4gPSA0OyBicmVhazsKKwljYXNlIEwnNSc6IG4gPSA1OyBicmVhazsKKwljYXNlIEwnNic6IG4gPSA2OyBicmVhazsKKwljYXNlIEwnNyc6IG4gPSA3OyBicmVhazsKKwljYXNlIEwnOCc6IG4gPSA4OyBicmVhazsKKwljYXNlIEwnOSc6IG4gPSA5OyBicmVhazsKKwljYXNlIEwnQSc6IGNhc2UgTCdhJzogbiA9IDEwOyBicmVhazsKKwljYXNlIEwnQic6IGNhc2UgTCdiJzogbiA9IDExOyBicmVhazsKKwljYXNlIEwnQyc6IGNhc2UgTCdjJzogbiA9IDEyOyBicmVhazsKKwljYXNlIEwnRCc6IGNhc2UgTCdkJzogbiA9IDEzOyBicmVhazsKKwljYXNlIEwnRSc6IGNhc2UgTCdlJzogbiA9IDE0OyBicmVhazsKKwljYXNlIEwnRic6IGNhc2UgTCdmJzogbiA9IDE1OyBicmVhazsKKwljYXNlIEwnRyc6IGNhc2UgTCdnJzogbiA9IDE2OyBicmVhazsKKwljYXNlIEwnSCc6IGNhc2UgTCdoJzogbiA9IDE3OyBicmVhazsKKwljYXNlIEwnSSc6IGNhc2UgTCdpJzogbiA9IDE4OyBicmVhazsKKwljYXNlIEwnSic6IGNhc2UgTCdqJzogbiA9IDE5OyBicmVhazsKKwljYXNlIEwnSyc6IGNhc2UgTCdrJzogbiA9IDIwOyBicmVhazsKKwljYXNlIEwnTCc6IGNhc2UgTCdsJzogbiA9IDIxOyBicmVhazsKKwljYXNlIEwnTSc6IGNhc2UgTCdtJzogbiA9IDIyOyBicmVhazsKKwljYXNlIEwnTic6IGNhc2UgTCduJzogbiA9IDIzOyBicmVhazsKKwljYXNlIEwnTyc6IGNhc2UgTCdvJzogbiA9IDI0OyBicmVhazsKKwljYXNlIEwnUCc6IGNhc2UgTCdwJzogbiA9IDI1OyBicmVhazsKKwljYXNlIEwnUSc6IGNhc2UgTCdxJzogbiA9IDI2OyBicmVhazsKKwljYXNlIEwnUic6IGNhc2UgTCdyJzogbiA9IDI3OyBicmVhazsKKwljYXNlIEwnUyc6IGNhc2UgTCdzJzogbiA9IDI4OyBicmVhazsKKwljYXNlIEwnVCc6IGNhc2UgTCd0JzogbiA9IDI5OyBicmVhazsKKwljYXNlIEwnVSc6IGNhc2UgTCd1JzogbiA9IDMwOyBicmVhazsKKwljYXNlIEwnVic6IGNhc2UgTCd2JzogbiA9IDMxOyBicmVhazsKKwljYXNlIEwnVyc6IGNhc2UgTCd3JzogbiA9IDMyOyBicmVhazsKKwljYXNlIEwnWCc6IGNhc2UgTCd4JzogbiA9IDMzOyBicmVhazsKKwljYXNlIEwnWSc6IGNhc2UgTCd5JzogbiA9IDM0OyBicmVhazsKKwljYXNlIEwnWic6IGNhc2UgTCd6JzogbiA9IDM1OyBicmVhazsKKwlkZWZhdWx0OiBuID0gLTE7IGJyZWFrOyAvKiBlcnJvciAqLworCX0KKworCXJldHVybiBuOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL2xvY2FsZS93Y3RvbWIuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2N0b21iLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmN2E3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9sb2NhbGUvd2N0b21iLmMKQEAgLTAsMCArMSw0NyBAQAorLyoJJE9wZW5CU0Q6IHdjdG9tYi5jLHYgMS4yIDIwMTIvMTIvMDUgMjM6MjA6MDAgZGVyYWFkdCBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFRpbSBKLiBSb2JiaW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworaW50Cit3Y3RvbWIoY2hhciAqcywgd2NoYXJfdCB3Y2hhcikKK3sKKwlzdGF0aWMgbWJzdGF0ZV90IG1iczsKKwlzaXplX3QgcnZhbDsKKworCWlmIChzID09IE5VTEwpIHsKKwkJLyogTm8gc3VwcG9ydCBmb3Igc3RhdGUgZGVwZW5kZW50IGVuY29kaW5ncy4gKi8KKwkJbWVtc2V0KCZtYnMsIDAsIHNpemVvZihtYnMpKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKChydmFsID0gd2NydG9tYihzLCB3Y2hhciwgJm1icykpID09IChzaXplX3QpLTEpCisJCXJldHVybiAoLTEpOworCXJldHVybiAoKGludClydmFsKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaHRvbmwuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaHRvbmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWI0MTg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9odG9ubC5jCkBAIC0wLDAgKzEsMjEgQEAKKy8qCSRPcGVuQlNEOiBodG9ubC5jLHYgMS42IDIwMDUvMDgvMDYgMjA6MzA6MDMgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KKworI3VuZGVmIGh0b25sCisKK3VfaW50MzJfdAoraHRvbmwodV9pbnQzMl90IHgpCit7CisjaWYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisJdV9jaGFyICpzID0gKHVfY2hhciAqKSZ4OworCXJldHVybiAodV9pbnQzMl90KShzWzBdIDw8IDI0IHwgc1sxXSA8PCAxNiB8IHNbMl0gPDwgOCB8IHNbM10pOworI2Vsc2UKKwlyZXR1cm4geDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9odG9ucy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9odG9ucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjczZmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2h0b25zLmMKQEAgLTAsMCArMSwyMSBAQAorLyoJJE9wZW5CU0Q6IGh0b25zLmMsdiAxLjggMjAwNS8wOC8wNiAyMDozMDowMyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2VuZGlhbi5oPgorCisjdW5kZWYgaHRvbnMKKwordV9pbnQxNl90CitodG9ucyh1X2ludDE2X3QgeCkKK3sKKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKwl1X2NoYXIgKnMgPSAodV9jaGFyICopICZ4OworCXJldHVybiAodV9pbnQxNl90KShzWzBdIDw8IDggfCBzWzFdKTsKKyNlbHNlCisJcmV0dXJuIHg7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9hZGRyLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfYWRkci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NzYyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfYWRkci5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgkkT3BlbkJTRDogaW5ldF9hZGRyLmMsdiAxLjEwIDIwMTMvMTEvMjQgMjM6NTE6MjggZGVyYWFkdCBFeHAgJAkqLworCisvKgorICogKytDb3B5cmlnaHQrKyAxOTgzLCAxOTkwLCAxOTkzCisgKiAtCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTAsIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogLQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICogCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CisgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICogLQorICogLS1Db3B5cmlnaHQtLQorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworLyoKKyAqIEFzY2lpIGludGVybmV0IGFkZHJlc3MgaW50ZXJwcmV0YXRpb24gcm91dGluZS4KKyAqIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyBpbiBuZXR3b3JrIG9yZGVyLgorICovCitpbl9hZGRyX3QKK2luZXRfYWRkcihjb25zdCBjaGFyICpjcCkKK3sKKwlzdHJ1Y3QgaW5fYWRkciB2YWw7CisKKwlpZiAoaW5ldF9hdG9uKGNwLCAmdmFsKSkKKwkJcmV0dXJuICh2YWwuc19hZGRyKTsKKwlyZXR1cm4gKElOQUREUl9OT05FKTsKK30KKworLyogCisgKiBDaGVjayB3aGV0aGVyICJjcCIgaXMgYSB2YWxpZCBhc2NpaSByZXByZXNlbnRhdGlvbgorICogb2YgYW4gSW50ZXJuZXQgYWRkcmVzcyBhbmQgY29udmVydCB0byBhIGJpbmFyeSBhZGRyZXNzLgorICogUmV0dXJucyAxIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkLCAwIGlmIG5vdC4KKyAqIFRoaXMgcmVwbGFjZXMgaW5ldF9hZGRyLCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gd2hpY2gKKyAqIGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGZhaWx1cmUgYW5kIGEgbG9jYWwgYnJvYWRjYXN0IGFkZHJlc3MuCisgKi8KK2ludAoraW5ldF9hdG9uKGNvbnN0IGNoYXIgKmNwLCBzdHJ1Y3QgaW5fYWRkciAqYWRkcikKK3sKKwlpbl9hZGRyX3QgdmFsOworCWludCBiYXNlLCBuOworCWNoYXIgYzsKKwl1X2ludCBwYXJ0c1s0XTsKKwl1X2ludCAqcHAgPSBwYXJ0czsKKworCWMgPSAqY3A7CisJZm9yICg7OykgeworCQkvKgorCQkgKiBDb2xsZWN0IG51bWJlciB1cCB0byBgYC4nJy4KKwkJICogVmFsdWVzIGFyZSBzcGVjaWZpZWQgYXMgZm9yIEM6CisJCSAqIDB4PWhleCwgMD1vY3RhbCwgaXNkaWdpdD1kZWNpbWFsLgorCQkgKi8KKwkJaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKWMpKQorCQkJcmV0dXJuICgwKTsKKwkJdmFsID0gMDsgYmFzZSA9IDEwOworCQlpZiAoYyA9PSAnMCcpIHsKKwkJCWMgPSAqKytjcDsKKwkJCWlmIChjID09ICd4JyB8fCBjID09ICdYJykKKwkJCQliYXNlID0gMTYsIGMgPSAqKytjcDsKKwkJCWVsc2UKKwkJCQliYXNlID0gODsKKwkJfQorCQlmb3IgKDs7KSB7CisJCQlpZiAoaXNhc2NpaSgodW5zaWduZWQgY2hhciljKSAmJgorCQkJICAgIGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpYykpIHsKKwkJCQl2YWwgPSAodmFsICogYmFzZSkgKyAoYyAtICcwJyk7CisJCQkJYyA9ICorK2NwOworCQkJfSBlbHNlIGlmIChiYXNlID09IDE2ICYmCisJCQkgICAgaXNhc2NpaSgodW5zaWduZWQgY2hhciljKSAmJgorCQkJICAgIGlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKWMpKSB7CisJCQkJdmFsID0gKHZhbCA8PCA0KSB8CisJCQkJICAgIChjICsgMTAgLSAoaXNsb3dlcigodW5zaWduZWQgY2hhciljKSA/ICdhJyA6ICdBJykpOworCQkJCWMgPSAqKytjcDsKKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQl9CisJCWlmIChjID09ICcuJykgeworCQkJLyoKKwkJCSAqIEludGVybmV0IGZvcm1hdDoKKwkJCSAqCWEuYi5jLmQKKwkJCSAqCWEuYi5jCSh3aXRoIGMgdHJlYXRlZCBhcyAxNiBiaXRzKQorCQkJICoJYS5iCSh3aXRoIGIgdHJlYXRlZCBhcyAyNCBiaXRzKQorCQkJICovCisJCQlpZiAocHAgPj0gcGFydHMgKyAzKQorCQkJCXJldHVybiAoMCk7CisJCQkqcHArKyA9IHZhbDsKKwkJCWMgPSAqKytjcDsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisJLyoKKwkgKiBDaGVjayBmb3IgdHJhaWxpbmcgY2hhcmFjdGVycy4KKwkgKi8KKwlpZiAoYyAhPSAnXDAnICYmCisJICAgICghaXNhc2NpaSgodW5zaWduZWQgY2hhciljKSB8fCAhaXNzcGFjZSgodW5zaWduZWQgY2hhciljKSkpCisJCXJldHVybiAoMCk7CisJLyoKKwkgKiBDb25jb2N0IHRoZSBhZGRyZXNzIGFjY29yZGluZyB0bworCSAqIHRoZSBudW1iZXIgb2YgcGFydHMgc3BlY2lmaWVkLgorCSAqLworCW4gPSBwcCAtIHBhcnRzICsgMTsKKwlzd2l0Y2ggKG4pIHsKKworCWNhc2UgMDoKKwkJcmV0dXJuICgwKTsJCS8qIGluaXRpYWwgbm9uZGlnaXQgKi8KKworCWNhc2UgMToJCQkJLyogYSAtLSAzMiBiaXRzICovCisJCWJyZWFrOworCisJY2FzZSAyOgkJCQkvKiBhLmIgLS0gOC4yNCBiaXRzICovCisJCWlmICgodmFsID4gMHhmZmZmZmYpIHx8IChwYXJ0c1swXSA+IDB4ZmYpKQorCQkJcmV0dXJuICgwKTsKKwkJdmFsIHw9IHBhcnRzWzBdIDw8IDI0OworCQlicmVhazsKKworCWNhc2UgMzoJCQkJLyogYS5iLmMgLS0gOC44LjE2IGJpdHMgKi8KKwkJaWYgKCh2YWwgPiAweGZmZmYpIHx8IChwYXJ0c1swXSA+IDB4ZmYpIHx8IChwYXJ0c1sxXSA+IDB4ZmYpKQorCQkJcmV0dXJuICgwKTsKKwkJdmFsIHw9IChwYXJ0c1swXSA8PCAyNCkgfCAocGFydHNbMV0gPDwgMTYpOworCQlicmVhazsKKworCWNhc2UgNDoJCQkJLyogYS5iLmMuZCAtLSA4LjguOC44IGJpdHMgKi8KKwkJaWYgKCh2YWwgPiAweGZmKSB8fCAocGFydHNbMF0gPiAweGZmKSB8fCAocGFydHNbMV0gPiAweGZmKSB8fCAocGFydHNbMl0gPiAweGZmKSkKKwkJCXJldHVybiAoMCk7CisJCXZhbCB8PSAocGFydHNbMF0gPDwgMjQpIHwgKHBhcnRzWzFdIDw8IDE2KSB8IChwYXJ0c1syXSA8PCA4KTsKKwkJYnJlYWs7CisJfQorCWlmIChhZGRyKQorCQlhZGRyLT5zX2FkZHIgPSBodG9ubCh2YWwpOworCXJldHVybiAoMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbG5hb2YuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9sbmFvZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTU4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbG5hb2YuYwpAQCAtMCwwICsxLDUxIEBACisvKgkkT3BlbkJTRDogaW5ldF9sbmFvZi5jLHYgMS42IDIwMDUvMDgvMDYgMjA6MzA6MDMgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCisvKgorICogUmV0dXJuIHRoZSBsb2NhbCBuZXR3b3JrIGFkZHJlc3MgcG9ydGlvbiBvZiBhbgorICogaW50ZXJuZXQgYWRkcmVzczsgaGFuZGxlcyBjbGFzcyBhL2IvYyBuZXR3b3JrCisgKiBudW1iZXIgZm9ybWF0cy4KKyAqLworaW5fYWRkcl90CitpbmV0X2xuYW9mKHN0cnVjdCBpbl9hZGRyIGluKQoreworCWluX2FkZHJfdCBpID0gbnRvaGwoaW4uc19hZGRyKTsKKworCWlmIChJTl9DTEFTU0EoaSkpCisJCXJldHVybiAoKGkpJklOX0NMQVNTQV9IT1NUKTsKKwllbHNlIGlmIChJTl9DTEFTU0IoaSkpCisJCXJldHVybiAoKGkpJklOX0NMQVNTQl9IT1NUKTsKKwllbHNlCisJCXJldHVybiAoKGkpJklOX0NMQVNTQ19IT1NUKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9tYWtlYWRkci5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X21ha2VhZGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkOTMyNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9tYWtlYWRkci5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X21ha2VhZGRyLmMsdiAxLjYgMjAwNS8wOC8wNiAyMDozMDowMyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKy8qCisgKiBGb3JtdWxhdGUgYW4gSW50ZXJuZXQgYWRkcmVzcyBmcm9tIG5ldHdvcmsgKyBob3N0LiAgVXNlZCBpbgorICogYnVpbGRpbmcgYWRkcmVzc2VzIHN0b3JlZCBpbiB0aGUgaWZuZXQgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgaW5fYWRkcgoraW5ldF9tYWtlYWRkcihpbl9hZGRyX3QgbmV0LCBpbl9hZGRyX3QgaG9zdCkKK3sKKwlpbl9hZGRyX3QgYWRkcjsKKworCWlmIChuZXQgPCAxMjgpCisJCWFkZHIgPSAobmV0IDw8IElOX0NMQVNTQV9OU0hJRlQpIHwgKGhvc3QgJiBJTl9DTEFTU0FfSE9TVCk7CisJZWxzZSBpZiAobmV0IDwgNjU1MzYpCisJCWFkZHIgPSAobmV0IDw8IElOX0NMQVNTQl9OU0hJRlQpIHwgKGhvc3QgJiBJTl9DTEFTU0JfSE9TVCk7CisJZWxzZSBpZiAobmV0IDwgMTY3NzcyMTZMKQorCQlhZGRyID0gKG5ldCA8PCBJTl9DTEFTU0NfTlNISUZUKSB8IChob3N0ICYgSU5fQ0xBU1NDX0hPU1QpOworCWVsc2UKKwkJYWRkciA9IG5ldCB8IGhvc3Q7CisJYWRkciA9IGh0b25sKGFkZHIpOworCXJldHVybiAoKihzdHJ1Y3QgaW5fYWRkciAqKSZhZGRyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9uZXRvZi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X25ldG9mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY0NjhjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9uZXRvZi5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X25ldG9mLmMsdiAxLjYgMjAwNS8wOC8wNiAyMDozMDowMyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKy8qCisgKiBSZXR1cm4gdGhlIG5ldHdvcmsgbnVtYmVyIGZyb20gYW4gaW50ZXJuZXQKKyAqIGFkZHJlc3M7IGhhbmRsZXMgY2xhc3MgYS9iL2MgbmV0d29yayAjJ3MuCisgKi8KK2luX2FkZHJfdAoraW5ldF9uZXRvZihzdHJ1Y3QgaW5fYWRkciBpbikKK3sKKwlpbl9hZGRyX3QgaSA9IG50b2hsKGluLnNfYWRkcik7CisKKwlpZiAoSU5fQ0xBU1NBKGkpKQorCQlyZXR1cm4gKCgoaSkmSU5fQ0xBU1NBX05FVCkgPj4gSU5fQ0xBU1NBX05TSElGVCk7CisJZWxzZSBpZiAoSU5fQ0xBU1NCKGkpKQorCQlyZXR1cm4gKCgoaSkmSU5fQ0xBU1NCX05FVCkgPj4gSU5fQ0xBU1NCX05TSElGVCk7CisJZWxzZQorCQlyZXR1cm4gKCgoaSkmSU5fQ0xBU1NDX05FVCkgPj4gSU5fQ0xBU1NDX05TSElGVCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbmV0d29yay5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X25ldHdvcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2Y1NTRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X25ldHdvcmsuYwpAQCAtMCwwICsxLDg0IEBACisvKgkkT3BlbkJTRDogaW5ldF9uZXR3b3JrLmMsdiAxLjExIDIwMTMvMTEvMjUgMTc6Mjk6MTkgZGVyYWFkdCBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworLyoKKyAqIEludGVybmV0IG5ldHdvcmsgYWRkcmVzcyBpbnRlcnByZXRhdGlvbiByb3V0aW5lLgorICogVGhlIGxpYnJhcnkgcm91dGluZXMgY2FsbCB0aGlzIHJvdXRpbmUgdG8gaW50ZXJwcmV0CisgKiBuZXR3b3JrIG51bWJlcnMuCisgKi8KK2luX2FkZHJfdAoraW5ldF9uZXR3b3JrKGNvbnN0IGNoYXIgKmNwKQoreworCWluX2FkZHJfdCB2YWwsIGJhc2UsIG47CisJdV9jaGFyIGM7CisJaW5fYWRkcl90IHBhcnRzWzRdLCAqcHAgPSBwYXJ0czsKKwlpbnQgaTsKKworYWdhaW46CisJdmFsID0gMDsgYmFzZSA9IDEwOworCWlmICgqY3AgPT0gJzAnKQorCQliYXNlID0gOCwgY3ArKzsKKwlpZiAoKmNwID09ICd4JyB8fCAqY3AgPT0gJ1gnKQorCQliYXNlID0gMTYsIGNwKys7CisJd2hpbGUgKChjID0gKmNwKSkgeworCQlpZiAoaXNkaWdpdChjKSkgeworCQkJdmFsID0gKHZhbCAqIGJhc2UpICsgKGMgLSAnMCcpOworCQkJY3ArKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChiYXNlID09IDE2ICYmIGlzeGRpZ2l0KGMpKSB7CisJCQl2YWwgPSAodmFsIDw8IDQpICsgKGMgKyAxMCAtIChpc2xvd2VyKGMpID8gJ2EnIDogJ0EnKSk7CisJCQljcCsrOworCQkJY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJfQorCWlmICgqY3AgPT0gJy4nKSB7CisJCWlmIChwcCA+PSBwYXJ0cyArIDMpCisJCQlyZXR1cm4gKElOQUREUl9OT05FKTsKKwkJKnBwKysgPSB2YWwsIGNwKys7CisJCWdvdG8gYWdhaW47CisJfQorCWlmICgqY3AgJiYgIWlzc3BhY2UoKmNwKSkKKwkJcmV0dXJuIChJTkFERFJfTk9ORSk7CisJKnBwKysgPSB2YWw7CisJbiA9IHBwIC0gcGFydHM7CisJZm9yICh2YWwgPSAwLCBpID0gMDsgaSA8IDQ7IGkrKykgeworCQl2YWwgPDw9IDg7CisJCWlmIChpIDwgbikKKwkJCXZhbCB8PSBwYXJ0c1tpXSAmIDB4ZmY7CisJfQorCXJldHVybiAodmFsKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9udG9hLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbnRvYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNWQ5M2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfbnRvYS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X250b2EuYyx2IDEuNiAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvbnZlcnQgbmV0d29yay1mb3JtYXQgaW50ZXJuZXQgYWRkcmVzcworICogdG8gYmFzZSAyNTYgZC5kLmQuZCByZXByZXNlbnRhdGlvbi4KKyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitjaGFyICoKK2luZXRfbnRvYShzdHJ1Y3QgaW5fYWRkciBpbikKK3sKKwlzdGF0aWMgY2hhciBiWzE4XTsKKwljaGFyICpwOworCisJcCA9IChjaGFyICopJmluOworI2RlZmluZQlVQyhiKQkoKChpbnQpYikmMHhmZikKKwkodm9pZClzbnByaW50ZihiLCBzaXplb2YoYiksCisJICAgICIldS4ldS4ldS4ldSIsIFVDKHBbMF0pLCBVQyhwWzFdKSwgVUMocFsyXSksIFVDKHBbM10pKTsKKwlyZXR1cm4gKGIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X250b3AuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9udG9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk5MWEwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvaW5ldF9udG9wLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X250b3AuYyx2IDEuMTAgMjAxNC8wNS8xNyAxODoxNjoxNCB0ZWR1IEV4cCAkCSovCisKKy8qIENvcHlyaWdodCAoYykgMTk5NiBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSU5URVJORVQgU09GVFdBUkUgQ09OU09SVElVTSBESVNDTEFJTVMKKyAqIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSU5URVJORVQgU09GVFdBUkUKKyAqIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBXQVJOSU5HOiBEb24ndCBldmVuIGNvbnNpZGVyIHRyeWluZyB0byBjb21waWxlIHRoaXMgb24gYSBzeXN0ZW0gd2hlcmUKKyAqIHNpemVvZihpbnQpIDwgNC4gIHNpemVvZihpbnQpID4gNCBpcyBmaW5lOyBhbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICppbmV0X250b3A0KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKK3N0YXRpYyBjb25zdCBjaGFyICppbmV0X250b3A2KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKKworLyogY29uc3QgY2hhciAqCisgKiBpbmV0X250b3AoYWYsIHNyYywgZHN0LCBzaXplKQorICoJY29udmVydCBhIG5ldHdvcmsgZm9ybWF0IGFkZHJlc3MgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KKyAqIHJldHVybjoKKyAqCXBvaW50ZXIgdG8gcHJlc2VudGF0aW9uIGZvcm1hdCBhZGRyZXNzIChgZHN0JyksIG9yIE5VTEwgKHNlZSBlcnJubykuCisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitjb25zdCBjaGFyICoKK2luZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSkKK3sKKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gKGluZXRfbnRvcDQoc3JjLCBkc3QsIChzaXplX3Qpc2l6ZSkpOworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiAoaW5ldF9udG9wNihzcmMsIGRzdCwgKHNpemVfdClzaXplKSk7CisJZGVmYXVsdDoKKwkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KKworLyogY29uc3QgY2hhciAqCisgKiBpbmV0X250b3A0KHNyYywgZHN0LCBzaXplKQorICoJZm9ybWF0IGFuIElQdjQgYWRkcmVzcywgbW9yZSBvciBsZXNzIGxpa2UgaW5ldF9udG9hKCkKKyAqIHJldHVybjoKKyAqCWBkc3QnIChhcyBhIGNvbnN0KQorICogbm90ZXM6CisgKgkoMSkgdXNlcyBubyBzdGF0aWNzCisgKgkoMikgdGFrZXMgYSB1X2NoYXIqIG5vdCBhbiBpbl9hZGRyIGFzIGlucHV0CisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitpbmV0X250b3A0KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQoreworCWNoYXIgdG1wW3NpemVvZiAiMjU1LjI1NS4yNTUuMjU1Il07CisJaW50IGw7CisKKwlsID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiV1LiV1LiV1LiV1IiwKKwkgICAgc3JjWzBdLCBzcmNbMV0sIHNyY1syXSwgc3JjWzNdKTsKKwlpZiAobCA8PSAwIHx8IGwgPj0gc2l6ZSkgeworCQllcnJubyA9IEVOT1NQQzsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJc3RybGNweShkc3QsIHRtcCwgc2l6ZSk7CisJcmV0dXJuIChkc3QpOworfQorCisvKiBjb25zdCBjaGFyICoKKyAqIGluZXRfbnRvcDYoc3JjLCBkc3QsIHNpemUpCisgKgljb252ZXJ0IElQdjYgYmluYXJ5IGFkZHJlc3MgaW50byBwcmVzZW50YXRpb24gKHByaW50YWJsZSkgZm9ybWF0CisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitpbmV0X250b3A2KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQoreworCS8qCisJICogTm90ZSB0aGF0IGludDMyX3QgYW5kIGludDE2X3QgbmVlZCBvbmx5IGJlICJhdCBsZWFzdCIgbGFyZ2UgZW5vdWdoCisJICogdG8gY29udGFpbiBhIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4gIE9uIHNvbWUgc3lzdGVtcywgbGlrZQorCSAqIENyYXlzLCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGFuIGludGVnZXIgdmFyaWFibGUgd2l0aCAxNiBiaXRzLgorCSAqIEtlZXAgdGhpcyBpbiBtaW5kIGlmIHlvdSB0aGluayB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY29kZWQKKwkgKiB0byB1c2UgcG9pbnRlciBvdmVybGF5cy4gIEFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCisJICovCisJY2hhciB0bXBbc2l6ZW9mICJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjoyNTUuMjU1LjI1NS4yNTUiXTsKKwljaGFyICp0cCwgKmVwOworCXN0cnVjdCB7IGludCBiYXNlLCBsZW47IH0gYmVzdCwgY3VyOworCXVfaW50IHdvcmRzW0lONkFERFJTWiAvIElOVDE2U1pdOworCWludCBpOworCWludCBhZHZhbmNlOworCisJLyoKKwkgKiBQcmVwcm9jZXNzOgorCSAqCUNvcHkgdGhlIGlucHV0IChieXRld2lzZSkgYXJyYXkgaW50byBhIHdvcmR3aXNlIGFycmF5LgorCSAqCUZpbmQgdGhlIGxvbmdlc3QgcnVuIG9mIDB4MDAncyBpbiBzcmNbXSBmb3IgOjogc2hvcnRoYW5kaW5nLgorCSAqLworCW1lbXNldCh3b3JkcywgJ1wwJywgc2l6ZW9mIHdvcmRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgSU42QUREUlNaOyBpKyspCisJCXdvcmRzW2kgLyAyXSB8PSAoc3JjW2ldIDw8ICgoMSAtIChpICUgMikpIDw8IDMpKTsKKwliZXN0LmJhc2UgPSAtMTsKKwljdXIuYmFzZSA9IC0xOworCWZvciAoaSA9IDA7IGkgPCAoSU42QUREUlNaIC8gSU5UMTZTWik7IGkrKykgeworCQlpZiAod29yZHNbaV0gPT0gMCkgeworCQkJaWYgKGN1ci5iYXNlID09IC0xKQorCQkJCWN1ci5iYXNlID0gaSwgY3VyLmxlbiA9IDE7CisJCQllbHNlCisJCQkJY3VyLmxlbisrOworCQl9IGVsc2UgeworCQkJaWYgKGN1ci5iYXNlICE9IC0xKSB7CisJCQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQkJCWJlc3QgPSBjdXI7CisJCQkJY3VyLmJhc2UgPSAtMTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoY3VyLmJhc2UgIT0gLTEpIHsKKwkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQliZXN0ID0gY3VyOworCX0KKwlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGJlc3QubGVuIDwgMikKKwkJYmVzdC5iYXNlID0gLTE7CisKKwkvKgorCSAqIEZvcm1hdCB0aGUgcmVzdWx0LgorCSAqLworCXRwID0gdG1wOworCWVwID0gdG1wICsgc2l6ZW9mKHRtcCk7CisJZm9yIChpID0gMDsgaSA8IChJTjZBRERSU1ogLyBJTlQxNlNaKSAmJiB0cCA8IGVwOyBpKyspIHsKKwkJLyogQXJlIHdlIGluc2lkZSB0aGUgYmVzdCBydW4gb2YgMHgwMCdzPyAqLworCQlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGkgPj0gYmVzdC5iYXNlICYmCisJCSAgICBpIDwgKGJlc3QuYmFzZSArIGJlc3QubGVuKSkgeworCQkJaWYgKGkgPT0gYmVzdC5iYXNlKSB7CisJCQkJaWYgKHRwICsgMSA+PSBlcCkgeworCQkJCQllcnJubyA9IEVOT1NQQzsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQkJKnRwKysgPSAnOic7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBBcmUgd2UgZm9sbG93aW5nIGFuIGluaXRpYWwgcnVuIG9mIDB4MDBzIG9yIGFueSByZWFsIGhleD8gKi8KKwkJaWYgKGkgIT0gMCkgeworCQkJaWYgKHRwICsgMSA+PSBlcCkgeworCQkJCWVycm5vID0gRU5PU1BDOworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQkqdHArKyA9ICc6JzsKKwkJfQorCQkvKiBJcyB0aGlzIGFkZHJlc3MgYW4gZW5jYXBzdWxhdGVkIElQdjQ/ICovCisJCWlmIChpID09IDYgJiYgYmVzdC5iYXNlID09IDAgJiYKKwkJICAgIChiZXN0LmxlbiA9PSA2IHx8IChiZXN0LmxlbiA9PSA1ICYmIHdvcmRzWzVdID09IDB4ZmZmZikpKSB7CisJCQlpZiAoIWluZXRfbnRvcDQoc3JjKzEyLCB0cCwgKHNpemVfdCkoZXAgLSB0cCkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl0cCArPSBzdHJsZW4odHApOworCQkJYnJlYWs7CisJCX0KKwkJYWR2YW5jZSA9IHNucHJpbnRmKHRwLCBlcCAtIHRwLCAiJXgiLCB3b3Jkc1tpXSk7CisJCWlmIChhZHZhbmNlIDw9IDAgfHwgYWR2YW5jZSA+PSBlcCAtIHRwKSB7CisJCQllcnJubyA9IEVOT1NQQzsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJdHAgKz0gYWR2YW5jZTsKKwl9CisJLyogV2FzIGl0IGEgdHJhaWxpbmcgcnVuIG9mIDB4MDAncz8gKi8KKwlpZiAoYmVzdC5iYXNlICE9IC0xICYmIChiZXN0LmJhc2UgKyBiZXN0LmxlbikgPT0gKElONkFERFJTWiAvIElOVDE2U1opKSB7CisJCWlmICh0cCArIDEgPj0gZXApIHsKKwkJCWVycm5vID0gRU5PU1BDOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQkqdHArKyA9ICc6JzsKKwl9CisJaWYgKHRwICsgMSA+PSBlcCkgeworCQllcnJubyA9IEVOT1NQQzsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJKnRwKysgPSAnXDAnOworCisJLyoKKwkgKiBDaGVjayBmb3Igb3ZlcmZsb3csIGNvcHksIGFuZCB3ZSdyZSBkb25lLgorCSAqLworCWlmICgoc2l6ZV90KSh0cCAtIHRtcCkgPiBzaXplKSB7CisJCWVycm5vID0gRU5PU1BDOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlzdHJsY3B5KGRzdCwgdG1wLCBzaXplKTsKKwlyZXR1cm4gKGRzdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L2luZXRfcHRvbi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X3B0b24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTUyMWMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9pbmV0X3B0b24uYwpAQCAtMCwwICsxLDIxMyBAQAorLyoJJE9wZW5CU0Q6IGluZXRfcHRvbi5jLHYgMS44IDIwMTAvMDUvMDYgMTU6NDc6MTQgY2xhdWRpbyBFeHAgJAkqLworCisvKiBDb3B5cmlnaHQgKGMpIDE5OTYgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0gRElTQ0xBSU1TCisgKiBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVSTkVUIFNPRlRXQVJFCisgKiBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyoKKyAqIFdBUk5JTkc6IERvbid0IGV2ZW4gY29uc2lkZXIgdHJ5aW5nIHRvIGNvbXBpbGUgdGhpcyBvbiBhIHN5c3RlbSB3aGVyZQorICogc2l6ZW9mKGludCkgPCA0LiAgc2l6ZW9mKGludCkgPiA0IGlzIGZpbmU7IGFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCisgKi8KKworc3RhdGljIGludAlpbmV0X3B0b240KGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QpOworc3RhdGljIGludAlpbmV0X3B0b242KGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QpOworCisvKiBpbnQKKyAqIGluZXRfcHRvbihhZiwgc3JjLCBkc3QpCisgKgljb252ZXJ0IGZyb20gcHJlc2VudGF0aW9uIGZvcm1hdCAod2hpY2ggdXN1YWxseSBtZWFucyBBU0NJSSBwcmludGFibGUpCisgKgl0byBuZXR3b3JrIGZvcm1hdCAod2hpY2ggaXMgdXN1YWxseSBzb21lIGtpbmQgb2YgYmluYXJ5IGZvcm1hdCkuCisgKiByZXR1cm46CisgKgkxIGlmIHRoZSBhZGRyZXNzIHdhcyB2YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBhZGRyZXNzIGZhbWlseQorICoJMCBpZiB0aGUgYWRkcmVzcyB3YXNuJ3QgdmFsaWQgKGBkc3QnIGlzIHVudG91Y2hlZCBpbiB0aGlzIGNhc2UpCisgKgktMSBpZiBzb21lIG90aGVyIGVycm9yIG9jY3VycmVkIChgZHN0JyBpcyB1bnRvdWNoZWQgaW4gdGhpcyBjYXNlLCB0b28pCisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitpbnQKK2luZXRfcHRvbihpbnQgYWYsIGNvbnN0IGNoYXIgKnNyYywgdm9pZCAqZHN0KQoreworCXN3aXRjaCAoYWYpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiAoaW5ldF9wdG9uNChzcmMsIGRzdCkpOworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiAoaW5ldF9wdG9uNihzcmMsIGRzdCkpOworCWRlZmF1bHQ6CisJCWVycm5vID0gRUFGTk9TVVBQT1JUOworCQlyZXR1cm4gKC0xKTsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworfQorCisvKiBpbnQKKyAqIGluZXRfcHRvbjQoc3JjLCBkc3QpCisgKglsaWtlIGluZXRfYXRvbigpIGJ1dCB3aXRob3V0IGFsbCB0aGUgaGV4YWRlY2ltYWwgYW5kIHNob3J0aGFuZC4KKyAqIHJldHVybjoKKyAqCTEgaWYgYHNyYycgaXMgYSB2YWxpZCBkb3R0ZWQgcXVhZCwgZWxzZSAwLgorICogbm90aWNlOgorICoJZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgaW50CitpbmV0X3B0b240KGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgZGlnaXRzW10gPSAiMDEyMzQ1Njc4OSI7CisJaW50IHNhd19kaWdpdCwgb2N0ZXRzLCBjaDsKKwl1X2NoYXIgdG1wW0lOQUREUlNaXSwgKnRwOworCisJc2F3X2RpZ2l0ID0gMDsKKwlvY3RldHMgPSAwOworCSoodHAgPSB0bXApID0gMDsKKwl3aGlsZSAoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7CisJCWNvbnN0IGNoYXIgKnBjaDsKKworCQlpZiAoKHBjaCA9IHN0cmNocihkaWdpdHMsIGNoKSkgIT0gTlVMTCkgeworCQkJdV9pbnQgbmV3ID0gKnRwICogMTAgKyAocGNoIC0gZGlnaXRzKTsKKworCQkJaWYgKG5ldyA+IDI1NSkKKwkJCQlyZXR1cm4gKDApOworCQkJaWYgKCEgc2F3X2RpZ2l0KSB7CisJCQkJaWYgKCsrb2N0ZXRzID4gNCkKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQlzYXdfZGlnaXQgPSAxOworCQkJfQorCQkJKnRwID0gbmV3OworCQl9IGVsc2UgaWYgKGNoID09ICcuJyAmJiBzYXdfZGlnaXQpIHsKKwkJCWlmIChvY3RldHMgPT0gNCkKKwkJCQlyZXR1cm4gKDApOworCQkJKisrdHAgPSAwOworCQkJc2F3X2RpZ2l0ID0gMDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gKDApOworCX0KKwlpZiAob2N0ZXRzIDwgNCkKKwkJcmV0dXJuICgwKTsKKworCW1lbWNweShkc3QsIHRtcCwgSU5BRERSU1opOworCXJldHVybiAoMSk7Cit9CisKKy8qIGludAorICogaW5ldF9wdG9uNihzcmMsIGRzdCkKKyAqCWNvbnZlcnQgcHJlc2VudGF0aW9uIGxldmVsIGFkZHJlc3MgdG8gbmV0d29yayBvcmRlciBiaW5hcnkgZm9ybS4KKyAqIHJldHVybjoKKyAqCTEgaWYgYHNyYycgaXMgYSB2YWxpZCBbUkZDMTg4NCAyLjJdIGFkZHJlc3MsIGVsc2UgMC4KKyAqIG5vdGljZToKKyAqCWRvZXMgbm90IHRvdWNoIGBkc3QnIHVubGVzcyBpdCdzIHJldHVybmluZyAxLgorICogY3JlZGl0OgorICoJaW5zcGlyZWQgYnkgTWFyayBBbmRyZXdzLgorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworc3RhdGljIGludAoraW5ldF9wdG9uNihjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0KQoreworCXN0YXRpYyBjb25zdCBjaGFyIHhkaWdpdHNfbFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiLAorCQkJICB4ZGlnaXRzX3VbXSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKKwl1X2NoYXIgdG1wW0lONkFERFJTWl0sICp0cCwgKmVuZHAsICpjb2xvbnA7CisJY29uc3QgY2hhciAqeGRpZ2l0cywgKmN1cnRvazsKKwlpbnQgY2gsIHNhd194ZGlnaXQsIGNvdW50X3hkaWdpdDsKKwl1X2ludCB2YWw7CisKKwltZW1zZXQoKHRwID0gdG1wKSwgJ1wwJywgSU42QUREUlNaKTsKKwllbmRwID0gdHAgKyBJTjZBRERSU1o7CisJY29sb25wID0gTlVMTDsKKwkvKiBMZWFkaW5nIDo6IHJlcXVpcmVzIHNvbWUgc3BlY2lhbCBoYW5kbGluZy4gKi8KKwlpZiAoKnNyYyA9PSAnOicpCisJCWlmICgqKytzcmMgIT0gJzonKQorCQkJcmV0dXJuICgwKTsKKwljdXJ0b2sgPSBzcmM7CisJc2F3X3hkaWdpdCA9IGNvdW50X3hkaWdpdCA9IDA7CisJdmFsID0gMDsKKwl3aGlsZSAoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7CisJCWNvbnN0IGNoYXIgKnBjaDsKKworCQlpZiAoKHBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfbCksIGNoKSkgPT0gTlVMTCkKKwkJCXBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfdSksIGNoKTsKKwkJaWYgKHBjaCAhPSBOVUxMKSB7CisJCQlpZiAoY291bnRfeGRpZ2l0ID49IDQpCisJCQkJcmV0dXJuICgwKTsKKwkJCXZhbCA8PD0gNDsKKwkJCXZhbCB8PSAocGNoIC0geGRpZ2l0cyk7CisJCQlpZiAodmFsID4gMHhmZmZmKQorCQkJCXJldHVybiAoMCk7CisJCQlzYXdfeGRpZ2l0ID0gMTsKKwkJCWNvdW50X3hkaWdpdCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNoID09ICc6JykgeworCQkJY3VydG9rID0gc3JjOworCQkJaWYgKCFzYXdfeGRpZ2l0KSB7CisJCQkJaWYgKGNvbG9ucCkKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQljb2xvbnAgPSB0cDsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoKnNyYyA9PSAnXDAnKSB7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCWlmICh0cCArIElOVDE2U1ogPiBlbmRwKQorCQkJCXJldHVybiAoMCk7CisJCQkqdHArKyA9ICh1X2NoYXIpICh2YWwgPj4gOCkgJiAweGZmOworCQkJKnRwKysgPSAodV9jaGFyKSB2YWwgJiAweGZmOworCQkJc2F3X3hkaWdpdCA9IDA7CisJCQljb3VudF94ZGlnaXQgPSAwOworCQkJdmFsID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjaCA9PSAnLicgJiYgKCh0cCArIElOQUREUlNaKSA8PSBlbmRwKSAmJgorCQkgICAgaW5ldF9wdG9uNChjdXJ0b2ssIHRwKSA+IDApIHsKKwkJCXRwICs9IElOQUREUlNaOworCQkJc2F3X3hkaWdpdCA9IDA7CisJCQljb3VudF94ZGlnaXQgPSAwOworCQkJYnJlYWs7CS8qICdcMCcgd2FzIHNlZW4gYnkgaW5ldF9wdG9uNCgpLiAqLworCQl9CisJCXJldHVybiAoMCk7CisJfQorCWlmIChzYXdfeGRpZ2l0KSB7CisJCWlmICh0cCArIElOVDE2U1ogPiBlbmRwKQorCQkJcmV0dXJuICgwKTsKKwkJKnRwKysgPSAodV9jaGFyKSAodmFsID4+IDgpICYgMHhmZjsKKwkJKnRwKysgPSAodV9jaGFyKSB2YWwgJiAweGZmOworCX0KKwlpZiAoY29sb25wICE9IE5VTEwpIHsKKwkJLyoKKwkJICogU2luY2Ugc29tZSBtZW1tb3ZlKCkncyBlcnJvbmVvdXNseSBmYWlsIHRvIGhhbmRsZQorCQkgKiBvdmVybGFwcGluZyByZWdpb25zLCB3ZSdsbCBkbyB0aGUgc2hpZnQgYnkgaGFuZC4KKwkJICovCisJCWNvbnN0IGludCBuID0gdHAgLSBjb2xvbnA7CisJCWludCBpOworCisJCWlmICh0cCA9PSBlbmRwKQorCQkJcmV0dXJuICgwKTsKKwkJZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKKwkJCWVuZHBbLSBpXSA9IGNvbG9ucFtuIC0gaV07CisJCQljb2xvbnBbbiAtIGldID0gMDsKKwkJfQorCQl0cCA9IGVuZHA7CisJfQorCWlmICh0cCAhPSBlbmRwKQorCQlyZXR1cm4gKDApOworCW1lbWNweShkc3QsIHRtcCwgSU42QUREUlNaKTsKKwlyZXR1cm4gKDEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9udG9obC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL25ldC9udG9obC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NDE0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L250b2hsLmMKQEAgLTAsMCArMSwyMSBAQAorLyoJJE9wZW5CU0Q6IG50b2hsLmMsdiAxLjYgMjAwNS8wOC8wNiAyMDozMDowMyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2VuZGlhbi5oPgorCisjdW5kZWYgbnRvaGwKKwordV9pbnQzMl90CitudG9obCh1X2ludDMyX3QgeCkKK3sKKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKwl1X2NoYXIgKnMgPSAodV9jaGFyICopJng7CisJcmV0dXJuICh1X2ludDMyX3QpKHNbMF0gPDwgMjQgfCBzWzFdIDw8IDE2IHwgc1syXSA8PCA4IHwgc1szXSk7CisjZWxzZQorCXJldHVybiB4OworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L250b2hzLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvbmV0L250b2hzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzNDVlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9uZXQvbnRvaHMuYwpAQCAtMCwwICsxLDIxIEBACisvKgkkT3BlbkJTRDogbnRvaHMuYyx2IDEuOCAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvZW5kaWFuLmg+CisKKyN1bmRlZiBudG9ocworCit1X2ludDE2X3QKK250b2hzKHVfaW50MTZfdCB4KQoreworI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorCXVfY2hhciAqcyA9ICh1X2NoYXIgKikgJng7CisJcmV0dXJuICh1X2ludDE2X3QpKHNbMF0gPDwgOCB8IHNbMV0pOworI2Vsc2UKKwlyZXR1cm4geDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2FzcHJpbnRmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vYXNwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDI0YzkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2FzcHJpbnRmLmMKQEAgLTAsMCArMSw2MyBAQAorLyoJJE9wZW5CU0Q6IGFzcHJpbnRmLmMsdiAxLjE5IDIwMTEvMDUvMzAgMTg6NDg6MzMgbWFydHluYXMgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qIFBSSU5URkxJS0UyICovCitpbnQKK2FzcHJpbnRmKGNoYXIgKipzdHIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKwlGSUxFIGY7CisJc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKKwl1bnNpZ25lZCBjaGFyICpfYmFzZTsKKworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisJZi5fZmlsZSA9IC0xOworCWYuX2ZsYWdzID0gX19TV1IgfCBfX1NTVFIgfCBfX1NBTEM7CisJZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2MoMTI4KTsKKwlpZiAoZi5fYmYuX2Jhc2UgPT0gTlVMTCkKKwkJZ290byBlcnI7CisJZi5fYmYuX3NpemUgPSBmLl93ID0gMTI3OwkJLyogTGVhdmUgcm9vbSBmb3IgdGhlIE5VTCAqLworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IF9fdmZwcmludGYoJmYsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKHJldCA9PSAtMSkKKwkJZ290byBlcnI7CisJKmYuX3AgPSAnXDAnOworCV9iYXNlID0gcmVhbGxvYyhmLl9iZi5fYmFzZSwgcmV0ICsgMSk7CisJaWYgKF9iYXNlID09IE5VTEwpCisJCWdvdG8gZXJyOworCSpzdHIgPSAoY2hhciAqKV9iYXNlOworCXJldHVybiAocmV0KTsKKworZXJyOgorCWlmIChmLl9iZi5fYmFzZSkgeworCQlmcmVlKGYuX2JmLl9iYXNlKTsKKwkJZi5fYmYuX2Jhc2UgPSBOVUxMOworCX0KKwkqc3RyID0gTlVMTDsKKwllcnJubyA9IEVOT01FTTsKKwlyZXR1cm4gKC0xKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9jbHJlcnIuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9jbHJlcnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzA4YzcyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2NscmVyci5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCSRPcGVuQlNEOiBjbHJlcnIuYyx2IDEuOSAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKyN1bmRlZgljbGVhcmVycgorCit2b2lkCitjbGVhcmVycihGSUxFICpmcCkKK3sKKwlGTE9DS0ZJTEUoZnApOworCV9fc2NsZWFyZXJyKGZwKTsKKwlGVU5MT0NLRklMRShmcCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZHByaW50Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2RwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmY3ZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2RwcmludGYuYwpAQCAtMCwwICsxLDQ4IEBACisvKgkkT3BlbkJTRDogZHByaW50Zi5jLHYgMS4xIDIwMTMvMDEvMzAgMDA6MDg6MTMgYnJhZCBFeHAgJAkqLworLyoJJEZyZWVCU0Q6IHNyYy9saWIvbGliYy9zdGRpby9kcHJpbnRmLmMsdiAxLjIgMjAxMi8xMS8xNyAwMTo0OTozOSBzdm5leHAgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgYnkgRGF2aWQgQ2hpc25hbGwKKyAqIHVuZGVyIHNwb25zb3JzaGlwIGZyb20gdGhlIEZyZWVCU0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworaW50CitkcHJpbnRmKGludCBmZCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmRwcmludGYoZmQsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZG9wZW4uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZG9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQ3ZjJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zkb3Blbi5jCkBAIC0wLDAgKzEsODMgQEAKKy8qCSRPcGVuQlNEOiBmZG9wZW4uYyx2IDEuNiAyMDA4LzA0LzIxIDEyOjI4OjM1IG90dG8gRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK0ZJTEUgKgorZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwlGSUxFICpmcDsKKwlpbnQgZmxhZ3MsIG9mbGFncywgZmRmbGFncywgdG1wOworCisJLyogX2ZpbGUgaXMgb25seSBhIHNob3J0ICovCisJaWYgKGZkID4gU0hSVF9NQVgpIHsKKwkJZXJybm8gPSBFTUZJTEU7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJaWYgKChmbGFncyA9IF9fc2ZsYWdzKG1vZGUsICZvZmxhZ3MpKSA9PSAwKQorCQlyZXR1cm4gKE5VTEwpOworCisJLyogTWFrZSBzdXJlIHRoZSBtb2RlIHRoZSB1c2VyIHdhbnRzIGlzIGEgc3Vic2V0IG9mIHRoZSBhY3R1YWwgbW9kZS4gKi8KKwlpZiAoKGZkZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGTCwgMCkpIDwgMCkKKwkJcmV0dXJuIChOVUxMKTsKKwl0bXAgPSBmZGZsYWdzICYgT19BQ0NNT0RFOworCWlmICh0bXAgIT0gT19SRFdSICYmICh0bXAgIT0gKG9mbGFncyAmIE9fQUNDTU9ERSkpKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCWlmICgoZnAgPSBfX3NmcCgpKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWZwLT5fZmxhZ3MgPSBmbGFnczsKKwkvKgorCSAqIElmIG9wZW5lZCBmb3IgYXBwZW5kaW5nLCBidXQgdW5kZXJseWluZyBkZXNjcmlwdG9yIGRvZXMgbm90IGhhdmUKKwkgKiBPX0FQUEVORCBiaXQgc2V0LCBhc3NlcnQgX19TQVBQIHNvIHRoYXQgX19zd3JpdGUoKSB3aWxsIGxzZWVrIHRvCisJICogZW5kIGJlZm9yZSBlYWNoIHdyaXRlLgorCSAqLworCWlmICgob2ZsYWdzICYgT19BUFBFTkQpICYmICEoZmRmbGFncyAmIE9fQVBQRU5EKSkKKwkJZnAtPl9mbGFncyB8PSBfX1NBUFA7CisJZnAtPl9maWxlID0gZmQ7CisJZnAtPl9jb29raWUgPSBmcDsKKwlmcC0+X3JlYWQgPSBfX3NyZWFkOworCWZwLT5fd3JpdGUgPSBfX3N3cml0ZTsKKwlmcC0+X3NlZWsgPSBfX3NzZWVrOworCWZwLT5fY2xvc2UgPSBfX3NjbG9zZTsKKwlyZXR1cm4gKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZW9mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmVvZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMzZiYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmVvZi5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBmZW9mLmMsdiAxLjggMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZmVvZi4KKyAqLworI3VuZGVmIGZlb2YKKworaW50CitmZW9mKEZJTEUgKmZwKQoreworCWludAlyZXQ7CisKKwlGTE9DS0ZJTEUoZnApOworCXJldCA9IF9fc2Zlb2YoZnApOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmVycm9yLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiOWM4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZXJyb3IuYwpAQCAtMCwwICsxLDUxIEBACisvKgkkT3BlbkJTRDogZmVycm9yLmMsdiAxLjggMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZmVycm9yLgorICovCisjdW5kZWYgZmVycm9yCisKK2ludAorZmVycm9yKEZJTEUgKmZwKQoreworCWludCAgICAgcmV0OworCisJRkxPQ0tGSUxFKGZwKTsKKwlyZXQgPSBfX3NmZXJyb3IoZnApOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmZsdXNoLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmZsdXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzMGYxMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZmx1c2guYwpAQCAtMCwwICsxLDk3IEBACisvKgkkT3BlbkJTRDogZmZsdXNoLmMsdiAxLjggMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyogRmx1c2ggYSBzaW5nbGUgZmlsZSwgb3IgKGlmIGZwIGlzIE5VTEwpIGFsbCBmaWxlcy4gICovCitpbnQKK2ZmbHVzaChGSUxFICpmcCkKK3sKKwlpbnQJcjsKKworCWlmIChmcCA9PSBOVUxMKQorCQlyZXR1cm4gKF9md2FsayhfX3NmbHVzaF9sb2NrZWQpKTsKKwlGTE9DS0ZJTEUoZnApOworCWlmICgoZnAtPl9mbGFncyAmIChfX1NXUiB8IF9fU1JXKSkgPT0gMCkgeworCQllcnJubyA9IEVCQURGOworCQlyID0gRU9GOworCX0gZWxzZQorCQlyID0gX19zZmx1c2goZnApOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKHIpOworfQorCitpbnQKK19fc2ZsdXNoKEZJTEUgKmZwKQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisJaW50IG4sIHQ7CisKKwl0ID0gZnAtPl9mbGFnczsKKwlpZiAoKHQgJiBfX1NXUikgPT0gMCkKKwkJcmV0dXJuICgwKTsKKworCWlmICgocCA9IGZwLT5fYmYuX2Jhc2UpID09IE5VTEwpCisJCXJldHVybiAoMCk7CisKKwluID0gZnAtPl9wIC0gcDsJCS8qIHdyaXRlIHRoaXMgbXVjaCAqLworCisJLyoKKwkgKiBTZXQgdGhlc2UgaW1tZWRpYXRlbHkgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBsb25nam1wIGFuZCB0byBhbGxvdworCSAqIGV4Y2hhbmdlIGJ1ZmZlcmluZyAodmlhIHNldHZidWYpIGluIHVzZXIgd3JpdGUgZnVuY3Rpb24uCisJICovCisJZnAtPl9wID0gcDsKKwlmcC0+X3cgPSB0ICYgKF9fU0xCRnxfX1NOQkYpID8gMCA6IGZwLT5fYmYuX3NpemU7CisKKwlmb3IgKDsgbiA+IDA7IG4gLT0gdCwgcCArPSB0KSB7CisJCXQgPSAoKmZwLT5fd3JpdGUpKGZwLT5fY29va2llLCAoY2hhciAqKXAsIG4pOworCQlpZiAodCA8PSAwKSB7CisJCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJCXJldHVybiAoRU9GKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCitpbnQKK19fc2ZsdXNoX2xvY2tlZChGSUxFICpmcCkKK3sKKwlpbnQJcjsKKworCUZMT0NLRklMRShmcCk7CisJciA9IF9fc2ZsdXNoKGZwKTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0Yy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkN2RkZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0Yy5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qCSRPcGVuQlNEOiBmZ2V0Yy5jLHYgMS44IDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50CitmZ2V0YyhGSUxFICpmcCkKK3sKKwlyZXR1cm4gKGdldGMoZnApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0bG4uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0bG4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGMwODA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRsbi5jCkBAIC0wLDAgKzEsMTU0IEBACisvKgkkT3BlbkJTRDogZmdldGxuLmMsdiAxLjEyIDIwMTMvMTEvMTIgMDc6MDQ6MDYgZGVyYWFkdCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogRXhwYW5kIHRoZSBsaW5lIGJ1ZmZlci4gIFJldHVybiAtMSBvbiBlcnJvci4KKyNpZmRlZiBub3RkZWYKKyAqIFRoZSBgbmV3IHNpemUnIGRvZXMgbm90IGFjY291bnQgZm9yIGEgdGVybWluYXRpbmcgJ1wwJywKKyAqIHNvIHdlIGFkZCAxIGhlcmUuCisjZW5kaWYKKyAqLworc3RhdGljIGludAorX19zbGJleHBhbmQoRklMRSAqZnAsIHNpemVfdCBuZXdzaXplKQoreworCXZvaWQgKnA7CisKKyNpZmRlZiBub3RkZWYKKwkrK25ld3NpemU7CisjZW5kaWYKKwlpZiAoZnAtPl9sYi5fc2l6ZSA+PSBuZXdzaXplKQorCQlyZXR1cm4gKDApOworCWlmICgocCA9IHJlYWxsb2MoZnAtPl9sYi5fYmFzZSwgbmV3c2l6ZSkpID09IE5VTEwpCisJCXJldHVybiAoLTEpOworCWZwLT5fbGIuX2Jhc2UgPSBwOworCWZwLT5fbGIuX3NpemUgPSBuZXdzaXplOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBHZXQgYW4gaW5wdXQgbGluZS4gIFRoZSByZXR1cm5lZCBwb2ludGVyIG9mdGVuIChidXQgbm90IGFsd2F5cykKKyAqIHBvaW50cyBpbnRvIGEgc3RkaW8gYnVmZmVyLiAgRmdldGxpbmUgZG9lcyBub3QgYWx0ZXIgdGhlIHRleHQgb2YKKyAqIHRoZSByZXR1cm5lZCBsaW5lICh3aGljaCBpcyB0aHVzIG5vdCBhIEMgc3RyaW5nIGJlY2F1c2UgaXQgd2lsbAorICogbm90IG5lY2Vzc2FyaWx5IGVuZCB3aXRoICdcMCcpLCBidXQgZG9lcyBhbGxvdyBjYWxsZXJzIHRvIG1vZGlmeQorICogaXQgaWYgdGhleSB3aXNoLiAgVGh1cywgd2Ugc2V0IF9fU01PRCBpbiBjYXNlIHRoZSBjYWxsZXIgZG9lcy4KKyAqLworY2hhciAqCitmZ2V0bG4oRklMRSAqZnAsIHNpemVfdCAqbGVucCkKK3sKKwl1bnNpZ25lZCBjaGFyICpwOworCWNoYXIgKnJldDsKKwlzaXplX3QgbGVuOworCXNpemVfdCBvZmY7CisKKwlGTE9DS0ZJTEUoZnApOworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKworCS8qIG1ha2Ugc3VyZSB0aGVyZSBpcyBpbnB1dCAqLworCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKQorCQlnb3RvIGVycm9yOworCisJLyogbG9vayBmb3IgYSBuZXdsaW5lIGluIHRoZSBpbnB1dCAqLworCWlmICgocCA9IG1lbWNocigodm9pZCAqKWZwLT5fcCwgJ1xuJywgZnAtPl9yKSkgIT0gTlVMTCkgeworCQkvKgorCQkgKiBGb3VuZCBvbmUuICBGbGFnIGJ1ZmZlciBhcyBtb2RpZmllZCB0byBrZWVwIGZzZWVrIGZyb20KKwkJICogYG9wdGltaXNpbmcnIGEgYmFja3dhcmQgc2VlaywgaW4gY2FzZSB0aGUgdXNlciBzdG9tcHMgb24KKwkJICogdGhlIHRleHQuCisJCSAqLworCQlwKys7CQkvKiBhZHZhbmNlIG92ZXIgaXQgKi8KKwkJcmV0ID0gKGNoYXIgKilmcC0+X3A7CisJCSpsZW5wID0gbGVuID0gcCAtIGZwLT5fcDsKKwkJZnAtPl9mbGFncyB8PSBfX1NNT0Q7CisJCWZwLT5fciAtPSBsZW47CisJCWZwLT5fcCA9IHA7CisJCUZVTkxPQ0tGSUxFKGZwKTsKKwkJcmV0dXJuIChyZXQpOworCX0KKworCS8qCisJICogV2UgaGF2ZSB0byBjb3B5IHRoZSBjdXJyZW50IGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIGxpbmUgYnVmZmVyLgorCSAqIEFzIGEgYm9udXMsIHRob3VnaCwgd2UgY2FuIGxlYXZlIG9mZiB0aGUgX19TTU9ELgorCSAqCisJICogT1BUSU1JU1RJQyBpcyBsZW5ndGggdGhhdCB3ZSAob3B0aW1pc3RpY2FsbHkpIGV4cGVjdCB3aWxsCisJICogYWNjb21tb2RhdGUgdGhlIGByZXN0JyBvZiB0aGUgc3RyaW5nLCBvbiBlYWNoIHRyaXAgdGhyb3VnaCB0aGUKKwkgKiBsb29wIGJlbG93LgorCSAqLworI2RlZmluZSBPUFRJTUlTVElDIDgwCisKKwlmb3IgKGxlbiA9IGZwLT5fciwgb2ZmID0gMDs7IGxlbiArPSBmcC0+X3IpIHsKKwkJc2l6ZV90IGRpZmY7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZXJlIGlzIHJvb20gZm9yIG1vcmUgYnl0ZXMuICBDb3B5IGRhdGEgZnJvbQorCQkgKiBmaWxlIGJ1ZmZlciB0byBsaW5lIGJ1ZmZlciwgcmVmaWxsIGZpbGUgYW5kIGxvb2sgZm9yCisJCSAqIG5ld2xpbmUuICBUaGUgbG9vcCBzdG9wcyBvbmx5IHdoZW4gd2UgZmluZCBhIG5ld2xpbmUuCisJCSAqLworCQlpZiAoX19zbGJleHBhbmQoZnAsIGxlbiArIE9QVElNSVNUSUMpKQorCQkJZ290byBlcnJvcjsKKwkJKHZvaWQpbWVtY3B5KCh2b2lkICopKGZwLT5fbGIuX2Jhc2UgKyBvZmYpLCAodm9pZCAqKWZwLT5fcCwKKwkJICAgIGxlbiAtIG9mZik7CisJCW9mZiA9IGxlbjsKKwkJaWYgKF9fc3JlZmlsbChmcCkpCisJCQlicmVhazsJLyogRU9GIG9yIGVycm9yOiByZXR1cm4gcGFydGlhbCBsaW5lICovCisJCWlmICgocCA9IG1lbWNocigodm9pZCAqKWZwLT5fcCwgJ1xuJywgZnAtPl9yKSkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qIGdvdCBpdDogZmluaXNoIHVwIHRoZSBsaW5lIChsaWtlIGNvZGUgYWJvdmUpICovCisJCXArKzsKKwkJZGlmZiA9IHAgLSBmcC0+X3A7CisJCWxlbiArPSBkaWZmOworCQlpZiAoX19zbGJleHBhbmQoZnAsIGxlbikpCisJCQlnb3RvIGVycm9yOworCQkodm9pZCltZW1jcHkoKHZvaWQgKikoZnAtPl9sYi5fYmFzZSArIG9mZiksICh2b2lkICopZnAtPl9wLAorCQkgICAgZGlmZik7CisJCWZwLT5fciAtPSBkaWZmOworCQlmcC0+X3AgPSBwOworCQlicmVhazsKKwl9CisJKmxlbnAgPSBsZW47CisJcmV0ID0gKGNoYXIgKilmcC0+X2xiLl9iYXNlOworI2lmZGVmIG5vdGRlZgorCXJldFtsZW5dID0gJ1wwJzsKKyNlbmRpZgorCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKHJldCk7CisKK2Vycm9yOgorCSpsZW5wID0gMDsJCS8qID8/PyAqLworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKE5VTEwpOwkJLyogPz8/ICovCit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmdldHBvcy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRwb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjE4OGU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRwb3MuYwpAQCAtMCwwICsxLDQzIEBACisvKgkkT3BlbkJTRDogZmdldHBvcy5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBmZ2V0cG9zOiBsaWtlIGZ0ZWxsby4KKyAqLworaW50CitmZ2V0cG9zKEZJTEUgKmZwLCBmcG9zX3QgKnBvcykKK3sKKwlyZXR1cm4oKCpwb3MgPSBmdGVsbG8oZnApKSA9PSAoZnBvc190KS0xKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0cy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhODc3MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0cy5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgkkT3BlbkJTRDogZmdldHMuYyx2IDEuMTQgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIFJlYWQgYXQgbW9zdCBuLTEgY2hhcmFjdGVycyBmcm9tIHRoZSBnaXZlbiBmaWxlLgorICogU3RvcCB3aGVuIGEgbmV3bGluZSBoYXMgYmVlbiByZWFkLCBvciB0aGUgY291bnQgcnVucyBvdXQuCisgKiBSZXR1cm4gZmlyc3QgYXJndW1lbnQsIG9yIE5VTEwgaWYgbm8gY2hhcmFjdGVycyB3ZXJlIHJlYWQuCisgKiBEbyBub3QgcmV0dXJuIE5VTEwgaWYgbiA9PSAxLgorICovCitjaGFyICoKK2ZnZXRzKGNoYXIgKmJ1ZiwgaW50IG4sIEZJTEUgKmZwKQoreworCXNpemVfdCBsZW47CisJY2hhciAqczsKKwl1bnNpZ25lZCBjaGFyICpwLCAqdDsKKworCWlmIChuIDw9IDApIHsJCS8qIHNhbml0eSBjaGVjayAqLworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlGTE9DS0ZJTEUoZnApOworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKwlzID0gYnVmOworCW4tLTsJCQkvKiBsZWF2ZSBzcGFjZSBmb3IgTlVMICovCisJd2hpbGUgKG4gIT0gMCkgeworCQkvKgorCQkgKiBJZiB0aGUgYnVmZmVyIGlzIGVtcHR5LCByZWZpbGwgaXQuCisJCSAqLworCQlpZiAoZnAtPl9yIDw9IDApIHsKKwkJCWlmIChfX3NyZWZpbGwoZnApKSB7CisJCQkJLyogRU9GL2Vycm9yOiBzdG9wIHdpdGggcGFydGlhbCBvciBubyBsaW5lICovCisJCQkJaWYgKHMgPT0gYnVmKSB7CisJCQkJCUZVTkxPQ0tGSUxFKGZwKTsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJbGVuID0gZnAtPl9yOworCQlwID0gZnAtPl9wOworCisJCS8qCisJCSAqIFNjYW4gdGhyb3VnaCBhdCBtb3N0IG4gYnl0ZXMgb2YgdGhlIGN1cnJlbnQgYnVmZmVyLAorCQkgKiBsb29raW5nIGZvciAnXG4nLiAgSWYgZm91bmQsIGNvcHkgdXAgdG8gYW5kIGluY2x1ZGluZworCQkgKiBuZXdsaW5lLCBhbmQgc3RvcC4gIE90aGVyd2lzZSwgY29weSBlbnRpcmUgY2h1bmsKKwkJICogYW5kIGxvb3AuCisJCSAqLworCQlpZiAobGVuID4gbikKKwkJCWxlbiA9IG47CisJCXQgPSBtZW1jaHIoKHZvaWQgKilwLCAnXG4nLCBsZW4pOworCQlpZiAodCAhPSBOVUxMKSB7CisJCQlsZW4gPSArK3QgLSBwOworCQkJZnAtPl9yIC09IGxlbjsKKwkJCWZwLT5fcCA9IHQ7CisJCQkodm9pZCltZW1jcHkoKHZvaWQgKilzLCAodm9pZCAqKXAsIGxlbik7CisJCQlzW2xlbl0gPSAnXDAnOworCQkJRlVOTE9DS0ZJTEUoZnApOworCQkJcmV0dXJuIChidWYpOworCQl9CisJCWZwLT5fciAtPSBsZW47CisJCWZwLT5fcCArPSBsZW47CisJCSh2b2lkKW1lbWNweSgodm9pZCAqKXMsICh2b2lkICopcCwgbGVuKTsKKwkJcyArPSBsZW47CisJCW4gLT0gbGVuOworCX0KKwkqcyA9ICdcMCc7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAoYnVmKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0d2MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0d2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTZmZmFmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXR3Yy5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCSRPcGVuQlNEOiBmZ2V0d2MuYyx2IDEuNCAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQJKi8KKy8qICROZXRCU0Q6IGZnZXR3Yy5jLHYgMS4zIDIwMDMvMDMvMDcgMDc6MTE6MzYgdHNoaW96YWsgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpMjAwMSBDaXRydXMgUHJvamVjdCwKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJENpdHJ1cyQKKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKword2ludF90CitfX2ZnZXR3Y191bmxvY2soRklMRSAqZnApCit7CisJc3RydWN0IHdjaGFyX2lvX2RhdGEgKndjaW87CisJbWJzdGF0ZV90ICpzdDsKKwl3Y2hhcl90IHdjOworCXNpemVfdCBzaXplOworCisJX1NFVF9PUklFTlRBVElPTihmcCwgMSk7CisJd2NpbyA9IFdDSU9fR0VUKGZwKTsKKwlpZiAod2NpbyA9PSAwKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gV0VPRjsKKwl9CisKKwkvKiBpZiB0aGVyZSdyZSB1bmdldHdjJ2VkIHdjaGFycywgdXNlIHRoZW0gKi8KKwlpZiAod2Npby0+d2Npb191bmdldHdjX2luYnVmKSB7CisJCXdjID0gd2Npby0+d2Npb191bmdldHdjX2J1ZlstLXdjaW8tPndjaW9fdW5nZXR3Y19pbmJ1Zl07CisKKwkJcmV0dXJuIHdjOworCX0KKworCXN0ID0gJndjaW8tPndjaW9fbWJzdGF0ZV9pbjsKKworCWRvIHsKKwkJY2hhciBjOworCQlpbnQgY2ggPSBfX3NnZXRjKGZwKTsKKworCQlpZiAoY2ggPT0gRU9GKSB7CisJCQlyZXR1cm4gV0VPRjsKKwkJfQorCisJCWMgPSBjaDsKKwkJc2l6ZSA9IG1icnRvd2MoJndjLCAmYywgMSwgc3QpOworCQlpZiAoc2l6ZSA9PSAoc2l6ZV90KS0xKSB7CisJCQllcnJubyA9IEVJTFNFUTsKKwkJCXJldHVybiBXRU9GOworCQl9CisJfSB3aGlsZSAoc2l6ZSA9PSAoc2l6ZV90KS0yKTsKKworCXJldHVybiB3YzsKK30KKword2ludF90CitmZ2V0d2MoRklMRSAqZnApCit7CisJd2ludF90IHI7CisKKwlGTE9DS0ZJTEUoZnApOworCXIgPSBfX2ZnZXR3Y191bmxvY2soZnApOworCUZVTkxPQ0tGSUxFKGZwKTsKKworCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmdldHdzLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZmdldHdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThjZDI0OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mZ2V0d3MuYwpAQCAtMCwwICsxLDc5IEBACisvKgkkT3BlbkJTRDogZmdldHdzLmMsdiAxLjYgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkCSovCisvKiAkTmV0QlNEOiBmZ2V0d3MuYyx2IDEuMSAyMDAzLzAzLzA3IDA3OjExOjM3IHRzaGlvemFrIEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyIFRpbSBKLiBSb2JiaW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBPcmlnaW5hbCB2ZXJzaW9uIElEOgorICogRnJlZUJTRDogc3JjL2xpYi9saWJjL3N0ZGlvL2ZnZXR3cy5jLHYgMS40IDIwMDIvMDkvMjAgMTM6MjU6NDAgdGpyIEV4cAorICoKKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKword2NoYXJfdCAqCitmZ2V0d3Mod2NoYXJfdCAqIF9fcmVzdHJpY3Qgd3MsIGludCBuLCBGSUxFICogX19yZXN0cmljdCBmcCkKK3sKKwl3Y2hhcl90ICp3c3A7CisJd2ludF90IHdjOworCisJRkxPQ0tGSUxFKGZwKTsKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAxKTsKKworCWlmIChuIDw9IDApIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJd3NwID0gd3M7CisJd2hpbGUgKG4tLSA+IDEpIHsKKwkJaWYgKCh3YyA9IF9fZmdldHdjX3VubG9jayhmcCkpID09IFdFT0YgJiYgZXJybm8gPT0gRUlMU0VRKSB7CisJCQlnb3RvIGVycm9yOworCQl9CisJCWlmICh3YyA9PSBXRU9GKSB7CisJCQlpZiAod3NwID09IHdzKSB7CisJCQkJLyogRU9GL2Vycm9yLCBubyBjaGFyYWN0ZXJzIHJlYWQgeWV0LiAqLworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQkqd3NwKysgPSAod2NoYXJfdCl3YzsKKwkJaWYgKHdjID09IEwnXG4nKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCSp3c3ArKyA9IEwnXDAnOworCUZVTkxPQ0tGSUxFKGZwKTsKKworCXJldHVybiAod3MpOworCitlcnJvcjoKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9maWxlbm8uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9maWxlbm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODYyOGRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBmaWxlbm8uYyx2IDEuOCAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBmaWxlbm8uCisgKi8KKyN1bmRlZiBmaWxlbm8KKworaW50CitmaWxlbm8oRklMRSAqZnApCit7CisJaW50ICAgICByZXQ7CisKKwlGTE9DS0ZJTEUoZnApOworCXJldCA9IF9fc2ZpbGVubyhmcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9maW5kZnAuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9maW5kZnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGM3ZGMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbmRmcC5jCkBAIC0wLDAgKzEsMTgxIEBACisvKgkkT3BlbkJTRDogZmluZGZwLmMsdiAxLjE1IDIwMTMvMTIvMTcgMTY6MzM6MjcgZGVyYWFkdCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAiZ2x1ZS5oIgorI2luY2x1ZGUgInByaXZhdGUvdGhyZWFkX3ByaXZhdGUuaCIKKworI2RlZmluZSBBTElHTkJZVEVTIChzaXplb2YodWludHB0cl90KSAtIDEpCisjZGVmaW5lIEFMSUdOKHApICgoKHVpbnRwdHJfdCkocCkgKyBBTElHTkJZVEVTKSAmfiBBTElHTkJZVEVTKQorCitpbnQJX19zZGlkaW5pdDsKKworI2RlZmluZQlORFlOQU1JQyAxMAkJLyogYWRkIHRlbiBtb3JlIHdoZW5ldmVyIG5lY2Vzc2FyeSAqLworCisjZGVmaW5lCXN0ZChmbGFncywgZmlsZSkgXAorCXswLDAsMCxmbGFncyxmaWxlLHswLDB9LDAsX19zRitmaWxlLF9fc2Nsb3NlLF9fc3JlYWQsX19zc2VlayxfX3N3cml0ZSwgXAorCSB7KHVuc2lnbmVkIGNoYXIgKikoX19zRmV4dCtmaWxlKSwgMH0sTlVMTCwwLHswLDAsMH0sezB9LHswLDB9LDAsMH0KKy8qCSBwIHIgdyBmbGFncyBmaWxlIF9iZiB6ICBjb29raWUgICAgICBjbG9zZSAgICByZWFkICAgIHNlZWsgICAgd3JpdGUKKwkgZXh0ICovCisKKwkJCQkvKiB0aGUgdXN1YWwgLSAoc3RkaW4gKyBzdGRvdXQgKyBzdGRlcnIpICovCitzdGF0aWMgRklMRSB1c3VhbFtGT1BFTl9NQVggLSAzXTsKK3N0YXRpYyBzdHJ1Y3QgX19zZmlsZWV4dCB1c3VhbGV4dFtGT1BFTl9NQVggLSAzXTsKK3N0YXRpYyBzdHJ1Y3QgZ2x1ZSB1Z2x1ZSA9IHsgMCwgRk9QRU5fTUFYIC0gMywgdXN1YWwgfTsKK3N0YXRpYyBzdHJ1Y3QgZ2x1ZSAqbGFzdGdsdWUgPSAmdWdsdWU7CitfVEhSRUFEX1BSSVZBVEVfTVVURVgoX19zZnBfbXV0ZXgpOworCitzdGF0aWMgc3RydWN0IF9fc2ZpbGVleHQgX19zRmV4dFszXTsKK0ZJTEUgX19zRlszXSA9IHsKKwlzdGQoX19TUkQsIFNURElOX0ZJTEVOTyksCQkvKiBzdGRpbiAqLworCXN0ZChfX1NXUiwgU1RET1VUX0ZJTEVOTyksCQkvKiBzdGRvdXQgKi8KKwlzdGQoX19TV1J8X19TTkJGLCBTVERFUlJfRklMRU5PKQkvKiBzdGRlcnIgKi8KK307CitzdHJ1Y3QgZ2x1ZSBfX3NnbHVlID0geyAmdWdsdWUsIDMsIF9fc0YgfTsKKworc3RhdGljIHN0cnVjdCBnbHVlICoKK21vcmVnbHVlKGludCBuKQoreworCXN0cnVjdCBnbHVlICpnOworCUZJTEUgKnA7CisJc3RydWN0IF9fc2ZpbGVleHQgKnBleHQ7CisJc3RhdGljIEZJTEUgZW1wdHk7CisJY2hhciAqZGF0YTsKKworCWRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpnKSArIEFMSUdOQllURVMgKyBuICogc2l6ZW9mKEZJTEUpCisJICAgICsgbiAqIHNpemVvZihzdHJ1Y3QgX19zZmlsZWV4dCkpOworCWlmIChkYXRhID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZyA9IChzdHJ1Y3QgZ2x1ZSAqKWRhdGE7CisJcCA9IChGSUxFICopQUxJR04oZGF0YSArIHNpemVvZigqZykpOworCXBleHQgPSAoc3RydWN0IF9fc2ZpbGVleHQgKikKKwkgICAgKEFMSUdOKGRhdGEgKyBzaXplb2YoKmcpKSArIG4gKiBzaXplb2YoRklMRSkpOworCWctPm5leHQgPSBOVUxMOworCWctPm5pb2JzID0gbjsKKwlnLT5pb2JzID0gcDsKKwl3aGlsZSAoLS1uID49IDApIHsKKwkJKnAgPSBlbXB0eTsKKwkJX0ZJTEVFWFRfU0VUVVAocCwgcGV4dCk7CisJCXArKzsKKwkJcGV4dCsrOworCX0KKwlyZXR1cm4gKGcpOworfQorCisvKgorICogRmluZCBhIGZyZWUgRklMRSBmb3IgZm9wZW4gZXQgYWwuCisgKi8KK0ZJTEUgKgorX19zZnAodm9pZCkKK3sKKwlGSUxFICpmcDsKKwlpbnQgbjsKKwlzdHJ1Y3QgZ2x1ZSAqZzsKKworCWlmICghX19zZGlkaW5pdCkKKwkJX19zaW5pdCgpOworCisJX1RIUkVBRF9QUklWQVRFX01VVEVYX0xPQ0soX19zZnBfbXV0ZXgpOworCWZvciAoZyA9ICZfX3NnbHVlOyBnICE9IE5VTEw7IGcgPSBnLT5uZXh0KSB7CisJCWZvciAoZnAgPSBnLT5pb2JzLCBuID0gZy0+bmlvYnM7IC0tbiA+PSAwOyBmcCsrKQorCQkJaWYgKGZwLT5fZmxhZ3MgPT0gMCkKKwkJCQlnb3RvIGZvdW5kOworCX0KKworCS8qIHJlbGVhc2UgbG9jayB3aGlsZSBtYWxsb2NpbmcgKi8KKwlfVEhSRUFEX1BSSVZBVEVfTVVURVhfVU5MT0NLKF9fc2ZwX211dGV4KTsKKwlpZiAoKGcgPSBtb3JlZ2x1ZShORFlOQU1JQykpID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJX1RIUkVBRF9QUklWQVRFX01VVEVYX0xPQ0soX19zZnBfbXV0ZXgpOworCWxhc3RnbHVlLT5uZXh0ID0gZzsKKwlsYXN0Z2x1ZSA9IGc7CisJZnAgPSBnLT5pb2JzOworZm91bmQ6CisJZnAtPl9mbGFncyA9IDE7CQkvKiByZXNlcnZlIHRoaXMgc2xvdDsgY2FsbGVyIHNldHMgcmVhbCBmbGFncyAqLworCV9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0soX19zZnBfbXV0ZXgpOworCWZwLT5fcCA9IE5VTEw7CQkvKiBubyBjdXJyZW50IHBvaW50ZXIgKi8KKwlmcC0+X3cgPSAwOwkJLyogbm90aGluZyB0byByZWFkIG9yIHdyaXRlICovCisJZnAtPl9yID0gMDsKKwlmcC0+X2JmLl9iYXNlID0gTlVMTDsJLyogbm8gYnVmZmVyICovCisJZnAtPl9iZi5fc2l6ZSA9IDA7CisJZnAtPl9sYmZzaXplID0gMDsJLyogbm90IGxpbmUgYnVmZmVyZWQgKi8KKwlmcC0+X2ZpbGUgPSAtMTsJCS8qIG5vIGZpbGUgKi8KKy8qCWZwLT5fY29va2llID0gPGFueT47ICovCS8qIGNhbGxlciBzZXRzIGNvb2tpZSwgX3JlYWQvX3dyaXRlIGV0YyAqLworCWZwLT5fbGIuX2Jhc2UgPSBOVUxMOwkvKiBubyBsaW5lIGJ1ZmZlciAqLworCWZwLT5fbGIuX3NpemUgPSAwOworCV9GSUxFRVhUX0lOSVQoZnApOworCXJldHVybiAoZnApOworfQorCisvKgorICogZXhpdCgpIGFuZCBhYm9ydCgpIGNhbGwgX2NsZWFudXAoKSB0aHJvdWdoIHRoZSBjYWxsYmFjayByZWdpc3RlcmVkCisgKiB3aXRoIF9fYXRleGl0X3JlZ2lzdGVyX2NsZWFudXAoKSwgc2V0IHdoZW5ldmVyIHdlIG9wZW4gb3IgYnVmZmVyIGEKKyAqIGZpbGUuIFRoaXMgY2hpY2FuZXJ5IGlzIGRvbmUgc28gdGhhdCBwcm9ncmFtcyB0aGF0IGRvIG5vdCB1c2Ugc3RkaW8KKyAqIG5lZWQgbm90IGxpbmsgaXQgYWxsIGluLgorICoKKyAqIFRoZSBuYW1lIGBfY2xlYW51cCcgaXMsIGFsYXMsIGZhaXJseSB3ZWxsIGtub3duIG91dHNpZGUgc3RkaW8uCisgKi8KK3ZvaWQKK19jbGVhbnVwKHZvaWQpCit7CisJLyogKHZvaWQpIF9md2FsayhmY2xvc2UpOyAqLworCSh2b2lkKSBfZndhbGsoX19zZmx1c2gpOwkJLyogYGNoZWF0aW5nJyAqLworfQorCisvKgorICogX19zaW5pdCgpIGlzIGNhbGxlZCB3aGVuZXZlciBzdGRpbydzIGludGVybmFsIHZhcmlhYmxlcyBtdXN0IGJlIHNldCB1cC4KKyAqLwordm9pZAorX19zaW5pdCh2b2lkKQoreworCV9USFJFQURfUFJJVkFURV9NVVRFWChfX3Npbml0X211dGV4KTsKKwlpbnQgaTsKKworCV9USFJFQURfUFJJVkFURV9NVVRFWF9MT0NLKF9fc2luaXRfbXV0ZXgpOworCWlmIChfX3NkaWRpbml0KQorCQlnb3RvIG91dDsJLyogYmFpbCBvdXQgaWYgY2FsbGVyIGxvc3QgdGhlIHJhY2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRk9QRU5fTUFYIC0gMzsgaSsrKSB7CisJCV9GSUxFRVhUX1NFVFVQKHVzdWFsK2ksIHVzdWFsZXh0K2kpOworCX0KKwkvKiBtYWtlIHN1cmUgd2UgY2xlYW4gdXAgb24gZXhpdCAqLworCV9fYXRleGl0X3JlZ2lzdGVyX2NsZWFudXAoX2NsZWFudXApOyAvKiBjb25zZXJ2YXRpdmUgKi8KKwlfX3NkaWRpbml0ID0gMTsKK291dDoKKwlfVEhSRUFEX1BSSVZBVEVfTVVURVhfVU5MT0NLKF9fc2luaXRfbXV0ZXgpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Zsb2F0aW8uaCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mbG9hdGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2OTAzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mbG9hdGlvLmgKQEAgLTAsMCArMSw1OCBAQAorLyoJJE9wZW5CU0Q6IGZsb2F0aW8uaCx2IDEuNCAyMDA4LzA5LzA3IDIwOjM2OjA4IG1hcnR5bmFzIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEZsb2F0aW5nIHBvaW50IHNjYW5mL3ByaW50ZiAoaW5wdXQvb3V0cHV0KSBkZWZpbml0aW9ucy4KKyAqLworCisvKiAxMS1iaXQgZXhwb25lbnQgKFZBWCBHIGZsb2F0aW5nIHBvaW50KSBpcyAzMDggZGVjaW1hbCBkaWdpdHMgKi8KKyNkZWZpbmUJTUFYRVhQCQkzMDgKKy8qIDEyOCBiaXQgZnJhY3Rpb24gdGFrZXMgdXAgMzkgZGVjaW1hbCBkaWdpdHM7IG1heCByZWFzb25hYmxlIHByZWNpc2lvbiAqLworI2RlZmluZQlNQVhGUkFDVAkzOQorCisvKgorICogTUFYRVhQRElHIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cyBuZWVkZWQgdG8gc3RvcmUgYQorICogZmxvYXRpbmcgcG9pbnQgZXhwb25lbnQgaW4gdGhlIGxhcmdlc3Qgc3VwcG9ydGVkIGZvcm1hdC4gIEl0IHNob3VsZAorICogYmUgY2VpbChsb2cxMChMREJMX01BWF8xMF9FWFApKSBvciwgaWYgaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQKKyAqIGNvbnZlcnNpb25zIGFyZSBzdXBwb3J0ZWQsIGNlaWwobG9nMTAoTERCTF9NQVhfRVhQKSkuICBCdXQgc2luY2UgaXQKKyAqIGlzIHByZXNlbnRseSBuZXZlciBncmVhdGVyIHRoYW4gNSBpbiBwcmFjdGljZSwgd2UgZnVkZ2UgaXQuCisgKi8KKyNkZWZpbmUJTUFYRVhQRElHCTYKKyNpZiBMREJMX01BWF9FWFAgPiA5OTk5OTkKKyNlcnJvciAiZmxvYXRpbmcgcG9pbnQgYnVmZmVycyB0b28gc21hbGwiCisjZW5kaWYKKworY2hhciAqX19oZHRvYShkb3VibGUsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKiopOworY2hhciAqX19obGR0b2EobG9uZyBkb3VibGUsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKiopOworY2hhciAqX19sZHRvYShsb25nIGRvdWJsZSAqLCBpbnQsIGludCwgaW50ICosIGludCAqLCBjaGFyICoqKTsKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHJpbnRmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOTExNDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnByaW50Zi5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCSRPcGVuQlNEOiBmcHJpbnRmLmMsdiAxLjcgMjAxMS8wNS8zMCAxODo0ODozMyBtYXJ0eW5hcyBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyogUFJJTlRGTElLRTIgKi8KK2ludAorZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZwcmludGYoZnAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXJnZS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXJnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YmQ3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1cmdlLmMKQEAgLTAsMCArMSw2MSBAQAorLyoJJE9wZW5CU0Q6IGZwdXJnZS5jLHYgMS45IDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBmcHVyZ2U6IGxpa2UgZmZsdXNoLCBidXQgd2l0aG91dCB3cml0aW5nIGFueXRoaW5nOiBsZWF2ZSB0aGUKKyAqIGdpdmVuIEZJTEUncyBidWZmZXIgZW1wdHkuCisgKi8KK2ludAorZnB1cmdlKEZJTEUgKmZwKQoreworCUZMT0NLRklMRShmcCk7CisJaWYgKCFmcC0+X2ZsYWdzKSB7CisJCUZVTkxPQ0tGSUxFKGZwKTsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuKEVPRik7CisJfQorCisJaWYgKEhBU1VCKGZwKSkKKwkJRlJFRVVCKGZwKTsKKwlXQ0lPX0ZSRUUoZnApOworCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2U7CisJZnAtPl9yID0gMDsKKwlmcC0+X3cgPSBmcC0+X2ZsYWdzICYgKF9fU0xCRnxfX1NOQkYpID8gMCA6IGZwLT5fYmYuX3NpemU7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dGMuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHV0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZTM5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dGMuYwpAQCAtMCwwICsxLDQxIEBACisvKgkkT3BlbkJTRDogZnB1dGMuYyx2IDEuMTAgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK2ludAorZnB1dGMoaW50IGMsIEZJTEUgKmZwKQoreworCXJldHVybiAocHV0YyhjLCBmcCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXRzLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTg1NTZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXRzLmMKQEAgLTAsMCArMSw1OCBAQAorLyoJJE9wZW5CU0Q6IGZwdXRzLmMsdiAxLjEwIDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKworLyoKKyAqIFdyaXRlIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIGdpdmVuIGZpbGUuCisgKi8KK2ludAorZnB1dHMoY29uc3QgY2hhciAqcywgRklMRSAqZnApCit7CisJc3RydWN0IF9fc3VpbyB1aW87CisJc3RydWN0IF9fc2lvdiBpb3Y7CisJaW50IHJldDsKKworCWlvdi5pb3ZfYmFzZSA9ICh2b2lkICopczsKKwlpb3YuaW92X2xlbiA9IHVpby51aW9fcmVzaWQgPSBzdHJsZW4ocyk7CisJdWlvLnVpb19pb3YgPSAmaW92OworCXVpby51aW9faW92Y250ID0gMTsKKwlGTE9DS0ZJTEUoZnApOworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKwlyZXQgPSBfX3NmdndyaXRlKGZwLCAmdWlvKTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXR3Yy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXR3Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjcwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dHdjLmMKQEAgLTAsMCArMSw4OCBAQAorLyoJJE9wZW5CU0Q6IGZwdXR3Yy5jLHYgMS40IDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJAkqLworLyogJE5ldEJTRDogZnB1dHdjLmMsdiAxLjMgMjAwMy8wMy8wNyAwNzoxMTozNyB0c2hpb3phayBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykyMDAxIENpdHJ1cyBQcm9qZWN0LAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkQ2l0cnVzJAorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKword2ludF90CitfX2ZwdXR3Y191bmxvY2sod2NoYXJfdCB3YywgRklMRSAqZnApCit7CisJc3RydWN0IHdjaGFyX2lvX2RhdGEgKndjaW87CisJbWJzdGF0ZV90ICpzdDsKKwlzaXplX3Qgc2l6ZTsKKwljaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKwlzdHJ1Y3QgX19zdWlvIHVpbzsKKwlzdHJ1Y3QgX19zaW92IGlvdjsKKworCS8qIExJTlRFRCB3ZSBkb24ndCBwbGF5IHdpdGggYnVmICovCisJaW92Lmlvdl9iYXNlID0gKHZvaWQgKilidWY7CisJdWlvLnVpb19pb3YgPSAmaW92OworCXVpby51aW9faW92Y250ID0gMTsKKworCV9TRVRfT1JJRU5UQVRJT04oZnAsIDEpOworCXdjaW8gPSBXQ0lPX0dFVChmcCk7CisJaWYgKHdjaW8gPT0gMCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuIFdFT0Y7CisJfQorCisJd2Npby0+d2Npb191bmdldHdjX2luYnVmID0gMDsKKwlzdCA9ICZ3Y2lvLT53Y2lvX21ic3RhdGVfb3V0OworCisJc2l6ZSA9IHdjcnRvbWIoYnVmLCB3Yywgc3QpOworCWlmIChzaXplID09IChzaXplX3QpLTEpIHsKKwkJZXJybm8gPSBFSUxTRVE7CisJCXJldHVybiBXRU9GOworCX0KKworCXVpby51aW9fcmVzaWQgPSBpb3YuaW92X2xlbiA9IHNpemU7CisJaWYgKF9fc2Z2d3JpdGUoZnAsICZ1aW8pKSB7CisJCXJldHVybiBXRU9GOworCX0KKworCXJldHVybiAod2ludF90KXdjOworfQorCit3aW50X3QKK2ZwdXR3Yyh3Y2hhcl90IHdjLCBGSUxFICpmcCkKK3sKKwl3aW50X3QgcjsKKworCUZMT0NLRklMRShmcCk7CisJciA9IF9fZnB1dHdjX3VubG9jayh3YywgZnApOworCUZVTkxPQ0tGSUxFKGZwKTsKKworCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dHdzLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnB1dHdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4ODQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcHV0d3MuYwpAQCAtMCwwICsxLDU3IEBACisvKgkkT3BlbkJTRDogZnB1dHdzLmMsdiAxLjcgMjAxMy8xMS8xMiAwNzowNDozNSBkZXJhYWR0IEV4cCAkCSovCisvKiAkTmV0QlNEOiBmcHV0d3MuYyx2IDEuMSAyMDAzLzAzLzA3IDA3OjExOjM3IHRzaGlvemFrIEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyIFRpbSBKLiBSb2JiaW5zLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBPcmlnaW5hbCB2ZXJzaW9uIElEOgorICogRnJlZUJTRDogc3JjL2xpYi9saWJjL3N0ZGlvL2ZwdXR3cy5jLHYgMS40IDIwMDIvMDkvMjAgMTM6MjU6NDAgdGpyIEV4cAorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKworaW50CitmcHV0d3Mod3MsIGZwKQorCWNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IHdzOworCUZJTEUgKiBfX3Jlc3RyaWN0IGZwOworeworCUZMT0NLRklMRShmcCk7CisJX1NFVF9PUklFTlRBVElPTihmcCwgMSk7CisKKwl3aGlsZSAoKndzICE9ICdcMCcpIHsKKwkJaWYgKF9fZnB1dHdjX3VubG9jaygqd3MrKywgZnApID09IFdFT0YpIHsKKwkJCUZVTkxPQ0tGSUxFKGZwKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJfQorCisJRlVOTE9DS0ZJTEUoZnApOworCisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcmVhZC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZyZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1OTJmNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcmVhZC5jCkBAIC0wLDAgKzEsODggQEAKKy8qCSRPcGVuQlNEOiBmcmVhZC5jLHYgMS4xMiAyMDE0LzA1LzAxIDE2OjQwOjM2IGRlcmFhZHQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisjZGVmaW5lIE1VTF9OT19PVkVSRkxPVwkoMVVMIDw8IChzaXplb2Yoc2l6ZV90KSAqIDQpKQorCitzaXplX3QKK2ZyZWFkKHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCBjb3VudCwgRklMRSAqZnApCit7CisJc2l6ZV90IHJlc2lkOworCWNoYXIgKnA7CisJaW50IHI7CisJc2l6ZV90IHRvdGFsOworCisJLyoKKwkgKiBFeHRlbnNpb246ICBDYXRjaCBpbnRlZ2VyIG92ZXJmbG93CisJICovCisJaWYgKChzaXplID49IE1VTF9OT19PVkVSRkxPVyB8fCBjb3VudCA+PSBNVUxfTk9fT1ZFUkZMT1cpICYmCisJICAgIHNpemUgPiAwICYmIFNJWkVfTUFYIC8gc2l6ZSA8IGNvdW50KSB7CisJCWVycm5vID0gRU9WRVJGTE9XOworCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKgorCSAqIEFOU0kgYW5kIFNVU3YyIHJlcXVpcmUgYSByZXR1cm4gdmFsdWUgb2YgMCBpZiBzaXplIG9yIGNvdW50IGFyZSAwLgorCSAqLworCWlmICgocmVzaWQgPSBjb3VudCAqIHNpemUpID09IDApCisJCXJldHVybiAoMCk7CisJRkxPQ0tGSUxFKGZwKTsKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisJaWYgKGZwLT5fciA8IDApCisJCWZwLT5fciA9IDA7CisJdG90YWwgPSByZXNpZDsKKwlwID0gYnVmOworCXdoaWxlIChyZXNpZCA+IChyID0gZnAtPl9yKSkgeworCQkodm9pZCltZW1jcHkoKHZvaWQgKilwLCAodm9pZCAqKWZwLT5fcCwgKHNpemVfdClyKTsKKwkJZnAtPl9wICs9IHI7CisJCS8qIGZwLT5fciA9IDAgLi4uIGRvbmUgaW4gX19zcmVmaWxsICovCisJCXAgKz0gcjsKKwkJcmVzaWQgLT0gcjsKKwkJaWYgKF9fc3JlZmlsbChmcCkpIHsKKwkJCS8qIG5vIG1vcmUgaW5wdXQ6IHJldHVybiBwYXJ0aWFsIHJlc3VsdCAqLworCQkJRlVOTE9DS0ZJTEUoZnApOworCQkJcmV0dXJuICgodG90YWwgLSByZXNpZCkgLyBzaXplKTsKKwkJfQorCX0KKwkodm9pZCltZW1jcHkoKHZvaWQgKilwLCAodm9pZCAqKWZwLT5fcCwgcmVzaWQpOworCWZwLT5fciAtPSByZXNpZDsKKwlmcC0+X3AgKz0gcmVzaWQ7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAoY291bnQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZyZW9wZW4uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcmVvcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE1OGZiMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mcmVvcGVuLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCSRPcGVuQlNEOiBmcmVvcGVuLmMsdiAxLjEzIDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKiAKKyAqIFJlLWRpcmVjdCBhbiBleGlzdGluZywgb3BlbiAocHJvYmFibHkpIGZpbGUgdG8gc29tZSBvdGhlciBmaWxlLiAKKyAqIEFOU0kgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIGZpbGUgZ2V0cyBjbG9zZWQgaWYgYXQKKyAqIGFsbCBwb3NzaWJsZSwgbm8gbWF0dGVyIHdoYXQuCisgKi8KK0ZJTEUgKgorZnJlb3Blbihjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICptb2RlLCBGSUxFICpmcCkKK3sKKwlpbnQgZjsKKwlpbnQgZmxhZ3MsIGlzb3Blbiwgb2ZsYWdzLCBzdmVycm5vLCB3YW50ZmQ7CisKKwlpZiAoKGZsYWdzID0gX19zZmxhZ3MobW9kZSwgJm9mbGFncykpID09IDApIHsKKwkJKHZvaWQpIGZjbG9zZShmcCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJaWYgKCFfX3NkaWRpbml0KQorCQlfX3Npbml0KCk7CisKKwlGTE9DS0ZJTEUoZnApOworCisJLyoKKwkgKiBUaGVyZSBhcmUgYWN0dWFsbHkgcHJvZ3JhbXMgdGhhdCBkZXBlbmQgb24gYmVpbmcgYWJsZSB0byAiZnJlb3BlbiIKKwkgKiBkZXNjcmlwdG9ycyB0aGF0IHdlcmVuJ3Qgb3JpZ2luYWxseSBvcGVuLiAgS2VlcCB0aGlzIGZyb20gYnJlYWtpbmcuCisJICogUmVtZW1iZXIgd2hldGhlciB0aGUgc3RyZWFtIHdhcyBvcGVuIHRvIGJlZ2luIHdpdGgsIGFuZCB3aGljaCBmaWxlCisJICogZGVzY3JpcHRvciAoaWYgYW55KSB3YXMgYXNzb2NpYXRlZCB3aXRoIGl0LiAgSWYgaXQgd2FzIGF0dGFjaGVkIHRvCisJICogYSBkZXNjcmlwdG9yLCBkZWZlciBjbG9zaW5nIGl0OyBmcmVvcGVuKCIvZGV2L3N0ZGluIiwgInIiLCBzdGRpbikKKwkgKiBzaG91bGQgd29yay4gIFRoaXMgaXMgdW5uZWNlc3NhcnkgaWYgaXQgd2FzIG5vdCBhIFVuaXggZmlsZS4KKwkgKi8KKwlpZiAoZnAtPl9mbGFncyA9PSAwKSB7CisJCWZwLT5fZmxhZ3MgPSBfX1NFT0Y7CS8qIGhvbGQgb24gdG8gaXQgKi8KKwkJaXNvcGVuID0gMDsKKwkJd2FudGZkID0gLTE7CisJfSBlbHNlIHsKKwkJLyogZmx1c2ggdGhlIHN0cmVhbTsgQU5TSSBkb2Vzbid0IHJlcXVpcmUgdGhpcy4gKi8KKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUikKKwkJCSh2b2lkKSBfX3NmbHVzaChmcCk7CisJCS8qIGlmIGNsb3NlIGlzIE5VTEwsIGNsb3NpbmcgaXMgYSBuby1vcCwgaGVuY2UgcG9pbnRsZXNzICovCisJCWlzb3BlbiA9IGZwLT5fY2xvc2UgIT0gTlVMTDsKKwkJaWYgKCh3YW50ZmQgPSBmcC0+X2ZpbGUpIDwgMCAmJiBpc29wZW4pIHsKKwkJCSh2b2lkKSAoKmZwLT5fY2xvc2UpKGZwLT5fY29va2llKTsKKwkJCWlzb3BlbiA9IDA7CisJCX0KKwl9CisKKwkvKiBHZXQgYSBuZXcgZGVzY3JpcHRvciB0byByZWZlciB0byB0aGUgbmV3IGZpbGUuICovCisJZiA9IG9wZW4oZmlsZSwgb2ZsYWdzLCBERUZGSUxFTU9ERSk7CisJaWYgKGYgPCAwICYmIGlzb3BlbikgeworCQkvKiBJZiBvdXQgb2YgZmQncyBjbG9zZSB0aGUgb2xkIG9uZSBhbmQgdHJ5IGFnYWluLiAqLworCQlpZiAoZXJybm8gPT0gRU5GSUxFIHx8IGVycm5vID09IEVNRklMRSkgeworCQkJKHZvaWQpICgqZnAtPl9jbG9zZSkoZnAtPl9jb29raWUpOworCQkJaXNvcGVuID0gMDsKKwkJCWYgPSBvcGVuKGZpbGUsIG9mbGFncywgREVGRklMRU1PREUpOworCQl9CisJfQorCXN2ZXJybm8gPSBlcnJubzsKKworCS8qCisJICogRmluaXNoIGNsb3NpbmcgZnAuICBFdmVuIGlmIHRoZSBvcGVuIHN1Y2NlZWRlZCBhYm92ZSwgd2UgY2Fubm90CisJICoga2VlcCBmcC0+X2Jhc2U6IGl0IG1heSBiZSB0aGUgd3Jvbmcgc2l6ZS4gIFRoaXMgbG9zZXMgdGhlIGVmZmVjdAorCSAqIG9mIGFueSBzZXRidWZmZXIgY2FsbHMsIGJ1dCBzdGRpbyBoYXMgYWx3YXlzIGRvbmUgdGhpcyBiZWZvcmUuCisJICovCisJaWYgKGlzb3BlbiAmJiBmICE9IHdhbnRmZCkKKwkJKHZvaWQpICgqZnAtPl9jbG9zZSkoZnAtPl9jb29raWUpOworCWlmIChmcC0+X2ZsYWdzICYgX19TTUJGKQorCQlmcmVlKChjaGFyICopZnAtPl9iZi5fYmFzZSk7CisJZnAtPl93ID0gMDsKKwlmcC0+X3IgPSAwOworCWZwLT5fcCA9IE5VTEw7CisJZnAtPl9iZi5fYmFzZSA9IE5VTEw7CisJZnAtPl9iZi5fc2l6ZSA9IDA7CisJZnAtPl9sYmZzaXplID0gMDsKKwlpZiAoSEFTVUIoZnApKQorCQlGUkVFVUIoZnApOworCV9VQihmcCkuX3NpemUgPSAwOworCVdDSU9fRlJFRShmcCk7CisJaWYgKEhBU0xCKGZwKSkKKwkJRlJFRUxCKGZwKTsKKwlmcC0+X2xiLl9zaXplID0gMDsKKworCWlmIChmIDwgMCkgewkJCS8qIGRpZCBub3QgZ2V0IGl0IGFmdGVyIGFsbCAqLworCQlmcC0+X2ZsYWdzID0gMDsJCS8qIHNldCBpdCBmcmVlICovCisJCUZVTkxPQ0tGSUxFKGZwKTsKKwkJZXJybm8gPSBzdmVycm5vOwkvKiByZXN0b3JlIGluIGNhc2UgX2Nsb3NlIGNsb2JiZXJlZCAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCS8qCisJICogSWYgcmVvcGVuaW5nIHNvbWV0aGluZyB0aGF0IHdhcyBvcGVuIGJlZm9yZSBvbiBhIHJlYWwgZmlsZSwgdHJ5CisJICogdG8gbWFpbnRhaW4gdGhlIGRlc2NyaXB0b3IuICBWYXJpb3VzIEMgbGlicmFyeSByb3V0aW5lcyAocGVycm9yKQorCSAqIGFzc3VtZSBzdGRlcnIgaXMgYWx3YXlzIGZkIFNUREVSUl9GSUxFTk8sIGV2ZW4gaWYgYmVpbmcgZnJlb3BlbidkLgorCSAqLworCWlmICh3YW50ZmQgPj0gMCAmJiBmICE9IHdhbnRmZCkgeworCQlpZiAoZHVwMihmLCB3YW50ZmQpID49IDApIHsKKwkJCSh2b2lkKSBjbG9zZShmKTsKKwkJCWYgPSB3YW50ZmQ7CisJCX0KKwl9CisKKwkvKiBfZmlsZSBpcyBvbmx5IGEgc2hvcnQgKi8KKwlpZiAoZiA+IFNIUlRfTUFYKSB7CisJCWZwLT5fZmxhZ3MgPSAwOwkJLyogc2V0IGl0IGZyZWUgKi8KKwkJRlVOTE9DS0ZJTEUoZnApOworCQllcnJubyA9IEVNRklMRTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlmcC0+X2ZsYWdzID0gZmxhZ3M7CisJZnAtPl9maWxlID0gZjsKKwlmcC0+X2Nvb2tpZSA9IGZwOworCWZwLT5fcmVhZCA9IF9fc3JlYWQ7CisJZnAtPl93cml0ZSA9IF9fc3dyaXRlOworCWZwLT5fc2VlayA9IF9fc3NlZWs7CisJZnAtPl9jbG9zZSA9IF9fc2Nsb3NlOworCisJLyoKKwkgKiBXaGVuIG9wZW5pbmcgaW4gYXBwZW5kIG1vZGUsIGV2ZW4gdGhvdWdoIHdlIHVzZSBPX0FQUEVORCwKKwkgKiB3ZSBuZWVkIHRvIHNlZWsgdG8gdGhlIGVuZCBzbyB0aGF0IGZ0ZWxsKCkgZ2V0cyB0aGUgcmlnaHQKKwkgKiBhbnN3ZXIuICBJZiB0aGUgdXNlciB0aGVuIGFsdGVycyB0aGUgc2VlayBwb2ludGVyLCBvcgorCSAqIHRoZSBmaWxlIGV4dGVuZHMsIHRoaXMgd2lsbCBmYWlsLCBidXQgdGhlcmUgaXMgbm90IG11Y2gKKwkgKiB3ZSBjYW4gZG8gYWJvdXQgdGhpcy4gIChXZSBjb3VsZCBzZXQgX19TQVBQIGFuZCBjaGVjayBpbgorCSAqIGZzZWVrIGFuZCBmdGVsbC4pCisJICovCisJaWYgKG9mbGFncyAmIE9fQVBQRU5EKQorCQkodm9pZCkgX19zc2Vlaygodm9pZCAqKWZwLCAoZnBvc190KTAsIFNFRUtfRU5EKTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChmcCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnNjYW5mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnNjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkMTBkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mc2NhbmYuYwpAQCAtMCwwICsxLDQ4IEBACisvKgkkT3BlbkJTRDogZnNjYW5mLmMsdiAxLjEwIDIwMTEvMDUvMzAgMTg6NDg6MzMgbWFydHluYXMgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qIFNDQU5GTElLRTIgKi8KK2ludAorZnNjYW5mKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZnNjYW5mKGZwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mc2Vlay5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZWVrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkNDBiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mc2Vlay5jCkBAIC0wLDAgKzEsMjUxIEBACisvKgkkT3BlbkJTRDogZnNlZWsuYyx2IDEuMTEgMjAxMi8wNS8yMSAyMjoyNDoxOSBtYXR0aGV3IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKyNkZWZpbmUJUE9TX0VSUgkoLShmcG9zX3QpMSkKKworLyoKKyAqIFNlZWsgdGhlIGdpdmVuIGZpbGUgdG8gdGhlIGdpdmVuIG9mZnNldC4KKyAqIGBXaGVuY2UnIG11c3QgYmUgb25lIG9mIHRoZSB0aHJlZSBTRUVLXyogbWFjcm9zLgorICovCitpbnQKK2ZzZWVrbyhGSUxFICpmcCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQoreworCWZwb3NfdCAoKnNlZWtmbikodm9pZCAqLCBmcG9zX3QsIGludCk7CisJZnBvc190IHRhcmdldCwgY3Vyb2ZmOworCXNpemVfdCBuOworCXN0cnVjdCBzdGF0IHN0OworCWludCBoYXZlcG9zOworCisJLyogbWFrZSBzdXJlIHN0ZGlvIGlzIHNldCB1cCAqLworCWlmICghX19zZGlkaW5pdCkKKwkJX19zaW5pdCgpOworCisJLyoKKwkgKiBIYXZlIHRvIGJlIGFibGUgdG8gc2Vlay4KKwkgKi8KKwlpZiAoKHNlZWtmbiA9IGZwLT5fc2VlaykgPT0gTlVMTCkgeworCQllcnJubyA9IEVTUElQRTsJCQkvKiBoaXN0b3JpYyBwcmFjdGljZSAqLworCQlyZXR1cm4gKEVPRik7CisJfQorCisJLyoKKwkgKiBDaGFuZ2UgYW55IFNFRUtfQ1VSIHRvIFNFRUtfU0VULCBhbmQgY2hlY2sgYHdoZW5jZScgYXJndW1lbnQuCisJICogQWZ0ZXIgdGhpcywgd2hlbmNlIGlzIGVpdGhlciBTRUVLX1NFVCBvciBTRUVLX0VORC4KKwkgKi8KKwlGTE9DS0ZJTEUoZnApOworCXN3aXRjaCAod2hlbmNlKSB7CisKKwljYXNlIFNFRUtfQ1VSOgorCQkvKgorCQkgKiBJbiBvcmRlciB0byBzZWVrIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHN0cmVhbSBvZmZzZXQsCisJCSAqIHdlIGhhdmUgdG8gZmlyc3QgZmluZCB0aGUgY3VycmVudCBzdHJlYW0gb2Zmc2V0IGEgbGEKKwkJICogZnRlbGwgKHNlZSBmdGVsbCBmb3IgZGV0YWlscykuCisJCSAqLworCQlfX3NmbHVzaChmcCk7CS8qIG1heSBhZGp1c3Qgc2VlayBvZmZzZXQgb24gYXBwZW5kIHN0cmVhbSAqLworCQlpZiAoZnAtPl9mbGFncyAmIF9fU09GRikKKwkJCWN1cm9mZiA9IGZwLT5fb2Zmc2V0OworCQllbHNlIHsKKwkJCWN1cm9mZiA9ICgqc2Vla2ZuKShmcC0+X2Nvb2tpZSwgKGZwb3NfdCkwLCBTRUVLX0NVUik7CisJCQlpZiAoY3Vyb2ZmID09IChmcG9zX3QpLTEpIHsKKwkJCQlGVU5MT0NLRklMRShmcCk7CisJCQkJcmV0dXJuIChFT0YpOworCQkJfQorCQl9CisJCWlmIChmcC0+X2ZsYWdzICYgX19TUkQpIHsKKwkJCWN1cm9mZiAtPSBmcC0+X3I7CisJCQlpZiAoSEFTVUIoZnApKQorCQkJCWN1cm9mZiAtPSBmcC0+X3VyOworCQl9IGVsc2UgaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUiAmJiBmcC0+X3AgIT0gTlVMTCkKKwkJCWN1cm9mZiArPSBmcC0+X3AgLSBmcC0+X2JmLl9iYXNlOworCisJCW9mZnNldCArPSBjdXJvZmY7CisJCXdoZW5jZSA9IFNFRUtfU0VUOworCQloYXZlcG9zID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIFNFRUtfU0VUOgorCWNhc2UgU0VFS19FTkQ6CisJCWN1cm9mZiA9IDA7CQkvKiBYWFgganVzdCB0byBrZWVwIGdjYyBxdWlldCAqLworCQloYXZlcG9zID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlGVU5MT0NLRklMRShmcCk7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKEVPRik7CisJfQorCisJLyoKKwkgKiBDYW4gb25seSBvcHRpbWlzZSBpZjoKKwkgKglyZWFkaW5nIChhbmQgbm90IHJlYWRpbmctYW5kLXdyaXRpbmcpOworCSAqCW5vdCB1bmJ1ZmZlcmVkOyBhbmQKKwkgKgl0aGlzIGlzIGEgYHJlZ3VsYXInIFVuaXggZmlsZSAoYW5kIGhlbmNlIHNlZWtmbj09X19zc2VlaykuCisJICogV2UgbXVzdCBjaGVjayBfX05CRiBmaXJzdCwgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIF9fTkJGCisJICogYW5kIF9fU09QVCBib3RoIHNldC4KKwkgKi8KKwlpZiAoZnAtPl9iZi5fYmFzZSA9PSBOVUxMKQorCQlfX3NtYWtlYnVmKGZwKTsKKwlpZiAoZnAtPl9mbGFncyAmIChfX1NXUiB8IF9fU1JXIHwgX19TTkJGIHwgX19TTlBUKSkKKwkJZ290byBkdW1iOworCWlmICgoZnAtPl9mbGFncyAmIF9fU09QVCkgPT0gMCkgeworCQlpZiAoc2Vla2ZuICE9IF9fc3NlZWsgfHwKKwkJICAgIGZwLT5fZmlsZSA8IDAgfHwgZnN0YXQoZnAtPl9maWxlLCAmc3QpIHx8CisJCSAgICAoc3Quc3RfbW9kZSAmIFNfSUZNVCkgIT0gU19JRlJFRykgeworCQkJZnAtPl9mbGFncyB8PSBfX1NOUFQ7CisJCQlnb3RvIGR1bWI7CisJCX0KKwkJZnAtPl9ibGtzaXplID0gc3Quc3RfYmxrc2l6ZTsKKwkJZnAtPl9mbGFncyB8PSBfX1NPUFQ7CisJfQorCisJLyoKKwkgKiBXZSBhcmUgcmVhZGluZzsgd2UgY2FuIHRyeSB0byBvcHRpbWlzZS4KKwkgKiBGaWd1cmUgb3V0IHdoZXJlIHdlIGFyZSBnb2luZyBhbmQgd2hlcmUgd2UgYXJlIG5vdy4KKwkgKi8KKwlpZiAod2hlbmNlID09IFNFRUtfU0VUKQorCQl0YXJnZXQgPSBvZmZzZXQ7CisJZWxzZSB7CisJCWlmIChmc3RhdChmcC0+X2ZpbGUsICZzdCkpCisJCQlnb3RvIGR1bWI7CisJCXRhcmdldCA9IHN0LnN0X3NpemUgKyBvZmZzZXQ7CisJfQorCisJaWYgKCFoYXZlcG9zKSB7CisJCWlmIChmcC0+X2ZsYWdzICYgX19TT0ZGKQorCQkJY3Vyb2ZmID0gZnAtPl9vZmZzZXQ7CisJCWVsc2UgeworCQkJY3Vyb2ZmID0gKCpzZWVrZm4pKGZwLT5fY29va2llLCAoZnBvc190KTAsIFNFRUtfQ1VSKTsKKwkJCWlmIChjdXJvZmYgPT0gUE9TX0VSUikKKwkJCQlnb3RvIGR1bWI7CisJCX0KKwkJY3Vyb2ZmIC09IGZwLT5fcjsKKwkJaWYgKEhBU1VCKGZwKSkKKwkJCWN1cm9mZiAtPSBmcC0+X3VyOworCX0KKworCS8qCisJICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIgKHByZXRlbmRpbmcKKwkgKiB0aGF0IGFueSB1bmdldGMoKSBpbnB1dCBoYXMgYmVlbiBkaXNjYXJkZWQpLiAgQWRqdXN0IGN1cnJlbnQKKwkgKiBvZmZzZXQgYmFja3dhcmRzIGJ5IHRoaXMgY291bnQgc28gdGhhdCBpdCByZXByZXNlbnRzIHRoZQorCSAqIGZpbGUgb2Zmc2V0IGZvciB0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgY3VycmVudCBpbnB1dCBidWZmZXIuCisJICovCisJaWYgKEhBU1VCKGZwKSkgeworCQljdXJvZmYgKz0gZnAtPl9yOwkvKiBraWxsIG9mZiB1bmdldGMgKi8KKwkJbiA9IGZwLT5fdXAgLSBmcC0+X2JmLl9iYXNlOworCQljdXJvZmYgLT0gbjsKKwkJbiArPSBmcC0+X3VyOworCX0gZWxzZSB7CisJCW4gPSBmcC0+X3AgLSBmcC0+X2JmLl9iYXNlOworCQljdXJvZmYgLT0gbjsKKwkJbiArPSBmcC0+X3I7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgdGFyZ2V0IG9mZnNldCBpcyB3aXRoaW4gdGhlIGN1cnJlbnQgYnVmZmVyLAorCSAqIHNpbXBseSBhZGp1c3QgdGhlIHBvaW50ZXJzLCBjbGVhciBFT0YsIHVuZG8gdW5nZXRjKCksCisJICogYW5kIHJldHVybi4gIChJZiB0aGUgYnVmZmVyIHdhcyBtb2RpZmllZCwgd2UgaGF2ZSB0bworCSAqIHNraXAgdGhpczsgc2VlIGZnZXRsbi5jLikKKwkgKi8KKwlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NNT0QpID09IDAgJiYKKwkgICAgdGFyZ2V0ID49IGN1cm9mZiAmJiB0YXJnZXQgPCBjdXJvZmYgKyBuKSB7CisJCWludCBvID0gdGFyZ2V0IC0gY3Vyb2ZmOworCisJCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2UgKyBvOworCQlmcC0+X3IgPSBuIC0gbzsKKwkJaWYgKEhBU1VCKGZwKSkKKwkJCUZSRUVVQihmcCk7CisJCWZwLT5fZmxhZ3MgJj0gfl9fU0VPRjsKKwkJRlVOTE9DS0ZJTEUoZnApOworCQlyZXR1cm4gKDApOworCX0KKworCS8qCisJICogVGhlIHBsYWNlIHdlIHdhbnQgdG8gZ2V0IHRvIGlzIG5vdCB3aXRoaW4gdGhlIGN1cnJlbnQgYnVmZmVyLAorCSAqIGJ1dCB3ZSBjYW4gc3RpbGwgYmUga2luZCB0byB0aGUga2VybmVsIGNvcHlvdXQgbWVjaGFuaXNtLgorCSAqIEJ5IGFsaWduaW5nIHRoZSBmaWxlIG9mZnNldCB0byBhIGJsb2NrIGJvdW5kYXJ5LCB3ZSBjYW4gbGV0CisJICogdGhlIGtlcm5lbCB1c2UgdGhlIFZNIGhhcmR3YXJlIHRvIG1hcCBwYWdlcyBpbnN0ZWFkIG9mCisJICogY29weWluZyBieXRlcyBsYWJvcmlvdXNseS4gIFVzaW5nIGEgYmxvY2sgYm91bmRhcnkgYWxzbworCSAqIGVuc3VyZXMgdGhhdCB3ZSBvbmx5IHJlYWQgb25lIGJsb2NrLCByYXRoZXIgdGhhbiB0d28uCisJICovCisJY3Vyb2ZmID0gdGFyZ2V0ICYgfihmcC0+X2Jsa3NpemUgLSAxKTsKKwlpZiAoKCpzZWVrZm4pKGZwLT5fY29va2llLCBjdXJvZmYsIFNFRUtfU0VUKSA9PSBQT1NfRVJSKQorCQlnb3RvIGR1bWI7CisJZnAtPl9yID0gMDsKKyAJZnAtPl9wID0gZnAtPl9iZi5fYmFzZTsKKwlpZiAoSEFTVUIoZnApKQorCQlGUkVFVUIoZnApOworCWZwLT5fZmxhZ3MgJj0gfl9fU0VPRjsKKwluID0gdGFyZ2V0IC0gY3Vyb2ZmOworCWlmIChuKSB7CisJCWlmIChfX3NyZWZpbGwoZnApIHx8IGZwLT5fciA8IG4pCisJCQlnb3RvIGR1bWI7CisJCWZwLT5fcCArPSBuOworCQlmcC0+X3IgLT0gbjsKKwl9CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAoMCk7CisKKwkvKgorCSAqIFdlIGdldCBoZXJlIGlmIHdlIGNhbm5vdCBvcHRpbWlzZSB0aGUgc2VlayAuLi4ganVzdAorCSAqIGRvIGl0LiAgQWxsb3cgdGhlIHNlZWsgZnVuY3Rpb24gdG8gY2hhbmdlIGZwLT5fYmYuX2Jhc2UuCisJICovCitkdW1iOgorCWlmIChfX3NmbHVzaChmcCkgfHwKKwkgICAgKCpzZWVrZm4pKGZwLT5fY29va2llLCAoZnBvc190KW9mZnNldCwgd2hlbmNlKSA9PSBQT1NfRVJSKSB7CisJCUZVTkxPQ0tGSUxFKGZwKTsKKwkJcmV0dXJuIChFT0YpOworCX0KKwkvKiBzdWNjZXNzOiBjbGVhciBFT0YgaW5kaWNhdG9yIGFuZCBkaXNjYXJkIHVuZ2V0YygpIGRhdGEgKi8KKwlpZiAoSEFTVUIoZnApKQorCQlGUkVFVUIoZnApOworCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2U7CisJZnAtPl9yID0gMDsKKwkvKiBmcC0+X3cgPSAwOyAqLwkvKiB1bm5lY2Vzc2FyeSAoSSB0aGluay4uLikgKi8KKwlmcC0+X2ZsYWdzICY9IH5fX1NFT0Y7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAoMCk7Cit9CisKK2ludAorZnNlZWsoRklMRSAqZnAsIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKQoreworCXJldHVybiAoZnNlZWtvKGZwLCBvZmZzZXQsIHdoZW5jZSkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZXRwb3MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mc2V0cG9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyNGZlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mc2V0cG9zLmMKQEAgLTAsMCArMSw0MyBAQAorLyoJJE9wZW5CU0Q6IGZzZXRwb3MuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKgorICogZnNldHBvczogbGlrZSBmc2Vla28uCisgKi8KK2ludAorZnNldHBvcyhGSUxFICppb3AsIGNvbnN0IGZwb3NfdCAqcG9zKQoreworCXJldHVybiAoZnNlZWtvKGlvcCwgKG9mZl90KSpwb3MsIFNFRUtfU0VUKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnRlbGwuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mdGVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMjAxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnRlbGwuYwpAQCAtMCwwICsxLDk2IEBACisvKgkkT3BlbkJTRDogZnRlbGwuYyx2IDEuMTAgMjAxMi8wNS8yMSAyMjoyNDoxOSBtYXR0aGV3IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIGZ0ZWxsbzogcmV0dXJuIGN1cnJlbnQgb2Zmc2V0LgorICovCitvZmZfdAorZnRlbGxvKEZJTEUgKmZwKQoreworCWZwb3NfdCBwb3M7CisKKwlpZiAoZnAtPl9zZWVrID09IE5VTEwpIHsKKwkJZXJybm8gPSBFU1BJUEU7CQkJLyogaGlzdG9yaWMgcHJhY3RpY2UgKi8KKwkJcG9zID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogRmluZCBvZmZzZXQgb2YgdW5kZXJseWluZyBJL08gb2JqZWN0LCB0aGVuCisJICogYWRqdXN0IGZvciBidWZmZXJlZCBieXRlcy4KKwkgKi8KKwlGTE9DS0ZJTEUoZnApOworCV9fc2ZsdXNoKGZwKTsJCS8qIG1heSBhZGp1c3Qgc2VlayBvZmZzZXQgb24gYXBwZW5kIHN0cmVhbSAqLworCWlmIChmcC0+X2ZsYWdzICYgX19TT0ZGKQorCQlwb3MgPSBmcC0+X29mZnNldDsKKwllbHNlIHsKKwkJcG9zID0gKCpmcC0+X3NlZWspKGZwLT5fY29va2llLCAoZnBvc190KTAsIFNFRUtfQ1VSKTsKKwkJaWYgKHBvcyA9PSAtMSkKKwkJCWdvdG8gb3V0OworCX0KKwlpZiAoZnAtPl9mbGFncyAmIF9fU1JEKSB7CisJCS8qCisJCSAqIFJlYWRpbmcuICBBbnkgdW5yZWFkIGNoYXJhY3RlcnMgKGluY2x1ZGluZworCQkgKiB0aG9zZSBmcm9tIHVuZ2V0YykgY2F1c2UgdGhlIHBvc2l0aW9uIHRvIGJlCisJCSAqIHNtYWxsZXIgdGhhbiB0aGF0IGluIHRoZSB1bmRlcmx5aW5nIG9iamVjdC4KKwkJICovCisJCXBvcyAtPSBmcC0+X3I7CisJCWlmIChIQVNVQihmcCkpCisJCQlwb3MgLT0gZnAtPl91cjsKKwl9IGVsc2UgaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUiAmJiBmcC0+X3AgIT0gTlVMTCkgeworCQkvKgorCQkgKiBXcml0aW5nLiAgQW55IGJ1ZmZlcmVkIGNoYXJhY3RlcnMgY2F1c2UgdGhlCisJCSAqIHBvc2l0aW9uIHRvIGJlIGdyZWF0ZXIgdGhhbiB0aGF0IGluIHRoZQorCQkgKiB1bmRlcmx5aW5nIG9iamVjdC4KKwkJICovCisJCXBvcyArPSBmcC0+X3AgLSBmcC0+X2JmLl9iYXNlOworCX0KK291dDoJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocG9zKTsKK30KKworbG9uZworZnRlbGwoRklMRSAqZnApCit7CisJb2ZmX3Qgb2Zmc2V0ID0gZnRlbGxvKGZwKTsKKwlpZiAob2Zmc2V0ID4gTE9OR19NQVgpIHsKKwkJZXJybm8gPSBFT1ZFUkZMT1c7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKChsb25nKW9mZnNldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnVub3Blbi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z1bm9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODVlZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z1bm9wZW4uYwpAQCAtMCwwICsxLDY4IEBACisvKgkkT3BlbkJTRDogZnVub3Blbi5jLHYgMS44IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitGSUxFICoKK2Z1bm9wZW4oY29uc3Qgdm9pZCAqY29va2llLCBpbnQgKCpyZWFkZm4pKHZvaWQgKiwgY2hhciAqLCBpbnQpLAorCWludCAoKndyaXRlZm4pKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQpLAorCWZwb3NfdCAoKnNlZWtmbikodm9pZCAqLCBmcG9zX3QsIGludCksIGludCAoKmNsb3NlZm4pKHZvaWQgKikpCit7CisJRklMRSAqZnA7CisJaW50IGZsYWdzOworCisJaWYgKHJlYWRmbiA9PSBOVUxMKSB7CisJCWlmICh3cml0ZWZuID09IE5VTEwpIHsJCS8qIGlsbGVnYWwgKi8KKwkJCWVycm5vID0gRUlOVkFMOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfSBlbHNlCisJCQlmbGFncyA9IF9fU1dSOwkJLyogd3JpdGUgb25seSAqLworCX0gZWxzZSB7CisJCWlmICh3cml0ZWZuID09IE5VTEwpCisJCQlmbGFncyA9IF9fU1JEOwkJLyogcmVhZCBvbmx5ICovCisJCWVsc2UKKwkJCWZsYWdzID0gX19TUlc7CQkvKiByZWFkLXdyaXRlICovCisJfQorCWlmICgoZnAgPSBfX3NmcCgpKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWZwLT5fZmxhZ3MgPSBmbGFnczsKKwlmcC0+X2ZpbGUgPSAtMTsKKwlmcC0+X2Nvb2tpZSA9ICh2b2lkICopY29va2llOwkJLyogU0FGRTogY29va2llIG5vdCBtb2RpZmllZCAqLworCWZwLT5fcmVhZCA9IHJlYWRmbjsKKwlmcC0+X3dyaXRlID0gd3JpdGVmbjsKKwlmcC0+X3NlZWsgPSBzZWVrZm47CisJZnAtPl9jbG9zZSA9IGNsb3NlZm47CisJcmV0dXJuIChmcCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZnZ3cml0ZS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z2d3JpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDg4OTkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z2d3JpdGUuYwpAQCAtMCwwICsxLDIwNCBAQAorLyoJJE9wZW5CU0Q6IGZ2d3JpdGUuYyx2IDEuMTcgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJmdndyaXRlLmgiCisKKy8qCisgKiBXcml0ZSBzb21lIG1lbW9yeSByZWdpb25zLiAgUmV0dXJuIHplcm8gb24gc3VjY2VzcywgRU9GIG9uIGVycm9yLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBsYXJnZSBhbmQgdW5zaWdodGx5LCBidXQgbW9zdCBvZiB0aGUgdWdsaW5lc3MgZHVlCisgKiB0byB0aGUgdGhyZWUgZGlmZmVyZW50IGtpbmRzIG9mIG91dHB1dCBidWZmZXJpbmcgaXMgaGFuZGxlZCBoZXJlLgorICovCitpbnQKK19fc2Z2d3JpdGUoRklMRSAqZnAsIHN0cnVjdCBfX3N1aW8gKnVpbykKK3sKKwlzaXplX3QgbGVuOworCWNoYXIgKnA7CisJc3RydWN0IF9fc2lvdiAqaW92OworCWludCB3LCBzOworCWNoYXIgKm5sOworCWludCBubGtub3duLCBubGRpc3Q7CisKKwlpZiAoKGxlbiA9IHVpby0+dWlvX3Jlc2lkKSA9PSAwKQorCQlyZXR1cm4gKDApOworCS8qIG1ha2Ugc3VyZSB3ZSBjYW4gd3JpdGUgKi8KKwlpZiAoY2FudHdyaXRlKGZwKSkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKEVPRik7CisJfQorCisjZGVmaW5lCU1JTihhLCBiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorI2RlZmluZQlDT1BZKG4pCSAgKHZvaWQpbWVtY3B5KCh2b2lkICopZnAtPl9wLCAodm9pZCAqKXAsIChzaXplX3QpKG4pKQorCisJaW92ID0gdWlvLT51aW9faW92OworCXAgPSBpb3YtPmlvdl9iYXNlOworCWxlbiA9IGlvdi0+aW92X2xlbjsKKwlpb3YrKzsKKyNkZWZpbmUgR0VUSU9WKGV4dHJhX3dvcmspIFwKKwl3aGlsZSAobGVuID09IDApIHsgXAorCQlleHRyYV93b3JrOyBcCisJCXAgPSBpb3YtPmlvdl9iYXNlOyBcCisJCWxlbiA9IGlvdi0+aW92X2xlbjsgXAorCQlpb3YrKzsgXAorCX0KKwlpZiAoZnAtPl9mbGFncyAmIF9fU05CRikgeworCQkvKgorCQkgKiBVbmJ1ZmZlcmVkOiB3cml0ZSB1cCB0byBCVUZTSVogYnl0ZXMgYXQgYSB0aW1lLgorCQkgKi8KKwkJZG8geworCQkJR0VUSU9WKDspOworCQkJdyA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIHAsIE1JTihsZW4sIEJVRlNJWikpOworCQkJaWYgKHcgPD0gMCkKKwkJCQlnb3RvIGVycjsKKwkJCXAgKz0gdzsKKwkJCWxlbiAtPSB3OworCQl9IHdoaWxlICgodWlvLT51aW9fcmVzaWQgLT0gdykgIT0gMCk7CisJfSBlbHNlIGlmICgoZnAtPl9mbGFncyAmIF9fU0xCRikgPT0gMCkgeworCQkvKgorCQkgKiBGdWxseSBidWZmZXJlZDogZmlsbCBwYXJ0aWFsbHkgZnVsbCBidWZmZXIsIGlmIGFueSwKKwkJICogYW5kIHRoZW4gZmx1c2guICBJZiB0aGVyZSBpcyBubyBwYXJ0aWFsIGJ1ZmZlciwgd3JpdGUKKwkJICogb25lIF9iZi5fc2l6ZSBieXRlIGNodW5rIGRpcmVjdGx5ICh3aXRob3V0IGNvcHlpbmcpLgorCQkgKgorCQkgKiBTdHJpbmcgb3V0cHV0IGlzIGEgc3BlY2lhbCBjYXNlOiB3cml0ZSBhcyBtYW55IGJ5dGVzCisJCSAqIGFzIGZpdCwgYnV0IHByZXRlbmQgd2Ugd3JvdGUgZXZlcnl0aGluZy4gIFRoaXMgbWFrZXMKKwkJICogc25wcmludGYoKSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQsIHJhdGhlcgorCQkgKiB0aGFuIHRoZSBudW1iZXIgdXNlZCwgYW5kIGF2b2lkcyBpdHMgd3JpdGUgZnVuY3Rpb24KKwkJICogKHNvIHRoYXQgdGhlIHdyaXRlIGZ1bmN0aW9uIGNhbiBiZSBpbnZhbGlkKS4KKwkJICovCisJCWRvIHsKKwkJCUdFVElPVig7KTsKKwkJCWlmICgoZnAtPl9mbGFncyAmIChfX1NBTEMgfCBfX1NTVFIpKSA9PQorCQkJICAgIChfX1NBTEMgfCBfX1NTVFIpICYmIGZwLT5fdyA8IGxlbikgeworCQkJCXNpemVfdCBibGVuID0gZnAtPl9wIC0gZnAtPl9iZi5fYmFzZTsKKwkJCQl1bnNpZ25lZCBjaGFyICpfYmFzZTsKKwkJCQlpbnQgX3NpemU7CisKKwkJCQkvKiBBbGxvY2F0ZSBzcGFjZSBleHBvbmVudGlhbGx5LiAqLworCQkJCV9zaXplID0gZnAtPl9iZi5fc2l6ZTsKKwkJCQlkbyB7CisJCQkJCV9zaXplID0gKF9zaXplIDw8IDEpICsgMTsKKwkJCQl9IHdoaWxlIChfc2l6ZSA8IGJsZW4gKyBsZW4pOworCQkJCV9iYXNlID0gcmVhbGxvYyhmcC0+X2JmLl9iYXNlLCBfc2l6ZSArIDEpOworCQkJCWlmIChfYmFzZSA9PSBOVUxMKQorCQkJCQlnb3RvIGVycjsKKwkJCQlmcC0+X3cgKz0gX3NpemUgLSBmcC0+X2JmLl9zaXplOworCQkJCWZwLT5fYmYuX2Jhc2UgPSBfYmFzZTsKKwkJCQlmcC0+X2JmLl9zaXplID0gX3NpemU7CisJCQkJZnAtPl9wID0gX2Jhc2UgKyBibGVuOworCQkJfQorCQkJdyA9IGZwLT5fdzsKKwkJCWlmIChmcC0+X2ZsYWdzICYgX19TU1RSKSB7CisJCQkJaWYgKGxlbiA8IHcpCisJCQkJCXcgPSBsZW47CisJCQkJQ09QWSh3KTsJLyogY29weSBNSU4oZnAtPl93LGxlbiksICovCisJCQkJZnAtPl93IC09IHc7CisJCQkJZnAtPl9wICs9IHc7CisJCQkJdyA9IGxlbjsJLyogYnV0IHByZXRlbmQgY29waWVkIGFsbCAqLworCQkJfSBlbHNlIGlmIChmcC0+X3AgPiBmcC0+X2JmLl9iYXNlICYmIGxlbiA+IHcpIHsKKwkJCQkvKiBmaWxsIGFuZCBmbHVzaCAqLworCQkJCUNPUFkodyk7CisJCQkJLyogZnAtPl93IC09IHc7ICovIC8qIHVubmVlZGVkICovCisJCQkJZnAtPl9wICs9IHc7CisJCQkJaWYgKF9fc2ZsdXNoKGZwKSkKKwkJCQkJZ290byBlcnI7CisJCQl9IGVsc2UgaWYgKGxlbiA+PSAodyA9IGZwLT5fYmYuX3NpemUpKSB7CisJCQkJLyogd3JpdGUgZGlyZWN0bHkgKi8KKwkJCQl3ID0gKCpmcC0+X3dyaXRlKShmcC0+X2Nvb2tpZSwgcCwgdyk7CisJCQkJaWYgKHcgPD0gMCkKKwkJCQkJZ290byBlcnI7CisJCQl9IGVsc2UgeworCQkJCS8qIGZpbGwgYW5kIGRvbmUgKi8KKwkJCQl3ID0gbGVuOworCQkJCUNPUFkodyk7CisJCQkJZnAtPl93IC09IHc7CisJCQkJZnAtPl9wICs9IHc7CisJCQl9CisJCQlwICs9IHc7CisJCQlsZW4gLT0gdzsKKwkJfSB3aGlsZSAoKHVpby0+dWlvX3Jlc2lkIC09IHcpICE9IDApOworCX0gZWxzZSB7CisJCS8qCisJCSAqIExpbmUgYnVmZmVyZWQ6IGxpa2UgZnVsbHkgYnVmZmVyZWQsIGJ1dCB3ZQorCQkgKiBtdXN0IGNoZWNrIGZvciBuZXdsaW5lcy4gIENvbXB1dGUgdGhlIGRpc3RhbmNlCisJCSAqIHRvIHRoZSBmaXJzdCBuZXdsaW5lIChpbmNsdWRpbmcgdGhlIG5ld2xpbmUpLAorCQkgKiBvciBgaW5maW5pdHknIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gcHJldGVuZAorCQkgKiB0aGF0IHRoZSBhbW91bnQgdG8gd3JpdGUgaXMgTUlOKGxlbixubGRpc3QpLgorCQkgKi8KKwkJbmxrbm93biA9IDA7CisJCW5sZGlzdCA9IDA7CS8qIFhYWCBqdXN0IHRvIGtlZXAgZ2NjIGhhcHB5ICovCisJCWRvIHsKKwkJCUdFVElPVihubGtub3duID0gMCk7CisJCQlpZiAoIW5sa25vd24pIHsKKwkJCQlubCA9IG1lbWNocigodm9pZCAqKXAsICdcbicsIGxlbik7CisJCQkJbmxkaXN0ID0gbmwgPyBubCArIDEgLSBwIDogbGVuICsgMTsKKwkJCQlubGtub3duID0gMTsKKwkJCX0KKwkJCXMgPSBNSU4obGVuLCBubGRpc3QpOworCQkJdyA9IGZwLT5fdyArIGZwLT5fYmYuX3NpemU7CisJCQlpZiAoZnAtPl9wID4gZnAtPl9iZi5fYmFzZSAmJiBzID4gdykgeworCQkJCUNPUFkodyk7CisJCQkJLyogZnAtPl93IC09IHc7ICovCisJCQkJZnAtPl9wICs9IHc7CisJCQkJaWYgKF9fc2ZsdXNoKGZwKSkKKwkJCQkJZ290byBlcnI7CisJCQl9IGVsc2UgaWYgKHMgPj0gKHcgPSBmcC0+X2JmLl9zaXplKSkgeworCQkJCXcgPSAoKmZwLT5fd3JpdGUpKGZwLT5fY29va2llLCBwLCB3KTsKKwkJCQlpZiAodyA8PSAwKQorCQkJCSAJZ290byBlcnI7CisJCQl9IGVsc2UgeworCQkJCXcgPSBzOworCQkJCUNPUFkodyk7CisJCQkJZnAtPl93IC09IHc7CisJCQkJZnAtPl9wICs9IHc7CisJCQl9CisJCQlpZiAoKG5sZGlzdCAtPSB3KSA9PSAwKSB7CisJCQkJLyogY29waWVkIHRoZSBuZXdsaW5lOiBmbHVzaCBhbmQgZm9yZ2V0ICovCisJCQkJaWYgKF9fc2ZsdXNoKGZwKSkKKwkJCQkJZ290byBlcnI7CisJCQkJbmxrbm93biA9IDA7CisJCQl9CisJCQlwICs9IHc7CisJCQlsZW4gLT0gdzsKKwkJfSB3aGlsZSAoKHVpby0+dWlvX3Jlc2lkIC09IHcpICE9IDApOworCX0KKwlyZXR1cm4gKDApOworCitlcnI6CisJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJcmV0dXJuIChFT0YpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z2d3JpdGUuaCBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mdndyaXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhMzA5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9mdndyaXRlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoJJE9wZW5CU0Q6IGZ2d3JpdGUuaCx2IDEuNiAyMDEzLzExLzEyIDA3OjA0OjM1IGRlcmFhZHQgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogSS9PIGRlc2NyaXB0b3JzIGZvciBfX3NmdndyaXRlKCkuCisgKi8KK3N0cnVjdCBfX3Npb3YgeworCXZvaWQJKmlvdl9iYXNlOworCXNpemVfdAlpb3ZfbGVuOworfTsKK3N0cnVjdCBfX3N1aW8geworCXN0cnVjdAlfX3Npb3YgKnVpb19pb3Y7CisJaW50CXVpb19pb3ZjbnQ7CisJaW50CXVpb19yZXNpZDsKK307CisKK2V4dGVybiBpbnQgX19zZnZ3cml0ZShGSUxFICosIHN0cnVjdCBfX3N1aW8gKik7Cit3aW50X3QgX19mcHV0d2NfdW5sb2NrKHdjaGFyX3Qgd2MsIEZJTEUgKmZwKTsKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md2Fsay5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3YWxrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjNjYyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md2Fsay5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCSRPcGVuQlNEOiBmd2Fsay5jLHYgMS4xMCAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImdsdWUuaCIKKworaW50CitfZndhbGsoaW50ICgqZnVuY3Rpb24pKEZJTEUgKikpCit7CisJRklMRSAqZnA7CisJaW50IG4sIHJldDsKKwlzdHJ1Y3QgZ2x1ZSAqZzsKKworCXJldCA9IDA7CisJZm9yIChnID0gJl9fc2dsdWU7IGcgIT0gTlVMTDsgZyA9IGctPm5leHQpCisJCWZvciAoZnAgPSBnLT5pb2JzLCBuID0gZy0+bmlvYnM7IC0tbiA+PSAwOyBmcCsrKSB7CisJCQlpZiAoKGZwLT5fZmxhZ3MgIT0gMCkgJiYgKChmcC0+X2ZsYWdzICYgX19TSUdOKSA9PSAwKSkKKwkJCQlyZXQgfD0gKCpmdW5jdGlvbikoZnApOworCQl9CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3aWRlLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZndpZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2NkZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3aWRlLmMKQEAgLTAsMCArMSw2NCBAQAorLyoJJE9wZW5CU0Q6IGZ3aWRlLmMsdiAxLjQgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkCSovCisvKiAkTmV0QlNEOiBmd2lkZS5jLHYgMS4yIDIwMDMvMDEvMTggMTE6Mjk6NTQgdGhvcnBlaiBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykyMDAxIENpdHJ1cyBQcm9qZWN0LAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkQ2l0cnVzJAorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworaW50Citmd2lkZShGSUxFICpmcCwgaW50IG1vZGUpCit7CisJc3RydWN0IHdjaGFyX2lvX2RhdGEgKndjaW87CisKKwkvKgorCSAqIHRoaXMgaW1wbGVtZW50YXRpb24gdXNlIG9ubHkgLTEsIDAsIDEKKwkgKiBmb3IgbW9kZSB2YWx1ZS4KKwkgKiAod2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzLCBidXQKKwkgKiAgdGhpcyBjYW4gbWFrZSB0aGluZ3Mgc2ltcGxlci4pCisJICovCisJaWYgKG1vZGUgPiAwKQorCQltb2RlID0gMTsKKwllbHNlIGlmIChtb2RlIDwgMCkKKwkJbW9kZSA9IC0xOworCisJRkxPQ0tGSUxFKGZwKTsKKwl3Y2lvID0gV0NJT19HRVQoZnApOworCWlmICghd2NpbykKKwkJcmV0dXJuIDA7IC8qIFhYWCAqLworCisJaWYgKHdjaW8tPndjaW9fbW9kZSA9PSAwICYmIG1vZGUgIT0gMCkKKwkJd2Npby0+d2Npb19tb2RlID0gbW9kZTsKKwllbHNlCisJCW1vZGUgPSB3Y2lvLT53Y2lvX21vZGU7CisJRlVOTE9DS0ZJTEUoZnApOworCisJcmV0dXJuIG1vZGU7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZndwcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzRlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZndwcmludGYuYwpAQCAtMCwwICsxLDQ4IEBACisvKgkkT3BlbkJTRDogZndwcmludGYuYyx2IDEuMyAyMDExLzA0LzI4IDE3OjM4OjQ2IHN0c3AgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworaW50Citmd3ByaW50ZihGSUxFICogX19yZXN0cmljdCBmcCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgZm10LCAuLi4pCit7CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZ3cHJpbnRmKGZwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md3JpdGUuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md3JpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGExN2JmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2Z3cml0ZS5jCkBAIC0wLDAgKzEsODggQEAKKy8qCSRPcGVuQlNEOiBmd3JpdGUuYyx2IDEuMTEgMjAxNC8wNS8wMSAxNjo0MDozNiBkZXJhYWR0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJmdndyaXRlLmgiCisKKyNkZWZpbmUgTVVMX05PX09WRVJGTE9XCSgxVUwgPDwgKHNpemVvZihzaXplX3QpICogNCkpCisKKy8qCisgKiBXcml0ZSBgY291bnQnIG9iamVjdHMgKGVhY2ggc2l6ZSBgc2l6ZScpIGZyb20gbWVtb3J5IHRvIHRoZSBnaXZlbiBmaWxlLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2hvbGUgb2JqZWN0cyB3cml0dGVuLgorICovCitzaXplX3QKK2Z3cml0ZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgY291bnQsIEZJTEUgKmZwKQoreworCXNpemVfdCBuOworCXN0cnVjdCBfX3N1aW8gdWlvOworCXN0cnVjdCBfX3Npb3YgaW92OworCWludCByZXQ7CisKKwkvKgorCSAqIEV4dGVuc2lvbjogIENhdGNoIGludGVnZXIgb3ZlcmZsb3cKKwkgKi8KKwlpZiAoKHNpemUgPj0gTVVMX05PX09WRVJGTE9XIHx8IGNvdW50ID49IE1VTF9OT19PVkVSRkxPVykgJiYKKwkgICAgc2l6ZSA+IDAgJiYgU0laRV9NQVggLyBzaXplIDwgY291bnQpIHsKKwkJZXJybm8gPSBFT1ZFUkZMT1c7CisJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQlyZXR1cm4gKDApOworCX0KKworCS8qCisJICogQU5TSSBhbmQgU1VTdjIgcmVxdWlyZSBhIHJldHVybiB2YWx1ZSBvZiAwIGlmIHNpemUgb3IgY291bnQgYXJlIDAuCisJICovCisJaWYgKChuID0gY291bnQgKiBzaXplKSA9PSAwKQorCQlyZXR1cm4gKDApOworCisJaW92Lmlvdl9iYXNlID0gKHZvaWQgKilidWY7CisJdWlvLnVpb19yZXNpZCA9IGlvdi5pb3ZfbGVuID0gbjsKKwl1aW8udWlvX2lvdiA9ICZpb3Y7CisJdWlvLnVpb19pb3ZjbnQgPSAxOworCisJLyoKKwkgKiBUaGUgdXN1YWwgY2FzZSBpcyBzdWNjZXNzIChfX3NmdndyaXRlIHJldHVybnMgMCk7CisJICogc2tpcCB0aGUgZGl2aWRlIGlmIHRoaXMgaGFwcGVucywgc2luY2UgZGl2aWRlcyBhcmUKKwkgKiBnZW5lcmFsbHkgc2xvdyBhbmQgc2luY2UgdGhpcyBvY2N1cnMgd2hlbmV2ZXIgc2l6ZT09MC4KKwkgKi8KKwlGTE9DS0ZJTEUoZnApOworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKwlyZXQgPSBfX3NmdndyaXRlKGZwLCAmdWlvKTsKKwlGVU5MT0NLRklMRShmcCk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gKGNvdW50KTsKKwlyZXR1cm4gKChuIC0gdWlvLnVpb19yZXNpZCkgLyBzaXplKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9md3NjYW5mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZndzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MTZjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZndzY2FuZi5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qICRPcGVuQlNEOiBmd3NjYW5mLmMsdiAxLjIgMjAxMi8xMi8wNSAyMzoyMDowMSBkZXJhYWR0IEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyIFRpbSBKLiBSb2JiaW5zCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKK2ludAorZndzY2FuZihGSUxFICogX19yZXN0cmljdCBmcCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcjsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXIgPSB2ZndzY2FuZihmcCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0Yy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODc5Y2JiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldGMuYwpAQCAtMCwwICsxLDYyIEBACisvKgkkT3BlbkJTRDogZ2V0Yy5jLHYgMS45IDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGdldGNfdW5sb2NrZWQuCisgKi8KKyN1bmRlZiBnZXRjX3VubG9ja2VkCisKK2ludAorZ2V0Y191bmxvY2tlZChGSUxFICpmcCkKK3sKKwlyZXR1cm4gKF9fc2dldGMoZnApKTsKK30KKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBnZXRjLgorICovCisjdW5kZWYgZ2V0YworCitpbnQKK2dldGMoRklMRSAqZnApCit7CisJaW50IGM7CisKKwlGTE9DS0ZJTEUoZnApOworCWMgPSBfX3NnZXRjKGZwKTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRjaGFyLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MDgxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0Y2hhci5jCkBAIC0wLDAgKzEsNTggQEAKKy8qCSRPcGVuQlNEOiBnZXRjaGFyLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBnZXRjaGFyX3VubG9ja2VkLgorICovCisjdW5kZWYgZ2V0Y2hhcl91bmxvY2tlZAorCitpbnQKK2dldGNoYXJfdW5sb2NrZWQodm9pZCkKK3sKKwlyZXR1cm4gKGdldGNfdW5sb2NrZWQoc3RkaW4pKTsKK30KKworCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGdldGNoYXIuCisgKi8KKworI3VuZGVmIGdldGNoYXIKKworaW50CitnZXRjaGFyKHZvaWQpCit7CisJcmV0dXJuIChnZXRjKHN0ZGluKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0ZGVsaW0uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRkZWxpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZGUwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0ZGVsaW0uYwpAQCAtMCwwICsxLDEzNCBAQAorLyoJJE9wZW5CU0Q6IGdldGRlbGltLmMsdiAxLjEgMjAxMi8wMy8yMSAyMzo0NDozNSBmZ3NjaCBFeHAgJAkqLworLyogJE5ldEJTRDogZ2V0ZGVsaW0uYyx2IDEuMTMgMjAxMS8wNy8yMiAyMzoxMjozMCBqb2VyZyBFeHAgJCAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBSb3kgTWFycGxlcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qIE1pbmltdW0gYnVmZmVyIHNpemUgd2UgY3JlYXRlLgorICogVGhpcyBzaG91bGQgYWxsb3cgY29uZmlnIGZpbGVzIHRvIGZpdCBpbnRvIG91ciBwb3dlciBvZiAyIGJ1ZmZlciBncm93dGgKKyAqIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGEgcmVhbGxvYy4gKi8KKyNkZWZpbmUgTUlOQlVGCTEyOAorCitzc2l6ZV90CitnZXRkZWxpbShjaGFyICoqX19yZXN0cmljdCBidWYsIHNpemVfdCAqX19yZXN0cmljdCBidWZsZW4sCisgICAgaW50IHNlcCwgRklMRSAqX19yZXN0cmljdCBmcCkKK3sKKwl1bnNpZ25lZCBjaGFyICpwOworCXNpemVfdCBsZW4sIG5ld2xlbiwgb2ZmOworCWNoYXIgKm5ld2I7CisKKwlGTE9DS0ZJTEUoZnApOworCisJaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1ZmxlbiA9PSBOVUxMKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIElmIGJ1ZiBpcyBOVUxMLCB3ZSBoYXZlIHRvIGFzc3VtZSBhIHNpemUgb2YgemVybyAqLworCWlmICgqYnVmID09IE5VTEwpCisJCSpidWZsZW4gPSAwOworCisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCW9mZiA9IDA7CisJZG8geworCQkvKiBJZiB0aGUgaW5wdXQgYnVmZmVyIGlzIGVtcHR5LCByZWZpbGwgaXQgKi8KKwkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpIHsKKwkJCWlmIChfX3NmZXJyb3IoZnApKQorCQkJCWdvdG8gZXJyb3I7CisJCQkvKiBObyBlcnJvciwgc28gRU9GLiAqLworCQkJYnJlYWs7CisJCX0KKworCQkvKiBTY2FuIHRocm91Z2ggbG9va2luZyBmb3IgdGhlIHNlcGFyYXRvciAqLworCQlwID0gbWVtY2hyKGZwLT5fcCwgc2VwLCAoc2l6ZV90KWZwLT5fcik7CisJCWlmIChwID09IE5VTEwpCisJCQlsZW4gPSBmcC0+X3I7CisJCWVsc2UKKwkJCWxlbiA9IChwIC0gZnAtPl9wKSArIDE7CisKKwkJbmV3bGVuID0gb2ZmICsgbGVuOworCQkvKiBFbnN1cmUgd2UgY2FuIGhhbmRsZSBpdCAqLworCQlpZiAobmV3bGVuIDwgb2ZmIHx8IG5ld2xlbiA+IFNTSVpFX01BWCkgeworCQkJZXJybm8gPSBFT1ZFUkZMT1c7CisJCQlnb3RvIGVycm9yOworCQl9CisJCW5ld2xlbisrOyAvKiByZXNlcnZlIHNwYWNlIGZvciB0aGUgTlVMTCB0ZXJtaW5hdG9yICovCisJCWlmIChuZXdsZW4gPiAqYnVmbGVuKSB7CisJCQlpZiAobmV3bGVuIDwgTUlOQlVGKQorCQkJCW5ld2xlbiA9IE1JTkJVRjsKKyNkZWZpbmUgcG93ZXJvZjIoeCkgKCgoKHgpLTEpJih4KSk9PTApCisJCQlpZiAoIXBvd2Vyb2YyKG5ld2xlbikpIHsKKwkJCQkvKiBHcm93IHRoZSBidWZmZXIgdG8gdGhlIG5leHQgcG93ZXIgb2YgMiAqLworCQkJCW5ld2xlbi0tOworCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gMTsKKwkJCQluZXdsZW4gfD0gbmV3bGVuID4+IDI7CisJCQkJbmV3bGVuIHw9IG5ld2xlbiA+PiA0OworCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gODsKKwkJCQluZXdsZW4gfD0gbmV3bGVuID4+IDE2OworI2lmIFNJWkVfVF9NQVggPiAweGZmZmZmZmZmVQorCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gMzI7CisjZW5kaWYKKwkJCQluZXdsZW4rKzsKKwkJCX0KKworCQkJbmV3YiA9IHJlYWxsb2MoKmJ1ZiwgbmV3bGVuKTsKKwkJCWlmIChuZXdiID09IE5VTEwpCisJCQkJZ290byBlcnJvcjsKKwkJCSpidWYgPSBuZXdiOworCQkJKmJ1ZmxlbiA9IG5ld2xlbjsKKwkJfQorCisJCSh2b2lkKW1lbWNweSgoKmJ1ZiArIG9mZiksIGZwLT5fcCwgbGVuKTsKKwkJLyogU2FmZSwgbGVuIGlzIG5ldmVyIGdyZWF0ZXIgdGhhbiB3aGF0IGZwLT5fciBjYW4gZml0LiAqLworCQlmcC0+X3IgLT0gKGludClsZW47CisJCWZwLT5fcCArPSAoaW50KWxlbjsKKwkJb2ZmICs9IGxlbjsKKwl9IHdoaWxlIChwID09IE5VTEwpOworCisJRlVOTE9DS0ZJTEUoZnApOworCisJLyogUE9TSVggZGVtYW5kcyB3ZSByZXR1cm4gLTEgb24gRU9GLiAqLworCWlmIChvZmYgPT0gMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCpidWYgIT0gTlVMTCkKKwkJKigqYnVmICsgb2ZmKSA9ICdcMCc7CisJcmV0dXJuIG9mZjsKKworZXJyb3I6CisJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9nZXRsaW5lLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0bGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YWQzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0bGluZS5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCSRPcGVuQlNEOiBnZXRsaW5lLmMsdiAxLjEgMjAxMi8wMy8yMSAyMzo0NDozNSBmZ3NjaCBFeHAgJAkqLworLyogJE5ldEJTRDogZ2V0bGluZS5jLHYgMS4zIDIwMDkvMTIvMDIgMDg6NDY6MzMgcm95IEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IFJveSBNYXJwbGVzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworc3NpemVfdAorZ2V0bGluZShjaGFyICoqX19yZXN0cmljdCBidWYsIHNpemVfdCAqX19yZXN0cmljdCBidWZsZW4sIEZJTEUgKl9fcmVzdHJpY3QgZnApCit7CisJcmV0dXJuIGdldGRlbGltKGJ1ZiwgYnVmbGVuLCAnXG4nLCBmcCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0cy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmUxYjUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldHMuYwpAQCAtMCwwICsxLDU5IEBACisvKgkkT3BlbkJTRDogZ2V0cy5jLHYgMS4xMiAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworX193YXJuX3JlZmVyZW5jZXMoZ2V0cywKKyAgICAid2FybmluZzogZ2V0cygpIGlzIHZlcnkgdW5zYWZlOyBjb25zaWRlciB1c2luZyBmZ2V0cygpIik7CisKK2NoYXIgKgorZ2V0cyhjaGFyICpidWYpCit7CisJaW50IGM7CisJY2hhciAqczsKKworCUZMT0NLRklMRShzdGRpbik7CisJZm9yIChzID0gYnVmOyAoYyA9IGdldGNoYXJfdW5sb2NrZWQoKSkgIT0gJ1xuJzspCisJCWlmIChjID09IEVPRikKKwkJCWlmIChzID09IGJ1ZikgeworCQkJCUZVTkxPQ0tGSUxFKHN0ZGluKTsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCWVsc2UKKwkJCSpzKysgPSBjOworCSpzID0gJ1wwJzsKKwlGVU5MT0NLRklMRShzdGRpbik7CisJcmV0dXJuIChidWYpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldHdjLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0d2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWJiYjdjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldHdjLmMKQEAgLTAsMCArMSw0NSBAQAorLyoJJE9wZW5CU0Q6IGdldHdjLmMsdiAxLjEgMjAwNS8wNi8xNyAyMDo0MDozMiBlc3BpZSBFeHAgJAkqLworLyogJE5ldEJTRDogZ2V0d2MuYyx2IDEuMiAyMDAzLzAxLzE4IDExOjI5OjU1IHRob3JwZWogRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpMjAwMSBDaXRydXMgUHJvamVjdCwKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJENpdHJ1cyQKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGdldHdjLgorICovCisjdW5kZWYgZ2V0d2MKKword2ludF90CitnZXR3YyhGSUxFICpmcCkKK3sKKworCXJldHVybiBmZ2V0d2MoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldHdjaGFyLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vZ2V0d2NoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTExMmVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL2dldHdjaGFyLmMKQEAgLTAsMCArMSw0NSBAQAorLyoJJE9wZW5CU0Q6IGdldHdjaGFyLmMsdiAxLjEgMjAwNS8wNi8xNyAyMDo0MDozMiBlc3BpZSBFeHAgJAkqLworLyogJE5ldEJTRDogZ2V0d2NoYXIuYyx2IDEuMiAyMDAzLzAxLzE4IDExOjI5OjU1IHRob3JwZWogRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpMjAwMSBDaXRydXMgUHJvamVjdCwKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJENpdHJ1cyQKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGdldHdjaGFyLgorICovCisjdW5kZWYgZ2V0d2NoYXIKKword2ludF90CitnZXR3Y2hhcigpCit7CisKKwlyZXR1cm4gZmdldHdjKHN0ZGluKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9tYWtlYnVmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vbWFrZWJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0N2UyN2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vbWFrZWJ1Zi5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgkkT3BlbkJTRDogbWFrZWJ1Zi5jLHYgMS44IDIwMDUvMTIvMjggMTg6NTA6MjIgbWlsbGVydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBBbGxvY2F0ZSBhIGZpbGUgYnVmZmVyLCBvciBzd2l0Y2ggdG8gdW5idWZmZXJlZCBJL08uCisgKiBQZXIgdGhlIEFOU0kgQyBzdGFuZGFyZCwgQUxMIHR0eSBkZXZpY2VzIGRlZmF1bHQgdG8gbGluZSBidWZmZXJlZC4KKyAqCisgKiBBcyBhIHNpZGUgZWZmZWN0LCB3ZSBzZXQgX19TT1BUIG9yIF9fU05QVCAoZW4vZGlzLWFibGUgZnNlZWsKKyAqIG9wdGltaXNhdGlvbikgcmlnaHQgYWZ0ZXIgdGhlIGZzdGF0KCkgdGhhdCBmaW5kcyB0aGUgYnVmZmVyIHNpemUuCisgKi8KK3ZvaWQKK19fc21ha2VidWYoRklMRSAqZnApCit7CisJdm9pZCAqcDsKKwlpbnQgZmxhZ3M7CisJc2l6ZV90IHNpemU7CisJaW50IGNvdWxkYmV0dHk7CisKKwlpZiAoZnAtPl9mbGFncyAmIF9fU05CRikgeworCQlmcC0+X2JmLl9iYXNlID0gZnAtPl9wID0gZnAtPl9uYnVmOworCQlmcC0+X2JmLl9zaXplID0gMTsKKwkJcmV0dXJuOworCX0KKwlmbGFncyA9IF9fc3doYXRidWYoZnAsICZzaXplLCAmY291bGRiZXR0eSk7CisJaWYgKChwID0gbWFsbG9jKHNpemUpKSA9PSBOVUxMKSB7CisJCWZwLT5fZmxhZ3MgfD0gX19TTkJGOworCQlmcC0+X2JmLl9iYXNlID0gZnAtPl9wID0gZnAtPl9uYnVmOworCQlmcC0+X2JmLl9zaXplID0gMTsKKwkJcmV0dXJuOworCX0KKwlfX2F0ZXhpdF9yZWdpc3Rlcl9jbGVhbnVwKF9jbGVhbnVwKTsKKwlmbGFncyB8PSBfX1NNQkY7CisJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IHA7CisJZnAtPl9iZi5fc2l6ZSA9IHNpemU7CisJaWYgKGNvdWxkYmV0dHkgJiYgaXNhdHR5KGZwLT5fZmlsZSkpCisJCWZsYWdzIHw9IF9fU0xCRjsKKwlmcC0+X2ZsYWdzIHw9IGZsYWdzOworfQorCisvKgorICogSW50ZXJuYWwgcm91dGluZSB0byBkZXRlcm1pbmUgYHByb3BlcicgYnVmZmVyaW5nIGZvciBhIGZpbGUuCisgKi8KK2ludAorX19zd2hhdGJ1ZihGSUxFICpmcCwgc2l6ZV90ICpidWZzaXplLCBpbnQgKmNvdWxkYmV0dHkpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoZnAtPl9maWxlIDwgMCB8fCBmc3RhdChmcC0+X2ZpbGUsICZzdCkgPCAwKSB7CisJCSpjb3VsZGJldHR5ID0gMDsKKwkJKmJ1ZnNpemUgPSBCVUZTSVo7CisJCXJldHVybiAoX19TTlBUKTsKKwl9CisKKwkvKiBjb3VsZCBiZSBhIHR0eSBpZmYgaXQgaXMgYSBjaGFyYWN0ZXIgZGV2aWNlICovCisJKmNvdWxkYmV0dHkgPSBTX0lTQ0hSKHN0LnN0X21vZGUpOworCWlmIChzdC5zdF9ibGtzaXplID09IDApIHsKKwkJKmJ1ZnNpemUgPSBCVUZTSVo7CisJCXJldHVybiAoX19TTlBUKTsKKwl9CisKKwkvKgorCSAqIE9wdGltaXNlIGZzZWVrKCkgb25seSBpZiBpdCBpcyBhIHJlZ3VsYXIgZmlsZS4gIChUaGUgdGVzdCBmb3IKKwkgKiBfX3NzZWVrIGlzIG1haW5seSBwYXJhbm9pYS4pICBJdCBpcyBzYWZlIHRvIHNldCBfYmxrc2l6ZQorCSAqIHVuY29uZGl0aW9uYWxseTsgaXQgd2lsbCBvbmx5IGJlIHVzZWQgaWYgX19TT1BUIGlzIGFsc28gc2V0LgorCSAqLworCSpidWZzaXplID0gc3Quc3RfYmxrc2l6ZTsKKwlmcC0+X2Jsa3NpemUgPSBzdC5zdF9ibGtzaXplOworCXJldHVybiAoKHN0LnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcgJiYgZnAtPl9zZWVrID09IF9fc3NlZWsgPworCSAgICBfX1NPUFQgOiBfX1NOUFQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL21rdGVtcC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL21rdGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTU0YzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vbWt0ZW1wLmMKQEAgLTAsMCArMSwxNDMgQEAKKy8qCSRPcGVuQlNEOiBta3RlbXAuYyx2IDEuMzMgMjAxNC8wNS8wNiAyMjo1NToyNyBtaWxsZXJ0IEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTgsIDIwMDggVGhlbyBkZSBSYWFkdAorICogQ29weXJpZ2h0IChjKSAxOTk3LCAyMDA4LTIwMDkgVG9kZCBDLiBNaWxsZXIKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIE1LVEVNUF9OQU1FCTAKKyNkZWZpbmUgTUtURU1QX0ZJTEUJMQorI2RlZmluZSBNS1RFTVBfRElSCTIKKworI2RlZmluZSBURU1QQ0hBUlMJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IgorI2RlZmluZSBOVU1fQ0hBUlMJKHNpemVvZihURU1QQ0hBUlMpIC0gMSkKKyNkZWZpbmUgTUlOX1gJCTYKKworI2lmbmRlZiBuaXRlbXMKKyNkZWZpbmUgbml0ZW1zKF9hKQkoc2l6ZW9mKChfYSkpIC8gc2l6ZW9mKChfYSlbMF0pKQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK21rdGVtcF9pbnRlcm5hbChjaGFyICpwYXRoLCBpbnQgc2xlbiwgaW50IG1vZGUpCit7CisJY2hhciAqc3RhcnQsICpjcCwgKmVwOworCWNvbnN0IGNoYXIgKnRlbXBjaGFycyA9IFRFTVBDSEFSUzsKKwl1bnNpZ25lZCBpbnQgdHJpZXM7CisJc3RydWN0IHN0YXQgc2I7CisJc2l6ZV90IGxlbjsKKwlpbnQgZmQ7CisKKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJaWYgKGxlbiA8IE1JTl9YIHx8IHNsZW4gPCAwIHx8IChzaXplX3Qpc2xlbiA+IGxlbiAtIE1JTl9YKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4oLTEpOworCX0KKwllcCA9IHBhdGggKyBsZW4gLSBzbGVuOworCisJZm9yIChzdGFydCA9IGVwOyBzdGFydCA+IHBhdGggJiYgc3RhcnRbLTFdID09ICdYJzsgc3RhcnQtLSkKKwkJOworCWlmIChlcCAtIHN0YXJ0IDwgTUlOX1gpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybigtMSk7CisJfQorCisJdHJpZXMgPSBJTlRfTUFYOworCWRvIHsKKwkJY3AgPSBzdGFydDsKKwkJZG8geworCQkJdW5zaWduZWQgc2hvcnQgcmJ1ZlsxNl07CisJCQl1bnNpZ25lZCBpbnQgaTsKKworCQkJLyoKKwkJCSAqIEF2b2lkIGxvdHMgb2YgYXJjNHJhbmRvbSgpIGNhbGxzIGJ5IHVzaW5nCisJCQkgKiBhIGJ1ZmZlciBzaXplZCBmb3IgdXAgdG8gMTYgWHMgYXQgYSB0aW1lLgorCQkJICovCisJCQlhcmM0cmFuZG9tX2J1ZihyYnVmLCBzaXplb2YocmJ1ZikpOworCQkJZm9yIChpID0gMDsgaSA8IG5pdGVtcyhyYnVmKSAmJiBjcCAhPSBlcDsgaSsrKQorCQkJCSpjcCsrID0gdGVtcGNoYXJzW3JidWZbaV0gJSBOVU1fQ0hBUlNdOworCQl9IHdoaWxlIChjcCAhPSBlcCk7CisKKwkJc3dpdGNoIChtb2RlKSB7CisJCWNhc2UgTUtURU1QX05BTUU6CisJCQlpZiAobHN0YXQocGF0aCwgJnNiKSAhPSAwKQorCQkJCXJldHVybihlcnJubyA9PSBFTk9FTlQgPyAwIDogLTEpOworCQkJYnJlYWs7CisJCWNhc2UgTUtURU1QX0ZJTEU6CisJCQlmZCA9IG9wZW4ocGF0aCwgT19DUkVBVHxPX0VYQ0x8T19SRFdSLCBTX0lSVVNSfFNfSVdVU1IpOworCQkJaWYgKGZkICE9IC0xIHx8IGVycm5vICE9IEVFWElTVCkKKwkJCQlyZXR1cm4oZmQpOworCQkJYnJlYWs7CisJCWNhc2UgTUtURU1QX0RJUjoKKwkJCWlmIChta2RpcihwYXRoLCBTX0lSVVNSfFNfSVdVU1J8U19JWFVTUikgPT0gMCkKKwkJCQlyZXR1cm4oMCk7CisJCQlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJCXJldHVybigtMSk7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKC0tdHJpZXMpOworCisJZXJybm8gPSBFRVhJU1Q7CisJcmV0dXJuKC0xKTsKK30KKworY2hhciAqX21rdGVtcChjaGFyICopOworCitjaGFyICoKK19ta3RlbXAoY2hhciAqcGF0aCkKK3sKKwlpZiAobWt0ZW1wX2ludGVybmFsKHBhdGgsIDAsIE1LVEVNUF9OQU1FKSA9PSAtMSkKKwkJcmV0dXJuKE5VTEwpOworCXJldHVybihwYXRoKTsKK30KKworX193YXJuX3JlZmVyZW5jZXMobWt0ZW1wLAorICAgICJ3YXJuaW5nOiBta3RlbXAoKSBwb3NzaWJseSB1c2VkIHVuc2FmZWx5OyBjb25zaWRlciB1c2luZyBta3N0ZW1wKCkiKTsKKworY2hhciAqCitta3RlbXAoY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4oX21rdGVtcChwYXRoKSk7Cit9CisKK2ludAorbWtzdGVtcChjaGFyICpwYXRoKQoreworCXJldHVybihta3RlbXBfaW50ZXJuYWwocGF0aCwgMCwgTUtURU1QX0ZJTEUpKTsKK30KKworaW50Citta3N0ZW1wcyhjaGFyICpwYXRoLCBpbnQgc2xlbikKK3sKKwlyZXR1cm4obWt0ZW1wX2ludGVybmFsKHBhdGgsIHNsZW4sIE1LVEVNUF9GSUxFKSk7Cit9CisKK2NoYXIgKgorbWtkdGVtcChjaGFyICpwYXRoKQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gbWt0ZW1wX2ludGVybmFsKHBhdGgsIDAsIE1LVEVNUF9ESVIpOworCXJldHVybihlcnJvciA/IE5VTEwgOiBwYXRoKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wZXJyb3IuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzI4NzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3BlcnJvci5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qCSRPcGVuQlNEOiBwZXJyb3IuYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKK3ZvaWQKK3BlcnJvcihjb25zdCBjaGFyICpzKQoreworCXN0cnVjdCBpb3ZlYyAqdjsKKwlzdHJ1Y3QgaW92ZWMgaW92WzRdOworCWNoYXIgYnVmW05MX1RFWFRNQVhdOworCisJdiA9IGlvdjsKKwlpZiAocyAmJiAqcykgeworCQl2LT5pb3ZfYmFzZSA9IChjaGFyICopczsKKwkJdi0+aW92X2xlbiA9IHN0cmxlbihzKTsKKwkJdisrOworCQl2LT5pb3ZfYmFzZSA9ICI6ICI7CisJCXYtPmlvdl9sZW4gPSAyOworCQl2Kys7CisJfQorCSh2b2lkKXN0cmVycm9yX3IoZXJybm8sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCXYtPmlvdl9iYXNlID0gYnVmOworCXYtPmlvdl9sZW4gPSBzdHJsZW4odi0+aW92X2Jhc2UpOworCXYrKzsKKwl2LT5pb3ZfYmFzZSA9ICJcbiI7CisJdi0+aW92X2xlbiA9IDE7CisJKHZvaWQpd3JpdGV2KFNUREVSUl9GSUxFTk8sIGlvdiwgKHYgLSBpb3YpICsgMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHJpbnRmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliYjNkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wcmludGYuYwpAQCAtMCwwICsxLDQ4IEBACisvKgkkT3BlbkJTRDogcHJpbnRmLmMsdiAxLjggMjAxMS8wNS8zMCAxODo0ODozMyBtYXJ0eW5hcyBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyogUFJJTlRGTElLRTEgKi8KK2ludAorcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZmcHJpbnRmKHN0ZG91dCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0Yy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjJmZWNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGMuYwpAQCAtMCwwICsxLDY4IEBACisvKgkkT3BlbkJTRDogcHV0Yy5jLHYgMS4xMiAyMDA5LzExLzIxIDEwOjExOjU0IGd1ZW50aGVyIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBwdXRjX3VubG9ja2VkLgorICovCisjdW5kZWYgcHV0Y191bmxvY2tlZAorCitpbnQKK3B1dGNfdW5sb2NrZWQoaW50IGMsIEZJTEUgKmZwKQoreworCWlmIChjYW50d3JpdGUoZnApKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoRU9GKTsKKwl9CisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCXJldHVybiAoX19zcHV0YyhjLCBmcCkpOworfQorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIHB1dGMuCisgKi8KKyN1bmRlZiBwdXRjCisKK2ludAorcHV0YyhpbnQgYywgRklMRSAqZnApCit7CisJaW50IHJldDsKKworCUZMT0NLRklMRShmcCk7CisJcmV0ID0gcHV0Y191bmxvY2tlZChjLCBmcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXRjaGFyLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2NkZmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0Y2hhci5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCSRPcGVuQlNEOiBwdXRjaGFyLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI3VuZGVmIHB1dGNoYXJfdW5sb2NrZWQKKy8qCisgKiBBIHN1YnJvdXRpbmcgdmVyc2lvbiBvZiB0aGUgbWFjcm8gcHV0Y2hhcl91bmxvY2tlZAorICovCitpbnQKK3B1dGNoYXJfdW5sb2NrZWQoaW50IGMpCit7CisJRklMRSAqc28gPSBzdGRvdXQ7CisKKwlyZXR1cm4gKHB1dGNfdW5sb2NrZWQoYyxzbykpOworfQorCisjdW5kZWYgcHV0Y2hhcgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIHB1dGNoYXIKKyAqLworaW50CitwdXRjaGFyKGludCBjKQoreworCUZJTEUgKnNvID0gc3Rkb3V0OworCisJcmV0dXJuIChwdXRjKGMsIHNvKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0cy5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTVhZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHMuYwpAQCAtMCwwICsxLDYyIEBACisvKgkkT3BlbkJTRDogcHV0cy5jLHYgMS4xMSAyMDA5LzExLzIxIDA5OjUzOjQ0IGd1ZW50aGVyIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAiZnZ3cml0ZS5oIgorCisvKgorICogV3JpdGUgdGhlIGdpdmVuIHN0cmluZyB0byBzdGRvdXQsIGFwcGVuZGluZyBhIG5ld2xpbmUuCisgKi8KK2ludAorcHV0cyhjb25zdCBjaGFyICpzKQoreworCXNpemVfdCBjID0gc3RybGVuKHMpOworCXN0cnVjdCBfX3N1aW8gdWlvOworCXN0cnVjdCBfX3Npb3YgaW92WzJdOworCWludCByZXQ7CisKKwlpb3ZbMF0uaW92X2Jhc2UgPSAodm9pZCAqKXM7CisJaW92WzBdLmlvdl9sZW4gPSBjOworCWlvdlsxXS5pb3ZfYmFzZSA9ICJcbiI7CisJaW92WzFdLmlvdl9sZW4gPSAxOworCXVpby51aW9fcmVzaWQgPSBjICsgMTsKKwl1aW8udWlvX2lvdiA9ICZpb3ZbMF07CisJdWlvLnVpb19pb3ZjbnQgPSAyOworCUZMT0NLRklMRShzdGRvdXQpOworCV9TRVRfT1JJRU5UQVRJT04oc3Rkb3V0LCAtMSk7CisJcmV0ID0gX19zZnZ3cml0ZShzdGRvdXQsICZ1aW8pOworCUZVTkxPQ0tGSUxFKHN0ZG91dCk7CisJcmV0dXJuIChyZXQgPyBFT0YgOiAnXG4nKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXR3LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0dy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3OTQxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0dy5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCSRPcGVuQlNEOiBwdXR3LmMsdiAxLjEwIDIwMDkvMTEvMjEgMDk6NTM6NDQgZ3VlbnRoZXIgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJmdndyaXRlLmgiCisKK2ludAorcHV0dyhpbnQgdywgRklMRSAqZnApCit7CisJc3RydWN0IF9fc3VpbyB1aW87CisJc3RydWN0IF9fc2lvdiBpb3Y7CisJaW50IHJldDsKKworCWlvdi5pb3ZfYmFzZSA9ICZ3OworCWlvdi5pb3ZfbGVuID0gdWlvLnVpb19yZXNpZCA9IHNpemVvZih3KTsKKwl1aW8udWlvX2lvdiA9ICZpb3Y7CisJdWlvLnVpb19pb3ZjbnQgPSAxOworCUZMT0NLRklMRShmcCk7CisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCXJldCA9IF9fc2Z2d3JpdGUoZnAsICZ1aW8pOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0d2MuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9wdXR3Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMmZmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0d2MuYwpAQCAtMCwwICsxLDQ1IEBACisvKgkkT3BlbkJTRDogcHV0d2MuYyx2IDEuMSAyMDA1LzA2LzE3IDIwOjQwOjMyIGVzcGllIEV4cCAkCSovCisvKiAkTmV0QlNEOiBwdXR3Yy5jLHYgMS4zIDIwMDMvMDEvMTggMTE6Mjk6NTYgdGhvcnBlaiBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykyMDAxIENpdHJ1cyBQcm9qZWN0LAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkQ2l0cnVzJAorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gcHV0d2MuCisgKi8KKyN1bmRlZiBwdXR3YworCit3aW50X3QKK3B1dHdjKHdjaGFyX3Qgd2MsIEZJTEUgKmZwKQoreworCisJcmV0dXJuIGZwdXR3Yyh3YywgZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHdjaGFyLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcHV0d2NoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDBlYzA1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHdjaGFyLmMKQEAgLTAsMCArMSw0NSBAQAorLyoJJE9wZW5CU0Q6IHB1dHdjaGFyLmMsdiAxLjEgMjAwNS8wNi8xNyAyMDo0MDozMiBlc3BpZSBFeHAgJAkqLworLyogJE5ldEJTRDogcHV0d2NoYXIuYyx2IDEuMyAyMDAzLzAxLzE4IDExOjI5OjU2IHRob3JwZWogRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpMjAwMSBDaXRydXMgUHJvamVjdCwKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJENpdHJ1cyQKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIHB1dHdjaGFyLgorICovCisjdW5kZWYgcHV0d2NoYXIKKword2ludF90CitwdXR3Y2hhcih3Y2hhcl90IHdjKQoreworCisJcmV0dXJuIGZwdXR3Yyh3Yywgc3Rkb3V0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZWZpbGwuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZWZpbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjVjNzJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3JlZmlsbC5jCkBAIC0wLDAgKzEsMTI4IEBACisvKgkkT3BlbkJTRDogcmVmaWxsLmMsdiAxLjExIDIwMDkvMTEvMDkgMDA6MTg6Mjcga3VydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK3N0YXRpYyBpbnQKK2xmbHVzaChGSUxFICpmcCkKK3sKKwlpZiAoKGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU1dSKSkgPT0gKF9fU0xCRnxfX1NXUikpCisJCXJldHVybiAoX19zZmx1c2hfbG9ja2VkKGZwKSk7CS8qIGlnbm9yZWQuLi4gKi8KKwlyZXR1cm4gKDApOworfQorCisvKgorICogUmVmaWxsIGEgc3RkaW8gYnVmZmVyLgorICogUmV0dXJuIEVPRiBvbiBlb2Ygb3IgZXJyb3IsIDAgb3RoZXJ3aXNlLgorICovCitpbnQKK19fc3JlZmlsbChGSUxFICpmcCkKK3sKKworCS8qIG1ha2Ugc3VyZSBzdGRpbyBpcyBzZXQgdXAgKi8KKwlpZiAoIV9fc2RpZGluaXQpCisJCV9fc2luaXQoKTsKKworCWZwLT5fciA9IDA7CQkvKiBsYXJnZWx5IGEgY29udmVuaWVuY2UgZm9yIGNhbGxlcnMgKi8KKworCS8qIFN5c1YgZG9lcyBub3QgbWFrZSB0aGlzIHRlc3Q7IHRha2UgaXQgb3V0IGZvciBjb21wYXRpYmlsaXR5ICovCisJaWYgKGZwLT5fZmxhZ3MgJiBfX1NFT0YpCisJCXJldHVybiAoRU9GKTsKKworCS8qIGlmIG5vdCBhbHJlYWR5IHJlYWRpbmcsIGhhdmUgdG8gYmUgcmVhZGluZyBhbmQgd3JpdGluZyAqLworCWlmICgoZnAtPl9mbGFncyAmIF9fU1JEKSA9PSAwKSB7CisJCWlmICgoZnAtPl9mbGFncyAmIF9fU1JXKSA9PSAwKSB7CisJCQllcnJubyA9IEVCQURGOworCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQlyZXR1cm4gKEVPRik7CisJCX0KKwkJLyogc3dpdGNoIHRvIHJlYWRpbmcgKi8KKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUikgeworCQkJaWYgKF9fc2ZsdXNoKGZwKSkKKwkJCQlyZXR1cm4gKEVPRik7CisJCQlmcC0+X2ZsYWdzICY9IH5fX1NXUjsKKwkJCWZwLT5fdyA9IDA7CisJCQlmcC0+X2xiZnNpemUgPSAwOworCQl9CisJCWZwLT5fZmxhZ3MgfD0gX19TUkQ7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2Ugd2VyZSByZWFkaW5nLiAgSWYgdGhlcmUgaXMgYW4gdW5nZXRjIGJ1ZmZlciwKKwkJICogd2UgbXVzdCBoYXZlIGJlZW4gcmVhZGluZyBmcm9tIHRoYXQuICBEcm9wIGl0LAorCQkgKiByZXN0b3JpbmcgdGhlIHByZXZpb3VzIGJ1ZmZlciAoaWYgYW55KS4gIElmIHRoZXJlCisJCSAqIGlzIGFueXRoaW5nIGluIHRoYXQgYnVmZmVyLCByZXR1cm4uCisJCSAqLworCQlpZiAoSEFTVUIoZnApKSB7CisJCQlGUkVFVUIoZnApOworCQkJaWYgKChmcC0+X3IgPSBmcC0+X3VyKSAhPSAwKSB7CisJCQkJZnAtPl9wID0gZnAtPl91cDsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQl9CisJfQorCisJaWYgKGZwLT5fYmYuX2Jhc2UgPT0gTlVMTCkKKwkJX19zbWFrZWJ1ZihmcCk7CisKKwkvKgorCSAqIEJlZm9yZSByZWFkaW5nIGZyb20gYSBsaW5lIGJ1ZmZlcmVkIG9yIHVuYnVmZmVyZWQgZmlsZSwKKwkgKiBmbHVzaCBhbGwgbGluZSBidWZmZXJlZCBvdXRwdXQgZmlsZXMsIHBlciB0aGUgQU5TSSBDCisJICogc3RhbmRhcmQuCisJICovCisJaWYgKGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU05CRikpIHsKKwkJLyogSWdub3JlIHRoaXMgZmlsZSBpbiBfZndhbGsgdG8gYXZvaWQgcG90ZW50aWFsIGRlYWRsb2NrLiAqLworCQlmcC0+X2ZsYWdzIHw9IF9fU0lHTjsKKwkJKHZvaWQpIF9md2FsayhsZmx1c2gpOworCQlmcC0+X2ZsYWdzICY9IH5fX1NJR047CisKKwkJLyogTm93IGZsdXNoIHRoaXMgZmlsZSB3aXRob3V0IGxvY2tpbmcgaXQuICovCisJCWlmICgoZnAtPl9mbGFncyAmIChfX1NMQkZ8X19TV1IpKSA9PSAoX19TTEJGfF9fU1dSKSkKKwkJCV9fc2ZsdXNoKGZwKTsKKwl9CisJZnAtPl9wID0gZnAtPl9iZi5fYmFzZTsKKwlmcC0+X3IgPSAoKmZwLT5fcmVhZCkoZnAtPl9jb29raWUsIChjaGFyICopZnAtPl9wLCBmcC0+X2JmLl9zaXplKTsKKwlmcC0+X2ZsYWdzICY9IH5fX1NNT0Q7CS8qIGJ1ZmZlciBjb250ZW50cyBhcmUgYWdhaW4gcHJpc3RpbmUgKi8KKwlpZiAoZnAtPl9yIDw9IDApIHsKKwkJaWYgKGZwLT5fciA9PSAwKQorCQkJZnAtPl9mbGFncyB8PSBfX1NFT0Y7CisJCWVsc2UgeworCQkJZnAtPl9yID0gMDsKKwkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQl9CisJCXJldHVybiAoRU9GKTsKKwl9CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZW1vdmUuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZW1vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDlkNzZmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3JlbW92ZS5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCSRPcGVuQlNEOiByZW1vdmUuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworaW50CityZW1vdmUoY29uc3QgY2hhciAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChsc3RhdChmaWxlLCAmc3QpIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCXJldHVybiAocm1kaXIoZmlsZSkpOworCXJldHVybiAodW5saW5rKGZpbGUpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vcmV3aW5kLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vcmV3aW5kLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RkaW8vcmV3aW5kLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZXdpbmQuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3JnZXQuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZ2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkOTdjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9yZ2V0LmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IHJnZXQuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBIYW5kbGUgZ2V0YygpIHdoZW4gdGhlIGJ1ZmZlciByYW4gb3V0OgorICogUmVmaWxsLCB0aGVuIHJldHVybiB0aGUgZmlyc3QgY2hhcmFjdGVyCisgKiBpbiB0aGUgbmV3bHktZmlsbGVkIGJ1ZmZlci4KKyAqLworaW50CitfX3NyZ2V0KEZJTEUgKmZwKQoreworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKwlpZiAoX19zcmVmaWxsKGZwKSA9PSAwKSB7CisJCWZwLT5fci0tOworCQlyZXR1cm4gKCpmcC0+X3ArKyk7CisJfQorCXJldHVybiAoRU9GKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zY2FuZi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3NjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjZjEyYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zY2FuZi5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCSRPcGVuQlNEOiBzY2FuZi5jLHYgMS4xMCAyMDExLzA1LzMwIDE4OjQ4OjMzIG1hcnR5bmFzIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisvKiBTQ0FORkxJS0UxICovCitpbnQKK3NjYW5mKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZmc2NhbmYoc3RkaW4sIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4M2I4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2V0YnVmLmMKQEAgLTAsMCArMSw0MSBAQAorLyoJJE9wZW5CU0Q6IHNldGJ1Zi5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKwordm9pZAorc2V0YnVmKEZJTEUgKmZwLCBjaGFyICpidWYpCit7CisJKHZvaWQpIHNldHZidWYoZnAsIGJ1ZiwgYnVmID8gX0lPRkJGIDogX0lPTkJGLCBCVUZTSVopOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MjVmZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2V0YnVmZmVyLmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IHNldGJ1ZmZlci5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3ZvaWQKK3NldGJ1ZmZlcihGSUxFICpmcCwgY2hhciAqYnVmLCBpbnQgc2l6ZSkKK3sKKworCSh2b2lkKXNldHZidWYoZnAsIGJ1ZiwgYnVmID8gX0lPRkJGIDogX0lPTkJGLCBzaXplKTsKK30KKworLyoKKyAqIHNldCBsaW5lIGJ1ZmZlcmluZworICovCitpbnQKK3NldGxpbmVidWYoRklMRSAqZnApCit7CisKKwlyZXR1cm4gKHNldHZidWYoZnAsIChjaGFyICopTlVMTCwgX0lPTEJGLCAoc2l6ZV90KTApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zZXR2YnVmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNDlmN2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jCkBAIC0wLDAgKzEsMTU0IEBACisvKgkkT3BlbkJTRDogc2V0dmJ1Zi5jLHYgMS4xMSAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIFNldCBvbmUgb2YgdGhlIHRocmVlIGtpbmRzIG9mIGJ1ZmZlcmluZywgb3B0aW9uYWxseSBpbmNsdWRpbmcKKyAqIGEgYnVmZmVyLgorICovCitpbnQKK3NldHZidWYoRklMRSAqZnAsIGNoYXIgKmJ1ZiwgaW50IG1vZGUsIHNpemVfdCBzaXplKQoreworCWludCByZXQsIGZsYWdzOworCXNpemVfdCBpb3NpemU7CisJaW50IHR0eWZsYWc7CisKKwkvKgorCSAqIFZlcmlmeSBhcmd1bWVudHMuICBUaGUgYGludCcgbGltaXQgb24gYHNpemUnIGlzIGR1ZSB0byB0aGlzCisJICogcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi4gIE5vdGUsIGJ1ZiBhbmQgc2l6ZSBhcmUgaWdub3JlZAorCSAqIHdoZW4gc2V0dGluZyBfSU9OQkYuCisJICovCisJaWYgKG1vZGUgIT0gX0lPTkJGKQorCQlpZiAoKG1vZGUgIT0gX0lPRkJGICYmIG1vZGUgIT0gX0lPTEJGKSB8fCAoaW50KXNpemUgPCAwKQorCQkJcmV0dXJuIChFT0YpOworCisJLyoKKwkgKiBXcml0ZSBjdXJyZW50IGJ1ZmZlciwgaWYgYW55LiAgRGlzY2FyZCB1bnJlYWQgaW5wdXQgKGluY2x1ZGluZworCSAqIHVuZ2V0YyBkYXRhKSwgY2FuY2VsIGxpbmUgYnVmZmVyaW5nLCBhbmQgZnJlZSBvbGQgYnVmZmVyIGlmCisJICogbWFsbG9jKCllZC4gIFdlIGFsc28gY2xlYXIgYW55IGVvZiBjb25kaXRpb24sIGFzIGlmIHRoaXMgd2VyZQorCSAqIGEgc2Vlay4KKwkgKi8KKwlGTE9DS0ZJTEUoZnApOworCXJldCA9IDA7CisJKHZvaWQpX19zZmx1c2goZnApOworCWlmIChIQVNVQihmcCkpCisJCUZSRUVVQihmcCk7CisJV0NJT19GUkVFKGZwKTsKKwlmcC0+X3IgPSBmcC0+X2xiZnNpemUgPSAwOworCWZsYWdzID0gZnAtPl9mbGFnczsKKwlpZiAoZmxhZ3MgJiBfX1NNQkYpCisJCWZyZWUoKHZvaWQgKilmcC0+X2JmLl9iYXNlKTsKKwlmbGFncyAmPSB+KF9fU0xCRiB8IF9fU05CRiB8IF9fU01CRiB8IF9fU09QVCB8IF9fU05QVCB8IF9fU0VPRik7CisKKwkvKiBJZiBzZXR0aW5nIHVuYnVmZmVyZWQgbW9kZSwgc2tpcCBhbGwgdGhlIGhhcmQgd29yay4gKi8KKwlpZiAobW9kZSA9PSBfSU9OQkYpCisJCWdvdG8gbmJmOworCisJLyoKKwkgKiBGaW5kIG9wdGltYWwgSS9PIHNpemUgZm9yIHNlZWsgb3B0aW1pemF0aW9uLiAgVGhpcyBhbHNvIHJldHVybnMKKwkgKiBhIGB0dHkgZmxhZycgdG8gc3VnZ2VzdCB0aGF0IHdlIGNoZWNrIGlzYXR0eShmZCksIGJ1dCB3ZSBkbyBub3QKKwkgKiBjYXJlIHNpbmNlIG91ciBjYWxsZXIgdG9sZCB1cyBob3cgdG8gYnVmZmVyLgorCSAqLworCWZsYWdzIHw9IF9fc3doYXRidWYoZnAsICZpb3NpemUsICZ0dHlmbGFnKTsKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCWJ1ZiA9IE5VTEw7CS8qIGZvcmNlIGxvY2FsIGFsbG9jYXRpb24gKi8KKwkJc2l6ZSA9IGlvc2l6ZTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBidWZmZXIgaWYgbmVlZGVkLiAqLworCWlmIChidWYgPT0gTlVMTCkgeworCQlpZiAoKGJ1ZiA9IG1hbGxvYyhzaXplKSkgPT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIFVuYWJsZSB0byBob25vciB1c2VyJ3MgcmVxdWVzdC4gIFdlIHdpbGwgcmV0dXJuCisJCQkgKiBmYWlsdXJlLCBidXQgdHJ5IGFnYWluIHdpdGggZmlsZSBzeXN0ZW0gc2l6ZS4KKwkJCSAqLworCQkJcmV0ID0gRU9GOworCQkJaWYgKHNpemUgIT0gaW9zaXplKSB7CisJCQkJc2l6ZSA9IGlvc2l6ZTsKKwkJCQlidWYgPSBtYWxsb2Moc2l6ZSk7CisJCQl9CisJCX0KKwkJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCQkvKiBObyBsdWNrOyBzd2l0Y2ggdG8gdW5idWZmZXJlZCBJL08uICovCituYmY6CisJCQlmcC0+X2ZsYWdzID0gZmxhZ3MgfCBfX1NOQkY7CisJCQlmcC0+X3cgPSAwOworCQkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKKwkJCWZwLT5fYmYuX3NpemUgPSAxOworCQkJRlVOTE9DS0ZJTEUoZnApOworCQkJcmV0dXJuIChyZXQpOworCQl9CisJCWZsYWdzIHw9IF9fU01CRjsKKwl9CisKKwkvKgorCSAqIEtpbGwgYW55IHNlZWsgb3B0aW1pemF0aW9uIGlmIHRoZSBidWZmZXIgaXMgbm90IHRoZQorCSAqIHJpZ2h0IHNpemUuCisJICoKKwkgKiBTSE9VTEQgV0UgQUxMT1cgTVVMVElQTEVTIEhFUkUgKGkuZS4sIG9rIGlmZiAoc2l6ZSAlIGlvc2l6ZSkgPT0gMCk/CisJICovCisJaWYgKHNpemUgIT0gaW9zaXplKQorCQlmbGFncyB8PSBfX1NOUFQ7CisKKwkvKgorCSAqIEZpeCB1cCB0aGUgRklMRSBmaWVsZHMsIGFuZCBzZXQgX19jbGVhbnVwIGZvciBvdXRwdXQgZmx1c2ggb24KKwkgKiBleGl0IChzaW5jZSB3ZSBhcmUgYnVmZmVyZWQgaW4gc29tZSB3YXkpLgorCSAqLworCWlmIChtb2RlID09IF9JT0xCRikKKwkJZmxhZ3MgfD0gX19TTEJGOworCWZwLT5fZmxhZ3MgPSBmbGFnczsKKwlmcC0+X2JmLl9iYXNlID0gZnAtPl9wID0gKHVuc2lnbmVkIGNoYXIgKilidWY7CisJZnAtPl9iZi5fc2l6ZSA9IHNpemU7CisJLyogZnAtPl9sYmZzaXplIGlzIHN0aWxsIDAgKi8KKwlpZiAoZmxhZ3MgJiBfX1NXUikgeworCQkvKgorCQkgKiBCZWdpbiBvciBjb250aW51ZSB3cml0aW5nOiBzZWUgX19zd3NldHVwKCkuICBOb3RlCisJCSAqIHRoYXQgX19TTkJGIGlzIGltcG9zc2libGUgKGl0IHdhcyBoYW5kbGVkIGVhcmxpZXIpLgorCQkgKi8KKwkJaWYgKGZsYWdzICYgX19TTEJGKSB7CisJCQlmcC0+X3cgPSAwOworCQkJZnAtPl9sYmZzaXplID0gLWZwLT5fYmYuX3NpemU7CisJCX0gZWxzZQorCQkJZnAtPl93ID0gc2l6ZTsKKwl9IGVsc2UgeworCQkvKiBiZWdpbi9jb250aW51ZSByZWFkaW5nLCBvciBzdGF5IGluIGludGVybWVkaWF0ZSBzdGF0ZSAqLworCQlmcC0+X3cgPSAwOworCX0KKwlGVU5MT0NLRklMRShmcCk7CisJX19hdGV4aXRfcmVnaXN0ZXJfY2xlYW51cChfY2xlYW51cCk7CisKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc3NjYW5mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc3NjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3MWNhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zc2NhbmYuYwpAQCAtMCwwICsxLDY2IEBACisvKgkkT3BlbkJTRDogc3NjYW5mLmMsdiAxLjE0IDIwMTEvMTEvMDggMTg6MzA6NDIgZ3VlbnRoZXIgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyogQVJHU1VTRUQgKi8KK3N0YXRpYyBpbnQKK2VvZnJlYWQodm9pZCAqY29va2llLCBjaGFyICpidWYsIGludCBsZW4pCit7CisKKwlyZXR1cm4gKDApOworfQorCisvKiBTQ0FORkxJS0UyICovCitpbnQKK3NzY2FuZihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKwlGSUxFIGY7CisJc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKKworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisJZi5fZmxhZ3MgPSBfX1NSRDsKKwlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKXN0cjsKKwlmLl9iZi5fc2l6ZSA9IGYuX3IgPSBzdHJsZW4oc3RyKTsKKwlmLl9yZWFkID0gZW9mcmVhZDsKKwlmLl9sYi5fYmFzZSA9IE5VTEw7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gX19zdmZzY2FuZigmZiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc3RkaW8uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zdGRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTI3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc3RkaW8uYwpAQCAtMCwwICsxLDg5IEBACisvKgkkT3BlbkJTRDogc3RkaW8uYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIFNtYWxsIHN0YW5kYXJkIEkvTy9zZWVrL2Nsb3NlIGZ1bmN0aW9ucy4KKyAqIFRoZXNlIG1haW50YWluIHRoZSBga25vd24gc2VlayBvZmZzZXQnIGZvciBzZWVrIG9wdGltaXNhdGlvbi4KKyAqLworaW50CitfX3NyZWFkKHZvaWQgKmNvb2tpZSwgY2hhciAqYnVmLCBpbnQgbikKK3sKKwlGSUxFICpmcCA9IGNvb2tpZTsKKwlpbnQgcmV0OworCQorCXJldCA9IHJlYWQoZnAtPl9maWxlLCBidWYsIG4pOworCS8qIGlmIHRoZSByZWFkIHN1Y2NlZWRlZCwgdXBkYXRlIHRoZSBjdXJyZW50IG9mZnNldCAqLworCWlmIChyZXQgPj0gMCkKKwkJZnAtPl9vZmZzZXQgKz0gcmV0OworCWVsc2UKKwkJZnAtPl9mbGFncyAmPSB+X19TT0ZGOwkvKiBwYXJhbm9pYSAqLworCXJldHVybiAocmV0KTsKK30KKworaW50CitfX3N3cml0ZSh2b2lkICpjb29raWUsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IG4pCit7CisJRklMRSAqZnAgPSBjb29raWU7CisKKwlpZiAoZnAtPl9mbGFncyAmIF9fU0FQUCkKKwkJKHZvaWQpIGxzZWVrKGZwLT5fZmlsZSwgKG9mZl90KTAsIFNFRUtfRU5EKTsKKwlmcC0+X2ZsYWdzICY9IH5fX1NPRkY7CS8qIGluIGNhc2UgRkFQUEVORCBtb2RlIGlzIHNldCAqLworCXJldHVybiAod3JpdGUoZnAtPl9maWxlLCBidWYsIG4pKTsKK30KKworZnBvc190CitfX3NzZWVrKHZvaWQgKmNvb2tpZSwgZnBvc190IG9mZnNldCwgaW50IHdoZW5jZSkKK3sKKwlGSUxFICpmcCA9IGNvb2tpZTsKKwlvZmZfdCByZXQ7CisJCisJcmV0ID0gbHNlZWsoZnAtPl9maWxlLCAob2ZmX3Qpb2Zmc2V0LCB3aGVuY2UpOworCWlmIChyZXQgPT0gKG9mZl90KS0xKQorCQlmcC0+X2ZsYWdzICY9IH5fX1NPRkY7CisJZWxzZSB7CisJCWZwLT5fZmxhZ3MgfD0gX19TT0ZGOworCQlmcC0+X29mZnNldCA9IHJldDsKKwl9CisJcmV0dXJuIChyZXQpOworfQorCitpbnQKK19fc2Nsb3NlKHZvaWQgKmNvb2tpZSkKK3sKKwlyZXR1cm4gKGNsb3NlKCgoRklMRSAqKWNvb2tpZSktPl9maWxlKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc3dwcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zd3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MjhhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc3dwcmludGYuYwpAQCAtMCwwICsxLDQ1IEBACisvKgkkT3BlbkJTRDogc3dwcmludGYuYyx2IDEuNSAyMDEyLzEyLzA1IDIzOjIwOjAxIGRlcmFhZHQgRXhwICQgKi8KKy8qCSROZXRCU0Q6IHN3cHJpbnRmLmMsdiAxLjEgMjAwNS8wNS8xNCAyMzo1MTowMiBjaHJpc3RvcyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMiBUaW0gSi4gUm9iYmlucworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCitpbnQKK3N3cHJpbnRmKHdjaGFyX3QgKiBfX3Jlc3RyaWN0IHMsIHNpemVfdCBuLCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2c3dwcmludGYocywgbiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby9zd3NjYW5mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc3dzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NWU5ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vc3dzY2FuZi5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qICRPcGVuQlNEOiBzd3NjYW5mLmMsdiAxLjIgMjAxMi8xMi8wNSAyMzoyMDowMSBkZXJhYWR0IEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAyIFRpbSBKLiBSb2JiaW5zCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKK2ludAorc3dzY2FuZihjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBzdHIsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IGZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJaW50IHI7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyID0gdnN3c2NhbmYoc3RyLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIChyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby90ZW1wbmFtLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdGVtcG5hbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZjJhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdGVtcG5hbS5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgkkT3BlbkJTRDogdGVtcG5hbS5jLHYgMS4xNyAyMDEzLzA5LzMwIDEyOjAyOjM1IG1pbGxlcnQgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxwYXRocy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK19fd2Fybl9yZWZlcmVuY2VzKHRlbXBuYW0sCisgICAgIndhcm5pbmc6IHRlbXBuYW0oKSBwb3NzaWJseSB1c2VkIHVuc2FmZWx5OyBjb25zaWRlciB1c2luZyBta3N0ZW1wKCkiKTsKKworZXh0ZXJuIGNoYXIgKl9ta3RlbXAoY2hhciAqKTsKKworY2hhciAqCit0ZW1wbmFtKGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqcGZ4KQoreworCWludCBzdmVycm5vLCBsZW47CisJY2hhciAqZiwgKm5hbWU7CisKKwlpZiAoIShuYW1lID0gbWFsbG9jKFBBVEhfTUFYKSkpCisJCXJldHVybihOVUxMKTsKKworCWlmICghcGZ4KQorCQlwZnggPSAidG1wLiI7CisKKwlpZiAoaXNzZXR1Z2lkKCkgPT0gMCAmJiAoZiA9IGdldGVudigiVE1QRElSIikpICYmICpmICE9ICdcMCcpIHsKKwkJbGVuID0gc25wcmludGYobmFtZSwgUEFUSF9NQVgsICIlcyVzJXNYWFhYWFhYWFhYIiwgZiwKKwkJICAgIGZbc3RybGVuKGYpIC0gMV0gPT0gJy8nID8gIiIgOiAiLyIsIHBmeCk7CisJCWlmIChsZW4gPCAwIHx8IGxlbiA+PSBQQVRIX01BWCkgeworCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQlyZXR1cm4oTlVMTCk7CisJCX0KKwkJaWYgKChmID0gX21rdGVtcChuYW1lKSkpCisJCQlyZXR1cm4oZik7CisJfQorCisJaWYgKGRpciAhPSBOVUxMKSB7CisJCWYgPSAqZGlyID8gKGNoYXIgKilkaXIgOiAiLiI7CisJCWxlbiA9IHNucHJpbnRmKG5hbWUsIFBBVEhfTUFYLCAiJXMlcyVzWFhYWFhYWFhYWCIsIGYsCisJCSAgICBmW3N0cmxlbihmKSAtIDFdID09ICcvJyA/ICIiIDogIi8iLCBwZngpOworCQlpZiAobGVuIDwgMCB8fCBsZW4gPj0gUEFUSF9NQVgpIHsKKwkJCWVycm5vID0gRU5BTUVUT09MT05HOworCQkJcmV0dXJuKE5VTEwpOworCQl9CisJCWlmICgoZiA9IF9ta3RlbXAobmFtZSkpKQorCQkJcmV0dXJuKGYpOworCX0KKworCWYgPSBQX3RtcGRpcjsKKwlsZW4gPSBzbnByaW50ZihuYW1lLCBQQVRIX01BWCwgIiVzJXNYWFhYWFhYWFgiLCBmLCBwZngpOworCWlmIChsZW4gPCAwIHx8IGxlbiA+PSBQQVRIX01BWCkgeworCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJcmV0dXJuKE5VTEwpOworCX0KKwlpZiAoKGYgPSBfbWt0ZW1wKG5hbWUpKSkKKwkJcmV0dXJuKGYpOworCisJZiA9IF9QQVRIX1RNUDsKKwlsZW4gPSBzbnByaW50ZihuYW1lLCBQQVRIX01BWCwgIiVzJXNYWFhYWFhYWFgiLCBmLCBwZngpOworCWlmIChsZW4gPCAwIHx8IGxlbiA+PSBQQVRIX01BWCkgeworCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJcmV0dXJuKE5VTEwpOworCX0KKwlpZiAoKGYgPSBfbWt0ZW1wKG5hbWUpKSkKKwkJcmV0dXJuKGYpOworCisJc3ZlcnJubyA9IGVycm5vOworCWZyZWUobmFtZSk7CisJZXJybm8gPSBzdmVycm5vOworCXJldHVybihOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby90bXBuYW0uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby90bXBuYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmUwYTIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3RtcG5hbS5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qCSRPcGVuQlNEOiB0bXBuYW0uYyx2IDEuMTAgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMsIDE5OTQKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitfX3dhcm5fcmVmZXJlbmNlcyh0bXBuYW0sCisgICAgIndhcm5pbmc6IHRtcG5hbSgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOworCitleHRlcm4gY2hhciAqX21rdGVtcChjaGFyICopOworCitjaGFyICoKK3RtcG5hbShjaGFyICpzKQoreworCXN0YXRpYyB1X2xvbmcgdG1wY291bnQ7CisJc3RhdGljIGNoYXIgYnVmW0xfdG1wbmFtXTsKKworCWlmIChzID09IE5VTEwpCisJCXMgPSBidWY7CisJKHZvaWQpc25wcmludGYocywgTF90bXBuYW0sICIlc3RtcC4lbHUuWFhYWFhYWFhYIiwgUF90bXBkaXIsIHRtcGNvdW50KTsKKwkrK3RtcGNvdW50OworCXJldHVybiAoX21rdGVtcChzKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdW5nZXRjLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdW5nZXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1NzMzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby91bmdldGMuYwpAQCAtMCwwICsxLDE0NSBAQAorLyoJJE9wZW5CU0Q6IHVuZ2V0Yy5jLHYgMS4xMiAyMDA5LzExLzA5IDAwOjE4OjI3IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworc3RhdGljIGludCBfX3N1Ym1vcmUoRklMRSAqKTsKKy8qCisgKiBFeHBhbmQgdGhlIHVuZ2V0YyBidWZmZXIgYGluIHBsYWNlJy4gIFRoYXQgaXMsIGFkanVzdCBmcC0+X3Agd2hlbgorICogdGhlIGJ1ZmZlciBtb3Zlcywgc28gdGhhdCBpdCBwb2ludHMgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGUgZW5kLAorICogYW5kIG1vdmUgdGhlIGJ5dGVzIGluIHRoZSBidWZmZXIgYXJvdW5kIGFzIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZXkKKyAqIGFyZSBhbGwgYXQgdGhlIGVuZCAoc3RhY2stc3R5bGUpLgorICovCitzdGF0aWMgaW50CitfX3N1Ym1vcmUoRklMRSAqZnApCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqcDsKKworCWlmIChfVUIoZnApLl9iYXNlID09IGZwLT5fdWJ1ZikgeworCQkvKgorCQkgKiBHZXQgYSBuZXcgYnVmZmVyIChyYXRoZXIgdGhhbiBleHBhbmRpbmcgdGhlIG9sZCBvbmUpLgorCQkgKi8KKwkJaWYgKChwID0gbWFsbG9jKChzaXplX3QpQlVGU0laKSkgPT0gTlVMTCkKKwkJCXJldHVybiAoRU9GKTsKKwkJX1VCKGZwKS5fYmFzZSA9IHA7CisJCV9VQihmcCkuX3NpemUgPSBCVUZTSVo7CisJCXAgKz0gQlVGU0laIC0gc2l6ZW9mKGZwLT5fdWJ1Zik7CisJCWZvciAoaSA9IHNpemVvZihmcC0+X3VidWYpOyAtLWkgPj0gMDspCisJCQlwW2ldID0gZnAtPl91YnVmW2ldOworCQlmcC0+X3AgPSBwOworCQlyZXR1cm4gKDApOworCX0KKwlpID0gX1VCKGZwKS5fc2l6ZTsKKwlwID0gcmVhbGxvYyhfVUIoZnApLl9iYXNlLCBpIDw8IDEpOworCWlmIChwID09IE5VTEwpCisJCXJldHVybiAoRU9GKTsKKwkvKiBubyBvdmVybGFwIChoZW5jZSBjYW4gdXNlIG1lbWNweSkgYmVjYXVzZSB3ZSBkb3VibGVkIHRoZSBzaXplICovCisJKHZvaWQpbWVtY3B5KCh2b2lkICopKHAgKyBpKSwgKHZvaWQgKilwLCAoc2l6ZV90KWkpOworCWZwLT5fcCA9IHAgKyBpOworCV9VQihmcCkuX2Jhc2UgPSBwOworCV9VQihmcCkuX3NpemUgPSBpIDw8IDE7CisJcmV0dXJuICgwKTsKK30KKworaW50Cit1bmdldGMoaW50IGMsIEZJTEUgKmZwKQoreworCWlmIChjID09IEVPRikKKwkJcmV0dXJuIChFT0YpOworCWlmICghX19zZGlkaW5pdCkKKwkJX19zaW5pdCgpOworCUZMT0NLRklMRShmcCk7CisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCWlmICgoZnAtPl9mbGFncyAmIF9fU1JEKSA9PSAwKSB7CisJCS8qCisJCSAqIE5vdCBhbHJlYWR5IHJlYWRpbmc6IG5vIGdvb2QgdW5sZXNzIHJlYWRpbmctYW5kLXdyaXRpbmcuCisJCSAqIE90aGVyd2lzZSwgZmx1c2ggYW55IGN1cnJlbnQgd3JpdGUgc3R1ZmYuCisJCSAqLworCQlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSVykgPT0gMCkgeworZXJyb3I6CQkJRlVOTE9DS0ZJTEUoZnApOworCQkJcmV0dXJuIChFT0YpOworCQl9CisJCWlmIChmcC0+X2ZsYWdzICYgX19TV1IpIHsKKwkJCWlmIChfX3NmbHVzaChmcCkpCisJCQkJZ290byBlcnJvcjsKKwkJCWZwLT5fZmxhZ3MgJj0gfl9fU1dSOworCQkJZnAtPl93ID0gMDsKKwkJCWZwLT5fbGJmc2l6ZSA9IDA7CisJCX0KKwkJZnAtPl9mbGFncyB8PSBfX1NSRDsKKwl9CisJYyA9ICh1bnNpZ25lZCBjaGFyKWM7CisKKwkvKgorCSAqIElmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIHVuZ2V0YydpbmcsIGp1c3QgY29udGludWUuCisJICogVGhpcyBtYXkgcmVxdWlyZSBleHBhbmRpbmcgdGhlIGN1cnJlbnQgdW5nZXRjIGJ1ZmZlci4KKwkgKi8KKwlpZiAoSEFTVUIoZnApKSB7CisJCWlmIChmcC0+X3IgPj0gX1VCKGZwKS5fc2l6ZSAmJiBfX3N1Ym1vcmUoZnApKQorCQkJZ290byBlcnJvcjsKKwkJKi0tZnAtPl9wID0gYzsKK2luY19yZXQ6CWZwLT5fcisrOworCQlGVU5MT0NLRklMRShmcCk7CisJCXJldHVybiAoYyk7CisJfQorCWZwLT5fZmxhZ3MgJj0gfl9fU0VPRjsKKworCS8qCisJICogSWYgd2UgY2FuIGhhbmRsZSB0aGlzIGJ5IHNpbXBseSBiYWNraW5nIHVwLCBkbyBzbywKKwkgKiBidXQgbmV2ZXIgcmVwbGFjZSB0aGUgb3JpZ2luYWwgY2hhcmFjdGVyLgorCSAqIChUaGlzIG1ha2VzIHNzY2FuZigpIHdvcmsgd2hlbiBzY2FubmluZyBgY29uc3QnIGRhdGEuKQorCSAqLworCWlmIChmcC0+X2JmLl9iYXNlICE9IE5VTEwgJiYgZnAtPl9wID4gZnAtPl9iZi5fYmFzZSAmJgorCSAgICBmcC0+X3BbLTFdID09IGMpIHsKKwkJZnAtPl9wLS07CisJCWdvdG8gaW5jX3JldDsKKwl9CisKKwkvKgorCSAqIENyZWF0ZSBhbiB1bmdldGMgYnVmZmVyLgorCSAqIEluaXRpYWxseSwgd2Ugd2lsbCB1c2UgdGhlIGByZXNlcnZlJyBidWZmZXIuCisJICovCisJZnAtPl91ciA9IGZwLT5fcjsKKwlmcC0+X3VwID0gZnAtPl9wOworCV9VQihmcCkuX2Jhc2UgPSBmcC0+X3VidWY7CisJX1VCKGZwKS5fc2l6ZSA9IHNpemVvZihmcC0+X3VidWYpOworCWZwLT5fdWJ1ZltzaXplb2YoZnAtPl91YnVmKSAtIDFdID0gYzsKKwlmcC0+X3AgPSAmZnAtPl91YnVmW3NpemVvZihmcC0+X3VidWYpIC0gMV07CisJZnAtPl9yID0gMTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby91bmdldHdjLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdW5nZXR3Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMzIxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdW5nZXR3Yy5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qCSRPcGVuQlNEOiB1bmdldHdjLmMsdiAxLjUgMjAxMS8xMC8xNiAxMzoyMDo1MSBzdHNwIEV4cCAkCSovCisvKiAkTmV0QlNEOiB1bmdldHdjLmMsdiAxLjIgMjAwMy8wMS8xOCAxMToyOTo1OSB0aG9ycGVqIEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKTIwMDEgQ2l0cnVzIFByb2plY3QsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRDaXRydXMkCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK3dpbnRfdAorX191bmdldHdjKHdpbnRfdCB3YywgRklMRSAqZnApCit7CisJc3RydWN0IHdjaGFyX2lvX2RhdGEgKndjaW87CisKKwlpZiAod2MgPT0gV0VPRikKKwkJcmV0dXJuIFdFT0Y7CisKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAxKTsKKwkvKgorCSAqIFhYWCBzaW5jZSB3ZSBoYXZlIG5vIHdheSB0byB0cmFuc2Zvcm0gYSB3Y2hhciBzdHJpbmcgdG8KKwkgKiBhIGNoYXIgc3RyaW5nIGluIHJldmVyc2Ugb3JkZXIsIHdlIGNhbid0IHVzZSB1bmdldGMuCisJICovCisJLyogWFhYIHNob3VsZCB3ZSBmbHVzaCB1bmdldGMgYnVmZmVyPyAqLworCisJd2NpbyA9IFdDSU9fR0VUKGZwKTsKKwlpZiAod2NpbyA9PSAwKSB7CisJCWVycm5vID0gRU5PTUVNOyAvKiBYWFggKi8KKwkJcmV0dXJuIFdFT0Y7CisJfQorCisJaWYgKHdjaW8tPndjaW9fdW5nZXR3Y19pbmJ1ZiA+PSBXQ0lPX1VOR0VUV0NfQlVGU0laRSkgeworCQlyZXR1cm4gV0VPRjsKKwl9CisKKwl3Y2lvLT53Y2lvX3VuZ2V0d2NfYnVmW3djaW8tPndjaW9fdW5nZXR3Y19pbmJ1ZisrXSA9IHdjOworCV9fc2NsZWFyZXJyKGZwKTsKKworCXJldHVybiB3YzsKK30KKword2ludF90Cit1bmdldHdjKHdpbnRfdCB3YywgRklMRSAqZnApCit7CisJd2ludF90IHI7CisKKwlGTE9DS0ZJTEUoZnApOworCXIgPSBfX3VuZ2V0d2Mod2MsIGZwKTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92YXNwcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92YXNwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmU3YzViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zhc3ByaW50Zi5jCkBAIC0wLDAgKzEsNTggQEAKKy8qCSRPcGVuQlNEOiB2YXNwcmludGYuYyx2IDEuMTYgMjAwOS8xMS8wOSAwMDoxODoyNyBrdXJ0IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitpbnQKK3Zhc3ByaW50ZihjaGFyICoqc3RyLCBjb25zdCBjaGFyICpmbXQsIF9fdmFfbGlzdCBhcCkKK3sKKwlpbnQgcmV0OworCUZJTEUgZjsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCXVuc2lnbmVkIGNoYXIgKl9iYXNlOworCisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKwlmLl9maWxlID0gLTE7CisJZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUiB8IF9fU0FMQzsKKwlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYygxMjgpOworCWlmIChmLl9iZi5fYmFzZSA9PSBOVUxMKQorCQlnb3RvIGVycjsKKwlmLl9iZi5fc2l6ZSA9IGYuX3cgPSAxMjc7CQkvKiBMZWF2ZSByb29tIGZvciB0aGUgTlVMICovCisJcmV0ID0gX192ZnByaW50ZigmZiwgZm10LCBhcCk7CisJaWYgKHJldCA9PSAtMSkKKwkJZ290byBlcnI7CisJKmYuX3AgPSAnXDAnOworCV9iYXNlID0gcmVhbGxvYyhmLl9iZi5fYmFzZSwgcmV0ICsgMSk7CisJaWYgKF9iYXNlID09IE5VTEwpCisJCWdvdG8gZXJyOworCSpzdHIgPSAoY2hhciAqKV9iYXNlOworCXJldHVybiAocmV0KTsKKworZXJyOgorCWlmIChmLl9iZi5fYmFzZSkgeworCQlmcmVlKGYuX2JmLl9iYXNlKTsKKwkJZi5fYmYuX2Jhc2UgPSBOVUxMOworCX0KKwkqc3RyID0gTlVMTDsKKwllcnJubyA9IEVOT01FTTsKKwlyZXR1cm4gKC0xKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZHByaW50Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZkcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljMTk2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZHByaW50Zi5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qCSRPcGVuQlNEOiB2ZHByaW50Zi5jLHYgMS4xIDIwMTMvMDEvMzAgMDA6MDg6MTMgYnJhZCBFeHAgJAkqLworLyoJJEZyZWVCU0Q6IHNyYy9saWIvbGliYy9zdGRpby92ZHByaW50Zi5jLHYgMS40IDIwMTIvMTEvMTcgMDE6NDk6NDAgc3ZuZXhwIEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBGcmVlQlNEIEZvdW5kYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZGV2ZWxvcGVkIGJ5IERhdmlkIENoaXNuYWxsCisgKiB1bmRlciBzcG9uc29yc2hpcCBmcm9tIHRoZSBGcmVlQlNEIEZvdW5kYXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImxvY2FsLmgiCisKK3N0YXRpYyBpbnQKK19fZHdyaXRlKHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqYnVmLCBpbnQgbikKK3sKKwlpbnQgKmZkcCA9IGNvb2tpZTsKKwlyZXR1cm4gKHdyaXRlKCpmZHAsIGJ1ZiwgbikpOworfQorCitpbnQKK3ZkcHJpbnRmKGludCBmZCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgZm10LCB2YV9saXN0IGFwKQoreworCUZJTEUgZjsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCXVuc2lnbmVkIGNoYXIgYnVmW0JVRlNJWl07CisJaW50IHJldDsKKworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisKKwlmLl9wID0gYnVmOworCWYuX3cgPSBzaXplb2YoYnVmKTsKKwlmLl9mbGFncyA9IF9fU1dSOworCWYuX2ZpbGUgPSAtMTsKKwlmLl9iZi5fYmFzZSA9IGJ1ZjsKKwlmLl9iZi5fc2l6ZSA9IHNpemVvZihidWYpOworCWYuX2Nvb2tpZSA9ICZmZDsKKwlmLl93cml0ZSA9IF9fZHdyaXRlOworCisJaWYgKChyZXQgPSBfX3ZmcHJpbnRmKCZmLCBmbXQsIGFwKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGZmbHVzaCgmZikgPyBFT0YgOiByZXQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZwcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGZmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZwcmludGYuYwpAQCAtMCwwICsxLDE1NTUgQEAKKy8qCSRPcGVuQlNEOiB2ZnByaW50Zi5jLHYgMS42NiAyMDE0LzA1LzAzIDEyOjM2OjQ1IGRlcmFhZHQgRXhwICQJKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogQWN0dWFsIHByaW50ZiBpbm5hcmRzLgorICoKKyAqIFRoaXMgY29kZSBpcyBsYXJnZSBhbmQgY29tcGxpY2F0ZWQuLi4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKwordW5pb24gYXJnIHsKKwlpbnQJCQlpbnRhcmc7CisJdW5zaWduZWQgaW50CQl1aW50YXJnOworCWxvbmcJCQlsb25nYXJnOworCXVuc2lnbmVkIGxvbmcJCXVsb25nYXJnOworCWxvbmcgbG9uZwkJbG9uZ2xvbmdhcmc7CisJdW5zaWduZWQgbG9uZyBsb25nCXVsb25nbG9uZ2FyZzsKKwlwdHJkaWZmX3QJCXB0cmRpZmZhcmc7CisJc2l6ZV90CQkJc2l6ZWFyZzsKKwlzc2l6ZV90CQkJc3NpemVhcmc7CisJaW50bWF4X3QJCWludG1heGFyZzsKKwl1aW50bWF4X3QJCXVpbnRtYXhhcmc7CisJdm9pZAkJCSpwdm9pZGFyZzsKKwljaGFyCQkJKnBjaGFyYXJnOworCXNpZ25lZCBjaGFyCQkqcHNjaGFyYXJnOworCXNob3J0CQkJKnBzaG9ydGFyZzsKKwlpbnQJCQkqcGludGFyZzsKKwlsb25nCQkJKnBsb25nYXJnOworCWxvbmcgbG9uZwkJKnBsb25nbG9uZ2FyZzsKKwlwdHJkaWZmX3QJCSpwcHRyZGlmZmFyZzsKKwlzc2l6ZV90CQkJKnBzc2l6ZWFyZzsKKwlpbnRtYXhfdAkJKnBpbnRtYXhhcmc7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwlkb3VibGUJCQlkb3VibGVhcmc7CisJbG9uZyBkb3VibGUJCWxvbmdkb3VibGVhcmc7CisjZW5kaWYKKyNpZmRlZiBQUklOVEZfV0lERV9DSEFSCisJd2ludF90CQkJd2ludGFyZzsKKwl3Y2hhcl90CQkJKnB3Y2hhcmFyZzsKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBfX2ZpbmRfYXJndW1lbnRzKGNvbnN0IGNoYXIgKmZtdDAsIHZhX2xpc3QgYXAsIHVuaW9uIGFyZyAqKmFyZ3RhYmxlLAorICAgIHNpemVfdCAqYXJndGFibGVzaXopOworc3RhdGljIGludCBfX2dyb3dfdHlwZV90YWJsZSh1bnNpZ25lZCBjaGFyICoqdHlwZXRhYmxlLCBpbnQgKnRhYmxlc2l6ZSk7CisKKy8qCisgKiBGbHVzaCBvdXQgYWxsIHRoZSB2ZWN0b3JzIGRlZmluZWQgYnkgdGhlIGdpdmVuIHVpbywKKyAqIHRoZW4gcmVzZXQgaXQgc28gdGhhdCBpdCBjYW4gYmUgcmV1c2VkLgorICovCitzdGF0aWMgaW50CitfX3NwcmludChGSUxFICpmcCwgc3RydWN0IF9fc3VpbyAqdWlvKQoreworCWludCBlcnI7CisKKwlpZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgeworCQl1aW8tPnVpb19pb3ZjbnQgPSAwOworCQlyZXR1cm4gKDApOworCX0KKwllcnIgPSBfX3NmdndyaXRlKGZwLCB1aW8pOworCXVpby0+dWlvX3Jlc2lkID0gMDsKKwl1aW8tPnVpb19pb3ZjbnQgPSAwOworCXJldHVybiAoZXJyKTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgYGZwcmludGYgdG8gdW5idWZmZXJlZCB1bml4IGZpbGUnOiBjcmVhdGVzIGEKKyAqIHRlbXBvcmFyeSBidWZmZXIuICBXZSBvbmx5IHdvcmsgb24gd3JpdGUtb25seSBmaWxlczsgdGhpcyBhdm9pZHMKKyAqIHdvcnJpZXMgYWJvdXQgdW5nZXRjIGJ1ZmZlcnMgYW5kIHNvIGZvcnRoLgorICovCitzdGF0aWMgaW50CitfX3NicHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJaW50IHJldDsKKwlGSUxFIGZha2U7CisJc3RydWN0IF9fc2ZpbGVleHQgZmFrZWV4dDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltCVUZTSVpdOworCisJX0ZJTEVFWFRfU0VUVVAoJmZha2UsICZmYWtlZXh0KTsKKwkvKiBjb3B5IHRoZSBpbXBvcnRhbnQgdmFyaWFibGVzICovCisJZmFrZS5fZmxhZ3MgPSBmcC0+X2ZsYWdzICYgfl9fU05CRjsKKwlmYWtlLl9maWxlID0gZnAtPl9maWxlOworCWZha2UuX2Nvb2tpZSA9IGZwLT5fY29va2llOworCWZha2UuX3dyaXRlID0gZnAtPl93cml0ZTsKKworCS8qIHNldCB1cCB0aGUgYnVmZmVyICovCisJZmFrZS5fYmYuX2Jhc2UgPSBmYWtlLl9wID0gYnVmOworCWZha2UuX2JmLl9zaXplID0gZmFrZS5fdyA9IHNpemVvZihidWYpOworCWZha2UuX2xiZnNpemUgPSAwOwkvKiBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IEp1c3QgSW4gQ2FzZSAqLworCisJLyogZG8gdGhlIHdvcmssIHRoZW4gY29weSBhbnkgZXJyb3Igc3RhdHVzICovCisJcmV0ID0gX192ZnByaW50ZigmZmFrZSwgZm10LCBhcCk7CisJaWYgKHJldCA+PSAwICYmIF9fc2ZsdXNoKCZmYWtlKSkKKwkJcmV0ID0gRU9GOworCWlmIChmYWtlLl9mbGFncyAmIF9fU0VSUikKKwkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJcmV0dXJuIChyZXQpOworfQorCisjaWZkZWYgUFJJTlRGX1dJREVfQ0hBUgorLyoKKyAqIENvbnZlcnQgYSB3aWRlIGNoYXJhY3RlciBzdHJpbmcgYXJndW1lbnQgZm9yIHRoZSAlbHMgZm9ybWF0IHRvIGEgbXVsdGlieXRlCisgKiBzdHJpbmcgcmVwcmVzZW50YXRpb24uIElmIG5vdCAtMSwgcHJlYyBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mCisgKiBieXRlcyB0byBvdXRwdXQsIGFuZCBhbHNvIG1lYW5zIHRoYXQgd2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlIHdpZGUgY2hhcgorICogc3RyaW5nIGlzIG51bGwtdGVybWluYXRlZC4KKyAqLworc3RhdGljIGNoYXIgKgorX193Y3Njb252KHdjaGFyX3QgKndjc2FyZywgaW50IHByZWMpCit7CisJbWJzdGF0ZV90IG1iczsKKwljaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKwl3Y2hhcl90ICpwOworCWNoYXIgKmNvbnZidWY7CisJc2l6ZV90IGNsZW4sIG5ieXRlczsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgd2UgY291bGQgb3V0cHV0LiAqLworCWlmIChwcmVjIDwgMCkgeworCQltZW1zZXQoJm1icywgMCwgc2l6ZW9mKG1icykpOworCQlwID0gd2NzYXJnOworCQluYnl0ZXMgPSB3Y3NydG9tYnMoTlVMTCwgKGNvbnN0IHdjaGFyX3QgKiopJnAsIDAsICZtYnMpOworCQlpZiAobmJ5dGVzID09IChzaXplX3QpLTEpIHsKKwkJCWVycm5vID0gRUlMU0VROworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIE9wdGltaXNhdGlvbjogaWYgdGhlIG91dHB1dCBwcmVjaXNpb24gaXMgc21hbGwgZW5vdWdoLAorCQkgKiBqdXN0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHRoZSBtYXhpbXVtIGluc3RlYWQgb2YKKwkJICogc2Nhbm5pbmcgdGhlIHN0cmluZy4KKwkJICovCisJCWlmIChwcmVjIDwgMTI4KQorCQkJbmJ5dGVzID0gcHJlYzsKKwkJZWxzZSB7CisJCQluYnl0ZXMgPSAwOworCQkJcCA9IHdjc2FyZzsKKwkJCW1lbXNldCgmbWJzLCAwLCBzaXplb2YobWJzKSk7CisJCQlmb3IgKDs7KSB7CisJCQkJY2xlbiA9IHdjcnRvbWIoYnVmLCAqcCsrLCAmbWJzKTsKKwkJCQlpZiAoY2xlbiA9PSAwIHx8IGNsZW4gPT0gKHNpemVfdCktMSB8fAorCQkJCSAgICBuYnl0ZXMgKyBjbGVuID4gKHNpemVfdClwcmVjKQorCQkJCQlicmVhazsKKwkJCQluYnl0ZXMgKz0gY2xlbjsKKwkJCX0KKwkJCWlmIChjbGVuID09IChzaXplX3QpLTEpIHsKKwkJCQllcnJubyA9IEVJTFNFUTsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQl9CisJfQorCWlmICgoY29udmJ1ZiA9IG1hbGxvYyhuYnl0ZXMgKyAxKSkgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qIEZpbGwgdGhlIG91dHB1dCBidWZmZXIuICovCisJcCA9IHdjc2FyZzsKKwltZW1zZXQoJm1icywgMCwgc2l6ZW9mKG1icykpOworCWlmICgobmJ5dGVzID0gd2NzcnRvbWJzKGNvbnZidWYsIChjb25zdCB3Y2hhcl90ICoqKSZwLAorCSAgICBuYnl0ZXMsICZtYnMpKSA9PSAoc2l6ZV90KS0xKSB7CisJCWZyZWUoY29udmJ1Zik7CisJCWVycm5vID0gRUlMU0VROworCQlyZXR1cm4gKE5VTEwpOworCX0KKwljb252YnVmW25ieXRlc10gPSAnXDAnOworCXJldHVybiAoY29udmJ1Zik7Cit9CisjZW5kaWYKKworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAiZmxvYXRpby5oIgorI2luY2x1ZGUgImdkdG9hLmgiCisKKyNkZWZpbmUJREVGUFJFQwkJNgorCitzdGF0aWMgaW50IGV4cG9uZW50KGNoYXIgKiwgaW50LCBpbnQpOworI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCisKKy8qCisgKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHdlIHVzZSBhcyBzY3JhdGNoIHNwYWNlIGZvciBpbnRlZ2VyCisgKiBjb252ZXJzaW9ucywgYW1vbmcgb3RoZXIgdGhpbmdzLiAgVGVjaG5pY2FsbHksIHdlIHdvdWxkIG5lZWQgdGhlCisgKiBtb3N0IHNwYWNlIGZvciBiYXNlIDEwIGNvbnZlcnNpb25zIHdpdGggdGhvdXNhbmRzJyBncm91cGluZworICogY2hhcmFjdGVycyBiZXR3ZWVuIGVhY2ggcGFpciBvZiBkaWdpdHMuICAxMDAgYnl0ZXMgaXMgYQorICogY29uc2VydmF0aXZlIG92ZXJlc3RpbWF0ZSBldmVuIGZvciBhIDEyOC1iaXQgdWludG1heF90LgorICovCisjZGVmaW5lIEJVRgkxMDAKKworI2RlZmluZSBTVEFUSUNfQVJHX1RCTF9TSVpFIDgJLyogU2l6ZSBvZiBzdGF0aWMgYXJndW1lbnQgdGFibGUuICovCisKKworLyoKKyAqIE1hY3JvcyBmb3IgY29udmVydGluZyBkaWdpdHMgdG8gbGV0dGVycyBhbmQgdmljZSB2ZXJzYQorICovCisjZGVmaW5lCXRvX2RpZ2l0KGMpCSgoYykgLSAnMCcpCisjZGVmaW5lIGlzX2RpZ2l0KGMpCSgodW5zaWduZWQpdG9fZGlnaXQoYykgPD0gOSkKKyNkZWZpbmUJdG9fY2hhcihuKQkoKG4pICsgJzAnKQorCisvKgorICogRmxhZ3MgdXNlZCBkdXJpbmcgY29udmVyc2lvbi4KKyAqLworI2RlZmluZQlBTFQJCTB4MDAwMQkJLyogYWx0ZXJuYXRlIGZvcm0gKi8KKyNkZWZpbmUJTEFESlVTVAkJMHgwMDA0CQkvKiBsZWZ0IGFkanVzdG1lbnQgKi8KKyNkZWZpbmUJTE9OR0RCTAkJMHgwMDA4CQkvKiBsb25nIGRvdWJsZSAqLworI2RlZmluZQlMT05HSU5UCQkweDAwMTAJCS8qIGxvbmcgaW50ZWdlciAqLworI2RlZmluZQlMTE9OR0lOVAkweDAwMjAJCS8qIGxvbmcgbG9uZyBpbnRlZ2VyICovCisjZGVmaW5lCVNIT1JUSU5UCTB4MDA0MAkJLyogc2hvcnQgaW50ZWdlciAqLworI2RlZmluZQlaRVJPUEFECQkweDAwODAJCS8qIHplcm8gKGFzIG9wcG9zZWQgdG8gYmxhbmspIHBhZCAqLworI2RlZmluZSBGUFQJCTB4MDEwMAkJLyogRmxvYXRpbmcgcG9pbnQgbnVtYmVyICovCisjZGVmaW5lIFBUUklOVAkJMHgwMjAwCQkvKiAodW5zaWduZWQpIHB0cmRpZmZfdCAqLworI2RlZmluZSBTSVpFSU5UCQkweDA0MDAJCS8qIChzaWduZWQpIHNpemVfdCAqLworI2RlZmluZSBDSEFSSU5UCQkweDA4MDAJCS8qIDggYml0IGludGVnZXIgKi8KKyNkZWZpbmUgTUFYSU5UCQkweDEwMDAJCS8qIGxhcmdlc3QgaW50ZWdlciBzaXplIChpbnRtYXhfdCkgKi8KKworaW50Cit2ZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10MCwgX192YV9saXN0IGFwKQoreworCWludCByZXQ7CisKKwlGTE9DS0ZJTEUoZnApOworCXJldCA9IF9fdmZwcmludGYoZnAsIGZtdDAsIGFwKTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChyZXQpOworfQorCitpbnQKK19fdmZwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdDAsIF9fdmFfbGlzdCBhcCkKK3sKKwljaGFyICpmbXQ7CQkvKiBmb3JtYXQgc3RyaW5nICovCisJaW50IGNoOwkJCS8qIGNoYXJhY3RlciBmcm9tIGZtdCAqLworCWludCBuLCBuMjsJCS8qIGhhbmR5IGludGVnZXJzIChzaG9ydCB0ZXJtIHVzYWdlKSAqLworCWNoYXIgKmNwOwkJLyogaGFuZHkgY2hhciBwb2ludGVyIChzaG9ydCB0ZXJtIHVzYWdlKSAqLworCXN0cnVjdCBfX3Npb3YgKmlvdnA7CS8qIGZvciBQUklOVCBtYWNybyAqLworCWludCBmbGFnczsJCS8qIGZsYWdzIGFzIGFib3ZlICovCisJaW50IHJldDsJCS8qIHJldHVybiB2YWx1ZSBhY2N1bXVsYXRvciAqLworCWludCB3aWR0aDsJCS8qIHdpZHRoIGZyb20gZm9ybWF0ICglOGQpLCBvciAwICovCisJaW50IHByZWM7CQkvKiBwcmVjaXNpb24gZnJvbSBmb3JtYXQ7IDwwIGZvciBOL0EgKi8KKwljaGFyIHNpZ247CQkvKiBzaWduIHByZWZpeCAoJyAnLCAnKycsICctJywgb3IgXDApICovCisJd2NoYXJfdCB3YzsKKwltYnN0YXRlX3QgcHM7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkvKgorCSAqIFdlIGNhbiBkZWNvbXBvc2UgdGhlIHByaW50ZWQgcmVwcmVzZW50YXRpb24gb2YgZmxvYXRpbmcKKwkgKiBwb2ludCBudW1iZXJzIGludG8gc2V2ZXJhbCBwYXJ0cywgc29tZSBvZiB3aGljaCBtYXkgYmUgZW1wdHk6CisJICoKKwkgKiBbK3wtfCBdIFsweHwwWF0gTU1NIC4gTk5OIFtlfEV8cHxQXSBbK3wtXSBaWgorCSAqICAgIEEgICAgICAgQiAgICAgLS0tQy0tLSAgICAgIEQgICAgICAgRSAgIEYKKwkgKgorCSAqIEE6CSdzaWduJyBob2xkcyB0aGlzIHZhbHVlIGlmIHByZXNlbnQ7ICdcMCcgb3RoZXJ3aXNlCisJICogQjoJb3hbMV0gaG9sZHMgdGhlICd4JyBvciAnWCc7ICdcMCcgaWYgbm90IGhleGFkZWNpbWFsCisJICogQzoJY3AgcG9pbnRzIHRvIHRoZSBzdHJpbmcgTU1NTk5OLiAgTGVhZGluZyBhbmQgdHJhaWxpbmcKKwkgKgl6ZXJvcyBhcmUgbm90IGluIHRoZSBzdHJpbmcgYW5kIG11c3QgYmUgYWRkZWQuCisJICogRDoJZXhwY2hhciBob2xkcyB0aGlzIGNoYXJhY3RlcjsgJ1wwJyBpZiBubyBleHBvbmVudCwgZS5nLiAlZgorCSAqIEY6CWF0IGxlYXN0IHR3byBkaWdpdHMgZm9yIGRlY2ltYWwsIGF0IGxlYXN0IG9uZSBkaWdpdCBmb3IgaGV4CisJICovCisJY2hhciAqZGVjaW1hbF9wb2ludCA9IE5VTEw7CisJaW50IHNpZ25mbGFnOwkJLyogdHJ1ZSBpZiBmbG9hdCBpcyBuZWdhdGl2ZSAqLworCXVuaW9uIHsJCQkvKiBmbG9hdGluZyBwb2ludCBhcmd1bWVudHMgJVthQWVFZkZnR10gKi8KKwkJZG91YmxlIGRibDsKKwkJbG9uZyBkb3VibGUgbGRibDsKKwl9IGZwYXJnOworCWludCBleHB0OwkJLyogaW50ZWdlciB2YWx1ZSBvZiBleHBvbmVudCAqLworCWNoYXIgZXhwY2hhcjsJCS8qIGV4cG9uZW50IGNoYXJhY3RlcjogW2VFcFBcMF0gKi8KKwljaGFyICpkdG9hZW5kOwkJLyogcG9pbnRlciB0byBlbmQgb2YgY29udmVydGVkIGRpZ2l0cyAqLworCWludCBleHBzaXplOwkJLyogY2hhcmFjdGVyIGNvdW50IGZvciBleHBzdHIgKi8KKwlpbnQgbGVhZDsJCS8qIHNpZyBmaWdzIGJlZm9yZSBkZWNpbWFsIG9yIGdyb3VwIHNlcCAqLworCWludCBuZGlnOwkJLyogYWN0dWFsIG51bWJlciBvZiBkaWdpdHMgcmV0dXJuZWQgYnkgZHRvYSAqLworCWNoYXIgZXhwc3RyW01BWEVYUERJRysyXTsJLyogYnVmZmVyIGZvciBleHBvbmVudCBzdHJpbmc6IGUrWlpaICovCisJY2hhciAqZHRvYXJlc3VsdCA9IE5VTEw7CisjZW5kaWYKKworCXVpbnRtYXhfdCBfdW1heDsJLyogaW50ZWdlciBhcmd1bWVudHMgJVtkaW91eFhdICovCisJZW51bSB7IE9DVCwgREVDLCBIRVggfSBiYXNlOwkvKiBiYXNlIGZvciAlW2Rpb3V4WF0gY29udmVyc2lvbiAqLworCWludCBkcHJlYzsJCS8qIGEgY29weSBvZiBwcmVjIGlmICVbZGlvdXhYXSwgMCBvdGhlcndpc2UgKi8KKwlpbnQgcmVhbHN6OwkJLyogZmllbGQgc2l6ZSBleHBhbmRlZCBieSBkcHJlYyAqLworCWludCBzaXplOwkJLyogc2l6ZSBvZiBjb252ZXJ0ZWQgZmllbGQgb3Igc3RyaW5nICovCisJY29uc3QgY2hhciAqeGRpZ3M7CS8qIGRpZ2l0cyBmb3IgJVt4WF0gY29udmVyc2lvbiAqLworI2RlZmluZSBOSU9WIDgKKwlzdHJ1Y3QgX19zdWlvIHVpbzsJLyogb3V0cHV0IGluZm9ybWF0aW9uOiBzdW1tYXJ5ICovCisJc3RydWN0IF9fc2lvdiBpb3ZbTklPVl07LyogLi4uIGFuZCBpbmRpdmlkdWFsIGlvIHZlY3RvcnMgKi8KKwljaGFyIGJ1ZltCVUZdOwkJLyogYnVmZmVyIHdpdGggc3BhY2UgZm9yIGRpZ2l0cyBvZiB1aW50bWF4X3QgKi8KKwljaGFyIG94WzJdOwkJLyogc3BhY2UgZm9yIDB4OyBveFsxXSBpcyBlaXRoZXIgeCwgWCwgb3IgXDAgKi8KKwl1bmlvbiBhcmcgKmFyZ3RhYmxlOwkvKiBhcmdzLCBidWlsdCBkdWUgdG8gcG9zaXRpb25hbCBhcmcgKi8KKwl1bmlvbiBhcmcgc3RhdGFyZ3RhYmxlW1NUQVRJQ19BUkdfVEJMX1NJWkVdOworCXNpemVfdCBhcmd0YWJsZXNpejsKKwlpbnQgbmV4dGFyZzsJCS8qIDEtYmFzZWQgYXJndW1lbnQgaW5kZXggKi8KKwl2YV9saXN0IG9yZ2FwOwkJLyogb3JpZ2luYWwgYXJndW1lbnQgcG9pbnRlciAqLworI2lmZGVmIFBSSU5URl9XSURFX0NIQVIKKwljaGFyICpjb252YnVmOwkJLyogYnVmZmVyIGZvciB3aWRlIHRvIG11bHRpLWJ5dGUgY29udmVyc2lvbiAqLworI2VuZGlmCisKKwkvKgorCSAqIENob29zZSBQQURTSVpFIHRvIHRyYWRlIGVmZmljaWVuY3kgdnMuIHNpemUuICBJZiBsYXJnZXIgcHJpbnRmCisJICogZmllbGRzIG9jY3VyIGZyZXF1ZW50bHksIGluY3JlYXNlIFBBRFNJWkUgYW5kIG1ha2UgdGhlIGluaXRpYWxpc2VycworCSAqIGJlbG93IGxvbmdlci4KKwkgKi8KKyNkZWZpbmUJUEFEU0laRQkxNgkJLyogcGFkIGNodW5rIHNpemUgKi8KKwlzdGF0aWMgY2hhciBibGFua3NbUEFEU0laRV0gPQorCSB7JyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnfTsKKwlzdGF0aWMgY2hhciB6ZXJvZXNbUEFEU0laRV0gPQorCSB7JzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnfTsKKworCXN0YXRpYyBjb25zdCBjaGFyIHhkaWdzX2xvd2VyWzE2XSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwlzdGF0aWMgY29uc3QgY2hhciB4ZGlnc191cHBlclsxNl0gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisKKwkvKgorCSAqIEJFV0FSRSwgdGhlc2UgYGdvdG8gZXJyb3InIG9uIGVycm9yLCBhbmQgUEFEIHVzZXMgYG4nLgorCSAqLworI2RlZmluZQlQUklOVChwdHIsIGxlbikgZG8geyBcCisJaW92cC0+aW92X2Jhc2UgPSAocHRyKTsgXAorCWlvdnAtPmlvdl9sZW4gPSAobGVuKTsgXAorCXVpby51aW9fcmVzaWQgKz0gKGxlbik7IFwKKwlpb3ZwKys7IFwKKwlpZiAoKyt1aW8udWlvX2lvdmNudCA+PSBOSU9WKSB7IFwKKwkJaWYgKF9fc3ByaW50KGZwLCAmdWlvKSkgXAorCQkJZ290byBlcnJvcjsgXAorCQlpb3ZwID0gaW92OyBcCisJfSBcCit9IHdoaWxlICgwKQorI2RlZmluZQlQQUQoaG93bWFueSwgd2l0aCkgZG8geyBcCisJaWYgKChuID0gKGhvd21hbnkpKSA+IDApIHsgXAorCQl3aGlsZSAobiA+IFBBRFNJWkUpIHsgXAorCQkJUFJJTlQod2l0aCwgUEFEU0laRSk7IFwKKwkJCW4gLT0gUEFEU0laRTsgXAorCQl9IFwKKwkJUFJJTlQod2l0aCwgbik7IFwKKwl9IFwKK30gd2hpbGUgKDApCisjZGVmaW5lCVBSSU5UQU5EUEFEKHAsIGVwLCBsZW4sIHdpdGgpIGRvIHsJXAorCW4yID0gKGVwKSAtIChwKTsgICAgICAgCQkJXAorCWlmIChuMiA+IChsZW4pKQkJCQlcCisJCW4yID0gKGxlbik7CQkJXAorCWlmIChuMiA+IDApCQkJCVwKKwkJUFJJTlQoKHApLCBuMik7CQkJXAorCVBBRCgobGVuKSAtIChuMiA+IDAgPyBuMiA6IDApLCAod2l0aCkpOwlcCit9IHdoaWxlKDApCisjZGVmaW5lCUZMVVNIKCkgZG8geyBcCisJaWYgKHVpby51aW9fcmVzaWQgJiYgX19zcHJpbnQoZnAsICZ1aW8pKSBcCisJCWdvdG8gZXJyb3I7IFwKKwl1aW8udWlvX2lvdmNudCA9IDA7IFwKKwlpb3ZwID0gaW92OyBcCit9IHdoaWxlICgwKQorCisJLyoKKwkgKiBUbyBleHRlbmQgc2hvcnRzIHByb3Blcmx5LCB3ZSBuZWVkIGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZAorCSAqIGFyZ3VtZW50IGV4dHJhY3Rpb24gbWV0aG9kcy4KKwkgKi8KKyNkZWZpbmUJU0FSRygpIFwKKwkoKGludG1heF90KShmbGFncyZNQVhJTlQgPyBHRVRBUkcoaW50bWF4X3QpIDogXAorCSAgICBmbGFncyZMTE9OR0lOVCA/IEdFVEFSRyhsb25nIGxvbmcpIDogXAorCSAgICBmbGFncyZMT05HSU5UID8gR0VUQVJHKGxvbmcpIDogXAorCSAgICBmbGFncyZQVFJJTlQgPyBHRVRBUkcocHRyZGlmZl90KSA6IFwKKwkgICAgZmxhZ3MmU0laRUlOVCA/IEdFVEFSRyhzc2l6ZV90KSA6IFwKKwkgICAgZmxhZ3MmU0hPUlRJTlQgPyAoc2hvcnQpR0VUQVJHKGludCkgOiBcCisJICAgIGZsYWdzJkNIQVJJTlQgPyAoc2lnbmVkIGNoYXIpR0VUQVJHKGludCkgOiBcCisJICAgIEdFVEFSRyhpbnQpKSkKKyNkZWZpbmUJVUFSRygpIFwKKwkoKHVpbnRtYXhfdCkoZmxhZ3MmTUFYSU5UID8gR0VUQVJHKHVpbnRtYXhfdCkgOiBcCisJICAgIGZsYWdzJkxMT05HSU5UID8gR0VUQVJHKHVuc2lnbmVkIGxvbmcgbG9uZykgOiBcCisJICAgIGZsYWdzJkxPTkdJTlQgPyBHRVRBUkcodW5zaWduZWQgbG9uZykgOiBcCisJICAgIGZsYWdzJlBUUklOVCA/ICh1aW50cHRyX3QpR0VUQVJHKHB0cmRpZmZfdCkgOiAvKiBYWFggKi8gXAorCSAgICBmbGFncyZTSVpFSU5UID8gR0VUQVJHKHNpemVfdCkgOiBcCisJICAgIGZsYWdzJlNIT1JUSU5UID8gKHVuc2lnbmVkIHNob3J0KUdFVEFSRyhpbnQpIDogXAorCSAgICBmbGFncyZDSEFSSU5UID8gKHVuc2lnbmVkIGNoYXIpR0VUQVJHKGludCkgOiBcCisJICAgIEdFVEFSRyh1bnNpZ25lZCBpbnQpKSkKKworCS8qCisJICogQXBwZW5kIGEgZGlnaXQgdG8gYSB2YWx1ZSBhbmQgY2hlY2sgZm9yIG92ZXJmbG93LgorCSAqLworI2RlZmluZSBBUFBFTkRfRElHSVQodmFsLCBkaWcpIGRvIHsgXAorCWlmICgodmFsKSA+IElOVF9NQVggLyAxMCkgXAorCQlnb3RvIG92ZXJmbG93OyBcCisJKHZhbCkgKj0gMTA7IFwKKwlpZiAoKHZhbCkgPiBJTlRfTUFYIC0gdG9fZGlnaXQoKGRpZykpKSBcCisJCWdvdG8gb3ZlcmZsb3c7IFwKKwkodmFsKSArPSB0b19kaWdpdCgoZGlnKSk7IFwKK30gd2hpbGUgKDApCisKKwkgLyoKKwkgICogR2V0ICogYXJndW1lbnRzLCBpbmNsdWRpbmcgdGhlIGZvcm0gKm5uJC4gIFByZXNlcnZlIHRoZSBuZXh0YXJnCisJICAqIHRoYXQgdGhlIGFyZ3VtZW50IGNhbiBiZSBnb3R0ZW4gb25jZSB0aGUgdHlwZSBpcyBkZXRlcm1pbmVkLgorCSAgKi8KKyNkZWZpbmUgR0VUQVNURVIodmFsKSBcCisJbjIgPSAwOyBcCisJY3AgPSBmbXQ7IFwKKwl3aGlsZSAoaXNfZGlnaXQoKmNwKSkgeyBcCisJCUFQUEVORF9ESUdJVChuMiwgKmNwKTsgXAorCQljcCsrOyBcCisJfSBcCisJaWYgKCpjcCA9PSAnJCcpIHsgXAorCQlpbnQgaG9sZCA9IG5leHRhcmc7IFwKKwkJaWYgKGFyZ3RhYmxlID09IE5VTEwpIHsgXAorCQkJYXJndGFibGUgPSBzdGF0YXJndGFibGU7IFwKKwkJCV9fZmluZF9hcmd1bWVudHMoZm10MCwgb3JnYXAsICZhcmd0YWJsZSwgJmFyZ3RhYmxlc2l6KTsgXAorCQl9IFwKKwkJbmV4dGFyZyA9IG4yOyBcCisJCXZhbCA9IEdFVEFSRyhpbnQpOyBcCisJCW5leHRhcmcgPSBob2xkOyBcCisJCWZtdCA9ICsrY3A7IFwKKwl9IGVsc2UgeyBcCisJCXZhbCA9IEdFVEFSRyhpbnQpOyBcCisJfQorCisvKgorKiBHZXQgdGhlIGFyZ3VtZW50IGluZGV4ZWQgYnkgbmV4dGFyZy4gICBJZiB0aGUgYXJndW1lbnQgdGFibGUgaXMKKyogYnVpbHQsIHVzZSBpdCB0byBnZXQgdGhlIGFyZ3VtZW50LiAgSWYgaXRzIG5vdCwgZ2V0IHRoZSBuZXh0CisqIGFyZ3VtZW50IChhbmQgYXJndW1lbnRzIG11c3QgYmUgZ290dGVuIHNlcXVlbnRpYWxseSkuCisqLworI2RlZmluZSBHRVRBUkcodHlwZSkgXAorCSgoYXJndGFibGUgIT0gTlVMTCkgPyAqKCh0eXBlKikoJmFyZ3RhYmxlW25leHRhcmcrK10pKSA6IFwKKwkJKG5leHRhcmcrKywgdmFfYXJnKGFwLCB0eXBlKSkpCisKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisJLyogc29ycnksIGZwcmludGYocmVhZF9vbmx5X2ZpbGUsICIiKSByZXR1cm5zIEVPRiwgbm90IDAgKi8KKwlpZiAoY2FudHdyaXRlKGZwKSkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKEVPRik7CisJfQorCisJLyogb3B0aW1pc2UgZnByaW50ZihzdGRlcnIpIChhbmQgb3RoZXIgdW5idWZmZXJlZCBVbml4IGZpbGVzKSAqLworCWlmICgoZnAtPl9mbGFncyAmIChfX1NOQkZ8X19TV1J8X19TUlcpKSA9PSAoX19TTkJGfF9fU1dSKSAmJgorCSAgICBmcC0+X2ZpbGUgPj0gMCkKKwkJcmV0dXJuIChfX3NicHJpbnRmKGZwLCBmbXQwLCBhcCkpOworCisJZm10ID0gKGNoYXIgKilmbXQwOworCWFyZ3RhYmxlID0gTlVMTDsKKwluZXh0YXJnID0gMTsKKwl2YV9jb3B5KG9yZ2FwLCBhcCk7CisJdWlvLnVpb19pb3YgPSBpb3ZwID0gaW92OworCXVpby51aW9fcmVzaWQgPSAwOworCXVpby51aW9faW92Y250ID0gMDsKKwlyZXQgPSAwOworI2lmZGVmIFBSSU5URl9XSURFX0NIQVIKKwljb252YnVmID0gTlVMTDsKKyNlbmRpZgorCisJbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisJLyoKKwkgKiBTY2FuIHRoZSBmb3JtYXQgZm9yIGNvbnZlcnNpb25zIChgJScgY2hhcmFjdGVyKS4KKwkgKi8KKwlmb3IgKDs7KSB7CisJCWNwID0gZm10OworCQl3aGlsZSAoKG4gPSBtYnJ0b3djKCZ3YywgZm10LCBNQl9DVVJfTUFYLCAmcHMpKSA+IDApIHsKKwkJCWZtdCArPSBuOworCQkJaWYgKHdjID09ICclJykgeworCQkJCWZtdC0tOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChmbXQgIT0gY3ApIHsKKwkJCXB0cmRpZmZfdCBtID0gZm10IC0gY3A7CisJCQlpZiAobSA8IDAgfHwgbSA+IElOVF9NQVggLSByZXQpCisJCQkJZ290byBvdmVyZmxvdzsKKwkJCVBSSU5UKGNwLCBtKTsKKwkJCXJldCArPSBtOworCQl9CisJCWlmIChuIDw9IDApCisJCQlnb3RvIGRvbmU7CisJCWZtdCsrOwkJLyogc2tpcCBvdmVyICclJyAqLworCisJCWZsYWdzID0gMDsKKwkJZHByZWMgPSAwOworCQl3aWR0aCA9IDA7CisJCXByZWMgPSAtMTsKKwkJc2lnbiA9ICdcMCc7CisJCW94WzFdID0gJ1wwJzsKKworcmZsYWc6CQljaCA9ICpmbXQrKzsKK3Jlc3dpdGNoOglzd2l0Y2ggKGNoKSB7CisJCWNhc2UgJyAnOgorCQkJLyoKKwkJCSAqIGBgSWYgdGhlIHNwYWNlIGFuZCArIGZsYWdzIGJvdGggYXBwZWFyLCB0aGUgc3BhY2UKKwkJCSAqIGZsYWcgd2lsbCBiZSBpZ25vcmVkLicnCisJCQkgKgktLSBBTlNJIFgzSjExCisJCQkgKi8KKwkJCWlmICghc2lnbikKKwkJCQlzaWduID0gJyAnOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnIyc6CisJCQlmbGFncyB8PSBBTFQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdcJyc6CisJCQkvKiBncm91cGluZyBub3QgaW1wbGVtZW50ZWQgKi8KKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJyonOgorCQkJLyoKKwkJCSAqIGBgQSBuZWdhdGl2ZSBmaWVsZCB3aWR0aCBhcmd1bWVudCBpcyB0YWtlbiBhcyBhCisJCQkgKiAtIGZsYWcgZm9sbG93ZWQgYnkgYSBwb3NpdGl2ZSBmaWVsZCB3aWR0aC4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICogVGhleSBkb24ndCBleGNsdWRlIGZpZWxkIHdpZHRocyByZWFkIGZyb20gYXJncy4KKwkJCSAqLworCQkJR0VUQVNURVIod2lkdGgpOworCQkJaWYgKHdpZHRoID49IDApCisJCQkJZ290byByZmxhZzsKKwkJCWlmICh3aWR0aCA9PSBJTlRfTUlOKQorCQkJCWdvdG8gb3ZlcmZsb3c7CisJCQl3aWR0aCA9IC13aWR0aDsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWNhc2UgJy0nOgorCQkJZmxhZ3MgfD0gTEFESlVTVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJysnOgorCQkJc2lnbiA9ICcrJzsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJy4nOgorCQkJaWYgKChjaCA9ICpmbXQrKykgPT0gJyonKSB7CisJCQkJR0VUQVNURVIobik7CisJCQkJcHJlYyA9IG4gPCAwID8gLTEgOiBuOworCQkJCWdvdG8gcmZsYWc7CisJCQl9CisJCQluID0gMDsKKwkJCXdoaWxlIChpc19kaWdpdChjaCkpIHsKKwkJCQlBUFBFTkRfRElHSVQobiwgY2gpOworCQkJCWNoID0gKmZtdCsrOworCQkJfQorCQkJaWYgKGNoID09ICckJykgeworCQkJCW5leHRhcmcgPSBuOworCQkJCWlmIChhcmd0YWJsZSA9PSBOVUxMKSB7CisJCQkJCWFyZ3RhYmxlID0gc3RhdGFyZ3RhYmxlOworCQkJCQlfX2ZpbmRfYXJndW1lbnRzKGZtdDAsIG9yZ2FwLAorCQkJCQkgICAgJmFyZ3RhYmxlLCAmYXJndGFibGVzaXopOworCQkJCX0KKwkJCQlnb3RvIHJmbGFnOworCQkJfQorCQkJcHJlYyA9IG47CisJCQlnb3RvIHJlc3dpdGNoOworCQljYXNlICcwJzoKKwkJCS8qCisJCQkgKiBgYE5vdGUgdGhhdCAwIGlzIHRha2VuIGFzIGEgZmxhZywgbm90IGFzIHRoZQorCQkJICogYmVnaW5uaW5nIG9mIGEgZmllbGQgd2lkdGguJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworCQkJZmxhZ3MgfD0gWkVST1BBRDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisJCQluID0gMDsKKwkJCWRvIHsKKwkJCQlBUFBFTkRfRElHSVQobiwgY2gpOworCQkJCWNoID0gKmZtdCsrOworCQkJfSB3aGlsZSAoaXNfZGlnaXQoY2gpKTsKKwkJCWlmIChjaCA9PSAnJCcpIHsKKwkJCQluZXh0YXJnID0gbjsKKwkJCQlpZiAoYXJndGFibGUgPT0gTlVMTCkgeworCQkJCQlhcmd0YWJsZSA9IHN0YXRhcmd0YWJsZTsKKwkJCQkJX19maW5kX2FyZ3VtZW50cyhmbXQwLCBvcmdhcCwKKwkJCQkJICAgICZhcmd0YWJsZSwgJmFyZ3RhYmxlc2l6KTsKKwkJCQl9CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCXdpZHRoID0gbjsKKwkJCWdvdG8gcmVzd2l0Y2g7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSAnTCc6CisJCQlmbGFncyB8PSBMT05HREJMOworCQkJZ290byByZmxhZzsKKyNlbmRpZgorCQljYXNlICdoJzoKKwkJCWlmICgqZm10ID09ICdoJykgeworCQkJCWZtdCsrOworCQkJCWZsYWdzIHw9IENIQVJJTlQ7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IFNIT1JUSU5UOworCQkJfQorCQkJZ290byByZmxhZzsKKwkJY2FzZSAnaic6CisJCQlmbGFncyB8PSBNQVhJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdsJzoKKwkJCWlmICgqZm10ID09ICdsJykgeworCQkJCWZtdCsrOworCQkJCWZsYWdzIHw9IExMT05HSU5UOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBMT05HSU5UOworCQkJfQorCQkJZ290byByZmxhZzsKKwkJY2FzZSAncSc6CisJCQlmbGFncyB8PSBMTE9OR0lOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3QnOgorCQkJZmxhZ3MgfD0gUFRSSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAneic6CisJCQlmbGFncyB8PSBTSVpFSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnYyc6CisjaWZkZWYgUFJJTlRGX1dJREVfQ0hBUgorCQkJaWYgKGZsYWdzICYgTE9OR0lOVCkgeworCQkJCW1ic3RhdGVfdCBtYnM7CisJCQkJc2l6ZV90IG1ic2VxbGVuOworCisJCQkJbWVtc2V0KCZtYnMsIDAsIHNpemVvZihtYnMpKTsKKwkJCQltYnNlcWxlbiA9IHdjcnRvbWIoYnVmLAorCQkJCSAgICAod2NoYXJfdClHRVRBUkcod2ludF90KSwgJm1icyk7CisJCQkJaWYgKG1ic2VxbGVuID09IChzaXplX3QpLTEpIHsKKwkJCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQkJCWVycm5vID0gRUlMU0VROworCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKwkJCQljcCA9IGJ1ZjsKKwkJCQlzaXplID0gKGludCltYnNlcWxlbjsKKwkJCX0gZWxzZSB7CisjZW5kaWYKKwkJCQkqKGNwID0gYnVmKSA9IEdFVEFSRyhpbnQpOworCQkJCXNpemUgPSAxOworI2lmZGVmIFBSSU5URl9XSURFX0NIQVIKKwkJCX0KKyNlbmRpZgorCQkJc2lnbiA9ICdcMCc7CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ2QnOgorCQljYXNlICdpJzoKKwkJCV91bWF4ID0gU0FSRygpOworCQkJaWYgKChpbnRtYXhfdClfdW1heCA8IDApIHsKKwkJCQlfdW1heCA9IC1fdW1heDsKKwkJCQlzaWduID0gJy0nOworCQkJfQorCQkJYmFzZSA9IERFQzsKKwkJCWdvdG8gbnVtYmVyOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgJ2EnOgorCQljYXNlICdBJzoKKwkJCWlmIChjaCA9PSAnYScpIHsKKwkJCQlveFsxXSA9ICd4JzsKKwkJCQl4ZGlncyA9IHhkaWdzX2xvd2VyOworCQkJCWV4cGNoYXIgPSAncCc7CisJCQl9IGVsc2UgeworCQkJCW94WzFdID0gJ1gnOworCQkJCXhkaWdzID0geGRpZ3NfdXBwZXI7CisJCQkJZXhwY2hhciA9ICdQJzsKKwkJCX0KKwkJCWlmIChwcmVjID49IDApCisJCQkJcHJlYysrOworCQkJaWYgKGR0b2FyZXN1bHQpCisJCQkJX19mcmVlZHRvYShkdG9hcmVzdWx0KTsKKwkJCWlmIChmbGFncyAmIExPTkdEQkwpIHsKKwkJCQlmcGFyZy5sZGJsID0gR0VUQVJHKGxvbmcgZG91YmxlKTsKKwkJCQlkdG9hcmVzdWx0ID0gY3AgPQorCQkJCSAgICBfX2hsZHRvYShmcGFyZy5sZGJsLCB4ZGlncywgcHJlYywKKwkJCQkgICAgJmV4cHQsICZzaWduZmxhZywgJmR0b2FlbmQpOworCQkJCWlmIChkdG9hcmVzdWx0ID09IE5VTEwpIHsKKwkJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlmcGFyZy5kYmwgPSBHRVRBUkcoZG91YmxlKTsKKwkJCQlkdG9hcmVzdWx0ID0gY3AgPQorCQkJCSAgICBfX2hkdG9hKGZwYXJnLmRibCwgeGRpZ3MsIHByZWMsCisJCQkJICAgICZleHB0LCAmc2lnbmZsYWcsICZkdG9hZW5kKTsKKwkJCQlpZiAoZHRvYXJlc3VsdCA9PSBOVUxMKSB7CisJCQkJCWVycm5vID0gRU5PTUVNOworCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKwkJCX0KKwkJCWlmIChwcmVjIDwgMCkKKwkJCQlwcmVjID0gZHRvYWVuZCAtIGNwOworCQkJaWYgKGV4cHQgPT0gSU5UX01BWCkKKwkJCQlveFsxXSA9ICdcMCc7CisJCQlnb3RvIGZwX2NvbW1vbjsKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ0UnOgorCQkJZXhwY2hhciA9IGNoOworCQkJaWYgKHByZWMgPCAwKQkvKiBhY2NvdW50IGZvciBkaWdpdCBiZWZvcmUgZGVjcHQgKi8KKwkJCQlwcmVjID0gREVGUFJFQyArIDE7CisJCQllbHNlCisJCQkJcHJlYysrOworCQkJZ290byBmcF9iZWdpbjsKKwkJY2FzZSAnZic6CisJCWNhc2UgJ0YnOgorCQkJZXhwY2hhciA9ICdcMCc7CisJCQlnb3RvIGZwX2JlZ2luOworCQljYXNlICdnJzoKKwkJY2FzZSAnRyc6CisJCQlleHBjaGFyID0gY2ggLSAoJ2cnIC0gJ2UnKTsKKyAJCQlpZiAocHJlYyA9PSAwKQorIAkJCQlwcmVjID0gMTsKK2ZwX2JlZ2luOgorCQkJaWYgKHByZWMgPCAwKQorCQkJCXByZWMgPSBERUZQUkVDOworCQkJaWYgKGR0b2FyZXN1bHQpCisJCQkJX19mcmVlZHRvYShkdG9hcmVzdWx0KTsKKwkJCWlmIChmbGFncyAmIExPTkdEQkwpIHsKKwkJCQlmcGFyZy5sZGJsID0gR0VUQVJHKGxvbmcgZG91YmxlKTsKKwkJCQlkdG9hcmVzdWx0ID0gY3AgPQorCQkJCSAgICBfX2xkdG9hKCZmcGFyZy5sZGJsLCBleHBjaGFyID8gMiA6IDMsIHByZWMsCisJCQkJICAgICZleHB0LCAmc2lnbmZsYWcsICZkdG9hZW5kKTsKKwkJCQlpZiAoZHRvYXJlc3VsdCA9PSBOVUxMKSB7CisJCQkJCWVycm5vID0gRU5PTUVNOworCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZnBhcmcuZGJsID0gR0VUQVJHKGRvdWJsZSk7CisJCQkJZHRvYXJlc3VsdCA9IGNwID0KKwkJCQkgICAgX19kdG9hKGZwYXJnLmRibCwgZXhwY2hhciA/IDIgOiAzLCBwcmVjLAorCQkJCSAgICAmZXhwdCwgJnNpZ25mbGFnLCAmZHRvYWVuZCk7CisJCQkJaWYgKGR0b2FyZXN1bHQgPT0gTlVMTCkgeworCQkJCQllcnJubyA9IEVOT01FTTsKKwkJCQkJZ290byBlcnJvcjsKKwkJCQl9CisJCQkJaWYgKGV4cHQgPT0gOTk5OSkKKwkJCQkJZXhwdCA9IElOVF9NQVg7CisgCQkJfQorZnBfY29tbW9uOgorCQkJaWYgKHNpZ25mbGFnKQorCQkJCXNpZ24gPSAnLSc7CisJCQlpZiAoZXhwdCA9PSBJTlRfTUFYKSB7CS8qIGluZiBvciBuYW4gKi8KKwkJCQlpZiAoKmNwID09ICdOJykgeworCQkJCQljcCA9IChjaCA+PSAnYScpID8gIm5hbiIgOiAiTkFOIjsKKwkJCQkJc2lnbiA9ICdcMCc7CisJCQkJfSBlbHNlCisJCQkJCWNwID0gKGNoID49ICdhJykgPyAiaW5mIiA6ICJJTkYiOworIAkJCQlzaXplID0gMzsKKwkJCQlmbGFncyAmPSB+WkVST1BBRDsKKyAJCQkJYnJlYWs7CisgCQkJfQorCQkJZmxhZ3MgfD0gRlBUOworCQkJbmRpZyA9IGR0b2FlbmQgLSBjcDsKKyAJCQlpZiAoY2ggPT0gJ2cnIHx8IGNoID09ICdHJykgeworCQkJCWlmIChleHB0ID4gLTQgJiYgZXhwdCA8PSBwcmVjKSB7CisJCQkJCS8qIE1ha2UgJVtnR10gc21lbGwgbGlrZSAlW2ZGXSAqLworCQkJCQlleHBjaGFyID0gJ1wwJzsKKwkJCQkJaWYgKGZsYWdzICYgQUxUKQorCQkJCQkJcHJlYyAtPSBleHB0OworCQkJCQllbHNlCisJCQkJCQlwcmVjID0gbmRpZyAtIGV4cHQ7CisJCQkJCWlmIChwcmVjIDwgMCkKKwkJCQkJCXByZWMgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSAqIE1ha2UgJVtnR10gc21lbGwgbGlrZSAlW2VFXSwgYnV0CisJCQkJCSAqIHRyaW0gdHJhaWxpbmcgemVyb2VzIGlmIG5vICMgZmxhZy4KKwkJCQkJICovCisJCQkJCWlmICghKGZsYWdzICYgQUxUKSkKKwkJCQkJCXByZWMgPSBuZGlnOworCQkJCX0KKyAJCQl9CisJCQlpZiAoZXhwY2hhcikgeworCQkJCWV4cHNpemUgPSBleHBvbmVudChleHBzdHIsIGV4cHQgLSAxLCBleHBjaGFyKTsKKwkJCQlzaXplID0gZXhwc2l6ZSArIHByZWM7CisJCQkJaWYgKHByZWMgPiAxIHx8IGZsYWdzICYgQUxUKQorIAkJCQkJKytzaXplOworCQkJfSBlbHNlIHsKKwkJCQkvKiBzcGFjZSBmb3IgZGlnaXRzIGJlZm9yZSBkZWNpbWFsIHBvaW50ICovCisJCQkJaWYgKGV4cHQgPiAwKQorCQkJCQlzaXplID0gZXhwdDsKKwkJCQllbHNlCS8qICIwIiAqLworCQkJCQlzaXplID0gMTsKKwkJCQkvKiBzcGFjZSBmb3IgZGVjaW1hbCBwdCBhbmQgZm9sbG93aW5nIGRpZ2l0cyAqLworCQkJCWlmIChwcmVjIHx8IGZsYWdzICYgQUxUKQorCQkJCQlzaXplICs9IHByZWMgKyAxOworCQkJCWxlYWQgPSBleHB0OworCQkJfQorCQkJYnJlYWs7CisjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KKyNpZm5kZWYgTk9fUFJJTlRGX1BFUkNFTlRfTgorCQljYXNlICduJzoKKwkJCWlmIChmbGFncyAmIExMT05HSU5UKQorCQkJCSpHRVRBUkcobG9uZyBsb25nICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HSU5UKQorCQkJCSpHRVRBUkcobG9uZyAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlRJTlQpCisJCQkJKkdFVEFSRyhzaG9ydCAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgQ0hBUklOVCkKKwkJCQkqR0VUQVJHKHNpZ25lZCBjaGFyICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCisJCQkJKkdFVEFSRyhwdHJkaWZmX3QgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCisJCQkJKkdFVEFSRyhzc2l6ZV90ICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCisJCQkJKkdFVEFSRyhpbnRtYXhfdCAqKSA9IHJldDsKKwkJCWVsc2UKKwkJCQkqR0VUQVJHKGludCAqKSA9IHJldDsKKwkJCWNvbnRpbnVlOwkvKiBubyBvdXRwdXQgKi8KKyNlbmRpZiAvKiBOT19QUklOVEZfUEVSQ0VOVF9OICovCisJCWNhc2UgJ08nOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdvJzoKKwkJCV91bWF4ID0gVUFSRygpOworCQkJYmFzZSA9IE9DVDsKKwkJCWdvdG8gbm9zaWduOworCQljYXNlICdwJzoKKwkJCS8qCisJCQkgKiBgYFRoZSBhcmd1bWVudCBzaGFsbCBiZSBhIHBvaW50ZXIgdG8gdm9pZC4gIFRoZQorCQkJICogdmFsdWUgb2YgdGhlIHBvaW50ZXIgaXMgY29udmVydGVkIHRvIGEgc2VxdWVuY2UKKwkJCSAqIG9mIHByaW50YWJsZSBjaGFyYWN0ZXJzLCBpbiBhbiBpbXBsZW1lbnRhdGlvbi0KKwkJCSAqIGRlZmluZWQgbWFubmVyLicnCisJCQkgKgktLSBBTlNJIFgzSjExCisJCQkgKi8KKwkJCS8qIE5PU1RSSUNUICovCisJCQlfdW1heCA9ICh1X2xvbmcpR0VUQVJHKHZvaWQgKik7CisJCQliYXNlID0gSEVYOworCQkJeGRpZ3MgPSB4ZGlnc19sb3dlcjsKKwkJCW94WzFdID0gJ3gnOworCQkJZ290byBub3NpZ247CisJCWNhc2UgJ3MnOgorI2lmZGVmIFBSSU5URl9XSURFX0NIQVIKKwkJCWlmIChmbGFncyAmIExPTkdJTlQpIHsKKwkJCQl3Y2hhcl90ICp3Y3A7CisKKwkJCQlpZiAoY29udmJ1ZiAhPSBOVUxMKSB7CisJCQkJCWZyZWUoY29udmJ1Zik7CisJCQkJCWNvbnZidWYgPSBOVUxMOworCQkJCX0KKwkJCQlpZiAoKHdjcCA9IEdFVEFSRyh3Y2hhcl90ICopKSA9PSBOVUxMKSB7CisJCQkJCWNwID0gIihudWxsKSI7CisJCQkJfSBlbHNlIHsKKwkJCQkJY29udmJ1ZiA9IF9fd2NzY29udih3Y3AsIHByZWMpOworCQkJCQlpZiAoY29udmJ1ZiA9PSBOVUxMKSB7CisJCQkJCQlmcC0+X2ZsYWdzID0gX19TRVJSOworCQkJCQkJZ290byBlcnJvcjsKKwkJCQkJfQorCQkJCQljcCA9IGNvbnZidWY7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYgLyogUFJJTlRGX1dJREVfQ0hBUiAqLworCQkJaWYgKChjcCA9IEdFVEFSRyhjaGFyICopKSA9PSBOVUxMKQorCQkJCWNwID0gIihudWxsKSI7CisJCQlpZiAocHJlYyA+PSAwKSB7CisJCQkJLyoKKwkJCQkgKiBjYW4ndCB1c2Ugc3RybGVuOyBjYW4gb25seSBsb29rIGZvciB0aGUKKwkJCQkgKiBOVUwgaW4gdGhlIGZpcnN0IGBwcmVjJyBjaGFyYWN0ZXJzLCBhbmQKKwkJCQkgKiBzdHJsZW4oKSB3aWxsIGdvIGZ1cnRoZXIuCisJCQkJICovCisJCQkJY2hhciAqcCA9IG1lbWNocihjcCwgMCwgcHJlYyk7CisKKwkJCQlzaXplID0gcCA/IChwIC0gY3ApIDogcHJlYzsKKwkJCX0gZWxzZSB7CisJCQkJc2l6ZV90IGxlbjsKKworCQkJCWlmICgobGVuID0gc3RybGVuKGNwKSkgPiBJTlRfTUFYKQorCQkJCQlnb3RvIG92ZXJmbG93OworCQkJCXNpemUgPSAoaW50KWxlbjsKKwkJCX0KKwkJCXNpZ24gPSAnXDAnOworCQkJYnJlYWs7CisJCWNhc2UgJ1UnOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICd1JzoKKwkJCV91bWF4ID0gVUFSRygpOworCQkJYmFzZSA9IERFQzsKKwkJCWdvdG8gbm9zaWduOworCQljYXNlICdYJzoKKwkJCXhkaWdzID0geGRpZ3NfdXBwZXI7CisJCQlnb3RvIGhleDsKKwkJY2FzZSAneCc6CisJCQl4ZGlncyA9IHhkaWdzX2xvd2VyOworaGV4OgkJCV91bWF4ID0gVUFSRygpOworCQkJYmFzZSA9IEhFWDsKKwkJCS8qIGxlYWRpbmcgMHgvWCBvbmx5IGlmIG5vbi16ZXJvICovCisJCQlpZiAoZmxhZ3MgJiBBTFQgJiYgX3VtYXggIT0gMCkKKwkJCQlveFsxXSA9IGNoOworCisJCQkvKiB1bnNpZ25lZCBjb252ZXJzaW9ucyAqLworbm9zaWduOgkJCXNpZ24gPSAnXDAnOworCQkJLyoKKwkJCSAqIGBgLi4uIGRpb3VYeCBjb252ZXJzaW9ucyAuLi4gaWYgYSBwcmVjaXNpb24gaXMKKwkJCSAqIHNwZWNpZmllZCwgdGhlIDAgZmxhZyB3aWxsIGJlIGlnbm9yZWQuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworbnVtYmVyOgkJCWlmICgoZHByZWMgPSBwcmVjKSA+PSAwKQorCQkJCWZsYWdzICY9IH5aRVJPUEFEOworCisJCQkvKgorCQkJICogYGBUaGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgYSB6ZXJvIHZhbHVlIHdpdGggYW4KKwkJCSAqIGV4cGxpY2l0IHByZWNpc2lvbiBvZiB6ZXJvIGlzIG5vIGNoYXJhY3RlcnMuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworCQkJY3AgPSBidWYgKyBCVUY7CisJCQlpZiAoX3VtYXggIT0gMCB8fCBwcmVjICE9IDApIHsKKwkJCQkvKgorCQkJCSAqIFVuc2lnbmVkIG1vZCBpcyBoYXJkLCBhbmQgdW5zaWduZWQgbW9kCisJCQkJICogYnkgYSBjb25zdGFudCBpcyBlYXNpZXIgdGhhbiB0aGF0IGJ5CisJCQkJICogYSB2YXJpYWJsZTsgaGVuY2UgdGhpcyBzd2l0Y2guCisJCQkJICovCisJCQkJc3dpdGNoIChiYXNlKSB7CisJCQkJY2FzZSBPQ1Q6CisJCQkJCWRvIHsKKwkJCQkJCSotLWNwID0gdG9fY2hhcihfdW1heCAmIDcpOworCQkJCQkJX3VtYXggPj49IDM7CisJCQkJCX0gd2hpbGUgKF91bWF4KTsKKwkJCQkJLyogaGFuZGxlIG9jdGFsIGxlYWRpbmcgMCAqLworCQkJCQlpZiAoZmxhZ3MgJiBBTFQgJiYgKmNwICE9ICcwJykKKwkJCQkJCSotLWNwID0gJzAnOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgREVDOgorCQkJCQkvKiBtYW55IG51bWJlcnMgYXJlIDEgZGlnaXQgKi8KKwkJCQkJd2hpbGUgKF91bWF4ID49IDEwKSB7CisJCQkJCQkqLS1jcCA9IHRvX2NoYXIoX3VtYXggJSAxMCk7CisJCQkJCQlfdW1heCAvPSAxMDsKKwkJCQkJfQorCQkJCQkqLS1jcCA9IHRvX2NoYXIoX3VtYXgpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgSEVYOgorCQkJCQlkbyB7CisJCQkJCQkqLS1jcCA9IHhkaWdzW191bWF4ICYgMTVdOworCQkJCQkJX3VtYXggPj49IDQ7CisJCQkJCX0gd2hpbGUgKF91bWF4KTsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQljcCA9ICJidWcgaW4gdmZwcmludGY6IGJhZCBiYXNlIjsKKwkJCQkJc2l6ZSA9IHN0cmxlbihjcCk7CisJCQkJCWdvdG8gc2tpcHNpemU7CisJCQkJfQorCQkJfQorCQkJc2l6ZSA9IGJ1ZiArIEJVRiAtIGNwOworCQkJaWYgKHNpemUgPiBCVUYpCS8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJCQlhYm9ydCgpOworCQlza2lwc2l6ZToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkvKiAiJT8iIHByaW50cyA/LCB1bmxlc3MgPyBpcyBOVUwgKi8KKwkJCWlmIChjaCA9PSAnXDAnKQorCQkJCWdvdG8gZG9uZTsKKwkJCS8qIHByZXRlbmQgaXQgd2FzICVjIHdpdGggYXJndW1lbnQgY2ggKi8KKwkJCWNwID0gYnVmOworCQkJKmNwID0gY2g7CisJCQlzaXplID0gMTsKKwkJCXNpZ24gPSAnXDAnOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBBbGwgcmVhc29uYWJsZSBmb3JtYXRzIHdpbmQgdXAgaGVyZS4gIEF0IHRoaXMgcG9pbnQsIGBjcCcKKwkJICogcG9pbnRzIHRvIGEgc3RyaW5nIHdoaWNoIChpZiBub3QgZmxhZ3MmTEFESlVTVCkgc2hvdWxkIGJlCisJCSAqIHBhZGRlZCBvdXQgdG8gYHdpZHRoJyBwbGFjZXMuICBJZiBmbGFncyZaRVJPUEFELCBpdCBzaG91bGQKKwkJICogZmlyc3QgYmUgcHJlZml4ZWQgYnkgYW55IHNpZ24gb3Igb3RoZXIgcHJlZml4OyBvdGhlcndpc2UsCisJCSAqIGl0IHNob3VsZCBiZSBibGFuayBwYWRkZWQgYmVmb3JlIHRoZSBwcmVmaXggaXMgZW1pdHRlZC4KKwkJICogQWZ0ZXIgYW55IGxlZnQtaGFuZCBwYWRkaW5nIGFuZCBwcmVmaXhpbmcsIGVtaXQgemVyb2VzCisJCSAqIHJlcXVpcmVkIGJ5IGEgZGVjaW1hbCAlW2Rpb3V4WF0gcHJlY2lzaW9uLCB0aGVuIHByaW50IHRoZQorCQkgKiBzdHJpbmcgcHJvcGVyLCB0aGVuIGVtaXQgemVyb2VzIHJlcXVpcmVkIGJ5IGFueSBsZWZ0b3ZlcgorCQkgKiBmbG9hdGluZyBwcmVjaXNpb247IGZpbmFsbHksIGlmIExBREpVU1QsIHBhZCB3aXRoIGJsYW5rcy4KKwkJICoKKwkJICogQ29tcHV0ZSBhY3R1YWwgc2l6ZSwgc28gd2Uga25vdyBob3cgbXVjaCB0byBwYWQuCisJCSAqIHNpemUgZXhjbHVkZXMgZGVjaW1hbCBwcmVjOyByZWFsc3ogaW5jbHVkZXMgaXQuCisJCSAqLworCQlyZWFsc3ogPSBkcHJlYyA+IHNpemUgPyBkcHJlYyA6IHNpemU7CisJCWlmIChzaWduKQorCQkJcmVhbHN6Kys7CisJCWlmIChveFsxXSkKKwkJCXJlYWxzeis9IDI7CisKKwkJLyogcmlnaHQtYWRqdXN0aW5nIGJsYW5rIHBhZGRpbmcgKi8KKwkJaWYgKChmbGFncyAmIChMQURKVVNUfFpFUk9QQUQpKSA9PSAwKQorCQkJUEFEKHdpZHRoIC0gcmVhbHN6LCBibGFua3MpOworCisJCS8qIHByZWZpeCAqLworCQlpZiAoc2lnbikKKwkJCVBSSU5UKCZzaWduLCAxKTsKKwkJaWYgKG94WzFdKSB7CS8qIG94WzFdIGlzIGVpdGhlciB4LCBYLCBvciBcMCAqLworCQkJb3hbMF0gPSAnMCc7CisJCQlQUklOVChveCwgMik7CisJCX0KKworCQkvKiByaWdodC1hZGp1c3RpbmcgemVybyBwYWRkaW5nICovCisJCWlmICgoZmxhZ3MgJiAoTEFESlVTVHxaRVJPUEFEKSkgPT0gWkVST1BBRCkKKwkJCVBBRCh3aWR0aCAtIHJlYWxzeiwgemVyb2VzKTsKKworCQkvKiBsZWFkaW5nIHplcm9lcyBmcm9tIGRlY2ltYWwgcHJlY2lzaW9uICovCisJCVBBRChkcHJlYyAtIHNpemUsIHplcm9lcyk7CisKKwkJLyogdGhlIHN0cmluZyBvciBudW1iZXIgcHJvcGVyICovCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJaWYgKChmbGFncyAmIEZQVCkgPT0gMCkgeworCQkJUFJJTlQoY3AsIHNpemUpOworCQl9IGVsc2UgewkvKiBnbHVlIHRvZ2V0aGVyIGZfcCBmcmFnbWVudHMgKi8KKwkJCWlmIChkZWNpbWFsX3BvaW50ID09IE5VTEwpCisJCQkJZGVjaW1hbF9wb2ludCA9IG5sX2xhbmdpbmZvKFJBRElYQ0hBUik7CisJCQlpZiAoIWV4cGNoYXIpIHsJLyogJVtmRl0gb3Igc3VmZmljaWVudGx5IHNob3J0ICVbZ0ddICovCisJCQkJaWYgKGV4cHQgPD0gMCkgeworCQkJCQlQUklOVCh6ZXJvZXMsIDEpOworCQkJCQlpZiAocHJlYyB8fCBmbGFncyAmIEFMVCkKKwkJCQkJCVBSSU5UKGRlY2ltYWxfcG9pbnQsIDEpOworCQkJCQlQQUQoLWV4cHQsIHplcm9lcyk7CisJCQkJCS8qIGFscmVhZHkgaGFuZGxlZCBpbml0aWFsIDAncyAqLworCQkJCQlwcmVjICs9IGV4cHQ7CisgCQkJCX0gZWxzZSB7CisJCQkJCVBSSU5UQU5EUEFEKGNwLCBkdG9hZW5kLCBsZWFkLCB6ZXJvZXMpOworCQkJCQljcCArPSBsZWFkOworCQkJCQlpZiAocHJlYyB8fCBmbGFncyAmIEFMVCkKKwkJCQkJCVBSSU5UKGRlY2ltYWxfcG9pbnQsIDEpOworCQkJCX0KKwkJCQlQUklOVEFORFBBRChjcCwgZHRvYWVuZCwgcHJlYywgemVyb2VzKTsKKwkJCX0gZWxzZSB7CS8qICVbZUVdIG9yIHN1ZmZpY2llbnRseSBsb25nICVbZ0ddICovCisJCQkJaWYgKHByZWMgPiAxIHx8IGZsYWdzICYgQUxUKSB7CisJCQkJCWJ1ZlswXSA9ICpjcCsrOworCQkJCQlidWZbMV0gPSAqZGVjaW1hbF9wb2ludDsKKwkJCQkJUFJJTlQoYnVmLCAyKTsKKwkJCQkJUFJJTlQoY3AsIG5kaWctMSk7CisJCQkJCVBBRChwcmVjIC0gbmRpZywgemVyb2VzKTsKKwkJCQl9IGVsc2UgeyAvKiBYZVlZWSAqLworCQkJCQlQUklOVChjcCwgMSk7CisJCQkJfQorCQkJCVBSSU5UKGV4cHN0ciwgZXhwc2l6ZSk7CisJCQl9CisJCX0KKyNlbHNlCisJCVBSSU5UKGNwLCBzaXplKTsKKyNlbmRpZgorCQkvKiBsZWZ0LWFkanVzdGluZyBwYWRkaW5nIChhbHdheXMgYmxhbmspICovCisJCWlmIChmbGFncyAmIExBREpVU1QpCisJCQlQQUQod2lkdGggLSByZWFsc3osIGJsYW5rcyk7CisKKwkJLyogZmluYWxseSwgYWRqdXN0IHJldCAqLworCQlpZiAod2lkdGggPCByZWFsc3opCisJCQl3aWR0aCA9IHJlYWxzejsKKwkJaWYgKHdpZHRoID4gSU5UX01BWCAtIHJldCkKKwkJCWdvdG8gb3ZlcmZsb3c7CisJCXJldCArPSB3aWR0aDsKKworCQlGTFVTSCgpOwkvKiBjb3B5IG91dCB0aGUgSS9PIHZlY3RvcnMgKi8KKwl9Citkb25lOgorCUZMVVNIKCk7CitlcnJvcjoKKwl2YV9lbmQob3JnYXApOworCWlmIChfX3NmZXJyb3IoZnApKQorCQlyZXQgPSAtMTsKKwlnb3RvIGZpbmlzaDsKKworb3ZlcmZsb3c6CisJZXJybm8gPSBFTk9NRU07CisJcmV0ID0gLTE7CisKK2ZpbmlzaDoKKyNpZmRlZiBQUklOVEZfV0lERV9DSEFSCisJaWYgKGNvbnZidWYpCisJCWZyZWUoY29udmJ1Zik7CisjZW5kaWYKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCWlmIChkdG9hcmVzdWx0KQorCQlfX2ZyZWVkdG9hKGR0b2FyZXN1bHQpOworI2VuZGlmCisJaWYgKGFyZ3RhYmxlICE9IE5VTEwgJiYgYXJndGFibGUgIT0gc3RhdGFyZ3RhYmxlKSB7CisJCW11bm1hcChhcmd0YWJsZSwgYXJndGFibGVzaXopOworCQlhcmd0YWJsZSA9IE5VTEw7CisJfQorCXJldHVybiAocmV0KTsKK30KKworLyoKKyAqIFR5cGUgaWRzIGZvciBhcmd1bWVudCB0eXBlIHRhYmxlLgorICovCisjZGVmaW5lIFRfVU5VU0VECTAKKyNkZWZpbmUgVF9TSE9SVAkJMQorI2RlZmluZSBUX1VfU0hPUlQJMgorI2RlZmluZSBUUF9TSE9SVAkzCisjZGVmaW5lIFRfSU5UCQk0CisjZGVmaW5lIFRfVV9JTlQJCTUKKyNkZWZpbmUgVFBfSU5UCQk2CisjZGVmaW5lIFRfTE9ORwkJNworI2RlZmluZSBUX1VfTE9ORwk4CisjZGVmaW5lIFRQX0xPTkcJCTkKKyNkZWZpbmUgVF9MTE9ORwkJMTAKKyNkZWZpbmUgVF9VX0xMT05HCTExCisjZGVmaW5lIFRQX0xMT05HCTEyCisjZGVmaW5lIFRfRE9VQkxFCTEzCisjZGVmaW5lIFRfTE9OR19ET1VCTEUJMTQKKyNkZWZpbmUgVFBfQ0hBUgkJMTUKKyNkZWZpbmUgVFBfVk9JRAkJMTYKKyNkZWZpbmUgVF9QVFJJTlQJMTcKKyNkZWZpbmUgVFBfUFRSSU5UCTE4CisjZGVmaW5lIFRfU0laRUlOVAkxOQorI2RlZmluZSBUX1NTSVpFSU5UCTIwCisjZGVmaW5lIFRQX1NTSVpFSU5UCTIxCisjZGVmaW5lIFRfTUFYSU5UCTIyCisjZGVmaW5lIFRfTUFYVUlOVAkyMworI2RlZmluZSBUUF9NQVhJTlQJMjQKKyNkZWZpbmUgVF9DSEFSCQkyNQorI2RlZmluZSBUX1VfQ0hBUgkyNgorI2RlZmluZSBUX1dJTlQJCTI3CisjZGVmaW5lIFRQX1dDSEFSCTI4CisKKy8qCisgKiBGaW5kIGFsbCBhcmd1bWVudHMgd2hlbiBhIHBvc2l0aW9uYWwgcGFyYW1ldGVyIGlzIGVuY291bnRlcmVkLiAgUmV0dXJucyBhCisgKiB0YWJsZSwgaW5kZXhlZCBieSBhcmd1bWVudCBudW1iZXIsIG9mIHBvaW50ZXJzIHRvIGVhY2ggYXJndW1lbnRzLiAgVGhlCisgKiBpbml0aWFsIGFyZ3VtZW50IHRhYmxlIHNob3VsZCBiZSBhbiBhcnJheSBvZiBTVEFUSUNfQVJHX1RCTF9TSVpFIGVudHJpZXMuCisgKiBJdCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSBtbWFwLWVkIG9uZSBpZiBpdCBvdmVyZmxvd3MgKG1hbGxvYyBjYW5ub3QgYmUKKyAqIHVzZWQgc2luY2Ugd2UgYXJlIGF0dGVtcHRpbmcgdG8gbWFrZSBzbnByaW50ZiB0aHJlYWQgc2FmZSwgYW5kIGFsbG9jYSBpcworICogcHJvYmxlbWF0aWMgc2luY2Ugd2UgaGF2ZSBuZXN0ZWQgZnVuY3Rpb25zLi4pCisgKi8KK3N0YXRpYyBpbnQKK19fZmluZF9hcmd1bWVudHMoY29uc3QgY2hhciAqZm10MCwgdmFfbGlzdCBhcCwgdW5pb24gYXJnICoqYXJndGFibGUsCisgICAgc2l6ZV90ICphcmd0YWJsZXNpeikKK3sKKwljaGFyICpmbXQ7CQkvKiBmb3JtYXQgc3RyaW5nICovCisJaW50IGNoOwkJCS8qIGNoYXJhY3RlciBmcm9tIGZtdCAqLworCWludCBuLCBuMjsJCS8qIGhhbmR5IGludGVnZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCisJY2hhciAqY3A7CQkvKiBoYW5keSBjaGFyIHBvaW50ZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCisJaW50IGZsYWdzOwkJLyogZmxhZ3MgYXMgYWJvdmUgKi8KKwl1bnNpZ25lZCBjaGFyICp0eXBldGFibGU7IC8qIHRhYmxlIG9mIHR5cGVzICovCisJdW5zaWduZWQgY2hhciBzdGF0dHlwZXRhYmxlW1NUQVRJQ19BUkdfVEJMX1NJWkVdOworCWludCB0YWJsZXNpemU7CQkvKiBjdXJyZW50IHNpemUgb2YgdHlwZSB0YWJsZSAqLworCWludCB0YWJsZW1heDsJCS8qIGxhcmdlc3QgdXNlZCBpbmRleCBpbiB0YWJsZSAqLworCWludCBuZXh0YXJnOwkJLyogMS1iYXNlZCBhcmd1bWVudCBpbmRleCAqLworCWludCByZXQgPSAwOwkJLyogcmV0dXJuIHZhbHVlICovCisJd2NoYXJfdCB3YzsKKwltYnN0YXRlX3QgcHM7CisKKwkvKgorCSAqIEFkZCBhbiBhcmd1bWVudCB0eXBlIHRvIHRoZSB0YWJsZSwgZXhwYW5kaW5nIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKyNkZWZpbmUgQUREVFlQRSh0eXBlKSBcCisJKChuZXh0YXJnID49IHRhYmxlc2l6ZSkgPyBcCisJCV9fZ3Jvd190eXBlX3RhYmxlKCZ0eXBldGFibGUsICZ0YWJsZXNpemUpIDogMCwgXAorCShuZXh0YXJnID4gdGFibGVtYXgpID8gdGFibGVtYXggPSBuZXh0YXJnIDogMCwgXAorCXR5cGV0YWJsZVtuZXh0YXJnKytdID0gdHlwZSkKKworI2RlZmluZQlBRERTQVJHKCkgXAorICAgICAgICAoKGZsYWdzJk1BWElOVCkgPyBBRERUWVBFKFRfTUFYSU5UKSA6IFwKKwkgICAgKChmbGFncyZQVFJJTlQpID8gQUREVFlQRShUX1BUUklOVCkgOiBcCisJICAgICgoZmxhZ3MmU0laRUlOVCkgPyBBRERUWVBFKFRfU1NJWkVJTlQpIDogXAorCSAgICAoKGZsYWdzJkxMT05HSU5UKSA/IEFERFRZUEUoVF9MTE9ORykgOiBcCisJICAgICgoZmxhZ3MmTE9OR0lOVCkgPyBBRERUWVBFKFRfTE9ORykgOiBcCisJICAgICgoZmxhZ3MmU0hPUlRJTlQpID8gQUREVFlQRShUX1NIT1JUKSA6IFwKKwkgICAgKChmbGFncyZDSEFSSU5UKSA/IEFERFRZUEUoVF9DSEFSKSA6IEFERFRZUEUoVF9JTlQpKSkpKSkpKQorCisjZGVmaW5lCUFERFVBUkcoKSBcCisgICAgICAgICgoZmxhZ3MmTUFYSU5UKSA/IEFERFRZUEUoVF9NQVhVSU5UKSA6IFwKKwkgICAgKChmbGFncyZQVFJJTlQpID8gQUREVFlQRShUX1BUUklOVCkgOiBcCisJICAgICgoZmxhZ3MmU0laRUlOVCkgPyBBRERUWVBFKFRfU0laRUlOVCkgOiBcCisJICAgICgoZmxhZ3MmTExPTkdJTlQpID8gQUREVFlQRShUX1VfTExPTkcpIDogXAorCSAgICAoKGZsYWdzJkxPTkdJTlQpID8gQUREVFlQRShUX1VfTE9ORykgOiBcCisJICAgICgoZmxhZ3MmU0hPUlRJTlQpID8gQUREVFlQRShUX1VfU0hPUlQpIDogXAorCSAgICAoKGZsYWdzJkNIQVJJTlQpID8gQUREVFlQRShUX1VfQ0hBUikgOiBBRERUWVBFKFRfVV9JTlQpKSkpKSkpKQorCisJLyoKKwkgKiBBZGQgKiBhcmd1bWVudHMgdG8gdGhlIHR5cGUgYXJyYXkuCisJICovCisjZGVmaW5lIEFEREFTVEVSKCkgXAorCW4yID0gMDsgXAorCWNwID0gZm10OyBcCisJd2hpbGUgKGlzX2RpZ2l0KCpjcCkpIHsgXAorCQlBUFBFTkRfRElHSVQobjIsICpjcCk7IFwKKwkJY3ArKzsgXAorCX0gXAorCWlmICgqY3AgPT0gJyQnKSB7IFwKKwkJaW50IGhvbGQgPSBuZXh0YXJnOyBcCisJCW5leHRhcmcgPSBuMjsgXAorCQlBRERUWVBFKFRfSU5UKTsgXAorCQluZXh0YXJnID0gaG9sZDsgXAorCQlmbXQgPSArK2NwOyBcCisJfSBlbHNlIHsgXAorCQlBRERUWVBFKFRfSU5UKTsgXAorCX0KKwlmbXQgPSAoY2hhciAqKWZtdDA7CisJdHlwZXRhYmxlID0gc3RhdHR5cGV0YWJsZTsKKwl0YWJsZXNpemUgPSBTVEFUSUNfQVJHX1RCTF9TSVpFOworCXRhYmxlbWF4ID0gMDsKKwluZXh0YXJnID0gMTsKKwltZW1zZXQodHlwZXRhYmxlLCBUX1VOVVNFRCwgU1RBVElDX0FSR19UQkxfU0laRSk7CisJbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisKKwkvKgorCSAqIFNjYW4gdGhlIGZvcm1hdCBmb3IgY29udmVyc2lvbnMgKGAlJyBjaGFyYWN0ZXIpLgorCSAqLworCWZvciAoOzspIHsKKwkJY3AgPSBmbXQ7CisJCXdoaWxlICgobiA9IG1icnRvd2MoJndjLCBmbXQsIE1CX0NVUl9NQVgsICZwcykpID4gMCkgeworCQkJZm10ICs9IG47CisJCQlpZiAod2MgPT0gJyUnKSB7CisJCQkJZm10LS07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKG4gPD0gMCkKKwkJCWdvdG8gZG9uZTsKKwkJZm10Kys7CQkvKiBza2lwIG92ZXIgJyUnICovCisKKwkJZmxhZ3MgPSAwOworCityZmxhZzoJCWNoID0gKmZtdCsrOworcmVzd2l0Y2g6CXN3aXRjaCAoY2gpIHsKKwkJY2FzZSAnICc6CisJCWNhc2UgJyMnOgorCQljYXNlICdcJyc6CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcqJzoKKwkJCUFEREFTVEVSKCk7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICctJzoKKwkJY2FzZSAnKyc6CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcuJzoKKwkJCWlmICgoY2ggPSAqZm10KyspID09ICcqJykgeworCQkJCUFEREFTVEVSKCk7CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCXdoaWxlIChpc19kaWdpdChjaCkpIHsKKwkJCQljaCA9ICpmbXQrKzsKKwkJCX0KKwkJCWdvdG8gcmVzd2l0Y2g7CisJCWNhc2UgJzAnOgorCQkJZ290byByZmxhZzsKKwkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCW4gPSAwOworCQkJZG8geworCQkJCUFQUEVORF9ESUdJVChuICxjaCk7CisJCQkJY2ggPSAqZm10Kys7CisJCQl9IHdoaWxlIChpc19kaWdpdChjaCkpOworCQkJaWYgKGNoID09ICckJykgeworCQkJCW5leHRhcmcgPSBuOworCQkJCWdvdG8gcmZsYWc7CisJCQl9CisJCQlnb3RvIHJlc3dpdGNoOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgJ0wnOgorCQkJZmxhZ3MgfD0gTE9OR0RCTDsKKwkJCWdvdG8gcmZsYWc7CisjZW5kaWYKKwkJY2FzZSAnaCc6CisJCQlpZiAoKmZtdCA9PSAnaCcpIHsKKwkJCQlmbXQrKzsKKwkJCQlmbGFncyB8PSBDSEFSSU5UOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBTSE9SVElOVDsKKwkJCX0KKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ2onOgorCQkJZmxhZ3MgfD0gTUFYSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnbCc6CisJCQlpZiAoKmZtdCA9PSAnbCcpIHsKKwkJCQlmbXQrKzsKKwkJCQlmbGFncyB8PSBMTE9OR0lOVDsKKwkJCX0gZWxzZSB7CisJCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCX0KKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3EnOgorCQkJZmxhZ3MgfD0gTExPTkdJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICd0JzoKKwkJCWZsYWdzIHw9IFBUUklOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3onOgorCQkJZmxhZ3MgfD0gU0laRUlOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ2MnOgorI2lmZGVmIFBSSU5URl9XSURFX0NIQVIKKwkJCWlmIChmbGFncyAmIExPTkdJTlQpCisJCQkJQUREVFlQRShUX1dJTlQpOworCQkJZWxzZQorI2VuZGlmCisJCQkJQUREVFlQRShUX0lOVCk7CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ2QnOgorCQljYXNlICdpJzoKKwkJCUFERFNBUkcoKTsKKwkJCWJyZWFrOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgJ2EnOgorCQljYXNlICdBJzoKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ0UnOgorCQljYXNlICdmJzoKKwkJY2FzZSAnRic6CisJCWNhc2UgJ2cnOgorCQljYXNlICdHJzoKKwkJCWlmIChmbGFncyAmIExPTkdEQkwpCisJCQkJQUREVFlQRShUX0xPTkdfRE9VQkxFKTsKKwkJCWVsc2UKKwkJCQlBRERUWVBFKFRfRE9VQkxFKTsKKwkJCWJyZWFrOworI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCisjaWZuZGVmIE5PX1BSSU5URl9QRVJDRU5UX04KKwkJY2FzZSAnbic6CisJCQlpZiAoZmxhZ3MgJiBMTE9OR0lOVCkKKwkJCQlBRERUWVBFKFRQX0xMT05HKTsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTE9OR0lOVCkKKwkJCQlBRERUWVBFKFRQX0xPTkcpOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVElOVCkKKwkJCQlBRERUWVBFKFRQX1NIT1JUKTsKKwkJCWVsc2UgaWYgKGZsYWdzICYgUFRSSU5UKQorCQkJCUFERFRZUEUoVFBfUFRSSU5UKTsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0laRUlOVCkKKwkJCQlBRERUWVBFKFRQX1NTSVpFSU5UKTsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTUFYSU5UKQorCQkJCUFERFRZUEUoVFBfTUFYSU5UKTsKKwkJCWVsc2UKKwkJCQlBRERUWVBFKFRQX0lOVCk7CisJCQljb250aW51ZTsJLyogbm8gb3V0cHV0ICovCisjZW5kaWYgLyogTk9fUFJJTlRGX1BFUkNFTlRfTiAqLworCQljYXNlICdPJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnbyc6CisJCQlBRERVQVJHKCk7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlBRERUWVBFKFRQX1ZPSUQpOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorI2lmZGVmIFBSSU5URl9XSURFX0NIQVIKKwkJCWlmIChmbGFncyAmIExPTkdJTlQpCisJCQkJQUREVFlQRShUUF9XQ0hBUik7CisJCQllbHNlCisjZW5kaWYKKwkJCQlBRERUWVBFKFRQX0NIQVIpOworCQkJYnJlYWs7CisJCWNhc2UgJ1UnOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICd1JzoKKwkJY2FzZSAnWCc6CisJCWNhc2UgJ3gnOgorCQkJQUREVUFSRygpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CS8qICIlPyIgcHJpbnRzID8sIHVubGVzcyA/IGlzIE5VTCAqLworCQkJaWYgKGNoID09ICdcMCcpCisJCQkJZ290byBkb25lOworCQkJYnJlYWs7CisJCX0KKwl9Citkb25lOgorCS8qCisJICogQnVpbGQgdGhlIGFyZ3VtZW50IHRhYmxlLgorCSAqLworCWlmICh0YWJsZW1heCA+PSBTVEFUSUNfQVJHX1RCTF9TSVpFKSB7CisJCSphcmd0YWJsZXNpeiA9IHNpemVvZih1bmlvbiBhcmcpICogKHRhYmxlbWF4ICsgMSk7CisJCSphcmd0YWJsZSA9IG1tYXAoTlVMTCwgKmFyZ3RhYmxlc2l6LAorCQkgICAgUFJPVF9XUklURXxQUk9UX1JFQUQsIE1BUF9BTk9OfE1BUF9QUklWQVRFLCAtMSwgMCk7CisJCWlmICgqYXJndGFibGUgPT0gTUFQX0ZBSUxFRCkKKwkJCXJldHVybiAoLTEpOworCX0KKworI2lmIDAKKwkvKiBYWFggaXMgdGhpcyByZXF1aXJlZD8gKi8KKwkoKmFyZ3RhYmxlKVswXS5pbnRhcmcgPSAwOworI2VuZGlmCisJZm9yIChuID0gMTsgbiA8PSB0YWJsZW1heDsgbisrKSB7CisJCXN3aXRjaCAodHlwZXRhYmxlW25dKSB7CisJCWNhc2UgVF9VTlVTRUQ6CisJCWNhc2UgVF9DSEFSOgorCQljYXNlIFRfVV9DSEFSOgorCQljYXNlIFRfU0hPUlQ6CisJCWNhc2UgVF9VX1NIT1JUOgorCQljYXNlIFRfSU5UOgorCQkJKCphcmd0YWJsZSlbbl0uaW50YXJnID0gdmFfYXJnKGFwLCBpbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfU0hPUlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5wc2hvcnRhcmcgPSB2YV9hcmcoYXAsIHNob3J0ICopOworCQkJYnJlYWs7CisJCWNhc2UgVF9VX0lOVDoKKwkJCSgqYXJndGFibGUpW25dLnVpbnRhcmcgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGludCk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9JTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5waW50YXJnID0gdmFfYXJnKGFwLCBpbnQgKik7CisJCQlicmVhazsKKwkJY2FzZSBUX0xPTkc6CisJCQkoKmFyZ3RhYmxlKVtuXS5sb25nYXJnID0gdmFfYXJnKGFwLCBsb25nKTsKKwkJCWJyZWFrOworCQljYXNlIFRfVV9MT05HOgorCQkJKCphcmd0YWJsZSlbbl0udWxvbmdhcmcgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGxvbmcpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfTE9ORzoKKwkJCSgqYXJndGFibGUpW25dLnBsb25nYXJnID0gdmFfYXJnKGFwLCBsb25nICopOworCQkJYnJlYWs7CisJCWNhc2UgVF9MTE9ORzoKKwkJCSgqYXJndGFibGUpW25dLmxvbmdsb25nYXJnID0gdmFfYXJnKGFwLCBsb25nIGxvbmcpOworCQkJYnJlYWs7CisJCWNhc2UgVF9VX0xMT05HOgorCQkJKCphcmd0YWJsZSlbbl0udWxvbmdsb25nYXJnID0gdmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nIGxvbmcpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfTExPTkc6CisJCQkoKmFyZ3RhYmxlKVtuXS5wbG9uZ2xvbmdhcmcgPSB2YV9hcmcoYXAsIGxvbmcgbG9uZyAqKTsKKwkJCWJyZWFrOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgVF9ET1VCTEU6CisJCQkoKmFyZ3RhYmxlKVtuXS5kb3VibGVhcmcgPSB2YV9hcmcoYXAsIGRvdWJsZSk7CisJCQlicmVhazsKKwkJY2FzZSBUX0xPTkdfRE9VQkxFOgorCQkJKCphcmd0YWJsZSlbbl0ubG9uZ2RvdWJsZWFyZyA9IHZhX2FyZyhhcCwgbG9uZyBkb3VibGUpOworCQkJYnJlYWs7CisjZW5kaWYKKwkJY2FzZSBUUF9DSEFSOgorCQkJKCphcmd0YWJsZSlbbl0ucGNoYXJhcmcgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJCQlicmVhazsKKwkJY2FzZSBUUF9WT0lEOgorCQkJKCphcmd0YWJsZSlbbl0ucHZvaWRhcmcgPSB2YV9hcmcoYXAsIHZvaWQgKik7CisJCQlicmVhazsKKwkJY2FzZSBUX1BUUklOVDoKKwkJCSgqYXJndGFibGUpW25dLnB0cmRpZmZhcmcgPSB2YV9hcmcoYXAsIHB0cmRpZmZfdCk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9QVFJJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5wcHRyZGlmZmFyZyA9IHZhX2FyZyhhcCwgcHRyZGlmZl90ICopOworCQkJYnJlYWs7CisJCWNhc2UgVF9TSVpFSU5UOgorCQkJKCphcmd0YWJsZSlbbl0uc2l6ZWFyZyA9IHZhX2FyZyhhcCwgc2l6ZV90KTsKKwkJCWJyZWFrOworCQljYXNlIFRfU1NJWkVJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5zc2l6ZWFyZyA9IHZhX2FyZyhhcCwgc3NpemVfdCk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9TU0laRUlOVDoKKwkJCSgqYXJndGFibGUpW25dLnBzc2l6ZWFyZyA9IHZhX2FyZyhhcCwgc3NpemVfdCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfTUFYSU5UOgorCQkJKCphcmd0YWJsZSlbbl0uaW50bWF4YXJnID0gdmFfYXJnKGFwLCBpbnRtYXhfdCk7CisJCQlicmVhazsKKwkJY2FzZSBUX01BWFVJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS51aW50bWF4YXJnID0gdmFfYXJnKGFwLCB1aW50bWF4X3QpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfTUFYSU5UOgorCQkJKCphcmd0YWJsZSlbbl0ucGludG1heGFyZyA9IHZhX2FyZyhhcCwgaW50bWF4X3QgKik7CisJCQlicmVhazsKKyNpZmRlZiBQUklOVEZfV0lERV9DSEFSCisJCWNhc2UgVF9XSU5UOgorCQkJKCphcmd0YWJsZSlbbl0ud2ludGFyZyA9IHZhX2FyZyhhcCwgd2ludF90KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1dDSEFSOgorCQkJKCphcmd0YWJsZSlbbl0ucHdjaGFyYXJnID0gdmFfYXJnKGFwLCB3Y2hhcl90ICopOworCQkJYnJlYWs7CisjZW5kaWYKKwkJfQorCX0KKwlnb3RvIGZpbmlzaDsKKworb3ZlcmZsb3c6CisJZXJybm8gPSBFTk9NRU07CisJcmV0ID0gLTE7CisKK2ZpbmlzaDoKKwlpZiAodHlwZXRhYmxlICE9IE5VTEwgJiYgdHlwZXRhYmxlICE9IHN0YXR0eXBldGFibGUpIHsKKwkJbXVubWFwKHR5cGV0YWJsZSwgKmFyZ3RhYmxlc2l6KTsKKwkJdHlwZXRhYmxlID0gTlVMTDsKKwl9CisJcmV0dXJuIChyZXQpOworfQorCisvKgorICogSW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHR5cGUgdGFibGUuCisgKi8KK3N0YXRpYyBpbnQKK19fZ3Jvd190eXBlX3RhYmxlKHVuc2lnbmVkIGNoYXIgKip0eXBldGFibGUsIGludCAqdGFibGVzaXplKQoreworCXVuc2lnbmVkIGNoYXIgKm9sZHRhYmxlID0gKnR5cGV0YWJsZTsKKwlpbnQgbmV3c2l6ZSA9ICp0YWJsZXNpemUgKiAyOworCisJaWYgKG5ld3NpemUgPCBnZXRwYWdlc2l6ZSgpKQorCQluZXdzaXplID0gZ2V0cGFnZXNpemUoKTsKKworCWlmICgqdGFibGVzaXplID09IFNUQVRJQ19BUkdfVEJMX1NJWkUpIHsKKwkJKnR5cGV0YWJsZSA9IG1tYXAoTlVMTCwgbmV3c2l6ZSwgUFJPVF9XUklURXxQUk9UX1JFQUQsCisJCSAgICBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIDApOworCQlpZiAoKnR5cGV0YWJsZSA9PSBNQVBfRkFJTEVEKQorCQkJcmV0dXJuICgtMSk7CisJCWJjb3B5KG9sZHRhYmxlLCAqdHlwZXRhYmxlLCAqdGFibGVzaXplKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBjaGFyICpuZXcgPSBtbWFwKE5VTEwsIG5ld3NpemUsIFBST1RfV1JJVEV8UFJPVF9SRUFELAorCQkgICAgTUFQX0FOT058TUFQX1BSSVZBVEUsIC0xLCAwKTsKKwkJaWYgKG5ldyA9PSBNQVBfRkFJTEVEKQorCQkJcmV0dXJuICgtMSk7CisJCW1lbW1vdmUobmV3LCAqdHlwZXRhYmxlLCAqdGFibGVzaXplKTsKKwkJbXVubWFwKCp0eXBldGFibGUsICp0YWJsZXNpemUpOworCQkqdHlwZXRhYmxlID0gbmV3OworCX0KKwltZW1zZXQoKnR5cGV0YWJsZSArICp0YWJsZXNpemUsIFRfVU5VU0VELCAobmV3c2l6ZSAtICp0YWJsZXNpemUpKTsKKworCSp0YWJsZXNpemUgPSBuZXdzaXplOworCXJldHVybiAoMCk7Cit9CisKKyAKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorc3RhdGljIGludAorZXhwb25lbnQoY2hhciAqcDAsIGludCBleHAsIGludCBmbXRjaCkKK3sKKwljaGFyICpwLCAqdDsKKwljaGFyIGV4cGJ1ZltNQVhFWFBESUddOworCisJcCA9IHAwOworCSpwKysgPSBmbXRjaDsKKwlpZiAoZXhwIDwgMCkgeworCQlleHAgPSAtZXhwOworCQkqcCsrID0gJy0nOworCX0gZWxzZQorCQkqcCsrID0gJysnOworCXQgPSBleHBidWYgKyBNQVhFWFBESUc7CisJaWYgKGV4cCA+IDkpIHsKKwkJZG8geworCQkJKi0tdCA9IHRvX2NoYXIoZXhwICUgMTApOworCQl9IHdoaWxlICgoZXhwIC89IDEwKSA+IDkpOworCQkqLS10ID0gdG9fY2hhcihleHApOworCQlmb3IgKDsgdCA8IGV4cGJ1ZiArIE1BWEVYUERJRzsgKnArKyA9ICp0KyspCisJCQkvKiBub3RoaW5nICovOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEV4cG9uZW50cyBmb3IgZGVjaW1hbCBmbG9hdGluZyBwb2ludCBjb252ZXJzaW9ucworCQkgKiAoJVtlRWdHXSkgbXVzdCBiZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBsb25nLAorCQkgKiB3aGVyZWFzIGV4cG9uZW50cyBmb3IgaGV4YWRlY2ltYWwgY29udmVyc2lvbnMgY2FuCisJCSAqIGJlIG9ubHkgb25lIGNoYXJhY3RlciBsb25nLgorCQkgKi8KKwkJaWYgKGZtdGNoID09ICdlJyB8fCBmbXRjaCA9PSAnRScpCisJCQkqcCsrID0gJzAnOworCQkqcCsrID0gdG9fY2hhcihleHApOworCX0KKwlyZXR1cm4gKHAgLSBwMCk7Cit9CisjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZnNjYW5mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZWZlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZzY2FuZi5jCkBAIC0wLDAgKzEsOTY5IEBACisvKgkkT3BlbkJTRDogdmZzY2FuZi5jLHYgMS4zMSAyMDE0LzAzLzE5IDA1OjE3OjAxIGd1ZW50aGVyIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHdjdHlwZS5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKyNpbmNsdWRlICJmbG9hdGlvLmgiCisjZW5kaWYKKworI2RlZmluZQlCVUYJCTUxMwkvKiBNYXhpbXVtIGxlbmd0aCBvZiBudW1lcmljIHN0cmluZy4gKi8KKworLyoKKyAqIEZsYWdzIHVzZWQgZHVyaW5nIGNvbnZlcnNpb24uCisgKi8KKyNkZWZpbmUJTE9ORwkJMHgwMDAwMQkvKiBsOiBsb25nIG9yIGRvdWJsZSAqLworI2RlZmluZQlMT05HREJMCQkweDAwMDAyCS8qIEw6IGxvbmcgZG91YmxlICovCisjZGVmaW5lCVNIT1JUCQkweDAwMDA0CS8qIGg6IHNob3J0ICovCisjZGVmaW5lCVNIT1JUU0hPUlQJMHgwMDAwOAkvKiBoaDogOCBiaXQgaW50ZWdlciAqLworI2RlZmluZSBMTE9ORwkJMHgwMDAxMAkvKiBsbDogbG9uZyBsb25nICgrIGRlcHJlY2F0ZWQgcTogcXVhZCkgKi8KKyNkZWZpbmUJUE9JTlRFUgkJMHgwMDAyMAkvKiBwOiB2b2lkICogKGFzIGhleCkgKi8KKyNkZWZpbmUJU0laRUlOVAkJMHgwMDA0MAkvKiB6OiAoc2lnbmVkKSBzaXplX3QgKi8KKyNkZWZpbmUJTUFYSU5UCQkweDAwMDgwCS8qIGo6IGludG1heF90ICovCisjZGVmaW5lCVBUUklOVAkJMHgwMDEwMAkvKiB0OiBwdHJkaWZmX3QgKi8KKyNkZWZpbmUJTk9TS0lQCQkweDAwMjAwCS8qIFsgb3IgYzogZG8gbm90IHNraXAgYmxhbmtzICovCisjZGVmaW5lCVNVUFBSRVNTCTB4MDA0MDAJLyogKjogc3VwcHJlc3MgYXNzaWdubWVudCAqLworI2RlZmluZQlVTlNJR05FRAkweDAwODAwCS8qICVbb3VweFhdIGNvbnZlcnNpb25zICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIGluIG51bWVyaWMgY29udmVyc2lvbnMgb25seToKKyAqIFNJR05PSywgSEFWRVNJR04sIE5ESUdJVFMsIERQVE9LLCBhbmQgRVhQT0sgYXJlIGZvciBmbG9hdGluZyBwb2ludDsKKyAqIFNJR05PSywgSEFWRVNJR04sIE5ESUdJVFMsIFBGWE9LLCBhbmQgTlpESUdJVFMgYXJlIGZvciBpbnRlZ3JhbC4KKyAqLworI2RlZmluZQlTSUdOT0sJCTB4MDEwMDAJLyogKy8tIGlzIChzdGlsbCkgbGVnYWwgKi8KKyNkZWZpbmUJSEFWRVNJR04JMHgwMjAwMAkvKiBzaWduIGRldGVjdGVkICovCisjZGVmaW5lCU5ESUdJVFMJCTB4MDQwMDAJLyogbm8gZGlnaXRzIGRldGVjdGVkICovCisKKyNkZWZpbmUJRFBUT0sJCTB4MDgwMDAJLyogKGZsb2F0KSBkZWNpbWFsIHBvaW50IGlzIHN0aWxsIGxlZ2FsICovCisjZGVmaW5lCUVYUE9LCQkweDEwMDAwCS8qIChmbG9hdCkgZXhwb25lbnQgKGUrMywgZXRjKSBzdGlsbCBsZWdhbCAqLworCisjZGVmaW5lCVBGWE9LCQkweDA4MDAwCS8qIDB4IHByZWZpeCBpcyAoc3RpbGwpIGxlZ2FsICovCisjZGVmaW5lCU5aRElHSVRTCTB4MTAwMDAJLyogbm8gemVybyBkaWdpdHMgZGV0ZWN0ZWQgKi8KKworLyoKKyAqIENvbnZlcnNpb24gdHlwZXMuCisgKi8KKyNkZWZpbmUJQ1RfQ0hBUgkJMAkvKiAlYyBjb252ZXJzaW9uICovCisjZGVmaW5lCUNUX0NDTAkJMQkvKiAlWy4uLl0gY29udmVyc2lvbiAqLworI2RlZmluZQlDVF9TVFJJTkcJMgkvKiAlcyBjb252ZXJzaW9uICovCisjZGVmaW5lCUNUX0lOVAkJMwkvKiBpbnRlZ2VyLCBpLmUuLCBzdHJ0b2ltYXggb3Igc3RydG91bWF4ICovCisjZGVmaW5lCUNUX0ZMT0FUCTQJLyogZmxvYXRpbmcsIGkuZS4sIHN0cnRvZCAqLworCisjZGVmaW5lIHVfY2hhciB1bnNpZ25lZCBjaGFyCisjZGVmaW5lIHVfbG9uZyB1bnNpZ25lZCBsb25nCisKK3N0YXRpYyB1X2NoYXIgKl9fc2NjbChjaGFyICosIHVfY2hhciAqKTsKKworLyoKKyAqIEludGVybmFsLCB1bmxvY2tlZCB2ZXJzaW9uIG9mIHZmc2NhbmYKKyAqLworaW50CitfX3N2ZnNjYW5mKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQwLCBfX3ZhX2xpc3QgYXApCit7CisJdV9jaGFyICpmbXQgPSAodV9jaGFyICopZm10MDsKKwlpbnQgYzsJCS8qIGNoYXJhY3RlciBmcm9tIGZvcm1hdCwgb3IgY29udmVyc2lvbiAqLworCXNpemVfdCB3aWR0aDsJLyogZmllbGQgd2lkdGgsIG9yIDAgKi8KKwljaGFyICpwOwkvKiBwb2ludHMgaW50byBhbGwga2luZHMgb2Ygc3RyaW5ncyAqLworCWludCBuOwkJLyogaGFuZHkgaW50ZWdlciAqLworCWludCBmbGFnczsJLyogZmxhZ3MgYXMgZGVmaW5lZCBhYm92ZSAqLworCWNoYXIgKnAwOwkvKiBzYXZlcyBvcmlnaW5hbCB2YWx1ZSBvZiBwIHdoZW4gbmVjZXNzYXJ5ICovCisJaW50IG5hc3NpZ25lZDsJCS8qIG51bWJlciBvZiBmaWVsZHMgYXNzaWduZWQgKi8KKwlpbnQgbnJlYWQ7CQkvKiBudW1iZXIgb2YgY2hhcmFjdGVycyBjb25zdW1lZCBmcm9tIGZwICovCisJaW50IGJhc2U7CQkvKiBiYXNlIGFyZ3VtZW50IHRvIHN0cnRvaW1heC9zdHJ0b3VpbWF4ICovCisJY2hhciBjY2x0YWJbMjU2XTsJLyogY2hhcmFjdGVyIGNsYXNzIHRhYmxlIGZvciAlWy4uLl0gKi8KKwljaGFyIGJ1ZltCVUZdOwkJLyogYnVmZmVyIGZvciBudW1lcmljIGNvbnZlcnNpb25zICovCisjaWZkZWYgU0NBTkZfV0lERV9DSEFSCisJd2NoYXJfdCAqd2NwOwkJLyogaGFuZHkgd2lkZSBjaGFyYWN0ZXIgcG9pbnRlciAqLworCXNpemVfdCBuY29udjsJCS8qIGxlbmd0aCBvZiBtdWx0aWJ5dGUgc2VxdWVuY2UgY29udmVydGVkICovCisJbWJzdGF0ZV90IG1iczsKKyNlbmRpZgorCisJLyogYGJhc2VmaXgnIGlzIHVzZWQgdG8gYXZvaWQgYGlmJyB0ZXN0cyBpbiB0aGUgaW50ZWdlciBzY2FubmVyICovCisJc3RhdGljIHNob3J0IGJhc2VmaXhbMTddID0KKwkJeyAxMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYgfTsKKworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKworCW5hc3NpZ25lZCA9IDA7CisJbnJlYWQgPSAwOworCWJhc2UgPSAwOwkJLyogWFhYIGp1c3QgdG8ga2VlcCBnY2MgaGFwcHkgKi8KKwlmb3IgKDs7KSB7CisJCWMgPSAqZm10Kys7CisJCWlmIChjID09IDApCisJCQlyZXR1cm4gKG5hc3NpZ25lZCk7CisJCWlmIChpc3NwYWNlKGMpKSB7CisJCQl3aGlsZSAoKGZwLT5fciA+IDAgfHwgX19zcmVmaWxsKGZwKSA9PSAwKSAmJgorCQkJICAgIGlzc3BhY2UoKmZwLT5fcCkpCisJCQkJbnJlYWQrKywgZnAtPl9yLS0sIGZwLT5fcCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgIT0gJyUnKQorCQkJZ290byBsaXRlcmFsOworCQl3aWR0aCA9IDA7CisJCWZsYWdzID0gMDsKKwkJLyoKKwkJICogc3dpdGNoIG9uIHRoZSBmb3JtYXQuICBjb250aW51ZSBpZiBkb25lOworCQkgKiBicmVhayBvbmNlIGZvcm1hdCB0eXBlIGlzIGRlcml2ZWQuCisJCSAqLworYWdhaW46CQljID0gKmZtdCsrOworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnJSc6CitsaXRlcmFsOgorCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCisJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJaWYgKCpmcC0+X3AgIT0gYykKKwkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQlmcC0+X3ItLSwgZnAtPl9wKys7CisJCQlucmVhZCsrOworCQkJY29udGludWU7CisKKwkJY2FzZSAnKic6CisJCQlmbGFncyB8PSBTVVBQUkVTUzsKKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ2onOgorCQkJZmxhZ3MgfD0gTUFYSU5UOworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAnTCc6CisJCQlmbGFncyB8PSBMT05HREJMOworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAnaCc6CisJCQlpZiAoKmZtdCA9PSAnaCcpIHsKKwkJCQlmbXQrKzsKKwkJCQlmbGFncyB8PSBTSE9SVFNIT1JUOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBTSE9SVDsKKwkJCX0KKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ2wnOgorCQkJaWYgKCpmbXQgPT0gJ2wnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gTExPTkc7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IExPTkc7CisJCQl9CisJCQlnb3RvIGFnYWluOworCQljYXNlICdxJzoKKwkJCWZsYWdzIHw9IExMT05HOwkJLyogZGVwcmVjYXRlZCAqLworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAndCc6CisJCQlmbGFncyB8PSBQVFJJTlQ7CisJCQlnb3RvIGFnYWluOworCQljYXNlICd6JzoKKwkJCWZsYWdzIHw9IFNJWkVJTlQ7CisJCQlnb3RvIGFnYWluOworCisJCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKwkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJd2lkdGggPSB3aWR0aCAqIDEwICsgYyAtICcwJzsKKwkJCWdvdG8gYWdhaW47CisKKwkJLyoKKwkJICogQ29udmVyc2lvbnMuCisJCSAqIFRob3NlIG1hcmtlZCBgY29tcGF0JyBhcmUgZm9yIDQuWzEyM11CU0QgY29tcGF0aWJpbGl0eS4KKwkJICoKKwkJICogKEFjY29yZGluZyB0byBBTlNJLCBFIGFuZCBYIGZvcm1hdHMgYXJlIHN1cHBvc2VkCisJCSAqIHRvIHRoZSBzYW1lIGFzIGUgYW5kIHguICBTb3JyeSBhYm91dCB0aGF0LikKKwkJICovCisJCWNhc2UgJ0QnOgkvKiBjb21wYXQgKi8KKwkJCWZsYWdzIHw9IExPTkc7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlICdkJzoKKwkJCWMgPSBDVF9JTlQ7CisJCQliYXNlID0gMTA7CisJCQlicmVhazsKKworCQljYXNlICdpJzoKKwkJCWMgPSBDVF9JTlQ7CisJCQliYXNlID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgJ08nOgkvKiBjb21wYXQgKi8KKwkJCWZsYWdzIHw9IExPTkc7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlICdvJzoKKwkJCWMgPSBDVF9JTlQ7CisJCQlmbGFncyB8PSBVTlNJR05FRDsKKwkJCWJhc2UgPSA4OworCQkJYnJlYWs7CisKKwkJY2FzZSAndSc6CisJCQljID0gQ1RfSU5UOworCQkJZmxhZ3MgfD0gVU5TSUdORUQ7CisJCQliYXNlID0gMTA7CisJCQlicmVhazsKKworCQljYXNlICdYJzoKKwkJY2FzZSAneCc6CisJCQlmbGFncyB8PSBQRlhPSzsJLyogZW5hYmxlIDB4IHByZWZpeGluZyAqLworCQkJYyA9IENUX0lOVDsKKwkJCWZsYWdzIHw9IFVOU0lHTkVEOworCQkJYmFzZSA9IDE2OworCQkJYnJlYWs7CisKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlICdlJzogY2FzZSAnRSc6CisJCWNhc2UgJ2YnOiBjYXNlICdGJzoKKwkJY2FzZSAnZyc6IGNhc2UgJ0cnOgorCQljYXNlICdhJzogY2FzZSAnQSc6CisJCQljID0gQ1RfRkxPQVQ7CisJCQlicmVhazsKKyNlbmRpZgorCisJCWNhc2UgJ3MnOgorCQkJYyA9IENUX1NUUklORzsKKwkJCWJyZWFrOworCisJCWNhc2UgJ1snOgorCQkJZm10ID0gX19zY2NsKGNjbHRhYiwgZm10KTsKKwkJCWZsYWdzIHw9IE5PU0tJUDsKKwkJCWMgPSBDVF9DQ0w7CisJCQlicmVhazsKKworCQljYXNlICdjJzoKKwkJCWZsYWdzIHw9IE5PU0tJUDsKKwkJCWMgPSBDVF9DSEFSOworCQkJYnJlYWs7CisKKwkJY2FzZSAncCc6CS8qIHBvaW50ZXIgZm9ybWF0IGlzIGxpa2UgaGV4ICovCisJCQlmbGFncyB8PSBQT0lOVEVSIHwgUEZYT0s7CisJCQljID0gQ1RfSU5UOworCQkJZmxhZ3MgfD0gVU5TSUdORUQ7CisJCQliYXNlID0gMTY7CisJCQlicmVhazsKKworCQljYXNlICduJzoKKwkJCWlmIChmbGFncyAmIFNVUFBSRVNTKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGZsYWdzICYgU0hPUlRTSE9SVCkKKwkJCQkqdmFfYXJnKGFwLCBzaWduZWQgY2hhciAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVCkKKwkJCQkqdmFfYXJnKGFwLCBzaG9ydCAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HKQorCQkJCSp2YV9hcmcoYXAsIGxvbmcgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0laRUlOVCkKKwkJCQkqdmFfYXJnKGFwLCBzc2l6ZV90ICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIFBUUklOVCkKKwkJCQkqdmFfYXJnKGFwLCBwdHJkaWZmX3QgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTExPTkcpCisJCQkJKnZhX2FyZyhhcCwgbG9uZyBsb25nICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIE1BWElOVCkKKwkJCQkqdmFfYXJnKGFwLCBpbnRtYXhfdCAqKSA9IG5yZWFkOworCQkJZWxzZQorCQkJCSp2YV9hcmcoYXAsIGludCAqKSA9IG5yZWFkOworCQkJY29udGludWU7CisKKwkJLyoKKwkJICogRGlzZ3VzdGluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBoYWNrcy4JWFhYCisJCSAqLworCQljYXNlICdcMCc6CS8qIGNvbXBhdCAqLworCQkJcmV0dXJuIChFT0YpOworCisJCWRlZmF1bHQ6CS8qIGNvbXBhdCAqLworCQkJaWYgKGlzdXBwZXIoYykpCisJCQkJZmxhZ3MgfD0gTE9ORzsKKwkJCWMgPSBDVF9JTlQ7CisJCQliYXNlID0gMTA7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdlIGhhdmUgYSBjb252ZXJzaW9uIHRoYXQgcmVxdWlyZXMgaW5wdXQuCisJCSAqLworCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkKKwkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKworCQkvKgorCQkgKiBDb25zdW1lIGxlYWRpbmcgd2hpdGUgc3BhY2UsIGV4Y2VwdCBmb3IgZm9ybWF0cworCQkgKiB0aGF0IHN1cHByZXNzIHRoaXMuCisJCSAqLworCQlpZiAoKGZsYWdzICYgTk9TS0lQKSA9PSAwKSB7CisJCQl3aGlsZSAoaXNzcGFjZSgqZnAtPl9wKSkgeworCQkJCW5yZWFkKys7CisJCQkJaWYgKC0tZnAtPl9yID4gMCkKKwkJCQkJZnAtPl9wKys7CisJCQkJZWxzZSBpZiAoX19zcmVmaWxsKGZwKSkKKwkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJfQorCQkJLyoKKwkJCSAqIE5vdGUgdGhhdCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGluCisJCQkgKiB0aGUgYnVmZmVyLCBzbyBjb252ZXJzaW9ucyB0aGF0IGRvIG5vdCBzZXQgTk9TS0lQCisJCQkgKiBjYSBubyBsb25nZXIgcmVzdWx0IGluIGFuIGlucHV0IGZhaWx1cmUuCisJCQkgKi8KKwkJfQorCisJCS8qCisJCSAqIERvIHRoZSBjb252ZXJzaW9uLgorCQkgKi8KKwkJc3dpdGNoIChjKSB7CisKKwkJY2FzZSBDVF9DSEFSOgorCQkJLyogc2NhbiBhcmJpdHJhcnkgY2hhcmFjdGVycyAoc2V0cyBOT1NLSVApICovCisJCQlpZiAod2lkdGggPT0gMCkKKwkJCQl3aWR0aCA9IDE7CisjaWZkZWYgU0NBTkZfV0lERV9DSEFSCisJCQlpZiAoZmxhZ3MgJiBMT05HKSB7CisJCQkJaWYgKChmbGFncyAmIFNVUFBSRVNTKSA9PSAwKQorCQkJCQl3Y3AgPSB2YV9hcmcoYXAsIHdjaGFyX3QgKik7CisJCQkJZWxzZQorCQkJCQl3Y3AgPSBOVUxMOworCQkJCW4gPSAwOworCQkJCXdoaWxlICh3aWR0aCAhPSAwKSB7CisJCQkJCWlmIChuID09IE1CX0NVUl9NQVgpIHsKKwkJCQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQl9CisJCQkJCWJ1ZltuKytdID0gKmZwLT5fcDsKKwkJCQkJZnAtPl9wKys7CisJCQkJCWZwLT5fci0tOworCQkJCQliemVybygmbWJzLCBzaXplb2YobWJzKSk7CisJCQkJCW5jb252ID0gbWJydG93Yyh3Y3AsIGJ1ZiwgbiwgJm1icyk7CisJCQkJCWlmIChuY29udiA9PSAoc2l6ZV90KS0xKSB7CisJCQkJCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQkJfQorCQkJCQlpZiAobmNvbnYgPT0gMCAmJiAhKGZsYWdzICYgU1VQUFJFU1MpKQorCQkJCQkJKndjcCA9IEwnXDAnOworCQkJCQlpZiAobmNvbnYgIT0gKHNpemVfdCktMikgeworCQkJCQkJbnJlYWQgKz0gbjsKKwkJCQkJCXdpZHRoLS07CisJCQkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJCQl3Y3ArKzsKKwkJCQkJCW4gPSAwOworCQkJCQl9CisJCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7CisJCQkJCQlpZiAobiAhPSAwKSB7CisJCQkJCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCW5hc3NpZ25lZCsrOworCQkJfSBlbHNlCisjZW5kaWYgLyogU0NBTkZfV0lERV9DSEFSICovCisJCQlpZiAoZmxhZ3MgJiBTVVBQUkVTUykgeworCQkJCXNpemVfdCBzdW0gPSAwOworCQkJCWZvciAoOzspIHsKKwkJCQkJaWYgKChuID0gZnAtPl9yKSA8IHdpZHRoKSB7CisJCQkJCQlzdW0gKz0gbjsKKwkJCQkJCXdpZHRoIC09IG47CisJCQkJCQlmcC0+X3AgKz0gbjsKKwkJCQkJCWlmIChfX3NyZWZpbGwoZnApKSB7CisJCQkJCQkJaWYgKHN1bSA9PSAwKQorCQkJCQkJCSAgICBnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzdW0gKz0gd2lkdGg7CisJCQkJCQlmcC0+X3IgLT0gd2lkdGg7CisJCQkJCQlmcC0+X3AgKz0gd2lkdGg7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlucmVhZCArPSBzdW07CisJCQl9IGVsc2UgeworCQkJCXNpemVfdCByID0gZnJlYWQoKHZvaWQgKil2YV9hcmcoYXAsIGNoYXIgKiksIDEsCisJCQkJICAgIHdpZHRoLCBmcCk7CisKKwkJCQlpZiAociA9PSAwKQorCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJbnJlYWQgKz0gcjsKKwkJCQluYXNzaWduZWQrKzsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgQ1RfQ0NMOgorCQkJLyogc2NhbiBhIChub25lbXB0eSkgY2hhcmFjdGVyIGNsYXNzIChzZXRzIE5PU0tJUCkgKi8KKwkJCWlmICh3aWR0aCA9PSAwKQorCQkJCXdpZHRoID0gKHNpemVfdCl+MDsJLyogYGluZmluaXR5JyAqLworI2lmZGVmIFNDQU5GX1dJREVfQ0hBUgorCQkJLyogdGFrZSBvbmx5IHRob3NlIHRoaW5ncyBpbiB0aGUgY2xhc3MgKi8KKwkJCWlmIChmbGFncyAmIExPTkcpIHsKKwkJCQl3Y2hhcl90IHR3YzsKKwkJCQlpbnQgbmNoYXJzOworCisJCQkJaWYgKChmbGFncyAmIFNVUFBSRVNTKSA9PSAwKQorCQkJCQl3Y3AgPSB2YV9hcmcoYXAsIHdjaGFyX3QgKik7CisJCQkJZWxzZQorCQkJCQl3Y3AgPSAmdHdjOworCQkJCW4gPSAwOworCQkJCW5jaGFycyA9IDA7CisJCQkJd2hpbGUgKHdpZHRoICE9IDApIHsKKwkJCQkJaWYgKG4gPT0gTUJfQ1VSX01BWCkgeworCQkJCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCX0KKwkJCQkJYnVmW24rK10gPSAqZnAtPl9wOworCQkJCQlmcC0+X3ArKzsKKwkJCQkJZnAtPl9yLS07CisJCQkJCWJ6ZXJvKCZtYnMsIHNpemVvZihtYnMpKTsKKwkJCQkJbmNvbnYgPSBtYnJ0b3djKHdjcCwgYnVmLCBuLCAmbWJzKTsKKwkJCQkJaWYgKG5jb252ID09IChzaXplX3QpLTEpIHsKKwkJCQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQl9CisJCQkJCWlmIChuY29udiA9PSAwKQorCQkJCQkJKndjcCA9IEwnXDAnOworCQkJCQlpZiAobmNvbnYgIT0gKHNpemVfdCktMikgeworCQkJCQkJaWYgKHdjdG9iKCp3Y3ApICE9IEVPRiAmJgorCQkJCQkJICAgICFjY2x0YWJbd2N0b2IoKndjcCldKSB7CisJCQkJCQkJd2hpbGUgKG4gIT0gMCkgeworCQkJCQkJCQluLS07CisJCQkJCQkJCXVuZ2V0YyhidWZbbl0sCisJCQkJCQkJCSAgICBmcCk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJbnJlYWQgKz0gbjsKKwkJCQkJCXdpZHRoLS07CisJCQkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJCQl3Y3ArKzsKKwkJCQkJCW5jaGFycysrOworCQkJCQkJbiA9IDA7CisJCQkJCX0KKwkJCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpIHsKKwkJCQkJCWlmIChuICE9IDApIHsKKwkJCQkJCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAobiAhPSAwKSB7CisJCQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJfQorCQkJCW4gPSBuY2hhcnM7CisJCQkJaWYgKG4gPT0gMCkKKwkJCQkJZ290byBtYXRjaF9mYWlsdXJlOworCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKSB7CisJCQkJCSp3Y3AgPSBMJ1wwJzsKKwkJCQkJbmFzc2lnbmVkKys7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYgLyogU0NBTkZfV0lERV9DSEFSICovCisJCQkvKiB0YWtlIG9ubHkgdGhvc2UgdGhpbmdzIGluIHRoZSBjbGFzcyAqLworCQkJaWYgKGZsYWdzICYgU1VQUFJFU1MpIHsKKwkJCQluID0gMDsKKwkJCQl3aGlsZSAoY2NsdGFiWypmcC0+X3BdKSB7CisJCQkJCW4rKywgZnAtPl9yLS0sIGZwLT5fcCsrOworCQkJCQlpZiAoLS13aWR0aCA9PSAwKQorCQkJCQkJYnJlYWs7CisJCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7CisJCQkJCQlpZiAobiA9PSAwKQorCQkJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChuID09IDApCisJCQkJCWdvdG8gbWF0Y2hfZmFpbHVyZTsKKwkJCX0gZWxzZSB7CisJCQkJcDAgPSBwID0gdmFfYXJnKGFwLCBjaGFyICopOworCQkJCXdoaWxlIChjY2x0YWJbKmZwLT5fcF0pIHsKKwkJCQkJZnAtPl9yLS07CisJCQkJCSpwKysgPSAqZnAtPl9wKys7CisJCQkJCWlmICgtLXdpZHRoID09IDApCisJCQkJCQlicmVhazsKKwkJCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpIHsKKwkJCQkJCWlmIChwID09IHAwKQorCQkJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCW4gPSBwIC0gcDA7CisJCQkJaWYgKG4gPT0gMCkKKwkJCQkJZ290byBtYXRjaF9mYWlsdXJlOworCQkJCSpwID0gJ1wwJzsKKwkJCQluYXNzaWduZWQrKzsKKwkJCX0KKwkJCW5yZWFkICs9IG47CisJCQlicmVhazsKKworCQljYXNlIENUX1NUUklORzoKKwkJCS8qIGxpa2UgQ0NMLCBidXQgemVyby1sZW5ndGggc3RyaW5nIE9LLCAmIG5vIE5PU0tJUCAqLworCQkJaWYgKHdpZHRoID09IDApCisJCQkJd2lkdGggPSAoc2l6ZV90KX4wOworI2lmZGVmIFNDQU5GX1dJREVfQ0hBUgorCQkJaWYgKGZsYWdzICYgTE9ORykgeworCQkJCXdjaGFyX3QgdHdjOworCisJCQkJaWYgKChmbGFncyAmIFNVUFBSRVNTKSA9PSAwKQorCQkJCQl3Y3AgPSB2YV9hcmcoYXAsIHdjaGFyX3QgKik7CisJCQkJZWxzZQorCQkJCQl3Y3AgPSAmdHdjOworCQkJCW4gPSAwOworCQkJCXdoaWxlICghaXNzcGFjZSgqZnAtPl9wKSAmJiB3aWR0aCAhPSAwKSB7CisJCQkJCWlmIChuID09IE1CX0NVUl9NQVgpIHsKKwkJCQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQl9CisJCQkJCWJ1ZltuKytdID0gKmZwLT5fcDsKKwkJCQkJZnAtPl9wKys7CisJCQkJCWZwLT5fci0tOworCQkJCQliemVybygmbWJzLCBzaXplb2YobWJzKSk7CisJCQkJCW5jb252ID0gbWJydG93Yyh3Y3AsIGJ1ZiwgbiwgJm1icyk7CisJCQkJCWlmIChuY29udiA9PSAoc2l6ZV90KS0xKSB7CisJCQkJCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQkJfQorCQkJCQlpZiAobmNvbnYgPT0gMCkKKwkJCQkJCSp3Y3AgPSBMJ1wwJzsKKwkJCQkJaWYgKG5jb252ICE9IChzaXplX3QpLTIpIHsKKwkJCQkJCWlmIChpc3dzcGFjZSgqd2NwKSkgeworCQkJCQkJCXdoaWxlIChuICE9IDApIHsKKwkJCQkJCQkJbi0tOworCQkJCQkJCQl1bmdldGMoYnVmW25dLAorCQkJCQkJCQkgICAgZnApOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCW5yZWFkICs9IG47CisJCQkJCQl3aWR0aC0tOworCQkJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCQkJd2NwKys7CisJCQkJCQluID0gMDsKKwkJCQkJfQorCQkJCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkgeworCQkJCQkJaWYgKG4gIT0gMCkgeworCQkJCQkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQkJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKSB7CisJCQkJCSp3Y3AgPSBMJ1wwJzsKKwkJCQkJbmFzc2lnbmVkKys7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYgLyogU0NBTkZfV0lERV9DSEFSICovCisJCQlpZiAoZmxhZ3MgJiBTVVBQUkVTUykgeworCQkJCW4gPSAwOworCQkJCXdoaWxlICghaXNzcGFjZSgqZnAtPl9wKSkgeworCQkJCQluKyssIGZwLT5fci0tLCBmcC0+X3ArKzsKKwkJCQkJaWYgKC0td2lkdGggPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlucmVhZCArPSBuOworCQkJfSBlbHNlIHsKKwkJCQlwMCA9IHAgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJCQkJd2hpbGUgKCFpc3NwYWNlKCpmcC0+X3ApKSB7CisJCQkJCWZwLT5fci0tOworCQkJCQkqcCsrID0gKmZwLT5fcCsrOworCQkJCQlpZiAoLS13aWR0aCA9PSAwKQorCQkJCQkJYnJlYWs7CisJCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCSpwID0gJ1wwJzsKKwkJCQlucmVhZCArPSBwIC0gcDA7CisJCQkJbmFzc2lnbmVkKys7CisJCQl9CisJCQljb250aW51ZTsKKworCQljYXNlIENUX0lOVDoKKwkJCS8qIHNjYW4gYW4gaW50ZWdlciBhcyBpZiBieSBzdHJ0b2ltYXgvc3RydG91bWF4ICovCisjaWZkZWYgaGFyZHdheQorCQkJaWYgKHdpZHRoID09IDAgfHwgd2lkdGggPiBzaXplb2YoYnVmKSAtIDEpCisJCQkJd2lkdGggPSBzaXplb2YoYnVmKSAtIDE7CisjZWxzZQorCQkJLyogc2l6ZV90IGlzIHVuc2lnbmVkLCBoZW5jZSB0aGlzIG9wdGltaXNhdGlvbiAqLworCQkJaWYgKC0td2lkdGggPiBzaXplb2YoYnVmKSAtIDIpCisJCQkJd2lkdGggPSBzaXplb2YoYnVmKSAtIDI7CisJCQl3aWR0aCsrOworI2VuZGlmCisJCQlmbGFncyB8PSBTSUdOT0sgfCBORElHSVRTIHwgTlpESUdJVFM7CisJCQlmb3IgKHAgPSBidWY7IHdpZHRoOyB3aWR0aC0tKSB7CisJCQkJYyA9ICpmcC0+X3A7CisJCQkJLyoKKwkJCQkgKiBTd2l0Y2ggb24gdGhlIGNoYXJhY3RlcjsgYGdvdG8gb2snCisJCQkJICogaWYgd2UgYWNjZXB0IGl0IGFzIGEgcGFydCBvZiBudW1iZXIuCisJCQkJICovCisJCQkJc3dpdGNoIChjKSB7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBkaWdpdCAwIGlzIGFsd2F5cyBsZWdhbCwgYnV0IGlzCisJCQkJICogc3BlY2lhbC4gIEZvciAlaSBjb252ZXJzaW9ucywgaWYgbm8KKwkJCQkgKiBkaWdpdHMgKHplcm8gb3Igbm9uemVybykgaGF2ZSBiZWVuCisJCQkJICogc2Nhbm5lZCAob25seSBzaWducyksIHdlIHdpbGwgaGF2ZQorCQkJCSAqIGJhc2U9PTAuICBJbiB0aGF0IGNhc2UsIHdlIHNob3VsZCBzZXQKKwkJCQkgKiBpdCB0byA4IGFuZCBlbmFibGUgMHggcHJlZml4aW5nLgorCQkJCSAqIEFsc28sIGlmIHdlIGhhdmUgbm90IHNjYW5uZWQgemVybyBkaWdpdHMKKwkJCQkgKiBiZWZvcmUgdGhpcywgZG8gbm90IHR1cm4gb2ZmIHByZWZpeGluZworCQkJCSAqIChzb21lb25lIGVsc2Ugd2lsbCB0dXJuIGl0IG9mZiBpZiB3ZQorCQkJCSAqIGhhdmUgc2Nhbm5lZCBhbnkgbm9uemVybyBkaWdpdHMpLgorCQkJCSAqLworCQkJCWNhc2UgJzAnOgorCQkJCQlpZiAoYmFzZSA9PSAwKSB7CisJCQkJCQliYXNlID0gODsKKwkJCQkJCWZsYWdzIHw9IFBGWE9LOworCQkJCQl9CisJCQkJCWlmIChmbGFncyAmIE5aRElHSVRTKQorCQkJCQkgICAgZmxhZ3MgJj0gfihTSUdOT0t8TlpESUdJVFN8TkRJR0lUUyk7CisJCQkJCWVsc2UKKwkJCQkJICAgIGZsYWdzICY9IH4oU0lHTk9LfFBGWE9LfE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogMSB0aHJvdWdoIDcgYWx3YXlzIGxlZ2FsICovCisJCQkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzoKKwkJCQljYXNlICc0JzogY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzoKKwkJCQkJYmFzZSA9IGJhc2VmaXhbYmFzZV07CisJCQkJCWZsYWdzICY9IH4oU0lHTk9LIHwgUEZYT0sgfCBORElHSVRTKTsKKwkJCQkJZ290byBvazsKKworCQkJCS8qIGRpZ2l0cyA4IGFuZCA5IG9rIGlmZiBkZWNpbWFsIG9yIGhleCAqLworCQkJCWNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCQkJYmFzZSA9IGJhc2VmaXhbYmFzZV07CisJCQkJCWlmIChiYXNlIDw9IDgpCisJCQkJCQlicmVhazsJLyogbm90IGxlZ2FsIGhlcmUgKi8KKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogbGV0dGVycyBvayBpZmYgaGV4ICovCisJCQkJY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzoKKwkJCQljYXNlICdEJzogY2FzZSAnRSc6IGNhc2UgJ0YnOgorCQkJCWNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6CisJCQkJY2FzZSAnZCc6IGNhc2UgJ2UnOiBjYXNlICdmJzoKKwkJCQkJLyogbm8gbmVlZCB0byBmaXggYmFzZSBoZXJlICovCisJCQkJCWlmIChiYXNlIDw9IDEwKQorCQkJCQkJYnJlYWs7CS8qIG5vdCBsZWdhbCBoZXJlICovCisJCQkJCWZsYWdzICY9IH4oU0lHTk9LIHwgUEZYT0sgfCBORElHSVRTKTsKKwkJCQkJZ290byBvazsKKworCQkJCS8qIHNpZ24gb2sgb25seSBhcyBmaXJzdCBjaGFyYWN0ZXIgKi8KKwkJCQljYXNlICcrJzogY2FzZSAnLSc6CisJCQkJCWlmIChmbGFncyAmIFNJR05PSykgeworCQkJCQkJZmxhZ3MgJj0gflNJR05PSzsKKwkJCQkJCWZsYWdzIHw9IEhBVkVTSUdOOworCQkJCQkJZ290byBvazsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCS8qCisJCQkJICogeCBvayBpZmYgZmxhZyBzdGlsbCBzZXQgYW5kIDJuZCBjaGFyIChvcgorCQkJCSAqIDNyZCBjaGFyIGlmIHdlIGhhdmUgYSBzaWduKS4KKwkJCQkgKi8KKwkJCQljYXNlICd4JzogY2FzZSAnWCc6CisJCQkJCWlmICgoZmxhZ3MgJiBQRlhPSykgJiYgcCA9PQorCQkJCQkgICAgYnVmICsgMSArICEhKGZsYWdzICYgSEFWRVNJR04pKSB7CisJCQkJCQliYXNlID0gMTY7CS8qIGlmICVpICovCisJCQkJCQlmbGFncyAmPSB+UEZYT0s7CisJCQkJCQlnb3RvIG9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qCisJCQkJICogSWYgd2UgZ290IGhlcmUsIGMgaXMgbm90IGEgbGVnYWwgY2hhcmFjdGVyCisJCQkJICogZm9yIGEgbnVtYmVyLiAgU3RvcCBhY2N1bXVsYXRpbmcgZGlnaXRzLgorCQkJCSAqLworCQkJCWJyZWFrOworCQlvazoKKwkJCQkvKgorCQkJCSAqIGMgaXMgbGVnYWw6IHN0b3JlIGl0IGFuZCBsb29rIGF0IHRoZSBuZXh0LgorCQkJCSAqLworCQkJCSpwKysgPSBjOworCQkJCWlmICgtLWZwLT5fciA+IDApCisJCQkJCWZwLT5fcCsrOworCQkJCWVsc2UgaWYgKF9fc3JlZmlsbChmcCkpCisJCQkJCWJyZWFrOwkJLyogRU9GICovCisJCQl9CisJCQkvKgorCQkJICogSWYgd2UgaGFkIG9ubHkgYSBzaWduLCBpdCBpcyBubyBnb29kOyBwdXNoCisJCQkgKiBiYWNrIHRoZSBzaWduLiAgSWYgdGhlIG51bWJlciBlbmRzIGluIGB4JywKKwkJCSAqIGl0IHdhcyBbc2lnbl0gJzAnICd4Jywgc28gcHVzaCBiYWNrIHRoZSB4CisJCQkgKiBhbmQgdHJlYXQgaXQgYXMgW3NpZ25dICcwJy4KKwkJCSAqLworCQkJaWYgKGZsYWdzICYgTkRJR0lUUykgeworCQkJCWlmIChwID4gYnVmKQorCQkJCQkodm9pZCkgdW5nZXRjKCoodV9jaGFyICopLS1wLCBmcCk7CisJCQkJZ290byBtYXRjaF9mYWlsdXJlOworCQkJfQorCQkJYyA9ICgodV9jaGFyICopcClbLTFdOworCQkJaWYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnKSB7CisJCQkJLS1wOworCQkJCSh2b2lkKSB1bmdldGMoYywgZnApOworCQkJfQorCQkJaWYgKChmbGFncyAmIFNVUFBSRVNTKSA9PSAwKSB7CisJCQkJdWludG1heF90IHJlczsKKworCQkJCSpwID0gJ1wwJzsKKwkJCQlpZiAoZmxhZ3MgJiBVTlNJR05FRCkKKwkJCQkJcmVzID0gc3RydG91bWF4KGJ1ZiwgTlVMTCwgYmFzZSk7CisJCQkJZWxzZQorCQkJCQlyZXMgPSBzdHJ0b2ltYXgoYnVmLCBOVUxMLCBiYXNlKTsKKwkJCQlpZiAoZmxhZ3MgJiBQT0lOVEVSKQorCQkJCQkqdmFfYXJnKGFwLCB2b2lkICoqKSA9CisJCQkJCSAgICAodm9pZCAqKSh1aW50cHRyX3QpcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgTUFYSU5UKQorCQkJCQkqdmFfYXJnKGFwLCBpbnRtYXhfdCAqKSA9IHJlczsKKwkJCQllbHNlIGlmIChmbGFncyAmIExMT05HKQorCQkJCQkqdmFfYXJnKGFwLCBsb25nIGxvbmcgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSVpFSU5UKQorCQkJCQkqdmFfYXJnKGFwLCBzc2l6ZV90ICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgUFRSSU5UKQorCQkJCQkqdmFfYXJnKGFwLCBwdHJkaWZmX3QgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HKQorCQkJCQkqdmFfYXJnKGFwLCBsb25nICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlQpCisJCQkJCSp2YV9hcmcoYXAsIHNob3J0ICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlRTSE9SVCkKKwkJCQkJKnZhX2FyZyhhcCwgc2lnbmVkIGNoYXIgKikgPSByZXM7CisJCQkJZWxzZQorCQkJCQkqdmFfYXJnKGFwLCBpbnQgKikgPSByZXM7CisJCQkJbmFzc2lnbmVkKys7CisJCQl9CisJCQlucmVhZCArPSBwIC0gYnVmOworCQkJYnJlYWs7CisKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlIENUX0ZMT0FUOgorCQkJLyogc2NhbiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBhcyBpZiBieSBzdHJ0b2QgKi8KKyNpZmRlZiBoYXJkd2F5CisJCQlpZiAod2lkdGggPT0gMCB8fCB3aWR0aCA+IHNpemVvZihidWYpIC0gMSkKKwkJCQl3aWR0aCA9IHNpemVvZihidWYpIC0gMTsKKyNlbHNlCisJCQkvKiBzaXplX3QgaXMgdW5zaWduZWQsIGhlbmNlIHRoaXMgb3B0aW1pc2F0aW9uICovCisJCQlpZiAoLS13aWR0aCA+IHNpemVvZihidWYpIC0gMikKKwkJCQl3aWR0aCA9IHNpemVvZihidWYpIC0gMjsKKwkJCXdpZHRoKys7CisjZW5kaWYKKwkJCWZsYWdzIHw9IFNJR05PSyB8IE5ESUdJVFMgfCBEUFRPSyB8IEVYUE9LOworCQkJZm9yIChwID0gYnVmOyB3aWR0aDsgd2lkdGgtLSkgeworCQkJCWMgPSAqZnAtPl9wOworCQkJCS8qCisJCQkJICogVGhpcyBjb2RlIG1pbWlja3MgdGhlIGludGVnZXIgY29udmVyc2lvbgorCQkJCSAqIGNvZGUsIGJ1dCBpcyBtdWNoIHNpbXBsZXIuCisJCQkJICovCisJCQkJc3dpdGNoIChjKSB7CisKKwkJCQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzoKKwkJCQljYXNlICc0JzogY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzoKKwkJCQljYXNlICc4JzogY2FzZSAnOSc6CisJCQkJCWZsYWdzICY9IH4oU0lHTk9LIHwgTkRJR0lUUyk7CisJCQkJCWdvdG8gZm9rOworCisJCQkJY2FzZSAnKyc6IGNhc2UgJy0nOgorCQkJCQlpZiAoZmxhZ3MgJiBTSUdOT0spIHsKKwkJCQkJCWZsYWdzICY9IH5TSUdOT0s7CisJCQkJCQlnb3RvIGZvazsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlICcuJzoKKwkJCQkJaWYgKGZsYWdzICYgRFBUT0spIHsKKwkJCQkJCWZsYWdzICY9IH4oU0lHTk9LIHwgRFBUT0spOworCQkJCQkJZ290byBmb2s7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnZSc6IGNhc2UgJ0UnOgorCQkJCQkvKiBubyBleHBvbmVudCB3aXRob3V0IHNvbWUgZGlnaXRzICovCisJCQkJCWlmICgoZmxhZ3MmKE5ESUdJVFN8RVhQT0spKSA9PSBFWFBPSykgeworCQkJCQkJZmxhZ3MgPQorCQkJCQkJICAgIChmbGFncyAmIH4oRVhQT0t8RFBUT0spKSB8CisJCQkJCQkgICAgU0lHTk9LIHwgTkRJR0lUUzsKKwkJCQkJCWdvdG8gZm9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicmVhazsKKwkJZm9rOgorCQkJCSpwKysgPSBjOworCQkJCWlmICgtLWZwLT5fciA+IDApCisJCQkJCWZwLT5fcCsrOworCQkJCWVsc2UgaWYgKF9fc3JlZmlsbChmcCkpCisJCQkJCWJyZWFrOwkvKiBFT0YgKi8KKwkJCX0KKwkJCS8qCisJCQkgKiBJZiBubyBkaWdpdHMsIG1pZ2h0IGJlIG1pc3NpbmcgZXhwb25lbnQgZGlnaXRzCisJCQkgKiAoanVzdCBnaXZlIGJhY2sgdGhlIGV4cG9uZW50KSBvciBtaWdodCBiZSBtaXNzaW5nCisJCQkgKiByZWd1bGFyIGRpZ2l0cywgYnV0IGhhZCBzaWduIGFuZC9vciBkZWNpbWFsIHBvaW50LgorCQkJICovCisJCQlpZiAoZmxhZ3MgJiBORElHSVRTKSB7CisJCQkJaWYgKGZsYWdzICYgRVhQT0spIHsKKwkJCQkJLyogbm8gZGlnaXRzIGF0IGFsbCAqLworCQkJCQl3aGlsZSAocCA+IGJ1ZikKKwkJCQkJCXVuZ2V0YygqKHVfY2hhciAqKS0tcCwgZnApOworCQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQkJfQorCQkJCS8qIGp1c3QgYSBiYWQgZXhwb25lbnQgKGUgYW5kIG1heWJlIHNpZ24pICovCisJCQkJYyA9ICoodV9jaGFyICopLS1wOworCQkJCWlmIChjICE9ICdlJyAmJiBjICE9ICdFJykgeworCQkJCQkodm9pZCkgdW5nZXRjKGMsIGZwKTsvKiBzaWduICovCisJCQkJCWMgPSAqKHVfY2hhciAqKS0tcDsKKwkJCQl9CisJCQkJKHZvaWQpIHVuZ2V0YyhjLCBmcCk7CisJCQl9CisJCQlpZiAoKGZsYWdzICYgU1VQUFJFU1MpID09IDApIHsKKwkJCQkqcCA9ICdcMCc7CisJCQkJaWYgKGZsYWdzICYgTE9OR0RCTCkgeworCQkJCQlsb25nIGRvdWJsZSByZXMgPSBzdHJ0b2xkKGJ1ZiwKKwkJCQkJICAgIChjaGFyICoqKU5VTEwpOworCQkJCQkqdmFfYXJnKGFwLCBsb25nIGRvdWJsZSAqKSA9IHJlczsKKwkJCQl9IGVsc2UgaWYgKGZsYWdzICYgTE9ORykgeworCQkJCQlkb3VibGUgcmVzID0gc3RydG9kKGJ1ZiwgKGNoYXIgKiopTlVMTCk7CisJCQkJCSp2YV9hcmcoYXAsIGRvdWJsZSAqKSA9IHJlczsKKwkJCQl9IGVsc2UgeworCQkJCQlmbG9hdCByZXMgPSBzdHJ0b2YoYnVmLCAoY2hhciAqKilOVUxMKTsKKwkJCQkJKnZhX2FyZyhhcCwgZmxvYXQgKikgPSByZXM7CisJCQkJfQorCQkJCW5hc3NpZ25lZCsrOworCQkJfQorCQkJbnJlYWQgKz0gcCAtIGJ1ZjsKKwkJCWJyZWFrOworI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCisJCX0KKwl9CitpbnB1dF9mYWlsdXJlOgorCWlmIChuYXNzaWduZWQgPT0gMCkKKwkJbmFzc2lnbmVkID0gLTE7CittYXRjaF9mYWlsdXJlOgorCXJldHVybiAobmFzc2lnbmVkKTsKK30KKworLyoKKyAqIEZpbGwgaW4gdGhlIGdpdmVuIHRhYmxlIGZyb20gdGhlIHNjYW5zZXQgYXQgdGhlIGdpdmVuIGZvcm1hdAorICogKGp1c3QgYWZ0ZXIgYFsnKS4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBwYXN0IHRoZQorICogY2xvc2luZyBgXScuICBUaGUgdGFibGUgaGFzIGEgMSB3aGVyZXZlciBjaGFyYWN0ZXJzIHNob3VsZCBiZQorICogY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzY2Fuc2V0LgorICovCitzdGF0aWMgdV9jaGFyICoKK19fc2NjbChjaGFyICp0YWIsIHVfY2hhciAqZm10KQoreworCWludCBjLCBuLCB2OworCisJLyogZmlyc3QgYGNsZWFyJyB0aGUgd2hvbGUgdGFibGUgKi8KKwljID0gKmZtdCsrOwkJLyogZmlyc3QgY2hhciBoYXQgPT4gbmVnYXRlZCBzY2Fuc2V0ICovCisJaWYgKGMgPT0gJ14nKSB7CisJCXYgPSAxOwkJLyogZGVmYXVsdCA9PiBhY2NlcHQgKi8KKwkJYyA9ICpmbXQrKzsJLyogZ2V0IG5ldyBmaXJzdCBjaGFyICovCisJfSBlbHNlCisJCXYgPSAwOwkJLyogZGVmYXVsdCA9PiByZWplY3QgKi8KKwkvKiBzaG91bGQgcHJvYmFibHkgdXNlIG1lbXNldCBoZXJlICovCisJZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKQorCQl0YWJbbl0gPSB2OworCWlmIChjID09IDApCisJCXJldHVybiAoZm10IC0gMSk7LyogZm9ybWF0IGVuZGVkIGJlZm9yZSBjbG9zaW5nIF0gKi8KKworCS8qCisJICogTm93IHNldCB0aGUgZW50cmllcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhY3R1YWwgc2NhbnNldAorCSAqIHRvIHRoZSBvcHBvc2l0ZSBvZiB0aGUgYWJvdmUuCisJICoKKwkgKiBUaGUgZmlyc3QgY2hhcmFjdGVyIG1heSBiZSAnXScgKG9yICctJykgd2l0aG91dCBiZWluZyBzcGVjaWFsOworCSAqIHRoZSBsYXN0IGNoYXJhY3RlciBtYXkgYmUgJy0nLgorCSAqLworCXYgPSAxIC0gdjsKKwlmb3IgKDs7KSB7CisJCXRhYltjXSA9IHY7CQkvKiB0YWtlIGNoYXJhY3RlciBjICovCitkb3N3aXRjaDoKKwkJbiA9ICpmbXQrKzsJCS8qIGFuZCBleGFtaW5lIHRoZSBuZXh0ICovCisJCXN3aXRjaCAobikgeworCisJCWNhc2UgMDoJCQkvKiBmb3JtYXQgZW5kZWQgdG9vIHNvb24gKi8KKwkJCXJldHVybiAoZm10IC0gMSk7CisKKwkJY2FzZSAnLSc6CisJCQkvKgorCQkJICogQSBzY2Fuc2V0IG9mIHRoZSBmb3JtCisJCQkgKglbMDErLV0KKwkJCSAqIGlzIGRlZmluZWQgYXMgYHRoZSBkaWdpdCAwLCB0aGUgZGlnaXQgMSwKKwkJCSAqIHRoZSBjaGFyYWN0ZXIgKywgdGhlIGNoYXJhY3RlciAtJywgYnV0CisJCQkgKiB0aGUgZWZmZWN0IG9mIGEgc2NhbnNldCBzdWNoIGFzCisJCQkgKglbYS16QS1aMC05XQorCQkJICogaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4gIFRoZSBWNyBVbml4CisJCQkgKiBzY2FuZiB0cmVhdHMgYGEteicgYXMgYHRoZSBsZXR0ZXJzIGEgdGhyb3VnaAorCQkJICogeicsIGJ1dCB0cmVhdHMgYGEtYScgYXMgYHRoZSBsZXR0ZXIgYSwgdGhlCisJCQkgKiBjaGFyYWN0ZXIgLSwgYW5kIHRoZSBsZXR0ZXIgYScuCisJCQkgKgorCQkJICogRm9yIGNvbXBhdGliaWxpdHksIHRoZSBgLScgaXMgbm90IGNvbnNpZGVyZAorCQkJICogdG8gZGVmaW5lIGEgcmFuZ2UgaWYgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcKKwkJCSAqIGl0IGlzIGVpdGhlciBhIGNsb3NlIGJyYWNrZXQgKHJlcXVpcmVkIGJ5IEFOU0kpCisJCQkgKiBvciBpcyBub3QgbnVtZXJpY2FsbHkgZ3JlYXRlciB0aGFuIHRoZSBjaGFyYWN0ZXIKKwkJCSAqIHdlIGp1c3Qgc3RvcmVkIGluIHRoZSB0YWJsZSAoYykuCisJCQkgKi8KKwkJCW4gPSAqZm10OworCQkJaWYgKG4gPT0gJ10nIHx8IG4gPCBjKSB7CisJCQkJYyA9ICctJzsKKwkJCQlicmVhazsJLyogcmVzdW1lIHRoZSBmb3IoOzspICovCisJCQl9CisJCQlmbXQrKzsKKwkJCWRvIHsJCS8qIGZpbGwgaW4gdGhlIHJhbmdlICovCisJCQkJdGFiWysrY10gPSB2OworCQkJfSB3aGlsZSAoYyA8IG4pOworI2lmIDEJLyogWFhYIGFub3RoZXIgZGlzZ3VzdGluZyBjb21wYXRpYmlsaXR5IGhhY2sgKi8KKwkJCS8qCisJCQkgKiBBbGFzLCB0aGUgVjcgVW5peCBzY2FuZiBhbHNvIHRyZWF0cyBmb3JtYXRzCisJCQkgKiBzdWNoIGFzIFthLWMtZV0gYXMgYHRoZSBsZXR0ZXJzIGEgdGhyb3VnaCBlJy4KKwkJCSAqIFRoaXMgdG9vIGlzIHBlcm1pdHRlZCBieSB0aGUgc3RhbmRhcmQuLi4uCisJCQkgKi8KKwkJCWdvdG8gZG9zd2l0Y2g7CisjZWxzZQorCQkJYyA9ICpmbXQrKzsKKwkJCWlmIChjID09IDApCisJCQkJcmV0dXJuIChmbXQgLSAxKTsKKwkJCWlmIChjID09ICddJykKKwkJCQlyZXR1cm4gKGZtdCk7CisjZW5kaWYKKwkJCWJyZWFrOworCisJCWNhc2UgJ10nOgkJLyogZW5kIG9mIHNjYW5zZXQgKi8KKwkJCXJldHVybiAoZm10KTsKKworCQlkZWZhdWx0OgkJLyoganVzdCBhbm90aGVyIGNoYXJhY3RlciAqLworCQkJYyA9IG47CisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBOT1RSRUFDSEVEICovCit9CisKK2ludAordmZzY2FuZihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10MCwgX192YV9saXN0IGFwKQoreworCWludCByOworCisJRkxPQ0tGSUxFKGZwKTsKKwlyID0gX19zdmZzY2FuZihmcCwgZm10MCwgYXApOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKHIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zmd3ByaW50Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zmd3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGNhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdmZ3cHJpbnRmLmMKQEAgLTAsMCArMSwxNTIxIEBACisvKgkkT3BlbkJTRDogdmZ3cHJpbnRmLmMsdiAxLjExIDIwMTQvMDYvMDQgMDc6NDU6MjUgc3RzcCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBBY3R1YWwgd3ByaW50ZiBpbm5hcmRzLgorICoKKyAqIFRoaXMgY29kZSBpcyBsYXJnZSBhbmQgY29tcGxpY2F0ZWQuLi4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJmdndyaXRlLmgiCisKK3VuaW9uIGFyZyB7CisJaW50CQkJaW50YXJnOworCXVuc2lnbmVkIGludAkJdWludGFyZzsKKwlsb25nCQkJbG9uZ2FyZzsKKwl1bnNpZ25lZCBsb25nCQl1bG9uZ2FyZzsKKwlsb25nIGxvbmcJCWxvbmdsb25nYXJnOworCXVuc2lnbmVkIGxvbmcgbG9uZwl1bG9uZ2xvbmdhcmc7CisJcHRyZGlmZl90CQlwdHJkaWZmYXJnOworCXNpemVfdAkJCXNpemVhcmc7CisJc3NpemVfdAkJCXNzaXplYXJnOworCWludG1heF90CQlpbnRtYXhhcmc7CisJdWludG1heF90CQl1aW50bWF4YXJnOworCXZvaWQJCQkqcHZvaWRhcmc7CisJY2hhcgkJCSpwY2hhcmFyZzsKKwlzaWduZWQgY2hhcgkJKnBzY2hhcmFyZzsKKwlzaG9ydAkJCSpwc2hvcnRhcmc7CisJaW50CQkJKnBpbnRhcmc7CisJbG9uZwkJCSpwbG9uZ2FyZzsKKwlsb25nIGxvbmcJCSpwbG9uZ2xvbmdhcmc7CisJcHRyZGlmZl90CQkqcHB0cmRpZmZhcmc7CisJc3NpemVfdAkJCSpwc3NpemVhcmc7CisJaW50bWF4X3QJCSpwaW50bWF4YXJnOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJZG91YmxlCQkJZG91YmxlYXJnOworCWxvbmcgZG91YmxlCQlsb25nZG91YmxlYXJnOworI2VuZGlmCisJd2ludF90CQkJd2ludGFyZzsKKwl3Y2hhcl90CQkJKnB3Y2hhcmFyZzsKK307CisKK3N0YXRpYyBpbnQgX19maW5kX2FyZ3VtZW50cyhjb25zdCB3Y2hhcl90ICpmbXQwLCB2YV9saXN0IGFwLCB1bmlvbiBhcmcgKiphcmd0YWJsZSwKKyAgICBzaXplX3QgKmFyZ3RhYmxlc2l6KTsKK3N0YXRpYyBpbnQgX19ncm93X3R5cGVfdGFibGUodW5zaWduZWQgY2hhciAqKnR5cGV0YWJsZSwgaW50ICp0YWJsZXNpemUpOworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBgZnByaW50ZiB0byB1bmJ1ZmZlcmVkIHVuaXggZmlsZSc6IGNyZWF0ZXMgYQorICogdGVtcG9yYXJ5IGJ1ZmZlci4gIFdlIG9ubHkgd29yayBvbiB3cml0ZS1vbmx5IGZpbGVzOyB0aGlzIGF2b2lkcworICogd29ycmllcyBhYm91dCB1bmdldGMgYnVmZmVycyBhbmQgc28gZm9ydGguCisgKi8KK3N0YXRpYyBpbnQKK19fc2JwcmludGYoRklMRSAqZnAsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlpbnQgcmV0OworCUZJTEUgZmFrZTsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmYWtlZXh0OworCXVuc2lnbmVkIGNoYXIgYnVmW0JVRlNJWl07CisKKwlfRklMRUVYVF9TRVRVUCgmZmFrZSwgJmZha2VleHQpOworCS8qIGNvcHkgdGhlIGltcG9ydGFudCB2YXJpYWJsZXMgKi8KKwlmYWtlLl9mbGFncyA9IGZwLT5fZmxhZ3MgJiB+X19TTkJGOworCWZha2UuX2ZpbGUgPSBmcC0+X2ZpbGU7CisJZmFrZS5fY29va2llID0gZnAtPl9jb29raWU7CisJZmFrZS5fd3JpdGUgPSBmcC0+X3dyaXRlOworCisJLyogc2V0IHVwIHRoZSBidWZmZXIgKi8KKwlmYWtlLl9iZi5fYmFzZSA9IGZha2UuX3AgPSBidWY7CisJZmFrZS5fYmYuX3NpemUgPSBmYWtlLl93ID0gc2l6ZW9mKGJ1Zik7CisJZmFrZS5fbGJmc2l6ZSA9IDA7CS8qIG5vdCBhY3R1YWxseSB1c2VkLCBidXQgSnVzdCBJbiBDYXNlICovCisKKwkvKiBkbyB0aGUgd29yaywgdGhlbiBjb3B5IGFueSBlcnJvciBzdGF0dXMgKi8KKwlyZXQgPSBfX3Zmd3ByaW50ZigmZmFrZSwgZm10LCBhcCk7CisJaWYgKHJldCA+PSAwICYmIF9fc2ZsdXNoKCZmYWtlKSkKKwkJcmV0ID0gRU9GOworCWlmIChmYWtlLl9mbGFncyAmIF9fU0VSUikKKwkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJcmV0dXJuIChyZXQpOworfQorCisvKgorICogTGlrZSBfX2ZwdXR3Y191bmxvY2ssIGJ1dCBoYW5kbGVzIGZha2Ugc3RyaW5nIChfX1NTVFIpIGZpbGVzIHByb3Blcmx5LgorICogRmlsZSBtdXN0IGFscmVhZHkgYmUgbG9ja2VkLgorICovCitzdGF0aWMgd2ludF90CitfX3hmcHV0d2Mod2NoYXJfdCB3YywgRklMRSAqZnApCit7CisJbWJzdGF0ZV90IG1iczsKKwljaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKwlzdHJ1Y3QgX19zdWlvIHVpbzsKKwlzdHJ1Y3QgX19zaW92IGlvdjsKKwlzaXplX3QgbGVuOworCisJaWYgKChmcC0+X2ZsYWdzICYgX19TU1RSKSA9PSAwKQorCQlyZXR1cm4gKF9fZnB1dHdjX3VubG9jayh3YywgZnApKTsKKworCWJ6ZXJvKCZtYnMsIHNpemVvZihtYnMpKTsKKwlsZW4gPSB3Y3J0b21iKGJ1Ziwgd2MsICZtYnMpOworCWlmIChsZW4gPT0gKHNpemVfdCktMSkgeworCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJZXJybm8gPSBFSUxTRVE7CisJCXJldHVybiAoV0VPRik7CisJfQorCXVpby51aW9faW92ID0gJmlvdjsKKwl1aW8udWlvX3Jlc2lkID0gbGVuOworCXVpby51aW9faW92Y250ID0gMTsKKwlpb3YuaW92X2Jhc2UgPSBidWY7CisJaW92Lmlvdl9sZW4gPSBsZW47CisJcmV0dXJuIChfX3NmdndyaXRlKGZwLCAmdWlvKSAhPSBFT0YgPyAod2ludF90KXdjIDogV0VPRik7Cit9CisKKy8qCisgKiBDb252ZXJ0IGEgbXVsdGlieXRlIGNoYXJhY3RlciBzdHJpbmcgYXJndW1lbnQgZm9yIHRoZSAlcyBmb3JtYXQgdG8gYSB3aWRlCisgKiBzdHJpbmcgcmVwcmVzZW50YXRpb24uIGBgcHJlYycnIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMKKyAqIHRvIG91dHB1dC4gSWYgYGBwcmVjJycgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIHdlIGNhbid0IGFzc3VtZQorICogdGhhdCB0aGUgbXVsdGlieXRlIGNoYXJhY3RlciBzdHJpbmcgZW5kcyBpbiBhIG51bGwgY2hhcmFjdGVyLgorICogCisgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4KKyAqIFRvIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgY2hlY2sgZXJybm8gZm9yIEVOT01FTSwgRUlMU0VRIGFuZCBFSU5WQUwuCisgKi8KK3N0YXRpYyB3Y2hhcl90ICoKK19fbWJzY29udihjaGFyICptYnNhcmcsIGludCBwcmVjKQoreworCW1ic3RhdGVfdCBtYnM7CisJd2NoYXJfdCAqY29udmJ1ZiwgKndjcDsKKwljb25zdCBjaGFyICpwOworCXNpemVfdCBpbnNpemUsIG5jaGFycywgbmNvbnY7CisKKwlpZiAobWJzYXJnID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwkvKgorCSAqIFN1cHBsaWVkIGFyZ3VtZW50IGlzIGEgbXVsdGlieXRlIHN0cmluZzsgY29udmVydCBpdCB0byB3aWRlCisJICogY2hhcmFjdGVycyBmaXJzdC4KKwkgKi8KKwlpZiAocHJlYyA+PSAwKSB7CisJCS8qCisJCSAqIFN0cmluZyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBOVUwtdGVybWluYXRlZC4gRmluZCB0aGUKKwkJICogbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcHJpbnQuCisJCSAqLworCQlwID0gbWJzYXJnOworCQlpbnNpemUgPSBuY2hhcnMgPSBuY29udiA9IDA7CisJCWJ6ZXJvKCZtYnMsIHNpemVvZihtYnMpKTsKKwkJd2hpbGUgKG5jaGFycyAhPSAoc2l6ZV90KXByZWMpIHsKKwkJCW5jb252ID0gbWJybGVuKHAsIE1CX0NVUl9NQVgsICZtYnMpOworCQkJaWYgKG5jb252ID09IChzaXplX3QpMCB8fCBuY29udiA9PSAoc2l6ZV90KS0xIHx8CisJCQkgICAgbmNvbnYgPT0gKHNpemVfdCktMikKKwkJCQlicmVhazsKKwkJCXAgKz0gbmNvbnY7CisJCQluY2hhcnMrKzsKKwkJCWluc2l6ZSArPSBuY29udjsKKwkJfQorCQlpZiAobmNvbnYgPT0gKHNpemVfdCktMSB8fCBuY29udiA9PSAoc2l6ZV90KS0yKQorCQkJcmV0dXJuIChOVUxMKTsKKwl9IGVsc2UKKwkJaW5zaXplID0gc3RybGVuKG1ic2FyZyk7CisKKwkvKgorCSAqIEFsbG9jYXRlIGJ1ZmZlciBmb3IgdGhlIHJlc3VsdCBhbmQgcGVyZm9ybSB0aGUgY29udmVyc2lvbiwKKwkgKiBjb252ZXJ0aW5nIGF0IG1vc3QgYHNpemUnIGJ5dGVzIG9mIHRoZSBpbnB1dCBtdWx0aWJ5dGUgc3RyaW5nIHRvCisJICogd2lkZSBjaGFyYWN0ZXJzIGZvciBwcmludGluZy4KKwkgKi8KKwljb252YnVmID0gY2FsbG9jKGluc2l6ZSArIDEsIHNpemVvZigqY29udmJ1ZikpOworCWlmIChjb252YnVmID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJd2NwID0gY29udmJ1ZjsKKwlwID0gbWJzYXJnOworCWJ6ZXJvKCZtYnMsIHNpemVvZihtYnMpKTsKKwluY29udiA9IDA7CisJd2hpbGUgKGluc2l6ZSAhPSAwKSB7CisJCW5jb252ID0gbWJydG93Yyh3Y3AsIHAsIGluc2l6ZSwgJm1icyk7CisJCWlmIChuY29udiA9PSAwIHx8IG5jb252ID09IChzaXplX3QpLTEgfHwgbmNvbnYgPT0gKHNpemVfdCktMikKKwkJCWJyZWFrOworCQl3Y3ArKzsKKwkJcCArPSBuY29udjsKKwkJaW5zaXplIC09IG5jb252OworCX0KKwlpZiAobmNvbnYgPT0gKHNpemVfdCktMSB8fCBuY29udiA9PSAoc2l6ZV90KS0yKSB7CisJCWZyZWUoY29udmJ1Zik7CisJCXJldHVybiAoTlVMTCk7CisJfQorCSp3Y3AgPSAnXDAnOworCisJcmV0dXJuIChjb252YnVmKTsKK30KKworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAiZmxvYXRpby5oIgorI2luY2x1ZGUgImdkdG9hLmgiCisKKyNkZWZpbmUJREVGUFJFQwkJNgorCitzdGF0aWMgaW50IGV4cG9uZW50KHdjaGFyX3QgKiwgaW50LCBpbnQpOworI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCisKKy8qCisgKiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHdlIHVzZSBhcyBzY3JhdGNoIHNwYWNlIGZvciBpbnRlZ2VyCisgKiBjb252ZXJzaW9ucywgYW1vbmcgb3RoZXIgdGhpbmdzLiAgVGVjaG5pY2FsbHksIHdlIHdvdWxkIG5lZWQgdGhlCisgKiBtb3N0IHNwYWNlIGZvciBiYXNlIDEwIGNvbnZlcnNpb25zIHdpdGggdGhvdXNhbmRzJyBncm91cGluZworICogY2hhcmFjdGVycyBiZXR3ZWVuIGVhY2ggcGFpciBvZiBkaWdpdHMuICAxMDAgYnl0ZXMgaXMgYQorICogY29uc2VydmF0aXZlIG92ZXJlc3RpbWF0ZSBldmVuIGZvciBhIDEyOC1iaXQgdWludG1heF90LgorICovCisjZGVmaW5lIEJVRgkxMDAKKworI2RlZmluZSBTVEFUSUNfQVJHX1RCTF9TSVpFIDgJLyogU2l6ZSBvZiBzdGF0aWMgYXJndW1lbnQgdGFibGUuICovCisKKworLyoKKyAqIE1hY3JvcyBmb3IgY29udmVydGluZyBkaWdpdHMgdG8gbGV0dGVycyBhbmQgdmljZSB2ZXJzYQorICovCisjZGVmaW5lCXRvX2RpZ2l0KGMpCSgoYykgLSAnMCcpCisjZGVmaW5lIGlzX2RpZ2l0KGMpCSgodW5zaWduZWQpdG9fZGlnaXQoYykgPD0gOSkKKyNkZWZpbmUJdG9fY2hhcihuKQkoKHdjaGFyX3QpKChuKSArICcwJykpCisKKy8qCisgKiBGbGFncyB1c2VkIGR1cmluZyBjb252ZXJzaW9uLgorICovCisjZGVmaW5lCUFMVAkJMHgwMDAxCQkvKiBhbHRlcm5hdGUgZm9ybSAqLworI2RlZmluZQlMQURKVVNUCQkweDAwMDQJCS8qIGxlZnQgYWRqdXN0bWVudCAqLworI2RlZmluZQlMT05HREJMCQkweDAwMDgJCS8qIGxvbmcgZG91YmxlICovCisjZGVmaW5lCUxPTkdJTlQJCTB4MDAxMAkJLyogbG9uZyBpbnRlZ2VyICovCisjZGVmaW5lCUxMT05HSU5UCTB4MDAyMAkJLyogbG9uZyBsb25nIGludGVnZXIgKi8KKyNkZWZpbmUJU0hPUlRJTlQJMHgwMDQwCQkvKiBzaG9ydCBpbnRlZ2VyICovCisjZGVmaW5lCVpFUk9QQUQJCTB4MDA4MAkJLyogemVybyAoYXMgb3Bwb3NlZCB0byBibGFuaykgcGFkICovCisjZGVmaW5lIEZQVAkJMHgwMTAwCQkvKiBGbG9hdGluZyBwb2ludCBudW1iZXIgKi8KKyNkZWZpbmUgUFRSSU5UCQkweDAyMDAJCS8qICh1bnNpZ25lZCkgcHRyZGlmZl90ICovCisjZGVmaW5lIFNJWkVJTlQJCTB4MDQwMAkJLyogKHNpZ25lZCkgc2l6ZV90ICovCisjZGVmaW5lIENIQVJJTlQJCTB4MDgwMAkJLyogOCBiaXQgaW50ZWdlciAqLworI2RlZmluZSBNQVhJTlQJCTB4MTAwMAkJLyogbGFyZ2VzdCBpbnRlZ2VyIHNpemUgKGludG1heF90KSAqLworCitpbnQKK19fdmZ3cHJpbnRmKEZJTEUgKiBfX3Jlc3RyaWN0IGZwLCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmbXQwLCBfX3ZhX2xpc3QgYXApCit7CisJd2NoYXJfdCAqZm10OwkJLyogZm9ybWF0IHN0cmluZyAqLworCXdjaGFyX3QgY2g7CQkvKiBjaGFyYWN0ZXIgZnJvbSBmbXQgKi8KKwlpbnQgbiwgbjIsIG4zOwkJLyogaGFuZHkgaW50ZWdlcnMgKHNob3J0IHRlcm0gdXNhZ2UpICovCisJd2NoYXJfdCAqY3A7CQkvKiBoYW5keSBjaGFyIHBvaW50ZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCisJaW50IGZsYWdzOwkJLyogZmxhZ3MgYXMgYWJvdmUgKi8KKwlpbnQgcmV0OwkJLyogcmV0dXJuIHZhbHVlIGFjY3VtdWxhdG9yICovCisJaW50IHdpZHRoOwkJLyogd2lkdGggZnJvbSBmb3JtYXQgKCU4ZCksIG9yIDAgKi8KKwlpbnQgcHJlYzsJCS8qIHByZWNpc2lvbiBmcm9tIGZvcm1hdDsgPDAgZm9yIE4vQSAqLworCXdjaGFyX3Qgc2lnbjsJCS8qIHNpZ24gcHJlZml4ICgnICcsICcrJywgJy0nLCBvciBcMCkgKi8KKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCS8qCisJICogV2UgY2FuIGRlY29tcG9zZSB0aGUgcHJpbnRlZCByZXByZXNlbnRhdGlvbiBvZiBmbG9hdGluZworCSAqIHBvaW50IG51bWJlcnMgaW50byBzZXZlcmFsIHBhcnRzLCBzb21lIG9mIHdoaWNoIG1heSBiZSBlbXB0eToKKwkgKgorCSAqIFsrfC18IF0gWzB4fDBYXSBNTU0gLiBOTk4gW2V8RXxwfFBdIFsrfC1dIFpaCisJICogICAgQSAgICAgICBCICAgICAtLS1DLS0tICAgICAgRCAgICAgICBFICAgRgorCSAqCisJICogQToJJ3NpZ24nIGhvbGRzIHRoaXMgdmFsdWUgaWYgcHJlc2VudDsgJ1wwJyBvdGhlcndpc2UKKwkgKiBCOglveFsxXSBob2xkcyB0aGUgJ3gnIG9yICdYJzsgJ1wwJyBpZiBub3QgaGV4YWRlY2ltYWwKKwkgKiBDOgljcCBwb2ludHMgdG8gdGhlIHN0cmluZyBNTU1OTk4uICBMZWFkaW5nIGFuZCB0cmFpbGluZworCSAqCXplcm9zIGFyZSBub3QgaW4gdGhlIHN0cmluZyBhbmQgbXVzdCBiZSBhZGRlZC4KKwkgKiBEOglleHBjaGFyIGhvbGRzIHRoaXMgY2hhcmFjdGVyOyAnXDAnIGlmIG5vIGV4cG9uZW50LCBlLmcuICVmCisJICogRjoJYXQgbGVhc3QgdHdvIGRpZ2l0cyBmb3IgZGVjaW1hbCwgYXQgbGVhc3Qgb25lIGRpZ2l0IGZvciBoZXgKKwkgKi8KKwljaGFyICpkZWNpbWFsX3BvaW50ID0gTlVMTDsKKwlpbnQgc2lnbmZsYWc7CQkvKiB0cnVlIGlmIGZsb2F0IGlzIG5lZ2F0aXZlICovCisJdW5pb24gewkJCS8qIGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyAlW2FBZUVmRmdHXSAqLworCQlkb3VibGUgZGJsOworCQlsb25nIGRvdWJsZSBsZGJsOworCX0gZnBhcmc7CisJaW50IGV4cHQ7CQkvKiBpbnRlZ2VyIHZhbHVlIG9mIGV4cG9uZW50ICovCisJY2hhciBleHBjaGFyOwkJLyogZXhwb25lbnQgY2hhcmFjdGVyOiBbZUVwUFwwXSAqLworCWNoYXIgKmR0b2FlbmQ7CQkvKiBwb2ludGVyIHRvIGVuZCBvZiBjb252ZXJ0ZWQgZGlnaXRzICovCisJaW50IGV4cHNpemU7CQkvKiBjaGFyYWN0ZXIgY291bnQgZm9yIGV4cHN0ciAqLworCWludCBsZWFkOwkJLyogc2lnIGZpZ3MgYmVmb3JlIGRlY2ltYWwgb3IgZ3JvdXAgc2VwICovCisJaW50IG5kaWc7CQkvKiBhY3R1YWwgbnVtYmVyIG9mIGRpZ2l0cyByZXR1cm5lZCBieSBkdG9hICovCisJd2NoYXJfdCBleHBzdHJbTUFYRVhQRElHKzJdOwkvKiBidWZmZXIgZm9yIGV4cG9uZW50IHN0cmluZzogZStaWlogKi8KKwljaGFyICpkdG9hcmVzdWx0ID0gTlVMTDsKKyNlbmRpZgorCisJdWludG1heF90IF91bWF4OwkvKiBpbnRlZ2VyIGFyZ3VtZW50cyAlW2Rpb3V4WF0gKi8KKwllbnVtIHsgT0NULCBERUMsIEhFWCB9IGJhc2U7CS8qIGJhc2UgZm9yICVbZGlvdXhYXSBjb252ZXJzaW9uICovCisJaW50IGRwcmVjOwkJLyogYSBjb3B5IG9mIHByZWMgaWYgJVtkaW91eFhdLCAwIG90aGVyd2lzZSAqLworCWludCByZWFsc3o7CQkvKiBmaWVsZCBzaXplIGV4cGFuZGVkIGJ5IGRwcmVjICovCisJaW50IHNpemU7CQkvKiBzaXplIG9mIGNvbnZlcnRlZCBmaWVsZCBvciBzdHJpbmcgKi8KKwljb25zdCBjaGFyICp4ZGlnczsJLyogZGlnaXRzIGZvciAlW3hYXSBjb252ZXJzaW9uICovCisJd2NoYXJfdCBidWZbQlVGXTsJLyogYnVmZmVyIHdpdGggc3BhY2UgZm9yIGRpZ2l0cyBvZiB1aW50bWF4X3QgKi8KKwl3Y2hhcl90IG94WzJdOwkJLyogc3BhY2UgZm9yIDB4OyBveFsxXSBpcyBlaXRoZXIgeCwgWCwgb3IgXDAgKi8KKwl1bmlvbiBhcmcgKmFyZ3RhYmxlOwkvKiBhcmdzLCBidWlsdCBkdWUgdG8gcG9zaXRpb25hbCBhcmcgKi8KKwl1bmlvbiBhcmcgc3RhdGFyZ3RhYmxlW1NUQVRJQ19BUkdfVEJMX1NJWkVdOworCXNpemVfdCBhcmd0YWJsZXNpejsKKwlpbnQgbmV4dGFyZzsJCS8qIDEtYmFzZWQgYXJndW1lbnQgaW5kZXggKi8KKwl2YV9saXN0IG9yZ2FwOwkJLyogb3JpZ2luYWwgYXJndW1lbnQgcG9pbnRlciAqLworCXdjaGFyX3QgKmNvbnZidWY7CS8qIGJ1ZmZlciBmb3IgbXVsdGlieXRlIHRvIHdpZGUgY29udmVyc2lvbiAqLworCisJLyoKKwkgKiBDaG9vc2UgUEFEU0laRSB0byB0cmFkZSBlZmZpY2llbmN5IHZzLiBzaXplLiAgSWYgbGFyZ2VyIHByaW50ZgorCSAqIGZpZWxkcyBvY2N1ciBmcmVxdWVudGx5LCBpbmNyZWFzZSBQQURTSVpFIGFuZCBtYWtlIHRoZSBpbml0aWFsaXNlcnMKKwkgKiBiZWxvdyBsb25nZXIuCisJICovCisjZGVmaW5lCVBBRFNJWkUJMTYJCS8qIHBhZCBjaHVuayBzaXplICovCisJc3RhdGljIHdjaGFyX3QgYmxhbmtzW1BBRFNJWkVdID0KKwkgeycgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJ307CisJc3RhdGljIHdjaGFyX3QgemVyb2VzW1BBRFNJWkVdID0KKwkgeycwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJ307CisKKwlzdGF0aWMgY29uc3QgY2hhciB4ZGlnc19sb3dlclsxNl0gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisJc3RhdGljIGNvbnN0IGNoYXIgeGRpZ3NfdXBwZXJbMTZdID0gIjAxMjM0NTY3ODlBQkNERUYiOworCisJLyoKKwkgKiBCRVdBUkUsIHRoZXNlIGBnb3RvIGVycm9yJyBvbiBlcnJvciwgUFJJTlQgdXNlcyAnbjMnLAorCSAqIFBBRCB1c2VzIGBuJyBhbmQgJ24zJywgYW5kIFBSSU5UQU5EUEFEIHVzZXMgJ24nLCAnbjInLCBhbmQgJ24zJy4KKwkgKi8KKyNkZWZpbmUJUFJJTlQocHRyLCBsZW4pCWRvIHsJXAorCWZvciAobjMgPSAwOyBuMyA8IChsZW4pOyBuMysrKSB7CVwKKwkJaWYgKChfX3hmcHV0d2MoKHB0cilbbjNdLCBmcCkpID09IFdFT0YpCVwKKwkJCWdvdG8gZXJyb3I7IFwKKwl9IFwKK30gd2hpbGUgKDApCisjZGVmaW5lCVBBRChob3dtYW55LCB3aXRoKSBkbyB7IFwKKwlpZiAoKG4gPSAoaG93bWFueSkpID4gMCkgeyBcCisJCXdoaWxlIChuID4gUEFEU0laRSkgeyBcCisJCQlQUklOVCh3aXRoLCBQQURTSVpFKTsgXAorCQkJbiAtPSBQQURTSVpFOyBcCisJCX0gXAorCQlQUklOVCh3aXRoLCBuKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJUFJJTlRBTkRQQUQocCwgZXAsIGxlbiwgd2l0aCkgZG8gewlcCisJbjIgPSAoZXApIC0gKHApOyAgICAgICAJCQlcCisJaWYgKG4yID4gKGxlbikpCQkJCVwKKwkJbjIgPSAobGVuKTsJCQlcCisJaWYgKG4yID4gMCkJCQkJXAorCQlQUklOVCgocCksIG4yKTsJCQlcCisJUEFEKChsZW4pIC0gKG4yID4gMCA/IG4yIDogMCksICh3aXRoKSk7CVwKK30gd2hpbGUoMCkKKworCS8qCisJICogVG8gZXh0ZW5kIHNob3J0cyBwcm9wZXJseSwgd2UgbmVlZCBib3RoIHNpZ25lZCBhbmQgdW5zaWduZWQKKwkgKiBhcmd1bWVudCBleHRyYWN0aW9uIG1ldGhvZHMuCisJICovCisjZGVmaW5lCVNBUkcoKSBcCisJKChpbnRtYXhfdCkoZmxhZ3MmTUFYSU5UID8gR0VUQVJHKGludG1heF90KSA6IFwKKwkgICAgZmxhZ3MmTExPTkdJTlQgPyBHRVRBUkcobG9uZyBsb25nKSA6IFwKKwkgICAgZmxhZ3MmTE9OR0lOVCA/IEdFVEFSRyhsb25nKSA6IFwKKwkgICAgZmxhZ3MmUFRSSU5UID8gR0VUQVJHKHB0cmRpZmZfdCkgOiBcCisJICAgIGZsYWdzJlNJWkVJTlQgPyBHRVRBUkcoc3NpemVfdCkgOiBcCisJICAgIGZsYWdzJlNIT1JUSU5UID8gKHNob3J0KUdFVEFSRyhpbnQpIDogXAorCSAgICBmbGFncyZDSEFSSU5UID8gKHNpZ25lZCBjaGFyKUdFVEFSRyhpbnQpIDogXAorCSAgICBHRVRBUkcoaW50KSkpCisjZGVmaW5lCVVBUkcoKSBcCisJKCh1aW50bWF4X3QpKGZsYWdzJk1BWElOVCA/IEdFVEFSRyh1aW50bWF4X3QpIDogXAorCSAgICBmbGFncyZMTE9OR0lOVCA/IEdFVEFSRyh1bnNpZ25lZCBsb25nIGxvbmcpIDogXAorCSAgICBmbGFncyZMT05HSU5UID8gR0VUQVJHKHVuc2lnbmVkIGxvbmcpIDogXAorCSAgICBmbGFncyZQVFJJTlQgPyAodWludHB0cl90KUdFVEFSRyhwdHJkaWZmX3QpIDogLyogWFhYICovIFwKKwkgICAgZmxhZ3MmU0laRUlOVCA/IEdFVEFSRyhzaXplX3QpIDogXAorCSAgICBmbGFncyZTSE9SVElOVCA/ICh1bnNpZ25lZCBzaG9ydClHRVRBUkcoaW50KSA6IFwKKwkgICAgZmxhZ3MmQ0hBUklOVCA/ICh1bnNpZ25lZCBjaGFyKUdFVEFSRyhpbnQpIDogXAorCSAgICBHRVRBUkcodW5zaWduZWQgaW50KSkpCisKKwkvKgorCSAqIEFwcGVuZCBhIGRpZ2l0IHRvIGEgdmFsdWUgYW5kIGNoZWNrIGZvciBvdmVyZmxvdy4KKwkgKi8KKyNkZWZpbmUgQVBQRU5EX0RJR0lUKHZhbCwgZGlnKSBkbyB7IFwKKwlpZiAoKHZhbCkgPiBJTlRfTUFYIC8gMTApIFwKKwkJZ290byBvdmVyZmxvdzsgXAorCSh2YWwpICo9IDEwOyBcCisJaWYgKCh2YWwpID4gSU5UX01BWCAtIHRvX2RpZ2l0KChkaWcpKSkgXAorCQlnb3RvIG92ZXJmbG93OyBcCisJKHZhbCkgKz0gdG9fZGlnaXQoKGRpZykpOyBcCit9IHdoaWxlICgwKQorCisJIC8qCisJICAqIEdldCAqIGFyZ3VtZW50cywgaW5jbHVkaW5nIHRoZSBmb3JtICpubiQuICBQcmVzZXJ2ZSB0aGUgbmV4dGFyZworCSAgKiB0aGF0IHRoZSBhcmd1bWVudCBjYW4gYmUgZ290dGVuIG9uY2UgdGhlIHR5cGUgaXMgZGV0ZXJtaW5lZC4KKwkgICovCisjZGVmaW5lIEdFVEFTVEVSKHZhbCkgXAorCW4yID0gMDsgXAorCWNwID0gZm10OyBcCisJd2hpbGUgKGlzX2RpZ2l0KCpjcCkpIHsgXAorCQlBUFBFTkRfRElHSVQobjIsICpjcCk7IFwKKwkJY3ArKzsgXAorCX0gXAorCWlmICgqY3AgPT0gJyQnKSB7IFwKKwkJaW50IGhvbGQgPSBuZXh0YXJnOyBcCisJCWlmIChhcmd0YWJsZSA9PSBOVUxMKSB7IFwKKwkJCWFyZ3RhYmxlID0gc3RhdGFyZ3RhYmxlOyBcCisJCQlfX2ZpbmRfYXJndW1lbnRzKGZtdDAsIG9yZ2FwLCAmYXJndGFibGUsICZhcmd0YWJsZXNpeik7IFwKKwkJfSBcCisJCW5leHRhcmcgPSBuMjsgXAorCQl2YWwgPSBHRVRBUkcoaW50KTsgXAorCQluZXh0YXJnID0gaG9sZDsgXAorCQlmbXQgPSArK2NwOyBcCisJfSBlbHNlIHsgXAorCQl2YWwgPSBHRVRBUkcoaW50KTsgXAorCX0KKworLyoKKyogR2V0IHRoZSBhcmd1bWVudCBpbmRleGVkIGJ5IG5leHRhcmcuICAgSWYgdGhlIGFyZ3VtZW50IHRhYmxlIGlzCisqIGJ1aWx0LCB1c2UgaXQgdG8gZ2V0IHRoZSBhcmd1bWVudC4gIElmIGl0cyBub3QsIGdldCB0aGUgbmV4dAorKiBhcmd1bWVudCAoYW5kIGFyZ3VtZW50cyBtdXN0IGJlIGdvdHRlbiBzZXF1ZW50aWFsbHkpLgorKi8KKyNkZWZpbmUgR0VUQVJHKHR5cGUpIFwKKwkoKGFyZ3RhYmxlICE9IE5VTEwpID8gKigodHlwZSopKCZhcmd0YWJsZVtuZXh0YXJnKytdKSkgOiBcCisJCShuZXh0YXJnKyssIHZhX2FyZyhhcCwgdHlwZSkpKQorCisJX1NFVF9PUklFTlRBVElPTihmcCwgMSk7CisJLyogc29ycnksIGZ3cHJpbnRmKHJlYWRfb25seV9maWxlLCAiIikgcmV0dXJucyBFT0YsIG5vdCAwICovCisJaWYgKGNhbnR3cml0ZShmcCkpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIChFT0YpOworCX0KKworCS8qIG9wdGltaXNlIGZ3cHJpbnRmKHN0ZGVycikgKGFuZCBvdGhlciB1bmJ1ZmZlcmVkIFVuaXggZmlsZXMpICovCisJaWYgKChmcC0+X2ZsYWdzICYgKF9fU05CRnxfX1NXUnxfX1NSVykpID09IChfX1NOQkZ8X19TV1IpICYmCisJICAgIGZwLT5fZmlsZSA+PSAwKQorCQlyZXR1cm4gKF9fc2JwcmludGYoZnAsIGZtdDAsIGFwKSk7CisKKwlmbXQgPSAod2NoYXJfdCAqKWZtdDA7CisJYXJndGFibGUgPSBOVUxMOworCW5leHRhcmcgPSAxOworCXZhX2NvcHkob3JnYXAsIGFwKTsKKwlyZXQgPSAwOworCWNvbnZidWYgPSBOVUxMOworCisJLyoKKwkgKiBTY2FuIHRoZSBmb3JtYXQgZm9yIGNvbnZlcnNpb25zIChgJScgY2hhcmFjdGVyKS4KKwkgKi8KKwlmb3IgKDs7KSB7CisJCWZvciAoY3AgPSBmbXQ7IChjaCA9ICpmbXQpICE9ICdcMCcgJiYgY2ggIT0gJyUnOyBmbXQrKykKKwkJCWNvbnRpbnVlOworCQlpZiAoZm10ICE9IGNwKSB7CisJCQlwdHJkaWZmX3QgbSA9IGZtdCAtIGNwOworCQkJaWYgKG0gPCAwIHx8IG0gPiBJTlRfTUFYIC0gcmV0KQorCQkJCWdvdG8gb3ZlcmZsb3c7CisJCQlQUklOVChjcCwgbSk7CisJCQlyZXQgKz0gbTsKKwkJfQorCQlpZiAoY2ggPT0gJ1wwJykKKwkJCWdvdG8gZG9uZTsKKwkJZm10Kys7CQkvKiBza2lwIG92ZXIgJyUnICovCisKKwkJZmxhZ3MgPSAwOworCQlkcHJlYyA9IDA7CisJCXdpZHRoID0gMDsKKwkJcHJlYyA9IC0xOworCQlzaWduID0gJ1wwJzsKKwkJb3hbMV0gPSAnXDAnOworCityZmxhZzoJCWNoID0gKmZtdCsrOworcmVzd2l0Y2g6CXN3aXRjaCAoY2gpIHsKKwkJY2FzZSAnICc6CisJCQkvKgorCQkJICogYGBJZiB0aGUgc3BhY2UgYW5kICsgZmxhZ3MgYm90aCBhcHBlYXIsIHRoZSBzcGFjZQorCQkJICogZmxhZyB3aWxsIGJlIGlnbm9yZWQuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworCQkJaWYgKCFzaWduKQorCQkJCXNpZ24gPSAnICc7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcjJzoKKwkJCWZsYWdzIHw9IEFMVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ1wnJzoKKwkJCS8qIGdyb3VwaW5nIG5vdCBpbXBsZW1lbnRlZCAqLworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnKic6CisJCQkvKgorCQkJICogYGBBIG5lZ2F0aXZlIGZpZWxkIHdpZHRoIGFyZ3VtZW50IGlzIHRha2VuIGFzIGEKKwkJCSAqIC0gZmxhZyBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLicnCisJCQkgKgktLSBBTlNJIFgzSjExCisJCQkgKiBUaGV5IGRvbid0IGV4Y2x1ZGUgZmllbGQgd2lkdGhzIHJlYWQgZnJvbSBhcmdzLgorCQkJICovCisJCQlHRVRBU1RFUih3aWR0aCk7CisJCQlpZiAod2lkdGggPj0gMCkKKwkJCQlnb3RvIHJmbGFnOworCQkJaWYgKHdpZHRoID09IElOVF9NSU4pCisJCQkJZ290byBvdmVyZmxvdzsKKwkJCXdpZHRoID0gLXdpZHRoOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAnLSc6CisJCQlmbGFncyB8PSBMQURKVVNUOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnKyc6CisJCQlzaWduID0gJysnOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnLic6CisJCQlpZiAoKGNoID0gKmZtdCsrKSA9PSAnKicpIHsKKwkJCQlHRVRBU1RFUihuKTsKKwkJCQlwcmVjID0gbiA8IDAgPyAtMSA6IG47CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCW4gPSAwOworCQkJd2hpbGUgKGlzX2RpZ2l0KGNoKSkgeworCQkJCUFQUEVORF9ESUdJVChuLCBjaCk7CisJCQkJY2ggPSAqZm10Kys7CisJCQl9CisJCQlpZiAoY2ggPT0gJyQnKSB7CisJCQkJbmV4dGFyZyA9IG47CisJCQkJaWYgKGFyZ3RhYmxlID09IE5VTEwpIHsKKwkJCQkJYXJndGFibGUgPSBzdGF0YXJndGFibGU7CisJCQkJCV9fZmluZF9hcmd1bWVudHMoZm10MCwgb3JnYXAsCisJCQkJCSAgICAmYXJndGFibGUsICZhcmd0YWJsZXNpeik7CisJCQkJfQorCQkJCWdvdG8gcmZsYWc7CisJCQl9CisJCQlwcmVjID0gbjsKKwkJCWdvdG8gcmVzd2l0Y2g7CisJCWNhc2UgJzAnOgorCQkJLyoKKwkJCSAqIGBgTm90ZSB0aGF0IDAgaXMgdGFrZW4gYXMgYSBmbGFnLCBub3QgYXMgdGhlCisJCQkgKiBiZWdpbm5pbmcgb2YgYSBmaWVsZCB3aWR0aC4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICovCisJCQlmbGFncyB8PSBaRVJPUEFEOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCW4gPSAwOworCQkJZG8geworCQkJCUFQUEVORF9ESUdJVChuLCBjaCk7CisJCQkJY2ggPSAqZm10Kys7CisJCQl9IHdoaWxlIChpc19kaWdpdChjaCkpOworCQkJaWYgKGNoID09ICckJykgeworCQkJCW5leHRhcmcgPSBuOworCQkJCWlmIChhcmd0YWJsZSA9PSBOVUxMKSB7CisJCQkJCWFyZ3RhYmxlID0gc3RhdGFyZ3RhYmxlOworCQkJCQlfX2ZpbmRfYXJndW1lbnRzKGZtdDAsIG9yZ2FwLAorCQkJCQkgICAgJmFyZ3RhYmxlLCAmYXJndGFibGVzaXopOworCQkJCX0KKwkJCQlnb3RvIHJmbGFnOworCQkJfQorCQkJd2lkdGggPSBuOworCQkJZ290byByZXN3aXRjaDsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlICdMJzoKKwkJCWZsYWdzIHw9IExPTkdEQkw7CisJCQlnb3RvIHJmbGFnOworI2VuZGlmCisJCWNhc2UgJ2gnOgorCQkJaWYgKCpmbXQgPT0gJ2gnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gQ0hBUklOVDsKKwkJCX0gZWxzZSB7CisJCQkJZmxhZ3MgfD0gU0hPUlRJTlQ7CisJCQl9CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdqJzoKKwkJCWZsYWdzIHw9IE1BWElOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ2wnOgorCQkJaWYgKCpmbXQgPT0gJ2wnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gTExPTkdJTlQ7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQl9CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdxJzoKKwkJCWZsYWdzIHw9IExMT05HSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAndCc6CisJCQlmbGFncyB8PSBQVFJJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICd6JzoKKwkJCWZsYWdzIHw9IFNJWkVJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdDJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnYyc6CisJCQlpZiAoZmxhZ3MgJiBMT05HSU5UKQorCQkJCSooY3AgPSBidWYpID0gKHdjaGFyX3QpR0VUQVJHKHdpbnRfdCk7CisJCQllbHNlCisJCQkJKihjcCA9IGJ1ZikgPSAod2NoYXJfdClidG93YyhHRVRBUkcoaW50KSk7CisJCQlzaXplID0gMTsKKwkJCXNpZ24gPSAnXDAnOworCQkJYnJlYWs7CisJCWNhc2UgJ0QnOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdkJzoKKwkJY2FzZSAnaSc6CisJCQlfdW1heCA9IFNBUkcoKTsKKwkJCWlmICgoaW50bWF4X3QpX3VtYXggPCAwKSB7CisJCQkJX3VtYXggPSAtX3VtYXg7CisJCQkJc2lnbiA9ICctJzsKKwkJCX0KKwkJCWJhc2UgPSBERUM7CisJCQlnb3RvIG51bWJlcjsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlICdhJzoKKwkJY2FzZSAnQSc6CisJCQlpZiAoY2ggPT0gJ2EnKSB7CisJCQkJb3hbMV0gPSAneCc7CisJCQkJeGRpZ3MgPSB4ZGlnc19sb3dlcjsKKwkJCQlleHBjaGFyID0gJ3AnOworCQkJfSBlbHNlIHsKKwkJCQlveFsxXSA9ICdYJzsKKwkJCQl4ZGlncyA9IHhkaWdzX3VwcGVyOworCQkJCWV4cGNoYXIgPSAnUCc7CisJCQl9CisJCQlpZiAocHJlYyA+PSAwKQorCQkJCXByZWMrKzsKKwkJCWlmIChkdG9hcmVzdWx0KQorCQkJCV9fZnJlZWR0b2EoZHRvYXJlc3VsdCk7CisJCQlpZiAoZmxhZ3MgJiBMT05HREJMKSB7CisJCQkJZnBhcmcubGRibCA9IEdFVEFSRyhsb25nIGRvdWJsZSk7CisJCQkJZHRvYXJlc3VsdCA9CisJCQkJICAgIF9faGxkdG9hKGZwYXJnLmxkYmwsIHhkaWdzLCBwcmVjLAorCQkJCSAgICAmZXhwdCwgJnNpZ25mbGFnLCAmZHRvYWVuZCk7CisJCQkJaWYgKGR0b2FyZXN1bHQgPT0gTlVMTCkgeworCQkJCQllcnJubyA9IEVOT01FTTsKKwkJCQkJZ290byBlcnJvcjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWZwYXJnLmRibCA9IEdFVEFSRyhkb3VibGUpOworCQkJCWR0b2FyZXN1bHQgPQorCQkJCSAgICBfX2hkdG9hKGZwYXJnLmRibCwgeGRpZ3MsIHByZWMsCisJCQkJICAgICZleHB0LCAmc2lnbmZsYWcsICZkdG9hZW5kKTsKKwkJCQlpZiAoZHRvYXJlc3VsdCA9PSBOVUxMKSB7CisJCQkJCWVycm5vID0gRU5PTUVNOworCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKwkJCX0KKwkJCWlmIChwcmVjIDwgMCkKKwkJCQlwcmVjID0gZHRvYWVuZCAtIGR0b2FyZXN1bHQ7CisJCQlpZiAoZXhwdCA9PSBJTlRfTUFYKQorCQkJCW94WzFdID0gJ1wwJzsKKwkJCWlmIChjb252YnVmKSB7CisJCQkJZnJlZShjb252YnVmKTsKKwkJCQljb252YnVmID0gTlVMTDsKKwkJCX0KKwkJCWNwID0gY29udmJ1ZiA9IF9fbWJzY29udihkdG9hcmVzdWx0LCAtMSk7CisJCQlpZiAoY3AgPT0gTlVMTCkKKwkJCQlnb3RvIGVycm9yOworCQkJbmRpZyA9IGR0b2FlbmQgLSBkdG9hcmVzdWx0OworCQkJZ290byBmcF9jb21tb247CisJCWNhc2UgJ2UnOgorCQljYXNlICdFJzoKKwkJCWV4cGNoYXIgPSBjaDsKKwkJCWlmIChwcmVjIDwgMCkJLyogYWNjb3VudCBmb3IgZGlnaXQgYmVmb3JlIGRlY3B0ICovCisJCQkJcHJlYyA9IERFRlBSRUMgKyAxOworCQkJZWxzZQorCQkJCXByZWMrKzsKKwkJCWdvdG8gZnBfYmVnaW47CisJCWNhc2UgJ2YnOgorCQljYXNlICdGJzoKKwkJCWV4cGNoYXIgPSAnXDAnOworCQkJZ290byBmcF9iZWdpbjsKKwkJY2FzZSAnZyc6CisJCWNhc2UgJ0cnOgorCQkJZXhwY2hhciA9IGNoIC0gKCdnJyAtICdlJyk7CisgCQkJaWYgKHByZWMgPT0gMCkKKyAJCQkJcHJlYyA9IDE7CitmcF9iZWdpbjoKKwkJCWlmIChwcmVjIDwgMCkKKwkJCQlwcmVjID0gREVGUFJFQzsKKwkJCWlmIChkdG9hcmVzdWx0KQorCQkJCV9fZnJlZWR0b2EoZHRvYXJlc3VsdCk7CisJCQlpZiAoZmxhZ3MgJiBMT05HREJMKSB7CisJCQkJZnBhcmcubGRibCA9IEdFVEFSRyhsb25nIGRvdWJsZSk7CisJCQkJZHRvYXJlc3VsdCA9CisJCQkJICAgIF9fbGR0b2EoJmZwYXJnLmxkYmwsIGV4cGNoYXIgPyAyIDogMywgcHJlYywKKwkJCQkgICAgJmV4cHQsICZzaWduZmxhZywgJmR0b2FlbmQpOworCQkJCWlmIChkdG9hcmVzdWx0ID09IE5VTEwpIHsKKwkJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlmcGFyZy5kYmwgPSBHRVRBUkcoZG91YmxlKTsKKwkJCQlkdG9hcmVzdWx0ID0KKwkJCQkgICAgX19kdG9hKGZwYXJnLmRibCwgZXhwY2hhciA/IDIgOiAzLCBwcmVjLAorCQkJCSAgICAmZXhwdCwgJnNpZ25mbGFnLCAmZHRvYWVuZCk7CisJCQkJaWYgKGR0b2FyZXN1bHQgPT0gTlVMTCkgeworCQkJCQllcnJubyA9IEVOT01FTTsKKwkJCQkJZ290byBlcnJvcjsKKwkJCQl9CisJCQkJaWYgKGV4cHQgPT0gOTk5OSkKKwkJCQkJZXhwdCA9IElOVF9NQVg7CisgCQkJfQorCQkJaWYgKGNvbnZidWYpIHsKKwkJCQlmcmVlKGNvbnZidWYpOworCQkJCWNvbnZidWYgPSBOVUxMOworCQkJfQorCQkJY3AgPSBjb252YnVmID0gX19tYnNjb252KGR0b2FyZXN1bHQsIC0xKTsKKwkJCWlmIChjcCA9PSBOVUxMKQorCQkJCWdvdG8gZXJyb3I7CisJCQluZGlnID0gZHRvYWVuZCAtIGR0b2FyZXN1bHQ7CitmcF9jb21tb246CisJCQlpZiAoc2lnbmZsYWcpCisJCQkJc2lnbiA9ICctJzsKKwkJCWlmIChleHB0ID09IElOVF9NQVgpIHsJLyogaW5mIG9yIG5hbiAqLworCQkJCWlmICgqY3AgPT0gJ04nKSB7CisJCQkJCWNwID0gKGNoID49ICdhJykgPyBMIm5hbiIgOiBMIk5BTiI7CisJCQkJCXNpZ24gPSAnXDAnOworCQkJCX0gZWxzZQorCQkJCQljcCA9IChjaCA+PSAnYScpID8gTCJpbmYiIDogTCJJTkYiOworIAkJCQlzaXplID0gMzsKKwkJCQlmbGFncyAmPSB+WkVST1BBRDsKKyAJCQkJYnJlYWs7CisgCQkJfQorCQkJZmxhZ3MgfD0gRlBUOworIAkJCWlmIChjaCA9PSAnZycgfHwgY2ggPT0gJ0cnKSB7CisJCQkJaWYgKGV4cHQgPiAtNCAmJiBleHB0IDw9IHByZWMpIHsKKwkJCQkJLyogTWFrZSAlW2dHXSBzbWVsbCBsaWtlICVbZkZdICovCisJCQkJCWV4cGNoYXIgPSAnXDAnOworCQkJCQlpZiAoZmxhZ3MgJiBBTFQpCisJCQkJCQlwcmVjIC09IGV4cHQ7CisJCQkJCWVsc2UKKwkJCQkJCXByZWMgPSBuZGlnIC0gZXhwdDsKKwkJCQkJaWYgKHByZWMgPCAwKQorCQkJCQkJcHJlYyA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogTWFrZSAlW2dHXSBzbWVsbCBsaWtlICVbZUVdLCBidXQKKwkJCQkJICogdHJpbSB0cmFpbGluZyB6ZXJvZXMgaWYgbm8gIyBmbGFnLgorCQkJCQkgKi8KKwkJCQkJaWYgKCEoZmxhZ3MgJiBBTFQpKQorCQkJCQkJcHJlYyA9IG5kaWc7CisJCQkJfQorIAkJCX0KKwkJCWlmIChleHBjaGFyKSB7CisJCQkJZXhwc2l6ZSA9IGV4cG9uZW50KGV4cHN0ciwgZXhwdCAtIDEsIGV4cGNoYXIpOworCQkJCXNpemUgPSBleHBzaXplICsgcHJlYzsKKwkJCQlpZiAocHJlYyA+IDEgfHwgZmxhZ3MgJiBBTFQpCisgCQkJCQkrK3NpemU7CisJCQl9IGVsc2UgeworCQkJCS8qIHNwYWNlIGZvciBkaWdpdHMgYmVmb3JlIGRlY2ltYWwgcG9pbnQgKi8KKwkJCQlpZiAoZXhwdCA+IDApCisJCQkJCXNpemUgPSBleHB0OworCQkJCWVsc2UJLyogIjAiICovCisJCQkJCXNpemUgPSAxOworCQkJCS8qIHNwYWNlIGZvciBkZWNpbWFsIHB0IGFuZCBmb2xsb3dpbmcgZGlnaXRzICovCisJCQkJaWYgKHByZWMgfHwgZmxhZ3MgJiBBTFQpCisJCQkJCXNpemUgKz0gcHJlYyArIDE7CisJCQkJbGVhZCA9IGV4cHQ7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLworI2lmbmRlZiBOT19QUklOVEZfUEVSQ0VOVF9OCisJCWNhc2UgJ24nOgorCQkJaWYgKGZsYWdzICYgTExPTkdJTlQpCisJCQkJKkdFVEFSRyhsb25nIGxvbmcgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIExPTkdJTlQpCisJCQkJKkdFVEFSRyhsb25nICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVElOVCkKKwkJCQkqR0VUQVJHKHNob3J0ICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBDSEFSSU5UKQorCQkJCSpHRVRBUkcoc2lnbmVkIGNoYXIgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIFBUUklOVCkKKwkJCQkqR0VUQVJHKHB0cmRpZmZfdCAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0laRUlOVCkKKwkJCQkqR0VUQVJHKHNzaXplX3QgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIE1BWElOVCkKKwkJCQkqR0VUQVJHKGludG1heF90ICopID0gcmV0OworCQkJZWxzZQorCQkJCSpHRVRBUkcoaW50ICopID0gcmV0OworCQkJY29udGludWU7CS8qIG5vIG91dHB1dCAqLworI2VuZGlmIC8qIE5PX1BSSU5URl9QRVJDRU5UX04gKi8KKwkJY2FzZSAnTyc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ28nOgorCQkJX3VtYXggPSBVQVJHKCk7CisJCQliYXNlID0gT0NUOworCQkJZ290byBub3NpZ247CisJCWNhc2UgJ3AnOgorCQkJLyoKKwkJCSAqIGBgVGhlIGFyZ3VtZW50IHNoYWxsIGJlIGEgcG9pbnRlciB0byB2b2lkLiAgVGhlCisJCQkgKiB2YWx1ZSBvZiB0aGUgcG9pbnRlciBpcyBjb252ZXJ0ZWQgdG8gYSBzZXF1ZW5jZQorCQkJICogb2YgcHJpbnRhYmxlIGNoYXJhY3RlcnMsIGluIGFuIGltcGxlbWVudGF0aW9uLQorCQkJICogZGVmaW5lZCBtYW5uZXIuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworCQkJLyogTk9TVFJJQ1QgKi8KKwkJCV91bWF4ID0gKHVfbG9uZylHRVRBUkcodm9pZCAqKTsKKwkJCWJhc2UgPSBIRVg7CisJCQl4ZGlncyA9IHhkaWdzX2xvd2VyOworCQkJb3hbMV0gPSAneCc7CisJCQlnb3RvIG5vc2lnbjsKKwkJY2FzZSAnUyc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ3MnOgorCQkJaWYgKGZsYWdzICYgTE9OR0lOVCkgeworCQkJCWlmICgoY3AgPSBHRVRBUkcod2NoYXJfdCAqKSkgPT0gTlVMTCkKKwkJCQkJY3AgPSBMIihudWxsKSI7CisJCQl9IGVsc2UgeworCQkJCWNoYXIgKm1ic2FyZzsKKwkJCQlpZiAoKG1ic2FyZyA9IEdFVEFSRyhjaGFyICopKSA9PSBOVUxMKQorCQkJCQltYnNhcmcgPSAiKG51bGwpIjsKKwkJCQlpZiAoY29udmJ1ZikgeworCQkJCQlmcmVlKGNvbnZidWYpOworCQkJCQljb252YnVmID0gTlVMTDsKKwkJCQl9CisJCQkJY29udmJ1ZiA9IF9fbWJzY29udihtYnNhcmcsIHByZWMpOworCQkJCWlmIChjb252YnVmID09IE5VTEwpIHsKKwkJCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfSBlbHNlCisJCQkJCWNwID0gY29udmJ1ZjsKKwkJCX0KKwkJCWlmIChwcmVjID49IDApIHsKKwkJCQkvKgorCQkJCSAqIGNhbid0IHVzZSB3Y3NsZW47IGNhbiBvbmx5IGxvb2sgZm9yIHRoZQorCQkJCSAqIE5VTCBpbiB0aGUgZmlyc3QgYHByZWMnIGNoYXJhY3RlcnMsIGFuZAorCQkJCSAqIHdjc2xlbigpIHdpbGwgZ28gZnVydGhlci4KKwkJCQkgKi8KKwkJCQl3Y2hhcl90ICpwID0gd21lbWNocihjcCwgMCwgcHJlYyk7CisKKwkJCQlzaXplID0gcCA/IChwIC0gY3ApIDogcHJlYzsKKwkJCX0gZWxzZSB7CisJCQkJc2l6ZV90IGxlbjsKKworCQkJCWlmICgobGVuID0gd2NzbGVuKGNwKSkgPiBJTlRfTUFYKQorCQkJCQlnb3RvIG92ZXJmbG93OworCQkJCXNpemUgPSAoaW50KWxlbjsKKwkJCX0KKwkJCXNpZ24gPSAnXDAnOworCQkJYnJlYWs7CisJCWNhc2UgJ1UnOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICd1JzoKKwkJCV91bWF4ID0gVUFSRygpOworCQkJYmFzZSA9IERFQzsKKwkJCWdvdG8gbm9zaWduOworCQljYXNlICdYJzoKKwkJCXhkaWdzID0geGRpZ3NfdXBwZXI7CisJCQlnb3RvIGhleDsKKwkJY2FzZSAneCc6CisJCQl4ZGlncyA9IHhkaWdzX2xvd2VyOworaGV4OgkJCV91bWF4ID0gVUFSRygpOworCQkJYmFzZSA9IEhFWDsKKwkJCS8qIGxlYWRpbmcgMHgvWCBvbmx5IGlmIG5vbi16ZXJvICovCisJCQlpZiAoZmxhZ3MgJiBBTFQgJiYgX3VtYXggIT0gMCkKKwkJCQlveFsxXSA9IGNoOworCisJCQkvKiB1bnNpZ25lZCBjb252ZXJzaW9ucyAqLworbm9zaWduOgkJCXNpZ24gPSAnXDAnOworCQkJLyoKKwkJCSAqIGBgLi4uIGRpb3VYeCBjb252ZXJzaW9ucyAuLi4gaWYgYSBwcmVjaXNpb24gaXMKKwkJCSAqIHNwZWNpZmllZCwgdGhlIDAgZmxhZyB3aWxsIGJlIGlnbm9yZWQuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworbnVtYmVyOgkJCWlmICgoZHByZWMgPSBwcmVjKSA+PSAwKQorCQkJCWZsYWdzICY9IH5aRVJPUEFEOworCisJCQkvKgorCQkJICogYGBUaGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgYSB6ZXJvIHZhbHVlIHdpdGggYW4KKwkJCSAqIGV4cGxpY2l0IHByZWNpc2lvbiBvZiB6ZXJvIGlzIG5vIGNoYXJhY3RlcnMuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworCQkJY3AgPSBidWYgKyBCVUY7CisJCQlpZiAoX3VtYXggIT0gMCB8fCBwcmVjICE9IDApIHsKKwkJCQkvKgorCQkJCSAqIFVuc2lnbmVkIG1vZCBpcyBoYXJkLCBhbmQgdW5zaWduZWQgbW9kCisJCQkJICogYnkgYSBjb25zdGFudCBpcyBlYXNpZXIgdGhhbiB0aGF0IGJ5CisJCQkJICogYSB2YXJpYWJsZTsgaGVuY2UgdGhpcyBzd2l0Y2guCisJCQkJICovCisJCQkJc3dpdGNoIChiYXNlKSB7CisJCQkJY2FzZSBPQ1Q6CisJCQkJCWRvIHsKKwkJCQkJCSotLWNwID0gdG9fY2hhcihfdW1heCAmIDcpOworCQkJCQkJX3VtYXggPj49IDM7CisJCQkJCX0gd2hpbGUgKF91bWF4KTsKKwkJCQkJLyogaGFuZGxlIG9jdGFsIGxlYWRpbmcgMCAqLworCQkJCQlpZiAoZmxhZ3MgJiBBTFQgJiYgKmNwICE9ICcwJykKKwkJCQkJCSotLWNwID0gJzAnOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgREVDOgorCQkJCQkvKiBtYW55IG51bWJlcnMgYXJlIDEgZGlnaXQgKi8KKwkJCQkJd2hpbGUgKF91bWF4ID49IDEwKSB7CisJCQkJCQkqLS1jcCA9IHRvX2NoYXIoX3VtYXggJSAxMCk7CisJCQkJCQlfdW1heCAvPSAxMDsKKwkJCQkJfQorCQkJCQkqLS1jcCA9IHRvX2NoYXIoX3VtYXgpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgSEVYOgorCQkJCQlkbyB7CisJCQkJCQkqLS1jcCA9IHhkaWdzW191bWF4ICYgMTVdOworCQkJCQkJX3VtYXggPj49IDQ7CisJCQkJCX0gd2hpbGUgKF91bWF4KTsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQljcCA9IEwiYnVnIGluIHZmd3ByaW50ZjogYmFkIGJhc2UiOworCQkJCQlzaXplID0gd2NzbGVuKGNwKTsKKwkJCQkJZ290byBza2lwc2l6ZTsKKwkJCQl9CisJCQl9CisJCQlzaXplID0gYnVmICsgQlVGIC0gY3A7CisJCQlpZiAoc2l6ZSA+IEJVRikJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQkJCWFib3J0KCk7CisJCXNraXBzaXplOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CS8qICIlPyIgcHJpbnRzID8sIHVubGVzcyA/IGlzIE5VTCAqLworCQkJaWYgKGNoID09ICdcMCcpCisJCQkJZ290byBkb25lOworCQkJLyogcHJldGVuZCBpdCB3YXMgJWMgd2l0aCBhcmd1bWVudCBjaCAqLworCQkJY3AgPSBidWY7CisJCQkqY3AgPSBjaDsKKwkJCXNpemUgPSAxOworCQkJc2lnbiA9ICdcMCc7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIEFsbCByZWFzb25hYmxlIGZvcm1hdHMgd2luZCB1cCBoZXJlLiAgQXQgdGhpcyBwb2ludCwgYGNwJworCQkgKiBwb2ludHMgdG8gYSBzdHJpbmcgd2hpY2ggKGlmIG5vdCBmbGFncyZMQURKVVNUKSBzaG91bGQgYmUKKwkJICogcGFkZGVkIG91dCB0byBgd2lkdGgnIHBsYWNlcy4gIElmIGZsYWdzJlpFUk9QQUQsIGl0IHNob3VsZAorCQkgKiBmaXJzdCBiZSBwcmVmaXhlZCBieSBhbnkgc2lnbiBvciBvdGhlciBwcmVmaXg7IG90aGVyd2lzZSwKKwkJICogaXQgc2hvdWxkIGJlIGJsYW5rIHBhZGRlZCBiZWZvcmUgdGhlIHByZWZpeCBpcyBlbWl0dGVkLgorCQkgKiBBZnRlciBhbnkgbGVmdC1oYW5kIHBhZGRpbmcgYW5kIHByZWZpeGluZywgZW1pdCB6ZXJvZXMKKwkJICogcmVxdWlyZWQgYnkgYSBkZWNpbWFsICVbZGlvdXhYXSBwcmVjaXNpb24sIHRoZW4gcHJpbnQgdGhlCisJCSAqIHN0cmluZyBwcm9wZXIsIHRoZW4gZW1pdCB6ZXJvZXMgcmVxdWlyZWQgYnkgYW55IGxlZnRvdmVyCisJCSAqIGZsb2F0aW5nIHByZWNpc2lvbjsgZmluYWxseSwgaWYgTEFESlVTVCwgcGFkIHdpdGggYmxhbmtzLgorCQkgKgorCQkgKiBDb21wdXRlIGFjdHVhbCBzaXplLCBzbyB3ZSBrbm93IGhvdyBtdWNoIHRvIHBhZC4KKwkJICogc2l6ZSBleGNsdWRlcyBkZWNpbWFsIHByZWM7IHJlYWxzeiBpbmNsdWRlcyBpdC4KKwkJICovCisJCXJlYWxzeiA9IGRwcmVjID4gc2l6ZSA/IGRwcmVjIDogc2l6ZTsKKwkJaWYgKHNpZ24pCisJCQlyZWFsc3orKzsKKwkJaWYgKG94WzFdKQorCQkJcmVhbHN6Kz0gMjsKKworCQkvKiByaWdodC1hZGp1c3RpbmcgYmxhbmsgcGFkZGluZyAqLworCQlpZiAoKGZsYWdzICYgKExBREpVU1R8WkVST1BBRCkpID09IDApCisJCQlQQUQod2lkdGggLSByZWFsc3osIGJsYW5rcyk7CisKKwkJLyogcHJlZml4ICovCisJCWlmIChzaWduKQorCQkJUFJJTlQoJnNpZ24sIDEpOworCQlpZiAob3hbMV0pIHsJLyogb3hbMV0gaXMgZWl0aGVyIHgsIFgsIG9yIFwwICovCisJCQlveFswXSA9ICcwJzsKKwkJCVBSSU5UKG94LCAyKTsKKwkJfQorCisJCS8qIHJpZ2h0LWFkanVzdGluZyB6ZXJvIHBhZGRpbmcgKi8KKwkJaWYgKChmbGFncyAmIChMQURKVVNUfFpFUk9QQUQpKSA9PSBaRVJPUEFEKQorCQkJUEFEKHdpZHRoIC0gcmVhbHN6LCB6ZXJvZXMpOworCisJCS8qIGxlYWRpbmcgemVyb2VzIGZyb20gZGVjaW1hbCBwcmVjaXNpb24gKi8KKwkJUEFEKGRwcmVjIC0gc2l6ZSwgemVyb2VzKTsKKworCQkvKiB0aGUgc3RyaW5nIG9yIG51bWJlciBwcm9wZXIgKi8KKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQlpZiAoKGZsYWdzICYgRlBUKSA9PSAwKSB7CisJCQlQUklOVChjcCwgc2l6ZSk7CisJCX0gZWxzZSB7CS8qIGdsdWUgdG9nZXRoZXIgZl9wIGZyYWdtZW50cyAqLworCQkJaWYgKGRlY2ltYWxfcG9pbnQgPT0gTlVMTCkKKwkJCQlkZWNpbWFsX3BvaW50ID0gbmxfbGFuZ2luZm8oUkFESVhDSEFSKTsKKwkJCWlmICghZXhwY2hhcikgewkvKiAlW2ZGXSBvciBzdWZmaWNpZW50bHkgc2hvcnQgJVtnR10gKi8KKwkJCQlpZiAoZXhwdCA8PSAwKSB7CisJCQkJCVBSSU5UKHplcm9lcywgMSk7CisJCQkJCWlmIChwcmVjIHx8IGZsYWdzICYgQUxUKQorCQkJCQkJUFJJTlQoZGVjaW1hbF9wb2ludCwgMSk7CisJCQkJCVBBRCgtZXhwdCwgemVyb2VzKTsKKwkJCQkJLyogYWxyZWFkeSBoYW5kbGVkIGluaXRpYWwgMCdzICovCisJCQkJCXByZWMgKz0gZXhwdDsKKyAJCQkJfSBlbHNlIHsKKwkJCQkJUFJJTlRBTkRQQUQoY3AsIGNvbnZidWYgKyBuZGlnLAorCQkJCQkgICAgbGVhZCwgemVyb2VzKTsKKwkJCQkJY3AgKz0gbGVhZDsKKwkJCQkJaWYgKHByZWMgfHwgZmxhZ3MgJiBBTFQpCisJCQkJCQlQUklOVChkZWNpbWFsX3BvaW50LCAxKTsKKwkJCQl9CisJCQkJUFJJTlRBTkRQQUQoY3AsIGNvbnZidWYgKyBuZGlnLCBwcmVjLCB6ZXJvZXMpOworCQkJfSBlbHNlIHsJLyogJVtlRV0gb3Igc3VmZmljaWVudGx5IGxvbmcgJVtnR10gKi8KKwkJCQlpZiAocHJlYyA+IDEgfHwgZmxhZ3MgJiBBTFQpIHsKKwkJCQkJYnVmWzBdID0gKmNwKys7CisJCQkJCWJ1ZlsxXSA9ICpkZWNpbWFsX3BvaW50OworCQkJCQlQUklOVChidWYsIDIpOworCQkJCQlQUklOVChjcCwgbmRpZy0xKTsKKwkJCQkJUEFEKHByZWMgLSBuZGlnLCB6ZXJvZXMpOworCQkJCX0gZWxzZSB7IC8qIFhlWVlZICovCisJCQkJCVBSSU5UKGNwLCAxKTsKKwkJCQl9CisJCQkJUFJJTlQoZXhwc3RyLCBleHBzaXplKTsKKwkJCX0KKwkJfQorI2Vsc2UKKwkJUFJJTlQoY3AsIHNpemUpOworI2VuZGlmCisJCS8qIGxlZnQtYWRqdXN0aW5nIHBhZGRpbmcgKGFsd2F5cyBibGFuaykgKi8KKwkJaWYgKGZsYWdzICYgTEFESlVTVCkKKwkJCVBBRCh3aWR0aCAtIHJlYWxzeiwgYmxhbmtzKTsKKworCQkvKiBmaW5hbGx5LCBhZGp1c3QgcmV0ICovCisJCWlmICh3aWR0aCA8IHJlYWxzeikKKwkJCXdpZHRoID0gcmVhbHN6OworCQlpZiAod2lkdGggPiBJTlRfTUFYIC0gcmV0KQorCQkJZ290byBvdmVyZmxvdzsKKwkJcmV0ICs9IHdpZHRoOworCX0KK2RvbmU6CitlcnJvcjoKKwl2YV9lbmQob3JnYXApOworCWlmIChfX3NmZXJyb3IoZnApKQorCQlyZXQgPSAtMTsKKwlnb3RvIGZpbmlzaDsKKworb3ZlcmZsb3c6CisJZXJybm8gPSBFTk9NRU07CisJcmV0ID0gLTE7CisKK2ZpbmlzaDoKKwlpZiAoY29udmJ1ZikKKwkJZnJlZShjb252YnVmKTsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCWlmIChkdG9hcmVzdWx0KQorCQlfX2ZyZWVkdG9hKGR0b2FyZXN1bHQpOworI2VuZGlmCisJaWYgKGFyZ3RhYmxlICE9IE5VTEwgJiYgYXJndGFibGUgIT0gc3RhdGFyZ3RhYmxlKSB7CisJCW11bm1hcChhcmd0YWJsZSwgYXJndGFibGVzaXopOworCQlhcmd0YWJsZSA9IE5VTEw7CisJfQorCXJldHVybiAocmV0KTsKK30KKworaW50Cit2ZndwcmludGYoRklMRSAqIF9fcmVzdHJpY3QgZnAsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IGZtdDAsIF9fdmFfbGlzdCBhcCkKK3sKKwlpbnQgcjsKKworCUZMT0NLRklMRShmcCk7CisJciA9IF9fdmZ3cHJpbnRmKGZwLCBmbXQwLCBhcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCisJcmV0dXJuIChyKTsKK30KKworLyoKKyAqIFR5cGUgaWRzIGZvciBhcmd1bWVudCB0eXBlIHRhYmxlLgorICovCisjZGVmaW5lIFRfVU5VU0VECTAKKyNkZWZpbmUgVF9TSE9SVAkJMQorI2RlZmluZSBUX1VfU0hPUlQJMgorI2RlZmluZSBUUF9TSE9SVAkzCisjZGVmaW5lIFRfSU5UCQk0CisjZGVmaW5lIFRfVV9JTlQJCTUKKyNkZWZpbmUgVFBfSU5UCQk2CisjZGVmaW5lIFRfTE9ORwkJNworI2RlZmluZSBUX1VfTE9ORwk4CisjZGVmaW5lIFRQX0xPTkcJCTkKKyNkZWZpbmUgVF9MTE9ORwkJMTAKKyNkZWZpbmUgVF9VX0xMT05HCTExCisjZGVmaW5lIFRQX0xMT05HCTEyCisjZGVmaW5lIFRfRE9VQkxFCTEzCisjZGVmaW5lIFRfTE9OR19ET1VCTEUJMTQKKyNkZWZpbmUgVFBfQ0hBUgkJMTUKKyNkZWZpbmUgVFBfVk9JRAkJMTYKKyNkZWZpbmUgVF9QVFJJTlQJMTcKKyNkZWZpbmUgVFBfUFRSSU5UCTE4CisjZGVmaW5lIFRfU0laRUlOVAkxOQorI2RlZmluZSBUX1NTSVpFSU5UCTIwCisjZGVmaW5lIFRQX1NTSVpFSU5UCTIxCisjZGVmaW5lIFRfTUFYSU5UCTIyCisjZGVmaW5lIFRfTUFYVUlOVAkyMworI2RlZmluZSBUUF9NQVhJTlQJMjQKKyNkZWZpbmUgVF9DSEFSCQkyNQorI2RlZmluZSBUX1VfQ0hBUgkyNgorI2RlZmluZSBUX1dJTlQJCTI3CisjZGVmaW5lIFRQX1dDSEFSCTI4CisKKy8qCisgKiBGaW5kIGFsbCBhcmd1bWVudHMgd2hlbiBhIHBvc2l0aW9uYWwgcGFyYW1ldGVyIGlzIGVuY291bnRlcmVkLiAgUmV0dXJucyBhCisgKiB0YWJsZSwgaW5kZXhlZCBieSBhcmd1bWVudCBudW1iZXIsIG9mIHBvaW50ZXJzIHRvIGVhY2ggYXJndW1lbnRzLiAgVGhlCisgKiBpbml0aWFsIGFyZ3VtZW50IHRhYmxlIHNob3VsZCBiZSBhbiBhcnJheSBvZiBTVEFUSUNfQVJHX1RCTF9TSVpFIGVudHJpZXMuCisgKiBJdCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSBtbWFwLWVkIG9uZSBpZiBpdCBvdmVyZmxvd3MgKG1hbGxvYyBjYW5ub3QgYmUKKyAqIHVzZWQgc2luY2Ugd2UgYXJlIGF0dGVtcHRpbmcgdG8gbWFrZSBzbnByaW50ZiB0aHJlYWQgc2FmZSwgYW5kIGFsbG9jYSBpcworICogcHJvYmxlbWF0aWMgc2luY2Ugd2UgaGF2ZSBuZXN0ZWQgZnVuY3Rpb25zLi4pCisgKi8KK3N0YXRpYyBpbnQKK19fZmluZF9hcmd1bWVudHMoY29uc3Qgd2NoYXJfdCAqZm10MCwgdmFfbGlzdCBhcCwgdW5pb24gYXJnICoqYXJndGFibGUsCisgICAgc2l6ZV90ICphcmd0YWJsZXNpeikKK3sKKwl3Y2hhcl90ICpmbXQ7CQkvKiBmb3JtYXQgc3RyaW5nICovCisJaW50IGNoOwkJCS8qIGNoYXJhY3RlciBmcm9tIGZtdCAqLworCWludCBuLCBuMjsJCS8qIGhhbmR5IGludGVnZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCisJd2NoYXJfdCAqY3A7CQkvKiBoYW5keSBjaGFyIHBvaW50ZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCisJaW50IGZsYWdzOwkJLyogZmxhZ3MgYXMgYWJvdmUgKi8KKwl1bnNpZ25lZCBjaGFyICp0eXBldGFibGU7IC8qIHRhYmxlIG9mIHR5cGVzICovCisJdW5zaWduZWQgY2hhciBzdGF0dHlwZXRhYmxlW1NUQVRJQ19BUkdfVEJMX1NJWkVdOworCWludCB0YWJsZXNpemU7CQkvKiBjdXJyZW50IHNpemUgb2YgdHlwZSB0YWJsZSAqLworCWludCB0YWJsZW1heDsJCS8qIGxhcmdlc3QgdXNlZCBpbmRleCBpbiB0YWJsZSAqLworCWludCBuZXh0YXJnOwkJLyogMS1iYXNlZCBhcmd1bWVudCBpbmRleCAqLworCWludCByZXQgPSAwOwkJLyogcmV0dXJuIHZhbHVlICovCisKKwkvKgorCSAqIEFkZCBhbiBhcmd1bWVudCB0eXBlIHRvIHRoZSB0YWJsZSwgZXhwYW5kaW5nIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKyNkZWZpbmUgQUREVFlQRSh0eXBlKSBcCisJKChuZXh0YXJnID49IHRhYmxlc2l6ZSkgPyBcCisJCV9fZ3Jvd190eXBlX3RhYmxlKCZ0eXBldGFibGUsICZ0YWJsZXNpemUpIDogMCwgXAorCShuZXh0YXJnID4gdGFibGVtYXgpID8gdGFibGVtYXggPSBuZXh0YXJnIDogMCwgXAorCXR5cGV0YWJsZVtuZXh0YXJnKytdID0gdHlwZSkKKworI2RlZmluZQlBRERTQVJHKCkgXAorICAgICAgICAoKGZsYWdzJk1BWElOVCkgPyBBRERUWVBFKFRfTUFYSU5UKSA6IFwKKwkgICAgKChmbGFncyZQVFJJTlQpID8gQUREVFlQRShUX1BUUklOVCkgOiBcCisJICAgICgoZmxhZ3MmU0laRUlOVCkgPyBBRERUWVBFKFRfU1NJWkVJTlQpIDogXAorCSAgICAoKGZsYWdzJkxMT05HSU5UKSA/IEFERFRZUEUoVF9MTE9ORykgOiBcCisJICAgICgoZmxhZ3MmTE9OR0lOVCkgPyBBRERUWVBFKFRfTE9ORykgOiBcCisJICAgICgoZmxhZ3MmU0hPUlRJTlQpID8gQUREVFlQRShUX1NIT1JUKSA6IFwKKwkgICAgKChmbGFncyZDSEFSSU5UKSA/IEFERFRZUEUoVF9DSEFSKSA6IEFERFRZUEUoVF9JTlQpKSkpKSkpKQorCisjZGVmaW5lCUFERFVBUkcoKSBcCisgICAgICAgICgoZmxhZ3MmTUFYSU5UKSA/IEFERFRZUEUoVF9NQVhVSU5UKSA6IFwKKwkgICAgKChmbGFncyZQVFJJTlQpID8gQUREVFlQRShUX1BUUklOVCkgOiBcCisJICAgICgoZmxhZ3MmU0laRUlOVCkgPyBBRERUWVBFKFRfU0laRUlOVCkgOiBcCisJICAgICgoZmxhZ3MmTExPTkdJTlQpID8gQUREVFlQRShUX1VfTExPTkcpIDogXAorCSAgICAoKGZsYWdzJkxPTkdJTlQpID8gQUREVFlQRShUX1VfTE9ORykgOiBcCisJICAgICgoZmxhZ3MmU0hPUlRJTlQpID8gQUREVFlQRShUX1VfU0hPUlQpIDogXAorCSAgICAoKGZsYWdzJkNIQVJJTlQpID8gQUREVFlQRShUX1VfQ0hBUikgOiBBRERUWVBFKFRfVV9JTlQpKSkpKSkpKQorCisJLyoKKwkgKiBBZGQgKiBhcmd1bWVudHMgdG8gdGhlIHR5cGUgYXJyYXkuCisJICovCisjZGVmaW5lIEFEREFTVEVSKCkgXAorCW4yID0gMDsgXAorCWNwID0gZm10OyBcCisJd2hpbGUgKGlzX2RpZ2l0KCpjcCkpIHsgXAorCQlBUFBFTkRfRElHSVQobjIsICpjcCk7IFwKKwkJY3ArKzsgXAorCX0gXAorCWlmICgqY3AgPT0gJyQnKSB7IFwKKwkJaW50IGhvbGQgPSBuZXh0YXJnOyBcCisJCW5leHRhcmcgPSBuMjsgXAorCQlBRERUWVBFKFRfSU5UKTsgXAorCQluZXh0YXJnID0gaG9sZDsgXAorCQlmbXQgPSArK2NwOyBcCisJfSBlbHNlIHsgXAorCQlBRERUWVBFKFRfSU5UKTsgXAorCX0KKwlmbXQgPSAod2NoYXJfdCAqKWZtdDA7CisJdHlwZXRhYmxlID0gc3RhdHR5cGV0YWJsZTsKKwl0YWJsZXNpemUgPSBTVEFUSUNfQVJHX1RCTF9TSVpFOworCXRhYmxlbWF4ID0gMDsKKwluZXh0YXJnID0gMTsKKwltZW1zZXQodHlwZXRhYmxlLCBUX1VOVVNFRCwgU1RBVElDX0FSR19UQkxfU0laRSk7CisKKwkvKgorCSAqIFNjYW4gdGhlIGZvcm1hdCBmb3IgY29udmVyc2lvbnMgKGAlJyBjaGFyYWN0ZXIpLgorCSAqLworCWZvciAoOzspIHsKKwkJZm9yIChjcCA9IGZtdDsgKGNoID0gKmZtdCkgIT0gJ1wwJyAmJiBjaCAhPSAnJSc7IGZtdCsrKQorCQkJY29udGludWU7CisJCWlmIChjaCA9PSAnXDAnKQorCQkJZ290byBkb25lOworCQlmbXQrKzsJCS8qIHNraXAgb3ZlciAnJScgKi8KKworCQlmbGFncyA9IDA7CisKK3JmbGFnOgkJY2ggPSAqZm10Kys7CityZXN3aXRjaDoJc3dpdGNoIChjaCkgeworCQljYXNlICcgJzoKKwkJY2FzZSAnIyc6CisJCWNhc2UgJ1wnJzoKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJyonOgorCQkJQUREQVNURVIoKTsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJy0nOgorCQljYXNlICcrJzoKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJy4nOgorCQkJaWYgKChjaCA9ICpmbXQrKykgPT0gJyonKSB7CisJCQkJQUREQVNURVIoKTsKKwkJCQlnb3RvIHJmbGFnOworCQkJfQorCQkJd2hpbGUgKGlzX2RpZ2l0KGNoKSkgeworCQkJCWNoID0gKmZtdCsrOworCQkJfQorCQkJZ290byByZXN3aXRjaDsKKwkJY2FzZSAnMCc6CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKwkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJbiA9IDA7CisJCQlkbyB7CisJCQkJQVBQRU5EX0RJR0lUKG4gLGNoKTsKKwkJCQljaCA9ICpmbXQrKzsKKwkJCX0gd2hpbGUgKGlzX2RpZ2l0KGNoKSk7CisJCQlpZiAoY2ggPT0gJyQnKSB7CisJCQkJbmV4dGFyZyA9IG47CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCWdvdG8gcmVzd2l0Y2g7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSAnTCc6CisJCQlmbGFncyB8PSBMT05HREJMOworCQkJZ290byByZmxhZzsKKyNlbmRpZgorCQljYXNlICdoJzoKKwkJCWlmICgqZm10ID09ICdoJykgeworCQkJCWZtdCsrOworCQkJCWZsYWdzIHw9IENIQVJJTlQ7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IFNIT1JUSU5UOworCQkJfQorCQkJZ290byByZmxhZzsKKwkJY2FzZSAnbCc6CisJCQlpZiAoKmZtdCA9PSAnbCcpIHsKKwkJCQlmbXQrKzsKKwkJCQlmbGFncyB8PSBMTE9OR0lOVDsKKwkJCX0gZWxzZSB7CisJCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCX0KKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3EnOgorCQkJZmxhZ3MgfD0gTExPTkdJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICd0JzoKKwkJCWZsYWdzIHw9IFBUUklOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3onOgorCQkJZmxhZ3MgfD0gU0laRUlOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ0MnOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdjJzoKKwkJCWlmIChmbGFncyAmIExPTkdJTlQpCisJCQkJQUREVFlQRShUX1dJTlQpOworCQkJZWxzZQorCQkJCUFERFRZUEUoVF9JTlQpOworCQkJYnJlYWs7CisJCWNhc2UgJ0QnOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdkJzoKKwkJY2FzZSAnaSc6CisJCQlBRERTQVJHKCk7CisJCQlicmVhazsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlICdhJzoKKwkJY2FzZSAnQSc6CisJCWNhc2UgJ2UnOgorCQljYXNlICdFJzoKKwkJY2FzZSAnZic6CisJCWNhc2UgJ0YnOgorCQljYXNlICdnJzoKKwkJY2FzZSAnRyc6CisJCQlpZiAoZmxhZ3MgJiBMT05HREJMKQorCQkJCUFERFRZUEUoVF9MT05HX0RPVUJMRSk7CisJCQllbHNlCisJCQkJQUREVFlQRShUX0RPVUJMRSk7CisJCQlicmVhazsKKyNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLworI2lmbmRlZiBOT19QUklOVEZfUEVSQ0VOVF9OCisJCWNhc2UgJ24nOgorCQkJaWYgKGZsYWdzICYgTExPTkdJTlQpCisJCQkJQUREVFlQRShUUF9MTE9ORyk7CisJCQllbHNlIGlmIChmbGFncyAmIExPTkdJTlQpCisJCQkJQUREVFlQRShUUF9MT05HKTsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlRJTlQpCisJCQkJQUREVFlQRShUUF9TSE9SVCk7CisJCQllbHNlIGlmIChmbGFncyAmIFBUUklOVCkKKwkJCQlBRERUWVBFKFRQX1BUUklOVCk7CisJCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCisJCQkJQUREVFlQRShUUF9TU0laRUlOVCk7CisJCQllbHNlIGlmIChmbGFncyAmIE1BWElOVCkKKwkJCQlBRERUWVBFKFRQX01BWElOVCk7CisJCQllbHNlCisJCQkJQUREVFlQRShUUF9JTlQpOworCQkJY29udGludWU7CS8qIG5vIG91dHB1dCAqLworI2VuZGlmIC8qIE5PX1BSSU5URl9QRVJDRU5UX04gKi8KKwkJY2FzZSAnTyc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ28nOgorCQkJQUREVUFSRygpOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJQUREVFlQRShUUF9WT0lEKTsKKwkJCWJyZWFrOworCQljYXNlICdTJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAncyc6CisJCQlpZiAoZmxhZ3MgJiBMT05HSU5UKQorCQkJCUFERFRZUEUoVFBfQ0hBUik7CisJCQllbHNlCisJCQkJQUREVFlQRShUUF9XQ0hBUik7CisJCQlicmVhazsKKwkJY2FzZSAnVSc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ3UnOgorCQljYXNlICdYJzoKKwkJY2FzZSAneCc6CisJCQlBRERVQVJHKCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoJLyogIiU/IiBwcmludHMgPywgdW5sZXNzID8gaXMgTlVMICovCisJCQlpZiAoY2ggPT0gJ1wwJykKKwkJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKwkJfQorCX0KK2RvbmU6CisJLyoKKwkgKiBCdWlsZCB0aGUgYXJndW1lbnQgdGFibGUuCisJICovCisJaWYgKHRhYmxlbWF4ID49IFNUQVRJQ19BUkdfVEJMX1NJWkUpIHsKKwkJKmFyZ3RhYmxlc2l6ID0gc2l6ZW9mKHVuaW9uIGFyZykgKiAodGFibGVtYXggKyAxKTsKKwkJKmFyZ3RhYmxlID0gbW1hcChOVUxMLCAqYXJndGFibGVzaXosCisJCSAgICBQUk9UX1dSSVRFfFBST1RfUkVBRCwgTUFQX0FOT058TUFQX1BSSVZBVEUsIC0xLCAwKTsKKwkJaWYgKCphcmd0YWJsZSA9PSBNQVBfRkFJTEVEKQorCQkJcmV0dXJuICgtMSk7CisJfQorCisjaWYgMAorCS8qIFhYWCBpcyB0aGlzIHJlcXVpcmVkPyAqLworCSgqYXJndGFibGUpWzBdLmludGFyZyA9IDA7CisjZW5kaWYKKwlmb3IgKG4gPSAxOyBuIDw9IHRhYmxlbWF4OyBuKyspIHsKKwkJc3dpdGNoICh0eXBldGFibGVbbl0pIHsKKwkJY2FzZSBUX1VOVVNFRDoKKwkJY2FzZSBUX0NIQVI6CisJCWNhc2UgVF9VX0NIQVI6CisJCWNhc2UgVF9TSE9SVDoKKwkJY2FzZSBUX1VfU0hPUlQ6CisJCWNhc2UgVF9JTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5pbnRhcmcgPSB2YV9hcmcoYXAsIGludCk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9TSE9SVDoKKwkJCSgqYXJndGFibGUpW25dLnBzaG9ydGFyZyA9IHZhX2FyZyhhcCwgc2hvcnQgKik7CisJCQlicmVhazsKKwkJY2FzZSBUX1VfSU5UOgorCQkJKCphcmd0YWJsZSlbbl0udWludGFyZyA9IHZhX2FyZyhhcCwgdW5zaWduZWQgaW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX0lOVDoKKwkJCSgqYXJndGFibGUpW25dLnBpbnRhcmcgPSB2YV9hcmcoYXAsIGludCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfTE9ORzoKKwkJCSgqYXJndGFibGUpW25dLmxvbmdhcmcgPSB2YV9hcmcoYXAsIGxvbmcpOworCQkJYnJlYWs7CisJCWNhc2UgVF9VX0xPTkc6CisJCQkoKmFyZ3RhYmxlKVtuXS51bG9uZ2FyZyA9IHZhX2FyZyhhcCwgdW5zaWduZWQgbG9uZyk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9MT05HOgorCQkJKCphcmd0YWJsZSlbbl0ucGxvbmdhcmcgPSB2YV9hcmcoYXAsIGxvbmcgKik7CisJCQlicmVhazsKKwkJY2FzZSBUX0xMT05HOgorCQkJKCphcmd0YWJsZSlbbl0ubG9uZ2xvbmdhcmcgPSB2YV9hcmcoYXAsIGxvbmcgbG9uZyk7CisJCQlicmVhazsKKwkJY2FzZSBUX1VfTExPTkc6CisJCQkoKmFyZ3RhYmxlKVtuXS51bG9uZ2xvbmdhcmcgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGxvbmcgbG9uZyk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9MTE9ORzoKKwkJCSgqYXJndGFibGUpW25dLnBsb25nbG9uZ2FyZyA9IHZhX2FyZyhhcCwgbG9uZyBsb25nICopOworCQkJYnJlYWs7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSBUX0RPVUJMRToKKwkJCSgqYXJndGFibGUpW25dLmRvdWJsZWFyZyA9IHZhX2FyZyhhcCwgZG91YmxlKTsKKwkJCWJyZWFrOworCQljYXNlIFRfTE9OR19ET1VCTEU6CisJCQkoKmFyZ3RhYmxlKVtuXS5sb25nZG91YmxlYXJnID0gdmFfYXJnKGFwLCBsb25nIGRvdWJsZSk7CisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlIFRQX0NIQVI6CisJCQkoKmFyZ3RhYmxlKVtuXS5wY2hhcmFyZyA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1ZPSUQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5wdm9pZGFyZyA9IHZhX2FyZyhhcCwgdm9pZCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfUFRSSU5UOgorCQkJKCphcmd0YWJsZSlbbl0ucHRyZGlmZmFyZyA9IHZhX2FyZyhhcCwgcHRyZGlmZl90KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1BUUklOVDoKKwkJCSgqYXJndGFibGUpW25dLnBwdHJkaWZmYXJnID0gdmFfYXJnKGFwLCBwdHJkaWZmX3QgKik7CisJCQlicmVhazsKKwkJY2FzZSBUX1NJWkVJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS5zaXplYXJnID0gdmFfYXJnKGFwLCBzaXplX3QpOworCQkJYnJlYWs7CisJCWNhc2UgVF9TU0laRUlOVDoKKwkJCSgqYXJndGFibGUpW25dLnNzaXplYXJnID0gdmFfYXJnKGFwLCBzc2l6ZV90KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1NTSVpFSU5UOgorCQkJKCphcmd0YWJsZSlbbl0ucHNzaXplYXJnID0gdmFfYXJnKGFwLCBzc2l6ZV90ICopOworCQkJYnJlYWs7CisJCWNhc2UgVFBfTUFYSU5UOgorCQkJKCphcmd0YWJsZSlbbl0uaW50bWF4YXJnID0gdmFfYXJnKGFwLCBpbnRtYXhfdCk7CisJCQlicmVhazsKKwkJY2FzZSBUX1dJTlQ6CisJCQkoKmFyZ3RhYmxlKVtuXS53aW50YXJnID0gdmFfYXJnKGFwLCB3aW50X3QpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfV0NIQVI6CisJCQkoKmFyZ3RhYmxlKVtuXS5wd2NoYXJhcmcgPSB2YV9hcmcoYXAsIHdjaGFyX3QgKik7CisJCQlicmVhazsKKwkJfQorCX0KKwlnb3RvIGZpbmlzaDsKKworb3ZlcmZsb3c6CisJZXJybm8gPSBFTk9NRU07CisJcmV0ID0gLTE7CisKK2ZpbmlzaDoKKwlpZiAodHlwZXRhYmxlICE9IE5VTEwgJiYgdHlwZXRhYmxlICE9IHN0YXR0eXBldGFibGUpIHsKKwkJbXVubWFwKHR5cGV0YWJsZSwgKmFyZ3RhYmxlc2l6KTsKKwkJdHlwZXRhYmxlID0gTlVMTDsKKwl9CisJcmV0dXJuIChyZXQpOworfQorCisvKgorICogSW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHR5cGUgdGFibGUuCisgKi8KK3N0YXRpYyBpbnQKK19fZ3Jvd190eXBlX3RhYmxlKHVuc2lnbmVkIGNoYXIgKip0eXBldGFibGUsIGludCAqdGFibGVzaXplKQoreworCXVuc2lnbmVkIGNoYXIgKm9sZHRhYmxlID0gKnR5cGV0YWJsZTsKKwlpbnQgbmV3c2l6ZSA9ICp0YWJsZXNpemUgKiAyOworCisJaWYgKG5ld3NpemUgPCBnZXRwYWdlc2l6ZSgpKQorCQluZXdzaXplID0gZ2V0cGFnZXNpemUoKTsKKworCWlmICgqdGFibGVzaXplID09IFNUQVRJQ19BUkdfVEJMX1NJWkUpIHsKKwkJKnR5cGV0YWJsZSA9IG1tYXAoTlVMTCwgbmV3c2l6ZSwgUFJPVF9XUklURXxQUk9UX1JFQUQsCisJCSAgICBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIDApOworCQlpZiAoKnR5cGV0YWJsZSA9PSBNQVBfRkFJTEVEKQorCQkJcmV0dXJuICgtMSk7CisJCWJjb3B5KG9sZHRhYmxlLCAqdHlwZXRhYmxlLCAqdGFibGVzaXplKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBjaGFyICpuZXcgPSBtbWFwKE5VTEwsIG5ld3NpemUsIFBST1RfV1JJVEV8UFJPVF9SRUFELAorCQkgICAgTUFQX0FOT058TUFQX1BSSVZBVEUsIC0xLCAwKTsKKwkJaWYgKG5ldyA9PSBNQVBfRkFJTEVEKQorCQkJcmV0dXJuICgtMSk7CisJCW1lbW1vdmUobmV3LCAqdHlwZXRhYmxlLCAqdGFibGVzaXplKTsKKwkJbXVubWFwKCp0eXBldGFibGUsICp0YWJsZXNpemUpOworCQkqdHlwZXRhYmxlID0gbmV3OworCX0KKwltZW1zZXQoKnR5cGV0YWJsZSArICp0YWJsZXNpemUsIFRfVU5VU0VELCAobmV3c2l6ZSAtICp0YWJsZXNpemUpKTsKKworCSp0YWJsZXNpemUgPSBuZXdzaXplOworCXJldHVybiAoMCk7Cit9CisKKyAKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorc3RhdGljIGludAorZXhwb25lbnQod2NoYXJfdCAqcDAsIGludCBleHAsIGludCBmbXRjaCkKK3sKKwl3Y2hhcl90ICpwLCAqdDsKKwl3Y2hhcl90IGV4cGJ1ZltNQVhFWFBESUddOworCisJcCA9IHAwOworCSpwKysgPSBmbXRjaDsKKwlpZiAoZXhwIDwgMCkgeworCQlleHAgPSAtZXhwOworCQkqcCsrID0gJy0nOworCX0gZWxzZQorCQkqcCsrID0gJysnOworCXQgPSBleHBidWYgKyBNQVhFWFBESUc7CisJaWYgKGV4cCA+IDkpIHsKKwkJZG8geworCQkJKi0tdCA9IHRvX2NoYXIoZXhwICUgMTApOworCQl9IHdoaWxlICgoZXhwIC89IDEwKSA+IDkpOworCQkqLS10ID0gdG9fY2hhcihleHApOworCQlmb3IgKDsgdCA8IGV4cGJ1ZiArIE1BWEVYUERJRzsgKnArKyA9ICp0KyspCisJCQkvKiBub3RoaW5nICovOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEV4cG9uZW50cyBmb3IgZGVjaW1hbCBmbG9hdGluZyBwb2ludCBjb252ZXJzaW9ucworCQkgKiAoJVtlRWdHXSkgbXVzdCBiZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBsb25nLAorCQkgKiB3aGVyZWFzIGV4cG9uZW50cyBmb3IgaGV4YWRlY2ltYWwgY29udmVyc2lvbnMgY2FuCisJCSAqIGJlIG9ubHkgb25lIGNoYXJhY3RlciBsb25nLgorCQkgKi8KKwkJaWYgKGZtdGNoID09ICdlJyB8fCBmbXRjaCA9PSAnRScpCisJCQkqcCsrID0gJzAnOworCQkqcCsrID0gdG9fY2hhcihleHApOworCX0KKwlyZXR1cm4gKHAgLSBwMCk7Cit9CisjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZndzY2FuZi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Zmd3NjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiMzZiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92ZndzY2FuZi5jCkBAIC0wLDAgKzEsNzk4IEBACisvKgkkT3BlbkJTRDogdmZ3c2NhbmYuYyx2IDEuNCAyMDE0LzAzLzE5IDA1OjE3OjAxIGd1ZW50aGVyIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d2N0eXBlLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisjaW5jbHVkZSAiZmxvYXRpby5oIgorI2VuZGlmCisKKyNkZWZpbmUJQlVGCQk1MTMJLyogTWF4aW11bSBsZW5ndGggb2YgbnVtZXJpYyBzdHJpbmcuICovCisKKy8qCisgKiBGbGFncyB1c2VkIGR1cmluZyBjb252ZXJzaW9uLgorICovCisjZGVmaW5lCUxPTkcJCTB4MDAwMDEJLyogbDogbG9uZyBvciBkb3VibGUgKi8KKyNkZWZpbmUJTE9OR0RCTAkJMHgwMDAwMgkvKiBMOiBsb25nIGRvdWJsZSAqLworI2RlZmluZQlTSE9SVAkJMHgwMDAwNAkvKiBoOiBzaG9ydCAqLworI2RlZmluZQlTSE9SVFNIT1JUCTB4MDAwMDgJLyogaGg6IDggYml0IGludGVnZXIgKi8KKyNkZWZpbmUgTExPTkcJCTB4MDAwMTAJLyogbGw6IGxvbmcgbG9uZyAoKyBkZXByZWNhdGVkIHE6IHF1YWQpICovCisjZGVmaW5lCVBPSU5URVIJCTB4MDAwMjAJLyogcDogdm9pZCAqIChhcyBoZXgpICovCisjZGVmaW5lCVNJWkVJTlQJCTB4MDAwNDAJLyogejogKHNpZ25lZCkgc2l6ZV90ICovCisjZGVmaW5lCU1BWElOVAkJMHgwMDA4MAkvKiBqOiBpbnRtYXhfdCAqLworI2RlZmluZQlQVFJJTlQJCTB4MDAxMDAJLyogdDogcHRyZGlmZl90ICovCisjZGVmaW5lCU5PU0tJUAkJMHgwMDIwMAkvKiBbIG9yIGM6IGRvIG5vdCBza2lwIGJsYW5rcyAqLworI2RlZmluZQlTVVBQUkVTUwkweDAwNDAwCS8qICo6IHN1cHByZXNzIGFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJVU5TSUdORUQJMHgwMDgwMAkvKiAlW291cHhYXSBjb252ZXJzaW9ucyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdXNlZCBpbiBudW1lcmljIGNvbnZlcnNpb25zIG9ubHk6CisgKiBTSUdOT0ssIEhBVkVTSUdOLCBORElHSVRTLCBEUFRPSywgYW5kIEVYUE9LIGFyZSBmb3IgZmxvYXRpbmcgcG9pbnQ7CisgKiBTSUdOT0ssIEhBVkVTSUdOLCBORElHSVRTLCBQRlhPSywgYW5kIE5aRElHSVRTIGFyZSBmb3IgaW50ZWdyYWwuCisgKi8KKyNkZWZpbmUJU0lHTk9LCQkweDAxMDAwCS8qICsvLSBpcyAoc3RpbGwpIGxlZ2FsICovCisjZGVmaW5lCUhBVkVTSUdOCTB4MDIwMDAJLyogc2lnbiBkZXRlY3RlZCAqLworI2RlZmluZQlORElHSVRTCQkweDA0MDAwCS8qIG5vIGRpZ2l0cyBkZXRlY3RlZCAqLworCisjZGVmaW5lCURQVE9LCQkweDA4MDAwCS8qIChmbG9hdCkgZGVjaW1hbCBwb2ludCBpcyBzdGlsbCBsZWdhbCAqLworI2RlZmluZQlFWFBPSwkJMHgxMDAwMAkvKiAoZmxvYXQpIGV4cG9uZW50IChlKzMsIGV0Yykgc3RpbGwgbGVnYWwgKi8KKworI2RlZmluZQlQRlhPSwkJMHgwODAwMAkvKiAweCBwcmVmaXggaXMgKHN0aWxsKSBsZWdhbCAqLworI2RlZmluZQlOWkRJR0lUUwkweDEwMDAwCS8qIG5vIHplcm8gZGlnaXRzIGRldGVjdGVkICovCisKKy8qCisgKiBDb252ZXJzaW9uIHR5cGVzLgorICovCisjZGVmaW5lCUNUX0NIQVIJCTAJLyogJWMgY29udmVyc2lvbiAqLworI2RlZmluZQlDVF9DQ0wJCTEJLyogJVsuLi5dIGNvbnZlcnNpb24gKi8KKyNkZWZpbmUJQ1RfU1RSSU5HCTIJLyogJXMgY29udmVyc2lvbiAqLworI2RlZmluZQlDVF9JTlQJCTMJLyogaW50ZWdlciwgaS5lLiwgc3RydG9pbWF4IG9yIHN0cnRvdW1heCAqLworI2RlZmluZQlDVF9GTE9BVAk0CS8qIGZsb2F0aW5nLCBpLmUuLCBzdHJ0b2QgKi8KKworI2RlZmluZSB1X2NoYXIgdW5zaWduZWQgY2hhcgorI2RlZmluZSB1X2xvbmcgdW5zaWduZWQgbG9uZworCisjZGVmaW5lCUlOQ0NMKF9jKQlcCisJKGNjbGNvbXBsID8gKHdtZW1jaHIoY2NscywgKF9jKSwgY2NsZSAtIGNjbHMpID09IE5VTEwpIDogXAorCSh3bWVtY2hyKGNjbHMsIChfYyksIGNjbGUgLSBjY2xzKSAhPSBOVUxMKSkKKworLyoKKyAqIHZmd3NjYW5mCisgKi8KK2ludAorX192ZndzY2FuZihGSUxFICogX19yZXN0cmljdCBmcCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgZm10LCBfX3ZhX2xpc3QgYXApCit7CisJd2ludF90IGM7CS8qIGNoYXJhY3RlciBmcm9tIGZvcm1hdCwgb3IgY29udmVyc2lvbiAqLworCXNpemVfdCB3aWR0aDsJLyogZmllbGQgd2lkdGgsIG9yIDAgKi8KKwl3Y2hhcl90ICpwOwkvKiBwb2ludHMgaW50byBhbGwga2luZHMgb2Ygc3RyaW5ncyAqLworCWludCBuOwkJLyogaGFuZHkgaW50ZWdlciAqLworCWludCBmbGFnczsJLyogZmxhZ3MgYXMgZGVmaW5lZCBhYm92ZSAqLworCXdjaGFyX3QgKnAwOwkvKiBzYXZlcyBvcmlnaW5hbCB2YWx1ZSBvZiBwIHdoZW4gbmVjZXNzYXJ5ICovCisJaW50IG5hc3NpZ25lZDsJCS8qIG51bWJlciBvZiBmaWVsZHMgYXNzaWduZWQgKi8KKwlpbnQgbmNvbnZlcnNpb25zOwkvKiBudW1iZXIgb2YgY29udmVyc2lvbnMgKi8KKwlpbnQgbnJlYWQ7CQkvKiBudW1iZXIgb2YgY2hhcmFjdGVycyBjb25zdW1lZCBmcm9tIGZwICovCisJaW50IGJhc2U7CQkvKiBiYXNlIGFyZ3VtZW50IHRvIHN0cnRvaW1heC9zdHJ0b3VpbWF4ICovCisJd2NoYXJfdCBidWZbQlVGXTsJLyogYnVmZmVyIGZvciBudW1lcmljIGNvbnZlcnNpb25zICovCisJY29uc3Qgd2NoYXJfdCAqY2NsczsJLyogY2hhcmFjdGVyIGNsYXNzIHN0YXJ0ICovCisJY29uc3Qgd2NoYXJfdCAqY2NsZTsJLyogY2hhcmFjdGVyIGNsYXNzIGVuZCAqLworCWludCBjY2xjb21wbDsJCS8qIGNjbCBpcyBjb21wbGVtZW50ZWQ/ICovCisJd2ludF90IHdpOwkJLyogaGFuZHkgd2ludF90ICovCisJY2hhciAqbWJwOwkJLyogbXVsdGlieXRlIHN0cmluZyBwb2ludGVyIGZvciAlYyAlcyAlWyAqLworCXNpemVfdCBuY29udjsJCS8qIG51bWJlciBvZiBieXRlcyBpbiBtYi4gY29udmVyc2lvbiAqLworCWNoYXIgbWJidWZbTUJfTEVOX01BWF07CS8qIHRlbXBvcmFyeSBtYi4gY2hhcmFjdGVyIGJ1ZmZlciAqLworIAltYnN0YXRlX3QgbWJzOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJd2NoYXJfdCBkZWNpbWFsX3BvaW50ID0gMDsKKyNlbmRpZgorCisJLyogYGJhc2VmaXgnIGlzIHVzZWQgdG8gYXZvaWQgYGlmJyB0ZXN0cyBpbiB0aGUgaW50ZWdlciBzY2FubmVyICovCisJc3RhdGljIHNob3J0IGJhc2VmaXhbMTddID0KKwkJeyAxMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYgfTsKKworCV9TRVRfT1JJRU5UQVRJT04oZnAsIDEpOworCisJbmFzc2lnbmVkID0gMDsKKwluY29udmVyc2lvbnMgPSAwOworCW5yZWFkID0gMDsKKwliYXNlID0gMDsJCS8qIFhYWCBqdXN0IHRvIGtlZXAgZ2NjIGhhcHB5ICovCisJY2NscyA9IGNjbGUgPSBOVUxMOworCWZvciAoOzspIHsKKwkJYyA9ICpmbXQrKzsKKwkJaWYgKGMgPT0gMCkgeworCQkJcmV0dXJuIChuYXNzaWduZWQpOworCQl9CisJCWlmIChpc3dzcGFjZShjKSkgeworCQkJd2hpbGUgKChjID0gX19mZ2V0d2NfdW5sb2NrKGZwKSkgIT0gV0VPRiAmJgorCQkJICAgIGlzd3NwYWNlKGMpKQorCQkJCTsKKwkJCWlmIChjICE9IFdFT0YpCisJCQkJX191bmdldHdjKGMsIGZwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjICE9ICclJykKKwkJCWdvdG8gbGl0ZXJhbDsKKwkJd2lkdGggPSAwOworCQlmbGFncyA9IDA7CisJCS8qCisJCSAqIHN3aXRjaCBvbiB0aGUgZm9ybWF0LiAgY29udGludWUgaWYgZG9uZTsKKwkJICogYnJlYWsgb25jZSBmb3JtYXQgdHlwZSBpcyBkZXJpdmVkLgorCQkgKi8KK2FnYWluOgkJYyA9ICpmbXQrKzsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJyUnOgorbGl0ZXJhbDoKKwkJCWlmICgod2kgPSBfX2ZnZXR3Y191bmxvY2soZnApKSA9PSBXRU9GKQorCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCWlmICh3aSAhPSBjKSB7CisJCQkJX191bmdldHdjKHdpLCBmcCk7CisJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJfQorCQkJbnJlYWQrKzsKKwkJCWNvbnRpbnVlOworCisJCWNhc2UgJyonOgorCQkJZmxhZ3MgfD0gU1VQUFJFU1M7CisJCQlnb3RvIGFnYWluOworCQljYXNlICdqJzoKKwkJCWZsYWdzIHw9IE1BWElOVDsKKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ0wnOgorCQkJZmxhZ3MgfD0gTE9OR0RCTDsKKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ2gnOgorCQkJaWYgKCpmbXQgPT0gJ2gnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gU0hPUlRTSE9SVDsKKwkJCX0gZWxzZSB7CisJCQkJZmxhZ3MgfD0gU0hPUlQ7CisJCQl9CisJCQlnb3RvIGFnYWluOworCQljYXNlICdsJzoKKwkJCWlmICgqZm10ID09ICdsJykgeworCQkJCWZtdCsrOworCQkJCWZsYWdzIHw9IExMT05HOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBMT05HOworCQkJfQorCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAncSc6CisJCQlmbGFncyB8PSBMTE9ORzsJCS8qIGRlcHJlY2F0ZWQgKi8KKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ3QnOgorCQkJZmxhZ3MgfD0gUFRSSU5UOworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAneic6CisJCQlmbGFncyB8PSBTSVpFSU5UOworCQkJZ290byBhZ2FpbjsKKworCQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCXdpZHRoID0gd2lkdGggKiAxMCArIGMgLSAnMCc7CisJCQlnb3RvIGFnYWluOworCisJCS8qCisJCSAqIENvbnZlcnNpb25zLgorCQkgKiBUaG9zZSBtYXJrZWQgYGNvbXBhdCcgYXJlIGZvciA0LlsxMjNdQlNEIGNvbXBhdGliaWxpdHkuCisJCSAqCisJCSAqIChBY2NvcmRpbmcgdG8gQU5TSSwgRSBhbmQgWCBmb3JtYXRzIGFyZSBzdXBwb3NlZAorCQkgKiB0byB0aGUgc2FtZSBhcyBlIGFuZCB4LiAgU29ycnkgYWJvdXQgdGhhdC4pCisJCSAqLworCQljYXNlICdEJzoJLyogY29tcGF0ICovCisJCQlmbGFncyB8PSBMT05HOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAnZCc6CisJCQljID0gQ1RfSU5UOworCQkJYmFzZSA9IDEwOworCQkJYnJlYWs7CisKKwkJY2FzZSAnaSc6CisJCQljID0gQ1RfSU5UOworCQkJYmFzZSA9IDA7CisJCQlicmVhazsKKworCQljYXNlICdPJzoJLyogY29tcGF0ICovCisJCQlmbGFncyB8PSBMT05HOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAnbyc6CisJCQljID0gQ1RfSU5UOworCQkJZmxhZ3MgfD0gVU5TSUdORUQ7CisJCQliYXNlID0gODsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3UnOgorCQkJYyA9IENUX0lOVDsKKwkJCWZsYWdzIHw9IFVOU0lHTkVEOworCQkJYmFzZSA9IDEwOworCQkJYnJlYWs7CisKKwkJY2FzZSAnWCc6CisJCWNhc2UgJ3gnOgorCQkJZmxhZ3MgfD0gUEZYT0s7CS8qIGVuYWJsZSAweCBwcmVmaXhpbmcgKi8KKwkJCWMgPSBDVF9JTlQ7CisJCQlmbGFncyB8PSBVTlNJR05FRDsKKwkJCWJhc2UgPSAxNjsKKwkJCWJyZWFrOworCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSAnZSc6IGNhc2UgJ0UnOgorCQljYXNlICdmJzogY2FzZSAnRic6CisJCWNhc2UgJ2cnOiBjYXNlICdHJzoKKwkJY2FzZSAnYSc6IGNhc2UgJ0EnOgorCQkJYyA9IENUX0ZMT0FUOworCQkJYnJlYWs7CisjZW5kaWYKKworCQljYXNlICdzJzoKKwkJCWMgPSBDVF9TVFJJTkc7CisJCQlicmVhazsKKworCQljYXNlICdbJzoKKwkJCWNjbHMgPSBmbXQ7CisJCQlpZiAoKmZtdCA9PSAnXicpIHsKKwkJCQljY2xjb21wbCA9IDE7CisJCQkJZm10Kys7CisJCQl9IGVsc2UKKwkJCQljY2xjb21wbCA9IDA7CisJCQlpZiAoKmZtdCA9PSAnXScpCisJCQkJZm10Kys7CisJCQl3aGlsZSAoKmZtdCAhPSAnXDAnICYmICpmbXQgIT0gJ10nKQorCQkJCWZtdCsrOworCQkJY2NsZSA9IGZtdDsKKwkJCWZtdCsrOworCQkJZmxhZ3MgfD0gTk9TS0lQOworCQkJYyA9IENUX0NDTDsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2MnOgorCQkJZmxhZ3MgfD0gTk9TS0lQOworCQkJYyA9IENUX0NIQVI7CisJCQlicmVhazsKKworCQljYXNlICdwJzoJLyogcG9pbnRlciBmb3JtYXQgaXMgbGlrZSBoZXggKi8KKwkJCWZsYWdzIHw9IFBPSU5URVIgfCBQRlhPSzsKKwkJCWMgPSBDVF9JTlQ7CisJCQlmbGFncyB8PSBVTlNJR05FRDsKKwkJCWJhc2UgPSAxNjsKKwkJCWJyZWFrOworCisJCWNhc2UgJ24nOgorCQkJbmNvbnZlcnNpb25zKys7CisJCQlpZiAoZmxhZ3MgJiBTVVBQUkVTUykKKwkJCQljb250aW51ZTsKKwkJCWlmIChmbGFncyAmIFNIT1JUU0hPUlQpCisJCQkJKnZhX2FyZyhhcCwgc2lnbmVkIGNoYXIgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlQpCisJCQkJKnZhX2FyZyhhcCwgc2hvcnQgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTE9ORykKKwkJCQkqdmFfYXJnKGFwLCBsb25nICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCisJCQkJKnZhX2FyZyhhcCwgc3NpemVfdCAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCisJCQkJKnZhX2FyZyhhcCwgcHRyZGlmZl90ICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIExMT05HKQorCQkJCSp2YV9hcmcoYXAsIGxvbmcgbG9uZyAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCisJCQkJKnZhX2FyZyhhcCwgaW50bWF4X3QgKikgPSBucmVhZDsKKwkJCWVsc2UKKwkJCQkqdmFfYXJnKGFwLCBpbnQgKikgPSBucmVhZDsKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIERpc2d1c3RpbmcgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaGFja3MuCVhYWAorCQkgKi8KKwkJY2FzZSAnXDAnOgkvKiBjb21wYXQgKi8KKwkJCXJldHVybiAoRU9GKTsKKworCQlkZWZhdWx0OgkvKiBjb21wYXQgKi8KKwkJCWlmIChpc3d1cHBlcihjKSkKKwkJCQlmbGFncyB8PSBMT05HOworCQkJYyA9IENUX0lOVDsKKwkJCWJhc2UgPSAxMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogQ29uc3VtZSBsZWFkaW5nIHdoaXRlIHNwYWNlLCBleGNlcHQgZm9yIGZvcm1hdHMKKwkJICogdGhhdCBzdXBwcmVzcyB0aGlzLgorCQkgKi8KKwkJaWYgKChmbGFncyAmIE5PU0tJUCkgPT0gMCkgeworCQkJd2hpbGUgKCh3aSA9IF9fZmdldHdjX3VubG9jayhmcCkpICE9IFdFT0YgJiYKKwkJCSAgICBpc3dzcGFjZSh3aSkpCisJCQkJbnJlYWQrKzsKKwkJCWlmICh3aSA9PSBXRU9GKQorCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCV9fdW5nZXR3Yyh3aSwgZnApOworCQl9CisKKwkJLyoKKwkJICogRG8gdGhlIGNvbnZlcnNpb24uCisJCSAqLworCQlzd2l0Y2ggKGMpIHsKKworCQljYXNlIENUX0NIQVI6CisJCQkvKiBzY2FuIGFyYml0cmFyeSBjaGFyYWN0ZXJzIChzZXRzIE5PU0tJUCkgKi8KKwkJCWlmICh3aWR0aCA9PSAwKQorCQkJCXdpZHRoID0gMTsKKyAJCQlpZiAoZmxhZ3MgJiBMT05HKSB7CisJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCXAgPSB2YV9hcmcoYXAsIHdjaGFyX3QgKik7CisJCQkJbiA9IDA7CisJCQkJd2hpbGUgKHdpZHRoLS0gIT0gMCAmJgorCQkJCSAgICAod2kgPSBfX2ZnZXR3Y191bmxvY2soZnApKSAhPSBXRU9GKSB7CisJCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKQorCQkJCQkJKnArKyA9ICh3Y2hhcl90KXdpOworCQkJCQluKys7CisJCQkJfQorCQkJCWlmIChuID09IDApCisJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQlucmVhZCArPSBuOworIAkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKyAJCQkJCW5hc3NpZ25lZCsrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJbWJwID0gdmFfYXJnKGFwLCBjaGFyICopOworCQkJCW4gPSAwOworCQkJCWJ6ZXJvKCZtYnMsIHNpemVvZihtYnMpKTsKKwkJCQl3aGlsZSAod2lkdGggIT0gMCAmJgorCQkJCSAgICAod2kgPSBfX2ZnZXR3Y191bmxvY2soZnApKSAhPSBXRU9GKSB7CisJCQkJCWlmICh3aWR0aCA+PSBNQl9DVVJfTUFYICYmCisJCQkJCSAgICAhKGZsYWdzICYgU1VQUFJFU1MpKSB7CisJCQkJCQluY29udiA9IHdjcnRvbWIobWJwLCB3aSwgJm1icyk7CisJCQkJCQlpZiAobmNvbnYgPT0gKHNpemVfdCktMSkKKwkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluY29udiA9IHdjcnRvbWIobWJidWYsIHdpLAorCQkJCQkJICAgICZtYnMpOworCQkJCQkJaWYgKG5jb252ID09IChzaXplX3QpLTEpCisJCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQkJaWYgKG5jb252ID4gd2lkdGgpIHsKKwkJCQkJCQlfX3VuZ2V0d2Mod2ksIGZwKTsKKyAJCQkJCQkJYnJlYWs7CisgCQkJCQkJfQorCQkJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCQkJbWVtY3B5KG1icCwgbWJidWYsCisJCQkJCQkJICAgIG5jb252KTsKKyAJCQkJCX0KKwkJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCQltYnAgKz0gbmNvbnY7CisJCQkJCXdpZHRoIC09IG5jb252OworCQkJCQluKys7CisgCQkJCX0KKwkJCQlpZiAobiA9PSAwKQorIAkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCW5yZWFkICs9IG47CisJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCW5hc3NpZ25lZCsrOworCQkJfQorCQkJbmNvbnZlcnNpb25zKys7CisJCQlicmVhazsKKworCQljYXNlIENUX0NDTDoKKwkJCS8qIHNjYW4gYSAobm9uZW1wdHkpIGNoYXJhY3RlciBjbGFzcyAoc2V0cyBOT1NLSVApICovCisJCQlpZiAod2lkdGggPT0gMCkKKwkJCQl3aWR0aCA9IChzaXplX3QpfjA7CS8qIGBpbmZpbml0eScgKi8KKwkJCS8qIHRha2Ugb25seSB0aG9zZSB0aGluZ3MgaW4gdGhlIGNsYXNzICovCisJCQlpZiAoKGZsYWdzICYgU1VQUFJFU1MpICYmIChmbGFncyAmIExPTkcpKSB7CisJCQkJbiA9IDA7CisJCQkJd2hpbGUgKCh3aSA9IF9fZmdldHdjX3VubG9jayhmcCkpICE9IFdFT0YgJiYKKwkJCQkgICAgd2lkdGgtLSAhPSAwICYmIElOQ0NMKHdpKSkKKwkJCQkJbisrOworCQkJCWlmICh3aSAhPSBXRU9GKQorCQkJCQlfX3VuZ2V0d2Mod2ksIGZwKTsKKwkJCQlpZiAobiA9PSAwKQorCQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQl9IGVsc2UgaWYgKGZsYWdzICYgTE9ORykgeworCQkJCXAwID0gcCA9IHZhX2FyZyhhcCwgd2NoYXJfdCAqKTsKKwkJCQl3aGlsZSAoKHdpID0gX19mZ2V0d2NfdW5sb2NrKGZwKSkgIT0gV0VPRiAmJgorCQkJCSAgICB3aWR0aC0tICE9IDAgJiYgSU5DQ0wod2kpKQorCQkJCQkqcCsrID0gKHdjaGFyX3Qpd2k7CisJCQkJaWYgKHdpICE9IFdFT0YpCisJCQkJCV9fdW5nZXR3Yyh3aSwgZnApOworCQkJCW4gPSBwIC0gcDA7CisJCQkJaWYgKG4gPT0gMCkKKwkJCQkJZ290byBtYXRjaF9mYWlsdXJlOworCQkJCSpwID0gMDsKKwkJCQluYXNzaWduZWQrKzsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCW1icCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkJCQluID0gMDsKKwkJCQliemVybygmbWJzLCBzaXplb2YobWJzKSk7CisJCQkJd2hpbGUgKCh3aSA9IF9fZmdldHdjX3VubG9jayhmcCkpICE9IFdFT0YgJiYKKwkJCQkgICAgd2lkdGggIT0gMCAmJiBJTkNDTCh3aSkpIHsKKwkJCQkJaWYgKHdpZHRoID49IE1CX0NVUl9NQVggJiYKKwkJCQkJICAgIShmbGFncyAmIFNVUFBSRVNTKSkgeworCQkJCQkJbmNvbnYgPSB3Y3J0b21iKG1icCwgd2ksICZtYnMpOworCQkJCQkJaWYgKG5jb252ID09IChzaXplX3QpLTEpCisJCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQl9IGVsc2UgeworCQkJCQkJbmNvbnYgPSB3Y3J0b21iKG1iYnVmLCB3aSwKKwkJCQkJCSAgICAmbWJzKTsKKwkJCQkJCWlmIChuY29udiA9PSAoc2l6ZV90KS0xKQorCQkJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQkJCWlmIChuY29udiA+IHdpZHRoKQorCQkJCQkJCWJyZWFrOworCQkJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCQkJbWVtY3B5KG1icCwgbWJidWYsCisJCQkJCQkJICAgIG5jb252KTsKKwkJCQkJfQorCQkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJCW1icCArPSBuY29udjsKKwkJCQkJd2lkdGggLT0gbmNvbnY7CisJCQkJCW4rKzsKKwkJCQl9CisJCQkJaWYgKHdpICE9IFdFT0YpCisJCQkJCV9fdW5nZXR3Yyh3aSwgZnApOworCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKSB7CisJCQkJCSptYnAgPSAwOworCQkJCQluYXNzaWduZWQrKzsKKwkJCQl9CisgCQkJfQorCQkJbnJlYWQgKz0gbjsKKwkJCW5jb252ZXJzaW9ucysrOworCQkJYnJlYWs7CisKKwkJY2FzZSBDVF9TVFJJTkc6CisJCQkvKiBsaWtlIENDTCwgYnV0IHplcm8tbGVuZ3RoIHN0cmluZyBPSywgJiBubyBOT1NLSVAgKi8KKwkJCWlmICh3aWR0aCA9PSAwKQorCQkJCXdpZHRoID0gKHNpemVfdCl+MDsKKwkJCWlmICgoZmxhZ3MgJiBTVVBQUkVTUykgJiYgKGZsYWdzICYgTE9ORykpIHsKKwkJCQl3aGlsZSAoKHdpID0gX19mZ2V0d2NfdW5sb2NrKGZwKSkgIT0gV0VPRiAmJgorCQkJCSAgICB3aWR0aC0tICE9IDAgJiYKKwkJCQkgICAgIWlzd3NwYWNlKHdpKSkKKwkJCQkJbnJlYWQrKzsKKwkJCQlpZiAod2kgIT0gV0VPRikKKwkJCQkJX191bmdldHdjKHdpLCBmcCk7CisJCQl9IGVsc2UgaWYgKGZsYWdzICYgTE9ORykgeworCQkJCXAwID0gcCA9IHZhX2FyZyhhcCwgd2NoYXJfdCAqKTsKKwkJCQl3aGlsZSAoKHdpID0gX19mZ2V0d2NfdW5sb2NrKGZwKSkgIT0gV0VPRiAmJgorCQkJCSAgICB3aWR0aC0tICE9IDAgJiYKKwkJCQkgICAgIWlzd3NwYWNlKHdpKSkgeworCQkJCQkqcCsrID0gKHdjaGFyX3Qpd2k7CisJCQkJCW5yZWFkKys7CisJCQkJfQorCQkJCWlmICh3aSAhPSBXRU9GKQorCQkJCQlfX3VuZ2V0d2Mod2ksIGZwKTsKKwkJCQkqcCA9IDA7CisJCQkJbmFzc2lnbmVkKys7CisJCQl9IGVsc2UgeworCQkJCWlmICghKGZsYWdzICYgU1VQUFJFU1MpKQorCQkJCQltYnAgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJCQkJYnplcm8oJm1icywgc2l6ZW9mKG1icykpOworCQkJCXdoaWxlICgod2kgPSBfX2ZnZXR3Y191bmxvY2soZnApKSAhPSBXRU9GICYmCisJCQkJICAgIHdpZHRoICE9IDAgJiYKKwkJCQkgICAgIWlzd3NwYWNlKHdpKSkgeworCQkJCQlpZiAod2lkdGggPj0gTUJfQ1VSX01BWCAmJgorCQkJCQkgICAgIShmbGFncyAmIFNVUFBSRVNTKSkgeworCQkJCQkJbmNvbnYgPSB3Y3J0b21iKG1icCwgd2ksICZtYnMpOworCQkJCQkJaWYgKG5jb252ID09IChzaXplX3QpLTEpCisJCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQl9IGVsc2UgeworCQkJCQkJbmNvbnYgPSB3Y3J0b21iKG1iYnVmLCB3aSwKKwkJCQkJCSAgICAmbWJzKTsKKwkJCQkJCWlmIChuY29udiA9PSAoc2l6ZV90KS0xKQorCQkJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCQkJCWlmIChuY29udiA+IHdpZHRoKQorCQkJCQkJCWJyZWFrOworCQkJCQkJaWYgKCEoZmxhZ3MgJiBTVVBQUkVTUykpCisJCQkJCQkJbWVtY3B5KG1icCwgbWJidWYsCisJCQkJCQkJICAgIG5jb252KTsKKwkJCQkJfQorCQkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkKKwkJCQkJCW1icCArPSBuY29udjsKKwkJCQkJd2lkdGggLT0gbmNvbnY7CisJCQkJCW5yZWFkKys7CisJCQkJfQorCQkJCWlmICh3aSAhPSBXRU9GKQorCQkJCQlfX3VuZ2V0d2Mod2ksIGZwKTsKKwkJCQlpZiAoIShmbGFncyAmIFNVUFBSRVNTKSkgeworCQkJCQkqbWJwID0gMDsKKyAJCQkJCW5hc3NpZ25lZCsrOworIAkJCQl9CisJCQl9CisJCQluY29udmVyc2lvbnMrKzsKKwkJCWNvbnRpbnVlOworCisJCWNhc2UgQ1RfSU5UOgorCQkJLyogc2NhbiBhbiBpbnRlZ2VyIGFzIGlmIGJ5IHN0cnRvaW1heC9zdHJ0b3VtYXggKi8KKwkJCWlmICh3aWR0aCA9PSAwIHx8IHdpZHRoID4gc2l6ZW9mKGJ1ZikgLworCQkJICAgIHNpemVvZigqYnVmKSAtIDEpCisJCQkJd2lkdGggPSBzaXplb2YoYnVmKSAvIHNpemVvZigqYnVmKSAtIDE7CisJCQlmbGFncyB8PSBTSUdOT0sgfCBORElHSVRTIHwgTlpESUdJVFM7CisJCQlmb3IgKHAgPSBidWY7IHdpZHRoOyB3aWR0aC0tKSB7CisJCQkJYyA9IF9fZmdldHdjX3VubG9jayhmcCk7CisJCQkJLyoKKwkJCQkgKiBTd2l0Y2ggb24gdGhlIGNoYXJhY3RlcjsgYGdvdG8gb2snCisJCQkJICogaWYgd2UgYWNjZXB0IGl0IGFzIGEgcGFydCBvZiBudW1iZXIuCisJCQkJICovCisJCQkJc3dpdGNoIChjKSB7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBkaWdpdCAwIGlzIGFsd2F5cyBsZWdhbCwgYnV0IGlzCisJCQkJICogc3BlY2lhbC4gIEZvciAlaSBjb252ZXJzaW9ucywgaWYgbm8KKwkJCQkgKiBkaWdpdHMgKHplcm8gb3Igbm9uemVybykgaGF2ZSBiZWVuCisJCQkJICogc2Nhbm5lZCAob25seSBzaWducyksIHdlIHdpbGwgaGF2ZQorCQkJCSAqIGJhc2U9PTAuICBJbiB0aGF0IGNhc2UsIHdlIHNob3VsZCBzZXQKKwkJCQkgKiBpdCB0byA4IGFuZCBlbmFibGUgMHggcHJlZml4aW5nLgorCQkJCSAqIEFsc28sIGlmIHdlIGhhdmUgbm90IHNjYW5uZWQgemVybyBkaWdpdHMKKwkJCQkgKiBiZWZvcmUgdGhpcywgZG8gbm90IHR1cm4gb2ZmIHByZWZpeGluZworCQkJCSAqIChzb21lb25lIGVsc2Ugd2lsbCB0dXJuIGl0IG9mZiBpZiB3ZQorCQkJCSAqIGhhdmUgc2Nhbm5lZCBhbnkgbm9uemVybyBkaWdpdHMpLgorCQkJCSAqLworCQkJCWNhc2UgJzAnOgorCQkJCQlpZiAoYmFzZSA9PSAwKSB7CisJCQkJCQliYXNlID0gODsKKwkJCQkJCWZsYWdzIHw9IFBGWE9LOworCQkJCQl9CisJCQkJCWlmIChmbGFncyAmIE5aRElHSVRTKQorCQkJCQkgICAgZmxhZ3MgJj0gfihTSUdOT0t8TlpESUdJVFN8TkRJR0lUUyk7CisJCQkJCWVsc2UKKwkJCQkJICAgIGZsYWdzICY9IH4oU0lHTk9LfFBGWE9LfE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogMSB0aHJvdWdoIDcgYWx3YXlzIGxlZ2FsICovCisJCQkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzoKKwkJCQljYXNlICc0JzogY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzoKKwkJCQkJYmFzZSA9IGJhc2VmaXhbYmFzZV07CisJCQkJCWZsYWdzICY9IH4oU0lHTk9LIHwgUEZYT0sgfCBORElHSVRTKTsKKwkJCQkJZ290byBvazsKKworCQkJCS8qIGRpZ2l0cyA4IGFuZCA5IG9rIGlmZiBkZWNpbWFsIG9yIGhleCAqLworCQkJCWNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCQkJYmFzZSA9IGJhc2VmaXhbYmFzZV07CisJCQkJCWlmIChiYXNlIDw9IDgpCisJCQkJCQlicmVhazsJLyogbm90IGxlZ2FsIGhlcmUgKi8KKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogbGV0dGVycyBvayBpZmYgaGV4ICovCisJCQkJY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzoKKwkJCQljYXNlICdEJzogY2FzZSAnRSc6IGNhc2UgJ0YnOgorCQkJCWNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6CisJCQkJY2FzZSAnZCc6IGNhc2UgJ2UnOiBjYXNlICdmJzoKKwkJCQkJLyogbm8gbmVlZCB0byBmaXggYmFzZSBoZXJlICovCisJCQkJCWlmIChiYXNlIDw9IDEwKQorCQkJCQkJYnJlYWs7CS8qIG5vdCBsZWdhbCBoZXJlICovCisJCQkJCWZsYWdzICY9IH4oU0lHTk9LIHwgUEZYT0sgfCBORElHSVRTKTsKKwkJCQkJZ290byBvazsKKworCQkJCS8qIHNpZ24gb2sgb25seSBhcyBmaXJzdCBjaGFyYWN0ZXIgKi8KKwkJCQljYXNlICcrJzogY2FzZSAnLSc6CisJCQkJCWlmIChmbGFncyAmIFNJR05PSykgeworCQkJCQkJZmxhZ3MgJj0gflNJR05PSzsKKwkJCQkJCWZsYWdzIHw9IEhBVkVTSUdOOworCQkJCQkJZ290byBvazsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCS8qCisJCQkJICogeCBvayBpZmYgZmxhZyBzdGlsbCBzZXQgYW5kIDJuZCBjaGFyIChvcgorCQkJCSAqIDNyZCBjaGFyIGlmIHdlIGhhdmUgYSBzaWduKS4KKwkJCQkgKi8KKwkJCQljYXNlICd4JzogY2FzZSAnWCc6CisJCQkJCWlmICgoZmxhZ3MgJiBQRlhPSykgJiYgcCA9PQorCQkJCQkgICAgYnVmICsgMSArICEhKGZsYWdzICYgSEFWRVNJR04pKSB7CisJCQkJCQliYXNlID0gMTY7CS8qIGlmICVpICovCisJCQkJCQlmbGFncyAmPSB+UEZYT0s7CisJCQkJCQlnb3RvIG9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qCisJCQkJICogSWYgd2UgZ290IGhlcmUsIGMgaXMgbm90IGEgbGVnYWwgY2hhcmFjdGVyCisJCQkJICogZm9yIGEgbnVtYmVyLiAgU3RvcCBhY2N1bXVsYXRpbmcgZGlnaXRzLgorCQkJCSAqLworCQkJCWlmIChjICE9IFdFT0YpCisJCQkJCV9fdW5nZXR3YyhjLCBmcCk7CisJCQkJYnJlYWs7CisJCW9rOgorCQkJCS8qCisJCQkJICogYyBpcyBsZWdhbDogc3RvcmUgaXQgYW5kIGxvb2sgYXQgdGhlIG5leHQuCisJCQkJICovCisJCQkJKnArKyA9ICh3Y2hhcl90KWM7CisJCQl9CisJCQkvKgorCQkJICogSWYgd2UgaGFkIG9ubHkgYSBzaWduLCBpdCBpcyBubyBnb29kOyBwdXNoCisJCQkgKiBiYWNrIHRoZSBzaWduLiAgSWYgdGhlIG51bWJlciBlbmRzIGluIGB4JywKKwkJCSAqIGl0IHdhcyBbc2lnbl0gJzAnICd4Jywgc28gcHVzaCBiYWNrIHRoZSB4CisJCQkgKiBhbmQgdHJlYXQgaXQgYXMgW3NpZ25dICcwJy4KKwkJCSAqLworCQkJaWYgKGZsYWdzICYgTkRJR0lUUykgeworCQkJCWlmIChwID4gYnVmKQorCQkJCQlfX3VuZ2V0d2MoKi0tcCwgZnApOworCQkJCWdvdG8gbWF0Y2hfZmFpbHVyZTsKKwkJCX0KKwkJCWMgPSBwWy0xXTsKKwkJCWlmIChjID09ICd4JyB8fCBjID09ICdYJykgeworCQkJCS0tcDsKKwkJCQlfX3VuZ2V0d2MoYywgZnApOworCQkJfQorCQkJaWYgKChmbGFncyAmIFNVUFBSRVNTKSA9PSAwKSB7CisJCQkJdWludG1heF90IHJlczsKKworCQkJCSpwID0gJ1wwJzsKKwkJCQlpZiAoZmxhZ3MgJiBVTlNJR05FRCkKKwkJCQkJcmVzID0gd2NzdG9pbWF4KGJ1ZiwgTlVMTCwgYmFzZSk7CisJCQkJZWxzZQorCQkJCQlyZXMgPSB3Y3N0b3VtYXgoYnVmLCBOVUxMLCBiYXNlKTsKKwkJCQlpZiAoZmxhZ3MgJiBQT0lOVEVSKQorCQkJCQkqdmFfYXJnKGFwLCB2b2lkICoqKSA9CisJCQkJCSAgICAodm9pZCAqKSh1aW50cHRyX3QpcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgTUFYSU5UKQorCQkJCQkqdmFfYXJnKGFwLCBpbnRtYXhfdCAqKSA9IHJlczsKKwkJCQllbHNlIGlmIChmbGFncyAmIExMT05HKQorCQkJCQkqdmFfYXJnKGFwLCBsb25nIGxvbmcgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSVpFSU5UKQorCQkJCQkqdmFfYXJnKGFwLCBzc2l6ZV90ICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgUFRSSU5UKQorCQkJCQkqdmFfYXJnKGFwLCBwdHJkaWZmX3QgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HKQorCQkJCQkqdmFfYXJnKGFwLCBsb25nICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlQpCisJCQkJCSp2YV9hcmcoYXAsIHNob3J0ICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlRTSE9SVCkKKwkJCQkJKnZhX2FyZyhhcCwgc2lnbmVkIGNoYXIgKikgPSByZXM7CisJCQkJZWxzZQorCQkJCQkqdmFfYXJnKGFwLCBpbnQgKikgPSByZXM7CisJCQkJbmFzc2lnbmVkKys7CisJCQl9CisJCQlucmVhZCArPSBwIC0gYnVmOworCQkJbmNvbnZlcnNpb25zKys7CisJCQlicmVhazsKKworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgQ1RfRkxPQVQ6CisJCQkvKiBzY2FuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGFzIGlmIGJ5IHN0cnRvZCAqLworCQkJaWYgKHdpZHRoID09IDAgfHwgd2lkdGggPiBzaXplb2YoYnVmKSAvCisJCQkgICAgc2l6ZW9mKCpidWYpIC0gMSkKKwkJCQl3aWR0aCA9IHNpemVvZihidWYpIC8gc2l6ZW9mKCpidWYpIC0gMTsKKwkJCWZsYWdzIHw9IFNJR05PSyB8IE5ESUdJVFMgfCBEUFRPSyB8IEVYUE9LOworCQkJZm9yIChwID0gYnVmOyB3aWR0aDsgd2lkdGgtLSkgeworCQkJCWMgPSBfX2ZnZXR3Y191bmxvY2soZnApOworCQkJCS8qCisJCQkJICogVGhpcyBjb2RlIG1pbWlja3MgdGhlIGludGVnZXIgY29udmVyc2lvbgorCQkJCSAqIGNvZGUsIGJ1dCBpcyBtdWNoIHNpbXBsZXIuCisJCQkJICovCisJCQkJc3dpdGNoIChjKSB7CisKKwkJCQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzoKKwkJCQljYXNlICc0JzogY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzoKKwkJCQljYXNlICc4JzogY2FzZSAnOSc6CisJCQkJCWZsYWdzICY9IH4oU0lHTk9LIHwgTkRJR0lUUyk7CisJCQkJCWdvdG8gZm9rOworCisJCQkJY2FzZSAnKyc6IGNhc2UgJy0nOgorCQkJCQlpZiAoZmxhZ3MgJiBTSUdOT0spIHsKKwkJCQkJCWZsYWdzICY9IH5TSUdOT0s7CisJCQkJCQlnb3RvIGZvazsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlICdlJzogY2FzZSAnRSc6CisJCQkJCS8qIG5vIGV4cG9uZW50IHdpdGhvdXQgc29tZSBkaWdpdHMgKi8KKwkJCQkJaWYgKChmbGFncyYoTkRJR0lUU3xFWFBPSykpID09IEVYUE9LKSB7CisJCQkJCQlmbGFncyA9CisJCQkJCQkgICAgKGZsYWdzICYgfihFWFBPS3xEUFRPSykpIHwKKwkJCQkJCSAgICBTSUdOT0sgfCBORElHSVRTOworCQkJCQkJZ290byBmb2s7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJaWYgKGRlY2ltYWxfcG9pbnQgPT0gMCkgeworCQkJCQkJYnplcm8oJm1icywgc2l6ZW9mKG1icykpOworCQkJCQkJbmNvbnYgPSBtYnJ0b3djKCZkZWNpbWFsX3BvaW50LAorCQkJCQkJICAgIGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludCwKKwkJCQkJICAgIAkgICAgTUJfQ1VSX01BWCwgJm1icyk7CisJCQkJCQlpZiAobmNvbnYgPT0gMCB8fAorCQkJCQkJICAgIG5jb252ID09IChzaXplX3QpLTEgfHwKKwkJCQkJCSAgICBuY29udiA9PSAoc2l6ZV90KS0yKQorCQkJCQkJCWRlY2ltYWxfcG9pbnQgPSAnLic7CisJCQkJCX0KKwkJCQkJaWYgKGMgPT0gZGVjaW1hbF9wb2ludCAmJgorCQkJCQkgICAgKGZsYWdzICYgRFBUT0spKSB7CisJCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IERQVE9LKTsKKwkJCQkJCWdvdG8gZm9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoYyAhPSBXRU9GKQorCQkJCQlfX3VuZ2V0d2MoYywgZnApOworCQkJCWJyZWFrOworCQlmb2s6CisJCQkJKnArKyA9IGM7CisJCQl9CisJCQkvKgorCQkJICogSWYgbm8gZGlnaXRzLCBtaWdodCBiZSBtaXNzaW5nIGV4cG9uZW50IGRpZ2l0cworCQkJICogKGp1c3QgZ2l2ZSBiYWNrIHRoZSBleHBvbmVudCkgb3IgbWlnaHQgYmUgbWlzc2luZworCQkJICogcmVndWxhciBkaWdpdHMsIGJ1dCBoYWQgc2lnbiBhbmQvb3IgZGVjaW1hbCBwb2ludC4KKwkJCSAqLworCQkJaWYgKGZsYWdzICYgTkRJR0lUUykgeworCQkJCWlmIChmbGFncyAmIEVYUE9LKSB7CisJCQkJCS8qIG5vIGRpZ2l0cyBhdCBhbGwgKi8KKwkJCQkJd2hpbGUgKHAgPiBidWYpCisJCQkJCQlfX3VuZ2V0d2MoKi0tcCwgZnApOworCQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQkJfQorCQkJCS8qIGp1c3QgYSBiYWQgZXhwb25lbnQgKGUgYW5kIG1heWJlIHNpZ24pICovCisJCQkJYyA9ICotLXA7CisJCQkJaWYgKGMgIT0gJ2UnICYmIGMgIT0gJ0UnKSB7CisJCQkJCV9fdW5nZXR3YyhjLCBmcCk7Lyogc2lnbiAqLworCQkJCQljID0gKi0tcDsKKwkJCQl9CisJCQkJX191bmdldHdjKGMsIGZwKTsKKwkJCX0KKwkJCWlmICgoZmxhZ3MgJiBTVVBQUkVTUykgPT0gMCkgeworCQkJCSpwID0gMDsKKwkJCQlpZiAoZmxhZ3MgJiBMT05HREJMKSB7CisJCQkJCWxvbmcgZG91YmxlIHJlcyA9IHdjc3RvbGQoYnVmLCBOVUxMKTsKKwkJCQkJKnZhX2FyZyhhcCwgbG9uZyBkb3VibGUgKikgPSByZXM7CisJCQkJfSBlbHNlIGlmIChmbGFncyAmIExPTkcpIHsKKwkJCQkJZG91YmxlIHJlcyA9IHdjc3RvZChidWYsIE5VTEwpOworCQkJCQkqdmFfYXJnKGFwLCBkb3VibGUgKikgPSByZXM7CisJCQkJfSBlbHNlIHsKKwkJCQkJZmxvYXQgcmVzID0gd2NzdG9mKGJ1ZiwgTlVMTCk7CisJCQkJCSp2YV9hcmcoYXAsIGZsb2F0ICopID0gcmVzOworCQkJCX0KKwkJCQluYXNzaWduZWQrKzsKKwkJCX0KKwkJCW5yZWFkICs9IHAgLSBidWY7CisJCQluY29udmVyc2lvbnMrKzsKKwkJCWJyZWFrOworI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCisJCX0KKwl9CitpbnB1dF9mYWlsdXJlOgorCXJldHVybiAobmNvbnZlcnNpb25zICE9IDAgPyBuYXNzaWduZWQgOiBFT0YpOworbWF0Y2hfZmFpbHVyZToKKwlyZXR1cm4gKG5hc3NpZ25lZCk7Cit9CisKK2ludAordmZ3c2NhbmYoRklMRSAqIF9fcmVzdHJpY3QgZnAsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IGZtdCwgX192YV9saXN0IGFwKQoreworCWludCByOworCisJRkxPQ0tGSUxFKGZwKTsKKwlyID0gX192ZndzY2FuZihmcCwgZm10LCBhcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3ZwcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92cHJpbnRmLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RkaW8vdnByaW50Zi5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnByaW50Zi5jCmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3ZzY2FuZi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZzY2FuZi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0ZGlvL3ZzY2FuZi5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnNjYW5mLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c25wcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c25wcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjFhMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3ZzbnByaW50Zi5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCSRPcGVuQlNEOiB2c25wcmludGYuYyx2IDEuMTUgMjAwOS8xMS8wOSAwMDoxODoyOCBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK2ludAordnNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKmZtdCwgX192YV9saXN0IGFwKQoreworCWludCByZXQ7CisJY2hhciBkdW1teTsKKwlGSUxFIGY7CisJc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKKworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisKKwkvKiBXaGlsZSBzbnByaW50ZigzKSBzcGVjaWZpZXMgc2l6ZV90IHN0ZGlvIHVzZXMgYW4gaW50IGludGVybmFsbHkgKi8KKwlpZiAobiA+IElOVF9NQVgpCisJCW4gPSBJTlRfTUFYOworCS8qIFN0ZGlvIGludGVybmFscyBkbyBub3QgZGVhbCBjb3JyZWN0bHkgd2l0aCB6ZXJvIGxlbmd0aCBidWZmZXIgKi8KKwlpZiAobiA9PSAwKSB7CisJCXN0ciA9ICZkdW1teTsKKwkJbiA9IDE7CisJfQorCWYuX2ZpbGUgPSAtMTsKKwlmLl9mbGFncyA9IF9fU1dSIHwgX19TU1RSOworCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopc3RyOworCWYuX2JmLl9zaXplID0gZi5fdyA9IG4gLSAxOworCXJldCA9IF9fdmZwcmludGYoJmYsIGZtdCwgYXApOworCSpmLl9wID0gJ1wwJzsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnNwcmludGYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOGZmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnNwcmludGYuYwpAQCAtMCwwICsxLDU5IEBACisvKgkkT3BlbkJTRDogdnNwcmludGYuYyx2IDEuMTYgMjAwOS8xMS8wOSAwMDoxODoyOCBrdXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKyNpZiBkZWZpbmVkKEFQSVdBUk4pCitfX3dhcm5fcmVmZXJlbmNlcyh2c3ByaW50ZiwKKyAgICAid2FybmluZzogdnNwcmludGYoKSBpcyBvZnRlbiBtaXN1c2VkLCBwbGVhc2UgdXNlIHZzbnByaW50ZigpIik7CisjZW5kaWYKKworaW50Cit2c3ByaW50ZihjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZtdCwgX192YV9saXN0IGFwKQoreworCWludCByZXQ7CisJRklMRSBmOworCXN0cnVjdCBfX3NmaWxlZXh0IGZleHQ7CisKKwlfRklMRUVYVF9TRVRVUCgmZiwgJmZleHQpOworCWYuX2ZpbGUgPSAtMTsKKwlmLl9mbGFncyA9IF9fU1dSIHwgX19TU1RSOworCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopc3RyOworCWYuX2JmLl9zaXplID0gZi5fdyA9IElOVF9NQVg7CisJcmV0ID0gX192ZnByaW50ZigmZiwgZm10LCBhcCk7CisJKmYuX3AgPSAnXDAnOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3NjYW5mLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnNzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZWI3NTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnNzY2FuZi5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCSRPcGVuQlNEOiB2c3NjYW5mLmMsdiAxLjEyIDIwMTEvMTEvMDggMTg6MzA6NDIgZ3VlbnRoZXIgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBEb25uIFNlZWxleSBhdCBVVU5FVCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyogQVJHU1VTRUQgKi8KK3N0YXRpYyBpbnQKK2VvZnJlYWQodm9pZCAqY29va2llLCBjaGFyICpidWYsIGludCBsZW4pCit7CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3Zzc2NhbmYoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmbXQsIF9fdmFfbGlzdCBhcCkKK3sKKwlGSUxFIGY7CisJc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKKworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisJZi5fZmxhZ3MgPSBfX1NSRDsKKwlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKXN0cjsKKwlmLl9iZi5fc2l6ZSA9IGYuX3IgPSBzdHJsZW4oc3RyKTsKKwlmLl9yZWFkID0gZW9mcmVhZDsKKwlmLl9sYi5fYmFzZSA9IE5VTEw7CisJcmV0dXJuIChfX3N2ZnNjYW5mKCZmLCBmbXQsIGFwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnN3cHJpbnRmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnN3cHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3YzRkZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3dwcmludGYuYwpAQCAtMCwwICsxLDk2IEBACisvKgkkT3BlbkJTRDogdnN3cHJpbnRmLmMsdiAxLjQgMjAxMi8xMi8wNSAyMzoyMDowMSBkZXJhYWR0IEV4cCAkCSovCisvKgkkTmV0QlNEOiB2c3dwcmludGYuYyx2IDEuMSAyMDA1LzA1LzE0IDIzOjUxOjAyIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CisgKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCisgKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworaW50Cit2c3dwcmludGYod2NoYXJfdCAqIF9fcmVzdHJpY3Qgcywgc2l6ZV90IG4sIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IGZtdCwKKyAgICBfX3ZhX2xpc3QgYXApCit7CisJbWJzdGF0ZV90IG1iczsKKwlGSUxFIGY7CisJY2hhciAqbWJwOworCWludCByZXQsIHN2ZXJybm87CisJc2l6ZV90IG53YzsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCisJaWYgKG4gPT0gMCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKwlmLl9maWxlID0gLTE7CisJZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUiB8IF9fU0FMQzsKKwlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYygxMjgpOworCWlmIChmLl9iZi5fYmFzZSA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0xKTsKKwl9CisJZi5fYmYuX3NpemUgPSBmLl93ID0gMTI3OwkJLyogTGVhdmUgcm9vbSBmb3IgdGhlIE5VTCAqLworCXJldCA9IF9fdmZ3cHJpbnRmKCZmLCBmbXQsIGFwKTsKKwlpZiAocmV0IDwgMCkgeworCQlzdmVycm5vID0gZXJybm87CisJCWZyZWUoZi5fYmYuX2Jhc2UpOworCQllcnJubyA9IHN2ZXJybm87CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAocmV0ID09IDApIHsKKwkJc1swXSA9IEwnXDAnOworCQlmcmVlKGYuX2JmLl9iYXNlKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJKmYuX3AgPSAnXDAnOworCW1icCA9IChjaGFyICopZi5fYmYuX2Jhc2U7CisJLyoKKwkgKiBYWFggVW5kbyB0aGUgY29udmVyc2lvbiBmcm9tIHdpZGUgY2hhcmFjdGVycyB0byBtdWx0aWJ5dGUgdGhhdAorCSAqIGZwdXR3YygpIGRpZCBpbiBfX3Zmd3ByaW50ZigpLgorCSAqLworCWJ6ZXJvKCZtYnMsIHNpemVvZihtYnMpKTsKKwlud2MgPSBtYnNydG93Y3MocywgKGNvbnN0IGNoYXIgKiopJm1icCwgbiwgJm1icyk7CisJZnJlZShmLl9iZi5fYmFzZSk7CisJaWYgKG53YyA9PSAoc2l6ZV90KS0xKSB7CisJCWVycm5vID0gRUlMU0VROworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKG53YyA9PSBuKSB7CisJCXNbbiAtIDFdID0gTCdcMCc7CisJCWVycm5vID0gRU9WRVJGTE9XOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnN3c2NhbmYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby92c3dzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWEyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdnN3c2NhbmYuYwpAQCAtMCwwICsxLDg4IEBACisvKiAkT3BlbkJTRDogdnN3c2NhbmYuYyx2IDEuMiAyMDEyLzEyLzA1IDIzOjIwOjAxIGRlcmFhZHQgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIERvbm4gU2VlbGV5IGF0IFVVTkVUIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK3N0YXRpYyBpbnQJZW9mcmVhZCh2b2lkICosIGNoYXIgKiwgaW50KTsKKworc3RhdGljIGludAorZW9mcmVhZCh2b2lkICpjb29raWUsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3Zzd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IHN0ciwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgZm10LAorICAgIF9fdmFfbGlzdCBhcCkKK3sKKwltYnN0YXRlX3QgbWJzOworCUZJTEUgZjsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCWNoYXIgKm1ic3RyOworCXNpemVfdCBsZW4sIG1sZW47CisJaW50IHI7CisJY29uc3Qgd2NoYXJfdCAqc3RycDsKKworCS8qCisJICogWFhYIENvbnZlcnQgdGhlIHdpZGUgY2hhcmFjdGVyIHN0cmluZyB0byBtdWx0aWJ5dGUsIHdoaWNoCisJICogX192ZndzY2FuZigpIHdpbGwgY29udmVydCBiYWNrIHRvIHdpZGUgY2hhcmFjdGVycy4KKwkgKi8KKwlsZW4gPSB3Y3NsZW4oc3RyKSAqIE1CX0NVUl9NQVg7CisJaWYgKChtYnN0ciA9IG1hbGxvYyhsZW4gKyAxKSkgPT0gTlVMTCkKKwkJcmV0dXJuIChFT0YpOworCWJ6ZXJvKCZtYnMsIHNpemVvZihtYnMpKTsKKwlzdHJwID0gc3RyOworCWlmICgobWxlbiA9IHdjc3J0b21icyhtYnN0ciwgJnN0cnAsIGxlbiwgJm1icykpID09IChzaXplX3QpLTEpIHsKKwkJZnJlZShtYnN0cik7CisJCXJldHVybiAoRU9GKTsKKwl9CisJaWYgKG1sZW4gPT0gbGVuKQorCQltYnN0cltsZW5dID0gJ1wwJzsKKwlfRklMRUVYVF9TRVRVUCgmZiwgJmZleHQpOworCWYuX2ZsYWdzID0gX19TUkQ7CisJZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKiltYnN0cjsKKwlmLl9iZi5fc2l6ZSA9IGYuX3IgPSBtbGVuOworCWYuX3JlYWQgPSBlb2ZyZWFkOworCWYuX2xiLl9iYXNlID0gTlVMTDsKKwlyID0gX192ZndzY2FuZigmZiwgZm10LCBhcCk7CisJZnJlZShtYnN0cik7CisKKwlyZXR1cm4gKHIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Z3cHJpbnRmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdndwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTU2OWMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Z3cHJpbnRmLmMKQEAgLTAsMCArMSw0MiBAQAorLyoJJE9wZW5CU0Q6IHZ3cHJpbnRmLmMsdiAxLjMgMjAxMS8wNC8yOCAxNzozODo0NiBzdHNwIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKK2ludAordndwcmludGYoY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgZm10LCBfX3ZhX2xpc3QgYXApCit7CisJcmV0dXJuICh2ZndwcmludGYoc3Rkb3V0LCBmbXQsIGFwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vdndzY2FuZi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Z3c2NhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDM5ZjAyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3Z3c2NhbmYuYwpAQCAtMCwwICsxLDM4IEBACisvKiAkT3BlbkJTRDogdndzY2FuZi5jLHYgMS4yIDIwMTIvMTIvMDUgMjM6MjA6MDEgZGVyYWFkdCBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMiBUaW0gSi4gUm9iYmlucworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCitpbnQKK3Z3c2NhbmYoY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgZm10LCBfX3ZhX2xpc3QgYXApCit7CisKKwlyZXR1cm4gKHZmd3NjYW5mKHN0ZGluLCBmbXQsIGFwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vd2J1Zi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3didWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWEwMGUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3didWYuYwpAQCAtMCwwICsxLDg0IEBACisvKgkkT3BlbkJTRDogd2J1Zi5jLHYgMS4xMiAyMDA5LzExLzA5IDAwOjE4OjI4IGt1cnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogV3JpdGUgdGhlIGdpdmVuIGNoYXJhY3RlciBpbnRvIHRoZSAocHJvYmFibHkgZnVsbCkgYnVmZmVyIGZvcgorICogdGhlIGdpdmVuIGZpbGUuICBGbHVzaCB0aGUgYnVmZmVyIG91dCBpZiBpdCBpcyBvciBiZWNvbWVzIGZ1bGwsCisgKiBvciBpZiBjPT0nXG4nIGFuZCB0aGUgZmlsZSBpcyBsaW5lIGJ1ZmZlcmVkLgorICovCitpbnQKK19fc3didWYoaW50IGMsIEZJTEUgKmZwKQoreworCWludCBuOworCisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCS8qCisJICogSW4gY2FzZSB3ZSBjYW5ub3Qgd3JpdGUsIG9yIGxvbmdqbXAgdGFrZXMgdXMgb3V0IGVhcmx5LAorCSAqIG1ha2Ugc3VyZSBfdyBpcyAwIChpZiBmdWxseS0gb3IgdW4tYnVmZmVyZWQpIG9yIC1fYmYuX3NpemUKKwkgKiAoaWYgbGluZSBidWZmZXJlZCkgc28gdGhhdCB3ZSB3aWxsIGdldCBjYWxsZWQgYWdhaW4uCisJICogSWYgd2UgZGlkIG5vdCBkbyB0aGlzLCBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIHB1dGMoKQorCSAqIGNhbGxzIG1pZ2h0IHdyYXAgX3cgZnJvbSBuZWdhdGl2ZSB0byBwb3NpdGl2ZS4KKwkgKi8KKwlmcC0+X3cgPSBmcC0+X2xiZnNpemU7CisJaWYgKGNhbnR3cml0ZShmcCkpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIChFT0YpOworCX0KKwljID0gKHVuc2lnbmVkIGNoYXIpYzsKKworCS8qCisJICogSWYgaXQgaXMgY29tcGxldGVseSBmdWxsLCBmbHVzaCBpdCBvdXQuICBUaGVuLCBpbiBhbnkgY2FzZSwKKwkgKiBzdHVmZiBjIGludG8gdGhlIGJ1ZmZlci4gIElmIHRoaXMgY2F1c2VzIHRoZSBidWZmZXIgdG8gZmlsbAorCSAqIGNvbXBsZXRlbHksIG9yIGlmIGMgaXMgJ1xuJyBhbmQgdGhlIGZpbGUgaXMgbGluZSBidWZmZXJlZCwKKwkgKiBmbHVzaCBpdCAocGVyaGFwcyBhIHNlY29uZCB0aW1lKS4gIFRoZSBzZWNvbmQgZmx1c2ggd2lsbCBhbHdheXMKKwkgKiBoYXBwZW4gb24gdW5idWZmZXJlZCBzdHJlYW1zLCB3aGVyZSBfYmYuX3NpemU9PTE7IF9fc2ZsdXNoKCkKKwkgKiBndWFyYW50ZWVzIHRoYXQgcHV0YygpIHdpbGwgYWx3YXlzIGNhbGwgd2J1ZigpIGJ5IHNldHRpbmcgX3cKKwkgKiB0byAwLCBzbyB3ZSBuZWVkIG5vdCBkbyBhbnl0aGluZyBlbHNlLgorCSAqLworCW4gPSBmcC0+X3AgLSBmcC0+X2JmLl9iYXNlOworCWlmIChuID49IGZwLT5fYmYuX3NpemUpIHsKKwkJaWYgKF9fc2ZsdXNoKGZwKSkKKwkJCXJldHVybiAoRU9GKTsKKwkJbiA9IDA7CisJfQorCWZwLT5fdy0tOworCSpmcC0+X3ArKyA9IGM7CisJaWYgKCsrbiA9PSBmcC0+X2JmLl9zaXplIHx8IChmcC0+X2ZsYWdzICYgX19TTEJGICYmIGMgPT0gJ1xuJykpCisJCWlmIChfX3NmbHVzaChmcCkpCisJCQlyZXR1cm4gKEVPRik7CisJcmV0dXJuIChjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93cHJpbnRmLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vd3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmN2FiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vd3ByaW50Zi5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCSRPcGVuQlNEOiB3cHJpbnRmLmMsdiAxLjMgMjAxMS8wNC8yOCAxNzozODo0NiBzdHNwIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKK2ludAord3ByaW50Zihjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZndwcmludGYoc3Rkb3V0LCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93c2NhbmYuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93c2NhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmMwODI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGlvL3dzY2FuZi5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qICRPcGVuQlNEOiB3c2NhbmYuYyx2IDEuMiAyMDEyLzEyLzA1IDIzOjIwOjAxIGRlcmFhZHQgRXhwICQgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgVGltIEouIFJvYmJpbnMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworaW50Cit3c2NhbmYoY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QgZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcjsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXIgPSB2ZndzY2FuZihzdGRpbiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vd3NldHVwLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkaW8vd3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgzNDIyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRpby93c2V0dXAuYwpAQCAtMCwwICsxLDg2IEBACisvKgkkT3BlbkJTRDogd3NldHVwLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogVmFyaW91cyBvdXRwdXQgcm91dGluZXMgY2FsbCB3c2V0dXAgdG8gYmUgc3VyZSBpdCBpcyBzYWZlIHRvIHdyaXRlLAorICogYmVjYXVzZSBlaXRoZXIgX2ZsYWdzIGRvZXMgbm90IGluY2x1ZGUgX19TV1IsIG9yIF9idWYgaXMgTlVMTC4KKyAqIF93c2V0dXAgcmV0dXJucyAwIGlmIE9LIHRvIHdyaXRlLCBub256ZXJvIG90aGVyd2lzZS4KKyAqLworaW50CitfX3N3c2V0dXAoRklMRSAqZnApCit7CisJLyogbWFrZSBzdXJlIHN0ZGlvIGlzIHNldCB1cCAqLworCWlmICghX19zZGlkaW5pdCkKKwkJX19zaW5pdCgpOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgbm90IHdyaXRpbmcsIHdlIGhhZCBiZXR0ZXIgYmUgcmVhZGluZyBhbmQgd3JpdGluZy4KKwkgKi8KKwlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NXUikgPT0gMCkgeworCQlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSVykgPT0gMCkKKwkJCXJldHVybiAoRU9GKTsKKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NSRCkgeworCQkJLyogY2xvYmJlciBhbnkgdW5nZXRjIGRhdGEgKi8KKwkJCWlmIChIQVNVQihmcCkpCisJCQkJRlJFRVVCKGZwKTsKKwkJCWZwLT5fZmxhZ3MgJj0gfihfX1NSRHxfX1NFT0YpOworCQkJZnAtPl9yID0gMDsKKwkJCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2U7CisJCX0KKwkJZnAtPl9mbGFncyB8PSBfX1NXUjsKKwl9CisKKwkvKgorCSAqIE1ha2UgYSBidWZmZXIgaWYgbmVjZXNzYXJ5LCB0aGVuIHNldCBfdy4KKwkgKi8KKwlpZiAoZnAtPl9iZi5fYmFzZSA9PSBOVUxMKSB7CisJCWlmICgoZnAtPl9mbGFncyAmIChfX1NTVFIgfCBfX1NBTEMpKSA9PSBfX1NTVFIpCisJCQlyZXR1cm4gKEVPRik7CisJCV9fc21ha2VidWYoZnApOworCX0KKwlpZiAoZnAtPl9mbGFncyAmIF9fU0xCRikgeworCQkvKgorCQkgKiBJdCBpcyBsaW5lIGJ1ZmZlcmVkLCBzbyBtYWtlIF9sYmZzaXplIGJlIC1fYnVmc2l6ZQorCQkgKiBmb3IgdGhlIHB1dGMoKSBtYWNyby4gIFdlIHdpbGwgY2hhbmdlIF9sYmZzaXplIGJhY2sKKwkJICogdG8gMCB3aGVuZXZlciB3ZSB0dXJuIG9mZiBfX1NXUi4KKwkJICovCisJCWZwLT5fdyA9IDA7CisJCWZwLT5fbGJmc2l6ZSA9IC1mcC0+X2JmLl9zaXplOworCX0gZWxzZQorCQlmcC0+X3cgPSBmcC0+X2ZsYWdzICYgX19TTkJGID8gMCA6IGZwLT5fYmYuX3NpemU7CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRleGl0LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0ZXhpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MzJiMzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0ZXhpdC5jCkBAIC0wLDAgKzEsMjAyIEBACisvKgkkT3BlbkJTRDogYXRleGl0LmMsdiAxLjIwIDIwMTQvMDcvMTEgMDk6NTE6Mzcga2V0dGVuaXMgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgRGFuaWVsIEhhcnRtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgImF0ZXhpdC5oIgorI2luY2x1ZGUgInRocmVhZF9wcml2YXRlLmgiCisKK3N0cnVjdCBhdGV4aXQgKl9fYXRleGl0Oworc3RhdGljIGludCByZXN0YXJ0bG9vcDsKKworLyoKKyAqIEZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBzdG9yZWQgaW4gYSBsaW5rZWQgbGlzdCBvZiBwYWdlcy4gVGhlIGxpc3QKKyAqIGlzIGluaXRpYWxseSBlbXB0eSwgYW5kIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gZGVtYW5kLiBUaGUgZmlyc3QKKyAqIGZ1bmN0aW9uIHBvaW50ZXIgaW4gdGhlIGZpcnN0IGFsbG9jYXRlZCBwYWdlICh0aGUgbGFzdCBvbmUgaW4KKyAqIHRoZSBsaW5rZWQgbGlzdCkgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBjbGVhbnVwIGZ1bmN0aW9uLgorICoKKyAqIE91dHNpZGUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMsIGFsbCBwYWdlcyBhcmUgbXByb3RlY3QoKSdlZAorICogdG8gcHJldmVudCB1bmludGVudGlvbmFsL21hbGljaW91cyBjb3JydXB0aW9uLgorICovCisKKy8qCisgKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIHBlcmZvcm1lZCBhdCBleGl0IG9yIHdoZW4gYSBzaGFyZWQgb2JqZWN0CisgKiB3aXRoIHRoZSBnaXZlbiBkc28gaGFuZGxlIGlzIHVubG9hZGVkIGR5bmFtaWNhbGx5LiAgQWxzbyB1c2VkIGFzCisgKiB0aGUgYmFja2VuZCBmb3IgYXRleGl0KCkuICBGb3IgbW9yZSBpbmZvIG9uIHRoaXMgQVBJLCBzZWU6CisgKgorICoJaHR0cDovL3d3dy5jb2Rlc291cmNlcnkuY29tL2N4eC1hYmkvYWJpLmh0bWwjZHNvLWR0b3IKKyAqLworaW50CitfX2N4YV9hdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZywgdm9pZCAqZHNvKQoreworCXN0cnVjdCBhdGV4aXQgKnAgPSBfX2F0ZXhpdDsKKwlzdHJ1Y3QgYXRleGl0X2ZuICpmbnA7CisJaW50IHBnc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisJaW50IHJldCA9IC0xOworCisJaWYgKHBnc2l6ZSA8IHNpemVvZigqcCkpCisJCXJldHVybiAoLTEpOworCV9BVEVYSVRfTE9DSygpOworCXAgPSBfX2F0ZXhpdDsKKwlpZiAocCAhPSBOVUxMKSB7CisJCWlmIChwLT5pbmQgKyAxID49IHAtPm1heCkKKwkJCXAgPSBOVUxMOworCQllbHNlIGlmIChtcHJvdGVjdChwLCBwZ3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKQorCQkJZ290byB1bmxvY2s7CisJfQorCWlmIChwID09IE5VTEwpIHsKKwkJcCA9IG1tYXAoTlVMTCwgcGdzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCQkgICAgTUFQX0FOT04gfCBNQVBfUFJJVkFURSwgLTEsIDApOworCQlpZiAocCA9PSBNQVBfRkFJTEVEKQorCQkJZ290byB1bmxvY2s7CisJCWlmIChfX2F0ZXhpdCA9PSBOVUxMKSB7CisJCQltZW1zZXQoJnAtPmZuc1swXSwgMCwgc2l6ZW9mKHAtPmZuc1swXSkpOworCQkJcC0+aW5kID0gMTsKKwkJfSBlbHNlCisJCQlwLT5pbmQgPSAwOworCQlwLT5tYXggPSAocGdzaXplIC0gKChjaGFyICopJnAtPmZuc1swXSAtIChjaGFyICopcCkpIC8KKwkJICAgIHNpemVvZihwLT5mbnNbMF0pOworCQlwLT5uZXh0ID0gX19hdGV4aXQ7CisJCV9fYXRleGl0ID0gcDsKKwl9CisJZm5wID0gJnAtPmZuc1twLT5pbmQrK107CisJZm5wLT5mbl9wdHIgPSBmdW5jOworCWZucC0+Zm5fYXJnID0gYXJnOworCWZucC0+Zm5fZHNvID0gZHNvOworCWlmIChtcHJvdGVjdChwLCBwZ3NpemUsIFBST1RfUkVBRCkpCisJCWdvdG8gdW5sb2NrOworCXJlc3RhcnRsb29wID0gMTsKKwlyZXQgPSAwOwordW5sb2NrOgorCV9BVEVYSVRfVU5MT0NLKCk7CisJcmV0dXJuIChyZXQpOworfQorCisvKgorICogQ2FsbCBhbGwgaGFuZGxlcnMgcmVnaXN0ZXJlZCB3aXRoIF9fY3hhX2F0ZXhpdCgpIGZvciB0aGUgc2hhcmVkCisgKiBvYmplY3Qgb3duaW5nICdkc28nLgorICogTm90ZTogaWYgJ2RzbycgaXMgTlVMTCwgdGhlbiBhbGwgcmVtYWluaW5nIGhhbmRsZXJzIGFyZSBjYWxsZWQuCisgKi8KK3ZvaWQKK19fY3hhX2ZpbmFsaXplKHZvaWQgKmRzbykKK3sKKwlzdHJ1Y3QgYXRleGl0ICpwLCAqcTsKKwlzdHJ1Y3QgYXRleGl0X2ZuIGZuOworCWludCBuLCBwZ3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCXN0YXRpYyBpbnQgY2FsbF9kZXB0aDsKKworCV9BVEVYSVRfTE9DSygpOworCWNhbGxfZGVwdGgrKzsKKworcmVzdGFydDoKKwlyZXN0YXJ0bG9vcCA9IDA7CisJZm9yIChwID0gX19hdGV4aXQ7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpIHsKKwkJZm9yIChuID0gcC0+aW5kOyAtLW4gPj0gMDspIHsKKwkJCWlmIChwLT5mbnNbbl0uZm5fcHRyID09IE5VTEwpCisJCQkJY29udGludWU7CS8qIGFscmVhZHkgY2FsbGVkICovCisJCQlpZiAoZHNvICE9IE5VTEwgJiYgZHNvICE9IHAtPmZuc1tuXS5mbl9kc28pCisJCQkJY29udGludWU7CS8qIHdyb25nIERTTyAqLworCisJCQkvKgorCQkJICogTWFyayBoYW5kbGVyIGFzIGhhdmluZyBiZWVuIGFscmVhZHkgY2FsbGVkIHRvIGF2b2lkCisJCQkgKiBkdXBlcyBhbmQgbG9vcHMsIHRoZW4gY2FsbCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24uCisJCQkgKi8KKwkJCWZuID0gcC0+Zm5zW25dOworCQkJaWYgKG1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkgPT0gMCkgeworCQkJCXAtPmZuc1tuXS5mbl9wdHIgPSBOVUxMOworCQkJCW1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEKTsKKwkJCX0KKwkJCV9BVEVYSVRfVU5MT0NLKCk7CisJCQkoKmZuLmZuX3B0cikoZm4uZm5fYXJnKTsKKwkJCV9BVEVYSVRfTE9DSygpOworCQkJaWYgKHJlc3RhcnRsb29wKQorCQkJCWdvdG8gcmVzdGFydDsKKwkJfQorCX0KKworCWNhbGxfZGVwdGgtLTsKKworCS8qCisJICogSWYgY2FsbGVkIHZpYSBleGl0KCksIHVubWFwIHRoZSBwYWdlcyBzaW5jZSB3ZSBoYXZlIG5vdyBydW4KKwkgKiBhbGwgdGhlIGhhbmRsZXJzLiAgV2UgZGVmZXIgdGhpcyB1bnRpbCBjYWxsZGVwdGggPT0gMCBzbyB0aGF0CisJICogd2UgZG9uJ3QgdW5tYXAgdGhpbmdzIHByZW1hdHVyZWx5IGlmIGNhbGxlZCByZWN1cnNpdmVseS4KKwkgKi8KKwlpZiAoZHNvID09IE5VTEwgJiYgY2FsbF9kZXB0aCA9PSAwKSB7CisJCWZvciAocCA9IF9fYXRleGl0OyBwICE9IE5VTEw7ICkgeworCQkJcSA9IHA7CisJCQlwID0gcC0+bmV4dDsKKwkJCW11bm1hcChxLCBwZ3NpemUpOworCQl9CisJCV9fYXRleGl0ID0gTlVMTDsKKwl9CisJX0FURVhJVF9VTkxPQ0soKTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIHRoZSBjbGVhbnVwIGZ1bmN0aW9uCisgKi8KK3ZvaWQKK19fYXRleGl0X3JlZ2lzdGVyX2NsZWFudXAodm9pZCAoKmZ1bmMpKHZvaWQpKQoreworCXN0cnVjdCBhdGV4aXQgKnA7CisJaW50IHBnc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisKKwlpZiAocGdzaXplIDwgc2l6ZW9mKCpwKSkKKwkJcmV0dXJuOworCV9BVEVYSVRfTE9DSygpOworCXAgPSBfX2F0ZXhpdDsKKwl3aGlsZSAocCAhPSBOVUxMICYmIHAtPm5leHQgIT0gTlVMTCkKKwkJcCA9IHAtPm5leHQ7CisJaWYgKHAgPT0gTlVMTCkgeworCQlwID0gbW1hcChOVUxMLCBwZ3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCSAgICBNQVBfQU5PTiB8IE1BUF9QUklWQVRFLCAtMSwgMCk7CisJCWlmIChwID09IE1BUF9GQUlMRUQpCisJCQlnb3RvIHVubG9jazsKKwkJcC0+aW5kID0gMTsKKwkJcC0+bWF4ID0gKHBnc2l6ZSAtICgoY2hhciAqKSZwLT5mbnNbMF0gLSAoY2hhciAqKXApKSAvCisJCSAgICBzaXplb2YocC0+Zm5zWzBdKTsKKwkJcC0+bmV4dCA9IE5VTEw7CisJCV9fYXRleGl0ID0gcDsKKwl9IGVsc2UgeworCQlpZiAobXByb3RlY3QocCwgcGdzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkKKwkJCWdvdG8gdW5sb2NrOworCX0KKwlwLT5mbnNbMF0uZm5fcHRyID0gKHZvaWQgKCopKHZvaWQgKikpZnVuYzsKKwlwLT5mbnNbMF0uZm5fYXJnID0gTlVMTDsKKwlwLT5mbnNbMF0uZm5fZHNvID0gTlVMTDsKKwltcHJvdGVjdChwLCBwZ3NpemUsIFBST1RfUkVBRCk7CisJcmVzdGFydGxvb3AgPSAxOwordW5sb2NrOgorCV9BVEVYSVRfVU5MT0NLKCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0ZXhpdC5oIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9hdGV4aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGUyYWEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9hdGV4aXQuaApAQCAtMCwwICsxLDQ3IEBACisvKgkkT3BlbkJTRDogYXRleGl0LmgsdiAxLjkgMjAxNC8wNi8xOCAxOTowMToxMCBrZXR0ZW5pcyBFeHAgJCAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyIERhbmllbCBIYXJ0bWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCitzdHJ1Y3QgYXRleGl0IHsKKwlzdHJ1Y3QgYXRleGl0ICpuZXh0OwkJLyogbmV4dCBpbiBsaXN0ICovCisJaW50IGluZDsJCQkvKiBuZXh0IGluZGV4IGluIHRoaXMgdGFibGUgKi8KKwlpbnQgbWF4OwkJCS8qIG1heCBlbnRyaWVzID49IEFURVhJVF9TSVpFICovCisJc3RydWN0IGF0ZXhpdF9mbiB7CisJCXZvaWQgKCpmbl9wdHIpKHZvaWQgKik7CisJCXZvaWQgKmZuX2FyZzsJCS8qIGFyZ3VtZW50IGZvciBDWEEgY2FsbGJhY2sgKi8KKwkJdm9pZCAqZm5fZHNvOwkJLyogc2hhcmVkIG1vZHVsZSBoYW5kbGUgKi8KKwl9IGZuc1sxXTsJCQkvKiB0aGUgdGFibGUgaXRzZWxmICovCit9OworCitleHRlcm4gc3RydWN0IGF0ZXhpdCAqX19hdGV4aXQ7CQkvKiBwb2ludHMgdG8gaGVhZCBvZiBMSUZPIHN0YWNrICovCisKK2ludAlfX2N4YV9hdGV4aXQodm9pZCAoKikodm9pZCAqKSwgdm9pZCAqLCB2b2lkICopOwordm9pZAlfX2N4YV9maW5hbGl6ZSh2b2lkICopOwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9hdG9pLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0b2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDg0MjY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9hdG9pLmMKQEAgLTAsMCArMSwzNyBAQAorLyoJJE9wZW5CU0Q6IGF0b2kuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50CithdG9pKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlyZXR1cm4oKGludClzdHJ0b2woc3RyLCAoY2hhciAqKilOVUxMLCAxMCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9hdG9sLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0b2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTcwODA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9hdG9sLmMKQEAgLTAsMCArMSwzNyBAQAorLyoJJE9wZW5CU0Q6IGF0b2wuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworbG9uZworYXRvbChjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuKHN0cnRvbChzdHIsIChjaGFyICoqKU5VTEwsIDEwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0b2xsLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2F0b2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY1ZTY4MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvYXRvbGwuYwpAQCAtMCwwICsxLDM4IEBACisvKgkkT3BlbkJTRDogYXRvbGwuYyx2IDEuMyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworbG9uZyBsb25nCithdG9sbChzdHIpCisJY29uc3QgY2hhciAqc3RyOworeworCXJldHVybihzdHJ0b2xsKHN0ciwgKGNoYXIgKiopTlVMTCwgMTApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvZXhpdC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9leGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmZTNkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvZXhpdC5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCSRPcGVuQlNEOiBleGl0LmMsdiAxLjEyIDIwMDcvMDkvMDMgMTQ6NDA6MTYgbWlsbGVydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgImF0ZXhpdC5oIgorI2luY2x1ZGUgInRocmVhZF9wcml2YXRlLmgiCisKKy8qCisgKiBUaGlzIHZhcmlhYmxlIGlzIHplcm8gdW50aWwgYSBwcm9jZXNzIGhhcyBjcmVhdGVkIGEgdGhyZWFkLgorICogSXQgaXMgdXNlZCB0byBhdm9pZCBjYWxsaW5nIGxvY2tpbmcgZnVuY3Rpb25zIGluIGxpYmMgd2hlbiB0aGV5CisgKiBhcmUgbm90IHJlcXVpcmVkLiBCeSBkZWZhdWx0LCBsaWJjIGlzIGludGVuZGVkIHRvIGJlKGNvbWUpCisgKiB0aHJlYWQtc2FmZSwgYnV0IHdpdGhvdXQgYSAoc2lnbmlmaWNhbnQpIHBlbmFsdHkgdG8gbm9uLXRocmVhZGVkCisgKiBwcm9jZXNzZXMuCisgKi8KK2ludCAgICAgX19pc3RocmVhZGVkICAgID0gMDsKKworLyoKKyAqIEV4aXQsIGZsdXNoaW5nIHN0ZGlvIGJ1ZmZlcnMgaWYgbmVjZXNzYXJ5LgorICovCit2b2lkCitleGl0KGludCBzdGF0dXMpCit7CisJLyoKKwkgKiBDYWxsIGZ1bmN0aW9ucyByZWdpc3RlcmVkIGJ5IGF0ZXhpdCgpIG9yIF9jeGFfYXRleGl0KCkKKwkgKiAoaW5jbHVkaW5nIHRoZSBzdGRpbyBjbGVhbnVwIHJvdXRpbmUpIGFuZCB0aGVuIF9leGl0KCkuCisJICovCisJX19jeGFfZmluYWxpemUoTlVMTCk7CisJX2V4aXQoc3RhdHVzKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvZ2V0ZW52LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2dldGVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkODQ4MmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2dldGVudi5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCSRPcGVuQlNEOiBnZXRlbnYuYyx2IDEuMTAgMjAxMC8wOC8yMyAyMjozMTo1MCBtaWxsZXJ0IEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyICpfX2ZpbmRlbnYoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgaW50ICpvZmZzZXQpOworCisvKgorICogX19maW5kZW52IC0tCisgKglSZXR1cm5zIHBvaW50ZXIgdG8gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIG5hbWUsIGlmIGFueSwgZWxzZSBOVUxMLgorICoJU3RhcnRzIHNlYXJjaGluZyB3aXRoaW4gdGhlIGVudmlyb25tZW50YWwgYXJyYXkgYXQgb2Zmc2V0LgorICoJU2V0cyBvZmZzZXQgdG8gYmUgdGhlIG9mZnNldCBvZiB0aGUgbmFtZS92YWx1ZSBjb21iaW5hdGlvbiBpbiB0aGUKKyAqCWVudmlyb25tZW50YWwgYXJyYXksIGZvciB1c2UgYnkgcHV0ZW52KDMpLCBzZXRlbnYoMykgYW5kIHVuc2V0ZW52KDMpLgorICoJRXhwbGljaXRseSByZW1vdmVzICc9JyBpbiBhcmd1bWVudCBuYW1lLgorICoKKyAqCVRoaXMgcm91dGluZSAqc2hvdWxkKiBiZSBhIHN0YXRpYzsgZG9uJ3QgdXNlIGl0LgorICovCitjaGFyICoKK19fZmluZGVudihjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgKm9mZnNldCkKK3sKKwlleHRlcm4gY2hhciAqKmVudmlyb247CisJaW50IGk7CisJY29uc3QgY2hhciAqbnA7CisJY2hhciAqKnAsICpjcDsKKworCWlmIChuYW1lID09IE5VTEwgfHwgZW52aXJvbiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWZvciAocCA9IGVudmlyb24gKyAqb2Zmc2V0OyAoY3AgPSAqcCkgIT0gTlVMTDsgKytwKSB7CisJCWZvciAobnAgPSBuYW1lLCBpID0gbGVuOyBpICYmICpjcDsgaS0tKQorCQkJaWYgKCpjcCsrICE9ICpucCsrKQorCQkJCWJyZWFrOworCQlpZiAoaSA9PSAwICYmICpjcCsrID09ICc9JykgeworCQkJKm9mZnNldCA9IHAgLSBlbnZpcm9uOworCQkJcmV0dXJuIChjcCk7CisJCX0KKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworLyoKKyAqIGdldGVudiAtLQorICoJUmV0dXJucyBwdHIgdG8gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIG5hbWUsIGlmIGFueSwgZWxzZSBOVUxMLgorICovCitjaGFyICoKK2dldGVudihjb25zdCBjaGFyICpuYW1lKQoreworCWludCBvZmZzZXQgPSAwOworCWNvbnN0IGNoYXIgKm5wOworCisJZm9yIChucCA9IG5hbWU7ICpucCAmJiAqbnAgIT0gJz0nOyArK25wKQorCQk7CisJcmV0dXJuIChfX2ZpbmRlbnYobmFtZSwgKGludCkobnAgLSBuYW1lKSwgJm9mZnNldCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9sc2VhcmNoLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL2xzZWFyY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2FkMDVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9sc2VhcmNoLmMKQEAgLTAsMCArMSw4NCBAQAorLyoJJE9wZW5CU0Q6IGxzZWFyY2guYyx2IDEuNSAyMDE0LzA3LzE4IDA0OjE2OjA5IG1hdHRoZXcgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogUm9nZXIgTC4gU255ZGVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2VhcmNoLmg+CisKK3R5cGVkZWYgaW50ICgqY21wX2ZuX3QpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKK3N0YXRpYyB2b2lkICpsaW5lYXJfYmFzZShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90ICosIHNpemVfdCwKKyAgICBjbXBfZm5fdCwgaW50KTsKKwordm9pZCAqCitsc2VhcmNoKGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqYmFzZSwgc2l6ZV90ICpuZWxwLCBzaXplX3Qgd2lkdGgsCisgICAgCWNtcF9mbl90IGNvbXBhcikKK3sKKworCXJldHVybihsaW5lYXJfYmFzZShrZXksIGJhc2UsIG5lbHAsIHdpZHRoLCBjb21wYXIsIDEpKTsKK30KKwordm9pZCAqCitsZmluZChjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmJhc2UsIHNpemVfdCAqbmVscCwgc2l6ZV90IHdpZHRoLAorCWNtcF9mbl90IGNvbXBhcikKK3sKKwlyZXR1cm4obGluZWFyX2Jhc2Uoa2V5LCBiYXNlLCBuZWxwLCB3aWR0aCwgY29tcGFyLCAwKSk7Cit9CisKK3N0YXRpYyB2b2lkICoKK2xpbmVhcl9iYXNlKGNvbnN0IHZvaWQgKmtleSwgY29uc3Qgdm9pZCAqYmFzZSwgc2l6ZV90ICpuZWxwLCBzaXplX3Qgd2lkdGgsCisJY21wX2ZuX3QgY29tcGFyLCBpbnQgYWRkX2ZsYWcpCit7CisJY29uc3QgY2hhciAqZWxlbWVudCwgKmVuZDsKKworCWVuZCA9IChjb25zdCBjaGFyICopYmFzZSArICpuZWxwICogd2lkdGg7CisJZm9yIChlbGVtZW50ID0gYmFzZTsgZWxlbWVudCA8IGVuZDsgZWxlbWVudCArPSB3aWR0aCkKKwkJaWYgKCFjb21wYXIoa2V5LCBlbGVtZW50KSkJCS8qIGtleSBmb3VuZCAqLworCQkJcmV0dXJuKCh2b2lkICopZWxlbWVudCk7CisKKwlpZiAoIWFkZF9mbGFnKQkJCQkJLyoga2V5IG5vdCBmb3VuZCAqLworCQlyZXR1cm4oTlVMTCk7CisKKwkvKgorCSAqIFRoZSBVTklYIFN5c3RlbSBVc2VyJ3MgTWFudWFsLCAxOTg2IGVkaXRpb24gY2xhaW1zIHRoYXQKKwkgKiBhIE5VTEwgcG9pbnRlciBpcyByZXR1cm5lZCBieSBsc2VhcmNoIHdpdGggZXJybm8gc2V0CisJICogYXBwcm9wcmlhdGVseSwgaWYgdGhlcmUgaXMgbm90IGVub3VnaCByb29tIGluIHRoZSB0YWJsZQorCSAqIHRvIGFkZCBhIG5ldyBpdGVtLiAgVGhpcyBjYW4ndCBiZSBkb25lIGFzIG5vbmUgb2YgdGhlc2UKKwkgKiByb3V0aW5lcyBoYXZlIGFueSBtZXRob2Qgb2YgZGV0ZXJtaW5pbmcgdGhlIHNpemUgb2YgdGhlCisJICogdGFibGUuICBUaGlzIGNvbW1lbnQgaXNuJ3QgaW4gdGhlIDE5ODYtODcgU3lzdGVtIFYKKwkgKiBtYW51YWwuCisJICovCisJKysqbmVscDsKKwltZW1jcHkoKHZvaWQgKillbmQsIGtleSwgd2lkdGgpOworCXJldHVybigodm9pZCAqKWVuZCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3NldGVudi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zZXRlbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDYwZmRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zZXRlbnYuYwpAQCAtMCwwICsxLDE4MCBAQAorLyoJJE9wZW5CU0Q6IHNldGVudi5jLHYgMS4xNCAyMDEyLzA5LzIzIDE2OjA4OjA0IGplcmVteSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NyBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworY2hhciAqX19maW5kZW52KGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIGludCAqb2Zmc2V0KTsKKworZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworc3RhdGljIGNoYXIgKipsYXN0ZW52OwkJCQkvKiBsYXN0IHZhbHVlIG9mIGVudmlyb24gKi8KKworLyoKKyAqIHB1dGVudiAtLQorICoJQWRkIGEgbmFtZT12YWx1ZSBzdHJpbmcgZGlyZWN0bHkgdG8gdGhlIGVudmlyb25tZW50YWwsIHJlcGxhY2luZworICoJYW55IGN1cnJlbnQgdmFsdWUuCisgKi8KK2ludAorcHV0ZW52KGNoYXIgKnN0cikKK3sKKwljaGFyICoqUCwgKmNwOworCXNpemVfdCBjbnQ7CisJaW50IG9mZnNldCA9IDA7CisKKwlmb3IgKGNwID0gc3RyOyAqY3AgJiYgKmNwICE9ICc9JzsgKytjcCkKKwkJOworCWlmICgqY3AgIT0gJz0nKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsJCQkvKiBtaXNzaW5nIGA9JyBpbiBzdHJpbmcgKi8KKwl9CisKKwlpZiAoX19maW5kZW52KHN0ciwgKGludCkoY3AgLSBzdHIpLCAmb2Zmc2V0KSAhPSBOVUxMKSB7CisJCWVudmlyb25bb2Zmc2V0KytdID0gc3RyOworCQkvKiBjb3VsZCBiZSBzZXQgbXVsdGlwbGUgdGltZXMgKi8KKwkJd2hpbGUgKF9fZmluZGVudihzdHIsIChpbnQpKGNwIC0gc3RyKSwgJm9mZnNldCkpIHsKKwkJCWZvciAoUCA9ICZlbnZpcm9uW29mZnNldF07OyArK1ApCisJCQkJaWYgKCEoKlAgPSAqKFAgKyAxKSkpCisJCQkJCWJyZWFrOworCQl9CisJCXJldHVybiAoMCk7CisJfQorCisJLyogY3JlYXRlIG5ldyBzbG90IGZvciBzdHJpbmcgKi8KKwlmb3IgKFAgPSBlbnZpcm9uOyAqUCAhPSBOVUxMOyBQKyspCisJCTsKKwljbnQgPSBQIC0gZW52aXJvbjsKKwlQID0gKGNoYXIgKiopcmVhbGxvYyhsYXN0ZW52LCBzaXplb2YoY2hhciAqKSAqIChjbnQgKyAyKSk7CisJaWYgKCFQKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAobGFzdGVudiAhPSBlbnZpcm9uKQorCQltZW1jcHkoUCwgZW52aXJvbiwgY250ICogc2l6ZW9mKGNoYXIgKikpOworCWxhc3RlbnYgPSBlbnZpcm9uID0gUDsKKwllbnZpcm9uW2NudF0gPSBzdHI7CisJZW52aXJvbltjbnQgKyAxXSA9IE5VTEw7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIHNldGVudiAtLQorICoJU2V0IHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSAibmFtZSIgdG8gYmUKKyAqCSJ2YWx1ZSIuICBJZiByZXdyaXRlIGlzIHNldCwgcmVwbGFjZSBhbnkgY3VycmVudCB2YWx1ZS4KKyAqLworaW50CitzZXRlbnYoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIGludCByZXdyaXRlKQoreworCWNoYXIgKkMsICoqUDsKKwljb25zdCBjaGFyICpucDsKKwlpbnQgbF92YWx1ZSwgb2Zmc2V0ID0gMDsKKworCWlmICghbmFtZSB8fCAhKm5hbWUpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKwlmb3IgKG5wID0gbmFtZTsgKm5wICYmICpucCAhPSAnPSc7ICsrbnApCisJCTsKKwlpZiAoKm5wKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsJCQkvKiBoYXMgYD0nIGluIG5hbWUgKi8KKwl9CisKKwlsX3ZhbHVlID0gc3RybGVuKHZhbHVlKTsKKwlpZiAoKEMgPSBfX2ZpbmRlbnYobmFtZSwgKGludCkobnAgLSBuYW1lKSwgJm9mZnNldCkpICE9IE5VTEwpIHsKKwkJaW50IHRtcG9mZiA9IG9mZnNldCArIDE7CisJCWlmICghcmV3cml0ZSkKKwkJCXJldHVybiAoMCk7CisjaWYgMCAvKiBYWFggLSBleGlzdGluZyBlbnRyeSBtYXkgbm90IGJlIHdyaXRhYmxlICovCisJCWlmIChzdHJsZW4oQykgPj0gbF92YWx1ZSkgewkvKiBvbGQgbGFyZ2VyOyBjb3B5IG92ZXIgKi8KKwkJCXdoaWxlICgoKkMrKyA9ICp2YWx1ZSsrKSkKKwkJCQk7CisJCQlyZXR1cm4gKDApOworCQl9CisjZW5kaWYKKwkJLyogY291bGQgYmUgc2V0IG11bHRpcGxlIHRpbWVzICovCisJCXdoaWxlIChfX2ZpbmRlbnYobmFtZSwgKGludCkobnAgLSBuYW1lKSwgJnRtcG9mZikpIHsKKwkJCWZvciAoUCA9ICZlbnZpcm9uW3RtcG9mZl07OyArK1ApCisJCQkJaWYgKCEoKlAgPSAqKFAgKyAxKSkpCisJCQkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsJCQkJCS8qIGNyZWF0ZSBuZXcgc2xvdCAqLworCQlzaXplX3QgY250OworCisJCWZvciAoUCA9IGVudmlyb247ICpQICE9IE5VTEw7IFArKykKKwkJCTsKKwkJY250ID0gUCAtIGVudmlyb247CisJCVAgPSAoY2hhciAqKilyZWFsbG9jKGxhc3RlbnYsIHNpemVvZihjaGFyICopICogKGNudCArIDIpKTsKKwkJaWYgKCFQKQorCQkJcmV0dXJuICgtMSk7CisJCWlmIChsYXN0ZW52ICE9IGVudmlyb24pCisJCQltZW1jcHkoUCwgZW52aXJvbiwgY250ICogc2l6ZW9mKGNoYXIgKikpOworCQlsYXN0ZW52ID0gZW52aXJvbiA9IFA7CisJCW9mZnNldCA9IGNudDsKKwkJZW52aXJvbltjbnQgKyAxXSA9IE5VTEw7CisJfQorCWlmICghKGVudmlyb25bb2Zmc2V0XSA9CQkJLyogbmFtZSArIGA9JyArIHZhbHVlICovCisJICAgIG1hbGxvYygoc2l6ZV90KSgoaW50KShucCAtIG5hbWUpICsgbF92YWx1ZSArIDIpKSkpCisJCXJldHVybiAoLTEpOworCWZvciAoQyA9IGVudmlyb25bb2Zmc2V0XTsgKCpDID0gKm5hbWUrKykgJiYgKkMgIT0gJz0nOyArK0MpCisJCTsKKwlmb3IgKCpDKysgPSAnPSc7ICgqQysrID0gKnZhbHVlKyspOyApCisJCTsKKwlyZXR1cm4gKDApOworfQorCisvKgorICogdW5zZXRlbnYobmFtZSkgLS0KKyAqCURlbGV0ZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlICJuYW1lIi4KKyAqLworaW50Cit1bnNldGVudihjb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgKipQOworCWNvbnN0IGNoYXIgKm5wOworCWludCBvZmZzZXQgPSAwOworCisJaWYgKCFuYW1lIHx8ICEqbmFtZSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCWZvciAobnAgPSBuYW1lOyAqbnAgJiYgKm5wICE9ICc9JzsgKytucCkKKwkJOworCWlmICgqbnApIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOwkJCS8qIGhhcyBgPScgaW4gbmFtZSAqLworCX0KKworCS8qIGNvdWxkIGJlIHNldCBtdWx0aXBsZSB0aW1lcyAqLworCXdoaWxlIChfX2ZpbmRlbnYobmFtZSwgKGludCkobnAgLSBuYW1lKSwgJm9mZnNldCkpIHsKKwkJZm9yIChQID0gJmVudmlyb25bb2Zmc2V0XTs7ICsrUCkKKwkJCWlmICghKCpQID0gKihQICsgMSkpKQorCQkJCWJyZWFrOworCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2ltYXguYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG9pbWF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3N2Y0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG9pbWF4LmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qCSRPcGVuQlNEOiBzdHJ0b2ltYXguYyx2IDEuMSAyMDA2LzAxLzEzIDE3OjU4OjA5IG1pbGxlcnQgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworLyoKKyAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYW4gaW50bWF4X3QKKyAqCisgKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQorICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KKyAqLworaW50bWF4X3QKK3N0cnRvaW1heChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwljb25zdCBjaGFyICpzOworCWludG1heF90IGFjYywgY3V0b2ZmOworCWludCBjOworCWludCBuZWcsIGFueSwgY3V0bGltOworCisJLyoKKwkgKiBTa2lwIHdoaXRlIHNwYWNlIGFuZCBwaWNrIHVwIGxlYWRpbmcgKy8tIHNpZ24gaWYgYW55LgorCSAqIElmIGJhc2UgaXMgMCwgYWxsb3cgMHggZm9yIGhleCBhbmQgMCBmb3Igb2N0YWwsIGVsc2UKKwkgKiBhc3N1bWUgZGVjaW1hbDsgaWYgYmFzZSBpcyBhbHJlYWR5IDE2LCBhbGxvdyAweC4KKwkgKi8KKwlzID0gbnB0cjsKKwlkbyB7CisJCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKKwl9IHdoaWxlIChpc3NwYWNlKGMpKTsKKwlpZiAoYyA9PSAnLScpIHsKKwkJbmVnID0gMTsKKwkJYyA9ICpzKys7CisJfSBlbHNlIHsKKwkJbmVnID0gMDsKKwkJaWYgKGMgPT0gJysnKQorCQkJYyA9ICpzKys7CisJfQorCWlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmCisJICAgIGMgPT0gJzAnICYmICgqcyA9PSAneCcgfHwgKnMgPT0gJ1gnKSkgeworCQljID0gc1sxXTsKKwkJcyArPSAyOworCQliYXNlID0gMTY7CisJfQorCWlmIChiYXNlID09IDApCisJCWJhc2UgPSBjID09ICcwJyA/IDggOiAxMDsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgY3V0b2ZmIHZhbHVlIGJldHdlZW4gbGVnYWwgbnVtYmVycyBhbmQgaWxsZWdhbAorCSAqIG51bWJlcnMuICBUaGF0IGlzIHRoZSBsYXJnZXN0IGxlZ2FsIHZhbHVlLCBkaXZpZGVkIGJ5IHRoZQorCSAqIGJhc2UuICBBbiBpbnB1dCBudW1iZXIgdGhhdCBpcyBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZSwgaWYKKwkgKiBmb2xsb3dlZCBieSBhIGxlZ2FsIGlucHV0IGNoYXJhY3RlciwgaXMgdG9vIGJpZy4gIE9uZSB0aGF0CisJICogaXMgZXF1YWwgdG8gdGhpcyB2YWx1ZSBtYXkgYmUgdmFsaWQgb3Igbm90OyB0aGUgbGltaXQKKwkgKiBiZXR3ZWVuIHZhbGlkIGFuZCBpbnZhbGlkIG51bWJlcnMgaXMgdGhlbiBiYXNlZCBvbiB0aGUgbGFzdAorCSAqIGRpZ2l0LiAgRm9yIGluc3RhbmNlLCBpZiB0aGUgcmFuZ2UgZm9yIGludG1heF90IGlzCisJICogWy05MjIzMzcyMDM2ODU0Nzc1ODA4Li45MjIzMzcyMDM2ODU0Nzc1ODA3XSBhbmQgdGhlIGlucHV0IGJhc2UKKwkgKiBpcyAxMCwgY3V0b2ZmIHdpbGwgYmUgc2V0IHRvIDkyMjMzNzIwMzY4NTQ3NzU4MCBhbmQgY3V0bGltIHRvCisJICogZWl0aGVyIDcgKG5lZz09MCkgb3IgOCAobmVnPT0xKSwgbWVhbmluZyB0aGF0IGlmIHdlIGhhdmUKKwkgKiBhY2N1bXVsYXRlZCBhIHZhbHVlID4gOTIyMzM3MjAzNjg1NDc3NTgwLCBvciBlcXVhbCBidXQgdGhlCisJICogbmV4dCBkaWdpdCBpcyA+IDcgKG9yIDgpLCB0aGUgbnVtYmVyIGlzIHRvbyBiaWcsIGFuZCB3ZSB3aWxsCisJICogcmV0dXJuIGEgcmFuZ2UgZXJyb3IuCisJICoKKwkgKiBTZXQgYW55IGlmIGFueSBgZGlnaXRzJyBjb25zdW1lZDsgbWFrZSBpdCBuZWdhdGl2ZSB0byBpbmRpY2F0ZQorCSAqIG92ZXJmbG93LgorCSAqLworCWN1dG9mZiA9IG5lZyA/IElOVE1BWF9NSU4gOiBJTlRNQVhfTUFYOworCWN1dGxpbSA9IGN1dG9mZiAlIGJhc2U7CisJY3V0b2ZmIC89IGJhc2U7CisJaWYgKG5lZykgeworCQlpZiAoY3V0bGltID4gMCkgeworCQkJY3V0bGltIC09IGJhc2U7CisJCQljdXRvZmYgKz0gMTsKKwkJfQorCQljdXRsaW0gPSAtY3V0bGltOworCX0KKwlmb3IgKGFjYyA9IDAsIGFueSA9IDA7OyBjID0gKHVuc2lnbmVkIGNoYXIpICpzKyspIHsKKwkJaWYgKGlzZGlnaXQoYykpCisJCQljIC09ICcwJzsKKwkJZWxzZSBpZiAoaXNhbHBoYShjKSkKKwkJCWMgLT0gaXN1cHBlcihjKSA/ICdBJyAtIDEwIDogJ2EnIC0gMTA7CisJCWVsc2UKKwkJCWJyZWFrOworCQlpZiAoYyA+PSBiYXNlKQorCQkJYnJlYWs7CisJCWlmIChhbnkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChuZWcpIHsKKwkJCWlmIChhY2MgPCBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKKwkJCQlhbnkgPSAtMTsKKwkJCQlhY2MgPSBJTlRNQVhfTUlOOworCQkJCWVycm5vID0gRVJBTkdFOworCQkJfSBlbHNlIHsKKwkJCQlhbnkgPSAxOworCQkJCWFjYyAqPSBiYXNlOworCQkJCWFjYyAtPSBjOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgeworCQkJCWFueSA9IC0xOworCQkJCWFjYyA9IElOVE1BWF9NQVg7CisJCQkJZXJybm8gPSBFUkFOR0U7CisJCQl9IGVsc2UgeworCQkJCWFueSA9IDE7CisJCQkJYWNjICo9IGJhc2U7CisJCQkJYWNjICs9IGM7CisJCQl9CisJCX0KKwl9CisJaWYgKGVuZHB0ciAhPSAwKQorCQkqZW5kcHRyID0gKGNoYXIgKikgKGFueSA/IHMgLSAxIDogbnB0cik7CisJcmV0dXJuIChhY2MpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b2wuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG9sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyY2Y4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG9sLmMKQEAgLTAsMCArMSwxNTEgQEAKKy8qCSRPcGVuQlNEOiBzdHJ0b2wuYyx2IDEuOSAyMDEzLzA0LzE3IDE3OjQwOjM1IHRlZHUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisKKy8qCisgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgbG9uZyBpbnRlZ2VyLgorICoKKyAqIElnbm9yZXMgYGxvY2FsZScgc3R1ZmYuICBBc3N1bWVzIHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjYXNlCisgKiBhbHBoYWJldHMgYW5kIGRpZ2l0cyBhcmUgZWFjaCBjb250aWd1b3VzLgorICovCitsb25nCitzdHJ0b2woY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisJY29uc3QgY2hhciAqczsKKwlsb25nIGFjYywgY3V0b2ZmOworCWludCBjOworCWludCBuZWcsIGFueSwgY3V0bGltOworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCBiYXNlIGlzIGJldHdlZW4gMiBhbmQgMzYgaW5jbHVzaXZlLCBvciB0aGUgc3BlY2lhbAorCSAqIHZhbHVlIG9mIDAuCisJICovCisJaWYgKGJhc2UgIT0gMCAmJiAoYmFzZSA8IDIgfHwgYmFzZSA+IDM2KSkgeworCQlpZiAoZW5kcHRyICE9IDApCisJCQkqZW5kcHRyID0gKGNoYXIgKilucHRyOworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBTa2lwIHdoaXRlIHNwYWNlIGFuZCBwaWNrIHVwIGxlYWRpbmcgKy8tIHNpZ24gaWYgYW55LgorCSAqIElmIGJhc2UgaXMgMCwgYWxsb3cgMHggZm9yIGhleCBhbmQgMCBmb3Igb2N0YWwsIGVsc2UKKwkgKiBhc3N1bWUgZGVjaW1hbDsgaWYgYmFzZSBpcyBhbHJlYWR5IDE2LCBhbGxvdyAweC4KKwkgKi8KKwlzID0gbnB0cjsKKwlkbyB7CisJCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKKwl9IHdoaWxlIChpc3NwYWNlKGMpKTsKKwlpZiAoYyA9PSAnLScpIHsKKwkJbmVnID0gMTsKKwkJYyA9ICpzKys7CisJfSBlbHNlIHsKKwkJbmVnID0gMDsKKwkJaWYgKGMgPT0gJysnKQorCQkJYyA9ICpzKys7CisJfQorCWlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmCisJICAgIGMgPT0gJzAnICYmICgqcyA9PSAneCcgfHwgKnMgPT0gJ1gnKSkgeworCQljID0gc1sxXTsKKwkJcyArPSAyOworCQliYXNlID0gMTY7CisJfQorCWlmIChiYXNlID09IDApCisJCWJhc2UgPSBjID09ICcwJyA/IDggOiAxMDsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgY3V0b2ZmIHZhbHVlIGJldHdlZW4gbGVnYWwgbnVtYmVycyBhbmQgaWxsZWdhbAorCSAqIG51bWJlcnMuICBUaGF0IGlzIHRoZSBsYXJnZXN0IGxlZ2FsIHZhbHVlLCBkaXZpZGVkIGJ5IHRoZQorCSAqIGJhc2UuICBBbiBpbnB1dCBudW1iZXIgdGhhdCBpcyBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZSwgaWYKKwkgKiBmb2xsb3dlZCBieSBhIGxlZ2FsIGlucHV0IGNoYXJhY3RlciwgaXMgdG9vIGJpZy4gIE9uZSB0aGF0CisJICogaXMgZXF1YWwgdG8gdGhpcyB2YWx1ZSBtYXkgYmUgdmFsaWQgb3Igbm90OyB0aGUgbGltaXQKKwkgKiBiZXR3ZWVuIHZhbGlkIGFuZCBpbnZhbGlkIG51bWJlcnMgaXMgdGhlbiBiYXNlZCBvbiB0aGUgbGFzdAorCSAqIGRpZ2l0LiAgRm9yIGluc3RhbmNlLCBpZiB0aGUgcmFuZ2UgZm9yIGxvbmdzIGlzCisJICogWy0yMTQ3NDgzNjQ4Li4yMTQ3NDgzNjQ3XSBhbmQgdGhlIGlucHV0IGJhc2UgaXMgMTAsCisJICogY3V0b2ZmIHdpbGwgYmUgc2V0IHRvIDIxNDc0ODM2NCBhbmQgY3V0bGltIHRvIGVpdGhlcgorCSAqIDcgKG5lZz09MCkgb3IgOCAobmVnPT0xKSwgbWVhbmluZyB0aGF0IGlmIHdlIGhhdmUgYWNjdW11bGF0ZWQKKwkgKiBhIHZhbHVlID4gMjE0NzQ4MzY0LCBvciBlcXVhbCBidXQgdGhlIG5leHQgZGlnaXQgaXMgPiA3IChvciA4KSwKKwkgKiB0aGUgbnVtYmVyIGlzIHRvbyBiaWcsIGFuZCB3ZSB3aWxsIHJldHVybiBhIHJhbmdlIGVycm9yLgorCSAqCisJICogU2V0IGFueSBpZiBhbnkgYGRpZ2l0cycgY29uc3VtZWQ7IG1ha2UgaXQgbmVnYXRpdmUgdG8gaW5kaWNhdGUKKwkgKiBvdmVyZmxvdy4KKwkgKi8KKwljdXRvZmYgPSBuZWcgPyBMT05HX01JTiA6IExPTkdfTUFYOworCWN1dGxpbSA9IGN1dG9mZiAlIGJhc2U7CisJY3V0b2ZmIC89IGJhc2U7CisJaWYgKG5lZykgeworCQlpZiAoY3V0bGltID4gMCkgeworCQkJY3V0bGltIC09IGJhc2U7CisJCQljdXRvZmYgKz0gMTsKKwkJfQorCQljdXRsaW0gPSAtY3V0bGltOworCX0KKwlmb3IgKGFjYyA9IDAsIGFueSA9IDA7OyBjID0gKHVuc2lnbmVkIGNoYXIpICpzKyspIHsKKwkJaWYgKGlzZGlnaXQoYykpCisJCQljIC09ICcwJzsKKwkJZWxzZSBpZiAoaXNhbHBoYShjKSkKKwkJCWMgLT0gaXN1cHBlcihjKSA/ICdBJyAtIDEwIDogJ2EnIC0gMTA7CisJCWVsc2UKKwkJCWJyZWFrOworCQlpZiAoYyA+PSBiYXNlKQorCQkJYnJlYWs7CisJCWlmIChhbnkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChuZWcpIHsKKwkJCWlmIChhY2MgPCBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKKwkJCQlhbnkgPSAtMTsKKwkJCQlhY2MgPSBMT05HX01JTjsKKwkJCQllcnJubyA9IEVSQU5HRTsKKwkJCX0gZWxzZSB7CisJCQkJYW55ID0gMTsKKwkJCQlhY2MgKj0gYmFzZTsKKwkJCQlhY2MgLT0gYzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChhY2MgPiBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKKwkJCQlhbnkgPSAtMTsKKwkJCQlhY2MgPSBMT05HX01BWDsKKwkJCQllcnJubyA9IEVSQU5HRTsKKwkJCX0gZWxzZSB7CisJCQkJYW55ID0gMTsKKwkJCQlhY2MgKj0gYmFzZTsKKwkJCQlhY2MgKz0gYzsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZW5kcHRyICE9IDApCisJCSplbmRwdHIgPSAoY2hhciAqKSAoYW55ID8gcyAtIDEgOiBucHRyKTsKKwlyZXR1cm4gKGFjYyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvbGwuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiY2M1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvbGwuYwpAQCAtMCwwICsxLDE0NCBAQAorLyogJE9wZW5CU0Q6IHN0cnRvbGwuYyx2IDEuNyAyMDEzLzAzLzI4IDE4OjA5OjM4IG1hcnR5bmFzIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKgorICogQ29udmVydCBhIHN0cmluZyB0byBhIGxvbmcgbG9uZy4KKyAqCisgKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQorICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KKyAqLworbG9uZyBsb25nCitzdHJ0b2xsKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQoreworCWNvbnN0IGNoYXIgKnM7CisJbG9uZyBsb25nIGFjYywgY3V0b2ZmOworCWludCBjOworCWludCBuZWcsIGFueSwgY3V0bGltOworCisJLyoKKwkgKiBTa2lwIHdoaXRlIHNwYWNlIGFuZCBwaWNrIHVwIGxlYWRpbmcgKy8tIHNpZ24gaWYgYW55LgorCSAqIElmIGJhc2UgaXMgMCwgYWxsb3cgMHggZm9yIGhleCBhbmQgMCBmb3Igb2N0YWwsIGVsc2UKKwkgKiBhc3N1bWUgZGVjaW1hbDsgaWYgYmFzZSBpcyBhbHJlYWR5IDE2LCBhbGxvdyAweC4KKwkgKi8KKwlzID0gbnB0cjsKKwlkbyB7CisJCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKKwl9IHdoaWxlIChpc3NwYWNlKGMpKTsKKwlpZiAoYyA9PSAnLScpIHsKKwkJbmVnID0gMTsKKwkJYyA9ICpzKys7CisJfSBlbHNlIHsKKwkJbmVnID0gMDsKKwkJaWYgKGMgPT0gJysnKQorCQkJYyA9ICpzKys7CisJfQorCWlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmCisJICAgIGMgPT0gJzAnICYmICgqcyA9PSAneCcgfHwgKnMgPT0gJ1gnKSkgeworCQljID0gc1sxXTsKKwkJcyArPSAyOworCQliYXNlID0gMTY7CisJfQorCWlmIChiYXNlID09IDApCisJCWJhc2UgPSBjID09ICcwJyA/IDggOiAxMDsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgY3V0b2ZmIHZhbHVlIGJldHdlZW4gbGVnYWwgbnVtYmVycyBhbmQgaWxsZWdhbAorCSAqIG51bWJlcnMuICBUaGF0IGlzIHRoZSBsYXJnZXN0IGxlZ2FsIHZhbHVlLCBkaXZpZGVkIGJ5IHRoZQorCSAqIGJhc2UuICBBbiBpbnB1dCBudW1iZXIgdGhhdCBpcyBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZSwgaWYKKwkgKiBmb2xsb3dlZCBieSBhIGxlZ2FsIGlucHV0IGNoYXJhY3RlciwgaXMgdG9vIGJpZy4gIE9uZSB0aGF0CisJICogaXMgZXF1YWwgdG8gdGhpcyB2YWx1ZSBtYXkgYmUgdmFsaWQgb3Igbm90OyB0aGUgbGltaXQKKwkgKiBiZXR3ZWVuIHZhbGlkIGFuZCBpbnZhbGlkIG51bWJlcnMgaXMgdGhlbiBiYXNlZCBvbiB0aGUgbGFzdAorCSAqIGRpZ2l0LiAgRm9yIGluc3RhbmNlLCBpZiB0aGUgcmFuZ2UgZm9yIGxvbmcgbG9uZ3MgaXMKKwkgKiBbLTkyMjMzNzIwMzY4NTQ3NzU4MDguLjkyMjMzNzIwMzY4NTQ3NzU4MDddIGFuZCB0aGUgaW5wdXQgYmFzZQorCSAqIGlzIDEwLCBjdXRvZmYgd2lsbCBiZSBzZXQgdG8gOTIyMzM3MjAzNjg1NDc3NTgwIGFuZCBjdXRsaW0gdG8KKwkgKiBlaXRoZXIgNyAobmVnPT0wKSBvciA4IChuZWc9PTEpLCBtZWFuaW5nIHRoYXQgaWYgd2UgaGF2ZQorCSAqIGFjY3VtdWxhdGVkIGEgdmFsdWUgPiA5MjIzMzcyMDM2ODU0Nzc1ODAsIG9yIGVxdWFsIGJ1dCB0aGUKKwkgKiBuZXh0IGRpZ2l0IGlzID4gNyAob3IgOCksIHRoZSBudW1iZXIgaXMgdG9vIGJpZywgYW5kIHdlIHdpbGwKKwkgKiByZXR1cm4gYSByYW5nZSBlcnJvci4KKwkgKgorCSAqIFNldCBhbnkgaWYgYW55IGBkaWdpdHMnIGNvbnN1bWVkOyBtYWtlIGl0IG5lZ2F0aXZlIHRvIGluZGljYXRlCisJICogb3ZlcmZsb3cuCisJICovCisJY3V0b2ZmID0gbmVnID8gTExPTkdfTUlOIDogTExPTkdfTUFYOworCWN1dGxpbSA9IGN1dG9mZiAlIGJhc2U7CisJY3V0b2ZmIC89IGJhc2U7CisJaWYgKG5lZykgeworCQlpZiAoY3V0bGltID4gMCkgeworCQkJY3V0bGltIC09IGJhc2U7CisJCQljdXRvZmYgKz0gMTsKKwkJfQorCQljdXRsaW0gPSAtY3V0bGltOworCX0KKwlmb3IgKGFjYyA9IDAsIGFueSA9IDA7OyBjID0gKHVuc2lnbmVkIGNoYXIpICpzKyspIHsKKwkJaWYgKGlzZGlnaXQoYykpCisJCQljIC09ICcwJzsKKwkJZWxzZSBpZiAoaXNhbHBoYShjKSkKKwkJCWMgLT0gaXN1cHBlcihjKSA/ICdBJyAtIDEwIDogJ2EnIC0gMTA7CisJCWVsc2UKKwkJCWJyZWFrOworCQlpZiAoYyA+PSBiYXNlKQorCQkJYnJlYWs7CisJCWlmIChhbnkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChuZWcpIHsKKwkJCWlmIChhY2MgPCBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKKwkJCQlhbnkgPSAtMTsKKwkJCQlhY2MgPSBMTE9OR19NSU47CisJCQkJZXJybm8gPSBFUkFOR0U7CisJCQl9IGVsc2UgeworCQkJCWFueSA9IDE7CisJCQkJYWNjICo9IGJhc2U7CisJCQkJYWNjIC09IGM7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYWNjID4gY3V0b2ZmIHx8IChhY2MgPT0gY3V0b2ZmICYmIGMgPiBjdXRsaW0pKSB7CisJCQkJYW55ID0gLTE7CisJCQkJYWNjID0gTExPTkdfTUFYOworCQkJCWVycm5vID0gRVJBTkdFOworCQkJfSBlbHNlIHsKKwkJCQlhbnkgPSAxOworCQkJCWFjYyAqPSBiYXNlOworCQkJCWFjYyArPSBjOworCQkJfQorCQl9CisJfQorCWlmIChlbmRwdHIgIT0gMCkKKwkJKmVuZHB0ciA9IChjaGFyICopIChhbnkgPyBzIC0gMSA6IG5wdHIpOworCXJldHVybiAoYWNjKTsKK30KKworX19zdHJvbmdfYWxpYXMoc3RydG9xLCBzdHJ0b2xsKTsKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG91bC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzNjM2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG91bC5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgkkT3BlbkJTRDogc3RydG91bC5jLHYgMS44IDIwMTMvMDQvMTcgMTc6NDA6MzUgdGVkdSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKgorICogQ29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nIGludGVnZXIuCisgKgorICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKKyAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCisgKi8KK3Vuc2lnbmVkIGxvbmcKK3N0cnRvdWwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisJY29uc3QgY2hhciAqczsKKwl1bnNpZ25lZCBsb25nIGFjYywgY3V0b2ZmOworCWludCBjOworCWludCBuZWcsIGFueSwgY3V0bGltOworCisJLyoKKwkgKiBTZWUgc3RydG9sIGZvciBjb21tZW50cyBhcyB0byB0aGUgbG9naWMgdXNlZC4KKwkgKi8KKwlzID0gbnB0cjsKKwlkbyB7CisJCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKKwl9IHdoaWxlIChpc3NwYWNlKGMpKTsKKwlpZiAoYyA9PSAnLScpIHsKKwkJbmVnID0gMTsKKwkJYyA9ICpzKys7CisJfSBlbHNlIHsKKwkJbmVnID0gMDsKKwkJaWYgKGMgPT0gJysnKQorCQkJYyA9ICpzKys7CisJfQorCWlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmCisJICAgIGMgPT0gJzAnICYmICgqcyA9PSAneCcgfHwgKnMgPT0gJ1gnKSkgeworCQljID0gc1sxXTsKKwkJcyArPSAyOworCQliYXNlID0gMTY7CisJfQorCWlmIChiYXNlID09IDApCisJCWJhc2UgPSBjID09ICcwJyA/IDggOiAxMDsKKworCWN1dG9mZiA9IFVMT05HX01BWCAvICh1bnNpZ25lZCBsb25nKWJhc2U7CisJY3V0bGltID0gVUxPTkdfTUFYICUgKHVuc2lnbmVkIGxvbmcpYmFzZTsKKwlmb3IgKGFjYyA9IDAsIGFueSA9IDA7OyBjID0gKHVuc2lnbmVkIGNoYXIpICpzKyspIHsKKwkJaWYgKGlzZGlnaXQoYykpCisJCQljIC09ICcwJzsKKwkJZWxzZSBpZiAoaXNhbHBoYShjKSkKKwkJCWMgLT0gaXN1cHBlcihjKSA/ICdBJyAtIDEwIDogJ2EnIC0gMTA7CisJCWVsc2UKKwkJCWJyZWFrOworCQlpZiAoYyA+PSBiYXNlKQorCQkJYnJlYWs7CisJCWlmIChhbnkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChhY2MgPiBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKKwkJCWFueSA9IC0xOworCQkJYWNjID0gVUxPTkdfTUFYOworCQkJZXJybm8gPSBFUkFOR0U7CisJCX0gZWxzZSB7CisJCQlhbnkgPSAxOworCQkJYWNjICo9ICh1bnNpZ25lZCBsb25nKWJhc2U7CisJCQlhY2MgKz0gYzsKKwkJfQorCX0KKwlpZiAobmVnICYmIGFueSA+IDApCisJCWFjYyA9IC1hY2M7CisJaWYgKGVuZHB0ciAhPSAwKQorCQkqZW5kcHRyID0gKGNoYXIgKikgKGFueSA/IHMgLSAxIDogbnB0cik7CisJcmV0dXJuIChhY2MpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VsbC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zdHJ0b3VsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZjYxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdWxsLmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qCSRPcGVuQlNEOiBzdHJ0b3VsbC5jLHYgMS42IDIwMTMvMDMvMjggMTg6MDk6MzggbWFydHluYXMgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qCisgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgbG9uZy4KKyAqCisgKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQorICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nCitzdHJ0b3VsbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwljb25zdCBjaGFyICpzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBhY2MsIGN1dG9mZjsKKwlpbnQgYzsKKwlpbnQgbmVnLCBhbnksIGN1dGxpbTsKKworCS8qCisJICogU2VlIHN0cnRvcSBmb3IgY29tbWVudHMgYXMgdG8gdGhlIGxvZ2ljIHVzZWQuCisJICovCisJcyA9IG5wdHI7CisJZG8geworCQljID0gKHVuc2lnbmVkIGNoYXIpICpzKys7CisJfSB3aGlsZSAoaXNzcGFjZShjKSk7CisJaWYgKGMgPT0gJy0nKSB7CisJCW5lZyA9IDE7CisJCWMgPSAqcysrOworCX0gZWxzZSB7IAorCQluZWcgPSAwOworCQlpZiAoYyA9PSAnKycpCisJCQljID0gKnMrKzsKKwl9CisJaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKKwkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7CisJCWMgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOworCisJY3V0b2ZmID0gVUxMT05HX01BWCAvICh1bnNpZ25lZCBsb25nIGxvbmcpYmFzZTsKKwljdXRsaW0gPSBVTExPTkdfTUFYICUgKHVuc2lnbmVkIGxvbmcgbG9uZyliYXNlOworCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgeworCQlpZiAoaXNkaWdpdChjKSkKKwkJCWMgLT0gJzAnOworCQllbHNlIGlmIChpc2FscGhhKGMpKQorCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKKwkJZWxzZQorCQkJYnJlYWs7CisJCWlmIChjID49IGJhc2UpCisJCQlicmVhazsKKwkJaWYgKGFueSA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgeworCQkJYW55ID0gLTE7CisJCQlhY2MgPSBVTExPTkdfTUFYOworCQkJZXJybm8gPSBFUkFOR0U7CisJCX0gZWxzZSB7CisJCQlhbnkgPSAxOworCQkJYWNjICo9ICh1bnNpZ25lZCBsb25nIGxvbmcpYmFzZTsKKwkJCWFjYyArPSBjOworCQl9CisJfQorCWlmIChuZWcgJiYgYW55ID4gMCkKKwkJYWNjID0gLWFjYzsKKwlpZiAoZW5kcHRyICE9IDApCisJCSplbmRwdHIgPSAoY2hhciAqKSAoYW55ID8gcyAtIDEgOiBucHRyKTsKKwlyZXR1cm4gKGFjYyk7Cit9CisKK19fc3Ryb25nX2FsaWFzKHN0cnRvdXEsIHN0cnRvdWxsKTsKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvc3RydG91bWF4LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdW1heC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNmUyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N0cnRvdW1heC5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgkkT3BlbkJTRDogc3RydG91bWF4LmMsdiAxLjEgMjAwNi8wMS8xMyAxNzo1ODowOSBtaWxsZXJ0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisKKy8qCisgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgdWludG1heF90LgorICoKKyAqIElnbm9yZXMgYGxvY2FsZScgc3R1ZmYuICBBc3N1bWVzIHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjYXNlCisgKiBhbHBoYWJldHMgYW5kIGRpZ2l0cyBhcmUgZWFjaCBjb250aWd1b3VzLgorICovCit1aW50bWF4X3QKK3N0cnRvdW1heChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwljb25zdCBjaGFyICpzOworCXVpbnRtYXhfdCBhY2MsIGN1dG9mZjsKKwlpbnQgYzsKKwlpbnQgbmVnLCBhbnksIGN1dGxpbTsKKworCS8qCisJICogU2VlIHN0cnRvcSBmb3IgY29tbWVudHMgYXMgdG8gdGhlIGxvZ2ljIHVzZWQuCisJICovCisJcyA9IG5wdHI7CisJZG8geworCQljID0gKHVuc2lnbmVkIGNoYXIpICpzKys7CisJfSB3aGlsZSAoaXNzcGFjZShjKSk7CisJaWYgKGMgPT0gJy0nKSB7CisJCW5lZyA9IDE7CisJCWMgPSAqcysrOworCX0gZWxzZSB7IAorCQluZWcgPSAwOworCQlpZiAoYyA9PSAnKycpCisJCQljID0gKnMrKzsKKwl9CisJaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKKwkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7CisJCWMgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOworCisJY3V0b2ZmID0gVUlOVE1BWF9NQVggLyAodWludG1heF90KWJhc2U7CisJY3V0bGltID0gVUlOVE1BWF9NQVggJSAodWludG1heF90KWJhc2U7CisJZm9yIChhY2MgPSAwLCBhbnkgPSAwOzsgYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrKSB7CisJCWlmIChpc2RpZ2l0KGMpKQorCQkJYyAtPSAnMCc7CisJCWVsc2UgaWYgKGlzYWxwaGEoYykpCisJCQljIC09IGlzdXBwZXIoYykgPyAnQScgLSAxMCA6ICdhJyAtIDEwOworCQllbHNlCisJCQlicmVhazsKKwkJaWYgKGMgPj0gYmFzZSkKKwkJCWJyZWFrOworCQlpZiAoYW55IDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoYWNjID4gY3V0b2ZmIHx8IChhY2MgPT0gY3V0b2ZmICYmIGMgPiBjdXRsaW0pKSB7CisJCQlhbnkgPSAtMTsKKwkJCWFjYyA9IFVJTlRNQVhfTUFYOworCQkJZXJybm8gPSBFUkFOR0U7CisJCX0gZWxzZSB7CisJCQlhbnkgPSAxOworCQkJYWNjICo9ICh1aW50bWF4X3QpYmFzZTsKKwkJCWFjYyArPSBjOworCQl9CisJfQorCWlmIChuZWcgJiYgYW55ID4gMCkKKwkJYWNjID0gLWFjYzsKKwlpZiAoZW5kcHRyICE9IDApCisJCSplbmRwdHIgPSAoY2hhciAqKSAoYW55ID8gcyAtIDEgOiBucHRyKTsKKwlyZXR1cm4gKGFjYyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3N5c3RlbS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zeXN0ZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGRkY2FlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi9zeXN0ZW0uYwpAQCAtMCwwICsxLDc0IEBACisvKgkkT3BlbkJTRDogc3lzdGVtLmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8cGF0aHMuaD4KKworZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworCitpbnQKK3N5c3RlbShjb25zdCBjaGFyICpjb21tYW5kKQoreworCXBpZF90IHBpZDsKKwlzaWdfdCBpbnRzYXZlLCBxdWl0c2F2ZTsKKwlzaWdzZXRfdCBtYXNrLCBvbWFzazsKKwlpbnQgcHN0YXQ7CisJY2hhciAqYXJncFtdID0geyJzaCIsICItYyIsIE5VTEwsIE5VTEx9OworCisJaWYgKCFjb21tYW5kKQkJLyoganVzdCBjaGVja2luZy4uLiAqLworCQlyZXR1cm4oMSk7CisKKwlhcmdwWzJdID0gKGNoYXIgKiljb21tYW5kOworCisJc2lnZW1wdHlzZXQoJm1hc2spOworCXNpZ2FkZHNldCgmbWFzaywgU0lHQ0hMRCk7CisJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbWFzaywgJm9tYXNrKTsKKwlzd2l0Y2ggKHBpZCA9IHZmb3JrKCkpIHsKKwljYXNlIC0xOgkJCS8qIGVycm9yICovCisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb21hc2ssIE5VTEwpOworCQlyZXR1cm4oLTEpOworCWNhc2UgMDoJCQkJLyogY2hpbGQgKi8KKwkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbWFzaywgTlVMTCk7CisJCWV4ZWN2ZShfUEFUSF9CU0hFTEwsIGFyZ3AsIGVudmlyb24pOworCQlfZXhpdCgxMjcpOworCX0KKworCWludHNhdmUgPSBzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKwlxdWl0c2F2ZSA9IHNpZ25hbChTSUdRVUlULCBTSUdfSUdOKTsKKwlwaWQgPSB3YWl0cGlkKHBpZCwgKGludCAqKSZwc3RhdCwgMCk7CisJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbWFzaywgTlVMTCk7CisJKHZvaWQpc2lnbmFsKFNJR0lOVCwgaW50c2F2ZSk7CisJKHZvaWQpc2lnbmFsKFNJR1FVSVQsIHF1aXRzYXZlKTsKKwlyZXR1cm4gKHBpZCA9PSAtMSA/IC0xIDogcHN0YXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi90ZmluZC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0ZGxpYi90ZmluZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMWQ1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3RmaW5kLmMKQEAgLTAsMCArMSw0MSBAQAorLyoJJE9wZW5CU0Q6IHRmaW5kLmMsdiAxLjYgMjAxNC8wMy8xNiAxODozODozMCBndWVudGhlciBFeHAgJAkqLworCisvKgorICogVHJlZSBzZWFyY2ggZ2VuZXJhbGl6ZWQgZnJvbSBLbnV0aCAoNi4yLjIpIEFsZ29yaXRobSBUIGp1c3QgbGlrZQorICogdGhlIEFUJlQgbWFuIHBhZ2Ugc2F5cy4KKyAqCisgKiBUaGUgbm9kZV90IHN0cnVjdHVyZSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKKyAqCisgKiBXcml0dGVuIGJ5IHJlYWRpbmcgdGhlIFN5c3RlbSBWIEludGVyZmFjZSBEZWZpbml0aW9uLCBub3QgdGhlIGNvZGUuCisgKgorICogVG90YWxseSBwdWJsaWMgZG9tYWluLgorICovCisvKkxJTlRMSUJSQVJZKi8KKyNpbmNsdWRlIDxzZWFyY2guaD4KKwordHlwZWRlZiBzdHJ1Y3Qgbm9kZV90Cit7CisgICAgY2hhcgkgICprZXk7CisgICAgc3RydWN0IG5vZGVfdCAqbGxpbmssICpybGluazsKK30gbm9kZTsKKworLyogZmluZCBhIG5vZGUsIG9yIHJldHVybiAwICovCit2b2lkICoKK3RmaW5kKGNvbnN0IHZvaWQgKnZrZXksIHZvaWQgKiBjb25zdCAqdnJvb3RwLAorICAgIGludCAoKmNvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworICAgIGNoYXIgKmtleSA9IChjaGFyICopdmtleTsKKyAgICBub2RlICoqcm9vdHAgPSAobm9kZSAqKil2cm9vdHA7CisKKyAgICBpZiAocm9vdHAgPT0gKHN0cnVjdCBub2RlX3QgKiopMCkKKwlyZXR1cm4gKChzdHJ1Y3Qgbm9kZV90ICopMCk7CisgICAgd2hpbGUgKCpyb290cCAhPSAoc3RydWN0IG5vZGVfdCAqKTApIHsJLyogVDE6ICovCisJaW50IHI7CisJaWYgKChyID0gKCpjb21wYXIpKGtleSwgKCpyb290cCktPmtleSkpID09IDApCS8qIFQyOiAqLworCSAgICByZXR1cm4gKCpyb290cCk7CQkvKiBrZXkgZm91bmQgKi8KKwlyb290cCA9IChyIDwgMCkgPworCSAgICAmKCpyb290cCktPmxsaW5rIDoJCS8qIFQzOiBmb2xsb3cgbGVmdCBicmFuY2ggKi8KKwkgICAgJigqcm9vdHApLT5ybGluazsJCS8qIFQ0OiBmb2xsb3cgcmlnaHQgYnJhbmNoICovCisgICAgfQorICAgIHJldHVybiAobm9kZSAqKTA7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3RzZWFyY2guYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdGRsaWIvdHNlYXJjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNDEwODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RkbGliL3RzZWFyY2guYwpAQCAtMCwwICsxLDExOSBAQAorLyoJJE9wZW5CU0Q6IHRzZWFyY2guYyx2IDEuOCAyMDE0LzAzLzE2IDE4OjM4OjMwIGd1ZW50aGVyIEV4cCAkCSovCisKKy8qCisgKiBUcmVlIHNlYXJjaCBnZW5lcmFsaXplZCBmcm9tIEtudXRoICg2LjIuMikgQWxnb3JpdGhtIFQganVzdCBsaWtlCisgKiB0aGUgQVQmVCBtYW4gcGFnZSBzYXlzLgorICoKKyAqIFRoZSBub2RlX3Qgc3RydWN0dXJlIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seQorICoKKyAqIFdyaXR0ZW4gYnkgcmVhZGluZyB0aGUgU3lzdGVtIFYgSW50ZXJmYWNlIERlZmluaXRpb24sIG5vdCB0aGUgY29kZS4KKyAqCisgKiBUb3RhbGx5IHB1YmxpYyBkb21haW4uCisgKi8KKy8qTElOVExJQlJBUlkqLworCisjaW5jbHVkZSA8c2VhcmNoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3R5cGVkZWYgc3RydWN0IG5vZGVfdCB7CisgICAgY2hhcgkgICprZXk7CisgICAgc3RydWN0IG5vZGVfdCAqbGVmdCwgKnJpZ2h0OworfSBub2RlOworCisvKiBmaW5kIG9yIGluc2VydCBkYXR1bSBpbnRvIHNlYXJjaCB0cmVlICovCit2b2lkICoKK3RzZWFyY2goY29uc3Qgdm9pZCAqdmtleSwgdm9pZCAqKnZyb290cCwKKyAgICBpbnQgKCpjb21wYXIpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKK3sKKyAgICBub2RlICpxOworICAgIGNoYXIgKmtleSA9IChjaGFyICopdmtleTsKKyAgICBub2RlICoqcm9vdHAgPSAobm9kZSAqKil2cm9vdHA7CisKKyAgICBpZiAocm9vdHAgPT0gKHN0cnVjdCBub2RlX3QgKiopMCkKKwlyZXR1cm4gKCh2b2lkICopMCk7CisgICAgd2hpbGUgKCpyb290cCAhPSAoc3RydWN0IG5vZGVfdCAqKTApIHsJLyogS251dGgncyBUMTogKi8KKwlpbnQgcjsKKworCWlmICgociA9ICgqY29tcGFyKShrZXksICgqcm9vdHApLT5rZXkpKSA9PSAwKQkvKiBUMjogKi8KKwkgICAgcmV0dXJuICgodm9pZCAqKSpyb290cCk7CQkvKiB3ZSBmb3VuZCBpdCEgKi8KKwlyb290cCA9IChyIDwgMCkgPworCSAgICAmKCpyb290cCktPmxlZnQgOgkJLyogVDM6IGZvbGxvdyBsZWZ0IGJyYW5jaCAqLworCSAgICAmKCpyb290cCktPnJpZ2h0OwkJLyogVDQ6IGZvbGxvdyByaWdodCBicmFuY2ggKi8KKyAgICB9CisgICAgcSA9IChub2RlICopIG1hbGxvYyhzaXplb2Yobm9kZSkpOwkvKiBUNToga2V5IG5vdCBmb3VuZCAqLworICAgIGlmIChxICE9IChzdHJ1Y3Qgbm9kZV90ICopMCkgewkvKiBtYWtlIG5ldyBub2RlICovCisJKnJvb3RwID0gcTsJCQkvKiBsaW5rIG5ldyBub2RlIHRvIG9sZCAqLworCXEtPmtleSA9IGtleTsJCQkvKiBpbml0aWFsaXplIG5ldyBub2RlICovCisJcS0+bGVmdCA9IHEtPnJpZ2h0ID0gKHN0cnVjdCBub2RlX3QgKikwOworICAgIH0KKyAgICByZXR1cm4gKCh2b2lkICopcSk7Cit9CisKKy8qIGRlbGV0ZSBub2RlIHdpdGggZ2l2ZW4ga2V5ICovCit2b2lkICoKK3RkZWxldGUoY29uc3Qgdm9pZCAqdmtleSwgdm9pZCAqKnZyb290cCwKKyAgICBpbnQgKCpjb21wYXIpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKK3sKKyAgICBub2RlICoqcm9vdHAgPSAobm9kZSAqKil2cm9vdHA7CisgICAgY2hhciAqa2V5ID0gKGNoYXIgKil2a2V5OworICAgIG5vZGUgKnAgPSAobm9kZSAqKTE7CisgICAgbm9kZSAqcTsKKyAgICBub2RlICpyOworICAgIGludCBjbXA7CisKKyAgICBpZiAocm9vdHAgPT0gKHN0cnVjdCBub2RlX3QgKiopMCB8fCAqcm9vdHAgPT0gKHN0cnVjdCBub2RlX3QgKikwKQorCXJldHVybiAoKHN0cnVjdCBub2RlX3QgKikwKTsKKyAgICB3aGlsZSAoKGNtcCA9ICgqY29tcGFyKShrZXksICgqcm9vdHApLT5rZXkpKSAhPSAwKSB7CisJcCA9ICpyb290cDsKKwlyb290cCA9IChjbXAgPCAwKSA/CisJICAgICYoKnJvb3RwKS0+bGVmdCA6CQkvKiBmb2xsb3cgbGVmdCBicmFuY2ggKi8KKwkgICAgJigqcm9vdHApLT5yaWdodDsJCS8qIGZvbGxvdyByaWdodCBicmFuY2ggKi8KKwlpZiAoKnJvb3RwID09IChzdHJ1Y3Qgbm9kZV90ICopMCkKKwkgICAgcmV0dXJuICgodm9pZCAqKTApOwkJLyoga2V5IG5vdCBmb3VuZCAqLworICAgIH0KKyAgICByID0gKCpyb290cCktPnJpZ2h0OwkJCS8qIEQxOiAqLworICAgIGlmICgocSA9ICgqcm9vdHApLT5sZWZ0KSA9PSAoc3RydWN0IG5vZGVfdCAqKTApCS8qIExlZnQgKHN0cnVjdCBub2RlX3QgKikwPyAqLworCXEgPSByOworICAgIGVsc2UgaWYgKHIgIT0gKHN0cnVjdCBub2RlX3QgKikwKSB7CQkvKiBSaWdodCBsaW5rIGlzIG51bGw/ICovCisJaWYgKHItPmxlZnQgPT0gKHN0cnVjdCBub2RlX3QgKikwKSB7CS8qIEQyOiBGaW5kIHN1Y2Nlc3NvciAqLworCSAgICByLT5sZWZ0ID0gcTsKKwkgICAgcSA9IHI7CisJfSBlbHNlIHsJCQkvKiBEMzogRmluZCAoc3RydWN0IG5vZGVfdCAqKTAgbGluayAqLworCSAgICBmb3IgKHEgPSByLT5sZWZ0OyBxLT5sZWZ0ICE9IChzdHJ1Y3Qgbm9kZV90ICopMDsgcSA9IHItPmxlZnQpCisJCXIgPSBxOworCSAgICByLT5sZWZ0ID0gcS0+cmlnaHQ7CisJICAgIHEtPmxlZnQgPSAoKnJvb3RwKS0+bGVmdDsKKwkgICAgcS0+cmlnaHQgPSAoKnJvb3RwKS0+cmlnaHQ7CisJfQorICAgIH0KKyAgICBmcmVlKChzdHJ1Y3Qgbm9kZV90ICopICpyb290cCk7CS8qIEQ0OiBGcmVlIG5vZGUgKi8KKyAgICAqcm9vdHAgPSBxOwkJCQkvKiBsaW5rIHBhcmVudCB0byBuZXcgbm9kZSAqLworICAgIHJldHVybihwKTsKK30KKworLyogV2FsayB0aGUgbm9kZXMgb2YgYSB0cmVlICovCitzdGF0aWMgdm9pZAordHJlY3Vyc2Uobm9kZSAqcm9vdCwgdm9pZCAoKmFjdGlvbikoY29uc3Qgdm9pZCAqLCBWSVNJVCwgaW50KSwgaW50IGxldmVsKQoreworICAgIGlmIChyb290LT5sZWZ0ID09IChzdHJ1Y3Qgbm9kZV90ICopMCAmJiByb290LT5yaWdodCA9PSAoc3RydWN0IG5vZGVfdCAqKTApCisJKCphY3Rpb24pKHJvb3QsIGxlYWYsIGxldmVsKTsKKyAgICBlbHNlIHsKKwkoKmFjdGlvbikocm9vdCwgcHJlb3JkZXIsIGxldmVsKTsKKwlpZiAocm9vdC0+bGVmdCAhPSAoc3RydWN0IG5vZGVfdCAqKTApCisJICAgIHRyZWN1cnNlKHJvb3QtPmxlZnQsIGFjdGlvbiwgbGV2ZWwgKyAxKTsKKwkoKmFjdGlvbikocm9vdCwgcG9zdG9yZGVyLCBsZXZlbCk7CisJaWYgKHJvb3QtPnJpZ2h0ICE9IChzdHJ1Y3Qgbm9kZV90ICopMCkKKwkgICAgdHJlY3Vyc2Uocm9vdC0+cmlnaHQsIGFjdGlvbiwgbGV2ZWwgKyAxKTsKKwkoKmFjdGlvbikocm9vdCwgZW5kb3JkZXIsIGxldmVsKTsKKyAgICB9Cit9CisKKy8qIFdhbGsgdGhlIG5vZGVzIG9mIGEgdHJlZSAqLwordm9pZAordHdhbGsoY29uc3Qgdm9pZCAqdnJvb3QsIHZvaWQgKCphY3Rpb24pKGNvbnN0IHZvaWQgKiwgVklTSVQsIGludCkpCit7CisgICAgbm9kZSAqcm9vdCA9IChub2RlICopdnJvb3Q7CisKKyAgICBpZiAocm9vdCAhPSAobm9kZSAqKTAgJiYgYWN0aW9uICE9ICh2b2lkICgqKShjb25zdCB2b2lkICosIFZJU0lULCBpbnQpKTApCisJdHJlY3Vyc2Uocm9vdCwgYWN0aW9uLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL2Jjb3B5LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL2Jjb3B5LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RyaW5nL2Jjb3B5LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvYmNvcHkuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHBjcHkuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RwY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4YWZhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RwY3B5LmMKQEAgLTAsMCArMSw0NCBAQAorLyoJJE9wZW5CU0Q6IHN0cGNweS5jLHYgMS4yIDIwMTQvMDcvMDkgMTc6MDg6MjEgbmFkZHkgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKEFQSVdBUk4pCitfX3dhcm5fcmVmZXJlbmNlcyhzdHBjcHksCisgICAgIndhcm5pbmc6IHN0cGNweSgpIGlzIGRhbmdlcm91czsgZG8gbm90IHVzZSBpdCIpOworI2VuZGlmCisKK2NoYXIgKgorc3RwY3B5KGNoYXIgKnRvLCBjb25zdCBjaGFyICpmcm9tKQoreworCWZvciAoOyAoKnRvID0gKmZyb20pICE9ICdcMCc7ICsrZnJvbSwgKyt0byk7CisJcmV0dXJuKHRvKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RwbmNweS5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHBuY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjMmE1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RwbmNweS5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCSRPcGVuQlNEOiBzdHBuY3B5LmMsdiAxLjIgMjAxMi8wNy8xMSAxMDo0NDo1OSBuYWRkeSBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyICoKK3N0cG5jcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKQoreworCWlmIChuICE9IDApIHsKKwkJY2hhciAqZCA9IGRzdDsKKwkJY29uc3QgY2hhciAqcyA9IHNyYzsKKworCQlkc3QgPSAmZHN0W25dOworCQlkbyB7CisJCQlpZiAoKCpkKysgPSAqcysrKSA9PSAwKSB7CisJCQkJZHN0ID0gZCAtIDE7CisJCQkJLyogTlVMIHBhZCB0aGUgcmVtYWluaW5nIG4tMSBieXRlcyAqLworCQkJCXdoaWxlICgtLW4gIT0gMCkKKwkJCQkJKmQrKyA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gd2hpbGUgKC0tbiAhPSAwKTsKKwl9CisJcmV0dXJuIChkc3QpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyY2FzZWNtcC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjYXNlY21wLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RyaW5nL3N0cmNhc2VjbXAuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjYXNlY21wLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY2F0LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NmM5YzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNhdC5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCSRPcGVuQlNEOiBzdHJjYXQuYyx2IDEuOSAyMDE0LzA2LzEwIDA0OjE3OjM3IGRlcmFhZHQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKEFQSVdBUk4pCitfX3dhcm5fcmVmZXJlbmNlcyhzdHJjYXQsCisgICAgIndhcm5pbmc6IHN0cmNhdCgpIGlzIGFsbW9zdCBhbHdheXMgbWlzdXNlZCwgcGxlYXNlIHVzZSBzdHJsY2F0KCkiKTsKKyNlbmRpZgorCitjaGFyICoKK3N0cmNhdChjaGFyICpzLCBjb25zdCBjaGFyICphcHBlbmQpCit7CisJY2hhciAqc2F2ZSA9IHM7CisKKwlmb3IgKDsgKnM7ICsrcyk7CisJd2hpbGUgKCgqcysrID0gKmFwcGVuZCsrKSAhPSAnXDAnKTsKKwlyZXR1cm4oc2F2ZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmNtcC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWI2YzUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjbXAuYwpAQCAtMCwwICsxLDQ3IEBACisvKgkkT3BlbkJTRDogc3RyY21wLmMsdiAxLjggMjAxNC8wNi8xMCAwNDoxNzozNyBkZXJhYWR0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qCisgKiBDb21wYXJlIHN0cmluZ3MuCisgKi8KK2ludAorc3RyY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKK3sKKwl3aGlsZSAoKnMxID09ICpzMisrKQorCQlpZiAoKnMxKysgPT0gMCkKKwkJCXJldHVybiAoMCk7CisJcmV0dXJuICgqKHVuc2lnbmVkIGNoYXIgKilzMSAtICoodW5zaWduZWQgY2hhciAqKS0tczIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjcHkuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5MDAxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyY3B5LmMKQEAgLTAsMCArMSw0NiBAQAorLyoJJE9wZW5CU0Q6IHN0cmNweS5jLHYgMS45IDIwMTQvMDYvMTAgMDQ6MTc6MzcgZGVyYWFkdCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoQVBJV0FSTikKK19fd2Fybl9yZWZlcmVuY2VzKHN0cmNweSwKKyAgICAid2FybmluZzogc3RyY3B5KCkgaXMgYWxtb3N0IGFsd2F5cyBtaXN1c2VkLCBwbGVhc2UgdXNlIHN0cmxjcHkoKSIpOworI2VuZGlmCisKK2NoYXIgKgorc3RyY3B5KGNoYXIgKnRvLCBjb25zdCBjaGFyICpmcm9tKQoreworCWNoYXIgKnNhdmUgPSB0bzsKKworCWZvciAoOyAoKnRvID0gKmZyb20pICE9ICdcMCc7ICsrZnJvbSwgKyt0byk7CisJcmV0dXJuKHNhdmUpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyY3Nwbi5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjc3BuLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RyaW5nL3N0cmNzcG4uYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJjc3BuLmMKZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmR1cC5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJkdXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdHJpbmcvc3RyZHVwLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RyZHVwLmMKZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmxjYXQuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNhdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0cmluZy9zdHJsY2F0LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGNhdC5jCmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJsY3B5LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxjcHkuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdHJpbmcvc3RybGNweS5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cmxjcHkuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJsZW4uYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwZTI3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybGVuLmMKQEAgLTAsMCArMSw0MyBAQAorLyoJJE9wZW5CU0Q6IHN0cmxlbi5jLHYgMS44IDIwMTQvMDYvMTAgMDQ6MTc6MzcgZGVyYWFkdCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc2l6ZV90CitzdHJsZW4oY29uc3QgY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKnM7CisKKwlmb3IgKHMgPSBzdHI7ICpzOyArK3MpCisJCTsKKwlyZXR1cm4gKHMgLSBzdHIpOworfQorCmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJuY2F0LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jYXQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdHJpbmcvc3RybmNhdC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jYXQuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY21wLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTRkZGMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY21wLmMKQEAgLTAsMCArMSw0NyBAQAorLyoJJE9wZW5CU0Q6IHN0cm5jbXAuYyx2IDEuOCAyMDE0LzA2LzEwIDA0OjE3OjM3IGRlcmFhZHQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQKK3N0cm5jbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbikKK3sKKworCWlmIChuID09IDApCisJCXJldHVybiAoMCk7CisJZG8geworCQlpZiAoKnMxICE9ICpzMisrKQorCQkJcmV0dXJuICgqKHVuc2lnbmVkIGNoYXIgKilzMSAtICoodW5zaWduZWQgY2hhciAqKS0tczIpOworCQlpZiAoKnMxKysgPT0gMCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKC0tbiAhPSAwKTsKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY3B5LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5jcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDAzYTE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJuY3B5LmMKQEAgLTAsMCArMSw1OCBAQAorLyoJJE9wZW5CU0Q6IHN0cm5jcHkuYyx2IDEuNyAyMDE0LzA2LzEwIDA0OjE3OjM3IGRlcmFhZHQgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIENvcHkgc3JjIHRvIGRzdCwgdHJ1bmNhdGluZyBvciBudWxsLXBhZGRpbmcgdG8gYWx3YXlzIGNvcHkgbiBieXRlcy4KKyAqIFJldHVybiBkc3QuCisgKi8KK2NoYXIgKgorc3RybmNweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IG4pCit7CisJaWYgKG4gIT0gMCkgeworCQljaGFyICpkID0gZHN0OworCQljb25zdCBjaGFyICpzID0gc3JjOworCisJCWRvIHsKKwkJCWlmICgoKmQrKyA9ICpzKyspID09IDApIHsKKwkJCQkvKiBOVUwgcGFkIHRoZSByZW1haW5pbmcgbi0xIGJ5dGVzICovCisJCQkJd2hpbGUgKC0tbiAhPSAwKQorCQkJCQkqZCsrID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAoLS1uICE9IDApOworCX0KKwlyZXR1cm4gKGRzdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5kdXAuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3RybmR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NzAxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cm5kdXAuYwpAQCAtMCwwICsxLDM5IEBACisvKgkkT3BlbkJTRDogc3RybmR1cC5jLHYgMS4xIDIwMTAvMDUvMTggMjI6MjQ6NTUgdGVkdSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyICoKK3N0cm5kdXAoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbWF4bGVuKQoreworCWNoYXIgKmNvcHk7CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IHN0cm5sZW4oc3RyLCBtYXhsZW4pOworCWNvcHkgPSBtYWxsb2MobGVuICsgMSk7CisJaWYgKGNvcHkgIT0gTlVMTCkgeworCQkodm9pZCltZW1jcHkoY29weSwgc3RyLCBsZW4pOworCQljb3B5W2xlbl0gPSAnXDAnOworCX0KKworCXJldHVybiBjb3B5OworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RycGJyay5jIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJwYnJrLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RyaW5nL3N0cnBicmsuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJwYnJrLmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvc3Ryc2VwLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnNlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZmM0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnNlcC5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCSRPcGVuQlNEOiBzdHJzZXAuYyx2IDEuNyAyMDE0LzAyLzA1IDIwOjQyOjMyIHN0c3AgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qCisgKiBHZXQgbmV4dCB0b2tlbiBmcm9tIHN0cmluZyAqc3RyaW5ncCwgd2hlcmUgdG9rZW5zIGFyZSBwb3NzaWJseS1lbXB0eQorICogc3RyaW5ncyBzZXBhcmF0ZWQgYnkgY2hhcmFjdGVycyBmcm9tIGRlbGltLiAgCisgKgorICogV3JpdGVzIE5VTHMgaW50byB0aGUgc3RyaW5nIGF0ICpzdHJpbmdwIHRvIGVuZCB0b2tlbnMuCisgKiBkZWxpbSBuZWVkIG5vdCByZW1haW4gY29uc3RhbnQgZnJvbSBjYWxsIHRvIGNhbGwuCisgKiBPbiByZXR1cm4sICpzdHJpbmdwIHBvaW50cyBwYXN0IHRoZSBsYXN0IE5VTCB3cml0dGVuIChpZiB0aGVyZSBtaWdodAorICogYmUgZnVydGhlciB0b2tlbnMpLCBvciBpcyBOVUxMIChpZiB0aGVyZSBhcmUgZGVmaW5pdGVseSBubyBtb3JlIHRva2VucykuCisgKgorICogSWYgKnN0cmluZ3AgaXMgTlVMTCwgc3Ryc2VwIHJldHVybnMgTlVMTC4KKyAqLworY2hhciAqCitzdHJzZXAoY2hhciAqKnN0cmluZ3AsIGNvbnN0IGNoYXIgKmRlbGltKQoreworCWNoYXIgKnM7CisJY29uc3QgY2hhciAqc3BhbnA7CisJaW50IGMsIHNjOworCWNoYXIgKnRvazsKKworCWlmICgocyA9ICpzdHJpbmdwKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWZvciAodG9rID0gczs7KSB7CisJCWMgPSAqcysrOworCQlzcGFucCA9IGRlbGltOworCQlkbyB7CisJCQlpZiAoKHNjID0gKnNwYW5wKyspID09IGMpIHsKKwkJCQlpZiAoYyA9PSAwKQorCQkJCQlzID0gTlVMTDsKKwkJCQllbHNlCisJCQkJCXNbLTFdID0gMDsKKwkJCQkqc3RyaW5ncCA9IHM7CisJCQkJcmV0dXJuICh0b2spOworCQkJfQorCQl9IHdoaWxlIChzYyAhPSAwKTsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3Ryc3BuLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnNwbi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0cmluZy9zdHJzcG4uYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJzcG4uYwpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3Ryc3RyLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnN0ci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0cmluZy9zdHJzdHIuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJzdHIuYwpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RydG9rLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3N0cnRvay5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0cmluZy9zdHJ0b2suYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy9zdHJ0b2suYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsY3B5LmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3djc2xjcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDk5MzZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsY3B5LmMKQEAgLTAsMCArMSw1MiBAQAorLyoJJE9wZW5CU0Q6IHdjc2xjcHkuYyx2IDEuNSAyMDExLzA3LzI0IDE1OjIxOjI4IG1pbGxlcnQgRXhwICQJKi8KKy8qCSROZXRCU0Q6IHdjc2xjcHkuYyx2IDEuMiAyMDAxLzAxLzAzIDE0OjMzOjAyIGx1a2VtIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTggVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKy8qCisgKiBDb3B5IHNyYyB0byBzdHJpbmcgZHN0IG9mIHNpemUgc2l6LiAgQXQgbW9zdCBzaXotMSBjaGFyYWN0ZXJzCisgKiB3aWxsIGJlIGNvcGllZC4gIEFsd2F5cyBOVUwgdGVybWluYXRlcyAodW5sZXNzIHNpeiA9PSAwKS4KKyAqIFJldHVybnMgd2NzbGVuKHNyYyk7IGlmIHJldHZhbCA+PSBzaXosIHRydW5jYXRpb24gb2NjdXJyZWQuCisgKi8KK3NpemVfdAord2NzbGNweSh3Y2hhcl90ICpkc3QsIGNvbnN0IHdjaGFyX3QgKnNyYywgc2l6ZV90IHNpeikKK3sKKwl3Y2hhcl90ICpkID0gZHN0OworCWNvbnN0IHdjaGFyX3QgKnMgPSBzcmM7CisJc2l6ZV90IG4gPSBzaXo7CisKKwkvKiBDb3B5IGFzIG1hbnkgYnl0ZXMgYXMgd2lsbCBmaXQgKi8KKwlpZiAobiAhPSAwKSB7CisJCXdoaWxlICgtLW4gIT0gMCkgeworCQkJaWYgKCgqZCsrID0gKnMrKykgPT0gJ1wwJykKKwkJCQlicmVhazsKKwkJfQorCX0KKworCS8qIE5vdCBlbm91Z2ggcm9vbSBpbiBkc3QsIGFkZCBOVUwgYW5kIHRyYXZlcnNlIHJlc3Qgb2Ygc3JjICovCisJaWYgKG4gPT0gMCkgeworCQlpZiAoc2l6ICE9IDApCisJCQkqZCA9ICdcMCc7CQkvKiBOVUwtdGVybWluYXRlIGRzdCAqLworCQl3aGlsZSAoKnMrKykKKwkJCTsKKwl9CisKKwlyZXR1cm4ocyAtIHNyYyAtIDEpOwkvKiBjb3VudCBkb2VzIG5vdCBpbmNsdWRlIE5VTCAqLworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1vcGVuYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzdHIuYyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvd2Nzc3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5ZTM0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvd2Nzc3RyLmMKQEAgLTAsMCArMSw3MCBAQAorLyoJJE9wZW5CU0Q6IHdjc3N0ci5jLHYgMS4zIDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KKy8qCSROZXRCU0Q6IHdjc3N0ci5jLHYgMS4zIDIwMDMvMDMvMDUgMjA6MTg6MTcgdHNoaW96YWsgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpMTk5OSBDaXRydXMgUHJvamVjdCwKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJY2l0cnVzIElkOiB3Y3NzdHIuYyx2IDEuMiAyMDAwLzEyLzIxIDA1OjA3OjI1IGl0b2p1biBFeHAKKyAqLworCisjaW5jbHVkZSA8d2NoYXIuaD4KKword2NoYXJfdCAqCisjaWZkZWYgV0NTV0NTCit3Y3N3Y3MoY29uc3Qgd2NoYXJfdCAqYmlnLCBjb25zdCB3Y2hhcl90ICpsaXR0bGUpCisjZWxzZQord2Nzc3RyKGNvbnN0IHdjaGFyX3QgKmJpZywgY29uc3Qgd2NoYXJfdCAqbGl0dGxlKQorI2VuZGlmCit7CisJY29uc3Qgd2NoYXJfdCAqcDsKKwljb25zdCB3Y2hhcl90ICpxOworCWNvbnN0IHdjaGFyX3QgKnI7CisKKwlpZiAoISpsaXR0bGUpIHsKKwkJLyogTElOVEVEIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uICovCisJCXJldHVybiAod2NoYXJfdCAqKWJpZzsKKwl9CisJaWYgKHdjc2xlbihiaWcpIDwgd2NzbGVuKGxpdHRsZSkpCisJCXJldHVybiBOVUxMOworCisJcCA9IGJpZzsKKwlxID0gbGl0dGxlOworCXdoaWxlICgqcCkgeworCQlxID0gbGl0dGxlOworCQlyID0gcDsKKwkJd2hpbGUgKCpxKSB7CisJCQlpZiAoKnIgIT0gKnEpCisJCQkJYnJlYWs7CisJCQlxKys7CisJCQlyKys7CisJCX0KKwkJaWYgKCEqcSkgeworCQkJLyogTElOVEVEIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uICovCisJCQlyZXR1cm4gKHdjaGFyX3QgKilwOworCQl9CisJCXArKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3djc3dpZHRoLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvc3RyaW5nL3djc3dpZHRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhMWJkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy9zdHJpbmcvd2Nzd2lkdGguYwpAQCAtMCwwICsxLDUwIEBACisvKgkkT3BlbkJTRDogd2Nzd2lkdGguYyx2IDEuNCAyMDExLzA0LzA0IDE4OjE2OjI0IHN0c3AgRXhwICQJKi8KKy8qCSROZXRCU0Q6IHdjc3dpZHRoLmMsdiAxLjIgMjAwMS8wMS8wMyAxNDoyOTozNyBsdWtlbSBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykxOTk5IENpdHJ1cyBQcm9qZWN0LAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKgljaXRydXMgSWQ6IHdjc3dpZHRoLmMsdiAxLjEgMTk5OS8xMi8yOSAyMTo0Nzo0NSB0c2hpb3phayBFeHAKKyAqLworCisjaW5jbHVkZSA8d2NoYXIuaD4KKworaW50Cit3Y3N3aWR0aChjb25zdCB3Y2hhcl90ICpzLCBzaXplX3QgbikKK3sKKwlpbnQgdywgcTsKKworCXcgPSAwOworCXdoaWxlIChuICYmICpzKSB7CisJCXEgPSB3Y3dpZHRoKCpzKTsKKwkJaWYgKHEgPT0gLTEpCisJCQlyZXR1cm4gKC0xKTsKKwkJdyArPSBxOworCQlzKys7CisJCW4tLTsKKwl9CisKKwlyZXR1cm4gdzsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tb3BlbmJzZC9saWIvbGliYy90aW1lL3djc2Z0aW1lLmMgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvdGltZS93Y3NmdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxY2NhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW9wZW5ic2QvbGliL2xpYmMvdGltZS93Y3NmdGltZS5jCkBAIC0wLDAgKzEsNTU1IEBACisvKgkkT3BlbkJTRDogd2NzZnRpbWUuYyx2IDEuMyAyMDE0LzA1LzA2IDE1OjQ5OjQ1IHRlZHUgRXhwICQgKi8KKyNpbmNsdWRlICJwcml2YXRlLmgiCisKKy8qCisqKiBCYXNlZCBvbiB0aGUgVUNCIHZlcnNpb24gd2l0aCB0aGUgSUQgYXBwZWFyaW5nIGJlbG93LgorKiogVGhpcyBpcyBBTlNJaXNoIG9ubHkgd2hlbiAibXVsdGlieXRlIGNoYXJhY3RlciA9PSBwbGFpbiBjaGFyYWN0ZXIiLgorKioKKyoqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MworKioJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKgorKiogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyoqIGFyZSBtZXQ6CisqKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyoqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyoqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworKiogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisqKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoqCisqKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorKiogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKiogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisqKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKiogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyoqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKiogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyoqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyoqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyoqIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgInR6ZmlsZS5oIgorI2luY2x1ZGUgImZjbnRsLmgiCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKworc3RydWN0IGxjX3RpbWVfVCB7CisJY29uc3Qgd2NoYXJfdCAqCW1vbltNT05TUEVSWUVBUl07CisJY29uc3Qgd2NoYXJfdCAqCW1vbnRoW01PTlNQRVJZRUFSXTsKKwljb25zdCB3Y2hhcl90ICoJd2RheVtEQVlTUEVSV0VFS107CisJY29uc3Qgd2NoYXJfdCAqCXdlZWtkYXlbREFZU1BFUldFRUtdOworCWNvbnN0IHdjaGFyX3QgKglYX2ZtdDsKKwljb25zdCB3Y2hhcl90ICoJeF9mbXQ7CisJY29uc3Qgd2NoYXJfdCAqCWNfZm10OworCWNvbnN0IHdjaGFyX3QgKglhbTsKKwljb25zdCB3Y2hhcl90ICoJcG07CisJY29uc3Qgd2NoYXJfdCAqCWRhdGVfZm10OworfTsKKworI2RlZmluZSBMb2NhbGUJKCZDX3RpbWVfbG9jYWxlKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGxjX3RpbWVfVAlDX3RpbWVfbG9jYWxlID0geworCXsKKwkJTCJKYW4iLCBMIkZlYiIsIEwiTWFyIiwgTCJBcHIiLCBMIk1heSIsIEwiSnVuIiwKKwkJTCJKdWwiLCBMIkF1ZyIsIEwiU2VwIiwgTCJPY3QiLCBMIk5vdiIsIEwiRGVjIgorCX0sIHsKKwkJTCJKYW51YXJ5IiwgTCJGZWJydWFyeSIsIEwiTWFyY2giLCBMIkFwcmlsIiwgTCJNYXkiLCBMIkp1bmUiLAorCQlMIkp1bHkiLCBMIkF1Z3VzdCIsIEwiU2VwdGVtYmVyIiwgTCJPY3RvYmVyIiwgTCJOb3ZlbWJlciIsIAorCQlMIkRlY2VtYmVyIgorCX0sIHsKKwkJTCJTdW4iLCBMIk1vbiIsIEwiVHVlIiwgTCJXZWQiLAorCQlMIlRodSIsIEwiRnJpIiwgTCJTYXQiCisJfSwgeworCQlMIlN1bmRheSIsIEwiTW9uZGF5IiwgTCJUdWVzZGF5IiwgTCJXZWRuZXNkYXkiLAorCQlMIlRodXJzZGF5IiwgTCJGcmlkYXkiLCBMIlNhdHVyZGF5IgorCX0sCisKKwkvKiBYX2ZtdCAqLworCUwiJUg6JU06JVMiLAorCisJLyoKKwkqKiB4X2ZtdAorCSoqIEM5OSByZXF1aXJlcyB0aGlzIGZvcm1hdC4KKwkqKiBVc2luZyBqdXN0IG51bWJlcnMgKGFzIGhlcmUpIG1ha2VzIFF1YWtlcnMgaGFwcGllcjsKKwkqKiBpdCdzIGFsc28gY29tcGF0aWJsZSB3aXRoIFNWUjQuCisJKi8KKwlMIiVtLyVkLyV5IiwKKworCS8qCisJKiogY19mbXQKKwkqKiBDOTkgcmVxdWlyZXMgdGhpcyBmb3JtYXQuCisJKiogUHJldmlvdXNseSB0aGlzIGNvZGUgdXNlZCAiJUQgJVgiLCBidXQgd2Ugbm93IGNvbmZvcm0gdG8gQzk5LgorCSoqIE5vdGUgdGhhdAorCSoqCSIlYSAlYiAlZCAlSDolTTolUyAlWSIKKwkqKiBpcyB1c2VkIGJ5IFNvbGFyaXMgMi4zLgorCSovCisJTCIlYSAlYiAlZSAlVCAlWSIsCisKKwkvKiBhbSAqLworCUwiQU0iLAorCisJLyogcG0gKi8KKwlMIlBNIiwKKworCS8qIGRhdGVfZm10ICovCisJTCIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK307CisKKyNkZWZpbmUgVU5LTk9XTiBMIj8iCitzdGF0aWMgd2NoYXJfdCAqCV9hZGQoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CitzdGF0aWMgd2NoYXJfdCAqCV9zYWRkKGNvbnN0IGNoYXIgKiwgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOworc3RhdGljIHdjaGFyX3QgKglfY29udihpbnQsIGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOworc3RhdGljIHdjaGFyX3QgKglfZm10KGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgc3RydWN0IHRtICosIHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLAorCQkJaW50ICopOworc3RhdGljIHdjaGFyX3QgKglfeWNvbnYoaW50LCBpbnQsIGludCwgaW50LCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CisKK2V4dGVybiBjaGFyICoJdHpuYW1lW107CisKKyNkZWZpbmUgSU5fTk9ORQkwCisjZGVmaW5lIElOX1NPTUUJMQorI2RlZmluZSBJTl9USElTCTIKKyNkZWZpbmUgSU5fQUxMCTMKKworc2l6ZV90Cit3Y3NmdGltZSh3Y2hhcl90ICpfX3Jlc3RyaWN0IHMsIHNpemVfdCBtYXhzaXplLCAKKyAgICBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IGZvcm1hdCwgY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IHQpCit7CisJd2NoYXJfdCAqcDsKKwlpbnQJd2FybjsKKworCXR6c2V0KCk7CisJd2FybiA9IElOX05PTkU7CisJcCA9IF9mbXQoKChmb3JtYXQgPT0gTlVMTCkgPyBMIiVjIiA6IGZvcm1hdCksIHQsIHMsIHMgKyBtYXhzaXplLCAmd2Fybik7CisJaWYgKHAgPT0gcyArIG1heHNpemUpIHsKKwkJaWYgKG1heHNpemUgPiAwKQorCQkJc1ttYXhzaXplIC0gMV0gPSAnXDAnOworCQlyZXR1cm4gMDsKKwl9CisJKnAgPSBMJ1wwJzsKKwlyZXR1cm4gcCAtIHM7Cit9CisKK3N0YXRpYyB3Y2hhcl90ICoKK19mbXQoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKnQsIHdjaGFyX3QgKnB0LCAKKyAgICBjb25zdCB3Y2hhcl90ICpwdGxpbSwgaW50ICp3YXJucCkKK3sKKwlmb3IgKCA7ICpmb3JtYXQ7ICsrZm9ybWF0KSB7CisJCWlmICgqZm9ybWF0ICE9IEwnJScpIHsKKwkJCWlmIChwdCA9PSBwdGxpbSkKKwkJCQlicmVhazsKKwkJCSpwdCsrID0gKmZvcm1hdDsKKwkJCWNvbnRpbnVlOworCQl9CitsYWJlbDoKKwkJc3dpdGNoICgqKytmb3JtYXQpIHsKKwkJY2FzZSAnXDAnOgorCQkJLS1mb3JtYXQ7CisJCQlicmVhazsKKwkJY2FzZSAnQSc6CisJCQlwdCA9IF9hZGQoKHQtPnRtX3dkYXkgPCAwIHx8CisJCQkJdC0+dG1fd2RheSA+PSBEQVlTUEVSV0VFSykgPworCQkJCVVOS05PV04gOiBMb2NhbGUtPndlZWtkYXlbdC0+dG1fd2RheV0sCisJCQkJcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdhJzoKKwkJCXB0ID0gX2FkZCgodC0+dG1fd2RheSA8IDAgfHwKKwkJCQl0LT50bV93ZGF5ID49IERBWVNQRVJXRUVLKSA/CisJCQkJVU5LTk9XTiA6IExvY2FsZS0+d2RheVt0LT50bV93ZGF5XSwKKwkJCQlwdCwgcHRsaW0pOworCQkJY29udGludWU7CisJCWNhc2UgJ0InOgorCQkJcHQgPSBfYWRkKCh0LT50bV9tb24gPCAwIHx8CisJCQkJdC0+dG1fbW9uID49IE1PTlNQRVJZRUFSKSA/CisJCQkJVU5LTk9XTiA6IExvY2FsZS0+bW9udGhbdC0+dG1fbW9uXSwKKwkJCQlwdCwgcHRsaW0pOworCQkJY29udGludWU7CisJCWNhc2UgJ2InOgorCQljYXNlICdoJzoKKwkJCXB0ID0gX2FkZCgodC0+dG1fbW9uIDwgMCB8fAorCQkJCXQtPnRtX21vbiA+PSBNT05TUEVSWUVBUikgPworCQkJCVVOS05PV04gOiBMb2NhbGUtPm1vblt0LT50bV9tb25dLAorCQkJCXB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnQyc6CisJCQkvKgorCQkJKiogJUMgdXNlZCB0byBkbyBhLi4uCisJCQkqKglfZm10KCIlYSAlYiAlZSAlWCAlWSIsIHQpOworCQkJKiogLi4ud2hlcmVhcyBub3cgUE9TSVggMTAwMy4yIGNhbGxzIGZvcgorCQkJKiogc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50LgorCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCSovCisJCQlwdCA9IF95Y29udih0LT50bV95ZWFyLCBUTV9ZRUFSX0JBU0UsIDEsIDAsCisJCQkJcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdjJzoKKwkJCXsKKwkJCWludCB3YXJuMiA9IElOX1NPTUU7CisKKwkJCXB0ID0gX2ZtdChMb2NhbGUtPmNfZm10LCB0LCBwdCwgcHRsaW0sICZ3YXJuMik7CisJCQlpZiAod2FybjIgPT0gSU5fQUxMKQorCQkJCXdhcm4yID0gSU5fVEhJUzsKKwkJCWlmICh3YXJuMiA+ICp3YXJucCkKKwkJCQkqd2FybnAgPSB3YXJuMjsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQljYXNlICdEJzoKKwkJCXB0ID0gX2ZtdChMIiVtLyVkLyV5IiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnZCc6CisJCQlwdCA9IF9jb252KHQtPnRtX21kYXksIEwiJTAyZCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnRSc6CisJCWNhc2UgJ08nOgorCQkJLyoKKwkJCSoqIEM5OSBsb2NhbGUgbW9kaWZpZXJzLgorCQkJKiogVGhlIHNlcXVlbmNlcworCQkJKioJJUVjICVFQyAlRXggJUVYICVFeSAlRVkKKwkJCSoqCSVPZCAlb2UgJU9IICVPSSAlT20gJU9NCisJCQkqKgklT1MgJU91ICVPVSAlT1YgJU93ICVPVyAlT3kKKwkJCSoqIGFyZSBzdXBwb3NlZCB0byBwcm92aWRlIGFsdGVybmF0ZQorCQkJKiogcmVwcmVzZW50YXRpb25zLgorCQkJKi8KKwkJCWdvdG8gbGFiZWw7CisJCWNhc2UgJ2UnOgorCQkJcHQgPSBfY29udih0LT50bV9tZGF5LCBMIiUyZCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnRic6CisJCQlwdCA9IF9mbXQoTCIlWS0lbS0lZCIsIHQsIHB0LCBwdGxpbSwgd2FybnApOworCQkJY29udGludWU7CisJCWNhc2UgJ0gnOgorCQkJcHQgPSBfY29udih0LT50bV9ob3VyLCBMIiUwMmQiLCBwdCwgcHRsaW0pOworCQkJY29udGludWU7CisJCWNhc2UgJ0knOgorCQkJcHQgPSBfY29udigodC0+dG1faG91ciAlIDEyKSA/CisJCQkJKHQtPnRtX2hvdXIgJSAxMikgOiAxMiwKKwkJCQlMIiUwMmQiLCBwdCwgcHRsaW0pOworCQkJY29udGludWU7CisJCWNhc2UgJ2onOgorCQkJcHQgPSBfY29udih0LT50bV95ZGF5ICsgMSwgTCIlMDNkIiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdrJzoKKwkJCS8qCisJCQkqKiBUaGlzIHVzZWQgdG8gYmUuLi4KKwkJCSoqCV9jb252KHQtPnRtX2hvdXIgJSAxMiA/CisJCQkqKgkJdC0+dG1faG91ciAlIDEyIDogMTIsIDIsICcgJyk7CisJCQkqKiAuLi5hbmQgaGFzIGJlZW4gY2hhbmdlZCB0byB0aGUgYmVsb3cgdG8KKwkJCSoqIG1hdGNoIFN1bk9TIDQuMS4xIGFuZCBBcm5vbGQgUm9iYmlucycKKwkJCSoqIHN0cmZ0aW1lIHZlcnNpb24gMy4wLiBUaGF0IGlzLCAiJWsiIGFuZAorCQkJKiogIiVsIiBoYXZlIGJlZW4gc3dhcHBlZC4KKwkJCSoqIChhZG8sIDE5OTMtMDUtMjQpCisJCQkqLworCQkJcHQgPSBfY29udih0LT50bV9ob3VyLCBMIiUyZCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnbCc6CisJCQkvKgorCQkJKiogVGhpcyB1c2VkIHRvIGJlLi4uCisJCQkqKglfY29udih0LT50bV9ob3VyLCAyLCAnICcpOworCQkJKiogLi4uYW5kIGhhcyBiZWVuIGNoYW5nZWQgdG8gdGhlIGJlbG93IHRvCisJCQkqKiBtYXRjaCBTdW5PUyA0LjEuMSBhbmQgQXJub2xkIFJvYmJpbidzCisJCQkqKiBzdHJmdGltZSB2ZXJzaW9uIDMuMC4gVGhhdCBpcywgIiVrIiBhbmQKKwkJCSoqICIlbCIgaGF2ZSBiZWVuIHN3YXBwZWQuCisJCQkqKiAoYWRvLCAxOTkzLTA1LTI0KQorCQkJKi8KKwkJCXB0ID0gX2NvbnYoKHQtPnRtX2hvdXIgJSAxMikgPworCQkJCSh0LT50bV9ob3VyICUgMTIpIDogMTIsCisJCQkJTCIlMmQiLCBwdCwgcHRsaW0pOworCQkJY29udGludWU7CisJCWNhc2UgJ00nOgorCQkJcHQgPSBfY29udih0LT50bV9taW4sIEwiJTAyZCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnbSc6CisJCQlwdCA9IF9jb252KHQtPnRtX21vbiArIDEsIEwiJTAyZCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnbic6CisJCQlwdCA9IF9hZGQoTCJcbiIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAncCc6CisJCQlwdCA9IF9hZGQoKHQtPnRtX2hvdXIgPj0gKEhPVVJTUEVSREFZIC8gMikpID8KKwkJCQlMb2NhbGUtPnBtIDoKKwkJCQlMb2NhbGUtPmFtLAorCQkJCXB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnUic6CisJCQlwdCA9IF9mbXQoTCIlSDolTSIsIHQsIHB0LCBwdGxpbSwgd2FybnApOworCQkJY29udGludWU7CisJCWNhc2UgJ3InOgorCQkJcHQgPSBfZm10KEwiJUk6JU06JVMgJXAiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdTJzoKKwkJCXB0ID0gX2NvbnYodC0+dG1fc2VjLCBMIiUwMmQiLCBwdCwgcHRsaW0pOworCQkJY29udGludWU7CisJCWNhc2UgJ3MnOgorCQkJeworCQkJCXN0cnVjdCB0bQl0bTsKKwkJCQl3Y2hhcl90CQlidWZbSU5UX1NUUkxFTl9NQVhJTVVNKAorCQkJCQkJCXRpbWVfdCkgKyAxXTsKKwkJCQl0aW1lX3QJCW1rdDsKKworCQkJCXRtID0gKnQ7CisJCQkJbWt0ID0gbWt0aW1lKCZ0bSk7CisJCQkJaWYgKFRZUEVfU0lHTkVEKHRpbWVfdCkpCisJCQkJCSh2b2lkKSBzd3ByaW50ZihidWYsIAorCQkJCQkgICAgc2l6ZW9mIGJ1Zi9zaXplb2YgYnVmWzBdLAorCQkJCQkgICAgTCIlbGQiLCAobG9uZykgbWt0KTsKKwkJCQllbHNlCQorCQkJCQkodm9pZCkgc3dwcmludGYoYnVmLCAKKwkJCQkJICAgIHNpemVvZiBidWYvc2l6ZW9mIGJ1ZlswXSwKKwkJCQkJICAgIEwiJWx1IiwgKHVuc2lnbmVkIGxvbmcpIG1rdCk7CisJCQkJcHQgPSBfYWRkKGJ1ZiwgcHQsIHB0bGltKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQljYXNlICdUJzoKKwkJCXB0ID0gX2ZtdChMIiVIOiVNOiVTIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CisJCQljb250aW51ZTsKKwkJY2FzZSAndCc6CisJCQlwdCA9IF9hZGQoTCJcdCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnVSc6CisJCQlwdCA9IF9jb252KCh0LT50bV95ZGF5ICsgREFZU1BFUldFRUsgLQorCQkJCXQtPnRtX3dkYXkpIC8gREFZU1BFUldFRUssCisJCQkJTCIlMDJkIiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICd1JzoKKwkJCS8qCisJCQkqKiBGcm9tIEFybm9sZCBSb2JiaW5zJyBzdHJmdGltZSB2ZXJzaW9uIDMuMDoKKwkJCSoqICJJU08gODYwMTogV2Vla2RheSBhcyBhIGRlY2ltYWwgbnVtYmVyCisJCQkqKiBbMSAoTW9uZGF5KSAtIDddIgorCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCSovCisJCQlwdCA9IF9jb252KCh0LT50bV93ZGF5ID09IDApID8KKwkJCQlEQVlTUEVSV0VFSyA6IHQtPnRtX3dkYXksCisJCQkJTCIlZCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnVic6CS8qIElTTyA4NjAxIHdlZWsgbnVtYmVyICovCisJCWNhc2UgJ0cnOgkvKiBJU08gODYwMSB5ZWFyIChmb3VyIGRpZ2l0cykgKi8KKwkJY2FzZSAnZyc6CS8qIElTTyA4NjAxIHllYXIgKHR3byBkaWdpdHMpICovCisvKgorKiogRnJvbSBBcm5vbGQgUm9iYmlucycgc3RyZnRpbWUgdmVyc2lvbiAzLjA6ICJ0aGUgd2VlayBudW1iZXIgb2YgdGhlCisqKiB5ZWFyICh0aGUgZmlyc3QgTW9uZGF5IGFzIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAxKSBhcyBhIGRlY2ltYWwgbnVtYmVyCisqKiAoMDEtNTMpLiIKKyoqIChhZG8sIDE5OTMtMDUtMjQpCisqKgorKiogRnJvbSAiaHR0cDovL3d3dy5mdC51bmktZXJsYW5nZW4uZGUvfm1za3Vobi9pc28tdGltZS5odG1sIiBieSBNYXJrdXMgS3VobjoKKyoqICJXZWVrIDAxIG9mIGEgeWVhciBpcyBwZXIgZGVmaW5pdGlvbiB0aGUgZmlyc3Qgd2VlayB3aGljaCBoYXMgdGhlCisqKiBUaHVyc2RheSBpbiB0aGlzIHllYXIsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHdlZWsgd2hpY2ggY29udGFpbnMKKyoqIHRoZSBmb3VydGggZGF5IG9mIEphbnVhcnkuIEluIG90aGVyIHdvcmRzLCB0aGUgZmlyc3Qgd2VlayBvZiBhIG5ldyB5ZWFyCisqKiBpcyB0aGUgd2VlayB3aGljaCBoYXMgdGhlIG1ham9yaXR5IG9mIGl0cyBkYXlzIGluIHRoZSBuZXcgeWVhci4gV2VlayAwMQorKiogbWlnaHQgYWxzbyBjb250YWluIGRheXMgZnJvbSB0aGUgcHJldmlvdXMgeWVhciBhbmQgdGhlIHdlZWsgYmVmb3JlIHdlZWsKKyoqIDAxIG9mIGEgeWVhciBpcyB0aGUgbGFzdCB3ZWVrICg1MiBvciA1Mykgb2YgdGhlIHByZXZpb3VzIHllYXIgZXZlbiBpZgorKiogaXQgY29udGFpbnMgZGF5cyBmcm9tIHRoZSBuZXcgeWVhci4gQSB3ZWVrIHN0YXJ0cyB3aXRoIE1vbmRheSAoZGF5IDEpCisqKiBhbmQgZW5kcyB3aXRoIFN1bmRheSAoZGF5IDcpLiBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIKKyoqIDE5OTcgbGFzdHMgZnJvbSAxOTk2LTEyLTMwIHRvIDE5OTctMDEtMDUuLi4iCisqKiAoYWRvLCAxOTk2LTAxLTAyKQorKi8KKwkJCXsKKwkJCWludAl5ZWFyOworCQkJaW50CWJhc2U7CisJCQlpbnQJeWRheTsKKwkJCWludAl3ZGF5OworCQkJaW50CXc7CisKKwkJCXllYXIgPSB0LT50bV95ZWFyOworCQkJYmFzZSA9IFRNX1lFQVJfQkFTRTsKKwkJCXlkYXkgPSB0LT50bV95ZGF5OworCQkJd2RheSA9IHQtPnRtX3dkYXk7CisJCQlmb3IgKCA7IDsgKSB7CisJCQkJaW50CWxlbjsKKwkJCQlpbnQJYm90OworCQkJCWludAl0b3A7CisKKwkJCQlsZW4gPSBpc2xlYXBfc3VtKHllYXIsIGJhc2UpID8KKwkJCQkJREFZU1BFUkxZRUFSIDoKKwkJCQkJREFZU1BFUk5ZRUFSOworCQkJCS8qCisJCQkJKiogV2hhdCB5ZGF5ICgtMyAuLi4gMykgZG9lcyB0aGUgSVNPIHllYXIgCisJCQkJKiogYmVnaW4gb24/CisJCQkJKi8KKwkJCQlib3QgPSAoKHlkYXkgKyAxMSAtIHdkYXkpICUgREFZU1BFUldFRUspIC0gMzsKKwkJCQkvKgorCQkJCSoqIFdoYXQgeWRheSBkb2VzIHRoZSBORVhUIElTTyB5ZWFyIGJlZ2luIG9uPworCQkJCSovCisJCQkJdG9wID0gYm90IC0gKGxlbiAlIERBWVNQRVJXRUVLKTsKKwkJCQlpZiAodG9wIDwgLTMpCisJCQkJCXRvcCArPSBEQVlTUEVSV0VFSzsKKwkJCQl0b3AgKz0gbGVuOworCQkJCWlmICh5ZGF5ID49IHRvcCkgeworCQkJCQkrK2Jhc2U7CisJCQkJCXcgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKHlkYXkgPj0gYm90KSB7CisJCQkJCXcgPSAxICsgKCh5ZGF5IC0gYm90KSAvIERBWVNQRVJXRUVLKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS0tYmFzZTsKKwkJCQl5ZGF5ICs9IGlzbGVhcF9zdW0oeWVhciwgYmFzZSkgPworCQkJCQlEQVlTUEVSTFlFQVIgOgorCQkJCQlEQVlTUEVSTllFQVI7CisJCQl9CisJCQlpZiAoKHcgPT0gNTIgJiYgdC0+dG1fbW9uID09IFRNX0pBTlVBUlkpIHx8CisJCQkJKHcgPT0gMSAmJiB0LT50bV9tb24gPT0gVE1fREVDRU1CRVIpKQorCQkJCQl3ID0gNTM7CisJCQlpZiAoKmZvcm1hdCA9PSAnVicpCisJCQkJcHQgPSBfY29udih3LCBMIiUwMmQiLCBwdCwgcHRsaW0pOworCQkJZWxzZSBpZiAoKmZvcm1hdCA9PSAnZycpIHsKKwkJCQkqd2FybnAgPSBJTl9BTEw7CisJCQkJcHQgPSBfeWNvbnYoeWVhciwgYmFzZSwgMCwgMSwgcHQsIHB0bGltKTsKKwkJCX0gZWxzZQkKKwkJCQlwdCA9IF95Y29udih5ZWFyLCBiYXNlLCAxLCAxLCBwdCwgcHRsaW0pOworCQkJfQorCQkJY29udGludWU7CisJCWNhc2UgJ3YnOgorCQkJLyoKKwkJCSoqIEZyb20gQXJub2xkIFJvYmJpbnMnIHN0cmZ0aW1lIHZlcnNpb24gMy4wOgorCQkJKiogImRhdGUgYXMgZGQtYmJiLVlZWVkiCisJCQkqKiAoYWRvLCAxOTkzLTA1LTI0KQorCQkJKi8KKwkJCXB0ID0gX2ZtdChMIiVlLSViLSVZIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnVyc6CisJCQlwdCA9IF9jb252KCh0LT50bV95ZGF5ICsgREFZU1BFUldFRUsgLQorCQkJCSh0LT50bV93ZGF5ID8KKwkJCQkodC0+dG1fd2RheSAtIDEpIDoKKwkJCQkoREFZU1BFUldFRUsgLSAxKSkpIC8gREFZU1BFUldFRUssCisJCQkJTCIlMDJkIiwgcHQsIHB0bGltKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICd3JzoKKwkJCXB0ID0gX2NvbnYodC0+dG1fd2RheSwgTCIlZCIsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnWCc6CisJCQlwdCA9IF9mbXQoTG9jYWxlLT5YX2ZtdCwgdCwgcHQsIHB0bGltLCB3YXJucCk7CisJCQljb250aW51ZTsKKwkJY2FzZSAneCc6CisJCQl7CisJCQlpbnQJd2FybjIgPSBJTl9TT01FOworCisJCQlwdCA9IF9mbXQoTG9jYWxlLT54X2ZtdCwgdCwgcHQsIHB0bGltLCAmd2FybjIpOworCQkJaWYgKHdhcm4yID09IElOX0FMTCkKKwkJCQl3YXJuMiA9IElOX1RISVM7CisJCQlpZiAod2FybjIgPiAqd2FybnApCisJCQkJKndhcm5wID0gd2FybjI7CisJCQl9CisJCQljb250aW51ZTsKKwkJY2FzZSAneSc6CisJCQkqd2FybnAgPSBJTl9BTEw7CisJCQlwdCA9IF95Y29udih0LT50bV95ZWFyLCBUTV9ZRUFSX0JBU0UsIDAsIDEsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnWSc6CisJCQlwdCA9IF95Y29udih0LT50bV95ZWFyLCBUTV9ZRUFSX0JBU0UsIDEsIDEsIHB0LCBwdGxpbSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnWic6CisJCQlpZiAodC0+dG1fem9uZSAhPSBOVUxMKQorCQkJCXB0ID0gX3NhZGQodC0+VE1fWk9ORSwgcHQsIHB0bGltKTsKKwkJCWVsc2UKKwkJCQlpZiAodC0+dG1faXNkc3QgPj0gMCkKKwkJCQkJcHQgPSBfc2FkZCh0em5hbWVbdC0+dG1faXNkc3QgIT0gMF0sIAorCQkJCQkgICAgcHQsIHB0bGltKTsKKwkJCS8qCisJCQkqKiBDOTkgc2F5cyB0aGF0ICVaIG11c3QgYmUgcmVwbGFjZWQgYnkgdGhlCisJCQkqKiBlbXB0eSBzdHJpbmcgaWYgdGhlIHRpbWUgem9uZSBpcyBub3QKKwkJCSoqIGRldGVybWluYWJsZS4KKwkJCSovCisJCQljb250aW51ZTsKKwkJY2FzZSAneic6CisJCQl7CisJCQlpbnQJCWRpZmY7CisJCQl3Y2hhcl90IGNvbnN0ICoJc2lnbjsKKworCQkJaWYgKHQtPnRtX2lzZHN0IDwgMCkKKwkJCQljb250aW51ZTsKKwkJCWRpZmYgPSB0LT50bV9nbXRvZmY7CisJCQlpZiAoZGlmZiA8IDApIHsKKwkJCQlzaWduID0gTCItIjsKKwkJCQlkaWZmID0gLWRpZmY7CisJCQl9IGVsc2UJCisJCQkJc2lnbiA9IEwiKyI7CisJCQlwdCA9IF9hZGQoc2lnbiwgcHQsIHB0bGltKTsKKwkJCWRpZmYgLz0gU0VDU1BFUk1JTjsKKwkJCWRpZmYgPSAoZGlmZiAvIE1JTlNQRVJIT1VSKSAqIDEwMCArCisJCQkJKGRpZmYgJSBNSU5TUEVSSE9VUik7CisJCQlwdCA9IF9jb252KGRpZmYsIEwiJTA0ZCIsIHB0LCBwdGxpbSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJY2FzZSAnKyc6CisJCQlwdCA9IF9mbXQoTG9jYWxlLT5kYXRlX2ZtdCwgdCwgcHQsIHB0bGltLCB3YXJucCk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnJSc6CisJCS8qCisJCSoqIFgzMTFKLzg4LTA5MCAoNC4xMi4zLjUpOiBpZiBjb252ZXJzaW9uIHdjaGFyX3QgaXMKKwkJKiogdW5kZWZpbmVkLCBiZWhhdmlvciBpcyB1bmRlZmluZWQuIFByaW50IG91dCB0aGUKKwkJKiogY2hhcmFjdGVyIGl0c2VsZiBhcyBwcmludGYoMykgYWxzbyBkb2VzLgorCQkqLworCQlkZWZhdWx0OgorCQkJaWYgKHB0ICE9IHB0bGltKQorCQkJCSpwdCsrID0gKmZvcm1hdDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBwdDsKK30KKworc3RhdGljIHdjaGFyX3QgKgorX2NvbnYoaW50IG4sIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgd2NoYXJfdCAqcHQsIGNvbnN0IHdjaGFyX3QgKnB0bGltKQoreworCXdjaGFyX3QJYnVmW0lOVF9TVFJMRU5fTUFYSU1VTShpbnQpICsgMV07CisKKwkodm9pZCkgc3dwcmludGYoYnVmLCBzaXplb2YgYnVmL3NpemVvZiBidWZbMF0sIGZvcm1hdCwgbik7CisJcmV0dXJuIF9hZGQoYnVmLCBwdCwgcHRsaW0pOworfQorCitzdGF0aWMgd2NoYXJfdCAqCitfYWRkKGNvbnN0IHdjaGFyX3QgKnN0ciwgd2NoYXJfdCAqcHQsIGNvbnN0IHdjaGFyX3QgKnB0bGltKQoreworCXdoaWxlIChwdCA8IHB0bGltICYmICgqcHQgPSAqc3RyKyspICE9IEwnXDAnKQorCQkrK3B0OworCXJldHVybiBwdDsKK30KKworc3RhdGljIHdjaGFyX3QgKgorX3NhZGQoY29uc3QgY2hhciAqc3RyLCB3Y2hhcl90ICpwdCwgY29uc3Qgd2NoYXJfdCAqcHRsaW0pCit7CisJd2hpbGUgKHB0IDwgcHRsaW0gJiYgKCpwdCA9IGJ0b3djKCpzdHIrKykpICE9IEwnXDAnKQorCQkrK3B0OworCXJldHVybiBwdDsKK30KKy8qCisqKiBQT1NJWCBhbmQgdGhlIEMgU3RhbmRhcmQgYXJlIHVuY2xlYXIgb3IgaW5jb25zaXN0ZW50IGFib3V0CisqKiB3aGF0ICVDIGFuZCAleSBkbyBpZiB0aGUgeWVhciBpcyBuZWdhdGl2ZSBvciBleGNlZWRzIDk5OTkuCisqKiBVc2UgdGhlIGNvbnZlbnRpb24gdGhhdCAlQyBjb25jYXRlbmF0ZWQgd2l0aCAleSB5aWVsZHMgdGhlCisqKiBzYW1lIG91dHB1dCBhcyAlWSwgYW5kIHRoYXQgJVkgY29udGFpbnMgYXQgbGVhc3QgNCBieXRlcywKKyoqIHdpdGggbW9yZSBvbmx5IGlmIG5lY2Vzc2FyeS4KKyovCisKK3N0YXRpYyB3Y2hhcl90ICoKK195Y29udihpbnQgYSwgaW50IGIsIGludCBjb252ZXJ0X3RvcCwgaW50IGNvbnZlcnRfeXksIHdjaGFyX3QgKnB0LCAKKyAgICBjb25zdCB3Y2hhcl90ICpwdGxpbSkKK3sKKwlyZWdpc3RlciBpbnQJbGVhZDsKKwlyZWdpc3RlciBpbnQJdHJhaWw7CisKKyNkZWZpbmUgRElWSVNPUgkxMDAKKwl0cmFpbCA9IGEgJSBESVZJU09SICsgYiAlIERJVklTT1I7CisJbGVhZCA9IGEgLyBESVZJU09SICsgYiAvIERJVklTT1IgKyB0cmFpbCAvIERJVklTT1I7CisJdHJhaWwgJT0gRElWSVNPUjsKKwlpZiAodHJhaWwgPCAwICYmIGxlYWQgPiAwKSB7CisJCXRyYWlsICs9IERJVklTT1I7CisJCS0tbGVhZDsKKwl9IGVsc2UgaWYgKGxlYWQgPCAwICYmIHRyYWlsID4gMCkgeworCQl0cmFpbCAtPSBESVZJU09SOworCQkrK2xlYWQ7CisJfQorCWlmIChjb252ZXJ0X3RvcCkgeworCQlpZiAobGVhZCA9PSAwICYmIHRyYWlsIDwgMCkKKwkJCXB0ID0gX2FkZChMIi0wIiwgcHQsIHB0bGltKTsKKwkJZWxzZQlwdCA9IF9jb252KGxlYWQsIEwiJTAyZCIsIHB0LCBwdGxpbSk7CisJfQorCWlmIChjb252ZXJ0X3l5KQorCQlwdCA9IF9jb252KCgodHJhaWwgPCAwKSA/IC10cmFpbCA6IHRyYWlsKSwgTCIlMDJkIiwgcHQsIHB0bGltKTsKKwlyZXR1cm4gcHQ7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd2Nzd2lkdGguYyBiL2xpYmMvd2NoYXIvd2Nzd2lkdGguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE0MjA3NC4uMDAwMDAwMAotLS0gYS9saWJjL3djaGFyL3djc3dpZHRoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCi0gKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCi0gKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAotICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogUGF1bCBCb3JtYW4gYXQgS3J5c3RhbCBUZWNobm9sb2dpZXMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgPHdjaGFyLmg+Ci0KLWludAotd2Nzd2lkdGgoY29uc3Qgd2NoYXJfdCAqcHdjcywgc2l6ZV90IG4pCi17Ci0Jd2NoYXJfdCB3YzsKLQlpbnQgbGVuLCBsOwotCi0JbGVuID0gMDsKLQl3aGlsZSAobi0tID4gMCAmJiAod2MgPSAqcHdjcysrKSAhPSBMJ1wwJykgewotCQlpZiAoKGwgPSB3Y3dpZHRoKHdjKSkgPCAwKQotCQkJcmV0dXJuICgtMSk7Ci0JCWxlbiArPSBsOwotCX0KLQlyZXR1cm4gKGxlbik7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd2NzeGZybS5jIGIvbGliYy93Y2hhci93Y3N4ZnJtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MmVhNTYuLjAwMDAwMDAKLS0tIGEvbGliYy93Y2hhci93Y3N4ZnJtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5NSBBbGV4IFRhdG1hbmphbnRzIDxhbGV4QGVsdmlzdGkua2lldi51YT4KLSAqCQlhdCBFbGVjdHJvbm5pIFZpc3RpIElBLCBLaWV2LCBVa3JhaW5lLgotICoJCQlBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDx3Y2hhci5oPgotCi0vKgotICogUGxhY2Vob2xkZXIgd2NzeGZybSgpIGltcGxlbWVudGF0aW9uLiBTZWUgd2NzY29sbC5jIGZvciBhIGRlc2NyaXB0aW9uIG9mCi0gKiB0aGUgbG9naWMgdXNlZC4KLSAqLwotc2l6ZV90Ci13Y3N4ZnJtKHdjaGFyX3QgKiBfX3Jlc3RyaWN0IGRlc3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IHNyYywgc2l6ZV90IGxlbikKLXsKLSAgICBpbnQgcHJpbSwgc2VjLCBsOwotICAgIHNpemVfdCBzbGVuOwotICAgIGNoYXIgKm1ic3JjLCAqcywgKnNzOwotCi0gICAgaWYgKCpzcmMgPT0gTCdcMCcpIHsKLSAgICAgICAgaWYgKGxlbiAhPSAwKQotICAgICAgICAgICAgKmRlc3QgPSBMJ1wwJzsKLSAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9Ci0KLSAgICBzbGVuID0gd2NzbGVuKHNyYyk7Ci0gICAgaWYgKGxlbiA+IDApIHsKLSAgICAgICAgaWYgKHNsZW4gPCBsZW4pCi0gICAgICAgICAgICB3Y3NjcHkoZGVzdCwgc3JjKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB3Y3NuY3B5KGRlc3QsIHNyYywgbGVuIC0gMSk7Ci0gICAgICAgICAgICBkZXN0W2xlbiAtIDFdID0gTCdcMCc7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIChzbGVuKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvem9uZWluZm8vdHpkYXRhIGIvbGliYy96b25laW5mby90emRhdGEKaW5kZXggODQ2OGU4My4uOGQ1NzRmNSAxMDA2NDQKLS0tIGEvbGliYy96b25laW5mby90emRhdGEKKysrIGIvbGliYy96b25laW5mby90emRhdGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliZGwvQW5kcm9pZC5tayBiL2xpYmRsL0FuZHJvaWQubWsKaW5kZXggM2Q2MDQ3NC4uY2IxY2I3ZCAxMDA2NDQKLS0tIGEvbGliZGwvQW5kcm9pZC5taworKysgYi9saWJkbC9BbmRyb2lkLm1rCkBAIC0yMiw3ICsyMiw3IEBACiBMT0NBTF9MREZMQUdTX3g4Nl82NCA6PSAkKExPQ0FMX0xERkxBR1NfeDg2KQogCiBMT0NBTF9TUkNfRklMRVM6PSBsaWJkbC5jCi1MT0NBTF9DRkxBR1MgOj0gLVdhbGwgLVdleHRyYSAtV2Vycm9yCitMT0NBTF9DRkxBR1MgOj0gLVdhbGwgLVdleHRyYSAtV3VudXNlZCAtV2Vycm9yCiAKIExPQ0FMX01PRFVMRSA6PSBsaWJkbAogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCmRpZmYgLS1naXQgYS9saWJkbC9saWJkbC5jIGIvbGliZGwvbGliZGwuYwppbmRleCAzMTBkYjU0Li5kY2E1MWIwIDEwMDY0NAotLS0gYS9saWJkbC9saWJkbC5jCisrKyBiL2xpYmRsL2xpYmRsLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxkbGZjbi5oPgogI2luY2x1ZGUgPGxpbmsuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxhbmRyb2lkL2RsZXh0Lmg+CiAKIC8vIFRoZXNlIGFyZSBzdHVicyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGRlZmluZWQKIC8vIGluIHRoZSBkeW5hbWljIGxpbmtlciBhbmQgaGlqYWNrZWQgYXQgcnVudGltZS4KQEAgLTI3LDExICsyOCwxMyBAQAogaW50IGRsYWRkcihjb25zdCB2b2lkKiBhZGRyIF9fdW51c2VkLCBEbF9pbmZvKiBpbmZvIF9fdW51c2VkKSB7IHJldHVybiAwOyB9CiBpbnQgZGxjbG9zZSh2b2lkKiBoYW5kbGUgX191bnVzZWQpIHsgcmV0dXJuIDA7IH0KIAotdm9pZCBhbmRyb2lkX2dldF9MRF9MSUJSQVJZX1BBVEgoY2hhciogYnVmZmVyIF9fdW51c2VkLCBzaXplX3QgYnVmZmVyX3NpemUgX191bnVzZWQpIHsgfQotdm9pZCBhbmRyb2lkX3VwZGF0ZV9MRF9MSUJSQVJZX1BBVEgoY29uc3QgY2hhciogbGRfbGlicmFyeV9wYXRoIF9fdW51c2VkKSB7IH0KLQogI2lmIGRlZmluZWQoX19hcm1fXykKIF9VbndpbmRfUHRyIGRsX3Vud2luZF9maW5kX2V4aWR4KF9VbndpbmRfUHRyIHBjIF9fdW51c2VkLCBpbnQqIHBjb3VudCBfX3VudXNlZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKIGludCBkbF9pdGVyYXRlX3BoZHIoaW50ICgqY2IpKHN0cnVjdCBkbF9waGRyX2luZm8qIGluZm8sIHNpemVfdCBzaXplLCB2b2lkKiBkYXRhKSBfX3VudXNlZCwgdm9pZCogZGF0YSBfX3VudXNlZCkgeyByZXR1cm4gMDsgfQorCit2b2lkIGFuZHJvaWRfZ2V0X0xEX0xJQlJBUllfUEFUSChjaGFyKiBidWZmZXIgX191bnVzZWQsIHNpemVfdCBidWZmZXJfc2l6ZSBfX3VudXNlZCkgeyB9Cit2b2lkIGFuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSChjb25zdCBjaGFyKiBsZF9saWJyYXJ5X3BhdGggX191bnVzZWQpIHsgfQorCit2b2lkKiBhbmRyb2lkX2Rsb3Blbl9leHQoY29uc3QgY2hhciogZmlsZW5hbWUgX191bnVzZWQsIGludCBmbGFnIF9fdW51c2VkLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbyBfX3VudXNlZCkgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvbGlibS9BbmRyb2lkLm1rIGIvbGlibS9BbmRyb2lkLm1rCmluZGV4IGNlOTgyMzYuLjk5NGNhYTAgMTAwNjQ0Ci0tLSBhL2xpYm0vQW5kcm9pZC5taworKysgYi9saWJtL0FuZHJvaWQubWsKQEAgLTEsMTMgKzEsMTUgQEAKK2lmbmVxICgkKFRBUkdFVF9VU0VfUFJJVkFURV9MSUJNKSx0cnVlKQogTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCiAKLSMgVE9ETzogdGhlc2UgY29tZSBmcm9tIGZyb20gdXBzdHJlYW0ncyBsaWJjLCBub3QgbGlibSEKKyMgVE9ETzogdGhpcyBjb21lcyBmcm9tIGZyb20gdXBzdHJlYW0ncyBsaWJjLCBub3QgbGlibSwgYnV0IGl0J3MgYW4KKyMgaW1wbGVtZW50YXRpb24gZGV0YWlsIHRoYXQgc2hvdWxkIGhhdmUgaGlkZGVuIHZpc2liaWxpdHksIHNvIGl0IG5lZWRzCisjIHRvIGJlIGluIHdoYXRldmVyIGxpYnJhcnkgdGhlIG1hdGggY29kZSBpcyBpbi4KIGxpYm1fY29tbW9uX3NyY19maWxlcyA6PSBcCiAgICAgZGlnaXR0b2ludC5jICBcCi0gICAgZnBjbGFzc2lmeS5jIFwKLSAgICBpc2luZi5jICBcCiAKICMgVE9ETzogdGhpcyBpcyBub3QgaW4gdGhlIEJTRHMuCiBsaWJtX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAorICAgIHNpZ25pZmljYW5kbC5jIFwKICAgICBzaW5jb3MuYyBcCiAKIGxpYm1fY29tbW9uX3NyY19maWxlcyArPSBcCkBAIC02NCw2ICs2Niw3IEBACiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zaW5oZi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NxcnQuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zcXJ0Zi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9pbXByZWNpc2UuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19jb3MuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19jb3NmLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfZXhwLmMgXApAQCAtMTI4LDkgKzEzMSw2IEBACiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mcmV4cGYuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pbG9nYi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lsb2diZi5jIFwKLSAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzZmluaXRlLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaXNuYW4uYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc25vcm1hbC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscmludC5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscmludGYuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJvdW5kLmMgXApAQCAtMTQ5LDcgKzE0OSw2IEBACiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZWFyYnlpbnQuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0YWZ0ZXIuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0YWZ0ZXJmLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmV4dHRvd2FyZGYuYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW8uYyBcCiAgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW9mLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludC5jIFwKQEAgLTE1OSw3ICsxNTgsNiBAQAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2NhbGJsbi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NjYWxibi5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NjYWxibmYuYyBcCi0gICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaWduYml0LmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lnbmdhbS5jIFwKICAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25pZmljYW5kLmMgXAogICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lnbmlmaWNhbmRmLmMgXApAQCAtMTc5LDQyICsxNzcsNTcgQEAKIAogbGlibV9jb21tb25fc3JjX2ZpbGVzICs9IFwKICAgICBmYWtlX2xvbmdfZG91YmxlLmMgXAotICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbW9kZmwuYyBcCisgICAgc2lnbmJpdC5jIFwKIAotIyBUT0RPOiBvbiBBbmRyb2lkLCAibG9uZyBkb3VibGUiIGlzICJkb3VibGUiLgotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3NsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2FzaW5sLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW4ybC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9mbW9kbC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9oeXBvdGwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcmVtYWluZGVybC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zcXJ0bC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19hdGFubC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYnJ0bC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jZWlsbC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb3B5c2lnbmwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29zbC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mYWJzbC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbG9vcmwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hbC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWF4bC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWlubC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mcmV4cGwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaWxvZ2JsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscmludGwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbGxyb3VuZGwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nYmwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbHJpbnRsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyb3VuZGwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmV4dGFmdGVybC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0dG93YXJkLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JlbXF1b2wuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludGwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfcm91bmRsLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NjYWxibmwuYyBcCi0jICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lubC5jIFwKLSMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5sLmMgXAotIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RydW5jbC5jIFwKK2xpYm1fbGRfc3JjX2ZpbGVzID0gXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2wuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zaGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hc2lubC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW4ybC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW5obC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Ztb2RsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfaHlwb3RsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcmVtYWluZGVybC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NxcnRsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXNpbmhsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXRhbmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYnJ0bC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NlaWxsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29weXNpZ25sLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29zbC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZhYnNsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmxvb3JsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hbC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYXhsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1pbmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19tb2RmbC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZyZXhwbC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lsb2dibC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscmludGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJvdW5kbC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xvZ2JsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbHJpbnRsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbHJvdW5kbC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25leHRhZnRlcmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0dG93YXJkLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmV4dHRvd2FyZGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW9sLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yb3VuZGwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zY2FsYm5sLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lubC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RhbmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190cnVuY2wuYyBcCisKK2xpYm1fbGRfc3JjX2ZpbGVzICs9IFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2ludnRyaWcuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX2Nvc2wuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX3NpbmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX3RhbmwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cDJsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19leHBsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19sb2dsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19uYW5sLmMgXAogCiAjIFRPRE86IHJlLWVuYWJsZSBpMzg3L2Vfc3FydGYuUyBmb3IgeDg2LCBhbmQgbWF5YmUgb3RoZXJzLgogCkBAIC0yMjIsMjQgKzIzNSwyMSBAQAogICAgIC1ERkxUX0VWQUxfTUVUSE9EPTAgXAogICAgIC1zdGQ9Yzk5IFwKICAgICAtaW5jbHVkZSAkKExPQ0FMX1BBVEgpL2ZyZWVic2QtY29tcGF0LmggXAorICAgIC1Xbm8tbWlzc2luZy1icmFjZXMgXAorICAgIC1Xbm8tcGFyZW50aGVzZXMgXAorICAgIC1Xbm8tc2lnbi1jb21wYXJlIFwKKyAgICAtV25vLXVuaW5pdGlhbGl6ZWQgXAorICAgIC1Xbm8tdW5rbm93bi1wcmFnbWFzIFwKKyAgICAtZnZpc2liaWxpdHk9aGlkZGVuIFwKKworIyBXb3JrYXJvdW5kIHRoZSBHQ0MgIihsb25nKWZuIC0+IGxmbiIgb3B0aW1pemF0aW9uIGJ1ZyB3aGljaCB3aWxsIHJlc3VsdCBpbgorIyBzZWxmIHJlY3Vyc2lvbnMgZm9yIGxyaW50LCBscmludGYsIGFuZCBscmludGwuCisjIEJVRzogMTQyMjU5NjgKK2xpYm1fY29tbW9uX2NmbGFncyArPSAtZm5vLWJ1aWx0aW4tcmludCAtZm5vLWJ1aWx0aW4tcmludGYgLWZuby1idWlsdGluLXJpbnRsCiAKIGxpYm1fY29tbW9uX2luY2x1ZGVzIDo9ICQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvCiAKLWxpYm1fYXJtX2luY2x1ZGVzIDo9ICQoTE9DQUxfUEFUSCkvYXJtCi1saWJtX2FybV9zcmNfZmlsZXMgOj0gYXJtL2ZlbnYuYwotCi1saWJtX2FybTY0X2luY2x1ZGVzIDo9ICQoTE9DQUxfUEFUSCkvYXJtNjQKLWxpYm1fYXJtNjRfc3JjX2ZpbGVzIDo9IGFybTY0L2ZlbnYuYwotCi1saWJtX3g4Nl9pbmNsdWRlcyA6PSAkKExPQ0FMX1BBVEgpL2kzODYgJChMT0NBTF9QQVRIKS9pMzg3Ci1saWJtX3g4Nl9zcmNfZmlsZXMgOj0gaTM4Ny9mZW52LmMKLQotbGlibV94ODZfNjRfaW5jbHVkZXMgOj0gJChMT0NBTF9QQVRIKS9hbWQ2NAotbGlibV94ODZfNjRfc3JjX2ZpbGVzIDo9IGFtZDY0L2ZlbnYuYwotCi1saWJtX21pcHNfY2ZsYWdzIDo9IC1mbm8tYnVpbHRpbi1yaW50ZiAtZm5vLWJ1aWx0aW4tcmludAotbGlibV9taXBzX2luY2x1ZGVzIDo9ICQoTE9DQUxfUEFUSCkvbWlwcwotbGlibV9taXBzX3NyY19maWxlcyA6PSBtaXBzL2ZlbnYuYworbGlibV9sZF9pbmNsdWRlcyA6PSAkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvCiAKICMKICMgbGlibS5hIGZvciB0YXJnZXQuCkBAIC0yNDgsMTAgKzI1OCwyOSBAQAogTE9DQUxfTU9EVUxFOj0gbGlibQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCiBMT0NBTF9BUk1fTU9ERSA6PSBhcm0KLUxPQ0FMX0NGTEFHUyA6PSAkKGxpYm1fY29tbW9uX2NmbGFncykgJChsaWJtXyQoVEFSR0VUX0FSQ0gpX2NmbGFncykKLUxPQ0FMX0NfSU5DTFVERVMgKz0gJChsaWJtX2NvbW1vbl9pbmNsdWRlcykgJChsaWJtXyQoVEFSR0VUX0FSQ0gpX2luY2x1ZGVzKQotTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGlibV9jb21tb25fc3JjX2ZpbGVzKSAkKGxpYm1fJChUQVJHRVRfQVJDSClfc3JjX2ZpbGVzKQorTE9DQUxfQ0ZMQUdTIDo9ICQobGlibV9jb21tb25fY2ZsYWdzKQorTE9DQUxfQ19JTkNMVURFUyArPSAkKGxpYm1fY29tbW9uX2luY2x1ZGVzKQorTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGlibV9jb21tb25fc3JjX2ZpbGVzKQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliYworCisjIGFyY2gtc3BlY2lmaWMgc2V0dGluZ3MKK0xPQ0FMX0NfSU5DTFVERVNfYXJtIDo9ICQoTE9DQUxfUEFUSCkvYXJtCitMT0NBTF9TUkNfRklMRVNfYXJtIDo9IGFybS9mZW52LmMKKworTE9DQUxfQ19JTkNMVURFU19hcm02NCA6PSAkKGxpYm1fbGRfaW5jbHVkZXMpCitMT0NBTF9TUkNfRklMRVNfYXJtNjQgOj0gYXJtNjQvZmVudi5jICQobGlibV9sZF9zcmNfZmlsZXMpCisKK0xPQ0FMX0NfSU5DTFVERVNfeDg2IDo9ICQoTE9DQUxfUEFUSCkvaTM4NworTE9DQUxfU1JDX0ZJTEVTX3g4NiA6PSBpMzg3L2ZlbnYuYworCitMT0NBTF9DX0lOQ0xVREVTX3g4Nl82NCA6PSAkKGxpYm1fbGRfaW5jbHVkZXMpCitMT0NBTF9TUkNfRklMRVNfeDg2XzY0IDo9IGFtZDY0L2ZlbnYuYyAkKGxpYm1fbGRfc3JjX2ZpbGVzKQorCitMT0NBTF9TUkNfRklMRVNfbWlwcyA6PSBtaXBzL2ZlbnYuYworCitMT0NBTF9DX0lOQ0xVREVTX21pcHM2NCA6PSAkKGxpYm1fbGRfaW5jbHVkZXMpCitMT0NBTF9TUkNfRklMRVNfbWlwczY0IDo9IG1pcHMvZmVudi5jICQobGlibV9sZF9zcmNfZmlsZXMpCisKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIAogIwpAQCAtMjYyLDQgKzI5MSwxMiBAQAogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjCiBMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYm0KKworIyBXZSdkIHJlYWxseSBsaWtlIHRvIGRvIHRoaXMgZm9yIGFsbCBhcmNoaXRlY3R1cmVzLCBidXQgc2luY2UgdGhpcyB3YXNuJ3QgZG9uZQorIyBiZWZvcmUsIHRoZXNlIHN5bWJvbHMgbXVzdCBjb250aW51ZSB0byBiZSBleHBvcnRlZCBvbiBMUDMyIGZvciBiaW5hcnkKKyMgY29tcGF0aWJpbGl0eS4KK0xPQ0FMX0xERkxBR1NfYXJtNjQgOj0gLVdsLC0tZXhjbHVkZS1saWJzLGxpYmdjYy5hCitMT0NBTF9MREZMQUdTX21pcHM2NCA6PSAtV2wsLS1leGNsdWRlLWxpYnMsbGliZ2NjLmEKK0xPQ0FMX0xERkxBR1NfeDg2XzY0IDo9IC1XbCwtLWV4Y2x1ZGUtbGlicyxsaWJnY2MuYQogaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQorZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vTk9USUNFIGIvbGlibS9OT1RJQ0UKaW5kZXggNzA5NTYzYy4uNWJlNjBkYiAxMDA2NDQKLS0tIGEvbGlibS9OT1RJQ0UKKysrIGIvbGlibS9OT1RJQ0UKQEAgLTQ2LDYgKzQ2LDMxIEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitDb3B5cmlnaHQgKGMpIDIwMDggU3RldmVuIEcuIEthcmdsLCBEYXZpZCBTY2h1bHR6LCBCcnVjZSBELiBFdmFucy4KKworRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKK3NvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCitpcyBwcmVzZXJ2ZWQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0NvcHlyaWdodCAoYykgMjAwOCBTdGV2ZW4gRy4gS2FyZ2wsIERhdmlkIFNjaHVsdHosIEJydWNlIEQuIEV2YW5zLgorCitEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKK2lzIHByZXNlcnZlZC4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT3B0aW1pemVkIGJ5IEJydWNlIEQuIEV2YW5zLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMSwgQnJ1Y2UgRC4gRXZhbnMsIFN0ZXZlbiBHLiBLYXJnbCwgRGF2aWQgU2NodWx0ei4KIAogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgpAQCAtNzgsNiArMTAzLDE2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0IDIwMDQgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvcHlyaWdodCAoYykgMjAwOCBTdGV2ZW4gRy4gS2FyZ2wsIERhdmlkIFNjaHVsdHosIEJydWNlIEQuIEV2YW5zLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQoraXMgcHJlc2VydmVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC0xMjAsNiArMTU1LDMyIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5OTMKICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC0yNzcsMzIgKzMzOCw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1hcmUgbWV0OgotMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi1BUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1PUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi1MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi1TVUNIIERBTUFHRS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBDb3B5cmlnaHQgKGMpIDIwMDMgRGFnLUVybGluZyBTbcO4cmdyYXYKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTM4NCwzMyArNDE5LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKGMpIDIwMDMgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KLUNvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLUZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi1IT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotU1VDSCBEQU1BR0UuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogQ29weXJpZ2h0IChjKSAyMDAzLCBTdGV2ZW4gRy4gS2FyZ2wKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTgxMCw2ICs4MTgsMzIgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb3B5cmlnaHQgKGMpIDIwMDctMjAxMyBCcnVjZSBELiBFdmFucworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKK1RISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogQ29weXJpZ2h0IChjKSAyMDA4IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTgzNiw2ICs4NzAsNjAgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBTdGV2ZW4gRy4gS2FyZ2wKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAgIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKK05PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitPcHRpbWl6ZWQgYnkgQnJ1Y2UgRC4gRXZhbnMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKK2BgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKK0JFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIENvcHlyaWdodCAoYykgMjAxMSBEYXZpZCBTY2h1bHR6CiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCkBAIC04ODgsNiArOTc2LDMyIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorQ29weXJpZ2h0IChjKSAyMDEzIERhdmlkIENoaXNuYWxsCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogRnJvbTogQCgjKXNfaWxvZ2IuYyA1LjEgOTMvMDkvMjQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS9saWJtL2FtZDY0L19mcG1hdGguaCBiL2xpYm0vYW1kNjQvX2ZwbWF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjMmE3Mzg0Li4wMDAwMDAwCi0tLSBhL2xpYm0vYW1kNjQvX2ZwbWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRCQKLSAqLwotCi11bmlvbiBJRUVFbDJiaXRzIHsKLQlsb25nIGRvdWJsZQllOwotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludAltYW5sCTozMjsKLQkJdW5zaWduZWQgaW50CW1hbmgJOjMyOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxNTsKLQkJdW5zaWduZWQgaW50CXNpZ24JOjE7Ci0JCXVuc2lnbmVkIGludAlqdW5rbAk6MTY7Ci0JCXVuc2lnbmVkIGludAlqdW5raAk6MzI7Ci0JfSBiaXRzOwotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGxvbmcJbWFuCTo2NDsKLQkJdW5zaWduZWQgaW50CWV4cHNpZ24JOjE2OwotCQl1bnNpZ25lZCBsb25nCWp1bmsJOjQ4OwotCX0geGJpdHM7Ci19OwotCi0jZGVmaW5lCUxEQkxfTkJJVAkweDgwMDAwMDAwCi0jZGVmaW5lCW1hc2tfbmJpdF9sKHUpCSgodSkuYml0cy5tYW5oICY9IH5MREJMX05CSVQpCi0KLSNkZWZpbmUJTERCTF9NQU5IX1NJWkUJMzIKLSNkZWZpbmUJTERCTF9NQU5MX1NJWkUJMzIKLQotI2RlZmluZQlMREJMX1RPX0FSUkFZMzIodSwgYSkgZG8gewkJCVwKLQkoYSlbMF0gPSAodWludDMyX3QpKHUpLmJpdHMubWFubDsJCVwKLQkoYSlbMV0gPSAodWludDMyX3QpKHUpLmJpdHMubWFuaDsJCVwKLX0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9saWJtL2FtZDY0L2ZlbnYuYyBiL2xpYm0vYW1kNjQvZmVudi5jCmluZGV4IDdhZDNiZTcuLjRiMjRmZjkgMTAwNzU1Ci0tLSBhL2xpYm0vYW1kNjQvZmVudi5jCisrKyBiL2xpYm0vYW1kNjQvZmVudi5jCkBAIC0xLDUgKzEsNSBAQAotLyoJJE9wZW5CU0Q6IGZlbnYuYyx2IDEuMyAyMDEyLzEyLzA1IDIzOjIwOjAyIGRlcmFhZHQgRXhwICQJKi8KLS8qCSROZXRCU0Q6IGZlbnYuYyx2IDEuMSAyMDEwLzA3LzMxIDIxOjQ3OjUzIGpvZXJnIEV4cCAkCSovCisvKiAgJE9wZW5CU0Q6IGZlbnYuYyx2IDEuMyAyMDEyLzEyLzA1IDIzOjIwOjAyIGRlcmFhZHQgRXhwICQgICovCisvKiAgJE5ldEJTRDogZmVudi5jLHYgMS4xIDIwMTAvMDcvMzEgMjE6NDc6NTMgam9lcmcgRXhwICQgKi8KIAogLyotCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXMgKGF0KSBGcmVlQlNELk9SRz4KQEAgLTMwLDYgKzMwLDE1IEBACiAjaW5jbHVkZSA8ZmVudi5oPgogI2luY2x1ZGUgPG1hY2hpbmUvZnB1Lmg+CiAKKyNkZWZpbmUgU1NFX01BU0tfU0hJRlQgNworCisvKgorICogVGhlIGZvbGxvd2luZyBzeW1ib2wgaXMgc2ltcGx5IHRoZSBiaXR3aXNlLWluY2x1c2l2ZSBPUiBvZiBhbGwgZmxvYXRpbmctcG9pbnQKKyAqIHJvdW5kaW5nIGRpcmVjdGlvbiBjb25zdGFudHMgZGVmaW5lZCBhYm92ZS4KKyAqLworI2RlZmluZSBYODdfUk9VTkRfTUFTSyAgKEZFX1RPTkVBUkVTVCB8IEZFX0RPV05XQVJEIHwgRkVfVVBXQVJEIHwgRkVfVE9XQVJEWkVSTykKKyNkZWZpbmUgU1NFX1JPVU5EX1NISUZUIDMKKwogLyoKICAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgcmVwcmVzZW50cyB0aGUgZGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudAogICogKHRoYXQgaXMsIHRoZSBvbmUgaW5zdGFsbGVkIGF0IHByb2dyYW0gc3RhcnR1cCkgYW5kIGhhcyB0eXBlIHBvaW50ZXIgdG8KQEAgLTQyLDE5ICs1MSwxOSBAQAogICogeDg3IGZwdSByZWdpc3RlcnMgYXJlIDE2Yml0IHdpZGUuIFRoZSB1cHBlciBiaXRzLCAzMS0xNiwgYXJlIG1hcmtlZCBhcwogICogUkVTRVJWRUQuCiAgKi8KLWZlbnZfdCBfX2ZlX2RmbF9lbnYgPSB7Ci0JewotCQkweGZmZmYwMDAwIHwgX19JTklUSUFMX05QWENXX18sCS8qIENvbnRyb2wgd29yZCByZWdpc3RlciAqLwotCQkweGZmZmYwMDAwLAkJCS8qIFN0YXR1cyB3b3JkIHJlZ2lzdGVyICovCi0JCTB4ZmZmZmZmZmYsCQkJLyogVGFnIHdvcmQgcmVnaXN0ZXIgKi8KLQkJewotCQkJMHgwMDAwMDAwMCwKLQkJCTB4MDAwMDAwMDAsCi0JCQkweDAwMDAwMDAwLAotCQkJMHhmZmZmMDAwMAotCQl9Ci0JfSwKLQlfX0lOSVRJQUxfTVhDU1JfXwkJCS8qIE1YQ1NSIHJlZ2lzdGVyICovCitjb25zdCBmZW52X3QgX19mZV9kZmxfZW52ID0geworICB7CisgICAgMHhmZmZmMDAwMCB8IF9fSU5JVElBTF9OUFhDV19fLCAvKiBDb250cm9sIHdvcmQgcmVnaXN0ZXIgKi8KKyAgICAweGZmZmYwMDAwLCAgICAgICAgICAgICAgICAgICAgIC8qIFN0YXR1cyB3b3JkIHJlZ2lzdGVyICovCisgICAgMHhmZmZmZmZmZiwgICAgICAgICAgICAgICAgICAgICAvKiBUYWcgd29yZCByZWdpc3RlciAqLworICAgIHsKKyAgICAgIDB4MDAwMDAwMDAsCisgICAgICAweDAwMDAwMDAwLAorICAgICAgMHgwMDAwMDAwMCwKKyAgICAgIDB4ZmZmZjAwMDAKKyAgICB9CisgIH0sCisgIF9fSU5JVElBTF9NWENTUl9fICAgICAgICAgICAgICAgICAvKiBNWENTUiByZWdpc3RlciAqLwogfTsKIAogCkBAIC02NSwyNiArNzQsMjYgQEAKIGludAogZmVjbGVhcmV4Y2VwdChpbnQgZXhjZXB0cykKIHsKLQlmZW52X3QgZmVudjsKLQl1bnNpZ25lZCBpbnQgbXhjc3I7CisgIGZlbnZfdCBmZW52OworICB1bnNpZ25lZCBpbnQgbXhjc3I7CiAKLQlleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CisgIGV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKIAotCS8qIFN0b3JlIHRoZSBjdXJyZW50IHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGVudiAlMCIgOiAiPW0iIChmZW52KSk7CisgIC8qIFN0b3JlIHRoZSBjdXJyZW50IHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RlbnYgJTAiIDogIj1tIiAoZmVudikpOwogCi0JLyogQ2xlYXIgdGhlIHJlcXVlc3RlZCBmbG9hdGluZy1wb2ludCBleGNlcHRpb25zICovCi0JZmVudi5fX3g4Ny5fX3N0YXR1cyAmPSB+ZXhjZXB0czsKKyAgLyogQ2xlYXIgdGhlIHJlcXVlc3RlZCBmbG9hdGluZy1wb2ludCBleGNlcHRpb25zICovCisgIGZlbnYuX194ODcuX19zdGF0dXMgJj0gfmV4Y2VwdHM7CiAKLQkvKiBMb2FkIHRoZSB4ODcgZmxvYXRpbmctcG9pbnQgZW52aXJvbmVudCAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkZW52ICUwIiA6IDogIm0iIChmZW52KSk7CisgIC8qIExvYWQgdGhlIHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9uZW50ICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkZW52ICUwIiA6IDogIm0iIChmZW52KSk7CiAKLQkvKiBTYW1lIGZvciBTU0UgZW52aXJvbm1lbnQgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKLQlteGNzciAmPSB+ZXhjZXB0czsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbXhjc3IgJTAiIDogOiAibSIgKG14Y3NyKSk7CisgIC8qIFNhbWUgZm9yIFNTRSBlbnZpcm9ubWVudCAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKKyAgbXhjc3IgJj0gfmV4Y2VwdHM7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgibGRteGNzciAlMCIgOiA6ICJtIiAobXhjc3IpKTsKIAotCXJldHVybiAoMCk7CisgIHJldHVybiAoMCk7CiB9CiAKIC8qCkBAIC05NSwyMSArMTA0LDIxIEBACiBpbnQKIGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKmZsYWdwLCBpbnQgZXhjZXB0cykKIHsKLQl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7Ci0JdW5zaWduZWQgaW50IG14Y3NyOworICB1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CisgIHVuc2lnbmVkIGludCBteGNzcjsKIAotCWV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOwogCi0JLyogU3RvcmUgdGhlIGN1cnJlbnQgeDg3IHN0YXR1cyByZWdpc3RlciAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdHN3ICUwIiA6ICI9YW0iIChzdGF0dXMpKTsKKyAgLyogU3RvcmUgdGhlIGN1cnJlbnQgeDg3IHN0YXR1cyByZWdpc3RlciAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RzdyAlMCIgOiAiPWFtIiAoc3RhdHVzKSk7CiAKLQkvKiBTdG9yZSB0aGUgTVhDU1IgcmVnaXN0ZXIgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKKyAgLyogU3RvcmUgdGhlIE1YQ1NSIHJlZ2lzdGVyICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChteGNzcikpOwogCi0JLyogU3RvcmUgdGhlIHJlc3VsdHMgaW4gZmxhZ3AgKi8KLQkqZmxhZ3AgPSAoc3RhdHVzIHwgbXhjc3IpICYgZXhjZXB0czsKKyAgLyogU3RvcmUgdGhlIHJlc3VsdHMgaW4gZmxhZ3AgKi8KKyAgKmZsYWdwID0gKHN0YXR1cyB8IG14Y3NyKSAmIGV4Y2VwdHM7CiAKLQlyZXR1cm4gKDApOworICByZXR1cm4gKDApOwogfQogCiAvKgpAQCAtMTI1LDEyICsxMzQsMTIgQEAKIGludAogZmVyYWlzZWV4Y2VwdChpbnQgZXhjZXB0cykKIHsKLQlleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CisgIGV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKIAotCWZlc2V0ZXhjZXB0ZmxhZygoZmV4Y2VwdF90ICopJmV4Y2VwdHMsIGV4Y2VwdHMpOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZndhaXQiKTsKKyAgZmVzZXRleGNlcHRmbGFnKChmZXhjZXB0X3QgKikmZXhjZXB0cywgZXhjZXB0cyk7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZndhaXQiKTsKIAotCXJldHVybiAoMCk7CisgIHJldHVybiAoMCk7CiB9CiAKIC8qCkBAIC0xNDEsMjggKzE1MCwyOCBAQAogaW50CiBmZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90ICpmbGFncCwgaW50IGV4Y2VwdHMpCiB7Ci0JZmVudl90IGZlbnY7Ci0JdW5zaWduZWQgaW50IG14Y3NyOworICBmZW52X3QgZmVudjsKKyAgdW5zaWduZWQgaW50IG14Y3NyOwogCi0JZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOworICBleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CiAKLQkvKiBTdG9yZSB0aGUgY3VycmVudCB4ODcgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RlbnYgJTAiIDogIj1tIiAoZmVudikpOworICAvKiBTdG9yZSB0aGUgY3VycmVudCB4ODcgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0ZW52ICUwIiA6ICI9bSIgKGZlbnYpKTsKIAotCS8qIFNldCB0aGUgcmVxdWVzdGVkIHN0YXR1cyBmbGFncyAqLwotCWZlbnYuX194ODcuX19zdGF0dXMgJj0gfmV4Y2VwdHM7Ci0JZmVudi5fX3g4Ny5fX3N0YXR1cyB8PSAqZmxhZ3AgJiBleGNlcHRzOworICAvKiBTZXQgdGhlIHJlcXVlc3RlZCBzdGF0dXMgZmxhZ3MgKi8KKyAgZmVudi5fX3g4Ny5fX3N0YXR1cyAmPSB+ZXhjZXB0czsKKyAgZmVudi5fX3g4Ny5fX3N0YXR1cyB8PSAqZmxhZ3AgJiBleGNlcHRzOwogCi0JLyogTG9hZCB0aGUgeDg3IGZsb2F0aW5nLXBvaW50IGVudmlyb25lbnQgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGVudiAlMCIgOiA6ICJtIiAoZmVudikpOworICAvKiBMb2FkIHRoZSB4ODcgZmxvYXRpbmctcG9pbnQgZW52aXJvbmVudCAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGVudiAlMCIgOiA6ICJtIiAoZmVudikpOwogCi0JLyogU2FtZSBmb3IgU1NFIGVudmlyb25tZW50ICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG14Y3NyICUwIiA6ICI9bSIgKG14Y3NyKSk7Ci0JbXhjc3IgJj0gfmV4Y2VwdHM7Ci0JbXhjc3IgfD0gKmZsYWdwICYgZXhjZXB0czsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbXhjc3IgJTAiIDogOiAibSIgKG14Y3NyKSk7CisgIC8qIFNhbWUgZm9yIFNTRSBlbnZpcm9ubWVudCAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKKyAgbXhjc3IgJj0gfmV4Y2VwdHM7CisgIG14Y3NyIHw9ICpmbGFncCAmIGV4Y2VwdHM7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgibGRteGNzciAlMCIgOiA6ICJtIiAobXhjc3IpKTsKIAotCXJldHVybiAoMCk7CisgIHJldHVybiAoMCk7CiB9CiAKIC8qCkBAIC0xNzMsMTggKzE4MiwxOCBAQAogaW50CiBmZXRlc3RleGNlcHQoaW50IGV4Y2VwdHMpCiB7Ci0JdW5zaWduZWQgc2hvcnQgc3RhdHVzOwotCXVuc2lnbmVkIGludCBteGNzcjsKKyAgdW5zaWduZWQgc2hvcnQgc3RhdHVzOworICB1bnNpZ25lZCBpbnQgbXhjc3I7CiAKLQlleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CisgIGV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKIAotCS8qIFN0b3JlIHRoZSBjdXJyZW50IHg4NyBzdGF0dXMgcmVnaXN0ZXIgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RzdyAlMCIgOiAiPWFtIiAoc3RhdHVzKSk7CisgIC8qIFN0b3JlIHRoZSBjdXJyZW50IHg4NyBzdGF0dXMgcmVnaXN0ZXIgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0c3cgJTAiIDogIj1hbSIgKHN0YXR1cykpOwogCi0JLyogU3RvcmUgdGhlIE1YQ1NSIHJlZ2lzdGVyIHN0YXRlICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG14Y3NyICUwIiA6ICI9bSIgKG14Y3NyKSk7CisgIC8qIFN0b3JlIHRoZSBNWENTUiByZWdpc3RlciBzdGF0ZSAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKIAotCXJldHVybiAoKHN0YXR1cyB8IG14Y3NyKSAmIGV4Y2VwdHMpOworICByZXR1cm4gKChzdGF0dXMgfCBteGNzcikgJiBleGNlcHRzKTsKIH0KIAogLyoKQEAgLTE5MywxNyArMjAyLDE3IEBACiBpbnQKIGZlZ2V0cm91bmQodm9pZCkKIHsKLQl1bnNpZ25lZCBzaG9ydCBjb250cm9sOworICB1bnNpZ25lZCBzaG9ydCBjb250cm9sOwogCi0JLyoKLQkgKiBXZSBhc3N1bWUgdGhhdCB0aGUgeDg3IGFuZCB0aGUgU1NFIHVuaXQgYWdyZWUgb24gdGhlCi0JICogcm91bmRpbmcgbW9kZS4gIFJlYWRpbmcgdGhlIGNvbnRyb2wgd29yZCBvbiB0aGUgeDg3IHR1cm5zCi0JICogb3V0IHRvIGJlIGFib3V0IDUgdGltZXMgZmFzdGVyIHRoYW4gcmVhZGluZyBpdCBvbiB0aGUgU1NFCi0JICogdW5pdCBvbiBhbiBPcHRlcm9uIDI0NC4KLQkgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iIChjb250cm9sKSk7CisgIC8qCisgICAqIFdlIGFzc3VtZSB0aGF0IHRoZSB4ODcgYW5kIHRoZSBTU0UgdW5pdCBhZ3JlZSBvbiB0aGUKKyAgICogcm91bmRpbmcgbW9kZS4gIFJlYWRpbmcgdGhlIGNvbnRyb2wgd29yZCBvbiB0aGUgeDg3IHR1cm5zCisgICAqIG91dCB0byBiZSBhYm91dCA1IHRpbWVzIGZhc3RlciB0aGFuIHJlYWRpbmcgaXQgb24gdGhlIFNTRQorICAgKiB1bml0IG9uIGFuIE9wdGVyb24gMjQ0LgorICAgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY29udHJvbCkpOwogCi0JcmV0dXJuIChjb250cm9sICYgX1g4N19ST1VORF9NQVNLKTsKKyAgcmV0dXJuIChjb250cm9sICYgWDg3X1JPVU5EX01BU0spOwogfQogCiAvKgpAQCAtMjE0LDMwICsyMjMsMzAgQEAKIGludAogZmVzZXRyb3VuZChpbnQgcm91bmQpCiB7Ci0JdW5zaWduZWQgc2hvcnQgY29udHJvbDsKLQl1bnNpZ25lZCBpbnQgbXhjc3I7CisgIHVuc2lnbmVkIHNob3J0IGNvbnRyb2w7CisgIHVuc2lnbmVkIGludCBteGNzcjsKIAotCS8qIENoZWNrIHdoZXRoZXIgcmVxdWVzdGVkIHJvdW5kaW5nIGRpcmVjdGlvbiBpcyBzdXBwb3J0ZWQgKi8KLQlpZiAocm91bmQgJiB+X1g4N19ST1VORF9NQVNLKQotCQlyZXR1cm4gKC0xKTsKKyAgLyogQ2hlY2sgd2hldGhlciByZXF1ZXN0ZWQgcm91bmRpbmcgZGlyZWN0aW9uIGlzIHN1cHBvcnRlZCAqLworICBpZiAocm91bmQgJiB+WDg3X1JPVU5EX01BU0spCisgICAgcmV0dXJuICgtMSk7CiAKLQkvKiBTdG9yZSB0aGUgY3VycmVudCB4ODcgY29udHJvbCB3b3JkIHJlZ2lzdGVyICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY29udHJvbCkpOworICAvKiBTdG9yZSB0aGUgY3VycmVudCB4ODcgY29udHJvbCB3b3JkIHJlZ2lzdGVyICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGN3ICUwIiA6ICI9bSIgKGNvbnRyb2wpKTsKIAotCS8qIFNldCB0aGUgcm91bmRpbmcgZGlyZWN0aW9uICovCi0JY29udHJvbCAmPSB+X1g4N19ST1VORF9NQVNLOwotCWNvbnRyb2wgfD0gcm91bmQ7CisgIC8qIFNldCB0aGUgcm91bmRpbmcgZGlyZWN0aW9uICovCisgIGNvbnRyb2wgJj0gflg4N19ST1VORF9NQVNLOworICBjb250cm9sIHw9IHJvdW5kOwogCi0JLyogTG9hZCB0aGUgeDg3IGNvbnRyb2wgd29yZCByZWdpc3RlciAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkY3cgJTAiIDogOiAibSIgKGNvbnRyb2wpKTsKKyAgLyogTG9hZCB0aGUgeDg3IGNvbnRyb2wgd29yZCByZWdpc3RlciAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGN3ICUwIiA6IDogIm0iIChjb250cm9sKSk7CiAKLQkvKiBTYW1lIGZvciB0aGUgU1NFIGVudmlyb25tZW50ICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG14Y3NyICUwIiA6ICI9bSIgKG14Y3NyKSk7Ci0JbXhjc3IgJj0gfihfWDg3X1JPVU5EX01BU0sgPDwgX1NTRV9ST1VORF9TSElGVCk7Ci0JbXhjc3IgfD0gcm91bmQgPDwgX1NTRV9ST1VORF9TSElGVDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbXhjc3IgJTAiIDogOiAibSIgKG14Y3NyKSk7CisgIC8qIFNhbWUgZm9yIHRoZSBTU0UgZW52aXJvbm1lbnQgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG14Y3NyICUwIiA6ICI9bSIgKG14Y3NyKSk7CisgIG14Y3NyICY9IH4oWDg3X1JPVU5EX01BU0sgPDwgU1NFX1JPVU5EX1NISUZUKTsKKyAgbXhjc3IgfD0gcm91bmQgPDwgU1NFX1JPVU5EX1NISUZUOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbXhjc3IgJTAiIDogOiAibSIgKG14Y3NyKSk7CiAKLQlyZXR1cm4gKDApOworICByZXR1cm4gKDApOwogfQogCiAvKgpAQCAtMjQ3LDIzICsyNTYsMjMgQEAKIGludAogZmVnZXRlbnYoZmVudl90ICplbnZwKQogewotCS8qIFN0b3JlIHRoZSBjdXJyZW50IHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGVudiAlMCIgOiAiPW0iICgqZW52cCkpOworICAvKiBTdG9yZSB0aGUgY3VycmVudCB4ODcgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0ZW52ICUwIiA6ICI9bSIgKCplbnZwKSk7CiAKLQkvKiBTdG9yZSB0aGUgTVhDU1IgcmVnaXN0ZXIgc3RhdGUgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAoZW52cC0+X19teGNzcikpOworICAvKiBTdG9yZSB0aGUgTVhDU1IgcmVnaXN0ZXIgc3RhdGUgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG14Y3NyICUwIiA6ICI9bSIgKGVudnAtPl9fbXhjc3IpKTsKIAotCS8qCi0JICogV2hlbiBhbiBGTlNURU5WIGluc3RydWN0aW9uIGlzIGV4ZWN1dGVkLCBhbGwgcGVuZGluZyBleGNlcHRpb25zIGFyZQotCSAqIGVzc2VudGlhbGx5IGxvc3QgKGVpdGhlciB0aGUgeDg3IEZQVSBzdGF0dXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCBvcgotCSAqIGFsbCBleGNlcHRpb25zIGFyZSBtYXNrZWQpLgotCSAqCi0JICogOC42IFg4NyBGUFUgRVhDRVBUSU9OIFNZTkNIUk9OSVpBVElPTiAtCi0JICogSW50ZWwoUikgNjQgYW5kIElBLTMyIEFyY2hpdGVjdHVyZXMgU29mdGFyZSBEZXZlbG9wZXIncyBNYW51YWwgLSBWb2wxCi0JICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRjdyAlMCIgOiA6ICJtIiAoZW52cC0+X194ODcuX19jb250cm9sKSk7CisgIC8qCisgICAqIFdoZW4gYW4gRk5TVEVOViBpbnN0cnVjdGlvbiBpcyBleGVjdXRlZCwgYWxsIHBlbmRpbmcgZXhjZXB0aW9ucyBhcmUKKyAgICogZXNzZW50aWFsbHkgbG9zdCAoZWl0aGVyIHRoZSB4ODcgRlBVIHN0YXR1cyByZWdpc3RlciBpcyBjbGVhcmVkIG9yCisgICAqIGFsbCBleGNlcHRpb25zIGFyZSBtYXNrZWQpLgorICAgKgorICAgKiA4LjYgWDg3IEZQVSBFWENFUFRJT04gU1lOQ0hST05JWkFUSU9OIC0KKyAgICogSW50ZWwoUikgNjQgYW5kIElBLTMyIEFyY2hpdGVjdHVyZXMgU29mdGFyZSBEZXZlbG9wZXIncyBNYW51YWwgLSBWb2wxCisgICAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGN3ICUwIiA6IDogIm0iIChlbnZwLT5fX3g4Ny5fX2NvbnRyb2wpKTsKIAotCXJldHVybiAoMCk7CisgIHJldHVybiAoMCk7CiB9CiAKIC8qCkBAIC0yNzUsMjggKzI4NCwyOCBAQAogaW50CiBmZWhvbGRleGNlcHQoZmVudl90ICplbnZwKQogewotCXVuc2lnbmVkIGludCBteGNzcjsKKyAgdW5zaWduZWQgaW50IG14Y3NyOwogCi0JLyogU3RvcmUgdGhlIGN1cnJlbnQgeDg3IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50ICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0ZW52ICUwIiA6ICI9bSIgKCplbnZwKSk7CisgIC8qIFN0b3JlIHRoZSBjdXJyZW50IHg4NyBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RlbnYgJTAiIDogIj1tIiAoKmVudnApKTsKIAotCS8qIENsZWFyIGFsbCBleGNlcHRpb24gZmxhZ3MgaW4gRlBVICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbmNsZXgiKTsKKyAgLyogQ2xlYXIgYWxsIGV4Y2VwdGlvbiBmbGFncyBpbiBGUFUgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbmNsZXgiKTsKIAotCS8qIFN0b3JlIHRoZSBNWENTUiByZWdpc3RlciBzdGF0ZSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChlbnZwLT5fX214Y3NyKSk7CisgIC8qIFN0b3JlIHRoZSBNWENTUiByZWdpc3RlciBzdGF0ZSAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAoZW52cC0+X19teGNzcikpOwogCi0JLyogQ2xlYXIgZXhjZXB0aW9uIGZsYWdzIGluIE1YQ1NSICovCi0JbXhjc3IgPSBlbnZwLT5fX214Y3NyOwotCW14Y3NyICY9IH5GRV9BTExfRVhDRVBUOworICAvKiBDbGVhciBleGNlcHRpb24gZmxhZ3MgaW4gTVhDU1IgKi8KKyAgbXhjc3IgPSBlbnZwLT5fX214Y3NyOworICBteGNzciAmPSB+RkVfQUxMX0VYQ0VQVDsKIAotCS8qIE1hc2sgYWxsIGV4Y2VwdGlvbnMgKi8KLQlteGNzciB8PSBGRV9BTExfRVhDRVBUIDw8IF9TU0VfTUFTS19TSElGVDsKKyAgLyogTWFzayBhbGwgZXhjZXB0aW9ucyAqLworICBteGNzciB8PSBGRV9BTExfRVhDRVBUIDw8IFNTRV9NQVNLX1NISUZUOwogCi0JLyogU3RvcmUgdGhlIE1YQ1NSIHJlZ2lzdGVyICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZG14Y3NyICUwIiA6IDogIm0iIChteGNzcikpOworICAvKiBTdG9yZSB0aGUgTVhDU1IgcmVnaXN0ZXIgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZG14Y3NyICUwIiA6IDogIm0iIChteGNzcikpOwogCi0JcmV0dXJuICgwKTsKKyAgcmV0dXJuICgwKTsKIH0KIAogLyoKQEAgLTMxMCwxMyArMzE5LDEzIEBACiBpbnQKIGZlc2V0ZW52KGNvbnN0IGZlbnZfdCAqZW52cCkKIHsKLQkvKiBMb2FkIHRoZSB4ODcgZmxvYXRpbmctcG9pbnQgZW52aXJvbmVudCAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkZW52ICUwIiA6IDogIm0iICgqZW52cCkpOworICAvKiBMb2FkIHRoZSB4ODcgZmxvYXRpbmctcG9pbnQgZW52aXJvbmVudCAqLworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGVudiAlMCIgOiA6ICJtIiAoKmVudnApKTsKIAotCS8qIFN0b3JlIHRoZSBNWENTUiByZWdpc3RlciAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgibGRteGNzciAlMCIgOiA6ICJtIiAoZW52cC0+X19teGNzcikpOworICAvKiBTdG9yZSB0aGUgTVhDU1IgcmVnaXN0ZXIgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZG14Y3NyICUwIiA6IDogIm0iIChlbnZwLT5fX214Y3NyKSk7CiAKLQlyZXR1cm4gKDApOworICByZXR1cm4gKDApOwogfQogCiAvKgpAQCAtMzMwLDIyICszMzksMjIgQEAKIGludAogZmV1cGRhdGVlbnYoY29uc3QgZmVudl90ICplbnZwKQogewotCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKLQl1bnNpZ25lZCBpbnQgbXhjc3I7CisgIHVuc2lnbmVkIHNob3J0IHN0YXR1czsKKyAgdW5zaWduZWQgaW50IG14Y3NyOwogCi0JLyogU3RvcmUgdGhlIHg4NyBzdGF0dXMgcmVnaXN0ZXIgKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RzdyAlMCIgOiAiPWFtIiAoc3RhdHVzKSk7CisgIC8qIFN0b3JlIHRoZSB4ODcgc3RhdHVzIHJlZ2lzdGVyICovCisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdHN3ICUwIiA6ICI9YW0iIChzdGF0dXMpKTsKIAotCS8qIFN0b3JlIHRoZSBNWENTUiByZWdpc3RlciAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RteGNzciAlMCIgOiAiPW0iIChteGNzcikpOworICAvKiBTdG9yZSB0aGUgTVhDU1IgcmVnaXN0ZXIgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG14Y3NyICUwIiA6ICI9bSIgKG14Y3NyKSk7CiAKLQkvKiBJbnN0YWxsIG5ldyBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotCWZlc2V0ZW52KGVudnApOworICAvKiBJbnN0YWxsIG5ldyBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLworICBmZXNldGVudihlbnZwKTsKIAotCS8qIFJhaXNlIGFueSBwcmV2aW91c2x5IGFjY3VtdWxhdGVkIGV4Y2VwdGlvbnMgKi8KLQlmZXJhaXNlZXhjZXB0KHN0YXR1cyB8IG14Y3NyKTsKKyAgLyogUmFpc2UgYW55IHByZXZpb3VzbHkgYWNjdW11bGF0ZWQgZXhjZXB0aW9ucyAqLworICBmZXJhaXNlZXhjZXB0KHN0YXR1cyB8IG14Y3NyKTsKIAotCXJldHVybiAoMCk7CisgIHJldHVybiAoMCk7CiB9CiAKIC8qCkBAIC0zNTQsNTUgKzM2Myw1NSBAQAogaW50CiBmZWVuYWJsZWV4Y2VwdChpbnQgbWFzaykKIHsKLQl1bnNpZ25lZCBpbnQgbXhjc3IsIG9tYXNrOwotCXVuc2lnbmVkIHNob3J0IGNvbnRyb2w7CisgIHVuc2lnbmVkIGludCBteGNzciwgb21hc2s7CisgIHVuc2lnbmVkIHNob3J0IGNvbnRyb2w7CiAKLQltYXNrICY9IEZFX0FMTF9FWENFUFQ7CisgIG1hc2sgJj0gRkVfQUxMX0VYQ0VQVDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGN3ICUwIiA6ICI9bSIgKGNvbnRyb2wpKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY29udHJvbCkpOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKIAotCW9tYXNrID0gfihjb250cm9sIHwgKG14Y3NyID4+IF9TU0VfTUFTS19TSElGVCkpICYgRkVfQUxMX0VYQ0VQVDsKLQljb250cm9sICY9IH5tYXNrOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkY3cgJTAiIDogOiAibSIgKGNvbnRyb2wpKTsKKyAgb21hc2sgPSB+KGNvbnRyb2wgfCAobXhjc3IgPj4gU1NFX01BU0tfU0hJRlQpKSAmIEZFX0FMTF9FWENFUFQ7CisgIGNvbnRyb2wgJj0gfm1hc2s7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkY3cgJTAiIDogOiAibSIgKGNvbnRyb2wpKTsKIAotCW14Y3NyICY9IH4obWFzayA8PCBfU1NFX01BU0tfU0hJRlQpOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgibGRteGNzciAlMCIgOiA6ICJtIiAobXhjc3IpKTsKKyAgbXhjc3IgJj0gfihtYXNrIDw8IFNTRV9NQVNLX1NISUZUKTsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZG14Y3NyICUwIiA6IDogIm0iIChteGNzcikpOwogCi0JcmV0dXJuIChvbWFzayk7CisgIHJldHVybiAob21hc2spOwogfQogCiBpbnQKIGZlZGlzYWJsZWV4Y2VwdChpbnQgbWFzaykKIHsKLQl1bnNpZ25lZCBpbnQgbXhjc3IsIG9tYXNrOwotCXVuc2lnbmVkIHNob3J0IGNvbnRyb2w7CisgIHVuc2lnbmVkIGludCBteGNzciwgb21hc2s7CisgIHVuc2lnbmVkIHNob3J0IGNvbnRyb2w7CiAKLQltYXNrICY9IEZFX0FMTF9FWENFUFQ7CisgIG1hc2sgJj0gRkVfQUxMX0VYQ0VQVDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGN3ICUwIiA6ICI9bSIgKGNvbnRyb2wpKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY29udHJvbCkpOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bXhjc3IgJTAiIDogIj1tIiAobXhjc3IpKTsKIAotCW9tYXNrID0gfihjb250cm9sIHwgKG14Y3NyID4+IF9TU0VfTUFTS19TSElGVCkpICYgRkVfQUxMX0VYQ0VQVDsKLQljb250cm9sIHw9IG1hc2s7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRjdyAlMCIgOiA6ICJtIiAoY29udHJvbCkpOworICBvbWFzayA9IH4oY29udHJvbCB8IChteGNzciA+PiBTU0VfTUFTS19TSElGVCkpICYgRkVfQUxMX0VYQ0VQVDsKKyAgY29udHJvbCB8PSBtYXNrOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGN3ICUwIiA6IDogIm0iIChjb250cm9sKSk7CiAKLQlteGNzciB8PSBtYXNrIDw8IF9TU0VfTUFTS19TSElGVDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbXhjc3IgJTAiIDogOiAibSIgKG14Y3NyKSk7CisgIG14Y3NyIHw9IG1hc2sgPDwgU1NFX01BU0tfU0hJRlQ7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICgibGRteGNzciAlMCIgOiA6ICJtIiAobXhjc3IpKTsKIAotCXJldHVybiAob21hc2spOworICByZXR1cm4gKG9tYXNrKTsKIH0KIAogaW50CiBmZWdldGV4Y2VwdCh2b2lkKQogewotCXVuc2lnbmVkIHNob3J0IGNvbnRyb2w7CisgIHVuc2lnbmVkIHNob3J0IGNvbnRyb2w7CiAKLQkvKgotCSAqIFdlIGFzc3VtZSB0aGF0IHRoZSBtYXNrcyBmb3IgdGhlIHg4NyBhbmQgdGhlIFNTRSB1bml0IGFyZQotCSAqIHRoZSBzYW1lLgotCSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgiZm5zdGN3ICUwIiA6ICI9bSIgKGNvbnRyb2wpKTsKKyAgLyoKKyAgICogV2UgYXNzdW1lIHRoYXQgdGhlIG1hc2tzIGZvciB0aGUgeDg3IGFuZCB0aGUgU1NFIHVuaXQgYXJlCisgICAqIHRoZSBzYW1lLgorICAgKi8KKyAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY29udHJvbCkpOwogCi0JcmV0dXJuICh+Y29udHJvbCAmIEZFX0FMTF9FWENFUFQpOworICByZXR1cm4gKH5jb250cm9sICYgRkVfQUxMX0VYQ0VQVCk7CiB9CmRpZmYgLS1naXQgYS9saWJtL2FybS9fZnBtYXRoLmggYi9saWJtL2FybS9fZnBtYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTg5NDUuLjAwMDAwMDAKLS0tIGEvbGlibS9hcm0vX2ZwbWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRCQKLSAqLwotCi0jaWYgZGVmaW5lZChfX1ZGUF9GUF9fKQotI2RlZmluZQlfSUVFRV9XT1JEX09SREVSCV9CWVRFX09SREVSCi0jZWxzZQotI2RlZmluZQlfSUVFRV9XT1JEX09SREVSCV9CSUdfRU5ESUFOCi0jZW5kaWYKLQotdW5pb24gSUVFRWwyYml0cyB7Ci0JbG9uZyBkb3VibGUJZTsKLQlzdHJ1Y3QgewotI2lmIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOCi0jaWYgX0lFRUVfV09SRF9PUkRFUiA9PSBfTElUVExFX0VORElBTgotCQl1bnNpZ25lZCBpbnQJbWFubAk6MzI7Ci0jZW5kaWYKLQkJdW5zaWduZWQgaW50CW1hbmgJOjIwOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxMTsKLQkJdW5zaWduZWQgaW50CXNpZ24JOjE7Ci0jaWYgX0lFRUVfV09SRF9PUkRFUiA9PSBfQklHX0VORElBTgotCQl1bnNpZ25lZCBpbnQJbWFubAk6MzI7Ci0jZW5kaWYKLSNlbHNlCS8qIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOICovCi0JCXVuc2lnbmVkIGludAkJc2lnbgk6MTsKLQkJdW5zaWduZWQgaW50CQlleHAJOjExOwotCQl1bnNpZ25lZCBpbnQJCW1hbmgJOjIwOwotCQl1bnNpZ25lZCBpbnQJCW1hbmwJOjMyOwotI2VuZGlmCi0JfSBiaXRzOwotfTsKLQotI2RlZmluZQlMREJMX05CSVQJMAotI2RlZmluZQlMREJMX0lNUExJQ0lUX05CSVQKLSNkZWZpbmUJbWFza19uYml0X2wodSkJKCh2b2lkKTApCi0KLSNkZWZpbmUJTERCTF9NQU5IX1NJWkUJMjAKLSNkZWZpbmUJTERCTF9NQU5MX1NJWkUJMzIKLQotI2RlZmluZQlMREJMX1RPX0FSUkFZMzIodSwgYSkgZG8gewkJCVwKLQkoYSlbMF0gPSAodWludDMyX3QpKHUpLmJpdHMubWFubDsJCVwKLQkoYSlbMV0gPSAodWludDMyX3QpKHUpLmJpdHMubWFuaDsJCVwKLX0gd2hpbGUoMCkKZGlmZiAtLWdpdCBhL2xpYm0vYXJtL2ZlbnYuYyBiL2xpYm0vYXJtL2ZlbnYuYwppbmRleCA0NjlmMTk4Li4yMTI0NzMwIDEwMDY0NAotLS0gYS9saWJtL2FybS9mZW52LmMKKysrIGIvbGlibS9hcm0vZmVudi5jCkBAIC0yOCw4ICsyOCwxMTIgQEAKIAogI2luY2x1ZGUgPGZlbnYuaD4KIAotLyoKLSAqIEhvcGVmdWxseSB0aGUgc3lzdGVtIElEIGJ5dGUgaXMgaW1tdXRhYmxlLCBzbyBpdCdzIHZhbGlkIHRvIHVzZQotICogdGhpcyBhcyBhIGRlZmF1bHQgZW52aXJvbm1lbnQuCi0gKi8KKyNkZWZpbmUgRlBTQ1JfRU5BQkxFX1NISUZUIDgKKyNkZWZpbmUgRlBTQ1JfRU5BQkxFX01BU0sgIChGRV9BTExfRVhDRVBUIDw8IEZQU0NSX0VOQUJMRV9TSElGVCkKKworI2RlZmluZSBGUFNDUl9STU9ERV9TSElGVCAyMgorCiBjb25zdCBmZW52X3QgX19mZV9kZmxfZW52ID0gMDsKKworaW50IGZlZ2V0ZW52KGZlbnZfdCogX19lbnZwKSB7CisgIGZlbnZfdCBfZnBzY3I7CisgIF9fYXNtX18gX192b2xhdGlsZV9fKCJ2bXJzICUwLGZwc2NyIiA6ICI9ciIgKF9mcHNjcikpOworICAqX19lbnZwID0gX2Zwc2NyOworICByZXR1cm4gMDsKK30KKworaW50IGZlc2V0ZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7CisgIGZlbnZfdCBfZnBzY3IgPSAqX19lbnZwOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygidm1zciBmcHNjciwlMCIgOiA6InJpIiAoX2Zwc2NyKSk7CisgIHJldHVybiAwOworfQorCitpbnQgZmVjbGVhcmV4Y2VwdChpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX2Zwc2NyOworICBmZWdldGVudigmX19mcHNjcik7CisgIF9fZnBzY3IgJj0gfl9fZXhjZXB0czsKKyAgZmVzZXRlbnYoJl9fZnBzY3IpOworICByZXR1cm4gMDsKK30KKworaW50IGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QqIF9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpIHsKKyAgZmV4Y2VwdF90IF9fZnBzY3I7CisgIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKKyAgKl9fZmxhZ3AgPSBfX2Zwc2NyICYgX19leGNlcHRzOworICByZXR1cm4gMDsKK30KKworaW50IGZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QqIF9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpIHsKKyAgZmV4Y2VwdF90IF9fZnBzY3I7CisgIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKKyAgX19mcHNjciAmPSB+X19leGNlcHRzOworICBfX2Zwc2NyIHw9ICpfX2ZsYWdwICYgX19leGNlcHRzOworICBmZXNldGVudigmX19mcHNjcik7CisgIHJldHVybiAwOworfQorCitpbnQgZmVyYWlzZWV4Y2VwdChpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX2V4ID0gX19leGNlcHRzOworICBmZXNldGV4Y2VwdGZsYWcoJl9fZXgsIF9fZXhjZXB0cyk7CisgIHJldHVybiAwOworfQorCitpbnQgZmV0ZXN0ZXhjZXB0KGludCBfX2V4Y2VwdHMpIHsKKyAgZmV4Y2VwdF90IF9fZnBzY3I7CisgIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKKyAgcmV0dXJuIChfX2Zwc2NyICYgX19leGNlcHRzKTsKK30KKworaW50IGZlZ2V0cm91bmQodm9pZCkgeworICBmZW52X3QgX2Zwc2NyOworICBmZWdldGVudigmX2Zwc2NyKTsKKyAgcmV0dXJuICgoX2Zwc2NyID4+IEZQU0NSX1JNT0RFX1NISUZUKSAmIDB4Myk7Cit9CisKK2ludCBmZXNldHJvdW5kKGludCBfX3JvdW5kKSB7CisgIGZlbnZfdCBfZnBzY3I7CisgIGZlZ2V0ZW52KCZfZnBzY3IpOworICBfZnBzY3IgJj0gfigweDMgPDwgRlBTQ1JfUk1PREVfU0hJRlQpOworICBfZnBzY3IgfD0gKF9fcm91bmQgPDwgRlBTQ1JfUk1PREVfU0hJRlQpOworICBmZXNldGVudigmX2Zwc2NyKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZWhvbGRleGNlcHQoZmVudl90KiBfX2VudnApIHsKKyAgZmVudl90IF9fZW52OworICBmZWdldGVudigmX19lbnYpOworICAqX19lbnZwID0gX19lbnY7CisgIF9fZW52ICY9IH4oRkVfQUxMX0VYQ0VQVCB8IEZQU0NSX0VOQUJMRV9NQVNLKTsKKyAgZmVzZXRlbnYoJl9fZW52KTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZXVwZGF0ZWVudihjb25zdCBmZW52X3QqIF9fZW52cCkgeworICBmZXhjZXB0X3QgX19mcHNjcjsKKyAgZmVnZXRlbnYoJl9fZnBzY3IpOworICBmZXNldGVudihfX2VudnApOworICBmZXJhaXNlZXhjZXB0KF9fZnBzY3IgJiBGRV9BTExfRVhDRVBUKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7CisgIGZlbnZfdCBfX29sZF9mcHNjciwgX19uZXdfZnBzY3I7CisgIGZlZ2V0ZW52KCZfX29sZF9mcHNjcik7CisgIF9fbmV3X2Zwc2NyID0gX19vbGRfZnBzY3IgfCAoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgRlBTQ1JfRU5BQkxFX1NISUZUOworICBmZXNldGVudigmX19uZXdfZnBzY3IpOworICByZXR1cm4gKChfX29sZF9mcHNjciA+PiBGUFNDUl9FTkFCTEVfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7Cit9CisKK2ludCBmZWRpc2FibGVleGNlcHQoaW50IF9fbWFzaykgeworICBmZW52X3QgX19vbGRfZnBzY3IsIF9fbmV3X2Zwc2NyOworICBmZWdldGVudigmX19vbGRfZnBzY3IpOworICBfX25ld19mcHNjciA9IF9fb2xkX2Zwc2NyICYgfigoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgRlBTQ1JfRU5BQkxFX1NISUZUKTsKKyAgZmVzZXRlbnYoJl9fbmV3X2Zwc2NyKTsKKyAgcmV0dXJuICgoX19vbGRfZnBzY3IgPj4gRlBTQ1JfRU5BQkxFX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOworfQorCitpbnQgZmVnZXRleGNlcHQodm9pZCkgeworICBmZW52X3QgX19mcHNjcjsKKyAgZmVnZXRlbnYoJl9fZnBzY3IpOworICByZXR1cm4gKChfX2Zwc2NyICYgRlBTQ1JfRU5BQkxFX01BU0spID4+IEZQU0NSX0VOQUJMRV9TSElGVCk7Cit9CmRpZmYgLS1naXQgYS9saWJtL2FybTY0L19mcG1hdGguaCBiL2xpYm0vYXJtNjQvX2ZwbWF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjQ2MzJhLi4wMDAwMDAwCi0tLSBhL2xpYm0vYXJtNjQvX2ZwbWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9saWJjL2FhcmNoNjQvX2ZwbWF0aC5oICQKLSAqLwotCi11bmlvbiBJRUVFbDJiaXRzIHsKLQlsb25nIGRvdWJsZQllOwotCXN0cnVjdCB7Ci0jaWZuZGVmIF9fQUFSQ0g2NEVCX18KLQkJdW5zaWduZWQgaW50CW1hbmwJOjMyOwotCQl1bnNpZ25lZCBpbnQJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAlleHAJOjExOwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLSNlbHNlCi0JCXVuc2lnbmVkIGludAkJc2lnbgk6MTsKLQkJdW5zaWduZWQgaW50CQlleHAJOjExOwotCQl1bnNpZ25lZCBpbnQJCW1hbmgJOjIwOwotCQl1bnNpZ25lZCBpbnQJCW1hbmwJOjMyOwotI2VuZGlmCi0JfSBiaXRzOwotfTsKLQotI2RlZmluZQlMREJMX05CSVQJMAotI2RlZmluZQlMREJMX0lNUExJQ0lUX05CSVQKLSNkZWZpbmUJbWFza19uYml0X2wodSkJKCh2b2lkKTApCi0KLSNkZWZpbmUJTERCTF9NQU5IX1NJWkUJMzIKLSNkZWZpbmUJTERCTF9NQU5MX1NJWkUJMzIKLQotI2RlZmluZQlMREJMX1RPX0FSUkFZMzIodSwgYSkgZG8gewkJCVwKLQkoYSlbMF0gPSAodWludDMyX3QpKHUpLmJpdHMubWFubDsJCVwKLQkoYSlbMV0gPSAodWludDMyX3QpKHUpLmJpdHMubWFuaDsJCVwKLX0gd2hpbGUoMCkKZGlmZiAtLWdpdCBhL2xpYm0vYXJtNjQvZmVudi5jIGIvbGlibS9hcm02NC9mZW52LmMKaW5kZXggMjdjNDA1Zi4uY2U1NjBhNyAxMDA2NDQKLS0tIGEvbGlibS9hcm02NC9mZW52LmMKKysrIGIvbGlibS9hcm02NC9mZW52LmMKQEAgLTI4LDggKzI4LDE2OCBAQAogCiAjaW5jbHVkZSA8ZmVudi5oPgogCi0vKgotICogSG9wZWZ1bGx5IHRoZSBzeXN0ZW0gSUQgYnl0ZSBpcyBpbW11dGFibGUsIHNvIGl0J3MgdmFsaWQgdG8gdXNlCi0gKiB0aGlzIGFzIGEgZGVmYXVsdCBlbnZpcm9ubWVudC4KLSAqLwotY29uc3QgZmVudl90IF9fZmVfZGZsX2VudiA9IDA7CisjZGVmaW5lIEZQQ1JfRVhDRVBUX1NISUZUIDgKKyNkZWZpbmUgRlBDUl9FWENFUFRfTUFTSyAgKEZFX0FMTF9FWENFUFQgPDwgRlBDUl9FWENFUFRfU0hJRlQpCisKKyNkZWZpbmUgRlBDUl9STU9ERV9TSElGVCAyMgorCitjb25zdCBmZW52X3QgX19mZV9kZmxfZW52ID0geyAwIC8qIGNvbnRyb2wgKi8sIDAgLyogc3RhdHVzICovfTsKKwordHlwZWRlZiBfX3VpbnQzMl90IGZwdV9jb250cm9sX3Q7ICAgLy8gRlBDUiwgRmxvYXRpbmctcG9pbnQgQ29udHJvbCBSZWdpc3Rlci4KK3R5cGVkZWYgX191aW50MzJfdCBmcHVfc3RhdHVzX3Q7ICAgIC8vIEZQU1IsIEZsb2F0aW5nLXBvaW50IFN0YXR1cyBSZWdpc3Rlci4KKworI2RlZmluZSBfX2dldF9mcGNyKF9fZnBjcikgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1ycyAlMCxmcGNyIiA6ICI9ciIgKF9fZnBjcikpCisjZGVmaW5lIF9fZ2V0X2Zwc3IoX19mcHNyKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJzICUwLGZwc3IiIDogIj1yIiAoX19mcHNyKSkKKyNkZWZpbmUgX19zZXRfZnBjcihfX2ZwY3IpIF9fYXNtX18gX192b2xhdGlsZV9fKCJtc3IgZnBjciwlMCIgOiA6InJpIiAoX19mcGNyKSkKKyNkZWZpbmUgX19zZXRfZnBzcihfX2Zwc3IpIF9fYXNtX18gX192b2xhdGlsZV9fKCJtc3IgZnBzciwlMCIgOiA6InJpIiAoX19mcHNyKSkKKworaW50IGZlZ2V0ZW52KGZlbnZfdCogZW52cCkgeworICBfX2dldF9mcGNyKGVudnAtPl9fY29udHJvbCk7CisgIF9fZ2V0X2Zwc3IoZW52cC0+X19zdGF0dXMpOworICByZXR1cm4gMDsKK30KKworaW50IGZlc2V0ZW52KGNvbnN0IGZlbnZfdCogZW52cCkgeworICBmcHVfY29udHJvbF90IGZwY3I7CisKKyAgX19nZXRfZnBjcihmcGNyKTsKKyAgaWYgKGVudnAtPl9fY29udHJvbCAhPSBmcGNyKSB7CisgICAgX19zZXRfZnBjcihlbnZwLT5fX2NvbnRyb2wpOworICB9CisgIF9fc2V0X2Zwc3IoZW52cC0+X19zdGF0dXMpOworICByZXR1cm4gMDsKK30KKworaW50IGZlY2xlYXJleGNlcHQoaW50IGV4Y2VwdHMpIHsKKyAgZnB1X3N0YXR1c190IGZwc3I7CisKKyAgZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOworICBfX2dldF9mcHNyKGZwc3IpOworICBmcHNyICY9IH5leGNlcHRzOworICBfX3NldF9mcHNyKGZwc3IpOworICByZXR1cm4gMDsKK30KKworaW50IGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QqIGZsYWdwLCBpbnQgZXhjZXB0cykgeworICBmcHVfc3RhdHVzX3QgZnBzcjsKKworICBleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CisgIF9fZ2V0X2Zwc3IoZnBzcik7CisgICpmbGFncCA9IGZwc3IgJiBleGNlcHRzOworICByZXR1cm4gMDsKK30KKworaW50IGZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QqIGZsYWdwLCBpbnQgZXhjZXB0cykgeworICBmcHVfc3RhdHVzX3QgZnBzcjsKKworICBleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CisgIF9fZ2V0X2Zwc3IoZnBzcik7CisgIGZwc3IgJj0gfmV4Y2VwdHM7CisgIGZwc3IgfD0gKmZsYWdwICYgZXhjZXB0czsKKyAgX19zZXRfZnBzcihmcHNyKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZXJhaXNlZXhjZXB0KGludCBleGNlcHRzKSB7CisgIGZleGNlcHRfdCBleCA9IGV4Y2VwdHM7CisKKyAgZmVzZXRleGNlcHRmbGFnKCZleCwgZXhjZXB0cyk7CisgIHJldHVybiAwOworfQorCitpbnQgZmV0ZXN0ZXhjZXB0KGludCBleGNlcHRzKSB7CisgIGZwdV9zdGF0dXNfdCBmcHNyOworCisgIGV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgX19nZXRfZnBzcihmcHNyKTsKKyAgcmV0dXJuIChmcHNyICYgZXhjZXB0cyk7Cit9CisKK2ludCBmZWdldHJvdW5kKHZvaWQpIHsKKyAgZnB1X2NvbnRyb2xfdCBmcGNyOworCisgIF9fZ2V0X2ZwY3IoZnBjcik7CisgIHJldHVybiAoKGZwY3IgPj4gRlBDUl9STU9ERV9TSElGVCkgJiBGRV9UT1dBUkRaRVJPKTsKK30KKworaW50IGZlc2V0cm91bmQoaW50IHJvdW5kKSB7CisgIGZwdV9jb250cm9sX3QgZnBjciwgbmV3X2ZwY3I7CisKKyAgcm91bmQgJj0gRkVfVE9XQVJEWkVSTzsKKyAgX19nZXRfZnBjcihmcGNyKTsKKyAgbmV3X2ZwY3IgPSBmcGNyICYgfihGRV9UT1dBUkRaRVJPIDw8IEZQQ1JfUk1PREVfU0hJRlQpOworICBuZXdfZnBjciB8PSAocm91bmQgPDwgRlBDUl9STU9ERV9TSElGVCk7CisgIGlmIChuZXdfZnBjciAhPSBmcGNyKSB7CisgICAgX19zZXRfZnBjcihuZXdfZnBjcik7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZWhvbGRleGNlcHQoZmVudl90KiBlbnZwKSB7CisgIGZlbnZfdCBlbnY7CisgIGZwdV9zdGF0dXNfdCBmcHNyOworICBmcHVfY29udHJvbF90IGZwY3IsIG5ld19mcGNyOworCisgIF9fZ2V0X2Zwc3IoZnBzcik7CisgIF9fZ2V0X2ZwY3IoZnBjcik7CisgIGVudi5fX3N0YXR1cyA9IGZwc3I7CisgIGVudi5fX2NvbnRyb2wgPSBmcGNyOworICAqZW52cCA9IGVudjsKKworICAvLyBTZXQgZXhjZXB0aW9ucyB0byB1bnRyYXBwZWQuCisgIG5ld19mcGNyID0gZnBjciAmIH4oRkVfQUxMX0VYQ0VQVCA8PCBGUENSX0VYQ0VQVF9TSElGVCk7CisgIGlmIChuZXdfZnBjciAhPSBmcGNyKSB7CisgICAgX19zZXRfZnBjcihuZXdfZnBjcik7CisgIH0KKworICAvLyBDbGVhciBhbGwgZXhjZXB0aW9ucy4KKyAgZnBzciAmPSB+RkVfQUxMX0VYQ0VQVDsKKyAgX19zZXRfZnBzcihmcHNyKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZXVwZGF0ZWVudihjb25zdCBmZW52X3QqIGVudnApIHsKKyAgZnB1X3N0YXR1c190IGZwc3I7CisgIGZwdV9jb250cm9sX3QgZnBjcjsKKworICAvLyBTZXQgRlBVIENvbnRyb2wgcmVnaXN0ZXIuCisgIF9fZ2V0X2ZwY3IoZnBjcik7CisgIGlmIChlbnZwLT5fX2NvbnRyb2wgIT0gZnBjcikgeworICAgIF9fc2V0X2ZwY3IoZW52cC0+X19jb250cm9sKTsKKyAgfQorCisgIC8vIFNldCBGUFUgU3RhdHVzIHJlZ2lzdGVyIHRvIHN0YXR1cyB8IGN1cnJlbnRseSByYWlzZWQgZXhjZXB0aW9ucy4KKyAgX19nZXRfZnBzcihmcHNyKTsKKyAgZnBzciA9IGVudnAtPl9fc3RhdHVzIHwgKGZwc3IgJiBGRV9BTExfRVhDRVBUKTsKKyAgX19zZXRfZnBzcihmcHNyKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZWVuYWJsZWV4Y2VwdChpbnQgbWFzaykgeworICBmcHVfY29udHJvbF90IG9sZF9mcGNyLCBuZXdfZnBjcjsKKworICBfX2dldF9mcGNyKG9sZF9mcGNyKTsKKyAgbmV3X2ZwY3IgPSBvbGRfZnBjciB8ICgobWFzayAmIEZFX0FMTF9FWENFUFQpIDw8IEZQQ1JfRVhDRVBUX1NISUZUKTsKKyAgaWYgKG5ld19mcGNyICE9IG9sZF9mcGNyKSB7CisgICAgX19zZXRfZnBjcihuZXdfZnBjcik7CisgIH0KKyAgcmV0dXJuICgob2xkX2ZwY3IgPj4gRlBDUl9FWENFUFRfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7Cit9CisKK2ludCBmZWRpc2FibGVleGNlcHQoaW50IG1hc2spIHsKKyAgZnB1X2NvbnRyb2xfdCBvbGRfZnBjciwgbmV3X2ZwY3I7CisKKyAgX19nZXRfZnBjcihvbGRfZnBjcik7CisgIG5ld19mcGNyID0gb2xkX2ZwY3IgJiB+KChtYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgRlBDUl9FWENFUFRfU0hJRlQpOworICBpZiAobmV3X2ZwY3IgIT0gb2xkX2ZwY3IpIHsKKyAgICBfX3NldF9mcGNyKG5ld19mcGNyKTsKKyAgfQorICByZXR1cm4gKChvbGRfZnBjciA+PiBGUENSX0VYQ0VQVF9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKK30KKworaW50IGZlZ2V0ZXhjZXB0KHZvaWQpIHsKKyAgZnB1X2NvbnRyb2xfdCBmcGNyOworCisgIF9fZ2V0X2ZwY3IoZnBjcik7CisgIHJldHVybiAoKGZwY3IgJiBGUENSX0VYQ0VQVF9NQVNLKSA+PiBGUENSX0VYQ0VQVF9TSElGVCk7Cit9CmRpZmYgLS1naXQgYS9saWJtL2Zha2VfbG9uZ19kb3VibGUuYyBiL2xpYm0vZmFrZV9sb25nX2RvdWJsZS5jCmluZGV4IDc1NmUzNWIuLjMxN2ExMTUgMTAwNjQ0Ci0tLSBhL2xpYm0vZmFrZV9sb25nX2RvdWJsZS5jCisrKyBiL2xpYm0vZmFrZV9sb25nX2RvdWJsZS5jCkBAIC0xNyw3NCArMTcsMjUgQEAKICNpbmNsdWRlIDxmbG9hdC5oPgogI2luY2x1ZGUgPG1hdGguaD4KIAotZXh0ZXJuIGludCBfX2lzaW5mKGRvdWJsZSk7IC8qIGlzaW5mLmMgKi8KLWludCAoaXNpbmYpKGRvdWJsZSBhMSkgeyByZXR1cm4gX19pc2luZihhMSk7IH0KLQotaW50IChpc25hbmYpKGZsb2F0IGExKSB7IHJldHVybiBfX2lzbmFuZihhMSk7IH0KLQorI2lmbmRlZiBfX0xQNjRfXwogLyoKICAqIFRoZSBCU0QgImxvbmcgZG91YmxlIiBmdW5jdGlvbnMgYXJlIGJyb2tlbiB3aGVuIHNpemVvZihsb25nIGRvdWJsZSkgPT0gc2l6ZW9mKGRvdWJsZSkuCiAgKiBBbmRyb2lkIHdvcmtzIGFyb3VuZCB0aG9zZSBjYXNlcyBieSByZXBsYWNpbmcgdGhlIGJyb2tlbiBmdW5jdGlvbnMgd2l0aCBvdXIgb3duIHRyaXZpYWwgc3R1YnMKICAqIHRoYXQgY2FsbCB0aGUgcmVndWxhciAiZG91YmxlIiBmdW5jdGlvbi4KICAqLwogCi1pbnQgX19mcGNsYXNzaWZ5bChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gX19mcGNsYXNzaWZ5ZChhMSk7IH0KLWludCBfX2lzZmluaXRlbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gX19pc2Zpbml0ZShhMSk7IH0KLWludCBfX2lzaW5mbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gX19pc2luZihhMSk7IH0KLWludCBfX2lzbmFubChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gKGlzbmFuKShhMSk7IH0KLWludCBfX2lzbm9ybWFsbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gX19pc25vcm1hbChhMSk7IH0KLWludCBfX3NpZ25iaXRsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBfX3NpZ25iaXQoYTEpOyB9Ci0KLWxvbmcgZG91YmxlIGFjb3NobChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gYWNvc2goYTEpOyB9Ci1sb25nIGRvdWJsZSBhY29zbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gYWNvcyhhMSk7IH0KLWxvbmcgZG91YmxlIGFzaW5obChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gYXNpbmgoYTEpOyB9Ci1sb25nIGRvdWJsZSBhc2lubChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gYXNpbihhMSk7IH0KLWxvbmcgZG91YmxlIGF0YW4ybChsb25nIGRvdWJsZSBhMSwgbG9uZyBkb3VibGUgYTIpIHsgcmV0dXJuIGF0YW4yKGExLCBhMik7IH0KLWxvbmcgZG91YmxlIGF0YW5obChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gYXRhbmgoYTEpOyB9Ci1sb25nIGRvdWJsZSBhdGFubChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gYXRhbihhMSk7IH0KLWxvbmcgZG91YmxlIGNicnRsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBjYnJ0KGExKTsgfQotbG9uZyBkb3VibGUgY2VpbGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGNlaWwoYTEpOyB9CiBsb25nIGRvdWJsZSBjb3B5c2lnbmwobG9uZyBkb3VibGUgYTEsIGxvbmcgZG91YmxlIGEyKSB7IHJldHVybiBjb3B5c2lnbihhMSwgYTIpOyB9Ci1sb25nIGRvdWJsZSBjb3NobChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gY29zaChhMSk7IH0KLWxvbmcgZG91YmxlIGNvc2wobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGNvcyhhMSk7IH0KLWxvbmcgZG91YmxlIGVyZmNsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBlcmZjKGExKTsgfQotbG9uZyBkb3VibGUgZXJmbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gZXJmKGExKTsgfQotbG9uZyBkb3VibGUgZXhwMmwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGV4cDIoYTEpOyB9Ci1sb25nIGRvdWJsZSBleHBsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBleHAoYTEpOyB9Ci1sb25nIGRvdWJsZSBleHBtMWwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGV4cG0xKGExKTsgfQogbG9uZyBkb3VibGUgZmFic2wobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGZhYnMoYTEpOyB9Ci1sb25nIGRvdWJsZSBmbG9vcmwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGZsb29yKGExKTsgfQotbG9uZyBkb3VibGUgZm1hbChsb25nIGRvdWJsZSBhMSwgbG9uZyBkb3VibGUgYTIsIGxvbmcgZG91YmxlIGEzKSB7IHJldHVybiBmbWEoYTEsIGEyLCBhMyk7IH0KIGxvbmcgZG91YmxlIGZtYXhsKGxvbmcgZG91YmxlIGExLCBsb25nIGRvdWJsZSBhMikgeyByZXR1cm4gZm1heChhMSwgYTIpOyB9CiBsb25nIGRvdWJsZSBmbW9kbChsb25nIGRvdWJsZSBhMSwgbG9uZyBkb3VibGUgYTIpIHsgcmV0dXJuIGZtb2QoYTEsIGEyKTsgfQogbG9uZyBkb3VibGUgZm1pbmwobG9uZyBkb3VibGUgYTEsIGxvbmcgZG91YmxlIGEyKSB7IHJldHVybiBmbWluKGExLCBhMik7IH0KLWxvbmcgZG91YmxlIGZyZXhwbChsb25nIGRvdWJsZSBhMSwgaW50KiBhMikgeyByZXR1cm4gZnJleHAoYTEsIGEyKTsgfQotbG9uZyBkb3VibGUgaHlwb3RsKGxvbmcgZG91YmxlIGExLCBsb25nIGRvdWJsZSBhMikgeyByZXR1cm4gaHlwb3QoYTEsIGEyKTsgfQogaW50IGlsb2dibChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gaWxvZ2IoYTEpOyB9Ci1sb25nIGRvdWJsZSBsZGV4cGwobG9uZyBkb3VibGUgYTEsIGludCBhMikgeyByZXR1cm4gbGRleHAoYTEsIGEyKTsgfQotbG9uZyBkb3VibGUgbGdhbW1hbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbGdhbW1hKGExKTsgfQogbG9uZyBsb25nIGxscmludGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGxscmludChhMSk7IH0KLWxvbmcgZG91YmxlIGxvZzEwbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbG9nMTAoYTEpOyB9Ci1sb25nIGRvdWJsZSBsb2cxcGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGxvZzFwKGExKTsgfQotbG9uZyBkb3VibGUgbG9nMmwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGxvZzIoYTEpOyB9Ci1sb25nIGRvdWJsZSBsb2dibChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbG9nYihhMSk7IH0KLWxvbmcgZG91YmxlIGxvZ2wobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGxvZyhhMSk7IH0KIGxvbmcgbHJpbnRsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBscmludChhMSk7IH0KIGxvbmcgbG9uZyBsbHJvdW5kbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbGxyb3VuZChhMSk7IH0KIGxvbmcgbHJvdW5kbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbHJvdW5kKGExKTsgfQotbG9uZyBkb3VibGUgbmFubChjb25zdCBjaGFyKiBhMSkgeyByZXR1cm4gbmFuKGExKTsgfQotbG9uZyBkb3VibGUgbmV4dGFmdGVybChsb25nIGRvdWJsZSBhMSwgbG9uZyBkb3VibGUgYTIpIHsgcmV0dXJuIG5leHRhZnRlcihhMSwgYTIpOyB9Ci1sb25nIGRvdWJsZSBwb3dsKGxvbmcgZG91YmxlIGExLCBsb25nIGRvdWJsZSBhMikgeyByZXR1cm4gcG93KGExLCBhMik7IH0KLWxvbmcgZG91YmxlIHJlbWFpbmRlcmwobG9uZyBkb3VibGUgYTEsIGxvbmcgZG91YmxlIGEyKSB7IHJldHVybiByZW1haW5kZXIoYTEsIGEyKTsgfQotbG9uZyBkb3VibGUgcmVtcXVvbChsb25nIGRvdWJsZSBhMSwgbG9uZyBkb3VibGUgYTIsIGludCogYTMpIHsgcmV0dXJuIHJlbXF1byhhMSwgYTIsIGEzKTsgfQotbG9uZyBkb3VibGUgcmludGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIHJpbnQoYTEpOyB9Citsb25nIGRvdWJsZSBtb2RmbChsb25nIGRvdWJsZSBhMSwgbG9uZyBkb3VibGUqIGEyKSB7IGRvdWJsZSBpOyBkb3VibGUgZiA9IG1vZGYoYTEsICZpKTsgKmEyID0gaTsgcmV0dXJuIGY7IH0KK2Zsb2F0IG5leHR0b3dhcmRmKGZsb2F0IGExLCBsb25nIGRvdWJsZSBhMikgeyByZXR1cm4gbmV4dGFmdGVyZihhMSwgKGZsb2F0KSBhMik7IH0KIGxvbmcgZG91YmxlIHJvdW5kbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gcm91bmQoYTEpOyB9Ci1sb25nIGRvdWJsZSBzY2FsYm5sKGxvbmcgZG91YmxlIGExLCBpbnQgYTIpIHsgcmV0dXJuIHNjYWxibihhMSwgYTIpOyB9Ci1sb25nIGRvdWJsZSBzaWduaWZpY2FuZGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIHNpZ25pZmljYW5kKGExKTsgfQotbG9uZyBkb3VibGUgc2luaGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIHNpbmgoYTEpOyB9Ci1sb25nIGRvdWJsZSBzaW5sKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBzaW4oYTEpOyB9Ci1sb25nIGRvdWJsZSBzcXJ0bChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gc3FydChhMSk7IH0KLWxvbmcgZG91YmxlIHRhbmhsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiB0YW5oKGExKTsgfQotbG9uZyBkb3VibGUgdGFubChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gdGFuKGExKTsgfQotbG9uZyBkb3VibGUgdGdhbW1hbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gdGdhbW1hKGExKTsgfQotbG9uZyBkb3VibGUgdHJ1bmNsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiB0cnVuYyhhMSk7IH0KKworI2VuZGlmIC8vIF9fTFA2NF9fCmRpZmYgLS1naXQgYS9saWJtL2ZwY2xhc3NpZnkuYyBiL2xpYm0vZnBjbGFzc2lmeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDM5MTM4Li4wMDAwMDAwCi0tLSBhL2xpYm0vZnBjbGFzc2lmeS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL2xpYmMvZ2VuL2ZwY2xhc3NpZnkuYyx2IDEuMiAyMDA1LzAyLzA2IDAzOjIzOjMxIGRhcyBFeHAgJAotICovCi0KLSNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+Ci0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLQotaW50Ci1fX2ZwY2xhc3NpZnlmKGZsb2F0IGYpCi17Ci0JdW5pb24gSUVFRWYyYml0cyB1OwotCi0JdS5mID0gZjsKLQlpZiAodS5iaXRzLmV4cCA9PSAwKSB7Ci0JCWlmICh1LmJpdHMubWFuID09IDApCi0JCQlyZXR1cm4gKEZQX1pFUk8pOwotCQlyZXR1cm4gKEZQX1NVQk5PUk1BTCk7Ci0JfQotCWlmICh1LmJpdHMuZXhwID09IDI1NSkgewotCQlpZiAodS5iaXRzLm1hbiA9PSAwKQotCQkJcmV0dXJuIChGUF9JTkZJTklURSk7Ci0JCXJldHVybiAoRlBfTkFOKTsKLQl9Ci0JcmV0dXJuIChGUF9OT1JNQUwpOwotfQotCi1pbnQKLV9fZnBjbGFzc2lmeWQoZG91YmxlIGQpCi17Ci0JdW5pb24gSUVFRWQyYml0cyB1OwotCi0JdS5kID0gZDsKLQlpZiAodS5iaXRzLmV4cCA9PSAwKSB7Ci0JCWlmICgodS5iaXRzLm1hbmwgfCB1LmJpdHMubWFuaCkgPT0gMCkKLQkJCXJldHVybiAoRlBfWkVSTyk7Ci0JCXJldHVybiAoRlBfU1VCTk9STUFMKTsKLQl9Ci0JaWYgKHUuYml0cy5leHAgPT0gMjA0NykgewotCQlpZiAoKHUuYml0cy5tYW5sIHwgdS5iaXRzLm1hbmgpID09IDApCi0JCQlyZXR1cm4gKEZQX0lORklOSVRFKTsKLQkJcmV0dXJuIChGUF9OQU4pOwotCX0KLQlyZXR1cm4gKEZQX05PUk1BTCk7Ci19Ci0KLWludAotX19mcGNsYXNzaWZ5bChsb25nIGRvdWJsZSBlKQotewotCXVuaW9uIElFRUVsMmJpdHMgdTsKLQotCXUuZSA9IGU7Ci0JaWYgKHUuYml0cy5leHAgPT0gMCkgewotCQlpZiAoKHUuYml0cy5tYW5sIHwgdS5iaXRzLm1hbmgpID09IDApCi0JCQlyZXR1cm4gKEZQX1pFUk8pOwotCQlyZXR1cm4gKEZQX1NVQk5PUk1BTCk7Ci0JfQotCW1hc2tfbmJpdF9sKHUpOwkJLyogTWFzayBub3JtYWxpemF0aW9uIGJpdCBpZiBhcHBsaWNhYmxlLiAqLwotCWlmICh1LmJpdHMuZXhwID09IDMyNzY3KSB7Ci0JCWlmICgodS5iaXRzLm1hbmwgfCB1LmJpdHMubWFuaCkgPT0gMCkKLQkJCXJldHVybiAoRlBfSU5GSU5JVEUpOwotCQlyZXR1cm4gKEZQX05BTik7Ci0JfQotCXJldHVybiAoRlBfTk9STUFMKTsKLX0KLQpkaWZmIC0tZ2l0IGEvbGlibS9mcG1hdGguaCBiL2xpYm0vZnBtYXRoLmgKaW5kZXggZjM3NTNjMS4uODA0MjBlNSAxMDA2NDQKLS0tIGEvbGlibS9mcG1hdGguaAorKysgYi9saWJtL2ZwbWF0aC5oCkBAIC0yNCw2MSArMjQsNzMgQEAKICAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL2xpYmMvaW5jbHVkZS9mcG1hdGguaCx2IDEuMyAyMDA1LzAyLzA2IDAzOjIzOjMxIGRhcyBFeHAgJAorICogJEZyZWVCU0QkCiAgKi8KIAorLy8gQU5EUk9JRCBjaGFuZ2VkOgorLy8gLSBrZWVwIG9ubHkgbGl0dGxlIGVuZGlhbiB2YXJpYW50cyBhcyB0aGV5J3JlIHRoZSBvbmx5IG9uZSBzdXBwb3J0ZWQuCisvLyAtIGFkZCBsb25nIGRvdWJsZSBzdHJ1Y3R1cmVzIGhlcmUgaW5zdGVhZCBvZiBfZnBtYXRoLmguCisvLyAtIGFuZHJvaWQgdXNlcyAxMjggYml0cyBsb25nIGRvdWJsZXMgZm9yIExQNjQsIHNvIHRoZSBzdHJ1Y3R1cmUgYW5kIG1hY3JvcworLy8gICB3ZXJlIHJld29ya2VkIGZvciB0aGUgcXVhZCBwcmVjaXNpb24gaWVlZSByZXByZXNlbnRhdGlvbi4KKworI2lmbmRlZiBfRlBNQVRIXworI2RlZmluZSBfRlBNQVRIXworCiAjaW5jbHVkZSA8ZW5kaWFuLmg+Ci0jaW5jbHVkZSAiX2ZwbWF0aC5oIgogCiB1bmlvbiBJRUVFZjJiaXRzIHsKLQlmbG9hdAlmOwotCXN0cnVjdCB7Ci0jaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgotCQl1bnNpZ25lZCBpbnQJbWFuCToyMzsKLQkJdW5zaWduZWQgaW50CWV4cAk6ODsKLQkJdW5zaWduZWQgaW50CXNpZ24JOjE7Ci0jZWxzZSAvKiBfQklHX0VORElBTiAqLwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLQkJdW5zaWduZWQgaW50CWV4cAk6ODsKLQkJdW5zaWduZWQgaW50CW1hbgk6MjM7Ci0jZW5kaWYKLQl9IGJpdHM7CisgIGZsb2F0IGY7CisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgaW50IG1hbiAgIDoyMzsKKyAgICB1bnNpZ25lZCBpbnQgZXhwICAgOjg7CisgICAgdW5zaWduZWQgaW50IHNpZ24gIDoxOworICB9IGJpdHM7CiB9OwogCi0jZGVmaW5lCURCTF9NQU5IX1NJWkUJMjAKLSNkZWZpbmUJREJMX01BTkxfU0laRQkzMgorI2RlZmluZSBEQkxfTUFOSF9TSVpFICAyMAorI2RlZmluZSBEQkxfTUFOTF9TSVpFICAzMgogCiB1bmlvbiBJRUVFZDJiaXRzIHsKLQlkb3VibGUJZDsKLQlzdHJ1Y3QgewotLyogI2lmZGVmIF9fQVJNRUJfXyAqLwotI2lmIChfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOKSB8fCAoZGVmaW5lZChfX2FybV9fKSAmJiAhZGVmaW5lZChfX1ZGUF9GUF9fKSkKLQkJdW5zaWduZWQgaW50CW1hbmgJOjIwOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxMTsKLQkJdW5zaWduZWQgaW50CXNpZ24JOjE7Ci0JCXVuc2lnbmVkIGludAltYW5sCTozMjsKLSNlbGlmICBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCi0JCXVuc2lnbmVkIGludAltYW5sCTozMjsKLQkJdW5zaWduZWQgaW50CW1hbmgJOjIwOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxMTsKLQkJdW5zaWduZWQgaW50CXNpZ24JOjE7Ci0jZWxpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi0JCXVuc2lnbmVkIGludAlzaWduCToxOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxMTsKLQkJdW5zaWduZWQgaW50CW1hbmgJOjIwOwotCQl1bnNpZ25lZCBpbnQJbWFubAk6MzI7Ci0jZW5kaWYKLQl9IGJpdHM7CisgIGRvdWJsZSAgZDsKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgbWFubCAgOjMyOworICAgIHVuc2lnbmVkIGludCBtYW5oICA6MjA7CisgICAgdW5zaWduZWQgaW50IGV4cCAgIDoxMTsKKyAgICB1bnNpZ25lZCBpbnQgc2lnbiAgOjE7CisgIH0gYml0czsKIH07CiAKLS8qCi0gKiBUaGUgQlNEICJsb25nIGRvdWJsZSIgZnVuY3Rpb25zIGFyZSBicm9rZW4gd2hlbiBzaXplb2YobG9uZyBkb3VibGUpID09IHNpemVvZihkb3VibGUpLgotICogQW5kcm9pZCB3b3JrcyBhcm91bmQgdGhvc2UgY2FzZXMgYnkgcmVwbGFjaW5nIHRoZSBicm9rZW4gZnVuY3Rpb25zIHdpdGggb3VyIG93biB0cml2aWFsIHN0dWJzCi0gKiB0aGF0IGNhbGwgdGhlIHJlZ3VsYXIgImRvdWJsZSIgZnVuY3Rpb24uCi0gKi8KLSNkZWZpbmUgX19mcGNsYXNzaWZ5bCBfX2Jyb2tlbl9fZnBjbGFzc2lmeQotI2RlZmluZSBfX2lzZmluaXRlbCBfX2Jyb2tlbl9faXNmaW5pdGVsCi0jZGVmaW5lIF9faXNpbmZsIF9fYnJva2VuX19pc2luZmwKLSNkZWZpbmUgX19pc25hbmwgX19icm9rZW5fX2lzbmFubAotI2RlZmluZSBfX2lzbm9ybWFsbCBfX2Jyb2tlbl9faXNub3JtYWxsCi0jZGVmaW5lIF9fc2lnbmJpdGwgX19icm9rZW5fc2lnbmJpdGwKKyNpZmRlZiBfX0xQNjRfXworCit1bmlvbiBJRUVFbDJiaXRzIHsKKyAgbG9uZyBkb3VibGUgZTsKKyAgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBsb25nIG1hbmwgIDo2NDsKKyAgICB1bnNpZ25lZCBsb25nIG1hbmggIDo0ODsKKyAgICB1bnNpZ25lZCBpbnQgIGV4cCAgIDoxNTsKKyAgICB1bnNpZ25lZCBpbnQgIHNpZ24gIDoxOworICB9IGJpdHM7CisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgbG9uZyBtYW5sICAgICA6NjQ7CisgICAgdW5zaWduZWQgbG9uZyBtYW5oICAgICA6NDg7CisgICAgdW5zaWduZWQgaW50ICBleHBzaWduICA6MTY7CisgIH0geGJpdHM7Cit9OworCisjZGVmaW5lIExEQkxfTkJJVCAgMAorI2RlZmluZSBMREJMX0lNUExJQ0lUX05CSVQKKyNkZWZpbmUgbWFza19uYml0X2wodSkgICgodm9pZCkwKQorCisjZGVmaW5lIExEQkxfTUFOSF9TSVpFICA0OAorI2RlZmluZSBMREJMX01BTkxfU0laRSAgNjQKKworI2RlZmluZSBMREJMX1RPX0FSUkFZMzIodSwgYSkgZG8geyAgICAgICAgICAgXAorICAoYSlbMF0gPSAodWludDMyX3QpKHUpLmJpdHMubWFubDsgICAgICAgICAgXAorICAoYSlbMV0gPSAodWludDMyX3QpKCh1KS5iaXRzLm1hbmwgPj4gMzIpOyAgXAorICAoYSlbMl0gPSAodWludDMyX3QpKHUpLmJpdHMubWFuaDsgICAgICAgICAgXAorICAoYSlbM10gPSAodWludDMyX3QpKCh1KS5iaXRzLm1hbmggPj4gMzIpOyAgXAorfSB3aGlsZSgwKQorCisjZW5kaWYgLy8gX19MUDY0X18KKworI2VuZGlmIC8vIF9GUE1BVEhfCmRpZmYgLS1naXQgYS9saWJtL2ZyZWVic2QtY29tcGF0LmggYi9saWJtL2ZyZWVic2QtY29tcGF0LmgKaW5kZXggNGIxNGZhZS4uMTQ4MWNjMiAxMDA2NDQKLS0tIGEvbGlibS9mcmVlYnNkLWNvbXBhdC5oCisrKyBiL2xpYm0vZnJlZWJzZC1jb21wYXQuaApAQCAtMTcsMTAgKzE3LDE2IEBACiAjaWZuZGVmIF9CSU9OSUNfTElCTV9GUkVFQlNEX0NPTVBBVF9IX2luY2x1ZGVkCiAjZGVmaW5lIF9CSU9OSUNfTElCTV9GUkVFQlNEX0NPTVBBVF9IX2luY2x1ZGVkCiAKLSNkZWZpbmUgX193ZWFrX3JlZmVyZW5jZShzeW0sYWxpYXMpIFwKLSAgICAvKiBXZSBkb24ndCB1c2UgX193ZWFrX3JlZmVyZW5jZTsgc2VlICJmYWtlX2xvbmdfZG91YmxlLmMiLiAqLworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNkZWZpbmUgX193ZWFrX3JlZmVyZW5jZShzeW0sYWxpYXMpICAgICBcCisgICAgX19hc21fXygiLndlYWsgIiAjYWxpYXMpOyAgICAgICAgICAgXAorICAgIF9fYXNtX18oIi5lcXUgIiAgI2FsaWFzICIsICIgI3N5bSkKIAogI2RlZmluZSBfX3N0cm9uZ19yZWZlcmVuY2Uoc3ltLGFsaWFzc3ltKSBcCiAgICAgZXh0ZXJuIF9fdHlwZW9mIChzeW0pIGFsaWFzc3ltIF9fYXR0cmlidXRlX18gKChfX2FsaWFzX18gKCNzeW0pKSkKIAorLyogZGlnaXR0b2ludCBpcyBpbiBCU0QncyA8Y3R5cGUuaD4uICovCitpbnQgZGlnaXR0b2ludChjaGFyIGNoKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL2kzODYvX2ZwbWF0aC5oIGIvbGlibS9pMzg2L19mcG1hdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYxZjVmNC4uMDAwMDAwMAotLS0gYS9saWJtL2kzODYvX2ZwbWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRCQKLSAqLwotCi11bmlvbiBJRUVFbDJiaXRzIHsKLQlsb25nIGRvdWJsZQllOwotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludAltYW5sCTozMjsKLQkJdW5zaWduZWQgaW50CW1hbmgJOjMyOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxNTsKLQkJdW5zaWduZWQgaW50CXNpZ24JOjE7Ci0JCXVuc2lnbmVkIGludAlqdW5rCToxNjsKLQl9IGJpdHM7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgbG9uZyBsb25nIG1hbgk6NjQ7Ci0JCXVuc2lnbmVkIGludCAJZXhwc2lnbgk6MTY7Ci0JCXVuc2lnbmVkIGludAlqdW5rCToxNjsKLQl9IHhiaXRzOwotfTsKLQotI2RlZmluZQlMREJMX05CSVQJMHg4MDAwMDAwMAotI2RlZmluZQltYXNrX25iaXRfbCh1KQkoKHUpLmJpdHMubWFuaCAmPSB+TERCTF9OQklUKQotCi0jZGVmaW5lCUxEQkxfTUFOSF9TSVpFCTMyCi0jZGVmaW5lCUxEQkxfTUFOTF9TSVpFCTMyCi0KLSNkZWZpbmUJTERCTF9UT19BUlJBWTMyKHUsIGEpIGRvIHsJCQlcCi0JKGEpWzBdID0gKHVpbnQzMl90KSh1KS5iaXRzLm1hbmw7CQlcCi0JKGEpWzFdID0gKHVpbnQzMl90KSh1KS5iaXRzLm1hbmg7CQlcCi19IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L2ZlbnYuYyBiL2xpYm0vaTM4Ny9mZW52LmMKaW5kZXggODlkZGM1NS4uZjY0ZjhkYyAxMDA2NDQKLS0tIGEvbGlibS9pMzg3L2ZlbnYuYworKysgYi9saWJtL2kzODcvZmVudi5jCkBAIC0zMSwyOSArMzEsMzEgQEAKICNpbmNsdWRlICJucHguaCIKICNpbmNsdWRlICJmZW52LmgiCiAKKyNkZWZpbmUgUk9VTkRfTUFTSyAgIChGRV9UT05FQVJFU1QgfCBGRV9ET1dOV0FSRCB8IEZFX1VQV0FSRCB8IEZFX1RPV0FSRFpFUk8pCisKIC8qCiAgKiBBcyBjb21wYXJlZCB0byB0aGUgeDg3IGNvbnRyb2wgd29yZCwgdGhlIFNTRSB1bml0J3MgY29udHJvbCB3b3JkCiAgKiBoYXMgdGhlIHJvdW5kaW5nIGNvbnRyb2wgYml0cyBvZmZzZXQgYnkgMyBhbmQgdGhlIGV4Y2VwdGlvbiBtYXNrCiAgKiBiaXRzIG9mZnNldCBieSA3LgogICovCi0jZGVmaW5lCV9TU0VfUk9VTkRfU0hJRlQJMwotI2RlZmluZQlfU1NFX0VNQVNLX1NISUZUCTcKKyNkZWZpbmUgX1NTRV9ST1VORF9TSElGVCAzCisjZGVmaW5lIF9TU0VfRU1BU0tfU0hJRlQgNwogCiBjb25zdCBmZW52X3QgX19mZV9kZmxfZW52ID0gewotCV9fSU5JVElBTF9OUFhDV19fLCAvKl9fY29udHJvbCovCi0JMHgwMDAwLCAgICAgICAgICAgIC8qX19teGNzcl9oaSovCi0JMHgwMDAwLCAgICAgICAgICAgIC8qX19zdGF0dXMqLwotCTB4MWY4MCwgICAgICAgICAgICAvKl9fbXhjc3JfbG8qLwotCTB4ZmZmZmZmZmYsICAgICAgICAvKl9fdGFnKi8KLQl7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmIH0gLypfX290aGVyKi8KKyAgX19JTklUSUFMX05QWENXX18sIC8qX19jb250cm9sKi8KKyAgMHgwMDAwLCAgICAgICAgICAgIC8qX19teGNzcl9oaSovCisgIDB4MDAwMCwgICAgICAgICAgICAvKl9fc3RhdHVzKi8KKyAgMHgxZjgwLCAgICAgICAgICAgIC8qX19teGNzcl9sbyovCisgIDB4ZmZmZmZmZmYsICAgICAgICAvKl9fdGFnKi8KKyAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYgfSAvKl9fb3RoZXIqLwogfTsKIAogI2RlZmluZSBfX2ZsZGN3KF9fY3cpICAgICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpCiAjZGVmaW5lIF9fZmxkZW52KF9fZW52KSAgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUoImZsZGVudiAlMCIgOiA6ICJtIiAoX19lbnYpKQotI2RlZmluZQlfX2ZsZGVudngoX19lbnYpCV9fYXNtIF9fdm9sYXRpbGUoImZsZGVudiAlMCIgOiA6ICJtIiAoX19lbnYpICBcCi0JCQkJOiAic3QiLCAic3QoMSkiLCAic3QoMikiLCAic3QoMykiLCAic3QoNCkiLCAgIFwKLQkJCQkic3QoNSkiLCAic3QoNikiLCAic3QoNykiKQorI2RlZmluZSBfX2ZsZGVudngoX19lbnYpICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlKCJmbGRlbnYgJTAiIDogOiAibSIgKF9fZW52KSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJzdCIsICJzdCgxKSIsICJzdCgyKSIsICJzdCgzKSIsICJzdCg0KSIsICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3QoNSkiLCAic3QoNikiLCAic3QoNykiKQogI2RlZmluZSBfX2ZuY2xleCgpICAgICAgICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlKCJmbmNsZXgiKQogI2RlZmluZSBfX2Zuc3RlbnYoX19lbnYpICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlKCJmbnN0ZW52ICUwIiA6ICI9bSIgKCooX19lbnYpKSkKICNkZWZpbmUgX19mbnN0Y3coX19jdykgICAgICAgICAgX19hc20gX192b2xhdGlsZSgiZm5zdGN3ICUwIiA6ICI9bSIgKCooX19jdykpKQpAQCAtNjgsMjIgKzcwLDIyIEBACiAjZGVmaW5lIF9fSEFTX1NTRSgpICAgICAxCiAjZWxzZQogI2RlZmluZSBfX0hBU19TU0UoKSAgICAgKF9faGFzX3NzZSA9PSBfX1NTRV9ZRVMgfHwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgIChfX2hhc19zc2UgPT0gX19TU0VfVU5LICYmIF9fdGVzdF9zc2UoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAoX19oYXNfc3NlID09IF9fU1NFX1VOSyAmJiBfX3Rlc3Rfc3NlKCkpKQogI2VuZGlmCiAKIGVudW0gX19zc2Vfc3VwcG9ydCBfX2hhc19zc2UgPQogI2lmZGVmIF9fU1NFX18KLQlfX1NTRV9ZRVM7CisgIF9fU1NFX1lFUzsKICNlbHNlCi0JX19TU0VfVU5LOworICBfX1NTRV9VTks7CiAjZW5kaWYKIAogI2lmbmRlZiBfX1NTRV9fCi0jZGVmaW5lCWdldGZsKHgpCV9fYXNtIF9fdm9sYXRpbGUoInB1c2hmbFxuXHRwb3BsICUwIiA6ICI9bXIiICgqKHgpKSkKLSNkZWZpbmUJc2V0ZmwoeCkJX19hc20gX192b2xhdGlsZSgicHVzaGwgJTBcblx0cG9wZmwiIDogOiAiZyIgKHgpKQotI2RlZmluZQljcHVpZF9keCh4KQlfX2FzbSBfX3ZvbGF0aWxlKCJwdXNobCAlJWVieFxuXHRtb3ZsICQxLCAlJWVheFxuXHQiICBcCi0JCQkJCSAiY3B1aWRcblx0cG9wbCAlJWVieCIJCSAgICAgIFwKLQkJCQkJOiAiPWQiICgqKHgpKSA6IDogImVheCIsICJlY3giKQorI2RlZmluZSBnZXRmbCh4KSAgICBfX2FzbSBfX3ZvbGF0aWxlKCJwdXNoZmxcblx0cG9wbCAlMCIgOiAiPW1yIiAoKih4KSkpCisjZGVmaW5lIHNldGZsKHgpICAgIF9fYXNtIF9fdm9sYXRpbGUoInB1c2hsICUwXG5cdHBvcGZsIiA6IDogImciICh4KSkKKyNkZWZpbmUgY3B1aWRfZHgoeCkgX19hc20gX192b2xhdGlsZSgicHVzaGwgJSVlYnhcblx0bW92bCAkMSwgJSVlYXhcblx0IiAgXAorICAgICAgICAgICAgICAgICAgICAiY3B1aWRcblx0cG9wbCAlJWVieCIgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICA6ICI9ZCIgKCooeCkpIDogOiAiZWF4IiwgImVjeCIpCiAKIC8qCiAgKiBUZXN0IGZvciBTU0Ugc3VwcG9ydCBvbiB0aGlzIHByb2Nlc3Nvci4gIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlCkBAIC05NCwyOTggKzk2LDI5OCBAQAogaW50CiBfX3Rlc3Rfc3NlKHZvaWQpCiB7Ci0JaW50IGZsYWcsIG5mbGFnOwotCWludCBkeF9mZWF0dXJlczsKKyAgaW50IGZsYWcsIG5mbGFnOworICBpbnQgZHhfZmVhdHVyZXM7CiAKLQkvKiBBbSBJIGEgNDg2PyAqLwotCWdldGZsKCZmbGFnKTsKLQluZmxhZyA9IGZsYWcgXiAweDIwMDAwMDsKLQlzZXRmbChuZmxhZyk7Ci0JZ2V0ZmwoJm5mbGFnKTsKLQlpZiAoZmxhZyAhPSBuZmxhZykgewotCQkvKiBOb3QgYSA0ODYsIHNvIENQVUlEIHNob3VsZCB3b3JrLiAqLwotCQljcHVpZF9keCgmZHhfZmVhdHVyZXMpOwotCQlpZiAoZHhfZmVhdHVyZXMgJiAweDIwMDAwMDApIHsKLQkJCV9faGFzX3NzZSA9IF9fU1NFX1lFUzsKLQkJCXJldHVybiAoMSk7Ci0JCX0KLQl9Ci0JX19oYXNfc3NlID0gX19TU0VfTk87Ci0JcmV0dXJuICgwKTsKKyAgLyogQW0gSSBhIDQ4Nj8gKi8KKyAgZ2V0ZmwoJmZsYWcpOworICBuZmxhZyA9IGZsYWcgXiAweDIwMDAwMDsKKyAgc2V0ZmwobmZsYWcpOworICBnZXRmbCgmbmZsYWcpOworICBpZiAoZmxhZyAhPSBuZmxhZykgeworICAgIC8qIE5vdCBhIDQ4Niwgc28gQ1BVSUQgc2hvdWxkIHdvcmsuICovCisgICAgY3B1aWRfZHgoJmR4X2ZlYXR1cmVzKTsKKyAgICBpZiAoZHhfZmVhdHVyZXMgJiAweDIwMDAwMDApIHsKKyAgICAgIF9faGFzX3NzZSA9IF9fU1NFX1lFUzsKKyAgICAgIHJldHVybiAoMSk7CisgICAgfQorICB9CisgIF9faGFzX3NzZSA9IF9fU1NFX05POworICByZXR1cm4gKDApOwogfQogI2VuZGlmIC8qIF9fU1NFX18gKi8KIAogaW50CiBmZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90ICpmbGFncCwgaW50IGV4Y2VwdHMpCiB7Ci0JZmVudl90IGVudjsKLQlfX3VpbnQzMl90IG14Y3NyOworICBmZW52X3QgZW52OworICBfX3VpbnQzMl90IG14Y3NyOwogCi0JZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOwotCWlmIChleGNlcHRzKSB7IC8qIERvIG5vdGhpbmcgaWYgZXhjZXB0cyBpcyAwICovCi0JCV9fZm5zdGVudigmZW52KTsKLQkJZW52Ll9fc3RhdHVzICY9IH5leGNlcHRzOwotCQllbnYuX19zdGF0dXMgfD0gKmZsYWdwICYgZXhjZXB0czsKLQkJX19mbmNsZXgoKTsKLQkJX19mbGRlbnYoZW52KTsKLQkJaWYgKF9fSEFTX1NTRSgpKSB7Ci0JCQlfX3N0bXhjc3IoJm14Y3NyKTsKLQkJCW14Y3NyICY9IH5leGNlcHRzOwotCQkJbXhjc3IgfD0gKmZsYWdwICYgZXhjZXB0czsKLQkJCV9fbGRteGNzcihteGNzcik7Ci0JCX0KLQl9CisgIGV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgaWYgKGV4Y2VwdHMpIHsgLyogRG8gbm90aGluZyBpZiBleGNlcHRzIGlzIDAgKi8KKyAgICBfX2Zuc3RlbnYoJmVudik7CisgICAgZW52Ll9fc3RhdHVzICY9IH5leGNlcHRzOworICAgIGVudi5fX3N0YXR1cyB8PSAqZmxhZ3AgJiBleGNlcHRzOworICAgIF9fZm5jbGV4KCk7CisgICAgX19mbGRlbnYoZW52KTsKKyAgICBpZiAoX19IQVNfU1NFKCkpIHsKKyAgICAgIF9fc3RteGNzcigmbXhjc3IpOworICAgICAgbXhjc3IgJj0gfmV4Y2VwdHM7CisgICAgICBteGNzciB8PSAqZmxhZ3AgJiBleGNlcHRzOworICAgICAgX19sZG14Y3NyKG14Y3NyKTsKKyAgICB9CisgIH0KIAotCXJldHVybiAoMCk7CisgIHJldHVybiAoMCk7CiB9CiAKIGludAogZmVyYWlzZWV4Y2VwdChpbnQgZXhjZXB0cykKIHsKLQlmZXhjZXB0X3QgZXggPSBleGNlcHRzOworICBmZXhjZXB0X3QgZXggPSBleGNlcHRzOwogCi0JZmVzZXRleGNlcHRmbGFnKCZleCwgZXhjZXB0cyk7Ci0JX19md2FpdCgpOwotCXJldHVybiAoMCk7CisgIGZlc2V0ZXhjZXB0ZmxhZygmZXgsIGV4Y2VwdHMpOworICBfX2Z3YWl0KCk7CisgIHJldHVybiAoMCk7CiB9CiAKIGludAogZmVnZXRlbnYoZmVudl90ICplbnZwKQogewotCV9fdWludDMyX3QgbXhjc3I7CisgIF9fdWludDMyX3QgbXhjc3I7CiAKLQlfX2Zuc3RlbnYoZW52cCk7Ci0JLyoKLQkgKiBmbnN0ZW52IG1hc2tzIGFsbCBleGNlcHRpb25zLCBzbyB3ZSBuZWVkIHRvIHJlc3RvcmUKLQkgKiB0aGUgb2xkIGNvbnRyb2wgd29yZCB0byBhdm9pZCB0aGlzIHNpZGUgZWZmZWN0LgotCSAqLwotCV9fZmxkY3coZW52cC0+X19jb250cm9sKTsKLQlpZiAoX19IQVNfU1NFKCkpIHsKLQkJX19zdG14Y3NyKCZteGNzcik7Ci0JCWVudnAtPl9fbXhjc3JfaGkgPSBteGNzciA+PiAxNjsKLQkJZW52cC0+X19teGNzcl9sbyA9IG14Y3NyICYgMHhmZmZmOwotCX0KLQlyZXR1cm4gKDApOworICBfX2Zuc3RlbnYoZW52cCk7CisgIC8qCisgICAqIGZuc3RlbnYgbWFza3MgYWxsIGV4Y2VwdGlvbnMsIHNvIHdlIG5lZWQgdG8gcmVzdG9yZQorICAgKiB0aGUgb2xkIGNvbnRyb2wgd29yZCB0byBhdm9pZCB0aGlzIHNpZGUgZWZmZWN0LgorICAgKi8KKyAgX19mbGRjdyhlbnZwLT5fX2NvbnRyb2wpOworICBpZiAoX19IQVNfU1NFKCkpIHsKKyAgICBfX3N0bXhjc3IoJm14Y3NyKTsKKyAgICBlbnZwLT5fX214Y3NyX2hpID0gbXhjc3IgPj4gMTY7CisgICAgZW52cC0+X19teGNzcl9sbyA9IG14Y3NyICYgMHhmZmZmOworICB9CisgIHJldHVybiAoMCk7CiB9CiAKIGludAogZmVob2xkZXhjZXB0KGZlbnZfdCAqZW52cCkKIHsKLQlfX3VpbnQzMl90IG14Y3NyOwotCWZlbnZfdCBlbnY7CisgIF9fdWludDMyX3QgbXhjc3I7CisgIGZlbnZfdCBlbnY7CiAKLQlfX2Zuc3RlbnYoJmVudik7Ci0JKmVudnAgPSBlbnY7Ci0JZW52Ll9fc3RhdHVzICY9IH5GRV9BTExfRVhDRVBUOwotCWVudi5fX2NvbnRyb2wgfD0gRkVfQUxMX0VYQ0VQVDsKLQlfX2ZuY2xleCgpOwotCV9fZmxkZW52KGVudik7Ci0JaWYgKF9fSEFTX1NTRSgpKSB7Ci0JCV9fc3RteGNzcigmbXhjc3IpOwotCQllbnZwLT5fX214Y3NyX2hpID0gbXhjc3IgPj4gMTY7Ci0JCWVudnAtPl9fbXhjc3JfbG8gPSBteGNzciAmIDB4ZmZmZjsKLQkJbXhjc3IgJj0gfkZFX0FMTF9FWENFUFQ7Ci0JCW14Y3NyIHw9IEZFX0FMTF9FWENFUFQgPDwgX1NTRV9FTUFTS19TSElGVDsKLQkJX19sZG14Y3NyKG14Y3NyKTsKLQl9Ci0JcmV0dXJuICgwKTsKKyAgX19mbnN0ZW52KCZlbnYpOworICAqZW52cCA9IGVudjsKKyAgZW52Ll9fc3RhdHVzICY9IH5GRV9BTExfRVhDRVBUOworICBlbnYuX19jb250cm9sIHw9IEZFX0FMTF9FWENFUFQ7CisgIF9fZm5jbGV4KCk7CisgIF9fZmxkZW52KGVudik7CisgIGlmIChfX0hBU19TU0UoKSkgeworICAgIF9fc3RteGNzcigmbXhjc3IpOworICAgIGVudnAtPl9fbXhjc3JfaGkgPSBteGNzciA+PiAxNjsKKyAgICBlbnZwLT5fX214Y3NyX2xvID0gbXhjc3IgJiAweGZmZmY7CisgICAgbXhjc3IgJj0gfkZFX0FMTF9FWENFUFQ7CisgICAgbXhjc3IgfD0gRkVfQUxMX0VYQ0VQVCA8PCBfU1NFX0VNQVNLX1NISUZUOworICAgIF9fbGRteGNzcihteGNzcik7CisgIH0KKyAgcmV0dXJuICgwKTsKIH0KIAogaW50CiBmZXVwZGF0ZWVudihjb25zdCBmZW52X3QgKmVudnApCiB7Ci0JX191aW50MzJfdCBteGNzcjsKLQlfX3VpbnQxNl90IHN0YXR1czsKKyAgX191aW50MzJfdCBteGNzcjsKKyAgX191aW50MTZfdCBzdGF0dXM7CiAKLQlfX2Zuc3Rzdygmc3RhdHVzKTsKLQlpZiAoX19IQVNfU1NFKCkpIHsKLQkJX19zdG14Y3NyKCZteGNzcik7Ci0JfSBlbHNlIHsKLQkJbXhjc3IgPSAwOwotCX0KLQlmZXNldGVudihlbnZwKTsKLQlmZXJhaXNlZXhjZXB0KChteGNzciB8IHN0YXR1cykgJiBGRV9BTExfRVhDRVBUKTsKLQlyZXR1cm4gKDApOworICBfX2Zuc3Rzdygmc3RhdHVzKTsKKyAgaWYgKF9fSEFTX1NTRSgpKSB7CisgICAgX19zdG14Y3NyKCZteGNzcik7CisgIH0gZWxzZSB7CisgICAgbXhjc3IgPSAwOworICB9CisgIGZlc2V0ZW52KGVudnApOworICBmZXJhaXNlZXhjZXB0KChteGNzciB8IHN0YXR1cykgJiBGRV9BTExfRVhDRVBUKTsKKyAgcmV0dXJuICgwKTsKIH0KIAogaW50CiBmZWVuYWJsZWV4Y2VwdChpbnQgbWFzaykKIHsKLQlfX3VpbnQzMl90IG14Y3NyOwotCV9fdWludDE2X3QgY29udHJvbCwgb21hc2s7CisgIF9fdWludDMyX3QgbXhjc3I7CisgIF9fdWludDE2X3QgY29udHJvbCwgb21hc2s7CiAKLQltYXNrICY9IEZFX0FMTF9FWENFUFQ7Ci0JX19mbnN0Y3coJmNvbnRyb2wpOwotCWlmIChfX0hBU19TU0UoKSkgewotCQlfX3N0bXhjc3IoJm14Y3NyKTsKLQl9IGVsc2UgewotCQlteGNzciA9IDA7Ci0JfQotCW9tYXNrID0gfihjb250cm9sIHwgbXhjc3IgPj4gX1NTRV9FTUFTS19TSElGVCkgJiBGRV9BTExfRVhDRVBUOwotCWlmIChtYXNrKSB7Ci0JCWNvbnRyb2wgJj0gfm1hc2s7Ci0JCV9fZmxkY3coY29udHJvbCk7Ci0JCWlmIChfX0hBU19TU0UoKSkgewotCQkJbXhjc3IgJj0gfihtYXNrIDw8IF9TU0VfRU1BU0tfU0hJRlQpOwotCQkJX19sZG14Y3NyKG14Y3NyKTsKLQkJfQotCX0KLQlyZXR1cm4gKG9tYXNrKTsKKyAgbWFzayAmPSBGRV9BTExfRVhDRVBUOworICBfX2Zuc3RjdygmY29udHJvbCk7CisgIGlmIChfX0hBU19TU0UoKSkgeworICAgIF9fc3RteGNzcigmbXhjc3IpOworICB9IGVsc2UgeworICAgIG14Y3NyID0gMDsKKyAgfQorICBvbWFzayA9IH4oY29udHJvbCB8IG14Y3NyID4+IF9TU0VfRU1BU0tfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVDsKKyAgaWYgKG1hc2spIHsKKyAgICBjb250cm9sICY9IH5tYXNrOworICAgIF9fZmxkY3coY29udHJvbCk7CisgICAgaWYgKF9fSEFTX1NTRSgpKSB7CisgICAgICBteGNzciAmPSB+KG1hc2sgPDwgX1NTRV9FTUFTS19TSElGVCk7CisgICAgICBfX2xkbXhjc3IobXhjc3IpOworICAgIH0KKyAgfQorICByZXR1cm4gKG9tYXNrKTsKIH0KIAogaW50CiBmZWRpc2FibGVleGNlcHQoaW50IG1hc2spCiB7Ci0JX191aW50MzJfdCBteGNzcjsKLQlfX3VpbnQxNl90IGNvbnRyb2wsIG9tYXNrOworICBfX3VpbnQzMl90IG14Y3NyOworICBfX3VpbnQxNl90IGNvbnRyb2wsIG9tYXNrOwogCi0JbWFzayAmPSBGRV9BTExfRVhDRVBUOwotCV9fZm5zdGN3KCZjb250cm9sKTsKLQlpZiAoX19IQVNfU1NFKCkpIHsKLQkJX19zdG14Y3NyKCZteGNzcik7Ci0JfSBlbHNlIHsKLQkJbXhjc3IgPSAwOwotCX0KLQlvbWFzayA9IH4oY29udHJvbCB8IG14Y3NyID4+IF9TU0VfRU1BU0tfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVDsKLQlpZiAobWFzaykgewotCQljb250cm9sIHw9IG1hc2s7Ci0JCV9fZmxkY3coY29udHJvbCk7Ci0JCWlmIChfX0hBU19TU0UoKSkgewotCQkJbXhjc3IgfD0gbWFzayA8PCBfU1NFX0VNQVNLX1NISUZUOwotCQkJX19sZG14Y3NyKG14Y3NyKTsKLQkJfQotCX0KLQlyZXR1cm4gKG9tYXNrKTsKKyAgbWFzayAmPSBGRV9BTExfRVhDRVBUOworICBfX2Zuc3RjdygmY29udHJvbCk7CisgIGlmIChfX0hBU19TU0UoKSkgeworICAgIF9fc3RteGNzcigmbXhjc3IpOworICB9IGVsc2UgeworICAgIG14Y3NyID0gMDsKKyAgfQorICBvbWFzayA9IH4oY29udHJvbCB8IG14Y3NyID4+IF9TU0VfRU1BU0tfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVDsKKyAgaWYgKG1hc2spIHsKKyAgICBjb250cm9sIHw9IG1hc2s7CisgICAgX19mbGRjdyhjb250cm9sKTsKKyAgICBpZiAoX19IQVNfU1NFKCkpIHsKKyAgICAgIG14Y3NyIHw9IG1hc2sgPDwgX1NTRV9FTUFTS19TSElGVDsKKyAgICAgIF9fbGRteGNzcihteGNzcik7CisgICAgfQorICB9CisgIHJldHVybiAob21hc2spOwogfQogCiBpbnQKIGZlY2xlYXJleGNlcHQoaW50IGV4Y2VwdHMpCiB7Ci0JZmVudl90IGVudjsKLQlfX3VpbnQzMl90IG14Y3NyOworICBmZW52X3QgZW52OworICBfX3VpbnQzMl90IG14Y3NyOwogCi0JZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOwotCWlmIChleGNlcHRzKSB7IC8qIERvIG5vdGhpbmcgaWYgZXhjZXB0cyBpcyAwICovCi0JCV9fZm5zdGVudigmZW52KTsKLQkJZW52Ll9fc3RhdHVzICY9IH5leGNlcHRzOwotCQlfX2ZuY2xleCgpOwotCQlfX2ZsZGVudihlbnYpOwotCQlpZiAoX19IQVNfU1NFKCkpIHsKLQkJCV9fc3RteGNzcigmbXhjc3IpOwotCQkJbXhjc3IgJj0gfmV4Y2VwdHM7Ci0JCQlfX2xkbXhjc3IobXhjc3IpOwotCQl9Ci0JfQotCXJldHVybiAoMCk7CisgIGV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgaWYgKGV4Y2VwdHMpIHsgLyogRG8gbm90aGluZyBpZiBleGNlcHRzIGlzIDAgKi8KKyAgICBfX2Zuc3RlbnYoJmVudik7CisgICAgZW52Ll9fc3RhdHVzICY9IH5leGNlcHRzOworICAgIF9fZm5jbGV4KCk7CisgICAgX19mbGRlbnYoZW52KTsKKyAgICBpZiAoX19IQVNfU1NFKCkpIHsKKyAgICAgIF9fc3RteGNzcigmbXhjc3IpOworICAgICAgbXhjc3IgJj0gfmV4Y2VwdHM7CisgICAgICBfX2xkbXhjc3IobXhjc3IpOworICAgIH0KKyAgfQorICByZXR1cm4gKDApOwogfQogCiBpbnQKIGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKmZsYWdwLCBpbnQgZXhjZXB0cykKIHsKLQlfX3VpbnQzMl90IG14Y3NyOwotCV9fdWludDE2X3Qgc3RhdHVzOworICBfX3VpbnQzMl90IG14Y3NyOworICBfX3VpbnQxNl90IHN0YXR1czsKIAotCWV4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKLQlfX2Zuc3Rzdygmc3RhdHVzKTsKLQlpZiAoX19IQVNfU1NFKCkpIHsKLQkJX19zdG14Y3NyKCZteGNzcik7Ci0JfSBlbHNlIHsKLQkJbXhjc3IgPSAwOwotCX0KLQkqZmxhZ3AgPSAoc3RhdHVzIHwgbXhjc3IpICYgZXhjZXB0czsKLQlyZXR1cm4gKDApOworICBleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CisgIF9fZm5zdHN3KCZzdGF0dXMpOworICBpZiAoX19IQVNfU1NFKCkpIHsKKyAgICBfX3N0bXhjc3IoJm14Y3NyKTsKKyAgfSBlbHNlIHsKKyAgICBteGNzciA9IDA7CisgIH0KKyAgKmZsYWdwID0gKHN0YXR1cyB8IG14Y3NyKSAmIGV4Y2VwdHM7CisgIHJldHVybiAoMCk7CiB9CiAKIGludAogZmV0ZXN0ZXhjZXB0KGludCBleGNlcHRzKQogewotCV9fdWludDMyX3QgbXhjc3I7Ci0JX191aW50MTZfdCBzdGF0dXM7CisgIF9fdWludDMyX3QgbXhjc3I7CisgIF9fdWludDE2X3Qgc3RhdHVzOwogCi0JZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOwotCWlmIChleGNlcHRzKSB7IC8qIERvIG5vdGhpbmcgaWYgZXhjZXB0cyBpcyAwICovCi0JCV9fZm5zdHN3KCZzdGF0dXMpOwotCQlpZiAoX19IQVNfU1NFKCkpIHsKLQkJCV9fc3RteGNzcigmbXhjc3IpOwotCQl9IGVsc2UgewotCQkJbXhjc3IgPSAwOwotCQl9Ci0JCXJldHVybiAoKHN0YXR1cyB8IG14Y3NyKSAmIGV4Y2VwdHMpOwotCX0KLQlyZXR1cm4gKDApOworICBleGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CisgIGlmIChleGNlcHRzKSB7IC8qIERvIG5vdGhpbmcgaWYgZXhjZXB0cyBpcyAwICovCisgICAgX19mbnN0c3coJnN0YXR1cyk7CisgICAgaWYgKF9fSEFTX1NTRSgpKSB7CisgICAgICBfX3N0bXhjc3IoJm14Y3NyKTsKKyAgICB9IGVsc2UgeworICAgICAgbXhjc3IgPSAwOworICAgIH0KKyAgICByZXR1cm4gKChzdGF0dXMgfCBteGNzcikgJiBleGNlcHRzKTsKKyAgfQorICByZXR1cm4gKDApOwogfQogCiBpbnQKIGZlZ2V0cm91bmQodm9pZCkKIHsKLQlfX3VpbnQxNl90IGNvbnRyb2w7CisgIF9fdWludDE2X3QgY29udHJvbDsKIAotCS8qCi0JICogV2UgYXNzdW1lIHRoYXQgdGhlIHg4NyBhbmQgdGhlIFNTRSB1bml0IGFncmVlIG9uIHRoZQotCSAqIHJvdW5kaW5nIG1vZGUuICBSZWFkaW5nIHRoZSBjb250cm9sIHdvcmQgb24gdGhlIHg4NyB0dXJucwotCSAqIG91dCB0byBiZSBhYm91dCA1IHRpbWVzIGZhc3RlciB0aGFuIHJlYWRpbmcgaXQgb24gdGhlIFNTRQotCSAqIHVuaXQgb24gYW4gT3B0ZXJvbiAyNDQuCi0JICovCi0JX19mbnN0Y3coJmNvbnRyb2wpOwotCXJldHVybiAoY29udHJvbCAmIF9ST1VORF9NQVNLKTsKKyAgLyoKKyAgICogV2UgYXNzdW1lIHRoYXQgdGhlIHg4NyBhbmQgdGhlIFNTRSB1bml0IGFncmVlIG9uIHRoZQorICAgKiByb3VuZGluZyBtb2RlLiAgUmVhZGluZyB0aGUgY29udHJvbCB3b3JkIG9uIHRoZSB4ODcgdHVybnMKKyAgICogb3V0IHRvIGJlIGFib3V0IDUgdGltZXMgZmFzdGVyIHRoYW4gcmVhZGluZyBpdCBvbiB0aGUgU1NFCisgICAqIHVuaXQgb24gYW4gT3B0ZXJvbiAyNDQuCisgICAqLworICBfX2Zuc3RjdygmY29udHJvbCk7CisgIHJldHVybiAoY29udHJvbCAmIFJPVU5EX01BU0spOwogfQogCiBpbnQKIGZlc2V0cm91bmQoaW50IHJvdW5kKQogewotCV9fdWludDMyX3QgbXhjc3I7Ci0JX191aW50MTZfdCBjb250cm9sOworICBfX3VpbnQzMl90IG14Y3NyOworICBfX3VpbnQxNl90IGNvbnRyb2w7CiAKLQlpZiAocm91bmQgJiB+X1JPVU5EX01BU0spIHsKLQkJcmV0dXJuICgtMSk7Ci0JfSBlbHNlIHsKLQkJX19mbnN0Y3coJmNvbnRyb2wpOwotCQljb250cm9sICY9IH5fUk9VTkRfTUFTSzsKLQkJY29udHJvbCB8PSByb3VuZDsKLQkJX19mbGRjdyhjb250cm9sKTsKLQkJaWYgKF9fSEFTX1NTRSgpKSB7Ci0JCQlfX3N0bXhjc3IoJm14Y3NyKTsKLQkJCW14Y3NyICY9IH4oX1JPVU5EX01BU0sgPDwgX1NTRV9ST1VORF9TSElGVCk7Ci0JCQlteGNzciB8PSByb3VuZCA8PCBfU1NFX1JPVU5EX1NISUZUOwotCQkJX19sZG14Y3NyKG14Y3NyKTsKLQkJfQotCQlyZXR1cm4gKDApOwotCX0KKyAgaWYgKHJvdW5kICYgflJPVU5EX01BU0spIHsKKyAgICByZXR1cm4gKC0xKTsKKyAgfSBlbHNlIHsKKyAgICBfX2Zuc3RjdygmY29udHJvbCk7CisgICAgY29udHJvbCAmPSB+Uk9VTkRfTUFTSzsKKyAgICBjb250cm9sIHw9IHJvdW5kOworICAgIF9fZmxkY3coY29udHJvbCk7CisgICAgaWYgKF9fSEFTX1NTRSgpKSB7CisgICAgICBfX3N0bXhjc3IoJm14Y3NyKTsKKyAgICAgIG14Y3NyICY9IH4oUk9VTkRfTUFTSyA8PCBfU1NFX1JPVU5EX1NISUZUKTsKKyAgICAgIG14Y3NyIHw9IHJvdW5kIDw8IF9TU0VfUk9VTkRfU0hJRlQ7CisgICAgICBfX2xkbXhjc3IobXhjc3IpOworICAgIH0KKyAgICByZXR1cm4gKDApOworICB9CiB9CiAKIGludAogZmVzZXRlbnYoY29uc3QgZmVudl90ICplbnZwKQogewotCWZlbnZfdCBlbnYgPSAqZW52cDsKLQlfX3VpbnQzMl90IG14Y3NyOworICBmZW52X3QgZW52ID0gKmVudnA7CisgIF9fdWludDMyX3QgbXhjc3I7CiAKLQlteGNzciA9IChlbnYuX19teGNzcl9oaSA8PCAxNikgfCAoZW52Ll9fbXhjc3JfbG8pOwotCWVudi5fX214Y3NyX2hpID0gMHhmZmZmOwotCWVudi5fX214Y3NyX2xvID0gMHhmZmZmOwotCS8qCi0JICogWFhYIFVzaW5nIGZsZGVudngoKSBpbnN0ZWFkIG9mIGZsZGVudigpIHRlbGxzIHRoZSBjb21waWxlciB0aGF0IHRoaXMKLQkgKiBpbnN0cnVjdGlvbiBjbG9iYmVycyB0aGUgaTM4NyByZWdpc3RlciBzdGFjay4gIFRoaXMgaGFwcGVucyBiZWNhdXNlCi0JICogd2UgcmVzdG9yZSB0aGUgdGFnIHdvcmQgZnJvbSB0aGUgc2F2ZWQgZW52aXJvbm1lbnQuICBOb3JtYWxseSwgdGhpcwotCSAqIHdvdWxkIGhhcHBlbiBhbnl3YXkgYW5kIHdlIHdvdWxkbid0IGNhcmUsIGJlY2F1c2UgdGhlIEFCSSBhbGxvd3MKLQkgKiBmdW5jdGlvbiBjYWxscyB0byBjbG9iYmVyIHRoZSBpMzg3IHJlZ3MuICBIb3dldmVyLCBmZXNldGVudigpIGlzCi0JICogaW5saW5lZCwgc28gd2UgbmVlZCB0byBiZSBtb3JlIGNhcmVmdWwuCi0JICovCi0JX19mbGRlbnZ4KGVudik7Ci0JaWYgKF9fSEFTX1NTRSgpKSB7Ci0JCV9fbGRteGNzcihteGNzcik7Ci0JfQotCXJldHVybiAoMCk7CisgIG14Y3NyID0gKGVudi5fX214Y3NyX2hpIDw8IDE2KSB8IChlbnYuX19teGNzcl9sbyk7CisgIGVudi5fX214Y3NyX2hpID0gMHhmZmZmOworICBlbnYuX19teGNzcl9sbyA9IDB4ZmZmZjsKKyAgLyoKKyAgICogWFhYIFVzaW5nIGZsZGVudngoKSBpbnN0ZWFkIG9mIGZsZGVudigpIHRlbGxzIHRoZSBjb21waWxlciB0aGF0IHRoaXMKKyAgICogaW5zdHJ1Y3Rpb24gY2xvYmJlcnMgdGhlIGkzODcgcmVnaXN0ZXIgc3RhY2suICBUaGlzIGhhcHBlbnMgYmVjYXVzZQorICAgKiB3ZSByZXN0b3JlIHRoZSB0YWcgd29yZCBmcm9tIHRoZSBzYXZlZCBlbnZpcm9ubWVudC4gIE5vcm1hbGx5LCB0aGlzCisgICAqIHdvdWxkIGhhcHBlbiBhbnl3YXkgYW5kIHdlIHdvdWxkbid0IGNhcmUsIGJlY2F1c2UgdGhlIEFCSSBhbGxvd3MKKyAgICogZnVuY3Rpb24gY2FsbHMgdG8gY2xvYmJlciB0aGUgaTM4NyByZWdzLiAgSG93ZXZlciwgZmVzZXRlbnYoKSBpcworICAgKiBpbmxpbmVkLCBzbyB3ZSBuZWVkIHRvIGJlIG1vcmUgY2FyZWZ1bC4KKyAgICovCisgIF9fZmxkZW52eChlbnYpOworICBpZiAoX19IQVNfU1NFKCkpIHsKKyAgICBfX2xkbXhjc3IobXhjc3IpOworICB9CisgIHJldHVybiAoMCk7CiB9CiAKIGludAogZmVnZXRleGNlcHQodm9pZCkKIHsKLQlfX3VpbnQxNl90IGNvbnRyb2w7CisgIF9fdWludDE2X3QgY29udHJvbDsKIAotCS8qCi0JICogV2UgYXNzdW1lIHRoYXQgdGhlIG1hc2tzIGZvciB0aGUgeDg3IGFuZCB0aGUgU1NFIHVuaXQgYXJlCi0JICogdGhlIHNhbWUuCi0JICovCi0JX19mbnN0Y3coJmNvbnRyb2wpOwotCXJldHVybiAofmNvbnRyb2wgJiBGRV9BTExfRVhDRVBUKTsKKyAgLyoKKyAgICogV2UgYXNzdW1lIHRoYXQgdGhlIG1hc2tzIGZvciB0aGUgeDg3IGFuZCB0aGUgU1NFIHVuaXQgYXJlCisgICAqIHRoZSBzYW1lLgorICAgKi8KKyAgX19mbnN0Y3coJmNvbnRyb2wpOworICByZXR1cm4gKH5jb250cm9sICYgRkVfQUxMX0VYQ0VQVCk7CiB9CmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvYW1kNjQvZmVudi5oIGIvbGlibS9pbmNsdWRlL2FtZDY0L2ZlbnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRjNDIxNS4uMDAwMDAwMAotLS0gYS9saWJtL2luY2x1ZGUvYW1kNjQvZmVudi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzIChhdCkgRnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYJX0FNRDY0X0ZFTlZfSF8KLSNkZWZpbmUJX0FNRDY0X0ZFTlZfSF8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0vKgotICogVGhpcyBmaWxlIGNvbWJpbmVzIHRoZSBPcGVuQlNEIGluY2x1ZGUvZmVudi5oIGFuZCBtYWNoaW5lL2ZlbnYuaCB0byBmaXQKLSAqIHRoZSBzdHlsZSBvZiB0aGUgb3RoZXIgYXJjaGl0ZWN0dXJlcyAod2hlcmUgd2UgY291bGRuJ3QganVzdCB0YWtlIGFuCi0gKiB1cHN0cmVhbSBmZW52LmggYW5kIGhhZCB0byB3cml0ZSBvdXIgb3duKS4KLSAqLwotCi1fX0JFR0lOX0RFQ0xTCi0KLS8qCi0gKiBFYWNoIHN5bWJvbCByZXByZXNlbnRpbmcgYSBmbG9hdGluZyBwb2ludCBleGNlcHRpb24gZXhwYW5kcyB0byBhbiBpbnRlZ2VyCi0gKiBjb25zdGFudCBleHByZXNzaW9uIHdpdGggdmFsdWVzLCBzdWNoIHRoYXQgYml0d2lzZS1pbmNsdXNpdmUgT1JzIG9mIF9hbGwKLSAqIGNvbWJpbmF0aW9uc18gb2YgdGhlIGNvbnN0YW50cyByZXN1bHQgaW4gZGlzdGluY3QgdmFsdWVzLgotICoKLSAqIFdlIHVzZSBzdWNoIHZhbHVlcyB0aGF0IGFsbG93IGRpcmVjdCBiaXR3aXNlIG9wZXJhdGlvbnMgb24gRlBVL1NTRSByZWdpc3RlcnMuCi0gKi8KLSNkZWZpbmUJRkVfSU5WQUxJRAkJMHgwMQotI2RlZmluZQlGRV9ERU5PUk1BTAkJMHgwMgotI2RlZmluZQlGRV9ESVZCWVpFUk8JCTB4MDQKLSNkZWZpbmUJRkVfT1ZFUkZMT1cJCTB4MDgKLSNkZWZpbmUJRkVfVU5ERVJGTE9XCQkweDEwCi0jZGVmaW5lCUZFX0lORVhBQ1QJCTB4MjAKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgc3ltYm9sIGlzIHNpbXBseSB0aGUgYml0d2lzZS1pbmNsdXNpdmUgT1Igb2YgYWxsIGZsb2F0aW5nLXBvaW50Ci0gKiBleGNlcHRpb24gY29uc3RhbnRzIGRlZmluZWQgYWJvdmUuCi0gKi8KLSNkZWZpbmUJRkVfQUxMX0VYQ0VQVAkJKEZFX0lOVkFMSUQgfCBGRV9ERU5PUk1BTCB8IEZFX0RJVkJZWkVSTyB8IFwKLQkJCQkgRkVfT1ZFUkZMT1cgfCBGRV9VTkRFUkZMT1cgfCBGRV9JTkVYQUNUKQotI2RlZmluZQlfU1NFX01BU0tfU0hJRlQJCTcKLQotLyoKLSAqIEVhY2ggc3ltYm9sIHJlcHJlc2VudGluZyB0aGUgcm91bmRpbmcgZGlyZWN0aW9uLCBleHBhbmRzIHRvIGFuIGludGVnZXIKLSAqIGNvbnN0YW50IGV4cHJlc3Npb24gd2hvc2UgdmFsdWUgaXMgZGlzdGluY3Qgbm9uLW5lZ2F0aXZlIHZhbHVlLgotICoKLSAqIFdlIHVzZSBzdWNoIHZhbHVlcyB0aGF0IGFsbG93IGRpcmVjdCBiaXR3aXNlIG9wZXJhdGlvbnMgb24gRlBVL1NTRSByZWdpc3RlcnMuCi0gKi8KLSNkZWZpbmUJRkVfVE9ORUFSRVNUCQkweDAwMAotI2RlZmluZQlGRV9ET1dOV0FSRAkJMHg0MDAKLSNkZWZpbmUJRkVfVVBXQVJECQkweDgwMAotI2RlZmluZQlGRV9UT1dBUkRaRVJPCQkweGMwMAotCi0vKgotICogVGhlIGZvbGxvd2luZyBzeW1ib2wgaXMgc2ltcGx5IHRoZSBiaXR3aXNlLWluY2x1c2l2ZSBPUiBvZiBhbGwgZmxvYXRpbmctcG9pbnQKLSAqIHJvdW5kaW5nIGRpcmVjdGlvbiBjb25zdGFudHMgZGVmaW5lZCBhYm92ZS4KLSAqLwotI2RlZmluZQlfWDg3X1JPVU5EX01BU0sJCShGRV9UT05FQVJFU1QgfCBGRV9ET1dOV0FSRCB8IEZFX1VQV0FSRCB8IFwKLQkJCQkgRkVfVE9XQVJEWkVSTykKLSNkZWZpbmUJX1NTRV9ST1VORF9TSElGVAkzCi0KLS8qCi0gKiBmZW52X3QgcmVwcmVzZW50cyB0aGUgZW50aXJlIGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50LgotICovCi10eXBlZGVmCXN0cnVjdCB7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgaW50IF9fY29udHJvbDsJCS8qIENvbnRyb2wgd29yZCByZWdpc3RlciAqLwotCQl1bnNpZ25lZCBpbnQgX19zdGF0dXM7CQkvKiBTdGF0dXMgd29yZCByZWdpc3RlciAqLwotCQl1bnNpZ25lZCBpbnQgX190YWc7CQkvKiBUYWcgd29yZCByZWdpc3RlciAqLwotCQl1bnNpZ25lZCBpbnQgX19vdGhlcnNbNF07CS8qIEVJUCwgUG9pbnRlciBTZWxlY3RvciwgZXRjICovCi0JfSBfX3g4NzsKLQl1bnNpZ25lZCBpbnQgX19teGNzcjsJCQkvKiBDb250cm9sLCBzdGF0dXMgcmVnaXN0ZXIgKi8KLX0gZmVudl90OwotCi0vKgotICogVGhlIGZvbGxvd2luZyBjb25zdGFudCByZXByZXNlbnRzIHRoZSBkZWZhdWx0IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50Ci0gKiAodGhhdCBpcywgdGhlIG9uZSBpbnN0YWxsZWQgYXQgcHJvZ3JhbSBzdGFydHVwKSBhbmQgaGFzIHR5cGUgcG9pbnRlciB0bwotICogY29uc3QtcXVhbGlmaWVkIGZlbnZfdC4KLSAqCi0gKiBJdCBjYW4gYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgPGZlbnYuaD4gaGVhZGVyCi0gKiB0aGF0IG1hbmFnZSB0aGUgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQsIG5hbWVseSBmZXNldGVudigpIGFuZAotICogZmV1cGRhdGVlbnYoKS4KLSAqLwotZXh0ZXJuCWZlbnZfdAkJCV9fZmVfZGZsX2VudjsKLSNkZWZpbmUJRkVfREZMX0VOVgkJKChjb25zdCBmZW52X3QgKikmX19mZV9kZmxfZW52KQotCi0vKgotICogZmV4Y2VwdF90IHJlcHJlc2VudHMgdGhlIGZsb2F0aW5nLXBvaW50IHN0YXR1cyBmbGFncyBjb2xsZWN0aXZlbHksIGluY2x1ZGluZwotICogYW55IHN0YXR1cyB0aGUgaW1wbGVtZW50YXRpb24gYXNzb2NpYXRlcyB3aXRoIHRoZSBmbGFncy4KLSAqCi0gKiBBIGZsb2F0aW5nLXBvaW50IHN0YXR1cyBmbGFnIGlzIGEgc3lzdGVtIHZhcmlhYmxlIHdob3NlIHZhbHVlIGlzIHNldCAoYnV0Ci0gKiBuZXZlciBjbGVhcmVkKSB3aGVuIGEgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIGlzIHJhaXNlZCwgd2hpY2ggb2NjdXJzIGFzIGEKLSAqIHNpZGUgZWZmZWN0IG9mIGV4Y2VwdGlvbmFsIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgdG8gcHJvdmlkZSBhdXhpbGlhcnkKLSAqIGluZm9ybWF0aW9uLgotICoKLSAqIEEgZmxvYXRpbmctcG9pbnQgY29udHJvbCBtb2RlIGlzIGEgc3lzdGVtIHZhcmlhYmxlIHdob3NlIHZhbHVlIG1heSBiZSBzZXQgYnkKLSAqIHRoZSB1c2VyIHRvIGFmZmVjdCB0aGUgc3Vic2VxdWVudCBiZWhhdmlvciBvZiBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgotICovCi10eXBlZGVmCXVuc2lnbmVkIGludAkJZmV4Y2VwdF90OwotCi0vKiBDOTkgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIGZ1bmN0aW9ucyAqLwotaW50IGZlY2xlYXJleGNlcHQoaW50IGV4Y2VwdHMpOwotaW50IGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKmZsYWdwLCBpbnQgZXhjZXB0cyk7Ci1pbnQgZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCAqZmxhZ3AsIGludCBleGNlcHRzKTsKLS8qIGZlcmFpc2VleGNlcHQgZG9lcyBub3Qgc2V0IHRoZSBpbmV4YWN0IGZsYWcgb24gb3ZlcmZsb3cvdW5kZXJmbG93ICovCi1pbnQgZmVyYWlzZWV4Y2VwdChpbnQgZXhjZXB0cyk7Ci1pbnQgZmV0ZXN0ZXhjZXB0KGludCBleGNlcHRzKTsKLQotLyogQzk5IHJvdW5kaW5nIGNvbnRyb2wgZnVuY3Rpb25zICovCi1pbnQgZmVnZXRyb3VuZCh2b2lkKTsKLWludCBmZXNldHJvdW5kKGludCByb3VuZCk7Ci0KLS8qIEM5OSBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCBmdW5jdGlvbnMgKi8KLWludCBmZWdldGVudihmZW52X3QgKl9fZW52cCk7Ci1pbnQgZmVob2xkZXhjZXB0KGZlbnZfdCAqX19lbnZwKTsKLWludCBmZXNldGVudihjb25zdCBmZW52X3QgKmVudnApOwotaW50IGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKTsKLQotI2lmIF9fQlNEX1ZJU0lCTEUKLS8qIEFkZGl0aW9uYWwgc3VwcG9ydCBmdW5jdGlvbnMgdG8gc2V0L3F1ZXJ5IGZsb2F0aW5nIHBvaW50IHRyYXBzICovCi1pbnQgZmVlbmFibGVleGNlcHQoaW50IF9fbWFzayk7Ci1pbnQgZmVkaXNhYmxlZXhjZXB0KGludCBfX21hc2spOwotaW50IGZlZ2V0ZXhjZXB0KHZvaWQpOwotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotX19FTkRfREVDTFMKLQotI2VuZGlmCS8qICFfQU1ENjRfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL2FtZDY0L21hY2hpbmUvZmVudi5oIGIvbGlibS9pbmNsdWRlL2FtZDY0L21hY2hpbmUvZmVudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjI1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL2luY2x1ZGUvYW1kNjQvbWFjaGluZS9mZW52LmgKQEAgLTAsMCArMSw5NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXMgKGF0KSBGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQU1ENjRfRkVOVl9IXworI2RlZmluZSBfQU1ENjRfRkVOVl9IXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyoKKyAqIEVhY2ggc3ltYm9sIHJlcHJlc2VudGluZyBhIGZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiBleHBhbmRzIHRvIGFuIGludGVnZXIKKyAqIGNvbnN0YW50IGV4cHJlc3Npb24gd2l0aCB2YWx1ZXMsIHN1Y2ggdGhhdCBiaXR3aXNlLWluY2x1c2l2ZSBPUnMgb2YgX2FsbAorICogY29tYmluYXRpb25zXyBvZiB0aGUgY29uc3RhbnRzIHJlc3VsdCBpbiBkaXN0aW5jdCB2YWx1ZXMuCisgKgorICogV2UgdXNlIHN1Y2ggdmFsdWVzIHRoYXQgYWxsb3cgZGlyZWN0IGJpdHdpc2Ugb3BlcmF0aW9ucyBvbiBGUFUvU1NFIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBGRV9JTlZBTElEICAgIDB4MDEKKyNkZWZpbmUgRkVfREVOT1JNQUwgICAweDAyCisjZGVmaW5lIEZFX0RJVkJZWkVSTyAgMHgwNAorI2RlZmluZSBGRV9PVkVSRkxPVyAgIDB4MDgKKyNkZWZpbmUgRkVfVU5ERVJGTE9XICAweDEwCisjZGVmaW5lIEZFX0lORVhBQ1QgICAgMHgyMAorCisvKgorICogVGhlIGZvbGxvd2luZyBzeW1ib2wgaXMgc2ltcGx5IHRoZSBiaXR3aXNlLWluY2x1c2l2ZSBPUiBvZiBhbGwgZmxvYXRpbmctcG9pbnQKKyAqIGV4Y2VwdGlvbiBjb25zdGFudHMgZGVmaW5lZCBhYm92ZS4KKyAqLworI2RlZmluZSBGRV9BTExfRVhDRVBUICAgKEZFX0lOVkFMSUQgfCBGRV9ERU5PUk1BTCB8IEZFX0RJVkJZWkVSTyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVyB8IEZFX0lORVhBQ1QpCisKKy8qCisgKiBFYWNoIHN5bWJvbCByZXByZXNlbnRpbmcgdGhlIHJvdW5kaW5nIGRpcmVjdGlvbiwgZXhwYW5kcyB0byBhbiBpbnRlZ2VyCisgKiBjb25zdGFudCBleHByZXNzaW9uIHdob3NlIHZhbHVlIGlzIGRpc3RpbmN0IG5vbi1uZWdhdGl2ZSB2YWx1ZS4KKyAqCisgKiBXZSB1c2Ugc3VjaCB2YWx1ZXMgdGhhdCBhbGxvdyBkaXJlY3QgYml0d2lzZSBvcGVyYXRpb25zIG9uIEZQVS9TU0UgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIEZFX1RPTkVBUkVTVCAgMHgwMDAKKyNkZWZpbmUgRkVfRE9XTldBUkQgICAweDQwMAorI2RlZmluZSBGRV9VUFdBUkQgICAgIDB4ODAwCisjZGVmaW5lIEZFX1RPV0FSRFpFUk8gMHhjMDAKKworLyoKKyAqIGZlbnZfdCByZXByZXNlbnRzIHRoZSBlbnRpcmUgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IHsKKyAgICBfX3VpbnQzMl90IF9fY29udHJvbDsgICAvKiBDb250cm9sIHdvcmQgcmVnaXN0ZXIgKi8KKyAgICBfX3VpbnQzMl90IF9fc3RhdHVzOyAgICAvKiBTdGF0dXMgd29yZCByZWdpc3RlciAqLworICAgIF9fdWludDMyX3QgX190YWc7ICAgICAgIC8qIFRhZyB3b3JkIHJlZ2lzdGVyICovCisgICAgX191aW50MzJfdCBfX290aGVyc1s0XTsgLyogRUlQLCBQb2ludGVyIFNlbGVjdG9yLCBldGMgKi8KKyAgfSBfX3g4NzsKKyAgX191aW50MzJfdCBfX214Y3NyOyAgICAgICAvKiBDb250cm9sLCBzdGF0dXMgcmVnaXN0ZXIgKi8KK30gZmVudl90OworCisvKgorICogZmV4Y2VwdF90IHJlcHJlc2VudHMgdGhlIGZsb2F0aW5nLXBvaW50IHN0YXR1cyBmbGFncyBjb2xsZWN0aXZlbHksIGluY2x1ZGluZworICogYW55IHN0YXR1cyB0aGUgaW1wbGVtZW50YXRpb24gYXNzb2NpYXRlcyB3aXRoIHRoZSBmbGFncy4KKyAqCisgKiBBIGZsb2F0aW5nLXBvaW50IHN0YXR1cyBmbGFnIGlzIGEgc3lzdGVtIHZhcmlhYmxlIHdob3NlIHZhbHVlIGlzIHNldCAoYnV0CisgKiBuZXZlciBjbGVhcmVkKSB3aGVuIGEgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIGlzIHJhaXNlZCwgd2hpY2ggb2NjdXJzIGFzIGEKKyAqIHNpZGUgZWZmZWN0IG9mIGV4Y2VwdGlvbmFsIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgdG8gcHJvdmlkZSBhdXhpbGlhcnkKKyAqIGluZm9ybWF0aW9uLgorICoKKyAqIEEgZmxvYXRpbmctcG9pbnQgY29udHJvbCBtb2RlIGlzIGEgc3lzdGVtIHZhcmlhYmxlIHdob3NlIHZhbHVlIG1heSBiZSBzZXQgYnkKKyAqIHRoZSB1c2VyIHRvIGFmZmVjdCB0aGUgc3Vic2VxdWVudCBiZWhhdmlvciBvZiBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgorICovCit0eXBlZGVmIF9fdWludDMyX3QgZmV4Y2VwdF90OworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9BTUQ2NF9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvYXJtL2ZlbnYuaCBiL2xpYm0vaW5jbHVkZS9hcm0vZmVudi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTZmOTllLi4wMDAwMDAwCi0tLSBhL2xpYm0vaW5jbHVkZS9hcm0vZmVudi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2FybS9mZW52LmgsdiAxLjUgMjAwNS8wMy8xNiAxOTowMzo0NSBkYXMgRXhwICQKLSAqLwotCi0vKgotICogUmV3cml0dGVuIGZvciBBbmRyb2lkLgotICoKLSAqIFRoZSBBUk0gRlBTQ1IgaXMgZGVzY3JpYmVkIGhlcmU6Ci0gKiBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvaW5kZXguanNwP3RvcGljPS9jb20uYXJtLmRvYy5kZGkwMzQ0Yi9DaGRmYWZpYS5odG1sCi0gKi8KLQotI2lmbmRlZiBfRkVOVl9IXwotI2RlZmluZSBfRkVOVl9IXwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLV9fQkVHSU5fREVDTFMKLQotdHlwZWRlZiBfX3VpbnQzMl90IGZlbnZfdDsKLXR5cGVkZWYgX191aW50MzJfdCBmZXhjZXB0X3Q7Ci0KLS8qIEV4Y2VwdGlvbiBmbGFncy4gKi8KLSNkZWZpbmUgRkVfSU5WQUxJRCAgICAweDAxCi0jZGVmaW5lIEZFX0RJVkJZWkVSTyAgMHgwMgotI2RlZmluZSBGRV9PVkVSRkxPVyAgIDB4MDQKLSNkZWZpbmUgRkVfVU5ERVJGTE9XICAweDA4Ci0jZGVmaW5lIEZFX0lORVhBQ1QgICAgMHgxMAotI2RlZmluZSBGRV9BTExfRVhDRVBUIChGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQotI2RlZmluZSBfRlBTQ1JfRU5BQkxFX1NISUZUIDgKLSNkZWZpbmUgX0ZQU0NSX0VOQUJMRV9NQVNLIChGRV9BTExfRVhDRVBUIDw8IF9GUFNDUl9FTkFCTEVfU0hJRlQpCi0KLS8qIFJvdW5kaW5nIG1vZGVzLiAqLwotI2RlZmluZSBGRV9UT05FQVJFU1QgIDB4MAotI2RlZmluZSBGRV9VUFdBUkQgICAgIDB4MQotI2RlZmluZSBGRV9ET1dOV0FSRCAgIDB4MgotI2RlZmluZSBGRV9UT1dBUkRaRVJPIDB4MwotI2RlZmluZSBfRlBTQ1JfUk1PREVfU0hJRlQgMjIKLQotLyogRGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudC4gKi8KLWV4dGVybiBjb25zdCBmZW52X3QgX19mZV9kZmxfZW52OwotI2RlZmluZSBGRV9ERkxfRU5WICgmX19mZV9kZmxfZW52KQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0ZW52KGZlbnZfdCogX19lbnZwKSB7Ci0gIGZlbnZfdCBfZnBzY3I7Ci0gIF9fYXNtX18gX192b2xhdGlsZV9fKCJ2bXJzICUwLGZwc2NyIiA6ICI9ciIgKF9mcHNjcikpOwotICAqX19lbnZwID0gX2Zwc2NyOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXNldGVudihjb25zdCBmZW52X3QqIF9fZW52cCkgewotICBmZW52X3QgX2Zwc2NyID0gKl9fZW52cDsKLSAgX19hc21fXyBfX3ZvbGF0aWxlX18oInZtc3IgZnBzY3IsJTAiIDogOiJyaSIgKF9mcHNjcikpOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWNsZWFyZXhjZXB0KGludCBfX2V4Y2VwdHMpIHsKLSAgZmV4Y2VwdF90IF9fZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKLSAgX19mcHNjciAmPSB+X19leGNlcHRzOwotICBmZXNldGVudigmX19mcHNjcik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QqIF9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpIHsKLSAgZmV4Y2VwdF90IF9fZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKLSAgKl9fZmxhZ3AgPSBfX2Zwc2NyICYgX19leGNlcHRzOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90KiBfX2ZsYWdwLCBpbnQgX19leGNlcHRzKSB7Ci0gIGZleGNlcHRfdCBfX2Zwc2NyOwotICBmZWdldGVudigmX19mcHNjcik7Ci0gIF9fZnBzY3IgJj0gfl9fZXhjZXB0czsKLSAgX19mcHNjciB8PSAqX19mbGFncCAmIF9fZXhjZXB0czsKLSAgZmVzZXRlbnYoJl9fZnBzY3IpOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXJhaXNlZXhjZXB0KGludCBfX2V4Y2VwdHMpIHsKLSAgZmV4Y2VwdF90IF9fZXggPSBfX2V4Y2VwdHM7Ci0gIGZlc2V0ZXhjZXB0ZmxhZygmX19leCwgX19leGNlcHRzKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmV0ZXN0ZXhjZXB0KGludCBfX2V4Y2VwdHMpIHsKLSAgZmV4Y2VwdF90IF9fZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKLSAgcmV0dXJuIChfX2Zwc2NyICYgX19leGNlcHRzKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWdldHJvdW5kKHZvaWQpIHsKLSAgZmVudl90IF9mcHNjcjsKLSAgZmVnZXRlbnYoJl9mcHNjcik7Ci0gIHJldHVybiAoKF9mcHNjciA+PiBfRlBTQ1JfUk1PREVfU0hJRlQpICYgMHgzKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXNldHJvdW5kKGludCBfX3JvdW5kKSB7Ci0gIGZlbnZfdCBfZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfZnBzY3IpOwotICBfZnBzY3IgJj0gfigweDMgPDwgX0ZQU0NSX1JNT0RFX1NISUZUKTsKLSAgX2Zwc2NyIHw9IChfX3JvdW5kIDw8IF9GUFNDUl9STU9ERV9TSElGVCk7Ci0gIGZlc2V0ZW52KCZfZnBzY3IpOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWhvbGRleGNlcHQoZmVudl90KiBfX2VudnApIHsKLSAgZmVudl90IF9fZW52OwotICBmZWdldGVudigmX19lbnYpOwotICAqX19lbnZwID0gX19lbnY7Ci0gIF9fZW52ICY9IH4oRkVfQUxMX0VYQ0VQVCB8IF9GUFNDUl9FTkFCTEVfTUFTSyk7Ci0gIGZlc2V0ZW52KCZfX2Vudik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7Ci0gIGZleGNlcHRfdCBfX2Zwc2NyOwotICBmZWdldGVudigmX19mcHNjcik7Ci0gIGZlc2V0ZW52KF9fZW52cCk7Ci0gIGZlcmFpc2VleGNlcHQoX19mcHNjciAmIEZFX0FMTF9FWENFUFQpOwotICByZXR1cm4gMDsKLX0KLQotI2lmIF9fQlNEX1ZJU0lCTEUKLQotc3RhdGljIF9faW5saW5lIGludCBmZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7Ci0gIGZlbnZfdCBfX29sZF9mcHNjciwgX19uZXdfZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX29sZF9mcHNjcik7Ci0gIF9fbmV3X2Zwc2NyID0gX19vbGRfZnBzY3IgfCAoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgX0ZQU0NSX0VOQUJMRV9TSElGVDsKLSAgZmVzZXRlbnYoJl9fbmV3X2Zwc2NyKTsKLSAgcmV0dXJuICgoX19vbGRfZnBzY3IgPj4gX0ZQU0NSX0VOQUJMRV9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWRpc2FibGVleGNlcHQoaW50IF9fbWFzaykgewotICBmZW52X3QgX19vbGRfZnBzY3IsIF9fbmV3X2Zwc2NyOwotICBmZWdldGVudigmX19vbGRfZnBzY3IpOwotICBfX25ld19mcHNjciA9IF9fb2xkX2Zwc2NyICYgfigoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgX0ZQU0NSX0VOQUJMRV9TSElGVCk7Ci0gIGZlc2V0ZW52KCZfX25ld19mcHNjcik7Ci0gIHJldHVybiAoKF9fb2xkX2Zwc2NyID4+IF9GUFNDUl9FTkFCTEVfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVnZXRleGNlcHQodm9pZCkgewotICBmZW52X3QgX19mcHNjcjsKLSAgZmVnZXRlbnYoJl9fZnBzY3IpOwotICByZXR1cm4gKChfX2Zwc2NyICYgX0ZQU0NSX0VOQUJMRV9NQVNLKSA+PiBfRlBTQ1JfRU5BQkxFX1NISUZUKTsKLX0KLQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotX19FTkRfREVDTFMKLQotI2VuZGlmIC8qICFfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL2FybS9tYWNoaW5lL2ZlbnYuaCBiL2xpYm0vaW5jbHVkZS9hcm0vbWFjaGluZS9mZW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0ODNlMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vaW5jbHVkZS9hcm0vbWFjaGluZS9mZW52LmgKQEAgLTAsMCArMSw2MyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vYXJtL2ZlbnYuaCx2IDEuNSAyMDA1LzAzLzE2IDE5OjAzOjQ1IGRhcyBFeHAgJAorICovCisKKy8qCisgKiBSZXdyaXR0ZW4gZm9yIEFuZHJvaWQuCisgKgorICogVGhlIEFSTSBGUFNDUiBpcyBkZXNjcmliZWQgaGVyZToKKyAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC9pbmRleC5qc3A/dG9waWM9L2NvbS5hcm0uZG9jLmRkaTAzNDRiL0NoZGZhZmlhLmh0bWwKKyAqLworCisjaWZuZGVmIF9BUk1fRkVOVl9IXworI2RlZmluZSBfQVJNX0ZFTlZfSF8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgX191aW50MzJfdCBmZW52X3Q7Cit0eXBlZGVmIF9fdWludDMyX3QgZmV4Y2VwdF90OworCisvKiBFeGNlcHRpb24gZmxhZ3MuICovCisjZGVmaW5lIEZFX0lOVkFMSUQgICAgMHgwMQorI2RlZmluZSBGRV9ESVZCWVpFUk8gIDB4MDIKKyNkZWZpbmUgRkVfT1ZFUkZMT1cgICAweDA0CisjZGVmaW5lIEZFX1VOREVSRkxPVyAgMHgwOAorI2RlZmluZSBGRV9JTkVYQUNUICAgIDB4MTAKKyNkZWZpbmUgRkVfQUxMX0VYQ0VQVCAoRkVfRElWQllaRVJPIHwgRkVfSU5FWEFDVCB8IEZFX0lOVkFMSUQgfCBcCisgICAgICAgICAgICAgICAgICAgICAgIEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQorCisvKiBSb3VuZGluZyBtb2Rlcy4gKi8KKyNkZWZpbmUgRkVfVE9ORUFSRVNUICAweDAKKyNkZWZpbmUgRkVfVVBXQVJEICAgICAweDEKKyNkZWZpbmUgRkVfRE9XTldBUkQgICAweDIKKyNkZWZpbmUgRkVfVE9XQVJEWkVSTyAweDMKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfQVJNX0ZFTlZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYm0vaW5jbHVkZS9hcm02NC9mZW52LmggYi9saWJtL2luY2x1ZGUvYXJtNjQvZmVudi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmMzYjFkLi4wMDAwMDAwCi0tLSBhL2xpYm0vaW5jbHVkZS9hcm02NC9mZW52LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzIgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vYXJtL2ZlbnYuaCx2IDEuNSAyMDA1LzAzLzE2IDE5OjAzOjQ1IGRhcyBFeHAgJAotICovCi0KLS8qCi0gKiBSZXdyaXR0ZW4gZm9yIEFuZHJvaWQuCi0gKgotICogVGhlIEFSTSBGUFNDUiAoRmxvYXRpbmctcG9pbnQgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyKSBkZXNjcmliZWQgaGVyZToKLSAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC9pbmRleC5qc3A/dG9waWM9L2NvbS5hcm0uZG9jLmRkaTAzNDRiL0NoZGZhZmlhLmh0bWwKLSAqIGhhcyBiZWVuIHNwbGl0IGludG8gdGhlIEZQQ1IgKEZsb2F0aW5nLXBvaW50IENvbnRyb2wgUmVnaXN0ZXIpIGFuZCBGUFNSCi0gKiAoRmxvYXRpbmctcG9pbnQgU3RhdHVzIFJlZ2lzdGVyKSBvbiB0aGUgQVJNdjguIFRoZXNlIGFyZSBkZXNjcmliZWQgYnJpZWZseSBpbgotICogIlByb2NlZHVyZSBDYWxsIFN0YW5kYXJkIGZvciB0aGUgQVJNIDY0LWJpdCBBcmNoaXRlY3R1cmUiCi0gKiBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2MuaWhpMDA1NWEvSUhJMDA1NUFfYWFwY3M2NC5wZGYKLSAqIHNlY3Rpb24gNS4xLjIgU0lNRCBhbmQgRmxvYXRpbmctUG9pbnQgUmVnaXN0ZXJzCi0gKi8KLQotI2lmbmRlZiBfRkVOVl9IXwotI2RlZmluZSBfRkVOVl9IXwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLV9fQkVHSU5fREVDTFMKLQotdHlwZWRlZiBfX3VpbnQzMl90IGZlbnZfdDsKLXR5cGVkZWYgX191aW50MzJfdCBmZXhjZXB0X3Q7Ci0KLS8qIEV4Y2VwdGlvbiBmbGFncy4gKi8KLSNkZWZpbmUgRkVfSU5WQUxJRCAgICAweDAxCi0jZGVmaW5lIEZFX0RJVkJZWkVSTyAgMHgwMgotI2RlZmluZSBGRV9PVkVSRkxPVyAgIDB4MDQKLSNkZWZpbmUgRkVfVU5ERVJGTE9XICAweDA4Ci0jZGVmaW5lIEZFX0lORVhBQ1QgICAgMHgxMAotI2RlZmluZSBGRV9BTExfRVhDRVBUIChGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQotI2RlZmluZSBfRlBTQ1JfRU5BQkxFX1NISUZUIDgKLSNkZWZpbmUgX0ZQU0NSX0VOQUJMRV9NQVNLIChGRV9BTExfRVhDRVBUIDw8IF9GUFNDUl9FTkFCTEVfU0hJRlQpCi0KLS8qIFJvdW5kaW5nIG1vZGVzLiAqLwotI2RlZmluZSBGRV9UT05FQVJFU1QgIDB4MAotI2RlZmluZSBGRV9VUFdBUkQgICAgIDB4MQotI2RlZmluZSBGRV9ET1dOV0FSRCAgIDB4MgotI2RlZmluZSBGRV9UT1dBUkRaRVJPIDB4MwotI2RlZmluZSBfRlBTQ1JfUk1PREVfU0hJRlQgMjIKLQotI2RlZmluZSBGUENSX0lPRSAgICAoMSA8PCA4KQotI2RlZmluZSBGUENSX0RaRSAgICAoMSA8PCA5KQotI2RlZmluZSBGUENSX09GRSAgICAoMSA8PCAxMCkKLSNkZWZpbmUgRlBDUl9VRkUgICAgKDEgPDwgMTEpCi0jZGVmaW5lIEZQQ1JfSVhFICAgICgxIDw8IDEyKQotI2RlZmluZSBGUENSX0lERSAgICAoMSA8PCAxNSkKLSNkZWZpbmUgRlBDUl9MRU4gICAgKDcgPDwgMTYpCi0jZGVmaW5lIEZQQ1JfU1RSSURFICgzIDw8IDIwKQotI2RlZmluZSBGUENSX1JNT0RFICAoMyA8PCAyMikKLSNkZWZpbmUgRlBDUl9GWiAgICAgKDEgPDwgMjQpCi0jZGVmaW5lIEZQQ1JfRE4gICAgICgxIDw8IDI1KQotI2RlZmluZSBGUENSX0FIUCAgICAoMSA8PCAyNikKLSNkZWZpbmUgRlBDUl9NQVNLICAgKEZQQ1JfSU9FIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBDUl9EWkUgfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUENSX09GRSB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQQ1JfVUZFIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBDUl9JWEUgfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUENSX0lERSB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQQ1JfTEVOIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBDUl9TVFJJREUgfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUENSX1JNT0RFIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBDUl9GWiB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQQ1JfRE4gfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUENSX0FIUCApCi0KLSNkZWZpbmUgRlBTUl9JT0MgICAgKDEgPDwgMCkKLSNkZWZpbmUgRlBTUl9EWkMgICAgKDEgPDwgMSkKLSNkZWZpbmUgRlBTUl9PRkMgICAgKDEgPDwgMikKLSNkZWZpbmUgRlBTUl9VRkMgICAgKDEgPDwgMykKLSNkZWZpbmUgRlBTUl9JWEMgICAgKDEgPDwgNCkKLSNkZWZpbmUgRlBTUl9JREMgICAgKDEgPDwgNykKLSNkZWZpbmUgRlBTUl9RQyAgICAgKDEgPDwgMjcpCi0jZGVmaW5lIEZQU1JfViAgICAgICgxIDw8IDI4KQotI2RlZmluZSBGUFNSX0MgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgRlBTUl9aICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIEZQU1JfTiAgICAgICgxIDw8IDMxKQotI2RlZmluZSBGUFNSX01BU0sgICAoRlBTUl9JT0MgfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUFNSX0RaQyB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQU1JfT0ZDIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBTUl9VRkMgfCBcCi0gICAgICAgICAgICAgICAgICAgICBGUFNSX0lYQyB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQU1JfSURDIHwgXAotICAgICAgICAgICAgICAgICAgICAgRlBTUl9RQyB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQU1JfViB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQU1JfQyB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQU1JfWiB8IFwKLSAgICAgICAgICAgICAgICAgICAgIEZQU1JfTiApCi0KLS8qIERlZmF1bHQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQuICovCi1leHRlcm4gY29uc3QgZmVudl90IF9fZmVfZGZsX2VudjsKLSNkZWZpbmUgRkVfREZMX0VOViAoJl9fZmVfZGZsX2VudikKLQotc3RhdGljIF9faW5saW5lIGludCBmZWdldGVudihmZW52X3QqIF9fZW52cCkgewotICAgIGZlbnZfdCBfZnBjciwgX2Zwc3I7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1ycyAlMCxmcGNyIiA6ICI9ciIgKF9mcGNyKSk7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1ycyAlMCxmcHNyIiA6ICI9ciIgKF9mcHNyKSk7Ci0gICpfX2VudnAgPSAoX2ZwY3IgfCBfZnBzcik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlc2V0ZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7Ci0gICAgZmVudl90IF9mcGNyID0gKCpfX2VudnAgJiBGUENSX01BU0spOwotICAgIGZlbnZfdCBfZnBzciA9ICgqX19lbnZwICYgRlBTUl9NQVNLKTsKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibXNyIGZwY3IsJTAiIDogOiJyaSIgKF9mcGNyKSk7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1zciBmcHNyLCUwIiA6IDoicmkiIChfZnBzcikpOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWNsZWFyZXhjZXB0KGludCBfX2V4Y2VwdHMpIHsKLSAgZmV4Y2VwdF90IF9fZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKLSAgX19mcHNjciAmPSB+X19leGNlcHRzOwotICBmZXNldGVudigmX19mcHNjcik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QqIF9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpIHsKLSAgZmV4Y2VwdF90IF9fZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKLSAgKl9fZmxhZ3AgPSBfX2Zwc2NyICYgX19leGNlcHRzOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90KiBfX2ZsYWdwLCBpbnQgX19leGNlcHRzKSB7Ci0gIGZleGNlcHRfdCBfX2Zwc2NyOwotICBmZWdldGVudigmX19mcHNjcik7Ci0gIF9fZnBzY3IgJj0gfl9fZXhjZXB0czsKLSAgX19mcHNjciB8PSAqX19mbGFncCAmIF9fZXhjZXB0czsKLSAgZmVzZXRlbnYoJl9fZnBzY3IpOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXJhaXNlZXhjZXB0KGludCBfX2V4Y2VwdHMpIHsKLSAgZmV4Y2VwdF90IF9fZXggPSBfX2V4Y2VwdHM7Ci0gIGZlc2V0ZXhjZXB0ZmxhZygmX19leCwgX19leGNlcHRzKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmV0ZXN0ZXhjZXB0KGludCBfX2V4Y2VwdHMpIHsKLSAgZmV4Y2VwdF90IF9fZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKLSAgcmV0dXJuIChfX2Zwc2NyICYgX19leGNlcHRzKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWdldHJvdW5kKHZvaWQpIHsKLSAgZmVudl90IF9mcHNjcjsKLSAgZmVnZXRlbnYoJl9mcHNjcik7Ci0gIHJldHVybiAoKF9mcHNjciA+PiBfRlBTQ1JfUk1PREVfU0hJRlQpICYgMHgzKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXNldHJvdW5kKGludCBfX3JvdW5kKSB7Ci0gIGZlbnZfdCBfZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfZnBzY3IpOwotICBfZnBzY3IgJj0gfigweDMgPDwgX0ZQU0NSX1JNT0RFX1NISUZUKTsKLSAgX2Zwc2NyIHw9IChfX3JvdW5kIDw8IF9GUFNDUl9STU9ERV9TSElGVCk7Ci0gIGZlc2V0ZW52KCZfZnBzY3IpOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWhvbGRleGNlcHQoZmVudl90KiBfX2VudnApIHsKLSAgZmVudl90IF9fZW52OwotICBmZWdldGVudigmX19lbnYpOwotICAqX19lbnZwID0gX19lbnY7Ci0gIF9fZW52ICY9IH4oRkVfQUxMX0VYQ0VQVCB8IF9GUFNDUl9FTkFCTEVfTUFTSyk7Ci0gIGZlc2V0ZW52KCZfX2Vudik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7Ci0gIGZleGNlcHRfdCBfX2Zwc2NyOwotICBmZWdldGVudigmX19mcHNjcik7Ci0gIGZlc2V0ZW52KF9fZW52cCk7Ci0gIGZlcmFpc2VleGNlcHQoX19mcHNjciAmIEZFX0FMTF9FWENFUFQpOwotICByZXR1cm4gMDsKLX0KLQotI2lmIF9fQlNEX1ZJU0lCTEUKLQotc3RhdGljIF9faW5saW5lIGludCBmZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7Ci0gIGZlbnZfdCBfX29sZF9mcHNjciwgX19uZXdfZnBzY3I7Ci0gIGZlZ2V0ZW52KCZfX29sZF9mcHNjcik7Ci0gIF9fbmV3X2Zwc2NyID0gX19vbGRfZnBzY3IgfCAoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgX0ZQU0NSX0VOQUJMRV9TSElGVDsKLSAgZmVzZXRlbnYoJl9fbmV3X2Zwc2NyKTsKLSAgcmV0dXJuICgoX19vbGRfZnBzY3IgPj4gX0ZQU0NSX0VOQUJMRV9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWRpc2FibGVleGNlcHQoaW50IF9fbWFzaykgewotICBmZW52X3QgX19vbGRfZnBzY3IsIF9fbmV3X2Zwc2NyOwotICBmZWdldGVudigmX19vbGRfZnBzY3IpOwotICBfX25ld19mcHNjciA9IF9fb2xkX2Zwc2NyICYgfigoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgX0ZQU0NSX0VOQUJMRV9TSElGVCk7Ci0gIGZlc2V0ZW52KCZfX25ld19mcHNjcik7Ci0gIHJldHVybiAoKF9fb2xkX2Zwc2NyID4+IF9GUFNDUl9FTkFCTEVfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVnZXRleGNlcHQodm9pZCkgewotICBmZW52X3QgX19mcHNjcjsKLSAgZmVnZXRlbnYoJl9fZnBzY3IpOwotICByZXR1cm4gKChfX2Zwc2NyICYgX0ZQU0NSX0VOQUJMRV9NQVNLKSA+PiBfRlBTQ1JfRU5BQkxFX1NISUZUKTsKLX0KLQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotX19FTkRfREVDTFMKLQotI2VuZGlmIC8qICFfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL2FybTY0L21hY2hpbmUvZmVudi5oIGIvbGlibS9pbmNsdWRlL2FybTY0L21hY2hpbmUvZmVudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NTY4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL2luY2x1ZGUvYXJtNjQvbWFjaGluZS9mZW52LmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2FybS9mZW52LmgsdiAxLjUgMjAwNS8wMy8xNiAxOTowMzo0NSBkYXMgRXhwICQKKyAqLworCisvKgorICogSW4gQVJNdjgsIEFBcmNoNjQgc3RhdGUsIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiBpcyBjb250cm9sbGVkIGJ5OgorICoKKyAqICAqIEZQQ1IgLSAzMkJpdCBGbG9hdGluZy1Qb2ludCBDb250cm9sIFJlZ2lzdGVyOgorICogICAgICAqIFszMToyN10gLSBSZXNlcnZlZCwgUmVzMDsKKyAqICAgICAgKiBbMjZdICAgIC0gQUhQLCBBbHRlcm5hdGl2ZSBoYWxmLXByZWNpc2lvbiBjb250cm9sIGJpdDsKKyAqICAgICAgKiBbMjVdICAgIC0gRE4sIERlZmF1bHQgTmFOIG1vZGUgY29udHJvbCBiaXQ7CisgKiAgICAgICogWzI0XSAgICAtIEZaLCBGbHVzaC10by16ZXJvIG1vZGUgY29udHJvbCBiaXQ7CisgKiAgICAgICogWzIzOjIyXSAtIFJNb2RlLCBSb3VuZGluZyBNb2RlIGNvbnRyb2wgZmllbGQ6CisgKiAgICAgICAgICAgICogMDAgIC0gUm91bmQgdG8gTmVhcmVzdCAoUk4pIG1vZGU7CisgKiAgICAgICAgICAgICogMDEgIC0gUm91bmQgdG93YXJkcyBQbHVzIEluZmluaXR5IChSUCkgbW9kZTsKKyAqICAgICAgICAgICAgKiAxMCAgLSBSb3VuZCB0b3dhcmRzIE1pbnVzIEluZmluaXR5IChSTSkgbW9kZTsKKyAqICAgICAgICAgICAgKiAxMSAgLSBSb3VuZCB0b3dhcmRzIFplcm8gKFJaKSBtb2RlLgorICogICAgICAqIFsyMToyMF0gLSBTdHJpZGUsIGlnbm9yZWQgZHVyaW5nIEFBcmNoNjQgZXhlY3V0aW9uOworICogICAgICAqIFsxOV0gICAgLSBSZXNlcnZlZCwgUmVzMDsKKyAqICAgICAgKiBbMTg6MTZdIC0gTGVuLCBpZ25vcmVkIGR1cmluZyBBQXJjaDY0IGV4ZWN1dGlvbjsKKyAqICAgICAgKiBbMTVdICAgIC0gSURFLCBJbnB1dCBEZW5vcm1hbCBleGNlcHRpb24gdHJhcDsKKyAqICAgICAgKiBbMTQ6MTNdIC0gUmVzZXJ2ZWQsIFJlczA7CisgKiAgICAgICogWzEyXSAgICAtIElYRSwgSW5leGFjdCBleGNlcHRpb24gdHJhcDsKKyAqICAgICAgKiBbMTFdICAgIC0gVUZFLCBVbmRlcmZsb3cgZXhjZXB0aW9uIHRyYXA7CisgKiAgICAgICogWzEwXSAgICAtIE9GRSwgT3ZlcmZsb3cgZXhjZXB0aW9uIHRyYXA7CisgKiAgICAgICogWzldICAgICAtIERaRSwgRGl2aXNpb24gYnkgWmVybyBleGNlcHRpb247CisgKiAgICAgICogWzhdICAgICAtIElPRSwgSW52YWxpZCBPcGVyYXRpb24gZXhjZXB0aW9uOworICogICAgICAqIFs3OjBdICAgLSBSZXNlcnZlZCwgUmVzMC4KKyAqCisgKiAgKiBGUFNSIC0gMzJCaXQgRmxvYXRpbmctUG9pbnQgU3RhdHVzIFJlZ2lzdGVyOgorICogICAgICAqIFszMV0gICAgLSBOLCBOZWdhdGl2ZSBjb25kaXRpb24gZmxhZyBmb3IgQUFyY2gzMiAoQUFyY2g2NCBzZXRzIFBTVEFURS5OKTsKKyAqICAgICAgKiBbMzBdICAgIC0gWiwgWmVybyBjb25kaXRpb24gZmxhZyBmb3IgQUFyY2gzMiAoQUFyY2g2NCBzZXRzIFBTVEFURS5aKTsKKyAqICAgICAgKiBbMjldICAgIC0gQywgQ2FycnkgY29uZGl0b24gZmxhZyBmb3IgQUFyY2gzMiAoQUFyY2g2NCBzZXRzIFBTVEFURS5DKTsKKyAqICAgICAgKiBbMjhdICAgIC0gViwgT3ZlcmZsb3cgY29uZGl0b24gZmxhZyBmb3IgQUFyY2gzMiAoQUFyY2g2NCBzZXRzIFBTVEFURS5WKTsKKyAqICAgICAgKiBbMjddICAgIC0gUUMsIEN1bXVsYXRpdmUgc2F0dXJhdGlvbiBiaXQsIEFkdmFuY2VkIFNJTUQgb25seTsKKyAqICAgICAgKiBbMjY6OF0gIC0gUmVzZXJ2ZWQsIFJlczA7CisgKiAgICAgICogWzddICAgICAtIElEQywgSW5wdXQgRGVub3JtYWwgY3VtdWxhdGl2ZSBleGNlcHRpb247CisgKiAgICAgICogWzY6NV0gICAtIFJlc2VydmVkLCBSZXMwOworICogICAgICAqIFs0XSAgICAgLSBJWEMsIEluZXhhY3QgY3VtdWxhdGl2ZSBleGNlcHRpb247CisgKiAgICAgICogWzNdICAgICAtIFVGQywgVW5kZXJmbG93IGN1bXVsYXRpdmUgZXhjZXB0aW9uOworICogICAgICAqIFsyXSAgICAgLSBPRkMsIE92ZXJmbG93IGN1bXVsYXRpdmUgZXhjZXB0aW9uOworICogICAgICAqIFsxXSAgICAgLSBEWkMsIERpdmlzaW9uIGJ5IFplcm8gY3VtdWxhdGl2ZSBleGNlcHRpb247CisgKiAgICAgICogWzBdICAgICAtIElPQywgSW52YWxpZCBPcGVyYXRpb24gY3VtdWxhdGl2ZSBleGNlcHRpb24uCisgKi8KKworI2lmbmRlZiBfQVJNNjRfRkVOVl9IXworI2RlZmluZSBfQVJNNjRfRkVOVl9IXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKwordHlwZWRlZiBzdHJ1Y3QgeworICBfX3VpbnQzMl90IF9fY29udHJvbDsgICAgIC8qIEZQQ1IsIEZsb2F0aW5nLXBvaW50IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX191aW50MzJfdCBfX3N0YXR1czsgICAgICAvKiBGUFNSLCBGbG9hdGluZy1wb2ludCBTdGF0dXMgUmVnaXN0ZXIgKi8KK30gZmVudl90OworCit0eXBlZGVmIF9fdWludDMyX3QgZmV4Y2VwdF90OworCisvKiBFeGNlcHRpb24gZmxhZ3MuICovCisjZGVmaW5lIEZFX0lOVkFMSUQgICAgMHgwMQorI2RlZmluZSBGRV9ESVZCWVpFUk8gIDB4MDIKKyNkZWZpbmUgRkVfT1ZFUkZMT1cgICAweDA0CisjZGVmaW5lIEZFX1VOREVSRkxPVyAgMHgwOAorI2RlZmluZSBGRV9JTkVYQUNUICAgIDB4MTAKKyNkZWZpbmUgRkVfREVOT1JNQUwgICAweDgwCisjZGVmaW5lIEZFX0FMTF9FWENFUFQgKEZFX0RJVkJZWkVSTyB8IEZFX0lORVhBQ1QgfCBGRV9JTlZBTElEIHwgXAorICAgICAgICAgICAgICAgICAgICAgICBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVyB8IEZFX0RFTk9STUFMKQorCisvKiBSb3VuZGluZyBtb2Rlcy4gKi8KKyNkZWZpbmUgRkVfVE9ORUFSRVNUICAweDAKKyNkZWZpbmUgRkVfVVBXQVJEICAgICAweDEKKyNkZWZpbmUgRkVfRE9XTldBUkQgICAweDIKKyNkZWZpbmUgRkVfVE9XQVJEWkVSTyAweDMKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfQVJNNjRfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL2ZlbnYuaCBiL2xpYm0vaW5jbHVkZS9mZW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlY2M4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vaW5jbHVkZS9mZW52LmgKQEAgLTAsMCArMSw3MSBAQAorLyogICRPcGVuQlNEOiBmZW52LmgsdiAxLjIgMjAxMS8wNS8yNSAyMTo0Njo0OSBtYXJ0eW5hcyBFeHAgJCAqLworLyogICROZXRCU0Q6IGZlbnYuaCx2IDEuMi40LjEgMjAxMS8wMi8wOCAxNjoxODo1NSBib3V5ZXIgRXhwICQgICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0ZFTlZfSF8KKyNkZWZpbmUgX0ZFTlZfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvZmVudi5oPgorCitfX0JFR0lOX0RFQ0xTCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKKworaW50IGZlY2xlYXJleGNlcHQoaW50KTsKK2ludCBmZWdldGV4Y2VwdGZsYWcoZmV4Y2VwdF90ICosIGludCk7CitpbnQgZmVyYWlzZWV4Y2VwdChpbnQpOworaW50IGZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QgKiwgaW50KTsKK2ludCBmZXRlc3RleGNlcHQoaW50KTsKKworaW50IGZlZ2V0cm91bmQodm9pZCk7CitpbnQgZmVzZXRyb3VuZChpbnQpOworCitpbnQgZmVnZXRlbnYoZmVudl90ICopOworaW50IGZlaG9sZGV4Y2VwdChmZW52X3QgKik7CitpbnQgZmVzZXRlbnYoY29uc3QgZmVudl90ICopOworaW50IGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCAqKTsKKworaW50IGZlZW5hYmxlZXhjZXB0KGludCk7CitpbnQgZmVkaXNhYmxlZXhjZXB0KGludCk7CitpbnQgZmVnZXRleGNlcHQodm9pZCk7CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IHJlcHJlc2VudHMgdGhlIGRlZmF1bHQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQKKyAqICh0aGF0IGlzLCB0aGUgb25lIGluc3RhbGxlZCBhdCBwcm9ncmFtIHN0YXJ0dXApIGFuZCBoYXMgdHlwZSBwb2ludGVyIHRvCisgKiBjb25zdC1xdWFsaWZpZWQgZmVudl90LgorICoKKyAqIEl0IGNhbiBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbnMgdGhhdCBtYW5hZ2UgdGhlIGZsb2F0aW5nLXBvaW50CisgKiBlbnZpcm9ubWVudCwgbmFtZWx5IGZlc2V0ZW52KCkgYW5kIGZldXBkYXRlZW52KCkuCisgKi8KK2V4dGVybiBjb25zdCBmZW52X3QgX19mZV9kZmxfZW52OworI2RlZmluZSBGRV9ERkxfRU5WICAoJl9fZmVfZGZsX2VudikKKworI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAgLyogISBfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL2kzODcvZmVudi5oIGIvbGlibS9pbmNsdWRlL2kzODcvZmVudi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDQyMWMwLi4wMDAwMDAwCi0tLSBhL2xpYm0vaW5jbHVkZS9pMzg3L2ZlbnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L2ZlbnYuaCx2IDEuNCAyMDA1LzAzLzE3IDIyOjIxOjQ2IGRhcyBFeHAgJAotICovCi0KLSNpZm5kZWYJX0ZFTlZfSF8KLSNkZWZpbmUJX0ZFTlZfSF8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi1fX0JFR0lOX0RFQ0xTCi0KLS8qICAgICAgICAgICAgICAgICAgIAotICogVG8gcHJlc2VydmUgYmluYXJ5IGNvbXBhdGliaWxpdHkgd2l0aCBGcmVlQlNEIDUuMywgd2UgcGFjayB0aGUKLSAqIG14Y3NyIGludG8gc29tZSByZXNlcnZlZCBmaWVsZHMsIHJhdGhlciB0aGFuIGNoYW5naW5nIHNpemVvZihmZW52X3QpLgotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JX191aW50MTZfdAlfX2NvbnRyb2w7Ci0JX191aW50MTZfdCAgICAgIF9fbXhjc3JfaGk7Ci0JX191aW50MTZfdAlfX3N0YXR1czsKLQlfX3VpbnQxNl90ICAgICAgX19teGNzcl9sbzsKLQlfX3VpbnQzMl90CV9fdGFnOwotCWNoYXIJCV9fb3RoZXJbMTZdOwotfSBmZW52X3Q7Ci0KLXR5cGVkZWYJX191aW50MTZfdAlmZXhjZXB0X3Q7Ci0KLS8qIEV4Y2VwdGlvbiBmbGFncyAqLwotI2RlZmluZQlGRV9JTlZBTElECTB4MDEKLSNkZWZpbmUJRkVfREVOT1JNQUwJMHgwMgotI2RlZmluZQlGRV9ESVZCWVpFUk8JMHgwNAotI2RlZmluZQlGRV9PVkVSRkxPVwkweDA4Ci0jZGVmaW5lCUZFX1VOREVSRkxPVwkweDEwCi0jZGVmaW5lCUZFX0lORVhBQ1QJMHgyMAotI2RlZmluZQlGRV9BTExfRVhDRVBUCShGRV9ESVZCWVpFUk8gfCBGRV9ERU5PUk1BTCB8IEZFX0lORVhBQ1QgfCBcCi0JCQkgRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQotCi0vKiBSb3VuZGluZyBtb2RlcyAqLwotI2RlZmluZQlGRV9UT05FQVJFU1QJMHgwMDAwCi0jZGVmaW5lCUZFX0RPV05XQVJECTB4MDQwMAotI2RlZmluZQlGRV9VUFdBUkQJMHgwODAwCi0jZGVmaW5lCUZFX1RPV0FSRFpFUk8JMHgwYzAwCi0jZGVmaW5lCV9ST1VORF9NQVNLCShGRV9UT05FQVJFU1QgfCBGRV9ET1dOV0FSRCB8IFwKLQkJCSBGRV9VUFdBUkQgfCBGRV9UT1dBUkRaRVJPKQotCi0vKiBEZWZhdWx0IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50ICovCi1leHRlcm4gY29uc3QgZmVudl90CV9fZmVfZGZsX2VudjsKLSNkZWZpbmUJRkVfREZMX0VOVgkoJl9fZmVfZGZsX2VudikKLQotLyogQzk5IGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiBmdW5jdGlvbnMgKi8KLWludCBmZWNsZWFyZXhjZXB0KGludCBleGNlcHRzKTsKLWludCBmZWdldGV4Y2VwdGZsYWcoZmV4Y2VwdF90ICpmbGFncCwgaW50IGV4Y2VwdHMpOwotaW50IGZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QgKmZsYWdwLCBpbnQgZXhjZXB0cyk7Ci0vKiBmZXJhaXNlZXhjZXB0IGRvZXMgbm90IHNldCB0aGUgaW5leGFjdCBmbGFnIG9uIG92ZXJmbG93L3VuZGVyZmxvdyAqLwotaW50IGZlcmFpc2VleGNlcHQoaW50IGV4Y2VwdHMpOwotaW50IGZldGVzdGV4Y2VwdChpbnQgZXhjZXB0cyk7Ci0KLS8qIEM5OSByb3VuZGluZyBjb250cm9sIGZ1bmN0aW9ucyAqLwotaW50IGZlZ2V0cm91bmQodm9pZCk7Ci1pbnQgZmVzZXRyb3VuZChpbnQgcm91bmQpOwotCi0vKiBDOTkgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgZnVuY3Rpb25zICovCi1pbnQgZmVnZXRlbnYoZmVudl90ICpfX2VudnApOwotaW50IGZlaG9sZGV4Y2VwdChmZW52X3QgKl9fZW52cCk7Ci1pbnQgZmVzZXRlbnYoY29uc3QgZmVudl90ICplbnZwKTsKLWludCBmZXVwZGF0ZWVudihjb25zdCBmZW52X3QgKl9fZW52cCk7Ci0KLSNpZiBfX0JTRF9WSVNJQkxFCi0vKiBBZGRpdGlvbmFsIHN1cHBvcnQgZnVuY3Rpb25zIHRvIHNldC9xdWVyeSBmbG9hdGluZyBwb2ludCB0cmFwcyAqLwotaW50IGZlZW5hYmxlZXhjZXB0KGludCBfX21hc2spOwotaW50IGZlZGlzYWJsZWV4Y2VwdChpbnQgX19tYXNrKTsKLWludCBmZWdldGV4Y2VwdCh2b2lkKTsKLQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotX19FTkRfREVDTFMKLQotI2VuZGlmCS8qICFfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL2kzODcvbWFjaGluZS9mZW52LmggYi9saWJtL2luY2x1ZGUvaTM4Ny9tYWNoaW5lL2ZlbnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTQ1YWRkCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS9pbmNsdWRlL2kzODcvbWFjaGluZS9mZW52LmgKQEAgLTAsMCArMSw2OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9mZW52LmgsdiAxLjQgMjAwNS8wMy8xNyAyMjoyMTo0NiBkYXMgRXhwICQKKyAqLworCisjaWZuZGVmIF9JMzg3X0ZFTlZfSF8KKyNkZWZpbmUgX0kzODdfRkVOVl9IXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyoKKyAqIFRvIHByZXNlcnZlIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGggRnJlZUJTRCA1LjMsIHdlIHBhY2sgdGhlCisgKiBteGNzciBpbnRvIHNvbWUgcmVzZXJ2ZWQgZmllbGRzLCByYXRoZXIgdGhhbiBjaGFuZ2luZyBzaXplb2YoZmVudl90KS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBfX3VpbnQxNl90IF9fY29udHJvbDsKKyAgX191aW50MTZfdCBfX214Y3NyX2hpOworICBfX3VpbnQxNl90IF9fc3RhdHVzOworICBfX3VpbnQxNl90IF9fbXhjc3JfbG87CisgIF9fdWludDMyX3QgX190YWc7CisgIGNoYXIgICAgICAgX19vdGhlclsxNl07Cit9IGZlbnZfdDsKKwordHlwZWRlZiBfX3VpbnQxNl90IGZleGNlcHRfdDsKKworLyogRXhjZXB0aW9uIGZsYWdzICovCisjZGVmaW5lIEZFX0lOVkFMSUQgICAgMHgwMQorI2RlZmluZSBGRV9ERU5PUk1BTCAgIDB4MDIKKyNkZWZpbmUgRkVfRElWQllaRVJPICAweDA0CisjZGVmaW5lIEZFX09WRVJGTE9XICAgMHgwOAorI2RlZmluZSBGRV9VTkRFUkZMT1cgIDB4MTAKKyNkZWZpbmUgRkVfSU5FWEFDVCAgICAweDIwCisjZGVmaW5lIEZFX0FMTF9FWENFUFQgKEZFX0RJVkJZWkVSTyB8IEZFX0RFTk9STUFMIHwgRkVfSU5FWEFDVCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQorCisvKiBSb3VuZGluZyBtb2RlcyAqLworI2RlZmluZSBGRV9UT05FQVJFU1QgIDB4MDAwMAorI2RlZmluZSBGRV9ET1dOV0FSRCAgIDB4MDQwMAorI2RlZmluZSBGRV9VUFdBUkQgICAgIDB4MDgwMAorI2RlZmluZSBGRV9UT1dBUkRaRVJPIDB4MGMwMAorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIUkzODdfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL21hdGguaCBiL2xpYm0vaW5jbHVkZS9tYXRoLmgKaW5kZXggYjEzZWNhOS4uM2VjYTE0MCAxMDA2NDQKLS0tIGEvbGlibS9pbmNsdWRlL21hdGguaAorKysgYi9saWJtL2luY2x1ZGUvbWF0aC5oCkBAIC0xOCw5ICsxOCwxMSBAQAogI2RlZmluZQlfTUFUSF9IXwogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL190eXBlcy5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCitfX0JFR0lOX0RFQ0xTCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHB1c2goZGVmYXVsdCkKKwogLyoKICAqIEFOU0kvUE9TSVgKICAqLwpAQCAtMzQsMTEgKzM2LDExIEBACiAJZmxvYXQJCV9fdWY7CiB9IF9fbmFuOwogCi0jaWYgX19HTlVDX1BSRVJFUV9fKDMsIDMpIHx8IChkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmIF9fSU5URUxfQ09NUElMRVIgPj0gODAwKQorI2lmIF9fR05VQ19QUkVSRVEoMywgMykgfHwgKGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgX19JTlRFTF9DT01QSUxFUiA+PSA4MDApCiAjZGVmaW5lCV9fTUFUSF9CVUlMVElOX0NPTlNUQU5UUwogI2VuZGlmCiAKLSNpZiBfX0dOVUNfUFJFUkVRX18oMywgMCkgJiYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKKyNpZiBfX0dOVUNfUFJFUkVRKDMsIDApICYmICFkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCiAjZGVmaW5lCV9fTUFUSF9CVUlMVElOX1JFTE9QUwogI2VuZGlmCiAKQEAgLTEyNCw4ICsxMjYsMTAgQEAKICAgICA6IChzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKSkgPyBfX3NpZ25iaXQoeCkJXAogICAgIDogX19zaWduYml0bCh4KSkKIAotdHlwZWRlZglfX2RvdWJsZV90CWRvdWJsZV90OwotdHlwZWRlZglfX2Zsb2F0X3QJZmxvYXRfdDsKK3R5cGVkZWYgZG91YmxlIF9fZG91YmxlX3Q7Cit0eXBlZGVmIF9fZG91YmxlX3QgZG91YmxlX3Q7Cit0eXBlZGVmIGZsb2F0IF9fZmxvYXRfdDsKK3R5cGVkZWYgX19mbG9hdF90IGZsb2F0X3Q7CiAjZW5kaWYgLyogX19JU09fQ19WSVNJQkxFID49IDE5OTkgKi8KIAogLyoKQEAgLTE2NCw3ICsxNjgsNyBAQAogICogZWZmZWN0IG9mIHJhaXNpbmcgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9ucywgc28gdGhleSBhcmUgbm90IGRlY2xhcmVkCiAgKiBhcyBfX3B1cmUyLiAgSW4gQzk5LCBGRU5WX0FDQ0VTUyBhZmZlY3RzIHRoZSBwdXJpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLgogICovCi1fX0JFR0lOX0RFQ0xTCisKIC8qCiAgKiBBTlNJL1BPU0lYCiAgKi8KQEAgLTI4MSw2ICsyODUsNyBAQAogZG91YmxlCWRyZW0oZG91YmxlLCBkb3VibGUpOwogaW50CWZpbml0ZShkb3VibGUpIF9fcHVyZTI7CiBpbnQJaXNuYW5mKGZsb2F0KSBfX3B1cmUyOworbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsKGxvbmcgZG91YmxlKTsKIAogLyoKICAqIFJlZW50cmFudCB2ZXJzaW9uIG9mIGdhbW1hICYgbGdhbW1hOyBwYXNzZXMgc2lnbmdhbSBiYWNrIGJ5IHJlZmVyZW5jZQpAQCAtMzk1LDE2ICs0MDAsMjMgQEAKICAqIGxvbmcgZG91YmxlIHZlcnNpb25zIG9mIElTTy9QT1NJWCBtYXRoIGZ1bmN0aW9ucwogICovCiAjaWYgX19JU09fQ19WSVNJQkxFID49IDE5OTkKK2xvbmcgZG91YmxlCWFjb3NobChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlhY29zbChsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQlhc2luaGwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJYXNpbmwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJYXRhbjJsKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQlhdGFuaGwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJYXRhbmwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJY2JydGwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJY2VpbGwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJY29weXNpZ25sKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSkgX19wdXJlMjsKK2xvbmcgZG91YmxlCWNvc2hsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWNvc2wobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJZXJmY2wobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJZXJmbChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlleHAybChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlleHBsKGxvbmcgZG91YmxlKTsKK2xvbmcgZG91YmxlCWV4cG0xbChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlmYWJzbChsb25nIGRvdWJsZSkgX19wdXJlMjsKIGxvbmcgZG91YmxlCWZkaW1sKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlmbG9vcmwobG9uZyBkb3VibGUpOwpAQCAtNDE2LDkgKzQyOCwxNCBAQAogbG9uZyBkb3VibGUJaHlwb3RsKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7CiBpbnQJCWlsb2dibChsb25nIGRvdWJsZSkgX19wdXJlMjsKIGxvbmcgZG91YmxlCWxkZXhwbChsb25nIGRvdWJsZSwgaW50KTsKK2xvbmcgZG91YmxlCWxnYW1tYWwobG9uZyBkb3VibGUpOwogbG9uZyBsb25nCWxscmludGwobG9uZyBkb3VibGUpOwogbG9uZyBsb25nCWxscm91bmRsKGxvbmcgZG91YmxlKTsKK2xvbmcgZG91YmxlCWxvZzEwbChsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQlsb2cxcGwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJbG9nMmwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJbG9nYmwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJbG9nbChsb25nIGRvdWJsZSk7CiBsb25nCQlscmludGwobG9uZyBkb3VibGUpOwogbG9uZwkJbHJvdW5kbChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQltb2RmbChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUgKik7IC8qIGZ1bmRhbWVudGFsbHkgIV9fcHVyZTIgKi8KQEAgLTQyOCw1MyArNDQ1LDMwIEBACiBkb3VibGUJCW5leHR0b3dhcmQoZG91YmxlLCBsb25nIGRvdWJsZSk7CiBmbG9hdAkJbmV4dHRvd2FyZGYoZmxvYXQsIGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCW5leHR0b3dhcmRsKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQlwb3dsKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlyZW1haW5kZXJsKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlyZW1xdW9sKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSwgaW50ICopOwogbG9uZyBkb3VibGUJcmludGwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJcm91bmRsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCXNjYWxibG5sKGxvbmcgZG91YmxlLCBsb25nKTsKIGxvbmcgZG91YmxlCXNjYWxibmwobG9uZyBkb3VibGUsIGludCk7Citsb25nIGRvdWJsZQlzaW5obChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlzaW5sKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCXNxcnRsKGxvbmcgZG91YmxlKTsKK2xvbmcgZG91YmxlCXRhbmhsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCXRhbmwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJdGdhbW1hbChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQl0cnVuY2wobG9uZyBkb3VibGUpOwogCiAjZW5kaWYgLyogX19JU09fQ19WSVNJQkxFID49IDE5OTkgKi8KKworI2lmIGRlZmluZWQoX0dOVV9TT1VSQ0UpCit2b2lkIHNpbmNvcyhkb3VibGUsIGRvdWJsZSosIGRvdWJsZSopOwordm9pZCBzaW5jb3NmKGZsb2F0LCBmbG9hdCosIGZsb2F0Kik7Cit2b2lkIHNpbmNvc2wobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKiwgbG9uZyBkb3VibGUqKTsKKyNlbmRpZiAvKiBfR05VX1NPVVJDRSAqLworCisjcHJhZ21hIEdDQyB2aXNpYmlsaXR5IHBvcAogX19FTkRfREVDTFMKIAogI2VuZGlmIC8qICFfTUFUSF9IXyAqLwotCi0vKiBzZXBhcmF0ZSBoZWFkZXIgZm9yIGNtYXRoICovCi0jaWZuZGVmIF9NQVRIX0VYVFJBX0hfCi0jaWYgX19JU09fQ19WSVNJQkxFID49IDE5OTkKLSNpZiBfREVDTEFSRV9DOTlfTERCTF9NQVRICi0KLSNkZWZpbmUgX01BVEhfRVhUUkFfSF8KLQotLyoKLSAqIGV4dHJhIGxvbmcgZG91YmxlIHZlcnNpb25zIG9mIG1hdGggZnVuY3Rpb25zIGZvciBDOTkgYW5kIGNtYXRoCi0gKi8KLV9fQkVHSU5fREVDTFMKLQotbG9uZyBkb3VibGUJYWNvc2hsKGxvbmcgZG91YmxlKTsKLWxvbmcgZG91YmxlCWFzaW5obChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQlhdGFuaGwobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJY29zaGwobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJZXJmY2wobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJZXJmbChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQlleHBtMWwobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJbGdhbW1hbChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQlsb2cxMGwobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJbG9nMXBsKGxvbmcgZG91YmxlKTsKLWxvbmcgZG91YmxlCWxvZzJsKGxvbmcgZG91YmxlKTsKLWxvbmcgZG91YmxlCWxvZ2wobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJcG93bChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJc2luaGwobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJdGFuaGwobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJdGdhbW1hbChsb25nIGRvdWJsZSk7Ci0KLV9fRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiAhX0RFQ0xBUkVfQzk5X0xEQkxfTUFUSCAqLwotI2VuZGlmIC8qIF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5ICovCi0jZW5kaWYgLyogIV9NQVRIX0VYVFJBX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvbWlwcy9mZW52LmggYi9saWJtL2luY2x1ZGUvbWlwcy9mZW52LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNjljZjguLjAwMDAwMDAKLS0tIGEvbGlibS9pbmNsdWRlL21pcHMvZmVudi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2FybS9mZW52LmgsdiAxLjUgMjAwNS8wMy8xNiAxOTowMzo0NSBkYXMgRXhwICQKLSAqLwotCi0vKgotICAgUmV3cml0dGVuIGZvciBBbmRyb2lkLgotKi8KLQotLyogTUlQUyBGUFUgZmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWdpc3RlciBiaXRzLgotICoKLSAqIDMxLTI1ICAtPiBmbG9hdGluZyBwb2ludCBjb25kaXRpb25zIGNvZGUgYml0cyBzZXQgYnkgRlAgY29tcGFyZQotICogICAgICAgICAgIGluc3RydWN0aW9ucwotICogMjQgICAgIC0+IGZsdXNoIGRlbm9ybWFsaXplZCByZXN1bHRzIHRvIHplcm8gaW5zdGVhZCBvZgotICogICAgICAgICAgIGNhdXNpbmcgdW5pbXBsZW1lbnRlZCBvcGVyYXRpb24gZXhjZXB0aW9uLgotICogMjMgICAgIC0+IENvbmRpdGlvbiBiaXQKLSAqIDIyICAgICAtPiBJbiBjb25qdW5jdGlvbiB3aXRoIEZTIGRldGVjdHMgZGVub3JtYWxpemVkCi0gKiAgICAgICAgICAgb3BlcmFuZHMgYW5kIHJlcGxhY2VzIHRoZW0gaW50ZXJuYWxseSB3aXRoIDAuCi0gKiAyMSAgICAgLT4gSW4gY29uanVuY3Rpb24gd2l0aCBGUyBmb3JjZXMgZGVub3JtYWxpemVkIG9wZXJhbmRzCi0gKiAgICAgICAgICAgdG8gdGhlIGNsb3Nlc3Qgbm9ybWFsaXplZCB2YWx1ZS4KLSAqIDIwLTE4ICAtPiByZXNlcnZlZCAocmVhZCBhcyAwLCB3cml0ZSB3aXRoIDApCi0gKiAxNyAgICAgLT4gY2F1c2UgYml0IGZvciB1bmltcGxlbWVudGVkIG9wZXJhdGlvbgotICogMTYgICAgIC0+IGNhdXNlIGJpdCBmb3IgaW52YWxpZCBleGNlcHRpb24KLSAqIDE1ICAgICAtPiBjYXVzZSBiaXQgZm9yIGRpdmlzaW9uIGJ5IHplcm8gZXhjZXB0aW9uCi0gKiAxNCAgICAgLT4gY2F1c2UgYml0IGZvciBvdmVyZmxvdyBleGNlcHRpb24KLSAqIDEzICAgICAtPiBjYXVzZSBiaXQgZm9yIHVuZGVyZmxvdyBleGNlcHRpb24KLSAqIDEyICAgICAtPiBjYXVzZSBiaXQgZm9yIGluZXhhY3QgZXhjZXB0aW9uCi0gKiAxMSAgICAgLT4gZW5hYmxlIGV4Y2VwdGlvbiBmb3IgaW52YWxpZCBleGNlcHRpb24KLSAqIDEwICAgICAtPiBlbmFibGUgZXhjZXB0aW9uIGZvciBkaXZpc2lvbiBieSB6ZXJvIGV4Y2VwdGlvbgotICogIDkgICAgIC0+IGVuYWJsZSBleGNlcHRpb24gZm9yIG92ZXJmbG93IGV4Y2VwdGlvbgotICogIDggICAgIC0+IGVuYWJsZSBleGNlcHRpb24gZm9yIHVuZGVyZmxvdyBleGNlcHRpb24KLSAqICA3ICAgICAtPiBlbmFibGUgZXhjZXB0aW9uIGZvciBpbmV4YWN0IGV4Y2VwdGlvbgotICogIDYgICAgIC0+IGZsYWcgaW52YWxpZCBleGNlcHRpb24KLSAqICA1ICAgICAtPiBmbGFnIGRpdmlzaW9uIGJ5IHplcm8gZXhjZXB0aW9uCi0gKiAgNCAgICAgLT4gZmxhZyBvdmVyZmxvdyBleGNlcHRpb24KLSAqICAzICAgICAtPiBmbGFnIHVuZGVyZmxvdyBleGNlcHRpb24KLSAqICAyICAgICAtPiBmbGFnIGluZXhhY3QgZXhjZXB0aW9uCi0gKiAgMS0wICAgLT4gcm91bmRpbmcgY29udHJvbAotICoKLSAqCi0gKiBSb3VuZGluZyBDb250cm9sOgotICogMDAgLSByb3VuZGluZyB0byBuZWFyZXN0IChSTikKLSAqIDAxIC0gcm91bmRpbmcgdG93YXJkIHplcm8gKFJaKQotICogMTAgLSByb3VuZGluZyAodXApIHRvd2FyZCBwbHVzIGluZmluaXR5IChSUCkKLSAqIDExIC0gcm91bmRpbmcgKGRvd24pdG93YXJkIG1pbnVzIGluZmluaXR5IChSTSkKLSAqLwotCi0jaWZuZGVmIF9GRU5WX0hfCi0jZGVmaW5lIF9GRU5WX0hfCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotX19CRUdJTl9ERUNMUwotCi10eXBlZGVmIF9fdWludDMyX3QgICAgZmVudl90OwotdHlwZWRlZiBfX3VpbnQzMl90ICAgIGZleGNlcHRfdDsKLQotLyogRXhjZXB0aW9uIGZsYWdzICovCi0jZGVmaW5lIEZFX0lOVkFMSUQgICAgICAweDQwCi0jZGVmaW5lIEZFX0RJVkJZWkVSTyAgICAweDIwCi0jZGVmaW5lIEZFX09WRVJGTE9XICAgICAweDEwCi0jZGVmaW5lIEZFX1VOREVSRkxPVyAgICAweDA4Ci0jZGVmaW5lIEZFX0lORVhBQ1QgICAgICAweDA0Ci0jZGVmaW5lIEZFX0FMTF9FWENFUFQgICAoRkVfRElWQllaRVJPIHwgRkVfSU5FWEFDVCB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBGRV9JTlZBTElEIHwgRkVfT1ZFUkZMT1cgfCBGRV9VTkRFUkZMT1cpCi0jZGVmaW5lIF9GQ1NSX0NBVVNFX1NISUZUICAxMAotI2RlZmluZSBfRU5BQkxFX1NISUZUIDUKLSNkZWZpbmUgX0ZDU1JfRU5BQkxFX01BU0sgKEZFX0FMTF9FWENFUFQgPDwgX0VOQUJMRV9TSElGVCkKLQotLyogUm91bmRpbmcgbW9kZXMgKi8KLSNkZWZpbmUgRkVfVE9ORUFSRVNUICAgIDB4MDAwMAotI2RlZmluZSBGRV9UT1dBUkRaRVJPICAgMHgwMDAxCi0jZGVmaW5lIEZFX1VQV0FSRCAgICAgICAweDAwMDIKLSNkZWZpbmUgRkVfRE9XTldBUkQgICAgIDB4MDAwMwotI2RlZmluZSBfRkNTUl9STU9ERV9TSElGVCAwCi0jZGVmaW5lIF9GQ1NSX1JNQVNLICAgICAgIDB4MwotLyogRGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotZXh0ZXJuIGNvbnN0IGZlbnZfdCAgICBfX2ZlX2RmbF9lbnY7Ci0jZGVmaW5lIEZFX0RGTF9FTlYgICAgKCZfX2ZlX2RmbF9lbnYpCi0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVnZXRlbnYoZmVudl90KiBfX2VudnApIHsKLSAgIGZlbnZfdCBfZmNzciA9IDA7Ci0jaWZkZWYgIF9fbWlwc19oYXJkX2Zsb2F0Ci0gICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2ZjMSAlMCwkMzEiIDogIj1yIiAoX2Zjc3IpKTsKLSNlbmRpZgotICAgKl9fZW52cCA9IF9mY3NyOwotICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVzZXRlbnYoY29uc3QgZmVudl90KiBfX2VudnApIHsKLSAgZmVudl90IF9mY3NyID0gKl9fZW52cDsKLSNpZmRlZiAgX19taXBzX2hhcmRfZmxvYXQKLSAgX19hc21fXyBfX3ZvbGF0aWxlX18oImN0YzEgJTAsJDMxIiA6IDogInIiIChfZmNzcikpOwotI2VuZGlmCi0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlY2xlYXJleGNlcHQoaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19mY3NyOwotICBmZWdldGVudigmX19mY3NyKTsKLSAgX19leGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7Ci0gIF9fZmNzciAmPSB+KF9fZXhjZXB0cyB8IChfX2V4Y2VwdHMgPDwgX0ZDU1JfQ0FVU0VfU0hJRlQpKTsKLSAgZmVzZXRlbnYoJl9fZmNzcik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QqIF9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpIHsKLSAgZmV4Y2VwdF90IF9fZmNzcjsKLSAgZmVnZXRlbnYoJl9fZmNzcik7Ci0gICpfX2ZsYWdwID0gX19mY3NyICYgX19leGNlcHRzICYgRkVfQUxMX0VYQ0VQVDsKLSAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCogX19mbGFncCwgaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19mY3NyOwotICBmZWdldGVudigmX19mY3NyKTsKLSAgLyogRW5zdXJlIHRoYXQgZmxhZ3MgYXJlIGFsbCBsZWdhbCAqLwotICBfX2V4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKLSAgX19mY3NyICY9IH5fX2V4Y2VwdHM7Ci0gIF9fZmNzciB8PSAqX19mbGFncCAmIF9fZXhjZXB0czsKLSAgZmVzZXRlbnYoJl9fZmNzcik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlcmFpc2VleGNlcHQoaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19mY3NyOwotICBmZWdldGVudigmX19mY3NyKTsKLSAgLyogRW5zdXJlIHRoYXQgZmxhZ3MgYXJlIGFsbCBsZWdhbCAqLwotICBfX2V4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKLSAgLyogQ2F1c2UgYml0IG5lZWRzIHRvIGJlIHNldCBhcyB3ZWxsIGZvciBnZW5lcmF0aW5nIHRoZSBleGNlcHRpb24qLwotICBfX2Zjc3IgfD0gX19leGNlcHRzIHwgKF9fZXhjZXB0cyA8PCBfRkNTUl9DQVVTRV9TSElGVCk7Ci0gIGZlc2V0ZW52KCZfX2Zjc3IpOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXRlc3RleGNlcHQoaW50IF9fZXhjZXB0cykgewotICBmZXhjZXB0X3QgX19GQ1NSOwotICBmZWdldGVudigmX19GQ1NSKTsKLSAgcmV0dXJuIChfX0ZDU1IgJiBfX2V4Y2VwdHMgJiBGRV9BTExfRVhDRVBUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWdldHJvdW5kKHZvaWQpIHsKLSAgZmVudl90IF9mY3NyOwotICBmZWdldGVudigmX2Zjc3IpOwotICByZXR1cm4gKF9mY3NyICYgX0ZDU1JfUk1BU0spOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlc2V0cm91bmQoaW50IF9fcm91bmQpIHsKLSAgZmVudl90IF9mY3NyOwotICBmZWdldGVudigmX2Zjc3IpOwotICBfZmNzciAmPSB+X0ZDU1JfUk1BU0s7Ci0gIF9mY3NyIHw9IChfX3JvdW5kICYgX0ZDU1JfUk1BU0sgKSA7Ci0gIGZlc2V0ZW52KCZfZmNzcik7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50IGZlaG9sZGV4Y2VwdChmZW52X3QqIF9fZW52cCkgewotICBmZW52X3QgX19lbnY7Ci0gIGZlZ2V0ZW52KCZfX2Vudik7Ci0gICpfX2VudnAgPSBfX2VudjsKLSAgX19lbnYgJj0gfihGRV9BTExfRVhDRVBUIHwgX0ZDU1JfRU5BQkxFX01BU0spOwotICBmZXNldGVudigmX19lbnYpOwotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZXVwZGF0ZWVudihjb25zdCBmZW52X3QqIF9fZW52cCkgewotICBmZXhjZXB0X3QgX19mY3NyOwotICBmZWdldGVudigmX19mY3NyKTsKLSAgZmVzZXRlbnYoX19lbnZwKTsKLSAgZmVyYWlzZWV4Y2VwdChfX2Zjc3IgJiBGRV9BTExfRVhDRVBUKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBfX0JTRF9WSVNJQkxFCi0KLXN0YXRpYyBfX2lubGluZSBpbnQgZmVlbmFibGVleGNlcHQoaW50IF9fbWFzaykgewotICBmZW52X3QgX19vbGRfZmNzciwgX19uZXdfZmNzcjsKLSAgZmVnZXRlbnYoJl9fb2xkX2Zjc3IpOwotICBfX25ld19mY3NyID0gX19vbGRfZmNzciB8IChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRU5BQkxFX1NISUZUOwotICBmZXNldGVudigmX19uZXdfZmNzcik7Ci0gIHJldHVybiAoKF9fb2xkX2Zjc3IgPj4gX0VOQUJMRV9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWRpc2FibGVleGNlcHQoaW50IF9fbWFzaykgewotICBmZW52X3QgX19vbGRfZmNzciwgX19uZXdfZmNzcjsKLSAgZmVnZXRlbnYoJl9fb2xkX2Zjc3IpOwotICBfX25ld19mY3NyID0gX19vbGRfZmNzciAmIH4oKF9fbWFzayAmIEZFX0FMTF9FWENFUFQpIDw8IF9FTkFCTEVfU0hJRlQpOwotICBmZXNldGVudigmX19uZXdfZmNzcik7Ci0gIHJldHVybiAoKF9fb2xkX2Zjc3IgPj4gX0VOQUJMRV9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludCBmZWdldGV4Y2VwdCh2b2lkKSB7Ci0gIGZlbnZfdCBfX2Zjc3I7Ci0gIGZlZ2V0ZW52KCZfX2Zjc3IpOwotICByZXR1cm4gKChfX2Zjc3IgJiBfRkNTUl9FTkFCTEVfTUFTSykgPj4gX0VOQUJMRV9TSElGVCk7Ci19Ci0KLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCi0KLV9fRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiAhX0ZFTlZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYm0vaW5jbHVkZS9taXBzL21hY2hpbmUvZmVudi5oIGIvbGlibS9pbmNsdWRlL21pcHMvbWFjaGluZS9mZW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg5ZTFjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vaW5jbHVkZS9taXBzL21hY2hpbmUvZmVudi5oCkBAIC0wLDAgKzEsOTggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2FybS9mZW52LmgsdiAxLjUgMjAwNS8wMy8xNiAxOTowMzo0NSBkYXMgRXhwICQKKyAqLworCisvKgorICAgUmV3cml0dGVuIGZvciBBbmRyb2lkLgorKi8KKworLyogTUlQUyBGUFUgZmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWdpc3RlciBiaXRzLgorICoKKyAqIDMxLTI1ICAtPiBmbG9hdGluZyBwb2ludCBjb25kaXRpb25zIGNvZGUgYml0cyBzZXQgYnkgRlAgY29tcGFyZQorICogICAgICAgICAgIGluc3RydWN0aW9ucworICogMjQgICAgIC0+IGZsdXNoIGRlbm9ybWFsaXplZCByZXN1bHRzIHRvIHplcm8gaW5zdGVhZCBvZgorICogICAgICAgICAgIGNhdXNpbmcgdW5pbXBsZW1lbnRlZCBvcGVyYXRpb24gZXhjZXB0aW9uLgorICogMjMgICAgIC0+IENvbmRpdGlvbiBiaXQKKyAqIDIyICAgICAtPiBJbiBjb25qdW5jdGlvbiB3aXRoIEZTIGRldGVjdHMgZGVub3JtYWxpemVkCisgKiAgICAgICAgICAgb3BlcmFuZHMgYW5kIHJlcGxhY2VzIHRoZW0gaW50ZXJuYWxseSB3aXRoIDAuCisgKiAyMSAgICAgLT4gSW4gY29uanVuY3Rpb24gd2l0aCBGUyBmb3JjZXMgZGVub3JtYWxpemVkIG9wZXJhbmRzCisgKiAgICAgICAgICAgdG8gdGhlIGNsb3Nlc3Qgbm9ybWFsaXplZCB2YWx1ZS4KKyAqIDIwLTE4ICAtPiByZXNlcnZlZCAocmVhZCBhcyAwLCB3cml0ZSB3aXRoIDApCisgKiAxNyAgICAgLT4gY2F1c2UgYml0IGZvciB1bmltcGxlbWVudGVkIG9wZXJhdGlvbgorICogMTYgICAgIC0+IGNhdXNlIGJpdCBmb3IgaW52YWxpZCBleGNlcHRpb24KKyAqIDE1ICAgICAtPiBjYXVzZSBiaXQgZm9yIGRpdmlzaW9uIGJ5IHplcm8gZXhjZXB0aW9uCisgKiAxNCAgICAgLT4gY2F1c2UgYml0IGZvciBvdmVyZmxvdyBleGNlcHRpb24KKyAqIDEzICAgICAtPiBjYXVzZSBiaXQgZm9yIHVuZGVyZmxvdyBleGNlcHRpb24KKyAqIDEyICAgICAtPiBjYXVzZSBiaXQgZm9yIGluZXhhY3QgZXhjZXB0aW9uCisgKiAxMSAgICAgLT4gZW5hYmxlIGV4Y2VwdGlvbiBmb3IgaW52YWxpZCBleGNlcHRpb24KKyAqIDEwICAgICAtPiBlbmFibGUgZXhjZXB0aW9uIGZvciBkaXZpc2lvbiBieSB6ZXJvIGV4Y2VwdGlvbgorICogIDkgICAgIC0+IGVuYWJsZSBleGNlcHRpb24gZm9yIG92ZXJmbG93IGV4Y2VwdGlvbgorICogIDggICAgIC0+IGVuYWJsZSBleGNlcHRpb24gZm9yIHVuZGVyZmxvdyBleGNlcHRpb24KKyAqICA3ICAgICAtPiBlbmFibGUgZXhjZXB0aW9uIGZvciBpbmV4YWN0IGV4Y2VwdGlvbgorICogIDYgICAgIC0+IGZsYWcgaW52YWxpZCBleGNlcHRpb24KKyAqICA1ICAgICAtPiBmbGFnIGRpdmlzaW9uIGJ5IHplcm8gZXhjZXB0aW9uCisgKiAgNCAgICAgLT4gZmxhZyBvdmVyZmxvdyBleGNlcHRpb24KKyAqICAzICAgICAtPiBmbGFnIHVuZGVyZmxvdyBleGNlcHRpb24KKyAqICAyICAgICAtPiBmbGFnIGluZXhhY3QgZXhjZXB0aW9uCisgKiAgMS0wICAgLT4gcm91bmRpbmcgY29udHJvbAorICoKKyAqCisgKiBSb3VuZGluZyBDb250cm9sOgorICogMDAgLSByb3VuZGluZyB0byBuZWFyZXN0IChSTikKKyAqIDAxIC0gcm91bmRpbmcgdG93YXJkIHplcm8gKFJaKQorICogMTAgLSByb3VuZGluZyAodXApIHRvd2FyZCBwbHVzIGluZmluaXR5IChSUCkKKyAqIDExIC0gcm91bmRpbmcgKGRvd24pdG93YXJkIG1pbnVzIGluZmluaXR5IChSTSkKKyAqLworCisjaWZuZGVmIF9NSVBTX0ZFTlZfSF8KKyNkZWZpbmUgX01JUFNfRkVOVl9IXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKwordHlwZWRlZiBfX3VpbnQzMl90IGZlbnZfdDsKK3R5cGVkZWYgX191aW50MzJfdCBmZXhjZXB0X3Q7CisKKy8qIEV4Y2VwdGlvbiBmbGFncyAqLworI2RlZmluZSBGRV9JTlZBTElEICAgIDB4NDAKKyNkZWZpbmUgRkVfRElWQllaRVJPICAweDIwCisjZGVmaW5lIEZFX09WRVJGTE9XICAgMHgxMAorI2RlZmluZSBGRV9VTkRFUkZMT1cgIDB4MDgKKyNkZWZpbmUgRkVfSU5FWEFDVCAgICAweDA0CisjZGVmaW5lIEZFX0FMTF9FWENFUFQgKEZFX0RJVkJZWkVSTyB8IEZFX0lORVhBQ1QgfCBcCisgICAgICAgICAgICAgICAgICAgICAgIEZFX0lOVkFMSUQgfCBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVykKKworLyogUm91bmRpbmcgbW9kZXMgKi8KKyNkZWZpbmUgRkVfVE9ORUFSRVNUICAweDAwMDAKKyNkZWZpbmUgRkVfVE9XQVJEWkVSTyAweDAwMDEKKyNkZWZpbmUgRkVfVVBXQVJEICAgICAweDAwMDIKKyNkZWZpbmUgRkVfRE9XTldBUkQgICAweDAwMDMKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfTUlQU19GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2lzaW5mLmMgYi9saWJtL2lzaW5mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MTdmMTYuLjAwMDAwMDAKLS0tIGEvbGlibS9pc2luZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRCQKLSAqLwotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgImZwbWF0aC5oIgotCi0vKgotICogWFhYIFRoZXNlIHJvdXRpbmVzIGJlbG9uZyBpbiBsaWJtLCBidXQgdGhleSBtdXN0IHJlbWFpbiBpbiBsaWJjIGZvcgotICogICAgIGJpbmFyeSBjb21wYXQgdW50aWwgd2UgY2FuIGJ1bXAgbGlibSdzIG1ham9yIHZlcnNpb24gbnVtYmVyLgotICovCi0KLWludAotX19pc2luZihkb3VibGUgZCkKLXsKLQl1bmlvbiBJRUVFZDJiaXRzIHU7Ci0KLQl1LmQgPSBkOwotCXJldHVybiAodS5iaXRzLmV4cCA9PSAyMDQ3ICYmIHUuYml0cy5tYW5sID09IDAgJiYgdS5iaXRzLm1hbmggPT0gMCk7Ci19Ci0KLWludAotX19pc2luZmYoZmxvYXQgZikKLXsKLQl1bmlvbiBJRUVFZjJiaXRzIHU7Ci0KLQl1LmYgPSBmOwotCXJldHVybiAodS5iaXRzLmV4cCA9PSAyNTUgJiYgdS5iaXRzLm1hbiA9PSAwKTsKLX0KLQotaW50Ci1fX2lzaW5mbChsb25nIGRvdWJsZSBlKQotewotCXVuaW9uIElFRUVsMmJpdHMgdTsKLQotCXUuZSA9IGU7Ci0JbWFza19uYml0X2wodSk7Ci0jaWZuZGVmIF9fYWxwaGFfXwotCXJldHVybiAodS5iaXRzLmV4cCA9PSAzMjc2NyAmJiB1LmJpdHMubWFubCA9PSAwICYmIHUuYml0cy5tYW5oID09IDApOwotI2Vsc2UKLQlyZXR1cm4gKHUuYml0cy5leHAgPT0gMjA0NyAmJiB1LmJpdHMubWFubCA9PSAwICYmIHUuYml0cy5tYW5oID09IDApOwotI2VuZGlmCi19CmRpZmYgLS1naXQgYS9saWJtL21pcHMvX2ZwbWF0aC5oIGIvbGlibS9taXBzL19mcG1hdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAwNmE1OC4uMDAwMDAwMAotLS0gYS9saWJtL21pcHMvX2ZwbWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRCQKLSAqLwotCi11bmlvbiBJRUVFbDJiaXRzIHsKLQlsb25nIGRvdWJsZQllOwotCXN0cnVjdCB7Ci0jaWZuZGVmIF9fTUlQU0VCX18KLQkJdW5zaWduZWQgaW50CW1hbmwJOjMyOwotCQl1bnNpZ25lZCBpbnQJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAlleHAJOjExOwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLSNlbHNlCi0JCXVuc2lnbmVkIGludAkJc2lnbgk6MTsKLQkJdW5zaWduZWQgaW50CQlleHAJOjExOwotCQl1bnNpZ25lZCBpbnQJCW1hbmgJOjIwOwotCQl1bnNpZ25lZCBpbnQJCW1hbmwJOjMyOwotI2VuZGlmCi0JfSBiaXRzOwotfTsKLQotI2RlZmluZQlMREJMX05CSVQJMAotI2RlZmluZQltYXNrX25iaXRfbCh1KQkoKHZvaWQpMCkKLSNkZWZpbmUJTERCTF9JTVBMSUNJVF9OQklUCi0KLSNkZWZpbmUJTERCTF9NQU5IX1NJWkUJMjAKLSNkZWZpbmUJTERCTF9NQU5MX1NJWkUJMzIKLQotI2RlZmluZQlMREJMX1RPX0FSUkFZMzIodSwgYSkgZG8gewkJCVwKLQkoYSlbMF0gPSAodWludDMyX3QpKHUpLmJpdHMubWFubDsJCVwKLQkoYSlbMV0gPSAodWludDMyX3QpKHUpLmJpdHMubWFuaDsJCVwKLX0gd2hpbGUoMCkKZGlmZiAtLWdpdCBhL2xpYm0vbWlwcy9mZW52LmMgYi9saWJtL21pcHMvZmVudi5jCmluZGV4IGI1ZjUyZGEuLmFhY2Q1MjYgMTAwNjQ0Ci0tLSBhL2xpYm0vbWlwcy9mZW52LmMKKysrIGIvbGlibS9taXBzL2ZlbnYuYwpAQCAtMjgsOCArMjgsMTI5IEBACiAKICNpbmNsdWRlIDxmZW52Lmg+CiAKKyNkZWZpbmUgRkNTUl9DQVVTRV9TSElGVCAxMAorI2RlZmluZSBGQ1NSX0VOQUJMRV9TSElGVCA1CisjZGVmaW5lIEZDU1JfRU5BQkxFX01BU0sgKEZFX0FMTF9FWENFUFQgPDwgRkNTUl9FTkFCTEVfU0hJRlQpCisKKyNkZWZpbmUgRkNTUl9STUFTSyAgICAgICAweDMKKwogLyoKICAqIEhvcGVmdWxseSB0aGUgc3lzdGVtIElEIGJ5dGUgaXMgaW1tdXRhYmxlLCBzbyBpdCdzIHZhbGlkIHRvIHVzZQogICogdGhpcyBhcyBhIGRlZmF1bHQgZW52aXJvbm1lbnQuCiAgKi8KIGNvbnN0IGZlbnZfdCBfX2ZlX2RmbF9lbnYgPSAwOworCitpbnQgZmVnZXRlbnYoZmVudl90KiBfX2VudnApIHsKKyAgZmVudl90IF9mY3NyID0gMDsKKyNpZmRlZiAgX19taXBzX2hhcmRfZmxvYXQKKyAgX19hc21fXyBfX3ZvbGF0aWxlX18oImNmYzEgJTAsJDMxIiA6ICI9ciIgKF9mY3NyKSk7CisjZW5kaWYKKyAgKl9fZW52cCA9IF9mY3NyOworICByZXR1cm4gMDsKK30KKworaW50IGZlc2V0ZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7CisgIGZlbnZfdCBfZmNzciA9ICpfX2VudnA7CisjaWZkZWYgIF9fbWlwc19oYXJkX2Zsb2F0CisgIF9fYXNtX18gX192b2xhdGlsZV9fKCJjdGMxICUwLCQzMSIgOiA6ICJyIiAoX2Zjc3IpKTsKKyNlbmRpZgorICByZXR1cm4gMDsKK30KKworaW50IGZlY2xlYXJleGNlcHQoaW50IF9fZXhjZXB0cykgeworICBmZXhjZXB0X3QgX19mY3NyOworICBmZWdldGVudigmX19mY3NyKTsKKyAgX19leGNlcHRzICY9IEZFX0FMTF9FWENFUFQ7CisgIF9fZmNzciAmPSB+KF9fZXhjZXB0cyB8IChfX2V4Y2VwdHMgPDwgRkNTUl9DQVVTRV9TSElGVCkpOworICBmZXNldGVudigmX19mY3NyKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZWdldGV4Y2VwdGZsYWcoZmV4Y2VwdF90KiBfX2ZsYWdwLCBpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX2Zjc3I7CisgIGZlZ2V0ZW52KCZfX2Zjc3IpOworICAqX19mbGFncCA9IF9fZmNzciAmIF9fZXhjZXB0cyAmIEZFX0FMTF9FWENFUFQ7CisgIHJldHVybiAwOworfQorCitpbnQgZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCogX19mbGFncCwgaW50IF9fZXhjZXB0cykgeworICBmZXhjZXB0X3QgX19mY3NyOworICBmZWdldGVudigmX19mY3NyKTsKKyAgLyogRW5zdXJlIHRoYXQgZmxhZ3MgYXJlIGFsbCBsZWdhbCAqLworICBfX2V4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgX19mY3NyICY9IH5fX2V4Y2VwdHM7CisgIF9fZmNzciB8PSAqX19mbGFncCAmIF9fZXhjZXB0czsKKyAgZmVzZXRlbnYoJl9fZmNzcik7CisgIHJldHVybiAwOworfQorCitpbnQgZmVyYWlzZWV4Y2VwdChpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX2Zjc3I7CisgIGZlZ2V0ZW52KCZfX2Zjc3IpOworICAvKiBFbnN1cmUgdGhhdCBmbGFncyBhcmUgYWxsIGxlZ2FsICovCisgIF9fZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOworICAvKiBDYXVzZSBiaXQgbmVlZHMgdG8gYmUgc2V0IGFzIHdlbGwgZm9yIGdlbmVyYXRpbmcgdGhlIGV4Y2VwdGlvbiovCisgIF9fZmNzciB8PSBfX2V4Y2VwdHMgfCAoX19leGNlcHRzIDw8IEZDU1JfQ0FVU0VfU0hJRlQpOworICBmZXNldGVudigmX19mY3NyKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZXRlc3RleGNlcHQoaW50IF9fZXhjZXB0cykgeworICBmZXhjZXB0X3QgX19GQ1NSOworICBmZWdldGVudigmX19GQ1NSKTsKKyAgcmV0dXJuIChfX0ZDU1IgJiBfX2V4Y2VwdHMgJiBGRV9BTExfRVhDRVBUKTsKK30KKworaW50IGZlZ2V0cm91bmQodm9pZCkgeworICBmZW52X3QgX2Zjc3I7CisgIGZlZ2V0ZW52KCZfZmNzcik7CisgIHJldHVybiAoX2Zjc3IgJiBGQ1NSX1JNQVNLKTsKK30KKworaW50IGZlc2V0cm91bmQoaW50IF9fcm91bmQpIHsKKyAgZmVudl90IF9mY3NyOworICBmZWdldGVudigmX2Zjc3IpOworICBfZmNzciAmPSB+RkNTUl9STUFTSzsKKyAgX2Zjc3IgfD0gKF9fcm91bmQgJiBGQ1NSX1JNQVNLKTsKKyAgZmVzZXRlbnYoJl9mY3NyKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZWhvbGRleGNlcHQoZmVudl90KiBfX2VudnApIHsKKyAgZmVudl90IF9fZW52OworICBmZWdldGVudigmX19lbnYpOworICAqX19lbnZwID0gX19lbnY7CisgIF9fZW52ICY9IH4oRkVfQUxMX0VYQ0VQVCB8IEZDU1JfRU5BQkxFX01BU0spOworICBmZXNldGVudigmX19lbnYpOworICByZXR1cm4gMDsKK30KKworaW50IGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7CisgIGZleGNlcHRfdCBfX2Zjc3I7CisgIGZlZ2V0ZW52KCZfX2Zjc3IpOworICBmZXNldGVudihfX2VudnApOworICBmZXJhaXNlZXhjZXB0KF9fZmNzciAmIEZFX0FMTF9FWENFUFQpOworICByZXR1cm4gMDsKK30KKworaW50IGZlZW5hYmxlZXhjZXB0KGludCBfX21hc2spIHsKKyAgZmVudl90IF9fb2xkX2Zjc3IsIF9fbmV3X2Zjc3I7CisgIGZlZ2V0ZW52KCZfX29sZF9mY3NyKTsKKyAgX19uZXdfZmNzciA9IF9fb2xkX2Zjc3IgfCAoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgRkNTUl9FTkFCTEVfU0hJRlQ7CisgIGZlc2V0ZW52KCZfX25ld19mY3NyKTsKKyAgcmV0dXJuICgoX19vbGRfZmNzciA+PiBGQ1NSX0VOQUJMRV9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKK30KKworaW50IGZlZGlzYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7CisgIGZlbnZfdCBfX29sZF9mY3NyLCBfX25ld19mY3NyOworICBmZWdldGVudigmX19vbGRfZmNzcik7CisgIF9fbmV3X2Zjc3IgPSBfX29sZF9mY3NyICYgfigoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgRkNTUl9FTkFCTEVfU0hJRlQpOworICBmZXNldGVudigmX19uZXdfZmNzcik7CisgIHJldHVybiAoKF9fb2xkX2Zjc3IgPj4gRkNTUl9FTkFCTEVfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7Cit9CisKK2ludCBmZWdldGV4Y2VwdCh2b2lkKSB7CisgIGZlbnZfdCBfX2Zjc3I7CisgIGZlZ2V0ZW52KCZfX2Zjc3IpOworICByZXR1cm4gKChfX2Zjc3IgJiBGQ1NSX0VOQUJMRV9NQVNLKSA+PiBGQ1NSX0VOQUJMRV9TSElGVCk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3NpZ25iaXQuYyBiL2xpYm0vc2lnbmJpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OGJmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3NpZ25iaXQuYwpAQCAtMCwwICsxLDU5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMyBNaWtlIEJhcmNyb2Z0IDxtaWtlQEZyZWVCU0Qub3JnPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisKK2ludCBfX3NpZ25iaXQoZG91YmxlIGQpCit7CisgIHVuaW9uIElFRUVkMmJpdHMgdTsKKworICB1LmQgPSBkOworICByZXR1cm4gKHUuYml0cy5zaWduKTsKK30KKworaW50IF9fc2lnbmJpdGYoZmxvYXQgZikKK3sKKyAgdW5pb24gSUVFRWYyYml0cyB1OworCisgIHUuZiA9IGY7CisgIHJldHVybiAodS5iaXRzLnNpZ24pOworfQorCisjaWZkZWYgX19MUDY0X18KK2ludCBfX3NpZ25iaXRsKGxvbmcgZG91YmxlIGUpCit7CisgIHVuaW9uIElFRUVsMmJpdHMgdTsKKworICB1LmUgPSBlOworICByZXR1cm4gKHUuYml0cy5zaWduKTsKK30KKyNlbHNlIC8vIF9fTFAzMl9fCitfX3dlYWtfcmVmZXJlbmNlKF9fc2lnbmJpdCwgX19zaWduYml0bCk7CisjZW5kaWYgLy8gX19MUDY0X18KZGlmZiAtLWdpdCBhL2xpYm0vc2lnbmlmaWNhbmRsLmMgYi9saWJtL3NpZ25pZmljYW5kbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZDdkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3NpZ25pZmljYW5kbC5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsKGxvbmcgZG91YmxlIHgpIHsKKyAgcmV0dXJuIHNjYWxibmwoeCwgLWlsb2dibCh4KSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvZV9yZW1fcGlvMmwuaCBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9lX3JlbV9waW8ybC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OGQwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvZV9yZW1fcGlvMmwuaApAQCAtMCwwICsxLDE0MCBAQAorLyogRnJvbTogQCgjKWVfcmVtX3BpbzIuYyAxLjQgOTUvMDEvMTggKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4IFN0ZXZlbiBHLiBLYXJnbCwgRGF2aWQgU2NodWx0eiwgQnJ1Y2UgRC4gRXZhbnMuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogT3B0aW1pemVkIGJ5IEJydWNlIEQuIEV2YW5zLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogbGQxMjggdmVyc2lvbiBvZiBfX2llZWU3NTRfcmVtX3BpbzJsKHgseSkKKyAqCisgKiByZXR1cm4gdGhlIHJlbWFpbmRlciBvZiB4IHJlbSBwaS8yIGluIHlbMF0reVsxXQorICogdXNlIF9fa2VybmVsX3JlbV9waW8yKCkKKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJmcG1hdGguaCIKKworI2RlZmluZQlCSUFTCShMREJMX01BWF9FWFAgLSAxKQorCisvKgorICogWFhYIG5lZWQgdG8gdmVyaWZ5IHRoYXQgbm9uemVybyBpbnRlZ2VyIG11bHRpcGxlcyBvZiBwaS8yIHdpdGhpbiB0aGUKKyAqIHJhbmdlIGdldCBubyBjbG9zZXIgdG8gYSBsb25nIGRvdWJsZSB0aGFuIDIqKi0xNDAsIG9yIHRoYXQKKyAqIGlsb2diKHgpICsgaWxvZ2IobWluX2RlbHRhKSA8IDQ1IC0gLTE0MC4KKyAqLworLyoKKyAqIGludnBpbzI6ICAxMTMgYml0cyBvZiAyL3BpCisgKiBwaW8yXzE6ICAgZmlyc3QgIDY4IGJpdHMgb2YgcGkvMgorICogcGlvMl8xdDogIHBpLzIgLSBwaW8yXzEKKyAqIHBpbzJfMjogICBzZWNvbmQgNjggYml0cyBvZiBwaS8yCisgKiBwaW8yXzJ0OiAgcGkvMiAtIChwaW8yXzErcGlvMl8yKQorICogcGlvMl8zOiAgIHRoaXJkICA2OCBiaXRzIG9mIHBpLzIKKyAqIHBpbzJfM3Q6ICBwaS8yIC0gKHBpbzJfMStwaW8yXzIrcGlvMl8zKQorICovCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK3plcm8gPSAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgKi8KK3R3bzI0ID0gIDEuNjc3NzIxNjAwMDAwMDAwMDAwMDBlKzA3OyAvKiAweDQxNzAwMDAwLCAweDAwMDAwMDAwICovCisKK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQoraW52cGlvMiA9ICA2LjM2NjE5NzcyMzY3NTgxMzQzMDc1NTM1MDUzNDkwMDU3NDdlLTAxTCwJLyogIDB4MTQ1ZjMwNmRjOWM4ODJhNTNmODRlYWZhM2VhNmEuMHAtMTEzICovCitwaW8yXzEgID0gIDEuNTcwNzk2MzI2Nzk0ODk2NjE5MjI5Mjk5NDI1MzkwOTU1NWUrMDBMLAkvKiAgMHgxOTIxZmI1NDQ0MmQxODQ2OTgwMDAwMDAwMDAwMC4wcC0xMTIgKi8KK3BpbzJfMXQgPSAgMi4wMjIyNjYyNDg3OTU5NTA3MzIzOTk2ODQ2MjAwOTQ3NTc3ZS0yMUwsCS8qICAweDEzMTk4YTJlMDM3MDczNDRhNDA5MzgyMjI5OWYzLjBwLTE4MSAqLworcGlvMl8yICA9ICAyLjAyMjI2NjI0ODc5NTk1MDczMjM5OTQ3NzkxNjg4Mzc3NTFlLTIxTCwJLyogIDB4MTMxOThhMmUwMzcwNzM0NGE0MDAwMDAwMDAwMDAuMHAtMTgxICovCitwaW8yXzJ0ID0gIDIuMDY3MDMyMTA5ODI2Mzk4ODIzNjQ5NjkwMzA1MTYwNDg0NGUtNDNMLAkvKiAgMHgxMjcwNDQ1MzNlNjNhMDEwNWRmNTMxZDg5Y2Q5MS4wcC0yNTQgKi8KK3BpbzJfMyAgPSAgMi4wNjcwMzIxMDk4MjYzOTg4MjM2NDk5NDY4MTEwMzI5NTkxZS00M0wsCS8qICAweDEyNzA0NDUzM2U2M2EwMTA1ZTAwMDAwMDAwMDAwLjBwLTI1NCAqLworcGlvMl8zdCA9IC0yLjU2NTA1ODcyNDc0NTkyMzgzNjE2MjU0MzM0OTI5NTkyODVlLTY1TDsJLyogLTB4MTU5YzRlYzY0ZGRhZWI1Zjc4NjcxY2JmYjIyMTAuMHAtMzI3ICovCisKK3N0YXRpYyBpbmxpbmUgX19hbHdheXNfaW5saW5lIGludAorX19pZWVlNzU0X3JlbV9waW8ybChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqeSkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHUsdTE7CisJbG9uZyBkb3VibGUgeix3LHQscixmbjsKKwlkb3VibGUgdHhbNV0sdHlbM107CisJaW50NjRfdCBuOworCWludCBlMCxleCxpLGosbng7CisJaW50MTZfdCBleHBzaWduOworCisJdS5lID0geDsKKwlleHBzaWduID0gdS54Yml0cy5leHBzaWduOworCWV4ID0gZXhwc2lnbiAmIDB4N2ZmZjsKKwlpZiAoZXggPCBCSUFTICsgNDUgfHwgZXggPT0gQklBUyArIDQ1ICYmCisJICAgIHUuYml0cy5tYW5oIDwgMHg5MjFmYjU0NDQyZDFMTCkgeworCSAgICAvKiB8eHwgfjwgMl40NSoocGkvMiksIG1lZGl1bSBzaXplICovCisJICAgIC8qIFVzZSBhIHNwZWNpYWxpemVkIHJpbnQoKSB0byBnZXQgZm4uICBBc3N1bWUgcm91bmQtdG8tbmVhcmVzdC4gKi8KKwkgICAgZm4gPSB4KmludnBpbzIrMHgxLjhwMTEyOworCSAgICBmbiA9IGZuLTB4MS44cDExMjsKKyNpZmRlZiBIQVZFX0VGRklDSUVOVF9JNjRSSU5UCisJICAgIG4gID0gaTY0cmludChmbik7CisjZWxzZQorCSAgICBuICA9IGZuOworI2VuZGlmCisJICAgIHIgID0geC1mbipwaW8yXzE7CisJICAgIHcgID0gZm4qcGlvMl8xdDsJLyogMXN0IHJvdW5kIGdvb2QgdG8gMTgwIGJpdCAqLworCSAgICB7CisJCXVuaW9uIElFRUVsMmJpdHMgdTI7CisJICAgICAgICBpbnQgZXgxOworCSAgICAgICAgaiAgPSBleDsKKwkgICAgICAgIHlbMF0gPSByLXc7CisJCXUyLmUgPSB5WzBdOworCQlleDEgPSB1Mi54Yml0cy5leHBzaWduICYgMHg3ZmZmOworCSAgICAgICAgaSA9IGotZXgxOworCSAgICAgICAgaWYoaT41MSkgeyAgLyogMm5kIGl0ZXJhdGlvbiBuZWVkZWQsIGdvb2QgdG8gMjQ4ICovCisJCSAgICB0ICA9IHI7CisJCSAgICB3ICA9IGZuKnBpbzJfMjsKKwkJICAgIHIgID0gdC13OworCQkgICAgdyAgPSBmbipwaW8yXzJ0LSgodC1yKS13KTsKKwkJICAgIHlbMF0gPSByLXc7CisJCSAgICB1Mi5lID0geVswXTsKKwkJICAgIGV4MSA9IHUyLnhiaXRzLmV4cHNpZ24gJiAweDdmZmY7CisJCSAgICBpID0gai1leDE7CisJCSAgICBpZihpPjExOSkgewkvKiAzcmQgaXRlcmF0aW9uIG5lZWQsIDMxNiBiaXRzIGFjYyAqLworCQkgICAgCXQgID0gcjsJLyogd2lsbCBjb3ZlciBhbGwgcG9zc2libGUgY2FzZXMgKi8KKwkJICAgIAl3ICA9IGZuKnBpbzJfMzsKKwkJICAgIAlyICA9IHQtdzsKKwkJICAgIAl3ICA9IGZuKnBpbzJfM3QtKCh0LXIpLXcpOworCQkgICAgCXlbMF0gPSByLXc7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICB5WzFdID0gKHIteVswXSktdzsKKwkgICAgcmV0dXJuIG47CisJfQorICAgIC8qCisgICAgICogYWxsIG90aGVyIChsYXJnZSkgYXJndW1lbnRzCisgICAgICovCisJaWYoZXg9PTB4N2ZmZikgewkJLyogeCBpcyBpbmYgb3IgTmFOICovCisJICAgIHlbMF09eVsxXT14LXg7IHJldHVybiAwOworCX0KKyAgICAvKiBzZXQgeiA9IHNjYWxibih8eHwsaWxvZ2IoeCktMjMpICovCisJdTEuZSA9IHg7CisJZTAgPSBleCAtIEJJQVMgLSAyMzsJCS8qIGUwID0gaWxvZ2IofHh8KS0yMzsgKi8KKwl1MS54Yml0cy5leHBzaWduID0gZXggLSBlMDsKKwl6ID0gdTEuZTsKKwlmb3IoaT0wO2k8NDtpKyspIHsKKwkJdHhbaV0gPSAoZG91YmxlKSgoaW50MzJfdCkoeikpOworCQl6ICAgICA9ICh6LXR4W2ldKSp0d28yNDsKKwl9CisJdHhbNF0gPSB6OworCW54ID0gNTsKKwl3aGlsZSh0eFtueC0xXT09emVybykgbngtLTsJLyogc2tpcCB6ZXJvIHRlcm0gKi8KKwluICA9ICBfX2tlcm5lbF9yZW1fcGlvMih0eCx0eSxlMCxueCwzKTsKKwl0ID0gKGxvbmcgZG91YmxlKXR5WzJdICsgdHlbMV07CisJciA9IHQgKyB0eVswXTsKKwl3ID0gdHlbMF0gLSAociAtIHQpOworCWlmKGV4cHNpZ248MCkge3lbMF0gPSAtcjsgeVsxXSA9IC13OyByZXR1cm4gLW47fQorCXlbMF0gPSByOyB5WzFdID0gdzsgcmV0dXJuIG47Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvaW52dHJpZy5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2ludnRyaWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjY3ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2ludnRyaWcuYwpAQCAtMCwwICsxLDEwMCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJpbnZ0cmlnLmgiCisKKy8qCisgKiBhc2lubCgpIGFuZCBhY29zbCgpCisgKi8KK2NvbnN0IGxvbmcgZG91YmxlCitwUzAgPSAgMS42NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjcwMDMxNGUtMDFMLAorcFMxID0gLTcuMzI4MTY5NDY0MTQ1NjYyNTI1NzQ1Mjc0NzU0Mjg2MjI3MDhlLTAxTCwKK3BTMiA9ICAxLjM0MjE1NzA4NzE0OTkyMzM0NjA5MDMwMDM2NTYyMTQzNTg5ZSswMEwsCitwUzMgPSAtMS4zMjQ4MzE1MTY3NzExNjQwOTgwNTA3MDI2MTc5MDc1MjA0MGUrMDBMLAorcFM0ID0gIDcuNjEyMDYxODM2MTM2MzI1NTg4MjQ0ODUzNDExNjIxMjE5ODllLTAxTCwKK3BTNSA9IC0yLjU2MTY1NzgzMzI5MDIzNDg2Nzc3Mzg2ODMzOTI4MTQ3Mzc1ZS0wMUwsCitwUzYgPSAgNC44MDcxODU4NjM3NDQ0ODc5MzQxMTAxOTQzNDU4NTQxMzg1NWUtMDJMLAorcFM3ID0gLTQuNDI1MjMyNjcxNjcwMjQyNzk0MTAyMzA4ODYyMzk3NzQ3MThlLTAzTCwKK3BTOCA9ICAxLjQ0NTUxNTM1MTgzOTExNDU4MjUzMjA1NjM4MjgwNDEwMDY0ZS0wNEwsCitwUzkgPSAtMi4xMDU1ODk1NzkxNjYwMDI1NDA2MTU5MTA0MDQ4MjcwNjE3OWUtMDdMLAorcVMxID0gLTQuODQ2OTAxNjc4NDg3Mzk3NTE1NDQ3MTY0ODUyNDU2OTc0MjhlKzAwTCwKK3FTMiA9ICA5Ljk2NjE5MTEzNTM2MTcyNjEwMTM1MDE2OTIxMTQwMjA2OTgwZSswMEwsCitxUzMgPSAtMS4xMzE3Nzg5NTQyODk3MzAzNjY2MDgzNjc5ODQ2MTY0MTQ1OGUrMDFMLAorcVM0ID0gIDcuNzQwMDQzNzQzODk0ODgyNjYxNjkzMDQxMTc3MTQ2NTg3NjFlKzAwTCwKK3FTNSA9IC0zLjI1ODcxOTg2MDUzNTM0MDg0NzA5MDIzNTM5OTAwMzM5OTA1ZSswMEwsCitxUzYgPSAgOC4yNzgzMDMxODg4MTIzMjIwOTc1MjQ2OTAyMjM1MjkyODg2NGUtMDFMLAorcVM3ID0gLTEuMTg3NjgwNTI3MDI5NDI4MDU0MjMzMzA3MTUyMDYzNDgwMDRlLTAxTCwKK3FTOCA9ICA4LjMyNjAwNzY0NjYwNTIyMzEzMjY5MTAxNTM3OTI2NTM5NDcwZS0wM0wsCitxUzkgPSAtMS45OTQwNzM4NDg4MjYwNTU4NjcwNTk3OTUwNDU2Nzk0NzAwN2UtMDRMOworCisvKgorICogYXRhbmwoKQorICovCitjb25zdCBsb25nIGRvdWJsZSBhdGFuaGlbXSA9IHsKKwkgNC42MzY0NzYwOTAwMDgwNjExNjIxNDI1NjIzMTQ2MTIxNDM5N2UtMDFMLAorCSA3Ljg1Mzk4MTYzMzk3NDQ4MzA5NjE1NjYwODQ1ODE5ODc1Njk5ZS0wMUwsCisJIDkuODI3OTM3MjMyNDczMjkwNjc5ODU3MTA2MTEwMTQ2NjYwMzhlLTAxTCwKKwkgMS41NzA3OTYzMjY3OTQ4OTY2MTkyMzEzMjE2OTE2Mzk3NTE0MGUrMDBMLAorfTsKKworY29uc3QgbG9uZyBkb3VibGUgYXRhbmxvW10gPSB7CisJIDQuODk1MDk2NDIyNTczMzM0OTI2Njg2MTg0MzUyMjAyOTc3MDZlLTM2TCwKKwkgMi4xNjc5NTI1MzI1MzA5NDUyNTYxOTkyNjEwMDY1MTA4MzgwNmUtMzVMLAorCS0yLjMxMjg4NDM0NTM4MTgzNTY1OTA5MzE5OTUyMDk4MDY2MjcyZS0zNUwsCisJIDQuMzM1OTA1MDY1MDYxODkwNTEyMzk4NTIyMDEzMDIxNjc2MTNlLTM1TCwKK307CisKK2NvbnN0IGxvbmcgZG91YmxlIGFUW10gPSB7CisJIDMuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxMjVlLTAxTCwKKwktMS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTE4MDQzMGUtMDFMLAorCSAxLjQyODU3MTQyODU3MTQyODU3MTQyODU3MTQyMTI1MjY5ODI3ZS0wMUwsCisJLTEuMTExMTExMTExMTExMTExMTExMTExMTA4MzQ0OTA4MTAxNjllLTAxTCwKKwkgOS4wOTA5MDkwOTA5MDkwOTA5MDkwODUyMjM1NTcwODYyMzY4MWUtMDJMLAorCS03LjY5MjMwNzY5MjMwNzY5MjMwNjk2NTUzODQ0OTM1MzU3MDIxZS0wMkwsCisJIDYuNjY2NjY2NjY2NjY2NjY2NjAzOTAwOTY3NzMwNDYyNTYwOTZlLTAyTCwKKwktNS44ODIzNTI5NDExNzY0NjY3MTcwNjU4Mjk4NTIwOTY0MzY5NGUtMDJMLAorCSA1LjI2MzE1Nzg5NDczNjY2NDc4NTE1ODQ3MDkyMDIwMzI3NTA2ZS0wMkwsCisJLTQuNzYxOTA0NzYxODk4NTU1MTcwMjEwMjQ0MjQ5OTE0MzYxNDRlLTAyTCwKKwkgNC4zNDc4MjYwODY3ODY5NTA4NTk0ODUzMTk5MzQ1ODA5NzAyNmUtMDJMLAorCS0zLjk5OTk5OTk5NjMyNjYzNDY5MzMwNjM0MjE1OTkxMTQyMzY4ZS0wMkwsCisJIDMuNzAzNzAzNjM5ODc0MjM3MDI4OTEyNTA4Mjk5MTg2NTk3MjNlLTAyTCwKKwktMy40NDgyNzQ5NjUxNTA0ODA5MDcyNjY2OTkwNzYxMjMzNTk1NGUtMDJMLAorCSAzLjIyNTc5NjIwNjgxNDIwMTQ5ODcxOTczNzEwODUyMjY4NTI4ZS0wMkwsCisJLTMuMDMwMjA3Njc2NTQyNjkyNjEwNDE2NDc1NzA2MjY3NzgwNjdlLTAyTCwKKwkgMi44NTY0MTk3OTg4MjUzNDc4MzIyMzQwMzcxNTkzMDk0NjEzOGUtMDJMLAorCS0yLjY5ODI0ODc5NzI2NzM4NTY4MTg5OTI5NDYxMzgzNzQxMzIzZS0wMkwsCisJIDIuNTQxOTQ2OTg0OTg4MDg1NDI5NTQxODcxMTA4NzM2NzU3NjllLTAyTCwKKwktMi4zNTA4Mzg3OTcwODE4OTA1OTkyNjE4MzEzODEzMDE4MzIxNWUtMDJMLAorCSAyLjA0ODMyMzU4OTk4MTY1MzY0MzQ5OTU3MzI1MDY3MTMxNDI4ZS0wMkwsCisJLTEuNTQ0ODk1NTU0ODg1NDQzOTc4NTg1MDcyNDg2MTIzNjI5NTdlLTAyTCwKKwkgOC42NDQ5MjM2MDk4OTI3ODc2MTQ5MzAzNzg2MTU3NTI0ODAzOGUtMDNMLAorCS0yLjU4NTIxMTIxNTk3NjA5ODcyNzI3OTE5MTU0NTY5NzY1NDY5ZS0wM0wsCit9OworCitjb25zdCBsb25nIGRvdWJsZSBwaV9sbyA9IDguNjcxODEwMTMwMTIzNzgxMDI0Nzk3MDQ0MDI2MDQzMzUyMjVlLTM1TDsKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9pbnZ0cmlnLmggYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvaW52dHJpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjU5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvaW52dHJpZy5oCkBAIC0wLDAgKzEsMTEzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisKKyNkZWZpbmUJQklBUwkJKExEQkxfTUFYX0VYUCAtIDEpCisjZGVmaW5lCU1BTkhfU0laRQkoTERCTF9NQU5IX1NJWkUgKyAxKQorCisvKiBBcHByb3hpbWF0aW9uIHRocmVzaG9sZHMuICovCisjZGVmaW5lCUFTSU5fTElORUFSCShCSUFTIC0gNTYpCS8qIDIqKi01NiAqLworI2RlZmluZQlBQ09TX0NPTlNUCShCSUFTIC0gMTEzKQkvKiAyKiotMTEzICovCisjZGVmaW5lCUFUQU5fQ09OU1QJKEJJQVMgKyAxMTMpCS8qIDIqKjExMyAqLworI2RlZmluZQlBVEFOX0xJTkVBUgkoQklBUyAtIDU2KQkvKiAyKiotNTYgKi8KKworLyogMC45NSAqLworI2RlZmluZQlUSFJFU0gJKCgweGU2NjY2NjY2NjY2NjY2NjZVTEw+Pig2NC0oTUFOSF9TSVpFLTEpKSl8TERCTF9OQklUKQorCisvKiBDb25zdGFudHMgc2hhcmVkIGJ5IHRoZSBsb25nIGRvdWJsZSBpbnZlcnNlIHRyaWcgZnVuY3Rpb25zLiAqLworI2RlZmluZQlwUzAJX0l0TF9wUzAKKyNkZWZpbmUJcFMxCV9JdExfcFMxCisjZGVmaW5lCXBTMglfSXRMX3BTMgorI2RlZmluZQlwUzMJX0l0TF9wUzMKKyNkZWZpbmUJcFM0CV9JdExfcFM0CisjZGVmaW5lCXBTNQlfSXRMX3BTNQorI2RlZmluZQlwUzYJX0l0TF9wUzYKKyNkZWZpbmUJcFM3CV9JdExfcFM3CisjZGVmaW5lCXBTOAlfSXRMX3BTOAorI2RlZmluZQlwUzkJX0l0TF9wUzkKKyNkZWZpbmUJcVMxCV9JdExfcVMxCisjZGVmaW5lCXFTMglfSXRMX3FTMgorI2RlZmluZQlxUzMJX0l0TF9xUzMKKyNkZWZpbmUJcVM0CV9JdExfcVM0CisjZGVmaW5lCXFTNQlfSXRMX3FTNQorI2RlZmluZQlxUzYJX0l0TF9xUzYKKyNkZWZpbmUJcVM3CV9JdExfcVM3CisjZGVmaW5lCXFTOAlfSXRMX3FTOAorI2RlZmluZQlxUzkJX0l0TF9xUzkKKyNkZWZpbmUJYXRhbmhpCV9JdExfYXRhbmhpCisjZGVmaW5lCWF0YW5sbwlfSXRMX2F0YW5sbworI2RlZmluZQlhVAlfSXRMX2FUCisjZGVmaW5lCXBpX2xvCV9JdExfcGlfbG8KKworI2RlZmluZQlwaW8yX2hpCWF0YW5oaVszXQorI2RlZmluZQlwaW8yX2xvCWF0YW5sb1szXQorI2RlZmluZQlwaW80X2hpCWF0YW5oaVsxXQorCisvKiBDb25zdGFudHMgc2hhcmVkIGJ5IHRoZSBsb25nIGRvdWJsZSBpbnZlcnNlIHRyaWcgZnVuY3Rpb25zLiAqLworZXh0ZXJuIGNvbnN0IGxvbmcgZG91YmxlIHBTMCwgcFMxLCBwUzIsIHBTMywgcFM0LCBwUzUsIHBTNiwgcFM3LCBwUzgsIHBTOTsKK2V4dGVybiBjb25zdCBsb25nIGRvdWJsZSBxUzEsIHFTMiwgcVMzLCBxUzQsIHFTNSwgcVM2LCBxUzcsIHFTOCwgcVM5OworZXh0ZXJuIGNvbnN0IGxvbmcgZG91YmxlIGF0YW5oaVtdLCBhdGFubG9bXSwgYVRbXTsKK2V4dGVybiBjb25zdCBsb25nIGRvdWJsZSBwaV9sbzsKKworc3RhdGljIGlubGluZSBsb25nIGRvdWJsZQorUChsb25nIGRvdWJsZSB4KQoreworCisJcmV0dXJuICh4ICogKHBTMCArIHggKiAocFMxICsgeCAqIChwUzIgKyB4ICogKHBTMyArIHggKiBcCisJCShwUzQgKyB4ICogKHBTNSArIHggKiAocFM2ICsgeCAqIChwUzcgKyB4ICogKHBTOCArIHggKiBcCisJCXBTOSkpKSkpKSkpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBkb3VibGUKK1EobG9uZyBkb3VibGUgeCkKK3sKKworCXJldHVybiAoMS4wICsgeCAqIChxUzEgKyB4ICogKHFTMiArIHggKiAocVMzICsgeCAqIChxUzQgKyB4ICogXAorCQkocVM1ICsgeCAqIChxUzYgKyB4ICogKHFTNyArIHggKiAocVM4ICsgeCAqIHFTOSkpKSkpKSkpKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIGRvdWJsZQorVF9ldmVuKGxvbmcgZG91YmxlIHgpCit7CisKKwlyZXR1cm4gKGFUWzBdICsgeCAqIChhVFsyXSArIHggKiAoYVRbNF0gKyB4ICogKGFUWzZdICsgeCAqIFwKKwkJKGFUWzhdICsgeCAqIChhVFsxMF0gKyB4ICogKGFUWzEyXSArIHggKiAoYVRbMTRdICsgeCAqIFwKKwkJKGFUWzE2XSArIHggKiAoYVRbMThdICsgeCAqIChhVFsyMF0gKyB4ICogYVRbMjJdKSkpKSkpKSkpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBkb3VibGUKK1Rfb2RkKGxvbmcgZG91YmxlIHgpCit7CisKKwlyZXR1cm4gKGFUWzFdICsgeCAqIChhVFszXSArIHggKiAoYVRbNV0gKyB4ICogKGFUWzddICsgeCAqIFwKKwkJKGFUWzldICsgeCAqIChhVFsxMV0gKyB4ICogKGFUWzEzXSArIHggKiAoYVRbMTVdICsgeCAqIFwKKwkJKGFUWzE3XSArIHggKiAoYVRbMTldICsgeCAqIChhVFsyMV0gKyB4ICogYVRbMjNdKSkpKSkpKSkpKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgva19jb3NsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgva19jb3NsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0YWEzNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX2Nvc2wuYwpAQCAtMCwwICsxLDYxIEBACisvKiBGcm9tOiBAKCMpa19jb3MuYyAxLjMgOTUvMDEvMTggKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4IFN0ZXZlbiBHLiBLYXJnbCwgRGF2aWQgU2NodWx0eiwgQnJ1Y2UgRC4gRXZhbnMuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogbGQxMjggdmVyc2lvbiBvZiBrX2Nvcy5jLiAgU2VlIC4uL3NyYy9rX2Nvcy5jIGZvciBtb3N0IGNvbW1lbnRzLgorICovCisKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworLyoKKyAqIERvbWFpbiBbLTAuNzg1NCwgMC43ODU0XSwgcmFuZ2UgflstMS44MGUtMzcsIDEuNzllLTM3XToKKyAqIHxjb3MoeCkgLSBjKHgpKXwgPCAyKiotMTIyLjAKKyAqCisgKiAxMTMtYml0IHByZWNpc2lvbiByZXF1aXJlcyBtb3JlIGNhcmUgdGhhbiA2NC1iaXQgcHJlY2lzaW9uLCBzaW5jZQorICogc2ltcGxlIG1ldGhvZHMgZ2l2ZSBhIG1pbmltYXggcG9seW5vbWlhbCB3aXRoIGNvZWZmaWNpZW50IGZvciB4XjIKKyAqIHRoYXQgaXMgMSB1bHAgYmVsb3cgMC41LCBidXQgd2Ugd2FudCBpdCB0byBiZSBwcmVjaXNlbHkgMC41LiAgU2VlCisgKiAuLi9sZDgwL2tfY29zbC5jIGZvciBtb3JlIGRldGFpbHMuCisgKi8KK3N0YXRpYyBjb25zdCBkb3VibGUKK29uZSA9IDEuMDsKKworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCitDMSA9ICAwLjA0MTY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4NDI0NjcxTCwKK0MyID0gLTAuMDAxMzg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODYzNDkwODkzNzMyTCwKK0MzID0gIDAuMDAwMDI0ODAxNTg3MzAxNTg3MzAxNTg3MzAxNTg2MDA3OTUzMDQ5MTQyMTBMLAorQzQgPSAtMC4yNzU1NzMxOTIyMzk4NTg5MDY1MjU1NDc0OTQ3MDc4OTM0Mjg0MzI0ZS02TCwKK0M1ID0gIDAuMjA4NzY3NTY5ODc4NjgwOTg5NzY1OTIyNTMxMzEzNjQwMDc5Mzk0OGUtOEwsCitDNiA9IC0wLjExNDcwNzQ1NTk3NzI5NzIzMTU4MTcxNDk5ODY4MTIwMzEyMDQ3NzVlLTEwTCwKK0M3ID0gIDAuNDc3OTQ3NzMzMjM4NjgwODk3Njg3NTQ1NzkzNzI1MjEyMDI5MzQwMGUtMTNMOworCitzdGF0aWMgY29uc3QgZG91YmxlCitDOCA9IC0wLjE1NjE5MjA2OTY3MjE1MDc5Mjk1MTY3MTgzMDc4MjA5NTgxMTk4NjhlLTE1LAorQzkgPSAgMC40MTEwMzE3NDEzNzQ0NTk0OTcxNDc1OTQxNTU3NjA3ODA0NTA4MDM5ZS0xOCwKK0MxMCA9IC0wLjg4OTY1OTI0NjcxOTE5Mzg4MDMyODg1MjE5NTgzMTM5MjAxNTY0MDllLTIxLAorQzExID0gIDAuMTYwMTA2MTQzNTc5NDUzNTEzODI0NDM0NjI1NjA2NTE5Mjc4MjU4MWUtMjM7CisKK2xvbmcgZG91YmxlCitfX2tlcm5lbF9jb3NsKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpCit7CisJbG9uZyBkb3VibGUgaHoseixyLHc7CisKKwl6ICA9IHgqeDsKKwlyICA9IHoqKEMxK3oqKEMyK3oqKEMzK3oqKEM0K3oqKEM1K3oqKEM2K3oqKEM3KworCSAgICB6KihDOCt6KihDOSt6KihDMTAreipDMTEpKSkpKSkpKSkpOworCWh6ID0gMC41Kno7CisJdyAgPSBvbmUtaHo7CisJcmV0dXJuIHcgKyAoKChvbmUtdyktaHopICsgKHoqci14KnkpKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX3NpbmwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9rX3NpbmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDQxNWMwCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfc2lubC5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qIEZyb206IEAoIylrX3Npbi5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RldmVuIEcuIEthcmdsLCBEYXZpZCBTY2h1bHR6LCBCcnVjZSBELiBFdmFucy4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qCisgKiBsZDEyOCB2ZXJzaW9uIG9mIGtfc2luLmMuICBTZWUgLi4vc3JjL2tfc2luLmMgZm9yIG1vc3QgY29tbWVudHMuCisgKi8KKworI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZG91YmxlCitoYWxmID0gIDAuNTsKKworLyoKKyAqIERvbWFpbiBbLTAuNzg1NCwgMC43ODU0XSwgcmFuZ2UgflstMS41M2UtMzcsIDEuNjU5ZS0zN10KKyAqIHxzaW4oeCkveCAtIHMoeCl8IDwgMioqLTEyMi4xCisgKgorICogU2VlIC4uL2xkODAva19jb3NsLmMgZm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgcG9seW5vbWlhbC4KKyAqLworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCitTMSA9IC0wLjE2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjA2NzMyNDE2MTE2NTU4TCwKK1MyID0gIDAuMDA4MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMTEzNTQwNDg1MTI4ODI3MDA0N0wsCitTMyA9IC0wLjAwMDE5ODQxMjY5ODQxMjY5ODQxMjY5ODQxMjY5ODM5OTM1Nzg1MzI1NjM4MzEwNDI4NzE3TCwKK1M0ID0gIDAuMjc1NTczMTkyMjM5ODU4OTA2NTI1NTczMTYwNTMwMzk5NDYyNjgzMzMyMzEyMDU2ODZlLTVMLAorUzUgPSAtMC4yNTA1MjEwODM4NTQ0MTcxODc3NTA0ODIxNDgyNjM4NDMxMjI1Mzg2MjkzMDA2NDc0NWUtN0wsCitTNiA9ICAwLjE2MDU5MDQzODM2ODIxNjE0NTk2NTcxODMyMTk0NTI0MzkyNTgxMDgyNDQ0ODA1NzI5ZS05TCwKK1M3ID0gLTAuNzY0NzE2MzczMTgxOTgxNTE4MDcwNjMzODc5NTQ5MzkyMTMyODc0ODgyMTYzMDM3NjhlLTEyTCwKK1M4ID0gIDAuMjgxMTQ1NzI1NDM0NTEyOTI2MjUwMjQ5NjcxNzQ2Mzg0NzcyODMxODczOTc2MjEzMDNlLTE0TDsKKworc3RhdGljIGNvbnN0IGRvdWJsZQorUzkgID0gLTAuODIyMDYzNTI0NTgzNDg5NDc4MTI1MTIxMjIxNjM0NDYyMDI0OTgwMDUxNTQyOTY4NjNlLTE3LAorUzEwID0gIDAuMTk1NzI5NDAwMTE5MDYxMDk0MTgwODA2MDk5MjgzMzQzODA1NjAxMzUzNTgzODUyNTZlLTE5LAorUzExID0gLTAuMzg2ODA4MTMzNzk3MDE5NjY5NzA2NzM3MjQyOTkyMDc0ODA5NjU0NTI2MTY5MTE0MjBlLTIyLAorUzEyID0gIDAuNjQwMzgxNTAwNzg2NzE4NzI3OTY2Nzg1Njk1ODYzMTU4ODEwMjA2NTk5MTIxMzk0MTJlLTI1OworCitsb25nIGRvdWJsZQorX19rZXJuZWxfc2lubChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5LCBpbnQgaXkpCit7CisJbG9uZyBkb3VibGUgeixyLHY7CisKKwl6CT0gIHgqeDsKKwl2CT0gIHoqeDsKKwlyCT0gIFMyK3oqKFMzK3oqKFM0K3oqKFM1K3oqKFM2K3oqKFM3K3oqKFM4KworCSAgICB6KihTOSt6KihTMTAreiooUzExK3oqUzEyKSkpKSkpKSkpOworCWlmKGl5PT0wKSByZXR1cm4geCt2KihTMSt6KnIpOworCWVsc2UgICAgICByZXR1cm4geC0oKHoqKGhhbGYqeS12KnIpLXkpLXYqUzEpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfdGFubC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L2tfdGFubC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZWMwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgva190YW5sLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qIEZyb206IEAoIylrX3Rhbi5jIDEuNSAwNC8wNC8yMiBTTUkgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDA0IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RldmVuIEcuIEthcmdsLCBEYXZpZCBTY2h1bHR6LCBCcnVjZSBELiBFdmFucy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIGxkMTI4IHZlcnNpb24gb2Yga190YW4uYy4gIFNlZSAuLi9zcmMva190YW4uYyBmb3IgbW9zdCBjb21tZW50cy4KKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisvKgorICogRG9tYWluIFstMC42NzQzNCwgMC42NzQzNF0sIHJhbmdlIH5bLTMuMzdlLTM2LCAxLjk4MmUtMzddCisgKiB8dGFuKHgpL3ggLSB0KHgpfCA8IDIqKi0xMTcuOCAoWFhYIHNob3VsZCBiZSB+MWUtMzcpCisgKgorICogU2VlIC4uL2xkODAva19jb3NsLmMgZm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgcG9seW5vbWlhbC4KKyAqLworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCitUMyA9IDB4MS41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzcC0yTCwKK1Q1ID0gMHgxLjExMTExMTExMTExMTExMTExMTExMTExMTFlYjVwLTNMLAorVDcgPSAweDEuYmExYmExYmExYmExYmExYmExYmExYjY5NGNkNnAtNUwsCitUOSA9IDB4MS42NjRmNDg4MmMxMGY5ZjMyZDZiYmUwOWQ4YmNkcC02TCwKK1QxMSA9IDB4MS4yMjZlMzU1ZTZjMjNjOGY1YjRmNTc2MjMyMmVlcC03TCwKK1QxMyA9IDB4MS5kNmQzZDBlMTU3ZGRmYjVmZWQ4ZTg0ZTI3YjM3cC05TCwKK1QxNSA9IDB4MS43ZGEzNjQ1MmI3NWUyYjVmY2U5ZWU3YzJjOTJlcC0xMEwsCitUMTcgPSAweDEuMzU1ODI0ODAzNjc0NDc3ZGZjZjcyNjY0OWVmZXAtMTFMLAorVDE5ID0gMHgxLmY1N2Q3NzM0ZDE2NTZlMGFjZWI3MTZmNjE0YzJwLTEzTCwKK1QyMSA9IDB4MS45NjdlMThhZmNiMTgwZWQ5NDJkZmRjNTE4ZDZjcC0xNEwsCitUMjMgPSAweDEuNDk3ZDhlZWEyMWU5NWJjN2UyYWE3OWI5ZjJjZHAtMTVMLAorVDI1ID0gMHgxLjBiMTMyZDM5ZjA1NWM4MWJlNDllZmY3YWZkNTBwLTE2TCwKK1QyNyA9IDB4MS5iMGY3MmQzM2VmZjdiZmEyZmJjMTA1OWQ5MGI2cC0xOEwsCitUMjkgPSAweDEuNWVmMmRhZjIxZDExMTNkZjM4ZDBmYmMwMDI2N3AtMTlMLAorVDMxID0gMHgxLjFjNzdkNmVhYzAyMzQ5ODhjZGFhMDRjOTY2MjZwLTIwTCwKK1QzMyA9IDB4MS5jZDJhNWEyOTJiMTgwZTBiZGQ3MDEwNTdkZmUzcC0yMkwsCitUMzUgPSAweDEuNzVjNzM1N2QwMjk4YzAxYTMxZDBhNmY3ZDUxOHAtMjNMLAorVDM3ID0gMHgxLjJmMzE5MGY0NzE4YTlhNTIwZjk4ZjUwMDgxZmNwLTI0TCwKK3BpbzQgPSAweDEuOTIxZmI1NDQ0MmQxODQ2OTg5OGNjNTE3MDFiOHAtMUwsCitwaW80bG8gPSAweDEuY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2MHAtMTE2TDsKKworc3RhdGljIGNvbnN0IGRvdWJsZQorVDM5ID0gIDAuMDAwMDAwMDI4NDQzMzg5MTIxMzE4MzUyLAkvKiAgMHgxZThhNzU5Mjk3NzkzOC4wcC03OCAqLworVDQxID0gIDAuMDAwMDAwMDExOTgxMDEzMTAyMDAxOTczLAkvKiAgMHgxOWJhYTFiMTIyMzIxOS4wcC03OSAqLworVDQzID0gIDAuMDAwMDAwMDAzODMwMzU3ODA0NDk1ODA3MCwJLyogIDB4MTA3Mzg1ZGZiMjQ1MjkuMHAtODAgKi8KK1Q0NSA9ICAwLjAwMDAwMDAwMzQ2NjQzNzgyMTY5MDk4OTMsCS8qICAweDFkYzZjNzAyYTA1MjYyLjBwLTgxICovCitUNDcgPSAtMC4wMDAwMDAwMDE1MDkwNjQxNzAxOTk3Nzg1LAkvKiAtMHgxOWVjZWYzNTY5ZWJiNi4wcC04MiAqLworVDQ5ID0gIDAuMDAwMDAwMDAyOTQ0OTU1MjMwMDQ4Mzk1MiwJLyogIDB4MTk0YzA2NjhkYTc4NmEuMHAtODEgKi8KK1Q1MSA9IC0wLjAwMDAwMDAwMjIwMDY5OTU3MDYwOTc3MTEsCS8qIC0weDEyZTc2M2I4ODQ1MjY4LjBwLTgxICovCitUNTMgPSAgMC4wMDAwMDAwMDE1NDY4MjAwOTEzMTk2NjEyLAkvKiAgMHgxYTkyZmM5OGMyOTU1NC4wcC04MiAqLworVDU1ID0gLTAuMDAwMDAwMDAwNjEzMTE2MTMzODY4NDk2NzQsCS8qIC0weDE1MTEwNmNiYzc3OWE5LjBwLTgzICovCitUNTcgPSAgMS40OTEyNDY5NjgxNTA4MDEyZS0xMDsJCS8qICAweDE0N2VkYmRiYTZmNDNhLjBwLTg1ICovCisKK2xvbmcgZG91YmxlCitfX2tlcm5lbF90YW5sKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHksIGludCBpeSkgeworCWxvbmcgZG91YmxlIHosIHIsIHYsIHcsIHM7CisJbG9uZyBkb3VibGUgb3NpZ247CisJaW50IGk7CisKKwlpeSA9IChpeSA9PSAxID8gLTEgOiAxKTsJLyogWFhYIHJlY292ZXIgb3JpZ2luYWwgaW50ZXJmYWNlICovCisJb3NpZ24gPSAoeCA+PSAwID8gMS4wIDogLTEuMCk7CS8qIFhYWCBzbG93LCBwcm9iYWJseSB3cm9uZyBmb3IgLTAgKi8KKwlpZiAoZmFic2woeCkgPj0gMC42NzQzNCkgeworCQlpZiAoeCA8IDApIHsKKwkJCXggPSAteDsKKwkJCXkgPSAteTsKKwkJfQorCQl6ID0gcGlvNCAtIHg7CisJCXcgPSBwaW80bG8gLSB5OworCQl4ID0geiArIHc7CisJCXkgPSAwLjA7CisJCWkgPSAxOworCX0gZWxzZQorCQlpID0gMDsKKwl6ID0geCAqIHg7CisJdyA9IHogKiB6OworCXIgPSBUNSArIHcgKiAoVDkgKyB3ICogKFQxMyArIHcgKiAoVDE3ICsgdyAqIChUMjEgKworCSAgICB3ICogKFQyNSArIHcgKiAoVDI5ICsgdyAqIChUMzMgKworCSAgICB3ICogKFQzNyArIHcgKiAoVDQxICsgdyAqIChUNDUgKyB3ICogKFQ0OSArIHcgKiAoVDUzICsKKwkgICAgdyAqIFQ1NykpKSkpKSkpKSkpKTsKKwl2ID0geiAqIChUNyArIHcgKiAoVDExICsgdyAqIChUMTUgKyB3ICogKFQxOSArIHcgKiAoVDIzICsKKwkgICAgdyAqIChUMjcgKyB3ICogKFQzMSArIHcgKiAoVDM1ICsKKwkgICAgdyAqIChUMzkgKyB3ICogKFQ0MyArIHcgKiAoVDQ3ICsgdyAqIChUNTEgKyB3ICogVDU1KSkpKSkpKSkpKSkpOworCXMgPSB6ICogeDsKKwlyID0geSArIHogKiAocyAqIChyICsgdikgKyB5KTsKKwlyICs9IFQzICogczsKKwl3ID0geCArIHI7CisJaWYgKGkgPT0gMSkgeworCQl2ID0gKGxvbmcgZG91YmxlKSBpeTsKKwkJcmV0dXJuIG9zaWduICoKKwkJCSh2IC0gMi4wICogKHggLSAodyAqIHcgLyAodyArIHYpIC0gcikpKTsKKwl9CisJaWYgKGl5ID09IDEpCisJCXJldHVybiB3OworCWVsc2UgeworCQkvKgorCQkgKiBpZiBhbGxvdyBlcnJvciB1cCB0byAyIHVscCwgc2ltcGx5IHJldHVybgorCQkgKiAtMS4wIC8gKHgrcikgaGVyZQorCQkgKi8KKwkJLyogY29tcHV0ZSAtMS4wIC8gKHgrcikgYWNjdXJhdGVseSAqLworCQlsb25nIGRvdWJsZSBhLCB0OworCQl6ID0gdzsKKwkJeiA9IHogKyAweDFwMzIgLSAweDFwMzI7CisJCXYgPSByIC0gKHogLSB4KTsJLyogeit2ID0gcit4ICovCisJCXQgPSBhID0gLTEuMCAvIHc7CS8qIGEgPSAtMS4wL3cgKi8KKwkJdCA9IHQgKyAweDFwMzIgLSAweDFwMzI7CisJCXMgPSAxLjAgKyB0ICogejsKKwkJcmV0dXJuIHQgKyBhICogKHMgKyB0ICogdik7CisJfQorfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfZXhwMmwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cDJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkNTE0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cDJsLmMKQEAgLTAsMCArMSw0MjcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisjaW5jbHVkZSAibWF0aC5oIgorCisjZGVmaW5lCVRCTEJJVFMJNworI2RlZmluZQlUQkxTSVpFCSgxIDw8IFRCTEJJVFMpCisKKyNkZWZpbmUJQklBUwkoTERCTF9NQVhfRVhQIC0gMSkKKyNkZWZpbmUJRVhQTUFTSwkoQklBUyArIExEQkxfTUFYX0VYUCkKKworc3RhdGljIHZvbGF0aWxlIGxvbmcgZG91YmxlCisgICAgaHVnZSAgICAgID0gMHgxcDEwMDAwTCwKKyAgICB0d29tMTAwMDAgPSAweDFwLTEwMDAwTDsKKworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCisgICAgUDEgICAgICAgID0gMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTZwLTFMLAorICAgIFAyCSAgICAgID0gMHgxLmViZmJkZmY4MmM1OGVhODZmMTZiMDZlYzk3MzZwLTNMLAorICAgIFAzICAgICAgICA9IDB4MS5jNmIwOGQ3MDRhMGJmOGIzM2E3NjJiYWQzNDU5cC01TCwKKyAgICBQNCAgICAgICAgPSAweDEuM2IyYWI2ZmJhNGU3NzI5Y2NiYmUwYjRmM2ZjMnAtN0wsCisgICAgUDUgICAgICAgID0gMHgxLjVkODdmZTc4YTY3MzExMDcxZGVlMTNmZDExZDlwLTEwTCwKKyAgICBQNiAgICAgICAgPSAweDEuNDMwOTEyZjg2Yzc4NzZmNGI2NjNiMjNjNWZlNXAtMTNMOworCitzdGF0aWMgY29uc3QgZG91YmxlCisgICAgUDcgICAgICAgID0gMHgxLmZmY2JmYzU4OGIwNDFwLTE3LAorICAgIFA4ICAgICAgICA9IDB4MS42MmMwMjIzYTVjN2M3cC0yMCwKKyAgICBQOSAgICAgICAgPSAweDEuYjUyNTQxZmY1OTcxM3AtMjQsCisgICAgUDEwICAgICAgID0gMHgxLmU0Y2Y1NmEzOTFlMjJwLTI4LAorICAgIHJlZHV4ICAgICA9IDB4MS44cDExMiAvIFRCTFNJWkU7CisKK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZSB0YmxbVEJMU0laRV0gPSB7CisJMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTM2NmRmZWFwLTFMLAorCTB4MS42YzAxMjc1MGJkYWJlZWQ3NmE5OTgwMGY0ZWRlcC0xTCwKKwkweDEuNmRmYjIzYzY1MWEyZWYyMjBlMmNiZTFiYzBkNHAtMUwsCisJMHgxLjZmZjdkZjk1MTk0ODNjZjg3ZTFiNGYzZTFlOThwLTFMLAorCTB4MS43MWY3NWU4ZWM1ZjczZGQyMzcwZjJlZjBiMTQ4cC0xTCwKKwkweDEuNzNmOWE0OGE1ODE3M2JkNWM5YTRlNjhhYjA3NHAtMUwsCisJMHgxLjc1ZmViNTY0MjY3YzhiZjZlOWFhMzNhNDg5YThwLTFMLAorCTB4MS43ODA2OTRmZGU1ZDNmNjE5YWUwMjgwODU5MmE0cC0xTCwKKwkweDEuN2ExMTQ3M2ViMDE4NmQ3ZDUxMDIzZjZjY2IxYXAtMUwsCisJMHgxLjdjMWVkMDEzMGMxMzI3YzQ5MzM0NDU5Mzc4ZGVwLTFMLAorCTB4MS43ZTJmMzM2Y2Y0ZTYyMTA1ZDAyYmExNTc5NzU2cC0xTCwKKwkweDEuODA0Mjc1NDNlMWExMWI2MGRlNjc2NDlhMzg0MnAtMUwsCisJMHgxLjgyNTg5OTk0Y2NlMTI4YWNmODhhZmFiMzQ5MjhwLTFMLAorCTB4MS44NDcxYTQ2MjNjN2FjY2U1MmY2Yjk3YzY0NDRjcC0xTCwKKwkweDEuODY4ZDk5YjQ0OTJlYzgwZTQxZDkwYWMyNTU2YXAtMUwsCisJMHgxLjg4YWM3ZDk4YTY2OTk2NjUzMGJjZGYyZDRjYzBwLTFMLAorCTB4MS44YWNlNTQyMmFhMGRiNWJhN2M1NWExOTJjNjQ4cC0xTCwKKwkweDEuOGNmMzIxNmI1NDQ4YmVmMmFhMWNkMTYxYzU3YXAtMUwsCisJMHgxLjhmMWFlOTkxNTc3MzYyYjk4Mjc0NWM3MmVkZGFwLTFMLAorCTB4MS45MTQ1YjBiOTFmZmM1ODhhNjFiNDY5ZjZiNmEwcC0xTCwKKwkweDEuOTM3MzdiMGNkYzVlNGY0NTAxYzNmMjU0MGFlOHAtMUwsCisJMHgxLjk1YTQ0Y2JjODUyMGVlOWI0ODM2OTVhMGU3ZmVwLTFMLAorCTB4MS45N2Q4MjlmZGU0ZTRmOGI5ZTkyMGY5MWU4ZWI2cC0xTCwKKwkweDEuOWEwZjE3MGNhMDdiOWJhMzEwOWI4YzQ2Nzg0NHAtMUwsCisJMHgxLjljNDkxODJhM2YwOTAxYzdjNDZiMDcxZjI4ZGVwLTFMLAorCTB4MS45ZTg2MzE5ZTMyMzIzMTgyNGNhNzhlNjRjNDYycC0xTCwKKwkweDEuYTBjNjY3YjVkZTU2NGIyOWFkYThiOGNhYmJhY3AtMUwsCisJMHgxLmEzMDliZWM0YTJkMzM1OGMxNzFmNzcwZGIxZjRwLTFMLAorCTB4MS5hNTUwM2IyM2UyNTVjOGI0MjQ0OTFjYWY4OGNjcC0xTCwKKwkweDEuYTc5OWUxMzMwYjM1ODZmMmRmYjJiMTU4ZjMxZXAtMUwsCisJMHgxLmE5ZTZiNTU3OWZkYmY0M2ViMjQzYmRmZjUzYTJwLTFMLAorCTB4MS5hYzM2YmJmZDNmMzc5YzBkYjk2NmEzMTI2OTg4cC0xTCwKKwkweDEuYWU4OWY5OTVhZDNhZDVlODczNGQxNzczMWM4MHAtMUwsCisJMHgxLmIwZTA3Mjk4ZGI2NjU5MDg0MmFjZGZjNmZiNGVwLTFMLAorCTB4MS5iMzNhMmI4NGYxNWZhZjZiZmQwZTdiZDk0MWIwcC0xTCwKKwkweDEuYjU5NzI4ZGU1NTkzOThlMzg4MTExMTY0ODczOHAtMUwsCisJMHgxLmI3Zjc2ZjJmYjVlNDZlYWE3YjA4MWFiNTNmZjZwLTFMLAorCTB4MS5iYTViMDMwYTEwNjQ5ODQwY2IzYzZhZjViNzRjcC0xTCwKKwkweDEuYmNjMWU5MDRiYzFkMjI0N2JhMGY0NWIzZDA2Y3AtMUwsCisJMHgxLmJmMmMyNWJkNzFlMDg4NDA4ZDcwMjUxOTBjZDBwLTFMLAorCTB4MS5jMTk5YmRkODU1MjljMjIyMGNiMTJhMDkxNmJhcC0xTCwKKwkweDEuYzQwYWI1ZmZmZDA3YTZkMTRkZjgyMGYxN2RlYXAtMUwsCisJMHgxLmM2N2YxMmU1N2QxNGI0YTIxMzdmZDIwZjJhMjZwLTFMLAorCTB4MS5jOGY2ZDk0MDZlN2I1MTFhY2JjNDg4MDVjM2Y2cC0xTCwKKwkweDEuY2I3MjBkY2VmOTA2OTE1MDNjYmQxZTk0OWQwYXAtMUwsCisJMHgxLmNkZjBiNTU1ZGMzZjljNDRmODk1OGZhYzRmMTJwLTFMLAorCTB4MS5kMDcyZDRhMDc4OTdiOGQwZjIyZjIxYTEzNzkycC0xTCwKKwkweDEuZDJmODcwODBkODlmMThhZGUxMjM5ODllYTUwZXAtMUwsCisJMHgxLmQ1ODE4ZGNmYmE0ODcyNWRhMDVhZWI2NmRmZjhwLTFMLAorCTB4MS5kODBlMzE2Yzk4Mzk3YmI4NGY5ZDA0ODgwN2EwcC0xTCwKKwkweDEuZGE5ZTYwM2RiMzI4NTcwOGMwMWE1YjZkNDgwY3AtMUwsCisJMHgxLmRkMzIxZjMwMWI0NjA0YjY5NWRlM2MwNjMwYzBwLTFMLAorCTB4MS5kZmM5NzMzN2I5YjVlYjk2OGNhYzM5ZWQyODRjcC0xTCwKKwkweDEuZTI2NDYxNGY1YTEyOGExMjc2MWZhMTdhZGM3NHAtMUwsCisJMHgxLmU1MDJlZTc4YjNmZjYyNzNkMTMwMTUzOTkyZDBwLTFMLAorCTB4MS5lN2E1MWZiYzc0YzgzNGI1NDhiMjgzMjM3OGE0cC0xTCwKKwkweDEuZWE0YWZhMmE0OTBkOTg1OGY3M2ExOGY1ZGFiNHAtMUwsCisJMHgxLmVjZjQ4MmQ4ZTY3ZjA4ZGIwMzEyZmI5NDlkNTBwLTFMLAorCTB4MS5lZmExYmVlNjE1YTI3NzcxZmQyMWE5MmRhYmI2cC0xTCwKKwkweDEuZjI1MmIzNzZiYmE5NzRlODY5NmZjMzYzOGYyNHAtMUwsCisJMHgxLmY1MDc2NWI2ZTQ1NDA2NzRmODRiNzYyODYxYTZwLTFMLAorCTB4MS5mN2JmZGFkOWNiZTEzODkxM2I0YmZlNzJiZDc4cC0xTCwKKwkweDEuZmE3YzE4MTllOTBkODJlOTBhN2U3NGIyNjM2MHAtMUwsCisJMHgxLmZkM2MyMmI4ZjcxZjEwOTc1YmE0YjMyYmQwMDZwLTFMLAorCTB4MS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwcCswTCwKKwkweDEuMDE2M2RhOWZiMzMzNTZkODRhNjZhZTMzNmU5OHArMEwsCisJMHgxLjAyYzlhM2U3NzgwNjBlZTZmN2NhY2E0ZjdhMThwKzBMLAorCTB4MS4wNDMxNWU4NmU3Zjg0YmQ3MzhmOWEyMGRhNDQycCswTCwKKwkweDEuMDU5YjBkMzE1ODU3NDNhZTdjNTQ4ZWI2OGM2YXArMEwsCisJMHgxLjA3MDZiMjlkZGY2ZGRjNmRjNDAzYTlkODdiMWVwKzBMLAorCTB4MS4wODc0NTE4NzU5YmM4MDhjMzVmMjVkOTQyODU2cCswTCwKKwkweDEuMDllM2VjYWM2ZjM4MzQ1MjFlMDYwYzU4NGQ1Y3ArMEwsCisJMHgxLjBiNTU4NmNmOTg5MGY2Mjk4YjkyYjcxODQyMDBwKzBMLAorCTB4MS4wY2M5MjJiNzI0N2Y3NDA3YjcwNWI4OTNkYmRlcCswTCwKKwkweDEuMGUzZWMzMmQzZDFhMjAyMDc0MmU0ZjhhZjc5NHArMEwsCisJMHgxLjBmYjY2YWZmZWQzMWFmMjMyMDkxZGQ4YTE2OWVwKzBMLAorCTB4MS4xMTMwMWQwMTI1YjUwYTRlYmJmMWFlZDkzMjFjcCswTCwKKwkweDEuMTJhYmRjMDZjMzFjYmZiOTJiYWQzMjRkNmY4NHArMEwsCisJMHgxLjE0MjlhYWVhOTJkZGZiMzQxMDE5NDNiMjU4OGVwKzBMLAorCTB4MS4xNWE5OGM4YTU4ZTUxMjQ4MGQ1NzNkZDU2MmFlcCswTCwKKwkweDEuMTcyYjgzYzdkNTE3YWRjZGY3YzhjNTBlYjE2MnArMEwsCisJMHgxLjE4YWY5Mzg4YzhkZTliYmJmNzBiOWEzYzI2OWNwKzBMLAorCTB4MS4xYTM1YmViNmZjYjc1M2NiNjk4ZjY5MmQyMDM4cCswTCwKKwkweDEuMWJiZTA4NDA0NWNkMzlhYjFlNzJiNDQyODEwZXArMEwsCisJMHgxLjFkNDg3MzE2OGI5YWE3ODA1YjgwMjg5OTBiZThwKzBMLAorCTB4MS4xZWQ1MDIyZmNkOTFjYjg4MTlmZjYxMTIxZmJlcCswTCwKKwkweDEuMjA2M2I4ODYyOGNkNjNiOGVlYjAyOTUwOTNmNnArMEwsCisJMHgxLjIxZjQ5OTE3ZGRjOTYyNTUyZmQyOTI5NGJjMjBwKzBMLAorCTB4MS4yMzg3YTZlNzU2MjM4NjZjMWZhZGIxYzE1OWMwcCswTCwKKwkweDEuMjUxY2U0ZmIyYTYzZjM1ODJhYjdkZTllOTU2MnArMEwsCisJMHgxLjI2YjQ1NjVlMjdjZGQyNTdhNjczMjgxZDMwNjhwKzBMLAorCTB4MS4yODRkZmUxZjU2MzgwOTZjZjE1Y2YwM2M5ZmEwcCswTCwKKwkweDEuMjllOWRmNTFmZGVlMTJjMjVkMTVmNWEyNTAyMnArMEwsCisJMHgxLjJiODdmZDBkYWQ5OGZmZGRlYTQ2NTM4ZmNhMjRwKzBMLAorCTB4MS4yZDI4NWE2ZTQwMzBiNDAwOTFkNTM2ZDA3MzNlcCswTCwKKwkweDEuMmVjYWZhOTNlMmY1NjExY2EwZjQ1ZDUyMzlhNHArMEwsCisJMHgxLjMwNmZlMGEzMWI3MTUyZGU4ZDVhNDYzMDYzYmVwKzBMLAorCTB4MS4zMjE3MGZjNGNkODMxMzUzOWNmMWMzMDA5MzMwcCswTCwKKwkweDEuMzNjMDhiMjY0MTZmZjRjOWM4NjEwZDk2NjgwZXArMEwsCisJMHgxLjM1NmM1NWY5MjlmZjBjOTQ2MjM0NzYzNzNiZTRwKzBMLAorCTB4MS4zNzFhNzM3M2FhOWNhYTcxNDU1MDJmNDU0NTJhcCswTCwKKwkweDEuMzhjYWU2ZDA1ZDg2NTg1YTljYjBkOWJlZDUzMHArMEwsCisJMHgxLjNhN2RiMzRlNTlmZjZlYTFiYzkyOTllMGExZmVwKzBMLAorCTB4MS4zYzMyZGMzMTNhOGU0ODQwMDFmMjI4YjU4Y2YwcCswTCwKKwkweDEuM2RlYTY0YzEyMzQyMjM1YjQxMjIzZTEzZDdlZXArMEwsCisJMHgxLjNmYTQ1MDRhYzgwMWJhMGJmNzAxYWE0MTdiOWNwKzBMLAorCTB4MS40MTYwYTIxZjcyZTI5Zjg0MzI1YjhmM2RiYWNhcCswTCwKKwkweDEuNDMxZjVkOTUwYTg5NmRjNzA0NDM5NDEwYjYyOHArMEwsCisJMHgxLjQ0ZTA4NjA2MTg5MmQwMzEzNmY0MDlkZjA3MjRwKzBMLAorCTB4MS40NmE0MWVkMWQwMDU3NzI1MTJmNDU5MjI5ZjBhcCswTCwKKwkweDEuNDg2YTJiNWMxM2NkMDEzYzFhM2I2OTA2MmYyNnArMEwsCisJMHgxLjRhMzJhZjBkN2QzZGU2NzJkOGJjZjQ2Zjk5YjRwKzBMLAorCTB4MS40YmZkYWQ1MzYyYTI3MWQ0Mzk3YWZlYzQyZTM2cCswTCwKKwkweDEuNGRjYjI5OWZkZGQwZDYzYjM2ZWYxYTllMTlkZXArMEwsCisJMHgxLjRmOWIyNzY5ZDJjYTZhZDMzZDhiNjlhYTBiOGNwKzBMLAorCTB4MS41MTZkYWEyY2Y2NjQxYzExMmY1MmM4NGQ2MDY2cCswTCwKKwkweDEuNTM0MmI1NjlkNGY4MWRmMGE4M2M0OWQ4NmJmNHArMEwsCisJMHgxLjU1MWE0Y2E1ZDkyMGVjNTJlYzYyMDI0MzU0MGNwKzBMLAorCTB4MS41NmY0NzM2YjUyN2RhNjZlY2IwMDQ3NjRlNjFlcCswTCwKKwkweDEuNThkMTJkNDk3YzdmZDI1MmJjMmI3MzQzZDU1NHArMEwsCisJMHgxLjVhYjA3ZGQ0ODU0Mjk1OGM5MzAxNTE5MWU5YThwKzBMLAorCTB4MS41YzkyNjhhNTk0NmI3MDFjNGIxYjgxNjk3ZWQ0cCswTCwKKwkweDEuNWU3NmYxNWFkMjE0ODZlOWJlNGMyMDM5OWQxMnArMEwsCisJMHgxLjYwNWUxYjk3NmRjMDhiMDc2ZjU5MmE0ODcwNjZwKzBMLAorCTB4MS42MjQ3ZWIwM2E1NTg0YjFmMGZhMDZmZDJkOWVhcCswTCwKKwkweDEuNjQzNDYzNGNjYzMxZmM3NmY4NzE0YzRlZTEyMnArMEwsCisJMHgxLjY2MjM4ODI1NTIyMjQ5MTI3ZDllMjliOTJlYTJwKzBMLAorCTB4MS42ODE1NWQ0NGNhOTczMDgxYzU3MjI3YjlmNjllcCswTCwKK307CisKK3N0YXRpYyBjb25zdCBmbG9hdCBlcHNbVEJMU0laRV0gPSB7CisJLTB4MS41YzUwcC0xMDEsCisJLTB4MS41ZDAwcC0xMDYsCisJIDB4MS44ZTkwcC0xMDIsCisJLTB4MS41MzQwcC0xMDMsCisJIDB4MS4xYmQwcC0xMDIsCisJLTB4MS40NjAwcC0xMDUsCisJLTB4MS43YTQwcC0xMDQsCisJIDB4MS5kNTkwcC0xMDIsCisJLTB4MS5kNTkwcC0xMDEsCisJIDB4MS5iMTAwcC0xMDMsCisJLTB4MS4wZDgwcC0xMDUsCisJIDB4MS42YjAwcC0xMDMsCisJLTB4MS45ZjAwcC0xMDUsCisJIDB4MS5jNDAwcC0xMDMsCisJIDB4MS5lMTIwcC0xMDMsCisJLTB4MS5jMTAwcC0xMDQsCisJLTB4MS45ZDIwcC0xMDMsCisJIDB4MS5hODAwcC0xMDgsCisJIDB4MS40YzAwcC0xMDYsCisJLTB4MS45NTAwcC0xMDYsCisJIDB4MS42OTAwcC0xMDUsCisJLTB4MS4yOWQwcC0xMDAsCisJIDB4MS40YzYwcC0xMDMsCisJIDB4MS4xM2EwcC0xMDIsCisJLTB4MS41YjYwcC0xMDMsCisJLTB4MS4xYzQwcC0xMDMsCisJIDB4MS5kYjgwcC0xMDIsCisJIDB4MS45MWEwcC0xMDIsCisJIDB4MS5kYzAwcC0xMDUsCisJIDB4MS40NGMwcC0xMDQsCisJIDB4MS45NzEwcC0xMDIsCisJIDB4MS44NzYwcC0xMDMsCisJLTB4MS5hNzIwcC0xMDMsCisJIDB4MS5lZDIwcC0xMDMsCisJLTB4MS40OWMwcC0xMDIsCisJLTB4MS5lMDAwcC0xMTEsCisJIDB4MS44NmEwcC0xMDMsCisJIDB4MS4yYjQwcC0xMDMsCisJLTB4MS5iNDAwcC0xMDgsCisJIDB4MS4xMjgwcC05OSwKKwktMHgxLjAyZDhwLTEwMiwKKwktMHgxLmUzZDBwLTEwMywKKwktMHgxLmIwODBwLTEwNSwKKwktMHgxLmYxMDBwLTEwNywKKwktMHgxLjE2YzBwLTEwNSwKKwktMHgxLjExOTBwLTEwMywKKwktMHgxLmE3ZDJwLTEwMCwKKwkgMHgxLjM0NTBwLTEwMywKKwktMHgxLjY3YzBwLTEwNSwKKwkgMHgxLjRiODBwLTEwNCwKKwktMHgxLmM0ZTBwLTEwMywKKwkgMHgxLjYwMDBwLTEwOCwKKwktMHgxLjNmNjBwLTEwNSwKKwkgMHgxLjkzZjBwLTEwNCwKKwkgMHgxLjVmZTBwLTEwNSwKKwkgMHgxLjZmODBwLTEwNywKKwktMHgxLjc2MDBwLTEwNiwKKwkgMHgxLjIxZTBwLTEwNiwKKwktMHgxLjNhNDBwLTEwNiwKKwktMHgxLjQwYzBwLTEwNCwKKwktMHgxLjk4NjBwLTEwNSwKKwktMHgxLjVkNDBwLTEwOCwKKwktMHgxLjFkNzBwLTEwNiwKKwkgMHgxLjI3NjBwLTEwNSwKKwkgMHgwLjAwMDBwKzAsCisJIDB4MS4yMWUycC0xMDQsCisJLTB4MS45NTIwcC0xMDgsCisJLTB4MS41NzIwcC0xMDYsCisJLTB4MS40ODEwcC0xMDYsCisJLTB4MS5iZTAwcC0xMDksCisJIDB4MS4wMDgwcC0xMDUsCisJLTB4MS41NzgwcC0xMDgsCisJLTB4MS5kNDYwcC0xMDUsCisJLTB4MS42MTQwcC0xMDUsCisJIDB4MS40NjMwcC0xMDQsCisJIDB4MS5hZDUwcC0xMDMsCisJIDB4MS44MmUwcC0xMDUsCisJIDB4MS4xZDNjcC0xMDEsCisJIDB4MS42MTAwcC0xMDcsCisJIDB4MS5lYzMwcC0xMDQsCisJIDB4MS5mMjAwcC0xMDgsCisJIDB4MS4wYjQwcC0xMDMsCisJIDB4MS4zNjYwcC0xMDIsCisJIDB4MS5kOWQwcC0xMDMsCisJLTB4MS4wMmQwcC0xMDIsCisJIDB4MS5iMDcwcC0xMDMsCisJIDB4MS5iOWMwcC0xMDQsCisJLTB4MS4wMWMwcC0xMDMsCisJLTB4MS5kZmUwcC0xMDMsCisJIDB4MS4xYjYwcC0xMDQsCisJLTB4MS5hZTk0cC0xMDEsCisJLTB4MS4zMzQwcC0xMDQsCisJIDB4MS5iM2Q4cC0xMDIsCisJLTB4MS42ZTQwcC0xMDUsCisJLTB4MS4zNjcwcC0xMDMsCisJIDB4MS5jMTQwcC0xMDQsCisJIDB4MS4xODQwcC0xMDEsCisJIDB4MS4xYWIwcC0xMDIsCisJLTB4MS5hNDAwcC0xMDQsCisJIDB4MS4xZjAwcC0xMDQsCisJLTB4MS43MTgwcC0xMDMsCisJIDB4MS40Y2UwcC0xMDIsCisJIDB4MS45MjAwcC0xMDcsCisJLTB4MS41NGMwcC0xMDMsCisJIDB4MS4xYjgwcC0xMDUsCisJLTB4MS4xODI4cC0xMDEsCisJIDB4MS41NzIwcC0xMDIsCisJLTB4MS5hMDYwcC0xMDAsCisJIDB4MS45MTYwcC0xMDIsCisJIDB4MS5hMjgwcC0xMDQsCisJIDB4MS4zNDAwcC0xMDcsCisJIDB4MS4yYjIwcC0xMDIsCisJIDB4MS43ODAwcC0xMDgsCisJIDB4MS5jZmQwcC0xMDEsCisJIDB4MS4yZWYwcC0xMDIsCisJLTB4MS4yNzYwcC05OSwKKwkgMHgxLmIzODBwLTEwNCwKKwkgMHgxLjAwNDhwLTEwMSwKKwktMHgxLjYwYjBwLTEwMiwKKwkgMHgxLmExY2NwLTEwMCwKKwktMHgxLmE2NDBwLTEwNCwKKwktMHgxLjA4YTBwLTEwMSwKKwkgMHgxLjdlNjBwLTEwMiwKKwkgMHgxLjIyYzBwLTEwMywKKwktMHgxLjcyMDBwLTEwNiwKKwkgMHgxLmYwZjBwLTEwMiwKKwkgMHgxLmViNGVwLTk5LAorCSAweDEuYzZlMHAtMTAzLAorfTsKKworLyoKKyAqIGV4cDJsKHgpOiBjb21wdXRlIHRoZSBiYXNlIDIgZXhwb25lbnRpYWwgb2YgeAorICoKKyAqIEFjY3VyYWN5OiBQZWFrIGVycm9yIDwgMC41MDIgdWxwLgorICoKKyAqIE1ldGhvZDogKGFjY3VyYXRlIHRhYmxlcykKKyAqCisgKiAgIFJlZHVjZSB4OgorICogICAgIHggPSAyKiprICsgeSwgZm9yIGludGVnZXIgayBhbmQgfHl8IDw9IDEvMi4KKyAqICAgICBUaHVzIHdlIGhhdmUgZXhwMih4KSA9IDIqKmsgKiBleHAyKHkpLgorICoKKyAqICAgUmVkdWNlIHk6CisgKiAgICAgeSA9IGkvVEJMU0laRSArIHogLSBlcHNbaV0gZm9yIGludGVnZXIgaSBuZWFyIHkgKiBUQkxTSVpFLgorICogICAgIFRodXMgd2UgaGF2ZSBleHAyKHkpID0gZXhwMihpL1RCTFNJWkUpICogZXhwMih6IC0gZXBzW2ldKSwKKyAqICAgICB3aXRoIHx6IC0gZXBzW2ldfCA8PSAyKiotOCArIDIqKi05OCBmb3IgdGhlIHRhYmxlIHVzZWQuCisgKgorICogICBXZSBjb21wdXRlIGV4cDIoaS9UQkxTSVpFKSB2aWEgdGFibGUgbG9va3VwIGFuZCBleHAyKHogLSBlcHNbaV0pIHZpYQorICogICBhIGRlZ3JlZS0xMCBtaW5pbWF4IHBvbHlub21pYWwgd2l0aCBtYXhpbXVtIGVycm9yIHVuZGVyIDIqKi0xMjAuCisgKiAgIFRoZSB2YWx1ZXMgaW4gZXhwMnRbXSBhbmQgZXBzW10gYXJlIGNob3NlbiBzdWNoIHRoYXQKKyAqICAgZXhwMnRbaV0gPSBleHAyKGkvVEJMU0laRSArIGVwc1tpXSksIGFuZCBlcHNbaV0gaXMgYSBzbWFsbCBvZmZzZXQgc3VjaAorICogICB0aGF0IGV4cDJ0W2ldIGlzIGFjY3VyYXRlIHRvIDIqKi0xMjIuCisgKgorICogICBOb3RlIHRoYXQgdGhlIHJhbmdlIG9mIGkgaXMgKy1UQkxTSVpFLzIsIHNvIHdlIGFjdHVhbGx5IGluZGV4IHRoZSB0YWJsZXMKKyAqICAgYnkgaTAgPSBpICsgVEJMU0laRS8yLgorICoKKyAqICAgVGhpcyBtZXRob2QgaXMgZHVlIHRvIEdhbCwgd2l0aCBtYW55IGRldGFpbHMgZHVlIHRvIEdhbCBhbmQgQmFjaGVsaXM6CisgKgorICoJR2FsLCBTLiBhbmQgQmFjaGVsaXMsIEIuICBBbiBBY2N1cmF0ZSBFbGVtZW50YXJ5IE1hdGhlbWF0aWNhbCBMaWJyYXJ5CisgKglmb3IgdGhlIElFRUUgRmxvYXRpbmcgUG9pbnQgU3RhbmRhcmQuICBUT01TIDE3KDEpLCAyNi00NiAoMTk5MSkuCisgKi8KK2xvbmcgZG91YmxlCitleHAybChsb25nIGRvdWJsZSB4KQoreworCXVuaW9uIElFRUVsMmJpdHMgdSwgdjsKKwlsb25nIGRvdWJsZSByLCB0LCB0d29waywgdHdvcGtwMTAwMDAsIHo7CisJdWludDMyX3QgaHgsIGl4LCBpMDsKKwlpbnQgazsKKworCXUuZSA9IHg7CisKKwkvKiBGaWx0ZXIgb3V0IGV4Y2VwdGlvbmFsIGNhc2VzLiAqLworCWh4ID0gdS54Yml0cy5leHBzaWduOworCWl4ID0gaHggJiBFWFBNQVNLOworCWlmIChpeCA+PSBCSUFTICsgMTQpIHsJCS8qIHx4fCA+PSAxNjM4NCAqLworCQlpZiAoaXggPT0gQklBUyArIExEQkxfTUFYX0VYUCkgeworCQkJaWYgKHUueGJpdHMubWFuaCAhPSAwCisJCQkgICAgfHwgdS54Yml0cy5tYW5sICE9IDAKKwkJCSAgICB8fCAoaHggJiAweDgwMDApID09IDApCisJCQkJcmV0dXJuICh4ICsgeCk7CS8qIHggaXMgTmFOIG9yICtJbmYgKi8KKwkJCWVsc2UKKwkJCQlyZXR1cm4gKDAuMCk7CS8qIHggaXMgLUluZiAqLworCQl9CisJCWlmICh4ID49IDE2Mzg0KQorCQkJcmV0dXJuIChodWdlICogaHVnZSk7IC8qIG92ZXJmbG93ICovCisJCWlmICh4IDw9IC0xNjQ5NSkKKwkJCXJldHVybiAodHdvbTEwMDAwICogdHdvbTEwMDAwKTsgLyogdW5kZXJmbG93ICovCisJfSBlbHNlIGlmIChpeCA8PSBCSUFTIC0gMTE1KSB7CQkvKiB8eHwgPCAweDFwLTExNSAqLworCQlyZXR1cm4gKDEuMCArIHgpOworCX0KKworCS8qCisJICogUmVkdWNlIHgsIGNvbXB1dGluZyB6LCBpMCwgYW5kIGsuIFRoZSBsb3cgYml0cyBvZiB4ICsgcmVkdXgKKwkgKiBjb250YWluIHRoZSAxNi1iaXQgaW50ZWdlciBwYXJ0IG9mIHRoZSBleHBvbmVudCAoaykgZm9sbG93ZWQgYnkKKwkgKiBUQkxCSVRTIGZyYWN0aW9uYWwgYml0cyAoaTApLiBXZSB1c2UgYml0IHRyaWNrcyB0byBleHRyYWN0IHRoZXNlCisJICogYXMgaW50ZWdlcnMsIHRoZW4gc2V0IHogdG8gdGhlIHJlbWFpbmRlci4KKwkgKgorCSAqIEV4YW1wbGU6IFN1cHBvc2UgeCBpcyAweGFiYy4xMjM0NTZwMCBhbmQgVEJMQklUUyBpcyA4LgorCSAqIFRoZW4gdGhlIGxvdy1vcmRlciB3b3JkIG9mIHggKyByZWR1eCBpcyAweDAwMGFiYzEyLAorCSAqIFdlIHNwbGl0IHRoaXMgaW50byBrID0gMHhhYmMgYW5kIGkwID0gMHgxMiAoYWRqdXN0ZWQgdG8KKwkgKiBpbmRleCBpbnRvIHRoZSB0YWJsZSksIHRoZW4gd2UgY29tcHV0ZSB6ID0gMHgwLjAwMzQ1NnAwLgorCSAqCisJICogWFhYIElmIHRoZSBleHBvbmVudCBpcyBuZWdhdGl2ZSwgdGhlIGNvbXB1dGF0aW9uIG9mIGsgZGVwZW5kcyBvbgorCSAqICAgICAnPj4nIGRvaW5nIHNpZ24gZXh0ZW5zaW9uLgorCSAqLworCXUuZSA9IHggKyByZWR1eDsKKwlpMCA9ICh1LmJpdHMubWFubCAmIDB4ZmZmZmZmZmYpICsgVEJMU0laRSAvIDI7CisJayA9IChpbnQpaTAgPj4gVEJMQklUUzsKKwlpMCA9IGkwICYgKFRCTFNJWkUgLSAxKTsKKwl1LmUgLT0gcmVkdXg7CisJeiA9IHggLSB1LmU7CisJdi54Yml0cy5tYW5oID0gMDsKKwl2LnhiaXRzLm1hbmwgPSAwOworCWlmIChrID49IExEQkxfTUlOX0VYUCkgeworCQl2LnhiaXRzLmV4cHNpZ24gPSBMREJMX01BWF9FWFAgLSAxICsgazsKKwkJdHdvcGsgPSB2LmU7CisJfSBlbHNlIHsKKwkJdi54Yml0cy5leHBzaWduID0gTERCTF9NQVhfRVhQIC0gMSArIGsgKyAxMDAwMDsKKwkJdHdvcGtwMTAwMDAgPSB2LmU7CisJfQorCisJLyogQ29tcHV0ZSByID0gZXhwMih5KSA9IGV4cDJ0W2kwXSAqIHAoeiAtIGVwc1tpXSkuICovCisJdCA9IHRibFtpMF07CQkvKiBleHAydFtpMF0gKi8KKwl6IC09IGVwc1tpMF07CQkvKiBlcHNbaTBdICAgKi8KKwlyID0gdCArIHQgKiB6ICogKFAxICsgeiAqIChQMiArIHogKiAoUDMgKyB6ICogKFA0ICsgeiAqIChQNSArIHogKiAoUDYKKwkgICAgKyB6ICogKFA3ICsgeiAqIChQOCArIHogKiAoUDkgKyB6ICogUDEwKSkpKSkpKSkpOworCisJLyogU2NhbGUgYnkgMioqay4gKi8KKwlpZihrID49IExEQkxfTUlOX0VYUCkgeworCQlpZiAoayA9PSBMREJMX01BWF9FWFApCisJCQlyZXR1cm4gKHIgKiAyLjAgKiAweDFwMTYzODNMKTsKKwkJcmV0dXJuIChyICogdHdvcGspOworCX0gZWxzZSB7CisJCXJldHVybiAociAqIHR3b3BrcDEwMDAwICogdHdvbTEwMDAwKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19leHBsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19leHBsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2YzkzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9sZDEyOC9zX2V4cGwuYwpAQCAtMCwwICsxLDQ5NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMyBTdGV2ZW4gRy4gS2FyZ2wKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBPcHRpbWl6ZWQgYnkgQnJ1Y2UgRC4gRXZhbnMuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogbGQxMjggdmVyc2lvbiBvZiBzX2V4cGwuYy4gIFNlZSAuLi9sZDgwL3NfZXhwbC5jIGZvciBtb3N0IGNvbW1lbnRzLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisjZGVmaW5lCUlOVEVSVkFMUwkxMjgKKyNkZWZpbmUJTE9HMl9JTlRFUlZBTFMJNworI2RlZmluZQlCSUFTCShMREJMX01BWF9FWFAgLSAxKQorCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK2h1Z2UgPSAweDFwMTAwMDBMLAordHdvbTEwMDAwID0gMHgxcC0xMDAwMEw7CisvKiBYWFggUHJldmVudCBnY2MgZnJvbSBlcnJvbmVvdXNseSBjb25zdGFudCBmb2xkaW5nIHRoaXM6ICovCitzdGF0aWMgdm9sYXRpbGUgY29uc3QgbG9uZyBkb3VibGUgdGlueSA9IDB4MXAtMTAwMDBMOworCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKKy8qIGxvZygyKioxNjM4NCAtIDAuNSkgcm91bmRlZCB0b3dhcmRzIHplcm86ICovCisvKiBsb2coMioqMTYzODQgLSAwLjUgKyAxKSByb3VuZGVkIHRvd2FyZHMgemVybyBmb3IgZXhwbTFsKCkgaXMgdGhlIHNhbWU6ICovCitvX3RocmVzaG9sZCA9ICAxMTM1Ni41MjM0MDYyOTQxNDM5NDk0OTE5MzEwNzc5NzA3NjM0MjhMLAorLyogbG9nKDIqKigtMTYzODEtNjQtMSkpIHJvdW5kZWQgdG93YXJkcyB6ZXJvOiAqLwordV90aHJlc2hvbGQgPSAtMTE0MzMuNDYyNzQzMzM2Mjk3ODc4ODM3MjQzODQzNDUyNjIxNTAzTDsKKworc3RhdGljIGNvbnN0IGRvdWJsZQorLyoKKyAqIGxuMi9JTlRFUlZBTFMgPSBMMStMMiAoaGkrbG8gZGVjb21wb3NpdGlvbiBmb3IgbXVsdGlwbGljYXRpb24pLiAgTDEgbXVzdAorICogaGF2ZSBhdCBsZWFzdCAyMiAoPSBsb2cyKHxMREJMX01JTl9FWFAtZXh0cmFzfCkgKyBsb2cyKElOVEVSVkFMUykpIGxvd2VzdAorICogYml0cyB6ZXJvIHNvIHRoYXQgbXVsdGlwbGljYXRpb24gb2YgaXQgYnkgbiBpcyBleGFjdC4KKyAqLworSU5WX0wgPSAxLjg0NjY0OTY1MjMzNzg3MzFlKzIsCQkvKiAgMHgxNzE1NDc2NTJiODJmZS4wcC00NSAqLworTDIgPSAtMS4wMjUzNjcwNjM4ODk0NzMxZS0yOTsJCS8qIC0weDEuOWZmMDM0MjU0MmZjM3AtOTcgKi8KK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorLyogMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjgwMDAwMDBwLTggKi8KK0wxID0gIDUuNDE1MjEyMzQ4MTI0NTcyNzI5ODIyMTI1OTU5MTQ1Njc1MDhlLTNMOworCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKKy8qCisgKiBEb21haW4gWy0wLjAwMjcwOCwgMC4wMDI3MDhdLCByYW5nZSB+Wy0yLjQwMjFlLTM4LCAyLjQyMzRlLTM4XToKKyAqIHxleHAoeCkgLSBwKHgpfCA8IDIqKi0xMjQuOQorICogKDAuMDAyNzA4IGlzIGxuMi8oMipJTlRFUlZBTFMpIHJvdW5kZWQgdXAgYSBsaXR0bGUpLgorICovCitBMiAgPSAgMC41LAorQTMgID0gIDEuNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTEwODU1MDBlLTFMLAorQTQgID0gIDQuMTY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY0MjU4ODUzMjBlLTJMLAorQTUgID0gIDguMzMzMzMzMzMzMzMzMzMzMzMzMzQ1MjI4NzcxNjAxNzU4NDJlLTNMLAorQTYgID0gIDEuMzg4ODg4ODg4ODg4ODg4ODg4ODk5NzExMzk3NTE1OTY4MzZlLTNMOworCitzdGF0aWMgY29uc3QgZG91YmxlCitBNyAgPSAgMS45ODQxMjY5ODQxMjY5NDcxZS00LAorQTggID0gIDIuNDgwMTU4NzMwMTU4NTI4NGUtNSwKK0E5ICA9ICAyLjc1NTczMjQyNzc0MTEyMzRlLTYsCitBMTAgPSAgMi43NTU3MzMzNzIyMzc1MDcyZS03OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwkvKgorCSAqIGhpIG11c3QgYmUgcm91bmRlZCB0byBhdCBtb3N0IDEwNiBiaXRzIHNvIHRoYXQgbXVsdGlwbGljYXRpb24KKwkgKiBieSByMSBpbiBleHBtMWwoKSBpcyBleGFjdCwgYnV0IGl0IGlzIHJvdW5kZWQgdG8gODggYml0cyBkdWUgdG8KKwkgKiBoaXN0b3JpY2FsIGFjY2lkZW50cy4KKwkgKi8KKwlsb25nIGRvdWJsZQloaTsKKwlsb25nIGRvdWJsZQlsbzsKK30gdGJsW0lOVEVSVkFMU10gPSB7CisJMHgxcDBMLCAweDBwMEwsCisJMHgxLjAxNjNkYTlmYjMzMzU2ZDg0YTY2YWVwMEwsIDB4My4zNmRjZGZhNDAwM2VjMDRjMzYwYmUyNDA0MDc4cC05MkwsCisJMHgxLjAyYzlhM2U3NzgwNjBlZTZmN2NhY2FwMEwsIDB4NC5mN2EyOWJkZTkzZDcwYTJjYWJjNWNiODliYTEwcC05MkwsCisJMHgxLjA0MzE1ZTg2ZTdmODRiZDczOGY5YTJwMEwsIDB4ZC5hNDdlNmVkMDQwYmI0YmZjMDVhZjY0NTVlOWI4cC05NkwsCisJMHgxLjA1OWIwZDMxNTg1NzQzYWU3YzU0OGVwMEwsIDB4Yi42OGNhNDE3ZmU1M2UzNDk1ZjdkZjRiYWY4NGEwcC05MkwsCisJMHgxLjA3MDZiMjlkZGY2ZGRjNmRjNDAzYThwMEwsIDB4MS5kODdiMjdlZDA3Y2I4YjA5MmFjNzVlMzExNzUzcC04OEwsCisJMHgxLjA4NzQ1MTg3NTliYzgwOGMzNWYyNWNwMEwsIDB4MS45NDI3ZmEyYjA0MWIyZDY4MjlkODk5M2EwZDAxcC04OEwsCisJMHgxLjA5ZTNlY2FjNmYzODM0NTIxZTA2MGNwMEwsIDB4NS44NGQ2Yjc0YmEyZTAyM2RhNzMwZTdmY2NiNzU4cC05MkwsCisJMHgxLjBiNTU4NmNmOTg5MGY2Mjk4YjkyYjZwMEwsIDB4MS4xODQyYTk4MzY0MjkxNDA4YjNjZWIwYTJhMmJicC04OEwsCisJMHgxLjBjYzkyMmI3MjQ3Zjc0MDdiNzA1YjhwMEwsIDB4OS4zZGM1ZThhYWM1NjRlNmZlMmVmMWQ0MzFmZDk4cC05MkwsCisJMHgxLjBlM2VjMzJkM2QxYTIwMjA3NDJlNGVwMEwsIDB4MS44YWY2YTU1MmFjNGIzNThiMTEyOWU5Zjk2NmE0cC04OEwsCisJMHgxLjBmYjY2YWZmZWQzMWFmMjMyMDkxZGNwMEwsIDB4MS44YTE0MjY1MTRlMGI2MjdiZGE2OTRhNDAwYTI3cC04OEwsCisJMHgxLjExMzAxZDAxMjViNTBhNGViYmYxYWVwMEwsIDB4ZC45MzE4Y2VhYzVjYzQ3YWIxNjZlZTU3NDI3MTc4cC05MkwsCisJMHgxLjEyYWJkYzA2YzMxY2JmYjkyYmFkMzJwMEwsIDB4NC5kNjhlMmY3MjcwYmRmN2NlZGY5NGViMWNiODE4cC05MkwsCisJMHgxLjE0MjlhYWVhOTJkZGZiMzQxMDE5NDJwMEwsIDB4MS5iMjU4NmQwMTg0NGIzODliZWE3YWVkZDIyMWQ0cC04OEwsCisJMHgxLjE1YTk4YzhhNThlNTEyNDgwZDU3M2NwMEwsIDB4MS5kNTYxM2JmOTJhMmI2MThlZTMxYjM3NmMyNjg5cC04OEwsCisJMHgxLjE3MmI4M2M3ZDUxN2FkY2RmN2M4YzRwMEwsIDB4MS4wZWIxNGE3OTIwMzU1MDlmZjdkNzU4NjkzZjI0cC04OEwsCisJMHgxLjE4YWY5Mzg4YzhkZTliYmJmNzBiOWFwMEwsIDB4My5jMjUwNWM5N2MwMTAyZTVmMTIxMTk0MWQyODQwcC05MkwsCisJMHgxLjFhMzViZWI2ZmNiNzUzY2I2OThmNjhwMEwsIDB4MS4yZDFjODM1YTZjMzA3MjRkNWNmYWUzMWI4NGU1cC04OEwsCisJMHgxLjFiYmUwODQwNDVjZDM5YWIxZTcyYjRwMEwsIDB4NC4yN2UzNWY5YWNiNTdlNDczOTE1NTE5YTFiNDQ4cC05MkwsCisJMHgxLjFkNDg3MzE2OGI5YWE3ODA1YjgwMjhwMEwsIDB4OS45MGYwN2E5OGI0MjIwNmU0NjE2NmNmMDUxZDcwcC05MkwsCisJMHgxLjFlZDUwMjJmY2Q5MWNiODgxOWZmNjBwMEwsIDB4MS4xMjFkMWU1MDRkMzZjNDc0NzRjOWI3ZGU2MDY3cC04OEwsCisJMHgxLjIwNjNiODg2MjhjZDYzYjhlZWIwMjhwMEwsIDB4MS41MDkyOWQwZmM0ODdkMjFjMmI4NDAwNDI2NGRlcC04OEwsCisJMHgxLjIxZjQ5OTE3ZGRjOTYyNTUyZmQyOTJwMEwsIDB4OS40YmRiNGI2MWVhNjI0NzdjYWExZGNlODIzYmEwcC05MkwsCisJMHgxLjIzODdhNmU3NTYyMzg2NmMxZmFkYjBwMEwsIDB4MS5jMTVjYjU5M2IwMzI4NTY2OTAyZGY2OWU0ZGUycC04OEwsCisJMHgxLjI1MWNlNGZiMmE2M2YzNTgyYWI3ZGVwMEwsIDB4OS5lOTQ4MTFhOWM4YWZkY2Y3OTY5MzRiYzY1MmQwcC05MkwsCisJMHgxLjI2YjQ1NjVlMjdjZGQyNTdhNjczMjhwMEwsIDB4MS5kM2IyNDlkY2U0ZTkxODZkZGQ1ZmY0NGU2YjA4cC05MkwsCisJMHgxLjI4NGRmZTFmNTYzODA5NmNmMTVjZjBwMEwsIDB4My5jYTA5NjdmZGFhMmU1MmQ3YzgxMDZmMmUyNjJjcC05MkwsCisJMHgxLjI5ZTlkZjUxZmRlZTEyYzI1ZDE1ZjRwMEwsIDB4MS5hMjRhYTNiY2E4OTBhYzA4ZDIwM2ZlZDgwYTA3cC04OEwsCisJMHgxLjJiODdmZDBkYWQ5OGZmZGRlYTQ2NTJwMEwsIDB4MS44ZmNhYjg4NDQyZmRjM2NiNmRlNDUxOTE2NWVkcC04OEwsCisJMHgxLjJkMjg1YTZlNDAzMGI0MDA5MWQ1MzZwMEwsIDB4ZC4wNzUzODQ1ODljMWNkMWIzZTQwMThhNmIxMzQ4cC05MkwsCisJMHgxLjJlY2FmYTkzZTJmNTYxMWNhMGY0NWNwMEwsIDB4MS41MjM4MzNhZjYxMWJkY2RhMjUzYzU1NGNmMjc4cC04OEwsCisJMHgxLjMwNmZlMGEzMWI3MTUyZGU4ZDVhNDZwMEwsIDB4My4wNWM4NWVkZWNiYzI3MzQzNjI5ZjUwMmYxYWYycC05MkwsCisJMHgxLjMyMTcwZmM0Y2Q4MzEzNTM5Y2YxYzJwMEwsIDB4MS4wMDhmODZkZGUzMjIwYWUxN2EwMDViNjQxMmJlcC04OEwsCisJMHgxLjMzYzA4YjI2NDE2ZmY0YzljODYxMGNwMEwsIDB4MS45NjY5NmJmOTVkMTU5MzAzOTUzOWQ5NGQ2NjJicC04OEwsCisJMHgxLjM1NmM1NWY5MjlmZjBjOTQ2MjM0NzZwMEwsIDB4My43M2FmMzhkNmQ4ZDZmOTUwNmM5YmJjOTNjYmMwcC05MkwsCisJMHgxLjM3MWE3MzczYWE5Y2FhNzE0NTUwMmVwMEwsIDB4MS40NTQ3OTg3ZTNlMTI1MTZiZjljNjk5YmU0MzJmcC04OEwsCisJMHgxLjM4Y2FlNmQwNWQ4NjU4NWE5Y2IwZDhwMEwsIDB4MS5iZWQwYzg1M2JkMzBhMDI3OTA5MzFlYjJlOGYwcC04OEwsCisJMHgxLjNhN2RiMzRlNTlmZjZlYTFiYzkyOThwMEwsIDB4MS5lMGExZDMzNjE2M2ZlMmY4NTJjZWViMTM0MDY3cC04OEwsCisJMHgxLjNjMzJkYzMxM2E4ZTQ4NDAwMWYyMjhwMEwsIDB4Yi41OGYzNzc1ZTA2YWI2NjM1MzAwMWZhZTlmY2EwcC05MkwsCisJMHgxLjNkZWE2NGMxMjM0MjIzNWI0MTIyM2VwMEwsIDB4MS4zZDc3M2ZiYTJjYjgyYjgyNDQyNjdjNTQ0NDNmcC05MkwsCisJMHgxLjNmYTQ1MDRhYzgwMWJhMGJmNzAxYWFwMEwsIDB4NC4xODMyZmI4YzFjOGRiZGZmMmM0OTkwOWU2YzYwcC05MkwsCisJMHgxLjQxNjBhMjFmNzJlMjlmODQzMjViOGVwMEwsIDB4MS4zZGI2MWZiMzUyZjA1NDBlNmJhMDU2MzQ0MTNlcC04OEwsCisJMHgxLjQzMWY1ZDk1MGE4OTZkYzcwNDQzOTRwMEwsIDB4MS4wY2NlYzgxZTI0YjBjYWZmNzU4MWVmNDEyN2Y3cC05MkwsCisJMHgxLjQ0ZTA4NjA2MTg5MmQwMzEzNmY0MDhwMEwsIDB4MS5kZjAxOWZiZDRmM2I0ODcwOWI3ODU5MWQ1Y2I1cC04OEwsCisJMHgxLjQ2YTQxZWQxZDAwNTc3MjUxMmY0NThwMEwsIDB4MS4yMjlkOTdkZjQwNGZmMjFmMzljMWI1OTRkM2E4cC04OEwsCisJMHgxLjQ4NmEyYjVjMTNjZDAxM2MxYTNiNjhwMEwsIDB4MS4wNjJmMDNjM2RkNzVjZTg3NTdmNzgwZTZlYzk5cC04OEwsCisJMHgxLjRhMzJhZjBkN2QzZGU2NzJkOGJjZjRwMEwsIDB4Ni5mOTU4NjQ2MWRiMWQ4NzhiMWQxNDhiZDNjY2I4cC05MkwsCisJMHgxLjRiZmRhZDUzNjJhMjcxZDQzOTdhZmVwMEwsIDB4Yy40MmUyMGUwMzYzYmEyZTE1OWM1NzlmODJlNGIwcC05MkwsCisJMHgxLjRkY2IyOTlmZGRkMGQ2M2IzNmVmMWFwMEwsIDB4OS5lMGNjNDg0YjI1YTU1NjZkMGJkNWY1OGFkMjM4cC05MkwsCisJMHgxLjRmOWIyNzY5ZDJjYTZhZDMzZDhiNjhwMEwsIDB4MS5hYTA3M2VlNTVlMDI4NDk3YTMyOWE3MzMzZGJhcC04OEwsCisJMHgxLjUxNmRhYTJjZjY2NDFjMTEyZjUyYzhwMEwsIDB4NC5kODIyMTkwZTcxODIyNjE3N2Q3NjA4ZDIwMDM4cC05MkwsCisJMHgxLjUzNDJiNTY5ZDRmODFkZjBhODNjNDhwMEwsIDB4MS5kODZhNjNmNGU2NzJhM2U0Mjk4MDViMDQ5NDY1cC04OEwsCisJMHgxLjU1MWE0Y2E1ZDkyMGVjNTJlYzYyMDJwMEwsIDB4NC4zNGNhNjcyNjQ1ZGM2YzEyNGQ2NjE5YTg3NTc0cC05MkwsCisJMHgxLjU2ZjQ3MzZiNTI3ZGE2NmVjYjAwNDZwMEwsIDB4MS42NGViM2MwMGYyZjVhYjNkODAxZDdjYzcyNzJkcC04OEwsCisJMHgxLjU4ZDEyZDQ5N2M3ZmQyNTJiYzJiNzJwMEwsIDB4MS40M2JjZjJlYzkzNmE5NzBkOWNjMjY2ZjAwNzJmcC04OEwsCisJMHgxLjVhYjA3ZGQ0ODU0Mjk1OGM5MzAxNTBwMEwsIDB4MS45MWViMzQ1ZDg4ZDdjODEyODBlMDY5ZmJkYjYzcC04OEwsCisJMHgxLjVjOTI2OGE1OTQ2YjcwMWM0YjFiODBwMEwsIDB4MS42OTg2YTIwM2Q4NGU2YTRhOTJmMTc5ZTcxODg5cC04OEwsCisJMHgxLjVlNzZmMTVhZDIxNDg2ZTliZTRjMjBwMEwsIDB4My45OTc2NmEwNjU0OGEwNTgyOWU4NTNiZGIyYjUycC05MkwsCisJMHgxLjYwNWUxYjk3NmRjMDhiMDc2ZjU5MmFwMEwsIDB4NC44NmUzYjM0ZWFkMWI0NzY5ZGY4NjdiOWM4OWNjcC05MkwsCisJMHgxLjYyNDdlYjAzYTU1ODRiMWYwZmEwNmVwMEwsIDB4MS5kMmRhNDJiYjFjZWFmOWY3MzIyNzViOGFlZjMwcC04OEwsCisJMHgxLjY0MzQ2MzRjY2MzMWZjNzZmODcxNGNwMEwsIDB4NC5lZDlhNGU0MTAwMDMwNzEwM2ExOGNmN2E2ZTA4cC05MkwsCisJMHgxLjY2MjM4ODI1NTIyMjQ5MTI3ZDllMjhwMEwsIDB4MS5iOGYzMTRhMzM3ZjRkYzBhM2FkZjE3ODdmZjc0cC04OEwsCisJMHgxLjY4MTU1ZDQ0Y2E5NzMwODFjNTcyMjZwMEwsIDB4MS5iOWYzMjcwNmJmZTRlNjI3ZDgwOWE4NWRjYzY2cC04OEwsCisJMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTJwMEwsIDB4MS42NmVhOTU3ZDNlM2FkZWMxNzUxMjc3NTA5OWRhcC04OEwsCisJMHgxLjZjMDEyNzUwYmRhYmVlZDc2YTk5ODBwMEwsIDB4Zi40ZjMzZmRlYjhiMGVjZDgzMTEwNmY1N2IzZDAwcC05NkwsCisJMHgxLjZkZmIyM2M2NTFhMmVmMjIwZTJjYmVwMEwsIDB4MS5iYmFhODM0YjNmMTE1NzdjZWVmYmU2YzFjNDExcC05MkwsCisJMHgxLjZmZjdkZjk1MTk0ODNjZjg3ZTFiNGVwMEwsIDB4MS4zZTIxM2JmZjliNzAyZDVhYTQ3N2MxMjUyM2NlcC04OEwsCisJMHgxLjcxZjc1ZThlYzVmNzNkZDIzNzBmMmVwMEwsIDB4Zi4wYWNkNmNiNDM0YjU2MmQ5ZThhMjBhZGRhNjQ4cC05MkwsCisJMHgxLjczZjlhNDhhNTgxNzNiZDVjOWE0ZTZwMEwsIDB4OC5hYjExODJhZTIxN2YzYTc2ODE3NTk1NTNlODQwcC05MkwsCisJMHgxLjc1ZmViNTY0MjY3YzhiZjZlOWFhMzJwMEwsIDB4MS5hNDhiMjcwNzE4MDVlNjFhMTdiOTU0YTJkYWQ4cC04OEwsCisJMHgxLjc4MDY5NGZkZTVkM2Y2MTlhZTAyODBwMEwsIDB4OC41OGIyYmIyYmRjZjg2Y2QwOGUzNWZiMDRjMGYwcC05MkwsCisJMHgxLjdhMTE0NzNlYjAxODZkN2Q1MTAyM2VwMEwsIDB4MS42Y2RhMWY1ZWY0MmI2Njk3Nzk2MDUzMWU4MjFicC04OEwsCisJMHgxLjdjMWVkMDEzMGMxMzI3YzQ5MzM0NDRwMEwsIDB4MS45Mzc1NjJiMmRjOTMzZDQ0ZmM4MjhlZmQ0YzljcC04OEwsCisJMHgxLjdlMmYzMzZjZjRlNjIxMDVkMDJiYTBwMEwsIDB4MS41Nzk3ZTE3MGExNDI3ZjhmY2RmNWYzOTA2MTA4cC04OEwsCisJMHgxLjgwNDI3NTQzZTFhMTFiNjBkZTY3NjRwMEwsIDB4OS5hMzU0ZWE3MDZiOGU0ZDhiNzE4YTY3MmJmN2M4cC05MkwsCisJMHgxLjgyNTg5OTk0Y2NlMTI4YWNmODhhZmFwMEwsIDB4Yi4zNGEwMTBmNmFkNjVjYmJhYzBmNTMyZDM5YmUwcC05MkwsCisJMHgxLjg0NzFhNDYyM2M3YWNjZTUyZjZiOTZwMEwsIDB4MS5jNjQwOTUzNzBmNTFmNDg4MTc5MTRkZDc4NjY1cC04OEwsCisJMHgxLjg2OGQ5OWI0NDkyZWM4MGU0MWQ5MGFwMEwsIDB4Yy4yNTE3MDc0ODRkNzNmMTM2ZmI1Nzc5NjU2YjcwcC05MkwsCisJMHgxLjg4YWM3ZDk4YTY2OTk2NjUzMGJjZGVwMEwsIDB4MS4yZDRlOWQ2MTI4M2VmMzg1ZGUxNzBhYjIwZjk2cC04OEwsCisJMHgxLjhhY2U1NDIyYWEwZGI1YmE3YzU1YTBwMEwsIDB4MS45MmM5YmIzZTZlZDYxZjI3MzMzMDRhMzQ2ZDhmcC04OEwsCisJMHgxLjhjZjMyMTZiNTQ0OGJlZjJhYTFjZDBwMEwsIDB4MS42MWM1NWQ4NGE5ODQ4ZjhjNDUzYjNjYThjOTQ2cC04OEwsCisJMHgxLjhmMWFlOTkxNTc3MzYyYjk4Mjc0NWNwMEwsIDB4Ny4yZWQ4MDRlZmM5YjRhZTE0NThhZTk0NjA5OWQ0cC05MkwsCisJMHgxLjkxNDViMGI5MWZmYzU4OGE2MWI0NjhwMEwsIDB4MS5mNmI3MGUwMWMyYTkwMjI5YTRjNDMwOWVhNzE5cC04OEwsCisJMHgxLjkzNzM3YjBjZGM1ZTRmNDUwMWMzZjJwMEwsIDB4NS40MGEyMmQyZmM0YWY1ODFiNjNlODMyNmVmZTljcC05MkwsCisJMHgxLjk1YTQ0Y2JjODUyMGVlOWI0ODM2OTRwMEwsIDB4MS5hMGZjNmY3YzdkNjFiMmIzYTIyYTBlYWIyY2FkcC04OEwsCisJMHgxLjk3ZDgyOWZkZTRlNGY4YjllOTIwZjhwMEwsIDB4MS4xZThiZDdlZGI5ZDcxNDRiNmY2ODE4MDg0Y2M3cC04OEwsCisJMHgxLjlhMGYxNzBjYTA3YjliYTMxMDliOGNwMEwsIDB4NC42NzM3YmViMTllMWVhZGE2ODI1ZDNjNTU3NDI4cC05MkwsCisJMHgxLjljNDkxODJhM2YwOTAxYzdjNDZiMDZwMEwsIDB4MS4xZjJiZTU4ZGRhZGU1MGMyMTcxODZjOTBiNDU3cC04OEwsCisJMHgxLjllODYzMTllMzIzMjMxODI0Y2E3OGVwMEwsIDB4Ni40YzZlMDEwZjkyYzA4MmJiYWRmYWY2MDVjZmQ0cC05MkwsCisJMHgxLmEwYzY2N2I1ZGU1NjRiMjlhZGE4YjhwMEwsIDB4Yy5hYjM0OWFhMDQyMmE4ZGE3ZDQ1MTJlZGFjNTQ4cC05MkwsCisJMHgxLmEzMDliZWM0YTJkMzM1OGMxNzFmNzZwMEwsIDB4MS4wZGFhZDU0N2ZhMjJjMjZkMTY4ZWE3NjJkODU0cC04OEwsCisJMHgxLmE1NTAzYjIzZTI1NWM4YjQyNDQ5MWNwMEwsIDB4YS5mODdiYzgwNTBhNDA1MzgxNzAzZWY3Y2FmZjUwcC05MkwsCisJMHgxLmE3OTllMTMzMGIzNTg2ZjJkZmIyYjBwMEwsIDB4MS41OGYxYTk4Nzk2Y2U4OTA4YWU4NTIyMzZjYTk0cC04OEwsCisJMHgxLmE5ZTZiNTU3OWZkYmY0M2ViMjQzYmNwMEwsIDB4MS5mZjRjNGM1OGI1NzFjZjQ2NWNhZjA3YjRiOWY1cC04OEwsCisJMHgxLmFjMzZiYmZkM2YzNzljMGRiOTY2YTJwMEwsIDB4MS4xMjY1ZmM3M2U0ODA3MTJkMjBmODU5N2E4ZTdicC04OEwsCisJMHgxLmFlODlmOTk1YWQzYWQ1ZTg3MzRkMTZwMEwsIDB4MS43MzIwNWE3ZmJjM2FlNjc1ZWE0NDBiMTYyZDZjcC04OEwsCisJMHgxLmIwZTA3Mjk4ZGI2NjU5MDg0MmFjZGVwMEwsIDB4MS5jNmY2Y2EwZTVkY2FlMmFhZmZmYTdhMDU1NGNicC04OEwsCisJMHgxLmIzM2EyYjg0ZjE1ZmFmNmJmZDBlN2FwMEwsIDB4MS5kOTQ3YzI1NzU3ODFkYmI0OWIxMjM3Yzg3YjZlcC04OEwsCisJMHgxLmI1OTcyOGRlNTU5Mzk4ZTM4ODExMTBwMEwsIDB4MS42NDg3M2M3MTcxZmVmYzQxMDQxNmJlMGE2NTI1cC04OEwsCisJMHgxLmI3Zjc2ZjJmYjVlNDZlYWE3YjA4MWFwMEwsIDB4Yi41M2M1MzU0Yzg5MDNjMzU2ZTRiNjI1YWFjYzI4cC05MkwsCisJMHgxLmJhNWIwMzBhMTA2NDk4NDBjYjNjNmFwMEwsIDB4Zi41YjQ3ZjI5NzIwMzc1N2UxY2M2ZWFkYzhiYWQwcC05MkwsCisJMHgxLmJjYzFlOTA0YmMxZDIyNDdiYTBmNDRwMEwsIDB4MS5iM2QwOGNkMGIyMDI4NzA5MmJkNTliZTRhZDk4cC04OEwsCisJMHgxLmJmMmMyNWJkNzFlMDg4NDA4ZDcwMjRwMEwsIDB4MS4xOGUzNDQ5ZmEwNzNiMzU2NzY2ZGZiNTY4ZmY0cC04OEwsCisJMHgxLmMxOTliZGQ4NTUyOWMyMjIwY2IxMmFwMEwsIDB4OS4xYmE2Njc5NDQ0OTY0YTM2NjYxMjQwMDQzOTcwcC05NkwsCisJMHgxLmM0MGFiNWZmZmQwN2E2ZDE0ZGY4MjBwMEwsIDB4Zi4xODI4YTUzNjZmZDM4N2E3YmRkNTRjZGY3MzAwcC05MkwsCisJMHgxLmM2N2YxMmU1N2QxNGI0YTIxMzdmZDJwMEwsIDB4Zi4yYjMwMWRkOWU2YjE1MWE2ZDFmOWQ1ZDVmNTIwcC05NkwsCisJMHgxLmM4ZjZkOTQwNmU3YjUxMWFjYmM0ODhwMEwsIDB4NS5jNDQyZGRiNTU4MjAxNzFmMzE5ZDllNTA3NmE4cC05NkwsCisJMHgxLmNiNzIwZGNlZjkwNjkxNTAzY2JkMWVwMEwsIDB4OS40OWRiNzYxZDk1NTlhYzBjYjZkZDNlZDU5OWUwcC05MkwsCisJMHgxLmNkZjBiNTU1ZGMzZjljNDRmODk1OGVwMEwsIDB4MS5hYzUxYmU1MTVmOGM1OGJkZmI2ZjU3NDBhM2E0cC04OEwsCisJMHgxLmQwNzJkNGEwNzg5N2I4ZDBmMjJmMjBwMEwsIDB4MS5hMTU4ZTE4ZmJiZmM2MjVmMDlmNGNjYTQwODc0cC04OEwsCisJMHgxLmQyZjg3MDgwZDg5ZjE4YWRlMTIzOThwMEwsIDB4OS5lYTIwMjViNGM1NjU1M2Y1Y2RlZTRjOTI0NzI4cC05MkwsCisJMHgxLmQ1ODE4ZGNmYmE0ODcyNWRhMDVhZWFwMEwsIDB4MS42NmUwZGNhOWY1ODlmNTU5YzA4NzZmZjIzODMwcC04OEwsCisJMHgxLmQ4MGUzMTZjOTgzOTdiYjg0ZjlkMDRwMEwsIDB4OC44MDVmODRiZWM2MTRkZTI2OTkwMGRkZjk4ZDI4cC05MkwsCisJMHgxLmRhOWU2MDNkYjMyODU3MDhjMDFhNWFwMEwsIDB4MS42ZDRjOTdmNjI0NmYwZWM2MTRlYzk1Yzk5MzkycC04OEwsCisJMHgxLmRkMzIxZjMwMWI0NjA0YjY5NWRlM2NwMEwsIDB4Ni4zMGEzOTMyMTUyOTllMzBkNGZiNzM1MDNjMzQ4cC05NkwsCisJMHgxLmRmYzk3MzM3YjliNWViOTY4Y2FjMzhwMEwsIDB4MS5lZDI5MWI3MjI1YTk0NGVmZDViYjU1MjRiOTI3cC04OEwsCisJMHgxLmUyNjQ2MTRmNWExMjhhMTI3NjFmYTBwMEwsIDB4MS43YWRhNjQ2N2U3N2Y3M2JmNjVlMDRjOTVlMjlkcC04OEwsCisJMHgxLmU1MDJlZTc4YjNmZjYyNzNkMTMwMTRwMEwsIDB4MS4zOTkxZThmNDk2NTllMTY5M2JlMTdhZTFkMmY5cC04OEwsCisJMHgxLmU3YTUxZmJjNzRjODM0YjU0OGIyODJwMEwsIDB4MS4yMzc4Njc1OGE4NGY0OTU2MzU0NjM0YTQxNmNlcC04OEwsCisJMHgxLmVhNGFmYTJhNDkwZDk4NThmNzNhMThwMEwsIDB4Zi41ZGIzMDFmODZkZWEyMDYxMGNlZWUxM2ViN2I4cC05MkwsCisJMHgxLmVjZjQ4MmQ4ZTY3ZjA4ZGIwMzEyZmFwMEwsIDB4MS45NDljZWY0NjIwMTBiYjRiYzRjZTcyYTkwMGRmcC04OEwsCisJMHgxLmVmYTFiZWU2MTVhMjc3NzFmZDIxYThwMEwsIDB4MS4yZGFjMWY2ZGQ1ZDIyOWZmNjhlNDZmMjdlM2RmcC04OEwsCisJMHgxLmYyNTJiMzc2YmJhOTc0ZTg2OTZmYzJwMEwsIDB4MS42MzkwZDRjNmFkNTQ3NmI1MTYyZjQwZTFkOWE5cC04OEwsCisJMHgxLmY1MDc2NWI2ZTQ1NDA2NzRmODRiNzZwMEwsIDB4Mi44NjJiYWZmOTkwMDBkZmM0MzUyYmEyOWI4OTA4cC05MkwsCisJMHgxLmY3YmZkYWQ5Y2JlMTM4OTEzYjRiZmVwMEwsIDB4Ny4yYmQ5NWM1Y2U3MjgwZmE0ZDIzNDRhM2Y1NjE4cC05MkwsCisJMHgxLmZhN2MxODE5ZTkwZDgyZTkwYTdlNzRwMEwsIDB4Yi4yNjNjMWRjMDYwYzM2Zjc2NTBiNGMwZjIzM2E4cC05MkwsCisJMHgxLmZkM2MyMmI4ZjcxZjEwOTc1YmE0YjJwMEwsIDB4MS4yYmNmM2E1ZTEyZDI2OWQ4YWQ3YzFhNGE4ODc1cC04OEwKK307CisKK2xvbmcgZG91YmxlCitleHBsKGxvbmcgZG91YmxlIHgpCit7CisJdW5pb24gSUVFRWwyYml0cyB1LCB2OworCWxvbmcgZG91YmxlIHEsIHIsIHIxLCB0LCB0d29waywgdHdvcGtwMTAwMDA7CisJZG91YmxlIGRyLCBmbiwgcjI7CisJaW50IGssIG4sIG4yOworCXVpbnQxNl90IGh4LCBpeDsKKworCS8qIEZpbHRlciBvdXQgZXhjZXB0aW9uYWwgY2FzZXMuICovCisJdS5lID0geDsKKwloeCA9IHUueGJpdHMuZXhwc2lnbjsKKwlpeCA9IGh4ICYgMHg3ZmZmOworCWlmIChpeCA+PSBCSUFTICsgMTMpIHsJCS8qIHx4fCA+PSA4MTkyIG9yIHggaXMgTmFOICovCisJCWlmIChpeCA9PSBCSUFTICsgTERCTF9NQVhfRVhQKSB7CisJCQlpZiAoaHggJiAweDgwMDApICAvKiB4IGlzIC1JbmYgb3IgLU5hTiAqLworCQkJCXJldHVybiAoLTEgLyB4KTsKKwkJCXJldHVybiAoeCArIHgpOwkvKiB4IGlzICtJbmYgb3IgK05hTiAqLworCQl9CisJCWlmICh4ID4gb190aHJlc2hvbGQpCisJCQlyZXR1cm4gKGh1Z2UgKiBodWdlKTsKKwkJaWYgKHggPCB1X3RocmVzaG9sZCkKKwkJCXJldHVybiAodGlueSAqIHRpbnkpOworCX0gZWxzZSBpZiAoaXggPCBCSUFTIC0gMTE0KSB7CS8qIHx4fCA8IDB4MXAtMTE0ICovCisJCXJldHVybiAoMSArIHgpOwkJLyogMSB3aXRoIGluZXhhY3QgaWZmIHggIT0gMCAqLworCX0KKworCUVOVEVSSSgpOworCisJLyogUmVkdWNlIHggdG8gKGsqbG4yICsgZW5kcG9pbnRbbjJdICsgcjEgKyByMikuICovCisJLyogVXNlIGEgc3BlY2lhbGl6ZWQgcmludCgpIHRvIGdldCBmbi4gIEFzc3VtZSByb3VuZC10by1uZWFyZXN0LiAqLworCS8qIFhYWCBhc3N1bWUgbm8gZXh0cmEgcHJlY2lzaW9uIGZvciB0aGUgYWRkaXRpb25zLCBhcyBmb3IgdHJpZyBmbnMuICovCisJLyogWFhYIHRoaXMgc2V0IG9mIGNvbW1lbnRzIGlzIG5vdyBxdWFkcnVwbGljYXRlZC4gKi8KKwlmbiA9IChkb3VibGUpeCAqIElOVl9MICsgMHgxLjhwNTIgLSAweDEuOHA1MjsKKyNpZiBkZWZpbmVkKEhBVkVfRUZGSUNJRU5UX0lSSU5UKQorCW4gPSBpcmludChmbik7CisjZWxzZQorCW4gPSAoaW50KWZuOworI2VuZGlmCisJbjIgPSAodW5zaWduZWQpbiAlIElOVEVSVkFMUzsKKwlrID0gbiA+PiBMT0cyX0lOVEVSVkFMUzsKKwlyMSA9IHggLSBmbiAqIEwxOworCXIyID0gZm4gKiAtTDI7CisJciA9IHIxICsgcjI7CisKKwkvKiBQcmVwYXJlIHNjYWxlIGZhY3RvcnMuICovCisJLyogWFhYIHNwYXJjNjQgbXVsdGlwbGljYXRpb24gaXMgc28gc2xvdyB0aGF0IHNjYWxibmwoKSBpcyBmYXN0ZXIuICovCisJdi5lID0gMTsKKwlpZiAoayA+PSBMREJMX01JTl9FWFApIHsKKwkJdi54Yml0cy5leHBzaWduID0gQklBUyArIGs7CisJCXR3b3BrID0gdi5lOworCX0gZWxzZSB7CisJCXYueGJpdHMuZXhwc2lnbiA9IEJJQVMgKyBrICsgMTAwMDA7CisJCXR3b3BrcDEwMDAwID0gdi5lOworCX0KKworCS8qIEV2YWx1YXRlIGV4cGwoZW5kcG9pbnRbbjJdICsgcjEgKyByMikgPSB0YmxbbjJdICogZXhwbChyMSArIHIyKS4gKi8KKwlkciA9IHI7CisJcSA9IHIyICsgciAqIHIgKiAoQTIgKyByICogKEEzICsgciAqIChBNCArIHIgKiAoQTUgKyByICogKEE2ICsKKwkgICAgZHIgKiAoQTcgKyBkciAqIChBOCArIGRyICogKEE5ICsgZHIgKiBBMTApKSkpKSkpKTsKKwl0ID0gdGJsW24yXS5sbyArIHRibFtuMl0uaGk7CisJdCA9IHRibFtuMl0ubG8gKyB0ICogKHEgKyByMSkgKyB0YmxbbjJdLmhpOworCisJLyogU2NhbGUgYnkgMioqay4gKi8KKwlpZiAoayA+PSBMREJMX01JTl9FWFApIHsKKwkJaWYgKGsgPT0gTERCTF9NQVhfRVhQKQorCQkJUkVUVVJOSSh0ICogMiAqIDB4MXAxNjM4M0wpOworCQlSRVRVUk5JKHQgKiB0d29wayk7CisJfSBlbHNlIHsKKwkJUkVUVVJOSSh0ICogdHdvcGtwMTAwMDAgKiB0d29tMTAwMDApOworCX0KK30KKworLyoKKyAqIE91ciBUMSBhbmQgVDIgYXJlIGNob3NlbiB0byBiZSBhcHByb3hpbWF0ZWx5IHRoZSBwb2ludHMgd2hlcmUgbWV0aG9kCisgKiBBIGFuZCBtZXRob2QgQiBoYXZlIHRoZSBzYW1lIGFjY3VyYWN5LiAgVGFuZydzIFQxIGFuZCBUMiBhcmUgdGhlCisgKiBwb2ludHMgd2hlcmUgbWV0aG9kIEEncyBhY2N1cmFjeSBjaGFuZ2VzIGJ5IGEgZnVsbCBiaXQuICBGb3IgVGFuZywKKyAqIHRoaXMgZHJvcCBpbiBhY2N1cmFjeSBtYWtlcyBtZXRob2QgQSBpbW1lZGlhdGVseSBsZXNzIGFjY3VyYXRlIHRoYW4KKyAqIG1ldGhvZCBCLCBidXQgb3VyIGxhcmdlciBJTlRFUlZBTFMgbWFrZXMgbWV0aG9kIEEgMiBiaXRzIG1vcmUKKyAqIGFjY3VyYXRlIHNvIGl0IHJlbWFpbnMgdGhlIG1vc3QgYWNjdXJhdGUgbWV0aG9kIHNpZ25pZmljYW50bHkKKyAqIGNsb3NlciB0byB0aGUgb3JpZ2luIGRlc3BpdGUgbG9zaW5nIHRoZSBmdWxsIGJpdCBpbiBvdXIgZXh0ZW5kZWQKKyAqIHJhbmdlIGZvciBpdC4KKyAqCisgKiBTcGxpdCB0aGUgaW50ZXJ2YWwgW1QxLCBUMl0gaW50byB0d28gaW50ZXJ2YWxzIFtUMSwgVDNdIGFuZCBbVDMsIFQyXS4KKyAqIFNldHRpbmcgVDMgdG8gMCB3b3VsZCByZXF1aXJlIHRoZSB8eHwgPCAweDFwLTExMyBjb25kaXRpb24gdG8gYXBwZWFyCisgKiBpbiBib3RoIHN1YmludGVydmFscywgc28gc2V0IFQzID0gMioqLTUsIHdoaWNoIHBsYWNlcyB0aGUgY29uZGl0aW9uCisgKiBpbnRvIHRoZSBbVDEsIFQzXSBpbnRlcnZhbC4KKyAqLworc3RhdGljIGNvbnN0IGRvdWJsZQorVDEgPSAtMC4xNjU5LAkJCQkvKiB+LTMwLjYyNS8xMjggKiBsb2coMikgKi8KK1QyID0gIDAuMTY1OSwJCQkJLyogfjMwLjYyNS8xMjggKiBsb2coMikgKi8KK1QzID0gIDAuMDMxMjU7CisKKy8qCisgKiBEb21haW4gWy0wLjE2NTksIDAuMDMxMjVdLCByYW5nZSB+WzIuOTEzNGUtNDQsIDEuODQwNGUtMzddOgorICogfChleHAoeCktMS14LXgqKjIvMikveCAtIHAoeCl8IDwgMioqLTEyMi4wMworICovCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK0MzICA9ICAxLjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY3ZS0xTCwKK0M0ICA9ICA0LjE2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjQ1ZS0yTCwKK0M1ICA9ICA4LjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzcxNjM4ZS0zTCwKK0M2ICA9ICAxLjM4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODkxMTg4NjU4ZS0zTCwKK0M3ICA9ICAxLjk4NDEyNjk4NDEyNjk4NDEyNjk4NDEyNjk3MjM1OTUwMzk0ZS00TCwKK0M4ICA9ICAyLjQ4MDE1ODczMDE1ODczMDE1ODczMDE1MTEyNDg3ODQ5MDQwZS01TCwKK0M5ICA9ICAyLjc1NTczMTkyMjM5ODU4OTA2NTI1NjA2Njg1NDg0NDEyMDA1ZS02TCwKK0MxMCA9ICAyLjc1NTczMTkyMjM5ODU4OTA2NjEyOTY2MDkzMDU3MDIwMzYyZS03TCwKK0MxMSA9ICAyLjUwNTIxMDgzODU0NDE3MjAzNjE5MDMxOTYwMTUxMjUzOTQ0ZS04TCwKK0MxMiA9ICAyLjA4NzY3NTY5ODc4Njc5NTc2NDU3MjcyMjgyNTY2NTIwNjQ5ZS05TCwKK0MxMyA9ICAxLjYwNTkwNDM4MzY3MjUyNDcxNzgzNTQ4NzQ4ODI0MjU1NzA3ZS0xMEw7CisKK3N0YXRpYyBjb25zdCBkb3VibGUKK0MxNCA9ICAxLjE0NzA3NDU1ODA0OTE5MzJlLTExLAkJLyogIDB4MS45Mzk3NGE4MWRhZTMwcC0zNyAqLworQzE1ID0gIDcuNjQ3MTYyMDE4MTA5MDQ2OGUtMTMsCQkvKiAgMHgxLmFlN2YzODIwYWRhYjFwLTQxICovCitDMTYgPSAgNC43NzkzNzIxNDYwMjYwNDUwZS0xNCwJCS8qICAweDEuYWU3Y2QxOGExOGVhY3AtNDUgKi8KK0MxNyA9ICAyLjgwNzQ3NTczNTY2NTg4NzdlLTE1LAkJLyogIDB4MS45NDk5OTJhMTkzN2Q5cC00OSAqLworQzE4ID0gIDEuNDc2MDYxMDMyMzY5OTQ3NmUtMTY7CQkvKiAgMHgxLjU0NWI0M2FhYmZiY2RwLTUzICovCisKKy8qCisgKiBEb21haW4gWzAuMDMxMjUsIDAuMTY1OV0sIHJhbmdlIH5bLTIuNzY3NmUtMzcsIC0xLjAzNjdlLTM4XToKKyAqIHwoZXhwKHgpLTEteC14KioyLzIpL3ggLSBwKHgpfCA8IDIqKi0xMjEuNDQKKyAqLworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCitEMyAgPSAgMS42NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY4MjI0NWUtMUwsCitENCAgPSAgNC4xNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYzNDIyODMyNGUtMkwsCitENSAgPSAgOC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM2NDAyMjI0NDQ4MWUtM0wsCitENiAgPSAgMS4zODg4ODg4ODg4ODg4ODg4ODg4ODg4NzEzODcyMjc2MjA3MmUtM0wsCitENyAgPSAgMS45ODQxMjY5ODQxMjY5ODQxMjY5OTA4NTgwNTQyNDY2MTQ3MWUtNEwsCitEOCAgPSAgMi40ODAxNTg3MzAxNTg3MzAxNTY4Nzk5MzcxMjEwMTQ3OTYxMmUtNUwsCitEOSAgPSAgMi43NTU3MzE5MjIzOTg1ODk0NDEwMTAzNjI4ODMzODIwODA0MmUtNkwsCitEMTAgPSAgMi43NTU3MzE5MjIzOTg1MzE2MTE0ODA2NDY3NjUzMzc1NDA0OGUtN0wsCitEMTEgPSAgMi41MDUyMTA4Mzg1NTA4NDU3MDA0NjQ4MDQ1MDkzNTI2NzQzM2UtOEwsCitEMTIgPSAgMi4wODc2NzU2OTgxOTczODUyNDQ4ODY4NjMxODAyNDg1NDk0MmUtOUwsCitEMTMgPSAgMS42MDU5MDQ0MjI5NzAwODQ5NTMwMTkyNzQ0ODEyMjQ5OTMxM2UtMTBMOworCitzdGF0aWMgY29uc3QgZG91YmxlCitEMTQgPSAgMS4xNDcwNzI2MTc2MjA0MzM2ZS0xMSwJCS8qICAweDEuOTM5NzFkYzM5NWQ5ZXAtMzcgKi8KK0QxNSA9ICA3LjY0Nzg1MzIyNDk1ODE2ODZlLTEzLAkJLyogIDB4MS5hZTg5MmUzRDE2ZmNlcC00MSAqLworRDE2ID0gIDQuNzYyODg5MjgzMjYwNzc0MWUtMTQsCQkvKiAgMHgxLmFkMDBEZmU0MWZlY2NwLTQ1ICovCitEMTcgPSAgMy4wNTI0ODU3MjIwMzU4NjUwZS0xNTsJCS8qICAweDEuRDdlOGQ4ODZEZjkyMXAtNDkgKi8KKworbG9uZyBkb3VibGUKK2V4cG0xbChsb25nIGRvdWJsZSB4KQoreworCXVuaW9uIElFRUVsMmJpdHMgdSwgdjsKKwlsb25nIGRvdWJsZSBoeDJfaGksIGh4Ml9sbywgcSwgciwgcjEsIHQsIHR3b21rLCB0d29waywgeF9oaTsKKwlsb25nIGRvdWJsZSB4X2xvLCB4MjsKKwlkb3VibGUgZHIsIGR4LCBmbiwgcjI7CisJaW50IGssIG4sIG4yOworCXVpbnQxNl90IGh4LCBpeDsKKworCS8qIEZpbHRlciBvdXQgZXhjZXB0aW9uYWwgY2FzZXMuICovCisJdS5lID0geDsKKwloeCA9IHUueGJpdHMuZXhwc2lnbjsKKwlpeCA9IGh4ICYgMHg3ZmZmOworCWlmIChpeCA+PSBCSUFTICsgNykgewkJLyogfHh8ID49IDEyOCBvciB4IGlzIE5hTiAqLworCQlpZiAoaXggPT0gQklBUyArIExEQkxfTUFYX0VYUCkgeworCQkJaWYgKGh4ICYgMHg4MDAwKSAgLyogeCBpcyAtSW5mIG9yIC1OYU4gKi8KKwkJCQlyZXR1cm4gKC0xIC8geCAtIDEpOworCQkJcmV0dXJuICh4ICsgeCk7CS8qIHggaXMgK0luZiBvciArTmFOICovCisJCX0KKwkJaWYgKHggPiBvX3RocmVzaG9sZCkKKwkJCXJldHVybiAoaHVnZSAqIGh1Z2UpOworCQkvKgorCQkgKiBleHBtMWwoKSBuZXZlciB1bmRlcmZsb3dzLCBidXQgaXQgbXVzdCBhdm9pZAorCQkgKiB1bnJlcHJlc2VudGFibGUgbGFyZ2UgbmVnYXRpdmUgZXhwb25lbnRzLiAgV2UgdXNlZCBhCisJCSAqIG11Y2ggc21hbGxlciB0aHJlc2hvbGQgZm9yIGxhcmdlIHx4fCBhYm92ZSB0aGFuIGluCisJCSAqIGV4cGwoKSBzbyBhcyB0byBoYW5kbGUgbm90IHNvIGxhcmdlIG5lZ2F0aXZlIGV4cG9uZW50cworCQkgKiBpbiB0aGUgc2FtZSB3YXkgYXMgbGFyZ2Ugb25lcyBoZXJlLgorCQkgKi8KKwkJaWYgKGh4ICYgMHg4MDAwKQkvKiB4IDw9IC0xMjggKi8KKwkJCXJldHVybiAodGlueSAtIDEpOwkvKiBnb29kIGZvciB4IDwgLTExNGxuMiAtIGVwcyAqLworCX0KKworCUVOVEVSSSgpOworCisJaWYgKFQxIDwgeCAmJiB4IDwgVDIpIHsKKwkJeDIgPSB4ICogeDsKKwkJZHggPSB4OworCisJCWlmICh4IDwgVDMpIHsKKwkJCWlmIChpeCA8IEJJQVMgLSAxMTMpIHsJLyogfHh8IDwgMHgxcC0xMTMgKi8KKwkJCQkvKiB4IChyb3VuZGVkKSB3aXRoIGluZXhhY3QgaWYgeCAhPSAwOiAqLworCQkJCVJFVFVSTkkoeCA9PSAwID8geCA6CisJCQkJICAgICgweDFwMjAwICogeCArIGZhYnNsKHgpKSAqIDB4MXAtMjAwKTsKKwkJCX0KKwkJCXEgPSB4ICogeDIgKiBDMyArIHgyICogeDIgKiAoQzQgKyB4ICogKEM1ICsgeCAqIChDNiArCisJCQkgICAgeCAqIChDNyArIHggKiAoQzggKyB4ICogKEM5ICsgeCAqIChDMTAgKworCQkJICAgIHggKiAoQzExICsgeCAqIChDMTIgKyB4ICogKEMxMyArCisJCQkgICAgZHggKiAoQzE0ICsgZHggKiAoQzE1ICsgZHggKiAoQzE2ICsKKwkJCSAgICBkeCAqIChDMTcgKyBkeCAqIEMxOCkpKSkpKSkpKSkpKSkpOworCQl9IGVsc2UgeworCQkJcSA9IHggKiB4MiAqIEQzICsgeDIgKiB4MiAqIChENCArIHggKiAoRDUgKyB4ICogKEQ2ICsKKwkJCSAgICB4ICogKEQ3ICsgeCAqIChEOCArIHggKiAoRDkgKyB4ICogKEQxMCArCisJCQkgICAgeCAqIChEMTEgKyB4ICogKEQxMiArIHggKiAoRDEzICsKKwkJCSAgICBkeCAqIChEMTQgKyBkeCAqIChEMTUgKyBkeCAqIChEMTYgKworCQkJICAgIGR4ICogRDE3KSkpKSkpKSkpKSkpKTsKKwkJfQorCisJCXhfaGkgPSAoZmxvYXQpeDsKKwkJeF9sbyA9IHggLSB4X2hpOworCQloeDJfaGkgPSB4X2hpICogeF9oaSAvIDI7CisJCWh4Ml9sbyA9IHhfbG8gKiAoeCArIHhfaGkpIC8gMjsKKwkJaWYgKGl4ID49IEJJQVMgLSA3KQorCQkJUkVUVVJOSShoeDJfbG8gKyB4X2xvICsgcSArIChoeDJfaGkgKyB4X2hpKSk7CisJCWVsc2UKKwkJCVJFVFVSTkkoaHgyX2xvICsgcSArIGh4Ml9oaSArIHgpOworCX0KKworCS8qIFJlZHVjZSB4IHRvIChrKmxuMiArIGVuZHBvaW50W24yXSArIHIxICsgcjIpLiAqLworCS8qIFVzZSBhIHNwZWNpYWxpemVkIHJpbnQoKSB0byBnZXQgZm4uICBBc3N1bWUgcm91bmQtdG8tbmVhcmVzdC4gKi8KKwlmbiA9IChkb3VibGUpeCAqIElOVl9MICsgMHgxLjhwNTIgLSAweDEuOHA1MjsKKyNpZiBkZWZpbmVkKEhBVkVfRUZGSUNJRU5UX0lSSU5UKQorCW4gPSBpcmludChmbik7CisjZWxzZQorCW4gPSAoaW50KWZuOworI2VuZGlmCisJbjIgPSAodW5zaWduZWQpbiAlIElOVEVSVkFMUzsKKwlrID0gbiA+PiBMT0cyX0lOVEVSVkFMUzsKKwlyMSA9IHggLSBmbiAqIEwxOworCXIyID0gZm4gKiAtTDI7CisJciA9IHIxICsgcjI7CisKKwkvKiBQcmVwYXJlIHNjYWxlIGZhY3Rvci4gKi8KKwl2LmUgPSAxOworCXYueGJpdHMuZXhwc2lnbiA9IEJJQVMgKyBrOworCXR3b3BrID0gdi5lOworCisJLyoKKwkgKiBFdmFsdWF0ZSBsb3dlciB0ZXJtcyBvZgorCSAqIGV4cGwoZW5kcG9pbnRbbjJdICsgcjEgKyByMikgPSB0YmxbbjJdICogZXhwbChyMSArIHIyKS4KKwkgKi8KKwlkciA9IHI7CisJcSA9IHIyICsgciAqIHIgKiAoQTIgKyByICogKEEzICsgciAqIChBNCArIHIgKiAoQTUgKyByICogKEE2ICsKKwkgICAgZHIgKiAoQTcgKyBkciAqIChBOCArIGRyICogKEE5ICsgZHIgKiBBMTApKSkpKSkpKTsKKworCXQgPSB0YmxbbjJdLmxvICsgdGJsW24yXS5oaTsKKworCWlmIChrID09IDApIHsKKwkJdCA9IHRibFtuMl0ubG8gKiAocjEgKyAxKSArIHQgKiBxICsgdGJsW24yXS5oaSAqIHIxICsKKwkJICAgICh0YmxbbjJdLmhpIC0gMSk7CisJCVJFVFVSTkkodCk7CisJfQorCWlmIChrID09IC0xKSB7CisJCXQgPSB0YmxbbjJdLmxvICogKHIxICsgMSkgKyB0ICogcSArIHRibFtuMl0uaGkgKiByMSArIAorCQkgICAgKHRibFtuMl0uaGkgLSAyKTsKKwkJUkVUVVJOSSh0IC8gMik7CisJfQorCWlmIChrIDwgLTcpIHsKKwkJdCA9IHRibFtuMl0ubG8gKyB0ICogKHEgKyByMSkgKyB0YmxbbjJdLmhpOworCQlSRVRVUk5JKHQgKiB0d29wayAtIDEpOworCX0KKwlpZiAoayA+IDIgKiBMREJMX01BTlRfRElHIC0gMSkgeworCQl0ID0gdGJsW24yXS5sbyArIHQgKiAocSArIHIxKSArIHRibFtuMl0uaGk7CisJCWlmIChrID09IExEQkxfTUFYX0VYUCkKKwkJCVJFVFVSTkkodCAqIDIgKiAweDFwMTYzODNMIC0gMSk7CisJCVJFVFVSTkkodCAqIHR3b3BrIC0gMSk7CisJfQorCisJdi54Yml0cy5leHBzaWduID0gQklBUyAtIGs7CisJdHdvbWsgPSB2LmU7CisKKwlpZiAoayA+IExEQkxfTUFOVF9ESUcgLSAxKQorCQl0ID0gdGJsW24yXS5sbyAtIHR3b21rICsgdCAqIChxICsgcjEpICsgdGJsW24yXS5oaTsKKwllbHNlCisJCXQgPSB0YmxbbjJdLmxvICsgdCAqIChxICsgcjEpICsgKHRibFtuMl0uaGkgLSB0d29tayk7CisJUkVUVVJOSSh0ICogdHdvcGspOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfbG9nbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfbG9nbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MWQ2MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19sb2dsLmMKQEAgLTAsMCArMSw3MzcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTMgQnJ1Y2UgRC4gRXZhbnMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHggZm9yIDEyOC1iaXQgZm9ybWF0LgorICoKKyAqIEZpcnN0IGRlY29tcG9zZSB4IGludG8gaXRzIGJhc2UgMiByZXByZXNlbnRhdGlvbjoKKyAqCisgKiAgICBsb2coeCkgPSBsb2coWCAqIDIqKmspLCB3aGVyZSBYIGlzIGluIFsxLCAyKQorICogICAgICAgICAgID0gbG9nKFgpICsgayAqIGxvZygyKS4KKyAqCisgKiBMZXQgWCA9IFhfaSArIGUsIHdoZXJlIFhfaSBpcyB0aGUgY2VudGVyIG9mIG9uZSBvZiB0aGUgaW50ZXJ2YWxzCisgKiBbLTEuMC8yNTYsIDEuMC8yNTYpLCBbMS4wLzI1NiwgMy4wLzI1NiksIC4uLi4gWzIuMC0xLjAvMjU2LCAyLjArMS4wLzI1NikKKyAqIGFuZCBYIGlzIGluIHRoaXMgaW50ZXJ2YWwuICBUaGVuCisgKgorICogICAgbG9nKFgpID0gbG9nKFhfaSArIGUpCisgKiAgICAgICAgICAgPSBsb2coWF9pICogKDEgKyBlIC8gWF9pKSkKKyAqICAgICAgICAgICA9IGxvZyhYX2kpICsgbG9nKDEgKyBlIC8gWF9pKS4KKyAqCisgKiBUaGUgdmFsdWVzIGxvZyhYX2kpIGFyZSB0YWJ1bGF0ZWQgYmVsb3cuICBMZXQgZCA9IGUgLyBYX2kgYW5kIHVzZQorICoKKyAqICAgIGxvZygxICsgZCkgPSBwKGQpCisgKgorICogd2hlcmUgcChkKSA9IGQgLSAwLjUqZCpkICsgLi4uIGlzIGEgc3BlY2lhbCBtaW5pbWF4IHBvbHlub21pYWwgb2YKKyAqIHN1aXRhYmx5IGhpZ2ggZGVncmVlLgorICoKKyAqIFRvIGdldCBzdWZmaWNpZW50bHkgc21hbGwgcm91bmRvZmYgZXJyb3JzLCBrICogbG9nKDIpLCBsb2coWF9pKSwgYW5kCisgKiBzb21ldGltZXMgKGlmIHxrfCBpcyBub3QgbGFyZ2UpIHRoZSBmaXJzdCB0ZXJtIGluIHAoZCkgbXVzdCBiZSBldmFsdWF0ZWQKKyAqIGFuZCBhZGRlZCB1cCBpbiBleHRyYSBwcmVjaXNpb24uICBFeHRyYSBwcmVjaXNpb24gaXMgbm90IG5lZWRlZCBmb3IgdGhlCisgKiByZXN0IG9mIHAoZCkuICBJbiB0aGUgd29yc3QgY2FzZSB3aGVuIGsgPSAwIGFuZCBsb2coWF9pKSBpcyAwLCB0aGUgZmluYWwKKyAqIGVycm9yIGlzIGNvbnRyb2xsZWQgbWFpbmx5IGJ5IHRoZSBlcnJvciBpbiB0aGUgc2Vjb25kIHRlcm0gaW4gcChkKS4gIFRoZQorICogZXJyb3IgaW4gdGhpcyB0ZXJtIGl0c2VsZiBpcyBhdCBtb3N0IDAuNSB1bHBzIGZyb20gdGhlIGQqZCBvcGVyYXRpb24gaW4KKyAqIGl0LiAgVGhlIGVycm9yIGluIHRoaXMgdGVybSByZWxhdGl2ZSB0byB0aGUgZmlyc3QgdGVybSBpcyB0aHVzIGF0IG1vc3QKKyAqIDAuNSAqIHwtMC41fCAqIHxkfCA8IDEuMC8xMDI0IHVscHMuICBXZSBhaW0gZm9yIGFuIGFjY3VtdWxhdGVkIGVycm9yIG9mCisgKiBhdCBtb3N0IHR3aWNlIHRoaXMgYXQgdGhlIHBvaW50IG9mIHRoZSBmaW5hbCByb3VuZGluZyBzdGVwLiAgVGh1cyB0aGUKKyAqIGZpbmFsIGVycm9yIHNob3VsZCBiZSBhdCBtb3N0IDAuNSArIDEuMC81MTIgPSAwLjUwMjAgdWxwcy4gIEV4aGF1c3RpdmUKKyAqIHRlc3Rpbmcgb2YgYSBmbG9hdCB2YXJpYW50IG9mIHRoaXMgZnVuY3Rpb24gc2hvd2VkIGEgbWF4aW11bSBmaW5hbCBlcnJvcgorICogb2YgMC41MDA4IHVscHMuICBOb24tZXhoYXVzdGl2ZSB0ZXN0aW5nIG9mIGEgZG91YmxlIHZhcmlhbnQgb2YgdGhpcworICogZnVuY3Rpb24gc2hvd2VkIGEgbWF4aW11bSBmaW5hbCBlcnJvciBvZiAwLjUwNzggdWxwcyAobmVhciAxKzEuMC8yNTYpLgorICoKKyAqIFdlIG1hZGUgdGhlIG1heGltdW0gb2YgfGR8IChhbmQgdGh1cyB0aGUgdG90YWwgcmVsYXRpdmUgZXJyb3IgYW5kIHRoZQorICogZGVncmVlIG9mIHAoZCkpIHNtYWxsIGJ5IHVzaW5nIGEgbGFyZ2UgbnVtYmVyIG9mIGludGVydmFscy4gIFVzaW5nCisgKiBjZW50ZXJzIG9mIGludGVydmFscyBpbnN0ZWFkIG9mIGVuZHBvaW50cyByZWR1Y2VzIHRoaXMgbWF4aW11bSBieSBhCisgKiBmYWN0b3Igb2YgMiBmb3IgYSBnaXZlbiBudW1iZXIgb2YgaW50ZXJ2YWxzLiAgcChkKSBpcyBzcGVjaWFsIG9ubHkKKyAqIGluIGJlZ2lubmluZyB3aXRoIHRoZSBUYXlsb3IgY29lZmZpY2llbnRzIDAgKyAxKmQsIHdoaWNoIHRlbmRzIHRvIGhhcHBlbgorICogbmF0dXJhbGx5LiAgVGhlIG1vc3QgYWNjdXJhdGUgbWluaW1heCBwb2x5bm9taWFsIG9mIGEgZ2l2ZW4gZGVncmVlIG1pZ2h0CisgKiBiZSBkaWZmZXJlbnQsIGJ1dCB0aGVuIHdlIHdvdWxkbid0IHdhbnQgaXQgc2luY2Ugd2Ugd291bGQgaGF2ZSB0byBkbworICogZXh0cmEgd29yayB0byBhdm9pZCByb3VuZG9mZiBlcnJvciAoZXNwZWNpYWxseSBmb3IgUDAqZCBpbnN0ZWFkIG9mIGQpLgorICovCisKKyNpZmRlZiBERUJVRworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGZlbnYuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisjaW5jbHVkZSAibWF0aC5oIgorI2lmbmRlZiBOT19TVFJVQ1RfUkVUVVJOCisjZGVmaW5lCVNUUlVDVF9SRVRVUk4KKyNlbmRpZgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisjaWYgIWRlZmluZWQoTk9fVVRBQikgJiYgIWRlZmluZWQoTk9fVVRBQkwpCisjZGVmaW5lCVVTRV9VVEFCCisjZW5kaWYKKworLyoKKyAqIERvbWFpbiBbLTAuMDA1MjgwLCAwLjAwNDgzOF0sIHJhbmdlIH5bLTEuMTU3N2UtMzcsIDEuMTU4MmUtMzddOgorICogfGxvZygxICsgZCkvZCAtIHAoZCl8IDwgMioqLTEyMi43CisgKi8KK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorUDIgPSAtMC41TCwKK1AzID0gIDMuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMyMzM3OTVlLTFMLAkvKiAgMHgxNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NGQ0Mi4wcC0xMTRMICovCitQNCA9IC0yLjQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQxMTM5Mjk2ZS0xTCwJLyogLTB4MWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkYWIxNGUuMHAtMTE1TCAqLworUDUgPSAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NTQ2ODAzOTk0M2UtMUwsCS8qICAweDE5OTk5OTk5OTk5OTk5OTk5OTk5YTZkMzU2N2Y0LjBwLTExNUwgKi8KK1A2ID0gLTEuNjY2NjY2NjY2NjY2NjY2NjY2NjY2OTYxNDIzNzI2OTg0MDhlLTFMLAkvKiAtMHgxNTU1NTU1NTU1NTU1NTU1NTU2NzI2N2E1OGUxMy4wcC0xMTVMICovCitQNyA9ICAxLjQyODU3MTQyODU3MTQyODU3MTE5NTIyOTQzNDc3MTY2MTIwZS0xTCwJLyogIDB4MTI0OTI0OTI0OTI0OTI0OGVkNzlhMGFlNDM0ZGUuMHAtMTE1TCAqLworUDggPSAtMS4yNDk5OTk5OTk5OTk5OTk5NDg2MzI4OTAxNTAzMzU4MTMwMWUtMUw7CS8qIC0weDFmZmZmZmZmZmZmZmZmYTEzZTkxNzY1ZTQ2MTQwLjBwLTExNkwgKi8KKy8qIERvdWJsZSBwcmVjaXNpb24gZ2l2ZXMgfiA1MyArIGxvZzIoUDkgKiBtYXgofGR8KSoqOCkgfj0gMTIwIGJpdHMuICovCitzdGF0aWMgY29uc3QgZG91YmxlCitQOSA9ICAxLjExMTExMTExMTExMTE0MDFlLTEsCQkvKiAgMHgxYzcxYzcxYzcxYzdlZC4wcC01NiAqLworUDEwID0gLTEuMDAwMDAwMDAwMDA0MDEzNWUtMSwJCS8qIC0weDE5OTk5OTk5OWEwYTkyLjBwLTU2ICovCitQMTEgPSAgOS4wOTA5MDkwNzI4MTM2MjU4ZS0yLAkJLyogIDB4MTc0NWQxNzM5NjIxMTEuMHAtNTYgKi8KK1AxMiA9IC04LjMzMzMzMTg4NTE4NTUyODRlLTIsCQkvKiAtMHgxNTU1NTUxNzIyYzdhMy4wcC01NiAqLworUDEzID0gIDcuNjkyODYzNDY2NjQwNDE3OGUtMiwJCS8qICAweDEzYjE5ODUyMDRhNGFlLjBwLTU2ICovCitQMTQgPSAtNy4xNjI2ODEwMDc4NDYyNDk5ZS0yOwkJLyogLTB4MTI1NjIyNzZjZGM1ZDAuMHAtNTYgKi8KKworc3RhdGljIHZvbGF0aWxlIGNvbnN0IGRvdWJsZSB6ZXJvID0gMDsKKworI2RlZmluZQlJTlRFUlZBTFMJMTI4CisjZGVmaW5lCUxPRzJfSU5URVJWQUxTCTcKKyNkZWZpbmUJVFNJWkUJCShJTlRFUlZBTFMgKyAxKQorI2RlZmluZQlHKGkpCQkoVFsoaSldLkcpCisjZGVmaW5lCUZfaGkoaSkJCShUWyhpKV0uRl9oaSkKKyNkZWZpbmUJRl9sbyhpKQkJKFRbKGkpXS5GX2xvKQorI2RlZmluZQlsbjJfaGkJCUZfaGkoVFNJWkUgLSAxKQorI2RlZmluZQlsbjJfbG8JCUZfbG8oVFNJWkUgLSAxKQorI2RlZmluZQlFKGkpCQkoVVsoaSldLkUpCisjZGVmaW5lCUgoaSkJCShVWyhpKV0uSCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJZmxvYXQJRzsJCQkvKiAxLygxICsgaS8xMjgpIHJvdW5kZWQgdG8gOC85IGJpdHMgKi8KKwlmbG9hdAlGX2hpOwkJCS8qIGxvZygxIC8gR19pKSByb3VuZGVkIChzZWUgYmVsb3cpICovCisJLyogVGhlIGNvbXBpbGVyIHdpbGwgaW5zZXJ0IDggYnl0ZXMgb2YgcGFkZGluZyBoZXJlLiAqLworCWxvbmcgZG91YmxlIEZfbG87CQkvKiBuZXh0IDExMyBiaXRzIGZvciBsb2coMSAvIEdfaSkgKi8KK30gVFtUU0laRV0gPSB7CisJLyoKKwkgKiBsbjJfaGkgYW5kIGVhY2ggRl9oaShpKSBhcmUgcm91bmRlZCB0byBhIG51bWJlciBvZiBiaXRzIHRoYXQKKwkgKiBtYWtlcyBGX2hpKGkpICsgZGsqbG4yX2hpIGV4YWN0IGZvciBhbGwgaSBhbmQgYWxsIGRrLgorCSAqCisJICogVGhlIGxhc3QgZW50cnkgKGZvciBYIGp1c3QgYmVsb3cgMikgaXMgdXNlZCB0byBkZWZpbmUgbG4yX2hpCisJICogYW5kIGxuMl9sbywgdG8gZW5zdXJlIHRoYXQgRl9oaShpKSBhbmQgRl9sbyhpKSBjYW5jZWwgZXhhY3RseQorCSAqIHdpdGggZGsqbG4yX2hpIGFuZCBkaypsbjJfbG8sIHJlc3BlY3RpdmVseSwgd2hlbiBkayA9IC0xLgorCSAqIFRoaXMgaXMgbmVlZGVkIGZvciBhY2N1cmFjeSB3aGVuIHggaXMganVzdCBiZWxvdyAxLiAgKFRvIGF2b2lkCisJICogc3BlY2lhbCBjYXNlcywgc3VjaCB4IGFyZSAicmVkdWNlZCIgc3RyYW5nZWx5IHRvIFgganVzdCBiZWxvdworCSAqIDIgYW5kIGRrID0gLTEsIGFuZCB0aGVuIHRoZSBleGFjdCBjYW5jZWxsYXRpb24gaXMgbmVlZGVkCisJICogYmVjYXVzZSBhbnkgdGhlIGVycm9yIGZyb20gYW55IG5vbi1leGFjdG5lc3Mgd291bGQgYmUgdG9vCisJICogbGFyZ2UpLgorCSAqCisJICogVGhlIHJlbGV2YW50IHJhbmdlIG9mIGRrIGlzIFstMTY0NDUsIDE2MzgzXS4gIFRoZSBtYXhpbXVtIG51bWJlcgorCSAqIG9mIGJpdHMgaW4gRl9oaShpKSB0aGF0IHdvcmtzIGlzIHZlcnkgZGVwZW5kZW50IG9uIGkgYnV0IGhhcworCSAqIGEgbWluaW11bSBvZiA5My4gIFdlIG9ubHkgbmVlZCBhYm91dCAxMiBiaXRzIGluIEZfaGkoaSkgZm9yCisJICogaXQgdG8gcHJvdmlkZSBlbm91Z2ggZXh0cmEgcHJlY2lzaW9uLgorCSAqCisJICogV2Ugcm91bmQgRl9oaShpKSB0byAyNCBiaXRzIHNvIHRoYXQgaXQgY2FuIGhhdmUgdHlwZSBmbG9hdCwKKwkgKiBtYWlubHkgdG8gbWluaW1pemUgdGhlIHNpemUgb2YgdGhlIHRhYmxlLiAgVXNpbmcgYWxsIDI0IGJpdHMKKwkgKiBpbiBhIGZsb2F0IGZvciBpdCBhdXRvbWF0aWNhbGx5IHNhdGlzZmllcyB0aGUgYWJvdmUgY29uc3RyYWludHMuCisJICovCisgICAgIDB4ODAwMDAwLjBwLTIzLCAgMCwgICAgICAgICAgICAgICAwLAorICAgICAweGZlMDAwMC4wcC0yNCwgIDB4ODA4MGFjLjBwLTMwLCAtMHgxNGVlNDMxZGFlNjY3NGFmYTBjNGJmZTE2ZThmZC4wcC0xNDRMLAorICAgICAweGZjMDAwMC4wcC0yNCwgIDB4ODEwMmIzLjBwLTI5LCAtMHgxZGIyOWVlMmQ4MzcxN2JlOTE4ZTExMTk2NDJhYi4wcC0xNDRMLAorICAgICAweGZhMDAwMC4wcC0yNCwgIDB4YzI0OTI5LjBwLTI5LCAgMHgxMTkxOTU3ZDE3MzY5N2NmMzAyY2M5NDc2ZjU2MS4wcC0xNDNMLAorICAgICAweGY4MDAwMC4wcC0yNCwgIDB4ODIwYWVjLjBwLTI4LCAgMHgxM2NlODg4OGUwMmU3OGViYTliMTExM2JjMWMxOC4wcC0xNDJMLAorICAgICAweGY2MDAwMC4wcC0yNCwgIDB4YTMzNTc3LjBwLTI4LCAtMHgxN2E0MzgyY2U2ZWI3YmZhNTA5YmVjOGRhNWYyMi4wcC0xNDJMLAorICAgICAweGY0ODAwMC4wcC0yNCwgIDB4YmM0MmNiLjBwLTI4LCAtMHgxNzJhMjExNjFhMTA3Njc0OTg2ZGNkY2E2NzA5Yy4wcC0xNDNMLAorICAgICAweGYzMDAwMC4wcC0yNCwgIDB4ZDU3Nzk3LjBwLTI4LCAtMHgxZTA5ZGUwN2NiOTU4ODk3YTNlYTQ2ZTg0YWJiMy4wcC0xNDJMLAorICAgICAweGYxMDAwMC4wcC0yNCwgIDB4Zjc1MThlLjBwLTI4LCAgMHgxYWUxZWVjMWIwMzZjNDg0OTkzYzU0OWM0YmY0MC4wcC0xNTFMLAorICAgICAweGVmMDAwMC4wcC0yNCwgIDB4OGNiOWRmLjBwLTI3LCAtMHgxZDczNTUzMjVkNTYwZDllOWFiM2Q2ZWJhYjU4MC4wcC0xNDFMLAorICAgICAweGVkODAwMC4wcC0yNCwgIDB4OTk5ZWMwLjBwLTI3LCAtMHgxZjlmMDJkMjU2ZDUwMzcxMDhmNGVjMjFlNDhjZC4wcC0xNDJMLAorICAgICAweGVjMDAwMC4wcC0yNCwgIDB4YTY5ODhiLjBwLTI3LCAtMHgxNmZjMGE5ZDEyYzE3YTcwZjdhNjg0YzU5NmIxMi4wcC0xNDNMLAorICAgICAweGVhMDAwMC4wcC0yNCwgIDB4YjgwNjk4LjBwLTI3LCAgMHgxNWQ1ODFjMWU4ZGE5OWRlZDMyMmZiMDhiODQ2Mi4wcC0xNDFMLAorICAgICAweGU4MDAwMC4wcC0yNCwgIDB4Yzk5YWYzLjBwLTI3LCAtMHgxNTM1YjNiYThmMTUwYWUwOTk5NmQ3YmI0NjUzZS4wcC0xNDNMLAorICAgICAweGU3MDAwMC4wcC0yNCwgIDB4ZDI3M2IyLjBwLTI3LCAgMHgxNjM3ODZmNTI1MWFlZmUwZGVkMzRjODMxOGY1Mi4wcC0xNDVMLAorICAgICAweGU1MDAwMC4wcC0yNCwgIDB4ZTQ0MmMwLjBwLTI3LCAgMHgxYmM0YjIzNjhlMzJkNTY2OTljMTc5OWEyNDRkNC4wcC0xNDRMLAorICAgICAweGUzODAwMC4wcC0yNCwgIDB4ZjFiODNmLjBwLTI3LCAgMHgxYzYwOTBmNjg0ZTY3NjZhYmNlY2NhYjFkNzE3NC4wcC0xNDFMLAorICAgICAweGUyMDAwMC4wcC0yNCwgIDB4ZmY0NDhhLjBwLTI3LCAtMHgxODkwYWE2OWFjOWY0MjE1ZjkzOTM2YjcwOWVmYi4wcC0xNDJMLAorICAgICAweGUwODAwMC4wcC0yNCwgIDB4ODY3M2Y2LjBwLTI2LCAgMHgxYjk5ODUxOTRiNmFmZmQ1MTFiNTM0YjcyYTI4ZS4wcC0xNDBMLAorICAgICAweGRmMDAwMC4wcC0yNCwgIDB4OGQ1MTVjLjBwLTI2LCAtMHgxZGMwOGQ2MWM2ZWYxZDliMmVmN2U2ODY4MDU5OC4wcC0xNDNMLAorICAgICAweGRkODAwMC4wcC0yNCwgIDB4OTQzYTllLjBwLTI2LCAtMHgxZjcyYTJkYWM3MjliM2Y0NjY2MjIzOGE5NDI1YS4wcC0xNDJMLAorICAgICAweGRjMDAwMC4wcC0yNCwgIDB4OWIyZmU2LjBwLTI2LCAtMHgxZmQ0ZGZkM2EwYWZiOTY5MWFlZDRkNWUzZGY5NC4wcC0xNDBMLAorICAgICAweGRhODAwMC4wcC0yNCwgIDB4YTIzMTVkLjBwLTI2LCAtMHgxMWIyNjEyMTYyOWM0NmMxODYzODQ5OTNlMWM5My4wcC0xNDJMLAorICAgICAweGQ5MDAwMC4wcC0yNCwgIDB4YTkzZjJmLjBwLTI2LCAgMHgxMjg2ZDYzM2U4ZTU2OTdkYzZhNDAyYTU2ZmNlMS4wcC0xNDFMLAorICAgICAweGQ3ODAwMC4wcC0yNCwgIDB4YjA1OTg4LjBwLTI2LCAgMHgxNjEyOGViYTkzNjc3MDdlYmZhNTQwZTQ1MzUwYy4wcC0xNDRMLAorICAgICAweGQ2MDAwMC4wcC0yNCwgIDB4Yjc4MDk0LjBwLTI2LCAgMHgxNmVhZDU3NzM5MGQzMWVmMGY0YzlkNDNmNzliMi4wcC0xNDBMLAorICAgICAweGQ1MDAwMC4wcC0yNCwgIDB4YmM0YzZjLjBwLTI2LCAgMHgxNTExMzFjY2Y3YzdiNzVlN2Q5MDBiNTIxYzQ4ZC4wcC0xNDFMLAorICAgICAweGQzODAwMC4wcC0yNCwgIDB4YzM4OTBhLjBwLTI2LCAtMHgxMTVlMmNkNzE0YmQwNjUwOGFlYjAwZDJhZTNlOS4wcC0xNDBMLAorICAgICAweGQyMDAwMC4wcC0yNCwgIDB4Y2FkMmQ3LjBwLTI2LCAtMHgxODQ3ZjQwNmViZDNhZjgwNDg1YzJmNDA5NjMzYy4wcC0xNDJMLAorICAgICAweGQxMDAwMC4wcC0yNCwgIDB4Y2ZiNjIwLjBwLTI2LCAgMHgxYzIyNTk5MDRkNjg2NTgxNzk5ZmJjZTBiNWYxOS4wcC0xNDFMLAorICAgICAweGNmODAwMC4wcC0yNCwgIDB4ZDcxNjUzLjBwLTI2LCAgMHgxZWNlNTdhOGQ1YWU1NGY1NTA0NDRlY2Y4Yjk5NS4wcC0xNDBMLAorICAgICAweGNlMDAwMC4wcC0yNCwgIDB4ZGU4NDNhLjBwLTI2LCAtMHgxZjEwOWQ0YmM0NTk1NDEyYjVkMjUxN2FhYWMxMy4wcC0xNDFMLAorICAgICAweGNkMDAwMC4wcC0yNCwgIDB4ZTM3ZmRlLjBwLTI2LCAgMHgxYmMwM2RjMjcxYTc0ZDNhODViNWI0M2MwZTcyNy4wcC0xNDFMLAorICAgICAweGNiODAwMC4wcC0yNCwgIDB4ZWIwNTBjLjBwLTI2LCAtMHgxYmYyYmFkYzBkZjg0MWE3MWI3OWRkNTY0NWI0Ni4wcC0xNDVMLAorICAgICAweGNhMDAwMC4wcC0yNCwgIDB4ZjI5ODc4LjBwLTI2LCAtMHgxOGVmZWRlZGQ4OWZiZTBiY2ZiZTZkNmRiOWY2Ni4wcC0xNDdMLAorICAgICAweGM5MDAwMC4wcC0yNCwgIDB4ZjdhZDZmLjBwLTI2LCAgMHgxMzczZmY5NzdiYWE2OTExYzdiYWZjYjRkODRmYi4wcC0xNDFMLAorICAgICAweGM4MDAwMC4wcC0yNCwgIDB4ZmNjOGUzLjBwLTI2LCAgMHgxOTY3NjZmMmZiMzI4MzM3Y2MwNTBjNmQ4M2IyMi4wcC0xNDBMLAorICAgICAweGM2ODAwMC4wcC0yNCwgIDB4ODIzZjMwLjBwLTI1LCAgMHgxOWJkMDc2ZjdjNDM0ZTVmY2YxYTIxMmUyYTkxZS4wcC0xMzlMLAorICAgICAweGM1ODAwMC4wcC0yNCwgIDB4ODRkNTJjLjBwLTI1LCAtMHgxYTMyNzI1N2FmMGY0NjVlNWVjYWI1ZjJhNmY4MS4wcC0xMzlMLAorICAgICAweGM0MDAwMC4wcC0yNCwgIDB4ODhiYzc0LjBwLTI1LCAgMHgxMTNmMjNkZWYxOWM1YTBmZTM5NmY0MGYxZGRhOS4wcC0xNDFMLAorICAgICAweGMzMDAwMC4wcC0yNCwgIDB4OGI1YWU2LjBwLTI1LCAgMHgxNzU5ZjZlNmIzN2RlOTQ1YTA0OWE5NjJlNjZjNi4wcC0xMzlMLAorICAgICAweGMyMDAwMC4wcC0yNCwgIDB4OGRmY2NiLjBwLTI1LCAgMHgxYWQzNWNhNmVkNTE0N2JkYjZkZGNhZjU5YzQyNS4wcC0xNDFMLAorICAgICAweGMxMDAwMC4wcC0yNCwgIDB4OTBhMjJiLjBwLTI1LCAgMHgxYTFkNzFhODdkZWJhNDZiYWU5ODI3MjIxZGM5OC4wcC0xMzlMLAorICAgICAweGJmODAwMC4wcC0yNCwgIDB4OTRhMGQ4LjBwLTI1LCAtMHgxMzllNTIxMGMyYjczMGUyOGFiYTAwMWE5YjVlMC4wcC0xNDBMLAorICAgICAweGJlODAwMC4wcC0yNCwgIDB4OTc0ZjE2LjBwLTI1LCAtMHgxOGY2ZWJjZmYzZWQ3MmUyM2UxMzQzMWFkYzRhNS4wcC0xNDFMLAorICAgICAweGJkODAwMC4wcC0yNCwgIDB4OWEwMGYxLjBwLTI1LCAtMHgxYWEyNjhiZTM5YWFiNzE0OGU4ZDgwY2FhMTBiNy4wcC0xMzlMLAorICAgICAweGJjODAwMC4wcC0yNCwgIDB4OWNiNjcyLjBwLTI1LCAtMHgxNGM4ODE1ODM5YzU2NjM2NjNkMTVmYWVkNzc3MS4wcC0xMzlMLAorICAgICAweGJiMDAwMC4wcC0yNCwgIDB4YTBjZGExLjBwLTI1LCAgMHgxZWFmNDYzOTBkYmIyNDM4MjczOTE4ZGI3ZGY1Yy4wcC0xNDFMLAorICAgICAweGJhMDAwMC4wcC0yNCwgIDB4YTM4YzZlLjBwLTI1LCAgMHgxMzhlMjBkODMxZjY5ODI5OGFkZGRkN2YzMjY4Ni4wcC0xNDFMLAorICAgICAweGI5MDAwMC4wcC0yNCwgIDB4YTY0ZjA1LjBwLTI1LCAtMHgxZThkM2M0MTEyMzYxNWIxNDdhNWQ0N2JjMjA4Zi4wcC0xNDJMLAorICAgICAweGI4MDAwMC4wcC0yNCwgIDB4YTkxNTcwLjBwLTI1LCAgMHgxY2UyOGY1ZjM4NDBiMjYzYWNiNDM1MTEwNDYzMS4wcC0xNDBMLAorICAgICAweGI3MDAwMC4wcC0yNCwgIDB4YWJkZmJiLjBwLTI1LCAtMHgxODZlNWMwYTQyNDIzNDU3ZTIyZDhjNjUwYjM1NS4wcC0xMzlMLAorICAgICAweGI2MDAwMC4wcC0yNCwgIDB4YWVhZGVmLjBwLTI1LCAtMHgxNGQ0MWEwYjJhMDhhNDY1ZGM1MTNiMTNmNTY3ZC4wcC0xNDNMLAorICAgICAweGI1MDAwMC4wcC0yNCwgIDB4YjE4MDE4LjBwLTI1LCAgMHgxNjc1NTg5Mjc3MDYzMzk0N2ZmZTY1MWU3MzUyZi4wcC0xMzlMLAorICAgICAweGI0MDAwMC4wcC0yNCwgIDB4YjQ1NjQyLjBwLTI1LCAtMHgxNjM5NWViZTU5YjE1MjI4YmZlODc5OGQxMGZmMC4wcC0xNDJMLAorICAgICAweGIzMDAwMC4wcC0yNCwgIDB4YjczMDc3LjBwLTI1LCAgMHgxYWJjNjVjODU5NWYwODhiNjFhMzM1ZjViNjg4Yy4wcC0xNDBMLAorICAgICAweGIyMDAwMC4wcC0yNCwgIDB4YmEwZWM0LjBwLTI1LCAtMHgxMjczMDg5ZDNkYWQ4OGU3ZDM1M2U5OTY3ZDU0OC4wcC0xMzlMLAorICAgICAweGIxMDAwMC4wcC0yNCwgIDB4YmNmMTMzLjBwLTI1LCAgMHgxMGY5ZjY3YjFmNGJiZjQ1ZGUwNmVjZWJmYWY2ZC4wcC0xMzlMLAorICAgICAweGIwMDAwMC4wcC0yNCwgIDB4YmZkN2QyLjBwLTI1LCAtMHgxMDlmYWI5MDQ4NjQwOTJiMzRlZGRhMTlhODMxZS4wcC0xNDBMLAorICAgICAweGFmMDAwMC4wcC0yNCwgIDB4YzJjMmFjLjBwLTI1LCAtMHgxMTI0NjgwYWE0MzMzMzIyMWQ4YTliNDc1YTZiYS4wcC0xMzlMLAorICAgICAweGFlODAwMC4wcC0yNCwgIDB4YzQzOWIzLjBwLTI1LCAtMHgxZjM2MGNjNDcxMGZiZmUyNGI2MzNmNGU4ZDg0ZC4wcC0xNDBMLAorICAgICAweGFkODAwMC4wcC0yNCwgIDB4YzcyYWZkLjBwLTI1LCAtMHgxMzJkOTFmMjFkODljODljNDUwMDNmYzVkNzgwNy4wcC0xNDBMLAorICAgICAweGFjODAwMC4wcC0yNCwgIDB4Y2EyMGEyLjBwLTI1LCAtMHgxNmJmOWI0ZDFmOGRhODAwMmYyNDQ5ZTE3NDUwNC4wcC0xMzlMLAorICAgICAweGFiODAwMC4wcC0yNCwgIDB4Y2QxYWFlLjBwLTI1LCAgMHgxOWRlYjVjZTZhNmE4NzE3ZDU2MjZlMTZhY2M3ZC4wcC0xNDFMLAorICAgICAweGFhODAwMC4wcC0yNCwgIDB4ZDAxOTJmLjBwLTI1LCAgMHgxYTI5ZmI0OGY3ZDNjYTg3ZGFiZjM1MWFhNDFmNC4wcC0xMzlMLAorICAgICAweGFhMDAwMC4wcC0yNCwgIDB4ZDE5YTIwLjBwLTI1LCAgMHgxMTI3ZDNjNjQ1N2Y5ZDc5ZjUxZGNjNzMwMTRjOS4wcC0xNDFMLAorICAgICAweGE5MDAwMC4wcC0yNCwgIDB4ZDQ5ZjZhLjBwLTI1LCAtMHgxYmE5MzBlNDg2YTBhYzQyZDFiZjkxOTkxODhlNy4wcC0xNDFMLAorICAgICAweGE4MDAwMC4wcC0yNCwgIDB4ZDdhOTRiLjBwLTI1LCAtMHgxYjZlNjQ1ZjMxNTQ5ZGQxMTYwYmNjNDVjN2UyYy4wcC0xMzlMLAorICAgICAweGE3MDAwMC4wcC0yNCwgIDB4ZGFiN2QwLjBwLTI1LCAgMHgxMTE4YTQyNTQ5NGI2MTA2NjUzNzdmMTU2MjViNi4wcC0xNDBMLAorICAgICAweGE2ODAwMC4wcC0yNCwgIDB4ZGM0MGQ1LjBwLTI1LCAgMHgxOTY2ZjI0ZDI5ZDNhMmQxYjIxNzYwMTA0NzhiZS4wcC0xNDBMLAorICAgICAweGE1ODAwMC4wcC0yNCwgIDB4ZGY1NjZkLjBwLTI1LCAtMHgxZDhlNTJlYjIyNDhmMGM5NWRkODM2MjZkNzMzMy4wcC0xNDJMLAorICAgICAweGE0ODAwMC4wcC0yNCwgIDB4ZTI3MGNlLjBwLTI1LCAtMHgxZWUzNzBmOTZlNmI2N2NjYjAwNmE1Yjk4OTBlYS4wcC0xNDBMLAorICAgICAweGE0MDAwMC4wcC0yNCwgIDB4ZTNmZmNlLjBwLTI1LCAgMHgxZDE1NTMyNDkxMWY1NmRiMjhkYTRkNjI5ZDAwYS4wcC0xNDBMLAorICAgICAweGEzMDAwMC4wcC0yNCwgIDB4ZTcyMTc5LjBwLTI1LCAtMHgxZmU2ZTJmMmY4NjdkOGY0ZDYwYzcxMzM0NjY0MS4wcC0xNDBMLAorICAgICAweGEyMDAwMC4wcC0yNCwgIDB4ZWE0ODEyLjBwLTI1LCAgMHgxYjdiZTlhZGQ3ZjRkM2IzZDQwNmI2Y2JmM2NlNS4wcC0xNDBMLAorICAgICAweGExODAwMC4wcC0yNCwgIDB4ZWJkZDNkLjBwLTI1LCAgMHgxYjNjZmIzZjc1MTFkZDczNjkyNjA5MDQwY2NjMi4wcC0xMzlMLAorICAgICAweGEwODAwMC4wcC0yNCwgIDB4ZWYwYjViLjBwLTI1LCAtMHgxMjIwZGUxZjczMDE5MDFiOGFkODVjMjVhZmQwOS4wcC0xMzlMLAorICAgICAweGEwMDAwMC4wcC0yNCwgIDB4ZjBhNDUxLjBwLTI1LCAtMHgxNzYzNjRjOWFjODFjYzhhNGRmYjgwNGRlNjg2Ny4wcC0xNDBMLAorICAgICAweDlmMDAwMC4wcC0yNCwgIDB4ZjNkYTE2LjBwLTI1LCAgMHgxZWVkNmI5YWFmYWM4ZDQyZjc4ZDNlNjVkMzcyNy4wcC0xNDFMLAorICAgICAweDllODAwMC4wcC0yNCwgIDB4ZjU3NmU5LjBwLTI1LCAgMHgxZDU5MzIxODY3NWFmMjY5NjQ3Yjc4M2Q4ODk5OS4wcC0xMzlMLAorICAgICAweDlkODAwMC4wcC0yNCwgIDB4ZjhiNDdjLjBwLTI1LCAtMHgxM2U4ZWI3ZGEwNTNlMDYzNzE0NjE1ZjdjYzkxZC4wcC0xNDRMLAorICAgICAweDlkMDAwMC4wcC0yNCwgIDB4ZmE1NTNmLjBwLTI1LCAgMHgxYzA2MzI1OWJjYWRlMDI5NTE2ODZkNTM3M2FlYy4wcC0xMzlMLAorICAgICAweDljMDAwMC4wcC0yNCwgIDB4ZmQ5YWM1LjBwLTI1LCAgMHgxZWY0OTEwODVmYTNjMTY0OTM0OTYzMDUzMTUwMi4wcC0xMzlMLAorICAgICAweDliODAwMC4wcC0yNCwgIDB4ZmYzZjhjLjBwLTI1LCAgMHgxZDYwN2E3YzJiOGM1MzIwNjE5ZmI5NDMzZDg0MS4wcC0xMzlMLAorICAgICAweDlhODAwMC4wcC0yNCwgIDB4ODE0Njk3LjBwLTI0LCAtMHgxMmFkMzgxNzAwNGYzZjBiZGZmOTlmOTMyYjI3My4wcC0xMzhMLAorICAgICAweDlhMDAwMC4wcC0yNCwgIDB4ODIxYjA2LjBwLTI0LCAtMHgxODlmYzUzMTE3ZjllNTRlNzgxMDNhMmJjMTc2Ny4wcC0xNDFMLAorICAgICAweDk5MDAwMC4wcC0yNCwgIDB4ODNjNWY4LjBwLTI0LCAgMHgxNGNmMTVhMDQ4OTA3YjdkN2Y0N2RkYjQ1YzVhMy4wcC0xMzlMLAorICAgICAweDk4ODAwMC4wcC0yNCwgIDB4ODQ5YzdkLjBwLTI0LCAgMHgxY2JiMWQzNWZiODI4NzNiMDRhOWFmMWRkNjkyYy4wcC0xMzhMLAorICAgICAweDk3ODAwMC4wcC0yNCwgIDB4ODY0YmE2LjBwLTI0LCAgMHgxMTI4NjM5YjgxNGY5Yjk3NzBkOGNiNjU3MzU0MC4wcC0xMzhMLAorICAgICAweDk3MDAwMC4wcC0yNCwgIDB4ODcyNDRjLjBwLTI0LCAgMHgxODQ3MzM4NTMzMDBmMDAyZTgzNmRmZDQ3YmQ0MS4wcC0xMzlMLAorICAgICAweDk2ODAwMC4wcC0yNCwgIDB4ODdmZGFhLjBwLTI0LCAgMHgxMDlkMjNhZWY3N2RkNWNkN2NjOTQzMDZmYjNmZi4wcC0xNDBMLAorICAgICAweDk1ODAwMC4wcC0yNCwgIDB4ODliMjkzLjBwLTI0LCAtMHgxYTgxZWYzNjdhNTlkZTJiNDFlZWViZDU1MDcwMi4wcC0xMzhMLAorICAgICAweDk1MDAwMC4wcC0yNCwgIDB4OGE4ZTIwLjBwLTI0LCAtMHgxMjFhZDNkYmIyZjQ1Mjc1YzkxN2EzMGRmNGFjOS4wcC0xMzhMLAorICAgICAweDk0ODAwMC4wcC0yNCwgIDB4OGI2YTZhLjBwLTI0LCAtMHgxY2ZiOTgxNjI4YWY3MWE4OWRmNGU2ZGYyZTkzYi4wcC0xMzlMLAorICAgICAweDkzODAwMC4wcC0yNCwgIDB4OGQyNTNhLjBwLTI0LCAtMHgxZDIxNzMwZWE3NmNmZGVjMzY3ODI4NzM0Y2FlNS4wcC0xMzlMLAorICAgICAweDkzMDAwMC4wcC0yNCwgIDB4OGUwM2MyLjBwLTI0LCAgMHgxMzVjYzAwZTU2NmY3NmI4NzMzMzg5MWUwZGVjNC4wcC0xMzhMLAorICAgICAweDkyODAwMC4wcC0yNCwgIDB4OGVlMzBkLjBwLTI0LCAtMHgxMGZjYjVkZjI1N2EyNjNlM2JmNDQ2YzZlM2Y2OS4wcC0xNDBMLAorICAgICAweDkxODAwMC4wcC0yNCwgIDB4OTBhM2VlLjBwLTI0LCAtMHgxNmUxNzFiMTU0MzNkNzIzYTRjNzM4MGE0NDhkOC4wcC0xMzlMLAorICAgICAweDkxMDAwMC4wcC0yNCwgIDB4OTE4NTg3LjBwLTI0LCAtMHgxZDA1MGRhMDdmMzIzNmYzMzA5NzJkYTJhN2E4Ny4wcC0xMzlMLAorICAgICAweDkwODAwMC4wcC0yNCwgIDB4OTI2N2U3LjBwLTI0LCAgMHgxYmUwMzY2OWE1MjY4ZDIxMTQ4YzYwMDJiZWNkMy4wcC0xMzlMLAorICAgICAweDhmODAwMC4wcC0yNCwgIDB4OTQyZjA0LjBwLTI0LCAgMHgxMGIyOGUwZTI2YzMzNmFmOTBlMDA1MzMzMjNiYS4wcC0xMzlMLAorICAgICAweDhmMDAwMC4wcC0yNCwgIDB4OTUxM2MzLjBwLTI0LCAgMHgxYTFkODIwZGE1N2NmMmYxMDVhODkwNjAwNDZhYS4wcC0xMzhMLAorICAgICAweDhlODAwMC4wcC0yNCwgIDB4OTVmOTUwLjBwLTI0LCAtMHgxOWVmOGYxM2FlM2NmMTYyNDA5ZDhlYTk5ZDRjMC4wcC0xMzlMLAorICAgICAweDhlMDAwMC4wcC0yNCwgIDB4OTZkZmFiLjBwLTI0LCAtMHgxMDllNDE3YTZlNTA3YjlkYzEwZGFjNzQzYWQ3YS4wcC0xMzhMLAorICAgICAweDhkMDAwMC4wcC0yNCwgIDB4OThhZWQyLjBwLTI0LCAgMHgxMGQwMWEyYzViMGU5N2M0OTkwYjIzZDlhYzFmNS4wcC0xMzlMLAorICAgICAweDhjODAwMC4wcC0yNCwgIDB4OTk5N2EyLjBwLTI0LCAtMHgxZDZhNTBkNGI2MWVhNzQ1NDBiZGQyYWE5OWE0Mi4wcC0xMzhMLAorICAgICAweDhjMDAwMC4wcC0yNCwgIDB4OWE4MTQ1LjBwLTI0LCAgMHgxYjNiMTkwYjgzZjk1MjdlNmFiYThmMmQ3ODNjMS4wcC0xMzhMLAorICAgICAweDhiODAwMC4wcC0yNCwgIDB4OWI2YmJmLjBwLTI0LCAgMHgxM2E2OWZhZDdlN2FiZTdiYTgxYzY2NGMxMDdlMC4wcC0xMzhMLAorICAgICAweDhiMDAwMC4wcC0yNCwgIDB4OWM1NzExLjBwLTI0LCAtMHgxMWNkMTIzMTZmNTc2YWFkMzQ4YWU3OTg2NzIyMy4wcC0xMzhMLAorICAgICAweDhhODAwMC4wcC0yNCwgIDB4OWQ0MzNiLjBwLTI0LCAgMHgxYzk1YzQ0NGI4MDdhMjQ2NzI2YjMwNGNjYWU1Ni4wcC0xMzlMLAorICAgICAweDg5ODAwMC4wcC0yNCwgIDB4OWYxZTIyLjBwLTI0LCAtMHgxYjljMjI0ZWE2OThjMmY5YjQ3NDY2ZDYxMjNmZS4wcC0xMzlMLAorICAgICAweDg5MDAwMC4wcC0yNCwgIDB4YTAwY2UxLjBwLTI0LCAgMHgxMjVjYTkzMTg2Y2YwZjM4YjQ2MTlhMjQ4MzM5OS4wcC0xNDFMLAorICAgICAweDg4ODAwMC4wcC0yNCwgIDB4YTBmYzgwLjBwLTI0LCAtMHgxZWUzOGE3YmMyMjhiMzU5NzA0M2JlNzhlYWY0OS4wcC0xMzlMLAorICAgICAweDg4MDAwMC4wcC0yNCwgIDB4YTFlZDAwLjBwLTI0LCAtMHgxYTBkYjg3NjYxM2QyMDQxNDdkYzY5YTA3YTY0OS4wcC0xMzhMLAorICAgICAweDg3ODAwMC4wcC0yNCwgIDB4YTJkZTYyLjBwLTI0LCAgMHgxOTMyMjRlODUxNmMwMDhkMzYwMmE3YjQxYzZlOC4wcC0xMzlMLAorICAgICAweDg3MDAwMC4wcC0yNCwgIDB4YTNkMGE5LjBwLTI0LCAgMHgxZmEyOGI0ZDI1NDFhY2E3ZDU4NDQ2MDZiMjQyMS4wcC0xMzlMLAorICAgICAweDg2ODAwMC4wcC0yNCwgIDB4YTRjM2Q2LjBwLTI0LCAgMHgxYzFiNTc2MGZiNDU3MWFjYmNmYjAzZjE2ZGFmNC4wcC0xMzhMLAorICAgICAweDg1ODAwMC4wcC0yNCwgIDB4YTZhY2VhLjBwLTI0LCAgMHgxZmVkNWQwZjY1OTQ5YzBhMzQ1YWQ3NDNhZTFhZS4wcC0xNDBMLAorICAgICAweDg1MDAwMC4wcC0yNCwgIDB4YTdhMmQ0LjBwLTI0LCAgMHgxYWQyNzBjOWQ3NDkzNjIzODJhNzY4ODQ3OWUyNC4wcC0xNDBMLAorICAgICAweDg0ODAwMC4wcC0yNCwgIDB4YTg5OWFiLjBwLTI0LCAgMHgxOTlmZjE1Y2U1MzI2NjFlYTk2NDNhM2EyZDM3OC4wcC0xMzlMLAorICAgICAweDg0MDAwMC4wcC0yNCwgIDB4YTk5MTcxLjBwLTI0LCAgMHgxYTE5ZTE1Y2NjNDVkMjU3NTMwYTY4MmI4MDQ5MC4wcC0xMzlMLAorICAgICAweDgzODAwMC4wcC0yNCwgIDB4YWE4YTI4LjBwLTI0LCAtMHgxMjFhMTRlYzUzMmIzNWJhM2UxZjg2OGZkMGI1ZS4wcC0xNDBMLAorICAgICAweDgzMDAwMC4wcC0yNCwgIDB4YWI4M2QxLjBwLTI0LCAgMHgxYWVlMzE5OTgwYmZmMzMwM2RkNDgxNzc5ZGY2OS4wcC0xMzlMLAorICAgICAweDgyODAwMC4wcC0yNCwgIDB4YWM3ZTZmLjBwLTI0LCAtMHgxOGZmZDllMzkwMDM0NWE4NWQyZDg2MTYxNzQyZS4wcC0xNDBMLAorICAgICAweDgyMDAwMC4wcC0yNCwgIDB4YWQ3YTAzLjBwLTI0LCAtMHgxZTRkYjEwMmNlMjlmNzliMDI2YjY0YjQyY2FhMS4wcC0xNDBMLAorICAgICAweDgxODAwMC4wcC0yNCwgIDB4YWU3NjhmLjBwLTI0LCAgMHgxN2MzNWM1NWEwNGE4MmFiMTlmNzc2NTJkOTc3YS4wcC0xNDFMLAorICAgICAweDgxMDAwMC4wcC0yNCwgIDB4YWY3NDE1LjBwLTI0LCAgMHgxNDQ4MzI0MDQ3MDE5YjQ4ZDdiOThjMWNmNzIzNC4wcC0xMzhMLAorICAgICAweDgwODAwMC4wcC0yNCwgIDB4YjA3Mjk4LjBwLTI0LCAtMHgxNzUwZWUzOTE1YTE5N2U5YzczNTlkZDk0MTUyZi4wcC0xMzhMLAorICAgICAweDgwMDAwMC4wcC0yNCwgIDB4YjE3MjE4LjBwLTI0LCAtMHgxMDVjNjEwY2E4NmMzODk4Y2ZmODFhMTJhMTdlMi4wcC0xNDFMLAorfTsKKworI2lmZGVmIFVTRV9VVEFCCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlmbG9hdAlIOwkJCS8qIDEgKyBpL0lOVEVSVkFMUyAoZXhhY3QpICovCisJZmxvYXQJRTsJCQkvKiBIKGkpICogRyhpKSAtIDEgKGV4YWN0KSAqLworfSBVW1RTSVpFXSA9IHsKKwkgMHg4MDAwMDAuMHAtMjMsICAwLAorCSAweDgxMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM3LAorCSAweDgyMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweDgzMDAwMC4wcC0yMywgLTB4OTAwMDAwLjBwLTM0LAorCSAweDg0MDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTMzLAorCSAweDg1MDAwMC4wcC0yMywgLTB4YzgwMDAwLjBwLTMzLAorCSAweDg2MDAwMC4wcC0yMywgLTB4YTAwMDAwLjBwLTM2LAorCSAweDg3MDAwMC4wcC0yMywgIDB4OTQwMDAwLjBwLTMzLAorCSAweDg4MDAwMC4wcC0yMywgIDB4ODAwMDAwLjBwLTM1LAorCSAweDg5MDAwMC4wcC0yMywgLTB4YzgwMDAwLjBwLTM0LAorCSAweDhhMDAwMC4wcC0yMywgIDB4ZTAwMDAwLjBwLTM2LAorCSAweDhiMDAwMC4wcC0yMywgIDB4OTAwMDAwLjBwLTMzLAorCSAweDhjMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweDhkMDAwMC4wcC0yMywgLTB4ZTAwMDAwLjBwLTMzLAorCSAweDhlMDAwMC4wcC0yMywgIDB4ODgwMDAwLjBwLTMzLAorCSAweDhmMDAwMC4wcC0yMywgLTB4YTgwMDAwLjBwLTM0LAorCSAweDkwMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweDkxMDAwMC4wcC0yMywgIDB4ODAwMDAwLjBwLTM3LAorCSAweDkyMDAwMC4wcC0yMywgIDB4OTAwMDAwLjBwLTM1LAorCSAweDkzMDAwMC4wcC0yMywgIDB4ZDAwMDAwLjBwLTM1LAorCSAweDk0MDAwMC4wcC0yMywgIDB4ZTAwMDAwLjBwLTM1LAorCSAweDk1MDAwMC4wcC0yMywgIDB4YzAwMDAwLjBwLTM1LAorCSAweDk2MDAwMC4wcC0yMywgIDB4ZTAwMDAwLjBwLTM2LAorCSAweDk3MDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM4LAorCSAweDk4MDAwMC4wcC0yMywgLTB4YzAwMDAwLjBwLTM1LAorCSAweDk5MDAwMC4wcC0yMywgLTB4ZDAwMDAwLjBwLTM0LAorCSAweDlhMDAwMC4wcC0yMywgIDB4ODgwMDAwLjBwLTMzLAorCSAweDliMDAwMC4wcC0yMywgIDB4ZTgwMDAwLjBwLTM1LAorCSAweDljMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweDlkMDAwMC4wcC0yMywgIDB4YjQwMDAwLjBwLTMzLAorCSAweDllMDAwMC4wcC0yMywgIDB4ODgwMDAwLjBwLTM0LAorCSAweDlmMDAwMC4wcC0yMywgLTB4ZTAwMDAwLjBwLTM1LAorCSAweGEwMDAwMC4wcC0yMywgIDB4ODAwMDAwLjBwLTMzLAorCSAweGExMDAwMC4wcC0yMywgLTB4OTAwMDAwLjBwLTM2LAorCSAweGEyMDAwMC4wcC0yMywgLTB4YjAwMDAwLjBwLTMzLAorCSAweGEzMDAwMC4wcC0yMywgLTB4YTAwMDAwLjBwLTM2LAorCSAweGE0MDAwMC4wcC0yMywgIDB4ODAwMDAwLjBwLTMzLAorCSAweGE1MDAwMC4wcC0yMywgLTB4ZjgwMDAwLjBwLTM1LAorCSAweGE2MDAwMC4wcC0yMywgIDB4ODgwMDAwLjBwLTM0LAorCSAweGE3MDAwMC4wcC0yMywgLTB4OTAwMDAwLjBwLTMzLAorCSAweGE4MDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweGE5MDAwMC4wcC0yMywgIDB4OTAwMDAwLjBwLTM0LAorCSAweGFhMDAwMC4wcC0yMywgIDB4YTgwMDAwLjBwLTMzLAorCSAweGFiMDAwMC4wcC0yMywgLTB4YWMwMDAwLjBwLTM0LAorCSAweGFjMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM3LAorCSAweGFkMDAwMC4wcC0yMywgIDB4ZjgwMDAwLjBwLTM1LAorCSAweGFlMDAwMC4wcC0yMywgIDB4ZjgwMDAwLjBwLTM0LAorCSAweGFmMDAwMC4wcC0yMywgLTB4YWMwMDAwLjBwLTMzLAorCSAweGIwMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTMzLAorCSAweGIxMDAwMC4wcC0yMywgLTB4YjgwMDAwLjBwLTM0LAorCSAweGIyMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM0LAorCSAweGIzMDAwMC4wcC0yMywgLTB4YjAwMDAwLjBwLTM1LAorCSAweGI0MDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweGI1MDAwMC4wcC0yMywgLTB4ZTAwMDAwLjBwLTM2LAorCSAweGI2MDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweGI3MDAwMC4wcC0yMywgLTB4YjAwMDAwLjBwLTM1LAorCSAweGI4MDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM0LAorCSAweGI5MDAwMC4wcC0yMywgLTB4YjgwMDAwLjBwLTM0LAorCSAweGJhMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTMzLAorCSAweGJiMDAwMC4wcC0yMywgLTB4YWMwMDAwLjBwLTMzLAorCSAweGJjMDAwMC4wcC0yMywgIDB4OTgwMDAwLjBwLTMzLAorCSAweGJkMDAwMC4wcC0yMywgIDB4YmMwMDAwLjBwLTM0LAorCSAweGJlMDAwMC4wcC0yMywgIDB4ZTAwMDAwLjBwLTM2LAorCSAweGJmMDAwMC4wcC0yMywgLTB4YjgwMDAwLjBwLTM1LAorCSAweGMwMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTMzLAorCSAweGMxMDAwMC4wcC0yMywgIDB4YTgwMDAwLjBwLTMzLAorCSAweGMyMDAwMC4wcC0yMywgIDB4OTAwMDAwLjBwLTM0LAorCSAweGMzMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweGM0MDAwMC4wcC0yMywgLTB4OTAwMDAwLjBwLTMzLAorCSAweGM1MDAwMC4wcC0yMywgIDB4ODIwMDAwLjBwLTMzLAorCSAweGM2MDAwMC4wcC0yMywgIDB4ODAwMDAwLjBwLTM4LAorCSAweGM3MDAwMC4wcC0yMywgLTB4ODIwMDAwLjBwLTMzLAorCSAweGM4MDAwMC4wcC0yMywgIDB4ODAwMDAwLjBwLTMzLAorCSAweGM5MDAwMC4wcC0yMywgLTB4YTAwMDAwLjBwLTM2LAorCSAweGNhMDAwMC4wcC0yMywgLTB4YjAwMDAwLjBwLTMzLAorCSAweGNiMDAwMC4wcC0yMywgIDB4ODQwMDAwLjBwLTM0LAorCSAweGNjMDAwMC4wcC0yMywgLTB4ZDAwMDAwLjBwLTM0LAorCSAweGNkMDAwMC4wcC0yMywgIDB4ODAwMDAwLjBwLTMzLAorCSAweGNlMDAwMC4wcC0yMywgLTB4ZTAwMDAwLjBwLTM1LAorCSAweGNmMDAwMC4wcC0yMywgIDB4YTYwMDAwLjBwLTMzLAorCSAweGQwMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweGQxMDAwMC4wcC0yMywgIDB4YjQwMDAwLjBwLTMzLAorCSAweGQyMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweGQzMDAwMC4wcC0yMywgIDB4YWEwMDAwLjBwLTMzLAorCSAweGQ0MDAwMC4wcC0yMywgLTB4ZTAwMDAwLjBwLTM1LAorCSAweGQ1MDAwMC4wcC0yMywgIDB4ODgwMDAwLjBwLTMzLAorCSAweGQ2MDAwMC4wcC0yMywgLTB4ZDAwMDAwLjBwLTM0LAorCSAweGQ3MDAwMC4wcC0yMywgIDB4OWMwMDAwLjBwLTM0LAorCSAweGQ4MDAwMC4wcC0yMywgLTB4YjAwMDAwLjBwLTMzLAorCSAweGQ5MDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM4LAorCSAweGRhMDAwMC4wcC0yMywgIDB4YTQwMDAwLjBwLTMzLAorCSAweGRiMDAwMC4wcC0yMywgLTB4ZGMwMDAwLjBwLTM0LAorCSAweGRjMDAwMC4wcC0yMywgIDB4YzAwMDAwLjBwLTM1LAorCSAweGRkMDAwMC4wcC0yMywgIDB4Y2EwMDAwLjBwLTMzLAorCSAweGRlMDAwMC4wcC0yMywgLTB4YjgwMDAwLjBwLTM0LAorCSAweGRmMDAwMC4wcC0yMywgIDB4ZDAwMDAwLjBwLTM1LAorCSAweGUwMDAwMC4wcC0yMywgIDB4YzAwMDAwLjBwLTMzLAorCSAweGUxMDAwMC4wcC0yMywgLTB4ZjQwMDAwLjBwLTM0LAorCSAweGUyMDAwMC4wcC0yMywgIDB4ODAwMDAwLjBwLTM3LAorCSAweGUzMDAwMC4wcC0yMywgIDB4ODYwMDAwLjBwLTMzLAorCSAweGU0MDAwMC4wcC0yMywgLTB4YzgwMDAwLjBwLTMzLAorCSAweGU1MDAwMC4wcC0yMywgLTB4YTgwMDAwLjBwLTM0LAorCSAweGU2MDAwMC4wcC0yMywgIDB4ZTAwMDAwLjBwLTM2LAorCSAweGU3MDAwMC4wcC0yMywgIDB4ODgwMDAwLjBwLTMzLAorCSAweGU4MDAwMC4wcC0yMywgLTB4ZTAwMDAwLjBwLTMzLAorCSAweGU5MDAwMC4wcC0yMywgLTB4ZmMwMDAwLjBwLTM0LAorCSAweGVhMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweGViMDAwMC4wcC0yMywgIDB4ZTgwMDAwLjBwLTM1LAorCSAweGVjMDAwMC4wcC0yMywgIDB4OTAwMDAwLjBwLTMzLAorCSAweGVkMDAwMC4wcC0yMywgIDB4ZTIwMDAwLjBwLTMzLAorCSAweGVlMDAwMC4wcC0yMywgLTB4YWMwMDAwLjBwLTMzLAorCSAweGVmMDAwMC4wcC0yMywgLTB4YzgwMDAwLjBwLTM0LAorCSAweGYwMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweGYxMDAwMC4wcC0yMywgIDB4ODAwMDAwLjBwLTM1LAorCSAweGYyMDAwMC4wcC0yMywgIDB4YjgwMDAwLjBwLTM0LAorCSAweGYzMDAwMC4wcC0yMywgIDB4OTQwMDAwLjBwLTMzLAorCSAweGY0MDAwMC4wcC0yMywgIDB4YzgwMDAwLjBwLTMzLAorCSAweGY1MDAwMC4wcC0yMywgLTB4ZjIwMDAwLjBwLTMzLAorCSAweGY2MDAwMC4wcC0yMywgLTB4YzgwMDAwLjBwLTMzLAorCSAweGY3MDAwMC4wcC0yMywgLTB4YTIwMDAwLjBwLTMzLAorCSAweGY4MDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTMzLAorCSAweGY5MDAwMC4wcC0yMywgLTB4YzQwMDAwLjBwLTM0LAorCSAweGZhMDAwMC4wcC0yMywgLTB4OTAwMDAwLjBwLTM0LAorCSAweGZiMDAwMC4wcC0yMywgLTB4YzgwMDAwLjBwLTM1LAorCSAweGZjMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM1LAorCSAweGZkMDAwMC4wcC0yMywgLTB4OTAwMDAwLjBwLTM2LAorCSAweGZlMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM3LAorCSAweGZmMDAwMC4wcC0yMywgLTB4ODAwMDAwLjBwLTM5LAorCSAweDgwMDAwMC4wcC0yMiwgIDAsCit9OworI2VuZGlmIC8qIFVTRV9VVEFCICovCisKKyNpZmRlZiBTVFJVQ1RfUkVUVVJOCisjZGVmaW5lCVJFVFVSTjEocnAsIHYpIGRvIHsJXAorCShycCktPmhpID0gKHYpOwkJXAorCShycCktPmxvX3NldCA9IDA7CVwKKwlyZXR1cm47CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlSRVRVUk4yKHJwLCBoLCBsKSBkbyB7CVwKKwkocnApLT5oaSA9IChoKTsJCVwKKwkocnApLT5sbyA9IChsKTsJCVwKKwkocnApLT5sb19zZXQgPSAxOwlcCisJcmV0dXJuOwkJCVwKK30gd2hpbGUgKDApCisKK3N0cnVjdCBsZCB7CisJbG9uZyBkb3VibGUgaGk7CisJbG9uZyBkb3VibGUgbG87CisJaW50CWxvX3NldDsKK307CisjZWxzZQorI2RlZmluZQlSRVRVUk4xKHJwLCB2KQlSRVRVUk5GKHYpCisjZGVmaW5lCVJFVFVSTjIocnAsIGgsIGwpCVJFVFVSTkkoKGgpICsgKGwpKQorI2VuZGlmCisKKyNpZmRlZiBTVFJVQ1RfUkVUVVJOCitzdGF0aWMgaW5saW5lIF9fYWx3YXlzX2lubGluZSB2b2lkCitrX2xvZ2wobG9uZyBkb3VibGUgeCwgc3RydWN0IGxkICpycCkKKyNlbHNlCitsb25nIGRvdWJsZQorbG9nbChsb25nIGRvdWJsZSB4KQorI2VuZGlmCit7CisJbG9uZyBkb3VibGUgZCwgdmFsX2hpLCB2YWxfbG87CisJZG91YmxlIGRkLCBkazsKKwl1aW50NjRfdCBseCwgbGx4OworCWludCBpLCBrOworCXVpbnQxNl90IGh4OworCisJRVhUUkFDVF9MREJMMTI4X1dPUkRTKGh4LCBseCwgbGx4LCB4KTsKKwlrID0gLTE2MzgzOworI2lmIDAgLyogSGFyZCB0byBkbyBlZmZpY2llbnRseS4gIERvbid0IGRvIGl0IHVudGlsIHdlIHN1cHBvcnQgYWxsIG1vZGVzLiAqLworCWlmICh4ID09IDEpCisJCVJFVFVSTjEocnAsIDApOwkJLyogbG9nKDEpID0gKzAgaW4gYWxsIHJvdW5kaW5nIG1vZGVzICovCisjZW5kaWYKKwlpZiAoaHggPT0gMCB8fCBoeCA+PSAweDgwMDApIHsJLyogemVybywgbmVnYXRpdmUgb3Igc3Vibm9ybWFsPyAqLworCQlpZiAoKChoeCAmIDB4N2ZmZikgfCBseCB8IGxseCkgPT0gMCkKKwkJCVJFVFVSTjEocnAsIC0xIC8gemVybyk7CS8qIGxvZygrLTApID0gLUluZiAqLworCQlpZiAoaHggIT0gMCkKKwkJCS8qIGxvZyhuZWcgb3IgTmFOKSA9IHFOYU46ICovCisJCQlSRVRVUk4xKHJwLCAoeCAtIHgpIC8gemVybyk7CisJCXggKj0gMHgxLjBwMTEzOwkJLyogc3Vibm9ybWFsOyBzY2FsZSB1cCB4ICovCisJCUVYVFJBQ1RfTERCTDEyOF9XT1JEUyhoeCwgbHgsIGxseCwgeCk7CisJCWsgPSAtMTYzODMgLSAxMTM7CisJfSBlbHNlIGlmIChoeCA+PSAweDdmZmYpCisJCVJFVFVSTjEocnAsIHggKyB4KTsJLyogbG9nKEluZiBvciBOYU4pID0gSW5mIG9yIHFOYU4gKi8KKyNpZm5kZWYgU1RSVUNUX1JFVFVSTgorCUVOVEVSSSgpOworI2VuZGlmCisJayArPSBoeDsKKwlkayA9IGs7CisKKwkvKiBTY2FsZSB4IHRvIGJlIGluIFsxLCAyKS4gKi8KKwlTRVRfTERCTF9FWFBTSUdOKHgsIDB4M2ZmZik7CisKKwkvKiAwIDw9IGkgPD0gSU5URVJWQUxTOiAqLworI2RlZmluZQlMMkkJKDQ5IC0gTE9HMl9JTlRFUlZBTFMpCisJaSA9IChseCArICgxTEwgPDwgKEwySSAtIDIpKSkgPj4gKEwySSAtIDEpOworCisJLyoKKwkgKiAtMC4wMDUyODAgPCBkIDwgMC4wMDQ4MzguICBJbiBwYXJ0aWN1bGFyLCB0aGUgaW5maW5pdGUtCisJICogcHJlY2lzaW9uIHxkfCBpcyA8PSAyKiotNy4gIFJvdW5kaW5nIG9mIEcoaSkgdG8gOCBiaXRzCisJICogZW5zdXJlcyB0aGF0IGQgaXMgcmVwcmVzZW50YWJsZSB3aXRob3V0IGV4dHJhIHByZWNpc2lvbiBmb3IKKwkgKiB0aGlzIGJvdW5kIG9uIHxkfCAoc2luY2Ugd2hlbiB0aGlzIGNhbGN1bGF0aW9uIGlzIGV4cHJlc3NlZAorCSAqIGFzIHgqRyhpKS0xLCB0aGUgbXVsdGlwbGljYXRpb24gbmVlZHMgYXMgbWFueSBleHRyYSBiaXRzIGFzCisJICogRyhpKSBoYXMgYW5kIHRoZSBzdWJ0cmFjdGlvbiBjYW5jZWxzIDggYml0cykuICBCdXQgZm9yCisJICogbW9zdCBpICgxMDcgY2FzZXMgb3V0IG9mIDEyOSksIHRoZSBpbmZpbml0ZS1wcmVjaXNpb24gfGR8CisJICogaXMgPD0gMioqLTguICBHKGkpIGlzIHJvdW5kZWQgdG8gOSBiaXRzIGZvciBzdWNoIGkgdG8gZ2l2ZQorCSAqIGJldHRlciBhY2N1cmFjeSAodGhpcyB3b3JrcyBieSBpbXByb3ZpbmcgdGhlIGJvdW5kIG9uIHxkfCwKKwkgKiB3aGljaCBpbiB0dXJuIGFsbG93cyByb3VuZGluZyB0byA5IGJpdHMgaW4gbW9yZSBjYXNlcykuCisJICogVGhpcyBpcyBvbmx5IGltcG9ydGFudCB3aGVuIHRoZSBvcmlnaW5hbCB4IGlzIG5lYXIgMSAtLSBpdAorCSAqIGxldHMgdXMgYXZvaWQgdXNpbmcgYSBzcGVjaWFsIG1ldGhvZCB0byBnaXZlIHRoZSBkZXNpcmVkCisJICogYWNjdXJhY3kgZm9yIHN1Y2ggeC4KKwkgKi8KKwlpZiAoMCkKKwkJZCA9IHggKiBHKGkpIC0gMTsKKwllbHNlIHsKKyNpZmRlZiBVU0VfVVRBQgorCQlkID0gKHggLSBIKGkpKSAqIEcoaSkgKyBFKGkpOworI2Vsc2UKKwkJbG9uZyBkb3VibGUgeF9oaTsKKwkJZG91YmxlIHhfbG87CisKKwkJLyoKKwkJICogU3BsaXQgeCBpbnRvIHhfaGkgKyB4X2xvIHRvIGNhbGN1bGF0ZSB4KkcoaSktMSBleGFjdGx5LgorCQkgKiBHKGkpIGhhcyBhdCBtb3N0IDkgYml0cywgc28gdGhlIHNwbGl0dGluZyBwb2ludCBpcyBub3QKKwkJICogY3JpdGljYWwuCisJCSAqLworCQlJTlNFUlRfTERCTDEyOF9XT1JEUyh4X2hpLCAweDNmZmYsIGx4LAorCQkgICAgbGx4ICYgMHhmZmZmZmZmZmZmMDAwMDAwVUxMKTsKKwkJeF9sbyA9IHggLSB4X2hpOworCQlkID0geF9oaSAqIEcoaSkgLSAxICsgeF9sbyAqIEcoaSk7CisjZW5kaWYKKwl9CisKKwkvKgorCSAqIE91ciBhbGdvcml0aG0gZGVwZW5kcyBvbiBleGFjdCBjYW5jZWxsYXRpb24gb2YgRl9sbyhpKSBhbmQKKwkgKiBGX2hpKGkpIHdpdGggZGsqbG5fMl9sbyBhbmQgZGsqbG4yX2hpIHdoZW4gayBpcyAtMSBhbmQgaSBpcworCSAqIGF0IHRoZSBlbmQgb2YgdGhlIHRhYmxlLiAgVGhpcyBhbmQgb3RoZXIgdGVjaG5pY2FsIGNvbXBsaWNhdGlvbnMKKwkgKiBtYWtlIGl0IGRpZmZpY3VsdCB0byBhdm9pZCB0aGUgZG91YmxlIHNjYWxpbmcgaW4gKGRrKmxuMikgKgorCSAqIGxvZyhiYXNlKSBmb3IgYmFzZSAhPSBlIHdpdGhvdXQgbG9zaW5nIG1vcmUgYWNjdXJhY3kgYW5kL29yCisJICogZWZmaWNpZW5jeSB0aGFuIGlzIGdhaW5lZC4KKwkgKi8KKwkvKgorCSAqIFVzZSBkb3VibGUgcHJlY2lzaW9uIG9wZXJhdGlvbnMgd2hlcmV2ZXIgcG9zc2libGUsIHNpbmNlIGxvbmcKKwkgKiBkb3VibGUgb3BlcmF0aW9ucyBhcmUgZW11bGF0ZWQgYW5kIGFyZSB2ZXJ5IHNsb3cgb24gdGhlIG9ubHkKKwkgKiBrbm93biBtYWNoaW5lcyB0aGF0IHN1cHBvcnQgbGQxMjggKHNwYXJjNjQpLiAgQWxzbywgZG9uJ3QgdHJ5CisJICogdG8gaW1wcm92ZSBwYXJhbGxlbGlzbSBieSBpbmNyZWFzaW5nIHRoZSBudW1iZXIgb2Ygb3BlcmF0aW9ucywKKwkgKiBzaW5jZSBhbnkgcGFyYWxsZWxpc20gb24gc3VjaCBtYWNoaW5lcyBpcyBuZWVkZWQgZm9yIHRoZQorCSAqIGVtdWxhdGlvbi4gIEhvcm5lcidzIG1ldGhvZCBpcyBnb29kIGZvciB0aGlzLCBhbmQgaXMgYWxzbyBnb29kCisJICogZm9yIGFjY3VyYWN5LiAgSG9ybmVyJ3MgbWV0aG9kIGRvZXNuJ3QgaGFuZGxlIHRoZSBgbG8nIHRlcm0KKwkgKiB3ZWxsLCBlaXRoZXIgZm9yIGVmZmljaWVuY3kgb3IgYWNjdXJhY3kuICBIb3dldmVyLCBmb3IgYWNjdXJhY3kKKwkgKiB3ZSBldmFsdWF0ZSBkICogZCAqIFAyIHNlcGFyYXRlbHkgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YKKwkgKiBieSBQMiBiZWluZyBleGFjdCwgYW5kIHRoaXMgZ2l2ZXMgYSBnb29kIHBsYWNlIHRvIHN1bSB0aGUgJ2xvJworCSAqIHRlcm0gdG9vLgorCSAqLworCWRkID0gKGRvdWJsZSlkOworCXZhbF9sbyA9IGQgKiBkICogZCAqIChQMyArCisJICAgIGQgKiAoUDQgKyBkICogKFA1ICsgZCAqIChQNiArIGQgKiAoUDcgKyBkICogKFA4ICsKKwkgICAgZGQgKiAoUDkgKyBkZCAqIChQMTAgKyBkZCAqIChQMTEgKyBkZCAqIChQMTIgKyBkZCAqIChQMTMgKworCSAgICBkZCAqIFAxNCkpKSkpKSkpKSkpICsgKEZfbG8oaSkgKyBkayAqIGxuMl9sbykgKyBkICogZCAqIFAyOworCXZhbF9oaSA9IGQ7CisjaWZkZWYgREVCVUcKKwlpZiAoZmV0ZXN0ZXhjZXB0KEZFX1VOREVSRkxPVykpCisJCWJyZWFrcG9pbnQoKTsKKyNlbmRpZgorCisJXzNzdW1GKHZhbF9oaSwgdmFsX2xvLCBGX2hpKGkpICsgZGsgKiBsbjJfaGkpOworCVJFVFVSTjIocnAsIHZhbF9oaSwgdmFsX2xvKTsKK30KKworbG9uZyBkb3VibGUKK2xvZzFwbChsb25nIGRvdWJsZSB4KQoreworCWxvbmcgZG91YmxlIGQsIGRfaGksIGZfbG8sIHZhbF9oaSwgdmFsX2xvOworCWxvbmcgZG91YmxlIGZfaGksIHR3b3BtaW51c2s7CisJZG91YmxlIGRfbG8sIGRkLCBkazsKKwl1aW50NjRfdCBseCwgbGx4OworCWludCBpLCBrOworCWludDE2X3QgYXgsIGh4OworCisJRE9QUklOVF9TVEFSVCgmeCk7CisJRVhUUkFDVF9MREJMMTI4X1dPUkRTKGh4LCBseCwgbGx4LCB4KTsKKwlpZiAoaHggPCAweDNmZmYpIHsJCS8qIHggPCAxLCBvciB4IG5lZyBOYU4gKi8KKwkJYXggPSBoeCAmIDB4N2ZmZjsKKwkJaWYgKGF4ID49IDB4M2ZmZikgewkvKiB4IDw9IC0xLCBvciB4IG5lZyBOYU4gKi8KKwkJCWlmIChheCA9PSAweDNmZmYgJiYgKGx4IHwgbGx4KSA9PSAwKQorCQkJCVJFVFVSTlAoLTEgLyB6ZXJvKTsJLyogbG9nMXAoLTEpID0gLUluZiAqLworCQkJLyogbG9nMXAoeCA8IDEsIG9yIHggTmFOKSA9IHFOYU46ICovCisJCQlSRVRVUk5QKCh4IC0geCkgLyAoeCAtIHgpKTsKKwkJfQorCQlpZiAoYXggPD0gMHgzZjhkKSB7CS8qIHx4fCA8IDIqKi0xMTMgKi8KKwkJCWlmICgoaW50KXggPT0gMCkKKwkJCQlSRVRVUk5QKHgpOwkvKiB4IHdpdGggaW5leGFjdCBpZiB4ICE9IDAgKi8KKwkJfQorCQlmX2hpID0gMTsKKwkJZl9sbyA9IHg7CisJfSBlbHNlIGlmIChoeCA+PSAweDdmZmYpIHsJLyogeCArSW5mIG9yIG5vbi1uZWcgTmFOICovCisJCVJFVFVSTlAoeCArIHgpOwkJLyogbG9nMXAoSW5mIG9yIE5hTikgPSBJbmYgb3IgcU5hTiAqLworCX0gZWxzZSBpZiAoaHggPCAweDQwZTEpIHsJLyogMSA8PSB4IDwgMioqMjI2ICovCisJCWZfaGkgPSB4OworCQlmX2xvID0gMTsKKwl9IGVsc2UgewkJCS8qIDIqKjIyNiA8PSB4IDwgK0luZiAqLworCQlmX2hpID0geDsKKwkJZl9sbyA9IDA7CQkvKiBhdm9pZCB1bmRlcmZsb3cgb2YgdGhlIFAzIHRlcm0gKi8KKwl9CisJRU5URVJJKCk7CisJeCA9IGZfaGkgKyBmX2xvOworCWZfbG8gPSAoZl9oaSAtIHgpICsgZl9sbzsKKworCUVYVFJBQ1RfTERCTDEyOF9XT1JEUyhoeCwgbHgsIGxseCwgeCk7CisJayA9IC0xNjM4MzsKKworCWsgKz0gaHg7CisJZGsgPSBrOworCisJU0VUX0xEQkxfRVhQU0lHTih4LCAweDNmZmYpOworCXR3b3BtaW51c2sgPSAxOworCVNFVF9MREJMX0VYUFNJR04odHdvcG1pbnVzaywgMHg3ZmZlIC0gKGh4ICYgMHg3ZmZmKSk7CisJZl9sbyAqPSB0d29wbWludXNrOworCisJaSA9IChseCArICgxTEwgPDwgKEwySSAtIDIpKSkgPj4gKEwySSAtIDEpOworCisJLyoKKwkgKiB4KkcoaSktMSAod2l0aCBhIHJlZHVjZWQgeCkgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHksIGFzCisJICogYWJvdmUsIGJ1dCBub3cgd2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgcG9seW5vbWlhbCBvbiBkID0KKwkgKiAoeCtmX2xvKSpHKGkpLTEgYW5kIGV4dHJhIHByZWNpc2lvbiBpcyBuZWVkZWQgZm9yIHRoYXQuCisJICogU2luY2UgeCt4X2xvIGlzIGEgaGkrbG8gZGVjb21wb3NpdGlvbiBhbmQgc3VidHJhY3RpbmcgMQorCSAqIGRvZXNuJ3QgbG9zZSB0b28gbWFueSBiaXRzLCBhbiBpbmV4YWN0IGNhbGN1bGF0aW9uIGZvcgorCSAqIGZfbG8qRyhpKSBpcyBnb29kIGVub3VnaC4KKwkgKi8KKwlpZiAoMCkKKwkJZF9oaSA9IHggKiBHKGkpIC0gMTsKKwllbHNlIHsKKyNpZmRlZiBVU0VfVVRBQgorCQlkX2hpID0gKHggLSBIKGkpKSAqIEcoaSkgKyBFKGkpOworI2Vsc2UKKwkJbG9uZyBkb3VibGUgeF9oaTsKKwkJZG91YmxlIHhfbG87CisKKwkJSU5TRVJUX0xEQkwxMjhfV09SRFMoeF9oaSwgMHgzZmZmLCBseCwKKwkJICAgIGxseCAmIDB4ZmZmZmZmZmZmZjAwMDAwMFVMTCk7CisJCXhfbG8gPSB4IC0geF9oaTsKKwkJZF9oaSA9IHhfaGkgKiBHKGkpIC0gMSArIHhfbG8gKiBHKGkpOworI2VuZGlmCisJfQorCWRfbG8gPSBmX2xvICogRyhpKTsKKworCS8qCisJICogVGhpcyBpcyBfMnN1bUYoZF9oaSwgZF9sbykgaW5saW5lZC4gIFRoZSBjb25kaXRpb24KKwkgKiAoZF9oaSA9PSAwIHx8IHxkX2hpfCA+PSB8ZF9sb3wpIGZvciB1c2luZyBfMnN1bUYoKSBpcyBub3QKKwkgKiBhbHdheXMgc2F0aXNpZmVkLCBzbyBpdCBpcyBub3QgY2xlYXIgdGhhdCB0aGlzIHdvcmtzLCBidXQKKwkgKiBpdCB3b3JrcyBpbiBwcmFjdGljZS4gIEl0IHdvcmtzIGV2ZW4gaWYgaXQgZ2l2ZXMgYSB3cm9uZworCSAqIG5vcm1hbGl6ZWQgZF9sbywgc2luY2UgfGRfbG98ID4gfGRfaGl8IGltcGxpZXMgdGhhdCBpIGlzCisJICogbm9uemVybyBhbmQgZCBpcyB0aW55LCBzbyB0aGUgRihpKSB0ZXJtIGRvbWluYXRlcyBkX2xvLgorCSAqIEluIGZsb2F0IHByZWNpc2lvbjoKKwkgKiAoQnkgZXhoYXVzdGl2ZSB0ZXN0aW5nLCB0aGUgd29yc3QgY2FzZSBpcyBkX2hpID0gMHgxLmJwLTI1LgorCSAqIEFuZCBpZiBkIGlzIG9ubHkgYSBsaXR0bGUgdGluaWVyIHRoYW4gdGhhdCwgd2Ugd291bGQgaGF2ZQorCSAqIGFub3RoZXIgdW5kZXJmbG93IHByb2JsZW0gZm9yIHRoZSBQMyB0ZXJtOyB0aGlzIGlzIGFsc28gcnVsZWQKKwkgKiBvdXQgYnkgZXhoYXVzdGl2ZSB0ZXN0aW5nLikKKwkgKi8KKwlkID0gZF9oaSArIGRfbG87CisJZF9sbyA9IGRfaGkgLSBkICsgZF9sbzsKKwlkX2hpID0gZDsKKworCWRkID0gKGRvdWJsZSlkOworCXZhbF9sbyA9IGQgKiBkICogZCAqIChQMyArCisJICAgIGQgKiAoUDQgKyBkICogKFA1ICsgZCAqIChQNiArIGQgKiAoUDcgKyBkICogKFA4ICsKKwkgICAgZGQgKiAoUDkgKyBkZCAqIChQMTAgKyBkZCAqIChQMTEgKyBkZCAqIChQMTIgKyBkZCAqIChQMTMgKworCSAgICBkZCAqIFAxNCkpKSkpKSkpKSkpICsgKEZfbG8oaSkgKyBkayAqIGxuMl9sbyArIGRfbG8pICsgZCAqIGQgKiBQMjsKKwl2YWxfaGkgPSBkX2hpOworI2lmZGVmIERFQlVHCisJaWYgKGZldGVzdGV4Y2VwdChGRV9VTkRFUkZMT1cpKQorCQlicmVha3BvaW50KCk7CisjZW5kaWYKKworCV8zc3VtRih2YWxfaGksIHZhbF9sbywgRl9oaShpKSArIGRrICogbG4yX2hpKTsKKwlSRVRVUk4yUEkodmFsX2hpLCB2YWxfbG8pOworfQorCisjaWZkZWYgU1RSVUNUX1JFVFVSTgorCitsb25nIGRvdWJsZQorbG9nbChsb25nIGRvdWJsZSB4KQoreworCXN0cnVjdCBsZCByOworCisJRU5URVJJKCk7CisJRE9QUklOVF9TVEFSVCgmeCk7CisJa19sb2dsKHgsICZyKTsKKwlSRVRVUk5TUEkoJnIpOworfQorCisvKgorICogMjkrMTEzIGJpdCBkZWNvbXBvc2l0aW9ucy4gIFRoZSBiaXRzIGFyZSBkaXN0cmlidXRlZCBzbyB0aGF0IHRoZSBwcm9kdWN0cworICogb2YgdGhlIGhpIHRlcm1zIGFyZSBleGFjdCBpbiBkb3VibGUgcHJlY2lzaW9uLiAgVGhlIHR5cGVzIGFyZSBjaG9zZW4gc28KKyAqIHRoYXQgdGhlIHByb2R1Y3RzIG9mIHRoZSBoaSB0ZXJtcyBhcmUgZG9uZSBpbiBhdCBsZWFzdCBkb3VibGUgcHJlY2lzaW9uLAorICogd2l0aG91dCBhbnkgZXhwbGljaXQgY29udmVyc2lvbnMuICBNb3JlIG5hdHVyYWwgY2hvaWNlcyB3b3VsZCByZXF1aXJlIGEKKyAqIHNsb3cgbG9uZyBkb3VibGUgcHJlY2lzaW9uIG11bHRpcGxpY2F0aW9uLgorICovCitzdGF0aWMgY29uc3QgZG91YmxlCitpbnZsbjEwX2hpID0gIDQuMzQyOTQ0ODE3NjE3NTM1NmUtMSwJCS8qICAweDFiY2I3YjE1MDAwMDAwLjBwLTU0ICovCitpbnZsbjJfaGkgPSAgMS40NDI2OTUwNDAyNTU3ODUwZTA7CQkvKiAgMHgxNzE1NDc2NTAwMDAwMC4wcC01MiAqLworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCitpbnZsbjEwX2xvID0gIDEuNDE0OTgyNjg1Mzg1ODAwOTA3OTE2MDUwODIyOTQzOTcwMDBlLTEwTCwJLyogIDB4MTM3Mjg3MTk1MzU1YmFhYWZhZDMzZGMzMjNlZTMuMHAtMTQ1TCAqLworaW52bG4yX2xvID0gIDYuMzMxNzg0MTg5NTY2MDQzNjg1MDE4OTIxMzc0MjY2NDU5MTFlLTEwTDsJLyogIDB4MTVjMTdmMGJiYmU4N2ZlZDA2OTFkM2U4OGViNTcuMHAtMTQzTCAqLworCitsb25nIGRvdWJsZQorbG9nMTBsKGxvbmcgZG91YmxlIHgpCit7CisJc3RydWN0IGxkIHI7CisJbG9uZyBkb3VibGUgbG87CisJZmxvYXQgaGk7CisKKwlFTlRFUkkoKTsKKwlET1BSSU5UX1NUQVJUKCZ4KTsKKwlrX2xvZ2woeCwgJnIpOworCWlmICghci5sb19zZXQpCisJCVJFVFVSTlBJKHIuaGkpOworCV8yc3VtRihyLmhpLCByLmxvKTsKKwloaSA9IHIuaGk7CisJbG8gPSByLmxvICsgKHIuaGkgLSBoaSk7CisJUkVUVVJOMlBJKGludmxuMTBfaGkgKiBoaSwKKwkgICAgKGludmxuMTBfbG8gKyBpbnZsbjEwX2hpKSAqIGxvICsgaW52bG4xMF9sbyAqIGhpKTsKK30KKworbG9uZyBkb3VibGUKK2xvZzJsKGxvbmcgZG91YmxlIHgpCit7CisJc3RydWN0IGxkIHI7CisJbG9uZyBkb3VibGUgbG87CisJZmxvYXQgaGk7CisKKwlFTlRFUkkoKTsKKwlET1BSSU5UX1NUQVJUKCZ4KTsKKwlrX2xvZ2woeCwgJnIpOworCWlmICghci5sb19zZXQpCisJCVJFVFVSTlBJKHIuaGkpOworCV8yc3VtRihyLmhpLCByLmxvKTsKKwloaSA9IHIuaGk7CisJbG8gPSByLmxvICsgKHIuaGkgLSBoaSk7CisJUkVUVVJOMlBJKGludmxuMl9oaSAqIGhpLAorCSAgICAoaW52bG4yX2xvICsgaW52bG4yX2hpKSAqIGxvICsgaW52bG4yX2xvICogaGkpOworfQorCisjZW5kaWYgLyogU1RSVUNUX1JFVFVSTiAqLwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfbmFubC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2xkMTI4L3NfbmFubC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNzRhMTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vbGQxMjgvc19uYW5sLmMKQEAgLTAsMCArMSw0NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRGF2aWQgU2NodWx0egorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImZwbWF0aC5oIgorI2luY2x1ZGUgIi4uL3NyYy9tYXRoX3ByaXZhdGUuaCIKKworbG9uZyBkb3VibGUKK25hbmwoY29uc3QgY2hhciAqcykKK3sKKwl1bmlvbiB7CisJCXVuaW9uIElFRUVsMmJpdHMgaWVlZTsKKwkJdWludDMyX3QgYml0c1s0XTsKKwl9IHU7CisKKwlfc2Nhbl9uYW4odS5iaXRzLCA0LCBzKTsKKwl1LmllZWUuYml0cy5leHAgPSAweDdmZmY7CisJdS5pZWVlLmJpdHMubWFuaCB8PSAxVUxMIDw8IDQ3OwkvKiBtYWtlIGl0IGEgcXVpZXQgTmFOICovCisJcmV0dXJuICh1LmllZWUuZSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2hsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2hsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmYWViMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zaGwuYwpAQCAtMCwwICsxLDg5IEBACisvKiBmcm9tOiBGcmVlQlNEOiBoZWFkL2xpYi9tc3VuL3NyYy9lX2Fjb3NoLmMgMTc2NDUxIDIwMDgtMDItMjIgMDI6MzA6MzZaIGRhcyAqLworCisvKiBAKCMpZV9hY29zaC5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIFNlZSBlX2Fjb3NoLmMgZm9yIGNvbXBsZXRlIGNvbW1lbnRzLgorICoKKyAqIENvbnZlcnRlZCB0byBsb25nIGRvdWJsZSBieSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+IGFuZAorICogQnJ1Y2UgRC4gRXZhbnMuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaWZkZWYgX19pMzg2X18KKyNpbmNsdWRlIDxpZWVlZnAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisvKiBFWFBfTEFSR0UgaXMgdGhlIHRocmVzaG9sZCBhYm92ZSB3aGljaCB3ZSB1c2UgYWNvc2goeCkgfj0gbG9nKDJ4KS4gKi8KKyNpZiBMREJMX01BTlRfRElHID09IDY0CisjZGVmaW5lCUVYUF9MQVJHRQkzNAorI2VsaWYgTERCTF9NQU5UX0RJRyA9PSAxMTMKKyNkZWZpbmUJRVhQX0xBUkdFCTU4CisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBsb25nIGRvdWJsZSBmb3JtYXQiCisjZW5kaWYKKworI2lmIExEQkxfTUFYX0VYUCAhPSAweDQwMDAKKy8qIFdlIGFsc28gcmVxdWlyZSB0aGUgdXN1YWwgZXhwc2lnbiBlbmNvZGluZy4gKi8KKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKKyNkZWZpbmUJQklBUwkoTERCTF9NQVhfRVhQIC0gMSkKKworc3RhdGljIGNvbnN0IGRvdWJsZQorb25lCT0gMS4wOworCisjaWYgTERCTF9NQU5UX0RJRyA9PSA2NAorc3RhdGljIGNvbnN0IHVuaW9uIElFRUVsMmJpdHMKK3VfbG4yID0gIExEODBDKDB4YjE3MjE3ZjdkMWNmNzlhYywgLTEsIDYuOTMxNDcxODA1NTk5NDUzMDk0MTdlLTFMKTsKKyNkZWZpbmUJbG4yCXVfbG4yLmUKKyNlbGlmIExEQkxfTUFOVF9ESUcgPT0gMTEzCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK2xuMiA9ICA2LjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4ZS0xTDsJLyogMHgxNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNi4wcC0xMTMgKi8KKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIGxvbmcgZG91YmxlIGZvcm1hdCIKKyNlbmRpZgorCitsb25nIGRvdWJsZQorYWNvc2hsKGxvbmcgZG91YmxlIHgpCit7CisJbG9uZyBkb3VibGUgdDsKKwlpbnQxNl90IGh4OworCisJRU5URVJJKCk7CisJR0VUX0xEQkxfRVhQU0lHTihoeCwgeCk7CisJaWYgKGh4IDwgMHgzZmZmKSB7CQkvKiB4IDwgMSwgb3IgbWlzbm9ybWFsICovCisJICAgIFJFVFVSTkkoKHgteCkvKHgteCkpOworCX0gZWxzZSBpZiAoaHggPj0gQklBUyArIEVYUF9MQVJHRSkgeyAvKiB4ID49IExBUkdFICovCisJICAgIGlmIChoeCA+PSAweDdmZmYpIHsJCS8qIHggaXMgaW5mLCBOYU4gb3IgbWlzbm9ybWFsICovCisJICAgICAgICBSRVRVUk5JKHgreCk7CisJICAgIH0gZWxzZQorCQlSRVRVUk5JKGxvZ2woeCkrbG4yKTsJLyogYWNvc2goaHVnZSk9bG9nKDJ4KSwgb3IgbWlzbm9ybWFsICovCisJfSBlbHNlIGlmIChoeCA9PSAweDNmZmYgJiYgeCA9PSAxKSB7CisJICAgIFJFVFVSTkkoMC4wKTsJCS8qIGFjb3NoKDEpID0gMCAqLworCX0gZWxzZSBpZiAoaHggPj0gMHg0MDAwKSB7CS8qIExBUkdFID4geCA+PSAyLCBvciBtaXNub3JtYWwgKi8KKwkgICAgdD14Kng7CisJICAgIFJFVFVSTkkobG9nbCgyLjAqeC1vbmUvKHgrc3FydGwodC1vbmUpKSkpOworCX0gZWxzZSB7CQkJLyogMTx4PDIgKi8KKwkgICAgdCA9IHgtb25lOworCSAgICBSRVRVUk5JKGxvZzFwbCh0K3NxcnRsKDIuMCp0K3QqdCkpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbmhsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbmhsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4ODQyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hdGFuaGwuYwpAQCAtMCwwICsxLDc0IEBACisvKiBmcm9tOiBGcmVlQlNEOiBoZWFkL2xpYi9tc3VuL3NyYy9lX2F0YW5oLmMgMTc2NDUxIDIwMDgtMDItMjIgMDI6MzA6MzZaIGRhcyAqLworCisvKiBAKCMpZV9hdGFuaC5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIFNlZSBlX2F0YW5oLmMgZm9yIGNvbXBsZXRlIGNvbW1lbnRzLgorICoKKyAqIENvbnZlcnRlZCB0byBsb25nIGRvdWJsZSBieSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+IGFuZAorICogQnJ1Y2UgRC4gRXZhbnMuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaWZkZWYgX19pMzg2X18KKyNpbmNsdWRlIDxpZWVlZnAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisvKiBFWFBfVElOWSBpcyB0aGUgdGhyZXNob2xkIGJlbG93IHdoaWNoIHdlIHVzZSBhdGFuaCh4KSB+PSB4LiAqLworI2lmIExEQkxfTUFOVF9ESUcgPT0gNjQKKyNkZWZpbmUJRVhQX1RJTlkJLTM0CisjZWxpZiBMREJMX01BTlRfRElHID09IDExMworI2RlZmluZQlFWFBfVElOWQktNTgKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIGxvbmcgZG91YmxlIGZvcm1hdCIKKyNlbmRpZgorCisjaWYgTERCTF9NQVhfRVhQICE9IDB4NDAwMAorLyogV2UgYWxzbyByZXF1aXJlIHRoZSB1c3VhbCBleHBzaWduIGVuY29kaW5nLiAqLworI2Vycm9yICJVbnN1cHBvcnRlZCBsb25nIGRvdWJsZSBmb3JtYXQiCisjZW5kaWYKKworI2RlZmluZQlCSUFTCShMREJMX01BWF9FWFAgLSAxKQorCitzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMCwgaHVnZSA9IDFlMzAwOworc3RhdGljIGNvbnN0IGRvdWJsZSB6ZXJvID0gMC4wOworCitsb25nIGRvdWJsZQorYXRhbmhsKGxvbmcgZG91YmxlIHgpCit7CisJbG9uZyBkb3VibGUgdDsKKwl1aW50MTZfdCBoeCwgaXg7CisKKwlFTlRFUkkoKTsKKwlHRVRfTERCTF9FWFBTSUdOKGh4LCB4KTsKKwlpeCA9IGh4ICYgMHg3ZmZmOworCWlmIChpeCA+PSAweDNmZmYpCQkvKiB8eHwgPj0gMSwgb3IgTmFOIG9yIG1pc25vcm1hbCAqLworCSAgICBSRVRVUk5JKGZhYnNsKHgpID09IDEgPyB4IC8gemVybyA6ICh4IC0geCkgLyAoeCAtIHgpKTsKKwlpZiAoaXggPCBCSUFTICsgRVhQX1RJTlkgJiYgKGh1Z2UgKyB4KSA+IHplcm8pCisJICAgIFJFVFVSTkkoeCk7CQkJLyogeCBpcyB0aW55ICovCisJU0VUX0xEQkxfRVhQU0lHTih4LCBpeCk7CisJaWYgKGl4IDwgMHgzZmZlKSB7CQkvKiB8eHwgPCAwLjUsIG9yIG1pc25vcm1hbCAqLworCSAgICB0ID0geCt4OworCSAgICB0ID0gMC41KmxvZzFwbCh0K3QqeC8ob25lLXgpKTsKKwl9IGVsc2UKKwkgICAgdCA9IDAuNSpsb2cxcGwoKHgreCkvKG9uZS14KSk7CisJUkVUVVJOSSgoaHggJiAweDgwMDApID09IDAgPyB0IDogLXQpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9pbXByZWNpc2UuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvaW1wcmVjaXNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1MDNiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvaW1wcmVjaXNlLmMKQEAgLTAsMCArMSw2OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgRGF2aWQgQ2hpc25hbGwKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisvKgorICogSWYgbG9uZyBkb3VibGUgaXMgbm90IHRoZSBzYW1lIHNpemUgYXMgZG91YmxlLCB0aGVuIHRoZXNlIHdpbGwgbG9zZQorICogcHJlY2lzaW9uIGFuZCB3ZSBzaG91bGQgZW1pdCBhIHdhcm5pbmcgd2hlbmV2ZXIgc29tZXRoaW5nIGxpbmtzIGFnYWluc3QKKyAqIHRoZW0uCisgKi8KKyNpZiAoTERCTF9NQU5UX0RJRyA+IDUzKQorI2RlZmluZSBXQVJOX0lNUFJFQ0lTRSh4KSBcCisJX193YXJuX3JlZmVyZW5jZXMoeCwgIyB4ICIgaGFzIGxvd2VyIHRoYW4gYWR2ZXJ0aXNlZCBwcmVjaXNpb24iKTsKKyNlbHNlCisjZGVmaW5lIFdBUk5fSU1QUkVDSVNFKHgpCisjZW5kaWYKKy8qCisgKiBEZWNsYXJlIHRoZSBmdW5jdGlvbnMgYXMgd2VhayB2YXJpYW50cyBzbyB0aGF0IG90aGVyIGxpYnJhcmllcyBwcm92aWRpbmcKKyAqIHJlYWwgdmVyc2lvbnMgY2FuIG92ZXJyaWRlIHRoZW0uCisgKi8KKyNkZWZpbmUJREVDTEFSRV9XRUFLKHgpXAorCV9fd2Vha19yZWZlcmVuY2UoaW1wcmVjaXNlXyMjIHgsIHgpO1wKKwlXQVJOX0lNUFJFQ0lTRSh4KQorCitsb25nIGRvdWJsZQoraW1wcmVjaXNlX3Bvd2wobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKK3sKKworCXJldHVybiBwb3coeCwgeSk7Cit9CitERUNMQVJFX1dFQUsocG93bCk7CisKKyNkZWZpbmUgREVDTEFSRV9JTVBSRUNJU0UoZikgXAorCWxvbmcgZG91YmxlIGltcHJlY2lzZV8gIyMgZiAjIyBsKGxvbmcgZG91YmxlIHYpIHsgcmV0dXJuIGYodik7IH1cCisJREVDTEFSRV9XRUFLKGYgIyMgbCkKKworREVDTEFSRV9JTVBSRUNJU0UoY29zaCk7CitERUNMQVJFX0lNUFJFQ0lTRShlcmZjKTsKK0RFQ0xBUkVfSU1QUkVDSVNFKGVyZik7CitERUNMQVJFX0lNUFJFQ0lTRShsZ2FtbWEpOworREVDTEFSRV9JTVBSRUNJU0Uoc2luaCk7CitERUNMQVJFX0lNUFJFQ0lTRSh0YW5oKTsKK0RFQ0xBUkVfSU1QUkVDSVNFKHRnYW1tYSk7CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL21hdGhfcHJpdmF0ZS5oIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9tYXRoX3ByaXZhdGUuaAppbmRleCA4ZWJjN2ZiLi44YWYyYzY1IDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL21hdGhfcHJpdmF0ZS5oCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvbWF0aF9wcml2YXRlLmgKQEAgLTM5LDcgKzM5LDcgQEAKICAqLwogCiAjaWZkZWYgX19hcm1fXwotI2lmIGRlZmluZWQoX19WRlBfRlBfXykKKyNpZiBkZWZpbmVkKF9fVkZQX0ZQX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQogI2RlZmluZQlJRUVFX1dPUkRfT1JERVIJQllURV9PUkRFUgogI2Vsc2UKICNkZWZpbmUJSUVFRV9XT1JEX09SREVSCUJJR19FTkRJQU4KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19hc2luaGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19hc2luaGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTI4ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2FzaW5obC5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIGZyb206IEZyZWVCU0Q6IGhlYWQvbGliL21zdW4vc3JjL2VfYWNvc2guYyAxNzY0NTEgMjAwOC0wMi0yMiAwMjozMDozNlogZGFzICovCisKKy8qIEAoIylzX2FzaW5oLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIFNlZSBzX2FzaW5oLmMgZm9yIGNvbXBsZXRlIGNvbW1lbnRzLgorICoKKyAqIENvbnZlcnRlZCB0byBsb25nIGRvdWJsZSBieSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+IGFuZAorICogQnJ1Y2UgRC4gRXZhbnMuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaWZkZWYgX19pMzg2X18KKyNpbmNsdWRlIDxpZWVlZnAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisvKiBFWFBfTEFSR0UgaXMgdGhlIHRocmVzaG9sZCBhYm92ZSB3aGljaCB3ZSB1c2UgYXNpbmgoeCkgfj0gbG9nKDJ4KS4gKi8KKy8qIEVYUF9USU5ZIGlzIHRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggd2UgdXNlIGFzaW5oKHgpIH49IHguICovCisjaWYgTERCTF9NQU5UX0RJRyA9PSA2NAorI2RlZmluZQlFWFBfTEFSR0UJMzQKKyNkZWZpbmUJRVhQX1RJTlkJLTM0CisjZWxpZiBMREJMX01BTlRfRElHID09IDExMworI2RlZmluZQlFWFBfTEFSR0UJNTgKKyNkZWZpbmUJRVhQX1RJTlkJLTU4CisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBsb25nIGRvdWJsZSBmb3JtYXQiCisjZW5kaWYKKworI2lmIExEQkxfTUFYX0VYUCAhPSAweDQwMDAKKy8qIFdlIGFsc28gcmVxdWlyZSB0aGUgdXN1YWwgZXhwc2lnbiBlbmNvZGluZy4gKi8KKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKKyNkZWZpbmUJQklBUwkoTERCTF9NQVhfRVhQIC0gMSkKKworc3RhdGljIGNvbnN0IGRvdWJsZQorb25lID0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAvKiAweDNGRjAwMDAwLCAweDAwMDAwMDAwICovCitodWdlPSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMzAwOworCisjaWYgTERCTF9NQU5UX0RJRyA9PSA2NAorc3RhdGljIGNvbnN0IHVuaW9uIElFRUVsMmJpdHMKK3VfbG4yID0gIExEODBDKDB4YjE3MjE3ZjdkMWNmNzlhYywgLTEsIDYuOTMxNDcxODA1NTk5NDUzMDk0MTdlLTFMKTsKKyNkZWZpbmUJbG4yCXVfbG4yLmUKKyNlbGlmIExEQkxfTUFOVF9ESUcgPT0gMTEzCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK2xuMiA9ICA2LjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4ZS0xTDsJLyogMHgxNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNi4wcC0xMTMgKi8KKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIGxvbmcgZG91YmxlIGZvcm1hdCIKKyNlbmRpZgorCitsb25nIGRvdWJsZQorYXNpbmhsKGxvbmcgZG91YmxlIHgpCit7CisJbG9uZyBkb3VibGUgdCwgdzsKKwl1aW50MTZfdCBoeCwgaXg7CisKKwlFTlRFUkkoKTsKKwlHRVRfTERCTF9FWFBTSUdOKGh4LCB4KTsKKwlpeCA9IGh4ICYgMHg3ZmZmOworCWlmIChpeCA+PSAweDdmZmYpIFJFVFVSTkkoeCt4KTsJLyogeCBpcyBpbmYsIE5hTiBvciBtaXNub3JtYWwgKi8KKwlpZiAoaXggPCBCSUFTICsgRVhQX1RJTlkpIHsJLyogfHh8IDwgVElOWSwgb3IgbWlzbm9ybWFsICovCisJICAgIGlmIChodWdlICsgeCA+IG9uZSkgUkVUVVJOSSh4KTsJLyogcmV0dXJuIHggaW5leGFjdCBleGNlcHQgMCAqLworCX0KKwlpZiAoaXggPj0gQklBUyArIEVYUF9MQVJHRSkgewkvKiB8eHwgPj0gTEFSR0UsIG9yIG1pc25vcm1hbCAqLworCSAgICB3ID0gbG9nbChmYWJzbCh4KSkrbG4yOworCX0gZWxzZSBpZiAoaXggPj0gMHg0MDAwKSB7CS8qIExBUkdFID4gfHh8ID49IDIuMCwgb3IgbWlzbm9ybWFsICovCisJICAgIHQgPSBmYWJzbCh4KTsKKwkgICAgdyA9IGxvZ2woMi4wKnQrb25lLyhzcXJ0bCh4Kngrb25lKSt0KSk7CisJfSBlbHNlIHsJCS8qIDIuMCA+IHx4fCA+PSBUSU5ZLCBvciBtaXNub3JtYWwgKi8KKwkgICAgdCA9IHgqeDsKKwkgICAgdyA9bG9nMXBsKGZhYnNsKHgpK3QvKG9uZStzcXJ0bChvbmUrdCkpKTsKKwl9CisJUkVUVVJOSSgoaHggJiAweDgwMDApID09IDAgPyB3IDogLXcpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2VyZmYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19lcmZmLmMKaW5kZXggYTQ0ZTEzNS4uYTM1NzlmMSAxMDA2NDQKLS0tIGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2VyZmYuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXJmZi5jCkBAIC0yNCw3NSArMjQsNTkgQEAKIGhhbGY9ICA1LjAwMDAwMDAwMDBlLTAxLCAvKiAweDNGMDAwMDAwICovCiBvbmUgPSAgMS4wMDAwMDAwMDAwZSswMCwgLyogMHgzRjgwMDAwMCAqLwogdHdvID0gIDIuMDAwMDAwMDAwMGUrMDAsIC8qIDB4NDAwMDAwMDAgKi8KLQkvKiBjID0gKHN1YmZsb2F0KTAuODQ1MDYyOTExNTEgKi8KLWVyeCA9ICA4LjQ1MDYyOTExNTFlLTAxLCAvKiAweDNmNTg1NjBiICovCiAvKgogICogQ29lZmZpY2llbnRzIGZvciBhcHByb3hpbWF0aW9uIHRvICBlcmYgb24gWzAsMC44NDM3NV0KICAqLwogZWZ4ID0gIDEuMjgzNzkxNjYxM2UtMDEsIC8qIDB4M2UwMzc1ZDQgKi8KIGVmeDg9ICAxLjAyNzAzMzMyOTBlKzAwLCAvKiAweDNmODM3NWQ0ICovCi1wcDAgID0gIDEuMjgzNzkxNjYxM2UtMDEsIC8qIDB4M2UwMzc1ZDQgKi8KLXBwMSAgPSAtMy4yNTA0MjA5ODc2ZS0wMSwgLyogMHhiZWE2NmJlYiAqLwotcHAyICA9IC0yLjg0ODE3NDk4MThlLTAyLCAvKiAweGJjZTk1MjhmICovCi1wcDMgID0gLTUuNzcwMjcwMjQ3MGUtMDMsIC8qIDB4YmJiZDE0ODkgKi8KLXBwNCAgPSAtMi4zNzYzMDE3NDUyZS0wNSwgLyogMHhiN2M3NTZiMSAqLwotcXExICA9ICAzLjk3OTE3MjExMDZlLTAxLCAvKiAweDNlY2JiYmNlICovCi1xcTIgID0gIDYuNTAyMjI1MjUwMGUtMDIsIC8qIDB4M2Q4NTJhNjMgKi8KLXFxMyAgPSAgNS4wODEzMDYyMTE3ZS0wMywgLyogMHgzYmE2ODExNiAqLwotcXE0ICA9ICAxLjMyNDk0NzM3MDRlLTA0LCAvKiAweDM5MGFlZTQ5ICovCi1xcTUgID0gLTMuOTYwMjI4MjQxM2UtMDYsIC8qIDB4YjY4NGUyMWEgKi8KIC8qCi0gKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZiAgaW4gWzAuODQzNzUsMS4yNV0KKyAqICBEb21haW4gWzAsIDAuODQzNzVdLCByYW5nZSB+Wy01LjQ0NDZlLTEwLDUuNTE5N2UtMTBdOgorICogIHwoZXJmKHgpIC0geCkveCAtIHAoeCkvcSh4KXwgPCAyKiotMzEuCiAgKi8KLXBhMCAgPSAtMi4zNjIxMTg1NjgzZS0wMywgLyogMHhiYjFhY2RjNiAqLwotcGExICA9ICA0LjE0ODU2MTA2MDRlLTAxLCAvKiAweDNlZDQ2ODA1ICovCi1wYTIgID0gLTMuNzIyMDc4ODAwMmUtMDEsIC8qIDB4YmViZTkyMDggKi8KLXBhMyAgPSAgMy4xODM0NjYxOTYxZS0wMSwgLyogMHgzZWEyZmU1NCAqLwotcGE0ICA9IC0xLjEwODk0Njk0OTJlLTAxLCAvKiAweGJkZTMxY2MyICovCi1wYTUgID0gIDMuNTQ3ODMwNTA3MmUtMDIsIC8qIDB4M2QxMTUxYjMgKi8KLXBhNiAgPSAtMi4xNjYzNzU1MTc4ZS0wMywgLyogMHhiYjBkZjljMCAqLwotcWExICA9ICAxLjA2NDIwODgyMDVlLTAxLCAvKiAweDNkZDlmMzMxICovCi1xYTIgID0gIDUuNDAzOTc5NDIwN2UtMDEsIC8qIDB4M2YwYTU3ODUgKi8KLXFhMyAgPSAgNy4xODI4NjU1ODk5ZS0wMiwgLyogMHgzZDkzMWFlNyAqLwotcWE0ICA9ICAxLjI2MTcxMjE2MzdlLTAxLCAvKiAweDNlMDEzMzA3ICovCi1xYTUgID0gIDEuMzYzNzA4MzU4M2UtMDIsIC8qIDB4M2M1ZjZlMTMgKi8KLXFhNiAgPSAgMS4xOTg0NTAwMTAzZS0wMiwgLyogMHgzYzQ0NWFhMyAqLworcHAwICA9ICAxLjI4Mzc5MTY2ZS0wMUYsIC8qICAweDEuMDZlYmE4cC0zICovCitwcDEgID0gLTMuMzYwMzAzOTRlLTAxRiwgLyogLTB4MS41ODE4NWFwLTIgKi8KK3BwMiAgPSAtMS44NjI2MDIxOWUtMDNGLCAvKiAtMHgxLmU4NDUxZXAtMTAgKi8KK3FxMSAgPSAgMy4xMjMyNDI4NmUtMDFGLCAvKiAgMHgxLjNmZDFmMHAtMiAqLworcXEyICA9ICAyLjE2MDcwMzAyZS0wMkYsIC8qICAweDEuNjIwMjc0cC02ICovCitxcTMgID0gLTEuOTg4NTk0MTllLTAzRiwgLyogLTB4MS4wNGE2MjZwLTkgKi8KIC8qCi0gKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZmMgaW4gWzEuMjUsMS8wLjM1XQorICogRG9tYWluIFswLjg0Mzc1LCAxLjI1XSwgcmFuZ2UgflstMS45NTNlLTExLDEuOTQwZS0xMV06CisgKiB8KGVyZih4KSAtIGVyeCkgLSBwKHgpL3EoeCl8IDwgMioqLTM2LgogICovCi1yYTAgID0gLTkuODY0OTQ0MDMzM2UtMDMsIC8qIDB4YmMyMWEwOTMgKi8KLXJhMSAgPSAtNi45Mzg1ODU2MzkwZS0wMSwgLyogMHhiZjMxYTBiNyAqLwotcmEyICA9IC0xLjA1NTg2MjYxNzVlKzAxLCAvKiAweGMxMjhmMDIyICovCi1yYTMgID0gLTYuMjM3NTMzMTg3OWUrMDEsIC8qIDB4YzI3OTgwNTcgKi8KLXJhNCAgPSAtMS42MjM5NjY2NzQ4ZSswMiwgLyogMHhjMzIyNjU4YyAqLwotcmE1ICA9IC0xLjg0NjA1MDg3MjhlKzAyLCAvKiAweGMzMzg5YWU3ICovCi1yYTYgID0gLTguMTI4NzQzNzQzOWUrMDEsIC8qIDB4YzJhMjkzMmIgKi8KLXJhNyAgPSAtOS44MTQzMjkxNDczZSswMCwgLyogMHhjMTFkMDc3ZSAqLwotc2ExICA9ICAxLjk2NTEyNzE4MjBlKzAxLCAvKiAweDQxOWQzNWNlICovCi1zYTIgID0gIDEuMzc2NTc3NjA2MmUrMDIsIC8qIDB4NDMwOWE4NjMgKi8KLXNhMyAgPSAgNC4zNDU2NTg4NzQ1ZSswMiwgLyogMHg0M2Q5NDg2ZiAqLwotc2E0ICA9ICA2LjQ1Mzg3MjY4MDdlKzAyLCAvKiAweDQ0MjE1OGM5ICovCi1zYTUgID0gIDQuMjkwMDgxNDgxOWUrMDIsIC8qIDB4NDNkNjgxMGIgKi8KLXNhNiAgPSAgMS4wODYzNTAwMjE0ZSswMiwgLyogMHg0MmQ5NDUxZiAqLwotc2E3ICA9ICA2LjU3MDI0OTU1NzVlKzAwLCAvKiAweDQwZDIzZjdjICovCi1zYTggID0gLTYuMDQyNDQxMzUzMmUtMDIsIC8qIDB4YmQ3NzdmOTcgKi8KK2VyeCAgPSAgOC40MjY5NzE0NGUtMDFGLCAvKiAgMHgxLmFmNzYwMHAtMS4gIGVyZigxKSByb3VuZGVkIHRvIDE2IGJpdHMuICovCitwYTAgID0gIDMuNjQ5MzkxMzdlLTA2RiwgLyogIDB4MS5lOWQwMjJwLTE5ICovCitwYTEgID0gIDQuMTUxMDk2OTRlLTAxRiwgLyogIDB4MS5hOTEyODRwLTIgKi8KK3BhMiAgPSAtMS42NTE3OTkzOGUtMDFGLCAvKiAtMHgxLjUyNDlkY3AtMyAqLworcGEzICA9ICAxLjEwOTE0NDkxZS0wMUYsIC8qICAweDEuYzY0ZTQ2cC00ICovCitxYTEgID0gIDYuMDIwNzQzODVlLTAxRiwgLyogIDB4MS4zNDQzMThwLTEgKi8KK3FhMiAgPSAgNS4zNTkzNDY4N2UtMDFGLCAvKiAgMHgxLjEyNjYwOHAtMSAqLworcWEzICA9ICAxLjY4NTc2MTA2ZS0wMUYsIC8qICAweDEuNTkzZTZlcC0zICovCitxYTQgID0gIDUuNjIxODEyMTJlLTAyRiwgLyogIDB4MS5jYzg5ZjJwLTUgKi8KIC8qCi0gKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZmMgaW4gWzEvLjM1LDI4XQorICogRG9tYWluIFsxLjI1LDEvMC4zNV0sIHJhbmdlIH5bLTcuMDQzZS0xMCw3LjQ1N2UtMTBdOgorICogfGxvZyh4KmVyZmMoeCkpICsgeCoqMiArIDAuNTYyNSAtIHIoeCkvcyh4KXwgPCAyKiotMzAKICAqLwotcmIwICA9IC05Ljg2NDk0MzEwMjBlLTAzLCAvKiAweGJjMjFhMDkyICovCi1yYjEgID0gLTcuOTkyODMyNjYwN2UtMDEsIC8qIDB4YmY0YzlkZDQgKi8KLXJiMiAgPSAtMS43NzU3OTU1NTUxZSswMSwgLyogMHhjMThlMTA0YiAqLwotcmIzICA9IC0xLjYwNjM2MzgzMDZlKzAyLCAvKiAweGMzMjBhMmVhICovCi1yYjQgID0gLTYuMzc1NjY0NjcyOWUrMDIsIC8qIDB4YzQxZjY0NDEgKi8KLXJiNSAgPSAtMS4wMjUwOTUwOTI4ZSswMywgLyogMHhjNDgwMjMwYiAqLwotcmI2ICA9IC00LjgzNTE5MTk1NTZlKzAyLCAvKiAweGMzZjFjMjc1ICovCi1zYjEgID0gIDMuMDMzODA2MDM3OWUrMDEsIC8qIDB4NDFmMmI0NTkgKi8KLXNiMiAgPSAgMy4yNTc5MjUxMDk5ZSswMiwgLyogMHg0M2EyZTU3MSAqLwotc2IzICA9ICAxLjUzNjcyOTYxNDNlKzAzLCAvKiAweDQ0YzAxNzU5ICovCi1zYjQgID0gIDMuMTk5ODU4MTU0M2UrMDMsIC8qIDB4NDU0N2ZkYmIgKi8KLXNiNSAgPSAgMi41NTMwNTAyOTMwZSswMywgLyogMHg0NTFmOTBjZSAqLwotc2I2ICA9ICA0Ljc0NTI4NTMzOTRlKzAyLCAvKiAweDQzZWQ0M2E3ICovCi1zYjcgID0gLTIuMjQ0MDk1MjMwMWUrMDE7IC8qIDB4YzFiMzg3MTIgKi8KK3JhMCAgPSAtOS44NzEzMjczMmUtMDNGLCAvKiAtMHgxLjQzNzZiMnAtNyAqLworcmExICA9IC01LjUzNjA1OTE0ZS0wMUYsIC8qIC0weDEuMWI3MjNjcC0xICovCityYTIgID0gLTIuMTc1ODkxODhlKzAwRiwgLyogLTB4MS4xNjgzYTBwKzEgKi8KK3JhMyAgPSAtMS40MzI2ODA4NWUrMDBGLCAvKiAtMHgxLjZlYzQyY3ArMCAqLworc2ExICA9ICA1LjQ1OTk1NDI2ZSswMEYsIC8qICAweDEuNWQ2ZmU0cCsyICovCitzYTIgID0gIDYuNjk3OTgwODhlKzAwRiwgLyogIDB4MS5hY2FiYjhwKzIgKi8KK3NhMyAgPSAgMS40MzExMzA4OWUrMDBGLCAvKiAgMHgxLjZlNWU5OHArMCAqLworc2E0ICA9IC01Ljc3Mzk3NDk2ZS0wMkYsIC8qIC0weDEuZDkwMTA4cC01ICovCisvKgorICogRG9tYWluIFsxLzAuMzUsIDExXSwgcmFuZ2UgflstMi4yNjRlLTEzLDIuMzM2ZS0xM106CisgKiB8bG9nKHgqZXJmYyh4KSkgKyB4KioyICsgMC41NjI1IC0gcih4KS9zKHgpfCA8IDIqKi00MgorICovCityYjAgID0gLTkuODY0OTQzMTBlLTAzRiwgLyogLTB4MS40MzQxMjRwLTcgKi8KK3JiMSAgPSAtNi4yNTE3MTI0NGUtMDFGLCAvKiAtMHgxLjQwMTY3MnAtMSAqLworcmIyICA9IC02LjE2NDk4MzI3ZSswMEYsIC8qIC0weDEuOGE4ZjE2cCsyICovCityYjMgID0gLTEuNjY2OTY4NzNlKzAxRiwgLyogLTB4MS4wYWI3MGFwKzQgKi8KK3JiNCAgPSAtOS41Mzc2NDM0M2UrMDBGLCAvKiAtMHgxLjMxMzQ2MHArMyAqLworc2IxICA9ICAxLjI2ODg0ODk5ZSswMUYsIC8qICAweDEuOTYwODFjcCszICovCitzYjIgID0gIDQuNTE4Mzk1MjNlKzAxRiwgLyogIDB4MS42OTc4YmNwKzUgKi8KK3NiMyAgPSAgNC43MjgxMDIxMWUrMDFGLCAvKiAgMHgxLjdhM2Y4OHArNSAqLworc2I0ICA9ICA4LjkzMDMzMzE0ZSswMEY7IC8qICAweDEuMWRjNTRhcCszICovCiAKIGZsb2F0CiBlcmZmKGZsb2F0IHgpCkBAIC0xMDcsNDMgKzkxLDM3IEBACiAJfQogCiAJaWYoaXggPCAweDNmNTgwMDAwKSB7CQkvKiB8eHw8MC44NDM3NSAqLwotCSAgICBpZihpeCA8IDB4MzE4MDAwMDApIHsgCS8qIHx4fDwyKiotMjggKi8KLQkgICAgICAgIGlmIChpeCA8IDB4MDQwMDAwMDApCi0JCSAgICAvKmF2b2lkIHVuZGVyZmxvdyAqLwotCQkgICAgcmV0dXJuIChmbG9hdCkwLjEyNSooKGZsb2F0KTguMCp4K2VmeDgqeCk7CisJICAgIGlmKGl4IDwgMHgzODgwMDAwMCkgeyAJLyogfHh8PDIqKi0xNCAqLworCSAgICAgICAgaWYgKGl4IDwgMHgwNDAwMDAwMCkJLyogfHh8PDB4MXAtMTE5ICovCisJCSAgICByZXR1cm4gKDgqeCtlZng4KngpLzg7CS8qIGF2b2lkIHNwdXJpb3VzIHVuZGVyZmxvdyAqLwogCQlyZXR1cm4geCArIGVmeCp4OwogCSAgICB9CiAJICAgIHogPSB4Kng7Ci0JICAgIHIgPSBwcDAreioocHAxK3oqKHBwMit6KihwcDMreipwcDQpKSk7Ci0JICAgIHMgPSBvbmUreioocXExK3oqKHFxMit6KihxcTMreioocXE0K3oqcXE1KSkpKTsKKwkgICAgciA9IHBwMCt6KihwcDEreipwcDIpOworCSAgICBzID0gb25lK3oqKHFxMSt6KihxcTIreipxcTMpKTsKIAkgICAgeSA9IHIvczsKIAkgICAgcmV0dXJuIHggKyB4Knk7CiAJfQogCWlmKGl4IDwgMHgzZmEwMDAwMCkgewkJLyogMC44NDM3NSA8PSB8eHwgPCAxLjI1ICovCiAJICAgIHMgPSBmYWJzZih4KS1vbmU7Ci0JICAgIFAgPSBwYTArcyoocGExK3MqKHBhMitzKihwYTMrcyoocGE0K3MqKHBhNStzKnBhNikpKSkpOwotCSAgICBRID0gb25lK3MqKHFhMStzKihxYTIrcyoocWEzK3MqKHFhNCtzKihxYTUrcypxYTYpKSkpKTsKKwkgICAgUCA9IHBhMCtzKihwYTErcyoocGEyK3MqcGEzKSk7CisJICAgIFEgPSBvbmUrcyoocWExK3MqKHFhMitzKihxYTMrcypxYTQpKSk7CiAJICAgIGlmKGh4Pj0wKSByZXR1cm4gZXJ4ICsgUC9ROyBlbHNlIHJldHVybiAtZXJ4IC0gUC9ROwogCX0KLQlpZiAoaXggPj0gMHg0MGMwMDAwMCkgewkJLyogaW5mPnx4fD49NiAqLworCWlmIChpeCA+PSAweDQwODAwMDAwKSB7CQkvKiBpbmY+fHh8Pj00ICovCiAJICAgIGlmKGh4Pj0wKSByZXR1cm4gb25lLXRpbnk7IGVsc2UgcmV0dXJuIHRpbnktb25lOwogCX0KIAl4ID0gZmFic2YoeCk7CiAgCXMgPSBvbmUvKHgqeCk7CiAJaWYoaXg8IDB4NDAzNkRCNkUpIHsJLyogfHh8IDwgMS8wLjM1ICovCi0JICAgIFI9cmEwK3MqKHJhMStzKihyYTIrcyoocmEzK3MqKHJhNCtzKigKLQkJCQlyYTUrcyoocmE2K3MqcmE3KSkpKSkpOwotCSAgICBTPW9uZStzKihzYTErcyooc2EyK3MqKHNhMytzKihzYTQrcyooCi0JCQkJc2E1K3MqKHNhNitzKihzYTcrcypzYTgpKSkpKSkpOworCSAgICBSPXJhMCtzKihyYTErcyoocmEyK3MqcmEzKSk7CisJICAgIFM9b25lK3MqKHNhMStzKihzYTIrcyooc2EzK3Mqc2E0KSkpOwogCX0gZWxzZSB7CS8qIHx4fCA+PSAxLzAuMzUgKi8KLQkgICAgUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcyoocmI0K3MqKAotCQkJCXJiNStzKnJiNikpKSkpOwotCSAgICBTPW9uZStzKihzYjErcyooc2IyK3MqKHNiMytzKihzYjQrcyooCi0JCQkJc2I1K3MqKHNiNitzKnNiNykpKSkpKTsKKwkgICAgUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcypyYjQpKSk7CisJICAgIFM9b25lK3MqKHNiMStzKihzYjIrcyooc2IzK3Mqc2I0KSkpOwogCX0KLQlHRVRfRkxPQVRfV09SRChpeCx4KTsKLQlTRVRfRkxPQVRfV09SRCh6LGl4JjB4ZmZmZmYwMDApOwotCXIgID0gIF9faWVlZTc1NF9leHBmKC16KnotKGZsb2F0KTAuNTYyNSkqX19pZWVlNzU0X2V4cGYoKHoteCkqKHoreCkrUi9TKTsKKwlTRVRfRkxPQVRfV09SRCh6LGh4JjB4ZmZmZmUwMDApOworCXIgID0gZXhwZigteip6LTAuNTYyNUYpKmV4cGYoKHoteCkqKHoreCkrUi9TKTsKIAlpZihoeD49MCkgcmV0dXJuIG9uZS1yL3g7IGVsc2UgcmV0dXJuICByL3gtb25lOwogfQogCkBAIC0xNjAsMTEgKzEzOCwxMSBAQAogCX0KIAogCWlmKGl4IDwgMHgzZjU4MDAwMCkgewkJLyogfHh8PDAuODQzNzUgKi8KLQkgICAgaWYoaXggPCAweDIzODAwMDAwKSAgCS8qIHx4fDwyKiotNTYgKi8KKwkgICAgaWYoaXggPCAweDMzODAwMDAwKSAgCS8qIHx4fDwyKiotMjQgKi8KIAkJcmV0dXJuIG9uZS14OwogCSAgICB6ID0geCp4OwotCSAgICByID0gcHAwK3oqKHBwMSt6KihwcDIreioocHAzK3oqcHA0KSkpOwotCSAgICBzID0gb25lK3oqKHFxMSt6KihxcTIreioocXEzK3oqKHFxNCt6KnFxNSkpKSk7CisJICAgIHIgPSBwcDAreioocHAxK3oqcHAyKTsKKwkgICAgcyA9IG9uZSt6KihxcTEreioocXEyK3oqcXEzKSk7CiAJICAgIHkgPSByL3M7CiAJICAgIGlmKGh4IDwgMHgzZTgwMDAwMCkgeyAgCS8qIHg8MS80ICovCiAJCXJldHVybiBvbmUtKHgreCp5KTsKQEAgLTE3NiwzMyArMTU0LDI3IEBACiAJfQogCWlmKGl4IDwgMHgzZmEwMDAwMCkgewkJLyogMC44NDM3NSA8PSB8eHwgPCAxLjI1ICovCiAJICAgIHMgPSBmYWJzZih4KS1vbmU7Ci0JICAgIFAgPSBwYTArcyoocGExK3MqKHBhMitzKihwYTMrcyoocGE0K3MqKHBhNStzKnBhNikpKSkpOwotCSAgICBRID0gb25lK3MqKHFhMStzKihxYTIrcyoocWEzK3MqKHFhNCtzKihxYTUrcypxYTYpKSkpKTsKKwkgICAgUCA9IHBhMCtzKihwYTErcyoocGEyK3MqcGEzKSk7CisJICAgIFEgPSBvbmUrcyoocWExK3MqKHFhMitzKihxYTMrcypxYTQpKSk7CiAJICAgIGlmKGh4Pj0wKSB7CiAJICAgICAgICB6ICA9IG9uZS1lcng7IHJldHVybiB6IC0gUC9ROwogCSAgICB9IGVsc2UgewogCQl6ID0gZXJ4K1AvUTsgcmV0dXJuIG9uZSt6OwogCSAgICB9CiAJfQotCWlmIChpeCA8IDB4NDFlMDAwMDApIHsJCS8qIHx4fDwyOCAqLworCWlmIChpeCA8IDB4NDEzMDAwMDApIHsJCS8qIHx4fDwxMSAqLwogCSAgICB4ID0gZmFic2YoeCk7CiAgCSAgICBzID0gb25lLyh4KngpOwogCSAgICBpZihpeDwgMHg0MDM2REI2RCkgewkvKiB8eHwgPCAxLy4zNSB+IDIuODU3MTQzKi8KLQkgICAgICAgIFI9cmEwK3MqKHJhMStzKihyYTIrcyoocmEzK3MqKHJhNCtzKigKLQkJCQlyYTUrcyoocmE2K3MqcmE3KSkpKSkpOwotCSAgICAgICAgUz1vbmUrcyooc2ExK3MqKHNhMitzKihzYTMrcyooc2E0K3MqKAotCQkJCXNhNStzKihzYTYrcyooc2E3K3Mqc2E4KSkpKSkpKTsKKwkgICAgICAgIFI9cmEwK3MqKHJhMStzKihyYTIrcypyYTMpKTsKKwkgICAgICAgIFM9b25lK3MqKHNhMStzKihzYTIrcyooc2EzK3Mqc2E0KSkpOwogCSAgICB9IGVsc2UgewkJCS8qIHx4fCA+PSAxLy4zNSB+IDIuODU3MTQzICovCi0JCWlmKGh4PDAmJml4Pj0weDQwYzAwMDAwKSByZXR1cm4gdHdvLXRpbnk7LyogeCA8IC02ICovCi0JICAgICAgICBSPXJiMCtzKihyYjErcyoocmIyK3MqKHJiMytzKihyYjQrcyooCi0JCQkJcmI1K3MqcmI2KSkpKSk7Ci0JICAgICAgICBTPW9uZStzKihzYjErcyooc2IyK3MqKHNiMytzKihzYjQrcyooCi0JCQkJc2I1K3MqKHNiNitzKnNiNykpKSkpKTsKKwkJaWYoaHg8MCYmaXg+PTB4NDBhMDAwMDApIHJldHVybiB0d28tdGlueTsvKiB4IDwgLTUgKi8KKwkgICAgICAgIFI9cmIwK3MqKHJiMStzKihyYjIrcyoocmIzK3MqcmI0KSkpOworCQlTPW9uZStzKihzYjErcyooc2IyK3MqKHNiMytzKnNiNCkpKTsKIAkgICAgfQotCSAgICBHRVRfRkxPQVRfV09SRChpeCx4KTsKLQkgICAgU0VUX0ZMT0FUX1dPUkQoeixpeCYweGZmZmZmMDAwKTsKLQkgICAgciAgPSAgX19pZWVlNzU0X2V4cGYoLXoqei0oZmxvYXQpMC41NjI1KSoKLQkJCV9faWVlZTc1NF9leHBmKCh6LXgpKih6K3gpK1IvUyk7CisJICAgIFNFVF9GTE9BVF9XT1JEKHosaHgmMHhmZmZmZTAwMCk7CisJICAgIHIgID0gZXhwZigteip6LTAuNTYyNUYpKmV4cGYoKHoteCkqKHoreCkrUi9TKTsKIAkgICAgaWYoaHg+MCkgcmV0dXJuIHIveDsgZWxzZSByZXR1cm4gdHdvLXIveDsKIAl9IGVsc2UgewogCSAgICBpZihoeD4wKSByZXR1cm4gdGlueSp0aW55OyBlbHNlIHJldHVybiB0d28tdGlueTsKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWEuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWEuYwppbmRleCA0NTJiZWNlLi5iMTA2NmMyIDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hLmMKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYS5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAlpZiAoc3VtLmxvICE9IDApIHsKIAkJRVhUUkFDVF9XT1JENjQoaGliaXRzLCBzdW0uaGkpOwogCQliaXRzX2xvc3QgPSAtKChpbnQpKGhpYml0cyA+PiA1MikgJiAweDdmZikgLSBzY2FsZSArIDE7Ci0JCWlmIChiaXRzX2xvc3QgIT0gMSBeIChpbnQpKGhpYml0cyAmIDEpKSB7CisJCWlmICgoYml0c19sb3N0ICE9IDEpIF4gKGludCkoaGliaXRzICYgMSkpIHsKIAkJCS8qIGhpYml0cyArPSAoaW50KWNvcHlzaWduKDEuMCwgc3VtLmhpICogc3VtLmxvKSAqLwogCQkJRVhUUkFDVF9XT1JENjQobG9iaXRzLCBzdW0ubG8pOwogCQkJaGliaXRzICs9IDEgLSAoKChoaWJpdHMgXiBsb2JpdHMpID4+IDYyKSAmIDIpOwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYWwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWFsLmMKaW5kZXggOTI3MTkwMS4uZDQzNWY0ZiAxMDA2NDQKLS0tIGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYWwuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hbC5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAlpZiAoc3VtLmxvICE9IDApIHsKIAkJdS5lID0gc3VtLmhpOwogCQliaXRzX2xvc3QgPSAtdS5iaXRzLmV4cCAtIHNjYWxlICsgMTsKLQkJaWYgKGJpdHNfbG9zdCAhPSAxIF4gKGludCkodS5iaXRzLm1hbmwgJiAxKSkKKwkJaWYgKChiaXRzX2xvc3QgIT0gMSkgXiAoaW50KSh1LmJpdHMubWFubCAmIDEpKQogCQkJc3VtLmhpID0gbmV4dGFmdGVybChzdW0uaGksIElORklOSVRZICogc3VtLmxvKTsKIAl9CiAJcmV0dXJuIChsZGV4cChzdW0uaGksIHNjYWxlKSk7CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaXNmaW5pdGUuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc2Zpbml0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWQxYmQ3Li4wMDAwMDAwCi0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc2Zpbml0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRCQKLSAqLwotCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAiZnBtYXRoLmgiCi0KLWludAotX19pc2Zpbml0ZShkb3VibGUgZCkKLXsKLQl1bmlvbiBJRUVFZDJiaXRzIHU7Ci0KLQl1LmQgPSBkOwotCXJldHVybiAodS5iaXRzLmV4cCAhPSAyMDQ3KTsKLX0KLQotaW50Ci1fX2lzZmluaXRlZihmbG9hdCBmKQotewotCXVuaW9uIElFRUVmMmJpdHMgdTsKLQotCXUuZiA9IGY7Ci0JcmV0dXJuICh1LmJpdHMuZXhwICE9IDI1NSk7Ci19Ci0KLWludAotX19pc2Zpbml0ZWwobG9uZyBkb3VibGUgZSkKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHU7Ci0KLQl1LmUgPSBlOwotCXJldHVybiAodS5iaXRzLmV4cCAhPSAzMjc2Nyk7Ci19CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaXNuYW4uYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc25hbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTRkZWQzLi4wMDAwMDAwCi0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc25hbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRCQKLSAqLwotCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAiZnBtYXRoLmgiCi0KLS8qIFByb3ZpZGVkIGJ5IGxpYmMuc28gKi8KLSNpZm5kZWYgUElDCi0jdW5kZWYgaXNuYW4KLWludAotaXNuYW4oZG91YmxlIGQpCi17Ci0JdW5pb24gSUVFRWQyYml0cyB1OwotCi0JdS5kID0gZDsKLQlyZXR1cm4gKHUuYml0cy5leHAgPT0gMjA0NyAmJiAodS5iaXRzLm1hbmwgIT0gMCB8fCB1LmJpdHMubWFuaCAhPSAwKSk7Ci19Ci0jZW5kaWYgLyogIVBJQyAqLwotCi1pbnQKLV9faXNuYW5mKGZsb2F0IGYpCi17Ci0JdW5pb24gSUVFRWYyYml0cyB1OwotCi0JdS5mID0gZjsKLQlyZXR1cm4gKHUuYml0cy5leHAgPT0gMjU1ICYmIHUuYml0cy5tYW4gIT0gMCk7Ci19Ci0KLWludAotX19pc25hbmwobG9uZyBkb3VibGUgZSkKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHU7Ci0KLQl1LmUgPSBlOwotCW1hc2tfbmJpdF9sKHUpOwotCXJldHVybiAodS5iaXRzLmV4cCA9PSAzMjc2NyAmJiAodS5iaXRzLm1hbmwgIT0gMCB8fCB1LmJpdHMubWFuaCAhPSAwKSk7Ci19Ci0KLV9fd2Vha19yZWZlcmVuY2UoX19pc25hbmYsIGlzbmFuZik7CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaXNub3JtYWwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc25vcm1hbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWYyYTc0Li4wMDAwMDAwCi0tLSBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc25vcm1hbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRCQKLSAqLwotCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAiZnBtYXRoLmgiCi0KLWludAotX19pc25vcm1hbChkb3VibGUgZCkKLXsKLQl1bmlvbiBJRUVFZDJiaXRzIHU7Ci0KLQl1LmQgPSBkOwotCXJldHVybiAodS5iaXRzLmV4cCAhPSAwICYmIHUuYml0cy5leHAgIT0gMjA0Nyk7Ci19Ci0KLWludAotX19pc25vcm1hbGYoZmxvYXQgZikKLXsKLQl1bmlvbiBJRUVFZjJiaXRzIHU7Ci0KLQl1LmYgPSBmOwotCXJldHVybiAodS5iaXRzLmV4cCAhPSAwICYmIHUuYml0cy5leHAgIT0gMjU1KTsKLX0KLQotaW50Ci1fX2lzbm9ybWFsbChsb25nIGRvdWJsZSBlKQotewotCXVuaW9uIElFRUVsMmJpdHMgdTsKLQotCXUuZSA9IGU7Ci0JcmV0dXJuICh1LmJpdHMuZXhwICE9IDAgJiYgdS5iaXRzLmV4cCAhPSAzMjc2Nyk7Ci19CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmVtcXVvbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JlbXF1b2wuYwppbmRleCA3MTI2NTFjLi44ODk5MjkzIDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmVtcXVvbC5jCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW9sLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKICAqIGlzIHByZXNlcnZlZC4KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqLwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JpbnRsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludGwuYwppbmRleCBiNDNkZjg5Li5lNTViNDBlIDEwMDY0NAotLS0gYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludGwuYworKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludGwuYwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8ZmxvYXQuaD4KICNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAKICNpbmNsdWRlICJmcG1hdGguaCIKIApkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25iaXQuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaWduYml0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZWIzYWIuLjAwMDAwMDAKLS0tIGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25iaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAzIE1pa2UgQmFyY3JvZnQgPG1pa2VARnJlZUJTRC5vcmc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLQotaW50Ci1fX3NpZ25iaXQoZG91YmxlIGQpCi17Ci0JdW5pb24gSUVFRWQyYml0cyB1OwotCi0JdS5kID0gZDsKLQlyZXR1cm4gKHUuYml0cy5zaWduKTsKLX0KLQotaW50Ci1fX3NpZ25iaXRmKGZsb2F0IGYpCi17Ci0JdW5pb24gSUVFRWYyYml0cyB1OwotCi0JdS5mID0gZjsKLQlyZXR1cm4gKHUuYml0cy5zaWduKTsKLX0KLQotaW50Ci1fX3NpZ25iaXRsKGxvbmcgZG91YmxlIGUpCi17Ci0JdW5pb24gSUVFRWwyYml0cyB1OwotCi0JdS5lID0gZTsKLQlyZXR1cm4gKHUuYml0cy5zaWduKTsKLX0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy9BbmRyb2lkLm1rIGIvbGlic3RkYysrL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZTZjNGQuLjAwMDAwMDAKLS0tIGEvbGlic3RkYysrL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1MT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKLQotIyBDb21tb24gQysrIGZsYWdzIHRvIGJ1aWxkIHRoaXMgbGlicmFyeS4KLSMgTm90ZSB0aGF0IHdlIG5lZWQgdG8gYWNjZXNzIHByaXZhdGUgQmlvbmljIGhlYWRlcnMKLSMgYW5kIGRlZmluZSBBTkRST0lEX1NNUCBhY2NvcmRpbmdseS4KLWxpYnN0ZGMrK19jZmxhZ3MgOj0gLUliaW9uaWMvbGliYy8KLWlmZXEgKCQoVEFSR0VUX0NQVV9TTVApLHRydWUpCi0gICAgbGlic3RkYysrX2NmbGFncyArPSAtREFORFJPSURfU01QPTEKLWVsc2UKLSAgICBsaWJzdGRjKytfY2ZsYWdzICs9IC1EQU5EUk9JRF9TTVA9MAotZW5kaWYKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX1NSQ19GSUxFUzo9IFwKLQlzcmMvb25lX3RpbWVfY29uc3RydWN0aW9uLmNwcCBcCi0Jc3JjL25ldy5jcHAgXAotCXNyYy9wdXJlX3ZpcnR1YWwuY3BwIFwKLQlzcmMvdHlwZWluZm8uY3BwCi0KLUxPQ0FMX01PRFVMRTo9IGxpYnN0ZGMrKwotTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCi0KLUxPQ0FMX0NGTEFHUyA6PSAkKGxpYnN0ZGMrK19jZmxhZ3MpCi0KLUxPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMKLQotaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTOj0gXAotCXNyYy9vbmVfdGltZV9jb25zdHJ1Y3Rpb24uY3BwIFwKLQlzcmMvbmV3LmNwcCBcCi0Jc3JjL3B1cmVfdmlydHVhbC5jcHAgXAotCXNyYy90eXBlaW5mby5jcHAKLQotTE9DQUxfQ0ZMQUdTIDo9ICQobGlic3RkYysrX2NmbGFncykKLQotTE9DQUxfTU9EVUxFOj0gbGlic3RkYysrCi1MT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKLQotTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliYwotCi1pbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9saWJzdGRjKysvTk9USUNFIGIvbGlic3RkYysrL05PVElDRQppbmRleCA2YzI2M2QxLi40OTI3NzBkIDEwMDY0NAotLS0gYS9saWJzdGRjKysvTk9USUNFCisrKyBiL2xpYnN0ZGMrKy9OT1RJQ0UKQEAgLTQsOSArNCw5IEBACiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICAgIGRpc3RyaWJ1dGlvbi4KQEAgLTMyLDkgKzMyLDkgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtNzksNyArNzksMyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCmRpZmYgLS1naXQgYS9saWJzdGRjKysvaW5jbHVkZS9jc3RkaW8gYi9saWJzdGRjKysvaW5jbHVkZS9jc3RkaW8KaW5kZXggM2M4YjVjNi4uMjk0OGQ4NSAxMDA2NDQKLS0tIGEvbGlic3RkYysrL2luY2x1ZGUvY3N0ZGlvCisrKyBiL2xpYnN0ZGMrKy9pbmNsdWRlL2NzdGRpbwpAQCAtNjMsNyArNjMsOSBAQAogdXNpbmcgOjpmd3JpdGU7CiB1c2luZyA6OmdldGM7CiB1c2luZyA6OmdldGNoYXI7CisjaWYgIWRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgfHwgX19TVERDX1ZFUlNJT05fXyA8IDIwMTExMkwKIHVzaW5nIDo6Z2V0czsKKyNlbmRpZgogdXNpbmcgOjpwZXJyb3I7CiB1c2luZyA6OnByaW50ZjsKIHVzaW5nIDo6cHV0YzsKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy9pbmNsdWRlL2NzdGRsaWIgYi9saWJzdGRjKysvaW5jbHVkZS9jc3RkbGliCmluZGV4IGJiNmY1YTUuLmJkMWRlYWUgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy9pbmNsdWRlL2NzdGRsaWIKKysrIGIvbGlic3RkYysrL2luY2x1ZGUvY3N0ZGxpYgpAQCAtNDIsOSArNDIsNiBAQAogdXNpbmcgOjpleGl0OwogdXNpbmcgOjphYm9ydDsKIHVzaW5nIDo6YXRleGl0OwotI2lmIDAgLyogTUlTU0lORyBGUk9NIEJJT05JQyAqLwotdXNpbmcgOjpvbl9leGl0OwotI2VuZGlmCiAKIHVzaW5nIDo6Z2V0ZW52OwogdXNpbmcgOjpwdXRlbnY7CmRpZmYgLS1naXQgYS9saWJzdGRjKysvc3JjL25ldy5jcHAgYi9saWJzdGRjKysvc3JjL25ldy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZDNkYmEuLjAwMDAwMDAKLS0tIGEvbGlic3RkYysrL3NyYy9uZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI2luY2x1ZGUgIm5ldyIKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotY29uc3Qgc3RkOjpub3Rocm93X3Qgc3RkOjpub3Rocm93ID0ge307Ci0KLXZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHAgPSBtYWxsb2Moc2l6ZSk7Ci0gICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICBhYm9ydCgpOwotICAgIH0KLSAgICByZXR1cm4gcDsKLX0KLQotdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiBwID0gbWFsbG9jKHNpemUpOwotICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgYWJvcnQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLXZvaWQgIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwdHIpCi17Ci0gICAgZnJlZShwdHIpOwotfQotCi12b2lkICBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwdHIpCi17Ci0gICAgZnJlZShwdHIpOwotfQotCi12b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3Qgc2l6ZSwgY29uc3Qgc3RkOjpub3Rocm93X3QmKQotewotICAgIHJldHVybiBtYWxsb2Moc2l6ZSk7Ci19Ci0KLXZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90IHNpemUsIGNvbnN0IHN0ZDo6bm90aHJvd190JikKLXsKLSAgICByZXR1cm4gbWFsbG9jKHNpemUpOwotfQotCi12b2lkICBvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpCi17Ci0gICAgZnJlZShwdHIpOwotfQotCi12b2lkICBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwdHIsIGNvbnN0IHN0ZDo6bm90aHJvd190JikKLXsKLSAgICBmcmVlKHB0cik7Ci19Ci0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrL3NyYy9vbmVfdGltZV9jb25zdHJ1Y3Rpb24uY3BwIGIvbGlic3RkYysrL3NyYy9vbmVfdGltZV9jb25zdHJ1Y3Rpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTc0MzExLi4wMDAwMDAwCi0tLSBhL2xpYnN0ZGMrKy9zcmMvb25lX3RpbWVfY29uc3RydWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICovCi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzeXMvYXRvbWljcy5oPgotI2luY2x1ZGUgPGVuZGlhbi5oPgotCi0jaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfYXRvbWljX2lubGluZS5oIgotI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2Z1dGV4LmgiCi0KLS8vIFRoaXMgZmlsZSBjb250YWlucyBDKysgQUJJIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBvbmUgdGltZQotLy8gY29uc3RydWN0b3JzIGFzIGRlZmluZWQgaW4gdGhlICJSdW4tdGltZSBBQkkgZm9yIHRoZSBBUk0gQXJjaGl0ZWN0dXJlIgotLy8gc2VjdGlvbiA0LjQuMgotLy8KLS8vIEFSTSBDKysgQUJJIGFuZCBJdGFuaXVtL3g4NiBDKysgQUJJIGhhcyBkaWZmZXJlbnQgZGVmaW5pdGlvbiBmb3IKLS8vIG9uZSB0aW1lIGNvbnN0cnVjdGlvbjoKLS8vCi0vLyAgICBBUk0gQysrIEFCSSBkZWZpbmVzIHRoZSBMU0Igb2YgZ3VhcmQgdmFyaWFibGUgc2hvdWxkIGJlIHRlc3RlZAotLy8gICAgYnkgY29tcGlsZXItZ2VuZXJhdGVkIGNvZGUgYmVmb3JlIGNhbGxpbmcgX19jeGFfZ3VhcmRfYWNxdWlyZSBldCBhbC4KLS8vCi0vLyAgICBUaGUgSXRhbml1bS94ODYgQysrIEFCSSBkZWZpbmVzIHRoZSBsb3ctb3JkZXIgX2J5dGVfIHNob3VsZCBiZQotLy8gICAgdGVzdGVkIGluc3RlYWQuCi0vLwotLy8gICAgTWVhbndoaWxlLCBndWFyZCB2YXJpYWJsZSBhcmUgMzJiaXQgYWxpZ25lZCBmb3IgQVJNLCBhbmQgNjRiaXQKLS8vICAgIGFsaWduZWQgZm9yIHg4Ni4KLS8vCi0vLyBSZWZlcmVuY2UgZG9jdW1lbnRhdGlvbjoKLS8vCi0vLyAgICBzZWN0aW9uIDMuMi4zIG9mIEFSTSBJSEkgMDA0MUMgKGZvciBBUk0pCi0vLyAgICBzZWN0aW9uIDMuMy4yIG9mIHRoZSBJdGFuaXVtIEMrKyBBQkkgc3BlY2lmaWNhdGlvbiB2MS44MyAoZm9yIHg4NikuCi0vLwotLy8gVGhlcmUgaXMgbm8gQysrIEFCSSBhdmFpbGFibGUgZm9yIG90aGVyIEFSQ0guIEJ1dCB0aGUgZ2NjIHNvdXJjZQotLy8gc2hvd3MgYWxsIG90aGVyIEFSQ0ggZm9sbG93IHRoZSBkZWZpbml0aW9uIG9mIEl0YW5pdW0veDg2IEMrKyBBQkkuCi0KLQotI2lmIGRlZmluZWQoX19hcm1fXykKLS8vIFRoZSBBUk0gQysrIEFCSSBtYW5kYXRlcyB0aGF0IGd1YXJkIHZhcmlhYmxlIGFyZQotLy8gMzItYml0IGFsaWduZWQsIDMyLWJpdCB2YWx1ZXMuIEFuZCBvbmx5IGl0cyBMU0IgaXMgdGVzdGVkIGJ5Ci0vLyB0aGUgY29tcGlsZXItZ2VuZXJhdGVkIGNvZGUgYmVmb3JlIGNhbGxpbmcKLS8vIF9fY3hhX2d1YXJkX2FjcXVpcmUuCi0vLwotdHlwZWRlZiB1bmlvbiB7Ci0gICAgaW50IHZvbGF0aWxlIHN0YXRlOwotICAgIGludDMyX3QgYWxpZ25lcjsKLX0gX2d1YXJkX3Q7Ci0KLWNvbnN0IHN0YXRpYyBpbnQgcmVhZHkgPSAweDE7Ci1jb25zdCBzdGF0aWMgaW50IHBlbmRpbmcgPSAweDI7Ci1jb25zdCBzdGF0aWMgaW50IHdhaXRpbmcgPSAweDY7Ci0KLSNlbHNlICAgLy8gR0NDIHNvdXJjZXMgaW5kaWNhdGVzIGFsbCBub25lLWFybSBmb2xsb3cgdGhlIHNhbWUgQUJJCi0vLyBUaGUgSXRhbml1bS94ODYgQysrIEFCSSBtYW5kYXRlcyB0aGF0IGd1YXJkIHZhcmlhYmxlcwotLy8gYXJlIDY0LWJpdCBhbGlnbmVkLCA2NC1iaXQgdmFsdWVzLiBBbHNvLCB0aGUgbGVhc3Qtc2lnbmlmaWNhbnQKLS8vIGJ5dGUgaXMgdGVzdGVkIGJ5IHRoZSBjb21waWxlci1nZW5lcmF0ZWQgY29kZSBiZWZvcmUsIHdlIGNhbGxpbmcKLS8vIF9fY3hhX2d1YXJkX2FjcXVpcmUuIFdlIGNhbiBhY2Nlc3MgaXQgdGhyb3VnaCB0aGUgZmlyc3QKLS8vIDMyLWJpdCB3b3JkIGluIHRoZSB1bmlvbiBiZWxvdy4KLS8vCi10eXBlZGVmIHVuaW9uIHsKLSAgICBpbnQgdm9sYXRpbGUgc3RhdGU7Ci0gICAgaW50NjRfdCBhbGlnbmVyOwotfSBfZ3VhcmRfdDsKLQotY29uc3Qgc3RhdGljIGludCByZWFkeSAgICAgPSBsZXRvaDMyKDB4MSk7Ci1jb25zdCBzdGF0aWMgaW50IHBlbmRpbmcgICA9IGxldG9oMzIoMHgxMDApOwotY29uc3Qgc3RhdGljIGludCB3YWl0aW5nICAgPSBsZXRvaDMyKDB4MTAwMDApOwotI2VuZGlmCi0KLWV4dGVybiAiQyIgaW50IF9fY3hhX2d1YXJkX2FjcXVpcmUoX2d1YXJkX3QqIGd2KQotewotICAgIC8vIDAgLT4gcGVuZGluZywgcmV0dXJuIDEKLSAgICAvLyBwZW5kaW5nIC0+IHdhaXRpbmcsIHdhaXQgYW5kIHJldHVybiAwCi0gICAgLy8gd2FpdGluZzogdW50b3VjaGVkLCB3YWl0IGFuZCByZXR1cm4gMAotICAgIC8vIHJlYWR5OiB1bnRvdWNoZWQsIHJldHVybiAwCi0KLXJldHJ5OgotICAgIGlmIChfX2Jpb25pY19jbXB4Y2hnKDAsIHBlbmRpbmcsICZndi0+c3RhdGUpID09IDApIHsKLSAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgX19iaW9uaWNfY21weGNoZyhwZW5kaW5nLCB3YWl0aW5nLCAmZ3YtPnN0YXRlKTsgLy8gSW5kaWNhdGUgdGhlcmUgaXMgYSB3YWl0ZXIKLSAgICBfX2Z1dGV4X3dhaXQoJmd2LT5zdGF0ZSwgd2FpdGluZywgTlVMTCk7Ci0KLSAgICBpZiAoZ3YtPnN0YXRlICE9IHJlYWR5KSAvLyBfX2N4YV9ndWFyZF9hYm9ydCB3YXMgY2FsbGVkLCBsZXQgZXZlcnkgdGhyZWFkIHRyeSBzaW5jZSB0aGVyZSBpcyBubyByZXR1cm4gY29kZSBmb3IgdGhpcyBjb25kaXRpb24KLSAgICAgICAgZ290byByZXRyeTsKLQotICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotZXh0ZXJuICJDIiB2b2lkIF9fY3hhX2d1YXJkX3JlbGVhc2UoX2d1YXJkX3QqIGd2KQotewotICAgIC8vIHBlbmRpbmcgLT4gcmVhZHkKLSAgICAvLyB3YWl0aW5nIC0+IHJlYWR5LCBhbmQgd2FrZQotCi0gICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgIGlmIChfX2Jpb25pY19jbXB4Y2hnKHBlbmRpbmcsIHJlYWR5LCAmZ3YtPnN0YXRlKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBndi0+c3RhdGUgPSByZWFkeTsKLSAgICBfX2Z1dGV4X3dha2UoJmd2LT5zdGF0ZSwgMHg3ZmZmZmZmZik7Ci19Ci0KLWV4dGVybiAiQyIgdm9pZCBfX2N4YV9ndWFyZF9hYm9ydChfZ3VhcmRfdCogZ3YpCi17Ci0gICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgIGd2LT5zdGF0ZT0gMDsKLSAgICBfX2Z1dGV4X3dha2UoJmd2LT5zdGF0ZSwgMHg3ZmZmZmZmZik7Ci19CmRpZmYgLS1naXQgYS9saWJzdGRjKysvc3JjL3B1cmVfdmlydHVhbC5jcHAgYi9saWJzdGRjKysvc3JjL3B1cmVfdmlydHVhbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiNWUzMjguLjAwMDAwMDAKLS0tIGEvbGlic3RkYysrL3NyYy9wdXJlX3ZpcnR1YWwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jdW5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0KLWV4dGVybiAiQyIgdm9pZCBfX2N4YV9wdXJlX3ZpcnR1YWwoKSB7Ci0gIC8vIFdlIGNhbid0IGNhbGwgX19saWJjX2Zvcm1hdF9sb2cgZnJvbSBsaWJzdGRjKysgYmVjYXVzZSBpdCdzIGhpZGRlbiBhbmQgaW4gbGliYywgc28gY2hlYXQuCi0gIGFzc2VydCghIlB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsZWQuIEFyZSB5b3UgY2FsbGluZyB2aXJ0dWFsIG1ldGhvZHMgZnJvbSBhIGRlc3RydWN0b3I/Iik7Ci0gIC8qIE5PVFJFQUNIRUQgKi8KLX0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy9zcmMvdHlwZWluZm8uY3BwIGIvbGlic3RkYysrL3NyYy90eXBlaW5mby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MjZmMWEuLjAwMDAwMDAKLS0tIGEvbGlic3RkYysrL3NyYy90eXBlaW5mby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jaW5jbHVkZSAidHlwZWluZm8iCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLXR5cGVfaW5mbzo6dHlwZV9pbmZvKCkgewotfQotCi10eXBlX2luZm86On50eXBlX2luZm8oKSB7Ci19Ci0KLWNoYXIgY29uc3QgKgotdHlwZV9pbmZvOjpuYW1lKCkgY29uc3QgewotICAgIHJldHVybiAiTi9BIjsKLX0KLQotYm9vbCAKLXR5cGVfaW5mbzo6b3BlcmF0b3I9PSh0eXBlX2luZm8gY29uc3QgJiByaWdodCkgY29uc3QgewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCAKLXR5cGVfaW5mbzo6b3BlcmF0b3IhPSh0eXBlX2luZm8gY29uc3QgJiByaWdodCkgY29uc3QgewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbAotdHlwZV9pbmZvOjpiZWZvcmUodHlwZV9pbmZvIGNvbnN0ICYgcmlnaHQpIGNvbnN0IHsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXR5cGVfaW5mbzo6dHlwZV9pbmZvKHR5cGVfaW5mbyBjb25zdCAmIHJpZ2h0KSB7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpbmtlci9BbmRyb2lkLm1rIGIvbGlua2VyL0FuZHJvaWQubWsKaW5kZXggYmRjNTRkZS4uNTg1M2M5MCAxMDA2NDQKLS0tIGEvbGlua2VyL0FuZHJvaWQubWsKKysrIGIvbGlua2VyL0FuZHJvaWQubWsKQEAgLTEsMjEgKzEsMjMgQEAKLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQorTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQorCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAotaWZlcSAoJChUQVJHRVRfQVJDSCkseDg2KQotICAgIGxpbmtlcl9iZWdpbl9leHRlbnNpb24gOj0gYwotZWxzZQotICAgIGxpbmtlcl9iZWdpbl9leHRlbnNpb24gOj0gUwotZW5kaWYKLQogTE9DQUxfU1JDX0ZJTEVTOj0gXAotICAgIGFyY2gvJChUQVJHRVRfQVJDSCkvYmVnaW4uJChsaW5rZXJfYmVnaW5fZXh0ZW5zaW9uKSBcCiAgICAgZGVidWdnZXIuY3BwIFwKICAgICBkbGZjbi5jcHAgXAogICAgIGxpbmtlci5jcHAgXAorICAgIGxpbmtlcl9hbGxvY2F0b3IuY3BwIFwKICAgICBsaW5rZXJfZW52aXJvbi5jcHAgXAogICAgIGxpbmtlcl9waGRyLmNwcCBcCiAgICAgcnQuY3BwIFwKIAorTE9DQUxfU1JDX0ZJTEVTX2FybSAgICAgOj0gYXJjaC9hcm0vYmVnaW4uUworTE9DQUxfU1JDX0ZJTEVTX2FybTY0ICAgOj0gYXJjaC9hcm02NC9iZWdpbi5TCitMT0NBTF9TUkNfRklMRVNfeDg2ICAgICA6PSBhcmNoL3g4Ni9iZWdpbi5jCitMT0NBTF9TUkNfRklMRVNfeDg2XzY0ICA6PSBhcmNoL3g4Nl82NC9iZWdpbi5TCitMT0NBTF9TUkNfRklMRVNfbWlwcyAgICA6PSBhcmNoL21pcHMvYmVnaW4uUworTE9DQUxfU1JDX0ZJTEVTX21pcHM2NCAgOj0gYXJjaC9taXBzNjQvYmVnaW4uUworCiBMT0NBTF9MREZMQUdTIDo9IFwKICAgICAtc2hhcmVkIFwKICAgICAtV2wsLUJzeW1ib2xpYyBcCkBAIC0yNSw3ICsyNyw3IEBACiAgICAgLWZuby1zdGFjay1wcm90ZWN0b3IgXAogICAgIC1Xc3RyaWN0LW92ZXJmbG93PTUgXAogICAgIC1mdmlzaWJpbGl0eT1oaWRkZW4gXAotICAgIC1XYWxsIC1XZXh0cmEgLVdlcnJvciBcCisgICAgLVdhbGwgLVdleHRyYSAtV3VudXNlZCAtV2Vycm9yIFwKIAogTE9DQUxfQ09OTFlGTEFHUyArPSBcCiAgICAgLXN0ZD1nbnU5OSBcCkBAIC0zNiw1MSArMzgsNDAgQEAKICMgV2UgbmVlZCB0byBhY2Nlc3MgQmlvbmljIHByaXZhdGUgaGVhZGVycyBpbiB0aGUgbGlua2VyLgogTE9DQUxfQ0ZMQUdTICs9IC1JJChMT0NBTF9QQVRIKS8uLi9saWJjLwogCi1pZmVxICgkKFRBUkdFVF9JU182NF9CSVQpLHRydWUpCi0gICAgTE9DQUxfTU9EVUxFIDo9IGxpbmtlcjY0Ci1lbHNlCi0gICAgTE9DQUxfTU9EVUxFIDo9IGxpbmtlcgotZW5kaWYKLQotTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCi0KLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19ub21hbGxvYwotCi0jTE9DQUxfRk9SQ0VfU1RBVElDX0VYRUNVVEFCTEUgOj0gdHJ1ZSAjIG5vdCBuZWNlc3Nhcnkgd2hlbiBub3QgaW5jbHVkaW5nIEJVSUxEX0VYRUNVVEFCTEUKLQotIwotIyBpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKLSMKLSMgSW5zdGVhZCBvZiBpbmNsdWRpbmcgJChCVUlMRF9FWEVDVVRBQkxFKSwgd2UgZXhlY3V0ZSB0aGUgc3RlcHMgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgYnkKLSMgaGFuZCwgYXMgd2Ugd2FudCB0byBpbnNlcnQgYW4gZXh0cmEgc3RlcCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJ1aWxkIHN5c3RlbSwgYW5kCi0jIGlzIHByb2JhYmx5IHNwZWNpZmljIHRoZSBsaW5rZXIgb25seSwgc28gdGhlcmUncyBubyBuZWVkIHRvIG1vZGlmeSB0aGUgYnVpbGQgc3lzdGVtIGZvcgotIyB0aGUgcHVycG9zZS4KLQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVYRUNVVEFCTEVTCi1MT0NBTF9NT0RVTEVfU1VGRklYIDo9ICQoVEFSR0VUX0VYRUNVVEFCTEVfU1VGRklYKQotCiAjIHdlIGRvbid0IHdhbnQgY3J0YmVnaW4ubyAoYmVjYXVzZSB3ZSBoYXZlIGJlZ2luLm8pLCBzbyB1bnNldCBpdAogIyBqdXN0IGZvciB0aGlzIG1vZHVsZQogTE9DQUxfTk9fQ1JUIDo9IHRydWUKLQogIyBUT0RPOiBzcGxpdCBvdXQgdGhlIGFzZmxhZ3MuCiBMT0NBTF9BU0ZMQUdTIDo9ICQoTE9DQUxfQ0ZMQUdTKQogCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9keW5hbWljX2JpbmFyeS5taworTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rICQoTE9DQUxfUEFUSCkvbGlua2VyX2V4ZWN1dGFibGUubWsKIAotIyBTZWUgYnVpbGQvY29yZS9leGVjdXRhYmxlLm1rCi0kKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9HTE9CQUxfTERfRElSUyA6PSAkKFRBUkdFVF9HTE9CQUxfTERfRElSUykKLSQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0dMT0JBTF9MREZMQUdTIDo9ICQoVEFSR0VUX0dMT0JBTF9MREZMQUdTKQotJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfRkRPX0xJQiA6PSAkKFRBUkdFVF9GRE9fTElCKQotJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfTElCR0NDIDo9ICQoVEFSR0VUX0xJQkdDQykKLSQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0NSVEJFR0lOX0RZTkFNSUNfTyA6PSAkKFRBUkdFVF9DUlRCRUdJTl9EWU5BTUlDX08pCi0kKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9DUlRCRUdJTl9TVEFUSUNfTyA6PSAkKFRBUkdFVF9DUlRCRUdJTl9TVEFUSUNfTykKLSQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0NSVEVORF9PIDo9ICQoVEFSR0VUX0NSVEVORF9PKQotJChsaW5rZWRfbW9kdWxlKTogJChUQVJHRVRfQ1JUQkVHSU5fU1RBVElDX08pICQoYWxsX29iamVjdHMpICQoYWxsX2xpYnJhcmllcykgJChUQVJHRVRfQ1JURU5EX08pCi0JJCh0cmFuc2Zvcm0tby10by1zdGF0aWMtZXhlY3V0YWJsZSkKLQlAZWNobyAidGFyZ2V0IFByZWZpeFN5bWJvbHM6ICQoUFJJVkFURV9NT0RVTEUpICgkQCkiCi0JJChoaWRlKSAkKFRBUkdFVF9PQkpDT1BZKSAtLXByZWZpeC1zeW1ib2xzPV9fZGxfICRACitMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmNfbm9tYWxsb2MKIAotIwotIyBlbmQgb2YgQlVJTERfRVhFQ1VUQUJMRSBoYWNrCi0jCitMT0NBTF9GT1JDRV9TVEFUSUNfRVhFQ1VUQUJMRSA6PSB0cnVlICMgbm90IG5lY2Vzc2FyeSB3aGVuIG5vdCBpbmNsdWRpbmcgQlVJTERfRVhFQ1VUQUJMRQorCitMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYIDo9ICQobGlua2VyXzJuZF9hcmNoX3Zhcl9wcmVmaXgpCisKK0xPQ0FMX01PRFVMRSA6PSBsaW5rZXIKK0xPQ0FMX01PRFVMRV9TVEVNXzMyIDo9IGxpbmtlcgorTE9DQUxfTU9EVUxFX1NURU1fNjQgOj0gbGlua2VyNjQKK0xPQ0FMX01VTFRJTElCIDo9IGJvdGgKKworIyBMZWF2ZSB0aGUgc3ltYm9scyBpbiB0aGUgc2hhcmVkIGxpYnJhcnkgc28gdGhhdCBzdGFjayB1bndpbmRlcnMgY2FuIHByb2R1Y2UKKyMgbWVhbmluZ2Z1bCBuYW1lIHJlc29sdXRpb24uCitMT0NBTF9TVFJJUF9NT0RVTEUgOj0ga2VlcF9zeW1ib2xzCisKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9saW5rZXJfZXhlY3V0YWJsZS5taworaWZkZWYgVEFSR0VUXzJORF9BUkNICitMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYIDo9ICQoVEFSR0VUXzJORF9BUkNIX1ZBUl9QUkVGSVgpCitPVkVSUklERV9CVUlMVF9NT0RVTEVfUEFUSCA6PQorTE9DQUxfQlVJTFRfTU9EVUxFIDo9CitMT0NBTF9JTlNUQUxMRURfTU9EVUxFIDo9CitMT0NBTF9NT0RVTEVfU1RFTSA6PQorTE9DQUxfQlVJTFRfTU9EVUxFX1NURU0gOj0KK0xPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PQorTE9DQUxfSU5URVJNRURJQVRFX1RBUkdFVFMgOj0KK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9saW5rZXJfZXhlY3V0YWJsZS5taworZW5kaWYKKworaW5jbHVkZSAkKGNhbGwgZmlyc3QtbWFrZWZpbGVzLXVuZGVyLCQoTE9DQUxfUEFUSCkpCmRpZmYgLS1naXQgYS9saW5rZXIvTk9USUNFIGIvbGlua2VyL05PVElDRQppbmRleCBjM2Q2Y2Y2Li5jYjNhMWRkIDEwMDY0NAotLS0gYS9saW5rZXIvTk9USUNFCisrKyBiL2xpbmtlci9OT1RJQ0UKQEAgLTIwLDkgKzIwLDkgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtNDgsOSArNDgsOSBAQAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6Ci1SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAgICBkaXN0cmlidXRpb24uCkBAIC03Niw5ICs3Niw5IEBACiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLVJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICAgIGRpc3RyaWJ1dGlvbi4KQEAgLTEwNCw5ICsxMDQsOSBAQAogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIGFyZSBtZXQ6Ci1SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLVJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAgICBkaXN0cmlidXRpb24uCkBAIC0xMzIsOSArMTMyLDkgQEAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtMTU1LDE0ICsxNTUsMzAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cit5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCitZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiBhcmUgbWV0OgotUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi1SZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAgZGlzdHJpYnV0aW9uLgpAQCAtMTgyLDMgKzE5OCwxOSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0NvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKZGlmZiAtLWdpdCBhL2xpbmtlci9hcmNoL2FybS9iZWdpbi5TIGIvbGlua2VyL2FyY2gvYXJtL2JlZ2luLlMKaW5kZXggZTI1OTkwMi4uOGNiNTk5YiAxMDA2NDQKLS0tIGEvbGlua2VyL2FyY2gvYXJtL2JlZ2luLlMKKysrIGIvbGlua2VyL2FyY2gvYXJtL2JlZ2luLlMKQEAgLTI2LDIwICsyNiwxMiBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotCS50ZXh0Ci0JLmFsaWduIDQKLQkudHlwZSBfc3RhcnQsI2Z1bmN0aW9uCi0JLmdsb2JsIF9zdGFydAorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCi1fc3RhcnQ6Ci0JbW92CXIwLCBzcAotCW1vdglyMSwgIzAKLQlibAlfX2xpbmtlcl9pbml0CitFTlRSWShfc3RhcnQpCisgIG1vdiByMCwgc3AKKyAgYmwgX19saW5rZXJfaW5pdAogCi0JLyogbGlua2VyIGluaXQgcmV0dXJucyB0aGUgX2VudHJ5IGFkZHJlc3MgaW4gdGhlIG1haW4gaW1hZ2UgKi8KLQltb3YJcGMsIHIwCi0KLQkuc2VjdGlvbiAuY3RvcnMsICJ3YSIKLQkuZ2xvYmwgX19DVE9SX0xJU1RfXwotX19DVE9SX0xJU1RfXzoKLQkubG9uZyAtMQorICAvKiBsaW5rZXIgaW5pdCByZXR1cm5zIHRoZSBfZW50cnkgYWRkcmVzcyBpbiB0aGUgbWFpbiBpbWFnZSAqLworICBtb3YgcGMsIHIwCitFTkQoX3N0YXJ0KQpkaWZmIC0tZ2l0IGEvbGlua2VyL2FyY2gvYXJtNjQvYmVnaW4uUyBiL2xpbmtlci9hcmNoL2FybTY0L2JlZ2luLlMKaW5kZXggNTU2MThiNy4uYTZlYTU4MyAxMDA2NDQKLS0tIGEvbGlua2VyL2FyY2gvYXJtNjQvYmVnaW4uUworKysgYi9saW5rZXIvYXJjaC9hcm02NC9iZWdpbi5TCkBAIC0yNiwxMiArMjYsMTEgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2FzbS5oPgogCiBFTlRSWShfc3RhcnQpCiAgIG1vdiB4MCwgc3AKLSAgbW92IHgxLCB4enIKLSAgYmwgIF9fbGlua2VyX2luaXQKKyAgYmwgX19saW5rZXJfaW5pdAogCiAgIC8qIGxpbmtlciBpbml0IHJldHVybnMgdGhlIF9lbnRyeSBhZGRyZXNzIGluIHRoZSBtYWluIGltYWdlICovCiAgIGJyIHgwCmRpZmYgLS1naXQgYS9saW5rZXIvYXJjaC9taXBzL2JlZ2luLlMgYi9saW5rZXIvYXJjaC9taXBzL2JlZ2luLlMKaW5kZXggYjc4Mjk0Ny4uY2JlMWUzNyAxMDA2NDQKLS0tIGEvbGlua2VyL2FyY2gvbWlwcy9iZWdpbi5TCisrKyBiL2xpbmtlci9hcmNoL21pcHMvYmVnaW4uUwpAQCAtMzIsNyArMzIsOSBAQAogCiAgICAgLmVudCAgICBfX3N0YXJ0CiAgICAgLmdsb2JsICAgIF9fc3RhcnQKKyAgICAuZ2xvYmwgICAgX3N0YXJ0CiBfX3N0YXJ0OgorX3N0YXJ0OgogICAgIC5zZXQgICAgbm9yZW9yZGVyCiAgICAgYmFsICAgIDFmCiAgICAgbm9wCkBAIC0xMDAsOCArMTAyLDMgQEAKICAgICBhZGR1ICAgICRzcCwgNCo0ICAgICAgICAvKiByZXN0b3JlIHNwICovCiAgICAgaiAgICAkdDkKICAgICAuZW5kICAgIF9fc3RhcnQKLQotICAgIC5zZWN0aW9uIC5jdG9ycywgIndhIgotICAgIC5nbG9ibCBfX0NUT1JfTElTVF9fCi1fX0NUT1JfTElTVF9fOgotICAgIC5sb25nIC0xCmRpZmYgLS1naXQgYS9saW5rZXIvYXJjaC9taXBzNjQvYmVnaW4uUyBiL2xpbmtlci9hcmNoL21pcHM2NC9iZWdpbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNmI5NGEKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rZXIvYXJjaC9taXBzNjQvYmVnaW4uUwpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXNtLmg+CisKKyNpZiAoX01JUFNfU0lNID09IF9BQklPMzIpIHx8IChfTUlQU19TSU0gPT0gX0FCSTMyKQorI2RlZmluZSBFTEZfRFlOU1ogICAgICAgOAorI2RlZmluZSBFTEZfRFlOX1RBRyAgICAgMAorI2RlZmluZSBFTEZfRFlOX1ZBTCAgICAgNAorI2RlZmluZSBHT1RFTlRfU1ogICAgICAgNAorI2Vsc2UKKyNkZWZpbmUgRUxGX0RZTlNaICAgICAgIDE2CisjZGVmaW5lIEVMRl9EWU5fVEFHICAgICAwCisjZGVmaW5lIEVMRl9EWU5fVkFMICAgICA4CisjZGVmaW5lIEdPVEVOVF9TWiAgICAgICA4CisjZW5kaWYKKworICAgIC50ZXh0CisgICAgLmFsaWduCTQKKyAgICAudHlwZQlfX3N0YXJ0LEBmdW5jdGlvbgorCisgICAgLmVudAlfX3N0YXJ0CisgICAgLmdsb2JsCV9fc3RhcnQKKyAgICAuZ2xvYmwJX3N0YXJ0CitfX3N0YXJ0OgorX3N0YXJ0OgorICAgIC5zZXQJbm9yZW9yZGVyCisgICAgYmFsCQkxZgorICAgICBub3AKKzE6CisjaWYgKF9NSVBTX1NJTSA9PSBfQUJJTzMyKSB8fCAoX01JUFNfU0lNID09IF9BQkkzMikKKyAgICAuY3Bsb2FkCXJhCisjZWxzZQorICAgIC5jcHNldHVwCXJhLCAkMCwgMWIKKyNlbmRpZgorICAgIC5zZXQJcmVvcmRlcgorCisgICAgLyogRGlzY292ZXIgdGhlIGxvYWQgYWRkcmVzcyAqLworICAgIExBCQl0MCwgMWIKKyAgICBQVFJfU1VCVQl0MCwgcmEsIHQwCisKKyNkZWZpbmUgRFRfUExUR09UIDMKKyNkZWZpbmUgRFRfTUlQU19MT0NBTF9HT1ROTyAweDcwMDAwMDBhCisKKyAgICAvKiBTZWFyY2ggZHluYW1pYyB0YWJsZSBmb3IgRFRfTUlQU19MT0NBTF9HT1ROTyBhbmQgRFRfUExUR09UIHZhbHVlcyAqLworICAgIExBCQl0MSwgX0RZTkFNSUMKKyAgICBQVFJfQUREVQl0MSwgdDAKKyAgICBMSQkJdDMsIERUX1BMVEdPVAorICAgIExJCQl0YTAsIERUX01JUFNfTE9DQUxfR09UTk8KKzA6CisgICAgUkVHX0wJdDIsIEVMRl9EWU5fVEFHKHQxKQorICAgIGJlcXoJdDIsIC5McmVsb2NhdGVfbG9jYWxfZ290CisKKyAgICBibmUJCXQyLCB0MywgMWYJLyogRFRfUExUR09UPyAqLworICAgIFJFR19MCXMwLCBFTEZfRFlOX1ZBTCh0MSkKKyAgICBQVFJfQUREVQlzMCwgdDAKKyAgICBiCQkyZgorCisxOgorICAgIGJuZQkJdDIsIHRhMCwgMmYgICAgLyogRFRfTUlQU19MT0NBTF9HT1ROTz8gKi8KKyAgICBSRUdfTAlzMSwgRUxGX0RZTl9WQUwodDEpCisKKzI6ICBQVFJfQUREVSAgICB0MSwgRUxGX0RZTlNaCisgICAgYgkJMGIKKworLkxyZWxvY2F0ZV9sb2NhbF9nb3Q6CisgICAgLyoKKyAgICAgKiBSZWxvY2F0ZSB0aGUgbG9jYWwgR09UIGVudHJpZXMKKyAgICAgKiBnb3RbMF0gaXMgYWRkcmVzcyBvZiBsYXp5IHJlc29sdmVyIGZ1bmN0aW9uCisgICAgICogZ290WzFdIG1heSBiZSB1c2VkIGZvciBhIEdOVSBleHRlbnNpb24KKyAgICAgKi8KKworICAgIFBUUl9BRERVCXMwLCBHT1RFTlRfU1oKKyAgICBTVUJVCXMxLCAxCisgICAgUFRSX0wJdDEsIChzMCkKKyAgICBiZ2V6CXQxLCA5ZgorICAgIFBUUl9BRERVCXMwLCBHT1RFTlRfU1oKKyAgICBTVUJVCXMxLCAxCisgICAgYgkJOWYKKworMTogIFBUUl9MCXQxLCAoczApCisgICAgUFRSX0FERFUJdDEsIHQwCisgICAgUFRSX1MJdDEsIChzMCkKKyAgICBQVFJfQUREVQlzMCwgR09URU5UX1NaCis5OiAgU1VCVQlzMSwgMQorICAgIGJnZXoJczEsIDFiCisKKyAgICAvKiBjYWxsIGxpbmtlcl9pbml0ICovCisgICAgbW92ZQlhMCwgc3AKKyNpZiAoX01JUFNfU0lNID09IF9BQklPMzIpIHx8IChfTUlQU19TSU0gPT0gX0FCSTMyKQorICAgIFBUUl9TVUJVCXNwLCA0KlJFR1NaICAgICAgIC8qIHNwYWNlIGZvciBhcmcgc2F2ZXMgaW4gbGlua2VyX2luaXQgKi8KKyNlbmRpZgorICAgIGphbAkJX19saW5rZXJfaW5pdAorI2lmIChfTUlQU19TSU0gPT0gX0FCSU8zMikgfHwgKF9NSVBTX1NJTSA9PSBfQUJJMzIpCisgICAgUFRSX0FERFUJc3AsIDQqUkVHU1ogICAgICAgIC8qIHJlc3RvcmUgc3AgKi8KKyNlbmRpZgorICAgIG1vdmUJdDksIHYwCisgICAgagkJdDkKKyAgICAuZW5kICAgIF9fc3RhcnQKZGlmZiAtLWdpdCBhL2xpbmtlci9hcmNoL3g4Nl82NC9iZWdpbi5TIGIvbGlua2VyL2FyY2gveDg2XzY0L2JlZ2luLlMKaW5kZXggOWVjYWQxYS4uNzk0NWEzMSAxMDA2NDQKLS0tIGEvbGlua2VyL2FyY2gveDg2XzY0L2JlZ2luLlMKKysrIGIvbGlua2VyL2FyY2gveDg2XzY0L2JlZ2luLlMKQEAgLTI2LDEwICsyNiw5IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19hc20uaD4KIAogRU5UUlkoX3N0YXJ0KQotICAvKiBQYXNzIGVsZmRhdGEgdG8gX19saW5rZXJfaW5pdC4gKi8KICAgbW92ICVyc3AsICVyZGkKICAgY2FsbCBfX2xpbmtlcl9pbml0CiAKZGlmZiAtLWdpdCBhL2xpbmtlci9kZWJ1Z2dlci5jcHAgYi9saW5rZXIvZGVidWdnZXIuY3BwCmluZGV4IDkyZTlkYWMuLmMzMTYxNTEgMTAwNjQ0Ci0tLSBhL2xpbmtlci9kZWJ1Z2dlci5jcHAKKysrIGIvbGlua2VyL2RlYnVnZ2VyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImxpbmtlci5oIgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC00MCwxNSArNDEsMTkgQEAKIAogZXh0ZXJuICJDIiBpbnQgdGdraWxsKGludCB0Z2lkLCBpbnQgdGlkLCBpbnQgc2lnKTsKIAorI2lmIF9fTFA2NF9fCisjZGVmaW5lIERFQlVHR0VSX1NPQ0tFVF9OQU1FICJhbmRyb2lkOmRlYnVnZ2VyZDY0IgorI2Vsc2UKICNkZWZpbmUgREVCVUdHRVJfU09DS0VUX05BTUUgImFuZHJvaWQ6ZGVidWdnZXJkIgorI2VuZGlmCiAKIGVudW0gZGVidWdnZXJfYWN0aW9uX3QgewotICAgIC8vIGR1bXAgYSBjcmFzaAotICAgIERFQlVHR0VSX0FDVElPTl9DUkFTSCwKLSAgICAvLyBkdW1wIGEgdG9tYnN0b25lIGZpbGUKLSAgICBERUJVR0dFUl9BQ1RJT05fRFVNUF9UT01CU1RPTkUsCi0gICAgLy8gZHVtcCBhIGJhY2t0cmFjZSBvbmx5IGJhY2sgdG8gdGhlIHNvY2tldAotICAgIERFQlVHR0VSX0FDVElPTl9EVU1QX0JBQ0tUUkFDRSwKKyAgLy8gZHVtcCBhIGNyYXNoCisgIERFQlVHR0VSX0FDVElPTl9DUkFTSCwKKyAgLy8gZHVtcCBhIHRvbWJzdG9uZSBmaWxlCisgIERFQlVHR0VSX0FDVElPTl9EVU1QX1RPTUJTVE9ORSwKKyAgLy8gZHVtcCBhIGJhY2t0cmFjZSBvbmx5IGJhY2sgdG8gdGhlIHNvY2tldAorICBERUJVR0dFUl9BQ1RJT05fRFVNUF9CQUNLVFJBQ0UsCiB9OwogCiAvKiBtZXNzYWdlIHNlbnQgb3ZlciB0aGUgc29ja2V0ICovCkBAIC01OSw0NiArNjQsNDggQEAKIAogICAvLyB2ZXJzaW9uIDIgYWRkZWQ6CiAgIHVpbnRwdHJfdCBhYm9ydF9tc2dfYWRkcmVzczsKKworICAvLyB2ZXJzaW9uIDMgYWRkZWQ6CisgIGludDMyX3Qgb3JpZ2luYWxfc2lfY29kZTsKIH07CiAKIC8vIHNlZSBtYW4oMikgcHJjdGwsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBhYm91dCBQUl9HRVRfTkFNRQogI2RlZmluZSBNQVhfVEFTS19OQU1FX0xFTiAoMTYpCiAKIHN0YXRpYyBpbnQgc29ja2V0X2Fic3RyYWN0X2NsaWVudChjb25zdCBjaGFyKiBuYW1lLCBpbnQgdHlwZSkgewotICAgIHNvY2thZGRyX3VuIGFkZHI7CisgIHNvY2thZGRyX3VuIGFkZHI7CiAKLSAgICAvLyBUZXN0IHdpdGggbGVuZ3RoICsxIGZvciB0aGUgKmluaXRpYWwqICdcMCcuCi0gICAgc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7Ci0gICAgaWYgKChuYW1lbGVuICsgMSkgPiBzaXplb2YoYWRkci5zdW5fcGF0aCkpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisgIC8vIFRlc3Qgd2l0aCBsZW5ndGggKzEgZm9yIHRoZSAqaW5pdGlhbCogJ1wwJy4KKyAgc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisgIGlmICgobmFtZWxlbiArIDEpID4gc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIC0xOworICB9CiAKLSAgICAvKiBUaGlzIGlzIHVzZWQgZm9yIGFic3RyYWN0IHNvY2tldCBuYW1lc3BhY2UsIHdlIG5lZWQKLSAgICAgKiBhbiBpbml0aWFsICdcMCcgYXQgdGhlIHN0YXJ0IG9mIHRoZSBVbml4IHNvY2tldCBwYXRoLgotICAgICAqCi0gICAgICogTm90ZTogVGhlIHBhdGggaW4gdGhpcyBjYXNlIGlzICpub3QqIHN1cHBvc2VkIHRvIGJlCi0gICAgICogJ1wwJy10ZXJtaW5hdGVkLiAoIm1hbiA3IHVuaXgiIGZvciB0aGUgZ29yeSBkZXRhaWxzLikKLSAgICAgKi8KLSAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7Ci0gICAgYWRkci5zdW5fZmFtaWx5ID0gQUZfTE9DQUw7Ci0gICAgYWRkci5zdW5fcGF0aFswXSA9IDA7Ci0gICAgbWVtY3B5KGFkZHIuc3VuX3BhdGggKyAxLCBuYW1lLCBuYW1lbGVuKTsKKyAgLy8gVGhpcyBpcyB1c2VkIGZvciBhYnN0cmFjdCBzb2NrZXQgbmFtZXNwYWNlLCB3ZSBuZWVkCisgIC8vIGFuIGluaXRpYWwgJ1wwJyBhdCB0aGUgc3RhcnQgb2YgdGhlIFVuaXggc29ja2V0IHBhdGguCisgIC8vCisgIC8vIE5vdGU6IFRoZSBwYXRoIGluIHRoaXMgY2FzZSBpcyAqbm90KiBzdXBwb3NlZCB0byBiZQorICAvLyAnXDAnLXRlcm1pbmF0ZWQuICgibWFuIDcgdW5peCIgZm9yIHRoZSBnb3J5IGRldGFpbHMuKQorICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX0xPQ0FMOworICBhZGRyLnN1bl9wYXRoWzBdID0gMDsKKyAgbWVtY3B5KGFkZHIuc3VuX3BhdGggKyAxLCBuYW1lLCBuYW1lbGVuKTsKIAotICAgIHNvY2tsZW5fdCBhbGVuID0gbmFtZWxlbiArIG9mZnNldG9mKHNvY2thZGRyX3VuLCBzdW5fcGF0aCkgKyAxOworICBzb2NrbGVuX3QgYWxlbiA9IG5hbWVsZW4gKyBvZmZzZXRvZihzb2NrYWRkcl91biwgc3VuX3BhdGgpICsgMTsKIAotICAgIGludCBzID0gc29ja2V0KEFGX0xPQ0FMLCB0eXBlLCAwKTsKLSAgICBpZiAocyA9PSAtMSkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICBpbnQgcyA9IHNvY2tldChBRl9MT0NBTCwgdHlwZSwgMCk7CisgIGlmIChzID09IC0xKSB7CisgICAgcmV0dXJuIC0xOworICB9CiAKLSAgICBpbnQgZXJyID0gVEVNUF9GQUlMVVJFX1JFVFJZKGNvbm5lY3QocywgcmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcio+KCZhZGRyKSwgYWxlbikpOwotICAgIGlmIChlcnIgPT0gLTEpIHsKLSAgICAgICAgY2xvc2Uocyk7Ci0gICAgICAgIHMgPSAtMTsKLSAgICB9CisgIGludCByYyA9IFRFTVBfRkFJTFVSRV9SRVRSWShjb25uZWN0KHMsIHJlaW50ZXJwcmV0X2Nhc3Q8c29ja2FkZHIqPigmYWRkciksIGFsZW4pKTsKKyAgaWYgKHJjID09IC0xKSB7CisgICAgY2xvc2Uocyk7CisgICAgcmV0dXJuIC0xOworICB9CiAKLSAgICByZXR1cm4gczsKKyAgcmV0dXJuIHM7CiB9CiAKIC8qCkBAIC0xMTEsMTU4ICsxMTgsMTkyIEBACiAgKiBjb3VsZCBhbGxvY2F0ZSBtZW1vcnkgb3IgaG9sZCBhIGxvY2suCiAgKi8KIHN0YXRpYyB2b2lkIGxvZ19zaWduYWxfc3VtbWFyeShpbnQgc2lnbnVtLCBjb25zdCBzaWdpbmZvX3QqIGluZm8pIHsKLSAgICBjb25zdCBjaGFyKiBzaWduYWxfbmFtZTsKLSAgICBzd2l0Y2ggKHNpZ251bSkgewotICAgICAgICBjYXNlIFNJR0lMTDogICAgc2lnbmFsX25hbWUgPSAiU0lHSUxMIjsgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNJR0FCUlQ6ICAgc2lnbmFsX25hbWUgPSAiU0lHQUJSVCI7ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNJR0JVUzogICAgc2lnbmFsX25hbWUgPSAiU0lHQlVTIjsgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNJR0ZQRTogICAgc2lnbmFsX25hbWUgPSAiU0lHRlBFIjsgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNJR1NFR1Y6ICAgc2lnbmFsX25hbWUgPSAiU0lHU0VHViI7ICAgIGJyZWFrOworICBjb25zdCBjaGFyKiBzaWduYWxfbmFtZSA9ICI/Pz8iOworICBib29sIGhhc19hZGRyZXNzID0gZmFsc2U7CisgIHN3aXRjaCAoc2lnbnVtKSB7CisgICAgY2FzZSBTSUdBQlJUOgorICAgICAgc2lnbmFsX25hbWUgPSAiU0lHQUJSVCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNJR0JVUzoKKyAgICAgIHNpZ25hbF9uYW1lID0gIlNJR0JVUyI7CisgICAgICBoYXNfYWRkcmVzcyA9IHRydWU7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNJR0ZQRToKKyAgICAgIHNpZ25hbF9uYW1lID0gIlNJR0ZQRSI7CisgICAgICBoYXNfYWRkcmVzcyA9IHRydWU7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNJR0lMTDoKKyAgICAgIHNpZ25hbF9uYW1lID0gIlNJR0lMTCI7CisgICAgICBoYXNfYWRkcmVzcyA9IHRydWU7CisgICAgICBicmVhazsKKyAgICBjYXNlIFNJR1BJUEU6CisgICAgICBzaWduYWxfbmFtZSA9ICJTSUdQSVBFIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgU0lHU0VHVjoKKyAgICAgIHNpZ25hbF9uYW1lID0gIlNJR1NFR1YiOworICAgICAgaGFzX2FkZHJlc3MgPSB0cnVlOworICAgICAgYnJlYWs7CiAjaWYgZGVmaW5lZChTSUdTVEtGTFQpCi0gICAgICAgIGNhc2UgU0lHU1RLRkxUOiBzaWduYWxfbmFtZSA9ICJTSUdTVEtGTFQiOyAgYnJlYWs7CisgICAgY2FzZSBTSUdTVEtGTFQ6CisgICAgICBzaWduYWxfbmFtZSA9ICJTSUdTVEtGTFQiOworICAgICAgYnJlYWs7CiAjZW5kaWYKLSAgICAgICAgY2FzZSBTSUdQSVBFOiAgIHNpZ25hbF9uYW1lID0gIlNJR1BJUEUiOyAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogICAgICAgIHNpZ25hbF9uYW1lID0gIj8/PyI7ICAgICAgICBicmVhazsKLSAgICB9CisgICAgY2FzZSBTSUdUUkFQOgorICAgICAgc2lnbmFsX25hbWUgPSAiU0lHVFJBUCI7CisgICAgICBicmVhazsKKyAgfQogCi0gICAgY2hhciB0aHJlYWRfbmFtZVtNQVhfVEFTS19OQU1FX0xFTiArIDFdOyAvLyBvbmUgbW9yZSBmb3IgdGVybWluYXRpb24KLSAgICBpZiAocHJjdGwoUFJfR0VUX05BTUUsICh1bnNpZ25lZCBsb25nKXRocmVhZF9uYW1lLCAwLCAwLCAwKSAhPSAwKSB7Ci0gICAgICAgIHN0cmNweSh0aHJlYWRfbmFtZSwgIjxuYW1lIHVua25vd24+Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gc2hvcnQgbmFtZXMgYXJlIG51bGwgdGVybWluYXRlZCBieSBwcmN0bCwgYnV0IHRoZSBtYW4gcGFnZQotICAgICAgICAvLyBpbXBsaWVzIHRoYXQgMTYgYnl0ZSBuYW1lcyBhcmUgbm90LgotICAgICAgICB0aHJlYWRfbmFtZVtNQVhfVEFTS19OQU1FX0xFTl0gPSAwOwotICAgIH0KKyAgY2hhciB0aHJlYWRfbmFtZVtNQVhfVEFTS19OQU1FX0xFTiArIDFdOyAvLyBvbmUgbW9yZSBmb3IgdGVybWluYXRpb24KKyAgaWYgKHByY3RsKFBSX0dFVF9OQU1FLCAodW5zaWduZWQgbG9uZyl0aHJlYWRfbmFtZSwgMCwgMCwgMCkgIT0gMCkgeworICAgIHN0cmNweSh0aHJlYWRfbmFtZSwgIjxuYW1lIHVua25vd24+Iik7CisgIH0gZWxzZSB7CisgICAgLy8gc2hvcnQgbmFtZXMgYXJlIG51bGwgdGVybWluYXRlZCBieSBwcmN0bCwgYnV0IHRoZSBtYW4gcGFnZQorICAgIC8vIGltcGxpZXMgdGhhdCAxNiBieXRlIG5hbWVzIGFyZSBub3QuCisgICAgdGhyZWFkX25hbWVbTUFYX1RBU0tfTkFNRV9MRU5dID0gMDsKKyAgfQogCi0gICAgLy8gImluZm8iIHdpbGwgYmUgTlVMTCBpZiB0aGUgc2lnaW5mb190IGluZm9ybWF0aW9uIHdhcyBub3QgYXZhaWxhYmxlLgotICAgIGlmIChpbmZvICE9IE5VTEwpIHsKLSAgICAgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfRkFUQUwsICJsaWJjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhdGFsIHNpZ25hbCAlZCAoJXMpIGF0ICVwIChjb2RlPSVkKSwgdGhyZWFkICVkICglcykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdudW0sIHNpZ25hbF9uYW1lLCBpbmZvLT5zaV9hZGRyLCBpbmZvLT5zaV9jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0aWQoKSwgdGhyZWFkX25hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0ZBVEFMLCAibGliYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJGYXRhbCBzaWduYWwgJWQgKCVzKSwgdGhyZWFkICVkICglcykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdudW0sIHNpZ25hbF9uYW1lLCBnZXR0aWQoKSwgdGhyZWFkX25hbWUpOworICAvLyAiaW5mbyIgd2lsbCBiZSBOVUxMIGlmIHRoZSBzaWdpbmZvX3QgaW5mb3JtYXRpb24gd2FzIG5vdCBhdmFpbGFibGUuCisgIC8vIE1hbnkgc2lnbmFscyBkb24ndCBoYXZlIGFuIGFkZHJlc3Mgb3IgYSBjb2RlLgorICBjaGFyIGNvZGVfZGVzY1szMl07IC8vICIsIGNvZGUgLTYiCisgIGNoYXIgYWRkcl9kZXNjWzMyXTsgLy8gIiwgZmF1bHQgYWRkciAweDEyMzQiCisgIGFkZHJfZGVzY1swXSA9IGNvZGVfZGVzY1swXSA9IDA7CisgIGlmIChpbmZvICE9IE5VTEwpIHsKKyAgICAvLyBGb3IgYSByZXRocm93biBzaWduYWwsIHRoaXMgc2lfY29kZSB3aWxsIGJlIHJpZ2h0IGFuZCB0aGUgb25lIGRlYnVnZ2VyZCBzaG93cyB3aWxsCisgICAgLy8gYWx3YXlzIGJlIFNJX1RLSUxMLgorICAgIF9fbGliY19mb3JtYXRfYnVmZmVyKGNvZGVfZGVzYywgc2l6ZW9mKGNvZGVfZGVzYyksICIsIGNvZGUgJWQiLCBpbmZvLT5zaV9jb2RlKTsKKyAgICBpZiAoaGFzX2FkZHJlc3MpIHsKKyAgICAgIF9fbGliY19mb3JtYXRfYnVmZmVyKGFkZHJfZGVzYywgc2l6ZW9mKGFkZHJfZGVzYyksICIsIGZhdWx0IGFkZHIgJXAiLCBpbmZvLT5zaV9hZGRyKTsKICAgICB9CisgIH0KKyAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfRkFUQUwsICJsaWJjIiwKKyAgICAgICAgICAgICAgICAgICAgIkZhdGFsIHNpZ25hbCAlZCAoJXMpJXMlcyBpbiB0aWQgJWQgKCVzKSIsCisgICAgICAgICAgICAgICAgICAgIHNpZ251bSwgc2lnbmFsX25hbWUsIGNvZGVfZGVzYywgYWRkcl9kZXNjLCBnZXR0aWQoKSwgdGhyZWFkX25hbWUpOwogfQogCiAvKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSBoYW5kbGVyIGZvciBzaWduYWwgInNpZ251bSIgaGFzIFNBX1NJR0lORk8gc2V0LgogICovCiBzdGF0aWMgYm9vbCBoYXZlX3NpZ2luZm8oaW50IHNpZ251bSkgewotICAgIHN0cnVjdCBzaWdhY3Rpb24gb2xkX2FjdGlvbiwgbmV3X2FjdGlvbjsKKyAgc3RydWN0IHNpZ2FjdGlvbiBvbGRfYWN0aW9uLCBuZXdfYWN0aW9uOwogCi0gICAgbWVtc2V0KCZuZXdfYWN0aW9uLCAwLCBzaXplb2YobmV3X2FjdGlvbikpOwotICAgIG5ld19hY3Rpb24uc2FfaGFuZGxlciA9IFNJR19ERkw7Ci0gICAgbmV3X2FjdGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7Ci0gICAgc2lnZW1wdHlzZXQoJm5ld19hY3Rpb24uc2FfbWFzayk7CisgIG1lbXNldCgmbmV3X2FjdGlvbiwgMCwgc2l6ZW9mKG5ld19hY3Rpb24pKTsKKyAgbmV3X2FjdGlvbi5zYV9oYW5kbGVyID0gU0lHX0RGTDsKKyAgbmV3X2FjdGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisgIHNpZ2VtcHR5c2V0KCZuZXdfYWN0aW9uLnNhX21hc2spOwogCi0gICAgaWYgKHNpZ2FjdGlvbihzaWdudW0sICZuZXdfYWN0aW9uLCAmb2xkX2FjdGlvbikgPCAwKSB7Ci0gICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19XQVJOLCAibGliYyIsICJGYWlsZWQgdGVzdGluZyBmb3IgU0FfU0lHSU5GTzogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgYm9vbCByZXN1bHQgPSAob2xkX2FjdGlvbi5zYV9mbGFncyAmIFNBX1NJR0lORk8pICE9IDA7CisgIGlmIChzaWdhY3Rpb24oc2lnbnVtLCAmbmV3X2FjdGlvbiwgJm9sZF9hY3Rpb24pIDwgMCkgeworICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX1dBUk4sICJsaWJjIiwgIkZhaWxlZCB0ZXN0aW5nIGZvciBTQV9TSUdJTkZPOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgYm9vbCByZXN1bHQgPSAob2xkX2FjdGlvbi5zYV9mbGFncyAmIFNBX1NJR0lORk8pICE9IDA7CiAKLSAgICBpZiAoc2lnYWN0aW9uKHNpZ251bSwgJm9sZF9hY3Rpb24sIE5VTEwpID09IC0xKSB7Ci0gICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19XQVJOLCAibGliYyIsICJSZXN0b3JlIGZhaWxlZCBpbiB0ZXN0IGZvciBTQV9TSUdJTkZPOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICBpZiAoc2lnYWN0aW9uKHNpZ251bSwgJm9sZF9hY3Rpb24sIE5VTEwpID09IC0xKSB7CisgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfV0FSTiwgImxpYmMiLCAiUmVzdG9yZSBmYWlsZWQgaW4gdGVzdCBmb3IgU0FfU0lHSU5GTzogJXMiLAorICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgc2VuZF9kZWJ1Z2dlcmRfcGFja2V0KHNpZ2luZm9fdCogaW5mbykgeworICBpZiAocHJjdGwoUFJfR0VUX0RVTVBBQkxFLCAwLCAwLCAwLCAwKSA9PSAwKSB7CisgICAgLy8gcHJvY2VzcyBoYXMgZGlzYWJsZWQgY29yZSBkdW1wcyBhbmQgUFRSQUNFX0FUVEFDSCwgYW5kIGRvZXMgbm90IHdhbnQgdG8gYmUgZHVtcGVkLgorICAgIC8vIEhvbm9yIHRoYXQgaW50ZW50aW9uIGJ5IG5vdCBjb25uZWN0aW5nIHRvIGRlYnVnZ2VyZCBhbmQgYXNraW5nIGl0CisgICAgLy8gdG8gZHVtcCBvdXIgaW50ZXJuYWwgc3RhdGUuCisgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfSU5GTywgImxpYmMiLAorICAgICAgICAgICAgICAgICAgICAgICJTdXBwcmVzc2luZyBkZWJ1Z2dlcmQgb3V0cHV0IGJlY2F1c2UgcHJjdGwoUFJfR0VUX0RVTVBBQkxFKT09MCIpOworICAgIHJldHVybjsKKyAgfQorCisgIGludCBzID0gc29ja2V0X2Fic3RyYWN0X2NsaWVudChERUJVR0dFUl9TT0NLRVRfTkFNRSwgU09DS19TVFJFQU0pOworICBpZiAocyA9PSAtMSkgeworICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0ZBVEFMLCAibGliYyIsICJVbmFibGUgdG8gb3BlbiBjb25uZWN0aW9uIHRvIGRlYnVnZ2VyZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gZGVidWdnZXJkIGtub3dzIG91ciBwaWQgZnJvbSB0aGUgY3JlZGVudGlhbHMgb24gdGhlCisgIC8vIGxvY2FsIHNvY2tldCBidXQgd2UgbmVlZCB0byB0ZWxsIGl0IHRoZSB0aWQgb2YgdGhlIGNyYXNoaW5nIHRocmVhZC4KKyAgLy8gZGVidWdnZXJkIHdpbGwgYmUgcGFyYW5vaWQgYW5kIHZlcmlmeSB0aGF0IHdlIHNlbnQgYSB0aWQKKyAgLy8gdGhhdCdzIGFjdHVhbGx5IGluIG91ciBwcm9jZXNzLgorICBkZWJ1Z2dlcl9tc2dfdCBtc2c7CisgIG1zZy5hY3Rpb24gPSBERUJVR0dFUl9BQ1RJT05fQ1JBU0g7CisgIG1zZy50aWQgPSBnZXR0aWQoKTsKKyAgbXNnLmFib3J0X21zZ19hZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGdfYWJvcnRfbWVzc2FnZSk7CisgIG1zZy5vcmlnaW5hbF9zaV9jb2RlID0gKGluZm8gIT0gTlVMTCkgPyBpbmZvLT5zaV9jb2RlIDogMDsKKyAgaW50IHJldCA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZShzLCAmbXNnLCBzaXplb2YobXNnKSkpOworICBpZiAocmV0ID09IHNpemVvZihtc2cpKSB7CisgICAgY2hhciBkZWJ1Z2dlcmRfYWNrOworICAgIHJldCA9IFRFTVBfRkFJTFVSRV9SRVRSWShyZWFkKHMsICZkZWJ1Z2dlcmRfYWNrLCAxKSk7CisgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisgICAgbm90aWZ5X2dkYl9vZl9saWJyYXJpZXMoKTsKKyAgICBlcnJubyA9IHNhdmVkX2Vycm5vOworICB9IGVsc2UgeworICAgIC8vIHJlYWQgb3Igd3JpdGUgZmFpbGVkIC0tIGJyb2tlbiBjb25uZWN0aW9uPworICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0ZBVEFMLCAibGliYyIsICJGYWlsZWQgd2hpbGUgdGFsa2luZyB0byBkZWJ1Z2dlcmQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICB9CisKKyAgY2xvc2Uocyk7CiB9CiAKIC8qCiAgKiBDYXRjaGVzIGZhdGFsIHNpZ25hbHMgc28gd2UgY2FuIGFzayBkZWJ1Z2dlcmQgdG8gcHRyYWNlIHVzIGJlZm9yZQogICogd2UgY3Jhc2guCiAgKi8KLXZvaWQgZGVidWdnZXJkX3NpZ25hbF9oYW5kbGVyKGludCBuLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqKSB7Ci0gICAgLyoKLSAgICAgKiBJdCdzIHBvc3NpYmxlIHNvbWVib2R5IGNsZWFyZWQgdGhlIFNBX1NJR0lORk8gZmxhZywgd2hpY2ggd291bGQgbWVhbgotICAgICAqIG91ciAiaW5mbyIgYXJnIGhvbGRzIGFuIHVuZGVmaW5lZCB2YWx1ZS4KLSAgICAgKi8KLSAgICBpZiAoIWhhdmVfc2lnaW5mbyhuKSkgewotICAgICAgICBpbmZvID0gTlVMTDsKLSAgICB9CitzdGF0aWMgdm9pZCBkZWJ1Z2dlcmRfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25hbF9udW1iZXIsIHNpZ2luZm9fdCogaW5mbywgdm9pZCopIHsKKyAgLy8gSXQncyBwb3NzaWJsZSBzb21lYm9keSBjbGVhcmVkIHRoZSBTQV9TSUdJTkZPIGZsYWcsIHdoaWNoIHdvdWxkIG1lYW4KKyAgLy8gb3VyICJpbmZvIiBhcmcgaG9sZHMgYW4gdW5kZWZpbmVkIHZhbHVlLgorICBpZiAoIWhhdmVfc2lnaW5mbyhzaWduYWxfbnVtYmVyKSkgeworICAgIGluZm8gPSBOVUxMOworICB9CiAKLSAgICBsb2dfc2lnbmFsX3N1bW1hcnkobiwgaW5mbyk7CisgIGxvZ19zaWduYWxfc3VtbWFyeShzaWduYWxfbnVtYmVyLCBpbmZvKTsKIAotICAgIHBpZF90IHRpZCA9IGdldHRpZCgpOwotICAgIGludCBzID0gc29ja2V0X2Fic3RyYWN0X2NsaWVudChERUJVR0dFUl9TT0NLRVRfTkFNRSwgU09DS19TVFJFQU0pOworICBzZW5kX2RlYnVnZ2VyZF9wYWNrZXQoaW5mbyk7CiAKLSAgICBpZiAocyA+PSAwKSB7Ci0gICAgICAgIC8vIGRlYnVnZ2VyZCBrbm93cyBvdXIgcGlkIGZyb20gdGhlIGNyZWRlbnRpYWxzIG9uIHRoZQotICAgICAgICAvLyBsb2NhbCBzb2NrZXQgYnV0IHdlIG5lZWQgdG8gdGVsbCBpdCB0aGUgdGlkIG9mIHRoZSBjcmFzaGluZyB0aHJlYWQuCi0gICAgICAgIC8vIGRlYnVnZ2VyZCB3aWxsIGJlIHBhcmFub2lkIGFuZCB2ZXJpZnkgdGhhdCB3ZSBzZW50IGEgdGlkCi0gICAgICAgIC8vIHRoYXQncyBhY3R1YWxseSBpbiBvdXIgcHJvY2Vzcy4KLSAgICAgICAgZGVidWdnZXJfbXNnX3QgbXNnOwotICAgICAgICBtc2cuYWN0aW9uID0gREVCVUdHRVJfQUNUSU9OX0NSQVNIOwotICAgICAgICBtc2cudGlkID0gdGlkOwotICAgICAgICBtc2cuYWJvcnRfbXNnX2FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZ0Fib3J0TWVzc2FnZSk7Ci0gICAgICAgIGludCByZXQgPSBURU1QX0ZBSUxVUkVfUkVUUlkod3JpdGUocywgJm1zZywgc2l6ZW9mKG1zZykpKTsKLSAgICAgICAgaWYgKHJldCA9PSBzaXplb2YobXNnKSkgewotICAgICAgICAgICAgLy8gaWYgdGhlIHdyaXRlIGZhaWxlZCwgdGhlcmUgaXMgbm8gcG9pbnQgdHJ5aW5nIHRvIHJlYWQgYSByZXNwb25zZS4KLSAgICAgICAgICAgIHJldCA9IFRFTVBfRkFJTFVSRV9SRVRSWShyZWFkKHMsICZ0aWQsIDEpKTsKLSAgICAgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVycm5vOwotICAgICAgICAgICAgbm90aWZ5X2dkYl9vZl9saWJyYXJpZXMoKTsKLSAgICAgICAgICAgIGVycm5vID0gc2F2ZWRfZXJybm87Ci0gICAgICAgIH0KKyAgLy8gUmVtb3ZlIG91ciBuZXQgc28gd2UgZmF1bHQgZm9yIHJlYWwgd2hlbiB3ZSByZXR1cm4uCisgIHNpZ25hbChzaWduYWxfbnVtYmVyLCBTSUdfREZMKTsKIAotICAgICAgICBpZiAocmV0IDwgMCkgewotICAgICAgICAgICAgLyogcmVhZCBvciB3cml0ZSBmYWlsZWQgLS0gYnJva2VuIGNvbm5lY3Rpb24/ICovCi0gICAgICAgICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19GQVRBTCwgImxpYmMiLCAiRmFpbGVkIHdoaWxlIHRhbGtpbmcgdG8gZGVidWdnZXJkOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2xvc2Uocyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogc29ja2V0IGZhaWxlZDsgbWF5YmUgcHJvY2VzcyByYW4gb3V0IG9mIGZkcyAqLwotICAgICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19GQVRBTCwgImxpYmMiLCAiVW5hYmxlIHRvIG9wZW4gY29ubmVjdGlvbiB0byBkZWJ1Z2dlcmQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKLSAgICB9Ci0KLSAgICAvKiByZW1vdmUgb3VyIG5ldCBzbyB3ZSBmYXVsdCBmb3IgcmVhbCB3aGVuIHdlIHJldHVybiAqLwotICAgIHNpZ25hbChuLCBTSUdfREZMKTsKLQotICAgIC8qCi0gICAgICogVGhlc2Ugc2lnbmFscyBhcmUgbm90IHJlLXRocm93biB3aGVuIHdlIHJlc3VtZS4gIFRoaXMgbWVhbnMgdGhhdAotICAgICAqIGNyYXNoaW5nIGR1ZSB0byAoc2F5KSBTSUdQSVBFIGRvZXNuJ3Qgd29yayB0aGUgd2F5IHlvdSdkIGV4cGVjdCBpdAotICAgICAqIHRvLiAgV2Ugd29yayBhcm91bmQgdGhpcyBieSB0aHJvd2luZyB0aGVtIG1hbnVhbGx5LiAgV2UgZG9uJ3Qgd2FudAotICAgICAqIHRvIGRvIHRoaXMgZm9yICphbGwqIHNpZ25hbHMgYmVjYXVzZSBpdCdsbCBzY3JldyB1cCB0aGUgYWRkcmVzcyBmb3IKLSAgICAgKiBmYXVsdHMgbGlrZSBTSUdTRUdWLgotICAgICAqLwotICAgIHN3aXRjaCAobikgewotICAgICAgICBjYXNlIFNJR0FCUlQ6Ci0gICAgICAgIGNhc2UgU0lHRlBFOgotICAgICAgICBjYXNlIFNJR1BJUEU6CisgIC8vIFRoZXNlIHNpZ25hbHMgYXJlIG5vdCByZS10aHJvd24gd2hlbiB3ZSByZXN1bWUuICBUaGlzIG1lYW5zIHRoYXQKKyAgLy8gY3Jhc2hpbmcgZHVlIHRvIChzYXkpIFNJR1BJUEUgZG9lc24ndCB3b3JrIHRoZSB3YXkgeW91J2QgZXhwZWN0IGl0CisgIC8vIHRvLiAgV2Ugd29yayBhcm91bmQgdGhpcyBieSB0aHJvd2luZyB0aGVtIG1hbnVhbGx5LiAgV2UgZG9uJ3Qgd2FudAorICAvLyB0byBkbyB0aGlzIGZvciAqYWxsKiBzaWduYWxzIGJlY2F1c2UgaXQnbGwgc2NyZXcgdXAgdGhlIHNpX2FkZHIgZm9yCisgIC8vIGZhdWx0cyBsaWtlIFNJR1NFR1YuIEl0IGRvZXMgc2NyZXcgdXAgdGhlIHNpX2NvZGUsIHdoaWNoIGlzIHdoeSB3ZQorICAvLyBwYXNzZWQgdGhhdCB0byBkZWJ1Z2dlcmQgYWJvdmUuCisgIHN3aXRjaCAoc2lnbmFsX251bWJlcikgeworICAgIGNhc2UgU0lHQUJSVDoKKyAgICBjYXNlIFNJR0ZQRToKKyAgICBjYXNlIFNJR1BJUEU6CiAjaWYgZGVmaW5lZChTSUdTVEtGTFQpCi0gICAgICAgIGNhc2UgU0lHU1RLRkxUOgorICAgIGNhc2UgU0lHU1RLRkxUOgogI2VuZGlmCi0gICAgICAgICAgICAodm9pZCkgdGdraWxsKGdldHBpZCgpLCBnZXR0aWQoKSwgbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogICAgLy8gU0lHSUxMLCBTSUdCVVMsIFNJR1NFR1YKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBjYXNlIFNJR1RSQVA6CisgICAgICB0Z2tpbGwoZ2V0cGlkKCksIGdldHRpZCgpLCBzaWduYWxfbnVtYmVyKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6ICAgIC8vIFNJR0lMTCwgU0lHQlVTLCBTSUdTRUdWCisgICAgICBicmVhazsKKyAgfQogfQogCi12b2lkIGRlYnVnZ2VyZF9pbml0KCkgewotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotICAgIG1lbXNldCgmYWN0aW9uLCAwLCBzaXplb2YoYWN0aW9uKSk7Ci0gICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gZGVidWdnZXJkX3NpZ25hbF9oYW5kbGVyOwotICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZPOworX19MSUJDX0hJRERFTl9fIHZvaWQgZGVidWdnZXJkX2luaXQoKSB7CisgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICBtZW1zZXQoJmFjdGlvbiwgMCwgc2l6ZW9mKGFjdGlvbikpOworICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOworICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gZGVidWdnZXJkX3NpZ25hbF9oYW5kbGVyOworICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTzsKIAotICAgIC8vIFVzZSB0aGUgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayBpZiBhdmFpbGFibGUgc28gd2UgY2FuIGNhdGNoIHN0YWNrIG92ZXJmbG93cy4KLSAgICBhY3Rpb24uc2FfZmxhZ3MgfD0gU0FfT05TVEFDSzsKKyAgLy8gVXNlIHRoZSBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIGlmIGF2YWlsYWJsZSBzbyB3ZSBjYW4gY2F0Y2ggc3RhY2sgb3ZlcmZsb3dzLgorICBhY3Rpb24uc2FfZmxhZ3MgfD0gU0FfT05TVEFDSzsKIAotICAgIHNpZ2FjdGlvbihTSUdBQlJULCAmYWN0aW9uLCBOVUxMKTsKLSAgICBzaWdhY3Rpb24oU0lHQlVTLCAmYWN0aW9uLCBOVUxMKTsKLSAgICBzaWdhY3Rpb24oU0lHRlBFLCAmYWN0aW9uLCBOVUxMKTsKLSAgICBzaWdhY3Rpb24oU0lHSUxMLCAmYWN0aW9uLCBOVUxMKTsKLSAgICBzaWdhY3Rpb24oU0lHUElQRSwgJmFjdGlvbiwgTlVMTCk7Ci0gICAgc2lnYWN0aW9uKFNJR1NFR1YsICZhY3Rpb24sIE5VTEwpOworICBzaWdhY3Rpb24oU0lHQUJSVCwgJmFjdGlvbiwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdCVVMsICZhY3Rpb24sIE5VTEwpOworICBzaWdhY3Rpb24oU0lHRlBFLCAmYWN0aW9uLCBOVUxMKTsKKyAgc2lnYWN0aW9uKFNJR0lMTCwgJmFjdGlvbiwgTlVMTCk7CisgIHNpZ2FjdGlvbihTSUdQSVBFLCAmYWN0aW9uLCBOVUxMKTsKKyAgc2lnYWN0aW9uKFNJR1NFR1YsICZhY3Rpb24sIE5VTEwpOwogI2lmIGRlZmluZWQoU0lHU1RLRkxUKQotICAgIHNpZ2FjdGlvbihTSUdTVEtGTFQsICZhY3Rpb24sIE5VTEwpOworICBzaWdhY3Rpb24oU0lHU1RLRkxULCAmYWN0aW9uLCBOVUxMKTsKICNlbmRpZgotICAgIHNpZ2FjdGlvbihTSUdUUkFQLCAmYWN0aW9uLCBOVUxMKTsKKyAgc2lnYWN0aW9uKFNJR1RSQVAsICZhY3Rpb24sIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvbGlua2VyL2RsZmNuLmNwcCBiL2xpbmtlci9kbGZjbi5jcHAKaW5kZXggMWU5ZDliYy4uNWQ2ZGI4ZSAxMDA2NDQKLS0tIGEvbGlua2VyL2RsZmNuLmNwcAorKysgYi9saW5rZXIvZGxmY24uY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8YW5kcm9pZC9kbGV4dC5oPgogCiAjaW5jbHVkZSA8YmlvbmljL3B0aHJlYWRfaW50ZXJuYWwuaD4KICNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190bHMuaCIKQEAgLTI4LDcgKzI5LDcgQEAKIAogLyogVGhpcyBmaWxlIGhpamFja3MgdGhlIHN5bWJvbHMgc3R1YmJlZCBvdXQgaW4gbGliZGwuc28uICovCiAKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgZ0RsTXV0ZXggPSBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUjsKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ19kbF9tdXRleCA9IFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSOwogCiBzdGF0aWMgY29uc3QgY2hhciogX19iaW9uaWNfc2V0X2RsZXJyb3IoY2hhciogbmV3X3ZhbHVlKSB7CiAgIGNoYXIqKiBkbGVycm9yX3Nsb3QgPSAmcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KF9fZ2V0X3RscygpKVtUTFNfU0xPVF9ETEVSUk9SXTsKQEAgLTU1LDE4ICs1NiwxOCBAQAogfQogCiB2b2lkIGFuZHJvaWRfZ2V0X0xEX0xJQlJBUllfUEFUSChjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkgewotICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnRGxNdXRleCk7CisgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdfZGxfbXV0ZXgpOwogICBkb19hbmRyb2lkX2dldF9MRF9MSUJSQVJZX1BBVEgoYnVmZmVyLCBidWZmZXJfc2l6ZSk7CiB9CiAKIHZvaWQgYW5kcm9pZF91cGRhdGVfTERfTElCUkFSWV9QQVRIKGNvbnN0IGNoYXIqIGxkX2xpYnJhcnlfcGF0aCkgewotICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnRGxNdXRleCk7CisgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdfZGxfbXV0ZXgpOwogICBkb19hbmRyb2lkX3VwZGF0ZV9MRF9MSUJSQVJZX1BBVEgobGRfbGlicmFyeV9wYXRoKTsKIH0KIAotdm9pZCogZGxvcGVuKGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgZmxhZ3MpIHsKLSAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ0RsTXV0ZXgpOwotICBzb2luZm8qIHJlc3VsdCA9IGRvX2Rsb3BlbihmaWxlbmFtZSwgZmxhZ3MpOworc3RhdGljIHZvaWQqIGRsb3Blbl9leHQoY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBmbGFncywgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pIHsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ19kbF9tdXRleCk7CisgIHNvaW5mbyogcmVzdWx0ID0gZG9fZGxvcGVuKGZpbGVuYW1lLCBmbGFncywgZXh0aW5mbyk7CiAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewogICAgIF9fYmlvbmljX2Zvcm1hdF9kbGVycm9yKCJkbG9wZW4gZmFpbGVkIiwgbGlua2VyX2dldF9lcnJvcl9idWZmZXIoKSk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC03NCwzOSArNzUsNDkgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCogZGxzeW0odm9pZCogaGFuZGxlLCBjb25zdCBjaGFyKiBzeW1ib2wpIHsKLSAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ0RsTXV0ZXgpOwordm9pZCogYW5kcm9pZF9kbG9wZW5fZXh0KGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgZmxhZ3MsIGNvbnN0IGFuZHJvaWRfZGxleHRpbmZvKiBleHRpbmZvKSB7CisgIHJldHVybiBkbG9wZW5fZXh0KGZpbGVuYW1lLCBmbGFncywgZXh0aW5mbyk7Cit9CiAKK3ZvaWQqIGRsb3Blbihjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGZsYWdzKSB7CisgIHJldHVybiBkbG9wZW5fZXh0KGZpbGVuYW1lLCBmbGFncywgTlVMTCk7Cit9CisKK3ZvaWQqIGRsc3ltKHZvaWQqIGhhbmRsZSwgY29uc3QgY2hhciogc3ltYm9sKSB7CisgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdfZGxfbXV0ZXgpOworCisjaWYgIWRlZmluZWQoX19MUDY0X18pCiAgIGlmIChoYW5kbGUgPT0gTlVMTCkgewogICAgIF9fYmlvbmljX2Zvcm1hdF9kbGVycm9yKCJkbHN5bSBsaWJyYXJ5IGhhbmRsZSBpcyBudWxsIiwgTlVMTCk7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KKyNlbmRpZgorCiAgIGlmIChzeW1ib2wgPT0gTlVMTCkgewogICAgIF9fYmlvbmljX2Zvcm1hdF9kbGVycm9yKCJkbHN5bSBzeW1ib2wgbmFtZSBpcyBudWxsIiwgTlVMTCk7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KIAogICBzb2luZm8qIGZvdW5kID0gTlVMTDsKLSAgRWxmX1N5bSogc3ltID0gTlVMTDsKKyAgRWxmVyhTeW0pKiBzeW0gPSBOVUxMOwogICBpZiAoaGFuZGxlID09IFJUTERfREVGQVVMVCkgewogICAgIHN5bSA9IGRsc3ltX2xpbmVhcl9sb29rdXAoc3ltYm9sLCAmZm91bmQsIE5VTEwpOwogICB9IGVsc2UgaWYgKGhhbmRsZSA9PSBSVExEX05FWFQpIHsKLSAgICB2b2lkKiByZXRfYWRkciA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKLSAgICBzb2luZm8qIHNpID0gZmluZF9jb250YWluaW5nX2xpYnJhcnkocmV0X2FkZHIpOworICAgIHZvaWQqIGNhbGxlcl9hZGRyID0gX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOworICAgIHNvaW5mbyogc2kgPSBmaW5kX2NvbnRhaW5pbmdfbGlicmFyeShjYWxsZXJfYWRkcik7CiAKICAgICBzeW0gPSBOVUxMOwogICAgIGlmIChzaSAmJiBzaS0+bmV4dCkgewogICAgICAgc3ltID0gZGxzeW1fbGluZWFyX2xvb2t1cChzeW1ib2wsICZmb3VuZCwgc2ktPm5leHQpOwogICAgIH0KICAgfSBlbHNlIHsKLSAgICBmb3VuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c29pbmZvKj4oaGFuZGxlKTsKLSAgICBzeW0gPSBkbHN5bV9oYW5kbGVfbG9va3VwKGZvdW5kLCBzeW1ib2wpOworICAgIHN5bSA9IGRsc3ltX2hhbmRsZV9sb29rdXAocmVpbnRlcnByZXRfY2FzdDxzb2luZm8qPihoYW5kbGUpLCAmZm91bmQsIHN5bWJvbCk7CiAgIH0KIAogICBpZiAoc3ltICE9IE5VTEwpIHsKICAgICB1bnNpZ25lZCBiaW5kID0gRUxGX1NUX0JJTkQoc3ltLT5zdF9pbmZvKTsKIAotICAgIGlmIChiaW5kID09IFNUQl9HTE9CQUwgJiYgc3ltLT5zdF9zaG5keCAhPSAwKSB7CisgICAgaWYgKChiaW5kID09IFNUQl9HTE9CQUwgfHwgYmluZCA9PSBTVEJfV0VBSykgJiYgc3ltLT5zdF9zaG5keCAhPSAwKSB7CiAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3ltLT5zdF92YWx1ZSArIGZvdW5kLT5sb2FkX2JpYXMpOwogICAgIH0KIApAQCAtMTE5LDcgKzEzMCw3IEBACiB9CiAKIGludCBkbGFkZHIoY29uc3Qgdm9pZCogYWRkciwgRGxfaW5mbyogaW5mbykgewotICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnRGxNdXRleCk7CisgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdfZGxfbXV0ZXgpOwogCiAgIC8vIERldGVybWluZSBpZiB0aGlzIGFkZHJlc3MgY2FuIGJlIGZvdW5kIGluIGFueSBsaWJyYXJ5IGN1cnJlbnRseSBtYXBwZWQuCiAgIHNvaW5mbyogc2kgPSBmaW5kX2NvbnRhaW5pbmdfbGlicmFyeShhZGRyKTsKQEAgLTEzMSwyMSArMTQyLDIzIEBACiAKICAgaW5mby0+ZGxpX2ZuYW1lID0gc2ktPm5hbWU7CiAgIC8vIEFkZHJlc3MgYXQgd2hpY2ggdGhlIHNoYXJlZCBvYmplY3QgaXMgbG9hZGVkLgotICBpbmZvLT5kbGlfZmJhc2UgPSAodm9pZCopIHNpLT5iYXNlOworICBpbmZvLT5kbGlfZmJhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+YmFzZSk7CiAKICAgLy8gRGV0ZXJtaW5lIGlmIGFueSBzeW1ib2wgaW4gdGhlIGxpYnJhcnkgY29udGFpbnMgdGhlIHNwZWNpZmllZCBhZGRyZXNzLgotICBFbGZfU3ltICpzeW0gPSBkbGFkZHJfZmluZF9zeW1ib2woc2ksIGFkZHIpOworICBFbGZXKFN5bSkqIHN5bSA9IGRsYWRkcl9maW5kX3N5bWJvbChzaSwgYWRkcik7CiAgIGlmIChzeW0gIT0gTlVMTCkgewogICAgIGluZm8tPmRsaV9zbmFtZSA9IHNpLT5zdHJ0YWIgKyBzeW0tPnN0X25hbWU7Ci0gICAgaW5mby0+ZGxpX3NhZGRyID0gKHZvaWQqKShzaS0+bG9hZF9iaWFzICsgc3ltLT5zdF92YWx1ZSk7CisgICAgaW5mby0+ZGxpX3NhZGRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2ktPmxvYWRfYmlhcyArIHN5bS0+c3RfdmFsdWUpOwogICB9CiAKICAgcmV0dXJuIDE7CiB9CiAKIGludCBkbGNsb3NlKHZvaWQqIGhhbmRsZSkgewotICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnRGxNdXRleCk7Ci0gIHJldHVybiBkb19kbGNsb3NlKHJlaW50ZXJwcmV0X2Nhc3Q8c29pbmZvKj4oaGFuZGxlKSk7CisgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdfZGxfbXV0ZXgpOworICBkb19kbGNsb3NlKHJlaW50ZXJwcmV0X2Nhc3Q8c29pbmZvKj4oaGFuZGxlKSk7CisgIC8vIGRsY2xvc2UgaGFzIG5vIGRlZmluZWQgZXJyb3JzLgorICByZXR1cm4gMDsKIH0KIAogLy8gbmFtZV9vZmZzZXQ6IHN0YXJ0aW5nIGluZGV4IG9mIHRoZSBuYW1lIGluIGxpYmRsX2luZm8uc3RydGFiCkBAIC0xNjcsMTM1ICsxODAsNzcgQEAKICAgICAgIC8qIHN0X3NpemUgKi8gMCwgXAogICAgIH0KIAotI2lmIGRlZmluZWQoX19MUDY0X18pCi0jICBkZWZpbmUgRUxGX1NZTV9JTklUSUFMSVpFUiBFTEY2NF9TWU1fSU5JVElBTElaRVIKLSNlbHNlCi0jICBkZWZpbmUgRUxGX1NZTV9JTklUSUFMSVpFUiBFTEYzMl9TWU1fSU5JVElBTElaRVIKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChfX2FybV9fKQotICAvLyAwMDAwMDAwIDAwMDExMTExIDExMTExMiAyMjIyMjIyMiAyMzMzMzMzIDMzMzM0NDQ0NDQ0NDQ0NTU1NTU1NTU1NTY2NjY2NjYgNjY2Nzc3Nzc3Nzc3Nzg4ODg4ODg4ODg5OTk5OSA5OTk5OTAwMDAwMDAwMDAxIDEKLSAgLy8gMDEyMzQ1NiA3ODkwMTIzNCA1Njc4OTAgMTIzNDU2NzggOTAxMjM0NSA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2IDc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgNTY3ODkwMTIzNDU2Nzg5MCAxCisgIC8vIDAwMDAwMDAgMDAwMTExMTEgMTExMTEyIDIyMjIyMjIyIDIzMzMzMzMgMzMzMzQ0NDQ0NDQ0NDQ1NTU1NTU1NTU1NjY2NjY2NiA2NjY3Nzc3Nzc3Nzc3ODg4ODg4ODg4ODk5OTk5IDk5OTk5MDAwMDAwMDAwMDEgMTExMTExMTExMjIyMjIyMjIyMiAzMzMzMzMzMzMzNDQ0NDQ0NDQ0NDUKKyAgLy8gMDEyMzQ1NiA3ODkwMTIzNCA1Njc4OTAgMTIzNDU2NzggOTAxMjM0NSA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2IDc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgNTY3ODkwMTIzNDU2Nzg5MCAxMjM0NTY3ODkwMTIzNDU2Nzg5IDAxMjM0NTY3ODkwMTIzNDU2Nzg5MAogIyAgZGVmaW5lIEFORFJPSURfTElCRExfU1RSVEFCIFwKLSAgICAiZGxvcGVuXDBkbGNsb3NlXDBkbHN5bVwwZGxlcnJvclwwZGxhZGRyXDBhbmRyb2lkX3VwZGF0ZV9MRF9MSUJSQVJZX1BBVEhcMGFuZHJvaWRfZ2V0X0xEX0xJQlJBUllfUEFUSFwwZGxfaXRlcmF0ZV9waGRyXDBkbF91bndpbmRfZmluZF9leGlkeFwwIgorICAgICJkbG9wZW5cMGRsY2xvc2VcMGRsc3ltXDBkbGVycm9yXDBkbGFkZHJcMGFuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSFwwYW5kcm9pZF9nZXRfTERfTElCUkFSWV9QQVRIXDBkbF9pdGVyYXRlX3BoZHJcMGFuZHJvaWRfZGxvcGVuX2V4dFwwZGxfdW53aW5kX2ZpbmRfZXhpZHhcMCIKICNlbGlmIGRlZmluZWQoX19hYXJjaDY0X18pIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLSAgLy8gMDAwMDAwMCAwMDAxMTExMSAxMTExMTIgMjIyMjIyMjIgMjMzMzMzMyAzMzMzNDQ0NDQ0NDQ0NDU1NTU1NTU1NTU2NjY2NjY2IDY2Njc3Nzc3Nzc3Nzc4ODg4ODg4ODg4OTk5OTkgOTk5OTkwMDAwMDAwMDAwMSAxCi0gIC8vIDAxMjM0NTYgNzg5MDEyMzQgNTY3ODkwIDEyMzQ1Njc4IDkwMTIzNDUgNjc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NiA3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0IDU2Nzg5MDEyMzQ1Njc4OTAgMQorICAvLyAwMDAwMDAwIDAwMDExMTExIDExMTExMiAyMjIyMjIyMiAyMzMzMzMzIDMzMzM0NDQ0NDQ0NDQ0NTU1NTU1NTU1NTY2NjY2NjYgNjY2Nzc3Nzc3Nzc3Nzg4ODg4ODg4ODg5OTk5OSA5OTk5OTAwMDAwMDAwMDAxIDExMTExMTExMTIyMjIyMjIyMjIKKyAgLy8gMDEyMzQ1NiA3ODkwMTIzNCA1Njc4OTAgMTIzNDU2NzggOTAxMjM0NSA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2IDc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgNTY3ODkwMTIzNDU2Nzg5MCAxMjM0NTY3ODkwMTIzNDU2Nzg5CiAjICBkZWZpbmUgQU5EUk9JRF9MSUJETF9TVFJUQUIgXAotICAgICJkbG9wZW5cMGRsY2xvc2VcMGRsc3ltXDBkbGVycm9yXDBkbGFkZHJcMGFuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSFwwYW5kcm9pZF9nZXRfTERfTElCUkFSWV9QQVRIXDBkbF9pdGVyYXRlX3BoZHJcMCIKKyAgICAiZGxvcGVuXDBkbGNsb3NlXDBkbHN5bVwwZGxlcnJvclwwZGxhZGRyXDBhbmRyb2lkX3VwZGF0ZV9MRF9MSUJSQVJZX1BBVEhcMGFuZHJvaWRfZ2V0X0xEX0xJQlJBUllfUEFUSFwwZGxfaXRlcmF0ZV9waGRyXDBhbmRyb2lkX2Rsb3Blbl9leHRcMCIKICNlbHNlCi0jICBlcnJvciBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUuIE9ubHkgYXJtLCBhcm02NCwgbWlwcywgeDg2LCBhbmQgeDg2XzY0IGFyZSBwcmVzZW50bHkgc3VwcG9ydGVkLgorIyAgZXJyb3IgVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlLiBPbmx5IGFybSwgYXJtNjQsIG1pcHMsIG1pcHM2NCwgeDg2IGFuZCB4ODZfNjQgYXJlIHByZXNlbnRseSBzdXBwb3J0ZWQuCiAjZW5kaWYKIAotc3RhdGljIEVsZl9TeW0gZ0xpYkRsU3ltdGFiW10gPSB7CitzdGF0aWMgRWxmVyhTeW0pIGdfbGliZGxfc3ltdGFiW10gPSB7CiAgIC8vIFRvdGFsIGxlbmd0aCBvZiBsaWJkbF9pbmZvLnN0cnRhYiwgaW5jbHVkaW5nIHRyYWlsaW5nIDAuCiAgIC8vIFRoaXMgaXMgYWN0dWFsbHkgdGhlIFNUSF9VTkRFRiBlbnRyeS4gVGVjaG5pY2FsbHksIGl0J3MKICAgLy8gc3VwcG9zZWQgdG8gaGF2ZSBzdF9uYW1lID09IDAsIGJ1dCBpbnN0ZWFkLCBpdCBwb2ludHMgdG8gYW4gaW5kZXgKICAgLy8gaW4gdGhlIHN0cnRhYiB3aXRoIGEgXDAgdG8gbWFrZSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgc3ltdGFiIGVhc2llci4KLSAgRUxGX1NZTV9JTklUSUFMSVpFUihzaXplb2YoQU5EUk9JRF9MSUJETF9TVFJUQUIpIC0gMSwgTlVMTCwgMCksCi0gIEVMRl9TWU1fSU5JVElBTElaRVIoICAwLCAmZGxvcGVuLCAxKSwKLSAgRUxGX1NZTV9JTklUSUFMSVpFUiggIDcsICZkbGNsb3NlLCAxKSwKLSAgRUxGX1NZTV9JTklUSUFMSVpFUiggMTUsICZkbHN5bSwgMSksCi0gIEVMRl9TWU1fSU5JVElBTElaRVIoIDIxLCAmZGxlcnJvciwgMSksCi0gIEVMRl9TWU1fSU5JVElBTElaRVIoIDI5LCAmZGxhZGRyLCAxKSwKLSAgRUxGX1NZTV9JTklUSUFMSVpFUiggMzYsICZhbmRyb2lkX3VwZGF0ZV9MRF9MSUJSQVJZX1BBVEgsIDEpLAotICBFTEZfU1lNX0lOSVRJQUxJWkVSKCA2NywgJmFuZHJvaWRfZ2V0X0xEX0xJQlJBUllfUEFUSCwgMSksCi0gIEVMRl9TWU1fSU5JVElBTElaRVIoIDk1LCAmZGxfaXRlcmF0ZV9waGRyLCAxKSwKKyAgRUxGVyhTWU1fSU5JVElBTElaRVIpKHNpemVvZihBTkRST0lEX0xJQkRMX1NUUlRBQikgLSAxLCBOVUxMLCAwKSwKKyAgRUxGVyhTWU1fSU5JVElBTElaRVIpKCAgMCwgJmRsb3BlbiwgMSksCisgIEVMRlcoU1lNX0lOSVRJQUxJWkVSKSggIDcsICZkbGNsb3NlLCAxKSwKKyAgRUxGVyhTWU1fSU5JVElBTElaRVIpKCAxNSwgJmRsc3ltLCAxKSwKKyAgRUxGVyhTWU1fSU5JVElBTElaRVIpKCAyMSwgJmRsZXJyb3IsIDEpLAorICBFTEZXKFNZTV9JTklUSUFMSVpFUikoIDI5LCAmZGxhZGRyLCAxKSwKKyAgRUxGVyhTWU1fSU5JVElBTElaRVIpKCAzNiwgJmFuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSCwgMSksCisgIEVMRlcoU1lNX0lOSVRJQUxJWkVSKSggNjcsICZhbmRyb2lkX2dldF9MRF9MSUJSQVJZX1BBVEgsIDEpLAorICBFTEZXKFNZTV9JTklUSUFMSVpFUikoIDk1LCAmZGxfaXRlcmF0ZV9waGRyLCAxKSwKKyAgRUxGVyhTWU1fSU5JVElBTElaRVIpKDExMSwgJmFuZHJvaWRfZGxvcGVuX2V4dCwgMSksCiAjaWYgZGVmaW5lZChfX2FybV9fKQotICBFTEZfU1lNX0lOSVRJQUxJWkVSKDExMSwgJmRsX3Vud2luZF9maW5kX2V4aWR4LCAxKSwKKyAgRUxGVyhTWU1fSU5JVElBTElaRVIpKDEzMCwgJmRsX3Vud2luZF9maW5kX2V4aWR4LCAxKSwKICNlbmRpZgogfTsKIAogLy8gRmFrZSBvdXQgYSBoYXNoIHRhYmxlIHdpdGggYSBzaW5nbGUgYnVja2V0LgogLy8KLS8vIEEgc2VhcmNoIG9mIHRoZSBoYXNoIHRhYmxlIHdpbGwgbG9vayB0aHJvdWdoIGdMaWJEbFN5bXRhYiBzdGFydGluZyB3aXRoIGluZGV4IDEsIHRoZW4KLS8vIHVzZSBnTGliRGxDaGFpbnMgdG8gZmluZCB0aGUgbmV4dCBpbmRleCB0byBsb29rIGF0LiBnTGliRGxDaGFpbnMgc2hvdWxkIGJlIHNldCB1cCB0bwotLy8gd2FsayB0aHJvdWdoIGV2ZXJ5IGVsZW1lbnQgaW4gZ0xpYkRsU3ltdGFiLCBhbmQgdGhlbiBlbmQgd2l0aCAwIChzZW50aW5lbCB2YWx1ZSkuCisvLyBBIHNlYXJjaCBvZiB0aGUgaGFzaCB0YWJsZSB3aWxsIGxvb2sgdGhyb3VnaCBnX2xpYmRsX3N5bXRhYiBzdGFydGluZyB3aXRoIGluZGV4IDEsIHRoZW4KKy8vIHVzZSBnX2xpYmRsX2NoYWlucyB0byBmaW5kIHRoZSBuZXh0IGluZGV4IHRvIGxvb2sgYXQuIGdfbGliZGxfY2hhaW5zIHNob3VsZCBiZSBzZXQgdXAgdG8KKy8vIHdhbGsgdGhyb3VnaCBldmVyeSBlbGVtZW50IGluIGdfbGliZGxfc3ltdGFiLCBhbmQgdGhlbiBlbmQgd2l0aCAwIChzZW50aW5lbCB2YWx1ZSkuCiAvLwotLy8gVGhhdCBpcywgZ0xpYkRsQ2hhaW5zIHNob3VsZCBsb29rIGxpa2UgeyAwLCAyLCAzLCAuLi4gTiwgMCB9IHdoZXJlIE4gaXMgdGhlIG51bWJlcgotLy8gb2YgYWN0dWFsIHN5bWJvbHMsIG9yIG5lbGVtcyhnTGliRGxTeW10YWIpLTEgKHNpbmNlIHRoZSBmaXJzdCBlbGVtZW50IG9mIGdMaWJEbFN5bXRhYiBpcyBub3QKKy8vIFRoYXQgaXMsIGdfbGliZGxfY2hhaW5zIHNob3VsZCBsb29rIGxpa2UgeyAwLCAyLCAzLCAuLi4gTiwgMCB9IHdoZXJlIE4gaXMgdGhlIG51bWJlcgorLy8gb2YgYWN0dWFsIHN5bWJvbHMsIG9yIG5lbGVtcyhnX2xpYmRsX3N5bXRhYiktMSAoc2luY2UgdGhlIGZpcnN0IGVsZW1lbnQgb2YgZ19saWJkbF9zeW10YWIgaXMgbm90CiAvLyBhIHJlYWwgc3ltYm9sKS4gKFNlZSBzb2luZm9fZWxmX2xvb2t1cCgpLikKIC8vCiAvLyBOb3RlIHRoYXQgYWRkaW5nIGFueSBuZXcgc3ltYm9scyBoZXJlIHJlcXVpcmVzIHN0dWJiaW5nIHRoZW0gb3V0IGluIGxpYmRsLgotc3RhdGljIHVuc2lnbmVkIGdMaWJEbEJ1Y2tldHNbMV0gPSB7IDEgfTsKK3N0YXRpYyB1bnNpZ25lZCBnX2xpYmRsX2J1Y2tldHNbMV0gPSB7IDEgfTsKICNpZiBkZWZpbmVkKF9fYXJtX18pCi1zdGF0aWMgdW5zaWduZWQgZ0xpYkRsQ2hhaW5zW10gPSB7IDAsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBnX2xpYmRsX2NoYWluc1tdID0geyAwLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMCB9OwogI2Vsc2UKLXN0YXRpYyB1bnNpZ25lZCBnTGliRGxDaGFpbnNbXSA9IHsgMCwgMiwgMywgNCwgNSwgNiwgNywgOCwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGdfbGliZGxfY2hhaW5zW10gPSB7IDAsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDAgfTsKICNlbmRpZgogCisvLyBEZWZpbmVkIGFzIGdsb2JhbCBiZWNhdXNlIHdlIGRvIG5vdCB5ZXQgaGF2ZSBhY2Nlc3MKKy8vIHRvIHN5bmNocm9uaXphdGlvbiBmdW5jdGlvbnMgX19jeGFfZ3VhcmRfKiBuZWVkZWQKKy8vIHRvIGRlZmluZSBzdGF0aWNzIGluc2lkZSBmdW5jdGlvbnMuCitzdGF0aWMgc29pbmZvIF9fbGliZGxfaW5mbzsKKwogLy8gVGhpcyBpcyB1c2VkIGJ5IHRoZSBkeW5hbWljIGxpbmtlci4gRXZlcnkgcHJvY2VzcyBnZXRzIHRoZXNlIHN5bWJvbHMgZm9yIGZyZWUuCi1zb2luZm8gbGliZGxfaW5mbyA9IHsKLSAgICAibGliZGwuc28iLAorc29pbmZvKiBnZXRfbGliZGxfaW5mbygpIHsKKyAgaWYgKF9fbGliZGxfaW5mby5uYW1lWzBdID09ICdcMCcpIHsKKyAgICAvLyBpbml0aWFsaXplCisgICAgc3RybmNweShfX2xpYmRsX2luZm8ubmFtZSwgImxpYmRsLnNvIiwgc2l6ZW9mKF9fbGliZGxfaW5mby5uYW1lKSk7CisgICAgX19saWJkbF9pbmZvLmZsYWdzID0gRkxBR19MSU5LRUQgfCBGTEFHX05FV19TT0lORk87CisgICAgX19saWJkbF9pbmZvLnN0cnRhYiA9IEFORFJPSURfTElCRExfU1RSVEFCOworICAgIF9fbGliZGxfaW5mby5zeW10YWIgPSBnX2xpYmRsX3N5bXRhYjsKKyAgICBfX2xpYmRsX2luZm8ubmJ1Y2tldCA9IHNpemVvZihnX2xpYmRsX2J1Y2tldHMpL3NpemVvZih1bnNpZ25lZCk7CisgICAgX19saWJkbF9pbmZvLm5jaGFpbiA9IHNpemVvZihnX2xpYmRsX2NoYWlucykvc2l6ZW9mKHVuc2lnbmVkKTsKKyAgICBfX2xpYmRsX2luZm8uYnVja2V0ID0gZ19saWJkbF9idWNrZXRzOworICAgIF9fbGliZGxfaW5mby5jaGFpbiA9IGdfbGliZGxfY2hhaW5zOworICAgIF9fbGliZGxfaW5mby5oYXNfRFRfU1lNQk9MSUMgPSB0cnVlOworICB9CiAKLSAgICAucGhkciA9IDAsCi0gICAgLnBobnVtID0gMCwKLSAgICAuZW50cnkgPSAwLAotICAgIC5iYXNlID0gMCwKLSAgICAuc2l6ZSA9IDAsCi0KLSNpZiAhZGVmaW5lZChfX0xQNjRfXykKLSAgICAudW51c2VkMSA9IDAsCi0jZW5kaWYKLQotICAgIC5keW5hbWljID0gMCwKLQotI2lmICFkZWZpbmVkKF9fTFA2NF9fKQotICAgIC51bnVzZWQyID0gMCwgLnVudXNlZDMgPSAwLAotI2VuZGlmCi0KLSAgICAubmV4dCA9IDAsCi0KLSAgICAuZmxhZ3MgPSBGTEFHX0xJTktFRCwKLQotICAgIC5zdHJ0YWIgPSBBTkRST0lEX0xJQkRMX1NUUlRBQiwKLSAgICAuc3ltdGFiID0gZ0xpYkRsU3ltdGFiLAotCi0gICAgLm5idWNrZXQgPSBzaXplb2YoZ0xpYkRsQnVja2V0cykvc2l6ZW9mKHVuc2lnbmVkKSwKLSAgICAubmNoYWluID0gc2l6ZW9mKGdMaWJEbENoYWlucykvc2l6ZW9mKHVuc2lnbmVkKSwKLSAgICAuYnVja2V0ID0gZ0xpYkRsQnVja2V0cywKLSAgICAuY2hhaW4gPSBnTGliRGxDaGFpbnMsCi0KLSNpZiBkZWZpbmVkKFVTRV9SRUxBKQotICAgIC5wbHRfcmVsYSA9IDAsCi0gICAgLnBsdF9yZWxhX2NvdW50ID0gMCwKLSAgICAucmVsYSA9IDAsCi0gICAgLnJlbGFfY291bnQgPSAwLAotI2Vsc2UKLSAgICAucGx0X2dvdCA9IDAsCi0gICAgLnBsdF9yZWwgPSAwLAotICAgIC5wbHRfcmVsX2NvdW50ID0gMCwKLSAgICAucmVsID0gMCwKLSAgICAucmVsX2NvdW50ID0gMCwKLSNlbmRpZgotCi0gICAgLnByZWluaXRfYXJyYXkgPSAwLAotICAgIC5wcmVpbml0X2FycmF5X2NvdW50ID0gMCwKLQotICAgIC5pbml0X2FycmF5ID0gMCwKLSAgICAuaW5pdF9hcnJheV9jb3VudCA9IDAsCi0KLSAgICAuZmluaV9hcnJheSA9IDAsCi0gICAgLmZpbmlfYXJyYXlfY291bnQgPSAwLAotCi0gICAgLmluaXRfZnVuYyA9IDAsCi0gICAgLmZpbmlfZnVuYyA9IDAsCi0KLSNpZiBkZWZpbmVkKF9fYXJtX18pCi0gICAgLkFSTV9leGlkeCA9IDAsCi0gICAgLkFSTV9leGlkeF9jb3VudCA9IDAsCi0jZWxpZiBkZWZpbmVkKF9fbWlwc19fKQotICAgIC5taXBzX3N5bXRhYm5vID0gMCwKLSAgICAubWlwc19sb2NhbF9nb3RubyA9IDAsCi0gICAgLm1pcHNfZ290c3ltID0gMCwKLSNlbmRpZgotCi0gICAgLnJlZl9jb3VudCA9IDAsCi0gICAgeyAubF9hZGRyID0gMCwgLmxfbmFtZSA9IDAsIC5sX2xkID0gMCwgLmxfbmV4dCA9IDAsIC5sX3ByZXYgPSAwLCB9LAotICAgIC5jb25zdHJ1Y3RvcnNfY2FsbGVkID0gZmFsc2UsCi0gICAgLmxvYWRfYmlhcyA9IDAsCi0jaWYgIWRlZmluZWQoX19MUDY0X18pCi0gICAgLmhhc190ZXh0X3JlbG9jYXRpb25zID0gZmFsc2UsCi0jZW5kaWYKLSAgICAuaGFzX0RUX1NZTUJPTElDID0gdHJ1ZSwKLX07CisgIHJldHVybiAmX19saWJkbF9pbmZvOworfQpkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlZF9saXN0LmggYi9saW5rZXIvbGlua2VkX2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDk2ZTYyCi0tLSAvZGV2L251bGwKKysrIGIvbGlua2VyL2xpbmtlZF9saXN0LmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fTElOS0VEX0xJU1RfSAorI2RlZmluZSBfX0xJTktFRF9MSVNUX0gKKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX21hY3Jvcy5oIgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IExpbmtlZExpc3RFbnRyeSB7CisgIExpbmtlZExpc3RFbnRyeTxUPiogbmV4dDsKKyAgVCogZWxlbWVudDsKK307CisKKy8qCisgKiBSZXByZXNlbnRzIGxpbmtlZCBsaXN0IG9mIG9iamVjdHMgb2YgdHlwZSBUCisgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFsbG9jYXRvcj4KK2NsYXNzIExpbmtlZExpc3QgeworIHB1YmxpYzoKKyAgTGlua2VkTGlzdCgpIDogaGVhZF8obnVsbHB0ciksIHRhaWxfKG51bGxwdHIpIHt9CisKKyAgdm9pZCBwdXNoX2Zyb250KFQqIGNvbnN0IGVsZW1lbnQpIHsKKyAgICBMaW5rZWRMaXN0RW50cnk8VD4qIG5ld19lbnRyeSA9IEFsbG9jYXRvcjo6YWxsb2MoKTsKKyAgICBuZXdfZW50cnktPm5leHQgPSBoZWFkXzsKKyAgICBuZXdfZW50cnktPmVsZW1lbnQgPSBlbGVtZW50OworICAgIGhlYWRfID0gbmV3X2VudHJ5OworICAgIGlmICh0YWlsXyA9PSBudWxscHRyKSB7CisgICAgICB0YWlsXyA9IG5ld19lbnRyeTsKKyAgICB9CisgIH0KKworICB2b2lkIHB1c2hfYmFjayhUKiBjb25zdCBlbGVtZW50KSB7CisgICAgTGlua2VkTGlzdEVudHJ5PFQ+KiBuZXdfZW50cnkgPSBBbGxvY2F0b3I6OmFsbG9jKCk7CisgICAgbmV3X2VudHJ5LT5uZXh0ID0gbnVsbHB0cjsKKyAgICBuZXdfZW50cnktPmVsZW1lbnQgPSBlbGVtZW50OworICAgIGlmICh0YWlsXyA9PSBudWxscHRyKSB7CisgICAgICB0YWlsXyA9IGhlYWRfID0gbmV3X2VudHJ5OworICAgIH0gZWxzZSB7CisgICAgICB0YWlsXy0+bmV4dCA9IG5ld19lbnRyeTsKKyAgICAgIHRhaWxfID0gbmV3X2VudHJ5OworICAgIH0KKyAgfQorCisgIFQqIHBvcF9mcm9udCgpIHsKKyAgICBpZiAoaGVhZF8gPT0gbnVsbHB0cikgeworICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgTGlua2VkTGlzdEVudHJ5PFQ+KiBlbnRyeSA9IGhlYWRfOworICAgIFQqIGVsZW1lbnQgPSBlbnRyeS0+ZWxlbWVudDsKKyAgICBoZWFkXyA9IGVudHJ5LT5uZXh0OworICAgIEFsbG9jYXRvcjo6ZnJlZShlbnRyeSk7CisKKyAgICBpZiAoaGVhZF8gPT0gbnVsbHB0cikgeworICAgICAgdGFpbF8gPSBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBlbGVtZW50OworICB9CisKKyAgdm9pZCBjbGVhcigpIHsKKyAgICB3aGlsZSAoaGVhZF8gIT0gbnVsbHB0cikgeworICAgICAgTGlua2VkTGlzdEVudHJ5PFQ+KiBwID0gaGVhZF87CisgICAgICBoZWFkXyA9IGhlYWRfLT5uZXh0OworICAgICAgQWxsb2NhdG9yOjpmcmVlKHApOworICAgIH0KKworICAgIHRhaWxfID0gbnVsbHB0cjsKKyAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIEY+CisgIHZvaWQgZm9yX2VhY2goRiYmIGFjdGlvbikgeworICAgIGZvciAoTGlua2VkTGlzdEVudHJ5PFQ+KiBlID0gaGVhZF87IGUgIT0gbnVsbHB0cjsgZSA9IGUtPm5leHQpIHsKKyAgICAgIGlmIChlLT5lbGVtZW50ICE9IG51bGxwdHIpIHsKKyAgICAgICAgYWN0aW9uKGUtPmVsZW1lbnQpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIEY+CisgIHZvaWQgcmVtb3ZlX2lmKEYmJiBwcmVkaWNhdGUpIHsKKyAgICBmb3IgKExpbmtlZExpc3RFbnRyeTxUPiogZSA9IGhlYWRfOyBlICE9IG51bGxwdHI7IGUgPSBlLT5uZXh0KSB7CisgICAgICBpZiAoZS0+ZWxlbWVudCAhPSBudWxscHRyICYmIHByZWRpY2F0ZShlLT5lbGVtZW50KSkgeworICAgICAgICBlLT5lbGVtZW50ID0gbnVsbHB0cjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBib29sIGNvbnRhaW5zKGNvbnN0IFQqIGVsKSB7CisgICAgZm9yIChMaW5rZWRMaXN0RW50cnk8VD4qIGUgPSBoZWFkXzsgZSAhPSBudWxscHRyOyBlID0gZS0+bmV4dCkgeworICAgICAgaWYgKGUtPmVsZW1lbnQgIT0gbnVsbHB0ciAmJiBlLT5lbGVtZW50ID09IGVsKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworIHByaXZhdGU6CisgIExpbmtlZExpc3RFbnRyeTxUPiogaGVhZF87CisgIExpbmtlZExpc3RFbnRyeTxUPiogdGFpbF87CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihMaW5rZWRMaXN0KTsKK307CisKKyNlbmRpZiAvLyBfX0xJTktFRF9MSVNUX0gKZGlmZiAtLWdpdCBhL2xpbmtlci9saW5rZXIuY3BwIGIvbGlua2VyL2xpbmtlci5jcHAKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCA5YmM5YWZlLi5jZjY1NzA1Ci0tLSBhL2xpbmtlci9saW5rZXIuY3BwCisrKyBiL2xpbmtlci9saW5rZXIuY3BwCkBAIC0yOSwxMyArMjksMTEgQEAKICNpbmNsdWRlIDxkbGZjbi5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtNDQsMTEgKzQyLDEzIEBACiAjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfdGxzLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9LZXJuZWxBcmd1bWVudEJsb2NrLmgiCiAjaW5jbHVkZSAicHJpdmF0ZS9TY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIuaCIKKyNpbmNsdWRlICJwcml2YXRlL1Njb3BlZEZkLmgiCiAKICNpbmNsdWRlICJsaW5rZXIuaCIKICNpbmNsdWRlICJsaW5rZXJfZGVidWcuaCIKICNpbmNsdWRlICJsaW5rZXJfZW52aXJvbi5oIgogI2luY2x1ZGUgImxpbmtlcl9waGRyLmgiCisjaW5jbHVkZSAibGlua2VyX2FsbG9jYXRvci5oIgogCiAvKiA+Pj4gSU1QT1JUQU5UIE5PVEUgLSBSRUFEIE1FIEJFRk9SRSBNT0RJRllJTkcgPDw8CiAgKgpAQCAtNjAsMzEgKzYwLDM1IEBACiAgKgogICogb3BlbiBpc3N1ZXMgLyB0b2RvOgogICoKLSAqIC0gYXJlIHdlIGRvaW5nIGV2ZXJ5dGhpbmcgd2Ugc2hvdWxkIGZvciBBUk1fQ09QWSByZWxvY2F0aW9ucz8KICAqIC0gY2xlYW5lciBlcnJvciByZXBvcnRpbmcKICAqIC0gYWZ0ZXIgbGlua2luZywgc2V0IGFzIG11Y2ggc3R1ZmYgYXMgcG9zc2libGUgdG8gUkVBRE9OTFkKICAqICAgYW5kIE5PRVhFQwogICovCiAKLXN0YXRpYyBib29sIHNvaW5mb19saW5rX2ltYWdlKHNvaW5mbyogc2kpOwotc3RhdGljIEVsZl9BZGRyIGdldF9lbGZfZXhlY19sb2FkX2JpYXMoY29uc3QgRWxmX0VoZHIqIGVsZik7CisjaWYgZGVmaW5lZChfX0xQNjRfXykKKyNkZWZpbmUgU0VBUkNIX05BTUUoeCkgeAorI2Vsc2UKKy8vIE52aWRpYSBkcml2ZXJzIGFyZSByZWx5aW5nIG9uIHRoZSBidWc6CisvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTY2NzAKKy8vIHNvIHdlIGNvbnRpbnVlIHRvIHVzZSBiYXNlLW5hbWUgbG9va3VwIGZvciBscDMyCitzdGF0aWMgY29uc3QgY2hhciogZ2V0X2Jhc2VfbmFtZShjb25zdCBjaGFyKiBuYW1lKSB7CisgIGNvbnN0IGNoYXIqIGJuYW1lID0gc3RycmNocihuYW1lLCAnLycpOworICByZXR1cm4gYm5hbWUgPyBibmFtZSArIDEgOiBuYW1lOworfQorI2RlZmluZSBTRUFSQ0hfTkFNRSh4KSBnZXRfYmFzZV9uYW1lKHgpCisjZW5kaWYKIAotLy8gV2UgY2FuJ3QgdXNlIG1hbGxvYygzKSBpbiB0aGUgZHluYW1pYyBsaW5rZXIuIFdlIHVzZSBhIGxpbmtlZCBsaXN0IG9mIGFub255bW91cwotLy8gbWFwcywgZWFjaCBhIHNpbmdsZSBwYWdlIGluIHNpemUuIFRoZSBwYWdlcyBhcmUgYnJva2VuIHVwIGludG8gYXMgbWFueSBzdHJ1Y3Qgc29pbmZvCi0vLyBvYmplY3RzIGFzIHdpbGwgZml0LCBhbmQgdGhleSdyZSBhbGwgdGhyZWFkZWQgdG9nZXRoZXIgb24gYSBmcmVlIGxpc3QuCi0jZGVmaW5lIFNPSU5GT19QRVJfUE9PTCAoKFBBR0VfU0laRSAtIHNpemVvZihzb2luZm9fcG9vbF90KikpIC8gc2l6ZW9mKHNvaW5mbykpCi1zdHJ1Y3Qgc29pbmZvX3Bvb2xfdCB7Ci0gIHNvaW5mb19wb29sX3QqIG5leHQ7Ci0gIHNvaW5mbyBpbmZvW1NPSU5GT19QRVJfUE9PTF07Ci19Owotc3RhdGljIHN0cnVjdCBzb2luZm9fcG9vbF90KiBnU29JbmZvUG9vbHMgPSBOVUxMOwotc3RhdGljIHNvaW5mbyogZ1NvSW5mb0ZyZWVMaXN0ID0gTlVMTDsKK3N0YXRpYyBib29sIHNvaW5mb19saW5rX2ltYWdlKHNvaW5mbyogc2ksIGNvbnN0IGFuZHJvaWRfZGxleHRpbmZvKiBleHRpbmZvKTsKK3N0YXRpYyBFbGZXKEFkZHIpIGdldF9lbGZfZXhlY19sb2FkX2JpYXMoY29uc3QgRWxmVyhFaGRyKSogZWxmKTsKIAotc3RhdGljIHNvaW5mbyogc29saXN0ID0gJmxpYmRsX2luZm87Ci1zdGF0aWMgc29pbmZvKiBzb25leHQgPSAmbGliZGxfaW5mbzsKK3N0YXRpYyBMaW5rZXJBbGxvY2F0b3I8c29pbmZvPiBnX3NvaW5mb19hbGxvY2F0b3I7CitzdGF0aWMgTGlua2VyQWxsb2NhdG9yPExpbmtlZExpc3RFbnRyeTxzb2luZm8+PiBnX3NvaW5mb19saW5rc19hbGxvY2F0b3I7CisKK3N0YXRpYyBzb2luZm8qIHNvbGlzdDsKK3N0YXRpYyBzb2luZm8qIHNvbmV4dDsKIHN0YXRpYyBzb2luZm8qIHNvbWFpbjsgLyogbWFpbiBwcm9jZXNzLCBhbHdheXMgdGhlIG9uZSBhZnRlciBsaWJkbF9pbmZvICovCiAKLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBnRGVmYXVsdExkUGF0aHNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBrRGVmYXVsdExkUGF0aHNbXSA9IHsKICNpZiBkZWZpbmVkKF9fTFA2NF9fKQogICAiL3ZlbmRvci9saWI2NCIsCiAgICIvc3lzdGVtL2xpYjY0IiwKQEAgLTEwMSwxNyArMTA1LDE3IEBACiAjZGVmaW5lIExEUFJFTE9BRF9CVUZTSVpFIChMRFBSRUxPQURfTUFYKjY0KQogI2RlZmluZSBMRFBSRUxPQURfTUFYIDgKIAotc3RhdGljIGNoYXIgZ0xkUGF0aHNCdWZmZXJbTERQQVRIX0JVRlNJWkVdOwotc3RhdGljIGNvbnN0IGNoYXIqIGdMZFBhdGhzW0xEUEFUSF9NQVggKyAxXTsKK3N0YXRpYyBjaGFyIGdfbGRfbGlicmFyeV9wYXRoc19idWZmZXJbTERQQVRIX0JVRlNJWkVdOworc3RhdGljIGNvbnN0IGNoYXIqIGdfbGRfbGlicmFyeV9wYXRoc1tMRFBBVEhfTUFYICsgMV07CiAKLXN0YXRpYyBjaGFyIGdMZFByZWxvYWRzQnVmZmVyW0xEUFJFTE9BRF9CVUZTSVpFXTsKLXN0YXRpYyBjb25zdCBjaGFyKiBnTGRQcmVsb2FkTmFtZXNbTERQUkVMT0FEX01BWCArIDFdOworc3RhdGljIGNoYXIgZ19sZF9wcmVsb2Fkc19idWZmZXJbTERQUkVMT0FEX0JVRlNJWkVdOworc3RhdGljIGNvbnN0IGNoYXIqIGdfbGRfcHJlbG9hZF9uYW1lc1tMRFBSRUxPQURfTUFYICsgMV07CiAKLXN0YXRpYyBzb2luZm8qIGdMZFByZWxvYWRzW0xEUFJFTE9BRF9NQVggKyAxXTsKK3N0YXRpYyBzb2luZm8qIGdfbGRfcHJlbG9hZHNbTERQUkVMT0FEX01BWCArIDFdOwogCi1fX0xJQkNfSElEREVOX18gaW50IGdMZERlYnVnVmVyYm9zaXR5OworX19MSUJDX0hJRERFTl9fIGludCBnX2xkX2RlYnVnX3ZlcmJvc2l0eTsKIAotX19MSUJDX0hJRERFTl9fIGFib3J0X21zZ190KiBnQWJvcnRNZXNzYWdlID0gTlVMTDsgLy8gRm9yIGRlYnVnZ2VyZC4KK19fTElCQ19ISURERU5fXyBhYm9ydF9tc2dfdCogZ19hYm9ydF9tZXNzYWdlID0gTlVMTDsgLy8gRm9yIGRlYnVnZ2VyZC4KIAogZW51bSBSZWxvY2F0aW9uS2luZCB7CiAgICAga1JlbG9jQWJzb2x1dGUgPSAwLApAQCAtMTQzLDEyICsxNDcsMTIgQEAKICAgICBkbyB7IFwKICAgICAgICAgaWYgKCgoKG9mZnNldCkgPj4gMTIpID4+IDUpIDwgNDA5NikgXAogICAgICAgICAgICAgYml0bWFza1soKG9mZnNldCkgPj4gMTIpID4+IDVdIHw9ICgxIDw8ICgoKG9mZnNldCkgPj4gMTIpICYgMzEpKTsgXAotICAgIH0gd2hpbGUoMCkKKyAgICB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgTUFSSyhvZmZzZXQpIFwKICAgICBkbyB7IFwKICAgICAgICAgYml0bWFza1soKG9mZnNldCkgPj4gMTIpID4+IDNdIHw9ICgxIDw8ICgoKG9mZnNldCkgPj4gMTIpICYgNykpOyBcCi0gICAgfSB3aGlsZSgwKQorICAgIH0gd2hpbGUgKDApCiAjZW5kaWYKICNlbHNlCiAjZGVmaW5lIE1BUksoeCkgZG8ge30gd2hpbGUgKDApCkBAIC0xNTksMTYgKzE2MywxMiBAQAogI2RlZmluZSBESVNBTExPV19BTExPQ0FUSU9OKHJldHVybl90eXBlLCBuYW1lLCAuLi4pIFwKICAgICByZXR1cm5fdHlwZSBuYW1lIF9fVkFfQVJHU19fIFwKICAgICB7IFwKLSAgICAgICAgY29uc3QgY2hhciogbXNnID0gIkVSUk9SOiAiICNuYW1lICIgY2FsbGVkIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyIVxuIjsgXAotICAgICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19GQVRBTCwgImxpbmtlciIsICIlcyIsIG1zZyk7IFwKLSAgICAgICAgd3JpdGUoMiwgbXNnLCBzdHJsZW4obXNnKSk7IFwKLSAgICAgICAgYWJvcnQoKTsgXAorICAgICAgICBfX2xpYmNfZmF0YWwoIkVSUk9SOiAiICNuYW1lICIgY2FsbGVkIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyIVxuIik7IFwKICAgICB9Ci0jZGVmaW5lIFVOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQotRElTQUxMT1dfQUxMT0NBVElPTih2b2lkKiwgbWFsbG9jLCAoc2l6ZV90IHUgVU5VU0VEKSk7Ci1ESVNBTExPV19BTExPQ0FUSU9OKHZvaWQsIGZyZWUsICh2b2lkKiB1IFVOVVNFRCkpOwotRElTQUxMT1dfQUxMT0NBVElPTih2b2lkKiwgcmVhbGxvYywgKHZvaWQqIHUxIFVOVVNFRCwgc2l6ZV90IHUyIFVOVVNFRCkpOwotRElTQUxMT1dfQUxMT0NBVElPTih2b2lkKiwgY2FsbG9jLCAoc2l6ZV90IHUxIFVOVVNFRCwgc2l6ZV90IHUyIFVOVVNFRCkpOworRElTQUxMT1dfQUxMT0NBVElPTih2b2lkKiwgbWFsbG9jLCAoc2l6ZV90IHUgX191bnVzZWQpKTsKK0RJU0FMTE9XX0FMTE9DQVRJT04odm9pZCwgZnJlZSwgKHZvaWQqIHUgX191bnVzZWQpKTsKK0RJU0FMTE9XX0FMTE9DQVRJT04odm9pZCosIHJlYWxsb2MsICh2b2lkKiB1MSBfX3VudXNlZCwgc2l6ZV90IHUyIF9fdW51c2VkKSk7CitESVNBTExPV19BTExPQ0FUSU9OKHZvaWQqLCBjYWxsb2MsIChzaXplX3QgdTEgX191bnVzZWQsIHNpemVfdCB1MiBfX3VudXNlZCkpOwogCiBzdGF0aWMgY2hhciB0bXBfZXJyX2J1Zls3NjhdOwogc3RhdGljIGNoYXIgX19saW5rZXJfZGxfZXJyX2J1Zls3NjhdOwpAQCAtMTg3LDE3ICsxODcsMTYgQEAKICAqLwogZXh0ZXJuICJDIiB2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgcnRsZF9kYl9kbGFjdGl2aXR5KCk7CiAKLXN0YXRpYyByX2RlYnVnIF9yX2RlYnVnID0gezEsIE5VTEwsICZydGxkX2RiX2RsYWN0aXZpdHksIFJUX0NPTlNJU1RFTlQsIDB9Owotc3RhdGljIGxpbmtfbWFwX3QqIHJfZGVidWdfdGFpbCA9IDA7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdfX3JfZGVidWdfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHJfZGVidWcgX3JfZGVidWcgPSB7MSwgTlVMTCwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KCZydGxkX2RiX2RsYWN0aXZpdHkpLCByX2RlYnVnOjpSVF9DT05TSVNURU5ULCAwfTsKK3N0YXRpYyBsaW5rX21hcCogcl9kZWJ1Z190YWlsID0gMDsKIAotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnRGVidWdNdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0KLXN0YXRpYyB2b2lkIGluc2VydF9zb2luZm9faW50b19kZWJ1Z19tYXAoc29pbmZvICogaW5mbykgeworc3RhdGljIHZvaWQgaW5zZXJ0X3NvaW5mb19pbnRvX2RlYnVnX21hcChzb2luZm8qIGluZm8pIHsKICAgICAvLyBDb3B5IHRoZSBuZWNlc3NhcnkgZmllbGRzIGludG8gdGhlIGRlYnVnIHN0cnVjdHVyZS4KLSAgICBsaW5rX21hcF90KiBtYXAgPSAmKGluZm8tPmxpbmtfbWFwKTsKKyAgICBsaW5rX21hcCogbWFwID0gJihpbmZvLT5saW5rX21hcF9oZWFkKTsKICAgICBtYXAtPmxfYWRkciA9IGluZm8tPmxvYWRfYmlhczsKLSAgICBtYXAtPmxfbmFtZSA9IChjaGFyKikgaW5mby0+bmFtZTsKLSAgICBtYXAtPmxfbGQgPSAodWludHB0cl90KWluZm8tPmR5bmFtaWM7CisgICAgbWFwLT5sX25hbWUgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLT5uYW1lKTsKKyAgICBtYXAtPmxfbGQgPSBpbmZvLT5keW5hbWljOwogCiAgICAgLyogU3RpY2sgdGhlIG5ldyBsaWJyYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgICAgICogZ2RiIHRlbmRzIHRvIGNhcmUgbW9yZSBhYm91dCBsaWJjIHRoYW4gaXQgZG9lcwpAQCAtMjE3LDcgKzIxNiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZV9zb2luZm9fZnJvbV9kZWJ1Z19tYXAoc29pbmZvKiBpbmZvKSB7Ci0gICAgbGlua19tYXBfdCogbWFwID0gJihpbmZvLT5saW5rX21hcCk7CisgICAgbGlua19tYXAqIG1hcCA9ICYoaW5mby0+bGlua19tYXBfaGVhZCk7CiAKICAgICBpZiAocl9kZWJ1Z190YWlsID09IG1hcCkgewogICAgICAgICByX2RlYnVnX3RhaWwgPSBtYXAtPmxfcHJldjsKQEAgLTIzNywxNCArMjM2LDE0IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnRGVidWdNdXRleCk7CisgICAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ19fcl9kZWJ1Z19tdXRleCk7CiAKLSAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfQUREOworICAgIF9yX2RlYnVnLnJfc3RhdGUgPSByX2RlYnVnOjpSVF9BREQ7CiAgICAgcnRsZF9kYl9kbGFjdGl2aXR5KCk7CiAKICAgICBpbnNlcnRfc29pbmZvX2ludG9fZGVidWdfbWFwKGluZm8pOwogCi0gICAgX3JfZGVidWcucl9zdGF0ZSA9IFJUX0NPTlNJU1RFTlQ7CisgICAgX3JfZGVidWcucl9zdGF0ZSA9IHJfZGVidWc6OlJUX0NPTlNJU1RFTlQ7CiAgICAgcnRsZF9kYl9kbGFjdGl2aXR5KCk7CiB9CiAKQEAgLTI1NCw3OCArMjUzLDU1IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnRGVidWdNdXRleCk7CisgICAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ19fcl9kZWJ1Z19tdXRleCk7CiAKLSAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfREVMRVRFOworICAgIF9yX2RlYnVnLnJfc3RhdGUgPSByX2RlYnVnOjpSVF9ERUxFVEU7CiAgICAgcnRsZF9kYl9kbGFjdGl2aXR5KCk7CiAKICAgICByZW1vdmVfc29pbmZvX2Zyb21fZGVidWdfbWFwKGluZm8pOwogCi0gICAgX3JfZGVidWcucl9zdGF0ZSA9IFJUX0NPTlNJU1RFTlQ7CisgICAgX3JfZGVidWcucl9zdGF0ZSA9IHJfZGVidWc6OlJUX0NPTlNJU1RFTlQ7CiAgICAgcnRsZF9kYl9kbGFjdGl2aXR5KCk7CiB9CiAKIHZvaWQgbm90aWZ5X2dkYl9vZl9saWJyYXJpZXMoKSB7Ci0gICAgX3JfZGVidWcucl9zdGF0ZSA9IFJUX0FERDsKLSAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKLSAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfQ09OU0lTVEVOVDsKLSAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKKyAgX3JfZGVidWcucl9zdGF0ZSA9IHJfZGVidWc6OlJUX0FERDsKKyAgcnRsZF9kYl9kbGFjdGl2aXR5KCk7CisgIF9yX2RlYnVnLnJfc3RhdGUgPSByX2RlYnVnOjpSVF9DT05TSVNURU5UOworICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKIH0KIAotc3RhdGljIGJvb2wgZW5zdXJlX2ZyZWVfbGlzdF9ub25fZW1wdHkoKSB7Ci0gIGlmIChnU29JbmZvRnJlZUxpc3QgIT0gTlVMTCkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gQWxsb2NhdGUgYSBuZXcgcG9vbC4KLSAgc29pbmZvX3Bvb2xfdCogcG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c29pbmZvX3Bvb2xfdCo+KG1tYXAoTlVMTCwgc2l6ZW9mKCpwb29sKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFEfFBST1RfV1JJVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIDAsIDApKTsKLSAgaWYgKHBvb2wgPT0gTUFQX0ZBSUxFRCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIEFkZCB0aGUgcG9vbCB0byBvdXIgbGlzdCBvZiBwb29scy4KLSAgcG9vbC0+bmV4dCA9IGdTb0luZm9Qb29sczsKLSAgZ1NvSW5mb1Bvb2xzID0gcG9vbDsKLQotICAvLyBDaGFpbiB0aGUgZW50cmllcyBpbiB0aGUgbmV3IHBvb2wgb250byB0aGUgZnJlZSBsaXN0LgotICBnU29JbmZvRnJlZUxpc3QgPSAmcG9vbC0+aW5mb1swXTsKLSAgc29pbmZvKiBuZXh0ID0gTlVMTDsKLSAgZm9yIChpbnQgaSA9IFNPSU5GT19QRVJfUE9PTCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgcG9vbC0+aW5mb1tpXS5uZXh0ID0gbmV4dDsKLSAgICBuZXh0ID0gJnBvb2wtPmluZm9baV07Ci0gIH0KLQotICByZXR1cm4gdHJ1ZTsKK0xpbmtlZExpc3RFbnRyeTxzb2luZm8+KiBTb2luZm9MaXN0QWxsb2NhdG9yOjphbGxvYygpIHsKKyAgcmV0dXJuIGdfc29pbmZvX2xpbmtzX2FsbG9jYXRvci5hbGxvYygpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc29pbmZvX3Bvb2xfcHJvdGVjdGlvbihpbnQgcHJvdGVjdGlvbikgewotICBmb3IgKHNvaW5mb19wb29sX3QqIHAgPSBnU29JbmZvUG9vbHM7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpIHsKLSAgICBpZiAobXByb3RlY3QocCwgc2l6ZW9mKCpwKSwgcHJvdGVjdGlvbikgPT0gLTEpIHsKLSAgICAgIGFib3J0KCk7IC8vIENhbid0IGhhcHBlbi4KLSAgICB9Ci0gIH0KK3ZvaWQgU29pbmZvTGlzdEFsbG9jYXRvcjo6ZnJlZShMaW5rZWRMaXN0RW50cnk8c29pbmZvPiogZW50cnkpIHsKKyAgZ19zb2luZm9fbGlua3NfYWxsb2NhdG9yLmZyZWUoZW50cnkpOwogfQogCi1zdGF0aWMgc29pbmZvKiBzb2luZm9fYWxsb2MoY29uc3QgY2hhciogbmFtZSkgeworc3RhdGljIHZvaWQgcHJvdGVjdF9kYXRhKGludCBwcm90ZWN0aW9uKSB7CisgIGdfc29pbmZvX2FsbG9jYXRvci5wcm90ZWN0X2FsbChwcm90ZWN0aW9uKTsKKyAgZ19zb2luZm9fbGlua3NfYWxsb2NhdG9yLnByb3RlY3RfYWxsKHByb3RlY3Rpb24pOworfQorCitzdGF0aWMgc29pbmZvKiBzb2luZm9fYWxsb2MoY29uc3QgY2hhciogbmFtZSwgc3RydWN0IHN0YXQqIGZpbGVfc3RhdCkgewogICBpZiAoc3RybGVuKG5hbWUpID49IFNPSU5GT19OQU1FX0xFTikgewogICAgIERMX0VSUigibGlicmFyeSBuYW1lIFwiJXNcIiB0b28gbG9uZyIsIG5hbWUpOwogICAgIHJldHVybiBOVUxMOwogICB9CiAKLSAgaWYgKCFlbnN1cmVfZnJlZV9saXN0X25vbl9lbXB0eSgpKSB7Ci0gICAgRExfRVJSKCJvdXQgb2YgbWVtb3J5IHdoZW4gbG9hZGluZyBcIiVzXCIiLCBuYW1lKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8vIFRha2UgdGhlIGhlYWQgZWxlbWVudCBvZmYgdGhlIGZyZWUgbGlzdC4KLSAgc29pbmZvKiBzaSA9IGdTb0luZm9GcmVlTGlzdDsKLSAgZ1NvSW5mb0ZyZWVMaXN0ID0gZ1NvSW5mb0ZyZWVMaXN0LT5uZXh0OworICBzb2luZm8qIHNpID0gZ19zb2luZm9fYWxsb2NhdG9yLmFsbG9jKCk7CiAKICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV3IGVsZW1lbnQuCiAgIG1lbXNldChzaSwgMCwgc2l6ZW9mKHNvaW5mbykpOwogICBzdHJsY3B5KHNpLT5uYW1lLCBuYW1lLCBzaXplb2Yoc2ktPm5hbWUpKTsKKyAgc2ktPmZsYWdzID0gRkxBR19ORVdfU09JTkZPOworCisgIGlmIChmaWxlX3N0YXQgIT0gTlVMTCkgeworICAgIHNpLT5zZXRfc3RfZGV2KGZpbGVfc3RhdC0+c3RfZGV2KTsKKyAgICBzaS0+c2V0X3N0X2lubyhmaWxlX3N0YXQtPnN0X2lubyk7CisgIH0KKwogICBzb25leHQtPm5leHQgPSBzaTsKICAgc29uZXh0ID0gc2k7CiAKQEAgLTMzMywxMiArMzA5LDE1IEBACiAgIHJldHVybiBzaTsKIH0KIAotc3RhdGljIHZvaWQgc29pbmZvX2ZyZWUoc29pbmZvKiBzaSkKLXsKK3N0YXRpYyB2b2lkIHNvaW5mb19mcmVlKHNvaW5mbyogc2kpIHsKICAgICBpZiAoc2kgPT0gTlVMTCkgewogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKHNpLT5iYXNlICE9IDAgJiYgc2ktPnNpemUgIT0gMCkgeworICAgICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpLT5iYXNlKSwgc2ktPnNpemUpOworICAgIH0KKwogICAgIHNvaW5mbyAqcHJldiA9IE5VTEwsICp0cmF2OwogCiAgICAgVFJBQ0UoIm5hbWUgJXM6IGZyZWVpbmcgc29pbmZvIEAgJXAiLCBzaS0+bmFtZSwgc2kpOwpAQCAtMzU0LDYgKzMzMyw5IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvLyBjbGVhciBsaW5rcyB0by9mcm9tIHNpCisgICAgc2ktPnJlbW92ZV9hbGxfbGlua3MoKTsKKwogICAgIC8qIHByZXYgd2lsbCBuZXZlciBiZSBOVUxMLCBiZWNhdXNlIHRoZSBmaXJzdCBlbnRyeSBpbiBzb2xpc3QgaXMKICAgICAgICBhbHdheXMgdGhlIHN0YXRpYyBsaWJkbF9pbmZvLgogICAgICovCkBAIC0zNjEsOCArMzQzLDggQEAKICAgICBpZiAoc2kgPT0gc29uZXh0KSB7CiAgICAgICAgIHNvbmV4dCA9IHByZXY7CiAgICAgfQotICAgIHNpLT5uZXh0ID0gZ1NvSW5mb0ZyZWVMaXN0OwotICAgIGdTb0luZm9GcmVlTGlzdCA9IHNpOworCisgICAgZ19zb2luZm9fYWxsb2NhdG9yLmZyZWUoc2kpOwogfQogCiAKQEAgLTM5MiwxNCArMzc0LDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkIHBhcnNlX0xEX0xJQlJBUllfUEFUSChjb25zdCBjaGFyKiBwYXRoKSB7Ci0gIHBhcnNlX3BhdGgocGF0aCwgIjoiLCBnTGRQYXRocywKLSAgICAgICAgICAgICBnTGRQYXRoc0J1ZmZlciwgc2l6ZW9mKGdMZFBhdGhzQnVmZmVyKSwgTERQQVRIX01BWCk7CisgIHBhcnNlX3BhdGgocGF0aCwgIjoiLCBnX2xkX2xpYnJhcnlfcGF0aHMsCisgICAgICAgICAgICAgZ19sZF9saWJyYXJ5X3BhdGhzX2J1ZmZlciwgc2l6ZW9mKGdfbGRfbGlicmFyeV9wYXRoc19idWZmZXIpLCBMRFBBVEhfTUFYKTsKIH0KIAogc3RhdGljIHZvaWQgcGFyc2VfTERfUFJFTE9BRChjb25zdCBjaGFyKiBwYXRoKSB7CiAgIC8vIFdlIGhhdmUgaGlzdG9yaWNhbGx5IHN1cHBvcnRlZCAnOicgYXMgd2VsbCBhcyAnICcgaW4gTERfUFJFTE9BRC4KLSAgcGFyc2VfcGF0aChwYXRoLCAiIDoiLCBnTGRQcmVsb2FkTmFtZXMsCi0gICAgICAgICAgICAgZ0xkUHJlbG9hZHNCdWZmZXIsIHNpemVvZihnTGRQcmVsb2Fkc0J1ZmZlciksIExEUFJFTE9BRF9NQVgpOworICBwYXJzZV9wYXRoKHBhdGgsICIgOiIsIGdfbGRfcHJlbG9hZF9uYW1lcywKKyAgICAgICAgICAgICBnX2xkX3ByZWxvYWRzX2J1ZmZlciwgc2l6ZW9mKGdfbGRfcHJlbG9hZHNfYnVmZmVyKSwgTERQUkVMT0FEX01BWCk7CiB9CiAKICNpZiBkZWZpbmVkKF9fYXJtX18pCkBAIC00MTMsMTggKzM5NSwxNiBAQAogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgZXhwb3NlZCB2aWEgZGxmY24uY3BwIGFuZCBsaWJkbC5zby4KICAqLwotX1Vud2luZF9QdHIgZGxfdW53aW5kX2ZpbmRfZXhpZHgoX1Vud2luZF9QdHIgcGMsIGludCAqcGNvdW50KQotewotICAgIHNvaW5mbyAqc2k7CitfVW53aW5kX1B0ciBkbF91bndpbmRfZmluZF9leGlkeChfVW53aW5kX1B0ciBwYywgaW50KiBwY291bnQpIHsKICAgICB1bnNpZ25lZCBhZGRyID0gKHVuc2lnbmVkKXBjOwogCi0gICAgZm9yIChzaSA9IHNvbGlzdDsgc2kgIT0gMDsgc2kgPSBzaS0+bmV4dCkgeworICAgIGZvciAoc29pbmZvKiBzaSA9IHNvbGlzdDsgc2kgIT0gMDsgc2kgPSBzaS0+bmV4dCkgewogICAgICAgICBpZiAoKGFkZHIgPj0gc2ktPmJhc2UpICYmIChhZGRyIDwgKHNpLT5iYXNlICsgc2ktPnNpemUpKSkgewogICAgICAgICAgICAgKnBjb3VudCA9IHNpLT5BUk1fZXhpZHhfY291bnQ7CiAgICAgICAgICAgICByZXR1cm4gKF9VbndpbmRfUHRyKXNpLT5BUk1fZXhpZHg7CiAgICAgICAgIH0KICAgICB9Ci0gICAqcGNvdW50ID0gMDsKKyAgICAqcGNvdW50ID0gMDsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDMyLDE1ICs0MTIsMTIgQEAKIAogLyogSGVyZSwgd2Ugb25seSBoYXZlIHRvIHByb3ZpZGUgYSBjYWxsYmFjayB0byBpdGVyYXRlIGFjcm9zcyBhbGwgdGhlCiAgKiBsb2FkZWQgbGlicmFyaWVzLiBnY2NfZWggZG9lcyB0aGUgcmVzdC4gKi8KLWludAotZGxfaXRlcmF0ZV9waGRyKGludCAoKmNiKShkbF9waGRyX2luZm8gKmluZm8sIHNpemVfdCBzaXplLCB2b2lkICpkYXRhKSwKLSAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQoteworaW50IGRsX2l0ZXJhdGVfcGhkcihpbnQgKCpjYikoZGxfcGhkcl9pbmZvKiBpbmZvLCBzaXplX3Qgc2l6ZSwgdm9pZCogZGF0YSksIHZvaWQqIGRhdGEpIHsKICAgICBpbnQgcnYgPSAwOwogICAgIGZvciAoc29pbmZvKiBzaSA9IHNvbGlzdDsgc2kgIT0gTlVMTDsgc2kgPSBzaS0+bmV4dCkgewogICAgICAgICBkbF9waGRyX2luZm8gZGxfaW5mbzsKLSAgICAgICAgZGxfaW5mby5kbHBpX2FkZHIgPSBzaS0+bGlua19tYXAubF9hZGRyOwotICAgICAgICBkbF9pbmZvLmRscGlfbmFtZSA9IHNpLT5saW5rX21hcC5sX25hbWU7CisgICAgICAgIGRsX2luZm8uZGxwaV9hZGRyID0gc2ktPmxpbmtfbWFwX2hlYWQubF9hZGRyOworICAgICAgICBkbF9pbmZvLmRscGlfbmFtZSA9IHNpLT5saW5rX21hcF9oZWFkLmxfbmFtZTsKICAgICAgICAgZGxfaW5mby5kbHBpX3BoZHIgPSBzaS0+cGhkcjsKICAgICAgICAgZGxfaW5mby5kbHBpX3BobnVtID0gc2ktPnBobnVtOwogICAgICAgICBydiA9IGNiKCZkbF9pbmZvLCBzaXplb2YoZGxfcGhkcl9pbmZvKSwgZGF0YSk7CkBAIC00NTEsNDAgKzQyOCw0OSBAQAogICAgIHJldHVybiBydjsKIH0KIAotc3RhdGljIEVsZl9TeW0qIHNvaW5mb19lbGZfbG9va3VwKHNvaW5mbyogc2ksIHVuc2lnbmVkIGhhc2gsIGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgICBFbGZfU3ltKiBzeW10YWIgPSBzaS0+c3ltdGFiOwotICAgIGNvbnN0IGNoYXIqIHN0cnRhYiA9IHNpLT5zdHJ0YWI7CitzdGF0aWMgRWxmVyhTeW0pKiBzb2luZm9fZWxmX2xvb2t1cChzb2luZm8qIHNpLCB1bnNpZ25lZCBoYXNoLCBjb25zdCBjaGFyKiBuYW1lKSB7CisgIEVsZlcoU3ltKSogc3ltdGFiID0gc2ktPnN5bXRhYjsKKyAgY29uc3QgY2hhciogc3RydGFiID0gc2ktPnN0cnRhYjsKIAotICAgIFRSQUNFX1RZUEUoTE9PS1VQLCAiU0VBUkNIICVzIGluICVzQCVwICV4ICV6ZCIsCi0gICAgICAgICAgICAgICBuYW1lLCBzaS0+bmFtZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2ktPmJhc2UpLCBoYXNoLCBoYXNoICUgc2ktPm5idWNrZXQpOworICBUUkFDRV9UWVBFKExPT0tVUCwgIlNFQVJDSCAlcyBpbiAlc0AlcCAleCAlemQiLAorICAgICAgICAgICAgIG5hbWUsIHNpLT5uYW1lLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+YmFzZSksIGhhc2gsIGhhc2ggJSBzaS0+bmJ1Y2tldCk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSBzaS0+YnVja2V0W2hhc2ggJSBzaS0+bmJ1Y2tldF07IG4gIT0gMDsgbiA9IHNpLT5jaGFpbltuXSkgewotICAgICAgICBFbGZfU3ltKiBzID0gc3ltdGFiICsgbjsKLSAgICAgICAgaWYgKHN0cmNtcChzdHJ0YWIgKyBzLT5zdF9uYW1lLCBuYW1lKSkgY29udGludWU7CisgIGZvciAodW5zaWduZWQgbiA9IHNpLT5idWNrZXRbaGFzaCAlIHNpLT5uYnVja2V0XTsgbiAhPSAwOyBuID0gc2ktPmNoYWluW25dKSB7CisgICAgRWxmVyhTeW0pKiBzID0gc3ltdGFiICsgbjsKKyAgICBpZiAoc3RyY21wKHN0cnRhYiArIHMtPnN0X25hbWUsIG5hbWUpKSBjb250aW51ZTsKIAotICAgICAgICAgICAgLyogb25seSBjb25jZXJuIG91cnNlbHZlcyB3aXRoIGdsb2JhbCBhbmQgd2VhayBzeW1ib2wgZGVmaW5pdGlvbnMgKi8KLSAgICAgICAgc3dpdGNoIChFTEZfU1RfQklORChzLT5zdF9pbmZvKSkgewotICAgICAgICBjYXNlIFNUQl9HTE9CQUw6Ci0gICAgICAgIGNhc2UgU1RCX1dFQUs6Ci0gICAgICAgICAgICBpZiAocy0+c3Rfc2huZHggPT0gU0hOX1VOREVGKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFRSQUNFX1RZUEUoTE9PS1VQLCAiRk9VTkQgJXMgaW4gJXMgKCVwKSAlemQiLAotICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBzaS0+bmFtZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocy0+c3RfdmFsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHMtPnN0X3NpemUpKTsKLSAgICAgICAgICAgIHJldHVybiBzOworICAgIC8qIG9ubHkgY29uY2VybiBvdXJzZWx2ZXMgd2l0aCBnbG9iYWwgYW5kIHdlYWsgc3ltYm9sIGRlZmluaXRpb25zICovCisgICAgc3dpdGNoIChFTEZfU1RfQklORChzLT5zdF9pbmZvKSkgeworICAgICAgY2FzZSBTVEJfR0xPQkFMOgorICAgICAgY2FzZSBTVEJfV0VBSzoKKyAgICAgICAgaWYgKHMtPnN0X3NobmR4ID09IFNITl9VTkRFRikgeworICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFRSQUNFX1RZUEUoTE9PS1VQLCAiRk9VTkQgJXMgaW4gJXMgKCVwKSAlemQiLAorICAgICAgICAgICAgICAgICBuYW1lLCBzaS0+bmFtZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocy0+c3RfdmFsdWUpLAorICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHMtPnN0X3NpemUpKTsKKyAgICAgICAgcmV0dXJuIHM7CisgICAgICBjYXNlIFNUQl9MT0NBTDoKKyAgICAgICAgY29udGludWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBfX2xpYmNfZmF0YWwoIkVSUk9SOiBVbmV4cGVjdGVkIFNUX0JJTkQgdmFsdWU6ICVkIGZvciAnJXMnIGluICclcyciLAorICAgICAgICAgICAgRUxGX1NUX0JJTkQocy0+c3RfaW5mbyksIG5hbWUsIHNpLT5uYW1lKTsKKyAgICB9CisgIH0KKworICBUUkFDRV9UWVBFKExPT0tVUCwgIk5PVCBGT1VORCAlcyBpbiAlc0AlcCAleCAlemQiLAorICAgICAgICAgICAgIG5hbWUsIHNpLT5uYW1lLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+YmFzZSksIGhhc2gsIGhhc2ggJSBzaS0+bmJ1Y2tldCk7CisKKworICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGVsZmhhc2goY29uc3QgY2hhciogX25hbWUpIHsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBuYW1lID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfbmFtZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBuYW1lID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oX25hbWUpOwogICAgIHVuc2lnbmVkIGggPSAwLCBnOwogCi0gICAgd2hpbGUoKm5hbWUpIHsKKyAgICB3aGlsZSAoKm5hbWUpIHsKICAgICAgICAgaCA9IChoIDw8IDQpICsgKm5hbWUrKzsKICAgICAgICAgZyA9IGggJiAweGYwMDAwMDAwOwogICAgICAgICBoIF49IGc7CkBAIC00OTMsMTIgKzQ3OSwxMSBAQAogICAgIHJldHVybiBoOwogfQogCi1zdGF0aWMgRWxmX1N5bSogc29pbmZvX2RvX2xvb2t1cChzb2luZm8qIHNpLCBjb25zdCBjaGFyKiBuYW1lLCBzb2luZm8qKiBsc2ksIHNvaW5mbyogbmVlZGVkW10pIHsKK3N0YXRpYyBFbGZXKFN5bSkqIHNvaW5mb19kb19sb29rdXAoc29pbmZvKiBzaSwgY29uc3QgY2hhciogbmFtZSwgc29pbmZvKiogbHNpLCBzb2luZm8qIG5lZWRlZFtdKSB7CiAgICAgdW5zaWduZWQgZWxmX2hhc2ggPSBlbGZoYXNoKG5hbWUpOwotICAgIEVsZl9TeW0qIHMgPSBOVUxMOworICAgIEVsZlcoU3ltKSogcyA9IE5VTEw7CiAKICAgICBpZiAoc2kgIT0gTlVMTCAmJiBzb21haW4gIT0gTlVMTCkgewotCiAgICAgICAgIC8qCiAgICAgICAgICAqIExvY2FsIHNjb3BlIGlzIGV4ZWN1dGFibGUgc2NvcGUuIEp1c3Qgc3RhcnQgbG9va2luZyBpbnRvIGl0IHJpZ2h0IGF3YXkKICAgICAgICAgICogZm9yIHRoZSBzaG9ydGN1dC4KQEAgLTUxMCw2ICs0OTUsMTUgQEAKICAgICAgICAgICAgICAgICAqbHNpID0gc2k7CiAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBOZXh0LCBsb29rIGZvciBpdCBpbiB0aGUgcHJlbG9hZHMgbGlzdCAqLworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGdfbGRfcHJlbG9hZHNbaV0gIT0gTlVMTDsgaSsrKSB7CisgICAgICAgICAgICAgICAgcyA9IHNvaW5mb19lbGZfbG9va3VwKGdfbGRfcHJlbG9hZHNbaV0sIGVsZl9oYXNoLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAocyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICpsc2kgPSBnX2xkX3ByZWxvYWRzW2ldOworICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogT3JkZXIgb2Ygc3ltYm9sIGxvb2t1cCBpcyBjb250cm9sbGVkIGJ5IERUX1NZTUJPTElDIGZsYWcgKi8KIApAQCAtNTI3LDYgKzUyMSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAqbHNpID0gc29tYWluOwogICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogTmV4dCwgbG9vayBmb3IgaXQgaW4gdGhlIHByZWxvYWRzIGxpc3QgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgZ19sZF9wcmVsb2Fkc1tpXSAhPSBOVUxMOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcyA9IHNvaW5mb19lbGZfbG9va3VwKGdfbGRfcHJlbG9hZHNbaV0sIGVsZl9oYXNoLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKmxzaSA9IGdfbGRfcHJlbG9hZHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8qIExvb2sgZm9yIHN5bWJvbHMgaW4gdGhlIGxvY2FsIHNjb3BlICh0aGUgb2JqZWN0IHdobyBpcwpAQCAtNTU4LDE2ICs1NjEsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgKmxzaSA9IHNvbWFpbjsKICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KIAotICAgIC8qIE5leHQsIGxvb2sgZm9yIGl0IGluIHRoZSBwcmVsb2FkcyBsaXN0ICovCi0gICAgZm9yIChpbnQgaSA9IDA7IGdMZFByZWxvYWRzW2ldICE9IE5VTEw7IGkrKykgewotICAgICAgICBzID0gc29pbmZvX2VsZl9sb29rdXAoZ0xkUHJlbG9hZHNbaV0sIGVsZl9oYXNoLCBuYW1lKTsKLSAgICAgICAgaWYgKHMgIT0gTlVMTCkgewotICAgICAgICAgICAgKmxzaSA9IGdMZFByZWxvYWRzW2ldOwotICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgIC8qIE5leHQsIGxvb2sgZm9yIGl0IGluIHRoZSBwcmVsb2FkcyBsaXN0ICovCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGdfbGRfcHJlbG9hZHNbaV0gIT0gTlVMTDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHMgPSBzb2luZm9fZWxmX2xvb2t1cChnX2xkX3ByZWxvYWRzW2ldLCBlbGZfaGFzaCwgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpsc2kgPSBnX2xkX3ByZWxvYWRzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC01OTQsMTcgKzU5Nyw1MCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0vKiBUaGlzIGlzIHVzZWQgYnkgZGxzeW0oMykuICBJdCBwZXJmb3JtcyBzeW1ib2wgbG9va3VwIG9ubHkgd2l0aGluIHRoZQotICAgc3BlY2lmaWVkIHNvaW5mbyBvYmplY3QgYW5kIG5vdCBpbiBhbnkgb2YgaXRzIGRlcGVuZGVuY2llcy4KKy8vIEFub3RoZXIgc29pbmZvIGxpc3QgYWxsb2NhdG9yIHRvIHVzZSBpbiBkbHN5bS4gV2UgZG9uJ3QgcmV1c2UKKy8vIFNvaW5mb0xpc3RBbGxvY2F0b3IgYmVjYXVzZSBpdCBpcyB3cml0ZS1wcm90ZWN0ZWQgbW9zdCBvZiB0aGUgdGltZS4KK3N0YXRpYyBMaW5rZXJBbGxvY2F0b3I8TGlua2VkTGlzdEVudHJ5PHNvaW5mbz4+IGdfc29pbmZvX2xpc3RfYWxsb2NhdG9yX3J3OworY2xhc3MgU29pbmZvTGlzdEFsbG9jYXRvclJXIHsKKyBwdWJsaWM6CisgIHN0YXRpYyBMaW5rZWRMaXN0RW50cnk8c29pbmZvPiogYWxsb2MoKSB7CisgICAgcmV0dXJuIGdfc29pbmZvX2xpc3RfYWxsb2NhdG9yX3J3LmFsbG9jKCk7CisgIH0KIAotICAgVE9ETzogT25seSBsb29raW5nIGluIHRoZSBzcGVjaWZpZWQgc29pbmZvIHNlZW1zIHdyb25nLiBkbHN5bSgzKSBzYXlzCi0gICB0aGF0IGl0IHNob3VsZCBkbyBhIGJyZWFkdGggZmlyc3Qgc2VhcmNoIHRocm91Z2ggdGhlIGRlcGVuZGVuY3kKLSAgIHRyZWUuIFRoaXMgYWdyZWVzIHdpdGggdGhlIEVMRiBzcGVjIChha2EgU3lzdGVtIFYgQXBwbGljYXRpb24KLSAgIEJpbmFyeSBJbnRlcmZhY2UpIHdoZXJlIGluIENoYXB0ZXIgNSBpdCBkaXNjdXNzIHJlc29sdmluZyAiU2hhcmVkCi0gICBPYmplY3QgRGVwZW5kZW5jaWVzIiBpbiBicmVhZHRoIGZpcnN0IHNlYXJjaCBvcmRlci4KLSAqLwotRWxmX1N5bSogZGxzeW1faGFuZGxlX2xvb2t1cChzb2luZm8qIHNpLCBjb25zdCBjaGFyKiBuYW1lKSB7Ci0gICAgcmV0dXJuIHNvaW5mb19lbGZfbG9va3VwKHNpLCBlbGZoYXNoKG5hbWUpLCBuYW1lKTsKKyAgc3RhdGljIHZvaWQgZnJlZShMaW5rZWRMaXN0RW50cnk8c29pbmZvPiogcHRyKSB7CisgICAgZ19zb2luZm9fbGlzdF9hbGxvY2F0b3JfcncuZnJlZShwdHIpOworICB9Cit9OworCisvLyBUaGlzIGlzIHVzZWQgYnkgZGxzeW0oMykuICBJdCBwZXJmb3JtcyBzeW1ib2wgbG9va3VwIG9ubHkgd2l0aGluIHRoZQorLy8gc3BlY2lmaWVkIHNvaW5mbyBvYmplY3QgYW5kIGl0cyBkZXBlbmRlbmNpZXMgaW4gYnJlYWR0aCBmaXJzdCBvcmRlci4KK0VsZlcoU3ltKSogZGxzeW1faGFuZGxlX2xvb2t1cChzb2luZm8qIHNpLCBzb2luZm8qKiBmb3VuZCwgY29uc3QgY2hhciogbmFtZSkgeworICBMaW5rZWRMaXN0PHNvaW5mbywgU29pbmZvTGlzdEFsbG9jYXRvclJXPiB2aXNpdF9saXN0OworICBMaW5rZWRMaXN0PHNvaW5mbywgU29pbmZvTGlzdEFsbG9jYXRvclJXPiB2aXNpdGVkOworICB2aXNpdF9saXN0LnB1c2hfYmFjayhzaSk7CisgIHNvaW5mbyogY3VycmVudF9zb2luZm87CisgIHdoaWxlICgoY3VycmVudF9zb2luZm8gPSB2aXNpdF9saXN0LnBvcF9mcm9udCgpKSAhPSBudWxscHRyKSB7CisgICAgaWYgKHZpc2l0ZWQuY29udGFpbnMoY3VycmVudF9zb2luZm8pKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBFbGZXKFN5bSkqIHJlc3VsdCA9IHNvaW5mb19lbGZfbG9va3VwKGN1cnJlbnRfc29pbmZvLCBlbGZoYXNoKG5hbWUpLCBuYW1lKTsKKworICAgIGlmIChyZXN1bHQgIT0gbnVsbHB0cikgeworICAgICAgKmZvdW5kID0gY3VycmVudF9zb2luZm87CisgICAgICB2aXNpdF9saXN0LmNsZWFyKCk7CisgICAgICB2aXNpdGVkLmNsZWFyKCk7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICB2aXNpdGVkLnB1c2hfYmFjayhjdXJyZW50X3NvaW5mbyk7CisKKyAgICBjdXJyZW50X3NvaW5mby0+Z2V0X2NoaWxkcmVuKCkuZm9yX2VhY2goWyZdKHNvaW5mbyogY2hpbGQpIHsKKyAgICAgIHZpc2l0X2xpc3QucHVzaF9iYWNrKGNoaWxkKTsKKyAgICB9KTsKKyAgfQorCisgIHZpc2l0X2xpc3QuY2xlYXIoKTsKKyAgdmlzaXRlZC5jbGVhcigpOworICByZXR1cm4gbnVsbHB0cjsKIH0KIAogLyogVGhpcyBpcyB1c2VkIGJ5IGRsc3ltKDMpIHRvIHBlcmZvcm1zIGEgZ2xvYmFsIHN5bWJvbCBsb29rdXAuIElmIHRoZQpAQCAtNjEyLDE0ICs2NDgsMTQgQEAKICAgIGJlZ2lubmluZyBvZiB0aGUgZ2xvYmFsIHNvbGlzdC4gT3RoZXJ3aXNlIHRoZSBzZWFyY2ggc3RhcnRzIGF0IHRoZQogICAgc3BlY2lmaWVkIHNvaW5mbyAoZm9yIFJUTERfTkVYVCkuCiAgKi8KLUVsZl9TeW0qIGRsc3ltX2xpbmVhcl9sb29rdXAoY29uc3QgY2hhciogbmFtZSwgc29pbmZvKiogZm91bmQsIHNvaW5mbyogc3RhcnQpIHsKK0VsZlcoU3ltKSogZGxzeW1fbGluZWFyX2xvb2t1cChjb25zdCBjaGFyKiBuYW1lLCBzb2luZm8qKiBmb3VuZCwgc29pbmZvKiBzdGFydCkgewogICB1bnNpZ25lZCBlbGZfaGFzaCA9IGVsZmhhc2gobmFtZSk7CiAKICAgaWYgKHN0YXJ0ID09IE5VTEwpIHsKICAgICBzdGFydCA9IHNvbGlzdDsKICAgfQogCi0gIEVsZl9TeW0qIHMgPSBOVUxMOworICBFbGZXKFN5bSkqIHMgPSBOVUxMOwogICBmb3IgKHNvaW5mbyogc2kgPSBzdGFydDsgKHMgPT0gTlVMTCkgJiYgKHNpICE9IE5VTEwpOyBzaSA9IHNpLT5uZXh0KSB7CiAgICAgcyA9IHNvaW5mb19lbGZfbG9va3VwKHNpLCBlbGZfaGFzaCwgbmFtZSk7CiAgICAgaWYgKHMgIT0gTlVMTCkgewpAQCAtNjM3LDcgKzY3Myw3IEBACiB9CiAKIHNvaW5mbyogZmluZF9jb250YWluaW5nX2xpYnJhcnkoY29uc3Qgdm9pZCogcCkgewotICBFbGZfQWRkciBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcj4ocCk7CisgIEVsZlcoQWRkcikgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKT4ocCk7CiAgIGZvciAoc29pbmZvKiBzaSA9IHNvbGlzdDsgc2kgIT0gTlVMTDsgc2kgPSBzaS0+bmV4dCkgewogICAgIGlmIChhZGRyZXNzID49IHNpLT5iYXNlICYmIGFkZHJlc3MgLSBzaS0+YmFzZSA8IHNpLT5zaXplKSB7CiAgICAgICByZXR1cm4gc2k7CkBAIC02NDYsMTMgKzY4MiwxMyBAQAogICByZXR1cm4gTlVMTDsKIH0KIAotRWxmX1N5bSogZGxhZGRyX2ZpbmRfc3ltYm9sKHNvaW5mbyogc2ksIGNvbnN0IHZvaWQqIGFkZHIpIHsKLSAgRWxmX0FkZHIgc29hZGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcj4oYWRkcikgLSBzaS0+YmFzZTsKK0VsZlcoU3ltKSogZGxhZGRyX2ZpbmRfc3ltYm9sKHNvaW5mbyogc2ksIGNvbnN0IHZvaWQqIGFkZHIpIHsKKyAgRWxmVyhBZGRyKSBzb2FkZHIgPSByZWludGVycHJldF9jYXN0PEVsZlcoQWRkcik+KGFkZHIpIC0gc2ktPmJhc2U7CiAKICAgLy8gU2VhcmNoIHRoZSBsaWJyYXJ5J3Mgc3ltYm9sIHRhYmxlIGZvciBhbnkgZGVmaW5lZCBzeW1ib2wgd2hpY2gKICAgLy8gY29udGFpbnMgdGhpcyBhZGRyZXNzLgogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpLT5uY2hhaW47ICsraSkgewotICAgIEVsZl9TeW0qIHN5bSA9ICZzaS0+c3ltdGFiW2ldOworICAgIEVsZlcoU3ltKSogc3ltID0gJnNpLT5zeW10YWJbaV07CiAgICAgaWYgKHN5bS0+c3Rfc2huZHggIT0gU0hOX1VOREVGICYmCiAgICAgICAgIHNvYWRkciA+PSBzeW0tPnN0X3ZhbHVlICYmCiAgICAgICAgIHNvYWRkciA8IHN5bS0+c3RfdmFsdWUgKyBzeW0tPnN0X3NpemUpIHsKQEAgLTY2MywxOSArNjk5LDYgQEAKICAgcmV0dXJuIE5VTEw7CiB9CiAKLSNpZiAwCi1zdGF0aWMgdm9pZCBkdW1wKHNvaW5mbyogc2kpCi17Ci0gICAgRWxmX1N5bSogcyA9IHNpLT5zeW10YWI7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNpLT5uY2hhaW47IG4rKykgewotICAgICAgICBUUkFDRSgiJTA0ZD4gJTA4eDogJTAyeCAlMDR4ICUwOHggJTA4eCAlcyIsIG4sIHMsCi0gICAgICAgICAgICAgICBzLT5zdF9pbmZvLCBzLT5zdF9zaG5keCwgcy0+c3RfdmFsdWUsIHMtPnN0X3NpemUsCi0gICAgICAgICAgICAgICBzaS0+c3RydGFiICsgcy0+c3RfbmFtZSk7Ci0gICAgICAgIHMrKzsKLSAgICB9Ci19Ci0jZW5kaWYKLQogc3RhdGljIGludCBvcGVuX2xpYnJhcnlfb25fcGF0aChjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBjb25zdCBwYXRoc1tdKSB7CiAgIGNoYXIgYnVmWzUxMl07CiAgIGZvciAoc2l6ZV90IGkgPSAwOyBwYXRoc1tpXSAhPSBOVUxMOyArK2kpIHsKQEAgLTcwMiwxMzMgKzcyNSwxODAgQEAKICAgICAgIHJldHVybiBmZDsKICAgICB9CiAgICAgLy8gLi4uYnV0IG52aWRpYSBiaW5hcnkgYmxvYnMgKGF0IGxlYXN0KSByZWx5IG9uIHRoaXMgYmVoYXZpb3IsIHNvIGZhbGwgdGhyb3VnaCBmb3Igbm93LgorI2lmIGRlZmluZWQoX19MUDY0X18pCisgICAgcmV0dXJuIC0xOworI2VuZGlmCiAgIH0KIAogICAvLyBPdGhlcndpc2Ugd2UgdHJ5IExEX0xJQlJBUllfUEFUSCBmaXJzdCwgYW5kIGZhbGwgYmFjayB0byB0aGUgYnVpbHQtaW4gd2VsbCBrbm93biBwYXRocy4KLSAgaW50IGZkID0gb3Blbl9saWJyYXJ5X29uX3BhdGgobmFtZSwgZ0xkUGF0aHMpOworICBpbnQgZmQgPSBvcGVuX2xpYnJhcnlfb25fcGF0aChuYW1lLCBnX2xkX2xpYnJhcnlfcGF0aHMpOwogICBpZiAoZmQgPT0gLTEpIHsKLSAgICBmZCA9IG9wZW5fbGlicmFyeV9vbl9wYXRoKG5hbWUsIGdEZWZhdWx0TGRQYXRocyk7CisgICAgZmQgPSBvcGVuX2xpYnJhcnlfb25fcGF0aChuYW1lLCBrRGVmYXVsdExkUGF0aHMpOwogICB9CiAgIHJldHVybiBmZDsKIH0KIAotc3RhdGljIHNvaW5mbyogbG9hZF9saWJyYXJ5KGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgICAvLyBPcGVuIHRoZSBmaWxlLgotICAgIGludCBmZCA9IG9wZW5fbGlicmFyeShuYW1lKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKK3N0YXRpYyBzb2luZm8qIGxvYWRfbGlicmFyeShjb25zdCBjaGFyKiBuYW1lLCBpbnQgZGxmbGFncywgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pIHsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBTY29wZWRGZCBmaWxlX2d1YXJkKC0xKTsKKworICAgIGlmIChleHRpbmZvICE9IE5VTEwgJiYgKGV4dGluZm8tPmZsYWdzICYgQU5EUk9JRF9ETEVYVF9VU0VfTElCUkFSWV9GRCkgIT0gMCkgeworICAgICAgZmQgPSBleHRpbmZvLT5saWJyYXJ5X2ZkOworICAgIH0gZWxzZSB7CisgICAgICAvLyBPcGVuIHRoZSBmaWxlLgorICAgICAgZmQgPSBvcGVuX2xpYnJhcnkobmFtZSk7CisgICAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgRExfRVJSKCJsaWJyYXJ5IFwiJXNcIiBub3QgZm91bmQiLCBuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICB9CisKKyAgICAgIGZpbGVfZ3VhcmQucmVzZXQoZmQpOworICAgIH0KKworICAgIEVsZlJlYWRlciBlbGZfcmVhZGVyKG5hbWUsIGZkKTsKKworICAgIHN0cnVjdCBzdGF0IGZpbGVfc3RhdDsKKyAgICBpZiAoVEVNUF9GQUlMVVJFX1JFVFJZKGZzdGF0KGZkLCAmZmlsZV9zdGF0KSkgIT0gMCkgeworICAgICAgRExfRVJSKCJ1bmFibGUgdG8gc3RhdCBmaWxlIGZvciB0aGUgbGlicmFyeSAlczogJXMiLCBuYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLy8gQ2hlY2sgZm9yIHN5bWxpbmsgYW5kIG90aGVyIHNpdHVhdGlvbnMgd2hlcmUKKyAgICAvLyBmaWxlIGNhbiBoYXZlIGRpZmZlcmVudCBuYW1lcy4KKyAgICBmb3IgKHNvaW5mbyogc2kgPSBzb2xpc3Q7IHNpICE9IE5VTEw7IHNpID0gc2ktPm5leHQpIHsKKyAgICAgIGlmIChzaS0+Z2V0X3N0X2RldigpICE9IDAgJiYKKyAgICAgICAgICBzaS0+Z2V0X3N0X2lubygpICE9IDAgJiYKKyAgICAgICAgICBzaS0+Z2V0X3N0X2RldigpID09IGZpbGVfc3RhdC5zdF9kZXYgJiYKKyAgICAgICAgICBzaS0+Z2V0X3N0X2lubygpID09IGZpbGVfc3RhdC5zdF9pbm8pIHsKKyAgICAgICAgVFJBQ0UoImxpYnJhcnkgXCIlc1wiIGlzIGFscmVhZHkgbG9hZGVkIHVuZGVyIGRpZmZlcmVudCBuYW1lL3BhdGggXCIlc1wiIC0gd2lsbCByZXR1cm4gZXhpc3Rpbmcgc29pbmZvIiwgbmFtZSwgc2ktPm5hbWUpOworICAgICAgICByZXR1cm4gc2k7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKChkbGZsYWdzICYgUlRMRF9OT0xPQUQpICE9IDApIHsKKyAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8vIFJlYWQgdGhlIEVMRiBoZWFkZXIgYW5kIGxvYWQgdGhlIHNlZ21lbnRzLgotICAgIEVsZlJlYWRlciBlbGZfcmVhZGVyKG5hbWUsIGZkKTsKLSAgICBpZiAoIWVsZl9yZWFkZXIuTG9hZCgpKSB7CisgICAgaWYgKCFlbGZfcmVhZGVyLkxvYWQoZXh0aW5mbykpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgY29uc3QgY2hhciogYm5hbWUgPSBzdHJyY2hyKG5hbWUsICcvJyk7Ci0gICAgc29pbmZvKiBzaSA9IHNvaW5mb19hbGxvYyhibmFtZSA/IGJuYW1lICsgMSA6IG5hbWUpOworICAgIHNvaW5mbyogc2kgPSBzb2luZm9fYWxsb2MoU0VBUkNIX05BTUUobmFtZSksICZmaWxlX3N0YXQpOwogICAgIGlmIChzaSA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBzaS0+YmFzZSA9IGVsZl9yZWFkZXIubG9hZF9zdGFydCgpOwogICAgIHNpLT5zaXplID0gZWxmX3JlYWRlci5sb2FkX3NpemUoKTsKICAgICBzaS0+bG9hZF9iaWFzID0gZWxmX3JlYWRlci5sb2FkX2JpYXMoKTsKLSAgICBzaS0+ZmxhZ3MgPSAwOwotICAgIHNpLT5lbnRyeSA9IDA7Ci0gICAgc2ktPmR5bmFtaWMgPSBOVUxMOwogICAgIHNpLT5waG51bSA9IGVsZl9yZWFkZXIucGhkcl9jb3VudCgpOwogICAgIHNpLT5waGRyID0gZWxmX3JlYWRlci5sb2FkZWRfcGhkcigpOworCisgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgd2hhdGV2ZXIgaXMgbG9hZGVkIEAgYmFzZSBpcyBhIHZhbGlkIEVMRgorICAgIC8vIHNoYXJlZCBsaWJyYXJ5IHdob3NlIHNlZ21lbnRzIGFyZSBwcm9wZXJseSBtYXBwZWQgaW4uCisgICAgVFJBQ0UoIlsgbG9hZF9saWJyYXJ5IGJhc2U9JXAgc2l6ZT0lenUgbmFtZT0nJXMnIF0iLAorICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpLT5iYXNlKSwgc2ktPnNpemUsIHNpLT5uYW1lKTsKKworICAgIGlmICghc29pbmZvX2xpbmtfaW1hZ2Uoc2ksIGV4dGluZm8pKSB7CisgICAgICBzb2luZm9fZnJlZShzaSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICByZXR1cm4gc2k7CiB9CiAKLXN0YXRpYyBzb2luZm8gKmZpbmRfbG9hZGVkX2xpYnJhcnkoY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBzb2luZm8gKnNpOwotICAgIGNvbnN0IGNoYXIgKmJuYW1lOwotCi0gICAgLy8gVE9ETzogZG9uJ3QgdXNlIGJhc2VuYW1lIG9ubHkgZm9yIGRldGVybWluaW5nIGxpYnJhcmllcwotICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9NjY3MAotCi0gICAgYm5hbWUgPSBzdHJyY2hyKG5hbWUsICcvJyk7Ci0gICAgYm5hbWUgPSBibmFtZSA/IGJuYW1lICsgMSA6IG5hbWU7Ci0KLSAgICBmb3IgKHNpID0gc29saXN0OyBzaSAhPSBOVUxMOyBzaSA9IHNpLT5uZXh0KSB7Ci0gICAgICAgIGlmICghc3RyY21wKGJuYW1lLCBzaS0+bmFtZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBzaTsKLSAgICAgICAgfQorc3RhdGljIHNvaW5mbyAqZmluZF9sb2FkZWRfbGlicmFyeV9ieV9uYW1lKGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgY29uc3QgY2hhciogc2VhcmNoX25hbWUgPSBTRUFSQ0hfTkFNRShuYW1lKTsKKyAgZm9yIChzb2luZm8qIHNpID0gc29saXN0OyBzaSAhPSBOVUxMOyBzaSA9IHNpLT5uZXh0KSB7CisgICAgaWYgKCFzdHJjbXAoc2VhcmNoX25hbWUsIHNpLT5uYW1lKSkgeworICAgICAgcmV0dXJuIHNpOwogICAgIH0KLSAgICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHNvaW5mbyogZmluZF9saWJyYXJ5X2ludGVybmFsKGNvbnN0IGNoYXIqIG5hbWUpIHsKK3N0YXRpYyBzb2luZm8qIGZpbmRfbGlicmFyeV9pbnRlcm5hbChjb25zdCBjaGFyKiBuYW1lLCBpbnQgZGxmbGFncywgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pIHsKICAgaWYgKG5hbWUgPT0gTlVMTCkgewogICAgIHJldHVybiBzb21haW47CiAgIH0KIAotICBzb2luZm8qIHNpID0gZmluZF9sb2FkZWRfbGlicmFyeShuYW1lKTsKLSAgaWYgKHNpICE9IE5VTEwpIHsKLSAgICBpZiAoc2ktPmZsYWdzICYgRkxBR19MSU5LRUQpIHsKLSAgICAgIHJldHVybiBzaTsKLSAgICB9Ci0gICAgRExfRVJSKCJPT1BTOiByZWN1cnNpdmUgbGluayB0byBcIiVzXCIiLCBzaS0+bmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KKyAgc29pbmZvKiBzaSA9IGZpbmRfbG9hZGVkX2xpYnJhcnlfYnlfbmFtZShuYW1lKTsKIAotICBUUkFDRSgiWyAnJXMnIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0LiAgTG9jYXRpbmcuLi5dIiwgbmFtZSk7Ci0gIHNpID0gbG9hZF9saWJyYXJ5KG5hbWUpOworICAvLyBMaWJyYXJ5IG1pZ2h0IHN0aWxsIGJlIGxvYWRlZCwgdGhlIGFjY3VyYXRlIGRldGVjdGlvbgorICAvLyBvZiB0aGlzIGZhY3QgaXMgZG9uZSBieSBsb2FkX2xpYnJhcnkKICAgaWYgKHNpID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKKyAgICBUUkFDRSgiWyAnJXMnIGhhcyBub3QgYmVlbiBmb3VuZCBieSBuYW1lLiAgVHJ5aW5nIGhhcmRlci4uLl0iLCBuYW1lKTsKKyAgICBzaSA9IGxvYWRfbGlicmFyeShuYW1lLCBkbGZsYWdzLCBleHRpbmZvKTsKICAgfQogCi0gIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHdoYXRldmVyIGlzIGxvYWRlZCBAIGJhc2UgaXMgYSB2YWxpZCBFTEYKLSAgLy8gc2hhcmVkIGxpYnJhcnkgd2hvc2Ugc2VnbWVudHMgYXJlIHByb3Blcmx5IG1hcHBlZCBpbi4KLSAgVFJBQ0UoIlsgZmluZF9saWJyYXJ5X2ludGVybmFsIGJhc2U9JXAgc2l6ZT0lenUgbmFtZT0nJXMnIF0iLAotICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+YmFzZSksIHNpLT5zaXplLCBzaS0+bmFtZSk7Ci0KLSAgaWYgKCFzb2luZm9fbGlua19pbWFnZShzaSkpIHsKLSAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2ktPmJhc2UpLCBzaS0+c2l6ZSk7Ci0gICAgc29pbmZvX2ZyZWUoc2kpOworICBpZiAoc2kgIT0gTlVMTCAmJiAoc2ktPmZsYWdzICYgRkxBR19MSU5LRUQpID09IDApIHsKKyAgICBETF9FUlIoInJlY3Vyc2l2ZSBsaW5rIHRvIFwiJXNcIiIsIHNpLT5uYW1lKTsKICAgICByZXR1cm4gTlVMTDsKICAgfQogCiAgIHJldHVybiBzaTsKIH0KIAotc3RhdGljIHNvaW5mbyogZmluZF9saWJyYXJ5KGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgc29pbmZvKiBzaSA9IGZpbmRfbGlicmFyeV9pbnRlcm5hbChuYW1lKTsKK3N0YXRpYyBzb2luZm8qIGZpbmRfbGlicmFyeShjb25zdCBjaGFyKiBuYW1lLCBpbnQgZGxmbGFncywgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pIHsKKyAgc29pbmZvKiBzaSA9IGZpbmRfbGlicmFyeV9pbnRlcm5hbChuYW1lLCBkbGZsYWdzLCBleHRpbmZvKTsKICAgaWYgKHNpICE9IE5VTEwpIHsKICAgICBzaS0+cmVmX2NvdW50Kys7CiAgIH0KICAgcmV0dXJuIHNpOwogfQogCi1zdGF0aWMgaW50IHNvaW5mb191bmxvYWQoc29pbmZvKiBzaSkgeworc3RhdGljIHZvaWQgc29pbmZvX3VubG9hZChzb2luZm8qIHNpKSB7CiAgIGlmIChzaS0+cmVmX2NvdW50ID09IDEpIHsKICAgICBUUkFDRSgidW5sb2FkaW5nICclcyciLCBzaS0+bmFtZSk7CiAgICAgc2ktPkNhbGxEZXN0cnVjdG9ycygpOwogCi0gICAgZm9yIChFbGZfRHluKiBkID0gc2ktPmR5bmFtaWM7IGQtPmRfdGFnICE9IERUX05VTEw7ICsrZCkgewotICAgICAgaWYgKGQtPmRfdGFnID09IERUX05FRURFRCkgewotICAgICAgICBjb25zdCBjaGFyKiBsaWJyYXJ5X25hbWUgPSBzaS0+c3RydGFiICsgZC0+ZF91bi5kX3ZhbDsKLSAgICAgICAgVFJBQ0UoIiVzIG5lZWRzIHRvIHVubG9hZCAlcyIsIHNpLT5uYW1lLCBsaWJyYXJ5X25hbWUpOwotICAgICAgICBzb2luZm9fdW5sb2FkKGZpbmRfbG9hZGVkX2xpYnJhcnkobGlicmFyeV9uYW1lKSk7CisgICAgaWYgKChzaS0+ZmxhZ3MgfCBGTEFHX05FV19TT0lORk8pICE9IDApIHsKKyAgICAgIHNpLT5nZXRfY2hpbGRyZW4oKS5mb3JfZWFjaChbJl0gKHNvaW5mbyogY2hpbGQpIHsKKyAgICAgICAgVFJBQ0UoIiVzIG5lZWRzIHRvIHVubG9hZCAlcyIsIHNpLT5uYW1lLCBjaGlsZC0+bmFtZSk7CisgICAgICAgIHNvaW5mb191bmxvYWQoY2hpbGQpOworICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZvciAoRWxmVyhEeW4pKiBkID0gc2ktPmR5bmFtaWM7IGQtPmRfdGFnICE9IERUX05VTEw7ICsrZCkgeworICAgICAgICBpZiAoZC0+ZF90YWcgPT0gRFRfTkVFREVEKSB7CisgICAgICAgICAgY29uc3QgY2hhciogbGlicmFyeV9uYW1lID0gc2ktPnN0cnRhYiArIGQtPmRfdW4uZF92YWw7CisgICAgICAgICAgVFJBQ0UoIiVzIG5lZWRzIHRvIHVubG9hZCAlcyIsIHNpLT5uYW1lLCBsaWJyYXJ5X25hbWUpOworICAgICAgICAgIHNvaW5mbyogbmVlZGVkID0gZmluZF9saWJyYXJ5KGxpYnJhcnlfbmFtZSwgUlRMRF9OT0xPQUQsIE5VTEwpOworICAgICAgICAgIGlmIChuZWVkZWQgIT0gTlVMTCkgeworICAgICAgICAgICAgc29pbmZvX3VubG9hZChuZWVkZWQpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOb3QgZm91bmQ6IGZvciBleGFtcGxlIGlmIHN5bWxpbmsgd2FzIGRlbGV0ZWQgYmV0d2VlbiBkbG9wZW4gYW5kIGRsY2xvc2UKKyAgICAgICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCByZWFsbHkgaGFuZGxlIGVycm9ycyBhdCB0aGlzIHBvaW50IC0gcHJpbnQgYW5kIGNvbnRpbnVlLgorICAgICAgICAgICAgUFJJTlQoIndhcm5pbmc6IGNvdWxkbid0IGZpbmQgJXMgbmVlZGVkIGJ5ICVzIG9uIHVubG9hZC4iLCBsaWJyYXJ5X25hbWUsIHNpLT5uYW1lKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKLSAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2ktPmJhc2UpLCBzaS0+c2l6ZSk7CiAgICAgbm90aWZ5X2dkYl9vZl91bmxvYWQoc2kpOwotICAgIHNvaW5mb19mcmVlKHNpKTsKICAgICBzaS0+cmVmX2NvdW50ID0gMDsKKyAgICBzb2luZm9fZnJlZShzaSk7CiAgIH0gZWxzZSB7CiAgICAgc2ktPnJlZl9jb3VudC0tOwogICAgIFRSQUNFKCJub3QgdW5sb2FkaW5nICclcycsIGRlY3JlbWVudGluZyByZWZfY291bnQgdG8gJXpkIiwgc2ktPm5hbWUsIHNpLT5yZWZfY291bnQpOwogICB9Ci0gIHJldHVybiAwOwogfQogCiB2b2lkIGRvX2FuZHJvaWRfZ2V0X0xEX0xJQlJBUllfUEFUSChjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSkgewotICBzbnByaW50ZihidWZmZXIsIGJ1ZmZlcl9zaXplLCAiJXM6JXMiLCBnRGVmYXVsdExkUGF0aHNbMF0sIGdEZWZhdWx0TGRQYXRoc1sxXSk7CisgIC8vIFVzZSBiYXNpYyBzdHJpbmcgbWFuaXB1bGF0aW9uIGNhbGxzIHRvIGF2b2lkIHNucHJpbnRmLgorICAvLyBzbnByaW50ZiBpbmRpcmVjdGx5IGNhbGxzIHB0aHJlYWRfZ2V0c3BlY2lmaWMgdG8gZ2V0IHRoZSBzaXplIG9mIGEgYnVmZmVyLgorICAvLyBXaGVuIGRlYnVnIG1hbGxvYyBpcyBlbmFibGVkLCB0aGlzIGNhbGwgcmV0dXJucyAwLiBUaGlzIGluIHR1cm4gY2F1c2VzCisgIC8vIHNucHJpbnRmIHRvIGRvIG5vdGhpbmcsIHdoaWNoIGNhdXNlcyBsaWJyYXJpZXMgdG8gZmFpbCB0byBsb2FkLgorICAvLyBTZWUgYi8xNzMwMjQ5MyBmb3IgZnVydGhlciBkZXRhaWxzLgorICAvLyBPbmNlIHRoZSBhYm92ZSBidWcgaXMgZml4ZWQsIHRoaXMgY29kZSBjYW4gYmUgbW9kaWZpZWQgdG8gdXNlCisgIC8vIHNucHJpbnRmIGFnYWluLgorICBzaXplX3QgcmVxdWlyZWRfbGVuID0gc3RybGVuKGtEZWZhdWx0TGRQYXRoc1swXSkgKyBzdHJsZW4oa0RlZmF1bHRMZFBhdGhzWzFdKSArIDI7CisgIGlmIChidWZmZXJfc2l6ZSA8IHJlcXVpcmVkX2xlbikgeworICAgIF9fbGliY19mYXRhbCgiYW5kcm9pZF9nZXRfTERfTElCUkFSWV9QQVRIIGZhaWxlZCwgYnVmZmVyIHRvbyBzbWFsbDogYnVmZmVyIGxlbiAlenUsIHJlcXVpcmVkIGxlbiAlenUiLAorICAgICAgICAgICAgICAgICBidWZmZXJfc2l6ZSwgcmVxdWlyZWRfbGVuKTsKKyAgfQorICBjaGFyKiBlbmQgPSBzdHBjcHkoYnVmZmVyLCBrRGVmYXVsdExkUGF0aHNbMF0pOworICAqZW5kID0gJzonOworICBzdHJjcHkoZW5kICsgMSwga0RlZmF1bHRMZFBhdGhzWzFdKTsKIH0KIAogdm9pZCBkb19hbmRyb2lkX3VwZGF0ZV9MRF9MSUJSQVJZX1BBVEgoY29uc3QgY2hhciogbGRfbGlicmFyeV9wYXRoKSB7CkBAIC04MzcsNTIgKzkwNyw1MiBAQAogICB9CiB9CiAKLXNvaW5mbyogZG9fZGxvcGVuKGNvbnN0IGNoYXIqIG5hbWUsIGludCBmbGFncykgewotICBpZiAoKGZsYWdzICYgfihSVExEX05PV3xSVExEX0xBWll8UlRMRF9MT0NBTHxSVExEX0dMT0JBTCkpICE9IDApIHsKK3NvaW5mbyogZG9fZGxvcGVuKGNvbnN0IGNoYXIqIG5hbWUsIGludCBmbGFncywgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pIHsKKyAgaWYgKChmbGFncyAmIH4oUlRMRF9OT1d8UlRMRF9MQVpZfFJUTERfTE9DQUx8UlRMRF9HTE9CQUx8UlRMRF9OT0xPQUQpKSAhPSAwKSB7CiAgICAgRExfRVJSKCJpbnZhbGlkIGZsYWdzIHRvIGRsb3BlbjogJXgiLCBmbGFncyk7CiAgICAgcmV0dXJuIE5VTEw7CiAgIH0KLSAgc2V0X3NvaW5mb19wb29sX3Byb3RlY3Rpb24oUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Ci0gIHNvaW5mbyogc2kgPSBmaW5kX2xpYnJhcnkobmFtZSk7CisgIGlmIChleHRpbmZvICE9IE5VTEwgJiYgKChleHRpbmZvLT5mbGFncyAmIH4oQU5EUk9JRF9ETEVYVF9WQUxJRF9GTEFHX0JJVFMpKSAhPSAwKSkgeworICAgIERMX0VSUigiaW52YWxpZCBleHRlbmRlZCBmbGFncyB0byBhbmRyb2lkX2Rsb3Blbl9leHQ6ICUiIFBSSXg2NCwgZXh0aW5mby0+ZmxhZ3MpOworICAgIHJldHVybiBOVUxMOworICB9CisgIHByb3RlY3RfZGF0YShQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKyAgc29pbmZvKiBzaSA9IGZpbmRfbGlicmFyeShuYW1lLCBmbGFncywgZXh0aW5mbyk7CiAgIGlmIChzaSAhPSBOVUxMKSB7CiAgICAgc2ktPkNhbGxDb25zdHJ1Y3RvcnMoKTsKICAgfQotICBzZXRfc29pbmZvX3Bvb2xfcHJvdGVjdGlvbihQUk9UX1JFQUQpOworICBwcm90ZWN0X2RhdGEoUFJPVF9SRUFEKTsKICAgcmV0dXJuIHNpOwogfQogCi1pbnQgZG9fZGxjbG9zZShzb2luZm8qIHNpKSB7Ci0gIHNldF9zb2luZm9fcG9vbF9wcm90ZWN0aW9uKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwotICBpbnQgcmVzdWx0ID0gc29pbmZvX3VubG9hZChzaSk7Ci0gIHNldF9zb2luZm9fcG9vbF9wcm90ZWN0aW9uKFBST1RfUkVBRCk7Ci0gIHJldHVybiByZXN1bHQ7Cit2b2lkIGRvX2RsY2xvc2Uoc29pbmZvKiBzaSkgeworICBwcm90ZWN0X2RhdGEoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisgIHNvaW5mb191bmxvYWQoc2kpOworICBwcm90ZWN0X2RhdGEoUFJPVF9SRUFEKTsKIH0KIAogI2lmIGRlZmluZWQoVVNFX1JFTEEpCi1zdGF0aWMgaW50IHNvaW5mb19yZWxvY2F0ZV9hKHNvaW5mbyogc2ksIEVsZl9SZWxhKiByZWxhLCB1bnNpZ25lZCBjb3VudCwgc29pbmZvKiBuZWVkZWRbXSkgewotICBFbGZfU3ltKiBzeW10YWIgPSBzaS0+c3ltdGFiOwotICBjb25zdCBjaGFyKiBzdHJ0YWIgPSBzaS0+c3RydGFiOwotICBFbGZfU3ltKiBzOwotICBFbGZfUmVsYSogc3RhcnQgPSByZWxhOworc3RhdGljIGludCBzb2luZm9fcmVsb2NhdGUoc29pbmZvKiBzaSwgRWxmVyhSZWxhKSogcmVsYSwgdW5zaWduZWQgY291bnQsIHNvaW5mbyogbmVlZGVkW10pIHsKKyAgRWxmVyhTeW0pKiBzOwogICBzb2luZm8qIGxzaTsKIAogICBmb3IgKHNpemVfdCBpZHggPSAwOyBpZHggPCBjb3VudDsgKytpZHgsICsrcmVsYSkgewotICAgIHVuc2lnbmVkIHR5cGUgPSBFTEZfUl9UWVBFKHJlbGEtPnJfaW5mbyk7Ci0gICAgdW5zaWduZWQgc3ltID0gRUxGX1JfU1lNKHJlbGEtPnJfaW5mbyk7Ci0gICAgRWxmX0FkZHIgcmVsb2MgPSBzdGF0aWNfY2FzdDxFbGZfQWRkcj4ocmVsYS0+cl9vZmZzZXQgKyBzaS0+bG9hZF9iaWFzKTsKLSAgICBFbGZfQWRkciBzeW1fYWRkciA9IDA7Ci0gICAgY2hhciogc3ltX25hbWUgPSBOVUxMOworICAgIHVuc2lnbmVkIHR5cGUgPSBFTEZXKFJfVFlQRSkocmVsYS0+cl9pbmZvKTsKKyAgICB1bnNpZ25lZCBzeW0gPSBFTEZXKFJfU1lNKShyZWxhLT5yX2luZm8pOworICAgIEVsZlcoQWRkcikgcmVsb2MgPSBzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihyZWxhLT5yX29mZnNldCArIHNpLT5sb2FkX2JpYXMpOworICAgIEVsZlcoQWRkcikgc3ltX2FkZHIgPSAwOworICAgIGNvbnN0IGNoYXIqIHN5bV9uYW1lID0gTlVMTDsKIAogICAgIERFQlVHKCJQcm9jZXNzaW5nICclcycgcmVsb2NhdGlvbiBhdCBpbmRleCAlemQiLCBzaS0+bmFtZSwgaWR4KTsKICAgICBpZiAodHlwZSA9PSAwKSB7IC8vIFJfKl9OT05FCiAgICAgICBjb250aW51ZTsKICAgICB9CiAgICAgaWYgKHN5bSAhPSAwKSB7Ci0gICAgICBzeW1fbmFtZSA9IChjaGFyICopKHN0cnRhYiArIHN5bXRhYltzeW1dLnN0X25hbWUpOworICAgICAgc3ltX25hbWUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzaS0+c3RydGFiICsgc2ktPnN5bXRhYltzeW1dLnN0X25hbWUpOwogICAgICAgcyA9IHNvaW5mb19kb19sb29rdXAoc2ksIHN5bV9uYW1lLCAmbHNpLCBuZWVkZWQpOwogICAgICAgaWYgKHMgPT0gTlVMTCkgewogICAgICAgICAvLyBXZSBvbmx5IGFsbG93IGFuIHVuZGVmaW5lZCBzeW1ib2wgaWYgdGhpcyBpcyBhIHdlYWsgcmVmZXJlbmNlLi4uCi0gICAgICAgIHMgPSAmc3ltdGFiW3N5bV07CisgICAgICAgIHMgPSAmc2ktPnN5bXRhYltzeW1dOwogICAgICAgICBpZiAoRUxGX1NUX0JJTkQocy0+c3RfaW5mbykgIT0gU1RCX1dFQUspIHsKICAgICAgICAgICBETF9FUlIoImNhbm5vdCBsb2NhdGUgc3ltYm9sIFwiJXNcIiByZWZlcmVuY2VkIGJ5IFwiJXNcIi4uLiIsIHN5bV9uYW1lLCBzaS0+bmFtZSk7CiAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtOTE4LDYgKzk4OCw3IEBACiAgICAgICAgIGNhc2UgUl9YODZfNjRfSlVNUF9TTE9UOgogICAgICAgICBjYXNlIFJfWDg2XzY0X0dMT0JfREFUOgogICAgICAgICBjYXNlIFJfWDg2XzY0XzMyOgorICAgICAgICBjYXNlIFJfWDg2XzY0XzY0OgogICAgICAgICBjYXNlIFJfWDg2XzY0X1JFTEFUSVZFOgogICAgICAgICAgIC8vIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcuCiAgICAgICAgICAgYnJlYWs7CkBAIC05MjYsMTIgKzk5NywxMiBAQAogICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgRExfRVJSKCJ1bmtub3duIHdlYWsgcmVsb2MgdHlwZSAlZCBAICVwICglZCkiLCB0eXBlLCByZWxhLCAoaW50KSAocmVsYSAtIHN0YXJ0KSk7CisgICAgICAgICAgRExfRVJSKCJ1bmtub3duIHdlYWsgcmVsb2MgdHlwZSAlZCBAICVwICglenUpIiwgdHlwZSwgcmVsYSwgaWR4KTsKICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIGdvdCBhIGRlZmluaXRpb24uCi0gICAgICAgIHN5bV9hZGRyID0gc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KHMtPnN0X3ZhbHVlICsgbHNpLT5sb2FkX2JpYXMpOworICAgICAgICBzeW1fYWRkciA9IHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KHMtPnN0X3ZhbHVlICsgbHNpLT5sb2FkX2JpYXMpOwogICAgICAgfQogICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NTeW1ib2wpOwogICAgIH0gZWxzZSB7CkBAIC05NDMsMTE3ICsxMDE0LDkyIEBACiAgICAgY2FzZSBSX0FBUkNINjRfSlVNUF9TTE9UOgogICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY0Fic29sdXRlKTsKICAgICAgICAgTUFSSyhyZWxhLT5yX29mZnNldCk7Ci0gICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gSk1QX1NMT1QgJTE2bHggPC0gJTE2bHggJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJlbG9jLAotICAgICAgICAgICAgICAgICAgICAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksCi0gICAgICAgICAgICAgICAgICAgIHN5bV9uYW1lKTsKLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgPSAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCk7CisgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gSk1QX1NMT1QgJTE2bGx4IDwtICUxNmxseCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICByZWxvYywgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLCBzeW1fbmFtZSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgPSAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUl9BQVJDSDY0X0dMT0JfREFUOgogICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY0Fic29sdXRlKTsKICAgICAgICAgTUFSSyhyZWxhLT5yX29mZnNldCk7Ci0gICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gR0xPQl9EQVQgJTE2bHggPC0gJTE2bHggJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJlbG9jLAotICAgICAgICAgICAgICAgICAgICAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksCi0gICAgICAgICAgICAgICAgICAgIHN5bV9uYW1lKTsKLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgPSAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCk7CisgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gR0xPQl9EQVQgJTE2bGx4IDwtICUxNmxseCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICByZWxvYywgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLCBzeW1fbmFtZSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgPSAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUl9BQVJDSDY0X0FCUzY0OgogICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY0Fic29sdXRlKTsKICAgICAgICAgTUFSSyhyZWxhLT5yX29mZnNldCk7Ci0gICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gQUJTNjQgJTE2bHggPC0gJTE2bHggJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJlbG9jLAotICAgICAgICAgICAgICAgICAgICAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksCi0gICAgICAgICAgICAgICAgICAgIHN5bV9uYW1lKTsKLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKz0gKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpOworICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIEFCUzY0ICUxNmxseCA8LSAlMTZsbHggJXNcbiIsCisgICAgICAgICAgICAgICAgICAgcmVsb2MsIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwgc3ltX25hbWUpOworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICs9IChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSX0FBUkNINjRfQUJTMzI6CiAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOwogICAgICAgICBNQVJLKHJlbGEtPnJfb2Zmc2V0KTsKLSAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBBQlMzMiAlMTZseCA8LSAlMTZseCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVsb2MsCi0gICAgICAgICAgICAgICAgICAgIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgc3ltX25hbWUpOwotICAgICAgICBpZiAoKHN0YXRpY19jYXN0PEVsZl9BZGRyPihJTlQzMl9NSU4pIDw9Ci0gICAgICAgICAgKCpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICsgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpKSkgJiYKLSAgICAgICAgICAoKCpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICsgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpKSA8PQotICAgICAgICAgIHN0YXRpY19jYXN0PEVsZl9BZGRyPihVSU5UMzJfTUFYKSkpIHsKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICs9IChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKTsKKyAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBBQlMzMiAlMTZsbHggPC0gJTE2bGx4ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIHJlbG9jLCAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksIHN5bV9uYW1lKTsKKyAgICAgICAgaWYgKChzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihJTlQzMl9NSU4pIDw9ICgqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICsgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpKSkgJiYKKyAgICAgICAgICAgICgoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSkgPD0gc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4oVUlOVDMyX01BWCkpKSB7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICs9IChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERMX0VSUigiMHglMDE2bHggb3V0IG9mIHJhbmdlIDB4JTAxNmx4IHRvIDB4JTAxNmx4IiwKLSAgICAgICAgICAgICAgICAgICAgKCpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICsgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpKSwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KElOVDMyX01JTiksCi0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZl9BZGRyPihVSU5UMzJfTUFYKSk7CisgICAgICAgICAgICBETF9FUlIoIjB4JTAxNmxseCBvdXQgb2YgcmFuZ2UgMHglMDE2bGx4IHRvIDB4JTAxNmxseCIsCisgICAgICAgICAgICAgICAgICAgKCpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKyAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkpLAorICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KElOVDMyX01JTiksCisgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4oVUlOVDMyX01BWCkpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUl9BQVJDSDY0X0FCUzE2OgogICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY0Fic29sdXRlKTsKICAgICAgICAgTUFSSyhyZWxhLT5yX29mZnNldCk7Ci0gICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gQUJTMTYgJTE2bHggPC0gJTE2bHggJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJlbG9jLAotICAgICAgICAgICAgICAgICAgICAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksCi0gICAgICAgICAgICAgICAgICAgIHN5bV9uYW1lKTsKLSAgICAgICAgaWYgKChzdGF0aWNfY2FzdDxFbGZfQWRkcj4oSU5UMTZfTUlOKSA8PQotICAgICAgICAgICgqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSkpICYmCi0gICAgICAgICAgKCgqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSkgPD0KLSAgICAgICAgICBzdGF0aWNfY2FzdDxFbGZfQWRkcj4oVUlOVDE2X01BWCkpKSB7Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArPSAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCk7CisgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gQUJTMTYgJTE2bGx4IDwtICUxNmxseCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICByZWxvYywgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLCBzeW1fbmFtZSk7CisgICAgICAgIGlmICgoc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4oSU5UMTZfTUlOKSA8PSAoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSkpICYmCisgICAgICAgICAgICAoKCpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKyAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkpIDw9IHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KFVJTlQxNl9NQVgpKSkgeworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArPSAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBETF9FUlIoIjB4JTAxNmx4IG91dCBvZiByYW5nZSAweCUwMTZseCB0byAweCUwMTZseCIsCi0gICAgICAgICAgICAgICAgICAgICgqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSksCi0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZl9BZGRyPihJTlQxNl9NSU4pLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGZfQWRkcj4oVUlOVDE2X01BWCkpOworICAgICAgICAgICAgRExfRVJSKCIweCUwMTZsbHggb3V0IG9mIHJhbmdlIDB4JTAxNmxseCB0byAweCUwMTZsbHgiLAorICAgICAgICAgICAgICAgICAgICgqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICsgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpKSwKKyAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihJTlQxNl9NSU4pLAorICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KFVJTlQxNl9NQVgpKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFJfQUFSQ0g2NF9QUkVMNjQ6CiAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jUmVsYXRpdmUpOwogICAgICAgICBNQVJLKHJlbGEtPnJfb2Zmc2V0KTsKLSAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSRUw2NCAlMTZseCA8LSAlMTZseCAtICUxNmx4ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICByZWxvYywKLSAgICAgICAgICAgICAgICAgICAgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLAotICAgICAgICAgICAgICAgICAgICByZWxhLT5yX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgc3ltX25hbWUpOwotICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArPSAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldDsKKyAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSRUw2NCAlMTZsbHggPC0gJTE2bGx4IC0gJTE2bGx4ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIHJlbG9jLCAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksIHJlbGEtPnJfb2Zmc2V0LCBzeW1fbmFtZSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKz0gKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUl9BQVJDSDY0X1BSRUwzMjoKICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NSZWxhdGl2ZSk7CiAgICAgICAgIE1BUksocmVsYS0+cl9vZmZzZXQpOwotICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJFTDMyICUxNmx4IDwtICUxNmx4IC0gJTE2bHggJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJlbG9jLAotICAgICAgICAgICAgICAgICAgICAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksCi0gICAgICAgICAgICAgICAgICAgIHJlbGEtPnJfb2Zmc2V0LCBzeW1fbmFtZSk7Ci0gICAgICAgIGlmICgoc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KElOVDMyX01JTikgPD0KLSAgICAgICAgICAoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKyAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpKSkgJiYKLSAgICAgICAgICAoKCpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICsgKChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSAtIHJlbGEtPnJfb2Zmc2V0KSkgPD0KLSAgICAgICAgICBzdGF0aWNfY2FzdDxFbGZfQWRkcj4oVUlOVDMyX01BWCkpKSB7Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArPSAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpOworICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJFTDMyICUxNmxseCA8LSAlMTZsbHggLSAlMTZsbHggJXNcbiIsCisgICAgICAgICAgICAgICAgICAgcmVsb2MsIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwgcmVsYS0+cl9vZmZzZXQsIHN5bV9uYW1lKTsKKyAgICAgICAgaWYgKChzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihJTlQzMl9NSU4pIDw9ICgqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICsgKChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSAtIHJlbGEtPnJfb2Zmc2V0KSkpICYmCisgICAgICAgICAgICAoKCpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKyAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpKSA8PSBzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihVSU5UMzJfTUFYKSkpIHsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKz0gKChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSAtIHJlbGEtPnJfb2Zmc2V0KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERMX0VSUigiMHglMDE2bHggb3V0IG9mIHJhbmdlIDB4JTAxNmx4IHRvIDB4JTAxNmx4IiwKLSAgICAgICAgICAgICAgICAgICAgKCpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICsgKChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSAtIHJlbGEtPnJfb2Zmc2V0KSksCi0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZl9BZGRyPihJTlQzMl9NSU4pLAotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGZfQWRkcj4oVUlOVDMyX01BWCkpOworICAgICAgICAgICAgRExfRVJSKCIweCUwMTZsbHggb3V0IG9mIHJhbmdlIDB4JTAxNmxseCB0byAweCUwMTZsbHgiLAorICAgICAgICAgICAgICAgICAgICgqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICsgKChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSAtIHJlbGEtPnJfb2Zmc2V0KSksCisgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4oSU5UMzJfTUlOKSwKKyAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihVSU5UMzJfTUFYKSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSX0FBUkNINjRfUFJFTDE2OgogICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY1JlbGF0aXZlKTsKICAgICAgICAgTUFSSyhyZWxhLT5yX29mZnNldCk7Ci0gICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMMTYgJTE2bHggPC0gJTE2bHggLSAlMTZseCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVsb2MsCi0gICAgICAgICAgICAgICAgICAgIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwKLSAgICAgICAgICAgICAgICAgICAgcmVsYS0+cl9vZmZzZXQsIHN5bV9uYW1lKTsKLSAgICAgICAgaWYgKChzdGF0aWNfY2FzdDxFbGZfQWRkcj4oSU5UMTZfTUlOKSA8PQotICAgICAgICAgICgqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArICgoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldCkpKSAmJgotICAgICAgICAgICgoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKyAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpKSA8PQotICAgICAgICAgIHN0YXRpY19jYXN0PEVsZl9BZGRyPihVSU5UMTZfTUFYKSkpIHsKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICs9ICgoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldCk7CisgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMMTYgJTE2bGx4IDwtICUxNmxseCAtICUxNmxseCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICByZWxvYywgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLCByZWxhLT5yX29mZnNldCwgc3ltX25hbWUpOworICAgICAgICBpZiAoKHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KElOVDE2X01JTikgPD0gKCpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKyAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpKSkgJiYKKyAgICAgICAgICAgICgoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArICgoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCkgLSByZWxhLT5yX29mZnNldCkpIDw9IHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KFVJTlQxNl9NQVgpKSkgeworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArPSAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRExfRVJSKCIweCUwMTZseCBvdXQgb2YgcmFuZ2UgMHglMDE2bHggdG8gMHglMDE2bHgiLAotICAgICAgICAgICAgICAgICAgICAoKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKyAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpKSwKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RWxmX0FkZHI+KElOVDE2X01JTiksCi0gICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZl9BZGRyPihVSU5UMTZfTUFYKSk7CisgICAgICAgICAgICBETF9FUlIoIjB4JTAxNmxseCBvdXQgb2YgcmFuZ2UgMHglMDE2bGx4IHRvIDB4JTAxNmxseCIsCisgICAgICAgICAgICAgICAgICAgKCpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKyAoKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpIC0gcmVsYS0+cl9vZmZzZXQpKSwKKyAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFbGZXKEFkZHIpPihJTlQxNl9NSU4pLAorICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KFVJTlQxNl9NQVgpKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTEwNjUsNjkgKzExMTEsMzAgQEAKICAgICAgICAgICAgIERMX0VSUigib2RkIFJFTEFUSVZFIGZvcm0uLi4iKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJFTEFUSVZFICUxNmx4IDwtICUxNmx4XG4iLAotICAgICAgICAgICAgICAgICAgICByZWxvYywKLSAgICAgICAgICAgICAgICAgICAgKHNpLT5iYXNlICsgcmVsYS0+cl9hZGRlbmQpKTsKLSAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgPSAoc2ktPmJhc2UgKyByZWxhLT5yX2FkZGVuZCk7CisgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMQVRJVkUgJTE2bGx4IDwtICUxNmxseFxuIiwKKyAgICAgICAgICAgICAgICAgICByZWxvYywgKHNpLT5iYXNlICsgcmVsYS0+cl9hZGRlbmQpKTsKKyAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSA9IChzaS0+YmFzZSArIHJlbGEtPnJfYWRkZW5kKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJfQUFSQ0g2NF9DT1BZOgotICAgICAgICBpZiAoKHNpLT5mbGFncyAmIEZMQUdfRVhFKSA9PSAwKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5paGkwMDQ0ZC9JSEkwMDQ0RF9hYWVsZi5wZGYKLSAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAqIFNlY3Rpb24gNC43LjEuMTAgIkR5bmFtaWMgcmVsb2NhdGlvbnMiCi0gICAgICAgICAgICAgICogUl9BQVJDSDY0X0NPUFkgbWF5IG9ubHkgYXBwZWFyIGluIGV4ZWN1dGFibGUgb2JqZWN0cyB3aGVyZSBlX3R5cGUgaXMKLSAgICAgICAgICAgICAgKiBzZXQgdG8gRVRfRVhFQy4KLSAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAqIEZMQUdfRVhFIGlzIHNldCBmb3IgYm90aCBFVF9EWU4gYW5kIEVUX0VYRUMgZXhlY3V0YWJsZXMuCi0gICAgICAgICAgICAgICogV2Ugc2hvdWxkIGV4cGxpY2l0bHkgZGlzYWxsb3cgRVRfRFlOIGV4ZWN1dGFibGVzIGZyb20gaGF2aW5nCi0gICAgICAgICAgICAgICogUl9BQVJDSDY0X0NPUFkgcmVsb2NhdGlvbnMuCi0gICAgICAgICAgICAgICovCi0gICAgICAgICAgICBETF9FUlIoIiVzIFJfQUFSQ0g2NF9DT1BZIHJlbG9jYXRpb25zIG9ubHkgc3VwcG9ydGVkIGZvciBFVF9FWEVDIiwgc2ktPm5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQ29weSk7Ci0gICAgICAgIE1BUksocmVsYS0+cl9vZmZzZXQpOwotICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIENPUFkgJTE2bHggPC0gJWxkIEAgJTE2bHggJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJlbG9jLAotICAgICAgICAgICAgICAgICAgICBzLT5zdF9zaXplLAotICAgICAgICAgICAgICAgICAgICAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksCi0gICAgICAgICAgICAgICAgICAgIHN5bV9uYW1lKTsKLSAgICAgICAgaWYgKHJlbG9jID09IChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSkgewotICAgICAgICAgICAgRWxmX1N5bSAqc3JjID0gc29pbmZvX2RvX2xvb2t1cChOVUxMLCBzeW1fbmFtZSwgJmxzaSwgbmVlZGVkKTsKLQotICAgICAgICAgICAgaWYgKHNyYyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgRExfRVJSKCIlcyBSX0FBUkNINjRfQ09QWSByZWxvY2F0aW9uIHNvdXJjZSBjYW5ub3QgYmUgcmVzb2x2ZWQiLCBzaS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGxzaS0+aGFzX0RUX1NZTUJPTElDKSB7Ci0gICAgICAgICAgICAgICAgRExfRVJSKCIlcyBpbnZhbGlkIFJfQUFSQ0g2NF9DT1BZIHJlbG9jYXRpb24gYWdhaW5zdCBEVF9TWU1CT0xJQyBzaGFyZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgImxpYnJhcnkgJXMgKGJ1aWx0IHdpdGggLUJzeW1ib2xpYz8pIiwgc2ktPm5hbWUsIGxzaS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHMtPnN0X3NpemUgPCBzcmMtPnN0X3NpemUpIHsKLSAgICAgICAgICAgICAgICBETF9FUlIoIiVzIFJfQUFSQ0g2NF9DT1BZIHJlbG9jYXRpb24gc2l6ZSBtaXNtYXRjaCAoJWxkIDwgJWxkKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzaS0+bmFtZSwgcy0+c3Rfc2l6ZSwgc3JjLT5zdF9zaXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZW1jcHkoKHZvaWQqKXJlbG9jLCAodm9pZCopKHNyYy0+c3RfdmFsdWUgKyBsc2ktPmxvYWRfYmlhcyksIHNyYy0+c3Rfc2l6ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBETF9FUlIoIiVzIFJfQUFSQ0g2NF9DT1BZIHJlbG9jYXRpb24gdGFyZ2V0IGNhbm5vdCBiZSByZXNvbHZlZCIsIHNpLT5uYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgLyoKKyAgICAgICAgICogRVRfRVhFQyBpcyBub3Qgc3VwcG9ydGVkIHNvIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uCisgICAgICAgICAqCisgICAgICAgICAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5paGkwMDQ0ZC9JSEkwMDQ0RF9hYWVsZi5wZGYKKyAgICAgICAgICoKKyAgICAgICAgICogU2VjdGlvbiA0LjcuMS4xMCAiRHluYW1pYyByZWxvY2F0aW9ucyIKKyAgICAgICAgICogUl9BQVJDSDY0X0NPUFkgbWF5IG9ubHkgYXBwZWFyIGluIGV4ZWN1dGFibGUgb2JqZWN0cyB3aGVyZSBlX3R5cGUgaXMKKyAgICAgICAgICogc2V0IHRvIEVUX0VYRUMuCisgICAgICAgICAqLworICAgICAgICBETF9FUlIoIiVzIFJfQUFSQ0g2NF9DT1BZIHJlbG9jYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIiwgc2ktPm5hbWUpOworICAgICAgICByZXR1cm4gLTE7CiAgICAgY2FzZSBSX0FBUkNINjRfVExTX1RQUkVMNjQ6Ci0gICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gVExTX1RQUkVMNjQgKioqICUxNmx4IDwtICUxNmx4IC0gJTE2bHhcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJlbG9jLAotICAgICAgICAgICAgICAgICAgICAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksCi0gICAgICAgICAgICAgICAgICAgIHJlbGEtPnJfb2Zmc2V0KTsKKyAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBUTFNfVFBSRUw2NCAqKiogJTE2bGx4IDwtICUxNmxseCAtICUxNmxseFxuIiwKKyAgICAgICAgICAgICAgICAgICByZWxvYywgKHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLCByZWxhLT5yX29mZnNldCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUl9BQVJDSDY0X1RMU19EVFBSRUwzMjoKLSAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBUTFNfRFRQUkVMMzIgKioqICUxNmx4IDwtICUxNmx4IC0gJTE2bHhcbiIsCi0gICAgICAgICAgICAgICAgICAgIHJlbG9jLAotICAgICAgICAgICAgICAgICAgICAoc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZCksCi0gICAgICAgICAgICAgICAgICAgIHJlbGEtPnJfb2Zmc2V0KTsKKyAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBUTFNfRFRQUkVMMzIgKioqICUxNmxseCA8LSAlMTZsbHggLSAlMTZsbHhcbiIsCisgICAgICAgICAgICAgICAgICAgcmVsb2MsIChzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kKSwgcmVsYS0+cl9vZmZzZXQpOwogICAgICAgICBicmVhazsKICNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKICAgICBjYXNlIFJfWDg2XzY0X0pVTVBfU0xPVDoKQEAgLTExMzUsMTQgKzExNDIsMTQgQEAKICAgICAgIE1BUksocmVsYS0+cl9vZmZzZXQpOwogICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBKTVBfU0xPVCAlMDh6eCA8LSAlMDh6eCAlcyIsIHN0YXRpY19jYXN0PHNpemVfdD4ocmVsb2MpLAogICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLCBzeW1fbmFtZSk7Ci0gICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSA9IHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQ7CisgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpID0gc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZDsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgUl9YODZfNjRfR0xPQl9EQVQ6CiAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY0Fic29sdXRlKTsKICAgICAgIE1BUksocmVsYS0+cl9vZmZzZXQpOwogICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBHTE9CX0RBVCAlMDh6eCA8LSAlMDh6eCAlcyIsIHN0YXRpY19jYXN0PHNpemVfdD4ocmVsb2MpLAogICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQpLCBzeW1fbmFtZSk7Ci0gICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSA9IHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQ7CisgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpID0gc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZDsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgUl9YODZfNjRfUkVMQVRJVkU6CiAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY1JlbGF0aXZlKTsKQEAgLTExNTMsMjEgKzExNjAsMjEgQEAKICAgICAgIH0KICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMQVRJVkUgJTA4enggPC0gKyUwOHp4Iiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWxvYyksCiAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oc2ktPmJhc2UpKTsKLSAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpID0gc2ktPmJhc2UgKyByZWxhLT5yX2FkZGVuZDsKKyAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgPSBzaS0+YmFzZSArIHJlbGEtPnJfYWRkZW5kOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBSX1g4Nl82NF8zMjoKICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jUmVsYXRpdmUpOwogICAgICAgTUFSSyhyZWxhLT5yX29mZnNldCk7CiAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJfWDg2XzY0XzMyICUwOHp4IDwtICslMDh6eCAlcyIsIHN0YXRpY19jYXN0PHNpemVfdD4ocmVsb2MpLAogICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHN5bV9hZGRyKSwgc3ltX25hbWUpOwotICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgPSBzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kOworICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSA9IHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQ7CiAgICAgICBicmVhazsKICAgICBjYXNlIFJfWDg2XzY0XzY0OgogICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NSZWxhdGl2ZSk7CiAgICAgICBNQVJLKHJlbGEtPnJfb2Zmc2V0KTsKICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUl9YODZfNjRfNjQgJTA4enggPC0gKyUwOHp4ICVzIiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWxvYyksCiAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oc3ltX2FkZHIpLCBzeW1fbmFtZSk7Ci0gICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSA9IHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQ7CisgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpID0gc3ltX2FkZHIgKyByZWxhLT5yX2FkZGVuZDsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgUl9YODZfNjRfUEMzMjoKICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jUmVsYXRpdmUpOwpAQCAtMTE3NSw0NSArMTE4Miw0MiBAQAogICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSX1g4Nl82NF9QQzMyICUwOHp4IDwtICslMDh6eCAoJTA4enggLSAlMDh6eCkgJXMiLAogICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlbG9jKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzeW1fYWRkciAtIHJlbG9jKSwKICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzeW1fYWRkciksIHN0YXRpY19jYXN0PHNpemVfdD4ocmVsb2MpLCBzeW1fbmFtZSk7Ci0gICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSA9IHN5bV9hZGRyICsgcmVsYS0+cl9hZGRlbmQgLSByZWxvYzsKKyAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgPSBzeW1fYWRkciArIHJlbGEtPnJfYWRkZW5kIC0gcmVsb2M7CiAgICAgICBicmVhazsKICNlbmRpZgogCiAgICAgZGVmYXVsdDoKLSAgICAgIERMX0VSUigidW5rbm93biByZWxvYyB0eXBlICVkIEAgJXAgKCVkKSIsIHR5cGUsIHJlbGEsIChpbnQpIChyZWxhIC0gc3RhcnQpKTsKKyAgICAgIERMX0VSUigidW5rbm93biByZWxvYyB0eXBlICVkIEAgJXAgKCV6dSkiLCB0eXBlLCByZWxhLCBpZHgpOwogICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgfQogICByZXR1cm4gMDsKIH0KLSNlbHNlCi1zdGF0aWMgaW50IHNvaW5mb19yZWxvY2F0ZShzb2luZm8qIHNpLCBFbGZfUmVsKiByZWwsIHVuc2lnbmVkIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc29pbmZvKiBuZWVkZWRbXSkKLXsKLSAgICBFbGZfU3ltKiBzeW10YWIgPSBzaS0+c3ltdGFiOwotICAgIGNvbnN0IGNoYXIqIHN0cnRhYiA9IHNpLT5zdHJ0YWI7Ci0gICAgRWxmX1N5bSogczsKLSAgICBFbGZfUmVsKiBzdGFydCA9IHJlbDsKKworI2Vsc2UgLy8gUkVMLCBub3QgUkVMQS4KKworc3RhdGljIGludCBzb2luZm9fcmVsb2NhdGUoc29pbmZvKiBzaSwgRWxmVyhSZWwpKiByZWwsIHVuc2lnbmVkIGNvdW50LCBzb2luZm8qIG5lZWRlZFtdKSB7CisgICAgRWxmVyhTeW0pKiBzOwogICAgIHNvaW5mbyogbHNpOwogCiAgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgY291bnQ7ICsraWR4LCArK3JlbCkgewotICAgICAgICB1bnNpZ25lZCB0eXBlID0gRUxGX1JfVFlQRShyZWwtPnJfaW5mbyk7Ci0gICAgICAgIC8vIFRPRE86IGRvbid0IHVzZSB1bnNpZ25lZCBmb3IgJ3N5bScuIFVzZSB1aW50MzJfdCBvciBFbGZfQWRkciBpbnN0ZWFkLgotICAgICAgICB1bnNpZ25lZCBzeW0gPSBFTEZfUl9TWU0ocmVsLT5yX2luZm8pOwotICAgICAgICBFbGZfQWRkciByZWxvYyA9IHN0YXRpY19jYXN0PEVsZl9BZGRyPihyZWwtPnJfb2Zmc2V0ICsgc2ktPmxvYWRfYmlhcyk7Ci0gICAgICAgIEVsZl9BZGRyIHN5bV9hZGRyID0gMDsKLSAgICAgICAgY2hhciogc3ltX25hbWUgPSBOVUxMOworICAgICAgICB1bnNpZ25lZCB0eXBlID0gRUxGVyhSX1RZUEUpKHJlbC0+cl9pbmZvKTsKKyAgICAgICAgLy8gVE9ETzogZG9uJ3QgdXNlIHVuc2lnbmVkIGZvciAnc3ltJy4gVXNlIHVpbnQzMl90IG9yIEVsZlcoQWRkcikgaW5zdGVhZC4KKyAgICAgICAgdW5zaWduZWQgc3ltID0gRUxGVyhSX1NZTSkocmVsLT5yX2luZm8pOworICAgICAgICBFbGZXKEFkZHIpIHJlbG9jID0gc3RhdGljX2Nhc3Q8RWxmVyhBZGRyKT4ocmVsLT5yX29mZnNldCArIHNpLT5sb2FkX2JpYXMpOworICAgICAgICBFbGZXKEFkZHIpIHN5bV9hZGRyID0gMDsKKyAgICAgICAgY29uc3QgY2hhciogc3ltX25hbWUgPSBOVUxMOwogCiAgICAgICAgIERFQlVHKCJQcm9jZXNzaW5nICclcycgcmVsb2NhdGlvbiBhdCBpbmRleCAlemQiLCBzaS0+bmFtZSwgaWR4KTsKICAgICAgICAgaWYgKHR5cGUgPT0gMCkgeyAvLyBSXypfTk9ORQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN5bSAhPSAwKSB7Ci0gICAgICAgICAgICBzeW1fbmFtZSA9IChjaGFyICopKHN0cnRhYiArIHN5bXRhYltzeW1dLnN0X25hbWUpOworICAgICAgICAgICAgc3ltX25hbWUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzaS0+c3RydGFiICsgc2ktPnN5bXRhYltzeW1dLnN0X25hbWUpOwogICAgICAgICAgICAgcyA9IHNvaW5mb19kb19sb29rdXAoc2ksIHN5bV9uYW1lLCAmbHNpLCBuZWVkZWQpOwogICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgYW4gdW5kZWZpbmVkIHN5bWJvbCBpZiB0aGlzIGlzIGEgd2VhayByZWZlcmVuY2UuLi4KLSAgICAgICAgICAgICAgICBzID0gJnN5bXRhYltzeW1dOworICAgICAgICAgICAgICAgIHMgPSAmc2ktPnN5bXRhYltzeW1dOwogICAgICAgICAgICAgICAgIGlmIChFTEZfU1RfQklORChzLT5zdF9pbmZvKSAhPSBTVEJfV0VBSykgewogICAgICAgICAgICAgICAgICAgICBETF9FUlIoImNhbm5vdCBsb2NhdGUgc3ltYm9sIFwiJXNcIiByZWZlcmVuY2VkIGJ5IFwiJXNcIi4uLiIsIHN5bV9uYW1lLCBzaS0+bmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNjEsMTIgKzEyNjUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLiBDYW4ndCByZWFsbHkgY29weSBpZiB3ZWFrIHN5bWJvbCBpcyBub3QgZm91bmQgYXQgcnVuLXRpbWUuCiAjZW5kaWYKICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBETF9FUlIoInVua25vd24gd2VhayByZWxvYyB0eXBlICVkIEAgJXAgKCVkKSIsIHR5cGUsIHJlbCwgKGludCkgKHJlbCAtIHN0YXJ0KSk7CisgICAgICAgICAgICAgICAgICAgIERMX0VSUigidW5rbm93biB3ZWFrIHJlbG9jIHR5cGUgJWQgQCAlcCAoJXp1KSIsIHR5cGUsIHJlbCwgaWR4KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgZ290IGEgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgICAgICBzeW1fYWRkciA9IHN0YXRpY19jYXN0PEVsZl9BZGRyPihzLT5zdF92YWx1ZSArIGxzaS0+bG9hZF9iaWFzKTsKKyAgICAgICAgICAgICAgICBzeW1fYWRkciA9IHN0YXRpY19jYXN0PEVsZlcoQWRkcik+KHMtPnN0X3ZhbHVlICsgbHNpLT5sb2FkX2JpYXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NTeW1ib2wpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTI3OSwxMDUgKzEyODMsODYgQEAKICAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOwogICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKICAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gSk1QX1NMT1QgJTA4eCA8LSAlMDh4ICVzIiwgcmVsb2MsIHN5bV9hZGRyLCBzeW1fbmFtZSk7Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSA9IHN5bV9hZGRyOworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSA9IHN5bV9hZGRyOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUl9BUk1fR0xPQl9EQVQ6CiAgICAgICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY0Fic29sdXRlKTsKICAgICAgICAgICAgIE1BUksocmVsLT5yX29mZnNldCk7CiAgICAgICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIEdMT0JfREFUICUwOHggPC0gJTA4eCAlcyIsIHJlbG9jLCBzeW1fYWRkciwgc3ltX25hbWUpOwotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgPSBzeW1fYWRkcjsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgPSBzeW1fYWRkcjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJfQVJNX0FCUzMyOgogICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NBYnNvbHV0ZSk7CiAgICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwogICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBBQlMgJTA4eCA8LSAlMDh4ICVzIiwgcmVsb2MsIHN5bV9hZGRyLCBzeW1fbmFtZSk7Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArPSBzeW1fYWRkcjsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihyZWxvYykgKz0gc3ltX2FkZHI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSX0FSTV9SRUwzMjoKICAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jUmVsYXRpdmUpOwogICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKICAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMMzIgJTA4eCA8LSAlMDh4IC0gJTA4eCAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbG9jLCBzeW1fYWRkciwgcmVsLT5yX29mZnNldCwgc3ltX25hbWUpOwotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKz0gc3ltX2FkZHIgLSByZWwtPnJfb2Zmc2V0OworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArPSBzeW1fYWRkciAtIHJlbC0+cl9vZmZzZXQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSX0FSTV9DT1BZOgotICAgICAgICAgICAgaWYgKChzaS0+ZmxhZ3MgJiBGTEFHX0VYRSkgPT0gMCkgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLmloaTAwNDRkL0lISTAwNDREX2FhZWxmLnBkZgotICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICogU2VjdGlvbiA0LjcuMS4xMCAiRHluYW1pYyByZWxvY2F0aW9ucyIKLSAgICAgICAgICAgICAgICAgKiBSX0FSTV9DT1BZIG1heSBvbmx5IGFwcGVhciBpbiBleGVjdXRhYmxlIG9iamVjdHMgd2hlcmUgZV90eXBlIGlzCi0gICAgICAgICAgICAgICAgICogc2V0IHRvIEVUX0VYRUMuCi0gICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgKiBUT0RPOiBGTEFHX0VYRSBpcyBzZXQgZm9yIGJvdGggRVRfRFlOIGFuZCBFVF9FWEVDIGV4ZWN1dGFibGVzLgotICAgICAgICAgICAgICAgICAqIFdlIHNob3VsZCBleHBsaWNpdGx5IGRpc2FsbG93IEVUX0RZTiBleGVjdXRhYmxlcyBmcm9tIGhhdmluZwotICAgICAgICAgICAgICAgICAqIFJfQVJNX0NPUFkgcmVsb2NhdGlvbnMuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgRExfRVJSKCIlcyBSX0FSTV9DT1BZIHJlbG9jYXRpb25zIG9ubHkgc3VwcG9ydGVkIGZvciBFVF9FWEVDIiwgc2ktPm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQ29weSk7Ci0gICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyAlMDh4IDwtICVkIEAgJTA4eCAlcyIsIHJlbG9jLCBzLT5zdF9zaXplLCBzeW1fYWRkciwgc3ltX25hbWUpOwotICAgICAgICAgICAgaWYgKHJlbG9jID09IHN5bV9hZGRyKSB7Ci0gICAgICAgICAgICAgICAgRWxmX1N5bSAqc3JjID0gc29pbmZvX2RvX2xvb2t1cChOVUxMLCBzeW1fbmFtZSwgJmxzaSwgbmVlZGVkKTsKLQotICAgICAgICAgICAgICAgIGlmIChzcmMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBETF9FUlIoIiVzIFJfQVJNX0NPUFkgcmVsb2NhdGlvbiBzb3VyY2UgY2Fubm90IGJlIHJlc29sdmVkIiwgc2ktPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChsc2ktPmhhc19EVF9TWU1CT0xJQykgewotICAgICAgICAgICAgICAgICAgICBETF9FUlIoIiVzIGludmFsaWQgUl9BUk1fQ09QWSByZWxvY2F0aW9uIGFnYWluc3QgRFRfU1lNQk9MSUMgc2hhcmVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5ICVzIChidWlsdCB3aXRoIC1Cc3ltYm9saWM/KSIsIHNpLT5uYW1lLCBsc2ktPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzLT5zdF9zaXplIDwgc3JjLT5zdF9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIERMX0VSUigiJXMgUl9BUk1fQ09QWSByZWxvY2F0aW9uIHNpemUgbWlzbWF0Y2ggKCVkIDwgJWQpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpLT5uYW1lLCBzLT5zdF9zaXplLCBzcmMtPnN0X3NpemUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSgodm9pZCopcmVsb2MsICh2b2lkKikoc3JjLT5zdF92YWx1ZSArIGxzaS0+bG9hZF9iaWFzKSwgc3JjLT5zdF9zaXplKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgRExfRVJSKCIlcyBSX0FSTV9DT1BZIHJlbG9jYXRpb24gdGFyZ2V0IGNhbm5vdCBiZSByZXNvbHZlZCIsIHNpLT5uYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBFVF9FWEVDIGlzIG5vdCBzdXBwb3J0ZWQgc28gdGhpcyBzaG91bGQgbm90IGhhcHBlbi4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2MuaWhpMDA0NGQvSUhJMDA0NERfYWFlbGYucGRmCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogU2VjdGlvbiA0LjcuMS4xMCAiRHluYW1pYyByZWxvY2F0aW9ucyIKKyAgICAgICAgICAgICAqIFJfQVJNX0NPUFkgbWF5IG9ubHkgYXBwZWFyIGluIGV4ZWN1dGFibGUgb2JqZWN0cyB3aGVyZSBlX3R5cGUgaXMKKyAgICAgICAgICAgICAqIHNldCB0byBFVF9FWEVDLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBETF9FUlIoIiVzIFJfQVJNX0NPUFkgcmVsb2NhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiLCBzaS0+bmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQogICAgICAgICBjYXNlIFJfMzg2X0pNUF9TTE9UOgogICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NBYnNvbHV0ZSk7CiAgICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwogICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBKTVBfU0xPVCAlMDh4IDwtICUwOHggJXMiLCByZWxvYywgc3ltX2FkZHIsIHN5bV9uYW1lKTsKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpID0gc3ltX2FkZHI7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpID0gc3ltX2FkZHI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSXzM4Nl9HTE9CX0RBVDoKICAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOwogICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKICAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gR0xPQl9EQVQgJTA4eCA8LSAlMDh4ICVzIiwgcmVsb2MsIHN5bV9hZGRyLCBzeW1fbmFtZSk7Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSA9IHN5bV9hZGRyOworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSA9IHN5bV9hZGRyOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUl8zODZfMzI6CiAgICAgICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY1JlbGF0aXZlKTsKICAgICAgICAgICAgIE1BUksocmVsLT5yX29mZnNldCk7CiAgICAgICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJfMzg2XzMyICUwOHggPC0gKyUwOHggJXMiLCByZWxvYywgc3ltX2FkZHIsIHN5bV9uYW1lKTsKLSAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZl9BZGRyKj4ocmVsb2MpICs9IHN5bV9hZGRyOworICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlbG9jKSArPSBzeW1fYWRkcjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJfMzg2X1BDMzI6CiAgICAgICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY1JlbGF0aXZlKTsKICAgICAgICAgICAgIE1BUksocmVsLT5yX29mZnNldCk7CiAgICAgICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJfMzg2X1BDMzIgJTA4eCA8LSArJTA4eCAoJTA4eCAtICUwOHgpICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVsb2MsIChzeW1fYWRkciAtIHJlbG9jKSwgc3ltX2FkZHIsIHJlbG9jLCBzeW1fbmFtZSk7Ci0gICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArPSAoc3ltX2FkZHIgLSByZWxvYyk7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICs9IChzeW1fYWRkciAtIHJlbG9jKTsKICAgICAgICAgICAgIGJyZWFrOwogI2VsaWYgZGVmaW5lZChfX21pcHNfXykKICAgICAgICAgY2FzZSBSX01JUFNfUkVMMzI6CisjaWYgZGVmaW5lZChfX0xQNjRfXykKKyAgICAgICAgICAgIC8vIE1JUFMgRWxmNjRfUmVsIGVudHJpZXMgY29udGFpbiBjb21wb3VuZCByZWxvY2F0aW9ucworICAgICAgICAgICAgLy8gV2Ugb25seSBoYW5kbGUgdGhlIFJfTUlQU19OT05FfFJfTUlQU182NHxSX01JUFNfUkVMMzIgY2FzZQorICAgICAgICAgICAgaWYgKEVMRjY0X1JfVFlQRTIocmVsLT5yX2luZm8pICE9IFJfTUlQU182NCB8fAorICAgICAgICAgICAgICAgIEVMRjY0X1JfVFlQRTMocmVsLT5yX2luZm8pICE9IFJfTUlQU19OT05FKSB7CisgICAgICAgICAgICAgICAgRExfRVJSKCJVbmV4cGVjdGVkIGNvbXBvdW5kIHJlbG9jYXRpb24gdHlwZTolZCB0eXBlMjolZCB0eXBlMzolZCBAICVwICglenUpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgKHVuc2lnbmVkKUVMRjY0X1JfVFlQRTIocmVsLT5yX2luZm8pLAorICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpRUxGNjRfUl9UWVBFMyhyZWwtPnJfaW5mbyksIHJlbCwgaWR4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOwogICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMMzIgJTA4eCA8LSAlMDh4ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgcmVsb2MsIHN5bV9hZGRyLCAoc3ltX25hbWUpID8gc3ltX25hbWUgOiAiKlNFQ1RJT05IRFIqIik7CisgICAgICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJFTDMyICUwOHp4IDwtICUwOHp4ICVzIiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWxvYyksCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oc3ltX2FkZHIpLCBzeW1fbmFtZSA/IHN5bV9uYW1lIDogIipTRUNUSU9OSERSKiIpOwogICAgICAgICAgICAgaWYgKHMpIHsKLSAgICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArPSBzeW1fYWRkcjsKKyAgICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICs9IHN5bV9hZGRyOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcio+KHJlbG9jKSArPSBzaS0+YmFzZTsKKyAgICAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICs9IHNpLT5iYXNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKQEAgLTEzOTUsMTEgKzEzODAsMTEgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMQVRJVkUgJXAgPC0gKyVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVsb2MpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+YmFzZSkpOwotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHIqPihyZWxvYykgKz0gc2ktPmJhc2U7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4ocmVsb2MpICs9IHNpLT5iYXNlOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERMX0VSUigidW5rbm93biByZWxvYyB0eXBlICVkIEAgJXAgKCVkKSIsIHR5cGUsIHJlbCwgKGludCkgKHJlbCAtIHN0YXJ0KSk7CisgICAgICAgICAgICBETF9FUlIoInVua25vd24gcmVsb2MgdHlwZSAlZCBAICVwICglenUpIiwgdHlwZSwgcmVsLCBpZHgpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQwOSw3MSArMTM5NCw1OSBAQAogCiAjaWYgZGVmaW5lZChfX21pcHNfXykKIHN0YXRpYyBib29sIG1pcHNfcmVsb2NhdGVfZ290KHNvaW5mbyogc2ksIHNvaW5mbyogbmVlZGVkW10pIHsKLSAgICB1bnNpZ25lZCogZ290ID0gc2ktPnBsdF9nb3Q7CisgICAgRWxmVyhBZGRyKSoqIGdvdCA9IHNpLT5wbHRfZ290OwogICAgIGlmIChnb3QgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgdW5zaWduZWQgbG9jYWxfZ290bm8gPSBzaS0+bWlwc19sb2NhbF9nb3RubzsKICAgICB1bnNpZ25lZCBnb3RzeW0gPSBzaS0+bWlwc19nb3RzeW07CiAgICAgdW5zaWduZWQgc3ltdGFibm8gPSBzaS0+bWlwc19zeW10YWJubzsKLSAgICBFbGZfU3ltKiBzeW10YWIgPSBzaS0+c3ltdGFiOworICAgIEVsZlcoU3ltKSogc3ltdGFiID0gc2ktPnN5bXRhYjsKIAotICAgIC8qCi0gICAgICogZ290WzBdIGlzIGFkZHJlc3Mgb2YgbGF6eSByZXNvbHZlciBmdW5jdGlvbgotICAgICAqIGdvdFsxXSBtYXkgYmUgdXNlZCBmb3IgYSBHTlUgZXh0ZW5zaW9uCi0gICAgICogc2V0IGl0IHRvIGEgcmVjb2duaXphYmxlIGFkZHJlc3MgaW4gY2FzZSBzb21lb25lIGNhbGxzIGl0Ci0gICAgICogKHNob3VsZCBiZSBfcnRsZF9iaW5kX3N0YXJ0KQotICAgICAqIEZJWE1FOiBtYXliZSB0aGlzIHNob3VsZCBiZSBpbiBhIHNlcGFyYXRlIHJvdXRpbmUKLSAgICAgKi8KLQorICAgIC8vIGdvdFswXSBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgbGF6eSByZXNvbHZlciBmdW5jdGlvbi4KKyAgICAvLyBnb3RbMV0gbWF5IGJlIHVzZWQgZm9yIGEgR05VIGV4dGVuc2lvbi4KKyAgICAvLyBTZXQgaXQgdG8gYSByZWNvZ25pemFibGUgYWRkcmVzcyBpbiBjYXNlIHNvbWVvbmUgY2FsbHMgaXQgKHNob3VsZCBiZSBfcnRsZF9iaW5kX3N0YXJ0KS4KKyAgICAvLyBGSVhNRTogbWF5YmUgdGhpcyBzaG91bGQgYmUgaW4gYSBzZXBhcmF0ZSByb3V0aW5lPwogICAgIGlmICgoc2ktPmZsYWdzICYgRkxBR19MSU5LRVIpID09IDApIHsKICAgICAgICAgc2l6ZV90IGcgPSAwOwotICAgICAgICBnb3RbZysrXSA9IDB4ZGVhZGJlZWY7Ci0gICAgICAgIGlmIChnb3RbZ10gJiAweDgwMDAwMDAwKSB7Ci0gICAgICAgICAgICBnb3RbZysrXSA9IDB4ZGVhZGZlZWQ7CisgICAgICAgIGdvdFtnKytdID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpKj4oMHhkZWFkYmVlZik7CisgICAgICAgIGlmIChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihnb3RbZ10pIDwgMCkgeworICAgICAgICAgICAgZ290W2crK10gPSByZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPigweGRlYWRmZWVkKTsKICAgICAgICAgfQotICAgICAgICAvKgotICAgICAgICAgKiBSZWxvY2F0ZSB0aGUgbG9jYWwgR09UIGVudHJpZXMgbmVlZCB0byBiZSByZWxvY2F0ZWQKLSAgICAgICAgICovCisgICAgICAgIC8vIFJlbG9jYXRlIHRoZSBsb2NhbCBHT1QgZW50cmllcy4KICAgICAgICAgZm9yICg7IGcgPCBsb2NhbF9nb3RubzsgZysrKSB7Ci0gICAgICAgICAgICBnb3RbZ10gKz0gc2ktPmxvYWRfYmlhczsKKyAgICAgICAgICAgIGdvdFtnXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihnb3RbZ10pICsgc2ktPmxvYWRfYmlhcyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBOb3cgZm9yIHRoZSBnbG9iYWwgR09UIGVudHJpZXMgKi8KLSAgICBFbGZfU3ltKiBzeW0gPSBzeW10YWIgKyBnb3RzeW07CisgICAgLy8gTm93IGZvciB0aGUgZ2xvYmFsIEdPVCBlbnRyaWVzLi4uCisgICAgRWxmVyhTeW0pKiBzeW0gPSBzeW10YWIgKyBnb3RzeW07CiAgICAgZ290ID0gc2ktPnBsdF9nb3QgKyBsb2NhbF9nb3RubzsKICAgICBmb3IgKHNpemVfdCBnID0gZ290c3ltOyBnIDwgc3ltdGFibm87IGcrKywgc3ltKyssIGdvdCsrKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHN5bV9uYW1lOwotICAgICAgICBFbGZfU3ltKiBzOworICAgICAgICAvLyBUaGlzIGlzIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UuLi4gdHJ5IHRvIGxvY2F0ZSBpdC4KKyAgICAgICAgY29uc3QgY2hhciogc3ltX25hbWUgPSBzaS0+c3RydGFiICsgc3ltLT5zdF9uYW1lOwogICAgICAgICBzb2luZm8qIGxzaTsKLQotICAgICAgICAvKiBUaGlzIGlzIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UuLi4gdHJ5IHRvIGxvY2F0ZSBpdCAqLwotICAgICAgICBzeW1fbmFtZSA9IHNpLT5zdHJ0YWIgKyBzeW0tPnN0X25hbWU7Ci0gICAgICAgIHMgPSBzb2luZm9fZG9fbG9va3VwKHNpLCBzeW1fbmFtZSwgJmxzaSwgbmVlZGVkKTsKKyAgICAgICAgRWxmVyhTeW0pKiBzID0gc29pbmZvX2RvX2xvb2t1cChzaSwgc3ltX25hbWUsICZsc2ksIG5lZWRlZCk7CiAgICAgICAgIGlmIChzID09IE5VTEwpIHsKLSAgICAgICAgICAgIC8qIFdlIG9ubHkgYWxsb3cgYW4gdW5kZWZpbmVkIHN5bWJvbCBpZiB0aGlzIGlzIGEgd2VhawotICAgICAgICAgICAgICAgcmVmZXJlbmNlLi4gICAqLworICAgICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyBhbiB1bmRlZmluZWQgc3ltYm9sIGlmIHRoaXMgaXMgYSB3ZWFrIHJlZmVyZW5jZS4KICAgICAgICAgICAgIHMgPSAmc3ltdGFiW2ddOwogICAgICAgICAgICAgaWYgKEVMRl9TVF9CSU5EKHMtPnN0X2luZm8pICE9IFNUQl9XRUFLKSB7CiAgICAgICAgICAgICAgICAgRExfRVJSKCJjYW5ub3QgbG9jYXRlIFwiJXNcIi4uLiIsIHN5bV9uYW1lKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAqZ290ID0gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIEZJWE1FOiBpcyB0aGlzIHN1ZmZpY2llbnQ/Ci0gICAgICAgICAgICAgKiBGb3IgcmVmZXJlbmNlIHNlZSBOZXRCU0QgbGluayBsb2FkZXIKLSAgICAgICAgICAgICAqIGh0dHA6Ly9jdnN3ZWIubmV0YnNkLm9yZy9ic2R3ZWIuY2dpL3NyYy9saWJleGVjL2xkLmVsZl9zby9hcmNoL21pcHMvbWlwc19yZWxvYy5jP3Jldj0xLjUzJmNvbnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgKmdvdCA9IGxzaS0+bG9hZF9iaWFzICsgcy0+c3RfdmFsdWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogaXMgdGhpcyBzdWZmaWNpZW50PworICAgICAgICAgICAgLy8gRm9yIHJlZmVyZW5jZSBzZWUgTmV0QlNEIGxpbmsgbG9hZGVyCisgICAgICAgICAgICAvLyBodHRwOi8vY3Zzd2ViLm5ldGJzZC5vcmcvYnNkd2ViLmNnaS9zcmMvbGliZXhlYy9sZC5lbGZfc28vYXJjaC9taXBzL21pcHNfcmVsb2MuYz9yZXY9MS41MyZjb250ZW50LXR5cGU9dGV4dC94LWN2c3dlYi1tYXJrdXAKKyAgICAgICAgICAgICpnb3QgPSByZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihsc2ktPmxvYWRfYmlhcyArIHMtPnN0X3ZhbHVlKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRpZgogCi12b2lkIHNvaW5mbzo6Q2FsbEFycmF5KGNvbnN0IGNoYXIqIGFycmF5X25hbWUgVU5VU0VELCBsaW5rZXJfZnVuY3Rpb25fdCogZnVuY3Rpb25zLCBzaXplX3QgY291bnQsIGJvb2wgcmV2ZXJzZSkgewordm9pZCBzb2luZm86OkNhbGxBcnJheShjb25zdCBjaGFyKiBhcnJheV9uYW1lIF9fdW51c2VkLCBsaW5rZXJfZnVuY3Rpb25fdCogZnVuY3Rpb25zLCBzaXplX3QgY291bnQsIGJvb2wgcmV2ZXJzZSkgewogICBpZiAoZnVuY3Rpb25zID09IE5VTEwpIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTE0OTIsNyArMTQ2NSw3IEBACiAgIFRSQUNFKCJbIERvbmUgY2FsbGluZyAlcyBmb3IgJyVzJyBdIiwgYXJyYXlfbmFtZSwgbmFtZSk7CiB9CiAKLXZvaWQgc29pbmZvOjpDYWxsRnVuY3Rpb24oY29uc3QgY2hhciogZnVuY3Rpb25fbmFtZSBVTlVTRUQsIGxpbmtlcl9mdW5jdGlvbl90IGZ1bmN0aW9uKSB7Cit2b2lkIHNvaW5mbzo6Q2FsbEZ1bmN0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uX25hbWUgX191bnVzZWQsIGxpbmtlcl9mdW5jdGlvbl90IGZ1bmN0aW9uKSB7CiAgIGlmIChmdW5jdGlvbiA9PSBOVUxMIHx8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihmdW5jdGlvbikgPT0gc3RhdGljX2Nhc3Q8dWludHB0cl90PigtMSkpIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTE1MDMsNyArMTQ3Niw3IEBACiAKICAgLy8gVGhlIGZ1bmN0aW9uIG1heSBoYXZlIGNhbGxlZCBkbG9wZW4oMykgb3IgZGxjbG9zZSgzKSwgc28gd2UgbmVlZCB0byBlbnN1cmUgb3VyIGRhdGEgc3RydWN0dXJlcwogICAvLyBhcmUgc3RpbGwgd3JpdGFibGUuIFRoaXMgaGFwcGVucyB3aXRoIG91ciBkZWJ1ZyBtYWxsb2MgKHNlZSBodHRwOi8vYi83OTQxNzE2KS4KLSAgc2V0X3NvaW5mb19wb29sX3Byb3RlY3Rpb24oUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisgIHByb3RlY3RfZGF0YShQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKIH0KIAogdm9pZCBzb2luZm86OkNhbGxQcmVJbml0Q29uc3RydWN0b3JzKCkgewpAQCAtMTUzNSwxNSArMTUwOCw5IEBACiAgICAgICAgICAgbmFtZSwgcHJlaW5pdF9hcnJheV9jb3VudCk7CiAgIH0KIAotICBpZiAoZHluYW1pYyAhPSBOVUxMKSB7Ci0gICAgZm9yIChFbGZfRHluKiBkID0gZHluYW1pYzsgZC0+ZF90YWcgIT0gRFRfTlVMTDsgKytkKSB7Ci0gICAgICBpZiAoZC0+ZF90YWcgPT0gRFRfTkVFREVEKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGxpYnJhcnlfbmFtZSA9IHN0cnRhYiArIGQtPmRfdW4uZF92YWw7Ci0gICAgICAgIFRSQUNFKCJcIiVzXCI6IGNhbGxpbmcgY29uc3RydWN0b3JzIGluIERUX05FRURFRCBcIiVzXCIiLCBuYW1lLCBsaWJyYXJ5X25hbWUpOwotICAgICAgICBmaW5kX2xvYWRlZF9saWJyYXJ5KGxpYnJhcnlfbmFtZSktPkNhbGxDb25zdHJ1Y3RvcnMoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KKyAgZ2V0X2NoaWxkcmVuKCkuZm9yX2VhY2goW10gKHNvaW5mbyogc2kpIHsKKyAgICBzaS0+Q2FsbENvbnN0cnVjdG9ycygpOworICB9KTsKIAogICBUUkFDRSgiXCIlc1wiOiBjYWxsaW5nIGNvbnN0cnVjdG9ycyIsIG5hbWUpOwogCkBAIC0xNTYwLDYgKzE1MjcsODYgQEAKIAogICAvLyBEVF9GSU5JIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgRFRfRklOSV9BUlJBWSBpZiBib3RoIGFyZSBwcmVzZW50LgogICBDYWxsRnVuY3Rpb24oIkRUX0ZJTkkiLCBmaW5pX2Z1bmMpOworCisgIC8vIFRoaXMgaXMgbmVlZGVkIG9uIHNlY29uZCBjYWxsIHRvIGRsb3BlbgorICAvLyBhZnRlciBsaWJyYXJ5IGhhcyBiZWVuIHVubG9hZGVkIHdpdGggUlRMRF9OT0RFTEVURQorICBjb25zdHJ1Y3RvcnNfY2FsbGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgc29pbmZvOjphZGRfY2hpbGQoc29pbmZvKiBjaGlsZCkgeworICBpZiAoKHRoaXMtPmZsYWdzICYgRkxBR19ORVdfU09JTkZPKSA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgdGhpcy0+Y2hpbGRyZW4ucHVzaF9mcm9udChjaGlsZCk7CisgIGNoaWxkLT5wYXJlbnRzLnB1c2hfZnJvbnQodGhpcyk7Cit9CisKK3ZvaWQgc29pbmZvOjpyZW1vdmVfYWxsX2xpbmtzKCkgeworICBpZiAoKHRoaXMtPmZsYWdzICYgRkxBR19ORVdfU09JTkZPKSA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLy8gMS4gVW50aWUgY29ubmVjdGVkIHNvaW5mb3MgZnJvbSAndGhpcycuCisgIGNoaWxkcmVuLmZvcl9lYWNoKFsmXSAoc29pbmZvKiBjaGlsZCkgeworICAgIGNoaWxkLT5wYXJlbnRzLnJlbW92ZV9pZihbJl0gKGNvbnN0IHNvaW5mbyogcGFyZW50KSB7CisgICAgICByZXR1cm4gcGFyZW50ID09IHRoaXM7CisgICAgfSk7CisgIH0pOworCisgIHBhcmVudHMuZm9yX2VhY2goWyZdIChzb2luZm8qIHBhcmVudCkgeworICAgIHBhcmVudC0+Y2hpbGRyZW4uZm9yX2VhY2goWyZdIChjb25zdCBzb2luZm8qIGNoaWxkKSB7CisgICAgICByZXR1cm4gY2hpbGQgPT0gdGhpczsKKyAgICB9KTsKKyAgfSk7CisKKyAgLy8gMi4gT25jZSBldmVyeXRoaW5nIHVudGllZCAtIGNsZWFyIGxvY2FsIGxpc3RzLgorICBwYXJlbnRzLmNsZWFyKCk7CisgIGNoaWxkcmVuLmNsZWFyKCk7Cit9CisKK3ZvaWQgc29pbmZvOjpzZXRfc3RfZGV2KGRldl90IGRldikgeworICBpZiAoKHRoaXMtPmZsYWdzICYgRkxBR19ORVdfU09JTkZPKSA9PSAwKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgc3RfZGV2ID0gZGV2OworfQorCit2b2lkIHNvaW5mbzo6c2V0X3N0X2lubyhpbm9fdCBpbm8pIHsKKyAgaWYgKCh0aGlzLT5mbGFncyAmIEZMQUdfTkVXX1NPSU5GTykgPT0gMCkgeworICAgIHJldHVybjsKKyAgfQorCisgIHN0X2lubyA9IGlubzsKK30KKworZGV2X3Qgc29pbmZvOjpnZXRfc3RfZGV2KCkgeworICBpZiAoKHRoaXMtPmZsYWdzICYgRkxBR19ORVdfU09JTkZPKSA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gc3RfZGV2OworfTsKKworaW5vX3Qgc29pbmZvOjpnZXRfc3RfaW5vKCkgeworICBpZiAoKHRoaXMtPmZsYWdzICYgRkxBR19ORVdfU09JTkZPKSA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gc3RfaW5vOworfQorCisvLyBUaGlzIGlzIGEgcmV0dXJuIG9uIGdldF9jaGlsZHJlbigpIGluIGNhc2UKKy8vICd0aGlzLT5mbGFncycgZG9lcyBub3QgaGF2ZSBGTEFHX05FV19TT0lORk8gc2V0Lgorc3RhdGljIHNvaW5mbzo6c29pbmZvX2xpc3RfdCBnX2VtcHR5X2xpc3Q7CisKK3NvaW5mbzo6c29pbmZvX2xpc3RfdCYgc29pbmZvOjpnZXRfY2hpbGRyZW4oKSB7CisgIGlmICgodGhpcy0+ZmxhZ3MgJiBGTEFHX05FV19TT0lORk8pID09IDApIHsKKyAgICByZXR1cm4gZ19lbXB0eV9saXN0OworICB9CisKKyAgcmV0dXJuIHRoaXMtPmNoaWxkcmVuOwogfQogCiAvKiBGb3JjZSBhbnkgb2YgdGhlIGNsb3NlZCBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoCkBAIC0xNjIzLDEwICsxNjcwLDEwIEBACiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIAotc3RhdGljIGJvb2wgc29pbmZvX2xpbmtfaW1hZ2Uoc29pbmZvKiBzaSkgeworc3RhdGljIGJvb2wgc29pbmZvX2xpbmtfaW1hZ2Uoc29pbmZvKiBzaSwgY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pIHsKICAgICAvKiAiYmFzZSIgbWlnaHQgd3JhcCBhcm91bmQgVUlOVDMyX01BWC4gKi8KLSAgICBFbGZfQWRkciBiYXNlID0gc2ktPmxvYWRfYmlhczsKLSAgICBjb25zdCBFbGZfUGhkciAqcGhkciA9IHNpLT5waGRyOworICAgIEVsZlcoQWRkcikgYmFzZSA9IHNpLT5sb2FkX2JpYXM7CisgICAgY29uc3QgRWxmVyhQaGRyKSogcGhkciA9IHNpLT5waGRyOwogICAgIGludCBwaG51bSA9IHNpLT5waG51bTsKICAgICBib29sIHJlbG9jYXRpbmdfbGlua2VyID0gKHNpLT5mbGFncyAmIEZMQUdfTElOS0VSKSAhPSAwOwogCkBAIC0xNjM4LDcgKzE2ODUsNyBAQAogCiAgICAgLyogRXh0cmFjdCBkeW5hbWljIHNlY3Rpb24gKi8KICAgICBzaXplX3QgZHluYW1pY19jb3VudDsKLSAgICBFbGZfV29yZCBkeW5hbWljX2ZsYWdzOworICAgIEVsZlcoV29yZCkgZHluYW1pY19mbGFnczsKICAgICBwaGRyX3RhYmxlX2dldF9keW5hbWljX3NlY3Rpb24ocGhkciwgcGhudW0sIGJhc2UsICZzaS0+ZHluYW1pYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR5bmFtaWNfY291bnQsICZkeW5hbWljX2ZsYWdzKTsKICAgICBpZiAoc2ktPmR5bmFtaWMgPT0gTlVMTCkgewpAQCAtMTY1OSwyMSArMTcwNiwyMSBAQAogCiAgICAgLy8gRXh0cmFjdCB1c2VmdWwgaW5mb3JtYXRpb24gZnJvbSBkeW5hbWljIHNlY3Rpb24uCiAgICAgdWludDMyX3QgbmVlZGVkX2NvdW50ID0gMDsKLSAgICBmb3IgKEVsZl9EeW4qIGQgPSBzaS0+ZHluYW1pYzsgZC0+ZF90YWcgIT0gRFRfTlVMTDsgKytkKSB7CisgICAgZm9yIChFbGZXKER5bikqIGQgPSBzaS0+ZHluYW1pYzsgZC0+ZF90YWcgIT0gRFRfTlVMTDsgKytkKSB7CiAgICAgICAgIERFQlVHKCJkID0gJXAsIGRbMF0odGFnKSA9ICVwIGRbMV0odmFsKSA9ICVwIiwKICAgICAgICAgICAgICAgZCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZC0+ZF90YWcpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihkLT5kX3VuLmRfdmFsKSk7CiAgICAgICAgIHN3aXRjaCAoZC0+ZF90YWcpIHsKICAgICAgICAgY2FzZSBEVF9IQVNIOgotICAgICAgICAgICAgc2ktPm5idWNrZXQgPSAoKHVuc2lnbmVkICopIChiYXNlICsgZC0+ZF91bi5kX3B0cikpWzBdOwotICAgICAgICAgICAgc2ktPm5jaGFpbiA9ICgodW5zaWduZWQgKikgKGJhc2UgKyBkLT5kX3VuLmRfcHRyKSlbMV07Ci0gICAgICAgICAgICBzaS0+YnVja2V0ID0gKHVuc2lnbmVkICopIChiYXNlICsgZC0+ZF91bi5kX3B0ciArIDgpOwotICAgICAgICAgICAgc2ktPmNoYWluID0gKHVuc2lnbmVkICopIChiYXNlICsgZC0+ZF91bi5kX3B0ciArIDggKyBzaS0+bmJ1Y2tldCAqIDQpOworICAgICAgICAgICAgc2ktPm5idWNrZXQgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYmFzZSArIGQtPmRfdW4uZF9wdHIpWzBdOworICAgICAgICAgICAgc2ktPm5jaGFpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihiYXNlICsgZC0+ZF91bi5kX3B0cilbMV07CisgICAgICAgICAgICBzaS0+YnVja2V0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGJhc2UgKyBkLT5kX3VuLmRfcHRyICsgOCk7CisgICAgICAgICAgICBzaS0+Y2hhaW4gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYmFzZSArIGQtPmRfdW4uZF9wdHIgKyA4ICsgc2ktPm5idWNrZXQgKiA0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERUX1NUUlRBQjoKLSAgICAgICAgICAgIHNpLT5zdHJ0YWIgPSAoY29uc3QgY2hhciAqKSAoYmFzZSArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICAgICAgc2ktPnN0cnRhYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJhc2UgKyBkLT5kX3VuLmRfcHRyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERUX1NZTVRBQjoKLSAgICAgICAgICAgIHNpLT5zeW10YWIgPSAoRWxmX1N5bSAqKSAoYmFzZSArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICAgICAgc2ktPnN5bXRhYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhTeW0pKj4oYmFzZSArIGQtPmRfdW4uZF9wdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAjaWYgIWRlZmluZWQoX19MUDY0X18pCiAgICAgICAgIGNhc2UgRFRfUExUUkVMOgpAQCAtMTY4NSwzNyArMTczMiw0MyBAQAogI2VuZGlmCiAgICAgICAgIGNhc2UgRFRfSk1QUkVMOgogI2lmIGRlZmluZWQoVVNFX1JFTEEpCi0gICAgICAgICAgICBzaS0+cGx0X3JlbGEgPSAoRWxmX1JlbGEqKSAoYmFzZSArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICAgICAgc2ktPnBsdF9yZWxhID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFJlbGEpKj4oYmFzZSArIGQtPmRfdW4uZF9wdHIpOwogI2Vsc2UKLSAgICAgICAgICAgIHNpLT5wbHRfcmVsID0gKEVsZl9SZWwqKSAoYmFzZSArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICAgICAgc2ktPnBsdF9yZWwgPSByZWludGVycHJldF9jYXN0PEVsZlcoUmVsKSo+KGJhc2UgKyBkLT5kX3VuLmRfcHRyKTsKICNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRFRfUExUUkVMU1o6CiAjaWYgZGVmaW5lZChVU0VfUkVMQSkKLSAgICAgICAgICAgIHNpLT5wbHRfcmVsYV9jb3VudCA9IGQtPmRfdW4uZF92YWwgLyBzaXplb2YoRWxmX1JlbGEpOworICAgICAgICAgICAgc2ktPnBsdF9yZWxhX2NvdW50ID0gZC0+ZF91bi5kX3ZhbCAvIHNpemVvZihFbGZXKFJlbGEpKTsKICNlbHNlCi0gICAgICAgICAgICBzaS0+cGx0X3JlbF9jb3VudCA9IGQtPmRfdW4uZF92YWwgLyBzaXplb2YoRWxmX1JlbCk7CisgICAgICAgICAgICBzaS0+cGx0X3JlbF9jb3VudCA9IGQtPmRfdW4uZF92YWwgLyBzaXplb2YoRWxmVyhSZWwpKTsKICNlbmRpZgogICAgICAgICAgICAgYnJlYWs7Ci0jaWYgIWRlZmluZWQoX19MUDY0X18pCisjaWYgZGVmaW5lZChfX21pcHNfXykKICAgICAgICAgY2FzZSBEVF9QTFRHT1Q6Ci0gICAgICAgICAgICAvLyBVc2VkIGJ5IDMyLWJpdCBNSVBTLgotICAgICAgICAgICAgc2ktPnBsdF9nb3QgPSAodW5zaWduZWQgKikoYmFzZSArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICAgICAgLy8gVXNlZCBieSBtaXBzIGFuZCBtaXBzNjQuCisgICAgICAgICAgICBzaS0+cGx0X2dvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKSoqPihiYXNlICsgZC0+ZF91bi5kX3B0cik7CiAgICAgICAgICAgICBicmVhazsKICNlbmRpZgogICAgICAgICBjYXNlIERUX0RFQlVHOgogICAgICAgICAgICAgLy8gU2V0IHRoZSBEVF9ERUJVRyBlbnRyeSB0byB0aGUgYWRkcmVzcyBvZiBfcl9kZWJ1ZyBmb3IgR0RCCiAgICAgICAgICAgICAvLyBpZiB0aGUgZHluYW1pYyB0YWJsZSBpcyB3cml0YWJsZQorLy8gRklYTUU6IG5vdCB3b3JraW5nIGN1cnJlbnRseSBmb3IgTjY0CisvLyBUaGUgZmxhZ3MgZm9yIHRoZSBMT0FEIGFuZCBEWU5BTUlDIHByb2dyYW0gaGVhZGVycyBkbyBub3QgYWdyZWUuCisvLyBUaGUgTE9BRCBzZWN0aW9uIGNvbnRhaW5uZyB0aGUgZHluYW1pYyB0YWJsZSBoYXMgYmVlbiBtYXBwZWQgYXMKKy8vIHJlYWQtb25seSwgYnV0IHRoZSBEWU5BTUlDIGhlYWRlciBjbGFpbXMgaXQgaXMgd3JpdGFibGUuCisjaWYgIShkZWZpbmVkKF9fbWlwc19fKSAmJiBkZWZpbmVkKF9fTFA2NF9fKSkKICAgICAgICAgICAgIGlmICgoZHluYW1pY19mbGFncyAmIFBGX1cpICE9IDApIHsKICAgICAgICAgICAgICAgICBkLT5kX3VuLmRfdmFsID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KCZfcl9kZWJ1Zyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgogI2lmIGRlZmluZWQoVVNFX1JFTEEpCiAgICAgICAgICBjYXNlIERUX1JFTEE6Ci0gICAgICAgICAgICBzaS0+cmVsYSA9IChFbGZfUmVsYSopIChiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICBzaS0+cmVsYSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhSZWxhKSo+KGJhc2UgKyBkLT5kX3VuLmRfcHRyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBEVF9SRUxBU1o6Ci0gICAgICAgICAgICBzaS0+cmVsYV9jb3VudCA9IGQtPmRfdW4uZF92YWwgLyBzaXplb2YoRWxmX1JlbGEpOworICAgICAgICAgICAgc2ktPnJlbGFfY291bnQgPSBkLT5kX3VuLmRfdmFsIC8gc2l6ZW9mKEVsZlcoUmVsYSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRFRfUkVMOgogICAgICAgICAgICAgRExfRVJSKCJ1bnN1cHBvcnRlZCBEVF9SRUwgaW4gXCIlc1wiIiwgc2ktPm5hbWUpOwpAQCAtMTcyNSwxMCArMTc3OCwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKICAgICAgICAgY2FzZSBEVF9SRUw6Ci0gICAgICAgICAgICBzaS0+cmVsID0gKEVsZl9SZWwqKSAoYmFzZSArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICAgICAgc2ktPnJlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhSZWwpKj4oYmFzZSArIGQtPmRfdW4uZF9wdHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRFRfUkVMU1o6Ci0gICAgICAgICAgICBzaS0+cmVsX2NvdW50ID0gZC0+ZF91bi5kX3ZhbCAvIHNpemVvZihFbGZfUmVsKTsKKyAgICAgICAgICAgIHNpLT5yZWxfY291bnQgPSBkLT5kX3VuLmRfdmFsIC8gc2l6ZW9mKEVsZlcoUmVsKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgRFRfUkVMQToKICAgICAgICAgICAgIERMX0VSUigidW5zdXBwb3J0ZWQgRFRfUkVMQSBpbiBcIiVzXCIiLCBzaS0+bmFtZSk7CkBAIC0xNzQ3LDIxICsxODAwLDIxIEBACiAgICAgICAgICAgICBERUJVRygiJXMgY29uc3RydWN0b3JzIChEVF9JTklUX0FSUkFZKSBmb3VuZCBhdCAlcCIsIHNpLT5uYW1lLCBzaS0+aW5pdF9hcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEVF9JTklUX0FSUkFZU1o6Ci0gICAgICAgICAgICBzaS0+aW5pdF9hcnJheV9jb3VudCA9ICgodW5zaWduZWQpZC0+ZF91bi5kX3ZhbCkgLyBzaXplb2YoRWxmX0FkZHIpOworICAgICAgICAgICAgc2ktPmluaXRfYXJyYXlfY291bnQgPSAoKHVuc2lnbmVkKWQtPmRfdW4uZF92YWwpIC8gc2l6ZW9mKEVsZlcoQWRkcikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRFRfRklOSV9BUlJBWToKICAgICAgICAgICAgIHNpLT5maW5pX2FycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxsaW5rZXJfZnVuY3Rpb25fdCo+KGJhc2UgKyBkLT5kX3VuLmRfcHRyKTsKICAgICAgICAgICAgIERFQlVHKCIlcyBkZXN0cnVjdG9ycyAoRFRfRklOSV9BUlJBWSkgZm91bmQgYXQgJXAiLCBzaS0+bmFtZSwgc2ktPmZpbmlfYXJyYXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRFRfRklOSV9BUlJBWVNaOgotICAgICAgICAgICAgc2ktPmZpbmlfYXJyYXlfY291bnQgPSAoKHVuc2lnbmVkKWQtPmRfdW4uZF92YWwpIC8gc2l6ZW9mKEVsZl9BZGRyKTsKKyAgICAgICAgICAgIHNpLT5maW5pX2FycmF5X2NvdW50ID0gKCh1bnNpZ25lZClkLT5kX3VuLmRfdmFsKSAvIHNpemVvZihFbGZXKEFkZHIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERUX1BSRUlOSVRfQVJSQVk6CiAgICAgICAgICAgICBzaS0+cHJlaW5pdF9hcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8bGlua2VyX2Z1bmN0aW9uX3QqPihiYXNlICsgZC0+ZF91bi5kX3B0cik7CiAgICAgICAgICAgICBERUJVRygiJXMgY29uc3RydWN0b3JzIChEVF9QUkVJTklUX0FSUkFZKSBmb3VuZCBhdCAlcCIsIHNpLT5uYW1lLCBzaS0+cHJlaW5pdF9hcnJheSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEVF9QUkVJTklUX0FSUkFZU1o6Ci0gICAgICAgICAgICBzaS0+cHJlaW5pdF9hcnJheV9jb3VudCA9ICgodW5zaWduZWQpZC0+ZF91bi5kX3ZhbCkgLyBzaXplb2YoRWxmX0FkZHIpOworICAgICAgICAgICAgc2ktPnByZWluaXRfYXJyYXlfY291bnQgPSAoKHVuc2lnbmVkKWQtPmRfdW4uZF92YWwpIC8gc2l6ZW9mKEVsZlcoQWRkcikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRFRfVEVYVFJFTDoKICNpZiBkZWZpbmVkKF9fTFA2NF9fKQpAQCAtMTc5OCw3ICsxODUxLDcgQEAKICAgICAgICAgY2FzZSBEVF9NSVBTX1JMRF9NQVA6CiAgICAgICAgICAgICAvLyBTZXQgdGhlIERUX01JUFNfUkxEX01BUCBlbnRyeSB0byB0aGUgYWRkcmVzcyBvZiBfcl9kZWJ1ZyBmb3IgR0RCLgogICAgICAgICAgICAgewotICAgICAgICAgICAgICByX2RlYnVnKiogZHAgPSAocl9kZWJ1ZyoqKSBkLT5kX3VuLmRfcHRyOworICAgICAgICAgICAgICByX2RlYnVnKiogZHAgPSByZWludGVycHJldF9jYXN0PHJfZGVidWcqKj4oYmFzZSArIGQtPmRfdW4uZF9wdHIpOwogICAgICAgICAgICAgICAqZHAgPSAmX3JfZGVidWc7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4NTEsMzQgKzE5MDQsMzYgQEAKIAogICAgIC8vIElmIHRoaXMgaXMgdGhlIG1haW4gZXhlY3V0YWJsZSwgdGhlbiBsb2FkIGFsbCBvZiB0aGUgbGlicmFyaWVzIGZyb20gTERfUFJFTE9BRCBub3cuCiAgICAgaWYgKHNpLT5mbGFncyAmIEZMQUdfRVhFKSB7Ci0gICAgICAgIG1lbXNldChnTGRQcmVsb2FkcywgMCwgc2l6ZW9mKGdMZFByZWxvYWRzKSk7CisgICAgICAgIG1lbXNldChnX2xkX3ByZWxvYWRzLCAwLCBzaXplb2YoZ19sZF9wcmVsb2FkcykpOwogICAgICAgICBzaXplX3QgcHJlbG9hZF9jb3VudCA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBnTGRQcmVsb2FkTmFtZXNbaV0gIT0gTlVMTDsgaSsrKSB7Ci0gICAgICAgICAgICBzb2luZm8qIGxzaSA9IGZpbmRfbGlicmFyeShnTGRQcmVsb2FkTmFtZXNbaV0pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgZ19sZF9wcmVsb2FkX25hbWVzW2ldICE9IE5VTEw7IGkrKykgeworICAgICAgICAgICAgc29pbmZvKiBsc2kgPSBmaW5kX2xpYnJhcnkoZ19sZF9wcmVsb2FkX25hbWVzW2ldLCAwLCBOVUxMKTsKICAgICAgICAgICAgIGlmIChsc2kgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGdMZFByZWxvYWRzW3ByZWxvYWRfY291bnQrK10gPSBsc2k7CisgICAgICAgICAgICAgICAgZ19sZF9wcmVsb2Fkc1twcmVsb2FkX2NvdW50KytdID0gbHNpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBBcyB3aXRoIGdsaWJjLCBmYWlsdXJlIHRvIGxvYWQgYW4gTERfUFJFTE9BRCBsaWJyYXJ5IGlzIGp1c3QgYSB3YXJuaW5nLgogICAgICAgICAgICAgICAgIERMX1dBUk4oImNvdWxkIG5vdCBsb2FkIGxpYnJhcnkgXCIlc1wiIGZyb20gTERfUFJFTE9BRCBmb3IgXCIlc1wiOyBjYXVzZWQgYnkgJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgZ0xkUHJlbG9hZE5hbWVzW2ldLCBzaS0+bmFtZSwgbGlua2VyX2dldF9lcnJvcl9idWZmZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnX2xkX3ByZWxvYWRfbmFtZXNbaV0sIHNpLT5uYW1lLCBsaW5rZXJfZ2V0X2Vycm9yX2J1ZmZlcigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIHNvaW5mbyoqIG5lZWRlZCA9IChzb2luZm8qKikgYWxsb2NhKCgxICsgbmVlZGVkX2NvdW50KSAqIHNpemVvZihzb2luZm8qKSk7CisgICAgc29pbmZvKiogbmVlZGVkID0gcmVpbnRlcnByZXRfY2FzdDxzb2luZm8qKj4oYWxsb2NhKCgxICsgbmVlZGVkX2NvdW50KSAqIHNpemVvZihzb2luZm8qKSkpOwogICAgIHNvaW5mbyoqIHBuZWVkZWQgPSBuZWVkZWQ7CiAKLSAgICBmb3IgKEVsZl9EeW4qIGQgPSBzaS0+ZHluYW1pYzsgZC0+ZF90YWcgIT0gRFRfTlVMTDsgKytkKSB7CisgICAgZm9yIChFbGZXKER5bikqIGQgPSBzaS0+ZHluYW1pYzsgZC0+ZF90YWcgIT0gRFRfTlVMTDsgKytkKSB7CiAgICAgICAgIGlmIChkLT5kX3RhZyA9PSBEVF9ORUVERUQpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxpYnJhcnlfbmFtZSA9IHNpLT5zdHJ0YWIgKyBkLT5kX3VuLmRfdmFsOwogICAgICAgICAgICAgREVCVUcoIiVzIG5lZWRzICVzIiwgc2ktPm5hbWUsIGxpYnJhcnlfbmFtZSk7Ci0gICAgICAgICAgICBzb2luZm8qIGxzaSA9IGZpbmRfbGlicmFyeShsaWJyYXJ5X25hbWUpOworICAgICAgICAgICAgc29pbmZvKiBsc2kgPSBmaW5kX2xpYnJhcnkobGlicmFyeV9uYW1lLCAwLCBOVUxMKTsKICAgICAgICAgICAgIGlmIChsc2kgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHN0cmxjcHkodG1wX2Vycl9idWYsIGxpbmtlcl9nZXRfZXJyb3JfYnVmZmVyKCksIHNpemVvZih0bXBfZXJyX2J1ZikpOwogICAgICAgICAgICAgICAgIERMX0VSUigiY291bGQgbm90IGxvYWQgbGlicmFyeSBcIiVzXCIgbmVlZGVkIGJ5IFwiJXNcIjsgY2F1c2VkIGJ5ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9uYW1lLCBzaS0+bmFtZSwgdG1wX2Vycl9idWYpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2ktPmFkZF9jaGlsZChsc2kpOwogICAgICAgICAgICAgKnBuZWVkZWQrKyA9IGxzaTsKICAgICAgICAgfQogICAgIH0KQEAgLTE5MDAsMjYgKzE5NTUsMjYgQEAKIAogI2lmIGRlZmluZWQoVVNFX1JFTEEpCiAgICAgaWYgKHNpLT5wbHRfcmVsYSAhPSBOVUxMKSB7Ci0gICAgICAgIERFQlVHKCJbIHJlbG9jYXRpbmcgJXMgcGx0IF1cbiIsIHNpLT5uYW1lICk7Ci0gICAgICAgIGlmIChzb2luZm9fcmVsb2NhdGVfYShzaSwgc2ktPnBsdF9yZWxhLCBzaS0+cGx0X3JlbGFfY291bnQsIG5lZWRlZCkpIHsKKyAgICAgICAgREVCVUcoIlsgcmVsb2NhdGluZyAlcyBwbHQgXVxuIiwgc2ktPm5hbWUpOworICAgICAgICBpZiAoc29pbmZvX3JlbG9jYXRlKHNpLCBzaS0+cGx0X3JlbGEsIHNpLT5wbHRfcmVsYV9jb3VudCwgbmVlZGVkKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChzaS0+cmVsYSAhPSBOVUxMKSB7Ci0gICAgICAgIERFQlVHKCJbIHJlbG9jYXRpbmcgJXMgXVxuIiwgc2ktPm5hbWUgKTsKLSAgICAgICAgaWYgKHNvaW5mb19yZWxvY2F0ZV9hKHNpLCBzaS0+cmVsYSwgc2ktPnJlbGFfY291bnQsIG5lZWRlZCkpIHsKKyAgICAgICAgREVCVUcoIlsgcmVsb2NhdGluZyAlcyBdXG4iLCBzaS0+bmFtZSk7CisgICAgICAgIGlmIChzb2luZm9fcmVsb2NhdGUoc2ksIHNpLT5yZWxhLCBzaS0+cmVsYV9jb3VudCwgbmVlZGVkKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogI2Vsc2UKICAgICBpZiAoc2ktPnBsdF9yZWwgIT0gTlVMTCkgewotICAgICAgICBERUJVRygiWyByZWxvY2F0aW5nICVzIHBsdCBdIiwgc2ktPm5hbWUgKTsKKyAgICAgICAgREVCVUcoIlsgcmVsb2NhdGluZyAlcyBwbHQgXSIsIHNpLT5uYW1lKTsKICAgICAgICAgaWYgKHNvaW5mb19yZWxvY2F0ZShzaSwgc2ktPnBsdF9yZWwsIHNpLT5wbHRfcmVsX2NvdW50LCBuZWVkZWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHNpLT5yZWwgIT0gTlVMTCkgewotICAgICAgICBERUJVRygiWyByZWxvY2F0aW5nICVzIF0iLCBzaS0+bmFtZSApOworICAgICAgICBERUJVRygiWyByZWxvY2F0aW5nICVzIF0iLCBzaS0+bmFtZSk7CiAgICAgICAgIGlmIChzb2luZm9fcmVsb2NhdGUoc2ksIHNpLT5yZWwsIHNpLT5yZWxfY291bnQsIG5lZWRlZCkpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTk1Myw2ICsyMDA4LDIzIEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICAvKiBIYW5kbGUgc2VyaWFsaXppbmcvc2hhcmluZyB0aGUgUkVMUk8gc2VnbWVudCAqLworICAgIGlmIChleHRpbmZvICYmIChleHRpbmZvLT5mbGFncyAmIEFORFJPSURfRExFWFRfV1JJVEVfUkVMUk8pKSB7CisgICAgICBpZiAocGhkcl90YWJsZV9zZXJpYWxpemVfZ251X3JlbHJvKHNpLT5waGRyLCBzaS0+cGhudW0sIHNpLT5sb2FkX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGluZm8tPnJlbHJvX2ZkKSA8IDApIHsKKyAgICAgICAgRExfRVJSKCJmYWlsZWQgc2VyaWFsaXppbmcgR05VIFJFTFJPIHNlY3Rpb24gZm9yIFwiJXNcIjogJXMiLAorICAgICAgICAgICAgICAgc2ktPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGV4dGluZm8gJiYgKGV4dGluZm8tPmZsYWdzICYgQU5EUk9JRF9ETEVYVF9VU0VfUkVMUk8pKSB7CisgICAgICBpZiAocGhkcl90YWJsZV9tYXBfZ251X3JlbHJvKHNpLT5waGRyLCBzaS0+cGhudW0sIHNpLT5sb2FkX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGluZm8tPnJlbHJvX2ZkKSA8IDApIHsKKyAgICAgICAgRExfRVJSKCJmYWlsZWQgbWFwcGluZyBHTlUgUkVMUk8gc2VjdGlvbiBmb3IgXCIlc1wiOiAlcyIsCisgICAgICAgICAgICAgICBzaS0+bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKwogICAgIG5vdGlmeV9nZGJfb2ZfbG9hZChzaSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xOTYyLDMyICsyMDM0LDY1IEBACiAgKiBJdCBoZWxwcyB0byBzdGFjayB1bndpbmRpbmcgdGhyb3VnaCBzaWduYWwgaGFuZGxlcnMuCiAgKiBBbHNvLCBpdCBtYWtlcyBiaW9uaWMgbW9yZSBsaWtlIGdsaWJjLgogICovCi1zdGF0aWMgdm9pZCBhZGRfdmRzbyhLZXJuZWxBcmd1bWVudEJsb2NrJiBhcmdzIFVOVVNFRCkgeworc3RhdGljIHZvaWQgYWRkX3Zkc28oS2VybmVsQXJndW1lbnRCbG9jayYgYXJncyBfX3VudXNlZCkgewogI2lmIGRlZmluZWQoQVRfU1lTSU5GT19FSERSKQotICAgIEVsZl9FaGRyKiBlaGRyX3Zkc28gPSByZWludGVycHJldF9jYXN0PEVsZl9FaGRyKj4oYXJncy5nZXRhdXh2YWwoQVRfU1lTSU5GT19FSERSKSk7Ci0gICAgaWYgKGVoZHJfdmRzbyA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgIEVsZlcoRWhkcikqIGVoZHJfdmRzbyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhFaGRyKSo+KGFyZ3MuZ2V0YXV4dmFsKEFUX1NZU0lORk9fRUhEUikpOworICBpZiAoZWhkcl92ZHNvID09IE5VTEwpIHsKKyAgICByZXR1cm47CisgIH0KIAotICAgIHNvaW5mbyogc2kgPSBzb2luZm9fYWxsb2MoIlt2ZHNvXSIpOworICBzb2luZm8qIHNpID0gc29pbmZvX2FsbG9jKCJbdmRzb10iLCBOVUxMKTsKIAotICAgIHNpLT5waGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZfUGhkcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVoZHJfdmRzbykgKyBlaGRyX3Zkc28tPmVfcGhvZmYpOwotICAgIHNpLT5waG51bSA9IGVoZHJfdmRzby0+ZV9waG51bTsKLSAgICBzaS0+YmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHI+KGVoZHJfdmRzbyk7Ci0gICAgc2ktPnNpemUgPSBwaGRyX3RhYmxlX2dldF9sb2FkX3NpemUoc2ktPnBoZHIsIHNpLT5waG51bSk7Ci0gICAgc2ktPmZsYWdzID0gMDsKLSAgICBzaS0+bG9hZF9iaWFzID0gZ2V0X2VsZl9leGVjX2xvYWRfYmlhcyhlaGRyX3Zkc28pOworICBzaS0+cGhkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhQaGRyKSo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVoZHJfdmRzbykgKyBlaGRyX3Zkc28tPmVfcGhvZmYpOworICBzaS0+cGhudW0gPSBlaGRyX3Zkc28tPmVfcGhudW07CisgIHNpLT5iYXNlID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpPihlaGRyX3Zkc28pOworICBzaS0+c2l6ZSA9IHBoZHJfdGFibGVfZ2V0X2xvYWRfc2l6ZShzaS0+cGhkciwgc2ktPnBobnVtKTsKKyAgc2ktPmxvYWRfYmlhcyA9IGdldF9lbGZfZXhlY19sb2FkX2JpYXMoZWhkcl92ZHNvKTsKIAotICAgIHNvaW5mb19saW5rX2ltYWdlKHNpKTsKKyAgc29pbmZvX2xpbmtfaW1hZ2Uoc2ksIE5VTEwpOwogI2VuZGlmCiB9CiAKIC8qCisgKiBUaGlzIGlzIGxpbmtlciBzb2luZm8gZm9yIEdEQi4gU2VlIGRldGFpbHMgYmVsb3cuCisgKi8KK3N0YXRpYyBzb2luZm8gbGlua2VyX3NvaW5mb19mb3JfZ2RiOworCisvKiBnZGIgZXhwZWN0cyB0aGUgbGlua2VyIHRvIGJlIGluIHRoZSBkZWJ1ZyBzaGFyZWQgb2JqZWN0IGxpc3QuCisgKiBXaXRob3V0IHRoaXMsIGdkYiBoYXMgdHJvdWJsZSBsb2NhdGluZyB0aGUgbGlua2VyJ3MgIi50ZXh0IgorICogYW5kICIucGx0IiBzZWN0aW9ucy4gR2RiIGNvdWxkIGFsc28gcG90ZW50aWFsbHkgdXNlIHRoaXMgdG8KKyAqIHJlbG9jYXRlIHRoZSBvZmZzZXQgb2Ygb3VyIGV4cG9ydGVkICdydGxkX2RiX2RsYWN0aXZpdHknIHN5bWJvbC4KKyAqIERvbid0IHVzZSBzb2luZm9fYWxsb2MoKSwgYmVjYXVzZSB0aGUgbGlua2VyIHNob3VsZG4ndAorICogYmUgb24gdGhlIHNvaW5mbyBsaXN0LgorICovCitzdGF0aWMgdm9pZCBpbml0X2xpbmtlcl9pbmZvX2Zvcl9nZGIoRWxmVyhBZGRyKSBsaW5rZXJfYmFzZSkgeworI2lmIGRlZmluZWQoX19MUDY0X18pCisgIHN0cmxjcHkobGlua2VyX3NvaW5mb19mb3JfZ2RiLm5hbWUsICIvc3lzdGVtL2Jpbi9saW5rZXI2NCIsIHNpemVvZihsaW5rZXJfc29pbmZvX2Zvcl9nZGIubmFtZSkpOworI2Vsc2UKKyAgc3RybGNweShsaW5rZXJfc29pbmZvX2Zvcl9nZGIubmFtZSwgIi9zeXN0ZW0vYmluL2xpbmtlciIsIHNpemVvZihsaW5rZXJfc29pbmZvX2Zvcl9nZGIubmFtZSkpOworI2VuZGlmCisgIGxpbmtlcl9zb2luZm9fZm9yX2dkYi5mbGFncyA9IEZMQUdfTkVXX1NPSU5GTzsKKyAgbGlua2VyX3NvaW5mb19mb3JfZ2RiLmJhc2UgPSBsaW5rZXJfYmFzZTsKKworICAvKgorICAgKiBTZXQgdGhlIGR5bmFtaWMgZmllbGQgaW4gdGhlIGxpbmsgbWFwIG90aGVyd2lzZSBnZGIgd2lsbCBjb21wbGFpbiB3aXRoCisgICAqIHRoZSBmb2xsb3dpbmc6CisgICAqICAgd2FybmluZzogLmR5bmFtaWMgc2VjdGlvbiBmb3IgIi9zeXN0ZW0vYmluL2xpbmtlciIgaXMgbm90IGF0IHRoZQorICAgKiAgIGV4cGVjdGVkIGFkZHJlc3MgKHdyb25nIGxpYnJhcnkgb3IgdmVyc2lvbiBtaXNtYXRjaD8pCisgICAqLworICBFbGZXKEVoZHIpKiBlbGZfaGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEVoZHIpKj4obGlua2VyX2Jhc2UpOworICBFbGZXKFBoZHIpKiBwaGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFBoZHIpKj4obGlua2VyX2Jhc2UgKyBlbGZfaGRyLT5lX3Bob2ZmKTsKKyAgcGhkcl90YWJsZV9nZXRfZHluYW1pY19zZWN0aW9uKHBoZHIsIGVsZl9oZHItPmVfcGhudW0sIGxpbmtlcl9iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmtlcl9zb2luZm9fZm9yX2dkYi5keW5hbWljLCBOVUxMLCBOVUxMKTsKKyAgaW5zZXJ0X3NvaW5mb19pbnRvX2RlYnVnX21hcCgmbGlua2VyX3NvaW5mb19mb3JfZ2RiKTsKK30KKworLyoKICAqIFRoaXMgY29kZSBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGxpbmtlciBoYXMgbGlua2VkIGl0c2VsZiBhbmQKICAqIGZpeGVkIGl0J3Mgb3duIEdPVC4gSXQgaXMgc2FmZSB0byBtYWtlIHJlZmVyZW5jZXMgdG8gZXh0ZXJucwogICogYW5kIG90aGVyIG5vbi1sb2NhbCBkYXRhIGF0IHRoaXMgcG9pbnQuCiAgKi8KLXN0YXRpYyBFbGZfQWRkciBfX2xpbmtlcl9pbml0X3Bvc3RfcmVsb2NhdGlvbihLZXJuZWxBcmd1bWVudEJsb2NrJiBhcmdzLCBFbGZfQWRkciBsaW5rZXJfYmFzZSkgeworc3RhdGljIEVsZlcoQWRkcikgX19saW5rZXJfaW5pdF9wb3N0X3JlbG9jYXRpb24oS2VybmVsQXJndW1lbnRCbG9jayYgYXJncywgRWxmVyhBZGRyKSBsaW5rZXJfYmFzZSkgewogICAgIC8qIE5PVEU6IHdlIHN0b3JlIHRoZSBhcmdzIHBvaW50ZXIgb24gYSBzcGVjaWFsIGxvY2F0aW9uCiAgICAgICogICAgICAgb2YgdGhlIHRlbXBvcmFyeSBUTFMgYXJlYSBpbiBvcmRlciB0byBwYXNzIGl0IHRvCiAgICAgICogICAgICAgdGhlIEMgTGlicmFyeSdzIHJ1bnRpbWUgaW5pdGlhbGl6ZXIuCkBAIC0yMDE3LDcgKzIxMjIsNyBAQAogICAgIC8vIEdldCBhIGZldyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAgICAgY29uc3QgY2hhciogTERfREVCVUcgPSBsaW5rZXJfZW52X2dldCgiTERfREVCVUciKTsKICAgICBpZiAoTERfREVCVUcgIT0gTlVMTCkgewotICAgICAgZ0xkRGVidWdWZXJib3NpdHkgPSBhdG9pKExEX0RFQlVHKTsKKyAgICAgIGdfbGRfZGVidWdfdmVyYm9zaXR5ID0gYXRvaShMRF9ERUJVRyk7CiAgICAgfQogCiAgICAgLy8gTm9ybWFsbHksIHRoZXNlIGFyZSBjbGVhbmVkIGJ5IGxpbmtlcl9lbnZfaW5pdCwgYnV0IHRoZSB0ZXN0CkBAIC0yMDMxLDE0ICsyMTM2LDE0IEBACiAKICAgICBJTkZPKCJbIGFuZHJvaWQgbGlua2VyICYgZGVidWdnZXIgXSIpOwogCi0gICAgc29pbmZvKiBzaSA9IHNvaW5mb19hbGxvYyhhcmdzLmFyZ3ZbMF0pOworICAgIHNvaW5mbyogc2kgPSBzb2luZm9fYWxsb2MoYXJncy5hcmd2WzBdLCBOVUxMKTsKICAgICBpZiAoc2kgPT0gTlVMTCkgewogICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CiAgICAgfQogCiAgICAgLyogYm9vdHN0cmFwIHRoZSBsaW5rIG1hcCwgdGhlIG1haW4gZXhlIGFsd2F5cyBuZWVkcyB0byBiZSBmaXJzdCAqLwogICAgIHNpLT5mbGFncyB8PSBGTEFHX0VYRTsKLSAgICBsaW5rX21hcF90KiBtYXAgPSAmKHNpLT5saW5rX21hcCk7CisgICAgbGlua19tYXAqIG1hcCA9ICYoc2ktPmxpbmtfbWFwX2hlYWQpOwogCiAgICAgbWFwLT5sX2FkZHIgPSAwOwogICAgIG1hcC0+bF9uYW1lID0gYXJncy5hcmd2WzBdOwpAQCAtMjA0OCwzOCArMjE1MywxMCBAQAogICAgIF9yX2RlYnVnLnJfbWFwID0gbWFwOwogICAgIHJfZGVidWdfdGFpbCA9IG1hcDsKIAotICAgIC8qIGdkYiBleHBlY3RzIHRoZSBsaW5rZXIgdG8gYmUgaW4gdGhlIGRlYnVnIHNoYXJlZCBvYmplY3QgbGlzdC4KLSAgICAgKiBXaXRob3V0IHRoaXMsIGdkYiBoYXMgdHJvdWJsZSBsb2NhdGluZyB0aGUgbGlua2VyJ3MgIi50ZXh0IgotICAgICAqIGFuZCAiLnBsdCIgc2VjdGlvbnMuIEdkYiBjb3VsZCBhbHNvIHBvdGVudGlhbGx5IHVzZSB0aGlzIHRvCi0gICAgICogcmVsb2NhdGUgdGhlIG9mZnNldCBvZiBvdXIgZXhwb3J0ZWQgJ3J0bGRfZGJfZGxhY3Rpdml0eScgc3ltYm9sLgotICAgICAqIERvbid0IHVzZSBzb2luZm9fYWxsb2MoKSwgYmVjYXVzZSB0aGUgbGlua2VyIHNob3VsZG4ndAotICAgICAqIGJlIG9uIHRoZSBzb2luZm8gbGlzdC4KLSAgICAgKi8KLSAgICB7Ci0gICAgICAgIHN0YXRpYyBzb2luZm8gbGlua2VyX3NvaW5mbzsKLSNpZiBkZWZpbmVkKF9fTFA2NF9fKQotICAgICAgICBzdHJsY3B5KGxpbmtlcl9zb2luZm8ubmFtZSwgIi9zeXN0ZW0vYmluL2xpbmtlcjY0Iiwgc2l6ZW9mKGxpbmtlcl9zb2luZm8ubmFtZSkpOwotI2Vsc2UKLSAgICAgICAgc3RybGNweShsaW5rZXJfc29pbmZvLm5hbWUsICIvc3lzdGVtL2Jpbi9saW5rZXIiLCBzaXplb2YobGlua2VyX3NvaW5mby5uYW1lKSk7Ci0jZW5kaWYKLSAgICAgICAgbGlua2VyX3NvaW5mby5mbGFncyA9IDA7Ci0gICAgICAgIGxpbmtlcl9zb2luZm8uYmFzZSA9IGxpbmtlcl9iYXNlOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNldCB0aGUgZHluYW1pYyBmaWVsZCBpbiB0aGUgbGluayBtYXAgb3RoZXJ3aXNlIGdkYiB3aWxsIGNvbXBsYWluIHdpdGgKLSAgICAgICAgICogdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICogICB3YXJuaW5nOiAuZHluYW1pYyBzZWN0aW9uIGZvciAiL3N5c3RlbS9iaW4vbGlua2VyIiBpcyBub3QgYXQgdGhlCi0gICAgICAgICAqICAgZXhwZWN0ZWQgYWRkcmVzcyAod3JvbmcgbGlicmFyeSBvciB2ZXJzaW9uIG1pc21hdGNoPykKLSAgICAgICAgICovCi0gICAgICAgIEVsZl9FaGRyICplbGZfaGRyID0gKEVsZl9FaGRyICopIGxpbmtlcl9iYXNlOwotICAgICAgICBFbGZfUGhkciAqcGhkciA9IChFbGZfUGhkciopKCh1bnNpZ25lZCBjaGFyKikgbGlua2VyX2Jhc2UgKyBlbGZfaGRyLT5lX3Bob2ZmKTsKLSAgICAgICAgcGhkcl90YWJsZV9nZXRfZHluYW1pY19zZWN0aW9uKHBoZHIsIGVsZl9oZHItPmVfcGhudW0sIGxpbmtlcl9iYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmtlcl9zb2luZm8uZHluYW1pYywgTlVMTCwgTlVMTCk7Ci0gICAgICAgIGluc2VydF9zb2luZm9faW50b19kZWJ1Z19tYXAoJmxpbmtlcl9zb2luZm8pOwotICAgIH0KKyAgICBpbml0X2xpbmtlcl9pbmZvX2Zvcl9nZGIobGlua2VyX2Jhc2UpOwogCiAgICAgLy8gRXh0cmFjdCBpbmZvcm1hdGlvbiBwYXNzZWQgZnJvbSB0aGUga2VybmVsLgotICAgIHNpLT5waGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZfUGhkcio+KGFyZ3MuZ2V0YXV4dmFsKEFUX1BIRFIpKTsKKyAgICBzaS0+cGhkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhQaGRyKSo+KGFyZ3MuZ2V0YXV4dmFsKEFUX1BIRFIpKTsKICAgICBzaS0+cGhudW0gPSBhcmdzLmdldGF1eHZhbChBVF9QSE5VTSk7CiAgICAgc2ktPmVudHJ5ID0gYXJncy5nZXRhdXh2YWwoQVRfRU5UUlkpOwogCkBAIC0yMDkyLDIxICsyMTY5LDI3IEBACiAgICAgc2ktPmxvYWRfYmlhcyA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaS0+cGhudW07ICsraSkgewogICAgICAgaWYgKHNpLT5waGRyW2ldLnBfdHlwZSA9PSBQVF9QSERSKSB7Ci0gICAgICAgIHNpLT5sb2FkX2JpYXMgPSByZWludGVycHJldF9jYXN0PEVsZl9BZGRyPihzaS0+cGhkcikgLSBzaS0+cGhkcltpXS5wX3ZhZGRyOwotICAgICAgICBzaS0+YmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHI+KHNpLT5waGRyKSAtIHNpLT5waGRyW2ldLnBfb2Zmc2V0OworICAgICAgICBzaS0+bG9hZF9iaWFzID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpPihzaS0+cGhkcikgLSBzaS0+cGhkcltpXS5wX3ZhZGRyOworICAgICAgICBzaS0+YmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhBZGRyKT4oc2ktPnBoZHIpIC0gc2ktPnBoZHJbaV0ucF9vZmZzZXQ7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KICAgICBzaS0+ZHluYW1pYyA9IE5VTEw7CiAgICAgc2ktPnJlZl9jb3VudCA9IDE7CiAKKyAgICBFbGZXKEVoZHIpKiBlbGZfaGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEVoZHIpKj4oc2ktPmJhc2UpOworICAgIGlmIChlbGZfaGRyLT5lX3R5cGUgIT0gRVRfRFlOKSB7CisgICAgICAgIF9fbGliY19mb3JtYXRfZmQoMiwgImVycm9yOiBvbmx5IHBvc2l0aW9uIGluZGVwZW5kZW50IGV4ZWN1dGFibGVzIChQSUUpIGFyZSBzdXBwb3J0ZWQuXG4iKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKwogICAgIC8vIFVzZSBMRF9MSUJSQVJZX1BBVEggYW5kIExEX1BSRUxPQUQgKGJ1dCBvbmx5IGlmIHdlIGFyZW4ndCBzZXR1aWQvc2V0Z2lkKS4KICAgICBwYXJzZV9MRF9MSUJSQVJZX1BBVEgobGRwYXRoX2Vudik7CiAgICAgcGFyc2VfTERfUFJFTE9BRChsZHByZWxvYWRfZW52KTsKIAogICAgIHNvbWFpbiA9IHNpOwogCi0gICAgaWYgKCFzb2luZm9fbGlua19pbWFnZShzaSkpIHsKKyAgICBpZiAoIXNvaW5mb19saW5rX2ltYWdlKHNpLCBOVUxMKSkgewogICAgICAgICBfX2xpYmNfZm9ybWF0X2ZkKDIsICJDQU5OT1QgTElOSyBFWEVDVVRBQkxFOiAlc1xuIiwgbGlua2VyX2dldF9lcnJvcl9idWZmZXIoKSk7CiAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgICB9CkBAIC0yMTE1LDggKzIxOTgsOCBAQAogCiAgICAgc2ktPkNhbGxQcmVJbml0Q29uc3RydWN0b3JzKCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgZ0xkUHJlbG9hZHNbaV0gIT0gTlVMTDsgKytpKSB7Ci0gICAgICAgIGdMZFByZWxvYWRzW2ldLT5DYWxsQ29uc3RydWN0b3JzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGdfbGRfcHJlbG9hZHNbaV0gIT0gTlVMTDsgKytpKSB7CisgICAgICAgIGdfbGRfcHJlbG9hZHNbaV0tPkNhbGxDb25zdHJ1Y3RvcnMoKTsKICAgICB9CiAKICAgICAvKiBBZnRlciB0aGUgbGlua19pbWFnZSwgdGhlIHNpLT5sb2FkX2JpYXMgaXMgaW5pdGlhbGl6ZWQuCkBAIC0yMTI4LDExICsyMjExLDEwIEBACiAgICAgc2ktPkNhbGxDb25zdHJ1Y3RvcnMoKTsKIAogI2lmIFRJTUlORwotICAgIGdldHRpbWVvZmRheSgmdDEsTlVMTCk7CisgICAgZ2V0dGltZW9mZGF5KCZ0MSwgTlVMTCk7CiAgICAgUFJJTlQoIkxJTktFUiBUSU1FOiAlczogJWQgbWljcm9zZWNvbmRzIiwgYXJncy5hcmd2WzBdLCAoaW50KSAoCiAgICAgICAgICAgICAgICAoKChsb25nIGxvbmcpdDEudHZfc2VjICogMTAwMDAwMExMKSArIChsb25nIGxvbmcpdDEudHZfdXNlYykgLQotICAgICAgICAgICAgICAgKCgobG9uZyBsb25nKXQwLnR2X3NlYyAqIDEwMDAwMDBMTCkgKyAobG9uZyBsb25nKXQwLnR2X3VzZWMpCi0gICAgICAgICAgICAgICApKTsKKyAgICAgICAgICAgICAgICgoKGxvbmcgbG9uZyl0MC50dl9zZWMgKiAxMDAwMDAwTEwpICsgKGxvbmcgbG9uZyl0MC50dl91c2VjKSkpOwogI2VuZGlmCiAjaWYgU1RBVFMKICAgICBQUklOVCgiUkVMTyBTVEFUUzogJXM6ICVkIGFicywgJWQgcmVsLCAlZCBjb3B5LCAlZCBzeW1ib2wiLCBhcmdzLmFyZ3ZbMF0sCkBAIC0yMTgzLDE5ICsyMjY1LDIxIEBACiAgKiAgICBsb2FkIGJpYXMsIGkuZS4gYWRkIHRoZSB2YWx1ZSBvZiBhbnkgcF92YWRkciBpbiB0aGUgZmlsZSB0byBnZXQKICAqICAgIHRoZSBjb3JyZXNwb25kaW5nIGFkZHJlc3MgaW4gbWVtb3J5LgogICovCi1zdGF0aWMgRWxmX0FkZHIgZ2V0X2VsZl9leGVjX2xvYWRfYmlhcyhjb25zdCBFbGZfRWhkciogZWxmKSB7Ci0gIEVsZl9BZGRyIG9mZnNldCA9IGVsZi0+ZV9waG9mZjsKLSAgY29uc3QgRWxmX1BoZHIqIHBoZHJfdGFibGUgPSAoY29uc3QgRWxmX1BoZHIqKSgoY2hhciopZWxmICsgb2Zmc2V0KTsKLSAgY29uc3QgRWxmX1BoZHIqIHBoZHJfZW5kID0gcGhkcl90YWJsZSArIGVsZi0+ZV9waG51bTsKK3N0YXRpYyBFbGZXKEFkZHIpIGdldF9lbGZfZXhlY19sb2FkX2JpYXMoY29uc3QgRWxmVyhFaGRyKSogZWxmKSB7CisgIEVsZlcoQWRkcikgb2Zmc2V0ID0gZWxmLT5lX3Bob2ZmOworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFbGZXKFBoZHIpKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGVsZikgKyBvZmZzZXQpOworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyX2VuZCA9IHBoZHJfdGFibGUgKyBlbGYtPmVfcGhudW07CiAKLSAgZm9yIChjb25zdCBFbGZfUGhkciogcGhkciA9IHBoZHJfdGFibGU7IHBoZHIgPCBwaGRyX2VuZDsgcGhkcisrKSB7CisgIGZvciAoY29uc3QgRWxmVyhQaGRyKSogcGhkciA9IHBoZHJfdGFibGU7IHBoZHIgPCBwaGRyX2VuZDsgcGhkcisrKSB7CiAgICAgaWYgKHBoZHItPnBfdHlwZSA9PSBQVF9MT0FEKSB7Ci0gICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxFbGZfQWRkcj4oZWxmKSArIHBoZHItPnBfb2Zmc2V0IC0gcGhkci0+cF92YWRkcjsKKyAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEVsZlcoQWRkcik+KGVsZikgKyBwaGRyLT5wX29mZnNldCAtIHBoZHItPnBfdmFkZHI7CiAgICAgfQogICB9CiAgIHJldHVybiAwOwogfQogCitleHRlcm4gIkMiIHZvaWQgX3N0YXJ0KCk7CisKIC8qCiAgKiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIGxpbmtlciwgY2FsbGVkIGZyb20gYmVnaW4uUy4gVGhpcwogICogbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciBmaXhpbmcgdGhlIGxpbmtlcidzIG93biByZWxvY2F0aW9ucywgYW5kCkBAIC0yMjA1LDE2ICsyMjg5LDMxIEBACiAgKiByZWxvY2F0aW9ucywgYW55IGF0dGVtcHQgdG8gcmVmZXJlbmNlIGFuIGV4dGVybiB2YXJpYWJsZSwgZXh0ZXJuCiAgKiBmdW5jdGlvbiwgb3Igb3RoZXIgR09UIHJlZmVyZW5jZSB3aWxsIGdlbmVyYXRlIGEgc2VnZmF1bHQuCiAgKi8KLWV4dGVybiAiQyIgRWxmX0FkZHIgX19saW5rZXJfaW5pdCh2b2lkKiByYXdfYXJncykgeworZXh0ZXJuICJDIiBFbGZXKEFkZHIpIF9fbGlua2VyX2luaXQodm9pZCogcmF3X2FyZ3MpIHsKKyAgLy8gSW5pdGlhbGl6ZSBzdGF0aWMgdmFyaWFibGVzLgorICBzb2xpc3QgPSBnZXRfbGliZGxfaW5mbygpOworICBzb25leHQgPSBnZXRfbGliZGxfaW5mbygpOworCiAgIEtlcm5lbEFyZ3VtZW50QmxvY2sgYXJncyhyYXdfYXJncyk7CiAKLSAgRWxmX0FkZHIgbGlua2VyX2FkZHIgPSBhcmdzLmdldGF1eHZhbChBVF9CQVNFKTsKLSAgRWxmX0VoZHIqIGVsZl9oZHIgPSByZWludGVycHJldF9jYXN0PEVsZl9FaGRyKj4obGlua2VyX2FkZHIpOwotICBFbGZfUGhkciogcGhkciA9IChFbGZfUGhkciopKCh1bnNpZ25lZCBjaGFyKikgbGlua2VyX2FkZHIgKyBlbGZfaGRyLT5lX3Bob2ZmKTsKKyAgRWxmVyhBZGRyKSBsaW5rZXJfYWRkciA9IGFyZ3MuZ2V0YXV4dmFsKEFUX0JBU0UpOworICBFbGZXKEFkZHIpIGVudHJ5X3BvaW50ID0gYXJncy5nZXRhdXh2YWwoQVRfRU5UUlkpOworICBFbGZXKEVoZHIpKiBlbGZfaGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKEVoZHIpKj4obGlua2VyX2FkZHIpOworICBFbGZXKFBoZHIpKiBwaGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFBoZHIpKj4obGlua2VyX2FkZHIgKyBlbGZfaGRyLT5lX3Bob2ZmKTsKIAogICBzb2luZm8gbGlua2VyX3NvOwogICBtZW1zZXQoJmxpbmtlcl9zbywgMCwgc2l6ZW9mKHNvaW5mbykpOwogCisgIC8vIElmIHRoZSBsaW5rZXIgaXMgbm90IGFjdGluZyBhcyBQVF9JTlRFUlAgZW50cnlfcG9pbnQgaXMgZXF1YWwgdG8KKyAgLy8gX3N0YXJ0LiBXaGljaCBtZWFucyB0aGF0IHRoZSBsaW5rZXIgaXMgcnVubmluZyBhcyBhbiBleGVjdXRhYmxlIGFuZAorICAvLyBhbHJlYWR5IGxpbmtlZCBieSBQVF9JTlRFUlAuCisgIC8vCisgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHVzZXIgdHJpZXMgdG8gcnVuICdhZGIgc2hlbGwgL3N5c3RlbS9iaW4vbGlua2VyJworICAvLyBzZWUgYWxzbyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD02MzE3NAorICBpZiAocmVpbnRlcnByZXRfY2FzdDxFbGZXKEFkZHIpPigmX3N0YXJ0KSA9PSBlbnRyeV9wb2ludCkgeworICAgIF9fbGliY19mYXRhbCgiVGhpcyBpcyAlcywgdGhlIGhlbHBlciBwcm9ncmFtIGZvciBzaGFyZWQgbGlicmFyeSBleGVjdXRhYmxlcy5cbiIsIGFyZ3MuYXJndlswXSk7CisgIH0KKwogICBzdHJjcHkobGlua2VyX3NvLm5hbWUsICJbZHluYW1pYyBsaW5rZXJdIik7CiAgIGxpbmtlcl9zby5iYXNlID0gbGlua2VyX2FkZHI7CiAgIGxpbmtlcl9zby5zaXplID0gcGhkcl90YWJsZV9nZXRfbG9hZF9zaXplKHBoZHIsIGVsZl9oZHItPmVfcGhudW0pOwpAQCAtMjIyNCw3ICsyMzIzLDcgQEAKICAgbGlua2VyX3NvLnBobnVtID0gZWxmX2hkci0+ZV9waG51bTsKICAgbGlua2VyX3NvLmZsYWdzIHw9IEZMQUdfTElOS0VSOwogCi0gIGlmICghc29pbmZvX2xpbmtfaW1hZ2UoJmxpbmtlcl9zbykpIHsKKyAgaWYgKCFzb2luZm9fbGlua19pbWFnZSgmbGlua2VyX3NvLCBOVUxMKSkgewogICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGlmIHRoZSBsaW5rZXIKICAgICAvLyBjYW4ndCBsaW5rIGl0c2VsZiwgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCB3ZSdsbCBiZSBhYmxlIHRvCiAgICAgLy8gY2FsbCB3cml0ZSgpIChiZWNhdXNlIGl0IGludm9sdmVzIGEgR09UIHJlZmVyZW5jZSkuIFdlIG1heSBhcwpAQCAtMjIzNiwxMiArMjMzNSwxNSBAQAogICAgIF9leGl0KEVYSVRfRkFJTFVSRSk7CiAgIH0KIAorICAvLyBJbml0aWFsaXplIHRoZSBsaW5rZXIncyBvd24gZ2xvYmFsIHZhcmlhYmxlcworICBsaW5rZXJfc28uQ2FsbENvbnN0cnVjdG9ycygpOworCiAgIC8vIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGZpeGVkIG91ciBvd24gcmVsb2NhdGlvbnMuIEl0J3Mgc2FmZSB0byBydW4KICAgLy8gdGhlIG1haW4gcGFydCBvZiB0aGUgbGlua2VyIG5vdy4KLSAgYXJncy5hYm9ydF9tZXNzYWdlX3B0ciA9ICZnQWJvcnRNZXNzYWdlOwotICBFbGZfQWRkciBzdGFydF9hZGRyZXNzID0gX19saW5rZXJfaW5pdF9wb3N0X3JlbG9jYXRpb24oYXJncywgbGlua2VyX2FkZHIpOworICBhcmdzLmFib3J0X21lc3NhZ2VfcHRyID0gJmdfYWJvcnRfbWVzc2FnZTsKKyAgRWxmVyhBZGRyKSBzdGFydF9hZGRyZXNzID0gX19saW5rZXJfaW5pdF9wb3N0X3JlbG9jYXRpb24oYXJncywgbGlua2VyX2FkZHIpOwogCi0gIHNldF9zb2luZm9fcG9vbF9wcm90ZWN0aW9uKFBST1RfUkVBRCk7CisgIHByb3RlY3RfZGF0YShQUk9UX1JFQUQpOwogCiAgIC8vIFJldHVybiB0aGUgYWRkcmVzcyB0aGF0IHRoZSBjYWxsaW5nIGFzc2VtYmx5IHN0dWIgc2hvdWxkIGp1bXAgdG8uCiAgIHJldHVybiBzdGFydF9hZGRyZXNzOwpkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlci5oIGIvbGlua2VyL2xpbmtlci5oCmluZGV4IDk3MjA1MGYuLjM3NDY1MmUgMTAwNjQ0Ci0tLSBhL2xpbmtlci9saW5rZXIuaAorKysgYi9saW5rZXIvbGlua2VyLmgKQEAgLTMyLDggKzMyLDExIEBACiAjaW5jbHVkZSA8ZWxmLmg+CiAjaW5jbHVkZSA8bGluay5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGFuZHJvaWQvZGxleHQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogCiAjaW5jbHVkZSAicHJpdmF0ZS9saWJjX2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJsaW5rZWRfbGlzdC5oIgogCiAjZGVmaW5lIERMX0VSUihmbXQsIHguLi4pIFwKICAgICBkbyB7IFwKQEAgLTUwLDYgKzUzLDI1IEBACiAgICAgICBfX2xpYmNfZm9ybWF0X2ZkKDIsICJcbiIpOyBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorI2RlZmluZSBFTEZXKHdoYXQpIEVMRjY0XyAjIyB3aGF0CisjZWxzZQorI2RlZmluZSBFTEZXKHdoYXQpIEVMRjMyXyAjIyB3aGF0CisjZW5kaWYKKworLy8gbWlwczY0IGludGVycHJldHMgRWxmNjRfUmVsIHN0cnVjdHVyZXMnIHJfaW5mbyBmaWVsZCBkaWZmZXJlbnRseS4KKy8vIGJpb25pYyAobGlrZSBvdGhlciBDIGxpYnJhcmllcykgaGFzIG1hY3JvcyB0aGF0IGFzc3VtZSByZWd1bGFyIEVMRiBmaWxlcywKKy8vIGJ1dCB0aGUgZHluYW1pYyBsaW5rZXIgbmVlZHMgdG8gYmUgYWJsZSB0byBsb2FkIG1pcHM2NCBFTEYgZmlsZXMuCisjaWYgZGVmaW5lZChfX21pcHNfXykgJiYgZGVmaW5lZChfX0xQNjRfXykKKyN1bmRlZiBFTEY2NF9SX1NZTQorI3VuZGVmIEVMRjY0X1JfVFlQRQorI3VuZGVmIEVMRjY0X1JfSU5GTworI2RlZmluZSBFTEY2NF9SX1NZTShpbmZvKSAgICgoKGluZm8pID4+IDApICYgMHhmZmZmZmZmZikKKyNkZWZpbmUgRUxGNjRfUl9TU1lNKGluZm8pICAoKChpbmZvKSA+PiAzMikgJiAweGZmKQorI2RlZmluZSBFTEY2NF9SX1RZUEUzKGluZm8pICgoKGluZm8pID4+IDQwKSAmIDB4ZmYpCisjZGVmaW5lIEVMRjY0X1JfVFlQRTIoaW5mbykgKCgoaW5mbykgPj4gNDgpICYgMHhmZikKKyNkZWZpbmUgRUxGNjRfUl9UWVBFKGluZm8pICAoKChpbmZvKSA+PiA1NikgJiAweGZmKQorI2VuZGlmCiAKIC8vIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBhZ2UgY29udGFpbmluZyBhZGRyZXNzICd4Jy4KICNkZWZpbmUgUEFHRV9TVEFSVCh4KSAgKCh4KSAmIFBBR0VfTUFTSykKQEAgLTYxLDU4ICs4Myw0NyBAQAogLy8gaXRzZWxmIGF0IHRoZSBzdGFydCBvZiBhIHBhZ2UuCiAjZGVmaW5lIFBBR0VfRU5EKHgpICAgIFBBR0VfU1RBUlQoKHgpICsgKFBBR0VfU0laRS0xKSkKIAotLy8gTWFnaWMgc2hhcmVkIHN0cnVjdHVyZXMgdGhhdCBHREIga25vd3MgYWJvdXQuCi0KLXN0cnVjdCBsaW5rX21hcF90IHsKLSAgdWludHB0cl90IGxfYWRkcjsKLSAgY2hhciogIGxfbmFtZTsKLSAgdWludHB0cl90IGxfbGQ7Ci0gIGxpbmtfbWFwX3QqIGxfbmV4dDsKLSAgbGlua19tYXBfdCogbF9wcmV2OwotfTsKLQotLy8gVmFsdWVzIGZvciByX2RlYnVnLT5zdGF0ZQotZW51bSB7Ci0gIFJUX0NPTlNJU1RFTlQsCi0gIFJUX0FERCwKLSAgUlRfREVMRVRFCi19OwotCi1zdHJ1Y3Qgcl9kZWJ1ZyB7Ci0gIGludDMyX3Qgcl92ZXJzaW9uOwotICBsaW5rX21hcF90KiByX21hcDsKLSAgdm9pZCAoKnJfYnJrKSh2b2lkKTsKLSAgaW50MzJfdCByX3N0YXRlOwotICB1aW50cHRyX3Qgcl9sZGJhc2U7Ci19OwotCiAjZGVmaW5lIEZMQUdfTElOS0VEICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIEZMQUdfRVhFICAgICAgICAweDAwMDAwMDA0IC8vIFRoZSBtYWluIGV4ZWN1dGFibGUKICNkZWZpbmUgRkxBR19MSU5LRVIgICAgIDB4MDAwMDAwMTAgLy8gVGhlIGxpbmtlciBpdHNlbGYKKyNkZWZpbmUgRkxBR19ORVdfU09JTkZPIDB4NDAwMDAwMDAgLy8gbmV3IHNvaW5mbyBmb3JtYXQKIAogI2RlZmluZSBTT0lORk9fTkFNRV9MRU4gMTI4CiAKIHR5cGVkZWYgdm9pZCAoKmxpbmtlcl9mdW5jdGlvbl90KSgpOwogCi0vLyBBbmRyb2lkIHVzZXMgUkVMIGZvciAzMi1iaXQgYnV0IG9ubHkgdXNlcyBSRUxBIGZvciA2NC1iaXQuCi0jaWYgZGVmaW5lZChfX0xQNjRfXykKKy8vIEFuZHJvaWQgdXNlcyBSRUxBIGZvciBhYXJjaDY0IGFuZCB4ODZfNjQuIG1pcHM2NCBzdGlsbCB1c2VzIFJFTC4KKyNpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCiAjZGVmaW5lIFVTRV9SRUxBIDEKICNlbmRpZgogCitzdHJ1Y3Qgc29pbmZvOworCitjbGFzcyBTb2luZm9MaXN0QWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgc3RhdGljIExpbmtlZExpc3RFbnRyeTxzb2luZm8+KiBhbGxvYygpOworICBzdGF0aWMgdm9pZCBmcmVlKExpbmtlZExpc3RFbnRyeTxzb2luZm8+KiBlbnRyeSk7Citwcml2YXRlOgorICAvLyB1bmNvbnN0cnVjdGFibGUKKyAgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFNvaW5mb0xpc3RBbGxvY2F0b3IpOworfTsKKwogc3RydWN0IHNvaW5mbyB7CiAgcHVibGljOgorICB0eXBlZGVmIExpbmtlZExpc3Q8c29pbmZvLCBTb2luZm9MaXN0QWxsb2NhdG9yPiBzb2luZm9fbGlzdF90OworIHB1YmxpYzoKICAgY2hhciBuYW1lW1NPSU5GT19OQU1FX0xFTl07Ci0gIGNvbnN0IEVsZl9QaGRyKiBwaGRyOworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyOwogICBzaXplX3QgcGhudW07Ci0gIEVsZl9BZGRyIGVudHJ5OwotICBFbGZfQWRkciBiYXNlOworICBFbGZXKEFkZHIpIGVudHJ5OworICBFbGZXKEFkZHIpIGJhc2U7CiAgIHNpemVfdCBzaXplOwogCiAjaWZuZGVmIF9fTFA2NF9fCiAgIHVpbnQzMl90IHVudXNlZDE7ICAvLyBETyBOT1QgVVNFLCBtYWludGFpbmVkIGZvciBjb21wYXRpYmlsaXR5LgogI2VuZGlmCiAKLSAgRWxmX0R5biogZHluYW1pYzsKKyAgRWxmVyhEeW4pKiBkeW5hbWljOwogCiAjaWZuZGVmIF9fTFA2NF9fCiAgIHVpbnQzMl90IHVudXNlZDI7IC8vIERPIE5PVCBVU0UsIG1haW50YWluZWQgZm9yIGNvbXBhdGliaWxpdHkKQEAgLTEyMywzMCArMTM0LDMwIEBACiAgIHVuc2lnbmVkIGZsYWdzOwogCiAgIGNvbnN0IGNoYXIqIHN0cnRhYjsKLSAgRWxmX1N5bSogc3ltdGFiOworICBFbGZXKFN5bSkqIHN5bXRhYjsKIAogICBzaXplX3QgbmJ1Y2tldDsKICAgc2l6ZV90IG5jaGFpbjsKICAgdW5zaWduZWQqIGJ1Y2tldDsKICAgdW5zaWduZWQqIGNoYWluOwogCi0jaWYgIWRlZmluZWQoX19MUDY0X18pCi0gIC8vIFRoaXMgaXMgb25seSB1c2VkIGJ5IDMyLWJpdCBNSVBTLCBidXQgbmVlZHMgdG8gYmUgaGVyZSBmb3IKKyNpZiBkZWZpbmVkKF9fbWlwc19fKSB8fCAhZGVmaW5lZChfX0xQNjRfXykKKyAgLy8gVGhpcyBpcyBvbmx5IHVzZWQgYnkgbWlwcyBhbmQgbWlwczY0LCBidXQgbmVlZHMgdG8gYmUgaGVyZSBmb3IKICAgLy8gYWxsIDMyLWJpdCBhcmNoaXRlY3R1cmVzIHRvIHByZXNlcnZlIGJpbmFyeSBjb21wYXRpYmlsaXR5LgotICB1bnNpZ25lZCogcGx0X2dvdDsKKyAgRWxmVyhBZGRyKSoqIHBsdF9nb3Q7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoVVNFX1JFTEEpCi0gIEVsZl9SZWxhKiBwbHRfcmVsYTsKKyAgRWxmVyhSZWxhKSogcGx0X3JlbGE7CiAgIHNpemVfdCBwbHRfcmVsYV9jb3VudDsKIAotICBFbGZfUmVsYSogcmVsYTsKKyAgRWxmVyhSZWxhKSogcmVsYTsKICAgc2l6ZV90IHJlbGFfY291bnQ7CiAjZWxzZQotICBFbGZfUmVsKiBwbHRfcmVsOworICBFbGZXKFJlbCkqIHBsdF9yZWw7CiAgIHNpemVfdCBwbHRfcmVsX2NvdW50OwogCi0gIEVsZl9SZWwqIHJlbDsKKyAgRWxmVyhSZWwpKiByZWw7CiAgIHNpemVfdCByZWxfY291bnQ7CiAjZW5kaWYKIApAQCAtMTcyLDQzICsxODMsNjUgQEAKICNlbmRpZgogCiAgIHNpemVfdCByZWZfY291bnQ7Ci0gIGxpbmtfbWFwX3QgbGlua19tYXA7CisgIGxpbmtfbWFwIGxpbmtfbWFwX2hlYWQ7CiAKICAgYm9vbCBjb25zdHJ1Y3RvcnNfY2FsbGVkOwogCiAgIC8vIFdoZW4geW91IHJlYWQgYSB2aXJ0dWFsIGFkZHJlc3MgZnJvbSB0aGUgRUxGIGZpbGUsIGFkZCB0aGlzCiAgIC8vIHZhbHVlIHRvIGdldCB0aGUgY29ycmVzcG9uZGluZyBhZGRyZXNzIGluIHRoZSBwcm9jZXNzJyBhZGRyZXNzIHNwYWNlLgotICBFbGZfQWRkciBsb2FkX2JpYXM7CisgIEVsZlcoQWRkcikgbG9hZF9iaWFzOwogCiAjaWYgIWRlZmluZWQoX19MUDY0X18pCiAgIGJvb2wgaGFzX3RleHRfcmVsb2NhdGlvbnM7CiAjZW5kaWYKICAgYm9vbCBoYXNfRFRfU1lNQk9MSUM7Ci0KICAgdm9pZCBDYWxsQ29uc3RydWN0b3JzKCk7CiAgIHZvaWQgQ2FsbERlc3RydWN0b3JzKCk7CiAgIHZvaWQgQ2FsbFByZUluaXRDb25zdHJ1Y3RvcnMoKTsKIAorICB2b2lkIGFkZF9jaGlsZChzb2luZm8qIGNoaWxkKTsKKyAgdm9pZCByZW1vdmVfYWxsX2xpbmtzKCk7CisKKyAgdm9pZCBzZXRfc3RfZGV2KGRldl90IHN0X2Rldik7CisgIHZvaWQgc2V0X3N0X2lubyhpbm9fdCBzdF9pbm8pOworICBpbm9fdCBnZXRfc3RfaW5vKCk7CisgIGRldl90IGdldF9zdF9kZXYoKTsKKworICBzb2luZm9fbGlzdF90JiBnZXRfY2hpbGRyZW4oKTsKKwogIHByaXZhdGU6CiAgIHZvaWQgQ2FsbEFycmF5KGNvbnN0IGNoYXIqIGFycmF5X25hbWUsIGxpbmtlcl9mdW5jdGlvbl90KiBmdW5jdGlvbnMsIHNpemVfdCBjb3VudCwgYm9vbCByZXZlcnNlKTsKICAgdm9pZCBDYWxsRnVuY3Rpb24oY29uc3QgY2hhciogZnVuY3Rpb25fbmFtZSwgbGlua2VyX2Z1bmN0aW9uX3QgZnVuY3Rpb24pOworCisgcHJpdmF0ZToKKyAgLy8gVGhpcyBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUgaXMgb25seSBhdmFpbGFibGUKKyAgLy8gd2hlbiBGTEFHX05FV19TT0lORk8gaXMgc2V0IGluIHRoaXMtPmZsYWdzLgorICB1bnNpZ25lZCBpbnQgdmVyc2lvbjsKKworICBkZXZfdCBzdF9kZXY7CisgIGlub190IHN0X2lubzsKKworICAvLyBkZXBlbmRlbmN5IGdyYXBoCisgIHNvaW5mb19saXN0X3QgY2hpbGRyZW47CisgIHNvaW5mb19saXN0X3QgcGFyZW50czsKKwogfTsKIAotZXh0ZXJuIHNvaW5mbyBsaWJkbF9pbmZvOworZXh0ZXJuIHNvaW5mbyogZ2V0X2xpYmRsX2luZm8oKTsKIAogdm9pZCBkb19hbmRyb2lkX2dldF9MRF9MSUJSQVJZX1BBVEgoY2hhciosIHNpemVfdCk7CiB2b2lkIGRvX2FuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSChjb25zdCBjaGFyKiBsZF9saWJyYXJ5X3BhdGgpOwotc29pbmZvKiBkb19kbG9wZW4oY29uc3QgY2hhciogbmFtZSwgaW50IGZsYWdzKTsKLWludCBkb19kbGNsb3NlKHNvaW5mbyogc2kpOworc29pbmZvKiBkb19kbG9wZW4oY29uc3QgY2hhciogbmFtZSwgaW50IGZsYWdzLCBjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbyk7Cit2b2lkIGRvX2RsY2xvc2Uoc29pbmZvKiBzaSk7CiAKLUVsZl9TeW0qIGRsc3ltX2xpbmVhcl9sb29rdXAoY29uc3QgY2hhciogbmFtZSwgc29pbmZvKiogZm91bmQsIHNvaW5mbyogc3RhcnQpOworRWxmVyhTeW0pKiBkbHN5bV9saW5lYXJfbG9va3VwKGNvbnN0IGNoYXIqIG5hbWUsIHNvaW5mbyoqIGZvdW5kLCBzb2luZm8qIHN0YXJ0KTsKIHNvaW5mbyogZmluZF9jb250YWluaW5nX2xpYnJhcnkoY29uc3Qgdm9pZCogYWRkcik7CiAKLUVsZl9TeW0qIGRsYWRkcl9maW5kX3N5bWJvbChzb2luZm8qIHNpLCBjb25zdCB2b2lkKiBhZGRyKTsKLUVsZl9TeW0qIGRsc3ltX2hhbmRsZV9sb29rdXAoc29pbmZvKiBzaSwgY29uc3QgY2hhciogbmFtZSk7CitFbGZXKFN5bSkqIGRsYWRkcl9maW5kX3N5bWJvbChzb2luZm8qIHNpLCBjb25zdCB2b2lkKiBhZGRyKTsKK0VsZlcoU3ltKSogZGxzeW1faGFuZGxlX2xvb2t1cChzb2luZm8qIHNpLCBzb2luZm8qKiBmb3VuZCwgY29uc3QgY2hhciogbmFtZSk7CiAKIHZvaWQgZGVidWdnZXJkX2luaXQoKTsKLWV4dGVybiAiQyIgYWJvcnRfbXNnX3QqIGdBYm9ydE1lc3NhZ2U7CitleHRlcm4gIkMiIGFib3J0X21zZ190KiBnX2Fib3J0X21lc3NhZ2U7CiBleHRlcm4gIkMiIHZvaWQgbm90aWZ5X2dkYl9vZl9saWJyYXJpZXMoKTsKIAogY2hhciogbGlua2VyX2dldF9lcnJvcl9idWZmZXIoKTsKZGlmZiAtLWdpdCBhL2xpbmtlci9saW5rZXJfYWxsb2NhdG9yLmNwcCBiL2xpbmtlci9saW5rZXJfYWxsb2NhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjIyMGU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlua2VyL2xpbmtlcl9hbGxvY2F0b3IuY3BwCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlICJsaW5rZXJfYWxsb2NhdG9yLmgiCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfcHJjdGwuaCIKKworc3RydWN0IExpbmtlckFsbG9jYXRvclBhZ2UgeworICBMaW5rZXJBbGxvY2F0b3JQYWdlKiBuZXh0OworICB1aW50OF90IGJ5dGVzW1BBR0VfU0laRS1zaXplb2YoTGlua2VyQWxsb2NhdG9yUGFnZSopXTsKK307CisKK3N0cnVjdCBGcmVlQmxvY2tJbmZvIHsKKyAgdm9pZCogbmV4dF9ibG9jazsKKyAgc2l6ZV90IG51bV9mcmVlX2Jsb2NrczsKK307CisKK0xpbmtlckJsb2NrQWxsb2NhdG9yOjpMaW5rZXJCbG9ja0FsbG9jYXRvcihzaXplX3QgYmxvY2tfc2l6ZSkKKyAgOiBibG9ja19zaXplXyhibG9ja19zaXplIDwgc2l6ZW9mKEZyZWVCbG9ja0luZm8pID8gc2l6ZW9mKEZyZWVCbG9ja0luZm8pIDogYmxvY2tfc2l6ZSksCisgICAgcGFnZV9saXN0XyhudWxscHRyKSwKKyAgICBmcmVlX2Jsb2NrX2xpc3RfKG51bGxwdHIpCit7fQorCit2b2lkKiBMaW5rZXJCbG9ja0FsbG9jYXRvcjo6YWxsb2MoKSB7CisgIGlmIChmcmVlX2Jsb2NrX2xpc3RfID09IG51bGxwdHIpIHsKKyAgICBjcmVhdGVfbmV3X3BhZ2UoKTsKKyAgfQorCisgIEZyZWVCbG9ja0luZm8qIGJsb2NrX2luZm8gPSByZWludGVycHJldF9jYXN0PEZyZWVCbG9ja0luZm8qPihmcmVlX2Jsb2NrX2xpc3RfKTsKKyAgaWYgKGJsb2NrX2luZm8tPm51bV9mcmVlX2Jsb2NrcyA+IDEpIHsKKyAgICBGcmVlQmxvY2tJbmZvKiBuZXh0X2Jsb2NrX2luZm8gPSByZWludGVycHJldF9jYXN0PEZyZWVCbG9ja0luZm8qPigKKyAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGZyZWVfYmxvY2tfbGlzdF8pICsgYmxvY2tfc2l6ZV8pOworICAgIG5leHRfYmxvY2tfaW5mby0+bmV4dF9ibG9jayA9IGJsb2NrX2luZm8tPm5leHRfYmxvY2s7CisgICAgbmV4dF9ibG9ja19pbmZvLT5udW1fZnJlZV9ibG9ja3MgPSBibG9ja19pbmZvLT5udW1fZnJlZV9ibG9ja3MgLSAxOworICAgIGZyZWVfYmxvY2tfbGlzdF8gPSBuZXh0X2Jsb2NrX2luZm87CisgIH0gZWxzZSB7CisgICAgZnJlZV9ibG9ja19saXN0XyA9IGJsb2NrX2luZm8tPm5leHRfYmxvY2s7CisgIH0KKworICBtZW1zZXQoYmxvY2tfaW5mbywgMCwgYmxvY2tfc2l6ZV8pOworCisgIHJldHVybiBibG9ja19pbmZvOworfQorCit2b2lkIExpbmtlckJsb2NrQWxsb2NhdG9yOjpmcmVlKHZvaWQqIGJsb2NrKSB7CisgIGlmIChibG9jayA9PSBudWxscHRyKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgTGlua2VyQWxsb2NhdG9yUGFnZSogcGFnZSA9IGZpbmRfcGFnZShibG9jayk7CisKKyAgaWYgKHBhZ2UgPT0gbnVsbHB0cikgeworICAgIGFib3J0KCk7CisgIH0KKworICBzc2l6ZV90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJsb2NrKSAtIHBhZ2UtPmJ5dGVzOworCisgIGlmIChvZmZzZXQgJSBibG9ja19zaXplXyAhPSAwKSB7CisgICAgYWJvcnQoKTsKKyAgfQorCisgIG1lbXNldChibG9jaywgMCwgYmxvY2tfc2l6ZV8pOworCisgIEZyZWVCbG9ja0luZm8qIGJsb2NrX2luZm8gPSByZWludGVycHJldF9jYXN0PEZyZWVCbG9ja0luZm8qPihibG9jayk7CisKKyAgYmxvY2tfaW5mby0+bmV4dF9ibG9jayA9IGZyZWVfYmxvY2tfbGlzdF87CisgIGJsb2NrX2luZm8tPm51bV9mcmVlX2Jsb2NrcyA9IDE7CisKKyAgZnJlZV9ibG9ja19saXN0XyA9IGJsb2NrX2luZm87Cit9CisKK3ZvaWQgTGlua2VyQmxvY2tBbGxvY2F0b3I6OnByb3RlY3RfYWxsKGludCBwcm90KSB7CisgIGZvciAoTGlua2VyQWxsb2NhdG9yUGFnZSogcGFnZSA9IHBhZ2VfbGlzdF87IHBhZ2UgIT0gbnVsbHB0cjsgcGFnZSA9IHBhZ2UtPm5leHQpIHsKKyAgICBpZiAobXByb3RlY3QocGFnZSwgUEFHRV9TSVpFLCBwcm90KSA9PSAtMSkgeworICAgICAgYWJvcnQoKTsKKyAgICB9CisgIH0KK30KKwordm9pZCBMaW5rZXJCbG9ja0FsbG9jYXRvcjo6Y3JlYXRlX25ld19wYWdlKCkgeworICBMaW5rZXJBbGxvY2F0b3JQYWdlKiBwYWdlID0gcmVpbnRlcnByZXRfY2FzdDxMaW5rZXJBbGxvY2F0b3JQYWdlKj4obW1hcChudWxscHRyLCBQQUdFX1NJWkUsCisgICAgICBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgMCwgMCkpOworICBpZiAocGFnZSA9PSBNQVBfRkFJTEVEKSB7CisgICAgYWJvcnQoKTsgLy8gb29tCisgIH0KKworICBwcmN0bChQUl9TRVRfVk1BLCBQUl9TRVRfVk1BX0FOT05fTkFNRSwgcGFnZSwgUEFHRV9TSVpFLCAibGlua2VyX2FsbG9jIik7CisKKyAgbWVtc2V0KHBhZ2UsIDAsIFBBR0VfU0laRSk7CisKKyAgRnJlZUJsb2NrSW5mbyogZmlyc3RfYmxvY2sgPSByZWludGVycHJldF9jYXN0PEZyZWVCbG9ja0luZm8qPihwYWdlLT5ieXRlcyk7CisgIGZpcnN0X2Jsb2NrLT5uZXh0X2Jsb2NrID0gZnJlZV9ibG9ja19saXN0XzsKKyAgZmlyc3RfYmxvY2stPm51bV9mcmVlX2Jsb2NrcyA9IChQQUdFX1NJWkUgLSBzaXplb2YoTGlua2VyQWxsb2NhdG9yUGFnZSopKS9ibG9ja19zaXplXzsKKworICBmcmVlX2Jsb2NrX2xpc3RfID0gZmlyc3RfYmxvY2s7CisKKyAgcGFnZS0+bmV4dCA9IHBhZ2VfbGlzdF87CisgIHBhZ2VfbGlzdF8gPSBwYWdlOworfQorCitMaW5rZXJBbGxvY2F0b3JQYWdlKiBMaW5rZXJCbG9ja0FsbG9jYXRvcjo6ZmluZF9wYWdlKHZvaWQqIGJsb2NrKSB7CisgIGlmIChibG9jayA9PSBudWxscHRyKSB7CisgICAgYWJvcnQoKTsKKyAgfQorCisgIExpbmtlckFsbG9jYXRvclBhZ2UqIHBhZ2UgPSBwYWdlX2xpc3RfOworICB3aGlsZSAocGFnZSAhPSBudWxscHRyKSB7CisgICAgY29uc3QgdWludDhfdCogcGFnZV9wdHIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwYWdlKTsKKyAgICBpZiAoYmxvY2sgPj0gKHBhZ2VfcHRyICsgc2l6ZW9mKHBhZ2UtPm5leHQpKSAmJiBibG9jayA8IChwYWdlX3B0ciArIFBBR0VfU0laRSkpIHsKKyAgICAgIHJldHVybiBwYWdlOworICAgIH0KKworICAgIHBhZ2UgPSBwYWdlLT5uZXh0OworICB9CisKKyAgYWJvcnQoKTsKK30KZGlmZiAtLWdpdCBhL2xpbmtlci9saW5rZXJfYWxsb2NhdG9yLmggYi9saW5rZXIvbGlua2VyX2FsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzU2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rZXIvbGlua2VyX2FsbG9jYXRvci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9fTElOS0VSX0FMTE9DQVRPUl9ICisjZGVmaW5lIF9fTElOS0VSX0FMTE9DQVRPUl9ICisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19tYWNyb3MuaCIKKworc3RydWN0IExpbmtlckFsbG9jYXRvclBhZ2U7CisKKy8qCisgKiBUaGlzIGNsYXNzIGlzIGEgbm9uLXRlbXBsYXRlIHZlcnNpb24gb2YgdGhlIExpbmtlckFsbG9jYXRvcgorICogSXQga2VlcHMgY29kZSBpbnNpZGUgLmNwcCBmaWxlIGJ5IGtlZXBpbmcgdGhlIGludGVyZmFjZQorICogdGVtcGxhdGUtZnJlZS4KKyAqCisgKiBQbGVhc2UgdXNlIExpbmtlckFsbG9jYXRvcjx0eXBlPiB3aGVyZSBwb3NzaWJsZSAoZXZlcnl3aGVyZSkuCisgKi8KK2NsYXNzIExpbmtlckJsb2NrQWxsb2NhdG9yIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IExpbmtlckJsb2NrQWxsb2NhdG9yKHNpemVfdCBibG9ja19zaXplKTsKKworICB2b2lkKiBhbGxvYygpOworICB2b2lkIGZyZWUodm9pZCogYmxvY2spOworICB2b2lkIHByb3RlY3RfYWxsKGludCBwcm90KTsKKworIHByaXZhdGU6CisgIHZvaWQgY3JlYXRlX25ld19wYWdlKCk7CisgIExpbmtlckFsbG9jYXRvclBhZ2UqIGZpbmRfcGFnZSh2b2lkKiBibG9jayk7CisKKyAgc2l6ZV90IGJsb2NrX3NpemVfOworICBMaW5rZXJBbGxvY2F0b3JQYWdlKiBwYWdlX2xpc3RfOworICB2b2lkKiBmcmVlX2Jsb2NrX2xpc3RfOworCisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihMaW5rZXJCbG9ja0FsbG9jYXRvcik7Cit9OworCisvKgorICogV2UgY2FuJ3QgdXNlIG1hbGxvYygzKSBpbiB0aGUgZHluYW1pYyBsaW5rZXIuCisgKgorICogQSBzaW1wbGUgYWxsb2NhdG9yIGZvciB0aGUgZHluYW1pYyBsaW5rZXIuIEFuIGFsbG9jYXRvciBhbGxvY2F0ZXMgaW5zdGFuY2VzCisgKiBvZiBhIHNpbmdsZSBmaXhlZC1zaXplIHR5cGUuIEFsbG9jYXRpb25zIGFyZSBiYWNrZWQgYnkgcGFnZS1zaXplZCBwcml2YXRlCisgKiBhbm9ueW1vdXMgbW1hcHMuCisgKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBMaW5rZXJBbGxvY2F0b3IgeworIHB1YmxpYzoKKyAgTGlua2VyQWxsb2NhdG9yKCkgOiBibG9ja19hbGxvY2F0b3JfKHNpemVvZihUKSkge30KKyAgVCogYWxsb2MoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihibG9ja19hbGxvY2F0b3JfLmFsbG9jKCkpOyB9CisgIHZvaWQgZnJlZShUKiB0KSB7IGJsb2NrX2FsbG9jYXRvcl8uZnJlZSh0KTsgfQorICB2b2lkIHByb3RlY3RfYWxsKGludCBwcm90KSB7IGJsb2NrX2FsbG9jYXRvcl8ucHJvdGVjdF9hbGwocHJvdCk7IH0KKyBwcml2YXRlOgorICBMaW5rZXJCbG9ja0FsbG9jYXRvciBibG9ja19hbGxvY2F0b3JfOworICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oTGlua2VyQWxsb2NhdG9yKTsKK307CisjZW5kaWYgLy8gX19MSU5LRVJfQUxMT0NBVE9SX0gKZGlmZiAtLWdpdCBhL2xpbmtlci9saW5rZXJfZGVidWcuaCBiL2xpbmtlci9saW5rZXJfZGVidWcuaAppbmRleCAyYmY2Y2VjLi4zZmFhMzhlIDEwMDY0NAotLS0gYS9saW5rZXIvbGlua2VyX2RlYnVnLmgKKysrIGIvbGlua2VyL2xpbmtlcl9kZWJ1Zy5oCkBAIC01NSwxNyArNTUsMTcgQEAKIAogI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCiAKLV9fTElCQ19ISURERU5fXyBleHRlcm4gaW50IGdMZERlYnVnVmVyYm9zaXR5OworX19MSUJDX0hJRERFTl9fIGV4dGVybiBpbnQgZ19sZF9kZWJ1Z192ZXJib3NpdHk7CiAKICNpZiBMSU5LRVJfREVCVUdfVE9fTE9HCi0jZGVmaW5lIF9QUklOVFZGKHYseC4uLikgXAorI2RlZmluZSBfUFJJTlRWRih2LCB4Li4uKSBcCiAgICAgZG8geyBcCi0gICAgICBpZiAoZ0xkRGVidWdWZXJib3NpdHkgPiAodikpIF9fbGliY19mb3JtYXRfbG9nKDUtKHYpLCJsaW5rZXIiLHgpOyBcCisgICAgICBpZiAoZ19sZF9kZWJ1Z192ZXJib3NpdHkgPiAodikpIF9fbGliY19mb3JtYXRfbG9nKDUtKHYpLCAibGlua2VyIiwgeCk7IFwKICAgICB9IHdoaWxlICgwKQogI2Vsc2UgLyogIUxJTktFUl9ERUJVR19UT19MT0cgKi8KLSNkZWZpbmUgX1BSSU5UVkYodix4Li4uKSBcCisjZGVmaW5lIF9QUklOVFZGKHYsIHguLi4pIFwKICAgICBkbyB7IFwKLSAgICAgIGlmIChnTGREZWJ1Z1ZlcmJvc2l0eSA+ICh2KSkgeyBfX2xpYmNfZm9ybWF0X2ZkKDEsIHgpOyB3cml0ZSgxLCAiXG4iLCAxKTsgfSBcCisgICAgICBpZiAoZ19sZF9kZWJ1Z192ZXJib3NpdHkgPiAodikpIHsgX19saWJjX2Zvcm1hdF9mZCgxLCB4KTsgd3JpdGUoMSwgIlxuIiwgMSk7IH0gXAogICAgIH0gd2hpbGUgKDApCiAjZW5kaWYgLyogIUxJTktFUl9ERUJVR19UT19MT0cgKi8KIApAQCAtNzksNiArNzksNiBAQAogI2RlZmluZSBERUJVRyh4Li4uKSAgICAgICAgICBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZiAvKiBUUkFDRV9ERUJVRyAqLwogCi0jZGVmaW5lIFRSQUNFX1RZUEUodCx4Li4uKSAgIGRvIHsgaWYgKERPX1RSQUNFXyMjdCkgeyBUUkFDRSh4KTsgfSB9IHdoaWxlICgwKQorI2RlZmluZSBUUkFDRV9UWVBFKHQsIHguLi4pICAgZG8geyBpZiAoRE9fVFJBQ0VfIyN0KSB7IFRSQUNFKHgpOyB9IH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBfTElOS0VSX0RFQlVHX0hfICovCmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VyX2V4ZWN1dGFibGUubWsgYi9saW5rZXIvbGlua2VyX2V4ZWN1dGFibGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwMmEwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpbmtlci9saW5rZXJfZXhlY3V0YWJsZS5tawpAQCAtMCwwICsxLDI2IEBACisKKyMKKyMgSW5zdGVhZCBvZiBpbmNsdWRpbmcgJChCVUlMRF9FWEVDVVRBQkxFKSwgd2UgZXhlY3V0ZSB0aGUgc3RlcHMgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgYnkKKyMgaGFuZCwgYXMgd2Ugd2FudCB0byBpbnNlcnQgYW4gZXh0cmEgb2JqY29weSBzdGVwIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYnVpbGQKKyMgc3lzdGVtLCBhbmQgaXMgcHJvYmFibHkgc3BlY2lmaWMgdGhlIGxpbmtlciBvbmx5LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gbW9kaWZ5IHRoZSBidWlsZAorIyBzeXN0ZW0gZm9yIHRoZSBwdXJwb3NlLgorIworCitMT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVhFQ1VUQUJMRVMKK0xPQ0FMX01PRFVMRV9TVUZGSVggOj0gJChUQVJHRVRfRVhFQ1VUQUJMRV9TVUZGSVgpCisKK2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL2R5bmFtaWNfYmluYXJ5Lm1rCisKKyMgU2VlIGJ1aWxkL2NvcmUvZXhlY3V0YWJsZV9pbnRlcm5hbC5taworJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfR0xPQkFMX0xEX0RJUlMgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX0dMT0JBTF9MRF9ESVJTKQorJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfR0xPQkFMX0xERkxBR1MgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX0dMT0JBTF9MREZMQUdTKQorJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfRkRPX0xJQiA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfRkRPX0xJQikKKyQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0xJQkdDQyA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfTElCR0NDKQorJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfQ1JUQkVHSU5fRFlOQU1JQ19PIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9DUlRCRUdJTl9EWU5BTUlDX08pCiskKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9DUlRCRUdJTl9TVEFUSUNfTyA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfQ1JUQkVHSU5fU1RBVElDX08pCiskKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9DUlRFTkRfTyA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfQ1JURU5EX08pCiskKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9PQkpDT1BZIDo9ICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9PQkpDT1BZKQorJChsaW5rZWRfbW9kdWxlKTogJChUQVJHRVRfQ1JUQkVHSU5fU1RBVElDX08pICQoYWxsX29iamVjdHMpICQoYWxsX2xpYnJhcmllcykgJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpVEFSR0VUX0NSVEVORF9PKQorCSQodHJhbnNmb3JtLW8tdG8tc3RhdGljLWV4ZWN1dGFibGUpCisJQGVjaG8gInRhcmdldCBQcmVmaXhTeW1ib2xzOiAkKFBSSVZBVEVfTU9EVUxFKSAoJEApIgorCSQoaGlkZSkgJChQUklWQVRFX1RBUkdFVF9PQkpDT1BZKSAtLXByZWZpeC1zeW1ib2xzPV9fZGxfICRACmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VyX3BoZHIuY3BwIGIvbGlua2VyL2xpbmtlcl9waGRyLmNwcAppbmRleCAzMTAxNTExLi4wYjk5ZDIwIDEwMDY0NAotLS0gYS9saW5rZXIvbGlua2VyX3BoZHIuY3BwCisrKyBiL2xpbmtlci9saW5rZXJfcGhkci5jcHAKQEAgLTMxLDYgKzMxLDkgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPG1hY2hpbmUvZXhlYy5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2luY2x1ZGUgImxpbmtlci5oIgogI2luY2x1ZGUgImxpbmtlcl9kZWJ1Zy5oIgpAQCAtNTAsNyArNTMsNyBAQAogICAgIHBfdmFkZHIgICAtPiBzZWdtZW50J3MgdmlydHVhbCBhZGRyZXNzCiAgICAgcF9mbGFncyAgIC0+IHNlZ21lbnQgZmxhZ3MgKGUuZy4gcmVhZGFibGUsIHdyaXRhYmxlLCBleGVjdXRhYmxlKQogCi0gIFdlIHdpbGwgaWdub3JlIHRoZSBwX3BhZGRyIGFuZCBwX2FsaWduIGZpZWxkcyBvZiBFbGZfUGhkciBmb3Igbm93LgorICBXZSB3aWxsIGlnbm9yZSB0aGUgcF9wYWRkciBhbmQgcF9hbGlnbiBmaWVsZHMgb2YgRWxmVyhQaGRyKSBmb3Igbm93LgogCiAgIFRoZSBsb2FkYWJsZSBzZWdtZW50cyBjYW4gYmUgc2VlbiBhcyBhIGxpc3Qgb2YgW3BfdmFkZHIgLi4uIHBfdmFkZHIrcF9tZW1zeikKICAgcmFuZ2VzIG9mIHZpcnR1YWwgYWRkcmVzc2VzLiBBIGZldyBydWxlcyBhcHBseToKQEAgLTExMSw3ICsxMTQsNyBAQAogCiAgKiovCiAKLSNkZWZpbmUgTUFZQkVfTUFQX0ZMQUcoeCxmcm9tLHRvKSAgICAoKCh4KSAmIChmcm9tKSkgPyAodG8pIDogMCkKKyNkZWZpbmUgTUFZQkVfTUFQX0ZMQUcoeCwgZnJvbSwgdG8pICAoKCh4KSAmIChmcm9tKSkgPyAodG8pIDogMCkKICNkZWZpbmUgUEZMQUdTX1RPX1BST1QoeCkgICAgICAgICAgICAoTUFZQkVfTUFQX0ZMQUcoKHgpLCBQRl9YLCBQUk9UX0VYRUMpIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVlCRV9NQVBfRkxBRygoeCksIFBGX1IsIFBST1RfUkVBRCkgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWUJFX01BUF9GTEFHKCh4KSwgUEZfVywgUFJPVF9XUklURSkpCkBAIC0xMjQsMTkgKzEyNywxNiBAQAogfQogCiBFbGZSZWFkZXI6On5FbGZSZWFkZXIoKSB7Ci0gIGlmIChmZF8gIT0gLTEpIHsKLSAgICBjbG9zZShmZF8pOwotICB9CiAgIGlmIChwaGRyX21tYXBfICE9IE5VTEwpIHsKICAgICBtdW5tYXAocGhkcl9tbWFwXywgcGhkcl9zaXplXyk7CiAgIH0KIH0KIAotYm9vbCBFbGZSZWFkZXI6OkxvYWQoKSB7Citib29sIEVsZlJlYWRlcjo6TG9hZChjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbykgewogICByZXR1cm4gUmVhZEVsZkhlYWRlcigpICYmCiAgICAgICAgICBWZXJpZnlFbGZIZWFkZXIoKSAmJgogICAgICAgICAgUmVhZFByb2dyYW1IZWFkZXIoKSAmJgotICAgICAgICAgUmVzZXJ2ZUFkZHJlc3NTcGFjZSgpICYmCisgICAgICAgICBSZXNlcnZlQWRkcmVzc1NwYWNlKGV4dGluZm8pICYmCiAgICAgICAgICBMb2FkU2VnbWVudHMoKSAmJgogICAgICAgICAgRmluZFBoZHIoKTsKIH0KQEAgLTE1NiwxMCArMTU2LDcgQEAKIH0KIAogYm9vbCBFbGZSZWFkZXI6OlZlcmlmeUVsZkhlYWRlcigpIHsKLSAgaWYgKGhlYWRlcl8uZV9pZGVudFtFSV9NQUcwXSAhPSBFTEZNQUcwIHx8Ci0gICAgICBoZWFkZXJfLmVfaWRlbnRbRUlfTUFHMV0gIT0gRUxGTUFHMSB8fAotICAgICAgaGVhZGVyXy5lX2lkZW50W0VJX01BRzJdICE9IEVMRk1BRzIgfHwKLSAgICAgIGhlYWRlcl8uZV9pZGVudFtFSV9NQUczXSAhPSBFTEZNQUczKSB7CisgIGlmIChtZW1jbXAoaGVhZGVyXy5lX2lkZW50LCBFTEZNQUcsIFNFTEZNQUcpICE9IDApIHsKICAgICBETF9FUlIoIlwiJXNcIiBoYXMgYmFkIEVMRiBtYWdpYyIsIG5hbWVfKTsKICAgICByZXR1cm4gZmFsc2U7CiAgIH0KQEAgLTIxNywxNCArMjE0LDE0IEBACiAKICAgLy8gTGlrZSB0aGUga2VybmVsLCB3ZSBvbmx5IGFjY2VwdCBwcm9ncmFtIGhlYWRlciB0YWJsZXMgdGhhdAogICAvLyBhcmUgc21hbGxlciB0aGFuIDY0S2lCLgotICBpZiAocGhkcl9udW1fIDwgMSB8fCBwaGRyX251bV8gPiA2NTUzNi9zaXplb2YoRWxmX1BoZHIpKSB7CisgIGlmIChwaGRyX251bV8gPCAxIHx8IHBoZHJfbnVtXyA+IDY1NTM2L3NpemVvZihFbGZXKFBoZHIpKSkgewogICAgIERMX0VSUigiXCIlc1wiIGhhcyBpbnZhbGlkIGVfcGhudW06ICV6ZCIsIG5hbWVfLCBwaGRyX251bV8pOwogICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gIEVsZl9BZGRyIHBhZ2VfbWluID0gUEFHRV9TVEFSVChoZWFkZXJfLmVfcGhvZmYpOwotICBFbGZfQWRkciBwYWdlX21heCA9IFBBR0VfRU5EKGhlYWRlcl8uZV9waG9mZiArIChwaGRyX251bV8gKiBzaXplb2YoRWxmX1BoZHIpKSk7Ci0gIEVsZl9BZGRyIHBhZ2Vfb2Zmc2V0ID0gUEFHRV9PRkZTRVQoaGVhZGVyXy5lX3Bob2ZmKTsKKyAgRWxmVyhBZGRyKSBwYWdlX21pbiA9IFBBR0VfU1RBUlQoaGVhZGVyXy5lX3Bob2ZmKTsKKyAgRWxmVyhBZGRyKSBwYWdlX21heCA9IFBBR0VfRU5EKGhlYWRlcl8uZV9waG9mZiArIChwaGRyX251bV8gKiBzaXplb2YoRWxmVyhQaGRyKSkpKTsKKyAgRWxmVyhBZGRyKSBwYWdlX29mZnNldCA9IFBBR0VfT0ZGU0VUKGhlYWRlcl8uZV9waG9mZik7CiAKICAgcGhkcl9zaXplXyA9IHBhZ2VfbWF4IC0gcGFnZV9taW47CiAKQEAgLTIzNSw3ICsyMzIsNyBAQAogICB9CiAKICAgcGhkcl9tbWFwXyA9IG1tYXBfcmVzdWx0OwotICBwaGRyX3RhYmxlXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmX1BoZHIqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihtbWFwX3Jlc3VsdCkgKyBwYWdlX29mZnNldCk7CisgIHBoZHJfdGFibGVfID0gcmVpbnRlcnByZXRfY2FzdDxFbGZXKFBoZHIpKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obW1hcF9yZXN1bHQpICsgcGFnZV9vZmZzZXQpOwogICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjQ5LDUwICsyNDYsNTAgQEAKICAqIHNldCB0byB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhZGRyZXNzZXMgb2YgcGFnZXMgdG8gYmUgcmVzZXJ2ZWQsCiAgKiBvciAwIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gbG9hZC4KICAqLwotc2l6ZV90IHBoZHJfdGFibGVfZ2V0X2xvYWRfc2l6ZShjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9BZGRyKiBvdXRfbWluX3ZhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfQWRkciogb3V0X21heF92YWRkcikgewotICAgIEVsZl9BZGRyIG1pbl92YWRkciA9IFVJTlRQVFJfTUFYOwotICAgIEVsZl9BZGRyIG1heF92YWRkciA9IDA7CitzaXplX3QgcGhkcl90YWJsZV9nZXRfbG9hZF9zaXplKGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZXKEFkZHIpKiBvdXRfbWluX3ZhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZXKEFkZHIpKiBvdXRfbWF4X3ZhZGRyKSB7CisgIEVsZlcoQWRkcikgbWluX3ZhZGRyID0gVUlOVFBUUl9NQVg7CisgIEVsZlcoQWRkcikgbWF4X3ZhZGRyID0gMDsKIAotICAgIGJvb2wgZm91bmRfcHRfbG9hZCA9IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGhkcl9jb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEVsZl9QaGRyKiBwaGRyID0gJnBoZHJfdGFibGVbaV07CisgIGJvb2wgZm91bmRfcHRfbG9hZCA9IGZhbHNlOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBoZHJfY291bnQ7ICsraSkgeworICAgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHIgPSAmcGhkcl90YWJsZVtpXTsKIAotICAgICAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0xPQUQpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGZvdW5kX3B0X2xvYWQgPSB0cnVlOwotCi0gICAgICAgIGlmIChwaGRyLT5wX3ZhZGRyIDwgbWluX3ZhZGRyKSB7Ci0gICAgICAgICAgICBtaW5fdmFkZHIgPSBwaGRyLT5wX3ZhZGRyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBoZHItPnBfdmFkZHIgKyBwaGRyLT5wX21lbXN6ID4gbWF4X3ZhZGRyKSB7Ci0gICAgICAgICAgICBtYXhfdmFkZHIgPSBwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zejsKLSAgICAgICAgfQorICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfTE9BRCkgeworICAgICAgY29udGludWU7CiAgICAgfQotICAgIGlmICghZm91bmRfcHRfbG9hZCkgewotICAgICAgICBtaW5fdmFkZHIgPSAwOworICAgIGZvdW5kX3B0X2xvYWQgPSB0cnVlOworCisgICAgaWYgKHBoZHItPnBfdmFkZHIgPCBtaW5fdmFkZHIpIHsKKyAgICAgIG1pbl92YWRkciA9IHBoZHItPnBfdmFkZHI7CiAgICAgfQogCi0gICAgbWluX3ZhZGRyID0gUEFHRV9TVEFSVChtaW5fdmFkZHIpOwotICAgIG1heF92YWRkciA9IFBBR0VfRU5EKG1heF92YWRkcik7CisgICAgaWYgKHBoZHItPnBfdmFkZHIgKyBwaGRyLT5wX21lbXN6ID4gbWF4X3ZhZGRyKSB7CisgICAgICBtYXhfdmFkZHIgPSBwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zejsKKyAgICB9CisgIH0KKyAgaWYgKCFmb3VuZF9wdF9sb2FkKSB7CisgICAgbWluX3ZhZGRyID0gMDsKKyAgfQogCi0gICAgaWYgKG91dF9taW5fdmFkZHIgIT0gTlVMTCkgewotICAgICAgICAqb3V0X21pbl92YWRkciA9IG1pbl92YWRkcjsKLSAgICB9Ci0gICAgaWYgKG91dF9tYXhfdmFkZHIgIT0gTlVMTCkgewotICAgICAgICAqb3V0X21heF92YWRkciA9IG1heF92YWRkcjsKLSAgICB9Ci0gICAgcmV0dXJuIG1heF92YWRkciAtIG1pbl92YWRkcjsKKyAgbWluX3ZhZGRyID0gUEFHRV9TVEFSVChtaW5fdmFkZHIpOworICBtYXhfdmFkZHIgPSBQQUdFX0VORChtYXhfdmFkZHIpOworCisgIGlmIChvdXRfbWluX3ZhZGRyICE9IE5VTEwpIHsKKyAgICAqb3V0X21pbl92YWRkciA9IG1pbl92YWRkcjsKKyAgfQorICBpZiAob3V0X21heF92YWRkciAhPSBOVUxMKSB7CisgICAgKm91dF9tYXhfdmFkZHIgPSBtYXhfdmFkZHI7CisgIH0KKyAgcmV0dXJuIG1heF92YWRkciAtIG1pbl92YWRkcjsKIH0KIAogLy8gUmVzZXJ2ZSBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsIGxvYWRhYmxlCiAvLyBzZWdtZW50cyBvZiBhIHByb2dyYW0gaGVhZGVyIHRhYmxlLiBUaGlzIGlzIGRvbmUgYnkgY3JlYXRpbmcgYQogLy8gcHJpdmF0ZSBhbm9ueW1vdXMgbW1hcCgpIHdpdGggUFJPVF9OT05FLgotYm9vbCBFbGZSZWFkZXI6OlJlc2VydmVBZGRyZXNzU3BhY2UoKSB7Ci0gIEVsZl9BZGRyIG1pbl92YWRkcjsKK2Jvb2wgRWxmUmVhZGVyOjpSZXNlcnZlQWRkcmVzc1NwYWNlKGNvbnN0IGFuZHJvaWRfZGxleHRpbmZvKiBleHRpbmZvKSB7CisgIEVsZlcoQWRkcikgbWluX3ZhZGRyOwogICBsb2FkX3NpemVfID0gcGhkcl90YWJsZV9nZXRfbG9hZF9zaXplKHBoZHJfdGFibGVfLCBwaGRyX251bV8sICZtaW5fdmFkZHIpOwogICBpZiAobG9hZF9zaXplXyA9PSAwKSB7CiAgICAgRExfRVJSKCJcIiVzXCIgaGFzIG5vIGxvYWRhYmxlIHNlZ21lbnRzIiwgbmFtZV8pOwpAQCAtMzAwLDExICsyOTcsMzMgQEAKICAgfQogCiAgIHVpbnQ4X3QqIGFkZHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtaW5fdmFkZHIpOwotICBpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUzsKLSAgdm9pZCogc3RhcnQgPSBtbWFwKGFkZHIsIGxvYWRfc2l6ZV8sIFBST1RfTk9ORSwgbW1hcF9mbGFncywgLTEsIDApOwotICBpZiAoc3RhcnQgPT0gTUFQX0ZBSUxFRCkgewotICAgIERMX0VSUigiY291bGRuJ3QgcmVzZXJ2ZSAlemQgYnl0ZXMgb2YgYWRkcmVzcyBzcGFjZSBmb3IgXCIlc1wiIiwgbG9hZF9zaXplXywgbmFtZV8pOwotICAgIHJldHVybiBmYWxzZTsKKyAgdm9pZCogc3RhcnQ7CisgIHNpemVfdCByZXNlcnZlZF9zaXplID0gMDsKKyAgYm9vbCByZXNlcnZlZF9oaW50ID0gdHJ1ZTsKKworICBpZiAoZXh0aW5mbyAhPSBOVUxMKSB7CisgICAgaWYgKGV4dGluZm8tPmZsYWdzICYgQU5EUk9JRF9ETEVYVF9SRVNFUlZFRF9BRERSRVNTKSB7CisgICAgICByZXNlcnZlZF9zaXplID0gZXh0aW5mby0+cmVzZXJ2ZWRfc2l6ZTsKKyAgICAgIHJlc2VydmVkX2hpbnQgPSBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKGV4dGluZm8tPmZsYWdzICYgQU5EUk9JRF9ETEVYVF9SRVNFUlZFRF9BRERSRVNTX0hJTlQpIHsKKyAgICAgIHJlc2VydmVkX3NpemUgPSBleHRpbmZvLT5yZXNlcnZlZF9zaXplOworICAgIH0KKyAgfQorCisgIGlmIChsb2FkX3NpemVfID4gcmVzZXJ2ZWRfc2l6ZSkgeworICAgIGlmICghcmVzZXJ2ZWRfaGludCkgeworICAgICAgRExfRVJSKCJyZXNlcnZlZCBhZGRyZXNzIHNwYWNlICV6ZCBzbWFsbGVyIHRoYW4gJXpkIGJ5dGVzIG5lZWRlZCBmb3IgXCIlc1wiIiwKKyAgICAgICAgICAgICByZXNlcnZlZF9zaXplIC0gbG9hZF9zaXplXywgbG9hZF9zaXplXywgbmFtZV8pOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUzsKKyAgICBzdGFydCA9IG1tYXAoYWRkciwgbG9hZF9zaXplXywgUFJPVF9OT05FLCBtbWFwX2ZsYWdzLCAtMSwgMCk7CisgICAgaWYgKHN0YXJ0ID09IE1BUF9GQUlMRUQpIHsKKyAgICAgIERMX0VSUigiY291bGRuJ3QgcmVzZXJ2ZSAlemQgYnl0ZXMgb2YgYWRkcmVzcyBzcGFjZSBmb3IgXCIlc1wiIiwgbG9hZF9zaXplXywgbmFtZV8pOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzdGFydCA9IGV4dGluZm8tPnJlc2VydmVkX2FkZHI7CiAgIH0KIAogICBsb2FkX3N0YXJ0XyA9IHN0YXJ0OwpAQCAtMzE0LDMwICszMzMsMzAgQEAKIAogYm9vbCBFbGZSZWFkZXI6OkxvYWRTZWdtZW50cygpIHsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaGRyX251bV87ICsraSkgewotICAgIGNvbnN0IEVsZl9QaGRyKiBwaGRyID0gJnBoZHJfdGFibGVfW2ldOworICAgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHIgPSAmcGhkcl90YWJsZV9baV07CiAKICAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0xPQUQpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAogICAgIC8vIFNlZ21lbnQgYWRkcmVzc2VzIGluIG1lbW9yeS4KLSAgICBFbGZfQWRkciBzZWdfc3RhcnQgPSBwaGRyLT5wX3ZhZGRyICsgbG9hZF9iaWFzXzsKLSAgICBFbGZfQWRkciBzZWdfZW5kICAgPSBzZWdfc3RhcnQgKyBwaGRyLT5wX21lbXN6OworICAgIEVsZlcoQWRkcikgc2VnX3N0YXJ0ID0gcGhkci0+cF92YWRkciArIGxvYWRfYmlhc187CisgICAgRWxmVyhBZGRyKSBzZWdfZW5kICAgPSBzZWdfc3RhcnQgKyBwaGRyLT5wX21lbXN6OwogCi0gICAgRWxmX0FkZHIgc2VnX3BhZ2Vfc3RhcnQgPSBQQUdFX1NUQVJUKHNlZ19zdGFydCk7Ci0gICAgRWxmX0FkZHIgc2VnX3BhZ2VfZW5kICAgPSBQQUdFX0VORChzZWdfZW5kKTsKKyAgICBFbGZXKEFkZHIpIHNlZ19wYWdlX3N0YXJ0ID0gUEFHRV9TVEFSVChzZWdfc3RhcnQpOworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2VfZW5kICAgPSBQQUdFX0VORChzZWdfZW5kKTsKIAotICAgIEVsZl9BZGRyIHNlZ19maWxlX2VuZCAgID0gc2VnX3N0YXJ0ICsgcGhkci0+cF9maWxlc3o7CisgICAgRWxmVyhBZGRyKSBzZWdfZmlsZV9lbmQgICA9IHNlZ19zdGFydCArIHBoZHItPnBfZmlsZXN6OwogCiAgICAgLy8gRmlsZSBvZmZzZXRzLgotICAgIEVsZl9BZGRyIGZpbGVfc3RhcnQgPSBwaGRyLT5wX29mZnNldDsKLSAgICBFbGZfQWRkciBmaWxlX2VuZCAgID0gZmlsZV9zdGFydCArIHBoZHItPnBfZmlsZXN6OworICAgIEVsZlcoQWRkcikgZmlsZV9zdGFydCA9IHBoZHItPnBfb2Zmc2V0OworICAgIEVsZlcoQWRkcikgZmlsZV9lbmQgICA9IGZpbGVfc3RhcnQgKyBwaGRyLT5wX2ZpbGVzejsKIAotICAgIEVsZl9BZGRyIGZpbGVfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQoZmlsZV9zdGFydCk7Ci0gICAgRWxmX0FkZHIgZmlsZV9sZW5ndGggPSBmaWxlX2VuZCAtIGZpbGVfcGFnZV9zdGFydDsKKyAgICBFbGZXKEFkZHIpIGZpbGVfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQoZmlsZV9zdGFydCk7CisgICAgRWxmVyhBZGRyKSBmaWxlX2xlbmd0aCA9IGZpbGVfZW5kIC0gZmlsZV9wYWdlX3N0YXJ0OwogCiAgICAgaWYgKGZpbGVfbGVuZ3RoICE9IDApIHsKLSAgICAgIHZvaWQqIHNlZ19hZGRyID0gbW1hcCgodm9pZCopc2VnX3BhZ2Vfc3RhcnQsCisgICAgICB2b2lkKiBzZWdfYWRkciA9IG1tYXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2VnX3BhZ2Vfc3RhcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGTEFHU19UT19QUk9UKHBoZHItPnBfZmxhZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9GSVhFRHxNQVBfUFJJVkFURSwKQEAgLTM1Miw3ICszNzEsNyBAQAogICAgIC8vIGlmIHRoZSBzZWdtZW50IGlzIHdyaXRhYmxlLCBhbmQgZG9lcyBub3QgZW5kIG9uIGEgcGFnZSBib3VuZGFyeSwKICAgICAvLyB6ZXJvLWZpbGwgaXQgdW50aWwgdGhlIHBhZ2UgbGltaXQuCiAgICAgaWYgKChwaGRyLT5wX2ZsYWdzICYgUEZfVykgIT0gMCAmJiBQQUdFX09GRlNFVChzZWdfZmlsZV9lbmQpID4gMCkgewotICAgICAgbWVtc2V0KCh2b2lkKilzZWdfZmlsZV9lbmQsIDAsIFBBR0VfU0laRSAtIFBBR0VfT0ZGU0VUKHNlZ19maWxlX2VuZCkpOworICAgICAgbWVtc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNlZ19maWxlX2VuZCksIDAsIFBBR0VfU0laRSAtIFBBR0VfT0ZGU0VUKHNlZ19maWxlX2VuZCkpOwogICAgIH0KIAogICAgIHNlZ19maWxlX2VuZCA9IFBBR0VfRU5EKHNlZ19maWxlX2VuZCk7CkBAIC0zNjIsNyArMzgxLDcgQEAKICAgICAvLyBiZXR3ZWVuIHRoZW0uIFRoaXMgaXMgZG9uZSBieSB1c2luZyBhIHByaXZhdGUgYW5vbnltb3VzCiAgICAgLy8gbWFwIGZvciBhbGwgZXh0cmEgcGFnZXMuCiAgICAgaWYgKHNlZ19wYWdlX2VuZCA+IHNlZ19maWxlX2VuZCkgewotICAgICAgdm9pZCogemVyb21hcCA9IG1tYXAoKHZvaWQqKXNlZ19maWxlX2VuZCwKKyAgICAgIHZvaWQqIHplcm9tYXAgPSBtbWFwKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNlZ19maWxlX2VuZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdfcGFnZV9lbmQgLSBzZWdfZmlsZV9lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRkxBR1NfVE9fUFJPVChwaGRyLT5wX2ZsYWdzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9GSVhFRHxNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLApAQCAtMzgxLDI2ICs0MDAsMjcgQEAKICAqIHdpdGggb3B0aW9uYWwgZXh0cmEgZmxhZ3MgKGkuZS4gcmVhbGx5IFBST1RfV1JJVEUpLiBVc2VkIGJ5CiAgKiBwaGRyX3RhYmxlX3Byb3RlY3Rfc2VnbWVudHMgYW5kIHBoZHJfdGFibGVfdW5wcm90ZWN0X3NlZ21lbnRzLgogICovCi1zdGF0aWMgaW50IF9waGRyX3RhYmxlX3NldF9sb2FkX3Byb3QoY29uc3QgRWxmX1BoZHIqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9BZGRyIGxvYWRfYmlhcywgaW50IGV4dHJhX3Byb3RfZmxhZ3MpIHsKLSAgICBjb25zdCBFbGZfUGhkciogcGhkciA9IHBoZHJfdGFibGU7Ci0gICAgY29uc3QgRWxmX1BoZHIqIHBoZHJfbGltaXQgPSBwaGRyICsgcGhkcl9jb3VudDsKK3N0YXRpYyBpbnQgX3BoZHJfdGFibGVfc2V0X2xvYWRfcHJvdChjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZXKEFkZHIpIGxvYWRfYmlhcywgaW50IGV4dHJhX3Byb3RfZmxhZ3MpIHsKKyAgY29uc3QgRWxmVyhQaGRyKSogcGhkciA9IHBoZHJfdGFibGU7CisgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfbGltaXQgPSBwaGRyICsgcGhkcl9jb3VudDsKIAotICAgIGZvciAoOyBwaGRyIDwgcGhkcl9saW1pdDsgcGhkcisrKSB7Ci0gICAgICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfTE9BRCB8fCAocGhkci0+cF9mbGFncyAmIFBGX1cpICE9IDApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBFbGZfQWRkciBzZWdfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQocGhkci0+cF92YWRkcikgKyBsb2FkX2JpYXM7Ci0gICAgICAgIEVsZl9BZGRyIHNlZ19wYWdlX2VuZCAgID0gUEFHRV9FTkQocGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3opICsgbG9hZF9iaWFzOwotCi0gICAgICAgIGludCByZXQgPSBtcHJvdGVjdCgodm9pZCopc2VnX3BhZ2Vfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdfcGFnZV9lbmQgLSBzZWdfcGFnZV9zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGTEFHU19UT19QUk9UKHBoZHItPnBfZmxhZ3MpIHwgZXh0cmFfcHJvdF9mbGFncyk7Ci0gICAgICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKyAgZm9yICg7IHBoZHIgPCBwaGRyX2xpbWl0OyBwaGRyKyspIHsKKyAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0xPQUQgfHwgKHBoZHItPnBfZmxhZ3MgJiBQRl9XKSAhPSAwKSB7CisgICAgICBjb250aW51ZTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisKKyAgICBFbGZXKEFkZHIpIHNlZ19wYWdlX3N0YXJ0ID0gUEFHRV9TVEFSVChwaGRyLT5wX3ZhZGRyKSArIGxvYWRfYmlhczsKKyAgICBFbGZXKEFkZHIpIHNlZ19wYWdlX2VuZCAgID0gUEFHRV9FTkQocGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3opICsgbG9hZF9iaWFzOworCisgICAgaW50IHJldCA9IG1wcm90ZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNlZ19wYWdlX3N0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VnX3BhZ2VfZW5kIC0gc2VnX3BhZ2Vfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIFBGTEFHU19UT19QUk9UKHBoZHItPnBfZmxhZ3MpIHwgZXh0cmFfcHJvdF9mbGFncyk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7CiB9CiAKIC8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3RlY3Rpb24gbW9kZXMgZm9yIGFsbCBsb2FkYWJsZSBzZWdtZW50cy4KQEAgLTQxNCw4ICs0MzQsOCBAQAogICogUmV0dXJuOgogICogICAwIG9uIGVycm9yLCAtMSBvbiBmYWlsdXJlIChlcnJvciBjb2RlIGluIGVycm5vKS4KICAqLwotaW50IHBoZHJfdGFibGVfcHJvdGVjdF9zZWdtZW50cyhjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZl9BZGRyIGxvYWRfYmlhcykgewotICAgIHJldHVybiBfcGhkcl90YWJsZV9zZXRfbG9hZF9wcm90KHBoZHJfdGFibGUsIHBoZHJfY291bnQsIGxvYWRfYmlhcywgMCk7CitpbnQgcGhkcl90YWJsZV9wcm90ZWN0X3NlZ21lbnRzKGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LCBFbGZXKEFkZHIpIGxvYWRfYmlhcykgeworICByZXR1cm4gX3BoZHJfdGFibGVfc2V0X2xvYWRfcHJvdChwaGRyX3RhYmxlLCBwaGRyX2NvdW50LCBsb2FkX2JpYXMsIDApOwogfQogCiAvKiBDaGFuZ2UgdGhlIHByb3RlY3Rpb24gb2YgYWxsIGxvYWRlZCBzZWdtZW50cyBpbiBtZW1vcnkgdG8gd3JpdGFibGUuCkBAIC00MzQsNTAgKzQ1NCw1MCBAQAogICogUmV0dXJuOgogICogICAwIG9uIGVycm9yLCAtMSBvbiBmYWlsdXJlIChlcnJvciBjb2RlIGluIGVycm5vKS4KICAqLwotaW50IHBoZHJfdGFibGVfdW5wcm90ZWN0X3NlZ21lbnRzKGNvbnN0IEVsZl9QaGRyKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmX0FkZHIgbG9hZF9iaWFzKSB7Ci0gICAgcmV0dXJuIF9waGRyX3RhYmxlX3NldF9sb2FkX3Byb3QocGhkcl90YWJsZSwgcGhkcl9jb3VudCwgbG9hZF9iaWFzLCBQUk9UX1dSSVRFKTsKK2ludCBwaGRyX3RhYmxlX3VucHJvdGVjdF9zZWdtZW50cyhjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmVyhBZGRyKSBsb2FkX2JpYXMpIHsKKyAgcmV0dXJuIF9waGRyX3RhYmxlX3NldF9sb2FkX3Byb3QocGhkcl90YWJsZSwgcGhkcl9jb3VudCwgbG9hZF9iaWFzLCBQUk9UX1dSSVRFKTsKIH0KIAogLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHBoZHJfdGFibGVfcHJvdGVjdF9nbnVfcmVscm8gYW5kCiAgKiBwaGRyX3RhYmxlX3VucHJvdGVjdF9nbnVfcmVscm8uCiAgKi8KLXN0YXRpYyBpbnQgX3BoZHJfdGFibGVfc2V0X2dudV9yZWxyb19wcm90KGNvbnN0IEVsZl9QaGRyKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9BZGRyIGxvYWRfYmlhcywgaW50IHByb3RfZmxhZ3MpIHsKLSAgICBjb25zdCBFbGZfUGhkciogcGhkciA9IHBoZHJfdGFibGU7Ci0gICAgY29uc3QgRWxmX1BoZHIqIHBoZHJfbGltaXQgPSBwaGRyICsgcGhkcl9jb3VudDsKK3N0YXRpYyBpbnQgX3BoZHJfdGFibGVfc2V0X2dudV9yZWxyb19wcm90KGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmVyhBZGRyKSBsb2FkX2JpYXMsIGludCBwcm90X2ZsYWdzKSB7CisgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHIgPSBwaGRyX3RhYmxlOworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyX2xpbWl0ID0gcGhkciArIHBoZHJfY291bnQ7CiAKLSAgICBmb3IgKHBoZHIgPSBwaGRyX3RhYmxlOyBwaGRyIDwgcGhkcl9saW1pdDsgcGhkcisrKSB7Ci0gICAgICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfR05VX1JFTFJPKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogVHJpY2t5OiB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgcmVscm8gc2VnbWVudCBkb2VzIG5vdCBzdGFydAotICAgICAgICAgKiBvciBlbmQgYXQgcGFnZSBib3VuZGFyaWVzPy4gV2UncmUgZ29pbmcgdG8gYmUgb3Zlci1wcm90ZWN0aXZlCi0gICAgICAgICAqIGhlcmUgYW5kIHB1dCBldmVyeSBwYWdlIHRvdWNoZWQgYnkgdGhlIHNlZ21lbnQgYXMgcmVhZC1vbmx5LgotICAgICAgICAgKgotICAgICAgICAgKiBUaGlzIHNlZW1zIHRvIG1hdGNoIElhbiBMYW5jZSBUYXlsb3IncyBkZXNjcmlwdGlvbiBvZiB0aGUKLSAgICAgICAgICogZmVhdHVyZSBhdCBodHRwOi8vd3d3LmFpcnMuY29tL2Jsb2cvYXJjaGl2ZXMvMTg5LgotICAgICAgICAgKgotICAgICAgICAgKiBFeHRyYWN0OgotICAgICAgICAgKiAgICBOb3RlIHRoYXQgdGhlIGN1cnJlbnQgZHluYW1pYyBsaW5rZXIgY29kZSB3aWxsIG9ubHkgd29yawotICAgICAgICAgKiAgICBjb3JyZWN0bHkgaWYgdGhlIFBUX0dOVV9SRUxSTyBzZWdtZW50IHN0YXJ0cyBvbiBhIHBhZ2UKLSAgICAgICAgICogICAgYm91bmRhcnkuIFRoaXMgaXMgYmVjYXVzZSB0aGUgZHluYW1pYyBsaW5rZXIgcm91bmRzIHRoZQotICAgICAgICAgKiAgICBwX3ZhZGRyIGZpZWxkIGRvd24gdG8gdGhlIHByZXZpb3VzIHBhZ2UgYm91bmRhcnkuIElmCi0gICAgICAgICAqICAgIHRoZXJlIGlzIGFueXRoaW5nIG9uIHRoZSBwYWdlIHdoaWNoIHNob3VsZCBub3QgYmUgcmVhZC1vbmx5LAotICAgICAgICAgKiAgICB0aGUgcHJvZ3JhbSBpcyBsaWtlbHkgdG8gZmFpbCBhdCBydW50aW1lLiBTbyBpbiBlZmZlY3QgdGhlCi0gICAgICAgICAqICAgIGxpbmtlciBtdXN0IG9ubHkgZW1pdCBhIFBUX0dOVV9SRUxSTyBzZWdtZW50IGlmIGl0IGVuc3VyZXMKLSAgICAgICAgICogICAgdGhhdCBpdCBzdGFydHMgb24gYSBwYWdlIGJvdW5kYXJ5LgotICAgICAgICAgKi8KLSAgICAgICAgRWxmX0FkZHIgc2VnX3BhZ2Vfc3RhcnQgPSBQQUdFX1NUQVJUKHBoZHItPnBfdmFkZHIpICsgbG9hZF9iaWFzOwotICAgICAgICBFbGZfQWRkciBzZWdfcGFnZV9lbmQgICA9IFBBR0VfRU5EKHBoZHItPnBfdmFkZHIgKyBwaGRyLT5wX21lbXN6KSArIGxvYWRfYmlhczsKLQotICAgICAgICBpbnQgcmV0ID0gbXByb3RlY3QoKHZvaWQqKXNlZ19wYWdlX3N0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnX3BhZ2VfZW5kIC0gc2VnX3BhZ2Vfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90X2ZsYWdzKTsKLSAgICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorICBmb3IgKHBoZHIgPSBwaGRyX3RhYmxlOyBwaGRyIDwgcGhkcl9saW1pdDsgcGhkcisrKSB7CisgICAgaWYgKHBoZHItPnBfdHlwZSAhPSBQVF9HTlVfUkVMUk8pIHsKKyAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICByZXR1cm4gMDsKKworICAgIC8vIFRyaWNreTogd2hhdCBoYXBwZW5zIHdoZW4gdGhlIHJlbHJvIHNlZ21lbnQgZG9lcyBub3Qgc3RhcnQKKyAgICAvLyBvciBlbmQgYXQgcGFnZSBib3VuZGFyaWVzPyBXZSdyZSBnb2luZyB0byBiZSBvdmVyLXByb3RlY3RpdmUKKyAgICAvLyBoZXJlIGFuZCBwdXQgZXZlcnkgcGFnZSB0b3VjaGVkIGJ5IHRoZSBzZWdtZW50IGFzIHJlYWQtb25seS4KKworICAgIC8vIFRoaXMgc2VlbXMgdG8gbWF0Y2ggSWFuIExhbmNlIFRheWxvcidzIGRlc2NyaXB0aW9uIG9mIHRoZQorICAgIC8vIGZlYXR1cmUgYXQgaHR0cDovL3d3dy5haXJzLmNvbS9ibG9nL2FyY2hpdmVzLzE4OS4KKworICAgIC8vICAgIEV4dHJhY3Q6CisgICAgLy8gICAgICAgTm90ZSB0aGF0IHRoZSBjdXJyZW50IGR5bmFtaWMgbGlua2VyIGNvZGUgd2lsbCBvbmx5IHdvcmsKKyAgICAvLyAgICAgICBjb3JyZWN0bHkgaWYgdGhlIFBUX0dOVV9SRUxSTyBzZWdtZW50IHN0YXJ0cyBvbiBhIHBhZ2UKKyAgICAvLyAgICAgICBib3VuZGFyeS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBkeW5hbWljIGxpbmtlciByb3VuZHMgdGhlCisgICAgLy8gICAgICAgcF92YWRkciBmaWVsZCBkb3duIHRvIHRoZSBwcmV2aW91cyBwYWdlIGJvdW5kYXJ5LiBJZgorICAgIC8vICAgICAgIHRoZXJlIGlzIGFueXRoaW5nIG9uIHRoZSBwYWdlIHdoaWNoIHNob3VsZCBub3QgYmUgcmVhZC1vbmx5LAorICAgIC8vICAgICAgIHRoZSBwcm9ncmFtIGlzIGxpa2VseSB0byBmYWlsIGF0IHJ1bnRpbWUuIFNvIGluIGVmZmVjdCB0aGUKKyAgICAvLyAgICAgICBsaW5rZXIgbXVzdCBvbmx5IGVtaXQgYSBQVF9HTlVfUkVMUk8gc2VnbWVudCBpZiBpdCBlbnN1cmVzCisgICAgLy8gICAgICAgdGhhdCBpdCBzdGFydHMgb24gYSBwYWdlIGJvdW5kYXJ5LgorICAgIEVsZlcoQWRkcikgc2VnX3BhZ2Vfc3RhcnQgPSBQQUdFX1NUQVJUKHBoZHItPnBfdmFkZHIpICsgbG9hZF9iaWFzOworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2VfZW5kICAgPSBQQUdFX0VORChwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zeikgKyBsb2FkX2JpYXM7CisKKyAgICBpbnQgcmV0ID0gbXByb3RlY3QocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2VnX3BhZ2Vfc3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICBzZWdfcGFnZV9lbmQgLSBzZWdfcGFnZV9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgcHJvdF9mbGFncyk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7CiB9CiAKIC8qIEFwcGx5IEdOVSByZWxybyBwcm90ZWN0aW9uIGlmIHNwZWNpZmllZCBieSB0aGUgcHJvZ3JhbSBoZWFkZXIuIFRoaXMgd2lsbApAQCAtNDk2LDEwICs1MTYsMTQzIEBACiAgKiBSZXR1cm46CiAgKiAgIDAgb24gZXJyb3IsIC0xIG9uIGZhaWx1cmUgKGVycm9yIGNvZGUgaW4gZXJybm8pLgogICovCi1pbnQgcGhkcl90YWJsZV9wcm90ZWN0X2dudV9yZWxybyhjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZl9BZGRyIGxvYWRfYmlhcykgewotICAgIHJldHVybiBfcGhkcl90YWJsZV9zZXRfZ251X3JlbHJvX3Byb3QocGhkcl90YWJsZSwgcGhkcl9jb3VudCwgbG9hZF9iaWFzLCBQUk9UX1JFQUQpOworaW50IHBoZHJfdGFibGVfcHJvdGVjdF9nbnVfcmVscm8oY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZlcoQWRkcikgbG9hZF9iaWFzKSB7CisgIHJldHVybiBfcGhkcl90YWJsZV9zZXRfZ251X3JlbHJvX3Byb3QocGhkcl90YWJsZSwgcGhkcl9jb3VudCwgbG9hZF9iaWFzLCBQUk9UX1JFQUQpOwogfQogCisvKiBTZXJpYWxpemUgdGhlIEdOVSByZWxybyBzZWdtZW50cyB0byB0aGUgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLiBUaGlzIGNhbiBiZQorICogcGVyZm9ybWVkIGFmdGVyIHJlbG9jYXRpb25zIHRvIGFsbG93IGFub3RoZXIgcHJvY2VzcyB0byBsYXRlciBzaGFyZSB0aGUKKyAqIHJlbG9jYXRlZCBzZWdtZW50LCBpZiBpdCB3YXMgbG9hZGVkIGF0IHRoZSBzYW1lIGFkZHJlc3MuCisgKgorICogSW5wdXQ6CisgKiAgIHBoZHJfdGFibGUgIC0+IHByb2dyYW0gaGVhZGVyIHRhYmxlCisgKiAgIHBoZHJfY291bnQgIC0+IG51bWJlciBvZiBlbnRyaWVzIGluIHRhYmxlcworICogICBsb2FkX2JpYXMgICAtPiBsb2FkIGJpYXMKKyAqICAgZmQgICAgICAgICAgLT4gd3JpdGFibGUgZmlsZSBkZXNjcmlwdG9yIHRvIHVzZQorICogUmV0dXJuOgorICogICAwIG9uIGVycm9yLCAtMSBvbiBmYWlsdXJlIChlcnJvciBjb2RlIGluIGVycm5vKS4KKyAqLworaW50IHBoZHJfdGFibGVfc2VyaWFsaXplX2dudV9yZWxybyhjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmVyhBZGRyKSBsb2FkX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmZCkgeworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyID0gcGhkcl90YWJsZTsKKyAgY29uc3QgRWxmVyhQaGRyKSogcGhkcl9saW1pdCA9IHBoZHIgKyBwaGRyX2NvdW50OworICBzc2l6ZV90IGZpbGVfb2Zmc2V0ID0gMDsKKworICBmb3IgKHBoZHIgPSBwaGRyX3RhYmxlOyBwaGRyIDwgcGhkcl9saW1pdDsgcGhkcisrKSB7CisgICAgaWYgKHBoZHItPnBfdHlwZSAhPSBQVF9HTlVfUkVMUk8pIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2Vfc3RhcnQgPSBQQUdFX1NUQVJUKHBoZHItPnBfdmFkZHIpICsgbG9hZF9iaWFzOworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2VfZW5kICAgPSBQQUdFX0VORChwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zeikgKyBsb2FkX2JpYXM7CisgICAgc3NpemVfdCBzaXplID0gc2VnX3BhZ2VfZW5kIC0gc2VnX3BhZ2Vfc3RhcnQ7CisKKyAgICBzc2l6ZV90IHdyaXR0ZW4gPSBURU1QX0ZBSUxVUkVfUkVUUlkod3JpdGUoZmQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNlZ19wYWdlX3N0YXJ0KSwgc2l6ZSkpOworICAgIGlmICh3cml0dGVuICE9IHNpemUpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgdm9pZCogbWFwID0gbW1hcChyZWludGVycHJldF9jYXN0PHZvaWQqPihzZWdfcGFnZV9zdGFydCksIHNpemUsIFBST1RfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgIE1BUF9QUklWQVRFfE1BUF9GSVhFRCwgZmQsIGZpbGVfb2Zmc2V0KTsKKyAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZmlsZV9vZmZzZXQgKz0gc2l6ZTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogV2hlcmUgcG9zc2libGUsIHJlcGxhY2UgdGhlIEdOVSByZWxybyBzZWdtZW50cyB3aXRoIG1hcHBpbmdzIG9mIHRoZSBnaXZlbgorICogZmlsZSBkZXNjcmlwdG9yLiBUaGlzIGNhbiBiZSBwZXJmb3JtZWQgYWZ0ZXIgcmVsb2NhdGlvbnMgdG8gYWxsb3cgYSBmaWxlCisgKiBwcmV2aW91c2x5IGNyZWF0ZWQgYnkgcGhkcl90YWJsZV9zZXJpYWxpemVfZ251X3JlbHJvIGluIGFub3RoZXIgcHJvY2VzcyB0bworICogcmVwbGFjZSB0aGUgZGlydHkgcmVsb2NhdGVkIHBhZ2VzLCBzYXZpbmcgbWVtb3J5LCBpZiBpdCB3YXMgbG9hZGVkIGF0IHRoZQorICogc2FtZSBhZGRyZXNzLiBXZSBoYXZlIHRvIGNvbXBhcmUgdGhlIGRhdGEgYmVmb3JlIHdlIG1hcCBvdmVyIGl0LCBzaW5jZSBzb21lCisgKiBwYXJ0cyBvZiB0aGUgcmVscm8gc2VnbWVudCBtYXkgbm90IGJlIGlkZW50aWNhbCBkdWUgdG8gb3RoZXIgbGlicmFyaWVzIGluCisgKiB0aGUgcHJvY2VzcyBiZWluZyBsb2FkZWQgYXQgZGlmZmVyZW50IGFkZHJlc3Nlcy4KKyAqCisgKiBJbnB1dDoKKyAqICAgcGhkcl90YWJsZSAgLT4gcHJvZ3JhbSBoZWFkZXIgdGFibGUKKyAqICAgcGhkcl9jb3VudCAgLT4gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGFibGVzCisgKiAgIGxvYWRfYmlhcyAgIC0+IGxvYWQgYmlhcworICogICBmZCAgICAgICAgICAtPiByZWFkYWJsZSBmaWxlIGRlc2NyaXB0b3IgdG8gdXNlCisgKiBSZXR1cm46CisgKiAgIDAgb24gZXJyb3IsIC0xIG9uIGZhaWx1cmUgKGVycm9yIGNvZGUgaW4gZXJybm8pLgorICovCitpbnQgcGhkcl90YWJsZV9tYXBfZ251X3JlbHJvKGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LCBFbGZXKEFkZHIpIGxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZkKSB7CisgIC8vIE1hcCB0aGUgZmlsZSBhdCBhIHRlbXBvcmFyeSBsb2NhdGlvbiBzbyB3ZSBjYW4gY29tcGFyZSBpdHMgY29udGVudHMuCisgIHN0cnVjdCBzdGF0IGZpbGVfc3RhdDsKKyAgaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShmc3RhdChmZCwgJmZpbGVfc3RhdCkpICE9IDApIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgb2ZmX3QgZmlsZV9zaXplID0gZmlsZV9zdGF0LnN0X3NpemU7CisgIHZvaWQqIHRlbXBfbWFwcGluZyA9IE5VTEw7CisgIGlmIChmaWxlX3NpemUgPiAwKSB7CisgICAgdGVtcF9tYXBwaW5nID0gbW1hcChOVUxMLCBmaWxlX3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKyAgICBpZiAodGVtcF9tYXBwaW5nID09IE1BUF9GQUlMRUQpIHsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKyAgc2l6ZV90IGZpbGVfb2Zmc2V0ID0gMDsKKworICAvLyBJdGVyYXRlIG92ZXIgdGhlIHJlbHJvIHNlZ21lbnRzIGFuZCBjb21wYXJlL3JlbWFwIHRoZSBwYWdlcy4KKyAgY29uc3QgRWxmVyhQaGRyKSogcGhkciA9IHBoZHJfdGFibGU7CisgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfbGltaXQgPSBwaGRyICsgcGhkcl9jb3VudDsKKworICBmb3IgKHBoZHIgPSBwaGRyX3RhYmxlOyBwaGRyIDwgcGhkcl9saW1pdDsgcGhkcisrKSB7CisgICAgaWYgKHBoZHItPnBfdHlwZSAhPSBQVF9HTlVfUkVMUk8pIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2Vfc3RhcnQgPSBQQUdFX1NUQVJUKHBoZHItPnBfdmFkZHIpICsgbG9hZF9iaWFzOworICAgIEVsZlcoQWRkcikgc2VnX3BhZ2VfZW5kICAgPSBQQUdFX0VORChwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zeikgKyBsb2FkX2JpYXM7CisKKyAgICBjaGFyKiBmaWxlX2Jhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4odGVtcF9tYXBwaW5nKSArIGZpbGVfb2Zmc2V0OworICAgIGNoYXIqIG1lbV9iYXNlID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2VnX3BhZ2Vfc3RhcnQpOworICAgIHNpemVfdCBtYXRjaF9vZmZzZXQgPSAwOworICAgIHNpemVfdCBzaXplID0gc2VnX3BhZ2VfZW5kIC0gc2VnX3BhZ2Vfc3RhcnQ7CisKKyAgICBpZiAoZmlsZV9zaXplIC0gZmlsZV9vZmZzZXQgPCBzaXplKSB7CisgICAgICAvLyBGaWxlIGlzIHRvbyBzaG9ydCB0byBjb21wYXJlIHRvIHRoaXMgc2VnbWVudC4gVGhlIGNvbnRlbnRzIGFyZSBsaWtlbHkKKyAgICAgIC8vIGRpZmZlcmVudCBhcyB3ZWxsIChpdCdzIHByb2JhYmx5IGZvciBhIGRpZmZlcmVudCBsaWJyYXJ5IHZlcnNpb24pIHNvCisgICAgICAvLyBqdXN0IGRvbid0IGJvdGhlciBjaGVja2luZy4KKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIHdoaWxlIChtYXRjaF9vZmZzZXQgPCBzaXplKSB7CisgICAgICAvLyBTa2lwIG92ZXIgZGlzc2ltaWxhciBwYWdlcy4KKyAgICAgIHdoaWxlIChtYXRjaF9vZmZzZXQgPCBzaXplICYmCisgICAgICAgICAgICAgbWVtY21wKG1lbV9iYXNlICsgbWF0Y2hfb2Zmc2V0LCBmaWxlX2Jhc2UgKyBtYXRjaF9vZmZzZXQsIFBBR0VfU0laRSkgIT0gMCkgeworICAgICAgICBtYXRjaF9vZmZzZXQgKz0gUEFHRV9TSVpFOworICAgICAgfQorCisgICAgICAvLyBDb3VudCBzaW1pbGFyIHBhZ2VzLgorICAgICAgc2l6ZV90IG1pc21hdGNoX29mZnNldCA9IG1hdGNoX29mZnNldDsKKyAgICAgIHdoaWxlIChtaXNtYXRjaF9vZmZzZXQgPCBzaXplICYmCisgICAgICAgICAgICAgbWVtY21wKG1lbV9iYXNlICsgbWlzbWF0Y2hfb2Zmc2V0LCBmaWxlX2Jhc2UgKyBtaXNtYXRjaF9vZmZzZXQsIFBBR0VfU0laRSkgPT0gMCkgeworICAgICAgICBtaXNtYXRjaF9vZmZzZXQgKz0gUEFHRV9TSVpFOworICAgICAgfQorCisgICAgICAvLyBNYXAgb3ZlciBzaW1pbGFyIHBhZ2VzLgorICAgICAgaWYgKG1pc21hdGNoX29mZnNldCA+IG1hdGNoX29mZnNldCkgeworICAgICAgICB2b2lkKiBtYXAgPSBtbWFwKG1lbV9iYXNlICsgbWF0Y2hfb2Zmc2V0LCBtaXNtYXRjaF9vZmZzZXQgLSBtYXRjaF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFELCBNQVBfUFJJVkFURXxNQVBfRklYRUQsIGZkLCBtYXRjaF9vZmZzZXQpOworICAgICAgICBpZiAobWFwID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgICBtdW5tYXAodGVtcF9tYXBwaW5nLCBmaWxlX3NpemUpOworICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBtYXRjaF9vZmZzZXQgPSBtaXNtYXRjaF9vZmZzZXQ7CisgICAgfQorCisgICAgLy8gQWRkIHRvIHRoZSBiYXNlIGZpbGUgb2Zmc2V0IGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIHJlbHJvIHNlZ21lbnRzLgorICAgIGZpbGVfb2Zmc2V0ICs9IHNpemU7CisgIH0KKyAgbXVubWFwKHRlbXBfbWFwcGluZywgZmlsZV9zaXplKTsKKyAgcmV0dXJuIDA7Cit9CisKKwogI2lmIGRlZmluZWQoX19hcm1fXykKIAogIyAgaWZuZGVmIFBUX0FSTV9FWElEWApAQCAtNTE5LDIzICs2NzIsMjQgQEAKICAqIFJldHVybjoKICAqICAgMCBvbiBlcnJvciwgLTEgb24gZmFpbHVyZSAoX25vXyBlcnJvciBjb2RlIGluIGVycm5vKQogICovCi1pbnQgcGhkcl90YWJsZV9nZXRfYXJtX2V4aWR4KGNvbnN0IEVsZl9QaGRyKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmX0FkZHIgbG9hZF9iaWFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfQWRkcioqIGFybV9leGlkeCwgdW5zaWduZWQqIGFybV9leGlkeF9jb3VudCkgewotICAgIGNvbnN0IEVsZl9QaGRyKiBwaGRyID0gcGhkcl90YWJsZTsKLSAgICBjb25zdCBFbGZfUGhkciogcGhkcl9saW1pdCA9IHBoZHIgKyBwaGRyX2NvdW50OworaW50IHBoZHJfdGFibGVfZ2V0X2FybV9leGlkeChjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmVyhBZGRyKSBsb2FkX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZlcoQWRkcikqKiBhcm1fZXhpZHgsIHVuc2lnbmVkKiBhcm1fZXhpZHhfY291bnQpIHsKKyAgY29uc3QgRWxmVyhQaGRyKSogcGhkciA9IHBoZHJfdGFibGU7CisgIGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfbGltaXQgPSBwaGRyICsgcGhkcl9jb3VudDsKIAotICAgIGZvciAocGhkciA9IHBoZHJfdGFibGU7IHBoZHIgPCBwaGRyX2xpbWl0OyBwaGRyKyspIHsKLSAgICAgICAgaWYgKHBoZHItPnBfdHlwZSAhPSBQVF9BUk1fRVhJRFgpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAqYXJtX2V4aWR4ID0gKEVsZl9BZGRyKikobG9hZF9iaWFzICsgcGhkci0+cF92YWRkcik7Ci0gICAgICAgICphcm1fZXhpZHhfY291bnQgPSAodW5zaWduZWQpKHBoZHItPnBfbWVtc3ogLyA4KTsKLSAgICAgICAgcmV0dXJuIDA7CisgIGZvciAocGhkciA9IHBoZHJfdGFibGU7IHBoZHIgPCBwaGRyX2xpbWl0OyBwaGRyKyspIHsKKyAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0FSTV9FWElEWCkgeworICAgICAgY29udGludWU7CiAgICAgfQotICAgICphcm1fZXhpZHggPSBOVUxMOwotICAgICphcm1fZXhpZHhfY291bnQgPSAwOwotICAgIHJldHVybiAtMTsKKworICAgICphcm1fZXhpZHggPSByZWludGVycHJldF9jYXN0PEVsZlcoQWRkcikqPihsb2FkX2JpYXMgKyBwaGRyLT5wX3ZhZGRyKTsKKyAgICAqYXJtX2V4aWR4X2NvdW50ID0gKHVuc2lnbmVkKShwaGRyLT5wX21lbXN6IC8gOCk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgKmFybV9leGlkeCA9IE5VTEw7CisgICphcm1fZXhpZHhfY291bnQgPSAwOworICByZXR1cm4gLTE7CiB9CiAjZW5kaWYKIApAQCAtNTUzLDQwICs3MDcsNDAgQEAKICAqIFJldHVybjoKICAqICAgdm9pZAogICovCi12b2lkIHBoZHJfdGFibGVfZ2V0X2R5bmFtaWNfc2VjdGlvbihjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfQWRkciBsb2FkX2JpYXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfRHluKiogZHluYW1pYywgc2l6ZV90KiBkeW5hbWljX2NvdW50LCBFbGZfV29yZCogZHluYW1pY19mbGFncykgewotICAgIGNvbnN0IEVsZl9QaGRyKiBwaGRyID0gcGhkcl90YWJsZTsKLSAgICBjb25zdCBFbGZfUGhkciogcGhkcl9saW1pdCA9IHBoZHIgKyBwaGRyX2NvdW50Owordm9pZCBwaGRyX3RhYmxlX2dldF9keW5hbWljX3NlY3Rpb24oY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZXKEFkZHIpIGxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZlcoRHluKSoqIGR5bmFtaWMsIHNpemVfdCogZHluYW1pY19jb3VudCwgRWxmVyhXb3JkKSogZHluYW1pY19mbGFncykgeworICBjb25zdCBFbGZXKFBoZHIpKiBwaGRyID0gcGhkcl90YWJsZTsKKyAgY29uc3QgRWxmVyhQaGRyKSogcGhkcl9saW1pdCA9IHBoZHIgKyBwaGRyX2NvdW50OwogCi0gICAgZm9yIChwaGRyID0gcGhkcl90YWJsZTsgcGhkciA8IHBoZHJfbGltaXQ7IHBoZHIrKykgewotICAgICAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0RZTkFNSUMpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgKmR5bmFtaWMgPSByZWludGVycHJldF9jYXN0PEVsZl9EeW4qPihsb2FkX2JpYXMgKyBwaGRyLT5wX3ZhZGRyKTsKLSAgICAgICAgaWYgKGR5bmFtaWNfY291bnQpIHsKLSAgICAgICAgICAgICpkeW5hbWljX2NvdW50ID0gKHVuc2lnbmVkKShwaGRyLT5wX21lbXN6IC8gOCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGR5bmFtaWNfZmxhZ3MpIHsKLSAgICAgICAgICAgICpkeW5hbWljX2ZsYWdzID0gcGhkci0+cF9mbGFnczsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47CisgIGZvciAocGhkciA9IHBoZHJfdGFibGU7IHBoZHIgPCBwaGRyX2xpbWl0OyBwaGRyKyspIHsKKyAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0RZTkFNSUMpIHsKKyAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICAqZHluYW1pYyA9IE5VTEw7CisKKyAgICAqZHluYW1pYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmVyhEeW4pKj4obG9hZF9iaWFzICsgcGhkci0+cF92YWRkcik7CiAgICAgaWYgKGR5bmFtaWNfY291bnQpIHsKLSAgICAgICAgKmR5bmFtaWNfY291bnQgPSAwOworICAgICAgKmR5bmFtaWNfY291bnQgPSAodW5zaWduZWQpKHBoZHItPnBfbWVtc3ogLyA4KTsKICAgICB9CisgICAgaWYgKGR5bmFtaWNfZmxhZ3MpIHsKKyAgICAgICpkeW5hbWljX2ZsYWdzID0gcGhkci0+cF9mbGFnczsKKyAgICB9CisgICAgcmV0dXJuOworICB9CisgICpkeW5hbWljID0gTlVMTDsKKyAgaWYgKGR5bmFtaWNfY291bnQpIHsKKyAgICAqZHluYW1pY19jb3VudCA9IDA7CisgIH0KIH0KIAogLy8gUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJvZ3JhbSBoZWFkZXIgdGFibGUgYXMgaXQgYXBwZWFycyBpbiB0aGUgbG9hZGVkCiAvLyBzZWdtZW50cyBpbiBtZW1vcnkuIFRoaXMgaXMgaW4gY29udHJhc3Qgd2l0aCAncGhkcl90YWJsZV8nIHdoaWNoCiAvLyBpcyB0ZW1wb3JhcnkgYW5kIHdpbGwgYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KIGJvb2wgRWxmUmVhZGVyOjpGaW5kUGhkcigpIHsKLSAgY29uc3QgRWxmX1BoZHIqIHBoZHJfbGltaXQgPSBwaGRyX3RhYmxlXyArIHBoZHJfbnVtXzsKKyAgY29uc3QgRWxmVyhQaGRyKSogcGhkcl9saW1pdCA9IHBoZHJfdGFibGVfICsgcGhkcl9udW1fOwogCiAgIC8vIElmIHRoZXJlIGlzIGEgUFRfUEhEUiwgdXNlIGl0IGRpcmVjdGx5LgotICBmb3IgKGNvbnN0IEVsZl9QaGRyKiBwaGRyID0gcGhkcl90YWJsZV87IHBoZHIgPCBwaGRyX2xpbWl0OyArK3BoZHIpIHsKKyAgZm9yIChjb25zdCBFbGZXKFBoZHIpKiBwaGRyID0gcGhkcl90YWJsZV87IHBoZHIgPCBwaGRyX2xpbWl0OyArK3BoZHIpIHsKICAgICBpZiAocGhkci0+cF90eXBlID09IFBUX1BIRFIpIHsKICAgICAgIHJldHVybiBDaGVja1BoZHIobG9hZF9iaWFzXyArIHBoZHItPnBfdmFkZHIpOwogICAgIH0KQEAgLTU5NSwxMyArNzQ5LDEzIEBACiAgIC8vIE90aGVyd2lzZSwgY2hlY2sgdGhlIGZpcnN0IGxvYWRhYmxlIHNlZ21lbnQuIElmIGl0cyBmaWxlIG9mZnNldAogICAvLyBpcyAwLCBpdCBzdGFydHMgd2l0aCB0aGUgRUxGIGhlYWRlciwgYW5kIHdlIGNhbiB0cml2aWFsbHkgZmluZCB0aGUKICAgLy8gbG9hZGVkIHByb2dyYW0gaGVhZGVyIGZyb20gaXQuCi0gIGZvciAoY29uc3QgRWxmX1BoZHIqIHBoZHIgPSBwaGRyX3RhYmxlXzsgcGhkciA8IHBoZHJfbGltaXQ7ICsrcGhkcikgeworICBmb3IgKGNvbnN0IEVsZlcoUGhkcikqIHBoZHIgPSBwaGRyX3RhYmxlXzsgcGhkciA8IHBoZHJfbGltaXQ7ICsrcGhkcikgewogICAgIGlmIChwaGRyLT5wX3R5cGUgPT0gUFRfTE9BRCkgewogICAgICAgaWYgKHBoZHItPnBfb2Zmc2V0ID09IDApIHsKLSAgICAgICAgRWxmX0FkZHIgIGVsZl9hZGRyID0gbG9hZF9iaWFzXyArIHBoZHItPnBfdmFkZHI7Ci0gICAgICAgIGNvbnN0IEVsZl9FaGRyKiBlaGRyID0gKGNvbnN0IEVsZl9FaGRyKikodm9pZCopZWxmX2FkZHI7Ci0gICAgICAgIEVsZl9BZGRyICBvZmZzZXQgPSBlaGRyLT5lX3Bob2ZmOwotICAgICAgICByZXR1cm4gQ2hlY2tQaGRyKChFbGZfQWRkcillaGRyICsgb2Zmc2V0KTsKKyAgICAgICAgRWxmVyhBZGRyKSAgZWxmX2FkZHIgPSBsb2FkX2JpYXNfICsgcGhkci0+cF92YWRkcjsKKyAgICAgICAgY29uc3QgRWxmVyhFaGRyKSogZWhkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRWxmVyhFaGRyKSo+KGVsZl9hZGRyKTsKKyAgICAgICAgRWxmVyhBZGRyKSAgb2Zmc2V0ID0gZWhkci0+ZV9waG9mZjsKKyAgICAgICAgcmV0dXJuIENoZWNrUGhkcigoRWxmVyhBZGRyKSllaGRyICsgb2Zmc2V0KTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTYxNCwxNyArNzY4LDE3IEBACiAvLyBFbnN1cmVzIHRoYXQgb3VyIHByb2dyYW0gaGVhZGVyIGlzIGFjdHVhbGx5IHdpdGhpbiBhIGxvYWRhYmxlCiAvLyBzZWdtZW50LiBUaGlzIHNob3VsZCBoZWxwIGNhdGNoIGJhZGx5LWZvcm1lZCBFTEYgZmlsZXMgdGhhdAogLy8gd291bGQgY2F1c2UgdGhlIGxpbmtlciB0byBjcmFzaCBsYXRlciB3aGVuIHRyeWluZyB0byBhY2Nlc3MgaXQuCi1ib29sIEVsZlJlYWRlcjo6Q2hlY2tQaGRyKEVsZl9BZGRyIGxvYWRlZCkgewotICBjb25zdCBFbGZfUGhkciogcGhkcl9saW1pdCA9IHBoZHJfdGFibGVfICsgcGhkcl9udW1fOwotICBFbGZfQWRkciBsb2FkZWRfZW5kID0gbG9hZGVkICsgKHBoZHJfbnVtXyAqIHNpemVvZihFbGZfUGhkcikpOwotICBmb3IgKEVsZl9QaGRyKiBwaGRyID0gcGhkcl90YWJsZV87IHBoZHIgPCBwaGRyX2xpbWl0OyArK3BoZHIpIHsKK2Jvb2wgRWxmUmVhZGVyOjpDaGVja1BoZHIoRWxmVyhBZGRyKSBsb2FkZWQpIHsKKyAgY29uc3QgRWxmVyhQaGRyKSogcGhkcl9saW1pdCA9IHBoZHJfdGFibGVfICsgcGhkcl9udW1fOworICBFbGZXKEFkZHIpIGxvYWRlZF9lbmQgPSBsb2FkZWQgKyAocGhkcl9udW1fICogc2l6ZW9mKEVsZlcoUGhkcikpKTsKKyAgZm9yIChFbGZXKFBoZHIpKiBwaGRyID0gcGhkcl90YWJsZV87IHBoZHIgPCBwaGRyX2xpbWl0OyArK3BoZHIpIHsKICAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0xPQUQpIHsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICBFbGZfQWRkciBzZWdfc3RhcnQgPSBwaGRyLT5wX3ZhZGRyICsgbG9hZF9iaWFzXzsKLSAgICBFbGZfQWRkciBzZWdfZW5kID0gcGhkci0+cF9maWxlc3ogKyBzZWdfc3RhcnQ7CisgICAgRWxmVyhBZGRyKSBzZWdfc3RhcnQgPSBwaGRyLT5wX3ZhZGRyICsgbG9hZF9iaWFzXzsKKyAgICBFbGZXKEFkZHIpIHNlZ19lbmQgPSBwaGRyLT5wX2ZpbGVzeiArIHNlZ19zdGFydDsKICAgICBpZiAoc2VnX3N0YXJ0IDw9IGxvYWRlZCAmJiBsb2FkZWRfZW5kIDw9IHNlZ19lbmQpIHsKLSAgICAgIGxvYWRlZF9waGRyXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRWxmX1BoZHIqPihsb2FkZWQpOworICAgICAgbG9hZGVkX3BoZHJfID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFbGZXKFBoZHIpKj4obG9hZGVkKTsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgfQpkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlcl9waGRyLmggYi9saW5rZXIvbGlua2VyX3BoZHIuaAppbmRleCBkYjE1YWM5Li42MTFmMWE3IDEwMDY0NAotLS0gYS9saW5rZXIvbGlua2VyX3BoZHIuaAorKysgYi9saW5rZXIvbGlua2VyX3BoZHIuaApAQCAtNDIsNjEgKzQyLDY2IEBACiAgIEVsZlJlYWRlcihjb25zdCBjaGFyKiBuYW1lLCBpbnQgZmQpOwogICB+RWxmUmVhZGVyKCk7CiAKLSAgYm9vbCBMb2FkKCk7CisgIGJvb2wgTG9hZChjb25zdCBhbmRyb2lkX2RsZXh0aW5mbyogZXh0aW5mbyk7CiAKICAgc2l6ZV90IHBoZHJfY291bnQoKSB7IHJldHVybiBwaGRyX251bV87IH0KLSAgRWxmX0FkZHIgbG9hZF9zdGFydCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RWxmX0FkZHI+KGxvYWRfc3RhcnRfKTsgfQorICBFbGZXKEFkZHIpIGxvYWRfc3RhcnQoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PEVsZlcoQWRkcik+KGxvYWRfc3RhcnRfKTsgfQogICBzaXplX3QgbG9hZF9zaXplKCkgeyByZXR1cm4gbG9hZF9zaXplXzsgfQotICBFbGZfQWRkciBsb2FkX2JpYXMoKSB7IHJldHVybiBsb2FkX2JpYXNfOyB9Ci0gIGNvbnN0IEVsZl9QaGRyKiBsb2FkZWRfcGhkcigpIHsgcmV0dXJuIGxvYWRlZF9waGRyXzsgfQorICBFbGZXKEFkZHIpIGxvYWRfYmlhcygpIHsgcmV0dXJuIGxvYWRfYmlhc187IH0KKyAgY29uc3QgRWxmVyhQaGRyKSogbG9hZGVkX3BoZHIoKSB7IHJldHVybiBsb2FkZWRfcGhkcl87IH0KIAogIHByaXZhdGU6CiAgIGJvb2wgUmVhZEVsZkhlYWRlcigpOwogICBib29sIFZlcmlmeUVsZkhlYWRlcigpOwogICBib29sIFJlYWRQcm9ncmFtSGVhZGVyKCk7Ci0gIGJvb2wgUmVzZXJ2ZUFkZHJlc3NTcGFjZSgpOworICBib29sIFJlc2VydmVBZGRyZXNzU3BhY2UoY29uc3QgYW5kcm9pZF9kbGV4dGluZm8qIGV4dGluZm8pOwogICBib29sIExvYWRTZWdtZW50cygpOwogICBib29sIEZpbmRQaGRyKCk7Ci0gIGJvb2wgQ2hlY2tQaGRyKEVsZl9BZGRyKTsKKyAgYm9vbCBDaGVja1BoZHIoRWxmVyhBZGRyKSk7CiAKICAgY29uc3QgY2hhciogbmFtZV87CiAgIGludCBmZF87CiAKLSAgRWxmX0VoZHIgaGVhZGVyXzsKKyAgRWxmVyhFaGRyKSBoZWFkZXJfOwogICBzaXplX3QgcGhkcl9udW1fOwogCiAgIHZvaWQqIHBoZHJfbW1hcF87Ci0gIEVsZl9QaGRyKiBwaGRyX3RhYmxlXzsKLSAgRWxmX0FkZHIgcGhkcl9zaXplXzsKKyAgRWxmVyhQaGRyKSogcGhkcl90YWJsZV87CisgIEVsZlcoQWRkcikgcGhkcl9zaXplXzsKIAogICAvLyBGaXJzdCBwYWdlIG9mIHJlc2VydmVkIGFkZHJlc3Mgc3BhY2UuCiAgIHZvaWQqIGxvYWRfc3RhcnRfOwogICAvLyBTaXplIGluIGJ5dGVzIG9mIHJlc2VydmVkIGFkZHJlc3Mgc3BhY2UuCiAgIHNpemVfdCBsb2FkX3NpemVfOwogICAvLyBMb2FkIGJpYXMuCi0gIEVsZl9BZGRyIGxvYWRfYmlhc187CisgIEVsZlcoQWRkcikgbG9hZF9iaWFzXzsKIAogICAvLyBMb2FkZWQgcGhkci4KLSAgY29uc3QgRWxmX1BoZHIqIGxvYWRlZF9waGRyXzsKKyAgY29uc3QgRWxmVyhQaGRyKSogbG9hZGVkX3BoZHJfOwogfTsKIAotc2l6ZV90IHBoZHJfdGFibGVfZ2V0X2xvYWRfc2l6ZShjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9BZGRyKiBtaW5fdmFkZHIgPSBOVUxMLCBFbGZfQWRkciogbWF4X3ZhZGRyID0gTlVMTCk7CitzaXplX3QgcGhkcl90YWJsZV9nZXRfbG9hZF9zaXplKGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZXKEFkZHIpKiBtaW5fdmFkZHIgPSBOVUxMLCBFbGZXKEFkZHIpKiBtYXhfdmFkZHIgPSBOVUxMKTsKIAotaW50IHBoZHJfdGFibGVfcHJvdGVjdF9zZWdtZW50cyhjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZl9BZGRyIGxvYWRfYmlhcyk7CitpbnQgcGhkcl90YWJsZV9wcm90ZWN0X3NlZ21lbnRzKGNvbnN0IEVsZlcoUGhkcikqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LCBFbGZXKEFkZHIpIGxvYWRfYmlhcyk7CiAKLWludCBwaGRyX3RhYmxlX3VucHJvdGVjdF9zZWdtZW50cyhjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZl9BZGRyIGxvYWRfYmlhcyk7CitpbnQgcGhkcl90YWJsZV91bnByb3RlY3Rfc2VnbWVudHMoY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZlcoQWRkcikgbG9hZF9iaWFzKTsKIAotaW50IHBoZHJfdGFibGVfcHJvdGVjdF9nbnVfcmVscm8oY29uc3QgRWxmX1BoZHIqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LCBFbGZfQWRkciBsb2FkX2JpYXMpOworaW50IHBoZHJfdGFibGVfcHJvdGVjdF9nbnVfcmVscm8oY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZlcoQWRkcikgbG9hZF9iaWFzKTsKIAoraW50IHBoZHJfdGFibGVfc2VyaWFsaXplX2dudV9yZWxybyhjb25zdCBFbGZXKFBoZHIpKiBwaGRyX3RhYmxlLCBzaXplX3QgcGhkcl9jb3VudCwgRWxmVyhBZGRyKSBsb2FkX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmZCk7CisKK2ludCBwaGRyX3RhYmxlX21hcF9nbnVfcmVscm8oY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZlcoQWRkcikgbG9hZF9iaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQpOwogCiAjaWYgZGVmaW5lZChfX2FybV9fKQotaW50IHBoZHJfdGFibGVfZ2V0X2FybV9leGlkeChjb25zdCBFbGZfUGhkciogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZl9BZGRyIGxvYWRfYmlhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmX0FkZHIqKiBhcm1fZXhpZHgsIHVuc2lnbmVkKiBhcm1fZXhpZGl4X2NvdW50KTsKK2ludCBwaGRyX3RhYmxlX2dldF9hcm1fZXhpZHgoY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsIEVsZlcoQWRkcikgbG9hZF9iaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZXKEFkZHIpKiogYXJtX2V4aWR4LCB1bnNpZ25lZCogYXJtX2V4aWRpeF9jb3VudCk7CiAjZW5kaWYKIAotdm9pZCBwaGRyX3RhYmxlX2dldF9keW5hbWljX3NlY3Rpb24oY29uc3QgRWxmX1BoZHIqIHBoZHJfdGFibGUsIHNpemVfdCBwaGRyX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmX0FkZHIgbG9hZF9iaWFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmX0R5bioqIGR5bmFtaWMsIHNpemVfdCogZHluYW1pY19jb3VudCwgRWxmX1dvcmQqIGR5bmFtaWNfZmxhZ3MpOwordm9pZCBwaGRyX3RhYmxlX2dldF9keW5hbWljX3NlY3Rpb24oY29uc3QgRWxmVyhQaGRyKSogcGhkcl90YWJsZSwgc2l6ZV90IHBoZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZXKEFkZHIpIGxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZlcoRHluKSoqIGR5bmFtaWMsIHNpemVfdCogZHluYW1pY19jb3VudCwgRWxmVyhXb3JkKSogZHluYW1pY19mbGFncyk7CiAKICNlbmRpZiAvKiBMSU5LRVJfUEhEUl9IICovCmRpZmYgLS1naXQgYS9saW5rZXIvdGVzdHMvQW5kcm9pZC5tayBiL2xpbmtlci90ZXN0cy9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjRlNzcKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rZXIvdGVzdHMvQW5kcm9pZC5tawpAQCAtMCwwICsxLDM4IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCitpZm5lcSAoJChCVUlMRF9USU5ZX0FORFJPSUQpLHRydWUpCisKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX01PRFVMRSA6PSBsaW5rZXItdW5pdC10ZXN0cworTE9DQUxfTU9EVUxFX1NURU1fMzIgOj0gJChMT0NBTF9NT0RVTEUpMzIKK0xPQ0FMX01PRFVMRV9TVEVNXzY0IDo9ICQoTE9DQUxfTU9EVUxFKTY0CisKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5taworCitMT0NBTF9DRkxBR1MgKz0gLWcgLVdhbGwgLVdleHRyYSAtV3VudXNlZCAtV2Vycm9yIC1zdGQ9Z251KysxMQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKExPQ0FMX1BBVEgpLy4uLy4uL2xpYmMvCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisgIGxpbmtlZF9saXN0X3Rlc3QuY3BwIFwKKyAgbGlua2VyX2FsbG9jYXRvcl90ZXN0LmNwcCBcCisgIC4uL2xpbmtlcl9hbGxvY2F0b3IuY3BwCisKK2luY2x1ZGUgJChCVUlMRF9OQVRJVkVfVEVTVCkKKworZW5kaWYgIyAhQlVJTERfVElOWV9BTkRST0lECmRpZmYgLS1naXQgYS9saW5rZXIvdGVzdHMvbGlua2VkX2xpc3RfdGVzdC5jcHAgYi9saW5rZXIvdGVzdHMvbGlua2VkX2xpc3RfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4MTZmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpbmtlci90ZXN0cy9saW5rZWRfbGlzdF90ZXN0LmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlICIuLi9saW5rZWRfbGlzdC5oIgorCituYW1lc3BhY2UgeworCitib29sIGFsbG9jX2NhbGxlZCA9IGZhbHNlOworYm9vbCBmcmVlX2NhbGxlZCA9IGZhbHNlOworCitjbGFzcyBMaW5rZWRMaXN0VGVzdEFsbG9jYXRvciB7CisgcHVibGljOgorICB0eXBlZGVmIExpbmtlZExpc3RFbnRyeTxjb25zdCBjaGFyPiBlbnRyeV90OworCisgIHN0YXRpYyBlbnRyeV90KiBhbGxvYygpIHsKKyAgICBhbGxvY19jYWxsZWQgPSB0cnVlOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGVudHJ5X3QqPig6Om1hbGxvYyhzaXplb2YoZW50cnlfdCkpKTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIGZyZWUoZW50cnlfdCogcCkgeworICAgIGZyZWVfY2FsbGVkID0gdHJ1ZTsKKyAgICA6OmZyZWUocCk7CisgIH0KKyBwcml2YXRlOgorICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoTGlua2VkTGlzdFRlc3RBbGxvY2F0b3IpOworfTsKKwordHlwZWRlZiBMaW5rZWRMaXN0PGNvbnN0IGNoYXIsIExpbmtlZExpc3RUZXN0QWxsb2NhdG9yPiB0ZXN0X2xpc3RfdDsKKworc3RkOjpzdHJpbmcgdGVzdF9saXN0X3RvX3N0cmluZyh0ZXN0X2xpc3RfdCYgbGlzdCkgeworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgbGlzdC5mb3JfZWFjaChbJl0gKGNvbnN0IGNoYXIqIGMpIHsKKyAgICBzcyA8PCBjOworICB9KTsKKworICByZXR1cm4gc3Muc3RyKCk7Cit9CisKK307CisKK1RFU1QobGlua2VkX2xpc3QsIHNpbXBsZSkgeworICBhbGxvY19jYWxsZWQgPSBmcmVlX2NhbGxlZCA9IGZhbHNlOworICB0ZXN0X2xpc3RfdCBsaXN0OworICBBU1NFUlRfRVEoIiIsIHRlc3RfbGlzdF90b19zdHJpbmcobGlzdCkpOworICBBU1NFUlRfVFJVRSghYWxsb2NfY2FsbGVkKTsKKyAgQVNTRVJUX1RSVUUoIWZyZWVfY2FsbGVkKTsKKyAgbGlzdC5wdXNoX2Zyb250KCJhIik7CisgIEFTU0VSVF9UUlVFKGFsbG9jX2NhbGxlZCk7CisgIEFTU0VSVF9UUlVFKCFmcmVlX2NhbGxlZCk7CisgIEFTU0VSVF9FUSgiYSIsIHRlc3RfbGlzdF90b19zdHJpbmcobGlzdCkpOworICBsaXN0LnB1c2hfZnJvbnQoImIiKTsKKyAgQVNTRVJUX0VRKCJiYSIsIHRlc3RfbGlzdF90b19zdHJpbmcobGlzdCkpOworICBsaXN0LnB1c2hfZnJvbnQoImMiKTsKKyAgbGlzdC5wdXNoX2Zyb250KCJkIik7CisgIEFTU0VSVF9FUSgiZGNiYSIsIHRlc3RfbGlzdF90b19zdHJpbmcobGlzdCkpOworICBBU1NFUlRfVFJVRShhbGxvY19jYWxsZWQpOworICBBU1NFUlRfVFJVRSghZnJlZV9jYWxsZWQpOworICBhbGxvY19jYWxsZWQgPSBmcmVlX2NhbGxlZCA9IGZhbHNlOworICBsaXN0LnJlbW92ZV9pZihbXSAoY29uc3QgY2hhciogYykgeworICAgIHJldHVybiAqYyA9PSAnYyc7CisgIH0pOworCisgIEFTU0VSVF9UUlVFKCFhbGxvY19jYWxsZWQpOworICBBU1NFUlRfVFJVRSghZnJlZV9jYWxsZWQpOworCisgIEFTU0VSVF9FUSgiZGJhIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7CisgIGFsbG9jX2NhbGxlZCA9IGZyZWVfY2FsbGVkID0gZmFsc2U7CisgIGxpc3QucmVtb3ZlX2lmKFtdIChjb25zdCBjaGFyKiBjKSB7CisgICAgcmV0dXJuICpjID09ICcyJzsKKyAgfSk7CisgIEFTU0VSVF9UUlVFKCFhbGxvY19jYWxsZWQpOworICBBU1NFUlRfVFJVRSghZnJlZV9jYWxsZWQpOworICBBU1NFUlRfRVEoImRiYSIsIHRlc3RfbGlzdF90b19zdHJpbmcobGlzdCkpOworICBsaXN0LmNsZWFyKCk7CisgIEFTU0VSVF9UUlVFKCFhbGxvY19jYWxsZWQpOworICBBU1NFUlRfVFJVRShmcmVlX2NhbGxlZCk7CisgIEFTU0VSVF9FUSgiIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7Cit9CisKK1RFU1QobGlua2VkX2xpc3QsIHB1c2hfcG9wKSB7CisgIHRlc3RfbGlzdF90IGxpc3Q7CisgIGxpc3QucHVzaF9mcm9udCgiYiIpOworICBsaXN0LnB1c2hfZnJvbnQoImEiKTsKKyAgQVNTRVJUX0VRKCJhYiIsIHRlc3RfbGlzdF90b19zdHJpbmcobGlzdCkpOworICBsaXN0LnB1c2hfYmFjaygiYyIpOworICBBU1NFUlRfRVEoImFiYyIsIHRlc3RfbGlzdF90b19zdHJpbmcobGlzdCkpOworICBBU1NFUlRfRVEoImEiLCBsaXN0LnBvcF9mcm9udCgpKTsKKyAgQVNTRVJUX0VRKCJiYyIsIHRlc3RfbGlzdF90b19zdHJpbmcobGlzdCkpOworICBBU1NFUlRfRVEoImIiLCBsaXN0LnBvcF9mcm9udCgpKTsKKyAgQVNTRVJUX0VRKCJjIiwgdGVzdF9saXN0X3RvX3N0cmluZyhsaXN0KSk7CisgIEFTU0VSVF9FUSgiYyIsIGxpc3QucG9wX2Zyb250KCkpOworICBBU1NFUlRfRVEoIiIsIHRlc3RfbGlzdF90b19zdHJpbmcobGlzdCkpOworICBBU1NFUlRfVFJVRShsaXN0LnBvcF9mcm9udCgpID09IG51bGxwdHIpOworICBsaXN0LnB1c2hfYmFjaygiciIpOworICBBU1NFUlRfRVEoInIiLCB0ZXN0X2xpc3RfdG9fc3RyaW5nKGxpc3QpKTsKKyAgQVNTRVJUX0VRKCJyIiwgbGlzdC5wb3BfZnJvbnQoKSk7CisgIEFTU0VSVF9UUlVFKGxpc3QucG9wX2Zyb250KCkgPT0gbnVsbHB0cik7Cit9CmRpZmYgLS1naXQgYS9saW5rZXIvdGVzdHMvbGlua2VyX2FsbG9jYXRvcl90ZXN0LmNwcCBiL2xpbmtlci90ZXN0cy9saW5rZXJfYWxsb2NhdG9yX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyOTJhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rZXIvdGVzdHMvbGlua2VyX2FsbG9jYXRvcl90ZXN0LmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgIi4uL2xpbmtlcl9hbGxvY2F0b3IuaCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCituYW1lc3BhY2UgeworCitzdHJ1Y3QgdGVzdF9zdHJ1Y3Rfbm9taW5hbCB7CisgIHZvaWQqIHBvaW50ZXI7CisgIHNzaXplX3QgdmFsdWU7Cit9OworCisvKgorICogdGhpcyBvbmUgaGFzIHNpemUgYmVsb3cgYWxsb2NhdG9yIGNhcCB3aGljaCBpcyAyKnNpemVvZih2b2lkKikKKyAqLworc3RydWN0IHRlc3Rfc3RydWN0X3NtYWxsIHsKKyAgY2hhciBkdW1teV9zdHJbNV07Cit9OworCisvKgorICogMTAwOSBieXRlIHN0cnVjdCAoMTAwOSBpcyBwcmltZSkKKyAqLworc3RydWN0IHRlc3Rfc3RydWN0X2xhcmdlciB7CisgIGNoYXIgZHVtbXlfc3RyWzEwMDldOworfTsKKworc3RhdGljIHNpemVfdCBrUGFnZVNpemUgPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpOworfTsKKworVEVTVChsaW5rZXJfYWxsb2NhdG9yLCB0ZXN0X25vbWluYWwpIHsKKyAgTGlua2VyQWxsb2NhdG9yPHRlc3Rfc3RydWN0X25vbWluYWw+IGFsbG9jYXRvcjsKKworICB0ZXN0X3N0cnVjdF9ub21pbmFsKiBwdHIxID0gYWxsb2NhdG9yLmFsbG9jKCk7CisgIEFTU0VSVF9UUlVFKHB0cjEgIT0gbnVsbHB0cik7CisgIHRlc3Rfc3RydWN0X25vbWluYWwqIHB0cjIgPSBhbGxvY2F0b3IuYWxsb2MoKTsKKyAgQVNTRVJUX1RSVUUocHRyMiAhPSBudWxscHRyKTsKKyAgLy8gdGhleSBzaG91bGQgYmUgbmV4dCB0byBlYWNoIG90aGVyLgorICBBU1NFUlRfRVEocHRyMSsxLCBwdHIyKTsKKworICBwdHIxLT52YWx1ZSA9IDQyOworCisgIGFsbG9jYXRvci5mcmVlKHB0cjEpOworICBhbGxvY2F0b3IuZnJlZShwdHIyKTsKK30KKworVEVTVChsaW5rZXJfYWxsb2NhdG9yLCB0ZXN0X3NtYWxsKSB7CisgIExpbmtlckFsbG9jYXRvcjx0ZXN0X3N0cnVjdF9zbWFsbD4gYWxsb2NhdG9yOworCisgIGNoYXIqIHB0cjEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihhbGxvY2F0b3IuYWxsb2MoKSk7CisgIGNoYXIqIHB0cjIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihhbGxvY2F0b3IuYWxsb2MoKSk7CisKKyAgQVNTRVJUX1RSVUUocHRyMSAhPSBudWxscHRyKTsKKyAgQVNTRVJUX1RSVUUocHRyMiAhPSBudWxscHRyKTsKKyAgQVNTRVJUX0VRKHB0cjErMipzaXplb2Yodm9pZCopLCBwdHIyKTsKK30KKworVEVTVChsaW5rZXJfYWxsb2NhdG9yLCB0ZXN0X2xhcmdlcikgeworICBMaW5rZXJBbGxvY2F0b3I8dGVzdF9zdHJ1Y3RfbGFyZ2VyPiBhbGxvY2F0b3I7CisKKyAgdGVzdF9zdHJ1Y3RfbGFyZ2VyKiBwdHIxID0gYWxsb2NhdG9yLmFsbG9jKCk7CisgIHRlc3Rfc3RydWN0X2xhcmdlciogcHRyMiA9IGFsbG9jYXRvci5hbGxvYygpOworCisgIEFTU0VSVF9UUlVFKHB0cjEgIT0gbnVsbHB0cik7CisgIEFTU0VSVF9UUlVFKHB0cjIgIT0gbnVsbHB0cik7CisKKyAgQVNTRVJUX0VRKHB0cjErMSwgcHRyMik7CisKKyAgLy8gbGV0cyBhbGxvY2F0ZSB1bnRpbCB3ZSByZWFjaCBuZXh0IHBhZ2UuCisgIHNpemVfdCBuID0ga1BhZ2VTaXplL3NpemVvZih0ZXN0X3N0cnVjdF9sYXJnZXIpICsgMSAtIDI7CisKKyAgZm9yIChzaXplX3QgaT0wOyBpPG47ICsraSkgeworICAgIEFTU0VSVF9UUlVFKGFsbG9jYXRvci5hbGxvYygpICE9IG51bGxwdHIpOworICB9CisKKyAgdGVzdF9zdHJ1Y3RfbGFyZ2VyKiBwdHJfdG9fZnJlZSA9IGFsbG9jYXRvci5hbGxvYygpOworICBBU1NFUlRfVFJVRShwdHJfdG9fZnJlZSAhPSBudWxscHRyKTsKKyAgYWxsb2NhdG9yLmZyZWUocHRyMSk7Cit9CisKK3N0YXRpYyB2b2lkIHByb3RlY3RfYWxsKCkgeworICBMaW5rZXJBbGxvY2F0b3I8dGVzdF9zdHJ1Y3RfbGFyZ2VyPiBhbGxvY2F0b3I7CisKKyAgLy8gbnVtYmVyIG9mIGFsbG9jcyB0byByZWFjaCB0aGUgZW5kIG9mIGZpcnN0IHBhZ2UKKyAgc2l6ZV90IG4gPSBrUGFnZVNpemUvc2l6ZW9mKHRlc3Rfc3RydWN0X2xhcmdlcikgLSAxOworICB0ZXN0X3N0cnVjdF9sYXJnZXIqIHBhZ2UxX3B0ciA9IGFsbG9jYXRvci5hbGxvYygpOworCisgIGZvciAoc2l6ZV90IGk9MDsgaTxuOyArK2kpIHsKKyAgICBhbGxvY2F0b3IuYWxsb2MoKTsKKyAgfQorCisgIHRlc3Rfc3RydWN0X2xhcmdlciogcGFnZTJfcHRyID0gYWxsb2NhdG9yLmFsbG9jKCk7CisgIGFsbG9jYXRvci5wcm90ZWN0X2FsbChQUk9UX1JFQUQpOworICBhbGxvY2F0b3IucHJvdGVjdF9hbGwoUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisgIC8vIGNoZWNrIGFjY2VzcworICBwYWdlMl9wdHItPmR1bW15X3N0clsyM10gPSAyNzsKKyAgcGFnZTFfcHRyLT5kdW1teV9zdHJbMTNdID0gMTE7CisKKyAgYWxsb2NhdG9yLnByb3RlY3RfYWxsKFBST1RfUkVBRCk7CisgIGZwcmludGYoc3RkZXJyLCAidHJ5aW5nIHRvIGFjY2VzcyBwcm90ZWN0ZWQgcGFnZSIpOworCisgIC8vIHRoaXMgc2hvdWxkIHJlc3VsdCBpbiBzZWdtZW50YXRpb24gZmF1bHQKKyAgcGFnZTFfcHRyLT5kdW1teV9zdHJbMTFdID0gNzsKK30KKworVEVTVChsaW5rZXJfYWxsb2NhdG9yLCB0ZXN0X3Byb3RlY3QpIHsKKyAgdGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgQVNTRVJUX0VYSVQocHJvdGVjdF9hbGwoKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHU0VHViksICJ0cnlpbmcgdG8gYWNjZXNzIHByb3RlY3RlZCBwYWdlIik7Cit9CisKZGlmZiAtLWdpdCBhL3Rlc3RzL0FuZHJvaWQuYnVpbGQubWsgYi90ZXN0cy9BbmRyb2lkLmJ1aWxkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YjAzOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9BbmRyb2lkLmJ1aWxkLm1rCkBAIC0wLDAgKzEsOTUgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9NT0RVTEUgOj0gJChtb2R1bGUpCitMT0NBTF9NT0RVTEVfVEFHUyA6PSAkKG1vZHVsZV90YWcpCitpZmVxICgkKGJ1aWxkX3R5cGUpLGhvc3QpCisjIEFsd2F5cyBtYWtlIGhvc3QgbXVsdGlsaWIKK0xPQ0FMX01VTFRJTElCIDo9IGJvdGgKK2VuZGlmCisKK2lmbmVxICgkKGZpbmRzdHJpbmcgTElCUkFSWSwgJChidWlsZF90YXJnZXQpKSxMSUJSQVJZKQorICAgIExPQ0FMX01PRFVMRV9TVEVNXzMyIDo9ICQobW9kdWxlKTMyCisgICAgTE9DQUxfTU9EVUxFX1NURU1fNjQgOj0gJChtb2R1bGUpNjQKK2Vsc2UKK2lmZXEgKCQoJChtb2R1bGUpX2luc3RhbGxfdG9fb3V0X2RhdGEpLHRydWUpCisgICAgTE9DQUxfTU9EVUxFX1BBVEhfMzIgOj0gJCgkKFRBUkdFVF8yTkRfQVJDSF9WQVJfUFJFRklYKVRBUkdFVF9PVVRfREFUQV9OQVRJVkVfVEVTVFMpLyQobW9kdWxlKQorICAgIExPQ0FMX01PRFVMRV9QQVRIXzY0IDo9ICQoVEFSR0VUX09VVF9EQVRBX05BVElWRV9URVNUUykvJChtb2R1bGUpCitlbmRpZgorZW5kaWYKKworTE9DQUxfQ0xBTkcgOj0gJCgkKG1vZHVsZSlfY2xhbmdfJChidWlsZF90eXBlKSkKKworTE9DQUxfRk9SQ0VfU1RBVElDX0VYRUNVVEFCTEUgOj0gJCgkKG1vZHVsZSlfZm9yY2Vfc3RhdGljX2V4ZWN1dGFibGUpCisKK0xPQ0FMX0NGTEFHUyA6PSBcCisgICAgJChjb21tb25fY2ZsYWdzKSBcCisgICAgJCgkKG1vZHVsZSlfY2ZsYWdzKSBcCisgICAgJCgkKG1vZHVsZSlfY2ZsYWdzXyQoYnVpbGRfdHlwZSkpIFwKKworTE9DQUxfQ09OTFlGTEFHUyArPSBcCisgICAgJChjb21tb25fY29ubHlmbGFncykgXAorICAgICQoJChtb2R1bGUpX2Nvbmx5ZmxhZ3MpIFwKKyAgICAkKCQobW9kdWxlKV9jb25seWZsYWdzXyQoYnVpbGRfdHlwZSkpIFwKKworTE9DQUxfQ1BQRkxBR1MgKz0gXAorICAgICQoY29tbW9uX2NwcGZsYWdzKSBcCisgICAgJCgkKG1vZHVsZSlfY3BwZmxhZ3MpIFwKKyAgICAkKCQobW9kdWxlKV9jcHBmbGFnc18kKGJ1aWxkX3R5cGUpKSBcCisKK0xPQ0FMX0NfSU5DTFVERVMgOj0gXAorICAgICQoY29tbW9uX2NfaW5jbHVkZXMpIFwKKyAgICAkKCQobW9kdWxlKV9jX2luY2x1ZGVzKSBcCisgICAgJCgkKG1vZHVsZSlfY19pbmNsdWRlc18kKGJ1aWxkX3R5cGUpKSBcCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisgICAgJCgkKG1vZHVsZSlfc3JjX2ZpbGVzKSBcCisgICAgJCgkKG1vZHVsZSlfc3JjX2ZpbGVzXyQoYnVpbGRfdHlwZSkpIFwKKworTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCisgICAgJCgkKG1vZHVsZSlfc3RhdGljX2xpYnJhcmllcykgXAorICAgICQoJChtb2R1bGUpX3N0YXRpY19saWJyYXJpZXNfJChidWlsZF90eXBlKSkgXAorCitMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKKyAgICAkKCQobW9kdWxlKV9zaGFyZWRfbGlicmFyaWVzKSBcCisgICAgJCgkKG1vZHVsZSlfc2hhcmVkX2xpYnJhcmllc18kKGJ1aWxkX3R5cGUpKSBcCisKK0xPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gXAorICAgICQoJChtb2R1bGUpX3dob2xlX3N0YXRpY19saWJyYXJpZXMpIFwKKyAgICAkKCQobW9kdWxlKV93aG9sZV9zdGF0aWNfbGlicmFyaWVzXyQoYnVpbGRfdHlwZSkpIFwKKworTE9DQUxfTERGTEFHUyA6PSBcCisgICAgJCgkKG1vZHVsZSlfbGRmbGFncykgXAorICAgICQoJChtb2R1bGUpX2xkZmxhZ3NfJChidWlsZF90eXBlKSkgXAorCitMT0NBTF9MRExJQlMgOj0gXAorICAgICQoJChtb2R1bGUpX2xkbGlicykgXAorICAgICQoJChtb2R1bGUpX2xkbGlic18kKGJ1aWxkX3R5cGUpKSBcCisKK2lmZXEgKCQoYnVpbGRfdHlwZSksdGFyZ2V0KQorICBpbmNsdWRlIGV4dGVybmFsL3N0bHBvcnQvbGlic3RscG9ydC5taworCisgIGluY2x1ZGUgJChCVUlMRF8kKGJ1aWxkX3RhcmdldCkpCitlbmRpZgorCitpZmVxICgkKGJ1aWxkX3R5cGUpLGhvc3QpCisgICMgT25seSBidWlsZCBpZiBob3N0IGJ1aWxkcyBhcmUgc3VwcG9ydGVkLgorICBpZmVxICgkKGJ1aWxkX2hvc3QpLHRydWUpCisgICAgaW5jbHVkZSAkKEJVSUxEX0hPU1RfJChidWlsZF90YXJnZXQpKQorICBlbmRpZgorZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL0FuZHJvaWQubWsgYi90ZXN0cy9BbmRyb2lkLm1rCmluZGV4IGVlMjJjMzUuLjgxODRiZjcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL0FuZHJvaWQubWsKKysrIGIvdGVzdHMvQW5kcm9pZC5tawpAQCAtMjIsMTgyICsyMiwzMjYgQEAKICMgVW5pdCB0ZXN0cy4KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdGVzdF9jX2ZsYWdzID0gXAoraWZlcSAoJChIT1NUX09TKS0kKEhPU1RfQVJDSCksJChmaWx0ZXIgJChIT1NUX09TKS0kKEhPU1RfQVJDSCksbGludXgteDg2IGxpbnV4LXg4Nl82NCkpCitidWlsZF9ob3N0IDo9IHRydWUKK2Vsc2UKK2J1aWxkX2hvc3QgOj0gZmFsc2UKK2VuZGlmCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWxsIHN0YW5kYXJkIHRlc3RzLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGVzdF9jZmxhZ3MgPSBcCiAgICAgLWZzdGFjay1wcm90ZWN0b3ItYWxsIFwKICAgICAtZyBcCi0gICAgLVdhbGwgLVdleHRyYSBcCisgICAgLVdhbGwgLVdleHRyYSAtV3VudXNlZCBcCiAgICAgLVdlcnJvciBcCiAgICAgLWZuby1idWlsdGluIFwKIAotaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtNjQpCi0gICQoaW5mbyBUT0RPOiAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsgLWZzdGFjay1wcm90ZWN0b3Igbm90IHlldCBhdmFpbGFibGUgZm9yIHRoZSBBQXJjaDY0IHRvb2xjaGFpbikKLSAgdGVzdF9jX2ZsYWdzICs9IC1mbm8tc3RhY2stcHJvdGVjdG9yCi1lbmRpZiAjIGFybTY0Cit0ZXN0X2NmbGFncyArPSAtRF9fU1REQ19MSU1JVF9NQUNST1MgICMgRm9yIGdsaWJjLgogCi10ZXN0X3NyY19maWxlcyA9IFwKK2lmZXEgKCQoTUFMTE9DX0lNUEwpLGRsbWFsbG9jKQordGVzdF9jZmxhZ3MgKz0gLURVU0VfRExNQUxMT0MKK2Vsc2UKK3Rlc3RfY2ZsYWdzICs9IC1EVVNFX0pFTUFMTE9DCitlbmRpZgorCit0ZXN0X2NwcGZsYWdzID0gXAorICAgIC1zdGQ9Z251KysxMSBcCisKK2xpYkJpb25pY1N0YW5kYXJkVGVzdHNfc3JjX2ZpbGVzIDo9IFwKKyAgICBhcnBhX2luZXRfdGVzdC5jcHAgXAogICAgIGJ1ZmZlcl90ZXN0cy5jcHAgXAorICAgIGN0eXBlX3Rlc3QuY3BwIFwKICAgICBkaXJlbnRfdGVzdC5jcHAgXAogICAgIGV2ZW50ZmRfdGVzdC5jcHAgXAogICAgIGZjbnRsX3Rlc3QuY3BwIFwKICAgICBmZW52X3Rlc3QuY3BwIFwKKyAgICBmdHdfdGVzdC5jcHAgXAogICAgIGdldGF1eHZhbF90ZXN0LmNwcCBcCiAgICAgZ2V0Y3dkX3Rlc3QuY3BwIFwKICAgICBpbnR0eXBlc190ZXN0LmNwcCBcCiAgICAgbGliY19sb2dnaW5nX3Rlc3QuY3BwIFwKICAgICBsaWJnZW5fdGVzdC5jcHAgXAorICAgIGxvY2FsZV90ZXN0LmNwcCBcCiAgICAgbWFsbG9jX3Rlc3QuY3BwIFwKKyAgICBtYXRoX2Nvc190ZXN0LmNwcCBcCisgICAgbWF0aF9jb3NmX3Rlc3QuY3BwIFwKKyAgICBtYXRoX2V4cF90ZXN0LmNwcCBcCisgICAgbWF0aF9leHBmX3Rlc3QuY3BwIFwKKyAgICBtYXRoX2xvZ190ZXN0LmNwcCBcCisgICAgbWF0aF9sb2dmX3Rlc3QuY3BwIFwKKyAgICBtYXRoX3Bvd190ZXN0LmNwcCBcCisgICAgbWF0aF9wb3dmX3Rlc3QuY3BwIFwKKyAgICBtYXRoX3Npbl90ZXN0LmNwcCBcCisgICAgbWF0aF9zaW5mX3Rlc3QuY3BwIFwKKyAgICBtYXRoX3NpbmNvc190ZXN0LmNwcCBcCisgICAgbWF0aF9zaW5jb3NmX3Rlc3QuY3BwIFwKKyAgICBtYXRoX3Rhbl90ZXN0LmNwcCBcCisgICAgbWF0aF90YW5mX3Rlc3QuY3BwIFwKICAgICBtYXRoX3Rlc3QuY3BwIFwKKyAgICBtbnRlbnRfdGVzdC5jcHAgXAogICAgIG5ldGRiX3Rlc3QuY3BwIFwKICAgICBwdGhyZWFkX3Rlc3QuY3BwIFwKICAgICByZWdleF90ZXN0LmNwcCBcCiAgICAgc2NoZWRfdGVzdC5jcHAgXAorICAgIHNlYXJjaF90ZXN0LmNwcCBcCiAgICAgc2lnbmFsX3Rlc3QuY3BwIFwKICAgICBzdGFja19wcm90ZWN0b3JfdGVzdC5jcHAgXAogICAgIHN0YWNrX3Vud2luZGluZ190ZXN0LmNwcCBcCi0gICAgc3RhdHZmc190ZXN0LmNwcCBcCisgICAgc3RkYXRvbWljX3Rlc3QuY3BwIFwKKyAgICBzdGRpbnRfdGVzdC5jcHAgXAogICAgIHN0ZGlvX3Rlc3QuY3BwIFwKICAgICBzdGRsaWJfdGVzdC5jcHAgXAogICAgIHN0cmluZ190ZXN0LmNwcCBcCiAgICAgc3RyaW5nc190ZXN0LmNwcCBcCiAgICAgc3R1YnNfdGVzdC5jcHAgXAorICAgIHNzdHJlYW1fdGVzdC5jcHAgXAogICAgIHN5c19lcG9sbF90ZXN0LmNwcCBcCiAgICAgc3lzX21tYW5fdGVzdC5jcHAgXAogICAgIHN5c19yZXNvdXJjZV90ZXN0LmNwcCBcCiAgICAgc3lzX3NlbGVjdF90ZXN0LmNwcCBcCiAgICAgc3lzX3NlbmRmaWxlX3Rlc3QuY3BwIFwKKyAgICBzeXNfc29ja2V0X3Rlc3QuY3BwIFwKICAgICBzeXNfc3RhdF90ZXN0LmNwcCBcCisgICAgc3lzX3N0YXR2ZnNfdGVzdC5jcHAgXAogICAgIHN5c19zeXNjYWxsX3Rlc3QuY3BwIFwKICAgICBzeXNfdGltZV90ZXN0LmNwcCBcCiAgICAgc3lzX3R5cGVzX3Rlc3QuY3BwIFwKKyAgICBzeXNfdmZzX3Rlc3QuY3BwIFwKICAgICBzeXN0ZW1fcHJvcGVydGllc190ZXN0LmNwcCBcCiAgICAgdGltZV90ZXN0LmNwcCBcCisgICAgdWNoYXJfdGVzdC5jcHAgXAogICAgIHVuaXN0ZF90ZXN0LmNwcCBcCisgICAgd2NoYXJfdGVzdC5jcHAgXAogCi10ZXN0X2R5bmFtaWNfbGRmbGFncyA9IC1XbCwtLWV4cG9ydC1keW5hbWljIC1XbCwtdSxEbFN5bVRlc3RGdW5jdGlvbgotdGVzdF9keW5hbWljX3NyY19maWxlcyA9IFwKLSAgICBkbGZjbl90ZXN0LmNwcCBcCitsaWJCaW9uaWNTdGFuZGFyZFRlc3RzX2NmbGFncyA6PSBcCisgICAgJCh0ZXN0X2NmbGFncykgXAogCi10ZXN0X2ZvcnRpZnlfc3RhdGljX2xpYnJhcmllcyA9IFwKLSAgICBmb3J0aWZ5MS10ZXN0cy1nY2MgZm9ydGlmeTItdGVzdHMtZ2NjIGZvcnRpZnkxLXRlc3RzLWNsYW5nIGZvcnRpZnkyLXRlc3RzLWNsYW5nCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IGJpb25pYy11bml0LXRlc3RzLXVud2luZC10ZXN0LWltcGwKLUxPQ0FMX0NGTEFHUyArPSAkKHRlc3RfY19mbGFncykgLWZleGNlcHRpb25zIC1mbm9uLWNhbGwtZXhjZXB0aW9ucwotTE9DQUxfU1JDX0ZJTEVTIDo9IHN0YWNrX3Vud2luZGluZ190ZXN0X2ltcGwuYwotaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSA6PSBiaW9uaWMtdW5pdC10ZXN0cy11bndpbmQtdGVzdC1pbXBsLWhvc3QKLUxPQ0FMX0NGTEFHUyArPSAkKHRlc3RfY19mbGFncykgLWZleGNlcHRpb25zIC1mbm9uLWNhbGwtZXhjZXB0aW9ucwotTE9DQUxfU1JDX0ZJTEVTIDo9IHN0YWNrX3Vud2luZGluZ190ZXN0X2ltcGwuYwotaW5jbHVkZSAkKEJVSUxEX0hPU1RfU1RBVElDX0xJQlJBUlkpCi0KLSMgQnVpbGQgdGVzdHMgZm9yIHRoZSBkZXZpY2UgKHdpdGggYmlvbmljJ3MgLnNvKS4gUnVuIHdpdGg6Ci0jICAgYWRiIHNoZWxsIC9kYXRhL25hdGl2ZXRlc3QvYmlvbmljLXVuaXQtdGVzdHMvYmlvbmljLXVuaXQtdGVzdHMKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IGJpb25pYy11bml0LXRlc3RzCi1MT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKLUxPQ0FMX0NGTEFHUyArPSAkKHRlc3RfY19mbGFncykKLUxPQ0FMX0xERkxBR1MgKz0gJCh0ZXN0X2R5bmFtaWNfbGRmbGFncykKLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgKz0gbGliZGwKLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKHRlc3Rfc3JjX2ZpbGVzKSAkKHRlc3RfZHluYW1pY19zcmNfZmlsZXMpCi1MT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9ICQodGVzdF9mb3J0aWZ5X3N0YXRpY19saWJyYXJpZXMpCi1MT0NBTF9TVEFUSUNfTElCUkFSSUVTICs9IGJpb25pYy11bml0LXRlc3RzLXVud2luZC10ZXN0LWltcGwKLWluY2x1ZGUgJChCVUlMRF9OQVRJVkVfVEVTVCkKLQotIyBCdWlsZCB0ZXN0cyBmb3IgdGhlIGRldmljZSAod2l0aCBiaW9uaWMncyAuYSkuIFJ1biB3aXRoOgotIyAgIGFkYiBzaGVsbCAvZGF0YS9uYXRpdmV0ZXN0L2Jpb25pYy11bml0LXRlc3RzLXN0YXRpYy9iaW9uaWMtdW5pdC10ZXN0cy1zdGF0aWMKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IGJpb25pYy11bml0LXRlc3RzLXN0YXRpYwotTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCi1MT0NBTF9GT1JDRV9TVEFUSUNfRVhFQ1VUQUJMRSA6PSB0cnVlCi1MT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTICs9IGxpYkJpb25pY1Rlc3RzCi1MT0NBTF9TVEFUSUNfTElCUkFSSUVTICs9IGxpYnN0bHBvcnRfc3RhdGljIGxpYnN0ZGMrKyBsaWJtIGxpYmMKLWluY2x1ZGUgJChCVUlMRF9OQVRJVkVfVEVTVCkKLQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBXZSBidWlsZCB0aGUgc3RhdGljIHVuaXQgdGVzdHMgYXMgYSBsaWJyYXJ5IHNvIHRoZXkgY2FuIGJlIHVzZWQgYm90aCBmb3IKLSMgYmlvbmljLXVuaXQtdGVzdHMtc3RhdGljIGFuZCBhbHNvIGFzIHBhcnQgb2YgQ1RTLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSA6PSBsaWJCaW9uaWNUZXN0cwotTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCi1MT0NBTF9DRkxBR1MgKz0gJCh0ZXN0X2NfZmxhZ3MpCi1MT0NBTF9TUkNfRklMRVMgOj0gJCh0ZXN0X3NyY19maWxlcykKLUxPQ0FMX0NGTEFHUyArPSBcCi0gICAgLURHVEVTVF9PU19MSU5VWF9BTkRST0lEIFwKLSAgICAtREdURVNUX0hBU19TVERfU1RSSU5HIFwKLQotTE9DQUxfQ19JTkNMVURFUyArPSBcCi0gICAgYmlvbmljIGJpb25pYy9saWJzdGRjKysvaW5jbHVkZSBcCi0gICAgZXh0ZXJuYWwvZ3Rlc3QvaW5jbHVkZSBcCi0gICAgZXh0ZXJuYWwvc3RscG9ydC9zdGxwb3J0IFwKLQotTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFUyA6PSBcCi0gICAgJCh0ZXN0X2ZvcnRpZnlfc3RhdGljX2xpYnJhcmllcykgXAotICAgIGJpb25pYy11bml0LXRlc3RzLXVud2luZC10ZXN0LWltcGwgXAotCi1pbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGVzdCBsaWJyYXJ5IGZvciB0aGUgdW5pdCB0ZXN0cy4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBCdWlsZCBuby1lbGYtaGFzaC10YWJsZS1saWJyYXJ5LnNvIHRvIHRlc3QgZGxvcGVuKDMpIG9uIGEgbGlicmFyeSB0aGF0Ci0jIG9ubHkgaGFzIGEgR05VLXN0eWxlIGhhc2ggdGFibGUuIE1JUFMgZG9lc24ndCBzdXBwb3J0IEdOVSBoYXNoIHN0eWxlLgotaWZuZXEgKCQoVEFSR0VUX0FSQ0gpLG1pcHMpCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSA6PSBuby1lbGYtaGFzaC10YWJsZS1saWJyYXJ5Ci1MT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKLUxPQ0FMX1NSQ19GSUxFUyA6PSBlbXB0eS5jcHAKLUxPQ0FMX0xERkxBR1MgOj0gLVdsLC0taGFzaC1zdHlsZT1nbnUKLWluY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKK2lmZXEgKCQoTUFMTE9DX0lNUEwpLGRsbWFsbG9jKQorICBsaWJCaW9uaWNTdGFuZGFyZFRlc3RzX2NmbGFncyArPSAtRFVTRV9ETE1BTExPQworZWxzZQorICBsaWJCaW9uaWNTdGFuZGFyZFRlc3RzX2NmbGFncyArPSAtRFVTRV9KRU1BTExPQwogZW5kaWYKIAorbGliQmlvbmljU3RhbmRhcmRUZXN0c19jcHBmbGFncyA6PSBcCisgICAgJCh0ZXN0X2NwcGZsYWdzKSBcCisKK2xpYkJpb25pY1N0YW5kYXJkVGVzdHNfY19pbmNsdWRlcyA6PSBcCisgICAgYmlvbmljL2xpYmMgXAorCitsaWJCaW9uaWNTdGFuZGFyZFRlc3RzX2xkbGlic19ob3N0IDo9IFwKKyAgICAtbHJ0IFwKKworbGliQmlvbmljU3RhbmRhcmRUZXN0c193aG9sZV9zdGF0aWNfbGlicmFyaWVzIDo9IFwKKyAgICBsaWJCaW9uaWNVbndpbmRUZXN0IFwKKworbW9kdWxlIDo9IGxpYkJpb25pY1N0YW5kYXJkVGVzdHMKK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU1RBVElDX1RFU1RfTElCUkFSWQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKK2J1aWxkX3R5cGUgOj0gaG9zdAoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBVbml0IHRlc3RzIGJ1aWx0IGFnYWluc3QgZ2xpYmMuCisjIFNwZWNpYWwgc3RhY2sgdW53aW5kaW5nIHRlc3QgbGlicmFyeSBjb21waWxlZCB3aXRoIHNwZWNpYWwgZmxhZ3MuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJCaW9uaWNVbndpbmRUZXN0X2NmbGFncyA6PSBcCisgICAgJCh0ZXN0X2NmbGFncykgXAorICAgIC1mZXhjZXB0aW9ucyBcCisgICAgLWZub24tY2FsbC1leGNlcHRpb25zIFwKKworbGliQmlvbmljVW53aW5kVGVzdF9zcmNfZmlsZXMgOj0gXAorICAgIHN0YWNrX3Vud2luZGluZ190ZXN0X2ltcGwuYyBcCisKK21vZHVsZSA6PSBsaWJCaW9uaWNVbndpbmRUZXN0Cittb2R1bGVfdGFnIDo9IG9wdGlvbmFsCitidWlsZF90eXBlIDo9IHRhcmdldAorYnVpbGRfdGFyZ2V0IDo9IFNUQVRJQ19URVNUX0xJQlJBUlkKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCitidWlsZF90eXBlIDo9IGhvc3QKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9ydGlmeSB0ZXN0cy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQoZm9yZWFjaCBjb21waWxlcixnY2MgY2xhbmcsIFwKKyAgJChmb3JlYWNoIHRlc3QsMSAyLCBcCisgICAgJChldmFsIGZvcnRpZnkkKHRlc3QpLXRlc3RzLSQoY29tcGlsZXIpX2NmbGFncyA6PSBcCisgICAgICAkKHRlc3RfY2ZsYWdzKSBcCisgICAgICAtVV9GT1JUSUZZX1NPVVJDRSBcCisgICAgICAtRF9GT1JUSUZZX1NPVVJDRT0kKHRlc3QpIFwKKyAgICAgIC1EVEVTVF9OQU1FPUZvcnRpZnkkKHRlc3QpXyQoY29tcGlsZXIpKTsgXAorICAgICQoZXZhbCBmb3J0aWZ5JCh0ZXN0KS10ZXN0cy0kKGNvbXBpbGVyKV9jZmxhZ3NfaG9zdCA6PSBcCisgICAgICAtV25vLWVycm9yKTsgXAorICAgICQoZXZhbCBmb3J0aWZ5JCh0ZXN0KS10ZXN0cy0kKGNvbXBpbGVyKV9zcmNfZmlsZXMgOj0gXAorICAgICAgZm9ydGlmeV90ZXN0LmNwcCk7IFwKKyAgICAkKGV2YWwgZm9ydGlmeV9saWJzICs9IGZvcnRpZnkkKHRlc3QpLXRlc3RzLSQoY29tcGlsZXIpKTsgXAorICApIFwKKykKKworbW9kdWxlIDo9IGZvcnRpZnkxLXRlc3RzLWdjYworbW9kdWxlX3RhZyA6PSBvcHRpb25hbAorYnVpbGRfdHlwZSA6PSB0YXJnZXQKK2J1aWxkX3RhcmdldCA6PSBTVEFUSUNfVEVTVF9MSUJSQVJZCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC5taworYnVpbGRfdHlwZSA6PSBob3N0CitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC5taworCittb2R1bGUgOj0gZm9ydGlmeTItdGVzdHMtZ2NjCittb2R1bGVfdGFnIDo9IG9wdGlvbmFsCitidWlsZF90eXBlIDo9IHRhcmdldAorYnVpbGRfdGFyZ2V0IDo9IFNUQVRJQ19URVNUX0xJQlJBUlkKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCitidWlsZF90eXBlIDo9IGhvc3QKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKK2ZvcnRpZnkxLXRlc3RzLWNsYW5nX2NsYW5nX3RhcmdldCA6PSB0cnVlCitmb3J0aWZ5MS10ZXN0cy1jbGFuZ19jZmxhZ3NfaG9zdCA6PSAtRF9fY2xhbmdfXworCittb2R1bGUgOj0gZm9ydGlmeTEtdGVzdHMtY2xhbmcKK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU1RBVElDX1RFU1RfTElCUkFSWQoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKK2J1aWxkX3R5cGUgOj0gaG9zdAoraW5jbHVkZSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworZm9ydGlmeTItdGVzdHMtY2xhbmdfY2xhbmdfdGFyZ2V0IDo9IHRydWUKKworZm9ydGlmeTItdGVzdHMtY2xhbmdfY2ZsYWdzX2hvc3QgOj0gLURfX2NsYW5nX18KKworbW9kdWxlIDo9IGZvcnRpZnkyLXRlc3RzLWNsYW5nCittb2R1bGVfdGFnIDo9IG9wdGlvbmFsCitidWlsZF90eXBlIDo9IHRhcmdldAorYnVpbGRfdGFyZ2V0IDo9IFNUQVRJQ19URVNUX0xJQlJBUlkKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCitidWlsZF90eXBlIDo9IGhvc3QKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlicmFyeSBvZiBhbGwgdGVzdHMgKGV4Y2x1ZGluZyB0aGUgZHluYW1pYyBsaW5rZXIgdGVzdHMpLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGliQmlvbmljVGVzdHNfd2hvbGVfc3RhdGljX2xpYnJhcmllcyA6PSBcCisgICAgbGliQmlvbmljU3RhbmRhcmRUZXN0cyBcCisgICAgJChmb3J0aWZ5X2xpYnMpIFwKKworbW9kdWxlIDo9IGxpYkJpb25pY1Rlc3RzCittb2R1bGVfdGFnIDo9IG9wdGlvbmFsCitidWlsZF90eXBlIDo9IHRhcmdldAorYnVpbGRfdGFyZ2V0IDo9IFNUQVRJQ19URVNUX0xJQlJBUlkKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCitidWlsZF90eXBlIDo9IGhvc3QKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgZm9yIHRoZSBkZXZpY2UgdXNpbmcgYmlvbmljJ3MgLnNvLiBSdW4gd2l0aDoKKyMgICBhZGIgc2hlbGwgL2RhdGEvbmF0aXZldGVzdC9iaW9uaWMtdW5pdC10ZXN0cy9iaW9uaWMtdW5pdC10ZXN0czMyCisjICAgYWRiIHNoZWxsIC9kYXRhL25hdGl2ZXRlc3QvYmlvbmljLXVuaXQtdGVzdHMvYmlvbmljLXVuaXQtdGVzdHM2NAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYmlvbmljLXVuaXQtdGVzdHNfd2hvbGVfc3RhdGljX2xpYnJhcmllcyA6PSBcCisgICAgbGliQmlvbmljVGVzdHMgXAorCitiaW9uaWMtdW5pdC10ZXN0c19zcmNfZmlsZXMgOj0gXAorICAgIGF0ZXhpdF90ZXN0LmNwcCBcCisgICAgZGxleHRfdGVzdC5jcHAgXAorICAgIGRsZmNuX3Rlc3QuY3BwIFwKKworYmlvbmljLXVuaXQtdGVzdHNfY2ZsYWdzIDo9ICQodGVzdF9jZmxhZ3MpCitiaW9uaWMtdW5pdC10ZXN0c19jcHBmbGFncyA6PSAkKHRlc3RfY3BwZmxhZ3MpCisKK2Jpb25pYy11bml0LXRlc3RzX2xkZmxhZ3MgOj0gXAorICAgIC1XbCwtLWV4cG9ydC1keW5hbWljIFwKKyAgICAtV2wsLXUsRGxTeW1UZXN0RnVuY3Rpb24gXAorCitiaW9uaWMtdW5pdC10ZXN0c19jX2luY2x1ZGVzIDo9IFwKKyAgICAkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgbGlicGFnZW1hcCkgXAorCitiaW9uaWMtdW5pdC10ZXN0c19zaGFyZWRfbGlicmFyaWVzX3RhcmdldCA6PSBcCisgICAgbGliZGwgXAorICAgIGxpYnBhZ2VtYXAgXAorCittb2R1bGUgOj0gYmlvbmljLXVuaXQtdGVzdHMKK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gTkFUSVZFX1RFU1QKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgZm9yIHRoZSBkZXZpY2UgbGlua2VkIGFnYWluc3QgYmlvbmljJ3Mgc3RhdGljIGxpYnJhcnkuIFJ1biB3aXRoOgorIyAgIGFkYiBzaGVsbCAvZGF0YS9uYXRpdmV0ZXN0L2Jpb25pYy11bml0LXRlc3RzLXN0YXRpYy9iaW9uaWMtdW5pdC10ZXN0cy1zdGF0aWMzMgorIyAgIGFkYiBzaGVsbCAvZGF0YS9uYXRpdmV0ZXN0L2Jpb25pYy11bml0LXRlc3RzLXN0YXRpYy9iaW9uaWMtdW5pdC10ZXN0cy1zdGF0aWM2NAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYmlvbmljLXVuaXQtdGVzdHMtc3RhdGljX3dob2xlX3N0YXRpY19saWJyYXJpZXMgOj0gXAorICAgIGxpYkJpb25pY1Rlc3RzIFwKKworYmlvbmljLXVuaXQtdGVzdHMtc3RhdGljX3N0YXRpY19saWJyYXJpZXMgOj0gXAorICAgIGxpYnN0bHBvcnRfc3RhdGljIFwKKyAgICBsaWJtIFwKKyAgICBsaWJjIFwKKyAgICBsaWJzdGRjKysgXAorCitiaW9uaWMtdW5pdC10ZXN0cy1zdGF0aWNfZm9yY2Vfc3RhdGljX2V4ZWN1dGFibGUgOj0gdHJ1ZQorCittb2R1bGUgOj0gYmlvbmljLXVuaXQtdGVzdHMtc3RhdGljCittb2R1bGVfdGFnIDo9IG9wdGlvbmFsCitidWlsZF90eXBlIDo9IHRhcmdldAorYnVpbGRfdGFyZ2V0IDo9IE5BVElWRV9URVNUCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5idWlsZC5taworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHRvIHJ1biBvbiB0aGUgaG9zdCBhbmQgbGlua2VkIGFnYWluc3QgZ2xpYmMuIFJ1biB3aXRoOgorIyAgIGNkIGJpb25pYy90ZXN0czsgbW0gYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmMtcnVuCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMgQnVpbGQgdGVzdHMgZm9yIHRoZSBob3N0ICh3aXRoIGdsaWJjKS4KLSMgTm90ZSB0aGF0IHRoaXMgd2lsbCBidWlsZCBhZ2FpbnN0IGdsaWJjLCBzbyBpdCdzIG5vdCB1c2VmdWwgZm9yIHRlc3RpbmcKLSMgYmlvbmljJ3MgaW1wbGVtZW50YXRpb24sIGJ1dCBpdCBkb2VzIGxldCB5b3UgdXNlIGdsaWJjIGFzIGEgcmVmZXJlbmNlCi0jIGltcGxlbWVudGF0aW9uIGZvciB0ZXN0aW5nIHRoZSB0ZXN0cyB0aGVtc2VsdmVzLgotaWZlcSAoJChIT1NUX09TKS0kKEhPU1RfQVJDSCksbGludXgteDg2KQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi1MT0NBTF9NT0RVTEUgOj0gYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmMKLUxPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawotTE9DQUxfQ0ZMQUdTICs9ICQodGVzdF9jX2ZsYWdzKQotTE9DQUxfTERGTEFHUyArPSAtbHB0aHJlYWQgLWxkbCAtbHJ0Ci1MT0NBTF9MREZMQUdTICs9ICQodGVzdF9keW5hbWljX2xkZmxhZ3MpCi1MT0NBTF9TUkNfRklMRVMgOj0gJCh0ZXN0X3NyY19maWxlcykgJCh0ZXN0X2R5bmFtaWNfc3JjX2ZpbGVzKQotTE9DQUxfU1RBVElDX0xJQlJBUklFUyArPSBiaW9uaWMtdW5pdC10ZXN0cy11bndpbmQtdGVzdC1pbXBsLWhvc3QKLWluY2x1ZGUgJChCVUlMRF9IT1NUX05BVElWRV9URVNUKQoraWZlcSAoJChIT1NUX09TKS0kKEhPU1RfQVJDSCksJChmaWx0ZXIgJChIT1NUX09TKS0kKEhPU1RfQVJDSCksbGludXgteDg2IGxpbnV4LXg4Nl82NCkpCisKK2Jpb25pYy11bml0LXRlc3RzLWdsaWJjX3NyY19maWxlcyA6PSBcCisgICAgYXRleGl0X3Rlc3QuY3BwIFwKKworYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmNfd2hvbGVfc3RhdGljX2xpYnJhcmllcyA6PSBcCisgICAgbGliQmlvbmljU3RhbmRhcmRUZXN0cyBcCisKK2Jpb25pYy11bml0LXRlc3RzLWdsaWJjX2xkbGlicyA6PSBcCisgICAgLWxydCAtbGRsIFwKKworYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmNfY2ZsYWdzIDo9ICQodGVzdF9jZmxhZ3MpCitiaW9uaWMtdW5pdC10ZXN0cy1nbGliY19jcHBmbGFncyA6PSAkKHRlc3RfY3BwZmxhZ3MpCisKK21vZHVsZSA6PSBiaW9uaWMtdW5pdC10ZXN0cy1nbGliYworbW9kdWxlX3RhZyA6PSBvcHRpb25hbAorYnVpbGRfdHlwZSA6PSBob3N0CitidWlsZF90YXJnZXQgOj0gTkFUSVZFX1RFU1QKK2luY2x1ZGUgJChMT0NBTF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKK2lmbmVxICgkKFRBUkdFVF9BUkNIKSwkKGZpbHRlciAkKFRBUkdFVF9BUkNIKSxhcm0gbWlwcyB4ODYpKQorTElOS0VSID0gbGlua2VyNjQKK05BVElWRV9URVNUX1NVRkZJWD02NAorZWxzZQorTElOS0VSID0gbGlua2VyCitOQVRJVkVfVEVTVF9TVUZGSVg9MzIKK2VuZGlmCiAKICMgZ3Rlc3QgbmVlZHMgQU5EUk9JRF9EQVRBL2xvY2FsL3RtcCBmb3IgZGVhdGggdGVzdCBvdXRwdXQuCiAjIE1ha2Ugc3VyZSB0byBjcmVhdGUgQU5EUk9JRF9EQVRBL2xvY2FsL3RtcCBpZiBkb2Vzbid0IGV4aXN0LgogIyBVc2UgdGhlIGN1cnJlbnQgdGFyZ2V0IG91dCBkaXJlY3RvcnkgYXMgQU5EUk9JRF9EQVRBLgorIyBCSU9OSUNfVEVTVF9GTEFHUyBpcyBlaXRoZXIgZW1wdHkgb3IgaXQgY29tZXMgZnJvbSB0aGUgdXNlci4KIGJpb25pYy11bml0LXRlc3RzLWdsaWJjLXJ1bjogYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmMKIAlta2RpciAtcCAkKFRBUkdFVF9PVVRfREFUQSkvbG9jYWwvdG1wCiAJQU5EUk9JRF9EQVRBPSQoVEFSR0VUX09VVF9EQVRBKSBcCiAJQU5EUk9JRF9ST09UPSQoVEFSR0VUX09VVCkgXAotCQkkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9iaW9uaWMtdW5pdC10ZXN0cy1nbGliYwotZW5kaWYKKwkJJChIT1NUX09VVF9FWEVDVVRBQkxFUykvYmlvbmljLXVuaXQtdGVzdHMtZ2xpYmMkKE5BVElWRV9URVNUX1NVRkZJWCkgJChCSU9OSUNfVEVTVF9GTEFHUykKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBSdW4gdGhlIHVuaXQgdGVzdHMgYnVpbHQgYWdhaW5zdCB4ODYgYmlvbmljIG9uIGFuIHg4NiBob3N0LgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1pZmVxICgkKEhPU1RfT1MpLSQoSE9TVF9BUkNIKSxsaW51eC14ODYpCiBpZmVxICgkKFRBUkdFVF9BUkNIKSwkKGZpbHRlciAkKFRBUkdFVF9BUkNIKSx4ODYgeDg2XzY0KSkKLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLHg4NikKLUxJTktFUiA9IGxpbmtlcgotZWxzZQotTElOS0VSID0gbGlua2VyNjQKLWVuZGlmCiAjIGd0ZXN0IG5lZWRzIEFORFJPSURfREFUQS9sb2NhbC90bXAgZm9yIGRlYXRoIHRlc3Qgb3V0cHV0LgogIyBNYWtlIHN1cmUgdG8gY3JlYXRlIEFORFJPSURfREFUQS9sb2NhbC90bXAgaWYgZG9lc24ndCBleGlzdC4KICMgYmlvbmljIGl0c2VsZiBzaG91bGQgYWx3YXlzIHdvcmsgcmVsYXRpdmUgdG8gQU5EUk9JRF9EQVRBIG9yIEFORFJPSURfUk9PVC4KKyMgQklPTklDX1RFU1RfRkxBR1MgaXMgZWl0aGVyIGVtcHR5IG9yIGl0IGNvbWVzIGZyb20gdGhlIHVzZXIuCiBiaW9uaWMtdW5pdC10ZXN0cy1ydW4tb24taG9zdDogYmlvbmljLXVuaXQtdGVzdHMgJChUQVJHRVRfT1VUX0VYRUNVVEFCTEVTKS8kKExJTktFUikgJChUQVJHRVRfT1VUX0VYRUNVVEFCTEVTKS9zaAogCWlmIFsgISAtZCAvc3lzdGVtIC1vICEgLWQgL3N5c3RlbS9iaW4gXTsgdGhlbiBcCiAJICBlY2hvICJBdHRlbXB0aW5nIHRvIGNyZWF0ZSAvc3lzdGVtL2JpbiI7IFwKQEAgLTIwOSw1OSArMzUzLDEwIEBACiAJQU5EUk9JRF9EQVRBPSQoVEFSR0VUX09VVF9EQVRBKSBcCiAJQU5EUk9JRF9ST09UPSQoVEFSR0VUX09VVCkgXAogCUxEX0xJQlJBUllfUEFUSD0kKFRBUkdFVF9PVVRfU0hBUkVEX0xJQlJBUklFUykgXAotCQkkKFRBUkdFVF9PVVRfREFUQV9OQVRJVkVfVEVTVFMpL2Jpb25pYy11bml0LXRlc3RzL2Jpb25pYy11bml0LXRlc3RzCi1lbmRpZgorCQkkKFRBUkdFVF9PVVRfREFUQV9OQVRJVkVfVEVTVFMpL2Jpb25pYy11bml0LXRlc3RzL2Jpb25pYy11bml0LXRlc3RzJChOQVRJVkVfVEVTVF9TVUZGSVgpICQoQklPTklDX1RFU1RfRkxBR1MpCiBlbmRpZgogCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEZPUlRJRllfU09VUkNFIHRlc3RzCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlbmRpZiAjIGxpbnV4LXg4NgogCi1mb3J0aWZ5X2NfaW5jbHVkZXMgPSBcCi0gICAgYmlvbmljIFwKLSAgICBiaW9uaWMvbGlic3RkYysrL2luY2x1ZGUgXAotICAgIGV4dGVybmFsL3N0bHBvcnQvc3RscG9ydCBcCi0gICAgZXh0ZXJuYWwvZ3Rlc3QvaW5jbHVkZQotZm9ydGlmeV90ZXN0X2ZpbGVzID0gZm9ydGlmeV90ZXN0LmNwcAotCi0jIC1Xbm8tZXJyb3I9dW51c2VkLXBhcmFtZXRlciBuZWVkZWQgYXMKLSMgZXh0ZXJuYWwvc3RscG9ydC9zdGxwb3J0L3N0bC9fdGhyZWFkcy5jIChpbmNsdWRlZCBmcm9tCi0jIGV4dGVybmFsL2d0ZXN0L2luY2x1ZGUvZ3Rlc3QvZ3Rlc3QuaCkgZG9lcyBub3QgY29tcGlsZSBjbGVhbmx5IHVuZGVyCi0jIGNsYW5nLiBUT0RPOiBmaXggdGhpcy4KLWZvcnRpZnlfY19mbGFncyA9ICQodGVzdF9jX2ZsYWdzKSAtV25vLWVycm9yPXVudXNlZC1wYXJhbWV0ZXIKLQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi1MT0NBTF9TUkNfRklMRVMgOj0gJChmb3J0aWZ5X3Rlc3RfZmlsZXMpCi1MT0NBTF9NT0RVTEUgOj0gZm9ydGlmeTEtdGVzdHMtZ2NjCi1MT0NBTF9DRkxBR1MgKz0gJChmb3J0aWZ5X2NfZmxhZ3MpIC1VX0ZPUlRJRllfU09VUkNFIC1EX0ZPUlRJRllfU09VUkNFPTEgLURURVNUX05BTUU9Rm9ydGlmeTFfR2NjCi1MT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKLUxPQ0FMX0NfSU5DTFVERVMgKz0gJChmb3J0aWZ5X2NfaW5jbHVkZXMpCi1pbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoZm9ydGlmeV90ZXN0X2ZpbGVzKQotTE9DQUxfTU9EVUxFIDo9IGZvcnRpZnkyLXRlc3RzLWdjYwotTE9DQUxfQ0ZMQUdTICs9ICQoZm9ydGlmeV9jX2ZsYWdzKSAtVV9GT1JUSUZZX1NPVVJDRSAtRF9GT1JUSUZZX1NPVVJDRT0yIC1EVEVTVF9OQU1FPUZvcnRpZnkyX0djYwotTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCi1MT0NBTF9DX0lOQ0xVREVTICs9ICQoZm9ydGlmeV9jX2luY2x1ZGVzKQotaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKGZvcnRpZnlfdGVzdF9maWxlcykKLUxPQ0FMX01PRFVMRSA6PSBmb3J0aWZ5MS10ZXN0cy1jbGFuZwotTE9DQUxfQ0xBTkcgOj0gdHJ1ZQotTE9DQUxfQ0ZMQUdTICs9ICQoZm9ydGlmeV9jX2ZsYWdzKSAtVV9GT1JUSUZZX1NPVVJDRSAtRF9GT1JUSUZZX1NPVVJDRT0xIC1EVEVTVF9OQU1FPUZvcnRpZnkxX0NsYW5nCi1MT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKLUxPQ0FMX0NfSU5DTFVERVMgKz0gJChmb3J0aWZ5X2NfaW5jbHVkZXMpCi1pbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoZm9ydGlmeV90ZXN0X2ZpbGVzKQotTE9DQUxfTU9EVUxFIDo9IGZvcnRpZnkyLXRlc3RzLWNsYW5nCi1MT0NBTF9DTEFORyA6PSB0cnVlCi1MT0NBTF9DRkxBR1MgKz0gJChmb3J0aWZ5X2NfZmxhZ3MpIC1VX0ZPUlRJRllfU09VUkNFIC1EX0ZPUlRJRllfU09VUkNFPTIgLURURVNUX05BTUU9Rm9ydGlmeTJfQ2xhbmcKLUxPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawotTE9DQUxfQ19JTkNMVURFUyArPSAkKGZvcnRpZnlfY19pbmNsdWRlcykKLWluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKLQoraW5jbHVkZSAkKGNhbGwgZmlyc3QtbWFrZWZpbGVzLXVuZGVyLCQoTE9DQUxfUEFUSCkpCiBlbmRpZiAjICFCVUlMRF9USU5ZX0FORFJPSUQKZGlmZiAtLWdpdCBhL3Rlc3RzL1RlbXBvcmFyeUZpbGUuaCBiL3Rlc3RzL1RlbXBvcmFyeUZpbGUuaAppbmRleCBiM2YwODVmLi5jNGVlMmQ1IDEwMDY0NAotLS0gYS90ZXN0cy9UZW1wb3JhcnlGaWxlLmgKKysrIGIvdGVzdHMvVGVtcG9yYXJ5RmlsZS5oCkBAIC0xNCwzMiArMTQsNjcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKKyNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi1jbGFzcyBUZW1wb3JhcnlGaWxlIHsKK3RlbXBsYXRlPGludCAoKm1rX2ZuKShjaGFyKik+CitjbGFzcyBHZW5lcmljVGVtcG9yYXJ5RmlsZSB7CiAgcHVibGljOgotICBUZW1wb3JhcnlGaWxlKCkgewotICAgIC8vIFNpbmNlIHdlIG1pZ2h0IGJlIHJ1bm5pbmcgb24gdGhlIGhvc3Qgb3IgdGhlIHRhcmdldCwgYW5kIGlmIHdlJ3JlCi0gICAgLy8gcnVubmluZyBvbiB0aGUgaG9zdCB3ZSBtaWdodCBiZSBydW5uaW5nIHVuZGVyIGJpb25pYyBvciBnbGliYywKLSAgICAvLyBsZXQncyBqdXN0IHRyeSBib3RoIHBvc3NpYmxlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyBhbmQgdGFrZSB0aGUKLSAgICAvLyBmaXJzdCBvbmUgdGhhdCB3b3Jrcy4KLSAgICBpbml0KCIvZGF0YS9sb2NhbC90bXAiKTsKLSAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgIGluaXQoIi90bXAiKTsKKyAgR2VuZXJpY1RlbXBvcmFyeUZpbGUoY29uc3QgY2hhciogZGlycGF0aCA9IE5VTEwpIHsKKyAgICBpZiAoZGlycGF0aCAhPSBOVUxMKSB7CisgICAgICBpbml0KGRpcnBhdGgpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBTaW5jZSB3ZSBtaWdodCBiZSBydW5uaW5nIG9uIHRoZSBob3N0IG9yIHRoZSB0YXJnZXQsIGFuZCBpZiB3ZSdyZQorICAgICAgLy8gcnVubmluZyBvbiB0aGUgaG9zdCB3ZSBtaWdodCBiZSBydW5uaW5nIHVuZGVyIGJpb25pYyBvciBnbGliYywKKyAgICAgIC8vIGxldCdzIGp1c3QgdHJ5IGJvdGggcG9zc2libGUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIGFuZCB0YWtlIHRoZQorICAgICAgLy8gZmlyc3Qgb25lIHRoYXQgd29ya3MuCisgICAgICBpbml0KCIvZGF0YS9sb2NhbC90bXAiKTsKKyAgICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBpbml0KCIvdG1wIik7CisgICAgICB9CiAgICAgfQogICB9CiAKLSAgflRlbXBvcmFyeUZpbGUoKSB7CisgIH5HZW5lcmljVGVtcG9yYXJ5RmlsZSgpIHsKICAgICBjbG9zZShmZCk7CiAgICAgdW5saW5rKGZpbGVuYW1lKTsKICAgfQogCisgIHZvaWQgcmVvcGVuKCkgeworICAgIGNsb3NlKGZkKTsKKyAgICBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRXUik7CisgIH0KKwogICBpbnQgZmQ7CiAgIGNoYXIgZmlsZW5hbWVbMTAyNF07CiAKICBwcml2YXRlOgogICB2b2lkIGluaXQoY29uc3QgY2hhciogdG1wX2RpcikgewogICAgIHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMvVGVtcG9yYXJ5RmlsZS1YWFhYWFgiLCB0bXBfZGlyKTsKLSAgICBmZCA9IG1rc3RlbXAoZmlsZW5hbWUpOworICAgIGZkID0gbWtfZm4oZmlsZW5hbWUpOwogICB9CiB9OworCit0eXBlZGVmIEdlbmVyaWNUZW1wb3JhcnlGaWxlPG1rc3RlbXA+IFRlbXBvcmFyeUZpbGU7CisKK2NsYXNzIFRlbXBvcmFyeURpciB7CisgcHVibGljOgorICBUZW1wb3JhcnlEaXIoKSB7CisgICAgaWYgKCFpbml0KCIvZGF0YS9sb2NhbC90bXAiKSkgeworICAgICAgaW5pdCgiL3RtcCIpOworICAgIH0KKyAgfQorCisgIH5UZW1wb3JhcnlEaXIoKSB7CisgICAgcm1kaXIoZGlybmFtZSk7CisgIH0KKworICBjaGFyIGRpcm5hbWVbMTAyNF07CisKKyBwcml2YXRlOgorICBib29sIGluaXQoY29uc3QgY2hhciogdG1wX2RpcikgeworICAgIHNucHJpbnRmKGRpcm5hbWUsIHNpemVvZihkaXJuYW1lKSwgIiVzL1RlbXBvcmFyeURpci1YWFhYWFgiLCB0bXBfZGlyKTsKKyAgICByZXR1cm4gKG1rZHRlbXAoZGlybmFtZSkgIT0gTlVMTCk7CisgIH0KKworfTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2FycGFfaW5ldF90ZXN0LmNwcCBiL3Rlc3RzL2FycGFfaW5ldF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTUzMzM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYXJwYV9pbmV0X3Rlc3QuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCitURVNUKGFycGFfaW5ldCwgaW5ldF9hZGRyKSB7CisgIEFTU0VSVF9FUSgoaHRvbmwpKDB4N2YwMDAwMDEpLCBpbmV0X2FkZHIoIjEyNy4wLjAuMSIpKTsKK30KKworVEVTVChhcnBhX2luZXQsIGluZXRfYXRvbikgeworICBpbl9hZGRyIGE7CisgIEFTU0VSVF9FUSgxLCBpbmV0X2F0b24oIjEyNy4wLjAuMSIsICZhKSk7CisgIEFTU0VSVF9FUSgoaHRvbmwpKDB4N2YwMDAwMDEpLCBhLnNfYWRkcik7Cit9CisKK1RFU1QoYXJwYV9pbmV0LCBpbmV0X2xuYW9mKSB7CisgIGluX2FkZHIgYSA9IHsgaHRvbmwoMHgxMjM0NTY3OCkgfTsKKyAgQVNTRVJUX0VRKDB4MDAzNDU2NzhVLCBpbmV0X2xuYW9mKGEpKTsKK30KKworVEVTVChhcnBhX2luZXQsIGluZXRfbWFrZWFkZHIpIHsKKyAgaW5fYWRkciBhID0gaW5ldF9tYWtlYWRkcigweDEyVSwgMHgzNDU2NzgpOworICBBU1NFUlRfRVEoKGh0b25sKSgweDEyMzQ1Njc4KSwgYS5zX2FkZHIpOworfQorCitURVNUKGFycGFfaW5ldCwgaW5ldF9uZXRvZikgeworICBpbl9hZGRyIGEgPSB7IGh0b25sKDB4MTIzNDU2NzgpIH07CisgIEFTU0VSVF9FUSgweDEyVSwgaW5ldF9uZXRvZihhKSk7Cit9CisKK1RFU1QoYXJwYV9pbmV0LCBpbmV0X25ldHdvcmspIHsKKyAgQVNTRVJUX0VRKDB4N2YwMDAwMDFVLCBpbmV0X25ldHdvcmsoIjEyNy4wLjAuMSIpKTsKK30KKworVEVTVChhcnBhX2luZXQsIGluZXRfbnRvYSkgeworICBpbl9hZGRyIGEgPSB7IChodG9ubCkoMHg3ZjAwMDAwMSkgfTsKKyAgQVNTRVJUX1NUUkVRKCIxMjcuMC4wLjEiLCBpbmV0X250b2EoYSkpOworfQorCitURVNUKGFycGFfaW5ldCwgaW5ldF9wdG9uX19pbmV0X250b3ApIHsKKyAgc29ja2FkZHJfc3RvcmFnZSBzczsKKyAgQVNTRVJUX0VRKDEsIGluZXRfcHRvbihBRl9JTkVULCAiMTI3LjAuMC4xIiwgJnNzKSk7CisKKyAgY2hhciBzW0lORVRfQUREUlNUUkxFTl07CisgIEFTU0VSVF9TVFJFUSgiMTI3LjAuMC4xIiwgaW5ldF9udG9wKEFGX0lORVQsICZzcywgcywgSU5FVF9BRERSU1RSTEVOKSk7Cit9CisKK1RFU1QoYXJwYV9pbmV0LCBpbmV0X250b3Bfb3ZlcmZsb3cpIHsKKyAgLy8gT3BlbkJTRCdzIGluZXRfbnRvcCBoYWQgYSBidWcgd2hlcmUgcGFzc2luZyBhICdzaXplJyBsYXJnZXIgdGhhbiBJTkVUX0FERFJTVFJMRU4KKyAgLy8gZm9yIEFGX0lORVQgb3IgSU5FVDZfQUREUlNUUkxFTiBmb3IgQUZfSU5FVDYgd291bGQgY2F1c2UgaW5ldF9udG9wIHRvIG92ZXJmbG93IGFuCisgIC8vIGludGVybmFsIGJ1ZmZlci4KKworICBzb2NrYWRkcl9zdG9yYWdlIHNzNDsKKyAgQVNTRVJUX0VRKDEsIGluZXRfcHRvbihBRl9JTkVULCAiMTI3LjAuMC4xIiwgJnNzNCkpOworCisgIHNvY2thZGRyX3N0b3JhZ2Ugc3M2OworICBBU1NFUlRfRVEoMSwgaW5ldF9wdG9uKEFGX0lORVQ2LCAiOjoxIiwgJnNzNikpOworCisgIGNoYXIgczRbSU5FVF9BRERSU1RSTEVOXTsKKyAgY2hhciBzNltJTkVUNl9BRERSU1RSTEVOXTsKKyAgQVNTRVJUX1NUUkVRKCIxMjcuMC4wLjEiLCBpbmV0X250b3AoQUZfSU5FVCwgJnNzNCwgczQsIElORVRfQUREUlNUUkxFTikpOworICBBU1NFUlRfU1RSRVEoIjEyNy4wLjAuMSIsIGluZXRfbnRvcChBRl9JTkVULCAmc3M0LCBzNCwgMipJTkVUX0FERFJTVFJMRU4pKTsKKyAgQVNTRVJUX1NUUkVRKCI6OjEiLCBpbmV0X250b3AoQUZfSU5FVDYsICZzczYsIHM2LCBJTkVUX0FERFJTVFJMRU4pKTsKKyAgQVNTRVJUX1NUUkVRKCI6OjEiLCBpbmV0X250b3AoQUZfSU5FVDYsICZzczYsIHM2LCBJTkVUNl9BRERSU1RSTEVOKSk7CisgIEFTU0VSVF9TVFJFUSgiOjoxIiwgaW5ldF9udG9wKEFGX0lORVQ2LCAmc3M2LCBzNiwgMipJTkVUNl9BRERSU1RSTEVOKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9hdGV4aXRfdGVzdC5jcHAgYi90ZXN0cy9hdGV4aXRfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxMjIwZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2F0ZXhpdF90ZXN0LmNwcApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK1RFU1QoYXRleGl0LCBkbGNsb3NlKSB7CisgIHN0ZDo6c3RyaW5nIGF0ZXhpdF9jYWxsX3NlcXVlbmNlOworICBib29sIHZhbGlkX3RoaXNfaW5fc3RhdGljX2R0b3IgPSBmYWxzZTsKKyAgdm9pZCogaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X2F0ZXhpdC5zbyIsIFJUTERfTk9XKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IE5VTEwpOworCisgIHZvaWQqIHN5bSA9IGRsc3ltKGhhbmRsZSwgInJlZ2lzdGVyX2F0ZXhpdCIpOworICBBU1NFUlRfVFJVRShzeW0gIT0gTlVMTCk7CisgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoc3RkOjpzdHJpbmcqLCBib29sKik+KHN5bSkoJmF0ZXhpdF9jYWxsX3NlcXVlbmNlLCAmdmFsaWRfdGhpc19pbl9zdGF0aWNfZHRvcik7CisKKyAgQVNTRVJUX0VRKDAsIGRsY2xvc2UoaGFuZGxlKSk7CisgIC8vIHRoaXMgdGVzdCB2ZXJpZmllcyBhdGV4aXQgY2FsbCBmcm9tIGF0ZXhpdCBoYW5kbGVyLiBhcyB3ZWxsIGFzIHRoZSBvcmRlciBvZiBjYWxscworICBBU1NFUlRfRVEoIkh1bXB0eSBEdW1wdHkgc2F0IG9uIGEgd2FsbCIsIGF0ZXhpdF9jYWxsX3NlcXVlbmNlKTsKKyAgQVNTRVJUX1RSVUUodmFsaWRfdGhpc19pbl9zdGF0aWNfZHRvcik7Cit9CisKK2NsYXNzIFRlc3RNYWluU3RhdGljRHRvckNsYXNzIHsKKyBwdWJsaWM6CisgIFRlc3RNYWluU3RhdGljRHRvckNsYXNzKCkgeworICAgIGV4cGVjdGVkX3RoaXMgPSB0aGlzOworICB9CisKKyAgflRlc3RNYWluU3RhdGljRHRvckNsYXNzKCkgeworICAgIGlmICh0aGlzICE9IGV4cGVjdGVkX3RoaXMpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5lcnJvcjogc3RhdGljIGQtdG9yIGNhbGxlZCB3aXRoIGluY29ycmVjdCB0aGlzIHBvaW50ZXI6ICVwLCBleHBlY3RlZDogJXBcbiIsIHRoaXMsIGV4cGVjdGVkX3RoaXMpOworICAgIH0gZWxzZSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIjYiKTsKKyAgICB9CisgIH0KKyBwcml2YXRlOgorICBzdGF0aWMgY29uc3QgVGVzdE1haW5TdGF0aWNEdG9yQ2xhc3MqIGV4cGVjdGVkX3RoaXM7Cit9OworCitjb25zdCBUZXN0TWFpblN0YXRpY0R0b3JDbGFzcyogVGVzdE1haW5TdGF0aWNEdG9yQ2xhc3M6OmV4cGVjdGVkX3RoaXMgPSBOVUxMOworCitzdGF0aWMgdm9pZCBhdGV4aXRfZnVuYzUoKSB7CisgIGZwcmludGYoc3RkZXJyLCAiNSIpOworfQorCitzdGF0aWMgdm9pZCBhdGV4aXRfZnVuYzQoKSB7CisgIGZwcmludGYoc3RkZXJyLCAiNCIpOworfQorCitzdGF0aWMgdm9pZCBhdGV4aXRfZnVuYzMoKSB7CisgIGZwcmludGYoc3RkZXJyLCAiMyIpOworICBhdGV4aXQoYXRleGl0X2Z1bmM0KTsKK30KKworc3RhdGljIHZvaWQgYXRleGl0X2Z1bmMyKCkgeworICBmcHJpbnRmKHN0ZGVyciwgIjIiKTsKK30KKworc3RhdGljIHZvaWQgYXRleGl0X2Z1bmMxKCkgeworICBmcHJpbnRmKHN0ZGVyciwgIjEiKTsKK30KKworc3RhdGljIHZvaWQgYXRleGl0X21haW4oKSB7CisgIC8vIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiAiMTIzNDU2IiBvdXRwdXQgdG8gc3RkZXJyCisgIHN0YXRpYyBUZXN0TWFpblN0YXRpY0R0b3JDbGFzcyBzdGF0aWNfb2JqOworICBhdGV4aXQoYXRleGl0X2Z1bmM1KTsKKyAgYXRleGl0KGF0ZXhpdF9mdW5jMyk7CisgIGF0ZXhpdChhdGV4aXRfZnVuYzIpOworICBhdGV4aXQoYXRleGl0X2Z1bmMxKTsKKyAgZXhpdCgwKTsKK30KKworVEVTVChhdGV4aXQsIGV4aXQpIHsKKyAgQVNTRVJUX0VYSVQoYXRleGl0X21haW4oKSwgdGVzdGluZzo6RXhpdGVkV2l0aENvZGUoMCksICIxMjM0NTYiKTsKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMvY3R5cGVfdGVzdC5jcHAgYi90ZXN0cy9jdHlwZV90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjI3ZDY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY3R5cGVfdGVzdC5jcHAKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK1RFU1QoY3R5cGUsIGlzYWxudW0pIHsKKyAgRVhQRUNUX1RSVUUoaXNhbG51bSgnMScpKTsKKyAgRVhQRUNUX1RSVUUoaXNhbG51bSgnYScpKTsKKyAgRVhQRUNUX1RSVUUoaXNhbG51bSgnQScpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzYWxudW0oJyEnKSk7CisgIEVYUEVDVF9GQUxTRShpc2FsbnVtKCcgJykpOworfQorCitURVNUKGN0eXBlLCBpc2FscGhhKSB7CisgIEVYUEVDVF9GQUxTRShpc2FscGhhKCcxJykpOworICBFWFBFQ1RfVFJVRShpc2FscGhhKCdhJykpOworICBFWFBFQ1RfVFJVRShpc2FscGhhKCdBJykpOworICBFWFBFQ1RfRkFMU0UoaXNhbHBoYSgnIScpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzYWxwaGEoJyAnKSk7Cit9CisKK1RFU1QoY3R5cGUsIGlzYXNjaWkpIHsKKyAgRVhQRUNUX1RSVUUoaXNhc2NpaSgnXHg3ZicpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzYXNjaWkoJ1x4ODAnKSk7Cit9CisKK1RFU1QoY3R5cGUsIGlzYmxhbmspIHsKKyAgRVhQRUNUX0ZBTFNFKGlzYmxhbmsoJzEnKSk7CisgIEVYUEVDVF9UUlVFKGlzYmxhbmsoJyAnKSk7CisgIEVYUEVDVF9UUlVFKGlzYmxhbmsoJ1x0JykpOworfQorCitURVNUKGN0eXBlLCBpc2NudHJsKSB7CisgIEVYUEVDVF9GQUxTRShpc2NudHJsKCcxJykpOworICBFWFBFQ1RfVFJVRShpc2NudHJsKCdcYicpKTsKK30KKworVEVTVChjdHlwZSwgaXNkaWdpdCkgeworICBFWFBFQ1RfVFJVRShpc2RpZ2l0KCcxJykpOworICBFWFBFQ1RfRkFMU0UoaXNkaWdpdCgnYScpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzZGlnaXQoJ3gnKSk7Cit9CisKK1RFU1QoY3R5cGUsIGlzZ3JhcGgpIHsKKyAgRVhQRUNUX1RSVUUoaXNncmFwaCgnYScpKTsKKyAgRVhQRUNUX1RSVUUoaXNncmFwaCgnQScpKTsKKyAgRVhQRUNUX1RSVUUoaXNncmFwaCgnMScpKTsKKyAgRVhQRUNUX1RSVUUoaXNncmFwaCgnIScpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzZ3JhcGgoJyAnKSk7Cit9CisKK1RFU1QoY3R5cGUsIGlzbG93ZXIpIHsKKyAgRVhQRUNUX1RSVUUoaXNsb3dlcignYScpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzbG93ZXIoJ0EnKSk7CisgIEVYUEVDVF9GQUxTRShpc2xvd2VyKCchJykpOworfQorCitURVNUKGN0eXBlLCBpc3ByaW50KSB7CisgIEVYUEVDVF9UUlVFKGlzcHJpbnQoJ2EnKSk7CisgIEVYUEVDVF9UUlVFKGlzcHJpbnQoJyAnKSk7CisgIEVYUEVDVF9GQUxTRShpc3ByaW50KCdcYicpKTsKK30KKworVEVTVChjdHlwZSwgaXNwdW5jdCkgeworICBFWFBFQ1RfVFJVRShpc3B1bmN0KCchJykpOworICBFWFBFQ1RfRkFMU0UoaXNwdW5jdCgnYScpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzcHVuY3QoJyAnKSk7CisgIEVYUEVDVF9GQUxTRShpc3B1bmN0KCdcYicpKTsKK30KKworVEVTVChjdHlwZSwgaXNzcGFjZSkgeworICBFWFBFQ1RfVFJVRShpc3NwYWNlKCcgJykpOworICBFWFBFQ1RfVFJVRShpc3NwYWNlKCdcZicpKTsKKyAgRVhQRUNUX1RSVUUoaXNzcGFjZSgnXG4nKSk7CisgIEVYUEVDVF9UUlVFKGlzc3BhY2UoJ1xyJykpOworICBFWFBFQ1RfVFJVRShpc3NwYWNlKCdcdCcpKTsKKyAgRVhQRUNUX1RSVUUoaXNzcGFjZSgnXHYnKSk7CisgIEVYUEVDVF9GQUxTRShpc3NwYWNlKCdhJykpOworICBFWFBFQ1RfRkFMU0UoaXNzcGFjZSgnIScpKTsKK30KKworVEVTVChjdHlwZSwgaXN1cHBlcikgeworICBFWFBFQ1RfVFJVRShpc3VwcGVyKCdBJykpOworICBFWFBFQ1RfRkFMU0UoaXN1cHBlcignYScpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzdXBwZXIoJyEnKSk7Cit9CisKK1RFU1QoY3R5cGUsIGlzeGRpZ2l0KSB7CisgIEVYUEVDVF9UUlVFKGlzeGRpZ2l0KCcwJykpOworICBFWFBFQ1RfRkFMU0UoaXN4ZGlnaXQoJ3gnKSk7CisgIEVYUEVDVF9UUlVFKGlzeGRpZ2l0KCcxJykpOworICBFWFBFQ1RfVFJVRShpc3hkaWdpdCgnYScpKTsKKyAgRVhQRUNUX1RSVUUoaXN4ZGlnaXQoJ0EnKSk7CisgIEVYUEVDVF9GQUxTRShpc3hkaWdpdCgnZycpKTsKKyAgRVhQRUNUX0ZBTFNFKGlzeGRpZ2l0KCcgJykpOworfQorCitURVNUKGN0eXBlLCB0b2FzY2lpKSB7CisgIEVYUEVDVF9FUSgnYScsIHRvYXNjaWkoJ2EnKSk7CisgIEVYUEVDVF9FUSgnYScsIHRvYXNjaWkoMHg4MCB8ICdhJykpOworfQorCitURVNUKGN0eXBlLCB0b2xvd2VyKSB7CisgIEVYUEVDVF9FUSgnIScsIHRvbG93ZXIoJyEnKSk7CisgIEVYUEVDVF9FUSgnYScsIHRvbG93ZXIoJ2EnKSk7CisgIEVYUEVDVF9FUSgnYScsIHRvbG93ZXIoJ0EnKSk7Cit9CisKK1RFU1QoY3R5cGUsIF90b2xvd2VyKSB7CisgIC8vIF90b2xvd2VyIG1heSBtYW5nbGUgY2hhcmFjdGVycyBmb3Igd2hpY2ggaXN1cHBlciBpcyBmYWxzZS4KKyAgRVhQRUNUX0VRKCdhJywgX3RvbG93ZXIoJ0EnKSk7Cit9CisKK1RFU1QoY3R5cGUsIHRvdXBwZXIpIHsKKyAgRVhQRUNUX0VRKCchJywgdG91cHBlcignIScpKTsKKyAgRVhQRUNUX0VRKCdBJywgdG91cHBlcignYScpKTsKKyAgRVhQRUNUX0VRKCdBJywgdG91cHBlcignQScpKTsKK30KKworVEVTVChjdHlwZSwgX3RvdXBwZXIpIHsKKyAgLy8gX3RvdXBwZXIgbWF5IG1hbmdsZSBjaGFyYWN0ZXJzIGZvciB3aGljaCBpc2xvd2VyIGlzIGZhbHNlLgorICBFWFBFQ1RfRVEoJ0EnLCBfdG91cHBlcignYScpKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RpcmVudF90ZXN0LmNwcCBiL3Rlc3RzL2RpcmVudF90ZXN0LmNwcAppbmRleCA0OGNhODE5Li42YWFkYjM3IDEwMDY0NAotLS0gYS90ZXN0cy9kaXJlbnRfdGVzdC5jcHAKKysrIGIvdGVzdHMvZGlyZW50X3Rlc3QuY3BwCkBAIC0zNywyMSArMzcsMzEgQEAKICAgQVNTRVJUX1RSVUUobmFtZXMuZmluZCgic3RhdCIpICE9IG5hbWVzLmVuZCgpKTsKIH0KIAotVEVTVChkaXJlbnQsIHNjYW5kaXIpIHsKK3RlbXBsYXRlIDx0eXBlbmFtZSBEaXJFbnRUPgordm9pZCBTY2FuRW50cmllcyhEaXJFbnRUKiogZW50cmllcywgaW50IGVudHJ5X2NvdW50LAorICAgICAgICAgICAgICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4mIG5hbWVfc2V0LCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIG5hbWVfbGlzdCkgeworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHNpemVfdD4oZW50cnlfY291bnQpOyArK2kpIHsKKyAgICBuYW1lX3NldC5pbnNlcnQoZW50cmllc1tpXS0+ZF9uYW1lKTsKKyAgICBuYW1lX2xpc3QucHVzaF9iYWNrKGVudHJpZXNbaV0tPmRfbmFtZSk7CisgICAgZnJlZShlbnRyaWVzW2ldKTsKKyAgfQorICBmcmVlKGVudHJpZXMpOworfQorCitURVNUKGRpcmVudCwgc2NhbmRpcl9zY2FuZGlyNjQpIHsKICAgLy8gR2V0IGV2ZXJ5dGhpbmcgZnJvbSAvcHJvYy9zZWxmLi4uCiAgIGRpcmVudCoqIGVudHJpZXM7CiAgIGludCBlbnRyeV9jb3VudCA9IHNjYW5kaXIoIi9wcm9jL3NlbGYiLCAmZW50cmllcywgTlVMTCwgYWxwaGFzb3J0KTsKICAgQVNTRVJUX0dFKGVudHJ5X2NvdW50LCAwKTsKIAorICBkaXJlbnQ2NCoqIGVudHJpZXM2NDsKKyAgaW50IGVudHJ5X2NvdW50NjQgPSBzY2FuZGlyNjQoIi9wcm9jL3NlbGYiLCAmZW50cmllczY0LCBOVUxMLCBhbHBoYXNvcnQ2NCk7CisgIEFTU0VSVF9FUShlbnRyeV9jb3VudCwgZW50cnlfY291bnQ2NCk7CisKICAgLy8gVHVybiB0aGUgZGlyZWN0b3J5IGVudHJpZXMgaW50byBhIHNldCBhbmQgdmVjdG9yIG9mIHRoZSBuYW1lcy4KICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG5hbWVfc2V0OwogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdW5zb3J0ZWRfbmFtZV9saXN0OwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHNpemVfdD4oZW50cnlfY291bnQpOyArK2kpIHsKLSAgICBuYW1lX3NldC5pbnNlcnQoZW50cmllc1tpXS0+ZF9uYW1lKTsKLSAgICB1bnNvcnRlZF9uYW1lX2xpc3QucHVzaF9iYWNrKGVudHJpZXNbaV0tPmRfbmFtZSk7Ci0gICAgZnJlZShlbnRyaWVzW2ldKTsKLSAgfQotICBmcmVlKGVudHJpZXMpOworICBTY2FuRW50cmllcyhlbnRyaWVzLCBlbnRyeV9jb3VudCwgbmFtZV9zZXQsIHVuc29ydGVkX25hbWVfbGlzdCk7CiAKICAgLy8gTm8gZHVwbGljYXRlcy4KICAgQVNTRVJUX0VRKG5hbWVfc2V0LnNpemUoKSwgdW5zb3J0ZWRfbmFtZV9saXN0LnNpemUoKSk7CkBAIC02MSw2ICs3MSwxMyBAQAogICBzdGQ6OnNvcnQoc29ydGVkX25hbWVfbGlzdC5iZWdpbigpLCBzb3J0ZWRfbmFtZV9saXN0LmVuZCgpKTsKICAgQVNTRVJUX0VRKHNvcnRlZF9uYW1lX2xpc3QsIHVuc29ydGVkX25hbWVfbGlzdCk7CiAKKyAgLy8gc2NhbmRpcjY0IHJldHVybmVkIHRoZSBzYW1lIHJlc3VsdHMgYXMgc2NhbmRpci4KKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG5hbWVfc2V0NjQ7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1bnNvcnRlZF9uYW1lX2xpc3Q2NDsKKyAgU2NhbkVudHJpZXMoZW50cmllczY0LCBlbnRyeV9jb3VudDY0LCBuYW1lX3NldDY0LCB1bnNvcnRlZF9uYW1lX2xpc3Q2NCk7CisgIEFTU0VSVF9FUShuYW1lX3NldCwgbmFtZV9zZXQ2NCk7CisgIEFTU0VSVF9FUSh1bnNvcnRlZF9uYW1lX2xpc3QsIHVuc29ydGVkX25hbWVfbGlzdDY0KTsKKwogICBDaGVja1Byb2NTZWxmKG5hbWVfc2V0KTsKIH0KIApAQCAtMTMzLDYgKzE1MCwyMyBAQAogICBDaGVja1Byb2NTZWxmKG5hbWVfc2V0KTsKIH0KIAorVEVTVChkaXJlbnQsIHJlYWRkaXI2NCkgeworICBESVIqIGQgPSBvcGVuZGlyKCIvcHJvYy9zZWxmIik7CisgIEFTU0VSVF9UUlVFKGQgIT0gTlVMTCk7CisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBuYW1lX3NldDsKKyAgZXJybm8gPSAwOworICBkaXJlbnQ2NCogZTsKKyAgd2hpbGUgKChlID0gcmVhZGRpcjY0KGQpKSAhPSBOVUxMKSB7CisgICAgbmFtZV9zZXQuaW5zZXJ0KGUtPmRfbmFtZSk7CisgIH0KKyAgLy8gUmVhZGluZyB0byB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkgaXMgbm90IGFuIGVycm9yLgorICAvLyByZWFkZGlyNjQoMykgcmV0dXJucyBOVUxMLCBidXQgbGVhdmVzIGVycm5vIGFzIDAuCisgIEFTU0VSVF9FUSgwLCBlcnJubyk7CisgIEFTU0VSVF9FUShjbG9zZWRpcihkKSwgMCk7CisKKyAgQ2hlY2tQcm9jU2VsZihuYW1lX3NldCk7Cit9CisKIFRFU1QoZGlyZW50LCByZWFkZGlyX3IpIHsKICAgRElSKiBkID0gb3BlbmRpcigiL3Byb2Mvc2VsZiIpOwogICBBU1NFUlRfVFJVRShkICE9IE5VTEwpOwpAQCAtMTUxLDYgKzE4NSwyNCBAQAogICBDaGVja1Byb2NTZWxmKG5hbWVfc2V0KTsKIH0KIAorVEVTVChkaXJlbnQsIHJlYWRkaXI2NF9yKSB7CisgIERJUiogZCA9IG9wZW5kaXIoIi9wcm9jL3NlbGYiKTsKKyAgQVNTRVJUX1RSVUUoZCAhPSBOVUxMKTsKKyAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG5hbWVfc2V0OworICBlcnJubyA9IDA7CisgIGRpcmVudDY0IHN0b3JhZ2U7CisgIGRpcmVudDY0KiBlID0gTlVMTDsKKyAgd2hpbGUgKHJlYWRkaXI2NF9yKGQsICZzdG9yYWdlLCAmZSkgPT0gMCAmJiBlICE9IE5VTEwpIHsKKyAgICBuYW1lX3NldC5pbnNlcnQoZS0+ZF9uYW1lKTsKKyAgfQorICAvLyBSZWFkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeSBpcyBub3QgYW4gZXJyb3IuCisgIC8vIHJlYWRkaXI2NF9yKDMpIHJldHVybnMgTlVMTCwgYnV0IGxlYXZlcyBlcnJubyBhcyAwLgorICBBU1NFUlRfRVEoMCwgZXJybm8pOworICBBU1NFUlRfRVEoY2xvc2VkaXIoZCksIDApOworCisgIENoZWNrUHJvY1NlbGYobmFtZV9zZXQpOworfQorCiBURVNUKGRpcmVudCwgcmV3aW5kZGlyKSB7CiAgIERJUiogZCA9IG9wZW5kaXIoIi9wcm9jL3NlbGYiKTsKICAgQVNTRVJUX1RSVUUoZCAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL2RsZXh0X3Rlc3QuY3BwIGIvdGVzdHMvZGxleHRfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2MzA0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RsZXh0X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMzc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGFuZHJvaWQvZGxleHQuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisKKyNpbmNsdWRlIDxwYWdlbWFwL3BhZ2VtYXAuaD4KKworCisjZGVmaW5lIEFTU0VSVF9ETF9OT1ROVUxMKHB0cikgXAorICAgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKSA8PCAiZGxlcnJvcjogIiA8PCBkbGVycm9yKCkKKworI2RlZmluZSBBU1NFUlRfRExfWkVSTyhpKSBcCisgICAgQVNTRVJUX0VRKDAsIGkpIDw8ICJkbGVycm9yOiAiIDw8IGRsZXJyb3IoKQorCisjZGVmaW5lIEFTU0VSVF9OT0VSUk9SKGkpIFwKKyAgICBBU1NFUlRfTkUoLTEsIGkpIDw8ICJlcnJubzogIiA8PCBzdHJlcnJvcihlcnJubykKKworCit0eXBlZGVmIGludCAoKmZuKSh2b2lkKTsKKyNkZWZpbmUgTElCTkFNRSAibGliZGxleHRfdGVzdC5zbyIKKyNkZWZpbmUgTElCTkFNRV9OT1JFTFJPICJsaWJkbGV4dF90ZXN0X25vcmVscm8uc28iCisjZGVmaW5lIExJQlNJWkUgMTAyNCoxMDI0IC8vIGhvdyBtdWNoIGFkZHJlc3Mgc3BhY2UgdG8gcmVzZXJ2ZSBmb3IgaXQKKworI2lmIGRlZmluZWQoX19MUDY0X18pCisjZGVmaW5lIExJQlBBVEggIiVzL25hdGl2ZXRlc3Q2NC9saWJkbGV4dF90ZXN0X2ZkL2xpYmRsZXh0X3Rlc3RfZmQuc28iCisjZWxzZQorI2RlZmluZSBMSUJQQVRIICIlcy9uYXRpdmV0ZXN0L2xpYmRsZXh0X3Rlc3RfZmQvbGliZGxleHRfdGVzdF9mZC5zbyIKKyNlbmRpZgorCitjbGFzcyBEbEV4dFRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKK3Byb3RlY3RlZDoKKyAgdmlydHVhbCB2b2lkIFNldFVwKCkgeworICAgIGhhbmRsZV8gPSBOVUxMOworICAgIC8vIHZlcmlmeSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIGxpYnJhcnkgbG9hZGVkIGFscmVhZHkKKyAgICBBU1NFUlRfRVEoTlVMTCwgZGxzeW0oUlRMRF9ERUZBVUxULCAiZ2V0UmFuZG9tTnVtYmVyIikpOworICAgIC8vIGNhbGwgZGxlcnJvcigpIHRvIHN3YWxsb3cgdGhlIGVycm9yLCBhbmQgY2hlY2sgaXQgd2FzIHRoZSBvbmUgd2Ugd2FudGVkCisgICAgQVNTRVJUX1NUUkVRKCJ1bmRlZmluZWQgc3ltYm9sOiBnZXRSYW5kb21OdW1iZXIiLCBkbGVycm9yKCkpOworICB9CisKKyAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgeworICAgIGlmIChoYW5kbGVfICE9IE5VTEwpIHsKKyAgICAgIEFTU0VSVF9ETF9aRVJPKGRsY2xvc2UoaGFuZGxlXykpOworICAgIH0KKyAgfQorCisgIHZvaWQqIGhhbmRsZV87Cit9OworCitURVNUX0YoRGxFeHRUZXN0LCBFeHRJbmZvTnVsbCkgeworICBoYW5kbGVfID0gYW5kcm9pZF9kbG9wZW5fZXh0KExJQk5BTUUsIFJUTERfTk9XLCBOVUxMKTsKKyAgQVNTRVJUX0RMX05PVE5VTEwoaGFuZGxlXyk7CisgIGZuIGYgPSByZWludGVycHJldF9jYXN0PGZuPihkbHN5bShoYW5kbGVfLCAiZ2V0UmFuZG9tTnVtYmVyIikpOworICBBU1NFUlRfRExfTk9UTlVMTChmKTsKKyAgRVhQRUNUX0VRKDQsIGYoKSk7Cit9CisKK1RFU1RfRihEbEV4dFRlc3QsIEV4dEluZm9Ob0ZsYWdzKSB7CisgIGFuZHJvaWRfZGxleHRpbmZvIGV4dGluZm87CisgIGV4dGluZm8uZmxhZ3MgPSAwOworICBoYW5kbGVfID0gYW5kcm9pZF9kbG9wZW5fZXh0KExJQk5BTUUsIFJUTERfTk9XLCAmZXh0aW5mbyk7CisgIEFTU0VSVF9ETF9OT1ROVUxMKGhhbmRsZV8pOworICBmbiBmID0gcmVpbnRlcnByZXRfY2FzdDxmbj4oZGxzeW0oaGFuZGxlXywgImdldFJhbmRvbU51bWJlciIpKTsKKyAgQVNTRVJUX0RMX05PVE5VTEwoZik7CisgIEVYUEVDVF9FUSg0LCBmKCkpOworfQorCitURVNUX0YoRGxFeHRUZXN0LCBFeHRJbmZvVXNlRmQpIHsKKyAgY29uc3QgY2hhciogYW5kcm9pZF9kYXRhID0gZ2V0ZW52KCJBTkRST0lEX0RBVEEiKTsKKyAgQVNTRVJUX1RSVUUoYW5kcm9pZF9kYXRhICE9IE5VTEwpOworICBjaGFyIGxpYl9wYXRoW1BBVEhfTUFYXTsKKyAgc25wcmludGYobGliX3BhdGgsIHNpemVvZihsaWJfcGF0aCksIExJQlBBVEgsIGFuZHJvaWRfZGF0YSk7CisKKyAgYW5kcm9pZF9kbGV4dGluZm8gZXh0aW5mbzsKKyAgZXh0aW5mby5mbGFncyA9IEFORFJPSURfRExFWFRfVVNFX0xJQlJBUllfRkQ7CisgIGV4dGluZm8ubGlicmFyeV9mZCA9IFRFTVBfRkFJTFVSRV9SRVRSWShvcGVuKGxpYl9wYXRoLCBPX1JET05MWSB8IE9fQ0xPRVhFQykpOworICBBU1NFUlRfVFJVRShleHRpbmZvLmxpYnJhcnlfZmQgIT0gLTEpOworICBoYW5kbGVfID0gYW5kcm9pZF9kbG9wZW5fZXh0KGxpYl9wYXRoLCBSVExEX05PVywgJmV4dGluZm8pOworICBBU1NFUlRfRExfTk9UTlVMTChoYW5kbGVfKTsKKyAgZm4gZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Zm4+KGRsc3ltKGhhbmRsZV8sICJnZXRSYW5kb21OdW1iZXIiKSk7CisgIEFTU0VSVF9ETF9OT1ROVUxMKGYpOworICBFWFBFQ1RfRVEoNCwgZigpKTsKK30KKworVEVTVF9GKERsRXh0VGVzdCwgUmVzZXJ2ZWQpIHsKKyAgdm9pZCogc3RhcnQgPSBtbWFwKE5VTEwsIExJQlNJWkUsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLAorICAgICAgICAgICAgICAgICAgICAgLTEsIDApOworICBBU1NFUlRfVFJVRShzdGFydCAhPSBNQVBfRkFJTEVEKTsKKyAgYW5kcm9pZF9kbGV4dGluZm8gZXh0aW5mbzsKKyAgZXh0aW5mby5mbGFncyA9IEFORFJPSURfRExFWFRfUkVTRVJWRURfQUREUkVTUzsKKyAgZXh0aW5mby5yZXNlcnZlZF9hZGRyID0gc3RhcnQ7CisgIGV4dGluZm8ucmVzZXJ2ZWRfc2l6ZSA9IExJQlNJWkU7CisgIGhhbmRsZV8gPSBhbmRyb2lkX2Rsb3Blbl9leHQoTElCTkFNRSwgUlRMRF9OT1csICZleHRpbmZvKTsKKyAgQVNTRVJUX0RMX05PVE5VTEwoaGFuZGxlXyk7CisgIGZuIGYgPSByZWludGVycHJldF9jYXN0PGZuPihkbHN5bShoYW5kbGVfLCAiZ2V0UmFuZG9tTnVtYmVyIikpOworICBBU1NFUlRfRExfTk9UTlVMTChmKTsKKyAgRVhQRUNUX0dFKGYsIHN0YXJ0KTsKKyAgRVhQRUNUX0xUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGYpLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpICsgTElCU0laRSk7CisgIEVYUEVDVF9FUSg0LCBmKCkpOworfQorCitURVNUX0YoRGxFeHRUZXN0LCBSZXNlcnZlZFRvb1NtYWxsKSB7CisgIHZvaWQqIHN0YXJ0ID0gbW1hcChOVUxMLCBQQUdFX1NJWkUsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLAorICAgICAgICAgICAgICAgICAgICAgLTEsIDApOworICBBU1NFUlRfVFJVRShzdGFydCAhPSBNQVBfRkFJTEVEKTsKKyAgYW5kcm9pZF9kbGV4dGluZm8gZXh0aW5mbzsKKyAgZXh0aW5mby5mbGFncyA9IEFORFJPSURfRExFWFRfUkVTRVJWRURfQUREUkVTUzsKKyAgZXh0aW5mby5yZXNlcnZlZF9hZGRyID0gc3RhcnQ7CisgIGV4dGluZm8ucmVzZXJ2ZWRfc2l6ZSA9IFBBR0VfU0laRTsKKyAgaGFuZGxlXyA9IGFuZHJvaWRfZGxvcGVuX2V4dChMSUJOQU1FLCBSVExEX05PVywgJmV4dGluZm8pOworICBFWFBFQ1RfRVEoTlVMTCwgaGFuZGxlXyk7Cit9CisKK1RFU1RfRihEbEV4dFRlc3QsIFJlc2VydmVkSGludCkgeworICB2b2lkKiBzdGFydCA9IG1tYXAoTlVMTCwgTElCU0laRSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsCisgICAgICAgICAgICAgICAgICAgICAtMSwgMCk7CisgIEFTU0VSVF9UUlVFKHN0YXJ0ICE9IE1BUF9GQUlMRUQpOworICBhbmRyb2lkX2RsZXh0aW5mbyBleHRpbmZvOworICBleHRpbmZvLmZsYWdzID0gQU5EUk9JRF9ETEVYVF9SRVNFUlZFRF9BRERSRVNTX0hJTlQ7CisgIGV4dGluZm8ucmVzZXJ2ZWRfYWRkciA9IHN0YXJ0OworICBleHRpbmZvLnJlc2VydmVkX3NpemUgPSBMSUJTSVpFOworICBoYW5kbGVfID0gYW5kcm9pZF9kbG9wZW5fZXh0KExJQk5BTUUsIFJUTERfTk9XLCAmZXh0aW5mbyk7CisgIEFTU0VSVF9ETF9OT1ROVUxMKGhhbmRsZV8pOworICBmbiBmID0gcmVpbnRlcnByZXRfY2FzdDxmbj4oZGxzeW0oaGFuZGxlXywgImdldFJhbmRvbU51bWJlciIpKTsKKyAgQVNTRVJUX0RMX05PVE5VTEwoZik7CisgIEVYUEVDVF9HRShmLCBzdGFydCk7CisgIEVYUEVDVF9MVChyZWludGVycHJldF9jYXN0PHZvaWQqPihmKSwKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0YXJ0KSArIExJQlNJWkUpOworICBFWFBFQ1RfRVEoNCwgZigpKTsKK30KKworVEVTVF9GKERsRXh0VGVzdCwgUmVzZXJ2ZWRIaW50VG9vU21hbGwpIHsKKyAgdm9pZCogc3RhcnQgPSBtbWFwKE5VTEwsIFBBR0VfU0laRSwgUFJPVF9OT05FLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsCisgICAgICAgICAgICAgICAgICAgICAtMSwgMCk7CisgIEFTU0VSVF9UUlVFKHN0YXJ0ICE9IE1BUF9GQUlMRUQpOworICBhbmRyb2lkX2RsZXh0aW5mbyBleHRpbmZvOworICBleHRpbmZvLmZsYWdzID0gQU5EUk9JRF9ETEVYVF9SRVNFUlZFRF9BRERSRVNTX0hJTlQ7CisgIGV4dGluZm8ucmVzZXJ2ZWRfYWRkciA9IHN0YXJ0OworICBleHRpbmZvLnJlc2VydmVkX3NpemUgPSBQQUdFX1NJWkU7CisgIGhhbmRsZV8gPSBhbmRyb2lkX2Rsb3Blbl9leHQoTElCTkFNRSwgUlRMRF9OT1csICZleHRpbmZvKTsKKyAgQVNTRVJUX0RMX05PVE5VTEwoaGFuZGxlXyk7CisgIGZuIGYgPSByZWludGVycHJldF9jYXN0PGZuPihkbHN5bShoYW5kbGVfLCAiZ2V0UmFuZG9tTnVtYmVyIikpOworICBBU1NFUlRfRExfTk9UTlVMTChmKTsKKyAgRVhQRUNUX1RSVUUoZiA8IHN0YXJ0IHx8IChyZWludGVycHJldF9jYXN0PHZvaWQqPihmKSA+PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0YXJ0KSArIFBBR0VfU0laRSkpOworICBFWFBFQ1RfRVEoNCwgZigpKTsKK30KKworY2xhc3MgRGxFeHRSZWxyb1NoYXJpbmdUZXN0IDogcHVibGljIERsRXh0VGVzdCB7Citwcm90ZWN0ZWQ6CisgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsKKyAgICBEbEV4dFRlc3Q6OlNldFVwKCk7CisgICAgdm9pZCogc3RhcnQgPSBtbWFwKE5VTEwsIExJQlNJWkUsIFBST1RfTk9ORSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLAorICAgICAgICAgICAgICAgICAgICAgICAtMSwgMCk7CisgICAgQVNTRVJUX1RSVUUoc3RhcnQgIT0gTUFQX0ZBSUxFRCk7CisgICAgZXh0aW5mb18uZmxhZ3MgPSBBTkRST0lEX0RMRVhUX1JFU0VSVkVEX0FERFJFU1M7CisgICAgZXh0aW5mb18ucmVzZXJ2ZWRfYWRkciA9IHN0YXJ0OworICAgIGV4dGluZm9fLnJlc2VydmVkX3NpemUgPSBMSUJTSVpFOworICAgIGV4dGluZm9fLnJlbHJvX2ZkID0gLTE7CisKKyAgICBjb25zdCBjaGFyKiBhbmRyb2lkX2RhdGEgPSBnZXRlbnYoIkFORFJPSURfREFUQSIpOworICAgIEFTU0VSVF9UUlVFKGFuZHJvaWRfZGF0YSAhPSBOVUxMKTsKKyAgICBzbnByaW50ZihyZWxyb19maWxlXywgc2l6ZW9mKHJlbHJvX2ZpbGVfKSwgIiVzL2xvY2FsL3RtcC9saWJkbGV4dF90ZXN0LnJlbHJvIiwgYW5kcm9pZF9kYXRhKTsKKyAgfQorCisgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpIHsKKyAgICBEbEV4dFRlc3Q6OlRlYXJEb3duKCk7CisgICAgaWYgKGV4dGluZm9fLnJlbHJvX2ZkICE9IC0xKSB7CisgICAgICBBU1NFUlRfTk9FUlJPUihjbG9zZShleHRpbmZvXy5yZWxyb19mZCkpOworICAgIH0KKyAgfQorCisgIHZvaWQgQ3JlYXRlUmVscm9GaWxlKGNvbnN0IGNoYXIqIGxpYikgeworICAgIGludCByZWxyb19mZCA9IG9wZW4ocmVscm9fZmlsZV8sIE9fQ1JFQVQgfCBPX1JEV1IgfCBPX1RSVU5DLCAwNjQ0KTsKKyAgICBBU1NFUlRfTk9FUlJPUihyZWxyb19mZCk7CisKKyAgICBwaWRfdCBwaWQgPSBmb3JrKCk7CisgICAgaWYgKHBpZCA9PSAwKSB7CisgICAgICAvLyBjaGlsZCBwcm9jZXNzCisgICAgICBleHRpbmZvXy5mbGFncyB8PSBBTkRST0lEX0RMRVhUX1dSSVRFX1JFTFJPOworICAgICAgZXh0aW5mb18ucmVscm9fZmQgPSByZWxyb19mZDsKKyAgICAgIHZvaWQqIGhhbmRsZSA9IGFuZHJvaWRfZGxvcGVuX2V4dChsaWIsIFJUTERfTk9XLCAmZXh0aW5mb18pOworICAgICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW4gY2hpbGQ6ICVzXG4iLCBkbGVycm9yKCkpOworICAgICAgICBleGl0KDEpOworICAgICAgfQorICAgICAgZXhpdCgwKTsKKyAgICB9CisKKyAgICAvLyBjb250aW51aW5nIGluIHBhcmVudAorICAgIEFTU0VSVF9OT0VSUk9SKGNsb3NlKHJlbHJvX2ZkKSk7CisgICAgQVNTRVJUX05PRVJST1IocGlkKTsKKyAgICBpbnQgc3RhdHVzOworICAgIEFTU0VSVF9FUShwaWQsIHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSk7CisgICAgQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOworICAgIEFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKworICAgIC8vIHJlb3BlbiBmaWxlIGZvciByZWFkaW5nIHNvIGl0IGNhbiBiZSB1c2VkCisgICAgcmVscm9fZmQgPSBvcGVuKHJlbHJvX2ZpbGVfLCBPX1JET05MWSk7CisgICAgQVNTRVJUX05PRVJST1IocmVscm9fZmQpOworICAgIGV4dGluZm9fLmZsYWdzIHw9IEFORFJPSURfRExFWFRfVVNFX1JFTFJPOworICAgIGV4dGluZm9fLnJlbHJvX2ZkID0gcmVscm9fZmQ7CisgIH0KKworICB2b2lkIFRyeVVzaW5nUmVscm8oY29uc3QgY2hhciogbGliKSB7CisgICAgaGFuZGxlXyA9IGFuZHJvaWRfZGxvcGVuX2V4dChsaWIsIFJUTERfTk9XLCAmZXh0aW5mb18pOworICAgIEFTU0VSVF9ETF9OT1ROVUxMKGhhbmRsZV8pOworICAgIGZuIGYgPSByZWludGVycHJldF9jYXN0PGZuPihkbHN5bShoYW5kbGVfLCAiZ2V0UmFuZG9tTnVtYmVyIikpOworICAgIEFTU0VSVF9ETF9OT1ROVUxMKGYpOworICAgIEVYUEVDVF9FUSg0LCBmKCkpOworICB9CisKKyAgdm9pZCBTcGF3bkNoaWxkcmVuQW5kTWVhc3VyZVBzcyhjb25zdCBjaGFyKiBsaWIsIGJvb2wgc2hhcmVfcmVscm8sIHNpemVfdCogcHNzX291dCk7CisKKyAgYW5kcm9pZF9kbGV4dGluZm8gZXh0aW5mb187CisgIGNoYXIgcmVscm9fZmlsZV9bUEFUSF9NQVhdOworfTsKKworVEVTVF9GKERsRXh0UmVscm9TaGFyaW5nVGVzdCwgQ2hpbGRXcml0ZXNHb29kRGF0YSkgeworICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShDcmVhdGVSZWxyb0ZpbGUoTElCTkFNRSkpOworICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShUcnlVc2luZ1JlbHJvKExJQk5BTUUpKTsKK30KKworVEVTVF9GKERsRXh0UmVscm9TaGFyaW5nVGVzdCwgQ2hpbGRXcml0ZXNOb1JlbHJvKSB7CisgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKENyZWF0ZVJlbHJvRmlsZShMSUJOQU1FX05PUkVMUk8pKTsKKyAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoVHJ5VXNpbmdSZWxybyhMSUJOQU1FX05PUkVMUk8pKTsKK30KKworVEVTVF9GKERsRXh0UmVscm9TaGFyaW5nVGVzdCwgUmVscm9GaWxlRW1wdHkpIHsKKyAgaW50IHJlbHJvX2ZkID0gb3BlbihyZWxyb19maWxlXywgT19DUkVBVCB8IE9fUkRXUiB8IE9fVFJVTkMsIDA2NDQpOworICBBU1NFUlRfTk9FUlJPUihyZWxyb19mZCk7CisgIEFTU0VSVF9OT0VSUk9SKGNsb3NlKHJlbHJvX2ZkKSk7CisKKyAgQVNTRVJUX05PX0ZBVEFMX0ZBSUxVUkUoVHJ5VXNpbmdSZWxybyhMSUJOQU1FKSk7Cit9CisKK1RFU1RfRihEbEV4dFJlbHJvU2hhcmluZ1Rlc3QsIFZlcmlmeU1lbW9yeVNhdmluZykgeworICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShDcmVhdGVSZWxyb0ZpbGUoTElCTkFNRSkpOworICBpbnQgcmVscm9fZmQgPSBvcGVuKHJlbHJvX2ZpbGVfLCBPX1JET05MWSk7CisgIEFTU0VSVF9OT0VSUk9SKHJlbHJvX2ZkKTsKKyAgZXh0aW5mb18uZmxhZ3MgfD0gQU5EUk9JRF9ETEVYVF9VU0VfUkVMUk87CisgIGV4dGluZm9fLnJlbHJvX2ZkID0gcmVscm9fZmQ7CisgIGludCBwaXBlZmRbMl07CisgIEFTU0VSVF9OT0VSUk9SKHBpcGUocGlwZWZkKSk7CisKKyAgc2l6ZV90IHdpdGhvdXRfc2hhcmluZywgd2l0aF9zaGFyaW5nOworICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShTcGF3bkNoaWxkcmVuQW5kTWVhc3VyZVBzcyhMSUJOQU1FLCBmYWxzZSwgJndpdGhvdXRfc2hhcmluZykpOworICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShTcGF3bkNoaWxkcmVuQW5kTWVhc3VyZVBzcyhMSUJOQU1FLCB0cnVlLCAmd2l0aF9zaGFyaW5nKSk7CisKKyAgLy8gV2UgZXhwZWN0IHRoZSBzaGFyaW5nIHRvIHNhdmUgYXQgbGVhc3QgMTAlIG9mIHRoZSB0b3RhbCBQU1MuIEluIHByYWN0aWNlCisgIC8vIGl0IHNhdmVzIDQwJSsgZm9yIHRoaXMgdGVzdC4KKyAgc2l6ZV90IGV4cGVjdGVkX3NpemUgPSB3aXRob3V0X3NoYXJpbmcgLSAod2l0aG91dF9zaGFyaW5nLzEwKTsKKyAgRVhQRUNUX0xUKHdpdGhfc2hhcmluZywgZXhwZWN0ZWRfc2l6ZSk7Cit9CisKK3ZvaWQgZ2V0UHNzKHBpZF90IHBpZCwgc2l6ZV90KiBwc3Nfb3V0KSB7CisgIHBtX2tlcm5lbF90KiBrZXJuZWw7CisgIEFTU0VSVF9FUSgwLCBwbV9rZXJuZWxfY3JlYXRlKCZrZXJuZWwpKTsKKworICBwbV9wcm9jZXNzX3QqIHByb2Nlc3M7CisgIEFTU0VSVF9FUSgwLCBwbV9wcm9jZXNzX2NyZWF0ZShrZXJuZWwsIHBpZCwgJnByb2Nlc3MpKTsKKworICBwbV9tYXBfdCoqIG1hcHM7CisgIHNpemVfdCBudW1fbWFwczsKKyAgQVNTRVJUX0VRKDAsIHBtX3Byb2Nlc3NfbWFwcyhwcm9jZXNzLCAmbWFwcywgJm51bV9tYXBzKSk7CisKKyAgc2l6ZV90IHRvdGFsX3BzcyA9IDA7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtX21hcHM7IGkrKykgeworICAgIHBtX21lbXVzYWdlX3QgdXNhZ2U7CisgICAgQVNTRVJUX0VRKDAsIHBtX21hcF91c2FnZShtYXBzW2ldLCAmdXNhZ2UpKTsKKyAgICB0b3RhbF9wc3MgKz0gdXNhZ2UucHNzOworICB9CisgICpwc3Nfb3V0ID0gdG90YWxfcHNzOworCisgIGZyZWUobWFwcyk7CisgIHBtX3Byb2Nlc3NfZGVzdHJveShwcm9jZXNzKTsKKyAgcG1fa2VybmVsX2Rlc3Ryb3koa2VybmVsKTsKK30KKwordm9pZCBEbEV4dFJlbHJvU2hhcmluZ1Rlc3Q6OlNwYXduQ2hpbGRyZW5BbmRNZWFzdXJlUHNzKGNvbnN0IGNoYXIqIGxpYiwgYm9vbCBzaGFyZV9yZWxybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqIHBzc19vdXQpIHsKKyAgY29uc3QgaW50IENISUxEUkVOID0gMjA7CisKKyAgLy8gQ3JlYXRlIGNoaWxkcmVuCisgIHBpZF90IGNoaWxkcGlkW0NISUxEUkVOXTsKKyAgaW50IGNoaWxkcGlwZVtDSElMRFJFTl07CisgIGZvciAoaW50IGk9MDsgaTxDSElMRFJFTjsgKytpKSB7CisgICAgY2hhciByZWFkX2J1ZjsKKyAgICBpbnQgY2hpbGRfZG9uZV9waXBlWzJdLCBwYXJlbnRfZG9uZV9waXBlWzJdOworICAgIEFTU0VSVF9OT0VSUk9SKHBpcGUoY2hpbGRfZG9uZV9waXBlKSk7CisgICAgQVNTRVJUX05PRVJST1IocGlwZShwYXJlbnRfZG9uZV9waXBlKSk7CisKKyAgICBwaWRfdCBjaGlsZCA9IGZvcmsoKTsKKyAgICBpZiAoY2hpbGQgPT0gMCkgeworICAgICAgLy8gY2xvc2UgdGhlICd3cm9uZycgZW5kcyBvZiB0aGUgcGlwZXMgaW4gdGhlIGNoaWxkCisgICAgICBjbG9zZShjaGlsZF9kb25lX3BpcGVbMF0pOworICAgICAgY2xvc2UocGFyZW50X2RvbmVfcGlwZVsxXSk7CisKKyAgICAgIC8vIG9wZW4gdGhlIGxpYnJhcnkKKyAgICAgIHZvaWQqIGhhbmRsZTsKKyAgICAgIGlmIChzaGFyZV9yZWxybykgeworICAgICAgICBoYW5kbGUgPSBhbmRyb2lkX2Rsb3Blbl9leHQobGliLCBSVExEX05PVywgJmV4dGluZm9fKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGhhbmRsZSA9IGRsb3BlbihsaWIsIFJUTERfTk9XKTsKKyAgICAgIH0KKyAgICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImluIGNoaWxkOiAlc1xuIiwgZGxlcnJvcigpKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICAgIH0KKworICAgICAgLy8gY2xvc2Ugd3JpdGUgZW5kIG9mIGNoaWxkX2RvbmVfcGlwZSB0byBzaWduYWwgdGhlIHBhcmVudCB0aGF0IHdlJ3JlIGRvbmUuCisgICAgICBjbG9zZShjaGlsZF9kb25lX3BpcGVbMV0pOworCisgICAgICAvLyB3YWl0IGZvciB0aGUgcGFyZW50IHRvIGNsb3NlIHBhcmVudF9kb25lX3BpcGUsIHRoZW4gZXhpdAorICAgICAgcmVhZChwYXJlbnRfZG9uZV9waXBlWzBdLCAmcmVhZF9idWYsIDEpOworICAgICAgZXhpdCgwKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9FUlJPUihjaGlsZCk7CisKKyAgICAvLyBjbG9zZSB0aGUgJ3dyb25nJyBlbmRzIG9mIHRoZSBwaXBlcyBpbiB0aGUgcGFyZW50CisgICAgY2xvc2UoY2hpbGRfZG9uZV9waXBlWzFdKTsKKyAgICBjbG9zZShwYXJlbnRfZG9uZV9waXBlWzBdKTsKKworICAgIC8vIHdhaXQgZm9yIHRoZSBjaGlsZCB0byBiZSBkb25lCisgICAgcmVhZChjaGlsZF9kb25lX3BpcGVbMF0sICZyZWFkX2J1ZiwgMSk7CisgICAgY2xvc2UoY2hpbGRfZG9uZV9waXBlWzBdKTsKKworICAgIC8vIHNhdmUgdGhlIGNoaWxkJ3MgcGlkIGFuZCB0aGUgcGFyZW50X2RvbmVfcGlwZQorICAgIGNoaWxkcGlkW2ldID0gY2hpbGQ7CisgICAgY2hpbGRwaXBlW2ldID0gcGFyZW50X2RvbmVfcGlwZVsxXTsKKyAgfQorCisgIC8vIFN1bSB0aGUgUFNTIG9mIGFsbCB0aGUgY2hpbGRyZW4KKyAgc2l6ZV90IHRvdGFsX3BzcyA9IDA7CisgIGZvciAoaW50IGk9MDsgaTxDSElMRFJFTjsgKytpKSB7CisgICAgc2l6ZV90IGNoaWxkX3BzczsKKyAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShnZXRQc3MoY2hpbGRwaWRbaV0sICZjaGlsZF9wc3MpKTsKKyAgICB0b3RhbF9wc3MgKz0gY2hpbGRfcHNzOworICB9CisgICpwc3Nfb3V0ID0gdG90YWxfcHNzOworCisgIC8vIENsb3NlIHBpcGVzIGFuZCB3YWl0IGZvciBjaGlsZHJlbiB0byBleGl0CisgIGZvciAoaW50IGk9MDsgaTxDSElMRFJFTjsgKytpKSB7CisgICAgQVNTRVJUX05PRVJST1IoY2xvc2UoY2hpbGRwaXBlW2ldKSk7CisgIH0KKyAgZm9yIChpbnQgaT0wOyBpPENISUxEUkVOOyArK2kpIHsKKyAgICBpbnQgc3RhdHVzOworICAgIEFTU0VSVF9FUShjaGlsZHBpZFtpXSwgd2FpdHBpZChjaGlsZHBpZFtpXSwgJnN0YXR1cywgMCkpOworICAgIEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTsKKyAgICBBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2RsZmNuX3Rlc3QuY3BwIGIvdGVzdHMvZGxmY25fdGVzdC5jcHAKaW5kZXggZmM5MGRkOS4uNDU3ZmNkNSAxMDA2NDQKLS0tIGEvdGVzdHMvZGxmY25fdGVzdC5jcHAKKysrIGIvdGVzdHMvZGxmY25fdGVzdC5jcHAKQEAgLTI3LDkgKzI3LDIxIEBACiAjZGVmaW5lIEFTU0VSVF9TVUJTVFIobmVlZGxlLCBoYXlzdGFjaykgXAogICAgIEFTU0VSVF9QUkVEX0ZPUk1BVDIoOjp0ZXN0aW5nOjpJc1N1YnN0cmluZywgbmVlZGxlLCBoYXlzdGFjaykKIAotc3RhdGljIGJvb2wgZ0NhbGxlZCA9IGZhbHNlOworc3RhdGljIGJvb2wgZ19jYWxsZWQgPSBmYWxzZTsKIGV4dGVybiAiQyIgdm9pZCBEbFN5bVRlc3RGdW5jdGlvbigpIHsKLSAgZ0NhbGxlZCA9IHRydWU7CisgIGdfY2FsbGVkID0gdHJ1ZTsKK30KKworc3RhdGljIGludCBnX2N0b3JfZnVuY3Rpb25fY2FsbGVkID0gMDsKKworZXh0ZXJuICJDIiB2b2lkIGN0b3JfZnVuY3Rpb24oKSBfX2F0dHJpYnV0ZV9fICgoY29uc3RydWN0b3IpKTsKKworZXh0ZXJuICJDIiB2b2lkIGN0b3JfZnVuY3Rpb24oKSB7CisgIGdfY3Rvcl9mdW5jdGlvbl9jYWxsZWQgPSAxNzsKK30KKworVEVTVChkbGZjbiwgY3Rvcl9mdW5jdGlvbl9jYWxsKSB7CisgIEFTU0VSVF9FUSgxNywgZ19jdG9yX2Z1bmN0aW9uX2NhbGxlZCk7CiB9CiAKIFRFU1QoZGxmY24sIGRsc3ltX2luX3NlbGYpIHsKQEAgLTQzLDE3ICs1NSw0MiBAQAogCiAgIHZvaWQgKCpmdW5jdGlvbikoKSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihzeW0pOwogCi0gIGdDYWxsZWQgPSBmYWxzZTsKKyAgZ19jYWxsZWQgPSBmYWxzZTsKICAgZnVuY3Rpb24oKTsKLSAgQVNTRVJUX1RSVUUoZ0NhbGxlZCk7CisgIEFTU0VSVF9UUlVFKGdfY2FsbGVkKTsKIAogICBBU1NFUlRfRVEoMCwgZGxjbG9zZShzZWxmKSk7CiB9CiAKK1RFU1QoZGxmY24sIGRsc3ltX3dpdGhfZGVwZW5kZW5jaWVzKSB7CisgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbigibGlidGVzdF93aXRoX2RlcGVuZGVuY3kuc28iLCBSVExEX05PVyk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSAhPSBOVUxMKTsKKyAgZGxlcnJvcigpOworICAvLyBUaGlzIHN5bWJvbCBpcyBpbiBEVF9ORUVERUQgbGlicmFyeS4KKyAgdm9pZCogc3ltID0gZGxzeW0oaGFuZGxlLCAiZ2V0UmFuZG9tTnVtYmVyIik7CisgIEFTU0VSVF9UUlVFKHN5bSAhPSBOVUxMKTsKKyAgaW50ICgqZm4pKHZvaWQpOworICBmbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ICgqKSh2b2lkKT4oc3ltKTsKKyAgRVhQRUNUX0VRKDQsIGZuKCkpOworICBkbGNsb3NlKGhhbmRsZSk7Cit9CisKK1RFU1QoZGxmY24sIGRsb3Blbl9ub2xvYWQpIHsKKyAgdm9pZCogaGFuZGxlID0gZGxvcGVuKCJsaWJ0ZXN0X3NpbXBsZS5zbyIsIFJUTERfTk9XIHwgUlRMRF9OT0xPQUQpOworICBBU1NFUlRfVFJVRShoYW5kbGUgPT0gTlVMTCk7CisgIGhhbmRsZSA9IGRsb3BlbigibGlidGVzdF9zaW1wbGUuc28iLCBSVExEX05PVyk7CisgIHZvaWQqIGhhbmRsZTIgPSBkbG9wZW4oImxpYnRlc3Rfc2ltcGxlLnNvIiwgUlRMRF9OT1cgfCBSVExEX05PTE9BRCk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSAhPSBOVUxMKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlMiAhPSBOVUxMKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlID09IGhhbmRsZTIpOworICBBU1NFUlRfRVEoMCwgZGxjbG9zZShoYW5kbGUpKTsKKyAgQVNTRVJUX0VRKDAsIGRsY2xvc2UoaGFuZGxlMikpOworfQorCiBURVNUKGRsZmNuLCBkbG9wZW5fZmFpbHVyZSkgewogICB2b2lkKiBzZWxmID0gZGxvcGVuKCIvZG9lcy9ub3QvZXhpc3QiLCBSVExEX05PVyk7CiAgIEFTU0VSVF9UUlVFKHNlbGYgPT0gTlVMTCk7Ci0jaWYgX19CSU9OSUNfXworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgQVNTRVJUX1NUUkVRKCJkbG9wZW4gZmFpbGVkOiBsaWJyYXJ5IFwiL2RvZXMvbm90L2V4aXN0XCIgbm90IGZvdW5kIiwgZGxlcnJvcigpKTsKICNlbHNlCiAgIEFTU0VSVF9TVFJFUSgiL2RvZXMvbm90L2V4aXN0OiBjYW5ub3Qgb3BlbiBzaGFyZWQgb2JqZWN0IGZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiLCBkbGVycm9yKCkpOwpAQCAtODksMTcgKzEyNiwxNiBAQAogCiAgIHZvaWQqIHN5bTsKIAotICAvLyBOVUxMIGhhbmRsZS4KKyNpZiBkZWZpbmVkKF9fQklPTklDX18pICYmICFkZWZpbmVkKF9fTFA2NF9fKQorICAvLyBSVExEX0RFRkFVTFQgaW4gbHAzMiBiaW9uaWMgaXMgbm90ICh2b2lkKikwCisgIC8vIHNvIGl0IGNhbiBiZSBkaXN0aW5ndWlzaGVkIGZyb20gdGhlIE5VTEwgaGFuZGxlLgogICBzeW0gPSBkbHN5bShOVUxMLCAidGVzdCIpOwogICBBU1NFUlRfVFJVRShzeW0gPT0gTlVMTCk7Ci0jaWYgX19CSU9OSUNfXwogICBBU1NFUlRfU1VCU1RSKCJkbHN5bSBsaWJyYXJ5IGhhbmRsZSBpcyBudWxsIiwgZGxlcnJvcigpKTsKLSNlbHNlCi0gIEFTU0VSVF9TVUJTVFIoInVuZGVmaW5lZCBzeW1ib2w6IHRlc3QiLCBkbGVycm9yKCkpOyAvLyBnbGliYyBpc24ndCBzcGVjaWZpYyBhYm91dCB0aGUgZmFpbHVyZS4KICNlbmRpZgogCiAgIC8vIE5VTEwgc3ltYm9sIG5hbWUuCi0jaWYgX19CSU9OSUNfXworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgLy8gZ2xpYmMgbWFya3MgdGhpcyBwYXJhbWV0ZXIgbm9uLW51bGwgYW5kIFNFR1ZzIGlmIHlvdSBjaGVhdC4KICAgc3ltID0gZGxzeW0oc2VsZiwgTlVMTCk7CiAgIEFTU0VSVF9UUlVFKHN5bSA9PSBOVUxMKTsKQEAgLTE1MiwxMCArMTg4LDggQEAKICAgLy8gTG9vayBpbiAvcHJvYy9waWQvbWFwcyB0byBmaW5kIG91dCB3aGF0IGFkZHJlc3Mgd2Ugd2VyZSBsb2FkZWQgYXQuCiAgIC8vIFRPRE86IGZhY3RvciAvcHJvYy9waWQvbWFwcyBwYXJzaW5nIG91dCBpbnRvIGEgY2xhc3MgYW5kIHJldXNlIGFsbCBvdmVyIGJpb25pYy4KICAgdm9pZCogYmFzZV9hZGRyZXNzID0gTlVMTDsKLSAgY2hhciBwYXRoW1BBVEhfTUFYXTsKLSAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiL3Byb2MvJWQvbWFwcyIsIGdldHBpZCgpKTsKICAgY2hhciBsaW5lW0JVRlNJWl07Ci0gIEZJTEUqIGZwID0gZm9wZW4ocGF0aCwgInIiKTsKKyAgRklMRSogZnAgPSBmb3BlbigiL3Byb2Mvc2VsZi9tYXBzIiwgInIiKTsKICAgQVNTRVJUX1RSVUUoZnAgIT0gTlVMTCk7CiAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZwKSAhPSBOVUxMKSB7CiAgICAgdWludHB0cl90IHN0YXJ0ID0gc3RydG91bChsaW5lLCAwLCAxNik7CkBAIC0yMDYsNyArMjQwLDcgQEAKICAgZGxlcnJvcigpOyAvLyBDbGVhciBhbnkgcGVuZGluZyBlcnJvcnMuCiAgIHZvaWQqIGhhbmRsZTsKIAotI2lmZGVmIF9fR0xJQkNfXworI2lmIGRlZmluZWQoX19HTElCQ19fKQogICAvLyBnbGliYyB3YXMgc21hcnQgZW5vdWdoIG5vdCB0byBkZWZpbmUgUlRMRF9OT1cgYXMgMCwgc28gaXQgY2FuIGRldGVjdCBtaXNzaW5nIGZsYWdzLgogICBoYW5kbGUgPSBkbG9wZW4oTlVMTCwgMCk7CiAgIEFTU0VSVF9UUlVFKGhhbmRsZSA9PSBOVUxMKTsKQEAgLTI0MiwzICsyNzYsMjMgQEAKICAgdm9pZCogYWRkciA9IGRsc3ltKFJUTERfTkVYVCwgImZvcGVuIik7CiAgIEFTU0VSVF9UUlVFKGFkZHIgIT0gTlVMTCk7CiB9CisKK1RFU1QoZGxmY24sIGRsc3ltX3dlYWtfZnVuYykgeworICBkbGVycm9yKCk7CisgIHZvaWQqIGhhbmRsZSA9IGRsb3BlbigibGlidGVzdF9kbHN5bV93ZWFrX2Z1bmMuc28iLFJUTERfTk9XKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlICE9IE5VTEwpOworCisgIGludCAoKndlYWtfZnVuYykoKTsKKyAgd2Vha19mdW5jID0gcmVpbnRlcnByZXRfY2FzdDxpbnQgKCopKCk+KGRsc3ltKGhhbmRsZSwgIndlYWtfZnVuYyIpKTsKKyAgQVNTRVJUX1RSVUUod2Vha19mdW5jICE9IE5VTEwpIDw8ICJkbGVycm9yOiAiIDw8IGRsZXJyb3IoKTsKKyAgRVhQRUNUX0VRKDQyLCB3ZWFrX2Z1bmMoKSk7CisgIGRsY2xvc2UoaGFuZGxlKTsKK30KKworVEVTVChkbGZjbiwgZGxvcGVuX3N5bWxpbmspIHsKKyAgdm9pZCogaGFuZGxlMSA9IGRsb3BlbigibGliZGxleHRfdGVzdC5zbyIsIFJUTERfTk9XKTsKKyAgdm9pZCogaGFuZGxlMiA9IGRsb3BlbigibGliZGxleHRfdGVzdF92Mi5zbyIsIFJUTERfTk9XKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlMSAhPSBOVUxMKTsKKyAgQVNTRVJUX1RSVUUoaGFuZGxlMiAhPSBOVUxMKTsKKyAgQVNTRVJUX0VRKGhhbmRsZTEsIGhhbmRsZTIpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZXZlbnRmZF90ZXN0LmNwcCBiL3Rlc3RzL2V2ZW50ZmRfdGVzdC5jcHAKaW5kZXggMmMyYzVmMC4uYWE4OGEzYiAxMDA2NDQKLS0tIGEvdGVzdHMvZXZlbnRmZF90ZXN0LmNwcAorKysgYi90ZXN0cy9ldmVudGZkX3Rlc3QuY3BwCkBAIC0xNCwxMSArMTQsMjUgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCi0jaWYgIWRlZmluZWQoX19HTElCQ19fKSAvLyBBbmRyb2lkJ3MgcHJlYnVpbHQgZ2NjJ3MgaGVhZGVyIGZpbGVzIGRvbid0IGluY2x1ZGUgPHN5cy9ldmVudGZkLmg+LgotCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSAvLyBBbmRyb2lkJ3MgcHJlYnVpbHQgZ2NjJ3MgaGVhZGVyIGZpbGVzIGRvbid0IGluY2x1ZGUgPHN5cy9ldmVudGZkLmg+LgogI2luY2x1ZGUgPHN5cy9ldmVudGZkLmg+CisjZWxzZQorLy8gSW5jbHVkZSB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMgb2Ygc3lzL2V2ZW50ZmQuaCByaWdodCBoZXJlLgorI2luY2x1ZGUgPHN0ZGludC5oPgorCit0eXBlZGVmIHVpbnQ2NF90IGV2ZW50ZmRfdDsKKworX19CRUdJTl9ERUNMUworZXh0ZXJuIGludCBldmVudGZkKGludCwgaW50KTsKK2V4dGVybiBpbnQgZXZlbnRmZF9yZWFkKGludCwgZXZlbnRmZF90Kik7CitleHRlcm4gaW50IGV2ZW50ZmRfd3JpdGUoaW50LCBldmVudGZkX3QpOworX19FTkRfREVDTFMKKyNlbmRpZgogCiBURVNUKGV2ZW50ZmQsIHNtb2tlKSB7CiAgIHVuc2lnbmVkIGludCBpbml0aWFsX3ZhbHVlID0gMjsKQEAgLTQzLDUgKzU3LDMgQEAKIAogICBjbG9zZShmZCk7CiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvZmNudGxfdGVzdC5jcHAgYi90ZXN0cy9mY250bF90ZXN0LmNwcAppbmRleCBhMDk0ZmFjLi4zZmQwYThjIDEwMDY0NAotLS0gYS90ZXN0cy9mY250bF90ZXN0LmNwcAorKysgYi90ZXN0cy9mY250bF90ZXN0LmNwcApAQCAtMTksNiArMTksOCBAQAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KIAorI2luY2x1ZGUgIlRlbXBvcmFyeUZpbGUuaCIKKwogVEVTVChmY250bCwgZmNudGxfc21va2UpIHsKICAgaW50IGZkID0gb3BlbigiL3Byb2MvdmVyc2lvbiIsIE9fUkRPTkxZKTsKICAgQVNTRVJUX1RSVUUoZmQgIT0gLTEpOwpAQCAtMzMsNCArMzUsMjA1IEBACiAgIGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQpOwogICBBU1NFUlRfVFJVRShmbGFncyAhPSAtMSk7CiAgIEFTU0VSVF9FUShGRF9DTE9FWEVDLCBmbGFncyAmIEZEX0NMT0VYRUMpOworCisgIGNsb3NlKGZkKTsKK30KKworVEVTVChmY250bCwgb3Blbl9vcGVuNjQpIHsKKyAgaW50IGZkOworCisgIGZkID0gb3BlbigiL3Byb2MvdmVyc2lvbiIsIE9fUkRPTkxZKTsKKyAgQVNTRVJUX1RSVUUoZmQgIT0gLTEpOworICBjbG9zZShmZCk7CisKKyAgZmQgPSBvcGVuNjQoIi9wcm9jL3ZlcnNpb24iLCBPX1JET05MWSk7CisgIEFTU0VSVF9UUlVFKGZkICE9IC0xKTsKKyAgY2xvc2UoZmQpOworfQorCitURVNUKGZjbnRsLCBvcGVuYXRfb3BlbmF0NjQpIHsKKyAgaW50IGZkOworCisgIGZkID0gb3BlbmF0KEFUX0ZEQ1dELCAiL3Byb2MvdmVyc2lvbiIsIE9fUkRPTkxZKTsKKyAgQVNTRVJUX1RSVUUoZmQgIT0gLTEpOworICBjbG9zZShmZCk7CisKKyAgZmQgPSBvcGVuYXQ2NChBVF9GRENXRCwgIi9wcm9jL3ZlcnNpb24iLCBPX1JET05MWSk7CisgIEFTU0VSVF9UUlVFKGZkICE9IC0xKTsKKyAgY2xvc2UoZmQpOworfQorCitURVNUKGZjbnRsLCBjcmVhdF9jcmVhdDY0KSB7CisgIEFTU0VSVF9FUSgtMSwgY3JlYXQoIiIsIDA2NjYpKTsKKyAgQVNTRVJUX0VRKEVOT0VOVCwgZXJybm8pOworICBBU1NFUlRfRVEoLTEsIGNyZWF0NjQoIiIsIDA2NjYpKTsKKyAgQVNTRVJUX0VRKEVOT0VOVCwgZXJybm8pOworfQorCitURVNUKGZjbnRsLCBwb3NpeF9mYWR2aXNlKSB7CisgIFRlbXBvcmFyeUZpbGUgdGY7CisgIGVycm5vID0gMDsKKworICBFWFBFQ1RfRVEoRUJBREYsIHBvc2l4X2ZhZHZpc2UoLTEsIDAsIDAsIFBPU0lYX0ZBRFZfTk9STUFMKSk7CisgIEVYUEVDVF9FUSgwLCBlcnJubyk7CisKKyAgRVhQRUNUX0VRKEVCQURGLCBwb3NpeF9mYWR2aXNlNjQoLTEsIDAsIDAsIFBPU0lYX0ZBRFZfTk9STUFMKSk7CisgIEVYUEVDVF9FUSgwLCBlcnJubyk7CisKKyAgRVhQRUNUX0VRKEVJTlZBTCwgcG9zaXhfZmFkdmlzZSh0Zi5mZCwgMCwgMCwgLTEpKTsKKyAgRVhQRUNUX0VRKDAsIGVycm5vKTsKKworICBFWFBFQ1RfRVEoRUlOVkFMLCBwb3NpeF9mYWR2aXNlNjQodGYuZmQsIDAsIDAsIC0xKSk7CisgIEVYUEVDVF9FUSgwLCBlcnJubyk7CisKKyAgRVhQRUNUX0VRKDAsIHBvc2l4X2ZhZHZpc2UodGYuZmQsIDAsIDAsIFBPU0lYX0ZBRFZfTk9STUFMKSk7CisgIEVYUEVDVF9FUSgwLCBwb3NpeF9mYWR2aXNlNjQodGYuZmQsIDAsIDAsIFBPU0lYX0ZBRFZfTk9STUFMKSk7Cit9CisKK1RFU1QoZmNudGwsIGZhbGxvY2F0ZV9FSU5WQUwpIHsKKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKworICAvLyBmYWxsb2NhdGUvZmFsbG9jYXRlNjQgc2V0IGVycm5vLgorICAvLyBwb3NpeF9mYWxsb2NhdGUvcG9zaXhfZmFsbG9jYXRlNjQgcmV0dXJuIGFuIGVycm5vIHZhbHVlLgorCisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKC0xLCBmYWxsb2NhdGUodGYuZmQsIDAsIDAsIC0xKSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUSgtMSwgZmFsbG9jYXRlNjQodGYuZmQsIDAsIDAsIC0xKSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShFSU5WQUwsIHBvc2l4X2ZhbGxvY2F0ZSh0Zi5mZCwgMCwgLTEpKTsKKyAgQVNTRVJUX0VRKDAsIGVycm5vKTsKKworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShFSU5WQUwsIHBvc2l4X2ZhbGxvY2F0ZTY0KHRmLmZkLCAwLCAtMSkpOworICBBU1NFUlRfRVEoMCwgZXJybm8pOworfQorCitURVNUKGZjbnRsLCBmYWxsb2NhdGUpIHsKKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKyAgc3RydWN0IHN0YXQgc2I7CisgIEFTU0VSVF9FUSgwLCBmc3RhdCh0Zi5mZCwgJnNiKSk7CisgIEFTU0VSVF9FUSgwLCBzYi5zdF9zaXplKTsKKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgQVNTRVJUX0VRKDAsIGZhbGxvY2F0ZSh0Zi5mZCwgMCwgMCwgMSkpOworICBBU1NFUlRfRVEoMCwgZnN0YXQodGYuZmQsICZzYikpOworICBBU1NFUlRfRVEoMSwgc2Iuc3Rfc2l6ZSk7CisKKyAgQVNTRVJUX0VRKDAsIGZhbGxvY2F0ZTY0KHRmLmZkLCAwLCAwLCAyKSk7CisgIEFTU0VSVF9FUSgwLCBmc3RhdCh0Zi5mZCwgJnNiKSk7CisgIEFTU0VSVF9FUSgyLCBzYi5zdF9zaXplKTsKKyNlbmRpZgorCisgIEFTU0VSVF9FUSgwLCBwb3NpeF9mYWxsb2NhdGUodGYuZmQsIDAsIDMpKTsKKyAgQVNTRVJUX0VRKDAsIGZzdGF0KHRmLmZkLCAmc2IpKTsKKyAgQVNTRVJUX0VRKDMsIHNiLnN0X3NpemUpOworCisgIEFTU0VSVF9FUSgwLCBwb3NpeF9mYWxsb2NhdGU2NCh0Zi5mZCwgMCwgNCkpOworICBBU1NFUlRfRVEoMCwgZnN0YXQodGYuZmQsICZzYikpOworICBBU1NFUlRfRVEoNCwgc2Iuc3Rfc2l6ZSk7Cit9CisKK1RFU1QoZmNudGwsIGZfZ2V0bGs2NCkgeworICBpbnQgZmQgPSBvcGVuNjQoIi9wcm9jL3ZlcnNpb24iLCBPX1JET05MWSk7CisgIEFTU0VSVF9UUlVFKGZkICE9IC0xKTsKKworICBzdHJ1Y3QgZmxvY2s2NCBjaGVja19sb2NrOworICBjaGVja19sb2NrLmxfdHlwZSA9IEZfV1JMQ0s7CisgIGNoZWNrX2xvY2subF9zdGFydCA9IDA7CisgIGNoZWNrX2xvY2subF93aGVuY2UgPSBTRUVLX1NFVDsKKyAgY2hlY2tfbG9jay5sX2xlbiA9IDA7CisKKyAgaW50IHJjID0gZmNudGwoZmQsIEZfR0VUTEs2NCwgJmNoZWNrX2xvY2spOworICBBU1NFUlRfRVEoMCwgcmMpOworCisgIGNsb3NlKGZkKTsKK30KKworVEVTVChmY250bCwgc3BsaWNlKSB7CisgIGludCBwaXBlX2Zkc1syXTsKKyAgQVNTRVJUX0VRKDAsIHBpcGUocGlwZV9mZHMpKTsKKworICBpbnQgaW4gPSBvcGVuKCIvcHJvYy9jcHVpbmZvIiwgT19SRE9OTFkpOworICBBU1NFUlRfTkUoaW4sIC0xKTsKKworICBUZW1wb3JhcnlGaWxlIHRmOworCisgIHNzaXplX3QgYnl0ZXNfcmVhZCA9IHNwbGljZShpbiwgMCwgcGlwZV9mZHNbMV0sIE5VTEwsIDgqMTAyNCwgU1BMSUNFX0ZfTU9SRSB8IFNQTElDRV9GX01PVkUpOworICBBU1NFUlRfTkUoYnl0ZXNfcmVhZCwgLTEpOworCisgIHNzaXplX3QgYnl0ZXNfd3JpdHRlbiA9IHNwbGljZShwaXBlX2Zkc1swXSwgTlVMTCwgdGYuZmQsIDAsIGJ5dGVzX3JlYWQsIFNQTElDRV9GX01PUkUgfCBTUExJQ0VfRl9NT1ZFKTsKKyAgQVNTRVJUX0VRKGJ5dGVzX3JlYWQsIGJ5dGVzX3dyaXR0ZW4pOworCisgIGNsb3NlKHBpcGVfZmRzWzBdKTsKKyAgY2xvc2UocGlwZV9mZHNbMV0pOworICBjbG9zZShpbik7Cit9CisKK1RFU1QoZmNudGwsIHZtc3BsaWNlKSB7CisgIGludCBwaXBlX2Zkc1syXTsKKyAgQVNTRVJUX0VRKDAsIHBpcGUocGlwZV9mZHMpKTsKKworICBpb3ZlYyB2WzJdOworICB2WzBdLmlvdl9iYXNlID0gY29uc3RfY2FzdDxjaGFyKj4oImhlbGxvICIpOworICB2WzBdLmlvdl9sZW4gPSA2OworICB2WzFdLmlvdl9iYXNlID0gY29uc3RfY2FzdDxjaGFyKj4oIndvcmxkXG4iKTsKKyAgdlsxXS5pb3ZfbGVuID0gNjsKKyAgc3NpemVfdCBieXRlc193cml0dGVuID0gdm1zcGxpY2UocGlwZV9mZHNbMV0sIHYsIHNpemVvZih2KS9zaXplb2YoaW92ZWMpLCAwKTsKKyAgQVNTRVJUX0VRKHZbMF0uaW92X2xlbiArIHZbMV0uaW92X2xlbiwgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlc193cml0dGVuKSk7CisgIGNsb3NlKHBpcGVfZmRzWzFdKTsKKworICBjaGFyIGJ1ZltCVUZTSVpdOworICBGSUxFKiBmcCA9IGZkb3BlbihwaXBlX2Zkc1swXSwgInIiKTsKKyAgQVNTRVJUX1RSVUUoZnAgIT0gTlVMTCk7CisgIEFTU0VSVF9UUlVFKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSAhPSBOVUxMKTsKKyAgZmNsb3NlKGZwKTsKKyAgQVNTRVJUX1NUUkVRKCJoZWxsbyB3b3JsZFxuIiwgYnVmKTsKK30KKworVEVTVChmY250bCwgdGVlKSB7CisgIGNoYXIgZXhwZWN0ZWRbMjU2XTsKKyAgRklMRSogZXhwZWN0ZWRfZnAgPSBmb3BlbigiL3Byb2MvdmVyc2lvbiIsICJyIik7CisgIEFTU0VSVF9UUlVFKGV4cGVjdGVkX2ZwICE9IE5VTEwpOworICBBU1NFUlRfVFJVRShmZ2V0cyhleHBlY3RlZCwgc2l6ZW9mKGV4cGVjdGVkKSwgZXhwZWN0ZWRfZnApICE9IE5VTEwpOworICBmY2xvc2UoZXhwZWN0ZWRfZnApOworCisgIGludCBwaXBlMVsyXTsKKyAgQVNTRVJUX0VRKDAsIHBpcGUocGlwZTEpKTsKKworICBpbnQgcGlwZTJbMl07CisgIEFTU0VSVF9FUSgwLCBwaXBlKHBpcGUyKSk7CisKKyAgaW50IGluID0gb3BlbigiL3Byb2MvdmVyc2lvbiIsIE9fUkRPTkxZKTsKKyAgQVNTRVJUX05FKGluLCAtMSk7CisKKyAgLy8gV3JpdGUgL3Byb2MvdmVyc2lvbiBpbnRvIHBpcGUxLgorICBzc2l6ZV90IGJ5dGVzX3JlYWQgPSBzcGxpY2UoaW4sIDAsIHBpcGUxWzFdLCBOVUxMLCA4KjEwMjQsIFNQTElDRV9GX01PUkUgfCBTUExJQ0VfRl9NT1ZFKTsKKyAgQVNTRVJUX05FKGJ5dGVzX3JlYWQsIC0xKTsKKyAgY2xvc2UocGlwZTFbMV0pOworCisgIC8vIFRlZSAvcHJvYy92ZXJzaW9uIGZyb20gcGlwZTEgaW50byBwaXBlMi4KKyAgc3NpemVfdCBieXRlc190ZWVkID0gdGVlKHBpcGUxWzBdLCBwaXBlMlsxXSwgU0laRV9NQVgsIDApOworICBBU1NFUlRfRVEoYnl0ZXNfcmVhZCwgYnl0ZXNfdGVlZCk7CisgIGNsb3NlKHBpcGUyWzFdKTsKKworICAvLyBUaGUgb3V0IGZkcyBvZiBib3RoIHBpcGUxIGFuZCBwaXBlMiBzaG91bGQgbm93IGNvbnRhaW4gL3Byb2MvdmVyc2lvbi4KKyAgY2hhciBidWYxW0JVRlNJWl07CisgIEZJTEUqIGZwMSA9IGZkb3BlbihwaXBlMVswXSwgInIiKTsKKyAgQVNTRVJUX1RSVUUoZnAxICE9IE5VTEwpOworICBBU1NFUlRfVFJVRShmZ2V0cyhidWYxLCBzaXplb2YoYnVmMSksIGZwMSkgIT0gTlVMTCk7CisgIGZjbG9zZShmcDEpOworCisgIGNoYXIgYnVmMltCVUZTSVpdOworICBGSUxFKiBmcDIgPSBmZG9wZW4ocGlwZTJbMF0sICJyIik7CisgIEFTU0VSVF9UUlVFKGZwMiAhPSBOVUxMKTsKKyAgQVNTRVJUX1RSVUUoZmdldHMoYnVmMiwgc2l6ZW9mKGJ1ZjIpLCBmcDIpICE9IE5VTEwpOworICBmY2xvc2UoZnAyKTsKKworICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWQsIGJ1ZjEpOworICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWQsIGJ1ZjIpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZm9ydGlmeV90ZXN0LmNwcCBiL3Rlc3RzL2ZvcnRpZnlfdGVzdC5jcHAKaW5kZXggNDA4OTkxZS4uMzUyY2FjNiAxMDA2NDQKLS0tIGEvdGVzdHMvZm9ydGlmeV90ZXN0LmNwcAorKysgYi90ZXN0cy9mb3J0aWZ5X3Rlc3QuY3BwCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC0yMiw2ICsyMyw3IEBACiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CiAKIC8vIFdlIGhhdmUgdG8gc2F5ICJEZWF0aFRlc3QiIGhlcmUgc28gZ3Rlc3Qga25vd3MgdG8gcnVuIHRoaXMgdGVzdCAod2hpY2ggZXhpdHMpCiAvLyBpbiBpdHMgb3duIHByb2Nlc3MuIFVuZm9ydHVuYXRlbHksIHRoZSBDIHByZXByb2Nlc3NvciBkb2Vzbid0IGdpdmUgdXMgYW4KQEAgLTMxLDYgKzMzLDIxIEBACiAjZGVmaW5lIERFQVRIVEVTVF9FVkFMVUFUT1IobmFtZSkgREVBVEhURVNUX1BBU1RFUihuYW1lKQogI2RlZmluZSBERUFUSFRFU1QgREVBVEhURVNUX0VWQUxVQVRPUihURVNUX05BTUUpCiAKK2NsYXNzIERFQVRIVEVTVCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKKyBwcm90ZWN0ZWQ6CisgIHZpcnR1YWwgdm9pZCBTZXRVcCgpIHsKKyAgICBvbGRfZHVtcGFibGVfID0gcHJjdGwoUFJfR0VUX0RVTVBBQkxFLCAwLCAwLCAwLCAwKTsKKyAgICAvLyBTdXBwcmVzcyBkZWJ1Z2dlcmQgc3RhY2sgdHJhY2VzLiBUb28gc2xvdy4KKyAgICBwcmN0bChQUl9TRVRfRFVNUEFCTEUsIDAsIDAsIDAsIDApOworICB9CisKKyAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkgeworICAgIHByY3RsKFBSX1NFVF9EVU1QQUJMRSwgb2xkX2R1bXBhYmxlXywgMCwgMCwgMCwgMCk7CisgIH0KKyBwcml2YXRlOgorICBpbnQgb2xkX2R1bXBhYmxlXzsKK307CisKICNpZiBkZWZpbmVkKF9GT1JUSUZZX1NPVVJDRSkgJiYgX0ZPUlRJRllfU09VUkNFID09IDIKIHN0cnVjdCBmb28gewogICBjaGFyIGVtcHR5WzBdOwpAQCAtNDIsNyArNTksMzIgQEAKICNpZm5kZWYgX19jbGFuZ19fCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzdHJuY3B5X2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cG5jcHlfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGZvbyBteWZvbzsKKyAgaW50IGNvcHlfYW10ID0gYXRvaSgiMTEiKTsKKyAgQVNTRVJUX0VYSVQoc3RwbmNweShteWZvby5hLCAiMDEyMzQ1Njc4OTAiLCBjb3B5X2FtdCksCisgICAgICAgICAgICAgIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBfX2NsYW5nX18KKy8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CisvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgorVEVTVF9GKERFQVRIVEVTVCwgc3RwbmNweTJfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGZvbyBteWZvbzsKKyAgbWVtc2V0KCZteWZvbywgMCwgc2l6ZW9mKG15Zm9vKSk7CisgIG15Zm9vLm9uZVswXSA9ICdBJzsgLy8gbm90IG51bGwgdGVybWluYXRlZCBzdHJpbmcKKyAgQVNTRVJUX0VYSVQoc3RwbmNweShteWZvby5iLCBteWZvby5vbmUsIHNpemVvZihteWZvby5iKSksCisgICAgICAgICAgICAgIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBfX2NsYW5nX18KKy8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CisvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgorVEVTVF9GKERFQVRIVEVTVCwgc3RybmNweV9mb3J0aWZpZWQyKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBpbnQgY29weV9hbXQgPSBhdG9pKCIxMSIpOwpAQCAtNTQsNyArOTYsNyBAQAogI2lmbmRlZiBfX2NsYW5nX18KIC8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgotVEVTVChERUFUSFRFU1QsIHN0cm5jcHkyX2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cm5jcHkyX2ZvcnRpZmllZDIpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIG1lbXNldCgmbXlmb28sIDAsIHNpemVvZihteWZvbykpOwpAQCAtNjcsNyArMTA5LDcgQEAKICNpZm5kZWYgX19jbGFuZ19fCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzcHJpbnRmX2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHNwcmludGZfZm9ydGlmaWVkMikgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgY2hhciBzb3VyY2VfYnVmWzE1XTsKQEAgLTgwLDcgKzEyMiw3IEBACiAjaWZuZGVmIF9fY2xhbmdfXwogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCi1URVNUKERFQVRIVEVTVCwgc3ByaW50ZjJfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3ByaW50ZjJfZm9ydGlmaWVkMikgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgQVNTRVJUX0VYSVQoc3ByaW50ZihteWZvby5hLCAiMDEyMzQ1Njc4OSIpLApAQCAtMTAyLDEyICsxNDQsMTIgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVEVTVChERUFUSFRFU1QsIHZzcHJpbnRmX2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHZzcHJpbnRmX2ZvcnRpZmllZDIpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBBU1NFUlRfRVhJVCh2c3ByaW50Zl9oZWxwZXIyKCIlcyIsICIwMTIzNDU2Nzg5IiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCB2c3ByaW50ZjJfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgdnNwcmludGYyX2ZvcnRpZmllZDIpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBBU1NFUlRfRVhJVCh2c3ByaW50Zl9oZWxwZXIyKCIwMTIzNDU2Nzg5IiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CkBAIC0xMjgsMzAgKzE3MCw1MCBAQAogICByZXR1cm4gcmVzdWx0OwogfQogCi1URVNUKERFQVRIVEVTVCwgdnNucHJpbnRmX2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHZzbnByaW50Zl9mb3J0aWZpZWQyKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgQVNTRVJUX0VYSVQodnNucHJpbnRmX2hlbHBlcjIoIiVzIiwgIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIHZzbnByaW50ZjJfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgdnNucHJpbnRmMl9mb3J0aWZpZWQyKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgQVNTRVJUX0VYSVQodnNucHJpbnRmX2hlbHBlcjIoIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KICNlbmRpZgogCi0jaWYgX19CSU9OSUNfXworI2lmbmRlZiBfX2NsYW5nX18KKy8vIHplcm8gc2l6ZWQgdGFyZ2V0IHdpdGggIlwwIiBzb3VyY2UgKHNob3VsZCBmYWlsKQorLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKKy8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCitURVNUX0YoREVBVEhURVNULCBzdHBjcHlfZm9ydGlmaWVkMikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBmb28gbXlmb287CisgIGNoYXIqIHNyYyA9IHN0cmR1cCgiIik7CisgIEFTU0VSVF9FWElUKHN0cGNweShteWZvby5lbXB0eSwgc3JjKSwKKyAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyAgZnJlZShzcmMpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCit9CisjZW5kaWYKIAogI2lmbmRlZiBfX2NsYW5nX18KIC8vIHplcm8gc2l6ZWQgdGFyZ2V0IHdpdGggIlwwIiBzb3VyY2UgKHNob3VsZCBmYWlsKQogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCi1URVNUKERFQVRIVEVTVCwgc3RyY3B5X2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cmNweV9mb3J0aWZpZWQyKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgY2hhciogc3JjID0gc3RyZHVwKCIiKTsKICAgQVNTRVJUX0VYSVQoc3RyY3B5KG15Zm9vLmVtcHR5LCBzcmMpLAogICAgICAgICAgICAgICB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogICBmcmVlKHNyYyk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KICNlbmRpZgogCkBAIC0xNTksMTMgKzIyMSwxNyBAQAogLy8gemVybyBzaXplZCB0YXJnZXQgd2l0aCBsb25nZXIgc291cmNlIChzaG91bGQgZmFpbCkKIC8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CiAvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgotVEVTVChERUFUSFRFU1QsIHN0cmNweTJfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RyY3B5Ml9mb3J0aWZpZWQyKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgY2hhciogc3JjID0gc3RyZHVwKCIxIik7CiAgIEFTU0VSVF9FWElUKHN0cmNweShteWZvby5lbXB0eSwgc3JjKSwKICAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKICAgZnJlZShzcmMpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAjZW5kaWYKIApAQCAtMTczLDU5ICsyMzksNzYgQEAKIC8vIG9uZSBieXRlIHRhcmdldCB3aXRoIGxvbmdlciBzb3VyY2UgKHNob3VsZCBmYWlsKQogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCi1URVNUKERFQVRIVEVTVCwgc3RyY3B5M19mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJjcHkzX2ZvcnRpZmllZDIpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBjaGFyKiBzcmMgPSBzdHJkdXAoIjEyIik7CiAgIEFTU0VSVF9FWElUKHN0cmNweShteWZvby5vbmUsIHNyYyksCiAgICAgICAgICAgICAgIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiAgIGZyZWUoc3JjKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogI2VuZGlmCiAKICNpZm5kZWYgX19jbGFuZ19fCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzdHJjaHJfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RyY2hyX2ZvcnRpZmllZDIpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBtZW1jcHkobXlmb28uYSwgIjAxMjM0NTY3ODkiLCBzaXplb2YobXlmb28uYSkpOwogICBteWZvby5iWzBdID0gJ1wwJzsKICAgQVNTRVJUX0VYSVQocHJpbnRmKCIlcyIsIHN0cmNocihteWZvby5hLCAnYScpKSwKICAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogI2VuZGlmCiAKICNpZm5kZWYgX19jbGFuZ19fCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzdHJyY2hyX2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cnJjaHJfZm9ydGlmaWVkMikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIG1lbWNweShteWZvby5hLCAiMDEyMzQ1Njc4OSIsIDEwKTsKICAgbWVtY3B5KG15Zm9vLmIsICIwMTIzNCIsIDYpOwogICBBU1NFUlRfRVhJVChwcmludGYoIiVzIiwgc3RycmNocihteWZvby5hLCAnYScpKSwKICAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogI2VuZGlmCiAKICNpZm5kZWYgX19jbGFuZ19fCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzdHJsY3B5X2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cmxjcHlfZm9ydGlmaWVkMikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIHN0cmNweShteWZvby5hLCAiMDEiKTsKICAgc2l6ZV90IG4gPSBzdHJsZW4obXlmb28uYSk7CiAgIEFTU0VSVF9FWElUKHN0cmxjcHkobXlmb28ub25lLCBteWZvby5hLCBuKSwKICAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogI2VuZGlmCiAKICNpZm5kZWYgX19jbGFuZ19fCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzdHJsY2F0X2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cmxjYXRfZm9ydGlmaWVkMikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIHN0cmNweShteWZvby5hLCAiMDEiKTsKQEAgLTIzMywxNSArMzE2LDE2IEBACiAgIHNpemVfdCBuID0gc3RybGVuKG15Zm9vLmEpOwogICBBU1NFUlRfRVhJVChzdHJsY2F0KG15Zm9vLm9uZSwgbXlmb28uYSwgbiksCiAgICAgICAgICAgICAgIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KICNlbmRpZgogCi0jZW5kaWYgLyogX19CSU9OSUNfXyAqLwotCiAjaWZuZGVmIF9fY2xhbmdfXwogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCi1URVNUKERFQVRIVEVTVCwgc3RybmNhdF9mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJuY2F0X2ZvcnRpZmllZDIpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmb28gbXlmb287CiAgIHNpemVfdCBuID0gYXRvaSgiMTAiKTsgLy8gYXZvaWQgY29tcGlsZXIgb3B0aW1pemF0aW9ucwpAQCAtMjUzLDcgKzMzNyw3IEBACiAjaWZuZGVmIF9fY2xhbmdfXwogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCi1URVNUKERFQVRIVEVTVCwgc3RybmNhdDJfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RybmNhdDJfZm9ydGlmaWVkMikgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgbXlmb28uYVswXSA9ICdcMCc7CkBAIC0yNjIsNyArMzQ2LDcgQEAKIH0KICNlbmRpZgogCi1URVNUKERFQVRIVEVTVCwgc3RybmNhdDNfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RybmNhdDNfZm9ydGlmaWVkMikgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgbWVtY3B5KG15Zm9vLmEsICIwMTIzNDU2Nzg5Iiwgc2l6ZW9mKG15Zm9vLmEpKTsgLy8gdW50ZXJtaW5hdGVkIHN0cmluZwpAQCAtMjc0LDcgKzM1OCw3IEBACiAjaWZuZGVmIF9fY2xhbmdfXwogLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKIC8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCi1URVNUKERFQVRIVEVTVCwgc3RyY2F0X2ZvcnRpZmllZDIpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cmNhdF9mb3J0aWZpZWQyKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBzcmNbMTFdOwogICBzdHJjcHkoc3JjLCAiMDEyMzQ1Njc4OSIpOwpAQCAtMjg0LDcgKzM2OCw3IEBACiB9CiAjZW5kaWYKIAotVEVTVChERUFUSFRFU1QsIHN0cmNhdDJfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc3RyY2F0Ml9mb3J0aWZpZWQyKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBtZW1jcHkobXlmb28uYSwgIjAxMjM0NTY3ODkiLCBzaXplb2YobXlmb28uYSkpOyAvLyB1bnRlcm1pbmF0ZWQgc3RyaW5nCkBAIC0yOTIsNyArMzc2LDcgQEAKICAgQVNTRVJUX0VYSVQoc3RyY2F0KG15Zm9vLmIsIG15Zm9vLmEpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgc25wcmludGZfZm9ydGlmaWVkMikgeworVEVTVF9GKERFQVRIVEVTVCwgc25wcmludGZfZm9ydGlmaWVkMikgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGZvbyBteWZvbzsKICAgc3RyY3B5KG15Zm9vLmEsICIwMTIzNDU2NzgiKTsKQEAgLTMwMCw3ICszODQsNyBAQAogICBBU1NFUlRfRVhJVChzbnByaW50ZihteWZvby5iLCBuLCAiYSVzIiwgbXlmb28uYSksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCBiemVyb19mb3J0aWZpZWQyKSB7CitURVNUX0YoREVBVEhURVNULCBiemVyb19mb3J0aWZpZWQyKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgZm9vIG15Zm9vOwogICBtZW1jcHkobXlmb28uYiwgIjAxMjM0NTY3ODkiLCBzaXplb2YobXlmb28uYikpOwpAQCAtMzEwLDc0ICszOTQsMTA2IEBACiAKICNlbmRpZiAvKiBkZWZpbmVkKF9GT1JUSUZZX1NPVVJDRSkgJiYgX0ZPUlRJRllfU09VUkNFPTIgKi8KIAotI2lmIF9fQklPTklDX18KIC8vIG11bHRpYnl0ZSB0YXJnZXQgd2hlcmUgd2Ugb3ZlciBmaWxsIChzaG91bGQgZmFpbCkKLVRFU1QoREVBVEhURVNULCBzdHJjcHlfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJjcHlfZm9ydGlmaWVkKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzEwXTsKICAgY2hhciAqb3JpZyA9IHN0cmR1cCgiMDEyMzQ1Njc4OSIpOwogICBBU1NFUlRfRVhJVChzdHJjcHkoYnVmLCBvcmlnKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKICAgZnJlZShvcmlnKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiAvLyB6ZXJvIHNpemVkIHRhcmdldCB3aXRoICJcMCIgc291cmNlIChzaG91bGQgZmFpbCkKLVRFU1QoREVBVEhURVNULCBzdHJjcHkyX2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgc3RyY3B5Ml9mb3J0aWZpZWQpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMF07CiAgIGNoYXIgKm9yaWcgPSBzdHJkdXAoIiIpOwogICBBU1NFUlRfRVhJVChzdHJjcHkoYnVmLCBvcmlnKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKICAgZnJlZShvcmlnKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiAvLyB6ZXJvIHNpemVkIHRhcmdldCB3aXRoIGxvbmdlciBzb3VyY2UgKHNob3VsZCBmYWlsKQotVEVTVChERUFUSFRFU1QsIHN0cmNweTNfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJjcHkzX2ZvcnRpZmllZCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGJ1ZlswXTsKICAgY2hhciAqb3JpZyA9IHN0cmR1cCgiMSIpOwogICBBU1NFUlRfRVhJVChzdHJjcHkoYnVmLCBvcmlnKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKICAgZnJlZShvcmlnKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiAvLyBvbmUgYnl0ZSB0YXJnZXQgd2l0aCBsb25nZXIgc291cmNlIChzaG91bGQgZmFpbCkKLVRFU1QoREVBVEhURVNULCBzdHJjcHk0X2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgc3RyY3B5NF9mb3J0aWZpZWQpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZbMV07CiAgIGNoYXIgKm9yaWcgPSBzdHJkdXAoIjEyIik7CiAgIEFTU0VSVF9FWElUKHN0cmNweShidWYsIG9yaWcpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogICBmcmVlKG9yaWcpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKLVRFU1QoREVBVEhURVNULCBzdHJsZW5fZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJsZW5fZm9ydGlmaWVkKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzEwXTsKICAgbWVtY3B5KGJ1ZiwgIjAxMjM0NTY3ODkiLCBzaXplb2YoYnVmKSk7CiAgIEFTU0VSVF9FWElUKHByaW50ZigiJXpkIiwgc3RybGVuKGJ1ZikpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKLVRFU1QoREVBVEhURVNULCBzdHJjaHJfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJjaHJfZm9ydGlmaWVkKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzEwXTsKICAgbWVtY3B5KGJ1ZiwgIjAxMjM0NTY3ODkiLCBzaXplb2YoYnVmKSk7CiAgIEFTU0VSVF9FWElUKHByaW50ZigiJXMiLCBzdHJjaHIoYnVmLCAnYScpKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCi1URVNUKERFQVRIVEVTVCwgc3RycmNocl9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cnJjaHJfZm9ydGlmaWVkKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzEwXTsKICAgbWVtY3B5KGJ1ZiwgIjAxMjM0NTY3ODkiLCBzaXplb2YoYnVmKSk7CiAgIEFTU0VSVF9FWElUKHByaW50ZigiJXMiLCBzdHJyY2hyKGJ1ZiwgJ2EnKSksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAotVEVTVChERUFUSFRFU1QsIHN0cmxjcHlfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJsY3B5X2ZvcnRpZmllZCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGJ1ZmFbMTVdOwogICBjaGFyIGJ1ZmJbMTBdOwogICBzdHJjcHkoYnVmYSwgIjAxMjM0NTY3ODkwMTIzIik7CiAgIHNpemVfdCBuID0gc3RybGVuKGJ1ZmEpOwogICBBU1NFUlRfRVhJVChzdHJsY3B5KGJ1ZmIsIGJ1ZmEsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKLVRFU1QoREVBVEhURVNULCBzdHJsY2F0X2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgc3RybGNhdF9mb3J0aWZpZWQpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgY2hhciBidWZhWzE1XTsKICAgY2hhciBidWZiWzEwXTsKQEAgLTM4NSwxMSArNTAxLDEyIEBACiAgIHN0cmNweShidWZhLCAiMDEyMzQ1Njc4OTAxMjMiKTsKICAgc2l6ZV90IG4gPSBzdHJsZW4oYnVmYSk7CiAgIEFTU0VSVF9FWElUKHN0cmxjYXQoYnVmYiwgYnVmYSwgbiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAotI2VuZGlmCi0KLVRFU1QoREVBVEhURVNULCBzcHJpbnRmX2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgc3ByaW50Zl9mb3J0aWZpZWQpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGJ1ZlsxMF07CiAgIGNoYXIgc291cmNlX2J1ZlsxNV07CkBAIC00MDAsNyArNTE3LDcgQEAKICNpZm5kZWYgX19jbGFuZ19fCiAvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAogLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KLVRFU1QoREVBVEhURVNULCBzcHJpbnRmX21hbGxvY19mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHNwcmludGZfbWFsbG9jX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIqIGJ1ZiA9IChjaGFyICopIG1hbGxvYygxMCk7CiAgIGNoYXIgc291cmNlX2J1ZlsxMV07CkBAIC00MTAsNyArNTI3LDcgQEAKIH0KICNlbmRpZgogCi1URVNUKERFQVRIVEVTVCwgc3ByaW50ZjJfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzcHJpbnRmMl9mb3J0aWZpZWQpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGJ1Zls1XTsKICAgQVNTRVJUX0VYSVQoc3ByaW50ZihidWYsICJhYWFhYSIpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwpAQCAtNDI3LDEyICs1NDQsMTIgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVEVTVChERUFUSFRFU1QsIHZzcHJpbnRmX2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgdnNwcmludGZfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgQVNTRVJUX0VYSVQodnNwcmludGZfaGVscGVyKCIlcyIsICIwMTIzNDU2Nzg5IiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCB2c3ByaW50ZjJfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCB2c3ByaW50ZjJfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgQVNTRVJUX0VYSVQodnNwcmludGZfaGVscGVyKCIwMTIzNDU2Nzg5IiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CkBAIC00NDksMTcgKzU2NiwxNyBAQAogICByZXR1cm4gcmVzdWx0OwogfQogCi1URVNUKERFQVRIVEVTVCwgdnNucHJpbnRmX2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgdnNucHJpbnRmX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKHZzbnByaW50Zl9oZWxwZXIoIiVzIiwgIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIHZzbnByaW50ZjJfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCB2c25wcmludGYyX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIEFTU0VSVF9FWElUKHZzbnByaW50Zl9oZWxwZXIoIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIHN0cm5jYXRfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzdHJuY2F0X2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzEwXTsKICAgc2l6ZV90IG4gPSBhdG9pKCIxMCIpOyAvLyBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zCkBAIC00NjcsNyArNTg0LDcgQEAKICAgQVNTRVJUX0VYSVQoc3RybmNhdChidWYsICI5IiwgbiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCBzdHJuY2F0Ml9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cm5jYXQyX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzEwXTsKICAgYnVmWzBdID0gJ1wwJzsKQEAgLTQ3NSw3ICs1OTIsNyBAQAogICBBU1NFUlRfRVhJVChzdHJuY2F0KGJ1ZiwgIjAxMjM0NTY3ODkiLCBuKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIHN0cmNhdF9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHN0cmNhdF9mb3J0aWZpZWQpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIHNyY1sxMV07CiAgIHN0cmNweShzcmMsICIwMTIzNDU2Nzg5Iik7CkBAIC00ODQsNyArNjAxLDcgQEAKICAgQVNTRVJUX0VYSVQoc3RyY2F0KGJ1Ziwgc3JjKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIG1lbW1vdmVfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBtZW1tb3ZlX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzIwXTsKICAgc3RyY3B5KGJ1ZiwgIjAxMjM0NTY3ODkiKTsKQEAgLTQ5Miw3ICs2MDksNyBAQAogICBBU1NFUlRfRVhJVChtZW1tb3ZlKGJ1ZiArIDExLCBidWYsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgbWVtY3B5X2ZvcnRpZmllZCkgeworVEVTVF9GKERFQVRIVEVTVCwgbWVtY3B5X2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmYVsxMF07CiAgIGNoYXIgYnVmYlsxMF07CkBAIC01MDEsNyArNjE4LDI0IEBACiAgIEFTU0VSVF9FWElUKG1lbWNweShidWZiLCBidWZhLCBuKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIHN0cm5jcHlfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBzdHBuY3B5X2ZvcnRpZmllZCkgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGNoYXIgYnVmYVsxNV07CisgIGNoYXIgYnVmYlsxMF07CisgIHN0cmNweShidWZhLCAiMDEyMzQ1Njc4OTAxMjMiKTsKKyAgc2l6ZV90IG4gPSBzdHJsZW4oYnVmYSk7CisgIEFTU0VSVF9FWElUKHN0cG5jcHkoYnVmYiwgYnVmYSwgbiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK1RFU1RfRihERUFUSFRFU1QsIHN0cG5jcHkyX2ZvcnRpZmllZCkgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGNoYXIgZGVzdFsxMV07CisgIGNoYXIgc3JjWzEwXTsKKyAgbWVtY3B5KHNyYywgIjAxMjM0NTY3ODkiLCBzaXplb2Yoc3JjKSk7IC8vIHNyYyBpcyBub3QgbnVsbCB0ZXJtaW5hdGVkCisgIEFTU0VSVF9FWElUKHN0cG5jcHkoZGVzdCwgc3JjLCBzaXplb2YoZGVzdCkpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitURVNUX0YoREVBVEhURVNULCBzdHJuY3B5X2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmYVsxNV07CiAgIGNoYXIgYnVmYlsxMF07CkBAIC01MTAsNyArNjQ0LDggQEAKICAgQVNTRVJUX0VYSVQoc3RybmNweShidWZiLCBidWZhLCBuKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIHN0cm5jcHkyX2ZvcnRpZmllZCkgeworCitURVNUX0YoREVBVEhURVNULCBzdHJuY3B5Ml9mb3J0aWZpZWQpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGRlc3RbMTFdOwogICBjaGFyIHNyY1sxMF07CkBAIC01MTgsNyArNjUzLDcgQEAKICAgQVNTRVJUX0VYSVQoc3RybmNweShkZXN0LCBzcmMsIHNpemVvZihkZXN0KSksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCBzbnByaW50Zl9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHNucHJpbnRmX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmYVsxNV07CiAgIGNoYXIgYnVmYlsxMF07CkBAIC01MjcsNyArNjYyLDcgQEAKICAgQVNTRVJUX0VYSVQoc25wcmludGYoYnVmYiwgbiwgIiVzIiwgYnVmYSksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCBiemVyb19mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIGJ6ZXJvX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzEwXTsKICAgbWVtY3B5KGJ1ZiwgIjAxMjM0NTY3ODkiLCBzaXplb2YoYnVmKSk7CkBAIC01MzUsNDEgKzY3MCw0NiBAQAogICBBU1NFUlRfRVhJVChiemVybyhidWYsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgdW1hc2tfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCB1bWFza19mb3J0aWZpZWQpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBtb2RlX3QgbWFzayA9IGF0b2koIjEwMjMiKTsgIC8vIDAxNzc3IGluIG9jdGFsCiAgIEFTU0VSVF9FWElUKHVtYXNrKG1hc2spLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOwogfQogCi1URVNUKERFQVRIVEVTVCwgcmVjdl9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIHJlY3ZfZm9ydGlmaWVkKSB7CiAgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKICAgc2l6ZV90IGRhdGFfbGVuID0gYXRvaSgiMTEiKTsgLy8gc3VwcHJlc3MgY29tcGlsZXIgb3B0aW1pemF0aW9ucwogICBjaGFyIGJ1ZlsxMF07CiAgIEFTU0VSVF9FWElUKHJlY3YoMCwgYnVmLCBkYXRhX2xlbiwgMCksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCBGRF9JU1NFVF9mb3J0aWZpZWQpIHsKK1RFU1RfRihERUFUSFRFU1QsIEZEX0lTU0VUX2ZvcnRpZmllZCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gZ2xpYmMgY2F0Y2hlcyB0aGlzIGF0IGNvbXBpbGUtdGltZS4KICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBmZF9zZXQgc2V0OwogICBtZW1zZXQoJnNldCwgMCwgc2l6ZW9mKHNldCkpOwogICBBU1NFUlRfRVhJVChGRF9JU1NFVCgtMSwgJnNldCksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CisjZW5kaWYKIH0KIAotVEVTVChERUFUSFRFU1QsIEZEX0lTU0VUXzJfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCBGRF9JU1NFVF8yX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzFdOwogICBmZF9zZXQqIHNldCA9IChmZF9zZXQqKSBidWY7CiAgIEFTU0VSVF9FWElUKEZEX0lTU0VUKDAsIHNldCksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CiB9CiAKLVRFU1QoREVBVEhURVNULCBGRF9aRVJPX2ZvcnRpZmllZCkgeworLy8gZ3Rlc3QncyBBU1NFUlRfRVhJVCBuZWVkcyBhIHZhbGlkIGV4cHJlc3Npb24sIGJ1dCBnbGliYyBoYXMgYSBkby13aGlsZSBtYWNyby4KK3N0YXRpYyB2b2lkIEZEX1pFUk9fZnVuY3Rpb24oZmRfc2V0KiBzKSB7IEZEX1pFUk8ocyk7IH0KKworVEVTVF9GKERFQVRIVEVTVCwgRkRfWkVST19mb3J0aWZpZWQpIHsKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBjaGFyIGJ1ZlsxXTsKICAgZmRfc2V0KiBzZXQgPSAoZmRfc2V0KikgYnVmOwotICBBU1NFUlRfRVhJVChGRF9aRVJPKHNldCksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CisgIEFTU0VSVF9FWElUKEZEX1pFUk9fZnVuY3Rpb24oc2V0KSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKIH0KIAotVEVTVChERUFUSFRFU1QsIHJlYWRfZm9ydGlmaWVkKSB7CitURVNUX0YoREVBVEhURVNULCByZWFkX2ZvcnRpZmllZCkgewogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAgIGNoYXIgYnVmWzFdOwogICBzaXplX3QgY3QgPSBhdG9pKCIyIik7IC8vIHByZXZlbnQgb3B0aW1pemF0aW9ucwpAQCAtNzMyLDYgKzg3Miw0NSBAQAogICBBU1NFUlRfRVEoJ1wwJywgIGJ1Zls5XSk7CiB9CiAKK1RFU1QoVEVTVF9OQU1FLCBzdHBuY3B5KSB7CisgIGNoYXIgc3JjWzEwXTsKKyAgY2hhciBkc3RbMTBdOworICBtZW1jcHkoc3JjLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihzcmMpKTsgLy8gbm9uIG51bGwgdGVybWluYXRlZCBzdHJpbmcKKyAgc3RwbmNweShkc3QsIHNyYywgc2l6ZW9mKGRzdCkpOworICBBU1NFUlRfRVEoJzAnLCBkc3RbMF0pOworICBBU1NFUlRfRVEoJzEnLCBkc3RbMV0pOworICBBU1NFUlRfRVEoJzInLCBkc3RbMl0pOworICBBU1NFUlRfRVEoJzMnLCBkc3RbM10pOworICBBU1NFUlRfRVEoJzQnLCBkc3RbNF0pOworICBBU1NFUlRfRVEoJzUnLCBkc3RbNV0pOworICBBU1NFUlRfRVEoJzYnLCBkc3RbNl0pOworICBBU1NFUlRfRVEoJzcnLCBkc3RbN10pOworICBBU1NFUlRfRVEoJzgnLCBkc3RbOF0pOworICBBU1NFUlRfRVEoJzknLCBkc3RbOV0pOworfQorCitURVNUKFRFU1RfTkFNRSwgc3RwbmNweTIpIHsKKyAgY2hhciBzcmNbMTBdOworICBjaGFyIGRzdFsxNV07CisgIG1lbWNweShzcmMsICIwMTIzNDU2NzhcMCIsIHNpemVvZihzcmMpKTsKKyAgc3RwbmNweShkc3QsIHNyYywgc2l6ZW9mKGRzdCkpOworICBBU1NFUlRfRVEoJzAnLCAgZHN0WzBdKTsKKyAgQVNTRVJUX0VRKCcxJywgIGRzdFsxXSk7CisgIEFTU0VSVF9FUSgnMicsICBkc3RbMl0pOworICBBU1NFUlRfRVEoJzMnLCAgZHN0WzNdKTsKKyAgQVNTRVJUX0VRKCc0JywgIGRzdFs0XSk7CisgIEFTU0VSVF9FUSgnNScsICBkc3RbNV0pOworICBBU1NFUlRfRVEoJzYnLCAgZHN0WzZdKTsKKyAgQVNTRVJUX0VRKCc3JywgIGRzdFs3XSk7CisgIEFTU0VSVF9FUSgnOCcsICBkc3RbOF0pOworICBBU1NFUlRfRVEoJ1wwJywgZHN0WzldKTsKKyAgQVNTRVJUX0VRKCdcMCcsIGRzdFsxMF0pOworICBBU1NFUlRfRVEoJ1wwJywgZHN0WzExXSk7CisgIEFTU0VSVF9FUSgnXDAnLCBkc3RbMTJdKTsKKyAgQVNTRVJUX0VRKCdcMCcsIGRzdFsxM10pOworICBBU1NFUlRfRVEoJ1wwJywgZHN0WzE0XSk7Cit9CisKIFRFU1QoVEVTVF9OQU1FLCBzdHJuY3B5KSB7CiAgIGNoYXIgc3JjWzEwXTsKICAgY2hhciBkc3RbMTBdOwpAQCAtNzkwLDIyICs5NjksMjIgQEAKICAgQVNTRVJUX0VRKCdcMCcsIGJ1Zls5XSk7CiB9CiAKK2V4dGVybiAiQyIgY2hhciogX19zdHBjcHlfY2hrKGNoYXIqLCBjb25zdCBjaGFyKiwgc2l6ZV90KTsKKworVEVTVChURVNUX05BTUUsIHN0cGNweV9jaGtfbWF4X2ludF9zaXplKSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgY2hhciogcmVzID0gX19zdHBjcHlfY2hrKGJ1ZiwgIjAxMjM0NTY3OCIsIChzaXplX3QpLTEpOworICBBU1NFUlRfRVEoYnVmICsgc3RybGVuKCIwMTIzNDU2NzgiKSwgcmVzKTsKKyAgQVNTRVJUX1NUUkVRKCIwMTIzNDU2NzgiLCBidWYpOworfQorCiBleHRlcm4gIkMiIGNoYXIqIF9fc3RyY3B5X2NoayhjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCk7CiAKIFRFU1QoVEVTVF9OQU1FLCBzdHJjcHlfY2hrX21heF9pbnRfc2l6ZSkgewogICBjaGFyIGJ1ZlsxMF07CiAgIGNoYXIqIHJlcyA9IF9fc3RyY3B5X2NoayhidWYsICIwMTIzNDU2NzgiLCAoc2l6ZV90KS0xKTsKICAgQVNTRVJUX0VRKGJ1ZiwgcmVzKTsKLSAgQVNTRVJUX0VRKCcwJywgIGJ1ZlswXSk7Ci0gIEFTU0VSVF9FUSgnMScsICBidWZbMV0pOwotICBBU1NFUlRfRVEoJzInLCAgYnVmWzJdKTsKLSAgQVNTRVJUX0VRKCczJywgIGJ1ZlszXSk7Ci0gIEFTU0VSVF9FUSgnNCcsICBidWZbNF0pOwotICBBU1NFUlRfRVEoJzUnLCAgYnVmWzVdKTsKLSAgQVNTRVJUX0VRKCc2JywgIGJ1Zls2XSk7Ci0gIEFTU0VSVF9FUSgnNycsICBidWZbN10pOwotICBBU1NFUlRfRVEoJzgnLCAgYnVmWzhdKTsKLSAgQVNTRVJUX0VRKCdcMCcsIGJ1Zls5XSk7CisgIEFTU0VSVF9TVFJFUSgiMDEyMzQ1Njc4IiwgYnVmKTsKIH0KIAogZXh0ZXJuICJDIiB2b2lkKiBfX21lbWNweV9jaGsodm9pZCosIGNvbnN0IHZvaWQqLCBzaXplX3QsIHNpemVfdCk7CmRpZmYgLS1naXQgYS90ZXN0cy9mdHdfdGVzdC5jcHAgYi90ZXN0cy9mdHdfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzYTMwOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Z0d190ZXN0LmNwcApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSAiVGVtcG9yYXJ5RmlsZS5oIgorCisjaW5jbHVkZSA8ZnR3Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKwordm9pZCBzYW5pdHlfY2hlY2tfZnR3KGNvbnN0IGNoYXIqIGZwYXRoLCBjb25zdCBzdHJ1Y3Qgc3RhdCogc2IsIGludCB0ZmxhZykgeworICBBU1NFUlRfVFJVRShmcGF0aCAhPSBOVUxMKTsKKyAgQVNTRVJUX1RSVUUoc2IgIT0gTlVMTCk7CisgIGJvb2wgaXNfZGlyID0gU19JU0RJUihzYi0+c3RfbW9kZSk7CisgIEFTU0VSVF9UUlVFKChpc19kaXIgJiYgdGZsYWcgPT0gRlRXX0QpIHx8ICghaXNfZGlyICYmIHRmbGFnID09IEZUV19GKSk7Cit9CisKK3ZvaWQgc2FuaXR5X2NoZWNrX25mdHcoCisgICAgY29uc3QgY2hhciogZnBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0KiBzYiwgaW50IHRmbGFnLCBzdHJ1Y3QgRlRXKiBmdHdidWYpIHsKKyAgc2FuaXR5X2NoZWNrX2Z0dyhmcGF0aCwgc2IsIHRmbGFnKTsKKyAgLy8gZWl0aGVyIHRoZSBwYXJlbnQgZGlyIG9yIHRoZSBmaWxlCisgIGJvb2wgaXNfZGlyID0gU19JU0RJUihzYi0+c3RfbW9kZSk7CisgIEFTU0VSVF9UUlVFKAorICAgIChpc19kaXIgJiYgZnR3YnVmLT5sZXZlbCA9PSAwKSB8fCAoIWlzX2RpciAmJiBmdHdidWYtPmxldmVsID09IDEpKTsKK30KKworaW50IGNoZWNrX2Z0dyhjb25zdCBjaGFyKiBmcGF0aCwgY29uc3Qgc3RydWN0IHN0YXQqIHNiLCBpbnQgdGZsYWcpIHsKKyAgc2FuaXR5X2NoZWNrX2Z0dyhmcGF0aCwgc2IsIHRmbGFnKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBjaGVja19mdHc2NChjb25zdCBjaGFyKiBmcGF0aCwgY29uc3Qgc3RydWN0IHN0YXQ2NCogc2IsIGludCB0ZmxhZykgeworICBzYW5pdHlfY2hlY2tfZnR3KGZwYXRoLCByZWludGVycHJldF9jYXN0PGNvbnN0IHN0cnVjdCBzdGF0Kj4oc2IpLCB0ZmxhZyk7CisgIHJldHVybiAwOworfQorCitpbnQgY2hlY2tfbmZ0dygKKyAgY29uc3QgY2hhciogZnBhdGgsIGNvbnN0IHN0cnVjdCBzdGF0KiBzYiwgaW50IHRmbGFnLCBzdHJ1Y3QgRlRXKiBmdHdidWYpIHsKKyAgc2FuaXR5X2NoZWNrX25mdHcoZnBhdGgsIHNiLCB0ZmxhZywgZnR3YnVmKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBjaGVja19uZnR3NjQoCisgIGNvbnN0IGNoYXIqIGZwYXRoLCBjb25zdCBzdHJ1Y3Qgc3RhdDY0KiBzYiwgaW50IHRmbGFnLCBzdHJ1Y3QgRlRXKiBmdHdidWYpIHsKKyAgc2FuaXR5X2NoZWNrX25mdHcoZnBhdGgsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgc3RydWN0IHN0YXQqPihzYiksCisgICAgdGZsYWcsIGZ0d2J1Zik7CisgIHJldHVybiAwOworfQorCitURVNUKGZ0dywgZnR3KSB7CisgIFRlbXBvcmFyeURpciB0ZDsKKyAgVGVtcG9yYXJ5RmlsZSB0Zih0ZC5kaXJuYW1lKTsKKyAgZnR3KHRkLmRpcm5hbWUsIGNoZWNrX2Z0dywgMSk7Cit9CisKK1RFU1QoZnR3LCBmdHc2NCkgeworICBUZW1wb3JhcnlEaXIgdGQ7CisgIEdlbmVyaWNUZW1wb3JhcnlGaWxlPG1rc3RlbXA2ND4gdGYodGQuZGlybmFtZSk7CisgIGZ0dzY0KHRkLmRpcm5hbWUsIGNoZWNrX2Z0dzY0LCAxKTsKK30KKworVEVTVChmdHcsIG5mdHcpIHsKKyAgVGVtcG9yYXJ5RGlyIHRkOworICBUZW1wb3JhcnlGaWxlIHRmKHRkLmRpcm5hbWUpOworICBuZnR3KHRkLmRpcm5hbWUsIGNoZWNrX25mdHcsIDEsIDApOworfQorCitURVNUKGZ0dywgbmZ0dzY0KSB7CisgIFRlbXBvcmFyeURpciB0ZDsKKyAgR2VuZXJpY1RlbXBvcmFyeUZpbGU8bWtzdGVtcDY0PiB0Zih0ZC5kaXJuYW1lKTsKKyAgbmZ0dzY0KHRkLmRpcm5hbWUsIGNoZWNrX25mdHc2NCwgMSwgMCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9nZXRhdXh2YWxfdGVzdC5jcHAgYi90ZXN0cy9nZXRhdXh2YWxfdGVzdC5jcHAKaW5kZXggMDFjMTFjMy4uNTFjOWRiOCAxMDA2NDQKLS0tIGEvdGVzdHMvZ2V0YXV4dmFsX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL2dldGF1eHZhbF90ZXN0LmNwcApAQCAtMzEsMTAgKzMxLDExIEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoR0VUQVVYVkFMX0NBTl9DT01QSUxFKQotCiAjaW5jbHVkZSA8c3lzL2F1eHYuaD4KKyNlbmRpZgogCiBURVNUKGdldGF1eHZhbCwgZXhwZWN0ZWRfdmFsdWVzKSB7CisjaWYgZGVmaW5lZChHRVRBVVhWQUxfQ0FOX0NPTVBJTEUpCiAgIEFTU0VSVF9FUSgodW5zaWduZWQgbG9uZyBpbnQpIDAsIGdldGF1eHZhbChBVF9TRUNVUkUpKTsKICAgQVNTRVJUX0VRKGdldHVpZCgpLCBnZXRhdXh2YWwoQVRfVUlEKSk7CiAgIEFTU0VSVF9FUShnZXRldWlkKCksIGdldGF1eHZhbChBVF9FVUlEKSk7CkBAIC00NiwxMCArNDcsMTUgQEAKICAgQVNTRVJUX05FKCh1bnNpZ25lZCBsb25nIGludCkgMCwgZ2V0YXV4dmFsKEFUX1BITlVNKSk7CiAgIEFTU0VSVF9ORSgodW5zaWduZWQgbG9uZyBpbnQpIDAsIGdldGF1eHZhbChBVF9FTlRSWSkpOwogICBBU1NFUlRfTkUoKHVuc2lnbmVkIGxvbmcgaW50KSAwLCBnZXRhdXh2YWwoQVRfUEFHRVNaKSk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZgogfQogCiBURVNUKGdldGF1eHZhbCwgdW5leHBlY3RlZF92YWx1ZXMpIHsKKyNpZiBkZWZpbmVkKEdFVEFVWFZBTF9DQU5fQ09NUElMRSkKICAgQVNTRVJUX0VRKCh1bnNpZ25lZCBsb25nIGludCkgMCwgZ2V0YXV4dmFsKDB4ZGVhZGJlZWYpKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmCiB9Ci0KLSNlbmRpZiAvKiBHRVRBVVhWQUxfQ0FOX0NPTVBJTEUgKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL2ludHR5cGVzX3Rlc3QuY3BwIGIvdGVzdHMvaW50dHlwZXNfdGVzdC5jcHAKaW5kZXggZGYwMmQxZi4uZTU4ODUwMyAxMDA2NDQKLS0tIGEvdGVzdHMvaW50dHlwZXNfdGVzdC5jcHAKKysrIGIvdGVzdHMvaW50dHlwZXNfdGVzdC5jcHAKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pIC8vIERvZXNuJ3Qgd29yayBvbiBnbGliYyBiZWNhdXNlIHdlIHVzZSAtbTMyLgogVEVTVChpbnR0eXBlcywgbWlzYykgewogICBjaGFyIGJ1Zls1MTJdOwogCkBAIC0zOSw0ICszOCwxMSBAQAogICBzc2NhbmYoYnVmLCAiJTA4IiBTQ051UFRSLCAmdSk7CiAgIHNzY2FuZihidWYsICIlMDgiIFNDTnhQVFIsICZ1KTsKIH0KLSNlbmRpZgorCitURVNUKGludHR5cGVzLCB3Y3N0b2ltYXgpIHsKKyAgQVNTRVJUX0VRKDEyMywgd2NzdG9pbWF4KEwiMTIzIiwgTlVMTCwgMTApKTsKK30KKworVEVTVChpbnR0eXBlcywgd2NzdG91bWF4KSB7CisgIEFTU0VSVF9FUSgxMjNVLCB3Y3N0b3VtYXgoTCIxMjMiLCBOVUxMLCAxMCkpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliY19sb2dnaW5nX3Rlc3QuY3BwIGIvdGVzdHMvbGliY19sb2dnaW5nX3Rlc3QuY3BwCmluZGV4IGM0NGI4NWIuLjk1MDE2MWUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYmNfbG9nZ2luZ190ZXN0LmNwcAorKysgYi90ZXN0cy9saWJjX2xvZ2dpbmdfdGVzdC5jcHAKQEAgLTE3LDEyICsxNywxMiBAQAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKICNpZiBkZWZpbmVkKF9fQklPTklDX18pCi0KICNpbmNsdWRlICIuLi9saWJjL2Jpb25pYy9saWJjX2xvZ2dpbmcuY3BwIgotCiBleHRlcm4gaW50IF9fbGliY19mb3JtYXRfYnVmZmVyKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLik7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogCiBURVNUKGxpYmNfbG9nZ2luZywgc21va2UpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIGNoYXIgYnVmW0JVRlNJWl07CiAKICAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgImEiKTsKQEAgLTEwNCwyMSArMTA0LDMzIEBACiAKICAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgImElbGxkLCVkLCVkLCVkeiIsIDB4MTAwMDAwMDAwMExMLCA2LCA3LCA4KTsKICAgRVhQRUNUX1NUUkVRKCJhNjg3MTk0NzY3MzYsNiw3LDh6IiwgYnVmKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiBURVNUKGxpYmNfbG9nZ2luZywgZF9JTlRfTUFYKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBjaGFyIGJ1ZltCVUZTSVpdOwogICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiJWQiLCBJTlRfTUFYKTsKICAgRVhQRUNUX1NUUkVRKCIyMTQ3NDgzNjQ3IiwgYnVmKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiBURVNUKGxpYmNfbG9nZ2luZywgZF9JTlRfTUlOKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBjaGFyIGJ1ZltCVUZTSVpdOwogICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiJWQiLCBJTlRfTUlOKTsKICAgRVhQRUNUX1NUUkVRKCItMjE0NzQ4MzY0OCIsIGJ1Zik7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChsaWJjX2xvZ2dpbmcsIGxkX0xPTkdfTUFYKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBjaGFyIGJ1ZltCVUZTSVpdOwogICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiJWxkIiwgTE9OR19NQVgpOwogI2lmIF9fTFA2NF9fCkBAIC0xMjYsOSArMTM4LDEzIEBACiAjZWxzZQogICBFWFBFQ1RfU1RSRVEoIjIxNDc0ODM2NDciLCBidWYpOwogI2VuZGlmCisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogVEVTVChsaWJjX2xvZ2dpbmcsIGxkX0xPTkdfTUlOKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBjaGFyIGJ1ZltCVUZTSVpdOwogICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiJWxkIiwgTE9OR19NSU4pOwogI2lmIF9fTFA2NF9fCkBAIC0xMzYsMTggKzE1MiwyNyBAQAogI2Vsc2UKICAgRVhQRUNUX1NUUkVRKCItMjE0NzQ4MzY0OCIsIGJ1Zik7CiAjZW5kaWYKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiBURVNUKGxpYmNfbG9nZ2luZywgbGxkX0xMT05HX01BWCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgY2hhciBidWZbQlVGU0laXTsKICAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgIiVsbGQiLCBMTE9OR19NQVgpOwogICBFWFBFQ1RfU1RSRVEoIjkyMjMzNzIwMzY4NTQ3NzU4MDciLCBidWYpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QobGliY19sb2dnaW5nLCBsbGRfTExPTkdfTUlOKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBjaGFyIGJ1ZltCVUZTSVpdOwogICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiJWxsZCIsIExMT05HX01JTik7CiAgIEVYUEVDVF9TVFJFUSgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiLCBidWYpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvbGliZ2VuX3Rlc3QuY3BwIGIvdGVzdHMvbGliZ2VuX3Rlc3QuY3BwCmluZGV4IGMyYzAxZjYuLjM5NThmODEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xpYmdlbl90ZXN0LmNwcAorKysgYi90ZXN0cy9saWJnZW5fdGVzdC5jcHAKQEAgLTM4LDcgKzM4LDkgQEAKICAgZnJlZSh3cml0YWJsZV9pbik7CiB9CiAKLVRFU1QobGliZ2VuLCBiYXNlbmFtZSkgeworLy8gRG8gbm90IHVzZSBiYXNlbmFtZSBhcyB0aGUgdGVzdCBuYW1lLCBpdCdzIGRlZmluZWQgdG8gYW5vdGhlciB2YWx1ZSBpbiBnbGliYworLy8gc28gbGVhZHMgdG8gYSBkaWZmZXJlbnRseSBuYW1lZCB0ZXN0IG9uIGhvc3QgdmVyc3VzIHRhcmdldCBhcmNoaXRlY3R1cmVzLgorVEVTVChsaWJnZW4sIGJhc2VuYW1lX3Ntb2tlKSB7CiAgIFRlc3RCYXNlbmFtZShOVUxMLCAiLiIpOwogICBUZXN0QmFzZW5hbWUoIiIsICIuIik7CiAgIFRlc3RCYXNlbmFtZSgiL3Vzci9saWIiLCAibGliIik7CkBAIC02Miw4ICs2NCw3IEBACiAgIFRlc3REaXJuYW1lKCIvIiwgIi8iKTsKIH0KIAotI2lmIF9fQklPTklDX18KLQorI2lmIGRlZmluZWQoX19CSU9OSUNfXykgJiYgIWRlZmluZWQoX19MUDY0X18pCiBzdGF0aWMgdm9pZCBUZXN0QmFzZW5hbWUoY29uc3QgY2hhciogaW4sIGNvbnN0IGNoYXIqIGV4cGVjdGVkX291dCwgaW50IGV4cGVjdGVkX3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLCBpbnQgZXhwZWN0ZWRfZXJybm8pIHsKICAgZXJybm8gPSAwOwpAQCAtODUsOCArODYsMTAgQEAKICAgfQogICBBU1NFUlRfRVEoZXhwZWN0ZWRfZXJybm8sIGVycm5vKSA8PCBpbjsKIH0KKyNlbmRpZiAvLyBfX0JJT05JQ19fCiAKIFRFU1QobGliZ2VuLCBiYXNlbmFtZV9yKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSAmJiAhZGVmaW5lZChfX0xQNjRfXykKICAgY2hhciBidWZbMjU2XTsKICAgVGVzdEJhc2VuYW1lKCIiLCAiLiIsICAxLCBOVUxMLCAwLCAwKTsKICAgVGVzdEJhc2VuYW1lKCIiLCAiLiIsIC0xLCBidWYsIDAsIEVSQU5HRSk7CkBAIC05OSw5ICsxMDIsMTMgQEAKICAgVGVzdEJhc2VuYW1lKCIvIiwgIi8iLCAxLCBidWYsIHNpemVvZihidWYpLCAwKTsKICAgVGVzdEJhc2VuYW1lKCIuIiwgIi4iLCAxLCBidWYsIHNpemVvZihidWYpLCAwKTsKICAgVGVzdEJhc2VuYW1lKCIuLiIsICIuLiIsIDIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QobGliZ2VuLCBkaXJuYW1lX3IpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pICYmICFkZWZpbmVkKF9fTFA2NF9fKQogICBjaGFyIGJ1ZlsyNTZdOwogICBUZXN0RGlybmFtZSgiIiwgIi4iLCAgMSwgTlVMTCwgMCwgMCk7CiAgIFRlc3REaXJuYW1lKCIiLCAiLiIsIC0xLCBidWYsIDAsIEVSQU5HRSk7CkBAIC0xMTIsNiArMTE5LDcgQEAKICAgVGVzdERpcm5hbWUoInVzciIsICIuIiwgMSwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CiAgIFRlc3REaXJuYW1lKCIuIiwgIi4iLCAxLCBidWYsIHNpemVvZihidWYpLCAwKTsKICAgVGVzdERpcm5hbWUoIi4uIiwgIi4iLCAxLCBidWYsIHNpemVvZihidWYpLCAwKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnMvQW5kcm9pZC5tayBiL3Rlc3RzL2xpYnMvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWRmNTM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGlicy9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMTQyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCitMT0NBTF9QQVRIIDo9ICQoY2FsbCBteS1kaXIpCitURVNUX1BBVEggOj0gJChMT0NBTF9QQVRIKS8uLgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpYnJhcnkgdXNlZCBieSBkbGZjbiB0ZXN0cy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lmbmVxICgkKFRBUkdFVF9BUkNIKSwkKGZpbHRlciAkKFRBUkdFVF9BUkNIKSxtaXBzIG1pcHM2NCkpCituby1lbGYtaGFzaC10YWJsZS1saWJyYXJ5X3NyY19maWxlcyA6PSBcCisgICAgZW1wdHkuY3BwIFwKKworbm8tZWxmLWhhc2gtdGFibGUtbGlicmFyeV9sZGZsYWdzIDo9IFwKKyAgICAtV2wsLS1oYXNoLXN0eWxlPWdudSBcCisKK21vZHVsZSA6PSBuby1lbGYtaGFzaC10YWJsZS1saWJyYXJ5Cittb2R1bGVfdGFnIDo9IG9wdGlvbmFsCitidWlsZF90eXBlIDo9IHRhcmdldAorYnVpbGRfdGFyZ2V0IDo9IFNIQVJFRF9MSUJSQVJZCitpbmNsdWRlICQoVEVTVF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCitlbmRpZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpYnJhcnkgdXNlZCBieSBkbGV4dCB0ZXN0cyAtIHdpdGggR05VIFJFTFJPIHByb2dyYW0gaGVhZGVyCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJkbGV4dF90ZXN0X3NyY19maWxlcyA6PSBcCisgICAgZGxleHRfdGVzdF9saWJyYXJ5LmNwcCBcCisKK2xpYmRsZXh0X3Rlc3RfbGRmbGFncyA6PSBcCisgICAgLVdsLC16LHJlbHJvIFwKKworbW9kdWxlIDo9IGxpYmRsZXh0X3Rlc3QKK21vZHVsZV90YWcgOj0gb3B0aW9uYWwKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU0hBUkVEX0xJQlJBUlkKK2luY2x1ZGUgJChURVNUX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjcmVhdGUgc3ltbGluayB0byBsaWJkbGV4dF90ZXN0LnNvIGZvciBzeW1saW5rIHRlc3QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVXNlID0gaW5zdGVhZCBvZiA6PSB0byBkZWZlciB0aGUgZXZhbHVhdGlvbiBvZiAkQAorJChMT0NBTF9JTlNUQUxMRURfTU9EVUxFKTogUFJJVkFURV9QT1NUX0lOU1RBTExfQ01EID0gXAorICAgICQoaGlkZSkgY2QgJChkaXIgJEApICYmIGxuIC1zZiAkKG5vdGRpciAkQCkgbGliZGxleHRfdGVzdF92Mi5zbworCitpZm5lcSAoJChUQVJHRVRfMk5EX0FSQ0gpLCkKKyMgbGluayA2NCBiaXQgLnNvCiskKFRBUkdFVF9PVVQpL2xpYjY0L2xpYmRsZXh0X3Rlc3Quc286IFBSSVZBVEVfUE9TVF9JTlNUQUxMX0NNRCA9IFwKKyAgICAkKGhpZGUpIGNkICQoZGlyICRAKSAmJiBsbiAtc2YgJChub3RkaXIgJEApIGxpYmRsZXh0X3Rlc3RfdjIuc28KK2VuZGlmCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlicmFyeSB1c2VkIGJ5IGRsZXh0IHRlc3RzIC0gd2l0aG91dCBHTlUgUkVMUk8gcHJvZ3JhbSBoZWFkZXIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYmRsZXh0X3Rlc3Rfbm9yZWxyb19zcmNfZmlsZXMgOj0gXAorICAgIGRsZXh0X3Rlc3RfbGlicmFyeS5jcHAgXAorCitsaWJkbGV4dF90ZXN0X25vcmVscm9fbGRmbGFncyA6PSBcCisgICAgLVdsLC16LG5vcmVscm8gXAorCittb2R1bGUgOj0gbGliZGxleHRfdGVzdF9ub3JlbHJvCittb2R1bGVfdGFnIDo9IG9wdGlvbmFsCitidWlsZF90eXBlIDo9IHRhcmdldAorYnVpbGRfdGFyZ2V0IDo9IFNIQVJFRF9MSUJSQVJZCitpbmNsdWRlICQoVEVTVF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlicmFyeSB1c2VkIGJ5IGRsZXh0IHRlc3RzIC0gZGlmZmVyZW50IG5hbWUgbm9uLWRlZmF1bHQgbG9jYXRpb24KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYmRsZXh0X3Rlc3RfZmRfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbGV4dF90ZXN0X2xpYnJhcnkuY3BwIFwKKworbGliZGxleHRfdGVzdF9mZF9pbnN0YWxsX3RvX291dF9kYXRhIDo9IHRydWUKK21vZHVsZSA6PSBsaWJkbGV4dF90ZXN0X2ZkCittb2R1bGVfdGFnIDo9IG9wdGlvbmFsCitidWlsZF90eXBlIDo9IHRhcmdldAorYnVpbGRfdGFyZ2V0IDo9IFNIQVJFRF9MSUJSQVJZCitpbmNsdWRlICQoVEVTVF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlicmFyeSB1c2VkIGJ5IGRsZmNuIHRlc3RzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsaWJ0ZXN0X3NpbXBsZV9zcmNfZmlsZXMgOj0gXAorICAgIGRsb3Blbl90ZXN0bGliX3NpbXBsZS5jcHAKKworbW9kdWxlIDo9IGxpYnRlc3Rfc2ltcGxlCitidWlsZF90eXBlIDo9IHRhcmdldAorYnVpbGRfdGFyZ2V0IDo9IFNIQVJFRF9MSUJSQVJZCitpbmNsdWRlICQoVEVTVF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlicmFyeSB3aXRoIGRlcGVuZGVuY3kgdXNlZCBieSBkbGZjbiB0ZXN0cworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGlidGVzdF93aXRoX2RlcGVuZGVuY3lfc3JjX2ZpbGVzIDo9IFwKKyAgICBkbG9wZW5fdGVzdGxpYl9zaW1wbGUuY3BwCisKK2xpYnRlc3Rfd2l0aF9kZXBlbmRlbmN5X3NoYXJlZF9saWJyYXJpZXMgOj0gbGliZGxleHRfdGVzdAorCittb2R1bGUgOj0gbGlidGVzdF93aXRoX2RlcGVuZGVuY3kKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitidWlsZF90YXJnZXQgOj0gU0hBUkVEX0xJQlJBUlkKK2luY2x1ZGUgJChURVNUX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJyYXJ5IHVzZWQgYnkgYXRleGl0IHRlc3RzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xpYnRlc3RfYXRleGl0X3NyY19maWxlcyA6PSBcCisgICAgYXRleGl0X3Rlc3RsaWIuY3BwCisKK21vZHVsZSA6PSBsaWJ0ZXN0X2F0ZXhpdAorYnVpbGRfdGFyZ2V0IDo9IFNIQVJFRF9MSUJSQVJZCitidWlsZF90eXBlIDo9IHRhcmdldAoraW5jbHVkZSAkKFRFU1RfUEFUSCkvQW5kcm9pZC5idWlsZC5taworYnVpbGRfdHlwZSA6PSBob3N0CitpbmNsdWRlICQoVEVTVF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlicmFyeSB3aXRoIHdlYWsgZnVuY3Rpb24KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xpYnRlc3RfZGxzeW1fd2Vha19mdW5jX3NyY19maWxlcyA6PSBcCisgICAgZGxzeW1fd2Vha19mdW5jdGlvbi5jcHAKKworbW9kdWxlIDo9IGxpYnRlc3RfZGxzeW1fd2Vha19mdW5jCitidWlsZF90YXJnZXQgOj0gU0hBUkVEX0xJQlJBUlkKK2J1aWxkX3R5cGUgOj0gdGFyZ2V0CitpbmNsdWRlICQoVEVTVF9QQVRIKS9BbmRyb2lkLmJ1aWxkLm1rCitidWlsZF90eXBlIDo9IGhvc3QKK2luY2x1ZGUgJChURVNUX1BBVEgpL0FuZHJvaWQuYnVpbGQubWsKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnMvYXRleGl0X3Rlc3RsaWIuY3BwIGIvdGVzdHMvbGlicy9hdGV4aXRfdGVzdGxpYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1ZjU3YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYnMvYXRleGl0X3Rlc3RsaWIuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisKKy8vIHVzZSBleHRlcm5hbCBjb250cm9sIG51bWJlciBmcm9tIG1haW4gdGVzdAorc3RhdGljIHN0ZDo6c3RyaW5nKiBhdGV4aXRfc2VxdWVuY2UgPSBOVUxMOworc3RhdGljIGJvb2wqIGF0ZXhpdF92YWxpZF90aGlzX2luX3N0YXRpY19kdG9yID0gTlVMTDsKKworc3RhdGljIGNsYXNzIEF0RXhpdFN0YXRpY0NsYXNzIHsKKyBwdWJsaWM6CisgIEF0RXhpdFN0YXRpY0NsYXNzKCkgeyBleHBlY3RlZF90aGlzID0gdGhpczsgfQorICB+QXRFeGl0U3RhdGljQ2xhc3MoKSB7CisgICAgaWYgKGF0ZXhpdF92YWxpZF90aGlzX2luX3N0YXRpY19kdG9yKSB7CisgICAgICAqYXRleGl0X3ZhbGlkX3RoaXNfaW5fc3RhdGljX2R0b3IgPSAoZXhwZWN0ZWRfdGhpcyA9PSB0aGlzKTsKKyAgICB9CisgIH0KKyBwcml2YXRlOgorICBzdGF0aWMgY29uc3QgQXRFeGl0U3RhdGljQ2xhc3MqIGV4cGVjdGVkX3RoaXM7CisKK30gc3RhdGljX29iajsKKworY29uc3QgQXRFeGl0U3RhdGljQ2xhc3MqIEF0RXhpdFN0YXRpY0NsYXNzOjpleHBlY3RlZF90aGlzID0gTlVMTDsKKworLy8gNAorc3RhdGljIHZvaWQgYXRleGl0X2hhbmRsZXJfZnJvbV9hdGV4aXRfZnJvbV9hdGV4aXQyKCkgeworICAqYXRleGl0X3NlcXVlbmNlICs9ICIgb24iOworfQorCisvLyAzCitzdGF0aWMgdm9pZCBhdGV4aXRfaGFuZGxlcl9mcm9tX2F0ZXhpdF9mcm9tX2F0ZXhpdDEoKSB7CisgICphdGV4aXRfc2VxdWVuY2UgKz0gIiBzYXQiOworfQorCisvLyAyCitzdGF0aWMgdm9pZCBhdGV4aXRfaGFuZGxlcl9mcm9tX2F0ZXhpdCgpIHsKKyAgKmF0ZXhpdF9zZXF1ZW5jZSArPSAiIER1bXB0eSI7CisgIC8vIHJlZ2lzdGVyIDIgb3RoZXJzCisgIGF0ZXhpdChhdGV4aXRfaGFuZGxlcl9mcm9tX2F0ZXhpdF9mcm9tX2F0ZXhpdDIpOworICBhdGV4aXQoYXRleGl0X2hhbmRsZXJfZnJvbV9hdGV4aXRfZnJvbV9hdGV4aXQxKTsKK30KKworLy8gMQorc3RhdGljIHZvaWQgYXRleGl0X2hhbmRsZXJfd2l0aF9hdGV4aXQoKSB7CisgICphdGV4aXRfc2VxdWVuY2UgKz0gIkh1bXB0eSI7CisgIGF0ZXhpdChhdGV4aXRfaGFuZGxlcl9mcm9tX2F0ZXhpdCk7Cit9CisKKy8vIGxhc3QKK3N0YXRpYyB2b2lkIGF0ZXhpdF9oYW5kbGVyX3JlZ3VsYXIoKSB7CisgICphdGV4aXRfc2VxdWVuY2UgKz0gIiBhIHdhbGwiOworfQorCitleHRlcm4gIkMiIHZvaWQgcmVnaXN0ZXJfYXRleGl0KHN0ZDo6c3RyaW5nKiBzZXF1ZW5jZSwgYm9vbCogdmFsaWRfdGhpc19pbl9zdGF0aWNfZHRvcikgeworICBhdGV4aXRfc2VxdWVuY2UgPSBzZXF1ZW5jZTsKKyAgYXRleGl0X3ZhbGlkX3RoaXNfaW5fc3RhdGljX2R0b3IgPSB2YWxpZF90aGlzX2luX3N0YXRpY19kdG9yOworICBhdGV4aXQoYXRleGl0X2hhbmRsZXJfcmVndWxhcik7CisgIGF0ZXhpdChhdGV4aXRfaGFuZGxlcl93aXRoX2F0ZXhpdCk7Cit9CisKZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnMvZGxleHRfdGVzdF9saWJyYXJ5LmNwcCBiL3Rlc3RzL2xpYnMvZGxleHRfdGVzdF9saWJyYXJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzA0MzI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGlicy9kbGV4dF90ZXN0X2xpYnJhcnkuY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitjbGFzcyBBIHsKK3B1YmxpYzoKKyAgdmlydHVhbCBpbnQgZ2V0UmFuZG9tTnVtYmVyKCkgeworICAgIHJldHVybiA0OyAgLy8gY2hvc2VuIGJ5IGZhaXIgZGljZSByb2xsLgorICAgICAgICAgICAgICAgLy8gZ3VhcmFudGVlZCB0byBiZSByYW5kb20uCisgIH0KKworICB2aXJ0dWFsIH5BKCkge30KK307CisKK0EgYTsKKworLy8gbmVzdGVkIG1hY3JvcyB0byBtYWtlIGl0IGVhc3kgdG8gZGVmaW5lIGEgbGFyZ2UgYW1vdW50IG9mIHJlYWQtb25seSBkYXRhCisvLyB3aGljaCB3aWxsIHJlcXVpcmUgcmVsb2NhdGlvbi4KKyNkZWZpbmUgQV8xNiAmYSwgJmEsICZhLCAmYSwgJmEsICZhLCAmYSwgJmEsICZhLCAmYSwgJmEsICZhLCAmYSwgJmEsICZhLCAmYSwKKyNkZWZpbmUgQV8xMjggQV8xNiBBXzE2IEFfMTYgQV8xNiBBXzE2IEFfMTYgQV8xNiBBXzE2CisjZGVmaW5lIEFfMTAyNCBBXzEyOCBBXzEyOCBBXzEyOCBBXzEyOCBBXzEyOCBBXzEyOCBBXzEyOCBBXzEyOAorCitleHRlcm4gIkMiIEEqIGNvbnN0IGxvdHNfb2ZfcmVscm9bXSA9IHsKKyAgQV8xMDI0IEFfMTAyNCBBXzEwMjQgQV8xMDI0IEFfMTAyNCBBXzEwMjQgQV8xMDI0IEFfMTAyNAorfTsKKworZXh0ZXJuICJDIiBpbnQgZ2V0UmFuZG9tTnVtYmVyKCkgeworICAvLyBhY2Nlc3MgdGhlIHJlbHJvIHNlY3Rpb24gKHR3aWNlLCBpbiBmYWN0LCBvbmNlIGZvciB0aGUgcG9pbnRlciwgYW5kIG9uY2UKKyAgLy8gZm9yIHRoZSB2dGFibGUgb2YgQSkgdG8gY2hlY2sgaXQncyBhY3R1YWxseSB0aGVyZS4KKyAgcmV0dXJuIGxvdHNfb2ZfcmVscm9bMF0tPmdldFJhbmRvbU51bWJlcigpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9zaW1wbGUuY3BwIGIvdGVzdHMvbGlicy9kbG9wZW5fdGVzdGxpYl9zaW1wbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZTU0YjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWJzL2Rsb3Blbl90ZXN0bGliX3NpbXBsZS5jcHAKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordWludDMyX3QgZGxvcGVuX3Rlc3RsaWJfdGF4aWNhYl9udW1iZXIgPSAxNzI5OworCitib29sIGRsb3Blbl90ZXN0bGliX3NpbXBsZV9mdW5jKCkgeworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2xpYnMvZGxzeW1fd2Vha19mdW5jdGlvbi5jcHAgYi90ZXN0cy9saWJzL2Rsc3ltX3dlYWtfZnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOGYyYjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saWJzL2Rsc3ltX3dlYWtfZnVuY3Rpb24uY3BwCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitleHRlcm4gIkMiIGludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgd2Vha19mdW5jKCkgeworICByZXR1cm4gNDI7Cit9CisKZGlmZiAtLWdpdCBhL3Rlc3RzL2VtcHR5LmNwcCBiL3Rlc3RzL2xpYnMvZW1wdHkuY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0ZXN0cy9lbXB0eS5jcHAKcmVuYW1lIHRvIHRlc3RzL2xpYnMvZW1wdHkuY3BwCmRpZmYgLS1naXQgYS90ZXN0cy9sb2NhbGVfdGVzdC5jcHAgYi90ZXN0cy9sb2NhbGVfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjNjA3YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xvY2FsZV90ZXN0LmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworVEVTVChsb2NhbGUsIGxvY2FsZWNvbnYpIHsKKyAgRVhQRUNUX1NUUkVRKCIuIiwgbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50KTsKKyAgRVhQRUNUX1NUUkVRKCIiLCBsb2NhbGVjb252KCktPnRob3VzYW5kc19zZXApOworICBFWFBFQ1RfU1RSRVEoIiIsIGxvY2FsZWNvbnYoKS0+Z3JvdXBpbmcpOworICBFWFBFQ1RfU1RSRVEoIiIsIGxvY2FsZWNvbnYoKS0+aW50X2N1cnJfc3ltYm9sKTsKKyAgRVhQRUNUX1NUUkVRKCIiLCBsb2NhbGVjb252KCktPmN1cnJlbmN5X3N5bWJvbCk7CisgIEVYUEVDVF9TVFJFUSgiIiwgbG9jYWxlY29udigpLT5tb25fZGVjaW1hbF9wb2ludCk7CisgIEVYUEVDVF9TVFJFUSgiIiwgbG9jYWxlY29udigpLT5tb25fdGhvdXNhbmRzX3NlcCk7CisgIEVYUEVDVF9TVFJFUSgiIiwgbG9jYWxlY29udigpLT5tb25fZ3JvdXBpbmcpOworICBFWFBFQ1RfU1RSRVEoIiIsIGxvY2FsZWNvbnYoKS0+cG9zaXRpdmVfc2lnbik7CisgIEVYUEVDVF9TVFJFUSgiIiwgbG9jYWxlY29udigpLT5uZWdhdGl2ZV9zaWduKTsKKyAgRVhQRUNUX0VRKENIQVJfTUFYLCBsb2NhbGVjb252KCktPmludF9mcmFjX2RpZ2l0cyk7CisgIEVYUEVDVF9FUShDSEFSX01BWCwgbG9jYWxlY29udigpLT5mcmFjX2RpZ2l0cyk7CisgIEVYUEVDVF9FUShDSEFSX01BWCwgbG9jYWxlY29udigpLT5wX2NzX3ByZWNlZGVzKTsKKyAgRVhQRUNUX0VRKENIQVJfTUFYLCBsb2NhbGVjb252KCktPnBfc2VwX2J5X3NwYWNlKTsKKyAgRVhQRUNUX0VRKENIQVJfTUFYLCBsb2NhbGVjb252KCktPm5fY3NfcHJlY2VkZXMpOworICBFWFBFQ1RfRVEoQ0hBUl9NQVgsIGxvY2FsZWNvbnYoKS0+bl9zZXBfYnlfc3BhY2UpOworICBFWFBFQ1RfRVEoQ0hBUl9NQVgsIGxvY2FsZWNvbnYoKS0+cF9zaWduX3Bvc24pOworICBFWFBFQ1RfRVEoQ0hBUl9NQVgsIGxvY2FsZWNvbnYoKS0+bl9zaWduX3Bvc24pOworICBFWFBFQ1RfRVEoQ0hBUl9NQVgsIGxvY2FsZWNvbnYoKS0+aW50X3BfY3NfcHJlY2VkZXMpOworICBFWFBFQ1RfRVEoQ0hBUl9NQVgsIGxvY2FsZWNvbnYoKS0+aW50X3Bfc2VwX2J5X3NwYWNlKTsKKyAgRVhQRUNUX0VRKENIQVJfTUFYLCBsb2NhbGVjb252KCktPmludF9uX2NzX3ByZWNlZGVzKTsKKyAgRVhQRUNUX0VRKENIQVJfTUFYLCBsb2NhbGVjb252KCktPmludF9uX3NlcF9ieV9zcGFjZSk7CisgIEVYUEVDVF9FUShDSEFSX01BWCwgbG9jYWxlY29udigpLT5pbnRfcF9zaWduX3Bvc24pOworICBFWFBFQ1RfRVEoQ0hBUl9NQVgsIGxvY2FsZWNvbnYoKS0+aW50X25fc2lnbl9wb3NuKTsKK30KKworVEVTVChsb2NhbGUsIHNldGxvY2FsZSkgeworICBFWFBFQ1RfU1RSRVEoIkMuVVRGLTgiLCBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisgIEVYUEVDVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCkpOworCisgIGVycm5vID0gMDsKKyAgRVhQRUNUX0VRKE5VTEwsIHNldGxvY2FsZSgtMSwgTlVMTCkpOworICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7CisgIGVycm5vID0gMDsKKyAgRVhQRUNUX0VRKE5VTEwsIHNldGxvY2FsZSgxMywgTlVMTCkpOworICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIC8vIFRoZSAiIiBsb2NhbGUgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZC4gRm9yIGJpb25pYywgaXQncyB0aGUgQyBsb2NhbGUuCisgIC8vIGdsaWJjIHdpbGwgZ2l2ZSB1cyBzb21ldGhpbmcgbGlrZSAiZW5fVVMuVVRGLTgiLCBkZXBlbmRpbmcgb24gdGhlIHVzZXIncyBjb25maWd1cmF0aW9uLgorICBFWFBFQ1RfU1RSRVEoIkMiLCBzZXRsb2NhbGUoTENfQUxMLCAiIikpOworI2VuZGlmCisgIEVYUEVDVF9TVFJFUSgiQyIsIHNldGxvY2FsZShMQ19BTEwsICJDIikpOworICBFWFBFQ1RfU1RSRVEoIkMiLCBzZXRsb2NhbGUoTENfQUxMLCAiUE9TSVgiKSk7CisKKyAgZXJybm8gPSAwOworICBFWFBFQ1RfRVEoTlVMTCwgc2V0bG9jYWxlKExDX0FMTCwgInRoaXMtaXMtbm90LWEtbG9jYWxlIikpOworICBFWFBFQ1RfRVEoRU5PRU5ULCBlcnJubyk7IC8vIFBPU0lYIHNwZWNpZmllZCwgbm90IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCEKK30KKworVEVTVChsb2NhbGUsIG5ld2xvY2FsZSkgeworICBlcnJubyA9IDA7CisgIEVYUEVDVF9FUSgwLCBuZXdsb2NhbGUoMSA8PCAyMCwgIkMiLCAwKSk7CisgIEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKTsKKworICBsb2NhbGVfdCBsID0gbmV3bG9jYWxlKExDX0FMTCwgIkMiLCAwKTsKKyAgQVNTRVJUX1RSVUUobCAhPSBOVUxMKTsKKyAgZnJlZWxvY2FsZShsKTsKKworICBlcnJubyA9IDA7CisgIEVYUEVDVF9FUSgwLCBuZXdsb2NhbGUoTENfQUxMLCAidGhpcy1pcy1ub3QtYS1sb2NhbGUiLCAwKSk7CisgIEVYUEVDVF9FUShFTk9FTlQsIGVycm5vKTsgLy8gUE9TSVggc3BlY2lmaWVkLCBub3QgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIQorfQorCitURVNUKGxvY2FsZSwgZHVwbG9jYWxlKSB7CisgIGxvY2FsZV90IGNsb25lZF9nbG9iYWwgPSBkdXBsb2NhbGUoTENfR0xPQkFMX0xPQ0FMRSk7CisgIEFTU0VSVF9UUlVFKGNsb25lZF9nbG9iYWwgIT0gTlVMTCk7CisgIGZyZWVsb2NhbGUoY2xvbmVkX2dsb2JhbCk7Cit9CisKK1RFU1QobG9jYWxlLCB1c2Vsb2NhbGUpIHsKKyAgbG9jYWxlX3Qgb3JpZ2luYWwgPSB1c2Vsb2NhbGUoTlVMTCk7CisgIEVYUEVDVF9GQUxTRShvcmlnaW5hbCA9PSAwKTsKKyAgRVhQRUNUX0VRKExDX0dMT0JBTF9MT0NBTEUsIG9yaWdpbmFsKTsKKworICBsb2NhbGVfdCBuID0gbmV3bG9jYWxlKExDX0FMTCwgIkMiLCAwKTsKKyAgRVhQRUNUX0ZBTFNFKG4gPT0gMCk7CisgIEVYUEVDVF9GQUxTRShuID09IG9yaWdpbmFsKTsKKworICBsb2NhbGVfdCBvbGQgPSB1c2Vsb2NhbGUobik7CisgIEVYUEVDVF9UUlVFKG9sZCA9PSBvcmlnaW5hbCk7CisKKyAgRVhQRUNUX0VRKG4sIHVzZWxvY2FsZShOVUxMKSk7Cit9CisKK1RFU1QobG9jYWxlLCBtYl9jdXJfbWF4KSB7CisgIC8vIFdlIGNhbid0IHJlbGlhYmx5IHRlc3QgdGhlIGJlaGF2aW9yIHdpdGggc2V0bG9jYWxlKDMpIG9yIHRoZSBiZWhhdmlvciBmb3IKKyAgLy8gaW5pdGlhbCBwcm9ncmFtIGNvbmRpdGlvbnMgYmVjYXVzZSAodW5sZXNzIHdlJ3JlIHRoZSBvbmx5IHRlc3QgdGhhdCB3YXMKKyAgLy8gcnVuKSwgYW5vdGhlciB0ZXN0IGhhcyBhbG1vc3QgY2VydGFpbmx5IGNhbGxlZCB1c2Vsb2NhbGUoMykgaW4gdGhpcyB0aHJlYWQuCisgIC8vIFNlZSBiLzE2Njg1NjUyLgorICBsb2NhbGVfdCBjbG9jID0gbmV3bG9jYWxlKExDX0FMTCwgIkMiLCAwKTsKKyAgbG9jYWxlX3QgY2xvY191dGY4ID0gbmV3bG9jYWxlKExDX0FMTCwgIkMuVVRGLTgiLCAwKTsKKworICBsb2NhbGVfdCBvbGRfbG9jYWxlID0gdXNlbG9jYWxlKGNsb2MpOworICBBU1NFUlRfRVEoMVUsIE1CX0NVUl9NQVgpOworICB1c2Vsb2NhbGUoY2xvY191dGY4KTsKKyAgQVNTRVJUX0VRKDRVLCBNQl9DVVJfTUFYKTsKKworICB1c2Vsb2NhbGUob2xkX2xvY2FsZSk7CisgIGZyZWVsb2NhbGUoY2xvYyk7CisgIGZyZWVsb2NhbGUoY2xvY191dGY4KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hbGxvY190ZXN0LmNwcCBiL3Rlc3RzL21hbGxvY190ZXN0LmNwcAppbmRleCAyNTk4NTNkLi42YjdhMjhiIDEwMDY0NAotLS0gYS90ZXN0cy9tYWxsb2NfdGVzdC5jcHAKKysrIGIvdGVzdHMvbWFsbG9jX3Rlc3QuY3BwCkBAIC0xNiwxOCArMTYsMjggQEAKIAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX2NvbmZpZy5oIgogCiBURVNUKG1hbGxvYywgbWFsbG9jX3N0ZCkgewogICAvLyBTaW1wbGUgbWFsbG9jIHRlc3QuCiAgIHZvaWQgKnB0ciA9IG1hbGxvYygxMDApOwogICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CiAgIEFTU0VSVF9MRSgxMDBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7Ci0KICAgZnJlZShwdHIpOwogfQogCitURVNUKG1hbGxvYywgbWFsbG9jX292ZXJmbG93KSB7CisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKE5VTEwsIG1hbGxvYyhTSVpFX01BWCkpOworICBBU1NFUlRfRVEoRU5PTUVNLCBlcnJubyk7Cit9CisKIFRFU1QobWFsbG9jLCBjYWxsb2Nfc3RkKSB7CiAgIC8vIFNpbXBsZSBjYWxsb2MgdGVzdC4KICAgc2l6ZV90IGFsbG9jX2xlbiA9IDEwMDsKQEAgLTM3LDI0ICs0Nyw2NyBAQAogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFsbG9jX2xlbjsgaSsrKSB7CiAgICAgQVNTRVJUX0VRKDAsIHB0cltpXSk7CiAgIH0KLQogICBmcmVlKHB0cik7CiB9CiAKK1RFU1QobWFsbG9jLCBjYWxsb2NfaWxsZWdhbCkgeworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShOVUxMLCBjYWxsb2MoLTEsIDEwMCkpOworICBBU1NFUlRfRVEoRU5PTUVNLCBlcnJubyk7Cit9CisKK1RFU1QobWFsbG9jLCBjYWxsb2Nfb3ZlcmZsb3cpIHsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoTlVMTCwgY2FsbG9jKDEsIFNJWkVfTUFYKSk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoTlVMTCwgY2FsbG9jKFNJWkVfTUFYLCBTSVpFX01BWCkpOworICBBU1NFUlRfRVEoRU5PTUVNLCBlcnJubyk7CisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKE5VTEwsIGNhbGxvYygyLCBTSVpFX01BWCkpOworICBBU1NFUlRfRVEoRU5PTUVNLCBlcnJubyk7CisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKE5VTEwsIGNhbGxvYyhTSVpFX01BWCwgMikpOworICBBU1NFUlRfRVEoRU5PTUVNLCBlcnJubyk7Cit9CisKIFRFU1QobWFsbG9jLCBtZW1hbGlnbl9tdWx0aXBsZSkgewogICAvLyBNZW1hbGlnbiB0ZXN0IHdoZXJlIHRoZSBhbGlnbm1lbnQgaXMgYW55IHZhbHVlLgogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8PSAxMjsgaSsrKSB7CiAgICAgZm9yIChzaXplX3QgYWxpZ25tZW50ID0gMSA8PCBpOyBhbGlnbm1lbnQgPCAoMVUgPDwgKGkrMSkpOyBhbGlnbm1lbnQrKykgewotICAgICAgY2hhciAqcHRyID0gKGNoYXIqKW1lbWFsaWduKGFsaWdubWVudCwgMTAwKTsKLSAgICAgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKTsKLSAgICAgIEFTU0VSVF9MRSgxMDBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7Ci0gICAgICBBU1NFUlRfRVEoMCwgKGludHB0cl90KXB0ciAlICgxIDw8IGkpKTsKLQorICAgICAgY2hhciAqcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWVtYWxpZ24oYWxpZ25tZW50LCAxMDApKTsKKyAgICAgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKSA8PCAiRmFpbGVkIGF0IGFsaWdubWVudCAiIDw8IGFsaWdubWVudDsKKyAgICAgIEFTU0VSVF9MRSgxMDBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSkgPDwgIkZhaWxlZCBhdCBhbGlnbm1lbnQgIiA8PCBhbGlnbm1lbnQ7CisgICAgICBBU1NFUlRfRVEoMFUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpICUgKCgxVSA8PCBpKSkpCisgICAgICAgICAgPDwgIkZhaWxlZCBhdCBhbGlnbm1lbnQgIiA8PCBhbGlnbm1lbnQ7CiAgICAgICBmcmVlKHB0cik7CiAgICAgfQogICB9CiB9CiAKK1RFU1QobWFsbG9jLCBtZW1hbGlnbl9vdmVyZmxvdykgeworICBBU1NFUlRfRVEoTlVMTCwgbWVtYWxpZ24oNDA5NiwgU0laRV9NQVgpKTsKK30KKworVEVTVChtYWxsb2MsIG1lbWFsaWduX25vbl9wb3dlcjIpIHsKKyAgdm9pZCogcHRyOworICBmb3IgKHNpemVfdCBhbGlnbiA9IDA7IGFsaWduIDw9IDI1NjsgYWxpZ24rKykgeworICAgIHB0ciA9IG1lbWFsaWduKGFsaWduLCAxMDI0KTsKKyAgICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCkgPDwgIkZhaWxlZCBhdCBhbGlnbiAiIDw8IGFsaWduOworICAgIGZyZWUocHRyKTsKKyAgfQorfQorCitURVNUKG1hbGxvYywgcG9zaXhfbWVtYWxpZ25fbm9uX3Bvd2VyMikgeworICB2b2lkKiBwdHI7CisgIEFTU0VSVF9FUShFSU5WQUwsIHBvc2l4X21lbWFsaWduKCZwdHIsIDE3LCAxMDI0KSk7Cit9CisKK1RFU1QobWFsbG9jLCBwb3NpeF9tZW1hbGlnbl9vdmVyZmxvdykgeworICB2b2lkKiBwdHI7CisgIEFTU0VSVF9ORSgwLCBwb3NpeF9tZW1hbGlnbigmcHRyLCAxNiwgU0laRV9NQVgpKTsKK30KKwogVEVTVChtYWxsb2MsIG1lbWFsaWduX3JlYWxsb2MpIHsKICAgLy8gTWVtYWxpZ24gYW5kIHRoZW4gcmVhbGxvYyB0aGUgcG9pbnRlciBhIGNvdXBsZSBvZiB0aW1lcy4KICAgZm9yIChzaXplX3QgYWxpZ25tZW50ID0gMTsgYWxpZ25tZW50IDw9IDQwOTY7IGFsaWdubWVudCA8PD0gMSkgewpAQCAtODcsNyArMTQwLDYgQEAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI1MDsgaSsrKSB7CiAgICAgICBBU1NFUlRfRVEoMHg2NywgcHRyW2ldKTsKICAgICB9Ci0KICAgICBmcmVlKHB0cik7CiAgIH0KIH0KQEAgLTEwNSw3ICsxNTcsNiBAQAogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CiAgICAgQVNTRVJUX0VRKDY3LCBwdHJbaV0pOwogICB9Ci0KICAgZnJlZShwdHIpOwogfQogCkBAIC0xMjIsNyArMTczLDYgQEAKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7IGkrKykgewogICAgIEFTU0VSVF9FUSg2NywgcHRyW2ldKTsKICAgfQotCiAgIGZyZWUocHRyKTsKIH0KIApAQCAtMTYxLDkgKzIxMSw5IEBACiAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTUwOyBpKyspIHsKICAgICBBU1NFUlRfRVEoMHgyMywgcHRyW2ldKTsKICAgfQotCiAgIGZyZWUocHRyKTsKIH0KKwogVEVTVChtYWxsb2MsIGNhbGxvY19yZWFsbG9jX2xhcmdlcikgewogICAvLyBSZWFsbG9jIHRvIGEgbGFyZ2VyIHNpemUsIGNhbGxvYyBpcyB1c2VkIGZvciB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvbi4KICAgY2hhciAqcHRyID0gKGNoYXIgKiljYWxsb2MoMSwgMTAwKTsKQEAgLTE3Niw3ICsyMjYsNiBAQAogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CiAgICAgQVNTRVJUX0VRKDAsIHB0cltpXSk7CiAgIH0KLQogICBmcmVlKHB0cik7CiB9CiAKQEAgLTE5Miw3ICsyNDEsNiBAQAogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CiAgICAgQVNTRVJUX0VRKDAsIHB0cltpXSk7CiAgIH0KLQogICBmcmVlKHB0cik7CiB9CiAKQEAgLTIzMCw2ICsyNzgsNDcgQEAKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxNTA7IGkrKykgewogICAgIEFTU0VSVF9FUSgwLCBwdHJbaV0pOwogICB9Ci0KICAgZnJlZShwdHIpOwogfQorCitURVNUKG1hbGxvYywgcmVhbGxvY19vdmVyZmxvdykgeworICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShOVUxMLCByZWFsbG9jKE5VTEwsIFNJWkVfTUFYKSk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKKyAgdm9pZCogcHRyID0gbWFsbG9jKDEwMCk7CisgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKTsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoTlVMTCwgcmVhbGxvYyhwdHIsIFNJWkVfTUFYKSk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKKyAgZnJlZShwdHIpOworfQorCisjaWYgZGVmaW5lZChIQVZFX0RFUFJFQ0FURURfTUFMTE9DX0ZVTkNTKQorZXh0ZXJuICJDIiB2b2lkKiBwdmFsbG9jKHNpemVfdCk7CitleHRlcm4gIkMiIHZvaWQqIHZhbGxvYyhzaXplX3QpOworCitURVNUKG1hbGxvYywgcHZhbGxvY19zdGQpIHsKKyAgc2l6ZV90IHBhZ2VzaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworICB2b2lkKiBwdHIgPSBwdmFsbG9jKDEwMCk7CisgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKTsKKyAgQVNTRVJUX1RSVUUoKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpICYgKHBhZ2VzaXplLTEpKSA9PSAwKTsKKyAgQVNTRVJUX0xFKHBhZ2VzaXplLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgIGZyZWUocHRyKTsKK30KKworVEVTVChtYWxsb2MsIHB2YWxsb2Nfb3ZlcmZsb3cpIHsKKyAgQVNTRVJUX0VRKE5VTEwsIHB2YWxsb2MoU0laRV9NQVgpKTsKK30KKworVEVTVChtYWxsb2MsIHZhbGxvY19zdGQpIHsKKyAgc2l6ZV90IHBhZ2VzaXplID0gc3lzY29uZihfU0NfUEFHRVNJWkUpOworICB2b2lkKiBwdHIgPSBwdmFsbG9jKDEwMCk7CisgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKTsKKyAgQVNTRVJUX1RSVUUoKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpICYgKHBhZ2VzaXplLTEpKSA9PSAwKTsKKyAgZnJlZShwdHIpOworfQorCitURVNUKG1hbGxvYywgdmFsbG9jX292ZXJmbG93KSB7CisgIEFTU0VSVF9FUShOVUxMLCB2YWxsb2MoU0laRV9NQVgpKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9jb3NfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX2Nvc190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGEyZDgyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWF0aF9jb3NfdGVzdC5jcHAKQEAgLTAsMCArMSw1NjQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCit0eXBlZGVmIHN0cnVjdCB7CisgIGRvdWJsZSBleHBlY3RlZDsKKyAgZG91YmxlIGNhbGxfZGF0YTsKK30gY29zX2ludGVsX2RhdGFfdDsKKworc3RhdGljIGNvc19pbnRlbF9kYXRhX3QgZ19jb3NfaW50ZWxfZGF0YVtdID0geworICB7IC8vIEVudHJ5IDAKKyAgICAweDEuYzFhMjdhZTgzNmYxMjgwMDAwMDAwMDAwMDA1MDRlOWJwLTEsCisgICAgMHgxLmZlYjFmNzkyMGUyNDhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxCisgICAgMHgxLmMxYTI3YWU4MzZmMTI4MDAwMDAwMDAwMDAwNTA0ZTlicC0xLAorICAgIC0weDEuZmViMWY3OTIwZTI0OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDIKKyAgICAweDEuNzhkYWYwMTAzNmQwY2ZmZmZmZmZmZmZmZmY5ODkwZDZwLTEsCisgICAgMHgxLjdjYjc2NDg1MjZmOTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzCisgICAgMHgxLjc4ZGFmMDEwMzZkMGNmZmZmZmZmZmZmZmZmOTg5MGQ2cC0xLAorICAgIC0weDEuN2NiNzY0ODUyNmY5OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAweDEuZmY4ZWI2YTkxZWNiMDAwMDAwMDAwMDAwMDAxZjhmNTZwLTEsCisgICAgMHgxLjU0OWVjMGMwYzVhZmFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1CisgICAgMHgxLmZmOGViNmE5MWVjYjAwMDAwMDAwMDAwMDAwMWY4ZjU2cC0xLAorICAgIC0weDEuNTQ5ZWMwYzBjNWFmYXAtNQorICB9LAorICB7IC8vIEVudHJ5IDYKKyAgICAweDEuZmVkMDQ3NmZjNzVjOTgwMDAwMDAwMDAwMDAyMGIxM2VwLTEsCisgICAgMHgxLjE2ZTUzNGVlMzY1ODBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3CisgICAgMHgxLmZlZDA0NzZmYzc1Yzk4MDAwMDAwMDAwMDAwMjBiMTNlcC0xLAorICAgIC0weDEuMTZlNTM0ZWUzNjU4MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICAweDEuZjEwZmM2MWUyYzc4ZWZmZmZmZmZmZmZmZmY4NzY2NmFwLTEsCisgICAgMHgxLmVmZWVmNjFkMzlhYzJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5CisgICAgMHgxLmYxMGZjNjFlMmM3OGVmZmZmZmZmZmZmZmZmODc2NjZhcC0xLAorICAgIC0weDEuZWZlZWY2MWQzOWFjMnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwCisgICAgMHgxLjQzNGEzNjQ1YmUyMDg3ZmZmZmZmZmZmZmZmNzJkMGFlcC0xLAorICAgIDB4MS5jNjVhMTcwNDc0NTQ5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTEKKyAgICAweDEuNDM0YTM2NDViZTIwODdmZmZmZmZmZmZmZmY3MmQwYWVwLTEsCisgICAgLTB4MS5jNjVhMTcwNDc0NTQ5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTIKKyAgICAweDEuMzM3ZmM1YjA3MmM1MjgwMDAwMDAwMDAwMDAxN2ZlNzdwLTMsCisgICAgMHgxLjZiOGE2MjczZDdjMjFwMAorICB9LAorICB7IC8vIEVudHJ5IDEzCisgICAgMHgxLjMzN2ZjNWIwNzJjNTI4MDAwMDAwMDAwMDAwMTdmZTc3cC0zLAorICAgIC0weDEuNmI4YTYyNzNkN2MyMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQKKyAgICAweDEuZWZhN2NkZGIxMjhmYjgwMDQzNTY4NzdiNzRlZThhYmRwLTEsCisgICAgLTB4MS4wMzZmNGJhN2U5MGFhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTUKKyAgICAweDEuZWZhN2NkZGIxMjhmYjgwMDQzNTY4NzdiNzRlZThhYmRwLTEsCisgICAgMHgxLjAzNmY0YmE3ZTkwYWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZiNTExN2ZlZTJlZGE3ZjEzZXAtMSwKKyAgICAtMHgxLjE1MDA3NjZjOWRmMjBwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMTcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmYjUxMTdmZWUyZWRhN2YxM2VwLTEsCisgICAgMHgxLjE1MDA3NjZjOWRmMjBwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMTgKKyAgICAweDEuZWMyMzE4MDI5MTdiZGZmYTYyN2FiNmE1OWFiZTNmN2RwLTEsCisgICAgLTB4MS4xZTJhMTU2M2UwNjhlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTkKKyAgICAweDEuZWMyMzE4MDI5MTdiZGZmYTYyN2FiNmE1OWFiZTNmN2RwLTEsCisgICAgMHgxLjFlMmExNTYzZTA2OGVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMAorICAgIDB4MS5kYzA0NGFjOTJiN2ZiOTAwNzkxM2M4N2RiNzZmYTQ5ZnAtOCwKKyAgICAtMHgxLjIxMTVhYTczZjhkMDVwNQorICB9LAorICB7IC8vIEVudHJ5IDIxCisgICAgMHgxLmRjMDQ0YWM5MmI3ZmI5MDA3OTEzYzg3ZGI3NmZhNDlmcC04LAorICAgIDB4MS4yMTE1YWE3M2Y4ZDA1cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMgorICAgIDB4MS5kMWZhNjdjNTBkZDUyN2Y2ZTlhYmJiMGJkMDY2NGFiOXAtNCwKKyAgICAtMHgxLjM0ZTNiY2RmOGY2OWFwMgorICB9LAorICB7IC8vIEVudHJ5IDIzCisgICAgMHgxLmQxZmE2N2M1MGRkNTI3ZjZlOWFiYmIwYmQwNjY0YWI5cC00LAorICAgIDB4MS4zNGUzYmNkZjhmNjlhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNAorICAgIDB4MS5lMmY4ZDE5ZmI4ZGI4ODA1NmRjZGRkNzZmNWEwNWMyMHAtMiwKKyAgICAtMHgxLjM4MDAwMDAwMDAwMGJwNworICB9LAorICB7IC8vIEVudHJ5IDI1CisgICAgMHgxLmUyZjhkMTlmYjhkYjg4MDU2ZGNkZGQ3NmY1YTA1YzIwcC0yLAorICAgIDB4MS4zODAwMDAwMDAwMDBicDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNgorICAgIDB4MS44ZGE5YzkwYzNlZGExN2Y1YmQ3MDhjZmM0MTRmZjFiOHAtMSwKKyAgICAtMHgxLjQ0MDAwMDAwNHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjcKKyAgICAweDEuOGRhOWM5MGMzZWRhMTdmNWJkNzA4Y2ZjNDE0ZmYxYjhwLTEsCisgICAgMHgxLjQ0MDAwMDAwNHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjgKKyAgICAweDEuYjU5YjMyMDYwM2Y4MzdmZjAxNWUyYTk2MWU3NTk0NmVwLTEsCisgICAgLTB4MS41NTBjOGVlNjdhNGM0cDI5CisgIH0sCisgIHsgLy8gRW50cnkgMjkKKyAgICAweDEuYjU5YjMyMDYwM2Y4MzdmZjAxNWUyYTk2MWU3NTk0NmVwLTEsCisgICAgMHgxLjU1MGM4ZWU2N2E0YzRwMjkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMAorICAgIDB4MS5mZmZmZmY3YWY2Yzg4N2U1ZjMxODYzNzFhMTdkZDgxZnAtMSwKKyAgICAtMHgxLjcxMTc4OWZkYjJlOGFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMzEKKyAgICAweDEuZmZmZmZmN2FmNmM4ODdlNWYzMTg2MzcxYTE3ZGQ4MWZwLTEsCisgICAgMHgxLjcxMTc4OWZkYjJlOGFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMzIKKyAgICAweDEuYzFiNjhlYmIwYjRmZTgyZThlOTlmOWQ0MjVlZTkwMWFwLTIsCisgICAgLTB4MS43N2UwMDAwMDJwOAorICB9LAorICB7IC8vIEVudHJ5IDMzCisgICAgMHgxLmMxYjY4ZWJiMGI0ZmU4MmU4ZTk5ZjlkNDI1ZWU5MDFhcC0yLAorICAgIDB4MS43N2UwMDAwMDJwOAorICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgMHgxLjExNjFlMWRhZDc2ZGJmZDU1ZjA4YzRhNGE5MGJkNTQ3cC00LAorICAgIC0weDEuODEwNjU2MTkzMWI0M3AwCisgIH0sCisgIHsgLy8gRW50cnkgMzUKKyAgICAweDEuMTE2MWUxZGFkNzZkYmZkNTVmMDhjNGE0YTkwYmQ1NDdwLTQsCisgICAgMHgxLjgxMDY1NjE5MzFiNDNwMAorICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgMHgxLmY4MjhjMzIyNmIzZDc3YzM3NGU3ODlkNzIxNmE4NWIzcC01LAorICAgIC0weDEuODI1YmUyNDYxY2FkNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAweDEuZjgyOGMzMjI2YjNkNzdjMzc0ZTc4OWQ3MjE2YTg1YjNwLTUsCisgICAgMHgxLjgyNWJlMjQ2MWNhZDRwMAorICB9LAorICB7IC8vIEVudHJ5IDM4CisgICAgMHgxLmYyOTkwZDc0MmU5ZmE4MGRkMTk0ODNhMmMwZGU0MjhicC01LAorICAgIC0weDEuODI4ODc1NTgwM2IwOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzkKKyAgICAweDEuZjI5OTBkNzQyZTlmYTgwZGQxOTQ4M2EyYzBkZTQyOGJwLTUsCisgICAgMHgxLjgyODg3NTU4MDNiMDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQwCisgICAgLTB4MS5mZjE1MGRkYTc1MjRjZTY3OGFiOTdlZTQ2MGU4ZTk2MXAtMSwKKyAgICAtMHgxLjhhNzU3MDFmNGNjZDNwMQorICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgLTB4MS5mZjE1MGRkYTc1MjRjZTY3OGFiOTdlZTQ2MGU4ZTk2MXAtMSwKKyAgICAweDEuOGE3NTcwMWY0Y2NkM3AxCisgIH0sCisgIHsgLy8gRW50cnkgNDIKKyAgICAweDEuMDE1YzQ3YzMyYjU3NDgwMmViODFkZWIwZGI0NmMyMDdwLTEsCisgICAgLTB4MS5iMzg5MzE2ZjM3ZjM3cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MworICAgIDB4MS4wMTVjNDdjMzJiNTc0ODAyZWI4MWRlYjBkYjQ2YzIwN3AtMSwKKyAgICAweDEuYjM4OTMxNmYzN2YzN3AzCisgIH0sCisgIHsgLy8gRW50cnkgNDQKKyAgICAweDEuZDY4MWEzNjZhMDUzNDdmYTU2Yjc1ZDg0NWIzM2M3YmJwLTEsCisgICAgLTB4MS5jNjAyYzQ2NWQ3ZDI3cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NQorICAgIDB4MS5kNjgxYTM2NmEwNTM0N2ZhNTZiNzVkODQ1YjMzYzdiYnAtMSwKKyAgICAweDEuYzYwMmM0NjVkN2QyN3A2CisgIH0sCisgIHsgLy8gRW50cnkgNDYKKyAgICAtMHgxLjg0ZTg5NmM3NTQzZDU0YzE2ZDdiZTM0NmUwZjQwMDE3cC0xLAorICAgIC0weDEuY2ZiODFmZTY5NjY0Y3A0CisgIH0sCisgIHsgLy8gRW50cnkgNDcKKyAgICAtMHgxLjg0ZTg5NmM3NTQzZDU0YzE2ZDdiZTM0NmUwZjQwMDE3cC0xLAorICAgIDB4MS5jZmI4MWZlNjk2NjRjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OAorICAgIDB4MS5mYzVkY2ZkZGQ1NGMwN2YxNTc0Y2UxMTRjMWU1ZWZmZXAtMSwKKyAgICAtMHgxLmQwOGYyZDg2YjEyYzZwMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OQorICAgIDB4MS5mYzVkY2ZkZGQ1NGMwN2YxNTc0Y2UxMTRjMWU1ZWZmZXAtMSwKKyAgICAweDEuZDA4ZjJkODZiMTJjNnAxMworICB9LAorICB7IC8vIEVudHJ5IDUwCisgICAgMHgxLmZlODMyMzVmYmUwMTVkNmMzNjE1NTZlZTVhMGUyMjk0cC0zLAorICAgIC0weDEuZGUxM2YwOTQzYzQ5NHA5OQorICB9LAorICB7IC8vIEVudHJ5IDUxCisgICAgMHgxLmZlODMyMzVmYmUwMTVkNmMzNjE1NTZlZTVhMGUyMjk0cC0zLAorICAgIDB4MS5kZTEzZjA5NDNjNDk0cDk5CisgIH0sCisgIHsgLy8gRW50cnkgNTIKKyAgICAtMHgxLjcyMDMyMTIzOWVjNGYzOGQ1NWI0MGQ4NDQ1MDk5YzJhcC0xLAorICAgIC0weDEuZGUzYzFmMTI4NWU4YnAzCisgIH0sCisgIHsgLy8gRW50cnkgNTMKKyAgICAtMHgxLjcyMDMyMTIzOWVjNGYzOGQ1NWI0MGQ4NDQ1MDk5YzJhcC0xLAorICAgIDB4MS5kZTNjMWYxMjg1ZThicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NAorICAgIDB4MS5mNzE0M2M4YmJhNDA2ZDZmODM0YTNiY2E1ZTljNmE1OHAtNCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmN2ZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDU1CisgICAgMHgxLmY3MTQzYzhiYmE0MDZkNmY4MzRhM2JjYTVlOWM2YTU4cC00LAorICAgIDB4MS5mZmZmZmZmZmZmZjdmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NgorICAgIC0weDEuZmZmZTYyZWNmYWI3NTNjMDcxYjI2ODBlMWUyNmJiY2VwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NworICAgIC0weDEuZmZmZTYyZWNmYWI3NTNjMDcxYjI2ODBlMWUyNmJiY2VwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDU4CisgICAgMHgxLjA1NWU0NTdhYzEyMjc2NmE3YTM0M2VhNGFjNzM5YjJlcC01LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDUxCisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAweDEuMDU1ZTQ1N2FjMTIyNzY2YTdhMzQzZWE0YWM3MzliMmVwLTUsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDUxCisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAweDEuYzE1MjgwNjViN2Q0ZTJkODRkNjQwMzAxODAwZGRkODFwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MQorICAgIDB4MS5jMTUyODA2NWI3ZDRlMmQ4NGQ2NDAzMDE4MDBkZGQ4MXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZlZmZmZmZmZmZmZmZmYTBwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDNwLTMyCisgIH0sCisgIHsgLy8gRW50cnkgNjMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZWZmZmZmZmZmZmZmZmEwcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwM3AtMzIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIDB4MS5mZmZlYTQ0NGJjMDVlMGIyZWM2OTNmNzIyNmQwNTZiOHAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAyMHAxNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NQorICAgIDB4MS5mZmZlYTQ0NGJjMDVlMGIyZWM2OTNmNzIyNmQwNTZiOHAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMjBwMTUwCisgIH0sCisgIHsgLy8gRW50cnkgNjYKKyAgICAtMHgxLmViZGRlZTg3NmY0MzM4Y2M4ODUzOTRkMTAzOWFjZmUxcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDM4cDM4MAorICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgLTB4MS5lYmRkZWU4NzZmNDMzOGNjODg1Mzk0ZDEwMzlhY2ZlMXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMzhwMzgwCisgIH0sCisgIHsgLy8gRW50cnkgNjgKKyAgICAtMHgxLmYyZmZjNTFkYzY5NjgxZGVkMzMzNjI2NDViNGU4NTEzcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMTE4cDM4MAorICB9LAorICB7IC8vIEVudHJ5IDY5CisgICAgLTB4MS5mMmZmYzUxZGM2OTY4MWRlZDMzMzYyNjQ1YjRlODUxM3AtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAxMThwMzgwCisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAtMHgxLmY4ZmJiNGQzNThiMjA3ZjRmODFjMzZjZjIxYzRhZjk3cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwM2ZmcDY0MQorICB9LAorICB7IC8vIEVudHJ5IDcxCisgICAgLTB4MS5mOGZiYjRkMzU4YjIwN2Y0ZjgxYzM2Y2YyMWM0YWY5N3AtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAzZmZwNjQxCisgIH0sCisgIHsgLy8gRW50cnkgNzIKKyAgICAtMHgxLmFhMjI2NTc1M2U2Njg3ZmRlNzYyNjllZTkyYTc4NGIwcC0yLAorICAgIDB4MS4wMDAwMDAwMDAxMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAtMHgxLmFhMjI2NTc1M2U2Njg3ZmRlNzYyNjllZTkyYTc4NGIwcC0yLAorICAgIC0weDEuMDAwMDAwMDAwMTBwMQorICB9LAorICB7IC8vIEVudHJ5IDc0CisgICAgMHgxLmZkMTI0MmMyNTk5NGQwY2M1ZGFmNDA1ZmE1MTBlNTM5cC0xLAorICAgIDB4MS4wMDAwMDAwMDhwNDUyCisgIH0sCisgIHsgLy8gRW50cnkgNzUKKyAgICAweDEuZmQxMjQyYzI1OTk0ZDBjYzVkYWY0MDVmYTUxMGU1MzlwLTEsCisgICAgLTB4MS4wMDAwMDAwMDhwNDUyCisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAweDEuZmZmYzAwMDE1NTRkYTgwMDAwNDg4MjhkZTk3YWNjY2JwLTEsCisgICAgMHgxLjAwMDAwMDAwZWZmYWZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NworICAgIDB4MS5mZmZjMDAwMTU1NGRhODAwMDA0ODgyOGRlOTdhY2NjYnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwZWZmYWZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OAorICAgIDB4MS4xNGEyN2YyOTI1NTIyODAwMDBkZDMwZmJmNmIzODQ4MXAtMSwKKyAgICAweDEuMDAwMDAxMTRmZWZlMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAweDEuMTRhMjdmMjkyNTUyMjgwMDAwZGQzMGZiZjZiMzg0ODFwLTEsCisgICAgLTB4MS4wMDAwMDExNGZlZmUycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MAorICAgIDB4MS5iZjgxZTAyNjljNTljN2ZmNzUzY2EzMjE0NzY2NmM1NnAtMywKKyAgICAweDEuMDAwMDA3MHA0MAorICB9LAorICB7IC8vIEVudHJ5IDgxCisgICAgMHgxLmJmODFlMDI2OWM1OWM3ZmY3NTNjYTMyMTQ3NjY2YzU2cC0zLAorICAgIC0weDEuMDAwMDA3MHA0MAorICB9LAorICB7IC8vIEVudHJ5IDgyCisgICAgMHgxLjE0YTI2ZWQxOTYwZDY3ZmZmZmRmOGQxM2I0M2ZhMmI0cC0xLAorICAgIDB4MS4wMDAwMGFjYWRiM2QzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIDB4MS4xNGEyNmVkMTk2MGQ2N2ZmZmZkZjhkMTNiNDNmYTJiNHAtMSwKKyAgICAtMHgxLjAwMDAwYWNhZGIzZDNwMAorICB9LAorICB7IC8vIEVudHJ5IDg0CisgICAgMHgxLmZmZmZmZmZmYmZmZmU3ZmZmZjE1NTY1NTU1OWE3ZDJkcC0xLAorICAgIDB4MS4wMDAwM3AtMTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NQorICAgIDB4MS5mZmZmZmZmZmJmZmZlN2ZmZmYxNTU2NTU1NTlhN2QyZHAtMSwKKyAgICAtMHgxLjAwMDAzcC0xNworICB9LAorICB7IC8vIEVudHJ5IDg2CisgICAgMHgxLmZmZmZmZmZmZWZmZmY3ZmZmZjE1Zjk2YWQzYjI5ZDk0cC0xLAorICAgIDB4MS4wMDAwM2ZmZmZmZmFlcC0xOAorICB9LAorICB7IC8vIEVudHJ5IDg3CisgICAgMHgxLmZmZmZmZmZmZWZmZmY3ZmZmZjE1Zjk2YWQzYjI5ZDk0cC0xLAorICAgIC0weDEuMDAwMDNmZmZmZmZhZXAtMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OAorICAgIDB4MS5mZmZmZmZmZmVmZmZmN2ZmZmYxNTU3NmFhYjMyOWY0NXAtMSwKKyAgICAweDEuMDAwMDNmZmZmZmZmZnAtMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OQorICAgIDB4MS5mZmZmZmZmZmVmZmZmN2ZmZmYxNTU3NmFhYjMyOWY0NXAtMSwKKyAgICAtMHgxLjAwMDAzZmZmZmZmZmZwLTE4CisgIH0sCisgIHsgLy8gRW50cnkgOTAKKyAgICAtMHgxLmRhYjdlZmViMzViYWQ3ZmJkY2IwZWZlZGI2NjIwOTdjcC0yLAorICAgIDB4MS4wMDAwN2ZmZmZkZWEwcDQxCisgIH0sCisgIHsgLy8gRW50cnkgOTEKKyAgICAtMHgxLmRhYjdlZmViMzViYWQ3ZmJkY2IwZWZlZGI2NjIwOTdjcC0yLAorICAgIC0weDEuMDAwMDdmZmZmZGVhMHA0MQorICB9LAorICB7IC8vIEVudHJ5IDkyCisgICAgMHgxLmZmZmZmZmZmZmJmZmY4MDAwMDAxNTk1YWE5YWZmZmNmcC0xLAorICAgIDB4MS4wMDAwZmZmZjhwLTE5CisgIH0sCisgIHsgLy8gRW50cnkgOTMKKyAgICAweDEuZmZmZmZmZmZmYmZmZjgwMDAwMDE1OTVhYTlhZmZmY2ZwLTEsCisgICAgLTB4MS4wMDAwZmZmZjhwLTE5CisgIH0sCisgIHsgLy8gRW50cnkgOTQKKyAgICAweDEuZmZmZmZmZmZmZWZmZjgwMDAwMDA0YjM2NDIzMDUwZjZwLTEsCisgICAgMHgxLjAwMDNmZmY4MDAwNTFwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgOTUKKyAgICAweDEuZmZmZmZmZmZmZWZmZjgwMDAwMDA0YjM2NDIzMDUwZjZwLTEsCisgICAgLTB4MS4wMDAzZmZmODAwMDUxcC0yMAorICB9LAorICB7IC8vIEVudHJ5IDk2CisgICAgMHgxLmZmZmZmZmZmZmVmZmY4MDAwMDAwNDI5NjFmYjA5NWY3cC0xLAorICAgIDB4MS4wMDAzZmZmODAwMDk2cC0yMAorICB9LAorICB7IC8vIEVudHJ5IDk3CisgICAgMHgxLmZmZmZmZmZmZmVmZmY4MDAwMDAwNDI5NjFmYjA5NWY3cC0xLAorICAgIC0weDEuMDAwM2ZmZjgwMDA5NnAtMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIC0weDEuZmJmMmI3MWEyM2E1NzdmZGRkMDgxZDMwYmMyNDkxN2ZwLTIsCisgICAgMHgxLjAwMGZkMjBwMzM0CisgIH0sCisgIHsgLy8gRW50cnkgOTkKKyAgICAtMHgxLmZiZjJiNzFhMjNhNTc3ZmRkZDA4MWQzMGJjMjQ5MTdmcC0yLAorICAgIC0weDEuMDAwZmQyMHAzMzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAweDEuZmNjYzg3ZWFlNzczNmQ4ZDhhNDc3NjMxNGY2YjBiYTdwLTUsCisgICAgMHgxLjAwM3A1MTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEKKyAgICAweDEuZmNjYzg3ZWFlNzczNmQ4ZDhhNDc3NjMxNGY2YjBiYTdwLTUsCisgICAgLTB4MS4wMDNwNTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTAyCisgICAgLTB4MS5hNDNmNDBkOTJiN2VkN2VlZjBmZTZkMTc5OTQ0MmNmYXAtNywKKyAgICAweDEuMDA2MDAwMDAwMTVmNHA0MQorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIC0weDEuYTQzZjQwZDkyYjdlZDdlZWYwZmU2ZDE3OTk0NDJjZmFwLTcsCisgICAgLTB4MS4wMDYwMDAwMDAxNWY0cDQxCisgIH0sCisgIHsgLy8gRW50cnkgMTA0CisgICAgMHgxLmMxMWNjMzhmNDBhYjI4MjdkZDBmZjhjNmYzZGQxZGFmcC0xLAorICAgIDB4MS4wMDdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUKKyAgICAweDEuYzExY2MzOGY0MGFiMjgyN2RkMGZmOGM2ZjNkZDFkYWZwLTEsCisgICAgLTB4MS4wMDdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYKKyAgICAweDEuZmZmZmZmZmZmZmJmYzdmM2MwMDAwMTU3YWMzMzFkMGNwLTEsCisgICAgMHgxLjAwN3AtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcKKyAgICAweDEuZmZmZmZmZmZmZmJmYzdmM2MwMDAwMTU3YWMzMzFkMGNwLTEsCisgICAgLTB4MS4wMDdwLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgMHgxLmU5YmE5ODIzMWY3MzQ2ZTA1NjY2OTRlMTQ4NGE1Yjk4cC04LAorICAgIDB4MS4wMGNwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkKKyAgICAweDEuZTliYTk4MjMxZjczNDZlMDU2NjY5NGUxNDg0YTViOThwLTgsCisgICAgLTB4MS4wMGNwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAweDEuZmVmZGY0OGVkNjQ5Y2QwODdlM2U4MDEyMTllZGY4MDRwLTEsCisgICAgMHgxLjAxMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDExMQorICAgIDB4MS5mZWZkZjQ4ZWQ2NDljZDA4N2UzZTgwMTIxOWVkZjgwNHAtMSwKKyAgICAtMHgxLjAxMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDExMgorICAgIC0weDEuZmZjMTZhMGYxMmZmMjcxY2VkNzJmYzY1OWRkY2QzODJwLTEsCisgICAgMHgxLjAxMXA5OTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMKKyAgICAtMHgxLmZmYzE2YTBmMTJmZjI3MWNlZDcyZmM2NTlkZGNkMzgycC0xLAorICAgIC0weDEuMDExcDk5NgorICB9LAorICB7IC8vIEVudHJ5IDExNAorICAgIDB4MS5lZmQ1YjYxYTMwYTM4N2ZmZjE0MDA1MTk4NDVmY2IxZXAtMSwKKyAgICAweDEuMDIwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTE1CisgICAgMHgxLmVmZDViNjFhMzBhMzg3ZmZmMTQwMDUxOTg0NWZjYjFlcC0xLAorICAgIC0weDEuMDIwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTE2CisgICAgMHgxLmM5N2I4MTYxZGM1MGEwNmNkNDgwMWRlZWI4ZTA3MTVicC0yLAorICAgIDB4MS4wMjA0MjYwYzE4MzA3cDU5CisgIH0sCisgIHsgLy8gRW50cnkgMTE3CisgICAgMHgxLmM5N2I4MTYxZGM1MGEwNmNkNDgwMWRlZWI4ZTA3MTVicC0yLAorICAgIC0weDEuMDIwNDI2MGMxODMwN3A1OQorICB9LAorICB7IC8vIEVudHJ5IDExOAorICAgIC0weDEuYmYyNmEzYzliOWZiZTgzNDg4NDQ5MzQzZjA4YjA4ZDdwLTIsCisgICAgMHgxLjAyZTc4YTMyMTE1NWVwMQorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIC0weDEuYmYyNmEzYzliOWZiZTgzNDg4NDQ5MzQzZjA4YjA4ZDdwLTIsCisgICAgLTB4MS4wMmU3OGEzMjExNTVlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAKKyAgICAweDEuZmVmODA2YjFmODRlNGRmZDVmNzEzMDdhM2MzZWI2MDJwLTEsCisgICAgMHgxLjA0MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEyMQorICAgIDB4MS5mZWY4MDZiMWY4NGU0ZGZkNWY3MTMwN2EzYzNlYjYwMnAtMSwKKyAgICAtMHgxLjA0MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEyMgorICAgIDB4MS5mZTg1MWZiZjg3ZDE3NmZiNGM2OTI5NWM3ZjkyODQwMnAtMSwKKyAgICAweDEuMDRiZGU4YmI4MDI1OHA5OAorICB9LAorICB7IC8vIEVudHJ5IDEyMworICAgIDB4MS5mZTg1MWZiZjg3ZDE3NmZiNGM2OTI5NWM3ZjkyODQwMnAtMSwKKyAgICAtMHgxLjA0YmRlOGJiODAyNThwOTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAweDEuNzBmNmE1MWRhOGVmZWMzOThlNzQxNjllNzcxMzg2ZWFwLTEsCisgICAgMHgxLjA3N2U3NDllMzdjZWVwMjM2CisgIH0sCisgIHsgLy8gRW50cnkgMTI1CisgICAgMHgxLjcwZjZhNTFkYThlZmVjMzk4ZTc0MTY5ZTc3MTM4NmVhcC0xLAorICAgIC0weDEuMDc3ZTc0OWUzN2NlZXAyMzYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYKKyAgICAweDEuNmI0MDhjODU2YmRhNTdmZTU4MjlhNTgzNjFmZWExMTJwLTMsCisgICAgMHgxLjA3ZjgwcDMwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNworICAgIDB4MS42YjQwOGM4NTZiZGE1N2ZlNTgyOWE1ODM2MWZlYTExMnAtMywKKyAgICAtMHgxLjA3ZjgwcDMwMAorICB9LAorICB7IC8vIEVudHJ5IDEyOAorICAgIDB4MS4yYjJmOTY1YWU0MGZjN2ZmZmZiY2EwYjdlYWVjNTkxOXAtMSwKKyAgICAweDEuMDdmOWJlYTFiMzU0NnAyNworICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIDB4MS4yYjJmOTY1YWU0MGZjN2ZmZmZiY2EwYjdlYWVjNTkxOXAtMSwKKyAgICAtMHgxLjA3ZjliZWExYjM1NDZwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAKKyAgICAtMHgxLjRlZWQyZjNmYzc2YTc3ZjgwM2Q4OTExZWVkZGNjNWU4cC0xLAorICAgIDB4MS4wOTBkMTgzNzJmMmQ1cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzEKKyAgICAtMHgxLjRlZWQyZjNmYzc2YTc3ZjgwM2Q4OTExZWVkZGNjNWU4cC0xLAorICAgIC0weDEuMDkwZDE4MzcyZjJkNXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTMyCisgICAgMHgxLmZiYTU5YWVjZWU1MDAwMzE1Y2VlMzIzMDc5ZWQxNDI3cC0xLAorICAgIDB4MS4wYjRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMKKyAgICAweDEuZmJhNTlhZWNlZTUwMDAzMTVjZWUzMjMwNzllZDE0MjdwLTEsCisgICAgLTB4MS4wYjRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQKKyAgICAweDEuZmZmZDFiY2RhN2E3ZDU1MTBhYTNkMGVkOGFkZGM3ODVwLTEsCisgICAgMHgxLjBjMGQ1YzJhZjNjMmVwMzQ2CisgIH0sCisgIHsgLy8gRW50cnkgMTM1CisgICAgMHgxLmZmZmQxYmNkYTdhN2Q1NTEwYWEzZDBlZDhhZGRjNzg1cC0xLAorICAgIC0weDEuMGMwZDVjMmFmM2MyZXAzNDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYKKyAgICAtMHgxLmU0ZGZlODMxMjkyODY3ZmRjMTMzM2MwYTRjM2YzZjcwcC0xLAorICAgIDB4MS4wZDMwNTk2ZWU5MWZkcDIxNgorICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIC0weDEuZTRkZmU4MzEyOTI4NjdmZGMxMzMzYzBhNGMzZjNmNzBwLTEsCisgICAgLTB4MS4wZDMwNTk2ZWU5MWZkcDIxNgorICB9LAorICB7IC8vIEVudHJ5IDEzOAorICAgIDB4MS5mYjg0MzI4ODZhMjgzYjE3YWNhYTUyNGUzMTJhYjFlM3AtMiwKKyAgICAweDEuMGQ2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkKKyAgICAweDEuZmI4NDMyODg2YTI4M2IxN2FjYWE1MjRlMzEyYWIxZTNwLTIsCisgICAgLTB4MS4wZDZwMAorICB9LAorICB7IC8vIEVudHJ5IDE0MAorICAgIDB4MS5mZmZmZWUyMDI4NTNmZmJiYzE2ODQ4NDcwMTk3MjdhMHAtMSwKKyAgICAweDEuMGU5NDc0YzY4ODMxY3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAweDEuZmZmZmVlMjAyODUzZmZiYmMxNjg0ODQ3MDE5NzI3YTBwLTEsCisgICAgLTB4MS4wZTk0NzRjNjg4MzFjcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIC0weDEuYjcwZDNkNTU4NGIxYTgzYzY4ZTI1NGU1MjNkMzdkZmRwLTIsCisgICAgMHgxLjExM2JhZTQwNDk4NDlwMgorICB9LAorICB7IC8vIEVudHJ5IDE0MworICAgIC0weDEuYjcwZDNkNTU4NGIxYTgzYzY4ZTI1NGU1MjNkMzdkZmRwLTIsCisgICAgLTB4MS4xMTNiYWU0MDQ5ODQ5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDQKKyAgICAweDEuZmVkOGRmNThmNjI1ZmRjYmIxZTQwY2Y4M2NhYTJjYTJwLTEsCisgICAgMHgxLjEyZWI4NzA5NzY1NDBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDUKKyAgICAweDEuZmVkOGRmNThmNjI1ZmRjYmIxZTQwY2Y4M2NhYTJjYTJwLTEsCisgICAgLTB4MS4xMmViODcwOTc2NTQwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTQ2CisgICAgMHgxLmU1MzZhZTM5NWRmY2UwMDE0NTc5NzBjOGFhYWMzYjFmcC0yLAorICAgIDB4MS4xM2NwMAorICB9LAorICB7IC8vIEVudHJ5IDE0NworICAgIDB4MS5lNTM2YWUzOTVkZmNlMDAxNDU3OTcwYzhhYWFjM2IxZnAtMiwKKyAgICAtMHgxLjEzY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ4CisgICAgMHgxLmZlZDA0NzZmYzc1Yzk4MDAwMDAwMDAwMDAwMjBiMTNlcC0xLAorICAgIDB4MS4xNmU1MzRlZTM2NTgwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgMHgxLmZlZDA0NzZmYzc1Yzk4MDAwMDAwMDAwMDAwMjBiMTNlcC0xLAorICAgIC0weDEuMTZlNTM0ZWUzNjU4MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDE1MAorICAgIDB4MS5mYjM4ZTgyZTMxOTNhN2YxOWExN2QyMzFhMmU4MTk0ZXAtMSwKKyAgICAweDEuMTdmZmZmZmZmZWE5OHAtMworICB9LAorICB7IC8vIEVudHJ5IDE1MQorICAgIDB4MS5mYjM4ZTgyZTMxOTNhN2YxOWExN2QyMzFhMmU4MTk0ZXAtMSwKKyAgICAtMHgxLjE3ZmZmZmZmZmVhOThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAweDEuZmIzOGU4MmUzMTg3ZmM2NTc0N2FlNDQzNDYxZWI0MzRwLTEsCisgICAgMHgxLjE4MHAtMworICB9LAorICB7IC8vIEVudHJ5IDE1MworICAgIDB4MS5mYjM4ZTgyZTMxODdmYzY1NzQ3YWU0NDM0NjFlYjQzNHAtMSwKKyAgICAtMHgxLjE4MHAtMworICB9LAorICB7IC8vIEVudHJ5IDE1NAorICAgIC0weDEuZTU5NjQ3ZjFmZTljNzUwMDU5YjllYWZiODhjMmFjZWFwLTEsCisgICAgMHgxLjFhMTkxZWJiYjRkN2ZwNworICB9LAorICB7IC8vIEVudHJ5IDE1NQorICAgIC0weDEuZTU5NjQ3ZjFmZTljNzUwMDU5YjllYWZiODhjMmFjZWFwLTEsCisgICAgLTB4MS4xYTE5MWViYmI0ZDdmcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTYKKyAgICAtMHgxLmQwZGNhMWY4NzE1YmQ3ZjlmZjM3M2M3NjM1MjJkYjBlcC00LAorICAgIDB4MS4xZGE4NGYyYjdiMWQ4cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTcKKyAgICAtMHgxLmQwZGNhMWY4NzE1YmQ3ZjlmZjM3M2M3NjM1MjJkYjBlcC00LAorICAgIC0weDEuMWRhODRmMmI3YjFkOHA3CisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgMHgxLmI5MTdlYmJjMzBlMWQ4MzY0YmMzYzJjMTBlYTEzNTM5cC0yLAorICAgIDB4MS4yMDFlOTczMjUxMzAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTkKKyAgICAweDEuYjkxN2ViYmMzMGUxZDgzNjRiYzNjMmMxMGVhMTM1MzlwLTIsCisgICAgLTB4MS4yMDFlOTczMjUxMzAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjAKKyAgICAweDEuZmZmYWRmMTJmZjQxNDdmNmY2ZjM1YjQ0YjBmNmNiNDZwLTEsCisgICAgMHgxLjIxZTAycC03CisgIH0sCisgIHsgLy8gRW50cnkgMTYxCisgICAgMHgxLmZmZmFkZjEyZmY0MTQ3ZjZmNmYzNWI0NGIwZjZjYjQ2cC0xLAorICAgIC0weDEuMjFlMDJwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjIKKyAgICAtMHgxLjU5OGE0ZGFiM2RlNTk3ZDUyZmFhNzM2NzYyYTNmNjUxcC0xLAorICAgIDB4MS4yN2UyOWE0Yjk4NWJmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjMKKyAgICAtMHgxLjU5OGE0ZGFiM2RlNTk3ZDUyZmFhNzM2NzYyYTNmNjUxcC0xLAorICAgIC0weDEuMjdlMjlhNGI5ODViZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTY0CisgICAgMHgxLmZhOTVjMTE1NGFiZjU2YzRkYmI3N2JmZTVlNGU4ZjQycC0xLAorICAgIDB4MS4yYTFmMjhkYmZiNmMwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTY1CisgICAgMHgxLmZhOTVjMTE1NGFiZjU2YzRkYmI3N2JmZTVlNGU4ZjQycC0xLAorICAgIC0weDEuMmExZjI4ZGJmYjZjMHAtMworICB9LAorICB7IC8vIEVudHJ5IDE2NgorICAgIC0weDEuNjQxMjI5M2FkYjdiY2E5NzczMWU1MGE4NjMxMmRhMmRwLTEsCisgICAgMHgxLjJiOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTY3CisgICAgLTB4MS42NDEyMjkzYWRiN2JjYTk3NzMxZTUwYTg2MzEyZGEyZHAtMSwKKyAgICAtMHgxLjJiOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgMHgxLmZmZmE1MThhN2QwZTc3ZjNiNDMxZmNkMGJhMzUzMDk1cC0xLAorICAgIDB4MS4zMTE5OWRlZjcyZjRkcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgMHgxLmZmZmE1MThhN2QwZTc3ZjNiNDMxZmNkMGJhMzUzMDk1cC0xLAorICAgIC0weDEuMzExOTlkZWY3MmY0ZHAtNworICB9LAorICB7IC8vIEVudHJ5IDE3MAorICAgIDB4MS5mMzY4OTVmZTE3N2Y3N2ZlODQ3OTgyNjRhZDRmMzNiMXAtMSwKKyAgICAweDEuMzEyNjBlMTQ4NTAxNHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTcxCisgICAgMHgxLmYzNjg5NWZlMTc3Zjc3ZmU4NDc5ODI2NGFkNGYzM2IxcC0xLAorICAgIC0weDEuMzEyNjBlMTQ4NTAxNHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTcyCisgICAgMHgxLmQzNjIwN2I0ZmVlMTY3ZjZiMzE4NWZkZDkyOTRhMjMzcC00LAorICAgIDB4MS4zNGU5NjRjZDEwM2JkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzMKKyAgICAweDEuZDM2MjA3YjRmZWUxNjdmNmIzMTg1ZmRkOTI5NGEyMzNwLTQsCisgICAgLTB4MS4zNGU5NjRjZDEwM2JkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzQKKyAgICAtMHgxLjg0YTM3ZjRmYTc2MTZjYWFkNjZiNGQ3MDFhYjUzZTk0cC0xLAorICAgIDB4MS4zNzYxOGEwYmE3ODUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzUKKyAgICAtMHgxLjg0YTM3ZjRmYTc2MTZjYWFkNjZiNGQ3MDFhYjUzZTk0cC0xLAorICAgIC0weDEuMzc2MThhMGJhNzg1MHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTc2CisgICAgLTB4MS5jODMwYmJjOTllMjI5MGY5ZDkzYWE2MmIyZGRmZWM5N3AtMzksCisgICAgMHgxLjM3OTcwNGY1ZjFlYjNwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAtMHgxLmM4MzBiYmM5OWUyMjkwZjlkOTNhYTYyYjJkZGZlYzk3cC0zOSwKKyAgICAtMHgxLjM3OTcwNGY1ZjFlYjNwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzgKKyAgICAweDEuYjVkYWFhMjMzYmQ0ZjdmY2YzNGI2ZDVkMDI4MDE3MmZwLTMsCisgICAgMHgxLjNiNjFkZDE2NmQ0NzBwMgorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIDB4MS5iNWRhYWEyMzNiZDRmN2ZjZjM0YjZkNWQwMjgwMTcyZnAtMywKKyAgICAtMHgxLjNiNjFkZDE2NmQ0NzBwMgorICB9LAorICB7IC8vIEVudHJ5IDE4MAorICAgIC0weDEuZmZkMDBkYzRkYjQwMGQ5NjJlMmQyNTVhNjYxZTNjY2JwLTQsCisgICAgMHgxLjNjMDExMDIyYWNiZDBwMzcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAtMHgxLmZmZDAwZGM0ZGI0MDBkOTYyZTJkMjU1YTY2MWUzY2NicC00LAorICAgIC0weDEuM2MwMTEwMjJhY2JkMHAzNworICB9LAorICB7IC8vIEVudHJ5IDE4MgorICAgIC0weDEuMTQwNTJiNDAxNmZmNTdmZTU3NTBlZDM0MjZiZmQ3NThwLTEsCisgICAgMHgxLjNlNzc4OGU5MDBiNzBwNzI3CisgIH0sCisgIHsgLy8gRW50cnkgMTgzCisgICAgLTB4MS4xNDA1MmI0MDE2ZmY1N2ZlNTc1MGVkMzQyNmJmZDc1OHAtMSwKKyAgICAtMHgxLjNlNzc4OGU5MDBiNzBwNzI3CisgIH0sCisgIHsgLy8gRW50cnkgMTg0CisgICAgMHgxLmZmZmZlNmE1ZTQxOTdmNWZjNTBhY2IxODllYjg1Yzk0cC0xLAorICAgIDB4MS40MjNlYWZkY2MyNzc5cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDE4NQorICAgIDB4MS5mZmZmZTZhNWU0MTk3ZjVmYzUwYWNiMTg5ZWI4NWM5NHAtMSwKKyAgICAtMHgxLjQyM2VhZmRjYzI3NzlwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMTg2CisgICAgLTB4MS5mZTA5ZmMzZDE2ZmVkZDc1MDgzMDFkZjY4ODU3Yjc1NnAtNiwKKyAgICAweDEuNDMyMTgyOGMxYjUzOHAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODcKKyAgICAtMHgxLmZlMDlmYzNkMTZmZWRkNzUwODMwMWRmNjg4NTdiNzU2cC02LAorICAgIC0weDEuNDMyMTgyOGMxYjUzOHAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODgKKyAgICAweDEuYjY4NWQ5NDlhMjdhMDE0M2M0YWM5YjU1MzU0MWViZWNwLTE0LAorICAgIDB4MS40MzUwNmNiMjI5NzVkcDIyCisgIH0sCisgIHsgLy8gRW50cnkgMTg5CisgICAgMHgxLmI2ODVkOTQ5YTI3YTAxNDNjNGFjOWI1NTM1NDFlYmVjcC0xNCwKKyAgICAtMHgxLjQzNTA2Y2IyMjk3NWRwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTAKKyAgICAweDEuZmUzOTgwOTBlMjAzYmMyZjZmZTY4MzBkMzgwZmFjYzRwLTEsCisgICAgMHgxLjQzOWY2MzQ5NTc4NmFwNjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTEKKyAgICAweDEuZmUzOTgwOTBlMjAzYmMyZjZmZTY4MzBkMzgwZmFjYzRwLTEsCisgICAgLTB4MS40MzlmNjM0OTU3ODZhcDY3CisgIH0sCisgIHsgLy8gRW50cnkgMTkyCisgICAgMHgxLmZlNjI3NGUwMDA5NzNhMjZjMWEwMDUzZTNmZGVmZmM3cC0xLAorICAgIDB4MS40NTc1MzhhNmJkMDczcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTkzCisgICAgMHgxLmZlNjI3NGUwMDA5NzNhMjZjMWEwMDUzZTNmZGVmZmM3cC0xLAorICAgIC0weDEuNDU3NTM4YTZiZDA3M3AtNAorICB9LAorICB7IC8vIEVudHJ5IDE5NAorICAgIDB4MS4wOWZjYjY5MzU5YzA5ZDU3MzlmMWYwMjU1ZDRmY2U4M3AtMSwKKyAgICAweDEuNDc4ZmMwOHA0MworICB9LAorICB7IC8vIEVudHJ5IDE5NQorICAgIDB4MS4wOWZjYjY5MzU5YzA5ZDU3MzlmMWYwMjU1ZDRmY2U4M3AtMSwKKyAgICAtMHgxLjQ3OGZjMDhwNDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTYKKyAgICAtMHgxLjIwYzIxNTg1MTFlNzg5OWYxZWMzNzllOTBjMjk2NzgwcC05LAorICAgIDB4MS40OGE0NTc5N2NiZTYzcDYxCisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgLTB4MS4yMGMyMTU4NTExZTc4OTlmMWVjMzc5ZTkwYzI5Njc4MHAtOSwKKyAgICAtMHgxLjQ4YTQ1Nzk3Y2JlNjNwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTgKKyAgICAweDEuOTkwZDE3YWFlMjUzMDdmZWM0YWU2ZDRlOThmMzAwOTNwLTEsCisgICAgMHgxLjRhNjJlMGUxMmMxNzNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTkKKyAgICAweDEuOTkwZDE3YWFlMjUzMDdmZWM0YWU2ZDRlOThmMzAwOTNwLTEsCisgICAgLTB4MS40YTYyZTBlMTJjMTczcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjAwCisgICAgMHgxLmZkZDRmMWUwMGIzODcwMDQxOWY5NmQzNDE5MDVkMDQ1cC0zLAorICAgIDB4MS40YzU5NjY0MmE5NDg4cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDEKKyAgICAweDEuZmRkNGYxZTAwYjM4NzAwNDE5Zjk2ZDM0MTkwNWQwNDVwLTMsCisgICAgLTB4MS40YzU5NjY0MmE5NDg4cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDIKKyAgICAweDEuZmU0ZjE0MTAzMmYzNzdmZTEzNWIxM2UwNDQzNmM1ZmZwLTEsCisgICAgMHgxLjRkMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDIwMworICAgIDB4MS5mZTRmMTQxMDMyZjM3N2ZlMTM1YjEzZTA0NDM2YzVmZnAtMSwKKyAgICAtMHgxLjRkMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDIwNAorICAgIDB4MS45NGU5ZjQ1ZDQzYzEzN2EzZjM0NTY0NDI0MGEyY2VmMHAtMiwKKyAgICAweDEuNGYwZjMwOHA0ODgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDUKKyAgICAweDEuOTRlOWY0NWQ0M2MxMzdhM2YzNDU2NDQyNDBhMmNlZjBwLTIsCisgICAgLTB4MS40ZjBmMzA4cDQ4OAorICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIDB4MS45MzU1ZjY5YWQ0MzI2NDA0ODI3Y2Q1Y2NmZjhhMGM2OXAtMiwKKyAgICAweDEuNTJmMDBlMHA3OTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAweDEuOTM1NWY2OWFkNDMyNjQwNDgyN2NkNWNjZmY4YTBjNjlwLTIsCisgICAgLTB4MS41MmYwMGUwcDc5MworICB9LAorICB7IC8vIEVudHJ5IDIwOAorICAgIDB4MS4xYTE5YmU4YmVhMTBhODAxZDBiMmQwOWQ5NTA5YzJjNHAtMSwKKyAgICAweDEuNTJmMDZjNzMwZWMwMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjA5CisgICAgMHgxLjFhMTliZThiZWExMGE4MDFkMGIyZDA5ZDk1MDljMmM0cC0xLAorICAgIC0weDEuNTJmMDZjNzMwZWMwMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjEwCisgICAgMHgxLjM4NWQ5MmVjMGM3MzM3ZmVhMzk0OTNmNmYyNjc0MzI4cC0xLAorICAgIDB4MS41M2U3ZDU4NDVmZTNkcDIyMAorICB9LAorICB7IC8vIEVudHJ5IDIxMQorICAgIDB4MS4zODVkOTJlYzBjNzMzN2ZlYTM5NDkzZjZmMjY3NDMyOHAtMSwKKyAgICAtMHgxLjUzZTdkNTg0NWZlM2RwMjIwCisgIH0sCisgIHsgLy8gRW50cnkgMjEyCisgICAgMHgxLmZmZmZmZmZmZmUyZjBmMDAwMDAwNDY1ZTM1OTJiZmZicC0xLAorICAgIDB4MS41OTBwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgMjEzCisgICAgMHgxLmZmZmZmZmZmZmUyZjBmMDAwMDAwNDY1ZTM1OTJiZmZicC0xLAorICAgIC0weDEuNTkwcC0yMAorICB9LAorICB7IC8vIEVudHJ5IDIxNAorICAgIC0weDEuZmZkN2JjMjhkZWQ5MWZmYTIwMGQ2NzcxMDkyNTE4MDFwLTEsCisgICAgMHgxLjU5MmYxMTc2ZjA5ODBwODYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTUKKyAgICAtMHgxLmZmZDdiYzI4ZGVkOTFmZmEyMDBkNjc3MTA5MjUxODAxcC0xLAorICAgIC0weDEuNTkyZjExNzZmMDk4MHA4NgorICB9LAorICB7IC8vIEVudHJ5IDIxNgorICAgIC0weDEuY2VlMjhiM2Q3OTc5OTAwMDAwOWVhODA4MTI0NDExNmNwLTEsCisgICAgMHgxLjU5OTk5OTlkYzA5ZGNwMQorICB9LAorICB7IC8vIEVudHJ5IDIxNworICAgIC0weDEuY2VlMjhiM2Q3OTc5OTAwMDAwOWVhODA4MTI0NDExNmNwLTEsCisgICAgLTB4MS41OTk5OTk5ZGMwOWRjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAweDEuYzFmMWViMDhjMjYwNDBhMzI4MDBmMDg3OTUyYTM4M2NwLTEsCisgICAgMHgxLjViZWEwMTBwNDY4CisgIH0sCisgIHsgLy8gRW50cnkgMjE5CisgICAgMHgxLmMxZjFlYjA4YzI2MDQwYTMyODAwZjA4Nzk1MmEzODNjcC0xLAorICAgIC0weDEuNWJlYTAxMHA0NjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjAKKyAgICAweDEuZmZmZTM1YWIwOWE2NTNlMjY2ZWFkYTZmNDQwNTUyMTRwLTEsCisgICAgMHgxLjVjYjgwYTYxMzVlNWFwMTAwMAorICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIDB4MS5mZmZlMzVhYjA5YTY1M2UyNjZlYWRhNmY0NDA1NTIxNHAtMSwKKyAgICAtMHgxLjVjYjgwYTYxMzVlNWFwMTAwMAorICB9LAorICB7IC8vIEVudHJ5IDIyMgorICAgIC0weDEuMDdiODVmNjA2ZTc1ZDc2NWIxYWEzYmJjY2JhNmVhZjhwLTMsCisgICAgMHgxLjVkNWJlNDg3MzBkMmRwMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjMKKyAgICAtMHgxLjA3Yjg1ZjYwNmU3NWQ3NjViMWFhM2JiY2NiYTZlYWY4cC0zLAorICAgIC0weDEuNWQ1YmU0ODczMGQyZHAxMworICB9LAorICB7IC8vIEVudHJ5IDIyNAorICAgIDB4MS5mZmZmZmZmZmZmODYyMzljMDAwMDA0ZDU4MWIwNTVlYnAtMSwKKyAgICAweDEuNjE0cC0yMQorICB9LAorICB7IC8vIEVudHJ5IDIyNQorICAgIDB4MS5mZmZmZmZmZmZmODYyMzljMDAwMDA0ZDU4MWIwNTVlYnAtMSwKKyAgICAtMHgxLjYxNHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjYKKyAgICAtMHgxLmRkM2E4MDZlODljZjE3ZmZmZmYxNmVjZDUzOTdiNDg2cC0xLAorICAgIDB4MS42MmFkYzhhNjYwMzY0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjcKKyAgICAtMHgxLmRkM2E4MDZlODljZjE3ZmZmZmYxNmVjZDUzOTdiNDg2cC0xLAorICAgIC0weDEuNjJhZGM4YTY2MDM2NHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjI4CisgICAgLTB4MS40MzA4YjE0ZjRiNmVkYzRjMDdlZTY4OTVmMzE4OGFmM3AtMSwKKyAgICAweDEuNjRlZjQzOHAxNDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjkKKyAgICAtMHgxLjQzMDhiMTRmNGI2ZWRjNGMwN2VlNjg5NWYzMTg4YWYzcC0xLAorICAgIC0weDEuNjRlZjQzOHAxNDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzAKKyAgICAweDEuNjYyM2QyZWI2YWRkMWZmYzM5OGEzYzIwNDQ3ZjlkMDZwLTMsCisgICAgMHgxLjY1MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjMxCisgICAgMHgxLjY2MjNkMmViNmFkZDFmZmMzOThhM2MyMDQ0N2Y5ZDA2cC0zLAorICAgIC0weDEuNjUycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzIKKyAgICAweDEuZmZmODMyYzUwZjQ3MWZmNTU5OWMyM2RjOTY4ZWI4ZTRwLTEsCisgICAgMHgxLjY1ODY1YjJjYjA4YTJwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzMKKyAgICAweDEuZmZmODMyYzUwZjQ3MWZmNTU5OWMyM2RjOTY4ZWI4ZTRwLTEsCisgICAgLTB4MS42NTg2NWIyY2IwOGEycC03CisgIH0sCisgIHsgLy8gRW50cnkgMjM0CisgICAgMHgxLmFjYzI1MWJlMzMwMjI4MDIxYmMzMTMwN2JjODFkYzE2cC0xLAorICAgIDB4MS42YTkzN2RhYWJjMjBlcDM3NQorICB9LAorICB7IC8vIEVudHJ5IDIzNQorICAgIDB4MS5hY2MyNTFiZTMzMDIyODAyMWJjMzEzMDdiYzgxZGMxNnAtMSwKKyAgICAtMHgxLjZhOTM3ZGFhYmMyMGVwMzc1CisgIH0sCisgIHsgLy8gRW50cnkgMjM2CisgICAgLTB4MS4xNGFlNzJlNmJhMjJlZjQ2MDg4NzVjNDEzNzhlYjA1MnAtNjEsCisgICAgMHgxLjZhYzViMjYyY2ExZmZwODQ5CisgIH0sCisgIHsgLy8gRW50cnkgMjM3CisgICAgLTB4MS4xNGFlNzJlNmJhMjJlZjQ2MDg4NzVjNDEzNzhlYjA1MnAtNjEsCisgICAgLTB4MS42YWM1YjI2MmNhMWZmcDg0OQorICB9LAorICB7IC8vIEVudHJ5IDIzOAorICAgIDB4MS5lMDYxOTk2MGExMWM2ODAxZTgwYWIwYzllMjVmODlkMHAtMiwKKyAgICAweDEuNmY3YmRlZjdiZGVmNHAzCisgIH0sCisgIHsgLy8gRW50cnkgMjM5CisgICAgMHgxLmUwNjE5OTYwYTExYzY4MDFlODBhYjBjOWUyNWY4OWQwcC0yLAorICAgIC0weDEuNmY3YmRlZjdiZGVmNHAzCisgIH0sCisgIHsgLy8gRW50cnkgMjQwCisgICAgMHgxLjhkMjNmOTc5MDFhMzA3ZmZmZDZjNTJhZGY4M2YwOTkzcC0xLAorICAgIDB4MS43MzljZTc1OWNlNzM4cDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI0MQorICAgIDB4MS44ZDIzZjk3OTAxYTMwN2ZmZmQ2YzUyYWRmODNmMDk5M3AtMSwKKyAgICAtMHgxLjczOWNlNzU5Y2U3MzhwMjAwCisgIH0sCisgIHsgLy8gRW50cnkgMjQyCisgICAgMHgxLmZmZmZmNzhhMTRiYTBmMzhhODRiNDhkY2RiNjNkNDRmcC0xLAorICAgIDB4MS43NDUwYzNmNDlkMGIycC0xMQorICB9LAorICB7IC8vIEVudHJ5IDI0MworICAgIDB4MS5mZmZmZjc4YTE0YmEwZjM4YTg0YjQ4ZGNkYjYzZDQ0ZnAtMSwKKyAgICAtMHgxLjc0NTBjM2Y0OWQwYjJwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjQ0CisgICAgMHgxLmQ2ZjFjNzI3ZmIyY2I3ZjdlOWNiZWUyZTE0MjQ2YzA4cC00LAorICAgIDB4MS43NDlmZTUzZjk2M2ZkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDUKKyAgICAweDEuZDZmMWM3MjdmYjJjYjdmN2U5Y2JlZTJlMTQyNDZjMDhwLTQsCisgICAgLTB4MS43NDlmZTUzZjk2M2ZkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAtMHgxLmYyODRiNTAyOGMxODQ3ZmZmZmZjOTUzMmZlODkyYWFkcC0xLAorICAgIDB4MS43NGFmNjcyNWM2MjA2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDcKKyAgICAtMHgxLmYyODRiNTAyOGMxODQ3ZmZmZmZjOTUzMmZlODkyYWFkcC0xLAorICAgIC0weDEuNzRhZjY3MjVjNjIwNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjQ4CisgICAgLTB4MS5mMzE2NWEwYjMwNmIxZmZjZjhkMTE5MDlmZmZiYTE2N3AtMSwKKyAgICAweDEuNzU1MGQyOGZmY2NjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjQ5CisgICAgLTB4MS5mMzE2NWEwYjMwNmIxZmZjZjhkMTE5MDlmZmZiYTE2N3AtMSwKKyAgICAtMHgxLjc1NTBkMjhmZmNjYzRwMQorICB9LAorICB7IC8vIEVudHJ5IDI1MAorICAgIDB4MS5kNjZkMjA3OGViZGViN2ZmZWRmOGE0OGUyNTA4NGMxOXAtMSwKKyAgICAweDEuNzc1ZTM5N2NkNmFhMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjUxCisgICAgMHgxLmQ2NmQyMDc4ZWJkZWI3ZmZlZGY4YTQ4ZTI1MDg0YzE5cC0xLAorICAgIC0weDEuNzc1ZTM5N2NkNmFhMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjUyCisgICAgMHgxLjdhZjlhMTMwODVmNTM4MmE4N2E1NDFhZTBiMmU1OTY1cC0xLAorICAgIDB4MS43OTkzMDJiZjdmMjkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgMHgxLjdhZjlhMTMwODVmNTM4MmE4N2E1NDFhZTBiMmU1OTY1cC0xLAorICAgIC0weDEuNzk5MzAyYmY3ZjI5MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI1NAorICAgIDB4MS5mZmRkMmZkYWMwYzI0ODNlN2IxMTZkNmQ0ODhlN2E0YnAtMSwKKyAgICAweDEuNzk5ZmZmZmZmZmZmZHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI1NQorICAgIDB4MS5mZmRkMmZkYWMwYzI0ODNlN2IxMTZkNmQ0ODhlN2E0YnAtMSwKKyAgICAtMHgxLjc5OWZmZmZmZmZmZmRwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTYKKyAgICAweDEuZmZmNzQ0ZjE4NWE3MzdmMjU2NzMyY2U4N2RiYWY3YTdwLTEsCisgICAgMHgxLjdhMzY5MmNhOTQ0OTBwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTcKKyAgICAweDEuZmZmNzQ0ZjE4NWE3MzdmMjU2NzMyY2U4N2RiYWY3YTdwLTEsCisgICAgLTB4MS43YTM2OTJjYTk0NDkwcC03CisgIH0sCisgIHsgLy8gRW50cnkgMjU4CisgICAgMHgxLjdhNmIzMjZiNjkwZmE4MzFlZTRkMGRkNzI3ODdmYmMzcC0xLAorICAgIDB4MS43YTY2YTYzOGFjNWI1cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjU5CisgICAgMHgxLjdhNmIzMjZiNjkwZmE4MzFlZTRkMGRkNzI3ODdmYmMzcC0xLAorICAgIC0weDEuN2E2NmE2MzhhYzViNXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2MAorICAgIDB4MS42NzFmZGI2NGZmYmVkN2U0OTUyYTlkOTY3OTQxZTdkYXAtNCwKKyAgICAweDEuN2JhNjU0NjJiNDlhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjYxCisgICAgMHgxLjY3MWZkYjY0ZmZiZWQ3ZTQ5NTJhOWQ5Njc5NDFlN2RhcC00LAorICAgIC0weDEuN2JhNjU0NjJiNDlhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjYyCisgICAgMHgxLmZmYTU1NDkwZjIwNmUzYjQzMjNhMDI0NzdiNDE0OWU4cC0xLAorICAgIDB4MS43Y2RmMzdjZGYzN2M5cDIzOQorICB9LAorICB7IC8vIEVudHJ5IDI2MworICAgIDB4MS5mZmE1NTQ5MGYyMDZlM2I0MzIzYTAyNDc3YjQxNDllOHAtMSwKKyAgICAtMHgxLjdjZGYzN2NkZjM3YzlwMjM5CisgIH0sCisgIHsgLy8gRW50cnkgMjY0CisgICAgMHgxLjRjNWI1OTcwYTNhNDg4MjMzMDA1NzQyYWY1ZTZhOTVlcC00LAorICAgIDB4MS43ZDU0MjU2NWY0NzJlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjUKKyAgICAweDEuNGM1YjU5NzBhM2E0ODgyMzMwMDU3NDJhZjVlNmE5NWVwLTQsCisgICAgLTB4MS43ZDU0MjU2NWY0NzJlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjYKKyAgICAweDEuNDc5YTU2NjdjNjNmNTdkYTI2YWRmMTgwYTdlYjJmZmJwLTQsCisgICAgMHgxLjdkYTA3NTE2NDkwNThwMAorICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIDB4MS40NzlhNTY2N2M2M2Y1N2RhMjZhZGYxODBhN2ViMmZmYnAtNCwKKyAgICAtMHgxLjdkYTA3NTE2NDkwNThwMAorICB9LAorICB7IC8vIEVudHJ5IDI2OAorICAgIDB4MS5mZmY3MTc1MTFkY2I1N2YzMmQzOGYyOWMwMTM3OWI5OHAtMSwKKyAgICAweDEuN2UwZGRjZGE2Y2MwZHAtNworICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIDB4MS5mZmY3MTc1MTFkY2I1N2YzMmQzOGYyOWMwMTM3OWI5OHAtMSwKKyAgICAtMHgxLjdlMGRkY2RhNmNjMGRwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzAKKyAgICAweDEuZmZmZmZmZmZmZjcwNzdlNzAwMDAwNmI0YzcwNjBjMzNwLTEsCisgICAgMHgxLjdmNnAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzEKKyAgICAweDEuZmZmZmZmZmZmZjcwNzdlNzAwMDAwNmI0YzcwNjBjMzNwLTEsCisgICAgLTB4MS43ZjZwLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMjcyCisgICAgLTB4MS5mZmY5ZTE1NTQ2OTgwMTcyMjA5MTdjM2ZiMzExODhkZHAtMSwKKyAgICAweDEuN2Y5MDExN2Q0NGM3NHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzMKKyAgICAtMHgxLmZmZjllMTU1NDY5ODAxNzIyMDkxN2MzZmIzMTE4OGRkcC0xLAorICAgIC0weDEuN2Y5MDExN2Q0NGM3NHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzQKKyAgICAweDEuZmZkYzAwNmJmZjdlOTg0YThkNTAzMWE3MTUyZDM2ZTVwLTEsCisgICAgMHgxLjdmZmZmZmZmZmVmN2FwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzUKKyAgICAweDEuZmZkYzAwNmJmZjdlOTg0YThkNTAzMWE3MTUyZDM2ZTVwLTEsCisgICAgLTB4MS43ZmZmZmZmZmZlZjdhcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjc2CisgICAgMHgxLmZmZGMwMDZiZmY3ZTc4NDc0ZDY2ZDdmMjVjM2FjMjc3cC0xLAorICAgIDB4MS43ZmZmZmZmZmZmYTI2cC02CisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgMHgxLmZmZGMwMDZiZmY3ZTc4NDc0ZDY2ZDdmMjVjM2FjMjc3cC0xLAorICAgIC0weDEuN2ZmZmZmZmZmZmEyNnAtNgorICB9LAorICB7IC8vIEVudHJ5IDI3OAorICAgIDB4MS5mZmRjMDA2YmZmN2U2ODM5YWRiYTJhOTExMDhkNTZhZnAtMSwKKyAgICAweDEuN2ZmZmZmZmZmZmY4MHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI3OQorICAgIDB4MS5mZmRjMDA2YmZmN2U2ODM5YWRiYTJhOTExMDhkNTZhZnAtMSwKKyAgICAtMHgxLjdmZmZmZmZmZmZmODBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAweDEuNzYwNzE4YWI0NDM5NzdmZGQ4ZjhmMjIyMWNhNGRiM2NwLTEsCisgICAgMHgxLjgwZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI4MQorICAgIDB4MS43NjA3MThhYjQ0Mzk3N2ZkZDhmOGYyMjIxY2E0ZGIzY3AtMSwKKyAgICAtMHgxLjgwZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmViMjlkMGJwLTEsCisgICAgMHgxLjgxYWUwZGZmYTNiMzNwOTU5CisgIH0sCisgIHsgLy8gRW50cnkgMjgzCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWIyOWQwYnAtMSwKKyAgICAtMHgxLjgxYWUwZGZmYTNiMzNwOTU5CisgIH0sCisgIHsgLy8gRW50cnkgMjg0CisgICAgLTB4MS5mYmRjNDgxMjViMzQ1NzRjZjFmOTE0MTllN2VkYjc1YnAtMSwKKyAgICAweDEuODFkNjEyMjg5YzVjZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjg1CisgICAgLTB4MS5mYmRjNDgxMjViMzQ1NzRjZjFmOTE0MTllN2VkYjc1YnAtMSwKKyAgICAtMHgxLjgxZDYxMjI4OWM1Y2ZwMQorICB9LAorICB7IC8vIEVudHJ5IDI4NgorICAgIDB4MS5mZjllMzk2NjUxY2M5N2U5MzViMmUwZWU3MzYwN2QxMnAtNSwKKyAgICAweDEuODIyMDE5MjI3MGEwZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjg3CisgICAgMHgxLmZmOWUzOTY2NTFjYzk3ZTkzNWIyZTBlZTczNjA3ZDEycC01LAorICAgIC0weDEuODIyMDE5MjI3MGEwZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjg4CisgICAgMHgxLmZlMmIyNmRkZGI1Yzg4MmYzMGE4ODVjMWIyOTFmOTQ1cC01LAorICAgIDB4MS44MjJiYjc4MGU5MTA0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODkKKyAgICAweDEuZmUyYjI2ZGRkYjVjODgyZjMwYTg4NWMxYjI5MWY5NDVwLTUsCisgICAgLTB4MS44MjJiYjc4MGU5MTA0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTAKKyAgICAweDEuZWI4N2NmZjdjOTExNTdhNzU1ODE4YzAxMjg0YjBlNTFwLTUsCisgICAgMHgxLjgyYzExOWM0YjhlNDlwMAorICB9LAorICB7IC8vIEVudHJ5IDI5MQorICAgIDB4MS5lYjg3Y2ZmN2M5MTE1N2E3NTU4MThjMDEyODRiMGU1MXAtNSwKKyAgICAtMHgxLjgyYzExOWM0YjhlNDlwMAorICB9LAorICB7IC8vIEVudHJ5IDI5MgorICAgIDB4MS5lYjg3Y2ZmN2E2MmI3N2I1N2E2NmFjMjc1YTMxMDRjOHAtNSwKKyAgICAweDEuODJjMTE5YzRiOWZjNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjkzCisgICAgMHgxLmViODdjZmY3YTYyYjc3YjU3YTY2YWMyNzVhMzEwNGM4cC01LAorICAgIC0weDEuODJjMTE5YzRiOWZjNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjk0CisgICAgMHgxLmViODdjZmY3OTVhYjE3YTgwNzg2NGQ4ZmIwY2E0M2NhcC01LAorICAgIDB4MS44MmMxMTljNGJhODA4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTUKKyAgICAweDEuZWI4N2NmZjc5NWFiMTdhODA3ODY0ZDhmYjBjYTQzY2FwLTUsCisgICAgLTB4MS44MmMxMTljNGJhODA4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTYKKyAgICAweDEuZGUxZDE3YWIwZDZhNDgzNjc1MjMxOTNkNjg1NjhjMWJwLTUsCisgICAgMHgxLjgzMmM5ZmM3NjUyNzBwMAorICB9LAorICB7IC8vIEVudHJ5IDI5NworICAgIDB4MS5kZTFkMTdhYjBkNmE0ODM2NzUyMzE5M2Q2ODU2OGMxYnAtNSwKKyAgICAtMHgxLjgzMmM5ZmM3NjUyNzBwMAorICB9LAorICB7IC8vIEVudHJ5IDI5OAorICAgIDB4MS5kYzg2ZTdiZWMwYzQ0ODQ4Y2ZjMzliN2YxYjgyMDRhY3AtNSwKKyAgICAweDEuODMzOTU2Y2U3ZDFmOXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjk5CisgICAgMHgxLmRjODZlN2JlYzBjNDQ4NDhjZmMzOWI3ZjFiODIwNGFjcC01LAorICAgIC0weDEuODMzOTU2Y2U3ZDFmOXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzAwCisgICAgMHgxLmRiMDNjYmI5NDJhN2E4NDk3NGU5MDRlY2M4OTZhNWVlcC01LAorICAgIDB4MS44MzQ1NzRlYjFjMDk5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAweDEuZGIwM2NiYjk0MmE3YTg0OTc0ZTkwNGVjYzg5NmE1ZWVwLTUsCisgICAgLTB4MS44MzQ1NzRlYjFjMDk5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDIKKyAgICAweDEuY2U0MzE3MTBkMTUwNzdiMWU4MTcwYTUzMmI2OGFiZGVwLTUsCisgICAgMHgxLjgzYWJhNTY4OGUxM2VwMAorICB9LAorICB7IC8vIEVudHJ5IDMwMworICAgIDB4MS5jZTQzMTcxMGQxNTA3N2IxZTgxNzBhNTMyYjY4YWJkZXAtNSwKKyAgICAtMHgxLjgzYWJhNTY4OGUxM2VwMAorICB9LAorICB7IC8vIEVudHJ5IDMwNAorICAgIDB4MS5jZDQ2YjNhNzdmNmRkN2FiMGQzMTI1NDZhYmE3YzBhZnAtNSwKKyAgICAweDEuODNiMzhiYmFmZDc1YnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzA1CisgICAgMHgxLmNkNDZiM2E3N2Y2ZGQ3YWIwZDMxMjU0NmFiYTdjMGFmcC01LAorICAgIC0weDEuODNiMzhiYmFmZDc1YnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzA2CisgICAgLTB4MS5mZjI5YmM2NjZiZWU2ZWE0NGQ0ZGIwMDBlNWYxNzNiZnAtMSwKKyAgICAweDEuODZhMDE3Y2IxYzMxY3AxNgorICB9LAorICB7IC8vIEVudHJ5IDMwNworICAgIC0weDEuZmYyOWJjNjY2YmVlNmVhNDRkNGRiMDAwZTVmMTczYmZwLTEsCisgICAgLTB4MS44NmEwMTdjYjFjMzFjcDE2CisgIH0sCisgIHsgLy8gRW50cnkgMzA4CisgICAgLTB4MS43OTY4OTE2ZTRjNjQ2MzBlOGUzYWU2MDI3NmJhMmQyN3AtMiwKKyAgICAweDEuODcyMDU4OHAzOTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDkKKyAgICAtMHgxLjc5Njg5MTZlNGM2NDYzMGU4ZTNhZTYwMjc2YmEyZDI3cC0yLAorICAgIC0weDEuODcyMDU4OHAzOTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTAKKyAgICAweDEuZmI5N2M3ZTQ1MjkxN2Y1OTg5MGRmYjQ3ZTdjOWI1ZTNwLTEsCisgICAgMHgxLjg4YTIyODhhMjI4ODhwOQorICB9LAorICB7IC8vIEVudHJ5IDMxMQorICAgIDB4MS5mYjk3YzdlNDUyOTE3ZjU5ODkwZGZiNDdlN2M5YjVlM3AtMSwKKyAgICAtMHgxLjg4YTIyODhhMjI4ODhwOQorICB9LAorICB7IC8vIEVudHJ5IDMxMgorICAgIC0weDEuYWU0NGE1ZjAxYmY2MzMwMTVlNWFhY2NjYWI0YTdmM2RwLTEsCisgICAgMHgxLjhjZjAxMzk5MWMzMDhwMTAwMAorICB9LAorICB7IC8vIEVudHJ5IDMxMworICAgIC0weDEuYWU0NGE1ZjAxYmY2MzMwMTVlNWFhY2NjYWI0YTdmM2RwLTEsCisgICAgLTB4MS44Y2YwMTM5OTFjMzA4cDEwMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTQKKyAgICAweDEuZDk2ZTgyZjcxYTlkYzdmZDg2ZjU3NDgwZTc1NDkxZTNwLTEsCisgICAgMHgxLjlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTUKKyAgICAweDEuZDk2ZTgyZjcxYTlkYzdmZDg2ZjU3NDgwZTc1NDkxZTNwLTEsCisgICAgLTB4MS45cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzE2CisgICAgMHgxLjBmZDlkNWMwOTNkZjRmNTdmYzQ5NDYzZTJmM2YzM2U2cC03LAorICAgIDB4MS45cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTcKKyAgICAweDEuMGZkOWQ1YzA5M2RmNGY1N2ZjNDk0NjNlMmYzZjMzZTZwLTcsCisgICAgLTB4MS45cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTgKKyAgICAweDEuMGZkOWQ1YzA1ZTVmYzgwMWEwZjVjYmZhMzM3NzdhZTRwLTcsCisgICAgMHgxLjkwMDAwMDAwMDA2YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDMxOQorICAgIDB4MS4wZmQ5ZDVjMDVlNWZjODAxYTBmNWNiZmEzMzc3N2FlNHAtNywKKyAgICAtMHgxLjkwMDAwMDAwMDA2YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDMyMAorICAgIDB4MS5iYzhiZTcyNTQxN2Q4ODAwMDAwY2FkYTQyZWVlYTA0ZXAtMSwKKyAgICAweDEuOTAwYzIwNmQ0NDE2MnA2CisgIH0sCisgIHsgLy8gRW50cnkgMzIxCisgICAgMHgxLmJjOGJlNzI1NDE3ZDg4MDAwMDBjYWRhNDJlZWVhMDRlcC0xLAorICAgIC0weDEuOTAwYzIwNmQ0NDE2MnA2CisgIH0sCisgIHsgLy8gRW50cnkgMzIyCisgICAgMHgxLmZmZmZmZmZmZjYzYjY3ZTQ5NzJkODZhMmY5ZDgyMDlicC0xLAorICAgIDB4MS45MDBjMmFmN2JhZWYzcC0xOQorICB9LAorICB7IC8vIEVudHJ5IDMyMworICAgIDB4MS5mZmZmZmZmZmY2M2I2N2U0OTcyZDg2YTJmOWQ4MjA5YnAtMSwKKyAgICAtMHgxLjkwMGMyYWY3YmFlZjNwLTE5CisgIH0sCisgIHsgLy8gRW50cnkgMzI0CisgICAgMHgxLmJkNDY0YzkzNTJkMTA3ZmZmZmZmOGRiOWUwZGE3MWMwcC0xLAorICAgIDB4MS45MDBmMTFiZDg5NTVkcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAweDEuYmQ0NjRjOTM1MmQxMDdmZmZmZmY4ZGI5ZTBkYTcxYzBwLTEsCisgICAgLTB4MS45MDBmMTFiZDg5NTVkcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjYKKyAgICAweDEuZmZmZmZkYTg1Y2RkMGQ0MzFlMDZmOWFhNzRiYzhjZTBwLTEsCisgICAgMHgxLjkxMGIzNWMzMjUzZDRwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMzI3CisgICAgMHgxLmZmZmZmZGE4NWNkZDBkNDMxZTA2ZjlhYTc0YmM4Y2UwcC0xLAorICAgIC0weDEuOTEwYjM1YzMyNTNkNHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjgKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ0MTlmYThwLTU0LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjkKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ0MTlmYThwLTU0LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzMwCisgICAgLTB4MS4yYWVlZjRiOWVhMWFlNGU2NGM3MWZjY2YxZmQwNmY0MHAtMTgsCisgICAgMHgxLjkyMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzMxCisgICAgLTB4MS4yYWVlZjRiOWVhMWFlNGU2NGM3MWZjY2YxZmQwNmY0MHAtMTgsCisgICAgLTB4MS45MjJwMAorICB9LAorICB7IC8vIEVudHJ5IDMzMgorICAgIC0weDEuZmZmZmZmZmZkOTA0ODQ3Nzk4YzdhY2Q0NmFkMTgzY2FwLTE4LAorICAgIDB4MS45MjIwMzU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzMKKyAgICAtMHgxLmZmZmZmZmZmZDkwNDg0Nzc5OGM3YWNkNDZhZDE4M2NhcC0xOCwKKyAgICAtMHgxLjkyMjAzNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDMzNAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmYyYWM4YzNkYTcyY2JwLTEsCisgICAgMHgxLjkyNTFmOTNhZWI1OWRwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmMmFjOGMzZGE3MmNicC0xLAorICAgIC0weDEuOTI1MWY5M2FlYjU5ZHAxMgorICB9LAorICB7IC8vIEVudHJ5IDMzNgorICAgIDB4MS5mZmI4YzRkMWY3OGE4N2ZmZmZmYjIzZDE3MWJkNTRkMHAtMSwKKyAgICAweDEuOTQzYmUyMjFkOTA5YXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzM3CisgICAgMHgxLmZmYjhjNGQxZjc4YTg3ZmZmZmZiMjNkMTcxYmQ1NGQwcC0xLAorICAgIC0weDEuOTQzYmUyMjFkOTA5YXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzM4CisgICAgMHgxLmZmZjYwMTFmZGRkYWI3ZjI1YzgyZTUzODRkNDZjYzY5cC0xLAorICAgIDB4MS45NGFmNjk5MzAyODc1cC03CisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgMHgxLmZmZjYwMTFmZGRkYWI3ZjI1YzgyZTUzODRkNDZjYzY5cC0xLAorICAgIC0weDEuOTRhZjY5OTMwMjg3NXAtNworICB9LAorICB7IC8vIEVudHJ5IDM0MAorICAgIDB4MS5kNzk1NGU3YTNlZTk5ODAwMDA5OTQ3MDYwNDMyOWI2OHAtMSwKKyAgICAweDEuOTk5OTk5YWI3YjBlZHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM0MQorICAgIDB4MS5kNzk1NGU3YTNlZTk5ODAwMDA5OTQ3MDYwNDMyOWI2OHAtMSwKKyAgICAtMHgxLjk5OTk5OWFiN2IwZWRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDIKKyAgICAweDEuZDc5NTRlNzZjOGUzMGZmZmZmNWE5YmY0NTVhMDY0MTBwLTEsCisgICAgMHgxLjk5OTk5OWJkNDE5MGJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDMKKyAgICAweDEuZDc5NTRlNzZjOGUzMGZmZmZmNWE5YmY0NTVhMDY0MTBwLTEsCisgICAgLTB4MS45OTk5OTliZDQxOTBicC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzQ0CisgICAgMHgxLmZhMjNjZmI4MjAyMjQ0MGViOTcyYzdlMDgzOTMzZDIwcC0xLAorICAgIDB4MS45YmQwZjE5NDc5YTI0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDUKKyAgICAweDEuZmEyM2NmYjgyMDIyNDQwZWI5NzJjN2UwODM5MzNkMjBwLTEsCisgICAgLTB4MS45YmQwZjE5NDc5YTI0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDYKKyAgICAtMHgxLjZhMDllNjY3ZjNhZjA3ZjJmNDY3NmI1ZjZmMjY4YzgxcC0xLAorICAgIDB4MS45YzU1ODM1ZTdlODNlcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDcKKyAgICAtMHgxLjZhMDllNjY3ZjNhZjA3ZjJmNDY3NmI1ZjZmMjY4YzgxcC0xLAorICAgIC0weDEuOWM1NTgzNWU3ZTgzZXA4CisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgMHgxLmZmZjU5YzEyNTU4MDk3ZjI4NThmNGExMzI2ZjJkZGY0cC0xLAorICAgIDB4MS45Yzk5NDJiMTQ0NDhkcC03CisgIH0sCisgIHsgLy8gRW50cnkgMzQ5CisgICAgMHgxLmZmZjU5YzEyNTU4MDk3ZjI4NThmNGExMzI2ZjJkZGY0cC0xLAorICAgIC0weDEuOWM5OTQyYjE0NDQ4ZHAtNworICB9LAorICB7IC8vIEVudHJ5IDM1MAorICAgIDB4MS5mZmVjZTVjYWI0Y2E1NjUyZWEyZmM3Y2NjZTg4MzMwNHAtMSwKKyAgICAweDEuOWQzZDkyNDg1ZTJiNXA1MjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTEKKyAgICAweDEuZmZlY2U1Y2FiNGNhNTY1MmVhMmZjN2NjY2U4ODMzMDRwLTEsCisgICAgLTB4MS45ZDNkOTI0ODVlMmI1cDUyMworICB9LAorICB7IC8vIEVudHJ5IDM1MgorICAgIC0weDEuZmY1NTMwMWQzYTc4MGQxOWMyOGMyMmM4MmMxZjUzODNwLTUsCisgICAgMHgxLmEwZDA2ODM0MWEwODBwMTAwMAorICB9LAorICB7IC8vIEVudHJ5IDM1MworICAgIC0weDEuZmY1NTMwMWQzYTc4MGQxOWMyOGMyMmM4MmMxZjUzODNwLTUsCisgICAgLTB4MS5hMGQwNjgzNDFhMDgwcDEwMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTQKKyAgICAweDEuNWE1NjE1YWNkMGRjMDliZjMyZTkwMzE0OTYzNGY5OTlwLTEsCisgICAgMHgxLmE3ZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1NQorICAgIDB4MS41YTU2MTVhY2QwZGMwOWJmMzJlOTAzMTQ5NjM0Zjk5OXAtMSwKKyAgICAtMHgxLmE3ZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1NgorICAgIDB4MS43NjZhZDI3YTFkZTRmYjFhNWI2NjcyMTZiYmU2YmY2OHAtMTQsCisgICAgMHgxLmE4NTgzNDM4NjM5NjVwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMzU3CisgICAgMHgxLjc2NmFkMjdhMWRlNGZiMWE1YjY2NzIxNmJiZTZiZjY4cC0xNCwKKyAgICAtMHgxLmE4NTgzNDM4NjM5NjVwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMzU4CisgICAgMHgxLjZiZDRkNWJlNzI0OTMyNWQ4NjgwNjA2ZTZiOWVhNjI1cC0xLAorICAgIDB4MS5hYjE5MDYzM2Q4OGVhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTkKKyAgICAweDEuNmJkNGQ1YmU3MjQ5MzI1ZDg2ODA2MDZlNmI5ZWE2MjVwLTEsCisgICAgLTB4MS5hYjE5MDYzM2Q4OGVhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjAKKyAgICAweDEuZmZmZmZmZmZmZjRhNTdlNjRkYTg3YTVhZjQ3Y2ZhMThwLTEsCisgICAgMHgxLmFmNGJkMmY0YmQyZjBwLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMzYxCisgICAgMHgxLmZmZmZmZmZmZmY0YTU3ZTY0ZGE4N2E1YWY0N2NmYTE4cC0xLAorICAgIC0weDEuYWY0YmQyZjRiZDJmMHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjIKKyAgICAweDEuN2ZmMjkzNGFkMjlhNzQyODhiODg2MTI0ZmVhZDU4NDJwLTEsCisgICAgMHgxLmFmYTcwMzAwYWVlNjBwNzIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjMKKyAgICAweDEuN2ZmMjkzNGFkMjlhNzQyODhiODg2MTI0ZmVhZDU4NDJwLTEsCisgICAgLTB4MS5hZmE3MDMwMGFlZTYwcDcyCisgIH0sCisgIHsgLy8gRW50cnkgMzY0CisgICAgMHgxLmZmODY2YWViZGNlMGE3ZmZmZmZiNjA3NGQ1MTk5ODk2cC0xLAorICAgIDB4MS5iNWFiNDI3Y2ZmYjRjcDk0CisgIH0sCisgIHsgLy8gRW50cnkgMzY1CisgICAgMHgxLmZmODY2YWViZGNlMGE3ZmZmZmZiNjA3NGQ1MTk5ODk2cC0xLAorICAgIC0weDEuYjVhYjQyN2NmZmI0Y3A5NAorICB9LAorICB7IC8vIEVudHJ5IDM2NgorICAgIC0weDEuZjU0ZjUyMjdhNGU4M2ZiZjkzOWIyZTk2MTc4ZjEyMWRwLTYwLAorICAgIDB4MS5iOTUxZjE1NzJlYmE1cDIzCisgIH0sCisgIHsgLy8gRW50cnkgMzY3CisgICAgLTB4MS5mNTRmNTIyN2E0ZTgzZmJmOTM5YjJlOTYxNzhmMTIxZHAtNjAsCisgICAgLTB4MS5iOTUxZjE1NzJlYmE1cDIzCisgIH0sCisgIHsgLy8gRW50cnkgMzY4CisgICAgMHgxLmZmZmQwNmQzNTU3OWM3ZmUyOTVkYWQxN2VmYmJiZTk3cC0xLAorICAgIDB4MS5iOTZlNWI5NmU1YjkxcC04CisgIH0sCisgIHsgLy8gRW50cnkgMzY5CisgICAgMHgxLmZmZmQwNmQzNTU3OWM3ZmUyOTVkYWQxN2VmYmJiZTk3cC0xLAorICAgIC0weDEuYjk2ZTViOTZlNWI5MXAtOAorICB9LAorICB7IC8vIEVudHJ5IDM3MAorICAgIC0weDEuN2M0MTI4ZTJhZmY0YjJiNzhlMTQ3NjAxZmE2NThhZjVwLTEsCisgICAgMHgxLmJhM2IxODM5NWQxN2JwOAorICB9LAorICB7IC8vIEVudHJ5IDM3MQorICAgIC0weDEuN2M0MTI4ZTJhZmY0YjJiNzhlMTQ3NjAxZmE2NThhZjVwLTEsCisgICAgLTB4MS5iYTNiMTgzOTVkMTdicDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZmFmZjlkcC0xLAorICAgIDB4MS5iYWI2MmVkNjU1MDE5cDk3MAorICB9LAorICB7IC8vIEVudHJ5IDM3MworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmYWZmOWRwLTEsCisgICAgLTB4MS5iYWI2MmVkNjU1MDE5cDk3MAorICB9LAorICB7IC8vIEVudHJ5IDM3NAorICAgIDB4MS5mZmZmZmYzZTUzNDQ2N2ZmZmZmMzdlNTA5YjdiNzkyZXAtMSwKKyAgICAweDEuYmQ1NWFhNDExYWI0NnAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzUKKyAgICAweDEuZmZmZmZmM2U1MzQ0NjdmZmZmZjM3ZTUwOWI3Yjc5MmVwLTEsCisgICAgLTB4MS5iZDU1YWE0MTFhYjQ2cC0xMworICB9LAorICB7IC8vIEVudHJ5IDM3NgorICAgIC0weDEuN2ZkYjA3YjlmNzdlMDdmZmZmNzIwN2M0NjI4ZDNmNjhwLTEsCisgICAgMHgxLmJkNjE2ZDRmZTk1Y2RwMzYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzcKKyAgICAtMHgxLjdmZGIwN2I5Zjc3ZTA3ZmZmZjcyMDdjNDYyOGQzZjY4cC0xLAorICAgIC0weDEuYmQ2MTZkNGZlOTVjZHAzNgorICB9LAorICB7IC8vIEVudHJ5IDM3OAorICAgIDB4MS5mZmNmNGRhNzYyMjJjODg5NzE4MjM5NTIzMzQxZjRiNXAtMSwKKyAgICAweDEuYmVhcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzc5CisgICAgMHgxLmZmY2Y0ZGE3NjIyMmM4ODk3MTgyMzk1MjMzNDFmNGI1cC0xLAorICAgIC0weDEuYmVhcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzgwCisgICAgLTB4MS5kZGVlMTMzNTdlYzZmN2ZjYzk1MDIzOTlmY2NkYzJmMHAtMSwKKyAgICAweDEuYzExNTE2YWY1ODVhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzgxCisgICAgLTB4MS5kZGVlMTMzNTdlYzZmN2ZjYzk1MDIzOTlmY2NkYzJmMHAtMSwKKyAgICAtMHgxLmMxMTUxNmFmNTg1YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDM4MgorICAgIDB4MS41OGNjY2VjMDU5ZGExN2QzZjQ0OGE4YjJiNmU3YzBlOHAtMSwKKyAgICAweDEuYzc1ZTU0ZGU0YzA2ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzgzCisgICAgMHgxLjU4Y2NjZWMwNTlkYTE3ZDNmNDQ4YThiMmI2ZTdjMGU4cC0xLAorICAgIC0weDEuYzc1ZTU0ZGU0YzA2ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzg0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM4NjYzZXAtMSwKKyAgICAweDEuY2I0NGU4NmJjMTkyYnA2NDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzg2NjNlcC0xLAorICAgIC0weDEuY2I0NGU4NmJjMTkyYnA2NDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYyMTk4ZjlwLTEsCisgICAgMHgxLmNiNDRlODZiYzE5MmJwNjQ5CisgIH0sCisgIHsgLy8gRW50cnkgMzg3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMjE5OGY5cC0xLAorICAgIC0weDEuY2I0NGU4NmJjMTkyYnA2NDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODgKKyAgICAtMHgxLmNhMjgxZDdmZTQ0YjA3ZmZmZmQyYjdkNDZhYjVkMzYxcC0xLAorICAgIDB4MS5jZDVhNmY4NzYyYWZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODkKKyAgICAtMHgxLmNhMjgxZDdmZTQ0YjA3ZmZmZmQyYjdkNDZhYjVkMzYxcC0xLAorICAgIC0weDEuY2Q1YTZmODc2MmFmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMzkwCisgICAgMHgxLmU4MGFkNGZlNTRjNzFkNGU2MDRlZGU0NzRjY2EwYjE5cC01LAorICAgIDB4MS5kMGNiOTVmMDJhZDc3cDQ2NAorICB9LAorICB7IC8vIEVudHJ5IDM5MQorICAgIDB4MS5lODBhZDRmZTU0YzcxZDRlNjA0ZWRlNDc0Y2NhMGIxOXAtNSwKKyAgICAtMHgxLmQwY2I5NWYwMmFkNzdwNDY0CisgIH0sCisgIHsgLy8gRW50cnkgMzkyCisgICAgMHgxLjBkZjhlYjQwOWVmZTM3ZmZmZmY5MjViNWRlMmM4MGI2cC0xLAorICAgIDB4MS5kMzFiZDYwNDkwM2EwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTMKKyAgICAweDEuMGRmOGViNDA5ZWZlMzdmZmZmZjkyNWI1ZGUyYzgwYjZwLTEsCisgICAgLTB4MS5kMzFiZDYwNDkwM2EwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTQKKyAgICAweDEuZmYyYWU5NjhlZmU3MGVhNDEyNjg0OWMzODMyYzljYmRwLTEsCisgICAgMHgxLmQzMmY0NjEwMTgwZjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTUKKyAgICAweDEuZmYyYWU5NjhlZmU3MGVhNDEyNjg0OWMzODMyYzljYmRwLTEsCisgICAgLTB4MS5kMzJmNDYxMDE4MGY2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMzk2CisgICAgLTB4MS5jZWMzMDdhNjc0ZDNlZDJmOGRmNDdjZjM5NGFhODhlYXAtMywKKyAgICAweDEuZDk2ZTA1OHA0ODgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTcKKyAgICAtMHgxLmNlYzMwN2E2NzRkM2VkMmY4ZGY0N2NmMzk0YWE4OGVhcC0zLAorICAgIC0weDEuZDk2ZTA1OHA0ODgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTgKKyAgICAtMHgxLmFjOGRiZjljZGM5NTQ4MzU3NzU2MGIxODE0ZWE4ODk1cC01LAorICAgIDB4MS5kYjA4MDNjMzkyYjRjcDE1CisgIH0sCisgIHsgLy8gRW50cnkgMzk5CisgICAgLTB4MS5hYzhkYmY5Y2RjOTU0ODM1Nzc1NjBiMTgxNGVhODg5NXAtNSwKKyAgICAtMHgxLmRiMDgwM2MzOTJiNGNwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDAKKyAgICAtMHgxLmFjOTQ4NzBjYTYzMTY4NGJkMTBiNjU4YjgwY2ZjZDQycC01LAorICAgIDB4MS5kYjA4MDNjM2ZmNTFkcDE1CisgIH0sCisgIHsgLy8gRW50cnkgNDAxCisgICAgLTB4MS5hYzk0ODcwY2E2MzE2ODRiZDEwYjY1OGI4MGNmY2Q0MnAtNSwKKyAgICAtMHgxLmRiMDgwM2MzZmY1MWRwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDIKKyAgICAweDEuZmYyMjkwNzNmZDhiNWU5MWQ2MGRkMDk1Y2ZkZTU5NjdwLTEsCisgICAgMHgxLmRjNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQwMworICAgIDB4MS5mZjIyOTA3M2ZkOGI1ZTkxZDYwZGQwOTVjZmRlNTk2N3AtMSwKKyAgICAtMHgxLmRjNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQwNAorICAgIDB4MS5mZjIxZTVmOTc1ZmZmZTgzYzJhZTFjNTVhODg1ZjEyZnAtMSwKKyAgICAweDEuZGNmNzNkY2Y3M2RjY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDQwNQorICAgIDB4MS5mZjIxZTVmOTc1ZmZmZTgzYzJhZTFjNTVhODg1ZjEyZnAtMSwKKyAgICAtMHgxLmRjZjczZGNmNzNkY2NwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDYKKyAgICAweDEuMmYwMTEzMjY0MjBlNTAwMjE3MmRiMjQ1ZmQ5MDYzZTJwLTEsCisgICAgMHgxLmRmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDcKKyAgICAweDEuMmYwMTEzMjY0MjBlNTAwMjE3MmRiMjQ1ZmQ5MDYzZTJwLTEsCisgICAgLTB4MS5kZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDA4CisgICAgMHgxLmY3MmM4ZTE2ZGJjNzhiMjZhZmJmMzQ2MTg1ZGNjYjQ4cC0xLAorICAgIDB4MS5lMTIzNjkxYTdjNGJlcDI2CisgIH0sCisgIHsgLy8gRW50cnkgNDA5CisgICAgMHgxLmY3MmM4ZTE2ZGJjNzhiMjZhZmJmMzQ2MTg1ZGNjYjQ4cC0xLAorICAgIC0weDEuZTEyMzY5MWE3YzRiZXAyNgorICB9LAorICB7IC8vIEVudHJ5IDQxMAorICAgIC0weDEuNGIwYzZiYjYyM2Y1N2ZmZmZmNWU0NTgyMDNkZWVmMzNwLTIsCisgICAgMHgxLmU2NjY2NjZmOWNmNDlwMAorICB9LAorICB7IC8vIEVudHJ5IDQxMQorICAgIC0weDEuNGIwYzZiYjYyM2Y1N2ZmZmZmNWU0NTgyMDNkZWVmMzNwLTIsCisgICAgLTB4MS5lNjY2NjY2ZjljZjQ5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTIKKyAgICAweDEuZmQ3NGI1NTg3NTg4NDgxODg0YTkyZTgzNzQ3ZjVjNGVwLTEsCisgICAgMHgxLmU4M2FjY2ZjNTBiNzBwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgNDEzCisgICAgMHgxLmZkNzRiNTU4NzU4ODQ4MTg4NGE5MmU4Mzc0N2Y1YzRlcC0xLAorICAgIC0weDEuZTgzYWNjZmM1MGI3MHA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTQKKyAgICAweDEuZmZmMTY5YjZhYjdkMTdmNDNkNTlmNmNmMDg1YWNjYjBwLTEsCisgICAgMHgxLmU4ZXAtNworICB9LAorICB7IC8vIEVudHJ5IDQxNQorICAgIDB4MS5mZmYxNjliNmFiN2QxN2Y0M2Q1OWY2Y2YwODVhY2NiMHAtMSwKKyAgICAtMHgxLmU4ZXAtNworICB9LAorICB7IC8vIEVudHJ5IDQxNgorICAgIDB4MS43ZDM5YzlmMWIwYjNjMDAyN2E1ZmM5YTc2ZmFlZTgzZHAtMSwKKyAgICAweDEuZWFmNWVhNTMxNzQ0MnA0CisgIH0sCisgIHsgLy8gRW50cnkgNDE3CisgICAgMHgxLjdkMzljOWYxYjBiM2MwMDI3YTVmYzlhNzZmYWVlODNkcC0xLAorICAgIC0weDEuZWFmNWVhNTMxNzQ0MnA0CisgIH0sCisgIHsgLy8gRW50cnkgNDE4CisgICAgMHgxLjdmMTNhZjcwODFhNjc0MTY2MDQ2OWZkNjAyNTVmZTQ5cC0xLAorICAgIDB4MS5lYjBjMmIwMGIxYjgzcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTkKKyAgICAweDEuN2YxM2FmNzA4MWE2NzQxNjYwNDY5ZmQ2MDI1NWZlNDlwLTEsCisgICAgLTB4MS5lYjBjMmIwMGIxYjgzcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjAKKyAgICAtMHgxLjdhZDdiODhhMWZlMGY4MmI2ZjI0OWM3YzU2ZGQ4YjVhcC0xLAorICAgIDB4MS5lYmM2YjU1NTMxMWM0cDE1CisgIH0sCisgIHsgLy8gRW50cnkgNDIxCisgICAgLTB4MS43YWQ3Yjg4YTFmZTBmODJiNmYyNDljN2M1NmRkOGI1YXAtMSwKKyAgICAtMHgxLmViYzZiNTU1MzExYzRwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjIKKyAgICAweDEuYjA2YjJiNThhMmEyM2M5OGIxMjg1MzQxNWI1YzgzYTFwLTUsCisgICAgMHgxLmVmN2JkZWY3YmRlZjJwMjM5CisgIH0sCisgIHsgLy8gRW50cnkgNDIzCisgICAgMHgxLmIwNmIyYjU4YTJhMjNjOThiMTI4NTM0MTViNWM4M2ExcC01LAorICAgIC0weDEuZWY3YmRlZjdiZGVmMnAyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjQKKyAgICAweDEuZmU2ZGVkNTMxNzJhNjg3Njc5MGQzYWFiODNhNjU2ZjRwLTEsCisgICAgMHgxLmVmYmJlZWZiYmVlZjhwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjUKKyAgICAweDEuZmU2ZGVkNTMxNzJhNjg3Njc5MGQzYWFiODNhNjU2ZjRwLTEsCisgICAgLTB4MS5lZmJiZWVmYmJlZWY4cDE1CisgIH0sCisgIHsgLy8gRW50cnkgNDI2CisgICAgLTB4MS5mZTJiY2I4N2E3ZTE1OGNmZmEyZmU4ZDMwNmNjNzU1NXAtMSwKKyAgICAweDEuZjA3YzFmMDdjMWVmN3AyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjcKKyAgICAtMHgxLmZlMmJjYjg3YTdlMTU4Y2ZmYTJmZThkMzA2Y2M3NTU1cC0xLAorICAgIC0weDEuZjA3YzFmMDdjMWVmN3AyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjgKKyAgICAtMHgxLjc5ZDA4ZDZiM2E4ODI4MmUwYTBkYTIzNTA0NjRkMGFicC0xLAorICAgIDB4MS5mMGYyYjVlMDYwYjI5cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjkKKyAgICAtMHgxLjc5ZDA4ZDZiM2E4ODI4MmUwYTBkYTIzNTA0NjRkMGFicC0xLAorICAgIC0weDEuZjBmMmI1ZTA2MGIyOXAxCisgIH0sCisgIHsgLy8gRW50cnkgNDMwCisgICAgMHgxLmYwZDExZDMyMTE3OGQ3ZmYxNWRhNDg5OTBkNTk4M2MycC0xLAorICAgIDB4MS5mNDBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzEKKyAgICAweDEuZjBkMTFkMzIxMTc4ZDdmZjE1ZGE0ODk5MGQ1OTgzYzJwLTEsCisgICAgLTB4MS5mNDBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzIKKyAgICAweDEuZTNmZjViMTVmNzIzZDdmN2Y3ZjViYjBkYmNlNTRkMDFwLTQsCisgICAgMHgxLmY0M2Q0OWY5NDdlODdwOQorICB9LAorICB7IC8vIEVudHJ5IDQzMworICAgIDB4MS5lM2ZmNWIxNWY3MjNkN2Y3ZjdmNWJiMGRiY2U1NGQwMXAtNCwKKyAgICAtMHgxLmY0M2Q0OWY5NDdlODdwOQorICB9LAorICB7IC8vIEVudHJ5IDQzNAorICAgIC0weDEuNjYzNmM5ZjZhODdhOTdmMWNiZGY3MDhhMmYxYWQ5YmFwLTEsCisgICAgMHgxLmY3ZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDQzNQorICAgIC0weDEuNjYzNmM5ZjZhODdhOTdmMWNiZGY3MDhhMmYxYWQ5YmFwLTEsCisgICAgLTB4MS5mN2ZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzYKKyAgICAweDEuZmZjMWJlMzMwOTI4NTdmZjI2MjIwZjk5ODE2MzViYzdwLTEsCisgICAgMHgxLmY4ZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzcKKyAgICAweDEuZmZjMWJlMzMwOTI4NTdmZjI2MjIwZjk5ODE2MzViYzdwLTEsCisgICAgLTB4MS5mOGZmZmZmZmZmZmZmcC02CisgIH0sCisgIHsgLy8gRW50cnkgNDM4CisgICAgMHgxLmZmYzFiZTMzMDkyODU3ZmIzNDRhZmZkZDkzZDA0M2E3cC0xLAorICAgIDB4MS5mOTBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzkKKyAgICAweDEuZmZjMWJlMzMwOTI4NTdmYjM0NGFmZmRkOTNkMDQzYTdwLTEsCisgICAgLTB4MS5mOTBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDAKKyAgICAtMHgxLmZmZmZmZmZjYWIwZDU4MjIwNjY5ZGNmYTQyMWNjZmE2cC0xLAorICAgIDB4MS5mYTAyMzY1MjNjZTU0cDM0NAorICB9LAorICB7IC8vIEVudHJ5IDQ0MQorICAgIC0weDEuZmZmZmZmZmNhYjBkNTgyMjA2NjlkY2ZhNDIxY2NmYTZwLTEsCisgICAgLTB4MS5mYTAyMzY1MjNjZTU0cDM0NAorICB9LAorICB7IC8vIEVudHJ5IDQ0MgorICAgIDB4MS5mYzBkOThhY2UyMzA4ODAwMDAwMjEyNzg4YTc5NGVhY3AtMSwKKyAgICAweDEuZmNlYWI1NGQzN2RhMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDQ0MworICAgIDB4MS5mYzBkOThhY2UyMzA4ODAwMDAwMjEyNzg4YTc5NGVhY3AtMSwKKyAgICAtMHgxLmZjZWFiNTRkMzdkYTBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDQKKyAgICAtMHgxLjk1ODliY2ExMjhiOTE3ZmU1OTY5MmE3MzhjMzc5MWM5cC00LAorICAgIDB4MS5mZDAwNzJmZmZmZmZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDUKKyAgICAtMHgxLjk1ODliY2ExMjhiOTE3ZmU1OTY5MmE3MzhjMzc5MWM5cC00LAorICAgIC0weDEuZmQwMDcyZmZmZmZmZnAyCisgIH0sCisgIHsgLy8gRW50cnkgNDQ2CisgICAgLTB4MS40ZDMwNGIwN2ZjODk3Y2YxYWRlNTRmZTk3ZGI3YzhiZHAtMiwKKyAgICAweDEuZmUwZjgyNzY3MzQyMnA2MgorICB9LAorICB7IC8vIEVudHJ5IDQ0NworICAgIC0weDEuNGQzMDRiMDdmYzg5N2NmMWFkZTU0ZmU5N2RiN2M4YmRwLTIsCisgICAgLTB4MS5mZTBmODI3NjczNDIycDYyCisgIH0sCisgIHsgLy8gRW50cnkgNDQ4CisgICAgMHgxLmMxYTI3YWU4MzZmMTI4MDAwMDAwMDAwMDAwNTA0ZTlicC0xLAorICAgIDB4MS5mZWIxZjc5MjBlMjQ4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDQ5CisgICAgMHgxLmMxYTI3YWU4MzZmMTI4MDAwMDAwMDAwMDAwNTA0ZTlicC0xLAorICAgIC0weDEuZmViMWY3OTIwZTI0OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ1MAorICAgIC0weDEuOTM2YjY0ZTk1NTk3OGQxNWFhY2ZkZGY1ODIxYzYyODFwLTEsCisgICAgMHgxLmZlZWZmZmZmZmZmYzZwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgNDUxCisgICAgLTB4MS45MzZiNjRlOTU1OTc4ZDE1YWFjZmRkZjU4MjFjNjI4MXAtMSwKKyAgICAtMHgxLmZlZWZmZmZmZmZmYzZwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgNDUyCisgICAgMHgxLmZmZjAwNzE0N2VhNTc3ZmIwMjEzMGM2OGIzMzVlZjQ1cC0xLAorICAgIDB4MS5mZjhmZmZmZmZmZmZmcC03CisgIH0sCisgIHsgLy8gRW50cnkgNDUzCisgICAgMHgxLmZmZjAwNzE0N2VhNTc3ZmIwMjEzMGM2OGIzMzVlZjQ1cC0xLAorICAgIC0weDEuZmY4ZmZmZmZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDQ1NAorICAgIDB4MS5mZmZmYzAxYmZlNDQyYjA5Y2JlYzE5ZjY4YWY4ZmJmOHAtMSwKKyAgICAweDEuZmY4ZmZmZmZmZmZmZnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTUKKyAgICAweDEuZmZmZmMwMWJmZTQ0MmIwOWNiZWMxOWY2OGFmOGZiZjhwLTEsCisgICAgLTB4MS5mZjhmZmZmZmZmZmZmcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NgorICAgIDB4MS43Y2M5ZmI3NTMxN2FlOTNiZjVkZGVlMGU4YjljODNjZXAtMSwKKyAgICAweDEuZmY4ZmZmZmZmZmZmZnA4NzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTcKKyAgICAweDEuN2NjOWZiNzUzMTdhZTkzYmY1ZGRlZTBlOGI5YzgzY2VwLTEsCisgICAgLTB4MS5mZjhmZmZmZmZmZmZmcDg3MAorICB9LAorICB7IC8vIEVudHJ5IDQ1OAorICAgIDB4MS5kNmFlYTQ4MDE1NTg4ZTcxOTgzMTQyODA0MjI3ZmQ4NHAtMSwKKyAgICAweDEuZmZjZmZmOHAxOQorICB9LAorICB7IC8vIEVudHJ5IDQ1OQorICAgIDB4MS5kNmFlYTQ4MDE1NTg4ZTcxOTgzMTQyODA0MjI3ZmQ4NHAtMSwKKyAgICAtMHgxLmZmY2ZmZjhwMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjAKKyAgICAtMHgxLjZhOTk3MmVlZTE5YmFkZjllMzRkMzZiMGQxMjAyMDkxcC0yLAorICAgIDB4MS5mZmNmZmY4cDM2NQorICB9LAorICB7IC8vIEVudHJ5IDQ2MQorICAgIC0weDEuNmE5OTcyZWVlMTliYWRmOWUzNGQzNmIwZDEyMDIwOTFwLTIsCisgICAgLTB4MS5mZmNmZmY4cDM2NQorICB9LAorICB7IC8vIEVudHJ5IDQ2MgorICAgIC0weDEuM2FhYTE1Zjc1NDRiNjkxYTQzZTFmYTFhNjM5YmRmYzJwLTEsCisgICAgMHgxLmZmY2ZmZmZmZmZmNmNwNzIwCisgIH0sCisgIHsgLy8gRW50cnkgNDYzCisgICAgLTB4MS4zYWFhMTVmNzU0NGI2OTFhNDNlMWZhMWE2MzliZGZjMnAtMSwKKyAgICAtMHgxLmZmY2ZmZmZmZmZmNmNwNzIwCisgIH0sCisgIHsgLy8gRW50cnkgNDY0CisgICAgMHgxLjNmMTY0YmNlMDU1YzRjNjFiNzRhNjFmNzNjYTczZDNmcC0xLAorICAgIDB4MS5mZmNmZmZmZmZmZmY5cDMyMAorICB9LAorICB7IC8vIEVudHJ5IDQ2NQorICAgIDB4MS4zZjE2NGJjZTA1NWM0YzYxYjc0YTYxZjczY2E3M2QzZnAtMSwKKyAgICAtMHgxLmZmY2ZmZmZmZmZmZjlwMzIwCisgIH0sCisgIHsgLy8gRW50cnkgNDY2CisgICAgMHgxLmZmZmZmMDAyZmZmMTRkNTY2YWU4ZWM5ZDFlZGMzZTNmcC0xLAorICAgIDB4MS5mZmNmZmZmZmZmZmZmcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDQ2NworICAgIDB4MS5mZmZmZjAwMmZmZjE0ZDU2NmFlOGVjOWQxZWRjM2UzZnAtMSwKKyAgICAtMHgxLmZmY2ZmZmZmZmZmZmZwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNDY4CisgICAgLTB4MS5mZmZmZmY5ODdmOTg1ZDY3OTQ0Yjg2N2JmZjRhYjg1N3AtMSwKKyAgICAweDEuZmZjZmZmZmZmZmZmZnA0MDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjkKKyAgICAtMHgxLmZmZmZmZjk4N2Y5ODVkNjc5NDRiODY3YmZmNGFiODU3cC0xLAorICAgIC0weDEuZmZjZmZmZmZmZmZmZnA0MDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzAKKyAgICAtMHgxLmZmZmY2MjM1YTI1ZWRiOGM5NzViNDg1YzVjNmY0MWY3cC0xLAorICAgIDB4MS5mZmNmZmZmZmZmZmZmcDU2NworICB9LAorICB7IC8vIEVudHJ5IDQ3MQorICAgIC0weDEuZmZmZjYyMzVhMjVlZGI4Yzk3NWI0ODVjNWM2ZjQxZjdwLTEsCisgICAgLTB4MS5mZmNmZmZmZmZmZmZmcDU2NworICB9LAorICB7IC8vIEVudHJ5IDQ3MgorICAgIDB4MS5mZGYxMWFlNDYwOGIwODk0YmFiODc4Njk0OWFhNjMzM3AtMywKKyAgICAweDEuZmZlZmZmOGZmZmZmZnAxNgorICB9LAorICB7IC8vIEVudHJ5IDQ3MworICAgIDB4MS5mZGYxMWFlNDYwOGIwODk0YmFiODc4Njk0OWFhNjMzM3AtMywKKyAgICAtMHgxLmZmZWZmZjhmZmZmZmZwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzQKKyAgICAweDEuOGY1NTI1YWI0NTgzYzA2NDM1M2FhYWQxMmM2Y2NlNmNwLTEsCisgICAgMHgxLmZmZWZmZmZmZmZmY2NwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgNDc1CisgICAgMHgxLjhmNTUyNWFiNDU4M2MwNjQzNTNhYWFkMTJjNmNjZTZjcC0xLAorICAgIC0weDEuZmZlZmZmZmZmZmZjY3A5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzYKKyAgICAweDEuYTBhZjQ0YTQ1YzA1NjliNzIwNThjYzM0ZWZkMGUzMmVwLTgsCisgICAgMHgxLmZmZWZmZmZmZmZmZmZwNzcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzcKKyAgICAweDEuYTBhZjQ0YTQ1YzA1NjliNzIwNThjYzM0ZWZkMGUzMmVwLTgsCisgICAgLTB4MS5mZmVmZmZmZmZmZmZmcDc3CisgIH0sCisgIHsgLy8gRW50cnkgNDc4CisgICAgLTB4MS5kZjc1NDZjMzFiZjhjZmZlZjY5YzQ4NTlkYTA1NWYzM3AtMSwKKyAgICAweDEuZmZlZmZmZmZmZmZmZnAxMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzkKKyAgICAtMHgxLmRmNzU0NmMzMWJmOGNmZmVmNjljNDg1OWRhMDU1ZjMzcC0xLAorICAgIC0weDEuZmZlZmZmZmZmZmZmZnAxMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODAKKyAgICAtMHgxLjgyNWE3YmVhMjdkNWIxYTU5OGFmNmI2ODRlYjE4NDc4cC0xLAorICAgIDB4MS5mZmVmZmZmZmZmZmZmcDE3OQorICB9LAorICB7IC8vIEVudHJ5IDQ4MQorICAgIC0weDEuODI1YTdiZWEyN2Q1YjFhNTk4YWY2YjY4NGViMTg0NzhwLTEsCisgICAgLTB4MS5mZmVmZmZmZmZmZmZmcDE3OQorICB9LAorICB7IC8vIEVudHJ5IDQ4MgorICAgIC0weDEuMWJlMmFiMjA3OGQ1NDdmZmYwOTkzMjAxMWZlMTY0NTZwLTEsCisgICAgMHgxLmZmZWZmZmZmZmZmZmZwMjM4CisgIH0sCisgIHsgLy8gRW50cnkgNDgzCisgICAgLTB4MS4xYmUyYWIyMDc4ZDU0N2ZmZjA5OTMyMDExZmUxNjQ1NnAtMSwKKyAgICAtMHgxLmZmZWZmZmZmZmZmZmZwMjM4CisgIH0sCisgIHsgLy8gRW50cnkgNDg0CisgICAgLTB4MS5hNGNjNWY4MzhmNTI5N2UwYTdlNzQ5Y2IwODdjMmYxNHAtNywKKyAgICAweDEuZmZmMDAwMDAwMjUxMXA0OTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODUKKyAgICAtMHgxLmE0Y2M1ZjgzOGY1Mjk3ZTBhN2U3NDljYjA4N2MyZjE0cC03LAorICAgIC0weDEuZmZmMDAwMDAwMjUxMXA0OTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODYKKyAgICAweDEuZjE2NDM3ZDYxMTlmODliZmE3M2EyZjE0ZjM3N2ZkM2VwLTEwLAorICAgIDB4MS5mZmYxZmZmZmZmZmZmcDQxCisgIH0sCisgIHsgLy8gRW50cnkgNDg3CisgICAgMHgxLmYxNjQzN2Q2MTE5Zjg5YmZhNzNhMmYxNGYzNzdmZDNlcC0xMCwKKyAgICAtMHgxLmZmZjFmZmZmZmZmZmZwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODgKKyAgICAweDEuODk4MzI0YzJmMWNmYzU5NmU1OTBiNGE4MGQyNTA4ZmJwLTExLAorICAgIDB4MS5mZmZmYzdmZmZmZmZmcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgNDg5CisgICAgMHgxLjg5ODMyNGMyZjFjZmM1OTZlNTkwYjRhODBkMjUwOGZicC0xMSwKKyAgICAtMHgxLmZmZmZjN2ZmZmZmZmZwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTAKKyAgICAweDEuZjAxNTRjMDA2ODhmODdmY2M5NmYxNGM4ZWZiNTkxNGZwLTEsCisgICAgMHgxLmZmZmZkZjFmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTEKKyAgICAweDEuZjAxNTRjMDA2ODhmODdmY2M5NmYxNGM4ZWZiNTkxNGZwLTEsCisgICAgLTB4MS5mZmZmZGYxZmZmZmZmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDkyCisgICAgMHgxLmZmYzAwMTU3MTI2YTdkOTgyMTY0OTFkZjczZDk3Y2QzcC0xLAorICAgIDB4MS5mZmZmZjhmZmZmZmZmcC02CisgIH0sCisgIHsgLy8gRW50cnkgNDkzCisgICAgMHgxLmZmYzAwMTU3MTI2YTdkOTgyMTY0OTFkZjczZDk3Y2QzcC0xLAorICAgIC0weDEuZmZmZmY4ZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDQ5NAorICAgIC0weDEuZTBkOWYwZjM4YzczZjAwNjk3MzllOWRlNjUxOTE0MTZwLTIsCisgICAgMHgxLmZmZmZmYmZmZmZmZmZwOTY4CisgIH0sCisgIHsgLy8gRW50cnkgNDk1CisgICAgLTB4MS5lMGQ5ZjBmMzhjNzNmMDA2OTczOWU5ZGU2NTE5MTQxNnAtMiwKKyAgICAtMHgxLmZmZmZmYmZmZmZmZmZwOTY4CisgIH0sCisgIHsgLy8gRW50cnkgNDk2CisgICAgMHgxLmZmZjQ2OTlkZDU2MGI1ZGJiODhhMDI5MzM3YjlhYjg2cC0xLAorICAgIDB4MS5mZmZmZmNmZmZmZmZmcDQwCisgIH0sCisgIHsgLy8gRW50cnkgNDk3CisgICAgMHgxLmZmZjQ2OTlkZDU2MGI1ZGJiODhhMDI5MzM3YjlhYjg2cC0xLAorICAgIC0weDEuZmZmZmZjZmZmZmZmZnA0MAorICB9LAorICB7IC8vIEVudHJ5IDQ5OAorICAgIDB4MS5mZjAwMTU1NTlmMjI4ODAyNDMzNzMyYWUxMTk0Mjk0NXAtMSwKKyAgICAweDEuZmZmZmZmMDAwMDA0MHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ5OQorICAgIDB4MS5mZjAwMTU1NTlmMjI4ODAyNDMzNzMyYWUxMTk0Mjk0NXAtMSwKKyAgICAtMHgxLmZmZmZmZjAwMDAwNDBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDAKKyAgICAtMHgxLjljNjk1MWNjY2QzOWJmNjBkNDdkYjgwYmU2ZmNlMzRmcC0yLAorICAgIDB4MS5mZmZmZmY4cDExOQorICB9LAorICB7IC8vIEVudHJ5IDUwMQorICAgIC0weDEuOWM2OTUxY2NjZDM5YmY2MGQ0N2RiODBiZTZmY2UzNGZwLTIsCisgICAgLTB4MS5mZmZmZmY4cDExOQorICB9LAorICB7IC8vIEVudHJ5IDUwMgorICAgIC0weDEuZjJjMjI2MzU5MDAzNGVjNjI1MjJkNDVkMmVlY2EyODVwLTEsCisgICAgMHgxLmZmZmZmZjhwMTkyCisgIH0sCisgIHsgLy8gRW50cnkgNTAzCisgICAgLTB4MS5mMmMyMjYzNTkwMDM0ZWM2MjUyMmQ0NWQyZWVjYTI4NXAtMSwKKyAgICAtMHgxLmZmZmZmZjhwMTkyCisgIH0sCisgIHsgLy8gRW50cnkgNTA0CisgICAgMHgxLmM3ODg0ZDZjZmI1NTExYTZiNTExMTA3N2ZkMGIxYjcycC0xLAorICAgIDB4MS5mZmZmZmY4cDU0MworICB9LAorICB7IC8vIEVudHJ5IDUwNQorICAgIDB4MS5jNzg4NGQ2Y2ZiNTUxMWE2YjUxMTEwNzdmZDBiMWI3MnAtMSwKKyAgICAtMHgxLmZmZmZmZjhwNTQzCisgIH0sCisgIHsgLy8gRW50cnkgNTA2CisgICAgMHgxLmU2NmM3OWU3NzZhMWVmZjZiNjhmMmQwMTI4OWUwOGU4cC0yLAorICAgIDB4MS5mZmZmZmZjM2ZmZmZmcDUwMAorICB9LAorICB7IC8vIEVudHJ5IDUwNworICAgIDB4MS5lNjZjNzllNzc2YTFlZmY2YjY4ZjJkMDEyODllMDhlOHAtMiwKKyAgICAtMHgxLmZmZmZmZmMzZmZmZmZwNTAwCisgIH0sCisgIHsgLy8gRW50cnkgNTA4CisgICAgMHgxLmM3YzlhOWM1N2MwYjIwMDlmMThhNmMyYzA3YjUyZWEycC0zLAorICAgIDB4MS5mZmZmZmZlMWZmZmZmcDcwMAorICB9LAorICB7IC8vIEVudHJ5IDUwOQorICAgIDB4MS5jN2M5YTljNTdjMGIyMDA5ZjE4YTZjMmMwN2I1MmVhMnAtMywKKyAgICAtMHgxLmZmZmZmZmUxZmZmZmZwNzAwCisgIH0sCisgIHsgLy8gRW50cnkgNTEwCisgICAgMHgxLjdiYjI4ZGFmNWY5YWQzNjA4ZGRhOGExNmVhMjM1Y2I0cC0xLAorICAgIDB4MS5mZmZmZmZmZjBmMGZmcDQwMAorICB9LAorICB7IC8vIEVudHJ5IDUxMQorICAgIDB4MS43YmIyOGRhZjVmOWFkMzYwOGRkYThhMTZlYTIzNWNiNHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmMGYwZmZwNDAwCisgIH0sCisgIHsgLy8gRW50cnkgNTEyCisgICAgMHgxLmZjMDE1NTI3ZDhiYjM3ODA2ZTQ5NzZkY2Y3YTdjOThjcC0xLAorICAgIDB4MS5mZmZmZmZmZjNmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgNTEzCisgICAgMHgxLmZjMDE1NTI3ZDhiYjM3ODA2ZTQ5NzZkY2Y3YTdjOThjcC0xLAorICAgIC0weDEuZmZmZmZmZmYzZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDUxNAorICAgIC0weDEuZWE1MjU3ZWI2NmUzYmZmZWU5MDBjZDQ0NDc0MDRjMTZwLTEsCisgICAgMHgxLmZmZmZmZmZmOGZmZmZwMworICB9LAorICB7IC8vIEVudHJ5IDUxNQorICAgIC0weDEuZWE1MjU3ZWI2NmUzYmZmZWU5MDBjZDQ0NDc0MDRjMTZwLTEsCisgICAgLTB4MS5mZmZmZmZmZjhmZmZmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTYKKyAgICAtMHgxLjRlYWE2MDZkYmVmOTY4MDAwMjY3YjAzNzVkZWQ2ODcycC0xLAorICAgIDB4MS5mZmZmZmZmZmZiY2ZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTcKKyAgICAtMHgxLjRlYWE2MDZkYmVmOTY4MDAwMjY3YjAzNzVkZWQ2ODcycC0xLAorICAgIC0weDEuZmZmZmZmZmZmYmNmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgNTE4CisgICAgLTB4MS5mYzljZDZiNWYwMDk0ODJiMGQ1NTgyZTFjNmNkZjczOHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZTBiNXA3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTkKKyAgICAtMHgxLmZjOWNkNmI1ZjAwOTQ4MmIwZDU1ODJlMWM2Y2RmNzM4cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZTBiNXA3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjAKKyAgICAweDEuZTk2YWMwNDVkZDEzOGQyNTc0MWNiODc5YjkyYWZhNDhwLTMsCisgICAgMHgxLmZmZmZmZmZmZmU3ZmZwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjEKKyAgICAweDEuZTk2YWMwNDVkZDEzOGQyNTc0MWNiODc5YjkyYWZhNDhwLTMsCisgICAgLTB4MS5mZmZmZmZmZmZlN2ZmcDQxCisgIH0sCisgIHsgLy8gRW50cnkgNTIyCisgICAgLTB4MS5mY2FmMzljZmI5NGQ0ODE5NWQyYjI2MDYwYjMwZjgyMnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZWUwOXA3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjMKKyAgICAtMHgxLmZjYWYzOWNmYjk0ZDQ4MTk1ZDJiMjYwNjBiMzBmODIycC0xLAorICAgIC0weDEuZmZmZmZmZmZmZWUwOXA3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjQKKyAgICAweDEuODQzMjIzMmE2ZDFkYWE2YWM4YTk0YzAwMjFlNjBkNTBwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZkZmZwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjUKKyAgICAweDEuODQzMjIzMmE2ZDFkYWE2YWM4YTk0YzAwMjFlNjBkNTBwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZGZmcDQwCisgIH0sCisgIHsgLy8gRW50cnkgNTI2CisgICAgMHgxLjllMzc1MTQzMTM5ZDlhMzdiMzU0ZWEzM2RkNjI1Y2Q2cC02LAorICAgIDB4MS5mZmZmZmZmZmZmZWZmcDQxCisgIH0sCisgIHsgLy8gRW50cnkgNTI3CisgICAgMHgxLjllMzc1MTQzMTM5ZDlhMzdiMzU0ZWEzM2RkNjI1Y2Q2cC02LAorICAgIC0weDEuZmZmZmZmZmZmZmVmZnA0MQorICB9LAorICB7IC8vIEVudHJ5IDUyOAorICAgIDB4MS5mZmZjMDAwMTU1NTUyODAwMDA0OWIxMGMyNmExZjUzOXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmY0YXAtOAorICB9LAorICB7IC8vIEVudHJ5IDUyOQorICAgIDB4MS5mZmZjMDAwMTU1NTUyODAwMDA0OWIxMGMyNmExZjUzOXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmNGFwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzAKKyAgICAweDEuNDYzYTg5NWM0ZWE1Y2U0ZTU2ZThmNTc4Mzg4ZWVkM2FwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmNzhwOTIwCisgIH0sCisgIHsgLy8gRW50cnkgNTMxCisgICAgMHgxLjQ2M2E4OTVjNGVhNWNlNGU1NmU4ZjU3ODM4OGVlZDNhcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmY3OHA5MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzIKKyAgICAweDEuM2MxYTQ4NjM1Y2YzODBjODE1OGQ5MzRjNGQwZGQ4N2NwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZDVwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgNTMzCisgICAgMHgxLjNjMWE0ODYzNWNmMzgwYzgxNThkOTM0YzRkMGRkODdjcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZkNXA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzQKKyAgICAweDEuOTFjNGUwNzA4YmQ0ODYyMTdmNWZjMjMwZjA0MTYyMjBwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZThwNzIwCisgIH0sCisgIHsgLy8gRW50cnkgNTM1CisgICAgMHgxLjkxYzRlMDcwOGJkNDg2MjE3ZjVmYzIzMGYwNDE2MjIwcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZlOHA3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzYKKyAgICAtMHgxLjNlMTVjYjg0OWI1ZWE4N2JjYzU4M2Y2MzQ0Y2JjYzQwcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmVicDkyMAorICB9LAorICB7IC8vIEVudHJ5IDUzNworICAgIC0weDEuM2UxNWNiODQ5YjVlYTg3YmNjNTgzZjYzNDRjYmNjNDBwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmVicDkyMAorICB9LAorICB7IC8vIEVudHJ5IDUzOAorICAgIC0weDEuODE2ODA4MzQ5YjgwZGQzYzIyY2JlODBiNGMxNzFkMWZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZjFwMjQ1CisgIH0sCisgIHsgLy8gRW50cnkgNTM5CisgICAgLTB4MS44MTY4MDgzNDliODBkZDNjMjJjYmU4MGI0YzE3MWQxZnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjFwMjQ1CisgIH0sCisgIHsgLy8gRW50cnkgNTQwCisgICAgMHgxLjQ2OTljODE0YzVmMDc1YmIwZWQ5NDcyZGZlY2M1MGE5cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmY0cDg0NQorICB9LAorICB7IC8vIEVudHJ5IDU0MQorICAgIDB4MS40Njk5YzgxNGM1ZjA3NWJiMGVkOTQ3MmRmZWNjNTBhOXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjRwODQ1CisgIH0sCisgIHsgLy8gRW50cnkgNTQyCisgICAgLTB4MS44MTVlOTJiN2EyYTAxOWU3NDY1MGE4NTk5NjhlMGYyOXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmNHAxMDIwCisgIH0sCisgIHsgLy8gRW50cnkgNTQzCisgICAgLTB4MS44MTVlOTJiN2EyYTAxOWU3NDY1MGE4NTk5NjhlMGYyOXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjRwMTAyMAorICB9LAorICB7IC8vIEVudHJ5IDU0NAorICAgIC0weDEuM2U4ZDAyODE1MzIwMWVkMjcyZmM5NTQ5NzI1ZmNiM2ZwLTEwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgNTQ1CisgICAgLTB4MS4zZThkMDI4MTUzMjAxZWQyNzJmYzk1NDk3MjVmY2IzZnAtMTAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZjcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgNTQ2CisgICAgMHgxLjdkNjc2NTcxNGM3ODUzMmQzZWIwZjJhNzNjNWQ2MTI2cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDEwNQorICB9LAorICB7IC8vIEVudHJ5IDU0NworICAgIDB4MS43ZDY3NjU3MTRjNzg1MzJkM2ViMGYyYTczYzVkNjEyNnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwMTA1CisgIH0sCisgIHsgLy8gRW50cnkgNTQ4CisgICAgLTB4MS5mODY5ZmIxNGQyNTY4ZDY3YzM3YzkwYjBhMDM4YjI0MHAtMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXA0ODAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDkKKyAgICAtMHgxLmY4NjlmYjE0ZDI1NjhkNjdjMzdjOTBiMGEwMzhiMjQwcC0zLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXA0ODAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTAKKyAgICAtMHgxLjgwYTc1YjM2OWQzYzNmZDE1YjYwNjBjNmZiOThmMmQ2cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDk3MAorICB9LAorICB7IC8vIEVudHJ5IDU1MQorICAgIC0weDEuODBhNzViMzY5ZDNjM2ZkMTViNjA2MGM2ZmI5OGYyZDZwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcDk3MAorICB9LAorICB7IC8vIEVudHJ5IDU1MgorICAgIC0weDEuOWRiYTY5ZTg1M2JkNzdmZDg4M2JlM2JiMTE3MWRmNTVwLTQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTMKKyAgICAtMHgxLjlkYmE2OWU4NTNiZDc3ZmQ4ODNiZTNiYjExNzFkZjU1cC00LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXA0MgorICB9LAorICB7IC8vIEVudHJ5IDU1NAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTYKKyAgICAweDEucDAsCisgICAgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDU1NworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDU1OAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNTYwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNTYxCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDU2MgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDU2MworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNTY3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNTY4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDU2OQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDU3MAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzEKKyAgICAweDEuZmZmZmZmNWMyOGY1Y2I0YzUyNzIwNjEyODEyMTExMjBwLTEsCisgICAgMHgxLjk5OTk5OTk5OTk5OWFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgNTcyCisgICAgMHgxLmZmZmZmZjVjMjhmNWNiNGM1MjcyMDYxMjgxMjExMTIwcC0xLAorICAgIC0weDEuOTk5OTk5OTk5OTk5YXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzMKKyAgICAweDEuZmZmZmZkNzBhM2Q3OTYwY2Q1Njk1YTA2ZmRiODBlNzRwLTEsCisgICAgMHgxLjk5OTk5OTk5OTk5OWFwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgNTc0CisgICAgMHgxLmZmZmZmZDcwYTNkNzk2MGNkNTY5NWEwNmZkYjgwZTc0cC0xLAorICAgIC0weDEuOTk5OTk5OTk5OTk5YXAtMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzUKKyAgICAweDEuZmZmZmZhM2Q3MGE2OWFkNDJiMzlkODY5NjYzMmY4NTZwLTEsCisgICAgMHgxLjMzMzMzMzMzMzMzMzRwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNTc2CisgICAgMHgxLmZmZmZmYTNkNzBhNjlhZDQyYjM5ZDg2OTY2MzJmODU2cC0xLAorICAgIC0weDEuMzMzMzMzMzMzMzMzNHAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzcKKyAgICAweDEuZmZmZmY1YzI4ZjY0ZTVlYzBkYTBhNGY3ZjQzODgwNTJwLTEsCisgICAgMHgxLjk5OTk5OTk5OTk5OWFwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNTc4CisgICAgMHgxLmZmZmZmNWMyOGY2NGU1ZWMwZGEwYTRmN2Y0Mzg4MDUycC0xLAorICAgIC0weDEuOTk5OTk5OTk5OTk5YXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzkKKyAgICAweDEuZmZmZmYwMDAwMDE1NTU1NTQ5ZjQ5ZjRkMzRkMzRjYTBwLTEsCisgICAgMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNTgwCisgICAgMHgxLmZmZmZmMDAwMDAxNTU1NTU0OWY0OWY0ZDM0ZDM0Y2EwcC0xLAorICAgIC0weDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODEKKyAgICAweDEuZmZmZmU4ZjVjMmJiOThjN2MxMDNkMmZmNzlmMTVkNmFwLTEsCisgICAgMHgxLjMzMzMzMzMzMzMzMzNwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNTgyCisgICAgMHgxLmZmZmZlOGY1YzJiYjk4YzdjMTAzZDJmZjc5ZjE1ZDZhcC0xLAorICAgIC0weDEuMzMzMzMzMzMzMzMzM3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODMKKyAgICAweDEuZmZmZmUwYTNkNzVjMzFiMjY0NTExNjZkNmYzOThhYmRwLTEsCisgICAgMHgxLjY2NjY2NjY2NjY2NjZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNTg0CisgICAgMHgxLmZmZmZlMGEzZDc1YzMxYjI2NDUxMTY2ZDZmMzk4YWJkcC0xLAorICAgIC0weDEuNjY2NjY2NjY2NjY2NnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODUKKyAgICAweDEuZmZmZmQ3MGEzZGZjNzMzYjMzMzFkODM4MmIxZTlkZjVwLTEsCisgICAgMHgxLjk5OTk5OTk5OTk5OTlwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNTg2CisgICAgMHgxLmZmZmZkNzBhM2RmYzczM2IzMzMxZDgzODJiMWU5ZGY1cC0xLAorICAgIC0weDEuOTk5OTk5OTk5OTk5OXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODcKKyAgICAweDEuZmZmZmNjMjhmNmEyODIzZjM3NjViNTA2NTllY2IwZTJwLTEsCisgICAgMHgxLmNjY2NjY2NjY2NjY2NwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNTg4CisgICAgMHgxLmZmZmZjYzI4ZjZhMjgyM2YzNzY1YjUwNjU5ZWNiMGUycC0xLAorICAgIC0weDEuY2NjY2NjY2NjY2NjY3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODkKKyAgICAweDEuZmZmYmNjMmE2ZTg2ZmVmN2QyYWYxNTgwYmQ4ZTY2OTlwLTEsCisgICAgMHgxLjA2NjY2NjY2NjY2NjZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTAKKyAgICAweDEuZmZmYmNjMmE2ZTg2ZmVmN2QyYWYxNTgwYmQ4ZTY2OTlwLTEsCisgICAgLTB4MS4wNjY2NjY2NjY2NjY2cC03CisgIH0sCisgIHsgLy8gRW50cnkgNTkxCisgICAgMHgxLmZmZjMwYTRiNmZjYzE0MDVlMThmYmY3MzM1ZDJmNzg5cC0xLAorICAgIDB4MS5jY2NjY2NjY2NjY2NjcC03CisgIH0sCisgIHsgLy8gRW50cnkgNTkyCisgICAgMHgxLmZmZjMwYTRiNmZjYzE0MDVlMThmYmY3MzM1ZDJmNzg5cC0xLAorICAgIC0weDEuY2NjY2NjY2NjY2NjY3AtNworICB9LAorICB7IC8vIEVudHJ5IDU5MworICAgIDB4MS5mZmU1N2E3ODBmMzhjMGRiMzcwNTFmYThjOGQ2MGZiY3AtMSwKKyAgICAweDEuNDk5OTk5OTk5OTk5OXAtNgorICB9LAorICB7IC8vIEVudHJ5IDU5NAorICAgIDB4MS5mZmU1N2E3ODBmMzhjMGRiMzcwNTFmYThjOGQ2MGZiY3AtMSwKKyAgICAtMHgxLjQ5OTk5OTk5OTk5OTlwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTUKKyAgICAweDEuZmZkMzFjZDBlMWQ2MmMwNWQyY2RlZDIxYWRkOGJkMzNwLTEsCisgICAgMHgxLmFjY2NjY2NjY2NjY2NwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTYKKyAgICAweDEuZmZkMzFjZDBlMWQ2MmMwNWQyY2RlZDIxYWRkOGJkMzNwLTEsCisgICAgLTB4MS5hY2NjY2NjY2NjY2NjcC02CisgIH0sCisgIHsgLy8gRW50cnkgNTk3CisgICAgMHgxLmZmYmJmMTgyMDc1NDJlZjgxMzkwZDczYzNiYTg5YzFhcC0xLAorICAgIDB4MS4wODBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTgKKyAgICAweDEuZmZiYmYxODIwNzU0MmVmODEzOTBkNzNjM2JhODljMWFwLTEsCisgICAgLTB4MS4wODBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTkKKyAgICAweDEuZmY5ZmY4YzMyOTlmNTQ0NTdiYmFmOGMxMjE3M2I0NmJwLTEsCisgICAgMHgxLjM5OTk5OTk5OTk5OWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDAKKyAgICAweDEuZmY5ZmY4YzMyOTlmNTQ0NTdiYmFmOGMxMjE3M2I0NmJwLTEsCisgICAgLTB4MS4zOTk5OTk5OTk5OTlhcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjAxCisgICAgMHgxLmZmN2YzMmQ3N2M1YjFjNDJmMTY2MGM5YjZmMmVmNjRmcC0xLAorICAgIDB4MS42YjMzMzMzMzMzMzM0cC01CisgIH0sCisgIHsgLy8gRW50cnkgNjAyCisgICAgMHgxLmZmN2YzMmQ3N2M1YjFjNDJmMTY2MGM5YjZmMmVmNjRmcC0xLAorICAgIC0weDEuNmIzMzMzMzMzMzMzNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDYwMworICAgIDB4MS5mZjU5YTAwZGJjNDA4OTZiYjVlNGFjOGFkMjkzYWZiNHAtMSwKKyAgICAweDEuOWNjY2NjY2NjY2NjZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDYwNAorICAgIDB4MS5mZjU5YTAwZGJjNDA4OTZiYjVlNGFjOGFkMjkzYWZiNHAtMSwKKyAgICAtMHgxLjljY2NjY2NjY2NjY2VwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDUKKyAgICAweDEuZmYyZjQwYzAyZTYwZjYxZDZkY2ZjMzliNmMyYmUwODdwLTEsCisgICAgMHgxLmNlNjY2NjY2NjY2NjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDYKKyAgICAweDEuZmYyZjQwYzAyZTYwZjYxZDZkY2ZjMzliNmMyYmUwODdwLTEsCisgICAgLTB4MS5jZTY2NjY2NjY2NjY2cC01CisgIH0sCisgIHsgLy8gRW50cnkgNjA3CisgICAgMHgxLjhjYTQ2YzdkODk3NWU1N2ExNDg0ZjA1YzM3MzhkODNicC0xLAorICAgIDB4MS41ZTdmYzQzNjliZGFkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjA4CisgICAgMHgxLjhjYTQ2YzdkODk3NWU1N2ExNDg0ZjA1YzM3MzhkODNicC0xLAorICAgIC0weDEuNWU3ZmM0MzY5YmRhZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDYwOQorICAgIDB4MS4wYjVkMzgwMmZjNzk5MTE0MDE2OGYyOTRlZWRkNzkwNHAtMiwKKyAgICAweDEuNGU3ZmM0MzY5YmRhZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjEwCisgICAgMHgxLjBiNWQzODAyZmM3OTkxMTQwMTY4ZjI5NGVlZGQ3OTA0cC0yLAorICAgIC0weDEuNGU3ZmM0MzY5YmRhZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjExCisgICAgLTB4MS42NmI5NmY1MzMyM2FmMWQ3ZTMxYTcxNjJhYjE4YTc1YnAtMiwKKyAgICAweDEuZWRiZmE2NTFlOWM4NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjEyCisgICAgLTB4MS42NmI5NmY1MzMyM2FmMWQ3ZTMxYTcxNjJhYjE4YTc1YnAtMiwKKyAgICAtMHgxLmVkYmZhNjUxZTljODRwMAorICB9LAorICB7IC8vIEVudHJ5IDYxMworICAgIC0weDEuYTkzNTU0ODg4YzMyZmE1N2YyMmE5NTI5YTMyMGMxY2JwLTEsCisgICAgMHgxLjQ2N2ZjNDM2OWJkYWRwMQorICB9LAorICB7IC8vIEVudHJ5IDYxNAorICAgIC0weDEuYTkzNTU0ODg4YzMyZmE1N2YyMmE5NTI5YTMyMGMxY2JwLTEsCisgICAgLTB4MS40NjdmYzQzNjliZGFkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTUKKyAgICAtMHgxLmZmYzAwMTU1NTI3ZDJiOWZkYTJhZTg5Mzk2ZTA5NzI3cC0xLAorICAgIDB4MS45NjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTYKKyAgICAtMHgxLmZmYzAwMTU1NTI3ZDJiOWZkYTJhZTg5Mzk2ZTA5NzI3cC0xLAorICAgIC0weDEuOTYxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjE3CisgICAgLTB4MS45NjkwN2M1YzdjMjViODhlMzRhZGRmZjFmYmVmNjZlNHAtMSwKKyAgICAweDEuZTViZmE2NTFlOWM4M3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjE4CisgICAgLTB4MS45NjkwN2M1YzdjMjViODhlMzRhZGRmZjFmYmVmNjZlNHAtMSwKKyAgICAtMHgxLmU1YmZhNjUxZTljODNwMQorICB9LAorICB7IC8vIEVudHJ5IDYxOQorICAgIC0weDEuMmExZTVhNTBmOTQ4Y2Q0ODdjNTMwOTY4MmIxMTBhNTNwLTIsCisgICAgMHgxLjFhYWZjYmFmYzg1ZjdwMgorICB9LAorICB7IC8vIEVudHJ5IDYyMAorICAgIC0weDEuMmExZTVhNTBmOTQ4Y2Q0ODdjNTMwOTY4MmIxMTBhNTNwLTIsCisgICAgLTB4MS4xYWFmY2JhZmM4NWY3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjEKKyAgICAweDEuNDg5NGY2OTVkYzU2YmNlOGIyNzNlNTUyNGYxODEyNjRwLTIsCisgICAgMHgxLjQyN2ZjNDM2OWJkYWRwMgorICB9LAorICB7IC8vIEVudHJ5IDYyMgorICAgIDB4MS40ODk0ZjY5NWRjNTZiY2U4YjI3M2U1NTI0ZjE4MTI2NHAtMiwKKyAgICAtMHgxLjQyN2ZjNDM2OWJkYWRwMgorICB9LAorICB7IC8vIEVudHJ5IDYyMworICAgIDB4MS5hMDE2ZWEzYTY5MmNlMGMzMjFiNzdmMTY4ZGUzOTEyMnAtMSwKKyAgICAweDEuNmE0ZmJjYmQ2ZjU2MnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjI0CisgICAgMHgxLmEwMTZlYTNhNjkyY2UwYzMyMWI3N2YxNjhkZTM5MTIycC0xLAorICAgIC0weDEuNmE0ZmJjYmQ2ZjU2MnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjI1CisgICAgMHgxLmEzMGE2OWY1NTM3ZWJjMjJmMDg3MGMyYmQyNmVmMjg0cC0xLAorICAgIDB4MS42YWYyZWZmMGEyODk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjYKKyAgICAweDEuYTMwYTY5ZjU1MzdlYmMyMmYwODcwYzJiZDI2ZWYyODRwLTEsCisgICAgLTB4MS42YWYyZWZmMGEyODk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjcKKyAgICAweDEuNWJkNjJlOGIwNGFkNTkxNWU2NjI0MjM0OWI3NTZlMTFwLTIsCisgICAgMHgxLjQzYzYyYTlkMDI0MTRwMgorICB9LAorICB7IC8vIEVudHJ5IDYyOAorICAgIDB4MS41YmQ2MmU4YjA0YWQ1OTE1ZTY2MjQyMzQ5Yjc1NmUxMXAtMiwKKyAgICAtMHgxLjQzYzYyYTlkMDI0MTRwMgorICB9LAorICB7IC8vIEVudHJ5IDYyOQorICAgIC0weDEuMGNiNzFmNjcxZTYzNDEwOTY2ZTc4ZDIwMDljMDYxNmZwLTIsCisgICAgMHgxLjFjOTk2NTQ5NjFmOTJwMgorICB9LAorICB7IC8vIEVudHJ5IDYzMAorICAgIC0weDEuMGNiNzFmNjcxZTYzNDEwOTY2ZTc4ZDIwMDljMDYxNmZwLTIsCisgICAgLTB4MS4xYzk5NjU0OTYxZjkycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzEKKyAgICAtMHgxLjg5ZDg2YWE4NTIxYzExYjc0ZjhiMTk1NGMwOGY5YjM2cC0xLAorICAgIDB4MS5lYWQ5M2ZlYjgzNjFmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzIKKyAgICAtMHgxLjg5ZDg2YWE4NTIxYzExYjc0ZjhiMTk1NGMwOGY5YjM2cC0xLAorICAgIC0weDEuZWFkOTNmZWI4MzYxZnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjMzCisgICAgLTB4MS5mZTUxYWM1NTRhMTZhZDgxOTRmMTgxMDg1ZjhhMTdmMnAtMSwKKyAgICAweDEuOWM3ZmI1NDQ0MmQxYXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM0CisgICAgLTB4MS5mZTUxYWM1NTRhMTZhZDgxOTRmMTgxMDg1ZjhhMTdmMnAtMSwKKyAgICAtMHgxLjljN2ZiNTQ0NDJkMWFwMQorICB9LAorICB7IC8vIEVudHJ5IDYzNQorICAgIC0weDEuYjk3YzA0ZDA4YmM1ZDc2NWIzNDFhMjJiMmM3MjBiNmZwLTEsCisgICAgMHgxLjRlMjYyYTlkMDI0MTVwMQorICB9LAorICB7IC8vIEVudHJ5IDYzNgorICAgIC0weDEuYjk3YzA0ZDA4YmM1ZDc2NWIzNDFhMjJiMmM3MjBiNmZwLTEsCisgICAgLTB4MS40ZTI2MmE5ZDAyNDE1cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzcKKyAgICAtMHgxLmE4YWM4YTNlNThmNmNhOTUyMzkwMjk5ZDJlOGIxODdmcC0yLAorICAgIDB4MS5mZjk5M2ZlYjgzNjIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzgKKyAgICAtMHgxLmE4YWM4YTNlNThmNmNhOTUyMzkwMjk5ZDJlOGIxODdmcC0yLAorICAgIC0weDEuZmY5OTNmZWI4MzYyMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjM5CisgICAgMHgxLjc3YThiOWIzZDI1NGE5ZTM5ZDAyYjNlYjNlMjM5MGU3cC0zLAorICAgIDB4MS42MmU2MmE5ZDAyNDE2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDAKKyAgICAweDEuNzdhOGI5YjNkMjU0YTllMzlkMDJiM2ViM2UyMzkwZTdwLTMsCisgICAgLTB4MS42MmU2MmE5ZDAyNDE2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDEKKyAgICAweDEuNmUxMDYxMjA1ZGQ3OTA1MWMxMTJkMzBhMDUwOTdjNjFwLTEsCisgICAgMHgxLjhjNjYyYTlkMDI0MTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDIKKyAgICAweDEuNmUxMDYxMjA1ZGQ3OTA1MWMxMTJkMzBhMDUwOTdjNjFwLTEsCisgICAgLTB4MS44YzY2MmE5ZDAyNDE5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQzCisgICAgLTB4MS42ODJmM2NjM2M3YTA4ZGEyY2UwMmE0MWNkYzdiZWQ4NnAtNCwKKyAgICAtMHgxLmE4YWExZDExYzQ0ZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NAorICAgIC0weDEuNjgyZjNjYzNjN2EwOGRhMmNlMDJhNDFjZGM3YmVkODZwLTQsCisgICAgMHgxLmE4YWExZDExYzQ0ZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NQorICAgIC0weDEuZTY2NjlhMjcwYzM2ZDQ4NzliNDI4ZGRiYTk2Y2Q4N2JwLTcsCisgICAgLTB4MS45NWVjOGI5ZTAzZDU0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDYKKyAgICAtMHgxLmU2NjY5YTI3MGMzNmQ0ODc5YjQyOGRkYmE5NmNkODdicC03LAorICAgIDB4MS45NWVjOGI5ZTAzZDU0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDcKKyAgICAweDEuZGRkMWVjMjVlMjA5ZjFiYmY3ZTE3ZWY2Yzg0NTBjZDdwLTUsCisgICAgLTB4MS44MzJlZmEyYTQzNWE5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDgKKyAgICAweDEuZGRkMWVjMjVlMjA5ZjFiYmY3ZTE3ZWY2Yzg0NTBjZDdwLTUsCisgICAgMHgxLjgzMmVmYTJhNDM1YTlwMAorICB9LAorICB7IC8vIEVudHJ5IDY0OQorICAgIDB4MS4wY2FiOTExNTY0MGQ5OTMwODJhNzM0M2JiNWFmZmVhMnAtMywKKyAgICAtMHgxLjcwNzE2OGI2ODJkZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDY1MAorICAgIDB4MS4wY2FiOTExNTY0MGQ5OTMwODJhNzM0M2JiNWFmZmVhMnAtMywKKyAgICAweDEuNzA3MTY4YjY4MmRmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjUxCisgICAgMHgxLmEwNzIzYTk1NDkyZWRlZTVkYzk4Mzk0ZTQ1Zjk2ZDg4cC0zLAorICAgIC0weDEuNWRiM2Q3NDJjMjY1M3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjUyCisgICAgMHgxLmEwNzIzYTk1NDkyZWRlZTVkYzk4Mzk0ZTQ1Zjk2ZDg4cC0zLAorICAgIDB4MS41ZGIzZDc0MmMyNjUzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTMKKyAgICAweDEuMThmZWU5NmExYTU4NTkyOGE5NGNkYTdlM2Q5MTZmZTFwLTIsCisgICAgLTB4MS40YWY2NDVjZjAxZWE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTQKKyAgICAweDEuMThmZWU5NmExYTU4NTkyOGE5NGNkYTdlM2Q5MTZmZTFwLTIsCisgICAgMHgxLjRhZjY0NWNmMDFlYThwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NQorICAgIDB4MS42MDQzNjIxYjEzYmUyZmYwNzA4NWY4Mjc4NTk4ZTU2NnAtMiwKKyAgICAtMHgxLjM4MzhiNDViNDE2ZmRwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NgorICAgIDB4MS42MDQzNjIxYjEzYmUyZmYwNzA4NWY4Mjc4NTk4ZTU2NnAtMiwKKyAgICAweDEuMzgzOGI0NWI0MTZmZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjU3CisgICAgMHgxLmE1YTRjY2Y0MGQ5ZDliYTk3ZmFhNGUyM2VjY2U5ZTNhcC0yLAorICAgIC0weDEuMjU3YjIyZTc4MGY1MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjU4CisgICAgMHgxLmE1YTRjY2Y0MGQ5ZDliYTk3ZmFhNGUyM2VjY2U5ZTNhcC0yLAorICAgIDB4MS4yNTdiMjJlNzgwZjUycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTkKKyAgICAweDEuZThjNDA1ZjM2Zjg1YjdmNWQ2YTM4ZGZkNGE2OTIzNDFwLTIsCisgICAgLTB4MS4xMmJkOTE3M2MwN2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjAKKyAgICAweDEuZThjNDA1ZjM2Zjg1YjdmNWQ2YTM4ZGZkNGE2OTIzNDFwLTIsCisgICAgMHgxLjEyYmQ5MTczYzA3YWJwMAorICB9LAorICB7IC8vIEVudHJ5IDY2MQorICAgIDB4MS4yNjk3NmE2YzRlMGY4NjYzMzMyN2YxY2VlY2I1MDhhZXAtMSwKKyAgICAtMHgxLmVhNWMzZWQ1YjM4NTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjIKKyAgICAweDEuMjY5NzZhNmM0ZTBmODY2MzMzMjdmMWNlZWNiNTA4YWVwLTEsCisgICAgMHgxLmVhNWMzZWQ1YjM4NTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjMKKyAgICAweDEuMzgwNWExODgyMDA5ZjI4NDNkYTgwOGU5NTlmMTc4NjFwLTEsCisgICAgLTB4MS5kNGI4N2RhYjY3MGEwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjY0CisgICAgMHgxLjM4MDVhMTg4MjAwOWYyODQzZGE4MDhlOTU5ZjE3ODYxcC0xLAorICAgIDB4MS5kNGI4N2RhYjY3MGEwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjY1CisgICAgMHgxLjQ4ZTUyZTBhNjViY2IzY2Q0NjQ1NWM0ZDIzMzhiZGYycC0xLAorICAgIC0weDEuYmYxNGJjODExYThmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2NgorICAgIDB4MS40OGU1MmUwYTY1YmNiM2NkNDY0NTVjNGQyMzM4YmRmMnAtMSwKKyAgICAweDEuYmYxNGJjODExYThmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2NworICAgIDB4MS41OTJlNThlYTBhOWVlYzBiMzU3ZWI0ZTlhODNiMGVhNXAtMSwKKyAgICAtMHgxLmE5NzBmYjU2Y2UxNDBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjgKKyAgICAweDEuNTkyZTU4ZWEwYTllZWMwYjM1N2ViNGU5YTgzYjBlYTVwLTEsCisgICAgMHgxLmE5NzBmYjU2Y2UxNDBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjkKKyAgICAweDEuNjhkOWFmZTA1MmQxZjBlOTMyNGFlODc2OTYxYmNkYjFwLTEsCisgICAgLTB4MS45M2NkM2EyYzgxOTkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjcwCisgICAgMHgxLjY4ZDlhZmUwNTJkMWYwZTkzMjRhZTg3Njk2MWJjZGIxcC0xLAorICAgIDB4MS45M2NkM2EyYzgxOTkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjcxCisgICAgMHgxLjc3ZTAwOGQwNzc1ZTc0NGViMTZhMmM0ZWM3MTg0YzQzcC0xLAorICAgIC0weDEuN2UyOTc5MDIzNTFlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY3MgorICAgIDB4MS43N2UwMDhkMDc3NWU3NDRlYjE2YTJjNGVjNzE4NGM0M3AtMSwKKyAgICAweDEuN2UyOTc5MDIzNTFlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY3MworICAgIDB4MS44NjNhODUwZTQzOGZlMDI5MzAyYWJhMGY1ZjEyNzYxNnAtMSwKKyAgICAtMHgxLjY4ODViN2Q3ZThhMzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzQKKyAgICAweDEuODYzYTg1MGU0MzhmZTAyOTMwMmFiYTBmNWYxMjc2MTZwLTEsCisgICAgMHgxLjY4ODViN2Q3ZThhMzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzUKKyAgICAweDEuOTNlMjk0ODIzM2ZjZTgxNDQzOWVkNTFmZDI1NDg5MjBwLTEsCisgICAgLTB4MS41MmUxZjZhZDljMjgwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjc2CisgICAgMHgxLjkzZTI5NDgyMzNmY2U4MTQ0MzllZDUxZmQyNTQ4OTIwcC0xLAorICAgIDB4MS41MmUxZjZhZDljMjgwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjc3CisgICAgMHgxLmEwZDFmOGE5YTc5MWQ0YjU2OTRjYTY4YTQyZmU2YzlicC0xLAorICAgIC0weDEuM2QzZTM1ODM0ZmFkMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY3OAorICAgIDB4MS5hMGQxZjhhOWE3OTFkNGI1Njk0Y2E2OGE0MmZlNmM5YnAtMSwKKyAgICAweDEuM2QzZTM1ODM0ZmFkMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY3OQorICAgIDB4MS5iYzZiZDg2MWUxM2RlMzA5NDI4ZTAwZjdiZWY2YzNlY3AtMSwKKyAgICAtMHgxLjBhMGIwMjUwMWM3OTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODAKKyAgICAweDEuYmM2YmQ4NjFlMTNkZTMwOTQyOGUwMGY3YmVmNmMzZWNwLTEsCisgICAgMHgxLjBhMGIwMjUwMWM3OTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODEKKyAgICAweDEuY2E1OWM2ZmEzZDljZTIzOGEyMjczOTNiNmIwNzViYzVwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjgyCisgICAgMHgxLmNhNTljNmZhM2Q5Y2UyMzhhMjI3MzkzYjZiMDc1YmM1cC0xLAorICAgIDB4MS5kOGY3MjA4ZTZiODJjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjgzCisgICAgMHgxLmQ2YzBiMTI1NzkxY2ZmY2U4M2UzMjU2NDcxMmI3OGM2cC0xLAorICAgIC0weDEuOWRkODNjN2M5ZTEyNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDY4NAorICAgIDB4MS5kNmMwYjEyNTc5MWNmZmNlODNlMzI1NjQ3MTJiNzhjNnAtMSwKKyAgICAweDEuOWRkODNjN2M5ZTEyNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDY4NQorICAgIDB4MS5lMTk2MDI2MTgyOTg1ODM5MTY0NWJiZTEyMDE5ZTU4YXAtMSwKKyAgICAtMHgxLjYyYjk1ODZhZDBhMjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODYKKyAgICAweDEuZTE5NjAyNjE4Mjk4NTgzOTE2NDViYmUxMjAxOWU1OGFwLTEsCisgICAgMHgxLjYyYjk1ODZhZDBhMjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODcKKyAgICAweDEuZWFkMDdjYzYzNTY5NjRlMjdhMTAzNmQyZjhiMTU4ZjdwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjg4CisgICAgMHgxLmVhZDA3Y2M2MzU2OTY0ZTI3YTEwMzZkMmY4YjE1OGY3cC0xLAorICAgIDB4MS4yNzlhNzQ1OTAzMzFhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjg5CisgICAgMHgxLmYyNjg0MGU3YjIxODhmN2EwY2M2NjFhMGVkZTM3MjhicC0xLAorICAgIC0weDEuZDhmNzIwOGU2YjgyOXAtMworICB9LAorICB7IC8vIEVudHJ5IDY5MAorICAgIDB4MS5mMjY4NDBlN2IyMTg4ZjdhMGNjNjYxYTBlZGUzNzI4YnAtMSwKKyAgICAweDEuZDhmNzIwOGU2YjgyOXAtMworICB9LAorICB7IC8vIEVudHJ5IDY5MQorICAgIDB4MS5mODU2ZDQ4ZGI3OTdkZWMwYjc5ZTEzNTM0MDlkYzNmMnAtMSwKKyAgICAtMHgxLjYyYjk1ODZhZDBhMWVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTIKKyAgICAweDEuZjg1NmQ0OGRiNzk3ZGVjMGI3OWUxMzUzNDA5ZGMzZjJwLTEsCisgICAgMHgxLjYyYjk1ODZhZDBhMWVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTMKKyAgICAweDEuZmM5NzI4M2E0MjQ3OTcyMTVmOGE4ZDE5Njc3MzZjOWJwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODI2cC00CisgIH0sCisgIHsgLy8gRW50cnkgNjk0CisgICAgMHgxLmZjOTcyODNhNDI0Nzk3MjE1ZjhhOGQxOTY3NzM2YzlicC0xLAorICAgIDB4MS5kOGY3MjA4ZTZiODI2cC00CisgIH0sCisgIHsgLy8gRW50cnkgNjk1CisgICAgMHgxLmZmMjU5YjdhYjlmNGY5YThjYjlmMWMzMzMyNzJlNDA5cC0xLAorICAgIC0weDEuZDhmNzIwOGU2YjgyZHAtNQorICB9LAorICB7IC8vIEVudHJ5IDY5NgorICAgIDB4MS5mZjI1OWI3YWI5ZjRmOWE4Y2I5ZjFjMzMzMjcyZTQwOXAtMSwKKyAgICAweDEuZDhmNzIwOGU2YjgyZHAtNQorICB9LAorICB7IC8vIEVudHJ5IDY5NworICAgIDB4MS5mZjI1OWI3YWI5ZjRmOWE4Y2I5ZjFjMzMzMjcyZTQwOXAtMSwKKyAgICAweDEuZDhmNzIwOGU2YjgyZHAtNQorICB9LAorICB7IC8vIEVudHJ5IDY5OAorICAgIDB4MS5mZjI1OWI3YWI5ZjRmOWE4Y2I5ZjFjMzMzMjcyZTQwOXAtMSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTkKKyAgICAweDEuZmM5NzI4M2E0MjQ3OTU4NDcyOTQ2NTRhMWQ4YTA4ZWRwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDAKKyAgICAweDEuZmM5NzI4M2E0MjQ3OTU4NDcyOTQ2NTRhMWQ4YTA4ZWRwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJkcC00CisgIH0sCisgIHsgLy8gRW50cnkgNzAxCisgICAgMHgxLmY4NTZkNDhkYjc5N2RiZmVjZmE4YjRjZDNiZTQ0MDI3cC0xLAorICAgIDB4MS42MmI5NTg2YWQwYTIycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzAyCisgICAgMHgxLmY4NTZkNDhkYjc5N2RiZmVjZmE4YjRjZDNiZTQ0MDI3cC0xLAorICAgIC0weDEuNjJiOTU4NmFkMGEyMnAtMworICB9LAorICB7IC8vIEVudHJ5IDcwMworICAgIDB4MS5mMjY4NDBlN2IyMTg4YmQwODE0ZTNkZmM3ZjZmM2Y4N3AtMSwKKyAgICAweDEuZDhmNzIwOGU2YjgyZHAtMworICB9LAorICB7IC8vIEVudHJ5IDcwNAorICAgIDB4MS5mMjY4NDBlN2IyMTg4YmQwODE0ZTNkZmM3ZjZmM2Y4N3AtMSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDUKKyAgICAweDEuZWFkMDdjYzYzNTY5NjA1NDZhZTYzNGVmNjI2MjFmYjJwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDYKKyAgICAweDEuZWFkMDdjYzYzNTY5NjA1NDZhZTYzNGVmNjI2MjFmYjJwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzA3CisgICAgMHgxLmUxOTYwMjYxODI5ODUyY2E2NjJjYTI3ZDUxOGMyZmE5cC0xLAorICAgIDB4MS42MmI5NTg2YWQwYTIycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzA4CisgICAgMHgxLmUxOTYwMjYxODI5ODUyY2E2NjJjYTI3ZDUxOGMyZmE5cC0xLAorICAgIC0weDEuNjJiOTU4NmFkMGEyMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcwOQorICAgIDB4MS5kNmMwYjEyNTc5MWNmOTgzZDUzZWZhYTdkNDVlMjkxZXAtMSwKKyAgICAweDEuOWRkODNjN2M5ZTEyOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxMAorICAgIDB4MS5kNmMwYjEyNTc5MWNmOTgzZDUzZWZhYTdkNDVlMjkxZXAtMSwKKyAgICAtMHgxLjlkZDgzYzdjOWUxMjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTEKKyAgICAweDEuY2E1OWM2ZmEzZDljZGIxNzUzMDkyN2FmZjFiMzNhYmJwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTIKKyAgICAweDEuY2E1OWM2ZmEzZDljZGIxNzUzMDkyN2FmZjFiMzNhYmJwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzEzCisgICAgMHgxLmJjNmJkODYxZTEzZGUzMDk0MjhlMDBmN2JlZjZjM2VjcC0xLAorICAgIDB4MS4wYTBiMDI1MDFjNzk5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE0CisgICAgMHgxLmJjNmJkODYxZTEzZGUzMDk0MjhlMDBmN2JlZjZjM2VjcC0xLAorICAgIC0weDEuMGEwYjAyNTAxYzc5OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxNQorICAgIDB4MS5hMGQxZjhhOWE3OTFmOWRmZjVjOTkzYWY0OTA4MjY0ZHAtMSwKKyAgICAweDEuM2QzZTM1ODM0ZmFjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcxNgorICAgIDB4MS5hMGQxZjhhOWE3OTFmOWRmZjVjOTkzYWY0OTA4MjY0ZHAtMSwKKyAgICAtMHgxLjNkM2UzNTgzNGZhY2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTcKKyAgICAweDEuOTNlMjk0ODIzM2ZkMGY2OWUzOTE4OTgyMTQ4ZjgyNjVwLTEsCisgICAgMHgxLjUyZTFmNmFkOWMyN2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTgKKyAgICAweDEuOTNlMjk0ODIzM2ZkMGY2OWUzOTE4OTgyMTQ4ZjgyNjVwLTEsCisgICAgLTB4MS41MmUxZjZhZDljMjdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE5CisgICAgMHgxLjg2M2E4NTBlNDM5MDA5OTdlNzZiZTgwNDA1NDM3Mzc3cC0xLAorICAgIDB4MS42ODg1YjdkN2U4YTJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzIwCisgICAgMHgxLjg2M2E4NTBlNDM5MDA5OTdlNzZiZTgwNDA1NDM3Mzc3cC0xLAorICAgIC0weDEuNjg4NWI3ZDdlOGEyY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcyMQorICAgIDB4MS43N2UwMDhkMDc3NWU5ZmMzOGUzZjQ5MmY4ZTkzZmY1MXAtMSwKKyAgICAweDEuN2UyOTc5MDIzNTFkY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcyMgorICAgIDB4MS43N2UwMDhkMDc3NWU5ZmMzOGUzZjQ5MmY4ZTkzZmY1MXAtMSwKKyAgICAtMHgxLjdlMjk3OTAyMzUxZGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjMKKyAgICAweDEuNjhkOWFmZTA1MmQyMWU1MDU2MGY5ZmZiNmNjMWI5NDVwLTEsCisgICAgMHgxLjkzY2QzYTJjODE5OGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjQKKyAgICAweDEuNjhkOWFmZTA1MmQyMWU1MDU2MGY5ZmZiNmNjMWI5NDVwLTEsCisgICAgLTB4MS45M2NkM2EyYzgxOThjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzI1CisgICAgMHgxLjU5MmU1OGVhMGE5ZjFiNGZkZGJhYWY4NjhmZTQ3OTExcC0xLAorICAgIDB4MS5hOTcwZmI1NmNlMTNjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzI2CisgICAgMHgxLjU5MmU1OGVhMGE5ZjFiNGZkZGJhYWY4NjhmZTQ3OTExcC0xLAorICAgIC0weDEuYTk3MGZiNTZjZTEzY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcyNworICAgIDB4MS40OGU1MmUwYTY1YmNlNGQ5ZDYyYTMxMjkzZjdkNDFjMXAtMSwKKyAgICAweDEuYmYxNGJjODExYThlY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcyOAorICAgIDB4MS40OGU1MmUwYTY1YmNlNGQ5ZDYyYTMxMjkzZjdkNDFjMXAtMSwKKyAgICAtMHgxLmJmMTRiYzgxMWE4ZWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjkKKyAgICAweDEuMzgwNWExODgyMDBhMjU0MjQ3ZjMwNDYyYzM2YWNmNmFwLTEsCisgICAgMHgxLmQ0Yjg3ZGFiNjcwOWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzAKKyAgICAweDEuMzgwNWExODgyMDBhMjU0MjQ3ZjMwNDYyYzM2YWNmNmFwLTEsCisgICAgLTB4MS5kNGI4N2RhYjY3MDljcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzMxCisgICAgMHgxLjI2OTc2YTZjNGUwZmJhYmI4NDYzMmJkOTlmZWVjOWM2cC0xLAorICAgIDB4MS5lYTVjM2VkNWIzODRjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzMyCisgICAgMHgxLjI2OTc2YTZjNGUwZmJhYmI4NDYzMmJkOTlmZWVjOWM2cC0xLAorICAgIC0weDEuZWE1YzNlZDViMzg0Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDczMworICAgIDB4MS5lOGM0MDVmMzZmODViN2Y1ZDZhMzhkZmQ0YTY5MjM0MXAtMiwKKyAgICAweDEuMTJiZDkxNzNjMDdhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzM0CisgICAgMHgxLmU4YzQwNWYzNmY4NWI3ZjVkNmEzOGRmZDRhNjkyMzQxcC0yLAorICAgIC0weDEuMTJiZDkxNzNjMDdhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzM1CisgICAgMHgxLmE1YTRjY2Y0MGQ5Y2IyNWYxNmFkOTdlNDgwYzRiNDgzcC0yLAorICAgIDB4MS4yNTdiMjJlNzgwZjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzYKKyAgICAweDEuYTVhNGNjZjQwZDljYjI1ZjE2YWQ5N2U0ODBjNGI0ODNwLTIsCisgICAgLTB4MS4yNTdiMjJlNzgwZjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzcKKyAgICAweDEuNjA0MzYyMWIxM2JkM2Y5MDRiM2I4NzZkZjViMmM2ZjRwLTIsCisgICAgMHgxLjM4MzhiNDViNDE3MDFwMAorICB9LAorICB7IC8vIEVudHJ5IDczOAorICAgIDB4MS42MDQzNjIxYjEzYmQzZjkwNGIzYjg3NmRmNWIyYzZmNHAtMiwKKyAgICAtMHgxLjM4MzhiNDViNDE3MDFwMAorICB9LAorICB7IC8vIEVudHJ5IDczOQorICAgIDB4MS4xOGZlZTk2YTFhNTc2MmZjNjc3MGZmMTY4ZTA2YWIzZXAtMiwKKyAgICAweDEuNGFmNjQ1Y2YwMWVhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNzQwCisgICAgMHgxLjE4ZmVlOTZhMWE1NzYyZmM2NzcwZmYxNjhlMDZhYjNlcC0yLAorICAgIC0weDEuNGFmNjQ1Y2YwMWVhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNzQxCisgICAgMHgxLmEwNzIzYTk1NDkyY2U5OTg0NTdmYjdhMGQwOWE2Mzg1cC0zLAorICAgIDB4MS41ZGIzZDc0MmMyNjU3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDIKKyAgICAweDEuYTA3MjNhOTU0OTJjZTk5ODQ1N2ZiN2EwZDA5YTYzODVwLTMsCisgICAgLTB4MS41ZGIzZDc0MmMyNjU3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDMKKyAgICAweDEuMGNhYjkxMTU2NDBiOWQ5ZDQ2NjcyM2JiZDVkNTg5YmVwLTMsCisgICAgMHgxLjcwNzE2OGI2ODJlMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDc0NAorICAgIDB4MS4wY2FiOTExNTY0MGI5ZDlkNDY2NzIzYmJkNWQ1ODliZXAtMywKKyAgICAtMHgxLjcwNzE2OGI2ODJlMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDc0NQorICAgIDB4MS5kZGQxZWMyNWUyMDFmNTM4OTI1YmY1YmNmN2M3ZGY2ZXAtNSwKKyAgICAweDEuODMyZWZhMmE0MzVhZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQ2CisgICAgMHgxLmRkZDFlYzI1ZTIwMWY1Mzg5MjViZjViY2Y3YzdkZjZlcC01LAorICAgIC0weDEuODMyZWZhMmE0MzVhZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQ3CisgICAgLTB4MS5lNjY2OWEyNzBjNTZkM2EwOGQ5MWNjMjcyMWY5MmZlMXAtNywKKyAgICAweDEuOTVlYzhiOWUwM2Q1OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQ4CisgICAgLTB4MS5lNjY2OWEyNzBjNTZkM2EwOGQ5MWNjMjcyMWY5MmZlMXAtNywKKyAgICAtMHgxLjk1ZWM4YjllMDNkNThwMAorICB9LAorICB7IC8vIEVudHJ5IDc0OQorICAgIC0weDEuNjgyZjNjYzNjN2EwOGRhMmNlMDJhNDFjZGM3YmVkODZwLTQsCisgICAgMHgxLmE4YWExZDExYzQ0ZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDc1MAorICAgIC0weDEuNjgyZjNjYzNjN2EwOGRhMmNlMDJhNDFjZGM3YmVkODZwLTQsCisgICAgLTB4MS5hOGFhMWQxMWM0NGZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTEKKyAgICAweDEuMGNiMzQ2OWEyOWVhNjZkNDAzMWJlNzY5NzAyYWFkNWNwLTEsCisgICAgMHgxLjA0YWZmNmQzMzA5NDJwMAorICB9LAorICB7IC8vIEVudHJ5IDc1MgorICAgIDB4MS4wY2IzNDY5YTI5ZWE2NmQ0MDMxYmU3Njk3MDJhYWQ1Y3AtMSwKKyAgICAtMHgxLjA0YWZmNmQzMzA5NDJwMAorICB9LAorICB7IC8vIEVudHJ5IDc1MworICAgIDB4MS4wY2IyMjhmYTdmODExN2M4MmU2MWNmNTM5MzM0MWM2NHAtMSwKKyAgICAweDEuMDRiMDllOThkY2RiNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzU0CisgICAgMHgxLjBjYjIyOGZhN2Y4MTE3YzgyZTYxY2Y1MzkzMzQxYzY0cC0xLAorICAgIC0weDEuMDRiMDllOThkY2RiNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzU1CisgICAgMHgxLjBjYjEwYjVhNjFiMDVhNzNlNzhhM2U0NDQ3YmFmNTE0cC0xLAorICAgIDB4MS4wNGIxNDY1ZTg5MjI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTYKKyAgICAweDEuMGNiMTBiNWE2MWIwNWE3M2U3OGEzZTQ0NDdiYWY1MTRwLTEsCisgICAgLTB4MS4wNGIxNDY1ZTg5MjI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTcKKyAgICAweDEuMGNhZmVkYjlkMDc4YTk4NDA4NjkyOGFhNDBkMmU0YTVwLTEsCisgICAgMHgxLjA0YjFlZTI0MzU2OThwMAorICB9LAorICB7IC8vIEVudHJ5IDc1OAorICAgIDB4MS4wY2FmZWRiOWQwNzhhOTg0MDg2OTI4YWE0MGQyZTRhNXAtMSwKKyAgICAtMHgxLjA0YjFlZTI0MzU2OThwMAorICB9LAorICB7IC8vIEVudHJ5IDc1OQorICAgIDB4MS4wY2FlZDAxOGNiZGE3ZmE1OWM2MzFjZDU1YjMxYWE4ZHAtMSwKKyAgICAweDEuMDRiMjk1ZTllMWIwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzYwCisgICAgMHgxLjBjYWVkMDE4Y2JkYTdmYTU5YzYzMWNkNTViMzFhYThkcC0xLAorICAgIC0weDEuMDRiMjk1ZTllMWIwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzYxCisgICAgMHgxLjBjYWRiMjc3NTNkNjU3ODVlMDZkMGU0NjQwMDYxNDllcC0xLAorICAgIDB4MS4wNGIzM2RhZjhkZjdjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjIKKyAgICAweDEuMGNhZGIyNzc1M2Q2NTc4NWUwNmQwZTQ2NDAwNjE0OWVwLTEsCisgICAgLTB4MS4wNGIzM2RhZjhkZjdjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjMKKyAgICAweDEuMGNhYzk0ZDU2ODZjYWJkMjQzMGMyMGZkZjI4NTViNDdwLTEsCisgICAgMHgxLjA0YjNlNTc1M2EzZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDc2NAorICAgIDB4MS4wY2FjOTRkNTY4NmNhYmQyNDMwYzIwZmRmMjg1NWI0N3AtMSwKKyAgICAtMHgxLjA0YjNlNTc1M2EzZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDc2NQorICAgIDB4MS4wY2FiNzczMzA5OWRmNzM4NjQ1NTc0Y2Q0ODJlZjRiMnAtMSwKKyAgICAweDEuMDRiNDhkM2FlNjg2MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzY2CisgICAgMHgxLjBjYWI3NzMzMDk5ZGY3Mzg2NDU1NzRjZDQ4MmVmNGIycC0xLAorICAgIC0weDEuMDRiNDhkM2FlNjg2MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzY3CisgICAgMHgxLjBjYWE1OTkwMzc2YjA2MWVjMWNmMzg5MGYxYjhlMWUzcC0xLAorICAgIDB4MS4wNGI1MzUwMDkyY2NmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjgKKyAgICAweDEuMGNhYTU5OTAzNzZiMDYxZWMxY2YzODkwZjFiOGUxZTNwLTEsCisgICAgLTB4MS4wNGI1MzUwMDkyY2NmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNzcwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNzcxCisgICAgMHgxLnAwLAorICAgIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzIKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNzc0CisgICAgMHgxLmFkMDJjNzcxYzM1ZWQ1ZjAxMDg5YTAwYzZhMjdlMGNmcC0xLAorICAgIDB4MS4yNzlhNzQ1OTAzMzFicC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzc1CisgICAgMHgxLmFkMDJjNzcxYzM1ZWQ1ZjAxMDg5YTAwYzZhMjdlMGNmcC0xLAorICAgIC0weDEuMjc5YTc0NTkwMzMxYnAtMQorICB9LAorICB7IC8vIEVudHJ5IDc3NgorICAgIDB4MS5hZDAyYzc3MWMzNWVjZDM0NzFkZTkwMjFlNmMzYjkyYnAtMSwKKyAgICAweDEuMjc5YTc0NTkwMzMxY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc3NworICAgIDB4MS5hZDAyYzc3MWMzNWVjZDM0NzFkZTkwMjFlNmMzYjkyYnAtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzgKKyAgICAweDEuYWQwMmM3NzFjMzVlYzQ3OGQzMzM4MDM3NjJmNDUwZDVwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzkKKyAgICAweDEuYWQwMmM3NzFjMzVlYzQ3OGQzMzM4MDM3NjJmNDUwZDVwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzgwCisgICAgLTB4MS40OGQxZGRkMmIyYjNmOGMyMWI5NDIxZTY1YjM4MDczNXAtMywKKyAgICAweDEuYmI2N2FlODU4NGNhOXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzgxCisgICAgLTB4MS40OGQxZGRkMmIyYjNmOGMyMWI5NDIxZTY1YjM4MDczNXAtMywKKyAgICAtMHgxLmJiNjdhZTg1ODRjYTlwMAorICB9LAorICB7IC8vIEVudHJ5IDc4MgorICAgIC0weDEuNDhkMWRkZDJiMmI0NzcxOGZmMzA2M2I2YmQ5ODEwOTlwLTMsCisgICAgMHgxLmJiNjdhZTg1ODRjYWFwMAorICB9LAorICB7IC8vIEVudHJ5IDc4MworICAgIC0weDEuNDhkMWRkZDJiMmI0NzcxOGZmMzA2M2I2YmQ5ODEwOTlwLTMsCisgICAgLTB4MS5iYjY3YWU4NTg0Y2FhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODQKKyAgICAtMHgxLjQ4ZDFkZGQyYjJiNGY1NmZlMmNjYTU4NzFlYWY0ODIwcC0zLAorICAgIDB4MS5iYjY3YWU4NTg0Y2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODUKKyAgICAtMHgxLjQ4ZDFkZGQyYjJiNGY1NmZlMmNjYTU4NzFlYWY0ODIwcC0zLAorICAgIC0weDEuYmI2N2FlODU4NGNhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzg2CisgICAgMHgxLmNmYzZjZmE1MmFkOWY5OTExZGI0Y2EwZDQ1ZmRiMGIzcC0xLAorICAgIDB4MS5iZmZmZmZmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzg3CisgICAgMHgxLmNmYzZjZmE1MmFkOWY5OTExZGI0Y2EwZDQ1ZmRiMGIzcC0xLAorICAgIC0weDEuYmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDc4OAorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmNjJkNmQ1NDIzY2E4MzM5YTAwYXAtMSwKKyAgICAweDEuY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDc4OQorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmNjJkNmQ1NDIzY2E4MzM5YTAwYXAtMSwKKyAgICAtMHgxLmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTAKKyAgICAweDEuY2ZjNmNmYTUyYWQ5ZjJjOWJjZjM3ZDg3YzA1ODkyZjVwLTEsCisgICAgMHgxLmMwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTEKKyAgICAweDEuY2ZjNmNmYTUyYWQ5ZjJjOWJjZjM3ZDg3YzA1ODkyZjVwLTEsCisgICAgLTB4MS5jMDAwMDAwMDAwMDAxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzkyCisgICAgMHgxLjhiYjEwNWE1ZGM5MDEwNDA1MWQwOGNiOTY1NjMxODA3cC0xLAorICAgIDB4MS41ZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzkzCisgICAgMHgxLjhiYjEwNWE1ZGM5MDEwNDA1MWQwOGNiOTY1NjMxODA3cC0xLAorICAgIC0weDEuNWZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDc5NAorICAgIDB4MS44YmIxMDVhNWRjOTAwNjE4ZjgwZmE1MWQzMDNjNjlwLTEsCisgICAgMHgxLjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTUKKyAgICAweDEuOGJiMTA1YTVkYzkwMDYxOGY4MGZhNTFkMzAzYzY5cC0xLAorICAgIC0weDEuNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDc5NgorICAgIDB4MS44YmIxMDVhNWRjOGZmYmYxOWU0ZWJkODBmYWIyY2RiOHAtMSwKKyAgICAweDEuNjAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDc5NworICAgIDB4MS44YmIxMDVhNWRjOGZmYmYxOWU0ZWJkODBmYWIyY2RiOHAtMSwKKyAgICAtMHgxLjYwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTgKKyAgICAweDEuN2VmNDg0MmYwYmNkMTE2ODZhYWY2ZjIxYzlhYTgzNTRwLTIsCisgICAgMHgxLjJmZmZmZmZmZmZmZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDc5OQorICAgIDB4MS43ZWY0ODQyZjBiY2QxMTY4NmFhZjZmMjFjOWFhODM1NHAtMiwKKyAgICAtMHgxLjJmZmZmZmZmZmZmZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDgwMAorICAgIDB4MS43ZWY0ODQyZjBiY2NkNjBkNGE1MDFkYzhiYzRiNTdiM3AtMiwKKyAgICAweDEuM3AwCisgIH0sCisgIHsgLy8gRW50cnkgODAxCisgICAgMHgxLjdlZjQ4NDJmMGJjY2Q2MGQ0YTUwMWRjOGJjNGI1N2IzcC0yLAorICAgIC0weDEuM3AwCisgIH0sCisgIHsgLy8gRW50cnkgODAyCisgICAgMHgxLjdlZjQ4NDJmMGJjYzlhYjIyOWYwY2M2ZmFkNmQzNzhkcC0yLAorICAgIDB4MS4zMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDMKKyAgICAweDEuN2VmNDg0MmYwYmNjOWFiMjI5ZjBjYzZmYWQ2ZDM3OGRwLTIsCisgICAgLTB4MS4zMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDQKKyAgICAtMHgxLjg2M2VmYTM2MWRjMjI5NGU5MjliOTUxNWZiMzRmOWJhcC0xLAorICAgIDB4MS4zN2ZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDUKKyAgICAtMHgxLjg2M2VmYTM2MWRjMjI5NGU5MjliOTUxNWZiMzRmOWJhcC0xLAorICAgIC0weDEuMzdmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgODA2CisgICAgLTB4MS44NjNlZmEzNjFkYzI1MmJjYTFlYWVlZDM5NzQ5YmVkN3AtMSwKKyAgICAweDEuMzgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDcKKyAgICAtMHgxLjg2M2VmYTM2MWRjMjUyYmNhMWVhZWVkMzk3NDliZWQ3cC0xLAorICAgIC0weDEuMzgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDgKKyAgICAtMHgxLjg2M2VmYTM2MWRjMjdjMmFiMTNhNDg5MTJkNDU4ODBicC0xLAorICAgIDB4MS4zODAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDkKKyAgICAtMHgxLjg2M2VmYTM2MWRjMjdjMmFiMTNhNDg5MTJkNDU4ODBicC0xLAorICAgIC0weDEuMzgwMDAwMDAwMDAwMXAxCisgIH0sCisgIHsgLy8gRW50cnkgODEwCisgICAgMHgxLmZlZjJiMmQyMWNmNmMxMDZlODZmZjkzOTVmODIwNGEwcC0xLAorICAgIDB4MS4wNjljOGI0NmIzNzkycC00CisgIH0sCisgIHsgLy8gRW50cnkgODExCisgICAgMHgxLmZlZjJiMmQyMWNmNmMxMDZlODZmZjkzOTVmODIwNGEwcC0xLAorICAgIC0weDEuMDY5YzhiNDZiMzc5MnAtNAorICB9LAorICB7IC8vIEVudHJ5IDgxMgorICAgIDB4MS5mYmNiZTY5M2JkOGVjODU3MjNiNmNiNTVlNGY1ZTc4ZnAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzc5MnAtMworICB9LAorICB7IC8vIEVudHJ5IDgxMworICAgIDB4MS5mYmNiZTY5M2JkOGVjODU3MjNiNmNiNTVlNGY1ZTc4ZnAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTQKKyAgICAweDEuZjY4ZWViZmNiYjVlODQxOTAwZTI1NDJmN2MyNGJhYjBwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTUKKyAgICAweDEuZjY4ZWViZmNiYjVlODQxOTAwZTI1NDJmN2MyNGJhYjBwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzVicC0zCisgIH0sCisgIHsgLy8gRW50cnkgODE2CisgICAgMHgxLmVmNDE0NWI0YWVjZmZiZGFhZmZiNzhmZmI0OWFjOWJkcC0xLAorICAgIDB4MS4wNjljOGI0NmIzNzkycC0yCisgIH0sCisgIHsgLy8gRW50cnkgODE3CisgICAgMHgxLmVmNDE0NWI0YWVjZmZiZGFhZmZiNzhmZmI0OWFjOWJkcC0xLAorICAgIC0weDEuMDY5YzhiNDZiMzc5MnAtMgorICB9LAorICB7IC8vIEVudHJ5IDgxOAorICAgIDB4MS5lNWVhYTI4NmZiYmM2NzBkYmY2MzkyZDdjOThhYjBhMHAtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU3NnAtMgorICB9LAorICB7IC8vIEVudHJ5IDgxOQorICAgIDB4MS5lNWVhYTI4NmZiYmM2NzBkYmY2MzkyZDdjOThhYjBhMHAtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjAKKyAgICAweDEuZGE5NGQ1NGRkNGMwODc2ZTE4ZWU5N2M3MGQxYTRhOTRwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjEKKyAgICAweDEuZGE5NGQ1NGRkNGMwODc2ZTE4ZWU5N2M3MGQxYTRhOTRwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzVhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgODIyCisgICAgMHgxLmNkNGJjYTljYjVjNzE1MzAyMDAxZTQ0NmNjOTNhN2JjcC0xLAorICAgIDB4MS5jYjkxZjNiYmJhMTNlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgODIzCisgICAgMHgxLmNkNGJjYTljYjVjNzE1MzAyMDAxZTQ0NmNjOTNhN2JjcC0xLAorICAgIC0weDEuY2I5MWYzYmJiYTEzZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDgyNAorICAgIDB4MS5iZTFkN2MzNTM0YzQwMzMxZmRkZjI0M2Q4YTBhNTZiMHAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzc5MXAtMQorICB9LAorICB7IC8vIEVudHJ5IDgyNQorICAgIDB4MS5iZTFkN2MzNTM0YzQwMzMxZmRkZjI0M2Q4YTBhNTZiMHAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjYKKyAgICAweDEuYWQxOWUyNTM1YWE5Njc4YmQ1ZmRhZmM2ODgxNzcwMGJwLTEsCisgICAgMHgxLjI3NzAxY2FmODllODNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjcKKyAgICAweDEuYWQxOWUyNTM1YWE5Njc4YmQ1ZmRhZmM2ODgxNzcwMGJwLTEsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTgzcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODI4CisgICAgMHgxLjlhNTJlMmUwZmJjYjNhM2Y0YmRlNmY2ZWMyNzc2N2E5cC0xLAorICAgIDB4MS40ODQzYWUxODYwNTc1cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODI5CisgICAgMHgxLjlhNTJlMmUwZmJjYjNhM2Y0YmRlNmY2ZWMyNzc2N2E5cC0xLAorICAgIC0weDEuNDg0M2FlMTg2MDU3NXAtMQorICB9LAorICB7IC8vIEVudHJ5IDgzMAorICAgIDB4MS44NWRjM2VhMWJiY2U5YTgwODVmNjY1OTNhODdiN2UyZXAtMSwKKyAgICAweDEuNjkxNzNmODEzNmM2N3AtMQorICB9LAorICB7IC8vIEVudHJ5IDgzMQorICAgIDB4MS44NWRjM2VhMWJiY2U5YTgwODVmNjY1OTNhODdiN2UyZXAtMSwKKyAgICAtMHgxLjY5MTczZjgxMzZjNjdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzIKKyAgICAweDEuNmZjYjdjNmI4YjkxOWFmM2RkYTUzMDk0YzlhMjdhYWJwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzNTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzMKKyAgICAweDEuNmZjYjdjNmI4YjkxOWFmM2RkYTUzMDk0YzlhMjdhYWJwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzU5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODM0CisgICAgMHgxLjU4MzdkMjgxN2NmMzAzZWY2ZGFlNjlmYWViMGYwMTVlcC0xLAorICAgIDB4MS5hYWJlNjI1MmUzYTRicC0xCisgIH0sCisgIHsgLy8gRW50cnkgODM1CisgICAgMHgxLjU4MzdkMjgxN2NmMzAzZWY2ZGFlNjlmYWViMGYwMTVlcC0xLAorICAgIC0weDEuYWFiZTYyNTJlM2E0YnAtMQorICB9LAorICB7IC8vIEVudHJ5IDgzNgorICAgIDB4MS4zZjNhMGUyOGJlZGQ0MDQ0NTg1OGY4MjNlMTUwMjY0YnAtMSwKKyAgICAweDEuY2I5MWYzYmJiYTEzZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDgzNworICAgIDB4MS4zZjNhMGUyOGJlZGQ0MDQ0NTg1OGY4MjNlMTUwMjY0YnAtMSwKKyAgICAtMHgxLmNiOTFmM2JiYmExM2RwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzgKKyAgICAweDEuMjRlYzc5OTE3MTY0MmRiZDI0ZDI1OTAwNTgyMmJkMjVwLTEsCisgICAgMHgxLmVjNjU4NTI0OTA4MmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzkKKyAgICAweDEuMjRlYzc5OTE3MTY0MmRiZDI0ZDI1OTAwNTgyMmJkMjVwLTEsCisgICAgLTB4MS5lYzY1ODUyNDkwODJmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODQwCisgICAgMHgxLjA5NmFjMDJlYzQyYzg1YjdiMTBhZmVkOTIwMjc4NWI5cC0xLAorICAgIDB4MS4wNjljOGI0NmIzNzkxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDEKKyAgICAweDEuMDk2YWMwMmVjNDJjODViN2IxMGFmZWQ5MjAyNzg1YjlwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzNzkxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDIKKyAgICAweDEuZDlhM2EzMzZlZGI3NjEzZGYwNjJlODZhMzJkMDlmZTFwLTIsCisgICAgMHgxLjE3MDY1M2ZiMWViMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDg0MworICAgIDB4MS5kOWEzYTMzNmVkYjc2MTNkZjA2MmU4NmEzMmQwOWZlMXAtMiwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDg0NAorICAgIDB4MS45ZTdmODY1MmI0NzU4MmFmZDI5NzQ0MjkzMTcwYzA3Y3AtMiwKKyAgICAweDEuMjc3MDFjYWY4OWU4M3AwCisgIH0sCisgIHsgLy8gRW50cnkgODQ1CisgICAgMHgxLjllN2Y4NjUyYjQ3NTgyYWZkMjk3NDQyOTMxNzBjMDdjcC0yLAorICAgIC0weDEuMjc3MDFjYWY4OWU4M3AwCisgIH0sCisgIHsgLy8gRW50cnkgODQ2CisgICAgMHgxLjYxYTc2MDc3YWVlMDdiYjM0OWNhNzZjZjcwMDkxM2QxcC0yLAorICAgIDB4MS4zN2Q5ZTU2M2Y1MWZjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDcKKyAgICAweDEuNjFhNzYwNzdhZWUwN2JiMzQ5Y2E3NmNmNzAwOTEzZDFwLTIsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MWZjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDgKKyAgICAweDEuMjM1YjMzMWQ4Zjc0OGUyMGZiNmRkYjZhNzA4ZGJhMTBwLTIsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzVwMAorICB9LAorICB7IC8vIEVudHJ5IDg0OQorICAgIDB4MS4yMzViMzMxZDhmNzQ4ZTIwZmI2ZGRiNmE3MDhkYmExMHAtMiwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzVwMAorICB9LAorICB7IC8vIEVudHJ5IDg1MAorICAgIDB4MS5jN2I5MGUzMDI0NTkzZGE4NDQ5OTYzY2ZlMDhkZGU4NXAtMywKKyAgICAweDEuNThhZDc2Y2NjYjhlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgODUxCisgICAgMHgxLmM3YjkwZTMwMjQ1OTNkYTg0NDk5NjNjZmUwOGRkZTg1cC0zLAorICAgIC0weDEuNThhZDc2Y2NjYjhlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgODUyCisgICAgMHgxLjQ2ZGM0ZjRjZTgzZGE3MjdlYTA0OGNjN2QyZjI3NmQxcC0zLAorICAgIDB4MS42OTE3M2Y4MTM2YzY3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTMKKyAgICAweDEuNDZkYzRmNGNlODNkYTcyN2VhMDQ4Y2M3ZDJmMjc2ZDFwLTMsCisgICAgLTB4MS42OTE3M2Y4MTM2YzY3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTQKKyAgICAweDEuODk0ZjcwYmVmYmI5OWFiN2RmOWQxNzkwYTI4ZjQ4YWRwLTQsCisgICAgMHgxLjc5ODEwODM1YTFmZTBwMAorICB9LAorICB7IC8vIEVudHJ5IDg1NQorICAgIDB4MS44OTRmNzBiZWZiYjk5YWI3ZGY5ZDE3OTBhMjhmNDhhZHAtNCwKKyAgICAtMHgxLjc5ODEwODM1YTFmZTBwMAorICB9LAorICB7IC8vIEVudHJ5IDg1NgorICAgIDB4MS4wNjkxMDdhZTkzMzJmOTVmYTJjNWNlZWFkZmIyOWY3N3AtNSwKKyAgICAweDEuODllYWQwZWEwZDM1OXAwCisgIH0sCisgIHsgLy8gRW50cnkgODU3CisgICAgMHgxLjA2OTEwN2FlOTMzMmY5NWZhMmM1Y2VlYWRmYjI5Zjc3cC01LAorICAgIC0weDEuODllYWQwZWEwZDM1OXAwCisgIH0sCisgIHsgLy8gRW50cnkgODU4CisgICAgLTB4MS4wNjkxMDdhZTkzMjdlMDczMWE3NDhjMjFmMDNiNWVmY3AtNSwKKyAgICAweDEuOWE1NDk5OWU3ODZkMnAwCisgIH0sCisgIHsgLy8gRW50cnkgODU5CisgICAgLTB4MS4wNjkxMDdhZTkzMjdlMDczMWE3NDhjMjFmMDNiNWVmY3AtNSwKKyAgICAtMHgxLjlhNTQ5OTllNzg2ZDJwMAorICB9LAorICB7IC8vIEVudHJ5IDg2MAorICAgIC0weDEuODk0ZjcwYmVmYmI0MTQxN2RmZjg0M2U4MWZhYzM4OGJwLTQsCisgICAgMHgxLmFhYmU2MjUyZTNhNGJwMAorICB9LAorICB7IC8vIEVudHJ5IDg2MQorICAgIC0weDEuODk0ZjcwYmVmYmI0MTQxN2RmZjg0M2U4MWZhYzM4OGJwLTQsCisgICAgLTB4MS5hYWJlNjI1MmUzYTRicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjIKKyAgICAtMHgxLjQ2ZGM0ZjRjZTgzYWU5YWIxY2MxYjIzNjdjYjc1M2VicC0zLAorICAgIDB4MS5iYjI4MmIwNzRlZGM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjMKKyAgICAtMHgxLjQ2ZGM0ZjRjZTgzYWU5YWIxY2MxYjIzNjdjYjc1M2VicC0zLAorICAgIC0weDEuYmIyODJiMDc0ZWRjNHAwCisgIH0sCisgIHsgLy8gRW50cnkgODY0CisgICAgLTB4MS5jN2I5MGUzMDI0NTY4OGUwOTk4NjBlOGQ0ZmZmNjAxY3AtMywKKyAgICAweDEuY2I5MWYzYmJiYTEzZHAwCisgIH0sCisgIHsgLy8gRW50cnkgODY1CisgICAgLTB4MS5jN2I5MGUzMDI0NTY4OGUwOTk4NjBlOGQ0ZmZmNjAxY3AtMywKKyAgICAtMHgxLmNiOTFmM2JiYmExM2RwMAorICB9LAorICB7IC8vIEVudHJ5IDg2NgorICAgIC0weDEuMjM1YjMzMWQ4ZjczMzk4NDFhNTE3MzEyZDBkMzQ3ZmJwLTIsCisgICAgMHgxLmRiZmJiYzcwMjU0YjZwMAorICB9LAorICB7IC8vIEVudHJ5IDg2NworICAgIC0weDEuMjM1YjMzMWQ4ZjczMzk4NDFhNTE3MzEyZDBkMzQ3ZmJwLTIsCisgICAgLTB4MS5kYmZiYmM3MDI1NGI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjgKKyAgICAtMHgxLjYxYTc2MDc3YWVkZjJlNDNhY2E0MThmN2EyZTEzMjRkcC0yLAorICAgIDB4MS5lYzY1ODUyNDkwODJmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjkKKyAgICAtMHgxLjYxYTc2MDc3YWVkZjJlNDNhY2E0MThmN2EyZTEzMjRkcC0yLAorICAgIC0weDEuZWM2NTg1MjQ5MDgyZnAwCisgIH0sCisgIHsgLy8gRW50cnkgODcwCisgICAgLTB4MS45ZTdmODY1MmI0NzQzZGNjM2MzNTY4YmFmZjhiZjllYnAtMiwKKyAgICAweDEuZmNjZjRkZDhmYmJhOHAwCisgIH0sCisgIHsgLy8gRW50cnkgODcxCisgICAgLTB4MS45ZTdmODY1MmI0NzQzZGNjM2MzNTY4YmFmZjhiZjllYnAtMiwKKyAgICAtMHgxLmZjY2Y0ZGQ4ZmJiYThwMAorICB9LAorICB7IC8vIEVudHJ5IDg3MgorICAgIC0weDEuZDlhM2EzMzZlZGI2NWVmYTMwZTFhNjY3OWFhMDY0YzJwLTIsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTFwMQorICB9LAorICB7IC8vIEVudHJ5IDg3MworICAgIC0weDEuZDlhM2EzMzZlZGI2NWVmYTMwZTFhNjY3OWFhMDY0YzJwLTIsCisgICAgLTB4MS4wNjljOGI0NmIzNzkxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzQKKyAgICAtMHgxLjA5NmFjMDJlYzQyYzI0ODgwYTU5NTE3ODhjYjM4M2M4cC0xLAorICAgIDB4MS4wZWQxNmZhMGU5MTRlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzUKKyAgICAtMHgxLjA5NmFjMDJlYzQyYzI0ODgwYTU5NTE3ODhjYjM4M2M4cC0xLAorICAgIC0weDEuMGVkMTZmYTBlOTE0ZXAxCisgIH0sCisgIHsgLy8gRW50cnkgODc2CisgICAgLTB4MS4yNGVjNzk5MTcxNjNkZGE2NWFmZDgxMDlmNTljYjQ2NXAtMSwKKyAgICAweDEuMTcwNjUzZmIxZWIwYnAxCisgIH0sCisgIHsgLy8gRW50cnkgODc3CisgICAgLTB4MS4yNGVjNzk5MTcxNjNkZGE2NWFmZDgxMDlmNTljYjQ2NXAtMSwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMGJwMQorICB9LAorICB7IC8vIEVudHJ5IDg3OAorICAgIC0weDEuM2YzYTBlMjhiZWRkMGNmMGM0YmZiZDhjODJhM2JhYWZwLTEsCisgICAgMHgxLjFmM2IzODU1NTQ0YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDg3OQorICAgIC0weDEuM2YzYTBlMjhiZWRkMGNmMGM0YmZiZDhjODJhM2JhYWZwLTEsCisgICAgLTB4MS4xZjNiMzg1NTU0NGM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODAKKyAgICAtMHgxLjU4MzdkMjgxN2NmMmViMDY5MDM1NTUyZGMzYWU4MzRjcC0xLAorICAgIDB4MS4yNzcwMWNhZjg5ZTg1cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODEKKyAgICAtMHgxLjU4MzdkMjgxN2NmMmViMDY5MDM1NTUyZGMzYWU4MzRjcC0xLAorICAgIC0weDEuMjc3MDFjYWY4OWU4NXAxCisgIH0sCisgIHsgLy8gRW50cnkgODgyCisgICAgLTB4MS42ZmNiN2M2YjhiOTE5OWNlMmYxN2RkM2VlODZiM2I5YXAtMSwKKyAgICAweDEuMmZhNTAxMDliZjg0MnAxCisgIH0sCisgIHsgLy8gRW50cnkgODgzCisgICAgLTB4MS42ZmNiN2M2YjhiOTE5OWNlMmYxN2RkM2VlODZiM2I5YXAtMSwKKyAgICAtMHgxLjJmYTUwMTA5YmY4NDJwMQorICB9LAorICB7IC8vIEVudHJ5IDg4NAorICAgIC0weDEuODVkYzNlYTFiYmNlYWUyZDI5NDQyMWU4YzczNTBmOGNwLTEsCisgICAgMHgxLjM3ZDllNTYzZjUxZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDg4NQorICAgIC0weDEuODVkYzNlYTFiYmNlYWUyZDI5NDQyMWU4YzczNTBmOGNwLTEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MWZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODYKKyAgICAtMHgxLjlhNTJlMmUwZmJjYjVmOGEzZjU1YzI3NGY5ZWM3NTRicC0xLAorICAgIDB4MS40MDBlYzliZTJhYmJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODcKKyAgICAtMHgxLjlhNTJlMmUwZmJjYjVmOGEzZjU1YzI3NGY5ZWM3NTRicC0xLAorICAgIC0weDEuNDAwZWM5YmUyYWJiY3AxCisgIH0sCisgIHsgLy8gRW50cnkgODg4CisgICAgLTB4MS5hZDE5ZTI1MzVhYTk5YjA0OWFjMGI1ODU4YzVkMzgxZnAtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU3OXAxCisgIH0sCisgIHsgLy8gRW50cnkgODg5CisgICAgLTB4MS5hZDE5ZTI1MzVhYTk5YjA0OWFjMGI1ODU4YzVkMzgxZnAtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzlwMQorICB9LAorICB7IC8vIEVudHJ5IDg5MAorICAgIC0weDEuYmUxZDdjMzUzNGM0NDEzMmFiMWM0MTMwY2JlOWRmYTBwLTEsCisgICAgMHgxLjUwNzg5MjcyOTVmMzZwMQorICB9LAorICB7IC8vIEVudHJ5IDg5MQorICAgIC0weDEuYmUxZDdjMzUzNGM0NDEzMmFiMWM0MTMwY2JlOWRmYTBwLTEsCisgICAgLTB4MS41MDc4OTI3Mjk1ZjM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTIKKyAgICAtMHgxLmNkNGJjYTljYjVjNzU5ZTRkNmRjODYwMWVjM2Q4NGI2cC0xLAorICAgIDB4MS41OGFkNzZjY2NiOGYzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTMKKyAgICAtMHgxLmNkNGJjYTljYjVjNzU5ZTRkNmRjODYwMWVjM2Q4NGI2cC0xLAorICAgIC0weDEuNThhZDc2Y2NjYjhmM3AxCisgIH0sCisgIHsgLy8gRW50cnkgODk0CisgICAgLTB4MS5kYTk0ZDU0ZGQ0YzBjZWRjY2Q3MzY4NDk5NDQyMjc0MHAtMSwKKyAgICAweDEuNjBlMjViMjcwMTJiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODk1CisgICAgLTB4MS5kYTk0ZDU0ZGQ0YzBjZWRjY2Q3MzY4NDk5NDQyMjc0MHAtMSwKKyAgICAtMHgxLjYwZTI1YjI3MDEyYjBwMQorICB9LAorICB7IC8vIEVudHJ5IDg5NgorICAgIC0weDEuZTVlYWEyODZmYmJjYWQxZTRhNjM3MzM5MmU2Nzk2NjlwLTEsCisgICAgMHgxLjY5MTczZjgxMzZjNmRwMQorICB9LAorICB7IC8vIEVudHJ5IDg5NworICAgIC0weDEuZTVlYWEyODZmYmJjYWQxZTRhNjM3MzM5MmU2Nzk2NjlwLTEsCisgICAgLTB4MS42OTE3M2Y4MTM2YzZkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTgKKyAgICAtMHgxLmVmNDE0NWI0YWVkMDNjNWYxZDM5NzYzYjFlZWU2ZWQ4cC0xLAorICAgIDB4MS43MTRjMjNkYjZjNjJhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTkKKyAgICAtMHgxLmVmNDE0NWI0YWVkMDNjNWYxZDM5NzYzYjFlZWU2ZWQ4cC0xLAorICAgIC0weDEuNzE0YzIzZGI2YzYyYXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTAwCisgICAgLTB4MS5mNjhlZWJmY2JiNWViYTEyNGQ4Y2M0OGZkMWJlYjA0ZHAtMSwKKyAgICAweDEuNzk4MTA4MzVhMWZlN3AxCisgIH0sCisgIHsgLy8gRW50cnkgOTAxCisgICAgLTB4MS5mNjhlZWJmY2JiNWViYTEyNGQ4Y2M0OGZkMWJlYjA0ZHAtMSwKKyAgICAtMHgxLjc5ODEwODM1YTFmZTdwMQorICB9LAorICB7IC8vIEVudHJ5IDkwMgorICAgIC0weDEuZmJjYmU2OTNiZDhlZjAwNmY1ZmYwMjIxMGRmZTA2MTlwLTEsCisgICAgMHgxLjgxYjVlYzhmZDc5YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDkwMworICAgIC0weDEuZmJjYmU2OTNiZDhlZjAwNmY1ZmYwMjIxMGRmZTA2MTlwLTEsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OWE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDQKKyAgICAtMHgxLmZlZjJiMmQyMWNmNmJlMWEyYzdlYTY2NWVmMWY4NzRlcC0xLAorICAgIDB4MS44OWVhZDBlYTBkMzVicDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDUKKyAgICAtMHgxLmZlZjJiMmQyMWNmNmJlMWEyYzdlYTY2NWVmMWY4NzRlcC0xLAorICAgIC0weDEuODllYWQwZWEwZDM1YnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTA2CisgICAgMHgxLmVmNDE0NWI0YWVjZmY2ZjU4ZWRlY2YyNDk1NTQyOGMxcC0xLAorICAgIC0weDEuODFiNWVjOGZkNzk5ZnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTA3CisgICAgMHgxLmVmNDE0NWI0YWVjZmY2ZjU4ZWRlY2YyNDk1NTQyOGMxcC0xLAorICAgIDB4MS44MWI1ZWM4ZmQ3OTlmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDgKKyAgICAweDEuYmUxZDdjMzUzNGMzZjliOWIzNTYxOTI4MDA0OWRlODVwLTEsCisgICAgLTB4MS43MTRjMjNkYjZjNjI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDkKKyAgICAweDEuYmUxZDdjMzUzNGMzZjliOWIzNTYxOTI4MDA0OWRlODVwLTEsCisgICAgMHgxLjcxNGMyM2RiNmM2MjZwMgorICB9LAorICB7IC8vIEVudHJ5IDkxMAorICAgIDB4MS42ZmNiN2M2YjhiOTE4ZDg2ZmM4M2Q2MTJhNjU4N2VkZHAtMSwKKyAgICAtMHgxLjYwZTI1YjI3MDEyYWRwMgorICB9LAorICB7IC8vIEVudHJ5IDkxMQorICAgIDB4MS42ZmNiN2M2YjhiOTE4ZDg2ZmM4M2Q2MTJhNjU4N2VkZHAtMSwKKyAgICAweDEuNjBlMjViMjcwMTJhZHAyCisgIH0sCisgIHsgLy8gRW50cnkgOTEyCisgICAgMHgxLjA5NmFjMDJlYzQyYzgyZTViMjI1MTg1YmQ2Yzc1N2Q1cC0xLAorICAgIC0weDEuNTA3ODkyNzI5NWYzNHAyCisgIH0sCisgIHsgLy8gRW50cnkgOTEzCisgICAgMHgxLjA5NmFjMDJlYzQyYzgyZTViMjI1MTg1YmQ2Yzc1N2Q1cC0xLAorICAgIDB4MS41MDc4OTI3Mjk1ZjM0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTQKKyAgICAweDEuMjM1YjMzMWQ4Zjc0ODdjZTJkYjk3ODE5ZmFlNzc3N2NwLTIsCisgICAgLTB4MS40MDBlYzliZTJhYmJicDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTUKKyAgICAweDEuMjM1YjMzMWQ4Zjc0ODdjZTJkYjk3ODE5ZmFlNzc3N2NwLTIsCisgICAgMHgxLjQwMGVjOWJlMmFiYmJwMgorICB9LAorICB7IC8vIEVudHJ5IDkxNgorICAgIDB4MS4wNjkxMDdhZTkzMzJjNGExY2QyZGMwMzNiOGQ1MDU5OHAtNSwKKyAgICAtMHgxLjJmYTUwMTA5YmY4NDJwMgorICB9LAorICB7IC8vIEVudHJ5IDkxNworICAgIDB4MS4wNjkxMDdhZTkzMzJjNGExY2QyZGMwMzNiOGQ1MDU5OHAtNSwKKyAgICAweDEuMmZhNTAxMDliZjg0MnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTE4CisgICAgLTB4MS5jN2I5MGUzMDI0NTY5NWJkMWVjMTcwZjQ1ZmVlYjFmZnAtMywKKyAgICAtMHgxLjFmM2IzODU1NTQ0YzlwMgorICB9LAorICB7IC8vIEVudHJ5IDkxOQorICAgIC0weDEuYzdiOTBlMzAyNDU2OTViZDFlYzE3MGY0NWZlZWIxZmZwLTMsCisgICAgMHgxLjFmM2IzODU1NTQ0YzlwMgorICB9LAorICB7IC8vIEVudHJ5IDkyMAorICAgIC0weDEuZDlhM2EzMzZlZGI2MmMxNTQxYjg1ODRjZDZjMDBmODdwLTIsCisgICAgLTB4MS4wZWQxNmZhMGU5MTUwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjEKKyAgICAtMHgxLmQ5YTNhMzM2ZWRiNjJjMTU0MWI4NTg0Y2Q2YzAwZjg3cC0yLAorICAgIDB4MS4wZWQxNmZhMGU5MTUwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjIKKyAgICAtMHgxLjU4MzdkMjgxN2NmMjc3MDVjYWM3ODgxZmI1NjlmZmM3cC0xLAorICAgIC0weDEuZmNjZjRkZDhmYmJhZXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTIzCisgICAgLTB4MS41ODM3ZDI4MTdjZjI3NzA1Y2FjNzg4MWZiNTY5ZmZjN3AtMSwKKyAgICAweDEuZmNjZjRkZDhmYmJhZXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTI0CisgICAgLTB4MS5hZDE5ZTI1MzVhYThmZmI0MDA2NmQ3OGFlZjcxZmFiZHAtMSwKKyAgICAtMHgxLmRiZmJiYzcwMjU0YmNwMQorICB9LAorICB7IC8vIEVudHJ5IDkyNQorICAgIC0weDEuYWQxOWUyNTM1YWE4ZmZiNDAwNjZkNzhhZWY3MWZhYmRwLTEsCisgICAgMHgxLmRiZmJiYzcwMjU0YmNwMQorICB9LAorICB7IC8vIEVudHJ5IDkyNgorICAgIC0weDEuZTVlYWEyODZmYmJjMmIxMjkyMzgxNjBkZjMwY2U3MDRwLTEsCisgICAgLTB4MS5iYjI4MmIwNzRlZGNhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjcKKyAgICAtMHgxLmU1ZWFhMjg2ZmJiYzJiMTI5MjM4MTYwZGYzMGNlNzA0cC0xLAorICAgIDB4MS5iYjI4MmIwNzRlZGNhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjgKKyAgICAtMHgxLmZlZjJiMmQyMWNmNmI0MGZmM2I1MzBjZThkYzBkOGE3cC0xLAorICAgIC0weDEuOWE1NDk5OWU3ODZkOHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTI5CisgICAgLTB4MS5mZWYyYjJkMjFjZjZiNDBmZjNiNTMwY2U4ZGMwZDhhN3AtMSwKKyAgICAweDEuOWE1NDk5OWU3ODZkOHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTMwCisgICAgLTB4MS5mNjhlZWJmY2JiNWVhZGQ2NWMyNjFjZDgwMzk5MGFlMXAtMSwKKyAgICAtMHgxLjc5ODEwODM1YTFmZTZwMQorICB9LAorICB7IC8vIEVudHJ5IDkzMQorICAgIC0weDEuZjY4ZWViZmNiYjVlYWRkNjVjMjYxY2Q4MDM5OTBhZTFwLTEsCisgICAgMHgxLjc5ODEwODM1YTFmZTZwMQorICB9LAorICB7IC8vIEVudHJ5IDkzMgorICAgIC0weDEuY2Q0YmNhOWNiNWM3NzVhOTk3MjlmN2FkOTViN2RjZTNwLTEsCisgICAgLTB4MS41OGFkNzZjY2NiOGY0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzMKKyAgICAtMHgxLmNkNGJjYTljYjVjNzc1YTk5NzI5ZjdhZDk1YjdkY2UzcC0xLAorICAgIDB4MS41OGFkNzZjY2NiOGY0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzQKKyAgICAtMHgxLjg1ZGMzZWExYmJjZjJhYTJlMjFlYzU4NmQ1NDk3ZTM1cC0xLAorICAgIC0weDEuMzdkOWU1NjNmNTIwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTM1CisgICAgLTB4MS44NWRjM2VhMWJiY2YyYWEyZTIxZWM1ODZkNTQ5N2UzNXAtMSwKKyAgICAweDEuMzdkOWU1NjNmNTIwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTM2CisgICAgLTB4MS4yNGVjNzk5MTcxNjRlNDFhZGRkNGJhY2Q0NDIwZjlmYnAtMSwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMTBwMQorICB9LAorICB7IC8vIEVudHJ5IDkzNworICAgIC0weDEuMjRlYzc5OTE3MTY0ZTQxYWRkZDRiYWNkNDQyMGY5ZmJwLTEsCisgICAgMHgxLjE3MDY1M2ZiMWViMTBwMQorICB9LAorICB7IC8vIEVudHJ5IDkzOAorICAgIC0weDEuNjFhNzYwNzdhZWUyM2IxMWYwYzY3M2Y2MzgwMDNiMGFwLTIsCisgICAgLTB4MS5lYzY1ODUyNDkwODNjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzkKKyAgICAtMHgxLjYxYTc2MDc3YWVlMjNiMTFmMGM2NzNmNjM4MDAzYjBhcC0yLAorICAgIDB4MS5lYzY1ODUyNDkwODNjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDAKKyAgICAtMHgxLjg5NGY3MGJlZmJjMTA0YjcwNmU4NWNmNGMxYzk2YTUycC00LAorICAgIC0weDEuYWFiZTYyNTJlM2E1OHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTQxCisgICAgLTB4MS44OTRmNzBiZWZiYzEwNGI3MDZlODVjZjRjMWM5NmE1MnAtNCwKKyAgICAweDEuYWFiZTYyNTJlM2E1OHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTQyCisgICAgMHgxLjQ2ZGM0ZjRjZTgzNzNjN2M0NGYxM2I1NzM2M2VkZDNicC0zLAorICAgIC0weDEuNjkxNzNmODEzNmM3NHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTQzCisgICAgMHgxLjQ2ZGM0ZjRjZTgzNzNjN2M0NGYxM2I1NzM2M2VkZDNicC0zLAorICAgIDB4MS42OTE3M2Y4MTM2Yzc0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDQKKyAgICAweDEuOWU3Zjg2NTJiNDcyODllNTNmY2NkNTQ5NTVkYjQ1NTJwLTIsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDUKKyAgICAweDEuOWU3Zjg2NTJiNDcyODllNTNmY2NkNTQ5NTVkYjQ1NTJwLTIsCisgICAgMHgxLjI3NzAxY2FmODllOTBwMAorICB9LAorICB7IC8vIEVudHJ5IDk0NgorICAgIDB4MS4zZjNhMGUyOGJlZGJmYjA2NmI2N2FiZDljMzM4NDA5ZXAtMSwKKyAgICAtMHgxLmNiOTFmM2JiYmExNTdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDcKKyAgICAweDEuM2YzYTBlMjhiZWRiZmIwNjZiNjdhYmQ5YzMzODQwOWVwLTEsCisgICAgMHgxLmNiOTFmM2JiYmExNTdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDgKKyAgICAweDEuOWE1MmUyZTBmYmNhNGIwMGM3MmRhYTNjZGFjYTI1N2NwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNThlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTQ5CisgICAgMHgxLjlhNTJlMmUwZmJjYTRiMDBjNzJkYWEzY2RhY2EyNTdjcC0xLAorICAgIDB4MS40ODQzYWUxODYwNThlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTUwCisgICAgMHgxLmRhOTRkNTRkZDRiZmY3NTNkOTg4YzE3NTVlMmZmYzA0cC0xLAorICAgIC0weDEuODllYWQwZWEwZDM4YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDk1MQorICAgIDB4MS5kYTk0ZDU0ZGQ0YmZmNzUzZDk4OGMxNzU1ZTJmZmMwNHAtMSwKKyAgICAweDEuODllYWQwZWEwZDM4YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDk1MgorICAgIDB4MS5mYmNiZTY5M2JkOGU5ODQyMzIwN2UzNjU4N2Q5NDJiN3AtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3ZjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTMKKyAgICAweDEuZmJjYmU2OTNiZDhlOTg0MjMyMDdlMzY1ODdkOTQyYjdwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3ZjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTQKKyAgICAweDEuZmJjYmU2OTNiZDhlZjg2YzE1NjViMzQ1MzAzNmU1NWVwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3MzRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTUKKyAgICAweDEuZmJjYmU2OTNiZDhlZjg2YzE1NjViMzQ1MzAzNmU1NWVwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzNzM0cC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTU2CisgICAgMHgxLmRhOTRkNTRkZDRjMTExODc0MDVhZGE3ZjA0ZTViMTcxcC0xLAorICAgIDB4MS44OWVhZDBlYTBkMzJjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTU3CisgICAgMHgxLmRhOTRkNTRkZDRjMTExODc0MDVhZGE3ZjA0ZTViMTcxcC0xLAorICAgIC0weDEuODllYWQwZWEwZDMyY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDk1OAorICAgIDB4MS45YTUyZTJlMGZiY2MwY2M4M2I4NDNiYWU1OGM2Y2RmOHAtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU1ZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDk1OQorICAgIDB4MS45YTUyZTJlMGZiY2MwY2M4M2I4NDNiYWU1OGM2Y2RmOHAtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NWZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjAKKyAgICAweDEuM2YzYTBlMjhiZWRlNDZmNjVjYTViNWMxOWFkOTlkZDdwLTEsCisgICAgMHgxLmNiOTFmM2JiYmExMjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjEKKyAgICAweDEuM2YzYTBlMjhiZWRlNDZmNjVjYTViNWMxOWFkOTlkZDdwLTEsCisgICAgLTB4MS5jYjkxZjNiYmJhMTI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTYyCisgICAgMHgxLjllN2Y4NjUyYjQ3ODA2NmVlYzU2M2Y4MzUwOTdmMTQ4cC0yLAorICAgIDB4MS4yNzcwMWNhZjg5ZTc4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjMKKyAgICAweDEuOWU3Zjg2NTJiNDc4MDY2ZWVjNTYzZjgzNTA5N2YxNDhwLTIsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTc4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjQKKyAgICAweDEuNDZkYzRmNGNlODQzMTUxYjlkMTRlNTYxODc5ZTVmZTNwLTMsCisgICAgMHgxLjY5MTczZjgxMzZjNWNwMAorICB9LAorICB7IC8vIEVudHJ5IDk2NQorICAgIDB4MS40NmRjNGY0Y2U4NDMxNTFiOWQxNGU1NjE4NzllNWZlM3AtMywKKyAgICAtMHgxLjY5MTczZjgxMzZjNWNwMAorICB9LAorICB7IC8vIEVudHJ5IDk2NgorICAgIC0weDEuODk0ZjcwYmVmYmE5MjExYjBkY2FhNGRjYTQ1MDY3MGZwLTQsCisgICAgMHgxLmFhYmU2MjUyZTNhNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDk2NworICAgIC0weDEuODk0ZjcwYmVmYmE5MjExYjBkY2FhNGRjYTQ1MDY3MGZwLTQsCisgICAgLTB4MS5hYWJlNjI1MmUzYTQwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjgKKyAgICAtMHgxLjYxYTc2MDc3YWVkYzk5OTUyNDM4NDIxZjgyMGEyYmVmcC0yLAorICAgIDB4MS5lYzY1ODUyNDkwODI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjkKKyAgICAtMHgxLjYxYTc2MDc3YWVkYzk5OTUyNDM4NDIxZjgyMGEyYmVmcC0yLAorICAgIC0weDEuZWM2NTg1MjQ5MDgyNHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTcwCisgICAgLTB4MS4yNGVjNzk5MTcxNjI2ZTM2NzA5Y2ZjZjdjNzc1MjMzMnAtMSwKKyAgICAweDEuMTcwNjUzZmIxZWIwNHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTcxCisgICAgLTB4MS4yNGVjNzk5MTcxNjI2ZTM2NzA5Y2ZjZjdjNzc1MjMzMnAtMSwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMDRwMQorICB9LAorICB7IC8vIEVudHJ5IDk3MgorICAgIC0weDEuODVkYzNlYTFiYmNkMzhjYmZlYjQzNzBkNTQwNWVlYmFwLTEsCisgICAgMHgxLjM3ZDllNTYzZjUxZjZwMQorICB9LAorICB7IC8vIEVudHJ5IDk3MworICAgIC0weDEuODVkYzNlYTFiYmNkMzhjYmZlYjQzNzBkNTQwNWVlYmFwLTEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MWY2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzQKKyAgICAtMHgxLmNkNGJjYTljYjVjNjI4NzA5Mzg4YTM5ZmM4NDU5MWQxcC0xLAorICAgIDB4MS41OGFkNzZjY2NiOGU4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzUKKyAgICAtMHgxLmNkNGJjYTljYjVjNjI4NzA5Mzg4YTM5ZmM4NDU5MWQxcC0xLAorICAgIC0weDEuNThhZDc2Y2NjYjhlOHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTc2CisgICAgLTB4MS5mNjhlZWJmY2JiNWUxYjA3MGI1NjQwMzdmNTU3MWEzOXAtMSwKKyAgICAweDEuNzk4MTA4MzVhMWZkYXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTc3CisgICAgLTB4MS5mNjhlZWJmY2JiNWUxYjA3MGI1NjQwMzdmNTU3MWEzOXAtMSwKKyAgICAtMHgxLjc5ODEwODM1YTFmZGFwMQorICB9LAorICB7IC8vIEVudHJ5IDk3OAorICAgIC0weDEuZmVmMmIyZDIxY2Y2ZTU0NGFiNzc5NWFlZDEwZDlmYTdwLTEsCisgICAgMHgxLjlhNTQ5OTllNzg2Y2NwMQorICB9LAorICB7IC8vIEVudHJ5IDk3OQorICAgIC0weDEuZmVmMmIyZDIxY2Y2ZTU0NGFiNzc5NWFlZDEwZDlmYTdwLTEsCisgICAgLTB4MS45YTU0OTk5ZTc4NmNjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODAKKyAgICAtMHgxLmU1ZWFhMjg2ZmJiZDFkMTM1ZTIxNmM0OWE5ZjdlNWRhcC0xLAorICAgIDB4MS5iYjI4MmIwNzRlZGJlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODEKKyAgICAtMHgxLmU1ZWFhMjg2ZmJiZDFkMTM1ZTIxNmM0OWE5ZjdlNWRhcC0xLAorICAgIC0weDEuYmIyODJiMDc0ZWRiZXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTgyCisgICAgLTB4MS5hZDE5ZTI1MzVhYWFhMmFjODcwNTZiNmQ3Nzc2ZTk3YXAtMSwKKyAgICAweDEuZGJmYmJjNzAyNTRiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTgzCisgICAgLTB4MS5hZDE5ZTI1MzVhYWFhMmFjODcwNTZiNmQ3Nzc2ZTk3YXAtMSwKKyAgICAtMHgxLmRiZmJiYzcwMjU0YjBwMQorICB9LAorICB7IC8vIEVudHJ5IDk4NAorICAgIC0weDEuNTgzN2QyODE3Y2Y0YWY4ZTVlNTliMTNiNGFhOWI1ZTNwLTEsCisgICAgMHgxLmZjY2Y0ZGQ4ZmJiYTJwMQorICB9LAorICB7IC8vIEVudHJ5IDk4NQorICAgIC0weDEuNTgzN2QyODE3Y2Y0YWY4ZTVlNTliMTNiNGFhOWI1ZTNwLTEsCisgICAgLTB4MS5mY2NmNGRkOGZiYmEycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODYKKyAgICAtMHgxLmQ5YTNhMzM2ZWRiYjdkZTY0YTIxODNjYjI3YmU0YjVicC0yLAorICAgIDB4MS4wZWQxNmZhMGU5MTRhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODcKKyAgICAtMHgxLmQ5YTNhMzM2ZWRiYjdkZTY0YTIxODNjYjI3YmU0YjVicC0yLAorICAgIC0weDEuMGVkMTZmYTBlOTE0YXAyCisgIH0sCisgIHsgLy8gRW50cnkgOTg4CisgICAgLTB4MS5jN2I5MGUzMDI0NjI0OGI3YTBjMmM4N2EzZGQyNTIyNHAtMywKKyAgICAweDEuMWYzYjM4NTU1NDRjM3AyCisgIH0sCisgIHsgLy8gRW50cnkgOTg5CisgICAgLTB4MS5jN2I5MGUzMDI0NjI0OGI3YTBjMmM4N2EzZGQyNTIyNHAtMywKKyAgICAtMHgxLjFmM2IzODU1NTQ0YzNwMgorICB9LAorICB7IC8vIEVudHJ5IDk5MAorICAgIDB4MS4wNjkxMDdhZTkzMDJjYWYyMDY4YjQ4ODQyYWZkZjA1MXAtNSwKKyAgICAweDEuMmZhNTAxMDliZjgzY3AyCisgIH0sCisgIHsgLy8gRW50cnkgOTkxCisgICAgMHgxLjA2OTEwN2FlOTMwMmNhZjIwNjhiNDg4NDJhZmRmMDUxcC01LAorICAgIC0weDEuMmZhNTAxMDliZjgzY3AyCisgIH0sCisgIHsgLy8gRW50cnkgOTkyCisgICAgMHgxLjIzNWIzMzFkOGY2ZWM3NGFhM2RlNWFlZDE1ZmEzZjY4cC0yLAorICAgIDB4MS40MDBlYzliZTJhYmI1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTMKKyAgICAweDEuMjM1YjMzMWQ4ZjZlYzc0YWEzZGU1YWVkMTVmYTNmNjhwLTIsCisgICAgLTB4MS40MDBlYzliZTJhYmI1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTQKKyAgICAweDEuMDk2YWMwMmVjNDI5ZjIyNWM5OWI4OWJiNGM5ZTVkM2VwLTEsCisgICAgMHgxLjUwNzg5MjcyOTVmMmVwMgorICB9LAorICB7IC8vIEVudHJ5IDk5NQorICAgIDB4MS4wOTZhYzAyZWM0MjlmMjI1Yzk5Yjg5YmI0YzllNWQzZXAtMSwKKyAgICAtMHgxLjUwNzg5MjcyOTVmMmVwMgorICB9LAorICB7IC8vIEVudHJ5IDk5NgorICAgIDB4MS42ZmNiN2M2YjhiOGY3NzNlM2I0MjFkZGVkNmZjMWYyNnAtMSwKKyAgICAweDEuNjBlMjViMjcwMTJhN3AyCisgIH0sCisgIHsgLy8gRW50cnkgOTk3CisgICAgMHgxLjZmY2I3YzZiOGI4Zjc3M2UzYjQyMWRkZWQ2ZmMxZjI2cC0xLAorICAgIC0weDEuNjBlMjViMjcwMTJhN3AyCisgIH0sCisgIHsgLy8gRW50cnkgOTk4CisgICAgMHgxLmJlMWQ3YzM1MzRjMjgwZGFiNDNkY2VkNjcwMzMwYjYzcC0xLAorICAgIDB4MS43MTRjMjNkYjZjNjIwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTkKKyAgICAweDEuYmUxZDdjMzUzNGMyODBkYWI0M2RjZWQ2NzAzMzBiNjNwLTEsCisgICAgLTB4MS43MTRjMjNkYjZjNjIwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAwCisgICAgMHgxLmVmNDE0NWI0YWVjZjM0MjcwOWEzYjE5MzIwZDFiMTk0cC0xLAorICAgIDB4MS44MWI1ZWM4ZmQ3OTk5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAxCisgICAgMHgxLmVmNDE0NWI0YWVjZjM0MjcwOWEzYjE5MzIwZDFiMTk0cC0xLAorICAgIC0weDEuODFiNWVjOGZkNzk5OXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAwMgorICAgIDB4MS5mZjBmZDJjOTZhZGZiYWU1NzY5ODFlZTRiMzQ3NjlkZXAtMSwKKyAgICAweDEuZWZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMDMKKyAgICAweDEuZmYwZmQyYzk2YWRmYmFlNTc2OTgxZWU0YjM0NzY5ZGVwLTEsCisgICAgLTB4MS5lZmZmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAwNAorICAgIDB4MS5mZjBmZDJjOTZhZGZiYWQ1ZjkwNGE3MWIyZDIxMGEyYXAtMSwKKyAgICAweDEuZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMDUKKyAgICAweDEuZmYwZmQyYzk2YWRmYmFkNWY5MDRhNzFiMmQyMTBhMmFwLTEsCisgICAgLTB4MS5mcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAwNgorICAgIDB4MS5mZjBmZDJjOTZhZGZiYWM2N2I3MTJmNTFhNmZhMmFiM3AtMSwKKyAgICAweDEuZjAwMDAwMDAwMDAwMXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMDcKKyAgICAweDEuZmYwZmQyYzk2YWRmYmFjNjdiNzEyZjUxYTZmYTJhYjNwLTEsCisgICAgLTB4MS5mMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAwOAorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNWM4Zjc2ZTc1ZmQ3MDgzODE4Y3AtMSwKKyAgICAweDEuZjdmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMDkKKyAgICAweDEuZmMyMTAwNTU0NjdmZTVjOGY3NmU3NWZkNzA4MzgxOGNwLTEsCisgICAgLTB4MS5mN2ZmZmZmZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAxMAorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNThhMjAxOTMzOTliM2JjMGRkMnAtMSwKKyAgICAweDEuZjgwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAxMQorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNThhMjAxOTMzOTliM2JjMGRkMnAtMSwKKyAgICAtMHgxLmY4MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMTIKKyAgICAweDEuZmMyMTAwNTU0NjdmZTU0YjQ4YzNmMTM1ZjZmMjlkZjdwLTEsCisgICAgMHgxLmY4MDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEzCisgICAgMHgxLmZjMjEwMDU1NDY3ZmU1NGI0OGMzZjEzNWY2ZjI5ZGY3cC0xLAorICAgIC0weDEuZjgwMDAwMDAwMDAwMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMTQKKyAgICAweDEuZjk0OTg0YjI1NTJlMTllNzMyOTQxM2I4YzJlOGRjNTFwLTEsCisgICAgMHgxLjRiZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE1CisgICAgMHgxLmY5NDk4NGIyNTUyZTE5ZTczMjk0MTNiOGMyZThkYzUxcC0xLAorICAgIC0weDEuNGJmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMTYKKyAgICAweDEuZjk0OTg0YjI1NTJlMTk0MWVjNzY2YzZhODJlY2U0YTNwLTEsCisgICAgMHgxLjRjMHAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMTcKKyAgICAweDEuZjk0OTg0YjI1NTJlMTk0MWVjNzY2YzZhODJlY2U0YTNwLTEsCisgICAgLTB4MS40YzBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE4CisgICAgMHgxLmY5NDk4NGIyNTUyZTE4OWNhNjU4YzUxYzQyZTkwN2NlcC0xLAorICAgIDB4MS40YzAwMDAwMDAwMDAxcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAxOQorICAgIDB4MS5mOTQ5ODRiMjU1MmUxODljYTY1OGM1MWM0MmU5MDdjZXAtMSwKKyAgICAtMHgxLjRjMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIwCisgICAgMHgxLmU5MjFkZDQyZjA5YmE4Njg2MDNlYTM3NmY2ZTJkMDEycC0xLAorICAgIDB4MS4zMzMzMzMzMzMzMzMycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAyMQorICAgIDB4MS5lOTIxZGQ0MmYwOWJhODY4NjAzZWEzNzZmNmUyZDAxMnAtMSwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIyCisgICAgMHgxLmU5MjFkZDQyZjA5YmE2MGIyNjhiZWMxZmIwODc4YTQycC0xLAorICAgIDB4MS4zMzMzMzMzMzMzMzMzcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAyMworICAgIDB4MS5lOTIxZGQ0MmYwOWJhNjBiMjY4YmVjMWZiMDg3OGE0MnAtMSwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI0CisgICAgMHgxLmU5MjFkZDQyZjA5YmEzYWRlY2Q5MzRjODZhMGRiMjU0cC0xLAorICAgIDB4MS4zMzMzMzMzMzMzMzM0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAyNQorICAgIDB4MS5lOTIxZGQ0MmYwOWJhM2FkZWNkOTM0Yzg2YTBkYjI1NHAtMSwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI2CisgICAgMHgxLjhmZWVkYjg2YmYwZWYzMTU4ZjhhMWRjYmVmNDlkMTIzcC0xLAorICAgIDB4MS41OTQzMTdhY2M0ZWY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAyNworICAgIDB4MS44ZmVlZGI4NmJmMGVmMzE1OGY4YTFkY2JlZjQ5ZDEyM3AtMSwKKyAgICAtMHgxLjU5NDMxN2FjYzRlZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI4CisgICAgMHgxLjhmZWVkYjg2YmYwZWU5MTgxN2E2NGIyOGI3OWU1MTE5cC0xLAorICAgIDB4MS41OTQzMTdhY2M0ZWY5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAyOQorICAgIDB4MS44ZmVlZGI4NmJmMGVlOTE4MTdhNjRiMjhiNzllNTExOXAtMSwKKyAgICAtMHgxLjU5NDMxN2FjYzRlZjlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMwCisgICAgMHgxLjhmZWVkYjg2YmYwZWRmMWE5ZmMyNzg4NTdmOGVkNTU5cC0xLAorICAgIDB4MS41OTQzMTdhY2M0ZWZhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAzMQorICAgIDB4MS44ZmVlZGI4NmJmMGVkZjFhOWZjMjc4ODU3ZjhlZDU1OXAtMSwKKyAgICAtMHgxLjU5NDMxN2FjYzRlZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMyCisgICAgMHgxLjZiODk4ZmE5ZWZiNWRkNmY5ZTE3ZTM0NDJkNTliMjQxcC0xLAorICAgIDB4MS44ZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAzMworICAgIDB4MS42Yjg5OGZhOWVmYjVkZDZmOWUxN2UzNDQyZDU5YjI0MXAtMSwKKyAgICAtMHgxLjhmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM0CisgICAgMHgxLjZiODk4ZmE5ZWZiNWQyMmI1OGYwZDk5ZTk2MzQ5MzFhcC0xLAorICAgIDB4MS45cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAzNQorICAgIDB4MS42Yjg5OGZhOWVmYjVkMjJiNThmMGQ5OWU5NjM0OTMxYXAtMSwKKyAgICAtMHgxLjlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM2CisgICAgMHgxLjZiODk4ZmE5ZWZiNWM2ZTcxM2M5Y2ZmOGZlYjQ5MThmcC0xLAorICAgIDB4MS45MDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAzNworICAgIDB4MS42Yjg5OGZhOWVmYjVjNmU3MTNjOWNmZjhmZWI0OTE4ZnAtMSwKKyAgICAtMHgxLjkwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDEwMzkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQwCisgICAgMHgxLnAwLAorICAgIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQxCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgMTA0MgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQzCisgICAgMHgxLmZmNjIxZTM3OTZkN2RlNGE4YWI3ZDdjZDg0ODhmNDk5cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NAorICAgIDB4MS5mZjYyMWUzNzk2ZDdkZTRhOGFiN2Q3Y2Q4NDg4ZjQ5OXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ1CisgICAgMHgxLmZmNjIxZTM3OTZkN2RlM2RmYjA0ZGY0Njk4N2Y2NDUwcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NgorICAgIDB4MS5mZjYyMWUzNzk2ZDdkZTNkZmIwNGRmNDY5ODdmNjQ1MHAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ3CisgICAgMHgxLmZmNjIxZTM3OTZkN2RlMzE2YjUxZTZiZmFjNzU1NDJmcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA0OAorICAgIDB4MS5mZjYyMWUzNzk2ZDdkZTMxNmI1MWU2YmZhYzc1NTQyZnAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ5CisgICAgMHgxLmZkODhkYTNkMTI1MjVhMjA4ODk4Y2Y1OGRlZDBlZWIzcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA1MAorICAgIDB4MS5mZDg4ZGEzZDEyNTI1YTIwODg5OGNmNThkZWQwZWViM3AtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUxCisgICAgMHgxLmZkODhkYTNkMTI1MjU5ZWU1OTRiNTcwNTc2N2FiNjQ5cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA1MgorICAgIDB4MS5mZDg4ZGEzZDEyNTI1OWVlNTk0YjU3MDU3NjdhYjY0OXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUzCisgICAgMHgxLmZkODhkYTNkMTI1MjU5YmMyOWZkZGViMjBlMjI4MDU2cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA1NAorICAgIDB4MS5mZDg4ZGEzZDEyNTI1OWJjMjlmZGRlYjIwZTIyODA1NnAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU1CisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAzYWIxZmNlZDYzMzdlMzVhMjQ1cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTA1NgorICAgIDB4MS5mNjI5N2NmZjc1Y2IwM2FiMWZjZWQ2MzM3ZTM1YTI0NXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU3CisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAyZTM1YTBjZjJlNjRkZTYwNjI2cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTA1OAorICAgIDB4MS5mNjI5N2NmZjc1Y2IwMmUzNWEwY2YyZTY0ZGU2MDYyNnAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU5CisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAyMWI5NDRiMGY5OTFkOGU5MTYxcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTA2MAorICAgIDB4MS5mNjI5N2NmZjc1Y2IwMjFiOTQ0YjBmOTkxZDhlOTE2MXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYxCisgICAgMHgxLmQ5MDZiY2YzMjhkNDY2NzJkOWMxYTg2NTg5OGU1OTY2cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTA2MgorICAgIDB4MS5kOTA2YmNmMzI4ZDQ2NjcyZDljMWE4NjU4OThlNTk2NnAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYzCisgICAgMHgxLmQ5MDZiY2YzMjhkNDYzNjMxZDZjZDI5MDVkNGIxM2Y1cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NAorICAgIDB4MS5kOTA2YmNmMzI4ZDQ2MzYzMWQ2Y2QyOTA1ZDRiMTNmNXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY1CisgICAgMHgxLmQ5MDZiY2YzMjhkNDYwNTM2MTE3ZmNiYjMwZWEzZTE3cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NgorICAgIDB4MS5kOTA2YmNmMzI4ZDQ2MDUzNjExN2ZjYmIzMGVhM2UxN3AtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY3CisgICAgMHgxLjZhMDllNjY3ZjNiY2Q3NzdiNjQ2MTM3NmFiNTIzMjQycC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA2OAorICAgIDB4MS42YTA5ZTY2N2YzYmNkNzc3YjY0NjEzNzZhYjUyMzI0MnAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY5CisgICAgMHgxLjZhMDllNjY3ZjNiY2NjMjc2NzEyZDNkOGM1NTAyMzg3cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MAorICAgIDB4MS42YTA5ZTY2N2YzYmNjYzI3NjcxMmQzZDhjNTUwMjM4N3AtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcxCisgICAgMHgxLjZhMDllNjY3ZjNiY2MwZDcxN2RmOTQzYWRlZjM5MjUzcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MgorICAgIDB4MS42YTA5ZTY2N2YzYmNjMGQ3MTdkZjk0M2FkZWYzOTI1M3AtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDczCisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWMwYjhiNTBicC01MiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTA3NAorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDljMGI4YjUwYnAtNTIsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc1CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0NDE5ZmE4cC01NCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA3NgorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDQxOWZhOHAtNTQsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc3CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3ZGJjZmJhMHAtNTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNzgKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdkYmNmYmEwcC01MywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNzkKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5N2Q1YmZmcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgwCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTdkNWJmZnAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwMQorICB9LAorICB7IC8vIEVudHJ5IDEwODEKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDEwODMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZGU2ZTU4Y3AtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMQorICB9LAorICB7IC8vIEVudHJ5IDEwODUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTVmNTZmZmVwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwMgorICB9LAorICB7IC8vIEVudHJ5IDEwODYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTVmNTZmZmVwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzE3cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzE3cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTA4OQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzliOTYzMXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTA5MAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzliOTYzMXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMgorICB9LAorICB7IC8vIEVudHJ5IDEwOTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTdkNWJmZjhwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwMworICB9LAorICB7IC8vIEVudHJ5IDEwOTIKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTdkNWJmZjhwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVlcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVlcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjNHAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjNHAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwMworICB9LAorICB7IC8vIEVudHJ5IDEwOTcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNWY1NmZmZTFwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwNAorICB9LAorICB7IC8vIEVudHJ5IDEwOTgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNWY1NmZmZTFwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMTdhcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMTdhcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEwMQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWI5NjMxM3AtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEwMgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWI5NjMxM3AtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNAorICB9LAorICB7IC8vIEVudHJ5IDExMDMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5N2Q1YmZmODdwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwNQorICB9LAorICB7IC8vIEVudHJ5IDExMDQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5N2Q1YmZmODdwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNWU5cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNWU5cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA1CisgIH0sCisgIHsgLy8gRW50cnkgMTEwNworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRlNmU1OGM0Y3AtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXA1CisgIH0sCisgIHsgLy8gRW50cnkgMTEwOAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRlNmU1OGM0Y3AtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNQorICB9LAorICB7IC8vIEVudHJ5IDExMDkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU1ZjU2ZmZlMWRwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwNgorICB9LAorICB7IC8vIEVudHJ5IDExMTAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU1ZjU2ZmZlMWRwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTExCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxN2E3cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxN2E3cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTExMworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5Yjk2MzEzMXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXA2CisgIH0sCisgIHsgLy8gRW50cnkgMTExNAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5Yjk2MzEzMXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNgorICB9LAorICB7IC8vIEVudHJ5IDExMTUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjk3ZDViZmY4NzRwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwNworICB9LAorICB7IC8vIEVudHJ5IDExMTYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjk3ZDViZmY4NzRwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1ZTlkcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1ZTlkcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA3CisgIH0sCisgIHsgLy8gRW50cnkgMTExOQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZGU2ZTU4YzRjNnAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXA3CisgIH0sCisgIHsgLy8gRW50cnkgMTEyMAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZGU2ZTU4YzRjNnAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNworICB9LAorICB7IC8vIEVudHJ5IDExMjEKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzkyNmI1OWU2ZDM5OWJkMWI5MDZjcC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIyCisgICAgLTB4MS42YTA5ZTY2N2YzYmM5MjZiNTllNmQzOTliZDFiOTA2Y3AtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDFwMQorICB9LAorICB7IC8vIEVudHJ5IDExMjMKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2JmYWM5NmIzZDIxMTVhM2MzZTIxcC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTI0CisgICAgLTB4MS42YTA5ZTY2N2YzYmNiZmFjOTZiM2QyMTE1YTNjM2UyMXAtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDJwMQorICB9LAorICB7IC8vIEVudHJ5IDExMjUKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2VjZWRkMzgwZDA4OGYxYjRjNDNjcC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTI2CisgICAgLTB4MS42YTA5ZTY2N2YzYmNlY2VkZDM4MGQwODhmMWI0YzQzY3AtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDNwMQorICB9LAorICB7IC8vIEVudHJ5IDExMjcKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDA1ZTM3NDNlZDQxN2M0NGZiYTQ2cC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTI4CisgICAgLTB4MS42YTA5ZTY2N2YzYmQwNWUzNzQzZWQ0MTdjNDRmYmE0NnAtMSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWRwMQorICB9LAorICB7IC8vIEVudHJ5IDExMjkKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2Q4YTIzNzcxZDVhMDJmZjVlODQzcC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMwCisgICAgLTB4MS42YTA5ZTY2N2YzYmNkOGEyMzc3MWQ1YTAyZmY1ZTg0M3AtMSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWVwMQorICB9LAorICB7IC8vIEVudHJ5IDExMzEKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2FiNjBmYWE0ZDcyODk1ZjNlZWE1cC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMyCisgICAgLTB4MS42YTA5ZTY2N2YzYmNhYjYwZmFhNGQ3Mjg5NWYzZWVhNXAtMSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWZwMQorICB9LAorICB7IC8vIEVudHJ5IDExMzMKKyAgICAtMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzNzRjMWQxNjMxcC01MCwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTEzNAorICAgIC0weDEuMzRmMjcyOTkzZDE0MTRhMmIzOWJkODM3NGMxZDE2MzFwLTUwLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTEzNQorICAgIC0weDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhODYzNzdjOTJwLTUzLAorICAgIDB4MS4yZDk3YzdmMzMyMWQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM2CisgICAgLTB4MS5hNzkzOTRjOWU4YTBhNTE1OWNkZWMxYmE4NjM3N2M5MnAtNTMsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM3CisgICAgMHgxLjk2MWIxYWNkODVkN2Q2YmE5OGM4NGY5MTViYmNiYzZjcC01MSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkM3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTEzOAorICAgIDB4MS45NjFiMWFjZDg1ZDdkNmJhOThjODRmOTE1YmJjYmM2Y3AtNTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQzcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM5CisgICAgMHgxLjZhMDllNjY3ZjNiYzU4YWY0Y2JhZDM1YWFiYjIwMGY0cC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQwCisgICAgMHgxLjZhMDllNjY3ZjNiYzU4YWY0Y2JhZDM1YWFiYjIwMGY0cC0xLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE0MQorICAgIDB4MS42YTA5ZTY2N2YzYmNiMzMxYzY1NGQwNDllZWJhMzgwZnAtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE0MgorICAgIDB4MS42YTA5ZTY2N2YzYmNiMzMxYzY1NGQwNDllZWJhMzgwZnAtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzVwMgorICB9LAorICB7IC8vIEVudHJ5IDExNDMKKyAgICAweDEuNmEwOWU2NjdmM2JkMGRiNDNmZWVjZDM5MWIyMWQwYzRwLTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzZwMgorICB9LAorICB7IC8vIEVudHJ5IDExNDQKKyAgICAweDEuNmEwOWU2NjdmM2JkMGRiNDNmZWVjZDM5MWIyMWQwYzRwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQ1CisgICAgMHgxLjZhMDllNjY3ZjNiZDNmOWY4MTZhZDQ1NmJhMWE1NGE5cC0xLAorICAgIDB4MS5jNDYzYWJlY2NiMmJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQ2CisgICAgMHgxLjZhMDllNjY3ZjNiZDNmOWY4MTZhZDQ1NmJhMWE1NGE5cC0xLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE0NworICAgIDB4MS42YTA5ZTY2N2YzYmNlNTFkMDdkMGQ3Njc5YTJkOGM1M3AtMSwKKyAgICAweDEuYzQ2M2FiZWNjYjJiYnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE0OAorICAgIDB4MS42YTA5ZTY2N2YzYmNlNTFkMDdkMGQ3Njc5YTJkOGM1M3AtMSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmJwMgorICB9LAorICB7IC8vIEVudHJ5IDExNDkKKyAgICAweDEuNmEwOWU2NjdmM2JjOGE5YThlMzZkYTc4NjNhMDI1OTdwLTEsCisgICAgMHgxLmM0NjNhYmVjY2IyYmNwMgorICB9LAorICB7IC8vIEVudHJ5IDExNTAKKyAgICAweDEuNmEwOWU2NjdmM2JjOGE5YThlMzZkYTc4NjNhMDI1OTdwLTEsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUxCisgICAgMHgxLjU4M2ViZWZmNjVjYzIyNjQ4MGFlNjg1YzJhZDlhZmRhcC01MCwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE1MgorICAgIDB4MS41ODNlYmVmZjY1Y2MyMjY0ODBhZTY4NWMyYWQ5YWZkYXAtNTAsCisgICAgLTB4MS5mNmE3YTI5NTUzODVkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUzCisgICAgMHgxLjYwZmFmYmZkOTczMDg5OTIwMmI5YTE3MGM0ZTZhODQ5cC01MiwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE1NAorICAgIDB4MS42MGZhZmJmZDk3MzA4OTkyMDJiOWExNzBjNGU2YTg0OXAtNTIsCisgICAgLTB4MS5mNmE3YTI5NTUzODVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTU1CisgICAgLTB4MS40ZjgyODIwMTM0NjdiYjM2ZmVhMzJmNDc5YmQ0OGY0YXAtNTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWZwMgorICB9LAorICB7IC8vIEVudHJ5IDExNTYKKyAgICAtMHgxLjRmODI4MjAxMzQ2N2JiMzZmZWEzMmY0NzliZDQ4ZjRhcC01MSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWZwMgorICB9LAorICB7IC8vIEVudHJ5IDExNTcKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjk3MmY4OTI3ZDdiNDZjNzM3NDg1cC0xLAorICAgIDB4MS4xNDc1Y2M5ZWVkZWZmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTU4CisgICAgLTB4MS42YTA5ZTY2N2YzYmI5NzJmODkyN2Q3YjQ2YzczNzQ4NXAtMSwKKyAgICAtMHgxLjE0NzVjYzllZWRlZmZwMworICB9LAorICB7IC8vIEVudHJ5IDExNTkKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzRjMzQ3YzViZDE5MzNjYTMyNjFmcC0xLAorICAgIDB4MS4xNDc1Y2M5ZWVkZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE2MAorICAgIC0weDEuNmEwOWU2NjdmM2JjNGMzNDdjNWJkMTkzM2NhMzI2MWZwLTEsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE2MQorICAgIC0weDEuNmEwOWU2NjdmM2JkMDEzOTZmOGZjYjcxYjI1MDVlMWZwLTEsCisgICAgMHgxLjE0NzVjYzllZWRmMDFwMworICB9LAorICB7IC8vIEVudHJ5IDExNjIKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDAxMzk2ZjhmY2I3MWIyNTA1ZTFmcC0xLAorICAgIC0weDEuMTQ3NWNjOWVlZGYwMXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE2MworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYTJjOWVkYThwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwMworICB9LAorICB7IC8vIEVudHJ5IDExNjQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmEyYzllZGE4cC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE2NQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmQ0MzI2ZjVwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwMworICB9LAorICB7IC8vIEVudHJ5IDExNjYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkNDMyNmY1cC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE2NworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDdiYzYwNDFwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwMworICB9LAorICB7IC8vIEVudHJ5IDExNjgKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmQ3YmM2MDQxcC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkM3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTE2OQorICAgIC0weDEuNmEwOWU2NjdmM2JlMDExZjQ0ZmRjZmZjMTY3ZjcxNDBwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTJwMworICB9LAorICB7IC8vIEVudHJ5IDExNzAKKyAgICAtMHgxLjZhMDllNjY3ZjNiZTAxMWY0NGZkY2ZmYzE2N2Y3MTQwcC0xLAorICAgIC0weDEuNDZiOWMzNDc3NjRhMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE3MQorICAgIC0weDEuNmEwOWU2NjdmM2JkNGMxYTUxYzlkNjFlMjBjNTIzZjdwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTNwMworICB9LAorICB7IC8vIEVudHJ5IDExNzIKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDRjMWE1MWM5ZDYxZTIwYzUyM2Y3cC0xLAorICAgIC0weDEuNDZiOWMzNDc3NjRhM3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTE3MworICAgIC0weDEuNmEwOWU2NjdmM2JjOTcxNTVlOTVkYzNmZDA4ODVkMTRwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTRwMworICB9LAorICB7IC8vIEVudHJ5IDExNzQKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzk3MTU1ZTk1ZGMzZmQwODg1ZDE0cC0xLAorICAgIC0weDEuNDZiOWMzNDc3NjRhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE3NQorICAgIC0weDEuM2RjNTg1YjJjNzQyMTgxMzI2ZTA3YzQwNzQ4ODczYmJwLTQ5LAorICAgIDB4MS41ZmRiYmU5YmJhNzc0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTc2CisgICAgLTB4MS4zZGM1ODViMmM3NDIxODEzMjZlMDdjNDA3NDg4NzNiYnAtNDksCisgICAgLTB4MS41ZmRiYmU5YmJhNzc0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTc3CisgICAgLTB4MS5lZTJjMmQ5NjNhMTBjMDk5MzcwM2UyMDQ0NjQ2MzMwMXAtNTIsCisgICAgMHgxLjVmZGJiZTliYmE3NzVwMworICB9LAorICB7IC8vIEVudHJ5IDExNzgKKyAgICAtMHgxLmVlMmMyZDk2M2ExMGMwOTkzNzAzZTIwNDQ2NDYzMzAxcC01MiwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzVwMworICB9LAorICB7IC8vIEVudHJ5IDExNzkKKyAgICAweDEuODQ3NGY0OWE3MTdiY2ZkOWIyM2YwNzdlZTRkMDkwY2ZwLTUwLAorICAgIDB4MS41ZmRiYmU5YmJhNzc2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgwCisgICAgMHgxLjg0NzRmNDlhNzE3YmNmZDliMjNmMDc3ZWU0ZDA5MGNmcC01MCwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzZwMworICB9LAorICB7IC8vIEVudHJ5IDExODEKKyAgICAweDEuNmEwOWU2NjdmM2JiOGFiNGI4YzhkNWVjZjZiOTEwZDZwLTEsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDVwMworICB9LAorICB7IC8vIEVudHJ5IDExODIKKyAgICAweDEuNmEwOWU2NjdmM2JiOGFiNGI4YzhkNWVjZjZiOTEwZDZwLTEsCisgICAgLTB4MS43OGZkYjllZmZlYTQ1cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgzCisgICAgMHgxLjZhMDllNjY3ZjNiYzNmYjlhYmZjY2ZjYmNkMjYyYWEwcC0xLAorICAgIDB4MS43OGZkYjllZmZlYTQ2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTg0CisgICAgMHgxLjZhMDllNjY3ZjNiYzNmYjlhYmZjY2ZjYmNkMjYyYWEwcC0xLAorICAgIC0weDEuNzhmZGI5ZWZmZWE0NnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE4NQorICAgIDB4MS42YTA5ZTY2N2YzYmNmNGJlOWYzMGM5YWE0OTEwY2FjZnAtMSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0N3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTE4NgorICAgIDB4MS42YTA5ZTY2N2YzYmNmNGJlOWYzMGM5YWE0OTEwY2FjZnAtMSwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDdwMworICB9LAorICB7IC8vIEVudHJ5IDExODcKKyAgICAweDEuNmEwOWU2NjdmM2JlMGQ5YTE1NWNkMWMzNzY3ZWI3YjNwLTEsCisgICAgMHgxLmFiNDFiMDk4ODZmZThwMworICB9LAorICB7IC8vIEVudHJ5IDExODgKKyAgICAweDEuNmEwOWU2NjdmM2JlMGQ5YTE1NWNkMWMzNzY3ZWI3YjNwLTEsCisgICAgLTB4MS5hYjQxYjA5ODg2ZmU4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTg5CisgICAgMHgxLjZhMDllNjY3ZjNiZDU4OTUyMjI4ZDdlNTg3MDFkMjk5cC0xLAorICAgIDB4MS5hYjQxYjA5ODg2ZmU5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkwCisgICAgMHgxLjZhMDllNjY3ZjNiZDU4OTUyMjI4ZDdlNTg3MDFkMjk5cC0xLAorICAgIC0weDEuYWI0MWIwOTg4NmZlOXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE5MQorICAgIDB4MS42YTA5ZTY2N2YzYmNhMzkwMmVmNGRlMDczZDAyNzNlNnAtMSwKKyAgICAweDEuYWI0MWIwOTg4NmZlYXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE5MgorICAgIDB4MS42YTA5ZTY2N2YzYmNhMzkwMmVmNGRlMDczZDAyNzNlNnAtMSwKKyAgICAtMHgxLmFiNDFiMDk4ODZmZWFwMworICB9LAorICB7IC8vIEVudHJ5IDExOTMKKyAgICAweDEuNGY2YmFiZTVkYjllMWVmNDBkNjljNDUyZTEzNTU5MWRwLTQ5LAorICAgIDB4MS5jNDYzYWJlY2NiMmJhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTk0CisgICAgMHgxLjRmNmJhYmU1ZGI5ZTFlZjQwZDY5YzQ1MmUxMzU1OTFkcC00OSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmFwMworICB9LAorICB7IC8vIEVudHJ5IDExOTUKKyAgICAweDEuM2RhZWFmOTc2ZTc4N2JkMDM1YTcxMTRiZTM4N2I1YzNwLTUxLAorICAgIDB4MS5jNDYzYWJlY2NiMmJicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTk2CisgICAgMHgxLjNkYWVhZjk3NmU3ODdiZDAzNWE3MTE0YmUzODdiNWMzcC01MSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmJwMworICB9LAorICB7IC8vIEVudHJ5IDExOTcKKyAgICAtMHgxLjYxMjhhODM0NDhjM2MyMTdlNTJjNzc1YTA2OThkMjZhcC01MCwKKyAgICAweDEuYzQ2M2FiZWNjYjJiY3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTE5OAorICAgIC0weDEuNjEyOGE4MzQ0OGMzYzIxN2U1MmM3NzVhMDY5OGQyNmFwLTUwLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiY3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTE5OQorICAgIC0weDEuNmEwOWU2NjdmM2JiN2UzOWU4NjlkNDI1ODA5MDhjN2NwLTEsCisgICAgMHgxLmRkODVhNzQxMGY1OGJwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDAKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjdlMzllODY5ZDQyNTgwOTA4YzdjcC0xLAorICAgIC0weDEuZGQ4NWE3NDEwZjU4YnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwMQorICAgIC0weDEuNmEwOWU2NjdmM2JjMzMzZWRiOWRjZTA0NWQzYjBlNzVwLTEsCisgICAgMHgxLmRkODVhNzQxMGY1OGNwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDIKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzMzM2VkYjlkY2UwNDVkM2IwZTc1cC0xLAorICAgIC0weDEuZGQ4NWE3NDEwZjU4Y3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwMworICAgIC0weDEuNmEwOWU2NjdmM2JjZTg0M2NlZDFjN2UyZGY2MzE2ZDRwLTEsCisgICAgMHgxLmRkODVhNzQxMGY1OGRwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDQKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2U4NDNjZWQxYzdlMmRmNjMxNmQ0cC0xLAorICAgIC0weDEuZGQ4NWE3NDEwZjU4ZHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwNQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOGM0NWQzZDRwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWRwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjhjNDVkM2Q0cC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwNworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjg2NTMzNTNwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWVwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDgKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4NjUzMzUzcC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwOQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTQ4NDkyZDNwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWZwMworICB9LAorICB7IC8vIEVudHJ5IDEyMTAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU0ODQ5MmQzcC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIxMQorICAgIC0weDEuNmEwOWU2NjdmM2JmODQxZWNjMjNjNzQ1OTkwNzZhODFwLTEsCisgICAgMHgxLjA3ZTRjZWY0Y2JkOTZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMTIKKyAgICAtMHgxLjZhMDllNjY3ZjNiZjg0MWVjYzIzYzc0NTk5MDc2YTgxcC0xLAorICAgIC0weDEuMDdlNGNlZjRjYmQ5NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIxMworICAgIC0weDEuNmEwOWU2NjdmM2JlMWExNGU1YmJkMzhhZDYwZmRkN2JwLTEsCisgICAgMHgxLjA3ZTRjZWY0Y2JkOTdwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMTQKKyAgICAtMHgxLjZhMDllNjY3ZjNiZTFhMTRlNWJiZDM4YWQ2MGZkZDdicC0xLAorICAgIC0weDEuMDdlNGNlZjRjYmQ5N3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTIxNQorICAgIC0weDEuNmEwOWU2NjdmM2JjYjAwYWZmNTNkZmNlYTkwZTZhMGNwLTEsCisgICAgMHgxLjA3ZTRjZWY0Y2JkOThwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMTYKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2IwMGFmZjUzZGZjZWE5MGU2YTBjcC0xLAorICAgIC0weDEuMDdlNGNlZjRjYmQ5OHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIxNworICAgIC0weDEuYjA4OGU5MGM3N2ZkMTJlYTc5Zjk4NjMxZTZmMGI3NGJwLTQ4LAorICAgIDB4MS4xNDc1Y2M5ZWVkZWZmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE4CisgICAgLTB4MS5iMDg4ZTkwYzc3ZmQxMmVhNzlmOTg2MzFlNmYwYjc0YnAtNDgsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZWZmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE5CisgICAgLTB4MS42MTExZDIxOGVmZmEyNWQ0ZjNmMzBjNjU0ZDdjMzZhMXAtNDksCisgICAgMHgxLjE0NzVjYzllZWRmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIwCisgICAgLTB4MS42MTExZDIxOGVmZmEyNWQ0ZjNmMzBjNjU0ZDdjMzZhMXAtNDksCisgICAgLTB4MS4xNDc1Y2M5ZWVkZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIyMQorICAgIDB4MS4zZGRjNWJjZTIwMGJiNDU2MTgxOWU3MzUyN2Y1YTZkN3AtNTAsCisgICAgMHgxLjE0NzVjYzllZWRmMDFwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMjIKKyAgICAweDEuM2RkYzViY2UyMDBiYjQ1NjE4MTllNzM1MjdmNWE2ZDdwLTUwLAorICAgIC0weDEuMTQ3NWNjOWVlZGYwMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIyMworICAgIDB4MS42YTA5ZTY2N2YzYmFiY2JhMjRkNmQ4N2VjYzhmODNiNHAtMSwKKyAgICAweDEuMjEwNmNhNDkxMDA2OHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIyNAorICAgIDB4MS42YTA5ZTY2N2YzYmFiY2JhMjRkNmQ4N2VjYzhmODNiNHAtMSwKKyAgICAtMHgxLjIxMDZjYTQ5MTAwNjhwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMjUKKyAgICAweDEuNmEwOWU2NjdmM2JjMjZjNDBiM2VjYzNjZWNlMWQxYTBwLTEsCisgICAgMHgxLjIxMDZjYTQ5MTAwNjlwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMjYKKyAgICAweDEuNmEwOWU2NjdmM2JjMjZjNDBiM2VjYzNjZWNlMWQxYTBwLTEsCisgICAgLTB4MS4yMTA2Y2E0OTEwMDY5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI3CisgICAgMHgxLjZhMDllNjY3ZjNiZDkwY2RmMWE2YmZmOWEzMmEzOTIzcC0xLAorICAgIDB4MS4yMTA2Y2E0OTEwMDZhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI4CisgICAgMHgxLjZhMDllNjY3ZjNiZDkwY2RmMWE2YmZmOWEzMmEzOTIzcC0xLAorICAgIC0weDEuMjEwNmNhNDkxMDA2YXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIyOQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU4YjI3YjZhMnAtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIzMAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU4YjI3YjZhMnAtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDFwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMzEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjUwYzliZDRwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMzIKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjUwYzliZDRwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjVlZjE4MTA3cC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQzcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjVlZjE4MTA3cC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkM3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTIzNQorICAgIDB4MS42YTA5ZTY2N2YzYmY5MDk5OWM4MmM5MGNlYmFmOWYzZnAtMSwKKyAgICAweDEuM2EyOGM1OWQ1NDMzOXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIzNgorICAgIDB4MS42YTA5ZTY2N2YzYmY5MDk5OWM4MmM5MGNlYmFmOWYzZnAtMSwKKyAgICAtMHgxLjNhMjhjNTlkNTQzMzlwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMzcKKyAgICAweDEuNmEwOWU2NjdmM2JlMjY4ZmI2MWFkNTUyMzUzMmUyOThwLTEsCisgICAgMHgxLjNhMjhjNTlkNTQzM2FwNAorICB9LAorICB7IC8vIEVudHJ5IDEyMzgKKyAgICAweDEuNmEwOWU2NjdmM2JlMjY4ZmI2MWFkNTUyMzUzMmUyOThwLTEsCisgICAgLTB4MS4zYTI4YzU5ZDU0MzNhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM5CisgICAgMHgxLjZhMDllNjY3ZjNiY2JjODVjZmIyZTE5NjE0YWMzZjg4cC0xLAorICAgIDB4MS4zYTI4YzU5ZDU0MzNicDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQwCisgICAgMHgxLjZhMDllNjY3ZjNiY2JjODVjZmIyZTE5NjE0YWMzZjg4cC0xLAorICAgIC0weDEuM2EyOGM1OWQ1NDMzYnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI0MQorICAgIDB4MS5iOTViZmMyNjAyMmIxNjVhZWQzZTJhM2IxMjM4MjQ3OXAtNDgsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTJwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNDIKKyAgICAweDEuYjk1YmZjMjYwMjJiMTY1YWVkM2UyYTNiMTIzODI0NzlwLTQ4LAorICAgIC0weDEuNDZiOWMzNDc3NjRhMnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI0MworICAgIDB4MS43MmI3Zjg0YzA0NTYyY2I1ZGE3YzU0NzdiOTU3YWRlYnAtNDksCisgICAgMHgxLjQ2YjljMzQ3NzY0YTNwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNDQKKyAgICAweDEuNzJiN2Y4NGMwNDU2MmNiNWRhN2M1NDc3Yjk1N2FkZWJwLTQ5LAorICAgIC0weDEuNDZiOWMzNDc3NjRhM3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI0NQorICAgIC0weDEuMWE5MDBmNjdmNzUzYTY5NDRiMDc1NzEwNDhmMWNhZDJwLTUwLAorICAgIDB4MS40NmI5YzM0Nzc2NGE0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ2CisgICAgLTB4MS4xYTkwMGY2N2Y3NTNhNjk0NGIwNzU3MTA0OGYxY2FkMnAtNTAsCisgICAgLTB4MS40NmI5YzM0Nzc2NGE0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ3CisgICAgLTB4MS42YTA5ZTY2N2YzYmFiMDNmNTQ3N2Q2Yjc0ZjRkNTVkNXAtMSwKKyAgICAweDEuNTM0YWMwZjE5ODYwYnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI0OAorICAgIC0weDEuNmEwOWU2NjdmM2JhYjAzZjU0NzdkNmI3NGY0ZDU1ZDVwLTEsCisgICAgLTB4MS41MzRhYzBmMTk4NjBicDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ5CisgICAgLTB4MS42YTA5ZTY2N2YzYmMxYTQ5M2FkZmNhNzU3YzFhNzQxZnAtMSwKKyAgICAweDEuNTM0YWMwZjE5ODYwY3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI1MAorICAgIC0weDEuNmEwOWU2NjdmM2JjMWE0OTNhZGZjYTc1N2MxYTc0MWZwLTEsCisgICAgLTB4MS41MzRhYzBmMTk4NjBjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUxCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ4NDUzMjE0N2JlMzIzZWRkYWMwMXAtMSwKKyAgICAweDEuNTM0YWMwZjE5ODYwZHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI1MgorICAgIC0weDEuNmEwOWU2NjdmM2JkODQ1MzIxNDdiZTMyM2VkZGFjMDFwLTEsCisgICAgLTB4MS41MzRhYzBmMTk4NjBkcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUzCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU3NThkM2E3Y3AtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI1NAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNzU4ZDNhN2NwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMTE4NDVlMXAtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI1NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjExODQ1ZTFwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc1cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU3CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY2Y2EzNTE0N3AtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI1OAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNmNhMzUxNDdwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU5CisgICAgLTB4MS42YTA5ZTY2N2YzYmY5ZDE0NmNlMWNhZDQzZGU5YjM1MnAtMSwKKyAgICAweDEuNmM2Y2JjNDVkYzhkY3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2MAorICAgIC0weDEuNmEwOWU2NjdmM2JmOWQxNDZjZTFjYWQ0M2RlOWIzNTJwLTEsCisgICAgLTB4MS42YzZjYmM0NWRjOGRjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYxCisgICAgLTB4MS42YTA5ZTY2N2YzYmUzMzBhODY3OWQ3MTk5M2U3YzcwOXAtMSwKKyAgICAweDEuNmM2Y2JjNDVkYzhkZHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2MgorICAgIC0weDEuNmEwOWU2NjdmM2JlMzMwYTg2NzlkNzE5OTNlN2M3MDlwLTEsCisgICAgLTB4MS42YzZjYmM0NWRjOGRkcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYzCisgICAgLTB4MS42YTA5ZTY2N2YzYmNjOTAwYTAxMWUzNWQ3ZmRiZjQ1OXAtMSwKKyAgICAweDEuNmM2Y2JjNDVkYzhkZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2NAorICAgIC0weDEuNmEwOWU2NjdmM2JjYzkwMGEwMTFlMzVkN2ZkYmY0NTlwLTEsCisgICAgLTB4MS42YzZjYmM0NWRjOGRlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY1CisgICAgLTB4MS5jMjJmMGYzZjhjNTkxOWNiNjA4MmNlNDQzY2Y5NTAyMnAtNDgsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDVwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjYKKyAgICAtMHgxLmMyMmYwZjNmOGM1OTE5Y2I2MDgyY2U0NDNjZjk1MDIycC00OCwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDVwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjcKKyAgICAtMHgxLjg0NWUxZTdmMThiMjMzOTZjMTA1OWM4YTI0YzI2MDljcC00OSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2OAorICAgIC0weDEuODQ1ZTFlN2YxOGIyMzM5NmMxMDU5YzhhMjRjMjYwOWNwLTQ5LAorICAgIC0weDEuNzhmZGI5ZWZmZWE0NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2OQorICAgIDB4MS5lZTg3ODYwMzlkMzczMWE0ZmJlOThkZDZkMzJmZjYyYXAtNTEsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDdwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNzAKKyAgICAweDEuZWU4Nzg2MDM5ZDM3MzFhNGZiZTk4ZGQ2ZDMyZmY2MmFwLTUxLAorICAgIC0weDEuNzhmZGI5ZWZmZWE0N3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3MQorICAgIDB4MS42YTA5ZTY2N2YzYmFhM2M0ODQxOGQ0ZWZkMTlkMDc0YXAtMSwKKyAgICAweDEuODU4ZWI3OWEyMGJhZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3MgorICAgIDB4MS42YTA5ZTY2N2YzYmFhM2M0ODQxOGQ0ZWZkMTlkMDc0YXAtMSwKKyAgICAtMHgxLjg1OGViNzlhMjBiYWVwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNzMKKyAgICAweDEuNmEwOWU2NjdmM2JjMGRjZTZhODBjOGFlMGFlNGY1ZjNwLTEsCisgICAgMHgxLjg1OGViNzlhMjBiYWZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNzQKKyAgICAweDEuNmEwOWU2NjdmM2JjMGRjZTZhODBjOGFlMGFlNGY1ZjNwLTEsCisgICAgLTB4MS44NThlYjc5YTIwYmFmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc1CisgICAgMHgxLjZhMDllNjY3ZjNiZDc3ZDg1MGU4YmM2YWRhMjJmZTM0cC0xLAorICAgIDB4MS44NThlYjc5YTIwYmIwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc2CisgICAgMHgxLjZhMDllNjY3ZjNiZDc3ZDg1MGU4YmM2YWRhMjJmZTM0cC0xLAorICAgIC0weDEuODU4ZWI3OWEyMGJiMHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3NworICAgIC0weDEuMmNjYWY2NDFkNDI2MWVhM2NjZDhkMmExMDJkYzMwNjZwLTMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc4CisgICAgLTB4MS4yY2NhZjY0MWQ0MjYxZWEzY2NkOGQyYTEwMmRjMzA2NnAtMywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc5CisgICAgMHgxLjgyYWEzNzViM2MzM2U3MDY2MzczMWJhYjRiZWI2ZWQzcC03LAorICAgIDB4MS4wcDYzCisgIH0sCisgIHsgLy8gRW50cnkgMTI4MAorICAgIDB4MS44MmFhMzc1YjNjMzNlNzA2NjM3MzFiYWI0YmViNmVkM3AtNywKKyAgICAtMHgxLjBwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgxCisgICAgMHgxLjRjMDYyMmE2ZTM1ZGRlZmQ1ZjJiNzcwMDcxNmE1ODFmcC0yLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDYzCisgIH0sCisgIHsgLy8gRW50cnkgMTI4MgorICAgIDB4MS40YzA2MjJhNmUzNWRkZWZkNWYyYjc3MDA3MTZhNTgxZnAtMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgzCisgICAgMHgxLjRhYjY1MGI4YzYwNzM0Mzg1Mzc1ZTIyNjAzZmNkYjEwcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDI2CisgIH0sCisgIHsgLy8gRW50cnkgMTI4NAorICAgIDB4MS40YWI2NTBiOGM2MDczNDM4NTM3NWUyMjYwM2ZjZGIxMHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg1CisgICAgMHgxLjRhYjY1MTFhN2QzOWFkM2NjODhkZWQxZTc3NWNhMTQ3cC0xLAorICAgIDB4MS4wcDI3CisgIH0sCisgIHsgLy8gRW50cnkgMTI4NgorICAgIDB4MS40YWI2NTExYTdkMzlhZDNjYzg4ZGVkMWU3NzVjYTE0N3AtMSwKKyAgICAtMHgxLjBwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg3CisgICAgMHgxLjRhYjY1MWRkZWI5ZTYxNDM4MzgyZjAyMTY3YWRlNGFmcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDI3CisgIH0sCisgIHsgLy8gRW50cnkgMTI4OAorICAgIDB4MS40YWI2NTFkZGViOWU2MTQzODM4MmYwMjE2N2FkZTRhZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg5CisgICAgMHgxLjQwYWQ2N2U3NzdiMWRmMDE5NTE4OWY1MGE4YzI2MzQ1cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTI5MAorICAgIDB4MS40MGFkNjdlNzc3YjFkZjAxOTUxODlmNTBhOGMyNjM0NXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkxCisgICAgMHgxLjQwYWQ2N2YzZjBjOWExNDM5NjNjOWM5NmRiY2UzZjhhcC0xLAorICAgIDB4MS4wcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTI5MgorICAgIDB4MS40MGFkNjdmM2YwYzlhMTQzOTYzYzljOTZkYmNlM2Y4YXAtMSwKKyAgICAtMHgxLjBwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkzCisgICAgMHgxLjQwYWQ2ODBjZTJmOTI0ZDcxNjc2OWQxMDY0YmM4ZGVmcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTI5NAorICAgIDB4MS40MGFkNjgwY2UyZjkyNGQ3MTY3NjlkMTA2NGJjOGRlZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjk1CisgICAgLTB4MS40ZWFhNjA2ZGIyNGMzY2I1ZTE1ZDdiMTlkNWVlNzNhMXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTI5NgorICAgIC0weDEuNGVhYTYwNmRiMjRjM2NiNWUxNWQ3YjE5ZDVlZTczYTFwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjk3CisgICAgLTB4MS40ZWFhNjA2ZGIyNGMwYzQ2NmRhMWMyZGM3YmFhMmIzMnAtMSwKKyAgICAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTI5OAorICAgIC0weDEuNGVhYTYwNmRiMjRjMGM0NjZkYTFjMmRjN2JhYTJiMzJwLTEsCisgICAgLTB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjk5CisgICAgLTB4MS40ZWFhNjA2ZGIyNGJhYjY3ODYyYTUyNjFiNzcxOWRjZnAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTMwMAorICAgIC0weDEuNGVhYTYwNmRiMjRiYWI2Nzg2MmE1MjYxYjc3MTlkY2ZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAxCisgICAgLTB4MS5hYTIyNjU3NTM3MjAxMDExNDUyMzA5NTJlNjFjNmYyY3AtMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTMwMgorICAgIC0weDEuYWEyMjY1NzUzNzIwMTAxMTQ1MjMwOTUyZTYxYzZmMmNwLTIsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAzCisgICAgLTB4MS5hYTIyNjU3NTM3MjA0YTQzMzJmOGFjYmI3MmIwZDc2OHAtMiwKKyAgICAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTMwNAorICAgIC0weDEuYWEyMjY1NzUzNzIwNGE0MzMyZjhhY2JiNzJiMGQ3NjhwLTIsCisgICAgLTB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzA1CisgICAgLTB4MS5hYTIyNjU3NTM3MjBiZWE3MGVhM2YzOGM4NmRiNDBhZnAtMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTMwNgorICAgIC0weDEuYWEyMjY1NzUzNzIwYmVhNzBlYTNmMzhjODZkYjQwYWZwLTIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzA3CisgICAgMHgxLjE0YTI4MGZiNTA2OGM2OWEyZWQ0NWZiNTQ3YzJmMjcxcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTMwOAorICAgIDB4MS4xNGEyODBmYjUwNjhjNjlhMmVkNDVmYjU0N2MyZjI3MXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzA5CisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzEwCisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTMxMQorICAgIDB4MS4xNGEyODBmYjUwNjg5ZTM2MmZmZGQyMjFlMjU1MTAzNXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTMxMgorICAgIDB4MS4xNGEyODBmYjUwNjg5ZTM2MmZmZGQyMjFlMjU1MTAzNXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDEzMTMKKyAgICAweDEuYzE1MjgwNjViN2Q0ZmRiMTU4YzljNGE2YjNlNGI3NDBwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzE0CisgICAgMHgxLmMxNTI4MDY1YjdkNGZkYjE1OGM5YzRhNmIzZTRiNzQwcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEzMTUKKyAgICAweDEuYzE1MjgwNjViN2Q0ZjlkYjdiYmIzYjQ1ZjVmNWIzMGFwLTEsCisgICAgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzE2CisgICAgMHgxLmMxNTI4MDY1YjdkNGY5ZGI3YmJiM2I0NWY1ZjViMzBhcC0xLAorICAgIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzMTcKKyAgICAweDEuYzE1MjgwNjViN2Q0ZjIyZmMxOWUyODg0NzljMzZiMjdwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzE4CisgICAgMHgxLmMxNTI4MDY1YjdkNGYyMmZjMTllMjg4NDc5YzM2YjI3cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzMTkKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTg0YzVmMWQyMTBiNmFkYmU1NmNwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIwCisgICAgMHgxLmYwMTU0OWY3ZGVlYTE4NGM1ZjFkMjEwYjZhZGJlNTZjcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDEzMjEKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTc0ZjA3YTY3OTcyYmYyOWYxNDhwLTEsCisgICAgMHgxLjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIyCisgICAgMHgxLmYwMTU0OWY3ZGVlYTE3NGYwN2E2Nzk3MmJmMjlmMTQ4cC0xLAorICAgIC0weDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEzMjMKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTU1NDU4YjkyYTQxNjdhZWM3ZmZwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzI0CisgICAgMHgxLmYwMTU0OWY3ZGVlYTE1NTQ1OGI5MmE0MTY3YWVjN2ZmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDEzMjUKKyAgICAweDEuZmMwMTU1MjdkNWJkMzcxYTEyMzIwMjQ5Y2E0ZGFmZDdwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzI2CisgICAgMHgxLmZjMDE1NTI3ZDViZDM3MWExMjMyMDI0OWNhNGRhZmQ3cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEzMjcKKyAgICAweDEuZmMwMTU1MjdkNWJkMzZkYTNjZDQyNTNiZWRlMzE5Y2FwLTEsCisgICAgMHgxLjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzI4CisgICAgMHgxLmZjMDE1NTI3ZDViZDM2ZGEzY2Q0MjUzYmVkZTMxOWNhcC0xLAorICAgIC0weDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDEzMjkKKyAgICAweDEuZmMwMTU1MjdkNWJkMzY1YTkyMTg2YjIwMzUwN2Y5YWRwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMwCisgICAgMHgxLmZjMDE1NTI3ZDViZDM2NWE5MjE4NmIyMDM1MDdmOWFkcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMworICB9LAorICB7IC8vIEVudHJ5IDEzMzEKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRkYTBiNzQ1ZGM3NDMzMTQ1ZWZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMyCisgICAgMHgxLmZmMDAxNTU0OWY0ZDM0ZGEwYjc0NWRjNzQzMzE0NWVmcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzMzMKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRjYTBlMWVlNjUwOWJjNDJiNzFwLTEsCisgICAgMHgxLjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzM0CisgICAgMHgxLmZmMDAxNTU0OWY0ZDM0Y2EwZTFlZTY1MDliYzQyYjcxcC0xLAorICAgIC0weDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEzMzUKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRhYTEzNzNmNzYzNGNlODc3MzdwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzM2CisgICAgMHgxLmZmMDAxNTU0OWY0ZDM0YWExMzczZjc2MzRjZTg3NzM3cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEzMzcKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxNmFlYjA5ZmI3MDYzNmExMGFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzM4CisgICAgMHgxLmZmYzAwMTU1NTI3ZDJiMTZhZWIwOWZiNzA2MzZhMTBhcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEzMzkKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxMmFlZGI0OWQ5MjkyOGRmNzJwLTEsCisgICAgMHgxLjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQwCisgICAgMHgxLmZmYzAwMTU1NTI3ZDJiMTJhZWRiNDlkOTI5MjhkZjcycC0xLAorICAgIC0weDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzNDEKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIwYWFmMzA5ZTFkNmYwY2ZjNGVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQyCisgICAgMHgxLmZmYzAwMTU1NTI3ZDJiMGFhZjMwOWUxZDZmMGNmYzRlcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzNDMKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMzhhMjU2M2VmMzQ0YzNmZjRwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQ0CisgICAgMHgxLmZmZjAwMDE1NTU0OWY0YTM4YTI1NjNlZjM0NGMzZmY0cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDEzNDUKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMjhhMjgwZTk3YmNkNTljOGFwLTEsCisgICAgMHgxLjBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQ2CisgICAgMHgxLmZmZjAwMDE1NTU0OWY0YTI4YTI4MGU5N2JjZDU5YzhhcC0xLAorICAgIC0weDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDEzNDcKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMDhhMmQ2M2U4Y2RlODNkYjVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQ4CisgICAgMHgxLmZmZjAwMDE1NTU0OWY0YTA4YTJkNjNlOGNkZTgzZGI1cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtNgorICB9LAorICB7IC8vIEVudHJ5IDEzNDkKKyAgICAweDEuZmZmZmZmZjAwMDAwMDAxNTU1NTY1NTQ5ZjQ5YzlmNGRwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTE1CisgIH0sCisgIHsgLy8gRW50cnkgMTM1MAorICAgIDB4MS5mZmZmZmZmMDAwMDAwMDE1NTU1NjU1NDlmNDljOWY0ZHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTE1CisgIH0sCisgIHsgLy8gRW50cnkgMTM1MQorICAgIDB4MS5mZmZmZmZmMDAwMDAwMDE1NTU1NTU1NDlmNDlmNDlmN3AtMSwKKyAgICAweDEuMHAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUyCisgICAgMHgxLmZmZmZmZmYwMDAwMDAwMTU1NTU1NTU0OWY0OWY0OWY3cC0xLAorICAgIC0weDEuMHAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUzCisgICAgMHgxLmZmZmZmZmYwMDAwMDAwMTU1NTUzNTU0OWY0YTQ5ZjRkcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEzNTQKKyAgICAweDEuZmZmZmZmZjAwMDAwMDAxNTU1NTM1NTQ5ZjRhNDlmNGRwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEzNTUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDA0MTU1NTVwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTI4CisgIH0sCisgIHsgLy8gRW50cnkgMTM1NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDQxNTU1NXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTI4CisgIH0sCisgIHsgLy8gRW50cnkgMTM1NworICAgIDB4MS5mZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAxNTU1NXAtMSwKKyAgICAweDEuMHAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzU4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDE1NTU1cC0xLAorICAgIC0weDEuMHAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzU5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZiZmZmZmZmZmZmZmZmODE1NTU1cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0yNworICB9LAorICB7IC8vIEVudHJ5IDEzNjAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmJmZmZmZmZmZmZmZmY4MTU1NTVwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0yNworICB9LAorICB7IC8vIEVudHJ5IDEzNjEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMTAwMTVwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMTM2MgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAxMDAxNXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMTM2MworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAxNXAtMSwKKyAgICAweDEuMHAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzY0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDE1cC0xLAorICAgIC0weDEuMHAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzY1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZWZmZmZmZmZmZmZmZmUwMDE1cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEzNjYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZlZmZmZmZmZmZmZmZmZTAwMTVwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEzNjcKKyAgICAtMHgxLmZmZmU2MmVjZmFiNzUzYzA3MWIyNjgwZTFlMjZiYmNlcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTM2OAorICAgIC0weDEuZmZmZTYyZWNmYWI3NTNjMDcxYjI2ODBlMWUyNmJiY2VwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEzNjkKKyAgICAtMHgxLmZmZmU2MmVjZmFiNzUzYzA3MWIyNjgwZTFlMjZiYmNlcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzcwCisgICAgLTB4MS5mZmZlNjJlY2ZhYjc1M2MwNzFiMjY4MGUxZTI2YmJjZXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEzNzEKKyAgICAtMHgxLmZmZmU2MmVjZmFiNzUzYzA3MWIyNjgwZTFlMjZiYmNlcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzcyCisgICAgLTB4MS5mZmZlNjJlY2ZhYjc1M2MwNzFiMjY4MGUxZTI2YmJjZXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEzNzMKKyAgICAweDEuN2ZmZGZiNGM1MzA4Zjc3N2NmNzc0YzczM2IyNTY2OTVwLTIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEzNzQKKyAgICAweDEuN2ZmZGZiNGM1MzA4Zjc3N2NmNzc0YzczM2IyNTY2OTVwLTIsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzc1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTM3NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzc3CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0NDE5ZmE4cC01NCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM3OAorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDQxOWZhOHAtNTQsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzc5CisgICAgMHgxLjE0YTI4MGZiNTA2ODllMzYyZmZkZDIyMWUyNTUxMDM1cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgwCisgICAgMHgxLjE0YTI4MGZiNTA2ODllMzYyZmZkZDIyMWUyNTUxMDM1cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM4MQorICAgIDB4MS4xNGEyODBmYjUwNjhiOTIzODQ4Y2RiMmVkMGUzN2E1M3AtMSwKKyAgICAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM4MgorICAgIDB4MS4xNGEyODBmYjUwNjhiOTIzODQ4Y2RiMmVkMGUzN2E1M3AtMSwKKyAgICAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDEzODMKKyAgICAweDEuMTRhMjgwZmI1MDY4YzY5YTJlZDQ1ZmI1NDdjMmYyNzFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzg0CisgICAgMHgxLjE0YTI4MGZiNTA2OGM2OWEyZWQ0NWZiNTQ3YzJmMjcxcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzODUKKyAgICAweDEuNmEwOWU2NjdmM2JjY2MyNzY3MTJkM2Q4YzU1MDIzODdwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzg2CisgICAgMHgxLjZhMDllNjY3ZjNiY2NjMjc2NzEyZDNkOGM1NTAyMzg3cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzODcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzg4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDEzODkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDEzOTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEzOTMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmNwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzk0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmY3AtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEzOTUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzk2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3MworICB9LAorICB7IC8vIEVudHJ5IDEzOTcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzk4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDEzOTkKKyAgICAweDEucDAsCisgICAgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgMTQwMAorICAgIDB4MS5wMCwKKyAgICAtMC4wCisgIH0sCit9OworI2VuZGlmIC8vIF9fQklPTklDX18KKworVEVTVChtYXRoX2NvcywgY29zX2ludGVsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX2Nvc19pbnRlbF9kYXRhKS9zaXplb2YoY29zX2ludGVsX2RhdGFfdCk7IGkrKykgeworICAgIEVYUEVDVF9ET1VCTEVfRVEoZ19jb3NfaW50ZWxfZGF0YVtpXS5leHBlY3RlZCwgY29zKGdfY29zX2ludGVsX2RhdGFbaV0uY2FsbF9kYXRhKSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9jb3NmX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF9jb3NmX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOTVmZjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tYXRoX2Nvc2ZfdGVzdC5jcHAKQEAgLTAsMCArMSw0MzU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCit0eXBlZGVmIHN0cnVjdCB7CisgIGZsb2F0IGV4cGVjdGVkOworICBmbG9hdCBjYWxsX2RhdGE7Cit9IGNvc2ZfaW50ZWxfZGF0YV90OworCitzdGF0aWMgY29zZl9pbnRlbF9kYXRhX3QgZ19jb3NmX2ludGVsX2RhdGFbXSA9IHsKKyAgeyAvLyBFbnRyeSAwCisgICAgMHgxLmJjN2I2NmZmYjc2ODlkNjQ2ZGQxYWY4M2U5NjYxZDJkcC0xLAorICAgIC0weDEuMDllYmFjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMQorICAgIDB4MS5iYzdiNjZmZmI3Njg5ZDY0NmRkMWFmODNlOTY2MWQyZHAtMSwKKyAgICAweDEuMDllYmFjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIDB4MS5kZWU4ZDBmZmZjZDk5N2NlNWNmYmFiMGE1YTMzNmMxNHAtNSwKKyAgICAtMHgxLjE1NjU2NHA0CisgIH0sCisgIHsgLy8gRW50cnkgMworICAgIDB4MS5kZWU4ZDBmZmZjZDk5N2NlNWNmYmFiMGE1YTMzNmMxNHAtNSwKKyAgICAweDEuMTU2NTY0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0CisgICAgLTB4MS5jMTFiYjJmMDU2NTUyY2E0Y2RiNmM1YTBjZjcxNTA5ZHAtOCwKKyAgICAtMHgxLjQwNmE0MHA2CisgIH0sCisgIHsgLy8gRW50cnkgNQorICAgIC0weDEuYzExYmIyZjA1NjU1MmNhNGNkYjZjNWEwY2Y3MTUwOWRwLTgsCisgICAgMHgxLjQwNmE0MHA2CisgIH0sCisgIHsgLy8gRW50cnkgNgorICAgIDB4MS5mZjgzNmNmZjk3MDc3YmY0ODlhYWRjNWYzNDlhOWZiOXAtMSwKKyAgICAtMHgxLjY1MzA3OHAtNQorICB9LAorICB7IC8vIEVudHJ5IDcKKyAgICAweDEuZmY4MzZjZmY5NzA3N2JmNDg5YWFkYzVmMzQ5YTlmYjlwLTEsCisgICAgMHgxLjY1MzA3OHAtNQorICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICAweDEuYjI5Y2Q0ZjlkYTI5NjRlOGM2YmI1NjkzMzg3ZDNmM2JwLTUsCisgICAgLTB4MS42YzAwMDhwNQorICB9LAorICB7IC8vIEVudHJ5IDkKKyAgICAweDEuYjI5Y2Q0ZjlkYTI5NjRlOGM2YmI1NjkzMzg3ZDNmM2JwLTUsCisgICAgMHgxLjZjMDAwOHA1CisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAweDEuZGY0MGQzZjY1MGY2Yzk0MzkwYTNjYTVkOGQ5YjQ4YzFwLTEsCisgICAgLTB4MS43MDM4MjRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIDB4MS5kZjQwZDNmNjUwZjZjOTQzOTBhM2NhNWQ4ZDliNDhjMXAtMSwKKyAgICAweDEuNzAzODI0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTIKKyAgICAweDEuZjc2MzE2ZjU0MWUxMGVmMTVkNTdjNWEyMzc3NTMyOWNwLTEsCisgICAgLTB4MS43ODJlMmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMworICAgIDB4MS5mNzYzMTZmNTQxZTEwZWYxNWQ1N2M1YTIzNzc1MzI5Y3AtMSwKKyAgICAweDEuNzgyZTJlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTQKKyAgICAweDEuY2ZhYjBlYzJmYzk1MzgyOTg2ZmE1MTE2NDhiZDRlNmZwLTI0LAorICAgIC0weDEuOGUzMjY2cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNQorICAgIDB4MS5jZmFiMGVjMmZjOTUzODI5ODZmYTUxMTY0OGJkNGU2ZnAtMjQsCisgICAgMHgxLjhlMzI2NnA5CisgIH0sCisgIHsgLy8gRW50cnkgMTYKKyAgICAweDEuOTJlNjZiNTkyMGE4NWQ2MDgzZTljYzg1NTY4Y2VhYTNwLTIxLAorICAgIC0weDEuYzZhYzAycDE0CisgIH0sCisgIHsgLy8gRW50cnkgMTcKKyAgICAweDEuOTJlNjZiNTkyMGE4NWQ2MDgzZTljYzg1NTY4Y2VhYTNwLTIxLAorICAgIDB4MS5jNmFjMDJwMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOAorICAgIDB4MS5kMWNlYjRmZmZmNmVkMDViNWVmNWZjNjE4MjMxMjE0YXAtMiwKKyAgICAtMHgxLmU1MTNmY3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTkKKyAgICAweDEuZDFjZWI0ZmZmZjZlZDA1YjVlZjVmYzYxODIzMTIxNGFwLTIsCisgICAgMHgxLmU1MTNmY3A0CisgIH0sCisgIHsgLy8gRW50cnkgMjAKKyAgICAweDEuYzI3ZTA0OWRmZWFiMzhlMWI4ZWE2YTA5NjMxODI5ZmVwLTEsCisgICAgLTB4MS5mYjE5MDRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMQorICAgIDB4MS5jMjdlMDQ5ZGZlYWIzOGUxYjhlYTZhMDk2MzE4MjlmZXAtMSwKKyAgICAweDEuZmIxOTA0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjIKKyAgICAweDEuYjRiZjJjNzliZGZjZGFhNTNlZDZjMDEzZjY1ZTA5NjNwLTEsCisgICAgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjMKKyAgICAweDEuYjRiZjJjNzliZGZjZGFhNTNlZDZjMDEzZjY1ZTA5NjNwLTEsCisgICAgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNAorICAgIDB4MS5mZmZmZmYwMDAwMDAxNTU1NTU1NDlmNDlmNGEyOGEyOHAtMSwKKyAgICAweDEucC0xMgorICB9LAorICB7IC8vIEVudHJ5IDI1CisgICAgMHgxLmZmZmZmZjAwMDAwMDE1NTU1NTU0OWY0OWY0YTI4YTI4cC0xLAorICAgIC0weDEucC0xMgorICB9LAorICB7IC8vIEVudHJ5IDI2CisgICAgMHgxLmZmZmZmZmZmZmZjMDAwMDAwMDAwMDE1NTU1NTU1NTU1cC0xLAorICAgIDB4MS5wLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMjcKKyAgICAweDEuZmZmZmZmZmZmZmMwMDAwMDAwMDAwMTU1NTU1NTU1NTVwLTEsCisgICAgLTB4MS5wLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMjgKKyAgICAweDEuZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDE1NTU1NTU1NTVwLTEsCisgICAgMHgxLnAtMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOQorICAgIDB4MS5mZmZmZmZmZmZmZjAwMDAwMDAwMDAwMTU1NTU1NTU1NXAtMSwKKyAgICAtMHgxLnAtMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMAorICAgIDB4MS5mZmZmZmVmZmZmZmMxNTU1NTFmZjQ5ZjY5NmM0YWVjYXAtMSwKKyAgICAweDEuMDAwMDAycC0xMgorICB9LAorICB7IC8vIEVudHJ5IDMxCisgICAgMHgxLmZmZmZmZWZmZmZmYzE1NTU1MWZmNDlmNjk2YzRhZWNhcC0xLAorICAgIC0weDEuMDAwMDAycC0xMgorICB9LAorICB7IC8vIEVudHJ5IDMyCisgICAgMHgxLjg4MmQ2MDZiYTA3NTA1YTdhMDlhZTc0ZDcxM2Y5Nzg4cC0xLAorICAgIDB4MS4wMDAwMDJwNTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMworICAgIDB4MS44ODJkNjA2YmEwNzUwNWE3YTA5YWU3NGQ3MTNmOTc4OHAtMSwKKyAgICAtMHgxLjAwMDAwMnA1MQorICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgMHgxLmZjMDE1NGY3ZjViNjQyMmY3Nzk0YmYxNTZlZTk4YjdlcC0xLAorICAgIDB4MS4wMDAwMDZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNQorICAgIDB4MS5mYzAxNTRmN2Y1YjY0MjJmNzc5NGJmMTU2ZWU5OGI3ZXAtMSwKKyAgICAtMHgxLjAwMDAwNnAtMworICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgMHgxLjM0ZTk3NmVmNjdkNjBhM2RlODE0YWQzZDAyMDNiYTIxcC0xMCwKKyAgICAweDEuMDAwMDA2cDEyMQorICB9LAorICB7IC8vIEVudHJ5IDM3CisgICAgMHgxLjM0ZTk3NmVmNjdkNjBhM2RlODE0YWQzZDAyMDNiYTIxcC0xMCwKKyAgICAtMHgxLjAwMDAwNnAxMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOAorICAgIC0weDEuZmZmZmEyY2Y1OTM5OGRjNjE4MDgwMWU5ZWEzMTIwYzhwLTEsCisgICAgMHgxLjAwMDAwNnAxMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOQorICAgIC0weDEuZmZmZmEyY2Y1OTM5OGRjNjE4MDgwMWU5ZWEzMTIwYzhwLTEsCisgICAgLTB4MS4wMDAwMDZwMTIyCisgIH0sCisgIHsgLy8gRW50cnkgNDAKKyAgICAweDEuZmZjMDAxNDQ1MzMxNWQ0N2UyYTMxOGJmNjNlNGNhYTdwLTEsCisgICAgMHgxLjAwMDAyMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgMHgxLmZmYzAwMTQ0NTMzMTVkNDdlMmEzMThiZjYzZTRjYWE3cC0xLAorICAgIC0weDEuMDAwMDIycC01CisgIH0sCisgIHsgLy8gRW50cnkgNDIKKyAgICAweDEuYzE1MjE1MDE1ZjNkOTE2YTAwMTlhMzllM2FjYzczNjRwLTEsCisgICAgMHgxLjAwMDBlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgMHgxLmMxNTIxNTAxNWYzZDkxNmEwMDE5YTM5ZTNhY2M3MzY0cC0xLAorICAgIC0weDEuMDAwMGUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDQKKyAgICAweDEuZmYwMDEzOTRlOTMwODVjN2NjZTUzOTE1ODkzYWY3NjVwLTEsCisgICAgMHgxLjAwMDBlMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDQ1CisgICAgMHgxLmZmMDAxMzk0ZTkzMDg1YzdjY2U1MzkxNTg5M2FmNzY1cC0xLAorICAgIC0weDEuMDAwMGUwcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDYKKyAgICAweDEuOTBiMGM5N2RlMjM3MDU4N2E2OGFlYWUyYjY5NDM5NTNwLTE1LAorICAgIDB4MS4wMDAzMjJwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NworICAgIDB4MS45MGIwYzk3ZGUyMzcwNTg3YTY4YWVhZTJiNjk0Mzk1M3AtMTUsCisgICAgLTB4MS4wMDAzMjJwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OAorICAgIC0weDEuOGI5MGM2NzY3NzU2NTg3NGY0NGQ5MzE0Y2EyYmE2MzRwLTYsCisgICAgMHgxLjAwMDQwMnA4CisgIH0sCisgIHsgLy8gRW50cnkgNDkKKyAgICAtMHgxLjhiOTBjNjc2Nzc1NjU4NzRmNDRkOTMxNGNhMmJhNjM0cC02LAorICAgIC0weDEuMDAwNDAycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MAorICAgIDB4MS4xNDczNWZmZmQ1NTEyMGE0NDgwYjdjOTFhMWQ3OGQ2ZXAtMSwKKyAgICAweDEuMDAxY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAweDEuMTQ3MzVmZmZkNTUxMjBhNDQ4MGI3YzkxYTFkNzhkNmVwLTEsCisgICAgLTB4MS4wMDFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MgorICAgIDB4MS5jMGI2ZDEwMDA1NDY4YTNhM2ViMDU2ZWI1OWI1OGNlMnAtMSwKKyAgICAweDEuMDE0NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzCisgICAgMHgxLmMwYjZkMTAwMDU0NjhhM2EzZWIwNTZlYjU5YjU4Y2UycC0xLAorICAgIC0weDEuMDE0NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU0CisgICAgLTB4MS5jNDAzZDkwMDA2NTA5YjA3NjI2NDJkMGJlYTQwZTRiMXAtMiwKKyAgICAweDEuMDM5NGM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NQorICAgIC0weDEuYzQwM2Q5MDAwNjUwOWIwNzYyNjQyZDBiZWE0MGU0YjFwLTIsCisgICAgLTB4MS4wMzk0YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgLTB4MS4yNzBkYTE4YjE5OGU2ZWJmYzg3ODIwODI5MDJiZjJkNHAtMjUsCisgICAgMHgxLjA0Y2NiY3AxOAorICB9LAorICB7IC8vIEVudHJ5IDU3CisgICAgLTB4MS4yNzBkYTE4YjE5OGU2ZWJmYzg3ODIwODI5MDJiZjJkNHAtMjUsCisgICAgLTB4MS4wNGNjYmNwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OAorICAgIDB4MS5lZTBmNjcwMTViOWZiMzliYTZlYjkxZDQ3ODI5YzkxM3AtMSwKKyAgICAweDEuMDdiNTE4cDk5CisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAweDEuZWUwZjY3MDE1YjlmYjM5YmE2ZWI5MWQ0NzgyOWM5MTNwLTEsCisgICAgLTB4MS4wN2I1MThwOTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MAorICAgIDB4MS5mZWYwNWQwMDA2NjZjYjQ3ZjE2MzJjNDc4YTYyODJhOHAtMSwKKyAgICAweDEuMDdiZjgwcC00CisgIH0sCisgIHsgLy8gRW50cnkgNjEKKyAgICAweDEuZmVmMDVkMDAwNjY2Y2I0N2YxNjMyYzQ3OGE2MjgyYThwLTEsCisgICAgLTB4MS4wN2JmODBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MgorICAgIDB4MS4xNmY0MzMwMDAwYjQ0YzgyODg2NzlmOGM3OWQzNmM0ZnAtNiwKKyAgICAweDEuMDdjMWYwcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MworICAgIDB4MS4xNmY0MzMwMDAwYjQ0YzgyODg2NzlmOGM3OWQzNmM0ZnAtNiwKKyAgICAtMHgxLjA3YzFmMHA1CisgIH0sCisgIHsgLy8gRW50cnkgNjQKKyAgICAweDEuY2ZiNDA0NTU3Mjc3ZDg1YmYxNDk0OTZkNDZjMmZhOWZwLTE4LAorICAgIDB4MS4wYmQyMWVwOQorICB9LAorICB7IC8vIEVudHJ5IDY1CisgICAgMHgxLmNmYjQwNDU1NzI3N2Q4NWJmMTQ5NDk2ZDQ2YzJmYTlmcC0xOCwKKyAgICAtMHgxLjBiZDIxZXA5CisgIH0sCisgIHsgLy8gRW50cnkgNjYKKyAgICAweDEuYmI1NDNlZmZmZDZjYWNhYzEyNjk4YjhhOTRlZDJjM2VwLTEsCisgICAgMHgxLjBjM2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NworICAgIDB4MS5iYjU0M2VmZmZkNmNhY2FjMTI2OThiOGE5NGVkMmMzZXAtMSwKKyAgICAtMHgxLjBjM2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OAorICAgIDB4MS5iYjBhMjJjMTNiNjE2Y2RjYWQzMmM3ZmNhNThlNjY0M3AtMSwKKyAgICAweDEuMGNkMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY5CisgICAgMHgxLmJiMGEyMmMxM2I2MTZjZGNhZDMyYzdmY2E1OGU2NjQzcC0xLAorICAgIC0weDEuMGNkMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwCisgICAgMHgxLmY5OGY5YjFkMDVlN2M5MjJhYzVlNWM2YjZhYzg2ODc2cC0yLAorICAgIDB4MS4wZGYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MQorICAgIDB4MS5mOThmOWIxZDA1ZTdjOTIyYWM1ZTVjNmI2YWM4Njg3NnAtMiwKKyAgICAtMHgxLjBkZjBwMAorICB9LAorICB7IC8vIEVudHJ5IDcyCisgICAgMHgxLmVlMTUxODE4MzBjMjViMGIxMGNlNjcxZThmN2EzMjg5cC0xLAorICAgIDB4MS4wZmI0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAweDEuZWUxNTE4MTgzMGMyNWIwYjEwY2U2NzFlOGY3YTMyODlwLTEsCisgICAgLTB4MS4wZmI0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzQKKyAgICAweDEuZWRmNmNjMTZkZWZlNjM2MWYzOGZmYTYwZWNlMzk0NGNwLTEsCisgICAgMHgxLjEwOWFiMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDc1CisgICAgMHgxLmVkZjZjYzE2ZGVmZTYzNjFmMzhmZmE2MGVjZTM5NDRjcC0xLAorICAgIC0weDEuMTA5YWIycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAweDEuZGVlOGQwZmZmY2Q5OTdjZTVjZmJhYjBhNWEzMzZjMTRwLTUsCisgICAgMHgxLjE1NjU2NHA0CisgIH0sCisgIHsgLy8gRW50cnkgNzcKKyAgICAweDEuZGVlOGQwZmZmY2Q5OTdjZTVjZmJhYjBhNWEzMzZjMTRwLTUsCisgICAgLTB4MS4xNTY1NjRwNAorICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgMHgxLmI2NTZkNjAwMDAxNTViYWNiNGFhODc0YjI4ZGUyZmY5cC0xLAorICAgIDB4MS4xNjBjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAweDEuYjY1NmQ2MDAwMDE1NWJhY2I0YWE4NzRiMjhkZTJmZjlwLTEsCisgICAgLTB4MS4xNjBjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODAKKyAgICAweDEuZmZiMjc1OTY3YzE5MWVlOTVmODYyZWZiNGY3OTBjZWNwLTEsCisgICAgMHgxLjE5Y2NwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MQorICAgIDB4MS5mZmIyNzU5NjdjMTkxZWU5NWY4NjJlZmI0Zjc5MGNlY3AtMSwKKyAgICAtMHgxLjE5Y2NwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MgorICAgIDB4MS5jNTljNTBmZmU1NDIyMzNiN2VhMjExMDBkZjg3YmI2MHAtMiwKKyAgICAweDEuMWNhNHAwCisgIH0sCisgIHsgLy8gRW50cnkgODMKKyAgICAweDEuYzU5YzUwZmZlNTQyMjMzYjdlYTIxMTAwZGY4N2JiNjBwLTIsCisgICAgLTB4MS4xY2E0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NAorICAgIDB4MS5hZjYzMGY4NmI3NzU3MWI5ZGUyZjE3ZmVlMmI2YzVjZXAtNSwKKyAgICAweDEuMWZmZmZlcDc5CisgIH0sCisgIHsgLy8gRW50cnkgODUKKyAgICAweDEuYWY2MzBmODZiNzc1NzFiOWRlMmYxN2ZlZTJiNmM1Y2VwLTUsCisgICAgLTB4MS4xZmZmZmVwNzkKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NgorICAgIDB4MS5iMTQ5M2VmMWZiYzYyNjczZWMxNDBjMTJhZGM1YTEzNHAtNiwKKyAgICAweDEuMjYyMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDg3CisgICAgMHgxLmIxNDkzZWYxZmJjNjI2NzNlYzE0MGMxMmFkYzVhMTM0cC02LAorICAgIC0weDEuMjYyMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDg4CisgICAgLTB4MS5hZDAwYjZmMTVjNmFjNWMzZTc5ZWY1NWQyZmVjNzBiZHAtNSwKKyAgICAweDEuMmEzZDYycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OQorICAgIC0weDEuYWQwMGI2ZjE1YzZhYzVjM2U3OWVmNTVkMmZlYzcwYmRwLTUsCisgICAgLTB4MS4yYTNkNjJwMgorICB9LAorICB7IC8vIEVudHJ5IDkwCisgICAgLTB4MS5hYjk5ODRmMjgzZjExNGNmMTNjYzZkZjM4YzY3OTU1ZnAtNiwKKyAgICAweDEuMmJlYzIycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIC0weDEuYWI5OTg0ZjI4M2YxMTRjZjEzY2M2ZGYzOGM2Nzk1NWZwLTYsCisgICAgLTB4MS4yYmVjMjJwMgorICB9LAorICB7IC8vIEVudHJ5IDkyCisgICAgMHgxLjk5YmM1Yjk2MWIxYWNhY2ExOGQ5NzFmNjhhZTk5ZGE5cC0yNywKKyAgICAweDEuMmQ5N2M4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MworICAgIDB4MS45OWJjNWI5NjFiMWFjYWNhMThkOTcxZjY4YWU5OWRhOXAtMjcsCisgICAgLTB4MS4yZDk3YzhwMgorICB9LAorICB7IC8vIEVudHJ5IDk0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZkNzAzNDk4YzNiODI4ODU2MzkxNXAtMSwKKyAgICAweDEuMmQ5N2M4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NQorICAgIC0weDEuZmZmZmZmZmZmZmZmZDcwMzQ5OGMzYjgyODg1NjM5MTVwLTEsCisgICAgLTB4MS4yZDk3YzhwMworICB9LAorICB7IC8vIEVudHJ5IDk2CisgICAgMHgxLmZmZmZmZmZmZmZmZjVjMGQyNjMwZWUwYTI3ZThkNmQxcC0xLAorICAgIDB4MS4yZDk3YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDk3CisgICAgMHgxLmZmZmZmZmZmZmZmZjVjMGQyNjMwZWUwYTI3ZThkNmQxcC0xLAorICAgIC0weDEuMmQ5N2M4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIC0weDEuOTliNjljZjBjNGEyYzhkZGFkM2Y0Y2YyOTQ1M2U1MDlwLTYsCisgICAgMHgxLjJmZWZjNHA5CisgIH0sCisgIHsgLy8gRW50cnkgOTkKKyAgICAtMHgxLjk5YjY5Y2YwYzRhMmM4ZGRhZDNmNGNmMjk0NTNlNTA5cC02LAorICAgIC0weDEuMmZlZmM0cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAweDEuZTkyMTQ4MzI4ZDYyMGZjMTg2ZGY5ZDZjZTEwODhmZDlwLTEsCisgICAgMHgxLjMzMzcyNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMQorICAgIDB4MS5lOTIxNDgzMjhkNjIwZmMxODZkZjlkNmNlMTA4OGZkOXAtMSwKKyAgICAtMHgxLjMzMzcyNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMgorICAgIDB4MS5hMWNhYWIwMDAwMmQzMTg5ZTA2OTlmMmFhZjIwZDlmY3AtMSwKKyAgICAweDEuM2I5MGY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAzCisgICAgMHgxLmExY2FhYjAwMDAyZDMxODllMDY5OWYyYWFmMjBkOWZjcC0xLAorICAgIC0weDEuM2I5MGY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA0CisgICAgMHgxLmZjMzNiYWZmZmZmZmJiMDU1Y2UwMzY5MGJkMzkyNTMxcC0xLAorICAgIDB4MS40MWM0NzBwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUKKyAgICAweDEuZmMzM2JhZmZmZmZmYmIwNTVjZTAzNjkwYmQzOTI1MzFwLTEsCisgICAgLTB4MS40MWM0NzBwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYKKyAgICAweDEuNDc5OGIzMDY3MmYyMTYwMmEyMWFhZjQ3MWU4MjU5YTBwLTE5LAorICAgIDB4MS40NDJmNzRwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcKKyAgICAweDEuNDc5OGIzMDY3MmYyMTYwMmEyMWFhZjQ3MWU4MjU5YTBwLTE5LAorICAgIC0weDEuNDQyZjc0cDE1CisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgMHgxLmUyYjVlY2ZmZmZhNDljOGM2OGQ3NDNjNDdmNjI0NjMzcC0xLAorICAgIDB4MS41YzA5ZGFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkKKyAgICAweDEuZTJiNWVjZmZmZmE0OWM4YzY4ZDc0M2M0N2Y2MjQ2MzNwLTEsCisgICAgLTB4MS41YzA5ZGFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAweDEuMTA1OTEwOTRhYzU4YTI3MGQ5YWQ5MTgwMmRmNDlmZDBwLTExLAorICAgIDB4MS41ZmUwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEKKyAgICAweDEuMTA1OTEwOTRhYzU4YTI3MGQ5YWQ5MTgwMmRmNDlmZDBwLTExLAorICAgIC0weDEuNWZlMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTEyCisgICAgLTB4MS5mZmZlNTgwZWUxNDFjMDIyNWI0NDI4MWMxYzZmN2ZmMXAtMSwKKyAgICAweDEuNjY1OTgycDExOQorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIC0weDEuZmZmZTU4MGVlMTQxYzAyMjViNDQyODFjMWM2ZjdmZjFwLTEsCisgICAgLTB4MS42NjU5ODJwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMTE0CisgICAgLTB4MS5lMmI4ZWNmZmVkOTFjZTNhNGI5ZGM1YTU5MmZiMGIxNHAtMSwKKyAgICAweDEuNjZhMGJhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUKKyAgICAtMHgxLmUyYjhlY2ZmZWQ5MWNlM2E0YjlkYzVhNTkyZmIwYjE0cC0xLAorICAgIC0weDEuNjZhMGJhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYKKyAgICAtMHgxLmEwOGM2Y2ZkYmUwNGI4NTljMGUxNmQ0NzhmZjgxZjdicC01LAorICAgIDB4MS42YmVlNDJwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcKKyAgICAtMHgxLmEwOGM2Y2ZkYmUwNGI4NTljMGUxNmQ0NzhmZjgxZjdicC01LAorICAgIC0weDEuNmJlZTQycDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTE4CisgICAgMHgxLmZmN2M3MTlhMTg0MzljNDI2NzA3NWUyZGY2ODgzNDNhcC0xLAorICAgIDB4MS42ZjEwNzBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkKKyAgICAweDEuZmY3YzcxOWExODQzOWM0MjY3MDc1ZTJkZjY4ODM0M2FwLTEsCisgICAgLTB4MS42ZjEwNzBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAKKyAgICAweDEuZmY3YzNiOTk3ZDZiZWE2NjFlZjBkMWU2OWUyMjJiZmVwLTEsCisgICAgMHgxLjZmNWJjMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEyMQorICAgIDB4MS5mZjdjM2I5OTdkNmJlYTY2MWVmMGQxZTY5ZTIyMmJmZXAtMSwKKyAgICAtMHgxLjZmNWJjMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEyMgorICAgIC0weDEuNmEwYTBlZTY4ZGExMzEwOTFlMjllMDU1MjI2YTFiZDlwLTEsCisgICAgMHgxLjcyYjUzY3A1CisgIH0sCisgIHsgLy8gRW50cnkgMTIzCisgICAgLTB4MS42YTBhMGVlNjhkYTEzMTA5MWUyOWUwNTUyMjZhMWJkOXAtMSwKKyAgICAtMHgxLjcyYjUzY3A1CisgIH0sCisgIHsgLy8gRW50cnkgMTI0CisgICAgMHgxLmZmNzc3YjlhMjE4OTg1YzFhMTkxYzkyYjJkMTFmZmJhcC0xLAorICAgIDB4MS43NWVjMWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUKKyAgICAweDEuZmY3NzdiOWEyMTg5ODVjMWExOTFjOTJiMmQxMWZmYmFwLTEsCisgICAgLTB4MS43NWVjMWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYKKyAgICAweDEuNmQ0ODdmOTI0Mjc5MjBlODFkYzVhZTM0ZTBlOGQ3YmFwLTIsCisgICAgMHgxLjc4YjNmYXAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcKKyAgICAweDEuNmQ0ODdmOTI0Mjc5MjBlODFkYzVhZTM0ZTBlOGQ3YmFwLTIsCisgICAgLTB4MS43OGIzZmFwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI4CisgICAgMHgxLjQ5NDljMmZmZmEwY2QzMzZkZmRhOTk4MjE2ZGFlMzkzcC00LAorICAgIDB4MS43ZDg1NjhwMAorICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIDB4MS40OTQ5YzJmZmZhMGNkMzM2ZGZkYTk5ODIxNmRhZTM5M3AtNCwKKyAgICAtMHgxLjdkODU2OHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTMwCisgICAgLTB4MS5iOWVkOWViMzNlYWNiZmFjODE1MWNkYTExMzczNGMyOXAtMSwKKyAgICAweDEuODMwNjg4cDU3CisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgLTB4MS5iOWVkOWViMzNlYWNiZmFjODE1MWNkYTExMzczNGMyOXAtMSwKKyAgICAtMHgxLjgzMDY4OHA1NworICB9LAorICB7IC8vIEVudHJ5IDEzMgorICAgIDB4MS5jNzM0OWFmMDZkNjEzOTRjYWUxOTEyMjMzZjY0YTA0ZXAtNSwKKyAgICAweDEuODNlNDMwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMKKyAgICAweDEuYzczNDlhZjA2ZDYxMzk0Y2FlMTkxMjIzM2Y2NGEwNGVwLTUsCisgICAgLTB4MS44M2U0MzBwMAorICB9LAorICB7IC8vIEVudHJ5IDEzNAorICAgIDB4MS5hYjczZjBmMGZlMDQ0MDNlNmE3ZmRkZTE0MWEzOGE4ZXAtNSwKKyAgICAweDEuODRjMjg4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUKKyAgICAweDEuYWI3M2YwZjBmZTA0NDAzZTZhN2ZkZGUxNDFhMzhhOGVwLTUsCisgICAgLTB4MS44NGMyODhwMAorICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIDB4MS5mZjZjMjc5OWRjZjBkNmM4ZjdhY2FmNWIwYTQ2ZTZlMnAtMSwKKyAgICAweDEuODUyMTQwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTM3CisgICAgMHgxLmZmNmMyNzk5ZGNmMGQ2YzhmN2FjYWY1YjBhNDZlNmUycC0xLAorICAgIC0weDEuODUyMTQwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgMHgxLmZmNjllZDk5ZGU3MGU1MWY1MTlmMzBiYWQyNDdhNGQ5cC0xLAorICAgIDB4MS44ODBjYjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkKKyAgICAweDEuZmY2OWVkOTlkZTcwZTUxZjUxOWYzMGJhZDI0N2E0ZDlwLTEsCisgICAgLTB4MS44ODBjYjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDAKKyAgICAtMHgxLmZkNzZjNTdmODcyZjg1YmM0YjBlMWJmNTkxYjNiNWIwcC0xLAorICAgIDB4MS45MzY0ZWFwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMTQxCisgICAgLTB4MS5mZDc2YzU3Zjg3MmY4NWJjNGIwZTFiZjU5MWIzYjViMHAtMSwKKyAgICAtMHgxLjkzNjRlYXAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIKKyAgICAtMHgxLmY4N2MxY2VlYzVmZDU4MTFjOWMwODljZGFlZWZmMTNjcC04LAorICAgIDB4MS45NzllMjhwOQorICB9LAorICB7IC8vIEVudHJ5IDE0MworICAgIC0weDEuZjg3YzFjZWVjNWZkNTgxMWM5YzA4OWNkYWVlZmYxM2NwLTgsCisgICAgLTB4MS45NzllMjhwOQorICB9LAorICB7IC8vIEVudHJ5IDE0NAorICAgIC0weDEuMTZhZTI5MTQ0ZDNiMWVhOGQ5MDdiODc3NmY3MDQxNTdwLTI2LAorICAgIDB4MS45YTQ4ZGVwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDUKKyAgICAtMHgxLjE2YWUyOTE0NGQzYjFlYThkOTA3Yjg3NzZmNzA0MTU3cC0yNiwKKyAgICAtMHgxLjlhNDhkZXAxNQorICB9LAorICB7IC8vIEVudHJ5IDE0NgorICAgIC0weDEuOTc3NTUyZjhlNmFiM2MwMWNiMjllYzc3ODAzMDA3Y2ZwLTEzLAorICAgIDB4MS45Y2JjMWFwNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDcKKyAgICAtMHgxLjk3NzU1MmY4ZTZhYjNjMDFjYjI5ZWM3NzgwMzAwN2NmcC0xMywKKyAgICAtMHgxLjljYmMxYXA1MAorICB9LAorICB7IC8vIEVudHJ5IDE0OAorICAgIDB4MS5mZjU4YzVmZmZmZmZjNzI2NmE5ZGY0ZTkyMTcyNjc3MXAtMSwKKyAgICAweDEuOWRkYjA2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgMHgxLmZmNThjNWZmZmZmZmM3MjY2YTlkZjRlOTIxNzI2NzcxcC0xLAorICAgIC0weDEuOWRkYjA2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTUwCisgICAgMHgxLmZmZmZmZmZmZmZmZmY1NzAwMDE5ZmZmZmYwMDk0YzE1cC0xLAorICAgIDB4MS45ZmZmZmVwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTUxCisgICAgMHgxLmZmZmZmZmZmZmZmZmY1NzAwMDE5ZmZmZmYwMDk0YzE1cC0xLAorICAgIC0weDEuOWZmZmZlcC0yNworICB9LAorICB7IC8vIEVudHJ5IDE1MgorICAgIDB4MS4zMWJkNjMwMDRiMWZmNGQ3MjJjNzQ1MDQ0NzA2ZDUxN3AtMSwKKyAgICAweDEuYWMxMjljcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgMHgxLjMxYmQ2MzAwNGIxZmY0ZDcyMmM3NDUwNDQ3MDZkNTE3cC0xLAorICAgIC0weDEuYWMxMjljcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTU0CisgICAgLTB4MS5mMWFkMGYwMDAwMDllMDZjZTQ0OWY1YmRlMDNkNWQxYXAtMSwKKyAgICAweDEuYjA3OGY4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTUKKyAgICAtMHgxLmYxYWQwZjAwMDAwOWUwNmNlNDQ5ZjViZGUwM2Q1ZDFhcC0xLAorICAgIC0weDEuYjA3OGY4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTYKKyAgICAweDEuZmY0Nzc2ZmZlMzI0YmEyOTU4YWNhOGQ3M2NmOGI4MzlwLTEsCisgICAgMHgxLmIyYzAzY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDE1NworICAgIDB4MS5mZjQ3NzZmZmUzMjRiYTI5NThhY2E4ZDczY2Y4YjgzOXAtMSwKKyAgICAtMHgxLmIyYzAzY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDE1OAorICAgIDB4MS5mZjQzN2YwMDAwNWU1MDBkMjliZDgxMDNhOGU3NjllOXAtMSwKKyAgICAweDEuYjc2NmY2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTU5CisgICAgMHgxLmZmNDM3ZjAwMDA1ZTUwMGQyOWJkODEwM2E4ZTc2OWU5cC0xLAorICAgIC0weDEuYjc2NmY2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTYwCisgICAgLTB4MS45OTY2M2RhOTRkYjczNDhiY2JiMjU3ZWQxNmI3MjI3Y3AtMjQsCisgICAgMHgxLmJlZWVlZXA3OQorICB9LAorICB7IC8vIEVudHJ5IDE2MQorICAgIC0weDEuOTk2NjNkYTk0ZGI3MzQ4YmNiYjI1N2VkMTZiNzIyN2NwLTI0LAorICAgIC0weDEuYmVlZWVlcDc5CisgIH0sCisgIHsgLy8gRW50cnkgMTYyCisgICAgMHgxLmYzZDYyMGZmZmZmZjg2MGU0OWJiYWI4OTYzZGNjNDJlcC0xLAorICAgIDB4MS5iZjRlMWNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjMKKyAgICAweDEuZjNkNjIwZmZmZmZmODYwZTQ5YmJhYjg5NjNkY2M0MmVwLTEsCisgICAgLTB4MS5iZjRlMWNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjQKKyAgICAweDEuODFmZjc5ZWQ5MjAxNzU1ZjdhZDE4YjUzM2FhOTlkMThwLTEsCisgICAgMHgxLmMwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjUKKyAgICAweDEuODFmZjc5ZWQ5MjAxNzU1ZjdhZDE4YjUzM2FhOTlkMThwLTEsCisgICAgLTB4MS5jMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTY2CisgICAgLTB4MS5hZjNjNjEwODg4NzczMGZjZWNlZGY2MWQyZDgxY2VhYnAtMTUsCisgICAgMHgxLmMyMGVjOHAyMworICB9LAorICB7IC8vIEVudHJ5IDE2NworICAgIC0weDEuYWYzYzYxMDg4ODc3MzBmY2VjZWRmNjFkMmQ4MWNlYWJwLTE1LAorICAgIC0weDEuYzIwZWM4cDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgLTB4MS5iMTY1NmVmOTE0NDdmYTZhNTQ2Y2JkODEwMzRjYWZhYnAtMTQsCisgICAgMHgxLmM3OWQyMHAxNworICB9LAorICB7IC8vIEVudHJ5IDE2OQorICAgIC0weDEuYjE2NTZlZjkxNDQ3ZmE2YTU0NmNiZDgxMDM0Y2FmYWJwLTE0LAorICAgIC0weDEuYzc5ZDIwcDE3CisgIH0sCisgIHsgLy8gRW50cnkgMTcwCisgICAgMHgxLjJkYTFkMzAwN2E1NzQ2MWY2ZjY3ZjJkM2U5ODNmNzk4cC0xLAorICAgIDB4MS5jYTdjZTBwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzEKKyAgICAweDEuMmRhMWQzMDA3YTU3NDYxZjZmNjdmMmQzZTk4M2Y3OThwLTEsCisgICAgLTB4MS5jYTdjZTBwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzIKKyAgICAweDEuZmZkZDM3ODg4Mzg3Y2UzYzk4MjgxNDQ2NzZmMmFiMGRwLTEsCisgICAgMHgxLmNjMzFiOHAxOAorICB9LAorICB7IC8vIEVudHJ5IDE3MworICAgIDB4MS5mZmRkMzc4ODgzODdjZTNjOTgyODE0NDY3NmYyYWIwZHAtMSwKKyAgICAtMHgxLmNjMzFiOHAxOAorICB9LAorICB7IC8vIEVudHJ5IDE3NAorICAgIDB4MS4zOTViYTRmZmZmYTA2MTIyM2Y3MzA0Mjk5YmUwYWFkOHAtMSwKKyAgICAweDEuZDMwODkycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTc1CisgICAgMHgxLjM5NWJhNGZmZmZhMDYxMjIzZjczMDQyOTliZTBhYWQ4cC0xLAorICAgIC0weDEuZDMwODkycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTc2CisgICAgMHgxLmNiMjdjNmZmZDhlOWQ1MWEwNjA1YjU3ZmQwMmVlNDgzcC0xLAorICAgIDB4MS5kNTU3NGNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAweDEuY2IyN2M2ZmZkOGU5ZDUxYTA2MDViNTdmZDAyZWU0ODNwLTEsCisgICAgLTB4MS5kNTU3NGNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzgKKyAgICAweDEuYTBhMDljZmQyYjJiMjM0NzZmMDlhYTNlYjYzMTM1MWNwLTUsCisgICAgMHgxLmQ3NTU3YXAxMgorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIDB4MS5hMGEwOWNmZDJiMmIyMzQ3NmYwOWFhM2ViNjMxMzUxY3AtNSwKKyAgICAtMHgxLmQ3NTU3YXAxMgorICB9LAorICB7IC8vIEVudHJ5IDE4MAorICAgIDB4MS4zOGFlNmQwMDBjNDlkZjUwMDFiYWY3MDFiMWEyYTU2NHAtMSwKKyAgICAweDEuZGJlNzVjcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTgxCisgICAgMHgxLjM4YWU2ZDAwMGM0OWRmNTAwMWJhZjcwMWIxYTJhNTY0cC0xLAorICAgIC0weDEuZGJlNzVjcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTgyCisgICAgMHgxLmZmZmYxZjAwMTI1YWJmM2QxNzY1NzgxYjY0ZTZmZTA3cC0xLAorICAgIDB4MS5kZmZmZmVwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAweDEuZmZmZjFmMDAxMjVhYmYzZDE3NjU3ODFiNjRlNmZlMDdwLTEsCisgICAgLTB4MS5kZmZmZmVwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODQKKyAgICAtMHgxLjlhYmM3NmY3ZWIxZDE1YTcyN2UwYmU3YWIxNjQwMGE3cC0xLAorICAgIDB4MS5lMDJhNDJwMTA4CisgIH0sCisgIHsgLy8gRW50cnkgMTg1CisgICAgLTB4MS45YWJjNzZmN2ViMWQxNWE3MjdlMGJlN2FiMTY0MDBhN3AtMSwKKyAgICAtMHgxLmUwMmE0MnAxMDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODYKKyAgICAweDEuNWExNDI5MDQ0ZWIwODcwMzJkYmVlNzE5Y2RkMzAyMjZwLTEsCisgICAgMHgxLmU3MDFlYXAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODcKKyAgICAweDEuNWExNDI5MDQ0ZWIwODcwMzJkYmVlNzE5Y2RkMzAyMjZwLTEsCisgICAgLTB4MS5lNzAxZWFwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTg4CisgICAgLTB4MS45NGZmYzBmOGQ4ODhmNmY0NmM2ZDU1YTJlZmExMDgzZnAtMSwKKyAgICAweDEuZWRmMTg4cDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTg5CisgICAgLTB4MS45NGZmYzBmOGQ4ODhmNmY0NmM2ZDU1YTJlZmExMDgzZnAtMSwKKyAgICAtMHgxLmVkZjE4OHAyNAorICB9LAorICB7IC8vIEVudHJ5IDE5MAorICAgIC0weDEuMjdjNmQzMDBkODc1NmU3ODg0NmI4NGExZmEzYjEyYTJwLTEsCisgICAgMHgxLmY0YzYzYXAyNAorICB9LAorICB7IC8vIEVudHJ5IDE5MQorICAgIC0weDEuMjdjNmQzMDBkODc1NmU3ODg0NmI4NGExZmEzYjEyYTJwLTEsCisgICAgLTB4MS5mNGM2M2FwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTIKKyAgICAweDEuZGE1NGVjZWZiMWNkMzk1MTA1NTUxMjZhNzZjYjIwZDRwLTcsCisgICAgMHgxLmY1YmE3NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTkzCisgICAgMHgxLmRhNTRlY2VmYjFjZDM5NTEwNTU1MTI2YTc2Y2IyMGQ0cC03LAorICAgIC0weDEuZjViYTc2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTQKKyAgICAweDEuZmMyOGRhMDAwMDA2YmM0ZjBiMGNkM2M4YWIxMGZjNTdwLTEsCisgICAgMHgxLmY1ZmY0ZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDE5NQorICAgIDB4MS5mYzI4ZGEwMDAwMDZiYzRmMGIwY2QzYzhhYjEwZmM1N3AtMSwKKyAgICAtMHgxLmY1ZmY0ZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDE5NgorICAgIC0weDEuZmZmZmZmZmZmZmVhMzk2YWI4YWVlNTA5MzkyYzc1NWRwLTEsCisgICAgMHgxLmY2YTdhMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgLTB4MS5mZmZmZmZmZmZmZWEzOTZhYjhhZWU1MDkzOTJjNzU1ZHAtMSwKKyAgICAtMHgxLmY2YTdhMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTk4CisgICAgMHgxLmE0ZjFkNGZkMGVhMjg2ZjMyZjNjYjMwOTJiNGNlZDE0cC01LAorICAgIDB4MS5mNmJmZjJwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTkKKyAgICAweDEuYTRmMWQ0ZmQwZWEyODZmMzJmM2NiMzA5MmI0Y2VkMTRwLTUsCisgICAgLTB4MS5mNmJmZjJwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZhZjMzZGUyOTBjYTk5ZTJmYWYzcC0xLAorICAgIDB4MS5mOWNiZTJwOAorICB9LAorICB7IC8vIEVudHJ5IDIwMQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmFmMzNkZTI5MGNhOTllMmZhZjNwLTEsCisgICAgLTB4MS5mOWNiZTJwOAorICB9LAorICB7IC8vIEVudHJ5IDIwMgorICAgIDB4MS5mZGQ0MGQ2ZDkxMmNlMjU5NGYyMDAxMDQ1NzBhYzFiM3AtMywKKyAgICAweDEuZmM3NjdlcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgMHgxLmZkZDQwZDZkOTEyY2UyNTk0ZjIwMDEwNDU3MGFjMWIzcC0zLAorICAgIC0weDEuZmM3NjdlcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgLTB4MS43NTJkZTJmZmZmYjFhNWUyMjdiZjJjMTJmNDA4MzIwM3AtMSwKKyAgICAweDEuZmY1MzUycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDUKKyAgICAtMHgxLjc1MmRlMmZmZmZiMWE1ZTIyN2JmMmMxMmY0MDgzMjAzcC0xLAorICAgIC0weDEuZmY1MzUycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDYKKyAgICAtMHgxLjRlZDRjNWZmYzgwMTg3NDE4NzA5NDk3NjdmZjhkYWZhcC0xLAorICAgIDB4MS5mZmYxZmVwMQorICB9LAorICB7IC8vIEVudHJ5IDIwNworICAgIC0weDEuNGVkNGM1ZmZjODAxODc0MTg3MDk0OTc2N2ZmOGRhZmFwLTEsCisgICAgLTB4MS5mZmYxZmVwMQorICB9LAorICB7IC8vIEVudHJ5IDIwOAorICAgIC0weDEuMjg0MDZhMDAyNTU0NWM5YTU2OGRhY2Q0NTUxOGRkNjVwLTMsCisgICAgMHgxLmZmZjFmZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjA5CisgICAgLTB4MS4yODQwNmEwMDI1NTQ1YzlhNTY4ZGFjZDQ1NTE4ZGQ2NXAtMywKKyAgICAtMHgxLmZmZjFmZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjEwCisgICAgMHgxLmYwMTVjOGMyNGNhNWU5OWM3YzY1NTk5YzhkNjA5NzZlcC0xLAorICAgIDB4MS5mZmY3ZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTEKKyAgICAweDEuZjAxNWM4YzI0Y2E1ZTk5YzdjNjU1OTljOGQ2MDk3NmVwLTEsCisgICAgLTB4MS5mZmY3ZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAweDEuYWZmOWI0NWU5NGQzMmQ4ZTViZGUyNWRlYzZmMzU3ZDZwLTksCisgICAgMHgxLmZmZmUzZXA0MQorICB9LAorICB7IC8vIEVudHJ5IDIxMworICAgIDB4MS5hZmY5YjQ1ZTk0ZDMyZDhlNWJkZTI1ZGVjNmYzNTdkNnAtOSwKKyAgICAtMHgxLmZmZmUzZXA0MQorICB9LAorICB7IC8vIEVudHJ5IDIxNAorICAgIC0weDEuZWE1NDY0ZmZmNTcxZjZmZjMzNTAwNGVhZGUzMDFiNTZwLTEsCisgICAgMHgxLmZmZmY4ZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMjE1CisgICAgLTB4MS5lYTU0NjRmZmY1NzFmNmZmMzM1MDA0ZWFkZTMwMWI1NnAtMSwKKyAgICAtMHgxLmZmZmY4ZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMjE2CisgICAgMHgxLmZmZmQ0ZTczNWRmNmRiNmE3Y2E3Y2IwNDM2ZTZlZjQ4cC0xLAorICAgIDB4MS5mZmZmOGVwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTcKKyAgICAweDEuZmZmZDRlNzM1ZGY2ZGI2YTdjYTdjYjA0MzZlNmVmNDhwLTEsCisgICAgLTB4MS5mZmZmOGVwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAtMHgxLjg4ZTUyN2ZmZWRkODVkMmUyNDI5MTY2Zjc5NWQ5Nzg4cC03LAorICAgIDB4MS5mZmZmOWVwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTkKKyAgICAtMHgxLjg4ZTUyN2ZmZWRkODVkMmUyNDI5MTY2Zjc5NWQ5Nzg4cC03LAorICAgIC0weDEuZmZmZjllcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgMjIwCisgICAgLTB4MS5kYjhmYTBlMDcxZjk4MDYxZjI3ZWY2NzE2MTUxMTQzN3AtMywKKyAgICAweDEuZmZmZmJhcDIzCisgIH0sCisgIHsgLy8gRW50cnkgMjIxCisgICAgLTB4MS5kYjhmYTBlMDcxZjk4MDYxZjI3ZWY2NzE2MTUxMTQzN3AtMywKKyAgICAtMHgxLmZmZmZiYXAyMworICB9LAorICB7IC8vIEVudHJ5IDIyMgorICAgIC0weDEuZmU1YjMzN2Y0Y2ZlMjVkNDY4ZGVmZTY1ZDVjNTI0YWRwLTEsCisgICAgMHgxLmZmZmZkY3A4CisgIH0sCisgIHsgLy8gRW50cnkgMjIzCisgICAgLTB4MS5mZTViMzM3ZjRjZmUyNWQ0NjhkZWZlNjVkNWM1MjRhZHAtMSwKKyAgICAtMHgxLmZmZmZkY3A4CisgIH0sCisgIHsgLy8gRW50cnkgMjI0CisgICAgLTB4MS5mNTkwMzhmNGMyZGQzM2QxNTkxNzFlZTgwYmI2NDg4NnAtNSwKKyAgICAweDEuZmZmZmY4cDExOAorICB9LAorICB7IC8vIEVudHJ5IDIyNQorICAgIC0weDEuZjU5MDM4ZjRjMmRkMzNkMTU5MTcxZWU4MGJiNjQ4ODZwLTUsCisgICAgLTB4MS5mZmZmZjhwMTE4CisgIH0sCisgIHsgLy8gRW50cnkgMjI2CisgICAgMHgxLmZmZmZmYzAwMDAxMTU1NTUzYTdkMjdmNGEyODlmMzE5cC0xLAorICAgIDB4MS5mZmZmZmNwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgMjI3CisgICAgMHgxLmZmZmZmYzAwMDAxMTU1NTUzYTdkMjdmNGEyODlmMzE5cC0xLAorICAgIC0weDEuZmZmZmZjcC0xMgorICB9LAorICB7IC8vIEVudHJ5IDIyOAorICAgIC0weDEuZjlkNmJkZDYyNDczY2QyYjcyOWZlM2E2N2E0ZTkxNTdwLTQsCisgICAgMHgxLmZmZmZmY3AyMgorICB9LAorICB7IC8vIEVudHJ5IDIyOQorICAgIC0weDEuZjlkNmJkZDYyNDczY2QyYjcyOWZlM2E2N2E0ZTkxNTdwLTQsCisgICAgLTB4MS5mZmZmZmNwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzAKKyAgICAweDEuZWI0MDgzMDAwMDVkOTFiOTgxNGNhZGE4OGY1ZmM1OTZwLTEsCisgICAgMHgxLjI0ODM2Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDIzMQorICAgIDB4MS5lYjQwODMwMDAwNWQ5MWI5ODE0Y2FkYTg4ZjVmYzU5NnAtMSwKKyAgICAtMHgxLjI0ODM2Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDIzMgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMjMzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDIzNAorICAgIDB4MS5wMCwKKyAgICAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMjM2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDIzOAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI0MAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDI0MgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjQ0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjQ2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjAwMDAwMnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjQ4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDkKKyAgICAweDEuZmZmZmZmNWMyOGY1Nzk2MGNkNTZlYmZlOTQ4MmE2MWZwLTEsCisgICAgMHgxLjk5OTk5YXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAweDEuZmZmZmZmNWMyOGY1Nzk2MGNkNTZlYmZlOTQ4MmE2MWZwLTEsCisgICAgLTB4MS45OTk5OWFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMjUxCisgICAgMHgxLmZmZmZmZDcwYTNkNjRlNWVjMTY1Y2Q0MzA3YWQxMzI2cC0xLAorICAgIDB4MS45OTk5OWFwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgMjUyCisgICAgMHgxLmZmZmZmZDcwYTNkNjRlNWVjMTY1Y2Q0MzA3YWQxMzI2cC0xLAorICAgIC0weDEuOTk5OTlhcC0xMgorICB9LAorICB7IC8vIEVudHJ5IDI1MworICAgIDB4MS5mZmZmZmEzZDcwOWVlY2JmYjVhMzg1YjBmM2UwY2I4ZnAtMSwKKyAgICAweDEuMzMzMzM0cC0xMQorICB9LAorICB7IC8vIEVudHJ5IDI1NAorICAgIDB4MS5mZmZmZmEzZDcwOWVlY2JmYjVhMzg1YjBmM2UwY2I4ZnAtMSwKKyAgICAtMHgxLjMzMzMzNHAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTUKKyAgICAweDEuZmZmZmY1YzI4ZjVmYzczM2M0MjAyYWEwYmRhOTJmOTdwLTEsCisgICAgMHgxLjk5OTk5YXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTYKKyAgICAweDEuZmZmZmY1YzI4ZjVmYzczM2M0MjAyYWEwYmRhOTJmOTdwLTEsCisgICAgLTB4MS45OTk5OWFwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjU3CisgICAgMHgxLmZmZmZmMDAwMDAxNTU1NTU0OWY0OWY0ZDM0ZDM0Y2EwcC0xLAorICAgIDB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjU4CisgICAgMHgxLmZmZmZmMDAwMDAxNTU1NTU0OWY0OWY0ZDM0ZDM0Y2EwcC0xLAorICAgIC0weDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI1OQorICAgIDB4MS5mZmZmZThmNWMyOWNlMDc2NDBiZDVmNmQ4YmIxZWE2YnAtMSwKKyAgICAweDEuMzMzMzM0cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI2MAorICAgIDB4MS5mZmZmZThmNWMyOWNlMDc2NDBiZDVmNmQ4YmIxZWE2YnAtMSwKKyAgICAtMHgxLjMzMzMzNHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjEKKyAgICAweDEuZmZmZmUwYTNkNzE0ODM5ZjM2MDExNDdhZGE3M2Y4ZDlwLTEsCisgICAgMHgxLjY2NjY2OHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAweDEuZmZmZmUwYTNkNzE0ODM5ZjM2MDExNDdhZGE3M2Y4ZDlwLTEsCisgICAgLTB4MS42NjY2NjhwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjYzCisgICAgMHgxLmZmZmZkNzBhM2Q4MTkxZjY2ZGU1NDA4ZmIyYjk5NWEwcC0xLAorICAgIDB4MS45OTk5OWNwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjY0CisgICAgMHgxLmZmZmZkNzBhM2Q4MTkxZjY2ZGU1NDA4ZmIyYjk5NWEwcC0xLAorICAgIC0weDEuOTk5OTljcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI2NQorICAgIDB4MS5mZmZmY2MyOGY2ZDA5NmI4N2Q2ZDE5YTA2ZTk2OTk5YnAtMSwKKyAgICAweDEuY2NjY2NjcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI2NgorICAgIDB4MS5mZmZmY2MyOGY2ZDA5NmI4N2Q2ZDE5YTA2ZTk2OTk5YnAtMSwKKyAgICAtMHgxLmNjY2NjY3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjcKKyAgICAweDEuZmZmYmNjMmE3MWNlYWFiZjU1ODJiNmRhMWZjMzA1MzFwLTEsCisgICAgMHgxLjA2NjY2NnAtNworICB9LAorICB7IC8vIEVudHJ5IDI2OAorICAgIDB4MS5mZmZiY2MyYTcxY2VhYWJmNTU4MmI2ZGExZmMzMDUzMXAtMSwKKyAgICAtMHgxLjA2NjY2NnAtNworICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIDB4MS5mZmYzMGE0YjdiNTExOWQ4ZTI5OWY3MTdlYzBlY2UxNnAtMSwKKyAgICAweDEuY2NjY2NjcC03CisgIH0sCisgIHsgLy8gRW50cnkgMjcwCisgICAgMHgxLmZmZjMwYTRiN2I1MTE5ZDhlMjk5ZjcxN2VjMGVjZTE2cC0xLAorICAgIC0weDEuY2NjY2NjcC03CisgIH0sCisgIHsgLy8gRW50cnkgMjcxCisgICAgMHgxLmZmZTU3YTc4NTEyMzIyNmMxZTJlZmI0MTEzNTNlZGM5cC0xLAorICAgIDB4MS40OTk5OThwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzIKKyAgICAweDEuZmZlNTdhNzg1MTIzMjI2YzFlMmVmYjQxMTM1M2VkYzlwLTEsCisgICAgLTB4MS40OTk5OThwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzMKKyAgICAweDEuZmZkMzFjZDEwY2I2MzJkOTczM2FjNWY1ZjMyN2E1ZjlwLTEsCisgICAgMHgxLmFjY2NjY3AtNgorICB9LAorICB7IC8vIEVudHJ5IDI3NAorICAgIDB4MS5mZmQzMWNkMTBjYjYzMmQ5NzMzYWM1ZjVmMzI3YTVmOXAtMSwKKyAgICAtMHgxLmFjY2NjY3AtNgorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIDB4MS5mZmJiZjE4MjA3NTQyZWY4MTM5MGQ3M2MzYmE4OWMxYXAtMSwKKyAgICAweDEuMDhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAweDEuZmZiYmYxODIwNzU0MmVmODEzOTBkNzNjM2JhODljMWFwLTEsCisgICAgLTB4MS4wOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDI3NworICAgIDB4MS5mZjlmZjhjMmVhZWFlZTMwZmIyMTE3NjVhZjgzNTE3MXAtMSwKKyAgICAweDEuMzk5OTlhcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjc4CisgICAgMHgxLmZmOWZmOGMyZWFlYWVlMzBmYjIxMTc2NWFmODM1MTcxcC0xLAorICAgIC0weDEuMzk5OTlhcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgMHgxLmZmN2YzMmQ2ZWIxZjljZjkwMjI2ZWMyOTFjOWUwOTIycC0xLAorICAgIDB4MS42YjMzMzRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAweDEuZmY3ZjMyZDZlYjFmOWNmOTAyMjZlYzI5MWM5ZTA5MjJwLTEsCisgICAgLTB4MS42YjMzMzRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODEKKyAgICAweDEuZmY1OWEwMGNjNGFkNDkyY2EyNTk3NDk1NDEyOTk4ZWRwLTEsCisgICAgMHgxLjljY2NjZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDI4MgorICAgIDB4MS5mZjU5YTAwY2M0YWQ0OTJjYTI1OTc0OTU0MTI5OThlZHAtMSwKKyAgICAtMHgxLjljY2NjZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDI4MworICAgIDB4MS5mZjJmNDBjMDhhY2Y0NTgwYThkMTMzODBkOTA3MzM5OHAtMSwKKyAgICAweDEuY2U2NjY2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMjg0CisgICAgMHgxLmZmMmY0MGMwOGFjZjQ1ODBhOGQxMzM4MGQ5MDczMzk4cC0xLAorICAgIC0weDEuY2U2NjY2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMjg1CisgICAgMHgxLjhjYTQ2Y2EwMTE3NzFiZmFlMGQ5ZWRiZjFkYWNiNDAycC0xLAorICAgIDB4MS41ZTdmYzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODYKKyAgICAweDEuOGNhNDZjYTAxMTc3MWJmYWUwZDllZGJmMWRhY2I0MDJwLTEsCisgICAgLTB4MS41ZTdmYzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODcKKyAgICAweDEuMGI1ZDM4ZDVkODJlNGE3NjI0ZGFjNGUxMGNlMTU5YzJwLTIsCisgICAgMHgxLjRlN2ZjNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjg4CisgICAgMHgxLjBiNWQzOGQ1ZDgyZTRhNzYyNGRhYzRlMTBjZTE1OWMycC0yLAorICAgIC0weDEuNGU3ZmM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODkKKyAgICAtMHgxLjY2Yjk2ZTIwNGU2OWNkYThlOWNmNTA5OTY0MzI1MzllcC0yLAorICAgIDB4MS5lZGJmYTZwMAorICB9LAorICB7IC8vIEVudHJ5IDI5MAorICAgIC0weDEuNjZiOTZlMjA0ZTY5Y2RhOGU5Y2Y1MDk5NjQzMjUzOWVwLTIsCisgICAgLTB4MS5lZGJmYTZwMAorICB9LAorICB7IC8vIEVudHJ5IDI5MQorICAgIC0weDEuYTkzNTU0MGVkZWNhNGMyMjBlZDkxZGM1NDgxZTRkOWJwLTEsCisgICAgMHgxLjQ2N2ZjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjkyCisgICAgLTB4MS5hOTM1NTQwZWRlY2E0YzIyMGVkOTFkYzU0ODFlNGQ5YnAtMSwKKyAgICAtMHgxLjQ2N2ZjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjkzCisgICAgLTB4MS5mZmMwMDE3ZGQ5MjA5ZGQ4ODkxZjE3ZmU0YzllZWU0NnAtMSwKKyAgICAweDEuOTYxZmI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTQKKyAgICAtMHgxLmZmYzAwMTdkZDkyMDlkZDg4OTFmMTdmZTRjOWVlZTQ2cC0xLAorICAgIC0weDEuOTYxZmI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTUKKyAgICAtMHgxLjk2OTA4MjAwNzczM2Q3ODdmNGMzNmJhMGY5NDI1Njk0cC0xLAorICAgIDB4MS5lNWJmYTRwMQorICB9LAorICB7IC8vIEVudHJ5IDI5NgorICAgIC0weDEuOTY5MDgyMDA3NzMzZDc4N2Y0YzM2YmEwZjk0MjU2OTRwLTEsCisgICAgLTB4MS5lNWJmYTRwMQorICB9LAorICB7IC8vIEVudHJ5IDI5NworICAgIC0weDEuMmExZTc0MjIzZDliZGRiN2RiNTlmNzgxZjk2YjY1ZWNwLTIsCisgICAgMHgxLjFhYWZjYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjk4CisgICAgLTB4MS4yYTFlNzQyMjNkOWJkZGI3ZGI1OWY3ODFmOTZiNjVlY3AtMiwKKyAgICAtMHgxLjFhYWZjYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjk5CisgICAgMHgxLjQ4OTRkNTBiODRkYmM5ODExMzRhNTkxYWM0MTY1ZDllcC0yLAorICAgIDB4MS40MjdmYzJwMgorICB9LAorICB7IC8vIEVudHJ5IDMwMAorICAgIDB4MS40ODk0ZDUwYjg0ZGJjOTgxMTM0YTU5MWFjNDE2NWQ5ZXAtMiwKKyAgICAtMHgxLjQyN2ZjMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzAxCisgICAgMHgxLmEwMTZkZDc0ODBhMWVlYTRkNDllZmI1ODVmYTQ5Yzg2cC0xLAorICAgIDB4MS42YTRmYmFwMgorICB9LAorICB7IC8vIEVudHJ5IDMwMgorICAgIDB4MS5hMDE2ZGQ3NDgwYTFlZWE0ZDQ5ZWZiNTg1ZmE0OWM4NnAtMSwKKyAgICAtMHgxLjZhNGZiYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgMHgxLmEzMGE2YTNiZjRhM2UyYjdlMjc2NjZkM2E5YzNiNzRicC0xLAorICAgIDB4MS42YWYyZjBwMgorICB9LAorICB7IC8vIEVudHJ5IDMwNAorICAgIDB4MS5hMzBhNmEzYmY0YTNlMmI3ZTI3NjY2ZDNhOWMzYjc0YnAtMSwKKyAgICAtMHgxLjZhZjJmMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzA1CisgICAgMHgxLjViZDYyNTUwNDAxNWNjYzEwMWU0ZjQzNDBkNGI3NjJicC0yLAorICAgIDB4MS40M2M2MmFwMgorICB9LAorICB7IC8vIEVudHJ5IDMwNgorICAgIDB4MS41YmQ2MjU1MDQwMTVjY2MxMDFlNGY0MzQwZDRiNzYyYnAtMiwKKyAgICAtMHgxLjQzYzYyYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgLTB4MS4wY2I3MzM0NDhjMzBlZTNkZGZmYjRkYTY5ZjBiMzg0MnAtMiwKKyAgICAweDEuMWM5OTY0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICAtMHgxLjBjYjczMzQ0OGMzMGVlM2RkZmZiNGRhNjlmMGIzODQycC0yLAorICAgIC0weDEuMWM5OTY0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDkKKyAgICAtMHgxLjg5ZDg3NGFkMzBlM2ZiNDYyNDRkYWEyNDQ1MTY5MGQ3cC0xLAorICAgIDB4MS5lYWQ5M2NwMQorICB9LAorICB7IC8vIEVudHJ5IDMxMAorICAgIC0weDEuODlkODc0YWQzMGUzZmI0NjI0NGRhYTI0NDUxNjkwZDdwLTEsCisgICAgLTB4MS5lYWQ5M2NwMQorICB9LAorICB7IC8vIEVudHJ5IDMxMQorICAgIC0weDEuZmU1MWFlMDlmMGQzOWVkNTU0ZTY4YmVmM2UyZjhhMDNwLTEsCisgICAgMHgxLjljN2ZiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzEyCisgICAgLTB4MS5mZTUxYWUwOWYwZDM5ZWQ1NTRlNjhiZWYzZTJmOGEwM3AtMSwKKyAgICAtMHgxLjljN2ZiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzEzCisgICAgLTB4MS5iOTdiZjc2YWU3NjVlYjY5Y2Y1NWU4MGFhZTk3NzMwM3AtMSwKKyAgICAweDEuNGUyNjI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTQKKyAgICAtMHgxLmI5N2JmNzZhZTc2NWViNjljZjU1ZTgwYWFlOTc3MzAzcC0xLAorICAgIC0weDEuNGUyNjI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTUKKyAgICAtMHgxLmE4YWM1NzkzZTMyNjI5YjEzMTk4NGVjZmZkMmQwZjMxcC0yLAorICAgIDB4MS5mZjk5MzJwMAorICB9LAorICB7IC8vIEVudHJ5IDMxNgorICAgIC0weDEuYThhYzU3OTNlMzI2MjliMTMxOTg0ZWNmZmQyZDBmMzFwLTIsCisgICAgLTB4MS5mZjk5MzJwMAorICB9LAorICB7IC8vIEVudHJ5IDMxNworICAgIDB4MS43N2E5MmNhMDFiYzc5YzE5NWRkYTMzNzM2ODA3Zjk4NnAtMywKKyAgICAweDEuNjJlNjFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTgKKyAgICAweDEuNzdhOTJjYTAxYmM3OWMxOTVkZGEzMzczNjgwN2Y5ODZwLTMsCisgICAgLTB4MS42MmU2MWNwMAorICB9LAorICB7IC8vIEVudHJ5IDMxOQorICAgIDB4MS42ZTEwNjAyODJjMTQ4OGQ5YWJkODNkYTFkNjhjZDBmN3AtMSwKKyAgICAweDEuOGM2NjJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzIwCisgICAgMHgxLjZlMTA2MDI4MmMxNDg4ZDlhYmQ4M2RhMWQ2OGNkMGY3cC0xLAorICAgIC0weDEuOGM2NjJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzIxCisgICAgLTB4MS42ODJmMmJiODdhOGY1MDExNzM1MDk0MTc2YzliNmRhY3AtNCwKKyAgICAtMHgxLmE4YWExY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMzIyCisgICAgLTB4MS42ODJmMmJiODdhOGY1MDExNzM1MDk0MTc2YzliNmRhY3AtNCwKKyAgICAweDEuYThhYTFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjMKKyAgICAtMHgxLmU2NjVjYjJhZjg0MmJlNWJhNWY2NTk2MDU5OWE5N2VjcC03LAorICAgIC0weDEuOTVlYzhhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjQKKyAgICAtMHgxLmU2NjVjYjJhZjg0MmJlNWJhNWY2NTk2MDU5OWE5N2VjcC03LAorICAgIDB4MS45NWVjOGFwMAorICB9LAorICB7IC8vIEVudHJ5IDMyNQorICAgIDB4MS5kZGQyMzE1MDFiMTJmY2YyYmMyMDYzM2JlNGQ1MWU1MXAtNSwKKyAgICAtMHgxLjgzMmVmOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzI2CisgICAgMHgxLmRkZDIzMTUwMWIxMmZjZjJiYzIwNjMzYmU0ZDUxZTUxcC01LAorICAgIDB4MS44MzJlZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDMyNworICAgIDB4MS4wY2FiYTY5OTc2OTFhYjE5NzBkNDNjNzQxOWVkNTFlMXAtMywKKyAgICAtMHgxLjcwNzE2NnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzI4CisgICAgMHgxLjBjYWJhNjk5NzY5MWFiMTk3MGQ0M2M3NDE5ZWQ1MWUxcC0zLAorICAgIDB4MS43MDcxNjZwMAorICB9LAorICB7IC8vIEVudHJ5IDMyOQorICAgIDB4MS5hMDcyNTQxZmQ2ZWFmOGI2NWE4NzRjNThkNmNjNTczOXAtMywKKyAgICAtMHgxLjVkYjNkNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzMwCisgICAgMHgxLmEwNzI1NDFmZDZlYWY4YjY1YTg3NGM1OGQ2Y2M1NzM5cC0zLAorICAgIDB4MS41ZGIzZDRwMAorICB9LAorICB7IC8vIEVudHJ5IDMzMQorICAgIDB4MS4xOGZlZjgxMDZiZWE2M2I5ZTk2YTdhZGY1MzhjNjE5NHAtMiwKKyAgICAtMHgxLjRhZjY0MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzMyCisgICAgMHgxLjE4ZmVmODEwNmJlYTYzYjllOTZhN2FkZjUzOGM2MTk0cC0yLAorICAgIDB4MS40YWY2NDJwMAorICB9LAorICB7IC8vIEVudHJ5IDMzMworICAgIDB4MS42MDQzNzI3N2Q0ODA2N2U4NTIzMGJjZTE4ODNlYWFiYXAtMiwKKyAgICAtMHgxLjM4MzhiMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM0CisgICAgMHgxLjYwNDM3Mjc3ZDQ4MDY3ZTg1MjMwYmNlMTg4M2VhYWJhcC0yLAorICAgIDB4MS4zODM4YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDMzNQorICAgIDB4MS5hNWE0ZGVkNDkyYmVkZmU4Y2Y1YzM0Y2FkZDc4ZGY3NXAtMiwKKyAgICAtMHgxLjI1N2IxZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM2CisgICAgMHgxLmE1YTRkZWQ0OTJiZWRmZThjZjVjMzRjYWRkNzhkZjc1cC0yLAorICAgIDB4MS4yNTdiMWVwMAorICB9LAorICB7IC8vIEVudHJ5IDMzNworICAgIDB4MS5lOGM0MDQwNjc4ZDJlZjczNjMzM2E0NTM3YTExMTNhMXAtMiwKKyAgICAtMHgxLjEyYmQ5MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM4CisgICAgMHgxLmU4YzQwNDA2NzhkMmVmNzM2MzMzYTQ1MzdhMTExM2ExcC0yLAorICAgIDB4MS4xMmJkOTJwMAorICB9LAorICB7IC8vIEVudHJ5IDMzOQorICAgIDB4MS4yNjk3NmIxYjE2ZDE5MDkxYzA5MjU5NzY1YzRiMzg3MnAtMSwKKyAgICAtMHgxLmVhNWMzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM0MAorICAgIDB4MS4yNjk3NmIxYjE2ZDE5MDkxYzA5MjU5NzY1YzRiMzg3MnAtMSwKKyAgICAweDEuZWE1YzNlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQxCisgICAgMHgxLjM4MDVhMmRhZmRhN2Y4NTU0YWVjNjVkYWIzNDhhNzE0cC0xLAorICAgIC0weDEuZDRiODdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQyCisgICAgMHgxLjM4MDVhMmRhZmRhN2Y4NTU0YWVjNjVkYWIzNDhhNzE0cC0xLAorICAgIDB4MS5kNGI4N2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDMKKyAgICAweDEuNDhlNTJmZjViYmU3OTQ2MThiODUxOTBiODY0MTE4MjRwLTEsCisgICAgLTB4MS5iZjE0YmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDQKKyAgICAweDEuNDhlNTJmZjViYmU3OTQ2MThiODUxOTBiODY0MTE4MjRwLTEsCisgICAgMHgxLmJmMTRiYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM0NQorICAgIDB4MS41OTJlNWI2MTVlZjVhZTQ2Mzk3NmQzMTE0MWRiYWNmMHAtMSwKKyAgICAtMHgxLmE5NzBmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM0NgorICAgIDB4MS41OTJlNWI2MTVlZjVhZTQ2Mzk3NmQzMTE0MWRiYWNmMHAtMSwKKyAgICAweDEuYTk3MGY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQ3CisgICAgMHgxLjY4ZDliMmQ2NTdlNDMwN2QzMzFlYjdiZDM1ZWUxODc5cC0xLAorICAgIC0weDEuOTNjZDM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgMHgxLjY4ZDliMmQ2NTdlNDMwN2QzMzFlYjdiZDM1ZWUxODc5cC0xLAorICAgIDB4MS45M2NkMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDkKKyAgICAweDEuNzdlMDBjMzcxODUyOGMzNmY3MjJlNjMwOTZjMjY0NmJwLTEsCisgICAgLTB4MS43ZTI5NzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTAKKyAgICAweDEuNzdlMDBjMzcxODUyOGMzNmY3MjJlNjMwOTZjMjY0NmJwLTEsCisgICAgMHgxLjdlMjk3NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1MQorICAgIDB4MS44NjNhODhkNmIwNjRmMzZmMzQzNzA3MjJkMzYxY2U5ZnAtMSwKKyAgICAtMHgxLjY4ODViMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1MgorICAgIDB4MS44NjNhODhkNmIwNjRmMzZmMzQzNzA3MjJkMzYxY2U5ZnAtMSwKKyAgICAweDEuNjg4NWIycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzUzCisgICAgMHgxLjkzZTI5ODljZWU2MDg0ZTM0YjUzM2IxZWI5Mjc0NmRhcC0xLAorICAgIC0weDEuNTJlMWYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU0CisgICAgMHgxLjkzZTI5ODljZWU2MDg0ZTM0YjUzM2IxZWI5Mjc0NmRhcC0xLAorICAgIDB4MS41MmUxZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTUKKyAgICAweDEuYTBkMWY4NjEzZWJjNjBjN2VlNjUwMmVlMTgzYzg5ZTdwLTEsCisgICAgLTB4MS4zZDNlMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTYKKyAgICAweDEuYTBkMWY4NjEzZWJjNjBjN2VlNjUwMmVlMTgzYzg5ZTdwLTEsCisgICAgMHgxLjNkM2UzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1NworICAgIDB4MS5iYzZiZDg4OWE4YTU5ZGJiNTZlNTQ2YTM3YWU3OThmNXAtMSwKKyAgICAtMHgxLjBhMGIwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1OAorICAgIDB4MS5iYzZiZDg4OWE4YTU5ZGJiNTZlNTQ2YTM3YWU3OThmNXAtMSwKKyAgICAweDEuMGEwYjAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU5CisgICAgMHgxLmNhNTljNzE5Zjk2MDc1ZGQ2YjdhMGZmNDQzYWQ1OWRjcC0xLAorICAgIC0weDEuZDhmNzIwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzYwCisgICAgMHgxLmNhNTljNzE5Zjk2MDc1ZGQ2YjdhMGZmNDQzYWQ1OWRjcC0xLAorICAgIDB4MS5kOGY3MjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjEKKyAgICAweDEuZDZjMGIxM2RmOTk2MTNhNDkzMDZiNGRjNmM1N2FhMDNwLTEsCisgICAgLTB4MS45ZGQ4M2NwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjIKKyAgICAweDEuZDZjMGIxM2RmOTk2MTNhNDkzMDZiNGRjNmM1N2FhMDNwLTEsCisgICAgMHgxLjlkZDgzY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDM2MworICAgIDB4MS5lMTk2MDI3M2E0YWFhMWJkMTllZjBjY2FhODg3NDE4M3AtMSwKKyAgICAtMHgxLjYyYjk1OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM2NAorICAgIDB4MS5lMTk2MDI3M2E0YWFhMWJkMTllZjBjY2FhODg3NDE4M3AtMSwKKyAgICAweDEuNjJiOTU4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzY1CisgICAgMHgxLmVhZDA3Y2QyZTBmN2YxOTY3OTY0NjM2MmJiYzBlYjgwcC0xLAorICAgIC0weDEuMjc5YTc0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzY2CisgICAgMHgxLmVhZDA3Y2QyZTBmN2YxOTY3OTY0NjM2MmJiYzBlYjgwcC0xLAorICAgIDB4MS4yNzlhNzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjcKKyAgICAweDEuZjI2ODQwZWZkODZjZWVhMjNmMzg4YjZhMTEwMmVhNGRwLTEsCisgICAgLTB4MS5kOGY3MjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjgKKyAgICAweDEuZjI2ODQwZWZkODZjZWVhMjNmMzg4YjZhMTEwMmVhNGRwLTEsCisgICAgMHgxLmQ4ZjcyMHAtMworICB9LAorICB7IC8vIEVudHJ5IDM2OQorICAgIDB4MS5mODU2ZDQ5MjUxYmQzN2M1NGYwMDk0MjcwZWVjYmQxOHAtMSwKKyAgICAtMHgxLjYyYjk1OHAtMworICB9LAorICB7IC8vIEVudHJ5IDM3MAorICAgIDB4MS5mODU2ZDQ5MjUxYmQzN2M1NGYwMDk0MjcwZWVjYmQxOHAtMSwKKyAgICAweDEuNjJiOTU4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzcxCisgICAgMHgxLmZjOTcyODNjNGY1YmQxZjc5MzIwMTk3MmI4ZGI1NTFmcC0xLAorICAgIC0weDEuZDhmNzIwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzcyCisgICAgMHgxLmZjOTcyODNjNGY1YmQxZjc5MzIwMTk3MmI4ZGI1NTFmcC0xLAorICAgIDB4MS5kOGY3MjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzMKKyAgICAweDEuZmYyNTliN2IzZDcyMWVkZjA2M2E1YmY2ZTdhMWY5M2NwLTEsCisgICAgLTB4MS5kOGY3MjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzQKKyAgICAweDEuZmYyNTliN2IzZDcyMWVkZjA2M2E1YmY2ZTdhMWY5M2NwLTEsCisgICAgMHgxLmQ4ZjcyMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDM3NQorICAgIDB4MS5mZjI1OWI3YjNkNzIxZWRmMDYzYTViZjZlN2ExZjkzY3AtMSwKKyAgICAweDEuZDhmNzIwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzc2CisgICAgMHgxLmZmMjU5YjdiM2Q3MjFlZGYwNjNhNWJmNmU3YTFmOTNjcC0xLAorICAgIC0weDEuZDhmNzIwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzc3CisgICAgMHgxLmZjOTcyODNjNGY1YmQxZjc5MzIwMTk3MmI4ZGI1NTFmcC0xLAorICAgIDB4MS5kOGY3MjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzgKKyAgICAweDEuZmM5NzI4M2M0ZjViZDFmNzkzMjAxOTcyYjhkYjU1MWZwLTEsCisgICAgLTB4MS5kOGY3MjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzkKKyAgICAweDEuZjg1NmQ0OTI1MWJkMzdjNTRmMDA5NDI3MGVlY2JkMThwLTEsCisgICAgMHgxLjYyYjk1OHAtMworICB9LAorICB7IC8vIEVudHJ5IDM4MAorICAgIDB4MS5mODU2ZDQ5MjUxYmQzN2M1NGYwMDk0MjcwZWVjYmQxOHAtMSwKKyAgICAtMHgxLjYyYjk1OHAtMworICB9LAorICB7IC8vIEVudHJ5IDM4MQorICAgIDB4MS5mMjY4NDBlZmQ4NmNlZWEyM2YzODhiNmExMTAyZWE0ZHAtMSwKKyAgICAweDEuZDhmNzIwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzgyCisgICAgMHgxLmYyNjg0MGVmZDg2Y2VlYTIzZjM4OGI2YTExMDJlYTRkcC0xLAorICAgIC0weDEuZDhmNzIwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzgzCisgICAgMHgxLmVhZDA3Y2QyZTBmN2YxOTY3OTY0NjM2MmJiYzBlYjgwcC0xLAorICAgIDB4MS4yNzlhNzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODQKKyAgICAweDEuZWFkMDdjZDJlMGY3ZjE5Njc5NjQ2MzYyYmJjMGViODBwLTEsCisgICAgLTB4MS4yNzlhNzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODUKKyAgICAweDEuZTE5NjAyNzNhNGFhYTFiZDE5ZWYwY2NhYTg4NzQxODNwLTEsCisgICAgMHgxLjYyYjk1OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM4NgorICAgIDB4MS5lMTk2MDI3M2E0YWFhMWJkMTllZjBjY2FhODg3NDE4M3AtMSwKKyAgICAtMHgxLjYyYjk1OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM4NworICAgIDB4MS5kNmMwYjEzZGY5OTYxM2E0OTMwNmI0ZGM2YzU3YWEwM3AtMSwKKyAgICAweDEuOWRkODNjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzg4CisgICAgMHgxLmQ2YzBiMTNkZjk5NjEzYTQ5MzA2YjRkYzZjNTdhYTAzcC0xLAorICAgIC0weDEuOWRkODNjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzg5CisgICAgMHgxLmNhNTljNzE5Zjk2MDc1ZGQ2YjdhMGZmNDQzYWQ1OWRjcC0xLAorICAgIDB4MS5kOGY3MjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTAKKyAgICAweDEuY2E1OWM3MTlmOTYwNzVkZDZiN2EwZmY0NDNhZDU5ZGNwLTEsCisgICAgLTB4MS5kOGY3MjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTEKKyAgICAweDEuYmM2YmQ4ODlhOGE1OWRiYjU2ZTU0NmEzN2FlNzk4ZjVwLTEsCisgICAgMHgxLjBhMGIwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5MgorICAgIDB4MS5iYzZiZDg4OWE4YTU5ZGJiNTZlNTQ2YTM3YWU3OThmNXAtMSwKKyAgICAtMHgxLjBhMGIwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5MworICAgIDB4MS5hMGQxZjg2MTNlYmM2MGM3ZWU2NTAyZWUxODNjODllN3AtMSwKKyAgICAweDEuM2QzZTM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzk0CisgICAgMHgxLmEwZDFmODYxM2ViYzYwYzdlZTY1MDJlZTE4M2M4OWU3cC0xLAorICAgIC0weDEuM2QzZTM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzk1CisgICAgMHgxLjkzZTI5M2IyM2E2YWExYWU1MzczMjE0ZWI4ZmI5ZTk2cC0xLAorICAgIDB4MS41MmUxZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTYKKyAgICAweDEuOTNlMjkzYjIzYTZhYTFhZTUzNzMyMTRlYjhmYjllOTZwLTEsCisgICAgLTB4MS41MmUxZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTcKKyAgICAweDEuODYzYTgzYThkOTgyNmM2MTM1NTA5NDA2ZWJlMDVjMGZwLTEsCisgICAgMHgxLjY4ODViYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5OAorICAgIDB4MS44NjNhODNhOGQ5ODI2YzYxMzU1MDk0MDZlYmUwNWMwZnAtMSwKKyAgICAtMHgxLjY4ODViYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5OQorICAgIDB4MS43N2UwMDZjODdjYmFkZWQ2NmVjNWI5NjBjOTNjNTY4YXAtMSwKKyAgICAweDEuN2UyOTdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDAwCisgICAgMHgxLjc3ZTAwNmM4N2NiYWRlZDY2ZWM1Yjk2MGM5M2M1NjhhcC0xLAorICAgIC0weDEuN2UyOTdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDAxCisgICAgMHgxLjY4ZDlhZDI5NzM2YzE3MDRjYWVhNmEyZGI2ZTcxMjIzcC0xLAorICAgIDB4MS45M2NkM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDIKKyAgICAweDEuNjhkOWFkMjk3MzZjMTcwNGNhZWE2YTJkYjZlNzEyMjNwLTEsCisgICAgLTB4MS45M2NkM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDMKKyAgICAweDEuNTkyZTU1NzhjOWVjNjZhY2NlZGRkNGRjNmNlNjZiMjZwLTEsCisgICAgMHgxLmE5NzFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDQKKyAgICAweDEuNTkyZTU1NzhjOWVjNjZhY2NlZGRkNGRjNmNlNjZiMjZwLTEsCisgICAgLTB4MS5hOTcxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDA1CisgICAgMHgxLjQ4ZTUyOWQ0MjllNzIxZWM4YmIxZTAxNGY5NGQ0OGYxcC0xLAorICAgIDB4MS5iZjE0YzJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDYKKyAgICAweDEuNDhlNTI5ZDQyOWU3MjFlYzhiYjFlMDE0Zjk0ZDQ4ZjFwLTEsCisgICAgLTB4MS5iZjE0YzJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDcKKyAgICAweDEuMzgwNTljODMzYzU4ZWE5NzBmN2I5NmQ2YWRhM2Q5YzRwLTEsCisgICAgMHgxLmQ0Yjg4NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwOAorICAgIDB4MS4zODA1OWM4MzNjNThlYTk3MGY3Yjk2ZDZhZGEzZDljNHAtMSwKKyAgICAtMHgxLmQ0Yjg4NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwOQorICAgIDB4MS4yNjk3NmIxYjE2ZDE5MDkxYzA5MjU5NzY1YzRiMzg3MnAtMSwKKyAgICAweDEuZWE1YzNlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDEwCisgICAgMHgxLjI2OTc2YjFiMTZkMTkwOTFjMDkyNTk3NjVjNGIzODcycC0xLAorICAgIC0weDEuZWE1YzNlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDExCisgICAgMHgxLmU4YzQwNDA2NzhkMmVmNzM2MzMzYTQ1MzdhMTExM2ExcC0yLAorICAgIDB4MS4xMmJkOTJwMAorICB9LAorICB7IC8vIEVudHJ5IDQxMgorICAgIDB4MS5lOGM0MDQwNjc4ZDJlZjczNjMzM2E0NTM3YTExMTNhMXAtMiwKKyAgICAtMHgxLjEyYmQ5MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDEzCisgICAgMHgxLmE1YTRjOGY1OThmYTAwNzg5NzEzMTZlYjQ5MDdmOTdicC0yLAorICAgIDB4MS4yNTdiMjRwMAorICB9LAorICB7IC8vIEVudHJ5IDQxNAorICAgIDB4MS5hNWE0YzhmNTk4ZmEwMDc4OTcxMzE2ZWI0OTA3Zjk3YnAtMiwKKyAgICAtMHgxLjI1N2IyNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDE1CisgICAgMHgxLjYwNDM1YmVlZDEwY2EwNTc2OWYwYTNkODZhNWEyMGYzcC0yLAorICAgIDB4MS4zODM4YjZwMAorICB9LAorICB7IC8vIEVudHJ5IDQxNgorICAgIDB4MS42MDQzNWJlZWQxMGNhMDU3NjlmMGEzZDg2YTVhMjBmM3AtMiwKKyAgICAtMHgxLjM4MzhiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDE3CisgICAgMHgxLjE4ZmVlMGZjNDVjMzFhNzliMmI5NDc4YjFmNzJhOWVicC0yLAorICAgIDB4MS40YWY2NDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQxOAorICAgIDB4MS4xOGZlZTBmYzQ1YzMxYTc5YjJiOTQ3OGIxZjcyYTllYnAtMiwKKyAgICAtMHgxLjRhZjY0OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDE5CisgICAgMHgxLmEwNzIyNTIwOTBjMzM4Mjg3NjdhZWUzZTA0MGNjZGRmcC0zLAorICAgIDB4MS41ZGIzZGFwMAorICB9LAorICB7IC8vIEVudHJ5IDQyMAorICAgIDB4MS5hMDcyMjUyMDkwYzMzODI4NzY3YWVlM2UwNDBjY2RkZnAtMywKKyAgICAtMHgxLjVkYjNkYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDIxCisgICAgMHgxLjBjYWI3NzAzYThlOWRhY2M0YWQwMTE4OGI0NDNjZmVlcC0zLAorICAgIDB4MS43MDcxNmNwMAorICB9LAorICB7IC8vIEVudHJ5IDQyMgorICAgIDB4MS4wY2FiNzcwM2E4ZTlkYWNjNGFkMDExODhiNDQzY2ZlZXAtMywKKyAgICAtMHgxLjcwNzE2Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDIzCisgICAgMHgxLmRkZDE3MWEzYzk4NTFlNzgxOWI1ZTRmNmY5MGU3NjNkcC01LAorICAgIDB4MS44MzJlZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDQyNAorICAgIDB4MS5kZGQxNzFhM2M5ODUxZTc4MTliNWU0ZjZmOTBlNzYzZHAtNSwKKyAgICAtMHgxLjgzMmVmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDI1CisgICAgLTB4MS5lNjY4Y2IxNTRlZWE2OGJiYzdmODE1NGY0NmIyZTUzNnAtNywKKyAgICAweDEuOTVlYzkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjYKKyAgICAtMHgxLmU2NjhjYjE1NGVlYTY4YmJjN2Y4MTU0ZjQ2YjJlNTM2cC03LAorICAgIC0weDEuOTVlYzkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjcKKyAgICAtMHgxLjY4MmYyYmI4N2E4ZjUwMTE3MzUwOTQxNzZjOWI2ZGFjcC00LAorICAgIDB4MS5hOGFhMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDQyOAorICAgIC0weDEuNjgyZjJiYjg3YThmNTAxMTczNTA5NDE3NmM5YjZkYWNwLTQsCisgICAgLTB4MS5hOGFhMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDQyOQorICAgIDB4MS4wY2IzNDQ5YTBkMGE5ZTA2NDNkNDFmNGE1YjBmN2RiN3AtMSwKKyAgICAweDEuMDRhZmY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzAKKyAgICAweDEuMGNiMzQ0OWEwZDBhOWUwNjQzZDQxZjRhNWIwZjdkYjdwLTEsCisgICAgLTB4MS4wNGFmZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDQzMQorICAgIDB4MS4wY2IyMjY5NzE1M2JjZjFmOGE2M2FjZGRkOTZjNTRjYnAtMSwKKyAgICAweDEuMDRiMGEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzIKKyAgICAweDEuMGNiMjI2OTcxNTNiY2YxZjhhNjNhY2RkZDk2YzU0Y2JwLTEsCisgICAgLTB4MS4wNGIwYTBwMAorICB9LAorICB7IC8vIEVudHJ5IDQzMworICAgIDB4MS4wY2IxMDg5M2E5YjU0NzFhNDQzNTYwNzJjYjMzYjM5NXAtMSwKKyAgICAweDEuMDRiMTQ4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzQKKyAgICAweDEuMGNiMTA4OTNhOWI1NDcxYTQ0MzU2MDcyY2IzM2IzOTVwLTEsCisgICAgLTB4MS4wNGIxNDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQzNQorICAgIDB4MS4wY2FmZWE4ZmNhNzc4MTIzNmE1N2U1YjFjOGFlZDM5Y3AtMSwKKyAgICAweDEuMDRiMWYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzYKKyAgICAweDEuMGNhZmVhOGZjYTc3ODEyMzZhNTdlNWIxYzhhZWQzOWNwLTEsCisgICAgLTB4MS4wNGIxZjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQzNworICAgIDB4MS4wY2FlY2M4Yjc3ODJmODY4MjdhZjkyYjBiMjM3NDUxMHAtMSwKKyAgICAweDEuMDRiMjk4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzgKKyAgICAweDEuMGNhZWNjOGI3NzgyZjg2ODI3YWY5MmIwYjIzNzQ1MTBwLTEsCisgICAgLTB4MS4wNGIyOThwMAorICB9LAorICB7IC8vIEVudHJ5IDQzOQorICAgIDB4MS4wY2FkYWU4NmIwZDgyODE1ZDhmNjMyZTY3YzdlMWE5OXAtMSwKKyAgICAweDEuMDRiMzQwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDAKKyAgICAweDEuMGNhZGFlODZiMGQ4MjgxNWQ4ZjYzMmU2N2M3ZTFhOTlwLTEsCisgICAgLTB4MS4wNGIzNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0MQorICAgIDB4MS4wY2FjOTA4MTc2Nzc4YjVhMGNiYWQyMWVlNzVjZTc2NXAtMSwKKyAgICAweDEuMDRiM2U4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDIKKyAgICAweDEuMGNhYzkwODE3Njc3OGI1YTBjYmFkMjFlZTc1Y2U3NjVwLTEsCisgICAgLTB4MS4wNGIzZThwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0MworICAgIDB4MS4wY2FiNzI3YmM4NjE5ZDYyODM2MTg3NmUxZjMwYTYzM3AtMSwKKyAgICAweDEuMDRiNDkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDQKKyAgICAweDEuMGNhYjcyN2JjODYxOWQ2MjgzNjE4NzZlMWYzMGE2MzNwLTEsCisgICAgLTB4MS4wNGI0OTBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NQorICAgIDB4MS4wY2FhNWI0NTBhNDMyNGYyMDRhNTU2YjA3MmRhMTI0YXAtMSwKKyAgICAweDEuMDRiNTM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDYKKyAgICAweDEuMGNhYTViNDUwYTQzMjRmMjA0YTU1NmIwNzJkYTEyNGFwLTEsCisgICAgLTB4MS4wNGI1MzRwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNDQ4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQ0OQorICAgIDB4MS5wMCwKKyAgICAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNDUxCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTIKKyAgICAweDEuYWQwMmM4YjljYzkzZjQ0OGVmNGViMDY4YTg4OTIyYTNwLTEsCisgICAgMHgxLjI3OWE3MnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ1MworICAgIDB4MS5hZDAyYzhiOWNjOTNmNDQ4ZWY0ZWIwNjhhODg5MjJhM3AtMSwKKyAgICAtMHgxLjI3OWE3MnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ1NAorICAgIDB4MS5hZDAyYzdhMjU4YmZiMzYyYWJiZTg2ZmI0OGY0ZTk4YnAtMSwKKyAgICAweDEuMjc5YTc0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDU1CisgICAgMHgxLmFkMDJjN2EyNThiZmIzNjJhYmJlODZmYjQ4ZjRlOThicC0xLAorICAgIC0weDEuMjc5YTc0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDU2CisgICAgMHgxLmFkMDJjNjhhZTRlOWM1NzlhMDhjMDRjZTU5YmU0MDAycC0xLAorICAgIDB4MS4yNzlhNzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTcKKyAgICAweDEuYWQwMmM2OGFlNGU5YzU3OWEwOGMwNGNlNTliZTQwMDJwLTEsCisgICAgLTB4MS4yNzlhNzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTgKKyAgICAtMHgxLjQ4ZDFjOWU5OGI2YzA4Nzg0ZjEwMDQwZjQ3YTEyMTkxcC0zLAorICAgIDB4MS5iYjY3YWNwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1OQorICAgIC0weDEuNDhkMWM5ZTk4YjZjMDg3ODRmMTAwNDBmNDdhMTIxOTFwLTMsCisgICAgLTB4MS5iYjY3YWNwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2MAorICAgIC0weDEuNDhkMWQ5YjQ2N2UzNzk1NTMzNzMxMWRlY2QwOWZjNzRwLTMsCisgICAgMHgxLmJiNjdhZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDYxCisgICAgLTB4MS40OGQxZDliNDY3ZTM3OTU1MzM3MzExZGVjZDA5ZmM3NHAtMywKKyAgICAtMHgxLmJiNjdhZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDYyCisgICAgLTB4MS40OGQxZTk3ZjQ0NTVjNmVhYjEwNDgwMjIyMzhiMmJkMHAtMywKKyAgICAweDEuYmI2N2IwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjMKKyAgICAtMHgxLjQ4ZDFlOTdmNDQ1NWM2ZWFiMTA0ODAyMjIzOGIyYmQwcC0zLAorICAgIC0weDEuYmI2N2IwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjQKKyAgICAweDEuY2ZjNmQwMTFhMGU1ZDBmY2ViYjU0YjVmZWQ2NzI5NDBwLTEsCisgICAgMHgxLmJmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ2NQorICAgIDB4MS5jZmM2ZDAxMWEwZTVkMGZjZWJiNTRiNWZlZDY3Mjk0MHAtMSwKKyAgICAtMHgxLmJmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ2NgorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmNjJkNmQ1NDIzY2E4MzM5YTAwYXAtMSwKKyAgICAweDEuYzBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjcKKyAgICAweDEuY2ZjNmNmYTUyYWQ5ZjYyZDZkNTQyM2NhODMzOWEwMGFwLTEsCisgICAgLTB4MS5jMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ2OAorICAgIDB4MS5jZmM2Y2YzOGI0Y2RhNzZjM2IwOWIxN2U5ZGViMTllYXAtMSwKKyAgICAweDEuYzAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDY5CisgICAgMHgxLmNmYzZjZjM4YjRjZGE3NmMzYjA5YjE3ZTlkZWIxOWVhcC0xLAorICAgIC0weDEuYzAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDcwCisgICAgMHgxLjhiYjEwNmVhYzdjNzVkMzNmYmIxOTQ0NjMxM2VjYzJmcC0xLAorICAgIDB4MS41ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzEKKyAgICAweDEuOGJiMTA2ZWFjN2M3NWQzM2ZiYjE5NDQ2MzEzZWNjMmZwLTEsCisgICAgLTB4MS41ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzIKKyAgICAweDEuOGJiMTA1YTVkYzkwMDYxOGY4MGZhNTFkMzAzYzY5cC0xLAorICAgIDB4MS42MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ3MworICAgIDB4MS44YmIxMDVhNWRjOTAwNjE4ZjgwZmE1MWQzMDNjNjlwLTEsCisgICAgLTB4MS42MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ3NAorICAgIDB4MS44YmIxMDQ2MGYxNTcyMzRjZWVjN2Q5NjQ0YTFhNzhlNXAtMSwKKyAgICAweDEuNjAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDc1CisgICAgMHgxLjhiYjEwNDYwZjE1NzIzNGNlZWM3ZDk2NDRhMWE3OGU1cC0xLAorICAgIC0weDEuNjAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDc2CisgICAgMHgxLjdlZjQ4YjlhNmZkNWMyNGY1ZWMzOTgzOWUxNzI5Yjc4cC0yLAorICAgIDB4MS4yZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NworICAgIDB4MS43ZWY0OGI5YTZmZDVjMjRmNWVjMzk4MzllMTcyOWI3OHAtMiwKKyAgICAtMHgxLjJmZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDc4CisgICAgMHgxLjdlZjQ4NDJmMGJjY2Q2MGQ0YTUwMWRjOGJjNGI1N2IzcC0yLAorICAgIDB4MS4zMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDc5CisgICAgMHgxLjdlZjQ4NDJmMGJjY2Q2MGQ0YTUwMWRjOGJjNGI1N2IzcC0yLAorICAgIC0weDEuMzBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ4MAorICAgIDB4MS43ZWY0N2NjM2E3YmRlZGY5MjUyMDc0MjYzZDhhNDU5NnAtMiwKKyAgICAweDEuMzAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODEKKyAgICAweDEuN2VmNDdjYzNhN2JkZWRmOTI1MjA3NDI2M2Q4YTQ1OTZwLTIsCisgICAgLTB4MS4zMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDQ4MgorICAgIC0weDEuODYzZWY1MDg1YmNjMzU4ZDJhZTg1MjViZjM5ZjBjNDBwLTEsCisgICAgMHgxLjM3ZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNDgzCisgICAgLTB4MS44NjNlZjUwODViY2MzNThkMmFlODUyNWJmMzlmMGM0MHAtMSwKKyAgICAtMHgxLjM3ZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNDg0CisgICAgLTB4MS44NjNlZmEzNjFkYzI1MmJjYTFlYWVlZDM5NzQ5YmVkN3AtMSwKKyAgICAweDEuMzhwMQorICB9LAorICB7IC8vIEVudHJ5IDQ4NQorICAgIC0weDEuODYzZWZhMzYxZGMyNTJiY2ExZWFlZWQzOTc0OWJlZDdwLTEsCisgICAgLTB4MS4zOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNDg2CisgICAgLTB4MS44NjNlZmY2M2RmYTAwYmZjNzU4YmFmNDY5NDY5ZDc0MXAtMSwKKyAgICAweDEuMzgwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODcKKyAgICAtMHgxLjg2M2VmZjYzZGZhMDBiZmM3NThiYWY0Njk0NjlkNzQxcC0xLAorICAgIC0weDEuMzgwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODgKKyAgICAweDEuZmVmMmIyZDBhMTBlMjczOWM1NjY5MzY0ODBhMTQ3OWJwLTEsCisgICAgMHgxLjA2OWM4Y3AtNAorICB9LAorICB7IC8vIEVudHJ5IDQ4OQorICAgIDB4MS5mZWYyYjJkMGExMGUyNzM5YzU2NjkzNjQ4MGExNDc5YnAtMSwKKyAgICAtMHgxLjA2OWM4Y3AtNAorICB9LAorICB7IC8vIEVudHJ5IDQ5MAorICAgIDB4MS5mYmNiZTY4ZGQxMGJhZDBhMjI5Y2NiYjU4MGNjNTQzNnAtMSwKKyAgICAweDEuMDY5YzhjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDkxCisgICAgMHgxLmZiY2JlNjhkZDEwYmFkMGEyMjljY2JiNTgwY2M1NDM2cC0xLAorICAgIC0weDEuMDY5YzhjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDkyCisgICAgMHgxLmY2OGVlYmVmNzJlN2Y2MTI2YjNmM2RkZTY0NmE3NTVjcC0xLAorICAgIDB4MS44OWVhZDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTMKKyAgICAweDEuZjY4ZWViZWY3MmU3ZjYxMjZiM2YzZGRlNjQ2YTc1NWNwLTEsCisgICAgLTB4MS44OWVhZDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTQKKyAgICAweDEuZWY0MTQ1OWQyZTkwZWExYjdmYWFkN2ZhYmQxZmQ0NDRwLTEsCisgICAgMHgxLjA2OWM4Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDQ5NQorICAgIDB4MS5lZjQxNDU5ZDJlOTBlYTFiN2ZhYWQ3ZmFiZDFmZDQ0NHAtMSwKKyAgICAtMHgxLjA2OWM4Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDQ5NgorICAgIDB4MS5lNWVhYTIzYTI3ZmU4ZDY4OTBhM2VkYWNlMWM2MTk5OHAtMSwKKyAgICAweDEuNDg0M2IwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDk3CisgICAgMHgxLmU1ZWFhMjNhMjdmZThkNjg5MGEzZWRhY2UxYzYxOTk4cC0xLAorICAgIC0weDEuNDg0M2IwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDk4CisgICAgMHgxLmRhOTRkNGI5OWMzYTlhNWUwZDFmYzg2ZDUzMzY5YTg0cC0xLAorICAgIDB4MS44OWVhZDRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTkKKyAgICAweDEuZGE5NGQ0Yjk5YzNhOWE1ZTBkMWZjODZkNTMzNjlhODRwLTEsCisgICAgLTB4MS44OWVhZDRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDAKKyAgICAweDEuY2Q0YmM5YWZjMDEyMzBiMmY5ODJmNjk2OGRhYjdmMDVwLTEsCisgICAgMHgxLmNiOTFmOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUwMQorICAgIDB4MS5jZDRiYzlhZmMwMTIzMGIyZjk4MmY2OTY4ZGFiN2YwNXAtMSwKKyAgICAtMHgxLmNiOTFmOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUwMgorICAgIDB4MS5iZTFkN2FkZjA3N2RlZjJhMzYwZmVjMjNkYmJjZWYwOXAtMSwKKyAgICAweDEuMDY5YzhlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTAzCisgICAgMHgxLmJlMWQ3YWRmMDc3ZGVmMmEzNjBmZWMyM2RiYmNlZjA5cC0xLAorICAgIC0weDEuMDY5YzhlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTA0CisgICAgMHgxLmFkMTllMDg0N2QyNWYzYWExNDIyODlkYWI1NTdiZjk2cC0xLAorICAgIDB4MS4yNzcwMjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDUKKyAgICAweDEuYWQxOWUwODQ3ZDI1ZjNhYTE0MjI4OWRhYjU1N2JmOTZwLTEsCisgICAgLTB4MS4yNzcwMjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDYKKyAgICAweDEuOWE1MmUwOGIxOTFiZDU1NTEyYzgzNjUwNzRmMTk4N2ZwLTEsCisgICAgMHgxLjQ4NDNiMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDUwNworICAgIDB4MS45YTUyZTA4YjE5MWJkNTU1MTJjODM2NTA3NGYxOTg3ZnAtMSwKKyAgICAtMHgxLjQ4NDNiMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDUwOAorICAgIDB4MS44NWRjM2JiN2MyZTlhYmI1Y2NjYjZkOTZkMTJkMzljNHAtMSwKKyAgICAweDEuNjkxNzQ0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTA5CisgICAgMHgxLjg1ZGMzYmI3YzJlOWFiYjVjY2NiNmQ5NmQxMmQzOWM0cC0xLAorICAgIC0weDEuNjkxNzQ0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTEwCisgICAgMHgxLjZmY2I3OGUxY2Q2NWQyZTRmZGU3MTE4Y2FhYzc5ZDZkcC0xLAorICAgIDB4MS44OWVhZDZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTEKKyAgICAweDEuNmZjYjc4ZTFjZDY1ZDJlNGZkZTcxMThjYWFjNzlkNmRwLTEsCisgICAgLTB4MS44OWVhZDZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTIKKyAgICAweDEuNTgzN2NlNGRjODM1ZDRhNTQ1NGVjMGExYmIzOTQwODFwLTEsCisgICAgMHgxLmFhYmU2OHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUxMworICAgIDB4MS41ODM3Y2U0ZGM4MzVkNGE1NDU0ZWMwYTFiYjM5NDA4MXAtMSwKKyAgICAtMHgxLmFhYmU2OHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUxNAorICAgIDB4MS4zZjNhMDk0Mjc5NjZlOTUxODgwMmRlZTNiZjQ0M2E5NXAtMSwKKyAgICAweDEuY2I5MWZhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTE1CisgICAgMHgxLjNmM2EwOTQyNzk2NmU5NTE4ODAyZGVlM2JmNDQzYTk1cC0xLAorICAgIC0weDEuY2I5MWZhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTE2CisgICAgMHgxLjI0ZWM3M2YxYWVlZjQ5NDBiYjhkYTE5YTgyYmJjNDlmcC0xLAorICAgIDB4MS5lYzY1OGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTcKKyAgICAweDEuMjRlYzczZjFhZWVmNDk0MGJiOGRhMTlhODJiYmM0OWZwLTEsCisgICAgLTB4MS5lYzY1OGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTgKKyAgICAweDEuMDk2YWJiODYyZjliZDU1MTU5ODJjMjgxOGMzMzJmZjlwLTEsCisgICAgMHgxLjA2OWM4ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTE5CisgICAgMHgxLjA5NmFiYjg2MmY5YmQ1NTE1OTgyYzI4MThjMzMyZmY5cC0xLAorICAgIC0weDEuMDY5YzhlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjAKKyAgICAweDEuZDlhMzljMGRkZGM2NTRjNzE3ZTMwMzZkYTVkZDY4NWNwLTIsCisgICAgMHgxLjE3MDY1NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTIxCisgICAgMHgxLmQ5YTM5YzBkZGRjNjU0YzcxN2UzMDM2ZGE1ZGQ2ODVjcC0yLAorICAgIC0weDEuMTcwNjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjIKKyAgICAweDEuOWU3ZjgxODQwYzBiYmQwZjFiMTM3MzMwNjEwNjJkMzRwLTIsCisgICAgMHgxLjI3NzAxZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTIzCisgICAgMHgxLjllN2Y4MTg0MGMwYmJkMGYxYjEzNzMzMDYxMDYyZDM0cC0yLAorICAgIC0weDEuMjc3MDFlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjQKKyAgICAweDEuNjFhNzVlMmRlYjU5NjczMWM4Y2Q0NWUzZDk3OTQ1MjZwLTIsCisgICAgMHgxLjM3ZDllNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTI1CisgICAgMHgxLjYxYTc1ZTJkZWI1OTY3MzFjOGNkNDVlM2Q5Nzk0NTI2cC0yLAorICAgIC0weDEuMzdkOWU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjYKKyAgICAweDEuMjM1YjMzN2IwOTFjZGQ4YWMwNjM5MGFiYzY4MTZiODJwLTIsCisgICAgMHgxLjQ4NDNhZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTI3CisgICAgMHgxLjIzNWIzMzdiMDkxY2RkOGFjMDYzOTBhYmM2ODE2YjgycC0yLAorICAgIC0weDEuNDg0M2FlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjgKKyAgICAweDEuYzdiOTE0NmQ2ZDEwODI0ZmY2NTJkYzM5MGJhMmQ3ZjlwLTMsCisgICAgMHgxLjU4YWQ3NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTI5CisgICAgMHgxLmM3YjkxNDZkNmQxMDgyNGZmNjUyZGMzOTBiYTJkN2Y5cC0zLAorICAgIC0weDEuNThhZDc2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzAKKyAgICAweDEuNDZkYzViMmYxZGU5NzdlZmZmN2MyNzhiNWFkYjJhNzVwLTMsCisgICAgMHgxLjY5MTczZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTMxCisgICAgMHgxLjQ2ZGM1YjJmMWRlOTc3ZWZmZjdjMjc4YjVhZGIyYTc1cC0zLAorICAgIC0weDEuNjkxNzNlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzIKKyAgICAweDEuODk0ZjkzZWY0OWM0NTc1ODAwYmJkNjQ2YTNhMzFkMmFwLTQsCisgICAgMHgxLjc5ODEwNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTMzCisgICAgMHgxLjg5NGY5M2VmNDljNDU3NTgwMGJiZDY0NmEzYTMxZDJhcC00LAorICAgIC0weDEuNzk4MTA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzQKKyAgICAweDEuMDY5MTY0ZTNmNWNlZTk0ZDg2NWZiNTJlMzE2ZGZmNmJwLTUsCisgICAgMHgxLjg5ZWFjZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM1CisgICAgMHgxLjA2OTE2NGUzZjVjZWU5NGQ4NjVmYjUyZTMxNmRmZjZicC01LAorICAgIC0weDEuODllYWNlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzYKKyAgICAtMHgxLjA2OTA5M2VlYzBlZDA2NmVjODNkZDAzNDQ5OGVmOGJmcC01LAorICAgIDB4MS45YTU0OTZwMAorICB9LAorICB7IC8vIEVudHJ5IDUzNworICAgIC0weDEuMDY5MDkzZWVjMGVkMDY2ZWM4M2RkMDM0NDk4ZWY4YmZwLTUsCisgICAgLTB4MS45YTU0OTZwMAorICB9LAorICB7IC8vIEVudHJ5IDUzOAorICAgIC0weDEuODk0ZjJiZTI5NzlkZDljZWQ4M2NjYzYwY2Y0OWNkNDRwLTQsCisgICAgMHgxLmFhYmU1ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM5CisgICAgLTB4MS44OTRmMmJlMjk3OWRkOWNlZDgzY2NjNjBjZjQ5Y2Q0NHAtNCwKKyAgICAtMHgxLmFhYmU1ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQwCisgICAgLTB4MS40NmRjMjc5NjczNTE5NWExNWM4MGU1YjcxOWUyZmM0MnAtMywKKyAgICAweDEuYmIyODI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDEKKyAgICAtMHgxLjQ2ZGMyNzk2NzM1MTk1YTE1YzgwZTViNzE5ZTJmYzQycC0zLAorICAgIC0weDEuYmIyODI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDIKKyAgICAtMHgxLmM3YjhlMTc4YjdlOGMwMWQ5ZjMyMDQ2NmNjN2E2OGQ0cC0zLAorICAgIDB4MS5jYjkxZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU0MworICAgIC0weDEuYzdiOGUxNzhiN2U4YzAxZDlmMzIwNDY2Y2M3YTY4ZDRwLTMsCisgICAgLTB4MS5jYjkxZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NAorICAgIC0weDEuMjM1YjFhNmQ3NjdlNGIzNjJjNjQ1NzFhYzk3YjRhMWNwLTIsCisgICAgMHgxLmRiZmJiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ1CisgICAgLTB4MS4yMzViMWE2ZDc2N2U0YjM2MmM2NDU3MWFjOTdiNGExY3AtMiwKKyAgICAtMHgxLmRiZmJiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ2CisgICAgLTB4MS42MWE3NDVhNzdiN2U4M2MyZjhhMmY5YjA5MWU4OWFhYXAtMiwKKyAgICAweDEuZWM2NTdlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDcKKyAgICAtMHgxLjYxYTc0NWE3N2I3ZTgzYzJmOGEyZjliMDkxZTg5YWFhcC0yLAorICAgIC0weDEuZWM2NTdlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDgKKyAgICAtMHgxLjllN2Y2OTllOGI5YWFmOGVkNTFjNzFjOGY3M2IwYjc0cC0yLAorICAgIDB4MS5mY2NmNDZwMAorICB9LAorICB7IC8vIEVudHJ5IDU0OQorICAgIC0weDEuOWU3ZjY5OWU4YjlhYWY4ZWQ1MWM3MWM4ZjczYjBiNzRwLTIsCisgICAgLTB4MS5mY2NmNDZwMAorICB9LAorICB7IC8vIEVudHJ5IDU1MAorICAgIC0weDEuZDlhMzhiZmEzMTk1YmExY2FhN2ZiNjliYzFkMDRlNDJwLTIsCisgICAgMHgxLjA2OWM4OHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTUxCisgICAgLTB4MS5kOWEzOGJmYTMxOTViYTFjYWE3ZmI2OWJjMWQwNGU0MnAtMiwKKyAgICAtMHgxLjA2OWM4OHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTUyCisgICAgLTB4MS4wOTZhYjNjNTVjOTFmMzZlMjM1OWVkMWM1YTgzNDJkZnAtMSwKKyAgICAweDEuMGVkMTZjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTMKKyAgICAtMHgxLjA5NmFiM2M1NWM5MWYzNmUyMzU5ZWQxYzVhODM0MmRmcC0xLAorICAgIC0weDEuMGVkMTZjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTQKKyAgICAtMHgxLjI0ZWM2YzgyMDZlNzQ0MzIyZDk5ZjQ3ZTllNDFiZWNlcC0xLAorICAgIDB4MS4xNzA2NTBwMQorICB9LAorICB7IC8vIEVudHJ5IDU1NQorICAgIC0weDEuMjRlYzZjODIwNmU3NDQzMjJkOTlmNDdlOWU0MWJlY2VwLTEsCisgICAgLTB4MS4xNzA2NTBwMQorICB9LAorICB7IC8vIEVudHJ5IDU1NgorICAgIC0weDEuM2YzYTAwOWI4MmI1YjgyMzRlMTI5NmRkNzNjZmY0OWRwLTEsCisgICAgMHgxLjFmM2IzNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTU3CisgICAgLTB4MS4zZjNhMDA5YjgyYjViODIzNGUxMjk2ZGQ3M2NmZjQ5ZHAtMSwKKyAgICAtMHgxLjFmM2IzNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTU4CisgICAgLTB4MS41ODM3YzRhMTg0Y2NmN2VkNTdjMTg5ZjJhZGRmMzJjNXAtMSwKKyAgICAweDEuMjc3MDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTkKKyAgICAtMHgxLjU4MzdjNGExODRjY2Y3ZWQ1N2MxODlmMmFkZGYzMmM1cC0xLAorICAgIC0weDEuMjc3MDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjAKKyAgICAtMHgxLjZmY2I2ZTY2ODVlNzJmYjQwNzRlNzBjZDMxNjJkM2JhcC0xLAorICAgIDB4MS4yZmE0ZmNwMQorICB9LAorICB7IC8vIEVudHJ5IDU2MQorICAgIC0weDEuNmZjYjZlNjY4NWU3MmZiNDA3NGU3MGNkMzE2MmQzYmFwLTEsCisgICAgLTB4MS4yZmE0ZmNwMQorICB9LAorICB7IC8vIEVudHJ5IDU2MgorICAgIC0weDEuODVkYzMwYTc5ZjI2NzU0YWIxMzcwMzM4ZWU3YmZkMTFwLTEsCisgICAgMHgxLjM3ZDllMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTYzCisgICAgLTB4MS44NWRjMzBhNzlmMjY3NTRhYjEzNzAzMzhlZTdiZmQxMXAtMSwKKyAgICAtMHgxLjM3ZDllMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTY0CisgICAgLTB4MS45YTUyZDUyM2IxNTMyZTRlZDQ3N2UyN2RjNjA1MWMxMnAtMSwKKyAgICAweDEuNDAwZWM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjUKKyAgICAtMHgxLjlhNTJkNTIzYjE1MzJlNGVkNDc3ZTI3ZGM2MDUxYzEycC0xLAorICAgIC0weDEuNDAwZWM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjYKKyAgICAtMHgxLmFkMTlkNTA2NjRhYmYwYzAxNDExMzdkMmNhNTA5ZjIxcC0xLAorICAgIDB4MS40ODQzYThwMQorICB9LAorICB7IC8vIEVudHJ5IDU2NworICAgIC0weDEuYWQxOWQ1MDY2NGFiZjBjMDE0MTEzN2QyY2E1MDlmMjFwLTEsCisgICAgLTB4MS40ODQzYThwMQorICB9LAorICB7IC8vIEVudHJ5IDU2OAorICAgIC0weDEuYmUxZDZmOGQ1MTdkYjVjMmNmN2RlMGZhZjA4MDhkMzBwLTEsCisgICAgMHgxLjUwNzg4Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTY5CisgICAgLTB4MS5iZTFkNmY4ZDUxN2RiNWMyY2Y3ZGUwZmFmMDgwOGQzMHAtMSwKKyAgICAtMHgxLjUwNzg4Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTcwCisgICAgLTB4MS5jZDRiYmVjZjdmMjcwNWQ0ZmQwMGRkNDYzNzgwZjQ1ZXAtMSwKKyAgICAweDEuNThhZDcwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzEKKyAgICAtMHgxLmNkNGJiZWNmN2YyNzA1ZDRmZDAwZGQ0NjM3ODBmNDVlcC0xLAorICAgIC0weDEuNThhZDcwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzIKKyAgICAtMHgxLmRhOTRjYTkxNWRhM2NkZDFmZmY4MzlkODVlZWMzOWUycC0xLAorICAgIDB4MS42MGUyNTRwMQorICB9LAorICB7IC8vIEVudHJ5IDU3MworICAgIC0weDEuZGE5NGNhOTE1ZGEzY2RkMWZmZjgzOWQ4NWVlYzM5ZTJwLTEsCisgICAgLTB4MS42MGUyNTRwMQorICB9LAorICB7IC8vIEVudHJ5IDU3NAorICAgIC0weDEuZTVlYTk5MTE2YjM5MzYxYWM5MjZkZDlmZGMyMDg5ZDFwLTEsCisgICAgMHgxLjY5MTczOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTc1CisgICAgLTB4MS5lNWVhOTkxMTZiMzkzNjFhYzkyNmRkOWZkYzIwODlkMXAtMSwKKyAgICAtMHgxLjY5MTczOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTc2CisgICAgLTB4MS5lZjQxM2RiYmRhMjg1OWZmYjBkMWFiODQzNDJmZDIzNXAtMSwKKyAgICAweDEuNzE0YzFjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzcKKyAgICAtMHgxLmVmNDEzZGJiZGEyODU5ZmZiMGQxYWI4NDM0MmZkMjM1cC0xLAorICAgIC0weDEuNzE0YzFjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzgKKyAgICAtMHgxLmY2OGVlNWI1YmYzNTZiMTAyMzA5NDRhMThlNzA5MjVjcC0xLAorICAgIDB4MS43OTgxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzkKKyAgICAtMHgxLmY2OGVlNWI1YmYzNTZiMTAyMzA5NDRhMThlNzA5MjVjcC0xLAorICAgIC0weDEuNzk4MXAxCisgIH0sCisgIHsgLy8gRW50cnkgNTgwCisgICAgLTB4MS5mYmNiZTIzMjk2ZmM2MWI5NmYzODJmMzVlYTE1Yzc2OHAtMSwKKyAgICAweDEuODFiNWU0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODEKKyAgICAtMHgxLmZiY2JlMjMyOTZmYzYxYjk2ZjM4MmYzNWVhMTVjNzY4cC0xLAorICAgIC0weDEuODFiNWU0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODIKKyAgICAtMHgxLmZlZjJiMDg5NDMxOTdjZDNhOGJhODYxMDk1MjI3YzQ4cC0xLAorICAgIDB4MS44OWVhYzhwMQorICB9LAorICB7IC8vIEVudHJ5IDU4MworICAgIC0weDEuZmVmMmIwODk0MzE5N2NkM2E4YmE4NjEwOTUyMjdjNDhwLTEsCisgICAgLTB4MS44OWVhYzhwMQorICB9LAorICB7IC8vIEVudHJ5IDU4NAorICAgIDB4MS5lZjQxNDg5ZmMyZmU4MDFhNmZjOGFlNzkxNDM4ZWI3OHAtMSwKKyAgICAtMHgxLjgxYjVlZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTg1CisgICAgMHgxLmVmNDE0ODlmYzJmZTgwMWE2ZmM4YWU3OTE0MzhlYjc4cC0xLAorICAgIDB4MS44MWI1ZWVwMgorICB9LAorICB7IC8vIEVudHJ5IDU4NgorICAgIDB4MS5iZTFkODQ5ZWM2NDliNzk3MzIwZTk4NWQwYjgyYWU4NXAtMSwKKyAgICAtMHgxLjcxNGMyNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTg3CisgICAgMHgxLmJlMWQ4NDllYzY0OWI3OTczMjBlOTg1ZDBiODJhZTg1cC0xLAorICAgIDB4MS43MTRjMjZwMgorICB9LAorICB7IC8vIEVudHJ5IDU4OAorICAgIDB4MS42ZmNiOGM0NGJkMzBkZDY2ODE0ODYwNTk2OWIxYzE2MXAtMSwKKyAgICAtMHgxLjYwZTI1ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTg5CisgICAgMHgxLjZmY2I4YzQ0YmQzMGRkNjY4MTQ4NjA1OTY5YjFjMTYxcC0xLAorICAgIDB4MS42MGUyNWVwMgorICB9LAorICB7IC8vIEVudHJ5IDU5MAorICAgIDB4MS4wOTZhZDg3YzMyNjYyMmM0MmRlMzRmOTI4MTRjZmE4NHAtMSwKKyAgICAtMHgxLjUwNzg5NnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTkxCisgICAgMHgxLjA5NmFkODdjMzI2NjIyYzQyZGUzNGY5MjgxNGNmYTg0cC0xLAorICAgIDB4MS41MDc4OTZwMgorICB9LAorICB7IC8vIEVudHJ5IDU5MgorICAgIDB4MS4yMzViNzQ2YTJhMmVmZjJiZjY0MGRkOGMwNGQzNWE1YnAtMiwKKyAgICAtMHgxLjQwMGVjZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTkzCisgICAgMHgxLjIzNWI3NDZhMmEyZWZmMmJmNjQwZGQ4YzA0ZDM1YTVicC0yLAorICAgIDB4MS40MDBlY2VwMgorICB9LAorICB7IC8vIEVudHJ5IDU5NAorICAgIDB4MS4wNjkzODI3YjQ2Y2VlM2I2NjFhYzE3MTE0YjVmZTBmYnAtNSwKKyAgICAtMHgxLjJmYTUwNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTk1CisgICAgMHgxLjA2OTM4MjdiNDZjZWUzYjY2MWFjMTcxMTRiNWZlMGZicC01LAorICAgIDB4MS4yZmE1MDZwMgorICB9LAorICB7IC8vIEVudHJ5IDU5NgorICAgIC0weDEuYzdiODVkNjY4ZTJhYmNjNDY1NDJjYTg1MjdmMGI4MDFwLTMsCisgICAgLTB4MS4xZjNiM2VwMgorICB9LAorICB7IC8vIEVudHJ5IDU5NworICAgIC0weDEuYzdiODVkNjY4ZTJhYmNjNDY1NDJjYTg1MjdmMGI4MDFwLTMsCisgICAgMHgxLjFmM2IzZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTk4CisgICAgLTB4MS5kOWEzNDhkNGY0MzYzYmE0NTYyMTEwZGIwMWVlODRlOHAtMiwKKyAgICAtMHgxLjBlZDE3NnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTk5CisgICAgLTB4MS5kOWEzNDhkNGY0MzYzYmE0NTYyMTEwZGIwMWVlODRlOHAtMiwKKyAgICAweDEuMGVkMTc2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDAKKyAgICAtMHgxLjU4MzdhZTg1NjljOTU4NDZlNjE2NGQ5NjM2NTQ2MTIwcC0xLAorICAgIC0weDEuZmNjZjVhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDEKKyAgICAtMHgxLjU4MzdhZTg1NjljOTU4NDZlNjE2NGQ5NjM2NTQ2MTIwcC0xLAorICAgIDB4MS5mY2NmNWFwMQorICB9LAorICB7IC8vIEVudHJ5IDYwMgorICAgIC0weDEuYWQxOWM5MTg4ODMwMDBiMGI3MDJlYzA4MGNmMDEyMmVwLTEsCisgICAgLTB4MS5kYmZiYzhwMQorICB9LAorICB7IC8vIEVudHJ5IDYwMworICAgIC0weDEuYWQxOWM5MTg4ODMwMDBiMGI3MDJlYzA4MGNmMDEyMmVwLTEsCisgICAgMHgxLmRiZmJjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjA0CisgICAgLTB4MS5lNWVhOTRiMmNmMDdhZGQzZDBkOTVhYjNhMzBhZDRhYnAtMSwKKyAgICAtMHgxLmJiMjgzNnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjA1CisgICAgLTB4MS5lNWVhOTRiMmNmMDdhZGQzZDBkOTVhYjNhMzBhZDRhYnAtMSwKKyAgICAweDEuYmIyODM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDYKKyAgICAtMHgxLmZlZjJiMDI5MDg1NTlmOTJkZTg5MmQyNDBhMmIwYjQ5cC0xLAorICAgIC0weDEuOWE1NGE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDcKKyAgICAtMHgxLmZlZjJiMDI5MDg1NTlmOTJkZTg5MmQyNDBhMmIwYjQ5cC0xLAorICAgIDB4MS45YTU0YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDYwOAorICAgIC0weDEuZjY4ZWYzNzkyZTU5MmMzY2VmYmNlMWQ1ZGVkNjRhOTJwLTEsCisgICAgLTB4MS43OTgxMTJwMQorICB9LAorICB7IC8vIEVudHJ5IDYwOQorICAgIC0weDEuZjY4ZWYzNzkyZTU5MmMzY2VmYmNlMWQ1ZGVkNjRhOTJwLTEsCisgICAgMHgxLjc5ODExMnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjEwCisgICAgLTB4MS5jZDRiZGE5NDNlZWExMzYzMGY4ZTUwOGY4NzQ0ZjJmMnAtMSwKKyAgICAtMHgxLjU4YWQ4MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjExCisgICAgLTB4MS5jZDRiZGE5NDNlZWExMzYzMGY4ZTUwOGY4NzQ0ZjJmMnAtMSwKKyAgICAweDEuNThhZDgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTIKKyAgICAtMHgxLjg1ZGM1NGY0OWYzMjRiZGZjNzFkNTc0OTQ4M2IzMzE4cC0xLAorICAgIC0weDEuMzdkOWVlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTMKKyAgICAtMHgxLjg1ZGM1NGY0OWYzMjRiZGZjNzFkNTc0OTQ4M2IzMzE4cC0xLAorICAgIDB4MS4zN2Q5ZWVwMQorICB9LAorICB7IC8vIEVudHJ5IDYxNAorICAgIC0weDEuMjRlYzkzZTA0ZDRiZGI1NGUyMGJlYWYzODM1MTlhZjhwLTEsCisgICAgLTB4MS4xNzA2NWNwMQorICB9LAorICB7IC8vIEVudHJ5IDYxNQorICAgIC0weDEuMjRlYzkzZTA0ZDRiZGI1NGUyMGJlYWYzODM1MTlhZjhwLTEsCisgICAgMHgxLjE3MDY1Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjE2CisgICAgLTB4MS42MWE3OTgzZDRjMTZjNDUxYjY4YmYyZjViNzBmM2I2YXAtMiwKKyAgICAtMHgxLmVjNjU5NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjE3CisgICAgLTB4MS42MWE3OTgzZDRjMTZjNDUxYjY4YmYyZjViNzBmM2I2YXAtMiwKKyAgICAweDEuZWM2NTk0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTgKKyAgICAtMHgxLjg5NTA0YThkZTZjOWVjYWM2NjNlNjc1ODNjYWI0N2U4cC00LAorICAgIC0weDEuYWFiZTcwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTkKKyAgICAtMHgxLjg5NTA0YThkZTZjOWVjYWM2NjNlNjc1ODNjYWI0N2U4cC00LAorICAgIDB4MS5hYWJlNzBwMAorICB9LAorICB7IC8vIEVudHJ5IDYyMAorICAgIDB4MS40NmRiZWM5ZWEzYTVmMDhiYTczYWE2OWU3ZTIyZGUxY3AtMywKKyAgICAtMHgxLjY5MTc0Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjIxCisgICAgMHgxLjQ2ZGJlYzllYTNhNWYwOGJhNzNhYTY5ZTdlMjJkZTFjcC0zLAorICAgIDB4MS42OTE3NGNwMAorICB9LAorICB7IC8vIEVudHJ5IDYyMgorICAgIDB4MS45ZTdmNWNmMDc1ZDFlYzRlZjY5YzljNjdiNjJjMjdjYnAtMiwKKyAgICAtMHgxLjI3NzAyOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjIzCisgICAgMHgxLjllN2Y1Y2YwNzVkMWVjNGVmNjljOWM2N2I2MmMyN2NicC0yLAorICAgIDB4MS4yNzcwMjhwMAorICB9LAorICB7IC8vIEVudHJ5IDYyNAorICAgIDB4MS4zZjM5ZmNjMDE3NjUzZDI2MzY4MzdhNTVmZGY2ZDJkNHAtMSwKKyAgICAtMHgxLmNiOTIwYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDYyNQorICAgIDB4MS4zZjM5ZmNjMDE3NjUzZDI2MzY4MzdhNTVmZGY2ZDJkNHAtMSwKKyAgICAweDEuY2I5MjBhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjI2CisgICAgMHgxLjlhNTJkNWM3MDBkYWEzZGM4Y2Y4ZjVhNzFmMmRmMjg5cC0xLAorICAgIC0weDEuNDg0M2M0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjI3CisgICAgMHgxLjlhNTJkNWM3MDBkYWEzZGM4Y2Y4ZjVhNzFmMmRmMjg5cC0xLAorICAgIDB4MS40ODQzYzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjgKKyAgICAweDEuZGE5NGNkMzgzZGQ3YTNiOTFhMmZjODhmZjkwNWE2YTBwLTEsCisgICAgLTB4MS44OWVhZmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjkKKyAgICAweDEuZGE5NGNkMzgzZGQ3YTNiOTFhMmZjODhmZjkwNWE2YTBwLTEsCisgICAgMHgxLjg5ZWFmY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDYzMAorICAgIDB4MS5mYmNiZTNkZTU4ZTY2YzMyODNiYzgxMGQxNmM0NTgzM3AtMSwKKyAgICAtMHgxLjA2OWNlMHAtMworICB9LAorICB7IC8vIEVudHJ5IDYzMQorICAgIDB4MS5mYmNiZTNkZTU4ZTY2YzMyODNiYzgxMGQxNmM0NTgzM3AtMSwKKyAgICAweDEuMDY5Y2UwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjMyCisgICAgMHgxLmZiY2JlOTNkNDg1NjNkNTFiNmU5ZDZlZmRiNjI0OTVjcC0xLAorICAgIDB4MS4wNjljMzhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzMKKyAgICAweDEuZmJjYmU5M2Q0ODU2M2Q1MWI2ZTlkNmVmZGI2MjQ5NWNwLTEsCisgICAgLTB4MS4wNjljMzhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzQKKyAgICAweDEuZGE5NGRjZmIxY2QxNTg1M2NlODQ4ZmZiMDI2NGFkMDhwLTEsCisgICAgMHgxLjg5ZWFhOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDYzNQorICAgIDB4MS5kYTk0ZGNmYjFjZDE1ODUzY2U4NDhmZmIwMjY0YWQwOHAtMSwKKyAgICAtMHgxLjg5ZWFhOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDYzNgorICAgIDB4MS45YTUyZWVlNWUzNTM3N2Q1NTRhY2U4ODFiZGM0NzI1YnAtMSwKKyAgICAweDEuNDg0MzlhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjM3CisgICAgMHgxLjlhNTJlZWU1ZTM1Mzc3ZDU1NGFjZTg4MWJkYzQ3MjVicC0xLAorICAgIC0weDEuNDg0MzlhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjM4CisgICAgMHgxLjNmM2ExZDk2NTdmZjZhYTQ5OGM0NmY2ZmFhZjAzYjkwcC0xLAorICAgIDB4MS5jYjkxZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzkKKyAgICAweDEuM2YzYTFkOTY1N2ZmNmFhNDk4YzQ2ZjZmYWFmMDNiOTBwLTEsCisgICAgLTB4MS5jYjkxZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDAKKyAgICAweDEuOWU3ZmE2MTdhMWEzYTQwMGE3ZjU5YWE4NzkwODhlMzFwLTIsCisgICAgMHgxLjI3NzAxNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQxCisgICAgMHgxLjllN2ZhNjE3YTFhM2E0MDBhN2Y1OWFhODc5MDg4ZTMxcC0yLAorICAgIC0weDEuMjc3MDE0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDIKKyAgICAweDEuNDZkYzhhOTE5YjI3ODQwY2RhNmUxOGEwNzlkYTQ1OWNwLTMsCisgICAgMHgxLjY5MTczOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQzCisgICAgMHgxLjQ2ZGM4YTkxOWIyNzg0MGNkYTZlMThhMDc5ZGE0NTljcC0zLAorICAgIC0weDEuNjkxNzM4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDQKKyAgICAtMHgxLjg5NGYwYzA4NzI0MTU2NjNiN2Y5ZTRlNDgwMWRlYWYwcC00LAorICAgIDB4MS5hYWJlNWNwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NQorICAgIC0weDEuODk0ZjBjMDg3MjQxNTY2M2I3ZjllNGU0ODAxZGVhZjBwLTQsCisgICAgLTB4MS5hYWJlNWNwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NgorICAgIC0weDEuNjFhNzRkMjk3NzRhZTRlM2JjNTUzM2EyZWEwOGExNGFwLTIsCisgICAgMHgxLmVjNjU4MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ3CisgICAgLTB4MS42MWE3NGQyOTc3NGFlNGUzYmM1NTMzYTJlYTA4YTE0YXAtMiwKKyAgICAtMHgxLmVjNjU4MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ4CisgICAgLTB4MS4yNGVjNzMxMWJkN2IyMjU1ZjliODkwYjNmZjU4OTlmNHAtMSwKKyAgICAweDEuMTcwNjUycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDkKKyAgICAtMHgxLjI0ZWM3MzExYmQ3YjIyNTVmOWI4OTBiM2ZmNTg5OWY0cC0xLAorICAgIC0weDEuMTcwNjUycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTAKKyAgICAtMHgxLjg1ZGMzYjA2YzQzNWY1MjRjODczZDliNWViYTNkZWY4cC0xLAorICAgIDB4MS4zN2Q5ZTRwMQorICB9LAorICB7IC8vIEVudHJ5IDY1MQorICAgIC0weDEuODVkYzNiMDZjNDM1ZjUyNGM4NzNkOWI1ZWJhM2RlZjhwLTEsCisgICAgLTB4MS4zN2Q5ZTRwMQorICB9LAorICB7IC8vIEVudHJ5IDY1MgorICAgIC0weDEuY2Q0YmM5Mzk0N2U4NjY3MWFjN2YwZWFjZDk1MjEzNzdwLTEsCisgICAgMHgxLjU4YWQ3NnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjUzCisgICAgLTB4MS5jZDRiYzkzOTQ3ZTg2NjcxYWM3ZjBlYWNkOTUyMTM3N3AtMSwKKyAgICAtMHgxLjU4YWQ3NnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjU0CisgICAgLTB4MS5mNjhlZWJkM2I4ZjEyZjk0MzNlNmQ3MjI0OTg5YzEwZXAtMSwKKyAgICAweDEuNzk4MTA4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTUKKyAgICAtMHgxLmY2OGVlYmQzYjhmMTJmOTQzM2U2ZDcyMjQ5ODljMTBlcC0xLAorICAgIC0weDEuNzk4MTA4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTYKKyAgICAtMHgxLmZlZjJiMmI5MWU0MDAyMWEyZmVlNzRmYzYxODEyMTU3cC0xLAorICAgIDB4MS45YTU0OWFwMQorICB9LAorICB7IC8vIEVudHJ5IDY1NworICAgIC0weDEuZmVmMmIyYjkxZTQwMDIxYTJmZWU3NGZjNjE4MTIxNTdwLTEsCisgICAgLTB4MS45YTU0OWFwMQorICB9LAorICB7IC8vIEVudHJ5IDY1OAorICAgIC0weDEuZTVlYWExNGQ4NjE2OGI2OTkxOGMyMmYzNzE2YTY3ZWFwLTEsCisgICAgMHgxLmJiMjgyY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjU5CisgICAgLTB4MS5lNWVhYTE0ZDg2MTY4YjY5OTE4YzIyZjM3MTZhNjdlYXAtMSwKKyAgICAtMHgxLmJiMjgyY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjYwCisgICAgLTB4MS5hZDE5ZGVlYWQwZWFlMmY3MmQwNDE2NWUwOWU0YTQzZHAtMSwKKyAgICAweDEuZGJmYmJlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjEKKyAgICAtMHgxLmFkMTlkZWVhZDBlYWUyZjcyZDA0MTY1ZTA5ZTRhNDNkcC0xLAorICAgIC0weDEuZGJmYmJlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjIKKyAgICAtMHgxLjU4MzdjYzIxZGRhNDRmM2FiN2ZkOTZmNTdjMDE0ZTE5cC0xLAorICAgIDB4MS5mY2NmNTBwMQorICB9LAorICB7IC8vIEVudHJ5IDY2MworICAgIC0weDEuNTgzN2NjMjFkZGE0NGYzYWI3ZmQ5NmY1N2MwMTRlMTlwLTEsCisgICAgLTB4MS5mY2NmNTBwMQorICB9LAorICB7IC8vIEVudHJ5IDY2NAorICAgIC0weDEuZDlhMzlkZjIwNzEzOWY5OWViZTliNTZkYWZiMjM0YjdwLTIsCisgICAgMHgxLjBlZDE3MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjY1CisgICAgLTB4MS5kOWEzOWRmMjA3MTM5Zjk5ZWJlOWI1NmRhZmIyMzRiN3AtMiwKKyAgICAtMHgxLjBlZDE3MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjY2CisgICAgLTB4MS5jN2I5MTg5NjM4MTI4YmMwYWUzM2ZkZjI3MjljYzk4N3AtMywKKyAgICAweDEuMWYzYjM4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjcKKyAgICAtMHgxLmM3YjkxODk2MzgxMjhiYzBhZTMzZmRmMjcyOWNjOTg3cC0zLAorICAgIC0weDEuMWYzYjM4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjgKKyAgICAweDEuMDY5MDgyZTA0YjI1ZTlkMmVhOWUyNjNiNTBkMDhiMzRwLTUsCisgICAgMHgxLjJmYTVwMgorICB9LAorICB7IC8vIEVudHJ5IDY2OQorICAgIDB4MS4wNjkwODJlMDRiMjVlOWQyZWE5ZTI2M2I1MGQwOGIzNHAtNSwKKyAgICAtMHgxLjJmYTVwMgorICB9LAorICB7IC8vIEVudHJ5IDY3MAorICAgIDB4MS4yMzViMTg2MWYyMWFhODZkY2UyNTllNGU1YjRlZjM5NXAtMiwKKyAgICAweDEuNDAwZWM4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzEKKyAgICAweDEuMjM1YjE4NjFmMjFhYTg2ZGNlMjU5ZTRlNWI0ZWYzOTVwLTIsCisgICAgLTB4MS40MDBlYzhwMgorICB9LAorICB7IC8vIEVudHJ5IDY3MgorICAgIDB4MS4wOTZhYWY3MDM0MTQ4NTA2MmY0NDNjODBhOTBhM2JlM3AtMSwKKyAgICAweDEuNTA3ODkwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzMKKyAgICAweDEuMDk2YWFmNzAzNDE0ODUwNjJmNDQzYzgwYTkwYTNiZTNwLTEsCisgICAgLTB4MS41MDc4OTBwMgorICB9LAorICB7IC8vIEVudHJ5IDY3NAorICAgIDB4MS42ZmNiNmFlMDMxMDdiZTQ1OGQwNzM2MTM3MWVmYWJiNHAtMSwKKyAgICAweDEuNjBlMjU4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzUKKyAgICAweDEuNmZjYjZhZTAzMTA3YmU0NThkMDczNjEzNzFlZmFiYjRwLTEsCisgICAgLTB4MS42MGUyNThwMgorICB9LAorICB7IC8vIEVudHJ5IDY3NgorICAgIDB4MS5iZTFkNmQxMGQ1YzhjZWViOGJmOWFlYjdhOWY2OTBiOXAtMSwKKyAgICAweDEuNzE0YzIwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzcKKyAgICAweDEuYmUxZDZkMTBkNWM4Y2VlYjhiZjlhZWI3YTlmNjkwYjlwLTEsCisgICAgLTB4MS43MTRjMjBwMgorICB9LAorICB7IC8vIEVudHJ5IDY3OAorICAgIDB4MS5lZjQxM2M3MmQ5ODhiYjUzOTM3OTc1ZTRmZDRmY2M3YXAtMSwKKyAgICAweDEuODFiNWU4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzkKKyAgICAweDEuZWY0MTNjNzJkOTg4YmI1MzkzNzk3NWU0ZmQ0ZmNjN2FwLTEsCisgICAgLTB4MS44MWI1ZThwMgorICB9LAorICB7IC8vIEVudHJ5IDY4MAorICAgIDB4MS5mZjBmZDJjYjVhOTIyOGNmYTFlMDE2MDVkMDYyNmM4NHAtMSwKKyAgICAweDEuZWZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjgxCisgICAgMHgxLmZmMGZkMmNiNWE5MjI4Y2ZhMWUwMTYwNWQwNjI2Yzg0cC0xLAorICAgIC0weDEuZWZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjgyCisgICAgMHgxLmZmMGZkMmM5NmFkZmJhZDVmOTA0YTcxYjJkMjEwYTJhcC0xLAorICAgIDB4MS5mMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDY4MworICAgIDB4MS5mZjBmZDJjOTZhZGZiYWQ1ZjkwNGE3MWIyZDIxMGEyYXAtMSwKKyAgICAtMHgxLmYwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjg0CisgICAgMHgxLmZmMGZkMmM3N2IyZDRhZGQ0MDU2NmVjNWFhMjRmYzZlcC0xLAorICAgIDB4MS5mMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODUKKyAgICAweDEuZmYwZmQyYzc3YjJkNGFkZDQwNTY2ZWM1YWEyNGZjNmVwLTEsCisgICAgLTB4MS5mMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODYKKyAgICAweDEuZmMyMTAwNWQyMTZhODlkZTU1YjE5MjA5NmZjNmI3YmFwLTEsCisgICAgMHgxLmY3ZmZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDY4NworICAgIDB4MS5mYzIxMDA1ZDIxNmE4OWRlNTViMTkyMDk2ZmM2YjdiYXAtMSwKKyAgICAtMHgxLmY3ZmZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDY4OAorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNThhMjAxOTMzOTliM2JjMGRkMnAtMSwKKyAgICAweDEuZjhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODkKKyAgICAweDEuZmMyMTAwNTU0NjdmZTU4YTIwMTkzMzk5YjNiYzBkZDJwLTEsCisgICAgLTB4MS5mOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDY5MAorICAgIDB4MS5mYzIxMDA0ZDZiOTUzOTQ1NjY3ZjgwMGZmODFkZTBlYnAtMSwKKyAgICAweDEuZjgwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgNjkxCisgICAgMHgxLmZjMjEwMDRkNmI5NTM5NDU2NjdmODAwZmY4MWRlMGVicC0xLAorICAgIC0weDEuZjgwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgNjkyCisgICAgMHgxLmY5NDk4NGM2ZmRmMWJlNjE2ODUwOWZmMWUzNWY2MmRlcC0xLAorICAgIDB4MS40YmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTMKKyAgICAweDEuZjk0OTg0YzZmZGYxYmU2MTY4NTA5ZmYxZTM1ZjYyZGVwLTEsCisgICAgLTB4MS40YmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTQKKyAgICAweDEuZjk0OTg0YjI1NTJlMTk0MWVjNzY2YzZhODJlY2U0YTNwLTEsCisgICAgMHgxLjRjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjk1CisgICAgMHgxLmY5NDk4NGIyNTUyZTE5NDFlYzc2NmM2YTgyZWNlNGEzcC0xLAorICAgIC0weDEuNGNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTYKKyAgICAweDEuZjk0OTg0OWRhYzZhNTQ4ZGQ4NTExMzkwNDExMDYzMTZwLTEsCisgICAgMHgxLjRjMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDY5NworICAgIDB4MS5mOTQ5ODQ5ZGFjNmE1NDhkZDg1MTEzOTA0MTEwNjMxNnAtMSwKKyAgICAtMHgxLjRjMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDY5OAorICAgIDB4MS5lOTIxZGQ3MDU0ZWY1ZDRmNzI3ZDkzOGNlMTBhMDUzY3AtMSwKKyAgICAweDEuMzMzMzMycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjk5CisgICAgMHgxLmU5MjFkZDcwNTRlZjVkNGY3MjdkOTM4Y2UxMGEwNTNjcC0xLAorICAgIC0weDEuMzMzMzMycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzAwCisgICAgMHgxLmU5MjFkZDI0YWRiOTEyOWVmYzA1M2Y5YWNkNGQyNDQ0cC0xLAorICAgIDB4MS4zMzMzMzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDEKKyAgICAweDEuZTkyMWRkMjRhZGI5MTI5ZWZjMDUzZjlhY2Q0ZDI0NDRwLTEsCisgICAgLTB4MS4zMzMzMzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDIKKyAgICAweDEuZTkyMWRjZDkwNjgyNGRhNjBlNDNjMDNhNzc3NGIxNzFwLTEsCisgICAgMHgxLjMzMzMzNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcwMworICAgIDB4MS5lOTIxZGNkOTA2ODI0ZGE2MGU0M2MwM2E3Nzc0YjE3MXAtMSwKKyAgICAtMHgxLjMzMzMzNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcwNAorICAgIDB4MS44ZmVlZGM5Mjc2NGJmYmRjYjQxMzg5ZTgyMDYzZWQ2ZXAtMSwKKyAgICAweDEuNTk0MzE2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzA1CisgICAgMHgxLjhmZWVkYzkyNzY0YmZiZGNiNDEzODllODIwNjNlZDZlcC0xLAorICAgIC0weDEuNTk0MzE2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzA2CisgICAgMHgxLjhmZWVkYjUyYzc1MDA4N2M1Zjg3MjdlMDI3OWU1ZjY2cC0xLAorICAgIDB4MS41OTQzMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDcKKyAgICAweDEuOGZlZWRiNTJjNzUwMDg3YzVmODcyN2UwMjc5ZTVmNjZwLTEsCisgICAgLTB4MS41OTQzMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDgKKyAgICAweDEuOGZlZWRhMTMxODUyODUyZDJmYTdmZTg4NDdiMDU5NzNwLTEsCisgICAgMHgxLjU5NDMxYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwOQorICAgIDB4MS44ZmVlZGExMzE4NTI4NTJkMmZhN2ZlODg0N2IwNTk3M3AtMSwKKyAgICAtMHgxLjU5NDMxYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxMAorICAgIDB4MS42Yjg5OTExMjc4NTlmZDliNDNjYTFkMDhiOTJhYTQwMXAtMSwKKyAgICAweDEuOGZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzExCisgICAgMHgxLjZiODk5MTEyNzg1OWZkOWI0M2NhMWQwOGI5MmFhNDAxcC0xLAorICAgIC0weDEuOGZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzEyCisgICAgMHgxLjZiODk4ZmE5ZWZiNWQyMmI1OGYwZDk5ZTk2MzQ5MzFhcC0xLAorICAgIDB4MS45MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxMworICAgIDB4MS42Yjg5OGZhOWVmYjVkMjJiNThmMGQ5OWU5NjM0OTMxYXAtMSwKKyAgICAtMHgxLjkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE0CisgICAgMHgxLjZiODk4ZTQxNjcxMDNiMzFkZTZkYTY3ZWJmNWU5ZmU2cC0xLAorICAgIDB4MS45MDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTUKKyAgICAweDEuNmI4OThlNDE2NzEwM2IzMWRlNmRhNjdlYmY1ZTlmZTZwLTEsCisgICAgLTB4MS45MDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDcxNworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTgKKyAgICAweDEucDAsCisgICAgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNzE5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDcyMAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNzIxCisgICAgMHgxLmZmNjIxZTM4OTU2YTNiM2JlOTIwMjU2ZGRiNjAzNGNkcC0xLAorICAgIDB4MS45MjFmYjRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjIKKyAgICAweDEuZmY2MjFlMzg5NTZhM2IzYmU5MjAyNTZkZGI2MDM0Y2RwLTEsCisgICAgLTB4MS45MjFmYjRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjMKKyAgICAweDEuZmY2MjFlMzcwMzczZGM2ZjM5NjNkNDI4OTZlZGUwNzhwLTEsCisgICAgMHgxLjkyMWZiNnAtNQorICB9LAorICB7IC8vIEVudHJ5IDcyNAorICAgIDB4MS5mZjYyMWUzNzAzNzNkYzZmMzk2M2Q0Mjg5NmVkZTA3OHAtMSwKKyAgICAtMHgxLjkyMWZiNnAtNQorICB9LAorICB7IC8vIEVudHJ5IDcyNQorICAgIDB4MS5mZjYyMWUzNTcxN2Q3YmEzMjc4OTRiZGZkZTlmNDc4N3AtMSwKKyAgICAweDEuOTIxZmI4cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzI2CisgICAgMHgxLmZmNjIxZTM1NzE3ZDdiYTMyNzg5NGJkZmRlOWY0Nzg3cC0xLAorICAgIC0weDEuOTIxZmI4cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzI3CisgICAgMHgxLmZkODhkYTQxMGI2MWNkNTUyMjFkOWJlYjk5NmQ0ZDk5cC0xLAorICAgIDB4MS45MjFmYjRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjgKKyAgICAweDEuZmQ4OGRhNDEwYjYxY2Q1NTIyMWQ5YmViOTk2ZDRkOTlwLTEsCisgICAgLTB4MS45MjFmYjRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjkKKyAgICAweDEuZmQ4OGRhM2FjNTc4MWY1YTZmYzMyZTQwZWQ1MTIyYjBwLTEsCisgICAgMHgxLjkyMWZiNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDczMAorICAgIDB4MS5mZDg4ZGEzYWM1NzgxZjVhNmZjMzJlNDBlZDUxMjJiMHAtMSwKKyAgICAtMHgxLjkyMWZiNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDczMQorICAgIDB4MS5mZDg4ZGEzNDdmOGU2OTY5OTlmZmQ1ODA2MGJhMzU2OXAtMSwKKyAgICAweDEuOTIxZmI4cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzMyCisgICAgMHgxLmZkODhkYTM0N2Y4ZTY5Njk5OWZmZDU4MDYwYmEzNTY5cC0xLAorICAgIC0weDEuOTIxZmI4cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzMzCisgICAgMHgxLmY2Mjk3ZDBmNDY3MWRhNTgwZGZlY2RkNGRiMjlmNDczcC0xLAorICAgIDB4MS45MjFmYjRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzQKKyAgICAweDEuZjYyOTdkMGY0NjcxZGE1ODBkZmVjZGQ0ZGIyOWY0NzNwLTEsCisgICAgLTB4MS45MjFmYjRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzUKKyAgICAweDEuZjYyOTdjZjY0ZGI5YTIxZDk4YWIzOTQwZmM4YTg2ZjBwLTEsCisgICAgMHgxLjkyMWZiNnAtMworICB9LAorICB7IC8vIEVudHJ5IDczNgorICAgIDB4MS5mNjI5N2NmNjRkYjlhMjFkOThhYjM5NDBmYzhhODZmMHAtMSwKKyAgICAtMHgxLjkyMWZiNnAtMworICB9LAorICB7IC8vIEVudHJ5IDczNworICAgIDB4MS5mNjI5N2NkZDU1MDE0YTgwOGI4ODNmZDE4M2YzMThhY3AtMSwKKyAgICAweDEuOTIxZmI4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzM4CisgICAgMHgxLmY2Mjk3Y2RkNTUwMTRhODA4Yjg4M2ZkMTgzZjMxOGFjcC0xLAorICAgIC0weDEuOTIxZmI4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzM5CisgICAgMHgxLmQ5MDZiZDMxMzQ0MzAwN2RjYjBiZDRlM2Q2MzI4NGMwcC0xLAorICAgIDB4MS45MjFmYjRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDAKKyAgICAweDEuZDkwNmJkMzEzNDQzMDA3ZGNiMGJkNGUzZDYzMjg0YzBwLTEsCisgICAgLTB4MS45MjFmYjRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDEKKyAgICAweDEuZDkwNmJjY2YzY2I4NzU4NzRkYTNkYTRjMDExMDRiYWZwLTEsCisgICAgMHgxLjkyMWZiNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDc0MgorICAgIDB4MS5kOTA2YmNjZjNjYjg3NTg3NGRhM2RhNGMwMTEwNGJhZnAtMSwKKyAgICAtMHgxLjkyMWZiNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDc0MworICAgIDB4MS5kOTA2YmM2ZDQ1MmQ3NDRmMjEwODEwODYxMTAyZjJkYXAtMSwKKyAgICAweDEuOTIxZmI4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzQ0CisgICAgMHgxLmQ5MDZiYzZkNDUyZDc0NGYyMTA4MTA4NjExMDJmMmRhcC0xLAorICAgIC0weDEuOTIxZmI4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzQ1CisgICAgMHgxLjZhMDllNzRkM2QzZmJiOTRkOTQyNzRmMzc3NjlmNmVhcC0xLAorICAgIDB4MS45MjFmYjRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDYKKyAgICAweDEuNmEwOWU3NGQzZDNmYmI5NGQ5NDI3NGYzNzc2OWY2ZWFwLTEsCisgICAgLTB4MS45MjFmYjRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDcKKyAgICAweDEuNmEwOWU1ZTMzMzU5ODNlNWFjOTJlNzMzZTNmMjRiNDJwLTEsCisgICAgMHgxLjkyMWZiNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDc0OAorICAgIDB4MS42YTA5ZTVlMzMzNTk4M2U1YWM5MmU3MzNlM2YyNGI0MnAtMSwKKyAgICAtMHgxLjkyMWZiNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDc0OQorICAgIDB4MS42YTA5ZTQ3OTI5NzFlMjJjOWEwMDI2MWFlYWMwNzBkYXAtMSwKKyAgICAweDEuOTIxZmI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzUwCisgICAgMHgxLjZhMDllNDc5Mjk3MWUyMmM5YTAwMjYxYWVhYzA3MGRhcC0xLAorICAgIC0weDEuOTIxZmI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzUxCisgICAgMHgxLjQ0NDJkMTg0Njk4OTM2MTAyODFhMGY5YjBlOGQwZWVmcC0yNCwKKyAgICAweDEuOTIxZmI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTIKKyAgICAweDEuNDQ0MmQxODQ2OTg5MzYxMDI4MWEwZjliMGU4ZDBlZWZwLTI0LAorICAgIC0weDEuOTIxZmI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTMKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlY2M0Y2RlM2EzMWU3ZDVhMDI2MTQycC0yNSwKKyAgICAweDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTQKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlY2M0Y2RlM2EzMWU3ZDVhMDI2MTQycC0yNSwKKyAgICAtMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzU1CisgICAgLTB4MS41ZGRlOTczZGNiMzk4NWY0YThlNzZhMWZlY2EyOWUxZHAtMjMsCisgICAgMHgxLjkyMWZiOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzU2CisgICAgLTB4MS41ZGRlOTczZGNiMzk4NWY0YThlNzZhMWZlY2EyOWUxZHAtMjMsCisgICAgLTB4MS45MjFmYjhwMAorICB9LAorICB7IC8vIEVudHJ5IDc1NworICAgIC0weDEuZmZmZmZmZmZmZmY5OTUxYjMwZTA4NDczMmU2MGJiODVwLTEsCisgICAgMHgxLjkyMWZiNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzU4CisgICAgLTB4MS5mZmZmZmZmZmZmZjk5NTFiMzBlMDg0NzMyZTYwYmI4NXAtMSwKKyAgICAtMHgxLjkyMWZiNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzU5CisgICAgLTB4MS5mZmZmZmZmZmZmZmRkOTQ4NDkyNzFkMDhlZWNmNTRhMXAtMSwKKyAgICAweDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZGQ5NDg0OTI3MWQwOGVlY2Y1NGExcC0xLAorICAgIC0weDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjEKKyAgICAtMHgxLmZmZmZmZmZmZmZlMjFkNzU2MTZkYjVlYmM1NjQwNWY1cC0xLAorICAgIDB4MS45MjFmYjhwMQorICB9LAorICB7IC8vIEVudHJ5IDc2MgorICAgIC0weDEuZmZmZmZmZmZmZmUyMWQ3NTYxNmRiNWViYzU2NDA1ZjVwLTEsCisgICAgLTB4MS45MjFmYjhwMQorICB9LAorICB7IC8vIEVudHJ5IDc2MworICAgIDB4MS5mZmZmZmZmZmZmZTY1NDZjYzM4MjExZjVlOGRlZWI5N3AtMSwKKyAgICAweDEuOTIxZmI0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjQKKyAgICAweDEuZmZmZmZmZmZmZmU2NTQ2Y2MzODIxMWY1ZThkZWViOTdwLTEsCisgICAgLTB4MS45MjFmYjRwMgorICB9LAorICB7IC8vIEVudHJ5IDc2NQorICAgIDB4MS5mZmZmZmZmZmZmZjc2NTIxMjQ5Yzc0Mjg1YmY3M2MwN3AtMSwKKyAgICAweDEuOTIxZmI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjYKKyAgICAweDEuZmZmZmZmZmZmZmY3NjUyMTI0OWM3NDI4NWJmNzNjMDdwLTEsCisgICAgLTB4MS45MjFmYjZwMgorICB9LAorICB7IC8vIEVudHJ5IDc2NworICAgIDB4MS5mZmZmZmZmZmZmODg3NWQ1ODViNmRiMmMzMTcxMTAwNHAtMSwKKyAgICAweDEuOTIxZmI4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjgKKyAgICAweDEuZmZmZmZmZmZmZjg4NzVkNTg1YjZkYjJjMzE3MTEwMDRwLTEsCisgICAgLTB4MS45MjFmYjhwMgorICB9LAorICB7IC8vIEVudHJ5IDc2OQorICAgIDB4MS5mZmZmZmZmZmZmOTk1MWIzMGUwODRhNmE5OTNiODY3NXAtMSwKKyAgICAweDEuOTIxZmI0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzAKKyAgICAweDEuZmZmZmZmZmZmZjk5NTFiMzBlMDg0YTZhOTkzYjg2NzVwLTEsCisgICAgLTB4MS45MjFmYjRwMworICB9LAorICB7IC8vIEVudHJ5IDc3MQorICAgIDB4MS5mZmZmZmZmZmZmZGQ5NDg0OTI3MWQwZWI3YjdiODg0YnAtMSwKKyAgICAweDEuOTIxZmI2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzIKKyAgICAweDEuZmZmZmZmZmZmZmRkOTQ4NDkyNzFkMGViN2I3Yjg4NGJwLTEsCisgICAgLTB4MS45MjFmYjZwMworICB9LAorICB7IC8vIEVudHJ5IDc3MworICAgIDB4MS5mZmZmZmZmZmZlMjFkNzU2MTZkYmE0ODI4M2QzYzJmN3AtMSwKKyAgICAweDEuOTIxZmI4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzQKKyAgICAweDEuZmZmZmZmZmZmZTIxZDc1NjE2ZGJhNDgyODNkM2MyZjdwLTEsCisgICAgLTB4MS45MjFmYjhwMworICB9LAorICB7IC8vIEVudHJ5IDc3NQorICAgIDB4MS5mZmZmZmZmZmZlNjU0NmNjMzgyMTUyZDljMGViOWI0N3AtMSwKKyAgICAweDEuOTIxZmI0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzYKKyAgICAweDEuZmZmZmZmZmZmZTY1NDZjYzM4MjE1MmQ5YzBlYjliNDdwLTEsCisgICAgLTB4MS45MjFmYjRwNAorICB9LAorICB7IC8vIEVudHJ5IDc3NworICAgIDB4MS5mZmZmZmZmZmZmNzY1MjEyNDljNzQ4NGVhN2Q3YTQwOXAtMSwKKyAgICAweDEuOTIxZmI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzgKKyAgICAweDEuZmZmZmZmZmZmZjc2NTIxMjQ5Yzc0ODRlYTdkN2E0MDlwLTEsCisgICAgLTB4MS45MjFmYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDc3OQorICAgIDB4MS5mZmZmZmZmZmY4ODc1ZDU4NWI3MjBmMjVmMDQ3Mzk0M3AtMSwKKyAgICAweDEuOTIxZmI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODAKKyAgICAweDEuZmZmZmZmZmZmODg3NWQ1ODViNzIwZjI1ZjA0NzM5NDNwLTEsCisgICAgLTB4MS45MjFmYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDc4MQorICAgIDB4MS5mZmZmZmZmZmY5OTUxYjMwZTA4N2RlNWNjMzg2ODNiOHAtMSwKKyAgICAweDEuOTIxZmI0cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODIKKyAgICAweDEuZmZmZmZmZmZmOTk1MWIzMGUwODdkZTVjYzM4NjgzYjhwLTEsCisgICAgLTB4MS45MjFmYjRwNQorICB9LAorICB7IC8vIEVudHJ5IDc4MworICAgIDB4MS5mZmZmZmZmZmZkZDk0ODQ5MjcxZDZiNDYzZGY2YmRkZnAtMSwKKyAgICAweDEuOTIxZmI2cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODQKKyAgICAweDEuZmZmZmZmZmZmZGQ5NDg0OTI3MWQ2YjQ2M2RmNmJkZGZwLTEsCisgICAgLTB4MS45MjFmYjZwNQorICB9LAorICB7IC8vIEVudHJ5IDc4NQorICAgIDB4MS5mZmZmZmZmZmUyMWQ3NTYxNmUwMDBlNTVkMDlmODc1N3AtMSwKKyAgICAweDEuOTIxZmI4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODYKKyAgICAweDEuZmZmZmZmZmZlMjFkNzU2MTZlMDAwZTU1ZDA5Zjg3NTdwLTEsCisgICAgLTB4MS45MjFmYjhwNQorICB9LAorICB7IC8vIEVudHJ5IDc4NworICAgIDB4MS5mZmZmZmZmZmU2NTQ2Y2MzODI0OGE4Y2YwYjliNTc5NXAtMSwKKyAgICAweDEuOTIxZmI0cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODgKKyAgICAweDEuZmZmZmZmZmZlNjU0NmNjMzgyNDhhOGNmMGI5YjU3OTVwLTEsCisgICAgLTB4MS45MjFmYjRwNgorICB9LAorICB7IC8vIEVudHJ5IDc4OQorICAgIDB4MS5mZmZmZmZmZmY3NjUyMTI0OWM3YTRkZDJlMTVkZDFjNHAtMSwKKyAgICAweDEuOTIxZmI2cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTAKKyAgICAweDEuZmZmZmZmZmZmNzY1MjEyNDljN2E0ZGQyZTE1ZGQxYzRwLTEsCisgICAgLTB4MS45MjFmYjZwNgorICB9LAorICB7IC8vIEVudHJ5IDc5MQorICAgIDB4MS5mZmZmZmZmZjg4NzVkNTg1YmI3ZDU1MzgzYTliMzlhNHAtMSwKKyAgICAweDEuOTIxZmI4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTIKKyAgICAweDEuZmZmZmZmZmY4ODc1ZDU4NWJiN2Q1NTM4M2E5YjM5YTRwLTEsCisgICAgLTB4MS45MjFmYjhwNgorICB9LAorICB7IC8vIEVudHJ5IDc5MworICAgIDB4MS5mZmZmZmZmZjk5NTFiMzBlMGJiNTk4ZmMwNjc5YTZmN3AtMSwKKyAgICAweDEuOTIxZmI0cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTQKKyAgICAweDEuZmZmZmZmZmY5OTUxYjMwZTBiYjU5OGZjMDY3OWE2ZjdwLTEsCisgICAgLTB4MS45MjFmYjRwNworICB9LAorICB7IC8vIEVudHJ5IDc5NQorICAgIDB4MS5mZmZmZmZmZmRkOTQ4NDkyNzIzMzQyZWExZGE0OWJhY3AtMSwKKyAgICAweDEuOTIxZmI2cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTYKKyAgICAweDEuZmZmZmZmZmZkZDk0ODQ5MjcyMzM0MmVhMWRhNDliYWNwLTEsCisgICAgLTB4MS45MjFmYjZwNworICB9LAorICB7IC8vIEVudHJ5IDc5NworICAgIDB4MS5mZmZmZmZmZTIxZDc1NjE3MjVjNzEyZjA2OGZjOTcxOHAtMSwKKyAgICAweDEuOTIxZmI4cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTgKKyAgICAweDEuZmZmZmZmZmUyMWQ3NTYxNzI1YzcxMmYwNjhmYzk3MThwLTEsCisgICAgLTB4MS45MjFmYjhwNworICB9LAorICB7IC8vIEVudHJ5IDc5OQorICAgIC0weDEuNmEwOWRiM2JkYmEwODY4YTMxZTc2NjM1OWE4NDA2Y2FwLTEsCisgICAgMHgxLjJkOTdjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgODAwCisgICAgLTB4MS42YTA5ZGIzYmRiYTA4NjhhMzFlNzY2MzU5YTg0MDZjYXAtMSwKKyAgICAtMHgxLjJkOTdjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgODAxCisgICAgLTB4MS42YTA5ZTBlNDAzNWI4NjY5NGMxNjUzNGU0MmZiZTExMXAtMSwKKyAgICAweDEuMmQ5N2M2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDIKKyAgICAtMHgxLjZhMDllMGU0MDM1Yjg2Njk0YzE2NTM0ZTQyZmJlMTExcC0xLAorICAgIC0weDEuMmQ5N2M2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDMKKyAgICAtMHgxLjZhMDllNjhjMmFmZmU1YWE1ODA1MGFjY2IwNWM2MjQ4cC0xLAorICAgIDB4MS4yZDk3YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDgwNAorICAgIC0weDEuNmEwOWU2OGMyYWZmZTVhYTU4MDUwYWNjYjA1YzYyNDhwLTEsCisgICAgLTB4MS4yZDk3YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDgwNQorICAgIC0weDEuNmEwOWVkYjY3NzA2ZTA5OTcxMjFkMTJhMGM4N2JhZThwLTEsCisgICAgMHgxLmY2YTdhMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODA2CisgICAgLTB4MS42YTA5ZWRiNjc3MDZlMDk5NzEyMWQxMmEwYzg3YmFlOHAtMSwKKyAgICAtMHgxLmY2YTdhMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODA3CisgICAgLTB4MS42YTA5ZTgwZTRmN2YyYTg4ZGViZWQzN2ZhYTkzZThjOHAtMSwKKyAgICAweDEuZjZhN2EycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDgKKyAgICAtMHgxLjZhMDllODBlNGY3ZjJhODhkZWJlZDM3ZmFhOTNlOGM4cC0xLAorICAgIC0weDEuZjZhN2EycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDkKKyAgICAtMHgxLjZhMDllMjY2MjdlMGQzZDljYjc2ZGUwMGNiOTAyYmVjcC0xLAorICAgIDB4MS5mNmE3YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDgxMAorICAgIC0weDEuNmEwOWUyNjYyN2UwZDNkOWNiNzZkZTAwY2I5MDJiZWNwLTEsCisgICAgLTB4MS5mNmE3YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDgxMQorICAgIC0weDEuZjk5OTBlOTFhNzQxNjhiOTBiZDY4ZGZhYjc3NWM5Y2FwLTIxLAorICAgIDB4MS4yZDk3YzRwMgorICB9LAorICB7IC8vIEVudHJ5IDgxMgorICAgIC0weDEuZjk5OTBlOTFhNzQxNjhiOTBiZDY4ZGZhYjc3NWM5Y2FwLTIxLAorICAgIC0weDEuMmQ5N2M0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTMKKyAgICAtMHgxLmYzMzIxZDIzNGYxMzYzZDE4N2RkMDk1MjhiNjdiMjE1cC0yMiwKKyAgICAweDEuMmQ5N2M2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTQKKyAgICAtMHgxLmYzMzIxZDIzNGYxMzYzZDE4N2RkMDk1MjhiNjdiMjE1cC0yMiwKKyAgICAtMHgxLjJkOTdjNnAyCisgIH0sCisgIHsgLy8gRW50cnkgODE1CisgICAgMHgxLjk5YmM1Yjk2MWIxYWNhY2ExOGQ5NzFmNjhhZTk5ZGE5cC0yNywKKyAgICAweDEuMmQ5N2M4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTYKKyAgICAweDEuOTliYzViOTYxYjFhY2FjYTE4ZDk3MWY2OGFlOTlkYTlwLTI3LAorICAgIC0weDEuMmQ5N2M4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTcKKyAgICAweDEuNmEwOWQ3YTZiNTcyYzJjODI0ZDEzN2QwNDA1ZDgxODhwLTEsCisgICAgMHgxLjVmZGJiY3AyCisgIH0sCisgIHsgLy8gRW50cnkgODE4CisgICAgMHgxLjZhMDlkN2E2YjU3MmMyYzgyNGQxMzdkMDQwNWQ4MTg4cC0xLAorICAgIC0weDEuNWZkYmJjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTkKKyAgICAweDEuNmEwOWUyZjcwNGVlY2IxODFlM2Y1ZWNlOWJlMGNhMGZwLTEsCisgICAgMHgxLjVmZGJiZXAyCisgIH0sCisgIHsgLy8gRW50cnkgODIwCisgICAgMHgxLjZhMDllMmY3MDRlZWNiMTgxZTNmNWVjZTliZTBjYTBmcC0xLAorICAgIC0weDEuNWZkYmJlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjEKKyAgICAweDEuNmEwOWVlNDc1NDEwNTBlZjU5ZWM0YmZjZTkzNWNjMWFwLTEsCisgICAgMHgxLjVmZGJjMHAyCisgIH0sCisgIHsgLy8gRW50cnkgODIyCisgICAgMHgxLjZhMDllZTQ3NTQxMDUwZWY1OWVjNGJmY2U5MzVjYzFhcC0xLAorICAgIC0weDEuNWZkYmMwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjMKKyAgICAweDEuNmEwOWZjOWJlYmFiYTIwOGM4MWVjMGIxY2QzMDc1ODlwLTEsCisgICAgMHgxLmM0NjNhOHAyCisgIH0sCisgIHsgLy8gRW50cnkgODI0CisgICAgMHgxLjZhMDlmYzliZWJhYmEyMDhjODFlYzBiMWNkMzA3NTg5cC0xLAorICAgIC0weDEuYzQ2M2E4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjUKKyAgICAweDEuNmEwOWYxNGI5Y2ZjYzBmNjIyN2QzODZjYzM3MDRhMDVwLTEsCisgICAgMHgxLmM0NjNhYXAyCisgIH0sCisgIHsgLy8gRW50cnkgODI2CisgICAgMHgxLjZhMDlmMTRiOWNmY2MwZjYyMjdkMzg2Y2MzNzA0YTA1cC0xLAorICAgIC0weDEuYzQ2M2FhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjcKKyAgICAweDEuNmEwOWU1ZmI0ZGYzNWQ2NzI5ZjQ3MmRhMzQxM2U0MDRwLTEsCisgICAgMHgxLmM0NjNhY3AyCisgIH0sCisgIHsgLy8gRW50cnkgODI4CisgICAgMHgxLjZhMDllNWZiNGRmMzVkNjcyOWY0NzJkYTM0MTNlNDA0cC0xLAorICAgIC0weDEuYzQ2M2FjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjkKKyAgICAweDEuNGFhOWMyZjJjMWRlZmI4NzI4ZjBkMmRhMTIxN2FhZTFwLTIxLAorICAgIDB4MS5mNmE3YTBwMgorICB9LAorICB7IC8vIEVudHJ5IDgzMAorICAgIDB4MS40YWE5YzJmMmMxZGVmYjg3MjhmMGQyZGExMjE3YWFlMXAtMjEsCisgICAgLTB4MS5mNmE3YTBwMgorICB9LAorICB7IC8vIEVudHJ5IDgzMQorICAgIDB4MS4yYWE3MGJjYjA3ZDZkMGYzNmI3NzdjYjM4MGE4NDVkOXAtMjMsCisgICAgMHgxLmY2YTdhMnAyCisgIH0sCisgIHsgLy8gRW50cnkgODMyCisgICAgMHgxLjJhYTcwYmNiMDdkNmQwZjM2Yjc3N2NiMzgwYTg0NWQ5cC0yMywKKyAgICAtMHgxLmY2YTdhMnAyCisgIH0sCisgIHsgLy8gRW50cnkgODMzCisgICAgLTB4MS42YWFjN2ExYTdjMGM3YWZjNWZjYjIzMTNhN2VjYTIyOXAtMjIsCisgICAgMHgxLmY2YTdhNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODM0CisgICAgLTB4MS42YWFjN2ExYTdjMGM3YWZjNWZjYjIzMTNhN2VjYTIyOXAtMjIsCisgICAgLTB4MS5mNmE3YTRwMgorICB9LAorICB7IC8vIEVudHJ5IDgzNQorICAgIC0weDEuNmEwOWM4YzEzZjQ4YjdhYWQ4NTFmOWQ2NDc0YmNiMzFwLTEsCisgICAgMHgxLjE0NzVjYXAzCisgIH0sCisgIHsgLy8gRW50cnkgODM2CisgICAgLTB4MS42YTA5YzhjMTNmNDhiN2FhZDg1MWY5ZDY0NzRiY2IzMXAtMSwKKyAgICAtMHgxLjE0NzVjYXAzCisgIH0sCisgIHsgLy8gRW50cnkgODM3CisgICAgLTB4MS42YTA5ZGY2MWRlZDQ5ZDFlZTRmY2E0YmE2MTQwZDE3OXAtMSwKKyAgICAweDEuMTQ3NWNjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzgKKyAgICAtMHgxLjZhMDlkZjYxZGVkNDlkMWVlNGZjYTRiYTYxNDBkMTc5cC0xLAorICAgIC0weDEuMTQ3NWNjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzkKKyAgICAtMHgxLjZhMDlmNjAyN2NmNjc4YjM4ZmM4OTkyY2Q5OTkwMzAycC0xLAorICAgIDB4MS4xNDc1Y2VwMworICB9LAorICB7IC8vIEVudHJ5IDg0MAorICAgIC0weDEuNmEwOWY2MDI3Y2Y2NzhiMzhmYzg5OTJjZDk5OTAzMDJwLTEsCisgICAgLTB4MS4xNDc1Y2VwMworICB9LAorICB7IC8vIEVudHJ5IDg0MQorICAgIC0weDEuZmZmZmZmZmZmYzE5NzJjOTAyZWYzMWMzN2NiNTQ4MTdwLTEsCisgICAgMHgxLjJkOTdjNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODQyCisgICAgLTB4MS5mZmZmZmZmZmZjMTk3MmM5MDJlZjMxYzM3Y2I1NDgxN3AtMSwKKyAgICAtMHgxLjJkOTdjNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODQzCisgICAgLTB4MS5mZmZmZmZmZmZmMGNhNGU2MjYzZDI3YTAyMDQzODlkZnAtMSwKKyAgICAweDEuMmQ5N2M2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDQKKyAgICAtMHgxLmZmZmZmZmZmZmYwY2E0ZTYyNjNkMjdhMDIwNDM4OWRmcC0xLAorICAgIC0weDEuMmQ5N2M2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmQ3MDM0OThjM2I4Mjg4NTYzOTE1cC0xLAorICAgIDB4MS4yZDk3YzhwMworICB9LAorICB7IC8vIEVudHJ5IDg0NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZDcwMzQ5OGMzYjgyODg1NjM5MTVwLTEsCisgICAgLTB4MS4yZDk3YzhwMworICB9LAorICB7IC8vIEVudHJ5IDg0NworICAgIC0weDEuNmEwYTBiODE1ZmIzN2IyZDAxNTUxZTA3Y2IzMDA5ZDFwLTEsCisgICAgMHgxLjQ2YjljMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODQ4CisgICAgLTB4MS42YTBhMGI4MTVmYjM3YjJkMDE1NTFlMDdjYjMwMDlkMXAtMSwKKyAgICAtMHgxLjQ2YjljMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODQ5CisgICAgLTB4MS42YTA5ZjRlMGMyZTk4ZGViNzg2NDJiNjAzMmE3M2Q0NnAtMSwKKyAgICAweDEuNDZiOWMycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTAKKyAgICAtMHgxLjZhMDlmNGUwYzJlOThkZWI3ODY0MmI2MDMyYTczZDQ2cC0xLAorICAgIC0weDEuNDZiOWMycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTEKKyAgICAtMHgxLjZhMDlkZTQwMjRiNTk2YjUwZWIwNmQ1NjJkYjhjNzc3cC0xLAorICAgIDB4MS40NmI5YzRwMworICB9LAorICB7IC8vIEVudHJ5IDg1MgorICAgIC0weDEuNmEwOWRlNDAyNGI1OTZiNTBlYjA2ZDU2MmRiOGM3NzdwLTEsCisgICAgLTB4MS40NmI5YzRwMworICB9LAorICB7IC8vIEVudHJ5IDg1MworICAgIC0weDEuNGRkZDNiYTllZGNkODk4Yjk5NDZmZGQyMGFmMjJhNjhwLTIwLAorICAgIDB4MS41ZmRiYmNwMworICB9LAorICB7IC8vIEVudHJ5IDg1NAorICAgIC0weDEuNGRkZDNiYTllZGNkODk4Yjk5NDZmZGQyMGFmMjJhNjhwLTIwLAorICAgIC0weDEuNWZkYmJjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTUKKyAgICAtMHgxLjM3NzRlZWE3YjhhYmU4ZmE4YzM4MDE0MmI5N2FmNGI2cC0yMiwKKyAgICAweDEuNWZkYmJlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTYKKyAgICAtMHgxLjM3NzRlZWE3YjhhYmU4ZmE4YzM4MDE0MmI5N2FmNGI2cC0yMiwKKyAgICAtMHgxLjVmZGJiZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODU3CisgICAgMHgxLjY0NDU4OGFjMjM4YWU0OTNmYTMyNDM1YmE1MTMyOWJmcC0yMSwKKyAgICAweDEuNWZkYmMwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTgKKyAgICAweDEuNjQ0NTg4YWMyMzhhZTQ5M2ZhMzI0MzViYTUxMzI5YmZwLTIxLAorICAgIC0weDEuNWZkYmMwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTkKKyAgICAweDEuNmEwOWI5ZGJjODgxYzQ1OGU3NDc5MDhjYWYyYWE1ZTFwLTEsCisgICAgMHgxLjc4ZmRiNnAzCisgIH0sCisgIHsgLy8gRW50cnkgODYwCisgICAgMHgxLjZhMDliOWRiYzg4MWM0NThlNzQ3OTA4Y2FmMmFhNWUxcC0xLAorICAgIC0weDEuNzhmZGI2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjEKKyAgICAweDEuNmEwOWQwN2M2OGZjMDEwZmZjZmQzYjE5ZjFlZTRmNDRwLTEsCisgICAgMHgxLjc4ZmRiOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODYyCisgICAgMHgxLjZhMDlkMDdjNjhmYzAxMGZmY2ZkM2IxOWYxZWU0ZjQ0cC0xLAorICAgIC0weDEuNzhmZGI4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjMKKyAgICAweDEuNmEwOWU3MWQwODBjMzNmNjk2NGEwN2QxYTBiZjU5ODBwLTEsCisgICAgMHgxLjc4ZmRiYXAzCisgIH0sCisgIHsgLy8gRW50cnkgODY0CisgICAgMHgxLjZhMDllNzFkMDgwYzMzZjY5NjRhMDdkMWEwYmY1OTgwcC0xLAorICAgIC0weDEuNzhmZGJhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjUKKyAgICAweDEuNmEwYTAzYzYzNzQyZDYyODAyZDE2M2Q1Y2ZiM2I3ZDVwLTEsCisgICAgMHgxLmFiNDFhZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODY2CisgICAgMHgxLjZhMGEwM2M2Mzc0MmQ2MjgwMmQxNjNkNWNmYjNiN2Q1cC0xLAorICAgIC0weDEuYWI0MWFlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjcKKyAgICAweDEuNmEwOWVkMjU5OWZkMzY0Yzk3NjYwY2NhNjY1MmMwYTNwLTEsCisgICAgMHgxLmFiNDFiMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODY4CisgICAgMHgxLjZhMDllZDI1OTlmZDM2NGM5NzY2MGNjYTY2NTJjMGEzcC0xLAorICAgIC0weDEuYWI0MWIwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjkKKyAgICAweDEuNmEwOWQ2ODRmYjRkOGM4NDA2NjBkNmI0MmVjODMwMzlwLTEsCisgICAgMHgxLmFiNDFiMnAzCisgIH0sCisgIHsgLy8gRW50cnkgODcwCisgICAgMHgxLjZhMDlkNjg0ZmI0ZDhjODQwNjYwZDZiNDJlYzgzMDM5cC0xLAorICAgIC0weDEuYWI0MWIycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzEKKyAgICAweDEuZjY2NTk1ZGE3YTFhZTMwOGQyNmExOGRlNGMyZWQzYTNwLTIwLAorICAgIDB4MS5jNDYzYThwMworICB9LAorICB7IC8vIEVudHJ5IDg3MgorICAgIDB4MS5mNjY1OTVkYTdhMWFlMzA4ZDI2YTE4ZGU0YzJlZDNhM3AtMjAsCisgICAgLTB4MS5jNDYzYThwMworICB9LAorICB7IC8vIEVudHJ5IDg3MworICAgIDB4MS5lY2NiMmJiNGY2NmVhODYxMjQxZmEwOWNhOWQ4YTAzNHAtMjEsCisgICAgMHgxLmM0NjNhYXAzCisgIH0sCisgIHsgLy8gRW50cnkgODc0CisgICAgMHgxLmVjY2IyYmI0ZjY2ZWE4NjEyNDFmYTA5Y2E5ZDhhMDM0cC0yMSwKKyAgICAtMHgxLmM0NjNhYXAzCisgIH0sCisgIHsgLy8gRW50cnkgODc1CisgICAgLTB4MS4zMzRkNDRiMDk0NTQwN2IxMThiMzYxYWI3ODE3MWY2N3AtMjUsCisgICAgMHgxLmM0NjNhY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODc2CisgICAgLTB4MS4zMzRkNDRiMDk0NTQwN2IxMThiMzYxYWI3ODE3MWY2N3AtMjUsCisgICAgLTB4MS5jNDYzYWNwMworICB9LAorICB7IC8vIEVudHJ5IDg3NworICAgIC0weDEuNmEwOWMxOTZmMjg2N2NjOTE2YWUyYjdlNmM5ZDk5YzFwLTEsCisgICAgMHgxLmRkODVhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODc4CisgICAgLTB4MS42YTA5YzE5NmYyODY3Y2M5MTZhZTJiN2U2YzlkOTljMXAtMSwKKyAgICAtMHgxLmRkODVhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODc5CisgICAgLTB4MS42YTA5ZDgzNzkyODUwNmY3Y2ZmNzZmMDk0YjRlMDM3N3AtMSwKKyAgICAweDEuZGQ4NWE2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODAKKyAgICAtMHgxLjZhMDlkODM3OTI4NTA2ZjdjZmY3NmYwOTRiNGUwMzc3cC0xLAorICAgIC0weDEuZGQ4NWE2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODEKKyAgICAtMHgxLjZhMDllZWQ4MzExOTg3NGU1MWFlNGJiOGFlZGRjMWYycC0xLAorICAgIDB4MS5kZDg1YThwMworICB9LAorICB7IC8vIEVudHJ5IDg4MgorICAgIC0weDEuNmEwOWVlZDgzMTE5ODc0ZTUxYWU0YmI4YWVkZGMxZjJwLTEsCisgICAgLTB4MS5kZDg1YThwMworICB9LAorICB7IC8vIEVudHJ5IDg4MworICAgIC0weDEuZmZmZmZmZmZmZTU0ZTVlNGQzMmIzNDUzMTY2MDYwYjNwLTEsCisgICAgMHgxLmY2YTdhMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODg0CisgICAgLTB4MS5mZmZmZmZmZmZlNTRlNWU0ZDMyYjM0NTMxNjYwNjBiM3AtMSwKKyAgICAtMHgxLmY2YTdhMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODg1CisgICAgLTB4MS5mZmZmZmZmZmZmZWEzOTZhYjhhZWU1MDkzOTJjNzU1ZHAtMSwKKyAgICAweDEuZjZhN2EycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODYKKyAgICAtMHgxLmZmZmZmZmZmZmZlYTM5NmFiOGFlZTUwOTM5MmM3NTVkcC0xLAorICAgIC0weDEuZjZhN2EycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODcKKyAgICAtMHgxLmZmZmZmZmZmZmY3ZjhjZjA5ZTMyZDYzMDliZWE4NWNhcC0xLAorICAgIDB4MS5mNmE3YTRwMworICB9LAorICB7IC8vIEVudHJ5IDg4OAorICAgIC0weDEuZmZmZmZmZmZmZjdmOGNmMDllMzJkNjMwOWJlYTg1Y2FwLTEsCisgICAgLTB4MS5mNmE3YTRwMworICB9LAorICB7IC8vIEVudHJ5IDg4OQorICAgIC0weDEuNmEwYTI5NGM0NWVjNzQ3YTQ3NzExYTQ5OTRkMmM1ZTRwLTEsCisgICAgMHgxLjA3ZTRjY3A0CisgIH0sCisgIHsgLy8gRW50cnkgODkwCisgICAgLTB4MS42YTBhMjk0YzQ1ZWM3NDdhNDc3MTFhNDk5NGQyYzVlNHAtMSwKKyAgICAtMHgxLjA3ZTRjY3A0CisgIH0sCisgIHsgLy8gRW50cnkgODkxCisgICAgLTB4MS42YTA5ZmMwYjBlYTdlZDlmYjVkZDUwYTBjOGFmMTljYnAtMSwKKyAgICAweDEuMDdlNGNlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTIKKyAgICAtMHgxLjZhMDlmYzBiMGVhN2VkOWZiNWRkNTBhMGM4YWYxOWNicC0xLAorICAgIC0weDEuMDdlNGNlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTMKKyAgICAtMHgxLjZhMDljZWM5ZDFiYjNlZDRmODEwYzlmOTc4NmQ2MTBlcC0xLAorICAgIDB4MS4wN2U0ZDBwNAorICB9LAorICB7IC8vIEVudHJ5IDg5NAorICAgIC0weDEuNmEwOWNlYzlkMWJiM2VkNGY4MTBjOWY5Nzg2ZDYxMGVwLTEsCisgICAgLTB4MS4wN2U0ZDBwNAorICB9LAorICB7IC8vIEVudHJ5IDg5NQorICAgIC0weDEuNGY3NmY4MDU4MmM3M2ZjMGNjMDkwM2VkOGNhN2Q2YjNwLTE5LAorICAgIDB4MS4xNDc1Y2FwNAorICB9LAorICB7IC8vIEVudHJ5IDg5NgorICAgIC0weDEuNGY3NmY4MDU4MmM3M2ZjMGNjMDkwM2VkOGNhN2Q2YjNwLTE5LAorICAgIC0weDEuMTQ3NWNhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTcKKyAgICAtMHgxLjNkZGJlMDE2MTEwOGI2OTBlZWQ3MGE3ZjU5ZGU3NTFjcC0yMSwKKyAgICAweDEuMTQ3NWNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTgKKyAgICAtMHgxLjNkZGJlMDE2MTEwOGI2OTBlZWQ3MGE3ZjU5ZGU3NTFjcC0yMSwKKyAgICAtMHgxLjE0NzVjY3A0CisgIH0sCisgIHsgLy8gRW50cnkgODk5CisgICAgMHgxLjYxMTIwZmY0ZjcwMTgwYjBkNTVjM2FlMGY2OTU4NWNhcC0yMCwKKyAgICAweDEuMTQ3NWNlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDAKKyAgICAweDEuNjExMjBmZjRmNzAxODBiMGQ1NWMzYWUwZjY5NTg1Y2FwLTIwLAorICAgIC0weDEuMTQ3NWNlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDEKKyAgICAweDEuNmEwOWIyYjE3Yjc0MTA1MGE2Y2ZkNjRiODFjNzY0ODVwLTEsCisgICAgMHgxLjIxMDZjOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTAyCisgICAgMHgxLjZhMDliMmIxN2I3NDEwNTBhNmNmZDY0YjgxYzc2NDg1cC0xLAorICAgIC0weDEuMjEwNmM4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDMKKyAgICAweDEuNmEwOWRmZjJiYmUzYzk2MTZhMzU3NmM1NWU3NzMyMDdwLTEsCisgICAgMHgxLjIxMDZjYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTA0CisgICAgMHgxLjZhMDlkZmYyYmJlM2M5NjE2YTM1NzZjNTVlNzczMjA3cC0xLAorICAgIC0weDEuMjEwNmNhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDUKKyAgICAweDEuNmEwYTBkMzNmNmFiNWFmMjYyYWQ2YWQxOGFjMWNlOWZwLTEsCisgICAgMHgxLjIxMDZjY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTA2CisgICAgMHgxLjZhMGEwZDMzZjZhYjVhZjI2MmFkNmFkMThhYzFjZTlmcC0xLAorICAgIC0weDEuMjEwNmNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDcKKyAgICAweDEuZmZmZmZmZmZmMDY1Y2IyNDBiY2JmZGZmNDk3N2RkZjhwLTEsCisgICAgMHgxLjJkOTdjNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTA4CisgICAgMHgxLmZmZmZmZmZmZjA2NWNiMjQwYmNiZmRmZjQ5NzdkZGY4cC0xLAorICAgIC0weDEuMmQ5N2M0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDkKKyAgICAweDEuZmZmZmZmZmZmYzMyOTM5ODk4ZjU4NWQ2OTQ4Y2YyZDFwLTEsCisgICAgMHgxLjJkOTdjNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTEwCisgICAgMHgxLmZmZmZmZmZmZmMzMjkzOTg5OGY1ODVkNjk0OGNmMmQxcC0xLAorICAgIC0weDEuMmQ5N2M2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTEKKyAgICAweDEuZmZmZmZmZmZmZmZmNWMwZDI2MzBlZTBhMjdlOGQ2ZDFwLTEsCisgICAgMHgxLjJkOTdjOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTEyCisgICAgMHgxLmZmZmZmZmZmZmZmZjVjMGQyNjMwZWUwYTI3ZThkNmQxcC0xLAorICAgIC0weDEuMmQ5N2M4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTMKKyAgICAweDEuNmEwYTM4MzFiODFkOTQ5NjZhZDhkZjRkMzc4ODI0ZjlwLTEsCisgICAgMHgxLjNhMjhjMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTE0CisgICAgMHgxLjZhMGEzODMxYjgxZDk0OTY2YWQ4ZGY0ZDM3ODgyNGY5cC0xLAorICAgIC0weDEuM2EyOGMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTUKKyAgICAweDEuNmEwYTBhZjA4MmI1YmNhN2Y1NTY5ZjRkYTY4ODNmNjRwLTEsCisgICAgMHgxLjNhMjhjNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTE2CisgICAgMHgxLjZhMGEwYWYwODJiNWJjYTdmNTU2OWY0ZGE2ODgzZjY0cC0xLAorICAgIC0weDEuM2EyOGM0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTcKKyAgICAweDEuNmEwOWRkYWY0N2E1YmM4ZGJkY2I2YjEzODQ0OTAyYWVwLTEsCisgICAgMHgxLjNhMjhjNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTE4CisgICAgMHgxLjZhMDlkZGFmNDdhNWJjOGRiZGNiNmIxMzg0NDkwMmFlcC0xLAorICAgIC0weDEuM2EyOGM2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTkKKyAgICAweDEuYTNiYjI1MWRjN2VmYWExZTIxMzdiYjM3ZWQ2NjU0ZGJwLTE5LAorICAgIDB4MS40NmI5YzBwNAorICB9LAorICB7IC8vIEVudHJ5IDkyMAorICAgIDB4MS5hM2JiMjUxZGM3ZWZhYTFlMjEzN2JiMzdlZDY2NTRkYnAtMTksCisgICAgLTB4MS40NmI5YzBwNAorICB9LAorICB7IC8vIEVudHJ5IDkyMQorICAgIDB4MS40Nzc2NGEzYjk1NjY3NThlNWJhYTJlMzAyOWYxYWJiYXAtMjAsCisgICAgMHgxLjQ2YjljMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIyCisgICAgMHgxLjQ3NzY0YTNiOTU2Njc1OGU1YmFhMmUzMDI5ZjFhYmJhcC0yMCwKKyAgICAtMHgxLjQ2YjljMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIzCisgICAgLTB4MS43MTEzNmI4OGQ0NjA4NDkwZjJkZGZlOTAxMDExMTJhZXAtMjEsCisgICAgMHgxLjQ2YjljNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTI0CisgICAgLTB4MS43MTEzNmI4OGQ0NjA4NDkwZjJkZGZlOTAxMDExMTJhZXAtMjEsCisgICAgLTB4MS40NmI5YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDkyNQorICAgIC0weDEuNmEwOWEzY2MwM2M0YmJhZDIyMjJkZmU1YmUzMTc1NjVwLTEsCisgICAgMHgxLjUzNGFiZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTI2CisgICAgLTB4MS42YTA5YTNjYzAzYzRiYmFkMjIyMmRmZTViZTMxNzU2NXAtMSwKKyAgICAtMHgxLjUzNGFiZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTI3CisgICAgLTB4MS42YTA5ZDEwZDQ2MTEyMzM1ZDBlNDNkNzM4Mzg3ZGU4Y3AtMSwKKyAgICAweDEuNTM0YWMwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjgKKyAgICAtMHgxLjZhMDlkMTBkNDYxMTIzMzVkMGU0M2Q3MzgzODdkZThjcC0xLAorICAgIC0weDEuNTM0YWMwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjkKKyAgICAtMHgxLjZhMDlmZTRlODJiNTYzN2E0YThmMzkyYzMzMDFiZTk0cC0xLAorICAgIDB4MS41MzRhYzJwNAorICB9LAorICB7IC8vIEVudHJ5IDkzMAorICAgIC0weDEuNmEwOWZlNGU4MmI1NjM3YTRhOGYzOTJjMzMwMWJlOTRwLTEsCisgICAgLTB4MS41MzRhYzJwNAorICB9LAorICB7IC8vIEVudHJ5IDkzMQorICAgIC0weDEuZmZmZmZmZmZmOTMyNWFjZTVmNjgyYmJiOGIxMjJhMDlwLTEsCisgICAgMHgxLjVmZGJiY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTMyCisgICAgLTB4MS5mZmZmZmZmZmY5MzI1YWNlNWY2ODJiYmI4YjEyMmEwOXAtMSwKKyAgICAtMHgxLjVmZGJiY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTMzCisgICAgLTB4MS5mZmZmZmZmZmZmYTE0NGFiYWVkNWI0YWFiODgwNjM1ZHAtMSwKKyAgICAweDEuNWZkYmJlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzQKKyAgICAtMHgxLmZmZmZmZmZmZmZhMTQ0YWJhZWQ1YjRhYWI4ODA2MzVkcC0xLAorICAgIC0weDEuNWZkYmJlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzUKKyAgICAtMHgxLmZmZmZmZmZmZmUxMDJlODhmZTQ3NjMzMWUxZGRlZmFmcC0xLAorICAgIDB4MS41ZmRiYzBwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNgorICAgIC0weDEuZmZmZmZmZmZmZTEwMmU4OGZlNDc2MzMxZTFkZGVmYWZwLTEsCisgICAgLTB4MS41ZmRiYzBwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNworICAgIC0weDEuNmEwYTE5ZDVmNjI2YTM1ZWUxMTJhMzQ2MzhlMDc4MDhwLTEsCisgICAgMHgxLjZjNmNiYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTM4CisgICAgLTB4MS42YTBhMTlkNWY2MjZhMzVlZTExMmEzNDYzOGUwNzgwOHAtMSwKKyAgICAtMHgxLjZjNmNiYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTM5CisgICAgLTB4MS42YTA5ZWM5NGJjZjM1MjA4Y2NkMDMwNjg0ZDVkZGQ5Y3AtMSwKKyAgICAweDEuNmM2Y2JjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDAKKyAgICAtMHgxLjZhMDllYzk0YmNmMzUyMDhjY2QwMzA2ODRkNWRkZDljcC0xLAorICAgIC0weDEuNmM2Y2JjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDEKKyAgICAtMHgxLjZhMDliZjUzN2UxN2Q5MDA2NTliZDJmYTI0YzNhOGM4cC0xLAorICAgIDB4MS42YzZjYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDk0MgorICAgIC0weDEuNmEwOWJmNTM3ZTE3ZDkwMDY1OWJkMmZhMjRjM2E4YzhwLTEsCisgICAgLTB4MS42YzZjYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDk0MworICAgIC0weDEuZjdmZjUyMzYwYzYyMmIzZjk0ZDljNzI1MGJmYWQ4ZDRwLTE5LAorICAgIDB4MS43OGZkYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDk0NAorICAgIC0weDEuZjdmZjUyMzYwYzYyMmIzZjk0ZDljNzI1MGJmYWQ4ZDRwLTE5LAorICAgIC0weDEuNzhmZGI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDUKKyAgICAtMHgxLmVmZmVhNDZjMjFiYWEzZGE3YzI2NmM5NTNhMDEzNTk4cC0yMCwKKyAgICAweDEuNzhmZGI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDYKKyAgICAtMHgxLmVmZmVhNDZjMjFiYWEzZGE3YzI2NmM5NTNhMDEzNTk4cC0yMCwKKyAgICAtMHgxLjc4ZmRiOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQ3CisgICAgMHgxLjAwMTViOTNkZDBmMDk1YmUxZWIwYTViODdmZTVlMzNlcC0yNCwKKyAgICAweDEuNzhmZGJhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDgKKyAgICAweDEuMDAxNWI5M2RkMGYwOTViZTFlYjBhNWI4N2ZlNWUzM2VwLTI0LAorICAgIC0weDEuNzhmZGJhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDkKKyAgICAweDEuNmEwOTk0ZTY4Yjc4N2VlNGZkNjgzMGIyODgyMjU3NDVwLTEsCisgICAgMHgxLjg1OGViNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTUwCisgICAgMHgxLjZhMDk5NGU2OGI3ODdlZTRmZDY4MzBiMjg4MjI1NzQ1cC0xLAorICAgIC0weDEuODU4ZWI0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTEKKyAgICAweDEuNmEwOWMyMjdjZmExOTRkMWZhN2FiOTkwOWRlNTA4M2NwLTEsCisgICAgMHgxLjg1OGViNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTUyCisgICAgMHgxLjZhMDljMjI3Y2ZhMTk0ZDFmYTdhYjk5MDlkZTUwODNjcC0xLAorICAgIC0weDEuODU4ZWI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTMKKyAgICAweDEuNmEwOWVmNjkwZTIyODNiNjU4NTA5ZWQzMTk0ODM4MzlwLTEsCisgICAgMHgxLjg1OGViOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTU0CisgICAgMHgxLjZhMDllZjY5MGUyMjgzYjY1ODUwOWVkMzE5NDgzODM5cC0xLAorICAgIC0weDEuODU4ZWI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTUKKyAgICAtMHgxLmYzOTU3YmFkNzBlMDc0MWYxZDNkNjc1MTI0NmNlMjFhcC0xLAorICAgIDB4MS5mZmZmZmVwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTYKKyAgICAtMHgxLmYzOTU3YmFkNzBlMDc0MWYxZDNkNjc1MTI0NmNlMjFhcC0xLAorICAgIC0weDEuZmZmZmZlcDYyCisgIH0sCisgIHsgLy8gRW50cnkgOTU3CisgICAgMHgxLjgyYWEzNzViM2MzM2U3MDY2MzczMWJhYjRiZWI2ZWQzcC03LAorICAgIDB4MS5wNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTgKKyAgICAweDEuODJhYTM3NWIzYzMzZTcwNjYzNzMxYmFiNGJlYjZlZDNwLTcsCisgICAgLTB4MS5wNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTkKKyAgICAweDEuOTQ1ZTZjNjlhNTgwZmI3YmIyN2QwMmMwZmUwZjhhNzFwLTIsCisgICAgMHgxLjAwMDAwMnA2MworICB9LAorICB7IC8vIEVudHJ5IDk2MAorICAgIDB4MS45NDVlNmM2OWE1ODBmYjdiYjI3ZDAyYzBmZTBmOGE3MXAtMiwKKyAgICAtMHgxLjAwMDAwMnA2MworICB9LAorICB7IC8vIEVudHJ5IDk2MQorICAgIC0weDEuYjJkMjU1ZjJiZDA0MjNlMjllMmE1NDg3MjhmMDM0YWJwLTEsCisgICAgMHgxLmZmZmZmZXAyNgorICB9LAorICB7IC8vIEVudHJ5IDk2MgorICAgIC0weDEuYjJkMjU1ZjJiZDA0MjNlMjllMmE1NDg3MjhmMDM0YWJwLTEsCisgICAgLTB4MS5mZmZmZmVwMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjMKKyAgICAweDEuNGFiNjUxMWE3ZDM5YWQzY2M4OGRlZDFlNzc1Y2ExNDdwLTEsCisgICAgMHgxLnAyNworICB9LAorICB7IC8vIEVudHJ5IDk2NAorICAgIDB4MS40YWI2NTExYTdkMzlhZDNjYzg4ZGVkMWU3NzVjYTE0N3AtMSwKKyAgICAtMHgxLnAyNworICB9LAorICB7IC8vIEVudHJ5IDk2NQorICAgIC0weDEuYWQzZDgwYzgyZjQ0NTJiMDc2NTgxZGUyNDY0ODQzNWJwLTEsCisgICAgMHgxLjAwMDAwMnAyNworICB9LAorICB7IC8vIEVudHJ5IDk2NgorICAgIC0weDEuYWQzZDgwYzgyZjQ0NTJiMDc2NTgxZGUyNDY0ODQzNWJwLTEsCisgICAgLTB4MS4wMDAwMDJwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjcKKyAgICAtMHgxLjQ1MzJjMzcyMWVkNDM0M2FkODhlZWE4OTA4YTk4OGNicC0yLAorICAgIDB4MS5mZmZmZmVwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjgKKyAgICAtMHgxLjQ1MzJjMzcyMWVkNDM0M2FkODhlZWE4OTA4YTk4OGNicC0yLAorICAgIC0weDEuZmZmZmZlcDIzCisgIH0sCisgIHsgLy8gRW50cnkgOTY5CisgICAgMHgxLjQwYWQ2N2YzZjBjOWExNDM5NjNjOWM5NmRiY2UzZjhhcC0xLAorICAgIDB4MS5wMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzAKKyAgICAweDEuNDBhZDY3ZjNmMGM5YTE0Mzk2M2M5Yzk2ZGJjZTNmOGFwLTEsCisgICAgLTB4MS5wMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzEKKyAgICAweDEuY2FmODUzN2MzZTQ0MmNhOGFjYTg2YzE1Njc3Mzg1M2FwLTIsCisgICAgMHgxLjAwMDAwMnAyNAorICB9LAorICB7IC8vIEVudHJ5IDk3MgorICAgIDB4MS5jYWY4NTM3YzNlNDQyY2E4YWNhODZjMTU2NzczODUzYXAtMiwKKyAgICAtMHgxLjAwMDAwMnAyNAorICB9LAorICB7IC8vIEVudHJ5IDk3MworICAgIC0weDEuNGVhYTY2N2JhMGI5MGRmYjA1YWIzZDljMjQ3Y2RlZTdwLTEsCisgICAgMHgxLmZmZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTc0CisgICAgLTB4MS40ZWFhNjY3YmEwYjkwZGZiMDVhYjNkOWMyNDdjZGVlN3AtMSwKKyAgICAtMHgxLmZmZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTc1CisgICAgLTB4MS40ZWFhNjA2ZGIyNGMwYzQ2NmRhMWMyZGM3YmFhMmIzMnAtMSwKKyAgICAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzYKKyAgICAtMHgxLjRlYWE2MDZkYjI0YzBjNDY2ZGExYzJkYzdiYWEyYjMycC0xLAorICAgIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzcKKyAgICAtMHgxLjRlYWE1NDUxZDUzMzQ4ZWI4OWRjNDc4ZDRkMTFiZTAycC0xLAorICAgIDB4MS4wMDAwMDJwMgorICB9LAorICB7IC8vIEVudHJ5IDk3OAorICAgIC0weDEuNGVhYTU0NTFkNTMzNDhlYjg5ZGM0NzhkNGQxMWJlMDJwLTEsCisgICAgLTB4MS4wMDAwMDJwMgorICB9LAorICB7IC8vIEVudHJ5IDk3OQorICAgIC0weDEuYWEyMjVlMmVmOTYyNDE5MTViNmZkMjE3NTIyODE0ZjVwLTIsCisgICAgMHgxLmZmZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgOTgwCisgICAgLTB4MS5hYTIyNWUyZWY5NjI0MTkxNWI2ZmQyMTc1MjI4MTRmNXAtMiwKKyAgICAtMHgxLmZmZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgOTgxCisgICAgLTB4MS5hYTIyNjU3NTM3MjA0YTQzMzJmOGFjYmI3MmIwZDc2OHAtMiwKKyAgICAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODIKKyAgICAtMHgxLmFhMjI2NTc1MzcyMDRhNDMzMmY4YWNiYjcyYjBkNzY4cC0yLAorICAgIC0weDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODMKKyAgICAtMHgxLmFhMjI3NDAxYjI4ODYyMGEwMzcyZDVhOTYwODQ5MTVkcC0yLAorICAgIDB4MS4wMDAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDk4NAorICAgIC0weDEuYWEyMjc0MDFiMjg4NjIwYTAzNzJkNWE5NjA4NDkxNWRwLTIsCisgICAgLTB4MS4wMDAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDk4NQorICAgIDB4MS4xNGEyODJhYTI1YjExZjYzMTJhN2E2NTE4MGU3YzNkNHAtMSwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTg2CisgICAgMHgxLjE0YTI4MmFhMjViMTFmNjMxMmE3YTY1MTgwZTdjM2Q0cC0xLAorICAgIC0weDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTg3CisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDk4OAorICAgIDB4MS4xNGEyODBmYjUwNjhiOTIzODQ4Y2RiMmVkMGUzN2E1M3AtMSwKKyAgICAtMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgOTg5CisgICAgMHgxLjE0YTI3ZDlkYTVkNGFlYmNlNzE0MjhmOTA1N2IwOGRhcC0xLAorICAgIDB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDk5MAorICAgIDB4MS4xNGEyN2Q5ZGE1ZDRhZWJjZTcxNDI4ZjkwNTdiMDhkYXAtMSwKKyAgICAtMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgOTkxCisgICAgMHgxLmMxNTI4MGUwNzM3NjkyZGQ0MzY5MDhmZGM4ZTZlMmUxcC0xLAorICAgIDB4MS5mZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTIKKyAgICAweDEuYzE1MjgwZTA3Mzc2OTJkZDQzNjkwOGZkYzhlNmUyZTFwLTEsCisgICAgLTB4MS5mZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTMKKyAgICAweDEuYzE1MjgwNjViN2Q0ZjlkYjdiYmIzYjQ1ZjVmNWIzMGFwLTEsCisgICAgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDk5NAorICAgIDB4MS5jMTUyODA2NWI3ZDRmOWRiN2JiYjNiNDVmNWY1YjMwYXAtMSwKKyAgICAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDk5NQorICAgIDB4MS5jMTUyN2Y3MDQwOTA3NmRhMGMzMjA0ZGYxZTA5OWE4M3AtMSwKKyAgICAweDEuMDAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTk2CisgICAgMHgxLmMxNTI3ZjcwNDA5MDc2ZGEwYzMyMDRkZjFlMDk5YTgzcC0xLAorICAgIC0weDEuMDAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTk3CisgICAgMHgxLmYwMTU0YTE3ODlkOGRjYzE3MmNkMjA5MmQwNWY2Mzk0cC0xLAorICAgIDB4MS5mZmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTgKKyAgICAweDEuZjAxNTRhMTc4OWQ4ZGNjMTcyY2QyMDkyZDA1ZjYzOTRwLTEsCisgICAgLTB4MS5mZmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTkKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTc0ZjA3YTY3OTcyYmYyOWYxNDhwLTEsCisgICAgMHgxLnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMDAKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTc0ZjA3YTY3OTcyYmYyOWYxNDhwLTEsCisgICAgLTB4MS5wLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAxCisgICAgMHgxLmYwMTU0OWI4ODkwYzJmNjYzMzdjYWMxNWE3MjM3YzhlcC0xLAorICAgIDB4MS4wMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAyCisgICAgMHgxLmYwMTU0OWI4ODkwYzJmNjYzMzdjYWMxNWE3MjM3YzhlcC0xLAorICAgIC0weDEuMDAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAwMworICAgIDB4MS5mYzAxNTUyZmQwNjhlZTgzZjViNzQyYzA1MjQ1ZThiMnAtMSwKKyAgICAweDEuZmZmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAwNAorICAgIDB4MS5mYzAxNTUyZmQwNjhlZTgzZjViNzQyYzA1MjQ1ZThiMnAtMSwKKyAgICAtMHgxLmZmZmZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMDUKKyAgICAweDEuZmMwMTU1MjdkNWJkMzZkYTNjZDQyNTNiZWRlMzE5Y2FwLTEsCisgICAgMHgxLnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMDYKKyAgICAweDEuZmMwMTU1MjdkNWJkMzZkYTNjZDQyNTNiZWRlMzE5Y2FwLTEsCisgICAgLTB4MS5wLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA3CisgICAgMHgxLmZjMDE1NTE3ZTA2NWFmYjZiYjEwMmMxOGY1OTE5ODIwcC0xLAorICAgIDB4MS4wMDAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA4CisgICAgMHgxLmZjMDE1NTE3ZTA2NWFmYjZiYjEwMmMxOGY1OTE5ODIwcC0xLAorICAgIC0weDEuMDAwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAwOQorICAgIDB4MS5mZjAwMTU1NjllZjdlMmI5NjMwMWU2Zjc1MmMwMTlkNHAtMSwKKyAgICAweDEuZmZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAxMAorICAgIDB4MS5mZjAwMTU1NjllZjdlMmI5NjMwMWU2Zjc1MmMwMTlkNHAtMSwKKyAgICAtMHgxLmZmZmZmZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMTEKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRjYTBlMWVlNjUwOWJjNDJiNzFwLTEsCisgICAgMHgxLnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMTIKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRjYTBlMWVlNjUwOWJjNDJiNzFwLTEsCisgICAgLTB4MS5wLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEzCisgICAgMHgxLmZmMDAxNTUwOWZmN2QyZWU2NDE4ZTkyNGYwZGU1ZTk3cC0xLAorICAgIDB4MS4wMDAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE0CisgICAgMHgxLmZmMDAxNTUwOWZmN2QyZWU2NDE4ZTkyNGYwZGU1ZTk3cC0xLAorICAgIC0weDEuMDAwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAxNQorICAgIDB4MS5mZmMwMDE1NWQyNzdkNThlNzI3Y2Q5NWM0M2Y3NTljZnAtMSwKKyAgICAweDEuZmZmZmZlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTAxNgorICAgIDB4MS5mZmMwMDE1NWQyNzdkNThlNzI3Y2Q5NWM0M2Y3NTljZnAtMSwKKyAgICAtMHgxLmZmZmZmZXAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwMTcKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxMmFlZGI0OWQ5MjkyOGRmNzJwLTEsCisgICAgMHgxLnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMTgKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxMmFlZGI0OWQ5MjkyOGRmNzJwLTEsCisgICAgLTB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE5CisgICAgMHgxLmZmYzAwMTU0NTI4N2Q0OWI1Nzk3MmFmNTE0NTY2M2EwcC0xLAorICAgIDB4MS4wMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIwCisgICAgMHgxLmZmYzAwMTU0NTI4N2Q0OWI1Nzk3MmFmNTE0NTY2M2EwcC0xLAorICAgIC0weDEuMDAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAyMQorICAgIDB4MS5mZmYwMDAxNTc1NDk5ZjNkNzk5NmUyZGExMWNkZWIyNHAtMSwKKyAgICAweDEuZmZmZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTAyMgorICAgIDB4MS5mZmYwMDAxNTc1NDk5ZjNkNzk5NmUyZGExMWNkZWIyNHAtMSwKKyAgICAtMHgxLmZmZmZmZXAtNworICB9LAorICB7IC8vIEVudHJ5IDEwMjMKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMjhhMjgwZTk3YmNkNTljOGFwLTEsCisgICAgMHgxLnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwMjQKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMjhhMjgwZTk3YmNkNTljOGFwLTEsCisgICAgLTB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI1CisgICAgMHgxLmZmZjAwMDE1MTU0YTlmMGNhZTRhNjIxNTE1MDFjZDBhcC0xLAorICAgIDB4MS4wMDAwMDJwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI2CisgICAgMHgxLmZmZjAwMDE1MTU0YTlmMGNhZTRhNjIxNTE1MDFjZDBhcC0xLAorICAgIC0weDEuMDAwMDAycC02CisgIH0sCisgIHsgLy8gRW50cnkgMTAyNworICAgIDB4MS5mZmZmZmZmMDAwMDAyMDE1NTU0NGZmZjQ5ZmNhMzhlNnAtMSwKKyAgICAweDEuZmZmZmZlcC0xNQorICB9LAorICB7IC8vIEVudHJ5IDEwMjgKKyAgICAweDEuZmZmZmZmZjAwMDAwMjAxNTU1NDRmZmY0OWZjYTM4ZTZwLTEsCisgICAgLTB4MS5mZmZmZmVwLTE1CisgIH0sCisgIHsgLy8gRW50cnkgMTAyOQorICAgIDB4MS5mZmZmZmZmMDAwMDAwMDE1NTU1NTU1NDlmNDlmNDlmN3AtMSwKKyAgICAweDEucC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEwMzAKKyAgICAweDEuZmZmZmZmZjAwMDAwMDAxNTU1NTU1NTQ5ZjQ5ZjQ5ZjdwLTEsCisgICAgLTB4MS5wLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTAzMQorICAgIDB4MS5mZmZmZmZlZmZmZmZjMDE1NTUxNWZmZjRhMTQ5NmMxY3AtMSwKKyAgICAweDEuMDAwMDAycC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEwMzIKKyAgICAweDEuZmZmZmZmZWZmZmZmYzAxNTU1MTVmZmY0YTE0OTZjMWNwLTEsCisgICAgLTB4MS4wMDAwMDJwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTAzMworICAgIDB4MS5mZmZmZmZmZmZmZmZmYzAwMDAwN2ZmZmZmYzAxNTU1NXAtMSwKKyAgICAweDEuZmZmZmZlcC0yOAorICB9LAorICB7IC8vIEVudHJ5IDEwMzQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmMwMDAwMDdmZmZmZmMwMTU1NTVwLTEsCisgICAgLTB4MS5mZmZmZmVwLTI4CisgIH0sCisgIHsgLy8gRW50cnkgMTAzNQorICAgIDB4MS5mZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAxNTU1NXAtMSwKKyAgICAweDEucC0yNworICB9LAorICB7IC8vIEVudHJ5IDEwMzYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMTU1NTVwLTEsCisgICAgLTB4MS5wLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTAzNworICAgIDB4MS5mZmZmZmZmZmZmZmZmYmZmZmZlZmZmZmZmMDAxNTU1NXAtMSwKKyAgICAweDEuMDAwMDAycC0yNworICB9LAorICB7IC8vIEVudHJ5IDEwMzgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmJmZmZmZWZmZmZmZjAwMTU1NTVwLTEsCisgICAgLTB4MS4wMDAwMDJwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTAzOQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmYwMDAwMDFmZmZmZmYwMDAxNXAtMSwKKyAgICAweDEuZmZmZmZlcC0zMQorICB9LAorICB7IC8vIEVudHJ5IDEwNDAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmMDAwMDAxZmZmZmZmMDAwMTVwLTEsCisgICAgLTB4MS5mZmZmZmVwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMTA0MQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAxNXAtMSwKKyAgICAweDEucC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEwNDIKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMTVwLTEsCisgICAgLTB4MS5wLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTA0MworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmVmZmZmZmJmZmZmZmMwMDAxNXAtMSwKKyAgICAweDEuMDAwMDAycC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEwNDQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZlZmZmZmZiZmZmZmZjMDAwMTVwLTEsCisgICAgLTB4MS4wMDAwMDJwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTA0NQorICAgIDB4MS5iNGJmMmM3OWJkZmNkYWE1M2VkNmMwMTNmNjVlMDk2M3AtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ2CisgICAgMHgxLmI0YmYyYzc5YmRmY2RhYTUzZWQ2YzAxM2Y2NWUwOTYzcC0xLAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NworICAgIDB4MS5iNGJmMmM3OWJkZmNkYWE1M2VkNmMwMTNmNjVlMDk2M3AtMSwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNDgKKyAgICAweDEuYjRiZjJjNzliZGZjZGFhNTNlZDZjMDEzZjY1ZTA5NjNwLTEsCisgICAgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA0OQorICAgIDB4MS5iNGJmMmM3OWJkZmNkYWE1M2VkNmMwMTNmNjVlMDk2M3AtMSwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNTAKKyAgICAweDEuYjRiZjJjNzliZGZjZGFhNTNlZDZjMDEzZjY1ZTA5NjNwLTEsCisgICAgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA1MQorICAgIC0weDEuODg3N2EyOWUzZDdiNmRlZmNiNTI4ZTg2ZjRjM2UwOWFwLTEsCisgICAgMHgxLmZmZmZmY3AxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUyCisgICAgLTB4MS44ODc3YTI5ZTNkN2I2ZGVmY2I1MjhlODZmNGMzZTA5YXAtMSwKKyAgICAtMHgxLmZmZmZmY3AxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUzCisgICAgLTB4MS5mZmZmZmZmZmZmZmRkOTQ4NDkyNzFkMDhlZWNmNTRhMXAtMSwKKyAgICAweDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU0CisgICAgLTB4MS5mZmZmZmZmZmZmZmRkOTQ4NDkyNzFkMDhlZWNmNTRhMXAtMSwKKyAgICAtMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTA1NQorICAgIC0weDEuNzc3YTVjZjcyY2VjYzRjZGUzYTMxZTdkNWEwMjYxNDJwLTI1LAorICAgIDB4MS45MjFmYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNTYKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlY2M0Y2RlM2EzMWU3ZDVhMDI2MTQycC0yNSwKKyAgICAtMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA1NworICAgIDB4MS4xNGEyN2Q5ZGE1ZDRhZWJjZTcxNDI4ZjkwNTdiMDhkYXAtMSwKKyAgICAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU4CisgICAgMHgxLjE0YTI3ZDlkYTVkNGFlYmNlNzE0MjhmOTA1N2IwOGRhcC0xLAorICAgIC0weDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU5CisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDEwNjAKKyAgICAweDEuMTRhMjgwZmI1MDY4YjkyMzg0OGNkYjJlZDBlMzdhNTNwLTEsCisgICAgLTB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDEwNjEKKyAgICAweDEuMTRhMjgyYWEyNWIxMWY2MzEyYTdhNjUxODBlN2MzZDRwLTEsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNjIKKyAgICAweDEuMTRhMjgyYWEyNWIxMWY2MzEyYTdhNjUxODBlN2MzZDRwLTEsCisgICAgLTB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYzCisgICAgMHgxLjZhMDllNWUzMzM1OTgzZTVhYzkyZTczM2UzZjI0YjQycC0xLAorICAgIDB4MS45MjFmYjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY0CisgICAgMHgxLjZhMDllNWUzMzM1OTgzZTVhYzkyZTczM2UzZjI0YjQycC0xLAorICAgIC0weDEuOTIxZmI2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDEwNjgKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDEwNjkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA3MAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA3MQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmY4cC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmY4cC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDczCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTE0OAorICB9LAorICB7IC8vIEVudHJ5IDEwNzQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTE0OAorICB9LAorICB7IC8vIEVudHJ5IDEwNzUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMTA3NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMTA3NworICAgIDB4MS5wMCwKKyAgICAwLjBmCisgIH0sCisgIHsgLy8gRW50cnkgMTA3OAorICAgIDB4MS5wMCwKKyAgICAtMC4wZgorICB9LAorfTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKK1RFU1QobWF0aF9jb3NmLCBjb3NmX2ludGVsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX2Nvc2ZfaW50ZWxfZGF0YSkvc2l6ZW9mKGNvc2ZfaW50ZWxfZGF0YV90KTsgaSsrKSB7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGdfY29zZl9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCBjb3NmKGdfY29zZl9pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfZXhwX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF9leHBfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmViMjU4NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21hdGhfZXhwX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTk3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQordHlwZWRlZiBzdHJ1Y3QgeworICBkb3VibGUgZXhwZWN0ZWQ7CisgIGRvdWJsZSBjYWxsX2RhdGE7Cit9IGV4cF9pbnRlbF9kYXRhX3Q7CisKK3N0YXRpYyBleHBfaW50ZWxfZGF0YV90IGdfZXhwX2ludGVsX2RhdGFbXSA9IHsKKyAgeyAvLyBFbnRyeSAwCisgICAgMHgxLjAwMDAwMDAwMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTUyCisgIH0sCisgIHsgLy8gRW50cnkgMQorICAgIDB4MS4wMDAwMDAwMDAwMTFmZmZmZmZmZmZmZmZmZmZmZmZmZnAwLAorICAgIDB4MS4xZmZmZmZmZmZmZjVlcC00NAorICB9LAorICB7IC8vIEVudHJ5IDIKKyAgICAweDEuMDAwMDAwMDAwMjA3ZmZmZmZmZmZmZmZmZmZmZmZkMzRwMCwKKyAgICAweDEuMDNmZmZmZmZmZWY3ZnAtMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzCisgICAgMHgxLjAwMDAwMDAwYzFiNTk4MDAwMDAwMDAwMDAwMjdhN2Q1cDAsCisgICAgMHgxLjgzNmIyZmZmNmQ2Y2JwLTMzCisgIH0sCisgIHsgLy8gRW50cnkgNAorICAgIDB4MS4wMDAwMDAwMzNkMzk3ODAwMDAwMDAwMDAwMDAyYTUxZHAwLAorICAgIDB4MS45ZTljYmJmZDYwODBicC0zMQorICB9LAorICB7IC8vIEVudHJ5IDUKKyAgICAweDEuMDAzYWY2YzM3YzFkMzAwMDAwMDAwMDAwMDAwOTQ0NmVwMCwKKyAgICAweDEuZDc3ZmQxM2QyN2ZmZnAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2CisgICAgMHgxLjAxNmI0ZGYzMjk5ZDc3ZmZmZmZmZmZmZmZmZTgzZTEwcDAsCisgICAgMHgxLjZhNGQxYWY5Y2M5ODlwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA3CisgICAgMHgxLjBjYTRhNDE2NjNmZTA3ZmZmZmZmZmZmZmZmZGFiMjM1cDAsCisgICAgMHgxLjhhZTgyMzg1MDIzMGJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4CisgICAgMHgxLjE1MzhlYTE4YTQ1ODUwMDAwMDAwMDAwMDAwMzllMDU0cDAsCisgICAgMHgxLjQ2MzcwZDkxNTk5MWJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5CisgICAgMHgxLjQ3NDA4Y2I5NTgzY2UwMDAwMDAwMDAwMDAwMmM4OTZmcDAsCisgICAgMHgxLmY2ZTRjM2NlZDdjNzJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMAorICAgIDB4MS4yN2MyZTRiYzFlZTcwN2ZmZmZmZmZmZmZmZmViMGMyZHAxLAorICAgIDB4MS5hY2NmYmU0NmI0ZWYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTEKKyAgICAweDEuNTU3ZDRhY2Q3ZTU1NjgwMDAwMDAwMDAwMDAyMDJjODZwMiwKKyAgICAweDEuYWNhN2FlOGRhNWE3YnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTIKKyAgICAweDEuOTFhOGRmZjU0MGZmNzAwMDAwMDAwMDAwMDAyZjFlMzNwMiwKKyAgICAweDEuZDYzMzZhODgwNzdhYXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTMKKyAgICAweDEuOGVkZTQ5MmQ5NjA3MWZmZmZmZmZmZmZmZmYwYWVjZDJwMywKKyAgICAweDEuNDJlZTNjN2RjNDk0NnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTQKKyAgICAweDEuYWM1MGI0MDljOGFlZTAwMDAwMDAwMDAwMDAwMjJjZTNwOCwKKyAgICAweDEuODNkNGJjZGViYjNmNHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTUKKyAgICAweDEuZjNlNTU4Y2Y0ZGU1NDAwMDAwMDAwMDAwMDAxZjU4MDhwLTIzLAorICAgIC0weDEuZThiZGJmY2Q5MTQ0ZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTYKKyAgICAweDEuOTUxYzZkYzVkMjRlMjdmZmZmZmZmZmZmZmZiNmUwYzNwLTksCisgICAgLTB4MS43MWUwYjg2OWI1ZTc5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIDB4MS4xMDY0YjJjMTAzZGRhODAwMDAwMDAwMDAwMDNlYjVkN3AtMywKKyAgICAtMHgxLjAyMzkzZDU5NzY3NjlwMQorICB9LAorICB7IC8vIEVudHJ5IDE4CisgICAgMHgxLjNlZjFlOWIzYTgxYzdmZmZmZmZmZmZmZmZmYzMxNXAtMiwKKyAgICAtMHgxLjJhOWNhZDk5OTgyNjJwMAorICB9LAorICB7IC8vIEVudHJ5IDE5CisgICAgMHgxLjUzNGQ0ZGU4NzA3MTMwMDAwMDAwMDAwMDAwM2M2ZmI3cC0zLAorICAgIC0weDEuY2MzN2VmN2RlNzUwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjAKKyAgICAweDEuMjIxNzE0N2I4NWVhOTgwMDAwMDAwMDAwMDA3NzQ1YTNwLTEsCisgICAgLTB4MS4yMmUyNGZhM2Q1Y2Y5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjEKKyAgICAweDEuOTQwM2ZkMGVlNTFjODAwMDAwMDAwMDAwMDA3NzIwZjFwLTIsCisgICAgLTB4MS5kYzJiNWRmMWY3ZDNkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjIKKyAgICAweDEuYmFkZWQzMGNiZjFjM2ZmZmZmZmZmZmZmZmZmYmQ5MDRwLTEsCisgICAgLTB4MS4yOTBlYTA5ZTM2NDc5cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjMKKyAgICAweDEuZmZlNWQwYmI3ZWFiZjAwMDAwMDAwMDAwMDAwMzAzMjBwLTEsCisgICAgLTB4MS5hMmZlZmVmZDU4MGRmcC0xMworICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgMHgxLmZmZmZmZjg0YjM5YzRmZmZmZmZmZmZmZmZmZmYxN2Y0cC0xLAorICAgIC0weDEuZWQzMThlZmI2MjdlYXAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNQorICAgIDB4MS5mZmZmZmZmYWQwYWU2ODAwMDAwMDAwMDAwMDA5ZjFhOHAtMSwKKyAgICAtMHgxLjRiZDQ2NjAxYWUxZWZwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAweDEuZmZmZmZmZmZmZjcwMDAwMDAwMDAwMDAwMDAwMDAwMDNwLTEsCisgICAgLTB4MS4yMDAwMDAwMDAwMjg4cC00MgorICB9LAorICB7IC8vIEVudHJ5IDI3CisgICAgMHgxLmZmZmZmZmZmZmZmZHAtMSwKKyAgICAtMHgxLjgwMDAwMDAwMDAwMTJwLTQ4CisgIH0sCisgIHsgLy8gRW50cnkgMjgKKyAgICAweDEuZmZmZmZmZmZmZmZmYzBwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC01MQorICB9LAorICB7IC8vIEVudHJ5IDI5CisgICAgMHgxLjAwMDAwMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmZmZmcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTUzCisgIH0sCisgIHsgLy8gRW50cnkgMzAKKyAgICAweDEuMDAwMDAwMDAwMDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZlMHAtNDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMQorICAgIDB4MS4wMDAwMDAwMTdmZmU4MDAwMDAwMDAwMDAwMDAzNWZmZHAwLAorICAgIDB4MS43ZmZlN2ZmZWUwMDI0cC0zMgorICB9LAorICB7IC8vIEVudHJ5IDMyCisgICAgMHgxLjAwMDAwMDAxODAwMTdmZmZmZmZmZmZmZmZmZmM5ZmZkcDAsCisgICAgMHgxLjgwMDE3ZmZlZGZmZGNwLTMyCisgIH0sCisgIHsgLy8gRW50cnkgMzMKKyAgICAweDEuMDAwMDAwNzVlOWY2NDAwMDAwMDAwMDAwMDAwYjFlODBwMCwKKyAgICAweDEuZDdhN2Q4OTM2MDllNXAtMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNAorICAgIDB4MS4wMDA2ZTgzNzM2ZjhjODAwMDAwMDAwMDAwMDBhYTBhZnAwLAorICAgIDB4MS5iYTA3ZDczMjUwZGU3cC0xNAorICB9LAorICB7IC8vIEVudHJ5IDM1CisgICAgMHgxLmRlN2NkNjc1MTAyOWEwMDAwMDAwMDAwMDAwZThiYjJmcDE2LAorICAgIDB4MS43NmU3ZTVkN2I2ZWFjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNgorICAgIDB4MS4xZDcxOTY1ZjUxNmFkODAwMDAwMDAwMDAwMDlmN2U5N3AxOSwKKyAgICAweDEuYThlYWQwNThiYzZiOHAzCisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAweDEuYThjMDJlOTc0YzMxNGZmZmZmZmZmZmZmZmZlMjFmMDNwMjUsCisgICAgMHgxLjFkNWMyZGFlYmUzNjdwNAorICB9LAorICB7IC8vIEVudHJ5IDM4CisgICAgMHgxLmI4OTBjYTg2MzdhZTFmZmZmZmZmZmZmZmZmZTQyMTYxcDQwLAorICAgIDB4MS5jNDRjZTBkNzE2YTFhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOQorICAgIDB4MS5mMDNmNTZhODhiNWQ3ODFjOTA1ZjZiNTFjNzZhZTk4MXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MAorICAgIDB4MS5mZjAwM2ZmNTU2YWE4N2ViYjA2ZTBlYjU3Mjg3NTY3ZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMGFwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MQorICAgIDB4MS44ZWJlZjllYWM4MWZjODAwMWEzZGJkODgyNDhlZmUxM3AtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMjVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MgorICAgIDB4MS5mYzAzZmQ1NmE0NjliODAwMDA4YmNkZmUwMThkYmM3NHAtMSwKKyAgICAtMHgxLjAwMDAwMDAxNzEwNTFwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MworICAgIDB4MS43OGI1NjEyZGJlZTAxMDAwOGQzYmMwNzM1YzgwZjdhOHAtMiwKKyAgICAtMHgxLjAwMDAwMThwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0CisgICAgMHgxLjk2OWM4NzBlYTlmNWE4MDFkZGMxZmYwOGEwMDhkYjA5cC05MywKKyAgICAtMHgxLjAwMDAwMWUzZXA2CisgIH0sCisgIHsgLy8gRW50cnkgNDUKKyAgICAweDEuNzhhZjg2N2JjNTExZDMyMWNkNDU0ZGJkZGFmODA2YmNwLTIsCisgICAgLTB4MS4wMDAzZmMwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIDB4MS5mZmZmZmZmZmZlZmZmODAwMDAwMDAwMDQwMDEwMDAxNXAtMSwKKyAgICAtMHgxLjAwMDgwMDAwMDA0cC00MQorICB9LAorICB7IC8vIEVudHJ5IDQ3CisgICAgMHgxLjc4OTIxNDA5M2M4MWQzYjY1ZmFjNjU5ZmIzZmM4MjQ5cC0yLAorICAgIC0weDEuMDAxODBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ4CisgICAgMHgxLjhlMjk4ZTUyZmNjZTg4MDE0YWQ5NWM0ZjNiZDg4NzY1cC0xLAorICAgIC0weDEuMDE4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDkKKyAgICAweDEuYWE2ZmZiMGJhNTE5ZjgwMWY5YzNlMTQ2YTE1ZGMwMmNwLTI0LAorICAgIC0weDEuMDIwMTBwNAorICB9LAorICB7IC8vIEVudHJ5IDUwCisgICAgMHgxLmRkN2E0NmI4ZDg1ZDY3ZDY3MzU5MzM3MTA5YzI1MTY4cC0zNzYsCisgICAgLTB4MS4wNDBwOAorICB9LAorICB7IC8vIEVudHJ5IDUxCisgICAgMHgxLjMzZTk2Y2EzYmNmM2U4MDFmOWIzZjYxMjZmYzYwNjk5cC0xLAorICAgIC0weDEuMDQ1Yjk0ODcyNDEzMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgMHgxLmVmMmY2NTJkYzI2MDU3ZmZmYzk4YWE1NGQ0YzMzYzE2cC0xLAorICAgIC0weDEuMTE4ZTA1Y2ZhM2U4MHAtNQorICB9LAorICB7IC8vIEVudHJ5IDUzCisgICAgMHgxLmE1ZDJjZTk3N2JiZTI4MDQ4YjMxNjkyN2Y5NzBjMjAxcC03LAorICAgIC0weDEuMTY5MTU2ZTE3YjliOXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTQKKyAgICAweDEuYTAyMDdjZjQxOTBmNzAwNDUyMjgyYjA0ZmEzOTA0MDdwLTcsCisgICAgLTB4MS4xNzcwMWIzYmYwNTAycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NQorICAgIDB4MS5mYjk3ZTFmZjhjYmJhN2FkZjE2ZjNmYmQ2ODc4ZjU2MHAtMSwKKyAgICAtMHgxLjFiNHAtNworICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgMHgxLmJjZmYwOWFlMzBjNDY4MDRhNmZhZmQ1NTA3NjZlZWQycC0xLAorICAgIC0weDEuMWY0cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTcKKyAgICAweDEuZmVlNzBjZjVlODZlZjRlNTRkMGIxZmEyNzAxYTM0NmZwLTgzMywKKyAgICAtMHgxLjIwNTlhZDQyYzNjZjdwOQorICB9LAorICB7IC8vIEVudHJ5IDU4CisgICAgMHgxLjdjY2QzZjMzNDA3NDU4MDExNDcwYjNmNjcxOTdhOWM4cC0xLAorICAgIC0weDEuMmYyNjlkMmNhMzhkMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDU5CisgICAgMHgxLjA5Y2RiMzZlOTc3YmM3ZmZmZmU2ZDRkZGJiMThkNTUzcC0xNCwKKyAgICAtMHgxLjM1NTNjZjE4MjhiMGJwMworICB9LAorICB7IC8vIEVudHJ5IDYwCisgICAgMHgxLmY5ZGM1Y2Q1NDZkOWI4MDBkYzNkOTU1MTlkYzY3ZWU4cC00NDksCisgICAgLTB4MS4zNjhhYzA4MzEyOGZjcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MQorICAgIDB4MS5mMWM1M2M5MDdmNmY1NzZlNjJlNDAxMzE1YmFmYzY5ZXAtMTUsCisgICAgLTB4MS4zNzZlOGY2NzlhZTE2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MgorICAgIDB4MS5mMjQ1OTU5NTRlNjYxODAyODk2NWE5ZDY3ZWRlYWY3YnAtOCwKKyAgICAtMHgxLjM4NDRmNjc0OTVmN2RwMgorICB9LAorICB7IC8vIEVudHJ5IDYzCisgICAgMHgxLmZiNTY1MjEyOTBhMjIyNTI3ZDFkM2MzNjM4MjY1ZjQ2cC05MDUsCisgICAgLTB4MS4zOTRlOWUxYjA4OWQ3cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIDB4MS5kYzE2NThmZjZlMDcwN2ZhZmQyZmQ4MzA2YzRiMTg5N3AtMTE0LAorICAgIC0weDEuMzk5N2VhNTFlNTI3MXA2CisgIH0sCisgIHsgLy8gRW50cnkgNjUKKyAgICAweDEuZWM4YjNjMDkwZjhiOTc3MTZhM2QzOGRlNDZkNjhhMWVwLTEsCisgICAgLTB4MS4zZDVkZTU2MGUxOTA2cC01CisgIH0sCisgIHsgLy8gRW50cnkgNjYKKyAgICAweDEuYWY0MTFiZjk4NTIyMGI1NjI5MDljNjUyYzA4N2ZlZjRwLTk1MSwKKyAgICAtMHgxLjQ5NTRhYTU1MmE5NjBwOQorICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgMHgxLmUxYjcxZDIzOGQ1MDc3ZmUzYmVhMjIyZmNiYTE1NjA4cC05NTcsCisgICAgLTB4MS40YjVhZDZhOWFkNmFkcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OAorICAgIDB4MS5jYzY2NmEzNTE5Y2EwODBmMWRhZWY1N2Y5MmI0MWQyOXAtOTczLAorICAgIC0weDEuNTBlYzMyNjg2YTgzNHA5CisgIH0sCisgIHsgLy8gRW50cnkgNjkKKyAgICAweDEuMjI0NjJiZDVmNzJiMGZmZmE2MDg1YjA0NDI3ZmRmNWRwLTk3NiwKKyAgICAtMHgxLjUyMzE2ODcyYjAyMjJwOQorICB9LAorICB7IC8vIEVudHJ5IDcwCisgICAgMHgxLmMxZWJjMTg2MTAzMDFmZmYyNDI0YmMzOTM2MjYwZGQycC05ODEsCisgICAgLTB4MS41M2I0ZWQzYjRlYzc3cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MQorICAgIDB4MS44ZDAxNWJjYWY5ZTE4YjU3ZmRmMDU3MjM5ZDk0ZjU4NnAtOTgxLAorICAgIC0weDEuNTNjNGYxM2M0ZjA3OXA5CisgIH0sCisgIHsgLy8gRW50cnkgNzIKKyAgICAweDEuZmQ1ODM1NDYwZWQ0OGM0ZTE0MjA3MzA5YTEyMzdmOTBwLTk4OSwKKyAgICAtMHgxLjU2NmFkNGE0MWJlYzBwOQorICB9LAorICB7IC8vIEVudHJ5IDczCisgICAgMHgxLjU4NzMzZmJjMDg4ZWY3ZmYzOGUxNWY5NDE2NmMwMjJjcC05OTQsCisgICAgLTB4MS41ODU4ODNlN2IzYjM4cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NAorICAgIDB4MS5iMDUyMDkwNjkwNDgxODAyYWNmMDE2OWY2MmJmMzJjOXAtMzIsCisgICAgLTB4MS41YTgxZWNmNjhiZWNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NQorICAgIDB4MS5kZjYxNTRiYzY0NGRhYzBmOWUzYTU2NjQ2OTQ4YjdjNXAtMTAxNSwKKyAgICAtMHgxLjVmNzU2MjlhZjRlYjdwOQorICB9LAorICB7IC8vIEVudHJ5IDc2CisgICAgMHgxLmZmNGIwZGEzNzA4MzUwMmMxMTRhN2FjNTZhYzA0OThmcC0xMDIzLAorICAgIC0weDEuNjIzMmViMWM0MzJmMnA5CisgIH0sCisgIHsgLy8gRW50cnkgNzcKKyAgICAweDEuNjI1ZWRkNGM3NTEzZTg0MmYyN2E5MzFjMmJiZTAwN2NwLTEwMjMsCisgICAgLTB4MS42MjYxZDdkYmY0OGNjcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OAorICAgIDB4MS5kNTcyZDI0OTczYmUyMDAwNmJhZDkyZTI5YmNiYTk4NHAtMSwKKyAgICAtMHgxLjYzNjRiOGY3NDdlMzJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OQorICAgIDB4MS5lZTRkZDc5MjI0NTc3ODAyMDI1MGY4OTgxZDFhMGFkMXAtOSwKKyAgICAtMHgxLjY1MjQ3OTZiNDA4OTVwMgorICB9LAorICB7IC8vIEVudHJ5IDgwCisgICAgMHgxLmY2NjBjNTliMjk0NTA1ZDg5ODlmODVmOGVkMmExODc4cC01LAorICAgIC0weDEuNjU1MWRhYWUzNjljZXAxCisgIH0sCisgIHsgLy8gRW50cnkgODEKKyAgICAweDEuYWEwNzA0NDllZmZmZTliOTEwNjU3ODk4Y2RjMGNjZGRwLTEwMzcsCisgICAgLTB4MS42NzI0NjNmMTQxNjA3cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MgorICAgIDB4MS5kNGU3ZmMzMzFiNzMyN2ZmY2NmNGVlMGM1OWFhN2IyMnAtMSwKKyAgICAtMHgxLjY4MjBjOTljMWRjMTZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIDB4MS5mY2M0NDhhY2Y0NzY1NzVjNjZlZTM5NjkxMmRiYWFjZHAtNTI4LAorICAgIC0weDEuNmQ0YjdlODJjM2YwMnA4CisgIH0sCisgIHsgLy8gRW50cnkgODQKKyAgICAweDEuN2ZmZjVhMWJmZmNiMjA2MmM5YWFhNWIwN2QwOTcyNTVwLTUyOSwKKyAgICAtMHgxLjZlNDRmNzY1ZmRhNzZwOAorICB9LAorICB7IC8vIEVudHJ5IDg1CisgICAgMHgxLmZhNGVjZDhhZTU3MTg3ZmZmZmZmZjk5MTBjNDc2YzY0cC0xLAorICAgIC0weDEuNmU1NmU3MjViODMwNHAtNworICB9LAorICB7IC8vIEVudHJ5IDg2CisgICAgMHgxLmU4ZDJkYWZkMDE3Y2U4MDMyYmNiODk0NTk0NjRmZTdkcC0zLAorICAgIC0weDEuNmVjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NworICAgIDB4MS4yMTRlMzRjYWFjOWU2NzEzOTY4OGFkMTYzMmRkMjA1NXAtMTA2MiwKKyAgICAtMHgxLjdwOQorICB9LAorICB7IC8vIEVudHJ5IDg4CisgICAgMHgxLmM4N2YyMTc3NWE0ODJhMDlhNDRhZjU5YzNjM2FlNDRicC0xMDcxLAorICAgIC0weDEuNzJlNDJwOQorICB9LAorICB7IC8vIEVudHJ5IDg5CisgICAgMHgxLmEzNDliMjMyOWM2Nzc3ZmZjZTY1OTM0YjNiNjIwM2E3cC0yNzMsCisgICAgLTB4MS43OTc4YmFjNzExMjFjcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MAorICAgIDB4MS5kMmE2ZDVlYTk5NWMxN2FiNDQ4MTMyZTFlMDQ1MzgwNXAtMSwKKyAgICAtMHgxLjdiZGU3OWUwZjk3MGNwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIDB4MS5iNzc2ZGM2NGM3NmQxOTdlOGM2NDRkYzhjYjUwOWM0YXAtMywKKyAgICAtMHgxLjhhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTIKKyAgICAweDEuNDQ0NmZjZjdkYTY4OTgwMmQ4YzcyNWRiOGMxMTQ1YWZwLTcyLAorICAgIC0weDEuOGQ1Yzg0ZjBiYWM4Y3A1CisgIH0sCisgIHsgLy8gRW50cnkgOTMKKyAgICAweDEuZTcyYTBiNjhiYjgyYjc4Y2UwNTI0ZDFhYmI2ZjdhYmVwLTczLAorICAgIC0weDEuOGZhNjhiNDQ0NzIzMHA1CisgIH0sCisgIHsgLy8gRW50cnkgOTQKKyAgICAweDEuZmMzM2Q1ZTFjYTZkZjdkNTA2OWIwM2RjNWE2ODNlNGZwLTc1LAorICAgIC0weDEuOWE2NzE2OTNiOTQ2YnA1CisgIH0sCisgIHsgLy8gRW50cnkgOTUKKyAgICAweDEuZTY5ODFmZDZlZjc5YzdmZmZmZmNjNzIwMWY4MmZkNDlwLTEsCisgICAgLTB4MS5hMGVjODlmODk3YTc1cC01CisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAweDEuZjJiOWQzYjZjZjIyNzdhMTI4M2Y4ZTAwNzQzYTA2NjlwLTEsCisgICAgLTB4MS5hZTZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NworICAgIDB4MS5lNTAzNGM4ZDE5MWJiZmZmNzE5ZjIwOThlMzNjMDU3N3AtMSwKKyAgICAtMHgxLmJiOTcwNmUyZjFiYjRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIDB4MS5mMjRkYzkwZjlmYmViODAyOGZiY2FlZWJhYmM3ZTlmY3AtMSwKKyAgICAtMHgxLmJjM2VkYWQyZTFlZmJwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OQorICAgIDB4MS43MWYyMzdkNjRhNmViNDZhYTE1NDQ3NmZkMGZjMzg4NnAtMTEsCisgICAgLTB4MS5kMDY5N2VkYmUwMDUycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAweDEuZjEyYzBkM2FkZGFhNDgwMDRiMjM1MTZkMmExMTM4MDRwLTEsCisgICAgLTB4MS5lMThwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEKKyAgICAweDEuZjExMGRkOTA3M2Q3MTgwMGJiNDA1NjgzMGI1MTdiMDhwLTEsCisgICAgLTB4MS5lNTBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIKKyAgICAweDEuZjNhYTdhODYwNTc0YzJiMDc4MzA2MWZlMWZkMWRmMmVwLTcwNSwKKyAgICAtMHgxLmU3ZmZmZmZmZmZmZmZwOAorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIDB4MS5mMGY4OThkNTUxMTcwODFmYzNiODc5MjIwNWU0ZTEzMHAtMSwKKyAgICAtMHgxLmU4MnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwNAorICAgIDB4MS5mZjgxNGZmZjE4ZGFjODU0MTg1ZDAxOWIwZjhlYWQzNnAtMSwKKyAgICAtMHgxLmZhZmViZmFmZWJmYjBwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMTA1CisgICAgMHgxLmZmZmZmZmZmMDFjMDcwMWM0NjIwOGM1NDE2ZDk0M2FkcC0xLAorICAgIC0weDEuZmM3ZjFmYzdmMjBwLTM0CisgIH0sCisgIHsgLy8gRW50cnkgMTA2CisgICAgMHgxLjc5MDdkNDE0OGJkOTE2ODdhMWI1MGYyNmU4ODMwNzc1cC0yLAorICAgIC0weDEuZmY4ZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNworICAgIDB4MS5mZmZmZmZmZmZmZmY4MDFjMDAwMDAwMDAxM2Y5MDBjM3AtMSwKKyAgICAtMHgxLmZmOGZmZmZmZmZmZmZwLTUxCisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgMHgxLmUwZmJiMDNhMGMyN2Q3ZTg0ODA0Y2FkZWMzNzdiZGY5cC0xLAorICAgIC0weDEuZmZlZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwOQorICAgIDB4MS5mZmZmZmZmZmZmMDAwODAwMDAwMDQwMDQwMDBmZmZmNXAtMSwKKyAgICAtMHgxLmZmZWZmZmZmZmZmZmZwLTQyCisgIH0sCisgIHsgLy8gRW50cnkgMTEwCisgICAgMHgxLmZmZmZmZmZmZmYwMDA3ZmZmZmZmZmZmYzAwMTAwMDE1cC0xLAorICAgIC0weDEuZmZmMDAwMDAwMDhwLTQyCisgIH0sCisgIHsgLy8gRW50cnkgMTExCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUwMDA3MTllcC0xLAorICAgIC0weDEuZmZmOGU2MWVhZGQ0OHAtMTAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEyCisgICAgMHgxLmZmZmZmZmZmZmMwMDA4MDAwMDA0MDAxMDAwMGZmZDU1cC0xLAorICAgIC0weDEuZmZmYmZmZmZmZmZmZnAtNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMKKyAgICAweDEuZmZmZmZmZmZmYzAwMDAxYzAwMDQwMDFmYzdmZmZlMTlwLTEsCisgICAgLTB4MS5mZmZmZjFmZmZmZmZmcC00MAorICB9LAorICB7IC8vIEVudHJ5IDExNAorICAgIDB4MS5mZjgwMGZmZWFhYzAwODU4OWY5YTk2YWY3M2VhZmY2N3AtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZkYTVwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMTE1CisgICAgMHgxLmUzNTViYmFlZThkODU4MTVlNGI0NzZiNzA0ZDBmNGYxcC0yNCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmN2RwMworICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIDB4MS43OGI1NjM2MmNlZjNkYTk4NDQ1M2QxYzcyYzM0NGEzMXAtMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZjcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTE4CisgICAgMHgxLjQyZWI5ZjM5YWZiYWM3ZTVlNzNjMzJhMjFlODUzZjI2cC0xODUsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkKKyAgICAweDEuMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAyMHAwLAorICAgIDB4MS4wcC01MworICB9LAorICB7IC8vIEVudHJ5IDEyMAorICAgIDB4MS45NWU1NGM1ZGQ0MjE3N2Y1M2Y0ZDUyMTlkZjExY2EzYnAxODQsCisgICAgMHgxLjBwNworICB9LAorICB7IC8vIEVudHJ5IDEyMQorICAgIDB4MS45NDc2NTA0YmE4ODU3NThhYTVmYTc1NDVlMTBlOGU0NnA3MzgsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwOQorICB9LAorICB7IC8vIEVudHJ5IDEyMgorICAgIDB4MS4wMTAwODAyYWI1NTc3ODAyYmE0MjRhZDQ2YjEwNmE2NnAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAzcC04CisgIH0sCisgIHsgLy8gRW50cnkgMTIzCisgICAgMHgxLjAwMDAwMDQwMDAwMDA4MDAwMDFjYWFhYWIxYjU1NTU2cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDdwLTI2CisgIH0sCisgIHsgLy8gRW50cnkgMTI0CisgICAgMHgxLmQ4ZTY0YjhmMjZjMTI4NTE3NDg5YTQ5MGU2ODRkOGE4cDIsCisgICAgMHgxLjAwMDAwMDAwOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTI1CisgICAgMHgxLjc0OWVhN2UwMTViYzFkZGRmYTE5ZmJiM2NmOGJkZWQ0cDExLAorICAgIDB4MS4wMDAwMDAwMTBwMworICB9LAorICB7IC8vIEVudHJ5IDEyNgorICAgIDB4MS4wZjJlYmQyYzY1ZDlhODAwODFhYzJlNjVlODAyNWFiMXAyMywKKyAgICAweDEuMDAwMDAwMDIwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcKKyAgICAweDEuMGYyZWMxNDczYWZlYTgwODFmYTQ1NjY5MjdhNGNmZDNwMjMsCisgICAgMHgxLjAwMDAwMDRwNAorICB9LAorICB7IC8vIEVudHJ5IDEyOAorICAgIDB4MS4wMDAwMDAwMDAxMDAwODAwMDAwMDgwMDgwMDIwMDAyYXAwLAorICAgIDB4MS4wMDA4MHAtNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkKKyAgICAweDEuMDAwMDAwMDAwMDgwMDgwMDAwMDAyMDA0MDAyMDAwMDVwMCwKKyAgICAweDEuMDAxcC00MQorICB9LAorICB7IC8vIEVudHJ5IDEzMAorICAgIDB4MS4wMDAwMDAwMDAwMDAwODAwODAwMDAwMDAwMDIwMDRwMCwKKyAgICAweDEuMDAxcC01MworICB9LAorICB7IC8vIEVudHJ5IDEzMQorICAgIDB4MS5hOGJmODFhNTk3ZWRkMjIzZjJkYjZlYmZlMmViMWNjMXAxODQsCisgICAgMHgxLjAwMTczZWFiMzYyM2FwNworICB9LAorICB7IC8vIEVudHJ5IDEzMgorICAgIDB4MS43NWU1NDE3NWFhYmIzN2ZmZjVlNWI0NGJhMGYxMDFiN3AxMSwKKyAgICAweDEuMDAxYzBwMworICB9LAorICB7IC8vIEVudHJ5IDEzMworICAgIDB4MS42MDAwOGZiZWQ2YzUyODAyMDZlNzk5MDkzMjFkMDljOHAxLAorICAgIDB4MS4wMmY4YWY4YWY4YWZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQKKyAgICAweDEuMDQxODRiYjgwZmY0M2ZmZmM4OWM1M2YxZWUwNGNlMDRwMCwKKyAgICAweDEuMDQwcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTM1CisgICAgMHgxLjAwMDAwODQwMDAyMjA4MDA1ZDk2MDBjMTA1NjEzZTdjcDAsCisgICAgMHgxLjA4MHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYKKyAgICAweDEuMjMzOGFiOWI3NDMyMDgwMDAwMDAwOTczOTM4YmFjYjBwMCwKKyAgICAweDEuMDgwMDAwMDFkMGZjOHAtMworICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIDB4MS5hY2M5MWJmYTdjNTRjODAzNjU0OGM5NjhiMzZlNTc1MHAwLAorICAgIDB4MS4wODE0NDE5ZDZhNjVhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgMHgxLmE0ZTQ2OTM0MTNiOTk3MDc1NWMxNTYzM2FmMjVmOTZicDQwMCwKKyAgICAweDEuMTVjMThkZTg3NzU2M3A4CisgIH0sCisgIHsgLy8gRW50cnkgMTM5CisgICAgMHgxLjAwMDAwMDAwMDAwMDQ4MDAwMDAwMDAwMDA2MWZmZmZmcDAsCisgICAgMHgxLjFmZmZmZmZmZmZmZmZwLTUwCisgIH0sCisgIHsgLy8gRW50cnkgMTQwCisgICAgMHgxLmVhYTUyMWVkZjFiYzI4MDE0NjAyMTkxY2U2MThjMDVmcDg0NiwKKyAgICAweDEuMjU4NmNhOWNmNDExYnA5CisgIH0sCisgIHsgLy8gRW50cnkgMTQxCisgICAgMHgxLmZjYTljNDcwMTZjYjE3NjE3YjI3NWIyOThjZjlmODk0cDI2LAorICAgIDB4MS4yYjU1YzAzN2ViYjlkcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIKKyAgICAweDEuZmNiYjFlNWM4ZDUzNTc1YWJjNzg3MjZmNWNlYTZmNTFwMjYsCisgICAgMHgxLjJiNTY0YmVlMGE2Y2FwNAorICB9LAorICB7IC8vIEVudHJ5IDE0MworICAgIDB4MS5jYzBmOWQ5MTFmMWQxMDAyY2YwYWYzODJmZGY2MmYwMnAwLAorICAgIDB4MS4yYzJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDQKKyAgICAweDEuYjY4YTI4YjA5ZmU5NDdmZGYwMDEwNGY2ZDhjMjQ4MDFwNiwKKyAgICAweDEuMmM5ZTMzZjc5NDc2OXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTQ1CisgICAgMHgxLmQyZTAzNWIxODkyZDY4MDJhOWM5ZTI4OGQ4ZTk3Yzk4cDAsCisgICAgMHgxLjMzYTc0ZmYwNmZiNjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDYKKyAgICAweDEuNmFjZGU4NDQzNTZjOTIxZmE5OTMxM2FhMTg2NzA1OTNwMywKKyAgICAweDEuMzZjY2UzYzM5MjVwMQorICB9LAorICB7IC8vIEVudHJ5IDE0NworICAgIDB4MS4wNmRhZGVlMjhjMTFjODAwZmI5MDk0NDM1YzFkZTcyN3A3LAorICAgIDB4MS4zODM4OWM0OGIwZmNlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDgKKyAgICAweDEuYzc4ZjM3ZjA3Y2VhNjQyNmVkNTU0OGI0YTMxZDRhYzJwOTA0LAorICAgIDB4MS4zOTk3MzgxZDdkOTRmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDkKKyAgICAweDEuYmZlMGM1MTkxNjZjNDdmZTNhNGIzNGU2YzM0YjVhZTRwMSwKKyAgICAweDEuNDBhMzM5YzgxY2VjYnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTUwCisgICAgMHgxLmZiYzljMzA2MDMwODc0ODhhM2Q5MjI2NWI1M2MyYTY1cDkyNywKKyAgICAweDEuNDE5ZGJjYzQ4Njc3MHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTUxCisgICAgMHgxLmYxZWY5YzhhNGZkYWU4MDFiMTlmOGU0MmVmZjJjNGE4cDkzMCwKKyAgICAweDEuNDJhNTY1ZTQ1NmUwNHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTUyCisgICAgMHgxLmRhMTM0ZDVhNGQxZTE4MDBjNDM2NTQ0OTk0MDU4Y2U2cDkzNCwKKyAgICAweDEuNDQwMjAxMDA4MDRwOQorICB9LAorICB7IC8vIEVudHJ5IDE1MworICAgIDB4MS5mNGVjNDQxOTRiNjQyODAxYTRhZmQ0YzUwNjMzZThhYXA5MzgsCisgICAgMHgxLjQ1NmJmMjNlMDI0MjhwOQorICB9LAorICB7IC8vIEVudHJ5IDE1NAorICAgIDB4MS5lYTkxZDk1MzNiMzk0ODAxYmYzZDNlYzhmODhkZTU2OHA5MzksCisgICAgMHgxLjQ1YzFmZWVmODA4NmNwOQorICB9LAorICB7IC8vIEVudHJ5IDE1NQorICAgIDB4MS5jYjQxOWI5Mjc5YjM1NzYzZDExM2U2YzVkYjc5ZGM1NHA5NDMsCisgICAgMHgxLjQ3MWM3MWM3MWM3MWNwOQorICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIDB4MS42ZDE0MzA4ODI4MzIxZGU2ZmU2N2E0MTM2ZjE3ZDFmOHAyOSwKKyAgICAweDEuNDc0YzljYzQ0Y2MyNXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgMHgxLmMwMTk0YjQxODZlMjc4MDEyMGI4NzNkNzI0NTZlY2RkcDk1NiwKKyAgICAweDEuNGI5YWIxNzgxMjAzMHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgMHgxLjE1YzYwNTg1MzQ3NmI4MDAwOGNhYmM0YjIwN2ZmZDFmcDAsCisgICAgMHgxLjRlNTlkYzdlMmIwNTNwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTkKKyAgICAweDEuNmRlZTM4NzM1YTZkMzgwMGQ4ZWMxMTc2ODMyNzVmM2FwOTcyLAorICAgIDB4MS41MTBjNTQ2NWQ5ODRicDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjAKKyAgICAweDEuZjFlOTZiZTJhNTJjZDc3N2U4Y2Y1NDE4NGVkN2FlNDhwMCwKKyAgICAweDEuNTQ5YjBmNTc0MjM4MnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2MQorICAgIDB4MS5mMjUzYzU5OTBhYWQyODAwMDA0ZGI2MTViMTE0ODQ3NnAwLAorICAgIDB4MS41NTA4NWZiODY1MDFhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTYyCisgICAgMHgxLjI3OWIxYzQzYTI2NjE3ZmY0Yzc1MDhjMzVlNTYyYjIycDk5MywKKyAgICAweDEuNTgzODMxMjZlOTRiZnA5CisgIH0sCisgIHsgLy8gRW50cnkgMTYzCisgICAgMHgxLjZmZDVhYjU5MTUzZjMyYTRhMzgzNzEwYTM0MTlmNTdkcDk5NiwKKyAgICAweDEuNTk1ZTU3OTVlNTkyYnA5CisgIH0sCisgIHsgLy8gRW50cnkgMTY0CisgICAgMHgxLjVlY2YxODc2NTM5NTQ3ZmZkNjEyZTVjNGI3MTVjOGFkcDEwMDQsCisgICAgMHgxLjVjMWUwZjA3ODNjMTBwOQorICB9LAorICB7IC8vIEVudHJ5IDE2NQorICAgIDB4MS5mMmEzYzI5ZmM2ZDcyM2E2M2UzNDliYmNkNzg5NGE4YXAxMDA4LAorICAgIDB4MS41ZGFkZjVkMWU0NTJjcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjYKKyAgICAweDEuZWRjYjE0ODc5NjEzZTgwMTc2MDg3YzFhNzZkZWM5N2NwMTAwOSwKKyAgICAweDEuNWUwNTZlZDQwZTU2ZXA5CisgIH0sCisgIHsgLy8gRW50cnkgMTY3CisgICAgMHgxLmZjYzdlNWNhODBiMWY3NWMxNGQ3NjJmODQ2YmMxNjY5cDAsCisgICAgMHgxLjVmYTk3YmI0ZTkwNjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjgKKyAgICAweDEuZjhiNWM5ODdhM2Q4NzdlMThiZmNhZGE1MGYxYzU0YjBwMywKKyAgICAweDEuNjEwZTQ3ZTEzMjVkY3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgMHgxLmYxZTlkOGNmMjRmY2Q4MDI1MTI3ODc3YTczOGViMmQxcDcsCisgICAgMHgxLjYxMWIxOWRjYzUzZTRwMgorICB9LAorICB7IC8vIEVudHJ5IDE3MAorICAgIDB4MS5mZmMwNDU2OTJlOGEwMzljNTYyMmI4MjE5ZjE5YzYxOXAxMDIzLAorICAgIDB4MS42MmU0MWZmZmZmZmZhcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzEKKyAgICAweDEuZmZjMDQ1NjkzMDA5ZDNkMDY1MDYyZjkyNjdkZmY1NWVwMTAyMywKKyAgICAweDEuNjJlNDJwOQorICB9LAorICB7IC8vIEVudHJ5IDE3MgorICAgIDB4MS5mZmMwNDU2OWEyZmI4MzY3OTIzOTA5MWRmMDY4OTk3ZXAxMDIzLAorICAgIDB4MS42MmU0MjAwMDAwMWNjcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzMKKyAgICAweDEuZmZmZmZmZmZmZWIyYTFiMGUyNjNhYzY4MDc2ZWQ0ZTBwMTAyMywKKyAgICAweDEuNjJlNDJmZWZhMzllYXA5CisgIH0sCisgIHsgLy8gRW50cnkgMTc0CisgICAgMHgxLjAwMDAwYjQwMDAzZjQ4MDBlZDRlMDI5YjZiNjVkZGIxcDAsCisgICAgMHgxLjY4MHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzUKKyAgICAweDEuMTdlNjJmNzBiZWM5OTgwMWEyOTM2ZTg5YjU0YzUyNTZwOCwKKyAgICAweDEuNjg5YTdkYzU5MjFiOHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTc2CisgICAgMHgxLjZkYWFhMTMzNmEzMTUwMDE3NGNhMGJlNTY5ODA2ZmRlcDI2NCwKKyAgICAweDEuNmViMWRlNjlhY2UzMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMTc3CisgICAgMHgxLjcyYTlkYWRlYTc0OThjOTVhNTE0YzAxZDU0MDNlNWQwcDAsCisgICAgMHgxLjdiMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDE3OAorICAgIDB4MS4xZWQzZmU2NGZjNTM5ODAwZjljZDM0ZWM0YzgzZDlkMXAyLAorICAgIDB4MS43ZmZmZmZmZmZmZmY5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzkKKyAgICAweDEuMDAwMDAwMDAwMDAwMTgwMDAwMDAwMDAwMDAxZmZmZmZwMCwKKyAgICAweDEuN2ZmZmZmZmZmZmZmZnAtNTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODAKKyAgICAweDEuZmUzMTE1MmI3ZWY2YjFlMGE4YjlmZWM3ZWNkZDg1YTRwNTUzLAorICAgIDB4MS44cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAweDEuNzRkNzdiNzZkOTUxNjMyMjZjYWY4NDc2MGEzNDZhYmJwMCwKKyAgICAweDEuODEwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTgyCisgICAgMHgxLmYwZTNlNWI2YzE3YzAyYTc5OWMzMDZkYmMxYjFhOGVjcDU1NiwKKyAgICAweDEuODIwZDkyZmM0YjQyYXA4CisgIH0sCisgIHsgLy8gRW50cnkgMTgzCisgICAgMHgxLjAwMDAwMDAwYzFiNTk4MDAwMDAwMDAwMDAwMjdhN2Q1cDAsCisgICAgMHgxLjgzNmIyZmZmNmQ2Y2JwLTMzCisgIH0sCisgIHsgLy8gRW50cnkgMTg0CisgICAgMHgxLjc4YjY5ZDY5MGRiNzkyYjU3NGY5MDRkMmJiMWU5ZWJlcDU3MCwKKyAgICAweDEuOGI3YWVlNjMxZjQ4OXA4CisgIH0sCisgIHsgLy8gRW50cnkgMTg1CisgICAgMHgxLjRkYWQ5NTg3N2FlMDc4MDAwMDEyODI3ZmFjODkxNTM1cDE0NCwKKyAgICAweDEuOTA1MDExZTBkZjYyOXA2CisgIH0sCisgIHsgLy8gRW50cnkgMTg2CisgICAgMHgxLmZjYmI4Nzc4ZjYxMjE3NjY1YTZlNmYyMTE5ODgwYjI5cDE0NCwKKyAgICAweDEuOTFmZmZwNgorICB9LAorICB7IC8vIEVudHJ5IDE4NworICAgIDB4MS43YTViMjc3MWUwYTE2Y2U2ZWNkNmRlODU3M2MxMTE5MnA0LAorICAgIDB4MS45NGU1NDczOGZiNGI3cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODgKKyAgICAweDEuN2Q2NzZhMjZmZTVjYWNjZWE1OWIwMjM1NDBiZWM4MGZwMCwKKyAgICAweDEuOTg0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTg5CisgICAgMHgxLjY5ODc2NDEyOGE0NDQ4MDEwZTI1MWI1NWYzN2E3YjZlcDE0NywKKyAgICAweDEuOThmMzgxZDdkYjQ0ZnA2CisgIH0sCisgIHsgLy8gRW50cnkgMTkwCisgICAgMHgxLjQ0ZTVhNzUyZjllMWVmZmZiMzE0ODE0ODRhYTc2OTJhcDksCisgICAgMHgxLjllODE4NmIyNjdhMjhwMgorICB9LAorICB7IC8vIEVudHJ5IDE5MQorICAgIDB4MS44MDIzZDI5OGUzNzJmODAyMGVjOGNmNGE3MGFmZmE4N3AwLAorICAgIDB4MS45ZjkxYzE0NDljNDIxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTkyCisgICAgMHgxLmRmOWJkMDZkYWY4Y2U3YjEyM2RmNDNiYjUwMTA5OTM4cDI5OSwKKyAgICAweDEuOWZjMWYyMTJkNzBmNnA3CisgIH0sCisgIHsgLy8gRW50cnkgMTkzCisgICAgMHgxLjgxYTRmYmNhOWRjZGI4MDAwMDBhZTA2OGJjMjFjNGY1cDAsCisgICAgMHgxLmEzOTI3ODllYWZjZTlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTQKKyAgICAweDEuODI1ZjM1NGNjZjZmMmZmZmFiN2U5ZWI4MjhmYmM2N2RwMCwKKyAgICAweDEuYTU4MDdjYTEzOTJiMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDE5NQorICAgIDB4MS4zYzFlMjg3NjgzNGFhN2ZhNDYwMTFlOThhYmVhZGY3NnAwLAorICAgIDB4MS5icC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTk2CisgICAgMHgxLjFjN2UxYWNhNTM3OTVmZmY1NGE1ZmRmNTUyOTI2MWNhcDAsCisgICAgMHgxLmIwNHAtNAorICB9LAorICB7IC8vIEVudHJ5IDE5NworICAgIDB4MS5hMmQ1MGI4YjI4ODBlODAxYTI3YTM0ZDE5NTRkYWI1MHAzMzEsCisgICAgMHgxLmNiZDkxN2NjYWQwOTZwNworICB9LAorICB7IC8vIEVudHJ5IDE5OAorICAgIDB4MS40MTljOGE4ZGExYjc5ODAyZTIwMjk2ZTVmOTI3OTYyNnAxLAorICAgIDB4MS5kN2I2NzdlMzMzZDM4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTk5CisgICAgMHgxLjQxZDFiOGI0NjQ5ZWI4MDAwMDIzZjk3NzZkYTlkNjQ1cDEsCisgICAgMHgxLmQ4MGIxYTYzMzBiZWJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDAKKyAgICAweDEuYmYzNDQ3OTIxZmQzOTdmZDZkYjQ2MmNkMmZiYjM5ZmVwMTAsCisgICAgMHgxLmRmNTBkOWFmOWU0MTBwMgorICB9LAorICB7IC8vIEVudHJ5IDIwMQorICAgIDB4MS45OTE5Nzk0YmM4NjI5ODAyMGExOTU4ODU1MmNlYWU1Y3AwLAorICAgIDB4MS5lMDA4MWViYzMyNjRlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjAyCisgICAgMHgxLjc2YTYyYmFkNzE1YjQ4MDBkYWFkYjZmYzJiNmU2MTY2cDUsCisgICAgMHgxLmVjNWJiMjA5ZTU3MDdwMQorICB9LAorICB7IC8vIEVudHJ5IDIwMworICAgIDB4MS5jNzAxNTU0Yzc2MWFhODBlZWRmMmE0OWVmNjBlNTYyY3AyLAorICAgIDB4MS5mNjJwMAorICB9LAorICB7IC8vIEVudHJ5IDIwNAorICAgIDB4MS5jM2RkYTNjOTUyYjkxODAxMmZkNzlmYmI4ZWEzOGY2OXA3MjcsCisgICAgMHgxLmY4N2M3ODIwZDg0NDZwOAorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIDB4MS5kMjhjNjA5N2I5ZDU1Nzg4MzVlNmNmZjFiMTk0NjRjZHAyLAorICAgIDB4MS5mYzg5ZGMxYWE5MDljcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDYKKyAgICAweDEuNDIzMTE3OGMyMzQ4ZjVmNzdlZWRiMjdkYzQwNGY2MTZwNzM0LAorICAgIDB4MS5mY2ZmZmZmZmZmZmZmcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAweDEuMDQwMzQ1OTE5MTFlNzdmZjE4MzRmZDcwZDBiYmI0YjBwMCwKKyAgICAweDEuZmRhNmRmZTI3ZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDIwOAorICAgIDB4MS5hNWI1NjkxYzRiMGVmODAzY2FiMmJhZDRhMjAxM2YxNHAwLAorICAgIDB4MS5mZjFkZDFmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjA5CisgICAgMHgxLjAwMDAwMDAwMDAwMDNmZjIwMDAwMDAwMDA1ZmM4MDYycDAsCisgICAgMHgxLmZmOGZmZmZmZmZmZmZwLTUxCisgIH0sCisgIHsgLy8gRW50cnkgMjEwCisgICAgMHgxLjZkNGZkOWFiNDdjOTIwMDA3M2FhODEyN2EyNDE5YWM4cDczOCwKKyAgICAweDEuZmZlNWVmZmZmZmZmZnA4CisgIH0sCisgIHsgLy8gRW50cnkgMjExCisgICAgMHgxLjAwMDAwMDAwMDBmZmY4MDAwMDAwMDAwMDAwMWZmZmFhcDAsCisgICAgMHgxLmZmZWZmZmZmZmYwMDFwLTQxCisgIH0sCisgIHsgLy8gRW50cnkgMjEyCisgICAgMHgxLjc0NDE4YmNlNzg4ZWI0Njc0NmIzOGI1Nzg3NTllY2MwcDExLAorICAgIDB4MS5mZmVmZmZmZmZmZmZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTMKKyAgICAweDEuMDAwMDAwMDAwMGZmZjgwMDAwMDA3ZmY4MDAyMDAwMmFwMCwKKyAgICAweDEuZmZmcC00MQorICB9LAorICB7IC8vIEVudHJ5IDIxNAorICAgIDB4MS4wMDAwMDAwMDAwZmZmZmYyMDAwMDdmZjdmMjAwMDA4Y3AwLAorICAgIDB4MS5mZmZmZTNmZmZmZmZmcC00MQorICB9LAorICB7IC8vIEVudHJ5IDIxNQorICAgIDB4MS5kOGU2NGI4ZDIxODUyODFmOTg0YTRlNTExNDhkYWRlY3AyLAorICAgIDB4MS5mZmZmZmZmZmU3ZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTYKKyAgICAweDEucDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmNwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTcKKyAgICAweDEuMDAwMDAwMDAwMDAwMDdmZmZmZmZmZmZmZmY5ZmZmZmZwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtNTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAweDEuMDAwMDAwMDAwMDAwMDdmZmZmZmZmZmZmZmZkZmZmZmZwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTkKKyAgICAweDEuMzA0ZDZhZWNhMjUyNTMxNDc1ZWM5MTgyMzY5YmE0MTVwNjksCisgICAgMHgxLjdmZmZmZmZmZmZmZmZwNQorICB9LAorICB7IC8vIEVudHJ5IDIyMAorICAgIDB4MS4zMDRkNmFlY2EyNTRiM2FmNGJjNWQ2MjkzZDVmNjVjN3A2OSwKKyAgICAweDEuOHA1CisgIH0sCisgIHsgLy8gRW50cnkgMjIxCisgICAgMHgxLjMwNGQ2YWVjYTI1NzE0NGEyMTlmMWFkNTA1NThkMzJjcDY5LAorICAgIDB4MS44MDAwMDAwMDAwMDAxcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjIKKyAgICAweDEuZjhlNmMyNGI1NThlZjE3NDk5NWJjZmFkNDk1MTQ5ZjVwLTc2LAorICAgIC0weDEuYTAwMDAwMDAwMDAwMXA1CisgIH0sCisgIHsgLy8gRW50cnkgMjIzCisgICAgMHgxLmY4ZTZjMjRiNTU5MmUzNDIxZGYyN2FjZjFlMDgwMTQ0cC03NiwKKyAgICAtMHgxLmFwNQorICB9LAorICB7IC8vIEVudHJ5IDIyNAorICAgIDB4MS5mOGU2YzI0YjU1OTZkNTBmYTI4OTI1ZjhkNjU5YzFiZnAtNzYsCisgICAgLTB4MS45ZmZmZmZmZmZmZmZmcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjUKKyAgICAweDEuNTU3NzliOTg0ZjM5NWRlYTM2YTI3N2I4YmVlMmU2NGNwMTE1LAorICAgIDB4MS4zZmZmZmZmZmZmZmZmcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjYKKyAgICAweDEuNTU3NzliOTg0ZjNlYjNjOGE1MDNiNGE4ZTI0ODlkOThwMTE1LAorICAgIDB4MS40cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjcKKyAgICAweDEuNTU3NzliOTg0ZjQ0MDlhNzEzNjRmMWFlNWQyODBlNjlwMTE1LAorICAgIDB4MS40MDAwMDAwMDAwMDAxcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjgKKyAgICAweDEuMDdiNzExMmJjMWZiYzJjMGY5YzEzNjUzMzA5MzAzMTBwLTEyNywKKyAgICAtMHgxLjYwMDAwMDAwMDAwMDFwNgorICB9LAorICB7IC8vIEVudHJ5IDIyOQorICAgIDB4MS4wN2I3MTEyYmMxZmZlMTlkM2U3MDNlNGE3OTRmNzM3MnAtMTI3LAorICAgIC0weDEuNnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjMwCisgICAgMHgxLjA3YjcxMTJiYzIwNDAwNzk4MzFmNDY1MjNkN2NmNjkycC0xMjcsCisgICAgLTB4MS41ZmZmZmZmZmZmZmZmcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzEKKyAgICAweDEuNDBhNGI5YzI3MTUwODY2MTc2ZDIyZjIxMzlkMWQ0MGZwOTIzLAorICAgIDB4MS4zZmZmZmZmZmZmZmZmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzIKKyAgICAweDEuNDBhNGI5YzI3MTc4OWFmOGFmMjA1YmIzNGY3NDMzMzdwOTIzLAorICAgIDB4MS40cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzMKKyAgICAweDEuNDBhNGI5YzI3MWEwYWY4ZmU3NmU4ZDQ3ZjdmZDljMjZwOTIzLAorICAgIDB4MS40MDAwMDAwMDAwMDAxcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzQKKyAgICAweDEuNDRhMzgyNGU1MjVkNTZmYzNmMDJmODg2Mzc1ZWM4NzZwLTEwMTYsCisgICAgLTB4MS42MDAwMDAwMDAwMDAxcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzUKKyAgICAweDEuNDRhMzgyNGU1Mjg1ZWI2Yzg4Y2Q0NmJhNWRlYjQ1N2FwLTEwMTYsCisgICAgLTB4MS42cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzYKKyAgICAweDEuNDRhMzgyNGU1MmFlN2ZkY2QyOTc5YTAxMTI4MGZiYzhwLTEwMTYsCisgICAgLTB4MS41ZmZmZmZmZmZmZmZmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAweDEuMDM5OTY1MjhlMDcyYjc4YTMzMjQ4MDg4NGM3OWJhZjdwNzUsCisgICAgMHgxLjlmZmZmZmZmZmZmZmZwNQorICB9LAorICB7IC8vIEVudHJ5IDIzOAorICAgIDB4MS4wMzk5NjUyOGUwNzRiZWJjZmQ3NjQxNmZjMmMwZWI5MnA3NSwKKyAgICAweDEuYXA1CisgIH0sCisgIHsgLy8gRW50cnkgMjM5CisgICAgMHgxLjAzOTk2NTI4ZTA3NmM1ZWZjN2M4MDI1YjQ3NmRiMGQwcDc1LAorICAgIDB4MS5hMDAwMDAwMDAwMDAxcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDAKKyAgICAweDEuYWViYWJhZTNhNDE3ZWU2ZTdmYWY5ZWNmYzk1MTA0MGNwLTcwLAorICAgIC0weDEuODAwMDAwMDAwMDAwMXA1CisgIH0sCisgIHsgLy8gRW50cnkgMjQxCisgICAgMHgxLmFlYmFiYWUzYTQxYjRiZTNmNTc2ZTcwMzAzYTM3OTMycC03MCwKKyAgICAtMHgxLjhwNQorICB9LAorICB7IC8vIEVudHJ5IDI0MgorICAgIDB4MS5hZWJhYmFlM2E0MWVhOTU5NmIzZTJmM2NmOGUwZDllN3AtNzAsCisgICAgLTB4MS43ZmZmZmZmZmZmZmZmcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAweDEuZjEwNTZkYzdiZjFiMGZjODU3YjY3OTk5ZjUwMzUyNzNwMTI2LAorICAgIDB4MS41ZmZmZmZmZmZmZmZmcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDQKKyAgICAweDEuZjEwNTZkYzdiZjIyZDNkZTBlZDU3NjE1YmM1MDFmOGJwMTI2LAorICAgIDB4MS42cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDUKKyAgICAweDEuZjEwNTZkYzdiZjJhOTdmM2M1ZjQ3MmIwOTNmM2M5MWZwMTI2LAorICAgIDB4MS42MDAwMDAwMDAwMDAxcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAweDEuN2ZkOTc0ZDM3MmRlNDkwOTllZTdiZjQ4YWUzNDZlYWFwLTExNiwKKyAgICAtMHgxLjQwMDAwMDAwMDAwMDFwNgorICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIDB4MS43ZmQ5NzRkMzcyZTQ0ODZmNzIzNThhY2RkMTI2OTBlNXAtMTE2LAorICAgIC0weDEuNHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjQ4CisgICAgMHgxLjdmZDk3NGQzNzJlYTQ3ZDU0NTgzNTY2YWYxYjAwMDU2cC0xMTYsCisgICAgLTB4MS4zZmZmZmZmZmZmZmZmcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDkKKyAgICAweDEuOTNiZjRlYzI4MmJkM2IzNmNkMmY0MDExNDg4YTgzNjRwMTAxNSwKKyAgICAweDEuNWZmZmZmZmZmZmZmZnA5CisgIH0sCisgIHsgLy8gRW50cnkgMjUwCisgICAgMHgxLjkzYmY0ZWMyODJlZmIzMjBhNTdmOWFlMDJlMDFhZTUxcDEwMTUsCisgICAgMHgxLjZwOQorICB9LAorICB7IC8vIEVudHJ5IDI1MQorICAgIDB4MS45M2JmNGVjMjgzMjIyYjBhN2RjZmZiZmUxMGIzZTM0YXAxMDE1LAorICAgIDB4MS42MDAwMDAwMDAwMDAxcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTIKKyAgICAweDEuOThjNzJjYTBjYWIxNGVkYTVhY2E5N2JlZTBmZGQ0OGZwLTkyNCwKKyAgICAtMHgxLjQwMDAwMDAwMDAwMDFwOQorICB9LAorICB7IC8vIEVudHJ5IDI1MworICAgIDB4MS45OGM3MmNhMGNhZTQ2N2JmZWVlM2YxMWE0YWEyNmY3N3AtOTI0LAorICAgIC0weDEuNHA5CisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgMHgxLjk4YzcyY2EwY2IxNzgwYTU4MmZkNTBkOGQwZjk4ZDhicC05MjQsCisgICAgLTB4MS4zZmZmZmZmZmZmZmZmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTUKKyAgICAweDEuNjEwMTNhNDRhOTgxYzkxMGYyMGY4MDc1NjAwNzEyMGFwLTgyMiwKKyAgICAtMHgxLjFjYjkwYmZiZThlN2NwOQorICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIDB4MS44MDg3NzE3YTdmMDhhNzI1MTIxMGU3MWQ0N2FjYzVlM3AtOTA1LAorICAgIC0weDEuMzk3MjE3ZjdkMWNmOHA5CisgIH0sCisgIHsgLy8gRW50cnkgMjU3CisgICAgMHgxLmEyZGU1OWQ4NTQ1MjEwOWYzNDE2NWZhNTVmOWU0ZTdicC05ODgsCisgICAgLTB4MS41NjJiMjNmM2JhYjczcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTgKKyAgICAweDEuZmZmZmZmZmZmZmZmZjM1NzkzYzc2NzMwMDgwZGZiOWJwLTIsCisgICAgLTB4MS42MmU0MmZlZmEzOWYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjU5CisgICAgMHgxLjAwMDAwMDAwMDAwMDAxYWJjOWUzYjM5ODAzZjQ1YzFjcC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2MAorICAgIDB4MS4wMDAwMDAwMDAwMDAwOWFiYzllM2IzOTgwNDIxYmE2YnAtMSwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjEKKyAgICAweDEuNmEwOWU2NjdmM2JjYzQ4ZjA5NjUwMDlmMjc3OGRmOTFwLTEsCisgICAgLTB4MS42MmU0MmZlZmEzOWYwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjYyCisgICAgMHgxLjZhMDllNjY3ZjNiY2NhMzczMGZlYTA2ZTFhOTY2YzA2cC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDI2MworICAgIDB4MS42YTA5ZTY2N2YzYmNjZmRmNTg5ODQwM2QwZGNhOTkxOXAtMSwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAweDEuYWU4OWY5OTVhZDNhZDMzZjNjNDUxMTE4ZTRhZDc0YzVwLTEsCisgICAgLTB4MS42MmU0MmZlZmEzOWYwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjY1CisgICAgMHgxLmFlODlmOTk1YWQzYWQ2OWM1MDM4M2M3MzVhNTc1MDUycC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZnAtMworICB9LAorICB7IC8vIEVudHJ5IDI2NgorICAgIDB4MS5hZTg5Zjk5NWFkM2FkOWY5NjQyYjY3Y2RkMDA3ZTYwNnAtMSwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjcKKyAgICAweDEuZDU4MThkY2ZiYTQ4NzBlYTMwZjg5NzRmMzY5ZWFiOGNwLTEsCisgICAgLTB4MS42MmU0MmZlZmEzOWYwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjY4CisgICAgMHgxLmQ1ODE4ZGNmYmE0ODcyYmZiMjg2NjcwOTdmMTA4MDdlcC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIDB4MS5kNTgxOGRjZmJhNDg3NDk1MzQxNDM2YzNjNzg0MmFmMXAtMSwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzAKKyAgICAweDEuZWE0YWZhMmE0OTBkOTc5NzA2OTg4Nzg3OWI3Yzk3NGVwLTEsCisgICAgLTB4MS42MmU0MmZlZmEzOWYwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjcxCisgICAgMHgxLmVhNGFmYTJhNDkwZDk4OGMyYzE1OWNhYzIyNDhhMDFicC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDI3MgorICAgIDB4MS5lYTRhZmEyYTQ5MGQ5OTgxNTE5MmIxZDBhOTE1MjM3YnAtMSwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzMKKyAgICAweDEuZjUwNzY1YjZlNDU0MDYxMWUwNjVjMTRmMTA1MDI0Y2VwLTEsCisgICAgLTB4MS42MmU0MmZlZmEzOWYwcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjc0CisgICAgMHgxLmY1MDc2NWI2ZTQ1NDA2OGYyMjNmMmYwODI1NTFiOGVmcC0xLAorICAgIC0weDEuNjJlNDJmZWZhMzllZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIDB4MS5mNTA3NjViNmU0NTQwNzBjNjQxODljYzEzYTUzNmM1ZnAtMSwKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAweDEuMDU5YjBkMzE1ODU3NDM1ZjZjNTFjZWViMGE2YjQ2ZTZwMCwKKyAgICAweDEuNjJlNDJmZWZhMzllZXAtNgorICB9LAorICB7IC8vIEVudHJ5IDI3NworICAgIDB4MS4wNTliMGQzMTU4NTc0M2EwZDMxNTFiNDEyMDNjMjZlZXAwLAorICAgIDB4MS42MmU0MmZlZmEzOWVmcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjc4CisgICAgMHgxLjA1OWIwZDMxNTg1NzQzZTIzOWQ4Njc5NzM2MGQxNzRmcDAsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzkKKyAgICAweDEuMGI1NTg2Y2Y5ODkwZjU4N2Y1Mjc5Mjk0MTE0MTY1YTJwMCwKKyAgICAweDEuNjJlNDJmZWZhMzllZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDI4MAorICAgIDB4MS4wYjU1ODZjZjk4OTBmNjBkOWZlYWZhNjA1OWJjNGIwOHAwLAorICAgIDB4MS42MmU0MmZlZmEzOWVmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjgxCisgICAgMHgxLjBiNTU4NmNmOTg5MGY2OTM0YWFlNjIyY2EyMzc3MzQycDAsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAweDEuMTcyYjgzYzdkNTE3YWM3YzdjMGQzNDMyYWQ1NDNhZmFwMCwKKyAgICAweDEuNjJlNDJmZWZhMzllZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDI4MworICAgIDB4MS4xNzJiODNjN2Q1MTdhZDkzYTc5MGZjMDdjNTAxNDMwY3AwLAorICAgIDB4MS42MmU0MmZlZmEzOWVmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjg0CisgICAgMHgxLjE3MmI4M2M3ZDUxN2FlYWFkMzE0YzNkY2RjYWY2MjQ5cDAsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAweDEuMzA2ZmUwYTMxYjcxNGZmZTdlZWM2YmViZjdjYTlkN2RwMCwKKyAgICAweDEuNjJlNDJmZWZhMzllZXAtMworICB9LAorICB7IC8vIEVudHJ5IDI4NgorICAgIDB4MS4zMDZmZTBhMzFiNzE1MjVmNWVhZGIyMjJkYTZjZmI1YXAwLAorICAgIDB4MS42MmU0MmZlZmEzOWVmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjg3CisgICAgMHgxLjMwNmZlMGEzMWI3MTU0YzAzZTZlZjg1OWJkMTQxYWY3cDAsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODgKKyAgICAweDEuNmEwOWU2NjdmM2JjYzIzMjBkNWRlNjkwYzc4MTcyYWVwMCwKKyAgICAweDEuNjJlNDJmZWZhMzllZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDI4OQorICAgIDB4MS42YTA5ZTY2N2YzYmNjN2RhMzRmNzg2NWZiYTk1OGIzM3AwLAorICAgIDB4MS42MmU0MmZlZmEzOWVmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjkwCisgICAgMHgxLjZhMDllNjY3ZjNiY2NkODI1YzkxMjYyZWFkYzA0NDU2cDAsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZWNhODZjMzg5OGNmZjg3NzlhMWFwMCwKKyAgICAweDEuNjJlNDJmZWZhMzllZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI5MgorICAgIDB4MS5mZmZmZmZmZmZmZmZmY2E4NmMzODk4Y2ZmODFjZGQ3Y3AwLAorICAgIDB4MS42MmU0MmZlZmEzOWVmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjkzCisgICAgMHgxLjAwMDAwMDAwMDAwMDA2NTQzNjFjNGM2N2ZjMjExMDZmcDEsCisgICAgMHgxLjYyZTQyZmVmYTM5ZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTQKKyAgICAweDEuZmZmZmZmZmZmZmZmZDk1MGQ4NzEzMTlmZjFhYTQzMjhwMSwKKyAgICAweDEuNjJlNDJmZWZhMzllZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjk1CisgICAgMHgxLmZmZmZmZmZmZmZmZmY5NTBkODcxMzE5ZmYwM2Y1MGFmcDEsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWZwMAorICB9LAorICB7IC8vIEVudHJ5IDI5NgorICAgIDB4MS4wMDAwMDAwMDAwMDAwY2E4NmMzODk4Y2ZmODZhMmYxYnAyLAorICAgIDB4MS42MmU0MmZlZmEzOWYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTcKKyAgICAweDEuZmZmZmZmZmZmZmZmYjJhMWIwZTI2MzNmZTY0MGMyMWJwMywKKyAgICAweDEuNjJlNDJmZWZhMzllZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMjk4CisgICAgMHgxLmZmZmZmZmZmZmZmZmYyYTFiMGUyNjMzZmUwOTRmODM3cDMsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWZwMQorICB9LAorICB7IC8vIEVudHJ5IDI5OQorICAgIDB4MS4wMDAwMDAwMDAwMDAxOTUwZDg3MTMxOWZmMTc0OTcyYXA0LAorICAgIDB4MS42MmU0MmZlZmEzOWYwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDAKKyAgICAweDEuZmZmZmZmZmZmZmZmNjU0MzYxYzRjNjdmZDgzMjczNjFwNywKKyAgICAweDEuNjJlNDJmZWZhMzllZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzAxCisgICAgMHgxLmZmZmZmZmZmZmZmZmU1NDM2MWM0YzY3ZmMxODM0YmQzcDcsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWZwMgorICB9LAorICB7IC8vIEVudHJ5IDMwMgorICAgIDB4MS4wMDAwMDAwMDAwMDAzMmExYjBlMjYzM2ZlNTZhMTIyMnA4LAorICAgIDB4MS42MmU0MmZlZmEzOWYwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDMKKyAgICAweDEuZmZmZmZmZmZmZmZlY2E4NmMzODk4Y2ZmZGYyOGEzNmZwMTUsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWVwMworICB9LAorICB7IC8vIEVudHJ5IDMwNAorICAgIDB4MS5mZmZmZmZmZmZmZmZjYTg2YzM4OThjZmY4NDZjMDUzNHAxNSwKKyAgICAweDEuNjJlNDJmZWZhMzllZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMzA1CisgICAgMHgxLjAwMDAwMDAwMDAwMDY1NDM2MWM0YzY3ZmQ0ZDdiMzdjcDE2LAorICAgIDB4MS42MmU0MmZlZmEzOWYwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDYKKyAgICAweDEuZmZmZmZmZmZmZmZkOTUwZDg3MTMxYTAwNzk2MDM5OGZwMzEsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWVwNAorICB9LAorICB7IC8vIEVudHJ5IDMwNworICAgIDB4MS5mZmZmZmZmZmZmZmY5NTBkODcxMzE5ZmYwZTZkYzBhM3AzMSwKKyAgICAweDEuNjJlNDJmZWZhMzllZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMzA4CisgICAgMHgxLjAwMDAwMDAwMDAwMGNhODZjMzg5OGNmZmQxYmRhM2RicDMyLAorICAgIDB4MS42MmU0MmZlZmEzOWYwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDkKKyAgICAweDEuZmZmZmZmZmZmZmIyYTFiMGUyNjM0NWI4ZGZlMDA2OTdwMTAyMywKKyAgICAweDEuNjJlNDJmZWZhMzllZXA5CisgIH0sCisgIHsgLy8gRW50cnkgMzEwCisgICAgMHgxLmZmZmZmZmZmZmZmMmExYjBlMjYzNDAwZDE1ZmM1MmZmcDEwMjMsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWZwOQorICB9LAorICB7IC8vIEVudHJ5IDMxMQorICAgIEhVR0VfVkFMLAorICAgIDB4MS42MmU0MmZlZmEzOWYwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTIKKyAgICAweDEuYzg0NjRmNzYxNjE5NjJlZDE5MzA3OTZjMDc5NDI1NGFwLTEwNzEsCisgICAgLTB4MS43MmU0MmZlZmEzOWYwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICAweDEuYzg0NjRmNzYxNjUyNmJiNzA3ZjM0MDI4ZjFkNjM3ODZwLTEwNzEsCisgICAgLTB4MS43MmU0MmZlZmEzOWVmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTQKKyAgICAweDEuYzg0NjRmNzYxNjhiNzQ4MGY2YjYwZTA2ZjU1NjIyMWJwLTEwNzEsCisgICAgLTB4MS43MmU0MmZlZmEzOWVlcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTUKKyAgICAweDEuOGViZWY5ZWFjODIwYTg0Yjg2ZDFjZTFhNDQyNDQzNWZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzE2CisgICAgMHgxLjhlYmVmOWVhYzgyMGFlODY4MmI5NzkzYWM2ZDFlNzcycC0xLAorICAgIC0weDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDMxNworICAgIDB4MS44ZWJlZjllYWM4MjBiMWE0MDBhZDRlY2IwODMyMTFmNnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTgKKyAgICAweDEuYzNkNmEyNGVkODIyMTRmMGQwMWRhZjhlMWE4ZDJjYTdwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzE5CisgICAgMHgxLmMzZDZhMjRlZDgyMjE4Nzg3ZDYyNGQzZTVlYmE5NWY1cC0xLAorICAgIC0weDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDMyMAorICAgIDB4MS5jM2Q2YTI0ZWQ4MjIxYTNjNTQwNDljMTY4MGQzZjA1ZXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjEKKyAgICAweDEuZTBmYWJmYmM3MDJhM2IwNGU4NjAyM2YwNjkxY2M1OTdwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzIyCisgICAgMHgxLmUwZmFiZmJjNzAyYTNjZTVlMzFmZTA2MDkzNThiYWZkcC0xLAorICAgIC0weDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDMyMworICAgIDB4MS5lMGZhYmZiYzcwMmEzZGQ2NjA3ZmJlOThhODc3NmEwZXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjQKKyAgICAweDEuZjAzZjU2YTg4YjVkNzgxYzkwNWY2YjUxYzc2YWU5ODFwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzI1CisgICAgMHgxLmYwM2Y1NmE4OGI1ZDc5MTRiMDBhYmY5Nzc2MjczNWQxcC0xLAorICAgIC0weDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDMyNgorICAgIDB4MS5mMDNmNTZhODhiNWQ3OTkwYmZlMDY5YmE0ZDg1OGE3ZnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjcKKyAgICAweDEuZjgwZmVhYmZlZWZhNDhhOWNkMTEyZDU5MmM0MzcwMTJwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzI4CisgICAgMHgxLmY4MGZlYWJmZWVmYTQ5MjdkMTBiZGQ1NGVhZDVhYTQ2cC0xLAorICAgIC0weDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDMyOQorICAgIDB4MS5mODBmZWFiZmVlZmE0OTY2ZDMwOTM1NTJjYTFlZDMzMHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzAKKyAgICAweDEuZmMwM2ZkNTZhYTIyNGY1ODdjM2Y2ODVkNTQzZTUzZDdwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC03CisgIH0sCisgIHsgLy8gRW50cnkgMzMxCisgICAgMHgxLmZjMDNmZDU2YWEyMjRmOTdmY2JmMTMzMjk4ODg0MmRlcC0xLAorICAgIC0weDEuMHAtNworICB9LAorICB7IC8vIEVudHJ5IDMzMgorICAgIDB4MS5mYzAzZmQ1NmFhMjI0ZmI3YmNmZWU4OWQzYWFkM2Q1Y3AtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzMKKyAgICAweDEuZmUwMGZmYWFiZmZiYmM1MWNkMGUxNmQ4YjAwNWQ2NjJwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC04CisgIH0sCisgIHsgLy8gRW50cnkgMzM0CisgICAgMHgxLmZlMDBmZmFhYmZmYmJjNzFhZDFlMTE4NGFmYzE5YzdlcC0xLAorICAgIC0weDEuMHAtOAorICB9LAorICB7IC8vIEVudHJ5IDMzNQorICAgIDB4MS5mZTAwZmZhYWJmZmJiYzgxOWQyNjBlZGFhZjlmODA0YnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzYKKyAgICAweDEuZmYwMDNmZjU1NmFhODg3YjY4ODAwYmI1ZDI3ZGE0ZmZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC05CisgIH0sCisgIHsgLy8gRW50cnkgMzM3CisgICAgMHgxLmZmMDAzZmY1NTZhYTg4OGI2MDgyMGI2MDg3ZDFlOTFhcC0xLAorICAgIC0weDEuMHAtOQorICB9LAorICB7IC8vIEVudHJ5IDMzOAorICAgIDB4MS5mZjAwM2ZmNTU2YWE4ODkzNWM4MzBiMzVlMjdjMGI1N3AtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgMHgxLmZmODAwZmZlYWFiZmZlZTZmYzRlZmNmYzY0NTlkZTEzcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDAKKyAgICAweDEuZmY4MDBmZmVhYWJmZmVlZWZhNGYzY2Y3MGY1OWQ5YmZwLTEsCisgICAgLTB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDM0MQorICAgIDB4MS5mZjgwMGZmZWFhYmZmZWYyZjk0ZjVjZjQ2NGQ5ZDdhMXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMzQyCisgICAgMHgxLmZmZjAwMDNmZmY1NTU2YTlhODkwOGI0MGIzMjA4NDlkcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDMKKyAgICAweDEuZmZmMDAwM2ZmZjU1NTZhYWE4ODg4YjYwYjJjYjJmZjJwLTEsCisgICAgLTB4MS4wcC0xMworICB9LAorICB7IC8vIEVudHJ5IDM0NAorICAgIDB4MS5mZmYwMDAzZmZmNTU1NmFiMjg4NDhiNzBiMmEwODU5ZHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMzQ1CisgICAgMHgxLjQ4YjVlM2MzZTgxODYzZTUwZmZjMmVjYjc5ZjNmN2MzcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDYKKyAgICAweDEuNDhiNWUzYzNlODE4NjY3NjdiYzNiNjliYWFiZTUzNGVwMCwKKyAgICAweDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM0NworICAgIDB4MS40OGI1ZTNjM2U4MTg2Yjk5NTM1MmM2M2MwYzYyNzJlY3AwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgMHgxLjIyMTYwNDViNmY1Y2NlN2FkNzY0MjgxNTgzOWM4MTYwcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDkKKyAgICAweDEuMjIxNjA0NWI2ZjVjY2Y5Y2VkNjg4Mzg0ZTA2YjhkNDJwMCwKKyAgICAweDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDM1MAorICAgIDB4MS4yMjE2MDQ1YjZmNWNkMWUxMTk3MTNhNjM5YTBkMGI0OXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzUxCisgICAgMHgxLjEwODJiNTc3ZDM0ZWQ3NGQ3MDQ1NWRmODdlNWRlMDg5cDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTIKKyAgICAweDEuMTA4MmI1NzdkMzRlZDdkNWIxYTAxOWUyMjVjOWE5NTFwMCwKKyAgICAweDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDM1MworICAgIDB4MS4xMDgyYjU3N2QzNGVkOGU2MzQ1NTkxYjU3NGEyMDc0NHAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzU0CisgICAgMHgxLjA4MjA1NjAxMTI3ZWM5NGMwM2JiMDM2NzA4NWEzYzY0cDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTUKKyAgICAweDEuMDgyMDU2MDExMjdlYzk4ZTBiZDA4M2FiYTgwYzk3YTZwMCwKKyAgICAweDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDM1NgorICAgIDB4MS4wODIwNTYwMTEyN2VjYTEyMWJmYjg0MzRlNzcxN2ZiMHAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzU3CisgICAgMHgxLjA0MDgwYWI1NWRlMzkxNWEzNzYzNWQzZDQ3ZGMzZGY2cDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTgKKyAgICAweDEuMDQwODBhYjU1ZGUzOTE3YWI4NjRiM2U5MDQ0ZTZiNDVwMCwKKyAgICAweDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDM1OQorICAgIDB4MS4wNDA4MGFiNTVkZTM5MWJiYmE2NzYxNDA3ZDMyZDIxM3AwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzYwCisgICAgMHgxLjAyMDIwMTU2MDA0NDVhZmMxMjQzNmQ1YzZmMjJlY2YwcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjEKKyAgICAweDEuMDIwMjAxNTYwMDQ0NWIwYzMyNjM4MmJjNzM2ODlkMzJwMCwKKyAgICAweDEuMHAtNworICB9LAorICB7IC8vIEVudHJ5IDM2MgorICAgIDB4MS4wMjAyMDE1NjAwNDQ1YjJjNzJhM2FkN2M3YmY0MDBiY3AwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC03CisgIH0sCisgIHsgLy8gRW50cnkgMzYzCisgICAgMHgxLjAxMDA4MDJhYjU1Nzc3Y2E4MjI2NDE3Y2JmZWUyZmYzcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjQKKyAgICAweDEuMDEwMDgwMmFiNTU3NzdkMjhhMmE0MmQyNmFhOWVlNjdwMCwKKyAgICAweDEuMHAtOAorICB9LAorICB7IC8vIEVudHJ5IDM2NQorICAgIDB4MS4wMTAwODAyYWI1NTc3N2UyOWEzMjQ1N2RjMDIxNmMxMHAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC04CisgIH0sCisgIHsgLy8gRW50cnkgMzY2CisgICAgMHgxLjAwODAyMDA1NTYwMDExMGU3YjQxNTVhODFhZjQ4NGIxcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzY3CisgICAgMHgxLjAwODAyMDA1NTYwMDExMTI3ZDQxZDViZDcyZjRjOGYzcDAsCisgICAgMHgxLjBwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjgKKyAgICAweDEuMDA4MDIwMDU1NjAwMTExYTgxNDJkNWU4MjJmNTUxYTdwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtOQorICB9LAorICB7IC8vIEVudHJ5IDM2OQorICAgIDB4MS4wMDQwMDgwMGFhYjU1NWRiZTMwZTVjZTcxOTI3Y2JmMHAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDM3MAorICAgIDB4MS4wMDQwMDgwMGFhYjU1NWRkZTM4ZTZjZTg2ZTkyNzdhYXAwLAorICAgIDB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDM3MQorICAgIDB4MS4wMDQwMDgwMGFhYjU1NWUxZTQ4ZThjZWIxOTY3Y2YyOXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDM3MgorICAgIDB4MS4wMDA4MDAyMDAwNTU1NWZmYzEwZjEyNzUyOTVkNDM0OXAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDM3MworICAgIDB4MS4wMDA4MDAyMDAwNTU1NjAwMDExMTEyN2QyOTcyOThjOXAwLAorICAgIDB4MS4wcC0xMworICB9LAorICB7IC8vIEVudHJ5IDM3NAorICAgIDB4MS4wMDA4MDAyMDAwNTU1NjAwODExNTEyOGQyOTlkNDNjOXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMworICB9LAorICB7IC8vIEVudHJ5IDM3NQorICAgIDB4MS40NDEwOWVkYjIwNmE5MzhmYWQ2NzBiNjhhYjk5Yjc2OHAtNzM5LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXA5CisgIH0sCisgIHsgLy8gRW50cnkgMzc2CisgICAgMHgxLjQ0MTA5ZWRiMjA5MzE1YTM4OGNiMWI0MzNlY2QxYThhcC03MzksCisgICAgLTB4MS4wcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzcKKyAgICAweDEuNDQxMDllZGIyMGE3NTZhZDc2N2QyNTE2YTE1NTE0Y2NwLTczOSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwOAorICB9LAorICB7IC8vIEVudHJ5IDM3OAorICAgIDB4MS45NzU1OTU2YWQ0ZDA0YTYwNmE4Y2Q5ZGRmYjM2OGVmZnAtMzcwLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXA4CisgIH0sCisgIHsgLy8gRW50cnkgMzc5CisgICAgMHgxLjk3NTU5NTZhZDRlOWJmYjljMTNhMjdhZTRjMDdlZDM3cC0zNzAsCisgICAgLTB4MS4wcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODAKKyAgICAweDEuOTc1NTk1NmFkNGY2N2E2NjZjOTBjZjJmMzQ4OGE0NjNwLTM3MCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwNworICB9LAorICB7IC8vIEVudHJ5IDM4MQorICAgIDB4MS40MmViOWYzOWFmYTY5OTJiZjNhMTM3OTcxNWY2NjgzYnAtMTg1LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXA3CisgIH0sCisgIHsgLy8gRW50cnkgMzgyCisgICAgMHgxLjQyZWI5ZjM5YWZiMGIwODhlZDZlYjRmNDNjYzllYzdicC0xODUsCisgICAgLTB4MS4wcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODMKKyAgICAweDEuNDJlYjlmMzlhZmI1YmMzNzZhNTU3M2MxMTY0YTljMDNwLTE4NSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwNgorICB9LAorICB7IC8vIEVudHJ5IDM4NAorICAgIDB4MS45NjlkNDczMjFlNDY2MDRhMTA1ZjhkZTMyZDlkYzY4NXAtOTMsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODUKKyAgICAweDEuOTY5ZDQ3MzIxZTRjYmFiZjJkMjgwNzA5NjNiMDQxOTRwLTkzLAorICAgIC0weDEuMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMzg2CisgICAgMHgxLjk2OWQ0NzMyMWU0ZmU3ZjliYjhjNDNhNjA2NjkyYTQ4cC05MywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwNQorICB9LAorICB7IC8vIEVudHJ5IDM4NworICAgIDB4MS5jODQ2NGY3NjE2NDJmMTU1ZmFiM2U1YmIxNDRmYjkxMHAtNDcsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODgKKyAgICAweDEuYzg0NjRmNzYxNjQ2ODFlMjk5YTAxMjQ0ODc4ODRkNjRwLTQ3LAorICAgIC0weDEuMHA1CisgIH0sCisgIHsgLy8gRW50cnkgMzg5CisgICAgMHgxLmM4NDY0Zjc2MTY0ODRhMjhlOTE2Mjg4YmVkOGUwZWJmcC00NywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwNAorICB9LAorICB7IC8vIEVudHJ5IDM5MAorICAgIDB4MS5lMzU1YmJhZWU4NWFjYTUwYTNjNTBhZDJjY2ZmYmIyOXAtMjQsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTEKKyAgICAweDEuZTM1NWJiYWVlODVjYWRhNjVmNzNmMzJlODhmYjNjYzZwLTI0LAorICAgIC0weDEuMHA0CisgIH0sCisgIHsgLy8gRW50cnkgMzkyCisgICAgMHgxLmUzNTViYmFlZTg1ZDlmNTEzZDRiNjc1ZDFjMzkyM2Y2cC0yNCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMworICB9LAorICB7IC8vIEVudHJ5IDM5MworICAgIDB4MS41ZmMyMTA0MTAyN2ExYmRlYzUyNWY2ZDJiNDhhNDYzN3AtMTIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTQKKyAgICAweDEuNWZjMjEwNDEwMjdhY2JiZmNkNDY3ODBmZWU3MWVhZDJwLTEyLAorICAgIC0weDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMzk1CisgICAgMHgxLjVmYzIxMDQxMDI3YjIzYjA1MTU2YjhhZWFjNWZlZWE1cC0xMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDM5NgorICAgIDB4MS4yYzE1NWI4MjEzY2VmYzc5MzQwZjhlMzg2MjYzNDU2YXAtNiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMgorICB9LAorICB7IC8vIEVudHJ5IDM5NworICAgIDB4MS4yYzE1NWI4MjEzY2Y0NzdlOGFmMDEzMmMyYWUyM2Q0YXAtNiwKKyAgICAtMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDM5OAorICAgIDB4MS4yYzE1NWI4MjEzY2Y2ZDAxMzY2MDU1YTYxNjJhMzk1ZnAtNiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDM5OQorICAgIDB4MS4xNTJhYWEzYmY4MWM5NzU4NjIyNzJmMGYzYjEzZjU4NnAtMywKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDQwMAorICAgIDB4MS4xNTJhYWEzYmY4MWNiOWZkYjc2ZWFlMTJkMDI5NTcxZnAtMywKKyAgICAtMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDQwMQorICAgIDB4MS4xNTJhYWEzYmY4MWNjYjUwNjIxMjZkOTQ5YzUzYzdlYnAtMywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDQwMgorICAgIDB4MS43OGI1NjM2MmNlZjM2NGRmOTU0NGYxMWIwYTQ5OTAzMXAtMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDQwMworICAgIDB4MS43OGI1NjM2MmNlZjM3YzZhZWI3YjFlMGE0MTUzZTQzN3AtMiwKKyAgICAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQwNAorICAgIDB4MS43OGI1NjM2MmNlZjM4ODMwOTY5NjM0ODFkZDY2NTIzZnAtMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDUKKyAgICAweDEuOTQ3NjUwNGJhODM5OWY1Yjk3Y2FlMzViZWI3OGMzYzVwNzM4LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDYKKyAgICAweDEuOTQ3NjUwNGJhODUyZTZjMDljODU2N2MwMWM1YTY2NDhwNzM4LAorICAgIDB4MS4wcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDcKKyAgICAweDEuOTQ3NjUwNGJhODg1NzU4YWE1ZmE3NTQ1ZTEwZThlNDZwNzM4LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDgKKyAgICAweDEuNDFjN2E4ODE0YmUxOTJhNWRmMjViMDQyYWY4MjRlZmRwMzY5LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDkKKyAgICAweDEuNDFjN2E4ODE0YmViYTBlMzIzMzAwZjc3N2RhNjU4NTRwMzY5LAorICAgIDB4MS4wcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTAKKyAgICAweDEuNDFjN2E4ODE0YmZmYmQ1ZGFiNDRjZWQyNmZhY2NiZmJwMzY5LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTEKKyAgICAweDEuOTVlNTRjNWRkNDFiMjA2MDBkZDYwMWEwYWU2NzJmZjRwMTg0LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTIKKyAgICAweDEuOTVlNTRjNWRkNDIxNzdmNTNmNGQ1MjE5ZGYxMWNhM2JwMTg0LAorICAgIDB4MS4wcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTMKKyAgICAweDEuOTVlNTRjNWRkNDJlMjcxZmEyM2JmMzU4NWI2NTUwNjBwMTg0LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTQKKyAgICAweDEuNDI1OTgyY2Y1OTdhNGQ1MmM4OWVhODU3YmJhYTgwN2FwOTIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwNQorICB9LAorICB7IC8vIEVudHJ5IDQxNQorICAgIDB4MS40MjU5ODJjZjU5N2NkMjA1Y2UzZDViNGVkYjAzMTc1NnA5MiwKKyAgICAweDEuMHA2CisgIH0sCisgIHsgLy8gRW50cnkgNDE2CisgICAgMHgxLjQyNTk4MmNmNTk4MWRiNmJkOTdhYzE0YzM1ZTY2NmM2cDkyLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTcKKyAgICAweDEuMWY0M2ZjYzRiNjYxYTg5NDRhYzM4OWI2MDllMGY3NGVwNDYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwNAorICB9LAorICB7IC8vIEVudHJ5IDQxOAorICAgIDB4MS4xZjQzZmNjNGI2NjJjN2Q4NDc4ODQwMTg0MjE3NDA3NHA0NiwKKyAgICAweDEuMHA1CisgIH0sCisgIHsgLy8gRW50cnkgNDE5CisgICAgMHgxLjFmNDNmY2M0YjY2NTA2NjA0MTExYWNlMDEwNGZjOTBlcDQ2LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjAKKyAgICAweDEuMGYyZWJkMGE4MDAxN2NmYWM1NmMzMDg3NGFmYmFiOThwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMworICB9LAorICB7IC8vIEVudHJ5IDQyMQorICAgIDB4MS4wZjJlYmQwYTgwMDIwNDkyMjNmMTcwODgyYjVlZTVlZnAyMywKKyAgICAweDEuMHA0CisgIH0sCisgIHsgLy8gRW50cnkgNDIyCisgICAgMHgxLjBmMmViZDBhODAwMzEzYzBlMGZiZjA4YWI3ODg2ODY2cDIzLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjMKKyAgICAweDEuNzQ5ZWE3ZDQ3MGM2ODFlNDM2MThlYzE4ZDUzZjFiMjFwMTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDQyNAorICAgIDB4MS43NDllYTdkNDcwYzZkZjBiZTAwZTA4NGE4MTVkMWRlNnAxMSwKKyAgICAweDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgNDI1CisgICAgMHgxLjc0OWVhN2Q0NzBjNzk5NWIzM2Y4NDBhZTFmNzZlMmU3cDExLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjYKKyAgICAweDEuYjRjOTAyZTI3M2E1NGZkZmI2Nzc3MTY2ZTY3NjBkZmJwNSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgNDI3CisgICAgMHgxLmI0YzkwMmUyNzNhNTg2NzhkNmQzYmZkYjkzZGI5NmQwcDUsCisgICAgMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDQyOAorICAgIDB4MS5iNGM5MDJlMjczYTVmM2FiMTc4YzVjYzUwMzIwMTQ5Y3A1LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjkKKyAgICAweDEuZDhlNjRiOGQ0ZGRhYmYzNGQ1ODJjZDI5MDlhYWZiMmFwMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDMwCisgICAgMHgxLmQ4ZTY0YjhkNGRkYWRjYzMzYTNiYTIwNmI2OGFiYmE4cDIsCisgICAgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDQzMQorICAgIDB4MS5kOGU2NGI4ZDRkZGIxN2UwMDNhZDRiYzIxNWQ0ZWY4NnAyLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzIKKyAgICAweDEuNWJmMGE4YjE0NTc2OGE1NWRhNzMyMjE0OTlmYzRjZmJwMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQzMworICAgIDB4MS41YmYwYThiMTQ1NzY5NTM1NWZiOGFjNDA0ZTdhNzllM3AxLAorICAgIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzQKKyAgICAweDEuNWJmMGE4YjE0NTc2YWFmNDZhNDNjMDk3Yjg3YmM4MzNwMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDM1CisgICAgMHgxLmZmYzA0NTY5MmZjOWRiYzdiN2UwMzI1NzZlNWUyNmY4cDEwMjMsCisgICAgMHgxLjYyZTQxZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDQzNgorICAgIDB4MS5mZmMwNDU2OTMwMDlkM2QwNjUwNjJmOTI2N2RmZjU1ZXAxMDIzLAorICAgIDB4MS42MmU0MnA5CisgIH0sCisgIHsgLy8gRW50cnkgNDM3CisgICAgMHgxLmZmYzA0NTY5MzA0OWNiZDkxMjJjMzRjYzYyNzc2ODg0cDEwMjMsCisgICAgMHgxLjYyZTQyMDAwMDAwMDFwOQorICB9LAorICB7IC8vIEVudHJ5IDQzOAorICAgIDB4MS5jODdmMjE3NzVhMGYxYTI1NzU1ZmIwMjdmOTQ5NDlhMXAtMTA3MSwKKyAgICAtMHgxLjcyZTQyMDAwMDAwMDFwOQorICB9LAorICB7IC8vIEVudHJ5IDQzOQorICAgIDB4MS5jODdmMjE3NzVhNDgyYTA5YTQ0YWY1OWMzYzNhZTQ0YnAtMTA3MSwKKyAgICAtMHgxLjcyZTQycDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDAKKyAgICAweDEuYzg3ZjIxNzc1YTgxMzllZGQzMzY0MjMyN2JiMjVjNWZwLTEwNzEsCisgICAgLTB4MS43MmU0MWZmZmZmZmZmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDEKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMHAxMDIwCisgIH0sCisgIHsgLy8gRW50cnkgNDQyCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjk5OTk5OTk5OTk5OWFwMTAyMAorICB9LAorICB7IC8vIEVudHJ5IDQ0MworICAgIEhVR0VfVkFMLAorICAgIDB4MS4xOTk5OTk5OTk5OTlhcDEwMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDQKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuNjY2NjY2NjY2NjY2N3AxMDIxCisgIH0sCisgIHsgLy8gRW50cnkgNDQ1CisgICAgSFVHRV9WQUwsCisgICAgMHgxLmIzMzMzMzMzMzMzMzRwMTAyMQorICB9LAorICB7IC8vIEVudHJ5IDQ0NgorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wcDEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDcKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNDQ4CisgICAgSFVHRV9WQUwsCisgICAgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDkKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNDUwCisgICAgSFVHRV9WQUwsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDQ1MQorICAgIDB4MS43MjQwNDZlYjA5MzM4ZDI5OTFhMzA4OTNlN2Y0MTA4ZHA0LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTIKKyAgICAweDEuMzNkZWRjODU1OTM1ZWZhYWFmNTc4Y2VkM2Y4MjFmOTZwMiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDUzCisgICAgMHgxLjViZjBhOGIxNDU3NmFhZjQ2YTQzYzA5N2I4N2JjODMzcDEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NAorICAgIDB4MS41YmYwYThiMTQ1NzY5NTM1NWZiOGFjNDA0ZTdhNzllM3AxLAorICAgIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTUKKyAgICAweDEuNWJmMGE4YjE0NTc2OGE1NWRhNzMyMjE0OTlmYzRjZmJwMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ1NgorICAgIDB4MS4xOGJkNjY5NDcxY2FhNTU4NWM3MWNjMzJhNzkyYWM4NXAxLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDU3CisgICAgMHgxLnAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNDU4CisgICAgMHgxLnAwLAorICAgIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNDU5CisgICAgMHgxLnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNDYwCisgICAgMHgxLnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNDYxCisgICAgMHgxLnAwLAorICAgIDB4MS4wcC0xMDczCisgIH0sCisgIHsgLy8gRW50cnkgNDYyCisgICAgMHgxLnAwLAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNDYzCisgICAgMHgxLnAwLAorICAgIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDQ2NAorICAgIDB4MS5wMCwKKyAgICAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNDY1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDQ2NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZjcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNDY4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDQ2OQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNDcxCisgICAgMHgxLmQyZTE3MWNmMDQ4NzkzZTE2YTdmOTQwNmUwMGMyZGQ5cC0yLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ3MgorICAgIDB4MS43OGI1NjM2MmNlZjM4ODMwOTY5NjM0ODFkZDY2NTIzZnAtMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzMKKyAgICAweDEuNzhiNTYzNjJjZWYzN2M2YWViN2IxZTBhNDE1M2U0MzdwLTIsCisgICAgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzQKKyAgICAweDEuNzhiNTYzNjJjZWYzNjRkZjk1NDRmMTFiMGE0OTkwMzFwLTIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzUKKyAgICAweDEuYTliY2M0NmY3NjdkZmIwZDRlZWMyYjEzMzdhMDRiOWFwLTMsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzYKKyAgICAweDEuNjIwMjI3YjU5OGVmOTk0OWU2MGU0NGRjNDVkMTRkMGNwLTUsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzcKKyAgICAwLjAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzgKKyAgICAwLjAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzkKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNDgwCisgICAgMHgxLmZmZmZmZmZmZmZmMmExYjBlMjYzNDAwZDE1ZmM1MmZmcDEwMjMsCisgICAgMHgxLjYyZTQyZmVmYTM5ZWZwOQorICB9LAorICB7IC8vIEVudHJ5IDQ4MQorICAgIEhVR0VfVkFMLAorICAgIDB4MS42MmU0MmZlZmEzOWYwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODIKKyAgICAweDEuMDAwMDAwMDAwMDA3YmJjZmZiMDZmOGZkYWI4OTZkYjBwLTEwMjIsCisgICAgLTB4MS42MjMyYmRkN2FiY2QycDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODMKKyAgICAweDEuZmZmZmZmZmZmZmNmNzc5ZmY2MGRmNDBjNjMxNDE5YTJwLTEwMjMsCisgICAgLTB4MS42MjMyYmRkN2FiY2QzcDkKKyAgfSwKK307CisjZW5kaWYgLy8gX19CSU9OSUNfXworCitURVNUKG1hdGhfZXhwLCBleHBfaW50ZWwpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfZXhwX2ludGVsX2RhdGEpL3NpemVvZihleHBfaW50ZWxfZGF0YV90KTsgaSsrKSB7CisgICAgRVhQRUNUX0RPVUJMRV9FUShnX2V4cF9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCBleHAoZ19leHBfaW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOworICB9CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCit9CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX2V4cGZfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX2V4cGZfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3YWEyNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21hdGhfZXhwZl90ZXN0LmNwcApAQCAtMCwwICsxLDE0MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgZmxvYXQgZXhwZWN0ZWQ7CisgIGZsb2F0IGNhbGxfZGF0YTsKK30gZXhwZl9pbnRlbF9kYXRhX3Q7CisKK3N0YXRpYyBleHBmX2ludGVsX2RhdGFfdCBnX2V4cGZfaW50ZWxfZGF0YVtdID0geworICB7IC8vIEVudHJ5IDAKKyAgICAweDEuZTBmYWJmMDgxMjIyNzgwZDc0YzAwZmRhMzBhYTM5NDNwLTEsCisgICAgLTB4MS4wMDAwMDZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxCisgICAgMHgxLmUwZmFiZWNiZjJjYTlhY2QyNWVlZjYzYWY4NThlZDYwcC0xLAorICAgIC0weDEuMDAwMDA4cC00CisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIDB4MS5mYzAzZmNjZmI5MTMxNjdlY2ZhODRmNDhmNWI3MjA1YnAtMSwKKyAgICAtMHgxLjAwMDAyMnAtNworICB9LAorICB7IC8vIEVudHJ5IDMKKyAgICAweDEuYzNkNjQyZmY5YmYyZDI5NGMwY2UwODhlOGJhZDI3YjNwLTEsCisgICAgLTB4MS4wMDAxYjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0CisgICAgMHgxLmZmODAwZWZhZWJiODIxOGZjNWQ0OTFiOTg2ODY4OWFhcC0xLAorICAgIC0weDEuMDAwMjA4cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDUKKyAgICAweDEuOGViZDlkMDQ0NjE4MmU5MDU2ZjYwNDg5ZmNkMDAyY2RwLTEsCisgICAgLTB4MS4wMDAzODBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2CisgICAgMHgxLmUwZjk5NTAxMGZkOTZkM2YyOTRjM2ZmZTBlNTEyNDI2cC0xLAorICAgIC0weDEuMDAwOWYwcC00CisgIH0sCisgIHsgLy8gRW50cnkgNworICAgIDB4MS43OGEzYmI0YzE3YWRmNWIyZDQwZTZlZTNkYmQ0ODY2ZnAtMiwKKyAgICAtMHgxLjAwMGNwMAorICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICAweDEuZmZkZmZkMDAzYWFjYmZjYTY1OTFlN2EzODM2OGI5NGNwLTEsCisgICAgLTB4MS4wMDIwcC0xMgorICB9LAorICB7IC8vIEVudHJ5IDkKKyAgICAweDEuZmRmZjQxNmFhMzgyN2Q2MzM1YTFmZmE0M2Q0NDA1NjJwLTEsCisgICAgLTB4MS4wMGUwcC04CisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAweDEuOTkwMDdmZmJkZmZhYzMxZGZmOTBkYTVlZTQ2YTE2ZmFwLTQ3LAorICAgIC0weDEuMDBlMHA1CisgIH0sCisgIHsgLy8gRW50cnkgMTEKKyAgICAweDEuMzVjMGRjZmZmYjQ0MTlkYzI5NTU1YzIzMmYzY2RjYTdwLTEsCisgICAgLTB4MS4wMTRlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTIKKyAgICAweDEuZmJlZDlhYzdlZDAzMmFiZmM3NjMwNmEzZTFkYzgxNmJwLTEsCisgICAgLTB4MS4wNWE0cC03CisgIH0sCisgIHsgLy8gRW50cnkgMTMKKyAgICAweDEuZWZkZGI5Y2NjZDczZjcxYTRiMmI4YzAxYTU3YWU3NWZwLTEsCisgICAgLTB4MS4wNjRjcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTQKKyAgICAweDEuZmZmZGYxMDEwZjM3ZTJmMWY1ZmNhOGI5YzEzYWZmNzBwLTEsCisgICAgLTB4MS4wNzgwcC0xNgorICB9LAorICB7IC8vIEVudHJ5IDE1CisgICAgMHgxLmVmYzM1NjUzOTEyZmFkZTZhMTdhOGY4ZWY0MTA5Njc5cC0xLAorICAgIC0weDEuMDhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNgorICAgIDB4MS44YjMwOTZmZmZjYmU3Mzc5NjFmOGM2MWNkZjlkNzEzN3AtMSwKKyAgICAtMHgxLjA5MmM2OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDE3CisgICAgMHgxLmZiZGQxY2U1NjFmOWQwYTY4OTgxMmU1YmVhMDg5ZjljcC0xLAorICAgIC0weDEuMDljY3AtNworICB9LAorICB7IC8vIEVudHJ5IDE4CisgICAgMHgxLmVmYTFlZjhhMTlkNDBiYjIyYzVkM2MzMTU5OTFlMTVmcC0xLAorICAgIC0weDEuMGEyOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDE5CisgICAgMHgxLmZmZmZlZjA5Y2U0N2VjYzAzZDFkMTFmOTQ5MWU2NTE5cC0xLAorICAgIC0weDEuMGY2MzIwcC0yMQorICB9LAorICB7IC8vIEVudHJ5IDIwCisgICAgMHgxLmZmZmZlZjA5YzA0N2VkMzZmOGFhMWE3ZTY3ZTI2NTI4cC0xLAorICAgIC0weDEuMGY2NHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMQorICAgIDB4MS44ODkwNjM2ZTMxZjU0M2IzODUzYjFiMzA1ZGFlYjkzM3AtMSwKKyAgICAtMHgxLjEwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjIKKyAgICAweDEuZmZmZmVmMDAwMDQ4M2ZmZjMzNGFhYzVkYWJmZDFjN2RwLTEsCisgICAgLTB4MS4xMHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMworICAgIDB4MS5lZjFjMmQwMDJmNzYzOWQ0ZDgyZWRjMDFlYWFkMWRlZHAtMSwKKyAgICAtMHgxLjEyY2NwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNAorICAgIDB4MS5kZTdmMDEwZDFjNjQ5NDEzOWIwNTMxYmQ1YjhmMTA4YnAtMSwKKyAgICAtMHgxLjE1MzRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNQorICAgIDB4MS4wMjA1N2QxMjQ1Y2VhZjYyYTIxMDk5ZDQ0NDFhMzZkYnAtMTAxLAorICAgIC0weDEuMThwNgorICB9LAorICB7IC8vIEVudHJ5IDI2CisgICAgMHgxLmU5MDQwNzM0YTE2MzMzNTY3Y2Y2ZjMxYmM5MGQ0MzU1cC0yNywKKyAgICAtMHgxLjIxMTU4OHA0CisgIH0sCisgIHsgLy8gRW50cnkgMjcKKyAgICAweDEuOGQwM2Y4ZmZmZmIxYTI2MjJiYmE4MWQ2YWI0YTkyZmZwLTE0LAorICAgIC0weDEuMjg3ZDA4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIDB4MS5lOTdlNDMwMjU3ZTc1ZjQ5N2Y2YTNlZmU1MWZmNTA1NHAtMTEyLAorICAgIC0weDEuMzNlZmVhcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOQorICAgIDB4MS5jNjljNTE4ZWE3YzU4ODQyYzE3OGZiZDllOGNmNTM2ZXAtMTE3LAorICAgIC0weDEuNDIxODg4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMAorICAgIDB4MS5kZjJhMGY5MmMxN2U5ZmYwYmZiNzdiN2FiYmU2MzdhNnAtMTI2LAorICAgIC0weDEuNWFkNmI2cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMQorICAgIDB4MS43ODJmMjMwNjhjMTBiMWM1NTEzZGMzYjAxOTJkMzBkNHAtMTI3LAorICAgIC0weDEuNWU5NDQ0cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMgorICAgIDB4MS43MTA2MDJmOWY0Mjg4MzQ4Y2M4MzQ4NDcyYTI0ZjkzZHAtMTI3LAorICAgIC0weDEuNWVhN2YycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMworICAgIDB4MS42NWFiNzk5NGZmMzQ0MGRjZDNlZTdmOWI5YTAyNDIzYXAtMTI3LAorICAgIC0weDEuNWVjN2YycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNAorICAgIDB4MS42MDMxY2M0NTRmMWMzZTAxMjZiNzFiZjIxZTkwM2QyMHAtMTI3LAorICAgIC0weDEuNWVkN2JlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNQorICAgIDB4MS5iNzhmNjgwMDAzMGZiN2VjNzk4NGEzZTc0MTlkNmZjMnAtMTI5LAorICAgIC0weDEuNjM4MDY2cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNgorICAgIDB4MS5mOTM2M2YzNTgzMjc5YWMyNGU3NTdlZWI3NjU0OTEwY3AtMywKKyAgICAtMHgxLjY2NGVlMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAweDEuZDYxN2YxMGU2M2FkZmNkNjc0MTRjMDhkYzZmOWQwMTBwLTksCisgICAgLTB4MS42ODViNDRwMgorICB9LAorICB7IC8vIEVudHJ5IDM4CisgICAgMHgxLmNmOGM0NTAzYmYxN2Q4Yzc2NDdlOTNhMTUzYWYzN2I2cC05LAorICAgIC0weDEuNjk0MXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzkKKyAgICAweDEuZDQ3MGI3MGU5MGQ1MDk3ZTg3YjkyNWM1ZjYzZmVlN2RwLTEsCisgICAgLTB4MS42YzMzMjhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MAorICAgIDB4MS5hOWMwYTUwMTBkZTg1ZjlhNjBjODEwNGYzN2ZjNTk3ZnAtMSwKKyAgICAtMHgxLjc5Yzk4NHAtMworICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgMHgxLmRmZjEyNmZmZmNkZGUzNDM2MzIyYmEwOWRiNDU1NmUxcC0yLAorICAgIC0weDEuODNmZjM4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDIKKyAgICAweDEuZGExYjgzMDFhZjgxMzg0YjhlNDk1YzlhNGY5NzQ5N2ZwLTcyLAorICAgIC0weDEuOGE1MjllcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MworICAgIDB4MS5iYWJhZjRmZmZmZTI5MDI1Y2U3NTEwOTRhZWNmOWIwM3AtMTksCisgICAgLTB4MS45M2U3ODhwMworICB9LAorICB7IC8vIEVudHJ5IDQ0CisgICAgMHgxLjZlOTUzYWZmZmVjN2ZjM2I1ZGRhMTdjODIwNjc4ODIxcC00MywKKyAgICAtMHgxLmQ3MjNmOHA0CisgIH0sCisgIHsgLy8gRW50cnkgNDUKKyAgICAweDEuZmYwZmY2ZjNkOWY0OTNlZDYxMDM2NDg2MWE5OTU2NjRwLTEsCisgICAgLTB4MS5lMDgyYzRwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDYKKyAgICAweDEuZmYzOGE0MGEzYmMzM2Y2NWY0YmVkNWRlMGJkZmMzOTdwLTQ1LAorICAgIC0weDEuZTdmZmZlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NworICAgIDB4MS44MDI4OTkwMDM0ZmNjOGYzMzQ0MzMyMWRiMDhjNmRlOHAtMiwKKyAgICAtMHgxLmY1ZjkyMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4CisgICAgMHgxLmZmMDI0OGYxYTE3NDE4ZTYzZDQ3MTFmM2U2NmI3YzI1cC0xLAorICAgIC0weDEuZmJlY3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OQorICAgIDB4MS5mZjAyNDZmMjlmMmMyNmM1ZWQ1MWQxNjQ5OGQxZDY4ZXAtMSwKKyAgICAtMHgxLmZiZjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNTAKKyAgICAweDEuZmE4N2Y2NmY4MTI4NDkyOTIyOTBhOWY2MjY4ZWYyZjlwLTI0LAorICAgIC0weDEuZmU3ZmZlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MQorICAgIDB4MS5mZjAwNDZmMmQ3MTZjMDk1NzcwZDg0OWUxODJhM2JiMnAtMSwKKyAgICAtMHgxLmZmZjFmZXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MgorICAgIDB4MS5lMGZiMjkxMTY1NTAwNjQyMmExNWMzYzAzZjhjZTg0N3AtMSwKKyAgICAtMHgxLmZmZjhmZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDUzCisgICAgMHgxLmZmMDA0MGY0ZDZjYWMzMTZiZGNmYTEzY2M1YWY3ZTdjcC0xLAorICAgIC0weDEuZmZmZXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NAorICAgIDB4MS5mZmUwMDEwODFhMjhjNDIwMjYwYTE2MWIxMmZiYjk3ZHAtMSwKKyAgICAtMHgxLmZmZmY3ZXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NQorICAgIDB4MS4wMDAwMDEwMDAwMDA4MDAwMDAyYWFhYWFiNTU1NTU1N3AwLAorICAgIDB4MS5wLTI0CisgIH0sCisgIHsgLy8gRW50cnkgNTYKKyAgICAweDEuNDI2NDM2ZjVhZWMxYzMxM2E2ZDJiYmNkNThhMzg4ZGVwOTIsCisgICAgMHgxLjAwMDAyMnA2CisgIH0sCisgIHsgLy8gRW50cnkgNTcKKyAgICAweDEuYTYxNWU1MGE1ZTU0ZTFmMmY3ZTU3YzNmMGZmOTBjNjFwMCwKKyAgICAweDEuMDAwNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU4CisgICAgMHgxLmQ5NWQ2MzAxNGNlNWNkY2QxMTNmZWUwYTRiZTY3OTAycDIsCisgICAgMHgxLjAwMjAzOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAweDEuNzYyYjYzMDRlMTlmMzUxOGU5MDM0OGI1ZDlkYzU0NGVwMTEsCisgICAgMHgxLjAwMjJwMworICB9LAorICB7IC8vIEVudHJ5IDYwCisgICAgMHgxLmE2MzZlMDBhMGNkNWI4NTI2Mjc1NmQ1MGI5NWNjYzg4cDAsCisgICAgMHgxLjAwMmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MQorICAgIDB4MS44Y2E2ZDMwNTg3YWY1MDRhNmY2OWQzYTU3YmYzZTZhOHAxMSwKKyAgICAweDEuMDJwMworICB9LAorICB7IC8vIEVudHJ5IDYyCisgICAgMHgxLmRmYTJkNzAxZGE5OGExNDgwNjNjM2NhNmQxM2YxYmNlcDkzLAorICAgIDB4MS4wNDVjYjZwNgorICB9LAorICB7IC8vIEVudHJ5IDYzCisgICAgMHgxLjYzNDBlNzAwMDBlMjk2ZTc5MDczNjcwZWY5YzA5MTVkcDEsCisgICAgMHgxLjA1NTMzZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQKKyAgICAweDEuZWY1OTViMDE4NTQ5NDQyZWM3M2UzZDUxNjE3NjhkMTZwNSwKKyAgICAweDEuMDgwZDc0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NQorICAgIDB4MS44OWFjZGYyNmY5OTAxMmVjNTI3YzVlOWU3YzQ3MTE3ZnA0NywKKyAgICAweDEuMDgxMGVlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NgorICAgIDB4MS5mMzNiZWYwMDAwM2FiOTNhNDY3Yzk0ZmM5NWRlZWQzMHA1LAorICAgIDB4MS4wODhkNzRwMgorICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgMHgxLmIwZjM0YWZmZmY5ZGMyNDMwYjMxYzJlYTA0ZjlkZjkwcDk1LAorICAgIDB4MS4wOTdmNmFwNgorICB9LAorICB7IC8vIEVudHJ5IDY4CisgICAgMHgxLjZiNGFlNTUyMjYwNGUxMDI3MzI4M2VmYmY5ZjYyNmM5cDEsCisgICAgMHgxLjBiMGRiYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjkKKyAgICAweDEuMDAwMDExMDAwMDkwODAwMzMyZDU2MmVkNjAyZTM4MjRwMCwKKyAgICAweDEuMTBwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAweDEuYjM4MGIwZjZhMTJmYTE5ZGYzOTFmNTAzNGI4YWUzMWJwMCwKKyAgICAweDEuMTAwOWE0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzEKKyAgICAweDEuYjVkMjkzZjViZmEyMDQxNjcyMTk5OWM2YmUwM2ExOTVwMCwKKyAgICAweDEuMTJjMWZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzIKKyAgICAweDEuYjY2MDlmZjc4NWEwNDYzMDUzMTM1NGQxOTI0ZjhkMTFwMCwKKyAgICAweDEuMTM2OHAtMQorICB9LAorICB7IC8vIEVudHJ5IDczCisgICAgMHgxLjc4MjQxYWZmZmZkMWNmOTY3YTllZWM2NjNmNDU2NzdlcDEsCisgICAgMHgxLjEzZjM3YXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzQKKyAgICAweDEuYjc3NjYwZjU4YmNiMWVlMmQ3NTdhOTdmODJjODIyM2RwMCwKKyAgICAweDEuMTRhY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc1CisgICAgMHgxLjdiNGQ2ZjA2Y2YwZmJkMWZiYzA1ZDUwOTA4MzUyMDc1cDEsCisgICAgMHgxLjE2MThwMAorICB9LAorICB7IC8vIEVudHJ5IDc2CisgICAgMHgxLjI3NjU4MTAwMDJjMmViNDI2NTMwOGFjOGIxMmFmYTNicDAsCisgICAgMHgxLjI1MjcyNnAtMworICB9LAorICB7IC8vIEVudHJ5IDc3CisgICAgMHgxLjkyYjBhY2ZmZmYxYzg2NDZkNDA3NTk3NmY2MmRmYmMycDEsCisgICAgMHgxLjI1NjkzZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzgKKyAgICAweDEuZmJkMjI0YzdlMTk3MGJlZDg2OGZhZGM4MDEyYzg1YWVwMTMsCisgICAgMHgxLjM2NDQ4NnAzCisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAweDEuMDYwMDdkMDAwODQzNDlmOTQ5MTEwNGYyMGM4OWYyZjlwMjgsCisgICAgMHgxLjM2ZTY5NnA0CisgIH0sCisgIHsgLy8gRW50cnkgODAKKyAgICAweDEuNWVjMTg0MDAwMDM0MTlhZDM4MTViNDFjNDUzODRkY2NwMCwKKyAgICAweDEuNDI3ODk4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgODEKKyAgICAweDEuYjIzZmRhY2ZhM2UwZDlkMjFiMzQyOTgzZTE1OWZlZGNwMTE4LAorICAgIDB4MS40OTQ3N2NwNgorICB9LAorICB7IC8vIEVudHJ5IDgyCisgICAgMHgxLmZlYTAwMGUyNDM4MjE0Y2E5MTU1ZDRjOTFiZDI5ZTlhcDExOSwKKyAgICAweDEuNGNiMzJjcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIDB4MS5mNjcxNzZjMTlmZWUwYzlhOGQxYzljYmIyZDczYjYxN3AxMjAsCisgICAgMHgxLjRmNjg2YXA2CisgIH0sCisgIHsgLy8gRW50cnkgODQKKyAgICAweDEuZDFjMjQxMDI0ZDg0MWJkNTI5NzJiZTYxODI2MzM3MzNwMTIxLAorICAgIDB4MS41MWUwOTBwNgorICB9LAorICB7IC8vIEVudHJ5IDg1CisgICAgMHgxLmNkZTJkZDA3MGM3ZGU5Y2I1OGMwY2FlZDkyNzE0NWQ4cDMsCisgICAgMHgxLjU1YjRlMnAxCisgIH0sCisgIHsgLy8gRW50cnkgODYKKyAgICAweDEuZjcxMDkwMDljZDM0OTRhZjUyNmMxOGFmMDE5MDU1ZWVwMCwKKyAgICAweDEuNTllMDhlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODcKKyAgICAweDEuZmE3YzI2YzEyYWZiODdiNWIyYjE1MWU2NTRmNmViOTBwMCwKKyAgICAweDEuNWQ1OGFlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODgKKyAgICAweDEuY2YzZDQ2Y2I5OGE1NzE4NzFmNmRlZTFhODA1ODFhNTJwMTI2LAorICAgIDB4MS41ZmI3ZWNwNgorICB9LAorICB7IC8vIEVudHJ5IDg5CisgICAgMHgxLmZkODcxOGYzZDNlZDhmNGE1ZDhkZWM2YWU3MzI3MTU5cDcsCisgICAgMHgxLjYyOTRlMnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTAKKyAgICAweDEuZmVhZmZlZjNlNzM2YjcxNTY5YTQ3NDA0MjA1NGU4YjdwNywKKyAgICAweDEuNjJiYTIycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIDB4MS5mNzZiYTQ2NzMzZjQxNDZhMGY5NGIzZDEzMTE0OTRiY3AxMjcsCisgICAgMHgxLjYyZDJlMnA2CisgIH0sCisgIHsgLy8gRW50cnkgOTIKKyAgICAweDEuZmQ3YjlmMDFiNGRmMDg4NTVmZWIyOTAyMzIzMmZkOTlwMTI3LAorICAgIDB4MS42MmRmMjRwNgorICB9LAorICB7IC8vIEVudHJ5IDkzCisgICAgMHgxLmZmNjkxZTZkZDcxYmM4Y2IxZjFmY2ZmY2MzMmNiOTgycDEyNywKKyAgICAweDEuNjJlMzAycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NAorICAgIDB4MS5mZmNlMGE5ZTRmYzY3NjJjOTFmMWEwY2UzNThhODQ4N3AxMjcsCisgICAgMHgxLjYyZTNjY3A2CisgIH0sCisgIHsgLy8gRW50cnkgOTUKKyAgICAweDEuZmZmYzAxMDljNDAyZDhiMjNiZmVhM2ExNDgzNTgzMWJwMTUsCisgICAgMHgxLjYyZTNmMHAzCisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAweDEuZmZmMTA4NjYzMmIwZTliOTNiYzViZTQ0ZDljMWRlYTdwMTI3LAorICAgIDB4MS42MmU0MTJwNgorICB9LAorICB7IC8vIEVudHJ5IDk3CisgICAgMHgxLmZmZjYwODQ3MDc4NmQ3ZTQ3ZWYxMTY2MmYxNzkwYzJhcDEyNywKKyAgICAweDEuNjJlNDFjcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIDB4MS4yMzJiOTZmZmVjMTQ3YmIzMTY5NTU5NTg3OGJhNGY5ZHA0LAorICAgIDB4MS43MzVlNzBwMQorICB9LAorICB7IC8vIEVudHJ5IDk5CisgICAgMHgxLjhkMmM5OTAzMTc2NjBlMjFhNjRiYTc3MjNmNWUwZWQzcDgsCisgICAgMHgxLjdmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAweDEuZWQzNzlmMDI1NzgxZGRjYTI0MGM4MzM3NWVlNDk2YWJwNzAsCisgICAgMHgxLjg5Njg5YXA1CisgIH0sCisgIHsgLy8gRW50cnkgMTAxCisgICAgMHgxLjM2ODc0MTAwMDBlMmM5Zjg3MzIyMDhjOTc5MTlmYjBlcDAsCisgICAgMHgxLjhiNzZkMHAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMgorICAgIDB4MS4zMTJlNzlmZjUyMmFmNzFiOWUyZTgzN2JmODg3Mjk3MnAyLAorICAgIDB4MS44ZmUwY2FwMAorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIDB4MS43MDA4ZjEwMDIwMjI2ZTRmNTliNWFmZDhjMTE3YzA5NnA0LAorICAgIDB4MS45MTVhZmNwMQorICB9LAorICB7IC8vIEVudHJ5IDEwNAorICAgIDB4MS5kZTc1ZTkwMjI1ZWM2ZGEyY2ZiMzlkY2E2NDQwYjY4OHA3NSwKKyAgICAweDEuYTRlNDM4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUKKyAgICAweDEuNzlmMDY1MDA5NWZkNDI2ZGNlOGFhODAzZTlhNGZjOThwOSwKKyAgICAweDEuYTgyZjMwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYKKyAgICAweDEuMmUwMmQ2ZmZmZmZlZDk3ZjI3ZGNjMzc0MjQ3MmZmYTRwMSwKKyAgICAweDEuYjc4NDk4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA3CisgICAgMHgxLmZhMmI2MGZmZmZmZWVhMWM3YmQxYzc4YmI1YzQ2YjE3cDksCisgICAgMHgxLmJhZTE5NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgMHgxLjAwMDczNGZmZmZmZmJhYmE0ODIwYTJiNzlkMjk2ZDYzcDAsCisgICAgMHgxLmNkMzk4MnAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkKKyAgICAweDEuZDU0MTU4ZjU0MzRlZGIyYTIzNDM1OWJlZmIyMjA5YmNwMTAsCisgICAgMHgxLmUyNjU3MHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTEwCisgICAgMHgxLjk5ZmIyOTAxNzZlYzAxMGQwNjhjNWY4ODhhMThkODQ3cDg3LAorICAgIDB4MS5lNjMyYWFwNQorICB9LAorICB7IC8vIEVudHJ5IDExMQorICAgIDB4MS5iYzhlNTMwMDAwM2UxMmVhZjBlYTA0YjhjNTA3NjQ3NHAyLAorICAgIDB4MS5mMDJkNjhwMAorICB9LAorICB7IC8vIEVudHJ5IDExMgorICAgIDB4MS41NjU2NzJmZmZmZTc4MTY4Y2VhOWVkMWRlZWQyYzQ3MnAxLAorICAgIDB4MS5mN2IwNWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMKKyAgICAweDEuYTY2NGRjZWQ3Y2MzM2VkZTk2NTM5MjcyMmIwZDg3YmZwMjIsCisgICAgMHgxLmY3ZmZmZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTE0CisgICAgMHgxLmZlOGJmZDM4NzYyNDkwYzdmNjhlODBhNGJkZjNhMTdkcDkwLAorICAgIDB4MS5mODk2YTJwNQorICB9LAorICB7IC8vIEVudHJ5IDExNQorICAgIDB4MS5jYzI0ZDUwYzE2NTAwMDg0NzU0ZmJkZGM2MGU3Mjc2Y3AyLAorICAgIDB4MS5mOGZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIDB4MS43MjE1MWM2OWZmMGU5ODUwYjg4Y2JkOWE2MDBmZWE1MHAxMSwKKyAgICAweDEuZmY5MDBlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcKKyAgICAweDEuM2Q1OWQyZDhiMjJiNDFjMmJiNjMzNGM5YmU3YmU5MDJwOTIsCisgICAgMHgxLmZmZGZmZXA1CisgIH0sCisgIHsgLy8gRW50cnkgMTE4CisgICAgMHgxLjc0ODc1MzAwMDQyYjk0M2JhMzY4OTk0ZWVjOGRjYjBlcDExLAorICAgIDB4MS5mZmZiZmVwMgorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIDB4MS5kOGU2MDkwY2VmZTgwNDg3OTQ4YzAxZWZlM2NmNGM1YXAyLAorICAgIDB4MS5mZmZmZGNwMAorICB9LAorICB7IC8vIEVudHJ5IDEyMAorICAgIDB4MS4wMDAwMDBmZmZmZmU3ZmZmZmUyYWFhYWJiNTU1NTcwMnAwLAorICAgIDB4MS5mZmZmZmNwLTI1CisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgMHgxLjMwNGQxZWQ5NTExYmY1YTZhNWIyMGU0Y2RiZjZkOGZmcDY5LAorICAgIDB4MS43ZmZmZmVwNQorICB9LAorICB7IC8vIEVudHJ5IDEyMgorICAgIDB4MS4zMDRkNmFlY2EyNTRiM2FmNGJjNWQ2MjkzZDVmNjVjN3A2OSwKKyAgICAweDEuODBwNQorICB9LAorICB7IC8vIEVudHJ5IDEyMworICAgIDB4MS4zMDRkYjcwMDA2OTI0ODY2YmMxODQ1MDk3YzkxZTQ4OHA2OSwKKyAgICAweDEuODAwMDAycDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAweDEuZjhlNjQ0MTFiNGM3NDI5ZjI2MGNiNzI1Mzk4ODA5MTlwLTc2LAorICAgIC0weDEuYTAwMDAycDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUKKyAgICAweDEuZjhlNmMyNGI1NTkyZTM0MjFkZjI3YWNmMWUwODAxNDRwLTc2LAorICAgIC0weDEuYTBwNQorICB9LAorICB7IC8vIEVudHJ5IDEyNgorICAgIDB4MS5mOGU3NDA4NTE1ZWNmMDA5Y2I1YjdmZTgwMDAzYWU3NHAtNzYsCisgICAgLTB4MS45ZmZmZmVwNQorICB9LAorICB7IC8vIEVudHJ5IDEyNworICAgIDB4MS41NTc2ZjBkY2FjMjE3ODdmMmQ1N2IxNGE3MDAyMjRlM3AxMTUsCisgICAgMHgxLjNmZmZmZXA2CisgIH0sCisgIHsgLy8gRW50cnkgMTI4CisgICAgMHgxLjU1Nzc5Yjk4NGYzZWIzYzhhNTAzYjRhOGUyNDg5ZDk4cDExNSwKKyAgICAweDEuNDBwNgorICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIDB4MS41NTc4NDY1NDQ3YjlkNWY4MzI0NmFmMWU0OGU4MjI1YnAxMTUsCisgICAgMHgxLjQwMDAwMnA2CisgIH0sCisgIHsgLy8gRW50cnkgMTMwCisgICAgMHgxLjA3YjY4ZDUwNWE2MGRkNDQ0YjhiMmJkZmUwNjAzOGNmcC0xMjcsCisgICAgLTB4MS42MDAwMDJwNgorICB9LAorICB7IC8vIEVudHJ5IDEzMQorICAgIDB4MS4wN2I3MTEyYmMxZmZlMTlkM2U3MDNlNGE3OTRmNzM3MnAtMTI3LAorICAgIC0weDEuNjBwNgorICB9LAorICB7IC8vIEVudHJ5IDEzMgorICAgIDB4MS4wN2I3OTUwNzZiOGNhYTQxMjMzNGU3ZGRmMThiMDBmNXAtMTI3LAorICAgIC0weDEuNWZmZmZlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMKKyAgICAweDEuMDM5OTI0NDI4ZjQ3NTExYzAzZTc1ZGQ2MjNiYzQ3ZTFwNzUsCisgICAgMHgxLjlmZmZmZXA1CisgIH0sCisgIHsgLy8gRW50cnkgMTM0CisgICAgMHgxLjAzOTk2NTI4ZTA3NGJlYmNmZDc2NDE2ZmMyYzBlYjkycDc1LAorICAgIDB4MS5hMHA1CisgIH0sCisgIHsgLy8gRW50cnkgMTM1CisgICAgMHgxLjAzOTlhNjBmNDFkYmMyYjA4NTIyMTMxMmY1MDUwODlkcDc1LAorICAgIDB4MS5hMDAwMDJwNQorICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIDB4MS5hZWJhNGYzNTAyZDgzNzk1MTg4OTc0MDg5MDc0NzYwOXAtNzAsCisgICAgLTB4MS44MDAwMDJwNQorICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIDB4MS5hZWJhYmFlM2E0MWI0YmUzZjU3NmU3MDMwM2EzNzkzMnAtNzAsCisgICAgLTB4MS44MHA1CisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgMHgxLmFlYmIyNjkyNjA0YTBiZTEwY2M5ZjNhMDllNzdhYWUxcC03MCwKKyAgICAtMHgxLjdmZmZmZXA1CisgIH0sCisgIHsgLy8gRW50cnkgMTM5CisgICAgMHgxLmYxMDQ3NTQ1NDY1Zjk3YWFkNjc3NGRmZTE2Yjk2MGUycDEyNiwKKyAgICAweDEuNWZmZmZlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDAKKyAgICAweDEuZjEwNTZkYzdiZjIyZDNkZTBlZDU3NjE1YmM1MDFmOGJwMTI2LAorICAgIDB4MS42MHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTQxCisgICAgMHgxLmYxMDY2NjRhYjQyNzZiODMzOTkzMDUwYzlhYTA5YTk1cDEyNiwKKyAgICAweDEuNjAwMDAycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIKKyAgICAweDEuN2ZkOGI0ZTZlODc1YjU5ODhhZWIyZTkwODNjYWY3OTFwLTExNiwKKyAgICAtMHgxLjQwMDAwMnA2CisgIH0sCisgIHsgLy8gRW50cnkgMTQzCisgICAgMHgxLjdmZDk3NGQzNzJlNDQ4NmY3MjM1OGFjZGQxMjY5MGU1cC0xMTYsCisgICAgLTB4MS40MHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTQ0CisgICAgMHgxLjdmZGEzNGMwNWQ0OTM4N2IzODM4YzVjMmJmYWQwMTIzcC0xMTYsCisgICAgLTB4MS4zZmZmZmVwNgorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIDB4MS42YTMyZTE2MDY0NWRjNTM2NGRhOTNjMTIzMjE1YzU5MXAtMTA3LAorICAgIC0weDEuMjc0NzY4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDYKKyAgICAweDEuNDJhMjgwYjQ3ZjFlNTBlNzMwN2M5NTk5ZTk0OTc1ZGFwLTEyMSwKKyAgICAtMHgxLjRlOGVkMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTQ3CisgICAgMHgxLjFmNjQ3OWQ2ZTc5ZDkyNDc1OWM3ZjQ0MTYwYWQzMGUzcC0xMzUsCisgICAgLTB4MS43NWQ2MzhwNgorICB9LAorICB7IC8vIEVudHJ5IDE0OAorICAgIDB4MS5mZmZmZmZlZmEzOWVmMzlhN2YyNTQ1MzVkOTM1MTQyYnAtMiwKKyAgICAtMHgxLjYyZTQzMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0OQorICAgIDB4MS4wMDAwMDBmN2QxY2ZmMTlmMGYzMzAzNmNmMDFjMTIwY3AtMSwKKyAgICAtMHgxLjYyZTQyZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1MAorICAgIDB4MS4wMDAwMDFmN2QxZDE2OTcwZGZjYjM2MGVmYTkxZmVhMHAtMSwKKyAgICAtMHgxLjYyZTQyY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDE1MQorICAgIDB4MS42YTA5ZTY2MjJhZWJmYmQ3YTRhMDM3NzcyMjNjNjA0ZnAtMSwKKyAgICAtMHgxLjYyZTQzMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDE1MgorICAgIDB4MS42YTA5ZTcxNzJmZGY1YTJlNTc3MWYzODY2YTI1NTE0ZXAtMSwKKyAgICAtMHgxLjYyZTQyZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDE1MworICAgIDB4MS42YTA5ZTdjYzM0ZDMxMzA3ODQwOTdiOGQ4YTdjOTAwOHAtMSwKKyAgICAtMHgxLjYyZTQyY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDE1NAorICAgIDB4MS5hZTg5Zjk5MjNjYmI0OTE4M2FhYmIzM2I5ZGUxYmM4MnAtMSwKKyAgICAtMHgxLjYyZTQzMHAtMworICB9LAorICB7IC8vIEVudHJ5IDE1NQorICAgIDB4MS5hZTg5ZjlmZGRmMzliYjFiYjk0YmFhMzZjOThhYmI3YnAtMSwKKyAgICAtMHgxLjYyZTQyZXAtMworICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIDB4MS5hZTg5ZmE2OTgxYjg0ODA3ZDc4YjdmMjU5MTA5NTZkZXAtMSwKKyAgICAtMHgxLjYyZTQyY3AtMworICB9LAorICB7IC8vIEVudHJ5IDE1NworICAgIDB4MS5kNTgxOGRjZGRhMzAxYmNhOTVmYmNjNTMwYWI5YjkzOHAtMSwKKyAgICAtMHgxLjYyZTQzMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDE1OAorICAgIDB4MS5kNTgxOGUwODhhNjFkOTMwZGYxYjA4N2E0YjkyOGVhMHAtMSwKKyAgICAtMHgxLjYyZTQyZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDE1OQorICAgIDB4MS5kNTgxOGU0MzNhOTM5ZGVkMmU3MjY2Y2IxM2QyOTk4NnAtMSwKKyAgICAtMHgxLjYyZTQyY3AtNAorICB9LAorICB7IC8vIEVudHJ5IDE2MAorICAgIDB4MS5lYTRhZmEyOTRlNjBiNGJmYTI0NDk0NjEwZTc1MjYxY3AtMSwKKyAgICAtMHgxLjYyZTQzMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDE2MQorICAgIDB4MS5lYTRhZmE0N2YzMTA1ODQ5YWRjY2ZhMWRkNWIzZjkzZHAtMSwKKyAgICAtMHgxLjYyZTQyZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDE2MgorICAgIDB4MS5lYTRhZmE2Njk3YmZmZGJlMDQ0ZmE3Y2RhZDRiM2VlN3AtMSwKKyAgICAtMHgxLjYyZTQyY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDE2MworICAgIDB4MS5mNTA3NjViNjY0M2VmYWEyY2E5ZTY2OTA5MzNlNWMzN3AtMSwKKyAgICAtMHgxLjYyZTQzMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDE2NAorICAgIDB4MS5mNTA3NjVjNjBjN2EyODk0OGQ4MmYzMWE3Mjg4MjMyZnAtMSwKKyAgICAtMHgxLjYyZTQyZXAtNgorICB9LAorICB7IC8vIEVudHJ5IDE2NQorICAgIDB4MS5mNTA3NjVkNWI0YjU1NzAzOTI0MGYxMjc3MDVjMTFlN3AtMSwKKyAgICAtMHgxLjYyZTQyY3AtNgorICB9LAorICB7IC8vIEVudHJ5IDE2NgorICAgIDB4MS4wNTliMGQyMTQxODZjZmY5YTk3NGJjYjg4M2NmNjhkZXAwLAorICAgIDB4MS42MmU0MmNwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjcKKyAgICAweDEuMDU5YjBkMjk2ZTVmMzkyNDY5MGNlMTA1MzNmZTU5OWJwMCwKKyAgICAweDEuNjJlNDJlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgMHgxLjA1OWIwZDMxOWIzN2EyOTA4ZjY4NGZhZDdiZmI5NGQwcDAsCisgICAgMHgxLjYyZTQzMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDE2OQorICAgIDB4MS4wYjU1ODZhZWI2OGVhMjRjOTI4MWYyNWI3OWQ4NGY4M3AwLAorICAgIDB4MS42MmU0MmNwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzAKKyAgICAweDEuMGI1NTg2YmY2YmU3MGRiZGE2MmY3MTQ4Y2Q1YTc4OGZwMCwKKyAgICAweDEuNjJlNDJlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTcxCisgICAgMHgxLjBiNTU4NmQwMjEzZjdhM2EwZjYzYWZhMjA3ZWE3NTg3cDAsCisgICAgMHgxLjYyZTQzMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDE3MgorICAgIDB4MS4xNzJiODM4MzI3YWUxZjlkN2U3MDQxOGE0NzZkYTQ4MHAwLAorICAgIDB4MS42MmU0MmNwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzMKKyAgICAweDEuMTcyYjgzYTYwZDFlOTIzMGNiM2I1MmNkMTIwMGI4ZGNwMCwKKyAgICAweDEuNjJlNDJlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTc0CisgICAgMHgxLjE3MmI4M2M4ZjI4ZjA5MjBjNjE0ZmM0NDU2ZGUwNDlmcDAsCisgICAgMHgxLjYyZTQzMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDE3NQorICAgIDB4MS4zMDZmZTAwZDUyMWM1YjM1YmYzNzM3MzhiMGExMmUxYXAwLAorICAgIDB4MS42MmU0MmNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzYKKyAgICAweDEuMzA2ZmUwNTk2ZTE0NjgwZGM1NGYzYTJlYTE1ZTNhZmNwMCwKKyAgICAweDEuNjJlNDJlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTc3CisgICAgMHgxLjMwNmZlMGE1OGEwYzg3ZWNjOTZjZDQwNWQ4YjU4MmRicDAsCisgICAgMHgxLjYyZTQzMHAtMworICB9LAorICB7IC8vIEVudHJ5IDE3OAorICAgIDB4MS42YTA5ZTUwM2IyYTdkZDk5Y2Y5NDc0YjExNWE3M2VjZXAwLAorICAgIDB4MS42MmU0MmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzkKKyAgICAweDEuNmEwOWU1YjhiNzlhOGNiNDYwMmI0MmNkNGM5OWU2MGVwMCwKKyAgICAweDEuNjJlNDJlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTgwCisgICAgMHgxLjZhMDllNjZkYmM4ZDk2NTE2YTMwM2VkMDI4OWM1ZDM2cDAsCisgICAgMHgxLjYyZTQzMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDE4MQorICAgIDB4MS5mZmZmZmMxMDVjNjRlYzMyOTJmMmFmYWMzZjFhNDMwZHAwLAorICAgIDB4MS42MmU0MmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODIKKyAgICAweDEuZmZmZmZlMTA1YzYxZmM4ZWY2M2M2NWM2NmE5ZDQ5NzFwMCwKKyAgICAweDEuNjJlNDJlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTgzCisgICAgMHgxLjAwMDAwMDA4MmUzMDg2NzVhYmNiM2MyMTVlYWNmODRhcDEsCisgICAgMHgxLjYyZTQzMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE4NAorICAgIDB4MS5mZmZmZjgyMGI4ZDE5Nzc5NjkyZmIwZmNjMDI4MTI0NnAxLAorICAgIDB4MS42MmU0MmNwMAorICB9LAorICB7IC8vIEVudHJ5IDE4NQorICAgIDB4MS5mZmZmZmMyMGI4YzVkOGVhZmY0YWMwMTNjZjczNDYzOXAxLAorICAgIDB4MS42MmU0MmVwMAorICB9LAorICB7IC8vIEVudHJ5IDE4NgorICAgIDB4MS4wMDAwMDAxMDVjNjEwZDJlNDJmNDU5MjI3NjhhOGU2Y3AyLAorICAgIDB4MS42MmU0MzBwMAorICB9LAorICB7IC8vIEVudHJ5IDE4NworICAgIDB4MS5mZmZmZjA0MTcxYzIyYjQzYTI4ZDgwODhjMzQ3YmYxZnAzLAorICAgIDB4MS42MmU0MmNwMQorICB9LAorICB7IC8vIEVudHJ5IDE4OAorICAgIDB4MS5mZmZmZjg0MTcxOTMzMTBhNDI5YjcxZTcwZDc5MjE4NnAzLAorICAgIDB4MS42MmU0MmVwMQorICB9LAorICB7IC8vIEVudHJ5IDE4OQorICAgIDB4MS4wMDAwMDAyMGI4YzIxYjY4MzM2MDNlNTE4OTdjNTk4Y3A0LAorICAgIDB4MS42MmU0MzBwMQorICB9LAorICB7IC8vIEVudHJ5IDE5MAorICAgIDB4MS5mZmZmZTA4MmU0MDA0N2M4OWRmYTQxZDA5YzFlMWVmOHA3LAorICAgIDB4MS42MmU0MmNwMgorICB9LAorICB7IC8vIEVudHJ5IDE5MQorICAgIDB4MS5mZmZmZjA4MmUzNDQ1ZWU1NWIzZmE4NGE1ZGQ4NDljOXA3LAorICAgIDB4MS42MmU0MmVwMgorICB9LAorICB7IC8vIEVudHJ5IDE5MgorICAgIDB4MS4wMDAwMDA0MTcxODQzYWZmMWM5ZWYxNDM0MWJmYTQyZXA4LAorICAgIDB4MS42MmU0MzBwMgorICB9LAorICB7IC8vIEVudHJ5IDE5MworICAgIDB4MS5mZmZmYzEwNWM5ZjA1NDg3NjBhODIzYjBkZmRhZWI2NnAxNSwKKyAgICAweDEuNjJlNDJjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTQKKyAgICAweDEuZmZmZmUxMDVjNzAwYjEwYzNlMmE1NDlmYmRlYmIwZGFwMTUsCisgICAgMHgxLjYyZTQyZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTk1CisgICAgMHgxLjAwMDAwMDgyZTMwODg2YjkxMGI5ZDg3NTI4MjgzODlkcDE2LAorICAgIDB4MS42MmU0MzBwMworICB9LAorICB7IC8vIEVudHJ5IDE5NgorICAgIDB4MS5mZmZmODIwYjliOWZiYzZkNWRkYTQwNmFkOWY5MzM1NHAzMSwKKyAgICAweDEuNjJlNDJjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTcKKyAgICAweDEuZmZmZmMyMGI4ZmUxMmYxMDE3NDBhYzk2NTNmNzhmZTNwMzEsCisgICAgMHgxLjYyZTQyZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTk4CisgICAgMHgxLjAwMDAwMTA1YzYxMTUwNWQ3Zjc0YTQxNDMzMzEyZHAzMiwKKyAgICAweDEuNjJlNDMwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTkKKyAgICAweDEuZmZmZTA4MmYyODY4OGQzODcyYWI4YWE2OWYzZGMzNThwMTI3LAorICAgIDB4MS42MmU0MmNwNgorICB9LAorICB7IC8vIEVudHJ5IDIwMAorICAgIDB4MS5mZmZmMDgyZTZjN2ZlZDFkM2ZkNWNmZjdlMWY2MDU5MXAxMjcsCisgICAgMHgxLjYyZTQyZXA2CisgIH0sCisgIHsgLy8gRW50cnkgMjAxCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS42MmU0MzBwNgorICB9LAorICB7IC8vIEVudHJ5IDIwMgorICAgIDAuMGYsCisgICAgLTB4MS45ZDFkYTJwNgorICB9LAorICB7IC8vIEVudHJ5IDIwMworICAgIDAuMGYsCisgICAgLTB4MS45ZDFkYTBwNgorICB9LAorICB7IC8vIEVudHJ5IDIwNAorICAgIDB4MS4wMDAwNzMzZDM3YjFkMDhhODBkN2Y1YjQ1YTU3Yjg4OHAtMTQ5LAorICAgIC0weDEuOWQxZDllcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDUKKyAgICAweDEuOGViZWY5MjM2OGEzZWFmYTUxOTc0MDU4NGMwYmMzYjRwLTEsCisgICAgLTB4MS4wMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDYKKyAgICAweDEuOGViZWY5ZWFjODIwYWU4NjgyYjk3OTNhYzZkMWU3NzJwLTEsCisgICAgLTB4MS5wLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAweDEuOGViZWZhNGU3N2RmMzVhZTgyYjU3YWYxMjE1MThjZWZwLTEsCisgICAgLTB4MS5mZmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDgKKyAgICAweDEuYzNkNmExZGRlMjc5OTJlMTI5ZWQ3OGE2NTU3M2Y4NzhwLTEsCisgICAgLTB4MS4wMDAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDkKKyAgICAweDEuYzNkNmEyNGVkODIyMTg3ODdkNjI0ZDNlNWViYTk1ZjVwLTEsCisgICAgLTB4MS5wLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTAKKyAgICAweDEuYzNkNmEyODc1MmY2NjVkYjJlZWExZmE1ODc2Nzk4YTNwLTEsCisgICAgLTB4MS5mZmZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTEKKyAgICAweDEuZTBmYWJmODA1MGQyNDkxOWQzNTc5NDZmOWU4ODA3NTRwLTEsCisgICAgLTB4MS4wMDAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAweDEuZTBmYWJmYmM3MDJhM2NlNWUzMWZlMDYwOTM1OGJhZmRwLTEsCisgICAgLTB4MS5wLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTMKKyAgICAweDEuZTBmYWJmZGE3ZmQ2Mzk5ZDYzMjM5MWY5NzcxZjNlODJwLTEsCisgICAgLTB4MS5mZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTQKKyAgICAweDEuZjAzZjU2ODk4NzY4MGY4NDE5ZGU3ZDY2ZDBhNjE5ZWNwLTEsCisgICAgLTB4MS4wMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTUKKyAgICAweDEuZjAzZjU2YTg4YjVkNzkxNGIwMGFiZjk3NzYyNzM1ZDFwLTEsCisgICAgLTB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTYKKyAgICAweDEuZjAzZjU2YjgwZDU4MmU5NzEyZTE1ZGYzY2M5ZThlOWNwLTEsCisgICAgLTB4MS5mZmZmZmVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTcKKyAgICAweDEuZjgwZmVhYjAyZTdhZjM2NzViMzZlYjZjM2M3MWE1ZWVwLTEsCisgICAgLTB4MS4wMDAwMDJwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAweDEuZjgwZmVhYmZlZWZhNDkyN2QxMGJkZDU0ZWFkNWFhNDZwLTEsCisgICAgLTB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTkKKyAgICAweDEuZjgwZmVhYzdjZjM5ZjQzNzRkNzQ1ODA4YTc4MTMwZWNwLTEsCisgICAgLTB4MS5mZmZmZmVwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjAKKyAgICAweDEuZmMwM2ZkNGViYTEyNWE0ZDM0NTViZjcyY2JjOTM5ZjdwLTEsCisgICAgLTB4MS4wMDAwMDJwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjEKKyAgICAweDEuZmMwM2ZkNTZhYTIyNGY5N2ZjYmYxMzMyOTg4ODQyZGVwLTEsCisgICAgLTB4MS5wLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjIKKyAgICAweDEuZmMwM2ZkNWFhMjJhNGE0OTQ5MGJhZDEyOGJhNWFmOTNwLTEsCisgICAgLTB4MS5mZmZmZmVwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjMKKyAgICAweDEuZmUwMGZmYTZjM2Y5YmQyMDI5Mjg5N2Y0MmQ3YjlkNzZwLTEsCisgICAgLTB4MS4wMDAwMDJwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjQKKyAgICAweDEuZmUwMGZmYWFiZmZiYmM3MWFkMWUxMTg0YWZjMTljN2VwLTEsCisgICAgLTB4MS5wLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjUKKyAgICAweDEuZmUwMGZmYWNiZGZjYmMxZDZjMWE0ZGNjMTFkZGI2ZDhwLTEsCisgICAgLTB4MS5mZmZmZmVwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjYKKyAgICAweDEuZmYwMDNmZjM1N2FhNDg5NzA5NTdhMmNmN2Q3YTZjYWNwLTEsCisgICAgLTB4MS4wMDAwMDJwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjcKKyAgICAweDEuZmYwMDNmZjU1NmFhODg4YjYwODIwYjYwODdkMWU5MWFwLTEsCisgICAgLTB4MS5wLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjgKKyAgICAweDEuZmYwMDNmZjY1NjJhYTg4NjRiYjc1N2E0ZWQ4ZDk2ODZwLTEsCisgICAgLTB4MS5mZmZmZmVwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjI5CisgICAgMHgxLmZmODAwZmZkYWFmZmY2ZWZlNGRmM2Y3ZjVjZTIzYWNjcC0xLAorICAgIC0weDEuMDAwMDAycC0xMAorICB9LAorICB7IC8vIEVudHJ5IDIzMAorICAgIDB4MS5mZjgwMGZmZWFhYmZmZWVlZmE0ZjNjZjcwZjU5ZDliZnAtMSwKKyAgICAtMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzEKKyAgICAweDEuZmY4MDBmZmYyYWEwMDJlZWI0ZmIzZDMyYzQ5OGE4ZmZwLTEsCisgICAgLTB4MS5mZmZmZmVwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjMyCisgICAgMHgxLmZmZjAwMDNmZGY1NjU2YTZhOTkzMmRmNjI4M2NmY2JkcC0xLAorICAgIC0weDEuMDAwMDAycC0xMworICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIDB4MS5mZmYwMDAzZmZmNTU1NmFhYTg4ODhiNjBiMmNiMmZmMnAtMSwKKyAgICAtMHgxLnAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzQKKyAgICAweDEuZmZmMDAwNDAwZjU0ZDZhY2E4YzMzNDE2MTAxMDA5OWVwLTEsCisgICAgLTB4MS5mZmZmZmVwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMjM1CisgICAgMHgxLjQ4YjVlMzcxYmE5ZjdmYzIyNGM3NWQxOThmZTRjZDFicDAsCisgICAgMHgxLmZmZmZmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDIzNgorICAgIDB4MS40OGI1ZTNjM2U4MTg2Njc2N2JjM2I2OWJhYWJlNTM0ZXAwLAorICAgIDB4MS5wLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAweDEuNDhiNWU0Njg0MzBhNzE4MTQ0NzY0N2ZjMDNhZGJmYjZwMCwKKyAgICAweDEuMDAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjM4CisgICAgMHgxLjIyMTYwNDM3MmM5YzQ2NzMyZGQ3MmU5OTZjOWUyM2YycDAsCisgICAgMHgxLmZmZmZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDIzOQorICAgIDB4MS4yMjE2MDQ1YjZmNWNjZjljZWQ2ODgzODRlMDZiOGQ0MnAwLAorICAgIDB4MS5wLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDAKKyAgICAweDEuMjIxNjA0YTNmNGRkZWY4OTc0YzAwNzlmMjNmZDBiYjlwMCwKKyAgICAweDEuMDAwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjQxCisgICAgMHgxLjEwODJiNTY2Y2IyMzgwZTBiZTBkNTU5YTAxNTAxNzJmcDAsCisgICAgMHgxLmZmZmZmZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDI0MgorICAgIDB4MS4xMDgyYjU3N2QzNGVkN2Q1YjFhMDE5ZTIyNWM5YTk1MXAwLAorICAgIDB4MS5wLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAweDEuMTA4MmI1OTllM2E1ODhmMTIwZTYxYWY0ODY5Yzk4NDJwMCwKKyAgICAweDEuMDAwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgMjQ0CisgICAgMHgxLjA4MjA1NWY4ZDE3YzE5YTY3YmU0ZjcwNThlOWE1NzBhcDAsCisgICAgMHgxLmZmZmZmZXAtNgorICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIDB4MS4wODIwNTYwMTEyN2VjOThlMGJkMDgzYWJhODBjOTdhNnAwLAorICAgIDB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAweDEuMDgyMDU2MTE5NDg0MmEyMzQzZTgxZmQ1ZmFiNDUxZWZwMCwKKyAgICAweDEuMDAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgMjQ3CisgICAgMHgxLjA0MDgwYWIxNGRjMzY2YWQ2MTE2YzM5ZTNjMmQwYTllcDAsCisgICAgMHgxLmZmZmZmZXAtNworICB9LAorICB7IC8vIEVudHJ5IDI0OAorICAgIDB4MS4wNDA4MGFiNTVkZTM5MTdhYjg2NGIzZTkwNDRlNmI0NXAwLAorICAgIDB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDkKKyAgICAweDEuMDQwODBhYmQ3ZTIzZTc0NjI4ODI5NmMxMzEzZjIxYjFwMCwKKyAgICAweDEuMDAwMDAycC02CisgIH0sCisgIHsgLy8gRW50cnkgMjUwCisgICAgMHgxLjAyMDIwMTUzZmM0MDU4NjIzNWRlY2Y0ZWI3MjdhMTVmcDAsCisgICAgMHgxLmZmZmZmZXAtOAorICB9LAorICB7IC8vIEVudHJ5IDI1MQorICAgIDB4MS4wMjAyMDE1NjAwNDQ1YjBjMzI2MzgyYmM3MzY4OWQzMnAwLAorICAgIDB4MS5wLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTIKKyAgICAweDEuMDIwMjAxNWEwODRjNjA2YzQzODRmOWE3ZmYyZWU0MjVwMCwKKyAgICAweDEuMDAwMDAycC03CisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgMHgxLjAxMDA4MDI5YjQ1NmY3YTg1NTUzMGIxNTEwNTVmY2NjcDAsCisgICAgMHgxLmZmZmZmZXAtOQorICB9LAorICB7IC8vIEVudHJ5IDI1NAorICAgIDB4MS4wMTAwODAyYWI1NTc3N2QyOGEyYTQyZDI2YWE5ZWU2N3AwLAorICAgIDB4MS5wLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTUKKyAgICAweDEuMDEwMDgwMmNiNzU4NzgyOWY2ZGEzMmNlNDA1OGI5NDBwMCwKKyAgICAweDEuMDAwMDAycC04CisgIH0sCisgIHsgLy8gRW50cnkgMjU2CisgICAgMHgxLjAwODAyMDA0ZDVjMDAxMGZmMjUxZDEzNGQ5YmJkZjhjcDAsCisgICAgMHgxLmZmZmZmZXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTcKKyAgICAweDEuMDA4MDIwMDU1NjAwMTExMjdkNDFkNWJkNzJmNGM4ZjNwMCwKKyAgICAweDEucC05CisgIH0sCisgIHsgLy8gRW50cnkgMjU4CisgICAgMHgxLjAwODAyMDA2NTY4MDMxMTg1MzgxZjZkMmM1ZjZhYzkwcDAsCisgICAgMHgxLjAwMDAwMnAtOQorICB9LAorICB7IC8vIEVudHJ5IDI1OQorICAgIDB4MS4wMDQwMDgwMDZhYTU1M2RkYzBlMzE3YjBmYTU5YjFjNHAwLAorICAgIDB4MS5mZmZmZmVwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgMHgxLjAwNDAwODAwYWFiNTU1ZGRlMzhlNmNlODZlOTI3N2FhcDAsCisgICAgMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjEKKyAgICAweDEuMDA0MDA4MDEyYWQ1NTlkZTU4ZjExOGQ3N2IwNzAzYWZwMCwKKyAgICAweDEuMDAwMDAycC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI2MgorICAgIDB4MS4wMDA4MDAxZmY4NTUxNWZmMDEyZTY4Y2QyZDY5YzU4OHAwLAorICAgIDB4MS5mZmZmZmVwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMjYzCisgICAgMHgxLjAwMDgwMDIwMDA1NTU2MDAwMTExMTI3ZDI5NzI5OGM5cDAsCisgICAgMHgxLnAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAweDEuMDAwODAwMjAxMDU1ZDYwMjAxOTY2YmRkMzk4NjdmNWNwMCwKKyAgICAweDEuMDAwMDAycC0xMworICB9LAorICB7IC8vIEVudHJ5IDI2NQorICAgIDB4MS45NjljN2JlM2FkODc0YzA2Nzg3YWJhOTU1ZDIwNmQ4M3AtOTMsCisgICAgLTB4MS4wMDAwMDJwNgorICB9LAorICB7IC8vIEVudHJ5IDI2NgorICAgIDB4MS45NjlkNDczMjFlNGNiYWJmMmQyODA3MDk2M2IwNDE5NHAtOTMsCisgICAgLTB4MS5wNgorICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIDB4MS45NjlkYWNkOTdjY2UyZDliMDA1ZmY1NzZiN2EwYmI0ZnAtOTMsCisgICAgLTB4MS5mZmZmZmVwNQorICB9LAorICB7IC8vIEVudHJ5IDI2OAorICAgIDB4MS5jODQ1ZGQ2NDkwYWIyZDljN2IwY2ZlYzljNTAwODQ4M3AtNDcsCisgICAgLTB4MS4wMDAwMDJwNQorICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIDB4MS5jODQ2NGY3NjE2NDY4MWUyOTlhMDEyNDQ4Nzg4NGQ2NHAtNDcsCisgICAgLTB4MS5wNQorICB9LAorICB7IC8vIEVudHJ5IDI3MAorICAgIDB4MS5jODQ2ODg3ZWUzYzVkMTcwNWJlNjE3MmQxMTc4NzBhMHAtNDcsCisgICAgLTB4MS5mZmZmZmVwNAorICB9LAorICB7IC8vIEVudHJ5IDI3MQorICAgIDB4MS5lMzU1N2Y0NDM0YWQ3YmU5ZTA2YzI5OTY2ZjU2ZTYyYnAtMjQsCisgICAgLTB4MS4wMDAwMDJwNAorICB9LAorICB7IC8vIEVudHJ5IDI3MgorICAgIDB4MS5lMzU1YmJhZWU4NWNhZGE2NWY3M2YzMmU4OGZiM2NjNnAtMjQsCisgICAgLTB4MS5wNAorICB9LAorICB7IC8vIEVudHJ5IDI3MworICAgIDB4MS5lMzU1ZDllNDQ1MDk0NzBmMGFhNzNhYzdlZjEyMTQ4ZnAtMjQsCisgICAgLTB4MS5mZmZmZmVwMworICB9LAorICB7IC8vIEVudHJ5IDI3NAorICAgIDB4MS41ZmMxZmE0NGUyMjY5YzljOTcwNjQ2OWMyMGI5M2U5NXAtMTIsCisgICAgLTB4MS4wMDAwMDJwMworICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIDB4MS41ZmMyMTA0MTAyN2FjYmJmY2Q0Njc4MGZlZTcxZWFkMnAtMTIsCisgICAgLTB4MS5wMworICB9LAorICB7IC8vIEVudHJ5IDI3NgorICAgIDB4MS41ZmMyMWIzZjEzMjhjYzE2MjEwNTc2ZDNjNzBiZjk4YnAtMTIsCisgICAgLTB4MS5mZmZmZmVwMgorICB9LAorICB7IC8vIEVudHJ5IDI3NworICAgIDB4MS4yYzE1NTIyMTY5MThiOThiMWNlZjdiMDRmNzEwZTM2Y3AtNiwKKyAgICAtMHgxLjAwMDAwMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjc4CisgICAgMHgxLjJjMTU1YjgyMTNjZjQ3N2U4YWYwMTMyYzJhZTIzZDRhcC02LAorICAgIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzkKKyAgICAweDEuMmMxNTYwMzI2OTQ2YjA3OGIwOWY4ZmFlYmUyZmMyODdwLTYsCisgICAgLTB4MS5mZmZmZmVwMQorICB9LAorICB7IC8vIEVudHJ5IDI4MAorICAgIDB4MS4xNTJhYTVlNzRkN2M3MzcyOGFkYTA2NjNmMjI0YTM4MXAtMywKKyAgICAtMHgxLjAwMDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjgxCisgICAgMHgxLjE1MmFhYTNiZjgxY2I5ZmRiNzZlYWUxMmQwMjk1NzFmcC0zLAorICAgIC0weDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAweDEuMTUyYWFjNjY0ZDczNWM0MzQ2Y2MyN2Y0MmEzZDgzYjFwLTMsCisgICAgLTB4MS5mZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDI4MworICAgIDB4MS43OGI1NjA3MTY0MmZhODM3Yzk1MTllZWMxMGE3ZjkzN3AtMiwKKyAgICAtMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjg0CisgICAgMHgxLjc4YjU2MzYyY2VmMzdjNmFlYjdiMWUwYTQxNTNlNDM3cC0yLAorICAgIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAweDEuNzhiNTY0ZGI4NDU3OWI5NDkwZTdiOTU1NzAyNmM2NDdwLTIsCisgICAgLTB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODYKKyAgICAweDEuNDI1OTMyMzkwMmRiYzZlNjJlM2UwN2NlMjZjZDkwNGNwOTIsCisgICAgMHgxLmZmZmZmZXA1CisgIH0sCisgIHsgLy8gRW50cnkgMjg3CisgICAgMHgxLjQyNTk4MmNmNTk3Y2QyMDVjZTNkNWI0ZWRiMDMxNzU2cDkyLAorICAgIDB4MS5wNgorICB9LAorICB7IC8vIEVudHJ5IDI4OAorICAgIDB4MS40MjVhMjNmYzQzMmZiNWQ1NTYwMDZhNGQ4ZTdlZTExYnA5MiwKKyAgICAweDEuMDAwMDAycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODkKKyAgICAweDEuMWY0M2Q4ZGMzOTA4YjhlZDg3YTVhYmQ1MDYyMTcwNmFwNDYsCisgICAgMHgxLmZmZmZmZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMjkwCisgICAgMHgxLjFmNDNmY2M0YjY2MmM3ZDg0Nzg4NDAxODQyMTc0MDc0cDQ2LAorICAgIDB4MS5wNQorICB9LAorICB7IC8vIEVudHJ5IDI5MQorICAgIDB4MS4xZjQ0NDQ5NWJlOGUxNjE2YTFlNWUzODg3NzliYzE0NnA0NiwKKyAgICAweDEuMDAwMDAycDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTIKKyAgICAweDEuMGYyZWFjMTc5NGI4ZjNlZGI1YzEwZDI2YTUxZjQyMGZwMjMsCisgICAgMHgxLmZmZmZmZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMjkzCisgICAgMHgxLjBmMmViZDBhODAwMjA0OTIyM2YxNzA4ODJiNWVlNWVmcDIzLAorICAgIDB4MS5wNAorICB9LAorICB7IC8vIEVudHJ5IDI5NAorICAgIDB4MS4wZjJlZGVmMDU5YzFiMjIzMTJiZWQ5NjQwMDZlZTYzM3AyMywKKyAgICAweDEuMDAwMDAycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTUKKyAgICAweDEuNzQ5ZTljMmY3YmI2Y2Y1YTI3NmVlMDgyMzZjMmQ2YzNwMTEsCisgICAgMHgxLmZmZmZmZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjk2CisgICAgMHgxLjc0OWVhN2Q0NzBjNmRmMGJlMDBlMDg0YTgxNWQxZGU2cDExLAorICAgIDB4MS5wMworICB9LAorICB7IC8vIEVudHJ5IDI5NworICAgIDB4MS43NDllYmYxZTViZmU3NTcwMTlkZTRlMjJiMTEzZmRlOXAxMSwKKyAgICAweDEuMDAwMDAycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTgKKyAgICAweDEuYjRjOGZjMGY0ZmE3YTJmMjQ1OWE2ZWY1M2MzMTVmMGZwNSwKKyAgICAweDEuZmZmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTkKKyAgICAweDEuYjRjOTAyZTI3M2E1ODY3OGQ2ZDNiZmRiOTNkYjk2ZDBwNSwKKyAgICAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDAKKyAgICAweDEuYjRjOTEwODhiYmYzMzMzNmYwZWU1MmIxYWQ4NThlNDNwNSwKKyAgICAweDEuMDAwMDAycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAweDEuZDhlNjQ3ZGI4MTQ3NzNmNDE5MjYyZWU0NzdhOTg2MTZwMiwKKyAgICAweDEuZmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDIKKyAgICAweDEuZDhlNjRiOGQ0ZGRhZGNjMzNhM2JhMjA2YjY4YWJiYThwMiwKKyAgICAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDMKKyAgICAweDEuZDhlNjUyZjBlNzE3ZDkyZDE1Y2Q2MTAwMjJhZTUxZTNwMiwKKyAgICAweDEuMDAwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDQKKyAgICAweDEuNWJmMGE3NTU1NGNlOTFlODNkNDIxYzJhN2MwNzVjYjJwMSwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzA1CisgICAgMHgxLjViZjBhOGIxNDU3Njk1MzU1ZmI4YWM0MDRlN2E3OWUzcDEsCisgICAgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzA2CisgICAgMHgxLjViZjBhYjY5MjZjYWFmYTFhMDE1OGQ3OTY5M2FjOGUxcDEsCisgICAgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wMTI0CisgIH0sCisgIHsgLy8gRW50cnkgMzA4CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS45OTk5OWFwMTI0CisgIH0sCisgIHsgLy8gRW50cnkgMzA5CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS4xOTk5OWFwMTI1CisgIH0sCisgIHsgLy8gRW50cnkgMzEwCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS42NjY2NjhwMTI1CisgIH0sCisgIHsgLy8gRW50cnkgMzExCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5iMzMzMzRwMTI1CisgIH0sCisgIHsgLy8gRW50cnkgMzEyCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMzEzCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzE0CisgICAgSFVHRV9WQUxGLAorICAgIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDMxNQorICAgIEhVR0VfVkFMRiwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDMxNgorICAgIEhVR0VfVkFMRiwKKyAgICAweDEuZmZmZmZjcDEyNworICB9LAorICB7IC8vIEVudHJ5IDMxNworICAgIDB4MS43MjQwNDkwYTE2NTYyMGQ5YjkyMmFhYTIyYThlNGMwOXA0LAorICAgIDB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDMxOAorICAgIDB4MS4zM2RlZGQ2NzIwODRjY2E2MTJhYWIyYjlhM2U4MTdiYnAyLAorICAgIDB4MS45MjFmYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDMxOQorICAgIDB4MS41YmYwYWI2OTI2Y2FhZmExYTAxNThkNzk2OTNhYzhlMXAxLAorICAgIDB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDMyMAorICAgIDB4MS41YmYwYThiMTQ1NzY5NTM1NWZiOGFjNDA0ZTdhNzllM3AxLAorICAgIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDMyMQorICAgIDB4MS41YmYwYTc1NTU0Y2U5MWU4M2Q0MjFjMmE3YzA3NWNiMnAxLAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjIKKyAgICAweDEuMThiZDY2ZmI2MmIzMTkwMGNjMDc2MzRkZWJhNDM0NTZwMSwKKyAgICAweDEuOTIxZmI2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzIzCisgICAgMHgxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0cDAsCisgICAgMHgxLjAwMDAwMnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMzI0CisgICAgMHgxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0cDAsCisgICAgMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMzI1CisgICAgMHgxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzcDAsCisgICAgMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzI2CisgICAgMHgxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzcDAsCisgICAgMHgxLmZmZmZmOHAtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzI3CisgICAgMHgxLnAwLAorICAgIDB4MS5wLTE0OAorICB9LAorICB7IC8vIEVudHJ5IDMyOAorICAgIDB4MS5wMCwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjkKKyAgICAweDEucDAsCisgICAgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDMzMAorICAgIDB4MS5wMCwKKyAgICAtMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDMzMQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMzMyCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjhwLTEsCisgICAgLTB4MS5mZmZmZjhwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDMzNAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOHAtMSwKKyAgICAtMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4cC0xLAorICAgIC0weDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjdwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDMzNworICAgIDB4MS5kMmUxNzEyM2QyYWUwMmFiYmNmODk2ZjIwMjVlMzQ2M3AtMiwKKyAgICAtMHgxLjkyMWZiNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDMzOAorICAgIDB4MS43OGI1NjRkYjg0NTc5Yjk0OTBlN2I5NTU3MDI2YzY0N3AtMiwKKyAgICAtMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDMzOQorICAgIDB4MS43OGI1NjM2MmNlZjM3YzZhZWI3YjFlMGE0MTUzZTQzN3AtMiwKKyAgICAtMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQwCisgICAgMHgxLjc4YjU2MDcxNjQyZmE4MzdjOTUxOWVlYzEwYTdmOTM3cC0yLAorICAgIC0weDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDEKKyAgICAweDEuYTliY2MzMzczZWZkM2U0ZDZhOTZiZTdhNzU2MmY0MjhwLTMsCisgICAgLTB4MS45MjFmYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDM0MgorICAgIDB4MS42MjAyMjVhZTVlOTM0OTU5M2Q2YmI2MThjMjMxNTQ1ZXAtNSwKKyAgICAtMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMzQzCisgICAgMC4wZiwKKyAgICAtMHgxLmZmZmZmY3AxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDQKKyAgICAwLjBmLAorICAgIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDM0NQorICAgIDAuMCwKKyAgICAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgMzQ2CisgICAgMHgxLmZmZmYwODJlNmM3ZmVkMWQzZmQ1Y2ZmN2UxZjYwNTkxcDEyNywKKyAgICAweDEuNjJlNDJlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDcKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLjYyZTQzMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgMHgxLjAwMDA0YmY5NGY2M2UzZmE2ODYyMjIxNDhmMTI5M2M0cC0xMjYsCisgICAgLTB4MS41ZDU4OWVwNgorICB9LAorICB7IC8vIEVudHJ5IDM0OQorICAgIDB4MS5mZmZmOTdmMjkyY2U4MGU0OTQyMzFjNjQ5NmU5Y2JmNXAtMTI3LAorICAgIC0weDEuNWQ1OGEwcDYKKyAgfSwKK307CisjZW5kaWYgLy8gX19CSU9OSUNfXworCitURVNUKG1hdGhfZXhwZiwgZXhwZl9pbnRlbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19leHBmX2ludGVsX2RhdGEpL3NpemVvZihleHBmX2ludGVsX2RhdGFfdCk7IGkrKykgeworICAgIEVYUEVDVF9GTE9BVF9FUShnX2V4cGZfaW50ZWxfZGF0YVtpXS5leHBlY3RlZCwgZXhwZihnX2V4cGZfaW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOworICB9CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCit9CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX2xvZ190ZXN0LmNwcCBiL3Rlc3RzL21hdGhfbG9nX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMmE4NDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tYXRoX2xvZ190ZXN0LmNwcApAQCAtMCwwICsxLDE2NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgZG91YmxlIGV4cGVjdGVkOworICBkb3VibGUgY2FsbF9kYXRhOworfSBsb2dfaW50ZWxfZGF0YV90OworCitzdGF0aWMgbG9nX2ludGVsX2RhdGFfdCBnX2xvZ19pbnRlbF9kYXRhW10gPSB7CisgIHsgLy8gRW50cnkgMAorICAgIDB4MS5kNzdmZDEzZDI3ZmZlZmZmZmZmZmZmZmZiNWVkOTg0M3AtMTEsCisgICAgMHgxLjAwM2FmNmMzN2MxZDNwMAorICB9LAorICB7IC8vIEVudHJ5IDEKKyAgICAweDEuNDExZWZkMjk3Yzc4MDgwMDAwMDAwMDAwMTZkNjE1YjJwLTYsCisgICAgMHgxLjA1MTEyNzkyOTM0YjNwMAorICB9LAorICB7IC8vIEVudHJ5IDIKKyAgICAweDEuZDQ4NDA2NjQ0NDZmYjgwMDAwMDAwMDAwMWY1NzRmZmNwLTYsCisgICAgMHgxLjA3NmQxZDhjNzVlYTZwMAorICB9LAorICB7IC8vIEVudHJ5IDMKKyAgICAweDEuZjZlNGMzY2VkN2M3MWZmZmZmZmZmZmZmZmVlOTQ3ZGFwLTMsCisgICAgMHgxLjQ3NDA4Y2I5NTgzY2VwMAorICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAweDEuMWEwNDA4NzEyZTAwOWZmZmZmZmZmZmZmZmVlNDYwMTJwLTIsCisgICAgMHgxLjUxMmIzMTI2NDU0ZjNwMAorICB9LAorICB7IC8vIEVudHJ5IDUKKyAgICAweDEuOGI1MmMxNWVhOWMyMzdmZmZmZmZmZmZmZmU2MTM5NWNwLTIsCisgICAgMHgxLjc4OWU5NWIxMTU3OGNwMAorICB9LAorICB7IC8vIEVudHJ5IDYKKyAgICAweDEuZDcwNzAyOWJiNTlkOGZmZmZmZmZmZmZmZmVjZjZlZjZwLTIsCisgICAgMHgxLjk1ODQ5N2Y3YjM1M2ZwMAorICB9LAorICB7IC8vIEVudHJ5IDcKKyAgICAweDEuMDcyN2FmNWZlZThmNWZmZmZmZmZmZmZmZmVjNzAyMWZwLTEsCisgICAgMHgxLmFjMDMyYThkMmVjMjNwMAorICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICAweDEuMTJmY2NlMDJlZmIzMjAwMDAwMDAwMDAwMDE0MzViOTBwLTEsCisgICAgMHgxLmI2MDRlMTk0MjA5OGRwMAorICB9LAorICB7IC8vIEVudHJ5IDkKKyAgICAweDEuMTc4ZTZkM2VjYWNlOTgwMDAwMDAwMDAwMDEzMDBhY2NwLTEsCisgICAgMHgxLmI5ZjFmYTQ1ODc5NjdwMAorICB9LAorICB7IC8vIEVudHJ5IDEwCisgICAgMHgxLjYyZjcxYzQ2NTZiNjBmZmZmZmZmZmZmZmZmN2YxNjhlcC0xLAorICAgIDB4MS4wMDA5NzY1ODFjZTRlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIDB4MS5kNjMzNmE4ODA3N2E5ZmZmZmZmZmZmZmZmZmUxZjgxN3AwLAorICAgIDB4MS45MWE4ZGZmNTQwZmY3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMgorICAgIDB4MS4wMTZlODJjZWRhMzU4ZmZmZmZmZmZmZmZmZmFjYmY2MnAxLAorICAgIDB4MS5kZTM3ZmIzMWZkNWZjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMworICAgIDB4MS4xZTEyNmY1ZDk1ZjM4ODAwMDAwMDAwMDAwMDVkMzc2MXAxLAorICAgIDB4MS4yYjExOTllNDk3NzM5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNAorICAgIDB4MS4yZjM4MzJjYWQzZDVmMDAwMDAwMDAwMDAwMDc4ODAxY3AxLAorICAgIDB4MS41NWYwZWFhMWIyZmM4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNQorICAgIDB4MS40MmVlM2M3ZGM0OTQ2MDAwMDAwMDAwMDAwMDRlYTU3ZnAxLAorICAgIDB4MS44ZWRlNDkyZDk2MDcycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNgorICAgIDB4MS42YjVkZjdlM2NkNDIxODAwMDAwMDAwMDAwMDQ0NjEzYnAxLAorICAgIDB4MS4xMTg2NzYzN2NiZDAzcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIDB4MS43ZTdmMDk1NzAzZWVlN2ZmZmZmZmZmZmZmZmFjZGMwNnAxLAorICAgIDB4MS4zZDlkN2Q1OTdhOWRkcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOAorICAgIDB4MS45Njg3YzgzZmFmMDA2N2ZmZmZmZmZmZmZmZmI5Y2YzZnAxLAorICAgIDB4MS43ZjM4MjU3NzhhYWFmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOQorICAgIDB4MS44M2Q0YmNkZWJiM2YzZmZmZmZmZmZmZmZmZmZmYWNjOXAyLAorICAgIDB4MS5hYzUwYjQwOWM4YWVlcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMAorICAgIDB4MS5mZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMGFhYWFhYXAtNTMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDIxCisgICAgMHgxLjc2ZTdlNWQ3YjZlYWJmZmZmZmZmZmZmZmZmZjA2ZjgwcDMsCisgICAgMHgxLmRlN2NkNjc1MTAyOWFwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMgorICAgIDB4MS5mZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMGFhYWFhYXAtNTMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDIzCisgICAgLTB4MS45MTU1MGMzNTdmODgzZmZmODk5ZGZmMzBkMGYzMDNlZXA4LAorICAgIDB4MS4wMDAwMDAwMDAwMDAzcC01NzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNAorICAgIDB4MS43ZmZmZmZmZmZmZmZiODAwMDAwMDAwMDAxMWZmZmZmZnAtNTAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDI1CisgICAgMHgxLmJmZmZmZmZmZmZmZTc4MDAwMDAwMDAwMWM5NTU1NTU1cC00OCwKKyAgICAweDEuMDAwMDAwMDAwMDAxY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAweDEuN2ZkZmZmZmZmZjcwMTdmZjAwMDA0N2VlMDE3ZmY1MmNwLTQxLAorICAgIDB4MS4wMDAwMDAwMDAwYmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNworICAgIDB4MS4wZmZmZmZmZmVkZjAwMDAwMDE5OTZhYWFhYTgxZTI4YXAtMzUsCisgICAgMHgxLjAwMDAwMDAwMjIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIDB4MS5mZmZmZmZmZjAwMDAwMDAwYWFhYWFhYWEyYWFhYWFhYnAtMzMsCisgICAgMHgxLjAwMDAwMDAxMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjkKKyAgICAweDEuN2ZmZmZmNzAwMDAwNDdmZmZmZDc4MDAwMTg0Y2NjYmRwLTI1LAorICAgIDB4MS4wMDAwMDBjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMAorICAgIDB4MS4wYTJlYTNlNzdhZjA2MDAwNDAxMGM0ZjZiNDM3ZmI0NXAxLAorICAgIDB4MS4wMDA3MHAzCisgIH0sCisgIHsgLy8gRW50cnkgMzEKKyAgICAweDEuOTA0MTIwOTRkMzY3Zjk5ZjNjNjE1MjMxYWQ5OGJmM2RwLTEzLAorICAgIDB4MS4wMDBjODI1NzNmNWY5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMgorICAgIDB4MS5mZmUwMDJhYTZhYjExMDY2NzhhZDhiMzE4Y2IzODU0NXAtMTIsCisgICAgMHgxLjAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzMKKyAgICAweDEuYmZjZjA3MjQyOTY5ZDE1ZGI0ZDJiM2VmZTFjMDM3ZTBwLTExLAorICAgIDB4MS4wMDM4MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQKKyAgICAweDEuZDc3ZmQxM2QyN2ZmZWZmZmZmZmZmZmZmYjVlZDk4NDNwLTExLAorICAgIDB4MS4wMDNhZjZjMzdjMWQzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNQorICAgIDB4MS5lYTA1NGNlODUwOGU0ODc0NDQyZTk1ZTQxNzE4YjBkZXAtMTAsCisgICAgMHgxLjAwN2E5ZWE3YTllODBwMAorICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgMHgxLmZmMDA0YTdhYjkwODNmOWUxNzE3ZDNhNGFhZWM4NjU3cC0xMCwKKyAgICAweDEuMDA3ZmRmZjdmZGZlMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAweDEuZmZkYTY1ZDQ0ZGNjYzg4OTExNWE0YTRmZjc1YzVhNzdwLTEwLAorICAgIDB4MS4wMDgwMTY5YTE2Y2Q1cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOAorICAgIDB4MS5iOTU2OTg5ZDI1ODlkN2ZkNjgzOGU1N2E3MDJmMzhhY3AtOSwKKyAgICAweDEuMDBkZDBhODMxNzE3NnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzkKKyAgICAweDEuZmQwODE2ZDk3MTUyYzdmZWFkN2I4NDlmNzYxNGZiNDhwLTksCisgICAgMHgxLjAwZmYwMmJhOGE1NDNwMAorICB9LAorICB7IC8vIEVudHJ5IDQwCisgICAgLTB4MS4zNzkxNTU1NTc4NWIwN2ZjMTlkZDI2MzIwODhhMWU3ZnA5LAorICAgIDB4MS4wMGZmZmZmZmZmZmZmcC04OTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MQorICAgIDB4MS42NGEyYTliNmE0MDU4ODAxMDEwMjgwNzEzOGRmZjUwY3AwLAorICAgIDB4MS4wMWMwMDAwMDAwMGRjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MgorICAgIDB4MS5kNDY1OTU3MTA2YmQyODZiYWU2N2MwODI5NzE2M2VhM3AtOCwKKyAgICAweDEuMDFkNjEzMWQwOWRjNXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDMKKyAgICAweDEuZmRmNjM5YmVhNWFkMzc2MmRmMjRhMjA4ZTJhMWNiZThwLTgsCisgICAgMHgxLjAxZmZmMzdhMzQwODRwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0CisgICAgMHgxLmZkZjZlNGZjZjQ1Njk3NzIwNTIyODUzMGFjZDU3MTU1cC04LAorICAgIDB4MS4wMWZmZjQyNmM4Y2I2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NQorICAgIDB4MS5mZGY2ZTRmZDA0MjZmNzZkNmQ3YjgzOWI1ZjZjOGJhZnAtOCwKKyAgICAweDEuMDFmZmY0MjZjOGRiNXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDYKKyAgICAweDEuZmRmZTljNTdkZWJlMTc2MGZlNGZmMDg5OWJmOWU2ZGNwLTgsCisgICAgMHgxLjAxZmZmYmVkOTIyZTNwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3CisgICAgLTB4MS5kMTdiZTI0NTEyMjlmZmZmMTFlODUxODA0ZTk3Y2RkN3AzLAorICAgIDB4MS4wMjhwLTIxCisgIH0sCisgIHsgLy8gRW50cnkgNDgKKyAgICAweDEuNmRjYjJmZWQ3ZjI1ZDNmMjg2NzA3MjMwYmUxOTA3NjBwLTcsCisgICAgMHgxLjAyZGZhZmEwN2RmNmRwMAorICB9LAorICB7IC8vIEVudHJ5IDQ5CisgICAgMHgxLmZmMDkyYTg1ZWUwMmY3ZmU3ZmM1ZGMxZDQxNzE4NGMwcC03LAorICAgIDB4MS4wNDA2MTU0NjFmNmNhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MAorICAgIDB4MS4wYWE1M2NlYTNmMWFiZmZmMWRkZmI1YWY0YWM0OWFhZXAtNiwKKyAgICAweDEuMDQzMzRlZWM1YTY1ZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAweDEuNmVhMDcwMjFjMTMzNDgwMTc0ODM1ZDE0MmE0YjgzMWVwLTYsCisgICAgMHgxLjA1Y2IwOWJiOWZlZDdwMAorICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgMHgxLjcxOTlmOTg0ZjU2MDgwMDEzNWZmM2FlYzNhMDc5NmE4cC02LAorICAgIDB4MS4wNWQ3MzUxODQyNjFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MworICAgIDB4MS43Nzg4YmM5YzA4MzE4ODAxNTQ2YzAzNWNiZDlhMjY5YXAtNiwKKyAgICAweDEuMDVlZjdiZGVlN2JlMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQKKyAgICAweDEuYzI2ODhlOTUyYTcyMzdmZGQ4NTYzMjk3ZGU2MjVhY2ZwLTYsCisgICAgMHgxLjA3MjJhMDU3MTE3NzhwMAorICB9LAorICB7IC8vIEVudHJ5IDU1CisgICAgMHgxLmUwMjE1MTM1MjUxMmY3YzIzMGNjNGI4OTVkYzY4ZGQxcC02LAorICAgIDB4MS4wNzljZjAwZmUyNGY5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NgorICAgIC0weDEuM2UxZmVlNjk5YzZiYzdmYzAwMWEzNTllMGVmZTJkYjdwOCwKKyAgICAweDEuMDdjcC00NTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NworICAgIDB4MS5mMzFiNTZiOGI2ZjFhMjg2MjU4MmY1MjhiMzNjNGRlMnAtNiwKKyAgICAweDEuMDdlYjI1OWVlMDFiNXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTgKKyAgICAtMHgxLmQwODE5MDk1ZmNkNmM4MDA5MjRlY2QwMzA4ZWJlMjE4cDMsCisgICAgMHgxLjBhODU1MWY4ZmM3ZjhwLTIxCisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAtMHgxLjAyNjhkNDAwMDBjNzE4MDA1ZGEwMjQ5ZWJiMGEzMDI0cDEsCisgICAgMHgxLjBmZmY4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAweDEuNmI1ZGY3ZTNjZDQyMTgwMDAwMDAwMDAwMDA0NDYxM2JwMSwKKyAgICAweDEuMTE4Njc2MzdjYmQwM3A0CisgIH0sCisgIHsgLy8gRW50cnkgNjEKKyAgICAweDEuNmI5NmNiNjZmNTVjMjgwMDE3MmQ4MWMxY2VmMzU3YjFwMSwKKyAgICAweDEuMTFmZmZmZmZmZmZmOHA0CisgIH0sCisgIHsgLy8gRW50cnkgNjIKKyAgICAtMHgxLmY3YTIxM2E3Y2QzODBmZmZkZTQ5OGM0NTNmMTI1NTNkcDAsCisgICAgMHgxLjFlNnAtMworICB9LAorICB7IC8vIEVudHJ5IDYzCisgICAgLTB4MS5hMDc2NTg1M2RlYzA2ZmZlZGY0OTAwMmI1ZDMwMDhiZXA4LAorICAgIDB4MS4yMDY2NThkOWIwZjA1cC02MDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIDB4MS4wZDdiNmZmNmUzYTI0N2ZmZmZmZWZiOTQ0OWZhZjhlNnA2LAorICAgIDB4MS4yNTE0NzM4ZTZkY2FkcDk3CisgIH0sCisgIHsgLy8gRW50cnkgNjUKKyAgICAweDEuMWVlMzg5OWY2ODE4ZTdmZmZmZDA5ZTZlYjQ4Nzk3MjVwMSwKKyAgICAweDEuMmNmYmI5ZTRhMTU5OXAzCisgIH0sCisgIHsgLy8gRW50cnkgNjYKKyAgICAtMHgxLjMzMTUzMzM2NzkyODk3ZmQzOGY0YWY3YWI1YzAwNzY5cDYsCisgICAgMHgxLjJmMDYxNzAzN2U1OTBwLTExMQorICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgLTB4MS4wNGMxZTZjZWM5NjM3N2ZlYmUxMTgzZTNiZDM3M2MzZXAzLAorICAgIDB4MS4yZjI5ZmQ0YjQyNTE1cC0xMgorICB9LAorICB7IC8vIEVudHJ5IDY4CisgICAgLTB4MS4wNTc4YmM0YTE0M2Q2OTk4MDZmOTQ1ZDEzNTZkMDZhMnAtMSwKKyAgICAweDEuMzMzZTFmMDNhZjU1ZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY5CisgICAgLTB4MS5mZDJhMWQ0ZGNmMjNkN2ZlNzVmN2VlZjk0OThmZGFhMnAtMiwKKyAgICAweDEuMzc2N2EwYWFmMTQ1MnAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwCisgICAgLTB4MS5mYjBjZTBlYzc5YmM5N2ZlOTUxNDFjZTIyN2VkNDdkMnAtMiwKKyAgICAweDEuMzgwYzY0MGU2MjQ2Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcxCisgICAgLTB4MS5lZTY5M2NhYTUwMWE5M2YzMDA2MmUyYTNjNDQ1YWM5Y3AtMiwKKyAgICAweDEuM2JlYzgzN2Q2MDFjMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyCisgICAgLTB4MS5lZDY3YjliMGYyZjhkNDIwYWRjZGY1MWY0MzI4MTdmYXAtMiwKKyAgICAweDEuM2MzYzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MworICAgIDB4MS4yNTM5N2RjOWY4NWJkODAwMDAwYTNkNTViZDZkOGU1MHAxLAorICAgIDB4MS4zYzQxOWI5ZGI2NjJhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NAorICAgIDB4MS45YzA0MWY3ZWQ4ZDMyOWUzMTJhYWQ4NDkzYTNhNzlhMnAwLAorICAgIDB4MS4zZmZmZmZmZmZmZmZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NQorICAgIDB4MS5jOGZmN2M3OWE5YTIxYWMyNWQ4MWVmMmZmYjlhMjRhZXAtMywKKyAgICAweDEuNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAweDEuZDQyYWRmZWMzNWQxNDdmZTA0ZmY3YjFiMDI3YzVmZGFwLTMsCisgICAgMHgxLjQxY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNzcKKyAgICAweDEuZDc1Nzc0NzdiOWVhZDdmZTliMmJjNjk2MGE3NjYzMDNwLTMsCisgICAgMHgxLjQyM2ZjMjRkMDRmYzZwMAorICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgLTB4MS5kMzYwZTkwYzM4NTBiMzZkNjExMDNmNTc1Yjk5MTg4MHAtMiwKKyAgICAweDEuNDQ2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAtMHgxLmNkZWFiZTAxYTg2YjJkNTBjOGVhM2JiMDMwYzY2YmJjcC0yLAorICAgIDB4MS40NjFjMTU5YTc2ZDRicC0xCisgIH0sCisgIHsgLy8gRW50cnkgODAKKyAgICAweDEuZmI5MTg2ZDVlM2UyNDRlZTRlMjg1MzE1NjNiNjlhMmNwLTMsCisgICAgMHgxLjQ3ZmZmZmZmZmZmZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDgxCisgICAgMHgxLmZiOTE4NmQ1ZTNlMmE4ZDU1NDY2YzM3OTRkMmNhMDkycC0zLAorICAgIDB4MS40ODBwMAorICB9LAorICB7IC8vIEVudHJ5IDgyCisgICAgMHgxLmZiOTIwNDY0ZjVmYzc3N2YzY2IwZDg0NDhjMzBlNzAxcC0zLAorICAgIDB4MS40ODAwMTQxYmVhODNmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIDB4MS5mYjljMjc5MjA0NWU5ZTgyZWZmNDNlZjFjZTBiZWUwMnAtMywKKyAgICAweDEuNDgwMWIzYmY0MmE0YXAwCisgIH0sCisgIHsgLy8gRW50cnkgODQKKyAgICAweDEuZmM0NjcxOGEyZGMyMmRkYmZhYmIyNTk4YTEzN2JhYTdwLTMsCisgICAgMHgxLjQ4MWNmYWRlOGE2NGRwMAorICB9LAorICB7IC8vIEVudHJ5IDg1CisgICAgMHgxLmZmOWJkNzg1NWFhZWFiODE1ZmQ4NWQyY2IwNjk0MjMxcC0zLAorICAgIDB4MS40OGE1ZDBjN2FjNWI1cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NgorICAgIDB4MS5mZmQ2NWYyOWJmZDRlZGY5OGVjODQ5YzkwMDMyZjMwMnAtMywKKyAgICAweDEuNDhhZjM1NjA4MWNhMXAwCisgIH0sCisgIHsgLy8gRW50cnkgODcKKyAgICAweDEuZTczN2NiMjM4NjVjNmI5MjE1NTJhZDgxZDU3MmI3MjlwLTEsCisgICAgMHgxLjRiOHAxCisgIH0sCisgIHsgLy8gRW50cnkgODgKKyAgICAweDEuOTBlZDUyZDFhMjNjNGZmZWQ4ZWU3NzI1YzUzMDM1ZDZwOCwKKyAgICAweDEuNTU2ZWU2MTFmYTMwOXA1NzgKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OQorICAgIC0weDEuYjI1YjhkODYzYjNiNDgwMGZjZWM0ZWI1YzE0YTdjMmVwMywKKyAgICAweDEuNTVlcC0yMAorICB9LAorICB7IC8vIEVudHJ5IDkwCisgICAgMHgxLjE2NzU4YTkzZDI5YWY3ZmYxMDBhMGMxMDdmYjBjOWU3cDYsCisgICAgMHgxLjU5OTY2NTk5NjY1OThwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgOTEKKyAgICAtMHgxLjdlM2E5M2JmMzU0MGQ4MWUzZGJiYjU3NTg1ZWMxNjc0cC0yLAorICAgIDB4MS42MDgwNTRkZTc0NTgycC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTIKKyAgICAweDEuNTgzYTQxN2JlMjIxNmNiOTM2NjEwY2E5ODQzNTExZGJwLTIsCisgICAgMHgxLjY2NDliYjUxNTM1NGZwMAorICB9LAorICB7IC8vIEVudHJ5IDkzCisgICAgLTB4MS40ZjdkYWMzZjFkN2YzZmZmZmZkZjUyMWNjZmM5ZGJjZHA1LAorICAgIDB4MS42OWIxMDkzNzdmN3AtNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NAorICAgIDB4MS42MmU0MmZlZmEzODM3MzRhNzY5YmI0MTI1ODMxOWMxYXAtMiwKKyAgICAweDEuNmEwOWU2NjdmM2IzMXAwCisgIH0sCisgIHsgLy8gRW50cnkgOTUKKyAgICAtMHgxLmU3YTJkZDAxNmRhYTg3ZmZhNzk1MjhlODliNjEwYzBhcDEsCisgICAgMHgxLjZiMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDk2CisgICAgMHgxLjczOWQ3ZjZiYmQwMDY5Y2UyNGM1M2ZhZDNlZjc5NmFicC0yLAorICAgIDB4MS43cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NworICAgIC0weDEuNGMzYWY0Nzk3MjA2MjgwMDEzYzRkNDVhZjY5NmQ3Y2JwLTIsCisgICAgMHgxLjcyMjNjZWY3OGUyNWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIC0weDEuNDhlNjVmZTJjMjMwNTdmZGViMjVjN2Y3YzQ4NTllOWNwLTIsCisgICAgMHgxLjczNTg3Y2U3NTM2ODBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OQorICAgIC0weDEuNDA1N2IwMmJmZGQwOTdmZTU3Mzc5ODg4NzQwZDgxMDNwLTIsCisgICAgMHgxLjc2NzY0MDg3Mzk1ZmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAweDEuNGE1ZjEyZWQ0MDdhNDAwMDgzNjQ1ZWZjYzY1OGVkYTZwOCwKKyAgICAweDEuOGFkOTM0YjgzOGJkYXA0NzYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEKKyAgICAtMHgxLjgzZDBmOTA2OTBkMGY3ZmYyMDdiMWYwMDdmN2EzOTE3cDEsCisgICAgMHgxLjhiZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMgorICAgIC0weDEuZTM4NzU0NTczNTkzMTQwMGVkYjQ3ZWU0MjY1ZDcyOGVwLTEsCisgICAgMHgxLjhlNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIC0weDEuZmNjNTllMDEzNjk3NjgyNDNlY2E1OTllNTllNmE5MDlwLTMsCisgICAgMHgxLjhmNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNAorICAgIC0weDEuZWRkNjE0OWIzMzE1NjgyODc1MGJiM2E2MDhjNGRkYzFwLTMsCisgICAgMHgxLjkyNGM1N2Q2MjkwODJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUKKyAgICAweDEuY2ZiZTYxNjRhNzNmMTM2MTYwNDkyNmEwYTkwZjUxOWZwLTIsCisgICAgMHgxLjkyYTRjYjc5ODY2NGJwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNgorICAgIC0weDEuYjQyODIxNmE1YzE1ODdmZGJmMmY5N2Q0YzI3MTQ4Y2NwNCwKKyAgICAweDEuOTgwcC00MAorICB9LAorICB7IC8vIEVudHJ5IDEwNworICAgIC0weDEuZDA4MWYwZjI1ZDY2MzgwMDI3ZDU5YjZlYmRiOWJhYzlwLTMsCisgICAgMHgxLjk4MTlkMDI1NWJlNjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAtMHgxLmNjMGQ2YTkyYjc5MTU3ZmU4MmJmYWQwYWRkZDA4NWE1cC0xLAorICAgIDB4MS5hMGVmODgzYmUyMTc3cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTA5CisgICAgLTB4MS44ZjYyZTJjYjY1ODYzODAwMDAzMGViMWEyODlmNzhlM3AtMywKKyAgICAweDEuYTU0OTMzNjMxMGU2ZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDExMAorICAgIC0weDEuMzY1MWQwZGUyMzY4ZDdmZWUzZDFkNmVlMmIyMjc3NDRwLTMsCisgICAgMHgxLmI4MDMwMGMwMzAxMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEKKyAgICAweDEuMjBmMjVlNjg2ZTdmOTdmZWNlZmY5YTcyOTlmY2QxZWRwLTEsCisgICAgMHgxLmMyMjAyNGRjODI4OWNwMAorICB9LAorICB7IC8vIEVudHJ5IDExMgorICAgIC0weDEuOWUzMjdlYjZhYzJjMzdmN2EzOWFmMmM5ODhhYmUyYjZwLTEsCisgICAgMHgxLmM4MHAtMgorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIC0weDEuYjc2ZjNkMGFhZjBjOTdmYWRlZmI0ZjUzMzJkMzY1YTlwLTQsCisgICAgMHgxLmNiZWEyMmM4YTlhMTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQKKyAgICAtMHgxLjkzMzVlNWQ1OTQ5OTE4MWZhMGYzMTJhOTg1NGQzMDQycC00LAorICAgIDB4MS5jZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTE1CisgICAgMHgxLmI2Y2MyYjA1YzkwYTc3ZmU5YTBiYjMwMTlkOGE5YWVkcDIsCisgICAgMHgxLmRhZTE4OTRhMmRiZWRwOQorICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIC0weDEuZmM3MDJiOGQ5NmQwZDdkNDc5NGZkNTZjOWJlYzJjZTJwLTUsCisgICAgMHgxLmUxMzA0YzEzMDRjMTNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcKKyAgICAtMHgxLmY2YzdmN2QwYjAzNTU3ZDFjMjY5MGZjMjE0YjNlZjQzcC01LAorICAgIDB4MS5lMTg1NjQ2YmM3ODU2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTE4CisgICAgLTB4MS5lYjhkY2I3NjRlMDdlN2Q0ZjBlZjM2YzZlZTg4ZWFjYXAtNSwKKyAgICAweDEuZTIyZTczNDlmNmU5N3AtMQorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIC0weDEuZDk0YTljMzIzZTc3YzdmZDQzZTJlMTNmNTQxMTQxY2JwLTUsCisgICAgMHgxLmUzNDFmMDU5MmMyYWJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAKKyAgICAtMHgxLmNjYjEwNjA4NTM5NGY3YTA1ZTAzZGY4YWMyM2VhZTVkcC01LAorICAgIDB4MS5lNDAwNWRmZDY2YzMycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgLTB4MS5hOWJkOGFmYzZkODRiN2VjN2JiYzgwY2M2ZjI5ODNmOHAtNSwKKyAgICAweDEuZTYxMjIyMjQxY2E3ZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEyMgorICAgIC0weDEuNzg3MzkyYTQ1ODg4ZDgwMDZiYjUzOGM3MjRjNDVmN2VwLTUsCisgICAgMHgxLmU5MDExMzNlMTYxZTRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMKKyAgICAtMHgxLjc5YTYzNGNkZmIyNTU4MDAwMDg2MDdiMGMyYzAxNTcwcDQsCisgICAgMHgxLmVkZGMwODIxYzc2YzFwLTM1CisgIH0sCisgIHsgLy8gRW50cnkgMTI0CisgICAgMHgxLjUxNzIxNTNkNWZlOWI3ZmYwZjI2YTg3YzA4NWI4N2Q3cC0xLAorICAgIDB4MS5lZWQ5MjA4YTZhMzQ5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUKKyAgICAtMHgxLjEyYjIyNzI0NGZmOTc3ZDg3OGUxMTY2YzI5Zjc2YWE1cC01LAorICAgIDB4MS5lZjFkYmNlYTE5NWNkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTI2CisgICAgLTB4MS5mOGEzNGQyNTA1ZjgxN2Q4NDhmNGU4OTU5NzEzZmI3NnAtNiwKKyAgICAweDEuZjA3ODZmYTQ4YmQ5Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDEyNworICAgIDB4MS4wNjg4NWQwM2MxOWMzODAwMDAwMmY5OTIwNWE2MGI1NHAxLAorICAgIDB4MS5mMWE5NDVhNDU3ZDk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgKKyAgICAweDEuYTI4Y2NjYjljNmYwZDdmZWRkODllOWM0ZDRiOWY2OGJwNiwKKyAgICAweDEuZjFmZmZmZmZmZmZmZnAxNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkKKyAgICAtMHgxLmIwMzJkYTA5NTY3MWU3YzhkNDI3ZWI0MjI5Mjc2NGQycC02LAorICAgIDB4MS5mMmFiOWRlZTg0MWI1cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTMwCisgICAgLTB4MS45ZDY2YWRhNjkwNTY0ODUzMjYxOTRlM2YxYzdiMTcwY3AtNiwKKyAgICAweDEuZjMzZTJhOTQ0YWM5NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzMQorICAgIC0weDEuODhlN2E2YmYxYjViOTdmZGJmNGRkNWUwNTQ2N2MyNWRwLTYsCisgICAgMHgxLmYzZGUyNjgzOTRlOGRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIKKyAgICAtMHgxLjg0ZTM2MmFkMjE3MDE3ZmU3ZWU2YzVlOTU4MGFhMWRkcC02LAorICAgIDB4MS5mM2ZkODZiMzkyODg0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTMzCisgICAgLTB4MS43NDRlZmY2ZDc3ZGRlN2QyYTE3OTY2OWUyMjU2OTllM3AtNiwKKyAgICAweDEuZjQ3ZjFlMWY1M2YyNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNAorICAgIC0weDEuNjhiNGY4NjQ5N2EwYTdmZTI0YzVmYmE3OGJmMTdhODhwMCwKKyAgICAweDEuZjQ4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTM1CisgICAgLTB4MS42ZjUxZTY4ZmNkN2NkN2ZhMWU2YWNkOWY0Yjk3OTM0MXAtNiwKKyAgICAweDEuZjRhNjIyZGY3NjBjOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIC0weDEuNmJhYjRmOTNhMzcyMDdkMjM3NjU5M2UxMmU4OTBkODBwLTYsCisgICAgMHgxLmY0YzJiMmE1YTVjMWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzcKKyAgICAtMHgxLjY1YWU0ZGVlZGE3Yjc3ZmU5YzVkYWMyYzBjMGRlZGY0cC02LAorICAgIDB4MS5mNGYxOGZhYjVjM2I4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgLTB4MS40YzJhNjRjYjIyNDQxZmU3NGUyZjg2ODkzNGU5ZTQ5MXAtNiwKKyAgICAweDEuZjViOTZlNWI5NmViN3AtMQorICB9LAorICB7IC8vIEVudHJ5IDEzOQorICAgIC0weDEuNDNhZTZjNDRiOWY3NjdmMzRlYmY4YTJjYzM3NDRjOTRwLTYsCisgICAgMHgxLmY1ZmJmNWNlZGM0ODBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDAKKyAgICAtMHgxLjQxZjc4MTIzMTBjOWIwMDE1Y2EzOTc4Y2FlYTJhZjQ5cC02LAorICAgIDB4MS5mNjA5NjhhNTk1MmQ5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQxCisgICAgLTB4MS4zYjBjYjBiMTQ2OWRiODAwYjIwYWExMTY5ODhjYjZmMnAtNiwKKyAgICAweDEuZjYzZmFlNmJhZTMyMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIC0weDEuMzExZTY3NTc1YjRmNTAwNjk5NGRmMzE1OGM3MzE2Y2NwLTYsCisgICAgMHgxLmY2OGRhMzY4ZGEzNjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDMKKyAgICAtMHgxLjAyMGRhNzAzZjJmOWQ3ZDg4YzIzNjFmOTMxMmM4MzgycC02LAorICAgIDB4MS5mN2ZmYmVmYzVkOWQ4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQ0CisgICAgLTB4MS4wMjA1NjU4OTM1Yjk0N2VjNTg3NDUzMDQ2ODE0NWFlN3AtNiwKKyAgICAweDEuZjdmZmZmZmZmZmZlNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIC0weDEuYWU4MjVmZTJlYjY3MDdmOTZhNmU0YzFkZDUzNWY5Y2NwLTcsCisgICAgMHgxLmY5NTEzOWM1NjExMzlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDYKKyAgICAtMHgxLjIzODUxYzgwZGRkZjI3ZmI4NDdjZGQyMzdkYjMyZTg2cC03LAorICAgIDB4MS5mYjc3MTc3ZmI1ZDM1cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQ3CisgICAgLTB4MS43YzQ5OGViODdlZDY4N2Y1YWI2ZDAwZTM5OTQ2ZDNiZnAtOCwKKyAgICAweDEuZmQwOWEwYjViMTdmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0OAorICAgIC0weDEuNTBkZDQxYWViNDg2NTcwMGM2OGY1ZGY0YTg0MzhlMGRwLTgsCisgICAgMHgxLmZkNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0OQorICAgIC0weDEuMDhiOGJiYTVkYjNhODViNGUyNTJlZDEwMDNlMzQ4MWZwLTgsCisgICAgMHgxLmZkZWY5ZmU3ZjlmZTNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTAKKyAgICAtMHgxLjA3Yzk4OWFkZDlmNTg1ZTY1Yzc4ZmU5MTJjMWE4Y3AtOCwKKyAgICAweDEuZmRmMTdjNWYxN2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTEKKyAgICAtMHgxLjAwODA1NTk1OGUxMGI1NDJmNjQwYTk0ZWQ0NWY5YmMwcC04LAorICAgIDB4MS5mZGZmZmZmZmZmZjU1cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTUyCisgICAgLTB4MS4xZjNlNDcxNzhmOTdjNzUzMzRhNjJhMmY3YWE2NmJjNXAtOSwKKyAgICAweDEuZmVlMTEyM2QwNWMxYnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1MworICAgIC0weDEuZmY3ZmFhOWFiMTM2Nzc4YTc0M2JhYTRmNTI4MDNjNGVwLTEwLAorICAgIDB4MS5mZjAwN2ZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTU0CisgICAgLTB4MS5mZjM5ZWNiZTI2NzU5Nzc4ZjhiYmY2N2YxZTRhN2UwYXAtMTAsCisgICAgMHgxLmZmMDBhMmNkODhiNTVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTUKKyAgICAtMHgxLjYzNjM0Nzc2OThkMjU3ZmMxNzUyMmI1MGZmNTU1NTNjcDAsCisgICAgMHgxLmZmMDIwZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTYKKyAgICAtMHgxLmY3YTI0OGJmMjJmYTk3ZmFjYWRiOTQ2NjMwZTM5NjdjcC0xMCwKKyAgICAweDEuZmYwNDZjYmU2Y2JkZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1NworICAgIC0weDEuZGFlNjBmZWU5ZmE5ZjdlMzQxZmU5MDU5Y2NmNjA5NzRwLTEwLAorICAgIDB4MS5mZjEyYzNmZjEyYzMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgLTB4MS5kMjA4YmM4NTg3Nzc2NzkxYzM4YTc2YTY3NWMxZWE0NXAtMTAsCisgICAgMHgxLmZmMTczMDlmZWZjZDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTkKKyAgICAtMHgxLmJhYmZmMjYzZWFiZjg3YWMyMTZlYWQ2NTU3NGFjZjAxcC0xMiwKKyAgICAweDEuZmZjOGFhZmY1MzRkNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2MAorICAgIC0weDEuYzAwYzQwNzI1YjA2MTdkZTE3ZDdiNzRlNDkwOTFkNzRwLTEzLAorICAgIDB4MS5mZmUzZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTYxCisgICAgLTB4MS43OGJmYTUwMDQxNTMxNzNmMmY1MjI2Y2QyMzk0ODUxOHAtMTMsCisgICAgMHgxLmZmZTg3NDkwNGFiZDBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjIKKyAgICAtMHgxLjExNDhkZmY5NTdlN2M3NDU2NDIyOWU5Y2I5YzRiODNjcC0xMywKKyAgICAweDEuZmZlZWViYmFlZWJiOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2MworICAgIC0weDEuNGFhMTk2YWFlMWVmOTdmZjE3MzA4OTc3OTllZTRmMDJwOCwKKyAgICAweDEuZmZmZmZiYmZmZmZmZnAtNDc4CisgIH0sCisgIHsgLy8gRW50cnkgMTY0CisgICAgMHgxLjhlOGY0M2QzODA0MGZmZmVkYTczMmM4ZDE2NGMxZWI1cDgsCisgICAgMHgxLmZmZmZmYmJmZmZmZmZwNTc0CisgIH0sCisgIHsgLy8gRW50cnkgMTY1CisgICAgLTB4MS4wMDAwMDQwMTAwMDAwODAxNTU2NTY1NTc1NTk1NzU1OHAtMzEsCisgICAgMHgxLmZmZmZmZmZiZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjYKKyAgICAtMHgxLmZmODA0MDAwN2ZjMDI3ZjgyYzhhYzJhMjEyZWY4ZTBlcC0zNCwKKyAgICAweDEuZmZmZmZmZmYwMDNmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2NworICAgIDB4MS44NmVmNWNjZGZhMWIxN2ZlNzhjODg2YTlkOGIyZmFhZXA3LAorICAgIDB4MS5mZmZmZmZmZmRkZmZmcDI4MQorICB9LAorICB7IC8vIEVudHJ5IDE2OAorICAgIC0weDEuMDAwODAwMDAwMDgwMDgwMDIwMDA1NTVkNTU5NTU2NDBwLTQwLAorICAgIDB4MS5mZmZmZmZmZmZkZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgLTB4MS4wMDIwMDAwMDAwMjAwODAwODAwMDA1NTc1NTk1NTgwMXAtNDIsCisgICAgMHgxLmZmZmZmZmZmZmY3ZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzAKKyAgICAtMHgxLjAwNDAwMDAwMDAxMDA4MDEwMDAwMDE1NjU1OTU1YWFhcC00MywKKyAgICAweDEuZmZmZmZmZmZmZmJmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3MQorICAgIDB4MS4zMGZjMTkzMWYwOWM5N2ZmNDJmZjVjYWQ0Njc4OTdmZHA3LAorICAgIDB4MS5mZmZmZmZmZmZmZmVlcDIxOQorICB9LAorICB7IC8vIEVudHJ5IDE3MgorICAgIC0weDEuMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDE1NTU1NTVwLTUxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTczCisgICAgLTB4MS4wMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDU1NTU1NXAtNTIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzQKKyAgICAtMHgxLjAzZmU1NWEwNjFjNzU3ZmVkNmExZGEzMTdkYTUwYjFhcC0xLAorICAgIDB4MS4zNDIxODU3OThmNmQ2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTc1CisgICAgLTB4MS42MmU0MmZlZmEzOWYwY2U0ZTBkNTA3ODU3ODg5MjcyMXAtMiwKKyAgICAweDEuNmEwOWU2NjdmM2JjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDE3NgorICAgIC0weDEuZGEzOTFjOTA0M2EwZjE2YWJlMDU2ZTM4NGJmMDdmMjlwLTMsCisgICAgMHgxLjk2MmI1Zjk0MzhkMjVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAtMHgxLjA2ZmJlYzUyMDgyYmQyNTNlMjAyMTBiNTg4NjhlNTIxcC0zLAorICAgIDB4MS5jMjRjZDhjMDdkZTdlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTc4CisgICAgLTB4MS4xZTBhOGY2NzBjNTBhZDE3MmIyNjA4ZTRhNzhiNWU2MHAtNSwKKyAgICAweDEuZWU2ZTUxZWNjMmZkN3AtMQorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIDB4MS45ZTU0OGU3ZTNkZGU3YjBmMzQzODVmMDc1ZTg1MDEwNnAtNSwKKyAgICAweDEuMGQ0N2U1OGM4NDA5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTgwCisgICAgMHgxLjA4ZTBiYWU3M2FjMjM4ZDVkMGQxZmQ5YTA0NTc5NjMwcC0zLAorICAgIDB4MS4yMzU4YTIyMmE2OTQ0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAweDEuOWU2NDYyMTg3YzM2YThkZGVlZDg5OWM0ZTM1OTY4OTZwLTMsCisgICAgMHgxLjM5Njk1ZWI4YzkxZjBwMAorICB9LAorICB7IC8vIEVudHJ5IDE4MgorICAgIDB4MS4xNGRkNmIwYWY5MzlhYzlmZDFjZjhkOGEzYTYzMGEwN3AtMiwKKyAgICAweDEuNGY3YTFiNGVlYmE5Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTgzCisgICAgMHgxLjU2MTgxZjE5ZDcxOTgwMzVjZjdjNWRmMDJkMTY2MDI2cC0yLAorICAgIDB4MS42NThhZDdlNTBlMzQ4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODQKKyAgICAweDEuOTM2YTgyZmFkY2Q4NWE3NjhhMTY1NWE4MDdhNWM1ZmRwLTIsCisgICAgMHgxLjdiOWI5NDdiMzBiZjRwMAorICB9LAorICB7IC8vIEVudHJ5IDE4NQorICAgIDB4MS5jZDQ1YjBhOWYyNTAyMWU0YzZhYjg3NmU1NDFkZWZjOXAtMiwKKyAgICAweDEuOTFhYzUxMTE1MzRhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTg2CisgICAgMHgxLjAyMDQ0YzliNzA2MjczNTBmNWM2MTNiYTNlZmY3ZjE0cC0xLAorICAgIDB4MS5hN2JkMGRhNzc1ZDRjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODcKKyAgICAweDEuMWMwMWRhZDU5ZTcyZmEwNDdiNjFhYzI2YzUxZjRjMTdwLTEsCisgICAgMHgxLmJkY2RjYTNkOTg1ZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDE4OAorICAgIDB4MS4zNGJkZTliODIxZmUzMTEzNmU2NzQ1M2RmZWNmOWUzNHAtMSwKKyAgICAweDEuZDNkZTg2ZDNiYWVhNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTg5CisgICAgMHgxLjRjNTYxZGJiYjIxZDlhOGZhYWI0NGY2Nzc3ZjkyOWY3cC0xLAorICAgIDB4MS5lOWVmNDM2OWRkNzUwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTAKKyAgICAweDEuNjJlNDJmZWZhMzllYjM1NzkzYzc2NzMwMDNlNWVkNWVwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmNwMAorICB9LAorICB7IC8vIEVudHJ5IDE5MQorICAgIC0weDEuNjJlNDJmZWZhMzlmMGNlNGUwZDUwNzg1Nzg4OTI3MjFwLTIsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTIKKyAgICAtMHgxLjI0Y2ZjZTZmODBkOWI1N2JmNzExZThjN2JhMjFkZWY5cC0yLAorICAgIDB4MS44MGFhODRjZTcyZjg5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTkzCisgICAgLTB4MS5kNDkwMjQ2ZGVmYTZjMjQwNzA0MjExNTdjOGJkYmFjNHAtMywKKyAgICAweDEuOTc0YjIzMzRmMjM0NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE5NAorICAgIC0weDEuNjVkNTU4ZDRjZTAwYTQxODg3OTNmNzQ1MmE0MWM5ZDNwLTMsCisgICAgMHgxLmFkZWJjMTliNzE3MDNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTUKKyAgICAtMHgxLmY5OTFjNmNiM2IzNzZkM2UwNWMwNDQ5ZDk5NzhiOWJicC00LAorICAgIDB4MS5jNDhjNjAwMWYwYWMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTk2CisgICAgLTB4MS4zMWI5OTRkM2E0ZjgwNjQ2MTQ2YTM1NjFlMTY2ODIxM3AtNCwKKyAgICAweDEuZGIyY2ZlNjg2ZmU3ZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE5NworICAgIC0weDEuY2NiNzNjZGRkYjJiM2I1Yjg0MWViMTUwYTNkNWUzNGRwLTYsCisgICAgMHgxLmYxY2Q5Y2NlZWYyM2FwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTgKKyAgICAweDEuMGI5NGY3YzE5NjE3NDg1YmNiNDM3NWIwYjgyZWQ3YWFwLTYsCisgICAgMHgxLjA0MzcxZDlhYjcyZmJwMAorICB9LAorICB7IC8vIEVudHJ5IDE5OQorICAgIDB4MS5lMjcwNzZlMmFmMmQ5MjM0NDAxMmZiNzQ2NGM3ODdjNnAtNSwKKyAgICAweDEuMGY4NzZjY2RmNmNkOXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjAwCisgICAgMHgxLjk4NmQzMjI4MTgwYmUwOTI0YWMzYTE5YjcyODcwZTc5cC00LAorICAgIDB4MS4xYWQ3YmMwMTM2NmI3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDEKKyAgICAweDEuMWM4OThjMTY5OTlmMjkxNWFkNTFhMDA1YjY4ZGRjYzRwLTMsCisgICAgMHgxLjI2MjgwYjM0NzYwOTVwMAorICB9LAorICB7IC8vIEVudHJ5IDIwMgorICAgIDB4MS42OWQ0NTkyYTAzNjIxYjJlNmNjY2MyMDM2ZjM5MzFmZnAtMywKKyAgICAweDEuMzE3ODVhNjdiNWE3M3AwCisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgMHgxLmI0NGY3N2JjYzhmNTVhODg4NDQ5YmM1M2U5ZDliZjNlcC0zLAorICAgIDB4MS4zY2M4YTk5YWY1NDUxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDQKKyAgICAweDEuZmMyZDZjZjQ3Y2YwYjJlMGI4OGY0ODgzMjQwMjQwOGNwLTMsCisgICAgMHgxLjQ4MThmOGNlMzRlMmZwMAorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIDB4MS4yMGNkY2QxOTJhYjY1MzBiMjRkNzVhYjQ0NTllM2JjM3AtMiwKKyAgICAweDEuNTM2OTQ4MDE3NDgwZHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjA2CisgICAgMHgxLjQyNjE3NGRiZDUxNWQ2NDlkNjk5ODQ4MTZlNjg5NDBkcC0yLAorICAgIDB4MS41ZWI5OTczNGI0MWVicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAweDEuNjJlNDJmZWZhMzllNTIwNjkwNTJjYjczYmY3YzJkNWZwLTIsCisgICAgMHgxLjZhMDllNjY3ZjNiYzlwMAorICB9LAorICB7IC8vIEVudHJ5IDIwOAorICAgIC0weDEuMjY5NjIxMTM0ZGI5Mjc4M2JlYjc2NzZjMGFhOWMyYTNwLTIsCisgICAgMHgxLjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDkKKyAgICAtMHgxLjg5ZmE0NjVjYjkzYzM5MzAyZDdhNDNiZjhhODM0NWM4cC0zLAorICAgIDB4MS5hNjY2NjY2NjY2NjY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjEwCisgICAgLTB4MS5hZjhlODIxMGE0MTY0OGFkMmVmNWE3NWM4MGFlOWIwMnAtNCwKKyAgICAweDEuY2NjY2NjY2NjY2NjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDIxMQorICAgIC0weDEuOWVjZTk1NTMyMWI5MTExOWI2NGIwNDg2MTNkYmMwN2RwLTYsCisgICAgMHgxLmYzMzMzMzMzMzMzMzJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAweDEuOGZiMDYzZWYyYzdkMTBhYzhjNWNlMzYxZjNhNTlhNzNwLTUsCisgICAgMHgxLjBjY2NjY2NjY2NjY2NwMAorICB9LAorICB7IC8vIEVudHJ5IDIxMworICAgIDB4MS5lMjcwNzZlMmFmMmQ3YjEwNmY5YzZmZTcwMDAwZjBiOHAtNCwKKyAgICAweDEuMWZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjE0CisgICAgMHgxLjc1NjUwMTFlNDk2NmUzOTQ3NDJjZGViODBhYWEwYjg1cC0zLAorICAgIDB4MS4zMzMzMzMzMzMzMzMycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTUKKyAgICAweDEuZjE4ZGM0MWU4ZWYxNzA4ZGRhYzYxN2U3MmExNmEzNTFwLTMsCisgICAgMHgxLjQ2NjY2NjY2NjY2NjVwMAorICB9LAorICB7IC8vIEVudHJ5IDIxNgorICAgIDB4MS4zMzRlOWU0N2QwN2VmZDk3ZDEzZmVhMjY1ZGNlYzJkMXAtMiwKKyAgICAweDEuNTk5OTk5OTk5OTk5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjE3CisgICAgMHgxLjZhYWMwNDE0NjE1MWZmMzY0NGYwZGE4NzkzZmU5MTFmcC0yLAorICAgIDB4MS42Y2NjY2NjY2NjY2NicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAweDEuOWYzMjNlY2JmOTg0NjlkNjEzODIxMTllYWMzZTg5ZTFwLTIsCisgICAgMHgxLjdmZmZmZmZmZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDIxOQorICAgIDAuMCwKKyAgICAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjIwCisgICAgMHgxLjg2NjNmNzkzYzQ2Y2M2ZDU2OTliODJjYzNiZDNiZTM4cC00LAorICAgIDB4MS4xOTk5OTk5OTk5OTlhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjEKKyAgICAweDEuNzU2NTAxMWU0OTY3YjhlOWM5ODIzNDBkNjIzODQ0NjlwLTMsCisgICAgMHgxLjMzMzMzMzMzMzMzMzRwMAorICB9LAorICB7IC8vIEVudHJ5IDIyMgorICAgIDB4MS4wY2E5MzdiZTFiOWRmOGU4NGFiNTJkNGIwYWVmZDAxMnAtMiwKKyAgICAweDEuNGNjY2NjY2NjY2NjZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjIzCisgICAgMHgxLjU4OGMyZDkxMzM0OTQzODBlZWJjZWI3NmMxOTI4ZjdjcC0yLAorICAgIDB4MS42NjY2NjY2NjY2NjY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjQKKyAgICAweDEuOWYzMjNlY2JmOTg1MTQ4MGJlMmNiYzQ5NTZlOTM0OGJwLTIsCisgICAgMHgxLjgwMDAwMDAwMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDIyNQorICAgIDB4MS5lMTQ4YTFhMjcyNmQzOTRkZjhjZGQ2YzgwZDdlYzg2NXAtMiwKKyAgICAweDEuOTk5OTk5OTk5OTk5Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMjI2CisgICAgMHgxLjBmYWU4MTkxNGE5OTQ3YmQyZGU1MTE4N2E2MzA4ZmRicC0xLAorICAgIDB4MS5iMzMzMzMzMzMzMzM2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjcKKyAgICAweDEuMmNmMjVmYWQ4ZjFjNzE1ZTVmYWZjZWI2M2JmNjA3MDdwLTEsCisgICAgMHgxLmNjY2NjY2NjY2NjZDBwMAorICB9LAorICB7IC8vIEVudHJ5IDIyOAorICAgIDB4MS40OGExMTI5M2Q3ODVmODZhN2IxNzdmNGFhNGU5Y2FkYnAtMSwKKyAgICAweDEuZTY2NjY2NjY2NjY2YXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjI5CisgICAgMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcC0xLAorICAgIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzAKKyAgICAweDEuMTU0MjQ1NzMzN2Q0MmUxYzZiNzNjODlkODYyYmExNzFwNiwKKyAgICAweDEuMHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzEKKyAgICAweDEuMTVhM2RlNzExY2M1NDk0ZTIwY2UyZjdlMzkzYTk2NjFwNiwKKyAgICAweDEuMTk5OTk5OTk5OTk5YXAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzIKKyAgICAweDEuMTVmY2Y3ZjNjNmY4ZTFmOGUwNTg4OWI3OGNkY2JkOTRwNiwKKyAgICAweDEuMzMzMzMzMzMzMzMzNHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzMKKyAgICAweDEuMTY0ZWVlYWFmNWVmY2MxNTUzYmU3ZGNhZDEzNjkxNDFwNiwKKyAgICAweDEuNGNjY2NjY2NjY2NjZXAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzQKKyAgICAweDEuMTY5YWQxYTBjOTA3Nzc1ZmVjNjI4NTg4ZmNlZDM0MDFwNiwKKyAgICAweDEuNjY2NjY2NjY2NjY2OHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzUKKyAgICAweDEuMTZlMTc3YjIwM2NkYjMzMGVjMzFmNTU5Y2Y4MjhhYTZwNiwKKyAgICAweDEuODAwMDAwMDAwMDAwMnAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzYKKyAgICAweDEuMTcyMzhlMTRkYTQ2OWI1NWI5NmM5Njc0NGUzOTIwM2FwNiwKKyAgICAweDEuOTk5OTk5OTk5OTk5Y3AxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAweDEuMTc2MWEyNzY1YTY5NjBhYmU1Y2Y5MmMwOTU3ODAyOTFwNiwKKyAgICAweDEuYjMzMzMzMzMzMzMzNnAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzgKKyAgICAweDEuMTc5YzJhMzI5MmYyNjZmZjI4MzMyODNhZjJhMzhkN2ZwNiwKKyAgICAweDEuY2NjY2NjY2NjY2NkMHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzkKKyAgICAweDEuMTdkMzg3OTg1ZjgzM2EwZDQwNjlmNzljMWI3NTc1MDdwNiwKKyAgICAweDEuZTY2NjY2NjY2NjY2YXAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDAKKyAgICAweDEuMTgwODBkZDMxNzFiNmMwMzFhOWI1NzZiZTYzYjZkNGNwNiwKKyAgICAweDEuMHAxMDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDEKKyAgICAweDEuMTU0MjQ1NzMzN2Q0MmUxYzZiNzNjODlkODYyYmExNzFwNywKKyAgICAweDEuMHAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDIKKyAgICAweDEuMTU3MzExZjIyYTRjYmJiNTQ2MjBmYzBkZGZiMzFiZTlwNywKKyAgICAweDEuMTk5OTk5OTk5OTk5YXAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAweDEuMTU5ZjllYjM3ZjY2ODgwYWE1ZTYyOTJhODk4NDJmODJwNywKKyAgICAweDEuMzMzMzMzMzMzMzMzNHAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDQKKyAgICAweDEuMTVjODlhMGYxNmUxZmQxOGRmOTkyMzM0MmJiMTE5NTlwNywKKyAgICAweDEuNGNjY2NjY2NjY2NjZXAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDUKKyAgICAweDEuMTVlZThiOGEwMDZkZDJiZTJiZWIyNzEzNDE4YzZhYjlwNywKKyAgICAweDEuNjY2NjY2NjY2NjY2OHAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAweDEuMTYxMWRlOTI5ZGQwZjBhNmFiZDJkZWZiYWFkNzE2MGNwNywKKyAgICAweDEuODAwMDAwMDAwMDAwMnAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDcKKyAgICAweDEuMTYzMmU5YzQwOTBkNjRiOTEyNzAyZjg4ZWEzMjYwZDZwNywKKyAgICAweDEuOTk5OTk5OTk5OTk5Y3AyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDgKKyAgICAweDEuMTY1MWYzZjRjOTFlYzc2NDI4YTFhZGFmMGRkMWQyMDFwNywKKyAgICAweDEuYjMzMzMzMzMzMzMzNnAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDkKKyAgICAweDEuMTY2ZjM3ZDJlNTYzNGE4ZGM5ZDM3ODZjM2M2Nzk3NzhwNywKKyAgICAweDEuY2NjY2NjY2NjY2NkMHAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAweDEuMTY4YWU2ODVjYmFiYjQxNGQ1ZWVlMDFjZDBkMDhiM2NwNywKKyAgICAweDEuZTY2NjY2NjY2NjY2YXAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTEKKyAgICAweDEuMTZhNTI5YTMyNzc3Y2QwZmMzMDc5MDA0YjYzMzg3NWZwNywKKyAgICAweDEuMHAyMDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTIKKyAgICAweDEuNWE5MmQ2ZDAwNWM5MzlhMzg2NTBiYWM0ZTdiNjg5Y2VwOSwKKyAgICAweDEuMHAxMDAwCisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgLTB4MS4wMDAwMDgwMDAwNTU1NTU5NTU1NTg4ODg4YjMzMzM1N3AtMjAsCisgICAgMHgxLmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgLTB4MS4wMDAwMDQwMDAwMTU1NTU1ZDU1NTU4ODg4ODlkZGRkZXAtMjEsCisgICAgMHgxLmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjU1CisgICAgMC4wLAorICAgIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTYKKyAgICAweDEuZmZmZmY4MDAwMDJhYWFhOWFhYWFiMTExMTBlNjY2NjdwLTIyLAorICAgIDB4MS4wMDAwMDgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTcKKyAgICAweDEuZmZmZmYwMDAwMGFhYWFhMmFhYWIxMTExMGJiYmJjMDRwLTIxLAorICAgIDB4MS4wMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjU4CisgICAgLTB4MS4wMDAwMDAwMjAwMDAwMDA1NTU1NTU1NjU1NTU1NTU4OHAtMzAsCisgICAgMHgxLmZmZmZmZmY4MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI1OQorICAgIC0weDEuMDAwMDAwMDEwMDAwMDAwMTU1NTU1NTU3NTU1NTU1NThwLTMxLAorICAgIDB4MS5mZmZmZmZmYzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjAKKyAgICAwLjAsCisgICAgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDI2MQorICAgIDB4MS5mZmZmZmZmZTAwMDAwMDAyYWFhYWFhYTZhYWFhYWFiMXAtMzIsCisgICAgMHgxLjAwMDAwMDAyMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjYyCisgICAgMHgxLmZmZmZmZmZjMDAwMDAwMGFhYWFhYWE4YWFhYWFhYjExcC0zMSwKKyAgICAweDEuMDAwMDAwMDQwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjMKKyAgICAtMHgxLjAwMDAwMDAwMDA4MDAwMDAwMDAwNTU1NTU1NTU1NTk1cC00MCwKKyAgICAweDEuZmZmZmZmZmZmZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAtMHgxLjAwMDAwMDAwMDA0MDAwMDAwMDAwMTU1NTU1NTU1NTVkcC00MSwKKyAgICAweDEuZmZmZmZmZmZmZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjUKKyAgICAwLjAsCisgICAgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDI2NgorICAgIDB4MS5mZmZmZmZmZmZmODAwMDAwMDAwMDJhYWFhYWFhYWE5YXAtNDIsCisgICAgMHgxLjAwMDAwMDAwMDA4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjcKKyAgICAweDEuZmZmZmZmZmZmZjAwMDAwMDAwMDBhYWFhYWFhYWFhMmFwLTQxLAorICAgIDB4MS4wMDAwMDAwMDAxMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjY4CisgICAgLTB4MS4wMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwNTU1NTU1NXAtNTAsCisgICAgMHgxLmZmZmZmZmZmZmZmZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjkKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAxNTU1NTU1cC01MSwKKyAgICAweDEuZmZmZmZmZmZmZmZmY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDI3MAorICAgIDAuMCwKKyAgICAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjcxCisgICAgMHgxLmZmZmZmZmZmZmZmZmUwMDAwMDAwMDAwMDAyYWFhYWFhcC01MiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjcyCisgICAgMHgxLmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDBhYWFhYWFhcC01MSwKKyAgICAweDEuMDAwMDAwMDAwMDAwNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjczCisgICAgMHgxLjYyZTQyZmVmYTM5ZWYzNTM5M2M3NjczMDA3ZTVkZDVlcDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDI3NAorICAgIC0weDEuNzQzODU0NDZkNzFjMzYzOTVhN2VhM2I5ZTA0OGE3NzVwOSwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIC0weDEuNjJlNDJmZWZhMzlmM2EyNjFkYTIwNWZkMTNjYjUzZGZwLTIsCisgICAgMHgxLjZhMDllNjY3ZjNiY2JwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZjBjZTRlMGQ1MDc4NTc4ODkyNzIxcC0yLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgLTB4MS42MmU0MmZlZmEzOWVkZmEzYTQwODA5MGRkZjQ2ZmE2MnAtMiwKKyAgICAweDEuNmEwOWU2NjdmM2JjZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI3OAorICAgIDB4MS42MmU0MmZlZmEzOWVhYzg5MDllY2M4NjJmYzAwODZkZHAtMiwKKyAgICAweDEuNmEwOWU2NjdmM2JjYnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgMHgxLjYyZTQyZmVmYTM5ZWQ5Y2E0NmI5YzZkYTk3NDJiMzlicC0yLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAweDEuNjJlNDJmZWZhMzlmMDcwYjgzODZjNTUyMzA4NGUwNWFwLTIsCisgICAgMHgxLjZhMDllNjY3ZjNiY2RwMAorICB9LAorICB7IC8vIEVudHJ5IDI4MQorICAgIC0weDEuNjJlNDJmZWZhMzlmMDM1NzkzYzc2NzMwMDgyNWVkNWVwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcC0xLAorICAgIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjgzCisgICAgLTB4MS42MmU0MmZlZmEzOWVkMzU3OTNjNzY3MzAwOGU1ZWQ1ZXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI4NAorICAgIC0weDEuMjY5NjIxMTM0ZGI5NTIyZTY5NjIxMjE2YjYzN2ZiODZwLTIsCisgICAgMHgxLjdmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODUKKyAgICAtMHgxLjI2OTYyMTEzNGRiOTI3ODNiZWI3Njc2YzBhYTljMmEzcC0yLAorICAgIDB4MS44cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjg2CisgICAgLTB4MS4yNjk2MjExMzRkYjhmY2Q5MTQwY2JjYzE2MGUyYTYzMXAtMiwKKyAgICAweDEuODAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI4NworICAgIDB4MS45ZjMyM2VjYmY5ODQ5NDgwYmUyY2JjNDk1OTkzZGYzNnAtMiwKKyAgICAweDEuN2ZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjg4CisgICAgMHgxLjlmMzIzZWNiZjk4NGJmMmI2OGQ3NjZmNDA1MjIxODE5cC0yLAorICAgIDB4MS44cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODkKKyAgICAweDEuOWYzMjNlY2JmOTg0ZTlkNjEzODIxMTllYWVlOTM0OGJwLTIsCisgICAgMHgxLjgwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDI5MAorICAgIDB4MS41NGUzYzBiMTBhMzY0MzRhYmFjMjc3MTYwMzExY2NiNHAtOSwKKyAgICAweDEuMDBhYWFhYWFhYWFhYXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjkxCisgICAgMHgxLjU0ZTNjMGIxMGE1NjJlMDM5NGRiYmI5MzU5ZjQ3N2RkcC05LAorICAgIDB4MS4wMGFhYWFhYWFhYWFicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTIKKyAgICAweDEuNTRlM2MwYjEwYTc2MThiYzZlZjUwMDBlYjM3ZjI1NjNwLTksCisgICAgMHgxLjAwYWFhYWFhYWFhYWNwMAorICB9LAorICB7IC8vIEVudHJ5IDI5MworICAgIDB4MS42MmU0MmZlZmEzOWVlYjU3OTNjNzY3MzAwN2M1ZWQ1ZXAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTQKKyAgICAweDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwMCwKKyAgICAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjk1CisgICAgMHgxLjYyZTQyZmVmYTM5ZjAzNTc5M2M3NjczMDA3NjVlZDVlcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMgorICB9LAorICB7IC8vIEVudHJ5IDI5NgorICAgIDB4MS42MmU0MmZlZmEzOWVlMzU3OTNjNzY3MzAwN2E1ZWQ1ZXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjk3CisgICAgMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcC0xLAorICAgIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTgKKyAgICAweDEuNjJlNDJmZWZhMzlmMTM1NzkzYzc2NzMwMDZlNWVkNWVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDI5OQorICAgIC0weDEuMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAxNTU1NTVwLTUzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzAwCisgICAgMC4wLAorICAgIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAweDEuZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDBhYWFhYWFwLTUzLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDIKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZjAzNTc5M2M3NjczMDA4MjVlZDVlcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgLTB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U1ZWQ1ZXAtMSwKKyAgICAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMwNAorICAgIC0weDEuNjJlNDJmZWZhMzllZDM1NzkzYzc2NzMwMDhlNWVkNWVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDUKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWZiNTc5M2M3NjczMDA4MDVlZDVlcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDYKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcDAsCisgICAgMHgxLjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDcKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWUzNTc5M2M3NjczMDA4NjVlZDVlcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzNhODFhZWQ1OGQ2NDA1ZmM3MjA2cDEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDkKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzM2ODFhZWQ1OGQ2NDA1ZWM3MjA2cDEsCisgICAgMHgxLjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTAKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzJlODFhZWQ1OGQ2NDA2MmM3MjA2cDEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTEKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWY3NTc5M2M3NjczMDA3ZjVlZDVlcDEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTIKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcDEsCisgICAgMHgxLjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWViNTc5M2M3NjczMDA4MjVlZDVlcDEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTQKKyAgICAtMHgxLmJiOWQzYmViOGM4NmI0MmQ3OGI5NDBmYzA5ZWY2OGI2cDEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTUKKyAgICAtMHgxLmJiOWQzYmViOGM4NmIwMmQ3OGI5NDBmYzA5ZGY2OGI2cDEsCisgICAgMHgxLjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTYKKyAgICAtMHgxLmJiOWQzYmViOGM4NmE4MmQ3OGI5NDBmYzBhMWY2OGI2cDEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTcKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzM4ODFhZWQ1OGQ2NDA1ZjQ3MjA2cDIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTgKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzM2ODFhZWQ1OGQ2NDA1ZWM3MjA2cDIsCisgICAgMHgxLjBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTkKKyAgICAtMHgxLjBhMmIyM2YzYmFiNzMyODFhZWQ1OGQ2NDA2MGM3MjA2cDIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjAKKyAgICAtMHgxLjM2ODdhOWYxYWYyYjE2ZWNhMTRlN2E0YTA2ZjEyZmIycDIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjEKKyAgICAtMHgxLjM2ODdhOWYxYWYyYjE0ZWNhMTRlN2E0YTA2ZTkyZmIycDIsCisgICAgMHgxLjBwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjIKKyAgICAtMHgxLjM2ODdhOWYxYWYyYjEwZWNhMTRlN2E0YTA3MDkyZmIycDIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjMKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWY1NTc5M2M3NjczMDA3ZWRlZDVlcDIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjQKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcDIsCisgICAgMHgxLjBwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWVmNTc5M2M3NjczMDA4MDVlZDVlcDIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjYKKyAgICAtMHgxLjhmNDBiNWVkOTgxMmQzYzI4NjQwNTQxNjA4ZWFhYjBhcDIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzI3CisgICAgLTB4MS44ZjQwYjVlZDk4MTJkMWMyODY0MDU0MTYwOGUyYWIwYXAyLAorICAgIDB4MS4wcC05CisgIH0sCisgIHsgLy8gRW50cnkgMzI4CisgICAgLTB4MS44ZjQwYjVlZDk4MTJjZGMyODY0MDU0MTYwOTAyYWIwYXAyLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC05CisgIH0sCisgIHsgLy8gRW50cnkgMzI5CisgICAgLTB4MS5iYjlkM2JlYjhjODZiMjJkNzhiOTQwZmMwOWU3NjhiNnAyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDMzMAorICAgIC0weDEuYmI5ZDNiZWI4Yzg2YjAyZDc4Yjk0MGZjMDlkZjY4YjZwMiwKKyAgICAweDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzEKKyAgICAtMHgxLmJiOWQzYmViOGM4NmFjMmQ3OGI5NDBmYzA5ZmY2OGI2cDIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzMyCisgICAgLTB4MS4yMDU5NjZmMmI0ZjEyNmI3MjgxMjAzZDcwNjZlZDBkY3AzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDMzMworICAgIC0weDEuMjA1OTY2ZjJiNGYxMjViNzI4MTIwM2Q3MDY2YWQwZGNwMywKKyAgICAweDEuMHAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzQKKyAgICAtMHgxLjIwNTk2NmYyYjRmMTIzYjcyODEyMDNkNzA2N2FkMGRjcDMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgLTB4MS4yMDU5NjZmMmI0ZjEyNmI3MjgxMjAzZDcwNjZlZDBkY3AzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDMzNgorICAgIC0weDEuMjA1OTY2ZjJiNGYxMjViNzI4MTIwM2Q3MDY2YWQwZGNwMywKKyAgICAweDEuMHAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzcKKyAgICAtMHgxLjIwNTk2NmYyYjRmMTIzYjcyODEyMDNkNzA2N2FkMGRjcDMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMzM4CisgICAgLTB4MS4wYTJiMjNmM2JhYjczYTgxYWVkNThkNjQwNWZjNzIwNnAxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgLTB4MS4wYTJiMjNmM2JhYjczNjgxYWVkNThkNjQwNWVjNzIwNnAxLAorICAgIDB4MS4wcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzQwCisgICAgLTB4MS4wYTJiMjNmM2JhYjcyZTgxYWVkNThkNjQwNjJjNzIwNnAxLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzQxCisgICAgLTB4MS4xMTc4ZTgyMjdlNDgwNzA3Y2FmZDQ0NTk3ODViMGU4ZnAtMywKKyAgICAweDEuYmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM0MgorICAgIC0weDEuMTE3OGU4MjI3ZTQ3YmRlMzM4YjQxZmM3MmRlODFlM2JwLTMsCisgICAgMHgxLmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDMKKyAgICAtMHgxLjExNzhlODIyN2U0Nzc0YmVhNjZhZmIzNGU2MTFlOWZkcC0zLAorICAgIDB4MS5jMDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQ0CisgICAgLTB4MS42MmU0MmZlZmEzOWVmNzU3OTNjNzY3MzAwN2Y1ZWQ1ZXAxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzQ1CisgICAgLTB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U1ZWQ1ZXAxLAorICAgIDB4MS4wcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzQ2CisgICAgLTB4MS42MmU0MmZlZmEzOWVlYjU3OTNjNzY3MzAwODI1ZWQ1ZXAxLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzQ3CisgICAgLTB4MS4wODU5OGI1OWUzYTBmMTEyYzg2MjQ3ZDhiZTQxZDQ4N3AtNCwKKyAgICAweDEuZGZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM0OAorICAgIC0weDEuMDg1OThiNTllM2EwNjg4YTNmZDliZjUwMzM3MmMxMmZwLTQsCisgICAgMHgxLmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDkKKyAgICAtMHgxLjA4NTk4YjU5ZTM5ZmUwMDFiNzUxMzZjN2FkMzBjMzc2cC00LAorICAgIDB4MS5lMDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzUwCisgICAgLTB4MS5iYjlkM2JlYjhjODZiNDJkNzhiOTQwZmMwOWVmNjhiNnAxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzUxCisgICAgLTB4MS5iYjlkM2JlYjhjODZiMDJkNzhiOTQwZmMwOWRmNjhiNnAxLAorICAgIDB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzUyCisgICAgLTB4MS5iYjlkM2JlYjhjODZhODJkNzhiOTQwZmMwYTFmNjhiNnAxLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzUzCisgICAgLTB4MS4wNDE1ZDg5ZTc0NDU0ZjQzODQ0YjdlNTVjZWRkODM3YnAtNSwKKyAgICAweDEuZWZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM1NAorICAgIC0weDEuMDQxNWQ4OWU3NDQ0NDcwMTczYzc1ZDRkODg4OWRlMGVwLTUsCisgICAgMHgxLmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTUKKyAgICAtMHgxLjA0MTVkODllNzQ0MzNlYmY2MzQzM2M0NTRhYmM3YjM5cC01LAorICAgIDB4MS5mMDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU2CisgICAgLTB4MS4wYTJiMjNmM2JhYjczODgxYWVkNThkNjQwNWY0NzIwNnAyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC03CisgIH0sCisgIHsgLy8gRW50cnkgMzU3CisgICAgLTB4MS4wYTJiMjNmM2JhYjczNjgxYWVkNThkNjQwNWVjNzIwNnAyLAorICAgIDB4MS4wcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzU4CisgICAgLTB4MS4wYTJiMjNmM2JhYjczMjgxYWVkNThkNjQwNjBjNzIwNnAyLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzU5CisgICAgLTB4MS4wMjA1NjU4OTM1ODY3Y2JmYTVhOTI2M2JkODFkYTRhMHAtNiwKKyAgICAweDEuZjdmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM2MAorICAgIC0weDEuMDIwNTY1ODkzNTg0NzQ5ZjIzYTEwNWI5YzdiYjlhNmZwLTYsCisgICAgMHgxLmY4MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM2MQorICAgIC0weDEuMDIwNTY1ODkzNTgyNmM3ZWExOThlNTM3YzdkY2EwOGZwLTYsCisgICAgMHgxLmY4MDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjIKKyAgICAtMHgxLjM2ODdhOWYxYWYyYjE2ZWNhMTRlN2E0YTA2ZjEyZmIycDIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjMKKyAgICAtMHgxLjM2ODdhOWYxYWYyYjE0ZWNhMTRlN2E0YTA2ZTkyZmIycDIsCisgICAgMHgxLjBwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjQKKyAgICAtMHgxLjM2ODdhOWYxYWYyYjEwZWNhMTRlN2E0YTA3MDkyZmIycDIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjUKKyAgICAtMHgxLjAxMDE1NzU4OGRlYjFhOWNlYzliMDNmYmVlNDljNmIwcC03LAorICAgIDB4MS5mYmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY2CisgICAgLTB4MS4wMTAxNTc1ODhkZTcxMjhjY2M1YTgyZjlkYTAwZjQ4YnAtNywKKyAgICAweDEuZmMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY3CisgICAgLTB4MS4wMTAxNTc1ODhkZTMwYTdjYWMxYTAxZjdlNjM5YTY3MHAtNywKKyAgICAweDEuZmMwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM2OAorICAgIC0weDEuNjJlNDJmZWZhMzllZjU1NzkzYzc2NzMwMDdlZGVkNWVwMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtOQorICB9LAorICB7IC8vIEVudHJ5IDM2OQorICAgIC0weDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwMiwKKyAgICAweDEuMHAtOAorICB9LAorICB7IC8vIEVudHJ5IDM3MAorICAgIC0weDEuNjJlNDJmZWZhMzllZWY1NzkzYzc2NzMwMDgwNWVkNWVwMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtOAorICB9LAorICB7IC8vIEVudHJ5IDM3MQorICAgIC0weDEuMDA4MDU1OTU4OGJiNWZlZGEwZWI0NTk1YzVmYmUyYjFwLTgsCisgICAgMHgxLmZkZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzIKKyAgICAtMHgxLjAwODA1NTk1ODhiMzU3ZTU5OGUzM2Q4ZDlkYjM3YTI5cC04LAorICAgIDB4MS5mZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzMKKyAgICAtMHgxLjAwODA1NTk1ODhhYjRmZGQ5MGRiMzU4NWI1ZWJkMmExcC04LAorICAgIDB4MS5mZTAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzc0CisgICAgLTB4MS44ZjQwYjVlZDk4MTJkM2MyODY0MDU0MTYwOGVhYWIwYXAyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDM3NQorICAgIC0weDEuOGY0MGI1ZWQ5ODEyZDFjMjg2NDA1NDE2MDhlMmFiMGFwMiwKKyAgICAweDEuMHAtOQorICB9LAorICB7IC8vIEVudHJ5IDM3NgorICAgIC0weDEuOGY0MGI1ZWQ5ODEyY2RjMjg2NDA1NDE2MDkwMmFiMGFwMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtOQorICB9LAorICB7IC8vIEVudHJ5IDM3NworICAgIC0weDEuMDA0MDE1NWQ1ODk5ZTY3NDY5MWZlZjQxNDAyZjNlN2JwLTksCisgICAgMHgxLmZlZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzgKKyAgICAtMHgxLjAwNDAxNTVkNTg4OWRlNzA2NzFlZWVjMGJmY2VmZTUzcC05LAorICAgIDB4MS5mZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzkKKyAgICAtMHgxLjAwNDAxNTVkNTg3OWQ2NmM2NTFkZWU0MGJmZWYxZTZicC05LAorICAgIDB4MS5mZjAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzgwCisgICAgLTB4MS5iYjlkM2JlYjhjODZiMjJkNzhiOTQwZmMwOWU3NjhiNnAyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDM4MQorICAgIC0weDEuYmI5ZDNiZWI4Yzg2YjAyZDc4Yjk0MGZjMDlkZjY4YjZwMiwKKyAgICAweDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODIKKyAgICAtMHgxLmJiOWQzYmViOGM4NmFjMmQ3OGI5NDBmYzA5ZmY2OGI2cDIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzgzCisgICAgLTB4MS4wMDIwMDU1NjU1YTg5YjM3N2Q1ODAxZmQwOGZkOWYyZHAtMTAsCisgICAgMHgxLmZmN2ZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODQKKyAgICAtMHgxLjAwMjAwNTU2NTU4ODkzMzU3Y2Q3ZTFmNDg2YmQwNzA1cC0xMCwKKyAgICAweDEuZmY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzg1CisgICAgLTB4MS4wMDIwMDU1NjU1Njg4YjMzN2M1N2MxZWQwNGZjOWVlZHAtMTAsCisgICAgMHgxLmZmODAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODYKKyAgICAtMHgxLjIwNTk2NmYyYjRmMTI2YjcyODEyMDNkNzA2NmVkMGRjcDMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMzg3CisgICAgLTB4MS4yMDU5NjZmMmI0ZjEyNWI3MjgxMjAzZDcwNjZhZDBkY3AzLAorICAgIDB4MS4wcC0xMworICB9LAorICB7IC8vIEVudHJ5IDM4OAorICAgIC0weDEuMjA1OTY2ZjJiNGYxMjNiNzI4MTIwM2Q3MDY3YWQwZGNwMywKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODkKKyAgICAtMHgxLjAwMDQwMDE1NTZkNTYwODhkZGUwNzAzZjAzNGNhMDk2cC0xMywKKyAgICAweDEuZmZlZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5MAorICAgIC0weDEuMDAwNDAwMTU1NWQ1NTg4ODlkZGU3MDJiMDI4Yzk5OTZwLTEzLAorICAgIDB4MS5mZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTEKKyAgICAtMHgxLjAwMDQwMDE1NTRkNTUwODg1ZGRjNzAxZjAyNGM5ODk2cC0xMywKKyAgICAweDEuZmZmMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5MgorICAgIEhVR0VfVkFMLAorICAgIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgMzkzCisgICAgMHgxLjYyZTQyZmVmYTM5ZWYzNTM5M2M3NjczMDA3ZTVkZDVlcDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDM5NAorICAgIDB4MS42MmU0MmZlZmEzOWVmMzRmOTNjNzY3MzAwN2U1YWQ1ZXA5LAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTUKKyAgICAweDEuMjUwZDA0OGU3YTFiY2RlZTQ5OWZhNWIwY2ExZGQyNDNwMCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzk2CisgICAgMHgxLmNlNmJiMjVhYTEzMTUxMDlmZWVmYzg2MzE4YWI2ZTUycC0yLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTcKKyAgICAweDEuZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDBhYWFhYWFwLTUzLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTgKKyAgICAwLjAsCisgICAgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDM5OQorICAgIC0weDEuMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAxNTU1NTVwLTUzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDAwCisgICAgLTB4MS5lZWI5NWIwOTRjMTkyYjRhNTEzZTBiZjllZTQwZDhkNHAtMywKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwMQorICAgIC0weDEuNjIzMmJkZDdhYmNkMjNkNWU3ZmQ4MzdjNmZlMjNhNjdwOSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDQwMgorICAgIC0weDEuNjIzMmJkZDdhYmNkMjNkZGU3ZmQ4MzdjNmZlMWZhNjdwOSwKKyAgICAweDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDQwMworICAgIC0weDEuNjIzMmJkZDdhYmNkMjNlNWU3ZmQ4MzdjNmZlMjNhNjdwOSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDQwNAorICAgIC0weDEuNjIzMmJkZDdhYmNkMjNlZGU3ZmQ4MzdjNmZlMmZhNjdwOSwKKyAgICAweDEuZmZmZmZmZmZmZmZmY3AtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDQwNQorICAgIC0weDEuNzNkZjliM2FkYjMzNGU3Yzg0OTliMWUwMTQ0NmFkZmFwOSwKKyAgICAweDEuMHAtMTA3MworICB9LAorICB7IC8vIEVudHJ5IDQwNgorICAgIC0weDEuNzQzODU0NDZkNzFjMzYzOTVhN2VhM2I5ZTA0OGE3NzVwOSwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDQwNworICAgIC1IVUdFX1ZBTCwKKyAgICAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDgKKyAgICAtSFVHRV9WQUwsCisgICAgLTAuMAorICB9LAorfTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKK1RFU1QobWF0aF9sb2csIGxvZ19pbnRlbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19sb2dfaW50ZWxfZGF0YSkvc2l6ZW9mKGxvZ19pbnRlbF9kYXRhX3QpOyBpKyspIHsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKGdfbG9nX2ludGVsX2RhdGFbaV0uZXhwZWN0ZWQsIGxvZyhnX2xvZ19pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfbG9nZl90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfbG9nZl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWQwOTIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWF0aF9sb2dmX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTMyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQordHlwZWRlZiBzdHJ1Y3QgeworICBmbG9hdCBleHBlY3RlZDsKKyAgZmxvYXQgY2FsbF9kYXRhOworfSBsb2dmX2ludGVsX2RhdGFfdDsKKworc3RhdGljIGxvZ2ZfaW50ZWxfZGF0YV90IGdfbG9nZl9pbnRlbF9kYXRhW10gPSB7CisgIHsgLy8gRW50cnkgMAorICAgIC0weDEuYmI5ZDNhZWI4Yzg3YjAyZDc3NjNlYmE4YjQ4YTEwMmRwMSwKKyAgICAweDEuMDAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgMQorICAgIDB4MS5mZmZmZmUwMDAwMDJhYWFhYTZhYWFhYjExMTExMDY2NnAtMjQsCisgICAgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIC0weDEuYzZiNDVjZWIwOWE1YTdjODJhYWNkMWNhZGY3MjUzZGNwNCwKKyAgICAweDEuMDAwMDA4cC00MQorICB9LAorICB7IC8vIEVudHJ5IDMKKyAgICAtMHgxLmQxY2I3Y2VhODZkMDlmNjI0NzRiMTRjNDVmNGNiNjgwcDMsCisgICAgMHgxLjAwMDAxMHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0CisgICAgLTB4MS5mZTI4MDBlODdjMzQ3ZDc4OGYzOTRlZjJlOTNkYjg2OHA1LAorICAgIDB4MS4wMDAwODBwLTkyCisgIH0sCisgIHsgLy8gRW50cnkgNQorICAgIDB4MS4xZmZmYWYwMDFlNWZmMzJmODVjNDM2ZTU5ZmU3M2IxZXAtMTcsCisgICAgMHgxLjAwMDA5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNgorICAgIC0weDEuMGEyN2EzZmZmYTdlMGQwMzFkOWE1NWQxNTdhMGU4YzhwMSwKKyAgICAweDEuMDAwN3AtMworICB9LAorICB7IC8vIEVudHJ5IDcKKyAgICAweDEuNTRkZTZlZTc4OTg5YTlhY2ZjODc1YzFkNDVlMTY0OTBwLTksCisgICAgMHgxLjAwYWFhOHAwCisgIH0sCisgIHsgLy8gRW50cnkgOAorICAgIDB4MS44ZjQ4MjZmZmY3ODdjNThmYWI1MjBlNTA1OTUyYmI1NXAtOSwKKyAgICAweDEuMDBjN2YycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5CisgICAgLTB4MS42MTUwY2VmZmZjODNiYTJkYTQzZDhkNzQ1NWVmMmZkZXAtMSwKKyAgICAweDEuMDBjYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwCisgICAgMHgxLmNmMmUzZWIwOTI4YmRmNWNiZjA2NGEyN2M2NDIyYzg1cC05LAorICAgIDB4MS4wMGU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIDB4MS5mMGVlOGE5YTY3YWIzNjU5N2ZmZDNjOTMzMDRkMGNjNXAtOSwKKyAgICAweDEuMDBmOGYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMgorICAgIDB4MS5mYmRmYzg5N2QyMzlmYjQ5ZGMxYzMxYWZlYWVhMWVhNXAtOSwKKyAgICAweDEuMDBmZTZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMworICAgIDB4MS5mZGM1ZTQ4Zjg5M2U4ZjQ4OTY3ZWU0ZmYxZTg5NWRkNXAtOSwKKyAgICAweDEuMDBmZjYycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNAorICAgIDB4MS5iZTc5YzcwMDU4ZWM4ZjlhNmMwNDA0M2Y1Mjc2M2MzMHAtOCwKKyAgICAweDEuMDFjMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTUKKyAgICAweDEuZTNhZmVmMDM2YzQ0MmJlYTQ2ZDEwNWY2ODY0ZWE2ZjNwLTgsCisgICAgMHgxLjAxZTU3YXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTYKKyAgICAweDEuZWI5MmRiMDNkODlmMjU3MTlhZjkwOGViYjZlN2U1MTBwLTgsCisgICAgMHgxLjAxZWQ2Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTcKKyAgICAweDEuZjg3M2I1MDJmOTQyN2NiMWExNDg3MjI2N2ZmYWUyZjhwLTgsCisgICAgMHgxLjAxZmE2NnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTgKKyAgICAweDEuZmMxMDg5MDNmY2Q0Y2Q0NDU4MDBjYjA2YzE2NGQwYjBwLTgsCisgICAgMHgxLjAxZmUwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTkKKyAgICAweDEuZmVhMTY4ZmFkNjI3NDIzMmFkMzk5OGMzZTM5ZTQzZDlwLTgsCisgICAgMHgxLjAyMDBhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjAKKyAgICAweDEuMGNlNGM5ZmUzZWRkN2Y0NWRjMzhkMzBmNzYzMDU5MzFwLTcsCisgICAgMHgxLjAyMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDIxCisgICAgMHgxLjBlZTA5NmUyNzY0ZjlmMWU2NDg0MDYwNzQzNmNjMDkzcC03LAorICAgIDB4MS4wMjIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMgorICAgIDB4MS5mYzA5OGVmZmZlNDlmZTMyYzM1NzZkZWY2ZjMwMzMzNXAtNywKKyAgICAweDEuMDNmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMworICAgIC0weDEuNThmZWQ0MDAwMTVmZmY5NGFjM2JiOWViYmM4MWM4YWVwLTEsCisgICAgMHgxLjA0ZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNAorICAgIC0weDEuNThiMWYxZmZmZmE1NmI1NWI2YTcyMmUwYWIyYzVhZTZwLTEsCisgICAgMHgxLjA1MjYzNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI1CisgICAgMHgxLmU3MjBhMzAwM2QwOTk3MzFjODVjZTZkNjg5NTQ2YTc2cC02LAorICAgIDB4MS4wN2I5YzRwMAorICB9LAorICB7IC8vIEVudHJ5IDI2CisgICAgMHgxLmY1YTRjYjAwMzUzOTM3YWQ4YjFlMDdhNmE0NjkxODlmcC02LAorICAgIDB4MS4wN2Y1OWNwMAorICB9LAorICB7IC8vIEVudHJ5IDI3CisgICAgLTB4MS5iMDA4MGZmZmQ1ODhlYzkxODgzNzE1NzM2YWFlMGY1MHA0LAorICAgIDB4MS4wOHAtMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIDB4MS43ZjY0YTcwMDAwMmI1NGQ2ZmI1ZDY5YmMzNWM1ZTJjYXAtMSwKKyAgICAweDEuMGVhN2IwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOQorICAgIDB4MS5jZjI4MjUwNzhkOGJkMjFmNWI1NTQzMzQyZTY2YjU0ZHAtNSwKKyAgICAweDEuMGVlNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzAKKyAgICAweDEuODQ1NjU3MDAwMzkxZjM0MGRhNzQ1ZDllNWQyODMxNjVwLTEsCisgICAgMHgxLjExNDhwMQorICB9LAorICB7IC8vIEVudHJ5IDMxCisgICAgLTB4MS5iOTU5NDIwMDA0YjUxZmI4MGQ4MzI5MTcyZDg5MjJmNnAzLAorICAgIDB4MS4xMmM4cC0yMAorICB9LAorICB7IC8vIEVudHJ5IDMyCisgICAgLTB4MS4zY2IyMjZjZWY5YTYxMGNmNzdkYzAwNjc5MDJiNDA5OXAtMSwKKyAgICAweDEuMTNkNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMzCisgICAgMHgxLjVlMWEyMmZjY2Q4N2Q0MGI2ZTdlYmMwMjI2Mzc0ZDYxcC00LAorICAgIDB4MS4xNmQ4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNAorICAgIC0weDEuMzVmYjc2ZGQ4YzdhMjExZjMzODQyYWY0MmM1OTkxMTRwLTEsCisgICAgMHgxLjE3NzhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNQorICAgIC0weDEuMzUwMjhhZDlkOGM4NWMxZmNhOTNmMzU1ZDQ3OTZiYzFwLTEsCisgICAgMHgxLjE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzYKKyAgICAweDEuYTNmNzFjZmYxNGI4MTExYWRlZDk3NmMyNmQxODk2MGVwLTQsCisgICAgMHgxLjFiYTRwMAorICB9LAorICB7IC8vIEVudHJ5IDM3CisgICAgLTB4MS41NWEwNjFmZmY5MGZhNmRmNzU1ZjdhZWY1YWI5Zjk3OHAxLAorICAgIDB4MS4xYmY0cC00CisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAtMHgxLmNlNWZmZGU2NmE5YWY3ODNiODY0NDMyMDllY2VjMTY0cDMsCisgICAgMHgxLjFjZTBwLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMzkKKyAgICAtMHgxLmNlM2E1NWVhNWQ0NzMyMmJkYmJlMGZmZjU0NzljYTFlcDMsCisgICAgMHgxLjFlMzBwLTIxCisgIH0sCisgIHsgLy8gRW50cnkgNDAKKyAgICAweDEuZTIzNzkyZWY1Mjk3MWZkNmM3MmE5OWY1OThhMGZiYWNwLTQsCisgICAgMHgxLjFmZmNwMAorICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgMHgxLjhmZTBjODUzMTRiYTVlMDllMTE1NTI4YzAyZWY2ZTMxcDAsCisgICAgMHgxLjMxMmU3OHAyCisgIH0sCisgIHsgLy8gRW50cnkgNDIKKyAgICAtMHgxLmZkZWRmYWRlNDY1ZDU3MzM2YTliOGEzNTYyZDNiMTc2cC0yLAorICAgIDB4MS4zNzJjMTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MworICAgIC0weDEuZmQ5Yzk4ZGU3ZDg5YjllMjk1NDZhOWI3NjkyY2FjZGRwLTIsCisgICAgMHgxLjM3NDRkMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ0CisgICAgLTB4MS5mZDU2NTZkZTBjNjZkNDdiN2I5Y2Y0ZmE2OGIzNTZlNHAtMiwKKyAgICAweDEuMzc1YTJlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDUKKyAgICAtMHgxLmZjYTk4Y2RlMGNlYjE4ZDZkN2JhYjc3MDVkMTRkZTE3cC0yLAorICAgIDB4MS4zNzhlYmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIC0weDEuZmMwYTU4ZGU0ZWE3Yzk0MzJhYzAwZmYwYWRiNmRiN2VwLTIsCisgICAgMHgxLjM3YmYzMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ3CisgICAgLTB4MS5lYmRlZGU1MWRlN2Q3YjM1OWFjYzIzZWMzMTJhZjJkNHAtMiwKKyAgICAweDEuM2NiNTZhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDgKKyAgICAtMHgxLmRhZTBkZWRmZGRhMjU2OTM3OTYzMGFiZmZjYWZmZmYycC0yLAorICAgIDB4MS40MjAyMDhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OQorICAgIC0weDEuZDkzMGNhNTNhZThlMDY5NWQxNGU0ODM3NmI1ODQ2NjhwLTIsCisgICAgMHgxLjQyOGEwNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUwCisgICAgMHgxLmVjMzY0OWM3MmMwNWEwNjljMmQwMDAwOTA4NTFjNjM5cC0zLAorICAgIDB4MS40NThjYmVwMAorICB9LAorICB7IC8vIEVudHJ5IDUxCisgICAgMHgxLmYzZTYzMjU3ZWNkMTJiMGQ5Y2NjOWZmMzRjM2YzZDZlcC0zLAorICAgIDB4MS40NmM2MjZwMAorICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgLTB4MS42OTNjZmEzMGI2MzNiMWQwM2Y0ZWNkODhhNzUwYWM3OXAtMiwKKyAgICAweDEuNjdjZDNhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTMKKyAgICAtMHgxLjY5MmI1ZTQyMTA4YjczZDc1OTk1MTgwNzRjZTg2NzBhcC0yLAorICAgIDB4MS42N2QzNmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NAorICAgIC0weDEuNjNiYmJhMTc3MWI4MjA4ZDg1MWFiMzZjZDZkOTNmMzhwLTIsCisgICAgMHgxLjY5YmRiYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDU1CisgICAgMHgxLjYyZTI1ZWVjODU3ODFlNjBjYjQ5YjRmMjFiZWNhYmRmcC0yLAorICAgIDB4MS42YTA5NDJwMAorICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgMHgxLjYyZTNjZTllZjg2ZjY1MjQzNTFlZGQ4NzMxMGU4NzQzcC0yLAorICAgIDB4MS42YTA5YzRwMAorICB9LAorICB7IC8vIEVudHJ5IDU3CisgICAgLTB4MS4zYzYwN2FkZWRiMTY4ZDlkODljNmIyMjY1YjRkZDBhNHAtMiwKKyAgICAweDEuNzdlYTM4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTgKKyAgICAtMHgxLjE5NDQzMmZmZmNiMDkyZDg5MTY3MGI3ZjhmNjI4ZmM0cDYsCisgICAgMHgxLjc3ZmZmZXAtMTAyCisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAweDEuMTkzZWE1MDAyNTgyNzA5MzBmOGU3ZDdhZjI0NGRjZmZwMCwKKyAgICAweDEuN2ZmZmZjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MAorICAgIC0weDEuZGFjMDhkZTFkMjZiMGY2OWUxZWQ1OGJkM2Q5ZmQ4MmJwMywKKyAgICAweDEuODJmZTkycC0yMgorICB9LAorICB7IC8vIEVudHJ5IDYxCisgICAgMHgxLmM4ZDcwZGUxMTdjYjJmZTQ1OWVkNjRjYzY3ZTVhYmM5cDMsCisgICAgMHgxLjgzMDYwOHAyMAorICB9LAorICB7IC8vIEVudHJ5IDYyCisgICAgMHgxLmYyMjcyYWUzMjVhNTc1NDZmNjk0OTZjZjI2MWJlMDQ2cDEsCisgICAgMHgxLjg4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MworICAgIDB4MS5jOWM1YWRlMzQ3NjNjMGI5YTE4MGQ4NjNiZmM3ZjEwNnAzLAorICAgIDB4MS44ZTc2ODZwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIC0weDEuZjk5MWQxMDhhYmUxZmM5YzkxZTkxYWU3ZjcwN2JkNGZwLTMsCisgICAgMHgxLjhmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY1CisgICAgLTB4MS44MjdkNGQwMDJlNWQxMzIxNWNlNWY4ZGU4NzU2NjkzM3AxLAorICAgIDB4MS44ZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NgorICAgIC0weDEuZjMwNWJkMDU4YjNjOWU2NDEwMTQ3NmU1ZGU5MTFkODNwLTMsCisgICAgMHgxLjkxNDdlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgLTB4MS5lZTdlZTUwNjUwODc4YTg0ZTk3ZjRjZWM5NjczNmJjNXAtMywKKyAgICAweDEuOTIyYjMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjgKKyAgICAweDEuZGMwMzkxMDA1YmYwZmNjYjkyYzI2MmVlYjZhMzAwZTRwMCwKKyAgICAweDEuOWFlMjc4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OQorICAgIC0weDEuMjY1MGI2MDAwMDBiZTBjNTkwMmM3YTE1NDk1MTYxYzVwMSwKKyAgICAweDEuOWFlZWEwcC00CisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAtMHgxLjdiYTliN2ZmZmYzZDE4OWY1YTE3MTQ5Njk3YzEyY2UycDEsCisgICAgMHgxLmE1ZTk3MHAtNQorICB9LAorICB7IC8vIEVudHJ5IDcxCisgICAgLTB4MS4yMDYxNzBmZmZjOWU4YTkzYzE5ODZlMjE3ODdiZWQ1YXAxLAorICAgIDB4MS5hZTZlZjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MgorICAgIC0weDEuZDczZDdmZmMxZTdhYmM0MjI1ZTM5ODc4ODI4Zjg2NjZwMywKKyAgICAweDEuYWZlMjZjcC0yMgorICB9LAorICB7IC8vIEVudHJ5IDczCisgICAgLTB4MS4yNTE3NDcwMDAwMDAwOGRkYmU3NTU3MzlkNjI2MzY0ZnAzLAorICAgIDB4MS5iOTdjNzBwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgNzQKKyAgICAtMHgxLjFjYTViNTAwMDM1ZmMwN2MzODlhOWU1Y2JmZDc4ZWRicDEsCisgICAgMHgxLmJiMmMyY3AtNAorICB9LAorICB7IC8vIEVudHJ5IDc1CisgICAgLTB4MS4yNGIwZWJmZmZjYzMyZWUxYjliNzM5ZTJhNGM3ZDA1OXAzLAorICAgIDB4MS5iZjA5NzBwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAtMHgxLjY2OTkxNTAwMDIzMGQ3NGZhMmRhMmY0MGJiZGY0NDY5cDMsCisgICAgMHgxLmM3ZmZmZXAtMTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NworICAgIC0weDEuOTU0YWVlZGY0ZDVmNWZiN2M0NzRhMzU3MjNiNGU3MDdwLTEsCisgICAgMHgxLmNmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgLTB4MS45MmU3NmFmZmZjZDQ0OWIzYWM1ZDQxMmI2MjJmNzhhOHAtNCwKKyAgICAweDEuZDAwOGU0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAtMHgxLmZmYTI0ZjFjMTIzM2E5ZjhlOGFlNjg0ZWRmODkzMTNmcC01LAorICAgIDB4MS5lMTAwNDBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MAorICAgIC0weDEuMTE3ODg5ZmZmZmZiZGY4YTVjZDdjMzRmNzI0NmYzY2ZwMSwKKyAgICAweDEuZTM5YmI0cC00CisgIH0sCisgIHsgLy8gRW50cnkgODEKKyAgICAtMHgxLjg5NGFjMmRjZGRlNTQ5ZDBkMDkyMmI1YjRmNTRlMDI4cC01LAorICAgIDB4MS5lN2ZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MgorICAgIC0weDEuMzgxZDM2ZmZlNjBlYjFkZmIwNjg2NTc0MDc0MjIzZTdwLTUsCisgICAgMHgxLmVjZGMxY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDgzCisgICAgMHgxLmQxNDk3M2VkYjM2NTZjNzcxZTE4ZWNhODRiYzk0Yzc2cDQsCisgICAgMHgxLmVmZmZmZXA0MQorICB9LAorICB7IC8vIEVudHJ5IDg0CisgICAgLTB4MS5lZmVhMThmZmYxMTE1ZTgxNjM2ZjUzYjY1NjY1ZTE2ZXAtNiwKKyAgICAweDEuZjBiYzIwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODUKKyAgICAtMHgxLmE1YjU4NGZmZGFkMzExNDdkMTE0MGIxNjk0NzQwYWQ3cC02LAorICAgIDB4MS5mMmZkNjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NgorICAgIC0weDEuNjJiMzVhZmZkZjBhMjQyOTI4NGIwMDZiNjgwYmQxYmVwLTYsCisgICAgMHgxLmY1MDhlNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDg3CisgICAgLTB4MS4wY2IxNDBmZmZmOWY4ZjFlMDZlN2Y5YWYwYTUzMWE1YnAxLAorICAgIDB4MS5mNjAwZGNwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OAorICAgIC0weDEuMGJmZTcwZWI0NTFhZDA5YTdjYjc1YzFlZWRmYTYxNTBwMSwKKyAgICAweDEuZjhjMDEwcC00CisgIH0sCisgIHsgLy8gRW50cnkgODkKKyAgICAtMHgxLjcwYzhjNTBkY2UyNDZkZDZiY2IwNDYxZTdkYzQ5MzdlcC03LAorICAgIDB4MS5mYTQ1MjJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MAorICAgIC0weDEuNDE2YTcxYjc3M2EyYzNlMzk4MGIxMWVmZDFhMTk3YjVwLTgsCisgICAgMHgxLmZkN2ViZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDkxCisgICAgLTB4MS5jMGM2NzQ2MjFjNWI0NzRhNDMwZTEzNTcwYzU4MDM4OHAtOSwKKyAgICAweDEuZmUzZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTIKKyAgICAtMHgxLjA0ODYzY2ZmZmJiZjdlZGIxNjdjYjYwZGYzZjNkNTk5cC05LAorICAgIDB4MS5mZWZiYmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MworICAgIC0weDEuMGE1ZGRmMDAwMDRlYmYyYTZmZWVlOTlkNWJkZGRlMzRwMSwKKyAgICAweDEuZmYzNTNjcC00CisgIH0sCisgIHsgLy8gRW50cnkgOTQKKyAgICAtMHgxLmQ4MDM2NjQ4NWI3NDcyNDdhNDViYjlhNDcwMTc5ZGYxcC0xNSwKKyAgICAweDEuZmZmOGEwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTUKKyAgICAtMHgxLmQxY2I3ZmVhODZjNDlmNjMwNzRiMGQ0NDVmYjY1MDE0cDMsCisgICAgMHgxLmZmZmZmMHAtMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NgorICAgIDB4MS5kMWNiN2RlYTg2YmM5ZjYyZGNhMDYxOTliNTA1M2YwM3AzLAorICAgIDB4MS5mZmZmZjBwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NworICAgIC0weDEuMDAwMDAyMDAwMDA1NTU1NTY1NTU1NTg4ODg4OTMzMzNwLTIyLAorICAgIDB4MS5mZmZmZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIC0weDEuMDAwMDAxMDAwMDAxNTU1NTU3NTU1NTU4ODg4ODhkZGRwLTIzLAorICAgIDB4MS5mZmZmZmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OQorICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAtMHgxLjYyZTQzMTE1YThmYjQ3YzNhN2MyZTc2YTgwY2NhOWE1cC0yLAorICAgIDB4MS42YTA5ZTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEKKyAgICAtMHgxLmRhMzkxYTcwZDI4YTI0NjQxNjI2ZjVlOTE1NTMyNGI1cC0zLAorICAgIDB4MS45NjJiNjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIKKyAgICAtMHgxLjA2ZmJlNmE0ZTI1Mjk1ZjgwZmIyMjc0YWZlNmQzYmFjcC0zLAorICAgIDB4MS5jMjRjZGFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMKKyAgICAtMHgxLjFlMGE2ZDA1MzQyNWQzZDY1MjhhYTcxN2VjYzlhNTc4cC01LAorICAgIDB4MS5lZTZlNTRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQKKyAgICAweDEuOWU1NDljMzc3OWYwOTM0NTE4OTJhMWZlNGU2N2I1MGVwLTUsCisgICAgMHgxLjBkNDdlNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA1CisgICAgMHgxLjA4ZTBiOWYzYTc5NDRiYWIzZWNiNTZkNmE3ZmYwM2I1cC0zLAorICAgIDB4MS4yMzU4YTJwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNgorICAgIDB4MS45ZTY0NWQ2MGZmMTk4OTg2NDc5MzQ2ZDE2NGVjYWQ3ZXAtMywKKyAgICAweDEuMzk2OTVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcKKyAgICAweDEuMTRkZDY3MGNhYzAyMTI1MDZiZjcyZmI3NjJkOGE3ZGJwLTIsCisgICAgMHgxLjRmN2ExYXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgMHgxLjU2MTgxOWFjYTQ5ZGU2YjFkMWNjZGExMDk1Yzc0NTAycC0yLAorICAgIDB4MS42NThhZDZwMAorICB9LAorICB7IC8vIEVudHJ5IDEwOQorICAgIDB4MS45MzZhN2M0OTZjM2UyMTQwNmFmOWY0YWM5YmVhYzZhNXAtMiwKKyAgICAweDEuN2I5YjkycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAweDEuY2Q0NWE4ZDdlMzQwM2Y1Mjc4ZDVlM2Q1NjYzNDlmNzVwLTIsCisgICAgMHgxLjkxYWM0ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTExCisgICAgMHgxLjAyMDQ0ODMxMjExZWQwMDY4ZWZhNGMyYThiOTg3MGJmcC0xLAorICAgIDB4MS5hN2JkMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDExMgorICAgIDB4MS4xYzAxZDVmNmQzYTUwZDMxYzQ1Y2JmZGRkMDI3Mjc2NXAtMSwKKyAgICAweDEuYmRjZGM2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMKKyAgICAweDEuMzRiZGU0NmZkODRmY2E0M2JhM2Y0Nzk5YWNhYjEwZmZwLTEsCisgICAgMHgxLmQzZGU4MnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTE0CisgICAgMHgxLjRjNTYxODEzNmEzMjIxZDg0NDc2Yjc4MzUzZmFiYzgwcC0xLAorICAgIDB4MS5lOWVmM2VwMAorICB9LAorICB7IC8vIEVudHJ5IDExNQorICAgIDB4MS42MmU0MjllZmEzOTVmMzU3ODFjNzY3MDc4N2U1OGMyYnAtMSwKKyAgICAweDEuZmZmZmZhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYKKyAgICAtMHgxLjYyZTQzMTE1YThmYjQ3YzNhN2MyZTc2YTgwY2NhOWE1cC0yLAorICAgIDB4MS42YTA5ZTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcKKyAgICAtMHgxLjI0Y2ZkMDk1MTRiYWU5ZTIxNTAxZDFhMjhjMzdkNTFlcC0yLAorICAgIDB4MS44MGFhODRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgKKyAgICAtMHgxLmQ0OTAyYTdmNmExZDE4ZGEyNDFkZmZiNDJhMDgxOGVkcC0zLAorICAgIDB4MS45NzRiMjJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkKKyAgICAtMHgxLjY1ZDU2MDdjYzg1YmFiYTI2ZTJmYWY3ODg2NWRjOTkxcC0zLAorICAgIDB4MS5hZGViYzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAKKyAgICAtMHgxLmY5OTFkOGY2ZTJmMDExOTQzZDVhNmE2MGNkNjQ2MDAycC00LAorICAgIDB4MS5jNDhjNWVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEKKyAgICAtMHgxLjMxYjlhOTk1NTAyZDU5MjQxNTAwY2QxY2U5NTVmNWM0cC00LAorICAgIDB4MS5kYjJjZmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIKKyAgICAtMHgxLmNjYjc5OTRiZGE4MThjMjZjYzE1ZmNhNjYwZjM2NGVjcC02LAorICAgIDB4MS5mMWNkOWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMKKyAgICAweDEuMGI5NDkyYmQ5OTU3MGU4YTJhMmY1YTdmNTk2NDRiNDJwLTYsCisgICAgMHgxLjA0MzcxY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTI0CisgICAgMHgxLmUyNzA1ZTljYzU1NGQ4YjU2NTQzM2M4ZmFkMmRiMTY0cC01LAorICAgIDB4MS4wZjg3NmNwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNQorICAgIDB4MS45ODZkMzIxNjg4YjA3NGEyMWViMjZiNDE2NzllZTMwOXAtNCwKKyAgICAweDEuMWFkN2JjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYKKyAgICAweDEuMWM4OTkxOWZiMjA4ZWJkYTI3NWQ2ZmVlNzU1NzdhNDNwLTMsCisgICAgMHgxLjI2MjgwY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTI3CisgICAgMHgxLjY5ZDQ2M2RiNWQwZDhjYmM1ZGE4YmQyYzFmNWQyOTUzcC0zLAorICAgIDB4MS4zMTc4NWNwMAorICB9LAorICB7IC8vIEVudHJ5IDEyOAorICAgIDB4MS5iNDRmODczODE2MTFhYjI4MDZkNmYwMGQyMTNkZTJjZnAtMywKKyAgICAweDEuM2NjOGFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkKKyAgICAweDEuZmMyZDgwZTUzMTFiM2Y3ZTA1ZjI2Yjk2MzA0NGVhMDhwLTMsCisgICAgMHgxLjQ4MThmY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTMwCisgICAgMHgxLjIwY2RkOTI2MmM1OWE3NzI2Njg5ZjRmZTVmZmE1OGZlcC0yLAorICAgIDB4MS41MzY5NGNwMAorICB9LAorICB7IC8vIEVudHJ5IDEzMQorICAgIDB4MS40MjYxODJkYjIwZTIzZDBiNDczYWUxYzJkMTk3NWMzZnAtMiwKKyAgICAweDEuNWViOTljcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIKKyAgICAweDEuNjJlNDJlYzk5ZTQyOWVlYjdmY2JlNmY1OGVmZjMxMTdwLTIsCisgICAgMHgxLjZhMDllNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTMzCisgICAgLTB4MS4yNjk2MjExMzRkYjkyNzgzYmViNzY3NmMwYWE5YzJhM3AtMiwKKyAgICAweDEuODBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQKKyAgICAtMHgxLjg5ZmE0ODRkMzU1YjVlMTg2ZjU2NjJiM2RhM2U3NDVicC0zLAorICAgIDB4MS5hNjY2NjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUKKyAgICAtMHgxLmFmOGU4OTJkMTVkZTg3ZTJlOWU1OWRmZjVjMDYzM2JlcC00LAorICAgIDB4MS5jY2NjY2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYKKyAgICAtMHgxLjllY2ViY2I1OTdlYTFiYjQzZDg5NmY1ODQ3NTk3NDRhcC02LAorICAgIDB4MS5mMzMzMzJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzcKKyAgICAweDEuOGZiMDRiOGRhNjVjZWI4NWEyZWRiN2QwZmYwYWQyZDNwLTUsCisgICAgMHgxLjBjY2NjY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgMHgxLmUyNzA3NmUyYWYyZTVlOWVhODdmZmUxZmU5ZTE1NWRicC00LAorICAgIDB4MS4yMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM5CisgICAgMHgxLjc1NjUwNjczOWViYWYxY2Q1ODg1NWQyMzFlNzc3YTU5cC0zLAorICAgIDB4MS4zMzMzMzRwMAorICB9LAorICB7IC8vIEVudHJ5IDE0MAorICAgIDB4MS5mMThkY2UyODk4ZjViYTkxOWQ4MjVkOTY5NmM2Yzc3NHAtMywKKyAgICAweDEuNDY2NjY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAweDEuMzM0ZWE1NjQ0MjQwMTNiNzczOWFmYmM5NDc4NzQxYjVwLTIsCisgICAgMHgxLjU5OTk5Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTQyCisgICAgMHgxLjZhYWMwZDBmZTM4NzFhYjYwZDcwZDQxZTk1NGMyYmQzcC0yLAorICAgIDB4MS42Y2NjZDBwMAorICB9LAorICB7IC8vIEVudHJ5IDE0MworICAgIDB4MS45ZjMyM2VjYmY5ODRiZjJiNjhkNzY2ZjQwNTIyMTgxOXAtMiwKKyAgICAweDEuODBwMAorICB9LAorICB7IC8vIEVudHJ5IDE0NAorICAgIDAuMCwKKyAgICAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDUKKyAgICAweDEuODY2M2ZkNjUzOGM4NzIzNDllYzFhODVlMDVlYzVmYjVwLTQsCisgICAgMHgxLjE5OTk5YXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ2CisgICAgMHgxLjc1NjUwNjczOWViYWYxY2Q1ODg1NWQyMzFlNzc3YTU5cC0zLAorICAgIDB4MS4zMzMzMzRwMAorICB9LAorICB7IC8vIEVudHJ5IDE0NworICAgIDB4MS4wY2E5M2I2ZjU2YWZiYWNkMDc5NzNiMGEzYzY3ZmM0N3AtMiwKKyAgICAweDEuNGNjY2NlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDgKKyAgICAweDEuNTg4YzMyMjM3YzZhZWZlOTZlMWRiMjdjNDY3MTBkMzlwLTIsCisgICAgMHgxLjY2NjY2OHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgMHgxLjlmMzI0NDIxNGVkNjg2NDdkZGM3OTk4MjNlMDVhOWIxcC0yLAorICAgIDB4MS44MDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDE1MAorICAgIDB4MS5lMTQ4YTdhMjcyNjg1OTRkZmQ0ZGQ2YzMwMWZlY2U3OXAtMiwKKyAgICAweDEuOTk5OTljcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTEKKyAgICAweDEuMGZhZTg0ZGM5NWUxYTdkOTg5NzQ3MmQ1NWE3NTYzZThwLTEsCisgICAgMHgxLmIzMzMzNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTUyCisgICAgMHgxLjJjZjI2MzNiYzdmYzlkOWQ5OTI5MzE5YWE5MTg4MjJjcC0xLAorICAgIDB4MS5jY2NjZDBwMAorICB9LAorICB7IC8vIEVudHJ5IDE1MworICAgIDB4MS40OGExMTY1ZGYyNzRhYjc5NjNmODU1MGRjYmZiNmFlYnAtMSwKKyAgICAweDEuZTY2NjZhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTQKKyAgICAweDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwLTEsCisgICAgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTU1CisgICAgMHgxLjE1NDI0NTczMzdkNDJlMWM2YjczYzg5ZDg2MmJhMTcxcDYsCisgICAgMHgxLnAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTYKKyAgICAweDEuMTVhM2RlNzI5MTIyNjAzOGY4OWI3OTA3OWRhZDFjODlwNiwKKyAgICAweDEuMTk5OTlhcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDE1NworICAgIDB4MS4xNWZjZjdmNjcxYTM4Yjk1NTIyMDBiNGMxN2JhZGQyZnA2LAorICAgIDB4MS4zMzMzMzRwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgMHgxLjE2NGVlZWFlYTcyYWRkZDczODdiNWZkODkwNjgwOTZlcDYsCisgICAgMHgxLjRjY2NjZXAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTkKKyAgICAweDEuMTY5YWQxYTU1YjUwOTkwYzU0ZTFlNjUwMDI3MjEyN2ZwNiwKKyAgICAweDEuNjY2NjY4cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDE2MAorICAgIDB4MS4xNmUxNzdiNzU5MjMwNGEyYjM1MTkwMzcwODY5YTcxYnA2LAorICAgIDB4MS44MDAwMDJwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTYxCisgICAgMHgxLjE3MjM4ZTFhZGE0Njk2NzViOTcxMTY3NDQ5MmRhMDQwcDYsCisgICAgMHgxLjk5OTk5Y3AxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjIKKyAgICAweDEuMTc2MWEyN2NmMGZmZjE2YzFlODZiMTgzMzBlMDhjMzlwNiwKKyAgICAweDEuYjMzMzM2cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDE2MworICAgIDB4MS4xNzljMmEzOWFmNjQyNzU3YTZhNjFiMDBiYjdkZDI3NnA2LAorICAgIDB4MS5jY2NjZDBwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTY0CisgICAgMHgxLjE3ZDM4NzlmZjNiOTE3NzM1ZTNiYjk0N2ExYzM5ODQ3cDYsCisgICAgMHgxLmU2NjY2YXAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjUKKyAgICAweDEuMTgwODBkZDMxNzFiNmMwMzFhOWI1NzZiZTYzYjZkNGNwNiwKKyAgICAweDEucDEwMQorICB9LAorICB7IC8vIEVudHJ5IDE2NgorICAgIC0weDEuMDAwMDA4MDAwMDU1NTU1OTU1NTU4ODg4OGIzMzMzNTdwLTIwLAorICAgIDB4MS5mZmZmZTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjcKKyAgICAtMHgxLjAwMDAwNDAwMDAxNTU1NTVkNTU1NTg4ODg4OWRkZGRlcC0yMSwKKyAgICAweDEuZmZmZmYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgMC4wLAorICAgIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDE2OQorICAgIDB4MS5mZmZmZjgwMDAwMmFhYWE5YWFhYWIxMTExMGU2NjY2N3AtMjIsCisgICAgMHgxLjAwMDAwOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTcwCisgICAgMHgxLmZmZmZmMDAwMDBhYWFhYTJhYWFiMTExMTBiYmJiYzA0cC0yMSwKKyAgICAweDEuMDAwMDEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzEKKyAgICAtMHgxLjAwMDAwMDgwMDAwMDU1NTU1NTk1NTU1NTg4ODg4OGIzcC0yNCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTcyCisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3MworICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzQKKyAgICAtMHgxLjAwMDAwMDgwMDAwMDU1NTU1NTk1NTU1NTg4ODg4OGIzcC0yNCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTc1CisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3NgorICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAtMHgxLjAwMDAwMDgwMDAwMDU1NTU1NTk1NTU1NTg4ODg4OGIzcC0yNCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTc4CisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODAKKyAgICAtMHgxLjAwMDAwMDgwMDAwMDU1NTU1NTk1NTU1NTg4ODg4OGIzcC0yNCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTgxCisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE4MgorICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAtMHgxLjAwMDAwMDgwMDAwMDU1NTU1NTk1NTU1NTg4ODg4OGIzcC0yNCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTg0CisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE4NQorICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODYKKyAgICAweDEuNjJlNDJmZWJhMzllZjE1NzkzYzYxMWRhYjE5MDk4MDhwNiwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDE4NworICAgIC0weDEuOWQxZDlmY2NmNDc3MDc0M2YyMDYxZTFkZTkzMWE2NTBwNiwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODgKKyAgICAtMHgxLjYyZTQzNmJkZDA5YTg3NjE5NDk0MGI5NmNiMjhmZDdmcC0yLAorICAgIDB4MS42YTA5ZTRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODkKKyAgICAtMHgxLjYyZTQzMTE1YThmYjQ3YzNhN2MyZTc2YTgwY2NhOWE1cC0yLAorICAgIDB4MS42YTA5ZTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTAKKyAgICAtMHgxLjYyZTQyYjZkODE2NDA4MjViZjg5ZDhiOGQ5ZDBmZjU4cC0yLAorICAgIDB4MS42YTA5ZThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTEKKyAgICAweDEuNjJlNDI5MjE3NmEzNWY0ZDkyZmFjMmM5NDRhMmRkM2RwLTIsCisgICAgMHgxLjZhMDllNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTkyCisgICAgMHgxLjYyZTQyZWM5OWU0MjllZWI3ZmNiZTZmNThlZmYzMTE3cC0yLAorICAgIDB4MS42YTA5ZTZwMAorICB9LAorICB7IC8vIEVudHJ5IDE5MworICAgIDB4MS42MmU0MzQ3MWM1ZDlkZTg5NjgwNGY1YTczNWZhZGI2NXAtMiwKKyAgICAweDEuNmEwOWU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTQKKyAgICAtMHgxLjYyZTQzMWVmYTM5ZmYzNTc5NDcyMTFkYjMyOTA5ODZmcC0xLAorICAgIDB4MS5mZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTUKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcC0xLAorICAgIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTYKKyAgICAtMHgxLjYyZTQyYmVmYTNhMmYzNTc4ZTcyMTFlMmIyOTA4YjNjcC0xLAorICAgIDB4MS4wMDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTcKKyAgICAtMHgxLjI2OTYyNjY4YTMxMjBiMTFmYWM0MGJjN2IyMmI1YThkcC0yLAorICAgIDB4MS43ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTgKKyAgICAtMHgxLjI2OTYyMTEzNGRiOTI3ODNiZWI3Njc2YzBhYTljMmEzcC0yLAorICAgIDB4MS44MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE5OQorICAgIC0weDEuMjY5NjFiYmRmODY3NjA2NzQ5YzczNGRkZDFjNjMxMGJwLTIsCisgICAgMHgxLjgwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIwMAorICAgIDB4MS45ZjMyMzk3NmE0MmJkYjlkMmNjYWMyOTg1ZGEwODAyZnAtMiwKKyAgICAweDEuN2ZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDEKKyAgICAweDEuOWYzMjNlY2JmOTg0YmYyYjY4ZDc2NmY0MDUyMjE4MTlwLTIsCisgICAgMHgxLjgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDIKKyAgICAweDEuOWYzMjQ0MjE0ZWQ2ODY0N2RkYzc5OTgyM2UwNWE5YjFwLTIsCisgICAgMHgxLjgwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgMHgxLjU0ZGU2ZWU3ODk4OWE5YWNmYzg3NWMxZDQ1ZTE2NDkwcC05LAorICAgIDB4MS4wMGFhYThwMAorICB9LAorICB7IC8vIEVudHJ5IDIwNAorICAgIDB4MS41NGUyNmMzZWFiNmVhMjQxMTVhNGVjYmM2YzIxYzNkZXAtOSwKKyAgICAweDEuMDBhYWFhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDUKKyAgICAweDEuNTRlNjY5OTVjNTVlM2FkNDBjYjJiMDFkNzdiOGI2M2ZwLTksCisgICAgMHgxLjAwYWFhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMjA2CisgICAgMHgxLjYyZTQyZWVmYTM5ZTczNTc5MzcyMTFkYTcyOTA5N2Q1cDAsCisgICAgMHgxLmZmZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMjA3CisgICAgMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcDAsCisgICAgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjA4CisgICAgMHgxLjYyZTQzMWVmYTM5Y2YzNTc5NjcyMTFkNmIyOTA5ZTZmcDAsCisgICAgMHgxLjAwMDAwMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjA5CisgICAgMHgxLjYyZTQyZGVmYTM5ZGYzNTc5MzFjYmM4NGRkM2I0MjRkcC0xLAorICAgIDB4MS5mZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDIxMAorICAgIDB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U1ZWQ1ZXAtMSwKKyAgICAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTEKKyAgICAweDEuNjJlNDMzZWZhMzlhZjM1Nzk5MWNiYzdkNWQzYjRmODBwLTEsCisgICAgMHgxLjAwMDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjEyCisgICAgLTB4MS4wMDAwMDA4MDAwMDA1NTU1NTU5NTU1NTU4ODg4ODhiM3AtMjQsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDIxMworICAgIDAuMCwKKyAgICAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTQKKyAgICAweDEuZmZmZmZlMDAwMDAyYWFhYWE2YWFhYWIxMTExMTA2NjZwLTI0LAorICAgIDB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDIxNQorICAgIC0weDEuNjJlNDMxZWZhMzlmZjM1Nzk0NzIxMWRiMzI5MDk4NmZwLTEsCisgICAgMHgxLmZmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDIxNgorICAgIC0weDEuNjJlNDJmZWZhMzllZjM1NzkzYzc2NzMwMDdlNWVkNWVwLTEsCisgICAgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIxNworICAgIC0weDEuNjJlNDJiZWZhM2EyZjM1NzhlNzIxMWUyYjI5MDhiM2NwLTEsCisgICAgMHgxLjAwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIC0weDEuNjJlNDMwZWZhMzlmNzM1Nzk0MWNiYzg1OWQzYjQyZTdwMCwKKyAgICAweDEuZmZmZmZlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjE5CisgICAgLTB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U1ZWQ1ZXAwLAorICAgIDB4MS5wLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjAKKyAgICAtMHgxLjYyZTQyZGVmYTNhMGYzNTc5MTFjYmM4OTVkM2IzYzRkcDAsCisgICAgMHgxLjAwMDAwMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIC0weDEuMGEyYjI0NzNiYWI3NzY4MWFmMDAzODBlZDA5NzFjY2JwMSwKKyAgICAweDEuZmZmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjIyCisgICAgLTB4MS4wYTJiMjNmM2JhYjczNjgxYWVkNThkNjQwNWVjNzIwNnAxLAorICAgIDB4MS5wLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjMKKyAgICAtMHgxLjBhMmIyMmYzYmFiODM2ODFhZDgwMzgxMGIwOTcxOTdlcDEsCisgICAgMHgxLjAwMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDIyNAorICAgIC0weDEuNjJlNDMwNmZhMzlmMzM1NzkzZjIxMWRhZDI5MDk4MjJwMSwKKyAgICAweDEuZmZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjI1CisgICAgLTB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U1ZWQ1ZXAxLAorICAgIDB4MS5wLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjYKKyAgICAtMHgxLjYyZTQyZWVmYTM5ZmYzNTc5MjcyMTFkY2IyOTA5NGQ1cDEsCisgICAgMHgxLjAwMDAwMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIC0weDEuYmI5ZDNjNmI4Yzg2ZjAyZDc4ZTNlYmE2ZDQ4YTEzN2FwMSwKKyAgICAweDEuZmZmZmZlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjI4CisgICAgLTB4MS5iYjlkM2JlYjhjODZiMDJkNzhiOTQwZmMwOWRmNjhiNnAxLAorICAgIDB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjkKKyAgICAtMHgxLmJiOWQzYWViOGM4N2IwMmQ3NzYzZWJhOGI0OGExMDJkcDEsCisgICAgMHgxLjAwMDAwMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDIzMAorICAgIC0weDEuMGEyYjI0MzNiYWI3NTY4MWFlZWFlMmI5NmI0MWM3NjlwMiwKKyAgICAweDEuZmZmZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgMjMxCisgICAgLTB4MS4wYTJiMjNmM2JhYjczNjgxYWVkNThkNjQwNWVjNzIwNnAyLAorICAgIDB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzIKKyAgICAtMHgxLjBhMmIyMzczYmFiN2I2ODFhZTJhZTJiYTViNDFjNWMycDIsCisgICAgMHgxLjAwMDAwMnAtNgorICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIC0weDEuMzY4N2FhMzFhZjJiMzRlY2ExNjNjZjlmNmMzZTg1MTRwMiwKKyAgICAweDEuZmZmZmZlcC04CisgIH0sCisgIHsgLy8gRW50cnkgMjM0CisgICAgLTB4MS4zNjg3YTlmMWFmMmIxNGVjYTE0ZTdhNGEwNmU5MmZiMnAyLAorICAgIDB4MS5wLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzUKKyAgICAtMHgxLjM2ODdhOTcxYWYyYjk0ZWNhMGEzY2ZhMDVjM2U4MzZlcDIsCisgICAgMHgxLjAwMDAwMnAtNworICB9LAorICB7IC8vIEVudHJ5IDIzNgorICAgIC0weDEuNjJlNDMwMmZhMzlmMTM1NzkzZGNiYzg1NmQzYjQyYzBwMiwKKyAgICAweDEuZmZmZmZlcC05CisgIH0sCisgIHsgLy8gRW50cnkgMjM3CisgICAgLTB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U1ZWQ1ZXAyLAorICAgIDB4MS5wLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzgKKyAgICAtMHgxLjYyZTQyZjZmYTM5ZjczNTc5MzFjYmM4NjVkM2I0MTFhcDIsCisgICAgMHgxLjAwMDAwMnAtOAorICB9LAorICB7IC8vIEVudHJ5IDIzOQorICAgIC0weDEuOGY0MGI2MmQ5ODEyZjFjMjg2NTVhOTZiNmUzODAwNmNwMiwKKyAgICAweDEuZmZmZmZlcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI0MAorICAgIC0weDEuOGY0MGI1ZWQ5ODEyZDFjMjg2NDA1NDE2MDhlMmFiMGFwMiwKKyAgICAweDEucC05CisgIH0sCisgIHsgLy8gRW50cnkgMjQxCisgICAgLTB4MS44ZjQwYjU2ZDk4MTM1MWMyODU5NWE5NmM1ZTM3ZmVjNnAyLAorICAgIDB4MS4wMDAwMDJwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDIKKyAgICAtMHgxLmJiOWQzYzJiOGM4NmQwMmQ3OGNlOTY1MTZmMzRiZTE4cDIsCisgICAgMHgxLmZmZmZmZXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAtMHgxLmJiOWQzYmViOGM4NmIwMmQ3OGI5NDBmYzA5ZGY2OGI2cDIsCisgICAgMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDQKKyAgICAtMHgxLmJiOWQzYjZiOGM4NzMwMmQ3ODBlOTY1MjVmMzRiYzcxcDIsCisgICAgMHgxLjAwMDAwMnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDUKKyAgICAtMHgxLjIwNTk2NzEyYjRmMTM1YjcyODFjYWU4MWI5MTU3YjhkcDMsCisgICAgMHgxLmZmZmZmZXAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAtMHgxLjIwNTk2NmYyYjRmMTI1YjcyODEyMDNkNzA2NmFkMGRjcDMsCisgICAgMHgxLnAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDcKKyAgICAtMHgxLjIwNTk2NmIyYjRmMTY1YjcyN2JjYWU4MjMxMTU3YWJhcDMsCisgICAgMHgxLjAwMDAwMnAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDgKKyAgICAtMHgxLjIwNTk2NzEyYjRmMTM1YjcyODFjYWU4MWI5MTU3YjhkcDMsCisgICAgMHgxLmZmZmZmZXAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDkKKyAgICAtMHgxLjIwNTk2NmYyYjRmMTI1YjcyODEyMDNkNzA2NmFkMGRjcDMsCisgICAgMHgxLnAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAtMHgxLjIwNTk2NmIyYjRmMTY1YjcyN2JjYWU4MjMxMTU3YWJhcDMsCisgICAgMHgxLjAwMDAwMnAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTEKKyAgICAtMHgxLjBhMmIyNDczYmFiNzc2ODFhZjAwMzgwZWQwOTcxY2NicDEsCisgICAgMHgxLmZmZmZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDI1MgorICAgIC0weDEuMGEyYjIzZjNiYWI3MzY4MWFlZDU4ZDY0MDVlYzcyMDZwMSwKKyAgICAweDEucC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgLTB4MS4wYTJiMjJmM2JhYjgzNjgxYWQ4MDM4MTBiMDk3MTk3ZXAxLAorICAgIDB4MS4wMDAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTQKKyAgICAtMHgxLjExNzhmMTQ3MTA5NjFiZWRhZjlmNzk5YTUzYWZjMzNkcC0zLAorICAgIDB4MS5iZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTUKKyAgICAtMHgxLjExNzhlODIyN2U0N2JkZTMzOGI0MWZjNzJkZTgxZTNicC0zLAorICAgIDB4MS5jMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIC0weDEuMTE3OGRlZmRlYzAzZDJjOTE1NjA0ODk3OTcxYjc2NThwLTMsCisgICAgMHgxLmMwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDI1NworICAgIC0weDEuNjJlNDMwNmZhMzlmMzM1NzkzZjIxMWRhZDI5MDk4MjJwMSwKKyAgICAweDEuZmZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjU4CisgICAgLTB4MS42MmU0MmZlZmEzOWVmMzU3OTNjNzY3MzAwN2U1ZWQ1ZXAxLAorICAgIDB4MS5wLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTkKKyAgICAtMHgxLjYyZTQyZWVmYTM5ZmYzNTc5MjcyMTFkY2IyOTA5NGQ1cDEsCisgICAgMHgxLjAwMDAwMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDI2MAorICAgIC0weDEuMDg1OTljNmFmNGJhOTNjNjkzYjEzMTIyZjY4MjRhOGJwLTQsCisgICAgMHgxLmRmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2MQorICAgIC0weDEuMDg1OThiNTllM2EwNjg4YTNmZDliZjUwMzM3MmMxMmZwLTQsCisgICAgMHgxLmUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjYyCisgICAgLTB4MS4wODU5N2E0OGQyOTg3MWE0NjQ5ZDBhNjZjY2JkNWVkYnAtNCwKKyAgICAweDEuZTAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjYzCisgICAgLTB4MS5iYjlkM2M2YjhjODZmMDJkNzhlM2ViYTZkNDhhMTM3YXAxLAorICAgIDB4MS5mZmZmZmVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAtMHgxLmJiOWQzYmViOGM4NmIwMmQ3OGI5NDBmYzA5ZGY2OGI2cDEsCisgICAgMHgxLnAtNQorICB9LAorICB7IC8vIEVudHJ5IDI2NQorICAgIC0weDEuYmI5ZDNhZWI4Yzg3YjAyZDc3NjNlYmE4YjQ4YTEwMmRwMSwKKyAgICAweDEuMDAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgLTB4MS4wNDE1ZjlhNmI2NjVkN2E3Yjk5NThkN2QyOGY2MmE3NHAtNSwKKyAgICAweDEuZWZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjY3CisgICAgLTB4MS4wNDE1ZDg5ZTc0NDQ0NzAxNzNjNzVkNGQ4ODg5ZGUwZXAtNSwKKyAgICAweDEuZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjgKKyAgICAtMHgxLjA0MTViNzk2MzI0NGNmNjU5MTlhNTc4YjJkYWEyOWQ1cC01LAorICAgIDB4MS5mMDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjkKKyAgICAtMHgxLjBhMmIyNDMzYmFiNzU2ODFhZWVhZTJiOTZiNDFjNzY5cDIsCisgICAgMHgxLmZmZmZmZXAtNworICB9LAorICB7IC8vIEVudHJ5IDI3MAorICAgIC0weDEuMGEyYjIzZjNiYWI3MzY4MWFlZDU4ZDY0MDVlYzcyMDZwMiwKKyAgICAweDEucC02CisgIH0sCisgIHsgLy8gRW50cnkgMjcxCisgICAgLTB4MS4wYTJiMjM3M2JhYjdiNjgxYWUyYWUyYmE1YjQxYzVjMnAyLAorICAgIDB4MS4wMDAwMDJwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzIKKyAgICAtMHgxLjAyMDVhNjhkNDVlNjdlZDAxZTEwZTMyMmJkNDNhMTcwcC02LAorICAgIDB4MS5mN2ZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzMKKyAgICAtMHgxLjAyMDU2NTg5MzU4NDc0OWYyM2ExMDViOWM3YmI5YTZmcC02LAorICAgIDB4MS5mOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI3NAorICAgIC0weDEuMDIwNTI0ODUyNTY0NzZhZjZmNGRhYWJkMTM5YjVlNTdwLTYsCisgICAgMHgxLmY4MDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIC0weDEuMzY4N2FhMzFhZjJiMzRlY2ExNjNjZjlmNmMzZTg1MTRwMiwKKyAgICAweDEuZmZmZmZlcC04CisgIH0sCisgIHsgLy8gRW50cnkgMjc2CisgICAgLTB4MS4zNjg3YTlmMWFmMmIxNGVjYTE0ZTdhNGEwNmU5MmZiMnAyLAorICAgIDB4MS5wLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzcKKyAgICAtMHgxLjM2ODdhOTcxYWYyYjk0ZWNhMGEzY2ZhMDVjM2U4MzZlcDIsCisgICAgMHgxLjAwMDAwMnAtNworICB9LAorICB7IC8vIEVudHJ5IDI3OAorICAgIC0weDEuMDEwMWQ4NWE5MjMwMjViNTRjYmFhZTQ5OWQ1ZTQwYmZwLTcsCisgICAgMHgxLmZiZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI3OQorICAgIC0weDEuMDEwMTU3NTg4ZGU3MTI4Y2NjNWE4MmY5ZGEwMGY0OGJwLTcsCisgICAgMHgxLmZjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjgwCisgICAgLTB4MS4wMTAwZDY1NjhhMjAwNTc0NzQ1YjM5ZjBhYWUyNjY4NXAtNywKKyAgICAweDEuZmMwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjgxCisgICAgLTB4MS42MmU0MzAyZmEzOWYxMzU3OTNkY2JjODU2ZDNiNDJjMHAyLAorICAgIDB4MS5mZmZmZmVwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAtMHgxLjYyZTQyZmVmYTM5ZWYzNTc5M2M3NjczMDA3ZTVlZDVlcDIsCisgICAgMHgxLnAtOAorICB9LAorICB7IC8vIEVudHJ5IDI4MworICAgIC0weDEuNjJlNDJmNmZhMzlmNzM1NzkzMWNiYzg2NWQzYjQxMWFwMiwKKyAgICAweDEuMDAwMDAycC04CisgIH0sCisgIHsgLy8gRW50cnkgMjg0CisgICAgLTB4MS4wMDgxNTY5NjhhMzU1YTY4ZjJiZTliMDM1NzcyYzljM3AtOCwKKyAgICAweDEuZmRmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjg1CisgICAgLTB4MS4wMDgwNTU5NTg4YjM1N2U1OThlMzNkOGQ5ZGIzN2EyOXAtOCwKKyAgICAweDEuZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODYKKyAgICAtMHgxLjAwN2Y1NDk0ODgzMzU4NjY0NDBkZTdhMWYyMDg0NzM2cC04LAorICAgIDB4MS5mZTAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODcKKyAgICAtMHgxLjhmNDBiNjJkOTgxMmYxYzI4NjU1YTk2YjZlMzgwMDZjcDIsCisgICAgMHgxLmZmZmZmZXAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODgKKyAgICAtMHgxLjhmNDBiNWVkOTgxMmQxYzI4NjQwNTQxNjA4ZTJhYjBhcDIsCisgICAgMHgxLnAtOQorICB9LAorICB7IC8vIEVudHJ5IDI4OQorICAgIC0weDEuOGY0MGI1NmQ5ODEzNTFjMjg1OTVhOTZjNWUzN2ZlYzZwMiwKKyAgICAweDEuMDAwMDAycC05CisgIH0sCisgIHsgLy8gRW50cnkgMjkwCisgICAgLTB4MS4wMDQyMTY1ZGQ5Y2FmZjQxOWIxZWNjZGY3MjBhMzZkMnAtOSwKKyAgICAweDEuZmVmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjkxCisgICAgLTB4MS4wMDQwMTU1ZDU4ODlkZTcwNjcxZWVlYzBiZmNlZmU1M3AtOSwKKyAgICAweDEuZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTIKKyAgICAtMHgxLjAwM2UxNDVjZDk0YWJmMjAzM2JmNzFkYzMwMjg1MjBjcC05LAorICAgIDB4MS5mZjAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTMKKyAgICAtMHgxLmJiOWQzYzJiOGM4NmQwMmQ3OGNlOTY1MTZmMzRiZTE4cDIsCisgICAgMHgxLmZmZmZmZXAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTQKKyAgICAtMHgxLmJiOWQzYmViOGM4NmIwMmQ3OGI5NDBmYzA5ZGY2OGI2cDIsCisgICAgMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTUKKyAgICAtMHgxLmJiOWQzYjZiOGM4NzMwMmQ3ODBlOTY1MjVmMzRiYzcxcDIsCisgICAgMHgxLjAwMDAwMnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTYKKyAgICAtMHgxLjAwMjQwNjU2OTc5OTk3OTdmMzc3Y2I4NTI3NTAyNDBicC0xMCwKKyAgICAweDEuZmY3ZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjk3CisgICAgLTB4MS4wMDIwMDU1NjU1ODg5MzM1N2NkN2UxZjQ4NmJkMDcwNXAtMTAsCisgICAgMHgxLmZmODBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTgKKyAgICAtMHgxLjAwMWMwNDU2MTc3OThmOTM0NjRjMDA2N2E3ZWFhZTRmcC0xMCwKKyAgICAweDEuZmY4MDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjk5CisgICAgLTB4MS4yMDU5NjcxMmI0ZjEzNWI3MjgxY2FlODFiOTE1N2I4ZHAzLAorICAgIDB4MS5mZmZmZmVwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMzAwCisgICAgLTB4MS4yMDU5NjZmMmI0ZjEyNWI3MjgxMjAzZDcwNjZhZDBkY3AzLAorICAgIDB4MS5wLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMzAxCisgICAgLTB4MS4yMDU5NjZiMmI0ZjE2NWI3MjdiY2FlODIzMTE1N2FiYXAzLAorICAgIDB4MS4wMDAwMDJwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMzAyCisgICAgLTB4MS4wMDI0MDExNTZkZDY5OGExNGExOTM4NTdiNmIyZTJiZHAtMTMsCisgICAgMHgxLmZmZWZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDMwMworICAgIC0weDEuMDAwNDAwMTU1NWQ1NTg4ODlkZGU3MDJiMDI4Yzk5OTZwLTEzLAorICAgIDB4MS5mZmYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzA0CisgICAgLTB4MS5mZmM3ZmUyYWJiYWMzMTBmZTU0Nzg0MDE1ZDIzYTYxZHAtMTQsCisgICAgMHgxLmZmZjAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDMwNQorICAgIEhVR0VfVkFMRiwKKyAgICBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDYKKyAgICAweDEuNjJlNDJmZWJhMzllZjE1NzkzYzYxMWRhYjE5MDk4MDhwNiwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDMwNworICAgIDB4MS42MmU0MmZlN2EzOWVlYjU3OTNiY2JjODU0ZDNiNDI5YXA2LAorICAgIDB4MS5mZmZmZmNwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzA4CisgICAgMHgxLjI1MGQwNTA1ZmVjZTgzZjVmMzMyOGNjMzIyZjY1MTUzcDAsCisgICAgMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMzA5CisgICAgMHgxLmNlNmJiNDM4YjNmYzI5MjhhNTNiNjRhYzdjMGQ2YTkxcC0yLAorICAgIDB4MS45MjFmYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDMxMAorICAgIDB4MS5mZmZmZmUwMDAwMDJhYWFhYTZhYWFhYjExMTExMDY2NnAtMjQsCisgICAgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzExCisgICAgMC4wLAorICAgIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDMxMgorICAgIC0weDEuMDAwMDAwODAwMDAwNTU1NTU1OTU1NTU1ODg4ODg4YjNwLTI0LAorICAgIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTMKKyAgICAtMHgxLmVlYjk1NzRkMjY4MzdiMGQwNGE2ZDM2NzI3N2NlMDU2cC0zLAorICAgIDB4MS45MjFmYjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTQKKyAgICAtMHgxLjVkNTg5ZjI3ZTUxMDdmOGEzNTZkOWVlOGFkMWJhYWU0cDYsCisgICAgMHgxLjAwMDAwMnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMzE1CisgICAgLTB4MS41ZDU4OWYyZmU1MTA3NzhhMzU3ODQ5OTM0N2M2NTVhOXA2LAorICAgIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDMxNgorICAgIC0weDEuNWQ1ODlmMzdlNTEwN2Y4YTM1ODJmNDNlMDI3MTAwNmRwNiwKKyAgICAweDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTcKKyAgICAtMHgxLjVkNTg5ZjNmZTUxMDk3OGEzNWNkOWVlOTlkMWJhZTMxcDYsCisgICAgMHgxLmZmZmZmOHAtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzE4CisgICAgLTB4MS45YTU3ZDc2ZDE1MmZjOTVkNDJkZThmNGY4OTIxZGE3NXA2LAorICAgIDB4MS5wLTE0OAorICB9LAorICB7IC8vIEVudHJ5IDMxOQorICAgIC0weDEuOWQxZDlmY2NmNDc3MDc0M2YyMDYxZTFkZTkzMWE2NTBwNiwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjAKKyAgICAtSFVHRV9WQUxGLAorICAgIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjEKKyAgICAtSFVHRV9WQUxGLAorICAgIC0wLjBmCisgIH0sCit9OworI2VuZGlmIC8vIF9fQklPTklDX18KKworVEVTVChtYXRoX2xvZ2YsIGxvZ2ZfaW50ZWwpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfbG9nZl9pbnRlbF9kYXRhKS9zaXplb2YobG9nZl9pbnRlbF9kYXRhX3QpOyBpKyspIHsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoZ19sb2dmX2ludGVsX2RhdGFbaV0uZXhwZWN0ZWQsIGxvZ2YoZ19sb2dmX2ludGVsX2RhdGFbaV0uY2FsbF9kYXRhKSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9wb3dfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX3Bvd190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg1NDI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWF0aF9wb3dfdGVzdC5jcHAKQEAgLTAsMCArMSwzMzAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCit0eXBlZGVmIHN0cnVjdCB7CisgIGRvdWJsZSBleHBlY3RlZDsKKyAgZG91YmxlIHhfY2FsbF9kYXRhOworICBkb3VibGUgeV9jYWxsX2RhdGE7Cit9IHBvd19pbnRlbF9kYXRhX3Q7CisKK3N0YXRpYyBwb3dfaW50ZWxfZGF0YV90IGdfcG93X2ludGVsX2RhdGFbXSA9IHsKKyAgeyAvLyBFbnRyeSAwCisgICAgMHgxLnAwLAorICAgIC0weDEuMHAtMTAsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDEKKyAgICAweDEucDAsCisgICAgLTB4MS4wcC0yMCwgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIC1IVUdFX1ZBTCwKKyAgICAtSFVHRV9WQUwsIDB4MS4wMDAwMDAwMDAwMDAxcDUyCisgIH0sCisgIHsgLy8gRW50cnkgMworICAgIC0weDEuZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDFmZmZmZmZwMjAsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0yMSwgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0CisgICAgMHgxLnAwLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtNDEsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDUKKyAgICAweDEuMDAwMDAwMDAwMDAwYTAwMDAwMDAwMDAwMmRwLTQxMCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTQxLCAweDEuNHAzCisgIH0sCisgIHsgLy8gRW50cnkgNgorICAgIDB4MS45MjQxYjcwN2Y2ZGFkZmY5NTVmZDg5MTkzYjY3ZDMzMXAtNzYsCisgICAgLTB4MS4wMDAwMDAwMDAwMDA5cDAsIC0weDEuNzM2NGQ5MzY0ZDkzZXA1NAorICB9LAorICB7IC8vIEVudHJ5IDcKKyAgICAweDEuZmZmZmUwMDAwMGZmZmZmYWJhYWFiZWZmZmZjM2IxMTFwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDEwcDAsIC0weDEuMHAyOAorICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICAtMHgxLmZmZmZmZWZmYWMwMDQwM2IwYzZkNDI0YWNkOTAwOTUzcDk2NCwKKyAgICAtMHgxLjAwMDAwMDAwMjIwcC0xLCAtMHgxLmUyOHA5CisgIH0sCisgIHsgLy8gRW50cnkgOQorICAgIDB4MS5mZmU4OGY4OThmYWQ2ODA1ZWY1NDI1Y2EzNTcyZjFlOHA3MDUsCisgICAgLTB4MS4wMDAwMDQ0cC0xLCAtMHgxLjYxMHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAtMHgxLmZmZjAwMDdmZmMwMDFmZmYwMDA3ZmZjMDAxZmZmMHA0MCwKKyAgICAtMHgxLjAwMDgwcC00MSwgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIDB4MS5mZjYwMWI3YzkwNTk1ODJlOWM1Y2Q0YmRlMDIxZjQ2MnA0MDksCisgICAgLTB4MS4wMDA4MHAtNDEsIC0weDEuNHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIKKyAgICAtMHgxLjAwMjgwMjgwMTQwMDUwMDA4MHAyMDAsCisgICAgLTB4MS4wMDA4MHA0MCwgMHgxLjRwMgorICB9LAorICB7IC8vIEVudHJ5IDEzCisgICAgMHgxLmZmYTAwYTdmMTRjMzM3ZmNlY2ZmYzEwNzI0NGY5NmRmcDI0NSwKKyAgICAtMHgxLjAwMDgwMDAwMDBmMTRwLTQxLCAtMHgxLjhwMgorICB9LAorICB7IC8vIEVudHJ5IDE0CisgICAgMHgxLmZmODAxMWZkM2JlNTc3ZmVjODVmZmM1ZDYwYjAzMzRlcC0zMjEsCisgICAgLTB4MS4wMDA4MDAwMDBlNDg0cDQwLCAtMHgxLjBwMworICB9LAorICB7IC8vIEVudHJ5IDE1CisgICAgMHgxLjZiM2M0NjQxNTQzMGMwMDRlOWZkMGIzNWY4ZWM2ZmQ1cC0xLAorICAgIC0weDEuMDQ2ZThiZmZmZmZjMnAwLCAtMHgxLjRwNAorICB9LAorICB7IC8vIEVudHJ5IDE2CisgICAgMC4wLAorICAgIC0weDEuNTE4cC0xMDY1LCAweDEuMHAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTcKKyAgICAweDEuMjAwMDAwNjAwMDAwMDhwLTgxLAorICAgIC0weDEuODAwMDAwNHAtNDEsIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOAorICAgIDB4MS5jM2Q2YTIxNTdiNjIzNDA3ZThjODIxMjg5ZWJhYzJiNnAtMSwKKyAgICAtMHgxLmZmZmZmYmZmZmZmZmZwLTEsIDB4MS4wcDIwCisgIH0sCisgIHsgLy8gRW50cnkgMTkKKyAgICAtMHgxLjAwMDAwMDYwMDAwMDMwMDAwMDExMDAwMDA2MzAwMDAycDAsCisgICAgLTB4MS5mZmZmZmZiZmZmZmZmcC0xLCAtMHgxLjhwMQorICB9LAorICB7IC8vIEVudHJ5IDIwCisgICAgLTB4MS4wMDAwMDBlMDAwMDBhODAwMDA2MjAwMDAzM2EwMDAxOHAzNSwKKyAgICAtMHgxLmZmZmZmZmJmZmZmZmZwLTYsIC0weDEuY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMjEKKyAgICAtMHgxLjAwMDAwMGUwMDAwMGE4MDAwMDYyMDAwMDMzYTAwMDE4cDI4MCwKKyAgICAtMHgxLmZmZmZmZmJmZmZmZmZwLTQxLCAtMHgxLmNwMgorICB9LAorICB7IC8vIEVudHJ5IDIyCisgICAgLTB4MS4wMDAwMDBlMDAwMDBhODAwMDA2MjAwMDAzM2EwMDAxOHAtMjg3LAorICAgIC0weDEuZmZmZmZmYmZmZmZmZnA0MCwgLTB4MS5jcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMworICAgIC0weDEuZmZmZmZlNDAwMDAwMzgwMDAwMzBmZmZmZjQ5ZmZmZmRwMjg2LAorICAgIC0weDEuZmZmZmZmYmZmZmZmZnA0MCwgMHgxLmNwMgorICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgMHgxLmZmZmZmZjgwMDAwMDA4cC0yMSwKKyAgICAtMHgxLmZmZmZmZmNwLTExLCAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjUKKyAgICAtMHgxLjAwMDAwMDAwMDEwMDA4MDAwMDAxMDAxMDAwNDAwMXA0MCwKKyAgICAtMHgxLmZmZmZmZmZmZmRmZmZwLTQxLCAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDI2CisgICAgLTB4MS4wMDAwMDAwMDAwMGM5ODAwMDAwMDAwOWU5YTQwcDQwLAorICAgIC0weDEuZmZmZmZmZmZmZmU2ZHAtNDEsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjcKKyAgICAtMHgxLmZmZmZmZmZkZmZmZmUwMDEwMDAwMGZmZmFhYWFhYWFhcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMSwgMHgxLjAwMDAxcDIwCisgIH0sCisgIHsgLy8gRW50cnkgMjgKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwNDBwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjkKKyAgICAtSFVHRV9WQUwsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsIDB4MS4wMDAwMDAwMDAwMDAxcDUyCisgIH0sCisgIHsgLy8gRW50cnkgMzAKKyAgICAweDEuZmRhNmExYmUzZTlkNDdmYzg0MjkzMjgxZTc3YWEyMWFwLTEsCisgICAgMHgxLjBwLTIsIDB4MS5iMmNiMmNiMmNiMmQwcC05CisgIH0sCisgIHsgLy8gRW50cnkgMzEKKyAgICAwLjAsCisgICAgMHgxLjBwLTUxMiwgMHgxLjBjY3AxCisgIH0sCisgIHsgLy8gRW50cnkgMzIKKyAgICAweDEuZjliM2EzODIwOTgwOTM4Njg3ZThiZjdmZjA2YmM0MmNwLTkxNCwKKyAgICAweDEuMHAtMTAzNSwgMHgxLmMzYTgzYTgzYTgzYTVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMworICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NCwgMHgxLjBwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgMC4wLAorICAgIDB4MS4wcC0xMDc0LCAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzUKKyAgICAweDEuNTFjYjQ1M2I5NTRmNTMwNWZkOGQ2MWU2NTBlOGQwZDVwLTk2NywKKyAgICAweDEuMHAtMTA3NCwgMHgxLmNjY2NjY2NjY2NjY2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNgorICAgIDB4MS5mZmZmZmZmZDNhMzdhMDIyYTRiZGY5NDgyMTcxZDU2ZnAxMDIzLAorICAgIDB4MS4wcDEsIDB4MS5mZmZmZmZmZmZmMHA5CisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAweDEuMDAwMDAwMDAwMDAwMDdmZmZmZmZmZmZmZmZlMHAtNSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAweDEuYWU4OWY5OTVhZDU4ODdmZjQ2ZGQyMzYyYmU2YThmMjNwLTIwNCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMjcxLCAweDEuN2ZmZmZmZmZmZmZmZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5CisgICAgMHgxLjI2MTExODZiYWU2YTM4MDAwMmU2MjAyYzMxYjA0ZDEzcC0zOCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNDYyLCAweDEuNGYyMDk0ZjIwOTRmMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDQwCisgICAgMHgxLjZhMDllNjY3ZjNlY2QyYWRiNjcyMjNmOTU2NGIzNDIycC0zOTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTUyMiwgMHgxLjdmZmZmZmZmZmZmZmRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MQorICAgIDB4MS45ZmRmOGJjY2U1NDM1NDdkNjExZWYxMzkwNDAyMmI4YnAtNDkzLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC01NDcsIDB4MS5jY2NjY2NjY2NjY2NjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDIKKyAgICAweDEuOTFiNTAxYzJkYjVjOGZmZTgxY2MzZWZmZmZlMjgyZThwLTI5MCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNjQzLCAweDEuY2NjY2NjY2NjY2NjYXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgMHgxLmE4MzBmZDA1NDcyMDI0NzljNzBjODBiNzJhMzI1ZDJmcC00MDgsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTczMSwgMHgxLjFkNDFkNDFkNDFkNDRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NAorICAgIDB4MS5hOTMzNWRmMzhlNmU2NGNiZGFhNTc3NTBhMGNmZDVlZXAtMjkxLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC03MzMsIDB4MS45NTgxMDYyNGRkMmY3cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDUKKyAgICAweDEuNmEwOWU2NjdmM2QxOTJhMjdiNzM1Nzc0ODRhODZkY2RwLTc2MSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtODQ1LCAweDEuY2NjY2NjY2NjY2NjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2CisgICAgMHgxLmJkYjhjZGFkYmU2MGE1NmRkNjFjNGUwNDM1MGNmYTlhcC01NjksCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTk0NywgMHgxLjMzMzMzMzMzMzMzMzFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NworICAgIDB4MS42YTA5ZTY2ZDcyYzljODAxODQwNTMyNTc3ZTYwNWUwN3A5MDQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwMDUsIC0weDEuY2NjY2NjY2NjZmE4MXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4CisgICAgMHgxLmZmZmZmZmZmZmZmYWVhNmUwNjIyYTQ1YjM1ODlkNzcxcDEwMjMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMSwgMHgxLmZmZmZmZmZmZmZmZmRwOQorICB9LAorICB7IC8vIEVudHJ5IDQ5CisgICAgMHgxLmU2MTAyYmE0NjUwNDQ4MTRiMjhhMGE0OTIxNmVmNjY3cC0zNDksCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNjYzLCAtMHgxLjBjY2NjY2NjY2NjY2ZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MAorICAgIDB4MS5mZmZmZmZmZmZmZDc1YjZkODVkZThmYjNhN2UyZTgyNnAtNzAzLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDkzNiwgLTB4MS44MDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDFmZmZmZmZwLTEwMjQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMTAyMywgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MgorICAgIDB4MS5mZmZmZmZmZmZmZmFlYTZlMDYyMmE0NTczNTg5ZDc3MXAxMDIzLAorICAgIDB4MS4wMDAwMDAwMDAwMDAycDIsIDB4MS5mZmZmZmZmZmZmZmZkcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MworICAgIDB4MS4wMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMjlmZmZmZnAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDA0cDAsIDB4MS4wMDAwMDAwMDAwMDA3cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTQKKyAgICAweDEuMDAwMDAwMDAwMDAwMDdmZmZmZmZmZmZmMzkyMHAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDA0cDAsIDB4MS5mZmZmZmZmZmZmY2U4cC00CisgIH0sCisgIHsgLy8gRW50cnkgNTUKKyAgICAweDEuZmZmZmZmZmZmZmZhZWE2ZTA2MjJhNDRmMzU4OWQ3NzFwMTAyMywKKyAgICAweDEuMDAwMDAwMDAwMDAwNHA0LCAweDEuZmZmZmZmZmZmZmZmZHA3CisgIH0sCisgIHsgLy8gRW50cnkgNTYKKyAgICAweDEuZmI5NTQwZDk5MjU4YTgwZjg2YjcxOTI1YWFmNDQyMWVwODAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDdwMTAyMywgMHgxLjQ0NDQ0NDQ0NDQ0MzBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NworICAgIDB4MS5kZjkwNWVmOGUyNTA3ZmQ4NTI3MTJlZDZjZWE5ODk2M3A4MzMsCisgICAgMHgxLjAwMDAwMDAwMDAwMTFwMSwgMHgxLmEwZjNlYTA2OTdhMGJwOQorICB9LAorICB7IC8vIEVudHJ5IDU4CisgICAgMHgxLjAwMDAwMDAwMDAwMDk3ZmZmZmZmZmZmZmQyZTBwMywKKyAgICAweDEuMDAwMDAwMDAwMDAxM3A2LCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU5CisgICAgMHgxLjAwMDAwMDAwMDAwMGQ3ZmZmZmZmZmZmZjc3ZTBwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAyMXAwLCAweDEuYTJlOGJhMmU4YmEyZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDYwCisgICAgMHgxLjk0NzY1MDRiOWJhZjM0M2UzZjc1YTJiZDJlNGNhZGRicDczOCwKKyAgICAweDEuMDAwMDAwMDAwMDA4MHAwLCAweDEuMHA1NAorICB9LAorICB7IC8vIEVudHJ5IDYxCisgICAgMHgxLmZmZmZmNGU5NWUxZjNmZGNkZDVlM2Q5MjhmM2E0N2Y1cDEwMjMsCisgICAgMHgxLjAwMDAwMDAwMDAwZmZwMSwgMHgxLmZmZmZmZmZjMHA5CisgIH0sCisgIHsgLy8gRW50cnkgNjIKKyAgICAweDEuZmZmZmZmZmY4ZTRkZTgwODNhYzYzZjk1YmNiNTI1ZmNwMTAyMywKKyAgICAweDEuMDAwMDAwMDAwMDBmZnAyLCAweDEuZmZmZmZmZmZmZmNwOAorICB9LAorICB7IC8vIEVudHJ5IDYzCisgICAgMHgxLjk0NzY1MDRiNDMzNTUyYWRiZjI1M2FkNWE5ZTYxZTY4cDczOCwKKyAgICAweDEuMDAwMDAwMDAwMDRwMCwgMHgxLjBwNTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIDB4MS42MjQ3ZWIwMzU3ODYzN2ZmMmNiOTNjOTNmZTJmMjQ3M3AtMTI5LAorICAgIDB4MS4wMDAwMDAwMDAwN3AxLCAtMHgxLjAxMXA3CisgIH0sCisgIHsgLy8gRW50cnkgNjUKKyAgICAweDEuODdjZWEyZTUwNmQyZWE5YjIxODIzZDc1NTc2NjNmYmFwNDI3LAorICAgIDB4MS4wMDAwMDAwMDAyMHAxMDIzLCAweDEuYWMwODMxMjZlOTc4Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDY2CisgICAgMHgxLmZmZmZmZjJiMDMzODA4MGIyNTdkZjMxYmIwMmZmNzBhcDc2NywKKyAgICAweDEuMDAwMDAwMDAwZmZmZnAtMSwgLTB4MS43ZmZmZmZmZmQ1Y2UycDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NworICAgIDB4MS5mZmQ5MzEwMzViMzk0MDg3MTY0NTAxNDczZGYyMzA5NXAxMDIzLAorICAgIDB4MS4wMDAwMDAwMDFwMSwgMHgxLmZmZmZmMWZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDY4CisgICAgMHgxLjkxMmI2ZGQ2NjUyZGY3ZmEwZmJhZmZiYzdiMzJkNjJhcDk1MywKKyAgICAweDEuMDAwMDAwMDAxYjFlZnAtMSwgLTB4MS5kY2QyZjNlYTA2OTk1cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OQorICAgIDB4MS5mZmZmZmZmODAwMDAwMDIwYzAwMDNmN2I3ZmZlODIxNnAtMSwKKyAgICAweDEuMDAwMDAwMDQwcDAsIC0weDEuZmZmZmZmZmZjZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwCisgICAgMHgxLmZmZmZmZmMwMDAwMDI3ZmZmZmY3MDAwMDAzOWZmZmZlcC0xMDI0LAorICAgIDB4MS4wMDAwMDAxZmZmZmZmcDEwMjMsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzEKKyAgICAweDEuNzA1ZGYzNGY4NGUzMTM4NzE0ODE1M2M3Y2Y3ODNhNTNwLTEsCisgICAgMHgxLjAwMDAwMDRwMSwgLTB4MS5lNjY2NjY2NjY2NjZicC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzIKKyAgICAweDEuMWExNjc0NGMyZWMwZDgwNDI0MTBiZjNlM2E5MDE0YWNwMSwKKyAgICAweDEuMDAwMDAwNHAyLCAweDEuMjNkNzBhM2Q3MGEzYnAtMQorICB9LAorICB7IC8vIEVudHJ5IDczCisgICAgMHgxLmZmZjgwMDEwMDJiNDE3ZWY1ODhlMjFjNTA5MmUyMGM3cDEwMjMsCisgICAgMHgxLjAwMDAwMTBwLTEsIC0weDEuZmZmZmZmZmZmZmZmOXA5CisgIH0sCisgIHsgLy8gRW50cnkgNzQKKyAgICAweDEuYTEyZjgwNmMzOTEwNTgwMGQ1YWMzOGY2Y2I4OGQzNzRwLTIsCisgICAgMHgxLjAwMDAwMWNwMywgLTB4MS5iYTJlOGJhMmU4YmEycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzUKKyAgICAweDEuZDcyZjdmMzU0ZDg2ZDAyMDZhZDdjOWJlOWI0NzhjN2NwLTg4NSwKKyAgICAweDEuMDAwMDA0NHAtMSwgMHgxLmJhMGY2MWM5MTA3YzlwOQorICB9LAorICB7IC8vIEVudHJ5IDc2CisgICAgMHgxLjkxNWQxOTU1YjE1ZmMwODE5MWUwMDBiYzhhOWM4MjYycDczOCwKKyAgICAweDEuMDAwMjBwMCwgMHgxLjAwMDAwNDBwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NworICAgIDB4MS5mZmMwMDQzY2JjNWRiN2ZlZDkwNWVhMjY3NzI0Y2Q4NnA0NywKKyAgICAweDEuMDAwMjAwMDAwYzBlNHAtMywgLTB4MS5mZmZmZmZmZmYzZmZmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OAorICAgIDB4MS4wMzg2MWMwZjI1ZjBiN2ZkZDdkYjk4OGZjNTBlOGFjNXA4OTYsCisgICAgMHgxLjAwMDcwcDcsIDB4MS4wMDAwMDAwMDg4MHA3CisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAweDEuNzM1ZjRjYWU2ZmQ1ZTdlYzllYzkzOTIzZjMzOWU5NTFwLTI0MiwKKyAgICAweDEuMDAwN2ZkZXAwLCAtMHgxLjRmMWI3N2MyNzhkYzBwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MAorICAgIDB4MS5iNmJkY2RhZmQ1NTgyODIzYjRkMzYxY2I3YmYwMmYwYnAwLAorICAgIDB4MS4wMDA3ZmZmZmZmMThjcC0zLCAtMHgxLjA5NGYyMDk0ZjIwOTRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MQorICAgIDB4MS5lZTlkZTM4MTU1ODlmODAyMDQyOWM4NTA1MDJhNzNjZXAwLAorICAgIDB4MS4wMDA4MHAxLCAweDEuZTY2NjY2NjY2NjY2NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDgyCisgICAgMHgxLmZjNGU5NTdhZDNjZmY4MGRmMTRkNTM4M2JkMDlhODNhcDEwMjMsCisgICAgMHgxLjAwMWZlYmViY2NkNDJwMCwgMHgxLjYzZDhhYTk4NmE5ZWFwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIDB4MS5mYmRkZjQ2ZDZiNjI4ODJiNGM0ZTY1OWJmMDIxMmRmNHAxMDIzLAorICAgIDB4MS4wMDFmZWYxY2M0MTkzcDAsIDB4MS42M2I1MDBjODM2ODlkcDIwCisgIH0sCisgIHsgLy8gRW50cnkgODQKKyAgICAweDEuZmJhN2Y5MzE4YzVkYzgxYjFlMTc4ODY1MTQ3MjAyZjNwMTAyMywKKyAgICAweDEuMDAxZmYwNjlkMmE2YnAwLCAweDEuNjNhNjc2Yzg0OTNlOHAyMAorICB9LAorICB7IC8vIEVudHJ5IDg1CisgICAgMHgxLmY2MTY2MWI3MDAwZDMyZDFmNjk4ZTBmYTJmODg5ZDM1cDY5LAorICAgIDB4MS4wMDgwNDAyNTIxM2RlcC03LCAtMHgxLjRwMworICB9LAorICB7IC8vIEVudHJ5IDg2CisgICAgMHgxLmUxMDliZGNjYTAxZmI3ZmZiYmU0ZjUwYzgyZDBlYzYycDE1LAorICAgIDB4MS4wMTBwLTEsIC0weDEuZmZmZmZmZmY5ZmZmZnAzCisgIH0sCisgIHsgLy8gRW50cnkgODcKKyAgICAweDEuMWU0OWM1MTQ3M2ZmMzdkYzFhZDI3MjY0MzEyYzM3YjVwLTEwMTEsCisgICAgMHgxLjAyMWVlYWE2ZDI3MGRwMSwgLTB4MS5mMzc5NzE3NThlMjU3cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OAorICAgIDB4MS5lYjQxMzIxZTEzNmIzN2ZmZmJiOTkwMjdmZmM4NTE0YnAtMjEsCisgICAgMHgxLjAyZjE3OGJjNWUyYzFwMywgLTB4MS5hOTk5OTk5OTk5OTlhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OQorICAgIDB4MS4wODBmZmZmZmY3OWNiODAwZDRmYTQzNTFkOGU2MzE3MXAtMiwKKyAgICAweDEuMDQwcC0xLCAweDEuMDAwMDAwMDAwNjBwMQorICB9LAorICB7IC8vIEVudHJ5IDkwCisgICAgMHgxLmNmMmIxOWFjZmQ1Mzg4MjBjZDYyYjk3NjJmYmQwN2Q4cC0xMDE4LAorICAgIDB4MS4wNDkzY2RhN2JlNDUycDEsIC0weDEuZWZlNGIyNDIwNzFhYnA5CisgIH0sCisgIHsgLy8gRW50cnkgOTEKKyAgICAweDEuNjY5MmMwNWIwOWJhYmEyZWE0OGQ3ODVhZDRhNDU3NWRwMTM1LAorICAgIDB4MS4wNWViZjgyNDhhNzM0cDk5LCAweDEuNWUzYjMyYTJhOWZiMHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTIKKyAgICAweDEuODEwZjJmNTM5ODA1NzdmNjY2M2FiZmExZjc3NDI5MWJwNzAsCisgICAgMHgxLjBhYWFhYWFhYWFhYWJwNywgMHgxLjRwMworICB9LAorICB7IC8vIEVudHJ5IDkzCisgICAgMHgxLmZmZmVlMzM1MzY4ZWEwMDA4YWE2YjNiMDA2MzU0NjI1cC0xLAorICAgIDB4MS4wZTRmOTM4YzBlMGJicC00ODIsIDB4MS5iNDgzOGFhNzBkMDI1cC0yNgorICB9LAorICB7IC8vIEVudHJ5IDk0CisgICAgMHgxLmNmYzQ3MGNjOTM5MjI3ZmE5NzBiNThiOTE1NzJmNzI0cC00MCwKKyAgICAweDEuMTNiZDExYmNmYWE1MHAtNSwgMHgxLjBwMworICB9LAorICB7IC8vIEVudHJ5IDk1CisgICAgMHgxLmVjMzNlYTU1YWZkMzNhZDIxOWFhMmFlYzA4MzM5N2RmcC0xLAorICAgIDB4MS4xNTAxZjQ0NjU5ZTU0cDAsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDk2CisgICAgMHgxLmY2NDhhMGVhZDgyZjYwMDFkYWYwZDQ2YWJkMDE4Yjc3cC0xLAorICAgIDB4MS4xNTU1NTU1NTU1NTU1cC0xLCAweDEuMDAwMDAwMDAwMDAwN3AtNQorICB9LAorICB7IC8vIEVudHJ5IDk3CisgICAgMHgxLmZlN2ViNjg3MzRiNWU4MjVlOTRkNmRlNDU0Y2RlMThlcDYsCisgICAgMHgxLjE3NDVkMTc0NWRhNzFwLTEsIC0weDEuMDAwMDAwMDAwMDAwN3AzCisgIH0sCisgIHsgLy8gRW50cnkgOTgKKyAgICAweDEuYTVhMDBjNzdjNjViZjViMDU5MmE2MTQwN2IyYmM3OWZwLTM5LAorICAgIDB4MS4xOTczYjEwMmZmZGRicC02LCAweDEuYTFkODRmNmEzYjkzNHAyCisgIH0sCisgIHsgLy8gRW50cnkgOTkKKyAgICAweDEuZTdlMjY3NDVmNTBmZTgwMGQxNDE0NWZmODAxMzM3NjFwLTIsCisgICAgMHgxLjE5ZWVkZWIxMDJkODRwMiwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAwCisgICAgMHgxLmE3M2Y5YWNiZjQxMjVhODkwMjAxMTBhMjljMzliYmQycDEwMywKKyAgICAweDEuMjQ3NjVhMGNkZDQ1NHA3LCAweDEuY2Q4MWVkZmQ2ZDViOHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTAxCisgICAgMHgxLjQ0NWFlMzkwZjRiNTM2OWMxNDI2ZjlmZThiOGExNzUxcDYxNSwKKyAgICAweDEuMjQ5MjQ5MjQ5MjQ5MnAtNSwgLTB4MS5mZmZmZmZmZmZmZmY4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIKKyAgICAweDEuZTRlMDQ1MjA1NTI3ZjMzZjBjOTc2OGRjYjdmMTNmYWJwLTYxNiwKKyAgICAweDEuMjQ5MjQ5MjQ5MjQ5MnAtNSwgMHgxLmZmYzdmZmZmZmZmZmZwNgorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIDB4MS4yZGQxN2RjNzI5M2RjODAwMWUxOTg2YTE0ODc1YmU5NXAxMjIsCisgICAgMHgxLjMxNTBhMTJmMjVjOGRwLTQxLCAtMHgxLjhwMQorICB9LAorICB7IC8vIEVudHJ5IDEwNAorICAgIDB4MS41MmM1OGNkYmFjNGNiN2ZlYjc2MWUyNGJiZGU5OWI4NXAtNTM0LAorICAgIDB4MS4zMzMzMzMzMzMzMzMzcC0yLCAweDEuMzMzMzMzMzMzY2U5N3A4CisgIH0sCisgIHsgLy8gRW50cnkgMTA1CisgICAgMHgxLmJjN2YwNTZlYzcxZmYwMDAwMTA0ODA4Yzk5OTBhZTlmcC0yLAorICAgIDB4MS4zMzMzMzM0NmNmOGJhcC0yLCAweDEuNjJlNDJmZWZhMzllZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNgorICAgIDB4MS5hMmM5ZGM3YmIyZTcyNGFlNzQ2YzdhMGEwNzZiMTI5YnAtMjkxLAorICAgIDB4MS4zOGFiZjgyZWU2OTg2cC0xLCAweDEuOTgwcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcKKyAgICAweDEuYjRmNjBlNTc5NWI1ZTgwODhjMTg2NWFiOWUwZTI2OTRwMCwKKyAgICAweDEuM2VjOTg0Y2IzNjcwMXAwLCAweDEuMzgwMTg4NzliMmJhOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgMHgxLjhmY2YzMDFjMmI0NjUzMmZmZmI2YTA2Y2M0M2RlYzkxcC02NjcsCisgICAgMHgxLjRwLTEwNzAsIDB4MS4zZWYzNjhlYjA0MzI3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA5CisgICAgMHgxLjAwMDAzZjY1Y2NlODA4MDAwMGZmZWY2ZTAyYmZlNTA5cDAsCisgICAgMHgxLjRwNCwgMHgxLjUyOWExNTc0YzBjNzJwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgMTEwCisgICAgMHgxLjkwMDAwMDAwMDAwMDI4MDAwMDAwMDAwMDAxcDQsCisgICAgMHgxLjQwMDAwMDAwMDAwMDFwMiwgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDExMQorICAgIDB4MS40MzAxNWNmNzRkNmUwN2ZmMzY2NjMwNWRkZmZiNWY0ZXAxLAorICAgIDB4MS40M2U3NDNiYTc5YzQxcC0xLCAtMHgxLjAyYzMwYjgwZWI1MTRwMQorICB9LAorICB7IC8vIEVudHJ5IDExMgorICAgIDB4MS5hMzZlMWMzYzcwMGI3YTQxNmZhZDY0MWJmYzAzMWFkYnAtMTAsCisgICAgMHgxLjQ3YWUxNDdhZTE0N2JwLTUsIDB4MS4wMDAwMDFjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMKKyAgICAweDEuZTVlY2NmMWIzYTA1ZGNmN2FkY2E4ZDQ3ZjkzN2RhYzdwLTk4NSwKKyAgICAweDEuNGU5MWIwZTkxYjBmMXAtMSwgMHgxLjkwYzk3MTRmYmNkOWJwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQKKyAgICAweDEuOTUzMzViZmI3NmM2YzdmZTM4NTI2Y2RlMWMxNmVkYmRwLTMsCisgICAgMHgxLjUxNTJiN2MzNzMzNjhwLTIyLCAweDEuYmIzODI4OGEwYTZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUKKyAgICAweDEuZmZmZmZmZmZmZmZmYjAxZTIxYTQwNDQyOWU4OGNmZDZwLTEsCisgICAgMHgxLjUxNzU4NzkwYjQxODFwLTQsIDB4MS4wcC01MgorICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIDB4MS43MDJlYmZhMWZmMjAxM2YyNDM4Y2ZkMTkzNWI3MzA5OXAxMDEsCisgICAgMHgxLjU1NTU1NTU1NTU1NTVwLTIsIC0weDEuMDAzODBwNgorICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIDB4MS5iYTMwYTEyN2Y2ZGQ1ZmQ5YzYwYTdmMDEwZDljYTEyNXAyMDIsCisgICAgMHgxLjU1NTU1NTU1NTU1NTVwLTIsIC0weDEuZmZjN2ZmZmZmZmZmZnA2CisgIH0sCisgIHsgLy8gRW50cnkgMTE4CisgICAgMHgxLjdmZmZmZThlZGRjNDlhMGJiNzRjOWIzOTQyZTVlYjBicDEsCisgICAgMHgxLjU1NTU1NTU1NTU1NTVwLTIsIC0weDEuZmZmZmZlM2ZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDExOQorICAgIDB4MS44YWE4ODA4NjQ3ZDA3Yjg4MTliNjg2YTQ0ODE3NDA3NnA1ODYsCisgICAgMHgxLjU1NTU1NTU1NTU1NTVwLTUsIC0weDEuZmZjN2ZmZmZmZmZmZnA2CisgIH0sCisgIHsgLy8gRW50cnkgMTIwCisgICAgMHgxLjdhMGE5MTA4ZTFkMTg4NGM1ODRhOWFiODFmYzNmM2QxcC0yOTQsCisgICAgMHgxLjU1NTU1NTU1NTU1NTVwLTUsIDB4MS4wMDAwMDAwMDBlMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgMHgxLmFkM2Q1MDMzMjE3YTA0N2MyNjAyZWQ5YjNjMGE5NjQ0cC00NjEsCisgICAgMHgxLjU4YTI2MTIxZjQ2ZjZwLTIsIDB4MS4yNGY0NWY1ZmQ0Zjc5cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIKKyAgICAweDEuMTEwNGZiOGNmNzg2YzgwMGZmYzczNTg4OWE1MzFmYTNwMCwKKyAgICAweDEuNjEzMDk4NGMwMjAxN3AwLCAweDEuOTk5OTk5OTk5OTk5YXAtMworICB9LAorICB7IC8vIEVudHJ5IDEyMworICAgIDB4MS4xZTk1MmIxOWNjMzM2NzJmMWNkZDNlYzUwZTBiM2RmMnAtMTAyMywKKyAgICAweDEuNjIyZThiYTJlOGI5ZHAtMSwgMHgxLmUwZjgzZTBmODNlMGNwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAweDEuY2VhZmQ4YzAzODViZDhhYmJkNTc0NDcwNGJmMTNkNGVwLTEwMjMsCisgICAgMHgxLjY3MTExMTExMTExMGNwLTEsIDB4MS5mMzMzMzMzMzMzMzI0cDEwCisgIH0sCisgIHsgLy8gRW50cnkgMTI1CisgICAgMHgxLjZhMDllNjY3ZjNiYTEyZjkzMjQ3YTc2ZDc0Mzc0NDE4cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYjllcC0xLCAweDEuZmZmZmZmZmZmZmZmM3AtMQorICB9LAorICB7IC8vIEVudHJ5IDEyNgorICAgIDB4MS5hODg3MjkzZmQ2ZjMwYTExZTlmM2FhYjE2MWIwZDQxZnAwLAorICAgIDB4MS43NDVkMTc0NWQxNzQ2cC0yLCAtMHgxLmZmZmZmZmZmZmZmZjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcKKyAgICAweDEuOTE3NDk5OTAwZmRhMDdmZWQ0OTc5NmQ4MjU2Y2JlYWRwLTQwLAorICAgIDB4MS43NDVkMTc0NWQxNzQ2cC0zLCAweDEuZmZmZmZlM2ZmZmZmZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTI4CisgICAgMHgxLmY0NmU5Njc5ODBlMDQ4YzU5ZmQwZmJlYTFlNTc3ODFjcDk2NywKKyAgICAweDEuN2EwcDcsIDB4MS5mZmZmZmZmZWZmZmZmcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkKKyAgICAweDEuOTljZTQ1YjdlMjhmYzdmZjJkM2NmYjQ2MTc3NDJkN2FwLTEsCisgICAgMHgxLjdiZjBiMjM0OGIwYThwMiwgLTB4MS4wcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTMwCisgICAgMHgxLmZlOWQzZmFjZWNkYjQ4MmU1MmEyMDI2ZjBkMGZjYmFicDAsCisgICAgMHgxLjhwLTEsIC0weDEuMzMzMzMzMzMzMzNjMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgMHgxLjk2YzNhODY0ZDkyY2M4MjQyZmE2YTA1NmJiMDhiM2NmcC0xLAorICAgIDB4MS44NWU4NWU4NWU4NWVhcC0xLCAweDEuYjA3M2VjYWRlMzA1M3AtMQorICB9LAorICB7IC8vIEVudHJ5IDEzMgorICAgIDB4MS5mMmQ4MGNmOGNjMDhiN2ZmZmZlZWE3OWY5NWMzYTliYXAtMSwKKyAgICAweDEuODdkODcyNDQxZWFiYnA5LCAtMHgxLmZmZmZmZmZmZmZmZWVwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMKKyAgICAweDEuZmZmZmZmZmZmZmZmNzAxZjhhZmI5YWEwNmJhZDMzYzFwLTEsCisgICAgMHgxLjg5ZTM2ZWY4NGYxOWRwMSwgLTB4MS4wMDAwMDAwMDAwMDExcC01MAorICB9LAorICB7IC8vIEVudHJ5IDEzNAorICAgIDB4MS4wMDAwMDAwMDAwMDAwZmZmYjc1MGYwNzU5M2FjMGZlZnAwLAorICAgIDB4MS44ZDYwMGI3Njk2ODYycC05NiwgLTB4MS5lZmFlNjFmNjBmNmU4cC01OQorICB9LAorICB7IC8vIEVudHJ5IDEzNQorICAgIDB4MS5lOGYxNTU2NWVkNDNhODJlMDUyMjM2YWMzZjhhMWYwOXA3NywKKyAgICAweDEuOThkMmZlNWM1M2YzNHAtMzksIC0weDEuMDQ0YTAwMmQ1MGFkOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTM2CisgICAgMHgxLjBmNGIxMThhMTBlNDlmZmZmZjAwYWU3MzU3ZDg3Yzk0cC0xLAorICAgIDB4MS45OTk5OTlhNjM3ZjEwcC0yLCAweDEuNjJlNDJmZWZhMzllZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIDB4MS5kMjUxNWM0OWQ2NDE1N2ZlZjYyZWZlMzdhYTdkNGU1N3AtNDQsCisgICAgMHgxLjljMDEzM2NkYjA4NTZwLTUsIDB4MS40cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgKKyAgICAweDEuZmI4NWU5ZjEzZjA3Njc1MzQ1MGUzMTU2OTVkMjM5ZTlwLTEwMjMsCisgICAgMHgxLjlmMGVkNGY5MzA1MjJwLTEsIDB4MS5hNWRiOGExNzU1ZTljcDExCisgIH0sCisgIHsgLy8gRW50cnkgMTM5CisgICAgMHgxLjAxYWI4ZjI2NzFiNmU4MDAwMDk2MzQ5YWI4OTc0ZWM1cDAsCisgICAgMHgxLjlmY2ZlN2YzZmExODFwLTEsIC0weDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDE0MAorICAgIDB4MS42OWM3MzgyNGZiYWJmODA2NmMwZjM4NDg3YzYwMGM3MnA5LAorICAgIDB4MS5hMDQzMjc0YjcwNWNlcDMsIDB4MS40ODdlMzFjY2U2NDY4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAweDEuZDIwMDg4ZjRlZWI4YTUyZmYwMjlmZjdlNDc2ZTNiNjdwLTU4MiwKKyAgICAweDEuYTVkMTc0NWQxNzQ2ZXAtMSwgMHgxLjAzZTBmODNlMGY4M2NwMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIKKyAgICAweDEuYzRiZWVkZjMxNTFlMjgwM2UwNDliYjUxNjFkMTI3MmRwLTI3MiwKKyAgICAweDEuYWE0Y2U4ZWQ1MjZiMXAtMSwgMHgxLjAwODgwcDEwCisgIH0sCisgIHsgLy8gRW50cnkgMTQzCisgICAgMHgxLjcxNzMwNjJiNzRjMjE3ZmVhNmI0MWU2YTdmYjQ4ZGQ2cC03MTEsCisgICAgMHgxLmFiOTlkMzYwOTFiYzBwOTcsIC0weDEuZDEzNmVlOGU1OTU3M3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTQ0CisgICAgMHgxLjg2YzFiNDlhNTUxMDk3ZmU3ODM5OWMwMGQwMTU3ZDkycC0yLAorICAgIDB4MS5iNzgyMjE4YzNmZGI0cDIsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIDB4MS41YjZhNzQ0OTlkNjM3ODA0YjlhYTI4ZjliNzY2YzNjY3AtMSwKKyAgICAweDEuYmNlYjc3MWEwMmJkZXAyLCAtMHgxLjk5OTk5OTk5OTk5OWFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDYKKyAgICAweDEuZmRkZTZkN2Q5OTJkNGZmY2QwYTI0NDZhOTU3MmI3OTFwLTEsCisgICAgMHgxLmJmZmZmZmZmZmZmZmRwLTEsIDB4MS5mZmM3ZmZmZmZmZmZmcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTQ3CisgICAgMHgxLjI0OTI0OTI0OTI0OTJmMDUzOTc4MjljYmMxYWRlNjlmcC0xMDIzLAorICAgIDB4MS5iZmZmZmZmZmZmZmZmcDEwMjIsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQ4CisgICAgMHgxLmNjYTM0ZDhkNjA5NTQyMzUyZGZlYWFjZTUyOGNiN2ExcC04MTgsCisgICAgMHgxLmNwLTEwMzMsIDB4MS45NTU1NTU1NTU1NTUycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgMHgxLjU1Y2I4MDVkM2I2YWI1Yzc2NzVjZTI4OGRiMTc5ZjJicC05ODEsCisgICAgMHgxLmNwLTEwMzMsIDB4MS5lNjY2NjY2NjY2NjYycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTUwCisgICAgMHgxLjk3YTNmY2JhY2ViZTVkODZkNGY5Njc1ZDNiODIwOGY4cDg2MSwKKyAgICAweDEuY3AtMTA1OSwgLTB4MS5hMGVhMGVhMGVhMGVhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTUxCisgICAgMHgxLmU5MjZmMzM0MjcyOWQxMDBiZWFiMjJiNTAyOWZhNjkycC05NTYsCisgICAgMHgxLmNwLTEwNzEsIDB4MS5jOGViZDQ4ZWJkNDk4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTUyCisgICAgMHgxLmYxNjY4YTg3N2MzMDIwYzg1MDVjNDVhZTk5NGJkMzU4cC0xMDAyLAorICAgIDB4MS5jcC0xMDcxLCAweDEuZGVlYWJiNzg4NDU0OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1MworICAgIDB4MS4yNDkyNDkyNDkyNDU5NzgyOWNiYzE0ZjBlOTNjNzQ2ZXAtMTAyMywKKyAgICAweDEuYzAwMDAwMDAwMDA1N3AxMDIyLCAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDE1NAorICAgIDB4MS5jNjVjMmNmMzk2MmRhODAxM2Q0MGVlOGMzYjQ2YmYxZHA5NiwKKyAgICAweDEuYzI1YzI2ODQ5MTYxMHAtNDQsIC0weDEuMWVmZWZmNWEyNzNlY3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTU1CisgICAgMHgxLjk3MGMxMGQ2YjBhNTlhN2ZhZGYxZTIxZTVhYjY3N2JlcDc3LAorICAgIDB4MS5jMjVjMjY4NDk3NjgycC00NCwgLTB4MS5jYzZiOTNhYmJiMDc0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTYKKyAgICAweDEuODU4M2MyNDg5YTUwMzgwMDA2YzljNzIwNWI1YTU0ZmVwLTEsCisgICAgMHgxLmMyZTE3MGI4NWM5OTRwLTIsIDB4MS41NTU1NTU1NTU1NTU1cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgMHgxLjdlNDU3MzAxNWJjNjNiZDI2NzY3OWFhYjJjZDg5ZjY2cC0xLAorICAgIDB4MS5jYjNjOTQ4NGUyYWQwcDAsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1OAorICAgIDB4MS43ZTNlNzE5Y2U1Yjc5N2ZlODg1ODE1YmMzYjI0NTdmMnAtMSwKKyAgICAweDEuY2I0ZDY5ZWI0ZjRiOXAwLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTkKKyAgICAweDEuZmQ0MjUwYTg3MWM3ZmUwMGQ1ZjUxMDM5YzU3ZGRlNmZwLTYyNCwKKyAgICAweDEuY2NjNGMwZmQ2M2NiNnAtMSwgMHgxLjBwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjAKKyAgICAweDEuNWRjMjg1ZDViNWYxNjgwMGY2ZDdkYzVmZmRjZjhkMTZwLTEsCisgICAgMHgxLmQxNzQ1ZDE3NDk4ODNwLTEsIDB4MS5mZmM3ZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjEKKyAgICAweDEuZmVhNTk1ZDVjMDRmODgxNDM4ZjdmNWYxMGRiYjAyOTdwLTIsCisgICAgMHgxLmQ1NTU1NTU1NTU1NTJwLTEsIDB4MS5mZmM3ZmZmZmZmZmZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjIKKyAgICAweDEuMDAwMDAwMDAwMDAwN2ZmMDRhMjY2NzhiNjMzYTEzM2VwMCwKKyAgICAweDEuZDg3MjQ0MWVjMzkwNXAyLCAweDEuMDAwMDAwMDAwMDAxMXAtNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjMKKyAgICAweDEuYTYzZjRiZDc5N2Y4MjgwNTkxOWIwOWQyYjYyZGExZTFwLTEsCisgICAgMHgxLmRhNjBhMWYyZWM2MDhwLTIsIDB4MS4wMDdjZDk1MjRkM2Y0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTY0CisgICAgMHgxLmE4MmUxNDY5MDI1Yzg1MGMxNDQ4YTE5YzJhZjY3ZmU0cC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzJwLTIsIDB4MS5jMzBjMzBjMzBjM3A4CisgIH0sCisgIHsgLy8gRW50cnkgMTY1CisgICAgMHgxLjc3OWEwNmJjMzg4MGUyYzM5ZGZjNjc5NzQ5ZTQ3MGE1cC0yLAorICAgIDB4MS5kYmIwZTBhYTJkZDBlcDIsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2NgorICAgIDB4MS5mNTViNDFhYjRhNjc1NDA1YjU0MjcwM2Q5YjAzN2FlN3AtNDA4LAorICAgIDB4MS5kZGE5NWE5NWE5NWIxcC0xLCAweDEuZmMwcDExCisgIH0sCisgIHsgLy8gRW50cnkgMTY3CisgICAgMHgxLjc2N2ZiYWQyMTlhMjA4MDE4ZDZiODFmN2YzYTIwNTFicDIsCisgICAgMHgxLmRlN2YxNTQ4Mzg1MzdwLTYsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2OAorICAgIDB4MS43MTFkNjAyZmZiMjdmODAyMDkwNDNkNmQ4ZjI4M2NmOHAtMTAsCisgICAgMHgxLmU2NjY2NjY2NjY2NmJwLTEsIDB4MS5mZmZmZmZmZmZmZmY4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjkKKyAgICAweDEuZmY1Njk3Mzk2YWYxNTdmZmVhZDc0ODg1OWFlM2M5Y2JwMSwKKyAgICAweDEuZWVlZWVlZWVlZWVlZXAyLCAweDEuNWFhYWFhYWFhYWFhYnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3MAorICAgIDB4MS5mZTk2MWEzY2NkM2MyODFhZDAzMzNkNjgwNjkyN2IyYnAtMSwKKyAgICAweDEuZjA3YzFmMDdjMWYwN3AtMTQsIDB4MS40MGE1N2ViNTAyOTZkcC0xMgorICB9LAorICB7IC8vIEVudHJ5IDE3MQorICAgIDB4MS5kYWMwYzdjZmJlZjA1YmQ2NWEwZTZlYTI0NzdmNDdmYXA3NzgsCisgICAgMHgxLmYxYTE3ZDA3OWUyNGZwLTMsIC0weDEuN2Q5YzBiNWYzYTk2MHA4CisgIH0sCisgIHsgLy8gRW50cnkgMTcyCisgICAgMHgxLjZlYTY5YmQ4NWI2N2NjODViZTgzZmE5NzdkYzEyM2NhcC0xLAorICAgIDB4MS5mMzMzMzMzMzMzMzI0cDAsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3MworICAgIDB4MS43MTViZjkyZjQzZjAwYjQwMzA0OWUwYzNlNTExNTNmOHAtMTYsCisgICAgMHgxLmY2NjQ5ODRiOGExNTJwLTIxLCAweDEuOGI4NTJjZTIyMTlmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE3NAorICAgIDB4MS43NDM2ODA5NGVmYmZiMzgwYmIyZGYyZTIwZTJhN2ExN3AtODUsCisgICAgMHgxLmY2ZGVkOGJjM2ZhNDNwLTcsIDB4MS5jMDgzNTk1YzJiMWJjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzUKKyAgICAweDEuYjBlZjU1NjAwNjIwNzcxOGQzZGEwOGE5MDEzNjcyNmRwNzIxLAorICAgIDB4MS5mODNlMGY4M2UwYjhhcC0xLCAtMHgxLjAwMDAwMDAyYjY1OGVwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzYKKyAgICAweDEuYjBlZjRjZDk0ZjhmOGE4ZTYwM2ZmNjU4ZjYxZmVmYjFwNzIxLAorICAgIDB4MS5mODNlMGY4M2UwYmE1cC0xLCAtMHgxLjAwMDAwMDAwMjIxZWZwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAweDEuYjBlZjRjZDgyZjEzODdkNzY1ODBhOWVlYWJhNjU2ZjZwNzIxLAorICAgIDB4MS5mODNlMGY4M2UwYmNmcC0xLCAtMHgxLjAwMDAwMDAwMjIxZWZwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzgKKyAgICAweDEuYjBlZjRjZmIxY2VjMzdkNjRmMzdlYTM3NTU5N2I3NDBwNzIxLAorICAgIDB4MS5mODNlMGY4M2UwYmNmcC0xLCAtMHgxLjAwMDAwMDAwMmNiMDlwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzkKKyAgICAweDEuYjBlZjU1NWUyNjljNjc3NGExOGI1NmFmMzY5NDdkODJwNzIxLAorICAgIDB4MS5mODNlMGY4M2UwYmNmcC0xLCAtMHgxLjAwMDAwMDAyYjY1NzNwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODAKKyAgICAweDEuYjFjMzA0MmZlNzZlYzc0ZWI2MzE3NzZlYTkwYzNjYzZwNzIxLAorICAgIDB4MS5mODNlMGY4M2UwYmNmcC0xLCAtMHgxLjAwMDA0MDAwMjIxZWZwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAweDEuZjJlOTI0NzdkNjRjODZmYTU0ZjYyMTVlYzhkZTU4OTZwODI3LAorICAgIDB4MS5mODNlMGY4M2UwYmNmcC0xLCAtMHgxLjI1YWI2ZjdiY2VkOTNwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODIKKyAgICAweDEuYjBlZjRjMDRhYjZmOTdhNTI5MzUwOTE1NTA0YzAwNzRwNzIxLAorICAgIDB4MS5mODNlMGY4M2UwYmNmcC0xLCAtMHgxLmZmZmZmZmZmYzQzZGVwMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAweDEuYjBlZjU1NWIxZGJlOTdkMjc2ZDE5NjMwNmJhMDAwNTFwNzIxLAorICAgIDB4MS5mODNlMGY4M2UwYzI2cC0xLCAtMHgxLjAwMDAwMDAyYjYyMGZwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODQKKyAgICAweDEuYjBlZjRjYmU2ZGVlNjhmNjk3ZmM1ODg1ZTQzYTM1NDVwNzIxLAorICAgIDB4MS5mODNlMGY4M2UwZjgwcC0xLCAtMHgxLjAwMDAwMDAwMjIwcDE1CisgIH0sCisgIHsgLy8gRW50cnkgMTg1CisgICAgMHgxLjY2MWRiMjQyZTEzZjc4NzYwZjMzODVjNDhkZTZlMTRkcC03MTYsCisgICAgMHgxLmY4NGYxYjc3YWE2MWVwLTEsIDB4MS4wMDAwMDQ0cDE1CisgIH0sCisgIHsgLy8gRW50cnkgMTg2CisgICAgMHgxLjZjYzA1NjU5M2IxODk3ZmU3Mjk0NTU2ZTg1YTdmY2NhcC0xLAorICAgIDB4MS5mODY5YjEwZTE2NDZlcDAsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE4NworICAgIDB4MS45NmVjMTk5YzgyODMyODBkY2RlMWJmMGE2YmRmMThkZHAtMzMsCisgICAgMHgxLmY4NmQ2ZjYzYWEwNDlwLTEsIDB4MS43ODBwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODgKKyAgICAweDEuOGQzNTc1YzVhMDgyMTdlOTZkMmJhY2NkOTIxMDIxMDFwNjEyLAorICAgIDB4MS5mOTY4NjBhZmNiNDUycC0xLCAtMHgxLjAwMDAwNDNmZmZlZWRwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODkKKyAgICAweDEuOGQzNTc1YzUyZWEzMWZlYTNkMDc5OWY4Y2Y4NTIzZTNwNjEyLAorICAgIDB4MS5mOTY4NjBhZmNiNDY4cC0xLCAtMHgxLjAwMDAwNDNmZmZmODVwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTAKKyAgICAweDEuOGQzNTc1YzQ3MmYwYzg2M2MwNmE5NzZlMjJhMjVjNmRwNjEyLAorICAgIDB4MS5mOTY4NjBhZmNiNDg5cC0xLCAtMHgxLjAwMDAwNDRwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTEKKyAgICAweDEuOGQzNTc1YzM1YWFjZWZlYTk1Yzg4NTQzOWQ0OWJkOTlwNjEyLAorICAgIDB4MS5mOTY4NjBhZmNiNGJicC0xLCAtMHgxLjAwMDAwNDQwMDAwZDRwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTIKKyAgICAweDEuOGQzNTc1YzBjZmM0NjFiYmU1ZWUzNjQ0Y2M2ZDc3YzJwNjEyLAorICAgIDB4MS5mOTY4NjBhZmNiNTA2cC0xLCAtMHgxLjAwMDAwNDNmZmZjNzlwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTMKKyAgICAweDEuOGQzNTc1YzE2NjdkZjExNjM5Nzk4MjRkODYzY2M1NzFwNjEyLAorICAgIDB4MS5mOTY4NjBhZmNiNTA2cC0xLCAtMHgxLjAwMDAwNDQwMDAwMjJwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTQKKyAgICAweDEuOGQzNTc1YjRmZWM1ODhlNTZmMWJhNGJiMmNkZTNkMzdwNjEyLAorICAgIDB4MS5mOTY4NjBhZmNiNzE0cC0xLCAtMHgxLjAwMDAwNDQwMDAzNTNwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTUKKyAgICAweDEuOGQzNTc1YWMzZmY0OWVlMDA0NDA0MTk1MWQyMDcwNmJwNjEyLAorICAgIDB4MS5mOTY4NjBhZmNiODU4cC0xLCAtMHgxLjAwMDAwNDNmZmZlNmRwMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTYKKyAgICAweDEuNjcxOTg2ZGJlNTNmNTZhY2QzNmRkYWVlYzk3Mjc3YWFwLTQ2LAorICAgIDB4MS5mOTg1ZjdjYmYwMDU5cC03LCAweDEuZTNmYTMwMThiZGUwOHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgMHgxLmVlYzczZWIzZWQ5MjQ3OTQwZTg3NzUwZTdmYzQ5NDc5cDEwMTksCisgICAgMHgxLmZhODFhNWU3ZDQxMmNwLTEsIC0weDEuMDAwMDA3ZmZlZjBwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTgKKyAgICAweDEuNmFmYzJiMzY2OWNhZmQ4YjA0YmUwNzYzN2NiOGNlNWVwLTEsCisgICAgMHgxLmZkNTU3MDE5ZjFjZDBwMCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTk5CisgICAgMHgxLmM0ZjkxZDI0ZTVjM2U4NmY3M2VhNjgxMzJiZGE0YjhhcDEwMDIsCisgICAgMHgxLmZkZmZmZmZmZmZmZmZwLTMsIC0weDEuZjNmZmZmZmZmZmZmZnA4CisgIH0sCisgIHsgLy8gRW50cnkgMjAwCisgICAgMHgxLjZhOTNiN2YwNDY5NGFkNjZiOWFhNjRmNzZiYTFmYTM4cC0yLAorICAgIDB4MS5mZTdiMGVlNmFmYTNjcDIsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDIwMQorICAgIDB4MS5lMTc3NmJkZTE2NjQzODA4YTM4Y2FmMDUwZjVjYjYzMHAtOTY2LAorICAgIDB4MS5mZjNlOWFlMzAzM2FlcC0xLCAweDEuYmE2YzEzYmYwMDVlY3AxOAorICB9LAorICB7IC8vIEVudHJ5IDIwMgorICAgIDB4MS5kNGVmNWVjZDc1NGNkN2Y2ZTcwMTY0NTM5OTRjMjFkNXAtOTQzLAorICAgIDB4MS5mZjQzM2EwMmVjOTY0cC0xLCAweDEuYmE3YTM0N2NkZmZlYnAxOAorICB9LAorICB7IC8vIEVudHJ5IDIwMworICAgIDB4MS5mZTliYmRjMTYxYWJkN2ZkOWIzMmRiYmMyZDc0ODQzOHAtOTE1LAorICAgIDB4MS5mZjQ4ZTJiNGE1ZDdlcC0xLCAweDEuYmE4YjgxMGY1NTA3ZnAxOAorICB9LAorICB7IC8vIEVudHJ5IDIwNAorICAgIDB4MS5kZTUyYWE2YTVlY2FmODA2Nzc5N2M5ZTJhMjgxYjIzZXAtOTA1LAorICAgIDB4MS5mZjRhZTBlNDQwZmI2cC0xLCAweDEuYmE5MTk4YWIwM2NkNHAxOAorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIDB4MS43NmJjNTJkYzc0MzFmODAwMDAwNTM2YTk0YmMzZDMwNXAxMzMsCisgICAgMHgxLmZmNzdmZmZmZmZmZmZwMTUsIDB4MS4wYjFmZGNkNzU5MGFicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDYKKyAgICAweDEuNWMxYzJkZWQ3MjEzZDk5MTgzNmZkMmFhOGRmZjRkZjdwLTEwMjMsCisgICAgMHgxLmZmN2ZmZmZmZmZmZmZwMCwgLTB4MS4wMDAwMDAwMGNwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAweDEuN2EyYjRkNzJjY2ZhYjdmZWJiNjhhYjNhYzQyMmNkYTdwLTYxMywKKyAgICAweDEuZmY4NTc5NmU0ZjA2M3AtMSwgMHgxLmJiNDRiODZjYTA5MjhwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDgKKyAgICAweDEuMThhMmZhZjhiNWY2ZTgwMzI4MzdlN2Q4N2FiY2ZhNThwLTQxMCwKKyAgICAweDEuZmZhZTEzZWJmMTg3MnAtMSwgMHgxLmJiYzBkN2MzYTg4MmNwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDkKKyAgICAweDEuMzllN2Q4NGE4OTU4MjgyMDUzNjY2ZDhjNDE5Mzg0NjZwLTczOSwKKyAgICAweDEuZmZmMDAwMDAwNjA3MXAtMSwgMHgxLjAwMDAxNDBwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTAKKyAgICAweDEuZTZjZTZmNDllYTYwMjgwMTYwNTBmNWYzOGFlZmMyMDRwNzk1LAorICAgIDB4MS5mZmY4MDAwMDBlNDgzcDEwMjMsIDB4MS44ZGY2YjBkZjZiMGUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjExCisgICAgMHgxLjlhYWEzY2RkMTJkYzA1ZTI0NmIyMzQ2NTRiOGRjNzZmcC00NDIsCisgICAgMHgxLmZmZmZmZTdmZmZmZmVwLTEwMjMsIDB4MS5iYTJlOGJhMmU4YmE0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjEyCisgICAgMHgxLmY2NjMyNzhmNzMwNDQ4MzJhMmMxYzU4MjBjNTFjZGU3cC0xLAorICAgIDB4MS5mZmZmZmYzZmZmZmZmcC04LCAweDEuMDAwMDAwZXAtOAorICB9LAorICB7IC8vIEVudHJ5IDIxMworICAgIDB4MS5mZmZmZmZjZDU1NTU0ODAxYzcyMmJmN2YzNzE1NjRkN3AtMSwKKyAgICAweDEuZmZmZmZmYmZmZmZmZnAtMSwgMHgxLjk1NTU1NTU1NTU1NTJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTQKKyAgICAweDEuNjFjNTBhYzhlMDI1NzAwMGNhMGQ4YjkzOGRmZTc5YWJwNTY3LAorICAgIDB4MS5mZmZmZmZiZmZmZmZmcDEwMjMsIDB4MS4xYmJiYmJiYmJiYmI5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjE1CisgICAgMHgxLmZmZmZmZjgwMDAwMDA4cC0xOTksCisgICAgMHgxLmZmZmZmZmNwLTEwMCwgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDIxNgorICAgIDB4MS5mZmZmZmY4NTI5MWM2ODAzYjg1NDczMzJkMDFmNjNiMXAxMDIzLAorICAgIDB4MS5mZmZmZmZmZjhmZmZmcDcsIDB4MS5mZmZmZmZmZmU3ZTQ5cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTcKKyAgICAweDEuZmZmZmZmYzdmZmY0NWY5NTFmM2E3OGRjYjU5YTdmYTVwLTg5NywKKyAgICAweDEuZmZmZmZmZmZlZmZmZnAtMiwgMHgxLmJmZmZmZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDIxOAorICAgIDB4MS43YjI5MzU4ZDQ1ZjQxYTJmMjNlZTIyZjgwYmI2ZmQwOHA1MDgsCisgICAgMHgxLmZmZmZmZmZmZjNmZmVwLTEwMjMsIC0weDEuZmQ4ZmQ4ZmQ4ZmQ4ZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDIxOQorICAgIDB4MS5lMzQzN2U3MGZlYzI0NTU4YzEwNzljYWRlNTYxZTI3NnAtODEwLAorICAgIDB4MS5mZmZmZmZmZmZiZmZlcC0xMDIzLCAweDEuOTU1NTU1NTU1NTU1MnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIyMAorICAgIDB4MS5mZmZmZmZmZmZkZmZmN2ZmZmZmZWZmOTdmZTZmZmVmZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmYmZmZnAtMSwgMHgxLjAwMDAwMDAwMDAwMDNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjEKKyAgICAweDEuZjY2OTdjN2FmYTBhYzgyN2Q0NWI0MjhiOWMxM2VhNDZwNzcsCisgICAgMHgxLmZmZmZmZmZmZmYwZDZwOTUyLCAweDEuNGYyMDk0ZjIwOTRmMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDIyMgorICAgIDB4MS5mZmZmZmZmZmZmYmMzN2ZmZmZmZmZmODI0MzZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmI0YnAtMSwgMHgxLmNjY2NjY2NjY2NjY2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjMKKyAgICAweDEuZmZmZmZmZmZmZmNmZTdmZmZmZmZmZmUyMzJjZmZmZmZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZjZDZwLTEsIDB4MS5lNjY2NjY2NjY2NjY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjI0CisgICAgMHgxLmZmZmZmZmZmZmZmMzc3ZmZmZmZmZmZkYmRmZWZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZTZmcC0xLCAweDEuZmZmZmZmZmZmZmZmOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDIyNQorICAgIDB4MS4wMDAwMDAwMDAwMDNjN2ZmZmZmZmZmZWI0MzFmZmZmZnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZjBlcC0xLCAtMHgxLmZmZmZmZmZmZmZlOWJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjYKKyAgICAweDEuMDAwMDAwMDAwMDEyZDgwMDAwMDAwMGVjYjk4MHAtMywKKyAgICAweDEuZmZmZmZmZmZmZmYzN3AwLCAtMHgxLjhwMQorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIDB4MS5hZTg5Zjk5NWFhYTkzYjhhYmVhMmM3YjdjYmNkYzVlMnAzNzgsCisgICAgMHgxLmZmZmZmZmZmZmZmOWZwMiwgMHgxLmY4ZmZmZmZmZmZmZmZwNgorICB9LAorICB7IC8vIEVudHJ5IDIyOAorICAgIDB4MS4wMDAwMDAwMDAxOTM0ODAwMDAwMTNmZDZiMjQwMDBhYXAtMTAxNSwKKyAgICAweDEuZmZmZmZmZmZmZmZhN3A2LCAtMHgxLjIyMHA3CisgIH0sCisgIHsgLy8gRW50cnkgMjI5CisgICAgMHgxLmZmZmZmZmZmZmZmZDA3ZmZmZmZmZmZmZmVjNGZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmNlcC0xLCAweDEuZTY2NjY2NjY2NjY2NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIzMAorICAgIDB4MS5mZmZmZmZmZmZmMWNlNDg1ZmRmNGE1ZmQzZTY3MWVhOXAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZlZnAtNSwgMHgxLmZlZmZmZmZmZmZmZmZwNworICB9LAorICB7IC8vIEVudHJ5IDIzMQorICAgIDB4MS4wMDAwMDAwMDAwMDA0N2ZmZmZmZmZmZmZmZmZmZmZmZnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmY3cC0xLCAtMHgxLmZmZmZmZmZmZmZmZjdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzIKKyAgICAweDEuMDAwMDAwMDAwMDAwMjgwMDAwMDAwMDAwMDY0MHAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmYnAxMDIyLCAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIDB4MS5mZmZmZmZmZmZmZmZmODAwMDAwNmZmZmZmZmQwcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcC0xLCAweDEuZmZmZmZlM2ZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDIzNAorICAgIDB4MS5mZmZmZmZmZmZmZjE3MjE3ZjdkMWNmOGRhMGNjNzdjYnAxMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZkcDAsIDB4MS4wMDAwMDAwMDAwMDAycDEwCisgIH0sCisgIHsgLy8gRW50cnkgMjM1CisgICAgMHgxLmZmZmZmZmZmZmZmOGI5MGJmYmU4ZTdiZjkzMjU5NmRmcDEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmRwMSwgMHgxLjAwMDAwMDAwMDAwMDFwOQorICB9LAorICB7IC8vIEVudHJ5IDIzNgorICAgIDB4MS4wMDAwMDAwMDAwMDAwN2ZmZmZmZmZmZmZmZmRmZmZmZnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC0xLCAtMHgxLmZmZmZmZmZmZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAweDEuOWZkZjhiY2NlNTM0NjAwNGM1ZjhmZTFmZTUyYjExMTVwNTYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTY0LCAtMHgxLmNjY2NjY2NjY2NjY2RwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzgKKyAgICAweDEuMzM1NDA1MzYxMzk3NTgwMWUxZjE4YzYwN2Q5ZjdjOTZwLTU1LAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC0yMjQsIDB4MS5mNmIwZGY2YjBkZjZhcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjM5CisgICAgMHgxLjQzMzdjZDZiMTFiZDc3ZmYxZGZiMTZlNzc0NDdlZjhlcDE1NywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtNjQyLCAtMHgxLmY2YjBkZjZiMGRmNmNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDAKKyAgICAweDEuOWZkZjhiY2NlNTcxZmIzYzk1NjFmMzM3YzljNDI3ZDRwMjc4LAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC05MzAsIC0weDEuMzMzMzMzMzMzMzMzN3AtMgorICB9LAorICB7IC8vIEVudHJ5IDI0MQorICAgIDB4MS5kZGI2ODAxMTdhYjk2ODA1Nzc5NmU4MTkxNGU3ODU5NXA5MDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTEwMTIsIC0weDEuY2NjY2NjY2NjY2NjZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI0MgorICAgIDB4MS4yMzg3YTZlNzU2MjMzMDAwYjQ5YzNiMGJmOWM1NDk4MnAxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDQsIDB4MS5lNjY2NjY2NjY2NjVjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMjQzCisgICAgMHgxLmE1YWRiOGM4ZTMyYzE4MDdhN2RhOTJiNDNmN2NjOTBjcDU0LAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDc1LCAweDEuNzBhM2Q3MGEzZDcwZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDI0NAorICAgIDB4MS5lYzFkZWFiYmUzYTllYWUyOWJkZTU2Zjg4ZThlZjRlZXA2MjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwODEzLCAweDEuOGFmOGFmOGFmOGFmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIDB4MS5mZmZmZmZmZmZmOGY5ZGNjZDUyZDQ3MGE4ODI2NjljM3A2NDcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwODYzLCAweDEuN2ZmZmZmZmZmZmZmZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI0NgorICAgIDB4MS4wMDAwMDAwNGRhMjBhN2QyODIxY2RmZDRmNjM0N2RkMHAxMjgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMsIC0weDEuMDAwMDAwMDAwZTBwNgorICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIDB4MS40NGNlNTQxYjYwMzQ2Yzk4MDk0NDQzYjlmYWE4NGFiZHAxMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzLCAweDEuNGFmZDZhMDUyYzBlMnAtNworICB9LAorICB7IC8vIEVudHJ5IDI0OAorICAgIDB4MS5jYjcyMGRjZWY5MDY5MTUwM2NiZDFlOTQ5ZGI3NjFkOXAtMSwKKyAgICAweDEuMHAtNSwgMHgxLjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDkKKyAgICAweDEucC01LAorICAgIDB4MS4wcC01LCAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjUwCisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjUxCisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTIKKyAgICAweDEucC00MCwKKyAgICAweDEuMHAtNSwgMHgxLjBwMworICB9LAorICB7IC8vIEVudHJ5IDI1MworICAgIDB4MS5wLTE2MCwKKyAgICAweDEuMHAtNSwgMHgxLjBwNQorICB9LAorICB7IC8vIEVudHJ5IDI1NAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMjU1CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTYKKyAgICAwLjAsCisgICAgMHgxLjBwLTUsIDB4MS4wcDEwCisgIH0sCisgIHsgLy8gRW50cnkgMjU3CisgICAgMC4wLAorICAgIDB4MS4wcC01LCAweDEuMHAxMgorICB9LAorICB7IC8vIEVudHJ5IDI1OAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDI1OQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuMHAxMgorICB9LAorICB7IC8vIEVudHJ5IDI2MAorICAgIDB4MS4xMTMwMWQwMTI1YjUwYTRlYmJmMWFlZDkzMThjZWFjNXAwLAorICAgIDB4MS4wcDMsIDB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjYxCisgICAgMHgxLnAzLAorICAgIDB4MS4wcDMsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAweDEuMWQ0ODczMTY4YjlhYTc4MDViODAyODk5MGYwN2E5OGJwMCwKKyAgICAweDEuMHA1LCAweDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDI2MworICAgIDB4MS5wNSwKKyAgICAweDEuMHA1LCAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjY0CisgICAgMHgxLnAyNCwKKyAgICAweDEuMHAzLCAweDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMjY1CisgICAgMHgxLnA5NiwKKyAgICAweDEuMHAzLCAweDEuMHA1CisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgMHgxLnA0MCwKKyAgICAweDEuMHA1LCAweDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMjY3CisgICAgMHgxLnAxNjAsCisgICAgMHgxLjBwNSwgMHgxLjBwNQorICB9LAorICB7IC8vIEVudHJ5IDI2OAorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wcDMsIDB4MS4wcDEwCisgIH0sCisgIHsgLy8gRW50cnkgMjY5CisgICAgSFVHRV9WQUwsCisgICAgMHgxLjBwMywgMHgxLjBwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzAKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMHA1LCAweDEuMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDI3MQorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wcDUsIDB4MS4wcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMjcyCisgICAgMHgxLjNkZWE2NGMxMjM0MjIzNWI0MTIyM2UxM2Q3NzNmYmEycDAsCisgICAgMHgxLjBwMTAsIDB4MS4wcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjczCisgICAgMHgxLnAxMCwKKyAgICAweDEuMHAxMCwgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDI3NAorICAgIDB4MS40YmZkYWQ1MzYyYTI3MWQ0Mzk3YWZlYzQyZTIwZTAzNnAwLAorICAgIDB4MS4wcDEyLCAweDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIDB4MS5wMTIsCisgICAgMHgxLjBwMTIsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAweDEucDgwLAorICAgIDB4MS4wcDEwLCAweDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgMHgxLnAzMjAsCisgICAgMHgxLjBwMTAsIDB4MS4wcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzgKKyAgICAweDEucDk2LAorICAgIDB4MS4wcDEyLCAweDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgMHgxLnAzODQsCisgICAgMHgxLjBwMTIsIDB4MS4wcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAweDEuMDAwMDAwMDAwMDAwMTk4ZDRkMGRhMDU1NzFlOWFkNDdwMiwKKyAgICAweDEuNmEwOWU2NjdmM2JjY3AtMSwgLTB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODEKKyAgICAweDEuZmZmZmZmZmZmZmZmY2NlNTY1ZTRiZjU1MjE0NjczODVwLTMsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwLTEsIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAweDEuMDAwMDAwMDAwMDAwMTk4ZDRkMGRhMDU1NzFlOWFkNDdwLTIsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwMCwgLTB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODMKKyAgICAweDEuZmZmZmZmZmZmZmZmY2NlNTY1ZTRiZjU1MjE0NjczODVwMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjY3AwLCAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjg0CisgICAgMHgxLjAwMDAwMDAwMDAwMDE5OGQ0ZDBkYTA1NTcxZTlhZDQ3cDIsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwLTEsIC0weDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjg1CisgICAgMHgxLmZmZmZmZmZmZmZmZmNjZTU2NWU0YmY1NTIxNDY3Mzg1cC0zLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjcC0xLCAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjg2CisgICAgMHgxLjAwMDAwMDAwMDAwMDE5OGQ0ZDBkYTA1NTcxZTlhZDQ3cC0yLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjcDAsIC0weDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMjg3CisgICAgMHgxLmZmZmZmZmZmZmZmZmNjZTU2NWU0YmY1NTIxNDY3Mzg1cDEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwMCwgMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDI4OAorICAgIDB4MS4wMDE2MmYzOTA0MDUxZmEyYzFiNGU4NTM3NDZiNmYwNHAwLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjcC0xLCAtMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjg5CisgICAgMHgxLmZmZDNhNTY1ZWZiNjRlYTg4YTgwZDhhNTI1NTRhM2EwcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjcC0xLCAweDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTAKKyAgICAweDEuZmZkM2E1NjVlZmI2NGVhZWVkNDY3MTgzYjhkNDZhOTZwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NwMCwgLTB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI5MQorICAgIDB4MS4wMDE2MmYzOTA0MDUxZjlmOGZjNDZiMzc0M2Y4NWNiZXAwLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjcDAsIDB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI5MgorICAgIDB4MS45NDhiMGZjZDZlOWUwNjUyMmMzZjM1YmE3ODE5NDhiMHAxLAorICAgIDB4MS44cC0xLCAtMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDI5MworICAgIDB4MS40NHAtMiwKKyAgICAweDEuOHAtMSwgMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDI5NAorICAgIDB4MS45NDhiMGZjZDZlOWUwNjUyMmMzZjM1YmE3ODE5NDhiMHAtMywKKyAgICAweDEuOHAwLCAtMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIDB4MS40NHAyLAorICAgIDB4MS44cDAsIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTYKKyAgICAweDEuMjc5YTc0NTkwMzMxYzRkMjE4ZjgxZTRhZmIyNTdkMDZwMCwKKyAgICAweDEuOHAtMSwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjk3CisgICAgMHgxLmJiNjdhZTg1ODRjYWE3M2IyNTc0MmQ3MDc4YjgzYjg5cC0xLAorICAgIDB4MS44cC0xLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI5OAorICAgIDB4MS5hMjBiZDcwMGMyYzNkZmMwNDJjYzFhZWQ3ODcxZGI0NXAtMSwKKyAgICAweDEuOHAwLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTkKKyAgICAweDEuMzk4OGUxNDA5MjEyZTdkMDMyMTkxNDMyMWE1NTY0NzNwMCwKKyAgICAweDEuOHAwLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMwMAorICAgIDB4MS4wMDEyNmEwYjkzZGIyOTRjYWJlMzNkYTczNTQzN2Y1MXAwLAorICAgIDB4MS44cC0xLCAtMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzAxCisgICAgMHgxLmZmZGIyZThlZDJhMWZlNzFiZDU5ZmRkNjEwMzEzMDQ2cC0xLAorICAgIDB4MS44cC0xLCAweDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDIKKyAgICAweDEuZmZjYzFjNTk3M2IyMTI5YTViMTQyNGUwYzg4Nzg2YjhwLTEsCisgICAgMHgxLjhwMCwgLTB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDMwMworICAgIDB4MS4wMDE5ZjQ3NGFhMTkwMDM4YzZhZjc3NWQ5MmYxZDcyNXAwLAorICAgIDB4MS44cDAsIDB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDMwNAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDMwNQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzA2CisgICAgMHgxLnAtNCwKKyAgICAweDEuMHAxLCAtMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDMwNworICAgIDB4MS5wNCwKKyAgICAweDEuMHAxLCAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzA4CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMwOQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMxMAorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAtMSwKKyAgICAweDEuMHAxLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTEKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwMCwKKyAgICAweDEuMHAxLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMxMgorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzEzCisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDMxNAorICAgIDB4MS5mZmE3NGVhMzgxZWZjMjE3YTc3M2YxNWMwMjVmN2MwZHAtMSwKKyAgICAweDEuMHAxLCAtMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzE1CisgICAgMHgxLjAwMmM2MDVlMmU4Y2VjNTA2ZDIxYmZjODlhMjNhMDEwcDAsCisgICAgMHgxLjBwMSwgMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzE2CisgICAgMHgxLnA0MCwKKyAgICAweDEuMHAtMTAsIC0weDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzE3CisgICAgMHgxLnAtNDAsCisgICAgMHgxLjBwLTEwLCAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzE4CisgICAgMHgxLmZlMDEzZjYwNDVlNDBhN2M0MTQ5OTIyM2I0YTM4Y2U4cC0xLAorICAgIDB4MS4wMDRwMCwgLTB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTkKKyAgICAweDEuMDEwMDYwMTAwMXAwLAorICAgIDB4MS4wMDRwMCwgMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDMyMAorICAgIDB4MS5wNSwKKyAgICAweDEuMHAtMTAsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMyMQorICAgIDB4MS5wLTUsCisgICAgMHgxLjBwLTEwLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMyMgorICAgIDB4MS5mZmMwMGJmZDgwOGJlMDg3MzY1MzY0NzQ0ODIyMGZkZnAtMSwKKyAgICAweDEuMDA0cDAsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMyMworICAgIDB4MS4wMDFmZmUwMDNmZjYwMWJmYWMxMDdjYTZiMjlhMGMzMXAwLAorICAgIDB4MS4wMDRwMCwgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjQKKyAgICAweDEuMDFiZDFlNzcxNzBiNDE1ZTc2MjY2MjFlYjVhYWZmNjFwMCwKKyAgICAweDEuMHAtMTAsIC0weDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAweDEuZmM4YmM0ODY2ZThhZDJiOTYzZTE4MjhiMDc2MWNiYzZwLTEsCisgICAgMHgxLjBwLTEwLCAweDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjYKKyAgICAweDEuZmZmZmUwMDQwMDU1MzU1ODQ0NDQzZGY4NjgwYThlMDVwLTEsCisgICAgMHgxLjAwNHAwLCAtMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMzI3CisgICAgMHgxLjAwMDAwZmZlMDBkNTI1NjI4NTM0MGU0ZjNhZDM2Mjg3cDAsCisgICAgMHgxLjAwNHAwLCAweDEuMHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjgKKyAgICAweDEuMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDA0MHAtMTAyNCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzLCAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDMyOQorICAgIDB4MS5mZmZmZmZmZmZmZmZmMHAxMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzAKKyAgICAweDEuM2IyYzQ3YmZmODI3MTk0NDI1NjA1YTkyMzExYWNjZWVwMTAyMCwKKyAgICAweDEuMHAtMTA3NCwgLTB4MS5lNjY2NjY2NjY2NjY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzMxCisgICAgMHgxLjlmZGY4YmNjZTU0MmY1MDgxNDA1NzgzNzY3N2JhZjgycC0xMDIxLAorICAgIDB4MS4wcC0xMDc0LCAweDEuZTY2NjY2NjY2NjY2NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDMzMgorICAgIDB4MS4wMDAwMDAwMDAwMDY1MTU5MWY5ZGQ1Y2RiMTEwZjZlM3AtMzg0LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC03LCAweDEuZmZmZmZmZmZmZmZmZnA1CisgIH0sCisgIHsgLy8gRW50cnkgMzMzCisgICAgMHgxLmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwM2VmZmZmZmZmcC0zODUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTcsIDB4MS4wcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzQKKyAgICAweDEuZmZmZmZmZmZmZmRhYmE5YjgxODhhYTc0Mjg0MTFkZDVwLTM4NSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNywgMHgxLjAwMDAwMDAwMDAwMDFwNgorICB9LAorICB7IC8vIEVudHJ5IDMzNQorICAgIDB4MS4wMDAwMDAwMDAwMDg1MTU5MWY5ZGQ1ZGM0YmMzMzYxZnAtMzg0LAorICAgIDB4MS4wcC02LCAweDEuZmZmZmZmZmZmZmZmZnA1CisgIH0sCisgIHsgLy8gRW50cnkgMzM2CisgICAgMHgxLnAtMzg0LAorICAgIDB4MS4wcC02LCAweDEuMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMzM3CisgICAgMHgxLmZmZmZmZmZmZmZkZWJhOWI4MTg4YWEyZGVkNzgyMGU3cC0zODUsCisgICAgMHgxLjBwLTYsIDB4MS4wMDAwMDAwMDAwMDAxcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzgKKyAgICAweDEuMDAwMDAwMDAwMDBjNTE1OTFmOWRkNjA1NTEyN2I0OTZwLTM4NCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNiwgMHgxLmZmZmZmZmZmZmZmZmZwNQorICB9LAorICB7IC8vIEVudHJ5IDMzOQorICAgIDB4MS4wMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDdlMHAtMzg0LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC02LCAweDEuMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMzQwCisgICAgMHgxLmZmZmZmZmZmZmZlNmJhOWI4MTg4YTliOTE3ZTYyNzA5cC0zODUsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTYsIDB4MS4wMDAwMDAwMDAwMDAxcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDEKKyAgICAweDEuMDAwMDAwMDAwMDAyNzczYTc3ZDcxOTEwNmU5Mzk1ODJwLTE2MCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNiwgMHgxLmZmZmZmZmZmZmZmZmZwNAorICB9LAorICB7IC8vIEVudHJ5IDM0MgorICAgIDB4MS5mZmZmZmZmZmZmZmUwMDAwMDAwMDAwMDBmN2ZmZmZmZnAtMTYxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC02LCAweDEuMHA1CisgIH0sCisgIHsgLy8gRW50cnkgMzQzCisgICAgMHgxLmZmZmZmZmZmZmZmMDIzMTYyMGEzOWMwOTNmMTZmOGNlcC0xNjEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTYsIDB4MS4wMDAwMDAwMDAwMDAxcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDQKKyAgICAweDEuMDAwMDAwMDAwMDAzNzczYTc3ZDcxOTEzNjFjZTBkNWFwLTE2MCwKKyAgICAweDEuMHAtNSwgMHgxLmZmZmZmZmZmZmZmZmZwNAorICB9LAorICB7IC8vIEVudHJ5IDM0NQorICAgIDB4MS5wLTE2MCwKKyAgICAweDEuMHAtNSwgMHgxLjBwNQorICB9LAorICB7IC8vIEVudHJ5IDM0NgorICAgIDB4MS5mZmZmZmZmZmZmZjIyMzE2MjBhMzliZmE4YTJkMTk3MnAtMTYxLAorICAgIDB4MS4wcC01LCAweDEuMDAwMDAwMDAwMDAwMXA1CisgIH0sCisgIHsgLy8gRW50cnkgMzQ3CisgICAgMHgxLjAwMDAwMDAwMDAwNTc3M2E3N2Q3MTkxYzMwNDJmZDA4cC0xNjAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTUsIDB4MS5mZmZmZmZmZmZmZmZmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDgKKyAgICAweDEuMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAxZjBwLTE2MCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNSwgMHgxLjBwNQorICB9LAorICB7IC8vIEVudHJ5IDM0OQorICAgIDB4MS5mZmZmZmZmZmZmZjYyMzE2MjBhMzliZTJmMDU5NWFiOXAtMTYxLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC01LCAweDEuMDAwMDAwMDAwMDAwMXA1CisgIH0sCisgIHsgLy8gRW50cnkgMzUwCisgICAgMHgxLjAwMDAwMDAwMDAwMGUyZTQyZmVmYTM5ZjU5ZTM2YmNicC02NCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNSwgMHgxLmZmZmZmZmZmZmZmZmZwMworICB9LAorICB7IC8vIEVudHJ5IDM1MQorICAgIDB4MS5mZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAzYmZmZmZmZnAtNjUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTUsIDB4MS4wcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTIKKyAgICAweDEuZmZmZmZmZmZmZmY5NzQ2ZjQwNDE3MThlZDQ1OTkwYTJwLTY1LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC01LCAweDEuMDAwMDAwMDAwMDAwMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMzUzCisgICAgMHgxLjAwMDAwMDAwMDAwMTYyZTQyZmVmYTM5ZmU5NTU4M2MzcC02NCwKKyAgICAweDEuMHAtNCwgMHgxLmZmZmZmZmZmZmZmZmZwMworICB9LAorICB7IC8vIEVudHJ5IDM1NAorICAgIDB4MS5wLTY0LAorICAgIDB4MS4wcC00LCAweDEuMHA0CisgIH0sCisgIHsgLy8gRW50cnkgMzU1CisgICAgMHgxLmZmZmZmZmZmZmZmYTc0NmY0MDQxNzE4YmUyOTEzMGMzcC02NSwKKyAgICAweDEuMHAtNCwgMHgxLjAwMDAwMDAwMDAwMDFwNAorICB9LAorICB7IC8vIEVudHJ5IDM1NgorICAgIDB4MS4wMDAwMDAwMDAwMDI2MmU0MmZlZmEzYTFiYzM5YjNiM3AtNjQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTQsIDB4MS5mZmZmZmZmZmZmZmZmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTcKKyAgICAweDEuMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwNzhwLTY0LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC00LCAweDEuMHA0CisgIH0sCisgIHsgLy8gRW50cnkgMzU4CisgICAgMHgxLmZmZmZmZmZmZmZmYzc0NmY0MDQxNzE4NzY3MDA3MTA0cC02NSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtNCwgMHgxLjAwMDAwMDAwMDAwMDFwNAorICB9LAorICB7IC8vIEVudHJ5IDM1OQorICAgIDB4MS4wMDAwMDAwMDAwMDA0NTE1OTFmOWRkNWJhNTkzMjhhYnAtMjQsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTQsIDB4MS5mZmZmZmZmZmZmZmZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjAKKyAgICAweDEuZmZmZmZmZmZmZmZmODAwMDAwMDAwMDAwMGRmZmZmZmZwLTI1LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC00LCAweDEuMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMzYxCisgICAgMHgxLmZmZmZmZmZmZmZmZDZiYTliODE4OGE5MzMyY2ZlMjRhcC0yNSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNCwgMHgxLjAwMDAwMDAwMDAwMDFwMworICB9LAorICB7IC8vIEVudHJ5IDM2MgorICAgIDB4MS4wMDAwMDAwMDAwMDA4NTE1OTFmOWRkNWJiZGQ4OGQyYXAtMjQsCisgICAgMHgxLjBwLTMsIDB4MS5mZmZmZmZmZmZmZmZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjMKKyAgICAweDEucC0yNCwKKyAgICAweDEuMHAtMywgMHgxLjBwMworICB9LAorICB7IC8vIEVudHJ5IDM2NAorICAgIDB4MS5mZmZmZmZmZmZmZmRlYmE5YjgxODhhOTJhN2JhNTA1MHAtMjUsCisgICAgMHgxLjBwLTMsIDB4MS4wMDAwMDAwMDAwMDAxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjUKKyAgICAweDEuMDAwMDAwMDAwMDAxMDUxNTkxZjlkZDVjMTg2MzU2MjdwLTI0LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0zLCAweDEuZmZmZmZmZmZmZmZmZnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzY2CisgICAgMHgxLjAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDFjcC0yNCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMywgMHgxLjBwMworICB9LAorICB7IC8vIEVudHJ5IDM2NworICAgIDB4MS5mZmZmZmZmZmZmZmVlYmE5YjgxODhhOTFlNThmMmM1Y3AtMjUsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMsIDB4MS4wMDAwMDAwMDAwMDAxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjgKKyAgICAweDEuMDAwMDAwMDAwMDAwMGM1Yzg1ZmRmNDczZGYzNzU5NzlwLTgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMsIDB4MS5mZmZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjkKKyAgICAweDEuZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDJmZmZmZmZwLTksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMsIDB4MS4wcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzAKKyAgICAweDEuZmZmZmZmZmZmZmZmMGU4ZGU4MDgyZTMwYmE0MjM3MWFwLTksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMsIDB4MS4wMDAwMDAwMDAwMDAxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzEKKyAgICAweDEuMDAwMDAwMDAwMDAwMmM1Yzg1ZmRmNDczZTI0MmVhMzhwLTgsCisgICAgMHgxLjBwLTIsIDB4MS5mZmZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzIKKyAgICAweDEucC04LAorICAgIDB4MS4wcC0yLCAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzczCisgICAgMHgxLmZmZmZmZmZmZmZmZjRlOGRlODA4MmUzMGE1MTNmNDFicC05LAorICAgIDB4MS4wcC0yLCAweDEuMDAwMDAwMDAwMDAwMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzc0CisgICAgMHgxLjAwMDAwMDAwMDAwMDZjNWM4NWZkZjQ3M2YxNWEwYmI4cC04LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0yLCAweDEuZmZmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMzc1CisgICAgMHgxLjAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDA2cC04LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0yLCAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzc2CisgICAgMHgxLmZmZmZmZmZmZmZmZmNlOGRlODA4MmUzMDhjYjc2ZTFkcC05LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0yLCAweDEuMDAwMDAwMDAwMDAwMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzc3CisgICAgMHgxLmZmZmZmZmZmZmZmZmY2MmU0MmZlZmEzOWVmY2Q5NDA0cC0zLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0yLCAweDEuZmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzc4CisgICAgMHgxLmZmZmZmZmZmZmZmZmUwMDAwMDAwMDAwMDAwODBwLTMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTIsIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzkKKyAgICAweDEuZmZmZmZmZmZmZmZmYjNhMzdhMDIwYjhjMjRjNmQxYzZwLTMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTIsIDB4MS4wMDAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODAKKyAgICAweDEuMDAwMDAwMDAwMDAwMGIxNzIxN2Y3ZDFjZjdkODNjMWFwLTIsCisgICAgMHgxLjBwLTEsIDB4MS5mZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODEKKyAgICAweDEucC0yLAorICAgIDB4MS4wcC0xLCAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzgyCisgICAgMHgxLmZmZmZmZmZmZmZmZmQzYTM3YTAyMGI4YzIzODEwOTY3cC0zLAorICAgIDB4MS4wcC0xLCAweDEuMDAwMDAwMDAwMDAwMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMzgzCisgICAgMHgxLjAwMDAwMDAwMDAwMDJiMTcyMTdmN2QxY2Y5M2IyMDRhcC0yLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xLCAweDEuZmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzg0CisgICAgMHgxLjAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAxcC0yLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xLCAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzg1CisgICAgMHgxLjAwMDAwMDAwMDAwMDA5ZDFiZDAxMDVjNjExZmFiYzUzcC0yLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xLCAweDEuMDAwMDAwMDAwMDAwMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMzg2CisgICAgMHgxLmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwN2ZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLCAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM4NworICAgIDB4MS5mZmZmZmZmZmZmZmZmMHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDM4OAorICAgIDB4MS5mZmZmZmZmZmZmZmZlZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDM4OQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5MAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzkxCisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTIKKyAgICAweDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmY3ZmZmZmZwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwLCAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5MworICAgIDB4MS4wMDAwMDAwMDAwMDAxMHAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTQKKyAgICAweDEuMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDFwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwLCAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzk1CisgICAgMHgxLjZhMDllNjY3ZjNiY2JmNzRjMjk3MDQ0MGQ2ZDJhODMxcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMCwgMHgxLmZmZmZmZmZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTYKKyAgICAweDEuNmEwOWU2NjdmM2JjYzM2MDhiNjE3Mzk3Zjc2NjBhMjNwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM5NworICAgIDB4MS42YTA5ZTY2N2YzYmNjYjM4MWNmNjUyNDYzOGFkNmI0M3AwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAsIDB4MS4wMDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzk4CisgICAgMHgxLjZhMDllNjY3ZjNiY2M1MWNlYTMwYTQwZmM5YzUyYWVjcDAsCisgICAgMHgxLjBwMSwgMHgxLmZmZmZmZmZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTkKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwMCwKKyAgICAweDEuMHAxLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwMAorICAgIDB4MS42YTA5ZTY2N2YzYmNkMGUwNDQ4ZmYyMTUyYzU2YmYxZnAwLAorICAgIDB4MS4wcDEsIDB4MS4wMDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDAxCisgICAgMHgxLjZhMDllNjY3ZjNiY2QwNmQzOTYzZTNhZGFmNjY0ZTg4cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMSwgMHgxLmZmZmZmZmZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDIKKyAgICAweDEuNmEwOWU2NjdmM2JjZDQ1OTAyMmU1MzA0ZDBiMDgxOTlwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwMworICAgIDB4MS42YTA5ZTY2N2YzYmNkYzMwOTNjMzMxYjMxMzY1ODRmOXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEsIDB4MS4wMDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDA0CisgICAgMHgxLjZhMDllNjY3ZjNiY2MyNDhkNjYzZDQyODUwNDkxNTdicDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMSwgMHgxLmZmZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDUKKyAgICAweDEuNmEwOWU2NjdmM2JjYzYzNDlmMmU0MzdmNzBmYWVmOWNwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxLCAweDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQwNgorICAgIDB4MS42YTA5ZTY2N2YzYmNjZTBjMzBjMzIyMmRiMjdmNDExZHAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEsIDB4MS4wMDAwMDAwMDAwMDAxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDA3CisgICAgMHgxLjZhMDllNjY3ZjNiY2M1MWNlYTMwYTQwZmM5YzUyYWVjcDAsCisgICAgMHgxLjBwMiwgMHgxLmZmZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDgKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwMCwKKyAgICAweDEuMHAyLCAweDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQwOQorICAgIDB4MS42YTA5ZTY2N2YzYmNkMGUwNDQ4ZmYyMTUyYzU2YmYxZnAwLAorICAgIDB4MS4wcDIsIDB4MS4wMDAwMDAwMDAwMDAxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDEwCisgICAgMHgxLjZhMDllNjY3ZjNiY2NhYzUxMWNhNDNkZWJjOGE2YzZicDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMiwgMHgxLmZmZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTEKKyAgICAweDEuNmEwOWU2NjdmM2JjY2ViMGRhOTRiMzM1ZGQ5N2FmMWNwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAyLCAweDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQxMgorICAgIDB4MS42YTA5ZTY2N2YzYmNkNjg4NmMyOTkxZTQxZmQyZDFiZHAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDIsIDB4MS4wMDAwMDAwMDAwMDAxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDEzCisgICAgMHgxLjRiZmRhZDUzNjJhMjZkZDVlMGJkMDI1OTRiNTgxMmNicDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMiwgMHgxLmZmZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTQKKyAgICAweDEuNGJmZGFkNTM2MmEyNzA4ODNiY2RhYjYxOGJhYTgyMDRwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAyLCAweDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDQxNQorICAgIDB4MS40YmZkYWQ1MzYyYTI3NWVjZjFlZWZkNzIwYzYwMzMyMXAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDIsIDB4MS4wMDAwMDAwMDAwMDAxcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDE2CisgICAgMHgxLjRiZmRhZDUzNjJhMjZmMjFkZTZhNTViYmVkYzE1ZWI0cDAsCisgICAgMHgxLjBwMywgMHgxLmZmZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTcKKyAgICAweDEuNGJmZGFkNTM2MmEyNzFkNDM5N2FmZWM0MmUyMGUwMzZwMCwKKyAgICAweDEuMHAzLCAweDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDQxOAorICAgIDB4MS40YmZkYWQ1MzYyYTI3NzM4ZWY5YzUwZDRhZWYwYjVlNHAwLAorICAgIDB4MS4wcDMsIDB4MS4wMDAwMDAwMDAwMDAxcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDE5CisgICAgMHgxLjRiZmRhZDUzNjJhMjcxYjlkOWM0ZmM4MTMyNzhiYWI2cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMywgMHgxLmZmZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjAKKyAgICAweDEuNGJmZGFkNTM2MmEyNzQ2YzM0ZDVhNTg5NzJmMjYwYzlwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAzLCAweDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDQyMQorICAgIDB4MS40YmZkYWQ1MzYyYTI3OWQwZWFmNmY3OTlmM2Y2N2Y5OXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDMsIDB4MS4wMDAwMDAwMDAwMDAxcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDIyCisgICAgMHgxLjMwNmZlMGEzMWI3MTUwYTA0YjU4YWQ4MDI3Y2ViMDUwcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMywgMHgxLmZmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjMKKyAgICAweDEuMzA2ZmUwYTMxYjcxNTI0NjU1NjlmNGEyYTNkYTQzZDRwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAzLCAweDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDQyNAorICAgIDB4MS4zMDZmZTBhMzFiNzE1NTkyNjk4YzgyZTc5YmY4NDYxM3AwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDMsIDB4MS4wMDAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDI1CisgICAgMHgxLjMwNmZlMGEzMWI3MTUxMzg4MzQ4ZmYwZGUwNzRjNWEzcDAsCisgICAgMHgxLjBwNCwgMHgxLmZmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjYKKyAgICAweDEuMzA2ZmUwYTMxYjcxNTJkZThkNWE0NjMwNWM4NWVkZWNwMCwKKyAgICAweDEuMHA0LCAweDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDQyNworICAgIDB4MS4zMDZmZTBhMzFiNzE1NjJhYTE3Y2Q0NzU1NGFmMTliNHAwLAorICAgIDB4MS4wcDQsIDB4MS4wMDAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDI4CisgICAgMHgxLjMwNmZlMGEzMWI3MTUyNjhmMzI5YTIyOTUxYjM4ZjYxcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNCwgMHgxLmZmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjkKKyAgICAweDEuMzA2ZmUwYTMxYjcxNTQwZWZkM2FlOTRiY2RjZmUxMzNwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA0LCAweDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDQzMAorICAgIDB4MS4zMDZmZTBhMzFiNzE1NzViMTE1ZDc3OTBjNjBmNjAwZHAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDQsIDB4MS4wMDAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDMxCisgICAgMHgxLjFkNDg3MzE2OGI5YWE2NDFkYjk3YjQ5MWEzNzkzNmFlcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwNCwgMHgxLmZmZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzIKKyAgICAweDEuMWQ0ODczMTY4YjlhYTczOTA5NjM2MmY2Mjg1Y2I1MTZwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnA0LCAweDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQzMworICAgIDB4MS4xZDQ4NzMxNjhiOWFhOTI3NjRmYWJmYmYzMjI2MzQ2MnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDQsIDB4MS4wMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDM0CisgICAgMHgxLjFkNDg3MzE2OGI5YWE2ODkyZGI0N2EzNDhhMjFiMmM3cDAsCisgICAgMHgxLjBwNSwgMHgxLmZmZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzUKKyAgICAweDEuMWQ0ODczMTY4YjlhYTc4MDViODAyODk5MGYwN2E5OGJwMCwKKyAgICAweDEuMHA1LCAweDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQzNgorICAgIDB4MS4xZDQ4NzMxNjhiOWFhOTZlYjcxNzg1NjIxOGQ2MTk5MHAwLAorICAgIDB4MS4wcDUsIDB4MS4wMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDM3CisgICAgMHgxLjFkNDg3MzE2OGI5YWE3MTdkMWVlMDU3YTU3NmMzMGM0cDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNSwgMHgxLmZmZmZmZmZmZmZmZmZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzgKKyAgICAweDEuMWQ0ODczMTY4YjlhYTgwZWZmYjliM2RlZGM1NzE4NDBwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA1LCAweDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQzOQorICAgIDB4MS4xZDQ4NzMxNjhiOWFhOWZkNWI1MTEwYTdlNjJmNjliNnAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDUsIDB4MS4wMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDQwCisgICAgMHgxLjExMzAxZDAxMjViNTA5OWU5MGVhNDNkNjU5OWVlMmJicDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwNSwgMHgxLmZmZmZmZmZmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDEKKyAgICAweDEuMTEzMDFkMDEyNWI1MGEyYzk1ZWUwZWI0N2FlYjFhNzhwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnA1LCAweDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDQ0MgorICAgIDB4MS4xMTMwMWQwMTI1YjUwYjQ4OWZmNWE0NzBiZDg0Njc3MXAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDUsIDB4MS4wMDAwMDAwMDAwMDAxcC02CisgIH0sCisgIHsgLy8gRW50cnkgNDQzCisgICAgMHgxLjExMzAxZDAxMjViNTA5YzBiNmVkZTNmYjEwM2Y5MDE3cDAsCisgICAgMHgxLjBwNiwgMHgxLmZmZmZmZmZmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDQKKyAgICAweDEuMTEzMDFkMDEyNWI1MGE0ZWJiZjFhZWQ5MzE4Y2VhYzVwMCwKKyAgICAweDEuMHA2LCAweDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDQ0NQorICAgIDB4MS4xMTMwMWQwMTI1YjUwYjZhYzVmOTQ0OTU3NDI4N2Q5ZnAwLAorICAgIDB4MS4wcDYsIDB4MS4wMDAwMDAwMDAwMDAxcC02CisgIH0sCisgIHsgLy8gRW50cnkgNDQ2CisgICAgMHgxLjExMzAxZDAxMjViNTBhMDUwMmY1MjQ0NDdkN2RjNDBlcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNiwgMHgxLmZmZmZmZmZmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDcKKyAgICAweDEuMTEzMDFkMDEyNWI1MGE5MzA3ZjhlZjIyOWVjZDY0OWVwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA2LCAweDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDQ0OAorICAgIDB4MS4xMTMwMWQwMTI1YjUwYmFmMTIwMDg0ZGVlMTZkODMzYnAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDYsIDB4MS4wMDAwMDAwMDAwMDAxcC02CisgIH0sCisgIHsgLy8gRW50cnkgNDQ5CisgICAgMHgxLmZmZmZmZmZmZmYyNzQ2ZjQwNDE3NDYyNTVjOTllOTBicDEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMCwgMHgxLmZmZmZmZmZmZmZmZmVwOQorICB9LAorICB7IC8vIEVudHJ5IDQ1MAorICAgIDB4MS5mZmZmZmZmZmZmNTNhMzdhMDIwYmE5MjRiMjZjZmM1OXAxMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDAsIDB4MS5mZmZmZmZmZmZmZmZmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTEKKyAgICAweDEuZmZmZmZmZmZmZjgwMDAwMDAwMDAwZmZiZmZmZmZmZmVwMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAwLCAweDEuMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ1MgorICAgIDB4MS5mZmZmZmZmZmZmZDhiOTBiZmJlOGU5MzI4MjY1ZDg1MXAxMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDAsIDB4MS4wMDAwMDAwMDAwMDAxcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDUzCisgICAgSFVHRV9WQUwsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMCwgMHgxLjAwMDAwMDAwMDAwMDJwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTQKKyAgICAweDEuZmZmZmZmZmZmZjY3NDZmNDA0MTcyZjBkM2IxYTZiZjJwMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwLCAweDEuZmZmZmZmZmZmZmZmZXA5CisgIH0sCisgIHsgLy8gRW50cnkgNDU1CisgICAgMHgxLmZmZmZmZmZmZmY5M2EzN2EwMjBiOTc5YTIxYWQzZGNkcDEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMCwgMHgxLmZmZmZmZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDQ1NgorICAgIDB4MS5mZmZmZmZmZmZmYzAwMDAwMDAwMDAzZmVmZmZmZmZmZnAxMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAsIDB4MS4wcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDU3CisgICAgSFVHRV9WQUwsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMCwgMHgxLjAwMDAwMDAwMDAwMDFwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTgKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwLCAweDEuMDAwMDAwMDAwMDAwMnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ1OQorICAgIDB4MS5mZmZmZmZmZmZmYTc0NmY0MDQxNzFmZjMxOTlhZWVkN3AxMDIzLAorICAgIDB4MS4wcDEsIDB4MS5mZmZmZmZmZmZmZmZlcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjAKKyAgICAweDEuZmZmZmZmZmZmZmQzYTM3YTAyMGI4ZTBkOTBlZDdmM2ZwMTAyMywKKyAgICAweDEuMHAxLCAweDEuZmZmZmZmZmZmZmZmZnA5CisgIH0sCisgIHsgLy8gRW50cnkgNDYxCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjBwMSwgMHgxLjBwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjIKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMHAxLCAweDEuMDAwMDAwMDAwMDAwMXAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ2MworICAgIEhVR0VfVkFMLAorICAgIDB4MS4wcDEsIDB4MS4wMDAwMDAwMDAwMDAycDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDY0CisgICAgSFVHRV9WQUwsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMSwgMHgxLmZmZmZmZmZmZmZmZmVwOQorICB9LAorICB7IC8vIEVudHJ5IDQ2NQorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEsIDB4MS5mZmZmZmZmZmZmZmZmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjYKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxLCAweDEuMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ2NworICAgIEhVR0VfVkFMLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEsIDB4MS4wMDAwMDAwMDAwMDAxcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDY4CisgICAgSFVHRV9WQUwsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMSwgMHgxLjAwMDAwMDAwMDAwMDJwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjkKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMnAxLCAweDEuZmZmZmZmZmZmZmZmZXA5CisgIH0sCisgIHsgLy8gRW50cnkgNDcwCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjAwMDAwMDAwMDAwMDJwMSwgMHgxLmZmZmZmZmZmZmZmZmZwOQorICB9LAorICB7IC8vIEVudHJ5IDQ3MQorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wMDAwMDAwMDAwMDAycDEsIDB4MS4wcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDcyCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjAwMDAwMDAwMDAwMDJwMSwgMHgxLjAwMDAwMDAwMDAwMDFwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzMKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMnAxLCAweDEuMDAwMDAwMDAwMDAwMnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NAorICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAwLCAtMHgxLjBjYzAwMDAwMDAwMDJwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzUKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMCwgLTB4MS4wY2MwMDAwMDAwMDAxcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDc2CisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDAsIC0weDEuMGNjcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDc3CisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDAsIC0weDEuMGNiZmZmZmZmZmZmZnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ3OAorICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAwLCAtMHgxLjBjYmZmZmZmZmZmZmVwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzkKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMCwgLTB4MS4wY2MwMDAwMDAwMDAycDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDgwCisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDAsIC0weDEuMGNjMDAwMDAwMDAwMXAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ4MQorICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwLCAtMHgxLjBjY3AxMAorICB9LAorICB7IC8vIEVudHJ5IDQ4MgorICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwLCAtMHgxLjBjYmZmZmZmZmZmZmZwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODMKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMCwgLTB4MS4wY2JmZmZmZmZmZmZlcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDg0CisgICAgMC4wLAorICAgIDB4MS4wcDEsIC0weDEuMGNjMDAwMDAwMDAwMnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ4NQorICAgIDAuMCwKKyAgICAweDEuMHAxLCAtMHgxLjBjYzAwMDAwMDAwMDFwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODYKKyAgICAwLjAsCisgICAgMHgxLjBwMSwgLTB4MS4wY2NwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODcKKyAgICAwLjAsCisgICAgMHgxLjBwMSwgLTB4MS4wY2JmZmZmZmZmZmZmcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDg4CisgICAgMC4wLAorICAgIDB4MS4wcDEsIC0weDEuMGNiZmZmZmZmZmZmZXAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ4OQorICAgIDAuMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxLCAtMHgxLjBjYzAwMDAwMDAwMDJwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTAKKyAgICAwLjAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMSwgLTB4MS4wY2MwMDAwMDAwMDAxcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDkxCisgICAgMC4wLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEsIC0weDEuMGNjcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDkyCisgICAgMC4wLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDEsIC0weDEuMGNiZmZmZmZmZmZmZnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ5MworICAgIDAuMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxLCAtMHgxLjBjYmZmZmZmZmZmZmVwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTQKKyAgICAwLjAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDJwMSwgLTB4MS4wY2MwMDAwMDAwMDAycDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDk1CisgICAgMC4wLAorICAgIDB4MS4wMDAwMDAwMDAwMDAycDEsIC0weDEuMGNjMDAwMDAwMDAwMXAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ5NgorICAgIDAuMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMnAxLCAtMHgxLjBjY3AxMAorICB9LAorICB7IC8vIEVudHJ5IDQ5NworICAgIDAuMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMnAxLCAtMHgxLjBjYmZmZmZmZmZmZmZwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTgKKyAgICAwLjAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDJwMSwgLTB4MS4wY2JmZmZmZmZmZmZlcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDk5CisgICAgMHgxLmE4MmUxNDY5MDI1MmU1ZWEyY2ZhMzBiMjVlOTQ3Y2VkcC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzBwLTIsIDB4MS5jMzBjMzBjMzBjMmZlcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDAKKyAgICAweDEuYTgyZTE0NjkwMjNlOGVhNTY3ODgzZmNkMjc0MmU0YjdwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3MHAtMiwgMHgxLmMzMGMzMGMzMGMyZmZwOAorICB9LAorICB7IC8vIEVudHJ5IDUwMQorICAgIDB4MS5hODJlMTQ2OTAyMmEzNzYwYTIxNjRmZTFhNGNkM2FhMnAtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjcwcC0yLCAweDEuYzMwYzMwYzMwYzNwOAorICB9LAorICB7IC8vIEVudHJ5IDUwMgorICAgIDB4MS5hODJlMTQ2OTAyMTVlMDFiZGNhNDYwZWZkNzMzN2VhZXAtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjcwcC0yLCAweDEuYzMwYzMwYzMwYzMwMXA4CisgIH0sCisgIHsgLy8gRW50cnkgNTAzCisgICAgMHgxLmE4MmUxNDY5MDIwMTg4ZDcxNzMyNzJmN2JlNzViMGRjcC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzBwLTIsIDB4MS5jMzBjMzBjMzBjMzAycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDQKKyAgICAweDEuYTgyZTE0NjkwMjZjMGNiZmU2MTM1YjM4ZTc2ZDNhNDdwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3MXAtMiwgMHgxLmMzMGMzMGMzMGMyZmVwOAorICB9LAorICB7IC8vIEVudHJ5IDUwNQorICAgIDB4MS5hODJlMTQ2OTAyNTdiNTdiMjBhMTY5MWZkMGQ4NTNkNnAtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjcxcC0yLCAweDEuYzMwYzMwYzMwYzJmZnA4CisgIH0sCisgIHsgLy8gRW50cnkgNTA2CisgICAgMHgxLmE4MmUxNDY5MDI0MzVlMzY1YjJmNzgwMDZmMWY1Yjg3cC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzFwLTIsIDB4MS5jMzBjMzBjMzBjM3A4CisgIH0sCisgIHsgLy8gRW50cnkgNTA3CisgICAgMHgxLmE4MmUxNDY5MDIyZjA2ZjE5NWJkODdkYWMyNDI1MTU5cC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzFwLTIsIDB4MS5jMzBjMzBjMzBjMzAxcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDgKKyAgICAweDEuYTgyZTE0NjkwMjFhYWZhY2QwNGI5OGFlY2E0MTM1NGRwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3MXAtMiwgMHgxLmMzMGMzMGMzMGMzMDJwOAorICB9LAorICB7IC8vIEVudHJ5IDUwOQorICAgIDB4MS5hODJlMTQ2OTAyODUzMzk1OWYyYzg3M2M2MWNhZmIxOHAtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjcycC0yLCAweDEuYzMwYzMwYzMwYzJmZXA4CisgIH0sCisgIHsgLy8gRW50cnkgNTEwCisgICAgMHgxLmE4MmUxNDY5MDI3MGRjNTBkOWJhOTNlZjZiZjJjNjZkcC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzJwLTIsIDB4MS5jMzBjMzBjMzBjMmZmcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTEKKyAgICAweDEuYTgyZTE0NjkwMjVjODUwYzE0NDhhMTljMmFmNjdmZTRwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3MnAtMiwgMHgxLmMzMGMzMGMzMGMzcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTIKKyAgICAweDEuYTgyZTE0NjkwMjQ4MmRjNzRlZDZiMDQyOWVkNjI3N2NwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3MnAtMiwgMHgxLmMzMGMzMGMzMGMzMDFwOAorICB9LAorICB7IC8vIEVudHJ5IDUxMworICAgIDB4MS5hODJlMTQ2OTAyMzNkNjgyODk2NGJmZTJjNzkxYmQzNXAtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjcycC0yLCAweDEuYzMwYzMwYzMwYzMwMnA4CisgIH0sCisgIHsgLy8gRW50cnkgNTE0CisgICAgMHgxLmE4MmUxNDY5MDI5ZTVhNmI1ODQ1YjRiY2NkYWRiZjYycC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzNwLTIsIDB4MS5jMzBjMzBjMzBjMmZlcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTUKKyAgICAweDEuYTgyZTE0NjkwMjhhMDMyNjkyZDNjMDNiZjg5MjNjN2NwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3M3AtMiwgMHgxLmMzMGMzMGMzMGMyZmZwOAorICB9LAorICB7IC8vIEVudHJ5IDUxNgorICAgIDB4MS5hODJlMTQ2OTAyNzVhYmUxY2Q2MWNjYjRkODUyYTdiOXAtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjczcC0yLCAweDEuYzMwYzMwYzMwYzNwOAorICB9LAorICB7IC8vIEVudHJ5IDUxNworICAgIDB4MS5hODJlMTQ2OTAyNjE1NDlkMDdlZmRhMjc2Y2VmMDExNnAtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjczcC0yLCAweDEuYzMwYzMwYzMwYzMwMXA4CisgIH0sCisgIHsgLy8gRW50cnkgNTE4CisgICAgMHgxLmE4MmUxNDY5MDI0Y2ZkNTg0MjdkZTg5M2I2Njc0ODk1cC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzNwLTIsIDB4MS5jMzBjMzBjMzBjMzAycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTkKKyAgICAweDEuYTgyZTE0NjkwMmI3ODE0MTExNWVlM2JhMmIxNTg3MjNwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3NHAtMiwgMHgxLmMzMGMzMGMzMGMyZmVwOAorICB9LAorICB7IC8vIEVudHJ5IDUyMAorICAgIDB4MS5hODJlMTQ2OTAyYTMyOWZjNGJlY2VlMDU3NmI2YjYwM3AtNTAwLAorICAgIDB4MS5kYjZkYjZkYjZkYjc0cC0yLCAweDEuYzMwYzMwYzMwYzJmZnA4CisgIH0sCisgIHsgLy8gRW50cnkgNTIxCisgICAgMHgxLmE4MmUxNDY5MDI4ZWQyYjc4NjdhZjk0YTc3MzNkMzA1cC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzRwLTIsIDB4MS5jMzBjMzBjMzBjM3A4CisgIH0sCisgIHsgLy8gRW50cnkgNTIyCisgICAgMHgxLmE4MmUxNDY5MDI3YTdiNzJjMTA5MDU4OTJjOGNkZTI5cC01MDAsCisgICAgMHgxLmRiNmRiNmRiNmRiNzRwLTIsIDB4MS5jMzBjMzBjMzBjMzAxcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjMKKyAgICAweDEuYTgyZTE0NjkwMjY2MjQyZGZiOTcxMmMxOTZjMWQ3NmRwLTUwMCwKKyAgICAweDEuZGI2ZGI2ZGI2ZGI3NHAtMiwgMHgxLmMzMGMzMGMzMGMzMDJwOAorICB9LAorICB7IC8vIEVudHJ5IDUyNAorICAgIC0weDEuZmZmZmZmZmZmZmZmZTAwMDAwMDAwMDAwMDFmZmZmZmZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTI1CisgICAgLTB4MS5wMCwKKyAgICAtMHgxLjBwMCwgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjYKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwNDBwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTI3CisgICAgSFVHRV9WQUwsCisgICAgMHgxLjBwMSwgMHgxLjBwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjgKKyAgICBIVUdFX1ZBTCwKKyAgICAweDEuMHAyLCAweDEuMHA5CisgIH0sCisgIHsgLy8gRW50cnkgNTI5CisgICAgMHgxLmZmZmZmZmZmZmZlYzVjODVmZGY0NzQzZmQ2MTJiMjhhcC0xMDI1LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0yLCAweDEuZmZmZmZmZmZmZmZmZnA5CisgIH0sCisgIHsgLy8gRW50cnkgNTMwCisgICAgMHgxLmZmZmZmZmZmZmZjMDAwMDAwMDAwMDNmZWZmZmZmZmZmcC0xMDI1LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0yLCAweDEuMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDUzMQorICAgIDB4MS5mZmZmZmZmZmZmNjc0NmY0MDQxNzJmMDUzYjFhNmJmMnAtMTAyNSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMiwgMHgxLjAwMDAwMDAwMDAwMDFwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzIKKyAgICAweDEuMDAwMDAwMDAwMDE2MmU0MmZlZmEzYWU1MzM2OTM4OGNwLTEwMjQsCisgICAgMHgxLjBwLTEsIDB4MS5mZmZmZmZmZmZmZmZmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzMKKyAgICAweDEucC0xMDI0LAorICAgIDB4MS4wcC0xLCAweDEuMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDUzNAorICAgIDB4MS5mZmZmZmZmZmZmYTc0NmY0MDQxNzFmZjMxOTlhZWVkN3AtMTAyNSwKKyAgICAweDEuMHAtMSwgMHgxLjAwMDAwMDAwMDAwMDFwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzUKKyAgICAweDEuMDAwMDAwMDAwMDU2MmU0MmZlZmE0ODZjYzQyOGY3MWNwLTEwMjQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEsIDB4MS5mZmZmZmZmZmZmZmZmcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzYKKyAgICAweDEuMDAwMDAwMDAwMDQwMDAwMDAwMDAwN2ZlcC0xMDI0LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xLCAweDEuMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDUzNworICAgIDB4MS4wMDAwMDAwMDAwMTNhMzdhMDIwYjhjZTQ2YjRkZmE0ZXAtMTAyNCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMSwgMHgxLjAwMDAwMDAwMDAwMDFwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzgKKyAgICAweDEuMDAwMDAwMDAwMDc0NTE5YTU2MjM1MzNkZjhkY2QzNTNwLTEwNzQsCisgICAgMHgxLjBwLTEwNzQsIDB4MS5mZmZmZmZmZmZmZmZicC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTM5CisgICAgMHgxLjAwMDAwMDAwMDA1ZDBlMTUxMWI1ZDdmNzJjNjEzNjhhcC0xMDc0LAorICAgIDB4MS4wcC0xMDc0LCAweDEuZmZmZmZmZmZmZmZmY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDU0MAorICAgIDB4MS4wMDAwMDAwMDAwNDVjYThmY2Q0ODVlY2Q5M2E2ZWM5ZHAtMTA3NCwKKyAgICAweDEuMHAtMTA3NCwgMHgxLmZmZmZmZmZmZmZmZmRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDEKKyAgICAweDEuMDAwMDAwMDAwMDJlODcwYTg4ZGFlN2MxMmVhZGY1OGNwLTEwNzQsCisgICAgMHgxLjBwLTEwNzQsIDB4MS5mZmZmZmZmZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTQyCisgICAgMHgxLjAwMDAwMDAwMDAxNzQzODU0NDZkNzJkMWZkNzY1MTU4cC0xMDc0LAorICAgIDB4MS4wcC0xMDc0LCAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDU0MworICAgIDB4MS5wLTEwNzQsCisgICAgMHgxLjBwLTEwNzQsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDQKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQsIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDUKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQsIDB4MS4wMDAwMDAwMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDYKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQsIDB4MS4wMDAwMDAwMDAwMDAzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDcKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQsIDB4MS4wMDAwMDAwMDAwMDA0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDgKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQsIDB4MS4wMDAwMDAwMDAwMDA1cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDkKKyAgICAweDEuMDAwMDAwMDAwMDc0MzVlMDgyNjQ5YTY4ZjY0ZmUzMDZwLTEwNzMsCisgICAgMHgxLjBwLTEwNzMsIDB4MS5mZmZmZmZmZmZmZmZicC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTUwCisgICAgMHgxLjAwMDAwMDAwMDA1Y2Y3ZTZjZWI2ZGRiNTJlMWIwOTllcC0xMDczLAorICAgIDB4MS4wcC0xMDczLCAweDEuZmZmZmZmZmZmZmZmY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDU1MQorICAgIDB4MS4wMDAwMDAwMDAwNDViOWVkMWIwOTIzMWQ5N2M1NmM5ZHAtMTA3MywKKyAgICAweDEuMHAtMTA3MywgMHgxLmZmZmZmZmZmZmZmZmRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTIKKyAgICAweDEuMDAwMDAwMDAwMDJlN2JmMzY3NWI2YWEyMzM0ZjBjMDJwLTEwNzMsCisgICAgMHgxLjBwLTEwNzMsIDB4MS5mZmZmZmZmZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTUzCisgICAgMHgxLjAwMDAwMDAwMDAxNzNkZjliM2FkYjQ0MzAwYjdlN2NlcC0xMDczLAorICAgIDB4MS4wcC0xMDczLCAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDU1NAorICAgIDB4MS5wLTEwNzMsCisgICAgMHgxLjBwLTEwNzMsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTUKKyAgICAweDEuZmZmZmZmZmZmZmEzMDgxOTMxNDkzYjlkMjg1YmNiMmJwLTEwNzQsCisgICAgMHgxLjBwLTEwNzMsIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTYKKyAgICAweDEuZmZmZmZmZmZmZjQ2MTAzMjYyOTI4ODFiZGZiMTc5ODNwLTEwNzQsCisgICAgMHgxLjBwLTEwNzMsIDB4MS4wMDAwMDAwMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTcKKyAgICAweDEuZmZmZmZmZmZmZWU5MTg0YjkzZGJlNTdjMjYwMTBiMDRwLTEwNzQsCisgICAgMHgxLjBwLTEwNzMsIDB4MS4wMDAwMDAwMDAwMDAzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTgKKyAgICAweDEuZmZmZmZmZmZmZThjMjA2NGM1MjU1M2JkZmI0YTdmYWRwLTEwNzQsCisgICAgMHgxLjBwLTEwNzMsIDB4MS4wMDAwMDAwMDAwMDA0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTkKKyAgICAweDEuZmZmZmZmZmZmZTJmMjg3ZGY2NmVkMmUxNWY4ZGQ3N2FwLTEwNzQsCisgICAgMHgxLjBwLTEwNzMsIDB4MS4wMDAwMDAwMDAwMDA1cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjAKKyAgICAweDEuODAwMDAwMDAwMGFlMzg3Y2QxZThmM2YzOWZlMTU3ZjlwLTEwNzMsCisgICAgMHgxLjhwLTEwNzMsIDB4MS5mZmZmZmZmZmZmZmZicC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTYxCisgICAgMHgxLjgwMDAwMDAwMDA4YjYwNjNkYjIwYmNkNjdiNGY1YmE1cC0xMDczLAorICAgIDB4MS44cC0xMDczLCAweDEuZmZmZmZmZmZmZmZmY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDU2MgorICAgIDB4MS44MDAwMDAwMDAwNjg4ODRhZTQ1ODg4ZTJiZjZmZDRhZnAtMTA3MywKKyAgICAweDEuOHAtMTA3MywgMHgxLmZmZmZmZmZmZmZmZmRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjMKKyAgICAweDEuODAwMDAwMDAwMDQ1YjAzMWVkOTA1ODE4NmM0MmMzMTdwLTEwNzMsCisgICAgMHgxLjhwLTEwNzMsIDB4MS5mZmZmZmZmZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTY0CisgICAgMHgxLjgwMDAwMDAwMDAyMmQ4MThmNmM4MmE3NzgxYzgyNmRjcC0xMDczLAorICAgIDB4MS44cC0xMDczLCAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDU2NQorICAgIDB4MS44MHAtMTA3MywKKyAgICAweDEuOHAtMTA3MywgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDU2NgorICAgIDB4MS43ZmZmZmZmZmZmYmE0ZmNlMTI2ZmI0OGQzNjg3MTI1ZHAtMTA3MywKKyAgICAweDEuOHAtMTA3MywgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDU2NworICAgIDB4MS43ZmZmZmZmZmZmNzQ5ZjljMjRkZjc1YzAwZmQ3ZmEyZXAtMTA3MywKKyAgICAweDEuOHAtMTA3MywgMHgxLjAwMDAwMDAwMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDU2OAorICAgIDB4MS43ZmZmZmZmZmZmMmVlZjZhMzc0ZjQzOTg4YmYyYjc2ZXAtMTA3MywKKyAgICAweDEuOHAtMTA3MywgMHgxLjAwMDAwMDAwMDAwMDNwMAorICB9LAorICB7IC8vIEVudHJ5IDU2OQorICAgIDB4MS43ZmZmZmZmZmZlZTkzZjM4NDliZjFlMTZhYWQ3NGExZHAtMTA3MywKKyAgICAweDEuOHAtMTA3MywgMHgxLjAwMDAwMDAwMDAwMDRwMAorICB9LAorICB7IC8vIEVudHJ5IDU3MAorICAgIDB4MS43ZmZmZmZmZmZlYTM4ZjA2NWMyZjA1M2E2Yzg1YjIzN3AtMTA3MywKKyAgICAweDEuOHAtMTA3MywgMHgxLjAwMDAwMDAwMDAwMDVwMAorICB9LAorICB7IC8vIEVudHJ5IDU3MQorICAgIDB4MS4wMDAwMDBhMGNmNjVlYjE4MTdhNzA5NWQ5YTA0NDNhN3AwLAorICAgIDB4MS4wcC0yOSwgLTB4MS4wcC0yOQorICB9LAorICB7IC8vIEVudHJ5IDU3MgorICAgIDB4MS5mZmZmZmY1ZjMwOWE2MGFhZDVjMjMwOWY4MWY5MGRlZnAtMSwKKyAgICAweDEuMHAtMjksIDB4MS4wcC0zMAorICB9LAorICB7IC8vIEVudHJ5IDU3MworICAgIDB4MS5mZmZmZmQ5ZTA3Y2YwNzc2N2E1NWFmYmU5YWNhZTkzZXAtMSwKKyAgICAweDEuMHA1NSwgLTB4MS4wcC0yOQorICB9LAorICB7IC8vIEVudHJ5IDU3NAorICAgIDB4MS4wMDAwMDA5ODdlMGNjNjYzNDRkODliNDk0ZTFmNDNiM3AwLAorICAgIDB4MS4wcDU1LCAweDEuMHAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzUKKyAgICAweDEuZmZmZmZkNjY5NDI3Y2YxNTk1MTU4NzM4ODdjMTdjZjJwLTEsCisgICAgMHgxLjBwNjAsIC0weDEuMHAtMjkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzYKKyAgICAweDEuMDAwMDAwYTY1YWY2YWU2MWJlODhlYTI1NTg3OTBjZDdwMCwKKyAgICAweDEuMHA2MCwgMHgxLjBwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgNTc3CisgICAgMHgxLmZmZmZmZmZmZmUwMDAwMDAwMDAwZmZmN2ZmZmZmZmFhcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLCAweDEuMHAxMworICB9LAorICB7IC8vIEVudHJ5IDU3OAorICAgIDB4MS5mZmZmZmZmZmYwMDAwMDAwMDAzZmZmYmZmZmZmNTU1N3AtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgMHgxLjBwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzkKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMHgxLjBwMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODAKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMHgxLjBwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODEKKyAgICAweDEuMDAwMDAwMDAwMjAwMDAwMDAwMDFmZmYwMDAwMDAxNTVwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwLCAweDEuMHAxMworICB9LAorICB7IC8vIEVudHJ5IDU4MgorICAgIDB4MS4wMDAwMDAwMDEwMDAwMDAwMDA3ZmZmODAwMDAyYWFhMnAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAsIDB4MS4wcDE2CisgIH0sCisgIHsgLy8gRW50cnkgNTgzCisgICAgMHgxLmZmZmZmZmMwMDAwMDA0MDAwMDAxZDU1NTU1MTZhYWFhcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwLCAtMHgxLjBwMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODQKKyAgICAweDEuZmZmZmZlMDAwMDAwZmZmZmZmYmFhYWFhYjAwMDAwMDNwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHAyOAorICB9LAorICB7IC8vIEVudHJ5IDU4NQorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwMCwgLTB4MS4wcDI1CisgIH0sCisgIHsgLy8gRW50cnkgNTg2CisgICAgMHgxLnAwLAorICAgIC0weDEuMHAwLCAtMHgxLjBwMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODcKKyAgICAweDEuMDAwMDAwMTAwMDAwMDA4MDAwMDA0MmFhYWFhZWI1NTVwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHAyNQorICB9LAorICB7IC8vIEVudHJ5IDU4OAorICAgIDB4MS4wMDAwMDA4MDAwMDAyMDAwMDAwNzU1NTU1N3AwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDI4CisgIH0sCisgIHsgLy8gRW50cnkgNTg5CisgICAgMHgxLjM2OGIyZmM2Zjk2MGE0YzFkOWFhNjI4ZmUzZjEzZmZmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwLCAtMHgxLjBwNTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTAKKyAgICAweDEuNWZjMjEwNDEwMjdiMjNiMDUxNTZiOGFlYThiNWU5MjVwLTEyLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwLCAtMHgxLjBwNTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTEKKyAgICAweDEucDAsCisgICAgLTB4MS4wcDAsIC0weDEuMHA1MQorICB9LAorICB7IC8vIEVudHJ5IDU5MgorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwMCwgLTB4MS4wcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNTkzCisgICAgMHgxLjQ4YjVlM2MzZTgxODY3YmYzMWE3N2E4M2MzMmM0NzQ0cDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xLCAtMHgxLjBwNTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTQKKyAgICAweDEuYjRjOTAyZTI3M2E1YTFjNTY3MDFlNzE1ZWRhZjIxMTVwNSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHA1NQorICB9LAorICB7IC8vIEVudHJ5IDU5NQorICAgIDB4MS41ZmMyMTA0MTAyN2IyM2IwNTE1NmI4YWVhOGI1ZTkyNXAtMTIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHA1NQorICB9LAorICB7IC8vIEVudHJ5IDU5NgorICAgIDB4MS45NjlkNDczMjFlNGZlN2Y5YmI4YzQzYTVlNDg2YjlhZXAtOTMsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHA1OAorICB9LAorICB7IC8vIEVudHJ5IDU5NworICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwMCwgLTB4MS4wcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNTk4CisgICAgMHgxLnAwLAorICAgIC0weDEuMHAwLCAtMHgxLjBwNTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTkKKyAgICAweDEuYjRjOTAyZTI3M2E1YTFjNTY3MDFlNzE1ZWRhZjIxMTVwNSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHA1NQorICB9LAorICB7IC8vIEVudHJ5IDYwMAorICAgIDB4MS4xZjQzZmNjNGI2NjM1NzdhNDVlYTliNDljY2U5ZWU3M3A0NiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHA1OAorICB9LAorICB7IC8vIEVudHJ5IDYwMQorICAgIDB4MS40NDEwOWVkYjIwYTc1NmFkNzY3ZDI1MTVjOTRhMDAzYXAtNzM5LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwLCAtMHgxLjBwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDIKKyAgICAwLjAsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHA2NAorICB9LAorICB7IC8vIEVudHJ5IDYwMworICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwMCwgLTB4MS4wcDYxCisgIH0sCisgIHsgLy8gRW50cnkgNjA0CisgICAgMHgxLnAwLAorICAgIC0weDEuMHAwLCAtMHgxLjBwNjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDUKKyAgICAweDEuNDFjN2E4ODE0YmYwYTgwMWM1MzUzZjMwMmE0MGNjN2ZwMzY5LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDYxCisgIH0sCisgIHsgLy8gRW50cnkgNjA2CisgICAgSFVHRV9WQUwsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xLCAtMHgxLjBwNjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDcKKyAgICAweDEuMDAwMDAwMTAwMDAwMDA4MDAwMDA0MmFhYWFhZWI1NTVwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDI1CisgIH0sCisgIHsgLy8gRW50cnkgNjA4CisgICAgMHgxLjAwMDAwMDgwMDAwMDIwMDAwMDA3NTU1NTU3cDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHAyOAorICB9LAorICB7IC8vIEVudHJ5IDYwOQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLjBwMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTAKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgLTB4MS4wcDI4CisgIH0sCisgIHsgLy8gRW50cnkgNjExCisgICAgMHgxLmZmZmZmZmMwMDAwMDA0MDAwMDAxZDU1NTU1MTZhYWFhcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHAyNQorICB9LAorICB7IC8vIEVudHJ5IDYxMgorICAgIDB4MS5mZmZmZmUwMDAwMDBmZmZmZmZiYWFhYWFiMDAwMDAwM3AtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwLCAtMHgxLjBwMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTMKKyAgICAweDEuNDhiNWUzYzNlODE4NjdiZjMxYTc3YTgzYzMyYzQ3NDRwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDUxCisgIH0sCisgIHsgLy8gRW50cnkgNjE0CisgICAgMHgxLmI0YzkwMmUyNzNhNWExYzU2NzAxZTcxNWVkYWYyMTE1cDUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHA1NQorICB9LAorICB7IC8vIEVudHJ5IDYxNQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLjBwNTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTYKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgLTB4MS4wcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNjE3CisgICAgMHgxLjM2OGIyZmM2Zjk2MGE0YzFkOWFhNjI4ZmUzZjEzZmZmcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHA1MQorICB9LAorICB7IC8vIEVudHJ5IDYxOAorICAgIDB4MS41ZmMyMTA0MTAyN2IyM2IwNTE1NmI4YWVhOGI1ZTkyNXAtMTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDU1CisgIH0sCisgIHsgLy8gRW50cnkgNjE5CisgICAgMHgxLmI0YzkwMmUyNzNhNWExYzU2NzAxZTcxNWVkYWYyMTE1cDUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHA1NQorICB9LAorICB7IC8vIEVudHJ5IDYyMAorICAgIDB4MS4xZjQzZmNjNGI2NjM1NzdhNDVlYTliNDljY2U5ZWU3M3A0NiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDU4CisgIH0sCisgIHsgLy8gRW50cnkgNjIxCisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0weDEuMHA1NQorICB9LAorICB7IC8vIEVudHJ5IDYyMgorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLjBwNTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjMKKyAgICAweDEuNWZjMjEwNDEwMjdiMjNiMDUxNTZiOGFlYThiNWU5MjVwLTEyLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHA1NQorICB9LAorICB7IC8vIEVudHJ5IDYyNAorICAgIDB4MS45NjlkNDczMjFlNGZlN2Y5YmI4YzQzYTVlNDg2YjlhZXAtOTMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDU4CisgIH0sCisgIHsgLy8gRW50cnkgNjI1CisgICAgMHgxLjQxYzdhODgxNGJmMGE4MDFjNTM1M2YzMDJhNDBjYzdmcDM2OSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwgLTB4MS4wcDYxCisgIH0sCisgIHsgLy8gRW50cnkgNjI2CisgICAgSFVHRV9WQUwsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEsIC0weDEuMHA2NAorICB9LAorICB7IC8vIEVudHJ5IDYyNworICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLjBwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjgKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgLTB4MS4wcDY0CisgIH0sCisgIHsgLy8gRW50cnkgNjI5CisgICAgMHgxLjQ0MTA5ZWRiMjBhNzU2YWQ3NjdkMjUxNWM5NGEwMDNhcC03MzksCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMCwgLTB4MS4wcDYxCisgIH0sCisgIHsgLy8gRW50cnkgNjMwCisgICAgMC4wLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAsIC0weDEuMHA2NAorICB9LAorICB7IC8vIEVudHJ5IDYzMQorICAgIEhVR0VfVkFMLAorICAgIC0weDEuMHAxNSwgMHgxLjBwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzIKKyAgICBIVUdFX1ZBTCwKKyAgICAwLjAsIC0weDEuOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjMzCisgICAgLUhVR0VfVkFMLAorICAgIC0wLjAsIC0weDEuOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM0CisgICAgSFVHRV9WQUwsCisgICAgMC4wLCAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDYzNQorICAgIC1IVUdFX1ZBTCwKKyAgICAtMC4wLCAtMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDYzNgorICAgIEhVR0VfVkFMLAorICAgIDAuMCwgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzcKKyAgICBIVUdFX1ZBTCwKKyAgICAwLjAsIC0weDEuOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjM4CisgICAgSFVHRV9WQUwsCisgICAgMC4wLCAtMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDYzOQorICAgIEhVR0VfVkFMLAorICAgIDAuMCwgLTB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDAKKyAgICBIVUdFX1ZBTCwKKyAgICAwLjAsIC0weDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0MQorICAgIEhVR0VfVkFMLAorICAgIDAuMCwgLTB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNjQyCisgICAgSFVHRV9WQUwsCisgICAgMC4wLCAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDMKKyAgICBIVUdFX1ZBTCwKKyAgICAtMC4wLCAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDY0NAorICAgIEhVR0VfVkFMLAorICAgIC0wLjAsIC0weDEuOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjQ1CisgICAgSFVHRV9WQUwsCisgICAgLTAuMCwgLTB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDYKKyAgICBIVUdFX1ZBTCwKKyAgICAtMC4wLCAtMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NworICAgIEhVR0VfVkFMLAorICAgIC0wLjAsIC0weDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0OAorICAgIEhVR0VfVkFMLAorICAgIC0wLjAsIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDY0OQorICAgIEhVR0VfVkFMLAorICAgIC0wLjAsIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDY1MAorICAgIEhVR0VfVkFMLAorICAgIDAuMCwgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNjUxCisgICAgSFVHRV9WQUwsCisgICAgLTAuMCwgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNjUyCisgICAgMC4wLAorICAgIDAuMCwgMHgxLjhwMQorICB9LAorICB7IC8vIEVudHJ5IDY1MworICAgIC0wLjAsCisgICAgLTAuMCwgMHgxLjhwMQorICB9LAorICB7IC8vIEVudHJ5IDY1NAorICAgIDAuMCwKKyAgICAwLjAsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTUKKyAgICAtMC4wLAorICAgIC0wLjAsIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTYKKyAgICAwLjAsCisgICAgMC4wLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDY1NworICAgIDAuMCwKKyAgICAwLjAsIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTgKKyAgICAwLjAsCisgICAgMC4wLCAweDEuOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjU5CisgICAgMC4wLAorICAgIDAuMCwgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDY2MAorICAgIDAuMCwKKyAgICAwLjAsIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjEKKyAgICAwLjAsCisgICAgMC4wLCAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2MgorICAgIDAuMCwKKyAgICAwLjAsIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNjYzCisgICAgMC4wLAorICAgIDAuMCwgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjQKKyAgICAwLjAsCisgICAgLTAuMCwgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjUKKyAgICAwLjAsCisgICAgLTAuMCwgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDY2NgorICAgIDAuMCwKKyAgICAtMC4wLCAweDEuOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjY3CisgICAgMC4wLAorICAgIC0wLjAsIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjgKKyAgICAwLjAsCisgICAgLTAuMCwgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDY2OQorICAgIDAuMCwKKyAgICAtMC4wLCAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY3MAorICAgIDAuMCwKKyAgICAtMC4wLCAweDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDY3MQorICAgIDAuMCwKKyAgICAtMC4wLCAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDY3MgorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwMCwgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzMKKyAgICAweDEucDAsCisgICAgLTB4MS4wcDAsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDY3NAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDY3NQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzYKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDY3NworICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDY3OAorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwMCwgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDY3OQorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwMCwgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODAKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODEKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjgyCisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNjgzCisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDY4NAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDY4NQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODYKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODcKKyAgICAweDEucDAsCisgICAgMHgxLjBwMCwgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNjg4CisgICAgMHgxLnAwLAorICAgIDB4MS4wcDAsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDY4OQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAwLCAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNjkwCisgICAgMHgxLnAwLAorICAgIEhVR0VfVkFMLCAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTEKKyAgICAweDEucDAsCisgICAgSFVHRV9WQUwsIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTIKKyAgICAweDEucDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNjkzCisgICAgMHgxLnAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTQKKyAgICAweDEucDAsCisgICAgMHgxLjBwLTEwMjIsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDY5NQorICAgIDB4MS5wMCwKKyAgICAweDEuMHAtMTAyMiwgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDY5NgorICAgIDB4MS5wMCwKKyAgICAweDEuMHAtMTA3NCwgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNjk3CisgICAgMHgxLnAwLAorICAgIDB4MS4wcC0xMDc0LCAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNjk4CisgICAgMHgxLnAwLAorICAgIDAuMCwgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNjk5CisgICAgMHgxLnAwLAorICAgIDAuMCwgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDcwMAorICAgIDB4MS5wMCwKKyAgICAtMC4wLCAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDEKKyAgICAweDEucDAsCisgICAgLTAuMCwgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDcwMgorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwLTEwNzQsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDcwMworICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwLTEwNzQsIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDQKKyAgICAweDEucDAsCisgICAgLTB4MS4wcC0xMDIyLCAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDUKKyAgICAweDEucDAsCisgICAgLTB4MS4wcC0xMDIyLCAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNzA2CisgICAgMHgxLnAwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzLCAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDcKKyAgICAweDEucDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDgKKyAgICAweDEucDAsCisgICAgLUhVR0VfVkFMLCAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDkKKyAgICAweDEucDAsCisgICAgLUhVR0VfVkFMLCAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNzEwCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjBwLTEwMjIsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcxMQorICAgIEhVR0VfVkFMLAorICAgIDB4MS4wcC0xMDc0LCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTIKKyAgICBIVUdFX1ZBTCwKKyAgICAtMHgxLjBwLTEwNzQsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcxMworICAgIEhVR0VfVkFMLAorICAgIC0weDEuMHAtMTAyMiwgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzE0CisgICAgMC4wLAorICAgIEhVR0VfVkFMLCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTUKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzE2CisgICAgMC4wLAorICAgIDB4MS44cDAsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcxNworICAgIDAuMCwKKyAgICAtMHgxLjhwMCwgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzE4CisgICAgMC4wLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzLCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTkKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMLCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjAKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwMjIsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzIxCisgICAgMC4wLAorICAgIDB4MS4wcC0xMDc0LCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcyMgorICAgIDAuMCwKKyAgICAwLjAsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzIzCisgICAgMC4wLAorICAgIC0wLjAsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzI0CisgICAgMC4wLAorICAgIC0weDEuMHAtMTA3NCwgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjUKKyAgICAwLjAsCisgICAgLTB4MS4wcC0xMDIyLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcyNgorICAgIEhVR0VfVkFMLAorICAgIEhVR0VfVkFMLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDcyNworICAgIEhVR0VfVkFMLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzI4CisgICAgSFVHRV9WQUwsCisgICAgMHgxLjhwMCwgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjkKKyAgICBIVUdFX1ZBTCwKKyAgICAtMHgxLjhwMCwgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzAKKyAgICBIVUdFX1ZBTCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzEKKyAgICBIVUdFX1ZBTCwKKyAgICAtSFVHRV9WQUwsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzMyCisgICAgLTAuMCwKKyAgICAtSFVHRV9WQUwsIC0weDEuOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzMzCisgICAgLTAuMCwKKyAgICAtSFVHRV9WQUwsIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzM0CisgICAgMC4wLAorICAgIC1IVUdFX1ZBTCwgLUhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzM1CisgICAgMC4wLAorICAgIC1IVUdFX1ZBTCwgLTB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzYKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMLCAtMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDczNworICAgIDAuMCwKKyAgICAtSFVHRV9WQUwsIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNzM4CisgICAgMC4wLAorICAgIC1IVUdFX1ZBTCwgLTB4MS44cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzkKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMLCAtMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDc0MAorICAgIDAuMCwKKyAgICAtSFVHRV9WQUwsIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDc0MQorICAgIDAuMCwKKyAgICAtSFVHRV9WQUwsIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDc0MgorICAgIC1IVUdFX1ZBTCwKKyAgICAtSFVHRV9WQUwsIDB4MS44cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDMKKyAgICAtSFVHRV9WQUwsCisgICAgLUhVR0VfVkFMLCAweDEuNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzQ0CisgICAgSFVHRV9WQUwsCisgICAgLUhVR0VfVkFMLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDc0NQorICAgIEhVR0VfVkFMLAorICAgIC1IVUdFX1ZBTCwgMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDc0NgorICAgIEhVR0VfVkFMLAorICAgIC1IVUdFX1ZBTCwgMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDc0NworICAgIEhVR0VfVkFMLAorICAgIC1IVUdFX1ZBTCwgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDc0OAorICAgIEhVR0VfVkFMLAorICAgIC1IVUdFX1ZBTCwgMHgxLjhwMgorICB9LAorICB7IC8vIEVudHJ5IDc0OQorICAgIEhVR0VfVkFMLAorICAgIC1IVUdFX1ZBTCwgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDc1MAorICAgIEhVR0VfVkFMLAorICAgIC1IVUdFX1ZBTCwgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTEKKyAgICBIVUdFX1ZBTCwKKyAgICAtSFVHRV9WQUwsIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNzUyCisgICAgMC4wLAorICAgIEhVR0VfVkFMLCAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTMKKyAgICAwLjAsCisgICAgSFVHRV9WQUwsIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDc1NAorICAgIDAuMCwKKyAgICBIVUdFX1ZBTCwgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTUKKyAgICAwLjAsCisgICAgSFVHRV9WQUwsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDc1NgorICAgIEhVR0VfVkFMLAorICAgIEhVR0VfVkFMLCBIVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDc1NworICAgIEhVR0VfVkFMLAorICAgIEhVR0VfVkFMLCAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNzU4CisgICAgSFVHRV9WQUwsCisgICAgSFVHRV9WQUwsIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNzU5CisgICAgSFVHRV9WQUwsCisgICAgSFVHRV9WQUwsIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNzYwCisgICAgSFVHRV9WQUwsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDc2MQorICAgIDAuMCwKKyAgICAweDEuMHAtMTAyMiwgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDc2MgorICAgIDAuMCwKKyAgICAtMHgxLjBwLTEwMjIsIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjMKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQsIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjQKKyAgICAwLjAsCisgICAgLTB4MS4wcC0xMDc0LCAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzY1CisgICAgSFVHRV9WQUwsCisgICAgSFVHRV9WQUwsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzY2CisgICAgMHgxLmZmZmZmZmZmZmZmZmY3ZmZmZmZmZmZmZmZmZWZmZmZmcDUxMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc2NworICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAtMSwKKyAgICAweDEuMHAtMSwgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjgKKyAgICAweDEucC01MTEsCisgICAgMHgxLjBwLTEwMjIsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzY5CisgICAgMHgxLnAtNTM3LAorICAgIDB4MS4wcC0xMDc0LCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc3MAorICAgIDAuMCwKKyAgICAwLjAsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzcxCisgICAgMC4wLAorICAgIC0wLjAsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzcyCisgICAgSFVHRV9WQUwsCisgICAgLUhVR0VfVkFMLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc3MworICAgIDAuMCwKKyAgICBIVUdFX1ZBTCwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzc0CisgICAgMHgxLjAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMThwLTUxMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzLCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzUKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwMCwKKyAgICAweDEuMHAtMSwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzc2CisgICAgMHgxLnA1MTEsCisgICAgMHgxLjBwLTEwMjIsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc3NworICAgIDB4MS5wNTM3LAorICAgIDB4MS4wcC0xMDc0LCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzgKKyAgICBIVUdFX1ZBTCwKKyAgICAwLjAsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc3OQorICAgIEhVR0VfVkFMLAorICAgIC0wLjAsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc4MAorICAgIDAuMCwKKyAgICAtSFVHRV9WQUwsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc4MQorICAgIDAuMCwKKyAgICAweDEuMHAtMSwgSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODIKKyAgICAwLjAsCisgICAgMHgxLjBwLTEsIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODMKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwLTEsCisgICAgMHgxLjBwLTEsIDB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzg0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xLCAweDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDc4NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMSwgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODYKKyAgICAweDEucDAsCisgICAgMHgxLjBwLTEsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDc4NworICAgIDB4MS5wMCwKKyAgICAweDEuMHAtMSwgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDc4OAorICAgIDB4MS5wMCwKKyAgICAweDEuMHAtMSwgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNzg5CisgICAgMHgxLnAwLAorICAgIDB4MS4wcC0xLCAtMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTAKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwMCwKKyAgICAweDEuMHAtMSwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzkxCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjBwLTEsIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNzkyCisgICAgSFVHRV9WQUwsCisgICAgMHgxLjBwLTEsIC1IVUdFX1ZBTAorICB9LAorICB7IC8vIEVudHJ5IDc5MworICAgIDAuMCwKKyAgICAtMHgxLjBwLTEsIEhVR0VfVkFMCisgIH0sCisgIHsgLy8gRW50cnkgNzk0CisgICAgMC4wLAorICAgIC0weDEuMHAtMSwgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDc5NQorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwLTEsIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDc5NgorICAgIDB4MS5wMCwKKyAgICAtMHgxLjBwLTEsIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTcKKyAgICBIVUdFX1ZBTCwKKyAgICAtMHgxLjBwLTEsIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNzk4CisgICAgSFVHRV9WQUwsCisgICAgLTB4MS4wcC0xLCAtSFVHRV9WQUwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTkKKyAgICAweDEucDEsCisgICAgMHgxLjBwMiwgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDAKKyAgICAweDEuODBwMSwKKyAgICAweDEuMnAzLCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDgwMQorICAgIDB4MS5wMiwKKyAgICAweDEuMHA0LCAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDgwMgorICAgIDB4MS5wLTEsCisgICAgMHgxLjBwMiwgLTB4MS4wcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODAzCisgICAgMHgxLnAtMiwKKyAgICAweDEuMHA0LCAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDQKKyAgICAweDEucC0zLAorICAgIDB4MS4wcDYsIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDgwNQorICAgIEhVR0VfVkFMLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLCAtMHgxLjc0OTEwZDUyZDMwNTJwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDYKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTEsIDB4MS43NDkxMGQ1MmQzMDUycDYyCisgIH0sCisgIHsgLy8gRW50cnkgODA3CisgICAgMHgxLnAyLAorICAgIDB4MS4wcDEsIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDgKKyAgICAweDEucC0yLAorICAgIDB4MS4wcDEsIC0weDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODA5CisgICAgMHgxLnAyLAorICAgIC0weDEuMHAxLCAweDEuMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODEwCisgICAgMHgxLnAtMiwKKyAgICAtMHgxLjBwMSwgLTB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTEKKyAgICAweDEuYjBwNCwKKyAgICAweDEuOHAxLCAweDEuOHAxCisgIH0sCisgIHsgLy8gRW50cnkgODEyCisgICAgMHgxLjg2YTBwMTEsCisgICAgMHgxLjRwMiwgMHgxLjRwMgorICB9LAorICB7IC8vIEVudHJ5IDgxMworICAgIDB4MS45MjFlZTBwMTksCisgICAgMHgxLmNwMiwgMHgxLmNwMgorICB9LAorICB7IC8vIEVudHJ5IDgxNAorICAgIDB4MS4yYTA1ZjJwMzMsCisgICAgMHgxLjRwMywgMHgxLjRwMworICB9LAorfTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKK1RFU1QobWF0aF9wb3csIHBvd19pbnRlbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19wb3dfaW50ZWxfZGF0YSkvc2l6ZW9mKHBvd19pbnRlbF9kYXRhX3QpOyBpKyspIHsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKGdfcG93X2ludGVsX2RhdGFbaV0uZXhwZWN0ZWQsIHBvdyhnX3Bvd19pbnRlbF9kYXRhW2ldLnhfY2FsbF9kYXRhLCBnX3Bvd19pbnRlbF9kYXRhW2ldLnlfY2FsbF9kYXRhKSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF9wb3dmX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF9wb3dmX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3N2IyM2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tYXRoX3Bvd2ZfdGVzdC5jcHAKQEAgLTAsMCArMSwyNzg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCit0eXBlZGVmIHN0cnVjdCB7CisgIGZsb2F0IGV4cGVjdGVkOworICBmbG9hdCB4X2NhbGxfZGF0YTsKKyAgZmxvYXQgeV9jYWxsX2RhdGE7Cit9IHBvd2ZfaW50ZWxfZGF0YV90OworCitzdGF0aWMgcG93Zl9pbnRlbF9kYXRhX3QgZ19wb3dmX2ludGVsX2RhdGFbXSA9IHsKKyAgeyAvLyBFbnRyeSAwCisgICAgSFVHRV9WQUxGLAorICAgIC0wLjAsIC0weDEuMDAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMQorICAgIDAuMGYsCisgICAgLTB4MS5wLTUsIDB4MS5lMHA0CisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIC0wLjBmLAorICAgIC0weDEucC0zMCwgMHgxLjQwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzCisgICAgMHgxLnAwLAorICAgIC0weDEucDAsIDB4MS4wMDAwMDJwMzIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0CisgICAgMHgxLnAwLAorICAgIC0weDEuMDAwMDAycC00MSwgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNQorICAgIDB4MS5kMWEwMjkxMjg3NzhmY2EzZjlhMjYxYmUxY2I4NmJlN3AtMTIxLAorICAgIC0weDEuMDAwMDA2cDAsIC0weDEuYmMxZWUycDI3CisgIH0sCisgIHsgLy8gRW50cnkgNgorICAgIDB4MS5kYTZlM2ZmMjAyZGE3NTJkZTUyM2Y5ODQ2MzAzYzBiNXAtMTI0LAorICAgIC0weDEuMDAwMDBhcDAsIC0weDEuMTExMTEycDI3CisgIH0sCisgIHsgLy8gRW50cnkgNworICAgIDB4MS5lYjcwYTJmYmI4YjI0ODliOGQ4MzhlYjY1ZWQ2NzZhY3AtOTEsCisgICAgLTB4MS4wMDAwMGFwMCwgLTB4MS44ZjgzZTRwMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4CisgICAgSFVHRV9WQUxGLAorICAgIC0weDEuMDAwMDI4cDAsIDB4MS4yMHA0NAorICB9LAorICB7IC8vIEVudHJ5IDkKKyAgICAweDEuMDAyMDAxcC00LAorICAgIC0weDEuMDAxMHAtMiwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAweDEuMDAyMDAxcC04MiwKKyAgICAtMHgxLjAwMTBwLTQxLCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIDB4MS4wMDQwMDRwLTgyLAorICAgIC0weDEuMDAyMHAtNDEsIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDEyCisgICAgMHgxLjAwNjAwOXAtMTIsCisgICAgLTB4MS4wMDMwcC02LCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMworICAgIC0weDEuZmI4NTlhZGJkYjdkZjY5NzRjNWM5YTU0ODllNjk3MmFwNTMsCisgICAgLTB4MS4wMDQwcC02LCAtMHgxLjIwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNAorICAgIDB4MS4wMDgwMTBwLTgyLAorICAgIC0weDEuMDA0MHAtNDEsIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDE1CisgICAgMHgxLjAwZTAzMXAtNDAsCisgICAgLTB4MS4wMDcwcC0yMCwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTYKKyAgICAweDEuMzFlNDUyZmZmZmVjOTZhM2Q1YTg4MmZlMjQ0ZjhjNjNwLTEsCisgICAgLTB4MS4wNDZlZjRwMCwgLTB4MS5lMHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTcKKyAgICAweDEuMzNlOGYzMDRwLTM2LAorICAgIC0weDEuMDhwLTYsIDB4MS44MHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTgKKyAgICAweDEuZDgyMDAxZmU5ZDZiZGJiYTk4NjM4ZGVmOGQzN2U1MGJwLTEyNCwKKyAgICAtMHgxLjFlYzM4Y3AwLCAtMHgxLjc4cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOQorICAgIC0weDEuNDVmM2JkZWFhNWY2MGQxMjFjM2ZhNzUxZGJkNzU4YWRwMzYsCisgICAgLTB4MS5iZmZmZmVwLTYsIC0weDEuYzBwMgorICB9LAorICB7IC8vIEVudHJ5IDIwCisgICAgMHgxLmRmNDFhZTdlZjRlMTVlOGFkNDVjNzI5M2RkYzNmZTdkcDYxLAorICAgIC0weDEuZmZmZmZhcC0xLCAtMHgxLmM5YjI0NHAyNworICB9LAorICB7IC8vIEVudHJ5IDIxCisgICAgMHgxLmRmNDZmMjZmMWYxMjlhNTQ5MjIwMjJmOWI2NTNhOTlmcDYxLAorICAgIC0weDEuZmZmZmZhcC0xLCAtMHgxLmM5YjI2MnAyNworICB9LAorICB7IC8vIEVudHJ5IDIyCisgICAgLTB4MS4wMDAwMDMwMDAwMDkwMDAwMWIwMDAwNTEwMDAwZjNwMjEsCisgICAgLTB4MS5mZmZmZmFwLTIyLCAtMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjMKKyAgICAtMHgxLjAwMDAwMzAwMDAwOTAwMDAxYjAwMDA1MTAwMDBmM3AtOTksCisgICAgLTB4MS5mZmZmZmFwOTgsIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNAorICAgIC0weDEuNzhiNTVlZjhhZWNiMGI3YzViODg2NWUyNzE1N2Q4MjRwLTIsCisgICAgLTB4MS5mZmZmZmNwLTEsIDB4MS4wMDAwMDJwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNQorICAgIC0weDEuZmZmZmZlcC00MSwKKyAgICAtMHgxLmZmZmZmZXAtNDEsIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDI2CisgICAgMHgxLnA3MSwKKyAgICAweDEucC0yLCAtMHgxLjFjcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNworICAgIDB4MS5kNTgwNzEwZTM4NDYzYzNkZDYyZmNlOThmMjAzYjQ3MXAtMSwKKyAgICAweDEucC0yLCAweDEuMDAwN3AtNAorICB9LAorICB7IC8vIEVudHJ5IDI4CisgICAgMHgxLnAtMTUsCisgICAgMHgxLnAtMiwgMHgxLmUwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOQorICAgIDAuMGYsCisgICAgMHgxLnAtMywgMHgxLjhmZmZmZXA1CisgIH0sCisgIHsgLy8gRW50cnkgMzAKKyAgICAweDEucC00MCwKKyAgICAweDEucC01LCAweDEucDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMQorICAgIDB4MS5wNDAsCisgICAgMHgxLnAtMTAsIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMgorICAgIDB4MS5lY2ZmZjBiNDQ5ZDdjOWE1ZDQ5NGM4ODRjNzE3ZjljZHAtODgsCisgICAgMHgxLnAtMTQ0LCAweDEuMzU4NmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzMKKyAgICAweDEuZWNmZmYwYjQ0OWQ3YzlhNWQ0OTRjODg0YzcxN2Y5Y2RwLTEwNiwKKyAgICAweDEucC0xNDQsIDB4MS43NTg2ZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNAorICAgIEhVR0VfVkFMRiwKKyAgICAweDEucC0xNDksIC0weDEuY2NhY2NjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzUKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLnAtMTQ5LCAtMHgxLmU2ZTY2NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgMHgxLmU4ZTEwMTM1NWJkOTc1YmZlYzNmYjVlZDM3NTc3NzdkcC0xLAorICAgIDB4MS4wMDAwMDJwLTIsIDB4MS4xMTExcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAweDEuZGRiNjQzNDdhNTVlNDUyZWQwNGQ2YTE3M2NhNWI1NmNwOTksCisgICAgMHgxLjAwMDAwMnAtMTExLCAtMHgxLmNjY2NjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDM4CisgICAgMHgxLjU1OGU5OTAwMDRhOGViYjNlODE3NjI3NWJhOWYxMDUycDUyLAorICAgIDB4MS4wMDAwMDJwLTExMiwgLTB4MS5kZjNiNWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOQorICAgIDB4MS5mZmZmZmQwMDAwMDUzZmZmZjY2MDAwMTIwYmZmZGRiNnA5MiwKKyAgICAweDEuMDAwMDAycC0xMjQsIC0weDEuODBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MAorICAgIDB4MS5mZmZmZmZmZmZmZjgwMDAwMDgwMDAwMDU1NTU1NDU1NXAtMSwKKyAgICAweDEuMDAwMDAycDAsIC0weDEucC0yMworICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgMHgxLmZmZmZmZmZmZmZmOTAwMDAwNzAwMDAwMmVhYWFhMDJhcC0xLAorICAgIDB4MS4wMDAwMDJwMCwgLTB4MS5jMHAtMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MgorICAgIDB4MS5kZGI2NTMwZDQ4NWI3YmFkYjQ0MWE0NDYwY2E1NGM2MnA5LAorICAgIDB4MS4wMDAwMDJwMTEsIDB4MS5jY2NjYzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MworICAgIDB4MS5kOTAxNzkwY2Q5ZDFiOWQ4Y2RmNjE2Mjk2NDc5MDIyZnAtMTQsCisgICAgMHgxLjAwMDAwMnAxNywgLTB4MS44YWY4YjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NAorICAgIDB4MS5lNmQzZjkwZDQxNDQ0N2IyZjI0NjdkNGMyMTQ0OTZiZHAzMCwKKyAgICAweDEuMDAwMDAycDQyLCAweDEuNzkwNGE0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDUKKyAgICAweDEuMDAwMDEyZmZmZmQ2ODAwNGZhN2ZiMTU5MTA4ZWM5N2RwMCwKKyAgICAweDEuMDAwMDFjcDAsIDB4MS41YjZkYmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIDB4MS5kMTc0ODEwZTFlNDUyN2YwMTE1NDdkZmM0ZGM2YjQ4Y3AtMywKKyAgICAweDEuMDAwMDFjcDMsIC0weDEuNmNjY2NlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDcKKyAgICAweDEuZDU4MTk3MGU4YjRjY2M5ZGJjMjg4OTliZDE4NDhlMjRwLTEsCisgICAgMHgxLjAwMDAyZXAtMiwgMHgxLmZmZmZjZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ4CisgICAgMHgxLjAwMDQ1NTAwMDMxMmNjNmU3OWNlZDY1M2MzOGQ3ZTJhcDAsCisgICAgMHgxLjAwMDAzOHAtNTAsIC0weDEuZmZmNzdlcC0yMAorICB9LAorICB7IC8vIEVudHJ5IDQ5CisgICAgMHgxLjAwNDgwOTAwYTgwN2UwM2YwMTUwMDQ4MDA5MDAwOHAtODEsCisgICAgMHgxLjAwMDhwLTksIDB4MS4yMHAzCisgIH0sCisgIHsgLy8gRW50cnkgNTAKKyAgICAweDEuZmZjMDA0ZmZiMDA0NWZjODAyOWZlMjAxNDlmMjQwOGVwMzksCisgICAgMHgxLjAwMDhwLTEwLCAtMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAweDEuZmVjMWJiMzViNWE4MjY1MjYxMDFhZGFiMDY5NWQxZDNwLTEsCisgICAgMHgxLjAwZTBwMCwgLTB4MS42Y2NjY2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MgorICAgIDB4MS5mYWRiZGUxODdhY2JhNWIzYTZjNGNkZTc4ZTFiYmI0YXA0NSwKKyAgICAweDEuMDFmZmZjcDAsIDB4MS5wMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MworICAgIDB4MS5mZjFmYjZmZjc5YTVlMDM5MWIxZDdkZmIxNGRlN2RlNnAyMiwKKyAgICAweDEuMDFmZmZlcDAsIDB4MS4wMDBjYjZwMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NAorICAgIDB4MS42Y2JiYzJmZmY2NGM3M2FhYjAwMzNkZjc1N2YzODA4ZHAxMSwKKyAgICAweDEuMDIyMHAwLCAweDEuZTI5NWYycDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NQorICAgIDB4MS5mODFmNTMxMmJhNDQ5NDIxYmQ5MzkzYWQ4ZGY1M2FhZXAtMSwKKyAgICAweDEuMDRwMCwgLTB4MS4wMDA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NgorICAgIDB4MS5mZmU4OGFmZmZmZmYzM2U5MzNjZmFhZDVmMGVlMjY3OHAtMSwKKyAgICAweDEuMDhjN2VlcC0xNiwgMHgxLjBmOTRiMnAtMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NworICAgIDB4MS4wMDAwZGNmZmZmYzZmZWU3ZTRhYWMwOWEzZDlmYjlhMXAwLAorICAgIDB4MS4wZXAtMjAsIC0weDEuMDAwY2RjcC0yMAorICB9LAorICB7IC8vIEVudHJ5IDU4CisgICAgMHgxLjcwY2UwNWU2Mjk4MDNjMGNhNDc0ODIzOTJhODgyZGVicC0zLAorICAgIDB4MS4wZXAzLCAtMHgxLjliOTFiYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDU5CisgICAgMHgxLjVhODkyNmU0NzNmNjE0OGE1YTM4M2JmYTFlZDBiMzM1cC05MCwKKyAgICAweDEuMGZmZmZlcDAsIC0weDEuMDAwMGZlcDEwCisgIH0sCisgIHsgLy8gRW50cnkgNjAKKyAgICAweDEuOGVjNWIyZTE2MDY3MjhmMjFjZjJjOTBjMmU0ZDJhOWJwLTkzLAorICAgIDB4MS4wZmZmZmVwMCwgLTB4MS4wN2ZmZmVwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MQorICAgIDB4MS5hNDdkZDRmZmZmZTI1NDg2MzE0MzUxNDEzODM3YjJmZHA0LAorICAgIDB4MS4xNjI0cC00LCAtMHgxLjM3MjBjMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjIKKyAgICAweDEuNDQyNDAxcDAsCisgICAgMHgxLjIwMTBwMCwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjMKKyAgICAweDEuZTdhYWYyZmZmZmJjZTg2YTRmZDJjZjljYjUzZDdlNTVwLTEsCisgICAgMHgxLjI1MzI2NHAwLCAtMHgxLjZmODI2ZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDY0CisgICAgMHgxLjRkNjMyOTAwNTJkNGQyZDg5NGI0NjM1Y2I5Yjk4MTMwcC0zOSwKKyAgICAweDEuMjcxMWM4cC02LCAweDEuYWE4MDRlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NQorICAgIDB4MS5iMjAxNjhkYTBmYzFmY2E2ZDNjMWI4YzIzZmRjYWYzOXA0OSwKKyAgICAweDEuMmFhYWFhcC0xLCAtMHgxLmZmZjFmZXA1CisgIH0sCisgIHsgLy8gRW50cnkgNjYKKyAgICAweDEuZWUyNmMxMmViZjViNjQ5YmVmOTU0ODRlY2UxMTMwMDdwMiwKKyAgICAweDEuMmY3ZGMwcC0yMywgLTB4MS4wOTY3YzBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NworICAgIDB4MS5iYzkwNTkwMDAwMDAyZWUxMTc2M2M2ZmUyNDE4NzMwY3AtMiwKKyAgICAweDEuMzM0NDc4cC0yLCAweDEuNjJlNDJlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjgKKyAgICAweDEuOGM4YzgzMDAzMDhjZWU3YzFhNDFiMDkyOTQzMjNjZmJwLTgyLAorICAgIDB4MS4zZmZmZmVwLTEsIDB4MS5lMHA2CisgIH0sCisgIHsgLy8gRW50cnkgNjkKKyAgICAweDEuNjQzZDRlZmZmZTYwNmUwNTZlNDAzNWIwYmVjYzIwZmRwLTUsCisgICAgMHgxLjNmZmZmZXAtNDAsIDB4MS5kMmYxOTBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MAorICAgIDB4MS5mODE0ODkxNGQ0ZWEzYWY5NGVlNzI0NTcyZjJlZThmZnAtMSwKKyAgICAweDEuNDFkNDIwcDIwLCAtMHgxLjIycC0xMAorICB9LAorICB7IC8vIEVudHJ5IDcxCisgICAgMHgxLmNkNmU5MTAwMDM4YzkzYTdkY2U3MmExMTNjYTU2YzcwcC0yLAorICAgIDB4MS40NDNhNDJwLTIsIDB4MS42MmU0MmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MgorICAgIDB4MS5mODk1OTEwZjM5MmYzYjhmY2M2NDFhZTg3MTY0ZDY4NHAtMSwKKyAgICAweDEuNDVhMmE4cDEsIC0weDEucC02CisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAweDEuZTNkZmY4ZmZmNmU5ZWZkNGYxNjdhN2I5MWViODgyYWZwLTEsCisgICAgMHgxLjQ1ZDE3NHAtMSwgMHgxLjAwMDAxY3AtMworICB9LAorICB7IC8vIEVudHJ5IDc0CisgICAgMHgxLmQzMzJmMGZmZmM4MzEyOGE3ZmM3YmQ1NmJlMjdlNzU1cC0yLAorICAgIDB4MS40YTE3MDRwLTIsIDB4MS42MmU0MmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NQorICAgIDB4MS5kNWFlNzkwMDAzY2IxN2NmODNkZWI1ZTJjYzBlYTAxY3AtMiwKKyAgICAweDEuNGM5Zjk0cC0yLCAweDEuNjJlNDJlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAweDEuY2E4ZWM2ZWQ1ZGYzOWY5OTFmODA4ZDk0ZGQ1Yzg4MzRwODgsCisgICAgMHgxLjRlOWNjMnAtMzAsIC0weDEuODBwMQorICB9LAorICB7IC8vIEVudHJ5IDc3CisgICAgMHgxLmQ5YjY0OGZmZmMxNjdlZDhiOTE3YjY0Zjc0N2U2MjcwcC0yLAorICAgIDB4MS41MGJmYzhwLTIsIDB4MS42MmU0MmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OAorICAgIDB4MS5kYTk1MDcwMDAxYTM3OTlmZWUwMmVhMDM0MzU3YThjMnAtMiwKKyAgICAweDEuNTFhNDUwcC0yLCAweDEuNjJlNDJlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAweDEuZmU5NTdiMzhjNWI2OTU5YmIwZWE4MGU0M2M3MDllY2FwLTEsCisgICAgMHgxLjY3OTI4NnAtMTEsIDB4MS44ZWE4MjRwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgODAKKyAgICAweDEuYWNhOTFiNWYzODgyZjM2ZGNkYWIyYThkNjQxYzBhYjVwLTU2LAorICAgIDB4MS43NDVkMThwLTQsIDB4MS5mZjFmZmVwMworICB9LAorICB7IC8vIEVudHJ5IDgxCisgICAgMHgxLmY4MmViNzExZmYwMDY2ZWU1OTE2NTgyNThiNjkyMzMxcC0xLAorICAgIDB4MS43N2ZmZmVwLTEyMCwgMHgxLjg1YmM3YXAtMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MgorICAgIDB4MS5kOThjODMwMDAwM2U4M2ZkMjViOTUzODFmNzAyMTYxY3AtMSwKKyAgICAweDEuN2EzZDBlcDAsIC0weDEuOTk5OTlhcC0zCisgIH0sCisgIHsgLy8gRW50cnkgODMKKyAgICAweDEuZjgyY2VmMTNhMTFhNWY1YTA1NjJmZTUyYzg4MjA3YmRwLTEsCisgICAgMHgxLjdjOWExNnAtMiwgMHgxLmZkZGZmZXAtNworICB9LAorICB7IC8vIEVudHJ5IDg0CisgICAgMHgxLmQwZDAxNGZmZmU3MTVlMjczMmI2ZDFjZWQ5NmFkYjc2cDE5LAorICAgIDB4MS43ZTliYjBwLTgsIC0weDEuNTY5ODI4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NQorICAgIDB4MS44NTE4ZTJmZmZkZWEzMDEwNjJhYzZhMjljNmU1M2RmNnAtMSwKKyAgICAweDEuODUxZWJhcC0xLCAweDEuMDAwZXAwCisgIH0sCisgIHsgLy8gRW50cnkgODYKKyAgICAweDEuMmRhMWU4ZmZmZTEzNTBlNGRhZjU1NTNlNzVkY2EwMjBwLTQsCisgICAgMHgxLjg2MTg2MnAtNCwgMHgxLjFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NworICAgIDB4MS5kZDAzN2EyYzU2MWJmZTE4MjRwLTExLAorICAgIDB4MS44Y2U2MzJwLTQsIDB4MS44MHAxCisgIH0sCisgIHsgLy8gRW50cnkgODgKKyAgICAweDEuZjgxZmE3MTNkMmIyM2VhYzUyYTM2ZjRiM2EzMzAyM2VwLTEsCisgICAgMHgxLjhmODZhYXAtMSwgMHgxLjAwMDBlMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDg5CisgICAgMHgxLjAzZjE0YjA5NWFlNjg3NTI1YTdlMzc3ZTM1MDVlNTg3cDAsCisgICAgMHgxLjkwcDUsIDB4MS4wMDA4cC04CisgIH0sCisgIHsgLy8gRW50cnkgOTAKKyAgICAweDEuMzYzOTUxMDAwMDVjYzQxMTNiMjIwZDZjZTY3MmUxNjVwMCwKKyAgICAweDEuOTU1NzhlcDEsIDB4MS41NTU1NTZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIDB4MS5mODMyNDkxMzRlNzdhMjFiZjgxMTM1MGM2YTkzMWJlZXAtMSwKKyAgICAweDEuOThwNSwgLTB4MS4wMDAwMDJwLTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MgorICAgIDB4MS45ZjYyOGIzY2ZkMDZmNDE3Zjg2ZTFjYThlZGMxNDY5ZXAxMTcsCisgICAgMHgxLjk5OTk5Y3AzLCAweDEucDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MworICAgIDB4MS5kNDg1MWNjZWRhZmRkMWNiYzc5YTZhNmIzZGJiMWNiZXAxMTksCisgICAgMHgxLjlhNjZkMHAtMTQsIC0weDEuMjBwMworICB9LAorICB7IC8vIEVudHJ5IDk0CisgICAgMHgxLjI1MzYyNzAwMDFmYWI3MGEyOWQ2OGU2MGZlYjExMjExcC0xMSwKKyAgICAweDEuOWZmZmZlcDQxLCAtMHgxLjA5NGYxY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDk1CisgICAgMHgxLmQwOGFlOGZmZmRjNzAyOWUwYmQwMmM4NzE2MDZhMDFjcDAsCisgICAgMHgxLmE1N2JlY3AxLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAweDEuYjgzNjM4ZmZiMjE1NjFhMjNlYzliOGE3YjBiYTdiNTJwMTUsCisgICAgMHgxLmFhYWFhZXAtMSwgLTB4MS5lMHA1CisgIH0sCisgIHsgLy8gRW50cnkgOTcKKyAgICAweDEuYzE5ODg2MDAwMDAwMWMxY2VlMTQ2ZTQ1MTM2NWVhZTFwLTEwLAorICAgIDB4MS5hZDFkMWNwLTE0LCAweDEuNjJlNDJlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTgKKyAgICAweDEuY2QwYzZlZWZjMzNkZmMyZWYzZDJiZWI4MWFkNTY4Y2FwMzAsCisgICAgMHgxLmIxM2IxY3AtMSwgLTB4MS5mZmZmMWVwNgorICB9LAorICB7IC8vIEVudHJ5IDk5CisgICAgMHgxLjYyMjhlNGZlZjg4Mjc2OWJhMDQwMTY0ZmM0YmNhMGNicC04MSwKKyAgICAweDEuYjdmZmQ4cC0xLCAweDEuNzA1Mzk0cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAKKyAgICAweDEuYWU5ZDc1NmM4NGI0MDYzZjIzOGRkMTUxYmVjMzBlMGJwLTk5LAorICAgIDB4MS5iZTBkN2NwLTEsIDB4MS5lZGU0NDhwOAorICB9LAorICB7IC8vIEVudHJ5IDEwMQorICAgIDB4MS45MTNmNjhmMTAxZWJlNDkwZDI5ZDg3M2QxZTBmZDgyOHAtODUsCisgICAgMHgxLmJlMGY3MHAtMSwgMHgxLmE4MTQ3YXA4CisgIH0sCisgIHsgLy8gRW50cnkgMTAyCisgICAgMHgxLmIxZTcyMTVjMTI4MDgyYWFiNDllZGFiMTY0MTkxOWE4cC05OSwKKyAgICAweDEuYmUwZjcwcC0xLCAweDEuZWRlNWQ4cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMKKyAgICAweDEuZGM1NzQxODNmMDNkN2EzMzNjMThmYzY5MTZkYWE4NTlwLTk2LAorICAgIDB4MS5iZmYwZDBwLTEsIDB4MS5lZDJmYjRwOAorICB9LAorICB7IC8vIEVudHJ5IDEwNAorICAgIDB4MS5kYTZmY2QwMDAyMGRhNjU5ZTRhNTBiYTk5M2E3MWQ5MnA2LAorICAgIDB4MS5iZmZmZmVwMSwgMHgxLmU3Zjc4MnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTA1CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5jMjVjMjZwLTQ0LCAtMHgxLjQwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYKKyAgICAweDEuOTUxZGZhZjBkMDM0MTA5N2U1MGY4ZDUxZmI1YjBiMmFwLTcyLAorICAgIDB4MS5jNGVjNzRwLTEsIDB4MS45MzUyMzRwOAorICB9LAorICB7IC8vIEVudHJ5IDEwNworICAgIDB4MS5mYjFjNmNmZmZlZjE5OTg4NGU3OGMyNmZlZjA1N2ZjM3A0LAorICAgIDB4MS5jNzYzODBwMCwgMHgxLjgwMDg3Y3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgMHgxLmQ4MmQ3ZGZmZmZlZmMyNmUxZjA5ZTZkNzNhMjc2ZDgxcC0xMCwKKyAgICAweDEuY2M4ZDA2cC0xNCwgMHgxLjYyZTQyZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwOQorICAgIDB4MS45OTdlMGVlZjdiYjNkNGVkYTQwZGM0M2M3MmE1MzE2N3AtNzAsCisgICAgMHgxLmQxY2RjY3AtMSwgMHgxLmZjMjY0MHA4CisgIH0sCisgIHsgLy8gRW50cnkgMTEwCisgICAgMHgxLmZlODJkZDM4MWE4ZDMwNTZhNGM1NTRmMWUxNzY0ZjlkcC0xLAorICAgIDB4MS5kNDBhNjZwLTMsIDB4MS4wMjk2NGNwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEKKyAgICAweDEuZjNhYjE5MzcxNjljOWFiN2FhYzY3Yjk0ODk0ZWRlMTBwLTEsCisgICAgMHgxLmQ1NTU1MnAtMiwgMHgxLjAwMDAzOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDExMgorICAgIDB4MS5mZTgwNWYzN2I4OWJjMGM4YjAxNjNkYjdjMTFmNDhmMnAtMSwKKyAgICAweDEuZGExMmYwcC0xLCAweDEuMzhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMKKyAgICAweDEuYzI3OTM3MDAwZjZjMTVhODZmOGViMDQyYTA4OTU1NjZwLTczLAorICAgIDB4MS5kZjBhODJwLTEsIDB4MS43N2ZiYzBwOQorICB9LAorICB7IC8vIEVudHJ5IDExNAorICAgIDB4MS5jNjRiMGQwMDAwMjdkYmVmYTFlMzIzM2VmNTM2MTliN3AxMDUsCisgICAgMHgxLmRmZmZmZXA1MiwgMHgxLjAwMDg3Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTE1CisgICAgMHgxLjA4NDdiMDgwZTEwYTNmMzNiYTU5OWEyMThiNjMwZmZicDAsCisgICAgMHgxLmUwNmI4Y3AtMSwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYKKyAgICAweDEuZWZmNTcxNmZhMDU3YzBkYjAyOTcyZTViNTFhOTU4OTlwLTEsCisgICAgMHgxLmUwNmI4Y3AtMSwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIDB4MS4wODNmN2Y1ODdjZGI2Y2MwMDVlZTcwYWJiMTI4MDY3Y3AwLAorICAgIDB4MS5lMDg5NTZwLTEsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTE4CisgICAgMHgxLmYwMDRkMTg2NjUzZGY3NDZmNDZhYzFkYTUxZTY4ODE3cC0xLAorICAgIDB4MS5lMDg5NTZwLTEsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkKKyAgICAweDEuMmU3ODk4NmNlNzE2OTA2ODlhMTdiMDllMmZkMDEyNTZwMCwKKyAgICAweDEuZTBlZThhcC0xLCAtMHgxLjU1MTVwMQorICB9LAorICB7IC8vIEVudHJ5IDEyMAorICAgIDB4MS4zNGUzMDZlYmRhY2IzZmIyNDllZmI5MmM1ZGY1MGEzMHAwLAorICAgIDB4MS5lMGVlOGFwLTEsIC0weDEuODBwMQorICB9LAorICB7IC8vIEVudHJ5IDEyMQorICAgIDB4MS4xYTIyYTJiMjg0ODQzY2VmNzI5YWE3OTIzMjAwNjE2YnAwLAorICAgIDB4MS5lMGVlOGFwLTEsIC0weDEuOGQ4OWQ4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIKKyAgICAweDEuMWQ4YmVmZWQwM2Y5ZWQ4ZDYyOGU3MmFjZmQ1ODQ2ZjJwMCwKKyAgICAweDEuZTBlZThhcC0xLCAtMHgxLmJlYjA1MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTIzCisgICAgMHgxLmU5ZTUxOGZiMTYxN2VjZWI5NzZiNDIwOTMwYTNjZTUxcC0xLAorICAgIDB4MS5lMGVlOGFwLTEsIDB4MS42OGY4ODBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAweDEuYTBiZGJhZTdkMWI5NWQxYWRiMDU5MzlhZWZjZDM1ZjJwLTkzLAorICAgIDB4MS5lMTNkMGVwLTEsIDB4MS4wMjIwcDEwCisgIH0sCisgIHsgLy8gRW50cnkgMTI1CisgICAgMHgxLjg3ODkyNjljM2Q3MzYxZjY0NjRmMzY5YmFlY2QzNThmcC05MCwKKyAgICAweDEuZTFmMDdlcC0xLCAweDEucDEwCisgIH0sCisgIHsgLy8gRW50cnkgMTI2CisgICAgMHgxLmY2N2RjYjBkMDM0ZWMyOGE0MzA5YzQ0MTU1NjVmOWVjcDEsCisgICAgMHgxLmU0MDAwZXA1LCAweDEuNTU1NTVhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTI3CisgICAgMHgxLmU2NTc4NTk4NmZiN2FmMTIxOTIzNDk4MGRjYTRlZjM0cC05MywKKyAgICAweDEuZTZmMzE0cC0xLCAweDEuM2UwZjgwcDEwCisgIH0sCisgIHsgLy8gRW50cnkgMTI4CisgICAgMHgxLmU5YTU3NjkxZjA2YWNiZDM4OTM5MDFlMzc2ODMwNTM3cC0xMjUsCisgICAgMHgxLmU5NzQ3MHAtMSwgMHgxLmRkNjdjMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIDB4MS44NjZlYzkwMDAxN2Q2ODljYTVkZWIxOGM0NzY5ZWZmYnAtMiwKKyAgICAweDEuZjA0MGM4cC0xLCAweDEuZWRkYmFjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAKKyAgICAweDEuZjgzOWQ1MTAxYmNmMzA1ZTA0YzE4N2FmYjUzYTZjNTNwLTEsCisgICAgMHgxLmYwOTFlMnAtMSwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzMQorICAgIDB4MS5hMzc0YzJiMDBiNjIxNzJjZDQ2NzhkZjVlNTAzYjZmMXAtMTMsCisgICAgMHgxLmY2MGMwNHAtMTQsIDB4MS5lMmU0MmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIKKyAgICAweDEuZjg0NzliMTE1NTYxZjE3MDI4YjIzNmZiOGYyYzE3M2ZwLTEsCisgICAgMHgxLmZmMTc0YXAtMSwgMHgxLjExOTk5NnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTMzCisgICAgMHgxLmY5NDdjZjBkZWJiM2Y1MTQ5ZGY2NmUwODM5NmY2NWM1cDMsCisgICAgMHgxLmZmMWZmZXAzLCAweDEuZmRkZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTM0CisgICAgMHgxLmYzYWU2YjM2YzMxNjNjZDJkNDJmMWVkZGY0ZTk1ODg2cC0xLAorICAgIDB4MS5mZjdmZmVwMCwgLTB4MS4yMDNjODhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUKKyAgICAweDEuZjg0MmI1MTI3ZTU2MmJmNGNjMmZiMmFhMzAzMTIzOTNwLTEsCisgICAgMHgxLmZmYmZmZXAtMTAsIDB4MS4zZmZmZmVwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYKKyAgICAweDEuZmMwNDJjZmNhYmQzZDAwYzNmZDdlOWQxNjhhMjAxODJwLTEsCisgICAgMHgxLmZmYzBwLTEsIDB4MS5mZmM3ZmVwMworICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIDB4MS5mODM2Y2QxMjkyN2ZlM2VhMmViOTgxMDQ2MmMyMDhkY3AtMSwKKyAgICAweDEuZmZmNzdlcDEwMCwgLTB4MS5jYjA5NjhwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgMHgxLmZmZjNmZDBjMDYwOGM2MGQ4YzNjOWYwNzY0ODYwN2Q1cDE0LAorICAgIDB4MS5mZmY3ZmVwOSwgMHgxLjgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkKKyAgICAweDEuZjgxMWQzMTQwZDE3Mjk2ZGM2MzNjZDAwYmZkOTYzODdwLTEsCisgICAgMHgxLmZmZjhwLTEsIDB4MS5mZjgwcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDAKKyAgICAweDEuZmU5ZDk3MzhkMGNhOWYxMWY5N2E3MWIxYTM2NjE0NWFwLTEsCisgICAgMHgxLmZmZmVmZXAxLCAtMHgxLmZmZmZmOHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAweDEuZjIwMmIzMDAwMDMwNjlhN2E4ODZlNDRmYmY2MDczYzJwNzIsCisgICAgMHgxLmZmZmYzZXAxMjcsIDB4MS4yM2Q3MTRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIKKyAgICAweDEuYjgzNGExOTI4NzVkNzJhYzgxYjc5MTVjZjg5Nzk2OTBwLTk2LAorICAgIDB4MS5mZmZmYmVwLTEsIDB4MS5wMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDMKKyAgICAweDEuZmZmZmVkMDAwMDI5YmZmZGRlZjU0OTVlNTYwM2NlM2JwLTEsCisgICAgMHgxLmZmZmZlMnAtMSwgMHgxLjQ0NDQzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0NAorICAgIDB4MS5kNmFiNWQwZTdhZTAzNDMzYWQ4MjQ2MTZkMGRiOGIwM3AxNSwKKyAgICAweDEuZmZmZmVlcC00MCwgLTB4MS5hMGVhMGNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDUKKyAgICAweDEuMDAwMDAyZmZmZmZmZmZmZmYyN2ZmZmU0ZmZmZmViYzBwMCwKKyAgICAweDEuZmZmZmZhcC0xLCAtMHgxLmZmZmZmYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0NgorICAgIDB4MS4wMDAwMDAwMDAwMDQwMDAwMDQwMDAwMGQ1NTU1NmQ1NXAwLAorICAgIDB4MS5mZmZmZmNwLTEsIC0weDEucC0yMworICB9LAorICB7IC8vIEVudHJ5IDE0NworICAgIDB4MS4wMDAwMDAwMDAwMDM4MDAwMDM4MDAwMGFjYWFhYmRlYXAwLAorICAgIDB4MS5mZmZmZmNwLTEsIC0weDEuYzBwLTI0CisgIH0sCisgIHsgLy8gRW50cnkgMTQ4CisgICAgMHgxLmVlOGZjOTMwOTU0ZDI5YjNlMjhjNWMxZWFmYjlmN2ZkcDQsCisgICAgMHgxLmZmZmZmY3AtNjcsIC0weDEuMzMzMzRlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgMHgxLjZhMGEwY2ZmZjNmZmEwMGU3NTNhZjg0YzAxMDBmYmYwcDEzLAorICAgIDB4MS5mZmZmZmNwLTEwNiwgLTB4MS4wNzUwNzhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTAKKyAgICAweDEuOWFhYWJjZmZmMmFlM2U3Yzg0ZTg3MDg1NjQwMzU1ZTRwNDgsCisgICAgMHgxLmZmZmZmY3AtMTIwLCAtMHgxLmEyZThiZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDE1MQorICAgIDB4MS5mNTc3N2FmZmZlMmI0NmE0ZGE5ODc1OTA0M2RlNDg2MnAtNTIsCisgICAgMHgxLmZmZmZmY3A4MCwgLTB4MS40MjhmNThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAweDEuNzNkMzMyMWU3ZjI0N2RlZjFlZDRjODE2YzgyNGM3N2RwLTY3LAorICAgIDB4MS5mZmZmZmNwMTE5LCAtMHgxLjFiOTFiNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1MworICAgIDB4MS4wMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDFwMTAsCisgICAgMHgxLmZmZmZmZXAtMTEsIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTQKKyAgICAweDEuZmZmZmZlZmZmZmZmYmZmZmZmZGZmZmZmZWJmZmZmZjFwMCwKKyAgICAweDEuZmZmZmZlcDEsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTUKKyAgICAweDEuY2I1YTBkMDAwMmY1MTY5YTEzZGUzOTg2M2JiNWY5MWRwLTIsCisgICAgMHgxLjQyMWVmYXAtMiwgMHgxLjYyZTQyZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIDB4MS5jYjcyMGRjZWY5MDY5MTUwM2NiZDFlOTQ5ZGI3NjFkOXAtMSwKKyAgICAweDEucC01LCAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgMHgxLnAtNSwKKyAgICAweDEucC01LCAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTgKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMTU5CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTYwCisgICAgMHgxLnAtNDAsCisgICAgMHgxLnAtNSwgMHgxLnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTYxCisgICAgMC4wZiwKKyAgICAweDEucC01LCAweDEucDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjIKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEucDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjMKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEucDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjQKKyAgICAwLjBmLAorICAgIDB4MS5wLTUsIDB4MS5wMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjUKKyAgICAwLjBmLAorICAgIDB4MS5wLTUsIDB4MS5wMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjYKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEucDEwCisgIH0sCisgIHsgLy8gRW50cnkgMTY3CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgMHgxLnAxMgorICB9LAorICB7IC8vIEVudHJ5IDE2OAorICAgIDB4MS4xMTMwMWQwMTI1YjUwYTRlYmJmMWFlZDkzMThjZWFjNXAwLAorICAgIDB4MS5wMywgMHgxLnAtNQorICB9LAorICB7IC8vIEVudHJ5IDE2OQorICAgIDB4MS5wMywKKyAgICAweDEucDMsIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDE3MAorICAgIDB4MS4xZDQ4NzMxNjhiOWFhNzgwNWI4MDI4OTkwZjA3YTk4YnAwLAorICAgIDB4MS5wNSwgMHgxLnAtNQorICB9LAorICB7IC8vIEVudHJ5IDE3MQorICAgIDB4MS5wNSwKKyAgICAweDEucDUsIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDE3MgorICAgIDB4MS5wMjQsCisgICAgMHgxLnAzLCAweDEucDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzMKKyAgICAweDEucDk2LAorICAgIDB4MS5wMywgMHgxLnA1CisgIH0sCisgIHsgLy8gRW50cnkgMTc0CisgICAgMHgxLnA0MCwKKyAgICAweDEucDUsIDB4MS5wMworICB9LAorICB7IC8vIEVudHJ5IDE3NQorICAgIEhVR0VfVkFMRiwKKyAgICAweDEucDUsIDB4MS5wNQorICB9LAorICB7IC8vIEVudHJ5IDE3NgorICAgIEhVR0VfVkFMRiwKKyAgICAweDEucDMsIDB4MS5wMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLnAzLCAweDEucDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTc4CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wNSwgMHgxLnAxMAorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIEhVR0VfVkFMRiwKKyAgICAweDEucDUsIDB4MS5wMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODAKKyAgICAweDEuM2RlYTY0YzEyMzQyMjM1YjQxMjIzZTEzZDc3M2ZiYTJwMCwKKyAgICAweDEucDEwLCAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMTgxCisgICAgMHgxLnAxMCwKKyAgICAweDEucDEwLCAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODIKKyAgICAweDEuNGJmZGFkNTM2MmEyNzFkNDM5N2FmZWM0MmUyMGUwMzZwMCwKKyAgICAweDEucDEyLCAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMTgzCisgICAgMHgxLnAxMiwKKyAgICAweDEucDEyLCAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODQKKyAgICAweDEucDgwLAorICAgIDB4MS5wMTAsIDB4MS5wMworICB9LAorICB7IC8vIEVudHJ5IDE4NQorICAgIEhVR0VfVkFMRiwKKyAgICAweDEucDEwLCAweDEucDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODYKKyAgICAweDEucDk2LAorICAgIDB4MS5wMTIsIDB4MS5wMworICB9LAorICB7IC8vIEVudHJ5IDE4NworICAgIEhVR0VfVkFMRiwKKyAgICAweDEucDEyLCAweDEucDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODgKKyAgICAweDEuMDAwMDAxMjYwNTVjZmQ0NDNjNTM3NjkzMGQxNjlmMzJwMiwKKyAgICAweDEuNmEwOWU2cC0xLCAtMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTg5CisgICAgMHgxLmZmZmZmZGIzZjU0OGE4ZDgyN2I2NWM4OHAtMywKKyAgICAweDEuNmEwOWU2cC0xLCAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTAKKyAgICAweDEuMDAwMDAxMjYwNTVjZmQ0NDNjNTM3NjkzMGQxNjlmMzJwLTIsCisgICAgMHgxLjZhMDllNnAwLCAtMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTkxCisgICAgMHgxLmZmZmZmZGIzZjU0OGE4ZDgyN2I2NWM4OHAxLAorICAgIDB4MS42YTA5ZTZwMCwgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTkyCisgICAgMHgxLjAwMDAwMTI2MDU1Y2ZkNDQzYzUzNzY5MzBkMTY5ZjMycDIsCisgICAgMHgxLjZhMDllNnAtMSwgLTB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDE5MworICAgIDB4MS5mZmZmZmRiM2Y1NDhhOGQ4MjdiNjVjODhwLTMsCisgICAgMHgxLjZhMDllNnAtMSwgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTk0CisgICAgMHgxLjAwMDAwMTI2MDU1Y2ZkNDQzYzUzNzY5MzBkMTY5ZjMycC0yLAorICAgIDB4MS42YTA5ZTZwMCwgLTB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDE5NQorICAgIDB4MS5mZmZmZmRiM2Y1NDhhOGQ4MjdiNjVjODhwMSwKKyAgICAweDEuNmEwOWU2cDAsIDB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDE5NgorICAgIDB4MS4wMDE2MmYzOTE2NjcwZDExOTY5NzE1NGFlMzUxMmMyZHAwLAorICAgIDB4MS42YTA5ZTZwLTEsIC0weDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDE5NworICAgIDB4MS5mZmQzYTU2NWNhZjhkMjMwZGFlMTI1MDY5M2E1NWYyM3AtMSwKKyAgICAweDEuNmEwOWU2cC0xLCAweDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDE5OAorICAgIDB4MS5mZmQzYTU2NjE0NzNjYjI2OWY4OTRiNDBkNmNmOWJhY3AtMSwKKyAgICAweDEuNmEwOWU2cDAsIC0weDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDE5OQorICAgIDB4MS4wMDE2MmYzOGYxYTMzMjMwYmMzNDBiZDM3NTJmYzA5NHAwLAorICAgIDB4MS42YTA5ZTZwMCwgMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDAKKyAgICAweDEuOTQ4YjBmY2Q2ZTllMDY1MjJjM2YzNWJhNzgxOTQ4YjBwMSwKKyAgICAweDEuODBwLTEsIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDEKKyAgICAweDEuNDRwLTIsCisgICAgMHgxLjgwcC0xLCAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDIKKyAgICAweDEuOTQ4YjBmY2Q2ZTllMDY1MjJjM2YzNWJhNzgxOTQ4YjBwLTMsCisgICAgMHgxLjgwcDAsIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDMKKyAgICAweDEuNDRwMiwKKyAgICAweDEuODBwMCwgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgMHgxLjI3OWE3NDU5MDMzMWM0ZDIxOGY4MWU0YWZiMjU3ZDA2cDAsCisgICAgMHgxLjgwcC0xLCAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIDB4MS5iYjY3YWU4NTg0Y2FhNzNiMjU3NDJkNzA3OGI4M2I4OXAtMSwKKyAgICAweDEuODBwLTEsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDYKKyAgICAweDEuYTIwYmQ3MDBjMmMzZGZjMDQyY2MxYWVkNzg3MWRiNDVwLTEsCisgICAgMHgxLjgwcDAsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjA3CisgICAgMHgxLjM5ODhlMTQwOTIxMmU3ZDAzMjE5MTQzMjFhNTU2NDczcDAsCisgICAgMHgxLjgwcDAsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDgKKyAgICAweDEuMDAxMjZhMGI5M2RiMjk0Y2FiZTMzZGE3MzU0MzdmNTFwMCwKKyAgICAweDEuODBwLTEsIC0weDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDIwOQorICAgIDB4MS5mZmRiMmU4ZWQyYTFmZTcxYmQ1OWZkZDYxMDMxMzA0NnAtMSwKKyAgICAweDEuODBwLTEsIDB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjEwCisgICAgMHgxLmZmY2MxYzU5NzNiMjEyOWE1YjE0MjRlMGM4ODc4NmI4cC0xLAorICAgIDB4MS44MHAwLCAtMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTEKKyAgICAweDEuMDAxOWY0NzRhYTE5MDAzOGM2YWY3NzVkOTJmMWQ3MjVwMCwKKyAgICAweDEuODBwMCwgMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAtMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjEzCisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjE0CisgICAgMHgxLnAtNCwKKyAgICAweDEucDEsIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTUKKyAgICAweDEucDQsCisgICAgMHgxLnAxLCAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTYKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIxNworICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwLTEsCisgICAgMHgxLnAxLCAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIxOQorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAwLAorICAgIDB4MS5wMSwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIyMAorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIC0weDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjIyCisgICAgMHgxLmZmYTc0ZWEzODFlZmMyMTdhNzczZjE1YzAyNWY3YzBkcC0xLAorICAgIDB4MS5wMSwgLTB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjIzCisgICAgMHgxLjAwMmM2MDVlMmU4Y2VjNTA2ZDIxYmZjODlhMjNhMDEwcDAsCisgICAgMHgxLnAxLCAweDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDIyNAorICAgIDB4MS5wNDAsCisgICAgMHgxLnAtMTAsIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjUKKyAgICAweDEucC00MCwKKyAgICAweDEucC0xMCwgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjI2CisgICAgMHgxLmZlMDEzZjYwNDVlNDBhN2M0MTQ5OTIyM2I0YTM4Y2U4cC0xLAorICAgIDB4MS4wMDQwcDAsIC0weDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjcKKyAgICAweDEuMDEwMDYwMTAwMXAwLAorICAgIDB4MS4wMDQwcDAsIDB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDIyOAorICAgIDB4MS5wNSwKKyAgICAweDEucC0xMCwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjkKKyAgICAweDEucC01LAorICAgIDB4MS5wLTEwLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjMwCisgICAgMHgxLmZmYzAwYmZkODA4YmUwODczNjUzNjQ3NDQ4MjIwZmRmcC0xLAorICAgIDB4MS4wMDQwcDAsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjMxCisgICAgMHgxLjAwMWZmZTAwM2ZmNjAxYmZhYzEwN2NhNmIyOWEwYzMxcDAsCisgICAgMHgxLjAwNDBwMCwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIzMgorICAgIDB4MS4wMWJkMWU3NzE3MGI0MTVlNzYyNjYyMWViNWFhZmY2MXAwLAorICAgIDB4MS5wLTEwLCAtMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzMKKyAgICAweDEuZmM4YmM0ODY2ZThhZDJiOTYzZTE4MjhiMDc2MWNiYzZwLTEsCisgICAgMHgxLnAtMTAsIDB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjM0CisgICAgMHgxLmZmZmZlMDA0MDA1NTM1NTg0NDQ0M2RmODY4MGE4ZTA1cC0xLAorICAgIDB4MS4wMDQwcDAsIC0weDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDIzNQorICAgIDB4MS4wMDAwMGZmZTAwZDUyNTYyODUzNDBlNGYzYWQzNjI4N3AwLAorICAgIDB4MS4wMDQwcDAsIDB4MS5wLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjM2CisgICAgMHgxLjAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMTAwMDAwMXAtMTI4LAorICAgIDB4MS5mZmZmZmVwMTI3LCAtMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjM3CisgICAgMHgxLmZmZmZmZXAxMjcsCisgICAgMHgxLmZmZmZmZXAxMjcsIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDIzOAorICAgIEhVR0VfVkFMRiwKKyAgICAweDEucC0xNDksIC0weDEuZTY2NjY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjM5CisgICAgMHgxLjVkYjRlY2FiM2UxY2I5NDJmYzkwYTAwM2U3N2RhMjgycC0xNDIsCisgICAgMHgxLnAtMTQ5LCAweDEuZTY2NjY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjQwCisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZlcC03LCAweDEuZmZmZmZlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDEKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmVwLTcsIDB4MS5wNgorICB9LAorICB7IC8vIEVudHJ5IDI0MgorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZXAtNywgMHgxLjAwMDAwMnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjQzCisgICAgMC4wZiwKKyAgICAweDEucC02LCAweDEuZmZmZmZlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDQKKyAgICAwLjBmLAorICAgIDB4MS5wLTYsIDB4MS5wNgorICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIDAuMGYsCisgICAgMHgxLnAtNiwgMHgxLjAwMDAwMnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjQ2CisgICAgMC4wZiwKKyAgICAweDEuMDAwMDAycC02LCAweDEuZmZmZmZlcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDcKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDJwLTYsIDB4MS5wNgorICB9LAorICB7IC8vIEVudHJ5IDI0OAorICAgIDAuMGYsCisgICAgMHgxLjAwMDAwMnAtNiwgMHgxLjAwMDAwMnA2CisgIH0sCisgIHsgLy8gRW50cnkgMjQ5CisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZlcC02LCAweDEuZmZmZmZlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmVwLTYsIDB4MS5wNQorICB9LAorICB7IC8vIEVudHJ5IDI1MQorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZXAtNiwgMHgxLjAwMDAwMnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjUyCisgICAgMC4wZiwKKyAgICAweDEucC01LCAweDEuZmZmZmZlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTMKKyAgICAwLjBmLAorICAgIDB4MS5wLTUsIDB4MS5wNQorICB9LAorICB7IC8vIEVudHJ5IDI1NAorICAgIDAuMGYsCisgICAgMHgxLnAtNSwgMHgxLjAwMDAwMnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjU1CisgICAgMC4wZiwKKyAgICAweDEuMDAwMDAycC01LCAweDEuZmZmZmZlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTYKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDJwLTUsIDB4MS5wNQorICB9LAorICB7IC8vIEVudHJ5IDI1NworICAgIDAuMGYsCisgICAgMHgxLjAwMDAwMnAtNSwgMHgxLjAwMDAwMnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjU4CisgICAgMHgxLjAwMDAxYzVjODc5ODIzZTNhZjM5YmFhMjIxZGY4NGIwcC02NCwKKyAgICAweDEuZmZmZmZlcC01LCAweDEuZmZmZmZlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTkKKyAgICAweDEuZmZmZmUwMDAwMGVmZmZmYmEwMDAwZTM3ZmZkZGUwcC02NSwKKyAgICAweDEuZmZmZmZlcC01LCAweDEucDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjAKKyAgICAweDEuZmZmZjJlOGUxMjhmMDdmOGFhOTVmYjhiMzVkNzJlYTRwLTY1LAorICAgIDB4MS5mZmZmZmVwLTUsIDB4MS4wMDAwMDJwNAorICB9LAorICB7IC8vIEVudHJ5IDI2MQorICAgIDB4MS4wMDAwMmM1Yzg5ZDVlYzZjYTRkN2M4YWNjMDE3YjdjOXAtNjQsCisgICAgMHgxLnAtNCwgMHgxLmZmZmZmZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMjYyCisgICAgMHgxLnAtNjQsCisgICAgMHgxLnAtNCwgMHgxLnA0CisgIH0sCisgIHsgLy8gRW50cnkgMjYzCisgICAgMHgxLmZmZmY0ZThlMDZjN2U4YTJhODRkYWVkOGVjNTZkNmMzcC02NSwKKyAgICAweDEucC00LCAweDEuMDAwMDAycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAweDEuMDAwMDRjNWM5MTIxN2UwMmE0NTkyYmE3YWQ1ZGYzMmVwLTY0LAorICAgIDB4MS4wMDAwMDJwLTQsIDB4MS5mZmZmZmVwMworICB9LAorICB7IC8vIEVudHJ5IDI2NQorICAgIDB4MS4wMDAwMjAwMDAxZTAwMDExODAwMDcxYzAwMjIyMDAwN3AtNjQsCisgICAgMHgxLjAwMDAwMnAtNCwgMHgxLnA0CisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgMHgxLmZmZmY4ZThkZjRkOWE4MzUxMzIwYzA1ZDNkODE0ZjlmcC02NSwKKyAgICAweDEuMDAwMDAycC00LCAweDEuMDAwMDAycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjcKKyAgICAweDEuMDAwMDA4YTJiMjY4ODRmMTA2OGI4MTg4OTQ2N2Q2N2ZwLTI0LAorICAgIDB4MS5mZmZmZmVwLTQsIDB4MS5mZmZmZmVwMgorICB9LAorICB7IC8vIEVudHJ5IDI2OAorICAgIDB4MS5mZmZmZjAwMDAwMzdmZmZmOTAwMDAwOGJmZmZmOTBwLTI1LAorICAgIDB4MS5mZmZmZmVwLTQsIDB4MS5wMworICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIDB4MS5mZmZmYWQ3NTNkODI1ZGZjZGQ2NWU0ZWE1NGNjY2ViNXAtMjUsCisgICAgMHgxLmZmZmZmZXAtNCwgMHgxLjAwMDAwMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMjcwCisgICAgMHgxLjAwMDAxMGEyYjJjOTlhODU3MDdlOGYxM2RjNjQ4NzEwcC0yNCwKKyAgICAweDEucC0zLCAweDEuZmZmZmZlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzEKKyAgICAweDEucC0yNCwKKyAgICAweDEucC0zLCAweDEucDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzIKKyAgICAweDEuZmZmZmJkNzUzYjU2MDdkYTJjMjYwMDY0ODIzYjMwYTdwLTI1LAorICAgIDB4MS5wLTMsIDB4MS4wMDAwMDJwMworICB9LAorICB7IC8vIEVudHJ5IDI3MworICAgIDB4MS4wMDAwMjBhMmI0MzNjNWI5MTcyOWZlMDQ5MzMyMWQzZnAtMjQsCisgICAgMHgxLjAwMDAwMnAtMywgMHgxLmZmZmZmZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjc0CisgICAgMHgxLjAwMDAxMDAwMDA3MDAwMDFjMDAwMDQ2MDAwMDdwLTI0LAorICAgIDB4MS4wMDAwMDJwLTMsIDB4MS5wMworICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIDB4MS5mZmZmZGQ3NTM4NGQ1YjcxNWU5NDM3Njk5NTM0ODgzYnAtMjUsCisgICAgMHgxLjAwMDAwMnAtMywgMHgxLjAwMDAwMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMjc2CisgICAgMHgxLjAwMDAwMThiOTBjMmYwMmE4MGYzYmI4MmFhMTJlOTVkcC04LAorICAgIDB4MS5mZmZmZmVwLTMsIDB4MS5mZmZmZmVwMQorICB9LAorICB7IC8vIEVudHJ5IDI3NworICAgIDB4MS5mZmZmZjgwMDAwMGJmZmZmZjgwMDAwMDJwLTksCisgICAgMHgxLmZmZmZmZXAtMywgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjc4CisgICAgMHgxLmZmZmZlMWQxYmRkMGJkYzZiNDZlYTY0YTQyYjFiYWQycC05LAorICAgIDB4MS5mZmZmZmVwLTMsIDB4MS4wMDAwMDJwMgorICB9LAorICB7IC8vIEVudHJ5IDI3OQorICAgIDB4MS4wMDAwMDU4YjkwY2YxZTZkOTdmOWNhMTRkYmNjMTYyOHAtOCwKKyAgICAweDEucC0yLCAweDEuZmZmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAweDEucC04LAorICAgIDB4MS5wLTIsIDB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDI4MQorICAgIDB4MS5mZmZmZTlkMWJkN2MwNGJjNDgyNTE0N2E4YzBlNjNlM3AtOSwKKyAgICAweDEucC0yLCAweDEuMDAwMDAycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAweDEuMDAwMDBkOGI5MTBiN2FmNDUxYTY0MmU2ZDBiNjZiMDZwLTgsCisgICAgMHgxLjAwMDAwMnAtMiwgMHgxLmZmZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMjgzCisgICAgMHgxLjAwMDAwODAwMDAxODAwMDAyMDAwMDAxMHAtOCwKKyAgICAweDEuMDAwMDAycC0yLCAweDEucDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODQKKyAgICAweDEuZmZmZmY5ZDFiZDFhOTJhNWQxMTA4OGVkMTc0MTdmNDFwLTksCisgICAgMHgxLjAwMDAwMnAtMiwgMHgxLjAwMDAwMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjg1CisgICAgMHgxLmZmZmZmZWM1Yzg2MjNmYjI1ZDdkMDZhYzYxYTMwNjNmcC0zLAorICAgIDB4MS5mZmZmZmVwLTIsIDB4MS5mZmZmZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDI4NgorICAgIDB4MS5mZmZmZmMwMDAwMDJwLTMsCisgICAgMHgxLmZmZmZmZXAtMiwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjg3CisgICAgMHgxLmZmZmZmNjc0NmY0ZDA4ODI4OWI4ODBmZTAyYWRiZmRlcC0zLAorICAgIDB4MS5mZmZmZmVwLTIsIDB4MS4wMDAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDI4OAorICAgIDB4MS4wMDAwMDE2MmU0MzBlNWExOGY2MTE5ZTNjMDIyODJhNXAtMiwKKyAgICAweDEucC0xLCAweDEuZmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODkKKyAgICAweDEucC0yLAorICAgIDB4MS5wLTEsIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDI5MAorICAgIDB4MS5mZmZmZmE3NDZmNDdmMTYwZmNmODkwZTNiODAxYWVkZHAtMywKKyAgICAweDEucC0xLCAweDEuMDAwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTEKKyAgICAweDEuMDAwMDA1NjJlNDM2NzEzMjQ2ZjdhMDEzNGM4Mjg3ZWFwLTIsCisgICAgMHgxLjAwMDAwMnAtMSwgMHgxLmZmZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjkyCisgICAgMHgxLjAwMDAwNDAwMDAwNHAtMiwKKyAgICAweDEuMDAwMDAycC0xLCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTMKKyAgICAweDEuMDAwMDAxM2EzN2E0ZTE4ZjA1MTlhNjAzOTU0YTViMGJwLTIsCisgICAgMHgxLjAwMDAwMnAtMSwgMHgxLjAwMDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjk0CisgICAgMHgxLmZmZmZmZTAwMDAwMWZmZmZmZjAwMDAwMGFhYWFhYTgwcC0xLAorICAgIDB4MS5mZmZmZmVwLTEsIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTUKKyAgICAweDEuZmZmZmZlcC0xLAorICAgIDB4MS5mZmZmZmVwLTEsIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDI5NgorICAgIDB4MS5mZmZmZmRmZmZmZmMwMDAwMDIwMDAwMDRhYWFhYWFmZnAtMSwKKyAgICAweDEuZmZmZmZlcC0xLCAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTcKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjk4CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjk5CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzAwCisgICAgMHgxLjAwMDAwMWZmZmZmZGZmZmZmZTAwMDAwMzU1NTU1M2ZmcDAsCisgICAgMHgxLjAwMDAwMnAwLCAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzAxCisgICAgMHgxLjAwMDAwMnAwLAorICAgIDB4MS4wMDAwMDJwMCwgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzAyCisgICAgMHgxLjAwMDAwMjAwMDAwNDAwMDAwNDAwMDAwNTU1NTU1OHAwLAorICAgIDB4MS4wMDAwMDJwMCwgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgMHgxLjZhMDllNTM1NzViMTIzNjI1Y2MxOTY4YTY2NTU4MWE0cDAsCisgICAgMHgxLmZmZmZmZXAwLCAweDEuZmZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzA0CisgICAgMHgxLjZhMDllNWIyZWVjOTY3Y2Q5N2IyZWZmNzVmNDcxNDkzcDAsCisgICAgMHgxLmZmZmZmZXAwLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzA1CisgICAgMHgxLjZhMDllNmFkZTBmYTczMTkwNTJjNDk0OGRlYTQ4YTc2cDAsCisgICAgMHgxLmZmZmZmZXAwLCAweDEuMDAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzA2CisgICAgMHgxLjZhMDllNWVhN2FhMzkwZGJmODY4YjcyNzhiNzQ0ODI5cDAsCisgICAgMHgxLnAxLCAweDEuZmZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTM2NmVhOTU3ZDNlcDAsCisgICAgMHgxLnAxLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzA4CisgICAgMHgxLjZhMDllNzYyZTVlZmJiZDcyMTcwMTgyNTBhM2FiMTk0cDAsCisgICAgMHgxLnAxLCAweDEuMDAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzA5CisgICAgMHgxLjZhMDllNzU0ODQ4NzVjNDdjM2NlZTAxZDlmMzQ4YmQ4cDAsCisgICAgMHgxLjAwMDAwMnAxLCAweDEuZmZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzEwCisgICAgMHgxLjZhMDllN2QxZmRhMjdiZjc3ZDQ1MjcyZGQyZDgzYTRicDAsCisgICAgMHgxLjAwMDAwMnAxLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzExCisgICAgMHgxLjZhMDllOGNjZWZkOTNkY2JlY2Y1NGQyMzNlYTgyNjVicDAsCisgICAgMHgxLjAwMDAwMnAxLCAweDEuMDAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzEyCisgICAgMHgxLjZhMDllNThmZjgyYTRlY2VkYjczZjc2NmQzZDA3NThkcDAsCisgICAgMHgxLmZmZmZmZXAxLCAweDEuZmZmZmZlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzEzCisgICAgMHgxLjZhMDllNjBkNzE0MzBkMWFkNjFiNDVkNWQxYWJkZjE1cDAsCisgICAgMHgxLmZmZmZmZXAxLCAweDEucC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzE0CisgICAgMHgxLjZhMDllNzA4NjM3NTBjMjdjM2RkNWMwZWNkY2U1MjcxcDAsCisgICAgMHgxLmZmZmZmZXAxLCAweDEuMDAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzE1CisgICAgMHgxLjZhMDllNWVhN2FhMzkwZGJmODY4YjcyNzhiNzQ0ODI5cDAsCisgICAgMHgxLnAyLCAweDEuZmZmZmZlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzE2CisgICAgMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTM2NmVhOTU3ZDNlcDAsCisgICAgMHgxLnAyLCAweDEucC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzE3CisgICAgMHgxLjZhMDllNzYyZTVlZmJiZDcyMTcwMTgyNTBhM2FiMTk0cDAsCisgICAgMHgxLnAyLCAweDEuMDAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzE4CisgICAgMHgxLjZhMDllNjlmN2Y5NTQ5NTBhMWZjZTBhMWIyYzM2MmQwcDAsCisgICAgMHgxLjAwMDAwMnAyLCAweDEuZmZmZmZlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzE5CisgICAgMHgxLjZhMDllNzFjZjhhZjc1M2VkYjk3MDBhZDkwNmM5Y2Q5cDAsCisgICAgMHgxLjAwMDAwMnAyLCAweDEucC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzIwCisgICAgMHgxLjZhMDllODE3ZWFlNDRmOTA0OWQ1MzJjZGEyYTkwY2I2cDAsCisgICAgMHgxLjAwMDAwMnAyLCAweDEuMDAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzIxCisgICAgMHgxLjRiZmRhY2QzOTc4YWRmOWYzYjY0ZmUwMWY0MDU5M2FlcDAsCisgICAgMHgxLmZmZmZmZXAyLCAweDEuZmZmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzIyCisgICAgMHgxLjRiZmRhZDI5ZTJlY2I1NDAwNWE2ZGJlYzY3YzVlNDEzcDAsCisgICAgMHgxLmZmZmZmZXAyLCAweDEucC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzIzCisgICAgMHgxLjRiZmRhZGQ2NzliMGEzY2M0MGVjYjYwYWZkYzRhNTUycDAsCisgICAgMHgxLmZmZmZmZXAyLCAweDEuMDAwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzI0CisgICAgMHgxLjRiZmRhY2ZkMTc0MDY3ZWE0ZDQzZjhiMDlmOTc0ZDg2cDAsCisgICAgMHgxLnAzLCAweDEuZmZmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzI1CisgICAgMHgxLjRiZmRhZDUzNjJhMjcxZDQzOTdhZmVjNDJlMjBlMDM2cDAsCisgICAgMHgxLnAzLCAweDEucC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzI2CisgICAgMHgxLjRiZmRhZGZmZjk2NmM4ZjJiOGY0NGIxMzdmYmZhYTk2cDAsCisgICAgMHgxLnAzLCAweDEuMDAwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzI3CisgICAgMHgxLjRiZmRhZDUwMTZhYjBiOTEzNGUwNTc0YWJjYTc4YjdhcDAsCisgICAgMHgxLjAwMDAwMnAzLCAweDEuZmZmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzI4CisgICAgMHgxLjRiZmRhZGE2NjIwZDdlMGQ2NDg3ZmQ5YmU2NDg4N2EzcDAsCisgICAgMHgxLjAwMDAwMnAzLCAweDEucC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzI5CisgICAgMHgxLjRiZmRhZTUyZjhkMmE2NTA2Yjc0Y2UyMzJmZGNkMjkxcDAsCisgICAgMHgxLjAwMDAwMnAzLCAweDEuMDAwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzMwCisgICAgMHgxLjMwNmZlMDViNTMzMTMxYzI3NjEyY2ZmZjdhMGZmZGIwcDAsCisgICAgMHgxLmZmZmZmZXAzLCAweDEuZmZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzMxCisgICAgMHgxLjMwNmZlMDkwMTQ3MzNmYzE4ZjJhOGU1YmM4YTMwY2RjcDAsCisgICAgMHgxLmZmZmZmZXAzLCAweDEucC00CisgIH0sCisgIHsgLy8gRW50cnkgMzMyCisgICAgMHgxLjMwNmZlMGY5OTZmNzc3MmM5YTk0YzE2MDgzNDQ2MjYycDAsCisgICAgMHgxLmZmZmZmZXAzLCAweDEuMDAwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgMzMzCisgICAgMHgxLjMwNmZlMDZlNWEyZjJlOGM2MjBmN2U1NWNjODAzZGJhcDAsCisgICAgMHgxLnA0LCAweDEuZmZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzM0CisgICAgMHgxLjMwNmZlMGEzMWI3MTUyZGU4ZDVhNDYzMDVjODVlZGVjcDAsCisgICAgMHgxLnA0LCAweDEucC00CisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgMHgxLjMwNmZlMTBjOWRmNWI2ZWZiZDQwMGI3ODA2MDA1ZmE5cDAsCisgICAgMHgxLnA0LCAweDEuMDAwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgMzM2CisgICAgMHgxLjMwNmZlMDk0NjgyYWYyOWM4ZmU5ZjczNWZiMWM0MDgxcDAsCisgICAgMHgxLjAwMDAwMnA0LCAweDEuZmZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzM3CisgICAgMHgxLjMwNmZlMGM5Mjk2ZDQzOTRkZjVmOTliOWJkMWE0N2QycDAsCisgICAgMHgxLjAwMDAwMnA0LCAweDEucC00CisgIH0sCisgIHsgLy8gRW50cnkgMzM4CisgICAgMHgxLjMwNmZlMTMyYWJmMjAwZjI1N2M2MTJlMDdmMTQ5YWEzcDAsCisgICAgMHgxLjAwMDAwMnA0LCAweDEuMDAwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgMHgxLjFkNDg3MmVlYmI5ZGEwM2JiYWM1YWY3OWIwY2Y5NDA5cDAsCisgICAgMHgxLmZmZmZmZXA0LCAweDEuZmZmZmZlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzQwCisgICAgMHgxLjFkNDg3MzBkYTE1NzBhN2E4NWVhMWZjMWZjZjg4ZmRkcDAsCisgICAgMHgxLmZmZmZmZXA0LCAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMzQxCisgICAgMHgxLjFkNDg3MzRiNmNjOWU5MDIxNDhmYWZjZWZhOWVhYTA2cDAsCisgICAgMHgxLmZmZmZmZXA0LCAweDEuMDAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgMzQyCisgICAgMHgxLjFkNDg3MmY3YTVlMTMzNjAxZWYzYjQ5NWYzZjg5YTEycDAsCisgICAgMHgxLnA1LCAweDEuZmZmZmZlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzQzCisgICAgMHgxLjFkNDg3MzE2OGI5YWE3ODA1YjgwMjg5OTBmMDdhOThicDAsCisgICAgMHgxLnA1LCAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMzQ0CisgICAgMHgxLjFkNDg3MzU0NTcwZDk5Y2FjY2ZiZGI3ZTM1ZmYwZGYxcDAsCisgICAgMHgxLnA1LCAweDEuMDAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgMzQ1CisgICAgMHgxLjFkNDg3MzA5N2E2ODNmYzAxMzA4ZDRhNzE2MTViODIwcDAsCisgICAgMHgxLjAwMDAwMnA1LCAweDEuZmZmZmZlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMzQ2CisgICAgMHgxLjFkNDg3MzI4NjAyMWM3YTMzMjQ5NmVlNGFkOTFhZGU5cDAsCisgICAgMHgxLjAwMDAwMnA1LCAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMzQ3CisgICAgMHgxLjFkNDg3MzY2MmI5NGUxNzM2OTM5YTUwM2Q4M2M1ZTQycDAsCisgICAgMHgxLjAwMDAwMnA1LCAweDEuMDAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgMHgxLjExMzAxY2ViMjA1NDFmZjNmNjU1ZTNiZDEyMjcxYjNlcDAsCisgICAgMHgxLmZmZmZmZXA1LCAweDEuZmZmZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgMzQ5CisgICAgMHgxLjExMzAxY2ZjZTBmNDk0MzA0ZTYzMDc5OWZjOGIxODFmcDAsCisgICAgMHgxLmZmZmZmZXA1LCAweDEucC02CisgIH0sCisgIHsgLy8gRW50cnkgMzUwCisgICAgMHgxLjExMzAxZDIwNjIzNTgwMWVmNTU4MDg5NDM1NGY5MDBjcDAsCisgICAgMHgxLmZmZmZmZXA1LCAweDEuMDAwMDAycC02CisgIH0sCisgIHsgLy8gRW50cnkgMzUxCisgICAgMHgxLjExMzAxY2VmNjUxNDkxODZhMGVjYjYwNzEzNTY1YjQ1cDAsCisgICAgMHgxLnA2LCAweDEuZmZmZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgMzUyCisgICAgMHgxLjExMzAxZDAxMjViNTBhNGViYmYxYWVkOTMxOGNlYWM1cDAsCisgICAgMHgxLnA2LCAweDEucC02CisgIH0sCisgIHsgLy8gRW50cnkgMzUzCisgICAgMHgxLjExMzAxZDI0YTZmNWZmNTRlOGQ4MTFhNGI5NzhiNTRmcDAsCisgICAgMHgxLnA2LCAweDEuMDAwMDAycC02CisgIH0sCisgIHsgLy8gRW50cnkgMzU0CisgICAgMHgxLjExMzAxY2Y3ZWU5NTY4MTBlZGQ5NGQxYzc2OTdmMzRicDAsCisgICAgMHgxLjAwMDAwMnA2LCAweDEuZmZmZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgMzU1CisgICAgMHgxLjExMzAxZDA5YWYzNWU5ZjA4ZWMwYjY1NjRjZmQ0ZDNhcDAsCisgICAgMHgxLjAwMDAwMnA2LCAweDEucC02CisgIH0sCisgIHsgLy8gRW50cnkgMzU2CisgICAgMHgxLjExMzAxZDJkMzA3NmYxMjVjNzZmNjliZjEwN2Y0MDUycDAsCisgICAgMHgxLjAwMDAwMnA2LCAweDEuMDAwMDAycC02CisgIH0sCisgIHsgLy8gRW50cnkgMzU3CisgICAgMHgxLmZmZmM5ZDFlYWZmMWUyYmM3MDhmYmI5ZmMxNDFkMTg2cDEyNywKKyAgICAweDEuZmZmZmZjcDAsIDB4MS5mZmZmZmNwNgorICB9LAorICB7IC8vIEVudHJ5IDM1OAorICAgIDB4MS5mZmZkNGU4ZmI4MzkzM2NiZjVmODI3ZTI1ODFmMjBkY3AxMjcsCisgICAgMHgxLmZmZmZmY3AwLCAweDEuZmZmZmZlcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTkKKyAgICAweDEuZmZmZTAwMDBmZGZmYWNhODE0NThmODBlYzMwMWEyYzhwMTI3LAorICAgIDB4MS5mZmZmZmNwMCwgMHgxLnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzYwCisgICAgMHgxLmZmZmY2MmU0NDIwYTZiMDZkNzAyZjRlMmFhZmZhNGU1cDEyNywKKyAgICAweDEuZmZmZmZjcDAsIDB4MS4wMDAwMDJwNworICB9LAorICB7IC8vIEVudHJ5IDM2MQorICAgIEhVR0VfVkFMRiwKKyAgICAweDEuZmZmZmZjcDAsIDB4MS4wMDAwMDRwNworICB9LAorICB7IC8vIEVudHJ5IDM2MgorICAgIDB4MS5mZmZkOWQxZDNlMDBkOTliZGZlMzYxOWYwNWYyZWNjMXAxMjcsCisgICAgMHgxLmZmZmZmZXAwLCAweDEuZmZmZmZjcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjMKKyAgICAweDEuZmZmZTRlOGVhMDAwYzNmOTlkODRkODg2YzAzODExZmFwMTI3LAorICAgIDB4MS5mZmZmZmVwMCwgMHgxLmZmZmZmZXA2CisgIH0sCisgIHsgLy8gRW50cnkgMzY0CisgICAgMHgxLmZmZmYwMDAwM2Y3ZmY1OTUwMTQ1OGZhMDc2MTU4NjhicDEyNywKKyAgICAweDEuZmZmZmZlcDAsIDB4MS5wNworICB9LAorICB7IC8vIEVudHJ5IDM2NQorICAgIEhVR0VfVkFMRiwKKyAgICAweDEuZmZmZmZlcDAsIDB4MS4wMDAwMDJwNworICB9LAorICB7IC8vIEVudHJ5IDM2NgorICAgIEhVR0VfVkFMRiwKKyAgICAweDEuZmZmZmZlcDAsIDB4MS4wMDAwMDRwNworICB9LAorICB7IC8vIEVudHJ5IDM2NworICAgIDB4MS5mZmZlOWQxYzRiMGYzN2Y0MTNkNDRjNjZjMDQ4MTgzNHAxMjcsCisgICAgMHgxLnAxLCAweDEuZmZmZmZjcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjgKKyAgICAweDEuZmZmZjRlOGUwNmM3ZThhMmE4NGRhZWQ4ZWM1NmQ2YzNwMTI3LAorICAgIDB4MS5wMSwgMHgxLmZmZmZmZXA2CisgIH0sCisgIHsgLy8gRW50cnkgMzY5CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wMSwgMHgxLnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzcwCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wMSwgMHgxLjAwMDAwMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzcxCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wMSwgMHgxLjAwMDAwNHA3CisgIH0sCisgIHsgLy8gRW50cnkgMzcyCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS4wMDAwMDJwMSwgMHgxLmZmZmZmY3A2CisgIH0sCisgIHsgLy8gRW50cnkgMzczCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS4wMDAwMDJwMSwgMHgxLmZmZmZmZXA2CisgIH0sCisgIHsgLy8gRW50cnkgMzc0CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS4wMDAwMDJwMSwgMHgxLnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzc1CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS4wMDAwMDJwMSwgMHgxLjAwMDAwMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzc2CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS4wMDAwMDJwMSwgMHgxLjAwMDAwNHA3CisgIH0sCisgIHsgLy8gRW50cnkgMzc3CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS4wMDAwMDRwMSwgMHgxLmZmZmZmY3A2CisgIH0sCisgIHsgLy8gRW50cnkgMzc4CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS4wMDAwMDRwMSwgMHgxLmZmZmZmZXA2CisgIH0sCisgIHsgLy8gRW50cnkgMzc5CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS4wMDAwMDRwMSwgMHgxLnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzgwCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS4wMDAwMDRwMSwgMHgxLjAwMDAwMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzgxCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS4wMDAwMDRwMSwgMHgxLjAwMDAwNHA3CisgIH0sCisgIHsgLy8gRW50cnkgMzgyCisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZjcDAsIC0weDEuMmMwMDA0cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODMKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmNwMCwgLTB4MS4yYzAwMDJwNworICB9LAorICB7IC8vIEVudHJ5IDM4NAorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmY3AwLCAtMHgxLjJjcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODUKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmNwMCwgLTB4MS4yYmZmZmVwNworICB9LAorICB7IC8vIEVudHJ5IDM4NgorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmY3AwLCAtMHgxLjJiZmZmY3A3CisgIH0sCisgIHsgLy8gRW50cnkgMzg3CisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZlcDAsIC0weDEuMmMwMDA0cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODgKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmVwMCwgLTB4MS4yYzAwMDJwNworICB9LAorICB7IC8vIEVudHJ5IDM4OQorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZXAwLCAtMHgxLjJjcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTAKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmVwMCwgLTB4MS4yYmZmZmVwNworICB9LAorICB7IC8vIEVudHJ5IDM5MQorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZXAwLCAtMHgxLjJiZmZmY3A3CisgIH0sCisgIHsgLy8gRW50cnkgMzkyCisgICAgMC4wZiwKKyAgICAweDEucDEsIC0weDEuMmMwMDA0cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTMKKyAgICAwLjBmLAorICAgIDB4MS5wMSwgLTB4MS4yYzAwMDJwNworICB9LAorICB7IC8vIEVudHJ5IDM5NAorICAgIDAuMGYsCisgICAgMHgxLnAxLCAtMHgxLjJjcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTUKKyAgICAwLjBmLAorICAgIDB4MS5wMSwgLTB4MS4yYmZmZmVwNworICB9LAorICB7IC8vIEVudHJ5IDM5NgorICAgIDAuMGYsCisgICAgMHgxLnAxLCAtMHgxLjJiZmZmY3A3CisgIH0sCisgIHsgLy8gRW50cnkgMzk3CisgICAgMC4wZiwKKyAgICAweDEuMDAwMDAycDEsIC0weDEuMmMwMDA0cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTgKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDJwMSwgLTB4MS4yYzAwMDJwNworICB9LAorICB7IC8vIEVudHJ5IDM5OQorICAgIDAuMGYsCisgICAgMHgxLjAwMDAwMnAxLCAtMHgxLjJjcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDAKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDJwMSwgLTB4MS4yYmZmZmVwNworICB9LAorICB7IC8vIEVudHJ5IDQwMQorICAgIDAuMGYsCisgICAgMHgxLjAwMDAwMnAxLCAtMHgxLjJiZmZmY3A3CisgIH0sCisgIHsgLy8gRW50cnkgNDAyCisgICAgMC4wZiwKKyAgICAweDEuMDAwMDA0cDEsIC0weDEuMmMwMDA0cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDMKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDRwMSwgLTB4MS4yYzAwMDJwNworICB9LAorICB7IC8vIEVudHJ5IDQwNAorICAgIDAuMGYsCisgICAgMHgxLjAwMDAwNHAxLCAtMHgxLjJjcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDUKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDRwMSwgLTB4MS4yYmZmZmVwNworICB9LAorICB7IC8vIEVudHJ5IDQwNgorICAgIDAuMGYsCisgICAgMHgxLjAwMDAwNHAxLCAtMHgxLjJiZmZmY3A3CisgIH0sCisgIHsgLy8gRW50cnkgNDA3CisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGIycC0yLCAweDEuYzMwYzJjcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDgKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjJwLTIsIDB4MS5jMzBjMmVwOAorICB9LAorICB7IC8vIEVudHJ5IDQwOQorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiMnAtMiwgMHgxLmMzMGMzMHA4CisgIH0sCisgIHsgLy8gRW50cnkgNDEwCisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGIycC0yLCAweDEuYzMwYzMycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTEKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjJwLTIsIDB4MS5jMzBjMzRwOAorICB9LAorICB7IC8vIEVudHJ5IDQxMgorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiNHAtMiwgMHgxLmMzMGMyY3A4CisgIH0sCisgIHsgLy8gRW50cnkgNDEzCisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGI0cC0yLCAweDEuYzMwYzJlcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTQKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjRwLTIsIDB4MS5jMzBjMzBwOAorICB9LAorICB7IC8vIEVudHJ5IDQxNQorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiNHAtMiwgMHgxLmMzMGMzMnA4CisgIH0sCisgIHsgLy8gRW50cnkgNDE2CisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGI0cC0yLCAweDEuYzMwYzM0cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTcKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjZwLTIsIDB4MS5jMzBjMmNwOAorICB9LAorICB7IC8vIEVudHJ5IDQxOAorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiNnAtMiwgMHgxLmMzMGMyZXA4CisgIH0sCisgIHsgLy8gRW50cnkgNDE5CisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGI2cC0yLCAweDEuYzMwYzMwcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjAKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjZwLTIsIDB4MS5jMzBjMzJwOAorICB9LAorICB7IC8vIEVudHJ5IDQyMQorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiNnAtMiwgMHgxLmMzMGMzNHA4CisgIH0sCisgIHsgLy8gRW50cnkgNDIyCisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGI4cC0yLCAweDEuYzMwYzJjcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjMKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjhwLTIsIDB4MS5jMzBjMmVwOAorICB9LAorICB7IC8vIEVudHJ5IDQyNAorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiOHAtMiwgMHgxLmMzMGMzMHA4CisgIH0sCisgIHsgLy8gRW50cnkgNDI1CisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGI4cC0yLCAweDEuYzMwYzMycDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjYKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYjhwLTIsIDB4MS5jMzBjMzRwOAorICB9LAorICB7IC8vIEVudHJ5IDQyNworICAgIDAuMGYsCisgICAgMHgxLmRiNmRiYXAtMiwgMHgxLmMzMGMyY3A4CisgIH0sCisgIHsgLy8gRW50cnkgNDI4CisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGJhcC0yLCAweDEuYzMwYzJlcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjkKKyAgICAwLjBmLAorICAgIDB4MS5kYjZkYmFwLTIsIDB4MS5jMzBjMzBwOAorICB9LAorICB7IC8vIEVudHJ5IDQzMAorICAgIDAuMGYsCisgICAgMHgxLmRiNmRiYXAtMiwgMHgxLmMzMGMzMnA4CisgIH0sCisgIHsgLy8gRW50cnkgNDMxCisgICAgMC4wZiwKKyAgICAweDEuZGI2ZGJhcC0yLCAweDEuYzMwYzM0cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzIKKyAgICAtMHgxLmZmZmZmYzAwMDAwN2ZmZmZmMDAwMDAxZmZmZmZjMHAtMSwKKyAgICAtMHgxLjAwMDAwMnAwLCAtMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDMzCisgICAgLTB4MS5wMCwKKyAgICAtMHgxLnAwLCAtMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDM0CisgICAgLTB4MS4wMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDEwMDAwMDFwMCwKKyAgICAtMHgxLmZmZmZmZXAtMSwgLTB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDQzNQorICAgIEhVR0VfVkFMRiwKKyAgICAweDEucDEsIDB4MS5wMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzYKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLnAyLCAweDEucDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzcKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmVwLTIsIDB4MS5mZmZmZmVwOQorICB9LAorICB7IC8vIEVudHJ5IDQzOAorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZXAtMiwgMHgxLnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQzOQorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZXAtMiwgMHgxLjAwMDAwMnAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ0MAorICAgIDAuMGYsCisgICAgMHgxLnAtMSwgMHgxLmZmZmZmZXA5CisgIH0sCisgIHsgLy8gRW50cnkgNDQxCisgICAgMC4wZiwKKyAgICAweDEucC0xLCAweDEucDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDQyCisgICAgMC4wZiwKKyAgICAweDEucC0xLCAweDEuMDAwMDAycDEwCisgIH0sCisgIHsgLy8gRW50cnkgNDQzCisgICAgMC4wZiwKKyAgICAweDEuMDAwMDAycC0xLCAweDEuZmZmZmZlcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDQKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDJwLTEsIDB4MS5wMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDUKKyAgICAwLjBmLAorICAgIDB4MS4wMDAwMDJwLTEsIDB4MS4wMDAwMDJwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDYKKyAgICAweDEuMDAwMjA0NjcxMDk1NDc1NzJmYThmM2Y2NTNlZGE1NDhwLTE0OSwKKyAgICAweDEucC0xNDksIDB4MS5mZmZmZjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDcKKyAgICAweDEuMDAwMTlkMWVlZDIxZjQ0OGYyYzYyMTdlYWIzZDljNTVwLTE0OSwKKyAgICAweDEucC0xNDksIDB4MS5mZmZmZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDgKKyAgICAweDEuMDAwMTM1ZDZmMzU5NmUwODZkNDYzMzc2YTlkYmQxZTJwLTE0OSwKKyAgICAweDEucC0xNDksIDB4MS5mZmZmZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDkKKyAgICAweDEuMDAwMGNlOGYyMzNiYTNjNjRhZGM1NjY3YTdiMGIyNDVwLTE0OSwKKyAgICAweDEucC0xNDksIDB4MS5mZmZmZmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTAKKyAgICAweDEuMDAwMDY3NDc3Y2M4ODRiMzNlMDNkMGJiNzc1NzExNTBwLTE0OSwKKyAgICAweDEucC0xNDksIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTEKKyAgICAweDEucC0xNDksCisgICAgMHgxLnAtMTQ5LCAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTIKKyAgICAwLjBmLAorICAgIDB4MS5wLTE0OSwgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDUzCisgICAgMC4wZiwKKyAgICAweDEucC0xNDksIDB4MS4wMDAwMDRwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NAorICAgIDAuMGYsCisgICAgMHgxLnAtMTQ5LCAweDEuMDAwMDA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTUKKyAgICAwLjBmLAorICAgIDB4MS5wLTE0OSwgMHgxLjAwMDAwOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDU2CisgICAgMC4wZiwKKyAgICAweDEucC0xNDksIDB4MS4wMDAwMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NworICAgIDB4MS4wMDAyMDBlZmNmMjViYWIxYzdjZDIyODI3MzQxYWI2M3AtMTQ4LAorICAgIDB4MS5wLTE0OCwgMHgxLmZmZmZmNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ1OAorICAgIDB4MS4wMDAxOWE1OTIwNGM4MmZlMDYwY2Y2ZDMyMGYxNTQzM3AtMTQ4LAorICAgIDB4MS5wLTE0OCwgMHgxLmZmZmZmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ1OQorICAgIDB4MS4wMDAxMzNjMjlhOGY2NGYyMDRkYTEzYjcyZWJjNTZlZHAtMTQ4LAorICAgIDB4MS5wLTE0OCwgMHgxLmZmZmZmYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2MAorICAgIDB4MS4wMDAwY2QyYzNkZWU1MDE0ODA3Mjk1MDY1OTNmZDY4YnAtMTQ4LAorICAgIDB4MS5wLTE0OCwgMHgxLmZmZmZmY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2MQorICAgIDB4MS4wMDAwNjY5NjBhNjkzM2VjM2JhZThjYWI5Y2NmZDU0M3AtMTQ4LAorICAgIDB4MS5wLTE0OCwgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2MgorICAgIDB4MS5wLTE0OCwKKyAgICAweDEucC0xNDgsIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDQ2MworICAgIDB4MS5mZmZlNjVhOGNkMDIxZGVkZDU1YTQwYzI3MmRjOGFjYXAtMTQ5LAorICAgIDB4MS5wLTE0OCwgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDY0CisgICAgMHgxLmZmZmNjYjUyZTJlMWYyNjAyMDIxODIwYWI0NzAzNmZlcC0xNDksCisgICAgMHgxLnAtMTQ4LCAweDEuMDAwMDA0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjUKKyAgICAweDEuZmZmYjMwZmU0MTllNzVjNTUyYzA3NGI3NWU5ZTEzMmRwLTE0OSwKKyAgICAweDEucC0xNDgsIDB4MS4wMDAwMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2NgorICAgIDB4MS5mZmY5OTZhYWU5MzZhMDhjYjJkZTNiODMxMzI2ODM2Y3AtMTQ5LAorICAgIDB4MS5wLTE0OCwgMHgxLjAwMDAwOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDY3CisgICAgMHgxLmZmZjdmYzU4ZDlhOTZiMjY1OTVkYzFiOTFhYWIxMDY1cC0xNDksCisgICAgMHgxLnAtMTQ4LCAweDEuMDAwMDBhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjgKKyAgICAweDEuODAwMmZlNWQzMjZlMTkxMGRjZjVhZGFkYzRmYjgwYmFwLTE0OCwKKyAgICAweDEuODBwLTE0OCwgMHgxLmZmZmZmNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2OQorICAgIDB4MS44MDAyNjUxNmUxMzA0MTBjYmMzNGQ2YmUxZjMxNGFmM3AtMTQ4LAorICAgIDB4MS44MHAtMTQ4LCAweDEuZmZmZmY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDcwCisgICAgMHgxLjgwMDFjYmQwY2QyMDA0OGRjMDA0MWFhZTY4NTNmNDE0cC0xNDgsCisgICAgMHgxLjgwcC0xNDgsIDB4MS5mZmZmZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzEKKyAgICAweDEuODAwMTMyOGFmNjNkNGIyOGI5M2JhYzE2OGQzMjM3NzZwLTE0OCwKKyAgICAweDEuODBwLTE0OCwgMHgxLmZmZmZmY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQ3MgorICAgIDB4MS44MDAwOTk0NTVjODdmYzcyODI3MmQ3OTkzYzNjMGVkMnAtMTQ4LAorICAgIDB4MS44MHAtMTQ4LCAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDczCisgICAgMHgxLjgwcC0xNDgsCisgICAgMHgxLjgwcC0xNDgsIDB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NAorICAgIDB4MS43ZmZlY2Q3NWZlNzc5YzM5ZGEzMTJhMGFlNjU3NWFhZXAtMTQ4LAorICAgIDB4MS44MHAtMTQ4LCAweDEuMDAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzUKKyAgICAweDEuN2ZmZDlhZWNmMWEzNWM3ZTJkNmY2N2I5MTc3YjhiYzhwLTE0OCwKKyAgICAweDEuODBwLTE0OCwgMHgxLjAwMDAwNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDc2CisgICAgMHgxLjdmZmM2ODY0ZDk4MjdkNzU3YjRiNjAwMWQwYzgwYTlicC0xNDgsCisgICAgMHgxLjgwcC0xNDgsIDB4MS4wMDAwMDZwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NworICAgIDB4MS43ZmZiMzVkZGI2MTQzYmM4ZTE0NWE2ZDYxNmExYjU1MXAtMTQ4LAorICAgIDB4MS44MHAtMTQ4LCAweDEuMDAwMDA4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzgKKyAgICAweDEuN2ZmYTAzNTc4NzU3ZDQyMjE4Y2U0MGE1NzhjNzQ0NzZwLTE0OCwKKyAgICAweDEuODBwLTE0OCwgMHgxLjAwMDAwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDc5CisgICAgMHgxLjAwMDAwMGEwY2Y2NWViMTgxN2E3MDk1ZDlhMDQ0M2E3cDAsCisgICAgMHgxLnAtMjksIC0weDEucC0yOQorICB9LAorICB7IC8vIEVudHJ5IDQ4MAorICAgIDB4MS5mZmZmZmY1ZjMwOWE2MGFhZDVjMjMwOWY4MWY5MGRlZnAtMSwKKyAgICAweDEucC0yOSwgMHgxLnAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODEKKyAgICAweDEuZmZmZmZkOWUwN2NmMDc3NjdhNTVhZmJlOWFjYWU5M2VwLTEsCisgICAgMHgxLnA1NSwgLTB4MS5wLTI5CisgIH0sCisgIHsgLy8gRW50cnkgNDgyCisgICAgMHgxLjAwMDAwMDk4N2UwY2M2NjM0NGQ4OWI0OTRlMWY0M2IzcDAsCisgICAgMHgxLnA1NSwgMHgxLnAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODMKKyAgICAweDEuZmZmZmZkNjY5NDI3Y2YxNTk1MTU4NzM4ODdjMTdjZjJwLTEsCisgICAgMHgxLnA2MCwgLTB4MS5wLTI5CisgIH0sCisgIHsgLy8gRW50cnkgNDg0CisgICAgMHgxLjAwMDAwMGE2NWFmNmFlNjFiZTg4ZWEyNTU4NzkwY2Q3cDAsCisgICAgMHgxLnA2MCwgMHgxLnAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODUKKyAgICAweDEuZmZjMDAzZmZiNTVhYWE0Y2QzNGYzNDMxZWE1Yjc3ZjFwLTEsCisgICAgMHgxLmZmZmZmZXAtMSwgMHgxLnAxMworICB9LAorICB7IC8vIEVudHJ5IDQ4NgorICAgIDB4MS5mZTAwZmZhOWMwZmIzYmYyOGM4YTliMmIzZDJkN2RhYXAtMSwKKyAgICAweDEuZmZmZmZlcC0xLCAweDEucDE2CisgIH0sCisgIHsgLy8gRW50cnkgNDg3CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgMHgxLnAxMworICB9LAorICB7IC8vIEVudHJ5IDQ4OAorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5wMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODkKKyAgICAweDEuMDA0MDA4MDA2YWE1NTQzMzJiOGZlZDA5ZDhlZDI5ZjNwMCwKKyAgICAweDEuMDAwMDAycDAsIDB4MS5wMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTAKKyAgICAweDEuMDIwMjAxNTNmYzQwNWIxMjNiMzNhNzNjYjkzYTM2NDhwMCwKKyAgICAweDEuMDAwMDAycDAsIDB4MS5wMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTEKKyAgICAweDEuMmMxNTYwMzI2OTQwNzAwNmI4ZjM1ZThlNGYxNDk3YmFwLTYsCisgICAgLTB4MS4wMDAwMDJwMCwgLTB4MS5wMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTIKKyAgICAweDEuYzg0Njg4N2VlMzc5YzVhZjYzN2M3MzQ5YWZjOWY2OTlwLTQ3LAorICAgIC0weDEuMDAwMDAycDAsIC0weDEucDI4CisgIH0sCisgIHsgLy8gRW50cnkgNDkzCisgICAgMHgxLnAwLAorICAgIC0weDEucDAsIC0weDEucDI1CisgIH0sCisgIHsgLy8gRW50cnkgNDk0CisgICAgMHgxLnAwLAorICAgIC0weDEucDAsIC0weDEucDI4CisgIH0sCisgIHsgLy8gRW50cnkgNDk1CisgICAgMHgxLmQ4ZTY0ZDY2MzQyODkxYzg2ZmIzYzg3ZDFlZDZkNWM1cDIsCisgICAgLTB4MS5mZmZmZmVwLTEsIC0weDEucDI1CisgIH0sCisgIHsgLy8gRW50cnkgNDk2CisgICAgMHgxLjBmMmVjNTgzZjYxMWU0YjhmYzFjYzdiNTBlZmJiNzM4cDIzLAorICAgIC0weDEuZmZmZmZlcC0xLCAtMHgxLnAyOAorICB9LAorICB7IC8vIEVudHJ5IDQ5NworICAgIDB4MS5kOGU2NGQ2NjM0Mjg5MWM4NmZiM2M4N2QxZWQ2ZDVjNXAyLAorICAgIDB4MS5mZmZmZmVwLTEsIC0weDEucDI1CisgIH0sCisgIHsgLy8gRW50cnkgNDk4CisgICAgMHgxLjBmMmVjNTgzZjYxMWU0YjhmYzFjYzdiNTBlZmJiNzM4cDIzLAorICAgIDB4MS5mZmZmZmVwLTEsIC0weDEucDI4CisgIH0sCisgIHsgLy8gRW50cnkgNDk5CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgLTB4MS5wMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDAKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAtMHgxLnAyOAorICB9LAorICB7IC8vIEVudHJ5IDUwMQorICAgIDB4MS4yYzE1NjAzMjY5NDA3MDA2YjhmMzVlOGU0ZjE0OTdiYXAtNiwKKyAgICAweDEuMDAwMDAycDAsIC0weDEucDI1CisgIH0sCisgIHsgLy8gRW50cnkgNTAyCisgICAgMHgxLmM4NDY4ODdlZTM3OWM1YWY2MzdjNzM0OWFmYzlmNjk5cC00NywKKyAgICAweDEuMDAwMDAycDAsIC0weDEucDI4CisgIH0sCisgIHsgLy8gRW50cnkgNTAzCisgICAgSFVHRV9WQUxGLAorICAgIC0weDEucDE1LCAweDEucDYzCisgIH0sCisgIHsgLy8gRW50cnkgNTA0CisgICAgSFVHRV9WQUxGLAorICAgIDAuMGYsIC0weDEuODBwMQorICB9LAorICB7IC8vIEVudHJ5IDUwNQorICAgIC1IVUdFX1ZBTEYsCisgICAgLTAuMGYsIC0weDEuODBwMQorICB9LAorICB7IC8vIEVudHJ5IDUwNgorICAgIEhVR0VfVkFMRiwKKyAgICAwLjBmLCAtMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTA3CisgICAgLUhVR0VfVkFMRiwKKyAgICAtMC4wZiwgLTB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDUwOAorICAgIEhVR0VfVkFMRiwKKyAgICAwLjBmLCAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDkKKyAgICBIVUdFX1ZBTEYsCisgICAgMC4wZiwgLTB4MS44MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNTEwCisgICAgSFVHRV9WQUxGLAorICAgIDAuMGYsIC0weDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTEKKyAgICBIVUdFX1ZBTEYsCisgICAgMC4wZiwgLTB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDUxMgorICAgIEhVR0VfVkFMRiwKKyAgICAwLjBmLCAtMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDUxMworICAgIEhVR0VfVkFMRiwKKyAgICAwLjBmLCAtMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgNTE0CisgICAgSFVHRV9WQUxGLAorICAgIDAuMGYsIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTUKKyAgICBIVUdFX1ZBTEYsCisgICAgLTAuMGYsIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDUxNgorICAgIEhVR0VfVkFMRiwKKyAgICAtMC4wZiwgLTB4MS44MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNTE3CisgICAgSFVHRV9WQUxGLAorICAgIC0wLjBmLCAtMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNTE4CisgICAgSFVHRV9WQUxGLAorICAgIC0wLjBmLCAtMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTE5CisgICAgSFVHRV9WQUxGLAorICAgIC0wLjBmLCAtMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDUyMAorICAgIEhVR0VfVkFMRiwKKyAgICAtMC4wZiwgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDUyMQorICAgIEhVR0VfVkFMRiwKKyAgICAtMC4wZiwgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDUyMgorICAgIEhVR0VfVkFMRiwKKyAgICAwLjBmLCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTIzCisgICAgSFVHRV9WQUxGLAorICAgIC0wLjBmLCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTI0CisgICAgMC4wLAorICAgIDAuMGYsIDB4MS44MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTI1CisgICAgLTAuMCwKKyAgICAtMC4wZiwgMHgxLjgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjYKKyAgICAwLjAsCisgICAgMC4wZiwgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTI3CisgICAgLTAuMCwKKyAgICAtMC4wZiwgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTI4CisgICAgMC4wLAorICAgIDAuMGYsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDUyOQorICAgIDAuMCwKKyAgICAwLjBmLCAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDUzMAorICAgIDAuMCwKKyAgICAwLjBmLCAweDEuODBwMgorICB9LAorICB7IC8vIEVudHJ5IDUzMQorICAgIDAuMCwKKyAgICAwLjBmLCAweDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzIKKyAgICAwLjAsCisgICAgMC4wZiwgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTMzCisgICAgMC4wLAorICAgIDAuMGYsIDB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzQKKyAgICAwLjAsCisgICAgMC4wZiwgMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgNTM1CisgICAgMC4wLAorICAgIDAuMGYsIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDUzNgorICAgIDAuMCwKKyAgICAtMC4wZiwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTM3CisgICAgMC4wLAorICAgIC0wLjBmLCAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDUzOAorICAgIDAuMCwKKyAgICAtMC4wZiwgMHgxLjgwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzkKKyAgICAwLjAsCisgICAgLTAuMGYsIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDU0MAorICAgIDAuMCwKKyAgICAtMC4wZiwgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQxCisgICAgMC4wLAorICAgIC0wLjBmLCAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTQyCisgICAgMC4wLAorICAgIC0wLjBmLCAweDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDMKKyAgICAwLjAsCisgICAgLTAuMGYsIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDU0NAorICAgIDB4MS5wMCwKKyAgICAtMHgxLnAwLCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDUKKyAgICAweDEucDAsCisgICAgLTB4MS5wMCwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU0NgorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU0NworICAgIDB4MS5wMCwKKyAgICAweDEucDAsIC1IVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDgKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDU0OQorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDU1MAorICAgIDB4MS5wMCwKKyAgICAtMHgxLnAwLCAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDU1MQorICAgIDB4MS5wMCwKKyAgICAtMHgxLnAwLCAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTIKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTUzCisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTQKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAweDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTUKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAtMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgNTU2CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNTU3CisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgLTB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDU1OAorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDU1OQorICAgIDB4MS5wMCwKKyAgICAweDEucDAsIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjAKKyAgICAweDEucDAsCisgICAgMHgxLnAwLCAwLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTYxCisgICAgMHgxLnAwLAorICAgIDB4MS5wMCwgLTAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjIKKyAgICAweDEucDAsCisgICAgSFVHRV9WQUxGLCAwLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTYzCisgICAgMHgxLnAwLAorICAgIEhVR0VfVkFMRiwgLTAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjQKKyAgICAweDEucDAsCisgICAgMHgxLmZmZmZmZXAxMjcsIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjUKKyAgICAweDEucDAsCisgICAgMHgxLmZmZmZmZXAxMjcsIC0wLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTY2CisgICAgMHgxLnAwLAorICAgIDB4MS5wLTEyNiwgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU2NworICAgIDB4MS5wMCwKKyAgICAweDEucC0xMjYsIC0wLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTY4CisgICAgMHgxLnAwLAorICAgIDB4MS5wLTE0OSwgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU2OQorICAgIDB4MS5wMCwKKyAgICAweDEucC0xNDksIC0wLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTcwCisgICAgMHgxLnAwLAorICAgIDAuMGYsIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzEKKyAgICAweDEucDAsCisgICAgMC4wZiwgLTAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzIKKyAgICAweDEucDAsCisgICAgLTAuMGYsIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzMKKyAgICAweDEucDAsCisgICAgLTAuMGYsIC0wLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTc0CisgICAgMHgxLnAwLAorICAgIC0weDEucC0xNDksIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzUKKyAgICAweDEucDAsCisgICAgLTB4MS5wLTE0OSwgLTAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzYKKyAgICAweDEucDAsCisgICAgLTB4MS5wLTEyNiwgMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU3NworICAgIDB4MS5wMCwKKyAgICAtMHgxLnAtMTI2LCAtMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU3OAorICAgIDB4MS5wMCwKKyAgICAtMHgxLmZmZmZmZXAxMjcsIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzkKKyAgICAweDEucDAsCisgICAgLTB4MS5mZmZmZmVwMTI3LCAtMC4wZgorICB9LAorICB7IC8vIEVudHJ5IDU4MAorICAgIDB4MS5wMCwKKyAgICAtSFVHRV9WQUxGLCAwLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTgxCisgICAgMHgxLnAwLAorICAgIC1IVUdFX1ZBTEYsIC0wLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNTgyCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5wLTEyNiwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU4MworICAgIEhVR0VfVkFMRiwKKyAgICAweDEucC0xNDksIC1IVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODQKKyAgICBIVUdFX1ZBTEYsCisgICAgLTB4MS5wLTE0OSwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU4NQorICAgIEhVR0VfVkFMRiwKKyAgICAtMHgxLnAtMTI2LCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTg2CisgICAgMC4wLAorICAgIEhVR0VfVkFMRiwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU4NworICAgIDAuMCwKKyAgICAweDEuZmZmZmZlcDEyNywgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU4OAorICAgIDAuMCwKKyAgICAweDEuODBwMCwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU4OQorICAgIDAuMCwKKyAgICAtMHgxLjgwcDAsIC1IVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTAKKyAgICAwLjAsCisgICAgLTB4MS5mZmZmZmVwMTI3LCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTkxCisgICAgMC4wLAorICAgIC1IVUdFX1ZBTEYsIC1IVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTIKKyAgICAwLjAsCisgICAgMHgxLnAtMTI2LCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTMKKyAgICAwLjAsCisgICAgMHgxLnAtMTQ5LCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTQKKyAgICAwLjAsCisgICAgMC4wZiwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTk1CisgICAgMC4wLAorICAgIC0wLjBmLCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTYKKyAgICAwLjAsCisgICAgLTB4MS5wLTE0OSwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNTk3CisgICAgMC4wLAorICAgIC0weDEucC0xMjYsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU5OAorICAgIEhVR0VfVkFMRiwKKyAgICBIVUdFX1ZBTEYsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDU5OQorICAgIEhVR0VfVkFMRiwKKyAgICAweDEuZmZmZmZlcDEyNywgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNjAwCisgICAgSFVHRV9WQUxGLAorICAgIDB4MS44MHAwLCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDEKKyAgICBIVUdFX1ZBTEYsCisgICAgLTB4MS44MHAwLCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDIKKyAgICBIVUdFX1ZBTEYsCisgICAgLTB4MS5mZmZmZmVwMTI3LCBIVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDMKKyAgICBIVUdFX1ZBTEYsCisgICAgLUhVR0VfVkFMRiwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNjA0CisgICAgLTAuMCwKKyAgICAtSFVHRV9WQUxGLCAtMHgxLjgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDUKKyAgICAtMC4wLAorICAgIC1IVUdFX1ZBTEYsIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDYKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMRiwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDYwNworICAgIDAuMCwKKyAgICAtSFVHRV9WQUxGLCAtMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjA4CisgICAgMC4wLAorICAgIC1IVUdFX1ZBTEYsIC0weDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDkKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMRiwgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNjEwCisgICAgMC4wLAorICAgIC1IVUdFX1ZBTEYsIC0weDEuODBwMgorICB9LAorICB7IC8vIEVudHJ5IDYxMQorICAgIDAuMCwKKyAgICAtSFVHRV9WQUxGLCAtMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjEyCisgICAgMC4wLAorICAgIC1IVUdFX1ZBTEYsIC0weDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTMKKyAgICAwLjAsCisgICAgLUhVR0VfVkFMRiwgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDYxNAorICAgIC1IVUdFX1ZBTEYsCisgICAgLUhVR0VfVkFMRiwgMHgxLjgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTUKKyAgICAtSFVHRV9WQUxGLAorICAgIC1IVUdFX1ZBTEYsIDB4MS40MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjE2CisgICAgSFVHRV9WQUxGLAorICAgIC1IVUdFX1ZBTEYsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDYxNworICAgIEhVR0VfVkFMRiwKKyAgICAtSFVHRV9WQUxGLCAweDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTgKKyAgICBIVUdFX1ZBTEYsCisgICAgLUhVR0VfVkFMRiwgMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjE5CisgICAgSFVHRV9WQUxGLAorICAgIC1IVUdFX1ZBTEYsIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNjIwCisgICAgSFVHRV9WQUxGLAorICAgIC1IVUdFX1ZBTEYsIDB4MS44MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjIxCisgICAgSFVHRV9WQUxGLAorICAgIC1IVUdFX1ZBTEYsIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDYyMgorICAgIEhVR0VfVkFMRiwKKyAgICAtSFVHRV9WQUxGLCAweDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjMKKyAgICBIVUdFX1ZBTEYsCisgICAgLUhVR0VfVkFMRiwgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNjI0CisgICAgMC4wLAorICAgIEhVR0VfVkFMRiwgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDYyNQorICAgIDAuMCwKKyAgICBIVUdFX1ZBTEYsIC0weDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjYKKyAgICAwLjAsCisgICAgSFVHRV9WQUxGLCAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjcKKyAgICAwLjAsCisgICAgSFVHRV9WQUxGLCAtSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNjI4CisgICAgSFVHRV9WQUxGLAorICAgIEhVR0VfVkFMRiwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNjI5CisgICAgSFVHRV9WQUxGLAorICAgIEhVR0VfVkFMRiwgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzAKKyAgICBIVUdFX1ZBTEYsCisgICAgSFVHRV9WQUxGLCAweDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzEKKyAgICBIVUdFX1ZBTEYsCisgICAgSFVHRV9WQUxGLCAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzIKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLmZmZmZmZXAxMjcsIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgNjMzCisgICAgMC4wZiwKKyAgICAweDEucC0xMjYsIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDYzNAorICAgIDAuMGYsCisgICAgLTB4MS5wLTEyNiwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM1CisgICAgMC4wZiwKKyAgICAweDEucC0xNDksIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDYzNgorICAgIDAuMGYsCisgICAgLTB4MS5wLTE0OSwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM3CisgICAgSFVHRV9WQUxGLAorICAgIEhVR0VfVkFMRiwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDYzOAorICAgIDB4MS5mZmZmZmVmZmZmZmZiZmZmZmZkZmZmZmZlYmZmZmZmMXA2MywKKyAgICAweDEuZmZmZmZlcDEyNywgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDYzOQorICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAtMSwKKyAgICAweDEucC0xLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQwCisgICAgMHgxLnAtNjMsCisgICAgMHgxLnAtMTI2LCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQxCisgICAgMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTM2NmVhOTU3ZDNlcC03NSwKKyAgICAweDEucC0xNDksIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDIKKyAgICAwLjAsCisgICAgMC4wZiwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0MworICAgIDAuMCwKKyAgICAtMC4wZiwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0NAorICAgIEhVR0VfVkFMRiwKKyAgICAtSFVHRV9WQUxGLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQ1CisgICAgMC4wLAorICAgIEhVR0VfVkFMRiwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDYKKyAgICAweDEuMDAwMDAwODAwMDAwNjAwMDAwNTAwMDAwNDYwMDAwM2ZwLTY0LAorICAgIDB4MS5mZmZmZmVwMTI3LCAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0NworICAgIDB4MS42YTA5ZTY2N2YzYmNjOTA4YjJmYjEzNjZlYTk1N2QzZXAwLAorICAgIDB4MS5wLTEsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQ4CisgICAgMHgxLnA2MywKKyAgICAweDEucC0xMjYsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQ5CisgICAgMHgxLjZhMDllNjY3ZjNiY2M5MDhiMmZiMTM2NmVhOTU3ZDNlcDc0LAorICAgIDB4MS5wLTE0OSwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTAKKyAgICBIVUdFX1ZBTEYsCisgICAgMC4wZiwgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTEKKyAgICBIVUdFX1ZBTEYsCisgICAgLTAuMGYsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjUyCisgICAgMC4wLAorICAgIC1IVUdFX1ZBTEYsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjUzCisgICAgMC4wLAorICAgIDB4MS5wLTEsIEhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDY1NAorICAgIDAuMGYsCisgICAgMHgxLnAtMSwgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTUKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwLTEsCisgICAgMHgxLnAtMSwgMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY1NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYXAtMSwKKyAgICAweDEucC0xLCAweDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTcKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMSwgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNjU4CisgICAgMHgxLnAwLAorICAgIDB4MS5wLTEsIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTkKKyAgICAweDEucDAsCisgICAgMHgxLnAtMSwgLTAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjAKKyAgICAweDEucDAsCisgICAgMHgxLnAtMSwgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDY2MQorICAgIDB4MS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMnAwLAorICAgIDB4MS5wLTEsIC0weDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjIKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkwOGIyZmIxMzY2ZWE5NTdkM2VwMCwKKyAgICAweDEucC0xLCAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2MworICAgIEhVR0VfVkFMRiwKKyAgICAweDEucC0xLCAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjQKKyAgICBIVUdFX1ZBTEYsCisgICAgMHgxLnAtMSwgLUhVR0VfVkFMRgorICB9LAorICB7IC8vIEVudHJ5IDY2NQorICAgIDAuMCwKKyAgICAtMHgxLnAtMSwgSFVHRV9WQUxGCisgIH0sCisgIHsgLy8gRW50cnkgNjY2CisgICAgMC4wZiwKKyAgICAtMHgxLnAtMSwgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjcKKyAgICAweDEucDAsCisgICAgLTB4MS5wLTEsIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjgKKyAgICAweDEucDAsCisgICAgLTB4MS5wLTEsIC0wLjBmCisgIH0sCisgIHsgLy8gRW50cnkgNjY5CisgICAgSFVHRV9WQUxGLAorICAgIC0weDEucC0xLCAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzAKKyAgICBIVUdFX1ZBTEYsCisgICAgLTB4MS5wLTEsIC1IVUdFX1ZBTEYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzEKKyAgICAweDEucDEsCisgICAgMHgxLnAyLCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjcyCisgICAgMHgxLjgwcDEsCisgICAgMHgxLjIwcDMsIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzMKKyAgICAweDEucDIsCisgICAgMHgxLnA0LCAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjc0CisgICAgMHgxLnAtMSwKKyAgICAweDEucDIsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjc1CisgICAgMHgxLnAtMiwKKyAgICAweDEucDQsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjc2CisgICAgMHgxLnAtMywKKyAgICAweDEucDYsIC0weDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjc3CisgICAgSFVHRV9WQUxGLAorICAgIDB4MS5mZmZmZmVwLTEsIC0weDEuNzQ5MTBjcDYyCisgIH0sCisgIHsgLy8gRW50cnkgNjc4CisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZlcC0xLCAweDEuNzQ5MTBjcDYyCisgIH0sCisgIHsgLy8gRW50cnkgNjc5CisgICAgMHgxLnAyLAorICAgIDB4MS5wMSwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjgwCisgICAgMHgxLnAtMiwKKyAgICAweDEucDEsIC0weDEucDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODEKKyAgICAweDEucDIsCisgICAgLTB4MS5wMSwgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjgyCisgICAgMHgxLnAtMiwKKyAgICAtMHgxLnAxLCAtMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjgzCisgICAgMHgxLmIwcDQsCisgICAgMHgxLjgwcDEsIDB4MS44MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjg0CisgICAgMHgxLjg2YTBwMTEsCisgICAgMHgxLjQwcDIsIDB4MS40MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjg1CisgICAgMHgxLjkyMWVlMHAxOSwKKyAgICAweDEuYzBwMiwgMHgxLmMwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODYKKyAgICAweDEuMmEwNWYycDMzLAorICAgIDB4MS40MHAzLCAweDEuNDBwMworICB9LAorfTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKK1RFU1QobWF0aF9wb3dmLCBwb3dmX2ludGVsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX3Bvd2ZfaW50ZWxfZGF0YSkvc2l6ZW9mKHBvd2ZfaW50ZWxfZGF0YV90KTsgaSsrKSB7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGdfcG93Zl9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCBwb3dmKGdfcG93Zl9pbnRlbF9kYXRhW2ldLnhfY2FsbF9kYXRhLCBnX3Bvd2ZfaW50ZWxfZGF0YVtpXS55X2NhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfc2luX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF9zaW5fdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhNDM0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21hdGhfc2luX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNTc5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQordHlwZWRlZiBzdHJ1Y3QgeworICBkb3VibGUgZXhwZWN0ZWQ7CisgIGRvdWJsZSBjYWxsX2RhdGE7Cit9IHNpbl9pbnRlbF9kYXRhX3Q7CisKK3N0YXRpYyBzaW5faW50ZWxfZGF0YV90IGdfc2luX2ludGVsX2RhdGFbXSA9IHsKKyAgeyAvLyBFbnRyeSAwCisgICAgMHgxLjkyNTllMzcwOGJkMzlmZmZmZmZmZmZmZmZmZjFiZGJlcC01LAorICAgIDB4MS45MjgzNTg2NTAzZmUwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMQorICAgIC0weDEuOTI1OWUzNzA4YmQzOWZmZmZmZmZmZmZmZmZmMWJkYmVwLTUsCisgICAgLTB4MS45MjgzNTg2NTAzZmUwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIDB4MS5kNzdiMTE3ZjIzMGQ1ZmZmZmZmZmZmZmZmZmYyYWRjN3AtNSwKKyAgICAweDEuZDdiZGNkNzc4MDQ5ZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDMKKyAgICAtMHgxLmQ3N2IxMTdmMjMwZDVmZmZmZmZmZmZmZmZmZjJhZGM3cC01LAorICAgIC0weDEuZDdiZGNkNzc4MDQ5ZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAweDEuYTE0OTBjOGMwNmJhNmZmZmZmZmZmZmZmZmZhOTg2MTFwLTQsCisgICAgMHgxLmEyMDJiM2ZiODQ3ODhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1CisgICAgLTB4MS5hMTQ5MGM4YzA2YmE2ZmZmZmZmZmZmZmZmZmE5ODYxMXAtNCwKKyAgICAtMHgxLmEyMDJiM2ZiODQ3ODhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2CisgICAgMHgxLmNjNDBjMzgwNTIyOWE3ZmZmZmZmZmZmZmZmODNlNzZicC0zLAorICAgIDB4MS5kMDM3Y2IyN2VlNmRmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNworICAgIC0weDEuY2M0MGMzODA1MjI5YTdmZmZmZmZmZmZmZmY4M2U3NmJwLTMsCisgICAgLTB4MS5kMDM3Y2IyN2VlNmRmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgOAorICAgIDB4MS5kMGVmNzk5MDAxYmE5MDAwMDAwMDAwMDAwMDVlYTRlOXAtMywKKyAgICAweDEuZDUwNjRlNmZlODJjNXAtMworICB9LAorICB7IC8vIEVudHJ5IDkKKyAgICAtMHgxLmQwZWY3OTkwMDFiYTkwMDAwMDAwMDAwMDAwNWVhNGU5cC0zLAorICAgIC0weDEuZDUwNjRlNmZlODJjNXAtMworICB9LAorICB7IC8vIEVudHJ5IDEwCisgICAgMHgxLmU5OTUwNzMwYzQ2OTVmZmZmZmZmZmZmZmZmZmZmYzJlcC0yLAorICAgIDB4MS5mZTc2NzczOWQwZjZkcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTEKKyAgICAtMHgxLmU5OTUwNzMwYzQ2OTVmZmZmZmZmZmZmZmZmZmZmYzJlcC0yLAorICAgIC0weDEuZmU3Njc3MzlkMGY2ZHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEyCisgICAgMHgxLjk4ZGNkMDkzMzc3OTI4MDAwMDAwMDAwMDAwMTY3ZGM3cC0xLAorICAgIDB4MS5kOThjNGM2MTI3MThkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTMKKyAgICAtMHgxLjk4ZGNkMDkzMzc3OTI4MDAwMDAwMDAwMDAwMTY3ZGM3cC0xLAorICAgIC0weDEuZDk4YzRjNjEyNzE4ZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzFwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNgorICAgIDB4MS43MGE5ZDgyNWI1MDY0MDA0MjIxNTVhZWNkNTE5ZDU0Y3AtMSwKKyAgICAtMHgxLjAwMDAwMDFmOHA1MDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIC0weDEuNzBhOWQ4MjViNTA2NDAwNDIyMTU1YWVjZDUxOWQ1NGNwLTEsCisgICAgMHgxLjAwMDAwMDFmOHA1MDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOAorICAgIDB4MS5iZjM5ODBjNmMxZTlmNDQ5Njc5NWY0Y2U1MzUwMTZiNnAtMSwKKyAgICAtMHgxLjAwYzBiZjhwNzAwCisgIH0sCisgIHsgLy8gRW50cnkgMTkKKyAgICAtMHgxLmJmMzk4MGM2YzFlOWY0NDk2Nzk1ZjRjZTUzNTAxNmI2cC0xLAorICAgIDB4MS4wMGMwYmY4cDcwMAorICB9LAorICB7IC8vIEVudHJ5IDIwCisgICAgMHgxLmQ2Mjg5OWQ0OGI0Mzk3ZmIyNzViYTQ0MDk1OTcxMzY0cC00LAorICAgIC0weDEuMTNmZmZmZmZmZmY4MHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjEKKyAgICAtMHgxLmQ2Mjg5OWQ0OGI0Mzk3ZmIyNzViYTQ0MDk1OTcxMzY0cC00LAorICAgIDB4MS4xM2ZmZmZmZmZmZjgwcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMgorICAgIC0weDEuMTdiN2E2MGNlMWYxNDg1ODI0NzExNTIzYWIwZmQ2ZDFwLTUsCisgICAgLTB4MS4xN2M1OTIwNzY3ZGZjcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjMKKyAgICAweDEuMTdiN2E2MGNlMWYxNDg1ODI0NzExNTIzYWIwZmQ2ZDFwLTUsCisgICAgMHgxLjE3YzU5MjA3NjdkZmNwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNAorICAgIDB4MS5mMDE5MmI3OTRmYmJlMDMwZmUyNWVkZjY1YTVkYjliZnAtMSwKKyAgICAtMHgxLjFkOTliZTA4NzEzY2NwMgorICB9LAorICB7IC8vIEVudHJ5IDI1CisgICAgLTB4MS5mMDE5MmI3OTRmYmJlMDMwZmUyNWVkZjY1YTVkYjliZnAtMSwKKyAgICAweDEuMWQ5OWJlMDg3MTNjY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAtMHgxLjVlNjEzMjhjMDAzNGVjM2EwNWQwNTNiNzJlMmQ1OTQ1cC0zLAorICAgIC0weDEuMWRkYmZkNjRmYzBkM3A4MQorICB9LAorICB7IC8vIEVudHJ5IDI3CisgICAgMHgxLjVlNjEzMjhjMDAzNGVjM2EwNWQwNTNiNzJlMmQ1OTQ1cC0zLAorICAgIDB4MS4xZGRiZmQ2NGZjMGQzcDgxCisgIH0sCisgIHsgLy8gRW50cnkgMjgKKyAgICAweDEuZmIwMjhjNWRmMWRiM2ViMzJiMDA2MmM2Y2Q0ZGVhMGJwLTEsCisgICAgLTB4MS4xZTJhMTU2M2UwNjhlcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOQorICAgIC0weDEuZmIwMjhjNWRmMWRiM2ViMzJiMDA2MmM2Y2Q0ZGVhMGJwLTEsCisgICAgMHgxLjFlMmExNTYzZTA2OGVwNworICB9LAorICB7IC8vIEVudHJ5IDMwCisgICAgLTB4MS4yY2VmYjE5NmJhMjA3N2ZmZmZmZDRiZDY1MDcyMmJmYnAtMywKKyAgICAtMHgxLjJlMDdhOTEzMTRkcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzEKKyAgICAweDEuMmNlZmIxOTZiYTIwNzdmZmZmZmQ0YmQ2NTA3MjJiZmJwLTMsCisgICAgMHgxLjJlMDdhOTEzMTRkcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzIKKyAgICAweDEuYjgwZjQ4OWQzZWRmNDgzNWRlN2RlZWViNWJiMzhhZDlwLTIsCisgICAgLTB4MS4zYmNlYzI3MDQ0NGUycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMworICAgIC0weDEuYjgwZjQ4OWQzZWRmNDgzNWRlN2RlZWViNWJiMzhhZDlwLTIsCisgICAgMHgxLjNiY2VjMjcwNDQ0ZTJwMworICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgLTB4MS40ZmZmZmZmZmZmYTM4ODAwMDAwMDA0ZGQyMmNjY2NjY3AtMjAsCisgICAgLTB4MS41MDAwMDAwMDAwMDQwcC0yMAorICB9LAorICB7IC8vIEVudHJ5IDM1CisgICAgMHgxLjRmZmZmZmZmZmZhMzg4MDAwMDAwMDRkZDIyY2NjY2NjcC0yMCwKKyAgICAweDEuNTAwMDAwMDAwMDA0MHAtMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNgorICAgIC0weDEuZDI5ZGE1YjQ0ZjUxYjdmYzAxOWYxODNlMWQzYmQ1MTFwLTIsCisgICAgLTB4MS41NTkwMDFhNDJkOTBjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNworICAgIDB4MS5kMjlkYTViNDRmNTFiN2ZjMDE5ZjE4M2UxZDNiZDUxMXAtMiwKKyAgICAweDEuNTU5MDAxYTQyZDkwY3AxCisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAtMHgxLmY4NWY1MjYxNDdmNzg3ZmZmZmYxNTI0MWU3MTk3MzRicC0xLAorICAgIC0weDEuNTk3YmYzZTk3NzZiN3A5OQorICB9LAorICB7IC8vIEVudHJ5IDM5CisgICAgMHgxLmY4NWY1MjYxNDdmNzg3ZmZmZmYxNTI0MWU3MTk3MzRicC0xLAorICAgIDB4MS41OTdiZjNlOTc3NmI3cDk5CisgIH0sCisgIHsgLy8gRW50cnkgNDAKKyAgICAtMHgxLjZkNjFiNThjOTljNDJmMTM5NmFmNGE0MjE0OGY3M2M2cC01OSwKKyAgICAtMHgxLjZjNmNiYzQ1ZGM4ZGVwNworICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgMHgxLjZkNjFiNThjOTljNDJmMTM5NmFmNGE0MjE0OGY3M2M2cC01OSwKKyAgICAweDEuNmM2Y2JjNDVkYzhkZXA3CisgIH0sCisgIHsgLy8gRW50cnkgNDIKKyAgICAweDEuZTVjM2MwOGEyNThhNzdmMWQxMmVmYThjMzAxNjY3MDlwLTEsCisgICAgLTB4MS43M2Q4ZDE3M2Y5MGQwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MworICAgIC0weDEuZTVjM2MwOGEyNThhNzdmMWQxMmVmYThjMzAxNjY3MDlwLTEsCisgICAgMHgxLjczZDhkMTczZjkwZDBwNAorICB9LAorICB7IC8vIEVudHJ5IDQ0CisgICAgMHgxLmZlYjM2ODA2Y2E1ZmI3ZWE0NDIxMTlhZjQxYmUwZjRmcC0xLAorICAgIC0weDEuOGMyMDJkM2EzMTgwMnA2CisgIH0sCisgIHsgLy8gRW50cnkgNDUKKyAgICAtMHgxLmZlYjM2ODA2Y2E1ZmI3ZWE0NDIxMTlhZjQxYmUwZjRmcC0xLAorICAgIDB4MS44YzIwMmQzYTMxODAycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIC0weDEuN2M2YzdiMDFiOThkOTQ3Y2Q4YWRkNWU1ZDFhZTExY2FwLTEsCisgICAgLTB4MS5hY2Q1MzhiMWE2ZDVkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDcKKyAgICAweDEuN2M2YzdiMDFiOThkOTQ3Y2Q4YWRkNWU1ZDFhZTExY2FwLTEsCisgICAgMHgxLmFjZDUzOGIxYTZkNWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OAorICAgIC0weDEuMTkxYmUyMDU5ZGNiNTdmZWQ4NmRkMmNjNjJlYjFhOWZwLTEsCisgICAgLTB4MS5iNzUyNWFjOTdlMGQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OQorICAgIDB4MS4xOTFiZTIwNTlkY2I1N2ZlZDg2ZGQyY2M2MmViMWE5ZnAtMSwKKyAgICAweDEuYjc1MjVhYzk3ZTBkMnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTAKKyAgICAtMHgxLmY4MzA1OTkzYTIxMmM3ZmZmZmZjMTVjMmFmYTVlNTdlcC0xLAorICAgIC0weDEuYmVlNWZhOGE4NGIwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAweDEuZjgzMDU5OTNhMjEyYzdmZmZmZmMxNWMyYWZhNWU1N2VwLTEsCisgICAgMHgxLmJlZTVmYThhODRiMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgMHgxLmZmM2IxMzUzMGZkNzBlNzJiNzdmN2M2NzIxZGExMTMxcC0xLAorICAgIC0weDEuYzM5Mzk3OWZlNTkyMXA5CisgIH0sCisgIHsgLy8gRW50cnkgNTMKKyAgICAtMHgxLmZmM2IxMzUzMGZkNzBlNzJiNzdmN2M2NzIxZGExMTMxcC0xLAorICAgIDB4MS5jMzkzOTc5ZmU1OTIxcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NAorICAgIC0weDEuZjExOWRhODFhNGRhNTdmZmQ4YmNjNWExMjQ3ZjU1OTBwLTEsCisgICAgLTB4MS5jNDhmZmM3MjU2M2M4cDE4CisgIH0sCisgIHsgLy8gRW50cnkgNTUKKyAgICAweDEuZjExOWRhODFhNGRhNTdmZmQ4YmNjNWExMjQ3ZjU1OTBwLTEsCisgICAgMHgxLmM0OGZmYzcyNTYzYzhwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NgorICAgIC0weDEuZmQ3M2I4MWUwNGNjYzdlOWQ3NjRlY2E4YmIwODUxMDlwLTEsCisgICAgLTB4MS5jNzk1NDhiYzMxODU2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NworICAgIDB4MS5mZDczYjgxZTA0Y2NjN2U5ZDc2NGVjYThiYjA4NTEwOXAtMSwKKyAgICAweDEuYzc5NTQ4YmMzMTg1NnAzCisgIH0sCisgIHsgLy8gRW50cnkgNTgKKyAgICAtMHgxLmM3ODg1YWVmMzNhOTRmZmM1YWUwNmJlOTQ0NGVmYWQ1cC0zLAorICAgIC0weDEuY2I2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAweDEuYzc4ODVhZWYzM2E5NGZmYzVhZTA2YmU5NDQ0ZWZhZDVwLTMsCisgICAgMHgxLmNiNnAtMworICB9LAorICB7IC8vIEVudHJ5IDYwCisgICAgLTB4MS5lNjQ5NDkxMWVlZGQwOGQxNjUwYTRiNTEzNmMzZTZkNnAtNywKKyAgICAtMHgxLmU2NGRkYWY3YmQ3MmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MQorICAgIDB4MS5lNjQ5NDkxMWVlZGQwOGQxNjUwYTRiNTEzNmMzZTZkNnAtNywKKyAgICAweDEuZTY0ZGRhZjdiZDcyZnAtNworICB9LAorICB7IC8vIEVudHJ5IDYyCisgICAgMHgxLmUxODBlZWY1YjFjODg3ZmZmNTg1NTk0OTQ5YjQ2ZTZjcC0xLAorICAgIC0weDEuZWNkZDBmYmYwNzk0MnA1CisgIH0sCisgIHsgLy8gRW50cnkgNjMKKyAgICAtMHgxLmUxODBlZWY1YjFjODg3ZmZmNTg1NTk0OTQ5YjQ2ZTZjcC0xLAorICAgIDB4MS5lY2RkMGZiZjA3OTQycDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIC0weDEuZmQ5OGQyMGMxYmU0MzgwMDAwMDAxZWU1MTU2MmQ3YThwLTEsCisgICAgLTB4MS5mMDczYTIzMjkyMzM3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NQorICAgIDB4MS5mZDk4ZDIwYzFiZTQzODAwMDAwMDFlZTUxNTYyZDdhOHAtMSwKKyAgICAweDEuZjA3M2EyMzI5MjMzN3AyCisgIH0sCisgIHsgLy8gRW50cnkgNjYKKyAgICAtMHgxLjcyNjhjMTEyMjk3Yzg3ZDE3NjMzYmFiNzIyZjMxYTNmcC01LAorICAgIC0weDEuZjVlNGM0MTBmNGVmOHAxNQorICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgMHgxLjcyNjhjMTEyMjk3Yzg3ZDE3NjMzYmFiNzIyZjMxYTNmcC01LAorICAgIDB4MS5mNWU0YzQxMGY0ZWY4cDE1CisgIH0sCisgIHsgLy8gRW50cnkgNjgKKyAgICAweDEuNDIwNzk2MTQ2MDcwZTYyOGMxOWQzOGQxZTkwZGYyMjhwLTE4LAorICAgIC0weDEuZjgwMDAwMDAwMDJwOTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OQorICAgIC0weDEuNDIwNzk2MTQ2MDcwZTYyOGMxOWQzOGQxZTkwZGYyMjhwLTE4LAorICAgIDB4MS5mODAwMDAwMDAwMnA5NQorICB9LAorICB7IC8vIEVudHJ5IDcwCisgICAgLTB4MS5lNGY2ZGM0OTlkOWNjODAzNTYwN2ZhM2Q3NmY5ZjRjNXAtMiwKKyAgICAtMHgxLmY5MzY1ZDc5NTQ2ZTFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MQorICAgIDB4MS5lNGY2ZGM0OTlkOWNjODAzNTYwN2ZhM2Q3NmY5ZjRjNXAtMiwKKyAgICAweDEuZjkzNjVkNzk1NDZlMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDcyCisgICAgMHgxLmIyZWY5OWIxNDBkNjUwNDY4YWVkODJmZTBkNDQyYWRhcC0xNCwKKyAgICAtMHgxLmZmZmZmZmZmZmZlN2VwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDczCisgICAgLTB4MS5iMmVmOTliMTQwZDY1MDQ2OGFlZDgyZmUwZDQ0MmFkYXAtMTQsCisgICAgMHgxLmZmZmZmZmZmZmZlN2VwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDc0CisgICAgMHgxLmRiMGZmYzNlY2M2ZTNiOGUzNzM1N2NhMDAyZDU2MjVicC0xLAorICAgIDB4MS4wcDE1CisgIH0sCisgIHsgLy8gRW50cnkgNzUKKyAgICAtMHgxLmRiMGZmYzNlY2M2ZTNiOGUzNzM1N2NhMDAyZDU2MjVicC0xLAorICAgIC0weDEuMHAxNQorICB9LAorICB7IC8vIEVudHJ5IDc2CisgICAgLTB4MS5lOThmODcwOThiNjI2OTlhZDE2ZTAyNTliMGU4NWIyNHAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxMworICB9LAorICB7IC8vIEVudHJ5IDc3CisgICAgMHgxLmU5OGY4NzA5OGI2MjY5OWFkMTZlMDI1OWIwZTg1YjI0cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAxMworICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgMHgxLjA1M2MzNTA2OGUxMGQ0NWVlNTBmMmQxZGRjYWJjZjNkcC00LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDUyCisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAtMHgxLjA1M2MzNTA2OGUxMGQ0NWVlNTBmMmQxZGRjYWJjZjNkcC00LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXA1MgorICB9LAorICB7IC8vIEVudHJ5IDgwCisgICAgMHgxLjcyZDQyMWI2ODg0ZTUwMGJiZDNhOWVmYzBmMGNlZDkycC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDIyOAorICB9LAorICB7IC8vIEVudHJ5IDgxCisgICAgLTB4MS43MmQ0MjFiNjg4NGU1MDBiYmQzYTllZmMwZjBjZWQ5MnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMjI4CisgIH0sCisgIHsgLy8gRW50cnkgODIKKyAgICAweDEuNzdmYmE5ODdjNTY1MzNhNjY1ZTg4ZTVhNTkyY2ExMGNwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNDkxCisgIH0sCisgIHsgLy8gRW50cnkgODMKKyAgICAtMHgxLjc3ZmJhOTg3YzU2NTMzYTY2NWU4OGU1YTU5MmNhMTBjcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXA0OTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NAorICAgIC0weDEuNzIzYjI2MjUzMzFhZjJlNzlhOWYwNzE0NWExZTU3MzFwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDNwMjE1CisgIH0sCisgIHsgLy8gRW50cnkgODUKKyAgICAweDEuNzIzYjI2MjUzMzFhZjJlNzlhOWYwNzE0NWExZTU3MzFwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAzcDIxNQorICB9LAorICB7IC8vIEVudHJ5IDg2CisgICAgMHgxLmFlZDU0OGYwOTBjZjQ3ZmU3ZTMyMTAzYWIxNDBjYWY4cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NworICAgIC0weDEuYWVkNTQ4ZjA5MGNmNDdmZTdlMzIxMDNhYjE0MGNhZjhwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OAorICAgIC0weDEuZmY5ODMyMDhjN2RjOTc4MDc5MTc0YjQ2MWIzODA5ZjBwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDdwOAorICB9LAorICB7IC8vIEVudHJ5IDg5CisgICAgMHgxLmZmOTgzMjA4YzdkYzk3ODA3OTE3NGI0NjFiMzgwOWYwcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwN3A4CisgIH0sCisgIHsgLy8gRW50cnkgOTAKKyAgICAweDEuZmZlZjI5ZGMzODQ1MmZmZWY0YTc3OWExZjg2NzA3ZGFwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDdwMjc1CisgIH0sCisgIHsgLy8gRW50cnkgOTEKKyAgICAtMHgxLmZmZWYyOWRjMzg0NTJmZmVmNGE3NzlhMWY4NjcwN2RhcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwN3AyNzUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MgorICAgIC0weDEuZmE4OGMzNzU3MjNjMGQ3ZWExZjJkMDhlYmIyZjk0MDdwLTgsCisgICAgMHgxLjAwMDAwMDAwMDAwMDdwNDQ5CisgIH0sCisgIHsgLy8gRW50cnkgOTMKKyAgICAweDEuZmE4OGMzNzU3MjNjMGQ3ZWExZjJkMDhlYmIyZjk0MDdwLTgsCisgICAgLTB4MS4wMDAwMDAwMDAwMDA3cDQ0OQorICB9LAorICB7IC8vIEVudHJ5IDk0CisgICAgMHgxLmZmZjUzMjJjOTRlYWUxYjBiNTEwODZjMDhmYWE1ODVjcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDExcDY0NAorICB9LAorICB7IC8vIEVudHJ5IDk1CisgICAgLTB4MS5mZmY1MzIyYzk0ZWFlMWIwYjUxMDg2YzA4ZmFhNTg1Y3AtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMTFwNjQ0CisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAtMHgxLmE3MzYzMGFmOGYxNWI4MDAwMDU0ZGRkOTUwYmJhMTA3cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDFmcDE2NAorICB9LAorICB7IC8vIEVudHJ5IDk3CisgICAgMHgxLmE3MzYzMGFmOGYxNWI4MDAwMDU0ZGRkOTUwYmJhMTA3cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAxZnAxNjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIDB4MS4xYzU0OGY5MjQ5ZTQ0NzQ5ODg2NDZiODY4OTRlOTU4MXAtMiwKKyAgICAweDEuMDAwMDAwMDAwMDAzOHAzODAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OQorICAgIC0weDEuMWM1NDhmOTI0OWU0NDc0OTg4NjQ2Yjg2ODk0ZTk1ODFwLTIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDM4cDM4MAorICB9LAorICB7IC8vIEVudHJ5IDEwMAorICAgIDB4MS5jYTk2NWJkMmM0ZGZlZTQ3NzljYThjNzk3ODA2MjkyZHAtMywKKyAgICAweDEuMDAwMDAwMDAwMDExOHAzODAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEKKyAgICAtMHgxLmNhOTY1YmQyYzRkZmVlNDc3OWNhOGM3OTc4MDYyOTJkcC0zLAorICAgIC0weDEuMDAwMDAwMDAwMDExOHAzODAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIKKyAgICAtMHgxLjgzN2I5ZGRkYzI0Y2YyZjcyOWEzODE0Nzc5NWIxOGQycC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMTJjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMKKyAgICAweDEuODM3YjlkZGRjMjRjZjJmNzI5YTM4MTQ3Nzk1YjE4ZDJwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMTJjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQKKyAgICAweDEuZDgyYzE3ODRjM2VjYmZlZmIwMmQ3ZDZiNTg1ZjczYzRwLTIsCisgICAgMHgxLjAwMDAwMDAwMDAxZjhwNzAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA1CisgICAgLTB4MS5kODJjMTc4NGMzZWNiZmVmYjAyZDdkNmI1ODVmNzNjNHAtMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAxZjhwNzAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA2CisgICAgMHgxLmZmZmVhYWFhZWYyZWU3ZWU4NzZmOTBiNzBiNTEyNDc1cC04LAorICAgIDB4MS4wMDAwMDAwMDAwMnAtNworICB9LAorICB7IC8vIEVudHJ5IDEwNworICAgIC0weDEuZmZmZWFhYWFlZjJlZTdlZTg3NmY5MGI3MGI1MTI0NzVwLTgsCisgICAgLTB4MS4wMDAwMDAwMDAwMnAtNworICB9LAorICB7IC8vIEVudHJ5IDEwOAorICAgIC0weDEuMDg3MWJkZGQ5MGZjNTgzNDAzNGVlM2Y2Zjg2YjQzYTNwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAycDQwCisgIH0sCisgIHsgLy8gRW50cnkgMTA5CisgICAgMHgxLjA4NzFiZGRkOTBmYzU4MzQwMzRlZTNmNmY4NmI0M2EzcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDJwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAweDEuZmZmZWFhYWFlZjJmMDdlZTQ3NmZhNjBjNWRiZTQ4ODZwLTgsCisgICAgMHgxLjAwMDAwMDAwMDAyMDFwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEKKyAgICAtMHgxLmZmZmVhYWFhZWYyZjA3ZWU0NzZmYTYwYzVkYmU0ODg2cC04LAorICAgIC0weDEuMDAwMDAwMDAwMDIwMXAtNworICB9LAorICB7IC8vIEVudHJ5IDExMgorICAgIDB4MS5mZmZlYWFhYWVmMzMwN2U2NDc3MjUwYjZhYjUyNGFiN3AtOCwKKyAgICAweDEuMDAwMDAwMDAwMDIyMXAtNworICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIC0weDEuZmZmZWFhYWFlZjMzMDdlNjQ3NzI1MGI2YWI1MjRhYjdwLTgsCisgICAgLTB4MS4wMDAwMDAwMDAwMjIxcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTE0CisgICAgMHgxLmZmZmVhYWFhZWYzNjI3ZTAwNzc0NjYwYmI3ZDdhODdjcC04LAorICAgIDB4MS4wMDAwMDAwMDAwMjNhcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTE1CisgICAgLTB4MS5mZmZlYWFhYWVmMzYyN2UwMDc3NDY2MGJiN2Q3YTg3Y3AtOCwKKyAgICAtMHgxLjAwMDAwMDAwMDAyM2FwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYKKyAgICAweDEuZTBjNmVkZmE5MzYwMTU5NTM0ZGVmNzEzOTI1ZjEyNmZwLTksCisgICAgMHgxLjAwMDAwMDAwMDQwcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgMTE3CisgICAgLTB4MS5lMGM2ZWRmYTkzNjAxNTk1MzRkZWY3MTM5MjVmMTI2ZnAtOSwKKyAgICAtMHgxLjAwMDAwMDAwMDQwcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgMTE4CisgICAgMHgxLmVhMWY2MTgzNTZkYjBkM2FiNjZkMGVmNjQ5M2JjOTNkcC01LAorICAgIDB4MS4wMDAwMDAwYzBwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkKKyAgICAtMHgxLmVhMWY2MTgzNTZkYjBkM2FiNjZkMGVmNjQ5M2JjOTNkcC01LAorICAgIC0weDEuMDAwMDAwMGMwcDQwCisgIH0sCisgIHsgLy8gRW50cnkgMTIwCisgICAgMHgxLmZhYWVlZDc1ODc1NDFmZmZmZjk5MjJiYTY2OTBiOGJhcC0zLAorICAgIDB4MS4wMDAwMDAxM2M4NmY0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgLTB4MS5mYWFlZWQ3NTg3NTQxZmZmZmY5OTIyYmE2NjkwYjhiYXAtMywKKyAgICAtMHgxLjAwMDAwMDEzYzg2ZjRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIKKyAgICAweDEuNTQwYmM3Nzg1NjgwYWMyY2ExNjlmZjllM2NjNGIxNTJwLTEsCisgICAgMHgxLjAwMXAxMworICB9LAorICB7IC8vIEVudHJ5IDEyMworICAgIC0weDEuNTQwYmM3Nzg1NjgwYWMyY2ExNjlmZjllM2NjNGIxNTJwLTEsCisgICAgLTB4MS4wMDFwMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAtMHgxLjM3YTdjYjkwN2EyZTUwMDEwNmIwNGQ5ZTNmMGIxYjhjcC0xLAorICAgIDB4MS4wMDNwNjk5CisgIH0sCisgIHsgLy8gRW50cnkgMTI1CisgICAgMHgxLjM3YTdjYjkwN2EyZTUwMDEwNmIwNGQ5ZTNmMGIxYjhjcC0xLAorICAgIC0weDEuMDAzcDY5OQorICB9LAorICB7IC8vIEVudHJ5IDEyNgorICAgIC0weDEuMjllNTg0NWZjNTRiNTgwMTQ1MjczZjJjYWZlNzNhYjVwLTEsCisgICAgMHgxLjAwMzgwcDQwCisgIH0sCisgIHsgLy8gRW50cnkgMTI3CisgICAgMHgxLjI5ZTU4NDVmYzU0YjU4MDE0NTI3M2YyY2FmZTczYWI1cC0xLAorICAgIC0weDEuMDAzODBwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgKKyAgICAweDEuZmZlNWNhNDY1NjQ5MTdhMWU4MTJhZWRkNDhmZTEwN2NwLTEsCisgICAgMHgxLjAwN3AxMAorICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIC0weDEuZmZlNWNhNDY1NjQ5MTdhMWU4MTJhZWRkNDhmZTEwN2NwLTEsCisgICAgLTB4MS4wMDdwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAKKyAgICAweDEuZWE0ZGY4MmRiMDE0YWMwYzkxMzQ2NWRhNTdiNmE2NDNwLTEsCisgICAgMHgxLjAwN3AyNQorICB9LAorICB7IC8vIEVudHJ5IDEzMQorICAgIC0weDEuZWE0ZGY4MmRiMDE0YWMwYzkxMzQ2NWRhNTdiNmE2NDNwLTEsCisgICAgLTB4MS4wMDdwMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIKKyAgICAweDEuZmU3NTdhZWYxYzgwYzdlYzE2MDAzZDNhZTVmMGNlMTVwLTEsCisgICAgMHgxLjAwN3A0MQorICB9LAorICB7IC8vIEVudHJ5IDEzMworICAgIC0weDEuZmU3NTdhZWYxYzgwYzdlYzE2MDAzZDNhZTVmMGNlMTVwLTEsCisgICAgLTB4MS4wMDdwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQKKyAgICAweDEuZTliNzE4MDVlYzA2ODVkNDg0ZjYyNzBmNjQxMWRjMzZwLTcsCisgICAgMHgxLjAwY3A0MQorICB9LAorICB7IC8vIEVudHJ5IDEzNQorICAgIC0weDEuZTliNzE4MDVlYzA2ODVkNDg0ZjYyNzBmNjQxMWRjMzZwLTcsCisgICAgLTB4MS4wMGNwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYKKyAgICAweDEuYjBiNmQwYTU0MDU4MjgwMDA4ZTgwNDg4ZjhhYjFiYjdwLTEsCisgICAgMHgxLjAxYzAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzcKKyAgICAtMHgxLmIwYjZkMGE1NDA1ODI4MDAwOGU4MDQ4OGY4YWIxYmI3cC0xLAorICAgIC0weDEuMDFjMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDEzOAorICAgIDB4MS5mZWYwMDkyNjI3MDEyODBiOTJhYWY5MjVkZGE2M2JiYXAtMywKKyAgICAweDEuMDIzMjJlNDZkYTkxOXAtMgorICB9LAorICB7IC8vIEVudHJ5IDEzOQorICAgIC0weDEuZmVmMDA5MjYyNzAxMjgwYjkyYWFmOTI1ZGRhNjNiYmFwLTMsCisgICAgLTB4MS4wMjMyMmU0NmRhOTE5cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTQwCisgICAgMHgxLmZmYzkwMDU5ODA0YTA4MmQ5YjNmNDZiNzdlZTgxOTMycC0zLAorICAgIDB4MS4wMmEyMzY0NzhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAtMHgxLmZmYzkwMDU5ODA0YTA4MmQ5YjNmNDZiNzdlZTgxOTMycC0zLAorICAgIC0weDEuMDJhMjM2NDc4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTQyCisgICAgMHgxLmZmZDEwYTZiNTQyOWU4MjhiZWY0ZDk0MTNlYjlmNmMwcC0zLAorICAgIDB4MS4wMmE2NWQwOGNhNWU1cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTQzCisgICAgLTB4MS5mZmQxMGE2YjU0MjllODI4YmVmNGQ5NDEzZWI5ZjZjMHAtMywKKyAgICAtMHgxLjAyYTY1ZDA4Y2E1ZTVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDQKKyAgICAweDEuZmZkMTBhYjMwMmEzZjdlMGEwNDhkYjU4NjFlN2IyMGJwLTMsCisgICAgMHgxLjAyYTY1ZDJkY2U0OWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDUKKyAgICAtMHgxLmZmZDEwYWIzMDJhM2Y3ZTBhMDQ4ZGI1ODYxZTdiMjBicC0zLAorICAgIC0weDEuMDJhNjVkMmRjZTQ5YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDE0NgorICAgIDB4MS5mZmUwYjE3NjRjYTRjN2QyMzI5NDMzODI4Y2RjOTAxY3AtMywKKyAgICAweDEuMDJhZTcyMzhhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTQ3CisgICAgLTB4MS5mZmUwYjE3NjRjYTRjN2QyMzI5NDMzODI4Y2RjOTAxY3AtMywKKyAgICAtMHgxLjAyYWU3MjM4YXAtMgorICB9LAorICB7IC8vIEVudHJ5IDE0OAorICAgIC0weDEuZjY4ZjBlMjZjMGY2YWQ0NGY3MTg0ZDU2YmU5NWUxYWVwLTMsCisgICAgMHgxLjA1MDFkMjIyMjFkYWNwNjIxCisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgMHgxLmY2OGYwZTI2YzBmNmFkNDRmNzE4NGQ1NmJlOTVlMWFlcC0zLAorICAgIC0weDEuMDUwMWQyMjIyMWRhY3A2MjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTAKKyAgICAweDEuYjYzYzQxZjA5ZWI3NDdmMzBjMWFmNWYyNTQzNDBhNGNwLTEsCisgICAgMHgxLjA2ZmZmZmZmZmZmZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDE1MQorICAgIC0weDEuYjYzYzQxZjA5ZWI3NDdmMzBjMWFmNWYyNTQzNDBhNGNwLTEsCisgICAgLTB4MS4wNmZmZmZmZmZmZmY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAtMHgxLmZmZGMxNzNhZGFiYjFhZmQ1OGZjYjU2NDNjZDg2NTYycC0xLAorICAgIDB4MS4wNzAyM2QzZDQ0MjE1cDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgMHgxLmZmZGMxNzNhZGFiYjFhZmQ1OGZjYjU2NDNjZDg2NTYycC0xLAorICAgIC0weDEuMDcwMjNkM2Q0NDIxNXAxMgorICB9LAorICB7IC8vIEVudHJ5IDE1NAorICAgIDB4MS4wODg5ZTExYmVmMTM1N2E4ODc0MmFiM2E3ZjE4MDc4NnAtNSwKKyAgICAweDEuMDg5NWE3YTNlOGFlNnAtNQorICB9LAorICB7IC8vIEVudHJ5IDE1NQorICAgIC0weDEuMDg4OWUxMWJlZjEzNTdhODg3NDJhYjNhN2YxODA3ODZwLTUsCisgICAgLTB4MS4wODk1YTdhM2U4YWU2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTU2CisgICAgMHgxLjA4Y2EwNzdjNzY0NDU3YWE2ZDk2OGFmYzFkMWIxN2IzcC01LAorICAgIDB4MS4wOGQ1ZDY5ODQwNjAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgLTB4MS4wOGNhMDc3Yzc2NDQ1N2FhNmQ5NjhhZmMxZDFiMTdiM3AtNSwKKyAgICAtMHgxLjA4ZDVkNjk4NDA2MDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTgKKyAgICAtMHgxLmZmN2ZiZTUxODAyM2U5MGIzZjI4ZjgxYWI5M2U4NzJmcC0xLAorICAgIDB4MS4wZTBwNgorICB9LAorICB7IC8vIEVudHJ5IDE1OQorICAgIDB4MS5mZjdmYmU1MTgwMjNlOTBiM2YyOGY4MWFiOTNlODcyZnAtMSwKKyAgICAtMHgxLjBlMHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTYwCisgICAgLTB4MS5mZDZjNjhiODc3YWZlODAzYWFhYjJiZDMwMTI0ZWNkZnAtMSwKKyAgICAweDEuMTA3YmE0OWMzNDZlNHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTYxCisgICAgMHgxLmZkNmM2OGI4NzdhZmU4MDNhYWFiMmJkMzAxMjRlY2RmcC0xLAorICAgIC0weDEuMTA3YmE0OWMzNDZlNHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTYyCisgICAgLTB4MS5hMmJhNmJjNzBiY2U0ODAxZWE0ZDFjODVmMTE2MTkzZHAtMSwKKyAgICAweDEuMTQ5MTU0NDc3NDQ0MHA3NDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjMKKyAgICAweDEuYTJiYTZiYzcwYmNlNDgwMWVhNGQxYzg1ZjExNjE5M2RwLTEsCisgICAgLTB4MS4xNDkxNTQ0Nzc0NDQwcDc0NQorICB9LAorICB7IC8vIEVudHJ5IDE2NAorICAgIDB4MS4xNjU2MDk3OTBmMjM0ODRhNDcwMWI0NDM5ZDRmZTUxZnAtNSwKKyAgICAweDEuMTY2M2MwZTUxODE4MHAtNQorICB9LAorICB7IC8vIEVudHJ5IDE2NQorICAgIC0weDEuMTY1NjA5NzkwZjIzNDg0YTQ3MDFiNDQzOWQ0ZmU1MWZwLTUsCisgICAgLTB4MS4xNjYzYzBlNTE4MTgwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTY2CisgICAgLTB4MS5mYzA1MjNmZjk0ZTQ0YzAxNzMxZTQ1OTYzMDM0Y2JhOHAtMSwKKyAgICAweDEuMTc0NWQxNzQ1ZDE3NnAyMzgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjcKKyAgICAweDEuZmMwNTIzZmY5NGU0NGMwMTczMWU0NTk2MzAzNGNiYThwLTEsCisgICAgLTB4MS4xNzQ1ZDE3NDVkMTc2cDIzOAorICB9LAorICB7IC8vIEVudHJ5IDE2OAorICAgIDB4MS5mMzRhNzI5YzU4NGJjYzk2NjY0MDJjZmRiNDg4MzlmZnAtMSwKKyAgICAweDEuMTc0NzJhNDA4YTNlMHA5NworICB9LAorICB7IC8vIEVudHJ5IDE2OQorICAgIC0weDEuZjM0YTcyOWM1ODRiY2M5NjY2NDAyY2ZkYjQ4ODM5ZmZwLTEsCisgICAgLTB4MS4xNzQ3MmE0MDhhM2UwcDk3CisgIH0sCisgIHsgLy8gRW50cnkgMTcwCisgICAgMHgxLjE3N2ZhZTE2OWZkZjA4NThiMWQ0ZTdiYWQ2OTk4MWRjcC01LAorICAgIDB4MS4xNzhkOTFiNmI5OTJkcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTcxCisgICAgLTB4MS4xNzdmYWUxNjlmZGYwODU4YjFkNGU3YmFkNjk5ODFkY3AtNSwKKyAgICAtMHgxLjE3OGQ5MWI2Yjk5MmRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzIKKyAgICAweDEuMTc3ZmFlMTZhMTIwZTg1ODQzZDFkZmVmMzY3MjZjZWNwLTUsCisgICAgMHgxLjE3OGQ5MWI2YmFkNGVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzMKKyAgICAtMHgxLjE3N2ZhZTE2YTEyMGU4NTg0M2QxZGZlZjM2NzI2Y2VjcC01LAorICAgIC0weDEuMTc4ZDkxYjZiYWQ0ZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDE3NAorICAgIDB4MS4xNzdmYWUxNmExZjc4ODU2NjM3Y2M5ZGE4YWFmNjQzOXAtNSwKKyAgICAweDEuMTc4ZDkxYjZiYmFiYXAtNQorICB9LAorICB7IC8vIEVudHJ5IDE3NQorICAgIC0weDEuMTc3ZmFlMTZhMWY3ODg1NjYzN2NjOWRhOGFhZjY0MzlwLTUsCisgICAgLTB4MS4xNzhkOTFiNmJiYWJhcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTc2CisgICAgMHgxLjE3N2ZhZTE2YTQwZmU4NThkYTFkZGNiNTgzYmI5ZjNicC01LAorICAgIDB4MS4xNzhkOTFiNmJkYzQ1cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTc3CisgICAgLTB4MS4xNzdmYWUxNmE0MGZlODU4ZGExZGRjYjU4M2JiOWYzYnAtNSwKKyAgICAtMHgxLjE3OGQ5MWI2YmRjNDVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzgKKyAgICAweDEuMjk3Yzc2OGYyNDEzMDgwMDAyZWRjYjlhOTA1OTQ2YWZwLTEsCisgICAgMHgxLjE5NzUyZGJlZTVmNmFwOTMzCisgIH0sCisgIHsgLy8gRW50cnkgMTc5CisgICAgLTB4MS4yOTdjNzY4ZjI0MTMwODAwMDJlZGNiOWE5MDU5NDZhZnAtMSwKKyAgICAtMHgxLjE5NzUyZGJlZTVmNmFwOTMzCisgIH0sCisgIHsgLy8gRW50cnkgMTgwCisgICAgMHgxLmI4MjZkZjVjYWZhZmE4MjQ3NzliYjgwOGQ2NGRlNmZicC0yLAorICAgIDB4MS4xYjMwMDljZmU0ZGJjcDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAtMHgxLmI4MjZkZjVjYWZhZmE4MjQ3NzliYjgwOGQ2NGRlNmZicC0yLAorICAgIC0weDEuMWIzMDA5Y2ZlNGRiY3A4CisgIH0sCisgIHsgLy8gRW50cnkgMTgyCisgICAgMHgxLmI3YTU5NTYyNTBiNmE4Mzg4MjEzM2JiZTE0Yzg0N2NjcC0yLAorICAgIDB4MS4xZjY0NzVkOTViZjE4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAtMHgxLmI3YTU5NTYyNTBiNmE4Mzg4MjEzM2JiZTE0Yzg0N2NjcC0yLAorICAgIC0weDEuMWY2NDc1ZDk1YmYxOHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTg0CisgICAgMHgxLjRkYjY1NjZiNjQ1NDc3ZmZlYTlmYWFmOGJmNDYzYTFlcC0xLAorICAgIDB4MS4yMjkxNDhhNDUyMjkxcDExOAorICB9LAorICB7IC8vIEVudHJ5IDE4NQorICAgIC0weDEuNGRiNjU2NmI2NDU0NzdmZmVhOWZhYWY4YmY0NjNhMWVwLTEsCisgICAgLTB4MS4yMjkxNDhhNDUyMjkxcDExOAorICB9LAorICB7IC8vIEVudHJ5IDE4NgorICAgIDB4MS4xNjg2ZmVlMmM0OWE3ZmZmYjY4ZGY2ODFiMmRhN2U0OXAtMSwKKyAgICAweDEuMjY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTg3CisgICAgLTB4MS4xNjg2ZmVlMmM0OWE3ZmZmYjY4ZGY2ODFiMmRhN2U0OXAtMSwKKyAgICAtMHgxLjI2OHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE4OAorICAgIDB4MS4yMmViMjFhNDRkNjI3ODAwMDAwMzFhZTQzYzQ0ODUxMXAtMiwKKyAgICAweDEuMjZmYjM4NDRkZDE5MHAtMgorICB9LAorICB7IC8vIEVudHJ5IDE4OQorICAgIC0weDEuMjJlYjIxYTQ0ZDYyNzgwMDAwMDMxYWU0M2M0NDg1MTFwLTIsCisgICAgLTB4MS4yNmZiMzg0NGRkMTkwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTkwCisgICAgMHgxLmQ0YTIxNmQ4OWIyYjM3ZjQwZmYwODc1M2VkNjAwZTc0cC0xLAorICAgIDB4MS4yN2ZmZmZmZmZlNmIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTEKKyAgICAtMHgxLmQ0YTIxNmQ4OWIyYjM3ZjQwZmYwODc1M2VkNjAwZTc0cC0xLAorICAgIC0weDEuMjdmZmZmZmZmZTZiMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTkyCisgICAgLTB4MS43NmM5YjBmM2EyMmY3M2NmZDQ0NTNmY2Y3YjIxZTM1OHAtMSwKKyAgICAweDEuMjg0Yjg0MDQ4ZDQ4MXAyMDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTMKKyAgICAweDEuNzZjOWIwZjNhMjJmNzNjZmQ0NDUzZmNmN2IyMWUzNThwLTEsCisgICAgLTB4MS4yODRiODQwNDhkNDgxcDIwNAorICB9LAorICB7IC8vIEVudHJ5IDE5NAorICAgIC0weDEuZmYwMTIyNmY5N2QzMmQ2YjVjMGQ1ZTRhM2EyZjUzYzNwLTEsCisgICAgMHgxLjI5OTllMzEwOWNhZDRwMgorICB9LAorICB7IC8vIEVudHJ5IDE5NQorICAgIDB4MS5mZjAxMjI2Zjk3ZDMyZDZiNWMwZDVlNGEzYTJmNTNjM3AtMSwKKyAgICAtMHgxLjI5OTllMzEwOWNhZDRwMgorICB9LAorICB7IC8vIEVudHJ5IDE5NgorICAgIDB4MS4yYThmMTFlN2FlODJjMGEzNzQ4NTViNTNiMzYwNWQzYnAtNSwKKyAgICAweDEuMmFhcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgLTB4MS4yYThmMTFlN2FlODJjMGEzNzQ4NTViNTNiMzYwNWQzYnAtNSwKKyAgICAtMHgxLjJhYXAtNQorICB9LAorICB7IC8vIEVudHJ5IDE5OAorICAgIDB4MS4yYjAzZDFiZjc3M2RmN2I2OTdkOGE5N2VjY2VmZWM1MHAtNSwKKyAgICAweDEuMmIxNGQzYmUwYzIzMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDE5OQorICAgIC0weDEuMmIwM2QxYmY3NzNkZjdiNjk3ZDhhOTdlY2NlZmVjNTBwLTUsCisgICAgLTB4MS4yYjE0ZDNiZTBjMjMwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjAwCisgICAgLTB4MS5mZmI5MGVlNjQxNzkxZTY5OWFhN2ZjNzEzOWJmNThiNHAtMSwKKyAgICAweDEuMmI3Y2I0NDg0OTk4MXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjAxCisgICAgMHgxLmZmYjkwZWU2NDE3OTFlNjk5YWE3ZmM3MTM5YmY1OGI0cC0xLAorICAgIC0weDEuMmI3Y2I0NDg0OTk4MXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjAyCisgICAgLTB4MS5mZmZmZmY3OWU3MWEzZGIyMjEwOWM2YmI4N2Y5YzIzN3AtMSwKKyAgICAweDEuMmJlY2M4Njg1MjU4MHAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDMKKyAgICAweDEuZmZmZmZmNzllNzFhM2RiMjIxMDljNmJiODdmOWMyMzdwLTEsCisgICAgLTB4MS4yYmVjYzg2ODUyNTgwcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDIwNAorICAgIC0weDEuZmZmOWVkYWY4NWI3NmY2Y2JiMmY1YjdlMzg0Y2JiYzlwLTEsCisgICAgMHgxLjJjZmExNGNlMjdjZDVwMgorICB9LAorICB7IC8vIEVudHJ5IDIwNQorICAgIDB4MS5mZmY5ZWRhZjg1Yjc2ZjZjYmIyZjViN2UzODRjYmJjOXAtMSwKKyAgICAtMHgxLjJjZmExNGNlMjdjZDVwMgorICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIDB4MS4yY2JhYWE0Y2ViYjUxN2ZlN2JkMTRmMDYyYWZlYzM5MHAtNCwKKyAgICAweDEuMmQwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjA3CisgICAgLTB4MS4yY2JhYWE0Y2ViYjUxN2ZlN2JkMTRmMDYyYWZlYzM5MHAtNCwKKyAgICAtMHgxLjJkMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDIwOAorICAgIC0weDEuZmZmZmJjMTc3ZTAwZmY4OWNiYjRmNDlhMDY0M2RhNzhwLTEsCisgICAgMHgxLjJkNzZkMTg3MjFiZThwMgorICB9LAorICB7IC8vIEVudHJ5IDIwOQorICAgIDB4MS5mZmZmYmMxNzdlMDBmZjg5Y2JiNGY0OWEwNjQzZGE3OHAtMSwKKyAgICAtMHgxLjJkNzZkMTg3MjFiZThwMgorICB9LAorICB7IC8vIEVudHJ5IDIxMAorICAgIDB4MS43NDU4NDNkZmFmZWZkMWJmOTY1Njg5NmE4ZmI1YjBlM3AtMTgsCisgICAgMHgxLjMwMmE0OTRlMDkwOTBwOTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTEKKyAgICAtMHgxLjc0NTg0M2RmYWZlZmQxYmY5NjU2ODk2YThmYjViMGUzcC0xOCwKKyAgICAtMHgxLjMwMmE0OTRlMDkwOTBwOTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAweDEuZmZjYzU2OGQ0MjM3NjZjOTJlOWMxNzVmOTIxMGYxZjRwLTEsCisgICAgMHgxLjMxY2M3MzFjYzczMWNwMTAwMAorICB9LAorICB7IC8vIEVudHJ5IDIxMworICAgIC0weDEuZmZjYzU2OGQ0MjM3NjZjOTJlOWMxNzVmOTIxMGYxZjRwLTEsCisgICAgLTB4MS4zMWNjNzMxY2M3MzFjcDEwMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTQKKyAgICAweDEuYjY3NjA3N2Q0ZmFmNzkyN2RhMWY4NTg1MzlmYWQxZmZwLTEsCisgICAgMHgxLjMyODQ2M2Q0ZjhjYTZwNDQxCisgIH0sCisgIHsgLy8gRW50cnkgMjE1CisgICAgLTB4MS5iNjc2MDc3ZDRmYWY3OTI3ZGExZjg1ODUzOWZhZDFmZnAtMSwKKyAgICAtMHgxLjMyODQ2M2Q0ZjhjYTZwNDQxCisgIH0sCisgIHsgLy8gRW50cnkgMjE2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZjM0NzFkOGRjMDcwZDVlNnAtMSwKKyAgICAweDEuMzJjZTkwYjMyMTcxZXAxOAorICB9LAorICB7IC8vIEVudHJ5IDIxNworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZjM0NzFkOGRjMDcwZDVlNnAtMSwKKyAgICAtMHgxLjMyY2U5MGIzMjE3MWVwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAweDEuMzVjYmQzMjQwZDE0ODg0NWQzOWViZDU0YjE1NTY3NzlwLTUsCisgICAgMHgxLjM1ZGViZDdmMDIwZWNwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTkKKyAgICAtMHgxLjM1Y2JkMzI0MGQxNDg4NDVkMzllYmQ1NGIxNTU2Nzc5cC01LAorICAgIC0weDEuMzVkZWJkN2YwMjBlY3AtNQorICB9LAorICB7IC8vIEVudHJ5IDIyMAorICAgIDB4MS4zYmIyMDg2NTU5ZmE5ODJlNWM2ZGExMGQ4ZDlhYzkzMXAtNywKKyAgICAweDEuM2JiMzQ4Nzg5MzQwNXAtNworICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIC0weDEuM2JiMjA4NjU1OWZhOTgyZTVjNmRhMTBkOGQ5YWM5MzFwLTcsCisgICAgLTB4MS4zYmIzNDg3ODkzNDA1cC03CisgIH0sCisgIHsgLy8gRW50cnkgMjIyCisgICAgMHgxLjNiYjIwODY1NTlmYWI4MmRmYjE5MjVlYWMyYWI4YmMxcC03LAorICAgIDB4MS4zYmIzNDg3ODkzNDA3cC03CisgIH0sCisgIHsgLy8gRW50cnkgMjIzCisgICAgLTB4MS4zYmIyMDg2NTU5ZmFiODJkZmIxOTI1ZWFjMmFiOGJjMXAtNywKKyAgICAtMHgxLjNiYjM0ODc4OTM0MDdwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjQKKyAgICAweDEuZGZmMTk3ZWRjNTFkMjM1ZTRhNGNjNmUzNGJkMWZkMTBwLTE2LAorICAgIDB4MS4zYmI2ODFkNjVhYTYwcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDIyNQorICAgIC0weDEuZGZmMTk3ZWRjNTFkMjM1ZTRhNGNjNmUzNGJkMWZkMTBwLTE2LAorICAgIC0weDEuM2JiNjgxZDY1YWE2MHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjYKKyAgICAtMHgxLjVkMDhkM2RiYjQxYWY4MDAwMDA1M2JhMzBlOTVlNzA5cC0zLAorICAgIDB4MS4zZjlhYTg2MjYwNDJmcDgzCisgIH0sCisgIHsgLy8gRW50cnkgMjI3CisgICAgMHgxLjVkMDhkM2RiYjQxYWY4MDAwMDA1M2JhMzBlOTVlNzA5cC0zLAorICAgIC0weDEuM2Y5YWE4NjI2MDQyZnA4MworICB9LAorICB7IC8vIEVudHJ5IDIyOAorICAgIDB4MS5mYjUwMzk4M2Y5NGJiNzQ5ZmNlOWNjY2E1NmEzNWVjNnAtMywKKyAgICAweDEuM2ZlcDE5CisgIH0sCisgIHsgLy8gRW50cnkgMjI5CisgICAgLTB4MS5mYjUwMzk4M2Y5NGJiNzQ5ZmNlOWNjY2E1NmEzNWVjNnAtMywKKyAgICAtMHgxLjNmZXAxOQorICB9LAorICB7IC8vIEVudHJ5IDIzMAorICAgIC0weDEuZDM4NzZlYWNjOWVlNmVjNWE5M2VhMTRlMDMyZjliMDJwLTEsCisgICAgMHgxLjQyODU0NzhmMWUzYzhwNTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzEKKyAgICAweDEuZDM4NzZlYWNjOWVlNmVjNWE5M2VhMTRlMDMyZjliMDJwLTEsCisgICAgLTB4MS40Mjg1NDc4ZjFlM2M4cDU4CisgIH0sCisgIHsgLy8gRW50cnkgMjMyCisgICAgMHgxLjQyYjY2ZDU0ZjY5YzBmYWJlMzcxZDcwM2ExZDdkN2M5cC01LAorICAgIDB4MS40MmNiY2Y0NWExNjllcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjMzCisgICAgLTB4MS40MmI2NmQ1NGY2OWMwZmFiZTM3MWQ3MDNhMWQ3ZDdjOXAtNSwKKyAgICAtMHgxLjQyY2JjZjQ1YTE2OWVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzQKKyAgICAweDEuYjQ1ZTllOTQyNzU1MzgwMDAwMDE1ZTFkYjBjZTE4OGRwLTEsCisgICAgMHgxLjQzZmZmZmZmZmZmNmFwNTU3CisgIH0sCisgIHsgLy8gRW50cnkgMjM1CisgICAgLTB4MS5iNDVlOWU5NDI3NTUzODAwMDAwMTVlMWRiMGNlMTg4ZHAtMSwKKyAgICAtMHgxLjQzZmZmZmZmZmZmNmFwNTU3CisgIH0sCisgIHsgLy8gRW50cnkgMjM2CisgICAgMHgxLjQzZmZmZmZmZWE2MDI4MDAwMDZlZDc4NjJiMzIyNGE2cC0xNywKKyAgICAweDEuNDQwcC0xNworICB9LAorICB7IC8vIEVudHJ5IDIzNworICAgIC0weDEuNDNmZmZmZmZlYTYwMjgwMDAwNmVkNzg2MmIzMjI0YTZwLTE3LAorICAgIC0weDEuNDQwcC0xNworICB9LAorICB7IC8vIEVudHJ5IDIzOAorICAgIC0weDEuNmE0ZTk4ZDJkOGIxYjdmYjQzZmVmMWJjNGUzMjQ1YmJwLTEsCisgICAgMHgxLjQ3NDhjMDhkYzA5NzZwMjAwCisgIH0sCisgIHsgLy8gRW50cnkgMjM5CisgICAgMHgxLjZhNGU5OGQyZDhiMWI3ZmI0M2ZlZjFiYzRlMzI0NWJicC0xLAorICAgIC0weDEuNDc0OGMwOGRjMDk3NnAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDAKKyAgICAtMHgxLmI1N2NhOGFhY2YyYTkzN2EyNjljY2RmYThiMzhjOGMxcC0xLAorICAgIDB4MS40NzhmYzA4cDQzCisgIH0sCisgIHsgLy8gRW50cnkgMjQxCisgICAgMHgxLmI1N2NhOGFhY2YyYTkzN2EyNjljY2RmYThiMzhjOGMxcC0xLAorICAgIC0weDEuNDc4ZmMwOHA0MworICB9LAorICB7IC8vIEVudHJ5IDI0MgorICAgIDB4MS5mZmUzODAwOGVmNmI0OTU2YjI5MDIwMmQ0MTRkNTljM3AtMSwKKyAgICAweDEuNGNmMzZkMTdjNTk2ZXAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAtMHgxLmZmZTM4MDA4ZWY2YjQ5NTZiMjkwMjAyZDQxNGQ1OWMzcC0xLAorICAgIC0weDEuNGNmMzZkMTdjNTk2ZXAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDQKKyAgICAweDEuZDY0NTdhM2YxMmU2YzUyN2E4NTM0NzA0MDFkMzVkMmRwLTEsCisgICAgMHgxLjRmMGYzMDhwNDg4CisgIH0sCisgIHsgLy8gRW50cnkgMjQ1CisgICAgLTB4MS5kNjQ1N2EzZjEyZTZjNTI3YTg1MzQ3MDQwMWQzNWQyZHAtMSwKKyAgICAtMHgxLjRmMGYzMDhwNDg4CisgIH0sCisgIHsgLy8gRW50cnkgMjQ2CisgICAgMHgxLjRmZmZmZmZmZmY5Zjg4MDAwMDAwMDg0ZjIyY2NjY2NjcC0yMCwKKyAgICAweDEuNXAtMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDcKKyAgICAtMHgxLjRmZmZmZmZmZmY5Zjg4MDAwMDAwMDg0ZjIyY2NjY2NjcC0yMCwKKyAgICAtMHgxLjVwLTIwCisgIH0sCisgIHsgLy8gRW50cnkgMjQ4CisgICAgLTB4MS5jYmFkMDk1ZjUwM2ExODAxOWE3YjI3MTcwZjZhNGFjZnAtMSwKKyAgICAweDEuNTE0M2UyNWE0ODhmMXAzCisgIH0sCisgIHsgLy8gRW50cnkgMjQ5CisgICAgMHgxLmNiYWQwOTVmNTAzYTE4MDE5YTdiMjcxNzBmNmE0YWNmcC0xLAorICAgIC0weDEuNTE0M2UyNWE0ODhmMXAzCisgIH0sCisgIHsgLy8gRW50cnkgMjUwCisgICAgLTB4MS5mOTQyZDYyNjJlODJkZDY4MzRkZWQ4YzkwZDBmODIxMnAtNSwKKyAgICAweDEuNTFmMGY0NGRhNGRmNHAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTEKKyAgICAweDEuZjk0MmQ2MjYyZTgyZGQ2ODM0ZGVkOGM5MGQwZjgyMTJwLTUsCisgICAgLTB4MS41MWYwZjQ0ZGE0ZGY0cDIwMAorICB9LAorICB7IC8vIEVudHJ5IDI1MgorICAgIC0weDEuZmM0NjZjY2FlY2U4MDRhYWMxNGU3OWFhYmE0YjVjMWVwLTMsCisgICAgMHgxLjUyYWQ2YzVhMzYwMmZwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTMKKyAgICAweDEuZmM0NjZjY2FlY2U4MDRhYWMxNGU3OWFhYmE0YjVjMWVwLTMsCisgICAgLTB4MS41MmFkNmM1YTM2MDJmcDE2CisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgMHgxLmQ2OWMzY2Y0ZWVjZGQ5YjQzNzI2YTJhN2ZhNDA1YzMxcC0xLAorICAgIDB4MS41MmYwMGUwcDc5MworICB9LAorICB7IC8vIEVudHJ5IDI1NQorICAgIC0weDEuZDY5YzNjZjRlZWNkZDliNDM3MjZhMmE3ZmE0MDVjMzFwLTEsCisgICAgLTB4MS41MmYwMGUwcDc5MworICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIDB4MS5lMTIwMjkyZjNkNDk1NjU3OWY5YzMxNjRjZDk0YmFkNnAtMSwKKyAgICAweDEuNTU1NTU1NTU1NTU1NnAyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTcKKyAgICAtMHgxLmUxMjAyOTJmM2Q0OTU2NTc5ZjljMzE2NGNkOTRiYWQ2cC0xLAorICAgIC0weDEuNTU1NTU1NTU1NTU1NnAyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTgKKyAgICAtMHgxLmZkMWQ4NWI3ZWYwMDM3ZmM0YjFkMTc2Mzg4MjA4NWYxcC0xLAorICAgIDB4MS41YTAwMDAwMDhwNgorICB9LAorICB7IC8vIEVudHJ5IDI1OQorICAgIDB4MS5mZDFkODViN2VmMDAzN2ZjNGIxZDE3NjM4ODIwODVmMXAtMSwKKyAgICAtMHgxLjVhMDAwMDAwOHA2CisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgMHgxLjVhZmY5NjY0YjA3ZTFhMmUwZjI0YjI1NzJkZGJmZjY0cC02LAorICAgIDB4MS41YjA2M2FkMmRkMDhmcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjYxCisgICAgLTB4MS41YWZmOTY2NGIwN2UxYTJlMGYyNGIyNTcyZGRiZmY2NHAtNiwKKyAgICAtMHgxLjViMDYzYWQyZGQwOGZwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAtMHgxLjgzZjhiYmI1OWYyZjhjZDhlYmJkNDRjNDU5ZTRjNDkzcC0xLAorICAgIDB4MS41YjE3OWQ3NWZhMjg1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjMKKyAgICAweDEuODNmOGJiYjU5ZjJmOGNkOGViYmQ0NGM0NTllNGM0OTNwLTEsCisgICAgLTB4MS41YjE3OWQ3NWZhMjg1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAweDEuZmE4NjViMGQ5OTQ5NjgzOTBmOTQ4MGM5Y2FmNDljYjFwLTEsCisgICAgMHgxLjViYjU5Njc0MDJmOWNwNzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjUKKyAgICAtMHgxLmZhODY1YjBkOTk0OTY4MzkwZjk0ODBjOWNhZjQ5Y2IxcC0xLAorICAgIC0weDEuNWJiNTk2NzQwMmY5Y3A3OQorICB9LAorICB7IC8vIEVudHJ5IDI2NgorICAgIDB4MS5lOGE1MjNmY2U4ODRkMTg5YmRiODdjMjBlZDYxNTk0NHAtMiwKKyAgICAweDEuNWJlYTAxMHA0NjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjcKKyAgICAtMHgxLmU4YTUyM2ZjZTg4NGQxODliZGI4N2MyMGVkNjE1OTQ0cC0yLAorICAgIC0weDEuNWJlYTAxMHA0NjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjgKKyAgICAtMHgxLmZmMmFkOTQxZjBhNDBlYTNiYzI5ZTZkZDljMzM5YjYzcC0xLAorICAgIDB4MS41ZjE5ZmJjNTA3YWY2cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjkKKyAgICAweDEuZmYyYWQ5NDFmMGE0MGVhM2JjMjllNmRkOWMzMzliNjNwLTEsCisgICAgLTB4MS41ZjE5ZmJjNTA3YWY2cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzAKKyAgICAtMHgxLjc1Y2U0YTBkMGJkMDM3ZmQ1MzA0MmNhYjgyNDA0OTUzcC0xLAorICAgIDB4MS42MGE2MTBhNjU4ZGE5cDg4OQorICB9LAorICB7IC8vIEVudHJ5IDI3MQorICAgIDB4MS43NWNlNGEwZDBiZDAzN2ZkNTMwNDJjYWI4MjQwNDk1M3AtMSwKKyAgICAtMHgxLjYwYTYxMGE2NThkYTlwODg5CisgIH0sCisgIHsgLy8gRW50cnkgMjcyCisgICAgLTB4MS43MjE1ODY1OTRhYjQ4MThhY2Q0Y2I0MWZhZmM5OTQ4NHAtMSwKKyAgICAweDEuNjJhZDdjZTE3MTQzZHA2MgorICB9LAorICB7IC8vIEVudHJ5IDI3MworICAgIDB4MS43MjE1ODY1OTRhYjQ4MThhY2Q0Y2I0MWZhZmM5OTQ4NHAtMSwKKyAgICAtMHgxLjYyYWQ3Y2UxNzE0M2RwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzQKKyAgICAweDEuYjhkMjcwMTlkMWI5ZTgzNmI5NTM2MTNjODdhY2YzYTlwLTIsCisgICAgMHgxLjY0NTkyNmNjMTEzMmNwOQorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIC0weDEuYjhkMjcwMTlkMWI5ZTgzNmI5NTM2MTNjODdhY2YzYTlwLTIsCisgICAgLTB4MS42NDU5MjZjYzExMzJjcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAweDEuNjQ3ZTA5MDU5YzFlOTgwMDAwMTM3MTRjZDBjNmE0M2RwLTksCisgICAgMHgxLjY0N2UyNWQzOTFmMTdwLTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzcKKyAgICAtMHgxLjY0N2UwOTA1OWMxZTk4MDAwMDEzNzE0Y2QwYzZhNDNkcC05LAorICAgIC0weDEuNjQ3ZTI1ZDM5MWYxN3AtOQorICB9LAorICB7IC8vIEVudHJ5IDI3OAorICAgIC0weDEuOGQzYjUzZmY4NWE4MjNkMDY1Mzc0MTM5MDEyMjllNDVwLTEsCisgICAgMHgxLjY0ZWY0MzhwMTQyCisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgMHgxLjhkM2I1M2ZmODVhODIzZDA2NTM3NDEzOTAxMjI5ZTQ1cC0xLAorICAgIC0weDEuNjRlZjQzOHAxNDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAtMHgxLmY3Yzg2MzBlNjJhMDFmZmQ0ZTAyNTc3OTU2ZTU1MjNlcC0xLAorICAgIDB4MS42NTk5NjY1OTk2NjU4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODEKKyAgICAweDEuZjdjODYzMGU2MmEwMWZmZDRlMDI1Nzc5NTZlNTUyM2VwLTEsCisgICAgLTB4MS42NTk5NjY1OTk2NjU4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAweDEuNjcwMjhlMzYwMjAzNDgwMGY0NWE5MTU4ZDIwYTM0MGNwLTUsCisgICAgMHgxLjY3MnAtNQorICB9LAorICB7IC8vIEVudHJ5IDI4MworICAgIC0weDEuNjcwMjhlMzYwMjAzNDgwMGY0NWE5MTU4ZDIwYTM0MGNwLTUsCisgICAgLTB4MS42NzJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODQKKyAgICAweDEuYmM2MGM4YzMzY2I1ZWJmNjkzZDcxNjUwY2JmMTY2ZjlwLTIsCisgICAgMHgxLjY4OGFlNmMxMzhlYThwMjk5CisgIH0sCisgIHsgLy8gRW50cnkgMjg1CisgICAgLTB4MS5iYzYwYzhjMzNjYjVlYmY2OTNkNzE2NTBjYmYxNjZmOXAtMiwKKyAgICAtMHgxLjY4OGFlNmMxMzhlYThwMjk5CisgIH0sCisgIHsgLy8gRW50cnkgMjg2CisgICAgLTB4MS5mYzNiNGJiOGIwMTJlODA0MmQzZWJjZWQxMmRlZjBjOXAtMSwKKyAgICAweDEuNmFhNzhwMTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODcKKyAgICAweDEuZmMzYjRiYjhiMDEyZTgwNDJkM2ViY2VkMTJkZWYwYzlwLTEsCisgICAgLTB4MS42YWE3OHAxNworICB9LAorICB7IC8vIEVudHJ5IDI4OAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiNXAtMSwKKyAgICAweDEuNmFjNWIyNjJjYTFmZnA4NDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODkKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmI1cC0xLAorICAgIC0weDEuNmFjNWIyNjJjYTFmZnA4NDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTAKKyAgICAtMHgxLjgyMzE3ODM2YTk3YzhjZWExY2QyZTNhNGQwZDQ4ZjI5cC0xLAorICAgIDB4MS42ZDg4MDgzNzQ5NDEycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTEKKyAgICAweDEuODIzMTc4MzZhOTdjOGNlYTFjZDJlM2E0ZDBkNDhmMjlwLTEsCisgICAgLTB4MS42ZDg4MDgzNzQ5NDEycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTIKKyAgICAweDEuNmY3ODFjNzhjYzgyYTdmZmNkMjBiYTgwMWU2NjkxYjFwLTYsCisgICAgMHgxLjZmOHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI5MworICAgIC0weDEuNmY3ODFjNzhjYzgyYTdmZmNkMjBiYTgwMWU2NjkxYjFwLTYsCisgICAgLTB4MS42ZjhwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTQKKyAgICAtMHgxLmZkYmU1MDg1NDk0YWU3ZmU0N2ZhMDY3YWFlYTdmZGY5cC0xLAorICAgIDB4MS43MjlhYTY4NTlkMWY0cDM5NgorICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIDB4MS5mZGJlNTA4NTQ5NGFlN2ZlNDdmYTA2N2FhZWE3ZmRmOXAtMSwKKyAgICAtMHgxLjcyOWFhNjg1OWQxZjRwMzk2CisgIH0sCisgIHsgLy8gRW50cnkgMjk2CisgICAgLTB4MS5mZmZmZmFlODYyYjRmZWMxYzJmMTcxMmFhMTY1ODA3Y3AtMSwKKyAgICAweDEuNzNlMmRiZTlhMmY4MHAxMAorICB9LAorICB7IC8vIEVudHJ5IDI5NworICAgIDB4MS5mZmZmZmFlODYyYjRmZWMxYzJmMTcxMmFhMTY1ODA3Y3AtMSwKKyAgICAtMHgxLjczZTJkYmU5YTJmODBwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTgKKyAgICAweDEuNzY5YWM3NDQ1OWIwNTg0NTZiMzMzMjM4ODMzZjFkMWFwLTcsCisgICAgMHgxLjc2OWNkZTBiOTBiODBwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTkKKyAgICAtMHgxLjc2OWFjNzQ0NTliMDU4NDU2YjMzMzIzODgzM2YxZDFhcC03LAorICAgIC0weDEuNzY5Y2RlMGI5MGI4MHAtNworICB9LAorICB7IC8vIEVudHJ5IDMwMAorICAgIDB4MS43NjllOGFmYjZhNGViZjk5YWRlNDY1ZDE5YmU4NmFjMHAtNSwKKyAgICAweDEuNzZjcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzAxCisgICAgLTB4MS43NjllOGFmYjZhNGViZjk5YWRlNDY1ZDE5YmU4NmFjMHAtNSwKKyAgICAtMHgxLjc2Y3AtNQorICB9LAorICB7IC8vIEVudHJ5IDMwMgorICAgIDB4MS5mZDU2MjYxMWY1YmQ0ODAwZGU1MDNlNDIxMGNjN2RmNHAtMSwKKyAgICAweDEuNzgwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDMwMworICAgIC0weDEuZmQ1NjI2MTFmNWJkNDgwMGRlNTAzZTQyMTBjYzdkZjRwLTEsCisgICAgLTB4MS43ODAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzA0CisgICAgMHgxLmZkYmE3ODRjYTAwZjE3ZWJjYzJiNWIxMDk4ZTgzYmZmcC0xLAorICAgIDB4MS43YTBwMAorICB9LAorICB7IC8vIEVudHJ5IDMwNQorICAgIC0weDEuZmRiYTc4NGNhMDBmMTdlYmNjMmI1YjEwOThlODNiZmZwLTEsCisgICAgLTB4MS43YTBwMAorICB9LAorICB7IC8vIEVudHJ5IDMwNgorICAgIDB4MS5mOTMwYzIyMmE4NjgyZDdkMTkyMGExMmI2ODg3MGMzNnAtNSwKKyAgICAweDEuN2FiZDg3MDM4MWMyZHAzOAorICB9LAorICB7IC8vIEVudHJ5IDMwNworICAgIC0weDEuZjkzMGMyMjJhODY4MmQ3ZDE5MjBhMTJiNjg4NzBjMzZwLTUsCisgICAgLTB4MS43YWJkODcwMzgxYzJkcDM4CisgIH0sCisgIHsgLy8gRW50cnkgMzA4CisgICAgMHgxLmZmZWIyZmYyYjY5MjM2N2JjNTY2MGRhYjY5NjBiNTdkcC0xLAorICAgIDB4MS43ZGM5NDVjMjEyNDgwcDk1CisgIH0sCisgIHsgLy8gRW50cnkgMzA5CisgICAgLTB4MS5mZmViMmZmMmI2OTIzNjdiYzU2NjBkYWI2OTYwYjU3ZHAtMSwKKyAgICAtMHgxLjdkYzk0NWMyMTI0ODBwOTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTAKKyAgICAweDEuYjI3OTE1M2MyM2ZiMTgwMDAwY2UzYTBkNDdkOGM0NzZwLTIsCisgICAgMHgxLjdmNzNlMTU5NGI3MGNwOTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTEKKyAgICAtMHgxLmIyNzkxNTNjMjNmYjE4MDAwMGNlM2EwZDQ3ZDhjNDc2cC0yLAorICAgIC0weDEuN2Y3M2UxNTk0YjcwY3A5OAorICB9LAorICB7IC8vIEVudHJ5IDMxMgorICAgIC0weDEuNTk5ZmFkMzVjZjYwYWQ0Mzc2MGNmM2E5ZGEzZDljMzBwLTQxLAorICAgIDB4MS43ZjdlZjc3ZTgzZjFhcDIxCisgIH0sCisgIHsgLy8gRW50cnkgMzEzCisgICAgMHgxLjU5OWZhZDM1Y2Y2MGFkNDM3NjBjZjNhOWRhM2Q5YzMwcC00MSwKKyAgICAtMHgxLjdmN2VmNzdlODNmMWFwMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTQKKyAgICAweDEuZmViN2E5YjJjNmQ4YWRlNmUxN2ZkYWNhZWY0ZmQ5NmNwLTEsCisgICAgMHgxLjhwMAorICB9LAorICB7IC8vIEVudHJ5IDMxNQorICAgIC0weDEuZmViN2E5YjJjNmQ4YWRlNmUxN2ZkYWNhZWY0ZmQ5NmNwLTEsCisgICAgLTB4MS44cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTYKKyAgICAweDEuZjc5OGQwMWVjNjE1YjhlZGVkYTQ3NGUzYzZjZDBjOTJwLTEsCisgICAgMHgxLjhwNgorICB9LAorICB7IC8vIEVudHJ5IDMxNworICAgIC0weDEuZjc5OGQwMWVjNjE1YjhlZGVkYTQ3NGUzYzZjZDBjOTJwLTEsCisgICAgLTB4MS44cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTgKKyAgICAweDEuZmVlMWEyYTk3N2JjZWQxNzlmOGFiODQ1NWFkYTUyNWZwLTEsCisgICAgMHgxLjgxMzJjZWIxYzRmMzlwMAorICB9LAorICB7IC8vIEVudHJ5IDMxOQorICAgIC0weDEuZmVlMWEyYTk3N2JjZWQxNzlmOGFiODQ1NWFkYTUyNWZwLTEsCisgICAgLTB4MS44MTMyY2ViMWM0ZjM5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjAKKyAgICAtMHgxLjI0MjQ1YWY0Y2Q5OTRlOWIzYmJhOTkyZDBmNTdmYzNmcC01MiwKKyAgICAweDEuODFhZTBkZmZhM2IzM3A5NTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjEKKyAgICAweDEuMjQyNDVhZjRjZDk5NGU5YjNiYmE5OTJkMGY1N2ZjM2ZwLTUyLAorICAgIC0weDEuODFhZTBkZmZhM2IzM3A5NTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjIKKyAgICAweDEuODVkNDFiMGJmMzA5MDdmZmZmZjE5MTNhNWNlZDc2NDVwLTQsCisgICAgMHgxLjg1ZWM1YTM5OWEyZTZwMQorICB9LAorICB7IC8vIEVudHJ5IDMyMworICAgIC0weDEuODVkNDFiMGJmMzA5MDdmZmZmZjE5MTNhNWNlZDc2NDVwLTQsCisgICAgLTB4MS44NWVjNWEzOTlhMmU2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjQKKyAgICAweDEuMWU0MmFlM2NmYmRjNjA5NzY4ODQwODdmOTdhMGZkYTlwLTI0LAorICAgIDB4MS44NmEwMDkyNzU0MDIycDE2CisgIH0sCisgIHsgLy8gRW50cnkgMzI1CisgICAgLTB4MS4xZTQyYWUzY2ZiZGM2MDk3Njg4NDA4N2Y5N2EwZmRhOXAtMjQsCisgICAgLTB4MS44NmEwMDkyNzU0MDIycDE2CisgIH0sCisgIHsgLy8gRW50cnkgMzI2CisgICAgLTB4MS5kYmY0ZTU5NGNlZmUxNTQ4ZWZjMjQwOThkNjMxZTk1MHAtMSwKKyAgICAweDEuODcyMDU4OHAzOTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjcKKyAgICAweDEuZGJmNGU1OTRjZWZlMTU0OGVmYzI0MDk4ZDYzMWU5NTBwLTEsCisgICAgLTB4MS44NzIwNTg4cDM5MgorICB9LAorICB7IC8vIEVudHJ5IDMyOAorICAgIDB4MS40NDMwMmQ2YTgyZDQwM2JhZGYxZjliNzE0MjBjY2RjYXAtOSwKKyAgICAweDEuODkyOTM1NGViYzZhYXA0MworICB9LAorICB7IC8vIEVudHJ5IDMyOQorICAgIC0weDEuNDQzMDJkNmE4MmQ0MDNiYWRmMWY5YjcxNDIwY2NkY2FwLTksCisgICAgLTB4MS44OTI5MzU0ZWJjNmFhcDQzCisgIH0sCisgIHsgLy8gRW50cnkgMzMwCisgICAgMHgxLjhhNTIxODllYzM0ODc3YmI1OTQ0NDEzZTAwYWQ1MmVkcC01LAorICAgIDB4MS44YTc5MWU0NzkxZTc1cC01CisgIH0sCisgIHsgLy8gRW50cnkgMzMxCisgICAgLTB4MS44YTUyMTg5ZWMzNDg3N2JiNTk0NDQxM2UwMGFkNTJlZHAtNSwKKyAgICAtMHgxLjhhNzkxZTQ3OTFlNzVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzIKKyAgICAtMHgxLmZlODU2NmU1MzgxMjJkYjMzYzE3ZjEzYjgzNDc0YTA0cC0xLAorICAgIDB4MS44YmE3NjE0MzhmNWVkcDExCisgIH0sCisgIHsgLy8gRW50cnkgMzMzCisgICAgMHgxLmZlODU2NmU1MzgxMjJkYjMzYzE3ZjEzYjgzNDc0YTA0cC0xLAorICAgIC0weDEuOGJhNzYxNDM4ZjVlZHAxMQorICB9LAorICB7IC8vIEVudHJ5IDMzNAorICAgIDB4MS5mZmY0MmFjYTRjYjVhODAwMDAwNTdmMWE0OGFmNjVkZXAtMSwKKyAgICAweDEuOGVhZjE2ZGU2MzkyMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgLTB4MS5mZmY0MmFjYTRjYjVhODAwMDAwNTdmMWE0OGFmNjVkZXAtMSwKKyAgICAtMHgxLjhlYWYxNmRlNjM5MjBwMAorICB9LAorICB7IC8vIEVudHJ5IDMzNgorICAgIDB4MS5mZmZiN2QzZjNhMjUyZGE1NmQ5NjMyN2MxODYyN2Y1N3AtMSwKKyAgICAweDEuOXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM3CisgICAgLTB4MS5mZmZiN2QzZjNhMjUyZGE1NmQ5NjMyN2MxODYyN2Y1N3AtMSwKKyAgICAtMHgxLjlwMAorICB9LAorICB7IC8vIEVudHJ5IDMzOAorICAgIC0weDEuZTgxNTc3MDY2N2ZkODdmOTUyNTE1NGVkYzg2NzYwNWZwLTQsCisgICAgMHgxLjkxYTU2NTdmYjZhOWFwNgorICB9LAorICB7IC8vIEVudHJ5IDMzOQorICAgIDB4MS5lODE1NzcwNjY3ZmQ4N2Y5NTI1MTU0ZWRjODY3NjA1ZnAtNCwKKyAgICAtMHgxLjkxYTU2NTdmYjZhOWFwNgorICB9LAorICB7IC8vIEVudHJ5IDM0MAorICAgIC0weDEuZmZmZmZmZmQzMTFkYzdlYzVkMGFlNTcyOGE3OTYwZmRwLTEsCisgICAgMHgxLjkyMWZiNTQ0Njg4NDdwMzcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDEKKyAgICAweDEuZmZmZmZmZmQzMTFkYzdlYzVkMGFlNTcyOGE3OTYwZmRwLTEsCisgICAgLTB4MS45MjFmYjU0NDY4ODQ3cDM3CisgIH0sCisgIHsgLy8gRW50cnkgMzQyCisgICAgMHgxLmZmZmZmZmZmODc1ZTVlNDQ5N2RkMDc2MDMzNmU2M2YzcC0xNywKKyAgICAweDEuOTIxZmY1NDQ0MmQxOHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzQzCisgICAgLTB4MS5mZmZmZmZmZjg3NWU1ZTQ0OTdkZDA3NjAzMzZlNjNmM3AtMTcsCisgICAgLTB4MS45MjFmZjU0NDQyZDE4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDQKKyAgICAweDEuODEyYTVkYTM3NzdjZDdmNmUxNzI4ODYzOGI0MGFhMDlwLTgsCisgICAgMHgxLjkyOHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzQ1CisgICAgLTB4MS44MTJhNWRhMzc3N2NkN2Y2ZTE3Mjg4NjM4YjQwYWEwOXAtOCwKKyAgICAtMHgxLjkyOHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzQ2CisgICAgMHgxLmZmZjliZThkODI1NzJjNzQ2Zjk0NDkzNGJiZjFiNjk3cC0xLAorICAgIDB4MS45NGFwMAorICB9LAorICB7IC8vIEVudHJ5IDM0NworICAgIC0weDEuZmZmOWJlOGQ4MjU3MmM3NDZmOTQ0OTM0YmJmMWI2OTdwLTEsCisgICAgLTB4MS45NGFwMAorICB9LAorICB7IC8vIEVudHJ5IDM0OAorICAgIDB4MS45NDdiMGFjZTIzNWYyODUwYjI3YjE2NGM0OTEwMmE0OXAtNSwKKyAgICAweDEuOTRhNTI5NGE1MWJkZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDM0OQorICAgIC0weDEuOTQ3YjBhY2UyMzVmMjg1MGIyN2IxNjRjNDkxMDJhNDlwLTUsCisgICAgLTB4MS45NGE1Mjk0YTUxYmRlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzUwCisgICAgMHgxLmMzNGY3MGU1NWE3MDdiYmQwNTNhNzBlNzQ5MTA1MTc0cC0yLAorICAgIDB4MS45NGE1Mjk0YTUyOTQ4cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDM1MQorICAgIC0weDEuYzM0ZjcwZTU1YTcwN2JiZDA1M2E3MGU3NDkxMDUxNzRwLTIsCisgICAgLTB4MS45NGE1Mjk0YTUyOTQ4cDEwMAorICB9LAorICB7IC8vIEVudHJ5IDM1MgorICAgIDB4MS45NTBiY2ZjMGYzZDUwODUwOTQxYTQxZDY2Y2ZhMzcyMXAtNSwKKyAgICAweDEuOTUzNjFiOGY3Njk3ZHAtNQorICB9LAorICB7IC8vIEVudHJ5IDM1MworICAgIC0weDEuOTUwYmNmYzBmM2Q1MDg1MDk0MWE0MWQ2NmNmYTM3MjFwLTUsCisgICAgLTB4MS45NTM2MWI4Zjc2OTdkcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzU0CisgICAgMHgxLjZjNTQ4YmZjY2U2OTUzZjE5YThkMmRkNDgwZDkzMjBjcC0xLAorICAgIDB4MS45NTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTUKKyAgICAtMHgxLjZjNTQ4YmZjY2U2OTUzZjE5YThkMmRkNDgwZDkzMjBjcC0xLAorICAgIC0weDEuOTU2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU2CisgICAgMHgxLmZmZWZmZGJmNjdjYTY3MTFhNTdiN2Q4MjE0MDA5M2M2cC0xLAorICAgIDB4MS45NjJwMAorICB9LAorICB7IC8vIEVudHJ5IDM1NworICAgIC0weDEuZmZlZmZkYmY2N2NhNjcxMWE1N2I3ZDgyMTQwMDkzYzZwLTEsCisgICAgLTB4MS45NjJwMAorICB9LAorICB7IC8vIEVudHJ5IDM1OAorICAgIDB4MS45NzA4MjEzYmY2N2Y0ODU3MTM1MDc3ZDUwODI2ZjU4OHAtNSwKKyAgICAweDEuOTczMzBkMmVhMTZkOXAtNQorICB9LAorICB7IC8vIEVudHJ5IDM1OQorICAgIC0weDEuOTcwODIxM2JmNjdmNDg1NzEzNTA3N2Q1MDgyNmY1ODhwLTUsCisgICAgLTB4MS45NzMzMGQyZWExNmQ5cC01CisgIH0sCisgIHsgLy8gRW50cnkgMzYwCisgICAgMHgxLjk3MmJmOTI3MTNkNTA4NThlNjRjMWI5YjI2YWVlY2QwcC01LAorICAgIDB4MS45NzU2ZjA3M2I2YjYxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzYxCisgICAgLTB4MS45NzJiZjkyNzEzZDUwODU4ZTY0YzFiOWIyNmFlZWNkMHAtNSwKKyAgICAtMHgxLjk3NTZmMDczYjZiNjFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjIKKyAgICAweDEuOTc2ODQ1ZWJlNzExODg1ODBlNDY4YmFkMDBjZTIzZWNwLTUsCisgICAgMHgxLjk3OTM1MDU1Y2VjMWJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjMKKyAgICAtMHgxLjk3Njg0NWViZTcxMTg4NTgwZTQ2OGJhZDAwY2UyM2VjcC01LAorICAgIC0weDEuOTc5MzUwNTVjZWMxYnAtNQorICB9LAorICB7IC8vIEVudHJ5IDM2NAorICAgIDB4MS45NzUzNWNlZTUxYTQyODA2ZTE1ZjZmODc4NTI0ZTViN3AtNCwKKyAgICAweDEuOTgwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzY1CisgICAgLTB4MS45NzUzNWNlZTUxYTQyODA2ZTE1ZjZmODc4NTI0ZTViN3AtNCwKKyAgICAtMHgxLjk4MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDM2NgorICAgIDB4MS42ZjQ5NGMzMzU2MTc3MDAwMDA2NTAyY2RmZjk3NWIwOHAtMSwKKyAgICAweDEuOTk5OTk5YTQyMTYwY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDM2NworICAgIC0weDEuNmY0OTRjMzM1NjE3NzAwMDAwNjUwMmNkZmY5NzViMDhwLTEsCisgICAgLTB4MS45OTk5OTlhNDIxNjBjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY4CisgICAgMHgxLjZmNDk0YzM3ZWRkNmQ4MDAwMDZkYzc2YWVlNGNjOGU0cC0xLAorICAgIDB4MS45OTk5OTlhYWI4ZjUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY5CisgICAgLTB4MS42ZjQ5NGMzN2VkZDZkODAwMDA2ZGM3NmFlZTRjYzhlNHAtMSwKKyAgICAtMHgxLjk5OTk5OWFhYjhmNTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzAKKyAgICAweDEuNmZhOTEyYmRlYWFiMjgwMDAwMTY0ZjE2ZGQ2NDkzNTZwLTEsCisgICAgMHgxLjlhMjMyNGI5YzYzMjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzEKKyAgICAtMHgxLjZmYTkxMmJkZWFhYjI4MDAwMDE2NGYxNmRkNjQ5MzU2cC0xLAorICAgIC0weDEuOWEyMzI0YjljNjMyNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3MgorICAgIDB4MS43MGM3ZWY0ZWY5YjM0N2VkMjM0Y2E2MTMxYmUxYjc4NnAtMSwKKyAgICAweDEuOWJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzczCisgICAgLTB4MS43MGM3ZWY0ZWY5YjM0N2VkMjM0Y2E2MTMxYmUxYjc4NnAtMSwKKyAgICAtMHgxLjliY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDM3NAorICAgIDB4MS5mZjI4MTc2YWQzMTYzZWExNjhjOTk5MWYxNTVmODc1YnAtMSwKKyAgICAweDEuYTBkMWQ4MTdkNmM0YXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzc1CisgICAgLTB4MS5mZjI4MTc2YWQzMTYzZWExNjhjOTk5MWYxNTVmODc1YnAtMSwKKyAgICAtMHgxLmEwZDFkODE3ZDZjNGFwMAorICB9LAorICB7IC8vIEVudHJ5IDM3NgorICAgIDB4MS43NDk0NjhhNzI0OGRkMjYxNjFlOTNkNzg5MjhjNjZkZXAtMSwKKyAgICAweDEuYTE0MWM5ZGUxMmZkZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3NworICAgIC0weDEuNzQ5NDY4YTcyNDhkZDI2MTYxZTkzZDc4OTI4YzY2ZGVwLTEsCisgICAgLTB4MS5hMTQxYzlkZTEyZmRmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzc4CisgICAgMHgxLjc1NGViYjdlNzNmNDUyYWI0OWM2MTVmMGU4MzAwZDVjcC0xLAorICAgIDB4MS5hMjUxYmM2NzY2ZjIwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzc5CisgICAgLTB4MS43NTRlYmI3ZTczZjQ1MmFiNDljNjE1ZjBlODMwMGQ1Y3AtMSwKKyAgICAtMHgxLmEyNTFiYzY3NjZmMjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODAKKyAgICAtMHgxLjdjM2JmZWZhNzRiZDA3ZmUyMTMzNmNhYWMzNzJhNzNlcC0xLAorICAgIDB4MS5hMjY4OWFlMWI4NmRkcDYyCisgIH0sCisgIHsgLy8gRW50cnkgMzgxCisgICAgMHgxLjdjM2JmZWZhNzRiZDA3ZmUyMTMzNmNhYWMzNzJhNzNlcC0xLAorICAgIC0weDEuYTI2ODlhZTFiODZkZHA2MgorICB9LAorICB7IC8vIEVudHJ5IDM4MgorICAgIC0weDEuZmZmZjRmMzY0OGUwMmY5ZjQ5NGY0MmViODIyZjI2MmJwLTEsCisgICAgMHgxLmEzZjY2MTgwYzQ1NTBwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMzgzCisgICAgMHgxLmZmZmY0ZjM2NDhlMDJmOWY0OTRmNDJlYjgyMmYyNjJicC0xLAorICAgIC0weDEuYTNmNjYxODBjNDU1MHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODQKKyAgICAtMHgxLjFjZjQ2Mzk4M2MwZTI4MDIzMTYxYjdkMGQyOTM4ZTM3cC0zLAorICAgIDB4MS5hM2ZkZDJhNTI4NmMzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODUKKyAgICAweDEuMWNmNDYzOTgzYzBlMjgwMjMxNjFiN2QwZDI5MzhlMzdwLTMsCisgICAgLTB4MS5hM2ZkZDJhNTI4NmMzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODYKKyAgICAweDEuZmViNzk0OGQyMjRkN2U3NTlhN2M5ZGQ3NjhkZWQ3MjdwLTEsCisgICAgMHgxLmE0NHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzg3CisgICAgLTB4MS5mZWI3OTQ4ZDIyNGQ3ZTc1OWE3YzlkZDc2OGRlZDcyN3AtMSwKKyAgICAtMHgxLmE0NHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzg4CisgICAgMHgxLjc4ODAxZTNlMTE2NjQ4MmRjZTYyMDhlOThkM2NjMTQycC0xLAorICAgIDB4MS5hNzAxZWYzYzdkNTRicC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzg5CisgICAgLTB4MS43ODgwMWUzZTExNjY0ODJkY2U2MjA4ZTk4ZDNjYzE0MnAtMSwKKyAgICAtMHgxLmE3MDFlZjNjN2Q1NGJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTAKKyAgICAtMHgxLmZmZjExZTg3MWQ1OWMzZTEzMzNkYjU0NzViYjU3ZTI3cC0xLAorICAgIDB4MS5hOGMwMWZkNDNjMHA1MzcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTEKKyAgICAweDEuZmZmMTFlODcxZDU5YzNlMTMzM2RiNTQ3NWJiNTdlMjdwLTEsCisgICAgLTB4MS5hOGMwMWZkNDNjMHA1MzcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTIKKyAgICAweDEuZmRmYTQzNjZlYjczMzdlNmQ5NzNjNGNiOGYxYTI0NGFwLTEsCisgICAgMHgxLmE4ZTI5Yjc2MDJmM2JwMAorICB9LAorICB7IC8vIEVudHJ5IDM5MworICAgIC0weDEuZmRmYTQzNjZlYjczMzdlNmQ5NzNjNGNiOGYxYTI0NGFwLTEsCisgICAgLTB4MS5hOGUyOWI3NjAyZjNicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTQKKyAgICAweDEuZmRlOThiOTRlNzk0N2EwNDIyOWQyNmVlYjJiYjQyODBwLTEsCisgICAgMHgxLmE5NHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzk1CisgICAgLTB4MS5mZGU5OGI5NGU3OTQ3YTA0MjI5ZDI2ZWViMmJiNDI4MHAtMSwKKyAgICAtMHgxLmE5NHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzk2CisgICAgMHgxLjc5MzFjYmExMDAwMDg4MDAwMDA2OGY5NDA5ODAxOGE3cC0yLAorICAgIDB4MS5hYTQ0NWZjZTkzYjgycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTcKKyAgICAtMHgxLjc5MzFjYmExMDAwMDg4MDAwMDA2OGY5NDA5ODAxOGE3cC0yLAorICAgIC0weDEuYWE0NDVmY2U5M2I4MnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzk4CisgICAgMHgxLjdhZjNmNzZjN2E3MDg4MzRiNDA3MmY1OWFjNzFhMGJhcC0xLAorICAgIDB4MS5hYWEzZmJjMzU5ZmJlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzk5CisgICAgLTB4MS43YWYzZjc2YzdhNzA4ODM0YjQwNzJmNTlhYzcxYTBiYXAtMSwKKyAgICAtMHgxLmFhYTNmYmMzNTlmYmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDAKKyAgICAweDEuZmQ3NGU1M2FlMzJmY2Q4NDY3YmNmNTBkYTFkMGY1NjNwLTYsCisgICAgMHgxLmFiZGQzZGJkNGQ4NjBwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgNDAxCisgICAgLTB4MS5mZDc0ZTUzYWUzMmZjZDg0NjdiY2Y1MGRhMWQwZjU2M3AtNiwKKyAgICAtMHgxLmFiZGQzZGJkNGQ4NjBwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgNDAyCisgICAgMHgxLjdkNGE3YmYxODNhMzMyOWVkNDM0YzBjNGRkNzhiMWQ5cC0xLAorICAgIDB4MS5hZTIxNjVhMGM5ZjhlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDAzCisgICAgLTB4MS43ZDRhN2JmMTgzYTMzMjllZDQzNGMwYzRkZDc4YjFkOXAtMSwKKyAgICAtMHgxLmFlMjE2NWEwYzlmOGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDQKKyAgICAweDEuYjgxNDEwZWRjNzllMDgzNzUwN2EzZWVmOGQ1NTNiZDZwLTIsCisgICAgMHgxLmFlOGRmZWZjZmUxM2JwMgorICB9LAorICB7IC8vIEVudHJ5IDQwNQorICAgIC0weDEuYjgxNDEwZWRjNzllMDgzNzUwN2EzZWVmOGQ1NTNiZDZwLTIsCisgICAgLTB4MS5hZThkZmVmY2ZlMTNicDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDYKKyAgICAtMHgxLmZmNzUxNTYxZGM1MDk3ZmVmZTQ5OTMwMWQwMzRhMGVkcC0yLAorICAgIDB4MS5iNTU5N2Y5NTBlZThjcDI5CisgIH0sCisgIHsgLy8gRW50cnkgNDA3CisgICAgMHgxLmZmNzUxNTYxZGM1MDk3ZmVmZTQ5OTMwMWQwMzRhMGVkcC0yLAorICAgIC0weDEuYjU1OTdmOTUwZWU4Y3AyOQorICB9LAorICB7IC8vIEVudHJ5IDQwOAorICAgIDB4MS4wMjdkMTg0YWZiMTk4NGNhMWQyMWIxYWM5MjhkNTM5MXAtNTIsCisgICAgMHgxLmJhYjYyZWQ2NTUwMTlwOTcwCisgIH0sCisgIHsgLy8gRW50cnkgNDA5CisgICAgLTB4MS4wMjdkMTg0YWZiMTk4NGNhMWQyMWIxYWM5MjhkNTM5MXAtNTIsCisgICAgLTB4MS5iYWI2MmVkNjU1MDE5cDk3MAorICB9LAorICB7IC8vIEVudHJ5IDQxMAorICAgIDB4MS5iYzU3MmU1ZTQxM2UxN2ZjYjIyNDZkNDAyNDlhMDA1ZnAtMTAsCisgICAgMHgxLmJjNTczYzRmZmZmZmZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDExCisgICAgLTB4MS5iYzU3MmU1ZTQxM2UxN2ZjYjIyNDZkNDAyNDlhMDA1ZnAtMTAsCisgICAgLTB4MS5iYzU3M2M0ZmZmZmZmcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDQxMgorICAgIDB4MS5mYjMwMGYxZTM5YWZlODA0NzFmOTkzYWJiOGNmYTQyOHAtMSwKKyAgICAweDEuYmVmNWNkMjVhYjFhZHA5CisgIH0sCisgIHsgLy8gRW50cnkgNDEzCisgICAgLTB4MS5mYjMwMGYxZTM5YWZlODA0NzFmOTkzYWJiOGNmYTQyOHAtMSwKKyAgICAtMHgxLmJlZjVjZDI1YWIxYWRwOQorICB9LAorICB7IC8vIEVudHJ5IDQxNAorICAgIDB4MS5iMWJhYWY2MjJkM2EyN2ZkMjdkMDcxNmY3ZDA4ZDk5MnAtMiwKKyAgICAweDEuYmZkZjZkZjJhMjRjMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQxNQorICAgIC0weDEuYjFiYWFmNjIyZDNhMjdmZDI3ZDA3MTZmN2QwOGQ5OTJwLTIsCisgICAgLTB4MS5iZmRmNmRmMmEyNGMxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDE2CisgICAgMHgxLjg4ZmI3NjJjMzVjZTM3ZmVjYmI0NzQ4ZDAxZmVmZmNlcC0xLAorICAgIDB4MS5iZmZmZmZkZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDE3CisgICAgLTB4MS44OGZiNzYyYzM1Y2UzN2ZlY2JiNDc0OGQwMWZlZmZjZXAtMSwKKyAgICAtMHgxLmJmZmZmZmRmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTgKKyAgICAweDEuZmUwZWJmZjk5YWI4YzgwY2U1OTM5ZjFmMDcyYzJlOTFwLTEsCisgICAgMHgxLmMyYjQ4OTUyMGUzNzZwOTIwCisgIH0sCisgIHsgLy8gRW50cnkgNDE5CisgICAgLTB4MS5mZTBlYmZmOTlhYjhjODBjZTU5MzlmMWYwNzJjMmU5MXAtMSwKKyAgICAtMHgxLmMyYjQ4OTUyMGUzNzZwOTIwCisgIH0sCisgIHsgLy8gRW50cnkgNDIwCisgICAgMHgxLmNmN2Y3NDlmMmE4MzU3ZjdmZWFiNjg1ZmY2ZjhiNjI0cC00LAorICAgIDB4MS5jNTRiZWIwMDg1NDcwcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjEKKyAgICAtMHgxLmNmN2Y3NDlmMmE4MzU3ZjdmZWFiNjg1ZmY2ZjhiNjI0cC00LAorICAgIC0weDEuYzU0YmViMDA4NTQ3MHA1CisgIH0sCisgIHsgLy8gRW50cnkgNDIyCisgICAgMHgxLmI2ZmFjZjY2NTg5MTQ4MmVhOGM2MWY1Y2EzMmYyODBkcC0yLAorICAgIDB4MS5jNWFkMzRmNWY0NzJhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDIzCisgICAgLTB4MS5iNmZhY2Y2NjU4OTE0ODJlYThjNjFmNWNhMzJmMjgwZHAtMiwKKyAgICAtMHgxLmM1YWQzNGY1ZjQ3MmFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjQKKyAgICAweDEuYjg1MWNkOWI4NGVlNjgzZGM2YmQzODk5ZWE4MWRiZjlwLTIsCisgICAgMHgxLmM3MjhmYzJmMzRiZDZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjUKKyAgICAtMHgxLmI4NTFjZDliODRlZTY4M2RjNmJkMzg5OWVhODFkYmY5cC0yLAorICAgIC0weDEuYzcyOGZjMmYzNGJkNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDQyNgorICAgIDB4MS5iYTIxYjUzY2YyZmYyODMyNjA2ZjY1ZWVlYjRlM2FhZnAtMiwKKyAgICAweDEuYzkyYjBmNjEwNTA4OXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQyNworICAgIC0weDEuYmEyMWI1M2NmMmZmMjgzMjYwNmY2NWVlZWI0ZTNhYWZwLTIsCisgICAgLTB4MS5jOTJiMGY2MTA1MDg5cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDI4CisgICAgMHgxLmM5YTJiNjhlMzBlYzc3YzRlNzZjODg5NzA0Mzk0YTUwcC01LAorICAgIDB4MS5jOWRmYmJlOWVjNzA0cC01CisgIH0sCisgIHsgLy8gRW50cnkgNDI5CisgICAgLTB4MS5jOWEyYjY4ZTMwZWM3N2M0ZTc2Yzg4OTcwNDM5NGE1MHAtNSwKKyAgICAtMHgxLmM5ZGZiYmU5ZWM3MDRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzAKKyAgICAweDEuZjM3MDExNWM5YWIzNTc0M2UxMjIxN2M2MTIyZTFhMjhwLTEsCisgICAgMHgxLmNhZjMxYmQ3ZWUyMTdwMAorICB9LAorICB7IC8vIEVudHJ5IDQzMQorICAgIC0weDEuZjM3MDExNWM5YWIzNTc0M2UxMjIxN2M2MTIyZTFhMjhwLTEsCisgICAgLTB4MS5jYWYzMWJkN2VlMjE3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzIKKyAgICAtMHgxLmRkMzhhMWYxZDI4OWI2MTczMTE1NzIxYmM1OGUyOThkcC01NCwKKyAgICAweDEuY2I0NGU4NmJjMTkyYnA2NDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzMKKyAgICAweDEuZGQzOGExZjFkMjg5YjYxNzMxMTU3MjFiYzU4ZTI5OGRwLTU0LAorICAgIC0weDEuY2I0NGU4NmJjMTkyYnA2NDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzQKKyAgICAweDEuZGQzOGExZjFkMjg5YjYxNzMxMTU3MjFiYzU1YTU2YThwLTUzLAorICAgIDB4MS5jYjQ0ZTg2YmMxOTJicDY0OQorICB9LAorICB7IC8vIEVudHJ5IDQzNQorICAgIC0weDEuZGQzOGExZjFkMjg5YjYxNzMxMTU3MjFiYzU1YTU2YThwLTUzLAorICAgIC0weDEuY2I0NGU4NmJjMTkyYnA2NDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzYKKyAgICAweDEuYzc4ODVhZWYzM2E5NGZmYzVhZTA2YmU5NDQ0ZWZhZDVwLTMsCisgICAgMHgxLmNiNnAtMworICB9LAorICB7IC8vIEVudHJ5IDQzNworICAgIC0weDEuYzc4ODVhZWYzM2E5NGZmYzVhZTA2YmU5NDQ0ZWZhZDVwLTMsCisgICAgLTB4MS5jYjZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzgKKyAgICAweDEuY2QyNzlhYTYxOTZiNTdmOWJlNzFjZGZmZGQ5ZjE5MTlwLTQsCisgICAgMHgxLmNlMjI3MWQyZjY2MmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzkKKyAgICAtMHgxLmNkMjc5YWE2MTk2YjU3ZjliZTcxY2RmZmRkOWYxOTE5cC00LAorICAgIC0weDEuY2UyMjcxZDJmNjYyZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDQ0MAorICAgIDB4MS45MzBiNzA1ZjlmYWQxN2ZiNTY4MTNhNDU5NzNhOGQ3MnAtMSwKKyAgICAweDEuZDAwMDAwMDAwMDRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDEKKyAgICAtMHgxLjkzMGI3MDVmOWZhZDE3ZmI1NjgxM2E0NTk3M2E4ZDcycC0xLAorICAgIC0weDEuZDAwMDAwMDAwMDRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDIKKyAgICAweDEuN2VmMjRjOGU2N2Q5YTgwMTdhMDMxZjM4ZTI0Y2NlMDZwLTEsCisgICAgMHgxLmQwMXAxOTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDMKKyAgICAtMHgxLjdlZjI0YzhlNjdkOWE4MDE3YTAzMWYzOGUyNGNjZTA2cC0xLAorICAgIC0weDEuZDAxcDE5OQorICB9LAorICB7IC8vIEVudHJ5IDQ0NAorICAgIDB4MS5mZmZmMTI0YzAwMWFhZmIxZjE3NWNjYjUzMWMwNTNiMHAtMSwKKyAgICAweDEuZDAyNGJhNmY5NTNjZnAxMDAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ1CisgICAgLTB4MS5mZmZmMTI0YzAwMWFhZmIxZjE3NWNjYjUzMWMwNTNiMHAtMSwKKyAgICAtMHgxLmQwMjRiYTZmOTUzY2ZwMTAwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NgorICAgIC0weDEuZjgzYTA5ODNkZDE1ZDAwMzAxZTJkZjIxZTNiZWU2MzVwLTIsCisgICAgMHgxLmQ0MDY3YzYwZjQ3MWVwMQorICB9LAorICB7IC8vIEVudHJ5IDQ0NworICAgIDB4MS5mODNhMDk4M2RkMTVkMDAzMDFlMmRmMjFlM2JlZTYzNXAtMiwKKyAgICAtMHgxLmQ0MDY3YzYwZjQ3MWVwMQorICB9LAorICB7IC8vIEVudHJ5IDQ0OAorICAgIDB4MS5kNzliOTg5NmZmNTU0ODRkMjU5MWI2NzdkNTRlYTQ2ZnAtNSwKKyAgICAweDEuZDdkZTYyNjNiY2FhYnAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ0OQorICAgIC0weDEuZDc5Yjk4OTZmZjU1NDg0ZDI1OTFiNjc3ZDU0ZWE0NmZwLTUsCisgICAgLTB4MS5kN2RlNjI2M2JjYWFicC01CisgIH0sCisgIHsgLy8gRW50cnkgNDUwCisgICAgMHgxLmVkMGI5MDhhMjk4MmY3ZmQ5YzgwYmMxMDUxZGQ0MDgwcC0xLAorICAgIDB4MS5kODAwMDAwMDAyMjc0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTEKKyAgICAtMHgxLmVkMGI5MDhhMjk4MmY3ZmQ5YzgwYmMxMDUxZGQ0MDgwcC0xLAorICAgIC0weDEuZDgwMDAwMDAwMjI3NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDUyCisgICAgLTB4MS5mMmMyMTdjYmM3ZGNjOTE5MjQzYTdjNDM0YTIwOWY5YXAtMSwKKyAgICAweDEuZDk2ZTA1OHA0ODgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTMKKyAgICAweDEuZjJjMjE3Y2JjN2RjYzkxOTI0M2E3YzQzNGEyMDlmOWFwLTEsCisgICAgLTB4MS5kOTZlMDU4cDQ4OAorICB9LAorICB7IC8vIEVudHJ5IDQ1NAorICAgIDB4MS45OGRjZDA5MzM3NzkyODAwMDAwMDAwMDAwMDE2N2RjN3AtMSwKKyAgICAweDEuZDk4YzRjNjEyNzE4ZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ1NQorICAgIC0weDEuOThkY2QwOTMzNzc5MjgwMDAwMDAwMDAwMDAxNjdkYzdwLTEsCisgICAgLTB4MS5kOThjNGM2MTI3MThkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDU2CisgICAgMHgxLmRiM2JhODc3NWNhMjU3ZGEzYmQ1NDQ5ZDM5NmE2NmUycC01LAorICAgIDB4MS5kYjhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTcKKyAgICAtMHgxLmRiM2JhODc3NWNhMjU3ZGEzYmQ1NDQ5ZDM5NmE2NmUycC01LAorICAgIC0weDEuZGI4cC01CisgIH0sCisgIHsgLy8gRW50cnkgNDU4CisgICAgLTB4MS45ZmVlMzc2OTdkNTgyODAzMWE2YTI2NzljMTQzMzQ1N3AtMiwKKyAgICAweDEuZGUzODZkNjA5MDMwM3AyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTkKKyAgICAweDEuOWZlZTM3Njk3ZDU4MjgwMzFhNmEyNjc5YzE0MzM0NTdwLTIsCisgICAgLTB4MS5kZTM4NmQ2MDkwMzAzcDIwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2MAorICAgIC0weDEuNTM2MWVlNjU1MzE4ODAzNmU5ZGZjYWI0MjhkZWI0ZTFwLTUzLAorICAgIDB4MS5kZTVlNTA1NGU5MjFicDM1CisgIH0sCisgIHsgLy8gRW50cnkgNDYxCisgICAgMHgxLjUzNjFlZTY1NTMxODgwMzZlOWRmY2FiNDI4ZGViNGUxcC01MywKKyAgICAtMHgxLmRlNWU1MDU0ZTkyMWJwMzUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjIKKyAgICAweDEuZmVjNDhkNWU3NjllYmUzNzQ0OGMxMGUwYTdhMGVjYjFwLTEsCisgICAgMHgxLmRmNzdkZGY3N2RkZjRwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjMKKyAgICAtMHgxLmZlYzQ4ZDVlNzY5ZWJlMzc0NDhjMTBlMGE3YTBlY2IxcC0xLAorICAgIC0weDEuZGY3N2RkZjc3ZGRmNHAxMAorICB9LAorICB7IC8vIEVudHJ5IDQ2NAorICAgIC0weDEuMjkwMmE4M2Q3MjYzMjgwMDAwM2QxMTQ5YjdlNmMwZmJwLTEsCisgICAgMHgxLmUxNTYyYjA0NDhhODZwMQorICB9LAorICB7IC8vIEVudHJ5IDQ2NQorICAgIDB4MS4yOTAyYTgzZDcyNjMyODAwMDAzZDExNDliN2U2YzBmYnAtMSwKKyAgICAtMHgxLmUxNTYyYjA0NDhhODZwMQorICB9LAorICB7IC8vIEVudHJ5IDQ2NgorICAgIDB4MS45ZTI2YzdiYzk2YjY4ODAwMDAwZDQ3MzZmZjEzMjAzNXAtMSwKKyAgICAweDEuZTI3MDBjZGM4NjYzNXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2NworICAgIC0weDEuOWUyNmM3YmM5NmI2ODgwMDAwMGQ0NzM2ZmYxMzIwMzVwLTEsCisgICAgLTB4MS5lMjcwMGNkYzg2NjM1cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDY4CisgICAgMHgxLmU2NDk0OTExZWVkZDE4ZDBmMTkxNWZkNGY2NDk1NDY5cC03LAorICAgIDB4MS5lNjRkZGFmN2JkNzMwcC03CisgIH0sCisgIHsgLy8gRW50cnkgNDY5CisgICAgLTB4MS5lNjQ5NDkxMWVlZGQxOGQwZjE5MTVmZDRmNjQ5NTQ2OXAtNywKKyAgICAtMHgxLmU2NGRkYWY3YmQ3MzBwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzAKKyAgICAweDEuZWIyNmM2OTBiZGEyNDg0YTZjMDIwYTljMDUyZWE4NDZwLTUsCisgICAgMHgxLmViNzIzOWJjYThhZmFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzEKKyAgICAtMHgxLmViMjZjNjkwYmRhMjQ4NGE2YzAyMGE5YzA1MmVhODQ2cC01LAorICAgIC0weDEuZWI3MjM5YmNhOGFmYXAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ3MgorICAgIDB4MS5jNzMyMzg3OTBhNGNlODAxZTA0MTA3YjI1NDZiNGFlM3AtMywKKyAgICAweDEuZWY3YjgzZjdiZGVmNHAzCisgIH0sCisgIHsgLy8gRW50cnkgNDczCisgICAgLTB4MS5jNzMyMzg3OTBhNGNlODAxZTA0MTA3YjI1NDZiNGFlM3AtMywKKyAgICAtMHgxLmVmN2I4M2Y3YmRlZjRwMworICB9LAorICB7IC8vIEVudHJ5IDQ3NAorICAgIDB4MS5lZDFiNTc1YWNiOGM4ODEwODJjZTMxNTA3NGE4YTQyYXAtMywKKyAgICAweDEuZjIwMDAwMDAwMTA5YnAtMworICB9LAorICB7IC8vIEVudHJ5IDQ3NQorICAgIC0weDEuZWQxYjU3NWFjYjhjODgxMDgyY2UzMTUwNzRhOGE0MmFwLTMsCisgICAgLTB4MS5mMjAwMDAwMDAxMDlicC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDc2CisgICAgMHgxLmMxYjUwYTU2Yzg4MDk4MDAwMDAyODJhNTE2YzEzZTI1cC0xLAorICAgIDB4MS5mNDBjYTY3YTllOGQ3cDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzcKKyAgICAtMHgxLmMxYjUwYTU2Yzg4MDk4MDAwMDAyODJhNTE2YzEzZTI1cC0xLAorICAgIC0weDEuZjQwY2E2N2E5ZThkN3A5CisgIH0sCisgIHsgLy8gRW50cnkgNDc4CisgICAgMHgxLmUzMjFmZWE2NDNhOTY4MDgzMjA4NzY4ZTllMmNkMjhlcC0yLAorICAgIDB4MS5mNzIyNGQyYzc3NTQwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDc5CisgICAgLTB4MS5lMzIxZmVhNjQzYTk2ODA4MzIwODc2OGU5ZTJjZDI4ZXAtMiwKKyAgICAtMHgxLmY3MjI0ZDJjNzc1NDBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODAKKyAgICAweDEuYzEyNjliMDIwYTEwN2ZmYzAwNjEyYTU2M2E5MTk2ODZwLTMsCisgICAgMHgxLmY3OGEwZDA1ZTYwZTJwNgorICB9LAorICB7IC8vIEVudHJ5IDQ4MQorICAgIC0weDEuYzEyNjliMDIwYTEwN2ZmYzAwNjEyYTU2M2E5MTk2ODZwLTMsCisgICAgLTB4MS5mNzhhMGQwNWU2MGUycDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODIKKyAgICAweDEuZjc2Y2FlMjhhMDc3NDdmZmZjZDQ1M2EwMTQyYzJlYzFwLTUsCisgICAgMHgxLmY3YmRlZjdiZGYwNzNwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODMKKyAgICAtMHgxLmY3NmNhZTI4YTA3NzQ3ZmZmY2Q0NTNhMDE0MmMyZWMxcC01LAorICAgIC0weDEuZjdiZGVmN2JkZjA3M3AtNQorICB9LAorICB7IC8vIEVudHJ5IDQ4NAorICAgIDB4MS5lNDJjMTM5ZGMyMDUzODA3Yjk0NDBmMWEyOGY3YzliOXAtMiwKKyAgICAweDEuZjg1MDJkNTk1NTQ0M3AtMgorICB9LAorICB7IC8vIEVudHJ5IDQ4NQorICAgIC0weDEuZTQyYzEzOWRjMjA1MzgwN2I5NDQwZjFhMjhmN2M5YjlwLTIsCisgICAgLTB4MS5mODUwMmQ1OTU1NDQzcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDg2CisgICAgMHgxLjBmYTc0OWUwN2Y2M2ZjOWQwMWM4MzRkZTQ3NjU0YWNicC05LAorICAgIDB4MS5mOGZjODI0ZDI2OTNicDYxCisgIH0sCisgIHsgLy8gRW50cnkgNDg3CisgICAgLTB4MS4wZmE3NDllMDdmNjNmYzlkMDFjODM0ZGU0NzY1NGFjYnAtOSwKKyAgICAtMHgxLmY4ZmM4MjRkMjY5M2JwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODgKKyAgICAweDEuZmZhODAzMjRlMmQ4ZWJjMDJmMzIzZWQ0OWViOTdhNmNwLTEsCisgICAgMHgxLmY4ZmZmZmZmZmZmZmZwMgorICB9LAorICB7IC8vIEVudHJ5IDQ4OQorICAgIC0weDEuZmZhODAzMjRlMmQ4ZWJjMDJmMzIzZWQ0OWViOTdhNmNwLTEsCisgICAgLTB4MS5mOGZmZmZmZmZmZmZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTAKKyAgICAtMHgxLjdjZGY3OWQ1ZTM3YjhiMjEyZWZmODZkMmZmZTIwNDRicC0xLAorICAgIDB4MS5mZDhwMQorICB9LAorICB7IC8vIEVudHJ5IDQ5MQorICAgIDB4MS43Y2RmNzlkNWUzN2I4YjIxMmVmZjg2ZDJmZmUyMDQ0YnAtMSwKKyAgICAtMHgxLmZkOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNDkyCisgICAgMHgxLmZkM2Y0ODg0N2ExZDEwYThlNWZmMWQ0ZGI4NGVkMjZkcC01LAorICAgIDB4MS5mZDkzNjRkOTM2NTk2cC01CisgIH0sCisgIHsgLy8gRW50cnkgNDkzCisgICAgLTB4MS5mZDNmNDg4NDdhMWQxMGE4ZTVmZjFkNGRiODRlZDI2ZHAtNSwKKyAgICAtMHgxLmZkOTM2NGQ5MzY1OTZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTQKKyAgICAweDEuZjkzYWQ0NzFkMjYyZjgwMzJlOTJkNTk2Nzk3ZjlkNDFwLTMsCisgICAgMHgxLmZlOHAtMworICB9LAorICB7IC8vIEVudHJ5IDQ5NQorICAgIC0weDEuZjkzYWQ0NzFkMjYyZjgwMzJlOTJkNTk2Nzk3ZjlkNDFwLTMsCisgICAgLTB4MS5mZThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTYKKyAgICAweDEuODNiMzA2MjQxNDk3M2Q5MmM0Mjc4NTA3ZjA0NzRkNjdwLTEsCisgICAgMHgxLmZlYmI2NDZlMmVlNTdwMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTcKKyAgICAtMHgxLjgzYjMwNjI0MTQ5NzNkOTJjNDI3ODUwN2YwNDc0ZDY3cC0xLAorICAgIC0weDEuZmViYjY0NmUyZWU1N3AxMworICB9LAorICB7IC8vIEVudHJ5IDQ5OAorICAgIDB4MS4zYjQ1YmQ3NDQ5Nzc1NDdmYTQ2NzNlNDJkZmM5OTQwMnAtMSwKKyAgICAweDEuZmVlZmZmZmZmZmZjNnA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTkKKyAgICAtMHgxLjNiNDViZDc0NDk3NzU0N2ZhNDY3M2U0MmRmYzk5NDAycC0xLAorICAgIC0weDEuZmVlZmZmZmZmZmZjNnA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDAKKyAgICAtMHgxLmVlZmI1OWQxNDM2NDVhNDAwNDFiZjcyNmRjNmYyZmEwcC0xLAorICAgIDB4MS5mZjhmZmZmZmZmZmZmcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDEKKyAgICAweDEuZWVmYjU5ZDE0MzY0NWE0MDA0MWJmNzI2ZGM2ZjJmYTBwLTEsCisgICAgLTB4MS5mZjhmZmZmZmZmZmZmcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDIKKyAgICAtMHgxLjU2NDMzZjBjNmJjZWU5ODQ4NzUxNjExYzZmNWFkZTFmcC0xLAorICAgIDB4MS5mZjhmZmZmZmZmZmZmcDg3MAorICB9LAorICB7IC8vIEVudHJ5IDUwMworICAgIDB4MS41NjQzM2YwYzZiY2VlOTg0ODc1MTYxMWM2ZjVhZGUxZnAtMSwKKyAgICAtMHgxLmZmOGZmZmZmZmZmZmZwODcwCisgIH0sCisgIHsgLy8gRW50cnkgNTA0CisgICAgLTB4MS45MzAwMDYyNDZhNmMwNWRhYjcyZWE2OTdkYWFiYTY5ZHAtMiwKKyAgICAweDEuZmZjZmZmOHAxOQorICB9LAorICB7IC8vIEVudHJ5IDUwNQorICAgIDB4MS45MzAwMDYyNDZhNmMwNWRhYjcyZWE2OTdkYWFiYTY5ZHAtMiwKKyAgICAtMHgxLmZmY2ZmZjhwMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDYKKyAgICAweDEuZGVkMzdhMWYwYWE2ZDA1ZDc4MmQ2YWFiNDBjYjg2NzBwLTEsCisgICAgMHgxLmZmY2ZmZjhwMzY1CisgIH0sCisgIHsgLy8gRW50cnkgNTA3CisgICAgLTB4MS5kZWQzN2ExZjBhYTZkMDVkNzgyZDZhYWI0MGNiODY3MHAtMSwKKyAgICAtMHgxLmZmY2ZmZjhwMzY1CisgIH0sCisgIHsgLy8gRW50cnkgNTA4CisgICAgLTB4MS45M2U0ZDk2YjYyMWUwN2JjYTg2NmMxYTJlNzcxODgxY3AtMSwKKyAgICAweDEuZmZjZmZmZmZmZmY2Y3A3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDkKKyAgICAweDEuOTNlNGQ5NmI2MjFlMDdiY2E4NjZjMWEyZTc3MTg4MWNwLTEsCisgICAgLTB4MS5mZmNmZmZmZmZmZjZjcDcyMAorICB9LAorICB7IC8vIEVudHJ5IDUxMAorICAgIDB4MS45MDY4YjkwZTQyNjA1ZTA1MDEwZTE0NzExMDY4OGU1MnAtMSwKKyAgICAweDEuZmZjZmZmZmZmZmZmOXAzMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTEKKyAgICAtMHgxLjkwNjhiOTBlNDI2MDVlMDUwMTBlMTQ3MTEwNjg4ZTUycC0xLAorICAgIC0weDEuZmZjZmZmZmZmZmZmOXAzMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTIKKyAgICAweDEuY2Y4MTY0MmU3NDIxYzU2NTA3ZWI4MTg3NjExYzg0ZGJwLTEsCisgICAgMHgxLmZmY2ZmZmZmZmZmZmZwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTMKKyAgICAtMHgxLmNmODE2NDJlNzQyMWM1NjUwN2ViODE4NzYxMWM4NGRicC0xLAorICAgIC0weDEuZmZjZmZmZmZmZmZmZnAxMgorICB9LAorICB7IC8vIEVudHJ5IDUxNAorICAgIDB4MS5mZmZmZmZlNjFmZTYxNmIyODJjM2E2OWNhMjI1YzJkMnAtMSwKKyAgICAweDEuZmZjZmZmZmZmZmZmZnA0MDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTUKKyAgICAtMHgxLmZmZmZmZmU2MWZlNjE2YjI4MmMzYTY5Y2EyMjVjMmQycC0xLAorICAgIC0weDEuZmZjZmZmZmZmZmZmZnA0MDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTYKKyAgICAtMHgxLjQwNmVlOWFlOTFlMTZmMWQ1OGM5NmViNzE2NWY1OTVicC0xLAorICAgIDB4MS5mZmVmZmZmZmZmZmNjcDk5NQorICB9LAorICB7IC8vIEVudHJ5IDUxNworICAgIDB4MS40MDZlZTlhZTkxZTE2ZjFkNThjOTZlYjcxNjVmNTk1YnAtMSwKKyAgICAtMHgxLmZmZWZmZmZmZmZmY2NwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgNTE4CisgICAgMHgxLmZhOWY2Y2EwZWM0NGUwMDEwMDI2ZjM4NWMwYWI4NjkwcC0zLAorICAgIDB4MS5mZmVmZmZmZmZmZmZmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTE5CisgICAgLTB4MS5mYTlmNmNhMGVjNDRlMDAxMDAyNmYzODVjMGFiODY5MHAtMywKKyAgICAtMHgxLmZmZWZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjAKKyAgICAweDEuNmI0OTFkYjhiNjZkODgwMTIxZjgzMGQ4Yzc1NWFlNTRwLTQsCisgICAgMHgxLmZmZWZmZmZmZmZmZmZwNTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjEKKyAgICAtMHgxLjZiNDkxZGI4YjY2ZDg4MDEyMWY4MzBkOGM3NTVhZTU0cC00LAorICAgIC0weDEuZmZlZmZmZmZmZmZmZnA1NQorICB9LAorICB7IC8vIEVudHJ5IDUyMgorICAgIDB4MS5mYjBhYjEwMmNiMTJmZWY5YTRlNGE4NjlhMjk5ZWQ0NnAtMSwKKyAgICAweDEuZmZlZmZmZmZmZmZmZnAxODAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjMKKyAgICAtMHgxLmZiMGFiMTAyY2IxMmZlZjlhNGU0YTg2OWEyOTllZDQ2cC0xLAorICAgIC0weDEuZmZlZmZmZmZmZmZmZnAxODAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjQKKyAgICAweDEuZTQzMTVlYzA0NjM1Y2QzNGIzZWY2MDM3MDUxMTI4MWZwLTMsCisgICAgMHgxLmZmZWZmZmZmZmZmZmZwNzA2CisgIH0sCisgIHsgLy8gRW50cnkgNTI1CisgICAgLTB4MS5lNDMxNWVjMDQ2MzVjZDM0YjNlZjYwMzcwNTExMjgxZnAtMywKKyAgICAtMHgxLmZmZWZmZmZmZmZmZmZwNzA2CisgIH0sCisgIHsgLy8gRW50cnkgNTI2CisgICAgMHgxLmZmZmZjMzk5OTdlZjY3ZDJiOWM3ZTRlZmE4Yjc3ZTUwcC0xLAorICAgIDB4MS5mZmYxZmZmZmZmZmZmcDQxCisgIH0sCisgIHsgLy8gRW50cnkgNTI3CisgICAgLTB4MS5mZmZmYzM5OTk3ZWY2N2QyYjljN2U0ZWZhOGI3N2U1MHAtMSwKKyAgICAtMHgxLmZmZjFmZmZmZmZmZmZwNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjgKKyAgICAweDEuZmZmMTYzOTkyODMxZThjNjhiMDIzNGI0MmVmYTFkMGFwLTcsCisgICAgMHgxLmZmZjZiODlmZmZmZmZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjkKKyAgICAtMHgxLmZmZjE2Mzk5MjgzMWU4YzY4YjAyMzRiNDJlZmExZDBhcC03LAorICAgIC0weDEuZmZmNmI4OWZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDUzMAorICAgIC0weDEuZDk3NTdhMDVmY2M0MmM2NjRmM2E2NmI1NTc2YTk4ZTRwLTEsCisgICAgMHgxLmZmZmRmZmZmMDAwMWZwMTA1CisgIH0sCisgIHsgLy8gRW50cnkgNTMxCisgICAgMHgxLmQ5NzU3YTA1ZmNjNDJjNjY0ZjNhNjZiNTU3NmE5OGU0cC0xLAorICAgIC0weDEuZmZmZGZmZmYwMDAxZnAxMDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzIKKyAgICAtMHgxLjgzNzkxZmU2M2ExN2E4MDI1OGYyYzQ3OWM3ZTFkMzM5cC0xLAorICAgIDB4MS5mZmZmMGMwMDAwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzMKKyAgICAweDEuODM3OTFmZTYzYTE3YTgwMjU4ZjJjNDc5YzdlMWQzMzlwLTEsCisgICAgLTB4MS5mZmZmMGMwMDAwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzQKKyAgICAtMHgxLmQ5ZDNhODVhY2M1MGM4MDAwMDA1ZDEzZGQ4MmY2MWI1cC0xLAorICAgIDB4MS5mZmZmYzAwMDAwMDU1cDE1MAorICB9LAorICB7IC8vIEVudHJ5IDUzNQorICAgIDB4MS5kOWQzYTg1YWNjNTBjODAwMDAwNWQxM2RkODJmNjFiNXAtMSwKKyAgICAtMHgxLmZmZmZjMDAwMDAwNTVwMTUwCisgIH0sCisgIHsgLy8gRW50cnkgNTM2CisgICAgLTB4MS5mMjVkODU4ZGNkZWU3NDEyY2YwNzYwZTk1NWNiODM5MHAtMywKKyAgICAweDEuZmZmZmUzZmZmZmZmZnA0MAorICB9LAorICB7IC8vIEVudHJ5IDUzNworICAgIDB4MS5mMjVkODU4ZGNkZWU3NDEyY2YwNzYwZTk1NWNiODM5MHAtMywKKyAgICAtMHgxLmZmZmZlM2ZmZmZmZmZwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzgKKyAgICAweDEuZDE4ZjdiZmU1NTdlYjgwMDAxNTU3MTQyYmRhMThiYWVwLTEsCisgICAgMHgxLmZmZmZlZmZmY2ZmYWVwMAorICB9LAorICB7IC8vIEVudHJ5IDUzOQorICAgIC0weDEuZDE4ZjdiZmU1NTdlYjgwMDAxNTU3MTQyYmRhMThiYWVwLTEsCisgICAgLTB4MS5mZmZmZWZmZmNmZmFlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDAKKyAgICAtMHgxLmJjMTRlYmY2YmZiNTFmZmE1ZTZmNWIwYjBiZjllODk5cC00LAorICAgIDB4MS5mZmZmZmJmZmZmZmZmcDIyOAorICB9LAorICB7IC8vIEVudHJ5IDU0MQorICAgIDB4MS5iYzE0ZWJmNmJmYjUxZmZhNWU2ZjViMGIwYmY5ZTg5OXAtNCwKKyAgICAtMHgxLmZmZmZmYmZmZmZmZmZwMjI4CisgIH0sCisgIHsgLy8gRW50cnkgNTQyCisgICAgMHgxLmJiODg3YTA2ZjZjNTBmZWYwNjU0ZDMwM2M4MmYxYTc4cC0zLAorICAgIDB4MS5mZmZmZmJmZmZmZmZmcDczNQorICB9LAorICB7IC8vIEVudHJ5IDU0MworICAgIC0weDEuYmI4ODdhMDZmNmM1MGZlZjA2NTRkMzAzYzgyZjFhNzhwLTMsCisgICAgLTB4MS5mZmZmZmJmZmZmZmZmcDczNQorICB9LAorICB7IC8vIEVudHJ5IDU0NAorICAgIDB4MS5mZmFhYWRlZjU0ZTJmMGM0MDgxODgwYjdiOWU3OTRkZnAtNSwKKyAgICAweDEuZmZmZmZlZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDU0NQorICAgIC0weDEuZmZhYWFkZWY1NGUyZjBjNDA4MTg4MGI3YjllNzk0ZGZwLTUsCisgICAgLTB4MS5mZmZmZmVmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgNTQ2CisgICAgMHgxLmQ0YTNjNjJjNWJlMDhiMTIzODY4ZThhNDY3ZWZmMGNlcC0xLAorICAgIDB4MS5mZmZmZmY4cDExOQorICB9LAorICB7IC8vIEVudHJ5IDU0NworICAgIC0weDEuZDRhM2M2MmM1YmUwOGIxMjM4NjhlOGE0NjdlZmYwY2VwLTEsCisgICAgLTB4MS5mZmZmZmY4cDExOQorICB9LAorICB7IC8vIEVudHJ5IDU0OAorICAgIDB4MS5jZWMyMGYxOTc3MDNmNGZkNDIwNDhkZGY4ODlmZTg0YXAtMywKKyAgICAweDEuZmZmZmZmOHAxOTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDkKKyAgICAtMHgxLmNlYzIwZjE5NzcwM2Y0ZmQ0MjA0OGRkZjg4OWZlODRhcC0zLAorICAgIC0weDEuZmZmZmZmOHAxOTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTAKKyAgICAweDEuZDM3YWFkYzdjODY2MjUwMTc1MWRiZjRlOWU1NzAxYWJwLTIsCisgICAgMHgxLmZmZmZmZjhwNTQzCisgIH0sCisgIHsgLy8gRW50cnkgNTUxCisgICAgLTB4MS5kMzdhYWRjN2M4NjYyNTAxNzUxZGJmNGU5ZTU3MDFhYnAtMiwKKyAgICAtMHgxLmZmZmZmZjhwNTQzCisgIH0sCisgIHsgLy8gRW50cnkgNTUyCisgICAgMHgxLmZhOGQyYTRkMGEyMDI3ZjBmNzRkZjMxMzZjYjc4ZjcycC0xLAorICAgIDB4MS5mZmZmZmZjMDAxOGZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTMKKyAgICAtMHgxLmZhOGQyYTRkMGEyMDI3ZjBmNzRkZjMxMzZjYjc4ZjcycC0xLAorICAgIC0weDEuZmZmZmZmYzAwMThmZnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTU0CisgICAgMHgxLmZhOGQyYTAyOWY5NzdmZmU3NGNiMTRjYjA5ZGYxNzZkcC0xLAorICAgIDB4MS5mZmZmZmZmZmVmZmZmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTUKKyAgICAtMHgxLmZhOGQyYTAyOWY5NzdmZmU3NGNiMTRjYjA5ZGYxNzZkcC0xLAorICAgIC0weDEuZmZmZmZmZmZlZmZmZnAyCisgIH0sCisgIHsgLy8gRW50cnkgNTU2CisgICAgLTB4MS4yNzYzZjAyYTJkMWU5ODAwMDAwMTVkYmY5NWQ4OWFiMnAtNCwKKyAgICAweDEuZmZmZmZmZmZmODI1MHA5NDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTcKKyAgICAweDEuMjc2M2YwMmEyZDFlOTgwMDAwMDE1ZGJmOTVkODlhYjJwLTQsCisgICAgLTB4MS5mZmZmZmZmZmY4MjUwcDk0MworICB9LAorICB7IC8vIEVudHJ5IDU1OAorICAgIDB4MS5mY2ZmMTI4Zjc3ZGRhODFjMmEwZWMwM2U0ZWQ4MDQyMnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZTA5ZHAzMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTkKKyAgICAtMHgxLmZjZmYxMjhmNzdkZGE4MWMyYTBlYzAzZTRlZDgwNDIycC0xLAorICAgIC0weDEuZmZmZmZmZmZmZTA5ZHAzMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjAKKyAgICAtMHgxLmZjYzBiZmVkZDg0YTU4MTZkOTU5NmI4ZjlmYmI5YjQxcC0xLAorICAgIDB4MS5mZmZmZmZmZmZlNmUzcDcyMAorICB9LAorICB7IC8vIEVudHJ5IDU2MQorICAgIDB4MS5mY2MwYmZlZGQ4NGE1ODE2ZDk1OTZiOGY5ZmJiOWI0MXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmU2ZTNwNzIwCisgIH0sCisgIHsgLy8gRW50cnkgNTYyCisgICAgMHgxLmFlZDU0OGYwOTBjMWRmZmU2ZTA0MzIyZGM4ZThjYmZhcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZTdmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTYzCisgICAgLTB4MS5hZWQ1NDhmMDkwYzFkZmZlNmUwNDMyMmRjOGU4Y2JmYXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZlN2ZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjQKKyAgICAtMHgxLmY1ZTExZGVmOTlkMmIyMjA5ODI0MmFjOWZiNzU2YWRicC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZWZmcDI1MAorICB9LAorICB7IC8vIEVudHJ5IDU2NQorICAgIDB4MS5mNWUxMWRlZjk5ZDJiMjIwOTgyNDJhYzlmYjc1NmFkYnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZlZmZwMjUwCisgIH0sCisgIHsgLy8gRW50cnkgNTY2CisgICAgMHgxLjhhOWNiZjQ4ZmVjOWYyYTBmZGU5NTFmMzEzYjkxOGNjcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZjc4cDkyMAorICB9LAorICB7IC8vIEVudHJ5IDU2NworICAgIC0weDEuOGE5Y2JmNDhmZWM5ZjJhMGZkZTk1MWYzMTNiOTE4Y2NwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZjc4cDkyMAorICB9LAorICB7IC8vIEVudHJ5IDU2OAorICAgIC0weDEuN2ViYTU4OTQ4NDRjYzAwYzg4ZjM5YmQzZDQxOTdkMTRwLTMsCisgICAgMHgxLmZmZmZmZmZmZmZmODNwMTUwCisgIH0sCisgIHsgLy8gRW50cnkgNTY5CisgICAgMHgxLjdlYmE1ODk0ODQ0Y2MwMGM4OGYzOWJkM2Q0MTk3ZDE0cC0zLAorICAgIC0weDEuZmZmZmZmZmZmZmY4M3AxNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzAKKyAgICAweDEuOTJjNGYwNmQyY2RkMTVkMzAyNjA5Y2FhODc4ODJhZmFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZDVwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgNTcxCisgICAgLTB4MS45MmM0ZjA2ZDJjZGQxNWQzMDI2MDljYWE4Nzg4MmFmYXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZDVwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgNTcyCisgICAgLTB4MS4zZDVmN2RlYjFkM2JhZDYzZWIxNzNiNzNlODQxMTBhMHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZlOHA3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzMKKyAgICAweDEuM2Q1ZjdkZWIxZDNiYWQ2M2ViMTczYjczZTg0MTEwYTBwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmU4cDcyMAorICB9LAorICB7IC8vIEVudHJ5IDU3NAorICAgIC0weDEuOTEzNDliMGFlOTBlNTMxNjUzOWMwN2VlYTliNGU2YjBwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZWJwOTIwCisgIH0sCisgIHsgLy8gRW50cnkgNTc1CisgICAgMHgxLjkxMzQ5YjBhZTkwZTUzMTY1MzljMDdlZWE5YjRlNmIwcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZlYnA5MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzYKKyAgICAtMHgxLjgzN2I5ZGRkYzFlODczOGQ3NGIyYTc0ZmE0MmQ4MDJkcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmYxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzcKKyAgICAweDEuODM3YjlkZGRjMWU4NzM4ZDc0YjJhNzRmYTQyZDgwMmRwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmYxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzgKKyAgICAweDEuNTEwZTA2MmU3ZmEyMDM3ZDM4NDJkZTk5M2M5YzUwOTBwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZjFwMjQ1CisgIH0sCisgIHsgLy8gRW50cnkgNTc5CisgICAgLTB4MS41MTBlMDYyZTdmYTIwMzdkMzg0MmRlOTkzYzljNTA5MHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjFwMjQ1CisgIH0sCisgIHsgLy8gRW50cnkgNTgwCisgICAgMHgxLmVhZWU4NzQ0YjA1ZTQ3ZmRlMDkyZTNhMTQ4OTVkMDY3cC0yLAorICAgIDB4MS5mZmZmZmZmZmZmZmYzcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTgxCisgICAgLTB4MS5lYWVlODc0NGIwNWU0N2ZkZTA5MmUzYTE0ODk1ZDA2N3AtMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODIKKyAgICAweDEuOGE0ZGVlOGY0MDYyNzkxMDc4NzY2YjBhMDFkZTM2MGRwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZjRwODQ1CisgIH0sCisgIHsgLy8gRW50cnkgNTgzCisgICAgLTB4MS44YTRkZWU4ZjQwNjI3OTEwNzg3NjZiMGEwMWRlMzYwZHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjRwODQ1CisgIH0sCisgIHsgLy8gRW50cnkgNTg0CisgICAgMHgxLjUxMThkNmJiZGUwN2U0ZWViZjJhMTFkZjRkYzc0ZDU0cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmY0cDEwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODUKKyAgICAtMHgxLjUxMThkNmJiZGUwN2U0ZWViZjJhMTFkZjRkYzc0ZDU0cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmNHAxMDIwCisgIH0sCisgIHsgLy8gRW50cnkgNTg2CisgICAgLTB4MS41Y2Q1YzUzY2YzMGE5N2ZmMGU0NzFkMTQ5YzQwOTU1ZHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmOHA2MTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODcKKyAgICAweDEuNWNkNWM1M2NmMzBhOTdmZjBlNDcxZDE0OWM0MDk1NWRwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmY4cDYxNgorICB9LAorICB7IC8vIEVudHJ5IDU4OAorICAgIDB4MS5mZmZmYTFmMGQ3ZGFmNjkzYTgwYTJiODE3YjE2ZjI3N3AtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmY3A0NzUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODkKKyAgICAtMHgxLmZmZmZhMWYwZDdkYWY2OTNhODBhMmI4MTdiMTZmMjc3cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmY3A0NzUKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTAKKyAgICAweDEuNTFlOWQ4NDAxMDZkNzM0ODRkNDRhODZmNzRjM2Q0MWRwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwOTcwCisgIH0sCisgIHsgLy8gRW50cnkgNTkxCisgICAgLTB4MS41MWU5ZDg0MDEwNmQ3MzQ4NGQ0NGE4NmY3NGMzZDQxZHAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwOTcwCisgIH0sCisgIHsgLy8gRW50cnkgNTkyCisgICAgLTAuMCwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTMKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTQKKyAgICAtMC4wLAorICAgIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTUKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTYKKyAgICAtMC4wLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDU5NworICAgIC0weDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNTk4CisgICAgMHgxLjAwMDAwMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIyLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNTk5CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAtMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDAKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDEKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmRmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDYwMgorICAgIDB4MS5mZmZmZmZmZmZmZmZkZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDYwMworICAgIDB4MS5mZmZmZmZmZmZmZmZkZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDYwNAorICAgIC0weDEuZmZmZmZmZmZmZmZmZGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNjA1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNjA2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAtMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDcKKyAgICAweDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDgKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIyLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDYwOQorICAgIDB4MS45OTk5OTk2ZGU4Y2ExOThjMjRhYjk0NDliZWVlMTZkNXAtMTMsCisgICAgMHgxLjk5OTk5OTk5OTk5OWFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgNjEwCisgICAgLTB4MS45OTk5OTk2ZGU4Y2ExOThjMjRhYjk0NDliZWVlMTZkNXAtMTMsCisgICAgLTB4MS45OTk5OTk5OTk5OTlhcC0xMworICB9LAorICB7IC8vIEVudHJ5IDYxMQorICAgIDB4MS45OTk5OThlYWQ2NWI5NmY3OGE0ZGJmZDgzOWM3ZWYyZXAtMTIsCisgICAgMHgxLjk5OTk5OTk5OTk5OWFwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgNjEyCisgICAgLTB4MS45OTk5OThlYWQ2NWI5NmY3OGE0ZGJmZDgzOWM3ZWYyZXAtMTIsCisgICAgLTB4MS45OTk5OTk5OTk5OTlhcC0xMgorICB9LAorICB7IC8vIEVudHJ5IDYxMworICAgIDB4MS4zMzMzMzIwYzQ5YmFiZmYxNTFiNmQwNDI5MGUyYzNhMnAtMTEsCisgICAgMHgxLjMzMzMzMzMzMzMzMzRwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNjE0CisgICAgLTB4MS4zMzMzMzIwYzQ5YmFiZmYxNTFiNmQwNDI5MGUyYzNhMnAtMTEsCisgICAgLTB4MS4zMzMzMzMzMzMzMzM0cC0xMQorICB9LAorICB7IC8vIEVudHJ5IDYxNQorICAgIDB4MS45OTk5OTZkZThjYTI4ODRkYTJmMDhmMjViYjAyNGQwOHAtMTEsCisgICAgMHgxLjk5OTk5OTk5OTk5OWFwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNjE2CisgICAgLTB4MS45OTk5OTZkZThjYTI4ODRkYTJmMDhmMjViYjAyNGQwOHAtMTEsCisgICAgLTB4MS45OTk5OTk5OTk5OTlhcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDYxNworICAgIDB4MS5mZmZmZmFhYWFhYWVlZWVlZWQ0ZWQ0ZWRhYjRjN2JkNnAtMTEsCisgICAgMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNjE4CisgICAgLTB4MS5mZmZmZmFhYWFhYWVlZWVlZWQ0ZWQ0ZWRhYjRjN2JkNnAtMTEsCisgICAgLTB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDYxOQorICAgIDB4MS4zMzMzMmU5NzhkNTUyYWZjODgzYmRiMDQ3NTFlMzgzNXAtMTAsCisgICAgMHgxLjMzMzMzMzMzMzMzMzNwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNjIwCisgICAgLTB4MS4zMzMzMmU5NzhkNTUyYWZjODgzYmRiMDQ3NTFlMzgzNXAtMTAsCisgICAgLTB4MS4zMzMzMzMzMzMzMzMzcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDYyMQorICAgIDB4MS42NjY2NWYxNTI5YWZmOGEzODA5MjQ2NjcwYTQzNmMzY3AtMTAsCisgICAgMHgxLjY2NjY2NjY2NjY2NjZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNjIyCisgICAgLTB4MS42NjY2NWYxNTI5YWZmOGEzODA5MjQ2NjcwYTQzNmMzY3AtMTAsCisgICAgLTB4MS42NjY2NjY2NjY2NjY2cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDYyMworICAgIDB4MS45OTk5OGVhZDY1Y2RmODJlMTk0YzEzMzk5N2YyZmI2OHAtMTAsCisgICAgMHgxLjk5OTk5OTk5OTk5OTlwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNjI0CisgICAgLTB4MS45OTk5OGVhZDY1Y2RmODJlMTk0YzEzMzk5N2YyZmI2OHAtMTAsCisgICAgLTB4MS45OTk5OTk5OTk5OTk5cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDYyNQorICAgIDB4MS5jY2NjYmQzZjdkMTVkNDJhZmZiOWYwMmJmMWRjMjU3YnAtMTAsCisgICAgMHgxLmNjY2NjY2NjY2NjY2NwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNjI2CisgICAgLTB4MS5jY2NjYmQzZjdkMTVkNDJhZmZiOWYwMmJmMWRjMjU3YnAtMTAsCisgICAgLTB4MS5jY2NjY2NjY2NjY2NjcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDYyNworICAgIDB4MS4wNjY1YWU5YzdiNDRlZDI4MDIxNmJlMjEwNGYyOGYwMnAtNywKKyAgICAweDEuMDY2NjY2NjY2NjY2NnAtNworICB9LAorICB7IC8vIEVudHJ5IDYyOAorICAgIC0weDEuMDY2NWFlOWM3YjQ0ZWQyODAyMTZiZTIxMDRmMjhmMDJwLTcsCisgICAgLTB4MS4wNjY2NjY2NjY2NjY2cC03CisgIH0sCisgIHsgLy8gRW50cnkgNjI5CisgICAgMHgxLmNjYzhlOTdiNTlmNjE4ODk4YzRhYzNhMGFlZGRmNzA5cC03LAorICAgIDB4MS5jY2NjY2NjY2NjY2NjcC03CisgIH0sCisgIHsgLy8gRW50cnkgNjMwCisgICAgLTB4MS5jY2M4ZTk3YjU5ZjYxODg5OGM0YWMzYTBhZWRkZjcwOXAtNywKKyAgICAtMHgxLmNjY2NjY2NjY2NjY2NwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzEKKyAgICAweDEuNDk5M2U4YThmZjc5YjEzMjA0NmVmYTc4NTZhOTc1MzhwLTYsCisgICAgMHgxLjQ5OTk5OTk5OTk5OTlwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzIKKyAgICAtMHgxLjQ5OTNlOGE4ZmY3OWIxMzIwNDZlZmE3ODU2YTk3NTM4cC02LAorICAgIC0weDEuNDk5OTk5OTk5OTk5OXAtNgorICB9LAorICB7IC8vIEVudHJ5IDYzMworICAgIDB4MS5hY2MwNDRjNTZkYjBlMTlmODJjOWMzY2ZmMjQ2ZTIwMXAtNiwKKyAgICAweDEuYWNjY2NjY2NjY2NjY3AtNgorICB9LAorICB7IC8vIEVudHJ5IDYzNAorICAgIC0weDEuYWNjMDQ0YzU2ZGIwZTE5ZjgyYzljM2NmZjI0NmUyMDFwLTYsCisgICAgLTB4MS5hY2NjY2NjY2NjY2NjcC02CisgIH0sCisgIHsgLy8gRW50cnkgNjM1CisgICAgMHgxLjA3ZjQ0ZDY3Y2Y0MWFmYmMwYzk1MTA4Yjk5ZjkxYjAxcC01LAorICAgIDB4MS4wODBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzYKKyAgICAtMHgxLjA3ZjQ0ZDY3Y2Y0MWFmYmMwYzk1MTA4Yjk5ZjkxYjAxcC01LAorICAgIC0weDEuMDgwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjM3CisgICAgMHgxLjM5ODVmZTQ2ZjFjODcxNGVhYTE0MTg1NjE5NjNlODlicC01LAorICAgIDB4MS4zOTk5OTk5OTk5OTlhcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjM4CisgICAgLTB4MS4zOTg1ZmU0NmYxYzg3MTRlYWExNDE4NTYxOTYzZTg5YnAtNSwKKyAgICAtMHgxLjM5OTk5OTk5OTk5OWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzkKKyAgICAweDEuNmIxNGJkZTkzYWM1ZjdkMjQ1NDRkMGVjZjhiZTdhZWVwLTUsCisgICAgMHgxLjZiMzMzMzMzMzMzMzRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDAKKyAgICAtMHgxLjZiMTRiZGU5M2FjNWY3ZDI0NTQ0ZDBlY2Y4YmU3YWVlcC01LAorICAgIC0weDEuNmIzMzMzMzMzMzMzNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDY0MQorICAgIDB4MS45Y2EwMTUzZWQ4Mzk2YjAyZjg2MDUyMTlhNWZlNTkxN3AtNSwKKyAgICAweDEuOWNjY2NjY2NjY2NjZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDY0MgorICAgIC0weDEuOWNhMDE1M2VkODM5NmIwMmY4NjA1MjE5YTVmZTU5MTdwLTUsCisgICAgLTB4MS45Y2NjY2NjY2NjY2NlcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjQzCisgICAgMHgxLmNlMjc4ZDQwMjdkMzQzODdmMTg0ZDRhYjJhYWY1NDVmcC01LAorICAgIDB4MS5jZTY2NjY2NjY2NjY2cC01CisgIH0sCisgIHsgLy8gRW50cnkgNjQ0CisgICAgLTB4MS5jZTI3OGQ0MDI3ZDM0Mzg3ZjE4NGQ0YWIyYWFmNTQ1ZnAtNSwKKyAgICAtMHgxLmNlNjY2NjY2NjY2NjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDUKKyAgICAweDEuNDNjMWU5YzE3MWE2NjdhMGI5MjUxOWEwNGZhNWE5MWNwLTEsCisgICAgMHgxLjVlN2ZjNDM2OWJkYWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDYKKyAgICAtMHgxLjQzYzFlOWMxNzFhNjY3YTBiOTI1MTlhMDRmYTVhOTFjcC0xLAorICAgIC0weDEuNWU3ZmM0MzY5YmRhZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0NworICAgIDB4MS5lZTNkNmJjZWEwOWNhMThiMWQxY2U3ZWUwNGZkODg2ZnAtMSwKKyAgICAweDEuNGU3ZmM0MzY5YmRhZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ4CisgICAgLTB4MS5lZTNkNmJjZWEwOWNhMThiMWQxY2U3ZWUwNGZkODg2ZnAtMSwKKyAgICAtMHgxLjRlN2ZjNDM2OWJkYWRwMAorICB9LAorICB7IC8vIEVudHJ5IDY0OQorICAgIDB4MS5kZjhlMjJlYTgwOWQ2NWM2YTY5Yjk2YWNhNjBiZTQzMnAtMSwKKyAgICAweDEuZWRiZmE2NTFlOWM4NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjUwCisgICAgLTB4MS5kZjhlMjJlYTgwOWQ2NWM2YTY5Yjk2YWNhNjBiZTQzMnAtMSwKKyAgICAtMHgxLmVkYmZhNjUxZTljODRwMAorICB9LAorICB7IC8vIEVudHJ5IDY1MQorICAgIDB4MS4xZDM0NzllYWM3YWUzNWUyZmJlYTBhZTY5NjQzNDY5MnAtMSwKKyAgICAweDEuNDY3ZmM0MzY5YmRhZHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjUyCisgICAgLTB4MS4xZDM0NzllYWM3YWUzNWUyZmJlYTBhZTY5NjQzNDY5MnAtMSwKKyAgICAtMHgxLjQ2N2ZjNDM2OWJkYWRwMQorICB9LAorICB7IC8vIEVudHJ5IDY1MworICAgIC0weDEuZmZlYWFhZWVlZTg0YjQ0Y2NlZmVmODMyMjU0ZDI4YzBwLTYsCisgICAgMHgxLjk2MWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDY1NAorICAgIDB4MS5mZmVhYWFlZWVlODRiNDRjY2VmZWY4MzIyNTRkMjhjMHAtNiwKKyAgICAtMHgxLjk2MWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDY1NQorICAgIC0weDEuMzczNGQzMmQ0OWJkMGI5NDI3NzJhNzU2N2Q1MTQxNDBwLTEsCisgICAgMHgxLmU1YmZhNjUxZTljODNwMQorICB9LAorICB7IC8vIEVudHJ5IDY1NgorICAgIDB4MS4zNzM0ZDMyZDQ5YmQwYjk0Mjc3MmE3NTY3ZDUxNDE0MHAtMSwKKyAgICAtMHgxLmU1YmZhNjUxZTljODNwMQorICB9LAorICB7IC8vIEVudHJ5IDY1NworICAgIC0weDEuZTlkMjVkMTk5MTFlMjA1YjY1MzUyMWY0MmI5Yjg2NGZwLTEsCisgICAgMHgxLjFhYWZjYmFmYzg1ZjdwMgorICB9LAorICB7IC8vIEVudHJ5IDY1OAorICAgIDB4MS5lOWQyNWQxOTkxMWUyMDViNjUzNTIxZjQyYjliODY0ZnAtMSwKKyAgICAtMHgxLjFhYWZjYmFmYzg1ZjdwMgorICB9LAorICB7IC8vIEVudHJ5IDY1OQorICAgIC0weDEuZTRlY2RjNWE0ZTQ2NTg5OTkyOGViOWZjOTU4MjlkNDhwLTEsCisgICAgMHgxLjQyN2ZjNDM2OWJkYWRwMgorICB9LAorICB7IC8vIEVudHJ5IDY2MAorICAgIDB4MS5lNGVjZGM1YTRlNDY1ODk5OTI4ZWI5ZmM5NTgyOWQ0OHAtMSwKKyAgICAtMHgxLjQyN2ZjNDM2OWJkYWRwMgorICB9LAorICB7IC8vIEVudHJ5IDY2MQorICAgIC0weDEuMmE1OWYxMDM0NDI2MTk3ZmE2ZWVlMjI3NjI5NjdmMjVwLTEsCisgICAgMHgxLjZhNGZiY2JkNmY1NjJwMgorICB9LAorICB7IC8vIEVudHJ5IDY2MgorICAgIDB4MS4yYTU5ZjEwMzQ0MjYxOTdmYTZlZWUyMjc2Mjk2N2YyNXAtMSwKKyAgICAtMHgxLjZhNGZiY2JkNmY1NjJwMgorICB9LAorICB7IC8vIEVudHJ5IDY2MworICAgIC0weDEuMjYzMTI0NDNiZDM1ZjE5MzEyZWFjMGExYTZiNTY1OWVwLTEsCisgICAgMHgxLjZhZjJlZmYwYTI4OTZwMgorICB9LAorICB7IC8vIEVudHJ5IDY2NAorICAgIDB4MS4yNjMxMjQ0M2JkMzVmMTkzMTJlYWMwYTFhNmI1NjU5ZXAtMSwKKyAgICAtMHgxLjZhZjJlZmYwYTI4OTZwMgorICB9LAorICB7IC8vIEVudHJ5IDY2NQorICAgIC0weDEuZTE4ZTY2MGE1ZTJmYjMxNmVjYmI5ZWQ3MDEyMmVmZjVwLTEsCisgICAgMHgxLjQzYzYyYTlkMDI0MTRwMgorICB9LAorICB7IC8vIEVudHJ5IDY2NgorICAgIDB4MS5lMThlNjYwYTVlMmZiMzE2ZWNiYjllZDcwMTIyZWZmNXAtMSwKKyAgICAtMHgxLjQzYzYyYTlkMDI0MTRwMgorICB9LAorICB7IC8vIEVudHJ5IDY2NworICAgIC0weDEuZWUwZTgzYTAxOThiNmUyZWY3YzQ4ZTY2MjUyOTFhMGFwLTEsCisgICAgMHgxLjFjOTk2NTQ5NjFmOTJwMgorICB9LAorICB7IC8vIEVudHJ5IDY2OAorICAgIDB4MS5lZTBlODNhMDE5OGI2ZTJlZjdjNDhlNjYyNTI5MWEwYXAtMSwKKyAgICAtMHgxLjFjOTk2NTQ5NjFmOTJwMgorICB9LAorICB7IC8vIEVudHJ5IDY2OQorICAgIC0weDEuNDcyNzc0NzMzOGU0NjUzNjE2ZWFkYmQ3ZWMzZDAyZDNwLTEsCisgICAgMHgxLmVhZDkzZmViODM2MWZwMQorICB9LAorICB7IC8vIEVudHJ5IDY3MAorICAgIDB4MS40NzI3NzQ3MzM4ZTQ2NTM2MTZlYWRiZDdlYzNkMDJkM3AtMSwKKyAgICAtMHgxLmVhZDkzZmViODM2MWZwMQorICB9LAorICB7IC8vIEVudHJ5IDY3MQorICAgIC0weDEuNGJhMmY3NWRkYTVmZTQzNDMyMDkwNWE3MTg0ZmYxYWZwLTQsCisgICAgMHgxLjljN2ZiNTQ0NDJkMWFwMQorICB9LAorICB7IC8vIEVudHJ5IDY3MgorICAgIDB4MS40YmEyZjc1ZGRhNWZlNDM0MzIwOTA1YTcxODRmZjFhZnAtNCwKKyAgICAtMHgxLjljN2ZiNTQ0NDJkMWFwMQorICB9LAorICB7IC8vIEVudHJ5IDY3MworICAgIDB4MS4wMzRjNGQ2MzNiNGVmMGE5MDg5YjQzODkyYTQ2MmEyNnAtMSwKKyAgICAweDEuNGUyNjJhOWQwMjQxNXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjc0CisgICAgLTB4MS4wMzRjNGQ2MzNiNGVmMGE5MDg5YjQzODkyYTQ2MmEyNnAtMSwKKyAgICAtMHgxLjRlMjYyYTlkMDI0MTVwMQorICB9LAorICB7IC8vIEVudHJ5IDY3NQorICAgIDB4MS5kMWU0Y2RlMmYzOTQ0ZjRjMTM0YzA1Y2M0ZTUzMzlhM3AtMSwKKyAgICAweDEuZmY5OTNmZWI4MzYyMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjc2CisgICAgLTB4MS5kMWU0Y2RlMmYzOTQ0ZjRjMTM0YzA1Y2M0ZTUzMzlhM3AtMSwKKyAgICAtMHgxLmZmOTkzZmViODM2MjBwMAorICB9LAorICB7IC8vIEVudHJ5IDY3NworICAgIDB4MS5mNzUwMjM1Yzk0OTkyNmM0OGM5MGU0MWE5MTQ3NGMwNnAtMSwKKyAgICAweDEuNjJlNjJhOWQwMjQxNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjc4CisgICAgLTB4MS5mNzUwMjM1Yzk0OTkyNmM0OGM5MGU0MWE5MTQ3NGMwNnAtMSwKKyAgICAtMHgxLjYyZTYyYTlkMDI0MTZwMAorICB9LAorICB7IC8vIEVudHJ5IDY3OQorICAgIDB4MS42NWY3ZDU3MTI3OWIwYjgwMDU1NTJmZDQ3YTJlNzdhZXAtMSwKKyAgICAweDEuOGM2NjJhOWQwMjQxOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY4MAorICAgIC0weDEuNjVmN2Q1NzEyNzliMGI4MDA1NTUyZmQ0N2EyZTc3YWVwLTEsCisgICAgLTB4MS44YzY2MmE5ZDAyNDE5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjgxCisgICAgLTB4MS5mZTA0M2Y1NzM2OWQ2YTUyZmEzM2YwMTE5ZWM0ZGExOXAtMSwKKyAgICAtMHgxLmE4YWExZDExYzQ0ZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDY4MgorICAgIDB4MS5mZTA0M2Y1NzM2OWQ2YTUyZmEzM2YwMTE5ZWM0ZGExOXAtMSwKKyAgICAweDEuYThhYTFkMTFjNDRmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjgzCisgICAgLTB4MS5mZmYxOGYyNGYzZTRiODdiZjhjMzc2MmNiNDRmNDZkNnAtMSwKKyAgICAtMHgxLjk1ZWM4YjllMDNkNTRwMAorICB9LAorICB7IC8vIEVudHJ5IDY4NAorICAgIDB4MS5mZmYxOGYyNGYzZTRiODdiZjhjMzc2MmNiNDRmNDZkNnAtMSwKKyAgICAweDEuOTVlYzhiOWUwM2Q1NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjg1CisgICAgLTB4MS5mZjIwZDk2MTYyNGU3MDYzYTc4MjAzYjgxMWY1NzljYXAtMSwKKyAgICAtMHgxLjgzMmVmYTJhNDM1YTlwMAorICB9LAorICB7IC8vIEVudHJ5IDY4NgorICAgIDB4MS5mZjIwZDk2MTYyNGU3MDYzYTc4MjAzYjgxMWY1NzljYXAtMSwKKyAgICAweDEuODMyZWZhMmE0MzVhOXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjg3CisgICAgLTB4MS5mYjkzM2M0MDEwN2ZkNzc1MTg1YWMxNDkxOGM4ZmJhZnAtMSwKKyAgICAtMHgxLjcwNzE2OGI2ODJkZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDY4OAorICAgIDB4MS5mYjkzM2M0MDEwN2ZkNzc1MTg1YWMxNDkxOGM4ZmJhZnAtMSwKKyAgICAweDEuNzA3MTY4YjY4MmRmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjg5CisgICAgLTB4MS5mNTRkOTcxODgxYWQ2ODViNzgyZWY4OGU2MzUwZjdjZHAtMSwKKyAgICAtMHgxLjVkYjNkNzQyYzI2NTNwMAorICB9LAorICB7IC8vIEVudHJ5IDY5MAorICAgIDB4MS5mNTRkOTcxODgxYWQ2ODViNzgyZWY4OGU2MzUwZjdjZHAtMSwKKyAgICAweDEuNWRiM2Q3NDJjMjY1M3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjkxCisgICAgLTB4MS5lYzU4ODNiN2I2Y2Y0ZDg1OWFiMDRlMTVkNTM2OThjOXAtMSwKKyAgICAtMHgxLjRhZjY0NWNmMDFlYThwMAorICB9LAorICB7IC8vIEVudHJ5IDY5MgorICAgIDB4MS5lYzU4ODNiN2I2Y2Y0ZDg1OWFiMDRlMTVkNTM2OThjOXAtMSwKKyAgICAweDEuNGFmNjQ1Y2YwMWVhOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjkzCisgICAgLTB4MS5lMGMwNGE5NGUxNzMwOWM4MDZjMWM3OGJkZGMxZDYwN3AtMSwKKyAgICAtMHgxLjM4MzhiNDViNDE2ZmRwMAorICB9LAorICB7IC8vIEVudHJ5IDY5NAorICAgIDB4MS5lMGMwNGE5NGUxNzMwOWM4MDZjMWM3OGJkZGMxZDYwN3AtMSwKKyAgICAweDEuMzgzOGI0NWI0MTZmZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjk1CisgICAgLTB4MS5kMjk0ZDFmOTZjN2ViZGI5ODY5ZGQ5N2NmNTc0ZGRiOXAtMSwKKyAgICAtMHgxLjI1N2IyMmU3ODBmNTJwMAorICB9LAorICB7IC8vIEVudHJ5IDY5NgorICAgIDB4MS5kMjk0ZDFmOTZjN2ViZGI5ODY5ZGQ5N2NmNTc0ZGRiOXAtMSwKKyAgICAweDEuMjU3YjIyZTc4MGY1MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjk3CisgICAgLTB4MS5jMWU5ODgzMzczZDdlY2M0OGM5MmRjODg3NTUwNWY3ZXAtMSwKKyAgICAtMHgxLjEyYmQ5MTczYzA3YWJwMAorICB9LAorICB7IC8vIEVudHJ5IDY5OAorICAgIDB4MS5jMWU5ODgzMzczZDdlY2M0OGM5MmRjODg3NTUwNWY3ZXAtMSwKKyAgICAweDEuMTJiZDkxNzNjMDdhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjk5CisgICAgLTB4MS5hMmMyODlkOWQwNTVhYzM3N2Y2N2Q3YTU0YTBiMzAwNXAtMSwKKyAgICAtMHgxLmVhNWMzZWQ1YjM4NTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDAKKyAgICAweDEuYTJjMjg5ZDlkMDU1YWMzNzdmNjdkN2E1NGEwYjMwMDVwLTEsCisgICAgMHgxLmVhNWMzZWQ1YjM4NTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDEKKyAgICAtMHgxLjk1ZjA1MjU3ZGJjYjVmNGIxMjYzNmM1ODc4ZWE0MDVhcC0xLAorICAgIC0weDEuZDRiODdkYWI2NzBhMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwMgorICAgIDB4MS45NWYwNTI1N2RiY2I1ZjRiMTI2MzZjNTg3OGVhNDA1YXAtMSwKKyAgICAweDEuZDRiODdkYWI2NzBhMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwMworICAgIC0weDEuODg2NDdmMjZhNmUwZjZiMjcxNWE2YzM3OTdlYzExZjVwLTEsCisgICAgLTB4MS5iZjE0YmM4MTFhOGYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzA0CisgICAgMHgxLjg4NjQ3ZjI2YTZlMGY2YjI3MTVhNmMzNzk3ZWMxMWY1cC0xLAorICAgIDB4MS5iZjE0YmM4MTFhOGYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzA1CisgICAgLTB4MS43YTI1NDFkZmQ0ZTc1MmRlMzhmMDRhYmEyMWZjOWQ5ZnAtMSwKKyAgICAtMHgxLmE5NzBmYjU2Y2UxNDBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDYKKyAgICAweDEuN2EyNTQxZGZkNGU3NTJkZTM4ZjA0YWJhMjFmYzlkOWZwLTEsCisgICAgMHgxLmE5NzBmYjU2Y2UxNDBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDcKKyAgICAtMHgxLjZiMzkxZTI1YmMyNmNiYmNmN2EwMTg0MDcwYWY5YzM5cC0xLAorICAgIC0weDEuOTNjZDNhMmM4MTk5MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwOAorICAgIDB4MS42YjM5MWUyNWJjMjZjYmJjZjdhMDE4NDA3MGFmOWMzOXAtMSwKKyAgICAweDEuOTNjZDNhMmM4MTk5MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcwOQorICAgIC0weDEuNWJhNmU2YThlNzA2NTM1Yjk4ZmM5OWRmYWVmODI0ZjFwLTEsCisgICAgLTB4MS43ZTI5NzkwMjM1MWUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzEwCisgICAgMHgxLjViYTZlNmE4ZTcwNjUzNWI5OGZjOTlkZmFlZjgyNGYxcC0xLAorICAgIDB4MS43ZTI5NzkwMjM1MWUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzExCisgICAgLTB4MS40Yjc1YmEwOTZmYTU0OWViOTM1OTVkODE5NGFiOTE3ZnAtMSwKKyAgICAtMHgxLjY4ODViN2Q3ZThhMzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTIKKyAgICAweDEuNGI3NWJhMDk2ZmE1NDllYjkzNTk1ZDgxOTRhYjkxN2ZwLTEsCisgICAgMHgxLjY4ODViN2Q3ZThhMzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTMKKyAgICAtMHgxLjNhYWNmZjk1YTMxMjJiMTVmMzcyYmZkMmZkZjlhNzVmcC0xLAorICAgIC0weDEuNTJlMWY2YWQ5YzI4MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxNAorICAgIDB4MS4zYWFjZmY5NWEzMTIyYjE1ZjM3MmJmZDJmZGY5YTc1ZnAtMSwKKyAgICAweDEuNTJlMWY2YWQ5YzI4MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxNQorICAgIC0weDEuMjk1NDYzZTc2OTI4NGE1YWVkMTdhNDQzMzkyZjM4ZjNwLTEsCisgICAgLTB4MS4zZDNlMzU4MzRmYWQwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE2CisgICAgMHgxLjI5NTQ2M2U3NjkyODRhNWFlZDE3YTQ0MzM5MmYzOGYzcC0xLAorICAgIDB4MS4zZDNlMzU4MzRmYWQwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE3CisgICAgLTB4MS5mYzc2OWI3N2U1ODg0OTVhNmY2NDJjYTI0ZTRlZDNmY3AtMiwKKyAgICAtMHgxLjBhMGIwMjUwMWM3OTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTgKKyAgICAweDEuZmM3NjliNzdlNTg4NDk1YTZmNjQyY2EyNGU0ZWQzZmNwLTIsCisgICAgMHgxLjBhMGIwMjUwMWM3OTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTkKKyAgICAtMHgxLmM4NTNjNzg0NjJkZTQ2YjU3NDMzMTU2MTJmOGI1YTdjcC0yLAorICAgIC0weDEuZDhmNzIwOGU2YjgyY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDcyMAorICAgIDB4MS5jODUzYzc4NDYyZGU0NmI1NzQzMzE1NjEyZjhiNWE3Y3AtMiwKKyAgICAweDEuZDhmNzIwOGU2YjgyY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDcyMQorICAgIC0weDEuOTJhYmE5MGFhZjI3MjQ5ZGU0OWM3OGZjNjQzYzhiNzJwLTIsCisgICAgLTB4MS45ZGQ4M2M3YzllMTI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzIyCisgICAgMHgxLjkyYWJhOTBhYWYyNzI0OWRlNDljNzhmYzY0M2M4YjcycC0yLAorICAgIDB4MS45ZGQ4M2M3YzllMTI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzIzCisgICAgLTB4MS41YmFjMDY0NjU4ZjM5NDYwYzgzMTEzYzBhMDA5N2EwY3AtMiwKKyAgICAtMHgxLjYyYjk1ODZhZDBhMjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjQKKyAgICAweDEuNWJhYzA2NDY1OGYzOTQ2MGM4MzExM2MwYTAwOTdhMGNwLTIsCisgICAgMHgxLjYyYjk1ODZhZDBhMjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjUKKyAgICAtMHgxLjIzODNjYTgwNzhlNTg0NzdjZDVmYjFkOWRlMDMxZGNlcC0yLAorICAgIC0weDEuMjc5YTc0NTkwMzMxYXAtMgorICB9LAorICB7IC8vIEVudHJ5IDcyNgorICAgIDB4MS4yMzgzY2E4MDc4ZTU4NDc3Y2Q1ZmIxZDlkZTAzMWRjZXAtMiwKKyAgICAweDEuMjc5YTc0NTkwMzMxYXAtMgorICB9LAorICB7IC8vIEVudHJ5IDcyNworICAgIC0weDEuZDRjNWJjMTFkMjM3MWFmMmZlMjVlZjVlZGUyNzY2YTNwLTMsCisgICAgLTB4MS5kOGY3MjA4ZTZiODI5cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzI4CisgICAgMHgxLmQ0YzViYzExZDIzNzFhZjJmZTI1ZWY1ZWRlMjc2NmEzcC0zLAorICAgIDB4MS5kOGY3MjA4ZTZiODI5cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzI5CisgICAgLTB4MS42MGYzZmFhZjQzMDIzZDNjNzg2M2FlMDZkNGQ1OTc3NHAtMywKKyAgICAtMHgxLjYyYjk1ODZhZDBhMWVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzAKKyAgICAweDEuNjBmM2ZhYWY0MzAyM2QzYzc4NjNhZTA2ZDRkNTk3NzRwLTMsCisgICAgMHgxLjYyYjk1ODZhZDBhMWVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzEKKyAgICAtMHgxLmQ3ZWEzZGU0NWE5ZDY1NjNhYzAwNWMwYzViYWQ4YzUwcC00LAorICAgIC0weDEuZDhmNzIwOGU2YjgyNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDczMgorICAgIDB4MS5kN2VhM2RlNDVhOWQ2NTYzYWMwMDVjMGM1YmFkOGM1MHAtNCwKKyAgICAweDEuZDhmNzIwOGU2YjgyNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDczMworICAgIC0weDEuZDhiM2RmNDg5OTg3YTZmZTBlZWFkMDA4ZTcyMGFhMjJwLTUsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJkcC01CisgIH0sCisgIHsgLy8gRW50cnkgNzM0CisgICAgMHgxLmQ4YjNkZjQ4OTk4N2E2ZmUwZWVhZDAwOGU3MjBhYTIycC01LAorICAgIDB4MS5kOGY3MjA4ZTZiODJkcC01CisgIH0sCisgIHsgLy8gRW50cnkgNzM1CisgICAgMHgxLmQ4YjNkZjQ4OTk4N2E2ZmUwZWVhZDAwOGU3MjBhYTIycC01LAorICAgIDB4MS5kOGY3MjA4ZTZiODJkcC01CisgIH0sCisgIHsgLy8gRW50cnkgNzM2CisgICAgLTB4MS5kOGIzZGY0ODk5ODdhNmZlMGVlYWQwMDhlNzIwYWEyMnAtNSwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzcKKyAgICAweDEuZDdlYTNkZTQ1YTlkZDRhNGJjY2QxYThjMDQ4ZmFmNGNwLTQsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzgKKyAgICAtMHgxLmQ3ZWEzZGU0NWE5ZGQ0YTRiY2NkMWE4YzA0OGZhZjRjcC00LAorICAgIC0weDEuZDhmNzIwOGU2YjgyZHAtNAorICB9LAorICB7IC8vIEVudHJ5IDczOQorICAgIDB4MS42MGYzZmFhZjQzMDI3YzQ3NTJmNTY0ZjlkMDgxOGZlOHAtMywKKyAgICAweDEuNjJiOTU4NmFkMGEyMnAtMworICB9LAorICB7IC8vIEVudHJ5IDc0MAorICAgIC0weDEuNjBmM2ZhYWY0MzAyN2M0NzUyZjU2NGY5ZDA4MThmZThwLTMsCisgICAgLTB4MS42MmI5NTg2YWQwYTIycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzQxCisgICAgMHgxLmQ0YzViYzExZDIzNzU5NDAwNjQyZTVhMWVmZGMwZjg1cC0zLAorICAgIDB4MS5kOGY3MjA4ZTZiODJkcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzQyCisgICAgLTB4MS5kNGM1YmMxMWQyMzc1OTQwMDY0MmU1YTFlZmRjMGY4NXAtMywKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDMKKyAgICAweDEuMjM4M2NhODA3OGU1YTMyNGQ1MmMxNTMwNzQyY2Q0ZjVwLTIsCisgICAgMHgxLjI3OWE3NDU5MDMzMWNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDQKKyAgICAtMHgxLjIzODNjYTgwNzhlNWEzMjRkNTJjMTUzMDc0MmNkNGY1cC0yLAorICAgIC0weDEuMjc5YTc0NTkwMzMxY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDc0NQorICAgIDB4MS41YmFjMDY0NjU4ZjNiMjdhMjg1NzJiZWEyNTYxOTVlZnAtMiwKKyAgICAweDEuNjJiOTU4NmFkMGEyMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDc0NgorICAgIC0weDEuNWJhYzA2NDY1OGYzYjI3YTI4NTcyYmVhMjU2MTk1ZWZwLTIsCisgICAgLTB4MS42MmI5NTg2YWQwYTIycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzQ3CisgICAgMHgxLjkyYWJhOTBhYWYyNzQyMDllZmFlZDA4ZTM0MDcxZTNicC0yLAorICAgIDB4MS45ZGQ4M2M3YzllMTI4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzQ4CisgICAgLTB4MS45MmFiYTkwYWFmMjc0MjA5ZWZhZWQwOGUzNDA3MWUzYnAtMiwKKyAgICAtMHgxLjlkZDgzYzdjOWUxMjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDkKKyAgICAweDEuYzg1M2M3ODQ2MmRlNjM1YjEwYTJiOTNhZmQ3NWRhMjZwLTIsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTAKKyAgICAtMHgxLmM4NTNjNzg0NjJkZTYzNWIxMGEyYjkzYWZkNzVkYTI2cC0yLAorICAgIC0weDEuZDhmNzIwOGU2YjgyZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDc1MQorICAgIDB4MS5mYzc2OWI3N2U1ODg0OTVhNmY2NDJjYTI0ZTRlZDNmY3AtMiwKKyAgICAweDEuMGEwYjAyNTAxYzc5OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDc1MgorICAgIC0weDEuZmM3NjliNzdlNTg4NDk1YTZmNjQyY2EyNGU0ZWQzZmNwLTIsCisgICAgLTB4MS4wYTBiMDI1MDFjNzk5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzUzCisgICAgMHgxLjI5NTQ2M2U3NjkyODE2NDBhZTAyNmY1MGZjNDVlMzAxcC0xLAorICAgIDB4MS4zZDNlMzU4MzRmYWNjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzU0CisgICAgLTB4MS4yOTU0NjNlNzY5MjgxNjQwYWUwMjZmNTBmYzQ1ZTMwMXAtMSwKKyAgICAtMHgxLjNkM2UzNTgzNGZhY2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTUKKyAgICAweDEuM2FhY2ZmOTVhMzExZjg5OWEwZTI3OTUzNWU4MWM0ZWNwLTEsCisgICAgMHgxLjUyZTFmNmFkOWMyN2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTYKKyAgICAtMHgxLjNhYWNmZjk1YTMxMWY4OTlhMGUyNzk1MzVlODFjNGVjcC0xLAorICAgIC0weDEuNTJlMWY2YWQ5YzI3Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc1NworICAgIDB4MS40Yjc1YmEwOTZmYTUxOTI0NDJiNzk1MGY5NjBmODAwNnAtMSwKKyAgICAweDEuNjg4NWI3ZDdlOGEyY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc1OAorICAgIC0weDEuNGI3NWJhMDk2ZmE1MTkyNDQyYjc5NTBmOTYwZjgwMDZwLTEsCisgICAgLTB4MS42ODg1YjdkN2U4YTJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzU5CisgICAgMHgxLjViYTZlNmE4ZTcwNjI0NWY5N2UyOGFmM2RkYjcwMGY2cC0xLAorICAgIDB4MS43ZTI5NzkwMjM1MWRjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzYwCisgICAgLTB4MS41YmE2ZTZhOGU3MDYyNDVmOTdlMjhhZjNkZGI3MDBmNnAtMSwKKyAgICAtMHgxLjdlMjk3OTAyMzUxZGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjEKKyAgICAweDEuNmIzOTFlMjViYzI2OWVhMWMxYTQwZGU2MmZiYzAzYjRwLTEsCisgICAgMHgxLjkzY2QzYTJjODE5OGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjIKKyAgICAtMHgxLjZiMzkxZTI1YmMyNjllYTFjMWE0MGRlNjJmYmMwM2I0cC0xLAorICAgIC0weDEuOTNjZDNhMmM4MTk4Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc2MworICAgIDB4MS43YTI1NDFkZmQ0ZTcyN2I4NmRkMzA5NjY0MTg2ZWM2YnAtMSwKKyAgICAweDEuYTk3MGZiNTZjZTEzY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc2NAorICAgIC0weDEuN2EyNTQxZGZkNGU3MjdiODZkZDMwOTY2NDE4NmVjNmJwLTEsCisgICAgLTB4MS5hOTcwZmI1NmNlMTNjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzY1CisgICAgMHgxLjg4NjQ3ZjI2YTZlMGNkOTVjYjk5MWY3ZmZlNjFhMDJlcC0xLAorICAgIDB4MS5iZjE0YmM4MTFhOGVjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzY2CisgICAgLTB4MS44ODY0N2YyNmE2ZTBjZDk1Y2I5OTFmN2ZmZTYxYTAyZXAtMSwKKyAgICAtMHgxLmJmMTRiYzgxMWE4ZWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjcKKyAgICAweDEuOTVmMDUyNTdkYmNiMzg0YTVlMzI2ODU3Mzc2ZGQ4MDFwLTEsCisgICAgMHgxLmQ0Yjg3ZGFiNjcwOWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjgKKyAgICAtMHgxLjk1ZjA1MjU3ZGJjYjM4NGE1ZTMyNjg1NzM3NmRkODAxcC0xLAorICAgIC0weDEuZDRiODdkYWI2NzA5Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc2OQorICAgIDB4MS5hMmMyODlkOWQwNTU4NzY0OTIxYTRkZTM1NWY5NDQ4Y3AtMSwKKyAgICAweDEuZWE1YzNlZDViMzg0Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDc3MAorICAgIC0weDEuYTJjMjg5ZDlkMDU1ODc2NDkyMWE0ZGUzNTVmOTQ0OGNwLTEsCisgICAgLTB4MS5lYTVjM2VkNWIzODRjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzcxCisgICAgMHgxLmMxZTk4ODMzNzNkN2VjYzQ4YzkyZGM4ODc1NTA1ZjdlcC0xLAorICAgIDB4MS4xMmJkOTE3M2MwN2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzIKKyAgICAtMHgxLmMxZTk4ODMzNzNkN2VjYzQ4YzkyZGM4ODc1NTA1ZjdlcC0xLAorICAgIC0weDEuMTJiZDkxNzNjMDdhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzczCisgICAgMHgxLmQyOTRkMWY5NmM3ZWYyNmUyMDNjNWIzMDlhNTU2NzFmcC0xLAorICAgIDB4MS4yNTdiMjJlNzgwZjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzQKKyAgICAtMHgxLmQyOTRkMWY5NmM3ZWYyNmUyMDNjNWIzMDlhNTU2NzFmcC0xLAorICAgIC0weDEuMjU3YjIyZTc4MGY1NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzc1CisgICAgMHgxLmUwYzA0YTk0ZTE3MzM1ZDA3MzA1MmEwMzk0YjllMWMzcC0xLAorICAgIDB4MS4zODM4YjQ1YjQxNzAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzYKKyAgICAtMHgxLmUwYzA0YTk0ZTE3MzM1ZDA3MzA1MmEwMzk0YjllMWMzcC0xLAorICAgIC0weDEuMzgzOGI0NWI0MTcwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzc3CisgICAgMHgxLmVjNTg4M2I3YjZjZjcwYTU3N2RkOTE2MGQwZjhlOWQ1cC0xLAorICAgIDB4MS40YWY2NDVjZjAxZWFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzgKKyAgICAtMHgxLmVjNTg4M2I3YjZjZjcwYTU3N2RkOTE2MGQwZjhlOWQ1cC0xLAorICAgIC0weDEuNGFmNjQ1Y2YwMWVhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNzc5CisgICAgMHgxLmY1NGQ5NzE4ODFhZDgyNjI5YmQ4NGQyMTQxOTRlOGRkcC0xLAorICAgIDB4MS41ZGIzZDc0MmMyNjU3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODAKKyAgICAtMHgxLmY1NGQ5NzE4ODFhZDgyNjI5YmQ4NGQyMTQxOTRlOGRkcC0xLAorICAgIC0weDEuNWRiM2Q3NDJjMjY1N3AwCisgIH0sCisgIHsgLy8gRW50cnkgNzgxCisgICAgMHgxLmZiOTMzYzQwMTA3ZmU4M2ZkMTZjMTc4OWUyN2Y2OWY3cC0xLAorICAgIDB4MS43MDcxNjhiNjgyZTAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODIKKyAgICAtMHgxLmZiOTMzYzQwMTA3ZmU4M2ZkMTZjMTc4OWUyN2Y2OWY3cC0xLAorICAgIC0weDEuNzA3MTY4YjY4MmUwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzgzCisgICAgMHgxLmZmMjBkOTYxNjI0ZTc3ZGFlZjMyOWI0MDI5YzM2MmRlcC0xLAorICAgIDB4MS44MzJlZmEyYTQzNWFkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODQKKyAgICAtMHgxLmZmMjBkOTYxNjI0ZTc3ZGFlZjMyOWI0MDI5YzM2MmRlcC0xLAorICAgIC0weDEuODMyZWZhMmE0MzVhZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzg1CisgICAgMHgxLmZmZjE4ZjI0ZjNlNGI2OTU5MjI5NGYyMDZkN2IzMmMycC0xLAorICAgIDB4MS45NWVjOGI5ZTAzZDU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODYKKyAgICAtMHgxLmZmZjE4ZjI0ZjNlNGI2OTU5MjI5NGYyMDZkN2IzMmMycC0xLAorICAgIC0weDEuOTVlYzhiOWUwM2Q1OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzg3CisgICAgMHgxLmZlMDQzZjU3MzY5ZDZhNTJmYTMzZjAxMTllYzRkYTE5cC0xLAorICAgIDB4MS5hOGFhMWQxMWM0NGZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODgKKyAgICAtMHgxLmZlMDQzZjU3MzY5ZDZhNTJmYTMzZjAxMTllYzRkYTE5cC0xLAorICAgIC0weDEuYThhYTFkMTFjNDRmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzg5CisgICAgMHgxLmIzZDM2OTVhY2M0MTM2YjJkNDQ3MTRmOWIzODQxOWI0cC0xLAorICAgIDB4MS4wNGFmZjZkMzMwOTQycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTAKKyAgICAtMHgxLmIzZDM2OTVhY2M0MTM2YjJkNDQ3MTRmOWIzODQxOWI0cC0xLAorICAgIC0weDEuMDRhZmY2ZDMzMDk0MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzkxCisgICAgMHgxLmIzZDQxOTcyZGM4MDYzOTk0ZjYzNDEzZDVlNGQ4ZTRicC0xLAorICAgIDB4MS4wNGIwOWU5OGRjZGI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTIKKyAgICAtMHgxLmIzZDQxOTcyZGM4MDYzOTk0ZjYzNDEzZDVlNGQ4ZTRicC0xLAorICAgIC0weDEuMDRiMDllOThkY2RiNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzkzCisgICAgMHgxLmIzZDRjOThhMzE4ZmI2NmY4MjFkNzI4NmFlN2RjZTdicC0xLAorICAgIDB4MS4wNGIxNDY1ZTg5MjI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTQKKyAgICAtMHgxLmIzZDRjOThhMzE4ZmI2NmY4MjFkNzI4NmFlN2RjZTdicC0xLAorICAgIC0weDEuMDRiMTQ2NWU4OTIyNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzk1CisgICAgMHgxLmIzZDU3OWEwY2I2ZWUzOTNmZjc1YjU4ZmZlMTZkMTNmcC0xLAorICAgIDB4MS4wNGIxZWUyNDM1Njk4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTYKKyAgICAtMHgxLmIzZDU3OWEwY2I2ZWUzOTNmZjc1YjU4ZmZlMTZkMTNmcC0xLAorICAgIC0weDEuMDRiMWVlMjQzNTY5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzk3CisgICAgMHgxLmIzZDYyOWI2YWExZDlmNjVhYWQxYTJmYzkzMmM4YmNicC0xLAorICAgIDB4MS4wNGIyOTVlOWUxYjBhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTgKKyAgICAtMHgxLmIzZDYyOWI2YWExZDlmNjVhYWQxYTJmYzkzMmM4YmNicC0xLAorICAgIC0weDEuMDRiMjk1ZTllMWIwYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzk5CisgICAgMHgxLmIzZDZkOWNiY2Q5YjllNDNiN2ZjN2ZkNDI4YTQ0ZGQ4cC0xLAorICAgIDB4MS4wNGIzM2RhZjhkZjdjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDAKKyAgICAtMHgxLmIzZDZkOWNiY2Q5YjllNDNiN2ZjN2ZkNDI4YTQ0ZGQ4cC0xLAorICAgIC0weDEuMDRiMzNkYWY4ZGY3Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgODAxCisgICAgMHgxLmIzZDc4OWUwMzVlODk0OGRhYjI3NWRmZTU0NmM1YjA4cC0xLAorICAgIDB4MS4wNGIzZTU3NTNhM2VlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDIKKyAgICAtMHgxLmIzZDc4OWUwMzVlODk0OGRhYjI3NWRmZTU0NmM1YjA4cC0xLAorICAgIC0weDEuMDRiM2U1NzUzYTNlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgODAzCisgICAgMHgxLmIzZDgzOWYzZTMwNDM2YTM1OGU5M2NiZGNiMmJiMzY3cC0xLAorICAgIDB4MS4wNGI0OGQzYWU2ODYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDQKKyAgICAtMHgxLmIzZDgzOWYzZTMwNDM2YTM1OGU5M2NiZGNiMmJiMzY3cC0xLAorICAgIC0weDEuMDRiNDhkM2FlNjg2MHAwCisgIH0sCisgIHsgLy8gRW50cnkgODA1CisgICAgMHgxLmIzZDhlYTA2ZDRlZTA2ODRmNTc0MWVjNzc3ZWQ4OGUwcC0xLAorICAgIDB4MS4wNGI1MzUwMDkyY2NmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDYKKyAgICAtMHgxLmIzZDhlYTA2ZDRlZTA2ODRmNTc0MWVjNzc3ZWQ4OGUwcC0xLAorICAgIC0weDEuMDRiNTM1MDA5MmNjZnAwCisgIH0sCisgIHsgLy8gRW50cnkgODA3CisgICAgLTAuMCwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDgKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDkKKyAgICAtMC4wLAorICAgIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTAKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTEKKyAgICAtMC4wLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDgxMgorICAgIDB4MS4xNzczZDU2MWZkNTA2NWQwZTk2MDdhNzI4YTM5ZWVkMnAtMSwKKyAgICAweDEuMjc5YTc0NTkwMzMxYnAtMQorICB9LAorICB7IC8vIEVudHJ5IDgxMworICAgIC0weDEuMTc3M2Q1NjFmZDUwNjVkMGU5NjA3YTcyOGEzOWVlZDJwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFicC0xCisgIH0sCisgIHsgLy8gRW50cnkgODE0CisgICAgMHgxLjE3NzNkNTYxZmQ1MDczMzhmZjljMDg4ZDgwYzY4MGRicC0xLAorICAgIDB4MS4yNzlhNzQ1OTAzMzFjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODE1CisgICAgLTB4MS4xNzczZDU2MWZkNTA3MzM4ZmY5YzA4OGQ4MGM2ODBkYnAtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTYKKyAgICAweDEuMTc3M2Q1NjFmZDUwODBhMTE1ZDc5NmE4NzcwZDM1ZWZwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTcKKyAgICAtMHgxLjE3NzNkNTYxZmQ1MDgwYTExNWQ3OTZhODc3MGQzNWVmcC0xLAorICAgIC0weDEuMjc5YTc0NTkwMzMxZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDgxOAorICAgIDB4MS5mOTViOGU3MTA3NDE4YzExYzk0ZDRhNTRhOWRhOWI3YXAtMSwKKyAgICAweDEuYmI2N2FlODU4NGNhOXAwCisgIH0sCisgIHsgLy8gRW50cnkgODE5CisgICAgLTB4MS5mOTViOGU3MTA3NDE4YzExYzk0ZDRhNTRhOWRhOWI3YXAtMSwKKyAgICAtMHgxLmJiNjdhZTg1ODRjYTlwMAorICB9LAorICB7IC8vIEVudHJ5IDgyMAorICAgIDB4MS5mOTViOGU3MTA3NDE4NmVlODFkNWZmODlkOGZhZTU0NXAtMSwKKyAgICAweDEuYmI2N2FlODU4NGNhYXAwCisgIH0sCisgIHsgLy8gRW50cnkgODIxCisgICAgLTB4MS5mOTViOGU3MTA3NDE4NmVlODFkNWZmODlkOGZhZTU0NXAtMSwKKyAgICAtMHgxLmJiNjdhZTg1ODRjYWFwMAorICB9LAorICB7IC8vIEVudHJ5IDgyMgorICAgIDB4MS5mOTViOGU3MTA3NDE4MWNiM2E1ZWI0YmYwNjIxZDM4MXAtMSwKKyAgICAweDEuYmI2N2FlODU4NGNhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgODIzCisgICAgLTB4MS5mOTViOGU3MTA3NDE4MWNiM2E1ZWI0YmYwNjIxZDM4MXAtMSwKKyAgICAtMHgxLmJiNjdhZTg1ODRjYWJwMAorICB9LAorICB7IC8vIEVudHJ5IDgyNAorICAgIDB4MS5iMWQ4MzA1MzIxNjE1YWM5MzhjZmYwMmJlOWYyNTA4NXAtMiwKKyAgICAweDEuYmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDgyNQorICAgIC0weDEuYjFkODMwNTMyMTYxNWFjOTM4Y2ZmMDJiZTlmMjUwODVwLTIsCisgICAgLTB4MS5iZmZmZmZmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgODI2CisgICAgMHgxLmIxZDgzMDUzMjE2MTY5NDc2ZjRkMTk4MmI5YjE0YWIxcC0yLAorICAgIDB4MS5jcC0yCisgIH0sCisgIHsgLy8gRW50cnkgODI3CisgICAgLTB4MS5iMWQ4MzA1MzIxNjE2OTQ3NmY0ZDE5ODJiOWIxNGFiMXAtMiwKKyAgICAtMHgxLmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjgKKyAgICAweDEuYjFkODMwNTMyMTYxNzdjNWE1Y2E0MmQ5ODk1NTI3NWFwLTIsCisgICAgMHgxLmMwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjkKKyAgICAtMHgxLmIxZDgzMDUzMjE2MTc3YzVhNWNhNDJkOTg5NTUyNzVhcC0yLAorICAgIC0weDEuYzAwMDAwMDAwMDAwMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDgzMAorICAgIDB4MS40NGViMzgxY2YzODY5ZWE3MWNjYjM2ODYzZTRlYTY1YnAtMSwKKyAgICAweDEuNWZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDgzMQorICAgIC0weDEuNDRlYjM4MWNmMzg2OWVhNzFjY2IzNjg2M2U0ZWE2NWJwLTEsCisgICAgLTB4MS41ZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODMyCisgICAgMHgxLjQ0ZWIzODFjZjM4NmFiMDRhNGY4NjU2YWJlYTgwYjgzcC0xLAorICAgIDB4MS42cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODMzCisgICAgLTB4MS40NGViMzgxY2YzODZhYjA0YTRmODY1NmFiZWE4MGI4M3AtMSwKKyAgICAtMHgxLjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzQKKyAgICAweDEuNDRlYjM4MWNmMzg2Yjc2MjJkMjU5NDRmM2ViMDM1ZGNwLTEsCisgICAgMHgxLjYwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzUKKyAgICAtMHgxLjQ0ZWIzODFjZjM4NmI3NjIyZDI1OTQ0ZjNlYjAzNWRjcC0xLAorICAgIC0weDEuNjAwMDAwMDAwMDAwMXAtMQorICB9LAorICB7IC8vIEVudHJ5IDgzNgorICAgIDB4MS5kYWQ5MDJmYThhYzg2NGZkOGFmYTBiZGM2MDlkZWQxOXAtMSwKKyAgICAweDEuMmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgODM3CisgICAgLTB4MS5kYWQ5MDJmYThhYzg2NGZkOGFmYTBiZGM2MDlkZWQxOXAtMSwKKyAgICAtMHgxLjJmZmZmZmZmZmZmZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDgzOAorICAgIDB4MS5kYWQ5MDJmYThhYzg3MGY1MmYxYjg0M2FjODNiYzNlZHAtMSwKKyAgICAweDEuM3AwCisgIH0sCisgIHsgLy8gRW50cnkgODM5CisgICAgLTB4MS5kYWQ5MDJmYThhYzg3MGY1MmYxYjg0M2FjODNiYzNlZHAtMSwKKyAgICAtMHgxLjNwMAorICB9LAorICB7IC8vIEVudHJ5IDg0MAorICAgIDB4MS5kYWQ5MDJmYThhYzg3Y2VjZDMzY2ZjOTkyZGZlYzFiZXAtMSwKKyAgICAweDEuMzAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgODQxCisgICAgLTB4MS5kYWQ5MDJmYThhYzg3Y2VjZDMzY2ZjOTkyZGZlYzFiZXAtMSwKKyAgICAtMHgxLjMwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDg0MgorICAgIDB4MS40YjcwN2E3YWNkZWNmOTBhMTg4ZDAyMzBmYWQzYWQ1OHAtMSwKKyAgICAweDEuMzdmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgODQzCisgICAgLTB4MS40YjcwN2E3YWNkZWNmOTBhMTg4ZDAyMzBmYWQzYWQ1OHAtMSwKKyAgICAtMHgxLjM3ZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDg0NAorICAgIDB4MS40YjcwN2E3YWNkZWNjODQyMzk0NjNlNzhiMzEyZmExMHAtMSwKKyAgICAweDEuMzgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDUKKyAgICAtMHgxLjRiNzA3YTdhY2RlY2M4NDIzOTQ2M2U3OGIzMTJmYTEwcC0xLAorICAgIC0weDEuMzgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDYKKyAgICAweDEuNGI3MDdhN2FjZGVjOTc3YTU5ZmY3YWMwNjYyNDg0ZGRwLTEsCisgICAgMHgxLjM4MDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDg0NworICAgIC0weDEuNGI3MDdhN2FjZGVjOTc3YTU5ZmY3YWMwNjYyNDg0ZGRwLTEsCisgICAgLTB4MS4zODAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDgKKyAgICAweDEuMDY2ZTdlYjc2ZjVjNjY3OGZkODMyNWE4MWYxOTI1YzZwLTQsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDkKKyAgICAtMHgxLjA2NmU3ZWI3NmY1YzY2NzhmZDgzMjVhODFmMTkyNWM2cC00LAorICAgIC0weDEuMDY5YzhiNDZiMzc5MnAtNAorICB9LAorICB7IC8vIEVudHJ5IDg1MAorICAgIDB4MS4wNWU0NzYxYWI4ZDhmMGE3ZGJhODM0MDAwZjIzNjY1MHAtMywKKyAgICAweDEuMDY5YzhiNDZiMzc5MnAtMworICB9LAorICB7IC8vIEVudHJ5IDg1MQorICAgIC0weDEuMDVlNDc2MWFiOGQ4ZjBhN2RiYTgzNDAwMGYyMzY2NTBwLTMsCisgICAgLTB4MS4wNjljOGI0NmIzNzkycC0zCisgIH0sCisgIHsgLy8gRW50cnkgODUyCisgICAgMHgxLjg3N2UyY2Q0ZjZmZDliYTQ5OGUzMjcwNTMwMzI3MzRmcC0zLAorICAgIDB4MS44OWVhZDBlYTBkMzVicC0zCisgIH0sCisgIHsgLy8gRW50cnkgODUzCisgICAgLTB4MS44NzdlMmNkNGY2ZmQ5YmE0OThlMzI3MDUzMDMyNzM0ZnAtMywKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNWJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTQKKyAgICAweDEuMDNiZTA2Zjk3Y2JlZTQ3Njk4NTM5Zjk3N2NhZGJlN2VwLTIsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTUKKyAgICAtMHgxLjAzYmUwNmY5N2NiZWU0NzY5ODUzOWY5NzdjYWRiZTdlcC0yLAorICAgIC0weDEuMDY5YzhiNDZiMzc5MnAtMgorICB9LAorICB7IC8vIEVudHJ5IDg1NgorICAgIDB4MS40MmFiYmE4YzcyZmJiOGNhOTZmNzlhYTRiYjAzNTg0ZXAtMiwKKyAgICAweDEuNDg0M2FlMTg2MDU3NnAtMgorICB9LAorICB7IC8vIEVudHJ5IDg1NworICAgIC0weDEuNDJhYmJhOGM3MmZiYjhjYTk2Zjc5YWE0YmIwMzU4NGVwLTIsCisgICAgLTB4MS40ODQzYWUxODYwNTc2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgODU4CisgICAgMHgxLjgwNDVmZTY0ZTYyZGMzZDY4NmQ5NzZkN2Q1YTdjNjg5cC0yLAorICAgIDB4MS44OWVhZDBlYTBkMzVhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgODU5CisgICAgLTB4MS44MDQ1ZmU2NGU2MmRjM2Q2ODZkOTc2ZDdkNWE3YzY4OXAtMiwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjAKKyAgICAweDEuYmM0YzA0ZDcxYWJiZWVhNWFiMDY0ZWNmYmY1NGM2MTNwLTIsCisgICAgMHgxLmNiOTFmM2JiYmExM2VwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjEKKyAgICAtMHgxLmJjNGMwNGQ3MWFiYmVlYTVhYjA2NGVjZmJmNTRjNjEzcC0yLAorICAgIC0weDEuY2I5MWYzYmJiYTEzZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDg2MgorICAgIDB4MS5mNjdlYTk3NWI4NmEwMTUxMGU2YmRlMzc3ODEzODkzNHAtMiwKKyAgICAweDEuMDY5YzhiNDZiMzc5MXAtMQorICB9LAorICB7IC8vIEVudHJ5IDg2MworICAgIC0weDEuZjY3ZWE5NzViODZhMDE1MTBlNmJkZTM3NzgxMzg5MzRwLTIsCisgICAgLTB4MS4wNjljOGI0NmIzNzkxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODY0CisgICAgMHgxLjE3NTA1OWJmMGQ0MjUyNGVjYjBiZjQyNDNiNTU5NzNkcC0xLAorICAgIDB4MS4yNzcwMWNhZjg5ZTgzcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODY1CisgICAgLTB4MS4xNzUwNTliZjBkNDI1MjRlY2IwYmY0MjQzYjU1OTczZHAtMSwKKyAgICAtMHgxLjI3NzAxY2FmODllODNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjYKKyAgICAweDEuMzIzYjhiMWZiNGJhMjFkZDEyY2NlODIwZTE1NmE0ZmNwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjcKKyAgICAtMHgxLjMyM2I4YjFmYjRiYTIxZGQxMmNjZTgyMGUxNTZhNGZjcC0xLAorICAgIC0weDEuNDg0M2FlMTg2MDU3NXAtMQorICB9LAorICB7IC8vIEVudHJ5IDg2OAorICAgIDB4MS40YmU0OTc5YzVlZmIzMDZjMWE3NzAyNDAzMjg0OWI1MnAtMSwKKyAgICAweDEuNjkxNzNmODEzNmM2N3AtMQorICB9LAorICB7IC8vIEVudHJ5IDg2OQorICAgIC0weDEuNGJlNDk3OWM1ZWZiMzA2YzFhNzcwMjQwMzI4NDliNTJwLTEsCisgICAgLTB4MS42OTE3M2Y4MTM2YzY3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODcwCisgICAgMHgxLjY0MzA4MGQ2N2FjYzEzMzJjNjRhODU2MTJjYWNhZmI5cC0xLAorICAgIDB4MS44OWVhZDBlYTBkMzU5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODcxCisgICAgLTB4MS42NDMwODBkNjdhY2MxMzMyYzY0YTg1NjEyY2FjYWZiOXAtMSwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzIKKyAgICAweDEuN2IwNWI3YjZjNjEyZTViMDhkNWVmZTQ5YTQ2ZTIxYTFwLTEsCisgICAgMHgxLmFhYmU2MjUyZTNhNGJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzMKKyAgICAtMHgxLjdiMDViN2I2YzYxMmU1YjA4ZDVlZmU0OWE0NmUyMWExcC0xLAorICAgIC0weDEuYWFiZTYyNTJlM2E0YnAtMQorICB9LAorICB7IC8vIEVudHJ5IDg3NAorICAgIDB4MS45MDRjMzc1MDVkZTQ4ZmE4ZTc2Mjg3OTYwZmQ0NDU5NHAtMSwKKyAgICAweDEuY2I5MWYzYmJiYTEzZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDg3NQorICAgIC0weDEuOTA0YzM3NTA1ZGU0OGZhOGU3NjI4Nzk2MGZkNDQ1OTRwLTEsCisgICAgLTB4MS5jYjkxZjNiYmJhMTNkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODc2CisgICAgMHgxLmEzZWQ5ZTI1MjkzOGExNGM3OWM1NzU2MzljMTVhOTFkcC0xLAorICAgIDB4MS5lYzY1ODUyNDkwODJmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODc3CisgICAgLTB4MS5hM2VkOWUyNTI5MzhhMTRjNzljNTc1NjM5YzE1YTkxZHAtMSwKKyAgICAtMHgxLmVjNjU4NTI0OTA4MmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzgKKyAgICAweDEuYjVkNTQ1YjEwOWJmOTM1NTk0MDM2Nzk4Y2Y0MGM5YjBwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTFwMAorICB9LAorICB7IC8vIEVudHJ5IDg3OQorICAgIC0weDEuYjVkNTQ1YjEwOWJmOTM1NTk0MDM2Nzk4Y2Y0MGM5YjBwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzNzkxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODAKKyAgICAweDEuYzVmMDU4MjMwZTdmZDE0ZDNlNWUzMTUzNDlmNjk5ZWZwLTEsCisgICAgMHgxLjE3MDY1M2ZiMWViMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDg4MQorICAgIC0weDEuYzVmMDU4MjMwZTdmZDE0ZDNlNWUzMTUzNDlmNjk5ZWZwLTEsCisgICAgLTB4MS4xNzA2NTNmYjFlYjBhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODIKKyAgICAweDEuZDQyZGU0MmRjZTEzNDZhMDNkMWY2YWJmMGViYTkwMjJwLTEsCisgICAgMHgxLjI3NzAxY2FmODllODNwMAorICB9LAorICB7IC8vIEVudHJ5IDg4MworICAgIC0weDEuZDQyZGU0MmRjZTEzNDZhMDNkMWY2YWJmMGViYTkwMjJwLTEsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTgzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODQKKyAgICAweDEuZTA3ZWVlZGExMDljYjUwNGFmY2NhODYwZDRiNWRkMzJwLTEsCisgICAgMHgxLjM3ZDllNTYzZjUxZmNwMAorICB9LAorICB7IC8vIEVudHJ5IDg4NQorICAgIC0weDEuZTA3ZWVlZGExMDljYjUwNGFmY2NhODYwZDRiNWRkMzJwLTEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MWZjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODYKKyAgICAweDEuZWFkNjgzNDkwOWI5MzM3MWZhZjNiZWFkZGJkNjBlZGRwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzVwMAorICB9LAorICB7IC8vIEVudHJ5IDg4NworICAgIC0weDEuZWFkNjgzNDkwOWI5MzM3MWZhZjNiZWFkZGJkNjBlZGRwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNTc1cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODgKKyAgICAweDEuZjMyOWMwNTU4ZTk2N2U0Y2FiNThkMGZhNTcyZDYyZDJwLTEsCisgICAgMHgxLjU4YWQ3NmNjY2I4ZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDg4OQorICAgIC0weDEuZjMyOWMwNTU4ZTk2N2U0Y2FiNThkMGZhNTcyZDYyZDJwLTEsCisgICAgLTB4MS41OGFkNzZjY2NiOGVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTAKKyAgICAweDEuZjk2ZmU0MDVmMWFjNWRjOWNmMzQzNTA4MDY3YmZjYWVwLTEsCisgICAgMHgxLjY5MTczZjgxMzZjNjdwMAorICB9LAorICB7IC8vIEVudHJ5IDg5MQorICAgIC0weDEuZjk2ZmU0MDVmMWFjNWRjOWNmMzQzNTA4MDY3YmZjYWVwLTEsCisgICAgLTB4MS42OTE3M2Y4MTM2YzY3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTIKKyAgICAweDEuZmRhMjU0YzI3YTAxZjQ3ODZjMTQ5ZDZhNzc3OWNjM2FwLTEsCisgICAgMHgxLjc5ODEwODM1YTFmZTBwMAorICB9LAorICB7IC8vIEVudHJ5IDg5MworICAgIC0weDEuZmRhMjU0YzI3YTAxZjQ3ODZjMTQ5ZDZhNzc3OWNjM2FwLTEsCisgICAgLTB4MS43OTgxMDgzNWExZmUwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTQKKyAgICAweDEuZmZiY2E4NDZjNGZjOTk3ZjFhMzgxNDIwMjA4ODg0ZTBwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzNTlwMAorICB9LAorICB7IC8vIEVudHJ5IDg5NQorICAgIC0weDEuZmZiY2E4NDZjNGZjOTk3ZjFhMzgxNDIwMjA4ODg0ZTBwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzU5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTYKKyAgICAweDEuZmZiY2E4NDZjNGZjOWYzMGJmYjQ1OGVmMjA5MWM4ZWVwLTEsCisgICAgMHgxLjlhNTQ5OTllNzg2ZDJwMAorICB9LAorICB7IC8vIEVudHJ5IDg5NworICAgIC0weDEuZmZiY2E4NDZjNGZjOWYzMGJmYjQ1OGVmMjA5MWM4ZWVwLTEsCisgICAgLTB4MS45YTU0OTk5ZTc4NmQycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTgKKyAgICAweDEuZmRhMjU0YzI3YTAyMDU4NzVmMjcxNDM1ZjgyNzE2MGNwLTEsCisgICAgMHgxLmFhYmU2MjUyZTNhNGJwMAorICB9LAorICB7IC8vIEVudHJ5IDg5OQorICAgIC0weDEuZmRhMjU0YzI3YTAyMDU4NzVmMjcxNDM1ZjgyNzE2MGNwLTEsCisgICAgLTB4MS5hYWJlNjI1MmUzYTRicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDAKKyAgICAweDEuZjk2ZmU0MDVmMWFjN2EyNDFlMDJlNThiMGNiZjNhZTdwLTEsCisgICAgMHgxLmJiMjgyYjA3NGVkYzRwMAorICB9LAorICB7IC8vIEVudHJ5IDkwMQorICAgIC0weDEuZjk2ZmU0MDVmMWFjN2EyNDFlMDJlNThiMGNiZjNhZTdwLTEsCisgICAgLTB4MS5iYjI4MmIwNzRlZGM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDIKKyAgICAweDEuZjMyOWMwNTU4ZTk2YTVkNDgyNzJhZDRjNDllYzUzYjhwLTEsCisgICAgMHgxLmNiOTFmM2JiYmExM2RwMAorICB9LAorICB7IC8vIEVudHJ5IDkwMworICAgIC0weDEuZjMyOWMwNTU4ZTk2YTVkNDgyNzJhZDRjNDllYzUzYjhwLTEsCisgICAgLTB4MS5jYjkxZjNiYmJhMTNkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDQKKyAgICAweDEuZWFkNjgzNDkwOWI5NjVmZGM0YjBjZWZmYzBmMjg1YzZwLTEsCisgICAgMHgxLmRiZmJiYzcwMjU0YjZwMAorICB9LAorICB7IC8vIEVudHJ5IDkwNQorICAgIC0weDEuZWFkNjgzNDkwOWI5NjVmZGM0YjBjZWZmYzBmMjg1YzZwLTEsCisgICAgLTB4MS5kYmZiYmM3MDI1NGI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDYKKyAgICAweDEuZTA3ZWVlZGExMDljZjI1ZjQwMGNkNWY0NmFjZWM4ODdwLTEsCisgICAgMHgxLmVjNjU4NTI0OTA4MmZwMAorICB9LAorICB7IC8vIEVudHJ5IDkwNworICAgIC0weDEuZTA3ZWVlZGExMDljZjI1ZjQwMGNkNWY0NmFjZWM4ODdwLTEsCisgICAgLTB4MS5lYzY1ODUyNDkwODJmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDgKKyAgICAweDEuZDQyZGU0MmRjZTEzOGU4OTA5MzllNTZjNDM5ZGVkOTBwLTEsCisgICAgMHgxLmZjY2Y0ZGQ4ZmJiYThwMAorICB9LAorICB7IC8vIEVudHJ5IDkwOQorICAgIC0weDEuZDQyZGU0MmRjZTEzOGU4OTA5MzllNTZjNDM5ZGVkOTBwLTEsCisgICAgLTB4MS5mY2NmNGRkOGZiYmE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTAKKyAgICAweDEuYzVmMDU4MjMwZTgwMTRhYjgzZWNlMGMzYTYzOGMwNzlwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTFwMQorICB9LAorICB7IC8vIEVudHJ5IDkxMQorICAgIC0weDEuYzVmMDU4MjMwZTgwMTRhYjgzZWNlMGMzYTYzOGMwNzlwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzNzkxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTIKKyAgICAweDEuYjVkNTQ1YjEwOWJmY2UzZmM0ZDc3MDAxYWZlMmYyYjZwLTEsCisgICAgMHgxLjBlZDE2ZmEwZTkxNGVwMQorICB9LAorICB7IC8vIEVudHJ5IDkxMworICAgIC0weDEuYjVkNTQ1YjEwOWJmY2UzZmM0ZDc3MDAxYWZlMmYyYjZwLTEsCisgICAgLTB4MS4wZWQxNmZhMGU5MTRlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTQKKyAgICAweDEuYTNlZDllMjUyOTM4ZDkyYTU1NTNiM2MwOWQyYmRkZDNwLTEsCisgICAgMHgxLjE3MDY1M2ZiMWViMGJwMQorICB9LAorICB7IC8vIEVudHJ5IDkxNQorICAgIC0weDEuYTNlZDllMjUyOTM4ZDkyYTU1NTNiM2MwOWQyYmRkZDNwLTEsCisgICAgLTB4MS4xNzA2NTNmYjFlYjBicDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTYKKyAgICAweDEuOTA0YzM3NTA1ZGU0Yjg5NzVkZDI3MzBlMTk2ZGRmYzNwLTEsCisgICAgMHgxLjFmM2IzODU1NTQ0YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDkxNworICAgIC0weDEuOTA0YzM3NTA1ZGU0Yjg5NzVkZDI3MzBlMTk2ZGRmYzNwLTEsCisgICAgLTB4MS4xZjNiMzg1NTU0NGM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTgKKyAgICAweDEuN2IwNWI3YjZjNjEyZmM0ZmRhMzgxMmIxZjEzNDgzODlwLTEsCisgICAgMHgxLjI3NzAxY2FmODllODVwMQorICB9LAorICB7IC8vIEVudHJ5IDkxOQorICAgIC0weDEuN2IwNWI3YjZjNjEyZmM0ZmRhMzgxMmIxZjEzNDgzODlwLTEsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTg1cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjAKKyAgICAweDEuNjQzMDgwZDY3YWNjMTQ2MjA2NzJkZGE2MjQxZWEzMDVwLTEsCisgICAgMHgxLjJmYTUwMTA5YmY4NDJwMQorICB9LAorICB7IC8vIEVudHJ5IDkyMQorICAgIC0weDEuNjQzMDgwZDY3YWNjMTQ2MjA2NzJkZGE2MjQxZWEzMDVwLTEsCisgICAgLTB4MS4yZmE1MDEwOWJmODQycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjIKKyAgICAweDEuNGJlNDk3OWM1ZWZiMTk0ZmM4MmFjMzY3ZmVkZjkzYmNwLTEsCisgICAgMHgxLjM3ZDllNTYzZjUxZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDkyMworICAgIC0weDEuNGJlNDk3OWM1ZWZiMTk0ZmM4MmFjMzY3ZmVkZjkzYmNwLTEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MWZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjQKKyAgICAweDEuMzIzYjhiMWZiNGI5ZWZlNTA3NWVkZTgwNDlhODVjM2RwLTEsCisgICAgMHgxLjQwMGVjOWJlMmFiYmNwMQorICB9LAorICB7IC8vIEVudHJ5IDkyNQorICAgIC0weDEuMzIzYjhiMWZiNGI5ZWZlNTA3NWVkZTgwNDlhODVjM2RwLTEsCisgICAgLTB4MS40MDBlYzliZTJhYmJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjYKKyAgICAweDEuMTc1MDU5YmYwZDQyMDMzYmJjZjU5OGM4OGIxNzZlNjFwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzlwMQorICB9LAorICB7IC8vIEVudHJ5IDkyNworICAgIC0weDEuMTc1MDU5YmYwZDQyMDMzYmJjZjU5OGM4OGIxNzZlNjFwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNTc5cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjgKKyAgICAweDEuZjY3ZWE5NzViODY5MjUyMWY3N2Q2NzU0YjMwMmM1YzRwLTIsCisgICAgMHgxLjUwNzg5MjcyOTVmMzZwMQorICB9LAorICB7IC8vIEVudHJ5IDkyOQorICAgIC0weDEuZjY3ZWE5NzViODY5MjUyMWY3N2Q2NzU0YjMwMmM1YzRwLTIsCisgICAgLTB4MS41MDc4OTI3Mjk1ZjM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzAKKyAgICAweDEuYmM0YzA0ZDcxYWJhZDE0ZWZjMjlhNjYzNDJhZGE3MjNwLTIsCisgICAgMHgxLjU4YWQ3NmNjY2I4ZjNwMQorICB9LAorICB7IC8vIEVudHJ5IDkzMQorICAgIC0weDEuYmM0YzA0ZDcxYWJhZDE0ZWZjMjlhNjYzNDJhZGE3MjNwLTIsCisgICAgLTB4MS41OGFkNzZjY2NiOGYzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzIKKyAgICAweDEuODA0NWZlNjRlNjJjNjJmNTdmMDc3ZWEyNTFlMmYyZGNwLTIsCisgICAgMHgxLjYwZTI1YjI3MDEyYjBwMQorICB9LAorICB7IC8vIEVudHJ5IDkzMworICAgIC0weDEuODA0NWZlNjRlNjJjNjJmNTdmMDc3ZWEyNTFlMmYyZGNwLTIsCisgICAgLTB4MS42MGUyNWIyNzAxMmIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzQKKyAgICAweDEuNDJhYmJhOGM3MmZhMTJiZTkyMGIzMTY2Mjc1MTJlNDFwLTIsCisgICAgMHgxLjY5MTczZjgxMzZjNmRwMQorICB9LAorICB7IC8vIEVudHJ5IDkzNQorICAgIC0weDEuNDJhYmJhOGM3MmZhMTJiZTkyMGIzMTY2Mjc1MTJlNDFwLTIsCisgICAgLTB4MS42OTE3M2Y4MTM2YzZkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzYKKyAgICAweDEuMDNiZTA2Zjk3Y2JjZjg2NjAyMWU1YTVjNjJjNmIwN2VwLTIsCisgICAgMHgxLjcxNGMyM2RiNmM2MmFwMQorICB9LAorICB7IC8vIEVudHJ5IDkzNworICAgIC0weDEuMDNiZTA2Zjk3Y2JjZjg2NjAyMWU1YTVjNjJjNmIwN2VwLTIsCisgICAgLTB4MS43MTRjMjNkYjZjNjJhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzgKKyAgICAweDEuODc3ZTJjZDRmNmY5NDcxMGYyNzc2Nzc1YjAxYzczZGJwLTMsCisgICAgMHgxLjc5ODEwODM1YTFmZTdwMQorICB9LAorICB7IC8vIEVudHJ5IDkzOQorICAgIC0weDEuODc3ZTJjZDRmNmY5NDcxMGYyNzc2Nzc1YjAxYzczZGJwLTMsCisgICAgLTB4MS43OTgxMDgzNWExZmU3cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDAKKyAgICAweDEuMDVlNDc2MWFiOGQ0MjE3MTk1Njc3MTdmNzY3MTI4NjdwLTMsCisgICAgMHgxLjgxYjVlYzhmZDc5YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDk0MQorICAgIC0weDEuMDVlNDc2MWFiOGQ0MjE3MTk1Njc3MTdmNzY3MTI4NjdwLTMsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OWE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDIKKyAgICAweDEuMDY2ZTdlYjc2ZjVkZDJlYTE5YjY5OTFlOGExYTM2MzRwLTQsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWJwMQorICB9LAorICB7IC8vIEVudHJ5IDk0MworICAgIC0weDEuMDY2ZTdlYjc2ZjVkZDJlYTE5YjY5OTFlOGExYTM2MzRwLTQsCisgICAgLTB4MS44OWVhZDBlYTBkMzVicDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDQKKyAgICAweDEuMDNiZTA2Zjk3Y2JmMDljYzBiYWRiZGFlODAzZDdiNGVwLTIsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OTlmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDUKKyAgICAtMHgxLjAzYmUwNmY5N2NiZjA5Y2MwYmFkYmRhZTgwM2Q3YjRlcC0yLAorICAgIDB4MS44MWI1ZWM4ZmQ3OTlmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDYKKyAgICAweDEuZjY3ZWE5NzViODZhMjJmMjM0ODc3ODgyNGY5NWQ4NGFwLTIsCisgICAgLTB4MS43MTRjMjNkYjZjNjI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDcKKyAgICAtMHgxLmY2N2VhOTc1Yjg2YTIyZjIzNDg3Nzg4MjRmOTVkODRhcC0yLAorICAgIDB4MS43MTRjMjNkYjZjNjI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDgKKyAgICAweDEuNjQzMDgwZDY3YWNjMjEwZmEyN2U5MjQ3YTgyODYyMjBwLTEsCisgICAgLTB4MS42MGUyNWIyNzAxMmFkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDkKKyAgICAtMHgxLjY0MzA4MGQ2N2FjYzIxMGZhMjdlOTI0N2E4Mjg2MjIwcC0xLAorICAgIDB4MS42MGUyNWIyNzAxMmFkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTAKKyAgICAweDEuYjVkNTQ1YjEwOWJmOTUwYjQxOTcwMjk3MmI5NGY4ZmFwLTEsCisgICAgLTB4MS41MDc4OTI3Mjk1ZjM0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTEKKyAgICAtMHgxLmI1ZDU0NWIxMDliZjk1MGI0MTk3MDI5NzJiOTRmOGZhcC0xLAorICAgIDB4MS41MDc4OTI3Mjk1ZjM0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTIKKyAgICAweDEuZWFkNjgzNDkwOWI5MzQ2MjM0ZGJiNjAxZDA0ODZjZjJwLTEsCisgICAgLTB4MS40MDBlYzliZTJhYmJicDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTMKKyAgICAtMHgxLmVhZDY4MzQ5MDliOTM0NjIzNGRiYjYwMWQwNDg2Y2YycC0xLAorICAgIDB4MS40MDBlYzliZTJhYmJicDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTQKKyAgICAweDEuZmZiY2E4NDZjNGZjOTk5YTI5ZGMxZDZiMmQ3Y2I0MTNwLTEsCisgICAgLTB4MS4yZmE1MDEwOWJmODQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTUKKyAgICAtMHgxLmZmYmNhODQ2YzRmYzk5OWEyOWRjMWQ2YjJkN2NiNDEzcC0xLAorICAgIDB4MS4yZmE1MDEwOWJmODQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTYKKyAgICAweDEuZjMyOWMwNTU4ZTk2YTUxOGEyYWYzYWU3ODAwYTViNjVwLTEsCisgICAgLTB4MS4xZjNiMzg1NTU0NGM5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTcKKyAgICAtMHgxLmYzMjljMDU1OGU5NmE1MThhMmFmM2FlNzgwMGE1YjY1cC0xLAorICAgIDB4MS4xZjNiMzg1NTU0NGM5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTgKKyAgICAweDEuYzVmMDU4MjMwZTgwMjFmMjFiZDBhYzJjMGY2ODA5YTlwLTEsCisgICAgLTB4MS4wZWQxNmZhMGU5MTUwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTkKKyAgICAtMHgxLmM1ZjA1ODIzMGU4MDIxZjIxYmQwYWMyYzBmNjgwOWE5cC0xLAorICAgIDB4MS4wZWQxNmZhMGU5MTUwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjAKKyAgICAweDEuN2IwNWI3YjZjNjEzNjVhOWFjOWU5MDhiOGU1ZDNjZTRwLTEsCisgICAgLTB4MS5mY2NmNGRkOGZiYmFlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjEKKyAgICAtMHgxLjdiMDViN2I2YzYxMzY1YTlhYzllOTA4YjhlNWQzY2U0cC0xLAorICAgIDB4MS5mY2NmNGRkOGZiYmFlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjIKKyAgICAweDEuMTc1MDU5YmYwZDQyZjFkNmIzOTFmMDdmOTZmMjM1M2RwLTEsCisgICAgLTB4MS5kYmZiYmM3MDI1NGJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjMKKyAgICAtMHgxLjE3NTA1OWJmMGQ0MmYxZDZiMzkxZjA3Zjk2ZjIzNTNkcC0xLAorICAgIDB4MS5kYmZiYmM3MDI1NGJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjQKKyAgICAweDEuNDJhYmJhOGM3MmZkMjIxOTQ3OTMyNDZiOGQxOTk2MGFwLTIsCisgICAgLTB4MS5iYjI4MmIwNzRlZGNhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjUKKyAgICAtMHgxLjQyYWJiYThjNzJmZDIyMTk0NzkzMjQ2YjhkMTk5NjBhcC0yLAorICAgIDB4MS5iYjI4MmIwNzRlZGNhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjYKKyAgICAweDEuMDY2ZTdlYjc2ZjYyYjVmNDU2M2RlMjZkY2E4OTAwMTdwLTQsCisgICAgLTB4MS45YTU0OTk5ZTc4NmQ4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjcKKyAgICAtMHgxLjA2NmU3ZWI3NmY2MmI1ZjQ1NjNkZTI2ZGNhODkwMDE3cC00LAorICAgIDB4MS45YTU0OTk5ZTc4NmQ4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjgKKyAgICAtMHgxLjg3N2UyY2Q0ZjZmYTQyNTg2ODc1YzUyNTBhMTY5ZTQ4cC0zLAorICAgIC0weDEuNzk4MTA4MzVhMWZlNnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTY5CisgICAgMHgxLjg3N2UyY2Q0ZjZmYTQyNTg2ODc1YzUyNTBhMTY5ZTQ4cC0zLAorICAgIDB4MS43OTgxMDgzNWExZmU2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzAKKyAgICAtMHgxLmJjNGMwNGQ3MWFiYTVkZmMwOTgyNzhmMTY4YmJkOTYycC0yLAorICAgIC0weDEuNThhZDc2Y2NjYjhmNHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTcxCisgICAgMHgxLmJjNGMwNGQ3MWFiYTVkZmMwOTgyNzhmMTY4YmJkOTYycC0yLAorICAgIDB4MS41OGFkNzZjY2NiOGY0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzIKKyAgICAtMHgxLjRiZTQ5NzljNWVmYTg3MWQzMGFlMWNmYTY2Mzg5MTk5cC0xLAorICAgIC0weDEuMzdkOWU1NjNmNTIwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTczCisgICAgMHgxLjRiZTQ5NzljNWVmYTg3MWQzMGFlMWNmYTY2Mzg5MTk5cC0xLAorICAgIDB4MS4zN2Q5ZTU2M2Y1MjAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzQKKyAgICAtMHgxLmEzZWQ5ZTI1MjkzODIyMTY4OTU4Y2NlMWUwOWY3YzExcC0xLAorICAgIC0weDEuMTcwNjUzZmIxZWIxMHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTc1CisgICAgMHgxLmEzZWQ5ZTI1MjkzODIyMTY4OTU4Y2NlMWUwOWY3YzExcC0xLAorICAgIDB4MS4xNzA2NTNmYjFlYjEwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzYKKyAgICAtMHgxLmUwN2VlZWRhMTA5YzYyYjM0MGRjMzZlOTIxNjk2NDhkcC0xLAorICAgIC0weDEuZWM2NTg1MjQ5MDgzY3AwCisgIH0sCisgIHsgLy8gRW50cnkgOTc3CisgICAgMHgxLmUwN2VlZWRhMTA5YzYyYjM0MGRjMzZlOTIxNjk2NDhkcC0xLAorICAgIDB4MS5lYzY1ODUyNDkwODNjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzgKKyAgICAtMHgxLmZkYTI1NGMyN2EwMWRkOTU0ZGIzYWVhNTA1ZTQ5NDUzcC0xLAorICAgIC0weDEuYWFiZTYyNTJlM2E1OHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTc5CisgICAgMHgxLmZkYTI1NGMyN2EwMWRkOTU0ZGIzYWVhNTA1ZTQ5NDUzcC0xLAorICAgIDB4MS5hYWJlNjI1MmUzYTU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODAKKyAgICAtMHgxLmY5NmZlNDA1ZjFhY2EwMmU4ZjRmZDQzM2U1OWFhOTczcC0xLAorICAgIC0weDEuNjkxNzNmODEzNmM3NHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTgxCisgICAgMHgxLmY5NmZlNDA1ZjFhY2EwMmU4ZjRmZDQzM2U1OWFhOTczcC0xLAorICAgIDB4MS42OTE3M2Y4MTM2Yzc0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODIKKyAgICAtMHgxLmQ0MmRlNDJkY2UxM2VmMDQwYmIxMDQwZTMxNDhkN2RlcC0xLAorICAgIC0weDEuMjc3MDFjYWY4OWU5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgOTgzCisgICAgMHgxLmQ0MmRlNDJkY2UxM2VmMDQwYmIxMDQwZTMxNDhkN2RlcC0xLAorICAgIDB4MS4yNzcwMWNhZjg5ZTkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODQKKyAgICAtMHgxLjkwNGMzNzUwNWRlNTkzMDgxMmUzYTJhOTRmZWFhNTFicC0xLAorICAgIC0weDEuY2I5MWYzYmJiYTE1N3AtMQorICB9LAorICB7IC8vIEVudHJ5IDk4NQorICAgIDB4MS45MDRjMzc1MDVkZTU5MzA4MTJlM2EyYTk0ZmVhYTUxYnAtMSwKKyAgICAweDEuY2I5MWYzYmJiYTE1N3AtMQorICB9LAorICB7IC8vIEVudHJ5IDk4NgorICAgIC0weDEuMzIzYjhiMWZiNGJiNjI2ZGQ0MGNhY2Q3NDk2M2FjNmNwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNThlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTg3CisgICAgMHgxLjMyM2I4YjFmYjRiYjYyNmRkNDBjYWNkNzQ5NjNhYzZjcC0xLAorICAgIDB4MS40ODQzYWUxODYwNThlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTg4CisgICAgLTB4MS44MDQ1ZmU2NGU2MzA4YmI1YzZjZTM1ZjgzNGI5M2M2M3AtMiwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzOGFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODkKKyAgICAweDEuODA0NWZlNjRlNjMwOGJiNWM2Y2UzNWY4MzRiOTNjNjNwLTIsCisgICAgMHgxLjg5ZWFkMGVhMGQzOGFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTAKKyAgICAtMHgxLjA1ZTQ3NjFhYjhkZWM0NGVkMGZhMzBkMzM1MDQ5YzQwcC0zLAorICAgIC0weDEuMDY5YzhiNDZiMzdmMHAtMworICB9LAorICB7IC8vIEVudHJ5IDk5MQorICAgIDB4MS4wNWU0NzYxYWI4ZGVjNDRlZDBmYTMwZDMzNTA0OWM0MHAtMywKKyAgICAweDEuMDY5YzhiNDZiMzdmMHAtMworICB9LAorICB7IC8vIEVudHJ5IDk5MgorICAgIDB4MS4wNWU0NzYxYWI4ZDMxZDAwZTY1NjM3MmM1YzA0YWE2ZXAtMywKKyAgICAweDEuMDY5YzhiNDZiMzczNHAtMworICB9LAorICB7IC8vIEVudHJ5IDk5MworICAgIC0weDEuMDVlNDc2MWFiOGQzMWQwMGU2NTYzNzJjNWMwNGFhNmVwLTMsCisgICAgLTB4MS4wNjljOGI0NmIzNzM0cC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTk0CisgICAgMHgxLjgwNDVmZTY0ZTYyYjE5YTA5NDM5OTUwMmFmYjc2ZTVjcC0yLAorICAgIDB4MS44OWVhZDBlYTBkMzJjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTk1CisgICAgLTB4MS44MDQ1ZmU2NGU2MmIxOWEwOTQzOTk1MDJhZmI3NmU1Y3AtMiwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzMmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTYKKyAgICAweDEuMzIzYjhiMWZiNGI5MDdjNDE2ZDIzYjA0ZTBlYzBlNzJwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NWZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTcKKyAgICAtMHgxLjMyM2I4YjFmYjRiOTA3YzQxNmQyM2IwNGUwZWMwZTcycC0xLAorICAgIC0weDEuNDg0M2FlMTg2MDU1ZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDk5OAorICAgIDB4MS45MDRjMzc1MDVkZTNiZTJhY2UxN2NhNTQ4Nzc1MDIzMXAtMSwKKyAgICAweDEuY2I5MWYzYmJiYTEyOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDk5OQorICAgIC0weDEuOTA0YzM3NTA1ZGUzYmUyYWNlMTdjYTU0ODc3NTAyMzFwLTEsCisgICAgLTB4MS5jYjkxZjNiYmJhMTI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAwMAorICAgIDB4MS5kNDJkZTQyZGNlMTJiODI0NjZmMmZjYjYzYjI5NDc1MXAtMSwKKyAgICAweDEuMjc3MDFjYWY4OWU3OHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTAwMQorICAgIC0weDEuZDQyZGU0MmRjZTEyYjgyNDY2ZjJmY2I2M2IyOTQ3NTFwLTEsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTc4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAyCisgICAgMHgxLmY5NmZlNDA1ZjFhYzI1OWJmMTkyZmQxY2Y2NGUyZjEycC0xLAorICAgIDB4MS42OTE3M2Y4MTM2YzVjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAzCisgICAgLTB4MS5mOTZmZTQwNWYxYWMyNTliZjE5MmZkMWNmNjRlMmYxMnAtMSwKKyAgICAtMHgxLjY5MTczZjgxMzZjNWNwMAorICB9LAorICB7IC8vIEVudHJ5IDEwMDQKKyAgICAweDEuZmRhMjU0YzI3YTAyMjc1NDMyZDc3ZGQ2Zjk3MDQ2NDRwLTEsCisgICAgMHgxLmFhYmU2MjUyZTNhNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDEwMDUKKyAgICAtMHgxLmZkYTI1NGMyN2EwMjI3NTQzMmQ3N2RkNmY5NzA0NjQ0cC0xLAorICAgIC0weDEuYWFiZTYyNTJlM2E0MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTAwNgorICAgIDB4MS5lMDdlZWVkYTEwOWQ2YmYwYzkzNWZhMTBiMTI4MGM2ZHAtMSwKKyAgICAweDEuZWM2NTg1MjQ5MDgyNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTAwNworICAgIC0weDEuZTA3ZWVlZGExMDlkNmJmMGM5MzVmYTEwYjEyODBjNmRwLTEsCisgICAgLTB4MS5lYzY1ODUyNDkwODI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA4CisgICAgMHgxLmEzZWQ5ZTI1MjkzOWQ5NzkzZmIyZjZmNzVlNWM3NmU3cC0xLAorICAgIDB4MS4xNzA2NTNmYjFlYjA0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA5CisgICAgLTB4MS5hM2VkOWUyNTI5MzlkOTc5M2ZiMmY2Zjc1ZTVjNzZlN3AtMSwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMDRwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTAKKyAgICAweDEuNGJlNDk3OWM1ZWZjY2ZlNzhlYTBiNmFmYjBjYmJhMzdwLTEsCisgICAgMHgxLjM3ZDllNTYzZjUxZjZwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTEKKyAgICAtMHgxLjRiZTQ5NzljNWVmY2NmZTc4ZWEwYjZhZmIwY2JiYTM3cC0xLAorICAgIC0weDEuMzdkOWU1NjNmNTFmNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxMgorICAgIDB4MS5iYzRjMDRkNzFhYmZjNWRmNjk1ODlhNDVkNWUzMTk2ZXAtMiwKKyAgICAweDEuNThhZDc2Y2NjYjhlOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxMworICAgIC0weDEuYmM0YzA0ZDcxYWJmYzVkZjY5NTg5YTQ1ZDVlMzE5NmVwLTIsCisgICAgLTB4MS41OGFkNzZjY2NiOGU4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE0CisgICAgMHgxLjg3N2UyY2Q0ZjcwNjA5YjFmMDYyMjk1YjY0YWVkNGJkcC0zLAorICAgIDB4MS43OTgxMDgzNWExZmRhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE1CisgICAgLTB4MS44NzdlMmNkNGY3MDYwOWIxZjA2MjI5NWI2NGFlZDRiZHAtMywKKyAgICAtMHgxLjc5ODEwODM1YTFmZGFwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTYKKyAgICAtMHgxLjA2NmU3ZWI3NmY0YWMyOTNmNDY0ODZkYzMyOGQ0NTBicC00LAorICAgIDB4MS45YTU0OTk5ZTc4NmNjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE3CisgICAgMHgxLjA2NmU3ZWI3NmY0YWMyOTNmNDY0ODZkYzMyOGQ0NTBicC00LAorICAgIC0weDEuOWE1NDk5OWU3ODZjY3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxOAorICAgIC0weDEuNDJhYmJhOGM3MmY3NzA1OTVmZmUzMTM1YTBlMGFkODNwLTIsCisgICAgMHgxLmJiMjgyYjA3NGVkYmVwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTkKKyAgICAweDEuNDJhYmJhOGM3MmY3NzA1OTVmZmUzMTM1YTBlMGFkODNwLTIsCisgICAgLTB4MS5iYjI4MmIwNzRlZGJlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIwCisgICAgLTB4MS4xNzUwNTliZjBkNDA2ZTJmZTAxNGU4ODBkZDI5Y2ZhY3AtMSwKKyAgICAweDEuZGJmYmJjNzAyNTRiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAyMQorICAgIDB4MS4xNzUwNTliZjBkNDA2ZTJmZTAxNGU4ODBkZDI5Y2ZhY3AtMSwKKyAgICAtMHgxLmRiZmJiYzcwMjU0YjBwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMjIKKyAgICAtMHgxLjdiMDViN2I2YzYxMTYxNTVmMGRjNTUxZTMxNmUxZTBicC0xLAorICAgIDB4MS5mY2NmNGRkOGZiYmEycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIzCisgICAgMHgxLjdiMDViN2I2YzYxMTYxNTVmMGRjNTUxZTMxNmUxZTBicC0xLAorICAgIC0weDEuZmNjZjRkZDhmYmJhMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAyNAorICAgIC0weDEuYzVmMDU4MjMwZTdlYmViNzYxNjc3OWUxNmZhOWI1MzdwLTEsCisgICAgMHgxLjBlZDE2ZmEwZTkxNGFwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjUKKyAgICAweDEuYzVmMDU4MjMwZTdlYmViNzYxNjc3OWUxNmZhOWI1MzdwLTEsCisgICAgLTB4MS4wZWQxNmZhMGU5MTRhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI2CisgICAgLTB4MS5mMzI5YzA1NThlOTVmYTMzM2Q1ZDJkNDRkNjU0Nzc3Y3AtMSwKKyAgICAweDEuMWYzYjM4NTU1NDRjM3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTAyNworICAgIDB4MS5mMzI5YzA1NThlOTVmYTMzM2Q1ZDJkNDRkNjU0Nzc3Y3AtMSwKKyAgICAtMHgxLjFmM2IzODU1NTQ0YzNwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjgKKyAgICAtMHgxLmZmYmNhODQ2YzRmY2IyMzdjMjk0N2IzNWIwMzdhMnAtMSwKKyAgICAweDEuMmZhNTAxMDliZjgzY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTAyOQorICAgIDB4MS5mZmJjYTg0NmM0ZmNiMjM3YzI5NDdiMzViMDM3YTJwLTEsCisgICAgLTB4MS4yZmE1MDEwOWJmODNjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMwCisgICAgLTB4MS5lYWQ2ODM0OTA5YmEwZWU2OWIzMWUxOTcwZGYxYmI4YnAtMSwKKyAgICAweDEuNDAwZWM5YmUyYWJiNXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzMQorICAgIDB4MS5lYWQ2ODM0OTA5YmEwZWU2OWIzMWUxOTcwZGYxYmI4YnAtMSwKKyAgICAtMHgxLjQwMGVjOWJlMmFiYjVwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzIKKyAgICAtMHgxLmI1ZDU0NWIxMDljMTIzMmI2MWRkMjhkODAzNWQ5NWNicC0xLAorICAgIDB4MS41MDc4OTI3Mjk1ZjJlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMzCisgICAgMHgxLmI1ZDU0NWIxMDljMTIzMmI2MWRkMjhkODAzNWQ5NWNicC0xLAorICAgIC0weDEuNTA3ODkyNzI5NWYyZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzNAorICAgIC0weDEuNjQzMDgwZDY3YWNlNDhjMGRkMWZlM2EwNmJiYzRiZjVwLTEsCisgICAgMHgxLjYwZTI1YjI3MDEyYTdwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzUKKyAgICAweDEuNjQzMDgwZDY3YWNlNDhjMGRkMWZlM2EwNmJiYzRiZjVwLTEsCisgICAgLTB4MS42MGUyNWIyNzAxMmE3cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM2CisgICAgLTB4MS5mNjdlYTk3NWI4NmY1ZDRhYTkyNzE2Y2MwNzc0NzNhN3AtMiwKKyAgICAweDEuNzE0YzIzZGI2YzYyMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzNworICAgIDB4MS5mNjdlYTk3NWI4NmY1ZDRhYTkyNzE2Y2MwNzc0NzNhN3AtMiwKKyAgICAtMHgxLjcxNGMyM2RiNmM2MjBwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzgKKyAgICAtMHgxLjAzYmUwNmY5N2NjNGQ3OGZkY2NiY2ExZDQwZTg2MDExcC0yLAorICAgIDB4MS44MWI1ZWM4ZmQ3OTk5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM5CisgICAgMHgxLjAzYmUwNmY5N2NjNGQ3OGZkY2NiY2ExZDQwZTg2MDExcC0yLAorICAgIC0weDEuODFiNWVjOGZkNzk5OXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTA0MAorICAgIDB4MS5lZmIyNmVmOTMwYzRjM2ZhMzI0NTk2M2MxZGNlYzBhNnAtNSwKKyAgICAweDEuZWZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwNDEKKyAgICAtMHgxLmVmYjI2ZWY5MzBjNGMzZmEzMjQ1OTYzYzFkY2VjMGE2cC01LAorICAgIC0weDEuZWZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwNDIKKyAgICAweDEuZWZiMjZlZjkzMGM0ZDNmMmIwZGJlMTkzMWJhNWFlNjRwLTUsCisgICAgMHgxLmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQzCisgICAgLTB4MS5lZmIyNmVmOTMwYzRkM2YyYjBkYmUxOTMxYmE1YWU2NHAtNSwKKyAgICAtMHgxLmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ0CisgICAgMHgxLmVmYjI2ZWY5MzBjNGUzZWIyZjcyMmNlYTE5N2MyMDM2cC01LAorICAgIDB4MS5mMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NQorICAgIC0weDEuZWZiMjZlZjkzMGM0ZTNlYjJmNzIyY2VhMTk3YzIwMzZwLTUsCisgICAgLTB4MS5mMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NgorICAgIDB4MS5mNmJhYWExMzFkZTYzM2FkNGUwZTdkNjQ2NWQxMmEwNXAtNCwKKyAgICAweDEuZjdmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwNDcKKyAgICAtMHgxLmY2YmFhYTEzMWRlNjMzYWQ0ZTBlN2Q2NDY1ZDEyYTA1cC00LAorICAgIC0weDEuZjdmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwNDgKKyAgICAweDEuZjZiYWFhMTMxZGU2NDM4ZTU2MTEyNzk4NjRmZTc2NjNwLTQsCisgICAgMHgxLmY4MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwNDkKKyAgICAtMHgxLmY2YmFhYTEzMWRlNjQzOGU1NjExMjc5ODY0ZmU3NjYzcC00LAorICAgIC0weDEuZjgwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA1MAorICAgIDB4MS5mNmJhYWExMzFkZTY1MzZmNWUxM2QxY2M2NDI5Y2MwN3AtNCwKKyAgICAweDEuZjgwMDAwMDAwMDAwMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwNTEKKyAgICAtMHgxLmY2YmFhYTEzMWRlNjUzNmY1ZTEzZDFjYzY0MjljYzA3cC00LAorICAgIC0weDEuZjgwMDAwMDAwMDAwMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwNTIKKyAgICAweDEuNGE4YzNiNGU5YzdmZjAwYTM2ZTA2MWEwZDIyOTUwOTNwLTMsCisgICAgMHgxLjRiZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUzCisgICAgLTB4MS40YThjM2I0ZTljN2ZmMDBhMzZlMDYxYTBkMjI5NTA5M3AtMywKKyAgICAtMHgxLjRiZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU0CisgICAgMHgxLjRhOGMzYjRlOWM3ZmZmZDQ4MzA1ZjQ0YTQyZjVmNTBmcC0zLAorICAgIDB4MS40YzBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU1CisgICAgLTB4MS40YThjM2I0ZTljN2ZmZmQ0ODMwNWY0NGE0MmY1ZjUwZnAtMywKKyAgICAtMHgxLjRjMHAtMworICB9LAorICB7IC8vIEVudHJ5IDEwNTYKKyAgICAweDEuNGE4YzNiNGU5YzgwMGY5ZWNmMmI4NmYzYjNiZDZmNWFwLTMsCisgICAgMHgxLjRjMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU3CisgICAgLTB4MS40YThjM2I0ZTljODAwZjllY2YyYjg2ZjNiM2JkNmY1YXAtMywKKyAgICAtMHgxLjRjMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU4CisgICAgMHgxLjJlOWNkOTViYWJhMzI1ZmU2MDY3MjMzZDQ0OTZhYWFjcC0yLAorICAgIDB4MS4zMzMzMzMzMzMzMzMycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTA1OQorICAgIC0weDEuMmU5Y2Q5NWJhYmEzMjVmZTYwNjcyMzNkNDQ5NmFhYWNwLTIsCisgICAgLTB4MS4zMzMzMzMzMzMzMzMycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTA2MAorICAgIDB4MS4yZTljZDk1YmFiYTMzNTQ3NmY1MTNhYzIyMWQwNzhjN3AtMiwKKyAgICAweDEuMzMzMzMzMzMzMzMzM3AtMgorICB9LAorICB7IC8vIEVudHJ5IDEwNjEKKyAgICAtMHgxLjJlOWNkOTViYWJhMzM1NDc2ZjUxM2FjMjIxZDA3OGM3cC0yLAorICAgIC0weDEuMzMzMzMzMzMzMzMzM3AtMgorICB9LAorICB7IC8vIEVudHJ5IDEwNjIKKyAgICAweDEuMmU5Y2Q5NWJhYmEzNDQ5MDdlM2I1MjQ2ZmVmNzVkMTVwLTIsCisgICAgMHgxLjMzMzMzMzMzMzMzMzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYzCisgICAgLTB4MS4yZTljZDk1YmFiYTM0NDkwN2UzYjUyNDZmZWY3NWQxNXAtMiwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY0CisgICAgMHgxLjNmYWVmYzdhNTQ2NmVmMzA0NWMzZjFiZTcxNmFkNTY4cC0xLAorICAgIDB4MS41OTQzMTdhY2M0ZWY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NQorICAgIC0weDEuM2ZhZWZjN2E1NDY2ZWYzMDQ1YzNmMWJlNzE2YWQ1NjhwLTEsCisgICAgLTB4MS41OTQzMTdhY2M0ZWY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NgorICAgIDB4MS4zZmFlZmM3YTU0NjZmYmFmYmNhMDI3YjZlOGRiOGMwNHAtMSwKKyAgICAweDEuNTk0MzE3YWNjNGVmOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNjcKKyAgICAtMHgxLjNmYWVmYzdhNTQ2NmZiYWZiY2EwMjdiNmU4ZGI4YzA0cC0xLAorICAgIC0weDEuNTk0MzE3YWNjNGVmOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNjgKKyAgICAweDEuM2ZhZWZjN2E1NDY3MDgyZjMzN2M1ZGFmNWZmYzU2ZTJwLTEsCisgICAgMHgxLjU5NDMxN2FjYzRlZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY5CisgICAgLTB4MS4zZmFlZmM3YTU0NjcwODJmMzM3YzVkYWY1ZmZjNTZlMnAtMSwKKyAgICAtMHgxLjU5NDMxN2FjYzRlZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcwCisgICAgMHgxLjY4ODhhNGUxMzRiMmRlZjViZWE1MWY0Y2Q3ZDY0N2M2cC0xLAorICAgIDB4MS44ZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MQorICAgIC0weDEuNjg4OGE0ZTEzNGIyZGVmNWJlYTUxZjRjZDdkNjQ3YzZwLTEsCisgICAgLTB4MS44ZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MgorICAgIDB4MS42ODg4YTRlMTM0YjJlYTUyMGIyMjZlY2E4Njk0YjNhMnAtMSwKKyAgICAweDEuOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNzMKKyAgICAtMHgxLjY4ODhhNGUxMzRiMmVhNTIwYjIyNmVjYTg2OTRiM2EycC0xLAorICAgIC0weDEuOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNzQKKyAgICAweDEuNjg4OGE0ZTEzNGIyZjVhZTU3OWZiZTQ4MzRmOGZkNTVwLTEsCisgICAgMHgxLjkwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc1CisgICAgLTB4MS42ODg4YTRlMTM0YjJmNWFlNTc5ZmJlNDgzNGY4ZmQ1NXAtMSwKKyAgICAtMHgxLjkwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc2CisgICAgLTAuMCwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc3CisgICAgMC4wLAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgMTA3OAorICAgIC0wLjAsCisgICAgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDEwNzkKKyAgICAwLjAsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgwCisgICAgLTAuMCwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgxCisgICAgMHgxLjkxZjY1ZjEwZGQ4MTJhMGI5NWZmNzE4NzFhYjQ4MjA3cC01LAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA4MgorICAgIC0weDEuOTFmNjVmMTBkZDgxMmEwYjk1ZmY3MTg3MWFiNDgyMDdwLTUsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA4MworICAgIDB4MS45MWY2NWYxMGRkODEzYTA2YTZmMTJlM2RkOWE2YTQxZXAtNSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwODQKKyAgICAtMHgxLjkxZjY1ZjEwZGQ4MTNhMDZhNmYxMmUzZGQ5YTZhNDFlcC01LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwODUKKyAgICAweDEuOTFmNjVmMTBkZDgxNGEwMWI3ZTJlYWY0OTg5ODYxYjdwLTUsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg2CisgICAgLTB4MS45MWY2NWYxMGRkODE0YTAxYjdlMmVhZjQ5ODk4NjFiN3AtNSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg3CisgICAgMHgxLjkxN2E2YmMyOWI0MmE5Y2QyZTc4N2VlMDBjYThmOGUzcC00LAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA4OAorICAgIC0weDEuOTE3YTZiYzI5YjQyYTljZDJlNzg3ZWUwMGNhOGY4ZTNwLTQsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA4OQorICAgIDB4MS45MTdhNmJjMjliNDJiOWI5NzU0YTY3NzI5Zjc5MzQ2YnAtNCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwOTAKKyAgICAtMHgxLjkxN2E2YmMyOWI0MmI5Yjk3NTRhNjc3MjlmNzkzNDZicC00LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwOTEKKyAgICAweDEuOTE3YTZiYzI5YjQyYzlhNWJjMWM1MDA1MzI0N2RlNzhwLTQsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkyCisgICAgLTB4MS45MTdhNmJjMjliNDJjOWE1YmMxYzUwMDUzMjQ3ZGU3OHAtNCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkzCisgICAgMHgxLjhmOGI4M2M2OWE2MDk3NWY5ODQ1Mzg4NmY5NTNhMGU1cC0zLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTA5NAorICAgIC0weDEuOGY4YjgzYzY5YTYwOTc1Zjk4NDUzODg2Zjk1M2EwZTVwLTMsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTA5NQorICAgIDB4MS44ZjhiODNjNjlhNjBhNzEwZTQyZDM0MzU1MTZkZGFjY3AtMywKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAtMworICB9LAorICB7IC8vIEVudHJ5IDEwOTYKKyAgICAtMHgxLjhmOGI4M2M2OWE2MGE3MTBlNDJkMzQzNTUxNmRkYWNjcC0zLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMworICB9LAorICB7IC8vIEVudHJ5IDEwOTcKKyAgICAweDEuOGY4YjgzYzY5YTYwYjZjMjMwMTUyZmUzYTk4MWQ2ODZwLTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk4CisgICAgLTB4MS44ZjhiODNjNjlhNjBiNmMyMzAxNTJmZTNhOTgxZDY4NnAtMywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk5CisgICAgMHgxLjg3ZGUyYTZhZWE5NjFhM2U5ZGVkZWE1N2ZlN2U2NTE0cC0yLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTEwMAorICAgIC0weDEuODdkZTJhNmFlYTk2MWEzZTlkZWRlYTU3ZmU3ZTY1MTRwLTIsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTEwMQorICAgIDB4MS44N2RlMmE2YWVhOTYyOTA2ZDNkNTgzOWVhMWE1YmNmMHAtMiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDExMDIKKyAgICAtMHgxLjg3ZGUyYTZhZWE5NjI5MDZkM2Q1ODM5ZWExYTViY2YwcC0yLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDExMDMKKyAgICAweDEuODdkZTJhNmFlYTk2MzdjZjA5YmQxY2U1NDRiNDk2ZWFwLTIsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA0CisgICAgLTB4MS44N2RlMmE2YWVhOTYzN2NmMDliZDFjZTU0NGI0OTZlYXAtMiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA1CisgICAgMHgxLjZhMDllNjY3ZjNiY2JhOTlhZmIwMTM1NzI5NDU3ODc0cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTEwNgorICAgIC0weDEuNmEwOWU2NjdmM2JjYmE5OWFmYjAxMzU3Mjk0NTc4NzRwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTEwNworICAgIDB4MS42YTA5ZTY2N2YzYmNjNWU5ZmVlMzUyZjUwZmQzZjRlOXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDExMDgKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2M1ZTlmZWUzNTJmNTBmZDNmNGU5cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDExMDkKKyAgICAweDEuNmEwOWU2NjdmM2JjZDEzYTRlMTY5MjkyZjYwN2VlZTVwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEwCisgICAgLTB4MS42YTA5ZTY2N2YzYmNkMTNhNGUxNjkyOTJmNjA3ZWVlNXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTExCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNWY1NmZmcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTVmNTZmZnAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwMAorICB9LAorICB7IC8vIEVudHJ5IDExMTMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzFwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDExMTQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTExNQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5Yjk2M3AtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTExNgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWI5NjNwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE3CisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWJmYWVlZDQycC01MSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTExOAorICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YmZhZWVkNDJwLTUxLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTExOQorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDM2ZTJlZHAtNTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDExMjAKKyAgICAtMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0MzZlMmVkcC01MywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDExMjEKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdkNWJiYzVjcC01MiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTEyMgorICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3ZDViYmM1Y3AtNTIsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIzCisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDliYjg3Y2UxYnAtNTAsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwMgorICB9LAorICB7IC8vIEVudHJ5IDExMjQKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YmI4N2NlMWJwLTUwLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTEyNQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQwYmYwMDNwLTUyLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTI2CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0MGJmMDAzcC01MiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMgorICB9LAorICB7IC8vIEVudHJ5IDExMjcKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjN2JkNmJmNGRwLTUxLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTI4CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3YmQ2YmY0ZHAtNTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTI5CisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDlhYWViNTE4MnAtNDksCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwMworICB9LAorICB7IC8vIEVudHJ5IDExMzAKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YWFlYjUxODJwLTQ5LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTEzMQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDM2MDI0NWNwLTUxLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMyCisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzAzNjAyNDVjcC01MSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMworICB9LAorICB7IC8vIEVudHJ5IDExMzMKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjNzVjMmNiMGVwLTUwLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM0CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3NWMyY2IwZXAtNTAsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM1CisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDk2ODc5NWYxY3AtNDgsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzYKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5Njg3OTVmMWNwLTQ4LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTEzNworICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDBiMGY1YmZwLTUwLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM4CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzAwYjBmNWJmcC01MCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzkKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjNWQ3MmZhMTFwLTQ5LAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQwCisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM1ZDcyZmExMXAtNDksCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQxCisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDg1ZWIxOTU4NHAtNDcsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwNQorICB9LAorICB7IC8vIEVudHJ5IDExNDIKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ4NWViMTk1ODRwLTQ3LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3A1CisgIH0sCisgIHsgLy8gRW50cnkgMTE0MworICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI2ZjVmNDNiNGNwLTQ5LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQ0CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNmY1ZjQzYjRjcC00OSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwNQorICB9LAorICB7IC8vIEVudHJ5IDExNDUKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZiZmMzM2I2MWZwLTQ4LAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQ2CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmJmYzMzYjYxZnAtNDgsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQ3CisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDQzNzkyNmYyNXAtNDYsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwNgorICB9LAorICB7IC8vIEVudHJ5IDExNDgKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ0Mzc5MjZmMjVwLTQ2LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3A2CisgIH0sCisgIHsgLy8gRW50cnkgMTE0OQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI2Y2IwMTUxN2RwLTQ4LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUwCisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNmNiMDE1MTdkcC00OCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwNgorICB9LAorICB7IC8vIEVudHJ5IDExNTEKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZhNzczNmE2NThwLTQ3LAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUyCisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmE3NzM2YTY1OHAtNDcsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUzCisgICAgLTB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwMzM5YjE1ZDVhYXAtNDUsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwNworICB9LAorICB7IC8vIEVudHJ5IDExNTQKKyAgICAweDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDMzOWIxNWQ1YWFwLTQ1LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3A3CisgIH0sCisgIHsgLy8gRW50cnkgMTE1NQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI2MWYzNWFhNDNwLTQ3LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTU2CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNjFmMzVhYTQzcC00NywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwNworICB9LAorICB7IC8vIEVudHJ5IDExNTcKKyAgICAweDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjY0NjM0MjY3M2FwLTQ2LAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTU4CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNjQ2MzQyNjczYXAtNDYsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTU5CisgICAgMHgxLjZhMDllNjY3ZjNiY2ZmYTYwYzBmNTMzNDBmZDI0OTA0cC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYwCisgICAgLTB4MS42YTA5ZTY2N2YzYmNmZmE2MGMwZjUzMzQwZmQyNDkwNHAtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDFwMQorICB9LAorICB7IC8vIEVudHJ5IDExNjEKKyAgICAweDEuNmEwOWU2NjdmM2JjZDI2NGNmNDI1NGJjN2FiMGM5ZmFwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwMQorICB9LAorICB7IC8vIEVudHJ5IDExNjIKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2QyNjRjZjQyNTRiYzdhYjBjOWZhcC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE2MworICAgIDB4MS42YTA5ZTY2N2YzYmNhNTIzOTI3NTU2NDRkZmU3MjM1N3AtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkM3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTE2NAorICAgIC0weDEuNmEwOWU2NjdmM2JjYTUyMzkyNzU1NjQ0ZGZlNzIzNTdwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY1CisgICAgLTB4MS42YTA5ZTY2N2YzYmM4YzJkZjFiNzUyYjYwNmEwYTQ3MnAtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE2NgorICAgIDB4MS42YTA5ZTY2N2YzYmM4YzJkZjFiNzUyYjYwNmEwYTQ3MnAtMSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWRwMQorICB9LAorICB7IC8vIEVudHJ5IDExNjcKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2I5NmYyZTg0NTEyZGE0ODhmZjJkcC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY4CisgICAgMHgxLjZhMDllNjY3ZjNiY2I5NmYyZTg0NTEyZGE0ODhmZjJkcC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE2OQorICAgIC0weDEuNmEwOWU2NjdmM2JjZTZiMDZiNTE0ZmE1M2NjOTMyNGZwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWZwMQorICB9LAorICB7IC8vIEVudHJ5IDExNzAKKyAgICAweDEuNmEwOWU2NjdmM2JjZTZiMDZiNTE0ZmE1M2NjOTMyNGZwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcxCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlOGIyN2I2YXAtMSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE3MgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlOGIyN2I2YXAtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDFwMgorICB9LAorICB7IC8vIEVudHJ5IDExNzMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNTBjOWJkcC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTc0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNTBjOWJkcC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE3NQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjVlZjE4MTBwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwMgorICB9LAorICB7IC8vIEVudHJ5IDExNzYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjVlZjE4MTBwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQzcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTc3CisgICAgLTB4MS42YTA5ZTY2N2YzYmQzOTYyMTkzYjUzNzMwNjliYTBjMnAtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE3OAorICAgIDB4MS42YTA5ZTY2N2YzYmQzOTYyMTkzYjUzNzMwNjliYTBjMnAtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzRwMgorICB9LAorICB7IC8vIEVudHJ5IDExNzkKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2RlZGY5ZmExNTY4M2U1MWY3ZTYwcC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgwCisgICAgMHgxLjZhMDllNjY3ZjNiY2RlZGY5ZmExNTY4M2U1MWY3ZTYwcC0xLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE4MQorICAgIC0weDEuNmEwOWU2NjdmM2JjODQ1ZDI2MDc1OTk0YWQwMmJkOThwLTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzZwMgorICB9LAorICB7IC8vIEVudHJ5IDExODIKKyAgICAweDEuNmEwOWU2NjdmM2JjODQ1ZDI2MDc1OTk0YWQwMmJkOThwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgzCisgICAgMHgxLjZhMDllNjY3ZjNiYzUyNzFlNDhiNTI3NmY0Mzg1NzlmcC0xLAorICAgIDB4MS5jNDYzYWJlY2NiMmJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTg0CisgICAgLTB4MS42YTA5ZTY2N2YzYmM1MjcxZTQ4YjUyNzZmNDM4NTc5ZnAtMSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmFwMgorICB9LAorICB7IC8vIEVudHJ5IDExODUKKyAgICAweDEuNmEwOWU2NjdmM2JjYWNmNDVlMjU0ZjY2MzhjZmU4YzZwLTEsCisgICAgMHgxLmM0NjNhYmVjY2IyYmJwMgorICB9LAorICB7IC8vIEVudHJ5IDExODYKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2FjZjQ1ZTI1NGY2NjM4Y2ZlOGM2cC0xLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE4NworICAgIDB4MS42YTA5ZTY2N2YzYmQwNzc2ZDdiZjRjNTU2NmM2ZGI4N3AtMSwKKyAgICAweDEuYzQ2M2FiZWNjYjJiY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTE4OAorICAgIC0weDEuNmEwOWU2NjdmM2JkMDc3NmQ3YmY0YzU1NjZjNmRiODdwLTEsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTg5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUzMTE3NGY1cC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkwCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMzExNzRmNXAtMSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWRwMgorICB9LAorICB7IC8vIEVudHJ5IDExOTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUxOTRjZDRwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWVwMgorICB9LAorICB7IC8vIEVudHJ5IDExOTIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMTk0Y2Q0cC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE5MworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTIxMjRiNHAtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE5NAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjkyMTI0YjRwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTk1CisgICAgMHgxLjZhMDllNjY3ZjNiZGZhZTFkY2NlNGYxODY2NTY4MWM2cC0xLAorICAgIDB4MS4xNDc1Y2M5ZWVkZWZmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTk2CisgICAgLTB4MS42YTA5ZTY2N2YzYmRmYWUxZGNjZTRmMTg2NjU2ODFjNnAtMSwKKyAgICAtMHgxLjE0NzVjYzllZWRlZmZwMworICB9LAorICB7IC8vIEVudHJ5IDExOTcKKyAgICAweDEuNmEwOWU2NjdmM2JkNDVkY2U5OWE1NTNhNmQ3ZDgwNjVwLTEsCisgICAgMHgxLjE0NzVjYzllZWRmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTk4CisgICAgLTB4MS42YTA5ZTY2N2YzYmQ0NWRjZTk5YTU1M2E2ZDdkODA2NXAtMSwKKyAgICAtMHgxLjE0NzVjYzllZWRmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTk5CisgICAgMHgxLjZhMDllNjY3ZjNiYzkwZDdmNjY2NWI1YzFhMjIwNTZhcC0xLAorICAgIDB4MS4xNDc1Y2M5ZWVkZjAxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAwCisgICAgLTB4MS42YTA5ZTY2N2YzYmM5MGQ3ZjY2NjViNWMxYTIyMDU2YXAtMSwKKyAgICAtMHgxLjE0NzVjYzllZWRmMDFwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDEKKyAgICAweDEuMzRmMjcyOTkzZDE0MTRhMmIzOWJkODM3M2UwZDZiOTRwLTQ5LAorICAgIDB4MS4yZDk3YzdmMzMyMWQxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAyCisgICAgLTB4MS4zNGYyNzI5OTNkMTQxNGEyYjM5YmQ4MzczZTBkNmI5NHAtNDksCisgICAgLTB4MS4yZDk3YzdmMzMyMWQxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAzCisgICAgMHgxLmE3OTM5NGM5ZThhMGE1MTU5Y2RlYzFiYTg1YTY4OGJkcC01MiwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwNAorICAgIC0weDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhODVhNjg4YmRwLTUyLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwNQorICAgIC0weDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxNTNjMGNjMTZwLTUwLAorICAgIDB4MS4yZDk3YzdmMzMyMWQzcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA2CisgICAgMHgxLjk2MWIxYWNkODVkN2Q2YmE5OGM4NGY5MTUzYzBjYzE2cC01MCwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDNwMworICB9LAorICB7IC8vIEVudHJ5IDEyMDcKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjkwZjIyMGY4NTZkMGIxYTQwNmMzcC0xLAorICAgIDB4MS40NmI5YzM0Nzc2NGEycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA4CisgICAgMHgxLjZhMDllNjY3ZjNiYjkwZjIyMGY4NTZkMGIxYTQwNmMzcC0xLAorICAgIC0weDEuNDZiOWMzNDc3NjRhMnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIwOQorICAgIC0weDEuNmEwOWU2NjdmM2JjNDVmNzE0MmM1MGFmODRmMjZjNzVwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTNwMworICB9LAorICB7IC8vIEVudHJ5IDEyMTAKKyAgICAweDEuNmEwOWU2NjdmM2JjNDVmNzE0MmM1MGFmODRmMjZjNzVwLTEsCisgICAgLTB4MS40NmI5YzM0Nzc2NGEzcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjExCisgICAgLTB4MS42YTA5ZTY2N2YzYmNmYWZjMDc2MDRhOGRmZGJlNTg4ZHAtMSwKKyAgICAweDEuNDZiOWMzNDc3NjRhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIxMgorICAgIDB4MS42YTA5ZTY2N2YzYmNmYWZjMDc2MDRhOGRmZGJlNTg4ZHAtMSwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTRwMworICB9LAorICB7IC8vIEVudHJ5IDEyMTMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjlkNjM0ZTlmcC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjlkNjM0ZTlmcC0xLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIxNQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM0NjExNzhwLTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzVwMworICB9LAorICB7IC8vIEVudHJ5IDEyMTYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmM0NjExNzhwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc1cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE3CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkYjI4ZDQ1MXAtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIxOAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkYjI4ZDQ1MXAtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzZwMworICB9LAorICB7IC8vIEVudHJ5IDEyMTkKKyAgICAtMHgxLjZhMDllNjY3ZjNiZTA3NWNhZDJkNTBkZmM2OGNkODhmcC0xLAorICAgIDB4MS43OGZkYjllZmZlYTQ1cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIwCisgICAgMHgxLjZhMDllNjY3ZjNiZTA3NWNhZDJkNTBkZmM2OGNkODhmcC0xLAorICAgIC0weDEuNzhmZGI5ZWZmZWE0NXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIyMQorICAgIC0weDEuNmEwOWU2NjdmM2JkNTI1N2I5Zjk1NzAxZDNmMTNmNWRwLTEsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDZwMworICB9LAorICB7IC8vIEVudHJ5IDEyMjIKKyAgICAweDEuNmEwOWU2NjdmM2JkNTI1N2I5Zjk1NzAxZDNmMTNmNWRwLTEsCisgICAgLTB4MS43OGZkYjllZmZlYTQ2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIzCisgICAgLTB4MS42YTA5ZTY2N2YzYmM5ZDUyYzZjNTVkMjM4NmQzMmM5MnAtMSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0N3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTIyNAorICAgIDB4MS42YTA5ZTY2N2YzYmM5ZDUyYzZjNTVkMjM4NmQzMmM5MnAtMSwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDdwMworICB9LAorICB7IC8vIEVudHJ5IDEyMjUKKyAgICAweDEuNmEwOWU2NjdmM2JiODQ3NzUwOTk1NTA5M2JiMjkyYmVwLTEsCisgICAgMHgxLmFiNDFiMDk4ODZmZThwMworICB9LAorICB7IC8vIEVudHJ5IDEyMjYKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjg0Nzc1MDk5NTUwOTNiYjI5MmJlcC0xLAorICAgIC0weDEuYWI0MWIwOTg4NmZlOHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIyNworICAgIDB4MS42YTA5ZTY2N2YzYmMzOTdjNDNjZDRlZTgxNTNlNjBhMHAtMSwKKyAgICAweDEuYWI0MWIwOTg4NmZlOXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIyOAorICAgIC0weDEuNmEwOWU2NjdmM2JjMzk3YzQzY2Q0ZWU4MTUzZTYwYTBwLTEsCisgICAgLTB4MS5hYjQxYjA5ODg2ZmU5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI5CisgICAgMHgxLjZhMDllNjY3ZjNiY2VlODEzNzAxNDhjNjk0NDdiNGU3cC0xLAorICAgIDB4MS5hYjQxYjA5ODg2ZmVhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMwCisgICAgLTB4MS42YTA5ZTY2N2YzYmNlZTgxMzcwMTQ4YzY5NDQ3YjRlN3AtMSwKKyAgICAtMHgxLmFiNDFiMDk4ODZmZWFwMworICB9LAorICB7IC8vIEVudHJ5IDEyMzEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTIyMTQxYjRwLTEsCisgICAgMHgxLmM0NjNhYmVjY2IyYmFwMworICB9LAorICB7IC8vIEVudHJ5IDEyMzIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjkyMjE0MWI0cC0xLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIzMworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOWQ3MTdhN3AtMSwKKyAgICAweDEuYzQ2M2FiZWNjYjJiYnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIzNAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjlkNzE3YTdwLTEsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUxOGNlZDlhcC0xLAorICAgIDB4MS5jNDYzYWJlY2NiMmJjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMThjZWQ5YXAtMSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmNwMworICB9LAorICB7IC8vIEVudHJ5IDEyMzcKKyAgICAweDEuNmEwOWU2NjdmM2JlMTNkNzdkOGM1MmE3MjY1NTBlYWNwLTEsCisgICAgMHgxLmRkODVhNzQxMGY1OGJwMworICB9LAorICB7IC8vIEVudHJ5IDEyMzgKKyAgICAtMHgxLjZhMDllNjY3ZjNiZTEzZDc3ZDhjNTJhNzI2NTUwZWFjcC0xLAorICAgIC0weDEuZGQ4NWE3NDEwZjU4YnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTIzOQorICAgIDB4MS42YTA5ZTY2N2YzYmQ1ZWQyOGE1ODU4YzkzOWY2ZGRhYXAtMSwKKyAgICAweDEuZGQ4NWE3NDEwZjU4Y3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTI0MAorICAgIC0weDEuNmEwOWU2NjdmM2JkNWVkMjhhNTg1OGM5MzlmNmRkYWFwLTEsCisgICAgLTB4MS5kZDg1YTc0MTBmNThjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQxCisgICAgMHgxLjZhMDllNjY3ZjNiY2E5Y2Q5NzI0NWVlYWYzMTYzMzBlcC0xLAorICAgIDB4MS5kZDg1YTc0MTBmNThkcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQyCisgICAgLTB4MS42YTA5ZTY2N2YzYmNhOWNkOTcyNDVlZWFmMzE2MzMwZXAtMSwKKyAgICAtMHgxLmRkODVhNzQxMGY1OGRwMworICB9LAorICB7IC8vIEVudHJ5IDEyNDMKKyAgICAweDEuNTgzZWJlZmY2NWNjMjI2NDgwYWU2ODVjMTc2NWRlYzFwLTQ5LAorICAgIDB4MS5mNmE3YTI5NTUzODVkcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ0CisgICAgLTB4MS41ODNlYmVmZjY1Y2MyMjY0ODBhZTY4NWMxNzY1ZGVjMXAtNDksCisgICAgLTB4MS5mNmE3YTI5NTUzODVkcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ1CisgICAgMHgxLjYwZmFmYmZkOTczMDg5OTIwMmI5YTE3MGMzOTcxZTg2cC01MSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTI0NgorICAgIC0weDEuNjBmYWZiZmQ5NzMwODk5MjAyYjlhMTcwYzM5NzFlODZwLTUxLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTI0NworICAgIC0weDEuNGY4MjgyMDEzNDY3YmIzNmZlYTMyZjQ3OTc1M2ZlN2FwLTUwLAorICAgIDB4MS5mNmE3YTI5NTUzODVmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ4CisgICAgMHgxLjRmODI4MjAxMzQ2N2JiMzZmZWEzMmY0Nzk3NTNmZTdhcC01MCwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWZwMworICB9LAorICB7IC8vIEVudHJ5IDEyNDkKKyAgICAtMHgxLjZhMDllNjY3ZjNiYTBkZjI5OWQyNWY4MmY2MzkyNTFmcC0xLAorICAgIDB4MS4wN2U0Y2VmNGNiZDk2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUwCisgICAgMHgxLjZhMDllNjY3ZjNiYTBkZjI5OWQyNWY4MmY2MzkyNTFmcC0xLAorICAgIC0weDEuMDdlNGNlZjRjYmQ5NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI1MQorICAgIC0weDEuNmEwOWU2NjdmM2JiNzdmYzgwM2E1MzQxYzU1MmZlMGZwLTEsCisgICAgMHgxLjA3ZTRjZWY0Y2JkOTdwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTIKKyAgICAweDEuNmEwOWU2NjdmM2JiNzdmYzgwM2E1MzQxYzU1MmZlMGZwLTEsCisgICAgLTB4MS4wN2U0Y2VmNGNiZDk3cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUzCisgICAgLTB4MS42YTA5ZTY2N2YzYmNlMjA2NjZhMjQ2ZmYyYTYyZjA5N3AtMSwKKyAgICAweDEuMDdlNGNlZjRjYmQ5OHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI1NAorICAgIDB4MS42YTA5ZTY2N2YzYmNlMjA2NjZhMjQ2ZmYyYTYyZjA5N3AtMSwKKyAgICAtMHgxLjA3ZTRjZWY0Y2JkOThwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDI1MzFhNDNkcC0xLAorICAgIDB4MS4xNDc1Y2M5ZWVkZWZmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDI1MzFhNDNkcC0xLAorICAgIC0weDEuMTQ3NWNjOWVlZGVmZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI1NworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmODY0Mzc2NTZwLTEsCisgICAgMHgxLjE0NzVjYzllZWRmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjg2NDM3NjU2cC0xLAorICAgIC0weDEuMTQ3NWNjOWVlZGZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNTkKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU3NTU0ODZmcC0xLAorICAgIDB4MS4xNDc1Y2M5ZWVkZjAxcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU3NTU0ODZmcC0xLAorICAgIC0weDEuMTQ3NWNjOWVlZGYwMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2MQorICAgIC0weDEuNmEwOWU2NjdmM2JlZDU1NzQxMWY0ZTRjMTE0ZDczNTdwLTEsCisgICAgMHgxLjIxMDZjYTQ5MTAwNjhwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjIKKyAgICAweDEuNmEwOWU2NjdmM2JlZDU1NzQxMWY0ZTRjMTE0ZDczNTdwLTEsCisgICAgLTB4MS4yMTA2Y2E0OTEwMDY4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYzCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ2YjRkNWFiNzVhOTA5ZjhlNWI0Y3AtMSwKKyAgICAweDEuMjEwNmNhNDkxMDA2OXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2NAorICAgIDB4MS42YTA5ZTY2N2YzYmQ2YjRkNWFiNzVhOTA5ZjhlNWI0Y3AtMSwKKyAgICAtMHgxLjIxMDZjYTQ5MTAwNjlwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjUKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzAxNDM3NDRmNjZkM2MzYzU1Y2Q5cC0xLAorICAgIDB4MS4yMTA2Y2E0OTEwMDZhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY2CisgICAgMHgxLjZhMDllNjY3ZjNiYzAxNDM3NDRmNjZkM2MzYzU1Y2Q5cC0xLAorICAgIC0weDEuMjEwNmNhNDkxMDA2YXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI2NworICAgIC0weDEuMzRmMjcyOTkzZDE0MTRhMmIzOWJkODM3MDVjZWMxMjBwLTQ4LAorICAgIDB4MS4yZDk3YzdmMzMyMWQxcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY4CisgICAgMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzNzA1Y2VjMTIwcC00OCwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDFwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNjkKKyAgICAtMHgxLmE3OTM5NGM5ZThhMGE1MTU5Y2RlYzFiYTgzNjJiOTY4cC01MSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3MAorICAgIDB4MS5hNzkzOTRjOWU4YTBhNTE1OWNkZWMxYmE4MzYyYjk2OHAtNTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcxCisgICAgMHgxLjk2MWIxYWNkODVkN2Q2YmE5OGM4NGY5MTMzZDEwYWJlcC00OSwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkM3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3MgorICAgIC0weDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxMzNkMTBhYmVwLTQ5LAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkM3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3MworICAgIDB4MS42YTA5ZTY2N2YzYmEwMTc3Yzk3MzVkYmI3MmYwOWY2NXAtMSwKKyAgICAweDEuM2EyOGM1OWQ1NDMzOXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3NAorICAgIC0weDEuNmEwOWU2NjdmM2JhMDE3N2M5NzM1ZGJiNzJmMDlmNjVwLTEsCisgICAgLTB4MS4zYTI4YzU5ZDU0MzM5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc1CisgICAgMHgxLjZhMDllNjY3ZjNiYjZiODFhZmRiNTE3YTRlODU0OGI0cC0xLAorICAgIDB4MS4zYTI4YzU5ZDU0MzNhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc2CisgICAgLTB4MS42YTA5ZTY2N2YzYmI2YjgxYWZkYjUxN2E0ZTg1NDhiNHAtMSwKKyAgICAtMHgxLjNhMjhjNTlkNTQzM2FwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNzcKKyAgICAweDEuNmEwOWU2NjdmM2JjZDU4Yjk2NDM0NTM3YzAxMDBiOWJwLTEsCisgICAgMHgxLjNhMjhjNTlkNTQzM2JwNAorICB9LAorICB7IC8vIEVudHJ5IDEyNzgKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2Q1OGI5NjQzNDUzN2MwMTAwYjlicC0xLAorICAgIC0weDEuM2EyOGM1OWQ1NDMzYnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI3OQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmQwNzExZjQzN3AtMSwKKyAgICAweDEuNDZiOWMzNDc3NjRhMnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI4MAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkMDcxMWY0MzdwLTEsCisgICAgLTB4MS40NmI5YzM0Nzc2NGEycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgxCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5YzllYzgzcC0xLAorICAgIDB4MS40NmI5YzM0Nzc2NGEzcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWM5ZWM4M3AtMSwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTNwNAorICB9LAorICB7IC8vIEVudHJ5IDEyODMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4MWU0Y2ZwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTRwNAorICB9LAorICB7IC8vIEVudHJ5IDEyODQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODFlNGNmcC0xLAorICAgIC0weDEuNDZiOWMzNDc3NjRhNHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI4NQorICAgIDB4MS42YTA5ZTY2N2YzYmVlMWQyMTE3ZTUwMTM2OWZiZmZlZnAtMSwKKyAgICAweDEuNTM0YWMwZjE5ODYwYnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI4NgorICAgIC0weDEuNmEwOWU2NjdmM2JlZTFkMjExN2U1MDEzNjlmYmZmZWZwLTEsCisgICAgLTB4MS41MzRhYzBmMTk4NjBicDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg3CisgICAgMHgxLjZhMDllNjY3ZjNiZDc3YzgyYjE2NWM1ODA0YjdiODQzcC0xLAorICAgIDB4MS41MzRhYzBmMTk4NjBjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg4CisgICAgLTB4MS42YTA5ZTY2N2YzYmQ3N2M4MmIxNjVjNTgwNGI3Yjg0M3AtMSwKKyAgICAtMHgxLjUzNGFjMGYxOTg2MGNwNAorICB9LAorICB7IC8vIEVudHJ5IDEyODkKKyAgICAweDEuNmEwOWU2NjdmM2JjMGRiZTQ0YWU2ODliMzU2OThhMmZwLTEsCisgICAgMHgxLjUzNGFjMGYxOTg2MGRwNAorICB9LAorICB7IC8vIEVudHJ5IDEyOTAKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzBkYmU0NGFlNjg5YjM1Njk4YTJmcC0xLAorICAgIC0weDEuNTM0YWMwZjE5ODYwZHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI5MQorICAgIDB4MS4zZGM1ODViMmM3NDIxODEzMjZlMDdjNDAzNzU0NjRkZXAtNDgsCisgICAgMHgxLjVmZGJiZTliYmE3NzRwNAorICB9LAorICB7IC8vIEVudHJ5IDEyOTIKKyAgICAtMHgxLjNkYzU4NWIyYzc0MjE4MTMyNmUwN2M0MDM3NTQ2NGRlcC00OCwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzRwNAorICB9LAorICB7IC8vIEVudHJ5IDEyOTMKKyAgICAweDEuZWUyYzJkOTYzYTEwYzA5OTM3MDNlMjA0NDJhZDdiOGRwLTUxLAorICAgIDB4MS41ZmRiYmU5YmJhNzc1cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjk0CisgICAgLTB4MS5lZTJjMmQ5NjNhMTBjMDk5MzcwM2UyMDQ0MmFkN2I4ZHAtNTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc1cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjk1CisgICAgLTB4MS44NDc0ZjQ5YTcxN2JjZmQ5YjIzZjA3N2VjOGRkMTc1YnAtNDksCisgICAgMHgxLjVmZGJiZTliYmE3NzZwNAorICB9LAorICB7IC8vIEVudHJ5IDEyOTYKKyAgICAweDEuODQ3NGY0OWE3MTdiY2ZkOWIyM2YwNzdlYzhkZDE3NWJwLTQ5LAorICAgIC0weDEuNWZkYmJlOWJiYTc3NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTI5NworICAgIC0weDEuNmEwOWU2NjdmM2I5ZjRmY2Y5MTQ1YmYzZWYzOWY5MDFwLTEsCisgICAgMHgxLjZjNmNiYzQ1ZGM4ZGNwNAorICB9LAorICB7IC8vIEVudHJ5IDEyOTgKKyAgICAweDEuNmEwOWU2NjdmM2I5ZjRmY2Y5MTQ1YmYzZWYzOWY5MDFwLTEsCisgICAgLTB4MS42YzZjYmM0NWRjOGRjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjk5CisgICAgLTB4MS42YTA5ZTY2N2YzYmI1ZjA2ZGY3YzRmYjJkNzQ5NzJhZXAtMSwKKyAgICAweDEuNmM2Y2JjNDVkYzhkZHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTMwMAorICAgIDB4MS42YTA5ZTY2N2YzYmI1ZjA2ZGY3YzRmYjJkNzQ5NzJhZXAtMSwKKyAgICAtMHgxLjZjNmNiYzQ1ZGM4ZGRwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMDEKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2M5MTBjNWU0NDM3MDU1NGYwNWY0cC0xLAorICAgIDB4MS42YzZjYmM0NWRjOGRlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAyCisgICAgMHgxLjZhMDllNjY3ZjNiY2M5MTBjNWU0NDM3MDU1NGYwNWY0cC0xLAorICAgIC0weDEuNmM2Y2JjNDVkYzhkZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTMwMworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjZTg1Njg1YmRwLTEsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDVwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMDQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjZTg1Njg1YmRwLTEsCisgICAgLTB4MS43OGZkYjllZmZlYTQ1cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzA1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY2Y2I0YTQzZHAtMSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTMwNgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY2Y2I0YTQzZHAtMSwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDZwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMDcKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYxMTJjMmJjcC0xLAorICAgIDB4MS43OGZkYjllZmZlYTQ3cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzA4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYxMTJjMmJjcC0xLAorICAgIC0weDEuNzhmZGI5ZWZmZWE0N3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTMwOQorICAgIC0weDEuNmEwOWU2NjdmM2JlZWU0Y2UxZGQ1MWRhYzIzYzZiZGNwLTEsCisgICAgMHgxLjg1OGViNzlhMjBiYWVwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMTAKKyAgICAweDEuNmEwOWU2NjdmM2JlZWU0Y2UxZGQ1MWRhYzIzYzZiZGNwLTEsCisgICAgLTB4MS44NThlYjc5YTIwYmFlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzExCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ4NDQyZmI3NTVlMWY2OTcyZjQ4ZnAtMSwKKyAgICAweDEuODU4ZWI3OWEyMGJhZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTMxMgorICAgIDB4MS42YTA5ZTY2N2YzYmQ4NDQyZmI3NTVlMWY2OTcyZjQ4ZnAtMSwKKyAgICAtMHgxLjg1OGViNzlhMjBiYWZwNAorICB9LAorICB7IC8vIEVudHJ5IDEzMTMKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzFhMzkxNTBkNmE2MmE2OWY5NmRhcC0xLAorICAgIDB4MS44NThlYjc5YTIwYmIwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzE0CisgICAgMHgxLjZhMDllNjY3ZjNiYzFhMzkxNTBkNmE2MmE2OWY5NmRhcC0xLAorICAgIC0weDEuODU4ZWI3OWEyMGJiMHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTMxNQorICAgIDB4MS5mYTcyOTliMTc1NzNkMzczYzYxNTA5NjU3MmEwZGUwNHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnA2MgorICB9LAorICB7IC8vIEVudHJ5IDEzMTYKKyAgICAtMHgxLmZhNzI5OWIxNzU3M2QzNzNjNjE1MDk2NTcyYTBkZTA0cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnA2MgorICB9LAorICB7IC8vIEVudHJ5IDEzMTcKKyAgICAweDEuZmZmNmRmZDQyZGM1NDQzMGJjMDU3NmIwMGE4OGJkOTRwLTEsCisgICAgMHgxLjBwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzE4CisgICAgLTB4MS5mZmY2ZGZkNDJkYzU0NDMwYmMwNTc2YjAwYTg4YmQ5NHAtMSwKKyAgICAtMHgxLjBwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzE5CisgICAgMHgxLmU0NTZiODE4ZTczOTZiNDU5ODk5NzhkNGI3ZWJmN2IzcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDYzCisgIH0sCisgIHsgLy8gRW50cnkgMTMyMAorICAgIC0weDEuZTQ1NmI4MThlNzM5NmI0NTk4OTk3OGQ0YjdlYmY3YjNwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDYzCisgIH0sCisgIHsgLy8gRW50cnkgMTMyMQorICAgIC0weDEuODZkY2NhMGQ2ODllN2I1NmVmNzk0ODFiZTRhNjQ1YzZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIyCisgICAgMHgxLjg2ZGNjYTBkNjg5ZTdiNTZlZjc5NDgxYmU0YTY0NWM2cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAyNgorICB9LAorICB7IC8vIEVudHJ5IDEzMjMKKyAgICAtMHgxLjg2ZGNjOWJhYmIwYTQwZWU4NzVjYWIzYjllODkyNzU3cC0xLAorICAgIDB4MS4wcDI3CisgIH0sCisgIHsgLy8gRW50cnkgMTMyNAorICAgIDB4MS44NmRjYzliYWJiMGE0MGVlODc1Y2FiM2I5ZTg5Mjc1N3AtMSwKKyAgICAtMHgxLjBwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzI1CisgICAgLTB4MS44NmRjYzkxNTVmZTE4MmQ0NTE1NTk5NDI2YmIxNGI5NHAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAyNworICB9LAorICB7IC8vIEVudHJ5IDEzMjYKKyAgICAweDEuODZkY2M5MTU1ZmUxODJkNDUxNTU5OTQyNmJiMTRiOTRwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDI3CisgIH0sCisgIHsgLy8gRW50cnkgMTMyNworICAgIC0weDEuOGYyMmY4NGQ0MmRhMWY1NzQ2OWRmYWFjNDRhOGI3M2FwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzI4CisgICAgMHgxLjhmMjJmODRkNDJkYTFmNTc0NjlkZmFhYzQ0YThiNzNhcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAyMworICB9LAorICB7IC8vIEVudHJ5IDEzMjkKKyAgICAtMHgxLjhmMjJmODQzM2Q2ZWRmZTlhNGFmZjk2MjI1MTdjYWE5cC0xLAorICAgIDB4MS4wcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTMzMAorICAgIDB4MS44ZjIyZjg0MzNkNmVkZmU5YTRhZmY5NjIyNTE3Y2FhOXAtMSwKKyAgICAtMHgxLjBwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMxCisgICAgLTB4MS44ZjIyZjgyZjMyOTg1ZmUzMDY5OWM2ZTEyZDlkZmNlMnAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAyNAorICB9LAorICB7IC8vIEVudHJ5IDEzMzIKKyAgICAweDEuOGYyMmY4MmYzMjk4NWZlMzA2OTljNmUxMmQ5ZGZjZTJwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTMzMworICAgIC0weDEuODM3YjlkZGRjMWVhYmQzNzlkNzI5ZjU3NWZjMTE0NGNwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDEzMzQKKyAgICAweDEuODM3YjlkZGRjMWVhYmQzNzlkNzI5ZjU3NWZjMTE0NGNwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzM1CisgICAgLTB4MS44MzdiOWRkZGMxZWFlNzBjZTk4MDU1YTBlNDUwZDkzY3AtMSwKKyAgICAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTMzNgorICAgIDB4MS44MzdiOWRkZGMxZWFlNzBjZTk4MDU1YTBlNDUwZDkzY3AtMSwKKyAgICAtMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDEzMzcKKyAgICAtMHgxLjgzN2I5ZGRkYzFlYjNhYjc4MTliYzIzM2RiNDY5N2I1cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzM4CisgICAgMHgxLjgzN2I5ZGRkYzFlYjNhYjc4MTliYzIzM2RiNDY5N2I1cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTMzOQorICAgIDB4MS5kMThmNmVhZDFiNDQ2YjRiY2I3M2MyMzkwYjMzMGQ3NXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM0MAorICAgIC0weDEuZDE4ZjZlYWQxYjQ0NmI0YmNiNzNjMjM5MGIzMzBkNzVwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQxCisgICAgMHgxLmQxOGY2ZWFkMWI0NDVkZmFiODQ4MTg4MDA5YzliYjk1cC0xLAorICAgIDB4MS4wcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQyCisgICAgLTB4MS5kMThmNmVhZDFiNDQ1ZGZhYjg0ODE4ODAwOWM5YmI5NXAtMSwKKyAgICAtMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDEzNDMKKyAgICAweDEuZDE4ZjZlYWQxYjQ0NDM1ODkxZjBjNTBlMDE4MjY5ODhwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDEzNDQKKyAgICAtMHgxLmQxOGY2ZWFkMWI0NDQzNTg5MWYwYzUwZTAxODI2OTg4cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAxCisgIH0sCisgIHsgLy8gRW50cnkgMTM0NQorICAgIDB4MS5hZWQ1NDhmMDkwY2VkNzljNzljYmY3OTA0NDFmODE5N3AtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNDYKKyAgICAtMHgxLmFlZDU0OGYwOTBjZWQ3OWM3OWNiZjc5MDQ0MWY4MTk3cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNDcKKyAgICAweDEuYWVkNTQ4ZjA5MGNlZTA0MThkZDNkMjEzOGExZTc4NjVwLTEsCisgICAgMHgxLjBwMAorICB9LAorICB7IC8vIEVudHJ5IDEzNDgKKyAgICAtMHgxLmFlZDU0OGYwOTBjZWUwNDE4ZGQzZDIxMzhhMWU3ODY1cC0xLAorICAgIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM0OQorICAgIDB4MS5hZWQ1NDhmMDkwY2VmMThiYjVlMzg3MWExNGQ5NDYwOXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM1MAorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZjE4YmI1ZTM4NzFhMTRkOTQ2MDlwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUxCisgICAgMHgxLmVhZWU4NzQ0YjA1ZWYwN2NkMGI5MDg5MTMwNTk4MzE0cC0yLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTM1MgorICAgIC0weDEuZWFlZTg3NDRiMDVlZjA3Y2QwYjkwODkxMzA1OTgzMTRwLTIsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTM1MworICAgIDB4MS5lYWVlODc0NGIwNWVmZTg3NjRiYzM2NGZkODM3YjY2NnAtMiwKKyAgICAweDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNTQKKyAgICAtMHgxLmVhZWU4NzQ0YjA1ZWZlODc2NGJjMzY0ZmQ4MzdiNjY2cC0yLAorICAgIC0weDEuMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDEzNTUKKyAgICAweDEuZWFlZTg3NDRiMDVmMWE5YzhjYzI5MWNkMjc5ODEwNTFwLTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzU2CisgICAgLTB4MS5lYWVlODc0NGIwNWYxYTljOGNjMjkxY2QyNzk4MTA1MXAtMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzU3CisgICAgMHgxLmZhYWVlZDRmMzE1NzVjMjdmMzljMWQ3YzAxMmE0NDEzcC0zLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTM1OAorICAgIC0weDEuZmFhZWVkNGYzMTU3NWMyN2YzOWMxZDdjMDEyYTQ0MTNwLTMsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTM1OQorICAgIDB4MS5mYWFlZWQ0ZjMxNTc2YmE4OWRlYmRjNzM1MWU4YjFhZXAtMywKKyAgICAweDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEzNjAKKyAgICAtMHgxLmZhYWVlZDRmMzE1NzZiYTg5ZGViZGM3MzUxZThiMWFlcC0zLAorICAgIC0weDEuMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDEzNjEKKyAgICAweDEuZmFhZWVkNGYzMTU3OGFhOWYyOGI1YTYxZjM0ZGNjYjFwLTMsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYyCisgICAgLTB4MS5mYWFlZWQ0ZjMxNTc4YWE5ZjI4YjVhNjFmMzRkY2NiMXAtMywKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYzCisgICAgMHgxLmZlYWFlZWU4NmVlMzRjYzA1ZWZmMjg3NDBlZTdiNDY5cC00LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTM2NAorICAgIC0weDEuZmVhYWVlZTg2ZWUzNGNjMDVlZmYyODc0MGVlN2I0NjlwLTQsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTM2NQorICAgIDB4MS5mZWFhZWVlODZlZTM1Y2EwNjlhODY3MjFmODlmODVhNXAtNCwKKyAgICAweDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDEzNjYKKyAgICAtMHgxLmZlYWFlZWU4NmVlMzVjYTA2OWE4NjcyMWY4OWY4NWE1cC00LAorICAgIC0weDEuMHAtMworICB9LAorICB7IC8vIEVudHJ5IDEzNjcKKyAgICAweDEuZmVhYWVlZTg2ZWUzN2M2MDdlZmFlNDdkY2MwOTJjMWNwLTQsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzY4CisgICAgLTB4MS5mZWFhZWVlODZlZTM3YzYwN2VmYWU0N2RjYzA5MmMxY3AtNCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzY5CisgICAgMHgxLmZmYWFhZWVlZDRlZDliNTNhNDA4YzBmMmJjMDJjOGY5cC01LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTM3MAorICAgIC0weDEuZmZhYWFlZWVkNGVkOWI1M2E0MDhjMGYyYmMwMmM4ZjlwLTUsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTM3MQorICAgIDB4MS5mZmFhYWVlZWQ0ZWRhYjRiYTRiMzY1ZWQyNWE5NTk1ZnAtNSwKKyAgICAweDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEzNzIKKyAgICAtMHgxLmZmYWFhZWVlZDRlZGFiNGJhNGIzNjVlZDI1YTk1OTVmcC01LAorICAgIC0weDEuMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDEzNzMKKyAgICAweDEuZmZhYWFlZWVkNGVkY2IzYmE2MDhhZmUxZjhmNGZhNmJwLTUsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzc0CisgICAgLTB4MS5mZmFhYWVlZWQ0ZWRjYjNiYTYwOGFmZTFmOGY0ZmE2YnAtNSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzc1CisgICAgMHgxLmZmZWFhYWVlZWU4NmQ4Y2NmZTM2OGNkOTVlMzhmMDAzcC02LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTM3NgorICAgIC0weDEuZmZlYWFhZWVlZTg2ZDhjY2ZlMzY4Y2Q5NWUzOGYwMDNwLTYsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTM3NworICAgIDB4MS5mZmVhYWFlZWVlODZlOGNhZmU0MTM3NmQ0NzkxOTU3OXAtNiwKKyAgICAweDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzNzgKKyAgICAtMHgxLmZmZWFhYWVlZWU4NmU4Y2FmZTQxMzc2ZDQ3OTE5NTc5cC02LAorICAgIC0weDEuMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEzNzkKKyAgICAweDEuZmZlYWFhZWVlZTg3MDhjNmZlNTY4Yzk1MWE0MjgwNjlwLTYsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgwCisgICAgLTB4MS5mZmVhYWFlZWVlODcwOGM2ZmU1NjhjOTUxYTQyODA2OXAtNiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgxCisgICAgMHgxLmZmZmFhYWFlZWVlZDNlZDVjOWM1YWI2NTM4ZjljY2UwcC03LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTM4MgorICAgIC0weDEuZmZmYWFhYWVlZWVkM2VkNWM5YzVhYjY1MzhmOWNjZTBwLTcsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTM4MworICAgIDB4MS5mZmZhYWFhZWVlZWQ0ZWQ1NDljNjU2MGY4ODllZTUzMXAtNywKKyAgICAweDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDEzODQKKyAgICAtMHgxLmZmZmFhYWFlZWVlZDRlZDU0OWM2NTYwZjg4OWVlNTMxcC03LAorICAgIC0weDEuMHAtNgorICB9LAorICB7IC8vIEVudHJ5IDEzODUKKyAgICAweDEuZmZmYWFhYWVlZWVkNmVkNDQ5YzdhYjY0MjdlOGZkZDRwLTcsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzg2CisgICAgLTB4MS5mZmZhYWFhZWVlZWQ2ZWQ0NDljN2FiNjQyN2U4ZmRkNHAtNywKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzg3CisgICAgMHgxLmZmZmZmZmZhYWFhYTlhYWVlZWVmNmVlZDRlZDQ0MmE0cC0xNSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzg4CisgICAgLTB4MS5mZmZmZmZmYWFhYWE5YWFlZWVlZjZlZWQ0ZWQ0NDJhNHAtMTUsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xNQorICB9LAorICB7IC8vIEVudHJ5IDEzODkKKyAgICAweDEuZmZmZmZmZmFhYWFhYWFhZWVlZWVlZWVkNGVkNGVkNGZwLTE1LAorICAgIDB4MS4wcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEzOTAKKyAgICAtMHgxLmZmZmZmZmZhYWFhYWFhYWVlZWVlZWVlZDRlZDRlZDRmcC0xNSwKKyAgICAtMHgxLjBwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTM5MQorICAgIDB4MS5mZmZmZmZmYWFhYWFjYWFlZWVlZGVlZWQ0ZWQ2NDJhNHAtMTUsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTM5MgorICAgIC0weDEuZmZmZmZmZmFhYWFhY2FhZWVlZWRlZWVkNGVkNjQyYTRwLTE1LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkzCisgICAgMHgxLmZmZmZmZmZmZmZmZmVlYWFhYWFhYWFhYWFhY2FlZWVlcC0yOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzk0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZlZWFhYWFhYWFhYWFhYWNhZWVlZXAtMjgsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0yOAorICB9LAorICB7IC8vIEVudHJ5IDEzOTUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmVhYWFhYWFhYWFhYWFhYWVlZWVwLTI4LAorICAgIDB4MS4wcC0yNworICB9LAorICB7IC8vIEVudHJ5IDEzOTYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZlYWFhYWFhYWFhYWFhYWFlZWVlcC0yOCwKKyAgICAtMHgxLjBwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTM5NworICAgIDB4MS4wMDAwMDAwMDAwMDAwZjU1NTU1NTU1NTU1NTM1Nzc3N3AtMjcsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTM5OAorICAgIC0weDEuMDAwMDAwMDAwMDAwMGY1NTU1NTU1NTU1NTUzNTc3NzdwLTI3LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzk5CisgICAgMHgxLmZmZmZmZmZmZmZmZmVmZmFhYWFhYWFhYWFhYWIyYWFlcC0zMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDAwCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlZmZhYWFhYWFhYWFhYWFiMmFhZXAtMzEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0zMQorICB9LAorICB7IC8vIEVudHJ5IDE0MDEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmYWFhYWFhYWFhYWFhYWFhYWVwLTMxLAorICAgIDB4MS4wcC0zMAorICB9LAorICB7IC8vIEVudHJ5IDE0MDIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmFhYWFhYWFhYWFhYWFhYWFlcC0zMSwKKyAgICAtMHgxLjBwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTQwMworICAgIDB4MS4wMDAwMDAwMDAwMDAwZmZkNTU1NTU1NTU1NTU0ZDU1N3AtMzAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTQwNAorICAgIC0weDEuMDAwMDAwMDAwMDAwMGZmZDU1NTU1NTU1NTU1NGQ1NTdwLTMwLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDA1CisgICAgLTB4MS40NTJmYzk4YjM0ZTk2YjYxMTM5YjA5YTdjODRhNDRiZHAtOCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDE0MDYKKyAgICAweDEuNDUyZmM5OGIzNGU5NmI2MTEzOWIwOWE3Yzg0YTQ0YmRwLTgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDE0MDcKKyAgICAweDEuNDUyZmM5OGIzNGU5NmI2MTEzOWIwOWE3Yzg0YTQ0YmRwLTgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDE0MDgKKyAgICAtMHgxLjQ1MmZjOThiMzRlOTZiNjExMzliMDlhN2M4NGE0NGJkcC04LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTQwOQorICAgIDB4MS40NTJmYzk4YjM0ZTk2YjYxMTM5YjA5YTdjODRhNDRiZHAtOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTQxMAorICAgIC0weDEuNDUyZmM5OGIzNGU5NmI2MTEzOWIwOWE3Yzg0YTQ0YmRwLTgsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDExCisgICAgMHgxLmRhYTM2NzdjNmVlOGEyMmViNmM0YjEyY2ExMGNlMDIxcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEyCisgICAgLTB4MS5kYWEzNjc3YzZlZThhMjJlYjZjNGIxMmNhMTBjZTAyMXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDE0MTMKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQzNmUyZWRwLTUzLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDE0CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDM2ZTJlZHAtNTMsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDE1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDE2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDE0MTcKKyAgICAweDEuYWVkNTQ4ZjA5MGNlZjE4YmI1ZTM4NzFhMTRkOTQ2MDlwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDE0MTgKKyAgICAtMHgxLmFlZDU0OGYwOTBjZWYxOGJiNWUzODcxYTE0ZDk0NjA5cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQxOQorICAgIDB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAweDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQyMAorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZTA0MThkZDNkMjEzOGExZTc4NjVwLTEsCisgICAgLTB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIxCisgICAgMHgxLmFlZDU0OGYwOTBjZWQ3OWM3OWNiZjc5MDQ0MWY4MTk3cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQyMgorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZDc5Yzc5Y2JmNzkwNDQxZjgxOTdwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQyMworICAgIDB4MS42YTA5ZTY2N2YzYmNjNWU5ZmVlMzUyZjUwZmQzZjRlOXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0MjQKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2M1ZTlmZWUzNTJmNTBmZDNmNGU5cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0MjUKKyAgICAweDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDI2CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDI3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgMTQyOAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgLTB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgMTQyOQorICAgIDB4MS5mZmZmZmZmZmZmZmZkZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDE0MzAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmRmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDE0MzEKKyAgICAweDEuZmZmZmZmZmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmNwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDMyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZiZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTAyMywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmNwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDMzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDc0LAorICAgIDB4MS4wcC0xMDczCisgIH0sCisgIHsgLy8gRW50cnkgMTQzNAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwNzQsCisgICAgLTB4MS4wcC0xMDczCisgIH0sCisgIHsgLy8gRW50cnkgMTQzNQorICAgIDAuMCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDE0MzYKKyAgICAtMC4wLAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDE0MzcKKyAgICAwLjAsCisgICAgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgMTQzOAorICAgIC0wLjAsCisgICAgLTAuMAorICB9LAorfTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKK1RFU1QobWF0aF9zaW4sIHNpbl9pbnRlbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19zaW5faW50ZWxfZGF0YSkvc2l6ZW9mKHNpbl9pbnRlbF9kYXRhX3QpOyBpKyspIHsKKyAgICBFWFBFQ1RfRE9VQkxFX0VRKGdfc2luX2ludGVsX2RhdGFbaV0uZXhwZWN0ZWQsIHNpbihnX3Npbl9pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfc2luY29zX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF9zaW5jb3NfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhYjJjMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21hdGhfc2luY29zX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNDc4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQordHlwZWRlZiBzdHJ1Y3QgeworICBkb3VibGUgc2luX2V4cGVjdGVkOworICBkb3VibGUgY29zX2V4cGVjdGVkOworICBkb3VibGUgY2FsbF9kYXRhOworfSBzaW5jb3NfaW50ZWxfZGF0YV90OworCitzdGF0aWMgc2luY29zX2ludGVsX2RhdGFfdCBnX3NpbmNvc19pbnRlbF9kYXRhW10gPSB7CisgIHsgLy8gRW50cnkgMAorICAgIC0weDEuY2U5YTk0ZWE5YzJhZDk1NTk3YjExOTNiMjMwMGQxOWFwLTEsCisgICAgLTB4MS5iNmQzMDU3Nzc2ZGMzODMzNWIxNjc0NWYyZDc1NmFiNnAtMiwKKyAgICAtMHgxLjAxYzAwMDAwM3AxLAorICB9LAorICB7IC8vIEVudHJ5IDEKKyAgICAweDEuY2U5YTk0ZWE5YzJhZDk1NTk3YjExOTNiMjMwMGQxOWFwLTEsCisgICAgLTB4MS5iNmQzMDU3Nzc2ZGMzODMzNWIxNjc0NWYyZDc1NmFiNnAtMiwKKyAgICAweDEuMDFjMDAwMDAzcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMgorICAgIC0weDEuY2UyY2FkMmY5MjE1NzE1M2I0YTllMDEyZTM0NjFkMGFwLTEsCisgICAgLTB4MS5iOGExNGM3NDViZDRjODMyYmFlOTc4NTY1NWM5MWI2MHAtMiwKKyAgICAtMHgxLjAxZmZmYzA4MHAxLAorICB9LAorICB7IC8vIEVudHJ5IDMKKyAgICAweDEuY2UyY2FkMmY5MjE1NzE1M2I0YTllMDEyZTM0NjFkMGFwLTEsCisgICAgLTB4MS5iOGExNGM3NDViZDRjODMyYmFlOTc4NTY1NWM5MWI2MHAtMiwKKyAgICAweDEuMDFmZmZjMDgwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNAorICAgIC0weDEuMWE3NDQ0NzI2ZjVlOWRjMmVlMDY5ZGMzZTUwMGFiNGZwLTIsCisgICAgMHgxLmVjMjMxODAyOTE3YmRmZmE2MjdhYjZhNTlhYmUzZjdkcC0xLAorICAgIC0weDEuMWUyYTE1NjNlMDY4ZXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1CisgICAgMHgxLjFhNzQ0NDcyNmY1ZTlkYzJlZTA2OWRjM2U1MDBhYjRmcC0yLAorICAgIDB4MS5lYzIzMTgwMjkxN2JkZmZhNjI3YWI2YTU5YWJlM2Y3ZHAtMSwKKyAgICAweDEuMWUyYTE1NjNlMDY4ZXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2CisgICAgLTB4MS5lZmRhYjVlNjVjOGZkNTUwZDQ2ODhiNjI3OTFmZTY5NHAtMSwKKyAgICAweDEuZmU0MTIzZDI2NmNhMzdmYWVlZTgyMjEzOGViMzMxZDNwLTMsCisgICAgLTB4MS44M2VmMjE5NmY5MmYwcDg3LAorICB9LAorICB7IC8vIEVudHJ5IDcKKyAgICAweDEuZWZkYWI1ZTY1YzhmZDU1MGQ0Njg4YjYyNzkxZmU2OTRwLTEsCisgICAgMHgxLmZlNDEyM2QyNjZjYTM3ZmFlZWU4MjIxMzhlYjMzMWQzcC0zLAorICAgIDB4MS44M2VmMjE5NmY5MmYwcDg3LAorICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICAtMHgxLmVmZjVlZGIxYWQ0MTZjYjZjYTMxMDlmMWMwZGZjMzRhcC0xLAorICAgIDB4MS5mYzk5MzVhNzQ4MTcxN2ZhOGFlY2E3YTljNTgzMzA4NHAtMywKKyAgICAtMHgxLmE0ODZkNzk3NjRmYjhwODYsCisgIH0sCisgIHsgLy8gRW50cnkgOQorICAgIDB4MS5lZmY1ZWRiMWFkNDE2Y2I2Y2EzMTA5ZjFjMGRmYzM0YXAtMSwKKyAgICAweDEuZmM5OTM1YTc0ODE3MTdmYThhZWNhN2E5YzU4MzMwODRwLTMsCisgICAgMHgxLmE0ODZkNzk3NjRmYjhwODYsCisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAtMHgxLmI3OGYyYzk3Yzg4MDI4Mzk2ZWM5NGJhOWVhNThkZDY4cC0yLAorICAgIDB4MS5jZTZkZWE2Nzg4ZmRlNDI1ZjY4ZmUzM2IwZmZjYzI0NHAtMSwKKyAgICAtMHgxLmM2NTE3MzU1NmNjZmJwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMTEKKyAgICAweDEuYjc4ZjJjOTdjODgwMjgzOTZlYzk0YmE5ZWE1OGRkNjhwLTIsCisgICAgMHgxLmNlNmRlYTY3ODhmZGU0MjVmNjhmZTMzYjBmZmNjMjQ0cC0xLAorICAgIDB4MS5jNjUxNzM1NTZjY2ZicC0yLAorICB9LAorICB7IC8vIEVudHJ5IDEyCisgICAgLTB4MS5jNzg4NWFlZjMzYTk0ZmZjNWFlMDZiZTk0NDRlZmFkNXAtMywKKyAgICAweDEuZjMyYzg3OTIwMDYzNDliMzNiMDlmZTU3ZjgwZDllZDFwLTEsCisgICAgLTB4MS5jYjZwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMTMKKyAgICAweDEuYzc4ODVhZWYzM2E5NGZmYzVhZTA2YmU5NDQ0ZWZhZDVwLTMsCisgICAgMHgxLmYzMmM4NzkyMDA2MzQ5YjMzYjA5ZmU1N2Y4MGQ5ZWQxcC0xLAorICAgIDB4MS5jYjZwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMTQKKyAgICAtMHgxLmY3NGE5N2FiYjQ3YmM4MjNlOTJlYjlkNjZmMWQ4YjU0cC0zLAorICAgIDB4MS5mMDRjODU5ZTA2MmI5MjAyYWEyYjliZjA0ODZiNWFmZHAtMSwKKyAgICAtMHgxLmZjN2ZmZmZmZmZmZmVwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMTUKKyAgICAweDEuZjc0YTk3YWJiNDdiYzgyM2U5MmViOWQ2NmYxZDhiNTRwLTMsCisgICAgMHgxLmYwNGM4NTllMDYyYjkyMDJhYTJiOWJmMDQ4NmI1YWZkcC0xLAorICAgIDB4MS5mYzdmZmZmZmZmZmZlcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDE2CisgICAgMHgxLjAwMDAwMDAwMDAwMDJmZmZkNTU1NTU1NTU1NTUzZDU1cC0zMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZWZmZmZmZmZmZmZmZmEwcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAzcC0zMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIC0weDEuMDAwMDAwMDAwMDAwMmZmZmQ1NTU1NTU1NTU1NTNkNTVwLTMyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZlZmZmZmZmZmZmZmZmYTBwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAzcC0zMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOAorICAgIDB4MS5kMThmNmVhZDE5OWEzYjk1NDMwZDU1MTZlOTNjOGQ3YnAtMSwKKyAgICAtMHgxLmFhMjI2NTc1M2U2Njg3ZmRlNzYyNjllZTkyYTc4NGIwcC0yLAorICAgIDB4MS4wMDAwMDAwMDAxMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDE5CisgICAgLTB4MS5kMThmNmVhZDE5OWEzYjk1NDMwZDU1MTZlOTNjOGQ3YnAtMSwKKyAgICAtMHgxLmFhMjI2NTc1M2U2Njg3ZmRlNzYyNjllZTkyYTc4NGIwcC0yLAorICAgIC0weDEuMDAwMDAwMDAwMTBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMAorICAgIDB4MS5iNjRkNTlkZDhhNTI0OWUwMTExM2Y0Y2IzN2QxM2M0MHAtMSwKKyAgICAtMHgxLjA4YTQ0NWFkNDczN2U4MDA2MGNmM2E1ZmY5NGQzMDY3cC0xLAorICAgIDB4MS4wMDFwNTU3LAorICB9LAorICB7IC8vIEVudHJ5IDIxCisgICAgLTB4MS5iNjRkNTlkZDhhNTI0OWUwMTExM2Y0Y2IzN2QxM2M0MHAtMSwKKyAgICAtMHgxLjA4YTQ0NWFkNDczN2U4MDA2MGNmM2E1ZmY5NGQzMDY3cC0xLAorICAgIC0weDEuMDAxcDU1NywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMgorICAgIDB4MS5jZTc3ZjI0ZmQ0ZDlhNzkwMTI1ZmY1MjkwYTYyYjdmMXAtMSwKKyAgICAtMHgxLmI3NjRmNDBjOTcxNmI4MzRiYjcyNTg5MzQ4Y2ZhNGI4cC0yLAorICAgIDB4MS4wMWQ0MzEzNzU3NDgycDEsCisgIH0sCisgIHsgLy8gRW50cnkgMjMKKyAgICAtMHgxLmNlNzdmMjRmZDRkOWE3OTAxMjVmZjUyOTBhNjJiN2YxcC0xLAorICAgIC0weDEuYjc2NGY0MGM5NzE2YjgzNGJiNzI1ODkzNDhjZmE0YjhwLTIsCisgICAgLTB4MS4wMWQ0MzEzNzU3NDgycDEsCisgIH0sCisgIHsgLy8gRW50cnkgMjQKKyAgICAweDEuY2UzOWI3ZGY3ZjRhY2I4MWUzN2M1MzI2MzhmOWJmNDlwLTEsCisgICAgLTB4MS5iODZhOTA4ZjA1YzBhODM5ZTE5ZDRhYTYzMTU2ZDMyYnAtMiwKKyAgICAweDEuMDFmODY3ZDQ0YmM4MnAxLAorICB9LAorICB7IC8vIEVudHJ5IDI1CisgICAgLTB4MS5jZTM5YjdkZjdmNGFjYjgxZTM3YzUzMjYzOGY5YmY0OXAtMSwKKyAgICAtMHgxLmI4NmE5MDhmMDVjMGE4MzllMTlkNGFhNjMxNTZkMzJicC0yLAorICAgIC0weDEuMDFmODY3ZDQ0YmM4MnAxLAorICB9LAorICB7IC8vIEVudHJ5IDI2CisgICAgMHgxLmNlNzAwNDZhY2I4MGRlNzVlOTAzNDY4Y2VhOGFiNDI3cC0xLAorICAgIC0weDEuYjc4NjU0NzY2Yzc2NDgzY2U5MGEwYmMyYWM5NTdiNTlwLTIsCisgICAgMHgxLjA5ODYwZThlZDFlOTBwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNworICAgIC0weDEuY2U3MDA0NmFjYjgwZGU3NWU5MDM0NjhjZWE4YWI0MjdwLTEsCisgICAgLTB4MS5iNzg2NTQ3NjZjNzY0ODNjZTkwYTBiYzJhYzk1N2I1OXAtMiwKKyAgICAtMHgxLjA5ODYwZThlZDFlOTBwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIDB4MS5jZTY4NTY0ZTI1MWYxNjI4NWQ2MDRlMDQ2NTdmMzBlNnAtMSwKKyAgICAtMHgxLmI3YTZhNTZmNTc5NjY4M2M1OGUwMWI1YjcwNjFjMTZjcC0yLAorICAgIDB4MS4wOTg3MmNjZTUxZmJkcDMsCisgIH0sCisgIHsgLy8gRW50cnkgMjkKKyAgICAtMHgxLmNlNjg1NjRlMjUxZjE2Mjg1ZDYwNGUwNDY1N2YzMGU2cC0xLAorICAgIC0weDEuYjdhNmE1NmY1Nzk2NjgzYzU4ZTAxYjViNzA2MWMxNmNwLTIsCisgICAgLTB4MS4wOTg3MmNjZTUxZmJkcDMsCisgIH0sCisgIHsgLy8gRW50cnkgMzAKKyAgICAtMHgxLmNlOGFiMzJmM2IwMDIwNjVmMmQ5OWU1N2ExMDcyNzA1cC0xLAorICAgIC0weDEuYjcxNWY3NjljZjFlNTgyZTIzYTE1ZThiODBhNzA0ODZwLTIsCisgICAgMHgxLjExM2IxM2IxM2IyMjRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMQorICAgIDB4MS5jZThhYjMyZjNiMDAyMDY1ZjJkOTllNTdhMTA3MjcwNXAtMSwKKyAgICAtMHgxLmI3MTVmNzY5Y2YxZTU4MmUyM2ExNWU4YjgwYTcwNDg2cC0yLAorICAgIC0weDEuMTEzYjEzYjEzYjIyNHAyLAorICB9LAorICB7IC8vIEVudHJ5IDMyCisgICAgMHgxLmMyZGY1NzE4OGQzMDk5ZTFiYWY3ZjcyMWQ3MzE4YmQ5cC0xLAorICAgIDB4MS5lNTM2YWUzOTVkZmNlMDAxNDU3OTcwYzhhYWFjM2IxZnAtMiwKKyAgICAweDEuMTNjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzMKKyAgICAtMHgxLmMyZGY1NzE4OGQzMDk5ZTFiYWY3ZjcyMWQ3MzE4YmQ5cC0xLAorICAgIDB4MS5lNTM2YWUzOTVkZmNlMDAxNDU3OTcwYzhhYWFjM2IxZnAtMiwKKyAgICAtMHgxLjEzY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgMHgxLmI3ZGNkN2M4NWM4MjA4MzhlZWNmYTUzZTUyMDc4YjJicC0yLAorICAgIC0weDEuY2U1YjczNzIwNDZlYWE0NjdmNDllMWRlYmUzNjYyZGZwLTEsCisgICAgMHgxLjFmNjI4YzU2MTA3MTdwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNQorICAgIC0weDEuYjdkY2Q3Yzg1YzgyMDgzOGVlY2ZhNTNlNTIwNzhiMmJwLTIsCisgICAgLTB4MS5jZTViNzM3MjA0NmVhYTQ2N2Y0OWUxZGViZTM2NjJkZnAtMSwKKyAgICAtMHgxLjFmNjI4YzU2MTA3MTdwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNgorICAgIDB4MS5mZjM0NjZiMWVjOGJlZDk3OGY3YzI3MDE4YmMwOTY3OHAtMSwKKyAgICAweDEuYzg2Y2FhMDQ5Mjk4NTdjMjgxNmQzMDY5M2ZjZWFiMzZwLTUsCisgICAgMHgxLjFmNjk5ZDcwOGQ0OTdwMTYsCisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAtMHgxLmZmMzQ2NmIxZWM4YmVkOTc4ZjdjMjcwMThiYzA5Njc4cC0xLAorICAgIDB4MS5jODZjYWEwNDkyOTg1N2MyODE2ZDMwNjkzZmNlYWIzNnAtNSwKKyAgICAtMHgxLjFmNjk5ZDcwOGQ0OTdwMTYsCisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAweDEuYjYxZDZhZmY3NTRjMjgzNTY5N2I1YWE1MzM5YjYzNWNwLTIsCisgICAgLTB4MS5jZWM1OWIyZDIzMGE4M2E4NjgwNDczMGFmZGYxYmVjZnAtMSwKKyAgICAweDEuMWY3MjA2NDYyMGVmNHAzLAorICB9LAorICB7IC8vIEVudHJ5IDM5CisgICAgLTB4MS5iNjFkNmFmZjc1NGMyODM1Njk3YjVhYTUzMzliNjM1Y3AtMiwKKyAgICAtMHgxLmNlYzU5YjJkMjMwYTgzYTg2ODA0NzMwYWZkZjFiZWNmcC0xLAorICAgIC0weDEuMWY3MjA2NDYyMGVmNHAzLAorICB9LAorICB7IC8vIEVudHJ5IDQwCisgICAgMHgxLmNkZjYwNDgzOGU0OTliZDVkOWQyNzEyMzk3YjIzYzA3cC0xLAorICAgIDB4MS5iOTg2NTZiODViYzI2ODMyMTZhOTQ3MzM1ZWE2ODlmYnAtMiwKKyAgICAweDEuMWZmZmZmZGNlZmU0MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgLTB4MS5jZGY2MDQ4MzhlNDk5YmQ1ZDlkMjcxMjM5N2IyM2MwN3AtMSwKKyAgICAweDEuYjk4NjU2Yjg1YmMyNjgzMjE2YTk0NzMzNWVhNjg5ZmJwLTIsCisgICAgLTB4MS4xZmZmZmZkY2VmZTQwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDIKKyAgICAweDEuY2U5MTMzMjk2OTZjZDNmYTQ3MWM3YjAwODkxMDc1ZDRwLTEsCisgICAgMHgxLmI2ZmE5MmU1ZjU3NmM4MzRmYzE1ZDg5OThmY2NjNzI4cC0yLAorICAgIDB4MS4yMGI0NzhjNGFhOWVkcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDMKKyAgICAtMHgxLmNlOTEzMzI5Njk2Y2QzZmE0NzFjN2IwMDg5MTA3NWQ0cC0xLAorICAgIDB4MS5iNmZhOTJlNWY1NzZjODM0ZmMxNWQ4OTk4ZmNjYzcyOHAtMiwKKyAgICAtMHgxLjIwYjQ3OGM0YWE5ZWRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NAorICAgIDB4MS5jZWFiYzAyNWVkM2Q1NzMyM2ZjYTUxNjI2ZDJiZjI4Y3AtMSwKKyAgICAweDEuYjY4YTk4ODYwNGE3ZTgzY2QzODJmZGYzMjlkMGQ3NmVwLTIsCisgICAgMHgxLjIwZDM3NDU2ZTc0NTNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NQorICAgIC0weDEuY2VhYmMwMjVlZDNkNTczMjNmY2E1MTYyNmQyYmYyOGNwLTEsCisgICAgMHgxLmI2OGE5ODg2MDRhN2U4M2NkMzgyZmRmMzI5ZDBkNzZlcC0yLAorICAgIC0weDEuMjBkMzc0NTZlNzQ1M3AwLAorICB9LAorICB7IC8vIEVudHJ5IDQ2CisgICAgMHgxLmNlYjAyMmI2YjVhZTA3YTI2N2YwZTdkYzZhMTRhMjE0cC0xLAorICAgIDB4MS5iNjc4MTZiODBlZDBhODJkMTFhZWU3YWFhODAwOGZlZHAtMiwKKyAgICAweDEuMjBkODkzMGNkZjYwMnAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ3CisgICAgLTB4MS5jZWIwMjJiNmI1YWUwN2EyNjdmMGU3ZGM2YTE0YTIxNHAtMSwKKyAgICAweDEuYjY3ODE2YjgwZWQwYTgyZDExYWVlN2FhYTgwMDhmZWRwLTIsCisgICAgLTB4MS4yMGQ4OTMwY2RmNjAycDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDgKKyAgICAtMHgxLjllNjJhY2E1M2M2NjA4MDFiNjI2MDQwMThhOWQxOWRkcC00LAorICAgIC0weDEuZmQ1ZjgzMGY4NjBmMzMzZGU0OTBhNDJjMmYwNDUwMTJwLTEsCisgICAgMHgxLjMwZDVmOGU1NGI2ZDhwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OQorICAgIDB4MS45ZTYyYWNhNTNjNjYwODAxYjYyNjA0MDE4YTlkMTlkZHAtNCwKKyAgICAtMHgxLmZkNWY4MzBmODYwZjMzM2RlNDkwYTQyYzJmMDQ1MDEycC0xLAorICAgIC0weDEuMzBkNWY4ZTU0YjZkOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDUwCisgICAgMHgxLjNlZDJhZWVmZWFmYzk3ZjBlZTBmYjNmYTRmYjQ2MDUycC0zLAorICAgIDB4MS5mOWMyMDFlNGViNjVmZDVlNWRiZDk3NjYyNTA1ZmY2ZnAtMSwKKyAgICAweDEuNDAycC0zLAorICB9LAorICB7IC8vIEVudHJ5IDUxCisgICAgLTB4MS4zZWQyYWVlZmVhZmM5N2YwZWUwZmIzZmE0ZmI0NjA1MnAtMywKKyAgICAweDEuZjljMjAxZTRlYjY1ZmQ1ZTVkYmQ5NzY2MjUwNWZmNmZwLTEsCisgICAgLTB4MS40MDJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTIKKyAgICAtMHgxLmZmNjVkMmZmNGE4Y2M0MWNiOGJiNmRmMzA2ZTA3YmU3cC0xLAorICAgIC0weDEuOGQzODIyZWYyNjBhNTdiMzg1NjExZjA4NTc3Yjc1ZDlwLTUsCisgICAgMHgxLjRhNDBlYzE0OWE2NmZwMTYsCisgIH0sCisgIHsgLy8gRW50cnkgNTMKKyAgICAweDEuZmY2NWQyZmY0YThjYzQxY2I4YmI2ZGYzMDZlMDdiZTdwLTEsCisgICAgLTB4MS44ZDM4MjJlZjI2MGE1N2IzODU2MTFmMDg1NzdiNzVkOXAtNSwKKyAgICAtMHgxLjRhNDBlYzE0OWE2NmZwMTYsCisgIH0sCisgIHsgLy8gRW50cnkgNTQKKyAgICAweDEuNGZmZmZmZmZmZjlmODgwMDAwMDAwODRmMjJjY2NjY2NwLTIwLAorICAgIDB4MS5mZmZmZmZmZmZlNDcwMDAwMDAwMDNmNGViZmZmZmZmY3AtMSwKKyAgICAweDEuNXAtMjAsCisgIH0sCisgIHsgLy8gRW50cnkgNTUKKyAgICAtMHgxLjRmZmZmZmZmZmY5Zjg4MDAwMDAwMDg0ZjIyY2NjY2NjcC0yMCwKKyAgICAweDEuZmZmZmZmZmZmZTQ3MDAwMDAwMDAzZjRlYmZmZmZmZmNwLTEsCisgICAgLTB4MS41cC0yMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NgorICAgIDB4MS43OWM1OTllMWU5MWFmODA5ZjllNjk3NzE3OTZjZDUwN3AtMSwKKyAgICAtMHgxLjU5OTcwNjVjYjk2NTM3MDJkNGM5ZDliNmJjNThmNzY4cC0xLAorICAgIDB4MS41Mjk0YTUyOTRhNTI4cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNTcKKyAgICAtMHgxLjc5YzU5OWUxZTkxYWY4MDlmOWU2OTc3MTc5NmNkNTA3cC0xLAorICAgIC0weDEuNTk5NzA2NWNiOTY1MzcwMmQ0YzlkOWI2YmM1OGY3NjhwLTEsCisgICAgLTB4MS41Mjk0YTUyOTRhNTI4cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNTgKKyAgICAtMHgxLmZmNzk5NjA3M2JiYTZjNmVkZTQ2ZjUyZDQ0NTYyM2M5cC0xLAorICAgIDB4MS43MmU3NDM3OTEwY2MwODNmYWM0ZjZmNjJhMmViMzhhZnAtNSwKKyAgICAweDEuNTc0MzFhYWNmNWM1OHAxNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OQorICAgIDB4MS5mZjc5OTYwNzNiYmE2YzZlZGU0NmY1MmQ0NDU2MjNjOXAtMSwKKyAgICAweDEuNzJlNzQzNzkxMGNjMDgzZmFjNGY2ZjYyYTJlYjM4YWZwLTUsCisgICAgLTB4MS41NzQzMWFhY2Y1YzU4cDE2LAorICB9LAorICB7IC8vIEVudHJ5IDYwCisgICAgMHgxLmY4MWM0ZjlhNTE4MTQ2MmFlNzM1ZTIxMjIyZDQ5OGM0cC0xLAorICAgIDB4MS42NjIzZDJlYjZhZGQxZmZjMzk4YTNjMjA0NDdmOWQwNnAtMywKKyAgICAweDEuNjUycDAsCisgIH0sCisgIHsgLy8gRW50cnkgNjEKKyAgICAtMHgxLmY4MWM0ZjlhNTE4MTQ2MmFlNzM1ZTIxMjIyZDQ5OGM0cC0xLAorICAgIDB4MS42NjIzZDJlYjZhZGQxZmZjMzk4YTNjMjA0NDdmOWQwNnAtMywKKyAgICAtMHgxLjY1MnAwLAorICB9LAorICB7IC8vIEVudHJ5IDYyCisgICAgLTB4MS5jNDJhMDkxMDI2ZjQ1Mjg2ZDA2MTA4NWM1YzlmZGRiN3AtMSwKKyAgICAweDEuZTA2MTk5NjBhMTFjNjgwMWU4MGFiMGM5ZTI1Zjg5ZDBwLTIsCisgICAgMHgxLjZmN2JkZWY3YmRlZjRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MworICAgIDB4MS5jNDJhMDkxMDI2ZjQ1Mjg2ZDA2MTA4NWM1YzlmZGRiN3AtMSwKKyAgICAweDEuZTA2MTk5NjBhMTFjNjgwMWU4MGFiMGM5ZTI1Zjg5ZDBwLTIsCisgICAgLTB4MS42ZjdiZGVmN2JkZWY0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjQKKyAgICAtMHgxLmY5YzQzNjRiYTE5OGY3ZTMyYjY3MjM2NmMzNGI4YjdkcC0yLAorICAgIDB4MS5iZDMwOWYzZGZjZDQ4OTEyOGU1ZWNiYzMxNjgwYzRhNXAtMSwKKyAgICAweDEuNzExcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjUKKyAgICAweDEuZjljNDM2NGJhMTk4ZjdlMzJiNjcyMzY2YzM0YjhiN2RwLTIsCisgICAgMHgxLmJkMzA5ZjNkZmNkNDg5MTI4ZTVlY2JjMzE2ODBjNGE1cC0xLAorICAgIC0weDEuNzExcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjYKKyAgICAtMHgxLmJlNmU1YmVhMWE0ZDg4MzMxZmQ4ZTQ2MGNkNjc3MjQ1cC0yLAorICAgIDB4MS5jY2M3ZDk5YjU3YWI1NGYwNGVkOTE4ZWMxNGEyNTA3ZHAtMSwKKyAgICAweDEuNzU0MGFhNTg4MmRjMnAyLAorICB9LAorICB7IC8vIEVudHJ5IDY3CisgICAgMHgxLmJlNmU1YmVhMWE0ZDg4MzMxZmQ4ZTQ2MGNkNjc3MjQ1cC0yLAorICAgIDB4MS5jY2M3ZDk5YjU3YWI1NGYwNGVkOTE4ZWMxNGEyNTA3ZHAtMSwKKyAgICAtMHgxLjc1NDBhYTU4ODJkYzJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OAorICAgIDB4MS5jOTBjODQxZDE0OTRjMDc1N2U4ZWJiMTY3MjVkODcxOHAtMywKKyAgICAtMHgxLmYzMTY1YTBiMzA2YjFmZmNmOGQxMTkwOWZmZmJhMTY3cC0xLAorICAgIDB4MS43NTUwZDI4ZmZjY2M0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjkKKyAgICAtMHgxLmM5MGM4NDFkMTQ5NGMwNzU3ZThlYmIxNjcyNWQ4NzE4cC0zLAorICAgIC0weDEuZjMxNjVhMGIzMDZiMWZmY2Y4ZDExOTA5ZmZmYmExNjdwLTEsCisgICAgLTB4MS43NTUwZDI4ZmZjY2M0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAtMHgxLmI2NDlkNTc3ZTFiMmE4MzlkMjVkMTk4MDdlYjJjNTY0cC0yLAorICAgIDB4MS5jZWJiMTc1ZDM2YjkzNGJjMDk5NWEwYmUzNWNkZTFlZXAtMSwKKyAgICAweDEuNzVkMTFmYTBkNjI0MnAyLAorICB9LAorICB7IC8vIEVudHJ5IDcxCisgICAgMHgxLmI2NDlkNTc3ZTFiMmE4MzlkMjVkMTk4MDdlYjJjNTY0cC0yLAorICAgIDB4MS5jZWJiMTc1ZDM2YjkzNGJjMDk5NWEwYmUzNWNkZTFlZXAtMSwKKyAgICAtMHgxLjc1ZDExZmEwZDYyNDJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MgorICAgIDB4MS5iNzg3MzBkMTFkODQwODMyMGQyMWNhNmFkMmJlMzM2OHAtMiwKKyAgICAtMHgxLmNlNmZkMDBlZDE2NTAxY2IxM2I5MDg0NzdlMTAyODExcC0xLAorICAgIDB4MS5iYzUwNDQ0ZWU2Mjg2cDksCisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAtMHgxLmI3ODczMGQxMWQ4NDA4MzIwZDIxY2E2YWQyYmUzMzY4cC0yLAorICAgIC0weDEuY2U2ZmQwMGVkMTY1MDFjYjEzYjkwODQ3N2UxMDI4MTFwLTEsCisgICAgLTB4MS5iYzUwNDQ0ZWU2Mjg2cDksCisgIH0sCisgIHsgLy8gRW50cnkgNzQKKyAgICAweDEuYjZiMGIwOTk2ZTdlNjgzNWFjZGIzNmU1NWEwOGJmMTVwLTIsCisgICAgMHgxLmNlYTJiOGNjNTUyMTgxZDBiMGFlYWQyN2U5NGE5MTY4cC0xLAorICAgIDB4MS5jNTViMmJmMTljZTU0cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDc1CisgICAgLTB4MS5iNmIwYjA5OTZlN2U2ODM1YWNkYjM2ZTU1YTA4YmYxNXAtMiwKKyAgICAweDEuY2VhMmI4Y2M1NTIxODFkMGIwYWVhZDI3ZTk0YTkxNjhwLTEsCisgICAgLTB4MS5jNTViMmJmMTljZTU0cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDc2CisgICAgMHgxLmI2ZmFjZjY2NTg5MTQ4MmVhOGM2MWY1Y2EzMmYyODBkcC0yLAorICAgIDB4MS5jZTkxMjRjZWM0MTUwNTU5ZDk0N2E1MjZhZDk4ZjJmNHAtMSwKKyAgICAweDEuYzVhZDM0ZjVmNDcyYXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NworICAgIC0weDEuYjZmYWNmNjY1ODkxNDgyZWE4YzYxZjVjYTMyZjI4MGRwLTIsCisgICAgMHgxLmNlOTEyNGNlYzQxNTA1NTlkOTQ3YTUyNmFkOThmMmY0cC0xLAorICAgIC0weDEuYzVhZDM0ZjVmNDcyYXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OAorICAgIC0weDEuZjgzYTA5ODNkZDE1ZDAwMzAxZTJkZjIxZTNiZWU2MzVwLTIsCisgICAgLTB4MS5iZGEwNTk2ZGYwNjAwMDRkNTc5NTYzYWQ4YzY3ZDE1MXAtMSwKKyAgICAweDEuZDQwNjdjNjBmNDcxZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDc5CisgICAgMHgxLmY4M2EwOTgzZGQxNWQwMDMwMWUyZGYyMWUzYmVlNjM1cC0yLAorICAgIC0weDEuYmRhMDU5NmRmMDYwMDA0ZDU3OTU2M2FkOGM2N2QxNTFwLTEsCisgICAgLTB4MS5kNDA2N2M2MGY0NzFlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgODAKKyAgICAweDEuOWNiNmE5YmJjZTY0YTNlOTdhNzI2N2ZkZWMyNWM4M2JwLTEsCisgICAgMHgxLjJmMDExMzI2NDIwZTUwMDIxNzJkYjI0NWZkOTA2M2UycC0xLAorICAgIDB4MS5kZmZmZmZmZmZmZmZmcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDgxCisgICAgLTB4MS45Y2I2YTliYmNlNjRhM2U5N2E3MjY3ZmRlYzI1YzgzYnAtMSwKKyAgICAweDEuMmYwMTEzMjY0MjBlNTAwMjE3MmRiMjQ1ZmQ5MDYzZTJwLTEsCisgICAgLTB4MS5kZmZmZmZmZmZmZmZmcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDgyCisgICAgMHgxLmY1ZjBiZTI4NTY1YzVhZDc2M2MxMDNkOTgxZmM1YzRlcC01LAorICAgIDB4MS5mZjA5YmFiYjA3NmU0ODAzZTU3ZTY4MjA0NTcwZmQ1YnAtMSwKKyAgICAweDEuZjY0MTQ3ZDhhZGQ4NHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIC0weDEuZjVmMGJlMjg1NjVjNWFkNzYzYzEwM2Q5ODFmYzVjNGVwLTUsCisgICAgMHgxLmZmMDliYWJiMDc2ZTQ4MDNlNTdlNjgyMDQ1NzBmZDVicC0xLAorICAgIC0weDEuZjY0MTQ3ZDhhZGQ4NHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NAorICAgIC0weDEuZDRkYTVmNTY4ODhlMjAwZmRhNGViYWM3ZGIxY2RiZWZwLTEsCisgICAgMHgxLjliNzBjZDMyODRlMTU3ZmI4NDQ5MWQ1ODFjYjg2YmQzcC0yLAorICAgIDB4MS5mZTYxODNlZmEzOTdjcDgzLAorICB9LAorICB7IC8vIEVudHJ5IDg1CisgICAgMHgxLmQ0ZGE1ZjU2ODg4ZTIwMGZkYTRlYmFjN2RiMWNkYmVmcC0xLAorICAgIDB4MS45YjcwY2QzMjg0ZTE1N2ZiODQ0OTFkNTgxY2I4NmJkM3AtMiwKKyAgICAtMHgxLmZlNjE4M2VmYTM5N2NwODMsCisgIH0sCisgIHsgLy8gRW50cnkgODYKKyAgICAweDEuZmE5ZjZjYTBlYzQ0ZTAwMTAwMjZmMzg1YzBhYjg2OTBwLTMsCisgICAgMHgxLmYwMTY0NzRiNzU2Njc0MjRhMDUwZDc5MDE0ZmQyMzg1cC0xLAorICAgIDB4MS5mZmVmZmZmZmZmZmZmcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDg3CisgICAgLTB4MS5mYTlmNmNhMGVjNDRlMDAxMDAyNmYzODVjMGFiODY5MHAtMywKKyAgICAweDEuZjAxNjQ3NGI3NTY2NzQyNGEwNTBkNzkwMTRmZDIzODVwLTEsCisgICAgLTB4MS5mZmVmZmZmZmZmZmZmcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDg4CisgICAgLTB4MS5mZjQ4NjhkZGFiYTZiYTMyYzZiNzE0YWVmOTlmZjJmN3AtMSwKKyAgICAtMHgxLmIxNmYwZWIyNWFlNDY3YzJhMTg1ZTUxNmYxMTg4YjIwcC01LAorICAgIDB4MS5mZmY3ZmY4MDAwMDFmcDE1LAorICB9LAorICB7IC8vIEVudHJ5IDg5CisgICAgMHgxLmZmNDg2OGRkYWJhNmJhMzJjNmI3MTRhZWY5OWZmMmY3cC0xLAorICAgIC0weDEuYjE2ZjBlYjI1YWU0NjdjMmExODVlNTE2ZjExODhiMjBwLTUsCisgICAgLTB4MS5mZmY3ZmY4MDAwMDFmcDE1LAorICB9LAorICB7IC8vIEVudHJ5IDkwCisgICAgLTB4MS5mZjRmMWU5YzI0ODkxMjY0ODcwMTgxOGQwNzViMzk1M3AtMSwKKyAgICAtMHgxLmE5NzFlM2I2NGQwOGQ3YzNmMzdkMjk5YjQzNjE2ZWI0cC01LAorICAgIDB4MS5mZmY3ZmZmZmZmY3AxNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIDB4MS5mZjRmMWU5YzI0ODkxMjY0ODcwMTgxOGQwNzViMzk1M3AtMSwKKyAgICAtMHgxLmE5NzFlM2I2NGQwOGQ3YzNmMzdkMjk5YjQzNjE2ZWI0cC01LAorICAgIC0weDEuZmZmN2ZmZmZmZmNwMTUsCisgIH0sCisgIHsgLy8gRW50cnkgOTIKKyAgICAweDEuZDE5NjE2ZmM3ZWU0NjA1MzQ1YzI1NjA2Y2ZjOTMyMzVwLTEsCisgICAgLTB4MS5hYTA1NGM0OTA5Mzg0ODExYTA2MzI3MzExMjYwNGMzMXAtMiwKKyAgICAweDEuZmZmODBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MworICAgIC0weDEuZDE5NjE2ZmM3ZWU0NjA1MzQ1YzI1NjA2Y2ZjOTMyMzVwLTEsCisgICAgLTB4MS5hYTA1NGM0OTA5Mzg0ODExYTA2MzI3MzExMjYwNGMzMXAtMiwKKyAgICAtMHgxLmZmZjgwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgOTQKKyAgICAweDEuY2UzNTA5NzUxYzQ2MTQ4MzdmYTRiMzQ5NjNjNmY1ZDhwLTEsCisgICAgMHgxLmI4N2UzNzEwMTY1NDQ4MjE0NGQ3MWQwNDk3MjI2N2Q4cC0yLAorICAgIDB4MS5mZmZmYmZmZTNmZmZmcDE0LAorICB9LAorICB7IC8vIEVudHJ5IDk1CisgICAgLTB4MS5jZTM1MDk3NTFjNDYxNDgzN2ZhNGIzNDk2M2M2ZjVkOHAtMSwKKyAgICAweDEuYjg3ZTM3MTAxNjU0NDgyMTQ0ZDcxZDA0OTcyMjY3ZDhwLTIsCisgICAgLTB4MS5mZmZmYmZmZTNmZmZmcDE0LAorICB9LAorICB7IC8vIEVudHJ5IDk2CisgICAgMHgxLmQxOGY3NmZmYzZlNGJhMGEzMTM0ZTViZTIxYjViYzhmcC0xLAorICAgIC0weDEuYWEyMjQxMTYwMjI3ODk2YzY4ZWYxNzgzOWYxN2RjZTVwLTIsCisgICAgMHgxLmZmZmZmNjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NworICAgIC0weDEuZDE4Zjc2ZmZjNmU0YmEwYTMxMzRlNWJlMjFiNWJjOGZwLTEsCisgICAgLTB4MS5hYTIyNDExNjAyMjc4OTZjNjhlZjE3ODM5ZjE3ZGNlNXAtMiwKKyAgICAtMHgxLmZmZmZmNjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIC0weDEuODM3Yjk5NGE2ZDhmZjdmMjc1MDc1NWRmNTg0M2U4NGRwLTEsCisgICAgLTB4MS40ZWFhNjViOWUyZWNjMzA4ZmQ4MmY2NWUwOWQwNmJlNHAtMSwKKyAgICAweDEuZmZmZmZlM2ZmZmZmZnAxLAorICB9LAorICB7IC8vIEVudHJ5IDk5CisgICAgMHgxLjgzN2I5OTRhNmQ4ZmY3ZjI3NTA3NTVkZjU4NDNlODRkcC0xLAorICAgIC0weDEuNGVhYTY1YjllMmVjYzMwOGZkODJmNjVlMDlkMDZiZTRwLTEsCisgICAgLTB4MS5mZmZmZmUzZmZmZmZmcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTAwCisgICAgMHgxLmFlZDU0OGYwOTBjMWRmZmU2ZTA0MzIyZGM4ZThjYmZhcC0xLAorICAgIDB4MS4xNGEyODBmYjUwN2NmODk5OWExYjI5MTk5NTY0NjE1MnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmU3ZnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEKKyAgICAtMHgxLmFlZDU0OGYwOTBjMWRmZmU2ZTA0MzIyZGM4ZThjYmZhcC0xLAorICAgIDB4MS4xNGEyODBmYjUwN2NmODk5OWExYjI5MTk5NTY0NjE1MnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZlN2ZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTAyCisgICAgLTAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDc0LAorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzQsCisgIH0sCisgIHsgLy8gRW50cnkgMTA0CisgICAgLTAuMCwKKyAgICAweDEucDAsCisgICAgLTAuMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDc0LAorICB9LAorICB7IC8vIEVudHJ5IDEwNgorICAgIC0wLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3NCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIsCisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgMHgxLjAwMDAwMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAyMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwMjIsCisgIH0sCisgIHsgLy8gRW50cnkgMTEwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTAyMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmRmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgMTEyCisgICAgMHgxLmZmZmZmZmZmZmZmZmRmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMKKyAgICAweDEuZmZmZmZmZmZmZmZmZGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcC0xMDIzLAorICB9LAorICB7IC8vIEVudHJ5IDExNAorICAgIC0weDEuZmZmZmZmZmZmZmZmZGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDIyLAorICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTAyMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcKKyAgICAweDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xMDIyLAorICB9LAorICB7IC8vIEVudHJ5IDExOAorICAgIC0weDEuMDAwMDAwMDAwMDAwMGZmZmZmZmZmZmZmZmZmZmZmZmZwLTEwMjIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTAyMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkKKyAgICAweDEuOTk5OTk5NmRlOGNhMTk4YzI0YWI5NDQ5YmVlZTE2ZDVwLTEzLAorICAgIDB4MS5mZmZmZmY1YzI4ZjVjYjRjNTI3MjA2MTI4MTIxMTEyMHAtMSwKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTMsCisgIH0sCisgIHsgLy8gRW50cnkgMTIwCisgICAgLTB4MS45OTk5OTk2ZGU4Y2ExOThjMjRhYjk0NDliZWVlMTZkNXAtMTMsCisgICAgMHgxLmZmZmZmZjVjMjhmNWNiNGM1MjcyMDYxMjgxMjExMTIwcC0xLAorICAgIC0weDEuOTk5OTk5OTk5OTk5YXAtMTMsCisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgMHgxLjk5OTk5OGVhZDY1Yjk2Zjc4YTRkYmZkODM5YzdlZjJlcC0xMiwKKyAgICAweDEuZmZmZmZkNzBhM2Q3OTYwY2Q1Njk1YTA2ZmRiODBlNzRwLTEsCisgICAgMHgxLjk5OTk5OTk5OTk5OWFwLTEyLAorICB9LAorICB7IC8vIEVudHJ5IDEyMgorICAgIC0weDEuOTk5OTk4ZWFkNjViOTZmNzhhNGRiZmQ4MzljN2VmMmVwLTEyLAorICAgIDB4MS5mZmZmZmQ3MGEzZDc5NjBjZDU2OTVhMDZmZGI4MGU3NHAtMSwKKyAgICAtMHgxLjk5OTk5OTk5OTk5OWFwLTEyLAorICB9LAorICB7IC8vIEVudHJ5IDEyMworICAgIDB4MS4zMzMzMzIwYzQ5YmFiZmYxNTFiNmQwNDI5MGUyYzNhMnAtMTEsCisgICAgMHgxLmZmZmZmYTNkNzBhNjlhZDQyYjM5ZDg2OTY2MzJmODU2cC0xLAorICAgIDB4MS4zMzMzMzMzMzMzMzM0cC0xMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQKKyAgICAtMHgxLjMzMzMzMjBjNDliYWJmZjE1MWI2ZDA0MjkwZTJjM2EycC0xMSwKKyAgICAweDEuZmZmZmZhM2Q3MGE2OWFkNDJiMzlkODY5NjYzMmY4NTZwLTEsCisgICAgLTB4MS4zMzMzMzMzMzMzMzM0cC0xMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUKKyAgICAweDEuOTk5OTk2ZGU4Y2EyODg0ZGEyZjA4ZjI1YmIwMjRkMDhwLTExLAorICAgIDB4MS5mZmZmZjVjMjhmNjRlNWVjMGRhMGE0ZjdmNDM4ODA1MnAtMSwKKyAgICAweDEuOTk5OTk5OTk5OTk5YXAtMTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTI2CisgICAgLTB4MS45OTk5OTZkZThjYTI4ODRkYTJmMDhmMjViYjAyNGQwOHAtMTEsCisgICAgMHgxLmZmZmZmNWMyOGY2NGU1ZWMwZGEwYTRmN2Y0Mzg4MDUycC0xLAorICAgIC0weDEuOTk5OTk5OTk5OTk5YXAtMTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTI3CisgICAgMHgxLmZmZmZmYWFhYWFhZWVlZWVlZDRlZDRlZGFiNGM3YmQ2cC0xMSwKKyAgICAweDEuZmZmZmYwMDAwMDE1NTU1NTQ5ZjQ5ZjRkMzRkMzRjYTBwLTEsCisgICAgMHgxLjBwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEyOAorICAgIC0weDEuZmZmZmZhYWFhYWFlZWVlZWVkNGVkNGVkYWI0YzdiZDZwLTExLAorICAgIDB4MS5mZmZmZjAwMDAwMTU1NTU1NDlmNDlmNGQzNGQzNGNhMHAtMSwKKyAgICAtMHgxLjBwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIDB4MS4zMzMzMmU5NzhkNTUyYWZjODgzYmRiMDQ3NTFlMzgzNXAtMTAsCisgICAgMHgxLmZmZmZlOGY1YzJiYjk4YzdjMTAzZDJmZjc5ZjE1ZDZhcC0xLAorICAgIDB4MS4zMzMzMzMzMzMzMzMzcC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAKKyAgICAtMHgxLjMzMzMyZTk3OGQ1NTJhZmM4ODNiZGIwNDc1MWUzODM1cC0xMCwKKyAgICAweDEuZmZmZmU4ZjVjMmJiOThjN2MxMDNkMmZmNzlmMTVkNmFwLTEsCisgICAgLTB4MS4zMzMzMzMzMzMzMzMzcC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzEKKyAgICAweDEuNjY2NjVmMTUyOWFmZjhhMzgwOTI0NjY3MGE0MzZjM2NwLTEwLAorICAgIDB4MS5mZmZmZTBhM2Q3NWMzMWIyNjQ1MTE2NmQ2ZjM5OGFiZHAtMSwKKyAgICAweDEuNjY2NjY2NjY2NjY2NnAtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTMyCisgICAgLTB4MS42NjY2NWYxNTI5YWZmOGEzODA5MjQ2NjcwYTQzNmMzY3AtMTAsCisgICAgMHgxLmZmZmZlMGEzZDc1YzMxYjI2NDUxMTY2ZDZmMzk4YWJkcC0xLAorICAgIC0weDEuNjY2NjY2NjY2NjY2NnAtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTMzCisgICAgMHgxLjk5OTk4ZWFkNjVjZGY4MmUxOTRjMTMzOTk3ZjJmYjY4cC0xMCwKKyAgICAweDEuZmZmZmQ3MGEzZGZjNzMzYjMzMzFkODM4MmIxZTlkZjVwLTEsCisgICAgMHgxLjk5OTk5OTk5OTk5OTlwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEzNAorICAgIC0weDEuOTk5OThlYWQ2NWNkZjgyZTE5NGMxMzM5OTdmMmZiNjhwLTEwLAorICAgIDB4MS5mZmZmZDcwYTNkZmM3MzNiMzMzMWQ4MzgyYjFlOWRmNXAtMSwKKyAgICAtMHgxLjk5OTk5OTk5OTk5OTlwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEzNQorICAgIDB4MS5jY2NjYmQzZjdkMTVkNDJhZmZiOWYwMmJmMWRjMjU3YnAtMTAsCisgICAgMHgxLmZmZmZjYzI4ZjZhMjgyM2YzNzY1YjUwNjU5ZWNiMGUycC0xLAorICAgIDB4MS5jY2NjY2NjY2NjY2NjcC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYKKyAgICAtMHgxLmNjY2NiZDNmN2QxNWQ0MmFmZmI5ZjAyYmYxZGMyNTdicC0xMCwKKyAgICAweDEuZmZmZmNjMjhmNmEyODIzZjM3NjViNTA2NTllY2IwZTJwLTEsCisgICAgLTB4MS5jY2NjY2NjY2NjY2NjcC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzcKKyAgICAweDEuMDY2NWFlOWM3YjQ0ZWQyODAyMTZiZTIxMDRmMjhmMDJwLTcsCisgICAgMHgxLmZmZmJjYzJhNmU4NmZlZjdkMmFmMTU4MGJkOGU2Njk5cC0xLAorICAgIDB4MS4wNjY2NjY2NjY2NjY2cC03LAorICB9LAorICB7IC8vIEVudHJ5IDEzOAorICAgIC0weDEuMDY2NWFlOWM3YjQ0ZWQyODAyMTZiZTIxMDRmMjhmMDJwLTcsCisgICAgMHgxLmZmZmJjYzJhNmU4NmZlZjdkMmFmMTU4MGJkOGU2Njk5cC0xLAorICAgIC0weDEuMDY2NjY2NjY2NjY2NnAtNywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkKKyAgICAweDEuY2NjOGU5N2I1OWY2MTg4OThjNGFjM2EwYWVkZGY3MDlwLTcsCisgICAgMHgxLmZmZjMwYTRiNmZjYzE0MDVlMThmYmY3MzM1ZDJmNzg5cC0xLAorICAgIDB4MS5jY2NjY2NjY2NjY2NjcC03LAorICB9LAorICB7IC8vIEVudHJ5IDE0MAorICAgIC0weDEuY2NjOGU5N2I1OWY2MTg4OThjNGFjM2EwYWVkZGY3MDlwLTcsCisgICAgMHgxLmZmZjMwYTRiNmZjYzE0MDVlMThmYmY3MzM1ZDJmNzg5cC0xLAorICAgIC0weDEuY2NjY2NjY2NjY2NjY3AtNywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDEKKyAgICAweDEuNDk5M2U4YThmZjc5YjEzMjA0NmVmYTc4NTZhOTc1MzhwLTYsCisgICAgMHgxLmZmZTU3YTc4MGYzOGMwZGIzNzA1MWZhOGM4ZDYwZmJjcC0xLAorICAgIDB4MS40OTk5OTk5OTk5OTk5cC02LAorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIC0weDEuNDk5M2U4YThmZjc5YjEzMjA0NmVmYTc4NTZhOTc1MzhwLTYsCisgICAgMHgxLmZmZTU3YTc4MGYzOGMwZGIzNzA1MWZhOGM4ZDYwZmJjcC0xLAorICAgIC0weDEuNDk5OTk5OTk5OTk5OXAtNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDMKKyAgICAweDEuYWNjMDQ0YzU2ZGIwZTE5ZjgyYzljM2NmZjI0NmUyMDFwLTYsCisgICAgMHgxLmZmZDMxY2QwZTFkNjJjMDVkMmNkZWQyMWFkZDhiZDMzcC0xLAorICAgIDB4MS5hY2NjY2NjY2NjY2NjcC02LAorICB9LAorICB7IC8vIEVudHJ5IDE0NAorICAgIC0weDEuYWNjMDQ0YzU2ZGIwZTE5ZjgyYzljM2NmZjI0NmUyMDFwLTYsCisgICAgMHgxLmZmZDMxY2QwZTFkNjJjMDVkMmNkZWQyMWFkZDhiZDMzcC0xLAorICAgIC0weDEuYWNjY2NjY2NjY2NjY3AtNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDUKKyAgICAweDEuMDdmNDRkNjdjZjQxYWZiYzBjOTUxMDhiOTlmOTFiMDFwLTUsCisgICAgMHgxLmZmYmJmMTgyMDc1NDJlZjgxMzkwZDczYzNiYTg5YzFhcC0xLAorICAgIDB4MS4wODBwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMTQ2CisgICAgLTB4MS4wN2Y0NGQ2N2NmNDFhZmJjMGM5NTEwOGI5OWY5MWIwMXAtNSwKKyAgICAweDEuZmZiYmYxODIwNzU0MmVmODEzOTBkNzNjM2JhODljMWFwLTEsCisgICAgLTB4MS4wODBwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMTQ3CisgICAgMHgxLjM5ODVmZTQ2ZjFjODcxNGVhYTE0MTg1NjE5NjNlODlicC01LAorICAgIDB4MS5mZjlmZjhjMzI5OWY1NDQ1N2JiYWY4YzEyMTczYjQ2YnAtMSwKKyAgICAweDEuMzk5OTk5OTk5OTk5YXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDgKKyAgICAtMHgxLjM5ODVmZTQ2ZjFjODcxNGVhYTE0MTg1NjE5NjNlODlicC01LAorICAgIDB4MS5mZjlmZjhjMzI5OWY1NDQ1N2JiYWY4YzEyMTczYjQ2YnAtMSwKKyAgICAtMHgxLjM5OTk5OTk5OTk5OWFwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgMHgxLjZiMTRiZGU5M2FjNWY3ZDI0NTQ0ZDBlY2Y4YmU3YWVlcC01LAorICAgIDB4MS5mZjdmMzJkNzdjNWIxYzQyZjE2NjBjOWI2ZjJlZjY0ZnAtMSwKKyAgICAweDEuNmIzMzMzMzMzMzMzNHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTAKKyAgICAtMHgxLjZiMTRiZGU5M2FjNWY3ZDI0NTQ0ZDBlY2Y4YmU3YWVlcC01LAorICAgIDB4MS5mZjdmMzJkNzdjNWIxYzQyZjE2NjBjOWI2ZjJlZjY0ZnAtMSwKKyAgICAtMHgxLjZiMzMzMzMzMzMzMzRwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMTUxCisgICAgMHgxLjljYTAxNTNlZDgzOTZiMDJmODYwNTIxOWE1ZmU1OTE3cC01LAorICAgIDB4MS5mZjU5YTAwZGJjNDA4OTZiYjVlNGFjOGFkMjkzYWZiNHAtMSwKKyAgICAweDEuOWNjY2NjY2NjY2NjZXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAtMHgxLjljYTAxNTNlZDgzOTZiMDJmODYwNTIxOWE1ZmU1OTE3cC01LAorICAgIDB4MS5mZjU5YTAwZGJjNDA4OTZiYjVlNGFjOGFkMjkzYWZiNHAtMSwKKyAgICAtMHgxLjljY2NjY2NjY2NjY2VwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgMHgxLmNlMjc4ZDQwMjdkMzQzODdmMTg0ZDRhYjJhYWY1NDVmcC01LAorICAgIDB4MS5mZjJmNDBjMDJlNjBmNjFkNmRjZmMzOWI2YzJiZTA4N3AtMSwKKyAgICAweDEuY2U2NjY2NjY2NjY2NnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTQKKyAgICAtMHgxLmNlMjc4ZDQwMjdkMzQzODdmMTg0ZDRhYjJhYWY1NDVmcC01LAorICAgIDB4MS5mZjJmNDBjMDJlNjBmNjFkNmRjZmMzOWI2YzJiZTA4N3AtMSwKKyAgICAtMHgxLmNlNjY2NjY2NjY2NjZwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMTU1CisgICAgMHgxLjQzYzFlOWMxNzFhNjY3YTBiOTI1MTlhMDRmYTVhOTFjcC0xLAorICAgIDB4MS44Y2E0NmM3ZDg5NzVlNTdhMTQ4NGYwNWMzNzM4ZDgzYnAtMSwKKyAgICAweDEuNWU3ZmM0MzY5YmRhZHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTYKKyAgICAtMHgxLjQzYzFlOWMxNzFhNjY3YTBiOTI1MTlhMDRmYTVhOTFjcC0xLAorICAgIDB4MS44Y2E0NmM3ZDg5NzVlNTdhMTQ4NGYwNWMzNzM4ZDgzYnAtMSwKKyAgICAtMHgxLjVlN2ZjNDM2OWJkYWRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgMHgxLmVlM2Q2YmNlYTA5Y2ExOGIxZDFjZTdlZTA0ZmQ4ODZmcC0xLAorICAgIDB4MS4wYjVkMzgwMmZjNzk5MTE0MDE2OGYyOTRlZWRkNzkwNHAtMiwKKyAgICAweDEuNGU3ZmM0MzY5YmRhZHAwLAorICB9LAorICB7IC8vIEVudHJ5IDE1OAorICAgIC0weDEuZWUzZDZiY2VhMDljYTE4YjFkMWNlN2VlMDRmZDg4NmZwLTEsCisgICAgMHgxLjBiNWQzODAyZmM3OTkxMTQwMTY4ZjI5NGVlZGQ3OTA0cC0yLAorICAgIC0weDEuNGU3ZmM0MzY5YmRhZHAwLAorICB9LAorICB7IC8vIEVudHJ5IDE1OQorICAgIDB4MS5kZjhlMjJlYTgwOWQ2NWM2YTY5Yjk2YWNhNjBiZTQzMnAtMSwKKyAgICAtMHgxLjY2Yjk2ZjUzMzIzYWYxZDdlMzFhNzE2MmFiMThhNzVicC0yLAorICAgIDB4MS5lZGJmYTY1MWU5Yzg0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTYwCisgICAgLTB4MS5kZjhlMjJlYTgwOWQ2NWM2YTY5Yjk2YWNhNjBiZTQzMnAtMSwKKyAgICAtMHgxLjY2Yjk2ZjUzMzIzYWYxZDdlMzFhNzE2MmFiMThhNzVicC0yLAorICAgIC0weDEuZWRiZmE2NTFlOWM4NHAwLAorICB9LAorICB7IC8vIEVudHJ5IDE2MQorICAgIDB4MS4xZDM0NzllYWM3YWUzNWUyZmJlYTBhZTY5NjQzNDY5MnAtMSwKKyAgICAtMHgxLmE5MzU1NDg4OGMzMmZhNTdmMjJhOTUyOWEzMjBjMWNicC0xLAorICAgIDB4MS40NjdmYzQzNjliZGFkcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTYyCisgICAgLTB4MS4xZDM0NzllYWM3YWUzNWUyZmJlYTBhZTY5NjQzNDY5MnAtMSwKKyAgICAtMHgxLmE5MzU1NDg4OGMzMmZhNTdmMjJhOTUyOWEzMjBjMWNicC0xLAorICAgIC0weDEuNDY3ZmM0MzY5YmRhZHAxLAorICB9LAorICB7IC8vIEVudHJ5IDE2MworICAgIC0weDEuZmZlYWFhZWVlZTg0YjQ0Y2NlZmVmODMyMjU0ZDI4YzBwLTYsCisgICAgLTB4MS5mZmMwMDE1NTUyN2QyYjlmZGEyYWU4OTM5NmUwOTcyN3AtMSwKKyAgICAweDEuOTYxZmI1NDQ0MmQxOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDE2NAorICAgIDB4MS5mZmVhYWFlZWVlODRiNDRjY2VmZWY4MzIyNTRkMjhjMHAtNiwKKyAgICAtMHgxLmZmYzAwMTU1NTI3ZDJiOWZkYTJhZTg5Mzk2ZTA5NzI3cC0xLAorICAgIC0weDEuOTYxZmI1NDQ0MmQxOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDE2NQorICAgIC0weDEuMzczNGQzMmQ0OWJkMGI5NDI3NzJhNzU2N2Q1MTQxNDBwLTEsCisgICAgLTB4MS45NjkwN2M1YzdjMjViODhlMzRhZGRmZjFmYmVmNjZlNHAtMSwKKyAgICAweDEuZTViZmE2NTFlOWM4M3AxLAorICB9LAorICB7IC8vIEVudHJ5IDE2NgorICAgIDB4MS4zNzM0ZDMyZDQ5YmQwYjk0Mjc3MmE3NTY3ZDUxNDE0MHAtMSwKKyAgICAtMHgxLjk2OTA3YzVjN2MyNWI4OGUzNGFkZGZmMWZiZWY2NmU0cC0xLAorICAgIC0weDEuZTViZmE2NTFlOWM4M3AxLAorICB9LAorICB7IC8vIEVudHJ5IDE2NworICAgIC0weDEuZTlkMjVkMTk5MTFlMjA1YjY1MzUyMWY0MmI5Yjg2NGZwLTEsCisgICAgLTB4MS4yYTFlNWE1MGY5NDhjZDQ4N2M1MzA5NjgyYjExMGE1M3AtMiwKKyAgICAweDEuMWFhZmNiYWZjODVmN3AyLAorICB9LAorICB7IC8vIEVudHJ5IDE2OAorICAgIDB4MS5lOWQyNWQxOTkxMWUyMDViNjUzNTIxZjQyYjliODY0ZnAtMSwKKyAgICAtMHgxLjJhMWU1YTUwZjk0OGNkNDg3YzUzMDk2ODJiMTEwYTUzcC0yLAorICAgIC0weDEuMWFhZmNiYWZjODVmN3AyLAorICB9LAorICB7IC8vIEVudHJ5IDE2OQorICAgIC0weDEuZTRlY2RjNWE0ZTQ2NTg5OTkyOGViOWZjOTU4MjlkNDhwLTEsCisgICAgMHgxLjQ4OTRmNjk1ZGM1NmJjZThiMjczZTU1MjRmMTgxMjY0cC0yLAorICAgIDB4MS40MjdmYzQzNjliZGFkcDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTcwCisgICAgMHgxLmU0ZWNkYzVhNGU0NjU4OTk5MjhlYjlmYzk1ODI5ZDQ4cC0xLAorICAgIDB4MS40ODk0ZjY5NWRjNTZiY2U4YjI3M2U1NTI0ZjE4MTI2NHAtMiwKKyAgICAtMHgxLjQyN2ZjNDM2OWJkYWRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzEKKyAgICAtMHgxLjJhNTlmMTAzNDQyNjE5N2ZhNmVlZTIyNzYyOTY3ZjI1cC0xLAorICAgIDB4MS5hMDE2ZWEzYTY5MmNlMGMzMjFiNzdmMTY4ZGUzOTEyMnAtMSwKKyAgICAweDEuNmE0ZmJjYmQ2ZjU2MnAyLAorICB9LAorICB7IC8vIEVudHJ5IDE3MgorICAgIDB4MS4yYTU5ZjEwMzQ0MjYxOTdmYTZlZWUyMjc2Mjk2N2YyNXAtMSwKKyAgICAweDEuYTAxNmVhM2E2OTJjZTBjMzIxYjc3ZjE2OGRlMzkxMjJwLTEsCisgICAgLTB4MS42YTRmYmNiZDZmNTYycDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTczCisgICAgLTB4MS4yNjMxMjQ0M2JkMzVmMTkzMTJlYWMwYTFhNmI1NjU5ZXAtMSwKKyAgICAweDEuYTMwYTY5ZjU1MzdlYmMyMmYwODcwYzJiZDI2ZWYyODRwLTEsCisgICAgMHgxLjZhZjJlZmYwYTI4OTZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzQKKyAgICAweDEuMjYzMTI0NDNiZDM1ZjE5MzEyZWFjMGExYTZiNTY1OWVwLTEsCisgICAgMHgxLmEzMGE2OWY1NTM3ZWJjMjJmMDg3MGMyYmQyNmVmMjg0cC0xLAorICAgIC0weDEuNmFmMmVmZjBhMjg5NnAyLAorICB9LAorICB7IC8vIEVudHJ5IDE3NQorICAgIC0weDEuZTE4ZTY2MGE1ZTJmYjMxNmVjYmI5ZWQ3MDEyMmVmZjVwLTEsCisgICAgMHgxLjViZDYyZThiMDRhZDU5MTVlNjYyNDIzNDliNzU2ZTExcC0yLAorICAgIDB4MS40M2M2MmE5ZDAyNDE0cDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTc2CisgICAgMHgxLmUxOGU2NjBhNWUyZmIzMTZlY2JiOWVkNzAxMjJlZmY1cC0xLAorICAgIDB4MS41YmQ2MmU4YjA0YWQ1OTE1ZTY2MjQyMzQ5Yjc1NmUxMXAtMiwKKyAgICAtMHgxLjQzYzYyYTlkMDI0MTRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAtMHgxLmVlMGU4M2EwMTk4YjZlMmVmN2M0OGU2NjI1MjkxYTBhcC0xLAorICAgIC0weDEuMGNiNzFmNjcxZTYzNDEwOTY2ZTc4ZDIwMDljMDYxNmZwLTIsCisgICAgMHgxLjFjOTk2NTQ5NjFmOTJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzgKKyAgICAweDEuZWUwZTgzYTAxOThiNmUyZWY3YzQ4ZTY2MjUyOTFhMGFwLTEsCisgICAgLTB4MS4wY2I3MWY2NzFlNjM0MTA5NjZlNzhkMjAwOWMwNjE2ZnAtMiwKKyAgICAtMHgxLjFjOTk2NTQ5NjFmOTJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzkKKyAgICAtMHgxLjQ3Mjc3NDczMzhlNDY1MzYxNmVhZGJkN2VjM2QwMmQzcC0xLAorICAgIC0weDEuODlkODZhYTg1MjFjMTFiNzRmOGIxOTU0YzA4ZjliMzZwLTEsCisgICAgMHgxLmVhZDkzZmViODM2MWZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODAKKyAgICAweDEuNDcyNzc0NzMzOGU0NjUzNjE2ZWFkYmQ3ZWMzZDAyZDNwLTEsCisgICAgLTB4MS44OWQ4NmFhODUyMWMxMWI3NGY4YjE5NTRjMDhmOWIzNnAtMSwKKyAgICAtMHgxLmVhZDkzZmViODM2MWZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAtMHgxLjRiYTJmNzVkZGE1ZmU0MzQzMjA5MDVhNzE4NGZmMWFmcC00LAorICAgIC0weDEuZmU1MWFjNTU0YTE2YWQ4MTk0ZjE4MTA4NWY4YTE3ZjJwLTEsCisgICAgMHgxLjljN2ZiNTQ0NDJkMWFwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODIKKyAgICAweDEuNGJhMmY3NWRkYTVmZTQzNDMyMDkwNWE3MTg0ZmYxYWZwLTQsCisgICAgLTB4MS5mZTUxYWM1NTRhMTZhZDgxOTRmMTgxMDg1ZjhhMTdmMnAtMSwKKyAgICAtMHgxLjljN2ZiNTQ0NDJkMWFwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAweDEuMDM0YzRkNjMzYjRlZjBhOTA4OWI0Mzg5MmE0NjJhMjZwLTEsCisgICAgLTB4MS5iOTdjMDRkMDhiYzVkNzY1YjM0MWEyMmIyYzcyMGI2ZnAtMSwKKyAgICAweDEuNGUyNjJhOWQwMjQxNXAxLAorICB9LAorICB7IC8vIEVudHJ5IDE4NAorICAgIC0weDEuMDM0YzRkNjMzYjRlZjBhOTA4OWI0Mzg5MmE0NjJhMjZwLTEsCisgICAgLTB4MS5iOTdjMDRkMDhiYzVkNzY1YjM0MWEyMmIyYzcyMGI2ZnAtMSwKKyAgICAtMHgxLjRlMjYyYTlkMDI0MTVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODUKKyAgICAweDEuZDFlNGNkZTJmMzk0NGY0YzEzNGMwNWNjNGU1MzM5YTNwLTEsCisgICAgLTB4MS5hOGFjOGEzZTU4ZjZjYTk1MjM5MDI5OWQyZThiMTg3ZnAtMiwKKyAgICAweDEuZmY5OTNmZWI4MzYyMHAwLAorICB9LAorICB7IC8vIEVudHJ5IDE4NgorICAgIC0weDEuZDFlNGNkZTJmMzk0NGY0YzEzNGMwNWNjNGU1MzM5YTNwLTEsCisgICAgLTB4MS5hOGFjOGEzZTU4ZjZjYTk1MjM5MDI5OWQyZThiMTg3ZnAtMiwKKyAgICAtMHgxLmZmOTkzZmViODM2MjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODcKKyAgICAweDEuZjc1MDIzNWM5NDk5MjZjNDhjOTBlNDFhOTE0NzRjMDZwLTEsCisgICAgMHgxLjc3YThiOWIzZDI1NGE5ZTM5ZDAyYjNlYjNlMjM5MGU3cC0zLAorICAgIDB4MS42MmU2MmE5ZDAyNDE2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTg4CisgICAgLTB4MS5mNzUwMjM1Yzk0OTkyNmM0OGM5MGU0MWE5MTQ3NGMwNnAtMSwKKyAgICAweDEuNzdhOGI5YjNkMjU0YTllMzlkMDJiM2ViM2UyMzkwZTdwLTMsCisgICAgLTB4MS42MmU2MmE5ZDAyNDE2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTg5CisgICAgMHgxLjY1ZjdkNTcxMjc5YjBiODAwNTU1MmZkNDdhMmU3N2FlcC0xLAorICAgIDB4MS42ZTEwNjEyMDVkZDc5MDUxYzExMmQzMGEwNTA5N2M2MXAtMSwKKyAgICAweDEuOGM2NjJhOWQwMjQxOXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTAKKyAgICAtMHgxLjY1ZjdkNTcxMjc5YjBiODAwNTU1MmZkNDdhMmU3N2FlcC0xLAorICAgIDB4MS42ZTEwNjEyMDVkZDc5MDUxYzExMmQzMGEwNTA5N2M2MXAtMSwKKyAgICAtMHgxLjhjNjYyYTlkMDI0MTlwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTkxCisgICAgLTB4MS5mZTA0M2Y1NzM2OWQ2YTUyZmEzM2YwMTE5ZWM0ZGExOXAtMSwKKyAgICAtMHgxLjY4MmYzY2MzYzdhMDhkYTJjZTAyYTQxY2RjN2JlZDg2cC00LAorICAgIC0weDEuYThhYTFkMTFjNDRmZnAwLAorICB9LAorICB7IC8vIEVudHJ5IDE5MgorICAgIDB4MS5mZTA0M2Y1NzM2OWQ2YTUyZmEzM2YwMTE5ZWM0ZGExOXAtMSwKKyAgICAtMHgxLjY4MmYzY2MzYzdhMDhkYTJjZTAyYTQxY2RjN2JlZDg2cC00LAorICAgIDB4MS5hOGFhMWQxMWM0NGZmcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTkzCisgICAgLTB4MS5mZmYxOGYyNGYzZTRiODdiZjhjMzc2MmNiNDRmNDZkNnAtMSwKKyAgICAtMHgxLmU2NjY5YTI3MGMzNmQ0ODc5YjQyOGRkYmE5NmNkODdicC03LAorICAgIC0weDEuOTVlYzhiOWUwM2Q1NHAwLAorICB9LAorICB7IC8vIEVudHJ5IDE5NAorICAgIDB4MS5mZmYxOGYyNGYzZTRiODdiZjhjMzc2MmNiNDRmNDZkNnAtMSwKKyAgICAtMHgxLmU2NjY5YTI3MGMzNmQ0ODc5YjQyOGRkYmE5NmNkODdicC03LAorICAgIDB4MS45NWVjOGI5ZTAzZDU0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTk1CisgICAgLTB4MS5mZjIwZDk2MTYyNGU3MDYzYTc4MjAzYjgxMWY1NzljYXAtMSwKKyAgICAweDEuZGRkMWVjMjVlMjA5ZjFiYmY3ZTE3ZWY2Yzg0NTBjZDdwLTUsCisgICAgLTB4MS44MzJlZmEyYTQzNWE5cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTk2CisgICAgMHgxLmZmMjBkOTYxNjI0ZTcwNjNhNzgyMDNiODExZjU3OWNhcC0xLAorICAgIDB4MS5kZGQxZWMyNWUyMDlmMWJiZjdlMTdlZjZjODQ1MGNkN3AtNSwKKyAgICAweDEuODMyZWZhMmE0MzVhOXAwLAorICB9LAorICB7IC8vIEVudHJ5IDE5NworICAgIC0weDEuZmI5MzNjNDAxMDdmZDc3NTE4NWFjMTQ5MThjOGZiYWZwLTEsCisgICAgMHgxLjBjYWI5MTE1NjQwZDk5MzA4MmE3MzQzYmI1YWZmZWEycC0zLAorICAgIC0weDEuNzA3MTY4YjY4MmRmZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDE5OAorICAgIDB4MS5mYjkzM2M0MDEwN2ZkNzc1MTg1YWMxNDkxOGM4ZmJhZnAtMSwKKyAgICAweDEuMGNhYjkxMTU2NDBkOTkzMDgyYTczNDNiYjVhZmZlYTJwLTMsCisgICAgMHgxLjcwNzE2OGI2ODJkZmVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTkKKyAgICAtMHgxLmY1NGQ5NzE4ODFhZDY4NWI3ODJlZjg4ZTYzNTBmN2NkcC0xLAorICAgIDB4MS5hMDcyM2E5NTQ5MmVkZWU1ZGM5ODM5NGU0NWY5NmQ4OHAtMywKKyAgICAtMHgxLjVkYjNkNzQyYzI2NTNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDAKKyAgICAweDEuZjU0ZDk3MTg4MWFkNjg1Yjc4MmVmODhlNjM1MGY3Y2RwLTEsCisgICAgMHgxLmEwNzIzYTk1NDkyZWRlZTVkYzk4Mzk0ZTQ1Zjk2ZDg4cC0zLAorICAgIDB4MS41ZGIzZDc0MmMyNjUzcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjAxCisgICAgLTB4MS5lYzU4ODNiN2I2Y2Y0ZDg1OWFiMDRlMTVkNTM2OThjOXAtMSwKKyAgICAweDEuMThmZWU5NmExYTU4NTkyOGE5NGNkYTdlM2Q5MTZmZTFwLTIsCisgICAgLTB4MS40YWY2NDVjZjAxZWE4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjAyCisgICAgMHgxLmVjNTg4M2I3YjZjZjRkODU5YWIwNGUxNWQ1MzY5OGM5cC0xLAorICAgIDB4MS4xOGZlZTk2YTFhNTg1OTI4YTk0Y2RhN2UzZDkxNmZlMXAtMiwKKyAgICAweDEuNGFmNjQ1Y2YwMWVhOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDIwMworICAgIC0weDEuZTBjMDRhOTRlMTczMDljODA2YzFjNzhiZGRjMWQ2MDdwLTEsCisgICAgMHgxLjYwNDM2MjFiMTNiZTJmZjA3MDg1ZjgyNzg1OThlNTY2cC0yLAorICAgIC0weDEuMzgzOGI0NWI0MTZmZHAwLAorICB9LAorICB7IC8vIEVudHJ5IDIwNAorICAgIDB4MS5lMGMwNGE5NGUxNzMwOWM4MDZjMWM3OGJkZGMxZDYwN3AtMSwKKyAgICAweDEuNjA0MzYyMWIxM2JlMmZmMDcwODVmODI3ODU5OGU1NjZwLTIsCisgICAgMHgxLjM4MzhiNDViNDE2ZmRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDUKKyAgICAtMHgxLmQyOTRkMWY5NmM3ZWJkYjk4NjlkZDk3Y2Y1NzRkZGI5cC0xLAorICAgIDB4MS5hNWE0Y2NmNDBkOWQ5YmE5N2ZhYTRlMjNlY2NlOWUzYXAtMiwKKyAgICAtMHgxLjI1N2IyMmU3ODBmNTJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDYKKyAgICAweDEuZDI5NGQxZjk2YzdlYmRiOTg2OWRkOTdjZjU3NGRkYjlwLTEsCisgICAgMHgxLmE1YTRjY2Y0MGQ5ZDliYTk3ZmFhNGUyM2VjY2U5ZTNhcC0yLAorICAgIDB4MS4yNTdiMjJlNzgwZjUycDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjA3CisgICAgLTB4MS5jMWU5ODgzMzczZDdlY2M0OGM5MmRjODg3NTUwNWY3ZXAtMSwKKyAgICAweDEuZThjNDA1ZjM2Zjg1YjdmNWQ2YTM4ZGZkNGE2OTIzNDFwLTIsCisgICAgLTB4MS4xMmJkOTE3M2MwN2FicDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjA4CisgICAgMHgxLmMxZTk4ODMzNzNkN2VjYzQ4YzkyZGM4ODc1NTA1ZjdlcC0xLAorICAgIDB4MS5lOGM0MDVmMzZmODViN2Y1ZDZhMzhkZmQ0YTY5MjM0MXAtMiwKKyAgICAweDEuMTJiZDkxNzNjMDdhYnAwLAorICB9LAorICB7IC8vIEVudHJ5IDIwOQorICAgIC0weDEuYTJjMjg5ZDlkMDU1YWMzNzdmNjdkN2E1NGEwYjMwMDVwLTEsCisgICAgMHgxLjI2OTc2YTZjNGUwZjg2NjMzMzI3ZjFjZWVjYjUwOGFlcC0xLAorICAgIC0weDEuZWE1YzNlZDViMzg1MHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTAKKyAgICAweDEuYTJjMjg5ZDlkMDU1YWMzNzdmNjdkN2E1NGEwYjMwMDVwLTEsCisgICAgMHgxLjI2OTc2YTZjNGUwZjg2NjMzMzI3ZjFjZWVjYjUwOGFlcC0xLAorICAgIDB4MS5lYTVjM2VkNWIzODUwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIxMQorICAgIC0weDEuOTVmMDUyNTdkYmNiNWY0YjEyNjM2YzU4NzhlYTQwNWFwLTEsCisgICAgMHgxLjM4MDVhMTg4MjAwOWYyODQzZGE4MDhlOTU5ZjE3ODYxcC0xLAorICAgIC0weDEuZDRiODdkYWI2NzBhMHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAweDEuOTVmMDUyNTdkYmNiNWY0YjEyNjM2YzU4NzhlYTQwNWFwLTEsCisgICAgMHgxLjM4MDVhMTg4MjAwOWYyODQzZGE4MDhlOTU5ZjE3ODYxcC0xLAorICAgIDB4MS5kNGI4N2RhYjY3MGEwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIxMworICAgIC0weDEuODg2NDdmMjZhNmUwZjZiMjcxNWE2YzM3OTdlYzExZjVwLTEsCisgICAgMHgxLjQ4ZTUyZTBhNjViY2IzY2Q0NjQ1NWM0ZDIzMzhiZGYycC0xLAorICAgIC0weDEuYmYxNGJjODExYThmMHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTQKKyAgICAweDEuODg2NDdmMjZhNmUwZjZiMjcxNWE2YzM3OTdlYzExZjVwLTEsCisgICAgMHgxLjQ4ZTUyZTBhNjViY2IzY2Q0NjQ1NWM0ZDIzMzhiZGYycC0xLAorICAgIDB4MS5iZjE0YmM4MTFhOGYwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIxNQorICAgIC0weDEuN2EyNTQxZGZkNGU3NTJkZTM4ZjA0YWJhMjFmYzlkOWZwLTEsCisgICAgMHgxLjU5MmU1OGVhMGE5ZWVjMGIzNTdlYjRlOWE4M2IwZWE1cC0xLAorICAgIC0weDEuYTk3MGZiNTZjZTE0MHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTYKKyAgICAweDEuN2EyNTQxZGZkNGU3NTJkZTM4ZjA0YWJhMjFmYzlkOWZwLTEsCisgICAgMHgxLjU5MmU1OGVhMGE5ZWVjMGIzNTdlYjRlOWE4M2IwZWE1cC0xLAorICAgIDB4MS5hOTcwZmI1NmNlMTQwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIxNworICAgIC0weDEuNmIzOTFlMjViYzI2Y2JiY2Y3YTAxODQwNzBhZjljMzlwLTEsCisgICAgMHgxLjY4ZDlhZmUwNTJkMWYwZTkzMjRhZTg3Njk2MWJjZGIxcC0xLAorICAgIC0weDEuOTNjZDNhMmM4MTk5MHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAweDEuNmIzOTFlMjViYzI2Y2JiY2Y3YTAxODQwNzBhZjljMzlwLTEsCisgICAgMHgxLjY4ZDlhZmUwNTJkMWYwZTkzMjRhZTg3Njk2MWJjZGIxcC0xLAorICAgIDB4MS45M2NkM2EyYzgxOTkwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIxOQorICAgIC0weDEuNWJhNmU2YThlNzA2NTM1Yjk4ZmM5OWRmYWVmODI0ZjFwLTEsCisgICAgMHgxLjc3ZTAwOGQwNzc1ZTc0NGViMTZhMmM0ZWM3MTg0YzQzcC0xLAorICAgIC0weDEuN2UyOTc5MDIzNTFlMHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjAKKyAgICAweDEuNWJhNmU2YThlNzA2NTM1Yjk4ZmM5OWRmYWVmODI0ZjFwLTEsCisgICAgMHgxLjc3ZTAwOGQwNzc1ZTc0NGViMTZhMmM0ZWM3MTg0YzQzcC0xLAorICAgIDB4MS43ZTI5NzkwMjM1MWUwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIC0weDEuNGI3NWJhMDk2ZmE1NDllYjkzNTk1ZDgxOTRhYjkxN2ZwLTEsCisgICAgMHgxLjg2M2E4NTBlNDM4ZmUwMjkzMDJhYmEwZjVmMTI3NjE2cC0xLAorICAgIC0weDEuNjg4NWI3ZDdlOGEzMHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjIKKyAgICAweDEuNGI3NWJhMDk2ZmE1NDllYjkzNTk1ZDgxOTRhYjkxN2ZwLTEsCisgICAgMHgxLjg2M2E4NTBlNDM4ZmUwMjkzMDJhYmEwZjVmMTI3NjE2cC0xLAorICAgIDB4MS42ODg1YjdkN2U4YTMwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIyMworICAgIC0weDEuM2FhY2ZmOTVhMzEyMmIxNWYzNzJiZmQyZmRmOWE3NWZwLTEsCisgICAgMHgxLjkzZTI5NDgyMzNmY2U4MTQ0MzllZDUxZmQyNTQ4OTIwcC0xLAorICAgIC0weDEuNTJlMWY2YWQ5YzI4MHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjQKKyAgICAweDEuM2FhY2ZmOTVhMzEyMmIxNWYzNzJiZmQyZmRmOWE3NWZwLTEsCisgICAgMHgxLjkzZTI5NDgyMzNmY2U4MTQ0MzllZDUxZmQyNTQ4OTIwcC0xLAorICAgIDB4MS41MmUxZjZhZDljMjgwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIyNQorICAgIC0weDEuMjk1NDYzZTc2OTI4NGE1YWVkMTdhNDQzMzkyZjM4ZjNwLTEsCisgICAgMHgxLmEwZDFmOGE5YTc5MWQ0YjU2OTRjYTY4YTQyZmU2YzlicC0xLAorICAgIC0weDEuM2QzZTM1ODM0ZmFkMHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjYKKyAgICAweDEuMjk1NDYzZTc2OTI4NGE1YWVkMTdhNDQzMzkyZjM4ZjNwLTEsCisgICAgMHgxLmEwZDFmOGE5YTc5MWQ0YjU2OTRjYTY4YTQyZmU2YzlicC0xLAorICAgIDB4MS4zZDNlMzU4MzRmYWQwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIC0weDEuZmM3NjliNzdlNTg4NDk1YTZmNjQyY2EyNGU0ZWQzZmNwLTIsCisgICAgMHgxLmJjNmJkODYxZTEzZGUzMDk0MjhlMDBmN2JlZjZjM2VjcC0xLAorICAgIC0weDEuMGEwYjAyNTAxYzc5OXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjgKKyAgICAweDEuZmM3NjliNzdlNTg4NDk1YTZmNjQyY2EyNGU0ZWQzZmNwLTIsCisgICAgMHgxLmJjNmJkODYxZTEzZGUzMDk0MjhlMDBmN2JlZjZjM2VjcC0xLAorICAgIDB4MS4wYTBiMDI1MDFjNzk5cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIyOQorICAgIC0weDEuYzg1M2M3ODQ2MmRlNDZiNTc0MzMxNTYxMmY4YjVhN2NwLTIsCisgICAgMHgxLmNhNTljNmZhM2Q5Y2UyMzhhMjI3MzkzYjZiMDc1YmM1cC0xLAorICAgIC0weDEuZDhmNzIwOGU2YjgyY3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzAKKyAgICAweDEuYzg1M2M3ODQ2MmRlNDZiNTc0MzMxNTYxMmY4YjVhN2NwLTIsCisgICAgMHgxLmNhNTljNmZhM2Q5Y2UyMzhhMjI3MzkzYjZiMDc1YmM1cC0xLAorICAgIDB4MS5kOGY3MjA4ZTZiODJjcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzMQorICAgIC0weDEuOTJhYmE5MGFhZjI3MjQ5ZGU0OWM3OGZjNjQzYzhiNzJwLTIsCisgICAgMHgxLmQ2YzBiMTI1NzkxY2ZmY2U4M2UzMjU2NDcxMmI3OGM2cC0xLAorICAgIC0weDEuOWRkODNjN2M5ZTEyNnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzIKKyAgICAweDEuOTJhYmE5MGFhZjI3MjQ5ZGU0OWM3OGZjNjQzYzhiNzJwLTIsCisgICAgMHgxLmQ2YzBiMTI1NzkxY2ZmY2U4M2UzMjU2NDcxMmI3OGM2cC0xLAorICAgIDB4MS45ZGQ4M2M3YzllMTI2cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIC0weDEuNWJhYzA2NDY1OGYzOTQ2MGM4MzExM2MwYTAwOTdhMGNwLTIsCisgICAgMHgxLmUxOTYwMjYxODI5ODU4MzkxNjQ1YmJlMTIwMTllNThhcC0xLAorICAgIC0weDEuNjJiOTU4NmFkMGEyMHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzQKKyAgICAweDEuNWJhYzA2NDY1OGYzOTQ2MGM4MzExM2MwYTAwOTdhMGNwLTIsCisgICAgMHgxLmUxOTYwMjYxODI5ODU4MzkxNjQ1YmJlMTIwMTllNThhcC0xLAorICAgIDB4MS42MmI5NTg2YWQwYTIwcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzNQorICAgIC0weDEuMjM4M2NhODA3OGU1ODQ3N2NkNWZiMWQ5ZGUwMzFkY2VwLTIsCisgICAgMHgxLmVhZDA3Y2M2MzU2OTY0ZTI3YTEwMzZkMmY4YjE1OGY3cC0xLAorICAgIC0weDEuMjc5YTc0NTkwMzMxYXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzYKKyAgICAweDEuMjM4M2NhODA3OGU1ODQ3N2NkNWZiMWQ5ZGUwMzFkY2VwLTIsCisgICAgMHgxLmVhZDA3Y2M2MzU2OTY0ZTI3YTEwMzZkMmY4YjE1OGY3cC0xLAorICAgIDB4MS4yNzlhNzQ1OTAzMzFhcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzNworICAgIC0weDEuZDRjNWJjMTFkMjM3MWFmMmZlMjVlZjVlZGUyNzY2YTNwLTMsCisgICAgMHgxLmYyNjg0MGU3YjIxODhmN2EwY2M2NjFhMGVkZTM3MjhicC0xLAorICAgIC0weDEuZDhmNzIwOGU2YjgyOXAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzgKKyAgICAweDEuZDRjNWJjMTFkMjM3MWFmMmZlMjVlZjVlZGUyNzY2YTNwLTMsCisgICAgMHgxLmYyNjg0MGU3YjIxODhmN2EwY2M2NjFhMGVkZTM3MjhicC0xLAorICAgIDB4MS5kOGY3MjA4ZTZiODI5cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDIzOQorICAgIC0weDEuNjBmM2ZhYWY0MzAyM2QzYzc4NjNhZTA2ZDRkNTk3NzRwLTMsCisgICAgMHgxLmY4NTZkNDhkYjc5N2RlYzBiNzllMTM1MzQwOWRjM2YycC0xLAorICAgIC0weDEuNjJiOTU4NmFkMGExZXAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDAKKyAgICAweDEuNjBmM2ZhYWY0MzAyM2QzYzc4NjNhZTA2ZDRkNTk3NzRwLTMsCisgICAgMHgxLmY4NTZkNDhkYjc5N2RlYzBiNzllMTM1MzQwOWRjM2YycC0xLAorICAgIDB4MS42MmI5NTg2YWQwYTFlcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDI0MQorICAgIC0weDEuZDdlYTNkZTQ1YTlkNjU2M2FjMDA1YzBjNWJhZDhjNTBwLTQsCisgICAgMHgxLmZjOTcyODNhNDI0Nzk3MjE1ZjhhOGQxOTY3NzM2YzlicC0xLAorICAgIC0weDEuZDhmNzIwOGU2YjgyNnAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDIKKyAgICAweDEuZDdlYTNkZTQ1YTlkNjU2M2FjMDA1YzBjNWJhZDhjNTBwLTQsCisgICAgMHgxLmZjOTcyODNhNDI0Nzk3MjE1ZjhhOGQxOTY3NzM2YzlicC0xLAorICAgIDB4MS5kOGY3MjA4ZTZiODI2cC00LAorICB9LAorICB7IC8vIEVudHJ5IDI0MworICAgIC0weDEuZDhiM2RmNDg5OTg3YTZmZTBlZWFkMDA4ZTcyMGFhMjJwLTUsCisgICAgMHgxLmZmMjU5YjdhYjlmNGY5YThjYjlmMWMzMzMyNzJlNDA5cC0xLAorICAgIC0weDEuZDhmNzIwOGU2YjgyZHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDQKKyAgICAweDEuZDhiM2RmNDg5OTg3YTZmZTBlZWFkMDA4ZTcyMGFhMjJwLTUsCisgICAgMHgxLmZmMjU5YjdhYjlmNGY5YThjYjlmMWMzMzMyNzJlNDA5cC0xLAorICAgIDB4MS5kOGY3MjA4ZTZiODJkcC01LAorICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIDB4MS5kOGIzZGY0ODk5ODdhNmZlMGVlYWQwMDhlNzIwYWEyMnAtNSwKKyAgICAweDEuZmYyNTliN2FiOWY0ZjlhOGNiOWYxYzMzMzI3MmU0MDlwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmRwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMjQ2CisgICAgLTB4MS5kOGIzZGY0ODk5ODdhNmZlMGVlYWQwMDhlNzIwYWEyMnAtNSwKKyAgICAweDEuZmYyNTliN2FiOWY0ZjlhOGNiOWYxYzMzMzI3MmU0MDlwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJkcC01LAorICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIDB4MS5kN2VhM2RlNDVhOWRkNGE0YmNjZDFhOGMwNDhmYWY0Y3AtNCwKKyAgICAweDEuZmM5NzI4M2E0MjQ3OTU4NDcyOTQ2NTRhMWQ4YTA4ZWRwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmRwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgMjQ4CisgICAgLTB4MS5kN2VhM2RlNDVhOWRkNGE0YmNjZDFhOGMwNDhmYWY0Y3AtNCwKKyAgICAweDEuZmM5NzI4M2E0MjQ3OTU4NDcyOTQ2NTRhMWQ4YTA4ZWRwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJkcC00LAorICB9LAorICB7IC8vIEVudHJ5IDI0OQorICAgIDB4MS42MGYzZmFhZjQzMDI3YzQ3NTJmNTY0ZjlkMDgxOGZlOHAtMywKKyAgICAweDEuZjg1NmQ0OGRiNzk3ZGJmZWNmYThiNGNkM2JlNDQwMjdwLTEsCisgICAgMHgxLjYyYjk1ODZhZDBhMjJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjUwCisgICAgLTB4MS42MGYzZmFhZjQzMDI3YzQ3NTJmNTY0ZjlkMDgxOGZlOHAtMywKKyAgICAweDEuZjg1NmQ0OGRiNzk3ZGJmZWNmYThiNGNkM2JlNDQwMjdwLTEsCisgICAgLTB4MS42MmI5NTg2YWQwYTIycC0zLAorICB9LAorICB7IC8vIEVudHJ5IDI1MQorICAgIDB4MS5kNGM1YmMxMWQyMzc1OTQwMDY0MmU1YTFlZmRjMGY4NXAtMywKKyAgICAweDEuZjI2ODQwZTdiMjE4OGJkMDgxNGUzZGZjN2Y2ZjNmODdwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmRwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjUyCisgICAgLTB4MS5kNGM1YmMxMWQyMzc1OTQwMDY0MmU1YTFlZmRjMGY4NXAtMywKKyAgICAweDEuZjI2ODQwZTdiMjE4OGJkMDgxNGUzZGZjN2Y2ZjNmODdwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJkcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDI1MworICAgIDB4MS4yMzgzY2E4MDc4ZTVhMzI0ZDUyYzE1MzA3NDJjZDRmNXAtMiwKKyAgICAweDEuZWFkMDdjYzYzNTY5NjA1NDZhZTYzNGVmNjI2MjFmYjJwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWNwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgLTB4MS4yMzgzY2E4MDc4ZTVhMzI0ZDUyYzE1MzA3NDJjZDRmNXAtMiwKKyAgICAweDEuZWFkMDdjYzYzNTY5NjA1NDZhZTYzNGVmNjI2MjFmYjJwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFjcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDI1NQorICAgIDB4MS41YmFjMDY0NjU4ZjNiMjdhMjg1NzJiZWEyNTYxOTVlZnAtMiwKKyAgICAweDEuZTE5NjAyNjE4Mjk4NTJjYTY2MmNhMjdkNTE4YzJmYTlwLTEsCisgICAgMHgxLjYyYjk1ODZhZDBhMjJwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjU2CisgICAgLTB4MS41YmFjMDY0NjU4ZjNiMjdhMjg1NzJiZWEyNTYxOTVlZnAtMiwKKyAgICAweDEuZTE5NjAyNjE4Mjk4NTJjYTY2MmNhMjdkNTE4YzJmYTlwLTEsCisgICAgLTB4MS42MmI5NTg2YWQwYTIycC0yLAorICB9LAorICB7IC8vIEVudHJ5IDI1NworICAgIDB4MS45MmFiYTkwYWFmMjc0MjA5ZWZhZWQwOGUzNDA3MWUzYnAtMiwKKyAgICAweDEuZDZjMGIxMjU3OTFjZjk4M2Q1M2VmYWE3ZDQ1ZTI5MWVwLTEsCisgICAgMHgxLjlkZDgzYzdjOWUxMjhwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjU4CisgICAgLTB4MS45MmFiYTkwYWFmMjc0MjA5ZWZhZWQwOGUzNDA3MWUzYnAtMiwKKyAgICAweDEuZDZjMGIxMjU3OTFjZjk4M2Q1M2VmYWE3ZDQ1ZTI5MWVwLTEsCisgICAgLTB4MS45ZGQ4M2M3YzllMTI4cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDI1OQorICAgIDB4MS5jODUzYzc4NDYyZGU2MzViMTBhMmI5M2FmZDc1ZGEyNnAtMiwKKyAgICAweDEuY2E1OWM2ZmEzZDljZGIxNzUzMDkyN2FmZjFiMzNhYmJwLTEsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmVwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgLTB4MS5jODUzYzc4NDYyZGU2MzViMTBhMmI5M2FmZDc1ZGEyNnAtMiwKKyAgICAweDEuY2E1OWM2ZmEzZDljZGIxNzUzMDkyN2FmZjFiMzNhYmJwLTEsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJlcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDI2MQorICAgIDB4MS5mYzc2OWI3N2U1ODg0OTVhNmY2NDJjYTI0ZTRlZDNmY3AtMiwKKyAgICAweDEuYmM2YmQ4NjFlMTNkZTMwOTQyOGUwMGY3YmVmNmMzZWNwLTEsCisgICAgMHgxLjBhMGIwMjUwMWM3OTlwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjYyCisgICAgLTB4MS5mYzc2OWI3N2U1ODg0OTVhNmY2NDJjYTI0ZTRlZDNmY3AtMiwKKyAgICAweDEuYmM2YmQ4NjFlMTNkZTMwOTQyOGUwMGY3YmVmNmMzZWNwLTEsCisgICAgLTB4MS4wYTBiMDI1MDFjNzk5cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI2MworICAgIDB4MS4yOTU0NjNlNzY5MjgxNjQwYWUwMjZmNTBmYzQ1ZTMwMXAtMSwKKyAgICAweDEuYTBkMWY4YTlhNzkxZjlkZmY1Yzk5M2FmNDkwODI2NGRwLTEsCisgICAgMHgxLjNkM2UzNTgzNGZhY2NwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjY0CisgICAgLTB4MS4yOTU0NjNlNzY5MjgxNjQwYWUwMjZmNTBmYzQ1ZTMwMXAtMSwKKyAgICAweDEuYTBkMWY4YTlhNzkxZjlkZmY1Yzk5M2FmNDkwODI2NGRwLTEsCisgICAgLTB4MS4zZDNlMzU4MzRmYWNjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI2NQorICAgIDB4MS4zYWFjZmY5NWEzMTFmODk5YTBlMjc5NTM1ZTgxYzRlY3AtMSwKKyAgICAweDEuOTNlMjk0ODIzM2ZkMGY2OWUzOTE4OTgyMTQ4ZjgyNjVwLTEsCisgICAgMHgxLjUyZTFmNmFkOWMyN2NwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgLTB4MS4zYWFjZmY5NWEzMTFmODk5YTBlMjc5NTM1ZTgxYzRlY3AtMSwKKyAgICAweDEuOTNlMjk0ODIzM2ZkMGY2OWUzOTE4OTgyMTQ4ZjgyNjVwLTEsCisgICAgLTB4MS41MmUxZjZhZDljMjdjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIDB4MS40Yjc1YmEwOTZmYTUxOTI0NDJiNzk1MGY5NjBmODAwNnAtMSwKKyAgICAweDEuODYzYTg1MGU0MzkwMDk5N2U3NmJlODA0MDU0MzczNzdwLTEsCisgICAgMHgxLjY4ODViN2Q3ZThhMmNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjY4CisgICAgLTB4MS40Yjc1YmEwOTZmYTUxOTI0NDJiNzk1MGY5NjBmODAwNnAtMSwKKyAgICAweDEuODYzYTg1MGU0MzkwMDk5N2U3NmJlODA0MDU0MzczNzdwLTEsCisgICAgLTB4MS42ODg1YjdkN2U4YTJjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIDB4MS41YmE2ZTZhOGU3MDYyNDVmOTdlMjhhZjNkZGI3MDBmNnAtMSwKKyAgICAweDEuNzdlMDA4ZDA3NzVlOWZjMzhlM2Y0OTJmOGU5M2ZmNTFwLTEsCisgICAgMHgxLjdlMjk3OTAyMzUxZGNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjcwCisgICAgLTB4MS41YmE2ZTZhOGU3MDYyNDVmOTdlMjhhZjNkZGI3MDBmNnAtMSwKKyAgICAweDEuNzdlMDA4ZDA3NzVlOWZjMzhlM2Y0OTJmOGU5M2ZmNTFwLTEsCisgICAgLTB4MS43ZTI5NzkwMjM1MWRjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI3MQorICAgIDB4MS42YjM5MWUyNWJjMjY5ZWExYzFhNDBkZTYyZmJjMDNiNHAtMSwKKyAgICAweDEuNjhkOWFmZTA1MmQyMWU1MDU2MGY5ZmZiNmNjMWI5NDVwLTEsCisgICAgMHgxLjkzY2QzYTJjODE5OGNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjcyCisgICAgLTB4MS42YjM5MWUyNWJjMjY5ZWExYzFhNDBkZTYyZmJjMDNiNHAtMSwKKyAgICAweDEuNjhkOWFmZTA1MmQyMWU1MDU2MGY5ZmZiNmNjMWI5NDVwLTEsCisgICAgLTB4MS45M2NkM2EyYzgxOThjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI3MworICAgIDB4MS43YTI1NDFkZmQ0ZTcyN2I4NmRkMzA5NjY0MTg2ZWM2YnAtMSwKKyAgICAweDEuNTkyZTU4ZWEwYTlmMWI0ZmRkYmFhZjg2OGZlNDc5MTFwLTEsCisgICAgMHgxLmE5NzBmYjU2Y2UxM2NwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjc0CisgICAgLTB4MS43YTI1NDFkZmQ0ZTcyN2I4NmRkMzA5NjY0MTg2ZWM2YnAtMSwKKyAgICAweDEuNTkyZTU4ZWEwYTlmMWI0ZmRkYmFhZjg2OGZlNDc5MTFwLTEsCisgICAgLTB4MS5hOTcwZmI1NmNlMTNjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI3NQorICAgIDB4MS44ODY0N2YyNmE2ZTBjZDk1Y2I5OTFmN2ZmZTYxYTAyZXAtMSwKKyAgICAweDEuNDhlNTJlMGE2NWJjZTRkOWQ2MmEzMTI5M2Y3ZDQxYzFwLTEsCisgICAgMHgxLmJmMTRiYzgxMWE4ZWNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjc2CisgICAgLTB4MS44ODY0N2YyNmE2ZTBjZDk1Y2I5OTFmN2ZmZTYxYTAyZXAtMSwKKyAgICAweDEuNDhlNTJlMGE2NWJjZTRkOWQ2MmEzMTI5M2Y3ZDQxYzFwLTEsCisgICAgLTB4MS5iZjE0YmM4MTFhOGVjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI3NworICAgIDB4MS45NWYwNTI1N2RiY2IzODRhNWUzMjY4NTczNzZkZDgwMXAtMSwKKyAgICAweDEuMzgwNWExODgyMDBhMjU0MjQ3ZjMwNDYyYzM2YWNmNmFwLTEsCisgICAgMHgxLmQ0Yjg3ZGFiNjcwOWNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjc4CisgICAgLTB4MS45NWYwNTI1N2RiY2IzODRhNWUzMjY4NTczNzZkZDgwMXAtMSwKKyAgICAweDEuMzgwNWExODgyMDBhMjU0MjQ3ZjMwNDYyYzM2YWNmNmFwLTEsCisgICAgLTB4MS5kNGI4N2RhYjY3MDljcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI3OQorICAgIDB4MS5hMmMyODlkOWQwNTU4NzY0OTIxYTRkZTM1NWY5NDQ4Y3AtMSwKKyAgICAweDEuMjY5NzZhNmM0ZTBmYmFiYjg0NjMyYmQ5OWZlZWM5YzZwLTEsCisgICAgMHgxLmVhNWMzZWQ1YjM4NGNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjgwCisgICAgLTB4MS5hMmMyODlkOWQwNTU4NzY0OTIxYTRkZTM1NWY5NDQ4Y3AtMSwKKyAgICAweDEuMjY5NzZhNmM0ZTBmYmFiYjg0NjMyYmQ5OWZlZWM5YzZwLTEsCisgICAgLTB4MS5lYTVjM2VkNWIzODRjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI4MQorICAgIDB4MS5jMWU5ODgzMzczZDdlY2M0OGM5MmRjODg3NTUwNWY3ZXAtMSwKKyAgICAweDEuZThjNDA1ZjM2Zjg1YjdmNWQ2YTM4ZGZkNGE2OTIzNDFwLTIsCisgICAgMHgxLjEyYmQ5MTczYzA3YWJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAtMHgxLmMxZTk4ODMzNzNkN2VjYzQ4YzkyZGM4ODc1NTA1ZjdlcC0xLAorICAgIDB4MS5lOGM0MDVmMzZmODViN2Y1ZDZhMzhkZmQ0YTY5MjM0MXAtMiwKKyAgICAtMHgxLjEyYmQ5MTczYzA3YWJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODMKKyAgICAweDEuZDI5NGQxZjk2YzdlZjI2ZTIwM2M1YjMwOWE1NTY3MWZwLTEsCisgICAgMHgxLmE1YTRjY2Y0MGQ5Y2IyNWYxNmFkOTdlNDgwYzRiNDgzcC0yLAorICAgIDB4MS4yNTdiMjJlNzgwZjU2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjg0CisgICAgLTB4MS5kMjk0ZDFmOTZjN2VmMjZlMjAzYzViMzA5YTU1NjcxZnAtMSwKKyAgICAweDEuYTVhNGNjZjQwZDljYjI1ZjE2YWQ5N2U0ODBjNGI0ODNwLTIsCisgICAgLTB4MS4yNTdiMjJlNzgwZjU2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjg1CisgICAgMHgxLmUwYzA0YTk0ZTE3MzM1ZDA3MzA1MmEwMzk0YjllMWMzcC0xLAorICAgIDB4MS42MDQzNjIxYjEzYmQzZjkwNGIzYjg3NmRmNWIyYzZmNHAtMiwKKyAgICAweDEuMzgzOGI0NWI0MTcwMXAwLAorICB9LAorICB7IC8vIEVudHJ5IDI4NgorICAgIC0weDEuZTBjMDRhOTRlMTczMzVkMDczMDUyYTAzOTRiOWUxYzNwLTEsCisgICAgMHgxLjYwNDM2MjFiMTNiZDNmOTA0YjNiODc2ZGY1YjJjNmY0cC0yLAorICAgIC0weDEuMzgzOGI0NWI0MTcwMXAwLAorICB9LAorICB7IC8vIEVudHJ5IDI4NworICAgIDB4MS5lYzU4ODNiN2I2Y2Y3MGE1NzdkZDkxNjBkMGY4ZTlkNXAtMSwKKyAgICAweDEuMThmZWU5NmExYTU3NjJmYzY3NzBmZjE2OGUwNmFiM2VwLTIsCisgICAgMHgxLjRhZjY0NWNmMDFlYWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODgKKyAgICAtMHgxLmVjNTg4M2I3YjZjZjcwYTU3N2RkOTE2MGQwZjhlOWQ1cC0xLAorICAgIDB4MS4xOGZlZTk2YTFhNTc2MmZjNjc3MGZmMTY4ZTA2YWIzZXAtMiwKKyAgICAtMHgxLjRhZjY0NWNmMDFlYWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODkKKyAgICAweDEuZjU0ZDk3MTg4MWFkODI2MjliZDg0ZDIxNDE5NGU4ZGRwLTEsCisgICAgMHgxLmEwNzIzYTk1NDkyY2U5OTg0NTdmYjdhMGQwOWE2Mzg1cC0zLAorICAgIDB4MS41ZGIzZDc0MmMyNjU3cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjkwCisgICAgLTB4MS5mNTRkOTcxODgxYWQ4MjYyOWJkODRkMjE0MTk0ZThkZHAtMSwKKyAgICAweDEuYTA3MjNhOTU0OTJjZTk5ODQ1N2ZiN2EwZDA5YTYzODVwLTMsCisgICAgLTB4MS41ZGIzZDc0MmMyNjU3cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjkxCisgICAgMHgxLmZiOTMzYzQwMTA3ZmU4M2ZkMTZjMTc4OWUyN2Y2OWY3cC0xLAorICAgIDB4MS4wY2FiOTExNTY0MGI5ZDlkNDY2NzIzYmJkNWQ1ODliZXAtMywKKyAgICAweDEuNzA3MTY4YjY4MmUwMnAwLAorICB9LAorICB7IC8vIEVudHJ5IDI5MgorICAgIC0weDEuZmI5MzNjNDAxMDdmZTgzZmQxNmMxNzg5ZTI3ZjY5ZjdwLTEsCisgICAgMHgxLjBjYWI5MTE1NjQwYjlkOWQ0NjY3MjNiYmQ1ZDU4OWJlcC0zLAorICAgIC0weDEuNzA3MTY4YjY4MmUwMnAwLAorICB9LAorICB7IC8vIEVudHJ5IDI5MworICAgIDB4MS5mZjIwZDk2MTYyNGU3N2RhZWYzMjliNDAyOWMzNjJkZXAtMSwKKyAgICAweDEuZGRkMWVjMjVlMjAxZjUzODkyNWJmNWJjZjdjN2RmNmVwLTUsCisgICAgMHgxLjgzMmVmYTJhNDM1YWRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTQKKyAgICAtMHgxLmZmMjBkOTYxNjI0ZTc3ZGFlZjMyOWI0MDI5YzM2MmRlcC0xLAorICAgIDB4MS5kZGQxZWMyNWUyMDFmNTM4OTI1YmY1YmNmN2M3ZGY2ZXAtNSwKKyAgICAtMHgxLjgzMmVmYTJhNDM1YWRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTUKKyAgICAweDEuZmZmMThmMjRmM2U0YjY5NTkyMjk0ZjIwNmQ3YjMyYzJwLTEsCisgICAgLTB4MS5lNjY2OWEyNzBjNTZkM2EwOGQ5MWNjMjcyMWY5MmZlMXAtNywKKyAgICAweDEuOTVlYzhiOWUwM2Q1OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI5NgorICAgIC0weDEuZmZmMThmMjRmM2U0YjY5NTkyMjk0ZjIwNmQ3YjMyYzJwLTEsCisgICAgLTB4MS5lNjY2OWEyNzBjNTZkM2EwOGQ5MWNjMjcyMWY5MmZlMXAtNywKKyAgICAtMHgxLjk1ZWM4YjllMDNkNThwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTcKKyAgICAweDEuZmUwNDNmNTczNjlkNmE1MmZhMzNmMDExOWVjNGRhMTlwLTEsCisgICAgLTB4MS42ODJmM2NjM2M3YTA4ZGEyY2UwMmE0MWNkYzdiZWQ4NnAtNCwKKyAgICAweDEuYThhYTFkMTFjNDRmZnAwLAorICB9LAorICB7IC8vIEVudHJ5IDI5OAorICAgIC0weDEuZmUwNDNmNTczNjlkNmE1MmZhMzNmMDExOWVjNGRhMTlwLTEsCisgICAgLTB4MS42ODJmM2NjM2M3YTA4ZGEyY2UwMmE0MWNkYzdiZWQ4NnAtNCwKKyAgICAtMHgxLmE4YWExZDExYzQ0ZmZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTkKKyAgICAweDEuYjNkMzY5NWFjYzQxMzZiMmQ0NDcxNGY5YjM4NDE5YjRwLTEsCisgICAgMHgxLjBjYjM0NjlhMjllYTY2ZDQwMzFiZTc2OTcwMmFhZDVjcC0xLAorICAgIDB4MS4wNGFmZjZkMzMwOTQycDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzAwCisgICAgLTB4MS5iM2QzNjk1YWNjNDEzNmIyZDQ0NzE0ZjliMzg0MTliNHAtMSwKKyAgICAweDEuMGNiMzQ2OWEyOWVhNjZkNDAzMWJlNzY5NzAyYWFkNWNwLTEsCisgICAgLTB4MS4wNGFmZjZkMzMwOTQycDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzAxCisgICAgMHgxLmIzZDQxOTcyZGM4MDYzOTk0ZjYzNDEzZDVlNGQ4ZTRicC0xLAorICAgIDB4MS4wY2IyMjhmYTdmODExN2M4MmU2MWNmNTM5MzM0MWM2NHAtMSwKKyAgICAweDEuMDRiMDllOThkY2RiNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDMwMgorICAgIC0weDEuYjNkNDE5NzJkYzgwNjM5OTRmNjM0MTNkNWU0ZDhlNGJwLTEsCisgICAgMHgxLjBjYjIyOGZhN2Y4MTE3YzgyZTYxY2Y1MzkzMzQxYzY0cC0xLAorICAgIC0weDEuMDRiMDllOThkY2RiNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDMwMworICAgIDB4MS5iM2Q0Yzk4YTMxOGZiNjZmODIxZDcyODZhZTdkY2U3YnAtMSwKKyAgICAweDEuMGNiMTBiNWE2MWIwNWE3M2U3OGEzZTQ0NDdiYWY1MTRwLTEsCisgICAgMHgxLjA0YjE0NjVlODkyMjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDQKKyAgICAtMHgxLmIzZDRjOThhMzE4ZmI2NmY4MjFkNzI4NmFlN2RjZTdicC0xLAorICAgIDB4MS4wY2IxMGI1YTYxYjA1YTczZTc4YTNlNDQ0N2JhZjUxNHAtMSwKKyAgICAtMHgxLjA0YjE0NjVlODkyMjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDUKKyAgICAweDEuYjNkNTc5YTBjYjZlZTM5M2ZmNzViNThmZmUxNmQxM2ZwLTEsCisgICAgMHgxLjBjYWZlZGI5ZDA3OGE5ODQwODY5MjhhYTQwZDJlNGE1cC0xLAorICAgIDB4MS4wNGIxZWUyNDM1Njk4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzA2CisgICAgLTB4MS5iM2Q1NzlhMGNiNmVlMzkzZmY3NWI1OGZmZTE2ZDEzZnAtMSwKKyAgICAweDEuMGNhZmVkYjlkMDc4YTk4NDA4NjkyOGFhNDBkMmU0YTVwLTEsCisgICAgLTB4MS4wNGIxZWUyNDM1Njk4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgMHgxLmIzZDYyOWI2YWExZDlmNjVhYWQxYTJmYzkzMmM4YmNicC0xLAorICAgIDB4MS4wY2FlZDAxOGNiZGE3ZmE1OWM2MzFjZDU1YjMxYWE4ZHAtMSwKKyAgICAweDEuMDRiMjk1ZTllMWIwYXAwLAorICB9LAorICB7IC8vIEVudHJ5IDMwOAorICAgIC0weDEuYjNkNjI5YjZhYTFkOWY2NWFhZDFhMmZjOTMyYzhiY2JwLTEsCisgICAgMHgxLjBjYWVkMDE4Y2JkYTdmYTU5YzYzMWNkNTViMzFhYThkcC0xLAorICAgIC0weDEuMDRiMjk1ZTllMWIwYXAwLAorICB9LAorICB7IC8vIEVudHJ5IDMwOQorICAgIDB4MS5iM2Q2ZDljYmNkOWI5ZTQzYjdmYzdmZDQyOGE0NGRkOHAtMSwKKyAgICAweDEuMGNhZGIyNzc1M2Q2NTc4NWUwNmQwZTQ2NDAwNjE0OWVwLTEsCisgICAgMHgxLjA0YjMzZGFmOGRmN2NwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTAKKyAgICAtMHgxLmIzZDZkOWNiY2Q5YjllNDNiN2ZjN2ZkNDI4YTQ0ZGQ4cC0xLAorICAgIDB4MS4wY2FkYjI3NzUzZDY1Nzg1ZTA2ZDBlNDY0MDA2MTQ5ZXAtMSwKKyAgICAtMHgxLjA0YjMzZGFmOGRmN2NwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTEKKyAgICAweDEuYjNkNzg5ZTAzNWU4OTQ4ZGFiMjc1ZGZlNTQ2YzViMDhwLTEsCisgICAgMHgxLjBjYWM5NGQ1Njg2Y2FiZDI0MzBjMjBmZGYyODU1YjQ3cC0xLAorICAgIDB4MS4wNGIzZTU3NTNhM2VlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzEyCisgICAgLTB4MS5iM2Q3ODllMDM1ZTg5NDhkYWIyNzVkZmU1NDZjNWIwOHAtMSwKKyAgICAweDEuMGNhYzk0ZDU2ODZjYWJkMjQzMGMyMGZkZjI4NTViNDdwLTEsCisgICAgLTB4MS4wNGIzZTU3NTNhM2VlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzEzCisgICAgMHgxLmIzZDgzOWYzZTMwNDM2YTM1OGU5M2NiZGNiMmJiMzY3cC0xLAorICAgIDB4MS4wY2FiNzczMzA5OWRmNzM4NjQ1NTc0Y2Q0ODJlZjRiMnAtMSwKKyAgICAweDEuMDRiNDhkM2FlNjg2MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDMxNAorICAgIC0weDEuYjNkODM5ZjNlMzA0MzZhMzU4ZTkzY2JkY2IyYmIzNjdwLTEsCisgICAgMHgxLjBjYWI3NzMzMDk5ZGY3Mzg2NDU1NzRjZDQ4MmVmNGIycC0xLAorICAgIC0weDEuMDRiNDhkM2FlNjg2MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDMxNQorICAgIDB4MS5iM2Q4ZWEwNmQ0ZWUwNjg0ZjU3NDFlYzc3N2VkODhlMHAtMSwKKyAgICAweDEuMGNhYTU5OTAzNzZiMDYxZWMxY2YzODkwZjFiOGUxZTNwLTEsCisgICAgMHgxLjA0YjUzNTAwOTJjY2ZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTYKKyAgICAtMHgxLmIzZDhlYTA2ZDRlZTA2ODRmNTc0MWVjNzc3ZWQ4OGUwcC0xLAorICAgIDB4MS4wY2FhNTk5MDM3NmIwNjFlYzFjZjM4OTBmMWI4ZTFlM3AtMSwKKyAgICAtMHgxLjA0YjUzNTAwOTJjY2ZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTcKKyAgICAtMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzQsCisgIH0sCisgIHsgLy8gRW50cnkgMzE4CisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3NCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTkKKyAgICAtMC4wLAorICAgIDB4MS5wMCwKKyAgICAtMC4wLAorICB9LAorICB7IC8vIEVudHJ5IDMyMAorICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzQsCisgIH0sCisgIHsgLy8gRW50cnkgMzIxCisgICAgLTAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDc0LAorICB9LAorICB7IC8vIEVudHJ5IDMyMgorICAgIDB4MS4xNzczZDU2MWZkNTA2NWQwZTk2MDdhNzI4YTM5ZWVkMnAtMSwKKyAgICAweDEuYWQwMmM3NzFjMzVlZDVmMDEwODlhMDBjNmEyN2UwY2ZwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzIzCisgICAgLTB4MS4xNzczZDU2MWZkNTA2NWQwZTk2MDdhNzI4YTM5ZWVkMnAtMSwKKyAgICAweDEuYWQwMmM3NzFjMzVlZDVmMDEwODlhMDBjNmEyN2UwY2ZwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFicC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMyNAorICAgIDB4MS4xNzczZDU2MWZkNTA3MzM4ZmY5YzA4OGQ4MGM2ODBkYnAtMSwKKyAgICAweDEuYWQwMmM3NzFjMzVlY2QzNDcxZGU5MDIxZTZjM2I5MmJwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzI1CisgICAgLTB4MS4xNzczZDU2MWZkNTA3MzM4ZmY5YzA4OGQ4MGM2ODBkYnAtMSwKKyAgICAweDEuYWQwMmM3NzFjMzVlY2QzNDcxZGU5MDIxZTZjM2I5MmJwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMyNgorICAgIDB4MS4xNzczZDU2MWZkNTA4MGExMTVkNzk2YTg3NzBkMzVlZnAtMSwKKyAgICAweDEuYWQwMmM3NzFjMzVlYzQ3OGQzMzM4MDM3NjJmNDUwZDVwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzI3CisgICAgLTB4MS4xNzczZDU2MWZkNTA4MGExMTVkNzk2YTg3NzBkMzVlZnAtMSwKKyAgICAweDEuYWQwMmM3NzFjMzVlYzQ3OGQzMzM4MDM3NjJmNDUwZDVwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFkcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMyOAorICAgIDB4MS5mOTViOGU3MTA3NDE4YzExYzk0ZDRhNTRhOWRhOWI3YXAtMSwKKyAgICAtMHgxLjQ4ZDFkZGQyYjJiM2Y4YzIxYjk0MjFlNjViMzgwNzM1cC0zLAorICAgIDB4MS5iYjY3YWU4NTg0Y2E5cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzI5CisgICAgLTB4MS5mOTViOGU3MTA3NDE4YzExYzk0ZDRhNTRhOWRhOWI3YXAtMSwKKyAgICAtMHgxLjQ4ZDFkZGQyYjJiM2Y4YzIxYjk0MjFlNjViMzgwNzM1cC0zLAorICAgIC0weDEuYmI2N2FlODU4NGNhOXAwLAorICB9LAorICB7IC8vIEVudHJ5IDMzMAorICAgIDB4MS5mOTViOGU3MTA3NDE4NmVlODFkNWZmODlkOGZhZTU0NXAtMSwKKyAgICAtMHgxLjQ4ZDFkZGQyYjJiNDc3MThmZjMwNjNiNmJkOTgxMDk5cC0zLAorICAgIDB4MS5iYjY3YWU4NTg0Y2FhcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzMxCisgICAgLTB4MS5mOTViOGU3MTA3NDE4NmVlODFkNWZmODlkOGZhZTU0NXAtMSwKKyAgICAtMHgxLjQ4ZDFkZGQyYjJiNDc3MThmZjMwNjNiNmJkOTgxMDk5cC0zLAorICAgIC0weDEuYmI2N2FlODU4NGNhYXAwLAorICB9LAorICB7IC8vIEVudHJ5IDMzMgorICAgIDB4MS5mOTViOGU3MTA3NDE4MWNiM2E1ZWI0YmYwNjIxZDM4MXAtMSwKKyAgICAtMHgxLjQ4ZDFkZGQyYjJiNGY1NmZlMmNjYTU4NzFlYWY0ODIwcC0zLAorICAgIDB4MS5iYjY3YWU4NTg0Y2FicDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzMzCisgICAgLTB4MS5mOTViOGU3MTA3NDE4MWNiM2E1ZWI0YmYwNjIxZDM4MXAtMSwKKyAgICAtMHgxLjQ4ZDFkZGQyYjJiNGY1NmZlMmNjYTU4NzFlYWY0ODIwcC0zLAorICAgIC0weDEuYmI2N2FlODU4NGNhYnAwLAorICB9LAorICB7IC8vIEVudHJ5IDMzNAorICAgIDB4MS5iMWQ4MzA1MzIxNjE1YWM5MzhjZmYwMmJlOWYyNTA4NXAtMiwKKyAgICAweDEuY2ZjNmNmYTUyYWQ5Zjk5MTFkYjRjYTBkNDVmZGIwYjNwLTEsCisgICAgMHgxLmJmZmZmZmZmZmZmZmZwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzM1CisgICAgLTB4MS5iMWQ4MzA1MzIxNjE1YWM5MzhjZmYwMmJlOWYyNTA4NXAtMiwKKyAgICAweDEuY2ZjNmNmYTUyYWQ5Zjk5MTFkYjRjYTBkNDVmZGIwYjNwLTEsCisgICAgLTB4MS5iZmZmZmZmZmZmZmZmcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDMzNgorICAgIDB4MS5iMWQ4MzA1MzIxNjE2OTQ3NmY0ZDE5ODJiOWIxNGFiMXAtMiwKKyAgICAweDEuY2ZjNmNmYTUyYWQ5ZjYyZDZkNTQyM2NhODMzOWEwMGFwLTEsCisgICAgMHgxLmNwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzM3CisgICAgLTB4MS5iMWQ4MzA1MzIxNjE2OTQ3NmY0ZDE5ODJiOWIxNGFiMXAtMiwKKyAgICAweDEuY2ZjNmNmYTUyYWQ5ZjYyZDZkNTQyM2NhODMzOWEwMGFwLTEsCisgICAgLTB4MS5jcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDMzOAorICAgIDB4MS5iMWQ4MzA1MzIxNjE3N2M1YTVjYTQyZDk4OTU1Mjc1YXAtMiwKKyAgICAweDEuY2ZjNmNmYTUyYWQ5ZjJjOWJjZjM3ZDg3YzA1ODkyZjVwLTEsCisgICAgMHgxLmMwMDAwMDAwMDAwMDFwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgLTB4MS5iMWQ4MzA1MzIxNjE3N2M1YTVjYTQyZDk4OTU1Mjc1YXAtMiwKKyAgICAweDEuY2ZjNmNmYTUyYWQ5ZjJjOWJjZjM3ZDg3YzA1ODkyZjVwLTEsCisgICAgLTB4MS5jMDAwMDAwMDAwMDAxcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDM0MAorICAgIDB4MS40NGViMzgxY2YzODY5ZWE3MWNjYjM2ODYzZTRlYTY1YnAtMSwKKyAgICAweDEuOGJiMTA1YTVkYzkwMTA0MDUxZDA4Y2I5NjU2MzE4MDdwLTEsCisgICAgMHgxLjVmZmZmZmZmZmZmZmZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzQxCisgICAgLTB4MS40NGViMzgxY2YzODY5ZWE3MWNjYjM2ODYzZTRlYTY1YnAtMSwKKyAgICAweDEuOGJiMTA1YTVkYzkwMTA0MDUxZDA4Y2I5NjU2MzE4MDdwLTEsCisgICAgLTB4MS41ZmZmZmZmZmZmZmZmcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM0MgorICAgIDB4MS40NGViMzgxY2YzODZhYjA0YTRmODY1NmFiZWE4MGI4M3AtMSwKKyAgICAweDEuOGJiMTA1YTVkYzkwMDYxOGY4MGZhNTFkMzAzYzY5cC0xLAorICAgIDB4MS42cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM0MworICAgIC0weDEuNDRlYjM4MWNmMzg2YWIwNGE0Zjg2NTZhYmVhODBiODNwLTEsCisgICAgMHgxLjhiYjEwNWE1ZGM5MDA2MThmODBmYTUxZDMwM2M2OXAtMSwKKyAgICAtMHgxLjZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzQ0CisgICAgMHgxLjQ0ZWIzODFjZjM4NmI3NjIyZDI1OTQ0ZjNlYjAzNWRjcC0xLAorICAgIDB4MS44YmIxMDVhNWRjOGZmYmYxOWU0ZWJkODBmYWIyY2RiOHAtMSwKKyAgICAweDEuNjAwMDAwMDAwMDAwMXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDUKKyAgICAtMHgxLjQ0ZWIzODFjZjM4NmI3NjIyZDI1OTQ0ZjNlYjAzNWRjcC0xLAorICAgIDB4MS44YmIxMDVhNWRjOGZmYmYxOWU0ZWJkODBmYWIyY2RiOHAtMSwKKyAgICAtMHgxLjYwMDAwMDAwMDAwMDFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzQ2CisgICAgMHgxLmRhZDkwMmZhOGFjODY0ZmQ4YWZhMGJkYzYwOWRlZDE5cC0xLAorICAgIDB4MS43ZWY0ODQyZjBiY2QxMTY4NmFhZjZmMjFjOWFhODM1NHAtMiwKKyAgICAweDEuMmZmZmZmZmZmZmZmZnAwLAorICB9LAorICB7IC8vIEVudHJ5IDM0NworICAgIC0weDEuZGFkOTAyZmE4YWM4NjRmZDhhZmEwYmRjNjA5ZGVkMTlwLTEsCisgICAgMHgxLjdlZjQ4NDJmMGJjZDExNjg2YWFmNmYyMWM5YWE4MzU0cC0yLAorICAgIC0weDEuMmZmZmZmZmZmZmZmZnAwLAorICB9LAorICB7IC8vIEVudHJ5IDM0OAorICAgIDB4MS5kYWQ5MDJmYThhYzg3MGY1MmYxYjg0M2FjODNiYzNlZHAtMSwKKyAgICAweDEuN2VmNDg0MmYwYmNjZDYwZDRhNTAxZGM4YmM0YjU3YjNwLTIsCisgICAgMHgxLjNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDkKKyAgICAtMHgxLmRhZDkwMmZhOGFjODcwZjUyZjFiODQzYWM4M2JjM2VkcC0xLAorICAgIDB4MS43ZWY0ODQyZjBiY2NkNjBkNGE1MDFkYzhiYzRiNTdiM3AtMiwKKyAgICAtMHgxLjNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTAKKyAgICAweDEuZGFkOTAyZmE4YWM4N2NlY2QzM2NmYzk5MmRmZWMxYmVwLTEsCisgICAgMHgxLjdlZjQ4NDJmMGJjYzlhYjIyOWYwY2M2ZmFkNmQzNzhkcC0yLAorICAgIDB4MS4zMDAwMDAwMDAwMDAxcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzUxCisgICAgLTB4MS5kYWQ5MDJmYThhYzg3Y2VjZDMzY2ZjOTkyZGZlYzFiZXAtMSwKKyAgICAweDEuN2VmNDg0MmYwYmNjOWFiMjI5ZjBjYzZmYWQ2ZDM3OGRwLTIsCisgICAgLTB4MS4zMDAwMDAwMDAwMDAxcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzUyCisgICAgMHgxLjRiNzA3YTdhY2RlY2Y5MGExODhkMDIzMGZhZDNhZDU4cC0xLAorICAgIC0weDEuODYzZWZhMzYxZGMyMjk0ZTkyOWI5NTE1ZmIzNGY5YmFwLTEsCisgICAgMHgxLjM3ZmZmZmZmZmZmZmZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTMKKyAgICAtMHgxLjRiNzA3YTdhY2RlY2Y5MGExODhkMDIzMGZhZDNhZDU4cC0xLAorICAgIC0weDEuODYzZWZhMzYxZGMyMjk0ZTkyOWI5NTE1ZmIzNGY5YmFwLTEsCisgICAgLTB4MS4zN2ZmZmZmZmZmZmZmcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMzU0CisgICAgMHgxLjRiNzA3YTdhY2RlY2M4NDIzOTQ2M2U3OGIzMTJmYTEwcC0xLAorICAgIC0weDEuODYzZWZhMzYxZGMyNTJiY2ExZWFlZWQzOTc0OWJlZDdwLTEsCisgICAgMHgxLjM4MHAxLAorICB9LAorICB7IC8vIEVudHJ5IDM1NQorICAgIC0weDEuNGI3MDdhN2FjZGVjYzg0MjM5NDYzZTc4YjMxMmZhMTBwLTEsCisgICAgLTB4MS44NjNlZmEzNjFkYzI1MmJjYTFlYWVlZDM5NzQ5YmVkN3AtMSwKKyAgICAtMHgxLjM4MHAxLAorICB9LAorICB7IC8vIEVudHJ5IDM1NgorICAgIDB4MS40YjcwN2E3YWNkZWM5NzdhNTlmZjdhYzA2NjI0ODRkZHAtMSwKKyAgICAtMHgxLjg2M2VmYTM2MWRjMjdjMmFiMTNhNDg5MTJkNDU4ODBicC0xLAorICAgIDB4MS4zODAwMDAwMDAwMDAxcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMzU3CisgICAgLTB4MS40YjcwN2E3YWNkZWM5NzdhNTlmZjdhYzA2NjI0ODRkZHAtMSwKKyAgICAtMHgxLjg2M2VmYTM2MWRjMjdjMmFiMTNhNDg5MTJkNDU4ODBicC0xLAorICAgIC0weDEuMzgwMDAwMDAwMDAwMXAxLAorICB9LAorICB7IC8vIEVudHJ5IDM1OAorICAgIDB4MS4wNjZlN2ViNzZmNWM2Njc4ZmQ4MzI1YTgxZjE5MjVjNnAtNCwKKyAgICAweDEuZmVmMmIyZDIxY2Y2YzEwNmU4NmZmOTM5NWY4MjA0YTBwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTJwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgMzU5CisgICAgLTB4MS4wNjZlN2ViNzZmNWM2Njc4ZmQ4MzI1YTgxZjE5MjVjNnAtNCwKKyAgICAweDEuZmVmMmIyZDIxY2Y2YzEwNmU4NmZmOTM5NWY4MjA0YTBwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzNzkycC00LAorICB9LAorICB7IC8vIEVudHJ5IDM2MAorICAgIDB4MS4wNWU0NzYxYWI4ZDhmMGE3ZGJhODM0MDAwZjIzNjY1MHAtMywKKyAgICAweDEuZmJjYmU2OTNiZDhlYzg1NzIzYjZjYjU1ZTRmNWU3OGZwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMzYxCisgICAgLTB4MS4wNWU0NzYxYWI4ZDhmMGE3ZGJhODM0MDAwZjIzNjY1MHAtMywKKyAgICAweDEuZmJjYmU2OTNiZDhlYzg1NzIzYjZjYjU1ZTRmNWU3OGZwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzNzkycC0zLAorICB9LAorICB7IC8vIEVudHJ5IDM2MgorICAgIDB4MS44NzdlMmNkNGY2ZmQ5YmE0OThlMzI3MDUzMDMyNzM0ZnAtMywKKyAgICAweDEuZjY4ZWViZmNiYjVlODQxOTAwZTI1NDJmN2MyNGJhYjBwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWJwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMzYzCisgICAgLTB4MS44NzdlMmNkNGY2ZmQ5YmE0OThlMzI3MDUzMDMyNzM0ZnAtMywKKyAgICAweDEuZjY4ZWViZmNiYjVlODQxOTAwZTI1NDJmN2MyNGJhYjBwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzVicC0zLAorICB9LAorICB7IC8vIEVudHJ5IDM2NAorICAgIDB4MS4wM2JlMDZmOTdjYmVlNDc2OTg1MzlmOTc3Y2FkYmU3ZXAtMiwKKyAgICAweDEuZWY0MTQ1YjRhZWNmZmJkYWFmZmI3OGZmYjQ5YWM5YmRwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTJwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzY1CisgICAgLTB4MS4wM2JlMDZmOTdjYmVlNDc2OTg1MzlmOTc3Y2FkYmU3ZXAtMiwKKyAgICAweDEuZWY0MTQ1YjRhZWNmZmJkYWFmZmI3OGZmYjQ5YWM5YmRwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzNzkycC0yLAorICB9LAorICB7IC8vIEVudHJ5IDM2NgorICAgIDB4MS40MmFiYmE4YzcyZmJiOGNhOTZmNzlhYTRiYjAzNTg0ZXAtMiwKKyAgICAweDEuZTVlYWEyODZmYmJjNjcwZGJmNjM5MmQ3Yzk4YWIwYTBwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzZwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzY3CisgICAgLTB4MS40MmFiYmE4YzcyZmJiOGNhOTZmNzlhYTRiYjAzNTg0ZXAtMiwKKyAgICAweDEuZTVlYWEyODZmYmJjNjcwZGJmNjM5MmQ3Yzk4YWIwYTBwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNTc2cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDM2OAorICAgIDB4MS44MDQ1ZmU2NGU2MmRjM2Q2ODZkOTc2ZDdkNWE3YzY4OXAtMiwKKyAgICAweDEuZGE5NGQ1NGRkNGMwODc2ZTE4ZWU5N2M3MGQxYTRhOTRwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzNWFwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzY5CisgICAgLTB4MS44MDQ1ZmU2NGU2MmRjM2Q2ODZkOTc2ZDdkNWE3YzY4OXAtMiwKKyAgICAweDEuZGE5NGQ1NGRkNGMwODc2ZTE4ZWU5N2M3MGQxYTRhOTRwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzVhcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDM3MAorICAgIDB4MS5iYzRjMDRkNzFhYmJlZWE1YWIwNjRlY2ZiZjU0YzYxM3AtMiwKKyAgICAweDEuY2Q0YmNhOWNiNWM3MTUzMDIwMDFlNDQ2Y2M5M2E3YmNwLTEsCisgICAgMHgxLmNiOTFmM2JiYmExM2VwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzcxCisgICAgLTB4MS5iYzRjMDRkNzFhYmJlZWE1YWIwNjRlY2ZiZjU0YzYxM3AtMiwKKyAgICAweDEuY2Q0YmNhOWNiNWM3MTUzMDIwMDFlNDQ2Y2M5M2E3YmNwLTEsCisgICAgLTB4MS5jYjkxZjNiYmJhMTNlcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDM3MgorICAgIDB4MS5mNjdlYTk3NWI4NmEwMTUxMGU2YmRlMzc3ODEzODkzNHAtMiwKKyAgICAweDEuYmUxZDdjMzUzNGM0MDMzMWZkZGYyNDNkOGEwYTU2YjBwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzczCisgICAgLTB4MS5mNjdlYTk3NWI4NmEwMTUxMGU2YmRlMzc3ODEzODkzNHAtMiwKKyAgICAweDEuYmUxZDdjMzUzNGM0MDMzMWZkZGYyNDNkOGEwYTU2YjBwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzNzkxcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM3NAorICAgIDB4MS4xNzUwNTliZjBkNDI1MjRlY2IwYmY0MjQzYjU1OTczZHAtMSwKKyAgICAweDEuYWQxOWUyNTM1YWE5Njc4YmQ1ZmRhZmM2ODgxNzcwMGJwLTEsCisgICAgMHgxLjI3NzAxY2FmODllODNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzc1CisgICAgLTB4MS4xNzUwNTliZjBkNDI1MjRlY2IwYmY0MjQzYjU1OTczZHAtMSwKKyAgICAweDEuYWQxOWUyNTM1YWE5Njc4YmQ1ZmRhZmM2ODgxNzcwMGJwLTEsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTgzcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM3NgorICAgIDB4MS4zMjNiOGIxZmI0YmEyMWRkMTJjY2U4MjBlMTU2YTRmY3AtMSwKKyAgICAweDEuOWE1MmUyZTBmYmNiM2EzZjRiZGU2ZjZlYzI3NzY3YTlwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzVwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzc3CisgICAgLTB4MS4zMjNiOGIxZmI0YmEyMWRkMTJjY2U4MjBlMTU2YTRmY3AtMSwKKyAgICAweDEuOWE1MmUyZTBmYmNiM2EzZjRiZGU2ZjZlYzI3NzY3YTlwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNTc1cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM3OAorICAgIDB4MS40YmU0OTc5YzVlZmIzMDZjMWE3NzAyNDAzMjg0OWI1MnAtMSwKKyAgICAweDEuODVkYzNlYTFiYmNlOWE4MDg1ZjY2NTkzYTg3YjdlMmVwLTEsCisgICAgMHgxLjY5MTczZjgxMzZjNjdwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzc5CisgICAgLTB4MS40YmU0OTc5YzVlZmIzMDZjMWE3NzAyNDAzMjg0OWI1MnAtMSwKKyAgICAweDEuODVkYzNlYTFiYmNlOWE4MDg1ZjY2NTkzYTg3YjdlMmVwLTEsCisgICAgLTB4MS42OTE3M2Y4MTM2YzY3cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM4MAorICAgIDB4MS42NDMwODBkNjdhY2MxMzMyYzY0YTg1NjEyY2FjYWZiOXAtMSwKKyAgICAweDEuNmZjYjdjNmI4YjkxOWFmM2RkYTUzMDk0YzlhMjdhYWJwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzNTlwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzgxCisgICAgLTB4MS42NDMwODBkNjdhY2MxMzMyYzY0YTg1NjEyY2FjYWZiOXAtMSwKKyAgICAweDEuNmZjYjdjNmI4YjkxOWFmM2RkYTUzMDk0YzlhMjdhYWJwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzU5cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM4MgorICAgIDB4MS43YjA1YjdiNmM2MTJlNWIwOGQ1ZWZlNDlhNDZlMjFhMXAtMSwKKyAgICAweDEuNTgzN2QyODE3Y2YzMDNlZjZkYWU2OWZhZWIwZjAxNWVwLTEsCisgICAgMHgxLmFhYmU2MjUyZTNhNGJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzgzCisgICAgLTB4MS43YjA1YjdiNmM2MTJlNWIwOGQ1ZWZlNDlhNDZlMjFhMXAtMSwKKyAgICAweDEuNTgzN2QyODE3Y2YzMDNlZjZkYWU2OWZhZWIwZjAxNWVwLTEsCisgICAgLTB4MS5hYWJlNjI1MmUzYTRicC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM4NAorICAgIDB4MS45MDRjMzc1MDVkZTQ4ZmE4ZTc2Mjg3OTYwZmQ0NDU5NHAtMSwKKyAgICAweDEuM2YzYTBlMjhiZWRkNDA0NDU4NThmODIzZTE1MDI2NGJwLTEsCisgICAgMHgxLmNiOTFmM2JiYmExM2RwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzg1CisgICAgLTB4MS45MDRjMzc1MDVkZTQ4ZmE4ZTc2Mjg3OTYwZmQ0NDU5NHAtMSwKKyAgICAweDEuM2YzYTBlMjhiZWRkNDA0NDU4NThmODIzZTE1MDI2NGJwLTEsCisgICAgLTB4MS5jYjkxZjNiYmJhMTNkcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM4NgorICAgIDB4MS5hM2VkOWUyNTI5MzhhMTRjNzljNTc1NjM5YzE1YTkxZHAtMSwKKyAgICAweDEuMjRlYzc5OTE3MTY0MmRiZDI0ZDI1OTAwNTgyMmJkMjVwLTEsCisgICAgMHgxLmVjNjU4NTI0OTA4MmZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzg3CisgICAgLTB4MS5hM2VkOWUyNTI5MzhhMTRjNzljNTc1NjM5YzE1YTkxZHAtMSwKKyAgICAweDEuMjRlYzc5OTE3MTY0MmRiZDI0ZDI1OTAwNTgyMmJkMjVwLTEsCisgICAgLTB4MS5lYzY1ODUyNDkwODJmcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM4OAorICAgIDB4MS5iNWQ1NDViMTA5YmY5MzU1OTQwMzY3OThjZjQwYzliMHAtMSwKKyAgICAweDEuMDk2YWMwMmVjNDJjODViN2IxMGFmZWQ5MjAyNzg1YjlwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTFwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODkKKyAgICAtMHgxLmI1ZDU0NWIxMDliZjkzNTU5NDAzNjc5OGNmNDBjOWIwcC0xLAorICAgIDB4MS4wOTZhYzAyZWM0MmM4NWI3YjEwYWZlZDkyMDI3ODViOXAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTFwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTAKKyAgICAweDEuYzVmMDU4MjMwZTdmZDE0ZDNlNWUzMTUzNDlmNjk5ZWZwLTEsCisgICAgMHgxLmQ5YTNhMzM2ZWRiNzYxM2RmMDYyZTg2YTMyZDA5ZmUxcC0yLAorICAgIDB4MS4xNzA2NTNmYjFlYjBhcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzkxCisgICAgLTB4MS5jNWYwNTgyMzBlN2ZkMTRkM2U1ZTMxNTM0OWY2OTllZnAtMSwKKyAgICAweDEuZDlhM2EzMzZlZGI3NjEzZGYwNjJlODZhMzJkMDlmZTFwLTIsCisgICAgLTB4MS4xNzA2NTNmYjFlYjBhcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzkyCisgICAgMHgxLmQ0MmRlNDJkY2UxMzQ2YTAzZDFmNmFiZjBlYmE5MDIycC0xLAorICAgIDB4MS45ZTdmODY1MmI0NzU4MmFmZDI5NzQ0MjkzMTcwYzA3Y3AtMiwKKyAgICAweDEuMjc3MDFjYWY4OWU4M3AwLAorICB9LAorICB7IC8vIEVudHJ5IDM5MworICAgIC0weDEuZDQyZGU0MmRjZTEzNDZhMDNkMWY2YWJmMGViYTkwMjJwLTEsCisgICAgMHgxLjllN2Y4NjUyYjQ3NTgyYWZkMjk3NDQyOTMxNzBjMDdjcC0yLAorICAgIC0weDEuMjc3MDFjYWY4OWU4M3AwLAorICB9LAorICB7IC8vIEVudHJ5IDM5NAorICAgIDB4MS5lMDdlZWVkYTEwOWNiNTA0YWZjY2E4NjBkNGI1ZGQzMnAtMSwKKyAgICAweDEuNjFhNzYwNzdhZWUwN2JiMzQ5Y2E3NmNmNzAwOTEzZDFwLTIsCisgICAgMHgxLjM3ZDllNTYzZjUxZmNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTUKKyAgICAtMHgxLmUwN2VlZWRhMTA5Y2I1MDRhZmNjYTg2MGQ0YjVkZDMycC0xLAorICAgIDB4MS42MWE3NjA3N2FlZTA3YmIzNDljYTc2Y2Y3MDA5MTNkMXAtMiwKKyAgICAtMHgxLjM3ZDllNTYzZjUxZmNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTYKKyAgICAweDEuZWFkNjgzNDkwOWI5MzM3MWZhZjNiZWFkZGJkNjBlZGRwLTEsCisgICAgMHgxLjIzNWIzMzFkOGY3NDhlMjBmYjZkZGI2YTcwOGRiYTEwcC0yLAorICAgIDB4MS40ODQzYWUxODYwNTc1cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzk3CisgICAgLTB4MS5lYWQ2ODM0OTA5YjkzMzcxZmFmM2JlYWRkYmQ2MGVkZHAtMSwKKyAgICAweDEuMjM1YjMzMWQ4Zjc0OGUyMGZiNmRkYjZhNzA4ZGJhMTBwLTIsCisgICAgLTB4MS40ODQzYWUxODYwNTc1cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzk4CisgICAgMHgxLmYzMjljMDU1OGU5NjdlNGNhYjU4ZDBmYTU3MmQ2MmQycC0xLAorICAgIDB4MS5jN2I5MGUzMDI0NTkzZGE4NDQ5OTYzY2ZlMDhkZGU4NXAtMywKKyAgICAweDEuNThhZDc2Y2NjYjhlZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM5OQorICAgIC0weDEuZjMyOWMwNTU4ZTk2N2U0Y2FiNThkMGZhNTcyZDYyZDJwLTEsCisgICAgMHgxLmM3YjkwZTMwMjQ1OTNkYTg0NDk5NjNjZmUwOGRkZTg1cC0zLAorICAgIC0weDEuNThhZDc2Y2NjYjhlZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDQwMAorICAgIDB4MS5mOTZmZTQwNWYxYWM1ZGM5Y2YzNDM1MDgwNjdiZmNhZXAtMSwKKyAgICAweDEuNDZkYzRmNGNlODNkYTcyN2VhMDQ4Y2M3ZDJmMjc2ZDFwLTMsCisgICAgMHgxLjY5MTczZjgxMzZjNjdwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDEKKyAgICAtMHgxLmY5NmZlNDA1ZjFhYzVkYzljZjM0MzUwODA2N2JmY2FlcC0xLAorICAgIDB4MS40NmRjNGY0Y2U4M2RhNzI3ZWEwNDhjYzdkMmYyNzZkMXAtMywKKyAgICAtMHgxLjY5MTczZjgxMzZjNjdwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDIKKyAgICAweDEuZmRhMjU0YzI3YTAxZjQ3ODZjMTQ5ZDZhNzc3OWNjM2FwLTEsCisgICAgMHgxLjg5NGY3MGJlZmJiOTlhYjdkZjlkMTc5MGEyOGY0OGFkcC00LAorICAgIDB4MS43OTgxMDgzNWExZmUwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDAzCisgICAgLTB4MS5mZGEyNTRjMjdhMDFmNDc4NmMxNDlkNmE3Nzc5Y2MzYXAtMSwKKyAgICAweDEuODk0ZjcwYmVmYmI5OWFiN2RmOWQxNzkwYTI4ZjQ4YWRwLTQsCisgICAgLTB4MS43OTgxMDgzNWExZmUwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDA0CisgICAgMHgxLmZmYmNhODQ2YzRmYzk5N2YxYTM4MTQyMDIwODg4NGUwcC0xLAorICAgIDB4MS4wNjkxMDdhZTkzMzJmOTVmYTJjNWNlZWFkZmIyOWY3N3AtNSwKKyAgICAweDEuODllYWQwZWEwZDM1OXAwLAorICB9LAorICB7IC8vIEVudHJ5IDQwNQorICAgIC0weDEuZmZiY2E4NDZjNGZjOTk3ZjFhMzgxNDIwMjA4ODg0ZTBwLTEsCisgICAgMHgxLjA2OTEwN2FlOTMzMmY5NWZhMmM1Y2VlYWRmYjI5Zjc3cC01LAorICAgIC0weDEuODllYWQwZWEwZDM1OXAwLAorICB9LAorICB7IC8vIEVudHJ5IDQwNgorICAgIDB4MS5mZmJjYTg0NmM0ZmM5ZjMwYmZiNDU4ZWYyMDkxYzhlZXAtMSwKKyAgICAtMHgxLjA2OTEwN2FlOTMyN2UwNzMxYTc0OGMyMWYwM2I1ZWZjcC01LAorICAgIDB4MS45YTU0OTk5ZTc4NmQycDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDA3CisgICAgLTB4MS5mZmJjYTg0NmM0ZmM5ZjMwYmZiNDU4ZWYyMDkxYzhlZXAtMSwKKyAgICAtMHgxLjA2OTEwN2FlOTMyN2UwNzMxYTc0OGMyMWYwM2I1ZWZjcC01LAorICAgIC0weDEuOWE1NDk5OWU3ODZkMnAwLAorICB9LAorICB7IC8vIEVudHJ5IDQwOAorICAgIDB4MS5mZGEyNTRjMjdhMDIwNTg3NWYyNzE0MzVmODI3MTYwY3AtMSwKKyAgICAtMHgxLjg5NGY3MGJlZmJiNDE0MTdkZmY4NDNlODFmYWMzODhicC00LAorICAgIDB4MS5hYWJlNjI1MmUzYTRicDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDA5CisgICAgLTB4MS5mZGEyNTRjMjdhMDIwNTg3NWYyNzE0MzVmODI3MTYwY3AtMSwKKyAgICAtMHgxLjg5NGY3MGJlZmJiNDE0MTdkZmY4NDNlODFmYWMzODhicC00LAorICAgIC0weDEuYWFiZTYyNTJlM2E0YnAwLAorICB9LAorICB7IC8vIEVudHJ5IDQxMAorICAgIDB4MS5mOTZmZTQwNWYxYWM3YTI0MWUwMmU1OGIwY2JmM2FlN3AtMSwKKyAgICAtMHgxLjQ2ZGM0ZjRjZTgzYWU5YWIxY2MxYjIzNjdjYjc1M2VicC0zLAorICAgIDB4MS5iYjI4MmIwNzRlZGM0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDExCisgICAgLTB4MS5mOTZmZTQwNWYxYWM3YTI0MWUwMmU1OGIwY2JmM2FlN3AtMSwKKyAgICAtMHgxLjQ2ZGM0ZjRjZTgzYWU5YWIxY2MxYjIzNjdjYjc1M2VicC0zLAorICAgIC0weDEuYmIyODJiMDc0ZWRjNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQxMgorICAgIDB4MS5mMzI5YzA1NThlOTZhNWQ0ODI3MmFkNGM0OWVjNTNiOHAtMSwKKyAgICAtMHgxLmM3YjkwZTMwMjQ1Njg4ZTA5OTg2MGU4ZDRmZmY2MDFjcC0zLAorICAgIDB4MS5jYjkxZjNiYmJhMTNkcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDEzCisgICAgLTB4MS5mMzI5YzA1NThlOTZhNWQ0ODI3MmFkNGM0OWVjNTNiOHAtMSwKKyAgICAtMHgxLmM3YjkwZTMwMjQ1Njg4ZTA5OTg2MGU4ZDRmZmY2MDFjcC0zLAorICAgIC0weDEuY2I5MWYzYmJiYTEzZHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQxNAorICAgIDB4MS5lYWQ2ODM0OTA5Yjk2NWZkYzRiMGNlZmZjMGYyODVjNnAtMSwKKyAgICAtMHgxLjIzNWIzMzFkOGY3MzM5ODQxYTUxNzMxMmQwZDM0N2ZicC0yLAorICAgIDB4MS5kYmZiYmM3MDI1NGI2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDE1CisgICAgLTB4MS5lYWQ2ODM0OTA5Yjk2NWZkYzRiMGNlZmZjMGYyODVjNnAtMSwKKyAgICAtMHgxLjIzNWIzMzFkOGY3MzM5ODQxYTUxNzMxMmQwZDM0N2ZicC0yLAorICAgIC0weDEuZGJmYmJjNzAyNTRiNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDQxNgorICAgIDB4MS5lMDdlZWVkYTEwOWNmMjVmNDAwY2Q1ZjQ2YWNlYzg4N3AtMSwKKyAgICAtMHgxLjYxYTc2MDc3YWVkZjJlNDNhY2E0MThmN2EyZTEzMjRkcC0yLAorICAgIDB4MS5lYzY1ODUyNDkwODJmcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDE3CisgICAgLTB4MS5lMDdlZWVkYTEwOWNmMjVmNDAwY2Q1ZjQ2YWNlYzg4N3AtMSwKKyAgICAtMHgxLjYxYTc2MDc3YWVkZjJlNDNhY2E0MThmN2EyZTEzMjRkcC0yLAorICAgIC0weDEuZWM2NTg1MjQ5MDgyZnAwLAorICB9LAorICB7IC8vIEVudHJ5IDQxOAorICAgIDB4MS5kNDJkZTQyZGNlMTM4ZTg5MDkzOWU1NmM0MzlkZWQ5MHAtMSwKKyAgICAtMHgxLjllN2Y4NjUyYjQ3NDNkY2MzYzM1NjhiYWZmOGJmOWVicC0yLAorICAgIDB4MS5mY2NmNGRkOGZiYmE4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDE5CisgICAgLTB4MS5kNDJkZTQyZGNlMTM4ZTg5MDkzOWU1NmM0MzlkZWQ5MHAtMSwKKyAgICAtMHgxLjllN2Y4NjUyYjQ3NDNkY2MzYzM1NjhiYWZmOGJmOWVicC0yLAorICAgIC0weDEuZmNjZjRkZDhmYmJhOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQyMAorICAgIDB4MS5jNWYwNTgyMzBlODAxNGFiODNlY2UwYzNhNjM4YzA3OXAtMSwKKyAgICAtMHgxLmQ5YTNhMzM2ZWRiNjVlZmEzMGUxYTY2NzlhYTA2NGMycC0yLAorICAgIDB4MS4wNjljOGI0NmIzNzkxcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDIxCisgICAgLTB4MS5jNWYwNTgyMzBlODAxNGFiODNlY2UwYzNhNjM4YzA3OXAtMSwKKyAgICAtMHgxLmQ5YTNhMzM2ZWRiNjVlZmEzMGUxYTY2NzlhYTA2NGMycC0yLAorICAgIC0weDEuMDY5YzhiNDZiMzc5MXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQyMgorICAgIDB4MS5iNWQ1NDViMTA5YmZjZTNmYzRkNzcwMDFhZmUyZjJiNnAtMSwKKyAgICAtMHgxLjA5NmFjMDJlYzQyYzI0ODgwYTU5NTE3ODhjYjM4M2M4cC0xLAorICAgIDB4MS4wZWQxNmZhMGU5MTRlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDIzCisgICAgLTB4MS5iNWQ1NDViMTA5YmZjZTNmYzRkNzcwMDFhZmUyZjJiNnAtMSwKKyAgICAtMHgxLjA5NmFjMDJlYzQyYzI0ODgwYTU5NTE3ODhjYjM4M2M4cC0xLAorICAgIC0weDEuMGVkMTZmYTBlOTE0ZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQyNAorICAgIDB4MS5hM2VkOWUyNTI5MzhkOTJhNTU1M2IzYzA5ZDJiZGRkM3AtMSwKKyAgICAtMHgxLjI0ZWM3OTkxNzE2M2RkYTY1YWZkODEwOWY1OWNiNDY1cC0xLAorICAgIDB4MS4xNzA2NTNmYjFlYjBicDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDI1CisgICAgLTB4MS5hM2VkOWUyNTI5MzhkOTJhNTU1M2IzYzA5ZDJiZGRkM3AtMSwKKyAgICAtMHgxLjI0ZWM3OTkxNzE2M2RkYTY1YWZkODEwOWY1OWNiNDY1cC0xLAorICAgIC0weDEuMTcwNjUzZmIxZWIwYnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQyNgorICAgIDB4MS45MDRjMzc1MDVkZTRiODk3NWRkMjczMGUxOTZkZGZjM3AtMSwKKyAgICAtMHgxLjNmM2EwZTI4YmVkZDBjZjBjNGJmYmQ4YzgyYTNiYWFmcC0xLAorICAgIDB4MS4xZjNiMzg1NTU0NGM4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDI3CisgICAgLTB4MS45MDRjMzc1MDVkZTRiODk3NWRkMjczMGUxOTZkZGZjM3AtMSwKKyAgICAtMHgxLjNmM2EwZTI4YmVkZDBjZjBjNGJmYmQ4YzgyYTNiYWFmcC0xLAorICAgIC0weDEuMWYzYjM4NTU1NDRjOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQyOAorICAgIDB4MS43YjA1YjdiNmM2MTJmYzRmZGEzODEyYjFmMTM0ODM4OXAtMSwKKyAgICAtMHgxLjU4MzdkMjgxN2NmMmViMDY5MDM1NTUyZGMzYWU4MzRjcC0xLAorICAgIDB4MS4yNzcwMWNhZjg5ZTg1cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDI5CisgICAgLTB4MS43YjA1YjdiNmM2MTJmYzRmZGEzODEyYjFmMTM0ODM4OXAtMSwKKyAgICAtMHgxLjU4MzdkMjgxN2NmMmViMDY5MDM1NTUyZGMzYWU4MzRjcC0xLAorICAgIC0weDEuMjc3MDFjYWY4OWU4NXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQzMAorICAgIDB4MS42NDMwODBkNjdhY2MxNDYyMDY3MmRkYTYyNDFlYTMwNXAtMSwKKyAgICAtMHgxLjZmY2I3YzZiOGI5MTk5Y2UyZjE3ZGQzZWU4NmIzYjlhcC0xLAorICAgIDB4MS4yZmE1MDEwOWJmODQycDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDMxCisgICAgLTB4MS42NDMwODBkNjdhY2MxNDYyMDY3MmRkYTYyNDFlYTMwNXAtMSwKKyAgICAtMHgxLjZmY2I3YzZiOGI5MTk5Y2UyZjE3ZGQzZWU4NmIzYjlhcC0xLAorICAgIC0weDEuMmZhNTAxMDliZjg0MnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQzMgorICAgIDB4MS40YmU0OTc5YzVlZmIxOTRmYzgyYWMzNjdmZWRmOTNiY3AtMSwKKyAgICAtMHgxLjg1ZGMzZWExYmJjZWFlMmQyOTQ0MjFlOGM3MzUwZjhjcC0xLAorICAgIDB4MS4zN2Q5ZTU2M2Y1MWZmcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDMzCisgICAgLTB4MS40YmU0OTc5YzVlZmIxOTRmYzgyYWMzNjdmZWRmOTNiY3AtMSwKKyAgICAtMHgxLjg1ZGMzZWExYmJjZWFlMmQyOTQ0MjFlOGM3MzUwZjhjcC0xLAorICAgIC0weDEuMzdkOWU1NjNmNTFmZnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQzNAorICAgIDB4MS4zMjNiOGIxZmI0YjllZmU1MDc1ZWRlODA0OWE4NWMzZHAtMSwKKyAgICAtMHgxLjlhNTJlMmUwZmJjYjVmOGEzZjU1YzI3NGY5ZWM3NTRicC0xLAorICAgIDB4MS40MDBlYzliZTJhYmJjcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDM1CisgICAgLTB4MS4zMjNiOGIxZmI0YjllZmU1MDc1ZWRlODA0OWE4NWMzZHAtMSwKKyAgICAtMHgxLjlhNTJlMmUwZmJjYjVmOGEzZjU1YzI3NGY5ZWM3NTRicC0xLAorICAgIC0weDEuNDAwZWM5YmUyYWJiY3AxLAorICB9LAorICB7IC8vIEVudHJ5IDQzNgorICAgIDB4MS4xNzUwNTliZjBkNDIwMzNiYmNmNTk4Yzg4YjE3NmU2MXAtMSwKKyAgICAtMHgxLmFkMTllMjUzNWFhOTliMDQ5YWMwYjU4NThjNWQzODFmcC0xLAorICAgIDB4MS40ODQzYWUxODYwNTc5cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDM3CisgICAgLTB4MS4xNzUwNTliZjBkNDIwMzNiYmNmNTk4Yzg4YjE3NmU2MXAtMSwKKyAgICAtMHgxLmFkMTllMjUzNWFhOTliMDQ5YWMwYjU4NThjNWQzODFmcC0xLAorICAgIC0weDEuNDg0M2FlMTg2MDU3OXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQzOAorICAgIDB4MS5mNjdlYTk3NWI4NjkyNTIxZjc3ZDY3NTRiMzAyYzVjNHAtMiwKKyAgICAtMHgxLmJlMWQ3YzM1MzRjNDQxMzJhYjFjNDEzMGNiZTlkZmEwcC0xLAorICAgIDB4MS41MDc4OTI3Mjk1ZjM2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDM5CisgICAgLTB4MS5mNjdlYTk3NWI4NjkyNTIxZjc3ZDY3NTRiMzAyYzVjNHAtMiwKKyAgICAtMHgxLmJlMWQ3YzM1MzRjNDQxMzJhYjFjNDEzMGNiZTlkZmEwcC0xLAorICAgIC0weDEuNTA3ODkyNzI5NWYzNnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ0MAorICAgIDB4MS5iYzRjMDRkNzFhYmFkMTRlZmMyOWE2NjM0MmFkYTcyM3AtMiwKKyAgICAtMHgxLmNkNGJjYTljYjVjNzU5ZTRkNmRjODYwMWVjM2Q4NGI2cC0xLAorICAgIDB4MS41OGFkNzZjY2NiOGYzcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQxCisgICAgLTB4MS5iYzRjMDRkNzFhYmFkMTRlZmMyOWE2NjM0MmFkYTcyM3AtMiwKKyAgICAtMHgxLmNkNGJjYTljYjVjNzU5ZTRkNmRjODYwMWVjM2Q4NGI2cC0xLAorICAgIC0weDEuNThhZDc2Y2NjYjhmM3AxLAorICB9LAorICB7IC8vIEVudHJ5IDQ0MgorICAgIDB4MS44MDQ1ZmU2NGU2MmM2MmY1N2YwNzdlYTI1MWUyZjJkY3AtMiwKKyAgICAtMHgxLmRhOTRkNTRkZDRjMGNlZGNjZDczNjg0OTk0NDIyNzQwcC0xLAorICAgIDB4MS42MGUyNWIyNzAxMmIwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQzCisgICAgLTB4MS44MDQ1ZmU2NGU2MmM2MmY1N2YwNzdlYTI1MWUyZjJkY3AtMiwKKyAgICAtMHgxLmRhOTRkNTRkZDRjMGNlZGNjZDczNjg0OTk0NDIyNzQwcC0xLAorICAgIC0weDEuNjBlMjViMjcwMTJiMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ0NAorICAgIDB4MS40MmFiYmE4YzcyZmExMmJlOTIwYjMxNjYyNzUxMmU0MXAtMiwKKyAgICAtMHgxLmU1ZWFhMjg2ZmJiY2FkMWU0YTYzNzMzOTJlNjc5NjY5cC0xLAorICAgIDB4MS42OTE3M2Y4MTM2YzZkcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQ1CisgICAgLTB4MS40MmFiYmE4YzcyZmExMmJlOTIwYjMxNjYyNzUxMmU0MXAtMiwKKyAgICAtMHgxLmU1ZWFhMjg2ZmJiY2FkMWU0YTYzNzMzOTJlNjc5NjY5cC0xLAorICAgIC0weDEuNjkxNzNmODEzNmM2ZHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ0NgorICAgIDB4MS4wM2JlMDZmOTdjYmNmODY2MDIxZTVhNWM2MmM2YjA3ZXAtMiwKKyAgICAtMHgxLmVmNDE0NWI0YWVkMDNjNWYxZDM5NzYzYjFlZWU2ZWQ4cC0xLAorICAgIDB4MS43MTRjMjNkYjZjNjJhcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQ3CisgICAgLTB4MS4wM2JlMDZmOTdjYmNmODY2MDIxZTVhNWM2MmM2YjA3ZXAtMiwKKyAgICAtMHgxLmVmNDE0NWI0YWVkMDNjNWYxZDM5NzYzYjFlZWU2ZWQ4cC0xLAorICAgIC0weDEuNzE0YzIzZGI2YzYyYXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ0OAorICAgIDB4MS44NzdlMmNkNGY2Zjk0NzEwZjI3NzY3NzViMDFjNzNkYnAtMywKKyAgICAtMHgxLmY2OGVlYmZjYmI1ZWJhMTI0ZDhjYzQ4ZmQxYmViMDRkcC0xLAorICAgIDB4MS43OTgxMDgzNWExZmU3cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQ5CisgICAgLTB4MS44NzdlMmNkNGY2Zjk0NzEwZjI3NzY3NzViMDFjNzNkYnAtMywKKyAgICAtMHgxLmY2OGVlYmZjYmI1ZWJhMTI0ZDhjYzQ4ZmQxYmViMDRkcC0xLAorICAgIC0weDEuNzk4MTA4MzVhMWZlN3AxLAorICB9LAorICB7IC8vIEVudHJ5IDQ1MAorICAgIDB4MS4wNWU0NzYxYWI4ZDQyMTcxOTU2NzcxN2Y3NjcxMjg2N3AtMywKKyAgICAtMHgxLmZiY2JlNjkzYmQ4ZWYwMDZmNWZmMDIyMTBkZmUwNjE5cC0xLAorICAgIDB4MS44MWI1ZWM4ZmQ3OWE0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDUxCisgICAgLTB4MS4wNWU0NzYxYWI4ZDQyMTcxOTU2NzcxN2Y3NjcxMjg2N3AtMywKKyAgICAtMHgxLmZiY2JlNjkzYmQ4ZWYwMDZmNWZmMDIyMTBkZmUwNjE5cC0xLAorICAgIC0weDEuODFiNWVjOGZkNzlhNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ1MgorICAgIDB4MS4wNjZlN2ViNzZmNWRkMmVhMTliNjk5MWU4YTFhMzYzNHAtNCwKKyAgICAtMHgxLmZlZjJiMmQyMWNmNmJlMWEyYzdlYTY2NWVmMWY4NzRlcC0xLAorICAgIDB4MS44OWVhZDBlYTBkMzVicDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDUzCisgICAgLTB4MS4wNjZlN2ViNzZmNWRkMmVhMTliNjk5MWU4YTFhMzYzNHAtNCwKKyAgICAtMHgxLmZlZjJiMmQyMWNmNmJlMWEyYzdlYTY2NWVmMWY4NzRlcC0xLAorICAgIC0weDEuODllYWQwZWEwZDM1YnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ1NAorICAgIDB4MS4wM2JlMDZmOTdjYmYwOWNjMGJhZGJkYWU4MDNkN2I0ZXAtMiwKKyAgICAweDEuZWY0MTQ1YjRhZWNmZjZmNThlZGVjZjI0OTU1NDI4YzFwLTEsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OTlmcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDU1CisgICAgLTB4MS4wM2JlMDZmOTdjYmYwOWNjMGJhZGJkYWU4MDNkN2I0ZXAtMiwKKyAgICAweDEuZWY0MTQ1YjRhZWNmZjZmNThlZGVjZjI0OTU1NDI4YzFwLTEsCisgICAgMHgxLjgxYjVlYzhmZDc5OWZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTYKKyAgICAweDEuZjY3ZWE5NzViODZhMjJmMjM0ODc3ODgyNGY5NWQ4NGFwLTIsCisgICAgMHgxLmJlMWQ3YzM1MzRjM2Y5YjliMzU2MTkyODAwNDlkZTg1cC0xLAorICAgIC0weDEuNzE0YzIzZGI2YzYyNnAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ1NworICAgIC0weDEuZjY3ZWE5NzViODZhMjJmMjM0ODc3ODgyNGY5NWQ4NGFwLTIsCisgICAgMHgxLmJlMWQ3YzM1MzRjM2Y5YjliMzU2MTkyODAwNDlkZTg1cC0xLAorICAgIDB4MS43MTRjMjNkYjZjNjI2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDU4CisgICAgMHgxLjY0MzA4MGQ2N2FjYzIxMGZhMjdlOTI0N2E4Mjg2MjIwcC0xLAorICAgIDB4MS42ZmNiN2M2YjhiOTE4ZDg2ZmM4M2Q2MTJhNjU4N2VkZHAtMSwKKyAgICAtMHgxLjYwZTI1YjI3MDEyYWRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTkKKyAgICAtMHgxLjY0MzA4MGQ2N2FjYzIxMGZhMjdlOTI0N2E4Mjg2MjIwcC0xLAorICAgIDB4MS42ZmNiN2M2YjhiOTE4ZDg2ZmM4M2Q2MTJhNjU4N2VkZHAtMSwKKyAgICAweDEuNjBlMjViMjcwMTJhZHAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ2MAorICAgIDB4MS5iNWQ1NDViMTA5YmY5NTBiNDE5NzAyOTcyYjk0ZjhmYXAtMSwKKyAgICAweDEuMDk2YWMwMmVjNDJjODJlNWIyMjUxODViZDZjNzU3ZDVwLTEsCisgICAgLTB4MS41MDc4OTI3Mjk1ZjM0cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDYxCisgICAgLTB4MS5iNWQ1NDViMTA5YmY5NTBiNDE5NzAyOTcyYjk0ZjhmYXAtMSwKKyAgICAweDEuMDk2YWMwMmVjNDJjODJlNWIyMjUxODViZDZjNzU3ZDVwLTEsCisgICAgMHgxLjUwNzg5MjcyOTVmMzRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjIKKyAgICAweDEuZWFkNjgzNDkwOWI5MzQ2MjM0ZGJiNjAxZDA0ODZjZjJwLTEsCisgICAgMHgxLjIzNWIzMzFkOGY3NDg3Y2UyZGI5NzgxOWZhZTc3NzdjcC0yLAorICAgIC0weDEuNDAwZWM5YmUyYWJiYnAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ2MworICAgIC0weDEuZWFkNjgzNDkwOWI5MzQ2MjM0ZGJiNjAxZDA0ODZjZjJwLTEsCisgICAgMHgxLjIzNWIzMzFkOGY3NDg3Y2UyZGI5NzgxOWZhZTc3NzdjcC0yLAorICAgIDB4MS40MDBlYzliZTJhYmJicDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDY0CisgICAgMHgxLmZmYmNhODQ2YzRmYzk5OWEyOWRjMWQ2YjJkN2NiNDEzcC0xLAorICAgIDB4MS4wNjkxMDdhZTkzMzJjNGExY2QyZGMwMzNiOGQ1MDU5OHAtNSwKKyAgICAtMHgxLjJmYTUwMTA5YmY4NDJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjUKKyAgICAtMHgxLmZmYmNhODQ2YzRmYzk5OWEyOWRjMWQ2YjJkN2NiNDEzcC0xLAorICAgIDB4MS4wNjkxMDdhZTkzMzJjNGExY2QyZGMwMzNiOGQ1MDU5OHAtNSwKKyAgICAweDEuMmZhNTAxMDliZjg0MnAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ2NgorICAgIDB4MS5mMzI5YzA1NThlOTZhNTE4YTJhZjNhZTc4MDBhNWI2NXAtMSwKKyAgICAtMHgxLmM3YjkwZTMwMjQ1Njk1YmQxZWMxNzBmNDVmZWViMWZmcC0zLAorICAgIC0weDEuMWYzYjM4NTU1NDRjOXAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ2NworICAgIC0weDEuZjMyOWMwNTU4ZTk2YTUxOGEyYWYzYWU3ODAwYTViNjVwLTEsCisgICAgLTB4MS5jN2I5MGUzMDI0NTY5NWJkMWVjMTcwZjQ1ZmVlYjFmZnAtMywKKyAgICAweDEuMWYzYjM4NTU1NDRjOXAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ2OAorICAgIDB4MS5jNWYwNTgyMzBlODAyMWYyMWJkMGFjMmMwZjY4MDlhOXAtMSwKKyAgICAtMHgxLmQ5YTNhMzM2ZWRiNjJjMTU0MWI4NTg0Y2Q2YzAwZjg3cC0yLAorICAgIC0weDEuMGVkMTZmYTBlOTE1MHAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ2OQorICAgIC0weDEuYzVmMDU4MjMwZTgwMjFmMjFiZDBhYzJjMGY2ODA5YTlwLTEsCisgICAgLTB4MS5kOWEzYTMzNmVkYjYyYzE1NDFiODU4NGNkNmMwMGY4N3AtMiwKKyAgICAweDEuMGVkMTZmYTBlOTE1MHAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ3MAorICAgIDB4MS43YjA1YjdiNmM2MTM2NWE5YWM5ZTkwOGI4ZTVkM2NlNHAtMSwKKyAgICAtMHgxLjU4MzdkMjgxN2NmMjc3MDVjYWM3ODgxZmI1NjlmZmM3cC0xLAorICAgIC0weDEuZmNjZjRkZDhmYmJhZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ3MQorICAgIC0weDEuN2IwNWI3YjZjNjEzNjVhOWFjOWU5MDhiOGU1ZDNjZTRwLTEsCisgICAgLTB4MS41ODM3ZDI4MTdjZjI3NzA1Y2FjNzg4MWZiNTY5ZmZjN3AtMSwKKyAgICAweDEuZmNjZjRkZDhmYmJhZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ3MgorICAgIDB4MS4xNzUwNTliZjBkNDJmMWQ2YjM5MWYwN2Y5NmYyMzUzZHAtMSwKKyAgICAtMHgxLmFkMTllMjUzNWFhOGZmYjQwMDY2ZDc4YWVmNzFmYWJkcC0xLAorICAgIC0weDEuZGJmYmJjNzAyNTRiY3AxLAorICB9LAorICB7IC8vIEVudHJ5IDQ3MworICAgIC0weDEuMTc1MDU5YmYwZDQyZjFkNmIzOTFmMDdmOTZmMjM1M2RwLTEsCisgICAgLTB4MS5hZDE5ZTI1MzVhYThmZmI0MDA2NmQ3OGFlZjcxZmFiZHAtMSwKKyAgICAweDEuZGJmYmJjNzAyNTRiY3AxLAorICB9LAorICB7IC8vIEVudHJ5IDQ3NAorICAgIDB4MS40MmFiYmE4YzcyZmQyMjE5NDc5MzI0NmI4ZDE5OTYwYXAtMiwKKyAgICAtMHgxLmU1ZWFhMjg2ZmJiYzJiMTI5MjM4MTYwZGYzMGNlNzA0cC0xLAorICAgIC0weDEuYmIyODJiMDc0ZWRjYXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ3NQorICAgIC0weDEuNDJhYmJhOGM3MmZkMjIxOTQ3OTMyNDZiOGQxOTk2MGFwLTIsCisgICAgLTB4MS5lNWVhYTI4NmZiYmMyYjEyOTIzODE2MGRmMzBjZTcwNHAtMSwKKyAgICAweDEuYmIyODJiMDc0ZWRjYXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ3NgorICAgIDB4MS4wNjZlN2ViNzZmNjJiNWY0NTYzZGUyNmRjYTg5MDAxN3AtNCwKKyAgICAtMHgxLmZlZjJiMmQyMWNmNmI0MGZmM2I1MzBjZThkYzBkOGE3cC0xLAorICAgIC0weDEuOWE1NDk5OWU3ODZkOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ3NworICAgIC0weDEuMDY2ZTdlYjc2ZjYyYjVmNDU2M2RlMjZkY2E4OTAwMTdwLTQsCisgICAgLTB4MS5mZWYyYjJkMjFjZjZiNDBmZjNiNTMwY2U4ZGMwZDhhN3AtMSwKKyAgICAweDEuOWE1NDk5OWU3ODZkOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ3OAorICAgIC0weDEuODc3ZTJjZDRmNmZhNDI1ODY4NzVjNTI1MGExNjllNDhwLTMsCisgICAgLTB4MS5mNjhlZWJmY2JiNWVhZGQ2NWMyNjFjZDgwMzk5MGFlMXAtMSwKKyAgICAtMHgxLjc5ODEwODM1YTFmZTZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzkKKyAgICAweDEuODc3ZTJjZDRmNmZhNDI1ODY4NzVjNTI1MGExNjllNDhwLTMsCisgICAgLTB4MS5mNjhlZWJmY2JiNWVhZGQ2NWMyNjFjZDgwMzk5MGFlMXAtMSwKKyAgICAweDEuNzk4MTA4MzVhMWZlNnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ4MAorICAgIC0weDEuYmM0YzA0ZDcxYWJhNWRmYzA5ODI3OGYxNjhiYmQ5NjJwLTIsCisgICAgLTB4MS5jZDRiY2E5Y2I1Yzc3NWE5OTcyOWY3YWQ5NWI3ZGNlM3AtMSwKKyAgICAtMHgxLjU4YWQ3NmNjY2I4ZjRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODEKKyAgICAweDEuYmM0YzA0ZDcxYWJhNWRmYzA5ODI3OGYxNjhiYmQ5NjJwLTIsCisgICAgLTB4MS5jZDRiY2E5Y2I1Yzc3NWE5OTcyOWY3YWQ5NWI3ZGNlM3AtMSwKKyAgICAweDEuNThhZDc2Y2NjYjhmNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ4MgorICAgIC0weDEuNGJlNDk3OWM1ZWZhODcxZDMwYWUxY2ZhNjYzODkxOTlwLTEsCisgICAgLTB4MS44NWRjM2VhMWJiY2YyYWEyZTIxZWM1ODZkNTQ5N2UzNXAtMSwKKyAgICAtMHgxLjM3ZDllNTYzZjUyMDJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODMKKyAgICAweDEuNGJlNDk3OWM1ZWZhODcxZDMwYWUxY2ZhNjYzODkxOTlwLTEsCisgICAgLTB4MS44NWRjM2VhMWJiY2YyYWEyZTIxZWM1ODZkNTQ5N2UzNXAtMSwKKyAgICAweDEuMzdkOWU1NjNmNTIwMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ4NAorICAgIC0weDEuYTNlZDllMjUyOTM4MjIxNjg5NThjY2UxZTA5ZjdjMTFwLTEsCisgICAgLTB4MS4yNGVjNzk5MTcxNjRlNDFhZGRkNGJhY2Q0NDIwZjlmYnAtMSwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMTBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODUKKyAgICAweDEuYTNlZDllMjUyOTM4MjIxNjg5NThjY2UxZTA5ZjdjMTFwLTEsCisgICAgLTB4MS4yNGVjNzk5MTcxNjRlNDFhZGRkNGJhY2Q0NDIwZjlmYnAtMSwKKyAgICAweDEuMTcwNjUzZmIxZWIxMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ4NgorICAgIC0weDEuZTA3ZWVlZGExMDljNjJiMzQwZGMzNmU5MjE2OTY0OGRwLTEsCisgICAgLTB4MS42MWE3NjA3N2FlZTIzYjExZjBjNjczZjYzODAwM2IwYXAtMiwKKyAgICAtMHgxLmVjNjU4NTI0OTA4M2NwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODcKKyAgICAweDEuZTA3ZWVlZGExMDljNjJiMzQwZGMzNmU5MjE2OTY0OGRwLTEsCisgICAgLTB4MS42MWE3NjA3N2FlZTIzYjExZjBjNjczZjYzODAwM2IwYXAtMiwKKyAgICAweDEuZWM2NTg1MjQ5MDgzY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDQ4OAorICAgIC0weDEuZmRhMjU0YzI3YTAxZGQ5NTRkYjNhZWE1MDVlNDk0NTNwLTEsCisgICAgLTB4MS44OTRmNzBiZWZiYzEwNGI3MDZlODVjZjRjMWM5NmE1MnAtNCwKKyAgICAtMHgxLmFhYmU2MjUyZTNhNThwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODkKKyAgICAweDEuZmRhMjU0YzI3YTAxZGQ5NTRkYjNhZWE1MDVlNDk0NTNwLTEsCisgICAgLTB4MS44OTRmNzBiZWZiYzEwNGI3MDZlODVjZjRjMWM5NmE1MnAtNCwKKyAgICAweDEuYWFiZTYyNTJlM2E1OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ5MAorICAgIC0weDEuZjk2ZmU0MDVmMWFjYTAyZThmNGZkNDMzZTU5YWE5NzNwLTEsCisgICAgMHgxLjQ2ZGM0ZjRjZTgzNzNjN2M0NGYxM2I1NzM2M2VkZDNicC0zLAorICAgIC0weDEuNjkxNzNmODEzNmM3NHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ5MQorICAgIDB4MS5mOTZmZTQwNWYxYWNhMDJlOGY0ZmQ0MzNlNTlhYTk3M3AtMSwKKyAgICAweDEuNDZkYzRmNGNlODM3M2M3YzQ0ZjEzYjU3MzYzZWRkM2JwLTMsCisgICAgMHgxLjY5MTczZjgxMzZjNzRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTIKKyAgICAtMHgxLmQ0MmRlNDJkY2UxM2VmMDQwYmIxMDQwZTMxNDhkN2RlcC0xLAorICAgIDB4MS45ZTdmODY1MmI0NzI4OWU1M2ZjY2Q1NDk1NWRiNDU1MnAtMiwKKyAgICAtMHgxLjI3NzAxY2FmODllOTBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTMKKyAgICAweDEuZDQyZGU0MmRjZTEzZWYwNDBiYjEwNDBlMzE0OGQ3ZGVwLTEsCisgICAgMHgxLjllN2Y4NjUyYjQ3Mjg5ZTUzZmNjZDU0OTU1ZGI0NTUycC0yLAorICAgIDB4MS4yNzcwMWNhZjg5ZTkwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDk0CisgICAgLTB4MS45MDRjMzc1MDVkZTU5MzA4MTJlM2EyYTk0ZmVhYTUxYnAtMSwKKyAgICAweDEuM2YzYTBlMjhiZWRiZmIwNjZiNjdhYmQ5YzMzODQwOWVwLTEsCisgICAgLTB4MS5jYjkxZjNiYmJhMTU3cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDQ5NQorICAgIDB4MS45MDRjMzc1MDVkZTU5MzA4MTJlM2EyYTk0ZmVhYTUxYnAtMSwKKyAgICAweDEuM2YzYTBlMjhiZWRiZmIwNjZiNjdhYmQ5YzMzODQwOWVwLTEsCisgICAgMHgxLmNiOTFmM2JiYmExNTdwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDk2CisgICAgLTB4MS4zMjNiOGIxZmI0YmI2MjZkZDQwY2FjZDc0OTYzYWM2Y3AtMSwKKyAgICAweDEuOWE1MmUyZTBmYmNhNGIwMGM3MmRhYTNjZGFjYTI1N2NwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNThlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDQ5NworICAgIDB4MS4zMjNiOGIxZmI0YmI2MjZkZDQwY2FjZDc0OTYzYWM2Y3AtMSwKKyAgICAweDEuOWE1MmUyZTBmYmNhNGIwMGM3MmRhYTNjZGFjYTI1N2NwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1OGVwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDk4CisgICAgLTB4MS44MDQ1ZmU2NGU2MzA4YmI1YzZjZTM1ZjgzNGI5M2M2M3AtMiwKKyAgICAweDEuZGE5NGQ1NGRkNGJmZjc1M2Q5ODhjMTc1NWUyZmZjMDRwLTEsCisgICAgLTB4MS44OWVhZDBlYTBkMzhhcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDQ5OQorICAgIDB4MS44MDQ1ZmU2NGU2MzA4YmI1YzZjZTM1ZjgzNGI5M2M2M3AtMiwKKyAgICAweDEuZGE5NGQ1NGRkNGJmZjc1M2Q5ODhjMTc1NWUyZmZjMDRwLTEsCisgICAgMHgxLjg5ZWFkMGVhMGQzOGFwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTAwCisgICAgLTB4MS4wNWU0NzYxYWI4ZGVjNDRlZDBmYTMwZDMzNTA0OWM0MHAtMywKKyAgICAweDEuZmJjYmU2OTNiZDhlOTg0MjMyMDdlMzY1ODdkOTQyYjdwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzN2YwcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDUwMQorICAgIDB4MS4wNWU0NzYxYWI4ZGVjNDRlZDBmYTMwZDMzNTA0OWM0MHAtMywKKyAgICAweDEuZmJjYmU2OTNiZDhlOTg0MjMyMDdlMzY1ODdkOTQyYjdwLTEsCisgICAgMHgxLjA2OWM4YjQ2YjM3ZjBwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTAyCisgICAgMHgxLjA1ZTQ3NjFhYjhkMzFkMDBlNjU2MzcyYzVjMDRhYTZlcC0zLAorICAgIDB4MS5mYmNiZTY5M2JkOGVmODZjMTU2NWIzNDUzMDM2ZTU1ZXAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzczNHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDMKKyAgICAtMHgxLjA1ZTQ3NjFhYjhkMzFkMDBlNjU2MzcyYzVjMDRhYTZlcC0zLAorICAgIDB4MS5mYmNiZTY5M2JkOGVmODZjMTU2NWIzNDUzMDM2ZTU1ZXAtMSwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3MzRwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTA0CisgICAgMHgxLjgwNDVmZTY0ZTYyYjE5YTA5NDM5OTUwMmFmYjc2ZTVjcC0yLAorICAgIDB4MS5kYTk0ZDU0ZGQ0YzExMTg3NDA1YWRhN2YwNGU1YjE3MXAtMSwKKyAgICAweDEuODllYWQwZWEwZDMyY3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDUKKyAgICAtMHgxLjgwNDVmZTY0ZTYyYjE5YTA5NDM5OTUwMmFmYjc2ZTVjcC0yLAorICAgIDB4MS5kYTk0ZDU0ZGQ0YzExMTg3NDA1YWRhN2YwNGU1YjE3MXAtMSwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzMmNwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTA2CisgICAgMHgxLjMyM2I4YjFmYjRiOTA3YzQxNmQyM2IwNGUwZWMwZTcycC0xLAorICAgIDB4MS45YTUyZTJlMGZiY2MwY2M4M2I4NDNiYWU1OGM2Y2RmOHAtMSwKKyAgICAweDEuNDg0M2FlMTg2MDU1ZnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDcKKyAgICAtMHgxLjMyM2I4YjFmYjRiOTA3YzQxNmQyM2IwNGUwZWMwZTcycC0xLAorICAgIDB4MS45YTUyZTJlMGZiY2MwY2M4M2I4NDNiYWU1OGM2Y2RmOHAtMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NWZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTA4CisgICAgMHgxLjkwNGMzNzUwNWRlM2JlMmFjZTE3Y2E1NDg3NzUwMjMxcC0xLAorICAgIDB4MS4zZjNhMGUyOGJlZGU0NmY2NWNhNWI1YzE5YWQ5OWRkN3AtMSwKKyAgICAweDEuY2I5MWYzYmJiYTEyOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDkKKyAgICAtMHgxLjkwNGMzNzUwNWRlM2JlMmFjZTE3Y2E1NDg3NzUwMjMxcC0xLAorICAgIDB4MS4zZjNhMGUyOGJlZGU0NmY2NWNhNWI1YzE5YWQ5OWRkN3AtMSwKKyAgICAtMHgxLmNiOTFmM2JiYmExMjhwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTEwCisgICAgMHgxLmQ0MmRlNDJkY2UxMmI4MjQ2NmYyZmNiNjNiMjk0NzUxcC0xLAorICAgIDB4MS45ZTdmODY1MmI0NzgwNjZlZWM1NjNmODM1MDk3ZjE0OHAtMiwKKyAgICAweDEuMjc3MDFjYWY4OWU3OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDUxMQorICAgIC0weDEuZDQyZGU0MmRjZTEyYjgyNDY2ZjJmY2I2M2IyOTQ3NTFwLTEsCisgICAgMHgxLjllN2Y4NjUyYjQ3ODA2NmVlYzU2M2Y4MzUwOTdmMTQ4cC0yLAorICAgIC0weDEuMjc3MDFjYWY4OWU3OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDUxMgorICAgIDB4MS5mOTZmZTQwNWYxYWMyNTliZjE5MmZkMWNmNjRlMmYxMnAtMSwKKyAgICAweDEuNDZkYzRmNGNlODQzMTUxYjlkMTRlNTYxODc5ZTVmZTNwLTMsCisgICAgMHgxLjY5MTczZjgxMzZjNWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTMKKyAgICAtMHgxLmY5NmZlNDA1ZjFhYzI1OWJmMTkyZmQxY2Y2NGUyZjEycC0xLAorICAgIDB4MS40NmRjNGY0Y2U4NDMxNTFiOWQxNGU1NjE4NzllNWZlM3AtMywKKyAgICAtMHgxLjY5MTczZjgxMzZjNWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTQKKyAgICAweDEuZmRhMjU0YzI3YTAyMjc1NDMyZDc3ZGQ2Zjk3MDQ2NDRwLTEsCisgICAgLTB4MS44OTRmNzBiZWZiYTkyMTFiMGRjYWE0ZGNhNDUwNjcwZnAtNCwKKyAgICAweDEuYWFiZTYyNTJlM2E0MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDUxNQorICAgIC0weDEuZmRhMjU0YzI3YTAyMjc1NDMyZDc3ZGQ2Zjk3MDQ2NDRwLTEsCisgICAgLTB4MS44OTRmNzBiZWZiYTkyMTFiMGRjYWE0ZGNhNDUwNjcwZnAtNCwKKyAgICAtMHgxLmFhYmU2MjUyZTNhNDBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTYKKyAgICAweDEuZTA3ZWVlZGExMDlkNmJmMGM5MzVmYTEwYjEyODBjNmRwLTEsCisgICAgLTB4MS42MWE3NjA3N2FlZGM5OTk1MjQzODQyMWY4MjBhMmJlZnAtMiwKKyAgICAweDEuZWM2NTg1MjQ5MDgyNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDUxNworICAgIC0weDEuZTA3ZWVlZGExMDlkNmJmMGM5MzVmYTEwYjEyODBjNmRwLTEsCisgICAgLTB4MS42MWE3NjA3N2FlZGM5OTk1MjQzODQyMWY4MjBhMmJlZnAtMiwKKyAgICAtMHgxLmVjNjU4NTI0OTA4MjRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTgKKyAgICAweDEuYTNlZDllMjUyOTM5ZDk3OTNmYjJmNmY3NWU1Yzc2ZTdwLTEsCisgICAgLTB4MS4yNGVjNzk5MTcxNjI2ZTM2NzA5Y2ZjZjdjNzc1MjMzMnAtMSwKKyAgICAweDEuMTcwNjUzZmIxZWIwNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDUxOQorICAgIC0weDEuYTNlZDllMjUyOTM5ZDk3OTNmYjJmNmY3NWU1Yzc2ZTdwLTEsCisgICAgLTB4MS4yNGVjNzk5MTcxNjI2ZTM2NzA5Y2ZjZjdjNzc1MjMzMnAtMSwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMDRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjAKKyAgICAweDEuNGJlNDk3OWM1ZWZjY2ZlNzhlYTBiNmFmYjBjYmJhMzdwLTEsCisgICAgLTB4MS44NWRjM2VhMWJiY2QzOGNiZmViNDM3MGQ1NDA1ZWViYXAtMSwKKyAgICAweDEuMzdkOWU1NjNmNTFmNnAxLAorICB9LAorICB7IC8vIEVudHJ5IDUyMQorICAgIC0weDEuNGJlNDk3OWM1ZWZjY2ZlNzhlYTBiNmFmYjBjYmJhMzdwLTEsCisgICAgLTB4MS44NWRjM2VhMWJiY2QzOGNiZmViNDM3MGQ1NDA1ZWViYXAtMSwKKyAgICAtMHgxLjM3ZDllNTYzZjUxZjZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjIKKyAgICAweDEuYmM0YzA0ZDcxYWJmYzVkZjY5NTg5YTQ1ZDVlMzE5NmVwLTIsCisgICAgLTB4MS5jZDRiY2E5Y2I1YzYyODcwOTM4OGEzOWZjODQ1OTFkMXAtMSwKKyAgICAweDEuNThhZDc2Y2NjYjhlOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDUyMworICAgIC0weDEuYmM0YzA0ZDcxYWJmYzVkZjY5NTg5YTQ1ZDVlMzE5NmVwLTIsCisgICAgLTB4MS5jZDRiY2E5Y2I1YzYyODcwOTM4OGEzOWZjODQ1OTFkMXAtMSwKKyAgICAtMHgxLjU4YWQ3NmNjY2I4ZThwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjQKKyAgICAweDEuODc3ZTJjZDRmNzA2MDliMWYwNjIyOTViNjRhZWQ0YmRwLTMsCisgICAgLTB4MS5mNjhlZWJmY2JiNWUxYjA3MGI1NjQwMzdmNTU3MWEzOXAtMSwKKyAgICAweDEuNzk4MTA4MzVhMWZkYXAxLAorICB9LAorICB7IC8vIEVudHJ5IDUyNQorICAgIC0weDEuODc3ZTJjZDRmNzA2MDliMWYwNjIyOTViNjRhZWQ0YmRwLTMsCisgICAgLTB4MS5mNjhlZWJmY2JiNWUxYjA3MGI1NjQwMzdmNTU3MWEzOXAtMSwKKyAgICAtMHgxLjc5ODEwODM1YTFmZGFwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjYKKyAgICAtMHgxLjA2NmU3ZWI3NmY0YWMyOTNmNDY0ODZkYzMyOGQ0NTBicC00LAorICAgIC0weDEuZmVmMmIyZDIxY2Y2ZTU0NGFiNzc5NWFlZDEwZDlmYTdwLTEsCisgICAgMHgxLjlhNTQ5OTllNzg2Y2NwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjcKKyAgICAweDEuMDY2ZTdlYjc2ZjRhYzI5M2Y0NjQ4NmRjMzI4ZDQ1MGJwLTQsCisgICAgLTB4MS5mZWYyYjJkMjFjZjZlNTQ0YWI3Nzk1YWVkMTBkOWZhN3AtMSwKKyAgICAtMHgxLjlhNTQ5OTllNzg2Y2NwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjgKKyAgICAtMHgxLjQyYWJiYThjNzJmNzcwNTk1ZmZlMzEzNWEwZTBhZDgzcC0yLAorICAgIC0weDEuZTVlYWEyODZmYmJkMWQxMzVlMjE2YzQ5YTlmN2U1ZGFwLTEsCisgICAgMHgxLmJiMjgyYjA3NGVkYmVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjkKKyAgICAweDEuNDJhYmJhOGM3MmY3NzA1OTVmZmUzMTM1YTBlMGFkODNwLTIsCisgICAgLTB4MS5lNWVhYTI4NmZiYmQxZDEzNWUyMTZjNDlhOWY3ZTVkYXAtMSwKKyAgICAtMHgxLmJiMjgyYjA3NGVkYmVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzAKKyAgICAtMHgxLjE3NTA1OWJmMGQ0MDZlMmZlMDE0ZTg4MGRkMjljZmFjcC0xLAorICAgIC0weDEuYWQxOWUyNTM1YWFhYTJhYzg3MDU2YjZkNzc3NmU5N2FwLTEsCisgICAgMHgxLmRiZmJiYzcwMjU0YjBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzEKKyAgICAweDEuMTc1MDU5YmYwZDQwNmUyZmUwMTRlODgwZGQyOWNmYWNwLTEsCisgICAgLTB4MS5hZDE5ZTI1MzVhYWFhMmFjODcwNTZiNmQ3Nzc2ZTk3YXAtMSwKKyAgICAtMHgxLmRiZmJiYzcwMjU0YjBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzIKKyAgICAtMHgxLjdiMDViN2I2YzYxMTYxNTVmMGRjNTUxZTMxNmUxZTBicC0xLAorICAgIC0weDEuNTgzN2QyODE3Y2Y0YWY4ZTVlNTliMTNiNGFhOWI1ZTNwLTEsCisgICAgMHgxLmZjY2Y0ZGQ4ZmJiYTJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzMKKyAgICAweDEuN2IwNWI3YjZjNjExNjE1NWYwZGM1NTFlMzE2ZTFlMGJwLTEsCisgICAgLTB4MS41ODM3ZDI4MTdjZjRhZjhlNWU1OWIxM2I0YWE5YjVlM3AtMSwKKyAgICAtMHgxLmZjY2Y0ZGQ4ZmJiYTJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzQKKyAgICAtMHgxLmM1ZjA1ODIzMGU3ZWJlYjc2MTY3NzllMTZmYTliNTM3cC0xLAorICAgIC0weDEuZDlhM2EzMzZlZGJiN2RlNjRhMjE4M2NiMjdiZTRiNWJwLTIsCisgICAgMHgxLjBlZDE2ZmEwZTkxNGFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzUKKyAgICAweDEuYzVmMDU4MjMwZTdlYmViNzYxNjc3OWUxNmZhOWI1MzdwLTEsCisgICAgLTB4MS5kOWEzYTMzNmVkYmI3ZGU2NGEyMTgzY2IyN2JlNGI1YnAtMiwKKyAgICAtMHgxLjBlZDE2ZmEwZTkxNGFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzYKKyAgICAtMHgxLmYzMjljMDU1OGU5NWZhMzMzZDVkMmQ0NGQ2NTQ3NzdjcC0xLAorICAgIC0weDEuYzdiOTBlMzAyNDYyNDhiN2EwYzJjODdhM2RkMjUyMjRwLTMsCisgICAgMHgxLjFmM2IzODU1NTQ0YzNwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzcKKyAgICAweDEuZjMyOWMwNTU4ZTk1ZmEzMzNkNWQyZDQ0ZDY1NDc3N2NwLTEsCisgICAgLTB4MS5jN2I5MGUzMDI0NjI0OGI3YTBjMmM4N2EzZGQyNTIyNHAtMywKKyAgICAtMHgxLjFmM2IzODU1NTQ0YzNwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzgKKyAgICAtMHgxLmZmYmNhODQ2YzRmY2IyMzdjMjk0N2IzNWIwMzdhMnAtMSwKKyAgICAweDEuMDY5MTA3YWU5MzAyY2FmMjA2OGI0ODg0MmFmZGYwNTFwLTUsCisgICAgMHgxLjJmYTUwMTA5YmY4M2NwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzkKKyAgICAweDEuZmZiY2E4NDZjNGZjYjIzN2MyOTQ3YjM1YjAzN2EycC0xLAorICAgIDB4MS4wNjkxMDdhZTkzMDJjYWYyMDY4YjQ4ODQyYWZkZjA1MXAtNSwKKyAgICAtMHgxLjJmYTUwMTA5YmY4M2NwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDAKKyAgICAtMHgxLmVhZDY4MzQ5MDliYTBlZTY5YjMxZTE5NzBkZjFiYjhicC0xLAorICAgIDB4MS4yMzViMzMxZDhmNmVjNzRhYTNkZTVhZWQxNWZhM2Y2OHAtMiwKKyAgICAweDEuNDAwZWM5YmUyYWJiNXAyLAorICB9LAorICB7IC8vIEVudHJ5IDU0MQorICAgIDB4MS5lYWQ2ODM0OTA5YmEwZWU2OWIzMWUxOTcwZGYxYmI4YnAtMSwKKyAgICAweDEuMjM1YjMzMWQ4ZjZlYzc0YWEzZGU1YWVkMTVmYTNmNjhwLTIsCisgICAgLTB4MS40MDBlYzliZTJhYmI1cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTQyCisgICAgLTB4MS5iNWQ1NDViMTA5YzEyMzJiNjFkZDI4ZDgwMzVkOTVjYnAtMSwKKyAgICAweDEuMDk2YWMwMmVjNDI5ZjIyNWM5OWI4OWJiNGM5ZTVkM2VwLTEsCisgICAgMHgxLjUwNzg5MjcyOTVmMmVwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDMKKyAgICAweDEuYjVkNTQ1YjEwOWMxMjMyYjYxZGQyOGQ4MDM1ZDk1Y2JwLTEsCisgICAgMHgxLjA5NmFjMDJlYzQyOWYyMjVjOTliODliYjRjOWU1ZDNlcC0xLAorICAgIC0weDEuNTA3ODkyNzI5NWYyZXAyLAorICB9LAorICB7IC8vIEVudHJ5IDU0NAorICAgIC0weDEuNjQzMDgwZDY3YWNlNDhjMGRkMWZlM2EwNmJiYzRiZjVwLTEsCisgICAgMHgxLjZmY2I3YzZiOGI4Zjc3M2UzYjQyMWRkZWQ2ZmMxZjI2cC0xLAorICAgIDB4MS42MGUyNWIyNzAxMmE3cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTQ1CisgICAgMHgxLjY0MzA4MGQ2N2FjZTQ4YzBkZDFmZTNhMDZiYmM0YmY1cC0xLAorICAgIDB4MS42ZmNiN2M2YjhiOGY3NzNlM2I0MjFkZGVkNmZjMWYyNnAtMSwKKyAgICAtMHgxLjYwZTI1YjI3MDEyYTdwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDYKKyAgICAtMHgxLmY2N2VhOTc1Yjg2ZjVkNGFhOTI3MTZjYzA3NzQ3M2E3cC0yLAorICAgIDB4MS5iZTFkN2MzNTM0YzI4MGRhYjQzZGNlZDY3MDMzMGI2M3AtMSwKKyAgICAweDEuNzE0YzIzZGI2YzYyMHAyLAorICB9LAorICB7IC8vIEVudHJ5IDU0NworICAgIDB4MS5mNjdlYTk3NWI4NmY1ZDRhYTkyNzE2Y2MwNzc0NzNhN3AtMiwKKyAgICAweDEuYmUxZDdjMzUzNGMyODBkYWI0M2RjZWQ2NzAzMzBiNjNwLTEsCisgICAgLTB4MS43MTRjMjNkYjZjNjIwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTQ4CisgICAgLTB4MS4wM2JlMDZmOTdjYzRkNzhmZGNjYmNhMWQ0MGU4NjAxMXAtMiwKKyAgICAweDEuZWY0MTQ1YjRhZWNmMzQyNzA5YTNiMTkzMjBkMWIxOTRwLTEsCisgICAgMHgxLjgxYjVlYzhmZDc5OTlwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDkKKyAgICAweDEuMDNiZTA2Zjk3Y2M0ZDc4ZmRjY2JjYTFkNDBlODYwMTFwLTIsCisgICAgMHgxLmVmNDE0NWI0YWVjZjM0MjcwOWEzYjE5MzIwZDFiMTk0cC0xLAorICAgIC0weDEuODFiNWVjOGZkNzk5OXAyLAorICB9LAorICB7IC8vIEVudHJ5IDU1MAorICAgIDB4MS5lZmIyNmVmOTMwYzRjM2ZhMzI0NTk2M2MxZGNlYzBhNnAtNSwKKyAgICAweDEuZmYwZmQyYzk2YWRmYmFlNTc2OTgxZWU0YjM0NzY5ZGVwLTEsCisgICAgMHgxLmVmZmZmZmZmZmZmZmZwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTUxCisgICAgLTB4MS5lZmIyNmVmOTMwYzRjM2ZhMzI0NTk2M2MxZGNlYzBhNnAtNSwKKyAgICAweDEuZmYwZmQyYzk2YWRmYmFlNTc2OTgxZWU0YjM0NzY5ZGVwLTEsCisgICAgLTB4MS5lZmZmZmZmZmZmZmZmcC01LAorICB9LAorICB7IC8vIEVudHJ5IDU1MgorICAgIDB4MS5lZmIyNmVmOTMwYzRkM2YyYjBkYmUxOTMxYmE1YWU2NHAtNSwKKyAgICAweDEuZmYwZmQyYzk2YWRmYmFkNWY5MDRhNzFiMmQyMTBhMmFwLTEsCisgICAgMHgxLmZwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTUzCisgICAgLTB4MS5lZmIyNmVmOTMwYzRkM2YyYjBkYmUxOTMxYmE1YWU2NHAtNSwKKyAgICAweDEuZmYwZmQyYzk2YWRmYmFkNWY5MDRhNzFiMmQyMTBhMmFwLTEsCisgICAgLTB4MS5mcC01LAorICB9LAorICB7IC8vIEVudHJ5IDU1NAorICAgIDB4MS5lZmIyNmVmOTMwYzRlM2ViMmY3MjJjZWExOTdjMjAzNnAtNSwKKyAgICAweDEuZmYwZmQyYzk2YWRmYmFjNjdiNzEyZjUxYTZmYTJhYjNwLTEsCisgICAgMHgxLmYwMDAwMDAwMDAwMDFwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTU1CisgICAgLTB4MS5lZmIyNmVmOTMwYzRlM2ViMmY3MjJjZWExOTdjMjAzNnAtNSwKKyAgICAweDEuZmYwZmQyYzk2YWRmYmFjNjdiNzEyZjUxYTZmYTJhYjNwLTEsCisgICAgLTB4MS5mMDAwMDAwMDAwMDAxcC01LAorICB9LAorICB7IC8vIEVudHJ5IDU1NgorICAgIDB4MS5mNmJhYWExMzFkZTYzM2FkNGUwZTdkNjQ2NWQxMmEwNXAtNCwKKyAgICAweDEuZmMyMTAwNTU0NjdmZTVjOGY3NmU3NWZkNzA4MzgxOGNwLTEsCisgICAgMHgxLmY3ZmZmZmZmZmZmZmZwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTU3CisgICAgLTB4MS5mNmJhYWExMzFkZTYzM2FkNGUwZTdkNjQ2NWQxMmEwNXAtNCwKKyAgICAweDEuZmMyMTAwNTU0NjdmZTVjOGY3NmU3NWZkNzA4MzgxOGNwLTEsCisgICAgLTB4MS5mN2ZmZmZmZmZmZmZmcC00LAorICB9LAorICB7IC8vIEVudHJ5IDU1OAorICAgIDB4MS5mNmJhYWExMzFkZTY0MzhlNTYxMTI3OTg2NGZlNzY2M3AtNCwKKyAgICAweDEuZmMyMTAwNTU0NjdmZTU4YTIwMTkzMzk5YjNiYzBkZDJwLTEsCisgICAgMHgxLmY4MHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTkKKyAgICAtMHgxLmY2YmFhYTEzMWRlNjQzOGU1NjExMjc5ODY0ZmU3NjYzcC00LAorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNThhMjAxOTMzOTliM2JjMGRkMnAtMSwKKyAgICAtMHgxLmY4MHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjAKKyAgICAweDEuZjZiYWFhMTMxZGU2NTM2ZjVlMTNkMWNjNjQyOWNjMDdwLTQsCisgICAgMHgxLmZjMjEwMDU1NDY3ZmU1NGI0OGMzZjEzNWY2ZjI5ZGY3cC0xLAorICAgIDB4MS5mODAwMDAwMDAwMDAxcC00LAorICB9LAorICB7IC8vIEVudHJ5IDU2MQorICAgIC0weDEuZjZiYWFhMTMxZGU2NTM2ZjVlMTNkMWNjNjQyOWNjMDdwLTQsCisgICAgMHgxLmZjMjEwMDU1NDY3ZmU1NGI0OGMzZjEzNWY2ZjI5ZGY3cC0xLAorICAgIC0weDEuZjgwMDAwMDAwMDAwMXAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjIKKyAgICAweDEuNGE4YzNiNGU5YzdmZjAwYTM2ZTA2MWEwZDIyOTUwOTNwLTMsCisgICAgMHgxLmY5NDk4NGIyNTUyZTE5ZTczMjk0MTNiOGMyZThkYzUxcC0xLAorICAgIDB4MS40YmZmZmZmZmZmZmZmcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDU2MworICAgIC0weDEuNGE4YzNiNGU5YzdmZjAwYTM2ZTA2MWEwZDIyOTUwOTNwLTMsCisgICAgMHgxLmY5NDk4NGIyNTUyZTE5ZTczMjk0MTNiOGMyZThkYzUxcC0xLAorICAgIC0weDEuNGJmZmZmZmZmZmZmZnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjQKKyAgICAweDEuNGE4YzNiNGU5YzdmZmZkNDgzMDVmNDRhNDJmNWY1MGZwLTMsCisgICAgMHgxLmY5NDk4NGIyNTUyZTE5NDFlYzc2NmM2YTgyZWNlNGEzcC0xLAorICAgIDB4MS40YzBwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTY1CisgICAgLTB4MS40YThjM2I0ZTljN2ZmZmQ0ODMwNWY0NGE0MmY1ZjUwZnAtMywKKyAgICAweDEuZjk0OTg0YjI1NTJlMTk0MWVjNzY2YzZhODJlY2U0YTNwLTEsCisgICAgLTB4MS40YzBwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTY2CisgICAgMHgxLjRhOGMzYjRlOWM4MDBmOWVjZjJiODZmM2IzYmQ2ZjVhcC0zLAorICAgIDB4MS5mOTQ5ODRiMjU1MmUxODljYTY1OGM1MWM0MmU5MDdjZXAtMSwKKyAgICAweDEuNGMwMDAwMDAwMDAwMXAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjcKKyAgICAtMHgxLjRhOGMzYjRlOWM4MDBmOWVjZjJiODZmM2IzYmQ2ZjVhcC0zLAorICAgIDB4MS5mOTQ5ODRiMjU1MmUxODljYTY1OGM1MWM0MmU5MDdjZXAtMSwKKyAgICAtMHgxLjRjMDAwMDAwMDAwMDFwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTY4CisgICAgMHgxLjJlOWNkOTViYWJhMzI1ZmU2MDY3MjMzZDQ0OTZhYWFjcC0yLAorICAgIDB4MS5lOTIxZGQ0MmYwOWJhODY4NjAzZWEzNzZmNmUyZDAxMnAtMSwKKyAgICAweDEuMzMzMzMzMzMzMzMzMnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjkKKyAgICAtMHgxLjJlOWNkOTViYWJhMzI1ZmU2MDY3MjMzZDQ0OTZhYWFjcC0yLAorICAgIDB4MS5lOTIxZGQ0MmYwOWJhODY4NjAzZWEzNzZmNmUyZDAxMnAtMSwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzJwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTcwCisgICAgMHgxLjJlOWNkOTViYWJhMzM1NDc2ZjUxM2FjMjIxZDA3OGM3cC0yLAorICAgIDB4MS5lOTIxZGQ0MmYwOWJhNjBiMjY4YmVjMWZiMDg3OGE0MnAtMSwKKyAgICAweDEuMzMzMzMzMzMzMzMzM3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzEKKyAgICAtMHgxLjJlOWNkOTViYWJhMzM1NDc2ZjUxM2FjMjIxZDA3OGM3cC0yLAorICAgIDB4MS5lOTIxZGQ0MmYwOWJhNjBiMjY4YmVjMWZiMDg3OGE0MnAtMSwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzNwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTcyCisgICAgMHgxLjJlOWNkOTViYWJhMzQ0OTA3ZTNiNTI0NmZlZjc1ZDE1cC0yLAorICAgIDB4MS5lOTIxZGQ0MmYwOWJhM2FkZWNkOTM0Yzg2YTBkYjI1NHAtMSwKKyAgICAweDEuMzMzMzMzMzMzMzMzNHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzMKKyAgICAtMHgxLjJlOWNkOTViYWJhMzQ0OTA3ZTNiNTI0NmZlZjc1ZDE1cC0yLAorICAgIDB4MS5lOTIxZGQ0MmYwOWJhM2FkZWNkOTM0Yzg2YTBkYjI1NHAtMSwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzRwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTc0CisgICAgMHgxLjNmYWVmYzdhNTQ2NmVmMzA0NWMzZjFiZTcxNmFkNTY4cC0xLAorICAgIDB4MS44ZmVlZGI4NmJmMGVmMzE1OGY4YTFkY2JlZjQ5ZDEyM3AtMSwKKyAgICAweDEuNTk0MzE3YWNjNGVmOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzUKKyAgICAtMHgxLjNmYWVmYzdhNTQ2NmVmMzA0NWMzZjFiZTcxNmFkNTY4cC0xLAorICAgIDB4MS44ZmVlZGI4NmJmMGVmMzE1OGY4YTFkY2JlZjQ5ZDEyM3AtMSwKKyAgICAtMHgxLjU5NDMxN2FjYzRlZjhwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTc2CisgICAgMHgxLjNmYWVmYzdhNTQ2NmZiYWZiY2EwMjdiNmU4ZGI4YzA0cC0xLAorICAgIDB4MS44ZmVlZGI4NmJmMGVlOTE4MTdhNjRiMjhiNzllNTExOXAtMSwKKyAgICAweDEuNTk0MzE3YWNjNGVmOXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzcKKyAgICAtMHgxLjNmYWVmYzdhNTQ2NmZiYWZiY2EwMjdiNmU4ZGI4YzA0cC0xLAorICAgIDB4MS44ZmVlZGI4NmJmMGVlOTE4MTdhNjRiMjhiNzllNTExOXAtMSwKKyAgICAtMHgxLjU5NDMxN2FjYzRlZjlwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTc4CisgICAgMHgxLjNmYWVmYzdhNTQ2NzA4MmYzMzdjNWRhZjVmZmM1NmUycC0xLAorICAgIDB4MS44ZmVlZGI4NmJmMGVkZjFhOWZjMjc4ODU3ZjhlZDU1OXAtMSwKKyAgICAweDEuNTk0MzE3YWNjNGVmYXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzkKKyAgICAtMHgxLjNmYWVmYzdhNTQ2NzA4MmYzMzdjNWRhZjVmZmM1NmUycC0xLAorICAgIDB4MS44ZmVlZGI4NmJmMGVkZjFhOWZjMjc4ODU3ZjhlZDU1OXAtMSwKKyAgICAtMHgxLjU5NDMxN2FjYzRlZmFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTgwCisgICAgMHgxLjY4ODhhNGUxMzRiMmRlZjViZWE1MWY0Y2Q3ZDY0N2M2cC0xLAorICAgIDB4MS42Yjg5OGZhOWVmYjVkZDZmOWUxN2UzNDQyZDU5YjI0MXAtMSwKKyAgICAweDEuOGZmZmZmZmZmZmZmZnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODEKKyAgICAtMHgxLjY4ODhhNGUxMzRiMmRlZjViZWE1MWY0Y2Q3ZDY0N2M2cC0xLAorICAgIDB4MS42Yjg5OGZhOWVmYjVkZDZmOWUxN2UzNDQyZDU5YjI0MXAtMSwKKyAgICAtMHgxLjhmZmZmZmZmZmZmZmZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTgyCisgICAgMHgxLjY4ODhhNGUxMzRiMmVhNTIwYjIyNmVjYTg2OTRiM2EycC0xLAorICAgIDB4MS42Yjg5OGZhOWVmYjVkMjJiNThmMGQ5OWU5NjM0OTMxYXAtMSwKKyAgICAweDEuOXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODMKKyAgICAtMHgxLjY4ODhhNGUxMzRiMmVhNTIwYjIyNmVjYTg2OTRiM2EycC0xLAorICAgIDB4MS42Yjg5OGZhOWVmYjVkMjJiNThmMGQ5OWU5NjM0OTMxYXAtMSwKKyAgICAtMHgxLjlwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTg0CisgICAgMHgxLjY4ODhhNGUxMzRiMmY1YWU1NzlmYmU0ODM0ZjhmZDU1cC0xLAorICAgIDB4MS42Yjg5OGZhOWVmYjVjNmU3MTNjOWNmZjhmZWI0OTE4ZnAtMSwKKyAgICAweDEuOTAwMDAwMDAwMDAwMXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODUKKyAgICAtMHgxLjY4ODhhNGUxMzRiMmY1YWU1NzlmYmU0ODM0ZjhmZDU1cC0xLAorICAgIDB4MS42Yjg5OGZhOWVmYjVjNmU3MTNjOWNmZjhmZWI0OTE4ZnAtMSwKKyAgICAtMHgxLjkwMDAwMDAwMDAwMDFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTg2CisgICAgLTAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wcC0xMDc0LAorICB9LAorICB7IC8vIEVudHJ5IDU4NworICAgIDAuMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLjBwLTEwNzQsCisgIH0sCisgIHsgLy8gRW50cnkgNTg4CisgICAgLTAuMCwKKyAgICAweDEucDAsCisgICAgLTAuMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODkKKyAgICAwLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wcC0xMDc0LAorICB9LAorICB7IC8vIEVudHJ5IDU5MAorICAgIC0wLjAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMHAtMTA3NCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTEKKyAgICAweDEuOTFmNjVmMTBkZDgxMmEwYjk1ZmY3MTg3MWFiNDgyMDdwLTUsCisgICAgMHgxLmZmNjIxZTM3OTZkN2RlNGE4YWI3ZDdjZDg0ODhmNDk5cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC01LAorICB9LAorICB7IC8vIEVudHJ5IDU5MgorICAgIC0weDEuOTFmNjVmMTBkZDgxMmEwYjk1ZmY3MTg3MWFiNDgyMDdwLTUsCisgICAgMHgxLmZmNjIxZTM3OTZkN2RlNGE4YWI3ZDdjZDg0ODhmNDk5cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTMKKyAgICAweDEuOTFmNjVmMTBkZDgxM2EwNmE2ZjEyZTNkZDlhNmE0MWVwLTUsCisgICAgMHgxLmZmNjIxZTM3OTZkN2RlM2RmYjA0ZGY0Njk4N2Y2NDUwcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC01LAorICB9LAorICB7IC8vIEVudHJ5IDU5NAorICAgIC0weDEuOTFmNjVmMTBkZDgxM2EwNmE2ZjEyZTNkZDlhNmE0MWVwLTUsCisgICAgMHgxLmZmNjIxZTM3OTZkN2RlM2RmYjA0ZGY0Njk4N2Y2NDUwcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTUKKyAgICAweDEuOTFmNjVmMTBkZDgxNGEwMWI3ZTJlYWY0OTg5ODYxYjdwLTUsCisgICAgMHgxLmZmNjIxZTM3OTZkN2RlMzE2YjUxZTZiZmFjNzU1NDJmcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cC01LAorICB9LAorICB7IC8vIEVudHJ5IDU5NgorICAgIC0weDEuOTFmNjVmMTBkZDgxNGEwMWI3ZTJlYWY0OTg5ODYxYjdwLTUsCisgICAgMHgxLmZmNjIxZTM3OTZkN2RlMzE2YjUxZTZiZmFjNzU1NDJmcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTcKKyAgICAweDEuOTE3YTZiYzI5YjQyYTljZDJlNzg3ZWUwMGNhOGY4ZTNwLTQsCisgICAgMHgxLmZkODhkYTNkMTI1MjVhMjA4ODk4Y2Y1OGRlZDBlZWIzcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC00LAorICB9LAorICB7IC8vIEVudHJ5IDU5OAorICAgIC0weDEuOTE3YTZiYzI5YjQyYTljZDJlNzg3ZWUwMGNhOGY4ZTNwLTQsCisgICAgMHgxLmZkODhkYTNkMTI1MjVhMjA4ODk4Y2Y1OGRlZDBlZWIzcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTkKKyAgICAweDEuOTE3YTZiYzI5YjQyYjliOTc1NGE2NzcyOWY3OTM0NmJwLTQsCisgICAgMHgxLmZkODhkYTNkMTI1MjU5ZWU1OTRiNTcwNTc2N2FiNjQ5cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC00LAorICB9LAorICB7IC8vIEVudHJ5IDYwMAorICAgIC0weDEuOTE3YTZiYzI5YjQyYjliOTc1NGE2NzcyOWY3OTM0NmJwLTQsCisgICAgMHgxLmZkODhkYTNkMTI1MjU5ZWU1OTRiNTcwNTc2N2FiNjQ5cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDEKKyAgICAweDEuOTE3YTZiYzI5YjQyYzlhNWJjMWM1MDA1MzI0N2RlNzhwLTQsCisgICAgMHgxLmZkODhkYTNkMTI1MjU5YmMyOWZkZGViMjBlMjI4MDU2cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cC00LAorICB9LAorICB7IC8vIEVudHJ5IDYwMgorICAgIC0weDEuOTE3YTZiYzI5YjQyYzlhNWJjMWM1MDA1MzI0N2RlNzhwLTQsCisgICAgMHgxLmZkODhkYTNkMTI1MjU5YmMyOWZkZGViMjBlMjI4MDU2cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDMKKyAgICAweDEuOGY4YjgzYzY5YTYwOTc1Zjk4NDUzODg2Zjk1M2EwZTVwLTMsCisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAzYWIxZmNlZDYzMzdlMzVhMjQ1cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDYwNAorICAgIC0weDEuOGY4YjgzYzY5YTYwOTc1Zjk4NDUzODg2Zjk1M2EwZTVwLTMsCisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAzYWIxZmNlZDYzMzdlMzVhMjQ1cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDUKKyAgICAweDEuOGY4YjgzYzY5YTYwYTcxMGU0MmQzNDM1NTE2ZGRhY2NwLTMsCisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAyZTM1YTBjZjJlNjRkZTYwNjI2cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDYwNgorICAgIC0weDEuOGY4YjgzYzY5YTYwYTcxMGU0MmQzNDM1NTE2ZGRhY2NwLTMsCisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAyZTM1YTBjZjJlNjRkZTYwNjI2cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDcKKyAgICAweDEuOGY4YjgzYzY5YTYwYjZjMjMwMTUyZmUzYTk4MWQ2ODZwLTMsCisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAyMWI5NDRiMGY5OTFkOGU5MTYxcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDYwOAorICAgIC0weDEuOGY4YjgzYzY5YTYwYjZjMjMwMTUyZmUzYTk4MWQ2ODZwLTMsCisgICAgMHgxLmY2Mjk3Y2ZmNzVjYjAyMWI5NDRiMGY5OTFkOGU5MTYxcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDkKKyAgICAweDEuODdkZTJhNmFlYTk2MWEzZTlkZWRlYTU3ZmU3ZTY1MTRwLTIsCisgICAgMHgxLmQ5MDZiY2YzMjhkNDY2NzJkOWMxYTg2NTg5OGU1OTY2cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDYxMAorICAgIC0weDEuODdkZTJhNmFlYTk2MWEzZTlkZWRlYTU3ZmU3ZTY1MTRwLTIsCisgICAgMHgxLmQ5MDZiY2YzMjhkNDY2NzJkOWMxYTg2NTg5OGU1OTY2cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTEKKyAgICAweDEuODdkZTJhNmFlYTk2MjkwNmQzZDU4MzllYTFhNWJjZjBwLTIsCisgICAgMHgxLmQ5MDZiY2YzMjhkNDYzNjMxZDZjZDI5MDVkNGIxM2Y1cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDYxMgorICAgIC0weDEuODdkZTJhNmFlYTk2MjkwNmQzZDU4MzllYTFhNWJjZjBwLTIsCisgICAgMHgxLmQ5MDZiY2YzMjhkNDYzNjMxZDZjZDI5MDVkNGIxM2Y1cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTMKKyAgICAweDEuODdkZTJhNmFlYTk2MzdjZjA5YmQxY2U1NDRiNDk2ZWFwLTIsCisgICAgMHgxLmQ5MDZiY2YzMjhkNDYwNTM2MTE3ZmNiYjMwZWEzZTE3cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDYxNAorICAgIC0weDEuODdkZTJhNmFlYTk2MzdjZjA5YmQxY2U1NDRiNDk2ZWFwLTIsCisgICAgMHgxLmQ5MDZiY2YzMjhkNDYwNTM2MTE3ZmNiYjMwZWEzZTE3cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTUKKyAgICAweDEuNmEwOWU2NjdmM2JjYmE5OWFmYjAxMzU3Mjk0NTc4NzRwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2Q3NzdiNjQ2MTM3NmFiNTIzMjQycC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE3cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDYxNgorICAgIC0weDEuNmEwOWU2NjdmM2JjYmE5OWFmYjAxMzU3Mjk0NTc4NzRwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2Q3NzdiNjQ2MTM3NmFiNTIzMjQycC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTcKKyAgICAweDEuNmEwOWU2NjdmM2JjYzVlOWZlZTM1MmY1MGZkM2Y0ZTlwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NjMjc2NzEyZDNkOGM1NTAyMzg3cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDYxOAorICAgIC0weDEuNmEwOWU2NjdmM2JjYzVlOWZlZTM1MmY1MGZkM2Y0ZTlwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2NjMjc2NzEyZDNkOGM1NTAyMzg3cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTkKKyAgICAweDEuNmEwOWU2NjdmM2JjZDEzYTRlMTY5MjkyZjYwN2VlZTVwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2MwZDcxN2RmOTQzYWRlZjM5MjUzcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDYyMAorICAgIC0weDEuNmEwOWU2NjdmM2JjZDEzYTRlMTY5MjkyZjYwN2VlZTVwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2MwZDcxN2RmOTQzYWRlZjM5MjUzcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU1ZjU2ZmZwLTEsCisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWMwYjhiNTBicC01MiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AwLAorICB9LAorICB7IC8vIEVudHJ5IDYyMgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU1ZjU2ZmZwLTEsCisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWMwYjhiNTBicC01MiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzFwLTEsCisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0NDE5ZmE4cC01NCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDYyNAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzFwLTEsCisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0NDE5ZmE4cC01NCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWI5NjNwLTEsCisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3ZGJjZmJhMHAtNTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzliOTYzcC0xLAorICAgIC0weDEuNzJjZWNlNjc1ZDFmYzhmOGNiYjViZjZjN2RiY2ZiYTBwLTUzLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAwLAorICB9LAorICB7IC8vIEVudHJ5IDYyNworICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDliZmFlZWQ0MnAtNTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTdkNWJmZnAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AxLAorICB9LAorICB7IC8vIEVudHJ5IDYyOAorICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YmZhZWVkNDJwLTUxLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjk3ZDViZmZwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjI5CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0MzZlMmVkcC01MywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjMwCisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDM2ZTJlZHAtNTMsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzEKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdkNWJiYzVjcC01MiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjMyCisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdkNWJiYzVjcC01MiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAxLAorICB9LAorICB7IC8vIEVudHJ5IDYzMworICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YmI4N2NlMWJwLTUwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNWY1NmZmZXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AyLAorICB9LAorICB7IC8vIEVudHJ5IDYzNAorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDliYjg3Y2UxYnAtNTAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU1ZjU2ZmZlcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AyLAorICB9LAorICB7IC8vIEVudHJ5IDYzNQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQwYmYwMDNwLTUyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxN3AtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAyLAorICB9LAorICB7IC8vIEVudHJ5IDYzNgorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwNDBiZjAwM3AtNTIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzE3cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAyLAorICB9LAorICB7IC8vIEVudHJ5IDYzNworICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3YmQ2YmY0ZHAtNTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWI5NjMxcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjM4CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3YmQ2YmY0ZHAtNTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY3OWI5NjMxcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAyLAorICB9LAorICB7IC8vIEVudHJ5IDYzOQorICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5YWFlYjUxODJwLTQ5LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5N2Q1YmZmOHAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AzLAorICB9LAorICB7IC8vIEVudHJ5IDY0MAorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDlhYWViNTE4MnAtNDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjk3ZDViZmY4cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3AzLAorICB9LAorICB7IC8vIEVudHJ5IDY0MQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDM2MDI0NWNwLTUxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1ZXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDY0MgorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwMzYwMjQ1Y3AtNTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVlcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDY0MworICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3NWMyY2IwZXAtNTAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRlNmU1OGM0cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjQ0CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3NWMyY2IwZXAtNTAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmRlNmU1OGM0cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAzLAorICB9LAorICB7IC8vIEVudHJ5IDY0NQorICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ5Njg3OTVmMWNwLTQ4LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU1ZjU2ZmZlMXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A0LAorICB9LAorICB7IC8vIEVudHJ5IDY0NgorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDk2ODc5NWYxY3AtNDgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTVmNTZmZmUxcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3A0LAorICB9LAorICB7IC8vIEVudHJ5IDY0NworICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDBiMGY1YmZwLTUwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzg4MzE3YXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHA0LAorICB9LAorICB7IC8vIEVudHJ5IDY0OAorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjcwMGIwZjViZnAtNTAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMTdhcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA0LAorICB9LAorICB7IC8vIEVudHJ5IDY0OQorICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM1ZDcyZmExMXAtNDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5Yjk2MzEzcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNjUwCisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM1ZDcyZmExMXAtNDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5Yjk2MzEzcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXA0LAorICB9LAorICB7IC8vIEVudHJ5IDY1MQorICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ4NWViMTk1ODRwLTQ3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjk3ZDViZmY4N3AtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A1LAorICB9LAorICB7IC8vIEVudHJ5IDY1MgorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDg1ZWIxOTU4NHAtNDcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTdkNWJmZjg3cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3A1LAorICB9LAorICB7IC8vIEVudHJ5IDY1MworICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI2ZjVmNDNiNGNwLTQ5LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVlOXAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHA1LAorICB9LAorICB7IC8vIEVudHJ5IDY1NAorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjZmNWY0M2I0Y3AtNDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNWU5cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA1LAorICB9LAorICB7IC8vIEVudHJ5IDY1NQorICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmJmYzMzYjYxZnAtNDgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZGU2ZTU4YzRjcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDUsCisgIH0sCisgIHsgLy8gRW50cnkgNjU2CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmJmYzMzYjYxZnAtNDgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZGU2ZTU4YzRjcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXA1LAorICB9LAorICB7IC8vIEVudHJ5IDY1NworICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDQ0Mzc5MjZmMjVwLTQ2LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTVmNTZmZmUxZHAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A2LAorICB9LAorICB7IC8vIEVudHJ5IDY1OAorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNDQzNzkyNmYyNXAtNDYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNWY1NmZmZTFkcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3A2LAorICB9LAorICB7IC8vIEVudHJ5IDY1OQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI2Y2IwMTUxN2RwLTQ4LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMTdhN3AtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHA2LAorICB9LAorICB7IC8vIEVudHJ5IDY2MAorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjZjYjAxNTE3ZHAtNDgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWM4ODMxN2E3cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA2LAorICB9LAorICB7IC8vIEVudHJ5IDY2MQorICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmE3NzM2YTY1OHAtNDcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzliOTYzMTMxcC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDYsCisgIH0sCisgIHsgLy8gRW50cnkgNjYyCisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmE3NzM2YTY1OHAtNDcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNzliOTYzMTMxcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXA2LAorICB9LAorICB7IC8vIEVudHJ5IDY2MworICAgIC0weDEuNDY5ODk4Y2M1MTcwMWI4MzlhMjUyMDMzOWIxNWQ1YWFwLTQ1LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmOTdkNWJmZjg3NHAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A3LAorICB9LAorICB7IC8vIEVudHJ5IDY2NAorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwMzM5YjE1ZDVhYXAtNDUsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5N2Q1YmZmODc0cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxN3A3LAorICB9LAorICB7IC8vIEVudHJ5IDY2NQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI2MWYzNWFhNDNwLTQ3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIyMjBjNWU5ZHAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHA3LAorICB9LAorICB7IC8vIEVudHJ5IDY2NgorICAgIDB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjYxZjM1YWE0M3AtNDcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1ZTlkcC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA3LAorICB9LAorICB7IC8vIEVudHJ5IDY2NworICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNjQ2MzQyNjczYXAtNDYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjNGM2cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDcsCisgIH0sCisgIHsgLy8gRW50cnkgNjY4CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNjQ2MzQyNjczYXAtNDYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkZTZlNThjNGM2cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXA3LAorICB9LAorICB7IC8vIEVudHJ5IDY2OQorICAgIDB4MS42YTA5ZTY2N2YzYmNmZmE2MGMwZjUzMzQwZmQyNDkwNHAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzkyNmI1OWU2ZDM5OWJkMWI5MDZjcC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQxcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjcwCisgICAgLTB4MS42YTA5ZTY2N2YzYmNmZmE2MGMwZjUzMzQwZmQyNDkwNHAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzkyNmI1OWU2ZDM5OWJkMWI5MDZjcC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXAxLAorICB9LAorICB7IC8vIEVudHJ5IDY3MQorICAgIDB4MS42YTA5ZTY2N2YzYmNkMjY0Y2Y0MjU0YmM3YWIwYzlmYXAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2JmYWM5NmIzZDIxMTVhM2MzZTIxcC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQycDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjcyCisgICAgLTB4MS42YTA5ZTY2N2YzYmNkMjY0Y2Y0MjU0YmM3YWIwYzlmYXAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2JmYWM5NmIzZDIxMTVhM2MzZTIxcC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDY3MworICAgIDB4MS42YTA5ZTY2N2YzYmNhNTIzOTI3NTU2NDRkZmU3MjM1N3AtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2VjZWRkMzgwZDA4OGYxYjRjNDNjcC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQzcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjc0CisgICAgLTB4MS42YTA5ZTY2N2YzYmNhNTIzOTI3NTU2NDRkZmU3MjM1N3AtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2VjZWRkMzgwZDA4OGYxYjRjNDNjcC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkM3AxLAorICB9LAorICB7IC8vIEVudHJ5IDY3NQorICAgIC0weDEuNmEwOWU2NjdmM2JjOGMyZGYxYjc1MmI2MDZhMGE0NzJwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmQwNWUzNzQzZWQ0MTdjNDRmYmE0NnAtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZHAxLAorICB9LAorICB7IC8vIEVudHJ5IDY3NgorICAgIDB4MS42YTA5ZTY2N2YzYmM4YzJkZjFiNzUyYjYwNmEwYTQ3MnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDA1ZTM3NDNlZDQxN2M0NGZiYTQ2cC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZHAxLAorICB9LAorICB7IC8vIEVudHJ5IDY3NworICAgIC0weDEuNmEwOWU2NjdmM2JjYjk2ZjJlODQ1MTJkYTQ4OGZmMmRwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmNkOGEyMzc3MWQ1YTAyZmY1ZTg0M3AtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDY3OAorICAgIDB4MS42YTA5ZTY2N2YzYmNiOTZmMmU4NDUxMmRhNDg4ZmYyZHAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2Q4YTIzNzcxZDVhMDJmZjVlODQzcC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDY3OQorICAgIC0weDEuNmEwOWU2NjdmM2JjZTZiMDZiNTE0ZmE1M2NjOTMyNGZwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmNhYjYwZmFhNGQ3Mjg5NWYzZWVhNXAtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZnAxLAorICB9LAorICB7IC8vIEVudHJ5IDY4MAorICAgIDB4MS42YTA5ZTY2N2YzYmNlNmIwNmI1MTRmYTUzY2M5MzI0ZnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2FiNjBmYWE0ZDcyODk1ZjNlZWE1cC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZnAxLAorICB9LAorICB7IC8vIEVudHJ5IDY4MQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZThiMjdiNmFwLTEsCisgICAgLTB4MS4zNGYyNzI5OTNkMTQxNGEyYjM5YmQ4Mzc0YzFkMTYzMXAtNTAsCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODIKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZThiMjdiNmFwLTEsCisgICAgLTB4MS4zNGYyNzI5OTNkMTQxNGEyYjM5YmQ4Mzc0YzFkMTYzMXAtNTAsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQxcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjgzCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjUwYzliZHAtMSwKKyAgICAtMHgxLmE3OTM5NGM5ZThhMGE1MTU5Y2RlYzFiYTg2Mzc3YzkycC01MywKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMnAyLAorICB9LAorICB7IC8vIEVudHJ5IDY4NAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjUwYzliZHAtMSwKKyAgICAtMHgxLmE3OTM5NGM5ZThhMGE1MTU5Y2RlYzFiYTg2Mzc3YzkycC01MywKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY1ZWYxODEwcC0xLAorICAgIDB4MS45NjFiMWFjZDg1ZDdkNmJhOThjODRmOTE1YmJjYmM2Y3AtNTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjVlZjE4MTBwLTEsCisgICAgMHgxLjk2MWIxYWNkODVkN2Q2YmE5OGM4NGY5MTViYmNiYzZjcC01MSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDNwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODcKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDM5NjIxOTNiNTM3MzA2OWJhMGMycC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmM1OGFmNGNiYWQzNWFhYmIyMDBmNHAtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NHAyLAorICB9LAorICB7IC8vIEVudHJ5IDY4OAorICAgIDB4MS42YTA5ZTY2N2YzYmQzOTYyMTkzYjUzNzMwNjliYTBjMnAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjNThhZjRjYmFkMzVhYWJiMjAwZjRwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc0cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjg5CisgICAgLTB4MS42YTA5ZTY2N2YzYmNkZWRmOWZhMTU2ODNlNTFmN2U2MHAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjYjMzMWM2NTRkMDQ5ZWViYTM4MGZwLTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzVwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTAKKyAgICAweDEuNmEwOWU2NjdmM2JjZGVkZjlmYTE1NjgzZTUxZjdlNjBwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2IzMzFjNjU0ZDA0OWVlYmEzODBmcC0xLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NXAyLAorICB9LAorICB7IC8vIEVudHJ5IDY5MQorICAgIC0weDEuNmEwOWU2NjdmM2JjODQ1ZDI2MDc1OTk0YWQwMmJkOThwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiZDBkYjQzZmVlY2QzOTFiMjFkMGM0cC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjkyCisgICAgMHgxLjZhMDllNjY3ZjNiYzg0NWQyNjA3NTk5NGFkMDJiZDk4cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmQwZGI0M2ZlZWNkMzkxYjIxZDBjNHAtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTMKKyAgICAweDEuNmEwOWU2NjdmM2JjNTI3MWU0OGI1Mjc2ZjQzODU3OWZwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiZDNmOWY4MTZhZDQ1NmJhMWE1NGE5cC0xLAorICAgIDB4MS5jNDYzYWJlY2NiMmJhcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjk0CisgICAgLTB4MS42YTA5ZTY2N2YzYmM1MjcxZTQ4YjUyNzZmNDM4NTc5ZnAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JkM2Y5ZjgxNmFkNDU2YmExYTU0YTlwLTEsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJhcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjk1CisgICAgMHgxLjZhMDllNjY3ZjNiY2FjZjQ1ZTI1NGY2NjM4Y2ZlOGM2cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmNlNTFkMDdkMGQ3Njc5YTJkOGM1M3AtMSwKKyAgICAweDEuYzQ2M2FiZWNjYjJiYnAyLAorICB9LAorICB7IC8vIEVudHJ5IDY5NgorICAgIC0weDEuNmEwOWU2NjdmM2JjYWNmNDVlMjU0ZjY2MzhjZmU4YzZwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2U1MWQwN2QwZDc2NzlhMmQ4YzUzcC0xLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYnAyLAorICB9LAorICB7IC8vIEVudHJ5IDY5NworICAgIDB4MS42YTA5ZTY2N2YzYmQwNzc2ZDdiZjRjNTU2NmM2ZGI4N3AtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjOGE5YThlMzZkYTc4NjNhMDI1OTdwLTEsCisgICAgMHgxLmM0NjNhYmVjY2IyYmNwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTgKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDA3NzZkN2JmNGM1NTY2YzZkYjg3cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmM4YTlhOGUzNmRhNzg2M2EwMjU5N3AtMSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmNwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTMxMTc0ZjVwLTEsCisgICAgMHgxLjU4M2ViZWZmNjVjYzIyNjQ4MGFlNjg1YzJhZDlhZmRhcC01MCwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZHAyLAorICB9LAorICB7IC8vIEVudHJ5IDcwMAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTMxMTc0ZjVwLTEsCisgICAgMHgxLjU4M2ViZWZmNjVjYzIyNjQ4MGFlNjg1YzJhZDlhZmRhcC01MCwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUxOTRjZDRwLTEsCisgICAgMHgxLjYwZmFmYmZkOTczMDg5OTIwMmI5YTE3MGM0ZTZhODQ5cC01MiwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZXAyLAorICB9LAorICB7IC8vIEVudHJ5IDcwMgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUxOTRjZDRwLTEsCisgICAgMHgxLjYwZmFmYmZkOTczMDg5OTIwMmI5YTE3MGM0ZTZhODQ5cC01MiwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWVwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDMKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjkyMTI0YjRwLTEsCisgICAgLTB4MS40ZjgyODIwMTM0NjdiYjM2ZmVhMzJmNDc5YmQ0OGY0YXAtNTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5MjEyNGI0cC0xLAorICAgIC0weDEuNGY4MjgyMDEzNDY3YmIzNmZlYTMyZjQ3OWJkNDhmNGFwLTUxLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZnAyLAorICB9LAorICB7IC8vIEVudHJ5IDcwNQorICAgIDB4MS42YTA5ZTY2N2YzYmRmYWUxZGNjZTRmMTg2NjU2ODFjNnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjk3MmY4OTI3ZDdiNDZjNzM3NDg1cC0xLAorICAgIDB4MS4xNDc1Y2M5ZWVkZWZmcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzA2CisgICAgLTB4MS42YTA5ZTY2N2YzYmRmYWUxZGNjZTRmMTg2NjU2ODFjNnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjk3MmY4OTI3ZDdiNDZjNzM3NDg1cC0xLAorICAgIC0weDEuMTQ3NWNjOWVlZGVmZnAzLAorICB9LAorICB7IC8vIEVudHJ5IDcwNworICAgIDB4MS42YTA5ZTY2N2YzYmQ0NWRjZTk5YTU1M2E2ZDdkODA2NXAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzRjMzQ3YzViZDE5MzNjYTMyNjFmcC0xLAorICAgIDB4MS4xNDc1Y2M5ZWVkZnAzLAorICB9LAorICB7IC8vIEVudHJ5IDcwOAorICAgIC0weDEuNmEwOWU2NjdmM2JkNDVkY2U5OWE1NTNhNmQ3ZDgwNjVwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmM0YzM0N2M1YmQxOTMzY2EzMjYxZnAtMSwKKyAgICAtMHgxLjE0NzVjYzllZWRmcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzA5CisgICAgMHgxLjZhMDllNjY3ZjNiYzkwZDdmNjY2NWI1YzFhMjIwNTZhcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JkMDEzOTZmOGZjYjcxYjI1MDVlMWZwLTEsCisgICAgMHgxLjE0NzVjYzllZWRmMDFwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTAKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzkwZDdmNjY2NWI1YzFhMjIwNTZhcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JkMDEzOTZmOGZjYjcxYjI1MDVlMWZwLTEsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZjAxcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzExCisgICAgMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzNzNlMGQ2Yjk0cC00OSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmEyYzllZGE4cC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQxcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzEyCisgICAgLTB4MS4zNGYyNzI5OTNkMTQxNGEyYjM5YmQ4MzczZTBkNmI5NHAtNDksCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZhMmM5ZWRhOHAtMSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDFwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTMKKyAgICAweDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhODVhNjg4YmRwLTUyLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmQ0MzI2ZjVwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTQKKyAgICAtMHgxLmE3OTM5NGM5ZThhMGE1MTU5Y2RlYzFiYTg1YTY4OGJkcC01MiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkNDMyNmY1cC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMnAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxNQorICAgIC0weDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxNTNjMGNjMTZwLTUwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDdiYzYwNDFwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTYKKyAgICAweDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxNTNjMGNjMTZwLTUwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDdiYzYwNDFwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQzcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzE3CisgICAgLTB4MS42YTA5ZTY2N2YzYmI5MGYyMjBmODU2ZDBiMWE0MDZjM3AtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiZTAxMWY0NGZkY2ZmYzE2N2Y3MTQwcC0xLAorICAgIDB4MS40NmI5YzM0Nzc2NGEycDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzE4CisgICAgMHgxLjZhMDllNjY3ZjNiYjkwZjIyMGY4NTZkMGIxYTQwNmMzcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JlMDExZjQ0ZmRjZmZjMTY3ZjcxNDBwLTEsCisgICAgLTB4MS40NmI5YzM0Nzc2NGEycDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzE5CisgICAgLTB4MS42YTA5ZTY2N2YzYmM0NWY3MTQyYzUwYWY4NGYyNmM3NXAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDRjMWE1MWM5ZDYxZTIwYzUyM2Y3cC0xLAorICAgIDB4MS40NmI5YzM0Nzc2NGEzcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzIwCisgICAgMHgxLjZhMDllNjY3ZjNiYzQ1ZjcxNDJjNTBhZjg0ZjI2Yzc1cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JkNGMxYTUxYzlkNjFlMjBjNTIzZjdwLTEsCisgICAgLTB4MS40NmI5YzM0Nzc2NGEzcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzIxCisgICAgLTB4MS42YTA5ZTY2N2YzYmNmYWZjMDc2MDRhOGRmZGJlNTg4ZHAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzk3MTU1ZTk1ZGMzZmQwODg1ZDE0cC0xLAorICAgIDB4MS40NmI5YzM0Nzc2NGE0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzIyCisgICAgMHgxLjZhMDllNjY3ZjNiY2ZhZmMwNzYwNGE4ZGZkYmU1ODhkcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjOTcxNTVlOTVkYzNmZDA4ODVkMTRwLTEsCisgICAgLTB4MS40NmI5YzM0Nzc2NGE0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzIzCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5ZDYzNGU5ZnAtMSwKKyAgICAtMHgxLjNkYzU4NWIyYzc0MjE4MTMyNmUwN2M0MDc0ODg3M2JicC00OSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcyNAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5ZDYzNGU5ZnAtMSwKKyAgICAtMHgxLjNkYzU4NWIyYzc0MjE4MTMyNmUwN2M0MDc0ODg3M2JicC00OSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjNDYxMTc4cC0xLAorICAgIC0weDEuZWUyYzJkOTYzYTEwYzA5OTM3MDNlMjA0NDY0NjMzMDFwLTUyLAorICAgIDB4MS41ZmRiYmU5YmJhNzc1cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzI2CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjNDYxMTc4cC0xLAorICAgIC0weDEuZWUyYzJkOTYzYTEwYzA5OTM3MDNlMjA0NDY0NjMzMDFwLTUyLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NXAzLAorICB9LAorICB7IC8vIEVudHJ5IDcyNworICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZGIyOGQ0NTFwLTEsCisgICAgMHgxLjg0NzRmNDlhNzE3YmNmZDliMjNmMDc3ZWU0ZDA5MGNmcC01MCwKKyAgICAweDEuNWZkYmJlOWJiYTc3NnAzLAorICB9LAorICB7IC8vIEVudHJ5IDcyOAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZkYjI4ZDQ1MXAtMSwKKyAgICAweDEuODQ3NGY0OWE3MTdiY2ZkOWIyM2YwNzdlZTRkMDkwY2ZwLTUwLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NnAzLAorICB9LAorICB7IC8vIEVudHJ5IDcyOQorICAgIC0weDEuNmEwOWU2NjdmM2JlMDc1Y2FkMmQ1MGRmYzY4Y2Q4OGZwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiYjhhYjRiOGM4ZDVlY2Y2YjkxMGQ2cC0xLAorICAgIDB4MS43OGZkYjllZmZlYTQ1cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzMwCisgICAgMHgxLjZhMDllNjY3ZjNiZTA3NWNhZDJkNTBkZmM2OGNkODhmcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmI4YWI0YjhjOGQ1ZWNmNmI5MTBkNnAtMSwKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDVwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzEKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDUyNTdiOWY5NTcwMWQzZjEzZjVkcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmMzZmI5YWJmY2NmY2JjZDI2MmFhMHAtMSwKKyAgICAweDEuNzhmZGI5ZWZmZWE0NnAzLAorICB9LAorICB7IC8vIEVudHJ5IDczMgorICAgIDB4MS42YTA5ZTY2N2YzYmQ1MjU3YjlmOTU3MDFkM2YxM2Y1ZHAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjM2ZiOWFiZmNjZmNiY2QyNjJhYTBwLTEsCisgICAgLTB4MS43OGZkYjllZmZlYTQ2cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzMzCisgICAgLTB4MS42YTA5ZTY2N2YzYmM5ZDUyYzZjNTVkMjM4NmQzMmM5MnAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjZjRiZTlmMzBjOWFhNDkxMGNhY2ZwLTEsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDdwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzQKKyAgICAweDEuNmEwOWU2NjdmM2JjOWQ1MmM2YzU1ZDIzODZkMzJjOTJwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2Y0YmU5ZjMwYzlhYTQ5MTBjYWNmcC0xLAorICAgIC0weDEuNzhmZGI5ZWZmZWE0N3AzLAorICB9LAorICB7IC8vIEVudHJ5IDczNQorICAgIDB4MS42YTA5ZTY2N2YzYmI4NDc3NTA5OTU1MDkzYmIyOTJiZXAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JlMGQ5YTE1NWNkMWMzNzY3ZWI3YjNwLTEsCisgICAgMHgxLmFiNDFiMDk4ODZmZThwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzYKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjg0Nzc1MDk5NTUwOTNiYjI5MmJlcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmUwZDlhMTU1Y2QxYzM3NjdlYjdiM3AtMSwKKyAgICAtMHgxLmFiNDFiMDk4ODZmZThwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzcKKyAgICAweDEuNmEwOWU2NjdmM2JjMzk3YzQzY2Q0ZWU4MTUzZTYwYTBwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiZDU4OTUyMjI4ZDdlNTg3MDFkMjk5cC0xLAorICAgIDB4MS5hYjQxYjA5ODg2ZmU5cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzM4CisgICAgLTB4MS42YTA5ZTY2N2YzYmMzOTdjNDNjZDRlZTgxNTNlNjBhMHAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JkNTg5NTIyMjhkN2U1ODcwMWQyOTlwLTEsCisgICAgLTB4MS5hYjQxYjA5ODg2ZmU5cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzM5CisgICAgMHgxLjZhMDllNjY3ZjNiY2VlODEzNzAxNDhjNjk0NDdiNGU3cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmNhMzkwMmVmNGRlMDczZDAyNzNlNnAtMSwKKyAgICAweDEuYWI0MWIwOTg4NmZlYXAzLAorICB9LAorICB7IC8vIEVudHJ5IDc0MAorICAgIC0weDEuNmEwOWU2NjdmM2JjZWU4MTM3MDE0OGM2OTQ0N2I0ZTdwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2EzOTAyZWY0ZGUwNzNkMDI3M2U2cC0xLAorICAgIC0weDEuYWI0MWIwOTg4NmZlYXAzLAorICB9LAorICB7IC8vIEVudHJ5IDc0MQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5MjIxNDFiNHAtMSwKKyAgICAweDEuNGY2YmFiZTVkYjllMWVmNDBkNjljNDUyZTEzNTU5MWRwLTQ5LAorICAgIDB4MS5jNDYzYWJlY2NiMmJhcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzQyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY5MjIxNDFiNHAtMSwKKyAgICAweDEuNGY2YmFiZTVkYjllMWVmNDBkNjljNDUyZTEzNTU5MWRwLTQ5LAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYXAzLAorICB9LAorICB7IC8vIEVudHJ5IDc0MworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOWQ3MTdhN3AtMSwKKyAgICAweDEuM2RhZWFmOTc2ZTc4N2JkMDM1YTcxMTRiZTM4N2I1YzNwLTUxLAorICAgIDB4MS5jNDYzYWJlY2NiMmJicDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzQ0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmOWQ3MTdhN3AtMSwKKyAgICAweDEuM2RhZWFmOTc2ZTc4N2JkMDM1YTcxMTRiZTM4N2I1YzNwLTUxLAorICAgIC0weDEuYzQ2M2FiZWNjYjJiYnAzLAorICB9LAorICB7IC8vIEVudHJ5IDc0NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlMThjZWQ5YXAtMSwKKyAgICAtMHgxLjYxMjhhODM0NDhjM2MyMTdlNTJjNzc1YTA2OThkMjZhcC01MCwKKyAgICAweDEuYzQ2M2FiZWNjYjJiY3AzLAorICB9LAorICB7IC8vIEVudHJ5IDc0NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTE4Y2VkOWFwLTEsCisgICAgLTB4MS42MTI4YTgzNDQ4YzNjMjE3ZTUyYzc3NWEwNjk4ZDI2YXAtNTAsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJjcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzQ3CisgICAgMHgxLjZhMDllNjY3ZjNiZTEzZDc3ZDhjNTJhNzI2NTUwZWFjcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JiN2UzOWU4NjlkNDI1ODA5MDhjN2NwLTEsCisgICAgMHgxLmRkODVhNzQxMGY1OGJwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDgKKyAgICAtMHgxLjZhMDllNjY3ZjNiZTEzZDc3ZDhjNTJhNzI2NTUwZWFjcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JiN2UzOWU4NjlkNDI1ODA5MDhjN2NwLTEsCisgICAgLTB4MS5kZDg1YTc0MTBmNThicDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzQ5CisgICAgMHgxLjZhMDllNjY3ZjNiZDVlZDI4YTU4NThjOTM5ZjZkZGFhcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjMzMzZWRiOWRjZTA0NWQzYjBlNzVwLTEsCisgICAgMHgxLmRkODVhNzQxMGY1OGNwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTAKKyAgICAtMHgxLjZhMDllNjY3ZjNiZDVlZDI4YTU4NThjOTM5ZjZkZGFhcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjMzMzZWRiOWRjZTA0NWQzYjBlNzVwLTEsCisgICAgLTB4MS5kZDg1YTc0MTBmNThjcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzUxCisgICAgMHgxLjZhMDllNjY3ZjNiY2E5Y2Q5NzI0NWVlYWYzMTYzMzBlcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjZTg0M2NlZDFjN2UyZGY2MzE2ZDRwLTEsCisgICAgMHgxLmRkODVhNzQxMGY1OGRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTIKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2E5Y2Q5NzI0NWVlYWYzMTYzMzBlcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjZTg0M2NlZDFjN2UyZGY2MzE2ZDRwLTEsCisgICAgLTB4MS5kZDg1YTc0MTBmNThkcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzUzCisgICAgMHgxLjU4M2ViZWZmNjVjYzIyNjQ4MGFlNjg1YzE3NjVkZWMxcC00OSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjhjNDVkM2Q0cC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVkcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzU0CisgICAgLTB4MS41ODNlYmVmZjY1Y2MyMjY0ODBhZTY4NWMxNzY1ZGVjMXAtNDksCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4YzQ1ZDNkNHAtMSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTUKKyAgICAweDEuNjBmYWZiZmQ5NzMwODk5MjAyYjlhMTcwYzM5NzFlODZwLTUxLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjg2NTMzNTNwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWVwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTYKKyAgICAtMHgxLjYwZmFmYmZkOTczMDg5OTIwMmI5YTE3MGMzOTcxZTg2cC01MSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4NjUzMzUzcC0xLAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZXAzLAorICB9LAorICB7IC8vIEVudHJ5IDc1NworICAgIC0weDEuNGY4MjgyMDEzNDY3YmIzNmZlYTMyZjQ3OTc1M2ZlN2FwLTUwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTQ4NDkyZDNwLTEsCisgICAgMHgxLmY2YTdhMjk1NTM4NWZwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTgKKyAgICAweDEuNGY4MjgyMDEzNDY3YmIzNmZlYTMyZjQ3OTc1M2ZlN2FwLTUwLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTQ4NDkyZDNwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVmcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzU5CisgICAgLTB4MS42YTA5ZTY2N2YzYmEwZGYyOTlkMjVmODJmNjM5MjUxZnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiZjg0MWVjYzIzYzc0NTk5MDc2YTgxcC0xLAorICAgIDB4MS4wN2U0Y2VmNGNiZDk2cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzYwCisgICAgMHgxLjZhMDllNjY3ZjNiYTBkZjI5OWQyNWY4MmY2MzkyNTFmcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JmODQxZWNjMjNjNzQ1OTkwNzZhODFwLTEsCisgICAgLTB4MS4wN2U0Y2VmNGNiZDk2cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzYxCisgICAgLTB4MS42YTA5ZTY2N2YzYmI3N2ZjODAzYTUzNDFjNTUyZmUwZnAtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiZTFhMTRlNWJiZDM4YWQ2MGZkZDdicC0xLAorICAgIDB4MS4wN2U0Y2VmNGNiZDk3cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzYyCisgICAgMHgxLjZhMDllNjY3ZjNiYjc3ZmM4MDNhNTM0MWM1NTJmZTBmcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JlMWExNGU1YmJkMzhhZDYwZmRkN2JwLTEsCisgICAgLTB4MS4wN2U0Y2VmNGNiZDk3cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzYzCisgICAgLTB4MS42YTA5ZTY2N2YzYmNlMjA2NjZhMjQ2ZmYyYTYyZjA5N3AtMSwKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2IwMGFmZjUzZGZjZWE5MGU2YTBjcC0xLAorICAgIDB4MS4wN2U0Y2VmNGNiZDk4cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzY0CisgICAgMHgxLjZhMDllNjY3ZjNiY2UyMDY2NmEyNDZmZjJhNjJmMDk3cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjYjAwYWZmNTNkZmNlYTkwZTZhMGNwLTEsCisgICAgLTB4MS4wN2U0Y2VmNGNiZDk4cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzY1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmQyNTMxYTQzZHAtMSwKKyAgICAtMHgxLmIwODhlOTBjNzdmZDEyZWE3OWY5ODYzMWU2ZjBiNzRicC00OCwKKyAgICAweDEuMTQ3NWNjOWVlZGVmZnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2NgorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmQyNTMxYTQzZHAtMSwKKyAgICAtMHgxLmIwODhlOTBjNzdmZDEyZWE3OWY5ODYzMWU2ZjBiNzRicC00OCwKKyAgICAtMHgxLjE0NzVjYzllZWRlZmZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjcKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjg2NDM3NjU2cC0xLAorICAgIC0weDEuNjExMWQyMThlZmZhMjVkNGYzZjMwYzY1NGQ3YzM2YTFwLTQ5LAorICAgIDB4MS4xNDc1Y2M5ZWVkZnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2OAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4NjQzNzY1NnAtMSwKKyAgICAtMHgxLjYxMTFkMjE4ZWZmYTI1ZDRmM2YzMGM2NTRkN2MzNmExcC00OSwKKyAgICAtMHgxLjE0NzVjYzllZWRmcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzY5CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNzU1NDg2ZnAtMSwKKyAgICAweDEuM2RkYzViY2UyMDBiYjQ1NjE4MTllNzM1MjdmNWE2ZDdwLTUwLAorICAgIDB4MS4xNDc1Y2M5ZWVkZjAxcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzcwCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmU3NTU0ODZmcC0xLAorICAgIDB4MS4zZGRjNWJjZTIwMGJiNDU2MTgxOWU3MzUyN2Y1YTZkN3AtNTAsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZjAxcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzcxCisgICAgLTB4MS42YTA5ZTY2N2YzYmVkNTU3NDExZjRlNGMxMTRkNzM1N3AtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JhYmNiYTI0ZDZkODdlY2M4ZjgzYjRwLTEsCisgICAgMHgxLjIxMDZjYTQ5MTAwNjhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzIKKyAgICAweDEuNmEwOWU2NjdmM2JlZDU1NzQxMWY0ZTRjMTE0ZDczNTdwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiYWJjYmEyNGQ2ZDg3ZWNjOGY4M2I0cC0xLAorICAgIC0weDEuMjEwNmNhNDkxMDA2OHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc3MworICAgIC0weDEuNmEwOWU2NjdmM2JkNmI0ZDVhYjc1YTkwOWY4ZTViNGNwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiYzI2YzQwYjNlY2MzY2VjZTFkMWEwcC0xLAorICAgIDB4MS4yMTA2Y2E0OTEwMDY5cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzc0CisgICAgMHgxLjZhMDllNjY3ZjNiZDZiNGQ1YWI3NWE5MDlmOGU1YjRjcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmMyNmM0MGIzZWNjM2NlY2UxZDFhMHAtMSwKKyAgICAtMHgxLjIxMDZjYTQ5MTAwNjlwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzUKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzAxNDM3NDRmNjZkM2MzYzU1Y2Q5cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmQ5MGNkZjFhNmJmZjlhMzJhMzkyM3AtMSwKKyAgICAweDEuMjEwNmNhNDkxMDA2YXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc3NgorICAgIDB4MS42YTA5ZTY2N2YzYmMwMTQzNzQ0ZjY2ZDNjM2M1NWNkOXAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JkOTBjZGYxYTZiZmY5YTMyYTM5MjNwLTEsCisgICAgLTB4MS4yMTA2Y2E0OTEwMDZhcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzc3CisgICAgLTB4MS4zNGYyNzI5OTNkMTQxNGEyYjM5YmQ4MzcwNWNlYzEyMHAtNDgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZThiMjdiNmEycC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQxcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzc4CisgICAgMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzNzA1Y2VjMTIwcC00OCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlOGIyN2I2YTJwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQxcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzc5CisgICAgLTB4MS5hNzkzOTRjOWU4YTBhNTE1OWNkZWMxYmE4MzYyYjk2OHAtNTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY1MGM5YmQ0cC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQycDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzgwCisgICAgMHgxLmE3OTM5NGM5ZThhMGE1MTU5Y2RlYzFiYTgzNjJiOTY4cC01MSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjUwYzliZDRwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzgxCisgICAgMHgxLjk2MWIxYWNkODVkN2Q2YmE5OGM4NGY5MTMzZDEwYWJlcC00OSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNWVmMTgxMDdwLTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODIKKyAgICAtMHgxLjk2MWIxYWNkODVkN2Q2YmE5OGM4NGY5MTMzZDEwYWJlcC00OSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNWVmMTgxMDdwLTEsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQzcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzgzCisgICAgMHgxLjZhMDllNjY3ZjNiYTAxNzdjOTczNWRiYjcyZjA5ZjY1cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmY5MDk5OWM4MmM5MGNlYmFmOWYzZnAtMSwKKyAgICAweDEuM2EyOGM1OWQ1NDMzOXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc4NAorICAgIC0weDEuNmEwOWU2NjdmM2JhMDE3N2M5NzM1ZGJiNzJmMDlmNjVwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiZjkwOTk5YzgyYzkwY2ViYWY5ZjNmcC0xLAorICAgIC0weDEuM2EyOGM1OWQ1NDMzOXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc4NQorICAgIDB4MS42YTA5ZTY2N2YzYmI2YjgxYWZkYjUxN2E0ZTg1NDhiNHAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JlMjY4ZmI2MWFkNTUyMzUzMmUyOThwLTEsCisgICAgMHgxLjNhMjhjNTlkNTQzM2FwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODYKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjZiODFhZmRiNTE3YTRlODU0OGI0cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmUyNjhmYjYxYWQ1NTIzNTMyZTI5OHAtMSwKKyAgICAtMHgxLjNhMjhjNTlkNTQzM2FwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODcKKyAgICAweDEuNmEwOWU2NjdmM2JjZDU4Yjk2NDM0NTM3YzAxMDBiOWJwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiY2JjODVjZmIyZTE5NjE0YWMzZjg4cC0xLAorICAgIDB4MS4zYTI4YzU5ZDU0MzNicDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzg4CisgICAgLTB4MS42YTA5ZTY2N2YzYmNkNThiOTY0MzQ1MzdjMDEwMGI5YnAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JjYmM4NWNmYjJlMTk2MTRhYzNmODhwLTEsCisgICAgLTB4MS4zYTI4YzU5ZDU0MzNicDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzg5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDA3MTFmNDM3cC0xLAorICAgIDB4MS5iOTViZmMyNjAyMmIxNjVhZWQzZTJhM2IxMjM4MjQ3OXAtNDgsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTJwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZDA3MTFmNDM3cC0xLAorICAgIDB4MS5iOTViZmMyNjAyMmIxNjVhZWQzZTJhM2IxMjM4MjQ3OXAtNDgsCisgICAgLTB4MS40NmI5YzM0Nzc2NGEycDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzkxCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5YzllYzgzcC0xLAorICAgIDB4MS43MmI3Zjg0YzA0NTYyY2I1ZGE3YzU0NzdiOTU3YWRlYnAtNDksCisgICAgMHgxLjQ2YjljMzQ3NzY0YTNwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjc5YzllYzgzcC0xLAorICAgIDB4MS43MmI3Zjg0YzA0NTYyY2I1ZGE3YzU0NzdiOTU3YWRlYnAtNDksCisgICAgLTB4MS40NmI5YzM0Nzc2NGEzcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzkzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODFlNGNmcC0xLAorICAgIC0weDEuMWE5MDBmNjdmNzUzYTY5NDRiMDc1NzEwNDhmMWNhZDJwLTUwLAorICAgIDB4MS40NmI5YzM0Nzc2NGE0cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzk0CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYzgxZTRjZnAtMSwKKyAgICAtMHgxLjFhOTAwZjY3Zjc1M2E2OTQ0YjA3NTcxMDQ4ZjFjYWQycC01MCwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTRwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTUKKyAgICAweDEuNmEwOWU2NjdmM2JlZTFkMjExN2U1MDEzNjlmYmZmZWZwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmFiMDNmNTQ3N2Q2Yjc0ZjRkNTVkNXAtMSwKKyAgICAweDEuNTM0YWMwZjE5ODYwYnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc5NgorICAgIC0weDEuNmEwOWU2NjdmM2JlZTFkMjExN2U1MDEzNjlmYmZmZWZwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmFiMDNmNTQ3N2Q2Yjc0ZjRkNTVkNXAtMSwKKyAgICAtMHgxLjUzNGFjMGYxOTg2MGJwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTcKKyAgICAweDEuNmEwOWU2NjdmM2JkNzdjODJiMTY1YzU4MDRiN2I4NDNwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmMxYTQ5M2FkZmNhNzU3YzFhNzQxZnAtMSwKKyAgICAweDEuNTM0YWMwZjE5ODYwY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDc5OAorICAgIC0weDEuNmEwOWU2NjdmM2JkNzdjODJiMTY1YzU4MDRiN2I4NDNwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmMxYTQ5M2FkZmNhNzU3YzFhNzQxZnAtMSwKKyAgICAtMHgxLjUzNGFjMGYxOTg2MGNwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTkKKyAgICAweDEuNmEwOWU2NjdmM2JjMGRiZTQ0YWU2ODliMzU2OThhMmZwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ4NDUzMjE0N2JlMzIzZWRkYWMwMXAtMSwKKyAgICAweDEuNTM0YWMwZjE5ODYwZHA0LAorICB9LAorICB7IC8vIEVudHJ5IDgwMAorICAgIC0weDEuNmEwOWU2NjdmM2JjMGRiZTQ0YWU2ODliMzU2OThhMmZwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmQ4NDUzMjE0N2JlMzIzZWRkYWMwMXAtMSwKKyAgICAtMHgxLjUzNGFjMGYxOTg2MGRwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDEKKyAgICAweDEuM2RjNTg1YjJjNzQyMTgxMzI2ZTA3YzQwMzc1NDY0ZGVwLTQ4LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlNzU4ZDNhN2NwLTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzRwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDIKKyAgICAtMHgxLjNkYzU4NWIyYzc0MjE4MTMyNmUwN2M0MDM3NTQ2NGRlcC00OCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZTc1OGQzYTdjcC0xLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NHA0LAorICB9LAorICB7IC8vIEVudHJ5IDgwMworICAgIDB4MS5lZTJjMmQ5NjNhMTBjMDk5MzcwM2UyMDQ0MmFkN2I4ZHAtNTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMTE4NDVlMXAtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NXA0LAorICB9LAorICB7IC8vIEVudHJ5IDgwNAorICAgIC0weDEuZWUyYzJkOTYzYTEwYzA5OTM3MDNlMjA0NDJhZDdiOGRwLTUxLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjExODQ1ZTFwLTEsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc1cDQsCisgIH0sCisgIHsgLy8gRW50cnkgODA1CisgICAgLTB4MS44NDc0ZjQ5YTcxN2JjZmQ5YjIzZjA3N2VjOGRkMTc1YnAtNDksCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY2Y2EzNTE0N3AtMSwKKyAgICAweDEuNWZkYmJlOWJiYTc3NnA0LAorICB9LAorICB7IC8vIEVudHJ5IDgwNgorICAgIDB4MS44NDc0ZjQ5YTcxN2JjZmQ5YjIzZjA3N2VjOGRkMTc1YnAtNDksCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY2Y2EzNTE0N3AtMSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDcKKyAgICAtMHgxLjZhMDllNjY3ZjNiOWY0ZmNmOTE0NWJmM2VmMzlmOTAxcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JmOWQxNDZjZTFjYWQ0M2RlOWIzNTJwLTEsCisgICAgMHgxLjZjNmNiYzQ1ZGM4ZGNwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDgKKyAgICAweDEuNmEwOWU2NjdmM2I5ZjRmY2Y5MTQ1YmYzZWYzOWY5MDFwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmY5ZDE0NmNlMWNhZDQzZGU5YjM1MnAtMSwKKyAgICAtMHgxLjZjNmNiYzQ1ZGM4ZGNwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDkKKyAgICAtMHgxLjZhMDllNjY3ZjNiYjVmMDZkZjdjNGZiMmQ3NDk3MmFlcC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JlMzMwYTg2NzlkNzE5OTNlN2M3MDlwLTEsCisgICAgMHgxLjZjNmNiYzQ1ZGM4ZGRwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTAKKyAgICAweDEuNmEwOWU2NjdmM2JiNWYwNmRmN2M0ZmIyZDc0OTcyYWVwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmUzMzBhODY3OWQ3MTk5M2U3YzcwOXAtMSwKKyAgICAtMHgxLjZjNmNiYzQ1ZGM4ZGRwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTEKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2M5MTBjNWU0NDM3MDU1NGYwNWY0cC0xLAorICAgIC0weDEuNmEwOWU2NjdmM2JjYzkwMGEwMTFlMzVkN2ZkYmY0NTlwLTEsCisgICAgMHgxLjZjNmNiYzQ1ZGM4ZGVwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTIKKyAgICAweDEuNmEwOWU2NjdmM2JjYzkxMGM1ZTQ0MzcwNTU0ZjA1ZjRwLTEsCisgICAgLTB4MS42YTA5ZTY2N2YzYmNjOTAwYTAxMWUzNWQ3ZmRiZjQ1OXAtMSwKKyAgICAtMHgxLjZjNmNiYzQ1ZGM4ZGVwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY2U4NTY4NWJkcC0xLAorICAgIC0weDEuYzIyZjBmM2Y4YzU5MTljYjYwODJjZTQ0M2NmOTUwMjJwLTQ4LAorICAgIDB4MS43OGZkYjllZmZlYTQ1cDQsCisgIH0sCisgIHsgLy8gRW50cnkgODE0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY2U4NTY4NWJkcC0xLAorICAgIC0weDEuYzIyZjBmM2Y4YzU5MTljYjYwODJjZTQ0M2NmOTUwMjJwLTQ4LAorICAgIC0weDEuNzhmZGI5ZWZmZWE0NXA0LAorICB9LAorICB7IC8vIEVudHJ5IDgxNQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNmNiNGE0M2RwLTEsCisgICAgLTB4MS44NDVlMWU3ZjE4YjIzMzk2YzEwNTljOGEyNGMyNjA5Y3AtNDksCisgICAgMHgxLjc4ZmRiOWVmZmVhNDZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTYKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmNmNiNGE0M2RwLTEsCisgICAgLTB4MS44NDVlMWU3ZjE4YjIzMzk2YzEwNTljOGEyNGMyNjA5Y3AtNDksCisgICAgLTB4MS43OGZkYjllZmZlYTQ2cDQsCisgIH0sCisgIHsgLy8gRW50cnkgODE3CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMTEyYzJiY3AtMSwKKyAgICAweDEuZWU4Nzg2MDM5ZDM3MzFhNGZiZTk4ZGQ2ZDMyZmY2MmFwLTUxLAorICAgIDB4MS43OGZkYjllZmZlYTQ3cDQsCisgIH0sCisgIHsgLy8gRW50cnkgODE4CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYxMTJjMmJjcC0xLAorICAgIDB4MS5lZTg3ODYwMzlkMzczMWE0ZmJlOThkZDZkMzJmZjYyYXAtNTEsCisgICAgLTB4MS43OGZkYjllZmZlYTQ3cDQsCisgIH0sCisgIHsgLy8gRW50cnkgODE5CisgICAgLTB4MS42YTA5ZTY2N2YzYmVlZTRjZTFkZDUxZGFjMjNjNmJkY3AtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JhYTNjNDg0MThkNGVmZDE5ZDA3NGFwLTEsCisgICAgMHgxLjg1OGViNzlhMjBiYWVwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjAKKyAgICAweDEuNmEwOWU2NjdmM2JlZWU0Y2UxZGQ1MWRhYzIzYzZiZGNwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiYWEzYzQ4NDE4ZDRlZmQxOWQwNzRhcC0xLAorICAgIC0weDEuODU4ZWI3OWEyMGJhZXA0LAorICB9LAorICB7IC8vIEVudHJ5IDgyMQorICAgIC0weDEuNmEwOWU2NjdmM2JkODQ0MmZiNzU1ZTFmNjk3MmY0OGZwLTEsCisgICAgMHgxLjZhMDllNjY3ZjNiYzBkY2U2YTgwYzhhZTBhZTRmNWYzcC0xLAorICAgIDB4MS44NThlYjc5YTIwYmFmcDQsCisgIH0sCisgIHsgLy8gRW50cnkgODIyCisgICAgMHgxLjZhMDllNjY3ZjNiZDg0NDJmYjc1NWUxZjY5NzJmNDhmcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmMwZGNlNmE4MGM4YWUwYWU0ZjVmM3AtMSwKKyAgICAtMHgxLjg1OGViNzlhMjBiYWZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjMKKyAgICAtMHgxLjZhMDllNjY3ZjNiYzFhMzkxNTBkNmE2MmE2OWY5NmRhcC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmQ3N2Q4NTBlOGJjNmFkYTIyZmUzNHAtMSwKKyAgICAweDEuODU4ZWI3OWEyMGJiMHA0LAorICB9LAorICB7IC8vIEVudHJ5IDgyNAorICAgIDB4MS42YTA5ZTY2N2YzYmMxYTM5MTUwZDZhNjJhNjlmOTZkYXAtMSwKKyAgICAweDEuNmEwOWU2NjdmM2JkNzdkODUwZThiYzZhZGEyMmZlMzRwLTEsCisgICAgLTB4MS44NThlYjc5YTIwYmIwcDQsCisgIH0sCisgIHsgLy8gRW50cnkgODI1CisgICAgMHgxLmZhNzI5OWIxNzU3M2QzNzNjNjE1MDk2NTcyYTBkZTA0cC0xLAorICAgIC0weDEuMmNjYWY2NDFkNDI2MWVhM2NjZDhkMmExMDJkYzMwNjZwLTMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwNjIsCisgIH0sCisgIHsgLy8gRW50cnkgODI2CisgICAgLTB4MS5mYTcyOTliMTc1NzNkMzczYzYxNTA5NjU3MmEwZGUwNHAtMSwKKyAgICAtMHgxLjJjY2FmNjQxZDQyNjFlYTNjY2Q4ZDJhMTAyZGMzMDY2cC0zLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnA2MiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjcKKyAgICAweDEuZmZmNmRmZDQyZGM1NDQzMGJjMDU3NmIwMGE4OGJkOTRwLTEsCisgICAgMHgxLjgyYWEzNzViM2MzM2U3MDY2MzczMWJhYjRiZWI2ZWQzcC03LAorICAgIDB4MS4wcDYzLAorICB9LAorICB7IC8vIEVudHJ5IDgyOAorICAgIC0weDEuZmZmNmRmZDQyZGM1NDQzMGJjMDU3NmIwMGE4OGJkOTRwLTEsCisgICAgMHgxLjgyYWEzNzViM2MzM2U3MDY2MzczMWJhYjRiZWI2ZWQzcC03LAorICAgIC0weDEuMHA2MywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjkKKyAgICAweDEuZTQ1NmI4MThlNzM5NmI0NTk4OTk3OGQ0YjdlYmY3YjNwLTEsCisgICAgMHgxLjRjMDYyMmE2ZTM1ZGRlZmQ1ZjJiNzcwMDcxNmE1ODFmcC0yLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDYzLAorICB9LAorICB7IC8vIEVudHJ5IDgzMAorICAgIC0weDEuZTQ1NmI4MThlNzM5NmI0NTk4OTk3OGQ0YjdlYmY3YjNwLTEsCisgICAgMHgxLjRjMDYyMmE2ZTM1ZGRlZmQ1ZjJiNzcwMDcxNmE1ODFmcC0yLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXA2MywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzEKKyAgICAtMHgxLjg2ZGNjYTBkNjg5ZTdiNTZlZjc5NDgxYmU0YTY0NWM2cC0xLAorICAgIDB4MS40YWI2NTBiOGM2MDczNDM4NTM3NWUyMjYwM2ZjZGIxMHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzIKKyAgICAweDEuODZkY2NhMGQ2ODllN2I1NmVmNzk0ODFiZTRhNjQ1YzZwLTEsCisgICAgMHgxLjRhYjY1MGI4YzYwNzM0Mzg1Mzc1ZTIyNjAzZmNkYjEwcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzMKKyAgICAtMHgxLjg2ZGNjOWJhYmIwYTQwZWU4NzVjYWIzYjllODkyNzU3cC0xLAorICAgIDB4MS40YWI2NTExYTdkMzlhZDNjYzg4ZGVkMWU3NzVjYTE0N3AtMSwKKyAgICAweDEuMHAyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzQKKyAgICAweDEuODZkY2M5YmFiYjBhNDBlZTg3NWNhYjNiOWU4OTI3NTdwLTEsCisgICAgMHgxLjRhYjY1MTFhN2QzOWFkM2NjODhkZWQxZTc3NWNhMTQ3cC0xLAorICAgIC0weDEuMHAyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzUKKyAgICAtMHgxLjg2ZGNjOTE1NWZlMTgyZDQ1MTU1OTk0MjZiYjE0Yjk0cC0xLAorICAgIDB4MS40YWI2NTFkZGViOWU2MTQzODM4MmYwMjE2N2FkZTRhZnAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzYKKyAgICAweDEuODZkY2M5MTU1ZmUxODJkNDUxNTU5OTQyNmJiMTRiOTRwLTEsCisgICAgMHgxLjRhYjY1MWRkZWI5ZTYxNDM4MzgyZjAyMTY3YWRlNGFmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzcKKyAgICAtMHgxLjhmMjJmODRkNDJkYTFmNTc0NjlkZmFhYzQ0YThiNzNhcC0xLAorICAgIDB4MS40MGFkNjdlNzc3YjFkZjAxOTUxODlmNTBhOGMyNjM0NXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzgKKyAgICAweDEuOGYyMmY4NGQ0MmRhMWY1NzQ2OWRmYWFjNDRhOGI3M2FwLTEsCisgICAgMHgxLjQwYWQ2N2U3NzdiMWRmMDE5NTE4OWY1MGE4YzI2MzQ1cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzkKKyAgICAtMHgxLjhmMjJmODQzM2Q2ZWRmZTlhNGFmZjk2MjI1MTdjYWE5cC0xLAorICAgIDB4MS40MGFkNjdmM2YwYzlhMTQzOTYzYzljOTZkYmNlM2Y4YXAtMSwKKyAgICAweDEuMHAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDAKKyAgICAweDEuOGYyMmY4NDMzZDZlZGZlOWE0YWZmOTYyMjUxN2NhYTlwLTEsCisgICAgMHgxLjQwYWQ2N2YzZjBjOWExNDM5NjNjOWM5NmRiY2UzZjhhcC0xLAorICAgIC0weDEuMHAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDEKKyAgICAtMHgxLjhmMjJmODJmMzI5ODVmZTMwNjk5YzZlMTJkOWRmY2UycC0xLAorICAgIDB4MS40MGFkNjgwY2UyZjkyNGQ3MTY3NjlkMTA2NGJjOGRlZnAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDIKKyAgICAweDEuOGYyMmY4MmYzMjk4NWZlMzA2OTljNmUxMmQ5ZGZjZTJwLTEsCisgICAgMHgxLjQwYWQ2ODBjZTJmOTI0ZDcxNjc2OWQxMDY0YmM4ZGVmcC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDMKKyAgICAtMHgxLjgzN2I5ZGRkYzFlYWJkMzc5ZDcyOWY1NzVmYzExNDRjcC0xLAorICAgIC0weDEuNGVhYTYwNmRiMjRjM2NiNWUxNWQ3YjE5ZDVlZTczYTFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDQKKyAgICAweDEuODM3YjlkZGRjMWVhYmQzNzlkNzI5ZjU3NWZjMTE0NGNwLTEsCisgICAgLTB4MS40ZWFhNjA2ZGIyNGMzY2I1ZTE1ZDdiMTlkNWVlNzNhMXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDUKKyAgICAtMHgxLjgzN2I5ZGRkYzFlYWU3MGNlOTgwNTVhMGU0NTBkOTNjcC0xLAorICAgIC0weDEuNGVhYTYwNmRiMjRjMGM0NjZkYTFjMmRjN2JhYTJiMzJwLTEsCisgICAgMHgxLjBwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDYKKyAgICAweDEuODM3YjlkZGRjMWVhZTcwY2U5ODA1NWEwZTQ1MGQ5M2NwLTEsCisgICAgLTB4MS40ZWFhNjA2ZGIyNGMwYzQ2NmRhMWMyZGM3YmFhMmIzMnAtMSwKKyAgICAtMHgxLjBwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDcKKyAgICAtMHgxLjgzN2I5ZGRkYzFlYjNhYjc4MTliYzIzM2RiNDY5N2I1cC0xLAorICAgIC0weDEuNGVhYTYwNmRiMjRiYWI2Nzg2MmE1MjYxYjc3MTlkY2ZwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDgKKyAgICAweDEuODM3YjlkZGRjMWViM2FiNzgxOWJjMjMzZGI0Njk3YjVwLTEsCisgICAgLTB4MS40ZWFhNjA2ZGIyNGJhYjY3ODYyYTUyNjFiNzcxOWRjZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDkKKyAgICAweDEuZDE4ZjZlYWQxYjQ0NmI0YmNiNzNjMjM5MGIzMzBkNzVwLTEsCisgICAgLTB4MS5hYTIyNjU3NTM3MjAxMDExNDUyMzA5NTJlNjFjNmYyY3AtMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAwLAorICB9LAorICB7IC8vIEVudHJ5IDg1MAorICAgIC0weDEuZDE4ZjZlYWQxYjQ0NmI0YmNiNzNjMjM5MGIzMzBkNzVwLTEsCisgICAgLTB4MS5hYTIyNjU3NTM3MjAxMDExNDUyMzA5NTJlNjFjNmYyY3AtMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTEKKyAgICAweDEuZDE4ZjZlYWQxYjQ0NWRmYWI4NDgxODgwMDljOWJiOTVwLTEsCisgICAgLTB4MS5hYTIyNjU3NTM3MjA0YTQzMzJmOGFjYmI3MmIwZDc2OHAtMiwKKyAgICAweDEuMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDg1MgorICAgIC0weDEuZDE4ZjZlYWQxYjQ0NWRmYWI4NDgxODgwMDljOWJiOTVwLTEsCisgICAgLTB4MS5hYTIyNjU3NTM3MjA0YTQzMzJmOGFjYmI3MmIwZDc2OHAtMiwKKyAgICAtMHgxLjBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTMKKyAgICAweDEuZDE4ZjZlYWQxYjQ0NDM1ODkxZjBjNTBlMDE4MjY5ODhwLTEsCisgICAgLTB4MS5hYTIyNjU3NTM3MjBiZWE3MGVhM2YzOGM4NmRiNDBhZnAtMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxLAorICB9LAorICB7IC8vIEVudHJ5IDg1NAorICAgIC0weDEuZDE4ZjZlYWQxYjQ0NDM1ODkxZjBjNTBlMDE4MjY5ODhwLTEsCisgICAgLTB4MS5hYTIyNjU3NTM3MjBiZWE3MGVhM2YzOGM4NmRiNDBhZnAtMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTUKKyAgICAweDEuYWVkNTQ4ZjA5MGNlZDc5Yzc5Y2JmNzkwNDQxZjgxOTdwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2OGM2OWEyZWQ0NWZiNTQ3YzJmMjcxcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDg1NgorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZDc5Yzc5Y2JmNzkwNDQxZjgxOTdwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2OGM2OWEyZWQ0NWZiNTQ3YzJmMjcxcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTcKKyAgICAweDEuYWVkNTQ4ZjA5MGNlZTA0MThkZDNkMjEzOGExZTc4NjVwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIDB4MS4wcDAsCisgIH0sCisgIHsgLy8gRW50cnkgODU4CisgICAgLTB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAweDEuMTRhMjgwZmI1MDY4YjkyMzg0OGNkYjJlZDBlMzdhNTNwLTEsCisgICAgLTB4MS4wcDAsCisgIH0sCisgIHsgLy8gRW50cnkgODU5CisgICAgMHgxLmFlZDU0OGYwOTBjZWYxOGJiNWUzODcxYTE0ZDk0NjA5cC0xLAorICAgIDB4MS4xNGEyODBmYjUwNjg5ZTM2MmZmZGQyMjFlMjU1MTAzNXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAwLAorICB9LAorICB7IC8vIEVudHJ5IDg2MAorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZjE4YmI1ZTM4NzFhMTRkOTQ2MDlwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2ODllMzYyZmZkZDIyMWUyNTUxMDM1cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwLAorICB9LAorICB7IC8vIEVudHJ5IDg2MQorICAgIDB4MS5lYWVlODc0NGIwNWVmMDdjZDBiOTA4OTEzMDU5ODMxNHAtMiwKKyAgICAweDEuYzE1MjgwNjViN2Q0ZmRiMTU4YzljNGE2YjNlNGI3NDBwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgODYyCisgICAgLTB4MS5lYWVlODc0NGIwNWVmMDdjZDBiOTA4OTEzMDU5ODMxNHAtMiwKKyAgICAweDEuYzE1MjgwNjViN2Q0ZmRiMTU4YzljNGE2YjNlNGI3NDBwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDg2MworICAgIDB4MS5lYWVlODc0NGIwNWVmZTg3NjRiYzM2NGZkODM3YjY2NnAtMiwKKyAgICAweDEuYzE1MjgwNjViN2Q0ZjlkYjdiYmIzYjQ1ZjVmNWIzMGFwLTEsCisgICAgMHgxLjBwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODY0CisgICAgLTB4MS5lYWVlODc0NGIwNWVmZTg3NjRiYzM2NGZkODM3YjY2NnAtMiwKKyAgICAweDEuYzE1MjgwNjViN2Q0ZjlkYjdiYmIzYjQ1ZjVmNWIzMGFwLTEsCisgICAgLTB4MS4wcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDg2NQorICAgIDB4MS5lYWVlODc0NGIwNWYxYTljOGNjMjkxY2QyNzk4MTA1MXAtMiwKKyAgICAweDEuYzE1MjgwNjViN2Q0ZjIyZmMxOWUyODg0NzljMzZiMjdwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODY2CisgICAgLTB4MS5lYWVlODc0NGIwNWYxYTljOGNjMjkxY2QyNzk4MTA1MXAtMiwKKyAgICAweDEuYzE1MjgwNjViN2Q0ZjIyZmMxOWUyODg0NzljMzZiMjdwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDg2NworICAgIDB4MS5mYWFlZWQ0ZjMxNTc1YzI3ZjM5YzFkN2MwMTJhNDQxM3AtMywKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTg0YzVmMWQyMTBiNmFkYmU1NmNwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODY4CisgICAgLTB4MS5mYWFlZWQ0ZjMxNTc1YzI3ZjM5YzFkN2MwMTJhNDQxM3AtMywKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTg0YzVmMWQyMTBiNmFkYmU1NmNwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDg2OQorICAgIDB4MS5mYWFlZWQ0ZjMxNTc2YmE4OWRlYmRjNzM1MWU4YjFhZXAtMywKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTc0ZjA3YTY3OTcyYmYyOWYxNDhwLTEsCisgICAgMHgxLjBwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgODcwCisgICAgLTB4MS5mYWFlZWQ0ZjMxNTc2YmE4OWRlYmRjNzM1MWU4YjFhZXAtMywKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTc0ZjA3YTY3OTcyYmYyOWYxNDhwLTEsCisgICAgLTB4MS4wcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDg3MQorICAgIDB4MS5mYWFlZWQ0ZjMxNTc4YWE5ZjI4YjVhNjFmMzRkY2NiMXAtMywKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTU1NDU4YjkyYTQxNjdhZWM3ZmZwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgODcyCisgICAgLTB4MS5mYWFlZWQ0ZjMxNTc4YWE5ZjI4YjVhNjFmMzRkY2NiMXAtMywKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTU1NDU4YjkyYTQxNjdhZWM3ZmZwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDg3MworICAgIDB4MS5mZWFhZWVlODZlZTM0Y2MwNWVmZjI4NzQwZWU3YjQ2OXAtNCwKKyAgICAweDEuZmMwMTU1MjdkNWJkMzcxYTEyMzIwMjQ5Y2E0ZGFmZDdwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgODc0CisgICAgLTB4MS5mZWFhZWVlODZlZTM0Y2MwNWVmZjI4NzQwZWU3YjQ2OXAtNCwKKyAgICAweDEuZmMwMTU1MjdkNWJkMzcxYTEyMzIwMjQ5Y2E0ZGFmZDdwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC00LAorICB9LAorICB7IC8vIEVudHJ5IDg3NQorICAgIDB4MS5mZWFhZWVlODZlZTM1Y2EwNjlhODY3MjFmODlmODVhNXAtNCwKKyAgICAweDEuZmMwMTU1MjdkNWJkMzZkYTNjZDQyNTNiZWRlMzE5Y2FwLTEsCisgICAgMHgxLjBwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODc2CisgICAgLTB4MS5mZWFhZWVlODZlZTM1Y2EwNjlhODY3MjFmODlmODVhNXAtNCwKKyAgICAweDEuZmMwMTU1MjdkNWJkMzZkYTNjZDQyNTNiZWRlMzE5Y2FwLTEsCisgICAgLTB4MS4wcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDg3NworICAgIDB4MS5mZWFhZWVlODZlZTM3YzYwN2VmYWU0N2RjYzA5MmMxY3AtNCwKKyAgICAweDEuZmMwMTU1MjdkNWJkMzY1YTkyMTg2YjIwMzUwN2Y5YWRwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODc4CisgICAgLTB4MS5mZWFhZWVlODZlZTM3YzYwN2VmYWU0N2RjYzA5MmMxY3AtNCwKKyAgICAweDEuZmMwMTU1MjdkNWJkMzY1YTkyMTg2YjIwMzUwN2Y5YWRwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDg3OQorICAgIDB4MS5mZmFhYWVlZWQ0ZWQ5YjUzYTQwOGMwZjJiYzAyYzhmOXAtNSwKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRkYTBiNzQ1ZGM3NDMzMTQ1ZWZwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgODgwCisgICAgLTB4MS5mZmFhYWVlZWQ0ZWQ5YjUzYTQwOGMwZjJiYzAyYzhmOXAtNSwKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRkYTBiNzQ1ZGM3NDMzMTQ1ZWZwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC01LAorICB9LAorICB7IC8vIEVudHJ5IDg4MQorICAgIDB4MS5mZmFhYWVlZWQ0ZWRhYjRiYTRiMzY1ZWQyNWE5NTk1ZnAtNSwKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRjYTBlMWVlNjUwOWJjNDJiNzFwLTEsCisgICAgMHgxLjBwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgODgyCisgICAgLTB4MS5mZmFhYWVlZWQ0ZWRhYjRiYTRiMzY1ZWQyNWE5NTk1ZnAtNSwKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRjYTBlMWVlNjUwOWJjNDJiNzFwLTEsCisgICAgLTB4MS4wcC00LAorICB9LAorICB7IC8vIEVudHJ5IDg4MworICAgIDB4MS5mZmFhYWVlZWQ0ZWRjYjNiYTYwOGFmZTFmOGY0ZmE2YnAtNSwKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRhYTEzNzNmNzYzNGNlODc3MzdwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgODg0CisgICAgLTB4MS5mZmFhYWVlZWQ0ZWRjYjNiYTYwOGFmZTFmOGY0ZmE2YnAtNSwKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRhYTEzNzNmNzYzNGNlODc3MzdwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC00LAorICB9LAorICB7IC8vIEVudHJ5IDg4NQorICAgIDB4MS5mZmVhYWFlZWVlODZkOGNjZmUzNjhjZDk1ZTM4ZjAwM3AtNiwKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxNmFlYjA5ZmI3MDYzNmExMGFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgODg2CisgICAgLTB4MS5mZmVhYWFlZWVlODZkOGNjZmUzNjhjZDk1ZTM4ZjAwM3AtNiwKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxNmFlYjA5ZmI3MDYzNmExMGFwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC02LAorICB9LAorICB7IC8vIEVudHJ5IDg4NworICAgIDB4MS5mZmVhYWFlZWVlODZlOGNhZmU0MTM3NmQ0NzkxOTU3OXAtNiwKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxMmFlZGI0OWQ5MjkyOGRmNzJwLTEsCisgICAgMHgxLjBwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgODg4CisgICAgLTB4MS5mZmVhYWFlZWVlODZlOGNhZmU0MTM3NmQ0NzkxOTU3OXAtNiwKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxMmFlZGI0OWQ5MjkyOGRmNzJwLTEsCisgICAgLTB4MS4wcC01LAorICB9LAorICB7IC8vIEVudHJ5IDg4OQorICAgIDB4MS5mZmVhYWFlZWVlODcwOGM2ZmU1NjhjOTUxYTQyODA2OXAtNiwKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIwYWFmMzA5ZTFkNmYwY2ZjNGVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgODkwCisgICAgLTB4MS5mZmVhYWFlZWVlODcwOGM2ZmU1NjhjOTUxYTQyODA2OXAtNiwKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIwYWFmMzA5ZTFkNmYwY2ZjNGVwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC01LAorICB9LAorICB7IC8vIEVudHJ5IDg5MQorICAgIDB4MS5mZmZhYWFhZWVlZWQzZWQ1YzljNWFiNjUzOGY5Y2NlMHAtNywKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMzhhMjU2M2VmMzQ0YzNmZjRwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTcsCisgIH0sCisgIHsgLy8gRW50cnkgODkyCisgICAgLTB4MS5mZmZhYWFhZWVlZWQzZWQ1YzljNWFiNjUzOGY5Y2NlMHAtNywKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMzhhMjU2M2VmMzQ0YzNmZjRwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC03LAorICB9LAorICB7IC8vIEVudHJ5IDg5MworICAgIDB4MS5mZmZhYWFhZWVlZWQ0ZWQ1NDljNjU2MGY4ODllZTUzMXAtNywKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMjhhMjgwZTk3YmNkNTljOGFwLTEsCisgICAgMHgxLjBwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgODk0CisgICAgLTB4MS5mZmZhYWFhZWVlZWQ0ZWQ1NDljNjU2MGY4ODllZTUzMXAtNywKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMjhhMjgwZTk3YmNkNTljOGFwLTEsCisgICAgLTB4MS4wcC02LAorICB9LAorICB7IC8vIEVudHJ5IDg5NQorICAgIDB4MS5mZmZhYWFhZWVlZWQ2ZWQ0NDljN2FiNjQyN2U4ZmRkNHAtNywKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMDhhMmQ2M2U4Y2RlODNkYjVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTYsCisgIH0sCisgIHsgLy8gRW50cnkgODk2CisgICAgLTB4MS5mZmZhYWFhZWVlZWQ2ZWQ0NDljN2FiNjQyN2U4ZmRkNHAtNywKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMDhhMmQ2M2U4Y2RlODNkYjVwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC02LAorICB9LAorICB7IC8vIEVudHJ5IDg5NworICAgIDB4MS5mZmZmZmZmYWFhYWE5YWFlZWVlZjZlZWQ0ZWQ0NDJhNHAtMTUsCisgICAgMHgxLmZmZmZmZmYwMDAwMDAwMTU1NTU2NTU0OWY0OWM5ZjRkcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTgKKyAgICAtMHgxLmZmZmZmZmZhYWFhYTlhYWVlZWVmNmVlZDRlZDQ0MmE0cC0xNSwKKyAgICAweDEuZmZmZmZmZjAwMDAwMDAxNTU1NTY1NTQ5ZjQ5YzlmNGRwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTkKKyAgICAweDEuZmZmZmZmZmFhYWFhYWFhZWVlZWVlZWVkNGVkNGVkNGZwLTE1LAorICAgIDB4MS5mZmZmZmZmMDAwMDAwMDE1NTU1NTU1NDlmNDlmNDlmN3AtMSwKKyAgICAweDEuMHAtMTQsCisgIH0sCisgIHsgLy8gRW50cnkgOTAwCisgICAgLTB4MS5mZmZmZmZmYWFhYWFhYWFlZWVlZWVlZWQ0ZWQ0ZWQ0ZnAtMTUsCisgICAgMHgxLmZmZmZmZmYwMDAwMDAwMTU1NTU1NTU0OWY0OWY0OWY3cC0xLAorICAgIC0weDEuMHAtMTQsCisgIH0sCisgIHsgLy8gRW50cnkgOTAxCisgICAgMHgxLmZmZmZmZmZhYWFhYWNhYWVlZWVkZWVlZDRlZDY0MmE0cC0xNSwKKyAgICAweDEuZmZmZmZmZjAwMDAwMDAxNTU1NTM1NTQ5ZjRhNDlmNGRwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTE0LAorICB9LAorICB7IC8vIEVudHJ5IDkwMgorICAgIC0weDEuZmZmZmZmZmFhYWFhY2FhZWVlZWRlZWVkNGVkNjQyYTRwLTE1LAorICAgIDB4MS5mZmZmZmZmMDAwMDAwMDE1NTU1MzU1NDlmNGE0OWY0ZHAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTE0LAorICB9LAorICB7IC8vIEVudHJ5IDkwMworICAgIDB4MS5mZmZmZmZmZmZmZmZlZWFhYWFhYWFhYWFhYWNhZWVlZXAtMjgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwNDE1NTU1cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0yOCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVlYWFhYWFhYWFhYWFhY2FlZWVlcC0yOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDA0MTU1NTVwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0yOCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmVhYWFhYWFhYWFhYWFhYWVlZWVwLTI4LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmYzAwMDAwMDAwMDAwMDAxNTU1NXAtMSwKKyAgICAweDEuMHAtMjcsCisgIH0sCisgIHsgLy8gRW50cnkgOTA2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZWFhYWFhYWFhYWFhYWFhZWVlZXAtMjgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDE1NTU1cC0xLAorICAgIC0weDEuMHAtMjcsCisgIH0sCisgIHsgLy8gRW50cnkgOTA3CisgICAgMHgxLjAwMDAwMDAwMDAwMDBmNTU1NTU1NTU1NTU1MzU3Nzc3cC0yNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmJmZmZmZmZmZmZmZmY4MTU1NTVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTI3LAorICB9LAorICB7IC8vIEVudHJ5IDkwOAorICAgIC0weDEuMDAwMDAwMDAwMDAwMGY1NTU1NTU1NTU1NTUzNTc3NzdwLTI3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmYmZmZmZmZmZmZmZmZjgxNTU1NXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTI3LAorICB9LAorICB7IC8vIEVudHJ5IDkwOQorICAgIDB4MS5mZmZmZmZmZmZmZmZlZmZhYWFhYWFhYWFhYWFiMmFhZXAtMzEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDEwMDE1cC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0zMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVmZmFhYWFhYWFhYWFhYWIyYWFlcC0zMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMTAwMTVwLTEsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0zMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmYWFhYWFhYWFhYWFhYWFhYWVwLTMxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmYwMDAwMDAwMDAwMDAwMDAxNXAtMSwKKyAgICAweDEuMHAtMzAsCisgIH0sCisgIHsgLy8gRW50cnkgOTEyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZhYWFhYWFhYWFhYWFhYWFhZXAtMzEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDE1cC0xLAorICAgIC0weDEuMHAtMzAsCisgIH0sCisgIHsgLy8gRW50cnkgOTEzCisgICAgMHgxLjAwMDAwMDAwMDAwMDBmZmQ1NTU1NTU1NTU1NTRkNTU3cC0zMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZlZmZmZmZmZmZmZmZmZTAwMTVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTMwLAorICB9LAorICB7IC8vIEVudHJ5IDkxNAorICAgIC0weDEuMDAwMDAwMDAwMDAwMGZmZDU1NTU1NTU1NTU1NGQ1NTdwLTMwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmVmZmZmZmZmZmZmZmZlMDAxNXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTMwLAorICB9LAorICB7IC8vIEVudHJ5IDkxNQorICAgIC0weDEuNDUyZmM5OGIzNGU5NmI2MTEzOWIwOWE3Yzg0YTQ0YmRwLTgsCisgICAgLTB4MS5mZmZlNjJlY2ZhYjc1M2MwNzFiMjY4MGUxZTI2YmJjZXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTYKKyAgICAweDEuNDUyZmM5OGIzNGU5NmI2MTEzOWIwOWE3Yzg0YTQ0YmRwLTgsCisgICAgLTB4MS5mZmZlNjJlY2ZhYjc1M2MwNzFiMjY4MGUxZTI2YmJjZXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzLAorICB9LAorICB7IC8vIEVudHJ5IDkxNworICAgIDB4MS40NTJmYzk4YjM0ZTk2YjYxMTM5YjA5YTdjODRhNDRiZHAtOCwKKyAgICAtMHgxLmZmZmU2MmVjZmFiNzUzYzA3MWIyNjgwZTFlMjZiYmNlcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgOTE4CisgICAgLTB4MS40NTJmYzk4YjM0ZTk2YjYxMTM5YjA5YTdjODRhNDRiZHAtOCwKKyAgICAtMHgxLmZmZmU2MmVjZmFiNzUzYzA3MWIyNjgwZTFlMjZiYmNlcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzLAorICB9LAorICB7IC8vIEVudHJ5IDkxOQorICAgIDB4MS40NTJmYzk4YjM0ZTk2YjYxMTM5YjA5YTdjODRhNDRiZHAtOCwKKyAgICAtMHgxLmZmZmU2MmVjZmFiNzUzYzA3MWIyNjgwZTFlMjZiYmNlcC0xLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgOTIwCisgICAgLTB4MS40NTJmYzk4YjM0ZTk2YjYxMTM5YjA5YTdjODRhNDRiZHAtOCwKKyAgICAtMHgxLmZmZmU2MmVjZmFiNzUzYzA3MWIyNjgwZTFlMjZiYmNlcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzLAorICB9LAorICB7IC8vIEVudHJ5IDkyMQorICAgIDB4MS5kYWEzNjc3YzZlZThhMjJlYjZjNGIxMmNhMTBjZTAyMXAtMSwKKyAgICAweDEuN2ZmZGZiNGM1MzA4Zjc3N2NmNzc0YzczM2IyNTY2OTVwLTIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjIKKyAgICAtMHgxLmRhYTM2NzdjNmVlOGEyMmViNmM0YjEyY2ExMGNlMDIxcC0xLAorICAgIDB4MS43ZmZkZmI0YzUzMDhmNzc3Y2Y3NzRjNzMzYjI1NjY5NXAtMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjMKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQzNmUyZWRwLTUzLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiMjIwYzVwLTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjQKKyAgICAtMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0MzZlMmVkcC01MywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYjIyMGM1cC0xLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDkyNQorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMXAtMSwKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ0MTlmYThwLTU0LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgOTI2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVjODgzMXAtMSwKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ0MTlmYThwLTU0LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDkyNworICAgIDB4MS5hZWQ1NDhmMDkwY2VmMThiYjVlMzg3MWExNGQ5NDYwOXAtMSwKKyAgICAweDEuMTRhMjgwZmI1MDY4OWUzNjJmZmRkMjIxZTI1NTEwMzVwLTEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjgKKyAgICAtMHgxLmFlZDU0OGYwOTBjZWYxOGJiNWUzODcxYTE0ZDk0NjA5cC0xLAorICAgIDB4MS4xNGEyODBmYjUwNjg5ZTM2MmZmZGQyMjFlMjU1MTAzNXAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjkKKyAgICAweDEuYWVkNTQ4ZjA5MGNlZTA0MThkZDNkMjEzOGExZTc4NjVwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIDB4MS4wcDAsCisgIH0sCisgIHsgLy8gRW50cnkgOTMwCisgICAgLTB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAweDEuMTRhMjgwZmI1MDY4YjkyMzg0OGNkYjJlZDBlMzdhNTNwLTEsCisgICAgLTB4MS4wcDAsCisgIH0sCisgIHsgLy8gRW50cnkgOTMxCisgICAgMHgxLmFlZDU0OGYwOTBjZWQ3OWM3OWNiZjc5MDQ0MWY4MTk3cC0xLAorICAgIDB4MS4xNGEyODBmYjUwNjhjNjlhMmVkNDVmYjU0N2MyZjI3MXAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzIKKyAgICAtMHgxLmFlZDU0OGYwOTBjZWQ3OWM3OWNiZjc5MDQ0MWY4MTk3cC0xLAorICAgIDB4MS4xNGEyODBmYjUwNjhjNjlhMmVkNDVmYjU0N2MyZjI3MXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgOTMzCisgICAgMHgxLjZhMDllNjY3ZjNiY2M1ZTlmZWUzNTJmNTBmZDNmNGU5cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjYzI3NjcxMmQzZDhjNTUwMjM4N3AtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzQKKyAgICAtMHgxLjZhMDllNjY3ZjNiY2M1ZTlmZWUzNTJmNTBmZDNmNGU5cC0xLAorICAgIDB4MS42YTA5ZTY2N2YzYmNjYzI3NjcxMmQzZDhjNTUwMjM4N3AtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgOTM1CisgICAgMHgxLjAwMDAwMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAyMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzYKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDBmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIsCisgIH0sCisgIHsgLy8gRW50cnkgOTM3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTAyMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzgKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwMjIsCisgIH0sCisgIHsgLy8gRW50cnkgOTM5CisgICAgMHgxLmZmZmZmZmZmZmZmZmRmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZXAtMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmRmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgOTQxCisgICAgMHgxLmZmZmZmZmZmZmZmZmJmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmY3AtMTAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmJmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmNwLTEwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgOTQzCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDc0LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3MywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMDc0LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzMsCisgIH0sCisgIHsgLy8gRW50cnkgOTQ1CisgICAgMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMHAtMTA3NCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDYKKyAgICAtMC4wLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLjBwLTEwNzQsCisgIH0sCisgIHsgLy8gRW50cnkgOTQ3CisgICAgMC4wLAorICAgIDB4MS5wMCwKKyAgICAwLjAsCisgIH0sCisgIHsgLy8gRW50cnkgOTQ4CisgICAgLTAuMCwKKyAgICAweDEucDAsCisgICAgLTAuMCwKKyAgfSwKK307CisjZW5kaWYgLy8gX19CSU9OSUNfXworCitURVNUKG1hdGhfc2luY29zLCBzaW5jb3NfaW50ZWwpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKGdfc2luY29zX2ludGVsX2RhdGEpL3NpemVvZihzaW5jb3NfaW50ZWxfZGF0YV90KTsgaSsrKSB7CisgICBkb3VibGUgZHNpbiwgZGNvczsKKyAgIHNpbmNvcyhnX3NpbmNvc19pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSwgJmRzaW4sICZkY29zKTsKKyAgIEVYUEVDVF9ET1VCTEVfRVEoZ19zaW5jb3NfaW50ZWxfZGF0YVtpXS5zaW5fZXhwZWN0ZWQsIGRzaW4pIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgICBFWFBFQ1RfRE9VQkxFX0VRKGdfc2luY29zX2ludGVsX2RhdGFbaV0uY29zX2V4cGVjdGVkLCBkY29zKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOworICB9CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCit9CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX3NpbmNvc2ZfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX3NpbmNvc2ZfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFhMzJjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21hdGhfc2luY29zZl90ZXN0LmNwcApAQCAtMCwwICsxLDQ2NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgZmxvYXQgc2luX2V4cGVjdGVkOworICBmbG9hdCBjb3NfZXhwZWN0ZWQ7CisgIGZsb2F0IGNhbGxfZGF0YTsKK30gc2luY29zZl9pbnRlbF9kYXRhX3Q7CisKK3N0YXRpYyBzaW5jb3NmX2ludGVsX2RhdGFfdCBnX3NpbmNvc2ZfaW50ZWxfZGF0YVtdID0geworICB7IC8vIEVudHJ5IDAKKyAgICAtMHgxLmI2YTdhYmZmYWY1OWE1YWMxODFlM2UxYWJmOTYxNjk4cC0xLAorICAgIDB4MS4wODBlNzRjMTE2ODYzY2ZhYjgyYTBmZDU5YzcxYjM2M3AtMSwKKyAgICAtMHgxLjA3NjhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxCisgICAgMHgxLmI2YTdhYmZmYWY1OWE1YWMxODFlM2UxYWJmOTYxNjk4cC0xLAorICAgIDB4MS4wODBlNzRjMTE2ODYzY2ZhYjgyYTBmZDU5YzcxYjM2M3AtMSwKKyAgICAweDEuMDc2OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDIKKyAgICAweDEuNzYyZGE2NjQ4ZmRlMDBlMzk4NDYyZTcxNjMwOTRkNTJwLTIsCisgICAgMHgxLmRjOTgwMmZmZmZmZmUwY2JmYzU3ZWYyODdkM2M4M2FmcC0xLAorICAgIC0weDEuOGYyMTljcDUsCisgIH0sCisgIHsgLy8gRW50cnkgMworICAgIC0weDEuNzYyZGE2NjQ4ZmRlMDBlMzk4NDYyZTcxNjMwOTRkNTJwLTIsCisgICAgMHgxLmRjOTgwMmZmZmZmZmUwY2JmYzU3ZWYyODdkM2M4M2FmcC0xLAorICAgIDB4MS44ZjIxOWNwNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0CisgICAgLTB4MS40OTNiNmE3ZDNmNWI3YmY2NmZhMzJhMDE1MTVkNmM0M3AtMSwKKyAgICAtMHgxLjg4MWMyNmZkMjVkMGJmNmQ2ZWEzODcwOGEwOTc2YjM1cC0xLAorICAgIC0weDEuZDNhNTFhcDgwLAorICB9LAorICB7IC8vIEVudHJ5IDUKKyAgICAweDEuNDkzYjZhN2QzZjViN2JmNjZmYTMyYTAxNTE1ZDZjNDNwLTEsCisgICAgLTB4MS44ODFjMjZmZDI1ZDBiZjZkNmVhMzg3MDhhMDk3NmIzNXAtMSwKKyAgICAweDEuZDNhNTFhcDgwLAorICB9LAorICB7IC8vIEVudHJ5IDYKKyAgICAtMHgxLmUwZDFkYzAwNmU4NTgzNWIwMzk0YWJlOTdkZTc3ZmJjcC00LAorICAgIDB4MS5mYzc1Y2E2MzEzZWY3NjYwMTJkYjNjYTk5YTFhNTJkMXAtMSwKKyAgICAtMHgxLmUxZWU1MnAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3CisgICAgMHgxLmUwZDFkYzAwNmU4NTgzNWIwMzk0YWJlOTdkZTc3ZmJjcC00LAorICAgIDB4MS5mYzc1Y2E2MzEzZWY3NjYwMTJkYjNjYTk5YTFhNTJkMXAtMSwKKyAgICAweDEuZTFlZTUycC00LAorICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICAtMHgxLjJiNmE5Y2EzZGY2MjJlZmUyYWEzMTU0YTYzNTJiYzcwcC0xLAorICAgIC0weDEuOWY1MmRlZjU1ZDg5ZTkyZTdkZjIwZWMyMTE2MWRlYjhwLTEsCisgICAgLTB4MS5mM2ZmZTJwMjQsCisgIH0sCisgIHsgLy8gRW50cnkgOQorICAgIDB4MS4yYjZhOWNhM2RmNjIyZWZlMmFhMzE1NGE2MzUyYmM3MHAtMSwKKyAgICAtMHgxLjlmNTJkZWY1NWQ4OWU5MmU3ZGYyMGVjMjExNjFkZWI4cC0xLAorICAgIDB4MS5mM2ZmZTJwMjQsCisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAweDEuYTM0MjJhZjEzYjJjZmI3OGQwY2M0NThkOWFjNmJkZTlwLTEsCisgICAgLTB4MS4yNWUxYWExZDkzODNjMWYyNzAyN2NmNjliNjk0NzdmZHAtMSwKKyAgICAtMHgxLmZmMjExZXAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIC0weDEuYTM0MjJhZjEzYjJjZmI3OGQwY2M0NThkOWFjNmJkZTlwLTEsCisgICAgLTB4MS4yNWUxYWExZDkzODNjMWYyNzAyN2NmNjliNjk0NzdmZHAtMSwKKyAgICAweDEuZmYyMTFlcDI0LAorICB9LAorICB7IC8vIEVudHJ5IDEyCisgICAgMHgxLmZmZmZmZmFhYWFhYWFlZWVlZWVlZDRlZDRlZDU0OWM2cC0xMywKKyAgICAweDEuZmZmZmZmMDAwMDAwMTU1NTU1NTQ5ZjQ5ZjRhMjhhMjhwLTEsCisgICAgMHgxLnAtMTIsCisgIH0sCisgIHsgLy8gRW50cnkgMTMKKyAgICAtMHgxLmZmZmZmZmFhYWFhYWFlZWVlZWVlZDRlZDRlZDU0OWM2cC0xMywKKyAgICAweDEuZmZmZmZmMDAwMDAwMTU1NTU1NTQ5ZjQ5ZjRhMjhhMjhwLTEsCisgICAgLTB4MS5wLTEyLAorICB9LAorICB7IC8vIEVudHJ5IDE0CisgICAgMHgxLjAwMDAwMWQ1NTU1NDU3Nzc3NThjYmZjYWZjMDllZjdlcC0xMiwKKyAgICAweDEuZmZmZmZlZmZmZmZjMTU1NTUxZmY0OWY2OTZjNGFlY2FwLTEsCisgICAgMHgxLjAwMDAwMnAtMTIsCisgIH0sCisgIHsgLy8gRW50cnkgMTUKKyAgICAtMHgxLjAwMDAwMWQ1NTU1NDU3Nzc3NThjYmZjYWZjMDllZjdlcC0xMiwKKyAgICAweDEuZmZmZmZlZmZmZmZjMTU1NTUxZmY0OWY2OTZjNGFlY2FwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEyLAorICB9LAorICB7IC8vIEVudHJ5IDE2CisgICAgMHgxLjAwMDAwMWZmZmZmZmZmZmZkNTU1NTQ1NTU1NTM1NTU1cC0zMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZWZmZmZmYmZmZmZmY3AtMSwKKyAgICAweDEuMDAwMDAycC0zMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNworICAgIC0weDEuMDAwMDAxZmZmZmZmZmZmZmQ1NTU1NDU1NTU1MzU1NTVwLTMyLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZlZmZmZmZiZmZmZmZjcC0xLAorICAgIC0weDEuMDAwMDAycC0zMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOAorICAgIDB4MS5lYWYwZDUwMDhmMmRiODk5ZTI0ODdkYTlkM2I5Y2RlN3AtMiwKKyAgICAweDEuYzE1MWRmNGYxMmIxOTdhNjY1YTI5MDdlNDkzM2ExZWZwLTEsCisgICAgMHgxLjAwMDE1MHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOQorICAgIC0weDEuZWFmMGQ1MDA4ZjJkYjg5OWUyNDg3ZGE5ZDNiOWNkZTdwLTIsCisgICAgMHgxLmMxNTFkZjRmMTJiMTk3YTY2NWEyOTA3ZTQ5MzNhMWVmcC0xLAorICAgIC0weDEuMDAwMTUwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIwCisgICAgMHgxLmVhZjc3ZWZmZjY1OTAyMWJjODI3YmJkNTY5NmFkMTllcC0yLAorICAgIDB4MS5jMTUwMGQ0OTRlZDJjYzUwMDJjMjdjYzVjYTNkOTZmOHAtMSwKKyAgICAweDEuMDAwNTFjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIxCisgICAgLTB4MS5lYWY3N2VmZmY2NTkwMjFiYzgyN2JiZDU2OTZhZDE5ZXAtMiwKKyAgICAweDEuYzE1MDBkNDk0ZWQyY2M1MDAyYzI3Y2M1Y2EzZDk2ZjhwLTEsCisgICAgLTB4MS4wMDA1MWNwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjIKKyAgICAtMHgxLjVhYTUzYzFjMTMxN2YzMGI0YzEwODcyMmUyYjY0NjEycC0xLAorICAgIDB4MS43OGNkYjZmZmE2YmZmODk5ZTE3MjNlZDAxMzljNDhjYnAtMSwKKyAgICAweDEuMDAwZmRlcDgwLAorICB9LAorICB7IC8vIEVudHJ5IDIzCisgICAgMHgxLjVhYTUzYzFjMTMxN2YzMGI0YzEwODcyMmUyYjY0NjEycC0xLAorICAgIDB4MS43OGNkYjZmZmE2YmZmODk5ZTE3MjNlZDAxMzljNDhjYnAtMSwKKyAgICAtMHgxLjAwMGZkZXA4MCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNAorICAgIDB4MS5hZWYzODgyMmU2NDMxMTQ0NTU0NTk4MGZiYzViNTZmYXAtMSwKKyAgICAweDEuMTQ3MzVmZmZkNTUxMjBhNDQ4MGI3YzkxYTFkNzhkNmVwLTEsCisgICAgMHgxLjAwMWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNQorICAgIC0weDEuYWVmMzg4MjJlNjQzMTE0NDU1NDU5ODBmYmM1YjU2ZmFwLTEsCisgICAgMHgxLjE0NzM1ZmZmZDU1MTIwYTQ0ODBiN2M5MWExZDc4ZDZlcC0xLAorICAgIC0weDEuMDAxY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDI2CisgICAgLTB4MS43ZTEyYWVlMGM4NjJiMTcwOWJkNTAyMDViYmEzMjE2N3AtMSwKKyAgICAtMHgxLjU0ZDQyOTAwMTBhNjg4MjZhODgyZTdjODdkNjY5NGQycC0xLAorICAgIDB4MS4wMDI3YjhwNDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjcKKyAgICAweDEuN2UxMmFlZTBjODYyYjE3MDliZDUwMjA1YmJhMzIxNjdwLTEsCisgICAgLTB4MS41NGQ0MjkwMDEwYTY4ODI2YTg4MmU3Yzg3ZDY2OTRkMnAtMSwKKyAgICAtMHgxLjAwMjdiOHA0MCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIC0weDEuYmQ2OTQ0ZWY0ZGQxYjQzOTYyZTJkMzQ4MDQxMGZkODdwLTEsCisgICAgMHgxLmY4ZmM4ZWZmZjY3ZDgzNGY2ODc4YWI0ZTQ0ZmE4OWI1cC0yLAorICAgIDB4MS4wMDQ4NDBwNjgsCisgIH0sCisgIHsgLy8gRW50cnkgMjkKKyAgICAweDEuYmQ2OTQ0ZWY0ZGQxYjQzOTYyZTJkMzQ4MDQxMGZkODdwLTEsCisgICAgMHgxLmY4ZmM4ZWZmZjY3ZDgzNGY2ODc4YWI0ZTQ0ZmE4OWI1cC0yLAorICAgIC0weDEuMDA0ODQwcDY4LAorICB9LAorICB7IC8vIEVudHJ5IDMwCisgICAgMHgxLmY0ZTIzZTAwMTY1YTQ5MDdhNjU2YTdjZjUzMmJiZGU0cC0yLAorICAgIDB4MS5iZTkxNjAxZTQ3YmVkNmQ0NWU4MzcyNjg3YjM3M2MwY3AtMSwKKyAgICAweDEuMDViMHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMQorICAgIC0weDEuZjRlMjNlMDAxNjVhNDkwN2E2NTZhN2NmNTMyYmJkZTRwLTIsCisgICAgMHgxLmJlOTE2MDFlNDdiZWQ2ZDQ1ZTgzNzI2ODdiMzczYzBjcC0xLAorICAgIC0weDEuMDViMHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMgorICAgIDB4MS5iNmE3YWJmZmFmNTlhNWFjMTgxZTNlMWFiZjk2MTY5OHAtMSwKKyAgICAweDEuMDgwZTc0YzExNjg2M2NmYWI4MmEwZmQ1OWM3MWIzNjNwLTEsCisgICAgMHgxLjA3NjhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMworICAgIC0weDEuYjZhN2FiZmZhZjU5YTVhYzE4MWUzZTFhYmY5NjE2OThwLTEsCisgICAgMHgxLjA4MGU3NGMxMTY4NjNjZmFiODJhMGZkNTljNzFiMzYzcC0xLAorICAgIC0weDEuMDc2OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDM0CisgICAgMHgxLmJjYjhhYWZmZmZmZDY5ZDI4NjVhYWYzZjRjNTA3NGU4cC0xLAorICAgIDB4MS5mYjY5YTZkYzUxM2JjYmE1OWQ1ZGM2OGQzZDU5YTA1Y3AtMiwKKyAgICAweDEuMGQ2N2E0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzUKKyAgICAtMHgxLmJjYjhhYWZmZmZmZDY5ZDI4NjVhYWYzZjRjNTA3NGU4cC0xLAorICAgIDB4MS5mYjY5YTZkYzUxM2JjYmE1OWQ1ZGM2OGQzZDU5YTA1Y3AtMiwKKyAgICAtMHgxLjBkNjdhNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgMHgxLmJmNjgzY2ZmZmZlYzZlODY3MmE0OWYwOGFhZTQ5YzQ2cC0xLAorICAgIDB4MS5mMWUwZjY1M2Q2OTU5NzdjY2QyNDBmZjZiOTI5NzM5M3AtMiwKKyAgICAweDEuMTAyNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDM3CisgICAgLTB4MS5iZjY4M2NmZmZmZWM2ZTg2NzJhNDlmMDhhYWU0OWM0NnAtMSwKKyAgICAweDEuZjFlMGY2NTNkNjk1OTc3Y2NkMjQwZmY2YjkyOTczOTNwLTIsCisgICAgLTB4MS4xMDI0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAweDEuOGIxZThlMWMxNmE4ZDk3MGE3OGEyMzkxZWVhNjU3NWNwLTEsCisgICAgLTB4MS40NTlkNDUwMDAwMDA5MmI0YjgzMDdjNjUyZWU2MzlhN3AtMSwKKyAgICAweDEuMjE0OTdlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMzkKKyAgICAtMHgxLjhiMWU4ZTFjMTZhOGQ5NzBhNzhhMjM5MWVlYTY1NzVjcC0xLAorICAgIC0weDEuNDU5ZDQ1MDAwMDAwOTJiNGI4MzA3YzY1MmVlNjM5YTdwLTEsCisgICAgLTB4MS4yMTQ5N2VwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MAorICAgIDB4MS42OTkxZTBmZmU3ZjljOWIzZWY3YjMwMTdkMjM2MzlmYXAtMSwKKyAgICAtMHgxLjZhODFjNDEzM2RiNzNlMjc2Yzg5ZTcyNGM2ZmU5NzVicC0xLAorICAgIDB4MS4yZGMyMzBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MQorICAgIC0weDEuNjk5MWUwZmZlN2Y5YzliM2VmN2IzMDE3ZDIzNjM5ZmFwLTEsCisgICAgLTB4MS42YTgxYzQxMzNkYjczZTI3NmM4OWU3MjRjNmZlOTc1YnAtMSwKKyAgICAtMHgxLjJkYzIzMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQyCisgICAgMHgxLjQxZjZiZDAwMDBkMTNiYTJiZDdhNjNiZjZkOTUwODY1cC0xLAorICAgIC0weDEuOGUxOTdmZTRmYWM5OTAxZGMwN2EyODc4YmFmMTVjN2FwLTEsCisgICAgMHgxLjM0NDI0OHAxOCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MworICAgIC0weDEuNDFmNmJkMDAwMGQxM2JhMmJkN2E2M2JmNmQ5NTA4NjVwLTEsCisgICAgLTB4MS44ZTE5N2ZlNGZhYzk5MDFkYzA3YTI4NzhiYWYxNWM3YXAtMSwKKyAgICAtMHgxLjM0NDI0OHAxOCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NAorICAgIDB4MS4zN2Y4ZGVmZmZmZmY2MWNhMTVjMzY2YjNhZGQ4ZjM3M3AtMSwKKyAgICAtMHgxLjk1ZmEyMGQyMzBmZGY5ZThjY2NjNTkyMWU2MWYwM2FkcC0xLAorICAgIDB4MS4zZTQycDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDUKKyAgICAtMHgxLjM3ZjhkZWZmZmZmZjYxY2ExNWMzNjZiM2FkZDhmMzczcC0xLAorICAgIC0weDEuOTVmYTIwZDIzMGZkZjllOGNjY2M1OTIxZTYxZjAzYWRwLTEsCisgICAgLTB4MS4zZTQycDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDYKKyAgICAweDEuMmVkN2NlNTE4ZjQ2NjBjY2U0OTU1Njg1Njc4NDk3MGNwLTEsCisgICAgMHgxLjljZDRmMzAwMDAwMjI2NGFmMmIzMmViZTVkODI0M2MwcC0xLAorICAgIDB4MS40NDBjM2FwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDcKKyAgICAtMHgxLjJlZDdjZTUxOGY0NjYwY2NlNDk1NTY4NTY3ODQ5NzBjcC0xLAorICAgIDB4MS45Y2Q0ZjMwMDAwMDIyNjRhZjJiMzJlYmU1ZDgyNDNjMHAtMSwKKyAgICAtMHgxLjQ0MGMzYXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OAorICAgIDB4MS40NzVmYzkzNzc1MGJkZjJmNzA0MTc3NjEyZDMxZGMxZnAtMSwKKyAgICAweDEuODlhOTk5MDAwMDEyYzA0N2U0YjI0MTgxZDYxNTg2NDBwLTEsCisgICAgMHgxLjYzMmY2YXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OQorICAgIC0weDEuNDc1ZmM5Mzc3NTBiZGYyZjcwNDE3NzYxMmQzMWRjMWZwLTEsCisgICAgMHgxLjg5YTk5OTAwMDAxMmMwNDdlNGIyNDE4MWQ2MTU4NjQwcC0xLAorICAgIC0weDEuNjMyZjZhcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDUwCisgICAgLTB4MS44YWNlMWNmY2MwYTc2NmIzNWQwZThmNDhmMzE2OWU4YXAtMSwKKyAgICAtMHgxLjQ1ZmVjOTVhNDA2MTk4MTllMzMwN2FlYmUwY2I1ZTg5cC0xLAorICAgIDB4MS42ZThmMThwMjQsCisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAweDEuOGFjZTFjZmNjMGE3NjZiMzVkMGU4ZjQ4ZjMxNjllOGFwLTEsCisgICAgLTB4MS40NWZlYzk1YTQwNjE5ODE5ZTMzMDdhZWJlMGNiNWU4OXAtMSwKKyAgICAtMHgxLjZlOGYxOHAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MgorICAgIDB4MS43YzZiOTJmZjI0ZmYwMjhlYTM1YzQ1OWU1ZWJlYjJjZHAtMSwKKyAgICAweDEuNTZhYzJhZTU0Y2M5YTUyMTBhZTY3M2VhMWNlMzFkNDdwLTEsCisgICAgMHgxLjc5NTg0MHAyMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MworICAgIC0weDEuN2M2YjkyZmYyNGZmMDI4ZWEzNWM0NTllNWViZWIyY2RwLTEsCisgICAgMHgxLjU2YWMyYWU1NGNjOWE1MjEwYWU2NzNlYTFjZTMxZDQ3cC0xLAorICAgIC0weDEuNzk1ODQwcDIzLAorICB9LAorICB7IC8vIEVudHJ5IDU0CisgICAgMHgxLjY5N2NmNGZmZWE5MjQ0ZTg1Y2VhNjQwZDEzYzZmYmI1cC0xLAorICAgIC0weDEuNmE5NmExMDZhY2UyMTYxMGFiNTI5YzkwNDdjN2U2ZTJwLTEsCisgICAgMHgxLjdmZTdmZXAzNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NQorICAgIC0weDEuNjk3Y2Y0ZmZlYTkyNDRlODVjZWE2NDBkMTNjNmZiYjVwLTEsCisgICAgLTB4MS42YTk2YTEwNmFjZTIxNjEwYWI1MjljOTA0N2M3ZTZlMnAtMSwKKyAgICAtMHgxLjdmZTdmZXAzNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NgorICAgIDB4MS45YzZjZjJmZmZmZmU4NTg4NTEyZWEzYzgwOGIwZmE5ZnAtMSwKKyAgICAweDEuMmY2NTYwZTBmMTRjZDVkNjg5MjBiZWMwZTBjMjUzNTRwLTEsCisgICAgMHgxLmNlMTAyNnAyLAorICB9LAorICB7IC8vIEVudHJ5IDU3CisgICAgLTB4MS45YzZjZjJmZmZmZmU4NTg4NTEyZWEzYzgwOGIwZmE5ZnAtMSwKKyAgICAweDEuMmY2NTYwZTBmMTRjZDVkNjg5MjBiZWMwZTBjMjUzNTRwLTEsCisgICAgLTB4MS5jZTEwMjZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OAorICAgIC0weDEuMDdmYWMwNGM2ZTczZjQ4NTA5NmJkYWEzZTY1MDQ0ZDlwLTEsCisgICAgLTB4MS5iNmIzODdmZmNlYjY3YTE4YzE1ZTg2ODU1MGI5NjQ2MnAtMSwKKyAgICAweDEuZDc3NWQwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAweDEuMDdmYWMwNGM2ZTczZjQ4NTA5NmJkYWEzZTY1MDQ0ZDlwLTEsCisgICAgLTB4MS5iNmIzODdmZmNlYjY3YTE4YzE1ZTg2ODU1MGI5NjQ2MnAtMSwKKyAgICAtMHgxLmQ3NzVkMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDYwCisgICAgMHgxLjlhOGM2MmY0YjJhOTQ5YjA2OTI0NjYyZDk0MzZiZjE3cC0xLAorICAgIDB4MS4zMWVlNzA3NGUzZWJjNWEzMGYwMDkyZWM2YzVkOGI4MHAtMSwKKyAgICAweDEuZGZlYWFhcDEwOCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MQorICAgIC0weDEuOWE4YzYyZjRiMmE5NDliMDY5MjQ2NjJkOTQzNmJmMTdwLTEsCisgICAgMHgxLjMxZWU3MDc0ZTNlYmM1YTMwZjAwOTJlYzZjNWQ4YjgwcC0xLAorICAgIC0weDEuZGZlYWFhcDEwOCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MgorICAgIDB4MS5kNGRlOGFmZmZmZmZkOTZmODNiYTQ0MmZkZjJmNzEwMXAtMiwKKyAgICAweDEuYzcyY2Q0ZTFkNmM3ODU0N2QzMTcwN2JlODBiNGIwYWVwLTEsCisgICAgMHgxLmU3MDYxZXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MworICAgIC0weDEuZDRkZThhZmZmZmZmZDk2ZjgzYmE0NDJmZGYyZjcxMDFwLTIsCisgICAgMHgxLmM3MmNkNGUxZDZjNzg1NDdkMzE3MDdiZTgwYjRiMGFlcC0xLAorICAgIC0weDEuZTcwNjFlcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDY0CisgICAgLTB4MS40ODM0NDVkNDE5NDgxMzE2OGExYWM2M2VlZTE5NDNmOXAtMSwKKyAgICAweDEuODhmODgyZmNiYzgxZmZkZjcyMGE0YmIxYjJmY2E3MWRwLTEsCisgICAgMHgxLmU4OWIyYXA4MCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NQorICAgIDB4MS40ODM0NDVkNDE5NDgxMzE2OGExYWM2M2VlZTE5NDNmOXAtMSwKKyAgICAweDEuODhmODgyZmNiYzgxZmZkZjcyMGE0YmIxYjJmY2E3MWRwLTEsCisgICAgLTB4MS5lODliMmFwODAsCisgIH0sCisgIHsgLy8gRW50cnkgNjYKKyAgICAweDEuNTY1ZTQxMDAxNDkxNmZhNjU1MGU2MDZlZDU4OGM2YjhwLTEsCisgICAgMHgxLjdjYjFiMzRhZjg1NTg5YmRhZjdjMDc5M2FmMzBiNjgycC0xLAorICAgIDB4MS5mZTgyNzBwMTgsCisgIH0sCisgIHsgLy8gRW50cnkgNjcKKyAgICAtMHgxLjU2NWU0MTAwMTQ5MTZmYTY1NTBlNjA2ZWQ1ODhjNmI4cC0xLAorICAgIDB4MS43Y2IxYjM0YWY4NTU4OWJkYWY3YzA3OTNhZjMwYjY4MnAtMSwKKyAgICAtMHgxLmZlODI3MHAxOCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OAorICAgIC0weDEuODM1NmZiYWVhMDQ1NGJjZTM5ODNkOWEwZTAyNTBjNTVwLTEsCisgICAgLTB4MS40ZWQ0YzVmZmM4MDE4NzQxODcwOTQ5NzY3ZmY4ZGFmYXAtMSwKKyAgICAweDEuZmZmMWZlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjkKKyAgICAweDEuODM1NmZiYWVhMDQ1NGJjZTM5ODNkOWEwZTAyNTBjNTVwLTEsCisgICAgLTB4MS40ZWQ0YzVmZmM4MDE4NzQxODcwOTQ5NzY3ZmY4ZGFmYXAtMSwKKyAgICAtMHgxLmZmZjFmZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDcwCisgICAgMHgxLmZhOWQ2YmZiMzNhNzdiMmUzYjMyODkxNjhjZWQ2ZGNhcC0xLAorICAgIC0weDEuMjg0MDZhMDAyNTU0NWM5YTU2OGRhY2Q0NTUxOGRkNjVwLTMsCisgICAgMHgxLmZmZjFmZXAyLAorICB9LAorICB7IC8vIEVudHJ5IDcxCisgICAgLTB4MS5mYTlkNmJmYjMzYTc3YjJlM2IzMjg5MTY4Y2VkNmRjYXAtMSwKKyAgICAtMHgxLjI4NDA2YTAwMjU1NDVjOWE1NjhkYWNkNDU1MThkZDY1cC0zLAorICAgIC0weDEuZmZmMWZlcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNzIKKyAgICAweDEuZDE4Zjc2ZmZjNmU0YmEwYTMxMzRlNWJlMjFiNWJjOGZwLTEsCisgICAgLTB4MS5hYTIyNDExNjAyMjc4OTZjNjhlZjE3ODM5ZjE3ZGNlNXAtMiwKKyAgICAweDEuZmZmZmY2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAtMHgxLmQxOGY3NmZmYzZlNGJhMGEzMTM0ZTViZTIxYjViYzhmcC0xLAorICAgIC0weDEuYWEyMjQxMTYwMjI3ODk2YzY4ZWYxNzgzOWYxN2RjZTVwLTIsCisgICAgLTB4MS5mZmZmZjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NAorICAgIDB4MS5mZmZmZmFhYWFhYjJlZWVlZGMzZGMzZjFlZTdiNDFmZXAtMTIsCisgICAgMHgxLmZmZmZmYzAwMDAxMTU1NTUzYTdkMjdmNGEyODlmMzE5cC0xLAorICAgIDB4MS5mZmZmZmNwLTEyLAorICB9LAorICB7IC8vIEVudHJ5IDc1CisgICAgLTB4MS5mZmZmZmFhYWFhYjJlZWVlZGMzZGMzZjFlZTdiNDFmZXAtMTIsCisgICAgMHgxLmZmZmZmYzAwMDAxMTU1NTUzYTdkMjdmNGEyODlmMzE5cC0xLAorICAgIC0weDEuZmZmZmZjcC0xMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NgorICAgIC0wLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5LAorICB9LAorICB7IC8vIEVudHJ5IDc3CisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ5LAorICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgMC4wLAorICAgIDB4MS5wMCwKKyAgICAwLjAsCisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xNDksCisgIH0sCisgIHsgLy8gRW50cnkgODAKKyAgICAtMC4wZiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTE0OSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MQorICAgIC0weDEuMDAwMDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MgorICAgIDB4MS4wMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI2LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuMDAwMDAycC0xMjYsCisgIH0sCisgIHsgLy8gRW50cnkgODMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xMjYsCisgIH0sCisgIHsgLy8gRW50cnkgODQKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTI2LAorICB9LAorICB7IC8vIEVudHJ5IDg1CisgICAgLTB4MS5mZmZmZmJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLmZmZmZmY3AtMTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg2CisgICAgMHgxLmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmNwLTEyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NworICAgIDB4MS5mZmZmZmJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEuZmZmZmZjcC0xMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODgKKyAgICAtMHgxLmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZjcC0xMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODkKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTI2LAorICB9LAorICB7IC8vIEVudHJ5IDkwCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTI2LAorICB9LAorICB7IC8vIEVudHJ5IDkxCisgICAgMHgxLjAwMDAwMWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wMDAwMDJwLTEyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MgorICAgIC0weDEuMDAwMDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS4wMDAwMDJwLTEyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MworICAgIDB4MS45OTk5OTlkNDRmMzA1OGM3ODkwMTRiN2QwZTIyZmVjM3AtMTMsCisgICAgMHgxLmZmZmZmZjVjMjhmNTc5NjBjZDU2ZWJmZTk0ODJhNjFmcC0xLAorICAgIDB4MS45OTk5OWFwLTEzLAorICB9LAorICB7IC8vIEVudHJ5IDk0CisgICAgLTB4MS45OTk5OTlkNDRmMzA1OGM3ODkwMTRiN2QwZTIyZmVjM3AtMTMsCisgICAgMHgxLmZmZmZmZjVjMjhmNTc5NjBjZDU2ZWJmZTk0ODJhNjFmcC0xLAorICAgIC0weDEuOTk5OTlhcC0xMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NQorICAgIDB4MS45OTk5OTk1MTNjYzE3M2U1MWJiOTk1NWIwNjZmMWRiOHAtMTIsCisgICAgMHgxLmZmZmZmZDcwYTNkNjRlNWVjMTY1Y2Q0MzA3YWQxMzI2cC0xLAorICAgIDB4MS45OTk5OWFwLTEyLAorICB9LAorICB7IC8vIEVudHJ5IDk2CisgICAgLTB4MS45OTk5OTk1MTNjYzE3M2U1MWJiOTk1NWIwNjZmMWRiOHAtMTIsCisgICAgMHgxLmZmZmZmZDcwYTNkNjRlNWVjMTY1Y2Q0MzA3YWQxMzI2cC0xLAorICAgIC0weDEuOTk5OTlhcC0xMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NworICAgIDB4MS4zMzMzMzJkOTE2ODUzMjFlNWZjMzk3ZDIwYTVhZjFlNnAtMTEsCisgICAgMHgxLmZmZmZmYTNkNzA5ZWVjYmZiNWEzODViMGYzZTBjYjhmcC0xLAorICAgIDB4MS4zMzMzMzRwLTExLAorICB9LAorICB7IC8vIEVudHJ5IDk4CisgICAgLTB4MS4zMzMzMzJkOTE2ODUzMjFlNWZjMzk3ZDIwYTVhZjFlNnAtMTEsCisgICAgMHgxLmZmZmZmYTNkNzA5ZWVjYmZiNWEzODViMGYzZTBjYjhmcC0xLAorICAgIC0weDEuMzMzMzM0cC0xMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OQorICAgIDB4MS45OTk5OTc0NGYzMDZkYzAzZTllZjcwODk3Zjc4Mjk5ZXAtMTEsCisgICAgMHgxLmZmZmZmNWMyOGY1ZmM3MzNjNDIwMmFhMGJkYTkyZjk3cC0xLAorICAgIDB4MS45OTk5OWFwLTExLAorICB9LAorICB7IC8vIEVudHJ5IDEwMAorICAgIC0weDEuOTk5OTk3NDRmMzA2ZGMwM2U5ZWY3MDg5N2Y3ODI5OWVwLTExLAorICAgIDB4MS5mZmZmZjVjMjhmNWZjNzMzYzQyMDJhYTBiZGE5MmY5N3AtMSwKKyAgICAtMHgxLjk5OTk5YXAtMTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTAxCisgICAgMHgxLmZmZmZmYWFhYWFhZWVlZWVlZDRlZDRlZGFiNGM3YmQ2cC0xMSwKKyAgICAweDEuZmZmZmYwMDAwMDE1NTU1NTQ5ZjQ5ZjRkMzRkMzRjYTBwLTEsCisgICAgMHgxLnAtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTAyCisgICAgLTB4MS5mZmZmZmFhYWFhYWVlZWVlZWQ0ZWQ0ZWRhYjRjN2JkNnAtMTEsCisgICAgMHgxLmZmZmZmMDAwMDAxNTU1NTU0OWY0OWY0ZDM0ZDM0Y2EwcC0xLAorICAgIC0weDEucC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMKKyAgICAweDEuMzMzMzJmNjQ1YTE4YzNiMGNjZmMwYTNjZjdiMmU5MWJwLTEwLAorICAgIDB4MS5mZmZmZThmNWMyOWNlMDc2NDBiZDVmNmQ4YmIxZWE2YnAtMSwKKyAgICAweDEuMzMzMzM0cC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQKKyAgICAtMHgxLjMzMzMyZjY0NWExOGMzYjBjY2ZjMGEzY2Y3YjJlOTFicC0xMCwKKyAgICAweDEuZmZmZmU4ZjVjMjljZTA3NjQwYmQ1ZjZkOGJiMWVhNmJwLTEsCisgICAgLTB4MS4zMzMzMzRwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEwNQorICAgIDB4MS42NjY2NjBhZWMzMzA4MjFjN2ExMDBjZjQ4OGMzODBlYnAtMTAsCisgICAgMHgxLmZmZmZlMGEzZDcxNDgzOWYzNjAxMTQ3YWRhNzNmOGQ5cC0xLAorICAgIDB4MS42NjY2NjhwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDEwNgorICAgIC0weDEuNjY2NjYwYWVjMzMwODIxYzdhMTAwY2Y0ODhjMzgwZWJwLTEwLAorICAgIDB4MS5mZmZmZTBhM2Q3MTQ4MzlmMzYwMTE0N2FkYTczZjhkOXAtMSwKKyAgICAtMHgxLjY2NjY2OHAtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTA3CisgICAgMHgxLjk5OTk5MTEzY2MwMzQxNDRmZGJkYzhhMWRjNzEzMjUzcC0xMCwKKyAgICAweDEuZmZmZmQ3MGEzZDgxOTFmNjZkZTU0MDhmYjJiOTk1YTBwLTEsCisgICAgMHgxLjk5OTk5Y3AtMTAsCisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgLTB4MS45OTk5OTExM2NjMDM0MTQ0ZmRiZGM4YTFkYzcxMzI1M3AtMTAsCisgICAgMHgxLmZmZmZkNzBhM2Q4MTkxZjY2ZGU1NDA4ZmIyYjk5NWEwcC0xLAorICAgIC0weDEuOTk5OTljcC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkKKyAgICAweDEuY2NjY2JjNzJiMDVkZDA5NTFhOWM1ZTY1NTYwYzU2ZTNwLTEwLAorICAgIDB4MS5mZmZmY2MyOGY2ZDA5NmI4N2Q2ZDE5YTA2ZTk2OTk5YnAtMSwKKyAgICAweDEuY2NjY2NjcC0xMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAtMHgxLmNjY2NiYzcyYjA1ZGQwOTUxYTljNWU2NTU2MGM1NmUzcC0xMCwKKyAgICAweDEuZmZmZmNjMjhmNmQwOTZiODdkNmQxOWEwNmU5Njk5OWJwLTEsCisgICAgLTB4MS5jY2NjY2NwLTEwLAorICB9LAorICB7IC8vIEVudHJ5IDExMQorICAgIDB4MS4wNjY1YWUzNjE1YjViN2RlNTI3OTgwNjRkZmM1OWIyOXAtNywKKyAgICAweDEuZmZmYmNjMmE3MWNlYWFiZjU1ODJiNmRhMWZjMzA1MzFwLTEsCisgICAgMHgxLjA2NjY2NnAtNywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIKKyAgICAtMHgxLjA2NjVhZTM2MTViNWI3ZGU1Mjc5ODA2NGRmYzU5YjI5cC03LAorICAgIDB4MS5mZmZiY2MyYTcxY2VhYWJmNTU4MmI2ZGExZmMzMDUzMXAtMSwKKyAgICAtMHgxLjA2NjY2NnAtNywKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMKKyAgICAweDEuY2NjOGU4YWU5MjU4NmQ4ZDY2YjZhZDBhZWRjYjBkOTRwLTcsCisgICAgMHgxLmZmZjMwYTRiN2I1MTE5ZDhlMjk5ZjcxN2VjMGVjZTE2cC0xLAorICAgIDB4MS5jY2NjY2NwLTcsCisgIH0sCisgIHsgLy8gRW50cnkgMTE0CisgICAgLTB4MS5jY2M4ZThhZTkyNTg2ZDhkNjZiNmFkMGFlZGNiMGQ5NHAtNywKKyAgICAweDEuZmZmMzBhNGI3YjUxMTlkOGUyOTlmNzE3ZWMwZWNlMTZwLTEsCisgICAgLTB4MS5jY2NjY2NwLTcsCisgIH0sCisgIHsgLy8gRW50cnkgMTE1CisgICAgMHgxLjQ5OTNlNzBmN2IxN2MxMGFmOWY5N2ZjN2IzM2I4MjJicC02LAorICAgIDB4MS5mZmU1N2E3ODUxMjMyMjZjMWUyZWZiNDExMzUzZWRjOXAtMSwKKyAgICAweDEuNDk5OTk4cC02LAorICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIC0weDEuNDk5M2U3MGY3YjE3YzEwYWY5Zjk3ZmM3YjMzYjgyMmJwLTYsCisgICAgMHgxLmZmZTU3YTc4NTEyMzIyNmMxZTJlZmI0MTEzNTNlZGM5cC0xLAorICAgIC0weDEuNDk5OTk4cC02LAorICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIDB4MS5hY2MwNDNmOGIyZDg5YWQ1MTQzYzAzMGU5NzY2ZmMxMXAtNiwKKyAgICAweDEuZmZkMzFjZDEwY2I2MzJkOTczM2FjNWY1ZjMyN2E1ZjlwLTEsCisgICAgMHgxLmFjY2NjY3AtNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgKKyAgICAtMHgxLmFjYzA0M2Y4YjJkODlhZDUxNDNjMDMwZTk3NjZmYzExcC02LAorICAgIDB4MS5mZmQzMWNkMTBjYjYzMmQ5NzMzYWM1ZjVmMzI3YTVmOXAtMSwKKyAgICAtMHgxLmFjY2NjY3AtNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkKKyAgICAweDEuMDdmNDRkNjdjZjQxYWZiYzBjOTUxMDhiOTlmOTFiMDFwLTUsCisgICAgMHgxLmZmYmJmMTgyMDc1NDJlZjgxMzkwZDczYzNiYTg5YzFhcC0xLAorICAgIDB4MS4wOHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAKKyAgICAtMHgxLjA3ZjQ0ZDY3Y2Y0MWFmYmMwYzk1MTA4Yjk5ZjkxYjAxcC01LAorICAgIDB4MS5mZmJiZjE4MjA3NTQyZWY4MTM5MGQ3M2MzYmE4OWMxYXAtMSwKKyAgICAtMHgxLjA4cC01LAorICB9LAorICB7IC8vIEVudHJ5IDEyMQorICAgIDB4MS4zOTg1ZmVhZDQ0ZmEyYjg1MWU2NTFhY2JhMzY5ZDc2OXAtNSwKKyAgICAweDEuZmY5ZmY4YzJlYWVhZWUzMGZiMjExNzY1YWY4MzUxNzFwLTEsCisgICAgMHgxLjM5OTk5YXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjIKKyAgICAtMHgxLjM5ODVmZWFkNDRmYTJiODUxZTY1MWFjYmEzNjlkNzY5cC01LAorICAgIDB4MS5mZjlmZjhjMmVhZWFlZTMwZmIyMTE3NjVhZjgzNTE3MXAtMSwKKyAgICAtMHgxLjM5OTk5YXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMKKyAgICAweDEuNmIxNGJlYjVkNDBkNzQ1MDk2MjQ3ZTU5YjYyMjgyOGJwLTUsCisgICAgMHgxLmZmN2YzMmQ2ZWIxZjljZjkwMjI2ZWMyOTFjOWUwOTIycC0xLAorICAgIDB4MS42YjMzMzRwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMTI0CisgICAgLTB4MS42YjE0YmViNWQ0MGQ3NDUwOTYyNDdlNTliNjIyODI4YnAtNSwKKyAgICAweDEuZmY3ZjMyZDZlYjFmOWNmOTAyMjZlYzI5MWM5ZTA5MjJwLTEsCisgICAgLTB4MS42YjMzMzRwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMTI1CisgICAgMHgxLjljYTAxNjcxYTc5OTVmYzk3Y2ViZDY5NzI5Y2M0MzA5cC01LAorICAgIDB4MS5mZjU5YTAwY2M0YWQ0OTJjYTI1OTc0OTU0MTI5OThlZHAtMSwKKyAgICAweDEuOWNjY2NlcC01LAorICB9LAorICB7IC8vIEVudHJ5IDEyNgorICAgIC0weDEuOWNhMDE2NzFhNzk5NWZjOTdjZWJkNjk3MjljYzQzMDlwLTUsCisgICAgMHgxLmZmNTlhMDBjYzRhZDQ5MmNhMjU5NzQ5NTQxMjk5OGVkcC0xLAorICAgIC0weDEuOWNjY2NlcC01LAorICB9LAorICB7IC8vIEVudHJ5IDEyNworICAgIDB4MS5jZTI3OGNkOWViMmNiZDBjNmE0ZTEyNzlmNjkwZTg1NnAtNSwKKyAgICAweDEuZmYyZjQwYzA4YWNmNDU4MGE4ZDEzMzgwZDkwNzMzOThwLTEsCisgICAgMHgxLmNlNjY2NnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgKKyAgICAtMHgxLmNlMjc4Y2Q5ZWIyY2JkMGM2YTRlMTI3OWY2OTBlODU2cC01LAorICAgIDB4MS5mZjJmNDBjMDhhY2Y0NTgwYThkMTMzODBkOTA3MzM5OHAtMSwKKyAgICAtMHgxLmNlNjY2NnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkKKyAgICAweDEuNDNjMWU5OTcyMzkxYWE4ZWNkOGE5Y2NiYTkwNzkyMGFwLTEsCisgICAgMHgxLjhjYTQ2Y2EwMTE3NzFiZmFlMGQ5ZWRiZjFkYWNiNDAycC0xLAorICAgIDB4MS41ZTdmYzRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTMwCisgICAgLTB4MS40M2MxZTk5NzIzOTFhYThlY2Q4YTljY2JhOTA3OTIwYXAtMSwKKyAgICAweDEuOGNhNDZjYTAxMTc3MWJmYWUwZDllZGJmMWRhY2I0MDJwLTEsCisgICAgLTB4MS41ZTdmYzRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgMHgxLmVlM2Q2YmIyMWM2NGIyMzgyZWZjZmYwY2RmMzBjZTBicC0xLAorICAgIDB4MS4wYjVkMzhkNWQ4MmU0YTc2MjRkYWM0ZTEwY2UxNTljMnAtMiwKKyAgICAweDEuNGU3ZmM0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTMyCisgICAgLTB4MS5lZTNkNmJiMjFjNjRiMjM4MmVmY2ZmMGNkZjMwY2UwYnAtMSwKKyAgICAweDEuMGI1ZDM4ZDVkODJlNGE3NjI0ZGFjNGUxMGNlMTU5YzJwLTIsCisgICAgLTB4MS40ZTdmYzRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMKKyAgICAweDEuZGY4ZTIzMjNlNGJmMWE1MzhhMTAwZWMxYmYzNDk0YTlwLTEsCisgICAgLTB4MS42NmI5NmUyMDRlNjljZGE4ZTljZjUwOTk2NDMyNTM5ZXAtMiwKKyAgICAweDEuZWRiZmE2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTM0CisgICAgLTB4MS5kZjhlMjMyM2U0YmYxYTUzOGExMDBlYzFiZjM0OTRhOXAtMSwKKyAgICAtMHgxLjY2Yjk2ZTIwNGU2OWNkYThlOWNmNTA5OTY0MzI1MzllcC0yLAorICAgIC0weDEuZWRiZmE2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTM1CisgICAgMHgxLjFkMzQ3YWEwMmZlYjNiYjE3NTBkMjU1MDk0MzVkYTg4cC0xLAorICAgIC0weDEuYTkzNTU0MGVkZWNhNGMyMjBlZDkxZGM1NDgxZTRkOWJwLTEsCisgICAgMHgxLjQ2N2ZjNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIC0weDEuMWQzNDdhYTAyZmViM2JiMTc1MGQyNTUwOTQzNWRhODhwLTEsCisgICAgLTB4MS5hOTM1NTQwZWRlY2E0YzIyMGVkOTFkYzU0ODFlNGQ5YnAtMSwKKyAgICAtMHgxLjQ2N2ZjNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIC0weDEuZmZlYTA4ZTFjOTdmNGM0ZGUwMTk2MWNjM2U3YjA0ZGNwLTYsCisgICAgLTB4MS5mZmMwMDE3ZGQ5MjA5ZGQ4ODkxZjE3ZmU0YzllZWU0NnAtMSwKKyAgICAweDEuOTYxZmI0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTM4CisgICAgMHgxLmZmZWEwOGUxYzk3ZjRjNGRlMDE5NjFjYzNlN2IwNGRjcC02LAorICAgIC0weDEuZmZjMDAxN2RkOTIwOWRkODg5MWYxN2ZlNGM5ZWVlNDZwLTEsCisgICAgLTB4MS45NjFmYjRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkKKyAgICAtMHgxLjM3MzRjYmNlZDljMGY0ODRlNWY3NjJlMDAyMTZlNjIwcC0xLAorICAgIC0weDEuOTY5MDgyMDA3NzMzZDc4N2Y0YzM2YmEwZjk0MjU2OTRwLTEsCisgICAgMHgxLmU1YmZhNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDE0MAorICAgIDB4MS4zNzM0Y2JjZWQ5YzBmNDg0ZTVmNzYyZTAwMjE2ZTYyMHAtMSwKKyAgICAtMHgxLjk2OTA4MjAwNzczM2Q3ODdmNGMzNmJhMGY5NDI1Njk0cC0xLAorICAgIC0weDEuZTViZmE0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTQxCisgICAgLTB4MS5lOWQyNTkyYmVjMTBjM2FjYjE1YzU4NTIyMzlhMmFhOHAtMSwKKyAgICAtMHgxLjJhMWU3NDIyM2Q5YmRkYjdkYjU5Zjc4MWY5NmI2NWVjcC0yLAorICAgIDB4MS4xYWFmY2FwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIKKyAgICAweDEuZTlkMjU5MmJlYzEwYzNhY2IxNWM1ODUyMjM5YTJhYThwLTEsCisgICAgLTB4MS4yYTFlNzQyMjNkOWJkZGI3ZGI1OWY3ODFmOTZiNjVlY3AtMiwKKyAgICAtMHgxLjFhYWZjYXAyLAorICB9LAorICB7IC8vIEVudHJ5IDE0MworICAgIC0weDEuZTRlY2UyMDhkMGM0OTEzYWIwMTljYWIwY2U5Yzc4NWVwLTEsCisgICAgMHgxLjQ4OTRkNTBiODRkYmM5ODExMzRhNTkxYWM0MTY1ZDllcC0yLAorICAgIDB4MS40MjdmYzJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDQKKyAgICAweDEuZTRlY2UyMDhkMGM0OTEzYWIwMTljYWIwY2U5Yzc4NWVwLTEsCisgICAgMHgxLjQ4OTRkNTBiODRkYmM5ODExMzRhNTkxYWM0MTY1ZDllcC0yLAorICAgIC0weDEuNDI3ZmMycDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTQ1CisgICAgLTB4MS4yYTVhMDJkMzkyYjU0ZjY0MWEwZDg4YmQ0YWM2YzJlMXAtMSwKKyAgICAweDEuYTAxNmRkNzQ4MGExZWVhNGQ0OWVmYjU4NWZhNDljODZwLTEsCisgICAgMHgxLjZhNGZiYXAyLAorICB9LAorICB7IC8vIEVudHJ5IDE0NgorICAgIDB4MS4yYTVhMDJkMzkyYjU0ZjY0MWEwZDg4YmQ0YWM2YzJlMXAtMSwKKyAgICAweDEuYTAxNmRkNzQ4MGExZWVhNGQ0OWVmYjU4NWZhNDljODZwLTEsCisgICAgLTB4MS42YTRmYmFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDcKKyAgICAtMHgxLjI2MzEyM2RmMjJkMTNlZDMyOWM2NjVjODNjMGU3MWU4cC0xLAorICAgIDB4MS5hMzBhNmEzYmY0YTNlMmI3ZTI3NjY2ZDNhOWMzYjc0YnAtMSwKKyAgICAweDEuNmFmMmYwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTQ4CisgICAgMHgxLjI2MzEyM2RmMjJkMTNlZDMyOWM2NjVjODNjMGU3MWU4cC0xLAorICAgIDB4MS5hMzBhNmEzYmY0YTNlMmI3ZTI3NjY2ZDNhOWMzYjc0YnAtMSwKKyAgICAtMHgxLjZhZjJmMHAyLAorICB9LAorICB7IC8vIEVudHJ5IDE0OQorICAgIC0weDEuZTE4ZTY3YjUwOGZmYzllNDJmNmM5ZTcyZjhlNTQ1ZjNwLTEsCisgICAgMHgxLjViZDYyNTUwNDAxNWNjYzEwMWU0ZjQzNDBkNGI3NjJicC0yLAorICAgIDB4MS40M2M2MmFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTAKKyAgICAweDEuZTE4ZTY3YjUwOGZmYzllNDJmNmM5ZTcyZjhlNTQ1ZjNwLTEsCisgICAgMHgxLjViZDYyNTUwNDAxNWNjYzEwMWU0ZjQzNDBkNGI3NjJicC0yLAorICAgIC0weDEuNDNjNjJhcDIsCisgIH0sCisgIHsgLy8gRW50cnkgMTUxCisgICAgLTB4MS5lZTBlODBlYzlkMTU2MmMxN2E2Y2Y2MDhhZjliMGVkNHAtMSwKKyAgICAtMHgxLjBjYjczMzQ0OGMzMGVlM2RkZmZiNGRhNjlmMGIzODQycC0yLAorICAgIDB4MS4xYzk5NjRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTIKKyAgICAweDEuZWUwZTgwZWM5ZDE1NjJjMTdhNmNmNjA4YWY5YjBlZDRwLTEsCisgICAgLTB4MS4wY2I3MzM0NDhjMzBlZTNkZGZmYjRkYTY5ZjBiMzg0MnAtMiwKKyAgICAtMHgxLjFjOTk2NHAyLAorICB9LAorICB7IC8vIEVudHJ5IDE1MworICAgIC0weDEuNDcyNzY4NjM3ZWE4ODY2YTY1MjA5OGE0M2FhNjg4YTZwLTEsCisgICAgLTB4MS44OWQ4NzRhZDMwZTNmYjQ2MjQ0ZGFhMjQ0NTE2OTBkN3AtMSwKKyAgICAweDEuZWFkOTNjcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTU0CisgICAgMHgxLjQ3Mjc2ODYzN2VhODg2NmE2NTIwOThhNDNhYTY4OGE2cC0xLAorICAgIC0weDEuODlkODc0YWQzMGUzZmI0NjI0NGRhYTI0NDUxNjkwZDdwLTEsCisgICAgLTB4MS5lYWQ5M2NwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTUKKyAgICAtMHgxLjRiYTI0ZjYzMjVmMjE0MjBlN2M0OGQ0ZjkxZTI4MDY0cC00LAorICAgIC0weDEuZmU1MWFlMDlmMGQzOWVkNTU0ZTY4YmVmM2UyZjhhMDNwLTEsCisgICAgMHgxLjljN2ZiMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIDB4MS40YmEyNGY2MzI1ZjIxNDIwZTdjNDhkNGY5MWUyODA2NHAtNCwKKyAgICAtMHgxLmZlNTFhZTA5ZjBkMzllZDU1NGU2OGJlZjNlMmY4YTAzcC0xLAorICAgIC0weDEuOWM3ZmIwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgMHgxLjAzNGM2NDMyOTUxNTNhYWZmZTVkOWEwZjI5ZTkyODQ0cC0xLAorICAgIC0weDEuYjk3YmY3NmFlNzY1ZWI2OWNmNTVlODBhYWU5NzczMDNwLTEsCisgICAgMHgxLjRlMjYyNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDE1OAorICAgIC0weDEuMDM0YzY0MzI5NTE1M2FhZmZlNWQ5YTBmMjllOTI4NDRwLTEsCisgICAgLTB4MS5iOTdiZjc2YWU3NjVlYjY5Y2Y1NWU4MGFhZTk3NzMwM3AtMSwKKyAgICAtMHgxLjRlMjYyNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDE1OQorICAgIDB4MS5kMWU0ZDk2ZWFjOTE3NTc0Yjk0OGU0ZWE5ZTM3YjM2ZHAtMSwKKyAgICAtMHgxLmE4YWM1NzkzZTMyNjI5YjEzMTk4NGVjZmZkMmQwZjMxcC0yLAorICAgIDB4MS5mZjk5MzJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjAKKyAgICAtMHgxLmQxZTRkOTZlYWM5MTc1NzRiOTQ4ZTRlYTllMzdiMzZkcC0xLAorICAgIC0weDEuYThhYzU3OTNlMzI2MjliMTMxOTg0ZWNmZmQyZDBmMzFwLTIsCisgICAgLTB4MS5mZjk5MzJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjEKKyAgICAweDEuZjc1MDFlMDAyYmNhZmI4OTdmOTMxOTMxZDNhNTdhZmRwLTEsCisgICAgMHgxLjc3YTkyY2EwMWJjNzljMTk1ZGRhMzM3MzY4MDdmOTg2cC0zLAorICAgIDB4MS42MmU2MWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjIKKyAgICAtMHgxLmY3NTAxZTAwMmJjYWZiODk3ZjkzMTkzMWQzYTU3YWZkcC0xLAorICAgIDB4MS43N2E5MmNhMDFiYzc5YzE5NWRkYTMzNzM2ODA3Zjk4NnAtMywKKyAgICAtMHgxLjYyZTYxY3AwLAorICB9LAorICB7IC8vIEVudHJ5IDE2MworICAgIDB4MS42NWY3ZDY2ZWY2NTkxY2ZjNTFhYjI5ZGMyMDg2ZDNlN3AtMSwKKyAgICAweDEuNmUxMDYwMjgyYzE0ODhkOWFiZDgzZGExZDY4Y2QwZjdwLTEsCisgICAgMHgxLjhjNjYyY3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjQKKyAgICAtMHgxLjY1ZjdkNjZlZjY1OTFjZmM1MWFiMjlkYzIwODZkM2U3cC0xLAorICAgIDB4MS42ZTEwNjAyODJjMTQ4OGQ5YWJkODNkYTFkNjhjZDBmN3AtMSwKKyAgICAtMHgxLjhjNjYyY3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjUKKyAgICAtMHgxLmZlMDQzZjg3NWM2ZWQ0YTJjMWI4ZDY5YTA5ZmNmNTc4cC0xLAorICAgIC0weDEuNjgyZjJiYjg3YThmNTAxMTczNTA5NDE3NmM5YjZkYWNwLTQsCisgICAgLTB4MS5hOGFhMWNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjYKKyAgICAweDEuZmUwNDNmODc1YzZlZDRhMmMxYjhkNjlhMDlmY2Y1NzhwLTEsCisgICAgLTB4MS42ODJmMmJiODdhOGY1MDExNzM1MDk0MTc2YzliNmRhY3AtNCwKKyAgICAweDEuYThhYTFjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTY3CisgICAgLTB4MS5mZmYxOGYzMTNlNjZmMWFlMjVmODlhNWY3YTFmODRjNHAtMSwKKyAgICAtMHgxLmU2NjVjYjJhZjg0MmJlNWJhNWY2NTk2MDU5OWE5N2VjcC03LAorICAgIC0weDEuOTVlYzhhcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTY4CisgICAgMHgxLmZmZjE4ZjMxM2U2NmYxYWUyNWY4OWE1ZjdhMWY4NGM0cC0xLAorICAgIC0weDEuZTY2NWNiMmFmODQyYmU1YmE1ZjY1OTYwNTk5YTk3ZWNwLTcsCisgICAgMHgxLjk1ZWM4YXAwLAorICB9LAorICB7IC8vIEVudHJ5IDE2OQorICAgIC0weDEuZmYyMGQ5MjBiOWU5YzIzMTU0Zjk3ZTJmMzQyYTI4ODRwLTEsCisgICAgMHgxLmRkZDIzMTUwMWIxMmZjZjJiYzIwNjMzYmU0ZDUxZTUxcC01LAorICAgIC0weDEuODMyZWY4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTcwCisgICAgMHgxLmZmMjBkOTIwYjllOWMyMzE1NGY5N2UyZjM0MmEyODg0cC0xLAorICAgIDB4MS5kZGQyMzE1MDFiMTJmY2YyYmMyMDYzM2JlNGQ1MWU1MXAtNSwKKyAgICAweDEuODMyZWY4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTcxCisgICAgLTB4MS5mYjkzM2I4OWQ3ZGIzMjg2ZWVkMGNmZWFiZWU5ODg3NXAtMSwKKyAgICAweDEuMGNhYmE2OTk3NjkxYWIxOTcwZDQzYzc0MTllZDUxZTFwLTMsCisgICAgLTB4MS43MDcxNjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzIKKyAgICAweDEuZmI5MzNiODlkN2RiMzI4NmVlZDBjZmVhYmVlOTg4NzVwLTEsCisgICAgMHgxLjBjYWJhNjk5NzY5MWFiMTk3MGQ0M2M3NDE5ZWQ1MWUxcC0zLAorICAgIDB4MS43MDcxNjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzMKKyAgICAtMHgxLmY1NGQ5NWM1MDU4YjdkYzk5NzJhYjZmOTkyOGNhMDQzcC0xLAorICAgIDB4MS5hMDcyNTQxZmQ2ZWFmOGI2NWE4NzRjNThkNmNjNTczOXAtMywKKyAgICAtMHgxLjVkYjNkNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDE3NAorICAgIDB4MS5mNTRkOTVjNTA1OGI3ZGM5OTcyYWI2Zjk5MjhjYTA0M3AtMSwKKyAgICAweDEuYTA3MjU0MWZkNmVhZjhiNjVhODc0YzU4ZDZjYzU3MzlwLTMsCisgICAgMHgxLjVkYjNkNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDE3NQorICAgIC0weDEuZWM1ODgxYTA5YzQ2YWFlMDIwY2Q5MDM2MDk4YTE5NmVwLTEsCisgICAgMHgxLjE4ZmVmODEwNmJlYTYzYjllOTZhN2FkZjUzOGM2MTk0cC0yLAorICAgIC0weDEuNGFmNjQycDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTc2CisgICAgMHgxLmVjNTg4MWEwOWM0NmFhZTAyMGNkOTAzNjA5OGExOTZlcC0xLAorICAgIDB4MS4xOGZlZjgxMDZiZWE2M2I5ZTk2YTdhZGY1MzhjNjE5NHAtMiwKKyAgICAweDEuNGFmNjQycDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTc3CisgICAgLTB4MS5lMGMwNDc5NTkxOWQ5NjFhNWU4M2U1MDVkZjMxYzYyNHAtMSwKKyAgICAweDEuNjA0MzcyNzdkNDgwNjdlODUyMzBiY2UxODgzZWFhYmFwLTIsCisgICAgLTB4MS4zODM4YjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzgKKyAgICAweDEuZTBjMDQ3OTU5MTlkOTYxYTVlODNlNTA1ZGYzMWM2MjRwLTEsCisgICAgMHgxLjYwNDM3Mjc3ZDQ4MDY3ZTg1MjMwYmNlMTg4M2VhYWJhcC0yLAorICAgIDB4MS4zODM4YjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzkKKyAgICAtMHgxLmQyOTRjZGVmN2NjMTYxNjMzYTAyZDNlNjIwNThiZTBlcC0xLAorICAgIDB4MS5hNWE0ZGVkNDkyYmVkZmU4Y2Y1YzM0Y2FkZDc4ZGY3NXAtMiwKKyAgICAtMHgxLjI1N2IxZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDE4MAorICAgIDB4MS5kMjk0Y2RlZjdjYzE2MTYzM2EwMmQzZTYyMDU4YmUwZXAtMSwKKyAgICAweDEuYTVhNGRlZDQ5MmJlZGZlOGNmNWMzNGNhZGQ3OGRmNzVwLTIsCisgICAgMHgxLjI1N2IxZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDE4MQorICAgIC0weDEuYzFlOTg4Yjk1NjE0YWJkNjVkM2Q4MTFmNWM4ODAzOWJwLTEsCisgICAgMHgxLmU4YzQwNDA2NzhkMmVmNzM2MzMzYTQ1MzdhMTExM2ExcC0yLAorICAgIC0weDEuMTJiZDkycDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTgyCisgICAgMHgxLmMxZTk4OGI5NTYxNGFiZDY1ZDNkODExZjVjODgwMzlicC0xLAorICAgIDB4MS5lOGM0MDQwNjc4ZDJlZjczNjMzM2E0NTM3YTExMTNhMXAtMiwKKyAgICAweDEuMTJiZDkycDAsCisgIH0sCisgIHsgLy8gRW50cnkgMTgzCisgICAgLTB4MS5hMmMyODk1ZWRiMGQ0YmE1MWNkYmQ1MzkwY2FjNDY4ZnAtMSwKKyAgICAweDEuMjY5NzZiMWIxNmQxOTA5MWMwOTI1OTc2NWM0YjM4NzJwLTEsCisgICAgLTB4MS5lYTVjM2VwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTg0CisgICAgMHgxLmEyYzI4OTVlZGIwZDRiYTUxY2RiZDUzOTBjYWM0NjhmcC0xLAorICAgIDB4MS4yNjk3NmIxYjE2ZDE5MDkxYzA5MjU5NzY1YzRiMzg3MnAtMSwKKyAgICAweDEuZWE1YzNlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE4NQorICAgIC0weDEuOTVmMDUxNTM2NDRkNjBiOTRkMmYyZTcwMGRmZDNhMzdwLTEsCisgICAgMHgxLjM4MDVhMmRhZmRhN2Y4NTU0YWVjNjVkYWIzNDhhNzE0cC0xLAorICAgIC0weDEuZDRiODdjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE4NgorICAgIDB4MS45NWYwNTE1MzY0NGQ2MGI5NGQyZjJlNzAwZGZkM2EzN3AtMSwKKyAgICAweDEuMzgwNWEyZGFmZGE3Zjg1NTRhZWM2NWRhYjM0OGE3MTRwLTEsCisgICAgMHgxLmQ0Yjg3Y3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODcKKyAgICAtMHgxLjg4NjQ3ZDhhZDJlNDFmYjdjMGFmMGY2NDYxNGM5OTkzcC0xLAorICAgIDB4MS40OGU1MmZmNWJiZTc5NDYxOGI4NTE5MGI4NjQxMTgyNHAtMSwKKyAgICAtMHgxLmJmMTRiYXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODgKKyAgICAweDEuODg2NDdkOGFkMmU0MWZiN2MwYWYwZjY0NjE0Yzk5OTNwLTEsCisgICAgMHgxLjQ4ZTUyZmY1YmJlNzk0NjE4Yjg1MTkwYjg2NDExODI0cC0xLAorICAgIDB4MS5iZjE0YmFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTg5CisgICAgLTB4MS43YTI1M2Y5Zjg5YTdkM2U0ZjljNTQ2Mzg0MThlOTdmNnAtMSwKKyAgICAweDEuNTkyZTViNjE1ZWY1YWU0NjM5NzZkMzExNDFkYmFjZjBwLTEsCisgICAgLTB4MS5hOTcwZjhwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTkwCisgICAgMHgxLjdhMjUzZjlmODlhN2QzZTRmOWM1NDYzODQxOGU5N2Y2cC0xLAorICAgIDB4MS41OTJlNWI2MTVlZjVhZTQ2Mzk3NmQzMTE0MWRiYWNmMHAtMSwKKyAgICAweDEuYTk3MGY4cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE5MQorICAgIC0weDEuNmIzOTFiMzRhYWI4MjhmYmU3Y2Q3ZGNhZjllZjNiZDZwLTEsCisgICAgMHgxLjY4ZDliMmQ2NTdlNDMwN2QzMzFlYjdiZDM1ZWUxODc5cC0xLAorICAgIC0weDEuOTNjZDM2cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE5MgorICAgIDB4MS42YjM5MWIzNGFhYjgyOGZiZTdjZDdkY2FmOWVmM2JkNnAtMSwKKyAgICAweDEuNjhkOWIyZDY1N2U0MzA3ZDMzMWViN2JkMzVlZTE4NzlwLTEsCisgICAgMHgxLjkzY2QzNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTMKKyAgICAtMHgxLjViYTZlMmZiOTgwZDQ4MmNmMDBlZGU4MGY1NTk3ZmIycC0xLAorICAgIDB4MS43N2UwMGMzNzE4NTI4YzM2ZjcyMmU2MzA5NmMyNjQ2YnAtMSwKKyAgICAtMHgxLjdlMjk3NHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTQKKyAgICAweDEuNWJhNmUyZmI5ODBkNDgyY2YwMGVkZTgwZjU1OTdmYjJwLTEsCisgICAgMHgxLjc3ZTAwYzM3MTg1MjhjMzZmNzIyZTYzMDk2YzI2NDZicC0xLAorICAgIDB4MS43ZTI5NzRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTk1CisgICAgLTB4MS40Yjc1YjU5NTRlNzE4MDIwOTAwNzE5ZTI1YTdlYTkzYnAtMSwKKyAgICAweDEuODYzYTg4ZDZiMDY0ZjM2ZjM0MzcwNzIyZDM2MWNlOWZwLTEsCisgICAgLTB4MS42ODg1YjJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMTk2CisgICAgMHgxLjRiNzViNTk1NGU3MTgwMjA5MDA3MTllMjVhN2VhOTNicC0xLAorICAgIDB4MS44NjNhODhkNmIwNjRmMzZmMzQzNzA3MjJkMzYxY2U5ZnAtMSwKKyAgICAweDEuNjg4NWIycC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE5NworICAgIC0weDEuM2FhY2ZhNTEwODEwMDU0YzUyYWUwYjY3ZDExNmViNDBwLTEsCisgICAgMHgxLjkzZTI5ODljZWU2MDg0ZTM0YjUzM2IxZWI5Mjc0NmRhcC0xLAorICAgIC0weDEuNTJlMWYwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDE5OAorICAgIDB4MS4zYWFjZmE1MTA4MTAwNTRjNTJhZTBiNjdkMTE2ZWI0MHAtMSwKKyAgICAweDEuOTNlMjk4OWNlZTYwODRlMzRiNTMzYjFlYjkyNzQ2ZGFwLTEsCisgICAgMHgxLjUyZTFmMHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTkKKyAgICAtMHgxLjI5NTQ2NDRjZWI4ZTNhMjQ3OWM4M2FlODRhZjU3ZDNlcC0xLAorICAgIDB4MS5hMGQxZjg2MTNlYmM2MGM3ZWU2NTAyZWUxODNjODllN3AtMSwKKyAgICAtMHgxLjNkM2UzNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDAKKyAgICAweDEuMjk1NDY0NGNlYjhlM2EyNDc5YzgzYWU4NGFmNTdkM2VwLTEsCisgICAgMHgxLmEwZDFmODYxM2ViYzYwYzdlZTY1MDJlZTE4M2M4OWU3cC0xLAorICAgIDB4MS4zZDNlMzZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjAxCisgICAgLTB4MS5mYzc2OWFlY2QyNjVjZmVhMDhlMGZmMzBjMmZiY2FjZHAtMiwKKyAgICAweDEuYmM2YmQ4ODlhOGE1OWRiYjU2ZTU0NmEzN2FlNzk4ZjVwLTEsCisgICAgLTB4MS4wYTBiMDJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjAyCisgICAgMHgxLmZjNzY5YWVjZDI2NWNmZWEwOGUwZmYzMGMyZmJjYWNkcC0yLAorICAgIDB4MS5iYzZiZDg4OWE4YTU5ZGJiNTZlNTQ2YTM3YWU3OThmNXAtMSwKKyAgICAweDEuMGEwYjAycC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIwMworICAgIC0weDEuYzg1M2M3MDRlM2I5NDMyMjAzMWQ2YjQ3YWVmODUzYzlwLTIsCisgICAgMHgxLmNhNTljNzE5Zjk2MDc1ZGQ2YjdhMGZmNDQzYWQ1OWRjcC0xLAorICAgIC0weDEuZDhmNzIwcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIwNAorICAgIDB4MS5jODUzYzcwNGUzYjk0MzIyMDMxZDZiNDdhZWY4NTNjOXAtMiwKKyAgICAweDEuY2E1OWM3MTlmOTYwNzVkZDZiN2EwZmY0NDNhZDU5ZGNwLTEsCisgICAgMHgxLmQ4ZjcyMHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDUKKyAgICAtMHgxLjkyYWJhODk4MWIyNWRlZGE0Y2MxODE3MjUxNzIzYTFicC0yLAorICAgIDB4MS5kNmMwYjEzZGY5OTYxM2E0OTMwNmI0ZGM2YzU3YWEwM3AtMSwKKyAgICAtMHgxLjlkZDgzY3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDYKKyAgICAweDEuOTJhYmE4OTgxYjI1ZGVkYTRjYzE4MTcyNTE3MjNhMWJwLTIsCisgICAgMHgxLmQ2YzBiMTNkZjk5NjEzYTQ5MzA2YjRkYzZjNTdhYTAzcC0xLAorICAgIDB4MS45ZGQ4M2NwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjA3CisgICAgLTB4MS41YmFjMDVlMWUwYTdjMmRlMjgwZmNiOTNiZTY3YTRkYXAtMiwKKyAgICAweDEuZTE5NjAyNzNhNGFhYTFiZDE5ZWYwY2NhYTg4NzQxODNwLTEsCisgICAgLTB4MS42MmI5NThwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjA4CisgICAgMHgxLjViYWMwNWUxZTBhN2MyZGUyODBmY2I5M2JlNjdhNGRhcC0yLAorICAgIDB4MS5lMTk2MDI3M2E0YWFhMWJkMTllZjBjY2FhODg3NDE4M3AtMSwKKyAgICAweDEuNjJiOTU4cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIwOQorICAgIC0weDEuMjM4M2NhMmIyNDk4MDdkOTUwMDVkOTZjZmRhZWNkNmNwLTIsCisgICAgMHgxLmVhZDA3Y2QyZTBmN2YxOTY3OTY0NjM2MmJiYzBlYjgwcC0xLAorICAgIC0weDEuMjc5YTc0cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIxMAorICAgIDB4MS4yMzgzY2EyYjI0OTgwN2Q5NTAwNWQ5NmNmZGFlY2Q2Y3AtMiwKKyAgICAweDEuZWFkMDdjZDJlMGY3ZjE5Njc5NjQ2MzYyYmJjMGViODBwLTEsCisgICAgMHgxLjI3OWE3NHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTEKKyAgICAtMHgxLmQ0YzViYjg3MmVhNTM3NTgzNGNhMGJjYTA4OGQxZDc1cC0zLAorICAgIDB4MS5mMjY4NDBlZmQ4NmNlZWEyM2YzODhiNmExMTAyZWE0ZHAtMSwKKyAgICAtMHgxLmQ4ZjcyMHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAweDEuZDRjNWJiODcyZWE1Mzc1ODM0Y2EwYmNhMDg4ZDFkNzVwLTMsCisgICAgMHgxLmYyNjg0MGVmZDg2Y2VlYTIzZjM4OGI2YTExMDJlYTRkcC0xLAorICAgIDB4MS5kOGY3MjBwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjEzCisgICAgLTB4MS42MGYzZmE0NjBiODU4MTFkMmFlNzEwY2Q2OWVjMzY5MHAtMywKKyAgICAweDEuZjg1NmQ0OTI1MWJkMzdjNTRmMDA5NDI3MGVlY2JkMThwLTEsCisgICAgLTB4MS42MmI5NThwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjE0CisgICAgMHgxLjYwZjNmYTQ2MGI4NTgxMWQyYWU3MTBjZDY5ZWMzNjkwcC0zLAorICAgIDB4MS5mODU2ZDQ5MjUxYmQzN2M1NGYwMDk0MjcwZWVjYmQxOHAtMSwKKyAgICAweDEuNjJiOTU4cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDIxNQorICAgIC0weDEuZDdlYTNkNTZlMWU2MjQ0Yzg3ODZkNzRmMTg5ZDk4YWNwLTQsCisgICAgMHgxLmZjOTcyODNjNGY1YmQxZjc5MzIwMTk3MmI4ZGI1NTFmcC0xLAorICAgIC0weDEuZDhmNzIwcC00LAorICB9LAorICB7IC8vIEVudHJ5IDIxNgorICAgIDB4MS5kN2VhM2Q1NmUxZTYyNDRjODc4NmQ3NGYxODlkOThhY3AtNCwKKyAgICAweDEuZmM5NzI4M2M0ZjViZDFmNzkzMjAxOTcyYjhkYjU1MWZwLTEsCisgICAgMHgxLmQ4ZjcyMHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTcKKyAgICAtMHgxLmQ4YjNkZWJhNmFjNDkzYjA0YjIxMDNhMGRiYWVmMDJmcC01LAorICAgIDB4MS5mZjI1OWI3YjNkNzIxZWRmMDYzYTViZjZlN2ExZjkzY3AtMSwKKyAgICAtMHgxLmQ4ZjcyMHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAweDEuZDhiM2RlYmE2YWM0OTNiMDRiMjEwM2EwZGJhZWYwMmZwLTUsCisgICAgMHgxLmZmMjU5YjdiM2Q3MjFlZGYwNjNhNWJmNmU3YTFmOTNjcC0xLAorICAgIDB4MS5kOGY3MjBwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgMjE5CisgICAgMHgxLmQ4YjNkZWJhNmFjNDkzYjA0YjIxMDNhMGRiYWVmMDJmcC01LAorICAgIDB4MS5mZjI1OWI3YjNkNzIxZWRmMDYzYTViZjZlN2ExZjkzY3AtMSwKKyAgICAweDEuZDhmNzIwcC01LAorICB9LAorICB7IC8vIEVudHJ5IDIyMAorICAgIC0weDEuZDhiM2RlYmE2YWM0OTNiMDRiMjEwM2EwZGJhZWYwMmZwLTUsCisgICAgMHgxLmZmMjU5YjdiM2Q3MjFlZGYwNjNhNWJmNmU3YTFmOTNjcC0xLAorICAgIC0weDEuZDhmNzIwcC01LAorICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIDB4MS5kN2VhM2Q1NmUxZTYyNDRjODc4NmQ3NGYxODlkOThhY3AtNCwKKyAgICAweDEuZmM5NzI4M2M0ZjViZDFmNzkzMjAxOTcyYjhkYjU1MWZwLTEsCisgICAgMHgxLmQ4ZjcyMHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjIKKyAgICAtMHgxLmQ3ZWEzZDU2ZTFlNjI0NGM4Nzg2ZDc0ZjE4OWQ5OGFjcC00LAorICAgIDB4MS5mYzk3MjgzYzRmNWJkMWY3OTMyMDE5NzJiOGRiNTUxZnAtMSwKKyAgICAtMHgxLmQ4ZjcyMHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjMKKyAgICAweDEuNjBmM2ZhNDYwYjg1ODExZDJhZTcxMGNkNjllYzM2OTBwLTMsCisgICAgMHgxLmY4NTZkNDkyNTFiZDM3YzU0ZjAwOTQyNzBlZWNiZDE4cC0xLAorICAgIDB4MS42MmI5NThwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjI0CisgICAgLTB4MS42MGYzZmE0NjBiODU4MTFkMmFlNzEwY2Q2OWVjMzY5MHAtMywKKyAgICAweDEuZjg1NmQ0OTI1MWJkMzdjNTRmMDA5NDI3MGVlY2JkMThwLTEsCisgICAgLTB4MS42MmI5NThwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgMjI1CisgICAgMHgxLmQ0YzViYjg3MmVhNTM3NTgzNGNhMGJjYTA4OGQxZDc1cC0zLAorICAgIDB4MS5mMjY4NDBlZmQ4NmNlZWEyM2YzODhiNmExMTAyZWE0ZHAtMSwKKyAgICAweDEuZDhmNzIwcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDIyNgorICAgIC0weDEuZDRjNWJiODcyZWE1Mzc1ODM0Y2EwYmNhMDg4ZDFkNzVwLTMsCisgICAgMHgxLmYyNjg0MGVmZDg2Y2VlYTIzZjM4OGI2YTExMDJlYTRkcC0xLAorICAgIC0weDEuZDhmNzIwcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDIyNworICAgIDB4MS4yMzgzY2EyYjI0OTgwN2Q5NTAwNWQ5NmNmZGFlY2Q2Y3AtMiwKKyAgICAweDEuZWFkMDdjZDJlMGY3ZjE5Njc5NjQ2MzYyYmJjMGViODBwLTEsCisgICAgMHgxLjI3OWE3NHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjgKKyAgICAtMHgxLjIzODNjYTJiMjQ5ODA3ZDk1MDA1ZDk2Y2ZkYWVjZDZjcC0yLAorICAgIDB4MS5lYWQwN2NkMmUwZjdmMTk2Nzk2NDYzNjJiYmMwZWI4MHAtMSwKKyAgICAtMHgxLjI3OWE3NHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjkKKyAgICAweDEuNWJhYzA1ZTFlMGE3YzJkZTI4MGZjYjkzYmU2N2E0ZGFwLTIsCisgICAgMHgxLmUxOTYwMjczYTRhYWExYmQxOWVmMGNjYWE4ODc0MTgzcC0xLAorICAgIDB4MS42MmI5NThwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjMwCisgICAgLTB4MS41YmFjMDVlMWUwYTdjMmRlMjgwZmNiOTNiZTY3YTRkYXAtMiwKKyAgICAweDEuZTE5NjAyNzNhNGFhYTFiZDE5ZWYwY2NhYTg4NzQxODNwLTEsCisgICAgLTB4MS42MmI5NThwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMjMxCisgICAgMHgxLjkyYWJhODk4MWIyNWRlZGE0Y2MxODE3MjUxNzIzYTFicC0yLAorICAgIDB4MS5kNmMwYjEzZGY5OTYxM2E0OTMwNmI0ZGM2YzU3YWEwM3AtMSwKKyAgICAweDEuOWRkODNjcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzMgorICAgIC0weDEuOTJhYmE4OTgxYjI1ZGVkYTRjYzE4MTcyNTE3MjNhMWJwLTIsCisgICAgMHgxLmQ2YzBiMTNkZjk5NjEzYTQ5MzA2YjRkYzZjNTdhYTAzcC0xLAorICAgIC0weDEuOWRkODNjcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIDB4MS5jODUzYzcwNGUzYjk0MzIyMDMxZDZiNDdhZWY4NTNjOXAtMiwKKyAgICAweDEuY2E1OWM3MTlmOTYwNzVkZDZiN2EwZmY0NDNhZDU5ZGNwLTEsCisgICAgMHgxLmQ4ZjcyMHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzQKKyAgICAtMHgxLmM4NTNjNzA0ZTNiOTQzMjIwMzFkNmI0N2FlZjg1M2M5cC0yLAorICAgIDB4MS5jYTU5YzcxOWY5NjA3NWRkNmI3YTBmZjQ0M2FkNTlkY3AtMSwKKyAgICAtMHgxLmQ4ZjcyMHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzUKKyAgICAweDEuZmM3NjlhZWNkMjY1Y2ZlYTA4ZTBmZjMwYzJmYmNhY2RwLTIsCisgICAgMHgxLmJjNmJkODg5YThhNTlkYmI1NmU1NDZhMzdhZTc5OGY1cC0xLAorICAgIDB4MS4wYTBiMDJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjM2CisgICAgLTB4MS5mYzc2OWFlY2QyNjVjZmVhMDhlMGZmMzBjMmZiY2FjZHAtMiwKKyAgICAweDEuYmM2YmQ4ODlhOGE1OWRiYjU2ZTU0NmEzN2FlNzk4ZjVwLTEsCisgICAgLTB4MS4wYTBiMDJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjM3CisgICAgMHgxLjI5NTQ2NDRjZWI4ZTNhMjQ3OWM4M2FlODRhZjU3ZDNlcC0xLAorICAgIDB4MS5hMGQxZjg2MTNlYmM2MGM3ZWU2NTAyZWUxODNjODllN3AtMSwKKyAgICAweDEuM2QzZTM2cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIzOAorICAgIC0weDEuMjk1NDY0NGNlYjhlM2EyNDc5YzgzYWU4NGFmNTdkM2VwLTEsCisgICAgMHgxLmEwZDFmODYxM2ViYzYwYzdlZTY1MDJlZTE4M2M4OWU3cC0xLAorICAgIC0weDEuM2QzZTM2cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDIzOQorICAgIDB4MS4zYWFkMDBhMDkyNjhhMzlkZjE2NTNjNzBkYjkxZjE1N3AtMSwKKyAgICAweDEuOTNlMjkzYjIzYTZhYTFhZTUzNzMyMTRlYjhmYjllOTZwLTEsCisgICAgMHgxLjUyZTFmOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDAKKyAgICAtMHgxLjNhYWQwMGEwOTI2OGEzOWRmMTY1M2M3MGRiOTFmMTU3cC0xLAorICAgIDB4MS45M2UyOTNiMjNhNmFhMWFlNTM3MzIxNGViOGZiOWU5NnAtMSwKKyAgICAtMHgxLjUyZTFmOHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDEKKyAgICAweDEuNGI3NWJiYWUzODhhN2YzNDY2ZTdmMmQ2YmRjZjcyYmJwLTEsCisgICAgMHgxLjg2M2E4M2E4ZDk4MjZjNjEzNTUwOTQwNmViZTA1YzBmcC0xLAorICAgIDB4MS42ODg1YmFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjQyCisgICAgLTB4MS40Yjc1YmJhZTM4OGE3ZjM0NjZlN2YyZDZiZGNmNzJiYnAtMSwKKyAgICAweDEuODYzYTgzYThkOTgyNmM2MTM1NTA5NDA2ZWJlMDVjMGZwLTEsCisgICAgLTB4MS42ODg1YmFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjQzCisgICAgMHgxLjViYTZlOGRiMTgzMzQ3NTcxMmI5YTQyYTFhZDBkMmMycC0xLAorICAgIDB4MS43N2UwMDZjODdjYmFkZWQ2NmVjNWI5NjBjOTNjNTY4YXAtMSwKKyAgICAweDEuN2UyOTdjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI0NAorICAgIC0weDEuNWJhNmU4ZGIxODMzNDc1NzEyYjlhNDJhMWFkMGQyYzJwLTEsCisgICAgMHgxLjc3ZTAwNmM4N2NiYWRlZDY2ZWM1Yjk2MGM5M2M1NjhhcC0xLAorICAgIC0weDEuN2UyOTdjcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI0NQorICAgIDB4MS42YjM5MjBkODExNzgyODkyOGZlMTBhYzcwYmE2OWU3NnAtMSwKKyAgICAweDEuNjhkOWFkMjk3MzZjMTcwNGNhZWE2YTJkYjZlNzEyMjNwLTEsCisgICAgMHgxLjkzY2QzZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAtMHgxLjZiMzkyMGQ4MTE3ODI4OTI4ZmUxMGFjNzBiYTY5ZTc2cC0xLAorICAgIDB4MS42OGQ5YWQyOTczNmMxNzA0Y2FlYTZhMmRiNmU3MTIyM3AtMSwKKyAgICAtMHgxLjkzY2QzZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDcKKyAgICAweDEuN2EyNTQ1MDQ0MzA5ODgzNmM1MjAyMzc1ZGI0Yjg0NjJwLTEsCisgICAgMHgxLjU5MmU1NTc4YzllYzY2YWNjZWRkZDRkYzZjZTY2YjI2cC0xLAorICAgIDB4MS5hOTcxcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI0OAorICAgIC0weDEuN2EyNTQ1MDQ0MzA5ODgzNmM1MjAyMzc1ZGI0Yjg0NjJwLTEsCisgICAgMHgxLjU5MmU1NTc4YzllYzY2YWNjZWRkZDRkYzZjZTY2YjI2cC0xLAorICAgIC0weDEuYTk3MXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDkKKyAgICAweDEuODg2NDgyYWU2Nzk3YjM4MzY0ZjVjNzJjZTlhM2I3NmZwLTEsCisgICAgMHgxLjQ4ZTUyOWQ0MjllNzIxZWM4YmIxZTAxNGY5NGQ0OGYxcC0xLAorICAgIDB4MS5iZjE0YzJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjUwCisgICAgLTB4MS44ODY0ODJhZTY3OTdiMzgzNjRmNWM3MmNlOWEzYjc2ZnAtMSwKKyAgICAweDEuNDhlNTI5ZDQyOWU3MjFlYzhiYjFlMDE0Zjk0ZDQ4ZjFwLTEsCisgICAgLTB4MS5iZjE0YzJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjUxCisgICAgMHgxLjk1ZjA1NjMzN2FjYzFkMmQ1NTc1MjUyMzJlOTE1NDY3cC0xLAorICAgIDB4MS4zODA1OWM4MzNjNThlYTk3MGY3Yjk2ZDZhZGEzZDljNHAtMSwKKyAgICAweDEuZDRiODg0cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI1MgorICAgIC0weDEuOTVmMDU2MzM3YWNjMWQyZDU1NzUyNTIzMmU5MTU0NjdwLTEsCisgICAgMHgxLjM4MDU5YzgzM2M1OGVhOTcwZjdiOTZkNmFkYTNkOWM0cC0xLAorICAgIC0weDEuZDRiODg0cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI1MworICAgIDB4MS5hMmMyODk1ZWRiMGQ0YmE1MWNkYmQ1MzkwY2FjNDY4ZnAtMSwKKyAgICAweDEuMjY5NzZiMWIxNmQxOTA5MWMwOTI1OTc2NWM0YjM4NzJwLTEsCisgICAgMHgxLmVhNWMzZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTQKKyAgICAtMHgxLmEyYzI4OTVlZGIwZDRiYTUxY2RiZDUzOTBjYWM0NjhmcC0xLAorICAgIDB4MS4yNjk3NmIxYjE2ZDE5MDkxYzA5MjU5NzY1YzRiMzg3MnAtMSwKKyAgICAtMHgxLmVhNWMzZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTUKKyAgICAweDEuYzFlOTg4Yjk1NjE0YWJkNjVkM2Q4MTFmNWM4ODAzOWJwLTEsCisgICAgMHgxLmU4YzQwNDA2NzhkMmVmNzM2MzMzYTQ1MzdhMTExM2ExcC0yLAorICAgIDB4MS4xMmJkOTJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTYKKyAgICAtMHgxLmMxZTk4OGI5NTYxNGFiZDY1ZDNkODExZjVjODgwMzlicC0xLAorICAgIDB4MS5lOGM0MDQwNjc4ZDJlZjczNjMzM2E0NTM3YTExMTNhMXAtMiwKKyAgICAtMHgxLjEyYmQ5MnAwLAorICB9LAorICB7IC8vIEVudHJ5IDI1NworICAgIDB4MS5kMjk0ZDJlMDZiM2QxMGE0ZGUyNjMxNzJkNTBmNDQ5N3AtMSwKKyAgICAweDEuYTVhNGM4ZjU5OGZhMDA3ODk3MTMxNmViNDkwN2Y5N2JwLTIsCisgICAgMHgxLjI1N2IyNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI1OAorICAgIC0weDEuZDI5NGQyZTA2YjNkMTBhNGRlMjYzMTcyZDUwZjQ0OTdwLTEsCisgICAgMHgxLmE1YTRjOGY1OThmYTAwNzg5NzEzMTZlYjQ5MDdmOTdicC0yLAorICAgIC0weDEuMjU3YjI0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjU5CisgICAgMHgxLmUwYzA0YmI2NWJkMzMwMTJiZTcyYTM0MGRmMmMwNDRicC0xLAorICAgIDB4MS42MDQzNWJlZWQxMGNhMDU3NjlmMGEzZDg2YTVhMjBmM3AtMiwKKyAgICAweDEuMzgzOGI2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgLTB4MS5lMGMwNGJiNjViZDMzMDEyYmU3MmEzNDBkZjJjMDQ0YnAtMSwKKyAgICAweDEuNjA0MzViZWVkMTBjYTA1NzY5ZjBhM2Q4NmE1YTIwZjNwLTIsCisgICAgLTB4MS4zODM4YjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjEKKyAgICAweDEuZWM1ODg0ZWI5OTBjM2RlYWFlZWJkM2YwZjg0ZDY5NjJwLTEsCisgICAgMHgxLjE4ZmVlMGZjNDVjMzFhNzliMmI5NDc4YjFmNzJhOWVicC0yLAorICAgIDB4MS40YWY2NDhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAtMHgxLmVjNTg4NGViOTkwYzNkZWFhZWViZDNmMGY4NGQ2OTYycC0xLAorICAgIDB4MS4xOGZlZTBmYzQ1YzMxYTc5YjJiOTQ3OGIxZjcyYTllYnAtMiwKKyAgICAtMHgxLjRhZjY0OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI2MworICAgIDB4MS5mNTRkOTgzNWIwZTY2ZTE3NjEyMTYwMjcyNTIxZjNiMHAtMSwKKyAgICAweDEuYTA3MjI1MjA5MGMzMzgyODc2N2FlZTNlMDQwY2NkZGZwLTMsCisgICAgMHgxLjVkYjNkYXAwLAorICB9LAorICB7IC8vIEVudHJ5IDI2NAorICAgIC0weDEuZjU0ZDk4MzViMGU2NmUxNzYxMjE2MDI3MjUyMWYzYjBwLTEsCisgICAgMHgxLmEwNzIyNTIwOTBjMzM4Mjg3NjdhZWUzZTA0MGNjZGRmcC0zLAorICAgIC0weDEuNWRiM2RhcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjY1CisgICAgMHgxLmZiOTMzZDFjZDkzMTY4NWU5MDJlNDAzYTFiYWFlY2ZkcC0xLAorICAgIDB4MS4wY2FiNzcwM2E4ZTlkYWNjNGFkMDExODhiNDQzY2ZlZXAtMywKKyAgICAweDEuNzA3MTZjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgLTB4MS5mYjkzM2QxY2Q5MzE2ODVlOTAyZTQwM2ExYmFhZWNmZHAtMSwKKyAgICAweDEuMGNhYjc3MDNhOGU5ZGFjYzRhZDAxMTg4YjQ0M2NmZWVwLTMsCisgICAgLTB4MS43MDcxNmNwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjcKKyAgICAweDEuZmYyMGQ5ZDNlODk4NGZlYzMzOTgyZTQyZjU4ODRmMmNwLTEsCisgICAgMHgxLmRkZDE3MWEzYzk4NTFlNzgxOWI1ZTRmNmY5MGU3NjNkcC01LAorICAgIDB4MS44MzJlZmVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjgKKyAgICAtMHgxLmZmMjBkOWQzZTg5ODRmZWMzMzk4MmU0MmY1ODg0ZjJjcC0xLAorICAgIDB4MS5kZGQxNzFhM2M5ODUxZTc4MTliNWU0ZjZmOTBlNzYzZHAtNSwKKyAgICAtMHgxLjgzMmVmZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDI2OQorICAgIDB4MS5mZmYxOGYwM2E0YjdlNmFhY2Y1MWY4MzkzMWU4NTA0MnAtMSwKKyAgICAtMHgxLmU2NjhjYjE1NGVlYTY4YmJjN2Y4MTU0ZjQ2YjJlNTM2cC03LAorICAgIDB4MS45NWVjOTBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzAKKyAgICAtMHgxLmZmZjE4ZjAzYTRiN2U2YWFjZjUxZjgzOTMxZTg1MDQycC0xLAorICAgIC0weDEuZTY2OGNiMTU0ZWVhNjhiYmM3ZjgxNTRmNDZiMmU1MzZwLTcsCisgICAgLTB4MS45NWVjOTBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzEKKyAgICAweDEuZmUwNDNmODc1YzZlZDRhMmMxYjhkNjlhMDlmY2Y1NzhwLTEsCisgICAgLTB4MS42ODJmMmJiODdhOGY1MDExNzM1MDk0MTc2YzliNmRhY3AtNCwKKyAgICAweDEuYThhYTFjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjcyCisgICAgLTB4MS5mZTA0M2Y4NzVjNmVkNGEyYzFiOGQ2OWEwOWZjZjU3OHAtMSwKKyAgICAtMHgxLjY4MmYyYmI4N2E4ZjUwMTE3MzUwOTQxNzZjOWI2ZGFjcC00LAorICAgIC0weDEuYThhYTFjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjczCisgICAgMHgxLmIzZDM2YTk2ODgwY2Y2OWQ5ODg0YTQ5ZjUzODFlOTE3cC0xLAorICAgIDB4MS4wY2IzNDQ5YTBkMGE5ZTA2NDNkNDFmNGE1YjBmN2RiN3AtMSwKKyAgICAweDEuMDRhZmY4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjc0CisgICAgLTB4MS5iM2QzNmE5Njg4MGNmNjlkOTg4NGE0OWY1MzgxZTkxN3AtMSwKKyAgICAweDEuMGNiMzQ0OWEwZDBhOWUwNjQzZDQxZjRhNWIwZjdkYjdwLTEsCisgICAgLTB4MS4wNGFmZjhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzUKKyAgICAweDEuYjNkNDFhZWJjZjM5MWMzMGMzZDJmMWVlN2I3OTcxMGNwLTEsCisgICAgMHgxLjBjYjIyNjk3MTUzYmNmMWY4YTYzYWNkZGQ5NmM1NGNicC0xLAorICAgIDB4MS4wNGIwYTBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzYKKyAgICAtMHgxLmIzZDQxYWViY2YzOTFjMzBjM2QyZjFlZTdiNzk3MTBjcC0xLAorICAgIDB4MS4wY2IyMjY5NzE1M2JjZjFmOGE2M2FjZGRkOTZjNTRjYnAtMSwKKyAgICAtMHgxLjA0YjBhMHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI3NworICAgIDB4MS5iM2Q0Y2I0MDVhYjMyOTJiZTdkZjViMWI5ODAzMmZiZXAtMSwKKyAgICAweDEuMGNiMTA4OTNhOWI1NDcxYTQ0MzU2MDcyY2IzM2IzOTVwLTEsCisgICAgMHgxLjA0YjE0OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI3OAorICAgIC0weDEuYjNkNGNiNDA1YWIzMjkyYmU3ZGY1YjFiOTgwMzJmYmVwLTEsCisgICAgMHgxLjBjYjEwODkzYTliNTQ3MWE0NDM1NjA3MmNiMzNiMzk1cC0xLAorICAgIC0weDEuMDRiMTQ4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgMHgxLmIzZDU3Yjk0MmE3YWQxOWU5Yjk4OTJjOTMxOWUxYmU2cC0xLAorICAgIDB4MS4wY2FmZWE4ZmNhNzc4MTIzNmE1N2U1YjFjOGFlZDM5Y3AtMSwKKyAgICAweDEuMDRiMWYwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjgwCisgICAgLTB4MS5iM2Q1N2I5NDJhN2FkMTllOWI5ODkyYzkzMTllMWJlNnAtMSwKKyAgICAweDEuMGNhZmVhOGZjYTc3ODEyMzZhNTdlNWIxYzhhZWQzOWNwLTEsCisgICAgLTB4MS4wNGIxZjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODEKKyAgICAweDEuYjNkNjJiZTczZThmYzk5OGM2YzJkZjY1OTA0MjU2MTNwLTEsCisgICAgMHgxLjBjYWVjYzhiNzc4MmY4NjgyN2FmOTJiMGIyMzc0NTEwcC0xLAorICAgIDB4MS4wNGIyOThwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAtMHgxLmIzZDYyYmU3M2U4ZmM5OThjNmMyZGY2NTkwNDI1NjEzcC0xLAorICAgIDB4MS4wY2FlY2M4Yjc3ODJmODY4MjdhZjkyYjBiMjM3NDUxMHAtMSwKKyAgICAtMHgxLjA0YjI5OHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI4MworICAgIDB4MS5iM2Q2ZGMzOTk2ZjFjNTJhYTFmODNiZGVlMWQwZTAyM3AtMSwKKyAgICAweDEuMGNhZGFlODZiMGQ4MjgxNWQ4ZjYzMmU2N2M3ZTFhOTlwLTEsCisgICAgMHgxLjA0YjM0MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI4NAorICAgIC0weDEuYjNkNmRjMzk5NmYxYzUyYWExZjgzYmRlZTFkMGUwMjNwLTEsCisgICAgMHgxLjBjYWRhZTg2YjBkODI4MTVkOGY2MzJlNjdjN2UxYTk5cC0xLAorICAgIC0weDEuMDRiMzQwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjg1CisgICAgMHgxLmIzZDc4YzhiMzNhMDc4NjRiNmE4Nzg1NzNkYjM0YmNhcC0xLAorICAgIDB4MS4wY2FjOTA4MTc2Nzc4YjVhMGNiYWQyMWVlNzVjZTc2NXAtMSwKKyAgICAweDEuMDRiM2U4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjg2CisgICAgLTB4MS5iM2Q3OGM4YjMzYTA3ODY0YjZhODc4NTczZGIzNGJjYXAtMSwKKyAgICAweDEuMGNhYzkwODE3Njc3OGI1YTBjYmFkMjFlZTc1Y2U3NjVwLTEsCisgICAgLTB4MS4wNGIzZThwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODcKKyAgICAweDEuYjNkODNjZGMxNDliOTc1N2RmMTk1YWQ4ODVhYjUyMDFwLTEsCisgICAgMHgxLjBjYWI3MjdiYzg2MTlkNjI4MzYxODc2ZTFmMzBhNjMzcC0xLAorICAgIDB4MS4wNGI0OTBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODgKKyAgICAtMHgxLmIzZDgzY2RjMTQ5Yjk3NTdkZjE5NWFkODg1YWI1MjAxcC0xLAorICAgIDB4MS4wY2FiNzI3YmM4NjE5ZDYyODM2MTg3NmUxZjMwYTYzM3AtMSwKKyAgICAtMHgxLjA0YjQ5MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI4OQorICAgIDB4MS5iM2Q4ZThmOTkwODM2MGIzOGNkMTNmY2JmNjIyNGQ5M3AtMSwKKyAgICAweDEuMGNhYTViNDUwYTQzMjRmMjA0YTU1NmIwNzJkYTEyNGFwLTEsCisgICAgMHgxLjA0YjUzNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDI5MAorICAgIC0weDEuYjNkOGU4Zjk5MDgzNjBiMzhjZDEzZmNiZjYyMjRkOTNwLTEsCisgICAgMHgxLjBjYWE1YjQ1MGE0MzI0ZjIwNGE1NTZiMDcyZGExMjRhcC0xLAorICAgIC0weDEuMDRiNTM0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMjkxCisgICAgLTAuMGYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDksCisgIH0sCisgIHsgLy8gRW50cnkgMjkyCisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ5LAorICB9LAorICB7IC8vIEVudHJ5IDI5MworICAgIDAuMCwKKyAgICAweDEucDAsCisgICAgMC4wLAorICB9LAorICB7IC8vIEVudHJ5IDI5NAorICAgIDAuMGYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTE0OSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTUKKyAgICAtMC4wZiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTE0OSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTYKKyAgICAweDEuMTc3M2QzNmE2NGRmNjFkNjcxNWU2MGFmMDYzNTU5ZjRwLTEsCisgICAgMHgxLmFkMDJjOGI5Y2M5M2Y0NDhlZjRlYjA2OGE4ODkyMmEzcC0xLAorICAgIDB4MS4yNzlhNzJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjk3CisgICAgLTB4MS4xNzczZDM2YTY0ZGY2MWQ2NzE1ZTYwYWYwNjM1NTlmNHAtMSwKKyAgICAweDEuYWQwMmM4YjljYzkzZjQ0OGVmNGViMDY4YTg4OTIyYTNwLTEsCisgICAgLTB4MS4yNzlhNzJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMjk4CisgICAgMHgxLjE3NzNkNTE3NjdhNzhmZTkxYjU1ZjZiN2U1ZmQ0NGMycC0xLAorICAgIDB4MS5hZDAyYzdhMjU4YmZiMzYyYWJiZTg2ZmI0OGY0ZTk4YnAtMSwKKyAgICAweDEuMjc5YTc0cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDI5OQorICAgIC0weDEuMTc3M2Q1MTc2N2E3OGZlOTFiNTVmNmI3ZTVmZDQ0YzJwLTEsCisgICAgMHgxLmFkMDJjN2EyNThiZmIzNjJhYmJlODZmYjQ4ZjRlOThicC0xLAorICAgIC0weDEuMjc5YTc0cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMwMAorICAgIDB4MS4xNzczZDZjNDZhNmVhNjg3ZjAzNjI1MTk0ZDI1YmI1MnAtMSwKKyAgICAweDEuYWQwMmM2OGFlNGU5YzU3OWEwOGMwNGNlNTliZTQwMDJwLTEsCisgICAgMHgxLjI3OWE3NnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAtMHgxLjE3NzNkNmM0NmE2ZWE2ODdmMDM2MjUxOTRkMjViYjUycC0xLAorICAgIDB4MS5hZDAyYzY4YWU0ZTljNTc5YTA4YzA0Y2U1OWJlNDAwMnAtMSwKKyAgICAtMHgxLjI3OWE3NnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDIKKyAgICAweDEuZjk1YjhmNDA1MDEwNTdhYzQ5YWNlZjEzOTkzYjBjNTVwLTEsCisgICAgLTB4MS40OGQxYzllOThiNmMwODc4NGYxMDA0MGY0N2ExMjE5MXAtMywKKyAgICAweDEuYmI2N2FjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgLTB4MS5mOTViOGY0MDUwMTA1N2FjNDlhY2VmMTM5OTNiMGM1NXAtMSwKKyAgICAtMHgxLjQ4ZDFjOWU5OGI2YzA4Nzg0ZjEwMDQwZjQ3YTEyMTkxcC0zLAorICAgIC0weDEuYmI2N2FjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzA0CisgICAgMHgxLmY5NWI4ZTliZTcyNzcwMmY3NTk1YWUxMDAwYTE0YTFhcC0xLAorICAgIC0weDEuNDhkMWQ5YjQ2N2UzNzk1NTMzNzMxMWRlY2QwOWZjNzRwLTMsCisgICAgMHgxLmJiNjdhZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDMwNQorICAgIC0weDEuZjk1YjhlOWJlNzI3NzAyZjc1OTVhZTEwMDBhMTRhMWFwLTEsCisgICAgLTB4MS40OGQxZDliNDY3ZTM3OTU1MzM3MzExZGVjZDA5ZmM3NHAtMywKKyAgICAtMHgxLmJiNjdhZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDMwNgorICAgIDB4MS5mOTViOGRmNzdlMzZhMzQ0NjcwZWQwNzE0OTE5MWE1OHAtMSwKKyAgICAtMHgxLjQ4ZDFlOTdmNDQ1NWM2ZWFiMTA0ODAyMjIzOGIyYmQwcC0zLAorICAgIDB4MS5iYjY3YjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDcKKyAgICAtMHgxLmY5NWI4ZGY3N2UzNmEzNDQ2NzBlZDA3MTQ5MTkxYTU4cC0xLAorICAgIC0weDEuNDhkMWU5N2Y0NDU1YzZlYWIxMDQ4MDIyMjM4YjJiZDBwLTMsCisgICAgLTB4MS5iYjY3YjBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICAweDEuYjFkODJlODM1YTkxOGRlMThmNWZkYWRjOGIxMjQwY2ZwLTIsCisgICAgMHgxLmNmYzZkMDExYTBlNWQwZmNlYmI1NGI1ZmVkNjcyOTQwcC0xLAorICAgIDB4MS5iZmZmZmVwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzA5CisgICAgLTB4MS5iMWQ4MmU4MzVhOTE4ZGUxOGY1ZmRhZGM4YjEyNDBjZnAtMiwKKyAgICAweDEuY2ZjNmQwMTFhMGU1ZDBmY2ViYjU0YjVmZWQ2NzI5NDBwLTEsCisgICAgLTB4MS5iZmZmZmVwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzEwCisgICAgMHgxLmIxZDgzMDUzMjE2MTY5NDc2ZjRkMTk4MmI5YjE0YWIxcC0yLAorICAgIDB4MS5jZmM2Y2ZhNTJhZDlmNjJkNmQ1NDIzY2E4MzM5YTAwYXAtMSwKKyAgICAweDEuYzBwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzExCisgICAgLTB4MS5iMWQ4MzA1MzIxNjE2OTQ3NmY0ZDE5ODJiOWIxNGFiMXAtMiwKKyAgICAweDEuY2ZjNmNmYTUyYWQ5ZjYyZDZkNTQyM2NhODMzOWEwMGFwLTEsCisgICAgLTB4MS5jMHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTIKKyAgICAweDEuYjFkODMyMjJlODMwZDgzNzQzMjU4ZmQwOTA0MGVlNTZwLTIsCisgICAgMHgxLmNmYzZjZjM4YjRjZGE3NmMzYjA5YjE3ZTlkZWIxOWVhcC0xLAorICAgIDB4MS5jMDAwMDJwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzEzCisgICAgLTB4MS5iMWQ4MzIyMmU4MzBkODM3NDMyNThmZDA5MDQwZWU1NnAtMiwKKyAgICAweDEuY2ZjNmNmMzhiNGNkYTc2YzNiMDliMTdlOWRlYjE5ZWFwLTEsCisgICAgLTB4MS5jMDAwMDJwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzE0CisgICAgMHgxLjQ0ZWIzNjkxNDI4MDYyYjI3OTI1YzU4NWFkNTlkNjJhcC0xLAorICAgIDB4MS44YmIxMDZlYWM3Yzc1ZDMzZmJiMTk0NDYzMTNlY2MyZnAtMSwKKyAgICAweDEuNWZmZmZlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMxNQorICAgIC0weDEuNDRlYjM2OTE0MjgwNjJiMjc5MjVjNTg1YWQ1OWQ2MmFwLTEsCisgICAgMHgxLjhiYjEwNmVhYzdjNzVkMzNmYmIxOTQ0NjMxM2VjYzJmcC0xLAorICAgIC0weDEuNWZmZmZlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDMxNgorICAgIDB4MS40NGViMzgxY2YzODZhYjA0YTRmODY1NmFiZWE4MGI4M3AtMSwKKyAgICAweDEuOGJiMTA1YTVkYzkwMDYxOGY4MGZhNTFkMzAzYzY5cC0xLAorICAgIDB4MS42MHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTcKKyAgICAtMHgxLjQ0ZWIzODFjZjM4NmFiMDRhNGY4NjU2YWJlYTgwYjgzcC0xLAorICAgIDB4MS44YmIxMDVhNWRjOTAwNjE4ZjgwZmE1MWQzMDNjNjlwLTEsCisgICAgLTB4MS42MHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTgKKyAgICAweDEuNDRlYjM5YThhNDhiYWU2Yjk4YWUxMWM5NDAwNTM1ZTVwLTEsCisgICAgMHgxLjhiYjEwNDYwZjE1NzIzNGNlZWM3ZDk2NDRhMWE3OGU1cC0xLAorICAgIDB4MS42MDAwMDJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzE5CisgICAgLTB4MS40NGViMzlhOGE0OGJhZTZiOThhZTExYzk0MDA1MzVlNXAtMSwKKyAgICAweDEuOGJiMTA0NjBmMTU3MjM0Y2VlYzdkOTY0NGExYTc4ZTVwLTEsCisgICAgLTB4MS42MDAwMDJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzIwCisgICAgMHgxLmRhZDkwMTdiOTY0MDhjMzc1ZDRmYWYwZTQ3NzZkMWZjcC0xLAorICAgIDB4MS43ZWY0OGI5YTZmZDVjMjRmNWVjMzk4MzllMTcyOWI3OHAtMiwKKyAgICAweDEuMmZmZmZlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzIxCisgICAgLTB4MS5kYWQ5MDE3Yjk2NDA4YzM3NWQ0ZmFmMGU0Nzc2ZDFmY3AtMSwKKyAgICAweDEuN2VmNDhiOWE2ZmQ1YzI0ZjVlYzM5ODM5ZTE3MjliNzhwLTIsCisgICAgLTB4MS4yZmZmZmVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjIKKyAgICAweDEuZGFkOTAyZmE4YWM4NzBmNTJmMWI4NDNhYzgzYmMzZWRwLTEsCisgICAgMHgxLjdlZjQ4NDJmMGJjY2Q2MGQ0YTUwMWRjOGJjNGI1N2IzcC0yLAorICAgIDB4MS4zMHAwLAorICB9LAorICB7IC8vIEVudHJ5IDMyMworICAgIC0weDEuZGFkOTAyZmE4YWM4NzBmNTJmMWI4NDNhYzgzYmMzZWRwLTEsCisgICAgMHgxLjdlZjQ4NDJmMGJjY2Q2MGQ0YTUwMWRjOGJjNGI1N2IzcC0yLAorICAgIC0weDEuMzBwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjQKKyAgICAweDEuZGFkOTA0Nzk3ZjQ4ZWE0ZWY0ZmQyZTQ3ZmU0ZDUyYmRwLTEsCisgICAgMHgxLjdlZjQ3Y2MzYTdiZGVkZjkyNTIwNzQyNjNkOGE0NTk2cC0yLAorICAgIDB4MS4zMDAwMDJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAtMHgxLmRhZDkwNDc5N2Y0OGVhNGVmNGZkMmU0N2ZlNGQ1MmJkcC0xLAorICAgIDB4MS43ZWY0N2NjM2E3YmRlZGY5MjUyMDc0MjYzZDhhNDU5NnAtMiwKKyAgICAtMHgxLjMwMDAwMnAwLAorICB9LAorICB7IC8vIEVudHJ5IDMyNgorICAgIDB4MS40YjcwODA5M2M5Y2I0NTM1NWU3ODIxZTVhYWQ5OGNlOHAtMSwKKyAgICAtMHgxLjg2M2VmNTA4NWJjYzM1OGQyYWU4NTI1YmYzOWYwYzQwcC0xLAorICAgIDB4MS4zN2ZmZmVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjcKKyAgICAtMHgxLjRiNzA4MDkzYzljYjQ1MzU1ZTc4MjFlNWFhZDk4Y2U4cC0xLAorICAgIC0weDEuODYzZWY1MDg1YmNjMzU4ZDJhZTg1MjViZjM5ZjBjNDBwLTEsCisgICAgLTB4MS4zN2ZmZmVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjgKKyAgICAweDEuNGI3MDdhN2FjZGVjYzg0MjM5NDYzZTc4YjMxMmZhMTBwLTEsCisgICAgLTB4MS44NjNlZmEzNjFkYzI1MmJjYTFlYWVlZDM5NzQ5YmVkN3AtMSwKKyAgICAweDEuMzhwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjkKKyAgICAtMHgxLjRiNzA3YTdhY2RlY2M4NDIzOTQ2M2U3OGIzMTJmYTEwcC0xLAorICAgIC0weDEuODYzZWZhMzYxZGMyNTJiY2ExZWFlZWQzOTc0OWJlZDdwLTEsCisgICAgLTB4MS4zOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDMzMAorICAgIDB4MS40YjcwNzQ2MWQxZjk5NDQ3NmM2NzdjNWFkNWRkYjI2NHAtMSwKKyAgICAtMHgxLjg2M2VmZjYzZGZhMDBiZmM3NThiYWY0Njk0NjlkNzQxcC0xLAorICAgIDB4MS4zODAwMDJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzEKKyAgICAtMHgxLjRiNzA3NDYxZDFmOTk0NDc2YzY3N2M1YWQ1ZGRiMjY0cC0xLAorICAgIC0weDEuODYzZWZmNjNkZmEwMGJmYzc1OGJhZjQ2OTQ2OWQ3NDFwLTEsCisgICAgLTB4MS4zODAwMDJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzIKKyAgICAweDEuMDY2ZTdmNzA1YTZjYTJiOWUxMDdmN2RjOWYzYjI2ZTZwLTQsCisgICAgMHgxLmZlZjJiMmQwYTEwZTI3MzljNTY2OTM2NDgwYTE0NzlicC0xLAorICAgIDB4MS4wNjljOGNwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgMzMzCisgICAgLTB4MS4wNjZlN2Y3MDVhNmNhMmI5ZTEwN2Y3ZGM5ZjNiMjZlNnAtNCwKKyAgICAweDEuZmVmMmIyZDBhMTBlMjczOWM1NjY5MzY0ODBhMTQ3OWJwLTEsCisgICAgLTB4MS4wNjljOGNwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgMzM0CisgICAgMHgxLjA1ZTQ3NmQyN2ZlYmM4YjdlOTY5MDAwOWIzNjdjMzI3cC0zLAorICAgIDB4MS5mYmNiZTY4ZGQxMGJhZDBhMjI5Y2NiYjU4MGNjNTQzNnAtMSwKKyAgICAweDEuMDY5YzhjcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDMzNQorICAgIC0weDEuMDVlNDc2ZDI3ZmViYzhiN2U5NjkwMDA5YjM2N2MzMjdwLTMsCisgICAgMHgxLmZiY2JlNjhkZDEwYmFkMGEyMjljY2JiNTgwY2M1NDM2cC0xLAorICAgIC0weDEuMDY5YzhjcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDMzNgorICAgIDB4MS44NzdlMmRlNWM5YTA2NmI4ZGI1OTVhZGMxNDlhZjBjMHAtMywKKyAgICAweDEuZjY4ZWViZWY3MmU3ZjYxMjZiM2YzZGRlNjQ2YTc1NWNwLTEsCisgICAgMHgxLjg5ZWFkMnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzcKKyAgICAtMHgxLjg3N2UyZGU1YzlhMDY2YjhkYjU5NWFkYzE0OWFmMGMwcC0zLAorICAgIDB4MS5mNjhlZWJlZjcyZTdmNjEyNmIzZjNkZGU2NDZhNzU1Y3AtMSwKKyAgICAtMHgxLjg5ZWFkMnAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzgKKyAgICAweDEuMDNiZTA3YWNiOWRhYjcxOWI0MzQzYTMzYjlmYTZhZmVwLTIsCisgICAgMHgxLmVmNDE0NTlkMmU5MGVhMWI3ZmFhZDdmYWJkMWZkNDQ0cC0xLAorICAgIDB4MS4wNjljOGNwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgLTB4MS4wM2JlMDdhY2I5ZGFiNzE5YjQzNDNhMzNiOWZhNmFmZXAtMiwKKyAgICAweDEuZWY0MTQ1OWQyZTkwZWExYjdmYWFkN2ZhYmQxZmQ0NDRwLTEsCisgICAgLTB4MS4wNjljOGNwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzQwCisgICAgMHgxLjQyYWJiYzViM2IyZjkxZThlY2U0NmU1ZWZmZDI4MzY5cC0yLAorICAgIDB4MS5lNWVhYTIzYTI3ZmU4ZDY4OTBhM2VkYWNlMWM2MTk5OHAtMSwKKyAgICAweDEuNDg0M2IwcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDM0MQorICAgIC0weDEuNDJhYmJjNWIzYjJmOTFlOGVjZTQ2ZTVlZmZkMjgzNjlwLTIsCisgICAgMHgxLmU1ZWFhMjNhMjdmZThkNjg5MGEzZWRhY2UxYzYxOTk4cC0xLAorICAgIC0weDEuNDg0M2IwcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDM0MgorICAgIDB4MS44MDQ2MDE0MTFkOTNmNDc1MDkxOTY3MDA2MWRlMDdkOXAtMiwKKyAgICAweDEuZGE5NGQ0Yjk5YzNhOWE1ZTBkMWZjODZkNTMzNjlhODRwLTEsCisgICAgMHgxLjg5ZWFkNHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDMKKyAgICAtMHgxLjgwNDYwMTQxMWQ5M2Y0NzUwOTE5NjcwMDYxZGUwN2Q5cC0yLAorICAgIDB4MS5kYTk0ZDRiOTljM2E5YTVlMGQxZmM4NmQ1MzM2OWE4NHAtMSwKKyAgICAtMHgxLjg5ZWFkNHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDQKKyAgICAweDEuYmM0YzA4YWYzNTYwODhiMTY5NDk5NWJmYWY4YTI5N2JwLTIsCisgICAgMHgxLmNkNGJjOWFmYzAxMjMwYjJmOTgyZjY5NjhkYWI3ZjA1cC0xLAorICAgIDB4MS5jYjkxZjhwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzQ1CisgICAgLTB4MS5iYzRjMDhhZjM1NjA4OGIxNjk0OTk1YmZhZjhhMjk3YnAtMiwKKyAgICAweDEuY2Q0YmM5YWZjMDEyMzBiMmY5ODJmNjk2OGRhYjdmMDVwLTEsCisgICAgLTB4MS5jYjkxZjhwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgMzQ2CisgICAgMHgxLmY2N2VhZTM0ZGMwYjQyYjQ2NWZkMmEzZmIwNzU2NGE0cC0yLAorICAgIDB4MS5iZTFkN2FkZjA3N2RlZjJhMzYwZmVjMjNkYmJjZWYwOXAtMSwKKyAgICAweDEuMDY5YzhlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM0NworICAgIC0weDEuZjY3ZWFlMzRkYzBiNDJiNDY1ZmQyYTNmYjA3NTY0YTRwLTIsCisgICAgMHgxLmJlMWQ3YWRmMDc3ZGVmMmEzNjBmZWMyM2RiYmNlZjA5cC0xLAorICAgIC0weDEuMDY5YzhlcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM0OAorICAgIDB4MS4xNzUwNWM4NjIzMTg5OGZkODZiMThkMjI4MmQ5M2VlZHAtMSwKKyAgICAweDEuYWQxOWUwODQ3ZDI1ZjNhYTE0MjI4OWRhYjU1N2JmOTZwLTEsCisgICAgMHgxLjI3NzAyMHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDkKKyAgICAtMHgxLjE3NTA1Yzg2MjMxODk4ZmQ4NmIxOGQyMjgyZDkzZWVkcC0xLAorICAgIDB4MS5hZDE5ZTA4NDdkMjVmM2FhMTQyMjg5ZGFiNTU3YmY5NnAtMSwKKyAgICAtMHgxLjI3NzAyMHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTAKKyAgICAweDEuMzIzYjhlNDBkMTY1NzVlNTBkYzdiNmU1NjdiYjUwODRwLTEsCisgICAgMHgxLjlhNTJlMDhiMTkxYmQ1NTUxMmM4MzY1MDc0ZjE5ODdmcC0xLAorICAgIDB4MS40ODQzYjJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzUxCisgICAgLTB4MS4zMjNiOGU0MGQxNjU3NWU1MGRjN2I2ZTU2N2JiNTA4NHAtMSwKKyAgICAweDEuOWE1MmUwOGIxOTFiZDU1NTEyYzgzNjUwNzRmMTk4N2ZwLTEsCisgICAgLTB4MS40ODQzYjJwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzUyCisgICAgMHgxLjRiZTQ5YjA4YTFlMTYyOWNiZGFhNTA3ZTE4MjU1Y2Q4cC0xLAorICAgIDB4MS44NWRjM2JiN2MyZTlhYmI1Y2NjYjZkOTZkMTJkMzljNHAtMSwKKyAgICAweDEuNjkxNzQ0cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM1MworICAgIC0weDEuNGJlNDliMDhhMWUxNjI5Y2JkYWE1MDdlMTgyNTVjZDhwLTEsCisgICAgMHgxLjg1ZGMzYmI3YzJlOWFiYjVjY2NiNmQ5NmQxMmQzOWM0cC0xLAorICAgIC0weDEuNjkxNzQ0cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM1NAorICAgIDB4MS42NDMwODQ3ZGJiYmZkNDZjYmViYmM2ZDVmNTFjN2M0OXAtMSwKKyAgICAweDEuNmZjYjc4ZTFjZDY1ZDJlNGZkZTcxMThjYWFjNzlkNmRwLTEsCisgICAgMHgxLjg5ZWFkNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTUKKyAgICAtMHgxLjY0MzA4NDdkYmJiZmQ0NmNiZWJiYzZkNWY1MWM3YzQ5cC0xLAorICAgIDB4MS42ZmNiNzhlMWNkNjVkMmU0ZmRlNzExOGNhYWM3OWQ2ZHAtMSwKKyAgICAtMHgxLjg5ZWFkNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTYKKyAgICAweDEuN2IwNWJiODdiMzg4NDRlNTYwMDNjNDFlZjgwNGIyNzNwLTEsCisgICAgMHgxLjU4MzdjZTRkYzgzNWQ0YTU0NTRlYzBhMWJiMzk0MDgxcC0xLAorICAgIDB4MS5hYWJlNjhwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzU3CisgICAgLTB4MS43YjA1YmI4N2IzODg0NGU1NjAwM2M0MWVmODA0YjI3M3AtMSwKKyAgICAweDEuNTgzN2NlNGRjODM1ZDRhNTQ1NGVjMGExYmIzOTQwODFwLTEsCisgICAgLTB4MS5hYWJlNjhwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgMzU4CisgICAgMHgxLjkwNGMzYjM4OWQ1NWQzZGVkZGIzOWQwNWViMzY2NTcxcC0xLAorICAgIDB4MS4zZjNhMDk0Mjc5NjZlOTUxODgwMmRlZTNiZjQ0M2E5NXAtMSwKKyAgICAweDEuY2I5MWZhcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM1OQorICAgIC0weDEuOTA0YzNiMzg5ZDU1ZDNkZWRkYjM5ZDA1ZWIzNjY1NzFwLTEsCisgICAgMHgxLjNmM2EwOTQyNzk2NmU5NTE4ODAyZGVlM2JmNDQzYTk1cC0xLAorICAgIC0weDEuY2I5MWZhcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDM2MAorICAgIDB4MS5hM2VkYTIxMTc5OGE4MjY5N2Q2MjQzMWY5YWU0NmNjNHAtMSwKKyAgICAweDEuMjRlYzczZjFhZWVmNDk0MGJiOGRhMTlhODJiYmM0OWZwLTEsCisgICAgMHgxLmVjNjU4Y3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjEKKyAgICAtMHgxLmEzZWRhMjExNzk4YTgyNjk3ZDYyNDMxZjlhZTQ2Y2M0cC0xLAorICAgIDB4MS4yNGVjNzNmMWFlZWY0OTQwYmI4ZGExOWE4MmJiYzQ5ZnAtMSwKKyAgICAtMHgxLmVjNjU4Y3AtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjIKKyAgICAweDEuYjVkNTQ4ODNmY2I2MTIzYmMyOGFhYzkxZjA4NWU0ZWVwLTEsCisgICAgMHgxLjA5NmFiYjg2MmY5YmQ1NTE1OTgyYzI4MThjMzMyZmY5cC0xLAorICAgIDB4MS4wNjljOGVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjMKKyAgICAtMHgxLmI1ZDU0ODgzZmNiNjEyM2JjMjhhYWM5MWYwODVlNGVlcC0xLAorICAgIDB4MS4wOTZhYmI4NjJmOWJkNTUxNTk4MmMyODE4YzMzMmZmOXAtMSwKKyAgICAtMHgxLjA2OWM4ZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM2NAorICAgIDB4MS5jNWYwNWEwMTM1ZDQ4ODJjNzY4Y2RmMThlMmUxMTEyY3AtMSwKKyAgICAweDEuZDlhMzljMGRkZGM2NTRjNzE3ZTMwMzZkYTVkZDY4NWNwLTIsCisgICAgMHgxLjE3MDY1NnAwLAorICB9LAorICB7IC8vIEVudHJ5IDM2NQorICAgIC0weDEuYzVmMDVhMDEzNWQ0ODgyYzc2OGNkZjE4ZTJlMTExMmNwLTEsCisgICAgMHgxLmQ5YTM5YzBkZGRjNjU0YzcxN2UzMDM2ZGE1ZGQ2ODVjcC0yLAorICAgIC0weDEuMTcwNjU2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzY2CisgICAgMHgxLmQ0MmRlNTNlMzE1YzgzOWNlMTg4ZTIwMTIwNWU5OWRlcC0xLAorICAgIDB4MS45ZTdmODE4NDBjMGJiZDBmMWIxMzczMzA2MTA2MmQzNHAtMiwKKyAgICAweDEuMjc3MDFlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzY3CisgICAgLTB4MS5kNDJkZTUzZTMxNWM4MzljZTE4OGUyMDEyMDVlOTlkZXAtMSwKKyAgICAweDEuOWU3ZjgxODQwYzBiYmQwZjFiMTM3MzMwNjEwNjJkMzRwLTIsCisgICAgLTB4MS4yNzcwMWVwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjgKKyAgICAweDEuZTA3ZWVmNDVkOTFlZWE4YTZjYzczNjlhYTBlNTUzODhwLTEsCisgICAgMHgxLjYxYTc1ZTJkZWI1OTY3MzFjOGNkNDVlM2Q5Nzk0NTI2cC0yLAorICAgIDB4MS4zN2Q5ZTZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjkKKyAgICAtMHgxLmUwN2VlZjQ1ZDkxZWVhOGE2Y2M3MzY5YWEwZTU1Mzg4cC0xLAorICAgIDB4MS42MWE3NWUyZGViNTk2NzMxYzhjZDQ1ZTNkOTc5NDUyNnAtMiwKKyAgICAtMHgxLjM3ZDllNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDM3MAorICAgIDB4MS5lYWQ2ODMzYjJhYTAwMmJhYTFjMmIxOWEzOGRjOWI3OXAtMSwKKyAgICAweDEuMjM1YjMzN2IwOTFjZGQ4YWMwNjM5MGFiYzY4MTZiODJwLTIsCisgICAgMHgxLjQ4NDNhZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM3MQorICAgIC0weDEuZWFkNjgzM2IyYWEwMDJiYWExYzJiMTlhMzhkYzliNzlwLTEsCisgICAgMHgxLjIzNWIzMzdiMDkxY2RkOGFjMDYzOTBhYmM2ODE2YjgycC0yLAorICAgIC0weDEuNDg0M2FlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzcyCisgICAgMHgxLmYzMjliZmZhNmEyMDg1OTFlZWNiNjkwNWQ3NTk0ZTNicC0xLAorICAgIDB4MS5jN2I5MTQ2ZDZkMTA4MjRmZjY1MmRjMzkwYmEyZDdmOXAtMywKKyAgICAweDEuNThhZDc2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzczCisgICAgLTB4MS5mMzI5YmZmYTZhMjA4NTkxZWVjYjY5MDVkNzU5NGUzYnAtMSwKKyAgICAweDEuYzdiOTE0NmQ2ZDEwODI0ZmY2NTJkYzM5MGJhMmQ3ZjlwLTMsCisgICAgLTB4MS41OGFkNzZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzQKKyAgICAweDEuZjk2ZmUzOGFmYmQ5NWI1ZmNkMDg2MDgxMTBlOTM4MWZwLTEsCisgICAgMHgxLjQ2ZGM1YjJmMWRlOTc3ZWZmZjdjMjc4YjVhZGIyYTc1cC0zLAorICAgIDB4MS42OTE3M2VwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzUKKyAgICAtMHgxLmY5NmZlMzhhZmJkOTViNWZjZDA4NjA4MTEwZTkzODFmcC0xLAorICAgIDB4MS40NmRjNWIyZjFkZTk3N2VmZmY3YzI3OGI1YWRiMmE3NXAtMywKKyAgICAtMHgxLjY5MTczZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM3NgorICAgIDB4MS5mZGEyNTQ1NWQ5NTY3NzcyZjIwZjI1ZDE1ZWZjNjc3NXAtMSwKKyAgICAweDEuODk0ZjkzZWY0OWM0NTc1ODAwYmJkNjQ2YTNhMzFkMmFwLTQsCisgICAgMHgxLjc5ODEwNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDM3NworICAgIC0weDEuZmRhMjU0NTVkOTU2Nzc3MmYyMGYyNWQxNWVmYzY3NzVwLTEsCisgICAgMHgxLjg5NGY5M2VmNDljNDU3NTgwMGJiZDY0NmEzYTMxZDJhcC00LAorICAgIC0weDEuNzk4MTA2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzc4CisgICAgMHgxLmZmYmNhODE2ZjFmMTUxNmVjNWQ3NTdiMGRiNTRhZTM0cC0xLAorICAgIDB4MS4wNjkxNjRlM2Y1Y2VlOTRkODY1ZmI1MmUzMTZkZmY2YnAtNSwKKyAgICAweDEuODllYWNlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzc5CisgICAgLTB4MS5mZmJjYTgxNmYxZjE1MTZlYzVkNzU3YjBkYjU0YWUzNHAtMSwKKyAgICAweDEuMDY5MTY0ZTNmNWNlZTk0ZDg2NWZiNTJlMzE2ZGZmNmJwLTUsCisgICAgLTB4MS44OWVhY2VwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODAKKyAgICAweDEuZmZiY2E4ODIyOGIxNjMxODlhYjhkNjM3ZGI5OWJkMmRwLTEsCisgICAgLTB4MS4wNjkwOTNlZWMwZWQwNjZlYzgzZGQwMzQ0OThlZjhiZnAtNSwKKyAgICAweDEuOWE1NDk2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzgxCisgICAgLTB4MS5mZmJjYTg4MjI4YjE2MzE4OWFiOGQ2MzdkYjk5YmQyZHAtMSwKKyAgICAtMHgxLjA2OTA5M2VlYzBlZDA2NmVjODNkZDAzNDQ5OGVmOGJmcC01LAorICAgIC0weDEuOWE1NDk2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzgyCisgICAgMHgxLmZkYTI1NTk3MGNjZGRiOWQxMjdlY2Y2MzQwM2MyYmY3cC0xLAorICAgIC0weDEuODk0ZjJiZTI5NzlkZDljZWQ4M2NjYzYwY2Y0OWNkNDRwLTQsCisgICAgMHgxLmFhYmU1ZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM4MworICAgIC0weDEuZmRhMjU1OTcwY2NkZGI5ZDEyN2VjZjYzNDAzYzJiZjdwLTEsCisgICAgLTB4MS44OTRmMmJlMjk3OWRkOWNlZDgzY2NjNjBjZjQ5Y2Q0NHAtNCwKKyAgICAtMHgxLmFhYmU1ZXAwLAorICB9LAorICB7IC8vIEVudHJ5IDM4NAorICAgIDB4MS5mOTZmZTVhMGRhMjQ0NDg5ZmIyZjRiOTdiM2U0ODc1N3AtMSwKKyAgICAtMHgxLjQ2ZGMyNzk2NzM1MTk1YTE1YzgwZTViNzE5ZTJmYzQycC0zLAorICAgIDB4MS5iYjI4MjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODUKKyAgICAtMHgxLmY5NmZlNWEwZGEyNDQ0ODlmYjJmNGI5N2IzZTQ4NzU3cC0xLAorICAgIC0weDEuNDZkYzI3OTY3MzUxOTVhMTVjODBlNWI3MTllMmZjNDJwLTMsCisgICAgLTB4MS5iYjI4MjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODYKKyAgICAweDEuZjMyOWMyZTJjMWEzOWJhZDhlY2RjYjg3OTYxYmE0NGFwLTEsCisgICAgLTB4MS5jN2I4ZTE3OGI3ZThjMDFkOWYzMjA0NjZjYzdhNjhkNHAtMywKKyAgICAweDEuY2I5MWVlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzg3CisgICAgLTB4MS5mMzI5YzJlMmMxYTM5YmFkOGVjZGNiODc5NjFiYTQ0YXAtMSwKKyAgICAtMHgxLmM3YjhlMTc4YjdlOGMwMWQ5ZjMyMDQ2NmNjN2E2OGQ0cC0zLAorICAgIC0weDEuY2I5MWVlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzg4CisgICAgMHgxLmVhZDY4NmYyZWM1NzJjODNlZDM0YTAxZjc2NGQxOTNlcC0xLAorICAgIC0weDEuMjM1YjFhNmQ3NjdlNGIzNjJjNjQ1NzFhYzk3YjRhMWNwLTIsCisgICAgMHgxLmRiZmJiNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDM4OQorICAgIC0weDEuZWFkNjg2ZjJlYzU3MmM4M2VkMzRhMDFmNzY0ZDE5M2VwLTEsCisgICAgLTB4MS4yMzViMWE2ZDc2N2U0YjM2MmM2NDU3MWFjOTdiNGExY3AtMiwKKyAgICAtMHgxLmRiZmJiNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDM5MAorICAgIDB4MS5lMDdlZjNjOTFiZDUwMGEwZGUyMzBhZDU3MzE2MzE2M3AtMSwKKyAgICAtMHgxLjYxYTc0NWE3N2I3ZTgzYzJmOGEyZjliMDkxZTg5YWFhcC0yLAorICAgIDB4MS5lYzY1N2VwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTEKKyAgICAtMHgxLmUwN2VmM2M5MWJkNTAwYTBkZTIzMGFkNTczMTYzMTYzcC0xLAorICAgIC0weDEuNjFhNzQ1YTc3YjdlODNjMmY4YTJmOWIwOTFlODlhYWFwLTIsCisgICAgLTB4MS5lYzY1N2VwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTIKKyAgICAweDEuZDQyZGVhODgzNWM4OGFkYjljZGUxNzM0N2Y5MzRlMjVwLTEsCisgICAgLTB4MS45ZTdmNjk5ZThiOWFhZjhlZDUxYzcxYzhmNzNiMGI3NHAtMiwKKyAgICAweDEuZmNjZjQ2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzkzCisgICAgLTB4MS5kNDJkZWE4ODM1Yzg4YWRiOWNkZTE3MzQ3ZjkzNGUyNXAtMSwKKyAgICAtMHgxLjllN2Y2OTllOGI5YWFmOGVkNTFjNzFjOGY3M2IwYjc0cC0yLAorICAgIC0weDEuZmNjZjQ2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgMzk0CisgICAgMHgxLmM1ZjA1ZTMyYzgwZmIwZmU2MDMwMzNlYzAyOGE0YzMycC0xLAorICAgIC0weDEuZDlhMzhiZmEzMTk1YmExY2FhN2ZiNjliYzFkMDRlNDJwLTIsCisgICAgMHgxLjA2OWM4OHAxLAorICB9LAorICB7IC8vIEVudHJ5IDM5NQorICAgIC0weDEuYzVmMDVlMzJjODBmYjBmZTYwMzAzM2VjMDI4YTRjMzJwLTEsCisgICAgLTB4MS5kOWEzOGJmYTMxOTViYTFjYWE3ZmI2OWJjMWQwNGU0MnAtMiwKKyAgICAtMHgxLjA2OWM4OHAxLAorICB9LAorICB7IC8vIEVudHJ5IDM5NgorICAgIDB4MS5iNWQ1NGQzNzMyZDNiMmU3OWQ0OTA3ZTExNTQwMWRkYXAtMSwKKyAgICAtMHgxLjA5NmFiM2M1NWM5MWYzNmUyMzU5ZWQxYzVhODM0MmRmcC0xLAorICAgIDB4MS4wZWQxNmNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTcKKyAgICAtMHgxLmI1ZDU0ZDM3MzJkM2IyZTc5ZDQ5MDdlMTE1NDAxZGRhcC0xLAorICAgIC0weDEuMDk2YWIzYzU1YzkxZjM2ZTIzNTllZDFjNWE4MzQyZGZwLTEsCisgICAgLTB4MS4wZWQxNmNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTgKKyAgICAweDEuYTNlZGE3NDE2MWQwNmI4M2VjMmM4ZGMzOTZkODEzYjlwLTEsCisgICAgLTB4MS4yNGVjNmM4MjA2ZTc0NDMyMmQ5OWY0N2U5ZTQxYmVjZXAtMSwKKyAgICAweDEuMTcwNjUwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgMzk5CisgICAgLTB4MS5hM2VkYTc0MTYxZDA2YjgzZWMyYzhkYzM5NmQ4MTNiOXAtMSwKKyAgICAtMHgxLjI0ZWM2YzgyMDZlNzQ0MzIyZDk5ZjQ3ZTllNDFiZWNlcC0xLAorICAgIC0weDEuMTcwNjUwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDAwCisgICAgMHgxLjkwNGM0MjFlZmNlNThmNGU4MTcwZDM2ZGNkYThlMDJjcC0xLAorICAgIC0weDEuM2YzYTAwOWI4MmI1YjgyMzRlMTI5NmRkNzNjZmY0OWRwLTEsCisgICAgMHgxLjFmM2IzNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQwMQorICAgIC0weDEuOTA0YzQyMWVmY2U1OGY0ZTgxNzBkMzZkY2RhOGUwMmNwLTEsCisgICAgLTB4MS4zZjNhMDA5YjgyYjViODIzNGUxMjk2ZGQ3M2NmZjQ5ZHAtMSwKKyAgICAtMHgxLjFmM2IzNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQwMgorICAgIDB4MS43YjA1YzQ1MDkzOTQ0ZDZhZmIwYzkwZDJmOWNiMjE3ZnAtMSwKKyAgICAtMHgxLjU4MzdjNGExODRjY2Y3ZWQ1N2MxODlmMmFkZGYzMmM1cC0xLAorICAgIDB4MS4yNzcwMThwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDMKKyAgICAtMHgxLjdiMDVjNDUwOTM5NDRkNmFmYjBjOTBkMmY5Y2IyMTdmcC0xLAorICAgIC0weDEuNTgzN2M0YTE4NGNjZjdlZDU3YzE4OWYyYWRkZjMyYzVwLTEsCisgICAgLTB4MS4yNzcwMThwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDQKKyAgICAweDEuNjQzMDhmNTA2ZmZkYWYxMzI2ZDEwYjMzODAyNzhlOThwLTEsCisgICAgLTB4MS42ZmNiNmU2Njg1ZTcyZmI0MDc0ZTcwY2QzMTYyZDNiYXAtMSwKKyAgICAweDEuMmZhNGZjcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDA1CisgICAgLTB4MS42NDMwOGY1MDZmZmRhZjEzMjZkMTBiMzM4MDI3OGU5OHAtMSwKKyAgICAtMHgxLjZmY2I2ZTY2ODVlNzJmYjQwNzRlNzBjZDMxNjJkM2JhcC0xLAorICAgIC0weDEuMmZhNGZjcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDA2CisgICAgMHgxLjRiZTRhODA3NmMxMzVhNDhmM2YxYTFhYWEzNjI0NzVmcC0xLAorICAgIC0weDEuODVkYzMwYTc5ZjI2NzU0YWIxMzcwMzM4ZWU3YmZkMTFwLTEsCisgICAgMHgxLjM3ZDllMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQwNworICAgIC0weDEuNGJlNGE4MDc2YzEzNWE0OGYzZjFhMWFhYTM2MjQ3NWZwLTEsCisgICAgLTB4MS44NWRjMzBhNzlmMjY3NTRhYjEzNzAzMzhlZTdiZmQxMXAtMSwKKyAgICAtMHgxLjM3ZDllMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQwOAorICAgIDB4MS4zMjNiOWQ4ODhkNGRhNzdhNjEwODkzNzM1ZWVlZDFjYnAtMSwKKyAgICAtMHgxLjlhNTJkNTIzYjE1MzJlNGVkNDc3ZTI3ZGM2MDUxYzEycC0xLAorICAgIDB4MS40MDBlYzRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDkKKyAgICAtMHgxLjMyM2I5ZDg4OGQ0ZGE3N2E2MTA4OTM3MzVlZWVkMWNicC0xLAorICAgIC0weDEuOWE1MmQ1MjNiMTUzMmU0ZWQ0NzdlMjdkYzYwNTFjMTJwLTEsCisgICAgLTB4MS40MDBlYzRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTAKKyAgICAweDEuMTc1MDZlMmRmYjYwM2QzNGI5YWYzOWIxMmMxZGI3MzVwLTEsCisgICAgLTB4MS5hZDE5ZDUwNjY0YWJmMGMwMTQxMTM3ZDJjYTUwOWYyMXAtMSwKKyAgICAweDEuNDg0M2E4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDExCisgICAgLTB4MS4xNzUwNmUyZGZiNjAzZDM0YjlhZjM5YjEyYzFkYjczNXAtMSwKKyAgICAtMHgxLmFkMTlkNTA2NjRhYmYwYzAxNDExMzdkMmNhNTA5ZjIxcC0xLAorICAgIC0weDEuNDg0M2E4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDEyCisgICAgMHgxLmY2N2VkNjY3MzUyZDQ4Mjc0NTAwMTNmMTVlMzIxYmZicC0yLAorICAgIC0weDEuYmUxZDZmOGQ1MTdkYjVjMmNmN2RlMGZhZjA4MDhkMzBwLTEsCisgICAgMHgxLjUwNzg4Y3AxLAorICB9LAorICB7IC8vIEVudHJ5IDQxMworICAgIC0weDEuZjY3ZWQ2NjczNTJkNDgyNzQ1MDAxM2YxNWUzMjFiZmJwLTIsCisgICAgLTB4MS5iZTFkNmY4ZDUxN2RiNWMyY2Y3ZGUwZmFmMDgwOGQzMHAtMSwKKyAgICAtMHgxLjUwNzg4Y3AxLAorICB9LAorICB7IC8vIEVudHJ5IDQxNAorICAgIDB4MS5iYzRjMzVkYTUxZTM0Yjc3NmU1ZTA0ZGE1OGYyMzQ0MXAtMiwKKyAgICAtMHgxLmNkNGJiZWNmN2YyNzA1ZDRmZDAwZGQ0NjM3ODBmNDVlcC0xLAorICAgIDB4MS41OGFkNzBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTUKKyAgICAtMHgxLmJjNGMzNWRhNTFlMzRiNzc2ZTVlMDRkYTU4ZjIzNDQxcC0yLAorICAgIC0weDEuY2Q0YmJlY2Y3ZjI3MDVkNGZkMDBkZDQ2Mzc4MGY0NWVwLTEsCisgICAgLTB4MS41OGFkNzBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTYKKyAgICAweDEuODA0NjMzNmU2ODQyN2NmNzU2MDU2ZDNmNGVkYmI2NjJwLTIsCisgICAgLTB4MS5kYTk0Y2E5MTVkYTNjZGQxZmZmODM5ZDg1ZWVjMzllMnAtMSwKKyAgICAweDEuNjBlMjU0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDE3CisgICAgLTB4MS44MDQ2MzM2ZTY4NDI3Y2Y3NTYwNTZkM2Y0ZWRiYjY2MnAtMiwKKyAgICAtMHgxLmRhOTRjYTkxNWRhM2NkZDFmZmY4MzlkODVlZWMzOWUycC0xLAorICAgIC0weDEuNjBlMjU0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDE4CisgICAgMHgxLjQyYWJmMzg3MjkwNWU2MzJmMjA0YzQxYjI0YWY5MGI2cC0yLAorICAgIC0weDEuZTVlYTk5MTE2YjM5MzYxYWM5MjZkZDlmZGMyMDg5ZDFwLTEsCisgICAgMHgxLjY5MTczOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQxOQorICAgIC0weDEuNDJhYmYzODcyOTA1ZTYzMmYyMDRjNDFiMjRhZjkwYjZwLTIsCisgICAgLTB4MS5lNWVhOTkxMTZiMzkzNjFhYzkyNmRkOWZkYzIwODlkMXAtMSwKKyAgICAtMHgxLjY5MTczOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQyMAorICAgIDB4MS4wM2JlNDNjNjk5ZjM1MzY5OTBkY2Y1YTY2NjVhYzIzOXAtMiwKKyAgICAtMHgxLmVmNDEzZGJiZGEyODU5ZmZiMGQxYWI4NDM0MmZkMjM1cC0xLAorICAgIDB4MS43MTRjMWNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjEKKyAgICAtMHgxLjAzYmU0M2M2OTlmMzUzNjk5MGRjZjVhNjY2NWFjMjM5cC0yLAorICAgIC0weDEuZWY0MTNkYmJkYTI4NTlmZmIwZDFhYjg0MzQyZmQyMzVwLTEsCisgICAgLTB4MS43MTRjMWNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjIKKyAgICAweDEuODc3ZWFkYzJmZGZjMmYwZGIxZThiNzhjZDNmYmZiZDJwLTMsCisgICAgLTB4MS5mNjhlZTViNWJmMzU2YjEwMjMwOTQ0YTE4ZTcwOTI1Y3AtMSwKKyAgICAweDEuNzk4MXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQyMworICAgIC0weDEuODc3ZWFkYzJmZGZjMmYwZGIxZThiNzhjZDNmYmZiZDJwLTMsCisgICAgLTB4MS5mNjhlZTViNWJmMzU2YjEwMjMwOTQ0YTE4ZTcwOTI1Y3AtMSwKKyAgICAtMHgxLjc5ODFwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjQKKyAgICAweDEuMDVlNGZkZjg0NjYzMmE4MjA4ZDkwZGU3MmQzYTZkYThwLTMsCisgICAgLTB4MS5mYmNiZTIzMjk2ZmM2MWI5NmYzODJmMzVlYTE1Yzc2OHAtMSwKKyAgICAweDEuODFiNWU0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDI1CisgICAgLTB4MS4wNWU0ZmRmODQ2NjMyYTgyMDhkOTBkZTcyZDNhNmRhOHAtMywKKyAgICAtMHgxLmZiY2JlMjMyOTZmYzYxYjk2ZjM4MmYzNWVhMTVjNzY4cC0xLAorICAgIC0weDEuODFiNWU0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDI2CisgICAgMHgxLjA2NmY5YjYzMGI3MmRmZjE2NDUwZTg5YWZkZjdlMDQ4cC00LAorICAgIC0weDEuZmVmMmIwODk0MzE5N2NkM2E4YmE4NjEwOTUyMjdjNDhwLTEsCisgICAgMHgxLjg5ZWFjOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQyNworICAgIC0weDEuMDY2ZjliNjMwYjcyZGZmMTY0NTBlODlhZmRmN2UwNDhwLTQsCisgICAgLTB4MS5mZWYyYjA4OTQzMTk3Y2QzYThiYTg2MTA5NTIyN2M0OHAtMSwKKyAgICAtMHgxLjg5ZWFjOHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQyOAorICAgIDB4MS4wM2JkZjBiNzljY2Y3Mzk1MjlkNTRkNDIyODYxMDQ2Y3AtMiwKKyAgICAweDEuZWY0MTQ4OWZjMmZlODAxYTZmYzhhZTc5MTQzOGViNzhwLTEsCisgICAgLTB4MS44MWI1ZWVwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjkKKyAgICAtMHgxLjAzYmRmMGI3OWNjZjczOTUyOWQ1NGQ0MjI4NjEwNDZjcC0yLAorICAgIDB4MS5lZjQxNDg5ZmMyZmU4MDFhNmZjOGFlNzkxNDM4ZWI3OHAtMSwKKyAgICAweDEuODFiNWVlcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDMwCisgICAgMHgxLmY2N2U4Yjk1ZjU0NjBlYTM2OWE4MDM4MzdiNzIxYWJkcC0yLAorICAgIDB4MS5iZTFkODQ5ZWM2NDliNzk3MzIwZTk4NWQwYjgyYWU4NXAtMSwKKyAgICAtMHgxLjcxNGMyNnAyLAorICB9LAorICB7IC8vIEVudHJ5IDQzMQorICAgIC0weDEuZjY3ZThiOTVmNTQ2MGVhMzY5YTgwMzgzN2I3MjFhYmRwLTIsCisgICAgMHgxLmJlMWQ4NDllYzY0OWI3OTczMjBlOTg1ZDBiODJhZTg1cC0xLAorICAgIDB4MS43MTRjMjZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzIKKyAgICAweDEuNjQzMDcwNzkxNzUxZGMwNjM2ZDE4NTRkMmJkYmM1ZDRwLTEsCisgICAgMHgxLjZmY2I4YzQ0YmQzMGRkNjY4MTQ4NjA1OTY5YjFjMTYxcC0xLAorICAgIC0weDEuNjBlMjVlcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDMzCisgICAgLTB4MS42NDMwNzA3OTE3NTFkYzA2MzZkMTg1NGQyYmRiYzVkNHAtMSwKKyAgICAweDEuNmZjYjhjNDRiZDMwZGQ2NjgxNDg2MDU5NjliMWMxNjFwLTEsCisgICAgMHgxLjYwZTI1ZXAyLAorICB9LAorICB7IC8vIEVudHJ5IDQzNAorICAgIDB4MS5iNWQ1MzZmNTkxMTNhNDNhZjMwZThjOWRiOGE5NTFhNXAtMSwKKyAgICAweDEuMDk2YWQ4N2MzMjY2MjJjNDJkZTM0ZjkyODE0Y2ZhODRwLTEsCisgICAgLTB4MS41MDc4OTZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzUKKyAgICAtMHgxLmI1ZDUzNmY1OTExM2E0M2FmMzBlOGM5ZGI4YTk1MWE1cC0xLAorICAgIDB4MS4wOTZhZDg3YzMyNjYyMmM0MmRlMzRmOTI4MTRjZmE4NHAtMSwKKyAgICAweDEuNTA3ODk2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDM2CisgICAgMHgxLmVhZDY3OTk4NTU0OTE0MDMxODM0OWY1MTJkY2E3YTZicC0xLAorICAgIDB4MS4yMzViNzQ2YTJhMmVmZjJiZjY0MGRkOGMwNGQzNWE1YnAtMiwKKyAgICAtMHgxLjQwMGVjZXAyLAorICB9LAorICB7IC8vIEVudHJ5IDQzNworICAgIC0weDEuZWFkNjc5OTg1NTQ5MTQwMzE4MzQ5ZjUxMmRjYTdhNmJwLTEsCisgICAgMHgxLjIzNWI3NDZhMmEyZWZmMmJmNjQwZGQ4YzA0ZDM1YTVicC0yLAorICAgIDB4MS40MDBlY2VwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzgKKyAgICAweDEuZmZiY2E3MDEwZTBiMDQ1MmY1NjA3NWNmZDU5ODI4ODBwLTEsCisgICAgMHgxLjA2OTM4MjdiNDZjZWUzYjY2MWFjMTcxMTRiNWZlMGZicC01LAorICAgIC0weDEuMmZhNTA2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDM5CisgICAgLTB4MS5mZmJjYTcwMTBlMGIwNDUyZjU2MDc1Y2ZkNTk4Mjg4MHAtMSwKKyAgICAweDEuMDY5MzgyN2I0NmNlZTNiNjYxYWMxNzExNGI1ZmUwZmJwLTUsCisgICAgMHgxLjJmYTUwNnAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ0MAorICAgIDB4MS5mMzI5Y2E2YmZjNzQyNWQ4OWMyYjRiOWFkNzNhYjEwOHAtMSwKKyAgICAtMHgxLmM3Yjg1ZDY2OGUyYWJjYzQ2NTQyY2E4NTI3ZjBiODAxcC0zLAorICAgIC0weDEuMWYzYjNlcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDQxCisgICAgLTB4MS5mMzI5Y2E2YmZjNzQyNWQ4OWMyYjRiOWFkNzNhYjEwOHAtMSwKKyAgICAtMHgxLmM3Yjg1ZDY2OGUyYWJjYzQ2NTQyY2E4NTI3ZjBiODAxcC0zLAorICAgIDB4MS4xZjNiM2VwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDIKKyAgICAweDEuYzVmMDZmYjY5NDI3YWMwZjJkNjk0MjhkODJiNWU2NjlwLTEsCisgICAgLTB4MS5kOWEzNDhkNGY0MzYzYmE0NTYyMTEwZGIwMWVlODRlOHAtMiwKKyAgICAtMHgxLjBlZDE3NnAyLAorICB9LAorICB7IC8vIEVudHJ5IDQ0MworICAgIC0weDEuYzVmMDZmYjY5NDI3YWMwZjJkNjk0MjhkODJiNWU2NjlwLTEsCisgICAgLTB4MS5kOWEzNDhkNGY0MzYzYmE0NTYyMTEwZGIwMWVlODRlOHAtMiwKKyAgICAweDEuMGVkMTc2cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNDQ0CisgICAgMHgxLjdiMDVkODY0ZWM5ODAyYWRiYzRiNTU3N2MyMzM4MzZhcC0xLAorICAgIC0weDEuNTgzN2FlODU2OWM5NTg0NmU2MTY0ZDk2MzY1NDYxMjBwLTEsCisgICAgLTB4MS5mY2NmNWFwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDUKKyAgICAtMHgxLjdiMDVkODY0ZWM5ODAyYWRiYzRiNTU3N2MyMzM4MzZhcC0xLAorICAgIC0weDEuNTgzN2FlODU2OWM5NTg0NmU2MTY0ZDk2MzY1NDYxMjBwLTEsCisgICAgMHgxLmZjY2Y1YXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ0NgorICAgIDB4MS4xNzUwODA4MTg1YTk5OGJiY2VjYzNhNmFjMGNiMjkwN3AtMSwKKyAgICAtMHgxLmFkMTljOTE4ODgzMDAwYjBiNzAyZWMwODBjZjAxMjJlcC0xLAorICAgIC0weDEuZGJmYmM4cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDQ3CisgICAgLTB4MS4xNzUwODA4MTg1YTk5OGJiY2VjYzNhNmFjMGNiMjkwN3AtMSwKKyAgICAtMHgxLmFkMTljOTE4ODgzMDAwYjBiNzAyZWMwODBjZjAxMjJlcC0xLAorICAgIDB4MS5kYmZiYzhwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDgKKyAgICAweDEuNDJhYzBkZDk0OTUyMTE4MTZiZjA0Y2E1M2JjZTRiZWFwLTIsCisgICAgLTB4MS5lNWVhOTRiMmNmMDdhZGQzZDBkOTVhYjNhMzBhZDRhYnAtMSwKKyAgICAtMHgxLmJiMjgzNnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ0OQorICAgIC0weDEuNDJhYzBkZDk0OTUyMTE4MTZiZjA0Y2E1M2JjZTRiZWFwLTIsCisgICAgLTB4MS5lNWVhOTRiMmNmMDdhZGQzZDBkOTVhYjNhMzBhZDRhYnAtMSwKKyAgICAweDEuYmIyODM2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDUwCisgICAgMHgxLjA2NmZjYTM5YTcwYjUyZDA2ZjJjZDdlYWI2OWMzMWYycC00LAorICAgIC0weDEuZmVmMmIwMjkwODU1OWY5MmRlODkyZDI0MGEyYjBiNDlwLTEsCisgICAgLTB4MS45YTU0YTRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTEKKyAgICAtMHgxLjA2NmZjYTM5YTcwYjUyZDA2ZjJjZDdlYWI2OWMzMWYycC00LAorICAgIC0weDEuZmVmMmIwMjkwODU1OWY5MmRlODkyZDI0MGEyYjBiNDlwLTEsCisgICAgMHgxLjlhNTRhNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ1MgorICAgIC0weDEuODc3ZDkzMTI5OGU2ZmJjNjU0ZjA2NTUzNmNmZjJiNTRwLTMsCisgICAgLTB4MS5mNjhlZjM3OTJlNTkyYzNjZWZiY2UxZDVkZWQ2NGE5MnAtMSwKKyAgICAtMHgxLjc5ODExMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ1MworICAgIDB4MS44NzdkOTMxMjk4ZTZmYmM2NTRmMDY1NTM2Y2ZmMmI1NHAtMywKKyAgICAtMHgxLmY2OGVmMzc5MmU1OTJjM2NlZmJjZTFkNWRlZDY0YTkycC0xLAorICAgIDB4MS43OTgxMTJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTQKKyAgICAtMHgxLmJjNGJjMjg3NWViNmQzOGVkYTNiNDljYjIzMjBiNTYxcC0yLAorICAgIC0weDEuY2Q0YmRhOTQzZWVhMTM2MzBmOGU1MDhmODc0NGYyZjJwLTEsCisgICAgLTB4MS41OGFkODBwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTUKKyAgICAweDEuYmM0YmMyODc1ZWI2ZDM4ZWRhM2I0OWNiMjMyMGI1NjFwLTIsCisgICAgLTB4MS5jZDRiZGE5NDNlZWExMzYzMGY4ZTUwOGY4NzQ0ZjJmMnAtMSwKKyAgICAweDEuNThhZDgwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDU2CisgICAgLTB4MS40YmU0N2Q2MzU0YzRjZWQ1Mzc4MGIxYjUxOWFjZGVjMnAtMSwKKyAgICAtMHgxLjg1ZGM1NGY0OWYzMjRiZGZjNzFkNTc0OTQ4M2IzMzE4cC0xLAorICAgIC0weDEuMzdkOWVlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDU3CisgICAgMHgxLjRiZTQ3ZDYzNTRjNGNlZDUzNzgwYjFiNTE5YWNkZWMycC0xLAorICAgIC0weDEuODVkYzU0ZjQ5ZjMyNGJkZmM3MWQ1NzQ5NDgzYjMzMThwLTEsCisgICAgMHgxLjM3ZDllZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ1OAorICAgIC0weDEuYTNlZDhiY2IzNWNiY2Y4YzYwODlmODJhOTFjMzFkNWJwLTEsCisgICAgLTB4MS4yNGVjOTNlMDRkNGJkYjU0ZTIwYmVhZjM4MzUxOWFmOHAtMSwKKyAgICAtMHgxLjE3MDY1Y3AxLAorICB9LAorICB7IC8vIEVudHJ5IDQ1OQorICAgIDB4MS5hM2VkOGJjYjM1Y2JjZjhjNjA4OWY4MmE5MWMzMWQ1YnAtMSwKKyAgICAtMHgxLjI0ZWM5M2UwNGQ0YmRiNTRlMjBiZWFmMzgzNTE5YWY4cC0xLAorICAgIDB4MS4xNzA2NWNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjAKKyAgICAtMHgxLmUwN2VlNDk2ZWExMDk2NTRjNDJlMTcxZmRjNDUzN2M0cC0xLAorICAgIC0weDEuNjFhNzk4M2Q0YzE2YzQ1MWI2OGJmMmY1YjcwZjNiNmFwLTIsCisgICAgLTB4MS5lYzY1OTRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjEKKyAgICAweDEuZTA3ZWU0OTZlYTEwOTY1NGM0MmUxNzFmZGM0NTM3YzRwLTEsCisgICAgLTB4MS42MWE3OTgzZDRjMTZjNDUxYjY4YmYyZjViNzBmM2I2YXAtMiwKKyAgICAweDEuZWM2NTk0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDYyCisgICAgLTB4MS5mZGEyNTIyMjE5Njg5ZDBlODA2OWQ5MGY1Yzk2OWI5MnAtMSwKKyAgICAtMHgxLjg5NTA0YThkZTZjOWVjYWM2NjNlNjc1ODNjYWI0N2U4cC00LAorICAgIC0weDEuYWFiZTcwcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDYzCisgICAgMHgxLmZkYTI1MjIyMTk2ODlkMGU4MDY5ZDkwZjVjOTY5YjkycC0xLAorICAgIC0weDEuODk1MDRhOGRlNmM5ZWNhYzY2M2U2NzU4M2NhYjQ3ZThwLTQsCisgICAgMHgxLmFhYmU3MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ2NAorICAgIC0weDEuZjk2ZmU4MDJmZTU3MDM3MmQwZmNiNmU5MzRiNDMwNjFwLTEsCisgICAgMHgxLjQ2ZGJlYzllYTNhNWYwOGJhNzNhYTY5ZTdlMjJkZTFjcC0zLAorICAgIC0weDEuNjkxNzRjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDY1CisgICAgMHgxLmY5NmZlODAyZmU1NzAzNzJkMGZjYjZlOTM0YjQzMDYxcC0xLAorICAgIDB4MS40NmRiZWM5ZWEzYTVmMDhiYTczYWE2OWU3ZTIyZGUxY3AtMywKKyAgICAweDEuNjkxNzRjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDY2CisgICAgLTB4MS5kNDJkZWQ1NmFlODhhNmUxY2YyNzBhZjI3ZTZmMTgwNHAtMSwKKyAgICAweDEuOWU3ZjVjZjA3NWQxZWM0ZWY2OWM5YzY3YjYyYzI3Y2JwLTIsCisgICAgLTB4MS4yNzcwMjhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjcKKyAgICAweDEuZDQyZGVkNTZhZTg4YTZlMWNmMjcwYWYyN2U2ZjE4MDRwLTEsCisgICAgMHgxLjllN2Y1Y2YwNzVkMWVjNGVmNjljOWM2N2I2MmMyN2NicC0yLAorICAgIDB4MS4yNzcwMjhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjgKKyAgICAtMHgxLjkwNGM0NTMyNmQ2ZGRlMjI0MzgxZDFkNTkwYWRhNDFjcC0xLAorICAgIDB4MS4zZjM5ZmNjMDE3NjUzZDI2MzY4MzdhNTVmZGY2ZDJkNHAtMSwKKyAgICAtMHgxLmNiOTIwYXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjkKKyAgICAweDEuOTA0YzQ1MzI2ZDZkZGUyMjQzODFkMWQ1OTBhZGE0MWNwLTEsCisgICAgMHgxLjNmMzlmY2MwMTc2NTNkMjYzNjgzN2E1NWZkZjZkMmQ0cC0xLAorICAgIDB4MS5jYjkyMGFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDcwCisgICAgLTB4MS4zMjNiOWNhZGJiMTllNzVhNDQ0ODNmYjY0YWQ4ZGRmNnAtMSwKKyAgICAweDEuOWE1MmQ1YzcwMGRhYTNkYzhjZjhmNWE3MWYyZGYyODlwLTEsCisgICAgLTB4MS40ODQzYzRwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDcxCisgICAgMHgxLjMyM2I5Y2FkYmIxOWU3NWE0NDQ4M2ZiNjRhZDhkZGY2cC0xLAorICAgIDB4MS45YTUyZDVjNzAwZGFhM2RjOGNmOGY1YTcxZjJkZjI4OXAtMSwKKyAgICAweDEuNDg0M2M0cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDQ3MgorICAgIC0weDEuODA0NjI2NTRiZGU3NjZmYWY0N2YzMTQwZTI5MDk5NmRwLTIsCisgICAgMHgxLmRhOTRjZDM4M2RkN2EzYjkxYTJmYzg4ZmY5MDVhNmEwcC0xLAorICAgIC0weDEuODllYWZjcC0yLAorICB9LAorICB7IC8vIEVudHJ5IDQ3MworICAgIDB4MS44MDQ2MjY1NGJkZTc2NmZhZjQ3ZjMxNDBlMjkwOTk2ZHAtMiwKKyAgICAweDEuZGE5NGNkMzgzZGQ3YTNiOTFhMmZjODhmZjkwNWE2YTBwLTEsCisgICAgMHgxLjg5ZWFmY3AtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzQKKyAgICAtMHgxLjA1ZTRjYTIxZjM4NmE4MmJjMmU0ZWZjZGViYjE5NjJicC0zLAorICAgIDB4MS5mYmNiZTNkZTU4ZTY2YzMyODNiYzgxMGQxNmM0NTgzM3AtMSwKKyAgICAtMHgxLjA2OWNlMHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzUKKyAgICAweDEuMDVlNGNhMjFmMzg2YTgyYmMyZTRlZmNkZWJiMTk2MmJwLTMsCisgICAgMHgxLmZiY2JlM2RlNThlNjZjMzI4M2JjODEwZDE2YzQ1ODMzcC0xLAorICAgIDB4MS4wNjljZTBwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNDc2CisgICAgMHgxLjA1ZTQyMzgzMGJlMDFmOWZlM2M1N2QwNjg2N2UwMDU2cC0zLAorICAgIDB4MS5mYmNiZTkzZDQ4NTYzZDUxYjZlOWQ2ZWZkYjYyNDk1Y3AtMSwKKyAgICAweDEuMDY5YzM4cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDQ3NworICAgIC0weDEuMDVlNDIzODMwYmUwMWY5ZmUzYzU3ZDA2ODY3ZTAwNTZwLTMsCisgICAgMHgxLmZiY2JlOTNkNDg1NjNkNTFiNmU5ZDZlZmRiNjI0OTVjcC0xLAorICAgIC0weDEuMDY5YzM4cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDQ3OAorICAgIDB4MS44MDQ1ZDg3ODUyZjEzMDdmZWE2ZGM3NTFjNGQxNTk5MnAtMiwKKyAgICAweDEuZGE5NGRjZmIxY2QxNTg1M2NlODQ4ZmZiMDI2NGFkMDhwLTEsCisgICAgMHgxLjg5ZWFhOHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzkKKyAgICAtMHgxLjgwNDVkODc4NTJmMTMwN2ZlYTZkYzc1MWM0ZDE1OTkycC0yLAorICAgIDB4MS5kYTk0ZGNmYjFjZDE1ODUzY2U4NDhmZmIwMjY0YWQwOHAtMSwKKyAgICAtMHgxLjg5ZWFhOHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODAKKyAgICAweDEuMzIzYjdiMDRlZTg4Y2ZmOThiMmExNjIwZTFmNjFhMDFwLTEsCisgICAgMHgxLjlhNTJlZWU1ZTM1Mzc3ZDU1NGFjZTg4MWJkYzQ3MjVicC0xLAorICAgIDB4MS40ODQzOWFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDgxCisgICAgLTB4MS4zMjNiN2IwNGVlODhjZmY5OGIyYTE2MjBlMWY2MWEwMXAtMSwKKyAgICAweDEuOWE1MmVlZTVlMzUzNzdkNTU0YWNlODgxYmRjNDcyNWJwLTEsCisgICAgLTB4MS40ODQzOWFwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNDgyCisgICAgMHgxLjkwNGMyYjAyYWE1OTUyOGNlMDQ0YmYyMjEzYzk2ODU5cC0xLAorICAgIDB4MS4zZjNhMWQ5NjU3ZmY2YWE0OThjNDZmNmZhYWYwM2I5MHAtMSwKKyAgICAweDEuY2I5MWUwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDQ4MworICAgIC0weDEuOTA0YzJiMDJhYTU5NTI4Y2UwNDRiZjIyMTNjOTY4NTlwLTEsCisgICAgMHgxLjNmM2ExZDk2NTdmZjZhYTQ5OGM0NmY2ZmFhZjAzYjkwcC0xLAorICAgIC0weDEuY2I5MWUwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDQ4NAorICAgIDB4MS5kNDJkZGQyNWIzNzk3ZTZhNjc5Zjc2ZTA1ZTZjM2UwOHAtMSwKKyAgICAweDEuOWU3ZmE2MTdhMWEzYTQwMGE3ZjU5YWE4NzkwODhlMzFwLTIsCisgICAgMHgxLjI3NzAxNHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ4NQorICAgIC0weDEuZDQyZGRkMjViMzc5N2U2YTY3OWY3NmUwNWU2YzNlMDhwLTEsCisgICAgMHgxLjllN2ZhNjE3YTFhM2E0MDBhN2Y1OWFhODc5MDg4ZTMxcC0yLAorICAgIC0weDEuMjc3MDE0cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDg2CisgICAgMHgxLmY5NmZlMWEwYjEyZDBhZDRmYThjODJkOGFmOTg5YzVhcC0xLAorICAgIDB4MS40NmRjOGE5MTliMjc4NDBjZGE2ZTE4YTA3OWRhNDU5Y3AtMywKKyAgICAweDEuNjkxNzM4cDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDg3CisgICAgLTB4MS5mOTZmZTFhMGIxMmQwYWQ0ZmE4YzgyZDhhZjk4OWM1YXAtMSwKKyAgICAweDEuNDZkYzhhOTE5YjI3ODQwY2RhNmUxOGEwNzlkYTQ1OWNwLTMsCisgICAgLTB4MS42OTE3MzhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODgKKyAgICAweDEuZmRhMjU1Zjk2MDk0ZDhmZTRlODU5YzRjZjBkZDY4YTVwLTEsCisgICAgLTB4MS44OTRmMGMwODcyNDE1NjYzYjdmOWU0ZTQ4MDFkZWFmMHAtNCwKKyAgICAweDEuYWFiZTVjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDg5CisgICAgLTB4MS5mZGEyNTVmOTYwOTRkOGZlNGU4NTljNGNmMGRkNjhhNXAtMSwKKyAgICAtMHgxLjg5NGYwYzA4NzI0MTU2NjNiN2Y5ZTRlNDgwMWRlYWYwcC00LAorICAgIC0weDEuYWFiZTVjcDAsCisgIH0sCisgIHsgLy8gRW50cnkgNDkwCisgICAgMHgxLmUwN2VmMjY3NzQ4Yjk4Mjc3OGY4ZDUwZDI5ODFiYjNhcC0xLAorICAgIC0weDEuNjFhNzRkMjk3NzRhZTRlM2JjNTUzM2EyZWEwOGExNGFwLTIsCisgICAgMHgxLmVjNjU4MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ5MQorICAgIC0weDEuZTA3ZWYyNjc3NDhiOTgyNzc4ZjhkNTBkMjk4MWJiM2FwLTEsCisgICAgLTB4MS42MWE3NGQyOTc3NGFlNGUzYmM1NTMzYTJlYTA4YTE0YXAtMiwKKyAgICAtMHgxLmVjNjU4MHAwLAorICB9LAorICB7IC8vIEVudHJ5IDQ5MgorICAgIDB4MS5hM2VkYTJhZGIwMTE0M2ZiMjE0NTNiMjBiZDE3NDhmZXAtMSwKKyAgICAtMHgxLjI0ZWM3MzExYmQ3YjIyNTVmOWI4OTBiM2ZmNTg5OWY0cC0xLAorICAgIDB4MS4xNzA2NTJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTMKKyAgICAtMHgxLmEzZWRhMmFkYjAxMTQzZmIyMTQ1M2IyMGJkMTc0OGZlcC0xLAorICAgIC0weDEuMjRlYzczMTFiZDdiMjI1NWY5Yjg5MGIzZmY1ODk5ZjRwLTEsCisgICAgLTB4MS4xNzA2NTJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTQKKyAgICAweDEuNGJlNDliZDg4YTY0YTBiYjQxNGRkYWNhYzRmYThkZTlwLTEsCisgICAgLTB4MS44NWRjM2IwNmM0MzVmNTI0Yzg3M2Q5YjVlYmEzZGVmOHAtMSwKKyAgICAweDEuMzdkOWU0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDk1CisgICAgLTB4MS40YmU0OWJkODhhNjRhMGJiNDE0ZGRhY2FjNGZhOGRlOXAtMSwKKyAgICAtMHgxLjg1ZGMzYjA2YzQzNWY1MjRjODczZDliNWViYTNkZWY4cC0xLAorICAgIC0weDEuMzdkOWU0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNDk2CisgICAgMHgxLmJjNGMwYTliMzc4MmUyMjBhZTU1Nzg2MzY5Y2NmMTkwcC0yLAorICAgIC0weDEuY2Q0YmM5Mzk0N2U4NjY3MWFjN2YwZWFjZDk1MjEzNzdwLTEsCisgICAgMHgxLjU4YWQ3NnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ5NworICAgIC0weDEuYmM0YzBhOWIzNzgyZTIyMGFlNTU3ODYzNjljY2YxOTBwLTIsCisgICAgLTB4MS5jZDRiYzkzOTQ3ZTg2NjcxYWM3ZjBlYWNkOTUyMTM3N3AtMSwKKyAgICAtMHgxLjU4YWQ3NnAxLAorICB9LAorICB7IC8vIEVudHJ5IDQ5OAorICAgIDB4MS44NzdlMzAxZjQzY2FmZmZlNjY0NGE4OTU4ZjEwODcyOXAtMywKKyAgICAtMHgxLmY2OGVlYmQzYjhmMTJmOTQzM2U2ZDcyMjQ5ODljMTBlcC0xLAorICAgIDB4MS43OTgxMDhwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTkKKyAgICAtMHgxLjg3N2UzMDFmNDNjYWZmZmU2NjQ0YTg5NThmMTA4NzI5cC0zLAorICAgIC0weDEuZjY4ZWViZDNiOGYxMmY5NDMzZTZkNzIyNDk4OWMxMGVwLTEsCisgICAgLTB4MS43OTgxMDhwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDAKKyAgICAtMHgxLjA2NmU4YWUxZjgyNGE2OTgxN2U2YTgwNmU2MzE3ZTI4cC00LAorICAgIC0weDEuZmVmMmIyYjkxZTQwMDIxYTJmZWU3NGZjNjE4MTIxNTdwLTEsCisgICAgMHgxLjlhNTQ5YXAxLAorICB9LAorICB7IC8vIEVudHJ5IDUwMQorICAgIDB4MS4wNjZlOGFlMWY4MjRhNjk4MTdlNmE4MDZlNjMxN2UyOHAtNCwKKyAgICAtMHgxLmZlZjJiMmI5MWU0MDAyMWEyZmVlNzRmYzYxODEyMTU3cC0xLAorICAgIC0weDEuOWE1NDlhcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNTAyCisgICAgLTB4MS40MmFiYzFlY2ExMWEwYWQxMmNhNmVlZmYxOTczMThhYXAtMiwKKyAgICAtMHgxLmU1ZWFhMTRkODYxNjhiNjk5MThjMjJmMzcxNmE2N2VhcC0xLAorICAgIDB4MS5iYjI4MmNwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDMKKyAgICAweDEuNDJhYmMxZWNhMTFhMGFkMTJjYTZlZWZmMTk3MzE4YWFwLTIsCisgICAgLTB4MS5lNWVhYTE0ZDg2MTY4YjY5OTE4YzIyZjM3MTZhNjdlYXAtMSwKKyAgICAtMHgxLmJiMjgyY3AxLAorICB9LAorICB7IC8vIEVudHJ5IDUwNAorICAgIC0weDEuMTc1MDVlZmI4MTE5NzczYzY0NzQ2OGJlMWRmZWU0NWVwLTEsCisgICAgLTB4MS5hZDE5ZGVlYWQwZWFlMmY3MmQwNDE2NWUwOWU0YTQzZHAtMSwKKyAgICAweDEuZGJmYmJlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNTA1CisgICAgMHgxLjE3NTA1ZWZiODExOTc3M2M2NDc0NjhiZTFkZmVlNDVlcC0xLAorICAgIC0weDEuYWQxOWRlZWFkMGVhZTJmNzJkMDQxNjVlMDllNGE0M2RwLTEsCisgICAgLTB4MS5kYmZiYmVwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDYKKyAgICAtMHgxLjdiMDViZDgwOTFjZDc5ZGZmMzU5Yzg0MTJiMGRlMWE5cC0xLAorICAgIC0weDEuNTgzN2NjMjFkZGE0NGYzYWI3ZmQ5NmY1N2MwMTRlMTlwLTEsCisgICAgMHgxLmZjY2Y1MHAxLAorICB9LAorICB7IC8vIEVudHJ5IDUwNworICAgIDB4MS43YjA1YmQ4MDkxY2Q3OWRmZjM1OWM4NDEyYjBkZTFhOXAtMSwKKyAgICAtMHgxLjU4MzdjYzIxZGRhNDRmM2FiN2ZkOTZmNTdjMDE0ZTE5cC0xLAorICAgIC0weDEuZmNjZjUwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNTA4CisgICAgLTB4MS5jNWYwNTk4MmVhYmYwMjI3NDg5NjA5NjE2NjZkNTQwZHAtMSwKKyAgICAtMHgxLmQ5YTM5ZGYyMDcxMzlmOTllYmU5YjU2ZGFmYjIzNGI3cC0yLAorICAgIDB4MS4wZWQxNzBwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDkKKyAgICAweDEuYzVmMDU5ODJlYWJmMDIyNzQ4OTYwOTYxNjY2ZDU0MGRwLTEsCisgICAgLTB4MS5kOWEzOWRmMjA3MTM5Zjk5ZWJlOWI1NmRhZmIyMzRiN3AtMiwKKyAgICAtMHgxLjBlZDE3MHAyLAorICB9LAorICB7IC8vIEVudHJ5IDUxMAorICAgIC0weDEuZjMyOWJmYmRhODEyMmY4M2UzYTFlYTAyNDJlYjc2YWFwLTEsCisgICAgLTB4MS5jN2I5MTg5NjM4MTI4YmMwYWUzM2ZkZjI3MjljYzk4N3AtMywKKyAgICAweDEuMWYzYjM4cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTExCisgICAgMHgxLmYzMjliZmJkYTgxMjJmODNlM2ExZWEwMjQyZWI3NmFhcC0xLAorICAgIC0weDEuYzdiOTE4OTYzODEyOGJjMGFlMzNmZGYyNzI5Y2M5ODdwLTMsCisgICAgLTB4MS4xZjNiMzhwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTIKKyAgICAtMHgxLmZmYmNhODhhZTkwZjA5MDBiNmQzYWQ4OWVkZGQyYzgwcC0xLAorICAgIDB4MS4wNjkwODJlMDRiMjVlOWQyZWE5ZTI2M2I1MGQwOGIzNHAtNSwKKyAgICAweDEuMmZhNXAyLAorICB9LAorICB7IC8vIEVudHJ5IDUxMworICAgIDB4MS5mZmJjYTg4YWU5MGYwOTAwYjZkM2FkODllZGRkMmM4MHAtMSwKKyAgICAweDEuMDY5MDgyZTA0YjI1ZTlkMmVhOWUyNjNiNTBkMDhiMzRwLTUsCisgICAgLTB4MS4yZmE1cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTE0CisgICAgLTB4MS5lYWQ2ODc0MDljOTVkY2FmNjFhZjk4NTEzNTE3ZjUwN3AtMSwKKyAgICAweDEuMjM1YjE4NjFmMjFhYTg2ZGNlMjU5ZTRlNWI0ZWYzOTVwLTIsCisgICAgMHgxLjQwMGVjOHAyLAorICB9LAorICB7IC8vIEVudHJ5IDUxNQorICAgIDB4MS5lYWQ2ODc0MDljOTVkY2FmNjFhZjk4NTEzNTE3ZjUwN3AtMSwKKyAgICAweDEuMjM1YjE4NjFmMjFhYTg2ZGNlMjU5ZTRlNWI0ZWYzOTVwLTIsCisgICAgLTB4MS40MDBlYzhwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTYKKyAgICAtMHgxLmI1ZDU0ZmQ3OTM3MmI5MGQ1ZDRjN2FjZjdhZGFlZDQycC0xLAorICAgIDB4MS4wOTZhYWY3MDM0MTQ4NTA2MmY0NDNjODBhOTBhM2JlM3AtMSwKKyAgICAweDEuNTA3ODkwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTE3CisgICAgMHgxLmI1ZDU0ZmQ3OTM3MmI5MGQ1ZDRjN2FjZjdhZGFlZDQycC0xLAorICAgIDB4MS4wOTZhYWY3MDM0MTQ4NTA2MmY0NDNjODBhOTBhM2JlM3AtMSwKKyAgICAtMHgxLjUwNzg5MHAyLAorICB9LAorICB7IC8vIEVudHJ5IDUxOAorICAgIC0weDEuNjQzMDkyZjQyYWU3OTczNzU1MzE0MjBjMDA1Y2EyY2ZwLTEsCisgICAgMHgxLjZmY2I2YWUwMzEwN2JlNDU4ZDA3MzYxMzcxZWZhYmI0cC0xLAorICAgIDB4MS42MGUyNThwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTkKKyAgICAweDEuNjQzMDkyZjQyYWU3OTczNzU1MzE0MjBjMDA1Y2EyY2ZwLTEsCisgICAgMHgxLjZmY2I2YWUwMzEwN2JlNDU4ZDA3MzYxMzcxZWZhYmI0cC0xLAorICAgIC0weDEuNjBlMjU4cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTIwCisgICAgLTB4MS5mNjdlZGYzYjdiZWU4NTU0ZDU0ZDg0ZWE4M2Y2Y2IyMXAtMiwKKyAgICAweDEuYmUxZDZkMTBkNWM4Y2VlYjhiZjlhZWI3YTlmNjkwYjlwLTEsCisgICAgMHgxLjcxNGMyMHAyLAorICB9LAorICB7IC8vIEVudHJ5IDUyMQorICAgIDB4MS5mNjdlZGYzYjdiZWU4NTU0ZDU0ZDg0ZWE4M2Y2Y2IyMXAtMiwKKyAgICAweDEuYmUxZDZkMTBkNWM4Y2VlYjhiZjlhZWI3YTlmNjkwYjlwLTEsCisgICAgLTB4MS43MTRjMjBwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjIKKyAgICAtMHgxLjAzYmU0ZDkzZDk0OTMyNTM0MGIyZjQ2NDIwMTU0NWE3cC0yLAorICAgIDB4MS5lZjQxM2M3MmQ5ODhiYjUzOTM3OTc1ZTRmZDRmY2M3YXAtMSwKKyAgICAweDEuODFiNWU4cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNTIzCisgICAgMHgxLjAzYmU0ZDkzZDk0OTMyNTM0MGIyZjQ2NDIwMTU0NWE3cC0yLAorICAgIDB4MS5lZjQxM2M3MmQ5ODhiYjUzOTM3OTc1ZTRmZDRmY2M3YXAtMSwKKyAgICAtMHgxLjgxYjVlOHAyLAorICB9LAorICB7IC8vIEVudHJ5IDUyNAorICAgIDB4MS5lZmIyNmNmYTIwZjIwOThmZjdlOWU0MmYwMjYwZWIwMXAtNSwKKyAgICAweDEuZmYwZmQyY2I1YTkyMjhjZmExZTAxNjA1ZDA2MjZjODRwLTEsCisgICAgMHgxLmVmZmZmZXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjUKKyAgICAtMHgxLmVmYjI2Y2ZhMjBmMjA5OGZmN2U5ZTQyZjAyNjBlYjAxcC01LAorICAgIDB4MS5mZjBmZDJjYjVhOTIyOGNmYTFlMDE2MDVkMDYyNmM4NHAtMSwKKyAgICAtMHgxLmVmZmZmZXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjYKKyAgICAweDEuZWZiMjZlZjkzMGM0ZDNmMmIwZGJlMTkzMWJhNWFlNjRwLTUsCisgICAgMHgxLmZmMGZkMmM5NmFkZmJhZDVmOTA0YTcxYjJkMjEwYTJhcC0xLAorICAgIDB4MS5mMHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjcKKyAgICAtMHgxLmVmYjI2ZWY5MzBjNGQzZjJiMGRiZTE5MzFiYTVhZTY0cC01LAorICAgIDB4MS5mZjBmZDJjOTZhZGZiYWQ1ZjkwNGE3MWIyZDIxMGEyYXAtMSwKKyAgICAtMHgxLmYwcC01LAorICB9LAorICB7IC8vIEVudHJ5IDUyOAorICAgIDB4MS5lZmIyNzBmODQwOTc5YzY1Yjc1ZWU1YzY3MDE2YTg2NnAtNSwKKyAgICAweDEuZmYwZmQyYzc3YjJkNGFkZDQwNTY2ZWM1YWEyNGZjNmVwLTEsCisgICAgMHgxLmYwMDAwMnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjkKKyAgICAtMHgxLmVmYjI3MGY4NDA5NzljNjViNzVlZTVjNjcwMTZhODY2cC01LAorICAgIDB4MS5mZjBmZDJjNzdiMmQ0YWRkNDA1NjZlYzVhYTI0ZmM2ZXAtMSwKKyAgICAtMHgxLmYwMDAwMnAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzAKKyAgICAweDEuZjZiYWE4MTZmY2U1ZWE1YTYwZDhjOWZkMmEyODkzODBwLTQsCisgICAgMHgxLmZjMjEwMDVkMjE2YTg5ZGU1NWIxOTIwOTZmYzZiN2JhcC0xLAorICAgIDB4MS5mN2ZmZmVwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTMxCisgICAgLTB4MS5mNmJhYTgxNmZjZTVlYTVhNjBkOGM5ZmQyYTI4OTM4MHAtNCwKKyAgICAweDEuZmMyMTAwNWQyMTZhODlkZTU1YjE5MjA5NmZjNmI3YmFwLTEsCisgICAgLTB4MS5mN2ZmZmVwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTMyCisgICAgMHgxLmY2YmFhYTEzMWRlNjQzOGU1NjExMjc5ODY0ZmU3NjYzcC00LAorICAgIDB4MS5mYzIxMDA1NTQ2N2ZlNThhMjAxOTMzOTliM2JjMGRkMnAtMSwKKyAgICAweDEuZjhwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTMzCisgICAgLTB4MS5mNmJhYWExMzFkZTY0MzhlNTYxMTI3OTg2NGZlNzY2M3AtNCwKKyAgICAweDEuZmMyMTAwNTU0NjdmZTU4YTIwMTkzMzk5YjNiYzBkZDJwLTEsCisgICAgLTB4MS5mOHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzQKKyAgICAweDEuZjZiYWFjMGYzZWU2OTRlNzYwYTEzOGJjMDZjOGJlM2RwLTQsCisgICAgMHgxLmZjMjEwMDRkNmI5NTM5NDU2NjdmODAwZmY4MWRlMGVicC0xLAorICAgIDB4MS5mODAwMDJwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTM1CisgICAgLTB4MS5mNmJhYWMwZjNlZTY5NGU3NjBhMTM4YmMwNmM4YmUzZHAtNCwKKyAgICAweDEuZmMyMTAwNGQ2Yjk1Mzk0NTY2N2Y4MDBmZjgxZGUwZWJwLTEsCisgICAgLTB4MS5mODAwMDJwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTM2CisgICAgMHgxLjRhOGMzOTU1NTJmYjQzMmFmMzE3ODBlODgzYzk4ZjcxcC0zLAorICAgIDB4MS5mOTQ5ODRjNmZkZjFiZTYxNjg1MDlmZjFlMzVmNjJkZXAtMSwKKyAgICAweDEuNGJmZmZlcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDUzNworICAgIC0weDEuNGE4YzM5NTU1MmZiNDMyYWYzMTc4MGU4ODNjOThmNzFwLTMsCisgICAgMHgxLmY5NDk4NGM2ZmRmMWJlNjE2ODUwOWZmMWUzNWY2MmRlcC0xLAorICAgIC0weDEuNGJmZmZlcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDUzOAorICAgIDB4MS40YThjM2I0ZTljN2ZmZmQ0ODMwNWY0NGE0MmY1ZjUwZnAtMywKKyAgICAweDEuZjk0OTg0YjI1NTJlMTk0MWVjNzY2YzZhODJlY2U0YTNwLTEsCisgICAgMHgxLjRjcC0zLAorICB9LAorICB7IC8vIEVudHJ5IDUzOQorICAgIC0weDEuNGE4YzNiNGU5YzdmZmZkNDgzMDVmNDRhNDJmNWY1MGZwLTMsCisgICAgMHgxLmY5NDk4NGIyNTUyZTE5NDFlYzc2NmM2YTgyZWNlNGEzcC0xLAorICAgIC0weDEuNGNwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTQwCisgICAgMHgxLjRhOGMzZDQ3ZTYwNGE3ZDU0ZjNmN2RlNDAyNDA5ZTJjcC0zLAorICAgIDB4MS5mOTQ5ODQ5ZGFjNmE1NDhkZDg1MTEzOTA0MTEwNjMxNnAtMSwKKyAgICAweDEuNGMwMDAycC0zLAorICB9LAorICB7IC8vIEVudHJ5IDU0MQorICAgIC0weDEuNGE4YzNkNDdlNjA0YTdkNTRmM2Y3ZGU0MDI0MDllMmNwLTMsCisgICAgMHgxLmY5NDk4NDlkYWM2YTU0OGRkODUxMTM5MDQxMTA2MzE2cC0xLAorICAgIC0weDEuNGMwMDAycC0zLAorICB9LAorICB7IC8vIEVudHJ5IDU0MgorICAgIDB4MS4yZTljZDgzNjMwZWIzNWMxMmVmY2ZiODQxMzU4Mzk5OHAtMiwKKyAgICAweDEuZTkyMWRkNzA1NGVmNWQ0ZjcyN2Q5MzhjZTEwYTA1M2NwLTEsCisgICAgMHgxLjMzMzMzMnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDMKKyAgICAtMHgxLjJlOWNkODM2MzBlYjM1YzEyZWZjZmI4NDEzNTgzOTk4cC0yLAorICAgIDB4MS5lOTIxZGQ3MDU0ZWY1ZDRmNzI3ZDkzOGNlMTBhMDUzY3AtMSwKKyAgICAtMHgxLjMzMzMzMnAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDQKKyAgICAweDEuMmU5Y2RhMWY1MmM4ODA0MjgzM2YyMzZmZjBmOWQ0ODZwLTIsCisgICAgMHgxLmU5MjFkZDI0YWRiOTEyOWVmYzA1M2Y5YWNkNGQyNDQ0cC0xLAorICAgIDB4MS4zMzMzMzRwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTQ1CisgICAgLTB4MS4yZTljZGExZjUyYzg4MDQyODMzZjIzNmZmMGY5ZDQ4NnAtMiwKKyAgICAweDEuZTkyMWRkMjRhZGI5MTI5ZWZjMDUzZjlhY2Q0ZDI0NDRwLTEsCisgICAgLTB4MS4zMzMzMzRwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTQ2CisgICAgMHgxLjJlOWNkYzA4NzRhNTdmMWNhMGY5NzZhOWIwMWU0YTcxcC0yLAorICAgIDB4MS5lOTIxZGNkOTA2ODI0ZGE2MGU0M2MwM2E3Nzc0YjE3MXAtMSwKKyAgICAweDEuMzMzMzM2cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDU0NworICAgIC0weDEuMmU5Y2RjMDg3NGE1N2YxY2EwZjk3NmE5YjAxZTRhNzFwLTIsCisgICAgMHgxLmU5MjFkY2Q5MDY4MjRkYTYwZTQzYzAzYTc3NzRiMTcxcC0xLAorICAgIC0weDEuMzMzMzM2cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDU0OAorICAgIDB4MS4zZmFlZmIyYjY4ZTY3ODZlYjY5MmJkNGU0MDQ1MjEzZXAtMSwKKyAgICAweDEuOGZlZWRjOTI3NjRiZmJkY2I0MTM4OWU4MjA2M2VkNmVwLTEsCisgICAgMHgxLjU5NDMxNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDkKKyAgICAtMHgxLjNmYWVmYjJiNjhlNjc4NmViNjkyYmQ0ZTQwNDUyMTNlcC0xLAorICAgIDB4MS44ZmVlZGM5Mjc2NGJmYmRjYjQxMzg5ZTgyMDYzZWQ2ZXAtMSwKKyAgICAtMHgxLjU5NDMxNnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTAKKyAgICAweDEuM2ZhZWZjYmI1N2MyNmIwZDg0YjYzZGJmYjcyYjQxM2JwLTEsCisgICAgMHgxLjhmZWVkYjUyYzc1MDA4N2M1Zjg3MjdlMDI3OWU1ZjY2cC0xLAorICAgIDB4MS41OTQzMThwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTUxCisgICAgLTB4MS4zZmFlZmNiYjU3YzI2YjBkODRiNjNkYmZiNzJiNDEzYnAtMSwKKyAgICAweDEuOGZlZWRiNTJjNzUwMDg3YzVmODcyN2UwMjc5ZTVmNjZwLTEsCisgICAgLTB4MS41OTQzMThwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTUyCisgICAgMHgxLjNmYWVmZTRiNDY5ZDFkZmQ1NjFlNjY2ZWRkYTdjNmU2cC0xLAorICAgIDB4MS44ZmVlZGExMzE4NTI4NTJkMmZhN2ZlODg0N2IwNTk3M3AtMSwKKyAgICAweDEuNTk0MzFhcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU1MworICAgIC0weDEuM2ZhZWZlNGI0NjlkMWRmZDU2MWU2NjZlZGRhN2M2ZTZwLTEsCisgICAgMHgxLjhmZWVkYTEzMTg1Mjg1MmQyZmE3ZmU4ODQ3YjA1OTczcC0xLAorICAgIC0weDEuNTk0MzFhcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU1NAorICAgIDB4MS42ODg4YTM3NWFiMjI4YzFlMDMxYzQwMDU3Njk1MDlmOXAtMSwKKyAgICAweDEuNmI4OTkxMTI3ODU5ZmQ5YjQzY2ExZDA4YjkyYWE0MDFwLTEsCisgICAgMHgxLjhmZmZmZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTUKKyAgICAtMHgxLjY4ODhhMzc1YWIyMjhjMWUwMzFjNDAwNTc2OTUwOWY5cC0xLAorICAgIDB4MS42Yjg5OTExMjc4NTlmZDliNDNjYTFkMDhiOTJhYTQwMXAtMSwKKyAgICAtMHgxLjhmZmZmZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTYKKyAgICAweDEuNjg4OGE0ZTEzNGIyZWE1MjBiMjI2ZWNhODY5NGIzYTJwLTEsCisgICAgMHgxLjZiODk4ZmE5ZWZiNWQyMmI1OGYwZDk5ZTk2MzQ5MzFhcC0xLAorICAgIDB4MS45MHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTcKKyAgICAtMHgxLjY4ODhhNGUxMzRiMmVhNTIwYjIyNmVjYTg2OTRiM2EycC0xLAorICAgIDB4MS42Yjg5OGZhOWVmYjVkMjJiNThmMGQ5OWU5NjM0OTMxYXAtMSwKKyAgICAtMHgxLjkwcC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU1OAorICAgIDB4MS42ODg4YTY0Y2JlNDFkZmZkNmU0NzY4ZGNjYTRkYjUzYnAtMSwKKyAgICAweDEuNmI4OThlNDE2NzEwM2IzMWRlNmRhNjdlYmY1ZTlmZTZwLTEsCisgICAgMHgxLjkwMDAwMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTkKKyAgICAtMHgxLjY4ODhhNjRjYmU0MWRmZmQ2ZTQ3NjhkY2NhNGRiNTNicC0xLAorICAgIDB4MS42Yjg5OGU0MTY3MTAzYjMxZGU2ZGE2N2ViZjVlOWZlNnAtMSwKKyAgICAtMHgxLjkwMDAwMnAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjAKKyAgICAtMC4wZiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgLTB4MS5wLTE0OSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjEKKyAgICAwLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAweDEucC0xNDksCisgIH0sCisgIHsgLy8gRW50cnkgNTYyCisgICAgMC4wLAorICAgIDB4MS5wMCwKKyAgICAwLjAsCisgIH0sCisgIHsgLy8gRW50cnkgNTYzCisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ5LAorICB9LAorICB7IC8vIEVudHJ5IDU2NAorICAgIC0wLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5LAorICB9LAorICB7IC8vIEVudHJ5IDU2NQorICAgIDB4MS45MWY2NWRjY2ZlYWQzNTNkOGRiOWMzMmYxMjI2MjczMHAtNSwKKyAgICAweDEuZmY2MjFlMzg5NTZhM2IzYmU5MjAyNTZkZGI2MDM0Y2RwLTEsCisgICAgMHgxLjkyMWZiNHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjYKKyAgICAtMHgxLjkxZjY1ZGNjZmVhZDM1M2Q4ZGI5YzMyZjEyMjYyNzMwcC01LAorICAgIDB4MS5mZjYyMWUzODk1NmEzYjNiZTkyMDI1NmRkYjYwMzRjZHAtMSwKKyAgICAtMHgxLjkyMWZiNHAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjcKKyAgICAweDEuOTFmNjVmY2M2MGNiNmQwOWZjYzVjMzVkZDZhNzk4YzhwLTUsCisgICAgMHgxLmZmNjIxZTM3MDM3M2RjNmYzOTYzZDQyODk2ZWRlMDc4cC0xLAorICAgIDB4MS45MjFmYjZwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTY4CisgICAgLTB4MS45MWY2NWZjYzYwY2I2ZDA5ZmNjNWMzNWRkNmE3OThjOHAtNSwKKyAgICAweDEuZmY2MjFlMzcwMzczZGM2ZjM5NjNkNDI4OTZlZGUwNzhwLTEsCisgICAgLTB4MS45MjFmYjZwLTUsCisgIH0sCisgIHsgLy8gRW50cnkgNTY5CisgICAgMHgxLjkxZjY2MWNiYzJlOWEzNDQ3NTcxZjcyYmNmYmMyMWUycC01LAorICAgIDB4MS5mZjYyMWUzNTcxN2Q3YmEzMjc4OTRiZGZkZTlmNDc4N3AtMSwKKyAgICAweDEuOTIxZmI4cC01LAorICB9LAorICB7IC8vIEVudHJ5IDU3MAorICAgIC0weDEuOTFmNjYxY2JjMmU5YTM0NDc1NzFmNzJiY2ZiYzIxZTJwLTUsCisgICAgMHgxLmZmNjIxZTM1NzE3ZDdiYTMyNzg5NGJkZmRlOWY0Nzg3cC0xLAorICAgIC0weDEuOTIxZmI4cC01LAorICB9LAorICB7IC8vIEVudHJ5IDU3MQorICAgIDB4MS45MTdhNmE3ZmU4Mjk3YmYwYTExMjVmYjAyYjIwMzhhZXAtNCwKKyAgICAweDEuZmQ4OGRhNDEwYjYxY2Q1NTIyMWQ5YmViOTk2ZDRkOTlwLTEsCisgICAgMHgxLjkyMWZiNHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzIKKyAgICAtMHgxLjkxN2E2YTdmZTgyOTdiZjBhMTEyNWZiMDJiMjAzOGFlcC00LAorICAgIDB4MS5mZDg4ZGE0MTBiNjFjZDU1MjIxZDliZWI5OTZkNGQ5OXAtMSwKKyAgICAtMHgxLjkyMWZiNHAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzMKKyAgICAweDEuOTE3YTZjN2Q3MTAzYjlkOTBlMDk2MTUxNjQ0NDljNmJwLTQsCisgICAgMHgxLmZkODhkYTNhYzU3ODFmNWE2ZmMzMmU0MGVkNTEyMmIwcC0xLAorICAgIDB4MS45MjFmYjZwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTc0CisgICAgLTB4MS45MTdhNmM3ZDcxMDNiOWQ5MGUwOTYxNTE2NDQ0OWM2YnAtNCwKKyAgICAweDEuZmQ4OGRhM2FjNTc4MWY1YTZmYzMyZTQwZWQ1MTIyYjBwLTEsCisgICAgLTB4MS45MjFmYjZwLTQsCisgIH0sCisgIHsgLy8gRW50cnkgNTc1CisgICAgMHgxLjkxN2E2ZTdhZjlkZGYxN2I5MTRlNmQyZThlODNiMzNlcC00LAorICAgIDB4MS5mZDg4ZGEzNDdmOGU2OTY5OTlmZmQ1ODA2MGJhMzU2OXAtMSwKKyAgICAweDEuOTIxZmI4cC00LAorICB9LAorICB7IC8vIEVudHJ5IDU3NgorICAgIC0weDEuOTE3YTZlN2FmOWRkZjE3YjkxNGU2ZDJlOGU4M2IzM2VwLTQsCisgICAgMHgxLmZkODhkYTM0N2Y4ZTY5Njk5OWZmZDU4MDYwYmEzNTY5cC0xLAorICAgIC0weDEuOTIxZmI4cC00LAorICB9LAorICB7IC8vIEVudHJ5IDU3NworICAgIDB4MS44ZjhiODI4ODkyOTZiNWNmNzkwNGRiMWU3NGIzNDY2YnAtMywKKyAgICAweDEuZjYyOTdkMGY0NjcxZGE1ODBkZmVjZGQ0ZGIyOWY0NzNwLTEsCisgICAgMHgxLjkyMWZiNHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzgKKyAgICAtMHgxLjhmOGI4Mjg4OTI5NmI1Y2Y3OTA0ZGIxZTc0YjM0NjZicC0zLAorICAgIDB4MS5mNjI5N2QwZjQ2NzFkYTU4MGRmZWNkZDRkYjI5ZjQ3M3AtMSwKKyAgICAtMHgxLjkyMWZiNHAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzkKKyAgICAweDEuOGY4Yjg0N2ViYzEzYjg5OThlYzViMzdlNzA2NTM0MWVwLTMsCisgICAgMHgxLmY2Mjk3Y2Y2NGRiOWEyMWQ5OGFiMzk0MGZjOGE4NmYwcC0xLAorICAgIDB4MS45MjFmYjZwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTgwCisgICAgLTB4MS44ZjhiODQ3ZWJjMTNiODk5OGVjNWIzN2U3MDY1MzQxZXAtMywKKyAgICAweDEuZjYyOTdjZjY0ZGI5YTIxZDk4YWIzOTQwZmM4YTg2ZjBwLTEsCisgICAgLTB4MS45MjFmYjZwLTMsCisgIH0sCisgIHsgLy8gRW50cnkgNTgxCisgICAgMHgxLjhmOGI4Njc0ZTU5MGEyNmFlYzNlYTAxZDMwYWVkNDg2cC0zLAorICAgIDB4MS5mNjI5N2NkZDU1MDE0YTgwOGI4ODNmZDE4M2YzMThhY3AtMSwKKyAgICAweDEuOTIxZmI4cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDU4MgorICAgIC0weDEuOGY4Yjg2NzRlNTkwYTI2YWVjM2VhMDFkMzBhZWQ0ODZwLTMsCisgICAgMHgxLmY2Mjk3Y2RkNTUwMTRhODA4Yjg4M2ZkMTgzZjMxOGFjcC0xLAorICAgIC0weDEuOTIxZmI4cC0zLAorICB9LAorICB7IC8vIEVudHJ5IDU4MworICAgIDB4MS44N2RlMjkzZjU2OTcxN2E0MmEzYmRiMDFhZWFlMjA2M3AtMiwKKyAgICAweDEuZDkwNmJkMzEzNDQzMDA3ZGNiMGJkNGUzZDYzMjg0YzBwLTEsCisgICAgMHgxLjkyMWZiNHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODQKKyAgICAtMHgxLjg3ZGUyOTNmNTY5NzE3YTQyYTNiZGIwMWFlYWUyMDYzcC0yLAorICAgIDB4MS5kOTA2YmQzMTM0NDMwMDdkY2IwYmQ0ZTNkNjMyODRjMHAtMSwKKyAgICAtMHgxLjkyMWZiNHAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODUKKyAgICAweDEuODdkZTJiMTg1ZDU0MTdkY2E4MDBiODVjYTEzMTkwNDNwLTIsCisgICAgMHgxLmQ5MDZiY2NmM2NiODc1ODc0ZGEzZGE0YzAxMTA0YmFmcC0xLAorICAgIDB4MS45MjFmYjZwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTg2CisgICAgLTB4MS44N2RlMmIxODVkNTQxN2RjYTgwMGI4NWNhMTMxOTA0M3AtMiwKKyAgICAweDEuZDkwNmJjY2YzY2I4NzU4NzRkYTNkYTRjMDExMDRiYWZwLTEsCisgICAgLTB4MS45MjFmYjZwLTIsCisgIH0sCisgIHsgLy8gRW50cnkgNTg3CisgICAgMHgxLjg3ZGUyY2YxNjQxMGI2MWQ5YWZmN2U2MjhmYzg1M2IycC0yLAorICAgIDB4MS5kOTA2YmM2ZDQ1MmQ3NDRmMjEwODEwODYxMTAyZjJkYXAtMSwKKyAgICAweDEuOTIxZmI4cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDU4OAorICAgIC0weDEuODdkZTJjZjE2NDEwYjYxZDlhZmY3ZTYyOGZjODUzYjJwLTIsCisgICAgMHgxLmQ5MDZiYzZkNDUyZDc0NGYyMTA4MTA4NjExMDJmMmRhcC0xLAorICAgIC0weDEuOTIxZmI4cC0yLAorICB9LAorICB7IC8vIEVudHJ5IDU4OQorICAgIDB4MS42YTA5ZTU4MmFhMzk0NTQ2MWI1YThhMDc4N2Q1YWI1YnAtMSwKKyAgICAweDEuNmEwOWU3NGQzZDNmYmI5NGQ5NDI3NGYzNzc2OWY2ZWFwLTEsCisgICAgMHgxLjkyMWZiNHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTAKKyAgICAtMHgxLjZhMDllNTgyYWEzOTQ1NDYxYjVhOGEwNzg3ZDVhYjVicC0xLAorICAgIDB4MS42YTA5ZTc0ZDNkM2ZiYjk0ZDk0Mjc0ZjM3NzY5ZjZlYXAtMSwKKyAgICAtMHgxLjkyMWZiNHAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTEKKyAgICAweDEuNmEwOWU2ZWNiNDFmZGQ3ZTY4MTg3MmM4NTQ4ODcwMTlwLTEsCisgICAgMHgxLjZhMDllNWUzMzM1OTgzZTVhYzkyZTczM2UzZjI0YjQycC0xLAorICAgIDB4MS45MjFmYjZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTkyCisgICAgLTB4MS42YTA5ZTZlY2I0MWZkZDdlNjgxODcyYzg1NDg4NzAxOXAtMSwKKyAgICAweDEuNmEwOWU1ZTMzMzU5ODNlNWFjOTJlNzMzZTNmMjRiNDJwLTEsCisgICAgLTB4MS45MjFmYjZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgNTkzCisgICAgMHgxLjZhMDllODU2YmUwNTBiYWNjZGU5YTc2OTYxZTg0YWE3cC0xLAorICAgIDB4MS42YTA5ZTQ3OTI5NzFlMjJjOWEwMDI2MWFlYWMwNzBkYXAtMSwKKyAgICAweDEuOTIxZmI4cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU5NAorICAgIC0weDEuNmEwOWU4NTZiZTA1MGJhY2NkZTlhNzY5NjFlODRhYTdwLTEsCisgICAgMHgxLjZhMDllNDc5Mjk3MWUyMmM5YTAwMjYxYWVhYzA3MGRhcC0xLAorICAgIC0weDEuOTIxZmI4cC0xLAorICB9LAorICB7IC8vIEVudHJ5IDU5NQorICAgIDB4MS5mZmZmZmZmZmZmZmU2NTQ2Y2MzODIxMWMyNmRhYmVlYnAtMSwKKyAgICAweDEuNDQ0MmQxODQ2OTg5MzYxMDI4MWEwZjliMGU4ZDBlZWZwLTI0LAorICAgIDB4MS45MjFmYjRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZTY1NDZjYzM4MjExYzI2ZGFiZWVicC0xLAorICAgIDB4MS40NDQyZDE4NDY5ODkzNjEwMjgxYTBmOWIwZThkMGVlZnAtMjQsCisgICAgLTB4MS45MjFmYjRwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTcKKyAgICAweDEuZmZmZmZmZmZmZmZmNzY1MjEyNDljNzQyMjkzMGVkODJwLTEsCisgICAgLTB4MS43NzdhNWNmNzJjZWNjNGNkZTNhMzFlN2Q1YTAyNjE0MnAtMjUsCisgICAgMHgxLjkyMWZiNnAwLAorICB9LAorICB7IC8vIEVudHJ5IDU5OAorICAgIC0weDEuZmZmZmZmZmZmZmZmNzY1MjEyNDljNzQyMjkzMGVkODJwLTEsCisgICAgLTB4MS43NzdhNWNmNzJjZWNjNGNkZTNhMzFlN2Q1YTAyNjE0MnAtMjUsCisgICAgLTB4MS45MjFmYjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTkKKyAgICAweDEuZmZmZmZmZmZmZmY4ODc1ZDU4NWI2ZDZjZmNlOTdkOWNwLTEsCisgICAgLTB4MS41ZGRlOTczZGNiMzk4NWY0YThlNzZhMWZlY2EyOWUxZHAtMjMsCisgICAgMHgxLjkyMWZiOHAwLAorICB9LAorICB7IC8vIEVudHJ5IDYwMAorICAgIC0weDEuZmZmZmZmZmZmZmY4ODc1ZDU4NWI2ZDZjZmNlOTdkOWNwLTEsCisgICAgLTB4MS41ZGRlOTczZGNiMzk4NWY0YThlNzZhMWZlY2EyOWUxZHAtMjMsCisgICAgLTB4MS45MjFmYjhwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDEKKyAgICAweDEuNDQ0MmQxODQ2OTg4MzFmMTViNjMxNWJmYTZiNWFlNzVwLTIzLAorICAgIC0weDEuZmZmZmZmZmZmZmY5OTUxYjMwZTA4NDczMmU2MGJiODVwLTEsCisgICAgMHgxLjkyMWZiNHAxLAorICB9LAorICB7IC8vIEVudHJ5IDYwMgorICAgIC0weDEuNDQ0MmQxODQ2OTg4MzFmMTViNjMxNWJmYTZiNWFlNzVwLTIzLAorICAgIC0weDEuZmZmZmZmZmZmZmY5OTUxYjMwZTA4NDczMmU2MGJiODVwLTEsCisgICAgLTB4MS45MjFmYjRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDMKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlYzVmZDYxODk2Y2I0ZjQwZDFkZTc5cC0yNCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZGQ5NDg0OTI3MWQwOGVlY2Y1NGExcC0xLAorICAgIDB4MS45MjFmYjZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDQKKyAgICAweDEuNzc3YTVjZjcyY2VjNWZkNjE4OTZjYjRmNDBkMWRlNzlwLTI0LAorICAgIC0weDEuZmZmZmZmZmZmZmZkZDk0ODQ5MjcxZDA4ZWVjZjU0YTFwLTEsCisgICAgLTB4MS45MjFmYjZwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDUKKyAgICAtMHgxLjVkZGU5NzNkY2IzNDZhZmE0NjIwM2NkZGM2ZjdmZTk3cC0yMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZlMjFkNzU2MTZkYjVlYmM1NjQwNWY1cC0xLAorICAgIDB4MS45MjFmYjhwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDYKKyAgICAweDEuNWRkZTk3M2RjYjM0NmFmYTQ2MjAzY2RkYzZmN2ZlOTdwLTIyLAorICAgIC0weDEuZmZmZmZmZmZmZmUyMWQ3NTYxNmRiNWViYzU2NDA1ZjVwLTEsCisgICAgLTB4MS45MjFmYjhwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDcKKyAgICAtMHgxLjQ0NDJkMTg0Njk4NDIxNzYyODg3MmU1NmViNThiNGMxcC0yMiwKKyAgICAweDEuZmZmZmZmZmZmZmU2NTQ2Y2MzODIxMWY1ZThkZWViOTdwLTEsCisgICAgMHgxLjkyMWZiNHAyLAorICB9LAorICB7IC8vIEVudHJ5IDYwOAorICAgIDB4MS40NDQyZDE4NDY5ODQyMTc2Mjg4NzJlNTZlYjU4YjRjMXAtMjIsCisgICAgMHgxLmZmZmZmZmZmZmZlNjU0NmNjMzgyMTFmNWU4ZGVlYjk3cC0xLAorICAgIC0weDEuOTIxZmI0cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjA5CisgICAgMHgxLjc3N2E1Y2Y3MmNlYWNiZjZlYzY1N2U5NzdlZjc3MWYxcC0yMywKKyAgICAweDEuZmZmZmZmZmZmZmY3NjUyMTI0OWM3NDI4NWJmNzNjMDdwLTEsCisgICAgMHgxLjkyMWZiNnAyLAorICB9LAorICB7IC8vIEVudHJ5IDYxMAorICAgIC0weDEuNzc3YTVjZjcyY2VhY2JmNmVjNjU3ZTk3N2VmNzcxZjFwLTIzLAorICAgIDB4MS5mZmZmZmZmZmZmZjc2NTIxMjQ5Yzc0Mjg1YmY3M2MwN3AtMSwKKyAgICAtMHgxLjkyMWZiNnAyLAorICB9LAorICB7IC8vIEVudHJ5IDYxMQorICAgIDB4MS41ZGRlOTczZGNiMWZmZjEwYmIwMzg4NDc5ZTgyZjRiYnAtMjEsCisgICAgMHgxLmZmZmZmZmZmZmY4ODc1ZDU4NWI2ZGIyYzMxNzExMDA0cC0xLAorICAgIDB4MS45MjFmYjhwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTIKKyAgICAtMHgxLjVkZGU5NzNkY2IxZmZmMTBiYjAzODg0NzllODJmNGJicC0yMSwKKyAgICAweDEuZmZmZmZmZmZmZjg4NzVkNTg1YjZkYjJjMzE3MTEwMDRwLTEsCisgICAgLTB4MS45MjFmYjhwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTMKKyAgICAtMHgxLjQ0NDJkMTg0Njk3M2RmODk1ZDE3OTEwMjNkZWQ1MTNjcC0yMSwKKyAgICAweDEuZmZmZmZmZmZmZjk5NTFiMzBlMDg0YTZhOTkzYjg2NzVwLTEsCisgICAgMHgxLjkyMWZiNHAzLAorICB9LAorICB7IC8vIEVudHJ5IDYxNAorICAgIDB4MS40NDQyZDE4NDY5NzNkZjg5NWQxNzkxMDIzZGVkNTEzY3AtMjEsCisgICAgMHgxLmZmZmZmZmZmZmY5OTUxYjMwZTA4NGE2YTk5M2I4Njc1cC0xLAorICAgIC0weDEuOTIxZmI0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjE1CisgICAgMHgxLjc3N2E1Y2Y3MmNlNDdjN2EzYmEwNGJjMmE2MDdhOWE3cC0yMiwKKyAgICAweDEuZmZmZmZmZmZmZmRkOTQ4NDkyNzFkMGViN2I3Yjg4NGJwLTEsCisgICAgMHgxLjkyMWZiNnAzLAorICB9LAorICB7IC8vIEVudHJ5IDYxNgorICAgIC0weDEuNzc3YTVjZjcyY2U0N2M3YTNiYTA0YmMyYTYwN2E5YTdwLTIyLAorICAgIDB4MS5mZmZmZmZmZmZmZGQ5NDg0OTI3MWQwZWI3YjdiODg0YnAtMSwKKyAgICAtMHgxLjkyMWZiNnAzLAorICB9LAorICB7IC8vIEVudHJ5IDYxNworICAgIDB4MS41ZGRlOTczZGNhY2U0ZjZhOGU5MGJkMTVlMDA2MTBmOHAtMjAsCisgICAgMHgxLmZmZmZmZmZmZmUyMWQ3NTYxNmRiYTQ4MjgzZDNjMmY3cC0xLAorICAgIDB4MS45MjFmYjhwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTgKKyAgICAtMHgxLjVkZGU5NzNkY2FjZTRmNmE4ZTkwYmQxNWUwMDYxMGY4cC0yMCwKKyAgICAweDEuZmZmZmZmZmZmZTIxZDc1NjE2ZGJhNDgyODNkM2MyZjdwLTEsCisgICAgLTB4MS45MjFmYjhwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTkKKyAgICAtMHgxLjQ0NDJkMTg0NjkzMmQ3ZDYyZjU5MjA5Mzg4YzdmN2NhcC0yMCwKKyAgICAweDEuZmZmZmZmZmZmZTY1NDZjYzM4MjE1MmQ5YzBlYjliNDdwLTEsCisgICAgMHgxLjkyMWZiNHA0LAorICB9LAorICB7IC8vIEVudHJ5IDYyMAorICAgIDB4MS40NDQyZDE4NDY5MzJkN2Q2MmY1OTIwOTM4OGM3ZjdjYXAtMjAsCisgICAgMHgxLmZmZmZmZmZmZmU2NTQ2Y2MzODIxNTJkOWMwZWI5YjQ3cC0xLAorICAgIC0weDEuOTIxZmI0cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNjIxCisgICAgMHgxLjc3N2E1Y2Y3MmNjYjNlODc3ODhiODExMjI5ZTcyNWJjcC0yMSwKKyAgICAweDEuZmZmZmZmZmZmZjc2NTIxMjQ5Yzc0ODRlYTdkN2E0MDlwLTEsCisgICAgMHgxLjkyMWZiNnA0LAorICB9LAorICB7IC8vIEVudHJ5IDYyMgorICAgIC0weDEuNzc3YTVjZjcyY2NiM2U4Nzc4OGI4MTEyMjllNzI1YmNwLTIxLAorICAgIDB4MS5mZmZmZmZmZmZmNzY1MjEyNDljNzQ4NGVhN2Q3YTQwOXAtMSwKKyAgICAtMHgxLjkyMWZiNnA0LAorICB9LAorICB7IC8vIEVudHJ5IDYyMworICAgIDB4MS41ZGRlOTczZGM5ODc5MGQxZGNjNjAyYmQxYjg2YmNjYXAtMTksCisgICAgMHgxLmZmZmZmZmZmZjg4NzVkNTg1YjcyMGYyNWYwNDczOTQzcC0xLAorICAgIDB4MS45MjFmYjhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjQKKyAgICAtMHgxLjVkZGU5NzNkYzk4NzkwZDFkY2M2MDJiZDFiODZiY2NhcC0xOSwKKyAgICAweDEuZmZmZmZmZmZmODg3NWQ1ODViNzIwZjI1ZjA0NzM5NDNwLTEsCisgICAgLTB4MS45MjFmYjhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjUKKyAgICAtMHgxLjQ0NDJkMTg0NjgyZWI5MDk3ODVmYWQxOGJjYjVkYmZjcC0xOSwKKyAgICAweDEuZmZmZmZmZmZmOTk1MWIzMGUwODdkZTVjYzM4NjgzYjhwLTEsCisgICAgMHgxLjkyMWZiNHA1LAorICB9LAorICB7IC8vIEVudHJ5IDYyNgorICAgIDB4MS40NDQyZDE4NDY4MmViOTA5Nzg1ZmFkMThiY2I1ZGJmY3AtMTksCisgICAgMHgxLmZmZmZmZmZmZjk5NTFiMzBlMDg3ZGU1Y2MzODY4M2I4cC0xLAorICAgIC0weDEuOTIxZmI0cDUsCisgIH0sCisgIHsgLy8gRW50cnkgNjI3CisgICAgMHgxLjc3N2E1Y2Y3MmM2NjQ2YmM2YzM4NjA3ZWIzNGVlYTEzcC0yMCwKKyAgICAweDEuZmZmZmZmZmZmZGQ5NDg0OTI3MWQ2YjQ2M2RmNmJkZGZwLTEsCisgICAgMHgxLjkyMWZiNnA1LAorICB9LAorICB7IC8vIEVudHJ5IDYyOAorICAgIC0weDEuNzc3YTVjZjcyYzY2NDZiYzZjMzg2MDdlYjM0ZWVhMTNwLTIwLAorICAgIDB4MS5mZmZmZmZmZmZkZDk0ODQ5MjcxZDZiNDYzZGY2YmRkZnAtMSwKKyAgICAtMHgxLjkyMWZiNnA1LAorICB9LAorICB7IC8vIEVudHJ5IDYyOQorICAgIDB4MS41ZGRlOTczZGM0NmM5NjZmMTVhMjQwM2Q2MGNkMTRkMHAtMTgsCisgICAgMHgxLmZmZmZmZmZmZTIxZDc1NjE2ZTAwMGU1NWQwOWY4NzU3cC0xLAorICAgIDB4MS45MjFmYjhwNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzAKKyAgICAtMHgxLjVkZGU5NzNkYzQ2Yzk2NmYxNWEyNDAzZDYwY2QxNGQwcC0xOCwKKyAgICAweDEuZmZmZmZmZmZlMjFkNzU2MTZlMDAwZTU1ZDA5Zjg3NTdwLTEsCisgICAgLTB4MS45MjFmYjhwNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzEKKyAgICAtMHgxLjQ0NDJkMTg0NjQxZTNkZDY5YzdlYzMyZTE0YTIwOWE1cC0xOCwKKyAgICAweDEuZmZmZmZmZmZlNjU0NmNjMzgyNDhhOGNmMGI5YjU3OTVwLTEsCisgICAgMHgxLjkyMWZiNHA2LAorICB9LAorICB7IC8vIEVudHJ5IDYzMgorICAgIDB4MS40NDQyZDE4NDY0MWUzZGQ2OWM3ZWMzMmUxNGEyMDlhNXAtMTgsCisgICAgMHgxLmZmZmZmZmZmZTY1NDZjYzM4MjQ4YThjZjBiOWI1Nzk1cC0xLAorICAgIC0weDEuOTIxZmI0cDYsCisgIH0sCisgIHsgLy8gRW50cnkgNjMzCisgICAgMHgxLjc3N2E1Y2Y3MmFkMjY3OTAzYWVjODExODc3OGIzYjVhcC0xOSwKKyAgICAweDEuZmZmZmZmZmZmNzY1MjEyNDljN2E0ZGQyZTE1ZGQxYzRwLTEsCisgICAgMHgxLjkyMWZiNnA2LAorICB9LAorICB7IC8vIEVudHJ5IDYzNAorICAgIC0weDEuNzc3YTVjZjcyYWQyNjc5MDNhZWM4MTE4Nzc4YjNiNWFwLTE5LAorICAgIDB4MS5mZmZmZmZmZmY3NjUyMTI0OWM3YTRkZDJlMTVkZDFjNHAtMSwKKyAgICAtMHgxLjkyMWZiNnA2LAorICB9LAorICB7IC8vIEVudHJ5IDYzNQorICAgIDB4MS41ZGRlOTczZGIwMDBhY2UzZjk4NWE0NzNlYTFmYzAzOXAtMTcsCisgICAgMHgxLmZmZmZmZmZmODg3NWQ1ODViYjdkNTUzODNhOWIzOWE0cC0xLAorICAgIDB4MS45MjFmYjhwNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzYKKyAgICAtMHgxLjVkZGU5NzNkYjAwMGFjZTNmOTg1YTQ3M2VhMWZjMDM5cC0xNywKKyAgICAweDEuZmZmZmZmZmY4ODc1ZDU4NWJiN2Q1NTM4M2E5YjM5YTRwLTEsCisgICAgLTB4MS45MjFmYjhwNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzcKKyAgICAtMHgxLjQ0NDJkMTg0NTNkYzUxMGIyZDQ5NWI4YmY3OWJkMWNlcC0xNywKKyAgICAweDEuZmZmZmZmZmY5OTUxYjMwZTBiYjU5OGZjMDY3OWE2ZjdwLTEsCisgICAgMHgxLjkyMWZiNHA3LAorICB9LAorICB7IC8vIEVudHJ5IDYzOAorICAgIDB4MS40NDQyZDE4NDUzZGM1MTBiMmQ0OTViOGJmNzliZDFjZXAtMTcsCisgICAgMHgxLmZmZmZmZmZmOTk1MWIzMGUwYmI1OThmYzA2NzlhNmY3cC0xLAorICAgIC0weDEuOTIxZmI0cDcsCisgIH0sCisgIHsgLy8gRW50cnkgNjM5CisgICAgMHgxLjc3N2E1Y2Y3MjQ4MmVhZGY3NWM3MzFmOTcyNTA3NzE4cC0xOCwKKyAgICAweDEuZmZmZmZmZmZkZDk0ODQ5MjcyMzM0MmVhMWRhNDliYWNwLTEsCisgICAgMHgxLjkyMWZiNnA3LAorICB9LAorICB7IC8vIEVudHJ5IDY0MAorICAgIC0weDEuNzc3YTVjZjcyNDgyZWFkZjc1YzczMWY5NzI1MDc3MThwLTE4LAorICAgIDB4MS5mZmZmZmZmZmRkOTQ4NDkyNzIzMzQyZWExZGE0OWJhY3AtMSwKKyAgICAtMHgxLjkyMWZiNnA3LAorICB9LAorICB7IC8vIEVudHJ5IDY0MQorICAgIDB4MS41ZGRlOTczZDVlNTEwNmI3OTAzYTE4YTU1MmFlZmM2ZXAtMTYsCisgICAgMHgxLmZmZmZmZmZlMjFkNzU2MTcyNWM3MTJmMDY4ZmM5NzE4cC0xLAorICAgIDB4MS45MjFmYjhwNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDIKKyAgICAtMHgxLjVkZGU5NzNkNWU1MTA2Yjc5MDNhMThhNTUyYWVmYzZlcC0xNiwKKyAgICAweDEuZmZmZmZmZmUyMWQ3NTYxNzI1YzcxMmYwNjhmYzk3MThwLTEsCisgICAgLTB4MS45MjFmYjhwNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDMKKyAgICAweDEuNmEwOWYxOTQwYjgwYzhlMjVjZmM4YzEwZDQyNTc2YzZwLTEsCisgICAgLTB4MS42YTA5ZGIzYmRiYTA4NjhhMzFlNzY2MzU5YTg0MDZjYXAtMSwKKyAgICAweDEuMmQ5N2M0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjQ0CisgICAgLTB4MS42YTA5ZjE5NDBiODBjOGUyNWNmYzhjMTBkNDI1NzZjNnAtMSwKKyAgICAtMHgxLjZhMDlkYjNiZGJhMDg2OGEzMWU3NjYzNTlhODQwNmNhcC0xLAorICAgIC0weDEuMmQ5N2M0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjQ1CisgICAgMHgxLjZhMDllYmViZTQwODg5MjQ1ZDU3YzVjOWQ5MGE2ZDgycC0xLAorICAgIC0weDEuNmEwOWUwZTQwMzViODY2OTRjMTY1MzRlNDJmYmUxMTFwLTEsCisgICAgMHgxLjJkOTdjNnAxLAorICB9LAorICB7IC8vIEVudHJ5IDY0NgorICAgIC0weDEuNmEwOWViZWJlNDA4ODkyNDVkNTdjNWM5ZDkwYTZkODJwLTEsCisgICAgLTB4MS42YTA5ZTBlNDAzNWI4NjY5NGMxNjUzNGU0MmZiZTExMXAtMSwKKyAgICAtMHgxLjJkOTdjNnAxLAorICB9LAorICB7IC8vIEVudHJ5IDY0NworICAgIDB4MS42YTA5ZTY0M2JjNzlhOGM3OWVmNGJmMTg3NzI3ZTI2OXAtMSwKKyAgICAtMHgxLjZhMDllNjhjMmFmZmU1YWE1ODA1MGFjY2IwNWM2MjQ4cC0xLAorICAgIDB4MS4yZDk3YzhwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDgKKyAgICAtMHgxLjZhMDllNjQzYmM3OWE4Yzc5ZWY0YmYxODc3MjdlMjY5cC0xLAorICAgIC0weDEuNmEwOWU2OGMyYWZmZTVhYTU4MDUwYWNjYjA1YzYyNDhwLTEsCisgICAgLTB4MS4yZDk3YzhwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDkKKyAgICAtMHgxLjZhMDlkZjE5NzA0Y2YxNDEwOGUwOTAwMGZmNjM3NGJmcC0xLAorICAgIC0weDEuNmEwOWVkYjY3NzA2ZTA5OTcxMjFkMTJhMGM4N2JhZThwLTEsCisgICAgMHgxLmY2YTdhMHAxLAorICB9LAorICB7IC8vIEVudHJ5IDY1MAorICAgIDB4MS42YTA5ZGYxOTcwNGNmMTQxMDhlMDkwMDBmZjYzNzRiZnAtMSwKKyAgICAtMHgxLjZhMDllZGI2NzcwNmUwOTk3MTIxZDEyYTBjODdiYWU4cC0xLAorICAgIC0weDEuZjZhN2EwcDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjUxCisgICAgLTB4MS42YTA5ZTRjMTk3Zjg3YWNlMWM4MWI0MzAyMmJlMzliMXAtMSwKKyAgICAtMHgxLjZhMDllODBlNGY3ZjJhODhkZWJlZDM3ZmFhOTNlOGM4cC0xLAorICAgIDB4MS5mNmE3YTJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTIKKyAgICAweDEuNmEwOWU0YzE5N2Y4N2FjZTFjODFiNDMwMjJiZTM5YjFwLTEsCisgICAgLTB4MS42YTA5ZTgwZTRmN2YyYTg4ZGViZWQzN2ZhYTkzZThjOHAtMSwKKyAgICAtMHgxLmY2YTdhMnAxLAorICB9LAorICB7IC8vIEVudHJ5IDY1MworICAgIC0weDEuNmEwOWVhNjliZjhkNjNiY2U0MDk1OGY1YzRiNGYxNTVwLTEsCisgICAgLTB4MS42YTA5ZTI2NjI3ZTBkM2Q5Y2I3NmRlMDBjYjkwMmJlY3AtMSwKKyAgICAweDEuZjZhN2E0cDEsCisgIH0sCisgIHsgLy8gRW50cnkgNjU0CisgICAgMHgxLjZhMDllYTY5YmY4ZDYzYmNlNDA5NThmNWM0YjRmMTU1cC0xLAorICAgIC0weDEuNmEwOWUyNjYyN2UwZDNkOWNiNzZkZTAwY2I5MDJiZWNwLTEsCisgICAgLTB4MS5mNmE3YTRwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTUKKyAgICAtMHgxLmZmZmZmZmZmZmYwNjVjYjI0MGJiOGY5NTE5ZDJjNmYxcC0xLAorICAgIC0weDEuZjk5OTBlOTFhNzQxNjhiOTBiZDY4ZGZhYjc3NWM5Y2FwLTIxLAorICAgIDB4MS4yZDk3YzRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTYKKyAgICAweDEuZmZmZmZmZmZmZjA2NWNiMjQwYmI4Zjk1MTlkMmM2ZjFwLTEsCisgICAgLTB4MS5mOTk5MGU5MWE3NDE2OGI5MGJkNjhkZmFiNzc1YzljYXAtMjEsCisgICAgLTB4MS4yZDk3YzRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTcKKyAgICAtMHgxLmZmZmZmZmZmZmZjMzI5Mzk4OThmNDY0YWFmYzJlNzRhcC0xLAorICAgIC0weDEuZjMzMjFkMjM0ZjEzNjNkMTg3ZGQwOTUyOGI2N2IyMTVwLTIyLAorICAgIDB4MS4yZDk3YzZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTgKKyAgICAweDEuZmZmZmZmZmZmZmMzMjkzOTg5OGY0NjRhYWZjMmU3NGFwLTEsCisgICAgLTB4MS5mMzMyMWQyMzRmMTM2M2QxODdkZDA5NTI4YjY3YjIxNXAtMjIsCisgICAgLTB4MS4yZDk3YzZwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTkKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmY1YzBkMjYzMGVlMGExZmI0ZTdicC0xLAorICAgIDB4MS45OWJjNWI5NjFiMWFjYWNhMThkOTcxZjY4YWU5OWRhOXAtMjcsCisgICAgMHgxLjJkOTdjOHAyLAorICB9LAorICB7IC8vIEVudHJ5IDY2MAorICAgIDB4MS5mZmZmZmZmZmZmZmZmNWMwZDI2MzBlZTBhMWZiNGU3YnAtMSwKKyAgICAweDEuOTliYzViOTYxYjFhY2FjYTE4ZDk3MWY2OGFlOTlkYTlwLTI3LAorICAgIC0weDEuMmQ5N2M4cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjYxCisgICAgLTB4MS42YTA5ZjUyOTMxNmNkZTVhMTkwZDIzNWNjNGNjYjgyNXAtMSwKKyAgICAweDEuNmEwOWQ3YTZiNTcyYzJjODI0ZDEzN2QwNDA1ZDgxODhwLTEsCisgICAgMHgxLjVmZGJiY3AyLAorICB9LAorICB7IC8vIEVudHJ5IDY2MgorICAgIDB4MS42YTA5ZjUyOTMxNmNkZTVhMTkwZDIzNWNjNGNjYjgyNXAtMSwKKyAgICAweDEuNmEwOWQ3YTZiNTcyYzJjODI0ZDEzN2QwNDA1ZDgxODhwLTEsCisgICAgLTB4MS41ZmRiYmNwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjMKKyAgICAtMHgxLjZhMDllOWQ4ZTI4MjY3NzA1NjdlYTgxOGIyZTg5OTYwcC0xLAorICAgIDB4MS42YTA5ZTJmNzA0ZWVjYjE4MWUzZjVlY2U5YmUwY2EwZnAtMSwKKyAgICAweDEuNWZkYmJlcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjY0CisgICAgMHgxLjZhMDllOWQ4ZTI4MjY3NzA1NjdlYTgxOGIyZTg5OTYwcC0xLAorICAgIDB4MS42YTA5ZTJmNzA0ZWVjYjE4MWUzZjVlY2U5YmUwY2EwZnAtMSwKKyAgICAtMHgxLjVmZGJiZXAyLAorICB9LAorICB7IC8vIEVudHJ5IDY2NQorICAgIC0weDEuNmEwOWRlODg5MzNkNmUwYzFkYjc4ZTFkN2NkMTUxNzNwLTEsCisgICAgMHgxLjZhMDllZTQ3NTQxMDUwZWY1OWVjNGJmY2U5MzVjYzFhcC0xLAorICAgIDB4MS41ZmRiYzBwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjYKKyAgICAweDEuNmEwOWRlODg5MzNkNmUwYzFkYjc4ZTFkN2NkMTUxNzNwLTEsCisgICAgMHgxLjZhMDllZTQ3NTQxMDUwZWY1OWVjNGJmY2U5MzVjYzFhcC0xLAorICAgIC0weDEuNWZkYmMwcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjY3CisgICAgMHgxLjZhMDlkMDMzZmE3MTVhNDA3YTZmMDNkMDFiOTExMTNmcC0xLAorICAgIDB4MS42YTA5ZmM5YmViYWJhMjA4YzgxZWMwYjFjZDMwNzU4OXAtMSwKKyAgICAweDEuYzQ2M2E4cDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjY4CisgICAgLTB4MS42YTA5ZDAzM2ZhNzE1YTQwN2E2ZjAzZDAxYjkxMTEzZnAtMSwKKyAgICAweDEuNmEwOWZjOWJlYmFiYTIwOGM4MWVjMGIxY2QzMDc1ODlwLTEsCisgICAgLTB4MS5jNDYzYThwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjkKKyAgICAweDEuNmEwOWRiODQ0YTI4Zjg2MzU4NTFmZGY4ODE4NTE1ZWZwLTEsCisgICAgMHgxLjZhMDlmMTRiOWNmY2MwZjYyMjdkMzg2Y2MzNzA0YTA1cC0xLAorICAgIDB4MS5jNDYzYWFwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzAKKyAgICAtMHgxLjZhMDlkYjg0NGEyOGY4NjM1ODUxZmRmODgxODUxNWVmcC0xLAorICAgIDB4MS42YTA5ZjE0YjljZmNjMGY2MjI3ZDM4NmNjMzcwNGEwNXAtMSwKKyAgICAtMHgxLmM0NjNhYXAyLAorICB9LAorICB7IC8vIEVudHJ5IDY3MQorICAgIDB4MS42YTA5ZTZkNDk5ODYxNDBmNTUyMjZmYzU4NjcyNjEyY3AtMSwKKyAgICAweDEuNmEwOWU1ZmI0ZGYzNWQ2NzI5ZjQ3MmRhMzQxM2U0MDRwLTEsCisgICAgMHgxLmM0NjNhY3AyLAorICB9LAorICB7IC8vIEVudHJ5IDY3MgorICAgIC0weDEuNmEwOWU2ZDQ5OTg2MTQwZjU1MjI2ZmM1ODY3MjYxMmNwLTEsCisgICAgMHgxLjZhMDllNWZiNGRmMzVkNjcyOWY0NzJkYTM0MTNlNDA0cC0xLAorICAgIC0weDEuYzQ2M2FjcDIsCisgIH0sCisgIHsgLy8gRW50cnkgNjczCisgICAgMHgxLmZmZmZmZmZmZmY5NTM5NzkzNGNhYzFmMjg1MzJkM2QzcC0xLAorICAgIDB4MS40YWE5YzJmMmMxZGVmYjg3MjhmMGQyZGExMjE3YWFlMXAtMjEsCisgICAgMHgxLmY2YTdhMHAyLAorICB9LAorICB7IC8vIEVudHJ5IDY3NAorICAgIC0weDEuZmZmZmZmZmZmZjk1Mzk3OTM0Y2FjMWYyODUzMmQzZDNwLTEsCisgICAgMHgxLjRhYTljMmYyYzFkZWZiODcyOGYwZDJkYTEyMTdhYWUxcC0yMSwKKyAgICAtMHgxLmY2YTdhMHAyLAorICB9LAorICB7IC8vIEVudHJ5IDY3NQorICAgIDB4MS5mZmZmZmZmZmZmZmE4ZTVhYWUyYmI5M2FlNTkwZjk4NHAtMSwKKyAgICAweDEuMmFhNzBiY2IwN2Q2ZDBmMzZiNzc3Y2IzODBhODQ1ZDlwLTIzLAorICAgIDB4MS5mNmE3YTJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzYKKyAgICAtMHgxLmZmZmZmZmZmZmZmYThlNWFhZTJiYjkzYWU1OTBmOTg0cC0xLAorICAgIDB4MS4yYWE3MGJjYjA3ZDZkMGYzNmI3NzdjYjM4MGE4NDVkOXAtMjMsCisgICAgLTB4MS5mNmE3YTJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzcKKyAgICAweDEuZmZmZmZmZmZmZmRmZTMzYzI3OGNiNDhhNTllZTNlZjJwLTEsCisgICAgLTB4MS42YWFjN2ExYTdjMGM3YWZjNWZjYjIzMTNhN2VjYTIyOXAtMjIsCisgICAgMHgxLmY2YTdhNHAyLAorICB9LAorICB7IC8vIEVudHJ5IDY3OAorICAgIC0weDEuZmZmZmZmZmZmZmRmZTMzYzI3OGNiNDhhNTllZTNlZjJwLTEsCisgICAgLTB4MS42YWFjN2ExYTdjMGM3YWZjNWZjYjIzMTNhN2VjYTIyOXAtMjIsCisgICAgLTB4MS5mNmE3YTRwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzkKKyAgICAweDEuNmEwYTA0MGVhNWMzMmJhNGFmYmViODZhNjE0YzVkMTZwLTEsCisgICAgLTB4MS42YTA5YzhjMTNmNDhiN2FhZDg1MWY5ZDY0NzRiY2IzMXAtMSwKKyAgICAweDEuMTQ3NWNhcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjgwCisgICAgLTB4MS42YTBhMDQwZWE1YzMyYmE0YWZiZWI4NmE2MTRjNWQxNnAtMSwKKyAgICAtMHgxLjZhMDljOGMxM2Y0OGI3YWFkODUxZjlkNjQ3NGJjYjMxcC0xLAorICAgIC0weDEuMTQ3NWNhcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjgxCisgICAgMHgxLjZhMDllZDZlMDg4MjEyYjFlMjYwYTUxMzJkNjk1OWI3cC0xLAorICAgIC0weDEuNmEwOWRmNjFkZWQ0OWQxZWU0ZmNhNGJhNjE0MGQxNzlwLTEsCisgICAgMHgxLjE0NzVjY3AzLAorICB9LAorICB7IC8vIEVudHJ5IDY4MgorICAgIC0weDEuNmEwOWVkNmUwODgyMTJiMWUyNjBhNTEzMmQ2OTU5YjdwLTEsCisgICAgLTB4MS42YTA5ZGY2MWRlZDQ5ZDFlZTRmY2E0YmE2MTQwZDE3OXAtMSwKKyAgICAtMHgxLjE0NzVjY3AzLAorICB9LAorICB7IC8vIEVudHJ5IDY4MworICAgIDB4MS42YTA5ZDZjZDY5ZDZlZmQxYTZmYTJkZDRjNjE3Y2JiZXAtMSwKKyAgICAtMHgxLjZhMDlmNjAyN2NmNjc4YjM4ZmM4OTkyY2Q5OTkwMzAycC0xLAorICAgIDB4MS4xNDc1Y2VwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODQKKyAgICAtMHgxLjZhMDlkNmNkNjlkNmVmZDFhNmZhMmRkNGM2MTdjYmJlcC0xLAorICAgIC0weDEuNmEwOWY2MDI3Y2Y2NzhiMzhmYzg5OTJjZDk5OTAzMDJwLTEsCisgICAgLTB4MS4xNDc1Y2VwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODUKKyAgICAweDEuZjk5OTBlOTFhNjRhZTQ4Njc1Nzg3OGJkZmVlMGY3MDNwLTIwLAorICAgIC0weDEuZmZmZmZmZmZmYzE5NzJjOTAyZWYzMWMzN2NiNTQ4MTdwLTEsCisgICAgMHgxLjJkOTdjNHAzLAorICB9LAorICB7IC8vIEVudHJ5IDY4NgorICAgIC0weDEuZjk5OTBlOTFhNjRhZTQ4Njc1Nzg3OGJkZmVlMGY3MDNwLTIwLAorICAgIC0weDEuZmZmZmZmZmZmYzE5NzJjOTAyZWYzMWMzN2NiNTQ4MTdwLTEsCisgICAgLTB4MS4yZDk3YzRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODcKKyAgICAweDEuZjMzMjFkMjM0ZWQ4MTI4YWFiYjA0OTlhNDNiNGRlZjJwLTIxLAorICAgIC0weDEuZmZmZmZmZmZmZjBjYTRlNjI2M2QyN2EwMjA0Mzg5ZGZwLTEsCisgICAgMHgxLjJkOTdjNnAzLAorICB9LAorICB7IC8vIEVudHJ5IDY4OAorICAgIC0weDEuZjMzMjFkMjM0ZWQ4MTI4YWFiYjA0OTlhNDNiNGRlZjJwLTIxLAorICAgIC0weDEuZmZmZmZmZmZmZjBjYTRlNjI2M2QyN2EwMjA0Mzg5ZGZwLTEsCisgICAgLTB4MS4yZDk3YzZwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODkKKyAgICAtMHgxLjk5YmM1Yjk2MWIxYWMyOTZkYmUxOTgwZmQyYzg5MGEwcC0yNiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmQ3MDM0OThjM2I4Mjg4NTYzOTE1cC0xLAorICAgIDB4MS4yZDk3YzhwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTAKKyAgICAweDEuOTliYzViOTYxYjFhYzI5NmRiZTE5ODBmZDJjODkwYTBwLTI2LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZDcwMzQ5OGMzYjgyODg1NjM5MTVwLTEsCisgICAgLTB4MS4yZDk3YzhwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTEKKyAgICAtMHgxLjZhMDljMTRlODNmOGRiMDgwZDEyMjNmODg3Y2MxMmVjcC0xLAorICAgIC0weDEuNmEwYTBiODE1ZmIzN2IyZDAxNTUxZTA3Y2IzMDA5ZDFwLTEsCisgICAgMHgxLjQ2YjljMHAzLAorICB9LAorICB7IC8vIEVudHJ5IDY5MgorICAgIDB4MS42YTA5YzE0ZTgzZjhkYjA4MGQxMjIzZjg4N2NjMTJlY3AtMSwKKyAgICAtMHgxLjZhMGEwYjgxNWZiMzdiMmQwMTU1MWUwN2NiMzAwOWQxcC0xLAorICAgIC0weDEuNDZiOWMwcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjkzCisgICAgLTB4MS42YTA5ZDdlZjIzZmJlYzFlZDgxMmU4MDdiZWIwNDkyZnAtMSwKKyAgICAtMHgxLjZhMDlmNGUwYzJlOThkZWI3ODY0MmI2MDMyYTczZDQ2cC0xLAorICAgIDB4MS40NmI5YzJwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTQKKyAgICAweDEuNmEwOWQ3ZWYyM2ZiZWMxZWQ4MTJlODA3YmViMDQ5MmZwLTEsCisgICAgLTB4MS42YTA5ZjRlMGMyZTk4ZGViNzg2NDJiNjAzMmE3M2Q0NnAtMSwKKyAgICAtMHgxLjQ2YjljMnAzLAorICB9LAorICB7IC8vIEVudHJ5IDY5NQorICAgIC0weDEuNmEwOWVlOGZjMjk0ZjM1ZGIzZWZjZTU2NTM2NWFmODlwLTEsCisgICAgLTB4MS42YTA5ZGU0MDI0YjU5NmI1MGViMDZkNTYyZGI4Yzc3N3AtMSwKKyAgICAweDEuNDZiOWM0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNjk2CisgICAgMHgxLjZhMDllZThmYzI5NGYzNWRiM2VmY2U1NjUzNjVhZjg5cC0xLAorICAgIC0weDEuNmEwOWRlNDAyNGI1OTZiNTBlYjA2ZDU2MmRiOGM3NzdwLTEsCisgICAgLTB4MS40NmI5YzRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTcKKyAgICAtMHgxLmZmZmZmZmZmZmU0Yzk2YjM5N2Q5NTFjYjIxODYxYzk1cC0xLAorICAgIC0weDEuNGRkZDNiYTllZGNkODk4Yjk5NDZmZGQyMGFmMjJhNjhwLTIwLAorICAgIDB4MS41ZmRiYmNwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTgKKyAgICAweDEuZmZmZmZmZmZmZTRjOTZiMzk3ZDk1MWNiMjE4NjFjOTVwLTEsCisgICAgLTB4MS40ZGRkM2JhOWVkY2Q4OThiOTk0NmZkZDIwYWYyMmE2OHAtMjAsCisgICAgLTB4MS41ZmRiYmNwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTkKKyAgICAtMHgxLmZmZmZmZmZmZmZlODUxMmFlYmI1NmM5ZTc1YjQxOTQxcC0xLAorICAgIC0weDEuMzc3NGVlYTdiOGFiZThmYThjMzgwMTQyYjk3YWY0YjZwLTIyLAorICAgIDB4MS41ZmRiYmVwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDAKKyAgICAweDEuZmZmZmZmZmZmZmU4NTEyYWViYjU2YzllNzViNDE5NDFwLTEsCisgICAgLTB4MS4zNzc0ZWVhN2I4YWJlOGZhOGMzODAxNDJiOTdhZjRiNnAtMjIsCisgICAgLTB4MS41ZmRiYmVwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDEKKyAgICAtMHgxLmZmZmZmZmZmZmY4NDBiYTIzZjkxYzljYjQ5YTEwYjI3cC0xLAorICAgIDB4MS42NDQ1ODhhYzIzOGFlNDkzZmEzMjQzNWJhNTEzMjliZnAtMjEsCisgICAgMHgxLjVmZGJjMHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcwMgorICAgIDB4MS5mZmZmZmZmZmZmODQwYmEyM2Y5MWM5Y2I0OWExMGIyN3AtMSwKKyAgICAweDEuNjQ0NTg4YWMyMzhhZTQ5M2ZhMzI0MzViYTUxMzI5YmZwLTIxLAorICAgIC0weDEuNWZkYmMwcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzAzCisgICAgLTB4MS42YTBhMTJmNDE5N2M5MGEwZWU0YTA5NGI2Mzc3YWEyM3AtMSwKKyAgICAweDEuNmEwOWI5ZGJjODgxYzQ1OGU3NDc5MDhjYWYyYWE1ZTFwLTEsCisgICAgMHgxLjc4ZmRiNnAzLAorICB9LAorICB7IC8vIEVudHJ5IDcwNAorICAgIDB4MS42YTBhMTJmNDE5N2M5MGEwZWU0YTA5NGI2Mzc3YWEyM3AtMSwKKyAgICAweDEuNmEwOWI5ZGJjODgxYzQ1OGU3NDc5MDhjYWYyYWE1ZTFwLTEsCisgICAgLTB4MS43OGZkYjZwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDUKKyAgICAtMHgxLjZhMDlmYzUzN2QyOWNmMTMxZDY3MTA5OTFiZWJhYmVkcC0xLAorICAgIDB4MS42YTA5ZDA3YzY4ZmMwMTBmZmNmZDNiMTlmMWVlNGY0NHAtMSwKKyAgICAweDEuNzhmZGI4cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzA2CisgICAgMHgxLjZhMDlmYzUzN2QyOWNmMTMxZDY3MTA5OTFiZWJhYmVkcC0xLAorICAgIDB4MS42YTA5ZDA3YzY4ZmMwMTBmZmNmZDNiMTlmMWVlNGY0NHAtMSwKKyAgICAtMHgxLjc4ZmRiOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcwNworICAgIC0weDEuNmEwOWU1YjJkZjZkMDM4OGY5MDcwYzQzNDBmM2U2NjlwLTEsCisgICAgMHgxLjZhMDllNzFkMDgwYzMzZjY5NjRhMDdkMWEwYmY1OTgwcC0xLAorICAgIDB4MS43OGZkYmFwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDgKKyAgICAweDEuNmEwOWU1YjJkZjZkMDM4OGY5MDcwYzQzNDBmM2U2NjlwLTEsCisgICAgMHgxLjZhMDllNzFkMDgwYzMzZjY5NjRhMDdkMWEwYmY1OTgwcC0xLAorICAgIC0weDEuNzhmZGJhcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzA5CisgICAgMHgxLjZhMDljOTA5YWRkNGRiZjMyMjUzYTM5ZDVjMzA2MzA4cC0xLAorICAgIDB4MS42YTBhMDNjNjM3NDJkNjI4MDJkMTYzZDVjZmIzYjdkNXAtMSwKKyAgICAweDEuYWI0MWFlcDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzEwCisgICAgLTB4MS42YTA5YzkwOWFkZDRkYmYzMjI1M2EzOWQ1YzMwNjMwOHAtMSwKKyAgICAweDEuNmEwYTAzYzYzNzQyZDYyODAyZDE2M2Q1Y2ZiM2I3ZDVwLTEsCisgICAgLTB4MS5hYjQxYWVwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTEKKyAgICAweDEuNmEwOWRmYWE0ZDVjM2E3ZjA1NmYzZTYxYTM2NWIyOWVwLTEsCisgICAgMHgxLjZhMDllZDI1OTlmZDM2NGM5NzY2MGNjYTY2NTJjMGEzcC0xLAorICAgIDB4MS5hYjQxYjBwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTIKKyAgICAtMHgxLjZhMDlkZmFhNGQ1YzNhN2YwNTZmM2U2MWEzNjViMjllcC0xLAorICAgIDB4MS42YTA5ZWQyNTk5ZmQzNjRjOTc2NjBjY2E2NjUyYzBhM3AtMSwKKyAgICAtMHgxLmFiNDFiMHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxMworICAgIDB4MS42YTA5ZjY0YWViNzk4ZjJiM2UzZDliMTZlOGUzYzQxMnAtMSwKKyAgICAweDEuNmEwOWQ2ODRmYjRkOGM4NDA2NjBkNmI0MmVjODMwMzlwLTEsCisgICAgMHgxLmFiNDFiMnAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxNAorICAgIC0weDEuNmEwOWY2NGFlYjc5OGYyYjNlM2Q5YjE2ZThlM2M0MTJwLTEsCisgICAgMHgxLjZhMDlkNjg0ZmI0ZDhjODQwNjYwZDZiNDJlYzgzMDM5cC0xLAorICAgIC0weDEuYWI0MWIycDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzE1CisgICAgMHgxLmZmZmZmZmZmZmMyNjBkNmZmYjhmNGNkOGFiM2ZkMDIwcC0xLAorICAgIDB4MS5mNjY1OTVkYTdhMWFlMzA4ZDI2YTE4ZGU0YzJlZDNhM3AtMjAsCisgICAgMHgxLmM0NjNhOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxNgorICAgIC0weDEuZmZmZmZmZmZmYzI2MGQ2ZmZiOGY0Y2Q4YWIzZmQwMjBwLTEsCisgICAgMHgxLmY2NjU5NWRhN2ExYWUzMDhkMjZhMThkZTRjMmVkM2EzcC0yMCwKKyAgICAtMHgxLmM0NjNhOHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcxNworICAgIDB4MS5mZmZmZmZmZmZmMTJkODliYjA4NGRkNzYyODQ4YjNkNnAtMSwKKyAgICAweDEuZWNjYjJiYjRmNjZlYTg2MTI0MWZhMDljYTlkOGEwMzRwLTIxLAorICAgIDB4MS5jNDYzYWFwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTgKKyAgICAtMHgxLmZmZmZmZmZmZmYxMmQ4OWJiMDg0ZGQ3NjI4NDhiM2Q2cC0xLAorICAgIDB4MS5lY2NiMmJiNGY2NmVhODYxMjQxZmEwOWNhOWQ4YTAzNHAtMjEsCisgICAgLTB4MS5jNDYzYWFwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTkKKyAgICAweDEuZmZmZmZmZmZmZmZmYTNjNzY1N2I4NWU1YjQ0YmJkNDRwLTEsCisgICAgLTB4MS4zMzRkNDRiMDk0NTQwN2IxMThiMzYxYWI3ODE3MWY2N3AtMjUsCisgICAgMHgxLmM0NjNhY3AzLAorICB9LAorICB7IC8vIEVudHJ5IDcyMAorICAgIC0weDEuZmZmZmZmZmZmZmZmYTNjNzY1N2I4NWU1YjQ0YmJkNDRwLTEsCisgICAgLTB4MS4zMzRkNDRiMDk0NTQwN2IxMThiMzYxYWI3ODE3MWY2N3AtMjUsCisgICAgLTB4MS5jNDYzYWNwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjEKKyAgICAweDEuNmEwYTBiMzhmMTM0YTMyOTVhMGIzODZlNDJmMWNhN2FwLTEsCisgICAgLTB4MS42YTA5YzE5NmYyODY3Y2M5MTZhZTJiN2U2YzlkOTljMXAtMSwKKyAgICAweDEuZGQ4NWE0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzIyCisgICAgLTB4MS42YTBhMGIzOGYxMzRhMzI5NWEwYjM4NmU0MmYxY2E3YXAtMSwKKyAgICAtMHgxLjZhMDljMTk2ZjI4NjdjYzkxNmFlMmI3ZTZjOWQ5OWMxcC0xLAorICAgIC0weDEuZGQ4NWE0cDMsCisgIH0sCisgIHsgLy8gRW50cnkgNzIzCisgICAgMHgxLjZhMDlmNDk4NTQ2NjJlZmYxYjM1NzU1YTEyOTA0NGE3cC0xLAorICAgIC0weDEuNmEwOWQ4Mzc5Mjg1MDZmN2NmZjc2ZjA5NGI0ZTAzNzdwLTEsCisgICAgMHgxLmRkODVhNnAzLAorICB9LAorICB7IC8vIEVudHJ5IDcyNAorICAgIC0weDEuNmEwOWY0OTg1NDY2MmVmZjFiMzU3NTVhMTI5MDQ0YTdwLTEsCisgICAgLTB4MS42YTA5ZDgzNzkyODUwNmY3Y2ZmNzZmMDk0YjRlMDM3N3AtMSwKKyAgICAtMHgxLmRkODVhNnAzLAorICB9LAorICB7IC8vIEVudHJ5IDcyNQorICAgIDB4MS42YTA5ZGRmN2I2MmRiMGUwNDQwYjZhNDI2MjIwM2IxMXAtMSwKKyAgICAtMHgxLjZhMDllZWQ4MzExOTg3NGU1MWFlNGJiOGFlZGRjMWYycC0xLAorICAgIDB4MS5kZDg1YThwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjYKKyAgICAtMHgxLjZhMDlkZGY3YjYyZGIwZTA0NDBiNmE0MjYyMjAzYjExcC0xLAorICAgIC0weDEuNmEwOWVlZDgzMTE5ODc0ZTUxYWU0YmI4YWVkZGMxZjJwLTEsCisgICAgLTB4MS5kZDg1YThwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjcKKyAgICAweDEuNGFhOWMyZjJjMTlhMDYyYjE4YTAxN2JjZDU0MjRmZWFwLTIwLAorICAgIC0weDEuZmZmZmZmZmZmZTU0ZTVlNGQzMmIzNDUzMTY2MDYwYjNwLTEsCisgICAgMHgxLmY2YTdhMHAzLAorICB9LAorICB7IC8vIEVudHJ5IDcyOAorICAgIC0weDEuNGFhOWMyZjJjMTlhMDYyYjE4YTAxN2JjZDU0MjRmZWFwLTIwLAorICAgIC0weDEuZmZmZmZmZmZmZTU0ZTVlNGQzMmIzNDUzMTY2MDYwYjNwLTEsCisgICAgLTB4MS5mNmE3YTBwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjkKKyAgICAweDEuMmFhNzBiY2IwN2QzYTQwNzgxNTEwZDIxMzY1MmU0M2FwLTIyLAorICAgIC0weDEuZmZmZmZmZmZmZmVhMzk2YWI4YWVlNTA5MzkyYzc1NWRwLTEsCisgICAgMHgxLmY2YTdhMnAzLAorICB9LAorICB7IC8vIEVudHJ5IDczMAorICAgIC0weDEuMmFhNzBiY2IwN2QzYTQwNzgxNTEwZDIxMzY1MmU0M2FwLTIyLAorICAgIC0weDEuZmZmZmZmZmZmZmVhMzk2YWI4YWVlNTA5MzkyYzc1NWRwLTEsCisgICAgLTB4MS5mNmE3YTJwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzEKKyAgICAtMHgxLjZhYWM3YTFhN2JmNWJiZDQ5NTcyZmZiOGQ3NzQ5OTIycC0yMSwKKyAgICAtMHgxLmZmZmZmZmZmZmY3ZjhjZjA5ZTMyZDYzMDliZWE4NWNhcC0xLAorICAgIDB4MS5mNmE3YTRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzIKKyAgICAweDEuNmFhYzdhMWE3YmY1YmJkNDk1NzJmZmI4ZDc3NDk5MjJwLTIxLAorICAgIC0weDEuZmZmZmZmZmZmZjdmOGNmMDllMzJkNjMwOWJlYTg1Y2FwLTEsCisgICAgLTB4MS5mNmE3YTRwMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzMKKyAgICAtMHgxLjZhMDlhMzgzOTUzMTI0MDk2ODk4MzQwZjkxNjhiOWQ1cC0xLAorICAgIC0weDEuNmEwYTI5NGM0NWVjNzQ3YTQ3NzExYTQ5OTRkMmM1ZTRwLTEsCisgICAgMHgxLjA3ZTRjY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDczNAorICAgIDB4MS42YTA5YTM4Mzk1MzEyNDA5Njg5ODM0MGY5MTY4YjlkNXAtMSwKKyAgICAtMHgxLjZhMGEyOTRjNDVlYzc0N2E0NzcxMWE0OTk0ZDJjNWU0cC0xLAorICAgIC0weDEuMDdlNGNjcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzM1CisgICAgLTB4MS42YTA5ZDBjNGQ3ODY5OTYxYzQ3YTliMGI5NjhjYzkxMHAtMSwKKyAgICAtMHgxLjZhMDlmYzBiMGVhN2VkOWZiNWRkNTBhMGM4YWYxOWNicC0xLAorICAgIDB4MS4wN2U0Y2VwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzYKKyAgICAweDEuNmEwOWQwYzRkNzg2OTk2MWM0N2E5YjBiOTY4Y2M5MTBwLTEsCisgICAgLTB4MS42YTA5ZmMwYjBlYTdlZDlmYjVkZDUwYTBjOGFmMTljYnAtMSwKKyAgICAtMHgxLjA3ZTRjZXA0LAorICB9LAorICB7IC8vIEVudHJ5IDczNworICAgIC0weDEuNmEwOWZlMDYxNDMzZTc3NzBkMDBjYTU5ZDVhNTYyNTFwLTEsCisgICAgLTB4MS42YTA5Y2VjOWQxYmIzZWQ0ZjgxMGM5Zjk3ODZkNjEwZXAtMSwKKyAgICAweDEuMDdlNGQwcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzM4CisgICAgMHgxLjZhMDlmZTA2MTQzM2U3NzcwZDAwY2E1OWQ1YTU2MjUxcC0xLAorICAgIC0weDEuNmEwOWNlYzlkMWJiM2VkNGY4MTBjOWY5Nzg2ZDYxMGVwLTEsCisgICAgLTB4MS4wN2U0ZDBwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzkKKyAgICAtMHgxLmZmZmZmZmZmZjkyMTlkYWU1ZmVkYTFiNTM5MzM1ODAzcC0xLAorICAgIC0weDEuNGY3NmY4MDU4MmM3M2ZjMGNjMDkwM2VkOGNhN2Q2YjNwLTE5LAorICAgIDB4MS4xNDc1Y2FwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDAKKyAgICAweDEuZmZmZmZmZmZmOTIxOWRhZTVmZWRhMWI1MzkzMzU4MDNwLTEsCisgICAgLTB4MS40Zjc2ZjgwNTgyYzczZmMwY2MwOTAzZWQ4Y2E3ZDZiM3AtMTksCisgICAgLTB4MS4xNDc1Y2FwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDEKKyAgICAtMHgxLmZmZmZmZmZmZmY5ZDU1NmU4YzBiZjBhODBkNjEwODA4cC0xLAorICAgIC0weDEuM2RkYmUwMTYxMTA4YjY5MGVlZDcwYTdmNTlkZTc1MWNwLTIxLAorICAgIDB4MS4xNDc1Y2NwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDIKKyAgICAweDEuZmZmZmZmZmZmZjlkNTU2ZThjMGJmMGE4MGQ2MTA4MDhwLTEsCisgICAgLTB4MS4zZGRiZTAxNjExMDhiNjkwZWVkNzBhN2Y1OWRlNzUxY3AtMjEsCisgICAgLTB4MS4xNDc1Y2NwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDMKKyAgICAtMHgxLmZmZmZmZmZmZmUxOTBkMmViODJlNzRlZmQyMDkzMjE1cC0xLAorICAgIDB4MS42MTEyMGZmNGY3MDE4MGIwZDU1YzNhZTBmNjk1ODVjYXAtMjAsCisgICAgMHgxLjE0NzVjZXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc0NAorICAgIDB4MS5mZmZmZmZmZmZlMTkwZDJlYjgyZTc0ZWZkMjA5MzIxNXAtMSwKKyAgICAweDEuNjExMjBmZjRmNzAxODBiMGQ1NWMzYWUwZjY5NTg1Y2FwLTIwLAorICAgIC0weDEuMTQ3NWNlcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzQ1CisgICAgLTB4MS42YTBhMWExZTY0YTI4ZWVlMjM4ZGM4NTI4NDZhYWNkNXAtMSwKKyAgICAweDEuNmEwOWIyYjE3Yjc0MTA1MGE2Y2ZkNjRiODFjNzY0ODVwLTEsCisgICAgMHgxLjIxMDZjOHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc0NgorICAgIDB4MS42YTBhMWExZTY0YTI4ZWVlMjM4ZGM4NTI4NDZhYWNkNXAtMSwKKyAgICAweDEuNmEwOWIyYjE3Yjc0MTA1MGE2Y2ZkNjRiODFjNzY0ODVwLTEsCisgICAgLTB4MS4yMTA2YzhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDcKKyAgICAtMHgxLjZhMDllY2RkMmI3ODRiNjk5MDM0ZWU4MTAyNjcwZTI3cC0xLAorICAgIDB4MS42YTA5ZGZmMmJiZTNjOTYxNmEzNTc2YzU1ZTc3MzIwN3AtMSwKKyAgICAweDEuMjEwNmNhcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzQ4CisgICAgMHgxLjZhMDllY2RkMmI3ODRiNjk5MDM0ZWU4MTAyNjcwZTI3cC0xLAorICAgIDB4MS42YTA5ZGZmMmJiZTNjOTYxNmEzNTc2YzU1ZTc3MzIwN3AtMSwKKyAgICAtMHgxLjIxMDZjYXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc0OQorICAgIC0weDEuNmEwOWJmOWJlY2E1ZTAzMTg4MzAxNjM5YzA5ZWQ1NzRwLTEsCisgICAgMHgxLjZhMGEwZDMzZjZhYjVhZjI2MmFkNmFkMThhYzFjZTlmcC0xLAorICAgIDB4MS4yMTA2Y2NwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTAKKyAgICAweDEuNmEwOWJmOWJlY2E1ZTAzMTg4MzAxNjM5YzA5ZWQ1NzRwLTEsCisgICAgMHgxLjZhMGEwZDMzZjZhYjVhZjI2MmFkNmFkMThhYzFjZTlmcC0xLAorICAgIC0weDEuMjEwNmNjcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzUxCisgICAgLTB4MS5mOTk5MGU5MWEyNzBkM2JjMWMwMmY0ZjY5ZjQ4ZTY3NXAtMTksCisgICAgMHgxLmZmZmZmZmZmZjA2NWNiMjQwYmNiZmRmZjQ5NzdkZGY4cC0xLAorICAgIDB4MS4yZDk3YzRwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTIKKyAgICAweDEuZjk5OTBlOTFhMjcwZDNiYzFjMDJmNGY2OWY0OGU2NzVwLTE5LAorICAgIDB4MS5mZmZmZmZmZmYwNjVjYjI0MGJjYmZkZmY0OTc3ZGRmOHAtMSwKKyAgICAtMHgxLjJkOTdjNHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc1MworICAgIC0weDEuZjMzMjFkMjM0ZGVhY2Q2ZjNhZmQ3NTAzOTY4NTAxMmZwLTIwLAorICAgIDB4MS5mZmZmZmZmZmZjMzI5Mzk4OThmNTg1ZDY5NDhjZjJkMXAtMSwKKyAgICAweDEuMmQ5N2M2cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzU0CisgICAgMHgxLmYzMzIxZDIzNGRlYWNkNmYzYWZkNzUwMzk2ODUwMTJmcC0yMCwKKyAgICAweDEuZmZmZmZmZmZmYzMyOTM5ODk4ZjU4NWQ2OTQ4Y2YyZDFwLTEsCisgICAgLTB4MS4yZDk3YzZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTUKKyAgICAweDEuOTliYzViOTYxYjFhYTFjOWU4MDIzMDc0ZjM0MDZmZDlwLTI1LAorICAgIDB4MS5mZmZmZmZmZmZmZmY1YzBkMjYzMGVlMGEyN2U4ZDZkMXAtMSwKKyAgICAweDEuMmQ5N2M4cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzU2CisgICAgLTB4MS45OWJjNWI5NjFiMWFhMWM5ZTgwMjMwNzRmMzQwNmZkOXAtMjUsCisgICAgMHgxLmZmZmZmZmZmZmZmZjVjMGQyNjMwZWUwYTI3ZThkNmQxcC0xLAorICAgIC0weDEuMmQ5N2M4cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzU3CisgICAgMHgxLjZhMDk5NDllMWNlMWVjNTAxYWZjYjM1ZDczMWJmNjJjcC0xLAorICAgIDB4MS42YTBhMzgzMWI4MWQ5NDk2NmFkOGRmNGQzNzg4MjRmOXAtMSwKKyAgICAweDEuM2EyOGMycDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzU4CisgICAgLTB4MS42YTA5OTQ5ZTFjZTFlYzUwMWFmY2IzNWQ3MzFiZjYyY3AtMSwKKyAgICAweDEuNmEwYTM4MzFiODFkOTQ5NjZhZDhkZjRkMzc4ODI0ZjlwLTEsCisgICAgLTB4MS4zYTI4YzJwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTkKKyAgICAweDEuNmEwOWMxZGY2MTE0MTAwYzY1ZDFmZjZjNTU3NTVlNzJwLTEsCisgICAgMHgxLjZhMGEwYWYwODJiNWJjYTdmNTU2OWY0ZGE2ODgzZjY0cC0xLAorICAgIDB4MS4zYTI4YzRwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjAKKyAgICAtMHgxLjZhMDljMWRmNjExNDEwMGM2NWQxZmY2YzU1NzU1ZTcycC0xLAorICAgIDB4MS42YTBhMGFmMDgyYjViY2E3ZjU1NjlmNGRhNjg4M2Y2NHAtMSwKKyAgICAtMHgxLjNhMjhjNHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2MQorICAgIDB4MS42YTA5ZWYyMDlmOWUwY2MxMzMyNGRkZjJiMzYxNTUzZnAtMSwKKyAgICAweDEuNmEwOWRkYWY0N2E1YmM4ZGJkY2I2YjEzODQ0OTAyYWVwLTEsCisgICAgMHgxLjNhMjhjNnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2MgorICAgIC0weDEuNmEwOWVmMjA5ZjllMGNjMTMzMjRkZGYyYjM2MTU1M2ZwLTEsCisgICAgMHgxLjZhMDlkZGFmNDdhNWJjOGRiZGNiNmIxMzg0NDkwMmFlcC0xLAorICAgIC0weDEuM2EyOGM2cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzYzCisgICAgMHgxLmZmZmZmZmZmZjUzZjQ3NmVjNGY1OWYyNmM0YmNkZmEwcC0xLAorICAgIDB4MS5hM2JiMjUxZGM3ZWZhYTFlMjEzN2JiMzdlZDY2NTRkYnAtMTksCisgICAgMHgxLjQ2YjljMHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2NAorICAgIC0weDEuZmZmZmZmZmZmNTNmNDc2ZWM0ZjU5ZjI2YzRiY2RmYTBwLTEsCisgICAgMHgxLmEzYmIyNTFkYzdlZmFhMWUyMTM3YmIzN2VkNjY1NGRicC0xOSwKKyAgICAtMHgxLjQ2YjljMHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2NQorICAgIDB4MS5mZmZmZmZmZmZlNWQyMDk3YjM0MzM0YWQ2NzlkZDdhNHAtMSwKKyAgICAweDEuNDc3NjRhM2I5NTY2NzU4ZTViYWEyZTMwMjlmMWFiYmFwLTIwLAorICAgIDB4MS40NmI5YzJwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjYKKyAgICAtMHgxLmZmZmZmZmZmZmU1ZDIwOTdiMzQzMzRhZDY3OWRkN2E0cC0xLAorICAgIDB4MS40Nzc2NGEzYjk1NjY3NThlNWJhYTJlMzAyOWYxYWJiYXAtMjAsCisgICAgLTB4MS40NmI5YzJwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjcKKyAgICAweDEuZmZmZmZmZmZmZjdhZjljMGExOWEwMDVjNTY1YzZhZjdwLTEsCisgICAgLTB4MS43MTEzNmI4OGQ0NjA4NDkwZjJkZGZlOTAxMDExMTJhZXAtMjEsCisgICAgMHgxLjQ2YjljNHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc2OAorICAgIC0weDEuZmZmZmZmZmZmZjdhZjljMGExOWEwMDVjNTY1YzZhZjdwLTEsCisgICAgLTB4MS43MTEzNmI4OGQ0NjA4NDkwZjJkZGZlOTAxMDExMTJhZXAtMjEsCisgICAgLTB4MS40NmI5YzRwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjkKKyAgICAweDEuNmEwYTI5MDNkNzczOTI1YjA1MmZiMDA2YWM2NzBjMjNwLTEsCisgICAgLTB4MS42YTA5YTNjYzAzYzRiYmFkMjIyMmRmZTViZTMxNzU2NXAtMSwKKyAgICAweDEuNTM0YWJlcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzcwCisgICAgLTB4MS42YTBhMjkwM2Q3NzM5MjViMDUyZmIwMDZhYzY3MGMyM3AtMSwKKyAgICAtMHgxLjZhMDlhM2NjMDNjNGJiYWQyMjIyZGZlNWJlMzE3NTY1cC0xLAorICAgIC0weDEuNTM0YWJlcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzcxCisgICAgMHgxLjZhMDlmYmMyYTAyNWZkYWU5MTg0NjZmYTAwMTQyMTQzcC0xLAorICAgIC0weDEuNmEwOWQxMGQ0NjExMjMzNWQwZTQzZDczODM4N2RlOGNwLTEsCisgICAgMHgxLjUzNGFjMHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc3MgorICAgIC0weDEuNmEwOWZiYzJhMDI1ZmRhZTkxODQ2NmZhMDAxNDIxNDNwLTEsCisgICAgLTB4MS42YTA5ZDEwZDQ2MTEyMzM1ZDBlNDNkNzM4Mzg3ZGU4Y3AtMSwKKyAgICAtMHgxLjUzNGFjMHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc3MworICAgIDB4MS42YTA5Y2U4MTYzMzA0MTEzMTM1YTY4YWU5M2QzZmEwZXAtMSwKKyAgICAtMHgxLjZhMDlmZTRlODJiNTYzN2E0YThmMzkyYzMzMDFiZTk0cC0xLAorICAgIDB4MS41MzRhYzJwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzQKKyAgICAtMHgxLjZhMDljZTgxNjMzMDQxMTMxMzVhNjhhZTkzZDNmYTBlcC0xLAorICAgIC0weDEuNmEwOWZlNGU4MmI1NjM3YTRhOGYzOTJjMzMwMWJlOTRwLTEsCisgICAgLTB4MS41MzRhYzJwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzUKKyAgICAweDEuNGRkZDNiYTllY2IxOWQ2YmI2ZWExNjExMjBlNDQ3YjlwLTE5LAorICAgIC0weDEuZmZmZmZmZmZmOTMyNWFjZTVmNjgyYmJiOGIxMjJhMDlwLTEsCisgICAgMHgxLjVmZGJiY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDc3NgorICAgIC0weDEuNGRkZDNiYTllY2IxOWQ2YmI2ZWExNjExMjBlNDQ3YjlwLTE5LAorICAgIC0weDEuZmZmZmZmZmZmOTMyNWFjZTVmNjgyYmJiOGIxMjJhMDlwLTEsCisgICAgLTB4MS41ZmRiYmNwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzcKKyAgICAweDEuMzc3NGVlYTdiODlkODBkZjc4MTZmZTIwOGVjNjlmYzBwLTIxLAorICAgIC0weDEuZmZmZmZmZmZmZmExNDRhYmFlZDViNGFhYjg4MDYzNWRwLTEsCisgICAgMHgxLjVmZGJiZXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc3OAorICAgIC0weDEuMzc3NGVlYTdiODlkODBkZjc4MTZmZTIwOGVjNjlmYzBwLTIxLAorICAgIC0weDEuZmZmZmZmZmZmZmExNDRhYmFlZDViNGFhYjg4MDYzNWRwLTEsCisgICAgLTB4MS41ZmRiYmVwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzkKKyAgICAtMHgxLjY0NDU4OGFjMjMzNGEzZDU0NTJkOTk2MDI4MmNmODBkcC0yMCwKKyAgICAtMHgxLmZmZmZmZmZmZmUxMDJlODhmZTQ3NjMzMWUxZGRlZmFmcC0xLAorICAgIDB4MS41ZmRiYzBwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODAKKyAgICAweDEuNjQ0NTg4YWMyMzM0YTNkNTQ1MmQ5OTYwMjgyY2Y4MGRwLTIwLAorICAgIC0weDEuZmZmZmZmZmZmZTEwMmU4OGZlNDc2MzMxZTFkZGVmYWZwLTEsCisgICAgLTB4MS41ZmRiYzBwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODEKKyAgICAtMHgxLjZhMDliMmY5ZWEwNDllODU1ZTM1Y2E5Y2U3ZTBkODlhcC0xLAorICAgIC0weDEuNmEwYTE5ZDVmNjI2YTM1ZWUxMTJhMzQ2MzhlMDc4MDhwLTEsCisgICAgMHgxLjZjNmNiYXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc4MgorICAgIDB4MS42YTA5YjJmOWVhMDQ5ZTg1NWUzNWNhOWNlN2UwZDg5YXAtMSwKKyAgICAtMHgxLjZhMGExOWQ1ZjYyNmEzNWVlMTEyYTM0NjM4ZTA3ODA4cC0xLAorICAgIC0weDEuNmM2Y2JhcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzgzCisgICAgLTB4MS42YTA5ZTAzYjJhNmI0OWM2MTM0YzY3YjQyYmFlZTY2OHAtMSwKKyAgICAtMHgxLjZhMDllYzk0YmNmMzUyMDhjY2QwMzA2ODRkNWRkZDljcC0xLAorICAgIDB4MS42YzZjYmNwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODQKKyAgICAweDEuNmEwOWUwM2IyYTZiNDljNjEzNGM2N2I0MmJhZWU2NjhwLTEsCisgICAgLTB4MS42YTA5ZWM5NGJjZjM1MjA4Y2NkMDMwNjg0ZDVkZGQ5Y3AtMSwKKyAgICAtMHgxLjZjNmNiY3A0LAorICB9LAorICB7IC8vIEVudHJ5IDc4NQorICAgIC0weDEuNmEwYTBkN2M2NTI5Y2Q4NWRiYmIzYTVjMmNkM2ZhZTVwLTEsCisgICAgLTB4MS42YTA5YmY1MzdlMTdkOTAwNjU5YmQyZmEyNGMzYThjOHAtMSwKKyAgICAweDEuNmM2Y2JlcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzg2CisgICAgMHgxLjZhMGEwZDdjNjUyOWNkODVkYmJiM2E1YzJjZDNmYWU1cC0xLAorICAgIC0weDEuNmEwOWJmNTM3ZTE3ZDkwMDY1OWJkMmZhMjRjM2E4YzhwLTEsCisgICAgLTB4MS42YzZjYmVwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODcKKyAgICAtMHgxLmZmZmZmZmZmZjA3ZjBhYjEyYWE4ZjQxZjI5YzE1MzkycC0xLAorICAgIC0weDEuZjdmZjUyMzYwYzYyMmIzZjk0ZDljNzI1MGJmYWQ4ZDRwLTE5LAorICAgIDB4MS43OGZkYjZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODgKKyAgICAweDEuZmZmZmZmZmZmMDdmMGFiMTJhYThmNDFmMjljMTUzOTJwLTEsCisgICAgLTB4MS5mN2ZmNTIzNjBjNjIyYjNmOTRkOWM3MjUwYmZhZDhkNHAtMTksCisgICAgLTB4MS43OGZkYjZwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODkKKyAgICAtMHgxLmZmZmZmZmZmZmMzZjA1NDJkYjIxZGNiY2I4NDdkYWMzcC0xLAorICAgIC0weDEuZWZmZWE0NmMyMWJhYTNkYTdjMjY2Yzk1M2EwMTM1OThwLTIwLAorICAgIDB4MS43OGZkYjhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTAKKyAgICAweDEuZmZmZmZmZmZmYzNmMDU0MmRiMjFkY2JjYjg0N2RhYzNwLTEsCisgICAgLTB4MS5lZmZlYTQ2YzIxYmFhM2RhN2MyNjZjOTUzYTAxMzU5OHAtMjAsCisgICAgLTB4MS43OGZkYjhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTEKKyAgICAtMHgxLmZmZmZmZmZmZmZmZWZmZDQ4YmFjNzNlZmU2MGM3ZmNmcC0xLAorICAgIDB4MS4wMDE1YjkzZGQwZjA5NWJlMWViMGE1Yjg3ZmU1ZTMzZXAtMjQsCisgICAgMHgxLjc4ZmRiYXA0LAorICB9LAorICB7IC8vIEVudHJ5IDc5MgorICAgIDB4MS5mZmZmZmZmZmZmZmVmZmQ0OGJhYzczZWZlNjBjN2ZjZnAtMSwKKyAgICAweDEuMDAxNWI5M2RkMGYwOTViZTFlYjBhNWI4N2ZlNWUzM2VwLTI0LAorICAgIC0weDEuNzhmZGJhcDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzkzCisgICAgLTB4MS42YTBhMzdlOTQ5YTdhZDY5OGEzMjIzNGM3M2U1YWZiYXAtMSwKKyAgICAweDEuNmEwOTk0ZTY4Yjc4N2VlNGZkNjgzMGIyODgyMjU3NDVwLTEsCisgICAgMHgxLjg1OGViNHA0LAorICB9LAorICB7IC8vIEVudHJ5IDc5NAorICAgIDB4MS42YTBhMzdlOTQ5YTdhZDY5OGEzMjIzNGM3M2U1YWZiYXAtMSwKKyAgICAweDEuNmEwOTk0ZTY4Yjc4N2VlNGZkNjgzMGIyODgyMjU3NDVwLTEsCisgICAgLTB4MS44NThlYjRwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTUKKyAgICAtMHgxLjZhMGEwYWE4MTQzNmM3YThkMzNhMzhkNzA0MDMwZDE0cC0xLAorICAgIDB4MS42YTA5YzIyN2NmYTE5NGQxZmE3YWI5OTA5ZGU1MDgzY3AtMSwKKyAgICAweDEuODU4ZWI2cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzk2CisgICAgMHgxLjZhMGEwYWE4MTQzNmM3YThkMzNhMzhkNzA0MDMwZDE0cC0xLAorICAgIDB4MS42YTA5YzIyN2NmYTE5NGQxZmE3YWI5OTA5ZGU1MDgzY3AtMSwKKyAgICAtMHgxLjg1OGViNnA0LAorICB9LAorICB7IC8vIEVudHJ5IDc5NworICAgIC0weDEuNmEwOWRkNjZkOTFkYjliZDdiZjM1NWZhZmYwOGYxOTRwLTEsCisgICAgMHgxLjZhMDllZjY5MGUyMjgzYjY1ODUwOWVkMzE5NDgzODM5cC0xLAorICAgIDB4MS44NThlYjhwNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTgKKyAgICAweDEuNmEwOWRkNjZkOTFkYjliZDdiZjM1NWZhZmYwOGYxOTRwLTEsCisgICAgMHgxLjZhMDllZjY5MGUyMjgzYjY1ODUwOWVkMzE5NDgzODM5cC0xLAorICAgIC0weDEuODU4ZWI4cDQsCisgIH0sCisgIHsgLy8gRW50cnkgNzk5CisgICAgMHgxLmMwNDhiMzhhOGJiZjU5ZjQxNGZlYzcwNzkyMDk5MjZlcC0zLAorICAgIC0weDEuZjM5NTdiYWQ3MGUwNzQxZjFkM2Q2NzUxMjQ2Y2UyMWFwLTEsCisgICAgMHgxLmZmZmZmZXA2MiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDAKKyAgICAtMHgxLmMwNDhiMzhhOGJiZjU5ZjQxNGZlYzcwNzkyMDk5MjZlcC0zLAorICAgIC0weDEuZjM5NTdiYWQ3MGUwNzQxZjFkM2Q2NzUxMjQ2Y2UyMWFwLTEsCisgICAgLTB4MS5mZmZmZmVwNjIsCisgIH0sCisgIHsgLy8gRW50cnkgODAxCisgICAgMHgxLmZmZjZkZmQ0MmRjNTQ0MzBiYzA1NzZiMDBhODhiZDk0cC0xLAorICAgIDB4MS44MmFhMzc1YjNjMzNlNzA2NjM3MzFiYWI0YmViNmVkM3AtNywKKyAgICAweDEucDYzLAorICB9LAorICB7IC8vIEVudHJ5IDgwMgorICAgIC0weDEuZmZmNmRmZDQyZGM1NDQzMGJjMDU3NmIwMGE4OGJkOTRwLTEsCisgICAgMHgxLjgyYWEzNzViM2MzM2U3MDY2MzczMWJhYjRiZWI2ZWQzcC03LAorICAgIC0weDEucDYzLAorICB9LAorICB7IC8vIEVudHJ5IDgwMworICAgIC0weDEuZDY2MzdkMDcwMzQ3ZWU5NGU4MzA0NDVlNzY0ODY3MjdwLTEsCisgICAgMHgxLjk0NWU2YzY5YTU4MGZiN2JiMjdkMDJjMGZlMGY4YTcxcC0yLAorICAgIDB4MS4wMDAwMDJwNjMsCisgIH0sCisgIHsgLy8gRW50cnkgODA0CisgICAgMHgxLmQ2NjM3ZDA3MDM0N2VlOTRlODMwNDQ1ZTc2NDg2NzI3cC0xLAorICAgIDB4MS45NDVlNmM2OWE1ODBmYjdiYjI3ZDAyYzBmZTBmOGE3MXAtMiwKKyAgICAtMHgxLjAwMDAwMnA2MywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDUKKyAgICAtMHgxLjBlNTI4MzY2MWRmMGNhMGY1NWFiNjE2N2UxNDUxNGExcC0xLAorICAgIC0weDEuYjJkMjU1ZjJiZDA0MjNlMjllMmE1NDg3MjhmMDM0YWJwLTEsCisgICAgMHgxLmZmZmZmZXAyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDYKKyAgICAweDEuMGU1MjgzNjYxZGYwY2EwZjU1YWI2MTY3ZTE0NTE0YTFwLTEsCisgICAgLTB4MS5iMmQyNTVmMmJkMDQyM2UyOWUyYTU0ODcyOGYwMzRhYnAtMSwKKyAgICAtMHgxLmZmZmZmZXAyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDcKKyAgICAtMHgxLjg2ZGNjOWJhYmIwYTQwZWU4NzVjYWIzYjllODkyNzU3cC0xLAorICAgIDB4MS40YWI2NTExYTdkMzlhZDNjYzg4ZGVkMWU3NzVjYTE0N3AtMSwKKyAgICAweDEucDI3LAorICB9LAorICB7IC8vIEVudHJ5IDgwOAorICAgIDB4MS44NmRjYzliYWJiMGE0MGVlODc1Y2FiM2I5ZTg5Mjc1N3AtMSwKKyAgICAweDEuNGFiNjUxMWE3ZDM5YWQzY2M4OGRlZDFlNzc1Y2ExNDdwLTEsCisgICAgLTB4MS5wMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODA5CisgICAgMHgxLjE3MTk5OWI2MjlmZDViNjM1N2M2ZGZmNGQ3ODI3ZDk1cC0xLAorICAgIC0weDEuYWQzZDgwYzgyZjQ0NTJiMDc2NTgxZGUyNDY0ODQzNWJwLTEsCisgICAgMHgxLjAwMDAwMnAyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTAKKyAgICAtMHgxLjE3MTk5OWI2MjlmZDViNjM1N2M2ZGZmNGQ3ODI3ZDk1cC0xLAorICAgIC0weDEuYWQzZDgwYzgyZjQ0NTJiMDc2NTgxZGUyNDY0ODQzNWJwLTEsCisgICAgLTB4MS4wMDAwMDJwMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODExCisgICAgLTB4MS5lNTdlYzA5MjIxOTczNTUwZDFlNTc5OGRjZjBjZDI1ZHAtMSwKKyAgICAtMHgxLjQ1MzJjMzcyMWVkNDM0M2FkODhlZWE4OTA4YTk4OGNicC0yLAorICAgIDB4MS5mZmZmZmVwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgODEyCisgICAgMHgxLmU1N2VjMDkyMjE5NzM1NTBkMWU1Nzk4ZGNmMGNkMjVkcC0xLAorICAgIC0weDEuNDUzMmMzNzIxZWQ0MzQzYWQ4OGVlYTg5MDhhOTg4Y2JwLTIsCisgICAgLTB4MS5mZmZmZmVwMjMsCisgIH0sCisgIHsgLy8gRW50cnkgODEzCisgICAgLTB4MS44ZjIyZjg0MzNkNmVkZmU5YTRhZmY5NjIyNTE3Y2FhOXAtMSwKKyAgICAweDEuNDBhZDY3ZjNmMGM5YTE0Mzk2M2M5Yzk2ZGJjZTNmOGFwLTEsCisgICAgMHgxLnAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTQKKyAgICAweDEuOGYyMmY4NDMzZDZlZGZlOWE0YWZmOTYyMjUxN2NhYTlwLTEsCisgICAgMHgxLjQwYWQ2N2YzZjBjOWExNDM5NjNjOWM5NmRiY2UzZjhhcC0xLAorICAgIC0weDEucDI0LAorICB9LAorICB7IC8vIEVudHJ5IDgxNQorICAgIDB4MS5jOWIwYzcyNjVjNTQzZjgwZmFmMDE3NDFjNjQ1ODU2MHAtMSwKKyAgICAweDEuY2FmODUzN2MzZTQ0MmNhOGFjYTg2YzE1Njc3Mzg1M2FwLTIsCisgICAgMHgxLjAwMDAwMnAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTYKKyAgICAtMHgxLmM5YjBjNzI2NWM1NDNmODBmYWYwMTc0MWM2NDU4NTYwcC0xLAorICAgIDB4MS5jYWY4NTM3YzNlNDQyY2E4YWNhODZjMTU2NzczODUzYXAtMiwKKyAgICAtMHgxLjAwMDAwMnAyNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTcKKyAgICAtMHgxLjgzN2I5OGEzMTg1ZDE0NjZkODUyZjBhN2RjMWQyNDhlcC0xLAorICAgIC0weDEuNGVhYTY2N2JhMGI5MGRmYjA1YWIzZDljMjQ3Y2RlZTdwLTEsCisgICAgMHgxLmZmZmZmZXAxLAorICB9LAorICB7IC8vIEVudHJ5IDgxOAorICAgIDB4MS44MzdiOThhMzE4NWQxNDY2ZDg1MmYwYTdkYzFkMjQ4ZXAtMSwKKyAgICAtMHgxLjRlYWE2NjdiYTBiOTBkZmIwNWFiM2Q5YzI0N2NkZWU3cC0xLAorICAgIC0weDEuZmZmZmZlcDEsCisgIH0sCisgIHsgLy8gRW50cnkgODE5CisgICAgLTB4MS44MzdiOWRkZGMxZWFlNzBjZTk4MDU1YTBlNDUwZDkzY3AtMSwKKyAgICAtMHgxLjRlYWE2MDZkYjI0YzBjNDY2ZGExYzJkYzdiYWEyYjMycC0xLAorICAgIDB4MS5wMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjAKKyAgICAweDEuODM3YjlkZGRjMWVhZTcwY2U5ODA1NWEwZTQ1MGQ5M2NwLTEsCisgICAgLTB4MS40ZWFhNjA2ZGIyNGMwYzQ2NmRhMWMyZGM3YmFhMmIzMnAtMSwKKyAgICAtMHgxLnAyLAorICB9LAorICB7IC8vIEVudHJ5IDgyMQorICAgIC0weDEuODM3YmE4NTMxNGJkZTUyYjFlOWMyYzhlZDI3MTJjNzJwLTEsCisgICAgLTB4MS40ZWFhNTQ1MWQ1MzM0OGViODlkYzQ3OGQ0ZDExYmUwMnAtMSwKKyAgICAweDEuMDAwMDAycDIsCisgIH0sCisgIHsgLy8gRW50cnkgODIyCisgICAgMHgxLjgzN2JhODUzMTRiZGU1MmIxZTljMmM4ZWQyNzEyYzcycC0xLAorICAgIC0weDEuNGVhYTU0NTFkNTMzNDhlYjg5ZGM0NzhkNGQxMWJlMDJwLTEsCisgICAgLTB4MS4wMDAwMDJwMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjMKKyAgICAweDEuZDE4ZjcwNTczZGE2MzAxMmZhMWMwZTNkMmViYmU1OWNwLTEsCisgICAgLTB4MS5hYTIyNWUyZWY5NjI0MTkxNWI2ZmQyMTc1MjI4MTRmNXAtMiwKKyAgICAweDEuZmZmZmZlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgODI0CisgICAgLTB4MS5kMThmNzA1NzNkYTYzMDEyZmExYzBlM2QyZWJiZTU5Y3AtMSwKKyAgICAtMHgxLmFhMjI1ZTJlZjk2MjQxOTE1YjZmZDIxNzUyMjgxNGY1cC0yLAorICAgIC0weDEuZmZmZmZlcDAsCisgIH0sCisgIHsgLy8gRW50cnkgODI1CisgICAgMHgxLmQxOGY2ZWFkMWI0NDVkZmFiODQ4MTg4MDA5YzliYjk1cC0xLAorICAgIC0weDEuYWEyMjY1NzUzNzIwNGE0MzMyZjhhY2JiNzJiMGQ3NjhwLTIsCisgICAgMHgxLnAxLAorICB9LAorICB7IC8vIEVudHJ5IDgyNgorICAgIC0weDEuZDE4ZjZlYWQxYjQ0NWRmYWI4NDgxODgwMDljOWJiOTVwLTEsCisgICAgLTB4MS5hYTIyNjU3NTM3MjA0YTQzMzJmOGFjYmI3MmIwZDc2OHAtMiwKKyAgICAtMHgxLnAxLAorICB9LAorICB7IC8vIEVudHJ5IDgyNworICAgIDB4MS5kMThmNmI1OGQ2NmFlNzExMGIyYjZmN2NmZmJhNmVjMXAtMSwKKyAgICAtMHgxLmFhMjI3NDAxYjI4ODYyMGEwMzcyZDVhOTYwODQ5MTVkcC0yLAorICAgIDB4MS4wMDAwMDJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjgKKyAgICAtMHgxLmQxOGY2YjU4ZDY2YWU3MTEwYjJiNmY3Y2ZmYmE2ZWMxcC0xLAorICAgIC0weDEuYWEyMjc0MDFiMjg4NjIwYTAzNzJkNWE5NjA4NDkxNWRwLTIsCisgICAgLTB4MS4wMDAwMDJwMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjkKKyAgICAweDEuYWVkNTQ3ZGJlZTRkMGQ4NjgwZDA4MTNkMWU0ZTIxZDBwLTEsCisgICAgMHgxLjE0YTI4MmFhMjViMTFmNjMxMmE3YTY1MTgwZTdjM2Q0cC0xLAorICAgIDB4MS5mZmZmZmVwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODMwCisgICAgLTB4MS5hZWQ1NDdkYmVlNGQwZDg2ODBkMDgxM2QxZTRlMjFkMHAtMSwKKyAgICAweDEuMTRhMjgyYWEyNWIxMWY2MzEyYTdhNjUxODBlN2MzZDRwLTEsCisgICAgLTB4MS5mZmZmZmVwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODMxCisgICAgMHgxLmFlZDU0OGYwOTBjZWUwNDE4ZGQzZDIxMzhhMWU3ODY1cC0xLAorICAgIDB4MS4xNGEyODBmYjUwNjhiOTIzODQ4Y2RiMmVkMGUzN2E1M3AtMSwKKyAgICAweDEucDAsCisgIH0sCisgIHsgLy8gRW50cnkgODMyCisgICAgLTB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAweDEuMTRhMjgwZmI1MDY4YjkyMzg0OGNkYjJlZDBlMzdhNTNwLTEsCisgICAgLTB4MS5wMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzMKKyAgICAweDEuYWVkNTRiMTlkNWNkNzkzN2NiZjQxZWQ0MDhjYTBhNTJwLTEsCisgICAgMHgxLjE0YTI3ZDlkYTVkNGFlYmNlNzE0MjhmOTA1N2IwOGRhcC0xLAorICAgIDB4MS4wMDAwMDJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzQKKyAgICAtMHgxLmFlZDU0YjE5ZDVjZDc5MzdjYmY0MWVkNDA4Y2EwYTUycC0xLAorICAgIDB4MS4xNGEyN2Q5ZGE1ZDRhZWJjZTcxNDI4ZjkwNTdiMDhkYXAtMSwKKyAgICAtMHgxLjAwMDAwMnAwLAorICB9LAorICB7IC8vIEVudHJ5IDgzNQorICAgIDB4MS5lYWVlODU4MzVkZGU1YjcxYmVlYzdkOGQ5ODA1MjExMnAtMiwKKyAgICAweDEuYzE1MjgwZTA3Mzc2OTJkZDQzNjkwOGZkYzhlNmUyZTFwLTEsCisgICAgMHgxLmZmZmZmZXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzYKKyAgICAtMHgxLmVhZWU4NTgzNWRkZTViNzFiZWVjN2Q4ZDk4MDUyMTEycC0yLAorICAgIDB4MS5jMTUyODBlMDczNzY5MmRkNDM2OTA4ZmRjOGU2ZTJlMXAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzcKKyAgICAweDEuZWFlZTg3NDRiMDVlZmU4NzY0YmMzNjRmZDgzN2I2NjZwLTIsCisgICAgMHgxLmMxNTI4MDY1YjdkNGY5ZGI3YmJiM2I0NWY1ZjViMzBhcC0xLAorICAgIDB4MS5wLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODM4CisgICAgLTB4MS5lYWVlODc0NGIwNWVmZTg3NjRiYzM2NGZkODM3YjY2NnAtMiwKKyAgICAweDEuYzE1MjgwNjViN2Q0ZjlkYjdiYmIzYjQ1ZjVmNWIzMGFwLTEsCisgICAgLTB4MS5wLTEsCisgIH0sCisgIHsgLy8gRW50cnkgODM5CisgICAgMHgxLmVhZWU4YWM3NTU1ZWQ0N2ZjYTc3Y2VlZDE3NGM4ZWEwcC0yLAorICAgIDB4MS5jMTUyN2Y3MDQwOTA3NmRhMGMzMjA0ZGYxZTA5OWE4M3AtMSwKKyAgICAweDEuMDAwMDAycC0xLAorICB9LAorICB7IC8vIEVudHJ5IDg0MAorICAgIC0weDEuZWFlZThhYzc1NTVlZDQ3ZmNhNzdjZWVkMTc0YzhlYTBwLTIsCisgICAgMHgxLmMxNTI3ZjcwNDA5MDc2ZGEwYzMyMDRkZjFlMDk5YTgzcC0xLAorICAgIC0weDEuMDAwMDAycC0xLAorICB9LAorICB7IC8vIEVudHJ5IDg0MQorICAgIDB4MS5mYWFlZWI1ZjFjMGQ2M2Y0M2M2ZjNlYzQ2MDExNjkwZnAtMywKKyAgICAweDEuZjAxNTRhMTc4OWQ4ZGNjMTcyY2QyMDkyZDA1ZjYzOTRwLTEsCisgICAgMHgxLmZmZmZmZXAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDIKKyAgICAtMHgxLmZhYWVlYjVmMWMwZDYzZjQzYzZmM2VjNDYwMTE2OTBmcC0zLAorICAgIDB4MS5mMDE1NGExNzg5ZDhkY2MxNzJjZDIwOTJkMDVmNjM5NHAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDMKKyAgICAweDEuZmFhZWVkNGYzMTU3NmJhODlkZWJkYzczNTFlOGIxYWVwLTMsCisgICAgMHgxLmYwMTU0OWY3ZGVlYTE3NGYwN2E2Nzk3MmJmMjlmMTQ4cC0xLAorICAgIDB4MS5wLTIsCisgIH0sCisgIHsgLy8gRW50cnkgODQ0CisgICAgLTB4MS5mYWFlZWQ0ZjMxNTc2YmE4OWRlYmRjNzM1MWU4YjFhZXAtMywKKyAgICAweDEuZjAxNTQ5ZjdkZWVhMTc0ZjA3YTY3OTcyYmYyOWYxNDhwLTEsCisgICAgLTB4MS5wLTIsCisgIH0sCisgIHsgLy8gRW50cnkgODQ1CisgICAgMHgxLmZhYWVmMTJmNWJlYjFjMTA5NDQ3M2QzYzMzNjViOWUxcC0zLAorICAgIDB4MS5mMDE1NDliODg5MGMyZjY2MzM3Y2FjMTVhNzIzN2M4ZXAtMSwKKyAgICAweDEuMDAwMDAycC0yLAorICB9LAorICB7IC8vIEVudHJ5IDg0NgorICAgIC0weDEuZmFhZWYxMmY1YmViMWMxMDk0NDczZDNjMzM2NWI5ZTFwLTMsCisgICAgMHgxLmYwMTU0OWI4ODkwYzJmNjYzMzdjYWMxNWE3MjM3YzhlcC0xLAorICAgIC0weDEuMDAwMDAycC0yLAorICB9LAorICB7IC8vIEVudHJ5IDg0NworICAgIDB4MS5mZWFhZWNlYzZkOGUzMGNkNTY5NTBlYjJlYmRjZWJkNHAtNCwKKyAgICAweDEuZmMwMTU1MmZkMDY4ZWU4M2Y1Yjc0MmMwNTI0NWU4YjJwLTEsCisgICAgMHgxLmZmZmZmZXAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDgKKyAgICAtMHgxLmZlYWFlY2VjNmQ4ZTMwY2Q1Njk1MGViMmViZGNlYmQ0cC00LAorICAgIDB4MS5mYzAxNTUyZmQwNjhlZTgzZjViNzQyYzA1MjQ1ZThiMnAtMSwKKyAgICAtMHgxLmZmZmZmZXAtNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDkKKyAgICAweDEuZmVhYWVlZTg2ZWUzNWNhMDY5YTg2NzIxZjg5Zjg1YTVwLTQsCisgICAgMHgxLmZjMDE1NTI3ZDViZDM2ZGEzY2Q0MjUzYmVkZTMxOWNhcC0xLAorICAgIDB4MS5wLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODUwCisgICAgLTB4MS5mZWFhZWVlODZlZTM1Y2EwNjlhODY3MjFmODlmODVhNXAtNCwKKyAgICAweDEuZmMwMTU1MjdkNWJkMzZkYTNjZDQyNTNiZWRlMzE5Y2FwLTEsCisgICAgLTB4MS5wLTMsCisgIH0sCisgIHsgLy8gRW50cnkgODUxCisgICAgMHgxLmZlYWFmMmUwNzE4ZDljNTY4Yzk0NDJjODE1NDVjZDYycC00LAorICAgIDB4MS5mYzAxNTUxN2UwNjVhZmI2YmIxMDJjMThmNTkxOTgyMHAtMSwKKyAgICAweDEuMDAwMDAycC0zLAorICB9LAorICB7IC8vIEVudHJ5IDg1MgorICAgIC0weDEuZmVhYWYyZTA3MThkOWM1NjhjOTQ0MmM4MTU0NWNkNjJwLTQsCisgICAgMHgxLmZjMDE1NTE3ZTA2NWFmYjZiYjEwMmMxOGY1OTE5ODIwcC0xLAorICAgIC0weDEuMDAwMDAycC0zLAorICB9LAorICB7IC8vIEVudHJ5IDg1MworICAgIDB4MS5mZmFhYWNlZmQ0ZDg1NWFjODIyNzc5OWYzZTI2M2Q3YXAtNSwKKyAgICAweDEuZmYwMDE1NTY5ZWY3ZTJiOTYzMDFlNmY3NTJjMDE5ZDRwLTEsCisgICAgMHgxLmZmZmZmZXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTQKKyAgICAtMHgxLmZmYWFhY2VmZDRkODU1YWM4MjI3Nzk5ZjNlMjYzZDdhcC01LAorICAgIDB4MS5mZjAwMTU1NjllZjdlMmI5NjMwMWU2Zjc1MmMwMTlkNHAtMSwKKyAgICAtMHgxLmZmZmZmZXAtNSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTUKKyAgICAweDEuZmZhYWFlZWVkNGVkYWI0YmE0YjM2NWVkMjVhOTU5NWZwLTUsCisgICAgMHgxLmZmMDAxNTU0OWY0ZDM0Y2EwZTFlZTY1MDliYzQyYjcxcC0xLAorICAgIDB4MS5wLTQsCisgIH0sCisgIHsgLy8gRW50cnkgODU2CisgICAgLTB4MS5mZmFhYWVlZWQ0ZWRhYjRiYTRiMzY1ZWQyNWE5NTk1ZnAtNSwKKyAgICAweDEuZmYwMDE1NTQ5ZjRkMzRjYTBlMWVlNjUwOWJjNDJiNzFwLTEsCisgICAgLTB4MS5wLTQsCisgIH0sCisgIHsgLy8gRW50cnkgODU3CisgICAgMHgxLmZmYWFiMmVjZDUxODUwOGFlOWJjNzMwYTE2NWE4ZWFkcC01LAorICAgIDB4MS5mZjAwMTU1MDlmZjdkMmVlNjQxOGU5MjRmMGRlNWU5N3AtMSwKKyAgICAweDEuMDAwMDAycC00LAorICB9LAorICB7IC8vIEVudHJ5IDg1OAorICAgIC0weDEuZmZhYWIyZWNkNTE4NTA4YWU5YmM3MzBhMTY1YThlYWRwLTUsCisgICAgMHgxLmZmMDAxNTUwOWZmN2QyZWU2NDE4ZTkyNGYwZGU1ZTk3cC0xLAorICAgIC0weDEuMDAwMDAycC00LAorICB9LAorICB7IC8vIEVudHJ5IDg1OQorICAgIDB4MS5mZmVhYThlZjJlODU5MzM4ODNjMGRjMzM0NjIzODdiNXAtNiwKKyAgICAweDEuZmZjMDAxNTVkMjc3ZDU4ZTcyN2NkOTVjNDNmNzU5Y2ZwLTEsCisgICAgMHgxLmZmZmZmZXAtNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjAKKyAgICAtMHgxLmZmZWFhOGVmMmU4NTkzMzg4M2MwZGMzMzQ2MjM4N2I1cC02LAorICAgIDB4MS5mZmMwMDE1NWQyNzdkNThlNzI3Y2Q5NWM0M2Y3NTljZnAtMSwKKyAgICAtMHgxLmZmZmZmZXAtNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjEKKyAgICAweDEuZmZlYWFhZWVlZTg2ZThjYWZlNDEzNzZkNDc5MTk1NzlwLTYsCisgICAgMHgxLmZmYzAwMTU1NTI3ZDJiMTJhZWRiNDlkOTI5MjhkZjcycC0xLAorICAgIDB4MS5wLTUsCisgIH0sCisgIHsgLy8gRW50cnkgODYyCisgICAgLTB4MS5mZmVhYWFlZWVlODZlOGNhZmU0MTM3NmQ0NzkxOTU3OXAtNiwKKyAgICAweDEuZmZjMDAxNTU1MjdkMmIxMmFlZGI0OWQ5MjkyOGRmNzJwLTEsCisgICAgLTB4MS5wLTUsCisgIH0sCisgIHsgLy8gRW50cnkgODYzCisgICAgMHgxLmZmZWFhZWVlNmU4OTkyNzAwMzQxM2FiZTY0ZTlkYzIxcC02LAorICAgIDB4MS5mZmMwMDE1NDUyODdkNDliNTc5NzJhZjUxNDU2NjNhMHAtMSwKKyAgICAweDEuMDAwMDAycC01LAorICB9LAorICB7IC8vIEVudHJ5IDg2NAorICAgIC0weDEuZmZlYWFlZWU2ZTg5OTI3MDAzNDEzYWJlNjRlOWRjMjFwLTYsCisgICAgMHgxLmZmYzAwMTU0NTI4N2Q0OWI1Nzk3MmFmNTE0NTY2M2EwcC0xLAorICAgIC0weDEuMDAwMDAycC01LAorICB9LAorICB7IC8vIEVudHJ5IDg2NQorICAgIDB4MS5mZmZhYThhZWZlZWQzOTZmZmZmYzYzNjMxM2QwYmE2ZHAtNywKKyAgICAweDEuZmZmMDAwMTU3NTQ5OWYzZDc5OTZlMmRhMTFjZGViMjRwLTEsCisgICAgMHgxLmZmZmZmZXAtNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjYKKyAgICAtMHgxLmZmZmFhOGFlZmVlZDM5NmZmZmZjNjM2MzEzZDBiYTZkcC03LAorICAgIDB4MS5mZmYwMDAxNTc1NDk5ZjNkNzk5NmUyZGExMWNkZWIyNHAtMSwKKyAgICAtMHgxLmZmZmZmZXAtNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjcKKyAgICAweDEuZmZmYWFhYWVlZWVkNGVkNTQ5YzY1NjBmODg5ZWU1MzFwLTcsCisgICAgMHgxLmZmZjAwMDE1NTU0OWY0YTI4YTI4MGU5N2JjZDU5YzhhcC0xLAorICAgIDB4MS5wLTYsCisgIH0sCisgIHsgLy8gRW50cnkgODY4CisgICAgLTB4MS5mZmZhYWFhZWVlZWQ0ZWQ1NDljNjU2MGY4ODllZTUzMXAtNywKKyAgICAweDEuZmZmMDAwMTU1NTQ5ZjRhMjhhMjgwZTk3YmNkNTljOGFwLTEsCisgICAgLTB4MS5wLTYsCisgIH0sCisgIHsgLy8gRW50cnkgODY5CisgICAgMHgxLmZmZmFhZWFlY2VlZDc5M2ZkZTVhMWE5Y2E1YmIxZWU2cC03LAorICAgIDB4MS5mZmYwMDAxNTE1NGE5ZjBjYWU0YTYyMTUxNTAxY2QwYXAtMSwKKyAgICAweDEuMDAwMDAycC02LAorICB9LAorICB7IC8vIEVudHJ5IDg3MAorICAgIC0weDEuZmZmYWFlYWVjZWVkNzkzZmRlNWExYTljYTViYjFlZTZwLTcsCisgICAgMHgxLmZmZjAwMDE1MTU0YTlmMGNhZTRhNjIxNTE1MDFjZDBhcC0xLAorICAgIC0weDEuMDAwMDAycC02LAorICB9LAorICB7IC8vIEVudHJ5IDg3MQorICAgIDB4MS5mZmZmZmRmYWFhYWFiYWFlZWVkZWQ5OTdmZWZmYTM1YXAtMTUsCisgICAgMHgxLmZmZmZmZmYwMDAwMDIwMTU1NTQ0ZmZmNDlmY2EzOGU2cC0xLAorICAgIDB4MS5mZmZmZmVwLTE1LAorICB9LAorICB7IC8vIEVudHJ5IDg3MgorICAgIC0weDEuZmZmZmZkZmFhYWFhYmFhZWVlZGVkOTk3ZmVmZmEzNWFwLTE1LAorICAgIDB4MS5mZmZmZmZmMDAwMDAyMDE1NTU0NGZmZjQ5ZmNhMzhlNnAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMTUsCisgIH0sCisgIHsgLy8gRW50cnkgODczCisgICAgMHgxLmZmZmZmZmZhYWFhYWFhYWVlZWVlZWVlZDRlZDRlZDRmcC0xNSwKKyAgICAweDEuZmZmZmZmZjAwMDAwMDAxNTU1NTU1NTQ5ZjQ5ZjQ5ZjdwLTEsCisgICAgMHgxLnAtMTQsCisgIH0sCisgIHsgLy8gRW50cnkgODc0CisgICAgLTB4MS5mZmZmZmZmYWFhYWFhYWFlZWVlZWVlZWQ0ZWQ0ZWQ0ZnAtMTUsCisgICAgMHgxLmZmZmZmZmYwMDAwMDAwMTU1NTU1NTU0OWY0OWY0OWY3cC0xLAorICAgIC0weDEucC0xNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzUKKyAgICAweDEuMDAwMDAxZmQ1NTU1NDU1Nzc3NTc4Y2NiZTdiZmMwOWNwLTE0LAorICAgIDB4MS5mZmZmZmZlZmZmZmZjMDE1NTUxNWZmZjRhMTQ5NmMxY3AtMSwKKyAgICAweDEuMDAwMDAycC0xNCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzYKKyAgICAtMHgxLjAwMDAwMWZkNTU1NTQ1NTc3NzU3OGNjYmU3YmZjMDljcC0xNCwKKyAgICAweDEuZmZmZmZmZWZmZmZmYzAxNTU1MTVmZmY0YTE0OTZjMWNwLTEsCisgICAgLTB4MS4wMDAwMDJwLTE0LAorICB9LAorICB7IC8vIEVudHJ5IDg3NworICAgIDB4MS5mZmZmZmRmZmZmZmZmZWFhYWFhZWFhYWFhNmFhZWVmMHAtMjgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZjMDAwMDA3ZmZmZmZjMDE1NTU1cC0xLAorICAgIDB4MS5mZmZmZmVwLTI4LAorICB9LAorICB7IC8vIEVudHJ5IDg3OAorICAgIC0weDEuZmZmZmZkZmZmZmZmZmVhYWFhYWVhYWFhYTZhYWVlZjBwLTI4LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmYzAwMDAwN2ZmZmZmYzAxNTU1NXAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMjgsCisgIH0sCisgIHsgLy8gRW50cnkgODc5CisgICAgMHgxLmZmZmZmZmZmZmZmZmZlYWFhYWFhYWFhYWFhYWFlZWVlcC0yOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmMwMDAwMDAwMDAwMDAwMTU1NTVwLTEsCisgICAgMHgxLnAtMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODgwCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZWFhYWFhYWFhYWFhYWFhZWVlZXAtMjgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZjMDAwMDAwMDAwMDAwMDE1NTU1cC0xLAorICAgIC0weDEucC0yNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODEKKyAgICAweDEuMDAwMDAxZmZmZmZmZmY1NTU1NTE1NTU1NGQ1NTc3NzJwLTI3LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmYmZmZmZlZmZmZmZmMDAxNTU1NXAtMSwKKyAgICAweDEuMDAwMDAycC0yNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODIKKyAgICAtMHgxLjAwMDAwMWZmZmZmZmZmNTU1NTUxNTU1NTRkNTU3NzcycC0yNywKKyAgICAweDEuZmZmZmZmZmZmZmZmZmJmZmZmZWZmZmZmZjAwMTU1NTVwLTEsCisgICAgLTB4MS4wMDAwMDJwLTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg4MworICAgIDB4MS5mZmZmZmRmZmZmZmZmZmZhYWFhYWJhYWFhYTlhYWFhZXAtMzEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZjAwMDAwMWZmZmZmZjAwMDE1cC0xLAorICAgIDB4MS5mZmZmZmVwLTMxLAorICB9LAorICB7IC8vIEVudHJ5IDg4NAorICAgIC0weDEuZmZmZmZkZmZmZmZmZmZmYWFhYWFiYWFhYWE5YWFhYWVwLTMxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmYwMDAwMDFmZmZmZmYwMDAxNXAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMzEsCisgIH0sCisgIHsgLy8gRW50cnkgODg1CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmFhYWFhYWFhYWFhYWFhYWFlcC0zMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmMDAwMDAwMDAwMDAwMDAwMTVwLTEsCisgICAgMHgxLnAtMzAsCisgIH0sCisgIHsgLy8gRW50cnkgODg2CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmZmZhYWFhYWFhYWFhYWFhYWFhZXAtMzEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZjAwMDAwMDAwMDAwMDAwMDE1cC0xLAorICAgIC0weDEucC0zMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODcKKyAgICAweDEuMDAwMDAxZmZmZmZmZmZmZDU1NTU0NTU1NTUzNTU1NTdwLTMwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmVmZmZmZmJmZmZmZmMwMDAxNXAtMSwKKyAgICAweDEuMDAwMDAycC0zMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODgKKyAgICAtMHgxLjAwMDAwMWZmZmZmZmZmZmQ1NTU1NDU1NTU1MzU1NTU3cC0zMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZlZmZmZmZiZmZmZmZjMDAwMTVwLTEsCisgICAgLTB4MS4wMDAwMDJwLTMwLAorICB9LAorICB7IC8vIEVudHJ5IDg4OQorICAgIDB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAweDEuYjRiZjJjNzliZGZjZGFhNTNlZDZjMDEzZjY1ZTA5NjNwLTEsCisgICAgLTB4MS5mZmZmZmVwMTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg5MAorICAgIC0weDEuMGIzMzY2NTA4OTU3NTIwZDlkYzg4ZDdjMDkzMzdlMjRwLTEsCisgICAgMHgxLmI0YmYyYzc5YmRmY2RhYTUzZWQ2YzAxM2Y2NWUwOTYzcC0xLAorICAgIDB4MS5mZmZmZmVwMTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg5MQorICAgIC0weDEuMGIzMzY2NTA4OTU3NTIwZDlkYzg4ZDdjMDkzMzdlMjRwLTEsCisgICAgMHgxLmI0YmYyYzc5YmRmY2RhYTUzZWQ2YzAxM2Y2NWUwOTYzcC0xLAorICAgIDB4MS5mZmZmZmVwMTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg5MgorICAgIDB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAweDEuYjRiZjJjNzliZGZjZGFhNTNlZDZjMDEzZjY1ZTA5NjNwLTEsCisgICAgLTB4MS5mZmZmZmVwMTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg5MworICAgIC0weDEuMGIzMzY2NTA4OTU3NTIwZDlkYzg4ZDdjMDkzMzdlMjRwLTEsCisgICAgMHgxLmI0YmYyYzc5YmRmY2RhYTUzZWQ2YzAxM2Y2NWUwOTYzcC0xLAorICAgIDB4MS5mZmZmZmVwMTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg5NAorICAgIDB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAweDEuYjRiZjJjNzliZGZjZGFhNTNlZDZjMDEzZjY1ZTA5NjNwLTEsCisgICAgLTB4MS5mZmZmZmVwMTI3LAorICB9LAorICB7IC8vIEVudHJ5IDg5NQorICAgIC0weDEuNDhjZTU3NTIwMmVmZDkzYzYyZjdiODgxMDZlYTFkNGRwLTEsCisgICAgLTB4MS44ODc3YTI5ZTNkN2I2ZGVmY2I1MjhlODZmNGMzZTA5YXAtMSwKKyAgICAweDEuZmZmZmZjcDEyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTYKKyAgICAweDEuNDhjZTU3NTIwMmVmZDkzYzYyZjdiODgxMDZlYTFkNGRwLTEsCisgICAgLTB4MS44ODc3YTI5ZTNkN2I2ZGVmY2I1MjhlODZmNGMzZTA5YXAtMSwKKyAgICAtMHgxLmZmZmZmY3AxMjcsCisgIH0sCisgIHsgLy8gRW50cnkgODk3CisgICAgLTB4MS43NzdhNWNmNzJjZWM1ZmQ2MTg5NmNiNGY0MGQxZGU3OXAtMjQsCisgICAgLTB4MS5mZmZmZmZmZmZmZmRkOTQ4NDkyNzFkMDhlZWNmNTRhMXAtMSwKKyAgICAweDEuOTIxZmI2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgODk4CisgICAgMHgxLjc3N2E1Y2Y3MmNlYzVmZDYxODk2Y2I0ZjQwZDFkZTc5cC0yNCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZGQ5NDg0OTI3MWQwOGVlY2Y1NGExcC0xLAorICAgIC0weDEuOTIxZmI2cDEsCisgIH0sCisgIHsgLy8gRW50cnkgODk5CisgICAgMHgxLmZmZmZmZmZmZmZmZjc2NTIxMjQ5Yzc0MjI5MzBlZDgycC0xLAorICAgIC0weDEuNzc3YTVjZjcyY2VjYzRjZGUzYTMxZTdkNWEwMjYxNDJwLTI1LAorICAgIDB4MS45MjFmYjZwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjc2NTIxMjQ5Yzc0MjI5MzBlZDgycC0xLAorICAgIC0weDEuNzc3YTVjZjcyY2VjYzRjZGUzYTMxZTdkNWEwMjYxNDJwLTI1LAorICAgIC0weDEuOTIxZmI2cDAsCisgIH0sCisgIHsgLy8gRW50cnkgOTAxCisgICAgMHgxLmFlZDU0YjE5ZDVjZDc5MzdjYmY0MWVkNDA4Y2EwYTUycC0xLAorICAgIDB4MS4xNGEyN2Q5ZGE1ZDRhZWJjZTcxNDI4ZjkwNTdiMDhkYXAtMSwKKyAgICAweDEuMDAwMDAycDAsCisgIH0sCisgIHsgLy8gRW50cnkgOTAyCisgICAgLTB4MS5hZWQ1NGIxOWQ1Y2Q3OTM3Y2JmNDFlZDQwOGNhMGE1MnAtMSwKKyAgICAweDEuMTRhMjdkOWRhNWQ0YWViY2U3MTQyOGY5MDU3YjA4ZGFwLTEsCisgICAgLTB4MS4wMDAwMDJwMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDMKKyAgICAweDEuYWVkNTQ4ZjA5MGNlZTA0MThkZDNkMjEzOGExZTc4NjVwLTEsCisgICAgMHgxLjE0YTI4MGZiNTA2OGI5MjM4NDhjZGIyZWQwZTM3YTUzcC0xLAorICAgIDB4MS5wMCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDQKKyAgICAtMHgxLmFlZDU0OGYwOTBjZWUwNDE4ZGQzZDIxMzhhMWU3ODY1cC0xLAorICAgIDB4MS4xNGEyODBmYjUwNjhiOTIzODQ4Y2RiMmVkMGUzN2E1M3AtMSwKKyAgICAtMHgxLnAwLAorICB9LAorICB7IC8vIEVudHJ5IDkwNQorICAgIDB4MS5hZWQ1NDdkYmVlNGQwZDg2ODBkMDgxM2QxZTRlMjFkMHAtMSwKKyAgICAweDEuMTRhMjgyYWEyNWIxMWY2MzEyYTdhNjUxODBlN2MzZDRwLTEsCisgICAgMHgxLmZmZmZmZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDYKKyAgICAtMHgxLmFlZDU0N2RiZWU0ZDBkODY4MGQwODEzZDFlNGUyMWQwcC0xLAorICAgIDB4MS4xNGEyODJhYTI1YjExZjYzMTJhN2E2NTE4MGU3YzNkNHAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMSwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDcKKyAgICAweDEuNmEwOWU2ZWNiNDFmZGQ3ZTY4MTg3MmM4NTQ4ODcwMTlwLTEsCisgICAgMHgxLjZhMDllNWUzMzM1OTgzZTVhYzkyZTczM2UzZjI0YjQycC0xLAorICAgIDB4MS45MjFmYjZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgOTA4CisgICAgLTB4MS42YTA5ZTZlY2I0MWZkZDdlNjgxODcyYzg1NDg4NzAxOXAtMSwKKyAgICAweDEuNmEwOWU1ZTMzMzU5ODNlNWFjOTJlNzMzZTNmMjRiNDJwLTEsCisgICAgLTB4MS45MjFmYjZwLTEsCisgIH0sCisgIHsgLy8gRW50cnkgOTA5CisgICAgMHgxLjAwMDAwMWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS4wMDAwMDJwLTEyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTAKKyAgICAtMHgxLjAwMDAwMWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjYsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuMDAwMDAycC0xMjYsCisgIH0sCisgIHsgLy8gRW50cnkgOTExCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTEyNiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xMjYsCisgIH0sCisgIHsgLy8gRW50cnkgOTEzCisgICAgMHgxLmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZmNwLTEyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTQKKyAgICAtMHgxLmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmZjcC0xMjcsCisgIH0sCisgIHsgLy8gRW50cnkgOTE1CisgICAgMHgxLmZmZmZmN2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5mZmZmZjhwLTEyNywKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTYKKyAgICAtMHgxLmZmZmZmN2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEuZmZmZmY4cC0xMjcsCisgIH0sCisgIHsgLy8gRW50cnkgOTE3CisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xNDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIDB4MS5wLTE0OCwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTgKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xNDksCisgICAgMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xLAorICAgIC0weDEucC0xNDgsCisgIH0sCisgIHsgLy8gRW50cnkgOTE5CisgICAgMC4wZiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEsCisgICAgMHgxLnAtMTQ5LAorICB9LAorICB7IC8vIEVudHJ5IDkyMAorICAgIC0wLjBmLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMSwKKyAgICAtMHgxLnAtMTQ5LAorICB9LAorICB7IC8vIEVudHJ5IDkyMQorICAgIDAuMCwKKyAgICAweDEucDAsCisgICAgMC4wZiwKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjIKKyAgICAtMC4wLAorICAgIDB4MS5wMCwKKyAgICAtMC4wZiwKKyAgfSwKK307CisjZW5kaWYgLy8gX19CSU9OSUNfXworCitURVNUKG1hdGhfc2luY29zZiwgc2luY29zZl9pbnRlbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19zaW5jb3NmX2ludGVsX2RhdGEpL3NpemVvZihzaW5jb3NmX2ludGVsX2RhdGFfdCk7IGkrKykgeworICAgZmxvYXQgZnNpbiwgZmNvczsKKyAgIHNpbmNvc2YoZ19zaW5jb3NmX2ludGVsX2RhdGFbaV0uY2FsbF9kYXRhLCAmZnNpbiwgJmZjb3MpOworICAgRVhQRUNUX0ZMT0FUX0VRKGdfc2luY29zZl9pbnRlbF9kYXRhW2ldLnNpbl9leHBlY3RlZCwgZnNpbikgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgIEVYUEVDVF9GTE9BVF9FUShnX3NpbmNvc2ZfaW50ZWxfZGF0YVtpXS5jb3NfZXhwZWN0ZWQsIGZjb3MpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfc2luZl90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfc2luZl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjFlMmM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWF0aF9zaW5mX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNDM5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQordHlwZWRlZiBzdHJ1Y3QgeworICBmbG9hdCBleHBlY3RlZDsKKyAgZmxvYXQgY2FsbF9kYXRhOworfSBzaW5mX2ludGVsX2RhdGFfdDsKKworc3RhdGljIHNpbmZfaW50ZWxfZGF0YV90IGdfc2luZl9pbnRlbF9kYXRhW10gPSB7CisgIHsgLy8gRW50cnkgMAorICAgIC0weDEuMDAwM2ZmZmZmZmY1NTRkNTUzNTU1MmNjY2Y3NzhjY2RwLTIxLAorICAgIC0weDEuMDAwNHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxCisgICAgMHgxLjAwMDNmZmZmZmZmNTU0ZDU1MzU1NTJjY2NmNzc4Y2NkcC0yMSwKKyAgICAweDEuMDAwNHAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyCisgICAgLTB4MS5kMzBjYTcwMDhhZjI0ZWYwNDhhN2EwNWVlY2RlMjEyMHAtNCwKKyAgICAtMHgxLjAwY2JmMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDMKKyAgICAweDEuZDMwY2E3MDA4YWYyNGVmMDQ4YTdhMDVlZWNkZTIxMjBwLTQsCisgICAgMHgxLjAwY2JmMHAxMAorICB9LAorICB7IC8vIEVudHJ5IDQKKyAgICAweDEuOGQ2NjVkMDAwMDIwMGVmYzQ0NzgwMDg2NThjNjE3YzdwLTEsCisgICAgLTB4MS4wMWVlMzRwMgorICB9LAorICB7IC8vIEVudHJ5IDUKKyAgICAtMHgxLjhkNjY1ZDAwMDAyMDBlZmM0NDc4MDA4NjU4YzYxN2M3cC0xLAorICAgIDB4MS4wMWVlMzRwMgorICB9LAorICB7IC8vIEVudHJ5IDYKKyAgICAweDEuZWMwNDJmZjk3MmU0MmMyM2YyOGYyZGE0ZmI3NWY4NTFwLTEsCisgICAgLTB4MS4xOGYxZjRwNAorICB9LAorICB7IC8vIEVudHJ5IDcKKyAgICAtMHgxLmVjMDQyZmY5NzJlNDJjMjNmMjhmMmRhNGZiNzVmODUxcC0xLAorICAgIDB4MS4xOGYxZjRwNAorICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICAweDEuZjBkMzg0MjQwYWQ5ZjJkYmE0N2I5NmIwODI3MWI0MWZwLTEsCisgICAgLTB4MS4xZGY5MDZwMgorICB9LAorICB7IC8vIEVudHJ5IDkKKyAgICAtMHgxLmYwZDM4NDI0MGFkOWYyZGJhNDdiOTZiMDgyNzFiNDFmcC0xLAorICAgIDB4MS4xZGY5MDZwMgorICB9LAorICB7IC8vIEVudHJ5IDEwCisgICAgLTB4MS40NjE2ZGFmOWNkM2NlNGU5MjE4NmU3ZDhlYzNkM2VmMHAtNSwKKyAgICAtMHgxLjNhcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMQorICAgIDB4MS40NjE2ZGFmOWNkM2NlNGU5MjE4NmU3ZDhlYzNkM2VmMHAtNSwKKyAgICAweDEuM2FwNgorICB9LAorICB7IC8vIEVudHJ5IDEyCisgICAgMHgxLmRmMDRjNWY5ZGUzNDMyMzVmNGY4YjE3OTcyODY4NzJicC0xLAorICAgIC0weDEuNDRiMDk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMworICAgIC0weDEuZGYwNGM1ZjlkZTM0MzIzNWY0ZjhiMTc5NzI4Njg3MmJwLTEsCisgICAgMHgxLjQ0YjA5NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTQKKyAgICAtMHgxLmZlZmZiZDczMzRjNzA0M2I5MGE2YmMyZDc2ZGRhN2M4cC0xLAorICAgIC0weDEuODIxY2Y2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNQorICAgIDB4MS5mZWZmYmQ3MzM0YzcwNDNiOTBhNmJjMmQ3NmRkYTdjOHAtMSwKKyAgICAweDEuODIxY2Y2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNgorICAgIDB4MS5lYmFjNTZmZmU2ZjI3ODkzYzY5ZjY4ZDFkN2I0YTQ0OHAtMywKKyAgICAtMHgxLjgyOWI4NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTcKKyAgICAtMHgxLmViYWM1NmZmZTZmMjc4OTNjNjlmNjhkMWQ3YjRhNDQ4cC0zLAorICAgIDB4MS44MjliODZwMgorICB9LAorICB7IC8vIEVudHJ5IDE4CisgICAgMHgxLmI3MjVjY2VmNjViMTM5MDkxMmEwZjVlYWFiMGU3MjAycC02LAorICAgIC0weDEuODU4MGZlcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOQorICAgIC0weDEuYjcyNWNjZWY2NWIxMzkwOTEyYTBmNWVhYWIwZTcyMDJwLTYsCisgICAgMHgxLjg1ODBmZXA3CisgIH0sCisgIHsgLy8gRW50cnkgMjAKKyAgICAweDEuMGIzMzY2NTA4OTU3NTIwZDlkYzg4ZDdjMDkzMzdlMjRwLTEsCisgICAgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjEKKyAgICAtMHgxLjBiMzM2NjUwODk1NzUyMGQ5ZGM4OGQ3YzA5MzM3ZTI0cC0xLAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjIKKyAgICAwLjBmLAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDIzCisgICAgLTAuMGYsCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDI0CisgICAgLTB4MS5mODNkZTdjMDY4M2QzYmQ5MGE3NjlmNjJhNDFhYzFjM3AtMSwKKyAgICAweDEuMDAwMDAycDUyCisgIH0sCisgIHsgLy8gRW50cnkgMjUKKyAgICAweDEuZjgzZGU3YzA2ODNkM2JkOTBhNzY5ZjYyYTQxYWMxYzNwLTEsCisgICAgLTB4MS4wMDAwMDJwNTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNgorICAgIC0weDEuN2RiZDExZmZkZTRjMjBkYmIzNzYwMTlmMWM2NTRiYjBwLTIsCisgICAgMHgxLjAwMDAyMnA2MgorICB9LAorICB7IC8vIEVudHJ5IDI3CisgICAgMHgxLjdkYmQxMWZmZGU0YzIwZGJiMzc2MDE5ZjFjNjU0YmIwcC0yLAorICAgIC0weDEuMDAwMDIycDYyCisgIH0sCisgIHsgLy8gRW50cnkgMjgKKyAgICAweDEuZWFmMGQ1MDA4ZjJkYjg5OWUyNDg3ZGE5ZDNiOWNkZTdwLTIsCisgICAgMHgxLjAwMDE1MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI5CisgICAgLTB4MS5lYWYwZDUwMDhmMmRiODk5ZTI0ODdkYTlkM2I5Y2RlN3AtMiwKKyAgICAtMHgxLjAwMDE1MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMwCisgICAgMHgxLmZmYWU4Y2ZlZmE4MTNkYTg3NDk4ZGY5ODhjM2Q4ZjVlcC01LAorICAgIDB4MS4wMDAxZjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMQorICAgIC0weDEuZmZhZThjZmVmYTgxM2RhODc0OThkZjk4OGMzZDhmNWVwLTUsCisgICAgLTB4MS4wMDAxZjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMgorICAgIDB4MS44OWM3ZDYwODdhODYxYmI2ZmU3OTQxNDhjMzQyNTM0OHAtMSwKKyAgICAweDEuMDAwM3A0MAorICB9LAorICB7IC8vIEVudHJ5IDMzCisgICAgLTB4MS44OWM3ZDYwODdhODYxYmI2ZmU3OTQxNDhjMzQyNTM0OHAtMSwKKyAgICAtMHgxLjAwMDNwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNAorICAgIC0weDEuNTllMWY1MTllZjhiNzIyZWFlMTJhNDA0Y2FkOTM3ZWJwLTEsCisgICAgMHgxLjAwMDM4MHAxMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNQorICAgIDB4MS41OWUxZjUxOWVmOGI3MjJlYWUxMmE0MDRjYWQ5MzdlYnAtMSwKKyAgICAtMHgxLjAwMDM4MHAxMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNgorICAgIDB4MS4wMDAzZmZmZmZmZjU1NGQ1NTM1NTUyY2NjZjc3OGNjZHAtMjEsCisgICAgMHgxLjAwMDRwLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMzcKKyAgICAtMHgxLjAwMDNmZmZmZmZmNTU0ZDU1MzU1NTJjY2NmNzc4Y2NkcC0yMSwKKyAgICAtMHgxLjAwMDRwLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAweDEuMzgzMDY1MDI3ZWM0ZjIwYWIxYzAwMjdkOTkxYjgwNWFwLTYsCisgICAgMHgxLjAwMDdjMHA5CisgIH0sCisgIHsgLy8gRW50cnkgMzkKKyAgICAtMHgxLjM4MzA2NTAyN2VjNGYyMGFiMWMwMDI3ZDk5MWI4MDVhcC02LAorICAgIC0weDEuMDAwN2MwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MAorICAgIDB4MS5lYjAzOTcwMDJmZGZiYWUyMjZmMDY5ZDZjZDUzYzQwZnAtMiwKKyAgICAweDEuMDAwY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQxCisgICAgLTB4MS5lYjAzOTcwMDJmZGZiYWUyMjZmMDY5ZDZjZDUzYzQwZnAtMiwKKyAgICAtMHgxLjAwMGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MgorICAgIDB4MS5mZWRjOGIwMDAxZjdkYWNlZTA5MGM1ZWRjM2JmYTU0N3AtNCwKKyAgICAweDEuMDAxOXAtMworICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgLTB4MS5mZWRjOGIwMDAxZjdkYWNlZTA5MGM1ZWRjM2JmYTU0N3AtNCwKKyAgICAtMHgxLjAwMTlwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NAorICAgIDB4MS5hYjQ3MWFmMjZmZmVhMjNkNzY0M2NmNjE0Yzg2MGIxOHAtMTAsCisgICAgMHgxLjAwMzgyMHA2OAorICB9LAorICB7IC8vIEVudHJ5IDQ1CisgICAgLTB4MS5hYjQ3MWFmMjZmZmVhMjNkNzY0M2NmNjE0Yzg2MGIxOHAtMTAsCisgICAgLTB4MS4wMDM4MjBwNjgKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIDB4MS5mZjI5ZWVmZGRlMzA0MWZjNWM3NWExZjgyMmE1NDIxZHAtNCwKKyAgICAweDEuMDA0MHAtMworICB9LAorICB7IC8vIEVudHJ5IDQ3CisgICAgLTB4MS5mZjI5ZWVmZGRlMzA0MWZjNWM3NWExZjgyMmE1NDIxZHAtNCwKKyAgICAtMHgxLjAwNDBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OAorICAgIDB4MS4yOTA3MDE3NTIwNmIzZjE5OGM4OTNlMTliNGJkNmNiOHAtMTMsCisgICAgMHgxLjAxZjBwMTAzCisgIH0sCisgIHsgLy8gRW50cnkgNDkKKyAgICAtMHgxLjI5MDcwMTc1MjA2YjNmMTk4Yzg5M2UxOWI0YmQ2Y2I4cC0xMywKKyAgICAtMHgxLjAxZjBwMTAzCisgIH0sCisgIHsgLy8gRW50cnkgNTAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmFhZmJlNTNkZTc0MjMxOTU0NzA5cC0xLAorICAgIDB4MS4wNGNjYmNwMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MQorICAgIDB4MS5mZmZmZmZmZmZmZmZhYWZiZTUzZGU3NDIzMTk1NDcwOXAtMSwKKyAgICAtMHgxLjA0Y2NiY3AxOAorICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgMHgxLmY0ZjcyY2FkNWY1ZmIxN2VjNjA4ZWM3YWMxY2JjYThicC0yLAorICAgIDB4MS4wNWJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTMKKyAgICAtMHgxLmY0ZjcyY2FkNWY1ZmIxN2VjNjA4ZWM3YWMxY2JjYThicC0yLAorICAgIC0weDEuMDViY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDU0CisgICAgMHgxLmY4OTZjNjY4OWQ3ZTc1ZTM1MWVjYzg1NzMxMjU0Y2QzcC0xLAorICAgIDB4MS4wN2MxZjhwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgNTUKKyAgICAtMHgxLmY4OTZjNjY4OWQ3ZTc1ZTM1MWVjYzg1NzMxMjU0Y2QzcC0xLAorICAgIC0weDEuMDdjMWY4cDExOQorICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgLTB4MS4yNjc1OTNmNGQ1OWM3ZGU2MTcwMDkwYTZhMDg0Y2RjYXAtMTQsCisgICAgMHgxLjA4MDE4MHAyMworICB9LAorICB7IC8vIEVudHJ5IDU3CisgICAgMHgxLjI2NzU5M2Y0ZDU5YzdkZTYxNzAwOTBhNmEwODRjZGNhcC0xNCwKKyAgICAtMHgxLjA4MDE4MHAyMworICB9LAorICB7IC8vIEVudHJ5IDU4CisgICAgMHgxLmZjODYzNzJhODQxNTQ5NDEwYzEyZGJlYzZmZTgwZGM1cC0yLAorICAgIDB4MS4wYTE0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAtMHgxLmZjODYzNzJhODQxNTQ5NDEwYzEyZGJlYzZmZTgwZGM1cC0yLAorICAgIC0weDEuMGExNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDYwCisgICAgMHgxLmJjYTI4ZjAwMDQzMTZiYWU4ZGY2YTIzNTJjY2ExMzgycC0xLAorICAgIDB4MS4wYjc3MGFwMQorICB9LAorICB7IC8vIEVudHJ5IDYxCisgICAgLTB4MS5iY2EyOGYwMDA0MzE2YmFlOGRmNmEyMzUyY2NhMTM4MnAtMSwKKyAgICAtMHgxLjBiNzcwYXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjIKKyAgICAtMHgxLmZhZGU5YWJkNjc1MjZkMzcxODlkZjAwNGI1MWQ5ZDVhcC0xLAorICAgIDB4MS4wZGRjcDk2CisgIH0sCisgIHsgLy8gRW50cnkgNjMKKyAgICAweDEuZmFkZTlhYmQ2NzUyNmQzNzE4OWRmMDA0YjUxZDlkNWFwLTEsCisgICAgLTB4MS4wZGRjcDk2CisgIH0sCisgIHsgLy8gRW50cnkgNjQKKyAgICAweDEuYmY2ODNjZmZmZmVjNmU4NjcyYTQ5ZjA4YWFlNDljNDZwLTEsCisgICAgMHgxLjEwMjRwMAorICB9LAorICB7IC8vIEVudHJ5IDY1CisgICAgLTB4MS5iZjY4M2NmZmZmZWM2ZTg2NzJhNDlmMDhhYWU0OWM0NnAtMSwKKyAgICAtMHgxLjEwMjRwMAorICB9LAorICB7IC8vIEVudHJ5IDY2CisgICAgLTB4MS5mMTQ0MDdmNjQ0MWU5MmY0ODBkMmUyMjg1OWQ2N2EzOXAtMSwKKyAgICAweDEuMTA5Y2M0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NworICAgIDB4MS5mMTQ0MDdmNjQ0MWU5MmY0ODBkMmUyMjg1OWQ2N2EzOXAtMSwKKyAgICAtMHgxLjEwOWNjNHA0CisgIH0sCisgIHsgLy8gRW50cnkgNjgKKyAgICAtMHgxLmZmN2U3Yjk5ODNhN2MyZWJlY2ZhYjFhMGIwYWYzYzRkcC0xLAorICAgIDB4MS4xM2JmYjJwNAorICB9LAorICB7IC8vIEVudHJ5IDY5CisgICAgMHgxLmZmN2U3Yjk5ODNhN2MyZWJlY2ZhYjFhMGIwYWYzYzRkcC0xLAorICAgIC0weDEuMTNiZmIycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MAorICAgIDB4MS5jNDk0MmIxZTllYzE3NWFhN2QzZmQ3NWYyZTM3ZTU2NnAtMSwKKyAgICAweDEuMTU5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzEKKyAgICAtMHgxLmM0OTQyYjFlOWVjMTc1YWE3ZDNmZDc1ZjJlMzdlNTY2cC0xLAorICAgIC0weDEuMTU5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzIKKyAgICAweDEuZmZmOGQzNjg2NmZhYWFjOGMxN2UxMjY3NDk4YmQxMzJwLTEsCisgICAgMHgxLjE4cDg1CisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAtMHgxLmZmZjhkMzY4NjZmYWFhYzhjMTdlMTI2NzQ5OGJkMTMycC0xLAorICAgIC0weDEuMThwODUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NAorICAgIDB4MS5jNzhkOTYyNTQ2Y2U1MWI4ODJjOTA1NGVjY2Q4MjliMXAtMSwKKyAgICAweDEuMThjOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzUKKyAgICAtMHgxLmM3OGQ5NjI1NDZjZTUxYjg4MmM5MDU0ZWNjZDgyOWIxcC0xLAorICAgIC0weDEuMThjOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAweDEuYzdjYjk5YTExMWYyNjUyN2I4MDU3MzQ5NjJmYjEyYTBwLTEsCisgICAgMHgxLjE5MGNwMAorICB9LAorICB7IC8vIEVudHJ5IDc3CisgICAgLTB4MS5jN2NiOTlhMTExZjI2NTI3YjgwNTczNDk2MmZiMTJhMHAtMSwKKyAgICAtMHgxLjE5MGNwMAorICB9LAorICB7IC8vIEVudHJ5IDc4CisgICAgLTB4MS43MDg5ODEwMDA1NTk0Mzg5OGFhNzA1MzAxN2VjYmE2OXAtMSwKKyAgICAweDEuMWU4ZjE0cDYyCisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAweDEuNzA4OTgxMDAwNTU5NDM4OThhYTcwNTMwMTdlY2JhNjlwLTEsCisgICAgLTB4MS4xZThmMTRwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MAorICAgIDB4MS5jZGVmMWU0ZWIzN2U5ZjIyNDk2NTZjMjdkNjJiMTg5NXAtMSwKKyAgICAweDEuMWZmOHAwCisgIH0sCisgIHsgLy8gRW50cnkgODEKKyAgICAtMHgxLmNkZWYxZTRlYjM3ZTlmMjI0OTY1NmMyN2Q2MmIxODk1cC0xLAorICAgIC0weDEuMWZmOHAwCisgIH0sCisgIHsgLy8gRW50cnkgODIKKyAgICAtMHgxLjVkZjBkZDYwZjEyMmJmNzlkMWRkY2YyOTVjMzRjYjBlcC0xLAorICAgIDB4MS4yMjQ0YTZwNTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIDB4MS41ZGYwZGQ2MGYxMjJiZjc5ZDFkZGNmMjk1YzM0Y2IwZXAtMSwKKyAgICAtMHgxLjIyNDRhNnA1OQorICB9LAorICB7IC8vIEVudHJ5IDg0CisgICAgLTB4MS5mYjhkZDc0ZjFiMDkxYTdiMGY5ZjlkNDRkYjg0NjYxY3AtMywKKyAgICAweDEuMjg3YWUwcDEzCisgIH0sCisgIHsgLy8gRW50cnkgODUKKyAgICAweDEuZmI4ZGQ3NGYxYjA5MWE3YjBmOWY5ZDQ0ZGI4NDY2MWNwLTMsCisgICAgLTB4MS4yODdhZTBwMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZjVjMGQyNjMwZWUwYTFmYjRlN2JwLTEsCisgICAgMHgxLjJkOTdjOHAyCisgIH0sCisgIHsgLy8gRW50cnkgODcKKyAgICAweDEuZmZmZmZmZmZmZmZmZjVjMGQyNjMwZWUwYTFmYjRlN2JwLTEsCisgICAgLTB4MS4yZDk3YzhwMgorICB9LAorICB7IC8vIEVudHJ5IDg4CisgICAgLTB4MS45OWJjNWI5NjFiMWFjMjk2ZGJlMTk4MGZkMmM4OTBhMHAtMjYsCisgICAgMHgxLjJkOTdjOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODkKKyAgICAweDEuOTliYzViOTYxYjFhYzI5NmRiZTE5ODBmZDJjODkwYTBwLTI2LAorICAgIC0weDEuMmQ5N2M4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MAorICAgIDB4MS5mZmQ1MTU4YjgxOTQ0ZmY2YjQ4MzNmZGYxZmFhOTI4MXAtMSwKKyAgICAweDEuMzJjZGM2cDE4CisgIH0sCisgIHsgLy8gRW50cnkgOTEKKyAgICAtMHgxLmZmZDUxNThiODE5NDRmZjZiNDgzM2ZkZjFmYWE5MjgxcC0xLAorICAgIC0weDEuMzJjZGM2cDE4CisgIH0sCisgIHsgLy8gRW50cnkgOTIKKyAgICAweDEuZTE5MWU3N2Y1OGY0NzliNTY0ZWM1MzhiNjcxZjk4YWZwLTE0LAorICAgIDB4MS4zN2VmZDhwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgOTMKKyAgICAtMHgxLmUxOTFlNzdmNThmNDc5YjU2NGVjNTM4YjY3MWY5OGFmcC0xNCwKKyAgICAtMHgxLjM3ZWZkOHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NAorICAgIDB4MS5mZmZlOTc0ZGNlYjEwZDQ4NzdhNzViYzc3ODcwZmZlYnAtMSwKKyAgICAweDEuMzhwMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NQorICAgIC0weDEuZmZmZTk3NGRjZWIxMGQ0ODc3YTc1YmM3Nzg3MGZmZWJwLTEsCisgICAgLTB4MS4zOHAxMQorICB9LAorICB7IC8vIEVudHJ5IDk2CisgICAgLTB4MS5iNjNmMmMzZjUzN2IxMGVlYzJmYmYzNDBlNDg5ODY0NHAtMTgsCisgICAgMHgxLjNkNzJiOHAxNQorICB9LAorICB7IC8vIEVudHJ5IDk3CisgICAgMHgxLmI2M2YyYzNmNTM3YjEwZWVjMmZiZjM0MGU0ODk4NjQ0cC0xOCwKKyAgICAtMHgxLjNkNzJiOHAxNQorICB9LAorICB7IC8vIEVudHJ5IDk4CisgICAgLTB4MS5lMDIwOGNmZjE3ZjkxODYyMTg5NDVhZjkyNTZkNzM2Y3AtMSwKKyAgICAweDEuNDQ0YjIwcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OQorICAgIDB4MS5lMDIwOGNmZjE3ZjkxODYyMTg5NDVhZjkyNTZkNzM2Y3AtMSwKKyAgICAtMHgxLjQ0NGIyMHA3CisgIH0sCisgIHsgLy8gRW50cnkgMTAwCisgICAgMHgxLmZmZmZmOTAwMmNmODdkYWRlNmY2MmViNzA5ZGMyYWE3cC0xLAorICAgIDB4MS40NmI3MWVwNAorICB9LAorICB7IC8vIEVudHJ5IDEwMQorICAgIC0weDEuZmZmZmY5MDAyY2Y4N2RhZGU2ZjYyZWI3MDlkYzJhYTdwLTEsCisgICAgLTB4MS40NmI3MWVwNAorICB9LAorICB7IC8vIEVudHJ5IDEwMgorICAgIDB4MS5jODc1NTgxYTc2MjIxMWRkNWNhYWY5YWJkZTVjZjY1NnAtMjEsCisgICAgMHgxLjRkMDI0MnA3CisgIH0sCisgIHsgLy8gRW50cnkgMTAzCisgICAgLTB4MS5jODc1NTgxYTc2MjIxMWRkNWNhYWY5YWJkZTVjZjY1NnAtMjEsCisgICAgLTB4MS40ZDAyNDJwNworICB9LAorICB7IC8vIEVudHJ5IDEwNAorICAgIC0weDEuNmE2Zjc5MDAwMDUzYTM4NDI1NjZmMWUwMThkNjM1OWZwLTEsCisgICAgMHgxLjUxMWU4ZXAyOAorICB9LAorICB7IC8vIEVudHJ5IDEwNQorICAgIDB4MS42YTZmNzkwMDAwNTNhMzg0MjU2NmYxZTAxOGQ2MzU5ZnAtMSwKKyAgICAtMHgxLjUxMWU4ZXAyOAorICB9LAorICB7IC8vIEVudHJ5IDEwNgorICAgIDB4MS5mZmZlOWZmYTZiNTY5ZGQ4YzcyMGQ2OGU4MGJkOWE2M3AtMSwKKyAgICAweDEuNTM1NGQwcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNworICAgIC0weDEuZmZmZTlmZmE2YjU2OWRkOGM3MjBkNjhlODBiZDlhNjNwLTEsCisgICAgLTB4MS41MzU0ZDBwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgMHgxLjNiNGQ1OGZmZmZmMjkxMjY0NjBmMjU4ZWM0NDIzZTlhcC0xLAorICAgIDB4MS41M2FkNWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkKKyAgICAtMHgxLjNiNGQ1OGZmZmZmMjkxMjY0NjBmMjU4ZWM0NDIzZTlhcC0xLAorICAgIC0weDEuNTNhZDVjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTEwCisgICAgLTB4MS5mZmZlYjc2MmU5M2VhZDVhYzcwZjg1MDY0ZmM3OWNmZnAtMSwKKyAgICAweDEuNjBwMworICB9LAorICB7IC8vIEVudHJ5IDExMQorICAgIDB4MS5mZmZlYjc2MmU5M2VhZDVhYzcwZjg1MDY0ZmM3OWNmZnAtMSwKKyAgICAtMHgxLjYwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIKKyAgICAweDEuMTc3MjM3N2ZmZTViMWY0MzZjMDE0OWUzMjg0NDZmNzRwLTIwLAorICAgIDB4MS42YzZjYmNwNgorICB9LAorICB7IC8vIEVudHJ5IDExMworICAgIC0weDEuMTc3MjM3N2ZmZTViMWY0MzZjMDE0OWUzMjg0NDZmNzRwLTIwLAorICAgIC0weDEuNmM2Y2JjcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQKKyAgICAweDEuNzdmZmZkZmZmZmZmZjc4ZDA1NzdkOTU1MjY2M2VhM2VwLTI2LAorICAgIDB4MS43N2ZmZmVwLTI2CisgIH0sCisgIHsgLy8gRW50cnkgMTE1CisgICAgLTB4MS43N2ZmZmRmZmZmZmZmNzhkMDU3N2Q5NTUyNjYzZWEzZXAtMjYsCisgICAgLTB4MS43N2ZmZmVwLTI2CisgIH0sCisgIHsgLy8gRW50cnkgMTE2CisgICAgLTB4MS5mZjA0OTc5Mzg1OTQ2ZDA1NjhjMTUzYmY5ZTEyNWZjY3AtMSwKKyAgICAweDEuNzdmZmZlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcKKyAgICAweDEuZmYwNDk3OTM4NTk0NmQwNTY4YzE1M2JmOWUxMjVmY2NwLTEsCisgICAgLTB4MS43N2ZmZmVwNAorICB9LAorICB7IC8vIEVudHJ5IDExOAorICAgIDB4MS5mZWI3YTk2YTU3N2Y3MTVmYTdhZDg3ODgyOTRjMDQ1YnAtMSwKKyAgICAweDEuN2ZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkKKyAgICAtMHgxLmZlYjdhOTZhNTc3ZjcxNWZhN2FkODc4ODI5NGMwNDVicC0xLAorICAgIC0weDEuN2ZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAKKyAgICAweDEuZmViN2ViNTQ2NTM1MDk2MTdmYWYzMjY4MzQ0NDM3ZmNwLTEsCisgICAgMHgxLjgwMDFkMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTIxCisgICAgLTB4MS5mZWI3ZWI1NDY1MzUwOTYxN2ZhZjMyNjgzNDQ0MzdmY3AtMSwKKyAgICAtMHgxLjgwMDFkMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTIyCisgICAgMHgxLmZmNjUzNTk5OGVhMDA0ZDQ4NzYzNTk3YjZkZjljZDY1cC0xLAorICAgIDB4MS44MDdmZmVwMTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMKKyAgICAtMHgxLmZmNjUzNTk5OGVhMDA0ZDQ4NzYzNTk3YjZkZjljZDY1cC0xLAorICAgIC0weDEuODA3ZmZlcDEzCisgIH0sCisgIHsgLy8gRW50cnkgMTI0CisgICAgMHgxLmZmNzZlZDlhMTkyZTlhMjEyNmJjZmMwZjMwNjI0MGQ0cC0xLAorICAgIDB4MS44NjZhNDJwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNQorICAgIC0weDEuZmY3NmVkOWExOTJlOWEyMTI2YmNmYzBmMzA2MjQwZDRwLTEsCisgICAgLTB4MS44NjZhNDJwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNgorICAgIDB4MS5hY2U4NDRmMWViNmMzMDc3Mjc3OTI5ZmY0YWRlM2Y0MXAtNSwKKyAgICAweDEuODg2NHAzNQorICB9LAorICB7IC8vIEVudHJ5IDEyNworICAgIC0weDEuYWNlODQ0ZjFlYjZjMzA3NzI3NzkyOWZmNGFkZTNmNDFwLTUsCisgICAgLTB4MS44ODY0cDM1CisgIH0sCisgIHsgLy8gRW50cnkgMTI4CisgICAgMHgxLmUwZDEwOGYxOTZmZDNjYmNiN2MyYzc2YWVlNzM4MjA1cC01LAorICAgIDB4MS44YTliNTZwMQorICB9LAorICB7IC8vIEVudHJ5IDEyOQorICAgIC0weDEuZTBkMTA4ZjE5NmZkM2NiY2I3YzJjNzZhZWU3MzgyMDVwLTUsCisgICAgLTB4MS44YTliNTZwMQorICB9LAorICB7IC8vIEVudHJ5IDEzMAorICAgIC0weDEuNmEwOWFmMDAwNmZlMGI0N2M4MWQ4Njk1YzAxN2E4ZGZwLTEsCisgICAgMHgxLjhlOTZlZXA5CisgIH0sCisgIHsgLy8gRW50cnkgMTMxCisgICAgMHgxLjZhMDlhZjAwMDZmZTBiNDdjODFkODY5NWMwMTdhOGRmcC0xLAorICAgIC0weDEuOGU5NmVlcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIKKyAgICAtMHgxLmRkNTlkY2VlY2YzZmJkMDE1ZTllMjliMzdhYWY1MTFhcC05LAorICAgIDB4MS45MWU0MGFwMgorICB9LAorICB7IC8vIEVudHJ5IDEzMworICAgIDB4MS5kZDU5ZGNlZWNmM2ZiZDAxNWU5ZTI5YjM3YWFmNTExYXAtOSwKKyAgICAtMHgxLjkxZTQwYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTM0CisgICAgLTB4MS5mYjczZjExODdlNTA1M2JhY2I3NTJiODljNmEzZGU1N3AtOSwKKyAgICAweDEuOTFmZmZlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzUKKyAgICAweDEuZmI3M2YxMTg3ZTUwNTNiYWNiNzUyYjg5YzZhM2RlNTdwLTksCisgICAgLTB4MS45MWZmZmVwMworICB9LAorICB7IC8vIEVudHJ5IDEzNgorICAgIC0weDEuNzc3YTVjZjcyY2VjNWZkNjE4OTZjYjRmNDBkMWRlNzlwLTI0LAorICAgIDB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDEzNworICAgIDB4MS43NzdhNWNmNzJjZWM1ZmQ2MTg5NmNiNGY0MGQxZGU3OXAtMjQsCisgICAgLTB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDEzOAorICAgIC0weDEuZmZmZmZmNzlkYjkxNzI2NWU2NzU1NzRiOGQ4M2ZhNmVwLTEsCisgICAgMHgxLjk0ZmQ3Y3AxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzkKKyAgICAweDEuZmZmZmZmNzlkYjkxNzI2NWU2NzU1NzRiOGQ4M2ZhNmVwLTEsCisgICAgLTB4MS45NGZkN2NwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTQwCisgICAgMHgxLmZmZmZmZmZmZmZkN2U4MzY3OGEzODMyOWMxZTA5M2I1cC0xLAorICAgIDB4MS45ODY4MzRwNgorICB9LAorICB7IC8vIEVudHJ5IDE0MQorICAgIC0weDEuZmZmZmZmZmZmZmQ3ZTgzNjc4YTM4MzI5YzFlMDkzYjVwLTEsCisgICAgLTB4MS45ODY4MzRwNgorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIDB4MS4xNmFlMjkxNDRkM2FlYjBlZjc0MWMzZTJhYmEzNDA3OHAtMjQsCisgICAgMHgxLjlhNDhkZXAxNworICB9LAorICB7IC8vIEVudHJ5IDE0MworICAgIC0weDEuMTZhZTI5MTQ0ZDNhZWIwZWY3NDFjM2UyYWJhMzQwNzhwLTI0LAorICAgIC0weDEuOWE0OGRlcDE3CisgIH0sCisgIHsgLy8gRW50cnkgMTQ0CisgICAgMHgxLmZmN2FkMzk4ZmQ1ODk1MjhiYjA3ZGIxZTBiZGQ0MGY1cC0xLAorICAgIDB4MS45ZGFhMzhwMAorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIC0weDEuZmY3YWQzOThmZDU4OTUyOGJiMDdkYjFlMGJkZDQwZjVwLTEsCisgICAgLTB4MS45ZGFhMzhwMAorICB9LAorICB7IC8vIEVudHJ5IDE0NgorICAgIDB4MS45ZGY1ZjEwMDAwMDAyZjRiNzQyMWRmZTllOTU1YjYwZHAtNCwKKyAgICAweDEuOWVhYjJlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTQ3CisgICAgLTB4MS45ZGY1ZjEwMDAwMDAyZjRiNzQyMWRmZTllOTU1YjYwZHAtNCwKKyAgICAtMHgxLjllYWIyZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDE0OAorICAgIDB4MS43NmRjZjcwMDAwNTNjNDI4ZTMwZWY5OWQ5Y2Y5MWFjY3AtMSwKKyAgICAweDEuYTQ5OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0OQorICAgIC0weDEuNzZkY2Y3MDAwMDUzYzQyOGUzMGVmOTlkOWNmOTFhY2NwLTEsCisgICAgLTB4MS5hNDk5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTUwCisgICAgMHgxLmE5ZDQ1MTAwMDBhMmE4MmMzOTFhOWIzNjE4NmVhZDY1cC01LAorICAgIDB4MS5hYTA1NzhwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTEKKyAgICAtMHgxLmE5ZDQ1MTAwMDBhMmE4MmMzOTFhOWIzNjE4NmVhZDY1cC01LAorICAgIC0weDEuYWEwNTc4cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTUyCisgICAgMHgxLjZhMDk3ZGNjOGIxMzU2NzEyZmMyMGY4MmM0Zjg3ZTRkcC0xLAorICAgIDB4MS5iNGFlNzBwNgorICB9LAorICB7IC8vIEVudHJ5IDE1MworICAgIC0weDEuNmEwOTdkY2M4YjEzNTY3MTJmYzIwZjgyYzRmODdlNGRwLTEsCisgICAgLTB4MS5iNGFlNzBwNgorICB9LAorICB7IC8vIEVudHJ5IDE1NAorICAgIDB4MS44NDk5MjZmZmZmZWI5NTg2MDI2MmE5OTc3MGE4YzljM3AtMSwKKyAgICAweDEuYjkzNmRhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTU1CisgICAgLTB4MS44NDk5MjZmZmZmZWI5NTg2MDI2MmE5OTc3MGE4YzljM3AtMSwKKyAgICAtMHgxLmI5MzZkYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIC0weDEuZGFjNDBlZjFlMDQwMzE1ZjA3NTE5YTk5YzIwMzRmZmZwLTUsCisgICAgMHgxLmJhMjc4NHA4MgorICB9LAorICB7IC8vIEVudHJ5IDE1NworICAgIDB4MS5kYWM0MGVmMWUwNDAzMTVmMDc1MTlhOTljMjAzNGZmZnAtNSwKKyAgICAtMHgxLmJhMjc4NHA4MgorICB9LAorICB7IC8vIEVudHJ5IDE1OAorICAgIDB4MS44MTA3NGIwMzQ2ZjA3MzkwMzk1YjRlZTJiNTBiM2Y5NHAtMTQsCisgICAgMHgxLmJkYjQ0YXAxMDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTkKKyAgICAtMHgxLjgxMDc0YjAzNDZmMDczOTAzOTViNGVlMmI1MGIzZjk0cC0xNCwKKyAgICAtMHgxLmJkYjQ0YXAxMDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjAKKyAgICAweDEuMjM1ZGViYjcyN2I5NWRhYWVjMTgzYmZhNGU3MjhiZTFwLTksCisgICAgMHgxLmJkYmVmZXAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjEKKyAgICAtMHgxLjIzNWRlYmI3MjdiOTVkYWFlYzE4M2JmYTRlNzI4YmUxcC05LAorICAgIC0weDEuYmRiZWZlcDExOQorICB9LAorICB7IC8vIEVudHJ5IDE2MgorICAgIC0weDEuOTk2NjNkYTk0ZGI1MjkwNzMwYjAyOTUxMzM3MGU4NjNwLTIzLAorICAgIDB4MS5iZWVlZWVwODAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjMKKyAgICAweDEuOTk2NjNkYTk0ZGI1MjkwNzMwYjAyOTUxMzM3MGU4NjNwLTIzLAorICAgIC0weDEuYmVlZWVlcDgwCisgIH0sCisgIHsgLy8gRW50cnkgMTY0CisgICAgLTB4MS42MmZhYTBmZmRjNTVhNGM1NGYxMjI5ZmMwMzAyYmQ1ZnAtMiwKKyAgICAweDEuYmY2ZmQwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjUKKyAgICAweDEuNjJmYWEwZmZkYzU1YTRjNTRmMTIyOWZjMDMwMmJkNWZwLTIsCisgICAgLTB4MS5iZjZmZDBwMQorICB9LAorICB7IC8vIEVudHJ5IDE2NgorICAgIC0weDEuYzZkNDQ0ZGU2YjkwYzdiOGI0MzQwMmVmNzQ5YTRjM2RwLTUsCisgICAgMHgxLmJmZmZmZXA0NQorICB9LAorICB7IC8vIEVudHJ5IDE2NworICAgIDB4MS5jNmQ0NDRkZTZiOTBjN2I4YjQzNDAyZWY3NDlhNGMzZHAtNSwKKyAgICAtMHgxLmJmZmZmZXA0NQorICB9LAorICB7IC8vIEVudHJ5IDE2OAorICAgIDB4MS5mZmZmZmZmZmZmZmZhM2M3NjU3Yjg1ZTViNDRiYmQ0NHAtMSwKKyAgICAweDEuYzQ2M2FjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjkKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmEzYzc2NTdiODVlNWI0NGJiZDQ0cC0xLAorICAgIC0weDEuYzQ2M2FjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzAKKyAgICAweDEuOTEzNjQ4ZmZmZjllMjM3ODdmNWRkYjc1ZGM1NWVlYzhwLTEsCisgICAgMHgxLmNkMGEwY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDE3MQorICAgIC0weDEuOTEzNjQ4ZmZmZjllMjM3ODdmNWRkYjc1ZGM1NWVlYzhwLTEsCisgICAgLTB4MS5jZDBhMGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzIKKyAgICAtMHgxLmExZDQ3Y2ZkMjgyNWYxYzNlMjgzNWU5NDNiOTY2OWVmcC01LAorICAgIDB4MS5kNDE4MThwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzMKKyAgICAweDEuYTFkNDdjZmQyODI1ZjFjM2UyODM1ZTk0M2I5NjY5ZWZwLTUsCisgICAgLTB4MS5kNDE4MThwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzQKKyAgICAweDEuNmEyMmRiMDAwMDM2YTk1OTJkYjcyMmUyZDliZTQ4NjlwLTEsCisgICAgMHgxLmU2Mjk0NHA4CisgIH0sCisgIHsgLy8gRW50cnkgMTc1CisgICAgLTB4MS42YTIyZGIwMDAwMzZhOTU5MmRiNzIyZTJkOWJlNDg2OXAtMSwKKyAgICAtMHgxLmU2Mjk0NHA4CisgIH0sCisgIHsgLy8gRW50cnkgMTc2CisgICAgMHgxLmQ0ZGU4YWZmZmZmZmQ5NmY4M2JhNDQyZmRmMmY3MTAxcC0yLAorICAgIDB4MS5lNzA2MWVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzcKKyAgICAtMHgxLmQ0ZGU4YWZmZmZmZmQ5NmY4M2JhNDQyZmRmMmY3MTAxcC0yLAorICAgIC0weDEuZTcwNjFlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTc4CisgICAgLTB4MS5lM2NlMDRmMWI5NGUxZDgyZjAwMDFjYjk5ZmVkOTI3NXAtNSwKKyAgICAweDEuZTdmZmZlcDk1CisgIH0sCisgIHsgLy8gRW50cnkgMTc5CisgICAgMHgxLmUzY2UwNGYxYjk0ZTFkODJmMDAwMWNiOTlmZWQ5Mjc1cC01LAorICAgIC0weDEuZTdmZmZlcDk1CisgIH0sCisgIHsgLy8gRW50cnkgMTgwCisgICAgMHgxLmU5NzM2MmZmZmY1ZDQ2ZTFlOThjOGE4Yzk0NDc4YTQ0cC01LAorICAgIDB4MS5lOWJlMGVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAtMHgxLmU5NzM2MmZmZmY1ZDQ2ZTFlOThjOGE4Yzk0NDc4YTQ0cC01LAorICAgIC0weDEuZTliZTBlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTgyCisgICAgLTB4MS41Nzk3NWNmZWZkN2U3MDVmM2ViMDNhOWU4ZTQ4YTE4Y3AtMSwKKyAgICAweDEuZWIxZGJlcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTgzCisgICAgMHgxLjU3OTc1Y2ZlZmQ3ZTcwNWYzZWIwM2E5ZThlNDhhMThjcC0xLAorICAgIC0weDEuZWIxZGJlcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTg0CisgICAgLTB4MS42YTEwMTJlNGI2OWIwODZjM2RjMDQyN2FiYTgwYmM5NnAtMSwKKyAgICAweDEuZWIxZThhcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTg1CisgICAgMHgxLjZhMTAxMmU0YjY5YjA4NmMzZGMwNDI3YWJhODBiYzk2cC0xLAorICAgIC0weDEuZWIxZThhcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTg2CisgICAgLTB4MS45ZjQyZTRmNDY3Njk2YWQzNmE3MGFjOGI3MGUwY2QzMnAtMSwKKyAgICAweDEuZWZmYzhhcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTg3CisgICAgMHgxLjlmNDJlNGY0Njc2OTZhZDM2YTcwYWM4YjcwZTBjZDMycC0xLAorICAgIC0weDEuZWZmYzhhcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTg4CisgICAgMHgxLmNiYWRiOGVmOGYzZTM1OGQyYjhiZTQ5M2MxMWI1N2IxcC02LAorICAgIDB4MS5mNWMxYzRwMworICB9LAorICB7IC8vIEVudHJ5IDE4OQorICAgIC0weDEuY2JhZGI4ZWY4ZjNlMzU4ZDJiOGJlNDkzYzExYjU3YjFwLTYsCisgICAgLTB4MS5mNWMxYzRwMworICB9LAorICB7IC8vIEVudHJ5IDE5MAorICAgIDB4MS41YWVlMmNmZmYwODdlNTlkZmNkODU2Y2JmZTQ1NDRkY3AtMiwKKyAgICAweDEuZjdmZmZlcDExMQorICB9LAorICB7IC8vIEVudHJ5IDE5MQorICAgIC0weDEuNWFlZTJjZmZmMDg3ZTU5ZGZjZDg1NmNiZmU0NTQ0ZGNwLTIsCisgICAgLTB4MS5mN2ZmZmVwMTExCisgIH0sCisgIHsgLy8gRW50cnkgMTkyCisgICAgMHgxLjI2ZGI3ZDAwYmIwNjc0M2ZlZTU4MWE4ODhlMjM3OGY4cC0xLAorICAgIDB4MS5mOTI1MThwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTMKKyAgICAtMHgxLjI2ZGI3ZDAwYmIwNjc0M2ZlZTU4MWE4ODhlMjM3OGY4cC0xLAorICAgIC0weDEuZjkyNTE4cDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTk0CisgICAgMHgxLmZmZmZmZmZmZmZmZmZlYmNjZjc4YTQzMmE2Nzg1OGJicC0xLAorICAgIDB4MS5mOWNiZTJwNworICB9LAorICB7IC8vIEVudHJ5IDE5NQorICAgIC0weDEuZmZmZmZmZmZmZmZmZmViY2NmNzhhNDMyYTY3ODU4YmJwLTEsCisgICAgLTB4MS5mOWNiZTJwNworICB9LAorICB7IC8vIEVudHJ5IDE5NgorICAgIC0weDEuMWZhM2JiOWEwN2U3N2ZkNjY3ZjQ5MzYyMmM5MDI5ZmZwLTI3LAorICAgIDB4MS5mOWNiZTJwOAorICB9LAorICB7IC8vIEVudHJ5IDE5NworICAgIDB4MS4xZmEzYmI5YTA3ZTc3ZmQ2NjdmNDkzNjIyYzkwMjlmZnAtMjcsCisgICAgLTB4MS5mOWNiZTJwOAorICB9LAorICB7IC8vIEVudHJ5IDE5OAorICAgIDB4MS45ZWMyOWFmMWUxNWRkNjdmMTdlMzIwNDdkOWZmOGRiN3AtMSwKKyAgICAweDEuZmFkMTYwcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTk5CisgICAgLTB4MS45ZWMyOWFmMWUxNWRkNjdmMTdlMzIwNDdkOWZmOGRiN3AtMSwKKyAgICAtMHgxLmZhZDE2MHAyNAorICB9LAorICB7IC8vIEVudHJ5IDIwMAorICAgIDB4MS5mYmMyNzgwZjRiZjhiYzI0ZDNmY2NjMTdmOWU3N2YzMnAtMSwKKyAgICAweDEuZmVlNWJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDEKKyAgICAtMHgxLmZiYzI3ODBmNGJmOGJjMjRkM2ZjY2MxN2Y5ZTc3ZjMycC0xLAorICAgIC0weDEuZmVlNWJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDIKKyAgICAweDEuYThkN2MxMDAwNWFkYThmN2Q0OTEyYmY2MDNhMzE1ZmVwLTEsCisgICAgMHgxLmZmMGNhZXAxMAorICB9LAorICB7IC8vIEVudHJ5IDIwMworICAgIC0weDEuYThkN2MxMDAwNWFkYThmN2Q0OTEyYmY2MDNhMzE1ZmVwLTEsCisgICAgLTB4MS5mZjBjYWVwMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDQKKyAgICAtMHgxLjU2YjAyZDAwMDQ1ZGExNDZlODU1ZDM3NzBjOTY0NmZhcC0xLAorICAgIDB4MS5mZjg0MDZwODAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDUKKyAgICAweDEuNTZiMDJkMDAwNDVkYTE0NmU4NTVkMzc3MGM5NjQ2ZmFwLTEsCisgICAgLTB4MS5mZjg0MDZwODAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDYKKyAgICAweDEuYzAyNzQ5ZmY0YzRjOGZjYmI0NzE2MTA4ODRkOGUwYmRwLTMsCisgICAgMHgxLmZmOWZmZXA0MAorICB9LAorICB7IC8vIEVudHJ5IDIwNworICAgIC0weDEuYzAyNzQ5ZmY0YzRjOGZjYmI0NzE2MTA4ODRkOGUwYmRwLTMsCisgICAgLTB4MS5mZjlmZmVwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDgKKyAgICAtMHgxLjM4OGU3MTAwNTgzNDJhYTViNjlhZmUzZTIwOTBhNDU3cC0xLAorICAgIDB4MS5mZmJkNThwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDkKKyAgICAweDEuMzg4ZTcxMDA1ODM0MmFhNWI2OWFmZTNlMjA5MGE0NTdwLTEsCisgICAgLTB4MS5mZmJkNThwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTAKKyAgICAweDEuOWU4MDVhZWYzMjgyZDRjZWQ0MDI3MjcwMmYxNzRmNTNwLTYsCisgICAgMHgxLmZmZGQ3ZXA3MgorICB9LAorICB7IC8vIEVudHJ5IDIxMQorICAgIC0weDEuOWU4MDVhZWYzMjgyZDRjZWQ0MDI3MjcwMmYxNzRmNTNwLTYsCisgICAgLTB4MS5mZmRkN2VwNzIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAtMHgxLmZiM2FlZjAxNmI4Y2U2NjM3MGFiNjE5NzRlOGVlMGIycC02LAorICAgIDB4MS5mZmRmZmVwOTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTMKKyAgICAweDEuZmIzYWVmMDE2YjhjZTY2MzcwYWI2MTk3NGU4ZWUwYjJwLTYsCisgICAgLTB4MS5mZmRmZmVwOTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTQKKyAgICAtMHgxLmU0MzE0OGRhNTNmNDIyMzU2ZWRkM2JkYmFlZjNiMmZhcC0zLAorICAgIDB4MS5mZmY3N2VwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTUKKyAgICAweDEuZTQzMTQ4ZGE1M2Y0MjIzNTZlZGQzYmRiYWVmM2IyZmFwLTMsCisgICAgLTB4MS5mZmY3N2VwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTYKKyAgICAweDEuZDZlMTg2NDc2NGQyNGI0ZGUxOGNiNGMxOTAzYTc5NTdwLTEsCisgICAgMHgxLmZmZmUzZXA1CisgIH0sCisgIHsgLy8gRW50cnkgMjE3CisgICAgLTB4MS5kNmUxODY0NzY0ZDI0YjRkZTE4Y2I0YzE5MDNhNzk1N3AtMSwKKyAgICAtMHgxLmZmZmUzZXA1CisgIH0sCisgIHsgLy8gRW50cnkgMjE4CisgICAgLTB4MS5mZmZmNDljNTJmNTg1ZTY3MmQ3MTg1NDQ4ZDQ2ZTk3N3AtMSwKKyAgICAweDEuZmZmZTNlcDQxCisgIH0sCisgIHsgLy8gRW50cnkgMjE5CisgICAgMHgxLmZmZmY0OWM1MmY1ODVlNjcyZDcxODU0NDhkNDZlOTc3cC0xLAorICAgIC0weDEuZmZmZTNlcDQxCisgIH0sCisgIHsgLy8gRW50cnkgMjIwCisgICAgMHgxLmFmYzZhOTljYmFkZTgzYjZiZTkyYjJjYTQ1MTY3OTg4cC01LAorICAgIDB4MS5mZmZlM2VwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjEKKyAgICAtMHgxLmFmYzZhOTljYmFkZTgzYjZiZTkyYjJjYTQ1MTY3OTg4cC01LAorICAgIC0weDEuZmZmZTNlcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgMjIyCisgICAgLTB4MS41M2EyOWU1NGI0YjE0MjgzMGRjNzk2YzllZDVmYzU5YnAtOSwKKyAgICAweDEuZmZmZTdlcDEwMworICB9LAorICB7IC8vIEVudHJ5IDIyMworICAgIDB4MS41M2EyOWU1NGI0YjE0MjgzMGRjNzk2YzllZDVmYzU5YnAtOSwKKyAgICAtMHgxLmZmZmU3ZXAxMDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjQKKyAgICAtMHgxLjQ3ZTg5ZmQ1MDQ3YzRjOTRiNWMwZjYxZTM3NWYyODQ5cC0xMSwKKyAgICAweDEuZmZmZTdlcDEyNgorICB9LAorICB7IC8vIEVudHJ5IDIyNQorICAgIDB4MS40N2U4OWZkNTA0N2M0Yzk0YjVjMGY2MWUzNzVmMjg0OXAtMTEsCisgICAgLTB4MS5mZmZlN2VwMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjI2CisgICAgMHgxLmE0MjU2YzkwYzM3NDEwY2U5NTdjMGIyNTAxOTM3NjE4cC04LAorICAgIDB4MS5mZmZmOGVwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjcKKyAgICAtMHgxLmE0MjU2YzkwYzM3NDEwY2U5NTdjMGIyNTAxOTM3NjE4cC04LAorICAgIC0weDEuZmZmZjhlcDQwCisgIH0sCisgIHsgLy8gRW50cnkgMjI4CisgICAgLTB4MS5kMmJkODRmNTAxOGY0MGM5NGM3ZjZlNDU1MmVmOGU5MXAtMywKKyAgICAweDEuZmZmZmE0cDIzCisgIH0sCisgIHsgLy8gRW50cnkgMjI5CisgICAgMHgxLmQyYmQ4NGY1MDE4ZjQwYzk0YzdmNmU0NTUyZWY4ZTkxcC0zLAorICAgIC0weDEuZmZmZmE0cDIzCisgIH0sCisgIHsgLy8gRW50cnkgMjMwCisgICAgMHgxLmZmYWE4Y2ZmZDM4MWViZTdiMmQ2YTNlNjliZGEzODg3cC01LAorICAgIDB4MS5mZmZmZGVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzEKKyAgICAtMHgxLmZmYWE4Y2ZmZDM4MWViZTdiMmQ2YTNlNjliZGEzODg3cC01LAorICAgIC0weDEuZmZmZmRlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjMyCisgICAgMHgxLmZhOGQzY2EyM2JlMmE4NGQzN2YwYzA0ZTk3YmFiNWU1cC0xLAorICAgIDB4MS5mZmZmZjBwMgorICB9LAorICB7IC8vIEVudHJ5IDIzMworICAgIC0weDEuZmE4ZDNjYTIzYmUyYTg0ZDM3ZjBjMDRlOTdiYWI1ZTVwLTEsCisgICAgLTB4MS5mZmZmZjBwMgorICB9LAorICB7IC8vIEVudHJ5IDIzNAorICAgIC0weDEuZmY5NzhlY2QzMjBhZDJkNzBjMjAwODI0ZTQwMTA4NDNwLTEsCisgICAgMHgxLmZmZmZmMHA3CisgIH0sCisgIHsgLy8gRW50cnkgMjM1CisgICAgMHgxLmZmOTc4ZWNkMzIwYWQyZDcwYzIwMDgyNGU0MDEwODQzcC0xLAorICAgIC0weDEuZmZmZmYwcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzYKKyAgICAweDEuZDE4Zjc2ZmZjNmU0YmEwYTMxMzRlNWJlMjFiNWJjOGZwLTEsCisgICAgMHgxLmZmZmZmNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjM3CisgICAgLTB4MS5kMThmNzZmZmM2ZTRiYTBhMzEzNGU1YmUyMWI1YmM4ZnAtMSwKKyAgICAtMHgxLmZmZmZmNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjM4CisgICAgMHgxLmVhZWU4MjAwYjhkYmE1MTM4ZjlhZGE0MmEyMmFiMzE5cC0yLAorICAgIDB4MS5mZmZmZmFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzkKKyAgICAtMHgxLmVhZWU4MjAwYjhkYmE1MTM4ZjlhZGE0MmEyMmFiMzE5cC0yLAorICAgIC0weDEuZmZmZmZhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMjQwCisgICAgLTB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDI0MQorICAgIDB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDIKKyAgICAtMC4wZiwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMjQzCisgICAgMC4wZiwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDQKKyAgICAwLjAsCisgICAgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgMjQ1CisgICAgMC4wZiwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAtMC4wZiwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMjQ3CisgICAgLTB4MS4wMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI2LAorICAgIC0weDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDgKKyAgICAweDEuMDAwMDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNiwKKyAgICAweDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDkKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI1MAorICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI1MQorICAgIC0weDEuZmZmZmZiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAtMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjUyCisgICAgMHgxLmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjUzCisgICAgMHgxLmZmZmZmYmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgLTB4MS5mZmZmZmJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIC0weDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI1NworICAgIDB4MS4wMDAwMDFmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI2LAorICAgIDB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI1OAorICAgIC0weDEuMDAwMDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNiwKKyAgICAtMHgxLjAwMDAwMnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjU5CisgICAgMHgxLjk5OTk5OWQ0NGYzMDU4Yzc4OTAxNGI3ZDBlMjJmZWMzcC0xMywKKyAgICAweDEuOTk5OTlhcC0xMworICB9LAorICB7IC8vIEVudHJ5IDI2MAorICAgIC0weDEuOTk5OTk5ZDQ0ZjMwNThjNzg5MDE0YjdkMGUyMmZlYzNwLTEzLAorICAgIC0weDEuOTk5OTlhcC0xMworICB9LAorICB7IC8vIEVudHJ5IDI2MQorICAgIDB4MS45OTk5OTk1MTNjYzE3M2U1MWJiOTk1NWIwNjZmMWRiOHAtMTIsCisgICAgMHgxLjk5OTk5YXAtMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAtMHgxLjk5OTk5OTUxM2NjMTczZTUxYmI5OTU1YjA2NmYxZGI4cC0xMiwKKyAgICAtMHgxLjk5OTk5YXAtMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjMKKyAgICAweDEuMzMzMzMyZDkxNjg1MzIxZTVmYzM5N2QyMGE1YWYxZTZwLTExLAorICAgIDB4MS4zMzMzMzRwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjY0CisgICAgLTB4MS4zMzMzMzJkOTE2ODUzMjFlNWZjMzk3ZDIwYTVhZjFlNnAtMTEsCisgICAgLTB4MS4zMzMzMzRwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjY1CisgICAgMHgxLjk5OTk5NzQ0ZjMwNmRjMDNlOWVmNzA4OTdmNzgyOTllcC0xMSwKKyAgICAweDEuOTk5OTlhcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDI2NgorICAgIC0weDEuOTk5OTk3NDRmMzA2ZGMwM2U5ZWY3MDg5N2Y3ODI5OWVwLTExLAorICAgIC0weDEuOTk5OTlhcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIDB4MS5mZmZmZmFhYWFhYWVlZWVlZWQ0ZWQ0ZWRhYjRjN2JkNnAtMTEsCisgICAgMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjgKKyAgICAtMHgxLmZmZmZmYWFhYWFhZWVlZWVlZDRlZDRlZGFiNGM3YmQ2cC0xMSwKKyAgICAtMHgxLnAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjkKKyAgICAweDEuMzMzMzJmNjQ1YTE4YzNiMGNjZmMwYTNjZjdiMmU5MWJwLTEwLAorICAgIDB4MS4zMzMzMzRwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjcwCisgICAgLTB4MS4zMzMzMmY2NDVhMThjM2IwY2NmYzBhM2NmN2IyZTkxYnAtMTAsCisgICAgLTB4MS4zMzMzMzRwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjcxCisgICAgMHgxLjY2NjY2MGFlYzMzMDgyMWM3YTEwMGNmNDg4YzM4MGVicC0xMCwKKyAgICAweDEuNjY2NjY4cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI3MgorICAgIC0weDEuNjY2NjYwYWVjMzMwODIxYzdhMTAwY2Y0ODhjMzgwZWJwLTEwLAorICAgIC0weDEuNjY2NjY4cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI3MworICAgIDB4MS45OTk5OTExM2NjMDM0MTQ0ZmRiZGM4YTFkYzcxMzI1M3AtMTAsCisgICAgMHgxLjk5OTk5Y3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzQKKyAgICAtMHgxLjk5OTk5MTEzY2MwMzQxNDRmZGJkYzhhMWRjNzEzMjUzcC0xMCwKKyAgICAtMHgxLjk5OTk5Y3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzUKKyAgICAweDEuY2NjY2JjNzJiMDVkZDA5NTFhOWM1ZTY1NTYwYzU2ZTNwLTEwLAorICAgIDB4MS5jY2NjY2NwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjc2CisgICAgLTB4MS5jY2NjYmM3MmIwNWRkMDk1MWE5YzVlNjU1NjBjNTZlM3AtMTAsCisgICAgLTB4MS5jY2NjY2NwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgMHgxLjA2NjVhZTM2MTViNWI3ZGU1Mjc5ODA2NGRmYzU5YjI5cC03LAorICAgIDB4MS4wNjY2NjZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzgKKyAgICAtMHgxLjA2NjVhZTM2MTViNWI3ZGU1Mjc5ODA2NGRmYzU5YjI5cC03LAorICAgIC0weDEuMDY2NjY2cC03CisgIH0sCisgIHsgLy8gRW50cnkgMjc5CisgICAgMHgxLmNjYzhlOGFlOTI1ODZkOGQ2NmI2YWQwYWVkY2IwZDk0cC03LAorICAgIDB4MS5jY2NjY2NwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAtMHgxLmNjYzhlOGFlOTI1ODZkOGQ2NmI2YWQwYWVkY2IwZDk0cC03LAorICAgIC0weDEuY2NjY2NjcC03CisgIH0sCisgIHsgLy8gRW50cnkgMjgxCisgICAgMHgxLjQ5OTNlNzBmN2IxN2MxMGFmOWY5N2ZjN2IzM2I4MjJicC02LAorICAgIDB4MS40OTk5OThwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAtMHgxLjQ5OTNlNzBmN2IxN2MxMGFmOWY5N2ZjN2IzM2I4MjJicC02LAorICAgIC0weDEuNDk5OTk4cC02CisgIH0sCisgIHsgLy8gRW50cnkgMjgzCisgICAgMHgxLmFjYzA0M2Y4YjJkODlhZDUxNDNjMDMwZTk3NjZmYzExcC02LAorICAgIDB4MS5hY2NjY2NwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODQKKyAgICAtMHgxLmFjYzA0M2Y4YjJkODlhZDUxNDNjMDMwZTk3NjZmYzExcC02LAorICAgIC0weDEuYWNjY2NjcC02CisgIH0sCisgIHsgLy8gRW50cnkgMjg1CisgICAgMHgxLjA3ZjQ0ZDY3Y2Y0MWFmYmMwYzk1MTA4Yjk5ZjkxYjAxcC01LAorICAgIDB4MS4wOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDI4NgorICAgIC0weDEuMDdmNDRkNjdjZjQxYWZiYzBjOTUxMDhiOTlmOTFiMDFwLTUsCisgICAgLTB4MS4wOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDI4NworICAgIDB4MS4zOTg1ZmVhZDQ0ZmEyYjg1MWU2NTFhY2JhMzY5ZDc2OXAtNSwKKyAgICAweDEuMzk5OTlhcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjg4CisgICAgLTB4MS4zOTg1ZmVhZDQ0ZmEyYjg1MWU2NTFhY2JhMzY5ZDc2OXAtNSwKKyAgICAtMHgxLjM5OTk5YXAtNQorICB9LAorICB7IC8vIEVudHJ5IDI4OQorICAgIDB4MS42YjE0YmViNWQ0MGQ3NDUwOTYyNDdlNTliNjIyODI4YnAtNSwKKyAgICAweDEuNmIzMzM0cC01CisgIH0sCisgIHsgLy8gRW50cnkgMjkwCisgICAgLTB4MS42YjE0YmViNWQ0MGQ3NDUwOTYyNDdlNTliNjIyODI4YnAtNSwKKyAgICAtMHgxLjZiMzMzNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDI5MQorICAgIDB4MS45Y2EwMTY3MWE3OTk1ZmM5N2NlYmQ2OTcyOWNjNDMwOXAtNSwKKyAgICAweDEuOWNjY2NlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMjkyCisgICAgLTB4MS45Y2EwMTY3MWE3OTk1ZmM5N2NlYmQ2OTcyOWNjNDMwOXAtNSwKKyAgICAtMHgxLjljY2NjZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDI5MworICAgIDB4MS5jZTI3OGNkOWViMmNiZDBjNmE0ZTEyNzlmNjkwZTg1NnAtNSwKKyAgICAweDEuY2U2NjY2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMjk0CisgICAgLTB4MS5jZTI3OGNkOWViMmNiZDBjNmE0ZTEyNzlmNjkwZTg1NnAtNSwKKyAgICAtMHgxLmNlNjY2NnAtNQorICB9LAorICB7IC8vIEVudHJ5IDI5NQorICAgIDB4MS40M2MxZTk5NzIzOTFhYThlY2Q4YTljY2JhOTA3OTIwYXAtMSwKKyAgICAweDEuNWU3ZmM0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjk2CisgICAgLTB4MS40M2MxZTk5NzIzOTFhYThlY2Q4YTljY2JhOTA3OTIwYXAtMSwKKyAgICAtMHgxLjVlN2ZjNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI5NworICAgIDB4MS5lZTNkNmJiMjFjNjRiMjM4MmVmY2ZmMGNkZjMwY2UwYnAtMSwKKyAgICAweDEuNGU3ZmM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTgKKyAgICAtMHgxLmVlM2Q2YmIyMWM2NGIyMzgyZWZjZmYwY2RmMzBjZTBicC0xLAorICAgIC0weDEuNGU3ZmM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTkKKyAgICAweDEuZGY4ZTIzMjNlNGJmMWE1MzhhMTAwZWMxYmYzNDk0YTlwLTEsCisgICAgMHgxLmVkYmZhNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzAwCisgICAgLTB4MS5kZjhlMjMyM2U0YmYxYTUzOGExMDBlYzFiZjM0OTRhOXAtMSwKKyAgICAtMHgxLmVkYmZhNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzAxCisgICAgMHgxLjFkMzQ3YWEwMmZlYjNiYjE3NTBkMjU1MDk0MzVkYTg4cC0xLAorICAgIDB4MS40NjdmYzRwMQorICB9LAorICB7IC8vIEVudHJ5IDMwMgorICAgIC0weDEuMWQzNDdhYTAyZmViM2JiMTc1MGQyNTUwOTQzNWRhODhwLTEsCisgICAgLTB4MS40NjdmYzRwMQorICB9LAorICB7IC8vIEVudHJ5IDMwMworICAgIC0weDEuZmZlYTA4ZTFjOTdmNGM0ZGUwMTk2MWNjM2U3YjA0ZGNwLTYsCisgICAgMHgxLjk2MWZiNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzA0CisgICAgMHgxLmZmZWEwOGUxYzk3ZjRjNGRlMDE5NjFjYzNlN2IwNGRjcC02LAorICAgIC0weDEuOTYxZmI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDUKKyAgICAtMHgxLjM3MzRjYmNlZDljMGY0ODRlNWY3NjJlMDAyMTZlNjIwcC0xLAorICAgIDB4MS5lNWJmYTRwMQorICB9LAorICB7IC8vIEVudHJ5IDMwNgorICAgIDB4MS4zNzM0Y2JjZWQ5YzBmNDg0ZTVmNzYyZTAwMjE2ZTYyMHAtMSwKKyAgICAtMHgxLmU1YmZhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgLTB4MS5lOWQyNTkyYmVjMTBjM2FjYjE1YzU4NTIyMzlhMmFhOHAtMSwKKyAgICAweDEuMWFhZmNhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICAweDEuZTlkMjU5MmJlYzEwYzNhY2IxNWM1ODUyMjM5YTJhYThwLTEsCisgICAgLTB4MS4xYWFmY2FwMgorICB9LAorICB7IC8vIEVudHJ5IDMwOQorICAgIC0weDEuZTRlY2UyMDhkMGM0OTEzYWIwMTljYWIwY2U5Yzc4NWVwLTEsCisgICAgMHgxLjQyN2ZjMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzEwCisgICAgMHgxLmU0ZWNlMjA4ZDBjNDkxM2FiMDE5Y2FiMGNlOWM3ODVlcC0xLAorICAgIC0weDEuNDI3ZmMycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTEKKyAgICAtMHgxLjJhNWEwMmQzOTJiNTRmNjQxYTBkODhiZDRhYzZjMmUxcC0xLAorICAgIDB4MS42YTRmYmFwMgorICB9LAorICB7IC8vIEVudHJ5IDMxMgorICAgIDB4MS4yYTVhMDJkMzkyYjU0ZjY0MWEwZDg4YmQ0YWM2YzJlMXAtMSwKKyAgICAtMHgxLjZhNGZiYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzEzCisgICAgLTB4MS4yNjMxMjNkZjIyZDEzZWQzMjljNjY1YzgzYzBlNzFlOHAtMSwKKyAgICAweDEuNmFmMmYwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTQKKyAgICAweDEuMjYzMTIzZGYyMmQxM2VkMzI5YzY2NWM4M2MwZTcxZThwLTEsCisgICAgLTB4MS42YWYyZjBwMgorICB9LAorICB7IC8vIEVudHJ5IDMxNQorICAgIC0weDEuZTE4ZTY3YjUwOGZmYzllNDJmNmM5ZTcyZjhlNTQ1ZjNwLTEsCisgICAgMHgxLjQzYzYyYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzE2CisgICAgMHgxLmUxOGU2N2I1MDhmZmM5ZTQyZjZjOWU3MmY4ZTU0NWYzcC0xLAorICAgIC0weDEuNDNjNjJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTcKKyAgICAtMHgxLmVlMGU4MGVjOWQxNTYyYzE3YTZjZjYwOGFmOWIwZWQ0cC0xLAorICAgIDB4MS4xYzk5NjRwMgorICB9LAorICB7IC8vIEVudHJ5IDMxOAorICAgIDB4MS5lZTBlODBlYzlkMTU2MmMxN2E2Y2Y2MDhhZjliMGVkNHAtMSwKKyAgICAtMHgxLjFjOTk2NHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzE5CisgICAgLTB4MS40NzI3Njg2MzdlYTg4NjZhNjUyMDk4YTQzYWE2ODhhNnAtMSwKKyAgICAweDEuZWFkOTNjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjAKKyAgICAweDEuNDcyNzY4NjM3ZWE4ODY2YTY1MjA5OGE0M2FhNjg4YTZwLTEsCisgICAgLTB4MS5lYWQ5M2NwMQorICB9LAorICB7IC8vIEVudHJ5IDMyMQorICAgIC0weDEuNGJhMjRmNjMyNWYyMTQyMGU3YzQ4ZDRmOTFlMjgwNjRwLTQsCisgICAgMHgxLjljN2ZiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzIyCisgICAgMHgxLjRiYTI0ZjYzMjVmMjE0MjBlN2M0OGQ0ZjkxZTI4MDY0cC00LAorICAgIC0weDEuOWM3ZmIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjMKKyAgICAweDEuMDM0YzY0MzI5NTE1M2FhZmZlNWQ5YTBmMjllOTI4NDRwLTEsCisgICAgMHgxLjRlMjYyNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzI0CisgICAgLTB4MS4wMzRjNjQzMjk1MTUzYWFmZmU1ZDlhMGYyOWU5Mjg0NHAtMSwKKyAgICAtMHgxLjRlMjYyNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzI1CisgICAgMHgxLmQxZTRkOTZlYWM5MTc1NzRiOTQ4ZTRlYTllMzdiMzZkcC0xLAorICAgIDB4MS5mZjk5MzJwMAorICB9LAorICB7IC8vIEVudHJ5IDMyNgorICAgIC0weDEuZDFlNGQ5NmVhYzkxNzU3NGI5NDhlNGVhOWUzN2IzNmRwLTEsCisgICAgLTB4MS5mZjk5MzJwMAorICB9LAorICB7IC8vIEVudHJ5IDMyNworICAgIDB4MS5mNzUwMWUwMDJiY2FmYjg5N2Y5MzE5MzFkM2E1N2FmZHAtMSwKKyAgICAweDEuNjJlNjFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjgKKyAgICAtMHgxLmY3NTAxZTAwMmJjYWZiODk3ZjkzMTkzMWQzYTU3YWZkcC0xLAorICAgIC0weDEuNjJlNjFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjkKKyAgICAweDEuNjVmN2Q2NmVmNjU5MWNmYzUxYWIyOWRjMjA4NmQzZTdwLTEsCisgICAgMHgxLjhjNjYyY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDMzMAorICAgIC0weDEuNjVmN2Q2NmVmNjU5MWNmYzUxYWIyOWRjMjA4NmQzZTdwLTEsCisgICAgLTB4MS44YzY2MmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzEKKyAgICAtMHgxLmZlMDQzZjg3NWM2ZWQ0YTJjMWI4ZDY5YTA5ZmNmNTc4cC0xLAorICAgIC0weDEuYThhYTFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzIKKyAgICAweDEuZmUwNDNmODc1YzZlZDRhMmMxYjhkNjlhMDlmY2Y1NzhwLTEsCisgICAgMHgxLmE4YWExY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMzMzCisgICAgLTB4MS5mZmYxOGYzMTNlNjZmMWFlMjVmODlhNWY3YTFmODRjNHAtMSwKKyAgICAtMHgxLjk1ZWM4YXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM0CisgICAgMHgxLmZmZjE4ZjMxM2U2NmYxYWUyNWY4OWE1ZjdhMWY4NGM0cC0xLAorICAgIDB4MS45NWVjOGFwMAorICB9LAorICB7IC8vIEVudHJ5IDMzNQorICAgIC0weDEuZmYyMGQ5MjBiOWU5YzIzMTU0Zjk3ZTJmMzQyYTI4ODRwLTEsCisgICAgLTB4MS44MzJlZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDMzNgorICAgIDB4MS5mZjIwZDkyMGI5ZTljMjMxNTRmOTdlMmYzNDJhMjg4NHAtMSwKKyAgICAweDEuODMyZWY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzcKKyAgICAtMHgxLmZiOTMzYjg5ZDdkYjMyODZlZWQwY2ZlYWJlZTk4ODc1cC0xLAorICAgIC0weDEuNzA3MTY2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzgKKyAgICAweDEuZmI5MzNiODlkN2RiMzI4NmVlZDBjZmVhYmVlOTg4NzVwLTEsCisgICAgMHgxLjcwNzE2NnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgLTB4MS5mNTRkOTVjNTA1OGI3ZGM5OTcyYWI2Zjk5MjhjYTA0M3AtMSwKKyAgICAtMHgxLjVkYjNkNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQwCisgICAgMHgxLmY1NGQ5NWM1MDU4YjdkYzk5NzJhYjZmOTkyOGNhMDQzcC0xLAorICAgIDB4MS41ZGIzZDRwMAorICB9LAorICB7IC8vIEVudHJ5IDM0MQorICAgIC0weDEuZWM1ODgxYTA5YzQ2YWFlMDIwY2Q5MDM2MDk4YTE5NmVwLTEsCisgICAgLTB4MS40YWY2NDJwMAorICB9LAorICB7IC8vIEVudHJ5IDM0MgorICAgIDB4MS5lYzU4ODFhMDljNDZhYWUwMjBjZDkwMzYwOThhMTk2ZXAtMSwKKyAgICAweDEuNGFmNjQycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDMKKyAgICAtMHgxLmUwYzA0Nzk1OTE5ZDk2MWE1ZTgzZTUwNWRmMzFjNjI0cC0xLAorICAgIC0weDEuMzgzOGIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDQKKyAgICAweDEuZTBjMDQ3OTU5MTlkOTYxYTVlODNlNTA1ZGYzMWM2MjRwLTEsCisgICAgMHgxLjM4MzhiMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQ1CisgICAgLTB4MS5kMjk0Y2RlZjdjYzE2MTYzM2EwMmQzZTYyMDU4YmUwZXAtMSwKKyAgICAtMHgxLjI1N2IxZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQ2CisgICAgMHgxLmQyOTRjZGVmN2NjMTYxNjMzYTAyZDNlNjIwNThiZTBlcC0xLAorICAgIDB4MS4yNTdiMWVwMAorICB9LAorICB7IC8vIEVudHJ5IDM0NworICAgIC0weDEuYzFlOTg4Yjk1NjE0YWJkNjVkM2Q4MTFmNWM4ODAzOWJwLTEsCisgICAgLTB4MS4xMmJkOTJwMAorICB9LAorICB7IC8vIEVudHJ5IDM0OAorICAgIDB4MS5jMWU5ODhiOTU2MTRhYmQ2NWQzZDgxMWY1Yzg4MDM5YnAtMSwKKyAgICAweDEuMTJiZDkycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDkKKyAgICAtMHgxLmEyYzI4OTVlZGIwZDRiYTUxY2RiZDUzOTBjYWM0NjhmcC0xLAorICAgIC0weDEuZWE1YzNlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzUwCisgICAgMHgxLmEyYzI4OTVlZGIwZDRiYTUxY2RiZDUzOTBjYWM0NjhmcC0xLAorICAgIDB4MS5lYTVjM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTEKKyAgICAtMHgxLjk1ZjA1MTUzNjQ0ZDYwYjk0ZDJmMmU3MDBkZmQzYTM3cC0xLAorICAgIC0weDEuZDRiODdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzUyCisgICAgMHgxLjk1ZjA1MTUzNjQ0ZDYwYjk0ZDJmMmU3MDBkZmQzYTM3cC0xLAorICAgIDB4MS5kNGI4N2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTMKKyAgICAtMHgxLjg4NjQ3ZDhhZDJlNDFmYjdjMGFmMGY2NDYxNGM5OTkzcC0xLAorICAgIC0weDEuYmYxNGJhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU0CisgICAgMHgxLjg4NjQ3ZDhhZDJlNDFmYjdjMGFmMGY2NDYxNGM5OTkzcC0xLAorICAgIDB4MS5iZjE0YmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTUKKyAgICAtMHgxLjdhMjUzZjlmODlhN2QzZTRmOWM1NDYzODQxOGU5N2Y2cC0xLAorICAgIC0weDEuYTk3MGY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU2CisgICAgMHgxLjdhMjUzZjlmODlhN2QzZTRmOWM1NDYzODQxOGU5N2Y2cC0xLAorICAgIDB4MS5hOTcwZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTcKKyAgICAtMHgxLjZiMzkxYjM0YWFiODI4ZmJlN2NkN2RjYWY5ZWYzYmQ2cC0xLAorICAgIC0weDEuOTNjZDM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzU4CisgICAgMHgxLjZiMzkxYjM0YWFiODI4ZmJlN2NkN2RjYWY5ZWYzYmQ2cC0xLAorICAgIDB4MS45M2NkMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTkKKyAgICAtMHgxLjViYTZlMmZiOTgwZDQ4MmNmMDBlZGU4MGY1NTk3ZmIycC0xLAorICAgIC0weDEuN2UyOTc0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzYwCisgICAgMHgxLjViYTZlMmZiOTgwZDQ4MmNmMDBlZGU4MGY1NTk3ZmIycC0xLAorICAgIDB4MS43ZTI5NzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjEKKyAgICAtMHgxLjRiNzViNTk1NGU3MTgwMjA5MDA3MTllMjVhN2VhOTNicC0xLAorICAgIC0weDEuNjg4NWIycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzYyCisgICAgMHgxLjRiNzViNTk1NGU3MTgwMjA5MDA3MTllMjVhN2VhOTNicC0xLAorICAgIDB4MS42ODg1YjJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjMKKyAgICAtMHgxLjNhYWNmYTUxMDgxMDA1NGM1MmFlMGI2N2QxMTZlYjQwcC0xLAorICAgIC0weDEuNTJlMWYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY0CisgICAgMHgxLjNhYWNmYTUxMDgxMDA1NGM1MmFlMGI2N2QxMTZlYjQwcC0xLAorICAgIDB4MS41MmUxZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjUKKyAgICAtMHgxLjI5NTQ2NDRjZWI4ZTNhMjQ3OWM4M2FlODRhZjU3ZDNlcC0xLAorICAgIC0weDEuM2QzZTM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY2CisgICAgMHgxLjI5NTQ2NDRjZWI4ZTNhMjQ3OWM4M2FlODRhZjU3ZDNlcC0xLAorICAgIDB4MS4zZDNlMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjcKKyAgICAtMHgxLmZjNzY5YWVjZDI2NWNmZWEwOGUwZmYzMGMyZmJjYWNkcC0yLAorICAgIC0weDEuMGEwYjAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY4CisgICAgMHgxLmZjNzY5YWVjZDI2NWNmZWEwOGUwZmYzMGMyZmJjYWNkcC0yLAorICAgIDB4MS4wYTBiMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjkKKyAgICAtMHgxLmM4NTNjNzA0ZTNiOTQzMjIwMzFkNmI0N2FlZjg1M2M5cC0yLAorICAgIC0weDEuZDhmNzIwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzcwCisgICAgMHgxLmM4NTNjNzA0ZTNiOTQzMjIwMzFkNmI0N2FlZjg1M2M5cC0yLAorICAgIDB4MS5kOGY3MjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzEKKyAgICAtMHgxLjkyYWJhODk4MWIyNWRlZGE0Y2MxODE3MjUxNzIzYTFicC0yLAorICAgIC0weDEuOWRkODNjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzcyCisgICAgMHgxLjkyYWJhODk4MWIyNWRlZGE0Y2MxODE3MjUxNzIzYTFicC0yLAorICAgIDB4MS45ZGQ4M2NwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzMKKyAgICAtMHgxLjViYWMwNWUxZTBhN2MyZGUyODBmY2I5M2JlNjdhNGRhcC0yLAorICAgIC0weDEuNjJiOTU4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzc0CisgICAgMHgxLjViYWMwNWUxZTBhN2MyZGUyODBmY2I5M2JlNjdhNGRhcC0yLAorICAgIDB4MS42MmI5NThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzUKKyAgICAtMHgxLjIzODNjYTJiMjQ5ODA3ZDk1MDA1ZDk2Y2ZkYWVjZDZjcC0yLAorICAgIC0weDEuMjc5YTc0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMzc2CisgICAgMHgxLjIzODNjYTJiMjQ5ODA3ZDk1MDA1ZDk2Y2ZkYWVjZDZjcC0yLAorICAgIDB4MS4yNzlhNzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzcKKyAgICAtMHgxLmQ0YzViYjg3MmVhNTM3NTgzNGNhMGJjYTA4OGQxZDc1cC0zLAorICAgIC0weDEuZDhmNzIwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzc4CisgICAgMHgxLmQ0YzViYjg3MmVhNTM3NTgzNGNhMGJjYTA4OGQxZDc1cC0zLAorICAgIDB4MS5kOGY3MjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzkKKyAgICAtMHgxLjYwZjNmYTQ2MGI4NTgxMWQyYWU3MTBjZDY5ZWMzNjkwcC0zLAorICAgIC0weDEuNjJiOTU4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgMzgwCisgICAgMHgxLjYwZjNmYTQ2MGI4NTgxMWQyYWU3MTBjZDY5ZWMzNjkwcC0zLAorICAgIDB4MS42MmI5NThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODEKKyAgICAtMHgxLmQ3ZWEzZDU2ZTFlNjI0NGM4Nzg2ZDc0ZjE4OWQ5OGFjcC00LAorICAgIC0weDEuZDhmNzIwcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzgyCisgICAgMHgxLmQ3ZWEzZDU2ZTFlNjI0NGM4Nzg2ZDc0ZjE4OWQ5OGFjcC00LAorICAgIDB4MS5kOGY3MjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODMKKyAgICAtMHgxLmQ4YjNkZWJhNmFjNDkzYjA0YjIxMDNhMGRiYWVmMDJmcC01LAorICAgIC0weDEuZDhmNzIwcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzg0CisgICAgMHgxLmQ4YjNkZWJhNmFjNDkzYjA0YjIxMDNhMGRiYWVmMDJmcC01LAorICAgIDB4MS5kOGY3MjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODUKKyAgICAweDEuZDhiM2RlYmE2YWM0OTNiMDRiMjEwM2EwZGJhZWYwMmZwLTUsCisgICAgMHgxLmQ4ZjcyMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDM4NgorICAgIC0weDEuZDhiM2RlYmE2YWM0OTNiMDRiMjEwM2EwZGJhZWYwMmZwLTUsCisgICAgLTB4MS5kOGY3MjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODcKKyAgICAweDEuZDdlYTNkNTZlMWU2MjQ0Yzg3ODZkNzRmMTg5ZDk4YWNwLTQsCisgICAgMHgxLmQ4ZjcyMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDM4OAorICAgIC0weDEuZDdlYTNkNTZlMWU2MjQ0Yzg3ODZkNzRmMTg5ZDk4YWNwLTQsCisgICAgLTB4MS5kOGY3MjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODkKKyAgICAweDEuNjBmM2ZhNDYwYjg1ODExZDJhZTcxMGNkNjllYzM2OTBwLTMsCisgICAgMHgxLjYyYjk1OHAtMworICB9LAorICB7IC8vIEVudHJ5IDM5MAorICAgIC0weDEuNjBmM2ZhNDYwYjg1ODExZDJhZTcxMGNkNjllYzM2OTBwLTMsCisgICAgLTB4MS42MmI5NThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTEKKyAgICAweDEuZDRjNWJiODcyZWE1Mzc1ODM0Y2EwYmNhMDg4ZDFkNzVwLTMsCisgICAgMHgxLmQ4ZjcyMHAtMworICB9LAorICB7IC8vIEVudHJ5IDM5MgorICAgIC0weDEuZDRjNWJiODcyZWE1Mzc1ODM0Y2EwYmNhMDg4ZDFkNzVwLTMsCisgICAgLTB4MS5kOGY3MjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTMKKyAgICAweDEuMjM4M2NhMmIyNDk4MDdkOTUwMDVkOTZjZmRhZWNkNmNwLTIsCisgICAgMHgxLjI3OWE3NHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5NAorICAgIC0weDEuMjM4M2NhMmIyNDk4MDdkOTUwMDVkOTZjZmRhZWNkNmNwLTIsCisgICAgLTB4MS4yNzlhNzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTUKKyAgICAweDEuNWJhYzA1ZTFlMGE3YzJkZTI4MGZjYjkzYmU2N2E0ZGFwLTIsCisgICAgMHgxLjYyYjk1OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5NgorICAgIC0weDEuNWJhYzA1ZTFlMGE3YzJkZTI4MGZjYjkzYmU2N2E0ZGFwLTIsCisgICAgLTB4MS42MmI5NThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTcKKyAgICAweDEuOTJhYmE4OTgxYjI1ZGVkYTRjYzE4MTcyNTE3MjNhMWJwLTIsCisgICAgMHgxLjlkZDgzY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDM5OAorICAgIC0weDEuOTJhYmE4OTgxYjI1ZGVkYTRjYzE4MTcyNTE3MjNhMWJwLTIsCisgICAgLTB4MS45ZGQ4M2NwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTkKKyAgICAweDEuYzg1M2M3MDRlM2I5NDMyMjAzMWQ2YjQ3YWVmODUzYzlwLTIsCisgICAgMHgxLmQ4ZjcyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQwMAorICAgIC0weDEuYzg1M2M3MDRlM2I5NDMyMjAzMWQ2YjQ3YWVmODUzYzlwLTIsCisgICAgLTB4MS5kOGY3MjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDEKKyAgICAweDEuZmM3NjlhZWNkMjY1Y2ZlYTA4ZTBmZjMwYzJmYmNhY2RwLTIsCisgICAgMHgxLjBhMGIwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwMgorICAgIC0weDEuZmM3NjlhZWNkMjY1Y2ZlYTA4ZTBmZjMwYzJmYmNhY2RwLTIsCisgICAgLTB4MS4wYTBiMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDMKKyAgICAweDEuMjk1NDY0NGNlYjhlM2EyNDc5YzgzYWU4NGFmNTdkM2VwLTEsCisgICAgMHgxLjNkM2UzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwNAorICAgIC0weDEuMjk1NDY0NGNlYjhlM2EyNDc5YzgzYWU4NGFmNTdkM2VwLTEsCisgICAgLTB4MS4zZDNlMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDUKKyAgICAweDEuM2FhZDAwYTA5MjY4YTM5ZGYxNjUzYzcwZGI5MWYxNTdwLTEsCisgICAgMHgxLjUyZTFmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwNgorICAgIC0weDEuM2FhZDAwYTA5MjY4YTM5ZGYxNjUzYzcwZGI5MWYxNTdwLTEsCisgICAgLTB4MS41MmUxZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDcKKyAgICAweDEuNGI3NWJiYWUzODhhN2YzNDY2ZTdmMmQ2YmRjZjcyYmJwLTEsCisgICAgMHgxLjY4ODViYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwOAorICAgIC0weDEuNGI3NWJiYWUzODhhN2YzNDY2ZTdmMmQ2YmRjZjcyYmJwLTEsCisgICAgLTB4MS42ODg1YmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDkKKyAgICAweDEuNWJhNmU4ZGIxODMzNDc1NzEyYjlhNDJhMWFkMGQyYzJwLTEsCisgICAgMHgxLjdlMjk3Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQxMAorICAgIC0weDEuNWJhNmU4ZGIxODMzNDc1NzEyYjlhNDJhMWFkMGQyYzJwLTEsCisgICAgLTB4MS43ZTI5N2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTEKKyAgICAweDEuNmIzOTIwZDgxMTc4Mjg5MjhmZTEwYWM3MGJhNjllNzZwLTEsCisgICAgMHgxLjkzY2QzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQxMgorICAgIC0weDEuNmIzOTIwZDgxMTc4Mjg5MjhmZTEwYWM3MGJhNjllNzZwLTEsCisgICAgLTB4MS45M2NkM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTMKKyAgICAweDEuN2EyNTQ1MDQ0MzA5ODgzNmM1MjAyMzc1ZGI0Yjg0NjJwLTEsCisgICAgMHgxLmE5NzFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTQKKyAgICAtMHgxLjdhMjU0NTA0NDMwOTg4MzZjNTIwMjM3NWRiNGI4NDYycC0xLAorICAgIC0weDEuYTk3MXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQxNQorICAgIDB4MS44ODY0ODJhZTY3OTdiMzgzNjRmNWM3MmNlOWEzYjc2ZnAtMSwKKyAgICAweDEuYmYxNGMycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDE2CisgICAgLTB4MS44ODY0ODJhZTY3OTdiMzgzNjRmNWM3MmNlOWEzYjc2ZnAtMSwKKyAgICAtMHgxLmJmMTRjMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQxNworICAgIDB4MS45NWYwNTYzMzdhY2MxZDJkNTU3NTI1MjMyZTkxNTQ2N3AtMSwKKyAgICAweDEuZDRiODg0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDE4CisgICAgLTB4MS45NWYwNTYzMzdhY2MxZDJkNTU3NTI1MjMyZTkxNTQ2N3AtMSwKKyAgICAtMHgxLmQ0Yjg4NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQxOQorICAgIDB4MS5hMmMyODk1ZWRiMGQ0YmE1MWNkYmQ1MzkwY2FjNDY4ZnAtMSwKKyAgICAweDEuZWE1YzNlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDIwCisgICAgLTB4MS5hMmMyODk1ZWRiMGQ0YmE1MWNkYmQ1MzkwY2FjNDY4ZnAtMSwKKyAgICAtMHgxLmVhNWMzZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQyMQorICAgIDB4MS5jMWU5ODhiOTU2MTRhYmQ2NWQzZDgxMWY1Yzg4MDM5YnAtMSwKKyAgICAweDEuMTJiZDkycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjIKKyAgICAtMHgxLmMxZTk4OGI5NTYxNGFiZDY1ZDNkODExZjVjODgwMzlicC0xLAorICAgIC0weDEuMTJiZDkycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjMKKyAgICAweDEuZDI5NGQyZTA2YjNkMTBhNGRlMjYzMTcyZDUwZjQ0OTdwLTEsCisgICAgMHgxLjI1N2IyNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDI0CisgICAgLTB4MS5kMjk0ZDJlMDZiM2QxMGE0ZGUyNjMxNzJkNTBmNDQ5N3AtMSwKKyAgICAtMHgxLjI1N2IyNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDI1CisgICAgMHgxLmUwYzA0YmI2NWJkMzMwMTJiZTcyYTM0MGRmMmMwNDRicC0xLAorICAgIDB4MS4zODM4YjZwMAorICB9LAorICB7IC8vIEVudHJ5IDQyNgorICAgIC0weDEuZTBjMDRiYjY1YmQzMzAxMmJlNzJhMzQwZGYyYzA0NGJwLTEsCisgICAgLTB4MS4zODM4YjZwMAorICB9LAorICB7IC8vIEVudHJ5IDQyNworICAgIDB4MS5lYzU4ODRlYjk5MGMzZGVhYWVlYmQzZjBmODRkNjk2MnAtMSwKKyAgICAweDEuNGFmNjQ4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjgKKyAgICAtMHgxLmVjNTg4NGViOTkwYzNkZWFhZWViZDNmMGY4NGQ2OTYycC0xLAorICAgIC0weDEuNGFmNjQ4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjkKKyAgICAweDEuZjU0ZDk4MzViMGU2NmUxNzYxMjE2MDI3MjUyMWYzYjBwLTEsCisgICAgMHgxLjVkYjNkYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDMwCisgICAgLTB4MS5mNTRkOTgzNWIwZTY2ZTE3NjEyMTYwMjcyNTIxZjNiMHAtMSwKKyAgICAtMHgxLjVkYjNkYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDMxCisgICAgMHgxLmZiOTMzZDFjZDkzMTY4NWU5MDJlNDAzYTFiYWFlY2ZkcC0xLAorICAgIDB4MS43MDcxNmNwMAorICB9LAorICB7IC8vIEVudHJ5IDQzMgorICAgIC0weDEuZmI5MzNkMWNkOTMxNjg1ZTkwMmU0MDNhMWJhYWVjZmRwLTEsCisgICAgLTB4MS43MDcxNmNwMAorICB9LAorICB7IC8vIEVudHJ5IDQzMworICAgIDB4MS5mZjIwZDlkM2U4OTg0ZmVjMzM5ODJlNDJmNTg4NGYyY3AtMSwKKyAgICAweDEuODMyZWZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzQKKyAgICAtMHgxLmZmMjBkOWQzZTg5ODRmZWMzMzk4MmU0MmY1ODg0ZjJjcC0xLAorICAgIC0weDEuODMyZWZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzUKKyAgICAweDEuZmZmMThmMDNhNGI3ZTZhYWNmNTFmODM5MzFlODUwNDJwLTEsCisgICAgMHgxLjk1ZWM5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDM2CisgICAgLTB4MS5mZmYxOGYwM2E0YjdlNmFhY2Y1MWY4MzkzMWU4NTA0MnAtMSwKKyAgICAtMHgxLjk1ZWM5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDM3CisgICAgMHgxLmZlMDQzZjg3NWM2ZWQ0YTJjMWI4ZDY5YTA5ZmNmNTc4cC0xLAorICAgIDB4MS5hOGFhMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDQzOAorICAgIC0weDEuZmUwNDNmODc1YzZlZDRhMmMxYjhkNjlhMDlmY2Y1NzhwLTEsCisgICAgLTB4MS5hOGFhMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDQzOQorICAgIDB4MS5iM2QzNmE5Njg4MGNmNjlkOTg4NGE0OWY1MzgxZTkxN3AtMSwKKyAgICAweDEuMDRhZmY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDAKKyAgICAtMHgxLmIzZDM2YTk2ODgwY2Y2OWQ5ODg0YTQ5ZjUzODFlOTE3cC0xLAorICAgIC0weDEuMDRhZmY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDEKKyAgICAweDEuYjNkNDFhZWJjZjM5MWMzMGMzZDJmMWVlN2I3OTcxMGNwLTEsCisgICAgMHgxLjA0YjBhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQyCisgICAgLTB4MS5iM2Q0MWFlYmNmMzkxYzMwYzNkMmYxZWU3Yjc5NzEwY3AtMSwKKyAgICAtMHgxLjA0YjBhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQzCisgICAgMHgxLmIzZDRjYjQwNWFiMzI5MmJlN2RmNWIxYjk4MDMyZmJlcC0xLAorICAgIDB4MS4wNGIxNDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NAorICAgIC0weDEuYjNkNGNiNDA1YWIzMjkyYmU3ZGY1YjFiOTgwMzJmYmVwLTEsCisgICAgLTB4MS4wNGIxNDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NQorICAgIDB4MS5iM2Q1N2I5NDJhN2FkMTllOWI5ODkyYzkzMTllMWJlNnAtMSwKKyAgICAweDEuMDRiMWYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDYKKyAgICAtMHgxLmIzZDU3Yjk0MmE3YWQxOWU5Yjk4OTJjOTMxOWUxYmU2cC0xLAorICAgIC0weDEuMDRiMWYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDcKKyAgICAweDEuYjNkNjJiZTczZThmYzk5OGM2YzJkZjY1OTA0MjU2MTNwLTEsCisgICAgMHgxLjA0YjI5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ4CisgICAgLTB4MS5iM2Q2MmJlNzNlOGZjOTk4YzZjMmRmNjU5MDQyNTYxM3AtMSwKKyAgICAtMHgxLjA0YjI5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ5CisgICAgMHgxLmIzZDZkYzM5OTZmMWM1MmFhMWY4M2JkZWUxZDBlMDIzcC0xLAorICAgIDB4MS4wNGIzNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1MAorICAgIC0weDEuYjNkNmRjMzk5NmYxYzUyYWExZjgzYmRlZTFkMGUwMjNwLTEsCisgICAgLTB4MS4wNGIzNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1MQorICAgIDB4MS5iM2Q3OGM4YjMzYTA3ODY0YjZhODc4NTczZGIzNGJjYXAtMSwKKyAgICAweDEuMDRiM2U4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTIKKyAgICAtMHgxLmIzZDc4YzhiMzNhMDc4NjRiNmE4Nzg1NzNkYjM0YmNhcC0xLAorICAgIC0weDEuMDRiM2U4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTMKKyAgICAweDEuYjNkODNjZGMxNDliOTc1N2RmMTk1YWQ4ODVhYjUyMDFwLTEsCisgICAgMHgxLjA0YjQ5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDU0CisgICAgLTB4MS5iM2Q4M2NkYzE0OWI5NzU3ZGYxOTVhZDg4NWFiNTIwMXAtMSwKKyAgICAtMHgxLjA0YjQ5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDU1CisgICAgMHgxLmIzZDhlOGY5OTA4MzYwYjM4Y2QxM2ZjYmY2MjI0ZDkzcC0xLAorICAgIDB4MS4wNGI1MzRwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NgorICAgIC0weDEuYjNkOGU4Zjk5MDgzNjBiMzhjZDEzZmNiZjYyMjRkOTNwLTEsCisgICAgLTB4MS4wNGI1MzRwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NworICAgIC0wLjBmLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTgKKyAgICAwLjBmLAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQ1OQorICAgIDAuMCwKKyAgICAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjAKKyAgICAwLjBmLAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQ2MQorICAgIC0wLjBmLAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjIKKyAgICAweDEuMTc3M2QzNmE2NGRmNjFkNjcxNWU2MGFmMDYzNTU5ZjRwLTEsCisgICAgMHgxLjI3OWE3MnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2MworICAgIC0weDEuMTc3M2QzNmE2NGRmNjFkNjcxNWU2MGFmMDYzNTU5ZjRwLTEsCisgICAgLTB4MS4yNzlhNzJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjQKKyAgICAweDEuMTc3M2Q1MTc2N2E3OGZlOTFiNTVmNmI3ZTVmZDQ0YzJwLTEsCisgICAgMHgxLjI3OWE3NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2NQorICAgIC0weDEuMTc3M2Q1MTc2N2E3OGZlOTFiNTVmNmI3ZTVmZDQ0YzJwLTEsCisgICAgLTB4MS4yNzlhNzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjYKKyAgICAweDEuMTc3M2Q2YzQ2YTZlYTY4N2YwMzYyNTE5NGQyNWJiNTJwLTEsCisgICAgMHgxLjI3OWE3NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ2NworICAgIC0weDEuMTc3M2Q2YzQ2YTZlYTY4N2YwMzYyNTE5NGQyNWJiNTJwLTEsCisgICAgLTB4MS4yNzlhNzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjgKKyAgICAweDEuZjk1YjhmNDA1MDEwNTdhYzQ5YWNlZjEzOTkzYjBjNTVwLTEsCisgICAgMHgxLmJiNjdhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDY5CisgICAgLTB4MS5mOTViOGY0MDUwMTA1N2FjNDlhY2VmMTM5OTNiMGM1NXAtMSwKKyAgICAtMHgxLmJiNjdhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDcwCisgICAgMHgxLmY5NWI4ZTliZTcyNzcwMmY3NTk1YWUxMDAwYTE0YTFhcC0xLAorICAgIDB4MS5iYjY3YWVwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3MQorICAgIC0weDEuZjk1YjhlOWJlNzI3NzAyZjc1OTVhZTEwMDBhMTRhMWFwLTEsCisgICAgLTB4MS5iYjY3YWVwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3MgorICAgIDB4MS5mOTViOGRmNzdlMzZhMzQ0NjcwZWQwNzE0OTE5MWE1OHAtMSwKKyAgICAweDEuYmI2N2IwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzMKKyAgICAtMHgxLmY5NWI4ZGY3N2UzNmEzNDQ2NzBlZDA3MTQ5MTkxYTU4cC0xLAorICAgIC0weDEuYmI2N2IwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzQKKyAgICAweDEuYjFkODJlODM1YTkxOGRlMThmNWZkYWRjOGIxMjQwY2ZwLTIsCisgICAgMHgxLmJmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ3NQorICAgIC0weDEuYjFkODJlODM1YTkxOGRlMThmNWZkYWRjOGIxMjQwY2ZwLTIsCisgICAgLTB4MS5iZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzYKKyAgICAweDEuYjFkODMwNTMyMTYxNjk0NzZmNGQxOTgyYjliMTRhYjFwLTIsCisgICAgMHgxLmMwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDc3CisgICAgLTB4MS5iMWQ4MzA1MzIxNjE2OTQ3NmY0ZDE5ODJiOWIxNGFiMXAtMiwKKyAgICAtMHgxLmMwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDc4CisgICAgMHgxLmIxZDgzMjIyZTgzMGQ4Mzc0MzI1OGZkMDkwNDBlZTU2cC0yLAorICAgIDB4MS5jMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzkKKyAgICAtMHgxLmIxZDgzMjIyZTgzMGQ4Mzc0MzI1OGZkMDkwNDBlZTU2cC0yLAorICAgIC0weDEuYzAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDgwCisgICAgMHgxLjQ0ZWIzNjkxNDI4MDYyYjI3OTI1YzU4NWFkNTlkNjJhcC0xLAorICAgIDB4MS41ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODEKKyAgICAtMHgxLjQ0ZWIzNjkxNDI4MDYyYjI3OTI1YzU4NWFkNTlkNjJhcC0xLAorICAgIC0weDEuNWZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDgyCisgICAgMHgxLjQ0ZWIzODFjZjM4NmFiMDRhNGY4NjU2YWJlYTgwYjgzcC0xLAorICAgIDB4MS42MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4MworICAgIC0weDEuNDRlYjM4MWNmMzg2YWIwNGE0Zjg2NTZhYmVhODBiODNwLTEsCisgICAgLTB4MS42MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4NAorICAgIDB4MS40NGViMzlhOGE0OGJhZTZiOThhZTExYzk0MDA1MzVlNXAtMSwKKyAgICAweDEuNjAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDg1CisgICAgLTB4MS40NGViMzlhOGE0OGJhZTZiOThhZTExYzk0MDA1MzVlNXAtMSwKKyAgICAtMHgxLjYwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4NgorICAgIDB4MS5kYWQ5MDE3Yjk2NDA4YzM3NWQ0ZmFmMGU0Nzc2ZDFmY3AtMSwKKyAgICAweDEuMmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODcKKyAgICAtMHgxLmRhZDkwMTdiOTY0MDhjMzc1ZDRmYWYwZTQ3NzZkMWZjcC0xLAorICAgIC0weDEuMmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODgKKyAgICAweDEuZGFkOTAyZmE4YWM4NzBmNTJmMWI4NDNhYzgzYmMzZWRwLTEsCisgICAgMHgxLjMwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODkKKyAgICAtMHgxLmRhZDkwMmZhOGFjODcwZjUyZjFiODQzYWM4M2JjM2VkcC0xLAorICAgIC0weDEuMzBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ5MAorICAgIDB4MS5kYWQ5MDQ3OTdmNDhlYTRlZjRmZDJlNDdmZTRkNTJiZHAtMSwKKyAgICAweDEuMzAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTEKKyAgICAtMHgxLmRhZDkwNDc5N2Y0OGVhNGVmNGZkMmU0N2ZlNGQ1MmJkcC0xLAorICAgIC0weDEuMzAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTIKKyAgICAweDEuNGI3MDgwOTNjOWNiNDUzNTVlNzgyMWU1YWFkOThjZThwLTEsCisgICAgMHgxLjM3ZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNDkzCisgICAgLTB4MS40YjcwODA5M2M5Y2I0NTM1NWU3ODIxZTVhYWQ5OGNlOHAtMSwKKyAgICAtMHgxLjM3ZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNDk0CisgICAgMHgxLjRiNzA3YTdhY2RlY2M4NDIzOTQ2M2U3OGIzMTJmYTEwcC0xLAorICAgIDB4MS4zOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNDk1CisgICAgLTB4MS40YjcwN2E3YWNkZWNjODQyMzk0NjNlNzhiMzEyZmExMHAtMSwKKyAgICAtMHgxLjM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTYKKyAgICAweDEuNGI3MDc0NjFkMWY5OTQ0NzZjNjc3YzVhZDVkZGIyNjRwLTEsCisgICAgMHgxLjM4MDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgNDk3CisgICAgLTB4MS40YjcwNzQ2MWQxZjk5NDQ3NmM2NzdjNWFkNWRkYjI2NHAtMSwKKyAgICAtMHgxLjM4MDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgNDk4CisgICAgMHgxLjA2NmU3ZjcwNWE2Y2EyYjllMTA3ZjdkYzlmM2IyNmU2cC00LAorICAgIDB4MS4wNjljOGNwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTkKKyAgICAtMHgxLjA2NmU3ZjcwNWE2Y2EyYjllMTA3ZjdkYzlmM2IyNmU2cC00LAorICAgIC0weDEuMDY5YzhjcC00CisgIH0sCisgIHsgLy8gRW50cnkgNTAwCisgICAgMHgxLjA1ZTQ3NmQyN2ZlYmM4YjdlOTY5MDAwOWIzNjdjMzI3cC0zLAorICAgIDB4MS4wNjljOGNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDEKKyAgICAtMHgxLjA1ZTQ3NmQyN2ZlYmM4YjdlOTY5MDAwOWIzNjdjMzI3cC0zLAorICAgIC0weDEuMDY5YzhjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTAyCisgICAgMHgxLjg3N2UyZGU1YzlhMDY2YjhkYjU5NWFkYzE0OWFmMGMwcC0zLAorICAgIDB4MS44OWVhZDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDMKKyAgICAtMHgxLjg3N2UyZGU1YzlhMDY2YjhkYjU5NWFkYzE0OWFmMGMwcC0zLAorICAgIC0weDEuODllYWQycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTA0CisgICAgMHgxLjAzYmUwN2FjYjlkYWI3MTliNDM0M2EzM2I5ZmE2YWZlcC0yLAorICAgIDB4MS4wNjljOGNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDUKKyAgICAtMHgxLjAzYmUwN2FjYjlkYWI3MTliNDM0M2EzM2I5ZmE2YWZlcC0yLAorICAgIC0weDEuMDY5YzhjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTA2CisgICAgMHgxLjQyYWJiYzViM2IyZjkxZThlY2U0NmU1ZWZmZDI4MzY5cC0yLAorICAgIDB4MS40ODQzYjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDcKKyAgICAtMHgxLjQyYWJiYzViM2IyZjkxZThlY2U0NmU1ZWZmZDI4MzY5cC0yLAorICAgIC0weDEuNDg0M2IwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTA4CisgICAgMHgxLjgwNDYwMTQxMWQ5M2Y0NzUwOTE5NjcwMDYxZGUwN2Q5cC0yLAorICAgIDB4MS44OWVhZDRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDkKKyAgICAtMHgxLjgwNDYwMTQxMWQ5M2Y0NzUwOTE5NjcwMDYxZGUwN2Q5cC0yLAorICAgIC0weDEuODllYWQ0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTEwCisgICAgMHgxLmJjNGMwOGFmMzU2MDg4YjE2OTQ5OTViZmFmOGEyOTdicC0yLAorICAgIDB4MS5jYjkxZjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTEKKyAgICAtMHgxLmJjNGMwOGFmMzU2MDg4YjE2OTQ5OTViZmFmOGEyOTdicC0yLAorICAgIC0weDEuY2I5MWY4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTEyCisgICAgMHgxLmY2N2VhZTM0ZGMwYjQyYjQ2NWZkMmEzZmIwNzU2NGE0cC0yLAorICAgIDB4MS4wNjljOGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTMKKyAgICAtMHgxLmY2N2VhZTM0ZGMwYjQyYjQ2NWZkMmEzZmIwNzU2NGE0cC0yLAorICAgIC0weDEuMDY5YzhlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTE0CisgICAgMHgxLjE3NTA1Yzg2MjMxODk4ZmQ4NmIxOGQyMjgyZDkzZWVkcC0xLAorICAgIDB4MS4yNzcwMjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTUKKyAgICAtMHgxLjE3NTA1Yzg2MjMxODk4ZmQ4NmIxOGQyMjgyZDkzZWVkcC0xLAorICAgIC0weDEuMjc3MDIwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTE2CisgICAgMHgxLjMyM2I4ZTQwZDE2NTc1ZTUwZGM3YjZlNTY3YmI1MDg0cC0xLAorICAgIDB4MS40ODQzYjJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTcKKyAgICAtMHgxLjMyM2I4ZTQwZDE2NTc1ZTUwZGM3YjZlNTY3YmI1MDg0cC0xLAorICAgIC0weDEuNDg0M2IycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTE4CisgICAgMHgxLjRiZTQ5YjA4YTFlMTYyOWNiZGFhNTA3ZTE4MjU1Y2Q4cC0xLAorICAgIDB4MS42OTE3NDRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTkKKyAgICAtMHgxLjRiZTQ5YjA4YTFlMTYyOWNiZGFhNTA3ZTE4MjU1Y2Q4cC0xLAorICAgIC0weDEuNjkxNzQ0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTIwCisgICAgMHgxLjY0MzA4NDdkYmJiZmQ0NmNiZWJiYzZkNWY1MWM3YzQ5cC0xLAorICAgIDB4MS44OWVhZDZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjEKKyAgICAtMHgxLjY0MzA4NDdkYmJiZmQ0NmNiZWJiYzZkNWY1MWM3YzQ5cC0xLAorICAgIC0weDEuODllYWQ2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTIyCisgICAgMHgxLjdiMDViYjg3YjM4ODQ0ZTU2MDAzYzQxZWY4MDRiMjczcC0xLAorICAgIDB4MS5hYWJlNjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjMKKyAgICAtMHgxLjdiMDViYjg3YjM4ODQ0ZTU2MDAzYzQxZWY4MDRiMjczcC0xLAorICAgIC0weDEuYWFiZTY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTI0CisgICAgMHgxLjkwNGMzYjM4OWQ1NWQzZGVkZGIzOWQwNWViMzY2NTcxcC0xLAorICAgIDB4MS5jYjkxZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjUKKyAgICAtMHgxLjkwNGMzYjM4OWQ1NWQzZGVkZGIzOWQwNWViMzY2NTcxcC0xLAorICAgIC0weDEuY2I5MWZhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTI2CisgICAgMHgxLmEzZWRhMjExNzk4YTgyNjk3ZDYyNDMxZjlhZTQ2Y2M0cC0xLAorICAgIDB4MS5lYzY1OGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjcKKyAgICAtMHgxLmEzZWRhMjExNzk4YTgyNjk3ZDYyNDMxZjlhZTQ2Y2M0cC0xLAorICAgIC0weDEuZWM2NThjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTI4CisgICAgMHgxLmI1ZDU0ODgzZmNiNjEyM2JjMjhhYWM5MWYwODVlNGVlcC0xLAorICAgIDB4MS4wNjljOGVwMAorICB9LAorICB7IC8vIEVudHJ5IDUyOQorICAgIC0weDEuYjVkNTQ4ODNmY2I2MTIzYmMyOGFhYzkxZjA4NWU0ZWVwLTEsCisgICAgLTB4MS4wNjljOGVwMAorICB9LAorICB7IC8vIEVudHJ5IDUzMAorICAgIDB4MS5jNWYwNWEwMTM1ZDQ4ODJjNzY4Y2RmMThlMmUxMTEyY3AtMSwKKyAgICAweDEuMTcwNjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzEKKyAgICAtMHgxLmM1ZjA1YTAxMzVkNDg4MmM3NjhjZGYxOGUyZTExMTJjcC0xLAorICAgIC0weDEuMTcwNjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzIKKyAgICAweDEuZDQyZGU1M2UzMTVjODM5Y2UxODhlMjAxMjA1ZTk5ZGVwLTEsCisgICAgMHgxLjI3NzAxZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTMzCisgICAgLTB4MS5kNDJkZTUzZTMxNWM4MzljZTE4OGUyMDEyMDVlOTlkZXAtMSwKKyAgICAtMHgxLjI3NzAxZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM0CisgICAgMHgxLmUwN2VlZjQ1ZDkxZWVhOGE2Y2M3MzY5YWEwZTU1Mzg4cC0xLAorICAgIDB4MS4zN2Q5ZTZwMAorICB9LAorICB7IC8vIEVudHJ5IDUzNQorICAgIC0weDEuZTA3ZWVmNDVkOTFlZWE4YTZjYzczNjlhYTBlNTUzODhwLTEsCisgICAgLTB4MS4zN2Q5ZTZwMAorICB9LAorICB7IC8vIEVudHJ5IDUzNgorICAgIDB4MS5lYWQ2ODMzYjJhYTAwMmJhYTFjMmIxOWEzOGRjOWI3OXAtMSwKKyAgICAweDEuNDg0M2FlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzcKKyAgICAtMHgxLmVhZDY4MzNiMmFhMDAyYmFhMWMyYjE5YTM4ZGM5Yjc5cC0xLAorICAgIC0weDEuNDg0M2FlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzgKKyAgICAweDEuZjMyOWJmZmE2YTIwODU5MWVlY2I2OTA1ZDc1OTRlM2JwLTEsCisgICAgMHgxLjU4YWQ3NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM5CisgICAgLTB4MS5mMzI5YmZmYTZhMjA4NTkxZWVjYjY5MDVkNzU5NGUzYnAtMSwKKyAgICAtMHgxLjU4YWQ3NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQwCisgICAgMHgxLmY5NmZlMzhhZmJkOTViNWZjZDA4NjA4MTEwZTkzODFmcC0xLAorICAgIDB4MS42OTE3M2VwMAorICB9LAorICB7IC8vIEVudHJ5IDU0MQorICAgIC0weDEuZjk2ZmUzOGFmYmQ5NWI1ZmNkMDg2MDgxMTBlOTM4MWZwLTEsCisgICAgLTB4MS42OTE3M2VwMAorICB9LAorICB7IC8vIEVudHJ5IDU0MgorICAgIDB4MS5mZGEyNTQ1NWQ5NTY3NzcyZjIwZjI1ZDE1ZWZjNjc3NXAtMSwKKyAgICAweDEuNzk4MTA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDMKKyAgICAtMHgxLmZkYTI1NDU1ZDk1Njc3NzJmMjBmMjVkMTVlZmM2Nzc1cC0xLAorICAgIC0weDEuNzk4MTA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDQKKyAgICAweDEuZmZiY2E4MTZmMWYxNTE2ZWM1ZDc1N2IwZGI1NGFlMzRwLTEsCisgICAgMHgxLjg5ZWFjZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ1CisgICAgLTB4MS5mZmJjYTgxNmYxZjE1MTZlYzVkNzU3YjBkYjU0YWUzNHAtMSwKKyAgICAtMHgxLjg5ZWFjZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ2CisgICAgMHgxLmZmYmNhODgyMjhiMTYzMTg5YWI4ZDYzN2RiOTliZDJkcC0xLAorICAgIDB4MS45YTU0OTZwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NworICAgIC0weDEuZmZiY2E4ODIyOGIxNjMxODlhYjhkNjM3ZGI5OWJkMmRwLTEsCisgICAgLTB4MS45YTU0OTZwMAorICB9LAorICB7IC8vIEVudHJ5IDU0OAorICAgIDB4MS5mZGEyNTU5NzBjY2RkYjlkMTI3ZWNmNjM0MDNjMmJmN3AtMSwKKyAgICAweDEuYWFiZTVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDkKKyAgICAtMHgxLmZkYTI1NTk3MGNjZGRiOWQxMjdlY2Y2MzQwM2MyYmY3cC0xLAorICAgIC0weDEuYWFiZTVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTAKKyAgICAweDEuZjk2ZmU1YTBkYTI0NDQ4OWZiMmY0Yjk3YjNlNDg3NTdwLTEsCisgICAgMHgxLmJiMjgyNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTUxCisgICAgLTB4MS5mOTZmZTVhMGRhMjQ0NDg5ZmIyZjRiOTdiM2U0ODc1N3AtMSwKKyAgICAtMHgxLmJiMjgyNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTUyCisgICAgMHgxLmYzMjljMmUyYzFhMzliYWQ4ZWNkY2I4Nzk2MWJhNDRhcC0xLAorICAgIDB4MS5jYjkxZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU1MworICAgIC0weDEuZjMyOWMyZTJjMWEzOWJhZDhlY2RjYjg3OTYxYmE0NGFwLTEsCisgICAgLTB4MS5jYjkxZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU1NAorICAgIDB4MS5lYWQ2ODZmMmVjNTcyYzgzZWQzNGEwMWY3NjRkMTkzZXAtMSwKKyAgICAweDEuZGJmYmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTUKKyAgICAtMHgxLmVhZDY4NmYyZWM1NzJjODNlZDM0YTAxZjc2NGQxOTNlcC0xLAorICAgIC0weDEuZGJmYmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTYKKyAgICAweDEuZTA3ZWYzYzkxYmQ1MDBhMGRlMjMwYWQ1NzMxNjMxNjNwLTEsCisgICAgMHgxLmVjNjU3ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTU3CisgICAgLTB4MS5lMDdlZjNjOTFiZDUwMGEwZGUyMzBhZDU3MzE2MzE2M3AtMSwKKyAgICAtMHgxLmVjNjU3ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTU4CisgICAgMHgxLmQ0MmRlYTg4MzVjODhhZGI5Y2RlMTczNDdmOTM0ZTI1cC0xLAorICAgIDB4MS5mY2NmNDZwMAorICB9LAorICB7IC8vIEVudHJ5IDU1OQorICAgIC0weDEuZDQyZGVhODgzNWM4OGFkYjljZGUxNzM0N2Y5MzRlMjVwLTEsCisgICAgLTB4MS5mY2NmNDZwMAorICB9LAorICB7IC8vIEVudHJ5IDU2MAorICAgIDB4MS5jNWYwNWUzMmM4MGZiMGZlNjAzMDMzZWMwMjhhNGMzMnAtMSwKKyAgICAweDEuMDY5Yzg4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjEKKyAgICAtMHgxLmM1ZjA1ZTMyYzgwZmIwZmU2MDMwMzNlYzAyOGE0YzMycC0xLAorICAgIC0weDEuMDY5Yzg4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjIKKyAgICAweDEuYjVkNTRkMzczMmQzYjJlNzlkNDkwN2UxMTU0MDFkZGFwLTEsCisgICAgMHgxLjBlZDE2Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTYzCisgICAgLTB4MS5iNWQ1NGQzNzMyZDNiMmU3OWQ0OTA3ZTExNTQwMWRkYXAtMSwKKyAgICAtMHgxLjBlZDE2Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTY0CisgICAgMHgxLmEzZWRhNzQxNjFkMDZiODNlYzJjOGRjMzk2ZDgxM2I5cC0xLAorICAgIDB4MS4xNzA2NTBwMQorICB9LAorICB7IC8vIEVudHJ5IDU2NQorICAgIC0weDEuYTNlZGE3NDE2MWQwNmI4M2VjMmM4ZGMzOTZkODEzYjlwLTEsCisgICAgLTB4MS4xNzA2NTBwMQorICB9LAorICB7IC8vIEVudHJ5IDU2NgorICAgIDB4MS45MDRjNDIxZWZjZTU4ZjRlODE3MGQzNmRjZGE4ZTAyY3AtMSwKKyAgICAweDEuMWYzYjM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjcKKyAgICAtMHgxLjkwNGM0MjFlZmNlNThmNGU4MTcwZDM2ZGNkYThlMDJjcC0xLAorICAgIC0weDEuMWYzYjM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjgKKyAgICAweDEuN2IwNWM0NTA5Mzk0NGQ2YWZiMGM5MGQyZjljYjIxN2ZwLTEsCisgICAgMHgxLjI3NzAxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTY5CisgICAgLTB4MS43YjA1YzQ1MDkzOTQ0ZDZhZmIwYzkwZDJmOWNiMjE3ZnAtMSwKKyAgICAtMHgxLjI3NzAxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTcwCisgICAgMHgxLjY0MzA4ZjUwNmZmZGFmMTMyNmQxMGIzMzgwMjc4ZTk4cC0xLAorICAgIDB4MS4yZmE0ZmNwMQorICB9LAorICB7IC8vIEVudHJ5IDU3MQorICAgIC0weDEuNjQzMDhmNTA2ZmZkYWYxMzI2ZDEwYjMzODAyNzhlOThwLTEsCisgICAgLTB4MS4yZmE0ZmNwMQorICB9LAorICB7IC8vIEVudHJ5IDU3MgorICAgIDB4MS40YmU0YTgwNzZjMTM1YTQ4ZjNmMWExYWFhMzYyNDc1ZnAtMSwKKyAgICAweDEuMzdkOWUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzMKKyAgICAtMHgxLjRiZTRhODA3NmMxMzVhNDhmM2YxYTFhYWEzNjI0NzVmcC0xLAorICAgIC0weDEuMzdkOWUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzQKKyAgICAweDEuMzIzYjlkODg4ZDRkYTc3YTYxMDg5MzczNWVlZWQxY2JwLTEsCisgICAgMHgxLjQwMGVjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTc1CisgICAgLTB4MS4zMjNiOWQ4ODhkNGRhNzdhNjEwODkzNzM1ZWVlZDFjYnAtMSwKKyAgICAtMHgxLjQwMGVjNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTc2CisgICAgMHgxLjE3NTA2ZTJkZmI2MDNkMzRiOWFmMzliMTJjMWRiNzM1cC0xLAorICAgIDB4MS40ODQzYThwMQorICB9LAorICB7IC8vIEVudHJ5IDU3NworICAgIC0weDEuMTc1MDZlMmRmYjYwM2QzNGI5YWYzOWIxMmMxZGI3MzVwLTEsCisgICAgLTB4MS40ODQzYThwMQorICB9LAorICB7IC8vIEVudHJ5IDU3OAorICAgIDB4MS5mNjdlZDY2NzM1MmQ0ODI3NDUwMDEzZjE1ZTMyMWJmYnAtMiwKKyAgICAweDEuNTA3ODhjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzkKKyAgICAtMHgxLmY2N2VkNjY3MzUyZDQ4Mjc0NTAwMTNmMTVlMzIxYmZicC0yLAorICAgIC0weDEuNTA3ODhjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODAKKyAgICAweDEuYmM0YzM1ZGE1MWUzNGI3NzZlNWUwNGRhNThmMjM0NDFwLTIsCisgICAgMHgxLjU4YWQ3MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTgxCisgICAgLTB4MS5iYzRjMzVkYTUxZTM0Yjc3NmU1ZTA0ZGE1OGYyMzQ0MXAtMiwKKyAgICAtMHgxLjU4YWQ3MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTgyCisgICAgMHgxLjgwNDYzMzZlNjg0MjdjZjc1NjA1NmQzZjRlZGJiNjYycC0yLAorICAgIDB4MS42MGUyNTRwMQorICB9LAorICB7IC8vIEVudHJ5IDU4MworICAgIC0weDEuODA0NjMzNmU2ODQyN2NmNzU2MDU2ZDNmNGVkYmI2NjJwLTIsCisgICAgLTB4MS42MGUyNTRwMQorICB9LAorICB7IC8vIEVudHJ5IDU4NAorICAgIDB4MS40MmFiZjM4NzI5MDVlNjMyZjIwNGM0MWIyNGFmOTBiNnAtMiwKKyAgICAweDEuNjkxNzM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODUKKyAgICAtMHgxLjQyYWJmMzg3MjkwNWU2MzJmMjA0YzQxYjI0YWY5MGI2cC0yLAorICAgIC0weDEuNjkxNzM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODYKKyAgICAweDEuMDNiZTQzYzY5OWYzNTM2OTkwZGNmNWE2NjY1YWMyMzlwLTIsCisgICAgMHgxLjcxNGMxY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTg3CisgICAgLTB4MS4wM2JlNDNjNjk5ZjM1MzY5OTBkY2Y1YTY2NjVhYzIzOXAtMiwKKyAgICAtMHgxLjcxNGMxY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTg4CisgICAgMHgxLjg3N2VhZGMyZmRmYzJmMGRiMWU4Yjc4Y2QzZmJmYmQycC0zLAorICAgIDB4MS43OTgxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODkKKyAgICAtMHgxLjg3N2VhZGMyZmRmYzJmMGRiMWU4Yjc4Y2QzZmJmYmQycC0zLAorICAgIC0weDEuNzk4MXAxCisgIH0sCisgIHsgLy8gRW50cnkgNTkwCisgICAgMHgxLjA1ZTRmZGY4NDY2MzJhODIwOGQ5MGRlNzJkM2E2ZGE4cC0zLAorICAgIDB4MS44MWI1ZTRwMQorICB9LAorICB7IC8vIEVudHJ5IDU5MQorICAgIC0weDEuMDVlNGZkZjg0NjYzMmE4MjA4ZDkwZGU3MmQzYTZkYThwLTMsCisgICAgLTB4MS44MWI1ZTRwMQorICB9LAorICB7IC8vIEVudHJ5IDU5MgorICAgIDB4MS4wNjZmOWI2MzBiNzJkZmYxNjQ1MGU4OWFmZGY3ZTA0OHAtNCwKKyAgICAweDEuODllYWM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTMKKyAgICAtMHgxLjA2NmY5YjYzMGI3MmRmZjE2NDUwZTg5YWZkZjdlMDQ4cC00LAorICAgIC0weDEuODllYWM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTQKKyAgICAweDEuMDNiZGYwYjc5Y2NmNzM5NTI5ZDU0ZDQyMjg2MTA0NmNwLTIsCisgICAgLTB4MS44MWI1ZWVwMgorICB9LAorICB7IC8vIEVudHJ5IDU5NQorICAgIC0weDEuMDNiZGYwYjc5Y2NmNzM5NTI5ZDU0ZDQyMjg2MTA0NmNwLTIsCisgICAgMHgxLjgxYjVlZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTk2CisgICAgMHgxLmY2N2U4Yjk1ZjU0NjBlYTM2OWE4MDM4MzdiNzIxYWJkcC0yLAorICAgIC0weDEuNzE0YzI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTcKKyAgICAtMHgxLmY2N2U4Yjk1ZjU0NjBlYTM2OWE4MDM4MzdiNzIxYWJkcC0yLAorICAgIDB4MS43MTRjMjZwMgorICB9LAorICB7IC8vIEVudHJ5IDU5OAorICAgIDB4MS42NDMwNzA3OTE3NTFkYzA2MzZkMTg1NGQyYmRiYzVkNHAtMSwKKyAgICAtMHgxLjYwZTI1ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNTk5CisgICAgLTB4MS42NDMwNzA3OTE3NTFkYzA2MzZkMTg1NGQyYmRiYzVkNHAtMSwKKyAgICAweDEuNjBlMjVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDAKKyAgICAweDEuYjVkNTM2ZjU5MTEzYTQzYWYzMGU4YzlkYjhhOTUxYTVwLTEsCisgICAgLTB4MS41MDc4OTZwMgorICB9LAorICB7IC8vIEVudHJ5IDYwMQorICAgIC0weDEuYjVkNTM2ZjU5MTEzYTQzYWYzMGU4YzlkYjhhOTUxYTVwLTEsCisgICAgMHgxLjUwNzg5NnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjAyCisgICAgMHgxLmVhZDY3OTk4NTU0OTE0MDMxODM0OWY1MTJkY2E3YTZicC0xLAorICAgIC0weDEuNDAwZWNlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDMKKyAgICAtMHgxLmVhZDY3OTk4NTU0OTE0MDMxODM0OWY1MTJkY2E3YTZicC0xLAorICAgIDB4MS40MDBlY2VwMgorICB9LAorICB7IC8vIEVudHJ5IDYwNAorICAgIDB4MS5mZmJjYTcwMTBlMGIwNDUyZjU2MDc1Y2ZkNTk4Mjg4MHAtMSwKKyAgICAtMHgxLjJmYTUwNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjA1CisgICAgLTB4MS5mZmJjYTcwMTBlMGIwNDUyZjU2MDc1Y2ZkNTk4Mjg4MHAtMSwKKyAgICAweDEuMmZhNTA2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDYKKyAgICAweDEuZjMyOWNhNmJmYzc0MjVkODljMmI0YjlhZDczYWIxMDhwLTEsCisgICAgLTB4MS4xZjNiM2VwMgorICB9LAorICB7IC8vIEVudHJ5IDYwNworICAgIC0weDEuZjMyOWNhNmJmYzc0MjVkODljMmI0YjlhZDczYWIxMDhwLTEsCisgICAgMHgxLjFmM2IzZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjA4CisgICAgMHgxLmM1ZjA2ZmI2OTQyN2FjMGYyZDY5NDI4ZDgyYjVlNjY5cC0xLAorICAgIC0weDEuMGVkMTc2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDkKKyAgICAtMHgxLmM1ZjA2ZmI2OTQyN2FjMGYyZDY5NDI4ZDgyYjVlNjY5cC0xLAorICAgIDB4MS4wZWQxNzZwMgorICB9LAorICB7IC8vIEVudHJ5IDYxMAorICAgIDB4MS43YjA1ZDg2NGVjOTgwMmFkYmM0YjU1NzdjMjMzODM2YXAtMSwKKyAgICAtMHgxLmZjY2Y1YXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjExCisgICAgLTB4MS43YjA1ZDg2NGVjOTgwMmFkYmM0YjU1NzdjMjMzODM2YXAtMSwKKyAgICAweDEuZmNjZjVhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTIKKyAgICAweDEuMTc1MDgwODE4NWE5OThiYmNlY2MzYTZhYzBjYjI5MDdwLTEsCisgICAgLTB4MS5kYmZiYzhwMQorICB9LAorICB7IC8vIEVudHJ5IDYxMworICAgIC0weDEuMTc1MDgwODE4NWE5OThiYmNlY2MzYTZhYzBjYjI5MDdwLTEsCisgICAgMHgxLmRiZmJjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjE0CisgICAgMHgxLjQyYWMwZGQ5NDk1MjExODE2YmYwNGNhNTNiY2U0YmVhcC0yLAorICAgIC0weDEuYmIyODM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTUKKyAgICAtMHgxLjQyYWMwZGQ5NDk1MjExODE2YmYwNGNhNTNiY2U0YmVhcC0yLAorICAgIDB4MS5iYjI4MzZwMQorICB9LAorICB7IC8vIEVudHJ5IDYxNgorICAgIDB4MS4wNjZmY2EzOWE3MGI1MmQwNmYyY2Q3ZWFiNjljMzFmMnAtNCwKKyAgICAtMHgxLjlhNTRhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjE3CisgICAgLTB4MS4wNjZmY2EzOWE3MGI1MmQwNmYyY2Q3ZWFiNjljMzFmMnAtNCwKKyAgICAweDEuOWE1NGE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTgKKyAgICAtMHgxLjg3N2Q5MzEyOThlNmZiYzY1NGYwNjU1MzZjZmYyYjU0cC0zLAorICAgIC0weDEuNzk4MTEycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTkKKyAgICAweDEuODc3ZDkzMTI5OGU2ZmJjNjU0ZjA2NTUzNmNmZjJiNTRwLTMsCisgICAgMHgxLjc5ODExMnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjIwCisgICAgLTB4MS5iYzRiYzI4NzVlYjZkMzhlZGEzYjQ5Y2IyMzIwYjU2MXAtMiwKKyAgICAtMHgxLjU4YWQ4MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjIxCisgICAgMHgxLmJjNGJjMjg3NWViNmQzOGVkYTNiNDljYjIzMjBiNTYxcC0yLAorICAgIDB4MS41OGFkODBwMQorICB9LAorICB7IC8vIEVudHJ5IDYyMgorICAgIC0weDEuNGJlNDdkNjM1NGM0Y2VkNTM3ODBiMWI1MTlhY2RlYzJwLTEsCisgICAgLTB4MS4zN2Q5ZWVwMQorICB9LAorICB7IC8vIEVudHJ5IDYyMworICAgIDB4MS40YmU0N2Q2MzU0YzRjZWQ1Mzc4MGIxYjUxOWFjZGVjMnAtMSwKKyAgICAweDEuMzdkOWVlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjQKKyAgICAtMHgxLmEzZWQ4YmNiMzVjYmNmOGM2MDg5ZjgyYTkxYzMxZDVicC0xLAorICAgIC0weDEuMTcwNjVjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjUKKyAgICAweDEuYTNlZDhiY2IzNWNiY2Y4YzYwODlmODJhOTFjMzFkNWJwLTEsCisgICAgMHgxLjE3MDY1Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjI2CisgICAgLTB4MS5lMDdlZTQ5NmVhMTA5NjU0YzQyZTE3MWZkYzQ1MzdjNHAtMSwKKyAgICAtMHgxLmVjNjU5NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjI3CisgICAgMHgxLmUwN2VlNDk2ZWExMDk2NTRjNDJlMTcxZmRjNDUzN2M0cC0xLAorICAgIDB4MS5lYzY1OTRwMAorICB9LAorICB7IC8vIEVudHJ5IDYyOAorICAgIC0weDEuZmRhMjUyMjIxOTY4OWQwZTgwNjlkOTBmNWM5NjliOTJwLTEsCisgICAgLTB4MS5hYWJlNzBwMAorICB9LAorICB7IC8vIEVudHJ5IDYyOQorICAgIDB4MS5mZGEyNTIyMjE5Njg5ZDBlODA2OWQ5MGY1Yzk2OWI5MnAtMSwKKyAgICAweDEuYWFiZTcwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzAKKyAgICAtMHgxLmY5NmZlODAyZmU1NzAzNzJkMGZjYjZlOTM0YjQzMDYxcC0xLAorICAgIC0weDEuNjkxNzRjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzEKKyAgICAweDEuZjk2ZmU4MDJmZTU3MDM3MmQwZmNiNmU5MzRiNDMwNjFwLTEsCisgICAgMHgxLjY5MTc0Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjMyCisgICAgLTB4MS5kNDJkZWQ1NmFlODhhNmUxY2YyNzBhZjI3ZTZmMTgwNHAtMSwKKyAgICAtMHgxLjI3NzAyOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjMzCisgICAgMHgxLmQ0MmRlZDU2YWU4OGE2ZTFjZjI3MGFmMjdlNmYxODA0cC0xLAorICAgIDB4MS4yNzcwMjhwMAorICB9LAorICB7IC8vIEVudHJ5IDYzNAorICAgIC0weDEuOTA0YzQ1MzI2ZDZkZGUyMjQzODFkMWQ1OTBhZGE0MWNwLTEsCisgICAgLTB4MS5jYjkyMGFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzUKKyAgICAweDEuOTA0YzQ1MzI2ZDZkZGUyMjQzODFkMWQ1OTBhZGE0MWNwLTEsCisgICAgMHgxLmNiOTIwYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDYzNgorICAgIC0weDEuMzIzYjljYWRiYjE5ZTc1YTQ0NDgzZmI2NGFkOGRkZjZwLTEsCisgICAgLTB4MS40ODQzYzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzcKKyAgICAweDEuMzIzYjljYWRiYjE5ZTc1YTQ0NDgzZmI2NGFkOGRkZjZwLTEsCisgICAgMHgxLjQ4NDNjNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDYzOAorICAgIC0weDEuODA0NjI2NTRiZGU3NjZmYWY0N2YzMTQwZTI5MDk5NmRwLTIsCisgICAgLTB4MS44OWVhZmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzkKKyAgICAweDEuODA0NjI2NTRiZGU3NjZmYWY0N2YzMTQwZTI5MDk5NmRwLTIsCisgICAgMHgxLjg5ZWFmY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDY0MAorICAgIC0weDEuMDVlNGNhMjFmMzg2YTgyYmMyZTRlZmNkZWJiMTk2MmJwLTMsCisgICAgLTB4MS4wNjljZTBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDEKKyAgICAweDEuMDVlNGNhMjFmMzg2YTgyYmMyZTRlZmNkZWJiMTk2MmJwLTMsCisgICAgMHgxLjA2OWNlMHAtMworICB9LAorICB7IC8vIEVudHJ5IDY0MgorICAgIDB4MS4wNWU0MjM4MzBiZTAxZjlmZTNjNTdkMDY4NjdlMDA1NnAtMywKKyAgICAweDEuMDY5YzM4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjQzCisgICAgLTB4MS4wNWU0MjM4MzBiZTAxZjlmZTNjNTdkMDY4NjdlMDA1NnAtMywKKyAgICAtMHgxLjA2OWMzOHAtMworICB9LAorICB7IC8vIEVudHJ5IDY0NAorICAgIDB4MS44MDQ1ZDg3ODUyZjEzMDdmZWE2ZGM3NTFjNGQxNTk5MnAtMiwKKyAgICAweDEuODllYWE4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjQ1CisgICAgLTB4MS44MDQ1ZDg3ODUyZjEzMDdmZWE2ZGM3NTFjNGQxNTk5MnAtMiwKKyAgICAtMHgxLjg5ZWFhOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDY0NgorICAgIDB4MS4zMjNiN2IwNGVlODhjZmY5OGIyYTE2MjBlMWY2MWEwMXAtMSwKKyAgICAweDEuNDg0MzlhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQ3CisgICAgLTB4MS4zMjNiN2IwNGVlODhjZmY5OGIyYTE2MjBlMWY2MWEwMXAtMSwKKyAgICAtMHgxLjQ4NDM5YXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY0OAorICAgIDB4MS45MDRjMmIwMmFhNTk1MjhjZTA0NGJmMjIxM2M5Njg1OXAtMSwKKyAgICAweDEuY2I5MWUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjQ5CisgICAgLTB4MS45MDRjMmIwMmFhNTk1MjhjZTA0NGJmMjIxM2M5Njg1OXAtMSwKKyAgICAtMHgxLmNiOTFlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDY1MAorICAgIDB4MS5kNDJkZGQyNWIzNzk3ZTZhNjc5Zjc2ZTA1ZTZjM2UwOHAtMSwKKyAgICAweDEuMjc3MDE0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTEKKyAgICAtMHgxLmQ0MmRkZDI1YjM3OTdlNmE2NzlmNzZlMDVlNmMzZTA4cC0xLAorICAgIC0weDEuMjc3MDE0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTIKKyAgICAweDEuZjk2ZmUxYTBiMTJkMGFkNGZhOGM4MmQ4YWY5ODljNWFwLTEsCisgICAgMHgxLjY5MTczOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjUzCisgICAgLTB4MS5mOTZmZTFhMGIxMmQwYWQ0ZmE4YzgyZDhhZjk4OWM1YXAtMSwKKyAgICAtMHgxLjY5MTczOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjU0CisgICAgMHgxLmZkYTI1NWY5NjA5NGQ4ZmU0ZTg1OWM0Y2YwZGQ2OGE1cC0xLAorICAgIDB4MS5hYWJlNWNwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NQorICAgIC0weDEuZmRhMjU1Zjk2MDk0ZDhmZTRlODU5YzRjZjBkZDY4YTVwLTEsCisgICAgLTB4MS5hYWJlNWNwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NgorICAgIDB4MS5lMDdlZjI2Nzc0OGI5ODI3NzhmOGQ1MGQyOTgxYmIzYXAtMSwKKyAgICAweDEuZWM2NTgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTcKKyAgICAtMHgxLmUwN2VmMjY3NzQ4Yjk4Mjc3OGY4ZDUwZDI5ODFiYjNhcC0xLAorICAgIC0weDEuZWM2NTgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTgKKyAgICAweDEuYTNlZGEyYWRiMDExNDNmYjIxNDUzYjIwYmQxNzQ4ZmVwLTEsCisgICAgMHgxLjE3MDY1MnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjU5CisgICAgLTB4MS5hM2VkYTJhZGIwMTE0M2ZiMjE0NTNiMjBiZDE3NDhmZXAtMSwKKyAgICAtMHgxLjE3MDY1MnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjYwCisgICAgMHgxLjRiZTQ5YmQ4OGE2NGEwYmI0MTRkZGFjYWM0ZmE4ZGU5cC0xLAorICAgIDB4MS4zN2Q5ZTRwMQorICB9LAorICB7IC8vIEVudHJ5IDY2MQorICAgIC0weDEuNGJlNDliZDg4YTY0YTBiYjQxNGRkYWNhYzRmYThkZTlwLTEsCisgICAgLTB4MS4zN2Q5ZTRwMQorICB9LAorICB7IC8vIEVudHJ5IDY2MgorICAgIDB4MS5iYzRjMGE5YjM3ODJlMjIwYWU1NTc4NjM2OWNjZjE5MHAtMiwKKyAgICAweDEuNThhZDc2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjMKKyAgICAtMHgxLmJjNGMwYTliMzc4MmUyMjBhZTU1Nzg2MzY5Y2NmMTkwcC0yLAorICAgIC0weDEuNThhZDc2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjQKKyAgICAweDEuODc3ZTMwMWY0M2NhZmZmZTY2NDRhODk1OGYxMDg3MjlwLTMsCisgICAgMHgxLjc5ODEwOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjY1CisgICAgLTB4MS44NzdlMzAxZjQzY2FmZmZlNjY0NGE4OTU4ZjEwODcyOXAtMywKKyAgICAtMHgxLjc5ODEwOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjY2CisgICAgLTB4MS4wNjZlOGFlMWY4MjRhNjk4MTdlNmE4MDZlNjMxN2UyOHAtNCwKKyAgICAweDEuOWE1NDlhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjcKKyAgICAweDEuMDY2ZThhZTFmODI0YTY5ODE3ZTZhODA2ZTYzMTdlMjhwLTQsCisgICAgLTB4MS45YTU0OWFwMQorICB9LAorICB7IC8vIEVudHJ5IDY2OAorICAgIC0weDEuNDJhYmMxZWNhMTFhMGFkMTJjYTZlZWZmMTk3MzE4YWFwLTIsCisgICAgMHgxLmJiMjgyY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjY5CisgICAgMHgxLjQyYWJjMWVjYTExYTBhZDEyY2E2ZWVmZjE5NzMxOGFhcC0yLAorICAgIC0weDEuYmIyODJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzAKKyAgICAtMHgxLjE3NTA1ZWZiODExOTc3M2M2NDc0NjhiZTFkZmVlNDVlcC0xLAorICAgIDB4MS5kYmZiYmVwMQorICB9LAorICB7IC8vIEVudHJ5IDY3MQorICAgIDB4MS4xNzUwNWVmYjgxMTk3NzNjNjQ3NDY4YmUxZGZlZTQ1ZXAtMSwKKyAgICAtMHgxLmRiZmJiZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjcyCisgICAgLTB4MS43YjA1YmQ4MDkxY2Q3OWRmZjM1OWM4NDEyYjBkZTFhOXAtMSwKKyAgICAweDEuZmNjZjUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzMKKyAgICAweDEuN2IwNWJkODA5MWNkNzlkZmYzNTljODQxMmIwZGUxYTlwLTEsCisgICAgLTB4MS5mY2NmNTBwMQorICB9LAorICB7IC8vIEVudHJ5IDY3NAorICAgIC0weDEuYzVmMDU5ODJlYWJmMDIyNzQ4OTYwOTYxNjY2ZDU0MGRwLTEsCisgICAgMHgxLjBlZDE3MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjc1CisgICAgMHgxLmM1ZjA1OTgyZWFiZjAyMjc0ODk2MDk2MTY2NmQ1NDBkcC0xLAorICAgIC0weDEuMGVkMTcwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzYKKyAgICAtMHgxLmYzMjliZmJkYTgxMjJmODNlM2ExZWEwMjQyZWI3NmFhcC0xLAorICAgIDB4MS4xZjNiMzhwMgorICB9LAorICB7IC8vIEVudHJ5IDY3NworICAgIDB4MS5mMzI5YmZiZGE4MTIyZjgzZTNhMWVhMDI0MmViNzZhYXAtMSwKKyAgICAtMHgxLjFmM2IzOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjc4CisgICAgLTB4MS5mZmJjYTg4YWU5MGYwOTAwYjZkM2FkODllZGRkMmM4MHAtMSwKKyAgICAweDEuMmZhNXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjc5CisgICAgMHgxLmZmYmNhODhhZTkwZjA5MDBiNmQzYWQ4OWVkZGQyYzgwcC0xLAorICAgIC0weDEuMmZhNXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjgwCisgICAgLTB4MS5lYWQ2ODc0MDljOTVkY2FmNjFhZjk4NTEzNTE3ZjUwN3AtMSwKKyAgICAweDEuNDAwZWM4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODEKKyAgICAweDEuZWFkNjg3NDA5Yzk1ZGNhZjYxYWY5ODUxMzUxN2Y1MDdwLTEsCisgICAgLTB4MS40MDBlYzhwMgorICB9LAorICB7IC8vIEVudHJ5IDY4MgorICAgIC0weDEuYjVkNTRmZDc5MzcyYjkwZDVkNGM3YWNmN2FkYWVkNDJwLTEsCisgICAgMHgxLjUwNzg5MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjgzCisgICAgMHgxLmI1ZDU0ZmQ3OTM3MmI5MGQ1ZDRjN2FjZjdhZGFlZDQycC0xLAorICAgIC0weDEuNTA3ODkwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODQKKyAgICAtMHgxLjY0MzA5MmY0MmFlNzk3Mzc1NTMxNDIwYzAwNWNhMmNmcC0xLAorICAgIDB4MS42MGUyNThwMgorICB9LAorICB7IC8vIEVudHJ5IDY4NQorICAgIDB4MS42NDMwOTJmNDJhZTc5NzM3NTUzMTQyMGMwMDVjYTJjZnAtMSwKKyAgICAtMHgxLjYwZTI1OHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjg2CisgICAgLTB4MS5mNjdlZGYzYjdiZWU4NTU0ZDU0ZDg0ZWE4M2Y2Y2IyMXAtMiwKKyAgICAweDEuNzE0YzIwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODcKKyAgICAweDEuZjY3ZWRmM2I3YmVlODU1NGQ1NGQ4NGVhODNmNmNiMjFwLTIsCisgICAgLTB4MS43MTRjMjBwMgorICB9LAorICB7IC8vIEVudHJ5IDY4OAorICAgIC0weDEuMDNiZTRkOTNkOTQ5MzI1MzQwYjJmNDY0MjAxNTQ1YTdwLTIsCisgICAgMHgxLjgxYjVlOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjg5CisgICAgMHgxLjAzYmU0ZDkzZDk0OTMyNTM0MGIyZjQ2NDIwMTU0NWE3cC0yLAorICAgIC0weDEuODFiNWU4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTAKKyAgICAweDEuZWZiMjZjZmEyMGYyMDk4ZmY3ZTllNDJmMDI2MGViMDFwLTUsCisgICAgMHgxLmVmZmZmZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDY5MQorICAgIC0weDEuZWZiMjZjZmEyMGYyMDk4ZmY3ZTllNDJmMDI2MGViMDFwLTUsCisgICAgLTB4MS5lZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTIKKyAgICAweDEuZWZiMjZlZjkzMGM0ZDNmMmIwZGJlMTkzMWJhNWFlNjRwLTUsCisgICAgMHgxLmYwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjkzCisgICAgLTB4MS5lZmIyNmVmOTMwYzRkM2YyYjBkYmUxOTMxYmE1YWU2NHAtNSwKKyAgICAtMHgxLmYwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNjk0CisgICAgMHgxLmVmYjI3MGY4NDA5NzljNjViNzVlZTVjNjcwMTZhODY2cC01LAorICAgIDB4MS5mMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTUKKyAgICAtMHgxLmVmYjI3MGY4NDA5NzljNjViNzVlZTVjNjcwMTZhODY2cC01LAorICAgIC0weDEuZjAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgNjk2CisgICAgMHgxLmY2YmFhODE2ZmNlNWVhNWE2MGQ4YzlmZDJhMjg5MzgwcC00LAorICAgIDB4MS5mN2ZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTcKKyAgICAtMHgxLmY2YmFhODE2ZmNlNWVhNWE2MGQ4YzlmZDJhMjg5MzgwcC00LAorICAgIC0weDEuZjdmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgNjk4CisgICAgMHgxLmY2YmFhYTEzMWRlNjQzOGU1NjExMjc5ODY0ZmU3NjYzcC00LAorICAgIDB4MS5mOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDY5OQorICAgIC0weDEuZjZiYWFhMTMxZGU2NDM4ZTU2MTEyNzk4NjRmZTc2NjNwLTQsCisgICAgLTB4MS5mOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDcwMAorICAgIDB4MS5mNmJhYWMwZjNlZTY5NGU3NjBhMTM4YmMwNmM4YmUzZHAtNCwKKyAgICAweDEuZjgwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgNzAxCisgICAgLTB4MS5mNmJhYWMwZjNlZTY5NGU3NjBhMTM4YmMwNmM4YmUzZHAtNCwKKyAgICAtMHgxLmY4MDAwMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDcwMgorICAgIDB4MS40YThjMzk1NTUyZmI0MzJhZjMxNzgwZTg4M2M5OGY3MXAtMywKKyAgICAweDEuNGJmZmZlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzAzCisgICAgLTB4MS40YThjMzk1NTUyZmI0MzJhZjMxNzgwZTg4M2M5OGY3MXAtMywKKyAgICAtMHgxLjRiZmZmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDcwNAorICAgIDB4MS40YThjM2I0ZTljN2ZmZmQ0ODMwNWY0NGE0MmY1ZjUwZnAtMywKKyAgICAweDEuNGNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDUKKyAgICAtMHgxLjRhOGMzYjRlOWM3ZmZmZDQ4MzA1ZjQ0YTQyZjVmNTBmcC0zLAorICAgIC0weDEuNGNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDYKKyAgICAweDEuNGE4YzNkNDdlNjA0YTdkNTRmM2Y3ZGU0MDI0MDllMmNwLTMsCisgICAgMHgxLjRjMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDcwNworICAgIC0weDEuNGE4YzNkNDdlNjA0YTdkNTRmM2Y3ZGU0MDI0MDllMmNwLTMsCisgICAgLTB4MS40YzAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDgKKyAgICAweDEuMmU5Y2Q4MzYzMGViMzVjMTJlZmNmYjg0MTM1ODM5OThwLTIsCisgICAgMHgxLjMzMzMzMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcwOQorICAgIC0weDEuMmU5Y2Q4MzYzMGViMzVjMTJlZmNmYjg0MTM1ODM5OThwLTIsCisgICAgLTB4MS4zMzMzMzJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTAKKyAgICAweDEuMmU5Y2RhMWY1MmM4ODA0MjgzM2YyMzZmZjBmOWQ0ODZwLTIsCisgICAgMHgxLjMzMzMzNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxMQorICAgIC0weDEuMmU5Y2RhMWY1MmM4ODA0MjgzM2YyMzZmZjBmOWQ0ODZwLTIsCisgICAgLTB4MS4zMzMzMzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTIKKyAgICAweDEuMmU5Y2RjMDg3NGE1N2YxY2EwZjk3NmE5YjAxZTRhNzFwLTIsCisgICAgMHgxLjMzMzMzNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxMworICAgIC0weDEuMmU5Y2RjMDg3NGE1N2YxY2EwZjk3NmE5YjAxZTRhNzFwLTIsCisgICAgLTB4MS4zMzMzMzZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTQKKyAgICAweDEuM2ZhZWZiMmI2OGU2Nzg2ZWI2OTJiZDRlNDA0NTIxM2VwLTEsCisgICAgMHgxLjU5NDMxNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxNQorICAgIC0weDEuM2ZhZWZiMmI2OGU2Nzg2ZWI2OTJiZDRlNDA0NTIxM2VwLTEsCisgICAgLTB4MS41OTQzMTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTYKKyAgICAweDEuM2ZhZWZjYmI1N2MyNmIwZDg0YjYzZGJmYjcyYjQxM2JwLTEsCisgICAgMHgxLjU5NDMxOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxNworICAgIC0weDEuM2ZhZWZjYmI1N2MyNmIwZDg0YjYzZGJmYjcyYjQxM2JwLTEsCisgICAgLTB4MS41OTQzMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTgKKyAgICAweDEuM2ZhZWZlNGI0NjlkMWRmZDU2MWU2NjZlZGRhN2M2ZTZwLTEsCisgICAgMHgxLjU5NDMxYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxOQorICAgIC0weDEuM2ZhZWZlNGI0NjlkMWRmZDU2MWU2NjZlZGRhN2M2ZTZwLTEsCisgICAgLTB4MS41OTQzMWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjAKKyAgICAweDEuNjg4OGEzNzVhYjIyOGMxZTAzMWM0MDA1NzY5NTA5ZjlwLTEsCisgICAgMHgxLjhmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyMQorICAgIC0weDEuNjg4OGEzNzVhYjIyOGMxZTAzMWM0MDA1NzY5NTA5ZjlwLTEsCisgICAgLTB4MS44ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjIKKyAgICAweDEuNjg4OGE0ZTEzNGIyZWE1MjBiMjI2ZWNhODY5NGIzYTJwLTEsCisgICAgMHgxLjkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzIzCisgICAgLTB4MS42ODg4YTRlMTM0YjJlYTUyMGIyMjZlY2E4Njk0YjNhMnAtMSwKKyAgICAtMHgxLjkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzI0CisgICAgMHgxLjY4ODhhNjRjYmU0MWRmZmQ2ZTQ3NjhkY2NhNGRiNTNicC0xLAorICAgIDB4MS45MDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjUKKyAgICAtMHgxLjY4ODhhNjRjYmU0MWRmZmQ2ZTQ3NjhkY2NhNGRiNTNicC0xLAorICAgIC0weDEuOTAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzI2CisgICAgLTAuMGYsCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDcyNworICAgIDAuMGYsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNzI4CisgICAgMC4wLAorICAgIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDcyOQorICAgIDAuMGYsCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNzMwCisgICAgLTAuMGYsCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDczMQorICAgIDB4MS45MWY2NWRjY2ZlYWQzNTNkOGRiOWMzMmYxMjI2MjczMHAtNSwKKyAgICAweDEuOTIxZmI0cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzMyCisgICAgLTB4MS45MWY2NWRjY2ZlYWQzNTNkOGRiOWMzMmYxMjI2MjczMHAtNSwKKyAgICAtMHgxLjkyMWZiNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDczMworICAgIDB4MS45MWY2NWZjYzYwY2I2ZDA5ZmNjNWMzNWRkNmE3OThjOHAtNSwKKyAgICAweDEuOTIxZmI2cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzM0CisgICAgLTB4MS45MWY2NWZjYzYwY2I2ZDA5ZmNjNWMzNWRkNmE3OThjOHAtNSwKKyAgICAtMHgxLjkyMWZiNnAtNQorICB9LAorICB7IC8vIEVudHJ5IDczNQorICAgIDB4MS45MWY2NjFjYmMyZTlhMzQ0NzU3MWY3MmJjZmJjMjFlMnAtNSwKKyAgICAweDEuOTIxZmI4cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzM2CisgICAgLTB4MS45MWY2NjFjYmMyZTlhMzQ0NzU3MWY3MmJjZmJjMjFlMnAtNSwKKyAgICAtMHgxLjkyMWZiOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDczNworICAgIDB4MS45MTdhNmE3ZmU4Mjk3YmYwYTExMjVmYjAyYjIwMzhhZXAtNCwKKyAgICAweDEuOTIxZmI0cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzM4CisgICAgLTB4MS45MTdhNmE3ZmU4Mjk3YmYwYTExMjVmYjAyYjIwMzhhZXAtNCwKKyAgICAtMHgxLjkyMWZiNHAtNAorICB9LAorICB7IC8vIEVudHJ5IDczOQorICAgIDB4MS45MTdhNmM3ZDcxMDNiOWQ5MGUwOTYxNTE2NDQ0OWM2YnAtNCwKKyAgICAweDEuOTIxZmI2cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzQwCisgICAgLTB4MS45MTdhNmM3ZDcxMDNiOWQ5MGUwOTYxNTE2NDQ0OWM2YnAtNCwKKyAgICAtMHgxLjkyMWZiNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDc0MQorICAgIDB4MS45MTdhNmU3YWY5ZGRmMTdiOTE0ZTZkMmU4ZTgzYjMzZXAtNCwKKyAgICAweDEuOTIxZmI4cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzQyCisgICAgLTB4MS45MTdhNmU3YWY5ZGRmMTdiOTE0ZTZkMmU4ZTgzYjMzZXAtNCwKKyAgICAtMHgxLjkyMWZiOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDc0MworICAgIDB4MS44ZjhiODI4ODkyOTZiNWNmNzkwNGRiMWU3NGIzNDY2YnAtMywKKyAgICAweDEuOTIxZmI0cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzQ0CisgICAgLTB4MS44ZjhiODI4ODkyOTZiNWNmNzkwNGRiMWU3NGIzNDY2YnAtMywKKyAgICAtMHgxLjkyMWZiNHAtMworICB9LAorICB7IC8vIEVudHJ5IDc0NQorICAgIDB4MS44ZjhiODQ3ZWJjMTNiODk5OGVjNWIzN2U3MDY1MzQxZXAtMywKKyAgICAweDEuOTIxZmI2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzQ2CisgICAgLTB4MS44ZjhiODQ3ZWJjMTNiODk5OGVjNWIzN2U3MDY1MzQxZXAtMywKKyAgICAtMHgxLjkyMWZiNnAtMworICB9LAorICB7IC8vIEVudHJ5IDc0NworICAgIDB4MS44ZjhiODY3NGU1OTBhMjZhZWMzZWEwMWQzMGFlZDQ4NnAtMywKKyAgICAweDEuOTIxZmI4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzQ4CisgICAgLTB4MS44ZjhiODY3NGU1OTBhMjZhZWMzZWEwMWQzMGFlZDQ4NnAtMywKKyAgICAtMHgxLjkyMWZiOHAtMworICB9LAorICB7IC8vIEVudHJ5IDc0OQorICAgIDB4MS44N2RlMjkzZjU2OTcxN2E0MmEzYmRiMDFhZWFlMjA2M3AtMiwKKyAgICAweDEuOTIxZmI0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzUwCisgICAgLTB4MS44N2RlMjkzZjU2OTcxN2E0MmEzYmRiMDFhZWFlMjA2M3AtMiwKKyAgICAtMHgxLjkyMWZiNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDc1MQorICAgIDB4MS44N2RlMmIxODVkNTQxN2RjYTgwMGI4NWNhMTMxOTA0M3AtMiwKKyAgICAweDEuOTIxZmI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzUyCisgICAgLTB4MS44N2RlMmIxODVkNTQxN2RjYTgwMGI4NWNhMTMxOTA0M3AtMiwKKyAgICAtMHgxLjkyMWZiNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDc1MworICAgIDB4MS44N2RlMmNmMTY0MTBiNjFkOWFmZjdlNjI4ZmM4NTNiMnAtMiwKKyAgICAweDEuOTIxZmI4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzU0CisgICAgLTB4MS44N2RlMmNmMTY0MTBiNjFkOWFmZjdlNjI4ZmM4NTNiMnAtMiwKKyAgICAtMHgxLjkyMWZiOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDc1NQorICAgIDB4MS42YTA5ZTU4MmFhMzk0NTQ2MWI1YThhMDc4N2Q1YWI1YnAtMSwKKyAgICAweDEuOTIxZmI0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzU2CisgICAgLTB4MS42YTA5ZTU4MmFhMzk0NTQ2MWI1YThhMDc4N2Q1YWI1YnAtMSwKKyAgICAtMHgxLjkyMWZiNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc1NworICAgIDB4MS42YTA5ZTZlY2I0MWZkZDdlNjgxODcyYzg1NDg4NzAxOXAtMSwKKyAgICAweDEuOTIxZmI2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzU4CisgICAgLTB4MS42YTA5ZTZlY2I0MWZkZDdlNjgxODcyYzg1NDg4NzAxOXAtMSwKKyAgICAtMHgxLjkyMWZiNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDc1OQorICAgIDB4MS42YTA5ZTg1NmJlMDUwYmFjY2RlOWE3Njk2MWU4NGFhN3AtMSwKKyAgICAweDEuOTIxZmI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzYwCisgICAgLTB4MS42YTA5ZTg1NmJlMDUwYmFjY2RlOWE3Njk2MWU4NGFhN3AtMSwKKyAgICAtMHgxLjkyMWZiOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc2MQorICAgIDB4MS5mZmZmZmZmZmZmZmU2NTQ2Y2MzODIxMWMyNmRhYmVlYnAtMSwKKyAgICAweDEuOTIxZmI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZTY1NDZjYzM4MjExYzI2ZGFiZWVicC0xLAorICAgIC0weDEuOTIxZmI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjMKKyAgICAweDEuZmZmZmZmZmZmZmZmNzY1MjEyNDljNzQyMjkzMGVkODJwLTEsCisgICAgMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzY0CisgICAgLTB4MS5mZmZmZmZmZmZmZmY3NjUyMTI0OWM3NDIyOTMwZWQ4MnAtMSwKKyAgICAtMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzY1CisgICAgMHgxLmZmZmZmZmZmZmZmODg3NWQ1ODViNmQ2Y2ZjZTk3ZDljcC0xLAorICAgIDB4MS45MjFmYjhwMAorICB9LAorICB7IC8vIEVudHJ5IDc2NgorICAgIC0weDEuZmZmZmZmZmZmZmY4ODc1ZDU4NWI2ZDZjZmNlOTdkOWNwLTEsCisgICAgLTB4MS45MjFmYjhwMAorICB9LAorICB7IC8vIEVudHJ5IDc2NworICAgIDB4MS40NDQyZDE4NDY5ODgzMWYxNWI2MzE1YmZhNmI1YWU3NXAtMjMsCisgICAgMHgxLjkyMWZiNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzY4CisgICAgLTB4MS40NDQyZDE4NDY5ODgzMWYxNWI2MzE1YmZhNmI1YWU3NXAtMjMsCisgICAgLTB4MS45MjFmYjRwMQorICB9LAorICB7IC8vIEVudHJ5IDc2OQorICAgIC0weDEuNzc3YTVjZjcyY2VjNWZkNjE4OTZjYjRmNDBkMWRlNzlwLTI0LAorICAgIDB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDc3MAorICAgIDB4MS43NzdhNWNmNzJjZWM1ZmQ2MTg5NmNiNGY0MGQxZGU3OXAtMjQsCisgICAgLTB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDc3MQorICAgIC0weDEuNWRkZTk3M2RjYjM0NmFmYTQ2MjAzY2RkYzZmN2ZlOTdwLTIyLAorICAgIDB4MS45MjFmYjhwMQorICB9LAorICB7IC8vIEVudHJ5IDc3MgorICAgIDB4MS41ZGRlOTczZGNiMzQ2YWZhNDYyMDNjZGRjNmY3ZmU5N3AtMjIsCisgICAgLTB4MS45MjFmYjhwMQorICB9LAorICB7IC8vIEVudHJ5IDc3MworICAgIC0weDEuNDQ0MmQxODQ2OTg0MjE3NjI4ODcyZTU2ZWI1OGI0YzFwLTIyLAorICAgIDB4MS45MjFmYjRwMgorICB9LAorICB7IC8vIEVudHJ5IDc3NAorICAgIDB4MS40NDQyZDE4NDY5ODQyMTc2Mjg4NzJlNTZlYjU4YjRjMXAtMjIsCisgICAgLTB4MS45MjFmYjRwMgorICB9LAorICB7IC8vIEVudHJ5IDc3NQorICAgIDB4MS43NzdhNWNmNzJjZWFjYmY2ZWM2NTdlOTc3ZWY3NzFmMXAtMjMsCisgICAgMHgxLjkyMWZiNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNzc2CisgICAgLTB4MS43NzdhNWNmNzJjZWFjYmY2ZWM2NTdlOTc3ZWY3NzFmMXAtMjMsCisgICAgLTB4MS45MjFmYjZwMgorICB9LAorICB7IC8vIEVudHJ5IDc3NworICAgIDB4MS41ZGRlOTczZGNiMWZmZjEwYmIwMzg4NDc5ZTgyZjRiYnAtMjEsCisgICAgMHgxLjkyMWZiOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzc4CisgICAgLTB4MS41ZGRlOTczZGNiMWZmZjEwYmIwMzg4NDc5ZTgyZjRiYnAtMjEsCisgICAgLTB4MS45MjFmYjhwMgorICB9LAorICB7IC8vIEVudHJ5IDc3OQorICAgIC0weDEuNDQ0MmQxODQ2OTczZGY4OTVkMTc5MTAyM2RlZDUxM2NwLTIxLAorICAgIDB4MS45MjFmYjRwMworICB9LAorICB7IC8vIEVudHJ5IDc4MAorICAgIDB4MS40NDQyZDE4NDY5NzNkZjg5NWQxNzkxMDIzZGVkNTEzY3AtMjEsCisgICAgLTB4MS45MjFmYjRwMworICB9LAorICB7IC8vIEVudHJ5IDc4MQorICAgIDB4MS43NzdhNWNmNzJjZTQ3YzdhM2JhMDRiYzJhNjA3YTlhN3AtMjIsCisgICAgMHgxLjkyMWZiNnAzCisgIH0sCisgIHsgLy8gRW50cnkgNzgyCisgICAgLTB4MS43NzdhNWNmNzJjZTQ3YzdhM2JhMDRiYzJhNjA3YTlhN3AtMjIsCisgICAgLTB4MS45MjFmYjZwMworICB9LAorICB7IC8vIEVudHJ5IDc4MworICAgIDB4MS41ZGRlOTczZGNhY2U0ZjZhOGU5MGJkMTVlMDA2MTBmOHAtMjAsCisgICAgMHgxLjkyMWZiOHAzCisgIH0sCisgIHsgLy8gRW50cnkgNzg0CisgICAgLTB4MS41ZGRlOTczZGNhY2U0ZjZhOGU5MGJkMTVlMDA2MTBmOHAtMjAsCisgICAgLTB4MS45MjFmYjhwMworICB9LAorICB7IC8vIEVudHJ5IDc4NQorICAgIC0weDEuNDQ0MmQxODQ2OTMyZDdkNjJmNTkyMDkzODhjN2Y3Y2FwLTIwLAorICAgIDB4MS45MjFmYjRwNAorICB9LAorICB7IC8vIEVudHJ5IDc4NgorICAgIDB4MS40NDQyZDE4NDY5MzJkN2Q2MmY1OTIwOTM4OGM3ZjdjYXAtMjAsCisgICAgLTB4MS45MjFmYjRwNAorICB9LAorICB7IC8vIEVudHJ5IDc4NworICAgIDB4MS43NzdhNWNmNzJjY2IzZTg3Nzg4YjgxMTIyOWU3MjViY3AtMjEsCisgICAgMHgxLjkyMWZiNnA0CisgIH0sCisgIHsgLy8gRW50cnkgNzg4CisgICAgLTB4MS43NzdhNWNmNzJjY2IzZTg3Nzg4YjgxMTIyOWU3MjViY3AtMjEsCisgICAgLTB4MS45MjFmYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDc4OQorICAgIDB4MS41ZGRlOTczZGM5ODc5MGQxZGNjNjAyYmQxYjg2YmNjYXAtMTksCisgICAgMHgxLjkyMWZiOHA0CisgIH0sCisgIHsgLy8gRW50cnkgNzkwCisgICAgLTB4MS41ZGRlOTczZGM5ODc5MGQxZGNjNjAyYmQxYjg2YmNjYXAtMTksCisgICAgLTB4MS45MjFmYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDc5MQorICAgIC0weDEuNDQ0MmQxODQ2ODJlYjkwOTc4NWZhZDE4YmNiNWRiZmNwLTE5LAorICAgIDB4MS45MjFmYjRwNQorICB9LAorICB7IC8vIEVudHJ5IDc5MgorICAgIDB4MS40NDQyZDE4NDY4MmViOTA5Nzg1ZmFkMThiY2I1ZGJmY3AtMTksCisgICAgLTB4MS45MjFmYjRwNQorICB9LAorICB7IC8vIEVudHJ5IDc5MworICAgIDB4MS43NzdhNWNmNzJjNjY0NmJjNmMzODYwN2ViMzRlZWExM3AtMjAsCisgICAgMHgxLjkyMWZiNnA1CisgIH0sCisgIHsgLy8gRW50cnkgNzk0CisgICAgLTB4MS43NzdhNWNmNzJjNjY0NmJjNmMzODYwN2ViMzRlZWExM3AtMjAsCisgICAgLTB4MS45MjFmYjZwNQorICB9LAorICB7IC8vIEVudHJ5IDc5NQorICAgIDB4MS41ZGRlOTczZGM0NmM5NjZmMTVhMjQwM2Q2MGNkMTRkMHAtMTgsCisgICAgMHgxLjkyMWZiOHA1CisgIH0sCisgIHsgLy8gRW50cnkgNzk2CisgICAgLTB4MS41ZGRlOTczZGM0NmM5NjZmMTVhMjQwM2Q2MGNkMTRkMHAtMTgsCisgICAgLTB4MS45MjFmYjhwNQorICB9LAorICB7IC8vIEVudHJ5IDc5NworICAgIC0weDEuNDQ0MmQxODQ2NDFlM2RkNjljN2VjMzJlMTRhMjA5YTVwLTE4LAorICAgIDB4MS45MjFmYjRwNgorICB9LAorICB7IC8vIEVudHJ5IDc5OAorICAgIDB4MS40NDQyZDE4NDY0MWUzZGQ2OWM3ZWMzMmUxNGEyMDlhNXAtMTgsCisgICAgLTB4MS45MjFmYjRwNgorICB9LAorICB7IC8vIEVudHJ5IDc5OQorICAgIDB4MS43NzdhNWNmNzJhZDI2NzkwM2FlYzgxMTg3NzhiM2I1YXAtMTksCisgICAgMHgxLjkyMWZiNnA2CisgIH0sCisgIHsgLy8gRW50cnkgODAwCisgICAgLTB4MS43NzdhNWNmNzJhZDI2NzkwM2FlYzgxMTg3NzhiM2I1YXAtMTksCisgICAgLTB4MS45MjFmYjZwNgorICB9LAorICB7IC8vIEVudHJ5IDgwMQorICAgIDB4MS41ZGRlOTczZGIwMDBhY2UzZjk4NWE0NzNlYTFmYzAzOXAtMTcsCisgICAgMHgxLjkyMWZiOHA2CisgIH0sCisgIHsgLy8gRW50cnkgODAyCisgICAgLTB4MS41ZGRlOTczZGIwMDBhY2UzZjk4NWE0NzNlYTFmYzAzOXAtMTcsCisgICAgLTB4MS45MjFmYjhwNgorICB9LAorICB7IC8vIEVudHJ5IDgwMworICAgIC0weDEuNDQ0MmQxODQ1M2RjNTEwYjJkNDk1YjhiZjc5YmQxY2VwLTE3LAorICAgIDB4MS45MjFmYjRwNworICB9LAorICB7IC8vIEVudHJ5IDgwNAorICAgIDB4MS40NDQyZDE4NDUzZGM1MTBiMmQ0OTViOGJmNzliZDFjZXAtMTcsCisgICAgLTB4MS45MjFmYjRwNworICB9LAorICB7IC8vIEVudHJ5IDgwNQorICAgIDB4MS43NzdhNWNmNzI0ODJlYWRmNzVjNzMxZjk3MjUwNzcxOHAtMTgsCisgICAgMHgxLjkyMWZiNnA3CisgIH0sCisgIHsgLy8gRW50cnkgODA2CisgICAgLTB4MS43NzdhNWNmNzI0ODJlYWRmNzVjNzMxZjk3MjUwNzcxOHAtMTgsCisgICAgLTB4MS45MjFmYjZwNworICB9LAorICB7IC8vIEVudHJ5IDgwNworICAgIDB4MS41ZGRlOTczZDVlNTEwNmI3OTAzYTE4YTU1MmFlZmM2ZXAtMTYsCisgICAgMHgxLjkyMWZiOHA3CisgIH0sCisgIHsgLy8gRW50cnkgODA4CisgICAgLTB4MS41ZGRlOTczZDVlNTEwNmI3OTAzYTE4YTU1MmFlZmM2ZXAtMTYsCisgICAgLTB4MS45MjFmYjhwNworICB9LAorICB7IC8vIEVudHJ5IDgwOQorICAgIDB4MS42YTA5ZjE5NDBiODBjOGUyNWNmYzhjMTBkNDI1NzZjNnAtMSwKKyAgICAweDEuMmQ5N2M0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTAKKyAgICAtMHgxLjZhMDlmMTk0MGI4MGM4ZTI1Y2ZjOGMxMGQ0MjU3NmM2cC0xLAorICAgIC0weDEuMmQ5N2M0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTEKKyAgICAweDEuNmEwOWViZWJlNDA4ODkyNDVkNTdjNWM5ZDkwYTZkODJwLTEsCisgICAgMHgxLjJkOTdjNnAxCisgIH0sCisgIHsgLy8gRW50cnkgODEyCisgICAgLTB4MS42YTA5ZWJlYmU0MDg4OTI0NWQ1N2M1YzlkOTBhNmQ4MnAtMSwKKyAgICAtMHgxLjJkOTdjNnAxCisgIH0sCisgIHsgLy8gRW50cnkgODEzCisgICAgMHgxLjZhMDllNjQzYmM3OWE4Yzc5ZWY0YmYxODc3MjdlMjY5cC0xLAorICAgIDB4MS4yZDk3YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDgxNAorICAgIC0weDEuNmEwOWU2NDNiYzc5YThjNzllZjRiZjE4NzcyN2UyNjlwLTEsCisgICAgLTB4MS4yZDk3YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDgxNQorICAgIC0weDEuNmEwOWRmMTk3MDRjZjE0MTA4ZTA5MDAwZmY2Mzc0YmZwLTEsCisgICAgMHgxLmY2YTdhMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODE2CisgICAgMHgxLjZhMDlkZjE5NzA0Y2YxNDEwOGUwOTAwMGZmNjM3NGJmcC0xLAorICAgIC0weDEuZjZhN2EwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTcKKyAgICAtMHgxLjZhMDllNGMxOTdmODdhY2UxYzgxYjQzMDIyYmUzOWIxcC0xLAorICAgIDB4MS5mNmE3YTJwMQorICB9LAorICB7IC8vIEVudHJ5IDgxOAorICAgIDB4MS42YTA5ZTRjMTk3Zjg3YWNlMWM4MWI0MzAyMmJlMzliMXAtMSwKKyAgICAtMHgxLmY2YTdhMnAxCisgIH0sCisgIHsgLy8gRW50cnkgODE5CisgICAgLTB4MS42YTA5ZWE2OWJmOGQ2M2JjZTQwOTU4ZjVjNGI0ZjE1NXAtMSwKKyAgICAweDEuZjZhN2E0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjAKKyAgICAweDEuNmEwOWVhNjliZjhkNjNiY2U0MDk1OGY1YzRiNGYxNTVwLTEsCisgICAgLTB4MS5mNmE3YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDgyMQorICAgIC0weDEuZmZmZmZmZmZmZjA2NWNiMjQwYmI4Zjk1MTlkMmM2ZjFwLTEsCisgICAgMHgxLjJkOTdjNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODIyCisgICAgMHgxLmZmZmZmZmZmZmYwNjVjYjI0MGJiOGY5NTE5ZDJjNmYxcC0xLAorICAgIC0weDEuMmQ5N2M0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjMKKyAgICAtMHgxLmZmZmZmZmZmZmZjMzI5Mzk4OThmNDY0YWFmYzJlNzRhcC0xLAorICAgIDB4MS4yZDk3YzZwMgorICB9LAorICB7IC8vIEVudHJ5IDgyNAorICAgIDB4MS5mZmZmZmZmZmZmYzMyOTM5ODk4ZjQ2NGFhZmMyZTc0YXAtMSwKKyAgICAtMHgxLjJkOTdjNnAyCisgIH0sCisgIHsgLy8gRW50cnkgODI1CisgICAgLTB4MS5mZmZmZmZmZmZmZmZmNWMwZDI2MzBlZTBhMWZiNGU3YnAtMSwKKyAgICAweDEuMmQ5N2M4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjYKKyAgICAweDEuZmZmZmZmZmZmZmZmZjVjMGQyNjMwZWUwYTFmYjRlN2JwLTEsCisgICAgLTB4MS4yZDk3YzhwMgorICB9LAorICB7IC8vIEVudHJ5IDgyNworICAgIC0weDEuNmEwOWY1MjkzMTZjZGU1YTE5MGQyMzVjYzRjY2I4MjVwLTEsCisgICAgMHgxLjVmZGJiY3AyCisgIH0sCisgIHsgLy8gRW50cnkgODI4CisgICAgMHgxLjZhMDlmNTI5MzE2Y2RlNWExOTBkMjM1Y2M0Y2NiODI1cC0xLAorICAgIC0weDEuNWZkYmJjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjkKKyAgICAtMHgxLjZhMDllOWQ4ZTI4MjY3NzA1NjdlYTgxOGIyZTg5OTYwcC0xLAorICAgIDB4MS41ZmRiYmVwMgorICB9LAorICB7IC8vIEVudHJ5IDgzMAorICAgIDB4MS42YTA5ZTlkOGUyODI2NzcwNTY3ZWE4MThiMmU4OTk2MHAtMSwKKyAgICAtMHgxLjVmZGJiZXAyCisgIH0sCisgIHsgLy8gRW50cnkgODMxCisgICAgLTB4MS42YTA5ZGU4ODkzM2Q2ZTBjMWRiNzhlMWQ3Y2QxNTE3M3AtMSwKKyAgICAweDEuNWZkYmMwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzIKKyAgICAweDEuNmEwOWRlODg5MzNkNmUwYzFkYjc4ZTFkN2NkMTUxNzNwLTEsCisgICAgLTB4MS41ZmRiYzBwMgorICB9LAorICB7IC8vIEVudHJ5IDgzMworICAgIDB4MS42YTA5ZDAzM2ZhNzE1YTQwN2E2ZjAzZDAxYjkxMTEzZnAtMSwKKyAgICAweDEuYzQ2M2E4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzQKKyAgICAtMHgxLjZhMDlkMDMzZmE3MTVhNDA3YTZmMDNkMDFiOTExMTNmcC0xLAorICAgIC0weDEuYzQ2M2E4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzUKKyAgICAweDEuNmEwOWRiODQ0YTI4Zjg2MzU4NTFmZGY4ODE4NTE1ZWZwLTEsCisgICAgMHgxLmM0NjNhYXAyCisgIH0sCisgIHsgLy8gRW50cnkgODM2CisgICAgLTB4MS42YTA5ZGI4NDRhMjhmODYzNTg1MWZkZjg4MTg1MTVlZnAtMSwKKyAgICAtMHgxLmM0NjNhYXAyCisgIH0sCisgIHsgLy8gRW50cnkgODM3CisgICAgMHgxLjZhMDllNmQ0OTk4NjE0MGY1NTIyNmZjNTg2NzI2MTJjcC0xLAorICAgIDB4MS5jNDYzYWNwMgorICB9LAorICB7IC8vIEVudHJ5IDgzOAorICAgIC0weDEuNmEwOWU2ZDQ5OTg2MTQwZjU1MjI2ZmM1ODY3MjYxMmNwLTEsCisgICAgLTB4MS5jNDYzYWNwMgorICB9LAorICB7IC8vIEVudHJ5IDgzOQorICAgIDB4MS5mZmZmZmZmZmZmOTUzOTc5MzRjYWMxZjI4NTMyZDNkM3AtMSwKKyAgICAweDEuZjZhN2EwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDAKKyAgICAtMHgxLmZmZmZmZmZmZmY5NTM5NzkzNGNhYzFmMjg1MzJkM2QzcC0xLAorICAgIC0weDEuZjZhN2EwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDEKKyAgICAweDEuZmZmZmZmZmZmZmZhOGU1YWFlMmJiOTNhZTU5MGY5ODRwLTEsCisgICAgMHgxLmY2YTdhMnAyCisgIH0sCisgIHsgLy8gRW50cnkgODQyCisgICAgLTB4MS5mZmZmZmZmZmZmZmE4ZTVhYWUyYmI5M2FlNTkwZjk4NHAtMSwKKyAgICAtMHgxLmY2YTdhMnAyCisgIH0sCisgIHsgLy8gRW50cnkgODQzCisgICAgMHgxLmZmZmZmZmZmZmZkZmUzM2MyNzhjYjQ4YTU5ZWUzZWYycC0xLAorICAgIDB4MS5mNmE3YTRwMgorICB9LAorICB7IC8vIEVudHJ5IDg0NAorICAgIC0weDEuZmZmZmZmZmZmZmRmZTMzYzI3OGNiNDhhNTllZTNlZjJwLTEsCisgICAgLTB4MS5mNmE3YTRwMgorICB9LAorICB7IC8vIEVudHJ5IDg0NQorICAgIDB4MS42YTBhMDQwZWE1YzMyYmE0YWZiZWI4NmE2MTRjNWQxNnAtMSwKKyAgICAweDEuMTQ3NWNhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDYKKyAgICAtMHgxLjZhMGEwNDBlYTVjMzJiYTRhZmJlYjg2YTYxNGM1ZDE2cC0xLAorICAgIC0weDEuMTQ3NWNhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDcKKyAgICAweDEuNmEwOWVkNmUwODgyMTJiMWUyNjBhNTEzMmQ2OTU5YjdwLTEsCisgICAgMHgxLjE0NzVjY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODQ4CisgICAgLTB4MS42YTA5ZWQ2ZTA4ODIxMmIxZTI2MGE1MTMyZDY5NTliN3AtMSwKKyAgICAtMHgxLjE0NzVjY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODQ5CisgICAgMHgxLjZhMDlkNmNkNjlkNmVmZDFhNmZhMmRkNGM2MTdjYmJlcC0xLAorICAgIDB4MS4xNDc1Y2VwMworICB9LAorICB7IC8vIEVudHJ5IDg1MAorICAgIC0weDEuNmEwOWQ2Y2Q2OWQ2ZWZkMWE2ZmEyZGQ0YzYxN2NiYmVwLTEsCisgICAgLTB4MS4xNDc1Y2VwMworICB9LAorICB7IC8vIEVudHJ5IDg1MQorICAgIDB4MS5mOTk5MGU5MWE2NGFlNDg2NzU3ODc4YmRmZWUwZjcwM3AtMjAsCisgICAgMHgxLjJkOTdjNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODUyCisgICAgLTB4MS5mOTk5MGU5MWE2NGFlNDg2NzU3ODc4YmRmZWUwZjcwM3AtMjAsCisgICAgLTB4MS4yZDk3YzRwMworICB9LAorICB7IC8vIEVudHJ5IDg1MworICAgIDB4MS5mMzMyMWQyMzRlZDgxMjhhYWJiMDQ5OWE0M2I0ZGVmMnAtMjEsCisgICAgMHgxLjJkOTdjNnAzCisgIH0sCisgIHsgLy8gRW50cnkgODU0CisgICAgLTB4MS5mMzMyMWQyMzRlZDgxMjhhYWJiMDQ5OWE0M2I0ZGVmMnAtMjEsCisgICAgLTB4MS4yZDk3YzZwMworICB9LAorICB7IC8vIEVudHJ5IDg1NQorICAgIC0weDEuOTliYzViOTYxYjFhYzI5NmRiZTE5ODBmZDJjODkwYTBwLTI2LAorICAgIDB4MS4yZDk3YzhwMworICB9LAorICB7IC8vIEVudHJ5IDg1NgorICAgIDB4MS45OWJjNWI5NjFiMWFjMjk2ZGJlMTk4MGZkMmM4OTBhMHAtMjYsCisgICAgLTB4MS4yZDk3YzhwMworICB9LAorICB7IC8vIEVudHJ5IDg1NworICAgIC0weDEuNmEwOWMxNGU4M2Y4ZGIwODBkMTIyM2Y4ODdjYzEyZWNwLTEsCisgICAgMHgxLjQ2YjljMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODU4CisgICAgMHgxLjZhMDljMTRlODNmOGRiMDgwZDEyMjNmODg3Y2MxMmVjcC0xLAorICAgIC0weDEuNDZiOWMwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTkKKyAgICAtMHgxLjZhMDlkN2VmMjNmYmVjMWVkODEyZTgwN2JlYjA0OTJmcC0xLAorICAgIDB4MS40NmI5YzJwMworICB9LAorICB7IC8vIEVudHJ5IDg2MAorICAgIDB4MS42YTA5ZDdlZjIzZmJlYzFlZDgxMmU4MDdiZWIwNDkyZnAtMSwKKyAgICAtMHgxLjQ2YjljMnAzCisgIH0sCisgIHsgLy8gRW50cnkgODYxCisgICAgLTB4MS42YTA5ZWU4ZmMyOTRmMzVkYjNlZmNlNTY1MzY1YWY4OXAtMSwKKyAgICAweDEuNDZiOWM0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjIKKyAgICAweDEuNmEwOWVlOGZjMjk0ZjM1ZGIzZWZjZTU2NTM2NWFmODlwLTEsCisgICAgLTB4MS40NmI5YzRwMworICB9LAorICB7IC8vIEVudHJ5IDg2MworICAgIC0weDEuZmZmZmZmZmZmZTRjOTZiMzk3ZDk1MWNiMjE4NjFjOTVwLTEsCisgICAgMHgxLjVmZGJiY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODY0CisgICAgMHgxLmZmZmZmZmZmZmU0Yzk2YjM5N2Q5NTFjYjIxODYxYzk1cC0xLAorICAgIC0weDEuNWZkYmJjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjUKKyAgICAtMHgxLmZmZmZmZmZmZmZlODUxMmFlYmI1NmM5ZTc1YjQxOTQxcC0xLAorICAgIDB4MS41ZmRiYmVwMworICB9LAorICB7IC8vIEVudHJ5IDg2NgorICAgIDB4MS5mZmZmZmZmZmZmZTg1MTJhZWJiNTZjOWU3NWI0MTk0MXAtMSwKKyAgICAtMHgxLjVmZGJiZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODY3CisgICAgLTB4MS5mZmZmZmZmZmZmODQwYmEyM2Y5MWM5Y2I0OWExMGIyN3AtMSwKKyAgICAweDEuNWZkYmMwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjgKKyAgICAweDEuZmZmZmZmZmZmZjg0MGJhMjNmOTFjOWNiNDlhMTBiMjdwLTEsCisgICAgLTB4MS41ZmRiYzBwMworICB9LAorICB7IC8vIEVudHJ5IDg2OQorICAgIC0weDEuNmEwYTEyZjQxOTdjOTBhMGVlNGEwOTRiNjM3N2FhMjNwLTEsCisgICAgMHgxLjc4ZmRiNnAzCisgIH0sCisgIHsgLy8gRW50cnkgODcwCisgICAgMHgxLjZhMGExMmY0MTk3YzkwYTBlZTRhMDk0YjYzNzdhYTIzcC0xLAorICAgIC0weDEuNzhmZGI2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzEKKyAgICAtMHgxLjZhMDlmYzUzN2QyOWNmMTMxZDY3MTA5OTFiZWJhYmVkcC0xLAorICAgIDB4MS43OGZkYjhwMworICB9LAorICB7IC8vIEVudHJ5IDg3MgorICAgIDB4MS42YTA5ZmM1MzdkMjljZjEzMWQ2NzEwOTkxYmViYWJlZHAtMSwKKyAgICAtMHgxLjc4ZmRiOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODczCisgICAgLTB4MS42YTA5ZTViMmRmNmQwMzg4ZjkwNzBjNDM0MGYzZTY2OXAtMSwKKyAgICAweDEuNzhmZGJhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzQKKyAgICAweDEuNmEwOWU1YjJkZjZkMDM4OGY5MDcwYzQzNDBmM2U2NjlwLTEsCisgICAgLTB4MS43OGZkYmFwMworICB9LAorICB7IC8vIEVudHJ5IDg3NQorICAgIDB4MS42YTA5YzkwOWFkZDRkYmYzMjI1M2EzOWQ1YzMwNjMwOHAtMSwKKyAgICAweDEuYWI0MWFlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzYKKyAgICAtMHgxLjZhMDljOTA5YWRkNGRiZjMyMjUzYTM5ZDVjMzA2MzA4cC0xLAorICAgIC0weDEuYWI0MWFlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzcKKyAgICAweDEuNmEwOWRmYWE0ZDVjM2E3ZjA1NmYzZTYxYTM2NWIyOWVwLTEsCisgICAgMHgxLmFiNDFiMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODc4CisgICAgLTB4MS42YTA5ZGZhYTRkNWMzYTdmMDU2ZjNlNjFhMzY1YjI5ZXAtMSwKKyAgICAtMHgxLmFiNDFiMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODc5CisgICAgMHgxLjZhMDlmNjRhZWI3OThmMmIzZTNkOWIxNmU4ZTNjNDEycC0xLAorICAgIDB4MS5hYjQxYjJwMworICB9LAorICB7IC8vIEVudHJ5IDg4MAorICAgIC0weDEuNmEwOWY2NGFlYjc5OGYyYjNlM2Q5YjE2ZThlM2M0MTJwLTEsCisgICAgLTB4MS5hYjQxYjJwMworICB9LAorICB7IC8vIEVudHJ5IDg4MQorICAgIDB4MS5mZmZmZmZmZmZjMjYwZDZmZmI4ZjRjZDhhYjNmZDAyMHAtMSwKKyAgICAweDEuYzQ2M2E4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODIKKyAgICAtMHgxLmZmZmZmZmZmZmMyNjBkNmZmYjhmNGNkOGFiM2ZkMDIwcC0xLAorICAgIC0weDEuYzQ2M2E4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODMKKyAgICAweDEuZmZmZmZmZmZmZjEyZDg5YmIwODRkZDc2Mjg0OGIzZDZwLTEsCisgICAgMHgxLmM0NjNhYXAzCisgIH0sCisgIHsgLy8gRW50cnkgODg0CisgICAgLTB4MS5mZmZmZmZmZmZmMTJkODliYjA4NGRkNzYyODQ4YjNkNnAtMSwKKyAgICAtMHgxLmM0NjNhYXAzCisgIH0sCisgIHsgLy8gRW50cnkgODg1CisgICAgMHgxLmZmZmZmZmZmZmZmZmEzYzc2NTdiODVlNWI0NGJiZDQ0cC0xLAorICAgIDB4MS5jNDYzYWNwMworICB9LAorICB7IC8vIEVudHJ5IDg4NgorICAgIC0weDEuZmZmZmZmZmZmZmZmYTNjNzY1N2I4NWU1YjQ0YmJkNDRwLTEsCisgICAgLTB4MS5jNDYzYWNwMworICB9LAorICB7IC8vIEVudHJ5IDg4NworICAgIDB4MS42YTBhMGIzOGYxMzRhMzI5NWEwYjM4NmU0MmYxY2E3YXAtMSwKKyAgICAweDEuZGQ4NWE0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODgKKyAgICAtMHgxLjZhMGEwYjM4ZjEzNGEzMjk1YTBiMzg2ZTQyZjFjYTdhcC0xLAorICAgIC0weDEuZGQ4NWE0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODkKKyAgICAweDEuNmEwOWY0OTg1NDY2MmVmZjFiMzU3NTVhMTI5MDQ0YTdwLTEsCisgICAgMHgxLmRkODVhNnAzCisgIH0sCisgIHsgLy8gRW50cnkgODkwCisgICAgLTB4MS42YTA5ZjQ5ODU0NjYyZWZmMWIzNTc1NWExMjkwNDRhN3AtMSwKKyAgICAtMHgxLmRkODVhNnAzCisgIH0sCisgIHsgLy8gRW50cnkgODkxCisgICAgMHgxLjZhMDlkZGY3YjYyZGIwZTA0NDBiNmE0MjYyMjAzYjExcC0xLAorICAgIDB4MS5kZDg1YThwMworICB9LAorICB7IC8vIEVudHJ5IDg5MgorICAgIC0weDEuNmEwOWRkZjdiNjJkYjBlMDQ0MGI2YTQyNjIyMDNiMTFwLTEsCisgICAgLTB4MS5kZDg1YThwMworICB9LAorICB7IC8vIEVudHJ5IDg5MworICAgIDB4MS40YWE5YzJmMmMxOWEwNjJiMThhMDE3YmNkNTQyNGZlYXAtMjAsCisgICAgMHgxLmY2YTdhMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODk0CisgICAgLTB4MS40YWE5YzJmMmMxOWEwNjJiMThhMDE3YmNkNTQyNGZlYXAtMjAsCisgICAgLTB4MS5mNmE3YTBwMworICB9LAorICB7IC8vIEVudHJ5IDg5NQorICAgIDB4MS4yYWE3MGJjYjA3ZDNhNDA3ODE1MTBkMjEzNjUyZTQzYXAtMjIsCisgICAgMHgxLmY2YTdhMnAzCisgIH0sCisgIHsgLy8gRW50cnkgODk2CisgICAgLTB4MS4yYWE3MGJjYjA3ZDNhNDA3ODE1MTBkMjEzNjUyZTQzYXAtMjIsCisgICAgLTB4MS5mNmE3YTJwMworICB9LAorICB7IC8vIEVudHJ5IDg5NworICAgIC0weDEuNmFhYzdhMWE3YmY1YmJkNDk1NzJmZmI4ZDc3NDk5MjJwLTIxLAorICAgIDB4MS5mNmE3YTRwMworICB9LAorICB7IC8vIEVudHJ5IDg5OAorICAgIDB4MS42YWFjN2ExYTdiZjViYmQ0OTU3MmZmYjhkNzc0OTkyMnAtMjEsCisgICAgLTB4MS5mNmE3YTRwMworICB9LAorICB7IC8vIEVudHJ5IDg5OQorICAgIC0weDEuNmEwOWEzODM5NTMxMjQwOTY4OTgzNDBmOTE2OGI5ZDVwLTEsCisgICAgMHgxLjA3ZTRjY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTAwCisgICAgMHgxLjZhMDlhMzgzOTUzMTI0MDk2ODk4MzQwZjkxNjhiOWQ1cC0xLAorICAgIC0weDEuMDdlNGNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDEKKyAgICAtMHgxLjZhMDlkMGM0ZDc4Njk5NjFjNDdhOWIwYjk2OGNjOTEwcC0xLAorICAgIDB4MS4wN2U0Y2VwNAorICB9LAorICB7IC8vIEVudHJ5IDkwMgorICAgIDB4MS42YTA5ZDBjNGQ3ODY5OTYxYzQ3YTliMGI5NjhjYzkxMHAtMSwKKyAgICAtMHgxLjA3ZTRjZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTAzCisgICAgLTB4MS42YTA5ZmUwNjE0MzNlNzc3MGQwMGNhNTlkNWE1NjI1MXAtMSwKKyAgICAweDEuMDdlNGQwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDQKKyAgICAweDEuNmEwOWZlMDYxNDMzZTc3NzBkMDBjYTU5ZDVhNTYyNTFwLTEsCisgICAgLTB4MS4wN2U0ZDBwNAorICB9LAorICB7IC8vIEVudHJ5IDkwNQorICAgIC0weDEuZmZmZmZmZmZmOTIxOWRhZTVmZWRhMWI1MzkzMzU4MDNwLTEsCisgICAgMHgxLjE0NzVjYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTA2CisgICAgMHgxLmZmZmZmZmZmZjkyMTlkYWU1ZmVkYTFiNTM5MzM1ODAzcC0xLAorICAgIC0weDEuMTQ3NWNhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDcKKyAgICAtMHgxLmZmZmZmZmZmZmY5ZDU1NmU4YzBiZjBhODBkNjEwODA4cC0xLAorICAgIDB4MS4xNDc1Y2NwNAorICB9LAorICB7IC8vIEVudHJ5IDkwOAorICAgIDB4MS5mZmZmZmZmZmZmOWQ1NTZlOGMwYmYwYTgwZDYxMDgwOHAtMSwKKyAgICAtMHgxLjE0NzVjY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTA5CisgICAgLTB4MS5mZmZmZmZmZmZlMTkwZDJlYjgyZTc0ZWZkMjA5MzIxNXAtMSwKKyAgICAweDEuMTQ3NWNlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTAKKyAgICAweDEuZmZmZmZmZmZmZTE5MGQyZWI4MmU3NGVmZDIwOTMyMTVwLTEsCisgICAgLTB4MS4xNDc1Y2VwNAorICB9LAorICB7IC8vIEVudHJ5IDkxMQorICAgIC0weDEuNmEwYTFhMWU2NGEyOGVlZTIzOGRjODUyODQ2YWFjZDVwLTEsCisgICAgMHgxLjIxMDZjOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTEyCisgICAgMHgxLjZhMGExYTFlNjRhMjhlZWUyMzhkYzg1Mjg0NmFhY2Q1cC0xLAorICAgIC0weDEuMjEwNmM4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTMKKyAgICAtMHgxLjZhMDllY2RkMmI3ODRiNjk5MDM0ZWU4MTAyNjcwZTI3cC0xLAorICAgIDB4MS4yMTA2Y2FwNAorICB9LAorICB7IC8vIEVudHJ5IDkxNAorICAgIDB4MS42YTA5ZWNkZDJiNzg0YjY5OTAzNGVlODEwMjY3MGUyN3AtMSwKKyAgICAtMHgxLjIxMDZjYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTE1CisgICAgLTB4MS42YTA5YmY5YmVjYTVlMDMxODgzMDE2MzljMDllZDU3NHAtMSwKKyAgICAweDEuMjEwNmNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTYKKyAgICAweDEuNmEwOWJmOWJlY2E1ZTAzMTg4MzAxNjM5YzA5ZWQ1NzRwLTEsCisgICAgLTB4MS4yMTA2Y2NwNAorICB9LAorICB7IC8vIEVudHJ5IDkxNworICAgIC0weDEuZjk5OTBlOTFhMjcwZDNiYzFjMDJmNGY2OWY0OGU2NzVwLTE5LAorICAgIDB4MS4yZDk3YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDkxOAorICAgIDB4MS5mOTk5MGU5MWEyNzBkM2JjMWMwMmY0ZjY5ZjQ4ZTY3NXAtMTksCisgICAgLTB4MS4yZDk3YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDkxOQorICAgIC0weDEuZjMzMjFkMjM0ZGVhY2Q2ZjNhZmQ3NTAzOTY4NTAxMmZwLTIwLAorICAgIDB4MS4yZDk3YzZwNAorICB9LAorICB7IC8vIEVudHJ5IDkyMAorICAgIDB4MS5mMzMyMWQyMzRkZWFjZDZmM2FmZDc1MDM5Njg1MDEyZnAtMjAsCisgICAgLTB4MS4yZDk3YzZwNAorICB9LAorICB7IC8vIEVudHJ5IDkyMQorICAgIDB4MS45OWJjNWI5NjFiMWFhMWM5ZTgwMjMwNzRmMzQwNmZkOXAtMjUsCisgICAgMHgxLjJkOTdjOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIyCisgICAgLTB4MS45OWJjNWI5NjFiMWFhMWM5ZTgwMjMwNzRmMzQwNmZkOXAtMjUsCisgICAgLTB4MS4yZDk3YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDkyMworICAgIDB4MS42YTA5OTQ5ZTFjZTFlYzUwMWFmY2IzNWQ3MzFiZjYyY3AtMSwKKyAgICAweDEuM2EyOGMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjQKKyAgICAtMHgxLjZhMDk5NDllMWNlMWVjNTAxYWZjYjM1ZDczMWJmNjJjcC0xLAorICAgIC0weDEuM2EyOGMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjUKKyAgICAweDEuNmEwOWMxZGY2MTE0MTAwYzY1ZDFmZjZjNTU3NTVlNzJwLTEsCisgICAgMHgxLjNhMjhjNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTI2CisgICAgLTB4MS42YTA5YzFkZjYxMTQxMDBjNjVkMWZmNmM1NTc1NWU3MnAtMSwKKyAgICAtMHgxLjNhMjhjNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTI3CisgICAgMHgxLjZhMDllZjIwOWY5ZTBjYzEzMzI0ZGRmMmIzNjE1NTNmcC0xLAorICAgIDB4MS4zYTI4YzZwNAorICB9LAorICB7IC8vIEVudHJ5IDkyOAorICAgIC0weDEuNmEwOWVmMjA5ZjllMGNjMTMzMjRkZGYyYjM2MTU1M2ZwLTEsCisgICAgLTB4MS4zYTI4YzZwNAorICB9LAorICB7IC8vIEVudHJ5IDkyOQorICAgIDB4MS5mZmZmZmZmZmY1M2Y0NzZlYzRmNTlmMjZjNGJjZGZhMHAtMSwKKyAgICAweDEuNDZiOWMwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzAKKyAgICAtMHgxLmZmZmZmZmZmZjUzZjQ3NmVjNGY1OWYyNmM0YmNkZmEwcC0xLAorICAgIC0weDEuNDZiOWMwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzEKKyAgICAweDEuZmZmZmZmZmZmZTVkMjA5N2IzNDMzNGFkNjc5ZGQ3YTRwLTEsCisgICAgMHgxLjQ2YjljMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTMyCisgICAgLTB4MS5mZmZmZmZmZmZlNWQyMDk3YjM0MzM0YWQ2NzlkZDdhNHAtMSwKKyAgICAtMHgxLjQ2YjljMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTMzCisgICAgMHgxLmZmZmZmZmZmZmY3YWY5YzBhMTlhMDA1YzU2NWM2YWY3cC0xLAorICAgIDB4MS40NmI5YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNAorICAgIC0weDEuZmZmZmZmZmZmZjdhZjljMGExOWEwMDVjNTY1YzZhZjdwLTEsCisgICAgLTB4MS40NmI5YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDkzNQorICAgIDB4MS42YTBhMjkwM2Q3NzM5MjViMDUyZmIwMDZhYzY3MGMyM3AtMSwKKyAgICAweDEuNTM0YWJlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzYKKyAgICAtMHgxLjZhMGEyOTAzZDc3MzkyNWIwNTJmYjAwNmFjNjcwYzIzcC0xLAorICAgIC0weDEuNTM0YWJlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzcKKyAgICAweDEuNmEwOWZiYzJhMDI1ZmRhZTkxODQ2NmZhMDAxNDIxNDNwLTEsCisgICAgMHgxLjUzNGFjMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTM4CisgICAgLTB4MS42YTA5ZmJjMmEwMjVmZGFlOTE4NDY2ZmEwMDE0MjE0M3AtMSwKKyAgICAtMHgxLjUzNGFjMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTM5CisgICAgMHgxLjZhMDljZTgxNjMzMDQxMTMxMzVhNjhhZTkzZDNmYTBlcC0xLAorICAgIDB4MS41MzRhYzJwNAorICB9LAorICB7IC8vIEVudHJ5IDk0MAorICAgIC0weDEuNmEwOWNlODE2MzMwNDExMzEzNWE2OGFlOTNkM2ZhMGVwLTEsCisgICAgLTB4MS41MzRhYzJwNAorICB9LAorICB7IC8vIEVudHJ5IDk0MQorICAgIDB4MS40ZGRkM2JhOWVjYjE5ZDZiYjZlYTE2MTEyMGU0NDdiOXAtMTksCisgICAgMHgxLjVmZGJiY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTQyCisgICAgLTB4MS40ZGRkM2JhOWVjYjE5ZDZiYjZlYTE2MTEyMGU0NDdiOXAtMTksCisgICAgLTB4MS41ZmRiYmNwNAorICB9LAorICB7IC8vIEVudHJ5IDk0MworICAgIDB4MS4zNzc0ZWVhN2I4OWQ4MGRmNzgxNmZlMjA4ZWM2OWZjMHAtMjEsCisgICAgMHgxLjVmZGJiZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQ0CisgICAgLTB4MS4zNzc0ZWVhN2I4OWQ4MGRmNzgxNmZlMjA4ZWM2OWZjMHAtMjEsCisgICAgLTB4MS41ZmRiYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDk0NQorICAgIC0weDEuNjQ0NTg4YWMyMzM0YTNkNTQ1MmQ5OTYwMjgyY2Y4MGRwLTIwLAorICAgIDB4MS41ZmRiYzBwNAorICB9LAorICB7IC8vIEVudHJ5IDk0NgorICAgIDB4MS42NDQ1ODhhYzIzMzRhM2Q1NDUyZDk5NjAyODJjZjgwZHAtMjAsCisgICAgLTB4MS41ZmRiYzBwNAorICB9LAorICB7IC8vIEVudHJ5IDk0NworICAgIC0weDEuNmEwOWIyZjllYTA0OWU4NTVlMzVjYTljZTdlMGQ4OWFwLTEsCisgICAgMHgxLjZjNmNiYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQ4CisgICAgMHgxLjZhMDliMmY5ZWEwNDllODU1ZTM1Y2E5Y2U3ZTBkODlhcC0xLAorICAgIC0weDEuNmM2Y2JhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDkKKyAgICAtMHgxLjZhMDllMDNiMmE2YjQ5YzYxMzRjNjdiNDJiYWVlNjY4cC0xLAorICAgIDB4MS42YzZjYmNwNAorICB9LAorICB7IC8vIEVudHJ5IDk1MAorICAgIDB4MS42YTA5ZTAzYjJhNmI0OWM2MTM0YzY3YjQyYmFlZTY2OHAtMSwKKyAgICAtMHgxLjZjNmNiY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTUxCisgICAgLTB4MS42YTBhMGQ3YzY1MjljZDg1ZGJiYjNhNWMyY2QzZmFlNXAtMSwKKyAgICAweDEuNmM2Y2JlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTIKKyAgICAweDEuNmEwYTBkN2M2NTI5Y2Q4NWRiYmIzYTVjMmNkM2ZhZTVwLTEsCisgICAgLTB4MS42YzZjYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDk1MworICAgIC0weDEuZmZmZmZmZmZmMDdmMGFiMTJhYThmNDFmMjljMTUzOTJwLTEsCisgICAgMHgxLjc4ZmRiNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTU0CisgICAgMHgxLmZmZmZmZmZmZjA3ZjBhYjEyYWE4ZjQxZjI5YzE1MzkycC0xLAorICAgIC0weDEuNzhmZGI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTUKKyAgICAtMHgxLmZmZmZmZmZmZmMzZjA1NDJkYjIxZGNiY2I4NDdkYWMzcC0xLAorICAgIDB4MS43OGZkYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDk1NgorICAgIDB4MS5mZmZmZmZmZmZjM2YwNTQyZGIyMWRjYmNiODQ3ZGFjM3AtMSwKKyAgICAtMHgxLjc4ZmRiOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTU3CisgICAgLTB4MS5mZmZmZmZmZmZmZmVmZmQ0OGJhYzczZWZlNjBjN2ZjZnAtMSwKKyAgICAweDEuNzhmZGJhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTgKKyAgICAweDEuZmZmZmZmZmZmZmZlZmZkNDhiYWM3M2VmZTYwYzdmY2ZwLTEsCisgICAgLTB4MS43OGZkYmFwNAorICB9LAorICB7IC8vIEVudHJ5IDk1OQorICAgIC0weDEuNmEwYTM3ZTk0OWE3YWQ2OThhMzIyMzRjNzNlNWFmYmFwLTEsCisgICAgMHgxLjg1OGViNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTYwCisgICAgMHgxLjZhMGEzN2U5NDlhN2FkNjk4YTMyMjM0YzczZTVhZmJhcC0xLAorICAgIC0weDEuODU4ZWI0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjEKKyAgICAtMHgxLjZhMGEwYWE4MTQzNmM3YThkMzNhMzhkNzA0MDMwZDE0cC0xLAorICAgIDB4MS44NThlYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDk2MgorICAgIDB4MS42YTBhMGFhODE0MzZjN2E4ZDMzYTM4ZDcwNDAzMGQxNHAtMSwKKyAgICAtMHgxLjg1OGViNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTYzCisgICAgLTB4MS42YTA5ZGQ2NmQ5MWRiOWJkN2JmMzU1ZmFmZjA4ZjE5NHAtMSwKKyAgICAweDEuODU4ZWI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjQKKyAgICAweDEuNmEwOWRkNjZkOTFkYjliZDdiZjM1NWZhZmYwOGYxOTRwLTEsCisgICAgLTB4MS44NThlYjhwNAorICB9LAorICB7IC8vIEVudHJ5IDk2NQorICAgIDB4MS5jMDQ4YjM4YThiYmY1OWY0MTRmZWM3MDc5MjA5OTI2ZXAtMywKKyAgICAweDEuZmZmZmZlcDYyCisgIH0sCisgIHsgLy8gRW50cnkgOTY2CisgICAgLTB4MS5jMDQ4YjM4YThiYmY1OWY0MTRmZWM3MDc5MjA5OTI2ZXAtMywKKyAgICAtMHgxLmZmZmZmZXA2MgorICB9LAorICB7IC8vIEVudHJ5IDk2NworICAgIDB4MS5mZmY2ZGZkNDJkYzU0NDMwYmMwNTc2YjAwYTg4YmQ5NHAtMSwKKyAgICAweDEucDYzCisgIH0sCisgIHsgLy8gRW50cnkgOTY4CisgICAgLTB4MS5mZmY2ZGZkNDJkYzU0NDMwYmMwNTc2YjAwYTg4YmQ5NHAtMSwKKyAgICAtMHgxLnA2MworICB9LAorICB7IC8vIEVudHJ5IDk2OQorICAgIC0weDEuZDY2MzdkMDcwMzQ3ZWU5NGU4MzA0NDVlNzY0ODY3MjdwLTEsCisgICAgMHgxLjAwMDAwMnA2MworICB9LAorICB7IC8vIEVudHJ5IDk3MAorICAgIDB4MS5kNjYzN2QwNzAzNDdlZTk0ZTgzMDQ0NWU3NjQ4NjcyN3AtMSwKKyAgICAtMHgxLjAwMDAwMnA2MworICB9LAorICB7IC8vIEVudHJ5IDk3MQorICAgIC0weDEuMGU1MjgzNjYxZGYwY2EwZjU1YWI2MTY3ZTE0NTE0YTFwLTEsCisgICAgMHgxLmZmZmZmZXAyNgorICB9LAorICB7IC8vIEVudHJ5IDk3MgorICAgIDB4MS4wZTUyODM2NjFkZjBjYTBmNTVhYjYxNjdlMTQ1MTRhMXAtMSwKKyAgICAtMHgxLmZmZmZmZXAyNgorICB9LAorICB7IC8vIEVudHJ5IDk3MworICAgIC0weDEuODZkY2M5YmFiYjBhNDBlZTg3NWNhYjNiOWU4OTI3NTdwLTEsCisgICAgMHgxLnAyNworICB9LAorICB7IC8vIEVudHJ5IDk3NAorICAgIDB4MS44NmRjYzliYWJiMGE0MGVlODc1Y2FiM2I5ZTg5Mjc1N3AtMSwKKyAgICAtMHgxLnAyNworICB9LAorICB7IC8vIEVudHJ5IDk3NQorICAgIDB4MS4xNzE5OTliNjI5ZmQ1YjYzNTdjNmRmZjRkNzgyN2Q5NXAtMSwKKyAgICAweDEuMDAwMDAycDI3CisgIH0sCisgIHsgLy8gRW50cnkgOTc2CisgICAgLTB4MS4xNzE5OTliNjI5ZmQ1YjYzNTdjNmRmZjRkNzgyN2Q5NXAtMSwKKyAgICAtMHgxLjAwMDAwMnAyNworICB9LAorICB7IC8vIEVudHJ5IDk3NworICAgIC0weDEuZTU3ZWMwOTIyMTk3MzU1MGQxZTU3OThkY2YwY2QyNWRwLTEsCisgICAgMHgxLmZmZmZmZXAyMworICB9LAorICB7IC8vIEVudHJ5IDk3OAorICAgIDB4MS5lNTdlYzA5MjIxOTczNTUwZDFlNTc5OGRjZjBjZDI1ZHAtMSwKKyAgICAtMHgxLmZmZmZmZXAyMworICB9LAorICB7IC8vIEVudHJ5IDk3OQorICAgIC0weDEuOGYyMmY4NDMzZDZlZGZlOWE0YWZmOTYyMjUxN2NhYTlwLTEsCisgICAgMHgxLnAyNAorICB9LAorICB7IC8vIEVudHJ5IDk4MAorICAgIDB4MS44ZjIyZjg0MzNkNmVkZmU5YTRhZmY5NjIyNTE3Y2FhOXAtMSwKKyAgICAtMHgxLnAyNAorICB9LAorICB7IC8vIEVudHJ5IDk4MQorICAgIDB4MS5jOWIwYzcyNjVjNTQzZjgwZmFmMDE3NDFjNjQ1ODU2MHAtMSwKKyAgICAweDEuMDAwMDAycDI0CisgIH0sCisgIHsgLy8gRW50cnkgOTgyCisgICAgLTB4MS5jOWIwYzcyNjVjNTQzZjgwZmFmMDE3NDFjNjQ1ODU2MHAtMSwKKyAgICAtMHgxLjAwMDAwMnAyNAorICB9LAorICB7IC8vIEVudHJ5IDk4MworICAgIC0weDEuODM3Yjk4YTMxODVkMTQ2NmQ4NTJmMGE3ZGMxZDI0OGVwLTEsCisgICAgMHgxLmZmZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTg0CisgICAgMHgxLjgzN2I5OGEzMTg1ZDE0NjZkODUyZjBhN2RjMWQyNDhlcC0xLAorICAgIC0weDEuZmZmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODUKKyAgICAtMHgxLjgzN2I5ZGRkYzFlYWU3MGNlOTgwNTVhMGU0NTBkOTNjcC0xLAorICAgIDB4MS5wMgorICB9LAorICB7IC8vIEVudHJ5IDk4NgorICAgIDB4MS44MzdiOWRkZGMxZWFlNzBjZTk4MDU1YTBlNDUwZDkzY3AtMSwKKyAgICAtMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgOTg3CisgICAgLTB4MS44MzdiYTg1MzE0YmRlNTJiMWU5YzJjOGVkMjcxMmM3MnAtMSwKKyAgICAweDEuMDAwMDAycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODgKKyAgICAweDEuODM3YmE4NTMxNGJkZTUyYjFlOWMyYzhlZDI3MTJjNzJwLTEsCisgICAgLTB4MS4wMDAwMDJwMgorICB9LAorICB7IC8vIEVudHJ5IDk4OQorICAgIDB4MS5kMThmNzA1NzNkYTYzMDEyZmExYzBlM2QyZWJiZTU5Y3AtMSwKKyAgICAweDEuZmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTAKKyAgICAtMHgxLmQxOGY3MDU3M2RhNjMwMTJmYTFjMGUzZDJlYmJlNTljcC0xLAorICAgIC0weDEuZmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTEKKyAgICAweDEuZDE4ZjZlYWQxYjQ0NWRmYWI4NDgxODgwMDljOWJiOTVwLTEsCisgICAgMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTkyCisgICAgLTB4MS5kMThmNmVhZDFiNDQ1ZGZhYjg0ODE4ODAwOWM5YmI5NXAtMSwKKyAgICAtMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgOTkzCisgICAgMHgxLmQxOGY2YjU4ZDY2YWU3MTEwYjJiNmY3Y2ZmYmE2ZWMxcC0xLAorICAgIDB4MS4wMDAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDk5NAorICAgIC0weDEuZDE4ZjZiNThkNjZhZTcxMTBiMmI2ZjdjZmZiYTZlYzFwLTEsCisgICAgLTB4MS4wMDAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDk5NQorICAgIDB4MS5hZWQ1NDdkYmVlNGQwZDg2ODBkMDgxM2QxZTRlMjFkMHAtMSwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTk2CisgICAgLTB4MS5hZWQ1NDdkYmVlNGQwZDg2ODBkMDgxM2QxZTRlMjFkMHAtMSwKKyAgICAtMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDk5NworICAgIDB4MS5hZWQ1NDhmMDkwY2VlMDQxOGRkM2QyMTM4YTFlNzg2NXAtMSwKKyAgICAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTgKKyAgICAtMHgxLmFlZDU0OGYwOTBjZWUwNDE4ZGQzZDIxMzhhMWU3ODY1cC0xLAorICAgIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTkKKyAgICAweDEuYWVkNTRiMTlkNWNkNzkzN2NiZjQxZWQ0MDhjYTBhNTJwLTEsCisgICAgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTAwMAorICAgIC0weDEuYWVkNTRiMTlkNWNkNzkzN2NiZjQxZWQ0MDhjYTBhNTJwLTEsCisgICAgLTB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDEwMDEKKyAgICAweDEuZWFlZTg1ODM1ZGRlNWI3MWJlZWM3ZDhkOTgwNTIxMTJwLTIsCisgICAgMHgxLmZmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMDIKKyAgICAtMHgxLmVhZWU4NTgzNWRkZTViNzFiZWVjN2Q4ZDk4MDUyMTEycC0yLAorICAgIC0weDEuZmZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAwMworICAgIDB4MS5lYWVlODc0NGIwNWVmZTg3NjRiYzM2NGZkODM3YjY2NnAtMiwKKyAgICAweDEucC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAwNAorICAgIC0weDEuZWFlZTg3NDRiMDVlZmU4NzY0YmMzNjRmZDgzN2I2NjZwLTIsCisgICAgLTB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA1CisgICAgMHgxLmVhZWU4YWM3NTU1ZWQ0N2ZjYTc3Y2VlZDE3NGM4ZWEwcC0yLAorICAgIDB4MS4wMDAwMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA2CisgICAgLTB4MS5lYWVlOGFjNzU1NWVkNDdmY2E3N2NlZWQxNzRjOGVhMHAtMiwKKyAgICAtMHgxLjAwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMDcKKyAgICAweDEuZmFhZWViNWYxYzBkNjNmNDNjNmYzZWM0NjAxMTY5MGZwLTMsCisgICAgMHgxLmZmZmZmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMDgKKyAgICAtMHgxLmZhYWVlYjVmMWMwZDYzZjQzYzZmM2VjNDYwMTE2OTBmcC0zLAorICAgIC0weDEuZmZmZmZlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAwOQorICAgIDB4MS5mYWFlZWQ0ZjMxNTc2YmE4OWRlYmRjNzM1MWU4YjFhZXAtMywKKyAgICAweDEucC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAxMAorICAgIC0weDEuZmFhZWVkNGYzMTU3NmJhODlkZWJkYzczNTFlOGIxYWVwLTMsCisgICAgLTB4MS5wLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDExCisgICAgMHgxLmZhYWVmMTJmNWJlYjFjMTA5NDQ3M2QzYzMzNjViOWUxcC0zLAorICAgIDB4MS4wMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEyCisgICAgLTB4MS5mYWFlZjEyZjViZWIxYzEwOTQ0NzNkM2MzMzY1YjllMXAtMywKKyAgICAtMHgxLjAwMDAwMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMTMKKyAgICAweDEuZmVhYWVjZWM2ZDhlMzBjZDU2OTUwZWIyZWJkY2ViZDRwLTQsCisgICAgMHgxLmZmZmZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMTQKKyAgICAtMHgxLmZlYWFlY2VjNmQ4ZTMwY2Q1Njk1MGViMmViZGNlYmQ0cC00LAorICAgIC0weDEuZmZmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAxNQorICAgIDB4MS5mZWFhZWVlODZlZTM1Y2EwNjlhODY3MjFmODlmODVhNXAtNCwKKyAgICAweDEucC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAxNgorICAgIC0weDEuZmVhYWVlZTg2ZWUzNWNhMDY5YTg2NzIxZjg5Zjg1YTVwLTQsCisgICAgLTB4MS5wLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE3CisgICAgMHgxLmZlYWFmMmUwNzE4ZDljNTY4Yzk0NDJjODE1NDVjZDYycC00LAorICAgIDB4MS4wMDAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE4CisgICAgLTB4MS5mZWFhZjJlMDcxOGQ5YzU2OGM5NDQyYzgxNTQ1Y2Q2MnAtNCwKKyAgICAtMHgxLjAwMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMTkKKyAgICAweDEuZmZhYWFjZWZkNGQ4NTVhYzgyMjc3OTlmM2UyNjNkN2FwLTUsCisgICAgMHgxLmZmZmZmZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMjAKKyAgICAtMHgxLmZmYWFhY2VmZDRkODU1YWM4MjI3Nzk5ZjNlMjYzZDdhcC01LAorICAgIC0weDEuZmZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAyMQorICAgIDB4MS5mZmFhYWVlZWQ0ZWRhYjRiYTRiMzY1ZWQyNWE5NTk1ZnAtNSwKKyAgICAweDEucC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAyMgorICAgIC0weDEuZmZhYWFlZWVkNGVkYWI0YmE0YjM2NWVkMjVhOTU5NWZwLTUsCisgICAgLTB4MS5wLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIzCisgICAgMHgxLmZmYWFiMmVjZDUxODUwOGFlOWJjNzMwYTE2NWE4ZWFkcC01LAorICAgIDB4MS4wMDAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI0CisgICAgLTB4MS5mZmFhYjJlY2Q1MTg1MDhhZTliYzczMGExNjVhOGVhZHAtNSwKKyAgICAtMHgxLjAwMDAwMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMjUKKyAgICAweDEuZmZlYWE4ZWYyZTg1OTMzODgzYzBkYzMzNDYyMzg3YjVwLTYsCisgICAgMHgxLmZmZmZmZXAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwMjYKKyAgICAtMHgxLmZmZWFhOGVmMmU4NTkzMzg4M2MwZGMzMzQ2MjM4N2I1cC02LAorICAgIC0weDEuZmZmZmZlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTAyNworICAgIDB4MS5mZmVhYWFlZWVlODZlOGNhZmU0MTM3NmQ0NzkxOTU3OXAtNiwKKyAgICAweDEucC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAyOAorICAgIC0weDEuZmZlYWFhZWVlZTg2ZThjYWZlNDEzNzZkNDc5MTk1NzlwLTYsCisgICAgLTB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI5CisgICAgMHgxLmZmZWFhZWVlNmU4OTkyNzAwMzQxM2FiZTY0ZTlkYzIxcC02LAorICAgIDB4MS4wMDAwMDJwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMwCisgICAgLTB4MS5mZmVhYWVlZTZlODk5MjcwMDM0MTNhYmU2NGU5ZGMyMXAtNiwKKyAgICAtMHgxLjAwMDAwMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwMzEKKyAgICAweDEuZmZmYWE4YWVmZWVkMzk2ZmZmZmM2MzYzMTNkMGJhNmRwLTcsCisgICAgMHgxLmZmZmZmZXAtNworICB9LAorICB7IC8vIEVudHJ5IDEwMzIKKyAgICAtMHgxLmZmZmFhOGFlZmVlZDM5NmZmZmZjNjM2MzEzZDBiYTZkcC03LAorICAgIC0weDEuZmZmZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTAzMworICAgIDB4MS5mZmZhYWFhZWVlZWQ0ZWQ1NDljNjU2MGY4ODllZTUzMXAtNywKKyAgICAweDEucC02CisgIH0sCisgIHsgLy8gRW50cnkgMTAzNAorICAgIC0weDEuZmZmYWFhYWVlZWVkNGVkNTQ5YzY1NjBmODg5ZWU1MzFwLTcsCisgICAgLTB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM1CisgICAgMHgxLmZmZmFhZWFlY2VlZDc5M2ZkZTVhMWE5Y2E1YmIxZWU2cC03LAorICAgIDB4MS4wMDAwMDJwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM2CisgICAgLTB4MS5mZmZhYWVhZWNlZWQ3OTNmZGU1YTFhOWNhNWJiMWVlNnAtNywKKyAgICAtMHgxLjAwMDAwMnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwMzcKKyAgICAweDEuZmZmZmZkZmFhYWFhYmFhZWVlZGVkOTk3ZmVmZmEzNWFwLTE1LAorICAgIDB4MS5mZmZmZmVwLTE1CisgIH0sCisgIHsgLy8gRW50cnkgMTAzOAorICAgIC0weDEuZmZmZmZkZmFhYWFhYmFhZWVlZGVkOTk3ZmVmZmEzNWFwLTE1LAorICAgIC0weDEuZmZmZmZlcC0xNQorICB9LAorICB7IC8vIEVudHJ5IDEwMzkKKyAgICAweDEuZmZmZmZmZmFhYWFhYWFhZWVlZWVlZWVkNGVkNGVkNGZwLTE1LAorICAgIDB4MS5wLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTA0MAorICAgIC0weDEuZmZmZmZmZmFhYWFhYWFhZWVlZWVlZWVkNGVkNGVkNGZwLTE1LAorICAgIC0weDEucC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEwNDEKKyAgICAweDEuMDAwMDAxZmQ1NTU1NDU1Nzc3NTc4Y2NiZTdiZmMwOWNwLTE0LAorICAgIDB4MS4wMDAwMDJwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTA0MgorICAgIC0weDEuMDAwMDAxZmQ1NTU1NDU1Nzc3NTc4Y2NiZTdiZmMwOWNwLTE0LAorICAgIC0weDEuMDAwMDAycC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEwNDMKKyAgICAweDEuZmZmZmZkZmZmZmZmZmVhYWFhYWVhYWFhYTZhYWVlZjBwLTI4LAorICAgIDB4MS5mZmZmZmVwLTI4CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NAorICAgIC0weDEuZmZmZmZkZmZmZmZmZmVhYWFhYWVhYWFhYTZhYWVlZjBwLTI4LAorICAgIC0weDEuZmZmZmZlcC0yOAorICB9LAorICB7IC8vIEVudHJ5IDEwNDUKKyAgICAweDEuZmZmZmZmZmZmZmZmZmVhYWFhYWFhYWFhYWFhYWVlZWVwLTI4LAorICAgIDB4MS5wLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmVhYWFhYWFhYWFhYWFhYWVlZWVwLTI4LAorICAgIC0weDEucC0yNworICB9LAorICB7IC8vIEVudHJ5IDEwNDcKKyAgICAweDEuMDAwMDAxZmZmZmZmZmY1NTU1NTE1NTU1NGQ1NTc3NzJwLTI3LAorICAgIDB4MS4wMDAwMDJwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA0OAorICAgIC0weDEuMDAwMDAxZmZmZmZmZmY1NTU1NTE1NTU1NGQ1NTc3NzJwLTI3LAorICAgIC0weDEuMDAwMDAycC0yNworICB9LAorICB7IC8vIEVudHJ5IDEwNDkKKyAgICAweDEuZmZmZmZkZmZmZmZmZmZmYWFhYWFiYWFhYWE5YWFhYWVwLTMxLAorICAgIDB4MS5mZmZmZmVwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMTA1MAorICAgIC0weDEuZmZmZmZkZmZmZmZmZmZmYWFhYWFiYWFhYWE5YWFhYWVwLTMxLAorICAgIC0weDEuZmZmZmZlcC0zMQorICB9LAorICB7IC8vIEVudHJ5IDEwNTEKKyAgICAweDEuZmZmZmZmZmZmZmZmZmZmYWFhYWFhYWFhYWFhYWFhYWVwLTMxLAorICAgIDB4MS5wLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTA1MgorICAgIC0weDEuZmZmZmZmZmZmZmZmZmZmYWFhYWFhYWFhYWFhYWFhYWVwLTMxLAorICAgIC0weDEucC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEwNTMKKyAgICAweDEuMDAwMDAxZmZmZmZmZmZmZDU1NTU0NTU1NTUzNTU1NTdwLTMwLAorICAgIDB4MS4wMDAwMDJwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTA1NAorICAgIC0weDEuMDAwMDAxZmZmZmZmZmZmZDU1NTU0NTU1NTUzNTU1NTdwLTMwLAorICAgIC0weDEuMDAwMDAycC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEwNTUKKyAgICAweDEuMGIzMzY2NTA4OTU3NTIwZDlkYzg4ZDdjMDkzMzdlMjRwLTEsCisgICAgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA1NgorICAgIC0weDEuMGIzMzY2NTA4OTU3NTIwZDlkYzg4ZDdjMDkzMzdlMjRwLTEsCisgICAgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU3CisgICAgLTB4MS4wYjMzNjY1MDg5NTc1MjBkOWRjODhkN2MwOTMzN2UyNHAtMSwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNTgKKyAgICAweDEuMGIzMzY2NTA4OTU3NTIwZDlkYzg4ZDdjMDkzMzdlMjRwLTEsCisgICAgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA1OQorICAgIC0weDEuMGIzMzY2NTA4OTU3NTIwZDlkYzg4ZDdjMDkzMzdlMjRwLTEsCisgICAgMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYwCisgICAgMHgxLjBiMzM2NjUwODk1NzUyMGQ5ZGM4OGQ3YzA5MzM3ZTI0cC0xLAorICAgIC0weDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNjEKKyAgICAtMHgxLjQ4Y2U1NzUyMDJlZmQ5M2M2MmY3Yjg4MTA2ZWExZDRkcC0xLAorICAgIDB4MS5mZmZmZmNwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA2MgorICAgIDB4MS40OGNlNTc1MjAyZWZkOTNjNjJmN2I4ODEwNmVhMWQ0ZHAtMSwKKyAgICAtMHgxLmZmZmZmY3AxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYzCisgICAgLTB4MS43NzdhNWNmNzJjZWM1ZmQ2MTg5NmNiNGY0MGQxZGU3OXAtMjQsCisgICAgMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NAorICAgIDB4MS43NzdhNWNmNzJjZWM1ZmQ2MTg5NmNiNGY0MGQxZGU3OXAtMjQsCisgICAgLTB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDEwNjUKKyAgICAweDEuZmZmZmZmZmZmZmZmNzY1MjEyNDljNzQyMjkzMGVkODJwLTEsCisgICAgMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NgorICAgIC0weDEuZmZmZmZmZmZmZmZmNzY1MjEyNDljNzQyMjkzMGVkODJwLTEsCisgICAgLTB4MS45MjFmYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNjcKKyAgICAweDEuYWVkNTRiMTlkNWNkNzkzN2NiZjQxZWQ0MDhjYTBhNTJwLTEsCisgICAgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA2OAorICAgIC0weDEuYWVkNTRiMTlkNWNkNzkzN2NiZjQxZWQ0MDhjYTBhNTJwLTEsCisgICAgLTB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNjkKKyAgICAweDEuYWVkNTQ4ZjA5MGNlZTA0MThkZDNkMjEzOGExZTc4NjVwLTEsCisgICAgMHgxLnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MAorICAgIC0weDEuYWVkNTQ4ZjA5MGNlZTA0MThkZDNkMjEzOGExZTc4NjVwLTEsCisgICAgLTB4MS5wMAorICB9LAorICB7IC8vIEVudHJ5IDEwNzEKKyAgICAweDEuYWVkNTQ3ZGJlZTRkMGQ4NjgwZDA4MTNkMWU0ZTIxZDBwLTEsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwNzIKKyAgICAtMHgxLmFlZDU0N2RiZWU0ZDBkODY4MGQwODEzZDFlNGUyMWQwcC0xLAorICAgIC0weDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MworICAgIDB4MS42YTA5ZTZlY2I0MWZkZDdlNjgxODcyYzg1NDg4NzAxOXAtMSwKKyAgICAweDEuOTIxZmI2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTA3NAorICAgIC0weDEuNmEwOWU2ZWNiNDFmZGQ3ZTY4MTg3MmM4NTQ4ODcwMTlwLTEsCisgICAgLTB4MS45MjFmYjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc1CisgICAgMHgxLjAwMDAwMWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjYsCisgICAgMHgxLjAwMDAwMnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMTA3NgorICAgIC0weDEuMDAwMDAxZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNiwKKyAgICAtMHgxLjAwMDAwMnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMTA3NworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDEwNzgKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDEwNzkKKyAgICAweDEuZmZmZmZiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAweDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgwCisgICAgLTB4MS5mZmZmZmJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTI3LAorICAgIC0weDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgxCisgICAgMHgxLmZmZmZmN2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xMjcsCisgICAgMHgxLmZmZmZmOHAtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA4MgorICAgIC0weDEuZmZmZmY3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZwLTEyNywKKyAgICAtMHgxLmZmZmZmOHAtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA4MworICAgIDB4MS5mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZnAtMTQ5LAorICAgIDB4MS5wLTE0OAorICB9LAorICB7IC8vIEVudHJ5IDEwODQKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmcC0xNDksCisgICAgLTB4MS5wLTE0OAorICB9LAorICB7IC8vIEVudHJ5IDEwODUKKyAgICAwLjBmLAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDEwODYKKyAgICAtMC4wZiwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMTA4NworICAgIDAuMCwKKyAgICAwLjBmCisgIH0sCisgIHsgLy8gRW50cnkgMTA4OAorICAgIC0wLjAsCisgICAgLTAuMGYKKyAgfSwKK307CisjZW5kaWYgLy8gX19CSU9OSUNfXworCitURVNUKG1hdGhfc2luZiwgc2luZl9pbnRlbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YoZ19zaW5mX2ludGVsX2RhdGEpL3NpemVvZihzaW5mX2ludGVsX2RhdGFfdCk7IGkrKykgeworICAgIEVYUEVDVF9GTE9BVF9FUShnX3NpbmZfaW50ZWxfZGF0YVtpXS5leHBlY3RlZCwgc2luZihnX3NpbmZfaW50ZWxfZGF0YVtpXS5jYWxsX2RhdGEpKSA8PCAiRmFpbGVkIG9uIGVsZW1lbnQgIiA8PCBpOworICB9CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCit9CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX3Rhbl90ZXN0LmNwcCBiL3Rlc3RzL21hdGhfdGFuX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NjIwMTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tYXRoX3Rhbl90ZXN0LmNwcApAQCAtMCwwICsxLDUyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK3R5cGVkZWYgc3RydWN0IHsKKyAgZG91YmxlIGV4cGVjdGVkOworICBkb3VibGUgY2FsbF9kYXRhOworfSB0YW5faW50ZWxfZGF0YV90OworCitzdGF0aWMgdGFuX2ludGVsX2RhdGFfdCBnX3Rhbl9pbnRlbF9kYXRhW10gPSB7CisgIHsgLy8gRW50cnkgMAorICAgIDB4MS41MDc4Y2ViZmY5YzcyODAwMDAwMDAwMDAwMDAyNGRmOHAtNSwKKyAgICAweDEuNTA0ODZiMmY4NzAxNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDEKKyAgICAtMHgxLjUwNzhjZWJmZjljNzI4MDAwMDAwMDAwMDAwMDI0ZGY4cC01LAorICAgIC0weDEuNTA0ODZiMmY4NzAxNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDIKKyAgICAweDEuNTM4OWU2ZGY0MTk3OGZmZmZmZmZmZmZmZmZjNjFmNTRwLTQsCisgICAgMHgxLjUyYzM5ZWYwNzBjYWRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzCisgICAgLTB4MS41Mzg5ZTZkZjQxOTc4ZmZmZmZmZmZmZmZmZmM2MWY1NHAtNCwKKyAgICAtMHgxLjUyYzM5ZWYwNzBjYWRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0CisgICAgMHgxLmE5MzNmZTE3NmIzNzUwMDAwMDAwMDAwMDAwMGE0MDY1cC0zLAorICAgIDB4MS5hMzNmMzJhYzVjZWI1cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNQorICAgIC0weDEuYTkzM2ZlMTc2YjM3NTAwMDAwMDAwMDAwMDAwYTQwNjVwLTMsCisgICAgLTB4MS5hMzNmMzJhYzVjZWI1cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNgorICAgIDB4MS5mYWM3MWNkMzRlZWE2ODAwMDAwMDAwMDAwMDlhMGMxMHAtMiwKKyAgICAweDEuZDY5NmJmYTk4OGRiOXAtMgorICB9LAorICB7IC8vIEVudHJ5IDcKKyAgICAtMHgxLmZhYzcxY2QzNGVlYTY4MDAwMDAwMDAwMDAwOWEwYzEwcC0yLAorICAgIC0weDEuZDY5NmJmYTk4OGRiOXAtMgorICB9LAorICB7IC8vIEVudHJ5IDgKKyAgICAweDEuN2JhNDlmNzM5ODI5ZWZmZmZmZmZmZmZmZmZlN2U5YmVwLTEsCisgICAgMHgxLjQ2YWMzNzIyNDM1MzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5CisgICAgLTB4MS43YmE0OWY3Mzk4MjllZmZmZmZmZmZmZmZmZmU3ZTliZXAtMSwKKyAgICAtMHgxLjQ2YWMzNzIyNDM1MzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMAorICAgIC0weDEucC0xMDc0LAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDExCisgICAgMHgxLnAtMTA3NCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDEyCisgICAgLTB4MS44ZjA0ODgzMjE0NGI3MDAyMWNjZDdhNTI0NmNiMGIyMHAwLAorICAgIC0weDEuMDAxODBwMAorICB9LAorICB7IC8vIEVudHJ5IDEzCisgICAgMHgxLjhmMDQ4ODMyMTQ0YjcwMDIxY2NkN2E1MjQ2Y2IwYjIwcDAsCisgICAgMHgxLjAwMTgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNAorICAgIC0weDEuOGU4ODRiMjQzMTNhZTgwMmRiNDc4OTlmYWQxNWE2YzZwMCwKKyAgICAtMHgxLjA5MGNjYTE4YTU1NjVwMgorICB9LAorICB7IC8vIEVudHJ5IDE1CisgICAgMHgxLjhlODg0YjI0MzEzYWU4MDJkYjQ3ODk5ZmFkMTVhNmM2cDAsCisgICAgMHgxLjA5MGNjYTE4YTU1NjVwMgorICB9LAorICB7IC8vIEVudHJ5IDE2CisgICAgLTB4MS5jYTE4NjU0YjM1Njk3Mjk2N2E0ZjFlODQwNGI5Zjk3MnAwLAorICAgIC0weDEuMGZhYTc2NTBkZjE0NHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTcKKyAgICAweDEuY2ExODY1NGIzNTY5NzI5NjdhNGYxZTg0MDRiOWY5NzJwMCwKKyAgICAweDEuMGZhYTc2NTBkZjE0NHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTgKKyAgICAtMHgxLmU1MmZhZmEyMmVmMTQ4MWQ0MzdlN2VkMzJjYmEwM2IxcC0yLAorICAgIC0weDEuMTgwMDAwMDAwMDA0MHA1CisgIH0sCisgIHsgLy8gRW50cnkgMTkKKyAgICAweDEuZTUyZmFmYTIyZWYxNDgxZDQzN2U3ZWQzMmNiYTAzYjFwLTIsCisgICAgMHgxLjE4MDAwMDAwMDAwNDBwNQorICB9LAorICB7IC8vIEVudHJ5IDIwCisgICAgLTB4MS5hM2NhNDIxZGMzMGYxYzU3NjBhMWFlMDczOTZmZWMzM3AtMywKKyAgICAtMHgxLjQwMDA1MjdhY2EzODhwOTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMQorICAgIDB4MS5hM2NhNDIxZGMzMGYxYzU3NjBhMWFlMDczOTZmZWMzM3AtMywKKyAgICAweDEuNDAwMDUyN2FjYTM4OHA5OQorICB9LAorICB7IC8vIEVudHJ5IDIyCisgICAgMHgxLjFmM2I3ZDE5Nzg2MDk4MDBhMTYyOGUxZGY5NTU4ZGY2cDEsCisgICAgLTB4MS40ODZjMzYzNDc1MWVjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMworICAgIC0weDEuMWYzYjdkMTk3ODYwOTgwMGExNjI4ZTFkZjk1NThkZjZwMSwKKyAgICAweDEuNDg2YzM2MzQ3NTFlY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMjQKKyAgICAtMHgxLjdlYjg3MzM0M2ZhN2FiNWQ5ZWY5YTc4YWZkMzNkNTAxcC0xLAorICAgIC0weDEuNDhhNzE4MDBiNTcxM3AtMQorICB9LAorICB7IC8vIEVudHJ5IDI1CisgICAgMHgxLjdlYjg3MzM0M2ZhN2FiNWQ5ZWY5YTc4YWZkMzNkNTAxcC0xLAorICAgIDB4MS40OGE3MTgwMGI1NzEzcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjYKKyAgICAweDEuYmUwNzE1NzJmNjRlODgwNDdjMzkzOWJhNDY2MjZhMjVwLTEsCisgICAgLTB4MS40OWFmMDMxNGVlYTNjcDI5OQorICB9LAorICB7IC8vIEVudHJ5IDI3CisgICAgLTB4MS5iZTA3MTU3MmY2NGU4ODA0N2MzOTM5YmE0NjYyNmEyNXAtMSwKKyAgICAweDEuNDlhZjAzMTRlZWEzY3AyOTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOAorICAgIDB4MS5mZmJiMjY0N2Y1N2ExODFiZDEyOTZmYWYzM2MwNGUzZXAtMSwKKyAgICAtMHgxLjVmZTAwYzgxNGZmZDZwMgorICB9LAorICB7IC8vIEVudHJ5IDI5CisgICAgLTB4MS5mZmJiMjY0N2Y1N2ExODFiZDEyOTZmYWYzM2MwNGUzZXAtMSwKKyAgICAweDEuNWZlMDBjODE0ZmZkNnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzAKKyAgICAtMHgxLmE4ZWIxNDJiMmY0Mjc1NmU2ZGVkZmYwOTI2N2E2MmM2cC0xLAorICAgIC0weDEuNjJhYzI0MWY3OTQzOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDMxCisgICAgMHgxLmE4ZWIxNDJiMmY0Mjc1NmU2ZGVkZmYwOTI2N2E2MmM2cC0xLAorICAgIDB4MS42MmFjMjQxZjc5NDM5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzIKKyAgICAtMHgxLjdkMWQzNTU5ZGRhYzg4NWVlMzA2MzJjNzYwOTk4YzhlcC00LAorICAgIC0weDEuN2MwNTFiNDc2Y2E4ZHAtNAorICB9LAorICB7IC8vIEVudHJ5IDMzCisgICAgMHgxLjdkMWQzNTU5ZGRhYzg4NWVlMzA2MzJjNzYwOTk4YzhlcC00LAorICAgIDB4MS43YzA1MWI0NzZjYThkcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzQKKyAgICAtMHgxLjBlMWQwMzA1YjdiNzI3ZmYxOTNkOWQwYjhlYWZmMTgxcDIsCisgICAgLTB4MS43ZTQzYzg4MDA3NGM2cDk5NgorICB9LAorICB7IC8vIEVudHJ5IDM1CisgICAgMHgxLjBlMWQwMzA1YjdiNzI3ZmYxOTNkOWQwYjhlYWZmMTgxcDIsCisgICAgMHgxLjdlNDNjODgwMDc0YzZwOTk2CisgIH0sCisgIHsgLy8gRW50cnkgMzYKKyAgICAtMHgxLjgxMmJkZmUwMjQ2YmJmMmE3YWI2NDc3YTVjYmIzNTJicC00LAorICAgIC0weDEuODAwYWMzNjMzOThjNHAtNAorICB9LAorICB7IC8vIEVudHJ5IDM3CisgICAgMHgxLjgxMmJkZmUwMjQ2YmJmMmE3YWI2NDc3YTVjYmIzNTJicC00LAorICAgIDB4MS44MDBhYzM2MzM5OGM0cC00CisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAtMHgxLjg1MGU1NTQ0YjBjNzk3YjM2MDM0Yzk4ZTE2ZjNmYWZicC00LAorICAgIC0weDEuODNlNDZhZWRiZmYzNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDM5CisgICAgMHgxLjg1MGU1NTQ0YjBjNzk3YjM2MDM0Yzk4ZTE2ZjNmYWZicC00LAorICAgIDB4MS44M2U0NmFlZGJmZjM2cC00CisgIH0sCisgIHsgLy8gRW50cnkgNDAKKyAgICAweDEuZTZiNWQ5MWJiYTkzMzdmYzBjZWI2ODZjNjBjZDI5YmRwLTIsCisgICAgLTB4MS44M2VjZjQyZTkyNjVhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MQorICAgIC0weDEuZTZiNWQ5MWJiYTkzMzdmYzBjZWI2ODZjNjBjZDI5YmRwLTIsCisgICAgMHgxLjgzZWNmNDJlOTI2NWFwMworICB9LAorICB7IC8vIEVudHJ5IDQyCisgICAgLTB4MS5mMzY4OGJjMjU5NGUyMDEwMjU3M2NmZjQ4MTkwYWMyOHAtMSwKKyAgICAtMHgxLjhiY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgMHgxLmYzNjg4YmMyNTk0ZTIwMTAyNTczY2ZmNDgxOTBhYzI4cC0xLAorICAgIDB4MS44YmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NAorICAgIDB4MS5lYzBkMGZhY2RkMDhiNzczYTFkOTM0ODRlMmQ2NmM0NXAtMiwKKyAgICAtMHgxLjhkMmZmZmZmZmZmZDFwOQorICB9LAorICB7IC8vIEVudHJ5IDQ1CisgICAgLTB4MS5lYzBkMGZhY2RkMDhiNzczYTFkOTM0ODRlMmQ2NmM0NXAtMiwKKyAgICAweDEuOGQyZmZmZmZmZmZkMXA5CisgIH0sCisgIHsgLy8gRW50cnkgNDYKKyAgICAweDEuZWMwMzM2ZDUzOTI1OTc2ODliNjQwYmYwNDkyMjczMzhwLTIsCisgICAgLTB4MS44ZDMwMDBmZmZmZmQxcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NworICAgIC0weDEuZWMwMzM2ZDUzOTI1OTc2ODliNjQwYmYwNDkyMjczMzhwLTIsCisgICAgMHgxLjhkMzAwMGZmZmZmZDFwOQorICB9LAorICB7IC8vIEVudHJ5IDQ4CisgICAgLTB4MS5mODA5M2EwMTcwMjFmODFjMDFjMTMxNDc1ZTUwZTQ5YnAtMSwKKyAgICAtMHgxLmJhZWVlNmY2ZmE1MzhwNgorICB9LAorICB7IC8vIEVudHJ5IDQ5CisgICAgMHgxLmY4MDkzYTAxNzAyMWY4MWMwMWMxMzE0NzVlNTBlNDlicC0xLAorICAgIDB4MS5iYWVlZTZmNmZhNTM4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MAorICAgIDB4MS5kZWFmMzQ5OTRiN2U3N2ZkNTJhNDA4ZjBjNjc3ZWFlMXAzLAorICAgIC0weDEuYzY4NjdlMDc0NTVlYXAzCisgIH0sCisgIHsgLy8gRW50cnkgNTEKKyAgICAtMHgxLmRlYWYzNDk5NGI3ZTc3ZmQ1MmE0MDhmMGM2NzdlYWUxcDMsCisgICAgMHgxLmM2ODY3ZTA3NDU1ZWFwMworICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgLTB4MS5mMjlhYTg3ZDRlMWRkODFiN2I2OWFiZTk3OTBlZTBhYnAtMSwKKyAgICAtMHgxLmQyN2ZmZmZmZmUwcDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MworICAgIDB4MS5mMjlhYTg3ZDRlMWRkODFiN2I2OWFiZTk3OTBlZTBhYnAtMSwKKyAgICAweDEuZDI3ZmZmZmZmZTBwNworICB9LAorICB7IC8vIEVudHJ5IDU0CisgICAgMHgxLjc2MmZiNDdhMTkyNTk3ZmZmZmZmZWVlZGIyNmZiOTc4cC0zLAorICAgIC0weDEuZjBkZjM4MDI5YzllZnAzCisgIH0sCisgIHsgLy8gRW50cnkgNTUKKyAgICAtMHgxLjc2MmZiNDdhMTkyNTk3ZmZmZmZmZWVlZGIyNmZiOTc4cC0zLAorICAgIDB4MS5mMGRmMzgwMjljOWVmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NgorICAgIC0weDEuOGViMjNlZjIxMjZiYjdmZmZkMTUzYzdmZjkwZTlmNmNwMCwKKyAgICAtMHgxLmZmZmZmYzAwMDBmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NworICAgIDB4MS44ZWIyM2VmMjEyNmJiN2ZmZmQxNTNjN2ZmOTBlOWY2Y3AwLAorICAgIDB4MS5mZmZmZmMwMDAwZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTgKKyAgICAtMHgxLmQyOTlkMjg1YmYwMTg0MjNmYmMxNGVmYzAwZWQ1Nzk5cC0yLAorICAgIC0weDEuZmZmZmZmZmZmZmZmY3AxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAweDEuZDI5OWQyODViZjAxODQyM2ZiYzE0ZWZjMDBlZDU3OTlwLTIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmNwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDYwCisgICAgMHgxLnAtMTA3NCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDYxCisgICAgLTB4MS5wLTEwNzQsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNjIKKyAgICAtMHgxLjgyYmVlNTcyZTJhYzhjNzZkNjkwOWM2NmIyODJlOTYycC02LAorICAgIDB4MS4wcDY0CisgIH0sCisgIHsgLy8gRW50cnkgNjMKKyAgICAweDEuODJiZWU1NzJlMmFjOGM3NmQ2OTA5YzY2YjI4MmU5NjJwLTYsCisgICAgLTB4MS4wcDY0CisgIH0sCisgIHsgLy8gRW50cnkgNjQKKyAgICAweDEuZjUzYThkMDVhZmNmNmM0YmYyZTFlNTIwOGIzNGQ1YzZwNCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXA1MQorICB9LAorICB7IC8vIEVudHJ5IDY1CisgICAgLTB4MS5mNTNhOGQwNWFmY2Y2YzRiZjJlMWU1MjA4YjM0ZDVjNnA0LAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXA1MQorICB9LAorICB7IC8vIEVudHJ5IDY2CisgICAgLTB4MS42YjM3MWRmNTk4MGNkM2RiMzY3NjhlMzYwNDZhNGE4MXAtMSwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAxMDE3CisgIH0sCisgIHsgLy8gRW50cnkgNjcKKyAgICAweDEuNmIzNzFkZjU5ODBjZDNkYjM2NzY4ZTM2MDQ2YTRhODFwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcDEwMTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OAorICAgIC0weDEuYjMyZTc4ZjQ5YTBjODNjN2Y2MGEzZGMzZWY4ZWNmMWZwMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwM3AzCisgIH0sCisgIHsgLy8gRW50cnkgNjkKKyAgICAweDEuYjMyZTc4ZjQ5YTBjODNjN2Y2MGEzZGMzZWY4ZWNmMWZwMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDNwMworICB9LAorICB7IC8vIEVudHJ5IDcwCisgICAgMHgxLjk4YWZiZDI0MjY0YmMzYTlkMTgzODA3NGEzZGFhNWU1cC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAzcDIxCisgIH0sCisgIHsgLy8gRW50cnkgNzEKKyAgICAtMHgxLjk4YWZiZDI0MjY0YmMzYTlkMTgzODA3NGEzZGFhNWU1cC0xLAorICAgIC0weDEuMDAwMDAwMDAwMDAwM3AyMQorICB9LAorICB7IC8vIEVudHJ5IDcyCisgICAgMHgxLmI2NjdhMmFiZTM2YzI4MDMxNWM2MmExZjk3NGU3NjExcDAsCisgICAgMHgxLjAwMDAwMDAwMDAwMDNwNTExCisgIH0sCisgIHsgLy8gRW50cnkgNzMKKyAgICAtMHgxLmI2NjdhMmFiZTM2YzI4MDMxNWM2MmExZjk3NGU3NjExcDAsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAzcDUxMQorICB9LAorICB7IC8vIEVudHJ5IDc0CisgICAgMHgxLjIwNGMyNmE0Mjc4NjFmZmVmYjczNzk2YmNmMWZkNzI0cC0yLAorICAgIDB4MS4wMDAwMDAwMDAwMDAzcDcxNgorICB9LAorICB7IC8vIEVudHJ5IDc1CisgICAgLTB4MS4yMDRjMjZhNDI3ODYxZmZlZmI3Mzc5NmJjZjFmZDcyNHAtMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDNwNzE2CisgIH0sCisgIHsgLy8gRW50cnkgNzYKKyAgICAweDEuOTFjOGYyOTM4MjYyY2UyZTlhZDk5YWIxN2U0NmFiZDZwNCwKKyAgICAweDEuMDAwMDAwMDAwMDAwN3A4CisgIH0sCisgIHsgLy8gRW50cnkgNzcKKyAgICAtMHgxLjkxYzhmMjkzODI2MmNlMmU5YWQ5OWFiMTdlNDZhYmQ2cDQsCisgICAgLTB4MS4wMDAwMDAwMDAwMDA3cDgKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OAorICAgIC0weDEuMjdmN2YwODgwMDMxZmU0MmVkMWQ1ZmVkYzQ5NmQxNGVwLTIsCisgICAgMHgxLjAwMDAwMDAwMDAwMzhwMzgwCisgIH0sCisgIHsgLy8gRW50cnkgNzkKKyAgICAweDEuMjdmN2YwODgwMDMxZmU0MmVkMWQ1ZmVkYzQ5NmQxNGVwLTIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDM4cDM4MAorICB9LAorICB7IC8vIEVudHJ5IDgwCisgICAgLTB4MS5kNjg5MGNjMzI3MTFkNGIwNDY5MDNhZDg4NTFhNDFiYnAtMywKKyAgICAweDEuMDAwMDAwMDAwMDExOHAzODAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MQorICAgIDB4MS5kNjg5MGNjMzI3MTFkNGIwNDY5MDNhZDg4NTFhNDFiYnAtMywKKyAgICAtMHgxLjAwMDAwMDAwMDAxMThwMzgwCisgIH0sCisgIHsgLy8gRW50cnkgODIKKyAgICAweDEuOWFmMGU2ZjcyZjkxMjdmZmZmYzAyMDBlYTdmNDA2ZjRwLTMsCisgICAgMHgxLjAwMDAwMDAwMDA5MDhwNTAwCisgIH0sCisgIHsgLy8gRW50cnkgODMKKyAgICAtMHgxLjlhZjBlNmY3MmY5MTI3ZmZmZmMwMjAwZWE3ZjQwNmY0cC0zLAorICAgIC0weDEuMDAwMDAwMDAwMDkwOHA1MDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NAorICAgIDB4MS4xN2I0ZjViZjQ0MDk3ODAwMmQ2NmYxYmQzNzAzMjUzMnAtMSwKKyAgICAweDEuMDAwMDAwMDAwYzBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NQorICAgIC0weDEuMTdiNGY1YmY0NDA5NzgwMDJkNjZmMWJkMzcwMzI1MzJwLTEsCisgICAgLTB4MS4wMDAwMDAwMDBjMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDg2CisgICAgLTB4MS4xN2ViMjJlNGRiYTcyODAwZDJhMDAwNjk4MjYzZDU4MnAwLAorICAgIDB4MS4wMDAwMDAwMWNwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NworICAgIDB4MS4xN2ViMjJlNGRiYTcyODAwZDJhMDAwNjk4MjYzZDU4MnAwLAorICAgIC0weDEuMDAwMDAwMDFjcDQwCisgIH0sCisgIHsgLy8gRW50cnkgODgKKyAgICAweDEuZjZmMDNjZTU2OTBhNmUzODgwYjk1ZmQ4YjJjODM2M2VwLTEsCisgICAgMHgxLjAwMDAwMDFwMjUwCisgIH0sCisgIHsgLy8gRW50cnkgODkKKyAgICAtMHgxLmY2ZjAzY2U1NjkwYTZlMzg4MGI5NWZkOGIyYzgzNjNlcC0xLAorICAgIC0weDEuMDAwMDAwMXAyNTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MAorICAgIDB4MS5lMjNiNzgyODJhNzVkMGRkNmRhMzU2OTJkMTQyYmM2M3AtMSwKKyAgICAweDEuMDAwMDAwOTg4cDI3CisgIH0sCisgIHsgLy8gRW50cnkgOTEKKyAgICAtMHgxLmUyM2I3ODI4MmE3NWQwZGQ2ZGEzNTY5MmQxNDJiYzYzcC0xLAorICAgIC0weDEuMDAwMDAwOTg4cDI3CisgIH0sCisgIHsgLy8gRW50cnkgOTIKKyAgICAtMHgxLjk4MWI2NTdlMWNhMjcwMDlkODJkOGUxODMxNDI0MGI1cC0zLAorICAgIDB4MS4wMDAwMGMwcDQyOQorICB9LAorICB7IC8vIEVudHJ5IDkzCisgICAgMHgxLjk4MWI2NTdlMWNhMjcwMDlkODJkOGUxODMxNDI0MGI1cC0zLAorICAgIC0weDEuMDAwMDBjMHA0MjkKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NAorICAgIC0weDEuNDU1YTIxODRmNGMzZGZmYjA5ODY5MTljZWNlNjgzYTRwLTEsCisgICAgMHgxLjAwMDAwZmNwMTAwMAorICB9LAorICB7IC8vIEVudHJ5IDk1CisgICAgMHgxLjQ1NWEyMTg0ZjRjM2RmZmIwOTg2OTE5Y2VjZTY4M2E0cC0xLAorICAgIC0weDEuMDAwMDBmY3AxMDAwCisgIH0sCisgIHsgLy8gRW50cnkgOTYKKyAgICAweDEuOGVlNjY5NjJmMjEwYzgwMDAwMDU2OGM3ZGFhZDNhMjhwMCwKKyAgICAweDEuMDAwZjM3MWI3YTAwNnAwCisgIH0sCisgIHsgLy8gRW50cnkgOTcKKyAgICAtMHgxLjhlZTY2OTYyZjIxMGM4MDAwMDA1NjhjN2RhYWQzYTI4cDAsCisgICAgLTB4MS4wMDBmMzcxYjdhMDA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OAorICAgIC0weDEuZWNkNzVjZjZkNDY2M2JlZTFjOTZmMDMxODRmYWUwODZwLTMsCisgICAgMHgxLjAwMXAxNQorICB9LAorICB7IC8vIEVudHJ5IDk5CisgICAgMHgxLmVjZDc1Y2Y2ZDQ2NjNiZWUxYzk2ZjAzMTg0ZmFlMDg2cC0zLAorICAgIC0weDEuMDAxcDE1CisgIH0sCisgIHsgLy8gRW50cnkgMTAwCisgICAgMHgxLjE3ZDQyMDMzMjc3Y2M4MjQ0Y2NiNmU1MTU0NDgyMTA1cC0xLAorICAgIDB4MS4wMDE3ZmZmZmZmZmZkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAxCisgICAgLTB4MS4xN2Q0MjAzMzI3N2NjODI0NGNjYjZlNTE1NDQ4MjEwNXAtMSwKKyAgICAtMHgxLjAwMTdmZmZmZmZmZmRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIKKyAgICAweDEuOGYwNDg4MzIxNDRiNzAwMjFjY2Q3YTUyNDZjYjBiMjBwMCwKKyAgICAweDEuMDAxODBwMAorICB9LAorICB7IC8vIEVudHJ5IDEwMworICAgIC0weDEuOGYwNDg4MzIxNDRiNzAwMjFjY2Q3YTUyNDZjYjBiMjBwMCwKKyAgICAtMHgxLjAwMTgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQKKyAgICAtMHgxLjE4MjczY2MzZTc2MzkwMDc0MzcwNDAyOGNmYjExNGE1cC0yLAorICAgIDB4MS4wMDFmZmZlcDUwMAorICB9LAorICB7IC8vIEVudHJ5IDEwNQorICAgIDB4MS4xODI3M2NjM2U3NjM5MDA3NDM3MDQwMjhjZmIxMTRhNXAtMiwKKyAgICAtMHgxLjAwMWZmZmVwNTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA2CisgICAgLTB4MS5kOGY5MGNhZDMwNTQ2Y2U1YjgyNjhiMzMwY2U1MGE2ZnAtMiwKKyAgICAweDEuMDE4cDQwCisgIH0sCisgIHsgLy8gRW50cnkgMTA3CisgICAgMHgxLmQ4ZjkwY2FkMzA1NDZjZTViODI2OGIzMzBjZTUwYTZmcC0yLAorICAgIC0weDEuMDE4cDQwCisgIH0sCisgIHsgLy8gRW50cnkgMTA4CisgICAgMHgxLmIwNzllYTBkMTRhNGE3ZmZjMDRiZDZmYmY0NTFiYjM0cC0yLAorICAgIDB4MS4wMWI4YTQ4NGFjMGI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkKKyAgICAtMHgxLmIwNzllYTBkMTRhNGE3ZmZjMDRiZDZmYmY0NTFiYjM0cC0yLAorICAgIC0weDEuMDFiOGE0ODRhYzBiNnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEwCisgICAgLTB4MS5hNDBjMjYyZjZhYjk5N2ZlZjQzYmY1NGFmM2M1YTc2NXAtMSwKKyAgICAweDEuMDI2YWMwZWYzMmQ0MHAyOAorICB9LAorICB7IC8vIEVudHJ5IDExMQorICAgIDB4MS5hNDBjMjYyZjZhYjk5N2ZlZjQzYmY1NGFmM2M1YTc2NXAtMSwKKyAgICAtMHgxLjAyNmFjMGVmMzJkNDBwMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIKKyAgICAweDEuMDNiOGMxZjMyOTY2NTdjNjUxYTEzZWI1YjEwMGZjNzhwLTQsCisgICAgMHgxLjAzNWZkY2QwOGE1OTZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMKKyAgICAtMHgxLjAzYjhjMWYzMjk2NjU3YzY1MWExM2ViNWIxMDBmYzc4cC00LAorICAgIC0weDEuMDM1ZmRjZDA4YTU5NnAtNAorICB9LAorICB7IC8vIEVudHJ5IDExNAorICAgIDB4MS4wNDQ5NzlkMTM0ZWQ5N2M3OGJmZTU4YTkwMDNiZmFjNXAtNCwKKyAgICAweDEuMDNmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTE1CisgICAgLTB4MS4wNDQ5NzlkMTM0ZWQ5N2M3OGJmZTU4YTkwMDNiZmFjNXAtNCwKKyAgICAtMHgxLjAzZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDExNgorICAgIC0weDEuZTcxN2RlN2RhMmNlODMxMDY2YmFkMWRmNWU4OGEwMzBwMCwKKyAgICAweDEuMDcwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcKKyAgICAweDEuZTcxN2RlN2RhMmNlODMxMDY2YmFkMWRmNWU4OGEwMzBwMCwKKyAgICAtMHgxLjA3MHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE4CisgICAgLTB4MS44Yzg5NmY2MDdmZjUyYmJhZTg2ZjYzZTE5YTk4OGQyYnAtMSwKKyAgICAweDEuMDcwcDMwCisgIH0sCisgIHsgLy8gRW50cnkgMTE5CisgICAgMHgxLjhjODk2ZjYwN2ZmNTJiYmFlODZmNjNlMTlhOTg4ZDJicC0xLAorICAgIC0weDEuMDcwcDMwCisgIH0sCisgIHsgLy8gRW50cnkgMTIwCisgICAgMHgxLmZmZmZmZmZmZjVkODQ2YWY2ZjAxNzI2MmM5YzgxZGU0cC0xLAorICAgIDB4MS4wN2U0Y2VmNGNiYjBlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEKKyAgICAtMHgxLmZmZmZmZmZmZjVkODQ2YWY2ZjAxNzI2MmM5YzgxZGU0cC0xLAorICAgIC0weDEuMDdlNGNlZjRjYmIwZXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTIyCisgICAgMHgxLmI0NzZkMzJjMWI3NDU3ZmZmZjY2ZWRiM2Y3OGE3MDAzcDAsCisgICAgMHgxLjBhNTNhNzhiMTNhYjJwMAorICB9LAorICB7IC8vIEVudHJ5IDEyMworICAgIC0weDEuYjQ3NmQzMmMxYjc0NTdmZmZmNjZlZGIzZjc4YTcwMDNwMCwKKyAgICAtMHgxLjBhNTNhNzhiMTNhYjJwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNAorICAgIDB4MS5mMmRmN2MwMmQyMGNkODFiMzMxMTdjMDA1NDVmN2E2YnAtMSwKKyAgICAweDEuMGFmYmMyNjhiOTg0OHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTI1CisgICAgLTB4MS5mMmRmN2MwMmQyMGNkODFiMzMxMTdjMDA1NDVmN2E2YnAtMSwKKyAgICAtMHgxLjBhZmJjMjY4Yjk4NDhwNgorICB9LAorICB7IC8vIEVudHJ5IDEyNgorICAgIC0weDEuYjU3MWFmNTYyZjA4YTVhMDNkZDg0OTM5OTBiMjlkYjFwMCwKKyAgICAweDEuMGNkNWQ0MzViZWE2ZHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTI3CisgICAgMHgxLmI1NzFhZjU2MmYwOGE1YTAzZGQ4NDkzOTkwYjI5ZGIxcDAsCisgICAgLTB4MS4wY2Q1ZDQzNWJlYTZkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgKKyAgICAtMHgxLmFjNzNkMjkyMGE3OTU1MzM2YWIyYTM0MzZjNzdjMjc2cDAsCisgICAgMHgxLjBlMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTI5CisgICAgMHgxLmFjNzNkMjkyMGE3OTU1MzM2YWIyYTM0MzZjNzdjMjc2cDAsCisgICAgLTB4MS4wZTBwMQorICB9LAorICB7IC8vIEVudHJ5IDEzMAorICAgIC0weDEuMTI2ZGNlOGFjN2M4MTgwMDBjZmNmM2RmMDY2YTRhMmRwLTEsCisgICAgMHgxLjEwODYyMTA4NDIxMDhwNQorICB9LAorICB7IC8vIEVudHJ5IDEzMQorICAgIDB4MS4xMjZkY2U4YWM3YzgxODAwMGNmY2YzZGYwNjZhNGEyZHAtMSwKKyAgICAtMHgxLjEwODYyMTA4NDIxMDhwNQorICB9LAorICB7IC8vIEVudHJ5IDEzMgorICAgIC0weDEuOTY4MGMwMjYwMTA0NmNhNTA2YzBlM2Y3NDRkYjFkMGFwMCwKKyAgICAweDEuMTEwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMKKyAgICAweDEuOTY4MGMwMjYwMTA0NmNhNTA2YzBlM2Y3NDRkYjFkMGFwMCwKKyAgICAtMHgxLjExMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTM0CisgICAgMHgxLmQxZTcxNjkzNDQ2OWIyYmMwMmZhODM1YWUwMTQ5ZjU4cDAsCisgICAgMHgxLjExOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTM1CisgICAgLTB4MS5kMWU3MTY5MzQ0NjliMmJjMDJmYTgzNWFlMDE0OWY1OHAwLAorICAgIC0weDEuMTE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzYKKyAgICAtMHgxLjZhYTczMTAxNDMwODM3ZmZmZmZlYmFhZmQ0NWY3ZWZhcC0xLAorICAgIDB4MS4xOWRmMzg5ZjM5ZTBhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzcKKyAgICAweDEuNmFhNzMxMDE0MzA4MzdmZmZmZmViYWFmZDQ1ZjdlZmFwLTEsCisgICAgLTB4MS4xOWRmMzg5ZjM5ZTBhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzgKKyAgICAweDEuY2I5YTk5MjI3YmRjOTcyY2Q0MTQ1OTY5YzNkYzM4YzFwMSwKKyAgICAweDEuMWMzNTk4MjExMDEzYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTM5CisgICAgLTB4MS5jYjlhOTkyMjdiZGM5NzJjZDQxNDU5NjljM2RjMzhjMXAxLAorICAgIC0weDEuMWMzNTk4MjExMDEzYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTQwCisgICAgLTB4MS5iYzEwOWMzZTYxNzI0NTBhNTMwOGI0YzZlYjI4OThjYXA3LAorICAgIDB4MS4xZDY1YWE0MjI0YzMwcDExOAorICB9LAorICB7IC8vIEVudHJ5IDE0MQorICAgIDB4MS5iYzEwOWMzZTYxNzI0NTBhNTMwOGI0YzZlYjI4OThjYXA3LAorICAgIC0weDEuMWQ2NWFhNDIyNGMzMHAxMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDIKKyAgICAtMHgxLjA5YjM5M2Y0OGIyYzY3ZmZmZjNiZDU1OWM2MzI2ZTYwcC0xLAorICAgIDB4MS4xZTQ2NTgyNzJkYzZmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDMKKyAgICAweDEuMDliMzkzZjQ4YjJjNjdmZmZmM2JkNTU5YzYzMjZlNjBwLTEsCisgICAgLTB4MS4xZTQ2NTgyNzJkYzZmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDQKKyAgICAweDEuMjAwMDAwMDAwMDA3OTgwMDAwMDAwMDNkODI2NjY2NjZwLTIyLAorICAgIDB4MS4ycC0yMgorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIC0weDEuMjAwMDAwMDAwMDA3OTgwMDAwMDAwMDNkODI2NjY2NjZwLTIyLAorICAgIC0weDEuMnAtMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDYKKyAgICAtMHgxLjAyYTMzNWIwMDcwN2E3ZmZmZmJlNDU1YWRhYjdlODE0cDAsCisgICAgMHgxLjIxMjc0MDk2MjBjYWNwOTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDcKKyAgICAweDEuMDJhMzM1YjAwNzA3YTdmZmZmYmU0NTVhZGFiN2U4MTRwMCwKKyAgICAtMHgxLjIxMjc0MDk2MjBjYWNwOTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDgKKyAgICAweDEuMjUwOGI5YzEyNzNhYzAzNGMzYzc5YzQwODhlMmFjZmRwLTQsCisgICAgMHgxLjI0ODkyMjQ4OTIyNDhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDkKKyAgICAtMHgxLjI1MDhiOWMxMjczYWMwMzRjM2M3OWM0MDg4ZTJhY2ZkcC00LAorICAgIC0weDEuMjQ4OTIyNDg5MjI0OHAtNAorICB9LAorICB7IC8vIEVudHJ5IDE1MAorICAgIDB4MS5mZGVkNWY1M2QxMzJkMjZhODI0NGE2M2Y5YmNkZjE1M3AyLAorICAgIDB4MS4yYTUyZDExOWRhMDYxcDIzNworICB9LAorICB7IC8vIEVudHJ5IDE1MQorICAgIC0weDEuZmRlZDVmNTNkMTMyZDI2YTgyNDRhNjNmOWJjZGYxNTNwMiwKKyAgICAtMHgxLjJhNTJkMTE5ZGEwNjFwMjM3CisgIH0sCisgIHsgLy8gRW50cnkgMTUyCisgICAgMHgxLjJkZTU2YTZlZjljNWQ3ZTljNzEwMzA0MDc1MzBmMWQ3cC00LAorICAgIDB4MS4yZDU5ZWJhYjhkYWU0cC00CisgIH0sCisgIHsgLy8gRW50cnkgMTUzCisgICAgLTB4MS4yZGU1NmE2ZWY5YzVkN2U5YzcxMDMwNDA3NTMwZjFkN3AtNCwKKyAgICAtMHgxLjJkNTllYmFiOGRhZTRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTQKKyAgICAweDEuMzE2NjVlYjE5MWZiYTgwMGI3ZTcxNWZkMTE3MTZjOGNwLTQsCisgICAgMHgxLjMwZDVmOGU1NGI2ZDhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTUKKyAgICAtMHgxLjMxNjY1ZWIxOTFmYmE4MDBiN2U3MTVmZDExNzE2YzhjcC00LAorICAgIC0weDEuMzBkNWY4ZTU0YjZkOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDE1NgorICAgIDB4MS4zY2MxZDRkMjhiZmQxN2ZkZWQ5YWU1MDQwNzU5MGYzZnAtMiwKKyAgICAweDEuMzMzMjc1ZDYzZWM1MHAtMgorICB9LAorICB7IC8vIEVudHJ5IDE1NworICAgIC0weDEuM2NjMWQ0ZDI4YmZkMTdmZGVkOWFlNTA0MDc1OTBmM2ZwLTIsCisgICAgLTB4MS4zMzMyNzVkNjNlYzUwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTU4CisgICAgMHgxLjNjYzIzN2MwYzdkY2JmZmYxMDQ2YWQ5YTA2OGFmNTEwcC0yLAorICAgIDB4MS4zMzMyZDAyMGI2ZGE5cC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTU5CisgICAgLTB4MS4zY2MyMzdjMGM3ZGNiZmZmMTA0NmFkOWEwNjhhZjUxMHAtMiwKKyAgICAtMHgxLjMzMzJkMDIwYjZkYTlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjAKKyAgICAweDEuNWU0NzJlMTY5OTlkZjAwMDAwZmMwNmVlNDc0ZmJmYzlwLTEsCisgICAgMHgxLjMzMzMzMzQwMWU2NmJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjEKKyAgICAtMHgxLjVlNDcyZTE2OTk5ZGYwMDAwMGZjMDZlZTQ3NGZiZmM5cC0xLAorICAgIC0weDEuMzMzMzMzNDAxZTY2YnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2MgorICAgIDB4MS5iNWVkMWMyMDgwYTk4N2ZjODRmMjZlYzk1OGIyYWM0N3AtMSwKKyAgICAweDEuMzhmMTM3Y2I5ZGJmY3A5CisgIH0sCisgIHsgLy8gRW50cnkgMTYzCisgICAgLTB4MS5iNWVkMWMyMDgwYTk4N2ZjODRmMjZlYzk1OGIyYWM0N3AtMSwKKyAgICAtMHgxLjM4ZjEzN2NiOWRiZmNwOQorICB9LAorICB7IC8vIEVudHJ5IDE2NAorICAgIDB4MS4wMWFhMjJlMjEzM2QzN2ZmZmZmMmEwYzA4MDkzMzU4ZXAxLAorICAgIDB4MS4zOWEzODNmM2ZhMDAzcDg1CisgIH0sCisgIHsgLy8gRW50cnkgMTY1CisgICAgLTB4MS4wMWFhMjJlMjEzM2QzN2ZmZmZmMmEwYzA4MDkzMzU4ZXAxLAorICAgIC0weDEuMzlhMzgzZjNmYTAwM3A4NQorICB9LAorICB7IC8vIEVudHJ5IDE2NgorICAgIDB4MS5mZmZmZmZmZmZmNTgyMzYzMjI4MTlkMDYwZWI2N2MzY3AtMSwKKyAgICAweDEuM2EyOGM1OWQ1NDMxMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTY3CisgICAgLTB4MS5mZmZmZmZmZmZmNTgyMzYzMjI4MTlkMDYwZWI2N2MzY3AtMSwKKyAgICAtMHgxLjNhMjhjNTlkNTQzMTFwNAorICB9LAorICB7IC8vIEVudHJ5IDE2OAorICAgIDB4MS43MTY2Njg5ZDQ4MDNlODNkMmI2YjFkMTVmNWFjYTI2ZXAtMSwKKyAgICAweDEuNDAwMDAwMDAwM2ZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE2OQorICAgIC0weDEuNzE2NjY4OWQ0ODAzZTgzZDJiNmIxZDE1ZjVhY2EyNmVwLTEsCisgICAgLTB4MS40MDAwMDAwMDAzZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTcwCisgICAgLTB4MS5mZjdkMjdiMzdlYmEwODE5MTk5ZTUzM2NjNTAxNmYwZHAtMSwKKyAgICAweDEuNDA3MjRhNDQ3MTRjZnA1CisgIH0sCisgIHsgLy8gRW50cnkgMTcxCisgICAgMHgxLmZmN2QyN2IzN2ViYTA4MTkxOTllNTMzY2M1MDE2ZjBkcC0xLAorICAgIC0weDEuNDA3MjRhNDQ3MTRjZnA1CisgIH0sCisgIHsgLy8gRW50cnkgMTcyCisgICAgMHgxLjQ1M2E3ZDI5ZGFkYWQ3YzBkZGE3OGE3Mzk4YmUwODczcC00LAorICAgIDB4MS40NDhjMmQ2ZTFlMWFmcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTczCisgICAgLTB4MS40NTNhN2QyOWRhZGFkN2MwZGRhNzhhNzM5OGJlMDg3M3AtNCwKKyAgICAtMHgxLjQ0OGMyZDZlMWUxYWZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzQKKyAgICAtMHgxLmE1MGY3NjAxNDEzZTUzYWIxYzVhMmYwZDY3NmMzOTdjcDAsCisgICAgMHgxLjQ3OGZjMDhwNDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzUKKyAgICAweDEuYTUwZjc2MDE0MTNlNTNhYjFjNWEyZjBkNjc2YzM5N2NwMCwKKyAgICAtMHgxLjQ3OGZjMDhwNDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzYKKyAgICAtMHgxLmE5OTkxYWNiNzYzNmJlZWU1YjFhNWQzNWE4YTg5OTE3cC00LAorICAgIDB4MS40ZTkzYmVlNzJiNTY1cDYyCisgIH0sCisgIHsgLy8gRW50cnkgMTc3CisgICAgMHgxLmE5OTkxYWNiNzYzNmJlZWU1YjFhNWQzNWE4YTg5OTE3cC00LAorICAgIC0weDEuNGU5M2JlZTcyYjU2NXA2MgorICB9LAorICB7IC8vIEVudHJ5IDE3OAorICAgIDB4MS4yOTUyMzk2OTQ1OTQ3YjcyNmViZjAyNWE4YmEwNzA5M3AxLAorICAgIDB4MS40ZjBmMzA4cDQ4OAorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIC0weDEuMjk1MjM5Njk0NTk0N2I3MjZlYmYwMjVhOGJhMDcwOTNwMSwKKyAgICAtMHgxLjRmMGYzMDhwNDg4CisgIH0sCisgIHsgLy8gRW50cnkgMTgwCisgICAgMHgxLjUwNzhjZWJmZjljNzI4MDAwMDAwMDAwMDAwMDI0ZGY4cC01LAorICAgIDB4MS41MDQ4NmIyZjg3MDE0cC01CisgIH0sCisgIHsgLy8gRW50cnkgMTgxCisgICAgLTB4MS41MDc4Y2ViZmY5YzcyODAwMDAwMDAwMDAwMDAyNGRmOHAtNSwKKyAgICAtMHgxLjUwNDg2YjJmODcwMTRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODIKKyAgICAtMHgxLjFjOTI5YjZlZGU5ZWU4MDAwMDQwYTNkMWNhOTBhOWY0cC0xLAorICAgIDB4MS41MTMwZDU1MmYxMDM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAweDEuMWM5MjliNmVkZTllZTgwMDAwNDBhM2QxY2E5MGE5ZjRwLTEsCisgICAgLTB4MS41MTMwZDU1MmYxMDM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODQKKyAgICAweDEuMmFiMzE4OWUyZDRhZTQxYzFhZmYzY2MzMGNmZWRkMzBwMSwKKyAgICAweDEuNTJmMDBlMHA3OTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODUKKyAgICAtMHgxLjJhYjMxODllMmQ0YWU0MWMxYWZmM2NjMzBjZmVkZDMwcDEsCisgICAgLTB4MS41MmYwMGUwcDc5MworICB9LAorICB7IC8vIEVudHJ5IDE4NgorICAgIC0weDEuN2QyZTYzZmI5ODg5MDdhMTA5MDkxZDEzMGY5ZjIwZDFwMCwKKyAgICAweDEuNTM3MTY4NGU1ZmIzNHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTg3CisgICAgMHgxLjdkMmU2M2ZiOTg4OTA3YTEwOTA5MWQxMzBmOWYyMGQxcDAsCisgICAgLTB4MS41MzcxNjg0ZTVmYjM0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODgKKyAgICAtMHgxLmY5ZjRmMGRhNGRlNTQ0OTkyODNhOGFjMmY1NWY3MjU4cC0xLAorICAgIDB4MS41NGVmMjIwODk1NnAyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODkKKyAgICAweDEuZjlmNGYwZGE0ZGU1NDQ5OTI4M2E4YWMyZjU1ZjcyNThwLTEsCisgICAgLTB4MS41NGVmMjIwODk1NnAyMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTAKKyAgICAweDEuMTQ4MzA3MzE0MmU2MDgwMDhmODg0OWRhZjVmOGM1OGRwMiwKKyAgICAweDEuNTdlNTkwYWYwOTAxNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTkxCisgICAgLTB4MS4xNDgzMDczMTQyZTYwODAwOGY4ODQ5ZGFmNWY4YzU4ZHAyLAorICAgIC0weDEuNTdlNTkwYWYwOTAxNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTkyCisgICAgMHgxLjk5NzJkNDAyMWM5NzE1NjM5MzYwNTVkOGMxZWFhZTBhcC0xLAorICAgIDB4MS41OTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTMKKyAgICAtMHgxLjk5NzJkNDAyMWM5NzE1NjM5MzYwNTVkOGMxZWFhZTBhcC0xLAorICAgIC0weDEuNTk2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTk0CisgICAgLTB4MS5lNTAxZmZkM2E2OGMzODMzNmQ5NzdmNjM0MzI2YTM0MnAtMiwKKyAgICAweDEuNTk4MTI5Mzc4M2UxZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTk1CisgICAgMHgxLmU1MDFmZmQzYTY4YzM4MzM2ZDk3N2Y2MzQzMjZhMzQycC0yLAorICAgIC0weDEuNTk4MTI5Mzc4M2UxZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTk2CisgICAgMHgxLjE2MDRjYzNkZmM0MTgxYzNlOTQ4MTU1ODQ2N2E4NWZlcC0xLAorICAgIDB4MS41YmVhMDEwcDQ2OAorICB9LAorICB7IC8vIEVudHJ5IDE5NworICAgIC0weDEuMTYwNGNjM2RmYzQxODFjM2U5NDgxNTU4NDY3YTg1ZmVwLTEsCisgICAgLTB4MS41YmVhMDEwcDQ2OAorICB9LAorICB7IC8vIEVudHJ5IDE5OAorICAgIC0weDEuZjc2Y2E1MGJiYmFlYjAxMmJlYWRlMmEzMjhlNWZjMDNwLTEsCisgICAgMHgxLjYwNjYxYzE5Njk2NjZwMgorICB9LAorICB7IC8vIEVudHJ5IDE5OQorICAgIDB4MS5mNzZjYTUwYmJiYWViMDEyYmVhZGUyYTMyOGU1ZmMwM3AtMSwKKyAgICAtMHgxLjYwNjYxYzE5Njk2NjZwMgorICB9LAorICB7IC8vIEVudHJ5IDIwMAorICAgIDB4MS5jZDhiNzNjOTQzMGZlZjc1ZGM3MTBmZmRmZTA5MWI0MnAwLAorICAgIDB4MS42MmM1YTg1MGExNDJhcDU5CisgIH0sCisgIHsgLy8gRW50cnkgMjAxCisgICAgLTB4MS5jZDhiNzNjOTQzMGZlZjc1ZGM3MTBmZmRmZTA5MWI0MnAwLAorICAgIC0weDEuNjJjNWE4NTBhMTQyYXA1OQorICB9LAorICB7IC8vIEVudHJ5IDIwMgorICAgIDB4MS4zYWNjZmQ0NTNlZTY3Mjk2MDg4Mzc4ZjU4MmVhY2IwMnAwLAorICAgIDB4MS42NGVmNDM4cDE0MgorICB9LAorICB7IC8vIEVudHJ5IDIwMworICAgIC0weDEuM2FjY2ZkNDUzZWU2NzI5NjA4ODM3OGY1ODJlYWNiMDJwMCwKKyAgICAtMHgxLjY0ZWY0MzhwMTQyCisgIH0sCisgIHsgLy8gRW50cnkgMjA0CisgICAgLTB4MS5hY2Q5MzAyZDcyZGU0YmQ4ZGRhOGY1NjUwYjc3ZTczMnAtMSwKKyAgICAweDEuNjU4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDUKKyAgICAweDEuYWNkOTMwMmQ3MmRlNGJkOGRkYThmNTY1MGI3N2U3MzJwLTEsCisgICAgLTB4MS42NThwMgorICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIDB4MS5mMDA0Zjg3NWMyZTczODE1OWM3ZDc1YTM5ODBjYWZkN3AtMSwKKyAgICAweDEuNjYwM2M2NWQzNDhkMnA1CisgIH0sCisgIHsgLy8gRW50cnkgMjA3CisgICAgLTB4MS5mMDA0Zjg3NWMyZTczODE1OWM3ZDc1YTM5ODBjYWZkN3AtMSwKKyAgICAtMHgxLjY2MDNjNjVkMzQ4ZDJwNQorICB9LAorICB7IC8vIEVudHJ5IDIwOAorICAgIDB4MS5mNTM0OTZlNmQ3ZjcxODFhNjJmZWM0YzhhNzEwOTAwZXAtMSwKKyAgICAweDEuNjYwZTZiZjJlMDkyYXA1CisgIH0sCisgIHsgLy8gRW50cnkgMjA5CisgICAgLTB4MS5mNTM0OTZlNmQ3ZjcxODFhNjJmZWM0YzhhNzEwOTAwZXAtMSwKKyAgICAtMHgxLjY2MGU2YmYyZTA5MmFwNQorICB9LAorICB7IC8vIEVudHJ5IDIxMAorICAgIDB4MS5iNjRlZTI0ZjAxMTljODAwZDVkMGJiMTBhMzlhY2E0ZXAtMSwKKyAgICAweDEuNmE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjExCisgICAgLTB4MS5iNjRlZTI0ZjAxMTljODAwZDVkMGJiMTBhMzlhY2E0ZXAtMSwKKyAgICAtMHgxLjZhOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDIxMgorICAgIC0weDEuZDliYTlhNzk3NTYzNWEzYWNjMzI0ZTZhZWRhNDUxMzNwNjAsCisgICAgMHgxLjZhYzViMjYyY2ExZmZwODQ5CisgIH0sCisgIHsgLy8gRW50cnkgMjEzCisgICAgMHgxLmQ5YmE5YTc5NzU2MzVhM2FjYzMyNGU2YWVkYTQ1MTMzcDYwLAorICAgIC0weDEuNmFjNWIyNjJjYTFmZnA4NDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTQKKyAgICAweDEuYjZmNTU3Yjk5OWUyMmUwZGIxMGE5MmI5MDhlODc3ZjZwLTEsCisgICAgMHgxLjZhZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDIxNQorICAgIC0weDEuYjZmNTU3Yjk5OWUyMmUwZGIxMGE5MmI5MDhlODc3ZjZwLTEsCisgICAgLTB4MS42YWVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTYKKyAgICAweDEuYzFlMWQ1YzRjMGYwNzdmYzg3MWQ0YmQwYTAzYzY0MzFwLTEsCisgICAgMHgxLjZjZGIzNmNkYjM2YzlwMjM5CisgIH0sCisgIHsgLy8gRW50cnkgMjE3CisgICAgLTB4MS5jMWUxZDVjNGMwZjA3N2ZjODcxZDRiZDBhMDNjNjQzMXAtMSwKKyAgICAtMHgxLjZjZGIzNmNkYjM2YzlwMjM5CisgIH0sCisgIHsgLy8gRW50cnkgMjE4CisgICAgMHgxLjk1YmNlNGY1Nzg2OTc4MDc4YzMxMDIxMGRjZWQ2ZjNmcC0xLAorICAgIDB4MS42ZjFhZjE2MTIyNzBhcDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTkKKyAgICAtMHgxLjk1YmNlNGY1Nzg2OTc4MDc4YzMxMDIxMGRjZWQ2ZjNmcC0xLAorICAgIC0weDEuNmYxYWYxNjEyMjcwYXA2CisgIH0sCisgIHsgLy8gRW50cnkgMjIwCisgICAgMHgxLjcxMWU4ZjVmZmZiYTFmNTk5NTk1ZmJhYWM1YjcwZTBicC00LAorICAgIDB4MS43MDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjEKKyAgICAtMHgxLjcxMWU4ZjVmZmZiYTFmNTk5NTk1ZmJhYWM1YjcwZTBicC00LAorICAgIC0weDEuNzAycC00CisgIH0sCisgIHsgLy8gRW50cnkgMjIyCisgICAgMHgxLmZiNTg5OGYyOWJiMjU3ZmRhNmYyYmVkZmM0OTFhYmFlcDIsCisgICAgMHgxLjcyMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjIzCisgICAgLTB4MS5mYjU4OThmMjliYjI1N2ZkYTZmMmJlZGZjNDkxYWJhZXAyLAorICAgIC0weDEuNzIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjQKKyAgICAtMHgxLmZmOWI3NzEyODRkMjMyOTBjZGQ4MzcxN2NjOTA1NzczcDEsCisgICAgMHgxLjczNDhjMzQ3ZGRjMjBwMjM5CisgIH0sCisgIHsgLy8gRW50cnkgMjI1CisgICAgMHgxLmZmOWI3NzEyODRkMjMyOTBjZGQ4MzcxN2NjOTA1NzczcDEsCisgICAgLTB4MS43MzQ4YzM0N2RkYzIwcDIzOQorICB9LAorICB7IC8vIEVudHJ5IDIyNgorICAgIDB4MS5mNzJkNDdhMDA4MGUyZDNkMDQwODYzZDU2ZGJiNTY3ZXAtMiwKKyAgICAweDEuNzM5Y2U3MzljZTczOHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjcKKyAgICAtMHgxLmY3MmQ0N2EwMDgwZTJkM2QwNDA4NjNkNTZkYmI1NjdlcC0yLAorICAgIC0weDEuNzM5Y2U3MzljZTczOHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjgKKyAgICAweDEuNzY0NDFlN2Y4ZWE1ZjgwMDAwMDFkMWM1Yzg0ZjEwNGVwLTQsCisgICAgMHgxLjc1M2FjYzNkM2ZmMzVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjkKKyAgICAtMHgxLjc2NDQxZTdmOGVhNWY4MDAwMDAxZDFjNWM4NGYxMDRlcC00LAorICAgIC0weDEuNzUzYWNjM2QzZmYzNXAtNAorICB9LAorICB7IC8vIEVudHJ5IDIzMAorICAgIDB4MS5jZTNmNjQyZTE1YWYzYzkyMWRkNzEyOWRiNWUzOTM0MnAtMSwKKyAgICAweDEuNzdmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDIzMQorICAgIC0weDEuY2UzZjY0MmUxNWFmM2M5MjFkZDcxMjlkYjVlMzkzNDJwLTEsCisgICAgLTB4MS43N2ZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjMyCisgICAgMHgxLmY0MjUwMDJhNTQ4ZWI0MDU0NTA5NzBhMzUzZDMwN2Y3cDQyLAorICAgIDB4MS43OGZkYjllZmZlYTI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzMKKyAgICAtMHgxLmY0MjUwMDJhNTQ4ZWI0MDU0NTA5NzBhMzUzZDMwN2Y3cDQyLAorICAgIC0weDEuNzhmZGI5ZWZmZWEyNnA0CisgIH0sCisgIHsgLy8gRW50cnkgMjM0CisgICAgLTB4MS5kYmM4MGRlN2RkMDQyYTkzNzFlMWI0NTcxOGU1MWJhYnAtMSwKKyAgICAweDEuN2E1Zjc0NjA3ZTg1MXAxOQorICB9LAorICB7IC8vIEVudHJ5IDIzNQorICAgIDB4MS5kYmM4MGRlN2RkMDQyYTkzNzFlMWI0NTcxOGU1MWJhYnAtMSwKKyAgICAtMHgxLjdhNWY3NDYwN2U4NTFwMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzYKKyAgICAweDEuN2IzYmIzZDBiM2NhNDJmMTMyMDc4NDI4OTllMGJhNzFwNDIsCisgICAgMHgxLjdmN2VmNzdlODNmMWFwMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzcKKyAgICAtMHgxLjdiM2JiM2QwYjNjYTQyZjEzMjA3ODQyODk5ZTBiYTcxcDQyLAorICAgIC0weDEuN2Y3ZWY3N2U4M2YxYXAxOQorICB9LAorICB7IC8vIEVudHJ5IDIzOAorICAgIDB4MS5lN2YwNWI3MWNkMmQwZmI0ZGY2YTQzMzc1Y2Q4ZjY3MHAzMywKKyAgICAweDEuN2Y3ZjEwYTA3ZjQ1ZXAyMAorICB9LAorICB7IC8vIEVudHJ5IDIzOQorICAgIC0weDEuZTdmMDViNzFjZDJkMGZiNGRmNmE0MzM3NWNkOGY2NzBwMzMsCisgICAgLTB4MS43ZjdmMTBhMDdmNDVlcDIwCisgIH0sCisgIHsgLy8gRW50cnkgMjQwCisgICAgMHgxLjgwMDAwMDAwMDAwMDM4MDAwMDAwMDAwMDA3MzMzMzMzcC0yNSwKKyAgICAweDEuN2ZmZmZmZmZmZmZmZnAtMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDEKKyAgICAtMHgxLjgwMDAwMDAwMDAwMDM4MDAwMDAwMDAwMDA3MzMzMzMzcC0yNSwKKyAgICAtMHgxLjdmZmZmZmZmZmZmZmZwLTI1CisgIH0sCisgIHsgLy8gRW50cnkgMjQyCisgICAgMHgxLjgwMDAwMDAwMDAwMDY4MDAwMDAwMDAwMDIyMzMzMzMzcC0yNSwKKyAgICAweDEuODAwMDAwMDAwMDAwMnAtMjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDMKKyAgICAtMHgxLjgwMDAwMDAwMDAwMDY4MDAwMDAwMDAwMDIyMzMzMzMzcC0yNSwKKyAgICAtMHgxLjgwMDAwMDAwMDAwMDJwLTI1CisgIH0sCisgIHsgLy8gRW50cnkgMjQ0CisgICAgMHgxLjI0MjQ1YWY0Y2Q5OTRlOWIzYmJhOTkyZDEwMTYzNjVicC01MiwKKyAgICAweDEuODFhZTBkZmZhM2IzM3A5NTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDUKKyAgICAtMHgxLjI0MjQ1YWY0Y2Q5OTRlOWIzYmJhOTkyZDEwMTYzNjVicC01MiwKKyAgICAtMHgxLjgxYWUwZGZmYTNiMzNwOTU5CisgIH0sCisgIHsgLy8gRW50cnkgMjQ2CisgICAgMHgxLmQ3MjI2MWQ5OGUyNmI3ZmZhMzAwZDg5ZmQ0NmZiNzc1cC0xLAorICAgIDB4MS44NDZiZDdhNGRjZTU1cDY5OAorICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIC0weDEuZDcyMjYxZDk4ZTI2YjdmZmEzMDBkODlmZDQ2ZmI3NzVwLTEsCisgICAgLTB4MS44NDZiZDdhNGRjZTU1cDY5OAorICB9LAorICB7IC8vIEVudHJ5IDI0OAorICAgIDB4MS40MmQ4YTFiYTQ0MWFkNDAyOGFjN2YxYTZhNWVlMGM1NHAxLAorICAgIDB4MS44NzIwNTg4cDM5MgorICB9LAorICB7IC8vIEVudHJ5IDI0OQorICAgIC0weDEuNDJkOGExYmE0NDFhZDQwMjhhYzdmMWE2YTVlZTBjNTRwMSwKKyAgICAtMHgxLjg3MjA1ODhwMzkyCisgIH0sCisgIHsgLy8gRW50cnkgMjUwCisgICAgMHgxLmVhN2I0NDRjZDc5OGQ3ZmFlZWZmMDkzZjFkOTk3MWFkcC0xLAorICAgIDB4MS44NzIyYTY3ZWExNGFjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjUxCisgICAgLTB4MS5lYTdiNDQ0Y2Q3OThkN2ZhZWVmZjA5M2YxZDk5NzFhZHAtMSwKKyAgICAtMHgxLjg3MjJhNjdlYTE0YWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTIKKyAgICAtMHgxLmM3ZGM3ZjA4ZGJiYTA4OWYyZDdlODkwMDIxYmVkY2I3cC0xLAorICAgIDB4MS44OTkzNmM4ODI4ZDM4cDI5OQorICB9LAorICB7IC8vIEVudHJ5IDI1MworICAgIDB4MS5jN2RjN2YwOGRiYmEwODlmMmQ3ZTg5MDAyMWJlZGNiN3AtMSwKKyAgICAtMHgxLjg5OTM2Yzg4MjhkMzhwMjk5CisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgMHgxLjU2OTY1M2UzMTliYmE4MDAwMDBjODM2MzJlNDNhYmRlcDEsCisgICAgMHgxLjhhNjkxMDZmYjk3OThwNgorICB9LAorICB7IC8vIEVudHJ5IDI1NQorICAgIC0weDEuNTY5NjUzZTMxOWJiYTgwMDAwMGM4MzYzMmU0M2FiZGVwMSwKKyAgICAtMHgxLjhhNjkxMDZmYjk3OThwNgorICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIDB4MS5mMmRiMjE0NjlmM2Q1ODE5ZmE5YmE4ZGNjYmZmOTE0YXAtMSwKKyAgICAweDEuOGI3NzdlMWQyMzA4Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDI1NworICAgIC0weDEuZjJkYjIxNDY5ZjNkNTgxOWZhOWJhOGRjY2JmZjkxNGFwLTEsCisgICAgLTB4MS44Yjc3N2UxZDIzMDhjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjU4CisgICAgMHgxLmYzNjg4YmMyNTk0ZTIwMTAyNTczY2ZmNDgxOTBhYzI4cC0xLAorICAgIDB4MS44YmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTkKKyAgICAtMHgxLmYzNjg4YmMyNTk0ZTIwMTAyNTczY2ZmNDgxOTBhYzI4cC0xLAorICAgIC0weDEuOGJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgMHgxLjhkM2EyNTQ0NTY2ZGY3YjU1OWI0YWM0OGUxMmVhYzcxcC00LAorICAgIDB4MS44YmZkMjI3NGQ4NTFhcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjYxCisgICAgLTB4MS44ZDNhMjU0NDU2NmRmN2I1NTliNGFjNDhlMTJlYWM3MXAtNCwKKyAgICAtMHgxLjhiZmQyMjc0ZDg1MWFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAweDEuZjQ1NzVjYzRlNDc3ZjAxOWRhYjVkMDEwM2FhZjkxY2ZwLTEsCisgICAgMHgxLjhjM2E0NTAwNzFkZDlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjMKKyAgICAtMHgxLmY0NTc1Y2M0ZTQ3N2YwMTlkYWI1ZDAxMDNhYWY5MWNmcC0xLAorICAgIC0weDEuOGMzYTQ1MDA3MWRkOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2NAorICAgIC0weDEuMWUwOWY2NmM0MjUwYjk0ZTkwMzBjYWRkMDA4NTExNThwMTEsCisgICAgMHgxLjhjYzBkZDJiMGY0YjhwMjAwCisgIH0sCisgIHsgLy8gRW50cnkgMjY1CisgICAgMHgxLjFlMDlmNjZjNDI1MGI5NGU5MDMwY2FkZDAwODUxMTU4cDExLAorICAgIC0weDEuOGNjMGRkMmIwZjRiOHAyMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjYKKyAgICAweDEuZjcxNDk2Y2I5MjFlNWE0ZDJmMzkwNDZhNjI4YjY1MDlwLTEsCisgICAgMHgxLjhkYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIC0weDEuZjcxNDk2Y2I5MjFlNWE0ZDJmMzkwNDZhNjI4YjY1MDlwLTEsCisgICAgLTB4MS44ZGFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjgKKyAgICAweDEuZjcxYjRhNjU5MTE2OTgxOTQ3NmU2Yjc1OWM3YWFlNTJwLTEsCisgICAgMHgxLjhkYTM2OGRhMzY4ZDhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjkKKyAgICAtMHgxLmY3MWI0YTY1OTExNjk4MTk0NzZlNmI3NTljN2FhZTUycC0xLAorICAgIC0weDEuOGRhMzY4ZGEzNjhkOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDI3MAorICAgIDB4MS5mZjliNjhjY2FkYjJmZjYyYzI2ODY0Mjg4ZWQ2YTRkZnAtMSwKKyAgICAweDEuOTFlZDY0Yjk3N2E5YXAtMQorICB9LAorICB7IC8vIEVudHJ5IDI3MQorICAgIC0weDEuZmY5YjY4Y2NhZGIyZmY2MmMyNjg2NDI4OGVkNmE0ZGZwLTEsCisgICAgLTB4MS45MWVkNjRiOTc3YTlhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMjcyCisgICAgMHgxLjAwMDAwMDAwMjkwNDg0Nzc5ZmE0OTFjNzI4YWVmOTQ1cDE4LAorICAgIDB4MS45MjFmNzU0NDQyZDE5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzMKKyAgICAtMHgxLjAwMDAwMDAwMjkwNDg0Nzc5ZmE0OTFjNzI4YWVmOTQ1cDE4LAorICAgIC0weDEuOTIxZjc1NDQ0MmQxOXAwCisgIH0sCisgIHsgLy8gRW50cnkgMjc0CisgICAgMHgxLmVlZjA2N2FmZDMyOGYzMTFjZTJjN2ExZjQyMGE1OTgzcDQ4LAorICAgIDB4MS45MjFmYjU0NDQyZDEwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzUKKyAgICAtMHgxLmVlZjA2N2FmZDMyOGYzMTFjZTJjN2ExZjQyMGE1OTgzcDQ4LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjc2CisgICAgMHgxLjAwMDAwMDAwMDNhZjJmMjIzZWIxZTcwOWNiYTAwZWMzcC0xNywKKyAgICAweDEuOTIxZmY1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgLTB4MS4wMDAwMDAwMDAzYWYyZjIyM2ViMWU3MDljYmEwMGVjM3AtMTcsCisgICAgLTB4MS45MjFmZjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzgKKyAgICAtMHgxLmI2NzcyY2I2NjdkYzE4N2I3ZDAxOWQxZDcyMzJjOWU3cDE3LAorICAgIDB4MS45MjJwMAorICB9LAorICB7IC8vIEVudHJ5IDI3OQorICAgIDB4MS5iNjc3MmNiNjY3ZGMxODdiN2QwMTlkMWQ3MjMyYzllN3AxNywKKyAgICAtMHgxLjkyMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMjgwCisgICAgLTB4MS5mZmZmZmZmY2VlZWZlNzkxYmUyMDc0Nzc5ZmQxZGQ5ZXAtMSwKKyAgICAweDEuOTIyMDcxYzMxZmM5OXAyMAorICB9LAorICB7IC8vIEVudHJ5IDI4MQorICAgIDB4MS5mZmZmZmZmY2VlZWZlNzkxYmUyMDc0Nzc5ZmQxZGQ5ZXAtMSwKKyAgICAtMHgxLjkyMjA3MWMzMWZjOTlwMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODIKKyAgICAweDEuOWQ3YzEzNTRiYTZmNzgxYzhiMDQ0MDgwOTRmNDUyODRwLTMsCisgICAgMHgxLjk3ZmZmZmZmZmZmZmZwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODMKKyAgICAtMHgxLjlkN2MxMzU0YmE2Zjc4MWM4YjA0NDA4MDk0ZjQ1Mjg0cC0zLAorICAgIC0weDEuOTdmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDI4NAorICAgIDB4MS45YWY4ODc3YmI0NWU0N2ZmZmZlOTYxMDg0YjJjMGJlYXAtNCwKKyAgICAweDEuOTk5OTk5YTEwYTEzY3AtNAorICB9LAorICB7IC8vIEVudHJ5IDI4NQorICAgIC0weDEuOWFmODg3N2JiNDVlNDdmZmZmZTk2MTA4NGIyYzBiZWFwLTQsCisgICAgLTB4MS45OTk5OTlhMTBhMTNjcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjg2CisgICAgLTB4MS5iNmNlMTI4NTg3Y2QwN2ZmZmY3NTdhYmRhMjk0YzE1MXA0LAorICAgIDB4MS45Yjc0NDQ2ZWQwNWRjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODcKKyAgICAweDEuYjZjZTEyODU4N2NkMDdmZmZmNzU3YWJkYTI5NGMxNTFwNCwKKyAgICAtMHgxLjliNzQ0NDZlZDA1ZGNwMAorICB9LAorICB7IC8vIEVudHJ5IDI4OAorICAgIDB4MS5mZjY1YWVmNTRjOGZjODA0Mjg0MTA3MWI0NWI2ZDdkOXAtMSwKKyAgICAweDEuOWVhZTQ5NGQyYjI3NXA0CisgIH0sCisgIHsgLy8gRW50cnkgMjg5CisgICAgLTB4MS5mZjY1YWVmNTRjOGZjODA0Mjg0MTA3MWI0NWI2ZDdkOXAtMSwKKyAgICAtMHgxLjllYWU0OTRkMmIyNzVwNAorICB9LAorICB7IC8vIEVudHJ5IDI5MAorICAgIDB4MS42MTc3NmFhNDA3YTQzN2Y2MTdmY2FkYjE1YzdmNjFjMnAtMywKKyAgICAweDEuYTgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTEKKyAgICAtMHgxLjYxNzc2YWE0MDdhNDM3ZjYxN2ZjYWRiMTVjN2Y2MWMycC0zLAorICAgIC0weDEuYTgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTIKKyAgICAweDEuYjYwMDFkZTEzYWQ5NTgwMDczYWNiYTRhYTQyM2UyZDlwLTMsCisgICAgMHgxLmFmOHAtMworICB9LAorICB7IC8vIEVudHJ5IDI5MworICAgIC0weDEuYjYwMDFkZTEzYWQ5NTgwMDczYWNiYTRhYTQyM2UyZDlwLTMsCisgICAgLTB4MS5hZjhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTQKKyAgICAweDEuYjVhMDUwM2FlMzU0YjdhMTZmN2M1MGY4YjNiZWYyY2FwLTQsCisgICAgMHgxLmIzZjhlYTdiMWY5MWJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTUKKyAgICAtMHgxLmI1YTA1MDNhZTM1NGI3YTE2ZjdjNTBmOGIzYmVmMmNhcC00LAorICAgIC0weDEuYjNmOGVhN2IxZjkxYnAtNAorICB9LAorICB7IC8vIEVudHJ5IDI5NgorICAgIDB4MS5iNWEwNTAzYWU0YzdiNzkyNTM3MzI3ZjQyNDVhYzZmYnAtNCwKKyAgICAweDEuYjNmOGVhN2IyMTAwOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDI5NworICAgIC0weDEuYjVhMDUwM2FlNGM3Yjc5MjUzNzMyN2Y0MjQ1YWM2ZmJwLTQsCisgICAgLTB4MS5iM2Y4ZWE3YjIxMDA4cC00CisgIH0sCisgIHsgLy8gRW50cnkgMjk4CisgICAgMHgxLjA1NzU4NGM0MjliM2E2ZWEwYTY1Y2FmZjk4NjM0NDkwcDU5LAorICAgIDB4MS5iOTUxZjE1NzJlYmE1cDIzCisgIH0sCisgIHsgLy8gRW50cnkgMjk5CisgICAgLTB4MS4wNTc1ODRjNDI5YjNhNmVhMGE2NWNhZmY5ODYzNDQ5MHA1OSwKKyAgICAtMHgxLmI5NTFmMTU3MmViYTVwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDAKKyAgICAtMHgxLjlhMjgyZmExZmY3ZDk4MDM5YmUzYmY1YjM5Y2M2ZDg5cDIsCisgICAgMHgxLmI5Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMzAxCisgICAgMHgxLjlhMjgyZmExZmY3ZDk4MDM5YmUzYmY1YjM5Y2M2ZDg5cDIsCisgICAgLTB4MS5iOWNwMAorICB9LAorICB7IC8vIEVudHJ5IDMwMgorICAgIC0weDEuMDI3ZDE4NGFmYjE5ODRjYTFkMjFiMWFjOTMxMTE4ODdwLTUyLAorICAgIDB4MS5iYWI2MmVkNjU1MDE5cDk3MAorICB9LAorICB7IC8vIEVudHJ5IDMwMworICAgIDB4MS4wMjdkMTg0YWZiMTk4NGNhMWQyMWIxYWM5MzExMTg4N3AtNTIsCisgICAgLTB4MS5iYWI2MmVkNjU1MDE5cDk3MAorICB9LAorICB7IC8vIEVudHJ5IDMwNAorICAgIDB4MS5jYTZlZmRmODQ1ZDZjN2ZmZmViYWVhMWFmYmY3ZTk2MXAyLAorICAgIDB4MS5iZWExYjM1ZjNjYjZkcDg0CisgIH0sCisgIHsgLy8gRW50cnkgMzA1CisgICAgLTB4MS5jYTZlZmRmODQ1ZDZjN2ZmZmViYWVhMWFmYmY3ZTk2MXAyLAorICAgIC0weDEuYmVhMWIzNWYzY2I2ZHA4NAorICB9LAorICB7IC8vIEVudHJ5IDMwNgorICAgIDB4MS5mZDg3YjM0NzQ3Yjc0NmI4YjY1N2NhYzc5N2MwODcwZHA0MiwKKyAgICAweDEuYzQ2M2FiZWNjYjI3YnAzCisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgLTB4MS5mZDg3YjM0NzQ3Yjc0NmI4YjY1N2NhYzc5N2MwODcwZHA0MiwKKyAgICAtMHgxLmM0NjNhYmVjY2IyN2JwMworICB9LAorICB7IC8vIEVudHJ5IDMwOAorICAgIDB4MS5mZmZmZmZmZmZmZmZiMDk0NTQxYTI0NjFlNzM0ZGFlZXAtMSwKKyAgICAweDEuYzQ2M2FiZWNjYjJiYnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzA5CisgICAgLTB4MS5mZmZmZmZmZmZmZmZiMDk0NTQxYTI0NjFlNzM0ZGFlZXAtMSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmJwMgorICB9LAorICB7IC8vIEVudHJ5IDMxMAorICAgIDB4MS5mYjA1NzAyOWFjZmQxN2ZmZmZmYTVhYzgyMDRmMDgwM3AtMSwKKyAgICAweDEuYzZjYmUyNmI3YjQ1ZnA4NgorICB9LAorICB7IC8vIEVudHJ5IDMxMQorICAgIC0weDEuZmIwNTcwMjlhY2ZkMTdmZmZmZmE1YWM4MjA0ZjA4MDNwLTEsCisgICAgLTB4MS5jNmNiZTI2YjdiNDVmcDg2CisgIH0sCisgIHsgLy8gRW50cnkgMzEyCisgICAgMHgxLmM4ZDVhMDhiZTQwYzIwcC0xMTcsCisgICAgMHgxLmM4ZDVhMDhiZTQwYzJwLTExNworICB9LAorICB7IC8vIEVudHJ5IDMxMworICAgIC0weDEuYzhkNWEwOGJlNDBjMjBwLTExNywKKyAgICAtMHgxLmM4ZDVhMDhiZTQwYzJwLTExNworICB9LAorICB7IC8vIEVudHJ5IDMxNAorICAgIDB4MS5lNWRmZmQ3ZjA2Y2IzNzU0OTMzY2VhNTc4ZGVhYWQzNnAtMiwKKyAgICAweDEuY2FkNGU5ODI3YTJiZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMzE1CisgICAgLTB4MS5lNWRmZmQ3ZjA2Y2IzNzU0OTMzY2VhNTc4ZGVhYWQzNnAtMiwKKyAgICAtMHgxLmNhZDRlOTgyN2EyYmVwMQorICB9LAorICB7IC8vIEVudHJ5IDMxNgorICAgIDB4MS5lNmJlMzc4YjFiNGViNzY1OGU4NWFkMGFmMzM4MzZhOXAtMiwKKyAgICAweDEuY2FlYjk0MGU0Yjk5N3AxCisgIH0sCisgIHsgLy8gRW50cnkgMzE3CisgICAgLTB4MS5lNmJlMzc4YjFiNGViNzY1OGU4NWFkMGFmMzM4MzZhOXAtMiwKKyAgICAtMHgxLmNhZWI5NDBlNGI5OTdwMQorICB9LAorICB7IC8vIEVudHJ5IDMxOAorICAgIDB4MS5lNzJiZDAyNWExZmQ1NzY1Zjg1MzQ2OWE4NWFlN2I3ZHAtMiwKKyAgICAweDEuY2FmNmMwNGVjZDAzNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzE5CisgICAgLTB4MS5lNzJiZDAyNWExZmQ1NzY1Zjg1MzQ2OWE4NWFlN2I3ZHAtMiwKKyAgICAtMHgxLmNhZjZjMDRlY2QwMzRwMQorICB9LAorICB7IC8vIEVudHJ5IDMyMAorICAgIDB4MS5lODQ0YjNkN2NiZTQzNzVjMjhlMzIyZGE2YmE1ZDdkOHAtMiwKKyAgICAweDEuY2IxMzVlYzFjOTU2ZXAxCisgIH0sCisgIHsgLy8gRW50cnkgMzIxCisgICAgLTB4MS5lODQ0YjNkN2NiZTQzNzVjMjhlMzIyZGE2YmE1ZDdkOHAtMiwKKyAgICAtMHgxLmNiMTM1ZWMxYzk1NmVwMQorICB9LAorICB7IC8vIEVudHJ5IDMyMgorICAgIDB4MS5kZDM4YTFmMWQyODliNjE3MzExNTcyMWJjNWMxZmM3MnAtNTQsCisgICAgMHgxLmNiNDRlODZiYzE5MmJwNjQ4CisgIH0sCisgIHsgLy8gRW50cnkgMzIzCisgICAgLTB4MS5kZDM4YTFmMWQyODliNjE3MzExNTcyMWJjNWMxZmM3MnAtNTQsCisgICAgLTB4MS5jYjQ0ZTg2YmMxOTJicDY0OAorICB9LAorICB7IC8vIEVudHJ5IDMyNAorICAgIDB4MS5kZDM4YTFmMWQyODliNjE3MzExNTcyMWJjNjI5YTIzZHAtNTMsCisgICAgMHgxLmNiNDRlODZiYzE5MmJwNjQ5CisgIH0sCisgIHsgLy8gRW50cnkgMzI1CisgICAgLTB4MS5kZDM4YTFmMWQyODliNjE3MzExNTcyMWJjNjI5YTIzZHAtNTMsCisgICAgLTB4MS5jYjQ0ZTg2YmMxOTJicDY0OQorICB9LAorICB7IC8vIEVudHJ5IDMyNgorICAgIC0weDEuZmZmNmU3NTUzMjBlZDc4ZGI0ZDZlZmY0YmY2YTZiMTBwMSwKKyAgICAweDEuY2I2MWFmZWRiMmIzY3AxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjcKKyAgICAweDEuZmZmNmU3NTUzMjBlZDc4ZGI0ZDZlZmY0YmY2YTZiMTBwMSwKKyAgICAtMHgxLmNiNjFhZmVkYjJiM2NwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMzI4CisgICAgMHgxLmNjZGY0YWE2YzIyOGY4MDQxYmU5MWExNDJlMGUyNzFicC03LAorICAgIDB4MS5jY2Q3ODM0YmEzODA0cC03CisgIH0sCisgIHsgLy8gRW50cnkgMzI5CisgICAgLTB4MS5jY2RmNGFhNmMyMjhmODA0MWJlOTFhMTQyZTBlMjcxYnAtNywKKyAgICAtMHgxLmNjZDc4MzRiYTM4MDRwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzAKKyAgICAweDEuY2VlNTAwMTZmYzJkODgzNzI4NmJmNmZkNDMxYTdiM2JwLTQsCisgICAgMHgxLmNjZjA1OTlkYTQ3OGVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzEKKyAgICAtMHgxLmNlZTUwMDE2ZmMyZDg4MzcyODZiZjZmZDQzMWE3YjNicC00LAorICAgIC0weDEuY2NmMDU5OWRhNDc4ZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDMzMgorICAgIDB4MS40NGNmM2VlOGE3NWE4N2NjNjY1N2U2MmY5NGE5M2U2ZnAwLAorICAgIDB4MS5jZThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzMKKyAgICAtMHgxLjQ0Y2YzZWU4YTc1YTg3Y2M2NjU3ZTYyZjk0YTkzZTZmcDAsCisgICAgLTB4MS5jZThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzQKKyAgICAweDEuNDVhYTEyZmY5ODE1MjgwMDAwMWZiZDg3OTlhOTZhMmNwMCwKKyAgICAweDEuY2YyNzZjOWNiOWFmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDMzNQorICAgIC0weDEuNDVhYTEyZmY5ODE1MjgwMDAwMWZiZDg3OTlhOTZhMmNwMCwKKyAgICAtMHgxLmNmMjc2YzljYjlhZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzYKKyAgICAweDEuZjliYzc0NGY2MWUwZWQ4NTM4MjllMmY3NjViOGExMmNwLTQsCisgICAgMHgxLmQyZTk3OTE0OGE0NThwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzcKKyAgICAtMHgxLmY5YmM3NDRmNjFlMGVkODUzODI5ZTJmNzY1YjhhMTJjcC00LAorICAgIC0weDEuZDJlOTc5MTQ4YTQ1OHA2MQorICB9LAorICB7IC8vIEVudHJ5IDMzOAorICAgIDB4MS42ZTcwZjllZGJkMWEwODJhZTZmOTBjNjJlZjRmMzFkZHAtMiwKKyAgICAweDEuZDZiNWFkNmI1YWI2OHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzkKKyAgICAtMHgxLjZlNzBmOWVkYmQxYTA4MmFlNmY5MGM2MmVmNGYzMWRkcC0yLAorICAgIC0weDEuZDZiNWFkNmI1YWI2OHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDAKKyAgICAweDEuMTNlOWM2YTM0OGU0YTdiZWRlODI3MjQ1MDUyNjlmNjhwMiwKKyAgICAweDEuZDk2ZTA1OHA0ODgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDEKKyAgICAtMHgxLjEzZTljNmEzNDhlNGE3YmVkZTgyNzI0NTA1MjY5ZjY4cDIsCisgICAgLTB4MS5kOTZlMDU4cDQ4OAorICB9LAorICB7IC8vIEVudHJ5IDM0MgorICAgIC0weDEuZDM1NTQ2M2MyMzAzNTgyZmEzMWEzMjM4ZGNiZTU2MGVwLTUsCisgICAgMHgxLmRkMTBmMjUxNzFiYzlwNQorICB9LAorICB7IC8vIEVudHJ5IDM0MworICAgIDB4MS5kMzU1NDYzYzIzMDM1ODJmYTMxYTMyMzhkY2JlNTYwZXAtNSwKKyAgICAtMHgxLmRkMTBmMjUxNzFiYzlwNQorICB9LAorICB7IC8vIEVudHJ5IDM0NAorICAgIDB4MS5kZGYyMWViZjZmYzkyN2ZmZmZmYmIzZWNjMGNmZjY2ZXAtNiwKKyAgICAweDEuZGRjZjZlNTY2OTZhNHAtNgorICB9LAorICB7IC8vIEVudHJ5IDM0NQorICAgIC0weDEuZGRmMjFlYmY2ZmM5MjdmZmZmZmJiM2VjYzBjZmY2NmVwLTYsCisgICAgLTB4MS5kZGNmNmU1NjY5NmE0cC02CisgIH0sCisgIHsgLy8gRW50cnkgMzQ2CisgICAgMHgxLjVjYjBiZmMxNTU4MDA3ZTBjNWQwOTVmNzI5ZTM0MjdicDAsCisgICAgMHgxLmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDcKKyAgICAtMHgxLjVjYjBiZmMxNTU4MDA3ZTBjNWQwOTVmNzI5ZTM0MjdicDAsCisgICAgLTB4MS5lcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgLTB4MS45N2I1ZThhZTlhMjFjN2Y0ODIxOTIyYmM1YjM3ODJjY3AxLAorICAgIDB4MS5lcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDkKKyAgICAweDEuOTdiNWU4YWU5YTIxYzdmNDgyMTkyMmJjNWIzNzgyY2NwMSwKKyAgICAtMHgxLmVwMAorICB9LAorICB7IC8vIEVudHJ5IDM1MAorICAgIC0weDEuZjhiZjY4ZDBjMjNmMzc0MWVmYjhiZDk5ODUzYmFlOGFwMCwKKyAgICAweDEuZTc3OWRlNzc5ZGU3MXAxMTgKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTEKKyAgICAweDEuZjhiZjY4ZDBjMjNmMzc0MWVmYjhiZDk5ODUzYmFlOGFwMCwKKyAgICAtMHgxLmU3NzlkZTc3OWRlNzFwMTE4CisgIH0sCisgIHsgLy8gRW50cnkgMzUyCisgICAgLTB4MS5mZmZmZmZmZmZkNzFjZjkzNGVmM2U1ZGY0MDA4NjY1ZnAtMSwKKyAgICAweDEuZWIwNTY3YmVkMWY3MXAxMgorICB9LAorICB7IC8vIEVudHJ5IDM1MworICAgIDB4MS5mZmZmZmZmZmZkNzFjZjkzNGVmM2U1ZGY0MDA4NjY1ZnAtMSwKKyAgICAtMHgxLmViMDU2N2JlZDFmNzFwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTQKKyAgICAweDEuZWU3ODhkMWNjNzk1NDg0MTg3ODQ3M2FhNWQyNjE1YTVwLTQsCisgICAgMHgxLmVjMTZmMzBhMzRmYmNwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTUKKyAgICAtMHgxLmVlNzg4ZDFjYzc5NTQ4NDE4Nzg0NzNhYTVkMjYxNWE1cC00LAorICAgIC0weDEuZWMxNmYzMGEzNGZiY3AtNAorICB9LAorICB7IC8vIEVudHJ5IDM1NgorICAgIDB4MS5lZmRhZDkzOGI0YjBlODM0MDE0YmY1NmE3MDg0Njc1ZHAtNCwKKyAgICAweDEuZWQ3NDI0YmEyYWE0ZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDM1NworICAgIC0weDEuZWZkYWQ5MzhiNGIwZTgzNDAxNGJmNTZhNzA4NDY3NWRwLTQsCisgICAgLTB4MS5lZDc0MjRiYTJhYTRlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzU4CisgICAgMHgxLmRhMzQ3NjA3OTQ4ZjQ3ZmZlZjIxNjk3MTYxZmQzY2RkcC0xLAorICAgIDB4MS5lZTllZGE1ODkwMzkwcDQ5OQorICB9LAorICB7IC8vIEVudHJ5IDM1OQorICAgIC0weDEuZGEzNDc2MDc5NDhmNDdmZmVmMjE2OTcxNjFmZDNjZGRwLTEsCisgICAgLTB4MS5lZTllZGE1ODkwMzkwcDQ5OQorICB9LAorICB7IC8vIEVudHJ5IDM2MAorICAgIDB4MS5mNjgyZDI3YThiZTg3Zjc4M2Q0OTQ4NTdiNmYzMGUwNXAwLAorICAgIDB4MS5mNGZmMGQ3YjNhYzEwcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDM2MQorICAgIC0weDEuZjY4MmQyN2E4YmU4N2Y3ODNkNDk0ODU3YjZmMzBlMDVwMCwKKyAgICAtMHgxLmY0ZmYwZDdiM2FjMTBwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMzYyCisgICAgLTB4MS5mZmQzNmE3NTNjZWQ5MDI3YzkzODQ1YWRkZTA0NjI0NnAtMSwKKyAgICAweDEuZjVhODE0YWZkNjlmNXAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjMKKyAgICAweDEuZmZkMzZhNzUzY2VkOTAyN2M5Mzg0NWFkZGUwNDYyNDZwLTEsCisgICAgLTB4MS5mNWE4MTRhZmQ2OWY1cDExOQorICB9LAorICB7IC8vIEVudHJ5IDM2NAorICAgIC0weDEuMGZhNzcwMWQwNTliNTFkZTA1ZGY1OGFkZTI2YmVjNWNwLTksCisgICAgMHgxLmY4ZmM4MjRkMjY5M2JwNjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjUKKyAgICAweDEuMGZhNzcwMWQwNTliNTFkZTA1ZGY1OGFkZTI2YmVjNWNwLTksCisgICAgLTB4MS5mOGZjODI0ZDI2OTNicDYxCisgIH0sCisgIHsgLy8gRW50cnkgMzY2CisgICAgLTB4MS5hZmUzODc1YmQzYWZlODAxZjE0OWQwYTlhZDM2ZjQ1M3AtNCwKKyAgICAweDEuZjliZTZmOWJlNmY5OHA5CisgIH0sCisgIHsgLy8gRW50cnkgMzY3CisgICAgMHgxLmFmZTM4NzViZDNhZmU4MDFmMTQ5ZDBhOWFkMzZmNDUzcC00LAorICAgIC0weDEuZjliZTZmOWJlNmY5OHA5CisgIH0sCisgIHsgLy8gRW50cnkgMzY4CisgICAgMHgxLmZkMTAzMmU4MmRlYWI3YmFiYTk5YzkxM2RlZTEwYjlhcC00LAorICAgIDB4MS5mYTc3NWNkMjY0ZjQzcC00CisgIH0sCisgIHsgLy8gRW50cnkgMzY5CisgICAgLTB4MS5mZDEwMzJlODJkZWFiN2JhYmE5OWM5MTNkZWUxMGI5YXAtNCwKKyAgICAtMHgxLmZhNzc1Y2QyNjRmNDNwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzAKKyAgICAweDEuZmVhOGM2N2RkNDZjYTgzY2E0OWFiOWVjZDAzNjA3MzlwLTQsCisgICAgMHgxLmZjMDliNDc0MDJkODJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzEKKyAgICAtMHgxLmZlYThjNjdkZDQ2Y2E4M2NhNDlhYjllY2QwMzYwNzM5cC00LAorICAgIC0weDEuZmMwOWI0NzQwMmQ4MnAtNAorICB9LAorICB7IC8vIEVudHJ5IDM3MgorICAgIC0weDEuOTAyMGNhZjE4YTg3NDM4MTI3YTg1ZDFmMGEzZDQyMDVwLTEsCisgICAgMHgxLmZlZWZmZmZmZmZmYzZwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgMzczCisgICAgMHgxLjkwMjBjYWYxOGE4NzQzODEyN2E4NWQxZjBhM2Q0MjA1cC0xLAorICAgIC0weDEuZmVlZmZmZmZmZmZjNnA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzQKKyAgICAweDEuYWYxMzViZWIwZjI4MTdmYmE3NzIwNGE1YjFiNjc2NmJwMCwKKyAgICAweDEuZmYwMWZmZmZmZmZmZnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzc1CisgICAgLTB4MS5hZjEzNWJlYjBmMjgxN2ZiYTc3MjA0YTViMWI2NzY2YnAwLAorICAgIC0weDEuZmYwMWZmZmZmZmZmZnA3CisgIH0sCisgIHsgLy8gRW50cnkgMzc2CisgICAgLTB4MS5mZDk3NTMyZWZkODliMjZiYzI5NGIyN2UwYTE5NTZiOXAzLAorICAgIDB4MS5mZjhmZmZmZmZmZmZmcDU0MAorICB9LAorICB7IC8vIEVudHJ5IDM3NworICAgIDB4MS5mZDk3NTMyZWZkODliMjZiYzI5NGIyN2UwYTE5NTZiOXAzLAorICAgIC0weDEuZmY4ZmZmZmZmZmZmZnA1NDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzgKKyAgICAtMHgxLmNjMzJjYjkzMzgxODExMWU2ZGRmMDBjNWM3OWNiYzg4cC0xLAorICAgIDB4MS5mZjhmZmZmZmZmZmZmcDg3MAorICB9LAorICB7IC8vIEVudHJ5IDM3OQorICAgIDB4MS5jYzMyY2I5MzM4MTgxMTFlNmRkZjAwYzVjNzljYmM4OHAtMSwKKyAgICAtMHgxLmZmOGZmZmZmZmZmZmZwODcwCisgIH0sCisgIHsgLy8gRW50cnkgMzgwCisgICAgLTB4MS44NjU5ZDNlMmI1MmI4ODA2NjhhYzhiNGI5ZmFlOTUzOHAtMSwKKyAgICAweDEuZmZjMTBwOQorICB9LAorICB7IC8vIEVudHJ5IDM4MQorICAgIDB4MS44NjU5ZDNlMmI1MmI4ODA2NjhhYzhiNGI5ZmFlOTUzOHAtMSwKKyAgICAtMHgxLmZmYzEwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODIKKyAgICAtMHgxLmI2NjA2NmZiODEyZWUyN2RiYjYyM2ExYTEzNTNlMDYycC0yLAorICAgIDB4MS5mZmNmZmY4cDE5CisgIH0sCisgIHsgLy8gRW50cnkgMzgzCisgICAgMHgxLmI2NjA2NmZiODEyZWUyN2RiYjYyM2ExYTEzNTNlMDYycC0yLAorICAgIC0weDEuZmZjZmZmOHAxOQorICB9LAorICB7IC8vIEVudHJ5IDM4NAorICAgIC0weDEuNTIwZWJkMzJlMWQ4ZWNkMzhiZmNkNmE1N2UxYTM3N2ZwMSwKKyAgICAweDEuZmZjZmZmOHAzNjUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODUKKyAgICAweDEuNTIwZWJkMzJlMWQ4ZWNkMzhiZmNkNmE1N2UxYTM3N2ZwMSwKKyAgICAtMHgxLmZmY2ZmZjhwMzY1CisgIH0sCisgIHsgLy8gRW50cnkgMzg2CisgICAgMHgxLjQ4OTgxM2MyNGQxM2IwMGFiNjk2MjdkODU4YmI2M2I1cDAsCisgICAgMHgxLmZmY2ZmZmZmZmZmNmNwNzIwCisgIH0sCisgIHsgLy8gRW50cnkgMzg3CisgICAgLTB4MS40ODk4MTNjMjRkMTNiMDBhYjY5NjI3ZDg1OGJiNjNiNXAwLAorICAgIC0weDEuZmZjZmZmZmZmZmY2Y3A3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODgKKyAgICAweDEuNDEzZTYzZjdkZDYwN2VmM2M4NDIyYTQ5MGFmMmRjMzBwMCwKKyAgICAweDEuZmZjZmZmZmZmZmZmOXAzMjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODkKKyAgICAtMHgxLjQxM2U2M2Y3ZGQ2MDdlZjNjODQyMmE0OTBhZjJkYzMwcDAsCisgICAgLTB4MS5mZmNmZmZmZmZmZmY5cDMyMAorICB9LAorICB7IC8vIEVudHJ5IDM5MAorICAgIC0weDEuZmMzOTI4YTM5YjY1Mjg0ZDRjN2VmM2I2YTJlZGM4ZjFwLTIsCisgICAgMHgxLmZmY2ZmZmZmZmZmZmZwOTkwCisgIH0sCisgIHsgLy8gRW50cnkgMzkxCisgICAgMHgxLmZjMzkyOGEzOWI2NTI4NGQ0YzdlZjNiNmEyZWRjOGYxcC0yLAorICAgIC0weDEuZmZjZmZmZmZmZmZmZnA5OTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTIKKyAgICAtMHgxLjlhZDcwZDI4NGYxNmQ1OWRjYWEwYWI5ZmI3N2Q3NDkwcC0xLAorICAgIDB4MS5mZmVmZmZmZmZmZmNjcDk5NQorICB9LAorICB7IC8vIEVudHJ5IDM5MworICAgIDB4MS45YWQ3MGQyODRmMTZkNTlkY2FhMGFiOWZiNzdkNzQ5MHAtMSwKKyAgICAtMHgxLmZmZWZmZmZmZmZmY2NwOTk1CisgIH0sCisgIHsgLy8gRW50cnkgMzk0CisgICAgMHgxLmFhZDZlZmZjYjY3ODM4MjZkZTdiMjRkYmE1MDFjMTFjcC0zLAorICAgIDB4MS5mZmVmZmZmZmZmZmZkcDM2NgorICB9LAorICB7IC8vIEVudHJ5IDM5NQorICAgIC0weDEuYWFkNmVmZmNiNjc4MzgyNmRlN2IyNGRiYTUwMWMxMWNwLTMsCisgICAgLTB4MS5mZmVmZmZmZmZmZmZkcDM2NgorICB9LAorICB7IC8vIEVudHJ5IDM5NgorICAgIDB4MS5jODg2NDVmOWQxMTllYzIwMzA3MjRhNGNlNGU2ZWJiYXAyLAorICAgIDB4MS5mZmVmZmZmZmZmZmZmcDE4MAorICB9LAorICB7IC8vIEVudHJ5IDM5NworICAgIC0weDEuYzg4NjQ1ZjlkMTE5ZWMyMDMwNzI0YTRjZTRlNmViYmFwMiwKKyAgICAtMHgxLmZmZWZmZmZmZmZmZmZwMTgwCisgIH0sCisgIHsgLy8gRW50cnkgMzk4CisgICAgMHgxLjEzMWFhN2I5ZDRhYTA3ZmY1ODQwYWMxZThmYjQyMzYwcDIsCisgICAgMHgxLmZmZWZmZmZmZmZmZmZwMjMxCisgIH0sCisgIHsgLy8gRW50cnkgMzk5CisgICAgLTB4MS4xMzFhYTdiOWQ0YWEwN2ZmNTg0MGFjMWU4ZmI0MjM2MHAyLAorICAgIC0weDEuZmZlZmZmZmZmZmZmZnAyMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDAKKyAgICAweDEuZjY3MTcxOWJlNTBkMWQ0ZGViZTg1YzkyMmUxZTI5MTNwLTMsCisgICAgMHgxLmZmZWZmZmZmZmZmZmZwMTAxOQorICB9LAorICB7IC8vIEVudHJ5IDQwMQorICAgIC0weDEuZjY3MTcxOWJlNTBkMWQ0ZGViZTg1YzkyMmUxZTI5MTNwLTMsCisgICAgLTB4MS5mZmVmZmZmZmZmZmZmcDEwMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDIKKyAgICAweDEuZmYwNzhhMmQyZDg3MWFjMWYzMjc2NWU5ZGI2NDRlYjFwLTEsCisgICAgMHgxLmZmZjFmZmZmZmZmZmZwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDMKKyAgICAtMHgxLmZmMDc4YTJkMmQ4NzFhYzFmMzI3NjVlOWRiNjQ0ZWIxcC0xLAorICAgIC0weDEuZmZmMWZmZmZmZmZmZnA0MAorICB9LAorICB7IC8vIEVudHJ5IDQwNAorICAgIDB4MS4wNzg0YjA0ZmM0MmE1OWU3N2Y4NWQ5OTY3ZGE2Nzc1ZHA5LAorICAgIDB4MS5mZmYxZmZmZmZmZmZmcDQxCisgIH0sCisgIHsgLy8gRW50cnkgNDA1CisgICAgLTB4MS4wNzg0YjA0ZmM0MmE1OWU3N2Y4NWQ5OTY3ZGE2Nzc1ZHA5LAorICAgIC0weDEuZmZmMWZmZmZmZmZmZnA0MQorICB9LAorICB7IC8vIEVudHJ5IDQwNgorICAgIDB4MS44ZWIyMmRkMTY3YTM3YWQyMWRkZjFlNjk3MzRlOWNlMnAwLAorICAgIDB4MS5mZmZmZjFmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDA3CisgICAgLTB4MS44ZWIyMmRkMTY3YTM3YWQyMWRkZjFlNjk3MzRlOWNlMnAwLAorICAgIC0weDEuZmZmZmYxZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQwOAorICAgIC0weDEuMjJlNzM0NmZkM2RkYTU1M2IxNDZjMzdmNjExMjdhNGNwMSwKKyAgICAweDEuZmZmZmZmOHAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDkKKyAgICAweDEuMjJlNzM0NmZkM2RkYTU1M2IxNDZjMzdmNjExMjdhNGNwMSwKKyAgICAtMHgxLmZmZmZmZjhwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgNDEwCisgICAgLTB4MS5kYjBiM2IwMTlmMTc1YmVkNWJjZjFhNTYwMmRiMDBhZnAtMywKKyAgICAweDEuZmZmZmZmOHAxOTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTEKKyAgICAweDEuZGIwYjNiMDE5ZjE3NWJlZDViY2YxYTU2MDJkYjAwYWZwLTMsCisgICAgLTB4MS5mZmZmZmY4cDE5MgorICB9LAorICB7IC8vIEVudHJ5IDQxMgorICAgIDB4MS4wNmI2YmVkZTkxMDI1N2YzMTVhNTA4M2E5YWIyYjY1MHAtMSwKKyAgICAweDEuZmZmZmZmOHA1NDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTMKKyAgICAtMHgxLjA2YjZiZWRlOTEwMjU3ZjMxNWE1MDgzYTlhYjJiNjUwcC0xLAorICAgIC0weDEuZmZmZmZmOHA1NDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTQKKyAgICAtMHgxLjQwZjAyYTE1ZGZhM2Q3ZmYzZTJhNDU1M2YxOWNiMmQwcDEsCisgICAgMHgxLmZmZmZmZmZmYmJmZmZwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTUKKyAgICAweDEuNDBmMDJhMTVkZmEzZDdmZjNlMmE0NTUzZjE5Y2IyZDBwMSwKKyAgICAtMHgxLmZmZmZmZmZmYmJmZmZwNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MTYKKyAgICAweDEuYWI2MDExMmVmNGZkZGZmM2Y1YTI2OTBjN2QzZWE2ZWZwLTIsCisgICAgMHgxLmZmZmZmZmZmZjdmZmZwMjMxCisgIH0sCisgIHsgLy8gRW50cnkgNDE3CisgICAgLTB4MS5hYjYwMTEyZWY0ZmRkZmYzZjVhMjY5MGM3ZDNlYTZlZnAtMiwKKyAgICAtMHgxLmZmZmZmZmZmZjdmZmZwMjMxCisgIH0sCisgIHsgLy8gRW50cnkgNDE4CisgICAgMHgxLjM1YTk5MjllZWFmZDcwZjA3MTJhYmUyYTUxMTg1NGExcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmNzhwOTIwCisgIH0sCisgIHsgLy8gRW50cnkgNDE5CisgICAgLTB4MS4zNWE5OTI5ZWVhZmQ3MGYwNzEyYWJlMmE1MTE4NTRhMXAwLAorICAgIC0weDEuZmZmZmZmZmZmZmY3OHA5MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjAKKyAgICAweDEuNDYzMDI5OGYzYjk5MzI4NzIwNWRjMGI4OWIwNjAxZTBwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZkNXA5OTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjEKKyAgICAtMHgxLjQ2MzAyOThmM2I5OTMyODcyMDVkYzBiODliMDYwMWUwcDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmQ1cDk5NQorICB9LAorICB7IC8vIEVudHJ5IDQyMgorICAgIC0weDEuOTQ3MmUwNDUxMjlmZGJhNjM3OTE3MTI0MTZlYzk2MTNwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZThwNzIwCisgIH0sCisgIHsgLy8gRW50cnkgNDIzCisgICAgMHgxLjk0NzJlMDQ1MTI5ZmRiYTYzNzkxNzEyNDE2ZWM5NjEzcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZlOHA3MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjQKKyAgICAweDEuNDJlNTg2ZGFhMWI0MjhmYzA1ODA4ODhmMmZjNDY4OTNwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZlYnA5MjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjUKKyAgICAtMHgxLjQyZTU4NmRhYTFiNDI4ZmMwNTgwODg4ZjJmYzQ2ODkzcDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmVicDkyMAorICB9LAorICB7IC8vIEVudHJ5IDQyNgorICAgIC0weDEuYmZjNDM2Yjk0Mzc0YjVmMTZiNjBlYTY5Y2Q4ODM5OTJwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZjFwMjQ1CisgIH0sCisgIHsgLy8gRW50cnkgNDI3CisgICAgMHgxLmJmYzQzNmI5NDM3NGI1ZjE2YjYwZWE2OWNkODgzOTkycC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmMXAyNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjgKKyAgICAweDEuMzUxMTdkNGE0ZjFlNGJiMjJmZGQwMzE2NGEzNjRjY2ZwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmNHA4NDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjkKKyAgICAtMHgxLjM1MTE3ZDRhNGYxZTRiYjIyZmRkMDMxNjRhMzY0Y2NmcDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmY0cDg0NQorICB9LAorICB7IC8vIEVudHJ5IDQzMAorICAgIC0weDEuYmZkZDkyOTI3OThhYWE3ODljM2RmMGRmNzcyOTgzNWFwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZjRwMTAyMAorICB9LAorICB7IC8vIEVudHJ5IDQzMQorICAgIDB4MS5iZmRkOTI5Mjc5OGFhYTc4OWMzZGYwZGY3NzI5ODM1YXAtMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjRwMTAyMAorICB9LAorICB7IC8vIEVudHJ5IDQzMgorICAgIC0weDEuOWI3NjhjY2RhZTZlYmI3MGI0NWFjMTRlOTJiM2Q1YzhwOSwKKyAgICAweDEuZmZmZmZmZmZmZmZmY3A0NQorICB9LAorICB7IC8vIEVudHJ5IDQzMworICAgIDB4MS45Yjc2OGNjZGFlNmViYjcwYjQ1YWMxNGU5MmIzZDVjOHA5LAorICAgIC0weDEuZmZmZmZmZmZmZmZmY3A0NQorICB9LAorICB7IC8vIEVudHJ5IDQzNAorICAgIDB4MS5mZWNhMDQ3ZjI3MzBmNzM5NWQ5NWY0NjljY2I1YTVkM3AtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmY3A0NzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzUKKyAgICAtMHgxLmZlY2EwNDdmMjczMGY3Mzk1ZDk1ZjQ2OWNjYjVhNWQzcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmY3A0NzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzYKKyAgICAtMHgxLjQ0OWYxNWNjOTQ1NTk3ZmY1OGYyNDI2YWNiZmY5YzYycC0yLAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcDk3NgorICB9LAorICB7IC8vIEVudHJ5IDQzNworICAgIDB4MS40NDlmMTVjYzk0NTU5N2ZmNThmMjQyNmFjYmZmOWM2MnAtMiwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmNwOTc2CisgIH0sCisgIHsgLy8gRW50cnkgNDM4CisgICAgMHgxLmZmZmM1OGRhMDc5NTFjYmUyMmM5NmQ3M2IxMjg5ZTFlcC0yLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDg4MQorICB9LAorICB7IC8vIEVudHJ5IDQzOQorICAgIC0weDEuZmZmYzU4ZGEwNzk1MWNiZTIyYzk2ZDczYjEyODllMWVwLTIsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlcDg4MQorICB9LAorICB7IC8vIEVudHJ5IDQ0MAorICAgIC0weDEuYzFjOTE5NWVjMjNhYTY0ZGYxNDVkZDI2OWNkODk1ZThwLTEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwOTcwCisgIH0sCisgIHsgLy8gRW50cnkgNDQxCisgICAgMHgxLmMxYzkxOTVlYzIzYWE2NGRmMTQ1ZGQyNjljZDg5NWU4cC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXA5NzAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDIKKyAgICAweDEuM2NjMWVkMzkwNmQyZjdmZGQ2MzNjZjRlYjA2ZjNmMTlwLTIsCisgICAgMHgxLjMzMzI4YzFiMzczMjFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDMKKyAgICAtMHgxLjNjYzFlZDM5MDZkMmY3ZmRkNjMzY2Y0ZWIwNmYzZjE5cC0yLAorICAgIC0weDEuMzMzMjhjMWIzNzMyMXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ0NAorICAgIC0weDEucC0xMDc0LAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDQ0NQorICAgIDB4MS5wLTEwNzQsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDYKKyAgICAtMC4wLAorICAgIC0wLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDcKKyAgICAweDEucC0xMDc0LAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNDQ4CisgICAgLTB4MS5wLTEwNzQsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNDQ5CisgICAgLTB4MS4wMDAwMDAwMDAwMDAxMHAtMTAyMiwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTAKKyAgICAweDEuMDAwMDAwMDAwMDAwMTBwLTEwMjIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTEKKyAgICAtMHgxLnAtMTAyMiwKKyAgICAtMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTIKKyAgICAweDEucC0xMDIyLAorICAgIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgNDUzCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlMHAtMTAyMywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTQKKyAgICAweDEuZmZmZmZmZmZmZmZmZTBwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTUKKyAgICAweDEuZmZmZmZmZmZmZmZmZTBwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTYKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmUwcC0xMDIzLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAtMTAyMworICB9LAorICB7IC8vIEVudHJ5IDQ1NworICAgIDB4MS5wLTEwMjIsCisgICAgMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTgKKyAgICAtMHgxLnAtMTAyMiwKKyAgICAtMHgxLjBwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTkKKyAgICAweDEuMDAwMDAwMDAwMDAwMTBwLTEwMjIsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwLTEwMjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjAKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDEwcC0xMDIyLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDQ2MQorICAgIDB4MS45OTk5OTlmMGZiMzhjNjEyMmExZmE4ZTA0M2JiMDdjMnAtMTMsCisgICAgMHgxLjk5OTk5OTk5OTk5OWFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgNDYyCisgICAgLTB4MS45OTk5OTlmMGZiMzhjNjEyMmExZmE4ZTA0M2JiMDdjMnAtMTMsCisgICAgLTB4MS45OTk5OTk5OTk5OTlhcC0xMworICB9LAorICB7IC8vIEVudHJ5IDQ2MworICAgIDB4MS45OTk5OWFmNzIwMTc0NGI4MjNlNWIyNzBmZDFhYTM5ZHAtMTIsCisgICAgMHgxLjk5OTk5OTk5OTk5OWFwLTEyCisgIH0sCisgIHsgLy8gRW50cnkgNDY0CisgICAgLTB4MS45OTk5OWFmNzIwMTc0NGI4MjNlNWIyNzBmZDFhYTM5ZHAtMTIsCisgICAgLTB4MS45OTk5OTk5OTk5OTlhcC0xMgorICB9LAorICB7IC8vIEVudHJ5IDQ2NQorICAgIDB4MS4zMzMzMzU4MTA2MmEzOGYwNGRmMDI0MTQyZGRhYTA1ZHAtMTEsCisgICAgMHgxLjMzMzMzMzMzMzMzMzRwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNDY2CisgICAgLTB4MS4zMzMzMzU4MTA2MmEzOGYwNGRmMDI0MTQyZGRhYTA1ZHAtMTEsCisgICAgLTB4MS4zMzMzMzMzMzMzMzM0cC0xMQorICB9LAorICB7IC8vIEVudHJ5IDQ2NworICAgIDB4MS45OTk5OWYwZmIzYTBmOWQ4ODczOGJlMmZmN2FmOWFhYXAtMTEsCisgICAgMHgxLjk5OTk5OTk5OTk5OWFwLTExCisgIH0sCisgIHsgLy8gRW50cnkgNDY4CisgICAgLTB4MS45OTk5OWYwZmIzYTBmOWQ4ODczOGJlMmZmN2FmOWFhYXAtMTEsCisgICAgLTB4MS45OTk5OTk5OTk5OTlhcC0xMQorICB9LAorICB7IC8vIEVudHJ5IDQ2OQorICAgIDB4MS4wMDAwMDU1NTU1Nzc3Nzc4NTQ4NTRkZWRjMjhlYWQ1MXAtMTAsCisgICAgMHgxLjBwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDcwCisgICAgLTB4MS4wMDAwMDU1NTU1Nzc3Nzc4NTQ4NTRkZWRjMjhlYWQ1MXAtMTAsCisgICAgLTB4MS4wcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDQ3MQorICAgIDB4MS4zMzMzM2M2YTdmNGVjNzM4NTMxNTFjZDc2Yjc5ZTEzNXAtMTAsCisgICAgMHgxLjMzMzMzMzMzMzMzMzNwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDcyCisgICAgLTB4MS4zMzMzM2M2YTdmNGVjNzM4NTMxNTFjZDc2Yjc5ZTEzNXAtMTAsCisgICAgLTB4MS4zMzMzMzMzMzMzMzMzcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDQ3MworICAgIDB4MS42NjY2NzUwOGUwYTFiNTAyMjg3MDM0ZDM2YmY0ZTNkNXAtMTAsCisgICAgMHgxLjY2NjY2NjY2NjY2NjZwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDc0CisgICAgLTB4MS42NjY2NzUwOGUwYTFiNTAyMjg3MDM0ZDM2YmY0ZTNkNXAtMTAsCisgICAgLTB4MS42NjY2NjY2NjY2NjY2cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NQorICAgIDB4MS45OTk5YWY3MjAyYzM2NmYxZTBiNTQ4YTMxYzQxZDIxMHAtMTAsCisgICAgMHgxLjk5OTk5OTk5OTk5OTlwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDc2CisgICAgLTB4MS45OTk5YWY3MjAyYzM2NmYxZTBiNTQ4YTMxYzQxZDIxMHAtMTAsCisgICAgLTB4MS45OTk5OTk5OTk5OTk5cC0xMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NworICAgIDB4MS5jY2NjZWJlNzZmMTAyZmY2MzNjNWYwMmEzNDA3NjY4N3AtMTAsCisgICAgMHgxLmNjY2NjY2NjY2NjY2NwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgNDc4CisgICAgLTB4MS5jY2NjZWJlNzZmMTAyZmY2MzNjNWYwMmEzNDA3NjY4N3AtMTAsCisgICAgLTB4MS5jY2NjY2NjY2NjY2NjcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDQ3OQorICAgIDB4MS4wNjY3ZDVmY2YzZDA3OGY5NDA2ODdlYjk3NDMxMGZiOXAtNywKKyAgICAweDEuMDY2NjY2NjY2NjY2NnAtNworICB9LAorICB7IC8vIEVudHJ5IDQ4MAorICAgIC0weDEuMDY2N2Q1ZmNmM2QwNzhmOTQwNjg3ZWI5NzQzMTBmYjlwLTcsCisgICAgLTB4MS4wNjY2NjY2NjY2NjY2cC03CisgIH0sCisgIHsgLy8gRW50cnkgNDgxCisgICAgMHgxLmNjZDQ5MzlkMGNjZDc2NDZiM2Y4MWI3NTUzNjc1YzIzcC03LAorICAgIDB4MS5jY2NjY2NjY2NjY2NjcC03CisgIH0sCisgIHsgLy8gRW50cnkgNDgyCisgICAgLTB4MS5jY2Q0OTM5ZDBjY2Q3NjQ2YjNmODFiNzU1MzY3NWMyM3AtNywKKyAgICAtMHgxLmNjY2NjY2NjY2NjY2NwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODMKKyAgICAweDEuNDlhNGZjMDJhZDE5M2U4ZTk0YzRiMjQyOTE5MGI1YjJwLTYsCisgICAgMHgxLjQ5OTk5OTk5OTk5OTlwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODQKKyAgICAtMHgxLjQ5YTRmYzAyYWQxOTNlOGU5NGM0YjI0MjkxOTBiNWIycC02LAorICAgIC0weDEuNDk5OTk5OTk5OTk5OXAtNgorICB9LAorICB7IC8vIEVudHJ5IDQ4NQorICAgIDB4MS5hY2U1ZGVkNWY2YmU2OThmNTY2OTdhYzc2MWYzZGM2OXAtNiwKKyAgICAweDEuYWNjY2NjY2NjY2NjY3AtNgorICB9LAorICB7IC8vIEVudHJ5IDQ4NgorICAgIC0weDEuYWNlNWRlZDVmNmJlNjk4ZjU2Njk3YWM3NjFmM2RjNjlwLTYsCisgICAgLTB4MS5hY2NjY2NjY2NjY2NjcC02CisgIH0sCisgIHsgLy8gRW50cnkgNDg3CisgICAgMHgxLjA4MTc2N2ZkM2NiNjg1ZjdiMDY5MTQ2Y2UzMzMzODUxcC01LAorICAgIDB4MS4wODBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODgKKyAgICAtMHgxLjA4MTc2N2ZkM2NiNjg1ZjdiMDY5MTQ2Y2UzMzMzODUxcC01LAorICAgIC0weDEuMDgwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDg5CisgICAgMHgxLjM5YzBkNmRlYTY2ZmI2ZDI4NmQ0MDNjMjkyNTI3MzU2cC01LAorICAgIDB4MS4zOTk5OTk5OTk5OTlhcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDkwCisgICAgLTB4MS4zOWMwZDZkZWE2NmZiNmQyODZkNDAzYzI5MjUyNzM1NnAtNSwKKyAgICAtMHgxLjM5OTk5OTk5OTk5OWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTEKKyAgICAweDEuNmI3MDJiOTU0YmMxZDU4M2M0YTQ2NzczYzJjMmExNWRwLTUsCisgICAgMHgxLjZiMzMzMzMzMzMzMzRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTIKKyAgICAtMHgxLjZiNzAyYjk1NGJjMWQ1ODNjNGE0Njc3M2MyYzJhMTVkcC01LAorICAgIC0weDEuNmIzMzMzMzMzMzMzNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ5MworICAgIDB4MS45ZDI2NTYxOGRkMGM2ODhlMDQ5YzYxMDkwZDNlM2ZlMnAtNSwKKyAgICAweDEuOWNjY2NjY2NjY2NjZXAtNQorICB9LAorICB7IC8vIEVudHJ5IDQ5NAorICAgIC0weDEuOWQyNjU2MThkZDBjNjg4ZTA0OWM2MTA5MGQzZTNmZTJwLTUsCisgICAgLTB4MS45Y2NjY2NjY2NjY2NlcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDk1CisgICAgMHgxLmNlZTQ0NmU0Y2ZkNGJlNjkwMGY0YjkwNmNhOTcyNWIxcC01LAorICAgIDB4MS5jZTY2NjY2NjY2NjY2cC01CisgIH0sCisgIHsgLy8gRW50cnkgNDk2CisgICAgLTB4MS5jZWU0NDZlNGNmZDRiZTY5MDBmNGI5MDZjYTk3MjViMXAtNSwKKyAgICAtMHgxLmNlNjY2NjY2NjY2NjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTcKKyAgICAweDEuYTFlYWVkZDVhNDMxM2U5ZDA4YmM3YmIxN2EyMjUzMWZwLTEsCisgICAgMHgxLjVlN2ZjNDM2OWJkYWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTgKKyAgICAtMHgxLmExZWFlZGQ1YTQzMTNlOWQwOGJjN2JiMTdhMjI1MzFmcC0xLAorICAgIC0weDEuNWU3ZmM0MzY5YmRhZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ5OQorICAgIDB4MS5kOTNiOGFhZDQyNGRlMGU0M2ZiMDRkNjc4MWJlODFhM3AxLAorICAgIDB4MS40ZTdmYzQzNjliZGFkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDAKKyAgICAtMHgxLmQ5M2I4YWFkNDI0ZGUwZTQzZmIwNGQ2NzgxYmU4MWEzcDEsCisgICAgLTB4MS40ZTdmYzQzNjliZGFkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDEKKyAgICAtMHgxLjU2M2FjZjE1OGMyZWI2NzhkNzFiZTMxZTBmMzQ3NTRkcDEsCisgICAgMHgxLmVkYmZhNjUxZTljODRwMAorICB9LAorICB7IC8vIEVudHJ5IDUwMgorICAgIDB4MS41NjNhY2YxNThjMmViNjc4ZDcxYmUzMWUwZjM0NzU0ZHAxLAorICAgIC0weDEuZWRiZmE2NTFlOWM4NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTAzCisgICAgLTB4MS41NzZiNzc2MDlmMDg5MDMxM2MzNzFhMGEyYzU4MjE0NXAtMSwKKyAgICAweDEuNDY3ZmM0MzY5YmRhZHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTA0CisgICAgMHgxLjU3NmI3NzYwOWYwODkwMzEzYzM3MWEwYTJjNTgyMTQ1cC0xLAorICAgIC0weDEuNDY3ZmM0MzY5YmRhZHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTA1CisgICAgMHgxLjAwMTU1Nzc3YWViZjZhZDQxYjM5YTgwOGVkNWMzMzg0cC01LAorICAgIDB4MS45NjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDYKKyAgICAtMHgxLjAwMTU1Nzc3YWViZjZhZDQxYjM5YTgwOGVkNWMzMzg0cC01LAorICAgIC0weDEuOTYxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTA3CisgICAgMHgxLjg3ZTk5NjZlN2QyMmQzNDhmZWM2Yzk1Zjg1MTc3NWY0cC0xLAorICAgIDB4MS5lNWJmYTY1MWU5YzgzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDgKKyAgICAtMHgxLjg3ZTk5NjZlN2QyMmQzNDhmZWM2Yzk1Zjg1MTc3NWY0cC0xLAorICAgIC0weDEuZTViZmE2NTFlOWM4M3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTA5CisgICAgMHgxLmE0OWU3ZDg5ODc4NTBmOWNhNWI5MzMyZTM5ZGNkODhmcDEsCisgICAgMHgxLjFhYWZjYmFmYzg1ZjdwMgorICB9LAorICB7IC8vIEVudHJ5IDUxMAorICAgIC0weDEuYTQ5ZTdkODk4Nzg1MGY5Y2E1YjkzMzJlMzlkY2Q4OGZwMSwKKyAgICAtMHgxLjFhYWZjYmFmYzg1ZjdwMgorICB9LAorICB7IC8vIEVudHJ5IDUxMQorICAgIC0weDEuNzljZWQ4MTU2ZDA0MGVkZGU1YTZhYjYyMjU1ZTIyNjFwMSwKKyAgICAweDEuNDI3ZmM0MzY5YmRhZHAyCisgIH0sCisgIHsgLy8gRW50cnkgNTEyCisgICAgMHgxLjc5Y2VkODE1NmQwNDBlZGRlNWE2YWI2MjI1NWUyMjYxcDEsCisgICAgLTB4MS40MjdmYzQzNjliZGFkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTMKKyAgICAtMHgxLjZmMWY2NWNkMWU5MWI1ZTVlYzFlMTIwZTllMGRkYzBhcC0xLAorICAgIDB4MS42YTRmYmNiZDZmNTYycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTQKKyAgICAweDEuNmYxZjY1Y2QxZTkxYjVlNWVjMWUxMjBlOWUwZGRjMGFwLTEsCisgICAgLTB4MS42YTRmYmNiZDZmNTYycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTUKKyAgICAtMHgxLjY3NzQ3ZDVmODQ0ZTFiMGM1MDNkNTFlN2JhMDMyZmZjcC0xLAorICAgIDB4MS42YWYyZWZmMGEyODk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTYKKyAgICAweDEuNjc3NDdkNWY4NDRlMWIwYzUwM2Q1MWU3YmEwMzJmZmNwLTEsCisgICAgLTB4MS42YWYyZWZmMGEyODk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTcKKyAgICAtMHgxLjYyNmEyNTg4MTVkMTgyMzUwNmQxNzA2OTEzMGViOWZicDEsCisgICAgMHgxLjQzYzYyYTlkMDI0MTRwMgorICB9LAorICB7IC8vIEVudHJ5IDUxOAorICAgIDB4MS42MjZhMjU4ODE1ZDE4MjM1MDZkMTcwNjkxMzBlYjlmYnAxLAorICAgIC0weDEuNDNjNjJhOWQwMjQxNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNTE5CisgICAgMHgxLmQ2YWRhZjgwZjhiMDUxZmJjN2FiOWYyZTA5ZThlNjA4cDEsCisgICAgMHgxLjFjOTk2NTQ5NjFmOTJwMgorICB9LAorICB7IC8vIEVudHJ5IDUyMAorICAgIC0weDEuZDZhZGFmODBmOGIwNTFmYmM3YWI5ZjJlMDllOGU2MDhwMSwKKyAgICAtMHgxLjFjOTk2NTQ5NjFmOTJwMgorICB9LAorICB7IC8vIEVudHJ5IDUyMQorICAgIDB4MS5hOTRkMWIyMTM3MGQ1MmJmY2Q5ZWM0MTdlNDFkNmU1YnAtMSwKKyAgICAweDEuZWFkOTNmZWI4MzYxZnAxCisgIH0sCisgIHsgLy8gRW50cnkgNTIyCisgICAgLTB4MS5hOTRkMWIyMTM3MGQ1MmJmY2Q5ZWM0MTdlNDFkNmU1YnAtMSwKKyAgICAtMHgxLmVhZDkzZmViODM2MWZwMQorICB9LAorICB7IC8vIEVudHJ5IDUyMworICAgIDB4MS40Y2JhOWU3ODIyMjM0MGNhNDkzZjgwM2JiYzk0NzY1OXAtNCwKKyAgICAweDEuOWM3ZmI1NDQ0MmQxYXAxCisgIH0sCisgIHsgLy8gRW50cnkgNTI0CisgICAgLTB4MS40Y2JhOWU3ODIyMjM0MGNhNDkzZjgwM2JiYzk0NzY1OXAtNCwKKyAgICAtMHgxLjljN2ZiNTQ0NDJkMWFwMQorICB9LAorICB7IC8vIEVudHJ5IDUyNQorICAgIC0weDEuMmNiNmQwMjYzNDUzMWE2ODM5YmY4OThjYzFmOTE4ZGVwLTEsCisgICAgMHgxLjRlMjYyYTlkMDI0MTVwMQorICB9LAorICB7IC8vIEVudHJ5IDUyNgorICAgIDB4MS4yY2I2ZDAyNjM0NTMxYTY4MzliZjg5OGNjMWY5MThkZXAtMSwKKyAgICAtMHgxLjRlMjYyYTlkMDI0MTVwMQorICB9LAorICB7IC8vIEVudHJ5IDUyNworICAgIC0weDEuMThkOTExMjMwOGQ1Yjg5N2JhNDRjZmM1YzQ0MzczMTdwMSwKKyAgICAweDEuZmY5OTNmZWI4MzYyMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTI4CisgICAgMHgxLjE4ZDkxMTIzMDhkNWI4OTdiYTQ0Y2ZjNWM0NDM3MzE3cDEsCisgICAgLTB4MS5mZjk5M2ZlYjgzNjIwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjkKKyAgICAweDEuNTZmZTAxNDVjZjI5MDE5NzU4MjlkZGMzZmM3ODZkZjBwMiwKKyAgICAweDEuNjJlNjJhOWQwMjQxNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTMwCisgICAgLTB4MS41NmZlMDE0NWNmMjkwMTk3NTgyOWRkYzNmYzc4NmRmMHAyLAorICAgIC0weDEuNjJlNjJhOWQwMjQxNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTMxCisgICAgMHgxLmY0YWQzNTNhY2E0NTNmNjJiZWFlMDFjZDViMTNkNTBkcC0xLAorICAgIDB4MS44YzY2MmE5ZDAyNDE5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTMyCisgICAgLTB4MS5mNGFkMzUzYWNhNDUzZjYyYmVhZTAxY2Q1YjEzZDUwZHAtMSwKKyAgICAtMHgxLjhjNjYyYTlkMDI0MTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzMKKyAgICAweDEuNmE3ZTFmNjQwN2VlNjEzOTdkMDE2ZDY5MWJiNjFkMTdwMywKKyAgICAtMHgxLmE4YWExZDExYzQ0ZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDUzNAorICAgIC0weDEuNmE3ZTFmNjQwN2VlNjEzOTdkMDE2ZDY5MWJiNjFkMTdwMywKKyAgICAweDEuYThhYTFkMTFjNDRmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTM1CisgICAgMHgxLjBkNzE4Y2ZjODI0NjQ1MzZiZmQ2MjFiZTQxOWYwMDdjcDYsCisgICAgLTB4MS45NWVjOGI5ZTAzZDU0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzYKKyAgICAtMHgxLjBkNzE4Y2ZjODI0NjQ1MzZiZmQ2MjFiZTQxOWYwMDdjcDYsCisgICAgMHgxLjk1ZWM4YjllMDNkNTRwMAorICB9LAorICB7IC8vIEVudHJ5IDUzNworICAgIC0weDEuMTFkODcxNDZjMmQ1YTE4MzJjMjRmM2Q4NzA1MmQ3ZWJwNCwKKyAgICAtMHgxLjgzMmVmYTJhNDM1YTlwMAorICB9LAorICB7IC8vIEVudHJ5IDUzOAorICAgIDB4MS4xMWQ4NzE0NmMyZDVhMTgzMmMyNGYzZDg3MDUyZDdlYnA0LAorICAgIDB4MS44MzJlZmEyYTQzNWE5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzkKKyAgICAtMHgxLmUzYTM3MjliM2U4NmUyMjIxZmE1ZjA0YWJmNjk5ZTZlcDIsCisgICAgLTB4MS43MDcxNjhiNjgyZGZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDAKKyAgICAweDEuZTNhMzcyOWIzZTg2ZTIyMjFmYTVmMDRhYmY2OTllNmVwMiwKKyAgICAweDEuNzA3MTY4YjY4MmRmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQxCisgICAgLTB4MS4zNDI5ZTYxYTVkMWYyZTgwZmJkMTM3MGQ0YTdjMmIxMHAyLAorICAgIC0weDEuNWRiM2Q3NDJjMjY1M3AwCisgIH0sCisgIHsgLy8gRW50cnkgNTQyCisgICAgMHgxLjM0MjllNjFhNWQxZjJlODBmYmQxMzcwZDRhN2MyYjEwcDIsCisgICAgMHgxLjVkYjNkNzQyYzI2NTNwMAorICB9LAorICB7IC8vIEVudHJ5IDU0MworICAgIC0weDEuYzA4Y2FlYzVjZjk5NzI1ZTU3YzMyNzY2ZmIwODRjNWZwMSwKKyAgICAtMHgxLjRhZjY0NWNmMDFlYThwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NAorICAgIDB4MS5jMDhjYWVjNWNmOTk3MjVlNTdjMzI3NjZmYjA4NGM1ZnAxLAorICAgIDB4MS40YWY2NDVjZjAxZWE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDUKKyAgICAtMHgxLjVkNjAzZDc1MTc2N2VlNzBlOWEyZmY1NDk1OWZhNGE3cDEsCisgICAgLTB4MS4zODM4YjQ1YjQxNmZkcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDYKKyAgICAweDEuNWQ2MDNkNzUxNzY3ZWU3MGU5YTJmZjU0OTU5ZmE0YTdwMSwKKyAgICAweDEuMzgzOGI0NWI0MTZmZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ3CisgICAgLTB4MS4xYjQ4YTM1YjFiMjc3ZWZmYWJkNzI3OGI1MjU3MDhlZHAxLAorICAgIC0weDEuMjU3YjIyZTc4MGY1MnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ4CisgICAgMHgxLjFiNDhhMzViMWIyNzdlZmZhYmQ3Mjc4YjUyNTcwOGVkcDEsCisgICAgMHgxLjI1N2IyMmU3ODBmNTJwMAorICB9LAorICB7IC8vIEVudHJ5IDU0OQorICAgIC0weDEuZDc0Y2FmOTkxMmRjN2Q5NjY5YjAwOTI2YWExYWRlMTFwMCwKKyAgICAtMHgxLjEyYmQ5MTczYzA3YWJwMAorICB9LAorICB7IC8vIEVudHJ5IDU1MAorICAgIDB4MS5kNzRjYWY5OTEyZGM3ZDk2NjliMDA5MjZhYTFhZGUxMXAwLAorICAgIDB4MS4xMmJkOTE3M2MwN2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTEKKyAgICAtMHgxLjZiZTcwMmUxZjZjZDYwYmZkODZhZDg2MTgwZDE4NDkwcDAsCisgICAgLTB4MS5lYTVjM2VkNWIzODUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTUyCisgICAgMHgxLjZiZTcwMmUxZjZjZDYwYmZkODZhZDg2MTgwZDE4NDkwcDAsCisgICAgMHgxLmVhNWMzZWQ1YjM4NTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTMKKyAgICAtMHgxLjRkMGRmMWZjMWQzNDg0YjAyNzUzN2Q4MTE3YTM5NWY0cDAsCisgICAgLTB4MS5kNGI4N2RhYjY3MGEwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTU0CisgICAgMHgxLjRkMGRmMWZjMWQzNDg0YjAyNzUzN2Q4MTE3YTM5NWY0cDAsCisgICAgMHgxLmQ0Yjg3ZGFiNjcwYTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTUKKyAgICAtMHgxLjMxNmM4YjA2OGE3YWYyNTdmMWU1YTUxOTQzODM0ZjNlcDAsCisgICAgLTB4MS5iZjE0YmM4MTFhOGYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTU2CisgICAgMHgxLjMxNmM4YjA2OGE3YWYyNTdmMWU1YTUxOTQzODM0ZjNlcDAsCisgICAgMHgxLmJmMTRiYzgxMWE4ZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTcKKyAgICAtMHgxLjE4NzJhMWFhYTdlMjZjZjQxN2U2MzMxNjE3ZWE3ZGQwcDAsCisgICAgLTB4MS5hOTcwZmI1NmNlMTQwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTU4CisgICAgMHgxLjE4NzJhMWFhYTdlMjZjZjQxN2U2MzMxNjE3ZWE3ZGQwcDAsCisgICAgMHgxLmE5NzBmYjU2Y2UxNDBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTkKKyAgICAtMHgxLjAxYWVlZWQwNGNiYjBkZmFjZDFkMDBjNjU3ZDA4YjE5cDAsCisgICAgLTB4MS45M2NkM2EyYzgxOTkwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTYwCisgICAgMHgxLjAxYWVlZWQwNGNiYjBkZmFjZDFkMDBjNjU3ZDA4YjE5cDAsCisgICAgMHgxLjkzY2QzYTJjODE5OTBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjEKKyAgICAtMHgxLmQ5OGU0MDhhYzIwODVjNGUwNTg4ZGYxMGJhN2ZiMDIzcC0xLAorICAgIC0weDEuN2UyOTc5MDIzNTFlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU2MgorICAgIDB4MS5kOThlNDA4YWMyMDg1YzRlMDU4OGRmMTBiYTdmYjAyM3AtMSwKKyAgICAweDEuN2UyOTc5MDIzNTFlMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU2MworICAgIC0weDEuYjJlNDc1MDYzMWM1M2M1NGY1ODMwZmQ0MTc1M2Q0MjdwLTEsCisgICAgLTB4MS42ODg1YjdkN2U4YTMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTY0CisgICAgMHgxLmIyZTQ3NTA2MzFjNTNjNTRmNTgzMGZkNDE3NTNkNDI3cC0xLAorICAgIDB4MS42ODg1YjdkN2U4YTMwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTY1CisgICAgLTB4MS44ZWU5MTYzOTJlMDQ1OTBjZTk4OGQ4MmNjMzk1OTAyMXAtMSwKKyAgICAtMHgxLjUyZTFmNmFkOWMyODBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjYKKyAgICAweDEuOGVlOTE2MzkyZTA0NTkwY2U5ODhkODJjYzM5NTkwMjFwLTEsCisgICAgMHgxLjUyZTFmNmFkOWMyODBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjcKKyAgICAtMHgxLjZkMzk1ZTQ5NWY3N2U3MDk4NDI1OTJlMjI2NjA3YjUzcC0xLAorICAgIC0weDEuM2QzZTM1ODM0ZmFkMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU2OAorICAgIDB4MS42ZDM5NWU0OTVmNzdlNzA5ODQyNTkyZTIyNjYwN2I1M3AtMSwKKyAgICAweDEuM2QzZTM1ODM0ZmFkMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDU2OQorICAgIC0weDEuMjRlM2UwMTdhMDk4ZWNmNGRlNDhiY2VlYjAyNjc0M2FwLTEsCisgICAgLTB4MS4wYTBiMDI1MDFjNzk5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTcwCisgICAgMHgxLjI0ZTNlMDE3YTA5OGVjZjRkZTQ4YmNlZWIwMjY3NDNhcC0xLAorICAgIDB4MS4wYTBiMDI1MDFjNzk5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTcxCisgICAgLTB4MS5mZGJkNWYwNTk2YmRjNmVmOGRhNTNlZTY1MmI1N2NmN3AtMiwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzIKKyAgICAweDEuZmRiZDVmMDU5NmJkYzZlZjhkYTUzZWU2NTJiNTdjZjdwLTIsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzMKKyAgICAtMHgxLmI1ZjNkNmFmYmU2ZjI1OWFmMzdjNGU2MzNhYjVmZGZhcC0yLAorICAgIC0weDEuOWRkODNjN2M5ZTEyNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDU3NAorICAgIDB4MS5iNWYzZDZhZmJlNmYyNTlhZjM3YzRlNjMzYWI1ZmRmYXAtMiwKKyAgICAweDEuOWRkODNjN2M5ZTEyNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDU3NQorICAgIC0weDEuNzFhMGY5ODA4MWVhOThiNWYzMGExNTkzZTNmYzYzNzNwLTIsCisgICAgLTB4MS42MmI5NTg2YWQwYTIwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTc2CisgICAgMHgxLjcxYTBmOTgwODFlYTk4YjVmMzBhMTU5M2UzZmM2MzczcC0yLAorICAgIDB4MS42MmI5NTg2YWQwYTIwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTc3CisgICAgLTB4MS4zMDE5MDlhMmMzNmU4OWE2NzUyOGEzOGM3N2FjOWU0M3AtMiwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzgKKyAgICAweDEuMzAxOTA5YTJjMzZlODlhNjc1MjhhMzhjNzdhYzllNDNwLTIsCisgICAgMHgxLjI3OWE3NDU5MDMzMWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzkKKyAgICAtMHgxLmUxOGU5NDFjYzdmZDUxOWVjYzQwNTQ4YTg2ZDJhM2VkcC0zLAorICAgIC0weDEuZDhmNzIwOGU2YjgyOXAtMworICB9LAorICB7IC8vIEVudHJ5IDU4MAorICAgIDB4MS5lMThlOTQxY2M3ZmQ1MTllY2M0MDU0OGE4NmQyYTNlZHAtMywKKyAgICAweDEuZDhmNzIwOGU2YjgyOXAtMworICB9LAorICB7IC8vIEVudHJ5IDU4MQorICAgIC0weDEuNjY1MDc4NGJiZGNjMDJmMzM5MDI2MmNmNjhiYWQzYzZwLTMsCisgICAgLTB4MS42MmI5NTg2YWQwYTFlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTgyCisgICAgMHgxLjY2NTA3ODRiYmRjYzAyZjMzOTAyNjJjZjY4YmFkM2M2cC0zLAorICAgIDB4MS42MmI5NTg2YWQwYTFlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTgzCisgICAgLTB4MS5kYjE0MjQ2OGNkYWZjNTZlY2ZkZjhiMTA1MmIwOWU2M3AtNCwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MjZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODQKKyAgICAweDEuZGIxNDI0NjhjZGFmYzU2ZWNmZGY4YjEwNTJiMDllNjNwLTQsCisgICAgMHgxLmQ4ZjcyMDhlNmI4MjZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODUKKyAgICAtMHgxLmQ5N2RkNmQyZTUzZjI3ZTBmZTFmM2JkMmIwMzU2NjJhcC01LAorICAgIC0weDEuZDhmNzIwOGU2YjgyZHAtNQorICB9LAorICB7IC8vIEVudHJ5IDU4NgorICAgIDB4MS5kOTdkZDZkMmU1M2YyN2UwZmUxZjNiZDJiMDM1NjYyYXAtNSwKKyAgICAweDEuZDhmNzIwOGU2YjgyZHAtNQorICB9LAorICB7IC8vIEVudHJ5IDU4NworICAgIDB4MS5kOTdkZDZkMmU1M2YyN2UwZmUxZjNiZDJiMDM1NjYyYXAtNSwKKyAgICAweDEuZDhmNzIwOGU2YjgyZHAtNQorICB9LAorICB7IC8vIEVudHJ5IDU4OAorICAgIC0weDEuZDk3ZGQ2ZDJlNTNmMjdlMGZlMWYzYmQyYjAzNTY2MmFwLTUsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJkcC01CisgIH0sCisgIHsgLy8gRW50cnkgNTg5CisgICAgMHgxLmRiMTQyNDY4Y2RiMDM2ZjA4NzgzZDkzNmIxOTM0OGY2cC00LAorICAgIDB4MS5kOGY3MjA4ZTZiODJkcC00CisgIH0sCisgIHsgLy8gRW50cnkgNTkwCisgICAgLTB4MS5kYjE0MjQ2OGNkYjAzNmYwODc4M2Q5MzZiMTkzNDhmNnAtNCwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmRwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTEKKyAgICAweDEuNjY1MDc4NGJiZGNjNDRlOGJlMmMyMjBlMWQ2NzNmZmJwLTMsCisgICAgMHgxLjYyYjk1ODZhZDBhMjJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTIKKyAgICAtMHgxLjY2NTA3ODRiYmRjYzQ0ZThiZTJjMjIwZTFkNjczZmZicC0zLAorICAgIC0weDEuNjJiOTU4NmFkMGEyMnAtMworICB9LAorICB7IC8vIEVudHJ5IDU5MworICAgIDB4MS5lMThlOTQxY2M3ZmQ5NTI4YTU1ODUxNTdhYzY1ZTYxNXAtMywKKyAgICAweDEuZDhmNzIwOGU2YjgyZHAtMworICB9LAorICB7IC8vIEVudHJ5IDU5NAorICAgIC0weDEuZTE4ZTk0MWNjN2ZkOTUyOGE1NTg1MTU3YWM2NWU2MTVwLTMsCisgICAgLTB4MS5kOGY3MjA4ZTZiODJkcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNTk1CisgICAgMHgxLjMwMTkwOWEyYzM2ZWFjNzhlYzFiNGU3MTEzMTZkMGM0cC0yLAorICAgIDB4MS4yNzlhNzQ1OTAzMzFjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNTk2CisgICAgLTB4MS4zMDE5MDlhMmMzNmVhYzc4ZWMxYjRlNzExMzE2ZDBjNHAtMiwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTcKKyAgICAweDEuNzFhMGY5ODA4MWVhYmNlMTU1ZjMxMDI4OGM0MjQ1ZWFwLTIsCisgICAgMHgxLjYyYjk1ODZhZDBhMjJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTgKKyAgICAtMHgxLjcxYTBmOTgwODFlYWJjZTE1NWYzMTAyODhjNDI0NWVhcC0yLAorICAgIC0weDEuNjJiOTU4NmFkMGEyMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDU5OQorICAgIDB4MS5iNWYzZDZhZmJlNmY0Yjc1Njg0MmI4ZWVlNWM4NWEzMXAtMiwKKyAgICAweDEuOWRkODNjN2M5ZTEyOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDYwMAorICAgIC0weDEuYjVmM2Q2YWZiZTZmNGI3NTY4NDJiOGVlZTVjODVhMzFwLTIsCisgICAgLTB4MS45ZGQ4M2M3YzllMTI4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjAxCisgICAgMHgxLmZkYmQ1ZjA1OTZiZGVlZGQ4MmQ1MjIzYzNjMWIxOTI1cC0yLAorICAgIDB4MS5kOGY3MjA4ZTZiODJlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjAyCisgICAgLTB4MS5mZGJkNWYwNTk2YmRlZWRkODJkNTIyM2MzYzFiMTkyNXAtMiwKKyAgICAtMHgxLmQ4ZjcyMDhlNmI4MmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDMKKyAgICAweDEuMjRlM2UwMTdhMDk4ZWNmNGRlNDhiY2VlYjAyNjc0M2FwLTEsCisgICAgMHgxLjBhMGIwMjUwMWM3OTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDQKKyAgICAtMHgxLjI0ZTNlMDE3YTA5OGVjZjRkZTQ4YmNlZWIwMjY3NDNhcC0xLAorICAgIC0weDEuMGEwYjAyNTAxYzc5OXAtMQorICB9LAorICB7IC8vIEVudHJ5IDYwNQorICAgIDB4MS42ZDM5NWU0OTVmNzc4Njc4YjllYTBkNDgwOGM3MjIwYXAtMSwKKyAgICAweDEuM2QzZTM1ODM0ZmFjY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYwNgorICAgIC0weDEuNmQzOTVlNDk1Zjc3ODY3OGI5ZWEwZDQ4MDhjNzIyMGFwLTEsCisgICAgLTB4MS4zZDNlMzU4MzRmYWNjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjA3CisgICAgMHgxLjhlZTkxNjM5MmUwM2YyMzM1MDMzYTQxYjNiMDIwNmU0cC0xLAorICAgIDB4MS41MmUxZjZhZDljMjdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjA4CisgICAgLTB4MS44ZWU5MTYzOTJlMDNmMjMzNTAzM2E0MWIzYjAyMDZlNHAtMSwKKyAgICAtMHgxLjUyZTFmNmFkOWMyN2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDkKKyAgICAweDEuYjJlNDc1MDYzMWM0Y2UyODNlZjg3NTNmYTFlZGYzMjRwLTEsCisgICAgMHgxLjY4ODViN2Q3ZThhMmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTAKKyAgICAtMHgxLmIyZTQ3NTA2MzFjNGNlMjgzZWY4NzUzZmExZWRmMzI0cC0xLAorICAgIC0weDEuNjg4NWI3ZDdlOGEyY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYxMQorICAgIDB4MS5kOThlNDA4YWMyMDdlNThlMTVmMDE4NWQ0YjEwY2Y3MXAtMSwKKyAgICAweDEuN2UyOTc5MDIzNTFkY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDYxMgorICAgIC0weDEuZDk4ZTQwOGFjMjA3ZTU4ZTE1ZjAxODVkNGIxMGNmNzFwLTEsCisgICAgLTB4MS43ZTI5NzkwMjM1MWRjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjEzCisgICAgMHgxLjAxYWVlZWQwNGNiYWNkOGViNmJjMDk0NjY0ZGI3NzYzcDAsCisgICAgMHgxLjkzY2QzYTJjODE5OGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTQKKyAgICAtMHgxLjAxYWVlZWQwNGNiYWNkOGViNmJjMDk0NjY0ZGI3NzYzcDAsCisgICAgLTB4MS45M2NkM2EyYzgxOThjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjE1CisgICAgMHgxLjE4NzJhMWFhYTdlMjI2OGNiOTQ2ZmNlYjgzZjBlYTVlcDAsCisgICAgMHgxLmE5NzBmYjU2Y2UxM2NwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTYKKyAgICAtMHgxLjE4NzJhMWFhYTdlMjI2OGNiOTQ2ZmNlYjgzZjBlYTVlcDAsCisgICAgLTB4MS5hOTcwZmI1NmNlMTNjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjE3CisgICAgMHgxLjMxNmM4YjA2OGE3YWE0Y2I3N2JjM2YzOTkyMWMyYzhkcDAsCisgICAgMHgxLmJmMTRiYzgxMWE4ZWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTgKKyAgICAtMHgxLjMxNmM4YjA2OGE3YWE0Y2I3N2JjM2YzOTkyMWMyYzhkcDAsCisgICAgLTB4MS5iZjE0YmM4MTFhOGVjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjE5CisgICAgMHgxLjRkMGRmMWZjMWQzNDJlODY3ZTQ5ZjFmNmRkYWNlZGFhcDAsCisgICAgMHgxLmQ0Yjg3ZGFiNjcwOWNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjAKKyAgICAtMHgxLjRkMGRmMWZjMWQzNDJlODY3ZTQ5ZjFmNmRkYWNlZGFhcDAsCisgICAgLTB4MS5kNGI4N2RhYjY3MDljcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjIxCisgICAgMHgxLjZiZTcwMmUxZjZjZDAwMTZiYTE2NzdhOWNkMzNmMTM5cDAsCisgICAgMHgxLmVhNWMzZWQ1YjM4NGNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjIKKyAgICAtMHgxLjZiZTcwMmUxZjZjZDAwMTZiYTE2NzdhOWNkMzNmMTM5cDAsCisgICAgLTB4MS5lYTVjM2VkNWIzODRjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjIzCisgICAgMHgxLmQ3NGNhZjk5MTJkYzdkOTY2OWIwMDkyNmFhMWFkZTExcDAsCisgICAgMHgxLjEyYmQ5MTczYzA3YWJwMAorICB9LAorICB7IC8vIEVudHJ5IDYyNAorICAgIC0weDEuZDc0Y2FmOTkxMmRjN2Q5NjY5YjAwOTI2YWExYWRlMTFwMCwKKyAgICAtMHgxLjEyYmQ5MTczYzA3YWJwMAorICB9LAorICB7IC8vIEVudHJ5IDYyNQorICAgIDB4MS4xYjQ4YTM1YjFiMjgzYmJjODJiYjA0NGU5OWM0ZDliMXAxLAorICAgIDB4MS4yNTdiMjJlNzgwZjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjYKKyAgICAtMHgxLjFiNDhhMzViMWIyODNiYmM4MmJiMDQ0ZTk5YzRkOWIxcDEsCisgICAgLTB4MS4yNTdiMjJlNzgwZjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjcKKyAgICAweDEuNWQ2MDNkNzUxNzY4ZmNkOGFmODJiMzg3NDY4ODg1MzBwMSwKKyAgICAweDEuMzgzOGI0NWI0MTcwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjI4CisgICAgLTB4MS41ZDYwM2Q3NTE3NjhmY2Q4YWY4MmIzODc0Njg4ODUzMHAxLAorICAgIC0weDEuMzgzOGI0NWI0MTcwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjI5CisgICAgMHgxLmMwOGNhZWM1Y2Y5YjFiNTRiMDQ1MjI4YjNlZWIyNDY5cDEsCisgICAgMHgxLjRhZjY0NWNmMDFlYWNwMAorICB9LAorICB7IC8vIEVudHJ5IDYzMAorICAgIC0weDEuYzA4Y2FlYzVjZjliMWI1NGIwNDUyMjhiM2VlYjI0NjlwMSwKKyAgICAtMHgxLjRhZjY0NWNmMDFlYWNwMAorICB9LAorICB7IC8vIEVudHJ5IDYzMQorICAgIDB4MS4zNDI5ZTYxYTVkMjBiMTc1ZDQ1YzJhNjc1YTM4NmJhM3AyLAorICAgIDB4MS41ZGIzZDc0MmMyNjU3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzIKKyAgICAtMHgxLjM0MjllNjFhNWQyMGIxNzVkNDVjMmE2NzVhMzg2YmEzcDIsCisgICAgLTB4MS41ZGIzZDc0MmMyNjU3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzMKKyAgICAweDEuZTNhMzcyOWIzZThhODNkNDRhNzZlMzQyZDZiM2ZjYmZwMiwKKyAgICAweDEuNzA3MTY4YjY4MmUwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjM0CisgICAgLTB4MS5lM2EzNzI5YjNlOGE4M2Q0NGE3NmUzNDJkNmIzZmNiZnAyLAorICAgIC0weDEuNzA3MTY4YjY4MmUwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjM1CisgICAgMHgxLjExZDg3MTQ2YzJkYTM5NDA4ZTg2MDgzYmYxNDcxYzhicDQsCisgICAgMHgxLjgzMmVmYTJhNDM1YWRwMAorICB9LAorICB7IC8vIEVudHJ5IDYzNgorICAgIC0weDEuMTFkODcxNDZjMmRhMzk0MDhlODYwODNiZjE0NzFjOGJwNCwKKyAgICAtMHgxLjgzMmVmYTJhNDM1YWRwMAorICB9LAorICB7IC8vIEVudHJ5IDYzNworICAgIC0weDEuMGQ3MThjZmM4MjM0OGFiOTc1NGYzZDZiNWUwZWE0OTlwNiwKKyAgICAweDEuOTVlYzhiOWUwM2Q1OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjM4CisgICAgMHgxLjBkNzE4Y2ZjODIzNDhhYjk3NTRmM2Q2YjVlMGVhNDk5cDYsCisgICAgLTB4MS45NWVjOGI5ZTAzZDU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzkKKyAgICAtMHgxLjZhN2UxZjY0MDdlZTYxMzk3ZDAxNmQ2OTFiYjYxZDE3cDMsCisgICAgMHgxLmE4YWExZDExYzQ0ZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDY0MAorICAgIDB4MS42YTdlMWY2NDA3ZWU2MTM5N2QwMTZkNjkxYmI2MWQxN3AzLAorICAgIC0weDEuYThhYTFkMTFjNDRmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQxCisgICAgMHgxLjlmMzllYTViYmU0NzQ5ZTk2MmE4MDdjMmRjMTFjODI1cDAsCisgICAgMHgxLjA0YWZmNmQzMzA5NDJwMAorICB9LAorICB7IC8vIEVudHJ5IDY0MgorICAgIC0weDEuOWYzOWVhNWJiZTQ3NDllOTYyYTgwN2MyZGMxMWM4MjVwMCwKKyAgICAtMHgxLjA0YWZmNmQzMzA5NDJwMAorICB9LAorICB7IC8vIEVudHJ5IDY0MworICAgIDB4MS45ZjNjNGI4NDY5Zjg1M2I4NTA3NDU1NzE3MzI3YzMxMXAwLAorICAgIDB4MS4wNGIwOWU5OGRjZGI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDQKKyAgICAtMHgxLjlmM2M0Yjg0NjlmODUzYjg1MDc0NTU3MTczMjdjMzExcDAsCisgICAgLTB4MS4wNGIwOWU5OGRjZGI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDUKKyAgICAweDEuOWYzZWFjYjIyNGMyMDg2ZWYzOTFiMGRmYWQyZjEwMTBwMCwKKyAgICAweDEuMDRiMTQ2NWU4OTIyNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ2CisgICAgLTB4MS45ZjNlYWNiMjI0YzIwODZlZjM5MWIwZGZhZDJmMTAxMHAwLAorICAgIC0weDEuMDRiMTQ2NWU4OTIyNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ3CisgICAgMHgxLjlmNDEwZGU0ZWViNjk1OTBjYWVlODVlODg2ZjQ3OGE4cDAsCisgICAgMHgxLjA0YjFlZTI0MzU2OThwMAorICB9LAorICB7IC8vIEVudHJ5IDY0OAorICAgIC0weDEuOWY0MTBkZTRlZWI2OTU5MGNhZWU4NWU4ODZmNDc4YThwMCwKKyAgICAtMHgxLjA0YjFlZTI0MzU2OThwMAorICB9LAorICB7IC8vIEVudHJ5IDY0OQorICAgIDB4MS45ZjQzNmYxY2M3ZTgyOGY3NTI4MTlhZjFlMmY0YjZhMnAwLAorICAgIDB4MS4wNGIyOTVlOWUxYjBhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTAKKyAgICAtMHgxLjlmNDM2ZjFjYzdlODI4Zjc1MjgxOWFmMWUyZjRiNmEycDAsCisgICAgLTB4MS4wNGIyOTVlOWUxYjBhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTEKKyAgICAweDEuOWY0NWQwNTliMDY4ZjBkMjA1NDg1YWQ2NDgyMjNlNmRwMCwKKyAgICAweDEuMDRiMzNkYWY4ZGY3Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjUyCisgICAgLTB4MS45ZjQ1ZDA1OWIwNjhmMGQyMDU0ODVhZDY0ODIyM2U2ZHAwLAorICAgIC0weDEuMDRiMzNkYWY4ZGY3Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjUzCisgICAgMHgxLjlmNDgzMTliYTg0YjFiYTY1ZjQ1MmNmZTY1ZTAyZDBlcDAsCisgICAgMHgxLjA0YjNlNTc1M2EzZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NAorICAgIC0weDEuOWY0ODMxOWJhODRiMWJhNjVmNDUyY2ZlNjVlMDJkMGVwMCwKKyAgICAtMHgxLjA0YjNlNTc1M2EzZWVwMAorICB9LAorICB7IC8vIEVudHJ5IDY1NQorICAgIDB4MS45ZjRhOTJlMmFmYTBkODRmZGY3ZGRiYWFkMzAyZjE1MHAwLAorICAgIDB4MS4wNGI0OGQzYWU2ODYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTYKKyAgICAtMHgxLjlmNGE5MmUyYWZhMGQ4NGZkZjdkZGJhYWQzMDJmMTUwcDAsCisgICAgLTB4MS4wNGI0OGQzYWU2ODYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTcKKyAgICAweDEuOWY0Y2Y0MmVjNjdiYTdhZDBkYjJiZTI0OGE4NzBiZmVwMCwKKyAgICAweDEuMDRiNTM1MDA5MmNjZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjU4CisgICAgLTB4MS45ZjRjZjQyZWM2N2JhN2FkMGRiMmJlMjQ4YTg3MGJmZXAwLAorICAgIC0weDEuMDRiNTM1MDA5MmNjZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjU5CisgICAgLTB4MS5wLTEwNzQsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgNjYwCisgICAgMHgxLnAtMTA3NCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDY2MQorICAgIC0wLjAsCisgICAgLTAuMAorICB9LAorICB7IC8vIEVudHJ5IDY2MgorICAgIDB4MS5wLTEwNzQsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjMKKyAgICAtMHgxLnAtMTA3NCwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjQKKyAgICAweDEuNGQ4MmI2OGNhYzE5ZTZkMDY1YzVmMWFhNzYyMWMwOGNwLTEsCisgICAgMHgxLjI3OWE3NDU5MDMzMWJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjUKKyAgICAtMHgxLjRkODJiNjhjYWMxOWU2ZDA2NWM1ZjFhYTc2MjFjMDhjcC0xLAorICAgIC0weDEuMjc5YTc0NTkwMzMxYnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2NgorICAgIDB4MS40ZDgyYjY4Y2FjMTlmZDlhNWIwYzkxMmQ5MDkzYWE0YXAtMSwKKyAgICAweDEuMjc5YTc0NTkwMzMxY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDY2NworICAgIC0weDEuNGQ4MmI2OGNhYzE5ZmQ5YTViMGM5MTJkOTA5M2FhNGFwLTEsCisgICAgLTB4MS4yNzlhNzQ1OTAzMzFjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjY4CisgICAgMHgxLjRkODJiNjhjYWMxYTE0NjQ1MDUzMzBiMGFiZjMxNmJmcC0xLAorICAgIDB4MS4yNzlhNzQ1OTAzMzFkcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjY5CisgICAgLTB4MS40ZDgyYjY4Y2FjMWExNDY0NTA1MzMwYjBhYmYzMTZiZnAtMSwKKyAgICAtMHgxLjI3OWE3NDU5MDMzMWRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzAKKyAgICAtMHgxLjg5NzEyZWVjYTMyYmU5N2RiYTJjYTNmOWI4Mzc5MTU0cDIsCisgICAgMHgxLmJiNjdhZTg1ODRjYTlwMAorICB9LAorICB7IC8vIEVudHJ5IDY3MQorICAgIDB4MS44OTcxMmVlY2EzMmJlOTdkYmEyY2EzZjliODM3OTE1NHAyLAorICAgIC0weDEuYmI2N2FlODU4NGNhOXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjcyCisgICAgLTB4MS44OTcxMmVlY2EzMmI0ZTUyOGQyNTYzNWE0MjkzYmUxZHAyLAorICAgIDB4MS5iYjY3YWU4NTg0Y2FhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzMKKyAgICAweDEuODk3MTJlZWNhMzJiNGU1MjhkMjU2MzVhNDI5M2JlMWRwMiwKKyAgICAtMHgxLmJiNjdhZTg1ODRjYWFwMAorICB9LAorICB7IC8vIEVudHJ5IDY3NAorICAgIC0weDEuODk3MTJlZWNhMzJhYjMyNzYwMWUyMmJiNDQyY2RjMzdwMiwKKyAgICAweDEuYmI2N2FlODU4NGNhYnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjc1CisgICAgMHgxLjg5NzEyZWVjYTMyYWIzMjc2MDFlMjJiYjQ0MmNkYzM3cDIsCisgICAgLTB4MS5iYjY3YWU4NTg0Y2FicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzYKKyAgICAweDEuZGVmNDllYWFiMzdhMDBmOTBjYjQ0NTQ3MTBlNGU1NDVwLTIsCisgICAgMHgxLmJmZmZmZmZmZmZmZmZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzcKKyAgICAtMHgxLmRlZjQ5ZWFhYjM3YTAwZjkwY2I0NDU0NzEwZTRlNTQ1cC0yLAorICAgIC0weDEuYmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDY3OAorICAgIDB4MS5kZWY0OWVhYWIzN2ExNDc5MjMxZTg5OTUwOWVjZjI2Y3AtMiwKKyAgICAweDEuY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDY3OQorICAgIC0weDEuZGVmNDllYWFiMzdhMTQ3OTIzMWU4OTk1MDllY2YyNmNwLTIsCisgICAgLTB4MS5jcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjgwCisgICAgMHgxLmRlZjQ5ZWFhYjM3YTI3ZjkzOTg4Y2RlMzAzM2RmNzJjcC0yLAorICAgIDB4MS5jMDAwMDAwMDAwMDAxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjgxCisgICAgLTB4MS5kZWY0OWVhYWIzN2EyN2Y5Mzk4OGNkZTMwMzNkZjcyY3AtMiwKKyAgICAtMHgxLmMwMDAwMDAwMDAwMDFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODIKKyAgICAweDEuYTQ2Y2IyYmU2YTBiMDJlMmRmZmZjOTVlNmRjYjI4NDJwLTEsCisgICAgMHgxLjVmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODMKKyAgICAtMHgxLmE0NmNiMmJlNmEwYjAyZTJkZmZmYzk1ZTZkY2IyODQycC0xLAorICAgIC0weDEuNWZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY4NAorICAgIDB4MS5hNDZjYjJiZTZhMGIxZGFjYjM2MjY5YzQxYTRhOTE0N3AtMSwKKyAgICAweDEuNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDY4NQorICAgIC0weDEuYTQ2Y2IyYmU2YTBiMWRhY2IzNjI2OWM0MWE0YTkxNDdwLTEsCisgICAgLTB4MS42cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjg2CisgICAgMHgxLmE0NmNiMmJlNmEwYjM4NzY4NmM1MGEyOWM4MjllZTQycC0xLAorICAgIDB4MS42MDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjg3CisgICAgLTB4MS5hNDZjYjJiZTZhMGIzODc2ODZjNTBhMjljODI5ZWU0MnAtMSwKKyAgICAtMHgxLjYwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODgKKyAgICAweDEuM2Q2ZGM5NTZlYWM3OWE4NWI0NzQ1NmZhMGM5NDZiMTNwMSwKKyAgICAweDEuMmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjg5CisgICAgLTB4MS4zZDZkYzk1NmVhYzc5YTg1YjQ3NDU2ZmEwYzk0NmIxM3AxLAorICAgIC0weDEuMmZmZmZmZmZmZmZmZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNjkwCisgICAgMHgxLjNkNmRjOTU2ZWFjN2QzYjhkNmViMjE3NDExMGQxZGRjcDEsCisgICAgMHgxLjNwMAorICB9LAorICB7IC8vIEVudHJ5IDY5MQorICAgIC0weDEuM2Q2ZGM5NTZlYWM3ZDNiOGQ2ZWIyMTc0MTEwZDFkZGNwMSwKKyAgICAtMHgxLjNwMAorICB9LAorICB7IC8vIEVudHJ5IDY5MgorICAgIDB4MS4zZDZkYzk1NmVhYzgwY2ViZjk2MWViZWUyNzQxMDdwMSwKKyAgICAweDEuMzAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgNjkzCisgICAgLTB4MS4zZDZkYzk1NmVhYzgwY2ViZjk2MWViZWUyNzQxMDdwMSwKKyAgICAtMHgxLjMwMDAwMDAwMDAwMDFwMAorICB9LAorICB7IC8vIEVudHJ5IDY5NAorICAgIC0weDEuYjJkODlhOTM4Mjk1MzZjYzkyODNjZmM3ZTAxZmUyYTNwLTEsCisgICAgMHgxLjM3ZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDY5NQorICAgIDB4MS5iMmQ4OWE5MzgyOTUzNmNjOTI4M2NmYzdlMDFmZTJhM3AtMSwKKyAgICAtMHgxLjM3ZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDY5NgorICAgIC0weDEuYjJkODlhOTM4Mjk0YzhhMjYwNGRiOWY3YWE1NmEwZjhwLTEsCisgICAgMHgxLjM4MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjk3CisgICAgMHgxLmIyZDg5YTkzODI5NGM4YTI2MDRkYjlmN2FhNTZhMGY4cC0xLAorICAgIC0weDEuMzgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTgKKyAgICAtMHgxLmIyZDg5YTkzODI5NDVhNzgyZTE3YTQyNzhiZjE3NzM2cC0xLAorICAgIDB4MS4zODAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTkKKyAgICAweDEuYjJkODlhOTM4Mjk0NWE3ODJlMTdhNDI3OGJmMTc3MzZwLTEsCisgICAgLTB4MS4zODAwMDAwMDAwMDAxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDAKKyAgICAweDEuMDZmOGQwMTRiZjA4M2NkMzY2NTBlOTQ2NmRjMDg2ZGNwLTQsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDEKKyAgICAtMHgxLjA2ZjhkMDE0YmYwODNjZDM2NjUwZTk0NjZkYzA4NmRjcC00LAorICAgIC0weDEuMDY5YzhiNDZiMzc5MnAtNAorICB9LAorICB7IC8vIEVudHJ5IDcwMgorICAgIDB4MS4wODBmNzNiMDcwNTFlMzdiMjNkYTMzMzdjMGFlZDM1M3AtMywKKyAgICAweDEuMDY5YzhiNDZiMzc5MnAtMworICB9LAorICB7IC8vIEVudHJ5IDcwMworICAgIC0weDEuMDgwZjczYjA3MDUxZTM3YjIzZGEzMzM3YzBhZWQzNTNwLTMsCisgICAgLTB4MS4wNjljOGI0NmIzNzkycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzA0CisgICAgMHgxLjhlZDkxNDJmYzkxODg4OGUyOTRkM2ZmNWQwMTQ5NDE1cC0zLAorICAgIDB4MS44OWVhZDBlYTBkMzVicC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzA1CisgICAgLTB4MS44ZWQ5MTQyZmM5MTg4ODhlMjk0ZDNmZjVkMDE0OTQxNXAtMywKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNWJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDYKKyAgICAweDEuMGM4NjQwODNkMWU3Y2E1NTUxYmNlMjQ5NzI4NzgxMjdwLTIsCisgICAgMHgxLjA2OWM4YjQ2YjM3OTJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDcKKyAgICAtMHgxLjBjODY0MDgzZDFlN2NhNTU1MWJjZTI0OTcyODc4MTI3cC0yLAorICAgIC0weDEuMDY5YzhiNDZiMzc5MnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcwOAorICAgIDB4MS41M2ZkY2RmZDM3ZjA0Mzc1ZDlmZmI2YWViYWZlN2RmOHAtMiwKKyAgICAweDEuNDg0M2FlMTg2MDU3NnAtMgorICB9LAorICB7IC8vIEVudHJ5IDcwOQorICAgIC0weDEuNTNmZGNkZmQzN2YwNDM3NWQ5ZmZiNmFlYmFmZTdkZjhwLTIsCisgICAgLTB4MS40ODQzYWUxODYwNTc2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzEwCisgICAgMHgxLjllOTI1N2U2YjYyYTBhOGRlNTY1MGM4MzdmN2Y2MjI3cC0yLAorICAgIDB4MS44OWVhZDBlYTBkMzVhcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzExCisgICAgLTB4MS45ZTkyNTdlNmI2MmEwYThkZTU2NTBjODM3ZjdmNjIyN3AtMiwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNWFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTIKKyAgICAweDEuZWQyMWU1OTk3MmIwN2M3MDUzZjRmMzVkZDU1MDI0OTNwLTIsCisgICAgMHgxLmNiOTFmM2JiYmExM2VwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTMKKyAgICAtMHgxLmVkMjFlNTk5NzJiMDdjNzA1M2Y0ZjM1ZGQ1NTAyNDkzcC0yLAorICAgIC0weDEuY2I5MWYzYmJiYTEzZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDcxNAorICAgIDB4MS4yMDVhNjAwOWQ1ZTNkZGUyNWQ2ZGViN2Q1MjFmZjE0MHAtMSwKKyAgICAweDEuMDY5YzhiNDZiMzc5MXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcxNQorICAgIC0weDEuMjA1YTYwMDlkNWUzZGRlMjVkNmRlYjdkNTIxZmYxNDBwLTEsCisgICAgLTB4MS4wNjljOGI0NmIzNzkxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE2CisgICAgMHgxLjRkNDY2YWNjYWQ0OGRkOTU4YWIxNjhmNWNmYzZjOTljcC0xLAorICAgIDB4MS4yNzcwMWNhZjg5ZTgzcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzE3CisgICAgLTB4MS40ZDQ2NmFjY2FkNDhkZDk1OGFiMTY4ZjVjZmM2Yzk5Y3AtMSwKKyAgICAtMHgxLjI3NzAxY2FmODllODNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTgKKyAgICAweDEuN2UxZDkzNmY0ZDYxNTJmYjc0ODA5NTk1NzE3ZmEwNmRwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTkKKyAgICAtMHgxLjdlMWQ5MzZmNGQ2MTUyZmI3NDgwOTU5NTcxN2ZhMDZkcC0xLAorICAgIC0weDEuNDg0M2FlMTg2MDU3NXAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyMAorICAgIDB4MS5iM2RmMzg2ZjE4MjI3ZWJjZWU5MDVmZGM1MWNkY2JlMnAtMSwKKyAgICAweDEuNjkxNzNmODEzNmM2N3AtMQorICB9LAorICB7IC8vIEVudHJ5IDcyMQorICAgIC0weDEuYjNkZjM4NmYxODIyN2ViY2VlOTA1ZmRjNTFjZGNiZTJwLTEsCisgICAgLTB4MS42OTE3M2Y4MTM2YzY3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzIyCisgICAgMHgxLmVmZDgyNzQyZDc3OGMxOGE4Yzk2OWJlMGNmMDkwMmIzcC0xLAorICAgIDB4MS44OWVhZDBlYTBkMzU5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzIzCisgICAgLTB4MS5lZmQ4Mjc0MmQ3NzhjMThhOGM5NjliZTBjZjA5MDJiM3AtMSwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzNTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjQKKyAgICAweDEuMTllMjZiNWVjZDVjMDQwYTFkODBjMTU4M2Y3OGY3ZDdwMCwKKyAgICAweDEuYWFiZTYyNTJlM2E0YnAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyNQorICAgIC0weDEuMTllMjZiNWVjZDVjMDQwYTFkODBjMTU4M2Y3OGY3ZDdwMCwKKyAgICAtMHgxLmFhYmU2MjUyZTNhNGJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjYKKyAgICAweDEuNDEwMzhiNzBiZTBmYTE0NzhmOThhMmU5ZjI2NjU1MGFwMCwKKyAgICAweDEuY2I5MWYzYmJiYTEzZHAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyNworICAgIC0weDEuNDEwMzhiNzBiZTBmYTE0NzhmOThhMmU5ZjI2NjU1MGFwMCwKKyAgICAtMHgxLmNiOTFmM2JiYmExM2RwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjgKKyAgICAweDEuNmVmZWM4YzFlNDkzYjUxN2VmZTVlYjkyNDY0ZmRmNDJwMCwKKyAgICAweDEuZWM2NTg1MjQ5MDgyZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDcyOQorICAgIC0weDEuNmVmZWM4YzFlNDkzYjUxN2VmZTVlYjkyNDY0ZmRmNDJwMCwKKyAgICAtMHgxLmVjNjU4NTI0OTA4MmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzAKKyAgICAweDEuYTY0YzdjOWQ2NTM0NjJkOGRlZDNlNjU4ZmU0ZWZiY2JwMCwKKyAgICAweDEuMDY5YzhiNDZiMzc5MXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzMxCisgICAgLTB4MS5hNjRjN2M5ZDY1MzQ2MmQ4ZGVkM2U2NThmZTRlZmJjYnAwLAorICAgIC0weDEuMDY5YzhiNDZiMzc5MXAwCisgIH0sCisgIHsgLy8gRW50cnkgNzMyCisgICAgMHgxLmVhYjQzZTBlNWU4N2MyNmZkNDMyZTA2MzAxZTE5ZTE1cDAsCisgICAgMHgxLjE3MDY1M2ZiMWViMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDczMworICAgIC0weDEuZWFiNDNlMGU1ZTg3YzI2ZmQ0MzJlMDYzMDFlMTllMTVwMCwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMGFwMAorICB9LAorICB7IC8vIEVudHJ5IDczNAorICAgIDB4MS4yMTI3N2I5N2MwMTM3NmUzNjE5ODgyNTBiNTYzNjRjZnAxLAorICAgIDB4MS4yNzcwMWNhZjg5ZTgzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzUKKyAgICAtMHgxLjIxMjc3Yjk3YzAxMzc2ZTM2MTk4ODI1MGI1NjM2NGNmcDEsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTgzcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzYKKyAgICAweDEuNWJkMTNkZGEwNzdjY2UyNDlkYjI3OTRkNjk0MDc1MDRwMSwKKyAgICAweDEuMzdkOWU1NjNmNTFmY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNzM3CisgICAgLTB4MS41YmQxM2RkYTA3N2NjZTI0OWRiMjc5NGQ2OTQwNzUwNHAxLAorICAgIC0weDEuMzdkOWU1NjNmNTFmY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNzM4CisgICAgMHgxLmFmNDY0M2U5MzcxZjg4ZTc4YzI0ZDgzYmQ2YjhlMjNlcDEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NzVwMAorICB9LAorICB7IC8vIEVudHJ5IDczOQorICAgIC0weDEuYWY0NjQzZTkzNzFmODhlNzhjMjRkODNiZDZiOGUyM2VwMSwKKyAgICAtMHgxLjQ4NDNhZTE4NjA1NzVwMAorICB9LAorICB7IC8vIEVudHJ5IDc0MAorICAgIDB4MS4xODY2ZmU4NDVlNzU5ZDE0ZGE0NzhjNmNmNmYyYmU2NXAyLAorICAgIDB4MS41OGFkNzZjY2NiOGVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDEKKyAgICAtMHgxLjE4NjZmZTg0NWU3NTlkMTRkYTQ3OGM2Y2Y2ZjJiZTY1cDIsCisgICAgLTB4MS41OGFkNzZjY2NiOGVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDIKKyAgICAweDEuOGJkY2Q1NGJkNTk4MGIzYTgwY2VmYzkxNGM0ODE0NzVwMiwKKyAgICAweDEuNjkxNzNmODEzNmM2N3AwCisgIH0sCisgIHsgLy8gRW50cnkgNzQzCisgICAgLTB4MS44YmRjZDU0YmQ1OTgwYjNhODBjZWZjOTE0YzQ4MTQ3NXAyLAorICAgIC0weDEuNjkxNzNmODEzNmM2N3AwCisgIH0sCisgIHsgLy8gRW50cnkgNzQ0CisgICAgMHgxLjRiYjZhNjRlMDYyNWI5NzRjZGVkNjE1MDU2ZmZkNjFjcDMsCisgICAgMHgxLjc5ODEwODM1YTFmZTBwMAorICB9LAorICB7IC8vIEVudHJ5IDc0NQorICAgIC0weDEuNGJiNmE2NGUwNjI1Yjk3NGNkZWQ2MTUwNTZmZmQ2MWNwMywKKyAgICAtMHgxLjc5ODEwODM1YTFmZTBwMAorICB9LAorICB7IC8vIEVudHJ5IDc0NgorICAgIDB4MS5mMmYwNWNmYjY1NmEzOWY2ZjJhOTBmNzkxMWIyNDA1MXA0LAorICAgIDB4MS44OWVhZDBlYTBkMzU5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDcKKyAgICAtMHgxLmYyZjA1Y2ZiNjU2YTM5ZjZmMmE5MGY3OTExYjI0MDUxcDQsCisgICAgLTB4MS44OWVhZDBlYTBkMzU5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDgKKyAgICAtMHgxLmYyZjA1Y2ZiNjU3ZjU1ZjJiYzZkMjA0Mzc3YTY4NTQzcDQsCisgICAgMHgxLjlhNTQ5OTllNzg2ZDJwMAorICB9LAorICB7IC8vIEVudHJ5IDc0OQorICAgIDB4MS5mMmYwNWNmYjY1N2Y1NWYyYmM2ZDIwNDM3N2E2ODU0M3A0LAorICAgIC0weDEuOWE1NDk5OWU3ODZkMnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzUwCisgICAgLTB4MS40YmI2YTY0ZTA2MmE2ZGEzNTg3MGNmYjMzNTk1ZmJlNnAzLAorICAgIDB4MS5hYWJlNjI1MmUzYTRicDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTEKKyAgICAweDEuNGJiNmE2NGUwNjJhNmRhMzU4NzBjZmIzMzU5NWZiZTZwMywKKyAgICAtMHgxLmFhYmU2MjUyZTNhNGJwMAorICB9LAorICB7IC8vIEVudHJ5IDc1MgorICAgIC0weDEuOGJkY2Q1NGJkNTliNzMwMjhlNWYyNzY0OWNhNjdjYmFwMiwKKyAgICAweDEuYmIyODJiMDc0ZWRjNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzUzCisgICAgMHgxLjhiZGNkNTRiZDU5YjczMDI4ZTVmMjc2NDljYTY3Y2JhcDIsCisgICAgLTB4MS5iYjI4MmIwNzRlZGM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTQKKyAgICAtMHgxLjE4NjZmZTg0NWU3NzVkOGM4ZjhiZjkxNjU2NDdmNmNicDIsCisgICAgMHgxLmNiOTFmM2JiYmExM2RwMAorICB9LAorICB7IC8vIEVudHJ5IDc1NQorICAgIDB4MS4xODY2ZmU4NDVlNzc1ZDhjOGY4YmY5MTY1NjQ3ZjZjYnAyLAorICAgIC0weDEuY2I5MWYzYmJiYTEzZHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzU2CisgICAgLTB4MS5hZjQ2NDNlOTM3MjFhZDgwOTVkZDI3ZjA4MjdlMTNlMHAxLAorICAgIDB4MS5kYmZiYmM3MDI1NGI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NTcKKyAgICAweDEuYWY0NjQzZTkzNzIxYWQ4MDk1ZGQyN2YwODI3ZTEzZTBwMSwKKyAgICAtMHgxLmRiZmJiYzcwMjU0YjZwMAorICB9LAorICB7IC8vIEVudHJ5IDc1OAorICAgIC0weDEuNWJkMTNkZGEwNzdlNDI3ZDBjOWRjNmMwZTVkM2IxYjVwMSwKKyAgICAweDEuZWM2NTg1MjQ5MDgyZnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzU5CisgICAgMHgxLjViZDEzZGRhMDc3ZTQyN2QwYzlkYzZjMGU1ZDNiMWI1cDEsCisgICAgLTB4MS5lYzY1ODUyNDkwODJmcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjAKKyAgICAtMHgxLjIxMjc3Yjk3YzAxNDg1ZjE3YmFjZGI4MDQzNzVlYmNkcDEsCisgICAgMHgxLmZjY2Y0ZGQ4ZmJiYThwMAorICB9LAorICB7IC8vIEVudHJ5IDc2MQorICAgIDB4MS4yMTI3N2I5N2MwMTQ4NWYxN2JhY2RiODA0Mzc1ZWJjZHAxLAorICAgIC0weDEuZmNjZjRkZDhmYmJhOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzYyCisgICAgLTB4MS5lYWI0M2UwZTVlODkxNmQ0YzA4MzQ5YWJlOWUyYWJkM3AwLAorICAgIDB4MS4wNjljOGI0NmIzNzkxcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjMKKyAgICAweDEuZWFiNDNlMGU1ZTg5MTZkNGMwODM0OWFiZTllMmFiZDNwMCwKKyAgICAtMHgxLjA2OWM4YjQ2YjM3OTFwMQorICB9LAorICB7IC8vIEVudHJ5IDc2NAorICAgIC0weDEuYTY0YzdjOWQ2NTM1MzY0ZDYwNWJiOWU1MzE1MDcyZmZwMCwKKyAgICAweDEuMGVkMTZmYTBlOTE0ZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNzY1CisgICAgMHgxLmE2NGM3YzlkNjUzNTM2NGQ2MDViYjllNTMxNTA3MmZmcDAsCisgICAgLTB4MS4wZWQxNmZhMGU5MTRlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjYKKyAgICAtMHgxLjZlZmVjOGMxZTQ5NDRhNDI1NTQxMjE5MzY0YTE1MDc4cDAsCisgICAgMHgxLjE3MDY1M2ZiMWViMGJwMQorICB9LAorICB7IC8vIEVudHJ5IDc2NworICAgIDB4MS42ZWZlYzhjMWU0OTQ0YTQyNTU0MTIxOTM2NGExNTA3OHAwLAorICAgIC0weDEuMTcwNjUzZmIxZWIwYnAxCisgIH0sCisgIHsgLy8gRW50cnkgNzY4CisgICAgLTB4MS40MTAzOGI3MGJlMGZmNWI3YzRkOGYwNmIwZDRjZjUyNXAwLAorICAgIDB4MS4xZjNiMzg1NTU0NGM4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NjkKKyAgICAweDEuNDEwMzhiNzBiZTBmZjViN2M0ZDhmMDZiMGQ0Y2Y1MjVwMCwKKyAgICAtMHgxLjFmM2IzODU1NTQ0YzhwMQorICB9LAorICB7IC8vIEVudHJ5IDc3MAorICAgIC0weDEuMTllMjZiNWVjZDVjMjk0MzQ4YmExN2ZlYzU0NTQ3OTJwMCwKKyAgICAweDEuMjc3MDFjYWY4OWU4NXAxCisgIH0sCisgIHsgLy8gRW50cnkgNzcxCisgICAgMHgxLjE5ZTI2YjVlY2Q1YzI5NDM0OGJhMTdmZWM1NDU0NzkycDAsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTg1cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzIKKyAgICAtMHgxLmVmZDgyNzQyZDc3OGM0YmNhMDdlMWU4NmNiYzYwNGIwcC0xLAorICAgIDB4MS4yZmE1MDEwOWJmODQycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzMKKyAgICAweDEuZWZkODI3NDJkNzc4YzRiY2EwN2UxZTg2Y2JjNjA0YjBwLTEsCisgICAgLTB4MS4yZmE1MDEwOWJmODQycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzQKKyAgICAtMHgxLmIzZGYzODZmMTgyMjRhNjQwM2U1NWMxNmIzNmVmMTdmcC0xLAorICAgIDB4MS4zN2Q5ZTU2M2Y1MWZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzUKKyAgICAweDEuYjNkZjM4NmYxODIyNGE2NDAzZTU1YzE2YjM2ZWYxN2ZwLTEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MWZmcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzYKKyAgICAtMHgxLjdlMWQ5MzZmNGQ2MGYxZTZmODhiNGEyNGRmOWM2NWY0cC0xLAorICAgIDB4MS40MDBlYzliZTJhYmJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzcKKyAgICAweDEuN2UxZDkzNmY0ZDYwZjFlNmY4OGI0YTI0ZGY5YzY1ZjRwLTEsCisgICAgLTB4MS40MDBlYzliZTJhYmJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzgKKyAgICAtMHgxLjRkNDY2YWNjYWQ0ODU3NDE4ODgzNTEzMGU2OGU5YmFkcC0xLAorICAgIDB4MS40ODQzYWUxODYwNTc5cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzkKKyAgICAweDEuNGQ0NjZhY2NhZDQ4NTc0MTg4ODM1MTMwZTY4ZTliYWRwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNTc5cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODAKKyAgICAtMHgxLjIwNWE2MDA5ZDVlMzM3NzRmYTk4ZjlmNjE2YWNjODBmcC0xLAorICAgIDB4MS41MDc4OTI3Mjk1ZjM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODEKKyAgICAweDEuMjA1YTYwMDlkNWUzMzc3NGZhOThmOWY2MTZhY2M4MGZwLTEsCisgICAgLTB4MS41MDc4OTI3Mjk1ZjM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODIKKyAgICAtMHgxLmVkMjFlNTk5NzJhZWY2NGEwNmU1NTNmMThkNjQ2MDkzcC0yLAorICAgIDB4MS41OGFkNzZjY2NiOGYzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODMKKyAgICAweDEuZWQyMWU1OTk3MmFlZjY0YTA2ZTU1M2YxOGQ2NDYwOTNwLTIsCisgICAgLTB4MS41OGFkNzZjY2NiOGYzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODQKKyAgICAtMHgxLjllOTI1N2U2YjYyODRmNzNjZDFlMmVhZTMyMjBmMzEzcC0yLAorICAgIDB4MS42MGUyNWIyNzAxMmIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODUKKyAgICAweDEuOWU5MjU3ZTZiNjI4NGY3M2NkMWUyZWFlMzIyMGYzMTNwLTIsCisgICAgLTB4MS42MGUyNWIyNzAxMmIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODYKKyAgICAtMHgxLjUzZmRjZGZkMzdlZTU1YmMxY2QxNjA0YjZhYjEzYjVmcC0yLAorICAgIDB4MS42OTE3M2Y4MTM2YzZkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODcKKyAgICAweDEuNTNmZGNkZmQzN2VlNTViYzFjZDE2MDRiNmFiMTNiNWZwLTIsCisgICAgLTB4MS42OTE3M2Y4MTM2YzZkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODgKKyAgICAtMHgxLjBjODY0MDgzZDFlNWFhYTY4MTVhODVlMjVjNjYyZTk3cC0yLAorICAgIDB4MS43MTRjMjNkYjZjNjJhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODkKKyAgICAweDEuMGM4NjQwODNkMWU1YWFhNjgxNWE4NWUyNWM2NjJlOTdwLTIsCisgICAgLTB4MS43MTRjMjNkYjZjNjJhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTAKKyAgICAtMHgxLjhlZDkxNDJmYzkxM2Y0NTBkY2NkYmRkMjdlZDExYTQwcC0zLAorICAgIDB4MS43OTgxMDgzNWExZmU3cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTEKKyAgICAweDEuOGVkOTE0MmZjOTEzZjQ1MGRjY2RiZGQyN2VkMTFhNDBwLTMsCisgICAgLTB4MS43OTgxMDgzNWExZmU3cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTIKKyAgICAtMHgxLjA4MGY3M2IwNzA0Y2Y1NzA4MThhNjVkMWExMmQ1YmUxcC0zLAorICAgIDB4MS44MWI1ZWM4ZmQ3OWE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTMKKyAgICAweDEuMDgwZjczYjA3MDRjZjU3MDgxOGE2NWQxYTEyZDViZTFwLTMsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OWE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTQKKyAgICAtMHgxLjA2ZjhkMDE0YmYwOWFiODVmMmExOWQ4MGRhNWEyYzBicC00LAorICAgIDB4MS44OWVhZDBlYTBkMzVicDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTUKKyAgICAweDEuMDZmOGQwMTRiZjA5YWI4NWYyYTE5ZDgwZGE1YTJjMGJwLTQsCisgICAgLTB4MS44OWVhZDBlYTBkMzVicDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTYKKyAgICAweDEuMGM4NjQwODNkMWU3ZjM5NTViMTIwNzFlMDY0NDQxOGJwLTIsCisgICAgLTB4MS44MWI1ZWM4ZmQ3OTlmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTcKKyAgICAtMHgxLjBjODY0MDgzZDFlN2YzOTU1YjEyMDcxZTA2NDQ0MThicC0yLAorICAgIDB4MS44MWI1ZWM4ZmQ3OTlmcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTgKKyAgICAweDEuMjA1YTYwMDlkNWUzZjc0ZGEzYTM3MmFjMTU3MjFlZjZwLTEsCisgICAgLTB4MS43MTRjMjNkYjZjNjI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTkKKyAgICAtMHgxLjIwNWE2MDA5ZDVlM2Y3NGRhM2EzNzJhYzE1NzIxZWY2cC0xLAorICAgIDB4MS43MTRjMjNkYjZjNjI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDAKKyAgICAweDEuZWZkODI3NDJkNzc4ZTZmMDRhZGVmYzNkMjFmOGJlOTZwLTEsCisgICAgLTB4MS42MGUyNWIyNzAxMmFkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDEKKyAgICAtMHgxLmVmZDgyNzQyZDc3OGU2ZjA0YWRlZmMzZDIxZjhiZTk2cC0xLAorICAgIDB4MS42MGUyNWIyNzAxMmFkcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDIKKyAgICAweDEuYTY0YzdjOWQ2NTM0NjhmYmM1MjYwZGNhNTAxZGRiODFwMCwKKyAgICAtMHgxLjUwNzg5MjcyOTVmMzRwMgorICB9LAorICB7IC8vIEVudHJ5IDgwMworICAgIC0weDEuYTY0YzdjOWQ2NTM0NjhmYmM1MjYwZGNhNTAxZGRiODFwMCwKKyAgICAweDEuNTA3ODkyNzI5NWYzNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODA0CisgICAgMHgxLmFmNDY0M2U5MzcxZjkzMTZkMzI1NGI4NjE5ZWRhNDg0cDEsCisgICAgLTB4MS40MDBlYzliZTJhYmJicDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDUKKyAgICAtMHgxLmFmNDY0M2U5MzcxZjkzMTZkMzI1NGI4NjE5ZWRhNDg0cDEsCisgICAgMHgxLjQwMGVjOWJlMmFiYmJwMgorICB9LAorICB7IC8vIEVudHJ5IDgwNgorICAgIDB4MS5mMmYwNWNmYjY1NmE5ZTRhMDg1YjAyN2QxODYwMzIzMHA0LAorICAgIC0weDEuMmZhNTAxMDliZjg0MnAyCisgIH0sCisgIHsgLy8gRW50cnkgODA3CisgICAgLTB4MS5mMmYwNWNmYjY1NmE5ZTRhMDg1YjAyN2QxODYwMzIzMHA0LAorICAgIDB4MS4yZmE1MDEwOWJmODQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDgKKyAgICAtMHgxLjE4NjZmZTg0NWU3NzU1MzkyYTBhZGZmNTZhNjg4ZWFhcDIsCisgICAgLTB4MS4xZjNiMzg1NTU0NGM5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDkKKyAgICAweDEuMTg2NmZlODQ1ZTc3NTUzOTJhMGFkZmY1NmE2ODhlYWFwMiwKKyAgICAweDEuMWYzYjM4NTU1NDRjOXAyCisgIH0sCisgIHsgLy8gRW50cnkgODEwCisgICAgLTB4MS5lYWI0M2UwZTVlODk1OWU4ZjVhYzZjNGY5ZDlhODMzYnAwLAorICAgIC0weDEuMGVkMTZmYTBlOTE1MHAyCisgIH0sCisgIHsgLy8gRW50cnkgODExCisgICAgMHgxLmVhYjQzZTBlNWU4OTU5ZThmNWFjNmM0ZjlkOWE4MzNicDAsCisgICAgMHgxLjBlZDE2ZmEwZTkxNTBwMgorICB9LAorICB7IC8vIEVudHJ5IDgxMgorICAgIC0weDEuMTllMjZiNWVjZDVjZDY5YzMwYzNkYzVkOWZmZGU5ODZwMCwKKyAgICAtMHgxLmZjY2Y0ZGQ4ZmJiYWVwMQorICB9LAorICB7IC8vIEVudHJ5IDgxMworICAgIDB4MS4xOWUyNmI1ZWNkNWNkNjljMzBjM2RjNWQ5ZmZkZTk4NnAwLAorICAgIDB4MS5mY2NmNGRkOGZiYmFlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTQKKyAgICAtMHgxLjRkNDY2YWNjYWQ0OWVjOTY5MzVjYWEyYTM1ZTQzOWYwcC0xLAorICAgIC0weDEuZGJmYmJjNzAyNTRiY3AxCisgIH0sCisgIHsgLy8gRW50cnkgODE1CisgICAgMHgxLjRkNDY2YWNjYWQ0OWVjOTY5MzVjYWEyYTM1ZTQzOWYwcC0xLAorICAgIDB4MS5kYmZiYmM3MDI1NGJjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTYKKyAgICAtMHgxLjUzZmRjZGZkMzdmMWVhMjE2ZTgxNTc1OGVkMDJhNTU3cC0yLAorICAgIC0weDEuYmIyODJiMDc0ZWRjYXAxCisgIH0sCisgIHsgLy8gRW50cnkgODE3CisgICAgMHgxLjUzZmRjZGZkMzdmMWVhMjE2ZTgxNTc1OGVkMDJhNTU3cC0yLAorICAgIDB4MS5iYjI4MmIwNzRlZGNhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTgKKyAgICAtMHgxLjA2ZjhkMDE0YmYwZTk2NGU2MzRmMzdiY2RiZjY0NDkxcC00LAorICAgIC0weDEuOWE1NDk5OWU3ODZkOHAxCisgIH0sCisgIHsgLy8gRW50cnkgODE5CisgICAgMHgxLjA2ZjhkMDE0YmYwZTk2NGU2MzRmMzdiY2RiZjY0NDkxcC00LAorICAgIDB4MS45YTU0OTk5ZTc4NmQ4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjAKKyAgICAweDEuOGVkOTE0MmZjOTE0ZmUwNjdiOTkxZDExZDcwODU5YjhwLTMsCisgICAgLTB4MS43OTgxMDgzNWExZmU2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjEKKyAgICAtMHgxLjhlZDkxNDJmYzkxNGZlMDY3Yjk5MWQxMWQ3MDg1OWI4cC0zLAorICAgIDB4MS43OTgxMDgzNWExZmU2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjIKKyAgICAweDEuZWQyMWU1OTk3MmFlNTg5YWFhNGVlM2Q4MGMzYjdkZWZwLTIsCisgICAgLTB4MS41OGFkNzZjY2NiOGY0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjMKKyAgICAtMHgxLmVkMjFlNTk5NzJhZTU4OWFhYTRlZTNkODBjM2I3ZGVmcC0yLAorICAgIDB4MS41OGFkNzZjY2NiOGY0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjQKKyAgICAweDEuYjNkZjM4NmYxODIwZmYzZGYyOTBmMDM2ZGI0NmYxM2JwLTEsCisgICAgLTB4MS4zN2Q5ZTU2M2Y1MjAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjUKKyAgICAtMHgxLmIzZGYzODZmMTgyMGZmM2RmMjkwZjAzNmRiNDZmMTNicC0xLAorICAgIDB4MS4zN2Q5ZTU2M2Y1MjAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjYKKyAgICAweDEuNmVmZWM4YzFlNDkyNjE2ZmUyZmVjMGI3NjRmYTZlYjRwMCwKKyAgICAtMHgxLjE3MDY1M2ZiMWViMTBwMQorICB9LAorICB7IC8vIEVudHJ5IDgyNworICAgIC0weDEuNmVmZWM4YzFlNDkyNjE2ZmUyZmVjMGI3NjRmYTZlYjRwMCwKKyAgICAweDEuMTcwNjUzZmIxZWIxMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODI4CisgICAgMHgxLjViZDEzZGRhMDc3YWRhOTE5MjdhYjczY2VkYWE4MjhkcDEsCisgICAgLTB4MS5lYzY1ODUyNDkwODNjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjkKKyAgICAtMHgxLjViZDEzZGRhMDc3YWRhOTE5MjdhYjczY2VkYWE4MjhkcDEsCisgICAgMHgxLmVjNjU4NTI0OTA4M2NwMAorICB9LAorICB7IC8vIEVudHJ5IDgzMAorICAgIDB4MS40YmI2YTY0ZTA2MWY2OWNmNzQwOTkzMTM4M2NjODBhMXAzLAorICAgIC0weDEuYWFiZTYyNTJlM2E1OHAwCisgIH0sCisgIHsgLy8gRW50cnkgODMxCisgICAgLTB4MS40YmI2YTY0ZTA2MWY2OWNmNzQwOTkzMTM4M2NjODBhMXAzLAorICAgIDB4MS5hYWJlNjI1MmUzYTU4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzIKKyAgICAtMHgxLjhiZGNkNTRiZDVhMDA0YWNmOTIyYzQ5YThkNWUyOGEycDIsCisgICAgLTB4MS42OTE3M2Y4MTM2Yzc0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzMKKyAgICAweDEuOGJkY2Q1NGJkNWEwMDRhY2Y5MjJjNDlhOGQ1ZTI4YTJwMiwKKyAgICAweDEuNjkxNzNmODEzNmM3NHAwCisgIH0sCisgIHsgLy8gRW50cnkgODM0CisgICAgLTB4MS4yMTI3N2I5N2MwMTVmMTlkZTdiMjM4MjUyZTU2ZTYzZnAxLAorICAgIC0weDEuMjc3MDFjYWY4OWU5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgODM1CisgICAgMHgxLjIxMjc3Yjk3YzAxNWYxOWRlN2IyMzgyNTJlNTZlNjNmcDEsCisgICAgMHgxLjI3NzAxY2FmODllOTBwMAorICB9LAorICB7IC8vIEVudHJ5IDgzNgorICAgIC0weDEuNDEwMzhiNzBiZTExYjg1Nzk4YTI3MWFjM2QyMDllYTdwMCwKKyAgICAtMHgxLmNiOTFmM2JiYmExNTdwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzcKKyAgICAweDEuNDEwMzhiNzBiZTExYjg1Nzk4YTI3MWFjM2QyMDllYTdwMCwKKyAgICAweDEuY2I5MWYzYmJiYTE1N3AtMQorICB9LAorICB7IC8vIEVudHJ5IDgzOAorICAgIC0weDEuN2UxZDkzNmY0ZDYzYzFjNzgwNjY1N2Q4YjgzODgzNmVwLTEsCisgICAgLTB4MS40ODQzYWUxODYwNThlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODM5CisgICAgMHgxLjdlMWQ5MzZmNGQ2M2MxYzc4MDY2NTdkOGI4Mzg4MzZlcC0xLAorICAgIDB4MS40ODQzYWUxODYwNThlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODQwCisgICAgLTB4MS45ZTkyNTdlNmI2MmQ4ODZmNzRlMzQ4YmRjMTQyNTk5Y3AtMiwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzOGFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDEKKyAgICAweDEuOWU5MjU3ZTZiNjJkODg2Zjc0ZTM0OGJkYzE0MjU5OWNwLTIsCisgICAgMHgxLjg5ZWFkMGVhMGQzOGFwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDIKKyAgICAtMHgxLjA4MGY3M2IwNzA1N2RjN2JmMGRmNmRlMWQzYWUxYTNicC0zLAorICAgIC0weDEuMDY5YzhiNDZiMzdmMHAtMworICB9LAorICB7IC8vIEVudHJ5IDg0MworICAgIDB4MS4wODBmNzNiMDcwNTdkYzdiZjBkZjZkZTFkM2FlMWEzYnAtMywKKyAgICAweDEuMDY5YzhiNDZiMzdmMHAtMworICB9LAorICB7IC8vIEVudHJ5IDg0NAorICAgIDB4MS4wODBmNzNiMDcwNGJlYTdhNTZkNGY4OGVjZjNkNWNkM3AtMywKKyAgICAweDEuMDY5YzhiNDZiMzczNHAtMworICB9LAorICB7IC8vIEVudHJ5IDg0NQorICAgIC0weDEuMDgwZjczYjA3MDRiZWE3YTU2ZDRmODhlY2YzZDVjZDNwLTMsCisgICAgLTB4MS4wNjljOGI0NmIzNzM0cC0zCisgIH0sCisgIHsgLy8gRW50cnkgODQ2CisgICAgMHgxLjllOTI1N2U2YjYyNmIxZWIxMTM2YmQ3ODUzMzExNTQzcC0yLAorICAgIDB4MS44OWVhZDBlYTBkMzJjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgODQ3CisgICAgLTB4MS45ZTkyNTdlNmI2MjZiMWViMTEzNmJkNzg1MzMxMTU0M3AtMiwKKyAgICAtMHgxLjg5ZWFkMGVhMGQzMmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDgKKyAgICAweDEuN2UxZDkzNmY0ZDVmMmVlYmJiZjNkNjI5NjMxMDZhZmFwLTEsCisgICAgMHgxLjQ4NDNhZTE4NjA1NWZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDkKKyAgICAtMHgxLjdlMWQ5MzZmNGQ1ZjJlZWJiYmYzZDYyOTYzMTA2YWZhcC0xLAorICAgIC0weDEuNDg0M2FlMTg2MDU1ZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDg1MAorICAgIDB4MS40MTAzOGI3MGJlMGRmMTFkMTIyNDY4M2M2Zjg2NTU4NHAwLAorICAgIDB4MS5jYjkxZjNiYmJhMTI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgODUxCisgICAgLTB4MS40MTAzOGI3MGJlMGRmMTFkMTIyNDY4M2M2Zjg2NTU4NHAwLAorICAgIC0weDEuY2I5MWYzYmJiYTEyOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDg1MgorICAgIDB4MS4yMTI3N2I5N2MwMTE1ZGNmNjY0N2FkNjhmNGNiNGFkMHAxLAorICAgIDB4MS4yNzcwMWNhZjg5ZTc4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTMKKyAgICAtMHgxLjIxMjc3Yjk3YzAxMTVkY2Y2NjQ3YWQ2OGY0Y2I0YWQwcDEsCisgICAgLTB4MS4yNzcwMWNhZjg5ZTc4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTQKKyAgICAweDEuOGJkY2Q1NGJkNTkxNGJkOWE0ZDZkZDY1OWMyZjY2MDZwMiwKKyAgICAweDEuNjkxNzNmODEzNmM1Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgODU1CisgICAgLTB4MS44YmRjZDU0YmQ1OTE0YmQ5YTRkNmRkNjU5YzJmNjYwNnAyLAorICAgIC0weDEuNjkxNzNmODEzNmM1Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgODU2CisgICAgLTB4MS40YmI2YTY0ZTA2MzNiZmE1Njg3OTY2MDY1NWMzODc2N3AzLAorICAgIDB4MS5hYWJlNjI1MmUzYTQwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTcKKyAgICAweDEuNGJiNmE2NGUwNjMzYmZhNTY4Nzk2NjA2NTVjMzg3NjdwMywKKyAgICAtMHgxLmFhYmU2MjUyZTNhNDBwMAorICB9LAorICB7IC8vIEVudHJ5IDg1OAorICAgIC0weDEuNWJkMTNkZGEwNzgxMjQ0NDRjOTQwZjAxM2JlN2M0MDJwMSwKKyAgICAweDEuZWM2NTg1MjQ5MDgyNHAwCisgIH0sCisgIHsgLy8gRW50cnkgODU5CisgICAgMHgxLjViZDEzZGRhMDc4MTI0NDQ0Yzk0MGYwMTNiZTdjNDAycDEsCisgICAgLTB4MS5lYzY1ODUyNDkwODI0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjAKKyAgICAtMHgxLjZlZmVjOGMxZTQ5NmY2OWMyODZhZGM2NmJkNTg2ZWFmcDAsCisgICAgMHgxLjE3MDY1M2ZiMWViMDRwMQorICB9LAorICB7IC8vIEVudHJ5IDg2MQorICAgIDB4MS42ZWZlYzhjMWU0OTZmNjljMjg2YWRjNjZiZDU4NmVhZnAwLAorICAgIC0weDEuMTcwNjUzZmIxZWIwNHAxCisgIH0sCisgIHsgLy8gRW50cnkgODYyCisgICAgLTB4MS5iM2RmMzg2ZjE4MjYyYmQ2MzdlMjlmYmIzMDgwNmIyY3AtMSwKKyAgICAweDEuMzdkOWU1NjNmNTFmNnAxCisgIH0sCisgIHsgLy8gRW50cnkgODYzCisgICAgMHgxLmIzZGYzODZmMTgyNjJiZDYzN2UyOWZiYjMwODA2YjJjcC0xLAorICAgIC0weDEuMzdkOWU1NjNmNTFmNnAxCisgIH0sCisgIHsgLy8gRW50cnkgODY0CisgICAgLTB4MS5lZDIxZTU5OTcyYjViY2QzMDE1YzI1MGVmZjFjNjliOXAtMiwKKyAgICAweDEuNThhZDc2Y2NjYjhlOHAxCisgIH0sCisgIHsgLy8gRW50cnkgODY1CisgICAgMHgxLmVkMjFlNTk5NzJiNWJjZDMwMTVjMjUwZWZmMWM2OWI5cC0yLAorICAgIC0weDEuNThhZDc2Y2NjYjhlOHAxCisgIH0sCisgIHsgLy8gRW50cnkgODY2CisgICAgLTB4MS44ZWQ5MTQyZmM5MjE3Mjg5ZWQyMTk0MGRlYWFmZTg3OHAtMywKKyAgICAweDEuNzk4MTA4MzVhMWZkYXAxCisgIH0sCisgIHsgLy8gRW50cnkgODY3CisgICAgMHgxLjhlZDkxNDJmYzkyMTcyODllZDIxOTQwZGVhYWZlODc4cC0zLAorICAgIC0weDEuNzk4MTA4MzVhMWZkYXAxCisgIH0sCisgIHsgLy8gRW50cnkgODY4CisgICAgMHgxLjA2ZjhkMDE0YmVmNjdjZmIyZGI1NjBmNWE0MTRjODhicC00LAorICAgIDB4MS45YTU0OTk5ZTc4NmNjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjkKKyAgICAtMHgxLjA2ZjhkMDE0YmVmNjdjZmIyZGI1NjBmNWE0MTRjODhicC00LAorICAgIC0weDEuOWE1NDk5OWU3ODZjY3AxCisgIH0sCisgIHsgLy8gRW50cnkgODcwCisgICAgMHgxLjUzZmRjZGZkMzdlYjQwY2Q5ZTUwNGRmNDMxYjUwMmQwcC0yLAorICAgIDB4MS5iYjI4MmIwNzRlZGJlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzEKKyAgICAtMHgxLjUzZmRjZGZkMzdlYjQwY2Q5ZTUwNGRmNDMxYjUwMmQwcC0yLAorICAgIC0weDEuYmIyODJiMDc0ZWRiZXAxCisgIH0sCisgIHsgLy8gRW50cnkgODcyCisgICAgMHgxLjRkNDY2YWNjYWQ0NWE3MmU1ZjczNWViMmY2YWRmOWZmcC0xLAorICAgIDB4MS5kYmZiYmM3MDI1NGIwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzMKKyAgICAtMHgxLjRkNDY2YWNjYWQ0NWE3MmU1ZjczNWViMmY2YWRmOWZmcC0xLAorICAgIC0weDEuZGJmYmJjNzAyNTRiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODc0CisgICAgMHgxLjE5ZTI2YjVlY2Q1OTg1MDdlY2QwMGQ4MWVjNzc1NjgzcDAsCisgICAgMHgxLmZjY2Y0ZGQ4ZmJiYTJwMQorICB9LAorICB7IC8vIEVudHJ5IDg3NQorICAgIC0weDEuMTllMjZiNWVjZDU5ODUwN2VjZDAwZDgxZWM3NzU2ODNwMCwKKyAgICAtMHgxLmZjY2Y0ZGQ4ZmJiYTJwMQorICB9LAorICB7IC8vIEVudHJ5IDg3NgorICAgIDB4MS5lYWI0M2UwZTVlODI1NzA3M2FmYWVjYWIzODYxNTRhMXAwLAorICAgIDB4MS4wZWQxNmZhMGU5MTRhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzcKKyAgICAtMHgxLmVhYjQzZTBlNWU4MjU3MDczYWZhZWNhYjM4NjE1NGExcDAsCisgICAgLTB4MS4wZWQxNmZhMGU5MTRhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzgKKyAgICAweDEuMTg2NmZlODQ1ZTZmYzI3MDY0ZTJiMTIzYTc3MjRlNzVwMiwKKyAgICAweDEuMWYzYjM4NTU1NDRjM3AyCisgIH0sCisgIHsgLy8gRW50cnkgODc5CisgICAgLTB4MS4xODY2ZmU4NDVlNmZjMjcwNjRlMmIxMjNhNzcyNGU3NXAyLAorICAgIC0weDEuMWYzYjM4NTU1NDRjM3AyCisgIH0sCisgIHsgLy8gRW50cnkgODgwCisgICAgLTB4MS5mMmYwNWNmYjY1YzVlMDZiMWFlODhjNDhiNGI3NTVjZXA0LAorICAgIDB4MS4yZmE1MDEwOWJmODNjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODEKKyAgICAweDEuZjJmMDVjZmI2NWM1ZTA2YjFhZTg4YzQ4YjRiNzU1Y2VwNCwKKyAgICAtMHgxLjJmYTUwMTA5YmY4M2NwMgorICB9LAorICB7IC8vIEVudHJ5IDg4MgorICAgIC0weDEuYWY0NjQzZTkzNzI4ZDZiZmQ3MDJjMzM0MDVkY2NlN2RwMSwKKyAgICAweDEuNDAwZWM5YmUyYWJiNXAyCisgIH0sCisgIHsgLy8gRW50cnkgODgzCisgICAgMHgxLmFmNDY0M2U5MzcyOGQ2YmZkNzAyYzMzNDA1ZGNjZTdkcDEsCisgICAgLTB4MS40MDBlYzliZTJhYmI1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODQKKyAgICAtMHgxLmE2NGM3YzlkNjUzOWZkZWMyN2FmYzM4MGI5Zjc1MmMwcDAsCisgICAgMHgxLjUwNzg5MjcyOTVmMmVwMgorICB9LAorICB7IC8vIEVudHJ5IDg4NQorICAgIDB4MS5hNjRjN2M5ZDY1MzlmZGVjMjdhZmMzODBiOWY3NTJjMHAwLAorICAgIC0weDEuNTA3ODkyNzI5NWYyZXAyCisgIH0sCisgIHsgLy8gRW50cnkgODg2CisgICAgLTB4MS5lZmQ4Mjc0MmQ3N2ViNzNjODFhMDBmNTY4NjIxZjYzY3AtMSwKKyAgICAweDEuNjBlMjViMjcwMTJhN3AyCisgIH0sCisgIHsgLy8gRW50cnkgODg3CisgICAgMHgxLmVmZDgyNzQyZDc3ZWI3M2M4MWEwMGY1Njg2MjFmNjNjcC0xLAorICAgIC0weDEuNjBlMjViMjcwMTJhN3AyCisgIH0sCisgIHsgLy8gRW50cnkgODg4CisgICAgLTB4MS4yMDVhNjAwOWQ1ZTdlYWU2M2RhMWNiZDU3MTI5ZWVmZnAtMSwKKyAgICAweDEuNzE0YzIzZGI2YzYyMHAyCisgIH0sCisgIHsgLy8gRW50cnkgODg5CisgICAgMHgxLjIwNWE2MDA5ZDVlN2VhZTYzZGExY2JkNTcxMjllZWZmcC0xLAorICAgIC0weDEuNzE0YzIzZGI2YzYyMHAyCisgIH0sCisgIHsgLy8gRW50cnkgODkwCisgICAgLTB4MS4wYzg2NDA4M2QxZWU1ZDM0ZGUyMDYwYzg2MjlkNDk1MXAtMiwKKyAgICAweDEuODFiNWVjOGZkNzk5OXAyCisgIH0sCisgIHsgLy8gRW50cnkgODkxCisgICAgMHgxLjBjODY0MDgzZDFlZTVkMzRkZTIwNjBjODYyOWQ0OTUxcC0yLAorICAgIC0weDEuODFiNWVjOGZkNzk5OXAyCisgIH0sCisgIHsgLy8gRW50cnkgODkyCisgICAgMHgxLmYwOWI2M2FhODFmYzM2ZGE1MDljM2U0MTA2MDdmZmU3cC01LAorICAgIDB4MS5lZmZmZmZmZmZmZmZmcC01CisgIH0sCisgIHsgLy8gRW50cnkgODkzCisgICAgLTB4MS5mMDliNjNhYTgxZmMzNmRhNTA5YzNlNDEwNjA3ZmZlN3AtNSwKKyAgICAtMHgxLmVmZmZmZmZmZmZmZmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTQKKyAgICAweDEuZjA5YjYzYWE4MWZjNDZlOTVlMDY0MDViNDFlOGI0Y2NwLTUsCisgICAgMHgxLmZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTUKKyAgICAtMHgxLmYwOWI2M2FhODFmYzQ2ZTk1ZTA2NDA1YjQxZThiNGNjcC01LAorICAgIC0weDEuZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDg5NgorICAgIDB4MS5mMDliNjNhYTgxZmM1NmY4NmI3MDQyNzU3ZGNhNjJlOHAtNSwKKyAgICAweDEuZjAwMDAwMDAwMDAwMXAtNQorICB9LAorICB7IC8vIEVudHJ5IDg5NworICAgIC0weDEuZjA5YjYzYWE4MWZjNTZmODZiNzA0Mjc1N2RjYTYyZThwLTUsCisgICAgLTB4MS5mMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgODk4CisgICAgMHgxLmZhOGYyMWM4YTMzYWVjZjRhZjc3NzU0ZWY5MGE2N2I4cC00LAorICAgIDB4MS5mN2ZmZmZmZmZmZmZmcC00CisgIH0sCisgIHsgLy8gRW50cnkgODk5CisgICAgLTB4MS5mYThmMjFjOGEzM2FlY2Y0YWY3Nzc1NGVmOTBhNjdiOHAtNCwKKyAgICAtMHgxLmY3ZmZmZmZmZmZmZmZwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDAKKyAgICAweDEuZmE4ZjIxYzhhMzNhZmQzMzU1MTk4ZThkNzcxNmE4MTFwLTQsCisgICAgMHgxLmY4MHAtNAorICB9LAorICB7IC8vIEVudHJ5IDkwMQorICAgIC0weDEuZmE4ZjIxYzhhMzNhZmQzMzU1MTk4ZThkNzcxNmE4MTFwLTQsCisgICAgLTB4MS5mODBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDIKKyAgICAweDEuZmE4ZjIxYzhhMzNiMGQ3MWZhYmJhN2NiZjUyNmVkMDdwLTQsCisgICAgMHgxLmY4MDAwMDAwMDAwMDFwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDMKKyAgICAtMHgxLmZhOGYyMWM4YTMzYjBkNzFmYWJiYTdjYmY1MjZlZDA3cC00LAorICAgIC0weDEuZjgwMDAwMDAwMDAwMXAtNAorICB9LAorICB7IC8vIEVudHJ5IDkwNAorICAgIDB4MS40ZWYwNmNiNGYwYTg2OWVmMDBkZjhlYzU1ODJkZmEzMXAtMywKKyAgICAweDEuNGJmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDkwNQorICAgIC0weDEuNGVmMDZjYjRmMGE4NjllZjAwZGY4ZWM1NTgyZGZhMzFwLTMsCisgICAgLTB4MS40YmZmZmZmZmZmZmZmcC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTA2CisgICAgMHgxLjRlZjA2Y2I0ZjBhODdhNWM4ZWVlZWJjZWIxMmEyMmI0cC0zLAorICAgIDB4MS40YzBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDcKKyAgICAtMHgxLjRlZjA2Y2I0ZjBhODdhNWM4ZWVlZWJjZWIxMmEyMmI0cC0zLAorICAgIC0weDEuNGMwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTA4CisgICAgMHgxLjRlZjA2Y2I0ZjBhODhhY2ExY2ZlNDhkODBhMzEwYTY1cC0zLAorICAgIDB4MS40YzAwMDAwMDAwMDAxcC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTA5CisgICAgLTB4MS40ZWYwNmNiNGYwYTg4YWNhMWNmZTQ4ZDgwYTMxMGE2NXAtMywKKyAgICAtMHgxLjRjMDAwMDAwMDAwMDFwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTAKKyAgICAweDEuM2NjMmE0NGUyOTk5NjY4Y2IwOTJhMDliNzNiMmRlNTBwLTIsCisgICAgMHgxLjMzMzMzMzMzMzMzMzJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTEKKyAgICAtMHgxLjNjYzJhNDRlMjk5OTY2OGNiMDkyYTA5YjczYjJkZTUwcC0yLAorICAgIC0weDEuMzMzMzMzMzMzMzMzMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDkxMgorICAgIDB4MS4zY2MyYTQ0ZTI5OTk3ODE0YTFhYzNmMDIxMWM3NjQxZnAtMiwKKyAgICAweDEuMzMzMzMzMzMzMzMzM3AtMgorICB9LAorICB7IC8vIEVudHJ5IDkxMworICAgIC0weDEuM2NjMmE0NGUyOTk5NzgxNGExYWMzZjAyMTFjNzY0MWZwLTIsCisgICAgLTB4MS4zMzMzMzMzMzMzMzMzcC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTE0CisgICAgMHgxLjNjYzJhNDRlMjk5OTg5OWM5MmM1ZGQ2OGIwMDc0YzMxcC0yLAorICAgIDB4MS4zMzMzMzMzMzMzMzM0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTE1CisgICAgLTB4MS4zY2MyYTQ0ZTI5OTk4OTljOTJjNWRkNjhiMDA3NGMzMXAtMiwKKyAgICAtMHgxLjMzMzMzMzMzMzMzMzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTYKKyAgICAweDEuOTk0MzcxMWRjMmNlODNkMjFjZGIyODVhY2VkODE3YWRwLTEsCisgICAgMHgxLjU5NDMxN2FjYzRlZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTcKKyAgICAtMHgxLjk5NDM3MTFkYzJjZTgzZDIxY2RiMjg1YWNlZDgxN2FkcC0xLAorICAgIC0weDEuNTk0MzE3YWNjNGVmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDkxOAorICAgIDB4MS45OTQzNzExZGMyY2U5ZTBiM2YxZmZlNWFlYzBhYzIwZHAtMSwKKyAgICAweDEuNTk0MzE3YWNjNGVmOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDkxOQorICAgIC0weDEuOTk0MzcxMWRjMmNlOWUwYjNmMWZmZTVhZWMwYWMyMGRwLTEsCisgICAgLTB4MS41OTQzMTdhY2M0ZWY5cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTIwCisgICAgMHgxLjk5NDM3MTFkYzJjZWI4NDQ2MTY0ZDQ1YjBhOGNjZGVlcC0xLAorICAgIDB4MS41OTQzMTdhY2M0ZWZhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTIxCisgICAgLTB4MS45OTQzNzExZGMyY2ViODQ0NjE2NGQ0NWIwYThjY2RlZXAtMSwKKyAgICAtMHgxLjU5NDMxN2FjYzRlZmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjIKKyAgICAweDEuZmJjNTExZGY1OTE3ZDU3ZDIzMWQ3YWQ0MzRkYTVmOTRwLTEsCisgICAgMHgxLjhmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjMKKyAgICAtMHgxLmZiYzUxMWRmNTkxN2Q1N2QyMzFkN2FkNDM0ZGE1Zjk0cC0xLAorICAgIC0weDEuOGZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDkyNAorICAgIDB4MS5mYmM1MTFkZjU5MTdmNTM5YmJjZjc3OGJjMWEyMjI0OXAtMSwKKyAgICAweDEuOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDkyNQorICAgIC0weDEuZmJjNTExZGY1OTE3ZjUzOWJiY2Y3NzhiYzFhMjIyNDlwLTEsCisgICAgLTB4MS45cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTI2CisgICAgMHgxLmZiYzUxMWRmNTkxODE0ZjY1NDgxNzQ0MzUwNjE3Yzg1cC0xLAorICAgIDB4MS45MDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTI3CisgICAgLTB4MS5mYmM1MTFkZjU5MTgxNGY2NTQ4MTc0NDM1MDYxN2M4NXAtMSwKKyAgICAtMHgxLjkwMDAwMDAwMDAwMDFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjgKKyAgICAtMHgxLnAtMTA3NCwKKyAgICAtMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjkKKyAgICAweDEucC0xMDc0LAorICAgIDB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgOTMwCisgICAgLTAuMCwKKyAgICAtMC4wCisgIH0sCisgIHsgLy8gRW50cnkgOTMxCisgICAgMHgxLnAtMTA3NCwKKyAgICAweDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDkzMgorICAgIC0weDEucC0xMDc0LAorICAgIC0weDEuMHAtMTA3NAorICB9LAorICB7IC8vIEVudHJ5IDkzMworICAgIDB4MS45MjcyNzhhM2IxMTYwYmJmOGUwYmIzMDlkYTQyNDdjNXAtNSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AtNQorICB9LAorICB7IC8vIEVudHJ5IDkzNAorICAgIC0weDEuOTI3Mjc4YTNiMTE2MGJiZjhlMGJiMzA5ZGE0MjQ3YzVwLTUsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC01CisgIH0sCisgIHsgLy8gRW50cnkgOTM1CisgICAgMHgxLjkyNzI3OGEzYjExNjFiYzk3MGJhOGI1MGU1NzVmOTdmcC01LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC01CisgIH0sCisgIHsgLy8gRW50cnkgOTM2CisgICAgLTB4MS45MjcyNzhhM2IxMTYxYmM5NzBiYThiNTBlNTc1Zjk3ZnAtNSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzcKKyAgICAweDEuOTI3Mjc4YTNiMTE2MmJkMzUzNjk2Mzk3ZjBhYTc0ZWVwLTUsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzgKKyAgICAtMHgxLjkyNzI3OGEzYjExNjJiZDM1MzY5NjM5N2YwYWE3NGVlcC01LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtNQorICB9LAorICB7IC8vIEVudHJ5IDkzOQorICAgIDB4MS45MzZiYjhjNWIyZGExMTgzMDZmYTliNWQ2ZDhlZDJjMXAtNCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AtNAorICB9LAorICB7IC8vIEVudHJ5IDk0MAorICAgIC0weDEuOTM2YmI4YzViMmRhMTE4MzA2ZmE5YjVkNmQ4ZWQyYzFwLTQsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC00CisgIH0sCisgIHsgLy8gRW50cnkgOTQxCisgICAgMHgxLjkzNmJiOGM1YjJkYTIxYWFjMmJmZWM4NDI5M2U1ZDRkcC00LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC00CisgIH0sCisgIHsgLy8gRW50cnkgOTQyCisgICAgLTB4MS45MzZiYjhjNWIyZGEyMWFhYzJiZmVjODQyOTNlNWQ0ZHAtNCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDMKKyAgICAweDEuOTM2YmI4YzViMmRhMzFkMjdlODUzZGFhZTRmMTE2ODRwLTQsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDQKKyAgICAtMHgxLjkzNmJiOGM1YjJkYTMxZDI3ZTg1M2RhYWU0ZjExNjg0cC00LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtNAorICB9LAorICB7IC8vIEVudHJ5IDk0NQorICAgIDB4MS45NzVmNWUwNTUzMTU2YjQzOGNhN2Q3NTJkMzdkMDg3M3AtMywKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AtMworICB9LAorICB7IC8vIEVudHJ5IDk0NgorICAgIC0weDEuOTc1ZjVlMDU1MzE1NmI0MzhjYTdkNzUyZDM3ZDA4NzNwLTMsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTQ3CisgICAgMHgxLjk3NWY1ZTA1NTMxNTdiZTU5Y2JmZjY0OGZkZWYyYzA4cC0zLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgOTQ4CisgICAgLTB4MS45NzVmNWUwNTUzMTU3YmU1OWNiZmY2NDhmZGVmMmMwOHAtMywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDkKKyAgICAweDEuOTc1ZjVlMDU1MzE1OGM4N2FjZDgxNTNmMjg2ZThiOGFwLTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTAKKyAgICAtMHgxLjk3NWY1ZTA1NTMxNThjODdhY2Q4MTUzZjI4NmU4YjhhcC0zLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMworICB9LAorICB7IC8vIEVudHJ5IDk1MQorICAgIDB4MS5hODI3OTk5ZmNlZjMwYzM4YjJlNTM5N2VhN2MxMGVhZHAtMiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AtMgorICB9LAorICB7IC8vIEVudHJ5IDk1MgorICAgIC0weDEuYTgyNzk5OWZjZWYzMGMzOGIyZTUzOTdlYTdjMTBlYWRwLTIsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTUzCisgICAgMHgxLmE4Mjc5OTlmY2VmMzFlZjc3NjE4M2IwNzBlNmZjODRlcC0yLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgOTU0CisgICAgLTB4MS5hODI3OTk5ZmNlZjMxZWY3NzYxODNiMDcwZTZmYzg0ZXAtMiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTUKKyAgICAweDEuYTgyNzk5OWZjZWYzMzFiNjM5NGIzYzhmNzU1YzlmYTNwLTIsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTYKKyAgICAtMHgxLmE4Mjc5OTlmY2VmMzMxYjYzOTRiM2M4Zjc1NWM5ZmEzcC0yLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOXAtMgorICB9LAorICB7IC8vIEVudHJ5IDk1NworICAgIDB4MS5mZmZmZmZmZmZmZmZkNzJjZWNlNjc1ZDFmZTMwMzViYnAtMSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AtMQorICB9LAorICB7IC8vIEVudHJ5IDk1OAorICAgIC0weDEuZmZmZmZmZmZmZmZmZDcyY2VjZTY3NWQxZmUzMDM1YmJwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTU5CisgICAgMHgxLmZmZmZmZmZmZmZmZmY3MmNlY2U2NzVkMWZjYTMwNDg5cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgOTYwCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmNzJjZWNlNjc1ZDFmY2EzMDQ4OXAtMSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjEKKyAgICAweDEuMDAwMDAwMDAwMDAwMGI5Njc2NzMzYWU4ZmU4YWU5YWNwMCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAtMQorICB9LAorICB7IC8vIEVudHJ5IDk2MgorICAgIC0weDEuMDAwMDAwMDAwMDAwMGI5Njc2NzMzYWU4ZmU4YWU5YWNwMCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjMKKyAgICAweDEuOTE1M2Q5NDQzZWQwYjNiNDNkZGFiNmFlNTczYWEyM2RwNTEsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTdwMAorICB9LAorICB7IC8vIEVudHJ5IDk2NAorICAgIC0weDEuOTE1M2Q5NDQzZWQwYjNiNDNkZGFiNmFlNTczYWEyM2RwNTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjUKKyAgICAweDEuZDAyOTY3YzMxY2RiNGUwYzM4ZDAxYjY1NWQ1ZTBhYWZwNTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDk2NgorICAgIC0weDEuZDAyOTY3YzMxY2RiNGUwYzM4ZDAxYjY1NWQ1ZTBhYWZwNTMsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjcKKyAgICAtMHgxLjYxN2ExNTQ5NDc2N2EwNDg4MmMzMjAzMTdmM2U0Y2VjcDUyLAorICAgIDB4MS45MjFmYjU0NDQyZDE5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjgKKyAgICAweDEuNjE3YTE1NDk0NzY3YTA0ODgyYzMyMDMxN2YzZTRjZWNwNTIsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjkKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWMzZDYwYzY4cC01MSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AxCisgIH0sCisgIHsgLy8gRW50cnkgOTcwCisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWMzZDYwYzY4cC01MSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwMQorICB9LAorICB7IC8vIEVudHJ5IDk3MQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ2MWQ1ZDdwLTUzLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzIKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ2MWQ1ZDdwLTUzLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgOTczCisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzdlZTBiOTZjcC01MiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAxCisgIH0sCisgIHsgLy8gRW50cnkgOTc0CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM3ZWUwYjk2Y3AtNTIsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzUKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWNjMjQ0YWI1cC01MCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AyCisgIH0sCisgIHsgLy8gRW50cnkgOTc2CisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWNjMjQ0YWI1cC01MCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwMgorICB9LAorICB7IC8vIEVudHJ5IDk3NworICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDRiN2JiYWJwLTUyLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzgKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDRiN2JiYWJwLTUyLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAyCisgIH0sCisgIHsgLy8gRW50cnkgOTc5CisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzgxZWFiMzhjcC01MSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAyCisgIH0sCisgIHsgLy8gRW50cnkgOTgwCisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM4MWVhYjM4Y3AtNTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODEKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWVkNWQ0M2U4cC00OSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3AzCisgIH0sCisgIHsgLy8gRW50cnkgOTgyCisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0OWVkNWQ0M2U4cC00OSwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwMworICB9LAorICB7IC8vIEVudHJ5IDk4MworICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDYwZjUyZjlwLTUxLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODQKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDYwZjUyZjlwLTUxLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAzCisgIH0sCisgIHsgLy8gRW50cnkgOTg1CisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2YzhlMTI5YzBhcC01MCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXAzCisgIH0sCisgIHsgLy8gRW50cnkgOTg2CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmM4ZTEyOWMwYXAtNTAsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODcKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0YTcyNDEyOGI0cC00OCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTg4CisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0YTcyNDEyOGI0cC00OCwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwNAorICB9LAorICB7IC8vIEVudHJ5IDk4OQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MGI2ZGIwMzNwLTUwLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTAKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MGI2ZGIwMzNwLTUwLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTkxCisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2Y2JlYjIzZTAzcC00OSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTkyCisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmNiZWIyM2UwM3AtNDksCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTMKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0Yzg1ZDBiYmUzcC00NywKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A1CisgIH0sCisgIHsgLy8gRW50cnkgOTk0CisgICAgMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA0Yzg1ZDBiYmUzcC00NywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTdwNQorICB9LAorICB7IC8vIEVudHJ5IDk5NQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MjBlNzI1MWFwLTQ5LAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTYKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MjBlNzI1MWFwLTQ5LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA1CisgIH0sCisgIHsgLy8gRW50cnkgOTk3CisgICAgMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY2ZDgxMzBjNWU3cC00OCwKKyAgICAweDEuOTIxZmI1NDQ0MmQxOXA1CisgIH0sCisgIHsgLy8gRW50cnkgOTk4CisgICAgLTB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNmQ4MTMwYzVlN3AtNDgsCisgICAgLTB4MS45MjFmYjU0NDQyZDE5cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTkKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA1NGQ0MGYwOGEwcC00NiwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A2CisgIH0sCisgIHsgLy8gRW50cnkgMTAwMAorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNTRkNDBmMDhhMHAtNDYsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAxCisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjc3NmNjZjhiN3AtNDgsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNgorICB9LAorICB7IC8vIEVudHJ5IDEwMDIKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3NzZjY2Y4YjdwLTQ4LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTAwMworICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmNzA4YjJhZTU3NnAtNDcsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwNgorICB9LAorICB7IC8vIEVudHJ5IDEwMDQKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY3MDhiMmFlNTc2cC00NywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNgorICB9LAorICB7IC8vIEVudHJ5IDEwMDUKKyAgICAtMHgxLjQ2OTg5OGNjNTE3MDFiODM5YTI1MjA3NjBkMDgzYjk3cC00NSwKKyAgICAweDEuOTIxZmI1NDQ0MmQxN3A3CisgIH0sCisgIHsgLy8gRW50cnkgMTAwNgorICAgIDB4MS40Njk4OThjYzUxNzAxYjgzOWEyNTIwNzYwZDA4M2I5N3AtNDUsCisgICAgLTB4MS45MjFmYjU0NDQyZDE3cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA3CisgICAgLTB4MS4xYTYyNjMzMTQ1YzA2ZTBlNjg5NDgxMjhjZTY0NDcyYnAtNDcsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwNworICB9LAorICB7IC8vIEVudHJ5IDEwMDgKKyAgICAweDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI4Y2U2NDQ3MmJwLTQ3LAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHA3CisgIH0sCisgIHsgLy8gRW50cnkgMTAwOQorICAgIDB4MS43MmNlY2U2NzVkMWZjOGY4Y2JiNWJmN2NiMzEzNjNiMXAtNDYsCisgICAgMHgxLjkyMWZiNTQ0NDJkMTlwNworICB9LAorICB7IC8vIEVudHJ5IDEwMTAKKyAgICAtMHgxLjcyY2VjZTY3NWQxZmM4ZjhjYmI1YmY3Y2IzMTM2M2IxcC00NiwKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMTlwNworICB9LAorICB7IC8vIEVudHJ5IDEwMTEKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDRkM2M5Y2E2NGY0NTEwY2Y2ZjMxcDAsCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTIKKyAgICAweDEuMDAwMDAwMDAwMDAwNGQzYzljYTY0ZjQ1MTBjZjZmMzFwMCwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDFwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTMKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDBkM2M5Y2E2NGY0NTA1ODA0ODA4cDAsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTQKKyAgICAweDEuMDAwMDAwMDAwMDAwMGQzYzljYTY0ZjQ1MDU4MDQ4MDhwMCwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDJwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTUKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjlhNzkzOTRjOWU4YTE0NjI0MWJkcC0xLAorICAgIDB4MS4yZDk3YzdmMzMyMWQzcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE2CisgICAgMHgxLmZmZmZmZmZmZmZmZjlhNzkzOTRjOWU4YTE0NjI0MWJkcC0xLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkM3AxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxNworICAgIDB4MS5mZmZmZmZmZmZmZmY1M2UwYTA4MDRkMWEwYmJjNGFiM3AtMSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAxOAorICAgIC0weDEuZmZmZmZmZmZmZmZmNTNlMGEwODA0ZDFhMGJiYzRhYjNwLTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVkcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE5CisgICAgMHgxLmZmZmZmZmZmZmZmZmQzZTBhMDgwNGQxOWYwYjQ3MmQzcC0xLAorICAgIDB4MS5mNmE3YTI5NTUzODVlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIwCisgICAgLTB4MS5mZmZmZmZmZmZmZmZkM2UwYTA4MDRkMTlmMGI0NzJkM3AtMSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWVwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMjEKKyAgICAweDEuMDAwMDAwMDAwMDAwMjlmMDUwNDAyNjhjZmFkNjRkNzlwMCwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAyMgorICAgIC0weDEuMDAwMDAwMDAwMDAwMjlmMDUwNDAyNjhjZmFkNjRkNzlwMCwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWZwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMjMKKyAgICAweDEuYTg0MTAwODcyNjJlM2Y0MTg1OWZhNzM1NjdmOTI0NGRwNDksCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjQKKyAgICAtMHgxLmE4NDEwMDg3MjYyZTNmNDE4NTlmYTczNTY3ZjkyNDRkcDQ5LAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAyNQorICAgIDB4MS4zNTcwZWZkNzY4OTIzNDA4MjVlMDEyNDM5MzU1NDY5N3A1MiwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAyNgorICAgIC0weDEuMzU3MGVmZDc2ODkyMzQwODI1ZTAxMjQzOTM1NTQ2OTdwNTIsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI3CisgICAgLTB4MS40MmMwZDY0ZDVkZTUxNzhhZmUwNjQ1MmExYTFiODY2N3A1MCwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkM3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTAyOAorICAgIDB4MS40MmMwZDY0ZDVkZTUxNzhhZmUwNjQ1MmExYTFiODY2N3A1MCwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDNwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjkKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDllZTJjMmQ5NjNhMTNkNTdlYzIwcDAsCisgICAgMHgxLjVmZGJiZTliYmE3NzRwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzAKKyAgICAweDEuMDAwMDAwMDAwMDAwOWVlMmMyZDk2M2ExM2Q1N2VjMjBwMCwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzRwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzEKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFlZTJjMmQ5NjNhMTBkZTY4YWI0cDAsCisgICAgMHgxLjVmZGJiZTliYmE3NzVwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzIKKyAgICAweDEuMDAwMDAwMDAwMDAwMWVlMmMyZDk2M2ExMGRlNjhhYjRwMCwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzVwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzMKKyAgICAtMHgxLmZmZmZmZmZmZmZmZjNkYzU4NWIyYzc0MjNjZWE1MjhlcC0xLAorICAgIDB4MS41ZmRiYmU5YmJhNzc2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM0CisgICAgMHgxLmZmZmZmZmZmZmZmZjNkYzU4NWIyYzc0MjNjZWE1MjhlcC0xLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzNQorICAgIDB4MS5mZmZmZmZmZmZmZmViMDk0NTQxYTI0NjI0ZWVhYjBlMXAtMSwKKyAgICAweDEuYzQ2M2FiZWNjYjJiYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAzNgorICAgIC0weDEuZmZmZmZmZmZmZmZlYjA5NDU0MWEyNDYyNGVlYWIwZTFwLTEsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM3CisgICAgMHgxLmZmZmZmZmZmZmZmZmIwOTQ1NDFhMjQ2MWU3MzRkYWVlcC0xLAorICAgIDB4MS5jNDYzYWJlY2NiMmJicDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM4CisgICAgLTB4MS5mZmZmZmZmZmZmZmZiMDk0NTQxYTI0NjFlNzM0ZGFlZXAtMSwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmJwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMzkKKyAgICAweDEuMDAwMDAwMDAwMDAwNTg0YTJhMGQxMjMwZmZiZjgyN2RwMCwKKyAgICAweDEuYzQ2M2FiZWNjYjJiY3AyCisgIH0sCisgIHsgLy8gRW50cnkgMTA0MAorICAgIC0weDEuMDAwMDAwMDAwMDAwNTg0YTJhMGQxMjMwZmZiZjgyN2RwMCwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmNwMgorICB9LAorICB7IC8vIEVudHJ5IDEwNDEKKyAgICAweDEuN2NjMDgwZjg5NTg1NjdmMDVjNDBhYzVmNmQzMTBkZThwNDksCisgICAgMHgxLmY2YTdhMjk1NTM4NWRwMgorICB9LAorICB7IC8vIEVudHJ5IDEwNDIKKyAgICAtMHgxLjdjYzA4MGY4OTU4NTY3ZjA1YzQwYWM1ZjZkMzEwZGU4cDQ5LAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTA0MworICAgIDB4MS43MzU0NTMwMjdkN2MzZTcwMmQ3MzQ5MWRlMzY5NTM2ZnA1MSwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTA0NAorICAgIC0weDEuNzM1NDUzMDI3ZDdjM2U3MDJkNzM0OTFkZTM2OTUzNmZwNTEsCisgICAgLTB4MS5mNmE3YTI5NTUzODVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ1CisgICAgLTB4MS44NmFhNGEzYTEyN2EzYWRkOWE4ZTc2OTkzNzMzYjRhN3A1MCwKKyAgICAweDEuZjZhN2EyOTU1Mzg1ZnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTA0NgorICAgIDB4MS44NmFhNGEzYTEyN2EzYWRkOWE4ZTc2OTkzNzMzYjRhN3A1MCwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWZwMgorICB9LAorICB7IC8vIEVudHJ5IDEwNDcKKyAgICAtMHgxLjAwMDAwMDAwMDAwMWIwODhlOTBjNzdmZTgwNTFhN2RhcDAsCisgICAgMHgxLjE0NzVjYzllZWRlZmZwMworICB9LAorICB7IC8vIEVudHJ5IDEwNDgKKyAgICAweDEuMDAwMDAwMDAwMDAxYjA4OGU5MGM3N2ZlODA1MWE3ZGFwMCwKKyAgICAtMHgxLjE0NzVjYzllZWRlZmZwMworICB9LAorICB7IC8vIEVudHJ5IDEwNDkKKyAgICAtMHgxLjAwMDAwMDAwMDAwMGIwODhlOTBjNzdmZDRmYzhiZWNlcDAsCisgICAgMHgxLjE0NzVjYzllZWRmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUwCisgICAgMHgxLjAwMDAwMDAwMDAwMGIwODhlOTBjNzdmZDRmYzhiZWNlcDAsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA1MQorICAgIC0weDEuZmZmZmZmZmZmZmZmNjExMWQyMThlZmZhM2U3ZmFiODNwLTEsCisgICAgMHgxLjE0NzVjYzllZWRmMDFwMworICB9LAorICB7IC8vIEVudHJ5IDEwNTIKKyAgICAweDEuZmZmZmZmZmZmZmZmNjExMWQyMThlZmZhM2U3ZmFiODNwLTEsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZjAxcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUzCisgICAgLTB4MS4zNGYyNzI5OTNkMTQxNGEyYjM5YmQ4Mzc3NjRjMTYwOHAtNDksCisgICAgMHgxLjJkOTdjN2YzMzIxZDFwMworICB9LAorICB7IC8vIEVudHJ5IDEwNTQKKyAgICAweDEuMzRmMjcyOTkzZDE0MTRhMmIzOWJkODM3NzY0YzE2MDhwLTQ5LAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA1NQorICAgIC0weDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhODdlYTU4MTFwLTUyLAorICAgIDB4MS4yZDk3YzdmMzMyMWQycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU2CisgICAgMHgxLmE3OTM5NGM5ZThhMGE1MTU5Y2RlYzFiYTg3ZWE1ODExcC01MiwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDJwMworICB9LAorICB7IC8vIEVudHJ5IDEwNTcKKyAgICAweDEuOTYxYjFhY2Q4NWQ3ZDZiYTk4Yzg0ZjkxNzNiMDhkNmZwLTUwLAorICAgIDB4MS4yZDk3YzdmMzMyMWQzcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU4CisgICAgLTB4MS45NjFiMWFjZDg1ZDdkNmJhOThjODRmOTE3M2IwOGQ2ZnAtNTAsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQzcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU5CisgICAgMHgxLmZmZmZmZmZmZmZmYzhkNDgwN2IzZmJhY2NjMzgzMTRicC0xLAorICAgIDB4MS40NmI5YzM0Nzc2NGEycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYwCisgICAgLTB4MS5mZmZmZmZmZmZmZmM4ZDQ4MDdiM2ZiYWNjYzM4MzE0YnAtMSwKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTJwMworICB9LAorICB7IC8vIEVudHJ5IDEwNjEKKyAgICAweDEuZmZmZmZmZmZmZmZlOGQ0ODA3YjNmYmFhNTk4MDM4ZmZwLTEsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTNwMworICB9LAorICB7IC8vIEVudHJ5IDEwNjIKKyAgICAtMHgxLmZmZmZmZmZmZmZmZThkNDgwN2IzZmJhYTU5ODAzOGZmcC0xLAorICAgIC0weDEuNDZiOWMzNDc3NjRhM3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTA2MworICAgIDB4MS4wMDAwMDAwMDAwMDA0NmE0MDNkOWZkZDRmMzY0MjA1OXAwLAorICAgIDB4MS40NmI5YzM0Nzc2NGE0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY0CisgICAgLTB4MS4wMDAwMDAwMDAwMDA0NmE0MDNkOWZkZDRmMzY0MjA1OXAwLAorICAgIC0weDEuNDZiOWMzNDc3NjRhNHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NQorICAgIDB4MS45Yzc4ZWVhNzhiYWE2ZTEzZWNjYzk0YzQyMWM0ZjVhY3A0OCwKKyAgICAweDEuNWZkYmJlOWJiYTc3NHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NgorICAgIC0weDEuOWM3OGVlYTc4YmFhNmUxM2VjY2M5NGM0MjFjNGY1YWNwNDgsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY3CisgICAgMHgxLjA5M2MzYjRhZWJlYjA4MDZmYmU0YTFmMGM2NjBiYTNicDUxLAorICAgIDB4MS41ZmRiYmU5YmJhNzc1cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY4CisgICAgLTB4MS4wOTNjM2I0YWViZWIwODA2ZmJlNGExZjBjNjYwYmEzYnA1MSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzVwMworICB9LAorICB7IC8vIEVudHJ5IDEwNjkKKyAgICAtMHgxLjUxNmFjOTYxNDIxODU1ZmI3NTlmYzJmYWNiNGU5ZjVicDQ5LAorICAgIDB4MS41ZmRiYmU5YmJhNzc2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcwCisgICAgMHgxLjUxNmFjOTYxNDIxODU1ZmI3NTlmYzJmYWNiNGU5ZjVicDQ5LAorICAgIC0weDEuNWZkYmJlOWJiYTc3NnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MQorICAgIC0weDEuMDAwMDAwMDAwMDAxYzIyZjBmM2Y4YzVhYTVhMDFkYTNwMCwKKyAgICAweDEuNzhmZGI5ZWZmZWE0NXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MgorICAgIDB4MS4wMDAwMDAwMDAwMDFjMjJmMGYzZjhjNWFhNWEwMWRhM3AwLAorICAgIC0weDEuNzhmZGI5ZWZmZWE0NXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MworICAgIC0weDEuMDAwMDAwMDAwMDAwYzIyZjBmM2Y4YzU5NjM3MTBlNjRwMCwKKyAgICAweDEuNzhmZGI5ZWZmZWE0NnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA3NAorICAgIDB4MS4wMDAwMDAwMDAwMDBjMjJmMGYzZjhjNTk2MzcxMGU2NHAwLAorICAgIC0weDEuNzhmZGI5ZWZmZWE0NnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA3NQorICAgIC0weDEuZmZmZmZmZmZmZmZmODQ1ZTFlN2YxOGIyNDI4M2ZlNDlwLTEsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDdwMworICB9LAorICB7IC8vIEVudHJ5IDEwNzYKKyAgICAweDEuZmZmZmZmZmZmZmZmODQ1ZTFlN2YxOGIyNDI4M2ZlNDlwLTEsCisgICAgLTB4MS43OGZkYjllZmZlYTQ3cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc3CisgICAgMHgxLmZmZmZmZmZmZmZmYzY5ZmJiYjRkZDJmNGZjODhmZmExcC0xLAorICAgIDB4MS5hYjQxYjA5ODg2ZmU4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc4CisgICAgLTB4MS5mZmZmZmZmZmZmZmM2OWZiYmI0ZGQyZjRmYzg4ZmZhMXAtMSwKKyAgICAtMHgxLmFiNDFiMDk4ODZmZThwMworICB9LAorICB7IC8vIEVudHJ5IDEwNzkKKyAgICAweDEuZmZmZmZmZmZmZmZlNjlmYmJiNGRkMmYyNjY4NGJhZWVwLTEsCisgICAgMHgxLmFiNDFiMDk4ODZmZTlwMworICB9LAorICB7IC8vIEVudHJ5IDEwODAKKyAgICAtMHgxLmZmZmZmZmZmZmZmZTY5ZmJiYjRkZDJmMjY2ODRiYWVlcC0xLAorICAgIC0weDEuYWI0MWIwOTg4NmZlOXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA4MQorICAgIDB4MS4wMDAwMDAwMDAwMDAzNGZkZGRhNmU5NzhlODQwM2IxZXAwLAorICAgIDB4MS5hYjQxYjA5ODg2ZmVhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgyCisgICAgLTB4MS4wMDAwMDAwMDAwMDAzNGZkZGRhNmU5NzhlODQwM2IxZXAwLAorICAgIC0weDEuYWI0MWIwOTg4NmZlYXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA4MworICAgIDB4MS44NmM0ZTMzM2IzYzlmNjI3Mzg5NmFiYTIwMTc2NzkxMnA0OCwKKyAgICAweDEuYzQ2M2FiZWNjYjJiYXAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA4NAorICAgIC0weDEuODZjNGUzMzNiM2M5ZjYyNzM4OTZhYmEyMDE3Njc5MTJwNDgsCisgICAgLTB4MS5jNDYzYWJlY2NiMmJhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg1CisgICAgMHgxLjljOTY5NTFmMzYxODQ1NjAzMjgwMTg1YTE2ZDYwMjZjcDUwLAorICAgIDB4MS5jNDYzYWJlY2NiMmJicDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg2CisgICAgLTB4MS45Yzk2OTUxZjM2MTg0NTYwMzI4MDE4NWExNmQ2MDI2Y3A1MCwKKyAgICAtMHgxLmM0NjNhYmVjY2IyYmJwMworICB9LAorICB7IC8vIEVudHJ5IDEwODcKKyAgICAtMHgxLjczMjQ0ZDM2OWUwYjZlYjJmNWQ3M2NjYTczNDRlODdhcDQ5LAorICAgIDB4MS5jNDYzYWJlY2NiMmJjcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg4CisgICAgMHgxLjczMjQ0ZDM2OWUwYjZlYjJmNWQ3M2NjYTczNDRlODdhcDQ5LAorICAgIC0weDEuYzQ2M2FiZWNjYjJiY3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTA4OQorICAgIC0weDEuMDAwMDAwMDAwMDAxZDNkNTM1NzJhMGI2Y2MyNjEwNTVwMCwKKyAgICAweDEuZGQ4NWE3NDEwZjU4YnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5MAorICAgIDB4MS4wMDAwMDAwMDAwMDFkM2Q1MzU3MmEwYjZjYzI2MTA1NXAwLAorICAgIC0weDEuZGQ4NWE3NDEwZjU4YnAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5MQorICAgIC0weDEuMDAwMDAwMDAwMDAwZDNkNTM1NzJhMGI1Nzg1MGRhZTJwMCwKKyAgICAweDEuZGQ4NWE3NDEwZjU4Y3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5MgorICAgIDB4MS4wMDAwMDAwMDAwMDBkM2Q1MzU3MmEwYjU3ODUwZGFlMnAwLAorICAgIC0weDEuZGQ4NWE3NDEwZjU4Y3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5MworICAgIC0weDEuZmZmZmZmZmZmZmZmYTdhYTZhZTU0MTZhNDhmNzRhZGZwLTEsCisgICAgMHgxLmRkODVhNzQxMGY1OGRwMworICB9LAorICB7IC8vIEVudHJ5IDEwOTQKKyAgICAweDEuZmZmZmZmZmZmZmZmYTdhYTZhZTU0MTZhNDhmNzRhZGZwLTEsCisgICAgLTB4MS5kZDg1YTc0MTBmNThkcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk1CisgICAgLTB4MS41ODNlYmVmZjY1Y2MyMjY0ODBhZTY4NWM2NTM1MjMyNXAtNDksCisgICAgMHgxLmY2YTdhMjk1NTM4NWRwMworICB9LAorICB7IC8vIEVudHJ5IDEwOTYKKyAgICAweDEuNTgzZWJlZmY2NWNjMjI2NDgwYWU2ODVjNjUzNTIzMjVwLTQ5LAorICAgIC0weDEuZjZhN2EyOTU1Mzg1ZHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA5NworICAgIC0weDEuNjBmYWZiZmQ5NzMwODk5MjAyYjlhMTcwYzhkNTQ1OTFwLTUxLAorICAgIDB4MS5mNmE3YTI5NTUzODVlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk4CisgICAgMHgxLjYwZmFmYmZkOTczMDg5OTIwMmI5YTE3MGM4ZDU0NTkxcC01MSwKKyAgICAtMHgxLmY2YTdhMjk1NTM4NWVwMworICB9LAorICB7IC8vIEVudHJ5IDEwOTkKKyAgICAweDEuNGY4MjgyMDEzNDY3YmIzNmZlYTMyZjQ3YTk1NjQxYmFwLTUwLAorICAgIDB4MS5mNmE3YTI5NTUzODVmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAwCisgICAgLTB4MS40ZjgyODIwMTM0NjdiYjM2ZmVhMzJmNDdhOTU2NDFiYXAtNTAsCisgICAgLTB4MS5mNmE3YTI5NTUzODVmcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAxCisgICAgMHgxLmZmZmZmZmZmZmZmODQ2YWY2ZWU3YWE0OGExZTllOWY3cC0xLAorICAgIDB4MS4wN2U0Y2VmNGNiZDk2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAyCisgICAgLTB4MS5mZmZmZmZmZmZmZjg0NmFmNmVlN2FhNDhhMWU5ZTlmN3AtMSwKKyAgICAtMHgxLjA3ZTRjZWY0Y2JkOTZwNAorICB9LAorICB7IC8vIEVudHJ5IDExMDMKKyAgICAweDEuZmZmZmZmZmZmZmZjNDZhZjZlZTdhYTNkMmY0OGM3YzdwLTEsCisgICAgMHgxLjA3ZTRjZWY0Y2JkOTdwNAorICB9LAorICB7IC8vIEVudHJ5IDExMDQKKyAgICAtMHgxLmZmZmZmZmZmZmZmYzQ2YWY2ZWU3YWEzZDJmNDhjN2M3cC0xLAorICAgIC0weDEuMDdlNGNlZjRjYmQ5N3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTEwNQorICAgIDB4MS4wMDAwMDAwMDAwMDAyMzU3Yjc3M2Q1MWNkZTUzZDJjYnAwLAorICAgIDB4MS4wN2U0Y2VmNGNiZDk4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA2CisgICAgLTB4MS4wMDAwMDAwMDAwMDAyMzU3Yjc3M2Q1MWNkZTUzZDJjYnAwLAorICAgIC0weDEuMDdlNGNlZjRjYmQ5OHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEwNworICAgIDB4MS4yZjA4NDIzODllNWJjMDE0ZDBmYmU4NDNjY2E2ZGRmM3A0NywKKyAgICAweDEuMTQ3NWNjOWVlZGVmZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEwOAorICAgIC0weDEuMmYwODQyMzg5ZTViYzAxNGQwZmJlODQzY2NhNmRkZjNwNDcsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZWZmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA5CisgICAgMHgxLjczM2M0ZThlZjljNTBjYjU5MjlmNmJiNjc0YmVjNjdmcDQ4LAorICAgIDB4MS4xNDc1Y2M5ZWVkZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTExMAorICAgIC0weDEuNzMzYzRlOGVmOWM1MGNiNTkyOWY2YmI2NzRiZWM2N2ZwNDgsCisgICAgLTB4MS4xNDc1Y2M5ZWVkZnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTExMQorICAgIC0weDEuOWM1YjRjNzI4OTg5ODkxZGZiODcxMGFkZjM4Nzg0M2NwNDksCisgICAgMHgxLjE0NzVjYzllZWRmMDFwNAorICB9LAorICB7IC8vIEVudHJ5IDExMTIKKyAgICAweDEuOWM1YjRjNzI4OTg5ODkxZGZiODcxMGFkZjM4Nzg0M2NwNDksCisgICAgLTB4MS4xNDc1Y2M5ZWVkZjAxcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTEzCisgICAgLTB4MS4wMDAwMDAwMDAwMDJlNTdiNWJhNWI1MTU1OTVlZGI5NHAwLAorICAgIDB4MS4yMTA2Y2E0OTEwMDY4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE0CisgICAgMHgxLjAwMDAwMDAwMDAwMmU1N2I1YmE1YjUxNTU5NWVkYjk0cDAsCisgICAgLTB4MS4yMTA2Y2E0OTEwMDY4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE1CisgICAgLTB4MS4wMDAwMDAwMDAwMDBlNTdiNWJhNWI1MTE4ZTY4MjQ0OXAwLAorICAgIDB4MS4yMTA2Y2E0OTEwMDY5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE2CisgICAgMHgxLjAwMDAwMDAwMDAwMGU1N2I1YmE1YjUxMThlNjgyNDQ5cDAsCisgICAgLTB4MS4yMTA2Y2E0OTEwMDY5cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTE3CisgICAgLTB4MS5mZmZmZmZmZmZmZmRjYWY2Yjc0YjZhMjM4NmUyZDlmYnAtMSwKKyAgICAweDEuMjEwNmNhNDkxMDA2YXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTExOAorICAgIDB4MS5mZmZmZmZmZmZmZmRjYWY2Yjc0YjZhMjM4NmUyZDlmYnAtMSwKKyAgICAtMHgxLjIxMDZjYTQ5MTAwNmFwNAorICB9LAorICB7IC8vIEVudHJ5IDExMTkKKyAgICAtMHgxLjM0ZjI3Mjk5M2QxNDE0YTJiMzliZDgzN2U2Yzk2YWYwcC00OCwKKyAgICAweDEuMmQ5N2M3ZjMzMjFkMXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEyMAorICAgIDB4MS4zNGYyNzI5OTNkMTQxNGEyYjM5YmQ4MzdlNmM5NmFmMHAtNDgsCisgICAgLTB4MS4yZDk3YzdmMzMyMWQxcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTIxCisgICAgLTB4MS5hNzkzOTRjOWU4YTBhNTE1OWNkZWMxYmE4YzcxZjZiYXAtNTEsCisgICAgMHgxLjJkOTdjN2YzMzIxZDJwNAorICB9LAorICB7IC8vIEVudHJ5IDExMjIKKyAgICAweDEuYTc5Mzk0YzllOGEwYTUxNTljZGVjMWJhOGM3MWY2YmFwLTUxLAorICAgIC0weDEuMmQ5N2M3ZjMzMjFkMnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEyMworICAgIDB4MS45NjFiMWFjZDg1ZDdkNmJhOThjODRmOTFiMzkwMTAxZnAtNDksCisgICAgMHgxLjJkOTdjN2YzMzIxZDNwNAorICB9LAorICB7IC8vIEVudHJ5IDExMjQKKyAgICAtMHgxLjk2MWIxYWNkODVkN2Q2YmE5OGM4NGY5MWIzOTAxMDFmcC00OSwKKyAgICAtMHgxLjJkOTdjN2YzMzIxZDNwNAorICB9LAorICB7IC8vIEVudHJ5IDExMjUKKyAgICAweDEuZmZmZmZmZmZmZmY4MjM2MzIyODE4MTkxMWRiMTQ0YmFwLTEsCisgICAgMHgxLjNhMjhjNTlkNTQzMzlwNAorICB9LAorICB7IC8vIEVudHJ5IDExMjYKKyAgICAtMHgxLmZmZmZmZmZmZmZmODIzNjMyMjgxODE5MTFkYjE0NGJhcC0xLAorICAgIC0weDEuM2EyOGM1OWQ1NDMzOXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEyNworICAgIDB4MS5mZmZmZmZmZmZmZmMyMzYzMjI4MTgxODU2NDc3ODliZHAtMSwKKyAgICAweDEuM2EyOGM1OWQ1NDMzYXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTEyOAorICAgIC0weDEuZmZmZmZmZmZmZmZjMjM2MzIyODE4MTg1NjQ3Nzg5YmRwLTEsCisgICAgLTB4MS4zYTI4YzU5ZDU0MzNhcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTI5CisgICAgMHgxLjAwMDAwMDAwMDAwMDExYjE5MTQwYzBjMGQ1OWVlNzYwcDAsCisgICAgMHgxLjNhMjhjNTlkNTQzM2JwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzAKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDExYjE5MTQwYzBjMGQ1OWVlNzYwcDAsCisgICAgLTB4MS4zYTI4YzU5ZDU0MzNicDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMxCisgICAgMHgxLjI4ZjkzNDMxNWU1ZWI5YjQ1YTYwM2E1Zjc4OGRlMTMxcDQ3LAorICAgIDB4MS40NmI5YzM0Nzc2NGEycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMyCisgICAgLTB4MS4yOGY5MzQzMTVlNWViOWI0NWE2MDNhNWY3ODhkZTEzMXA0NywKKyAgICAtMHgxLjQ2YjljMzQ3NzY0YTJwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzMKKyAgICAweDEuNjE4ZmRiN2YyMWMxM2MyMzZhNGM0NTUxZmYxMzlmNWRwNDgsCisgICAgMHgxLjQ2YjljMzQ3NzY0YTNwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzQKKyAgICAtMHgxLjYxOGZkYjdmMjFjMTNjMjM2YTRjNDU1MWZmMTM5ZjVkcDQ4LAorICAgIC0weDEuNDZiOWMzNDc3NjRhM3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTEzNQorICAgIC0weDEuY2ZkZTYxMjE4YWI5ZTc5ZmZlOGYwNDZhZmRmMDBkZTNwNDksCisgICAgMHgxLjQ2YjljMzQ3NzY0YTRwNAorICB9LAorICB7IC8vIEVudHJ5IDExMzYKKyAgICAweDEuY2ZkZTYxMjE4YWI5ZTc5ZmZlOGYwNDZhZmRmMDBkZTNwNDksCisgICAgLTB4MS40NmI5YzM0Nzc2NGE0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM3CisgICAgLTB4MS4wMDAwMDAwMDAwMDJmNzIxODFkOGM5NzE5M2Y5ZWU0OXAwLAorICAgIDB4MS41MzRhYzBmMTk4NjBicDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM4CisgICAgMHgxLjAwMDAwMDAwMDAwMmY3MjE4MWQ4Yzk3MTkzZjllZTQ5cDAsCisgICAgLTB4MS41MzRhYzBmMTk4NjBicDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTM5CisgICAgLTB4MS4wMDAwMDAwMDAwMDBmNzIxODFkOGM5NmRhNWI2ZWE5OHAwLAorICAgIDB4MS41MzRhYzBmMTk4NjBjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQwCisgICAgMHgxLjAwMDAwMDAwMDAwMGY3MjE4MWQ4Yzk2ZGE1YjZlYTk4cDAsCisgICAgLTB4MS41MzRhYzBmMTk4NjBjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQxCisgICAgLTB4MS5mZmZmZmZmZmZmZmRlZTQzMDNiMTkyZGI2ZWU3Y2RjZHAtMSwKKyAgICAweDEuNTM0YWMwZjE5ODYwZHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE0MgorICAgIDB4MS5mZmZmZmZmZmZmZmRlZTQzMDNiMTkyZGI2ZWU3Y2RjZHAtMSwKKyAgICAtMHgxLjUzNGFjMGYxOTg2MGRwNAorICB9LAorICB7IC8vIEVudHJ5IDExNDMKKyAgICAtMHgxLjNkYzU4NWIyYzc0MjE4MTMyNmUwN2M0MTJjMjRhMDUycC00OCwKKyAgICAweDEuNWZkYmJlOWJiYTc3NHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE0NAorICAgIDB4MS4zZGM1ODViMmM3NDIxODEzMjZlMDdjNDEyYzI0YTA1MnAtNDgsCisgICAgLTB4MS41ZmRiYmU5YmJhNzc0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQ1CisgICAgLTB4MS5lZTJjMmQ5NjNhMTBjMDk5MzcwM2UyMDQ1MTEwNTk1ZXAtNTEsCisgICAgMHgxLjVmZGJiZTliYmE3NzVwNAorICB9LAorICB7IC8vIEVudHJ5IDExNDYKKyAgICAweDEuZWUyYzJkOTYzYTEwYzA5OTM3MDNlMjA0NTExMDU5NWVwLTUxLAorICAgIC0weDEuNWZkYmJlOWJiYTc3NXA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE0NworICAgIDB4MS44NDc0ZjQ5YTcxN2JjZmQ5YjIzZjA3N2YzOGFhZmQyYXAtNDksCisgICAgMHgxLjVmZGJiZTliYmE3NzZwNAorICB9LAorICB7IC8vIEVudHJ5IDExNDgKKyAgICAtMHgxLjg0NzRmNDlhNzE3YmNmZDliMjNmMDc3ZjM4YWFmZDJhcC00OSwKKyAgICAtMHgxLjVmZGJiZTliYmE3NzZwNAorICB9LAorICB7IC8vIEVudHJ5IDExNDkKKyAgICAweDEuZmZmZmZmZmZmZmY4MDAxNmQ2MWI1OGQ5OWJlNzk5NGVwLTEsCisgICAgMHgxLjZjNmNiYzQ1ZGM4ZGNwNAorICB9LAorICB7IC8vIEVudHJ5IDExNTAKKyAgICAtMHgxLmZmZmZmZmZmZmZmODAwMTZkNjFiNThkOTliZTc5OTRlcC0xLAorICAgIC0weDEuNmM2Y2JjNDVkYzhkY3A0CisgIH0sCisgIHsgLy8gRW50cnkgMTE1MQorICAgIDB4MS5mZmZmZmZmZmZmZmMwMDE2ZDYxYjU4Y2Q5YzE1NDU4NXAtMSwKKyAgICAweDEuNmM2Y2JjNDVkYzhkZHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE1MgorICAgIC0weDEuZmZmZmZmZmZmZmZjMDAxNmQ2MWI1OGNkOWMxNTQ1ODVwLTEsCisgICAgLTB4MS42YzZjYmM0NWRjOGRkcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTUzCisgICAgMHgxLjAwMDAwMDAwMDAwMDAwMGI2YjBkYWM2NGNlMjE3OGRkcDAsCisgICAgMHgxLjZjNmNiYzQ1ZGM4ZGVwNAorICB9LAorICB7IC8vIEVudHJ5IDExNTQKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDAwMGI2YjBkYWM2NGNlMjE3OGRkcDAsCisgICAgLTB4MS42YzZjYmM0NWRjOGRlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTU1CisgICAgMHgxLjIzMjZmNGU4ZjJiYjE4MGU1YmYwNDE3ZDc1ZWE1ZDllcDQ3LAorICAgIDB4MS43OGZkYjllZmZlYTQ1cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTU2CisgICAgLTB4MS4yMzI2ZjRlOGYyYmIxODBlNWJmMDQxN2Q3NWVhNWQ5ZXA0NywKKyAgICAtMHgxLjc4ZmRiOWVmZmVhNDVwNAorICB9LAorICB7IC8vIEVudHJ5IDExNTcKKyAgICAweDEuNTE3ZWEwODcwOGJhNjlkYTMzM2E4Yzg1ZjNiYzY2MDlwNDgsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDZwNAorICB9LAorICB7IC8vIEVudHJ5IDExNTgKKyAgICAtMHgxLjUxN2VhMDg3MDhiYTY5ZGEzMzNhOGM4NWYzYmM2NjA5cDQ4LAorICAgIC0weDEuNzhmZGI5ZWZmZWE0NnA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE1OQorICAgIC0weDEuMDkwYjNkNTE2MTc4NWFjMmQzMTY2M2Y3ZTVkNmJlZDRwNTAsCisgICAgMHgxLjc4ZmRiOWVmZmVhNDdwNAorICB9LAorICB7IC8vIEVudHJ5IDExNjAKKyAgICAweDEuMDkwYjNkNTE2MTc4NWFjMmQzMTY2M2Y3ZTVkNmJlZDRwNTAsCisgICAgLTB4MS43OGZkYjllZmZlYTQ3cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYxCisgICAgLTB4MS4wMDAwMDAwMDAwMDMwOGM3YTgwYmRkY2RjZmNjN2RlN3AwLAorICAgIDB4MS44NThlYjc5YTIwYmFlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYyCisgICAgMHgxLjAwMDAwMDAwMDAwMzA4YzdhODBiZGRjZGNmY2M3ZGU3cDAsCisgICAgLTB4MS44NThlYjc5YTIwYmFlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYzCisgICAgLTB4MS4wMDAwMDAwMDAwMDEwOGM3YTgwYmRkYzliZTNkMmRjZnAwLAorICAgIDB4MS44NThlYjc5YTIwYmFmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY0CisgICAgMHgxLjAwMDAwMDAwMDAwMTA4YzdhODBiZGRjOWJlM2QyZGNmcDAsCisgICAgLTB4MS44NThlYjc5YTIwYmFmcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY1CisgICAgLTB4MS5mZmZmZmZmZmZmZmUxMThmNTAxN2JiOTM1OTViYmI2ZnAtMSwKKyAgICAweDEuODU4ZWI3OWEyMGJiMHA0CisgIH0sCisgIHsgLy8gRW50cnkgMTE2NgorICAgIDB4MS5mZmZmZmZmZmZmZmUxMThmNTAxN2JiOTM1OTViYmI2ZnAtMSwKKyAgICAtMHgxLjg1OGViNzlhMjBiYjBwNAorICB9LAorICB7IC8vIEVudHJ5IDExNjcKKyAgICAtMHgxLmFmMDc5MjAwMWY4NTYzMzVhMzgwMTBhNmE2ODMyZTZicDIsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTY4CisgICAgMHgxLmFmMDc5MjAwMWY4NTYzMzVhMzgwMTBhNmE2ODMyZTZicDIsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDYyCisgIH0sCisgIHsgLy8gRW50cnkgMTE2OQorICAgIDB4MS41MmY1MGU3NTc5NDFjYmZmNWI3YzJlMDZhMWFiN2U5ZHA2LAorICAgIDB4MS4wcDYzCisgIH0sCisgIHsgLy8gRW50cnkgMTE3MAorICAgIC0weDEuNTJmNTBlNzU3OTQxY2JmZjViN2MyZTA2YTFhYjdlOWRwNiwKKyAgICAtMHgxLjBwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcxCisgICAgMHgxLjc1NzA2NjdkMDMyZWNhOGVmNzgwYWQ1OWQzZTI3ZTRicDEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTcyCisgICAgLTB4MS43NTcwNjY3ZDAzMmVjYThlZjc4MGFkNTlkM2UyN2U0YnAxLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXA2MworICB9LAorICB7IC8vIEVudHJ5IDExNzMKKyAgICAtMHgxLjJlOGZjMjQ4ZTdiODU0ZmU1YzJkYzlkMjg3ZGUwY2QzcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTc0CisgICAgMHgxLjJlOGZjMjQ4ZTdiODU0ZmU1YzJkYzlkMjg3ZGUwY2QzcDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDI2CisgIH0sCisgIHsgLy8gRW50cnkgMTE3NQorICAgIC0weDEuMmU4ZmMxYWY4MWQ4YmFhODg5OWEzMzI1MjAwYzBkY2JwMCwKKyAgICAweDEuMHAyNworICB9LAorICB7IC8vIEVudHJ5IDExNzYKKyAgICAweDEuMmU4ZmMxYWY4MWQ4YmFhODg5OWEzMzI1MjAwYzBkY2JwMCwKKyAgICAtMHgxLjBwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTc3CisgICAgLTB4MS4yZThmYzA3Y2I2MWE5NWVmNWU1ZDhkNjQxNjY1MmM3YXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDI3CisgIH0sCisgIHsgLy8gRW50cnkgMTE3OAorICAgIDB4MS4yZThmYzA3Y2I2MWE5NWVmNWU1ZDhkNjQxNjY1MmM3YXAwLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAyNworICB9LAorICB7IC8vIEVudHJ5IDExNzkKKyAgICAtMHgxLjNlYTI4Mjg2MGU3ZmJlMTc2NTYwN2MyZmRiMzI0ODFmcDAsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgwCisgICAgMHgxLjNlYTI4Mjg2MGU3ZmJlMTc2NTYwN2MyZmRiMzI0ODFmcDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTE4MQorICAgIC0weDEuM2VhMjgyNzFhOWJlYTM2ZTc0NGY5Y2U1MzdiYTRiNTlwMCwKKyAgICAweDEuMHAyNAorICB9LAorICB7IC8vIEVudHJ5IDExODIKKyAgICAweDEuM2VhMjgyNzFhOWJlYTM2ZTc0NGY5Y2U1MzdiYTRiNTlwMCwKKyAgICAtMHgxLjBwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgzCisgICAgLTB4MS4zZWEyODI0OGUwM2M3MmRlZjcwZTdlZmI0YzQzZjAzZXAwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTE4NAorICAgIDB4MS4zZWEyODI0OGUwM2M3MmRlZjcwZTdlZmI0YzQzZjAzZXAwLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAyNAorICB9LAorICB7IC8vIEVudHJ5IDExODUKKyAgICAweDEuMjg2NmY5YmU0ZGUwZWMyN2VmYTkwNDlhYjgwYmJkNmNwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTE4NgorICAgIC0weDEuMjg2NmY5YmU0ZGUwZWMyN2VmYTkwNDlhYjgwYmJkNmNwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMQorICB9LAorICB7IC8vIEVudHJ5IDExODcKKyAgICAweDEuMjg2NmY5YmU0ZGUxMzcwZGI5MDc4NjA3MDEyY2IwN2JwMCwKKyAgICAweDEuMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE4OAorICAgIC0weDEuMjg2NmY5YmU0ZGUxMzcwZGI5MDc4NjA3MDEyY2IwN2JwMCwKKyAgICAtMHgxLjBwMgorICB9LAorICB7IC8vIEVudHJ5IDExODkKKyAgICAweDEuMjg2NmY5YmU0ZGUxY2NkOTRiYzQ4OGRmZDQ3ODczYWZwMCwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAyCisgIH0sCisgIHsgLy8gRW50cnkgMTE5MAorICAgIC0weDEuMjg2NmY5YmU0ZGUxY2NkOTRiYzQ4OGRmZDQ3ODczYWZwMCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMgorICB9LAorICB7IC8vIEVudHJ5IDExOTEKKyAgICAtMHgxLjE3YWY2MmUwOTUwZmIxZTcwMWM2NDJlZjg3MzdmNTE2cDEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDExOTIKKyAgICAweDEuMTdhZjYyZTA5NTBmYjFlNzAxYzY0MmVmODczN2Y1MTZwMSwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMAorICB9LAorICB7IC8vIEVudHJ5IDExOTMKKyAgICAtMHgxLjE3YWY2MmUwOTUwZjgzYjUwOTkwODdhYWY2N2FmOWMxcDEsCisgICAgMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDExOTQKKyAgICAweDEuMTdhZjYyZTA5NTBmODNiNTA5OTA4N2FhZjY3YWY5YzFwMSwKKyAgICAtMHgxLjBwMQorICB9LAorICB7IC8vIEVudHJ5IDExOTUKKyAgICAtMHgxLjE3YWY2MmUwOTUwZjI3NTExOTI1MTEyMWZhZGIxN2JhcDEsCisgICAgMHgxLjAwMDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDExOTYKKyAgICAweDEuMTdhZjYyZTA5NTBmMjc1MTE5MjUxMTIxZmFkYjE3YmFwMSwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwMQorICB9LAorICB7IC8vIEVudHJ5IDExOTcKKyAgICAweDEuOGViMjQ1Y2JlZTNhNDAyMzU2MTNlNzU3NTAyMGQzMGRwMCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMQorICB9LAorICB7IC8vIEVudHJ5IDExOTgKKyAgICAtMHgxLjhlYjI0NWNiZWUzYTQwMjM1NjEzZTc1NzUwMjBkMzBkcDAsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTE5OQorICAgIDB4MS44ZWIyNDVjYmVlM2E1YjhhY2M3ZDQxMzIzMTQwYjNiNXAwLAorICAgIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAwCisgICAgLTB4MS44ZWIyNDVjYmVlM2E1YjhhY2M3ZDQxMzIzMTQwYjNiNXAwLAorICAgIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTIwMQorICAgIDB4MS44ZWIyNDVjYmVlM2E5MjU5Yjk0ZmY0ZTdmYjgxMTFlY3AwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAyCisgICAgLTB4MS44ZWIyNDVjYmVlM2E5MjU5Yjk0ZmY0ZTdmYjgxMTFlY3AwLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTIwMworICAgIDB4MS4xN2I0ZjViZjM0NzQ5OWNlNDE4NTVkZWU0MzQ0YmQxZHAtMSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEyMDQKKyAgICAtMHgxLjE3YjRmNWJmMzQ3NDk5Y2U0MTg1NWRlZTQzNDRiZDFkcC0xLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEyMDUKKyAgICAweDEuMTdiNGY1YmYzNDc0YTQzMTc5NjQ4MDc4ODI0NDRjYzhwLTEsCisgICAgMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA2CisgICAgLTB4MS4xN2I0ZjViZjM0NzRhNDMxNzk2NDgwNzg4MjQ0NGNjOHAtMSwKKyAgICAtMHgxLjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjA3CisgICAgMHgxLjE3YjRmNWJmMzQ3NGI4ZjdlOTIyYzU4ZDAwY2I5ZGQycC0xLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTIwOAorICAgIC0weDEuMTdiNGY1YmYzNDc0YjhmN2U5MjJjNThkMDBjYjlkZDJwLTEsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTIwOQorICAgIDB4MS4wNTc4NWE0M2M0YzU1NWRlMGNiMTM3MWYxMGRiMzFhZnAtMiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDEyMTAKKyAgICAtMHgxLjA1Nzg1YTQzYzRjNTU1ZGUwY2IxMzcxZjEwZGIzMWFmcC0yLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMworICB9LAorICB7IC8vIEVudHJ5IDEyMTEKKyAgICAweDEuMDU3ODVhNDNjNGM1NWU2Mzk0MDE4ODk2NWMyOGJkMGZwLTIsCisgICAgMHgxLjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEyCisgICAgLTB4MS4wNTc4NWE0M2M0YzU1ZTYzOTQwMTg4OTY1YzI4YmQwZnAtMiwKKyAgICAtMHgxLjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjEzCisgICAgMHgxLjA1Nzg1YTQzYzRjNTZmNmVhMmEyMmI4NGYyZGRmMDNmcC0yLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTIxNAorICAgIC0weDEuMDU3ODVhNDNjNGM1NmY2ZWEyYTIyYjg0ZjJkZGYwM2ZwLTIsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTIxNQorICAgIDB4MS4wMTU3N2FmMTUxMWE0NWU0MDNkZDYwYzhkODI1OTBkMHAtMywKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEyMTYKKyAgICAtMHgxLjAxNTc3YWYxNTExYTQ1ZTQwM2RkNjBjOGQ4MjU5MGQwcC0zLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEyMTcKKyAgICAweDEuMDE1NzdhZjE1MTFhNGUwNDU5ZjViODcyZDRmZjM0ZmRwLTMsCisgICAgMHgxLjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE4CisgICAgLTB4MS4wMTU3N2FmMTUxMWE0ZTA0NTlmNWI4NzJkNGZmMzRmZHAtMywKKyAgICAtMHgxLjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjE5CisgICAgMHgxLjAxNTc3YWYxNTExYTVlNDUwNjI2NjdjNmNlYjg5ZGM0cC0zLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTIyMAorICAgIC0weDEuMDE1NzdhZjE1MTFhNWU0NTA2MjY2N2M2Y2ViODlkYzRwLTMsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTIyMQorICAgIDB4MS4wMDU1Nzc4NTRkZjAwMDJhOGU2NjA2ZjZjNjE4ZDk4OHAtNCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEyMjIKKyAgICAtMHgxLjAwNTU3Nzg1NGRmMDAwMmE4ZTY2MDZmNmM2MThkOTg4cC00LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEyMjMKKyAgICAweDEuMDA1NTc3ODU0ZGYwMDgzMjkzYmU2MzkwNTdiMGM2ODFwLTQsCisgICAgMHgxLjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI0CisgICAgLTB4MS4wMDU1Nzc4NTRkZjAwODMyOTNiZTYzOTA1N2IwYzY4MXAtNCwKKyAgICAtMHgxLjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjI1CisgICAgMHgxLjAwNTU3Nzg1NGRmMDE4NDI5ZTZmMWNjMzdhZTIyMjc0cC00LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTIyNgorICAgIC0weDEuMDA1NTc3ODU0ZGYwMTg0MjllNmYxY2MzN2FlMjIyNzRwLTQsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTIyNworICAgIDB4MS4wMDE1NTc3N2FlYzA3ZDdiMjI3NDFkMTJlZTUzYTlmY3AtNSwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEyMjgKKyAgICAtMHgxLjAwMTU1Nzc3YWVjMDdkN2IyMjc0MWQxMmVlNTNhOWZjcC01LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEyMjkKKyAgICAweDEuMDAxNTU3NzdhZWMwODU3ZDIyYzk3ZTgwOTg2MDI4OGRwLTUsCisgICAgMHgxLjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMwCisgICAgLTB4MS4wMDE1NTc3N2FlYzA4NTdkMjJjOTdlODA5ODYwMjg4ZHAtNSwKKyAgICAtMHgxLjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMxCisgICAgMHgxLjAwMTU1Nzc3YWVjMDk1ODEyMzc0NDE1YmVjNzk4NWNlcC01LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTIzMgorICAgIC0weDEuMDAxNTU3NzdhZWMwOTU4MTIzNzQ0MTViZWM3OTg1Y2VwLTUsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTIzMworICAgIDB4MS4wMDA1NTU3Nzc4NTQ4MmUxMzVmMGFmZWViZTgwNWFkYnAtNiwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDEyMzQKKyAgICAtMHgxLjAwMDU1NTc3Nzg1NDgyZTEzNWYwYWZlZWJlODA1YWRicC02LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtNworICB9LAorICB7IC8vIEVudHJ5IDEyMzUKKyAgICAweDEuMDAwNTU1Nzc3ODU0OGFlMWI1ZjYwNTc0NzA2ZTgyMzhwLTYsCisgICAgMHgxLjBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM2CisgICAgLTB4MS4wMDA1NTU3Nzc4NTQ4YWUxYjVmNjA1NzQ3MDZlODIzOHAtNiwKKyAgICAtMHgxLjBwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjM3CisgICAgMHgxLjAwMDU1NTc3Nzg1NDlhZTJiNjAwYjA3ZmQ0NGFlOGYzcC02LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTIzOAorICAgIC0weDEuMDAwNTU1Nzc3ODU0OWFlMmI2MDBiMDdmZDQ0YWU4ZjNwLTYsCisgICAgLTB4MS4wMDAwMDAwMDAwMDAxcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTIzOQorICAgIDB4MS4wMDAwMDAwNTU1NTU0ZDc3Nzc3NmY4NTQ4NTQzMDRjOXAtMTQsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTE1CisgIH0sCisgIHsgLy8gRW50cnkgMTI0MAorICAgIC0weDEuMDAwMDAwMDU1NTU1NGQ3Nzc3NzZmODU0ODU0MzA0YzlwLTE0LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQxCisgICAgMHgxLjAwMDAwMDA1NTU1NTU1Nzc3Nzc3Nzg1NDg1NDg1YTFlcC0xNCwKKyAgICAweDEuMHAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQyCisgICAgLTB4MS4wMDAwMDAwNTU1NTU1NTc3Nzc3Nzc4NTQ4NTQ4NWExZXAtMTQsCisgICAgLTB4MS4wcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEyNDMKKyAgICAweDEuMDAwMDAwMDU1NTU1NjU3Nzc3Nzg3ODU0ODU1MzA0YzlwLTE0LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0xNAorICB9LAorICB7IC8vIEVudHJ5IDEyNDQKKyAgICAtMHgxLjAwMDAwMDA1NTU1NTY1Nzc3Nzc4Nzg1NDg1NTMwNGM5cC0xNCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTI0NQorICAgIDB4MS5mZmZmZmZmZmZmZmZmMmFhYWFhYWFhYWFhYTZlZWVlZXAtMjgsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTI4CisgIH0sCisgIHsgLy8gRW50cnkgMTI0NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZjJhYWFhYWFhYWFhYWE2ZWVlZWVwLTI4LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ3CisgICAgMHgxLjAwMDAwMDAwMDAwMDAxNTU1NTU1NTU1NTU1NTc3Nzc3cC0yNywKKyAgICAweDEuMHAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjQ4CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwMTU1NTU1NTU1NTU1NTU3Nzc3N3AtMjcsCisgICAgLTB4MS4wcC0yNworICB9LAorICB7IC8vIEVudHJ5IDEyNDkKKyAgICAweDEuMDAwMDAwMDAwMDAwMTE1NTU1NTU1NTU1NTU5Nzc3NzdwLTI3LAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0yNworICB9LAorICB7IC8vIEVudHJ5IDEyNTAKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDExNTU1NTU1NTU1NTU1OTc3Nzc3cC0yNywKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTI1MQorICAgIDB4MS5mZmZmZmZmZmZmZmZmMDBhYWFhYWFhYWFhYWE5YWFlZXAtMzEsCisgICAgMHgxLmZmZmZmZmZmZmZmZmZwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMTI1MgorICAgIC0weDEuZmZmZmZmZmZmZmZmZjAwYWFhYWFhYWFhYWFhOWFhZWVwLTMxLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjUzCisgICAgMHgxLjAwMDAwMDAwMDAwMDAwMDU1NTU1NTU1NTU1NTU1NTc3cC0zMCwKKyAgICAweDEuMHAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU0CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwMDA1NTU1NTU1NTU1NTU1NTU3N3AtMzAsCisgICAgLTB4MS4wcC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEyNTUKKyAgICAweDEuMDAwMDAwMDAwMDAwMTAwNTU1NTU1NTU1NTU1NjU1NzdwLTMwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcC0zMAorICB9LAorICB7IC8vIEVudHJ5IDEyNTYKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDEwMDU1NTU1NTU1NTU1NTY1NTc3cC0zMCwKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDFwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTI1NworICAgIDB4MS40NTMwY2ZlNzI5NDgzYjhkYTFmNzEwMWUxNmNkNzRiN3AtOCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEyNTgKKyAgICAtMHgxLjQ1MzBjZmU3Mjk0ODNiOGRhMWY3MTAxZTE2Y2Q3NGI3cC04LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjU5CisgICAgLTB4MS40NTMwY2ZlNzI5NDgzYjhkYTFmNzEwMWUxNmNkNzRiN3AtOCwKKyAgICAweDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTI2MAorICAgIDB4MS40NTMwY2ZlNzI5NDgzYjhkYTFmNzEwMWUxNmNkNzRiN3AtOCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwMTAyMworICB9LAorICB7IC8vIEVudHJ5IDEyNjEKKyAgICAtMHgxLjQ1MzBjZmU3Mjk0ODNiOGRhMWY3MTAxZTE2Y2Q3NGI3cC04LAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjYyCisgICAgMHgxLjQ1MzBjZmU3Mjk0ODNiOGRhMWY3MTAxZTE2Y2Q3NGI3cC04LAorICAgIC0weDEuZmZmZmZmZmZmZmZmZnAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTI2MworICAgIDB4MS4zYzZlOTk3MGY3OGI4NGZjODIyNzUxN2ZkNTIxMDE3YnAxLAorICAgIDB4MS5mZmZmZmZmZmZmZmZlcDEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY0CisgICAgLTB4MS4zYzZlOTk3MGY3OGI4NGZjODIyNzUxN2ZkNTIxMDE3YnAxLAorICAgIC0weDEuZmZmZmZmZmZmZmZmZXAxMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTI2NQorICAgIC0weDEuMWE2MjYzMzE0NWMwNmUwZTY4OTQ4MTI3MDQ2MWQ1ZDdwLTUzLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjY2CisgICAgMHgxLjFhNjI2MzMxNDVjMDZlMGU2ODk0ODEyNzA0NjFkNWQ3cC01MywKKyAgICAtMHgxLjkyMWZiNTQ0NDJkMThwMQorICB9LAorICB7IC8vIEVudHJ5IDEyNjcKKyAgICAweDEuZDAyOTY3YzMxY2RiNGUwYzM4ZDAxYjY1NWQ1ZTBhYWZwNTMsCisgICAgMHgxLjkyMWZiNTQ0NDJkMThwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNjgKKyAgICAtMHgxLmQwMjk2N2MzMWNkYjRlMGMzOGQwMWI2NTVkNWUwYWFmcDUzLAorICAgIC0weDEuOTIxZmI1NDQ0MmQxOHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI2OQorICAgIDB4MS44ZWIyNDVjYmVlM2E5MjU5Yjk0ZmY0ZTdmYjgxMTFlY3AwLAorICAgIDB4MS4wMDAwMDAwMDAwMDAxcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcwCisgICAgLTB4MS44ZWIyNDVjYmVlM2E5MjU5Yjk0ZmY0ZTdmYjgxMTFlY3AwLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI3MQorICAgIDB4MS44ZWIyNDVjYmVlM2E1YjhhY2M3ZDQxMzIzMTQwYjNiNXAwLAorICAgIDB4MS4wcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcyCisgICAgLTB4MS44ZWIyNDVjYmVlM2E1YjhhY2M3ZDQxMzIzMTQwYjNiNXAwLAorICAgIC0weDEuMHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI3MworICAgIDB4MS44ZWIyNDVjYmVlM2E0MDIzNTYxM2U3NTc1MDIwZDMwZHAwLAorICAgIDB4MS5mZmZmZmZmZmZmZmZmcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTI3NAorICAgIC0weDEuOGViMjQ1Y2JlZTNhNDAyMzU2MTNlNzU3NTAyMGQzMGRwMCwKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjc1CisgICAgMHgxLmZmZmZmZmZmZmZmZmY3MmNlY2U2NzVkMWZjYTMwNDg5cC0xLAorICAgIDB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTI3NgorICAgIC0weDEuZmZmZmZmZmZmZmZmZjcyY2VjZTY3NWQxZmNhMzA0ODlwLTEsCisgICAgLTB4MS45MjFmYjU0NDQyZDE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTI3NworICAgIDB4MS4wMDAwMDAwMDAwMDAxMHAtMTAyMiwKKyAgICAweDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDEyNzgKKyAgICAtMHgxLjAwMDAwMDAwMDAwMDEwcC0xMDIyLAorICAgIC0weDEuMDAwMDAwMDAwMDAwMXAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDEyNzkKKyAgICAweDEucC0xMDIyLAorICAgIDB4MS4wcC0xMDIyCisgIH0sCisgIHsgLy8gRW50cnkgMTI4MAorICAgIC0weDEucC0xMDIyLAorICAgIC0weDEuMHAtMTAyMgorICB9LAorICB7IC8vIEVudHJ5IDEyODEKKyAgICAweDEuZmZmZmZmZmZmZmZmZTBwLTEwMjMsCisgICAgMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgyCisgICAgLTB4MS5mZmZmZmZmZmZmZmZlMHAtMTAyMywKKyAgICAtMHgxLmZmZmZmZmZmZmZmZmVwLTEwMjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjgzCisgICAgMHgxLmZmZmZmZmZmZmZmZmMwcC0xMDIzLAorICAgIDB4MS5mZmZmZmZmZmZmZmZjcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTI4NAorICAgIC0weDEuZmZmZmZmZmZmZmZmYzBwLTEwMjMsCisgICAgLTB4MS5mZmZmZmZmZmZmZmZjcC0xMDIzCisgIH0sCisgIHsgLy8gRW50cnkgMTI4NQorICAgIDB4MS5wLTEwNzMsCisgICAgMHgxLjBwLTEwNzMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg2CisgICAgLTB4MS5wLTEwNzMsCisgICAgLTB4MS4wcC0xMDczCisgIH0sCisgIHsgLy8gRW50cnkgMTI4NworICAgIDB4MS5wLTEwNzQsCisgICAgMHgxLjBwLTEwNzQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjg4CisgICAgLTB4MS5wLTEwNzQsCisgICAgLTB4MS4wcC0xMDc0CisgIH0sCisgIHsgLy8gRW50cnkgMTI4OQorICAgIDAuMCwKKyAgICAwLjAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjkwCisgICAgLTAuMCwKKyAgICAtMC4wCisgIH0sCit9OworI2VuZGlmIC8vIF9fQklPTklDX18KKworVEVTVChtYXRoX3RhbiwgdGFuX2ludGVsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX3Rhbl9pbnRlbF9kYXRhKS9zaXplb2YodGFuX2ludGVsX2RhdGFfdCk7IGkrKykgeworICAgIEVYUEVDVF9ET1VCTEVfRVEoZ190YW5faW50ZWxfZGF0YVtpXS5leHBlY3RlZCwgdGFuKGdfdGFuX2ludGVsX2RhdGFbaV0uY2FsbF9kYXRhKSkgPDwgIkZhaWxlZCBvbiBlbGVtZW50ICIgPDwgaTsKKyAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWF0aF90YW5mX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF90YW5mX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMTkwNDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tYXRoX3RhbmZfdGVzdC5jcHAKQEAgLTAsMCArMSw0NDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCit0eXBlZGVmIHN0cnVjdCB7CisgIGZsb2F0IGV4cGVjdGVkOworICBmbG9hdCBjYWxsX2RhdGE7Cit9IHRhbmZfaW50ZWxfZGF0YV90OworCitzdGF0aWMgdGFuZl9pbnRlbF9kYXRhX3QgZ190YW5mX2ludGVsX2RhdGFbXSA9IHsKKyAgeyAvLyBFbnRyeSAwCisgICAgLTB4MS4wMDAwMDAwMDAwMTU1NTU1NTU1NTU3Nzc3Nzc3Nzc3N3AtMjEsCisgICAgLTB4MS5wLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMQorICAgIDB4MS4wMDAwMDAwMDAwMTU1NTU1NTU1NTU3Nzc3Nzc3Nzc3N3AtMjEsCisgICAgMHgxLnAtMjEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyCisgICAgLTB4MS5wLTE0OSwKKyAgICAtMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMworICAgIDB4MS5wLTE0OSwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0CisgICAgLTB4MS4wMDAwMDIwMDAwMDAwMDAwMDAwMDE1NTU1NWQ1NTU1NnAtNDEsCisgICAgLTB4MS4wMDAwMDJwLTQxCisgIH0sCisgIHsgLy8gRW50cnkgNQorICAgIDB4MS4wMDAwMDIwMDAwMDAwMDAwMDAwMDE1NTU1NWQ1NTU1NnAtNDEsCisgICAgMHgxLjAwMDAwMnAtNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2CisgICAgLTB4MS5mZmI3ZWIwMDRiN2UxMmIzNjkzODhmYWFhMDM0MmY2Y3AtMywKKyAgICAtMHgxLjI3Y2NhNnA3CisgIH0sCisgIHsgLy8gRW50cnkgNworICAgIDB4MS5mZmI3ZWIwMDRiN2UxMmIzNjkzODhmYWFhMDM0MmY2Y3AtMywKKyAgICAweDEuMjdjY2E2cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA4CisgICAgLTB4MS4zYjdkZGFmZmRjOWEyZmFkMzlmMzI5NzQzZmJmNDllNXA0LAorICAgIC0weDEuMmE1OTk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5CisgICAgMHgxLjNiN2RkYWZmZGM5YTJmYWQzOWYzMjk3NDNmYmY0OWU1cDQsCisgICAgMHgxLjJhNTk5NnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAKKyAgICAweDEuODE5ZjMyZmZkOTdiMWVkNjY3YmMxNDMzODcwMzdkZGVwLTEsCisgICAgLTB4MS4zZjdmMjJwMQorICB9LAorICB7IC8vIEVudHJ5IDExCisgICAgLTB4MS44MTlmMzJmZmQ5N2IxZWQ2NjdiYzE0MzM4NzAzN2RkZXAtMSwKKyAgICAweDEuM2Y3ZjIycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMgorICAgIC0weDEuNDA1ZjkwMDAwMDAwMDAwMDAwMGE3NDAyODQ2NTgzZDBwLTM4LAorICAgIC0weDEuNDA1ZjkwcC0zOAorICB9LAorICB7IC8vIEVudHJ5IDEzCisgICAgMHgxLjQwNWY5MDAwMDAwMDAwMDAwMDBhNzQwMjg0NjU4M2QwcC0zOCwKKyAgICAweDEuNDA1ZjkwcC0zOAorICB9LAorICB7IC8vIEVudHJ5IDE0CisgICAgLTB4MS44Y2Q3OTk5NTM0NGM3OTQzYzdiM2UwMjE2MDdkYTNjYnAtMiwKKyAgICAtMHgxLjQ5NmU4MHA5NgorICB9LAorICB7IC8vIEVudHJ5IDE1CisgICAgMHgxLjhjZDc5OTk1MzQ0Yzc5NDNjN2IzZTAyMTYwN2RhM2NicC0yLAorICAgIDB4MS40OTZlODBwOTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNgorICAgIDB4MS5lMTQ0NDcxZWEyYjQ5YjZjMWZkY2VmZjhjY2NlZWE3YnAxMCwKKyAgICAtMHgxLjVmZTBwMworICB9LAorICB7IC8vIEVudHJ5IDE3CisgICAgLTB4MS5lMTQ0NDcxZWEyYjQ5YjZjMWZkY2VmZjhjY2NlZWE3YnAxMCwKKyAgICAweDEuNWZlMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTgKKyAgICAtMHgxLmNhMGY0YzIzMTVhYjVhOTcyOWU2YWZhODU3Njc3YjNmcC0xLAorICAgIC0weDEuNzVhZWYwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTkKKyAgICAweDEuY2EwZjRjMjMxNWFiNWE5NzI5ZTZhZmE4NTc2NzdiM2ZwLTEsCisgICAgMHgxLjc1YWVmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDIwCisgICAgLTB4MS5jMzNlZDUwYjg4Nzc3NWE1ZDYxM2MwOGM0ODhmYmI5Y3AzLAorICAgIC0weDEuODBwMAorICB9LAorICB7IC8vIEVudHJ5IDIxCisgICAgMHgxLmMzM2VkNTBiODg3Nzc1YTVkNjEzYzA4YzQ4OGZiYjljcDMsCisgICAgMHgxLjgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMgorICAgIC0weDEuYzM0NTEzZWU3MTQwZmRiODIxN2U4M2RjMmQ2ZDZmNTNwMywKKyAgICAtMHgxLjgwMDA0MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMjMKKyAgICAweDEuYzM0NTEzZWU3MTQwZmRiODIxN2U4M2RjMmQ2ZDZmNTNwMywKKyAgICAweDEuODAwMDQwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNAorICAgIDB4MS40ZTZiOGE0ODE2NGI5ZTFkODE3NWU0NTEyYWIyMmZmMXAwLAorICAgIC0weDEuOGUzNTYwcDk4CisgIH0sCisgIHsgLy8gRW50cnkgMjUKKyAgICAtMHgxLjRlNmI4YTQ4MTY0YjllMWQ4MTc1ZTQ1MTJhYjIyZmYxcDAsCisgICAgMHgxLjhlMzU2MHA5OAorICB9LAorICB7IC8vIEVudHJ5IDI2CisgICAgLTB4MS5kMDE3ZTAyMTRhOTUzMjY1ZDhkZDVjMGExMWVhNjFkMXAtMSwKKyAgICAtMHgxLjlkZTdkNHA0CisgIH0sCisgIHsgLy8gRW50cnkgMjcKKyAgICAweDEuZDAxN2UwMjE0YTk1MzI2NWQ4ZGQ1YzBhMTFlYTYxZDFwLTEsCisgICAgMHgxLjlkZTdkNHA0CisgIH0sCisgIHsgLy8gRW50cnkgMjgKKyAgICAtMHgxLmQwNDczZjAyMjcwYzBlZWM4ODNlNzUzZTUwODAwNjcwcC0xLAorICAgIC0weDEuOWRlOGE0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOQorICAgIDB4MS5kMDQ3M2YwMjI3MGMwZWVjODgzZTc1M2U1MDgwMDY3MHAtMSwKKyAgICAweDEuOWRlOGE0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMAorICAgIDB4MS5kMGFhZGEyMmFhNWUzZGMzNWI1MDYzYzYzOTA0N2RmNXAtMSwKKyAgICAtMHgxLmJlN2U1YXA1CisgIH0sCisgIHsgLy8gRW50cnkgMzEKKyAgICAtMHgxLmQwYWFkYTIyYWE1ZTNkYzM1YjUwNjNjNjM5MDQ3ZGY1cC0xLAorICAgIDB4MS5iZTdlNWFwNQorICB9LAorICB7IC8vIEVudHJ5IDMyCisgICAgLTB4MS5lZTk0OTUwMDBhMTkwY2RiNmRiM2U4M2QyYzA1ZWYzOHAtMiwKKyAgICAtMHgxLmNjYmViMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDMzCisgICAgMHgxLmVlOTQ5NTAwMGExOTBjZGI2ZGIzZTgzZDJjMDVlZjM4cC0yLAorICAgIDB4MS5jY2JlYjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNAorICAgIDB4MS5kYzMyZWJhNjM4ZDEzNDU4YzdiMjlkOTZhYmZmZTFjYXAtNywKKyAgICAtMHgxLmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMzUKKyAgICAtMHgxLmRjMzJlYmE2MzhkMTM0NThjN2IyOWQ5NmFiZmZlMWNhcC03LAorICAgIDB4MS5mZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDM2CisgICAgMHgxLjAwMDAwMDAwMDAxNTU1NTU1NTU1NTc3Nzc3Nzc3Nzc3cC0yMSwKKyAgICAweDEucC0yMQorICB9LAorICB7IC8vIEVudHJ5IDM3CisgICAgLTB4MS4wMDAwMDAwMDAwMTU1NTU1NTU1NTU3Nzc3Nzc3Nzc3N3AtMjEsCisgICAgLTB4MS5wLTIxCisgIH0sCisgIHsgLy8gRW50cnkgMzgKKyAgICAweDEucC0xMzEsCisgICAgMHgxLnAtMTMxCisgIH0sCisgIHsgLy8gRW50cnkgMzkKKyAgICAtMHgxLnAtMTMxLAorICAgIC0weDEucC0xMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MAorICAgIDB4MS5wLTE0OSwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MQorICAgIC0weDEucC0xNDksCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDQyCisgICAgMHgxLjUyZjUwZTc1Nzk0MWNiZmY1YjdjMmUwNmExYWI3ZTlkcDYsCisgICAgMHgxLnA2MworICB9LAorICB7IC8vIEVudHJ5IDQzCisgICAgLTB4MS41MmY1MGU3NTc5NDFjYmZmNWI3YzJlMDZhMWFiN2U5ZHA2LAorICAgIC0weDEucDYzCisgIH0sCisgIHsgLy8gRW50cnkgNDQKKyAgICAweDEuMDAwMDAyMDAwMDAwMDAwMDAwMDAxNTU1NTVkNTU1NTZwLTQxLAorICAgIDB4MS4wMDAwMDJwLTQxCisgIH0sCisgIHsgLy8gRW50cnkgNDUKKyAgICAtMHgxLjAwMDAwMjAwMDAwMDAwMDAwMDAwMTU1NTU1ZDU1NTU2cC00MSwKKyAgICAtMHgxLjAwMDAwMnAtNDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NgorICAgIC0weDEuYWRiN2ViNmQ4Y2ViYmUzNjJmMTk3ZGJlZGE1YzExM2NwLTEsCisgICAgMHgxLjAwMDAwMnA1MQorICB9LAorICB7IC8vIEVudHJ5IDQ3CisgICAgMHgxLmFkYjdlYjZkOGNlYmJlMzYyZjE5N2RiZWRhNWMxMTNjcC0xLAorICAgIC0weDEuMDAwMDAycDUxCisgIH0sCisgIHsgLy8gRW50cnkgNDgKKyAgICAweDEuZjc3NjJiNzUyYjAwNjcxNWQ5MGMzODlhMTE4MjZkNmJwMSwKKyAgICAweDEuMDAwMDA0cDEyNworICB9LAorICB7IC8vIEVudHJ5IDQ5CisgICAgLTB4MS5mNzc2MmI3NTJiMDA2NzE1ZDkwYzM4OWExMTgyNmQ2YnAxLAorICAgIC0weDEuMDAwMDA0cDEyNworICB9LAorICB7IC8vIEVudHJ5IDUwCisgICAgLTB4MS4wOWNmZjEwMDAwNjcxOTEyYzg0NzYyZjE4YzI4NTQ3MHAwLAorICAgIDB4MS4wMDAwOTBwNworICB9LAorICB7IC8vIEVudHJ5IDUxCisgICAgMHgxLjA5Y2ZmMTAwMDA2NzE5MTJjODQ3NjJmMThjMjg1NDcwcDAsCisgICAgLTB4MS4wMDAwOTBwNworICB9LAorICB7IC8vIEVudHJ5IDUyCisgICAgMHgxLjAxNTkwMTAxN2VkYjY3YWE3ZTUyYWU2OTRlOTkwYTE5cC0zLAorICAgIDB4MS4wMDAxODBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MworICAgIC0weDEuMDE1OTAxMDE3ZWRiNjdhYTdlNTJhZTY5NGU5OTBhMTlwLTMsCisgICAgLTB4MS4wMDAxODBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NAorICAgIDB4MS4wMDAyMjAwMDAwMDAwMDAwMDAwMDU1NTc3NTU5ZDk1OHAtNDAsCisgICAgMHgxLjAwMDIyMHAtNDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NQorICAgIC0weDEuMDAwMjIwMDAwMDAwMDAwMDAwMDA1NTU3NzU1OWQ5NThwLTQwLAorICAgIC0weDEuMDAwMjIwcC00MAorICB9LAorICB7IC8vIEVudHJ5IDU2CisgICAgMHgxLjZkNTM3OTZjZGQ0MDFlM2RkYzA5ZTgzNWI4ZWE2NjBhcDMsCisgICAgMHgxLjAwMDM4MHAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NworICAgIC0weDEuNmQ1Mzc5NmNkZDQwMWUzZGRjMDllODM1YjhlYTY2MGFwMywKKyAgICAtMHgxLjAwMDM4MHAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OAorICAgIC0weDEuYjA3MGUzYTY5Njg0NjNhZjZlOWRiOTIyZTc4NDU1MjRwLTcsCisgICAgMHgxLjAwMDg4MHA5CisgIH0sCisgIHsgLy8gRW50cnkgNTkKKyAgICAweDEuYjA3MGUzYTY5Njg0NjNhZjZlOWRiOTIyZTc4NDU1MjRwLTcsCisgICAgLTB4MS4wMDA4ODBwOQorICB9LAorICB7IC8vIEVudHJ5IDYwCisgICAgLTB4MS5mYTYxZGNmZmEzZWZlMzI1YjMyNzA0ZmM0MTI0NjJjZnAxLAorICAgIDB4MS4wMDIwcDYyCisgIH0sCisgIHsgLy8gRW50cnkgNjEKKyAgICAweDEuZmE2MWRjZmZhM2VmZTMyNWIzMjcwNGZjNDEyNDYyY2ZwMSwKKyAgICAtMHgxLjAwMjBwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MgorICAgIDB4MS5mZmZkODI1YTNmMzc3ZjAxMjIwOTk4MmEwMGMzNDZmMHAtMiwKKyAgICAweDEuMDA2MHA5MAorICB9LAorICB7IC8vIEVudHJ5IDYzCisgICAgLTB4MS5mZmZkODI1YTNmMzc3ZjAxMjIwOTk4MmEwMGMzNDZmMHAtMiwKKyAgICAtMHgxLjAwNjBwOTAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NAorICAgIDB4MS4wMTNjNjhmZmYwNGI2OTgxNjVkZmRmOWQ0ODQ0NGE5NXAtNiwKKyAgICAweDEuMDEzN3AtNgorICB9LAorICB7IC8vIEVudHJ5IDY1CisgICAgLTB4MS4wMTNjNjhmZmYwNGI2OTgxNjVkZmRmOWQ0ODQ0NGE5NXAtNiwKKyAgICAtMHgxLjAxMzdwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NgorICAgIDB4MS45MzJjOTk0ZjYxZDgwNGEwODRmMjBkOTc1YTYxN2M1MHAwLAorICAgIDB4MS4wMTRjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NworICAgIC0weDEuOTMyYzk5NGY2MWQ4MDRhMDg0ZjIwZDk3NWE2MTdjNTBwMCwKKyAgICAtMHgxLjAxNGNwMAorICB9LAorICB7IC8vIEVudHJ5IDY4CisgICAgLTB4MS5jMzRlYzIwNTMzZTc2MDU2NWNiNzYyYjE1YzE4ZDZmY3AxLAorICAgIDB4MS4wMjA0NDZwNTgKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OQorICAgIDB4MS5jMzRlYzIwNTMzZTc2MDU2NWNiNzYyYjE1YzE4ZDZmY3AxLAorICAgIC0weDEuMDIwNDQ2cDU4CisgIH0sCisgIHsgLy8gRW50cnkgNzAKKyAgICAweDEuOWZmNzE3NjdlYTA1MWU0ZTljYzAwMDg5MjJiMTExMjlwMCwKKyAgICAweDEuMDRlNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzEKKyAgICAtMHgxLjlmZjcxNzY3ZWEwNTFlNGU5Y2MwMDA4OTIyYjExMTI5cDAsCisgICAgLTB4MS4wNGU0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MgorICAgIDB4MS4wN2M5YzUwMDE2NTkwNzk3MjJmOGU5MTkwZmZlNmVjNnAtMywKKyAgICAweDEuMDY1OHAtMworICB9LAorICB7IC8vIEVudHJ5IDczCisgICAgLTB4MS4wN2M5YzUwMDE2NTkwNzk3MjJmOGU5MTkwZmZlNmVjNnAtMywKKyAgICAtMHgxLjA2NThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NAorICAgIDB4MS5mZDYxMTA3MmE1MDM1N2U2MjY2NzY4YjJjZGYwMTk0Y3AtMywKKyAgICAweDEuMGFjNzEwcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDc1CisgICAgLTB4MS5mZDYxMTA3MmE1MDM1N2U2MjY2NzY4YjJjZGYwMTk0Y3AtMywKKyAgICAtMHgxLjBhYzcxMHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NgorICAgIDB4MS4wZGRiYjUwMDAyNDRjNGZiOTcyZWI3MmRlMDA4OTZjMHAtMywKKyAgICAweDEuMGM1MHAtMworICB9LAorICB7IC8vIEVudHJ5IDc3CisgICAgLTB4MS4wZGRiYjUwMDAyNDRjNGZiOTcyZWI3MmRlMDA4OTZjMHAtMywKKyAgICAtMHgxLjBjNTBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OAorICAgIC0weDEuYzBhZWI1Zjg0YmU5NWRhNWFiMDcxNmRmYmEyMDVlMjhwMiwKKyAgICAweDEuMGRkY3A5NgorICB9LAorICB7IC8vIEVudHJ5IDc5CisgICAgMHgxLmMwYWViNWY4NGJlOTVkYTVhYjA3MTZkZmJhMjA1ZTI4cDIsCisgICAgLTB4MS4wZGRjcDk2CisgIH0sCisgIHsgLy8gRW50cnkgODAKKyAgICAweDEuMzQwNzU0ZmZmZmZlYjc4MDc2MWU4NjMzN2YwYzU1ZWZwMSwKKyAgICAweDEuMGUyOGE2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MQorICAgIC0weDEuMzQwNzU0ZmZmZmZlYjc4MDc2MWU4NjMzN2YwYzU1ZWZwMSwKKyAgICAtMHgxLjBlMjhhNnA0CisgIH0sCisgIHsgLy8gRW50cnkgODIKKyAgICAweDEuMzQ5ZDk1ZmZlZTQ3MmVjN2MxMDkzNDU3MGQzYmE0ODZwLTEsCisgICAgMHgxLjE1YmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MworICAgIC0weDEuMzQ5ZDk1ZmZlZTQ3MmVjN2MxMDkzNDU3MGQzYmE0ODZwLTEsCisgICAgLTB4MS4xNWJjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgODQKKyAgICAweDEuZWVjNzI0MDNhNGZkMjRkMGM5ZTJhZjA4OGEwNWZiODVwMCwKKyAgICAweDEuMTdlNHAwCisgIH0sCisgIHsgLy8gRW50cnkgODUKKyAgICAtMHgxLmVlYzcyNDAzYTRmZDI0ZDBjOWUyYWYwODhhMDVmYjg1cDAsCisgICAgLTB4MS4xN2U0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NgorICAgIDB4MS5lZjRiZDdhMjE1MjM3YjMwNjVkNTY5ZmQ0YzVmNWE0N3AwLAorICAgIDB4MS4xOHAwCisgIH0sCisgIHsgLy8gRW50cnkgODcKKyAgICAtMHgxLmVmNGJkN2EyMTUyMzdiMzA2NWQ1NjlmZDRjNWY1YTQ3cDAsCisgICAgLTB4MS4xOHAwCisgIH0sCisgIHsgLy8gRW50cnkgODgKKyAgICAtMHgxLmZlNzkzOTAwMTM4Yzk5NDE4MzZiNGZjYmM5YjIyNjBkcC00LAorICAgIDB4MS4xOHA2NAorICB9LAorICB7IC8vIEVudHJ5IDg5CisgICAgMHgxLmZlNzkzOTAwMTM4Yzk5NDE4MzZiNGZjYmM5YjIyNjBkcC00LAorICAgIC0weDEuMThwNjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MAorICAgIDB4MS5mMDhmMDg3M2M1ODE5YTlmN2NjNmJiZjNjNTI5MWNjMHAwLAorICAgIDB4MS4xODQ0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MQorICAgIC0weDEuZjA4ZjA4NzNjNTgxOWE5ZjdjYzZiYmYzYzUyOTFjYzBwMCwKKyAgICAtMHgxLjE4NDRwMAorICB9LAorICB7IC8vIEVudHJ5IDkyCisgICAgMHgxLjVjNTFjYzE4ZjA5MWJjNGI1NGVlODM2MjM0MzhjOWE3cDExLAorICAgIDB4MS4xOGZmZmVwMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MworICAgIC0weDEuNWM1MWNjMThmMDkxYmM0YjU0ZWU4MzYyMzQzOGM5YTdwMTEsCisgICAgLTB4MS4xOGZmZmVwMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NAorICAgIDB4MS4yNjMzNTY3ODk4ZTY5MWVlYjg3YWQwMjZiZDE2YTdlNHAtMiwKKyAgICAweDEuMWU3Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDk1CisgICAgLTB4MS4yNjMzNTY3ODk4ZTY5MWVlYjg3YWQwMjZiZDE2YTdlNHAtMiwKKyAgICAtMHgxLjFlN2NwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NgorICAgIDB4MS5mZmZmZWRmNTU4YmZiMzEwMGY2MTEyNWYyOTZiOGJhZHAxLAorICAgIDB4MS4xZWJlcDE4CisgIH0sCisgIHsgLy8gRW50cnkgOTcKKyAgICAtMHgxLmZmZmZlZGY1NThiZmIzMTAwZjYxMTI1ZjI5NmI4YmFkcDEsCisgICAgLTB4MS4xZWJlcDE4CisgIH0sCisgIHsgLy8gRW50cnkgOTgKKyAgICAweDEuMGU1NTFiMDAwMDdmYWUxNzIzNjQyMWE3NmU4NjFjNzVwMSwKKyAgICAweDEuMjBlYTljcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OQorICAgIC0weDEuMGU1NTFiMDAwMDdmYWUxNzIzNjQyMWE3NmU4NjFjNzVwMSwKKyAgICAtMHgxLjIwZWE5Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgMTAwCisgICAgMHgxLmMwN2RmYjA1NTJiYTYwYjcxYzdkZjZiZDdjYTQwOWQ2cDIwLAorICAgIDB4MS4yMTA2Y2FwNQorICB9LAorICB7IC8vIEVudHJ5IDEwMQorICAgIC0weDEuYzA3ZGZiMDU1MmJhNjBiNzFjN2RmNmJkN2NhNDA5ZDZwMjAsCisgICAgLTB4MS4yMTA2Y2FwNQorICB9LAorICB7IC8vIEVudHJ5IDEwMgorICAgIC0weDEuZmQyM2ZkNjRhNGJmY2ZiNTk3YzQ2OTMzNjQ5ZjVhZTJwLTIsCisgICAgMHgxLjIxOWRjNnAxMTkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMKKyAgICAweDEuZmQyM2ZkNjRhNGJmY2ZiNTk3YzQ2OTMzNjQ5ZjVhZTJwLTIsCisgICAgLTB4MS4yMTlkYzZwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMTA0CisgICAgLTB4MS5iOTNjMTMwMDBkMDE2ZDE0ZTc1NmMyNWU0MjMwMmQ5ZnAtMywKKyAgICAweDEuMjZjZDZhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUKKyAgICAweDEuYjkzYzEzMDAwZDAxNmQxNGU3NTZjMjVlNDIzMDJkOWZwLTMsCisgICAgLTB4MS4yNmNkNmFwMworICB9LAorICB7IC8vIEVudHJ5IDEwNgorICAgIC0weDEuZWJjYmNiMTM4YjI3NGNiY2JlNjFhZjUxMTNkYTgzZWNwLTQsCisgICAgMHgxLjI5YzRlMHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTA3CisgICAgMHgxLmViY2JjYjEzOGIyNzRjYmNiZTYxYWY1MTEzZGE4M2VjcC00LAorICAgIC0weDEuMjljNGUwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDgKKyAgICAweDEuOTliYzViOTYxYjFiMjRmZGI3N2ZjZWUwOGJhMmY3MjBwLTI1LAorICAgIDB4MS4yZDk3YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDEwOQorICAgIC0weDEuOTliYzViOTYxYjFiMjRmZGI3N2ZjZWUwOGJhMmY3MjBwLTI1LAorICAgIC0weDEuMmQ5N2M4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAKKyAgICAtMHgxLmVkMThhZjBiMGJhODBkZmE2ZThlZTFiM2IzMWRmYzYwcC0xLAorICAgIDB4MS4zMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMTExCisgICAgMHgxLmVkMThhZjBiMGJhODBkZmE2ZThlZTFiM2IzMWRmYzYwcC0xLAorICAgIC0weDEuMzBwMQorICB9LAorICB7IC8vIEVudHJ5IDExMgorICAgIDB4MS45YWIyNDExMWNmYzYyZGY0ZGJjYTMyMDIxNmI5NDY1MXAtNCwKKyAgICAweDEuMzBjYTcwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTMKKyAgICAtMHgxLjlhYjI0MTExY2ZjNjJkZjRkYmNhMzIwMjE2Yjk0NjUxcC00LAorICAgIC0weDEuMzBjYTcwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTQKKyAgICAweDEuMzM3ZDhmZmZmZmZlZGU2MmYwNTBlOThiM2I5NTk2ZTFwLTMsCisgICAgMHgxLjMxMzVmMHAtMworICB9LAorICB7IC8vIEVudHJ5IDExNQorICAgIC0weDEuMzM3ZDhmZmZmZmZlZGU2MmYwNTBlOThiM2I5NTk2ZTFwLTMsCisgICAgLTB4MS4zMTM1ZjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTYKKyAgICAweDEuMzQ4ZTY1MDAwMDAwMmVmM2E3NjViOTQxNmQxMmNmN2VwLTMsCisgICAgMHgxLjMyNDBiY3AtMworICB9LAorICB7IC8vIEVudHJ5IDExNworICAgIC0weDEuMzQ4ZTY1MDAwMDAwMmVmM2E3NjViOTQxNmQxMmNmN2VwLTMsCisgICAgLTB4MS4zMjQwYmNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTgKKyAgICAtMHgxLmI5ZTU4YWVjNjFhNDRhYjUzM2MyYjgzNzI2MzY3ZTE3cC04LAorICAgIDB4MS4zMmQ1M2NwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTkKKyAgICAweDEuYjllNThhZWM2MWE0NGFiNTMzYzJiODM3MjYzNjdlMTdwLTgsCisgICAgLTB4MS4zMmQ1M2NwMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjAKKyAgICAtMHgxLmUxZmQ2OGVkZWE0NGZiNzg3ODBlZDYyZTczYzZlMDE3cC02LAorICAgIDB4MS4zYTBhYThwNgorICB9LAorICB7IC8vIEVudHJ5IDEyMQorICAgIDB4MS5lMWZkNjhlZGVhNDRmYjc4NzgwZWQ2MmU3M2M2ZTAxN3AtNiwKKyAgICAtMHgxLjNhMGFhOHA2CisgIH0sCisgIHsgLy8gRW50cnkgMTIyCisgICAgLTB4MS42MmEyODEwMDAwMTM5MzA4MGY2NzMzZGZhZjljNzZmY3AtMSwKKyAgICAweDEuNDQ5NWJhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjMKKyAgICAweDEuNjJhMjgxMDAwMDEzOTMwODBmNjczM2RmYWY5Yzc2ZmNwLTEsCisgICAgLTB4MS40NDk1YmFwMQorICB9LAorICB7IC8vIEVudHJ5IDEyNAorICAgIDB4MS5iOTIzYzNiYTBiYzBjNTAwYmE0YzI0NTMwMWJhZDIwN3AxLAorICAgIDB4MS40OWQ0MmFwMAorICB9LAorICB7IC8vIEVudHJ5IDEyNQorICAgIC0weDEuYjkyM2MzYmEwYmMwYzUwMGJhNGMyNDUzMDFiYWQyMDdwMSwKKyAgICAtMHgxLjQ5ZDQyYXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI2CisgICAgMHgxLjU0MWYzZjAwMDIyYWMyNWNjOGE5MDg1NWFiNmJiODA4cC0zLAorICAgIDB4MS41MTBiYmNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMjcKKyAgICAtMHgxLjU0MWYzZjAwMDIyYWMyNWNjOGE5MDg1NWFiNmJiODA4cC0zLAorICAgIC0weDEuNTEwYmJjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTI4CisgICAgMHgxLjc2ZjNlZmZmZmYzMDU3MTIyZTZlN2NlNTBkMTJjYmNlcC0zLAorICAgIDB4MS41NDk1MjBwMTAwCisgIH0sCisgIHsgLy8gRW50cnkgMTI5CisgICAgLTB4MS43NmYzZWZmZmZmMzA1NzEyMmU2ZTdjZTUwZDEyY2JjZXAtMywKKyAgICAtMHgxLjU0OTUyMHAxMDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzAKKyAgICAweDEuNGNhYzAzMDA2NDNlMTJjNDYyMDNiNDdkM2VlZWQ0ZmZwLTksCisgICAgMHgxLjU0YzRiYXAyNAorICB9LAorICB7IC8vIEVudHJ5IDEzMQorICAgIC0weDEuNGNhYzAzMDA2NDNlMTJjNDYyMDNiNDdkM2VlZWQ0ZmZwLTksCisgICAgLTB4MS41NGM0YmFwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzIKKyAgICAtMHgxLjcwZDU0NTAwMDAwNTg5NzRjMjBiOTdiYTk2ZmRhZTAzcC0zLAorICAgIDB4MS41YTc1N2VwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzMKKyAgICAweDEuNzBkNTQ1MDAwMDA1ODk3NGMyMGI5N2JhOTZmZGFlMDNwLTMsCisgICAgLTB4MS41YTc1N2VwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzQKKyAgICAtMHgxLmZmZmZlOWJiYTdmMTMyMWZhZTE5Mjk0M2EzZTg0OGMwcC0xLAorICAgIDB4MS41ZmRiYzBwMgorICB9LAorICB7IC8vIEVudHJ5IDEzNQorICAgIDB4MS5mZmZmZTliYmE3ZjEzMjFmYWUxOTI5NDNhM2U4NDhjMHAtMSwKKyAgICAtMHgxLjVmZGJjMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMTM2CisgICAgLTB4MS5mZmI2OGYwMDUwZGFiZTVjZTcxOTIwMjYxMGZjYWMyZXAtMSwKKyAgICAweDEuNWZlMDU2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMzcKKyAgICAweDEuZmZiNjhmMDA1MGRhYmU1Y2U3MTkyMDI2MTBmY2FjMmVwLTEsCisgICAgLTB4MS41ZmUwNTZwMgorICB9LAorICB7IC8vIEVudHJ5IDEzOAorICAgIC0weDEuZGFiYjQ2ZTM5MzdlNmM1MDVhYjIwNjIyMzIzMzlhMTZwLTcsCisgICAgMHgxLjY0OTNkNHA5NQorICB9LAorICB7IC8vIEVudHJ5IDEzOQorICAgIDB4MS5kYWJiNDZlMzkzN2U2YzUwNWFiMjA2MjIzMjMzOWExNnAtNywKKyAgICAtMHgxLjY0OTNkNHA5NQorICB9LAorICB7IC8vIEVudHJ5IDE0MAorICAgIDB4MS5jODMyMTYyNDgxZTFjZTRmMDE3MzZiYjk3YTMwMTliOXAtMSwKKyAgICAweDEuNzRhNTY2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTQxCisgICAgLTB4MS5jODMyMTYyNDgxZTFjZTRmMDE3MzZiYjk3YTMwMTliOXAtMSwKKyAgICAtMHgxLjc0YTU2NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDE0MgorICAgIDB4MS43YjJmYTQwMDAwMDM4ZDU2OTIyNjUxMmM3Nzk3NmZmNXAtMywKKyAgICAweDEuNzZmMGIycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTQzCisgICAgLTB4MS43YjJmYTQwMDAwMDM4ZDU2OTIyNjUxMmM3Nzk3NmZmNXAtMywKKyAgICAtMHgxLjc2ZjBiMnAtMworICB9LAorICB7IC8vIEVudHJ5IDE0NAorICAgIC0weDEuNGYzNzVhZDlkZWU1ZmQ2MDRmYjI5NDM1ZjMyZWZlNTdwMSwKKyAgICAweDEuNzhiM2ZhcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDE0NQorICAgIDB4MS40ZjM3NWFkOWRlZTVmZDYwNGZiMjk0MzVmMzJlZmU1N3AxLAorICAgIC0weDEuNzhiM2ZhcDEwMAorICB9LAorICB7IC8vIEVudHJ5IDE0NgorICAgIC0weDEuMDAwMDVlZmZmYmU3M2U3YmFmZWFiN2Y3NmM4YTkzZWZwMCwKKyAgICAweDEuNzhmZGI0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNDcKKyAgICAweDEuMDAwMDVlZmZmYmU3M2U3YmFmZWFiN2Y3NmM4YTkzZWZwMCwKKyAgICAtMHgxLjc4ZmRiNHAzCisgIH0sCisgIHsgLy8gRW50cnkgMTQ4CisgICAgLTB4MS5mYzNhY2UwMDAwMjljMzMxNjkyYWE5ZmU0ZTQyZjAwNHAtMSwKKyAgICAweDEuNzkxY3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTQ5CisgICAgMHgxLmZjM2FjZTAwMDAyOWMzMzE2OTJhYTlmZTRlNDJmMDA0cC0xLAorICAgIC0weDEuNzkxY3AzCisgIH0sCisgIHsgLy8gRW50cnkgMTUwCisgICAgMHgxLmRjZmEzMjU0YjUzYjZhNzBjZWM0NDczYWJlODUwMTAycC0xLAorICAgIDB4MS43ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTEKKyAgICAtMHgxLmRjZmEzMjU0YjUzYjZhNzBjZWM0NDczYWJlODUwMTAycC0xLAorICAgIC0weDEuN2ZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTUyCisgICAgMHgxLmMzM2VkNTBiODg3Nzc1YTVkNjEzYzA4YzQ4OGZiYjljcDMsCisgICAgMHgxLjgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTMKKyAgICAtMHgxLmMzM2VkNTBiODg3Nzc1YTVkNjEzYzA4YzQ4OGZiYjljcDMsCisgICAgLTB4MS44MHAwCisgIH0sCisgIHsgLy8gRW50cnkgMTU0CisgICAgMHgxLjgwMDhwLTEzMCwKKyAgICAweDEuODAwOHAtMTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTU1CisgICAgLTB4MS44MDA4cC0xMzAsCisgICAgLTB4MS44MDA4cC0xMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNTYKKyAgICAtMHgxLmY5NjM3MGVjNDgyZDJiYjBlYjhlYTdhNTMwMTM5ZmNmcC01LAorICAgIDB4MS44MTgwcDgzCisgIH0sCisgIHsgLy8gRW50cnkgMTU3CisgICAgMHgxLmY5NjM3MGVjNDgyZDJiYjBlYjhlYTdhNTMwMTM5ZmNmcC01LAorICAgIC0weDEuODE4MHA4MworICB9LAorICB7IC8vIEVudHJ5IDE1OAorICAgIC0weDEuZmZmNjY0ZmFhNmY4NmZhOGI0ZTVlMjcxOWQyMTk1Y2ZwLTEsCisgICAgMHgxLjg5ZTA5MHA5CisgIH0sCisgIHsgLy8gRW50cnkgMTU5CisgICAgMHgxLmZmZjY2NGZhYTZmODZmYThiNGU1ZTI3MTlkMjE5NWNmcC0xLAorICAgIC0weDEuODllMDkwcDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjAKKyAgICAweDEuMWMwNTExMDE2NDNiZTc0MDc4MmZlMGRmYzlkY2QxY2NwMCwKKyAgICAweDEuOGM2MzFlcDE1CisgIH0sCisgIHsgLy8gRW50cnkgMTYxCisgICAgLTB4MS4xYzA1MTEwMTY0M2JlNzQwNzgyZmUwZGZjOWRjZDFjY3AwLAorICAgIC0weDEuOGM2MzFlcDE1CisgIH0sCisgIHsgLy8gRW50cnkgMTYyCisgICAgMHgxLmJiMmU4OGYyNmI5MzYzZjlhODUyNjY1ZjM0MTNkOTk0cDEzLAorICAgIDB4MS44YzY3ZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTYzCisgICAgLTB4MS5iYjJlODhmMjZiOTM2M2Y5YTg1MjY2NWYzNDEzZDk5NHAxMywKKyAgICAtMHgxLjhjNjdmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjQKKyAgICAtMHgxLmYwZTRlYzEzMzU4NWNiMzBlNjdjZmNiYjM2ZmFhZDhlcDEsCisgICAgMHgxLjkxZDg1OHAxMgorICB9LAorICB7IC8vIEVudHJ5IDE2NQorICAgIDB4MS5mMGU0ZWMxMzM1ODVjYjMwZTY3Y2ZjYmIzNmZhYWQ4ZXAxLAorICAgIC0weDEuOTFkODU4cDEyCisgIH0sCisgIHsgLy8gRW50cnkgMTY2CisgICAgLTB4MS41ZDE0OTQ2ZGM5ODk3NWQ2NDIxYTU1Mjg0ZmUwMjBhMXAyNCwKKyAgICAweDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNjcKKyAgICAweDEuNWQxNDk0NmRjOTg5NzVkNjQyMWE1NTI4NGZlMDIwYTFwMjQsCisgICAgLTB4MS45MjFmYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDE2OAorICAgIDB4MS45ODBlZTBjZmJmMGYxZWJjOWQ0ZmQyNGNjZTNjZGZlN3AxNSwKKyAgICAweDEuOTIyOTIycDE1CisgIH0sCisgIHsgLy8gRW50cnkgMTY5CisgICAgLTB4MS45ODBlZTBjZmJmMGYxZWJjOWQ0ZmQyNGNjZTNjZGZlN3AxNSwKKyAgICAtMHgxLjkyMjkyMnAxNQorICB9LAorICB7IC8vIEVudHJ5IDE3MAorICAgIC0weDEuZmQ0M2Y4ZTg5MWUyMjdkZGFkMmZiMmU1NTIwZDRmZjJwLTEsCisgICAgMHgxLjkyMzBmZXAxNQorICB9LAorICB7IC8vIEVudHJ5IDE3MQorICAgIDB4MS5mZDQzZjhlODkxZTIyN2RkYWQyZmIyZTU1MjBkNGZmMnAtMSwKKyAgICAtMHgxLjkyMzBmZXAxNQorICB9LAorICB7IC8vIEVudHJ5IDE3MgorICAgIDB4MS5jZjM4ZjYyMTJlN2U2Mjc2ZjRhZGQ1NDg3OGYxYTdkYnAtMSwKKyAgICAweDEuOTUxMGM4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzMKKyAgICAtMHgxLmNmMzhmNjIxMmU3ZTYyNzZmNGFkZDU0ODc4ZjFhN2RicC0xLAorICAgIC0weDEuOTUxMGM4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxNzQKKyAgICAweDEuZDAzZDQ1MDI0YzNjYTRhMmM0ZTFhOTE4NTYxMzUwNDZwLTEsCisgICAgMHgxLjk1MTFlNnA2CisgIH0sCisgIHsgLy8gRW50cnkgMTc1CisgICAgLTB4MS5kMDNkNDUwMjRjM2NhNGEyYzRlMWE5MTg1NjEzNTA0NnAtMSwKKyAgICAtMHgxLjk1MTFlNnA2CisgIH0sCisgIHsgLy8gRW50cnkgMTc2CisgICAgMHgxLjA1NTRlYjVjYmQzOTNlNGYwNzcwYzg2NTI4ZjM5ZWUxcDE3LAorICAgIDB4MS45NzlmMjRwOQorICB9LAorICB7IC8vIEVudHJ5IDE3NworICAgIC0weDEuMDU1NGViNWNiZDM5M2U0ZjA3NzBjODY1MjhmMzllZTFwMTcsCisgICAgLTB4MS45NzlmMjRwOQorICB9LAorICB7IC8vIEVudHJ5IDE3OAorICAgIDB4MS5mYWQ1ZGY5M2RlMzA1MWNmMDE4YWIzMmMwYjMyMzU3MXAtMSwKKyAgICAweDEuYTFlODYycDExOQorICB9LAorICB7IC8vIEVudHJ5IDE3OQorICAgIC0weDEuZmFkNWRmOTNkZTMwNTFjZjAxOGFiMzJjMGIzMjM1NzFwLTEsCisgICAgLTB4MS5hMWU4NjJwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMTgwCisgICAgMHgxLmZmOTgxYjE1MzRmNzgwMTZiZWE0ZDk1ODgyNTRlOTk2cDMsCisgICAgMHgxLmFkMWZwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODEKKyAgICAtMHgxLmZmOTgxYjE1MzRmNzgwMTZiZWE0ZDk1ODgyNTRlOTk2cDMsCisgICAgLTB4MS5hZDFmcDYzCisgIH0sCisgIHsgLy8gRW50cnkgMTgyCisgICAgLTB4MS5mZmY0YTFkYjFlMWUzOGM0MzhkZGQzOGJiOTRmNmQzMXAxLAorICAgIDB4MS5hZGEzZGFwMzkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODMKKyAgICAweDEuZmZmNGExZGIxZTFlMzhjNDM4ZGRkMzhiYjk0ZjZkMzFwMSwKKyAgICAtMHgxLmFkYTNkYXAzOQorICB9LAorICB7IC8vIEVudHJ5IDE4NAorICAgIDB4MS5kMDE1MjkwMjNkOTUxMzkwMjAwYTQyNTJmMDM4YjRhZnAtMSwKKyAgICAweDEuYjEyNWJhcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODUKKyAgICAtMHgxLmQwMTUyOTAyM2Q5NTEzOTAyMDBhNDI1MmYwMzhiNGFmcC0xLAorICAgIC0weDEuYjEyNWJhcDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODYKKyAgICAweDEuZDY3ZmExMDVmNzY4Njg2MTJjODRmNzRhMWYzOGYwYWNwLTIsCisgICAgMHgxLmI5MGEwMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDE4NworICAgIC0weDEuZDY3ZmExMDVmNzY4Njg2MTJjODRmNzRhMWYzOGYwYWNwLTIsCisgICAgLTB4MS5iOTBhMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODgKKyAgICAweDEuOTk2NjNkYTk0ZGJkNTcxOTljYjhlM2RhZTcwMTgzNThwLTIzLAorICAgIDB4MS5iZWVlZWVwODAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxODkKKyAgICAtMHgxLjk5NjYzZGE5NGRiZDU3MTk5Y2I4ZTNkYWU3MDE4MzU4cC0yMywKKyAgICAtMHgxLmJlZWVlZXA4MAorICB9LAorICB7IC8vIEVudHJ5IDE5MAorICAgIDB4MS5lYjk2NTcxZWI5ZGExMzM3ZTcwM2NjMjBlNDFlOTcxOXAtMTMsCisgICAgMHgxLmMzYWJmMHAyNAorICB9LAorICB7IC8vIEVudHJ5IDE5MQorICAgIC0weDEuZWI5NjU3MWViOWRhMTMzN2U3MDNjYzIwZTQxZTk3MTlwLTEzLAorICAgIC0weDEuYzNhYmYwcDI0CisgIH0sCisgIHsgLy8gRW50cnkgMTkyCisgICAgMHgxLmUxOThjNDhiZWY5NTQxNTFlZTA3NTgxNWQ4NWM1MzYzcDAsCisgICAgMHgxLmM3MWM3NHAxMTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxOTMKKyAgICAtMHgxLmUxOThjNDhiZWY5NTQxNTFlZTA3NTgxNWQ4NWM1MzYzcDAsCisgICAgLTB4MS5jNzFjNzRwMTE2CisgIH0sCisgIHsgLy8gRW50cnkgMTk0CisgICAgLTB4MS5lNTBlNTI0NjEwNzI4Y2ZiMjM5Y2M2MzA1YjIxMmZkNnAtMSwKKyAgICAweDEuY2MzMjUycDE4CisgIH0sCisgIHsgLy8gRW50cnkgMTk1CisgICAgMHgxLmU1MGU1MjQ2MTA3MjhjZmIyMzljYzYzMDViMjEyZmQ2cC0xLAorICAgIC0weDEuY2MzMjUycDE4CisgIH0sCisgIHsgLy8gRW50cnkgMTk2CisgICAgLTB4MS42YTY5ZTdiYjIxYjUyMDMwOTY0YmMyMWNlZDA3N2M3MXAxOSwKKyAgICAweDEuZDM4YTJhcDE5CisgIH0sCisgIHsgLy8gRW50cnkgMTk3CisgICAgMHgxLjZhNjllN2JiMjFiNTIwMzA5NjRiYzIxY2VkMDc3YzcxcDE5LAorICAgIC0weDEuZDM4YTJhcDE5CisgIH0sCisgIHsgLy8gRW50cnkgMTk4CisgICAgMHgxLjY1MjliZjgxYjk1OGNhNzgxY2RhYWM3Y2VjNmU2MzZlcDAsCisgICAgMHgxLmRmMDY0OHAyNAorICB9LAorICB7IC8vIEVudHJ5IDE5OQorICAgIC0weDEuNjUyOWJmODFiOTU4Y2E3ODFjZGFhYzdjZWM2ZTYzNmVwMCwKKyAgICAtMHgxLmRmMDY0OHAyNAorICB9LAorICB7IC8vIEVudHJ5IDIwMAorICAgIDB4MS42NTllNDNiNDMxNWYyMWJhNWU3MDQ4YjFkOGQ3ODE1Y3AwLAorICAgIDB4MS5kZjIyMDRwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDEKKyAgICAtMHgxLjY1OWU0M2I0MzE1ZjIxYmE1ZTcwNDhiMWQ4ZDc4MTVjcDAsCisgICAgLTB4MS5kZjIyMDRwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDIKKyAgICAtMHgxLjcxYTU4MGZmYzRlMTY3YWUwZWY4YjAyZDVkMjdjOTlkcC0xLAorICAgIDB4MS5kZjM0cDI0CisgIH0sCisgIHsgLy8gRW50cnkgMjAzCisgICAgMHgxLjcxYTU4MGZmYzRlMTY3YWUwZWY4YjAyZDVkMjdjOTlkcC0xLAorICAgIC0weDEuZGYzNHAyNAorICB9LAorICB7IC8vIEVudHJ5IDIwNAorICAgIDB4MS5lY2YxMTkwMDAwMTdhMmNhZWY0MjkwYjRkNmM2Mzc4NXAtNCwKKyAgICAweDEuZWE5NTFhcC00CisgIH0sCisgIHsgLy8gRW50cnkgMjA1CisgICAgLTB4MS5lY2YxMTkwMDAwMTdhMmNhZWY0MjkwYjRkNmM2Mzc4NXAtNCwKKyAgICAtMHgxLmVhOTUxYXAtNAorICB9LAorICB7IC8vIEVudHJ5IDIwNgorICAgIDB4MS5jY2Q1NTgyMWZhZDY5NzU1YzJkODI0YmUyYmZkNGM2NHAtMSwKKyAgICAweDEuZWZlZGM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDcKKyAgICAtMHgxLmNjZDU1ODIxZmFkNjk3NTVjMmQ4MjRiZTJiZmQ0YzY0cC0xLAorICAgIC0weDEuZWZlZGM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMDgKKyAgICAweDEuZDY5ODFlZmZmZmYyNTQ5NjM0Njg2YTI0ZGZkYTc3Y2VwLTEsCisgICAgMHgxLmYxNDNhMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjA5CisgICAgLTB4MS5kNjk4MWVmZmZmZjI1NDk2MzQ2ODZhMjRkZmRhNzdjZXAtMSwKKyAgICAtMHgxLmYxNDNhMnAxCisgIH0sCisgIHsgLy8gRW50cnkgMjEwCisgICAgMHgxLmRiYTRkMTEyNGE3OGE2ODAzYTA5NjVhZjBhYjc5Zjg4cDMsCisgICAgMHgxLmYyNWIwNnAyCisgIH0sCisgIHsgLy8gRW50cnkgMjExCisgICAgLTB4MS5kYmE0ZDExMjRhNzhhNjgwM2EwOTY1YWYwYWI3OWY4OHAzLAorICAgIC0weDEuZjI1YjA2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTIKKyAgICAtMHgxLjZkZmNiYWZmZDc4MDIzZWNmYWJiZjdjY2YwYTBlNGI0cC0xLAorICAgIDB4MS5mMzIyMThwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTMKKyAgICAweDEuNmRmY2JhZmZkNzgwMjNlY2ZhYmJmN2NjZjBhMGU0YjRwLTEsCisgICAgLTB4MS5mMzIyMThwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTQKKyAgICAtMHgxLmVjMzVjZjAwMDA2MTA3OTI5NWVhZDcxNDg5MmRiMWNhcDEsCisgICAgMHgxLmY0NGRiY3A1OAorICB9LAorICB7IC8vIEVudHJ5IDIxNQorICAgIDB4MS5lYzM1Y2YwMDAwNjEwNzkyOTVlYWQ3MTQ4OTJkYjFjYXAxLAorICAgIC0weDEuZjQ0ZGJjcDU4CisgIH0sCisgIHsgLy8gRW50cnkgMjE2CisgICAgMHgxLmRiMDZjMTBkMmE5NTk3MTViYzBhMmU3NWU2ZGEwOTNicDQsCisgICAgMHgxLmY0N2ZmZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjE3CisgICAgLTB4MS5kYjA2YzEwZDJhOTU5NzE1YmMwYTJlNzVlNmRhMDkzYnA0LAorICAgIC0weDEuZjQ3ZmZlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMTgKKyAgICAweDEuZmZmZmViNTU2NDNiOWE2NDhjMjcyMGJkZTFkMjI3NjRwLTEsCisgICAgMHgxLmY2YTdhMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjE5CisgICAgLTB4MS5mZmZmZWI1NTY0M2I5YTY0OGMyNzIwYmRlMWQyMjc2NHAtMSwKKyAgICAtMHgxLmY2YTdhMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMjIwCisgICAgMHgxLmMwYTU3MGZmZmZkMzc5ZDA5NzJlYTc4Y2QwNDBjMzA0cC0zLAorICAgIDB4MS5mNmRlZDhwOAorICB9LAorICB7IC8vIEVudHJ5IDIyMQorICAgIC0weDEuYzBhNTcwZmZmZmQzNzlkMDk3MmVhNzhjZDA0MGMzMDRwLTMsCisgICAgLTB4MS5mNmRlZDhwOAorICB9LAorICB7IC8vIEVudHJ5IDIyMgorICAgIC0weDEuY2RmMThkMDEyMzQ4MDlhNjg5NTMxNWU5ZGU1OWQ4NjRwLTEsCisgICAgMHgxLmY3ZmZiZXAxNQorICB9LAorICB7IC8vIEVudHJ5IDIyMworICAgIDB4MS5jZGYxOGQwMTIzNDgwOWE2ODk1MzE1ZTlkZTU5ZDg2NHAtMSwKKyAgICAtMHgxLmY3ZmZiZXAxNQorICB9LAorICB7IC8vIEVudHJ5IDIyNAorICAgIC0weDEuODJmMTk2ZmI2MGE4MWRjM2I0ZGNiYmM4MzFhYjhmODVwLTEsCisgICAgMHgxLmY3ZmZmZXA0NworICB9LAorICB7IC8vIEVudHJ5IDIyNQorICAgIDB4MS44MmYxOTZmYjYwYTgxZGMzYjRkY2JiYzgzMWFiOGY4NXAtMSwKKyAgICAtMHgxLmY3ZmZmZXA0NworICB9LAorICB7IC8vIEVudHJ5IDIyNgorICAgIDB4MS42YzAzNTkwZjNmZTNiN2QyOWU4OWVlMGU2NWZjOWIxZXAwLAorICAgIDB4MS5mODdkNThwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjcKKyAgICAtMHgxLjZjMDM1OTBmM2ZlM2I3ZDI5ZTg5ZWUwZTY1ZmM5YjFlcDAsCisgICAgLTB4MS5mODdkNThwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMjgKKyAgICAtMHgxLmM3YWU2ZTljMTQ1YjhkNTRmNzcxOTg5M2ZhMDM4NDlmcDI3LAorICAgIDB4MS5mOWNiZTJwNworICB9LAorICB7IC8vIEVudHJ5IDIyOQorICAgIDB4MS5jN2FlNmU5YzE0NWI4ZDU0Zjc3MTk4OTNmYTAzODQ5ZnAyNywKKyAgICAtMHgxLmY5Y2JlMnA3CisgIH0sCisgIHsgLy8gRW50cnkgMjMwCisgICAgMHgxLjZkMjkxMDAwNTE2MWIyYmZhNjExMzRkMGZiYzllOWMwcDAsCisgICAgMHgxLmZkODZiY3AyNAorICB9LAorICB7IC8vIEVudHJ5IDIzMQorICAgIC0weDEuNmQyOTEwMDA1MTYxYjJiZmE2MTEzNGQwZmJjOWU5YzBwMCwKKyAgICAtMHgxLmZkODZiY3AyNAorICB9LAorICB7IC8vIEVudHJ5IDIzMgorICAgIDB4MS42YzhmOGQwYzNhZDRiYmI2MzlhM2YzYTk0MjM3ZjY5ZnAwLAorICAgIDB4MS5mZWZhNGFwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzMKKyAgICAtMHgxLjZjOGY4ZDBjM2FkNGJiYjYzOWEzZjNhOTQyMzdmNjlmcDAsCisgICAgLTB4MS5mZWZhNGFwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzQKKyAgICAweDEuMDBlNWI1ZmZmYTEzZjdkOWM0YjBiNTJmZTExYTMzOWJwLTMsCisgICAgMHgxLmZmMWZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDIzNQorICAgIC0weDEuMDBlNWI1ZmZmYTEzZjdkOWM0YjBiNTJmZTExYTMzOWJwLTMsCisgICAgLTB4MS5mZjFmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzYKKyAgICAweDEuZmYzZjQxZjAxYzViMzYwY2NlNzViNjc4NzdmZmQ2NzdwMCwKKyAgICAweDEuZmY3ZmZlcDQxCisgIH0sCisgIHsgLy8gRW50cnkgMjM3CisgICAgLTB4MS5mZjNmNDFmMDFjNWIzNjBjY2U3NWI2Nzg3N2ZmZDY3N3AwLAorICAgIC0weDEuZmY3ZmZlcDQxCisgIH0sCisgIHsgLy8gRW50cnkgMjM4CisgICAgLTB4MS44NmRkNWUwMGQ3ZWRjNzI2Njk2OWJmNTE5ODQzOGJhYnAwLAorICAgIDB4MS5mZjlmZmVwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyMzkKKyAgICAweDEuODZkZDVlMDBkN2VkYzcyNjY5NjliZjUxOTg0MzhiYWJwMCwKKyAgICAtMHgxLmZmOWZmZXAxMgorICB9LAorICB7IC8vIEVudHJ5IDI0MAorICAgIC0weDEuZjhmZTQ1NzlmZGVlMjQ5MWM3ZDg1NzJlYTUxMmZlOTNwNSwKKyAgICAweDEuZmZmYmZlcDQ1CisgIH0sCisgIHsgLy8gRW50cnkgMjQxCisgICAgMHgxLmY4ZmU0NTc5ZmRlZTI0OTFjN2Q4NTcyZWE1MTJmZTkzcDUsCisgICAgLTB4MS5mZmZiZmVwNDUKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDIKKyAgICAtMHgxLjg1ZmY0NjJmMGY4NmZmNDQ2NDEzMDVkYTE4ZWE4ZmM4cC0xMywKKyAgICAweDEuZmZmZGYycDIzCisgIH0sCisgIHsgLy8gRW50cnkgMjQzCisgICAgMHgxLjg1ZmY0NjJmMGY4NmZmNDQ2NDEzMDVkYTE4ZWE4ZmM4cC0xMywKKyAgICAtMHgxLmZmZmRmMnAyMworICB9LAorICB7IC8vIEVudHJ5IDI0NAorICAgIDB4MS4zMzkyZTJmZmJjYjI1ZmMxYjAxNmI5MTM2ZTY5YzAwYnAtMiwKKyAgICAweDEuZmZmZGZlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDUKKyAgICAtMHgxLjMzOTJlMmZmYmNiMjVmYzFiMDE2YjkxMzZlNjljMDBicC0yLAorICAgIC0weDEuZmZmZGZlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNDYKKyAgICAtMHgxLjJmNmM0YmQyNjA1ZjAzN2Y4NjA5ODE5Zjg2NWE4ZGNicDgsCisgICAgMHgxLmZmZmUzZXA0MQorICB9LAorICB7IC8vIEVudHJ5IDI0NworICAgIDB4MS4yZjZjNGJkMjYwNWYwMzdmODYwOTgxOWY4NjVhOGRjYnA4LAorICAgIC0weDEuZmZmZTNlcDQxCisgIH0sCisgIHsgLy8gRW50cnkgMjQ4CisgICAgLTB4MS41M2EyZTkwZTgxNzcyNzI1NWU2ZGRmNjRlMjhjMDE5Y3AtOSwKKyAgICAweDEuZmZmZTdlcDEwMworICB9LAorICB7IC8vIEVudHJ5IDI0OQorICAgIDB4MS41M2EyZTkwZTgxNzcyNzI1NWU2ZGRmNjRlMjhjMDE5Y3AtOSwKKyAgICAtMHgxLmZmZmU3ZXAxMDMKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTAKKyAgICAtMHgxLmIzNDY3NmYwOTViNWIxYTMyNTQyNmNkZjQyYzA0Nzk5cDIsCisgICAgMHgxLmZmZmY3ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgMjUxCisgICAgMHgxLmIzNDY3NmYwOTViNWIxYTMyNTQyNmNkZjQyYzA0Nzk5cDIsCisgICAgLTB4MS5mZmZmN2VwMgorICB9LAorICB7IC8vIEVudHJ5IDI1MgorICAgIDB4MS5mNjQwZDk0ZTYyNDFkYjQzNDllMzNiZWQ2N2NiZDNkYnAtMSwKKyAgICAweDEuZmZmZjdlcDExOQorICB9LAorICB7IC8vIEVudHJ5IDI1MworICAgIC0weDEuZjY0MGQ5NGU2MjQxZGI0MzQ5ZTMzYmVkNjdjYmQzZGJwLTEsCisgICAgLTB4MS5mZmZmN2VwMTE5CisgIH0sCisgIHsgLy8gRW50cnkgMjU0CisgICAgMHgxLjUyNmMyNjliZGRhOGE4OWQ5MDcwNjg3MGYzODAxZWFmcC0xLAorICAgIDB4MS5mZmZmZWVwNAorICB9LAorICB7IC8vIEVudHJ5IDI1NQorICAgIC0weDEuNTI2YzI2OWJkZGE4YTg5ZDkwNzA2ODcwZjM4MDFlYWZwLTEsCisgICAgLTB4MS5mZmZmZWVwNAorICB9LAorICB7IC8vIEVudHJ5IDI1NgorICAgIC0weDEuYTM3NTkzYzEwNWUxNDYyYzJhMzcyNjA2MDM0ODNkYTZwMSwKKyAgICAweDEuZmZmZmZjcDEyCisgIH0sCisgIHsgLy8gRW50cnkgMjU3CisgICAgMHgxLmEzNzU5M2MxMDVlMTQ2MmMyYTM3MjYwNjAzNDgzZGE2cDEsCisgICAgLTB4MS5mZmZmZmNwMTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTgKKyAgICAtMHgxLnAtMTQ5LAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNTkKKyAgICAweDEucC0xNDksCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgMjYwCisgICAgMC4wLAorICAgIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDI2MQorICAgIDB4MS5wLTE0OSwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjIKKyAgICAtMHgxLnAtMTQ5LAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjMKKyAgICAtMHgxLjAwMDAwMnAtMTI2LAorICAgIC0weDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjQKKyAgICAweDEuMDAwMDAycC0xMjYsCisgICAgMHgxLjAwMDAwMnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjY1CisgICAgLTB4MS5wLTEyNiwKKyAgICAtMHgxLnAtMTI2CisgIH0sCisgIHsgLy8gRW50cnkgMjY2CisgICAgMHgxLnAtMTI2LAorICAgIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI2NworICAgIC0weDEuZmZmZmZjcC0xMjcsCisgICAgLTB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDI2OAorICAgIDB4MS5mZmZmZmNwLTEyNywKKyAgICAweDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNjkKKyAgICAweDEuZmZmZmZjcC0xMjcsCisgICAgMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjcwCisgICAgLTB4MS5mZmZmZmNwLTEyNywKKyAgICAtMHgxLmZmZmZmY3AtMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMjcxCisgICAgMHgxLnAtMTI2LAorICAgIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI3MgorICAgIC0weDEucC0xMjYsCisgICAgLTB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDI3MworICAgIDB4MS4wMDAwMDJwLTEyNiwKKyAgICAweDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzQKKyAgICAtMHgxLjAwMDAwMnAtMTI2LAorICAgIC0weDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyNzUKKyAgICAweDEuOTk5OTlhNTc2MTlmNjc5YjYxOTNhZjhhMGE3YTg3NzhwLTEzLAorICAgIDB4MS45OTk5OWFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMjc2CisgICAgLTB4MS45OTk5OWE1NzYxOWY2NzliNjE5M2FmOGEwYTdhODc3OHAtMTMsCisgICAgLTB4MS45OTk5OWFwLTEzCisgIH0sCisgIHsgLy8gRW50cnkgMjc3CisgICAgMHgxLjk5OTk5YjVkODY3ZWFhZGQwMzA1NTg3Mzk5OTA1MzExcC0xMiwKKyAgICAweDEuOTk5OTlhcC0xMgorICB9LAorICB7IC8vIEVudHJ5IDI3OAorICAgIC0weDEuOTk5OTliNWQ4NjdlYWFkZDAzMDU1ODczOTk5MDUzMTFwLTEyLAorICAgIC0weDEuOTk5OTlhcC0xMgorICB9LAorICB7IC8vIEVudHJ5IDI3OQorICAgIDB4MS4zMzMzMzY0ZGQyZmI5NDk2NDViZWE5OThjYmMxZWU3MnAtMTEsCisgICAgMHgxLjMzMzMzNHAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODAKKyAgICAtMHgxLjMzMzMzNjRkZDJmYjk0OTY0NWJlYTk5OGNiYzFlZTcycC0xMSwKKyAgICAtMHgxLjMzMzMzNHAtMTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODEKKyAgICAweDEuOTk5OTlmNzYxYTBiNzI2YzE4YjAwYzY0OTZjYmUxMGRwLTExLAorICAgIDB4MS45OTk5OWFwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjgyCisgICAgLTB4MS45OTk5OWY3NjFhMGI3MjZjMThiMDBjNjQ5NmNiZTEwZHAtMTEsCisgICAgLTB4MS45OTk5OWFwLTExCisgIH0sCisgIHsgLy8gRW50cnkgMjgzCisgICAgMHgxLjAwMDAwNTU1NTU3Nzc3Nzg1NDg1NGRlZGMyOGVhZDUxcC0xMCwKKyAgICAweDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI4NAorICAgIC0weDEuMDAwMDA1NTU1NTc3Nzc3ODU0ODU0ZGVkYzI4ZWFkNTFwLTEwLAorICAgIC0weDEucC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI4NQorICAgIDB4MS4zMzMzM2QzNzRjMmUwNWQxMDgxNjEzNzgzODlmYzg0ZnAtMTAsCisgICAgMHgxLjMzMzMzNHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODYKKyAgICAtMHgxLjMzMzMzZDM3NGMyZTA1ZDEwODE2MTM3ODM4OWZjODRmcC0xMCwKKyAgICAtMHgxLjMzMzMzNHAtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyODcKKyAgICAweDEuNjY2Njc2YTI3YTZkODIxNGQxOThiMjMyMWVmOWE5ZGNwLTEwLAorICAgIDB4MS42NjY2NjhwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjg4CisgICAgLTB4MS42NjY2NzZhMjdhNmQ4MjE0ZDE5OGIyMzIxZWY5YTlkY3AtMTAsCisgICAgLTB4MS42NjY2NjhwLTEwCisgIH0sCisgIHsgLy8gRW50cnkgMjg5CisgICAgMHgxLjk5OTliMWQ4Njk4YzI0Y2ZlM2I5MGZmZDAwNmZmZGNhcC0xMCwKKyAgICAweDEuOTk5OTljcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI5MAorICAgIC0weDEuOTk5OWIxZDg2OThjMjRjZmUzYjkwZmZkMDA2ZmZkY2FwLTEwLAorICAgIC0weDEuOTk5OTljcC0xMAorICB9LAorICB7IC8vIEVudHJ5IDI5MQorICAgIDB4MS5jY2NjZWIxYWEyMTlmNzFiYjE5MjA4ZDc0YTczOWJiMXAtMTAsCisgICAgMHgxLmNjY2NjY3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTIKKyAgICAtMHgxLmNjY2NlYjFhYTIxOWY3MWJiMTkyMDhkNzRhNzM5YmIxcC0xMCwKKyAgICAtMHgxLmNjY2NjY3AtMTAKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTMKKyAgICAweDEuMDY2N2Q1OTY4YmJiYmU0MDM3MDI0YjljOTNmN2IwNDlwLTcsCisgICAgMHgxLjA2NjY2NnAtNworICB9LAorICB7IC8vIEVudHJ5IDI5NAorICAgIC0weDEuMDY2N2Q1OTY4YmJiYmU0MDM3MDI0YjljOTNmN2IwNDlwLTcsCisgICAgLTB4MS4wNjY2NjZwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTUKKyAgICAweDEuY2NkNDkyZDAzNWEyMjc3NThiOGMzMGQ3OWIxNjg4MjZwLTcsCisgICAgMHgxLmNjY2NjY3AtNworICB9LAorICB7IC8vIEVudHJ5IDI5NgorICAgIC0weDEuY2NkNDkyZDAzNWEyMjc3NThiOGMzMGQ3OWIxNjg4MjZwLTcsCisgICAgLTB4MS5jY2NjY2NwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTcKKyAgICAweDEuNDlhNGZhNjhlOTBkMjI4ZjQ0NTAyNmViMjlhZGNlZmRwLTYsCisgICAgMHgxLjQ5OTk5OHAtNgorICB9LAorICB7IC8vIEVudHJ5IDI5OAorICAgIC0weDEuNDlhNGZhNjhlOTBkMjI4ZjQ0NTAyNmViMjlhZGNlZmRwLTYsCisgICAgLTB4MS40OTk5OThwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAyOTkKKyAgICAweDEuYWNlNWRlMDkwNjAzZmRhOGY1MTlhZmVjZTA1YzE3ZWFwLTYsCisgICAgMHgxLmFjY2NjY3AtNgorICB9LAorICB7IC8vIEVudHJ5IDMwMAorICAgIC0weDEuYWNlNWRlMDkwNjAzZmRhOGY1MTlhZmVjZTA1YzE3ZWFwLTYsCisgICAgLTB4MS5hY2NjY2NwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDEKKyAgICAweDEuMDgxNzY3ZmQzY2I2ODVmN2IwNjkxNDZjZTMzMzM4NTFwLTUsCisgICAgMHgxLjA4cC01CisgIH0sCisgIHsgLy8gRW50cnkgMzAyCisgICAgLTB4MS4wODE3NjdmZDNjYjY4NWY3YjA2OTE0NmNlMzMzMzg1MXAtNSwKKyAgICAtMHgxLjA4cC01CisgIH0sCisgIHsgLy8gRW50cnkgMzAzCisgICAgMHgxLjM5YzBkNzQ1MzM0YTMzODdkNjcyZTRhMDU2MjRiY2E1cC01LAorICAgIDB4MS4zOTk5OWFwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDQKKyAgICAtMHgxLjM5YzBkNzQ1MzM0YTMzODdkNjcyZTRhMDU2MjRiY2E1cC01LAorICAgIC0weDEuMzk5OTlhcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzA1CisgICAgMHgxLjZiNzAyYzYyN2ZjMDBiNzc3ZWE4NjYxY2NlMzYwNjFjcC01LAorICAgIDB4MS42YjMzMzRwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDYKKyAgICAtMHgxLjZiNzAyYzYyN2ZjMDBiNzc3ZWE4NjYxY2NlMzYwNjFjcC01LAorICAgIC0weDEuNmIzMzM0cC01CisgIH0sCisgIHsgLy8gRW50cnkgMzA3CisgICAgMHgxLjlkMjY1NzRjZDg0NzU5YmZmZjUxZDhiYjE4NTM4YTBkcC01LAorICAgIDB4MS45Y2NjY2VwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMDgKKyAgICAtMHgxLjlkMjY1NzRjZDg0NzU5YmZmZjUxZDhiYjE4NTM4YTBkcC01LAorICAgIC0weDEuOWNjY2NlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMzA5CisgICAgMHgxLmNlZTQ0NjdlMTViYjdlZjU5NjU4YThlZGRjMTk1MTY3cC01LAorICAgIDB4MS5jZTY2NjZwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTAKKyAgICAtMHgxLmNlZTQ0NjdlMTViYjdlZjU5NjU4YThlZGRjMTk1MTY3cC01LAorICAgIC0weDEuY2U2NjY2cC01CisgIH0sCisgIHsgLy8gRW50cnkgMzExCisgICAgMHgxLmExZWFlZDdhYTYyYTc0MGMwYjJlMDliY2QwZjczNWI1cC0xLAorICAgIDB4MS41ZTdmYzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTIKKyAgICAtMHgxLmExZWFlZDdhYTYyYTc0MGMwYjJlMDliY2QwZjczNWI1cC0xLAorICAgIC0weDEuNWU3ZmM0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzEzCisgICAgMHgxLmQ5M2I4OTFjYmNiMTVhYWM4YjU3OTZhMGExNmJmMjllcDEsCisgICAgMHgxLjRlN2ZjNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzE0CisgICAgLTB4MS5kOTNiODkxY2JjYjE1YWFjOGI1Nzk2YTBhMTZiZjI5ZXAxLAorICAgIC0weDEuNGU3ZmM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMTUKKyAgICAtMHgxLjU2M2FkMDYzNDg2Yzc5NzY1M2E2ODk1NWMwYmIxYzBicDEsCisgICAgMHgxLmVkYmZhNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzE2CisgICAgMHgxLjU2M2FkMDYzNDg2Yzc5NzY1M2E2ODk1NWMwYmIxYzBicDEsCisgICAgLTB4MS5lZGJmYTZwMAorICB9LAorICB7IC8vIEVudHJ5IDMxNworICAgIC0weDEuNTc2Yjc4OWQ1NDRiNmQwMzdjM2I3MTE5ZmQ2ZGQ2cC0xLAorICAgIDB4MS40NjdmYzRwMQorICB9LAorICB7IC8vIEVudHJ5IDMxOAorICAgIDB4MS41NzZiNzg5ZDU0NGI2ZDAzN2MzYjcxMTlmZDZkZDZwLTEsCisgICAgLTB4MS40NjdmYzRwMQorICB9LAorICB7IC8vIEVudHJ5IDMxOQorICAgIDB4MS4wMDE1MDY1MmIyZDc5MzFlMGM4Nzg4NzViOWY0YmE4MnAtNSwKKyAgICAweDEuOTYxZmI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjAKKyAgICAtMHgxLjAwMTUwNjUyYjJkNzkzMWUwYzg3ODg3NWI5ZjRiYTgycC01LAorICAgIC0weDEuOTYxZmI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjEKKyAgICAweDEuODdlOTg3YjZlNTA3MWRiZDNmNzU1YTc2YTI3ZDhmYzhwLTEsCisgICAgMHgxLmU1YmZhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzIyCisgICAgLTB4MS44N2U5ODdiNmU1MDcxZGJkM2Y3NTVhNzZhMjdkOGZjOHAtMSwKKyAgICAtMHgxLmU1YmZhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzIzCisgICAgMHgxLmE0OWU1NWJjZTFjODk5MTIzMjM4N2VjZDExMjQ2OThhcDEsCisgICAgMHgxLjFhYWZjYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzI0CisgICAgLTB4MS5hNDllNTViY2UxYzg5OTEyMzIzODdlY2QxMTI0Njk4YXAxLAorICAgIC0weDEuMWFhZmNhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjUKKyAgICAtMHgxLjc5Y2YwMzEzNWE5MzY3OWQ1YWEyZTFkY2M1YWRlZGFmcDEsCisgICAgMHgxLjQyN2ZjMnAyCisgIH0sCisgIHsgLy8gRW50cnkgMzI2CisgICAgMHgxLjc5Y2YwMzEzNWE5MzY3OWQ1YWEyZTFkY2M1YWRlZGFmcDEsCisgICAgLTB4MS40MjdmYzJwMgorICB9LAorICB7IC8vIEVudHJ5IDMyNworICAgIC0weDEuNmYxZjg2ZmRiMjBiYzk5MjM2MjdiOTRkNzcxZjUzODhwLTEsCisgICAgMHgxLjZhNGZiYXAyCisgIH0sCisgIHsgLy8gRW50cnkgMzI4CisgICAgMHgxLjZmMWY4NmZkYjIwYmM5OTIzNjI3Yjk0ZDc3MWY1Mzg4cC0xLAorICAgIC0weDEuNmE0ZmJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMjkKKyAgICAtMHgxLjY3NzQ3Y2E4MDI4MjFjNjZjODdhMDg2NjM4ZjI4ZDM2cC0xLAorICAgIDB4MS42YWYyZjBwMgorICB9LAorICB7IC8vIEVudHJ5IDMzMAorICAgIDB4MS42Nzc0N2NhODAyODIxYzY2Yzg3YTA4NjYzOGYyOGQzNnAtMSwKKyAgICAtMHgxLjZhZjJmMHAyCisgIH0sCisgIHsgLy8gRW50cnkgMzMxCisgICAgLTB4MS42MjZhMzAyOThkZjBjNDJjMmNmN2E4ZjljMTY2ZDU1ZHAxLAorICAgIDB4MS40M2M2MmFwMgorICB9LAorICB7IC8vIEVudHJ5IDMzMgorICAgIDB4MS42MjZhMzAyOThkZjBjNDJjMmNmN2E4ZjljMTY2ZDU1ZHAxLAorICAgIC0weDEuNDNjNjJhcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzMKKyAgICAweDEuZDZhZDhhMjJhNDQwN2NjNjhkZjIwY2RhMWVhMWM2YWFwMSwKKyAgICAweDEuMWM5OTY0cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzQKKyAgICAtMHgxLmQ2YWQ4YTIyYTQ0MDdjYzY4ZGYyMGNkYTFlYTFjNmFhcDEsCisgICAgLTB4MS4xYzk5NjRwMgorICB9LAorICB7IC8vIEVudHJ5IDMzNQorICAgIDB4MS5hOTRkMDBhMTcxMGQ5YmNjN2I4MDQ4MWY0Mjg1N2QwNXAtMSwKKyAgICAweDEuZWFkOTNjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzYKKyAgICAtMHgxLmE5NGQwMGExNzEwZDliY2M3YjgwNDgxZjQyODU3ZDA1cC0xLAorICAgIC0weDEuZWFkOTNjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzMzcKKyAgICAweDEuNGNiOWY0ZDMxNWE5OTViMjhiZmJkNmU2YTA5MDU3MzhwLTQsCisgICAgMHgxLjljN2ZiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzM4CisgICAgLTB4MS40Y2I5ZjRkMzE1YTk5NWIyOGJmYmQ2ZTZhMDkwNTczOHAtNCwKKyAgICAtMHgxLjljN2ZiMHAxCisgIH0sCisgIHsgLy8gRW50cnkgMzM5CisgICAgLTB4MS4yY2I2ZjNiYTUxY2Q0Y2EzODVkN2Y0YTc1NjdjM2EwYnAtMSwKKyAgICAweDEuNGUyNjI0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDAKKyAgICAweDEuMmNiNmYzYmE1MWNkNGNhMzg1ZDdmNGE3NTY3YzNhMGJwLTEsCisgICAgLTB4MS40ZTI2MjRwMQorICB9LAorICB7IC8vIEVudHJ5IDM0MQorICAgIC0weDEuMThkOTM5OWE4MjkwYjNmOGI0MmE0YWZjMWY0YjIxZGVwMSwKKyAgICAweDEuZmY5OTMycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDIKKyAgICAweDEuMThkOTM5OWE4MjkwYjNmOGI0MmE0YWZjMWY0YjIxZGVwMSwKKyAgICAtMHgxLmZmOTkzMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMzQzCisgICAgMHgxLjU2ZmQ5NGIwYzA2ODE2MTNkMzgzMTYwODQ1N2Y1YmY2cDIsCisgICAgMHgxLjYyZTYxY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMzQ0CisgICAgLTB4MS41NmZkOTRiMGMwNjgxNjEzZDM4MzE2MDg0NTdmNWJmNnAyLAorICAgIC0weDEuNjJlNjFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDUKKyAgICAweDEuZjRhZDM3ZjEzZTgxODY0MWZjMTU1NWJmNzhlMGU5NDJwLTEsCisgICAgMHgxLjhjNjYyY3AtMQorICB9LAorICB7IC8vIEVudHJ5IDM0NgorICAgIC0weDEuZjRhZDM3ZjEzZTgxODY0MWZjMTU1NWJmNzhlMGU5NDJwLTEsCisgICAgLTB4MS44YzY2MmNwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNDcKKyAgICAweDEuNmE3ZTMwYWQ4NDYwZjFhNzEwNDc5ZTJkYjk0OTVjOWNwMywKKyAgICAtMHgxLmE4YWExY3AwCisgIH0sCisgIHsgLy8gRW50cnkgMzQ4CisgICAgLTB4MS42YTdlMzBhZDg0NjBmMWE3MTA0NzllMmRiOTQ5NWM5Y3AzLAorICAgIDB4MS5hOGFhMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDM0OQorICAgIDB4MS4wZDcxZmZhYzFkNWU2YWE3NTNjZjgwNGEyYThjMWY1YnA2LAorICAgIC0weDEuOTVlYzhhcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTAKKyAgICAtMHgxLjBkNzFmZmFjMWQ1ZTZhYTc1M2NmODA0YTJhOGMxZjVicDYsCisgICAgMHgxLjk1ZWM4YXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzUxCisgICAgLTB4MS4xMWQ4NDk4MDczZTFmNGI3NzZmZTU2NzJhYmIxZjU0YXA0LAorICAgIC0weDEuODMyZWY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTIKKyAgICAweDEuMTFkODQ5ODA3M2UxZjRiNzc2ZmU1NjcyYWJiMWY1NGFwNCwKKyAgICAweDEuODMyZWY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTMKKyAgICAtMHgxLmUzYTM0YjMyNzA4ODgzYTg1Nzg4MDVmODRlYTAzYzZhcDIsCisgICAgLTB4MS43MDcxNjZwMAorICB9LAorICB7IC8vIEVudHJ5IDM1NAorICAgIDB4MS5lM2EzNGIzMjcwODg4M2E4NTc4ODA1Zjg0ZWEwM2M2YXAyLAorICAgIDB4MS43MDcxNjZwMAorICB9LAorICB7IC8vIEVudHJ5IDM1NQorICAgIC0weDEuMzQyOWQyNjM0MDU0ZWFhZTNiZGJlZTk0YTZjZWMxN2ZwMiwKKyAgICAtMHgxLjVkYjNkNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzU2CisgICAgMHgxLjM0MjlkMjYzNDA1NGVhYWUzYmRiZWU5NGE2Y2VjMTdmcDIsCisgICAgMHgxLjVkYjNkNHAwCisgIH0sCisgIHsgLy8gRW50cnkgMzU3CisgICAgLTB4MS5jMDhjOTU3YmJiNDVhY2FmYTg1NmJmZDc5MmNiZjY2M3AxLAorICAgIC0weDEuNGFmNjQycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTgKKyAgICAweDEuYzA4Yzk1N2JiYjQ1YWNhZmE4NTZiZmQ3OTJjYmY2NjNwMSwKKyAgICAweDEuNGFmNjQycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNTkKKyAgICAtMHgxLjVkNjAyYjBkMGJkZGE4MjUyMjFhNTMzNjljNTMzOGQ3cDEsCisgICAgLTB4MS4zODM4YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDM2MAorICAgIDB4MS41ZDYwMmIwZDBiZGRhODI1MjIxYTUzMzY5YzUzMzhkN3AxLAorICAgIDB4MS4zODM4YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDM2MQorICAgIC0weDEuMWI0ODk0ZTQ5ODcyMGVjMDE3MzVhMDJlNTVlZWZhZDhwMSwKKyAgICAtMHgxLjI1N2IxZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzYyCisgICAgMHgxLjFiNDg5NGU0OTg3MjBlYzAxNzM1YTAyZTU1ZWVmYWQ4cDEsCisgICAgMHgxLjI1N2IxZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMzYzCisgICAgLTB4MS5kNzRjYjIwMGFiNTkwNDAyOTA2MjdhOWIyZmZlMjljZnAwLAorICAgIC0weDEuMTJiZDkycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjQKKyAgICAweDEuZDc0Y2IyMDBhYjU5MDQwMjkwNjI3YTliMmZmZTI5Y2ZwMCwKKyAgICAweDEuMTJiZDkycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjUKKyAgICAtMHgxLjZiZTcwMTlmMzRkMzRmMjVjYjBjMTRkMGM3YmM3YjMycDAsCisgICAgLTB4MS5lYTVjM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNjYKKyAgICAweDEuNmJlNzAxOWYzNGQzNGYyNWNiMGMxNGQwYzdiYzdiMzJwMCwKKyAgICAweDEuZWE1YzNlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY3CisgICAgLTB4MS40ZDBkZWZiY2I0OGFhNzVjZTEzZTFiODJmMWZjYjA0OXAwLAorICAgIC0weDEuZDRiODdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzY4CisgICAgMHgxLjRkMGRlZmJjYjQ4YWE3NWNlMTNlMWI4MmYxZmNiMDQ5cDAsCisgICAgMHgxLmQ0Yjg3Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDM2OQorICAgIC0weDEuMzE2Yzg3ZmRiNzU5OWNiNTczNTRlNGI5OWYzOGQ3ZmZwMCwKKyAgICAtMHgxLmJmMTRiYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3MAorICAgIDB4MS4zMTZjODdmZGI3NTk5Y2I1NzM1NGU0Yjk5ZjM4ZDdmZnAwLAorICAgIDB4MS5iZjE0YmFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzEKKyAgICAtMHgxLjE4NzI5ZGZlNTFkZmNmNzY3Zjc5ZjM5YjY4OWFlOTVlcDAsCisgICAgLTB4MS5hOTcwZjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzIKKyAgICAweDEuMTg3MjlkZmU1MWRmY2Y3NjdmNzlmMzliNjg5YWU5NWVwMCwKKyAgICAweDEuYTk3MGY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzczCisgICAgLTB4MS4wMWFlZWE5Y2JlOWE4ZmI0Y2NlZjk5YWQ5NjFiNmFkOHAwLAorICAgIC0weDEuOTNjZDM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgMzc0CisgICAgMHgxLjAxYWVlYTljYmU5YThmYjRjY2VmOTlhZDk2MWI2YWQ4cDAsCisgICAgMHgxLjkzY2QzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3NQorICAgIC0weDEuZDk4ZTM3M2ZhYWQ3ZGEzZDZjODg2NWE3ZmY5YmE3ZjNwLTEsCisgICAgLTB4MS43ZTI5NzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzYKKyAgICAweDEuZDk4ZTM3M2ZhYWQ3ZGEzZDZjODg2NWE3ZmY5YmE3ZjNwLTEsCisgICAgMHgxLjdlMjk3NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3NworICAgIC0weDEuYjJlNDZhZjcwNGViNzVkMWZhYjA3NjZhZmM3NDcwM2ZwLTEsCisgICAgLTB4MS42ODg1YjJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzNzgKKyAgICAweDEuYjJlNDZhZjcwNGViNzVkMWZhYjA3NjZhZmM3NDcwM2ZwLTEsCisgICAgMHgxLjY4ODViMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM3OQorICAgIC0weDEuOGVlOTBiN2RjODliMWY5OTlhZTZkYmI0MWJhY2ViMGRwLTEsCisgICAgLTB4MS41MmUxZjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODAKKyAgICAweDEuOGVlOTBiN2RjODliMWY5OTlhZTZkYmI0MWJhY2ViMGRwLTEsCisgICAgMHgxLjUyZTFmMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDM4MQorICAgIC0weDEuNmQzOTVmMDU4MjBiNDJmNTEyMjNkYWI4ODQzNjdlNzFwLTEsCisgICAgLTB4MS4zZDNlMzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODIKKyAgICAweDEuNmQzOTVmMDU4MjBiNDJmNTEyMjNkYWI4ODQzNjdlNzFwLTEsCisgICAgMHgxLjNkM2UzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM4MworICAgIC0weDEuMjRlM2RmYWQ0Y2UxNDkzY2FhMTIzODY0Y2I0ZjQ1ZDNwLTEsCisgICAgLTB4MS4wYTBiMDJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODQKKyAgICAweDEuMjRlM2RmYWQ0Y2UxNDkzY2FhMTIzODY0Y2I0ZjQ1ZDNwLTEsCisgICAgMHgxLjBhMGIwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDM4NQorICAgIC0weDEuZmRiZDVlNTNlMGE2ZmM5YzhiODAzMjg5ZjFjM2RiYjdwLTIsCisgICAgLTB4MS5kOGY3MjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODYKKyAgICAweDEuZmRiZDVlNTNlMGE2ZmM5YzhiODAzMjg5ZjFjM2RiYjdwLTIsCisgICAgMHgxLmQ4ZjcyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM4NworICAgIC0weDEuYjVmM2Q2MWM1NGVlNGY2NTg1ZTliZmY0ODljMDAxODJwLTIsCisgICAgLTB4MS45ZGQ4M2NwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzODgKKyAgICAweDEuYjVmM2Q2MWM1NGVlNGY2NTg1ZTliZmY0ODljMDAxODJwLTIsCisgICAgMHgxLjlkZDgzY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDM4OQorICAgIC0weDEuNzFhMGY5MDdjNjYxZGFmNDkwM2I3YmJjMDE1YzVjMTRwLTIsCisgICAgLTB4MS42MmI5NThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTAKKyAgICAweDEuNzFhMGY5MDdjNjYxZGFmNDkwM2I3YmJjMDE1YzVjMTRwLTIsCisgICAgMHgxLjYyYjk1OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5MQorICAgIC0weDEuMzAxOTA5NDFlNjk5ZmRiMjExNWE5ZWY2YmY4MmQ0NTVwLTIsCisgICAgLTB4MS4yNzlhNzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTIKKyAgICAweDEuMzAxOTA5NDFlNjk5ZmRiMjExNWE5ZWY2YmY4MmQ0NTVwLTIsCisgICAgMHgxLjI3OWE3NHAtMgorICB9LAorICB7IC8vIEVudHJ5IDM5MworICAgIC0weDEuZTE4ZTkzODY3Y2FmNjdlZmNhYTE5ODIxODk4ZDUwY2FwLTMsCisgICAgLTB4MS5kOGY3MjBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTQKKyAgICAweDEuZTE4ZTkzODY3Y2FmNjdlZmNhYTE5ODIxODk4ZDUwY2FwLTMsCisgICAgMHgxLmQ4ZjcyMHAtMworICB9LAorICB7IC8vIEVudHJ5IDM5NQorICAgIC0weDEuNjY1MDc3ZGRhODIyYjE4OWE1NmEwMmUxNWMwNGQ1ZDRwLTMsCisgICAgLTB4MS42MmI5NThwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTYKKyAgICAweDEuNjY1MDc3ZGRhODIyYjE4OWE1NmEwMmUxNWMwNGQ1ZDRwLTMsCisgICAgMHgxLjYyYjk1OHAtMworICB9LAorICB7IC8vIEVudHJ5IDM5NworICAgIC0weDEuZGIxNDIzZDg3N2IyNTBhZjZlYTU1NDY5NjA3NDNkNzJwLTQsCisgICAgLTB4MS5kOGY3MjBwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAzOTgKKyAgICAweDEuZGIxNDIzZDg3N2IyNTBhZjZlYTU1NDY5NjA3NDNkNzJwLTQsCisgICAgMHgxLmQ4ZjcyMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDM5OQorICAgIC0weDEuZDk3ZGQ2NDNmZmVlZjU3ZDBhMjI1MDUxOTc4ZWM4YWRwLTUsCisgICAgLTB4MS5kOGY3MjBwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MDAKKyAgICAweDEuZDk3ZGQ2NDNmZmVlZjU3ZDBhMjI1MDUxOTc4ZWM4YWRwLTUsCisgICAgMHgxLmQ4ZjcyMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQwMQorICAgIDB4MS5kOTdkZDY0M2ZmZWVmNTdkMGEyMjUwNTE5NzhlYzhhZHAtNSwKKyAgICAweDEuZDhmNzIwcC01CisgIH0sCisgIHsgLy8gRW50cnkgNDAyCisgICAgLTB4MS5kOTdkZDY0M2ZmZWVmNTdkMGEyMjUwNTE5NzhlYzhhZHAtNSwKKyAgICAtMHgxLmQ4ZjcyMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDQwMworICAgIDB4MS5kYjE0MjNkODc3YjI1MGFmNmVhNTU0Njk2MDc0M2Q3MnAtNCwKKyAgICAweDEuZDhmNzIwcC00CisgIH0sCisgIHsgLy8gRW50cnkgNDA0CisgICAgLTB4MS5kYjE0MjNkODc3YjI1MGFmNmVhNTU0Njk2MDc0M2Q3MnAtNCwKKyAgICAtMHgxLmQ4ZjcyMHAtNAorICB9LAorICB7IC8vIEVudHJ5IDQwNQorICAgIDB4MS42NjUwNzdkZGE4MjJiMTg5YTU2YTAyZTE1YzA0ZDVkNHAtMywKKyAgICAweDEuNjJiOTU4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDA2CisgICAgLTB4MS42NjUwNzdkZGE4MjJiMTg5YTU2YTAyZTE1YzA0ZDVkNHAtMywKKyAgICAtMHgxLjYyYjk1OHAtMworICB9LAorICB7IC8vIEVudHJ5IDQwNworICAgIDB4MS5lMThlOTM4NjdjYWY2N2VmY2FhMTk4MjE4OThkNTBjYXAtMywKKyAgICAweDEuZDhmNzIwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNDA4CisgICAgLTB4MS5lMThlOTM4NjdjYWY2N2VmY2FhMTk4MjE4OThkNTBjYXAtMywKKyAgICAtMHgxLmQ4ZjcyMHAtMworICB9LAorICB7IC8vIEVudHJ5IDQwOQorICAgIDB4MS4zMDE5MDk0MWU2OTlmZGIyMTE1YTllZjZiZjgyZDQ1NXAtMiwKKyAgICAweDEuMjc5YTc0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDEwCisgICAgLTB4MS4zMDE5MDk0MWU2OTlmZGIyMTE1YTllZjZiZjgyZDQ1NXAtMiwKKyAgICAtMHgxLjI3OWE3NHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQxMQorICAgIDB4MS43MWEwZjkwN2M2NjFkYWY0OTAzYjdiYmMwMTVjNWMxNHAtMiwKKyAgICAweDEuNjJiOTU4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDEyCisgICAgLTB4MS43MWEwZjkwN2M2NjFkYWY0OTAzYjdiYmMwMTVjNWMxNHAtMiwKKyAgICAtMHgxLjYyYjk1OHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQxMworICAgIDB4MS5iNWYzZDYxYzU0ZWU0ZjY1ODVlOWJmZjQ4OWMwMDE4MnAtMiwKKyAgICAweDEuOWRkODNjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDE0CisgICAgLTB4MS5iNWYzZDYxYzU0ZWU0ZjY1ODVlOWJmZjQ4OWMwMDE4MnAtMiwKKyAgICAtMHgxLjlkZDgzY3AtMgorICB9LAorICB7IC8vIEVudHJ5IDQxNQorICAgIDB4MS5mZGJkNWU1M2UwYTZmYzljOGI4MDMyODlmMWMzZGJiN3AtMiwKKyAgICAweDEuZDhmNzIwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDE2CisgICAgLTB4MS5mZGJkNWU1M2UwYTZmYzljOGI4MDMyODlmMWMzZGJiN3AtMiwKKyAgICAtMHgxLmQ4ZjcyMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDQxNworICAgIDB4MS4yNGUzZGZhZDRjZTE0OTNjYWExMjM4NjRjYjRmNDVkM3AtMSwKKyAgICAweDEuMGEwYjAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDE4CisgICAgLTB4MS4yNGUzZGZhZDRjZTE0OTNjYWExMjM4NjRjYjRmNDVkM3AtMSwKKyAgICAtMHgxLjBhMGIwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQxOQorICAgIDB4MS42ZDM5NWYwNTgyMGI0MmY1MTIyM2RhYjg4NDM2N2U3MXAtMSwKKyAgICAweDEuM2QzZTM2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDIwCisgICAgLTB4MS42ZDM5NWYwNTgyMGI0MmY1MTIyM2RhYjg4NDM2N2U3MXAtMSwKKyAgICAtMHgxLjNkM2UzNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQyMQorICAgIDB4MS44ZWU5MTg1OGZiYWFmMmEzNGEzMmRkOTQ3ZmQ3ZTA3NnAtMSwKKyAgICAweDEuNTJlMWY4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDIyCisgICAgLTB4MS44ZWU5MTg1OGZiYWFmMmEzNGEzMmRkOTQ3ZmQ3ZTA3NnAtMSwKKyAgICAtMHgxLjUyZTFmOHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQyMworICAgIDB4MS5iMmU0NzhiYzliYTczOGRiOTBiMmE0YmMyOTRlY2Y0ZnAtMSwKKyAgICAweDEuNjg4NWJhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDI0CisgICAgLTB4MS5iMmU0NzhiYzliYTczOGRiOTBiMmE0YmMyOTRlY2Y0ZnAtMSwKKyAgICAtMHgxLjY4ODViYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQyNQorICAgIDB4MS5kOThlNDYxN2E4YmQxYTFiYjllMmU5ODlkOGFkMzVjY3AtMSwKKyAgICAweDEuN2UyOTdjcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDI2CisgICAgLTB4MS5kOThlNDYxN2E4YmQxYTFiYjllMmU5ODlkOGFkMzVjY3AtMSwKKyAgICAtMHgxLjdlMjk3Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDQyNworICAgIDB4MS4wMWFlZjJhYTQxNjU0NWUzOTAwODY0ZjJiMzVkODZhNnAwLAorICAgIDB4MS45M2NkM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjgKKyAgICAtMHgxLjAxYWVmMmFhNDE2NTQ1ZTM5MDA4NjRmMmIzNWQ4NmE2cDAsCisgICAgLTB4MS45M2NkM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MjkKKyAgICAweDEuMTg3MmE2Y2IzZGJhMTU2ZGI4ZGM3ODRlOTVkOTZhNDZwMCwKKyAgICAweDEuYTk3MXAtMQorICB9LAorICB7IC8vIEVudHJ5IDQzMAorICAgIC0weDEuMTg3MmE2Y2IzZGJhMTU2ZGI4ZGM3ODRlOTVkOTZhNDZwMCwKKyAgICAtMHgxLmE5NzFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzEKKyAgICAweDEuMzE2YzkxYWY0NmIwMTVhOWM5MzFhODE2ZmVkODkwOTJwMCwKKyAgICAweDEuYmYxNGMycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDMyCisgICAgLTB4MS4zMTZjOTFhZjQ2YjAxNWE5YzkzMWE4MTZmZWQ4OTA5MnAwLAorICAgIC0weDEuYmYxNGMycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDMzCisgICAgMHgxLjRkMGRmYTgxZTljYzgwNmMxMDE5NGZiYTZiNzY3NzYxcDAsCisgICAgMHgxLmQ0Yjg4NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQzNAorICAgIC0weDEuNGQwZGZhODFlOWNjODA2YzEwMTk0ZmJhNmI3Njc3NjFwMCwKKyAgICAtMHgxLmQ0Yjg4NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQzNQorICAgIDB4MS42YmU3MDE5ZjM0ZDM0ZjI1Y2IwYzE0ZDBjN2JjN2IzMnAwLAorICAgIDB4MS5lYTVjM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzYKKyAgICAtMHgxLjZiZTcwMTlmMzRkMzRmMjVjYjBjMTRkMGM3YmM3YjMycDAsCisgICAgLTB4MS5lYTVjM2VwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzcKKyAgICAweDEuZDc0Y2IyMDBhYjU5MDQwMjkwNjI3YTliMmZmZTI5Y2ZwMCwKKyAgICAweDEuMTJiZDkycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0MzgKKyAgICAtMHgxLmQ3NGNiMjAwYWI1OTA0MDI5MDYyN2E5YjJmZmUyOWNmcDAsCisgICAgLTB4MS4xMmJkOTJwMAorICB9LAorICB7IC8vIEVudHJ5IDQzOQorICAgIDB4MS4xYjQ4YTY5NjRjMDI0NjQ4ZjE4NmJiNmIxZWJkZWVjMnAxLAorICAgIDB4MS4yNTdiMjRwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0MAorICAgIC0weDEuMWI0OGE2OTY0YzAyNDY0OGYxODZiYjZiMWViZGVlYzJwMSwKKyAgICAtMHgxLjI1N2IyNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQxCisgICAgMHgxLjVkNjA0NDY2YzVhZWU4ZjFhMWQ4NDcwZjdmZjU3OWNmcDEsCisgICAgMHgxLjM4MzhiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQyCisgICAgLTB4MS41ZDYwNDQ2NmM1YWVlOGYxYTFkODQ3MGY3ZmY1NzljZnAxLAorICAgIC0weDEuMzgzOGI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDMKKyAgICAweDEuYzA4Y2JkNTJkMmIwMTJmMGNiNDdiY2IzZmY1MTNjNmRwMSwKKyAgICAweDEuNGFmNjQ4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDQKKyAgICAtMHgxLmMwOGNiZDUyZDJiMDEyZjBjYjQ3YmNiM2ZmNTEzYzZkcDEsCisgICAgLTB4MS40YWY2NDhwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NQorICAgIDB4MS4zNDI5ZjZhYTM0NDZkNzAzZTZlZjk2ZTBiNTY0ZmMwY3AyLAorICAgIDB4MS41ZGIzZGFwMAorICB9LAorICB7IC8vIEVudHJ5IDQ0NgorICAgIC0weDEuMzQyOWY2YWEzNDQ2ZDcwM2U2ZWY5NmUwYjU2NGZjMGNwMiwKKyAgICAtMHgxLjVkYjNkYXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ3CisgICAgMHgxLmUzYTNhMjViMjYwNjQxOGExMzk3MDk3MWJlZWY0MWQ2cDIsCisgICAgMHgxLjcwNzE2Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDQ4CisgICAgLTB4MS5lM2EzYTI1YjI2MDY0MThhMTM5NzA5NzFiZWVmNDFkNnAyLAorICAgIC0weDEuNzA3MTZjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NDkKKyAgICAweDEuMTFkOGI3YmE0MTY5NDY1ODExMWFmNDg5MjViYmFkNjhwNCwKKyAgICAweDEuODMyZWZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTAKKyAgICAtMHgxLjExZDhiN2JhNDE2OTQ2NTgxMTFhZjQ4OTI1YmJhZDY4cDQsCisgICAgLTB4MS44MzJlZmVwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1MQorICAgIC0weDEuMGQ3MDU2MzE5M2ZlMjE5ZjNmZDMxYTI4NWY0ZDY2MzhwNiwKKyAgICAweDEuOTVlYzkwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTIKKyAgICAweDEuMGQ3MDU2MzE5M2ZlMjE5ZjNmZDMxYTI4NWY0ZDY2MzhwNiwKKyAgICAtMHgxLjk1ZWM5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDUzCisgICAgLTB4MS42YTdlMzBhZDg0NjBmMWE3MTA0NzllMmRiOTQ5NWM5Y3AzLAorICAgIDB4MS5hOGFhMWNwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NAorICAgIDB4MS42YTdlMzBhZDg0NjBmMWE3MTA0NzllMmRiOTQ5NWM5Y3AzLAorICAgIC0weDEuYThhYTFjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTUKKyAgICAweDEuOWYzOWVlOWZlZGIyMzc1ZWMwNWQ2ZGE3YTI4OGM2YmRwMCwKKyAgICAweDEuMDRhZmY4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NTYKKyAgICAtMHgxLjlmMzllZTlmZWRiMjM3NWVjMDVkNmRhN2EyODhjNmJkcDAsCisgICAgLTB4MS4wNGFmZjhwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1NworICAgIDB4MS45ZjNjNTA5YzZhN2Q3NWU0NTEwODgzNTljODhkZWY4OHAwLAorICAgIDB4MS4wNGIwYTBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ1OAorICAgIC0weDEuOWYzYzUwOWM2YTdkNzVlNDUxMDg4MzU5Yzg4ZGVmODhwMCwKKyAgICAtMHgxLjA0YjBhMHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDU5CisgICAgMHgxLjlmM2ViMjlkZjllNmEyMDQ2NzQ3NGUyNGQ4YmYzNWJhcDAsCisgICAgMHgxLjA0YjE0OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDYwCisgICAgLTB4MS45ZjNlYjI5ZGY5ZTZhMjA0Njc0NzRlMjRkOGJmMzViYXAwLAorICAgIC0weDEuMDRiMTQ4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjEKKyAgICAweDEuOWY0MTE0YTQ5YmZmZmMzZjVhMTgzZDM2MDAwYWE3ODVwMCwKKyAgICAweDEuMDRiMWYwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjIKKyAgICAtMHgxLjlmNDExNGE0OWJmZmZjM2Y1YTE4M2QzNjAwMGFhNzg1cDAsCisgICAgLTB4MS4wNGIxZjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2MworICAgIDB4MS45ZjQzNzZiMDUwZGJjNTZiZjU1OTYwODMxOTIwNzdiNXAwLAorICAgIDB4MS4wNGIyOThwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2NAorICAgIC0weDEuOWY0Mzc2YjA1MGRiYzU2YmY1NTk2MDgzMTkyMDc3YjVwMCwKKyAgICAtMHgxLjA0YjI5OHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDY1CisgICAgMHgxLjlmNDVkOGMxMTg4YzNlYjc3YmNhMmM0YTg0YzdlYWRkcDAsCisgICAgMHgxLjA0YjM0MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDY2CisgICAgLTB4MS45ZjQ1ZDhjMTE4OGMzZWI3N2JjYTJjNGE4NGM3ZWFkZHAwLAorICAgIC0weDEuMDRiMzQwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjcKKyAgICAweDEuOWY0ODNhZDZmMzIzYTlhNWE5MGQ0YWUwN2EyM2QyNjZwMCwKKyAgICAweDEuMDRiM2U4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NjgKKyAgICAtMHgxLjlmNDgzYWQ2ZjMyM2E5YTVhOTBkNGFlMDdhMjNkMjY2cDAsCisgICAgLTB4MS4wNGIzZThwMAorICB9LAorICB7IC8vIEVudHJ5IDQ2OQorICAgIDB4MS45ZjRhOWNmMWUwYjQ0ODEwYjNhYTdjY2E0NWQ3MWNjOXAwLAorICAgIDB4MS4wNGI0OTBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ3MAorICAgIC0weDEuOWY0YTljZjFlMGI0NDgxMGIzYWE3Y2NhNDVkNzFjYzlwMCwKKyAgICAtMHgxLjA0YjQ5MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDcxCisgICAgMHgxLjlmNGNmMDhhZjZjNjBlZDZlMmJhZGQ1YTdiNWMxZTg3cDAsCisgICAgMHgxLjA0YjUzNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNDcyCisgICAgLTB4MS45ZjRjZjA4YWY2YzYwZWQ2ZTJiYWRkNWE3YjVjMWU4N3AwLAorICAgIC0weDEuMDRiNTM0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzMKKyAgICAtMHgxLnAtMTQ5LAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzQKKyAgICAweDEucC0xNDksCisgICAgMHgxLnAtMTQ5CisgIH0sCisgIHsgLy8gRW50cnkgNDc1CisgICAgMC4wLAorICAgIDAuMAorICB9LAorICB7IC8vIEVudHJ5IDQ3NgorICAgIDB4MS5wLTE0OSwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzcKKyAgICAtMHgxLnAtMTQ5LAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA0NzgKKyAgICAweDEuNGQ4MmIzMzRhNTgyYTU2YTgwMmY5NmIzYjk2ZmViODFwLTEsCisgICAgMHgxLjI3OWE3MnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ3OQorICAgIC0weDEuNGQ4MmIzMzRhNTgyYTU2YTgwMmY5NmIzYjk2ZmViODFwLTEsCisgICAgLTB4MS4yNzlhNzJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODAKKyAgICAweDEuNGQ4MmI2MGRlNDI4ZjkyYWE4Yzk2YTRhN2ZlODg5NDVwLTEsCisgICAgMHgxLjI3OWE3NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4MQorICAgIC0weDEuNGQ4MmI2MGRlNDI4ZjkyYWE4Yzk2YTRhN2ZlODg5NDVwLTEsCisgICAgLTB4MS4yNzlhNzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODIKKyAgICAweDEuNGQ4MmI4ZTcyMmQzMDJmNWFhOTM5YTU2M2IxMmIxYTFwLTEsCisgICAgMHgxLjI3OWE3NnAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ4MworICAgIC0weDEuNGQ4MmI4ZTcyMmQzMDJmNWFhOTM5YTU2M2IxMmIxYTFwLTEsCisgICAgLTB4MS4yNzlhNzZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODQKKyAgICAtMHgxLjg5NzE0NzYwZThmZWQ5YWYwM2E5MWNmMTUyN2NlYWFkcDIsCisgICAgMHgxLmJiNjdhY3AwCisgIH0sCisgIHsgLy8gRW50cnkgNDg1CisgICAgMHgxLjg5NzE0NzYwZThmZWQ5YWYwM2E5MWNmMTUyN2NlYWFkcDIsCisgICAgLTB4MS5iYjY3YWNwMAorICB9LAorICB7IC8vIEVudHJ5IDQ4NgorICAgIC0weDEuODk3MTMzZmI4MWYzMTY5YjMxNjFkNTBiNTBjY2MxYTdwMiwKKyAgICAweDEuYmI2N2FlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0ODcKKyAgICAweDEuODk3MTMzZmI4MWYzMTY5YjMxNjFkNTBiNTBjY2MxYTdwMiwKKyAgICAtMHgxLmJiNjdhZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNDg4CisgICAgLTB4MS44OTcxMjA5NjFjYzQ0NzVlYjNiODA2MWRmMDQwOTQzMHAyLAorICAgIDB4MS5iYjY3YjBwMAorICB9LAorICB7IC8vIEVudHJ5IDQ4OQorICAgIDB4MS44OTcxMjA5NjFjYzQ0NzVlYjNiODA2MWRmMDQwOTQzMHAyLAorICAgIC0weDEuYmI2N2IwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTAKKyAgICAweDEuZGVmNDljM2FiMGFkNWRkZTkzYmEzNGM1NGRiNzE0YzdwLTIsCisgICAgMHgxLmJmZmZmZXAtMgorICB9LAorICB7IC8vIEVudHJ5IDQ5MQorICAgIC0weDEuZGVmNDljM2FiMGFkNWRkZTkzYmEzNGM1NGRiNzE0YzdwLTIsCisgICAgLTB4MS5iZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTIKKyAgICAweDEuZGVmNDllYWFiMzdhMTQ3OTIzMWU4OTk1MDllY2YyNmNwLTIsCisgICAgMHgxLmMwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDkzCisgICAgLTB4MS5kZWY0OWVhYWIzN2ExNDc5MjMxZTg5OTUwOWVjZjI2Y3AtMiwKKyAgICAtMHgxLmMwcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDk0CisgICAgMHgxLmRlZjRhMTFhYjY0N2VlZjIxMmIxOTk3ZDNiNTE0MDVhcC0yLAorICAgIDB4MS5jMDAwMDJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTUKKyAgICAtMHgxLmRlZjRhMTFhYjY0N2VlZjIxMmIxOTk3ZDNiNTE0MDVhcC0yLAorICAgIC0weDEuYzAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNDk2CisgICAgMHgxLmE0NmNhZjY1MmZhMTg5ODdlNGQwYTc5ZjgxNDVkZDVicC0xLAorICAgIDB4MS41ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA0OTcKKyAgICAtMHgxLmE0NmNhZjY1MmZhMTg5ODdlNGQwYTc5ZjgxNDVkZDVicC0xLAorICAgIC0weDEuNWZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNDk4CisgICAgMHgxLmE0NmNiMmJlNmEwYjFkYWNiMzYyNjljNDFhNGE5MTQ3cC0xLAorICAgIDB4MS42MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDQ5OQorICAgIC0weDEuYTQ2Y2IyYmU2YTBiMWRhY2IzNjI2OWM0MWE0YTkxNDdwLTEsCisgICAgLTB4MS42MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUwMAorICAgIDB4MS5hNDZjYjYxN2E0N2EzMWExNTZkYzAwMDViNGU2ZWJwLTEsCisgICAgMHgxLjYwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDUwMQorICAgIC0weDEuYTQ2Y2I2MTdhNDdhMzFhMTU2ZGMwMDA1YjRlNmVicC0xLAorICAgIC0weDEuNjAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTAyCisgICAgMHgxLjNkNmRjMjMwODY5YzcwZDU5MzdmZWRjOTJkNDI0ZGYycDEsCisgICAgMHgxLjJmZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTAzCisgICAgLTB4MS4zZDZkYzIzMDg2OWM3MGQ1OTM3ZmVkYzkyZDQyNGRmMnAxLAorICAgIC0weDEuMmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDQKKyAgICAweDEuM2Q2ZGM5NTZlYWM3ZDNiOGQ2ZWIyMTc0MTEwZDFkZGNwMSwKKyAgICAweDEuMzBwMAorICB9LAorICB7IC8vIEVudHJ5IDUwNQorICAgIC0weDEuM2Q2ZGM5NTZlYWM3ZDNiOGQ2ZWIyMTc0MTEwZDFkZGNwMSwKKyAgICAtMHgxLjMwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDYKKyAgICAweDEuM2Q2ZGQwN2Q0ZjNhMjM3NTg5YWQ1YzQxYzM4MDFjYjRwMSwKKyAgICAweDEuMzAwMDAycDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MDcKKyAgICAtMHgxLjNkNmRkMDdkNGYzYTIzNzU4OWFkNWM0MWMzODAxY2I0cDEsCisgICAgLTB4MS4zMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDUwOAorICAgIC0weDEuYjJkOGE4NThjOTBhNTM4ZDFkYWFkNzgwNDBlNjliOThwLTEsCisgICAgMHgxLjM3ZmZmZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNTA5CisgICAgMHgxLmIyZDhhODU4YzkwYTUzOGQxZGFhZDc4MDQwZTY5Yjk4cC0xLAorICAgIC0weDEuMzdmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTAKKyAgICAtMHgxLmIyZDg5YTkzODI5NGM4YTI2MDRkYjlmN2FhNTZhMGY4cC0xLAorICAgIDB4MS4zOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTExCisgICAgMHgxLmIyZDg5YTkzODI5NGM4YTI2MDRkYjlmN2FhNTZhMGY4cC0xLAorICAgIC0weDEuMzhwMQorICB9LAorICB7IC8vIEVudHJ5IDUxMgorICAgIC0weDEuYjJkODhjY2UzYzdjY2UxNzQyNjY0MzlkYTMwOWNmNjBwLTEsCisgICAgMHgxLjM4MDAwMnAxCisgIH0sCisgIHsgLy8gRW50cnkgNTEzCisgICAgMHgxLmIyZDg4Y2NlM2M3Y2NlMTc0MjY2NDM5ZGEzMDljZjYwcC0xLAorICAgIC0weDEuMzgwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTQKKyAgICAweDEuMDZmOGQwY2VjZjE2OWIwNjQ2N2U0YWEwMzZjZjgyNzlwLTQsCisgICAgMHgxLjA2OWM4Y3AtNAorICB9LAorICB7IC8vIEVudHJ5IDUxNQorICAgIC0weDEuMDZmOGQwY2VjZjE2OWIwNjQ2N2U0YWEwMzZjZjgyNzlwLTQsCisgICAgLTB4MS4wNjljOGNwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTYKKyAgICAweDEuMDgwZjc0NmNkMTczOTdiNjBmOTA4ZTJiZTAxZjdiYTdwLTMsCisgICAgMHgxLjA2OWM4Y3AtMworICB9LAorICB7IC8vIEVudHJ5IDUxNworICAgIC0weDEuMDgwZjc0NmNkMTczOTdiNjBmOTA4ZTJiZTAxZjdiYTdwLTMsCisgICAgLTB4MS4wNjljOGNwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MTgKKyAgICAweDEuOGVkOTE1NTA0NjlkMGViMDhhYWUyMDY1ODk1ODA0M2JwLTMsCisgICAgMHgxLjg5ZWFkMnAtMworICB9LAorICB7IC8vIEVudHJ5IDUxOQorICAgIC0weDEuOGVkOTE1NTA0NjlkMGViMDhhYWUyMDY1ODk1ODA0M2JwLTMsCisgICAgLTB4MS44OWVhZDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjAKKyAgICAweDEuMGM4NjQxNDlkYzY4Mjc2ZGYyOTkyODJkMDRmNjlhZjZwLTIsCisgICAgMHgxLjA2OWM4Y3AtMgorICB9LAorICB7IC8vIEVudHJ5IDUyMQorICAgIC0weDEuMGM4NjQxNDlkYzY4Mjc2ZGYyOTkyODJkMDRmNjlhZjZwLTIsCisgICAgLTB4MS4wNjljOGNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjIKKyAgICAweDEuNTNmZGQwMWE5OGYwN2YyMDg1NTVjYzY0NDI3NmVmMmNwLTIsCisgICAgMHgxLjQ4NDNiMHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUyMworICAgIC0weDEuNTNmZGQwMWE5OGYwN2YyMDg1NTVjYzY0NDI3NmVmMmNwLTIsCisgICAgLTB4MS40ODQzYjBwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjQKKyAgICAweDEuOWU5MjViN2UyMzdiODhhYzYwOThiNTEzYzM3MTc1N2NwLTIsCisgICAgMHgxLjg5ZWFkNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUyNQorICAgIC0weDEuOWU5MjViN2UyMzdiODhhYzYwOThiNTEzYzM3MTc1N2NwLTIsCisgICAgLTB4MS44OWVhZDRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjYKKyAgICAweDEuZWQyMWVhZGIwOGU0N2RiOGIyZjExODgwZmJiNTI4NzlwLTIsCisgICAgMHgxLmNiOTFmOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDUyNworICAgIC0weDEuZWQyMWVhZGIwOGU0N2RiOGIyZjExODgwZmJiNTI4NzlwLTIsCisgICAgLTB4MS5jYjkxZjhwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MjgKKyAgICAweDEuMjA1YTYzYTA0ZTMxZTE4NTJhZjNkYTIyZTlmNjlhMTlwLTEsCisgICAgMHgxLjA2OWM4ZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDUyOQorICAgIC0weDEuMjA1YTYzYTA0ZTMxZTE4NTJhZjNkYTIyZTlmNjlhMTlwLTEsCisgICAgLTB4MS4wNjljOGVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzAKKyAgICAweDEuNGQ0NjZmODRhMzI4ODUxNWFiNjk5ZGQxY2VjMzQ1ZDNwLTEsCisgICAgMHgxLjI3NzAyMHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzMQorICAgIC0weDEuNGQ0NjZmODRhMzI4ODUxNWFiNjk5ZGQxY2VjMzQ1ZDNwLTEsCisgICAgLTB4MS4yNzcwMjBwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzIKKyAgICAweDEuN2UxZDk5ODNiNTg3NTRhMjkwMTJlMTdhMjZmMjc3ZDdwLTEsCisgICAgMHgxLjQ4NDNiMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzMworICAgIC0weDEuN2UxZDk5ODNiNTg3NTRhMjkwMTJlMTdhMjZmMjc3ZDdwLTEsCisgICAgLTB4MS40ODQzYjJwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzQKKyAgICAweDEuYjNkZjQwMmZlNDk4NDJhNDE2NGNmMzgwZmZhNWRjcC0xLAorICAgIDB4MS42OTE3NDRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzUKKyAgICAtMHgxLmIzZGY0MDJmZTQ5ODQyYTQxNjRjZjM4MGZmYTVkY3AtMSwKKyAgICAtMHgxLjY5MTc0NHAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzNgorICAgIDB4MS5lZmQ4MzExZGRmMmNjMzkzZjIwZWE3NjdjN2IyMjY0YXAtMSwKKyAgICAweDEuODllYWQ2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTM3CisgICAgLTB4MS5lZmQ4MzExZGRmMmNjMzkzZjIwZWE3NjdjN2IyMjY0YXAtMSwKKyAgICAtMHgxLjg5ZWFkNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDUzOAorICAgIDB4MS4xOWUyNzFhNjQ0NGZmMzRhYTJmNzNjODUwMTQ5NzFjOXAwLAorICAgIDB4MS5hYWJlNjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1MzkKKyAgICAtMHgxLjE5ZTI3MWE2NDQ0ZmYzNGFhMmY3M2M4NTAxNDk3MWM5cDAsCisgICAgLTB4MS5hYWJlNjhwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDAKKyAgICAweDEuNDEwMzkzODAyYzFhMjIzODI5MTRhYmYwOTZhZmJlZTlwMCwKKyAgICAweDEuY2I5MWZhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTQxCisgICAgLTB4MS40MTAzOTM4MDJjMWEyMjM4MjkxNGFiZjA5NmFmYmVlOXAwLAorICAgIC0weDEuY2I5MWZhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNTQyCisgICAgMHgxLjZlZmVkMzNiNzE0MDQ1ZmU5OWNmYTU5NDcxZTFlOWZkcDAsCisgICAgMHgxLmVjNjU4Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDU0MworICAgIC0weDEuNmVmZWQzM2I3MTQwNDVmZTk5Y2ZhNTk0NzFlMWU5ZmRwMCwKKyAgICAtMHgxLmVjNjU4Y3AtMQorICB9LAorICB7IC8vIEVudHJ5IDU0NAorICAgIDB4MS5hNjRjODZjMDJlN2E3ZDk2ZTkxZjk2YTU1ODQxMjlmNHAwLAorICAgIDB4MS4wNjljOGVwMAorICB9LAorICB7IC8vIEVudHJ5IDU0NQorICAgIC0weDEuYTY0Yzg2YzAyZTdhN2Q5NmU5MWY5NmE1NTg0MTI5ZjRwMCwKKyAgICAtMHgxLjA2OWM4ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ2CisgICAgMHgxLmVhYjQ0NzdlNWIyMjZkYzUyNzBiYWU5NzIwZWExM2UzcDAsCisgICAgMHgxLjE3MDY1NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTQ3CisgICAgLTB4MS5lYWI0NDc3ZTViMjI2ZGM1MjcwYmFlOTcyMGVhMTNlM3AwLAorICAgIC0weDEuMTcwNjU2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDgKKyAgICAweDEuMjEyNzdmOWE3ZDJmNjZiYjEzMWNmZjMyZjI2NjI5Y2RwMSwKKyAgICAweDEuMjc3MDFlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NDkKKyAgICAtMHgxLjIxMjc3ZjlhN2QyZjY2YmIxMzFjZmYzMmYyNjYyOWNkcDEsCisgICAgLTB4MS4yNzcwMWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU1MAorICAgIDB4MS41YmQxNDA2ODI1YjNmZmViYTQ4MjIxYWQ2YThmNTQxNHAxLAorICAgIDB4MS4zN2Q5ZTZwMAorICB9LAorICB7IC8vIEVudHJ5IDU1MQorICAgIC0weDEuNWJkMTQwNjgyNWIzZmZlYmE0ODIyMWFkNmE4ZjU0MTRwMSwKKyAgICAtMHgxLjM3ZDllNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTUyCisgICAgMHgxLmFmNDY0MzUyYTk4OWY4MDI4MjQxNTJjYWQwYWZlOGI3cDEsCisgICAgMHgxLjQ4NDNhZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTUzCisgICAgLTB4MS5hZjQ2NDM1MmE5ODlmODAyODI0MTUyY2FkMGFmZThiN3AxLAorICAgIC0weDEuNDg0M2FlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTQKKyAgICAweDEuMTg2NmZhN2E2MDFiODdiYjZmMzc4YjM0MzhlM2ZjMjZwMiwKKyAgICAweDEuNThhZDc2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NTUKKyAgICAtMHgxLjE4NjZmYTdhNjAxYjg3YmI2ZjM3OGIzNDM4ZTNmYzI2cDIsCisgICAgLTB4MS41OGFkNzZwMAorICB9LAorICB7IC8vIEVudHJ5IDU1NgorICAgIDB4MS44YmRjYzY4NzE4YTcwMTE4ODYwYTFiOTQ1NDM3ZmQ5MHAyLAorICAgIDB4MS42OTE3M2VwMAorICB9LAorICB7IC8vIEVudHJ5IDU1NworICAgIC0weDEuOGJkY2M2ODcxOGE3MDExODg2MGExYjk0NTQzN2ZkOTBwMiwKKyAgICAtMHgxLjY5MTczZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTU4CisgICAgMHgxLjRiYjY4ODU5ZDNlYWZiMmExMzBiNzNiYTA3ZTQ4ZThhcDMsCisgICAgMHgxLjc5ODEwNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTU5CisgICAgLTB4MS40YmI2ODg1OWQzZWFmYjJhMTMwYjczYmEwN2U0OGU4YXAzLAorICAgIC0weDEuNzk4MTA2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjAKKyAgICAweDEuZjJlZmFiYWViMzIyZWM1Y2E5ZDMzODY5Mjk1YzYwNjNwNCwKKyAgICAweDEuODllYWNlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjEKKyAgICAtMHgxLmYyZWZhYmFlYjMyMmVjNWNhOWQzMzg2OTI5NWM2MDYzcDQsCisgICAgLTB4MS44OWVhY2VwMAorICB9LAorICB7IC8vIEVudHJ5IDU2MgorICAgIC0weDEuZjJmMTM5MjkzMjNlZjhmNThkYjE1MjE0M2U2NWJjYjdwNCwKKyAgICAweDEuOWE1NDk2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjMKKyAgICAweDEuZjJmMTM5MjkzMjNlZjhmNThkYjE1MjE0M2U2NWJjYjdwNCwKKyAgICAtMHgxLjlhNTQ5NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTY0CisgICAgLTB4MS40YmI2ZTBlYzAyY2FkNWMxMTBhNGQ3MDAzOWRiNGQxY3AzLAorICAgIDB4MS5hYWJlNWVwMAorICB9LAorICB7IC8vIEVudHJ5IDU2NQorICAgIDB4MS40YmI2ZTBlYzAyY2FkNWMxMTBhNGQ3MDAzOWRiNGQxY3AzLAorICAgIC0weDEuYWFiZTVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjYKKyAgICAtMHgxLjhiZGQwNmE2NTVkZmEyZjMxOTVhY2E0ODc5OGU1Yzg2cDIsCisgICAgMHgxLmJiMjgyNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTY3CisgICAgMHgxLjhiZGQwNmE2NTVkZmEyZjMxOTVhY2E0ODc5OGU1Yzg2cDIsCisgICAgLTB4MS5iYjI4MjZwMAorICB9LAorICB7IC8vIEVudHJ5IDU2OAorICAgIC0weDEuMTg2NzFiNzZjZmNjZjk4YTZlZGJjMWZkNWI4NjQ3YjdwMiwKKyAgICAweDEuY2I5MWVlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NjkKKyAgICAweDEuMTg2NzFiNzZjZmNjZjk4YTZlZGJjMWZkNWI4NjQ3YjdwMiwKKyAgICAtMHgxLmNiOTFlZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTcwCisgICAgLTB4MS5hZjQ2NmJhYzgwZGM5ZGY2NjhkMWUwZTliNDQyYmYwZXAxLAorICAgIDB4MS5kYmZiYjZwMAorICB9LAorICB7IC8vIEVudHJ5IDU3MQorICAgIDB4MS5hZjQ2NmJhYzgwZGM5ZGY2NjhkMWUwZTliNDQyYmYwZXAxLAorICAgIC0weDEuZGJmYmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzIKKyAgICAtMHgxLjViZDE1YmNiM2QwNjkwNmNlZjVmM2IyZWMzYWI0YWI5cDEsCisgICAgMHgxLmVjNjU3ZXAwCisgIH0sCisgIHsgLy8gRW50cnkgNTczCisgICAgMHgxLjViZDE1YmNiM2QwNjkwNmNlZjVmM2IyZWMzYWI0YWI5cDEsCisgICAgLTB4MS5lYzY1N2VwMAorICB9LAorICB7IC8vIEVudHJ5IDU3NAorICAgIC0weDEuMjEyNzkzOGE1NDZkM2M0MjgyOTJiYTUzZWU2ZjY3Y2NwMSwKKyAgICAweDEuZmNjZjQ2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzUKKyAgICAweDEuMjEyNzkzOGE1NDZkM2M0MjgyOTJiYTUzZWU2ZjY3Y2NwMSwKKyAgICAtMHgxLmZjY2Y0NnAwCisgIH0sCisgIHsgLy8gRW50cnkgNTc2CisgICAgLTB4MS5lYWI0NWNhZWQ3MDZjNGRiNjIyYzkwZmUzZThkMTZjMnAwLAorICAgIDB4MS4wNjljODhwMQorICB9LAorICB7IC8vIEVudHJ5IDU3NworICAgIDB4MS5lYWI0NWNhZWQ3MDZjNGRiNjIyYzkwZmUzZThkMTZjMnAwLAorICAgIC0weDEuMDY5Yzg4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1NzgKKyAgICAtMHgxLmE2NGM5NzllYjcwM2Q4MmNiNDgwODA0NGU4YWJmOTNmcDAsCisgICAgMHgxLjBlZDE2Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTc5CisgICAgMHgxLmE2NGM5NzllYjcwM2Q4MmNiNDgwODA0NGU4YWJmOTNmcDAsCisgICAgLTB4MS4wZWQxNmNwMQorICB9LAorICB7IC8vIEVudHJ5IDU4MAorICAgIC0weDEuNmVmZWUxMTUwMDI2M2MxMGMxZDFiYjU5MDQyNDRkZTZwMCwKKyAgICAweDEuMTcwNjUwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODEKKyAgICAweDEuNmVmZWUxMTUwMDI2M2MxMGMxZDFiYjU5MDQyNDRkZTZwMCwKKyAgICAtMHgxLjE3MDY1MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTgyCisgICAgLTB4MS40MTAzYTFiYzBmNjU3NmE3NjBkNDlkYTNiZmU1NTg3NHAwLAorICAgIDB4MS4xZjNiMzRwMQorICB9LAorICB7IC8vIEVudHJ5IDU4MworICAgIDB4MS40MTAzYTFiYzBmNjU3NmE3NjBkNDlkYTNiZmU1NTg3NHAwLAorICAgIC0weDEuMWYzYjM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODQKKyAgICAtMHgxLjE5ZTI4MDFhYTI0ZWUwYWRjZDk0OTFlNGQ3YWYyNTZmcDAsCisgICAgMHgxLjI3NzAxOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTg1CisgICAgMHgxLjE5ZTI4MDFhYTI0ZWUwYWRjZDk0OTFlNGQ3YWYyNTZmcDAsCisgICAgLTB4MS4yNzcwMThwMQorICB9LAorICB7IC8vIEVudHJ5IDU4NgorICAgIC0weDEuZWZkODRlNTA2NTJjMWI3YzcxOTcyYWQ4ZWU3YzAxOGFwLTEsCisgICAgMHgxLjJmYTRmY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTg3CisgICAgMHgxLmVmZDg0ZTUwNjUyYzFiN2M3MTk3MmFkOGVlN2MwMThhcC0xLAorICAgIC0weDEuMmZhNGZjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1ODgKKyAgICAtMHgxLmIzZGY1ZDlmNTRlMmM3NDhjZjAyMjdlZTA5NzRlYTJlcC0xLAorICAgIDB4MS4zN2Q5ZTBwMQorICB9LAorICB7IC8vIEVudHJ5IDU4OQorICAgIDB4MS5iM2RmNWQ5ZjU0ZTJjNzQ4Y2YwMjI3ZWUwOTc0ZWEyZXAtMSwKKyAgICAtMHgxLjM3ZDllMHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTkwCisgICAgLTB4MS43ZTFkYjczMzc2OWExMTI2YTJiMGFjN2ZhMTRhNDAyY3AtMSwKKyAgICAweDEuNDAwZWM0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTEKKyAgICAweDEuN2UxZGI3MzM3NjlhMTEyNmEyYjBhYzdmYTE0YTQwMmNwLTEsCisgICAgLTB4MS40MDBlYzRwMQorICB9LAorICB7IC8vIEVudHJ5IDU5MgorICAgIC0weDEuNGQ0NjhkODJjMWE4NGZlZjcyNzlmYzVmYjI0NDE5YjJwLTEsCisgICAgMHgxLjQ4NDNhOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTkzCisgICAgMHgxLjRkNDY4ZDgyYzFhODRmZWY3Mjc5ZmM1ZmIyNDQxOWIycC0xLAorICAgIC0weDEuNDg0M2E4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTQKKyAgICAtMHgxLjIwNWE4MjAyNTQ1MjAyZDg5MWNlODliZmE2Y2QxNDc2cC0xLAorICAgIDB4MS41MDc4OGNwMQorICB9LAorICB7IC8vIEVudHJ5IDU5NQorICAgIDB4MS4yMDVhODIwMjU0NTIwMmQ4OTFjZTg5YmZhNmNkMTQ3NnAtMSwKKyAgICAtMHgxLjUwNzg4Y3AxCisgIH0sCisgIHsgLy8gRW50cnkgNTk2CisgICAgLTB4MS5lZDIyMjg5ZDg5MWVkNzhjZGM4MThhNGNkZTZkZTkxOHAtMiwKKyAgICAweDEuNThhZDcwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA1OTcKKyAgICAweDEuZWQyMjI4OWQ4OTFlZDc4Y2RjODE4YTRjZGU2ZGU5MThwLTIsCisgICAgLTB4MS41OGFkNzBwMQorICB9LAorICB7IC8vIEVudHJ5IDU5OAorICAgIC0weDEuOWU5MjlhN2ZhZGY4M2I2ZjllOGZiODUxZjUxMmI0NGJwLTIsCisgICAgMHgxLjYwZTI1NHAxCisgIH0sCisgIHsgLy8gRW50cnkgNTk5CisgICAgMHgxLjllOTI5YTdmYWRmODNiNmY5ZThmYjg1MWY1MTJiNDRicC0yLAorICAgIC0weDEuNjBlMjU0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDAKKyAgICAtMHgxLjUzZmUxMGE1NDdhNmVjY2U1Y2FkZGMyMDA1ZGI4MjJicC0yLAorICAgIDB4MS42OTE3MzhwMQorICB9LAorICB7IC8vIEVudHJ5IDYwMQorICAgIDB4MS41M2ZlMTBhNTQ3YTZlY2NlNWNhZGRjMjAwNWRiODIyYnAtMiwKKyAgICAtMHgxLjY5MTczOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjAyCisgICAgLTB4MS4wYzg2ODNiMWJjNjgyNzU5ZTI4NDQxZWY5N2M4ODU0YnAtMiwKKyAgICAweDEuNzE0YzFjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDMKKyAgICAweDEuMGM4NjgzYjFiYzY4Mjc1OWUyODQ0MWVmOTdjODg1NGJwLTIsCisgICAgLTB4MS43MTRjMWNwMQorICB9LAorICB7IC8vIEVudHJ5IDYwNAorICAgIC0weDEuOGVkOTljODU0NjAwOGJlNDY2MTRlYTY2YzdkZGQ3ZTZwLTMsCisgICAgMHgxLjc5ODFwMQorICB9LAorICB7IC8vIEVudHJ5IDYwNQorICAgIDB4MS44ZWQ5OWM4NTQ2MDA4YmU0NjYxNGVhNjZjN2RkZDdlNnAtMywKKyAgICAtMHgxLjc5ODFwMQorICB9LAorICB7IC8vIEVudHJ5IDYwNgorICAgIC0weDEuMDgwZmZlZjRlZGEwMjcxZDgxNjU4ZDU4YWUyODA3OTJwLTMsCisgICAgMHgxLjgxYjVlNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjA3CisgICAgMHgxLjA4MGZmZWY0ZWRhMDI3MWQ4MTY1OGQ1OGFlMjgwNzkycC0zLAorICAgIC0weDEuODFiNWU0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MDgKKyAgICAtMHgxLjA2ZjllZTgzNjg2YWE2MTk0YzAzZGU3MWE2YjUyZjc1cC00LAorICAgIDB4MS44OWVhYzhwMQorICB9LAorICB7IC8vIEVudHJ5IDYwOQorICAgIDB4MS4wNmY5ZWU4MzY4NmFhNjE5NGMwM2RlNzFhNmI1MmY3NXAtNCwKKyAgICAtMHgxLjg5ZWFjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjEwCisgICAgMHgxLjBjODYyN2VjM2JjMmU4ZjBlNmRmNDRmODA5ZjM3MGZkcC0yLAorICAgIC0weDEuODFiNWVlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTEKKyAgICAtMHgxLjBjODYyN2VjM2JjMmU4ZjBlNmRmNDRmODA5ZjM3MGZkcC0yLAorICAgIDB4MS44MWI1ZWVwMgorICB9LAorICB7IC8vIEVudHJ5IDYxMgorICAgIDB4MS4yMDVhNDk3NTNiYjg5ZThjOTcxYzZjZDI4NDJlZGFmMHAtMSwKKyAgICAtMHgxLjcxNGMyNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjEzCisgICAgLTB4MS4yMDVhNDk3NTNiYjg5ZThjOTcxYzZjZDI4NDJlZGFmMHAtMSwKKyAgICAweDEuNzE0YzI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTQKKyAgICAweDEuZWZkN2ZiMWQyOGI4YTA2MDJiMjVmYWRmZTllMDI3N2FwLTEsCisgICAgLTB4MS42MGUyNWVwMgorICB9LAorICB7IC8vIEVudHJ5IDYxNQorICAgIC0weDEuZWZkN2ZiMWQyOGI4YTA2MDJiMjVmYWRmZTllMDI3N2FwLTEsCisgICAgMHgxLjYwZTI1ZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjE2CisgICAgMHgxLmE2NGM0N2JjZmI1ZjljYmRiNDkzNjBhNjU1NDhmZDZkcDAsCisgICAgLTB4MS41MDc4OTZwMgorICB9LAorICB7IC8vIEVudHJ5IDYxNworICAgIC0weDEuYTY0YzQ3YmNmYjVmOWNiZGI0OTM2MGE2NTU0OGZkNmRwMCwKKyAgICAweDEuNTA3ODk2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MTgKKyAgICAweDEuYWY0NWRhYmQzNGI3NTU5N2ZmNzAwNzliM2RlOTg2ZmRwMSwKKyAgICAtMHgxLjQwMGVjZXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjE5CisgICAgLTB4MS5hZjQ1ZGFiZDM0Yjc1NTk3ZmY3MDA3OWIzZGU5ODZmZHAxLAorICAgIDB4MS40MDBlY2VwMgorICB9LAorICB7IC8vIEVudHJ5IDYyMAorICAgIDB4MS5mMmViYTU4M2ZmZjlmOGRmMzY5M2ZmZDk2OTM5NWRlN3A0LAorICAgIC0weDEuMmZhNTA2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjEKKyAgICAtMHgxLmYyZWJhNTgzZmZmOWY4ZGYzNjkzZmZkOTY5Mzk1ZGU3cDQsCisgICAgMHgxLjJmYTUwNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNjIyCisgICAgLTB4MS4xODY3NzBmNWNlZjE1MmE0ZWM3NWZlOWE3MDMxYTU2YXAyLAorICAgIC0weDEuMWYzYjNlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjMKKyAgICAweDEuMTg2NzcwZjVjZWYxNTJhNGVjNzVmZTlhNzAzMWE1NmFwMiwKKyAgICAweDEuMWYzYjNlcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MjQKKyAgICAtMHgxLmVhYjRiNTJlNmNjZTE2MGE1YjlhMjNhNGI5MjlkMDFkcDAsCisgICAgLTB4MS4wZWQxNzZwMgorICB9LAorICB7IC8vIEVudHJ5IDYyNQorICAgIDB4MS5lYWI0YjUyZTZjY2UxNjBhNWI5YTIzYTRiOTI5ZDAxZHAwLAorICAgIDB4MS4wZWQxNzZwMgorICB9LAorICB7IC8vIEVudHJ5IDYyNgorICAgIC0weDEuMTllMmExMjRiYzNkZWVmNjQ4MzM4Mjc0NjI3Y2MzNzFwMCwKKyAgICAtMHgxLmZjY2Y1YXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjI3CisgICAgMHgxLjE5ZTJhMTI0YmMzZGVlZjY0ODMzODI3NDYyN2NjMzcxcDAsCisgICAgMHgxLmZjY2Y1YXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjI4CisgICAgLTB4MS40ZDQ2YWNhNDhkZTQ3ZjVmZDkwYzkwMDBjMTU0MjVkOHAtMSwKKyAgICAtMHgxLmRiZmJjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjI5CisgICAgMHgxLjRkNDZhY2E0OGRlNDdmNWZkOTBjOTAwMGMxNTQyNWQ4cC0xLAorICAgIDB4MS5kYmZiYzhwMQorICB9LAorICB7IC8vIEVudHJ5IDYzMAorICAgIC0weDEuNTNmZTJmNmZjOWQwMjM3NzRhMjEwNWM4MjEzZTRkNWVwLTIsCisgICAgLTB4MS5iYjI4MzZwMQorICB9LAorICB7IC8vIEVudHJ5IDYzMQorICAgIDB4MS41M2ZlMmY2ZmM5ZDAyMzc3NGEyMTA1YzgyMTNlNGQ1ZXAtMiwKKyAgICAweDEuYmIyODM2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzIKKyAgICAtMHgxLjA2ZmExZGE0M2IyNmNkNTgwY2U1YTViODljZjJlZmYzcC00LAorICAgIC0weDEuOWE1NGE0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzMKKyAgICAweDEuMDZmYTFkYTQzYjI2Y2Q1ODBjZTVhNWI4OWNmMmVmZjNwLTQsCisgICAgMHgxLjlhNTRhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM0CisgICAgMHgxLjhlZDg3MTk4ZjQxM2QzYTEyMjY1ODI4N2FhN2ZjMzNlcC0zLAorICAgIC0weDEuNzk4MTEycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzUKKyAgICAtMHgxLjhlZDg3MTk4ZjQxM2QzYTEyMjY1ODI4N2FhN2ZjMzNlcC0zLAorICAgIDB4MS43OTgxMTJwMQorICB9LAorICB7IC8vIEVudHJ5IDYzNgorICAgIDB4MS5lZDIxOGFlZTJkZjRlODBlMzkzNDBiMGM0ZWMzYjFkNXAtMiwKKyAgICAtMHgxLjU4YWQ4MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjM3CisgICAgLTB4MS5lZDIxOGFlZTJkZjRlODBlMzkzNDBiMGM0ZWMzYjFkNXAtMiwKKyAgICAweDEuNThhZDgwcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2MzgKKyAgICAweDEuYjNkZWZkMDk5MWU2MzE1MzY5ZGJkNWUyZGUyZDE0ZmVwLTEsCisgICAgLTB4MS4zN2Q5ZWVwMQorICB9LAorICB7IC8vIEVudHJ5IDYzOQorICAgIC0weDEuYjNkZWZkMDk5MWU2MzE1MzY5ZGJkNWUyZGUyZDE0ZmVwLTEsCisgICAgMHgxLjM3ZDllZXAxCisgIH0sCisgIHsgLy8gRW50cnkgNjQwCisgICAgMHgxLjZlZmU5N2MyM2YyMDY4MjZiNGYwMDE5ZjI3NWQzYTQ0cDAsCisgICAgLTB4MS4xNzA2NWNwMQorICB9LAorICB7IC8vIEVudHJ5IDY0MQorICAgIC0weDEuNmVmZTk3YzIzZjIwNjgyNmI0ZjAwMTlmMjc1ZDNhNDRwMCwKKyAgICAweDEuMTcwNjVjcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDIKKyAgICAweDEuNWJkMGZmOTI1Yzk0ZjdkNjA4Yjg4NDg0ZjkwODFmMmNwMSwKKyAgICAtMHgxLmVjNjU5NHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQzCisgICAgLTB4MS41YmQwZmY5MjVjOTRmN2Q2MDhiODg0ODRmOTA4MWYyY3AxLAorICAgIDB4MS5lYzY1OTRwMAorICB9LAorICB7IC8vIEVudHJ5IDY0NAorICAgIDB4MS40YmI1ZWNlNjU3YmVlMjkyYTgyYTNmZGE2YjgxMmFhZHAzLAorICAgIC0weDEuYWFiZTcwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDUKKyAgICAtMHgxLjRiYjVlY2U2NTdiZWUyOTJhODJhM2ZkYTZiODEyYWFkcDMsCisgICAgMHgxLmFhYmU3MHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjQ2CisgICAgLTB4MS44YmRkNGZlZWYxOGJmYThhNmMyM2RlNmE3MjFmMjQzNnAyLAorICAgIC0weDEuNjkxNzRjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDcKKyAgICAweDEuOGJkZDRmZWVmMThiZmE4YTZjMjNkZTZhNzIxZjI0MzZwMiwKKyAgICAweDEuNjkxNzRjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NDgKKyAgICAtMHgxLjIxMjc5ZTFlOGJmNGJkMzk4M2EzNjc3MjY3ZTU1ODA5cDEsCisgICAgLTB4MS4yNzcwMjhwMAorICB9LAorICB7IC8vIEVudHJ5IDY0OQorICAgIDB4MS4yMTI3OWUxZThiZjRiZDM5ODNhMzY3NzI2N2U1NTgwOXAxLAorICAgIDB4MS4yNzcwMjhwMAorICB9LAorICB7IC8vIEVudHJ5IDY1MAorICAgIC0weDEuNDEwM2E4MTQ3Y2E4MzYxMzZjYzk4ZGI5YmM2ZGRmMzBwMCwKKyAgICAtMHgxLmNiOTIwYXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY1MQorICAgIDB4MS40MTAzYTgxNDdjYTgzNjEzNmNjOThkYjliYzZkZGYzMHAwLAorICAgIDB4MS5jYjkyMGFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTIKKyAgICAtMHgxLjdlMWRiNThhNTVkNmExMmE2NDU3ZTNjNTkyOWFjMmM3cC0xLAorICAgIC0weDEuNDg0M2M0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjUzCisgICAgMHgxLjdlMWRiNThhNTVkNmExMmE2NDU3ZTNjNTkyOWFjMmM3cC0xLAorICAgIDB4MS40ODQzYzRwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTQKKyAgICAtMHgxLjllOTI4YTBjOGU3OTAyMzIwMDE2NGVkMjQwY2FhZDA1cC0yLAorICAgIC0weDEuODllYWZjcC0yCisgIH0sCisgIHsgLy8gRW50cnkgNjU1CisgICAgMHgxLjllOTI4YTBjOGU3OTAyMzIwMDE2NGVkMjQwY2FhZDA1cC0yLAorICAgIDB4MS44OWVhZmNwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTYKKyAgICAtMHgxLjA4MGZjOWQyNGZiZTk4NzZiMzFiMGFhMjlkZDIzOGVhcC0zLAorICAgIC0weDEuMDY5Y2UwcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNjU3CisgICAgMHgxLjA4MGZjOWQyNGZiZTk4NzZiMzFiMGFhMjlkZDIzOGVhcC0zLAorICAgIDB4MS4wNjljZTBwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NTgKKyAgICAweDEuMDgwZjFmMDc1NDBmZDAzYjgyZDRiMzcwZDIzN2ZhM2RwLTMsCisgICAgMHgxLjA2OWMzOHAtMworICB9LAorICB7IC8vIEVudHJ5IDY1OQorICAgIC0weDEuMDgwZjFmMDc1NDBmZDAzYjgyZDRiMzcwZDIzN2ZhM2RwLTMsCisgICAgLTB4MS4wNjljMzhwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjAKKyAgICAweDEuOWU5MjI4NDdlMmIxYjZhNzJkNDg2NzAwZTE4YzA1ZjJwLTIsCisgICAgMHgxLjg5ZWFhOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDY2MQorICAgIC0weDEuOWU5MjI4NDdlMmIxYjZhNzJkNDg2NzAwZTE4YzA1ZjJwLTIsCisgICAgLTB4MS44OWVhYThwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjIKKyAgICAweDEuN2UxZDc0MjU4Y2JjOTY0YjU2MWQ5OWM5YTY2ZjhjN2VwLTEsCisgICAgMHgxLjQ4NDM5YXAtMQorICB9LAorICB7IC8vIEVudHJ5IDY2MworICAgIC0weDEuN2UxZDc0MjU4Y2JjOTY0YjU2MWQ5OWM5YTY2ZjhjN2VwLTEsCisgICAgLTB4MS40ODQzOWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjQKKyAgICAweDEuNDEwMzcyMGYyY2EzZTA1ODBmYmExNTg0OTM5OGE0ZTlwMCwKKyAgICAweDEuY2I5MWUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjY1CisgICAgLTB4MS40MTAzNzIwZjJjYTNlMDU4MGZiYTE1ODQ5Mzk4YTRlOXAwLAorICAgIC0weDEuY2I5MWUwcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNjY2CisgICAgMHgxLjIxMjc2MTE2NzNjY2M3NTMxZjVhZjVhZWRhMzQxMmM1cDEsCisgICAgMHgxLjI3NzAxNHAwCisgIH0sCisgIHsgLy8gRW50cnkgNjY3CisgICAgLTB4MS4yMTI3NjExNjczY2NjNzUzMWY1YWY1YWVkYTM0MTJjNXAxLAorICAgIC0weDEuMjc3MDE0cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjgKKyAgICAweDEuOGJkYzhiYTNkODI3NzIxM2M1Yjc0ZWY4MDZlZjQ2NmJwMiwKKyAgICAweDEuNjkxNzM4cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NjkKKyAgICAtMHgxLjhiZGM4YmEzZDgyNzcyMTNjNWI3NGVmODA2ZWY0NjZicDIsCisgICAgLTB4MS42OTE3MzhwMAorICB9LAorICB7IC8vIEVudHJ5IDY3MAorICAgIC0weDEuNGJiNmZjMDkyYmMxNjUzMDIxNjIwOWE5MTJhYWRhMzdwMywKKyAgICAweDEuYWFiZTVjcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzEKKyAgICAweDEuNGJiNmZjMDkyYmMxNjUzMDIxNjIwOWE5MTJhYWRhMzdwMywKKyAgICAtMHgxLmFhYmU1Y3AwCisgIH0sCisgIHsgLy8gRW50cnkgNjcyCisgICAgLTB4MS41YmQxNTM2OGY4NGJlMGJkYThmMTM1YTVmNzlhZWFjYnAxLAorICAgIDB4MS5lYzY1ODBwMAorICB9LAorICB7IC8vIEVudHJ5IDY3MworICAgIDB4MS41YmQxNTM2OGY4NGJlMGJkYThmMTM1YTVmNzlhZWFjYnAxLAorICAgIC0weDEuZWM2NTgwcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzQKKyAgICAtMHgxLjZlZmVkNGRjODk0NmUxYzM2MjBkNzliYjBkNjU0MzM4cDAsCisgICAgMHgxLjE3MDY1MnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjc1CisgICAgMHgxLjZlZmVkNGRjODk0NmUxYzM2MjBkNzliYjBkNjU0MzM4cDAsCisgICAgLTB4MS4xNzA2NTJwMQorICB9LAorICB7IC8vIEVudHJ5IDY3NgorICAgIC0weDEuYjNkZjQyMDZkMjMyNzk0ZDU3NjE5OTJkODhjNWEzOTRwLTEsCisgICAgMHgxLjM3ZDllNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjc3CisgICAgMHgxLmIzZGY0MjA2ZDIzMjc5NGQ1NzYxOTkyZDg4YzVhMzk0cC0xLAorICAgIC0weDEuMzdkOWU0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2NzgKKyAgICAtMHgxLmVkMjFlZDdiYzRiNTk2OGJkYjBjZDZkYTI2OWNkNTVmcC0yLAorICAgIDB4MS41OGFkNzZwMQorICB9LAorICB7IC8vIEVudHJ5IDY3OQorICAgIDB4MS5lZDIxZWQ3YmM0YjU5NjhiZGIwY2Q2ZGEyNjljZDU1ZnAtMiwKKyAgICAtMHgxLjU4YWQ3NnAxCisgIH0sCisgIHsgLy8gRW50cnkgNjgwCisgICAgLTB4MS44ZWQ5MTdhYTc0ZTczM2I5MTk0ZDUzN2M4ZGYzM2M2NHAtMywKKyAgICAweDEuNzk4MTA4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODEKKyAgICAweDEuOGVkOTE3YWE3NGU3MzNiOTE5NGQ1MzdjOGRmMzNjNjRwLTMsCisgICAgLTB4MS43OTgxMDhwMQorICB9LAorICB7IC8vIEVudHJ5IDY4MgorICAgIDB4MS4wNmY4ZGM1MjhlYTAxODgyMDY0ZWUyNDJmNThhMmI4OHAtNCwKKyAgICAweDEuOWE1NDlhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODMKKyAgICAtMHgxLjA2ZjhkYzUyOGVhMDE4ODIwNjRlZTI0MmY1OGEyYjg4cC00LAorICAgIC0weDEuOWE1NDlhcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA2ODQKKyAgICAweDEuNTNmZGQ2OWUxNDM3ZGI5NTdjNjJlOGNjNTU3NDJiZWVwLTIsCisgICAgMHgxLmJiMjgyY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjg1CisgICAgLTB4MS41M2ZkZDY5ZTE0MzdkYjk1N2M2MmU4Y2M1NTc0MmJlZXAtMiwKKyAgICAtMHgxLmJiMjgyY3AxCisgIH0sCisgIHsgLy8gRW50cnkgNjg2CisgICAgMHgxLjRkNDY3M2IxYzc2MzVjYzg5M2UxYzhkMmNhNTdiM2U5cC0xLAorICAgIDB4MS5kYmZiYmVwMQorICB9LAorICB7IC8vIEVudHJ5IDY4NworICAgIC0weDEuNGQ0NjczYjFjNzYzNWNjODkzZTFjOGQyY2E1N2IzZTlwLTEsCisgICAgLTB4MS5kYmZiYmVwMQorICB9LAorICB7IC8vIEVudHJ5IDY4OAorICAgIDB4MS4xOWUyNzRlNGZkZWM5ZTc4ZWY2ODcyMDgxYjU1NzJjZnAwLAorICAgIDB4MS5mY2NmNTBwMQorICB9LAorICB7IC8vIEVudHJ5IDY4OQorICAgIC0weDEuMTllMjc0ZTRmZGVjOWU3OGVmNjg3MjA4MWI1NTcyY2ZwMCwKKyAgICAtMHgxLmZjY2Y1MHAxCisgIH0sCisgIHsgLy8gRW50cnkgNjkwCisgICAgMHgxLmVhYjQ0NTAwM2E3YjU0MmEyZDRkODdhODg3OTNiYjY3cDAsCisgICAgMHgxLjBlZDE3MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjkxCisgICAgLTB4MS5lYWI0NDUwMDNhN2I1NDJhMmQ0ZDg3YTg4NzkzYmI2N3AwLAorICAgIC0weDEuMGVkMTcwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTIKKyAgICAweDEuMTg2NmY3YzkxNjYwZDljOWY0YjJkMTRlOTEzNzU3MzJwMiwKKyAgICAweDEuMWYzYjM4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTMKKyAgICAtMHgxLjE4NjZmN2M5MTY2MGQ5YzlmNGIyZDE0ZTkxMzc1NzMycDIsCisgICAgLTB4MS4xZjNiMzhwMgorICB9LAorICB7IC8vIEVudHJ5IDY5NAorICAgIC0weDEuZjJmMTU5OWIyOWE3ZGU5NTJiOGJhMTg3N2Q5ZjVlNjFwNCwKKyAgICAweDEuMmZhNXAyCisgIH0sCisgIHsgLy8gRW50cnkgNjk1CisgICAgMHgxLmYyZjE1OTliMjlhN2RlOTUyYjhiYTE4NzdkOWY1ZTYxcDQsCisgICAgLTB4MS4yZmE1cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTYKKyAgICAtMHgxLmFmNDY2ZWY3YjE1NjQ1NDU1ZTE1ZmJiYWU2YmI0YmM2cDEsCisgICAgMHgxLjQwMGVjOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNjk3CisgICAgMHgxLmFmNDY2ZWY3YjE1NjQ1NDU1ZTE1ZmJiYWU2YmI0YmM2cDEsCisgICAgLTB4MS40MDBlYzhwMgorICB9LAorICB7IC8vIEVudHJ5IDY5OAorICAgIC0weDEuYTY0Y2ExMGJmZWZkMmIwNGJiNmExYmI3MDhjMjg5NjdwMCwKKyAgICAweDEuNTA3ODkwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA2OTkKKyAgICAweDEuYTY0Y2ExMGJmZWZkMmIwNGJiNmExYmI3MDhjMjg5NjdwMCwKKyAgICAtMHgxLjUwNzg5MHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzAwCisgICAgLTB4MS5lZmQ4NTgyMWVjOTI3ZjJhODllYzQxYWNlZTU4NzIzMHAtMSwKKyAgICAweDEuNjBlMjU4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDEKKyAgICAweDEuZWZkODU4MjFlYzkyN2YyYTg5ZWM0MWFjZWU1ODcyMzBwLTEsCisgICAgLTB4MS42MGUyNThwMgorICB9LAorICB7IC8vIEVudHJ5IDcwMgorICAgIC0weDEuMjA1YTg4YWVjNjRjYWQzNWQ3NzUyYzczNjIwYzIxMzlwLTEsCisgICAgMHgxLjcxNGMyMHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzAzCisgICAgMHgxLjIwNWE4OGFlYzY0Y2FkMzVkNzc1MmM3MzYyMGMyMTM5cC0xLAorICAgIC0weDEuNzE0YzIwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDQKKyAgICAtMHgxLjBjODY4ZTg2MzU0M2ZkOTg5NDc2YzhjZGVmZmE5M2VhcC0yLAorICAgIDB4MS44MWI1ZThwMgorICB9LAorICB7IC8vIEVudHJ5IDcwNQorICAgIDB4MS4wYzg2OGU4NjM1NDNmZDk4OTQ3NmM4Y2RlZmZhOTNlYXAtMiwKKyAgICAtMHgxLjgxYjVlOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzA2CisgICAgMHgxLmYwOWI2MWE4YTA0ZjA4OTg4NTFmMWQ3NjA0ZmExM2M4cC01LAorICAgIDB4MS5lZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MDcKKyAgICAtMHgxLmYwOWI2MWE4YTA0ZjA4OTg4NTFmMWQ3NjA0ZmExM2M4cC01LAorICAgIC0weDEuZWZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgNzA4CisgICAgMHgxLmYwOWI2M2FhODFmYzQ2ZTk1ZTA2NDA1YjQxZThiNGNjcC01LAorICAgIDB4MS5mMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDcwOQorICAgIC0weDEuZjA5YjYzYWE4MWZjNDZlOTVlMDY0MDViNDFlOGI0Y2NwLTUsCisgICAgLTB4MS5mMHAtNQorICB9LAorICB7IC8vIEVudHJ5IDcxMAorICAgIDB4MS5mMDliNjVhYzYzYTk4OTFmMTQxOGM0MzM4YzFlNDE5ZXAtNSwKKyAgICAweDEuZjAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgNzExCisgICAgLTB4MS5mMDliNjVhYzYzYTk4OTFmMTQxOGM0MzM4YzFlNDE5ZXAtNSwKKyAgICAtMHgxLmYwMDAwMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDcxMgorICAgIDB4MS5mYThmMWZjMGNlODZjMjE0YmY3NjVmZDU5ZTg3OThhNXAtNCwKKyAgICAweDEuZjdmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgNzEzCisgICAgLTB4MS5mYThmMWZjMGNlODZjMjE0YmY3NjVmZDU5ZTg3OThhNXAtNCwKKyAgICAtMHgxLmY3ZmZmZXAtNAorICB9LAorICB7IC8vIEVudHJ5IDcxNAorICAgIDB4MS5mYThmMjFjOGEzM2FmZDMzNTUxOThlOGQ3NzE2YTgxMXAtNCwKKyAgICAweDEuZjhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTUKKyAgICAtMHgxLmZhOGYyMWM4YTMzYWZkMzM1NTE5OGU4ZDc3MTZhODExcC00LAorICAgIC0weDEuZjhwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTYKKyAgICAweDEuZmE4ZjIzZDA3N2VmNDg2NDVlZmY5YTUxOTYyOGIzYTlwLTQsCisgICAgMHgxLmY4MDAwMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDcxNworICAgIC0weDEuZmE4ZjIzZDA3N2VmNDg2NDVlZmY5YTUxOTYyOGIzYTlwLTQsCisgICAgLTB4MS5mODAwMDJwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MTgKKyAgICAweDEuNGVmMDZhYTczZWU2YTQzOWMwYzlmNDUwNDZiMjU5NzhwLTMsCisgICAgMHgxLjRiZmZmZXAtMworICB9LAorICB7IC8vIEVudHJ5IDcxOQorICAgIC0weDEuNGVmMDZhYTczZWU2YTQzOWMwYzlmNDUwNDZiMjU5NzhwLTMsCisgICAgLTB4MS40YmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjAKKyAgICAweDEuNGVmMDZjYjRmMGE4N2E1YzhlZWVlYmNlYjEyYTIyYjRwLTMsCisgICAgMHgxLjRjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzIxCisgICAgLTB4MS40ZWYwNmNiNGYwYTg3YTVjOGVlZWViY2ViMTJhMjJiNHAtMywKKyAgICAtMHgxLjRjcC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzIyCisgICAgMHgxLjRlZjA2ZWMyYTI2YTdiN2MxNzIxZmZhZmI5M2MwMjgxcC0zLAorICAgIDB4MS40YzAwMDJwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjMKKyAgICAtMHgxLjRlZjA2ZWMyYTI2YTdiN2MxNzIxZmZhZmI5M2MwMjgxcC0zLAorICAgIC0weDEuNGMwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzI0CisgICAgMHgxLjNjYzJhMmZkOTExZTE1NTdkNTdiNDRhYmYyOGM0Y2NhcC0yLAorICAgIDB4MS4zMzMzMzJwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjUKKyAgICAtMHgxLjNjYzJhMmZkOTExZTE1NTdkNTdiNDRhYmYyOGM0Y2NhcC0yLAorICAgIC0weDEuMzMzMzMycC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzI2CisgICAgMHgxLjNjYzJhNTJlOGY0MTM3Y2EyN2QxZGMwNTY3MTk1NDQzcC0yLAorICAgIDB4MS4zMzMzMzRwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjcKKyAgICAtMHgxLjNjYzJhNTJlOGY0MTM3Y2EyN2QxZGMwNTY3MTk1NDQzcC0yLAorICAgIC0weDEuMzMzMzM0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzI4CisgICAgMHgxLjNjYzJhNzVmOGQ2NTA3YzU4OWJmMDhlMDM3MTM5NGJjcC0yLAorICAgIDB4MS4zMzMzMzZwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MjkKKyAgICAtMHgxLjNjYzJhNzVmOGQ2NTA3YzU4OWJmMDhlMDM3MTM5NGJjcC0yLAorICAgIC0weDEuMzMzMzM2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzMwCisgICAgMHgxLjk5NDM2ZTVmMDdiNzNkZGExZWY2MWE4MDBhYWRmZGQzcC0xLAorICAgIDB4MS41OTQzMTZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzEKKyAgICAtMHgxLjk5NDM2ZTVmMDdiNzNkZGExZWY2MWE4MDBhYWRmZGQzcC0xLAorICAgIC0weDEuNTk0MzE2cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzMyCisgICAgMHgxLjk5NDM3MWE2MmJmZTEzZWIxYzc1NWNiNWJlNDZmODUzcC0xLAorICAgIDB4MS41OTQzMThwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzMKKyAgICAtMHgxLjk5NDM3MWE2MmJmZTEzZWIxYzc1NWNiNWJlNDZmODUzcC0xLAorICAgIC0weDEuNTk0MzE4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzM0CisgICAgMHgxLjk5NDM3NGVkNTA0YTI3ODIyNjU3MzU2MmI2MGVjYTlhcC0xLAorICAgIDB4MS41OTQzMWFwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzUKKyAgICAtMHgxLjk5NDM3NGVkNTA0YTI3ODIyNjU3MzU2MmI2MGVjYTlhcC0xLAorICAgIC0weDEuNTk0MzFhcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzM2CisgICAgMHgxLmZiYzUwZGU3YzYwNWE0ZDFkMGYxMTE5YjEyOTRiNmYwcC0xLAorICAgIDB4MS44ZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3MzcKKyAgICAtMHgxLmZiYzUwZGU3YzYwNWE0ZDFkMGYxMTE5YjEyOTRiNmYwcC0xLAorICAgIC0weDEuOGZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzM4CisgICAgMHgxLmZiYzUxMWRmNTkxN2Y1MzliYmNmNzc4YmMxYTIyMjQ5cC0xLAorICAgIDB4MS45MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDczOQorICAgIC0weDEuZmJjNTExZGY1OTE3ZjUzOWJiY2Y3NzhiYzFhMjIyNDlwLTEsCisgICAgLTB4MS45MHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc0MAorICAgIDB4MS5mYmM1MTVkNmVjMzIyM2ZmYmVkNGJiNzUxNTRmZGEwZnAtMSwKKyAgICAweDEuOTAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzQxCisgICAgLTB4MS5mYmM1MTVkNmVjMzIyM2ZmYmVkNGJiNzUxNTRmZGEwZnAtMSwKKyAgICAtMHgxLjkwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDc0MgorICAgIC0weDEucC0xNDksCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDc0MworICAgIDB4MS5wLTE0OSwKKyAgICAweDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NDQKKyAgICAwLjAsCisgICAgMC4wCisgIH0sCisgIHsgLy8gRW50cnkgNzQ1CisgICAgMHgxLnAtMTQ5LAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDc0NgorICAgIC0weDEucC0xNDksCisgICAgLTB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDc0NworICAgIDB4MS45MjcyNzc1ZWE1ZWNmZjRlNDNlY2RlZjNkODVlYzIyNnAtNSwKKyAgICAweDEuOTIxZmI0cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzQ4CisgICAgLTB4MS45MjcyNzc1ZWE1ZWNmZjRlNDNlY2RlZjNkODVlYzIyNnAtNSwKKyAgICAtMHgxLjkyMWZiNHAtNQorICB9LAorICB7IC8vIEVudHJ5IDc0OQorICAgIDB4MS45MjcyNzk1ZmUyNDJkOWViOTM5M2E3NDQ2NjIwYzM5NHAtNSwKKyAgICAweDEuOTIxZmI2cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzUwCisgICAgLTB4MS45MjcyNzk1ZmUyNDJkOWViOTM5M2E3NDQ2NjIwYzM5NHAtNSwKKyAgICAtMHgxLjkyMWZiNnAtNQorICB9LAorICB7IC8vIEVudHJ5IDc1MQorICAgIDB4MS45MjcyN2I2MTFlOThiN2FmYjk3OTc3NTUxZDFjNWYzOHAtNSwKKyAgICAweDEuOTIxZmI4cC01CisgIH0sCisgIHsgLy8gRW50cnkgNzUyCisgICAgLTB4MS45MjcyN2I2MTFlOThiN2FmYjk3OTc3NTUxZDFjNWYzOHAtNSwKKyAgICAtMHgxLjkyMWZiOHAtNQorICB9LAorICB7IC8vIEVudHJ5IDc1MworICAgIDB4MS45MzZiYjc3ZTRhYzg1OWJjNjliYzRhYmM5ZTkxZjAyNXAtNCwKKyAgICAweDEuOTIxZmI0cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzU0CisgICAgLTB4MS45MzZiYjc3ZTRhYzg1OWJjNjliYzRhYmM5ZTkxZjAyNXAtNCwKKyAgICAtMHgxLjkyMWZiNHAtNAorICB9LAorICB7IC8vIEVudHJ5IDc1NQorICAgIDB4MS45MzZiYjk4MzQyNDEwMjJlY2QwNzBiOTA2NDYzMjcyMXAtNCwKKyAgICAweDEuOTIxZmI2cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzU2CisgICAgLTB4MS45MzZiYjk4MzQyNDEwMjJlY2QwNzBiOTA2NDYzMjcyMXAtNCwKKyAgICAtMHgxLjkyMWZiNnAtNAorICB9LAorICB7IC8vIEVudHJ5IDc1NworICAgIDB4MS45MzZiYmI4ODM5YjliNzViZGNjNWY2ODcwMjY3YTYwOXAtNCwKKyAgICAweDEuOTIxZmI4cC00CisgIH0sCisgIHsgLy8gRW50cnkgNzU4CisgICAgLTB4MS45MzZiYmI4ODM5YjliNzViZGNjNWY2ODcwMjY3YTYwOXAtNCwKKyAgICAtMHgxLjkyMWZiOHAtNAorICB9LAorICB7IC8vIEVudHJ5IDc1OQorICAgIDB4MS45NzVmNWNiNDNiZDk1MWFhMmU4OWEwNWNiZjVlNzBmZnAtMywKKyAgICAweDEuOTIxZmI0cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzYwCisgICAgLTB4MS45NzVmNWNiNDNiZDk1MWFhMmU4OWEwNWNiZjVlNzBmZnAtMywKKyAgICAtMHgxLjkyMWZiNHAtMworICB9LAorICB7IC8vIEVudHJ5IDc2MQorICAgIDB4MS45NzVmNWVjODdkZGM0ZTdhMzU3MDU5ZjcxYTlmMDViMnAtMywKKyAgICAweDEuOTIxZmI2cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzYyCisgICAgLTB4MS45NzVmNWVjODdkZGM0ZTdhMzU3MDU5ZjcxYTlmMDViMnAtMywKKyAgICAtMHgxLjkyMWZiNnAtMworICB9LAorICB7IC8vIEVudHJ5IDc2MworICAgIDB4MS45NzVmNjBkY2JmZGY4MDM5ZjAxZWI3ODY0YmMwOWUxM3AtMywKKyAgICAweDEuOTIxZmI4cC0zCisgIH0sCisgIHsgLy8gRW50cnkgNzY0CisgICAgLTB4MS45NzVmNjBkY2JmZGY4MDM5ZjAxZWI3ODY0YmMwOWUxM3AtMywKKyAgICAtMHgxLjkyMWZiOHAtMworICB9LAorICB7IC8vIEVudHJ5IDc2NQorICAgIDB4MS5hODI3OTgyM2U5YmEzMGVlNjIzYTU0MDJhNDg1OTBmY3AtMiwKKyAgICAweDEuOTIxZmI0cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzY2CisgICAgLTB4MS5hODI3OTgyM2U5YmEzMGVlNjIzYTU0MDJhNDg1OTBmY3AtMiwKKyAgICAtMHgxLjkyMWZiNHAtMgorICB9LAorICB7IC8vIEVudHJ5IDc2NworICAgIDB4MS5hODI3OWE3YmMyMjA2ZmZmM2FmYTUyZjE2OGM1ZjhmMnAtMiwKKyAgICAweDEuOTIxZmI2cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzY4CisgICAgLTB4MS5hODI3OWE3YmMyMjA2ZmZmM2FmYTUyZjE2OGM1ZjhmMnAtMiwKKyAgICAtMHgxLjkyMWZiNnAtMgorICB9LAorICB7IC8vIEVudHJ5IDc2OQorICAgIDB4MS5hODI3OWNkMzlhODdhNzg2ZTE0MDUzN2RiNzJmZjMzNHAtMiwKKyAgICAweDEuOTIxZmI4cC0yCisgIH0sCisgIHsgLy8gRW50cnkgNzcwCisgICAgLTB4MS5hODI3OWNkMzlhODdhNzg2ZTE0MDUzN2RiNzJmZjMzNHAtMiwKKyAgICAtMHgxLjkyMWZiOHAtMgorICB9LAorICB7IC8vIEVudHJ5IDc3MQorICAgIDB4MS5mZmZmZmQ3NzdhNWU5MWU2MWY1MzgwZmI4MDhkMzI3MnAtMSwKKyAgICAweDEuOTIxZmI0cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzcyCisgICAgLTB4MS5mZmZmZmQ3NzdhNWU5MWU2MWY1MzgwZmI4MDhkMzI3MnAtMSwKKyAgICAtMHgxLjkyMWZiNHAtMQorICB9LAorICB7IC8vIEVudHJ5IDc3MworICAgIDB4MS4wMDAwMDBiYmJkMmVjMDZkNmQ2ZmZmMzY1NWEzNDZhY3AwLAorICAgIDB4MS45MjFmYjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzQKKyAgICAtMHgxLjAwMDAwMGJiYmQyZWMwNmQ2ZDZmZmYzNjU1YTM0NmFjcDAsCisgICAgLTB4MS45MjFmYjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3NzUKKyAgICAweDEuMDAwMDAyYmJiZDMyMzdlN2QxMTQyNzZlZDMyOWFmNWJwMCwKKyAgICAweDEuOTIxZmI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzc2CisgICAgLTB4MS4wMDAwMDJiYmJkMzIzN2U3ZDExNDI3NmVkMzI5YWY1YnAwLAorICAgIC0weDEuOTIxZmI4cC0xCisgIH0sCisgIHsgLy8gRW50cnkgNzc3CisgICAgMHgxLjk0MzdiMzM2YjZiMGM0NzliMjI4MDk5OWIxOTU3NWM3cDIzLAorICAgIDB4MS45MjFmYjRwMAorICB9LAorICB7IC8vIEVudHJ5IDc3OAorICAgIC0weDEuOTQzN2IzMzZiNmIwYzQ3OWIyMjgwOTk5YjE5NTc1YzdwMjMsCisgICAgLTB4MS45MjFmYjRwMAorICB9LAorICB7IC8vIEVudHJ5IDc3OQorICAgIC0weDEuNWQxNDk0NmRjOTg5NzVkNjQyMWE1NTI4NGZlMDIwYTFwMjQsCisgICAgMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgNzgwCisgICAgMHgxLjVkMTQ5NDZkYzk4OTc1ZDY0MjFhNTUyODRmZTAyMGExcDI0LAorICAgIC0weDEuOTIxZmI2cDAKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODEKKyAgICAtMHgxLjc2YTE5MGViMmIwNzE4ZDhkYjU1ZjdkMmFiZWIwN2QycDIyLAorICAgIDB4MS45MjFmYjhwMAorICB9LAorICB7IC8vIEVudHJ5IDc4MgorICAgIDB4MS43NmExOTBlYjJiMDcxOGQ4ZGI1NWY3ZDJhYmViMDdkMnAyMiwKKyAgICAtMHgxLjkyMWZiOHAwCisgIH0sCisgIHsgLy8gRW50cnkgNzgzCisgICAgLTB4MS40NDQyZDE4NDY5OGM0MjZjOGUzZWZkMzU2Y2JlYmUwYXAtMjMsCisgICAgMHgxLjkyMWZiNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzg0CisgICAgMHgxLjQ0NDJkMTg0Njk4YzQyNmM4ZTNlZmQzNTZjYmViZTBhcC0yMywKKyAgICAtMHgxLjkyMWZiNHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzg1CisgICAgMHgxLjc3N2E1Y2Y3MmNlZGYzYjU0NGM4MTgwOGI1MTVmMWY5cC0yNCwKKyAgICAweDEuOTIxZmI2cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODYKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlZGYzYjU0NGM4MTgwOGI1MTVmMWY5cC0yNCwKKyAgICAtMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgNzg3CisgICAgMHgxLjVkZGU5NzNkY2I0OGQ2ZTNkMTNjZjJhNTE1NTBlOTExcC0yMiwKKyAgICAweDEuOTIxZmI4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA3ODgKKyAgICAtMHgxLjVkZGU5NzNkY2I0OGQ2ZTNkMTNjZjJhNTE1NTBlOTExcC0yMiwKKyAgICAtMHgxLjkyMWZiOHAxCisgIH0sCisgIHsgLy8gRW50cnkgNzg5CisgICAgLTB4MS40NDQyZDE4NDY5OTQ2MzYyZjNmNmNjN2M0Mzg1NzY2MXAtMjIsCisgICAgMHgxLjkyMWZiNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzkwCisgICAgMHgxLjQ0NDJkMTg0Njk5NDYzNjJmM2Y2Y2M3YzQzODU3NjYxcC0yMiwKKyAgICAtMHgxLjkyMWZiNHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzkxCisgICAgMHgxLjc3N2E1Y2Y3MmNmMTFiNzM5ZDJhYjE4NzdlODFhOWM3cC0yMywKKyAgICAweDEuOTIxZmI2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTIKKyAgICAtMHgxLjc3N2E1Y2Y3MmNmMTFiNzM5ZDJhYjE4NzdlODFhOWM3cC0yMywKKyAgICAtMHgxLjkyMWZiNnAyCisgIH0sCisgIHsgLy8gRW50cnkgNzkzCisgICAgMHgxLjVkZGU5NzNkY2I3MWFlYjZlNzc2NjY4YmJiM2RlMjUzcC0yMSwKKyAgICAweDEuOTIxZmI4cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTQKKyAgICAtMHgxLjVkZGU5NzNkY2I3MWFlYjZlNzc2NjY4YmJiM2RlMjUzcC0yMSwKKyAgICAtMHgxLjkyMWZiOHAyCisgIH0sCisgIHsgLy8gRW50cnkgNzk1CisgICAgLTB4MS40NDQyZDE4NDY5YjRlNzNjOGFkNjBlN2I5ZjI4OGM1Y3AtMjEsCisgICAgMHgxLjkyMWZiNHAzCisgIH0sCisgIHsgLy8gRW50cnkgNzk2CisgICAgMHgxLjQ0NDJkMTg0NjliNGU3M2M4YWQ2MGU3YjlmMjg4YzVjcC0yMSwKKyAgICAtMHgxLjkyMWZiNHAzCisgIH0sCisgIHsgLy8gRW50cnkgNzk3CisgICAgMHgxLjc3N2E1Y2Y3MmNmZGJhNmNmZWI1MTgyNThiY2YyNjNjcC0yMiwKKyAgICAweDEuOTIxZmI2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA3OTgKKyAgICAtMHgxLjc3N2E1Y2Y3MmNmZGJhNmNmZWI1MTgyNThiY2YyNjNjcC0yMiwKKyAgICAtMHgxLjkyMWZiNnAzCisgIH0sCisgIHsgLy8gRW50cnkgNzk5CisgICAgMHgxLjVkZGU5NzNkY2MxNTBlMDM0MDVjYTg5NDg4NjYwMmMycC0yMCwKKyAgICAweDEuOTIxZmI4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDAKKyAgICAtMHgxLjVkZGU5NzNkY2MxNTBlMDM0MDVjYTg5NDg4NjYwMmMycC0yMCwKKyAgICAtMHgxLjkyMWZiOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODAxCisgICAgLTB4MS40NDQyZDE4NDZhMzZmNmEyZTY1MzY0YjkxNjM4MmU5YnAtMjAsCisgICAgMHgxLjkyMWZiNHA0CisgIH0sCisgIHsgLy8gRW50cnkgODAyCisgICAgMHgxLjQ0NDJkMTg0NmEzNmY2YTJlNjUzNjRiOTE2MzgyZTlicC0yMCwKKyAgICAtMHgxLjkyMWZiNHA0CisgIH0sCisgIHsgLy8gRW50cnkgODAzCisgICAgMHgxLjc3N2E1Y2Y3MmQzMDM2NTI4NGRlYmNjYzNhZWVlYzE3cC0yMSwKKyAgICAweDEuOTIxZmI2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDQKKyAgICAtMHgxLjc3N2E1Y2Y3MmQzMDM2NTI4NGRlYmNjYzNhZWVlYzE3cC0yMSwKKyAgICAtMHgxLjkyMWZiNnA0CisgIH0sCisgIHsgLy8gRW50cnkgODA1CisgICAgMHgxLjVkZGU5NzNkY2VhMjhiMzRhM2ZjZDc5YjE0NGE1MDUwcC0xOSwKKyAgICAweDEuOTIxZmI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MDYKKyAgICAtMHgxLjVkZGU5NzNkY2VhMjhiMzRhM2ZjZDc5YjE0NGE1MDUwcC0xOSwKKyAgICAtMHgxLjkyMWZiOHA0CisgIH0sCisgIHsgLy8gRW50cnkgODA3CisgICAgLTB4MS40NDQyZDE4NDZjM2YzNDNjNTQ0ZGExYWY3YWFiNjkwY3AtMTksCisgICAgMHgxLjkyMWZiNHA1CisgIH0sCisgIHsgLy8gRW50cnkgODA4CisgICAgMHgxLjQ0NDJkMTg0NmMzZjM0M2M1NDRkYTFhZjdhYWI2OTBjcC0xOSwKKyAgICAtMHgxLjkyMWZiNHA1CisgIH0sCisgIHsgLy8gRW50cnkgODA5CisgICAgMHgxLjc3N2E1Y2Y3MmRmYTI1ZTg5ZDg1ZjI0ZTk2MGI0NDU1cC0yMCwKKyAgICAweDEuOTIxZmI2cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTAKKyAgICAtMHgxLjc3N2E1Y2Y3MmRmYTI1ZTg5ZDg1ZjI0ZTk2MGI0NDU1cC0yMCwKKyAgICAtMHgxLjkyMWZiNnA1CisgIH0sCisgIHsgLy8gRW50cnkgODExCisgICAgMHgxLjVkZGU5NzNkZDhkODdmZmEzMmYwMDFlYWI4MWQ5NjBjcC0xOCwKKyAgICAweDEuOTIxZmI4cDUKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTIKKyAgICAtMHgxLjVkZGU5NzNkZDhkODdmZmEzMmYwMDFlYWI4MWQ5NjBjcC0xOCwKKyAgICAtMHgxLjkyMWZiOHA1CisgIH0sCisgIHsgLy8gRW50cnkgODEzCisgICAgLTB4MS40NDQyZDE4NDc0NjAyYWEyMGM4NGQ1OTE4ZmM2OGE4ZXAtMTgsCisgICAgMHgxLjkyMWZiNHA2CisgIH0sCisgIHsgLy8gRW50cnkgODE0CisgICAgMHgxLjQ0NDJkMTg0NzQ2MDJhYTIwYzg0ZDU5MThmYzY4YThlcC0xOCwKKyAgICAtMHgxLjkyMWZiNHA2CisgIH0sCisgIHsgLy8gRW50cnkgODE1CisgICAgMHgxLjc3N2E1Y2Y3MzEyMWU0NDEwMDJjZjZkMWVjNTBkNTZkcC0xOSwKKyAgICAweDEuOTIxZmI2cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTYKKyAgICAtMHgxLjc3N2E1Y2Y3MzEyMWU0NDEwMDJjZjZkMWVjNTBkNTZkcC0xOSwKKyAgICAtMHgxLjkyMWZiNnA2CisgIH0sCisgIHsgLy8gRW50cnkgODE3CisgICAgMHgxLjVkZGU5NzNlMDFiMDUzMTA3NWUzOGU4MDhjZTA0OGYycC0xNywKKyAgICAweDEuOTIxZmI4cDYKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MTgKKyAgICAtMHgxLjVkZGU5NzNlMDFiMDUzMTA3NWUzOGU4MDhjZTA0OGYycC0xNywKKyAgICAtMHgxLjkyMWZiOHA2CisgIH0sCisgIHsgLy8gRW50cnkgODE5CisgICAgLTB4MS40NDQyZDE4NDk0ZTQwNDM4ZjI0NWE1YTIxOWRlYTIzNXAtMTcsCisgICAgMHgxLjkyMWZiNHA3CisgIH0sCisgIHsgLy8gRW50cnkgODIwCisgICAgMHgxLjQ0NDJkMTg0OTRlNDA0MzhmMjQ1YTVhMjE5ZGVhMjM1cC0xNywKKyAgICAtMHgxLjkyMWZiNHA3CisgIH0sCisgIHsgLy8gRW50cnkgODIxCisgICAgMHgxLjc3N2E1Y2Y3M2RjMGRkYTI4YjZiZjA3ZGUyYjJkNWU2cC0xOCwKKyAgICAweDEuOTIxZmI2cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjIKKyAgICAtMHgxLjc3N2E1Y2Y3M2RjMGRkYTI4YjZiZjA3ZGUyYjJkNWU2cC0xOCwKKyAgICAtMHgxLjkyMWZiNnA3CisgIH0sCisgIHsgLy8gRW50cnkgODIzCisgICAgMHgxLjVkZGU5NzNlYTUwZjlmNjlmNDFmZjY0YzhjNmRiNzYxcC0xNiwKKyAgICAweDEuOTIxZmI4cDcKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjQKKyAgICAtMHgxLjVkZGU5NzNlYTUwZjlmNjlmNDFmZjY0YzhjNmRiNzYxcC0xNiwKKyAgICAtMHgxLjkyMWZiOHA3CisgIH0sCisgIHsgLy8gRW50cnkgODI1CisgICAgLTB4MS4wMDAwMGZjY2M4ZjE1ZWU4OWYwOWQyMjJlMTRjNzI5MnAwLAorICAgIDB4MS4yZDk3YzRwMQorICB9LAorICB7IC8vIEVudHJ5IDgyNgorICAgIDB4MS4wMDAwMGZjY2M4ZjE1ZWU4OWYwOWQyMjJlMTRjNzI5MnAwLAorICAgIC0weDEuMmQ5N2M0cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MjcKKyAgICAtMHgxLjAwMDAwN2NjYzg5MmY4YTA3NjBjYzIwODI3YWNlNDc2cDAsCisgICAgMHgxLjJkOTdjNnAxCisgIH0sCisgIHsgLy8gRW50cnkgODI4CisgICAgMHgxLjAwMDAwN2NjYzg5MmY4YTA3NjBjYzIwODI3YWNlNDc2cDAsCisgICAgLTB4MS4yZDk3YzZwMQorICB9LAorICB7IC8vIEVudHJ5IDgyOQorICAgIC0weDEuZmZmZmZmOTk5MGU5MjRiODY2ZTgzMWM5ZTllNjM5YzdwLTEsCisgICAgMHgxLjJkOTdjOHAxCisgIH0sCisgIHsgLy8gRW50cnkgODMwCisgICAgMHgxLmZmZmZmZjk5OTBlOTI0Yjg2NmU4MzFjOWU5ZTYzOWM3cC0xLAorICAgIC0weDEuMmQ5N2M4cDEKKyAgfSwKKyAgeyAvLyBFbnRyeSA4MzEKKyAgICAweDEuZmZmZmViNTU2NDNiOWE2NDhjMjcyMGJkZTFkMjI3NjRwLTEsCisgICAgMHgxLmY2YTdhMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODMyCisgICAgLTB4MS5mZmZmZWI1NTY0M2I5YTY0OGMyNzIwYmRlMWQyMjc2NHAtMSwKKyAgICAtMHgxLmY2YTdhMHAxCisgIH0sCisgIHsgLy8gRW50cnkgODMzCisgICAgMHgxLmZmZmZmYjU1NjNkNjQ1ODVlOWRjYzk3ZDc0MzIxNDYxcC0xLAorICAgIDB4MS5mNmE3YTJwMQorICB9LAorICB7IC8vIEVudHJ5IDgzNAorICAgIC0weDEuZmZmZmZiNTU2M2Q2NDU4NWU5ZGNjOTdkNzQzMjE0NjFwLTEsCisgICAgLTB4MS5mNmE3YTJwMQorICB9LAorICB7IC8vIEVudHJ5IDgzNQorICAgIDB4MS4wMDAwMDVhYWIxZjg3ODUyNzkyMjM3NjUyZDM0YjFjZXAwLAorICAgIDB4MS5mNmE3YTRwMQorICB9LAorICB7IC8vIEVudHJ5IDgzNgorICAgIC0weDEuMDAwMDA1YWFiMWY4Nzg1Mjc5MjIzNzY1MmQzNGIxY2VwMCwKKyAgICAtMHgxLmY2YTdhNHAxCisgIH0sCisgIHsgLy8gRW50cnkgODM3CisgICAgMHgxLjAzM2RkOTFjMTAzNTg2MWFlNDU1ZTBmOGRjMjc0YjBkcDIwLAorICAgIDB4MS4yZDk3YzRwMgorICB9LAorICB7IC8vIEVudHJ5IDgzOAorICAgIC0weDEuMDMzZGQ5MWMxMDM1ODYxYWU0NTVlMGY4ZGMyNzRiMGRwMjAsCisgICAgLTB4MS4yZDk3YzRwMgorICB9LAorICB7IC8vIEVudHJ5IDgzOQorICAgIDB4MS4wNjkwZmI0Nzc0YWI4MGNjZGRjOWVmNWFkMGZjYzIzN3AyMSwKKyAgICAweDEuMmQ5N2M2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDAKKyAgICAtMHgxLjA2OTBmYjQ3NzRhYjgwY2NkZGM5ZWY1YWQwZmNjMjM3cDIxLAorICAgIC0weDEuMmQ5N2M2cDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDEKKyAgICAtMHgxLjNmZTRkYWMwNmQ4MzA4MzdmNmM1ODRhZjZmOGQ5Mzk5cDI2LAorICAgIDB4MS4yZDk3YzhwMgorICB9LAorICB7IC8vIEVudHJ5IDg0MgorICAgIDB4MS4zZmU0ZGFjMDZkODMwODM3ZjZjNTg0YWY2ZjhkOTM5OXAyNiwKKyAgICAtMHgxLjJkOTdjOHAyCisgIH0sCisgIHsgLy8gRW50cnkgODQzCisgICAgLTB4MS4wMDAwMTRkZGQ0OTQ1Mzk0Y2I2ZWM3Zjg3ZGViYzdhNXAwLAorICAgIDB4MS41ZmRiYmNwMgorICB9LAorICB7IC8vIEVudHJ5IDg0NAorICAgIDB4MS4wMDAwMTRkZGQ0OTQ1Mzk0Y2I2ZWM3Zjg3ZGViYzdhNXAwLAorICAgIC0weDEuNWZkYmJjcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDUKKyAgICAtMHgxLjAwMDAwNGRkZDNjNjc2NGQ3MzY5YTBiZTYxYTYzMGU3cDAsCisgICAgMHgxLjVmZGJiZXAyCisgIH0sCisgIHsgLy8gRW50cnkgODQ2CisgICAgMHgxLjAwMDAwNGRkZDNjNjc2NGQ3MzY5YTBiZTYxYTYzMGU3cDAsCisgICAgLTB4MS41ZmRiYmVwMgorICB9LAorICB7IC8vIEVudHJ5IDg0NworICAgIC0weDEuZmZmZmU5YmJhN2YxMzIxZmFlMTkyOTQzYTNlODQ4YzBwLTEsCisgICAgMHgxLjVmZGJjMHAyCisgIH0sCisgIHsgLy8gRW50cnkgODQ4CisgICAgMHgxLmZmZmZlOWJiYTdmMTMyMWZhZTE5Mjk0M2EzZTg0OGMwcC0xLAorICAgIC0weDEuNWZkYmMwcDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NDkKKyAgICAweDEuZmZmZmMxMzM1MTFlYTJkM2I5ODhiZjg1MzE2ZDRlMDVwLTEsCisgICAgMHgxLmM0NjNhOHAyCisgIH0sCisgIHsgLy8gRW50cnkgODUwCisgICAgLTB4MS5mZmZmYzEzMzUxMWVhMmQzYjk4OGJmODUzMTZkNGUwNXAtMSwKKyAgICAtMHgxLmM0NjNhOHAyCisgIH0sCisgIHsgLy8gRW50cnkgODUxCisgICAgMHgxLmZmZmZlMTMzNGUzMWQ3ZWYyMGQ2MjIwYzY1ZGQyZjlicC0xLAorICAgIDB4MS5jNDYzYWFwMgorICB9LAorICB7IC8vIEVudHJ5IDg1MgorICAgIC0weDEuZmZmZmUxMzM0ZTMxZDdlZjIwZDYyMjBjNjVkZDJmOWJwLTEsCisgICAgLTB4MS5jNDYzYWFwMgorICB9LAorICB7IC8vIEVudHJ5IDg1MworICAgIDB4MS4wMDAwMDA5OWE2YTI4NjY2Nzc2MWMyODc0YzU4OTBhZXAwLAorICAgIDB4MS5jNDYzYWNwMgorICB9LAorICB7IC8vIEVudHJ5IDg1NAorICAgIC0weDEuMDAwMDAwOTlhNmEyODY2Njc3NjFjMjg3NGM1ODkwYWVwMCwKKyAgICAtMHgxLmM0NjNhY3AyCisgIH0sCisgIHsgLy8gRW50cnkgODU1CisgICAgMHgxLjhjNjQyZThjYzU2YTliMjMzNDUwZDZiNjM1YTYyNjZkcDIwLAorICAgIDB4MS5mNmE3YTBwMgorICB9LAorICB7IC8vIEVudHJ5IDg1NgorICAgIC0weDEuOGM2NDJlOGNjNTZhOWIyMzM0NTBkNmI2MzVhNjI2NmRwMjAsCisgICAgLTB4MS5mNmE3YTBwMgorICB9LAorICB7IC8vIEVudHJ5IDg1NworICAgIDB4MS5iNmUwYmZiNzI4ZTQyMzYzY2Q1ZmIyNmIzMWMzNjZjMnAyMiwKKyAgICAweDEuZjZhN2EycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTgKKyAgICAtMHgxLmI2ZTBiZmI3MjhlNDIzNjNjZDVmYjI2YjMxYzM2NmMycDIyLAorICAgIC0weDEuZjZhN2EycDIKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NTkKKyAgICAtMHgxLjY5Njc5Yjk2NmFjYzQzZGZkYjI4MzgzYWE5NzZmNWMxcDIxLAorICAgIDB4MS5mNmE3YTRwMgorICB9LAorICB7IC8vIEVudHJ5IDg2MAorICAgIDB4MS42OTY3OWI5NjZhY2M0M2RmZGIyODM4M2FhOTc2ZjVjMXAyMSwKKyAgICAtMHgxLmY2YTdhNHAyCisgIH0sCisgIHsgLy8gRW50cnkgODYxCisgICAgLTB4MS4wMDAwMjllZWUyNmZlMjExYmI0YTJmOGUyM2EwYTllOXAwLAorICAgIDB4MS4xNDc1Y2FwMworICB9LAorICB7IC8vIEVudHJ5IDg2MgorICAgIDB4MS4wMDAwMjllZWUyNmZlMjExYmI0YTJmOGUyM2EwYTllOXAwLAorICAgIC0weDEuMTQ3NWNhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjMKKyAgICAtMHgxLjAwMDAwOWVlZGYzMjA1ZDJlOWI2NmEzNzgzZTAyZjA1cDAsCisgICAgMHgxLjE0NzVjY3AzCisgIH0sCisgIHsgLy8gRW50cnkgODY0CisgICAgMHgxLjAwMDAwOWVlZGYzMjA1ZDJlOWI2NmEzNzgzZTAyZjA1cDAsCisgICAgLTB4MS4xNDc1Y2NwMworICB9LAorICB7IC8vIEVudHJ5IDg2NQorICAgIC0weDEuZmZmZmQzZGRiZmU4NTNjNzFlNGE1Zjc1MDJiMDljNGVwLTEsCisgICAgMHgxLjE0NzVjZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODY2CisgICAgMHgxLmZmZmZkM2RkYmZlODUzYzcxZTRhNWY3NTAyYjA5YzRlcC0xLAorICAgIC0weDEuMTQ3NWNlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjcKKyAgICAtMHgxLmY5OTkwZTkxYWEyNGY1NTBjZWY1N2ZhNDEwNmM1NmVicC0yMCwKKyAgICAweDEuMmQ5N2M0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjgKKyAgICAweDEuZjk5OTBlOTFhYTI0ZjU1MGNlZjU3ZmE0MTA2YzU2ZWJwLTIwLAorICAgIC0weDEuMmQ5N2M0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NjkKKyAgICAtMHgxLmYzMzIxZDIzNGZjNTU3YTYxYzYzOGVmNzc1MmRlNDNmcC0yMSwKKyAgICAweDEuMmQ5N2M2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzAKKyAgICAweDEuZjMzMjFkMjM0ZmM1NTdhNjFjNjM4ZWY3NzUyZGU0M2ZwLTIxLAorICAgIC0weDEuMmQ5N2M2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzEKKyAgICAweDEuOTliYzViOTYxYjFhZTM2M2NmYzBmZmFhYjRmMGU1MDVwLTI2LAorICAgIDB4MS4yZDk3YzhwMworICB9LAorICB7IC8vIEVudHJ5IDg3MgorICAgIC0weDEuOTliYzViOTYxYjFhZTM2M2NmYzBmZmFhYjRmMGU1MDVwLTI2LAorICAgIC0weDEuMmQ5N2M4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4NzMKKyAgICAweDEuZmZmZjk3MTE0MTc5NDQ2MTI3NmYzNDJiZDI5YzVhMWZwLTEsCisgICAgMHgxLjQ2YjljMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODc0CisgICAgLTB4MS5mZmZmOTcxMTQxNzk0NDYxMjc2ZjM0MmJkMjljNWExZnAtMSwKKyAgICAtMHgxLjQ2YjljMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODc1CisgICAgMHgxLmZmZmZkNzExMzg1YjZjOWEwMTNkYWJlOWI3MjU0NjY1cC0xLAorICAgIDB4MS40NmI5YzJwMworICB9LAorICB7IC8vIEVudHJ5IDg3NgorICAgIC0weDEuZmZmZmQ3MTEzODViNmM5YTAxM2RhYmU5YjcyNTQ2NjVwLTEsCisgICAgLTB4MS40NmI5YzJwMworICB9LAorICB7IC8vIEVudHJ5IDg3NworICAgIDB4MS4wMDAwMGI4ODliOWVjOWM1YjI3N2ZiNmE5MWNmNWY0OXAwLAorICAgIDB4MS40NmI5YzRwMworICB9LAorICB7IC8vIEVudHJ5IDg3OAorICAgIC0weDEuMDAwMDBiODg5YjllYzljNWIyNzdmYjZhOTFjZjVmNDlwMCwKKyAgICAtMHgxLjQ2YjljNHAzCisgIH0sCisgIHsgLy8gRW50cnkgODc5CisgICAgMHgxLjg4OTczY2IwMmEwZWVhMmNmZTFhMjgxY2E3ZjA0NjYzcDE5LAorICAgIDB4MS41ZmRiYmNwMworICB9LAorICB7IC8vIEVudHJ5IDg4MAorICAgIC0weDEuODg5NzNjYjAyYTBlZWEyY2ZlMWEyODFjYTdmMDQ2NjNwMTksCisgICAgLTB4MS41ZmRiYmNwMworICB9LAorICB7IC8vIEVudHJ5IDg4MQorICAgIDB4MS5hNGQ1ZDVkNzUzODQxYzg5Y2ZlNzFjMjVhYmM4ZDY0NXAyMSwKKyAgICAweDEuNWZkYmJlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODIKKyAgICAtMHgxLmE0ZDVkNWQ3NTM4NDFjODljZmU3MWMyNWFiYzhkNjQ1cDIxLAorICAgIC0weDEuNWZkYmJlcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODMKKyAgICAtMHgxLjZmZTYyYTFhOWExMmI3MGIxZmJiOTUyODAxZjk5ODAxcDIwLAorICAgIDB4MS41ZmRiYzBwMworICB9LAorICB7IC8vIEVudHJ5IDg4NAorICAgIDB4MS42ZmU2MmExYTlhMTJiNzBiMWZiYjk1MjgwMWY5OTgwMXAyMCwKKyAgICAtMHgxLjVmZGJjMHAzCisgIH0sCisgIHsgLy8gRW50cnkgODg1CisgICAgLTB4MS4wMDAwM2VmZmYyMDczZTFjMGRkNjVkM2I4M2U1ZTU4OXAwLAorICAgIDB4MS43OGZkYjZwMworICB9LAorICB7IC8vIEVudHJ5IDg4NgorICAgIDB4MS4wMDAwM2VmZmYyMDczZTFjMGRkNjVkM2I4M2U1ZTU4OXAwLAorICAgIC0weDEuNzhmZGI2cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4ODcKKyAgICAtMHgxLjAwMDAxZWZmZWMyNzNmYjQ2YmI1ZWNmZWM1M2MzMTA1cDAsCisgICAgMHgxLjc4ZmRiOHAzCisgIH0sCisgIHsgLy8gRW50cnkgODg4CisgICAgMHgxLjAwMDAxZWZmZWMyNzNmYjQ2YmI1ZWNmZWM1M2MzMTA1cDAsCisgICAgLTB4MS43OGZkYjhwMworICB9LAorICB7IC8vIEVudHJ5IDg4OQorICAgIC0weDEuZmZmZmZkZmZkNDhlODQ4OTkyMjdjZWExZjc3YTFjZjdwLTEsCisgICAgMHgxLjc4ZmRiYXAzCisgIH0sCisgIHsgLy8gRW50cnkgODkwCisgICAgMHgxLmZmZmZmZGZmZDQ4ZTg0ODk5MjI3Y2VhMWY3N2ExY2Y3cC0xLAorICAgIC0weDEuNzhmZGJhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA4OTEKKyAgICAweDEuZmZmZmFjZWYyNmU5NjVkMTI1MzQyNGZiYmM5ZmYzNTRwLTEsCisgICAgMHgxLmFiNDFhZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODkyCisgICAgLTB4MS5mZmZmYWNlZjI2ZTk2NWQxMjUzNDI0ZmJiYzlmZjM1NHAtMSwKKyAgICAtMHgxLmFiNDFhZXAzCisgIH0sCisgIHsgLy8gRW50cnkgODkzCisgICAgMHgxLmZmZmZlY2VmMjA4NzRhOGYwMzVhYzRkYzFhNjAyOWY4cC0xLAorICAgIDB4MS5hYjQxYjBwMworICB9LAorICB7IC8vIEVudHJ5IDg5NAorICAgIC0weDEuZmZmZmVjZWYyMDg3NGE4ZjAzNWFjNGRjMWE2MDI5ZjhwLTEsCisgICAgLTB4MS5hYjQxYjBwMworICB9LAorICB7IC8vIEVudHJ5IDg5NQorICAgIDB4MS4wMDAwMTY3NzkxMTI5NzVhMmQ0YjliNzViZDkwYjNjMXAwLAorICAgIDB4MS5hYjQxYjJwMworICB9LAorICB7IC8vIEVudHJ5IDg5NgorICAgIC0weDEuMDAwMDE2Nzc5MTEyOTc1YTJkNGI5Yjc1YmQ5MGIzYzFwMCwKKyAgICAtMHgxLmFiNDFiMnAzCisgIH0sCisgIHsgLy8gRW50cnkgODk3CisgICAgMHgxLjA0ZTRiNDBhY2RmOTQzOWZlY2NkNDliYmViMzdkYTBmcDE5LAorICAgIDB4MS5jNDYzYThwMworICB9LAorICB7IC8vIEVudHJ5IDg5OAorICAgIC0weDEuMDRlNGI0MGFjZGY5NDM5ZmVjY2Q0OWJiZWIzN2RhMGZwMTksCisgICAgLTB4MS5jNDYzYThwMworICB9LAorICB7IC8vIEVudHJ5IDg5OQorICAgIDB4MS4wOWZhM2FlMWY0OTEzZDFiMzc2NGZmOWE5Njc4ZWY2OHAyMCwKKyAgICAweDEuYzQ2M2FhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDAKKyAgICAtMHgxLjA5ZmEzYWUxZjQ5MTNkMWIzNzY0ZmY5YTk2NzhlZjY4cDIwLAorICAgIC0weDEuYzQ2M2FhcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDEKKyAgICAtMHgxLmFhODY3OTAwOTIwM2RkNmU5NDJmOTE3NTI3NWE3NDYxcDI0LAorICAgIDB4MS5jNDYzYWNwMworICB9LAorICB7IC8vIEVudHJ5IDkwMgorICAgIDB4MS5hYTg2NzkwMDkyMDNkZDZlOTQyZjkxNzUyNzVhNzQ2MXAyNCwKKyAgICAtMHgxLmM0NjNhY3AzCisgIH0sCisgIHsgLy8gRW50cnkgOTAzCisgICAgLTB4MS4wMDAwMzQxMGZhZDg0NmZkNjdkMzVlMGMwZDk4MzYyOHAwLAorICAgIDB4MS5kZDg1YTRwMworICB9LAorICB7IC8vIEVudHJ5IDkwNAorICAgIDB4MS4wMDAwMzQxMGZhZDg0NmZkNjdkMzVlMGMwZDk4MzYyOHAwLAorICAgIC0weDEuZGQ4NWE0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDUKKyAgICAtMHgxLjAwMDAxNDEwZjY1NjI3OWU4OWQxNGNmNDA1NGY2YzU2cDAsCisgICAgMHgxLmRkODVhNnAzCisgIH0sCisgIHsgLy8gRW50cnkgOTA2CisgICAgMHgxLjAwMDAxNDEwZjY1NjI3OWU4OWQxNGNmNDA1NGY2YzU2cDAsCisgICAgLTB4MS5kZDg1YTZwMworICB9LAorICB7IC8vIEVudHJ5IDkwNworICAgIC0weDEuZmZmZmU4MjFlYmE4MTFjMDY3MjQwZjY2NmM5MDQzNzFwLTEsCisgICAgMHgxLmRkODVhOHAzCisgIH0sCisgIHsgLy8gRW50cnkgOTA4CisgICAgMHgxLmZmZmZlODIxZWJhODExYzA2NzI0MGY2NjZjOTA0MzcxcC0xLAorICAgIC0weDEuZGQ4NWE4cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MDkKKyAgICAtMHgxLjRhYTljMmYyYzJhZGRiOWI1OWUzOTQwMTIzOTc2MWUycC0yMCwKKyAgICAweDEuZjZhN2EwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTAKKyAgICAweDEuNGFhOWMyZjJjMmFkZGI5YjU5ZTM5NDAxMjM5NzYxZTJwLTIwLAorICAgIC0weDEuZjZhN2EwcDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTEKKyAgICAtMHgxLjJhYTcwYmNiMDdlMDU3YjcyOWVhY2JjMGNmMTdjYmJmcC0yMiwKKyAgICAweDEuZjZhN2EycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTIKKyAgICAweDEuMmFhNzBiY2IwN2UwNTdiNzI5ZWFjYmMwY2YxN2NiYmZwLTIyLAorICAgIC0weDEuZjZhN2EycDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTMKKyAgICAweDEuNmFhYzdhMWE3YzUwYjg3M2JlZDM5YjY4NTliZjI5MzRwLTIxLAorICAgIDB4MS5mNmE3YTRwMworICB9LAorICB7IC8vIEVudHJ5IDkxNAorICAgIC0weDEuNmFhYzdhMWE3YzUwYjg3M2JlZDM5YjY4NTliZjI5MzRwLTIxLAorICAgIC0weDEuZjZhN2E0cDMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MTUKKyAgICAweDEuZmZmZjQyY2QyYzk1NTA4ZTcwMGFiNzY5NTZkZDA0Y2ZwLTEsCisgICAgMHgxLjA3ZTRjY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTE2CisgICAgLTB4MS5mZmZmNDJjZDJjOTU1MDhlNzAwYWI3Njk1NmRkMDRjZnAtMSwKKyAgICAtMHgxLjA3ZTRjY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTE3CisgICAgMHgxLmZmZmZjMmNkMGQ0ODliNDg4NDQxNzljNTk0MzU2ZTBkcC0xLAorICAgIDB4MS4wN2U0Y2VwNAorICB9LAorICB7IC8vIEVudHJ5IDkxOAorICAgIC0weDEuZmZmZmMyY2QwZDQ4OWI0ODg0NDE3OWM1OTQzNTZlMGRwLTEsCisgICAgLTB4MS4wN2U0Y2VwNAorICB9LAorICB7IC8vIEVudHJ5IDkxOQorICAgIDB4MS4wMDAwMjE2Njg2ZmRlZjJlMWRkMzFhMmVhYTZhMWNkNHAwLAorICAgIDB4MS4wN2U0ZDBwNAorICB9LAorICB7IC8vIEVudHJ5IDkyMAorICAgIC0weDEuMDAwMDIxNjY4NmZkZWYyZTFkZDMxYTJlYWE2YTFjZDRwMCwKKyAgICAtMHgxLjA3ZTRkMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTIxCisgICAgMHgxLjg2YjdiYTQ5MjNiY2YxNTdkY2MzMzI5MTg3MWU4OGQ0cDE4LAorICAgIDB4MS4xNDc1Y2FwNAorICB9LAorICB7IC8vIEVudHJ5IDkyMgorICAgIC0weDEuODZiN2JhNDkyM2JjZjE1N2RjYzMzMjkxODcxZTg4ZDRwMTgsCisgICAgLTB4MS4xNDc1Y2FwNAorICB9LAorICB7IC8vIEVudHJ5IDkyMworICAgIDB4MS45YzViZWNmMjg3M2VlZDM2OWFmZGMzMTU5YTdmNzk3Y3AyMCwKKyAgICAweDEuMTQ3NWNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjQKKyAgICAtMHgxLjljNWJlY2YyODczZWVkMzY5YWZkYzMxNTlhN2Y3OTdjcDIwLAorICAgIC0weDEuMTQ3NWNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjUKKyAgICAtMHgxLjczM2MwZDg0MzMyZmE2MDZkMWJkMjA3YTQ5MWU0MzcxcDE5LAorICAgIDB4MS4xNDc1Y2VwNAorICB9LAorICB7IC8vIEVudHJ5IDkyNgorICAgIDB4MS43MzNjMGQ4NDMzMmZhNjA2ZDFiZDIwN2E0OTFlNDM3MXAxOSwKKyAgICAtMHgxLjE0NzVjZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTI3CisgICAgLTB4MS4wMDAwNDkyMjBiNDUxYmY2ZThlNjA1NTUwYzg4NjAyZnAwLAorICAgIDB4MS4yMTA2YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDkyOAorICAgIDB4MS4wMDAwNDkyMjBiNDUxYmY2ZThlNjA1NTUwYzg4NjAyZnAwLAorICAgIC0weDEuMjEwNmM4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MjkKKyAgICAtMHgxLjAwMDAwOTIyMDBmYzk5YzVkZmE0ZmUxODA4NWNmN2NkcDAsCisgICAgMHgxLjIxMDZjYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTMwCisgICAgMHgxLjAwMDAwOTIyMDBmYzk5YzVkZmE0ZmUxODA4NWNmN2NkcDAsCisgICAgLTB4MS4yMTA2Y2FwNAorICB9LAorICB7IC8vIEVudHJ5IDkzMQorICAgIC0weDEuZmZmZjkyNDQwZDY4MzE3MjJkZWMwZDMxODEwZDhmYzdwLTEsCisgICAgMHgxLjIxMDZjY3A0CisgIH0sCisgIHsgLy8gRW50cnkgOTMyCisgICAgMHgxLmZmZmY5MjQ0MGQ2ODMxNzIyZGVjMGQzMTgxMGQ4ZmM3cC0xLAorICAgIC0weDEuMjEwNmNjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzMKKyAgICAtMHgxLmY5OTkwZTkxYjFkOTE2ZTU4MjI0MjM0NzExMmJhMWQ2cC0xOSwKKyAgICAweDEuMmQ5N2M0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzQKKyAgICAweDEuZjk5OTBlOTFiMWQ5MTZlNTgyMjQyMzQ3MTEyYmExZDZwLTE5LAorICAgIC0weDEuMmQ5N2M0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzUKKyAgICAtMHgxLmYzMzIxZDIzNTE5ZmUxZGNmZGNkMmYxZjc2MjAwOGE0cC0yMCwKKyAgICAweDEuMmQ5N2M2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzYKKyAgICAweDEuZjMzMjFkMjM1MTlmZTFkY2ZkY2QyZjFmNzYyMDA4YTRwLTIwLAorICAgIC0weDEuMmQ5N2M2cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzcKKyAgICAweDEuOTliYzViOTYxYjFiMjRmZGI3N2ZjZWUwOGJhMmY3MjBwLTI1LAorICAgIDB4MS4yZDk3YzhwNAorICB9LAorICB7IC8vIEVudHJ5IDkzOAorICAgIC0weDEuOTliYzViOTYxYjFiMjRmZGI3N2ZjZWUwOGJhMmY3MjBwLTI1LAorICAgIC0weDEuMmQ5N2M4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5MzkKKyAgICAweDEuZmZmZjE4YWIyNzU2YmEwYTIwYWFmNDM5MmIwYTgwMTlwLTEsCisgICAgMHgxLjNhMjhjMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQwCisgICAgLTB4MS5mZmZmMThhYjI3NTZiYTBhMjBhYWY0MzkyYjBhODAxOXAtMSwKKyAgICAtMHgxLjNhMjhjMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQxCisgICAgMHgxLmZmZmY5OGFhZmQ4MTg1MjVkMjRkNjY0ZWY5NjJlZjE0cC0xLAorICAgIDB4MS4zYTI4YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDk0MgorICAgIC0weDEuZmZmZjk4YWFmZDgxODUyNWQyNGQ2NjRlZjk2MmVmMTRwLTEsCisgICAgLTB4MS4zYTI4YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDk0MworICAgIDB4MS4wMDAwMGM1NTc5ZDYyMWFiNzMzNGVmZjMxZDIzY2YyY3AwLAorICAgIDB4MS4zYTI4YzZwNAorICB9LAorICB7IC8vIEVudHJ5IDk0NAorICAgIC0weDEuMDAwMDBjNTU3OWQ2MjFhYjczMzRlZmYzMWQyM2NmMmNwMCwKKyAgICAtMHgxLjNhMjhjNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTQ1CisgICAgMHgxLjM4NDZiMzEwZGU3Yzc5NmFkYjNlYTJlYTIyYjEwOGUycDE4LAorICAgIDB4MS40NmI5YzBwNAorICB9LAorICB7IC8vIEVudHJ5IDk0NgorICAgIC0weDEuMzg0NmIzMTBkZTdjNzk2YWRiM2VhMmVhMjJiMTA4ZTJwMTgsCisgICAgLTB4MS40NmI5YzBwNAorICB9LAorICB7IC8vIEVudHJ5IDk0NworICAgIDB4MS45MDQ0MjVmYzkyZWFiMGFiZmU5NmFlZWI2ZmZiMmRjOHAxOSwKKyAgICAweDEuNDZiOWMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDgKKyAgICAtMHgxLjkwNDQyNWZjOTJlYWIwYWJmZTk2YWVlYjZmZmIyZGM4cDE5LAorICAgIC0weDEuNDZiOWMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NDkKKyAgICAtMHgxLjYzMjJiYWNiMjJkZTZhZjAwMjI4ZDJlYTRkNmQyNzk5cDIwLAorICAgIDB4MS40NmI5YzRwNAorICB9LAorICB7IC8vIEVudHJ5IDk1MAorICAgIDB4MS42MzIyYmFjYjIyZGU2YWYwMDIyOGQyZWE0ZDZkMjc5OXAyMCwKKyAgICAtMHgxLjQ2YjljNHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTUxCisgICAgLTB4MS4wMDAwNWUzMzFkNmRiZWU5ZjlkNDMxYjQ5ZWE3YjcyM3AwLAorICAgIDB4MS41MzRhYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDk1MgorICAgIDB4MS4wMDAwNWUzMzFkNmRiZWU5ZjlkNDMxYjQ5ZWE3YjcyM3AwLAorICAgIC0weDEuNTM0YWJlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTMKKyAgICAtMHgxLjAwMDAxZTMzMGRlMGY3YzczNGJjNTdhNGM2NjUwMzI3cDAsCisgICAgMHgxLjUzNGFjMHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTU0CisgICAgMHgxLjAwMDAxZTMzMGRlMGY3YzczNGJjNTdhNGM2NjUwMzI3cDAsCisgICAgLTB4MS41MzRhYzBwNAorICB9LAorICB7IC8vIEVudHJ5IDk1NQorICAgIC0weDEuZmZmZmJjNjYxY2E4NjhkNWE0NDE4ZjBkMWNkN2MyMmZwLTEsCisgICAgMHgxLjUzNGFjMnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTU2CisgICAgMHgxLmZmZmZiYzY2MWNhODY4ZDVhNDQxOGYwZDFjZDdjMjJmcC0xLAorICAgIC0weDEuNTM0YWMycDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTcKKyAgICAtMHgxLjRkZGQzYmE5ZjEyMTRkZWI0MDY3MjM5N2Q2ZjE5MWJjcC0xOSwKKyAgICAweDEuNWZkYmJjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTgKKyAgICAweDEuNGRkZDNiYTlmMTIxNGRlYjQwNjcyMzk3ZDZmMTkxYmNwLTE5LAorICAgIC0weDEuNWZkYmJjcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NTkKKyAgICAtMHgxLjM3NzRlZWE3YjhkNzIxNGJjODliMTE1MzJmODJkMzIzcC0yMSwKKyAgICAweDEuNWZkYmJlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjAKKyAgICAweDEuMzc3NGVlYTdiOGQ3MjE0YmM4OWIxMTUzMmY4MmQzMjNwLTIxLAorICAgIC0weDEuNWZkYmJlcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjEKKyAgICAweDEuNjQ0NTg4YWMyNDhkYTZkMDE5NDExMjFmNTA2NzNiM2ZwLTIwLAorICAgIDB4MS41ZmRiYzBwNAorICB9LAorICB7IC8vIEVudHJ5IDk2MgorICAgIC0weDEuNjQ0NTg4YWMyNDhkYTZkMDE5NDExMjFmNTA2NzNiM2ZwLTIwLAorICAgIC0weDEuNWZkYmMwcDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NjMKKyAgICAweDEuZmZmZjZlODhmMTMyMDc5NGQ4NDVlOGUwZmUxZmQ4YmRwLTEsCisgICAgMHgxLjZjNmNiYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTY0CisgICAgLTB4MS5mZmZmNmU4OGYxMzIwNzk0ZDg0NWU4ZTBmZTFmZDhiZHAtMSwKKyAgICAtMHgxLjZjNmNiYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTY1CisgICAgMHgxLmZmZmZlZTg4ZGNkNDQyOWYxNWMwZTRhOTViOWJhMGU2cC0xLAorICAgIDB4MS42YzZjYmNwNAorICB9LAorICB7IC8vIEVudHJ5IDk2NgorICAgIC0weDEuZmZmZmVlODhkY2Q0NDI5ZjE1YzBlNGE5NWI5YmEwZTZwLTEsCisgICAgLTB4MS42YzZjYmNwNAorICB9LAorICB7IC8vIEVudHJ5IDk2NworICAgIDB4MS4wMDAwMzc0NDc0M2IzZGJkMzdkZDA1M2U3MDJiZDc1NHAwLAorICAgIDB4MS42YzZjYmVwNAorICB9LAorICB7IC8vIEVudHJ5IDk2OAorICAgIC0weDEuMDAwMDM3NDQ3NDNiM2RiZDM3ZGQwNTNlNzAyYmQ3NTRwMCwKKyAgICAtMHgxLjZjNmNiZXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTY5CisgICAgMHgxLjA0MTA5YWIwZWM3OGY4MjdlZTk1Y2VhNzQ2YjM4YzIwcDE4LAorICAgIDB4MS43OGZkYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDk3MAorICAgIC0weDEuMDQxMDlhYjBlYzc4ZjgyN2VlOTVjZWE3NDZiMzhjMjBwMTgsCisgICAgLTB4MS43OGZkYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDk3MQorICAgIDB4MS4wODQyYzliMzJkMjEyNWRiZjVjMjBkNzBjNDZiMTdhNXAxOSwKKyAgICAweDEuNzhmZGI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzIKKyAgICAtMHgxLjA4NDJjOWIzMmQyMTI1ZGJmNWMyMGQ3MGM0NmIxN2E1cDE5LAorICAgIC0weDEuNzhmZGI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzMKKyAgICAtMHgxLmZmZDQ5MTMzZTI2YTljNzQ5OTY2NjMwZGVlODEzZGRlcDIzLAorICAgIDB4MS43OGZkYmFwNAorICB9LAorICB7IC8vIEVudHJ5IDk3NAorICAgIDB4MS5mZmQ0OTEzM2UyNmE5Yzc0OTk2NjYzMGRlZTgxM2RkZXAyMywKKyAgICAtMHgxLjc4ZmRiYXA0CisgIH0sCisgIHsgLy8gRW50cnkgOTc1CisgICAgLTB4MS4wMDAwNzM0NDMxNTIzMDFmYTU5MzM4ZWVjMjljMzc3OHAwLAorICAgIDB4MS44NThlYjRwNAorICB9LAorICB7IC8vIEVudHJ5IDk3NgorICAgIDB4MS4wMDAwNzM0NDMxNTIzMDFmYTU5MzM4ZWVjMjljMzc3OHAwLAorICAgIC0weDEuODU4ZWI0cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5NzcKKyAgICAtMHgxLjAwMDAzMzQ0MWM4MTIzMmQzZDlmYzM0YmVhODFmYjdjcDAsCisgICAgMHgxLjg1OGViNnA0CisgIH0sCisgIHsgLy8gRW50cnkgOTc4CisgICAgMHgxLjAwMDAzMzQ0MWM4MTIzMmQzZDlmYzM0YmVhODFmYjdjcDAsCisgICAgLTB4MS44NThlYjZwNAorICB9LAorICB7IC8vIEVudHJ5IDk3OQorICAgIC0weDEuZmZmZmU2ODgyZjYwMzk0NmI1M2IwNDIzNjFhZWM4MmNwLTEsCisgICAgMHgxLjg1OGViOHA0CisgIH0sCisgIHsgLy8gRW50cnkgOTgwCisgICAgMHgxLmZmZmZlNjg4MmY2MDM5NDZiNTNiMDQyMzYxYWVjODJjcC0xLAorICAgIC0weDEuODU4ZWI4cDQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODEKKyAgICAtMHgxLmNiNmNkNGNiODJhOTFkZmM0YWY5YTQ5OWE1NzVlNGE0cC0zLAorICAgIDB4MS5mZmZmZmVwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODIKKyAgICAweDEuY2I2Y2Q0Y2I4MmE5MWRmYzRhZjlhNDk5YTU3NWU0YTRwLTMsCisgICAgLTB4MS5mZmZmZmVwNjIKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODMKKyAgICAweDEuNTJmNTBlNzU3OTQxY2JmZjViN2MyZTA2YTFhYjdlOWRwNiwKKyAgICAweDEucDYzCisgIH0sCisgIHsgLy8gRW50cnkgOTg0CisgICAgLTB4MS41MmY1MGU3NTc5NDFjYmZmNWI3YzJlMDZhMWFiN2U5ZHA2LAorICAgIC0weDEucDYzCisgIH0sCisgIHsgLy8gRW50cnkgOTg1CisgICAgLTB4MS4yOWNiZDEyODIxYjM5OWM5ZWU0ZjI2NWRhNTE4ODFhOHAxLAorICAgIDB4MS4wMDAwMDJwNjMKKyAgfSwKKyAgeyAvLyBFbnRyeSA5ODYKKyAgICAweDEuMjljYmQxMjgyMWIzOTljOWVlNGYyNjVkYTUxODgxYThwMSwKKyAgICAtMHgxLjAwMDAwMnA2MworICB9LAorICB7IC8vIEVudHJ5IDk4NworICAgIDB4MS4zZTRkOTE0OGQ3MDg2NzI3ZGE5NDRlMWMwNTJiNjhhZnAtMSwKKyAgICAweDEuZmZmZmZlcDI2CisgIH0sCisgIHsgLy8gRW50cnkgOTg4CisgICAgLTB4MS4zZTRkOTE0OGQ3MDg2NzI3ZGE5NDRlMWMwNTJiNjhhZnAtMSwKKyAgICAtMHgxLmZmZmZmZXAyNgorICB9LAorICB7IC8vIEVudHJ5IDk4OQorICAgIC0weDEuMmU4ZmMxYWY4MWQ4YmFhODg5OWEzMzI1MjAwYzBkY2JwMCwKKyAgICAweDEucDI3CisgIH0sCisgIHsgLy8gRW50cnkgOTkwCisgICAgMHgxLjJlOGZjMWFmODFkOGJhYTg4OTlhMzMyNTIwMGMwZGNicDAsCisgICAgLTB4MS5wMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTEKKyAgICAtMHgxLjRjZTk3NDhlNTI0Zjc3YWQ4NTczNWM3ZjdkNjY4Y2YxcC0xLAorICAgIDB4MS4wMDAwMDJwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTIKKyAgICAweDEuNGNlOTc0OGU1MjRmNzdhZDg1NzM1YzdmN2Q2NjhjZjFwLTEsCisgICAgLTB4MS4wMDAwMDJwMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTMKKyAgICAweDEuN2UzMDA1ZDU3ZWQ5M2FlNDViMWJlYTNlMzYxNWJiNjdwMSwKKyAgICAweDEuZmZmZmZlcDIzCisgIH0sCisgIHsgLy8gRW50cnkgOTk0CisgICAgLTB4MS43ZTMwMDVkNTdlZDkzYWU0NWIxYmVhM2UzNjE1YmI2N3AxLAorICAgIC0weDEuZmZmZmZlcDIzCisgIH0sCisgIHsgLy8gRW50cnkgOTk1CisgICAgLTB4MS4zZWEyODI3MWE5YmVhMzZlNzQ0ZjljZTUzN2JhNGI1OXAwLAorICAgIDB4MS5wMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTYKKyAgICAweDEuM2VhMjgyNzFhOWJlYTM2ZTc0NGY5Y2U1MzdiYTRiNTlwMCwKKyAgICAtMHgxLnAyNAorICB9LAorICB7IC8vIEVudHJ5IDk5NworICAgIDB4MS5mZTkyOWI0MjgyMTA1YTE2MGE5YmUyNzMxZGYyMGE2Y3AwLAorICAgIDB4MS4wMDAwMDJwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTgKKyAgICAtMHgxLmZlOTI5YjQyODIxMDVhMTYwYTliZTI3MzFkZjIwYTZjcDAsCisgICAgLTB4MS4wMDAwMDJwMjQKKyAgfSwKKyAgeyAvLyBFbnRyeSA5OTkKKyAgICAweDEuMjg2NmYwNjE5NGUwYzJjN2VlMjJlZTlmOGY5ZGNhZWVwMCwKKyAgICAweDEuZmZmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAwCisgICAgLTB4MS4yODY2ZjA2MTk0ZTBjMmM3ZWUyMmVlOWY4ZjlkY2FlZXAwLAorICAgIC0weDEuZmZmZmZlcDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDAxCisgICAgMHgxLjI4NjZmOWJlNGRlMTM3MGRiOTA3ODYwNzAxMmNiMDdicDAsCisgICAgMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAwMgorICAgIC0weDEuMjg2NmY5YmU0ZGUxMzcwZGI5MDc4NjA3MDEyY2IwN2JwMCwKKyAgICAtMHgxLnAyCisgIH0sCisgIHsgLy8gRW50cnkgMTAwMworICAgIDB4MS4yODY3MGM3N2MwZTY0NzEzOGQ0ZmM3MTgxZWY5YjYxZnAwLAorICAgIDB4MS4wMDAwMDJwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMDQKKyAgICAtMHgxLjI4NjcwYzc3YzBlNjQ3MTM4ZDRmYzcxODFlZjliNjFmcDAsCisgICAgLTB4MS4wMDAwMDJwMgorICB9LAorICB7IC8vIEVudHJ5IDEwMDUKKyAgICAtMHgxLjE3YWY2OGE2ZDQyZjc3MmJkMjQ5ZjVkNjkyYWZhNGU3cDEsCisgICAgMHgxLmZmZmZmZXAwCisgIH0sCisgIHsgLy8gRW50cnkgMTAwNgorICAgIDB4MS4xN2FmNjhhNmQ0MmY3NzJiZDI0OWY1ZDY5MmFmYTRlN3AxLAorICAgIC0weDEuZmZmZmZlcDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDA3CisgICAgLTB4MS4xN2FmNjJlMDk1MGY4M2I1MDk5MDg3YWFmNjdhZjljMXAxLAorICAgIDB4MS5wMQorICB9LAorICB7IC8vIEVudHJ5IDEwMDgKKyAgICAweDEuMTdhZjYyZTA5NTBmODNiNTA5OTA4N2FhZjY3YWY5YzFwMSwKKyAgICAtMHgxLnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTAwOQorICAgIC0weDEuMTdhZjU3NTQxNzY3MDUxNzNjZWM4OWQwMTM4MWY1NTNwMSwKKyAgICAweDEuMDAwMDAycDEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDEwCisgICAgMHgxLjE3YWY1NzU0MTc2NzA1MTczY2VjODlkMDEzODFmNTUzcDEsCisgICAgLTB4MS4wMDAwMDJwMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTEKKyAgICAweDEuOGViMjQyNWVmZjcyODYwZDU2ZDYxMDU2ZGI1NGVmNjdwMCwKKyAgICAweDEuZmZmZmZlcC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAxMgorICAgIC0weDEuOGViMjQyNWVmZjcyODYwZDU2ZDYxMDU2ZGI1NGVmNjdwMCwKKyAgICAtMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMTMKKyAgICAweDEuOGViMjQ1Y2JlZTNhNWI4YWNjN2Q0MTMyMzE0MGIzYjVwMCwKKyAgICAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE0CisgICAgLTB4MS44ZWIyNDVjYmVlM2E1YjhhY2M3ZDQxMzIzMTQwYjNiNXAwLAorICAgIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE1CisgICAgMHgxLjhlYjI0Y2E1Y2JlYTA4Zjk5MTIwNmEzZWFmOTNhYjk4cDAsCisgICAgMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTAxNgorICAgIC0weDEuOGViMjRjYTVjYmVhMDhmOTkxMjA2YTNlYWY5M2FiOThwMCwKKyAgICAtMHgxLjAwMDAwMnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTAxNworICAgIDB4MS4xN2I0ZjQ3MmNkNzkxYWFiZmU0ZWE5MWFmYjVlNzllN3AtMSwKKyAgICAweDEuZmZmZmZlcC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAxOAorICAgIC0weDEuMTdiNGY0NzJjZDc5MWFhYmZlNGVhOTFhZmI1ZTc5ZTdwLTEsCisgICAgLTB4MS5mZmZmZmVwLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDE5CisgICAgMHgxLjE3YjRmNWJmMzQ3NGE0MzE3OTY0ODA3ODgyNDQ0Y2M4cC0xLAorICAgIDB4MS5wLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDIwCisgICAgLTB4MS4xN2I0ZjViZjM0NzRhNDMxNzk2NDgwNzg4MjQ0NGNjOHAtMSwKKyAgICAtMHgxLnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMjEKKyAgICAweDEuMTdiNGY4NTgwMjZkZDgwMzNlZDNkOGQ2ZDUzNTBjYTlwLTEsCisgICAgMHgxLjAwMDAwMnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwMjIKKyAgICAtMHgxLjE3YjRmODU4MDI2ZGQ4MDMzZWQzZDhkNmQ1MzUwY2E5cC0xLAorICAgIC0weDEuMDAwMDAycC0xCisgIH0sCisgIHsgLy8gRW50cnkgMTAyMworICAgIDB4MS4wNTc4NTkzMzEzZGI2NTljZjNhYjg4YTIzNTIxODQ1NnAtMiwKKyAgICAweDEuZmZmZmZlcC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAyNAorICAgIC0weDEuMDU3ODU5MzMxM2RiNjU5Y2YzYWI4OGEyMzUyMTg0NTZwLTIsCisgICAgLTB4MS5mZmZmZmVwLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI1CisgICAgMHgxLjA1Nzg1YTQzYzRjNTVlNjM5NDAxODg5NjVjMjhiZDBmcC0yLAorICAgIDB4MS5wLTIKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDI2CisgICAgLTB4MS4wNTc4NWE0M2M0YzU1ZTYzOTQwMTg4OTY1YzI4YmQwZnAtMiwKKyAgICAtMHgxLnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjcKKyAgICAweDEuMDU3ODVjNjUyNjk5Yjg2MjhiNzg3NmI3YmQ4M2MwY2NwLTIsCisgICAgMHgxLjAwMDAwMnAtMgorICB9LAorICB7IC8vIEVudHJ5IDEwMjgKKyAgICAtMHgxLjA1Nzg1YzY1MjY5OWI4NjI4Yjc4NzZiN2JkODNjMGNjcC0yLAorICAgIC0weDEuMDAwMDAycC0yCisgIH0sCisgIHsgLy8gRW50cnkgMTAyOQorICAgIDB4MS4wMTU3NzllZDQ2NTc0NzI0YjkwMjVhNDQ3MmExYWUwYXAtMywKKyAgICAweDEuZmZmZmZlcC00CisgIH0sCisgIHsgLy8gRW50cnkgMTAzMAorICAgIC0weDEuMDE1Nzc5ZWQ0NjU3NDcyNGI5MDI1YTQ0NzJhMWFlMGFwLTMsCisgICAgLTB4MS5mZmZmZmVwLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMxCisgICAgMHgxLjAxNTc3YWYxNTExYTRlMDQ1OWY1Yjg3MmQ0ZmYzNGZkcC0zLAorICAgIDB4MS5wLTMKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDMyCisgICAgLTB4MS4wMTU3N2FmMTUxMWE0ZTA0NTlmNWI4NzJkNGZmMzRmZHAtMywKKyAgICAtMHgxLnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMzMKKyAgICAweDEuMDE1NzdjZjk2NmEwNzQ0NTUzZGQ0NGE5OTRmMGJiZDFwLTMsCisgICAgMHgxLjAwMDAwMnAtMworICB9LAorICB7IC8vIEVudHJ5IDEwMzQKKyAgICAtMHgxLjAxNTc3Y2Y5NjZhMDc0NDU1M2RkNDRhOTk0ZjBiYmQxcC0zLAorICAgIC0weDEuMDAwMDAycC0zCisgIH0sCisgIHsgLy8gRW50cnkgMTAzNQorICAgIDB4MS4wMDU1NzY4NDRkNDRmZGEwYjgwMzQ4YmIxNzQ5OGFhMXAtNCwKKyAgICAweDEuZmZmZmZlcC01CisgIH0sCisgIHsgLy8gRW50cnkgMTAzNgorICAgIC0weDEuMDA1NTc2ODQ0ZDQ0ZmRhMGI4MDM0OGJiMTc0OThhYTFwLTQsCisgICAgLTB4MS5mZmZmZmVwLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM3CisgICAgMHgxLjAwNTU3Nzg1NGRmMDA4MzI5M2JlNjM5MDU3YjBjNjgxcC00LAorICAgIDB4MS5wLTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDM4CisgICAgLTB4MS4wMDU1Nzc4NTRkZjAwODMyOTNiZTYzOTA1N2IwYzY4MXAtNCwKKyAgICAtMHgxLnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwMzkKKyAgICAweDEuMDA1NTc5ODc0ZjQ2MjM1ZTUyMDgyYTRkMGRkZmM2ZTFwLTQsCisgICAgMHgxLjAwMDAwMnAtNAorICB9LAorICB7IC8vIEVudHJ5IDEwNDAKKyAgICAtMHgxLjAwNTU3OTg3NGY0NjIzNWU1MjA4MmE0ZDBkZGZjNmUxcC00LAorICAgIC0weDEuMDAwMDAycC00CisgIH0sCisgIHsgLy8gRW50cnkgMTA0MQorICAgIDB4MS4wMDE1NTY3NzZlYjVkOThmODJlMWI1ZWFiMjhjNmI1ZnAtNSwKKyAgICAweDEuZmZmZmZlcC02CisgIH0sCisgIHsgLy8gRW50cnkgMTA0MgorICAgIC0weDEuMDAxNTU2Nzc2ZWI1ZDk4ZjgyZTFiNWVhYjI4YzZiNWZwLTUsCisgICAgLTB4MS5mZmZmZmVwLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQzCisgICAgMHgxLjAwMTU1Nzc3YWVjMDg1N2QyMmM5N2U4MDk4NjAyODhkcC01LAorICAgIDB4MS5wLTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ0CisgICAgLTB4MS4wMDE1NTc3N2FlYzA4NTdkMjJjOTdlODA5ODYwMjg4ZHAtNSwKKyAgICAtMHgxLnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwNDUKKyAgICAweDEuMDAxNTU5NzgyZWQ1ZGVkOGUyYjRjODE5Y2I3YzlmMTFwLTUsCisgICAgMHgxLjAwMDAwMnAtNQorICB9LAorICB7IC8vIEVudHJ5IDEwNDYKKyAgICAtMHgxLjAwMTU1OTc4MmVkNWRlZDhlMmI0YzgxOWNiN2M5ZjExcC01LAorICAgIC0weDEuMDAwMDAycC01CisgIH0sCisgIHsgLy8gRW50cnkgMTA0NworICAgIDB4MS4wMDA1NTQ3NzY4NTNlMDQxMDEwZGEyMmE2NTZmODI2N3AtNiwKKyAgICAweDEuZmZmZmZlcC03CisgIH0sCisgIHsgLy8gRW50cnkgMTA0OAorICAgIC0weDEuMDAwNTU0Nzc2ODUzZTA0MTAxMGRhMjJhNjU2ZjgyNjdwLTYsCisgICAgLTB4MS5mZmZmZmVwLTcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDQ5CisgICAgMHgxLjAwMDU1NTc3Nzg1NDhhZTFiNWY2MDU3NDcwNmU4MjM4cC02LAorICAgIDB4MS5wLTYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDUwCisgICAgLTB4MS4wMDA1NTU3Nzc4NTQ4YWUxYjVmNjA1NzQ3MDZlODIzOHAtNiwKKyAgICAtMHgxLnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwNTEKKyAgICAweDEuMDAwNTU3Nzc5ODU1ZTA4MzI3Yzc1OGUyMGQ2OTFkYWRwLTYsCisgICAgMHgxLjAwMDAwMnAtNgorICB9LAorICB7IC8vIEVudHJ5IDEwNTIKKyAgICAtMHgxLjAwMDU1Nzc3OTg1NWUwODMyN2M3NThlMjBkNjkxZGFkcC02LAorICAgIC0weDEuMDAwMDAycC02CisgIH0sCisgIHsgLy8gRW50cnkgMTA1MworICAgIDB4MS5mZmZmZmUwYWFhYWE4YWVlZWYwZDliNTNhZDJmNDgyM3AtMTUsCisgICAgMHgxLmZmZmZmZXAtMTUKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU0CisgICAgLTB4MS5mZmZmZmUwYWFhYWE4YWVlZWYwZDliNTNhZDJmNDgyM3AtMTUsCisgICAgLTB4MS5mZmZmZmVwLTE1CisgIH0sCisgIHsgLy8gRW50cnkgMTA1NQorICAgIDB4MS4wMDAwMDAwNTU1NTU1NTc3Nzc3Nzc4NTQ4NTQ4NWExZXAtMTQsCisgICAgMHgxLnAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU2CisgICAgLTB4MS4wMDAwMDAwNTU1NTU1NTc3Nzc3Nzc4NTQ4NTQ4NWExZXAtMTQsCisgICAgLTB4MS5wLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTA1NworICAgIDB4MS4wMDAwMDIwNTU1NTU3NTc3NzdiOGNkYWEwYWE5YzY0MHAtMTQsCisgICAgMHgxLjAwMDAwMnAtMTQKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDU4CisgICAgLTB4MS4wMDAwMDIwNTU1NTU3NTc3NzdiOGNkYWEwYWE5YzY0MHAtMTQsCisgICAgLTB4MS4wMDAwMDJwLTE0CisgIH0sCisgIHsgLy8gRW50cnkgMTA1OQorICAgIDB4MS5mZmZmZmUwMDAwMDAwMmFhYWFhMmFhYWFiMmFlZWVlY3AtMjgsCisgICAgMHgxLmZmZmZmZXAtMjgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYwCisgICAgLTB4MS5mZmZmZmUwMDAwMDAwMmFhYWFhMmFhYWFiMmFlZWVlY3AtMjgsCisgICAgLTB4MS5mZmZmZmVwLTI4CisgIH0sCisgIHsgLy8gRW50cnkgMTA2MQorICAgIDB4MS4wMDAwMDAwMDAwMDAwMTU1NTU1NTU1NTU1NTU3Nzc3N3AtMjcsCisgICAgMHgxLnAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDYyCisgICAgLTB4MS4wMDAwMDAwMDAwMDAwMTU1NTU1NTU1NTU1NTU3Nzc3N3AtMjcsCisgICAgLTB4MS5wLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA2MworICAgIDB4MS4wMDAwMDIwMDAwMDAwMTU1NTU1ZDU1NTU2NTU3Nzc4MnAtMjcsCisgICAgMHgxLjAwMDAwMnAtMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY0CisgICAgLTB4MS4wMDAwMDIwMDAwMDAwMTU1NTU1ZDU1NTU2NTU3Nzc4MnAtMjcsCisgICAgLTB4MS4wMDAwMDJwLTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA2NQorICAgIDB4MS5mZmZmZmUwMDAwMDAwMDBhYWFhYThhYWFhYWNhYWFlZXAtMzEsCisgICAgMHgxLmZmZmZmZXAtMzEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY2CisgICAgLTB4MS5mZmZmZmUwMDAwMDAwMDBhYWFhYThhYWFhYWNhYWFlZXAtMzEsCisgICAgLTB4MS5mZmZmZmVwLTMxCisgIH0sCisgIHsgLy8gRW50cnkgMTA2NworICAgIDB4MS4wMDAwMDAwMDAwMDAwMDA1NTU1NTU1NTU1NTU1NTU3N3AtMzAsCisgICAgMHgxLnAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDY4CisgICAgLTB4MS4wMDAwMDAwMDAwMDAwMDA1NTU1NTU1NTU1NTU1NTU3N3AtMzAsCisgICAgLTB4MS5wLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTA2OQorICAgIDB4MS4wMDAwMDIwMDAwMDAwMDA1NTU1NTc1NTU1NTk1NTU3N3AtMzAsCisgICAgMHgxLjAwMDAwMnAtMzAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcwCisgICAgLTB4MS4wMDAwMDIwMDAwMDAwMDA1NTU1NTc1NTU1NTk1NTU3N3AtMzAsCisgICAgLTB4MS4wMDAwMDJwLTMwCisgIH0sCisgIHsgLy8gRW50cnkgMTA3MQorICAgIDB4MS4zOTNkOTRiNDk4OGMxZjI1NDM0NWM5ZjdkOWVhMGMwM3AtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDcyCisgICAgLTB4MS4zOTNkOTRiNDk4OGMxZjI1NDM0NWM5ZjdkOWVhMGMwM3AtMSwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNzMKKyAgICAtMHgxLjM5M2Q5NGI0OTg4YzFmMjU0MzQ1YzlmN2Q5ZWEwYzAzcC0xLAorICAgIDB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA3NAorICAgIDB4MS4zOTNkOTRiNDk4OGMxZjI1NDM0NWM5ZjdkOWVhMGMwM3AtMSwKKyAgICAtMHgxLmZmZmZmZXAxMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDc1CisgICAgLTB4MS4zOTNkOTRiNDk4OGMxZjI1NDM0NWM5ZjdkOWVhMGMwM3AtMSwKKyAgICAweDEuZmZmZmZlcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNzYKKyAgICAweDEuMzkzZDk0YjQ5ODhjMWYyNTQzNDVjOWY3ZDllYTBjMDNwLTEsCisgICAgLTB4MS5mZmZmZmVwMTI3CisgIH0sCisgIHsgLy8gRW50cnkgMTA3NworICAgIDB4MS5hY2YzMTVhODdhYTVkYTg2NTRjODQ0YjkxN2QxNDc0NXAtMSwKKyAgICAweDEuZmZmZmZjcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNzgKKyAgICAtMHgxLmFjZjMxNWE4N2FhNWRhODY1NGM4NDRiOTE3ZDE0NzQ1cC0xLAorICAgIC0weDEuZmZmZmZjcDEyNworICB9LAorICB7IC8vIEVudHJ5IDEwNzkKKyAgICAweDEuNzc3YTVjZjcyY2VkZjNiNTQ0YzgxODA4YjUxNWYxZjlwLTI0LAorICAgIDB4MS45MjFmYjZwMQorICB9LAorICB7IC8vIEVudHJ5IDEwODAKKyAgICAtMHgxLjc3N2E1Y2Y3MmNlZGYzYjU0NGM4MTgwOGI1MTVmMWY5cC0yNCwKKyAgICAtMHgxLjkyMWZiNnAxCisgIH0sCisgIHsgLy8gRW50cnkgMTA4MQorICAgIC0weDEuNWQxNDk0NmRjOTg5NzVkNjQyMWE1NTI4NGZlMDIwYTFwMjQsCisgICAgMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA4MgorICAgIDB4MS41ZDE0OTQ2ZGM5ODk3NWQ2NDIxYTU1Mjg0ZmUwMjBhMXAyNCwKKyAgICAtMHgxLjkyMWZiNnAwCisgIH0sCisgIHsgLy8gRW50cnkgMTA4MworICAgIDB4MS44ZWIyNGNhNWNiZWEwOGY5OTEyMDZhM2VhZjkzYWI5OHAwLAorICAgIDB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDEwODQKKyAgICAtMHgxLjhlYjI0Y2E1Y2JlYTA4Zjk5MTIwNmEzZWFmOTNhYjk4cDAsCisgICAgLTB4MS4wMDAwMDJwMAorICB9LAorICB7IC8vIEVudHJ5IDEwODUKKyAgICAweDEuOGViMjQ1Y2JlZTNhNWI4YWNjN2Q0MTMyMzE0MGIzYjVwMCwKKyAgICAweDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg2CisgICAgLTB4MS44ZWIyNDVjYmVlM2E1YjhhY2M3ZDQxMzIzMTQwYjNiNXAwLAorICAgIC0weDEucDAKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg3CisgICAgMHgxLjhlYjI0MjVlZmY3Mjg2MGQ1NmQ2MTA1NmRiNTRlZjY3cDAsCisgICAgMHgxLmZmZmZmZXAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwODgKKyAgICAtMHgxLjhlYjI0MjVlZmY3Mjg2MGQ1NmQ2MTA1NmRiNTRlZjY3cDAsCisgICAgLTB4MS5mZmZmZmVwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDg5CisgICAgMHgxLjAwMDAwMGJiYmQyZWMwNmQ2ZDZmZmYzNjU1YTM0NmFjcDAsCisgICAgMHgxLjkyMWZiNnAtMQorICB9LAorICB7IC8vIEVudHJ5IDEwOTAKKyAgICAtMHgxLjAwMDAwMGJiYmQyZWMwNmQ2ZDZmZmYzNjU1YTM0NmFjcDAsCisgICAgLTB4MS45MjFmYjZwLTEKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkxCisgICAgMHgxLjAwMDAwMnAtMTI2LAorICAgIDB4MS4wMDAwMDJwLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDEwOTIKKyAgICAtMHgxLjAwMDAwMnAtMTI2LAorICAgIC0weDEuMDAwMDAycC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDkzCisgICAgMHgxLnAtMTI2LAorICAgIDB4MS5wLTEyNgorICB9LAorICB7IC8vIEVudHJ5IDEwOTQKKyAgICAtMHgxLnAtMTI2LAorICAgIC0weDEucC0xMjYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk1CisgICAgMHgxLmZmZmZmY3AtMTI3LAorICAgIDB4MS5mZmZmZmNwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDEwOTYKKyAgICAtMHgxLmZmZmZmY3AtMTI3LAorICAgIC0weDEuZmZmZmZjcC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk3CisgICAgMHgxLmZmZmZmOHAtMTI3LAorICAgIDB4MS5mZmZmZjhwLTEyNworICB9LAorICB7IC8vIEVudHJ5IDEwOTgKKyAgICAtMHgxLmZmZmZmOHAtMTI3LAorICAgIC0weDEuZmZmZmY4cC0xMjcKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMDk5CisgICAgMHgxLnAtMTQ4LAorICAgIDB4MS5wLTE0OAorICB9LAorICB7IC8vIEVudHJ5IDExMDAKKyAgICAtMHgxLnAtMTQ4LAorICAgIC0weDEucC0xNDgKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAxCisgICAgMHgxLnAtMTQ5LAorICAgIDB4MS5wLTE0OQorICB9LAorICB7IC8vIEVudHJ5IDExMDIKKyAgICAtMHgxLnAtMTQ5LAorICAgIC0weDEucC0xNDkKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTAzCisgICAgMC4wLAorICAgIDAuMGYKKyAgfSwKKyAgeyAvLyBFbnRyeSAxMTA0CisgICAgLTAuMCwKKyAgICAtMC4wZgorICB9LAorfTsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCisKK1RFU1QobWF0aF90YW5mLCB0YW5mX2ludGVsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihnX3RhbmZfaW50ZWxfZGF0YSkvc2l6ZW9mKHRhbmZfaW50ZWxfZGF0YV90KTsgaSsrKSB7CisgICAgRVhQRUNUX0ZMT0FUX0VRKGdfdGFuZl9pbnRlbF9kYXRhW2ldLmV4cGVjdGVkLCB0YW5mKGdfdGFuZl9pbnRlbF9kYXRhW2ldLmNhbGxfZGF0YSkpIDw8ICJGYWlsZWQgb24gZWxlbWVudCAiIDw8IGk7CisgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfdGVzdC5jcHAgYi90ZXN0cy9tYXRoX3Rlc3QuY3BwCmluZGV4IDQ1NDY0NmQuLmI0ZjViMTQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21hdGhfdGVzdC5jcHAKKysrIGIvdGVzdHMvbWF0aF90ZXN0LmNwcApAQCAtMTQsMTMgKzE0LDQzIEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jZGVmaW5lIF9ERUNMQVJFX0M5OV9MREJMX01BVEggMQorLy8gVGhpcyBpbmNsdWRlIChhbmQgdGhlIGFzc29jaWF0ZWQgZGVmaW5pdGlvbiBvZiBfX3Rlc3RfY2FwdHVyZV9zaWduYml0KQorLy8gbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGFueSBmaWxlcyB0aGF0IGluY2x1ZGUgPGNtYXRoPiAoZ3Rlc3QuaCBpbiB0aGlzIGNhc2UpLgorLy8KKy8vIDxtYXRoLmg+IGlzIHJlcXVpcmVkIHRvIGRlZmluZSBnZW5lcmljIG1hY3JvcyBzaWduYml0LCBpc2Zpbml0ZSBhbmQKKy8vIHNldmVyYWwgb3RoZXIgc3VjaCBmdW5jdGlvbnMuCisvLworLy8gPGNtYXRoPiBpcyByZXF1aXJlZCB0byB1bmRlZiBkZWNsYXJhdGlvbnMgb2YgdGhlc2UgbWFjcm9zIGluIHRoZSBnbG9iYWwKKy8vIG5hbWVzcGFjZSBhbmQgbWFrZSBlcXVpdmFsZW50IGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gbmFtZXNwYWNlIHN0ZC4gT3VyCisvLyBzdGxwb3J0IGltcGxlbWVudGF0aW9uIGRvZXMgdGhpcyBvbmx5IGZvciBzaWduYml0LCBpc2Zpbml0ZSwgaXNpbmYgYW5kCisvLyBpc25hbi4KKy8vCisvLyBOT1RFOiBXZSBkb24ndCB3cml0ZSBvdXIgdGVzdCB1c2luZyBzdGQ6OnNpZ25iaXQgYmVjYXVzZSB3ZSB3YW50IHRvIGJlCisvLyBzdXJlIHRoYXQgd2UncmUgdGVzdGluZyB0aGUgYmlvbmljIHZlcnNpb24gb2Ygc2lnbmJpdC4gVGhlIEMrKyBsaWJyYXJpZXMKKy8vIGFyZSBmcmVlIHRvIHJlaW1wbGVtZW50IHNpZ25iaXQgb3IgZGVsZWdhdGUgdG8gY29tcGlsZXIgYnVpbHRpbnMgaWYgdGhleQorLy8gcGxlYXNlLgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBpbnQgdGVzdF9jYXB0dXJlX3NpZ25iaXQoY29uc3QgVCBpbikgeworICByZXR1cm4gc2lnbmJpdChpbik7Cit9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgaW50IHRlc3RfY2FwdHVyZV9pc2Zpbml0ZShjb25zdCBUIGluKSB7CisgIHJldHVybiBpc2Zpbml0ZShpbik7Cit9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgaW50IHRlc3RfY2FwdHVyZV9pc25hbihjb25zdCBUIGluKSB7CisgIHJldHVybiBpc25hbihpbik7Cit9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgaW50IHRlc3RfY2FwdHVyZV9pc2luZihjb25zdCBUIGluKSB7CisgIHJldHVybiBpc2luZihpbik7Cit9Cit9CiAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiAjaW5jbHVkZSA8ZmVudi5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogCiBmbG9hdCBmbG9hdF9zdWJub3JtYWwoKSB7CkBAIC00MSwxNDcgKzcxLDIwMSBAQAogICByZXR1cm4gdS5kOwogfQogCitsb25nIGRvdWJsZSBsZG91YmxlX3N1Ym5vcm1hbCgpIHsKKyAgdW5pb24geworICAgIGxvbmcgZG91YmxlIGU7CisgICAgdW5zaWduZWQgY2hhciBjW3NpemVvZihsb25nIGRvdWJsZSldOworICB9IHU7CisKKyAgLy8gU3Vibm9ybWFscyBtdXN0IGhhdmUgYSB6ZXJvIGV4cG9uZW50IGFuZCBub24gemVybyBzaWduaWZpY2FuZC4KKyAgLy8gT24gYWxsIHN1cHBvcnRlZCByZXByZXNlbnRhdGlvbiB0aGUgMTcgYml0IChjb3VudGluZyBmcm9tIGVpdGhlciBzaWRlcykKKyAgLy8gaXMgcGFydCBvZiB0aGUgc2lnbmlmaWNhbmQgc28gaXQgc2hvdWxkIGJlIGVub3VnaCB0byBzZXQgdGhhdC4KKyAgLy8gSXQgYWxzbyBhcHBsaWVzIGZvciB0aGUgY2FzZSBzaXplb2YoZG91YmxlKSA9IHNpemVvZihsb25nIGRvdWJsZSkKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplb2YobG9uZyBkb3VibGUpOyBpKyspIHsKKyAgICB1LmNbaV0gPSAweDAwOworICB9CisgIHUuY1tzaXplb2YobG9uZyBkb3VibGUpIC0gM10gPSAweDgwOworICB1LmNbMl0gPSAweDgwOworCisgIHJldHVybiB1LmU7Cit9CisKIFRFU1QobWF0aCwgZnBjbGFzc2lmeSkgewogICBBU1NFUlRfRVEoRlBfSU5GSU5JVEUsIGZwY2xhc3NpZnkoSU5GSU5JVFkpKTsKICAgQVNTRVJUX0VRKEZQX0lORklOSVRFLCBmcGNsYXNzaWZ5KEhVR0VfVkFMRikpOwogICBBU1NFUlRfRVEoRlBfSU5GSU5JVEUsIGZwY2xhc3NpZnkoSFVHRV9WQUwpKTsKKyAgQVNTRVJUX0VRKEZQX0lORklOSVRFLCBmcGNsYXNzaWZ5KEhVR0VfVkFMTCkpOwogCiAgIEFTU0VSVF9FUShGUF9OQU4sIGZwY2xhc3NpZnkobmFuZigiIikpKTsKICAgQVNTRVJUX0VRKEZQX05BTiwgZnBjbGFzc2lmeShuYW4oIiIpKSk7CisgIEFTU0VSVF9FUShGUF9OQU4sIGZwY2xhc3NpZnkobmFubCgiIikpKTsKIAogICBBU1NFUlRfRVEoRlBfTk9STUFMLCBmcGNsYXNzaWZ5KDEuMGYpKTsKICAgQVNTRVJUX0VRKEZQX05PUk1BTCwgZnBjbGFzc2lmeSgxLjApKTsKKyAgQVNTRVJUX0VRKEZQX05PUk1BTCwgZnBjbGFzc2lmeSgxLjBMKSk7CiAKICAgQVNTRVJUX0VRKEZQX1NVQk5PUk1BTCwgZnBjbGFzc2lmeShmbG9hdF9zdWJub3JtYWwoKSkpOwogICBBU1NFUlRfRVEoRlBfU1VCTk9STUFMLCBmcGNsYXNzaWZ5KGRvdWJsZV9zdWJub3JtYWwoKSkpOworICBBU1NFUlRfRVEoRlBfU1VCTk9STUFMLCBmcGNsYXNzaWZ5KGxkb3VibGVfc3Vibm9ybWFsKCkpKTsKIAogICBBU1NFUlRfRVEoRlBfWkVSTywgZnBjbGFzc2lmeSgwLjBmKSk7CiAgIEFTU0VSVF9FUShGUF9aRVJPLCBmcGNsYXNzaWZ5KDAuMCkpOworICBBU1NFUlRfRVEoRlBfWkVSTywgZnBjbGFzc2lmeSgwLjBMKSk7CiB9CiAKLS8qIFRPRE86IHN0bHBvcnQgYnJlYWtzIHRoZSBpc2Zpbml0ZSBtYWNybwogVEVTVChtYXRoLCBpc2Zpbml0ZSkgewotICBBU1NFUlRfVFJVRShpc2Zpbml0ZSgxMjMuMGYpKTsKLSAgQVNTRVJUX1RSVUUoaXNmaW5pdGUoMTIzLjApKTsKLSAgQVNTRVJUX0ZBTFNFKGlzZmluaXRlKEhVR0VfVkFMRikpOwotICBBU1NFUlRfRkFMU0UoaXNmaW5pdGUoSFVHRV9WQUwpKTsKKyAgQVNTRVJUX1RSVUUodGVzdF9jYXB0dXJlX2lzZmluaXRlKDEyMy4wZikpOworICBBU1NFUlRfVFJVRSh0ZXN0X2NhcHR1cmVfaXNmaW5pdGUoMTIzLjApKTsKKyAgQVNTRVJUX1RSVUUodGVzdF9jYXB0dXJlX2lzZmluaXRlKDEyMy4wTCkpOworICBBU1NFUlRfRkFMU0UodGVzdF9jYXB0dXJlX2lzZmluaXRlKEhVR0VfVkFMRikpOworICBBU1NFUlRfRkFMU0UodGVzdF9jYXB0dXJlX2lzZmluaXRlKEhVR0VfVkFMKSk7CisgIEFTU0VSVF9GQUxTRSh0ZXN0X2NhcHR1cmVfaXNmaW5pdGUoSFVHRV9WQUxMKSk7CiB9Ci0qLwogCiBURVNUKG1hdGgsIGlzaW5mKSB7Ci0gIEFTU0VSVF9GQUxTRShpc2luZigxMjMuMGYpKTsKLSAgQVNTRVJUX0ZBTFNFKGlzaW5mKDEyMy4wKSk7Ci0gIEFTU0VSVF9UUlVFKGlzaW5mKEhVR0VfVkFMRikpOwotICBBU1NFUlRfVFJVRShpc2luZihIVUdFX1ZBTCkpOworICBBU1NFUlRfRkFMU0UodGVzdF9jYXB0dXJlX2lzaW5mKDEyMy4wZikpOworICBBU1NFUlRfRkFMU0UodGVzdF9jYXB0dXJlX2lzaW5mKDEyMy4wKSk7CisgIEFTU0VSVF9GQUxTRSh0ZXN0X2NhcHR1cmVfaXNpbmYoMTIzLjBMKSk7CisgIEFTU0VSVF9UUlVFKHRlc3RfY2FwdHVyZV9pc2luZihIVUdFX1ZBTEYpKTsKKyAgQVNTRVJUX1RSVUUodGVzdF9jYXB0dXJlX2lzaW5mKEhVR0VfVkFMKSk7CisgIEFTU0VSVF9UUlVFKHRlc3RfY2FwdHVyZV9pc2luZihIVUdFX1ZBTEwpKTsKIH0KIAogVEVTVChtYXRoLCBpc25hbikgewotICBBU1NFUlRfRkFMU0UoaXNuYW4oMTIzLjBmKSk7Ci0gIEFTU0VSVF9GQUxTRShpc25hbigxMjMuMCkpOwotICBBU1NFUlRfVFJVRShpc25hbihuYW5mKCIiKSkpOwotICBBU1NFUlRfVFJVRShpc25hbihuYW4oIiIpKSk7CisgIEFTU0VSVF9GQUxTRSh0ZXN0X2NhcHR1cmVfaXNuYW4oMTIzLjBmKSk7CisgIEFTU0VSVF9GQUxTRSh0ZXN0X2NhcHR1cmVfaXNuYW4oMTIzLjApKTsKKyAgQVNTRVJUX0ZBTFNFKHRlc3RfY2FwdHVyZV9pc25hbigxMjMuMEwpKTsKKyAgQVNTRVJUX1RSVUUodGVzdF9jYXB0dXJlX2lzbmFuKG5hbmYoIiIpKSk7CisgIEFTU0VSVF9UUlVFKHRlc3RfY2FwdHVyZV9pc25hbihuYW4oIiIpKSk7CisgIEFTU0VSVF9UUlVFKHRlc3RfY2FwdHVyZV9pc25hbihuYW5sKCIiKSkpOwogfQogCiBURVNUKG1hdGgsIGlzbm9ybWFsKSB7CiAgIEFTU0VSVF9UUlVFKGlzbm9ybWFsKDEyMy4wZikpOwogICBBU1NFUlRfVFJVRShpc25vcm1hbCgxMjMuMCkpOworICBBU1NFUlRfVFJVRShpc25vcm1hbCgxMjMuMEwpKTsKICAgQVNTRVJUX0ZBTFNFKGlzbm9ybWFsKGZsb2F0X3N1Ym5vcm1hbCgpKSk7CiAgIEFTU0VSVF9GQUxTRShpc25vcm1hbChkb3VibGVfc3Vibm9ybWFsKCkpKTsKKyAgQVNTRVJUX0ZBTFNFKGlzbm9ybWFsKGxkb3VibGVfc3Vibm9ybWFsKCkpKTsKIH0KIAogLy8gVE9ETzogaXNncmVhdGVyLCBpc2dyZWF0ZXJlcXVhbHMsIGlzbGVzcywgaXNsZXNzZXF1YWwsIGlzbGVzc2dyZWF0ZXIsIGlzdW5vcmRlcmVkCi0KLS8qIFRPRE86IHN0bHBvcnQgYnJlYWtzIHRoZSBzaWduYml0IG1hY3JvCiBURVNUKG1hdGgsIHNpZ25iaXQpIHsKLSAgQVNTRVJUX0VRKDAsIHNpZ25iaXQoMC4wZikpOwotICBBU1NFUlRfRVEoMCwgc2lnbmJpdCgwLjApKTsKKyAgQVNTRVJUX0VRKDAsIHRlc3RfY2FwdHVyZV9zaWduYml0KDAuMGYpKTsKKyAgQVNTRVJUX0VRKDAsIHRlc3RfY2FwdHVyZV9zaWduYml0KDAuMCkpOworICBBU1NFUlRfRVEoMCwgdGVzdF9jYXB0dXJlX3NpZ25iaXQoMC4wTCkpOwogCi0gIEFTU0VSVF9FUSgwLCBzaWduYml0KDEuMGYpKTsKLSAgQVNTRVJUX0VRKDAsIHNpZ25iaXQoMS4wKSk7CisgIEFTU0VSVF9FUSgwLCB0ZXN0X2NhcHR1cmVfc2lnbmJpdCgxLjBmKSk7CisgIEFTU0VSVF9FUSgwLCB0ZXN0X2NhcHR1cmVfc2lnbmJpdCgxLjApKTsKKyAgQVNTRVJUX0VRKDAsIHRlc3RfY2FwdHVyZV9zaWduYml0KDEuMEwpKTsKIAotICBBU1NFUlRfTkUoMCwgc2lnbmJpdCgtMS4wZikpOwotICBBU1NFUlRfTkUoMCwgc2lnbmJpdCgtMS4wKSk7CisgIEFTU0VSVF9ORSgwLCB0ZXN0X2NhcHR1cmVfc2lnbmJpdCgtMS4wZikpOworICBBU1NFUlRfTkUoMCwgdGVzdF9jYXB0dXJlX3NpZ25iaXQoLTEuMCkpOworICBBU1NFUlRfTkUoMCwgdGVzdF9jYXB0dXJlX3NpZ25iaXQoLTEuMEwpKTsKIH0KLSovCiAKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCiBURVNUKG1hdGgsIF9fZnBjbGFzc2lmeWQpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIEFTU0VSVF9FUShGUF9JTkZJTklURSwgX19mcGNsYXNzaWZ5ZChIVUdFX1ZBTCkpOwogICBBU1NFUlRfRVEoRlBfTkFOLCBfX2ZwY2xhc3NpZnlkKG5hbigiIikpKTsKICAgQVNTRVJUX0VRKEZQX05PUk1BTCwgX19mcGNsYXNzaWZ5ZCgxLjApKTsKICAgQVNTRVJUX0VRKEZQX1NVQk5PUk1BTCwgX19mcGNsYXNzaWZ5ZChkb3VibGVfc3Vibm9ybWFsKCkpKTsKICAgQVNTRVJUX0VRKEZQX1pFUk8sIF9fZnBjbGFzc2lmeWQoMC4wKSk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLSNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQogVEVTVChtYXRoLCBfX2ZwY2xhc3NpZnlmKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBBU1NFUlRfRVEoRlBfSU5GSU5JVEUsIF9fZnBjbGFzc2lmeWYoSFVHRV9WQUxGKSk7CiAgIEFTU0VSVF9FUShGUF9OQU4sIF9fZnBjbGFzc2lmeWYobmFuZigiIikpKTsKICAgQVNTRVJUX0VRKEZQX05PUk1BTCwgX19mcGNsYXNzaWZ5ZigxLjBmKSk7CiAgIEFTU0VSVF9FUShGUF9TVUJOT1JNQUwsIF9fZnBjbGFzc2lmeWYoZmxvYXRfc3Vibm9ybWFsKCkpKTsKICAgQVNTRVJUX0VRKEZQX1pFUk8sIF9fZnBjbGFzc2lmeWYoMC4wZikpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKIFRFU1QobWF0aCwgX19mcGNsYXNzaWZ5bCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgRVhQRUNUX0VRKEZQX0lORklOSVRFLCBfX2ZwY2xhc3NpZnlsKEhVR0VfVkFMTCkpOwogICBFWFBFQ1RfRVEoRlBfTkFOLCBfX2ZwY2xhc3NpZnlsKG5hbmwoIiIpKSk7Ci0gIEVYUEVDVF9FUShGUF9OT1JNQUwsIF9fZnBjbGFzc2lmeWwoMS4wKSk7Ci0gIEVYUEVDVF9FUShGUF9TVUJOT1JNQUwsIF9fZnBjbGFzc2lmeWwoZG91YmxlX3N1Ym5vcm1hbCgpKSk7Ci0gIEVYUEVDVF9FUShGUF9aRVJPLCBfX2ZwY2xhc3NpZnlsKDAuMCkpOworICBFWFBFQ1RfRVEoRlBfTk9STUFMLCBfX2ZwY2xhc3NpZnlsKDEuMEwpKTsKKyAgRVhQRUNUX0VRKEZQX1NVQk5PUk1BTCwgX19mcGNsYXNzaWZ5bChsZG91YmxlX3N1Ym5vcm1hbCgpKSk7CisgIEVYUEVDVF9FUShGUF9aRVJPLCBfX2ZwY2xhc3NpZnlsKDAuMEwpKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKIFRFU1QobWF0aCwgZmluaXRlZikgewogICBBU1NFUlRfVFJVRShmaW5pdGVmKDEyMy4wZikpOwogICBBU1NFUlRfRkFMU0UoZmluaXRlZihIVUdFX1ZBTEYpKTsKIH0KIAotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKIFRFU1QobWF0aCwgX19pc2Zpbml0ZSkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgQVNTRVJUX1RSVUUoX19pc2Zpbml0ZSgxMjMuMCkpOwogICBBU1NFUlRfRkFMU0UoX19pc2Zpbml0ZShIVUdFX1ZBTCkpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKIFRFU1QobWF0aCwgX19pc2Zpbml0ZWYpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIEFTU0VSVF9UUlVFKF9faXNmaW5pdGVmKDEyMy4wZikpOwogICBBU1NFUlRfRkFMU0UoX19pc2Zpbml0ZWYoSFVHRV9WQUxGKSk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLSNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQogVEVTVChtYXRoLCBfX2lzZmluaXRlbCkgewotICBBU1NFUlRfVFJVRShfX2lzZmluaXRlbCgxMjMuMGYpKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIEFTU0VSVF9UUlVFKF9faXNmaW5pdGVsKDEyMy4wTCkpOwogICBBU1NFUlRfRkFMU0UoX19pc2Zpbml0ZWwoSFVHRV9WQUxMKSk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLSNlbmRpZgogCiBURVNUKG1hdGgsIGZpbml0ZSkgewogICBBU1NFUlRfVFJVRShmaW5pdGUoMTIzLjApKTsKICAgQVNTRVJUX0ZBTFNFKGZpbml0ZShIVUdFX1ZBTCkpOwogfQogCitURVNUKG1hdGgsIGlzaW5mX2Z1bmN0aW9uKSB7CisgIC8vIFRoZSBpc2luZiBtYWNybyBkZWFscyB3aXRoIGFsbCB0aHJlZSB0eXBlczsgdGhlIGlzaW5mIGZ1bmN0aW9uIGlzIGZvciBkb3VibGVzLgorICBBU1NFUlRfRkFMU0UoKGlzaW5mKSgxMjMuMCkpOworICBBU1NFUlRfVFJVRSgoaXNpbmYpKEhVR0VfVkFMKSk7Cit9CisKIFRFU1QobWF0aCwgX19pc2luZmYpIHsKICAgQVNTRVJUX0ZBTFNFKF9faXNpbmZmKDEyMy4wZikpOwogICBBU1NFUlRfVFJVRShfX2lzaW5mZihIVUdFX1ZBTEYpKTsKIH0KIAogVEVTVChtYXRoLCBfX2lzaW5mbCkgewotICBBU1NFUlRfRkFMU0UoX19pc2luZmwoMTIzLjApKTsKKyAgQVNTRVJUX0ZBTFNFKF9faXNpbmZsKDEyMy4wTCkpOwogICBBU1NFUlRfVFJVRShfX2lzaW5mbChIVUdFX1ZBTEwpKTsKIH0KIAorVEVTVChtYXRoLCBpc25hbl9mdW5jdGlvbikgeworICAvLyBUaGUgaXNuYW4gbWFjcm8gZGVhbHMgd2l0aCBhbGwgdGhyZWUgdHlwZXM7IHRoZSBpc25hbiBmdW5jdGlvbiBpcyBmb3IgZG91Ymxlcy4KKyAgQVNTRVJUX0ZBTFNFKChpc25hbikoMTIzLjApKTsKKyAgQVNTRVJUX1RSVUUoKGlzbmFuKShuYW4oIiIpKSk7Cit9CisKIFRFU1QobWF0aCwgX19pc25hbmYpIHsKICAgQVNTRVJUX0ZBTFNFKF9faXNuYW5mKDEyMy4wZikpOwogICBBU1NFUlRfVFJVRShfX2lzbmFuZihuYW5mKCIiKSkpOwogfQogCiBURVNUKG1hdGgsIF9faXNuYW5sKSB7Ci0gIEFTU0VSVF9GQUxTRShfX2lzbmFubCgxMjMuMCkpOworICBBU1NFUlRfRkFMU0UoX19pc25hbmwoMTIzLjBMKSk7CiAgIEFTU0VSVF9UUlVFKF9faXNuYW5sKG5hbmwoIiIpKSk7CiB9CiAKQEAgLTE5MCwyNiArMjc0LDMyIEBACiAgIEFTU0VSVF9UUlVFKGlzbmFuZihuYW5mKCIiKSkpOwogfQogCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQogVEVTVChtYXRoLCBfX2lzbm9ybWFsKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBBU1NFUlRfVFJVRShfX2lzbm9ybWFsKDEyMy4wKSk7CiAgIEFTU0VSVF9GQUxTRShfX2lzbm9ybWFsKGRvdWJsZV9zdWJub3JtYWwoKSkpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKIFRFU1QobWF0aCwgX19pc25vcm1hbGYpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIEFTU0VSVF9UUlVFKF9faXNub3JtYWxmKDEyMy4wZikpOwogICBBU1NFUlRfRkFMU0UoX19pc25vcm1hbGYoZmxvYXRfc3Vibm9ybWFsKCkpKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCiBURVNUKG1hdGgsIF9faXNub3JtYWxsKSB7Ci0gIEFTU0VSVF9UUlVFKF9faXNub3JtYWxsKDEyMy4wKSk7Ci0gIEFTU0VSVF9GQUxTRShfX2lzbm9ybWFsbChkb3VibGVfc3Vibm9ybWFsKCkpKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIEFTU0VSVF9UUlVFKF9faXNub3JtYWxsKDEyMy4wTCkpOworICBBU1NFUlRfRkFMU0UoX19pc25vcm1hbGwobGRvdWJsZV9zdWJub3JtYWwoKSkpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAogVEVTVChtYXRoLCBfX3NpZ25iaXQpIHsKICAgQVNTRVJUX0VRKDAsIF9fc2lnbmJpdCgwLjApKTsKQEAgLTIyNCwxMyArMzE0LDEzIEBACiB9CiAKIFRFU1QobWF0aCwgX19zaWduYml0bCkgewotICBBU1NFUlRfRVEoMCwgX19zaWduYml0bCgwLjApKTsKLSAgQVNTRVJUX0VRKDAsIF9fc2lnbmJpdGwoMS4wKSk7Ci0gIEFTU0VSVF9ORSgwLCBfX3NpZ25iaXRsKC0xLjApKTsKKyAgQVNTRVJUX0VRKDBMLCBfX3NpZ25iaXRsKDAuMEwpKTsKKyAgQVNTRVJUX0VRKDBMLCBfX3NpZ25iaXRsKDEuMEwpKTsKKyAgQVNTRVJUX05FKDBMLCBfX3NpZ25iaXRsKC0xLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgYWNvcykgewotICBBU1NFUlRfRkxPQVRfRVEoTV9QSS8yLjAsIGFjb3MoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoTV9QSS8yLjAsIGFjb3MoMC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgYWNvc2YpIHsKQEAgLTIzOCwxMSArMzI4LDExIEBACiB9CiAKIFRFU1QobWF0aCwgYWNvc2wpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKE1fUEkvMi4wLCBhY29zbCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShNX1BJLzIuMEwsIGFjb3NsKDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBhc2luKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGFzaW4oMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBhc2luKDAuMCkpOwogfQogCiBURVNUKG1hdGgsIGFzaW5mKSB7CkBAIC0yNTAsMTEgKzM0MCwxMSBAQAogfQogCiBURVNUKG1hdGgsIGFzaW5sKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGFzaW5sKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIGFzaW5sKDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBhdGFuKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGF0YW4oMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBhdGFuKDAuMCkpOwogfQogCiBURVNUKG1hdGgsIGF0YW5mKSB7CkBAIC0yNjIsMTEgKzM1MiwxMSBAQAogfQogCiBURVNUKG1hdGgsIGF0YW5sKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGF0YW5sKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIGF0YW5sKDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBhdGFuMikgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBhdGFuMigwLjAsIDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgYXRhbjIoMC4wLCAwLjApKTsKIH0KIAogVEVTVChtYXRoLCBhdGFuMmYpIHsKQEAgLTI3NCwxMSArMzY0LDExIEBACiB9CiAKIFRFU1QobWF0aCwgYXRhbjJsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGF0YW4ybCgwLjAsIDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIGF0YW4ybCgwLjBMLCAwLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgY29zKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGNvcygwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjAsIGNvcygwLjApKTsKIH0KIAogVEVTVChtYXRoLCBjb3NmKSB7CkBAIC0yODYsMTEgKzM3NiwxMSBAQAogfQogCiBURVNUKG1hdGgsIGNvc2wpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgY29zbCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjBMLCBjb3NsKDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBzaW4pIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgc2luKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgc2luKDAuMCkpOwogfQogCiBURVNUKG1hdGgsIHNpbmYpIHsKQEAgLTI5OCwxMSArMzg4LDExIEBACiB9CiAKIFRFU1QobWF0aCwgc2lubCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBzaW5sKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIHNpbmwoMC4wTCkpOwogfQogCiBURVNUKG1hdGgsIHRhbikgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCB0YW4oMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCB0YW4oMC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgdGFuZikgewpAQCAtMzEwLDExICs0MDAsMTEgQEAKIH0KIAogVEVTVChtYXRoLCB0YW5sKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHRhbmwoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgdGFubCgwLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgYWNvc2gpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYWNvc2goMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBhY29zaCgxLjApKTsKIH0KIAogVEVTVChtYXRoLCBhY29zaGYpIHsKQEAgLTMyMiwxMSArNDEyLDExIEBACiB9CiAKIFRFU1QobWF0aCwgYWNvc2hsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGFjb3NobCgxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCBhY29zaGwoMS4wTCkpOwogfQogCiBURVNUKG1hdGgsIGFzaW5oKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGFzaW5oKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgYXNpbmgoMC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgYXNpbmhmKSB7CkBAIC0zMzQsMTEgKzQyNCwxMSBAQAogfQogCiBURVNUKG1hdGgsIGFzaW5obCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBhc2luaGwoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgYXNpbmhsKDAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBhdGFuaCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBhdGFuaCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIGF0YW5oKDAuMCkpOwogfQogCiBURVNUKG1hdGgsIGF0YW5oZikgewpAQCAtMzQ2LDExICs0MzYsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBhdGFuaGwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYXRhbmhsKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIGF0YW5obCgwLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgY29zaCkgewotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBjb3NoKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMCwgY29zaCgwLjApKTsKIH0KIAogVEVTVChtYXRoLCBjb3NoZikgewpAQCAtMzU4LDExICs0NDgsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBjb3NobCkgewotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBjb3NobCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjBMLCBjb3NobCgwLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgc2luaCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBzaW5oKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgc2luaCgwLjApKTsKIH0KIAogVEVTVChtYXRoLCBzaW5oZikgewpAQCAtMzcwLDExICs0NjAsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBzaW5obCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBzaW5obCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCBzaW5obCgwLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgdGFuaCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCB0YW5oKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgdGFuaCgwLjApKTsKIH0KIAogVEVTVChtYXRoLCB0YW5oZikgewpAQCAtMzgyLDExICs0NzIsMTEgQEAKIH0KIAogVEVTVChtYXRoLCB0YW5obCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCB0YW5obCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCB0YW5obCgwLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgbG9nKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGxvZyhNX0UpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjAsIGxvZyhNX0UpKTsKIH0KIAogVEVTVChtYXRoLCBsb2dmKSB7CkBAIC0zOTQsMTEgKzQ4NCwxMSBAQAogfQogCiBURVNUKG1hdGgsIGxvZ2wpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgbG9nbChNX0UpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjBMLCBsb2dsKE1fRSkpOwogfQogCiBURVNUKG1hdGgsIGxvZzIpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGxvZzIoNDA5Ni4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIuMCwgbG9nMig0MDk2LjApKTsKIH0KIAogVEVTVChtYXRoLCBsb2cyZikgewpAQCAtNDA2LDExICs0OTYsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBsb2cybCkgewotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgbG9nMmwoNDA5Ni4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIuMEwsIGxvZzJsKDQwOTYuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBsb2cxMCkgewotICBBU1NFUlRfRkxPQVRfRVEoMy4wLCBsb2cxMCgxMDAwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgzLjAsIGxvZzEwKDEwMDAuMCkpOwogfQogCiBURVNUKG1hdGgsIGxvZzEwZikgewpAQCAtNDE4LDExICs1MDgsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBsb2cxMGwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDMuMCwgbG9nMTBsKDEwMDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDMuMEwsIGxvZzEwbCgxMDAwLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgY2JydCkgewotICBBU1NFUlRfRkxPQVRfRVEoMy4wLCBjYnJ0KDI3LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgzLjAsIGNicnQoMjcuMCkpOwogfQogCiBURVNUKG1hdGgsIGNicnRmKSB7CkBAIC00MzAsMTEgKzUyMCwxMSBAQAogfQogCiBURVNUKG1hdGgsIGNicnRsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgzLjAsIGNicnRsKDI3LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgzLjBMLCBjYnJ0bCgyNy4wTCkpOwogfQogCiBURVNUKG1hdGgsIHNxcnQpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDIuMCwgc3FydCg0LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgyLjAsIHNxcnQoNC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgc3FydGYpIHsKQEAgLTQ0MiwxMiArNTMyLDEyIEBACiB9CiAKIFRFU1QobWF0aCwgc3FydGwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDIuMCwgc3FydGwoNC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMi4wTCwgc3FydGwoNC4wTCkpOwogfQogCiBURVNUKG1hdGgsIGV4cCkgewotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBleHAoMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUShNX0UsIGV4cCgxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjAsIGV4cCgwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShNX0UsIGV4cCgxLjApKTsKIH0KIAogVEVTVChtYXRoLCBleHBmKSB7CkBAIC00NTYsMTIgKzU0NiwxMiBAQAogfQogCiBURVNUKG1hdGgsIGV4cGwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgZXhwbCgwLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKE1fRSwgZXhwbCgxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjBMLCBleHBsKDAuMEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShNX0UsIGV4cGwoMS4wTCkpOwogfQogCiBURVNUKG1hdGgsIGV4cDIpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDguMCwgZXhwMigzLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSg4LjAsIGV4cDIoMy4wKSk7CiB9CiAKIFRFU1QobWF0aCwgZXhwMmYpIHsKQEAgLTQ2OSwxMSArNTU5LDExIEBACiB9CiAKIFRFU1QobWF0aCwgZXhwMmwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDguMCwgZXhwMmwoMy4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoOC4wTCwgZXhwMmwoMy4wTCkpOwogfQogCiBURVNUKG1hdGgsIGV4cG0xKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUShNX0UgLSAxLjAsIGV4cG0xKDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKE1fRSAtIDEuMCwgZXhwbTEoMS4wKSk7CiB9CiAKIFRFU1QobWF0aCwgZXhwbTFmKSB7CkBAIC00ODEsMTQgKzU3MSwxNCBAQAogfQogCiBURVNUKG1hdGgsIGV4cG0xbCkgewotICBBU1NFUlRfRkxPQVRfRVEoTV9FIC0gMS4wLCBleHBtMWwoMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoTV9FIC0gMS4wTCwgZXhwbTFsKDEuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBwb3cpIHsKICAgQVNTRVJUX1RSVUUoaXNuYW4ocG93KG5hbigiIiksIDMuMCkpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgKHBvdygxLjAsIG5hbigiIikpKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wLCAocG93KDEuMCwgbmFuKCIiKSkpKTsKICAgQVNTRVJUX1RSVUUoaXNuYW4ocG93KDIuMCwgbmFuKCIiKSkpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDguMCwgcG93KDIuMCwgMy4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoOC4wLCBwb3coMi4wLCAzLjApKTsKIH0KIAogVEVTVChtYXRoLCBwb3dmKSB7CkBAIC00OTksMTQgKzU4OSwxNCBAQAogfQogCiBURVNUKG1hdGgsIHBvd2wpIHsKLSAgQVNTRVJUX1RSVUUoX19pc25hbmwocG93bChuYW5sKCIiKSwgMy4wKSkpOwotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCAocG93bCgxLjAsIG5hbmwoIiIpKSkpOwotICBBU1NFUlRfVFJVRShfX2lzbmFubChwb3dsKDIuMCwgbmFubCgiIikpKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSg4LjAsIHBvd2woMi4wLCAzLjApKTsKKyAgQVNTRVJUX1RSVUUoX19pc25hbmwocG93bChuYW5sKCIiKSwgMy4wTCkpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjBMLCAocG93bCgxLjBMLCBuYW5sKCIiKSkpKTsKKyAgQVNTRVJUX1RSVUUoX19pc25hbmwocG93bCgyLjBMLCBuYW5sKCIiKSkpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSg4LjBMLCBwb3dsKDIuMEwsIDMuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBjZWlsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGNlaWwoMC45KSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wLCBjZWlsKDAuOSkpOwogfQogCiBURVNUKG1hdGgsIGNlaWxmKSB7CkBAIC01MTQsMTEgKzYwNCwxMSBAQAogfQogCiBURVNUKG1hdGgsIGNlaWxsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGNlaWxsKDAuOSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIGNlaWxsKDAuOUwpKTsKIH0KIAogVEVTVChtYXRoLCBmbG9vcikgewotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBmbG9vcigxLjEpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjAsIGZsb29yKDEuMSkpOwogfQogCiBURVNUKG1hdGgsIGZsb29yZikgewpAQCAtNTI2LDExICs2MTYsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBmbG9vcmwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgZmxvb3JsKDEuMSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIGZsb29ybCgxLjFMKSk7CiB9CiAKIFRFU1QobWF0aCwgZmFicykgewotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBmYWJzKC0xLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjAsIGZhYnMoLTEuMCkpOwogfQogCiBURVNUKG1hdGgsIGZhYnNmKSB7CkBAIC01MzgsMTEgKzYyOCwxMSBAQAogfQogCiBURVNUKG1hdGgsIGZhYnNsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGZhYnNsKC0xLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjBMLCBmYWJzbCgtMS4wTCkpOwogfQogCiBURVNUKG1hdGgsIGxkZXhwKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxNi4wLCBsZGV4cCgyLjAsIDMuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDE2LjAsIGxkZXhwKDIuMCwgMy4wKSk7CiB9CiAKIFRFU1QobWF0aCwgbGRleHBmKSB7CkBAIC01NTAsMTEgKzY0MCwxMSBAQAogfQogCiBURVNUKG1hdGgsIGxkZXhwbCkgewotICBBU1NFUlRfRkxPQVRfRVEoMTYuMCwgbGRleHBsKDIuMCwgMy4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTYuMEwsIGxkZXhwbCgyLjBMLCAzLjApKTsKIH0KIAogVEVTVChtYXRoLCBmbW9kKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgyLjAsIGZtb2QoMTIuMCwgMTAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDIuMCwgZm1vZCgxMi4wLCAxMC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgZm1vZGYpIHsKQEAgLTU2MiwxMSArNjUyLDExIEBACiB9CiAKIFRFU1QobWF0aCwgZm1vZGwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDIuMCwgZm1vZGwoMTIuMCwgMTAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDIuMEwsIGZtb2RsKDEyLjBMLCAxMC4wTCkpOwogfQogCiBURVNUKG1hdGgsIHJlbWFpbmRlcikgewotICBBU1NFUlRfRkxPQVRfRVEoMi4wLCByZW1haW5kZXIoMTIuMCwgMTAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDIuMCwgcmVtYWluZGVyKDEyLjAsIDEwLjApKTsKIH0KIAogVEVTVChtYXRoLCByZW1haW5kZXJmKSB7CkBAIC01NzQsMTEgKzY2NCwxMSBAQAogfQogCiBURVNUKG1hdGgsIHJlbWFpbmRlcmwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDIuMCwgcmVtYWluZGVybCgxMi4wLCAxMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMi4wTCwgcmVtYWluZGVybCgxMi4wTCwgMTAuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBkcmVtKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgyLjAsIGRyZW0oMTIuMCwgMTAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDIuMCwgZHJlbSgxMi4wLCAxMC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgZHJlbWYpIHsKQEAgLTU4Niw5ICs2NzYsOSBAQAogfQogCiBURVNUKG1hdGgsIGZtYXgpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGZtYXgoMTIuMCwgMTAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgZm1heCgxMi4wLCBuYW4oIiIpKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWF4KG5hbigiIiksIDEyLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMi4wLCBmbWF4KDEyLjAsIDEwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMi4wLCBmbWF4KDEyLjAsIG5hbigiIikpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMi4wLCBmbWF4KG5hbigiIiksIDEyLjApKTsKIH0KIAogVEVTVChtYXRoLCBmbWF4ZikgewpAQCAtNTk4LDE1ICs2ODgsMTUgQEAKIH0KIAogVEVTVChtYXRoLCBmbWF4bCkgewotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgZm1heGwoMTIuMCwgMTAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgZm1heGwoMTIuMCwgbmFubCgiIikpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGZtYXhsKG5hbmwoIiIpLCAxMi4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTIuMEwsIGZtYXhsKDEyLjBMLCAxMC4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjBMLCBmbWF4bCgxMi4wTCwgbmFubCgiIikpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMi4wTCwgZm1heGwobmFubCgiIiksIDEyLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgZm1pbikgewotICBBU1NFUlRfRkxPQVRfRVEoMTAuMCwgZm1pbigxMi4wLCAxMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWluKDEyLjAsIG5hbigiIikpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGZtaW4obmFuKCIiKSwgMTIuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEwLjAsIGZtaW4oMTIuMCwgMTAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjAsIGZtaW4oMTIuMCwgbmFuKCIiKSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjAsIGZtaW4obmFuKCIiKSwgMTIuMCkpOwogfQogCiBURVNUKG1hdGgsIGZtaW5mKSB7CkBAIC02MTYsMTMgKzcwNiwxMyBAQAogfQogCiBURVNUKG1hdGgsIGZtaW5sKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMC4wLCBmbWlubCgxMi4wLCAxMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWlubCgxMi4wLCBuYW4oIiIpKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWlubChuYW4oIiIpLCAxMi4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMTAuMEwsIGZtaW5sKDEyLjBMLCAxMC4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjBMLCBmbWlubCgxMi4wTCwgbmFubCgiIikpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMi4wTCwgZm1pbmwobmFubCgiIiksIDEyLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgZm1hKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMC4wLCBmbWEoMi4wLCAzLjAsIDQuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEwLjAsIGZtYSgyLjAsIDMuMCwgNC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgZm1hZikgewpAQCAtNjMwLDExICs3MjAsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBmbWFsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMC4wLCBmbWFsKDIuMCwgMy4wLCA0LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMC4wTCwgZm1hbCgyLjBMLCAzLjBMLCA0LjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgaHlwb3QpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDUuMCwgaHlwb3QoMy4wLCA0LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSg1LjAsIGh5cG90KDMuMCwgNC4wKSk7CiB9CiAKIFRFU1QobWF0aCwgaHlwb3RmKSB7CkBAIC02NDIsMTEgKzczMiwxMSBAQAogfQogCiBURVNUKG1hdGgsIGh5cG90bCkgewotICBBU1NFUlRfRkxPQVRfRVEoNS4wLCBoeXBvdGwoMy4wLCA0LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSg1LjBMLCBoeXBvdGwoMy4wTCwgNC4wTCkpOwogfQogCiBURVNUKG1hdGgsIGVyZikgewotICBBU1NFUlRfRkxPQVRfRVEoMC44NDI3MDA3OCwgZXJmKDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuODQyNzAwNzkyOTQ5NzE0ODksIGVyZigxLjApKTsKIH0KIAogVEVTVChtYXRoLCBlcmZmKSB7CkBAIC02NTQsMTEgKzc0NCwxMSBAQAogfQogCiBURVNUKG1hdGgsIGVyZmwpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuODQyNzAwNzgsIGVyZmwoMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC44NDI3MDA3OTI5NDk3MTQ4OUwsIGVyZmwoMS4wTCkpOwogfQogCiBURVNUKG1hdGgsIGVyZmMpIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMTU3Mjk5MjEsIGVyZmMoMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4xNTcyOTkyMDcwNTAyODUxMywgZXJmYygxLjApKTsKIH0KIAogVEVTVChtYXRoLCBlcmZjZikgewpAQCAtNjY2LDI3ICs3NTYsMjcgQEAKIH0KIAogVEVTVChtYXRoLCBlcmZjbCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4xNTcyOTkyMSwgZXJmY2woMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4xNTcyOTkyMDcwNTAyODUxM2wsIGVyZmNsKDEuMEwpKTsKIH0KIAogVEVTVChtYXRoLCBscmludCkgewogICBmZXNldHJvdW5kKEZFX1VQV0FSRCk7IC8vIGxyaW50L2xyaW50Zi9scmludGwgb2JleSB0aGUgcm91bmRpbmcgbW9kZS4KICAgQVNTRVJUX0VRKDEyMzUsIGxyaW50KDEyMzQuMDEpKTsKICAgQVNTRVJUX0VRKDEyMzUsIGxyaW50ZigxMjM0LjAxZikpOwotICBBU1NFUlRfRVEoMTIzNSwgbHJpbnRsKDEyMzQuMDEpKTsKKyAgQVNTRVJUX0VRKDEyMzUsIGxyaW50bCgxMjM0LjAxTCkpOwogICBmZXNldHJvdW5kKEZFX1RPV0FSRFpFUk8pOyAvLyBscmludC9scmludGYvbHJpbnRsIG9iZXkgdGhlIHJvdW5kaW5nIG1vZGUuCiAgIEFTU0VSVF9FUSgxMjM0LCBscmludCgxMjM0LjAxKSk7CiAgIEFTU0VSVF9FUSgxMjM0LCBscmludGYoMTIzNC4wMWYpKTsKLSAgQVNTRVJUX0VRKDEyMzQsIGxyaW50bCgxMjM0LjAxKSk7CisgIEFTU0VSVF9FUSgxMjM0LCBscmludGwoMTIzNC4wMUwpKTsKIAogICBmZXNldHJvdW5kKEZFX1VQV0FSRCk7IC8vIGxscmludC9sbHJpbnRmL2xscmludGwgb2JleSB0aGUgcm91bmRpbmcgbW9kZS4KICAgQVNTRVJUX0VRKDEyMzVMLCBsbHJpbnQoMTIzNC4wMSkpOwogICBBU1NFUlRfRVEoMTIzNUwsIGxscmludGYoMTIzNC4wMWYpKTsKLSAgQVNTRVJUX0VRKDEyMzVMLCBsbHJpbnRsKDEyMzQuMDEpKTsKKyAgQVNTRVJUX0VRKDEyMzVMLCBsbHJpbnRsKDEyMzQuMDFMKSk7CiAgIGZlc2V0cm91bmQoRkVfVE9XQVJEWkVSTyk7IC8vIGxscmludC9sbHJpbnRmL2xscmludGwgb2JleSB0aGUgcm91bmRpbmcgbW9kZS4KICAgQVNTRVJUX0VRKDEyMzRMLCBsbHJpbnQoMTIzNC4wMSkpOwogICBBU1NFUlRfRVEoMTIzNEwsIGxscmludGYoMTIzNC4wMWYpKTsKLSAgQVNTRVJUX0VRKDEyMzRMLCBsbHJpbnRsKDEyMzQuMDEpKTsKKyAgQVNTRVJUX0VRKDEyMzRMLCBsbHJpbnRsKDEyMzQuMDFMKSk7CiB9CiAKIFRFU1QobWF0aCwgcmludCkgewpAQCAtNzA0LDE1ICs3OTQsMTUgQEAKICAgQVNTRVJUX1RSVUUoKGZldGVzdGV4Y2VwdChGRV9BTExfRVhDRVBUKSAmIEZFX0lORVhBQ1QpICE9IDApOwogCiAgIGZlY2xlYXJleGNlcHQoRkVfQUxMX0VYQ0VQVCk7IC8vIHJpbnQvcmludGYvcmludGwgZG8gc2V0IHRoZSBGRV9JTkVYQUNUIGZsYWcuCi0gIEFTU0VSVF9FUSgxMjM0LjAsIHJpbnRsKDEyMzQuMCkpOworICBBU1NFUlRfRVEoMTIzNC4wLCByaW50bCgxMjM0LjBMKSk7CiAgIEFTU0VSVF9UUlVFKChmZXRlc3RleGNlcHQoRkVfQUxMX0VYQ0VQVCkgJiBGRV9JTkVYQUNUKSA9PSAwKTsKLSAgQVNTRVJUX0VRKDEyMzUuMCwgcmludGwoMTIzNC4wMSkpOworICBBU1NFUlRfRVEoMTIzNS4wLCByaW50bCgxMjM0LjAxTCkpOwogICBBU1NFUlRfVFJVRSgoZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpICYgRkVfSU5FWEFDVCkgIT0gMCk7CiAKICAgZmVzZXRyb3VuZChGRV9UT1dBUkRaRVJPKTsgLy8gcmludC9yaW50ZiBvYmV5IHRoZSByb3VuZGluZyBtb2RlLgogICBBU1NFUlRfRVEoMTIzNC4wLCByaW50KDEyMzQuMDEpKTsKICAgQVNTRVJUX0VRKDEyMzQuMGYsIHJpbnRmKDEyMzQuMDFmKSk7Ci0gIEFTU0VSVF9FUSgxMjM0LjAsIHJpbnRsKDEyMzQuMDEpKTsKKyAgQVNTRVJUX0VRKDEyMzQuMCwgcmludGwoMTIzNC4wMUwpKTsKIH0KIAogVEVTVChtYXRoLCBuZWFyYnlpbnQpIHsKQEAgLTczMCwyOSArODIwLDI5IEBACiAgIEFTU0VSVF9UUlVFKChmZXRlc3RleGNlcHQoRkVfQUxMX0VYQ0VQVCkgJiBGRV9JTkVYQUNUKSA9PSAwKTsKIAogICBmZWNsZWFyZXhjZXB0KEZFX0FMTF9FWENFUFQpOyAvLyBuZWFyYnlpbnQvbmVhcmJ5aW50Zi9uZWFyYnlpbnRsIGRvbid0IHNldCB0aGUgRkVfSU5FWEFDVCBmbGFnLgotICBBU1NFUlRfRVEoMTIzNC4wLCBuZWFyYnlpbnRsKDEyMzQuMCkpOworICBBU1NFUlRfRVEoMTIzNC4wLCBuZWFyYnlpbnRsKDEyMzQuMEwpKTsKICAgQVNTRVJUX1RSVUUoKGZldGVzdGV4Y2VwdChGRV9BTExfRVhDRVBUKSAmIEZFX0lORVhBQ1QpID09IDApOwotICBBU1NFUlRfRVEoMTIzNS4wLCBuZWFyYnlpbnRsKDEyMzQuMDEpKTsKKyAgQVNTRVJUX0VRKDEyMzUuMCwgbmVhcmJ5aW50bCgxMjM0LjAxTCkpOwogICBBU1NFUlRfVFJVRSgoZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpICYgRkVfSU5FWEFDVCkgPT0gMCk7CiAKICAgZmVzZXRyb3VuZChGRV9UT1dBUkRaRVJPKTsgLy8gbmVhcmJ5aW50L25lYXJieWludGYvbmVhcmJ5aW50bCBvYmV5IHRoZSByb3VuZGluZyBtb2RlLgogICBBU1NFUlRfRVEoMTIzNC4wLCBuZWFyYnlpbnQoMTIzNC4wMSkpOwogICBBU1NFUlRfRVEoMTIzNC4wZiwgbmVhcmJ5aW50ZigxMjM0LjAxZikpOwotICBBU1NFUlRfRVEoMTIzNC4wLCBuZWFyYnlpbnRsKDEyMzQuMDEpKTsKKyAgQVNTRVJUX0VRKDEyMzQuMCwgbmVhcmJ5aW50bCgxMjM0LjAxTCkpOwogfQogCiBURVNUKG1hdGgsIGxyb3VuZCkgewogICBmZXNldHJvdW5kKEZFX1VQV0FSRCk7IC8vIGxyb3VuZCBpZ25vcmVzIHRoZSByb3VuZGluZyBtb2RlLgogICBBU1NFUlRfRVEoMTIzNCwgbHJvdW5kKDEyMzQuMDEpKTsKICAgQVNTRVJUX0VRKDEyMzQsIGxyb3VuZGYoMTIzNC4wMWYpKTsKLSAgQVNTRVJUX0VRKDEyMzQsIGxyb3VuZGwoMTIzNC4wMSkpOworICBBU1NFUlRfRVEoMTIzNCwgbHJvdW5kbCgxMjM0LjAxTCkpOwogfQogCiBURVNUKG1hdGgsIGxscm91bmQpIHsKICAgZmVzZXRyb3VuZChGRV9VUFdBUkQpOyAvLyBsbHJvdW5kIGlnbm9yZXMgdGhlIHJvdW5kaW5nIG1vZGUuCiAgIEFTU0VSVF9FUSgxMjM0TCwgbGxyb3VuZCgxMjM0LjAxKSk7CiAgIEFTU0VSVF9FUSgxMjM0TCwgbGxyb3VuZGYoMTIzNC4wMWYpKTsKLSAgQVNTRVJUX0VRKDEyMzRMLCBsbHJvdW5kbCgxMjM0LjAxKSk7CisgIEFTU0VSVF9FUSgxMjM0TCwgbGxyb3VuZGwoMTIzNC4wMUwpKTsKIH0KIAogVEVTVChtYXRoLCBpbG9nYikgewpAQCAtNzcyLDExICs4NjIsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBpbG9nYmwpIHsKLSAgQVNTRVJUX0VRKEZQX0lMT0dCMCwgaWxvZ2JsKDAuMCkpOworICBBU1NFUlRfRVEoRlBfSUxPR0IwLCBpbG9nYmwoMC4wTCkpOwogICBBU1NFUlRfRVEoRlBfSUxPR0JOQU4sIGlsb2dibChuYW5sKCIiKSkpOwogICBBU1NFUlRfRVEoSU5UX01BWCwgaWxvZ2JsKEhVR0VfVkFMTCkpOwotICBBU1NFUlRfRVEoMCwgaWxvZ2JsKDEuMCkpOwotICBBU1NFUlRfRVEoMywgaWxvZ2JsKDEwLjApKTsKKyAgQVNTRVJUX0VRKDBMLCBpbG9nYmwoMS4wTCkpOworICBBU1NFUlRfRVEoM0wsIGlsb2dibCgxMC4wTCkpOwogfQogCiBURVNUKG1hdGgsIGxvZ2IpIHsKQEAgLTc5NiwxOCArODg2LDE4IEBACiB9CiAKIFRFU1QobWF0aCwgbG9nYmwpIHsKLSAgQVNTRVJUX0VRKC1IVUdFX1ZBTCwgbG9nYmwoMC4wKSk7CisgIEFTU0VSVF9FUSgtSFVHRV9WQUwsIGxvZ2JsKDAuMEwpKTsKICAgQVNTRVJUX1RSVUUoaXNuYW4obG9nYmwobmFubCgiIikpKSk7CiAgIEFTU0VSVF9UUlVFKGlzaW5mKGxvZ2JsKEhVR0VfVkFMTCkpKTsKLSAgQVNTRVJUX0VRKDAuMCwgbG9nYmwoMS4wKSk7Ci0gIEFTU0VSVF9FUSgzLjAsIGxvZ2JsKDEwLjApKTsKKyAgQVNTRVJUX0VRKDAuMEwsIGxvZ2JsKDEuMEwpKTsKKyAgQVNTRVJUX0VRKDMuMEwsIGxvZ2JsKDEwLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgbG9nMXApIHsKICAgQVNTRVJUX0VRKC1IVUdFX1ZBTCwgbG9nMXAoLTEuMCkpOwogICBBU1NFUlRfVFJVRShpc25hbihsb2cxcChuYW4oIiIpKSkpOwogICBBU1NFUlRfVFJVRShpc2luZihsb2cxcChIVUdFX1ZBTCkpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgbG9nMXAoTV9FIC0gMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wLCBsb2cxcChNX0UgLSAxLjApKTsKIH0KIAogVEVTVChtYXRoLCBsb2cxcGYpIHsKQEAgLTgxOCwxNiArOTA4LDE2IEBACiB9CiAKIFRFU1QobWF0aCwgbG9nMXBsKSB7Ci0gIEFTU0VSVF9FUSgtSFVHRV9WQUxMLCBsb2cxcGwoLTEuMCkpOworICBBU1NFUlRfRVEoLUhVR0VfVkFMTCwgbG9nMXBsKC0xLjBMKSk7CiAgIEFTU0VSVF9UUlVFKGlzbmFuKGxvZzFwbChuYW5sKCIiKSkpKTsKICAgQVNTRVJUX1RSVUUoaXNpbmYobG9nMXBsKEhVR0VfVkFMTCkpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgbG9nMXBsKE1fRSAtIDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIGxvZzFwbChNX0UgLSAxLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgZmRpbSkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBmZGltKDEuMCwgMS4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGZkaW0oMi4wLCAxLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgZmRpbSgxLjAsIDIuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgZmRpbSgxLjAsIDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMCwgZmRpbSgyLjAsIDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgZmRpbSgxLjAsIDIuMCkpOwogfQogCiBURVNUKG1hdGgsIGZkaW1mKSB7CkBAIC04MzcsMTkgKzkyNywxOSBAQAogfQogCiBURVNUKG1hdGgsIGZkaW1sKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGZkaW1sKDEuMCwgMS4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGZkaW1sKDIuMCwgMS4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGZkaW1sKDEuMCwgMi4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgZmRpbWwoMS4wTCwgMS4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIGZkaW1sKDIuMEwsIDEuMEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCBmZGltbCgxLjBMLCAyLjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgcm91bmQpIHsKICAgZmVzZXRyb3VuZChGRV9UT1dBUkRaRVJPKTsgLy8gcm91bmQgaWdub3JlcyB0aGUgcm91bmRpbmcgbW9kZSBhbmQgYWx3YXlzIHJvdW5kcyBhd2F5IGZyb20gemVyby4KLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgcm91bmQoMC41KSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtMS4wLCByb3VuZCgtMC41KSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHJvdW5kKDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoLTAuMCwgcm91bmQoLTAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMCwgcm91bmQoMC41KSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLTEuMCwgcm91bmQoLTAuNSkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgcm91bmQoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLTAuMCwgcm91bmQoLTAuMCkpOwogICBBU1NFUlRfVFJVRShpc25hbihyb3VuZChuYW4oIiIpKSkpOwotICBBU1NFUlRfRkxPQVRfRVEoSFVHRV9WQUwsIHJvdW5kKEhVR0VfVkFMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoSFVHRV9WQUwsIHJvdW5kKEhVR0VfVkFMKSk7CiB9CiAKIFRFU1QobWF0aCwgcm91bmRmKSB7CkBAIC04NjQsMjIgKzk1NCwyMiBAQAogCiBURVNUKG1hdGgsIHJvdW5kbCkgewogICBmZXNldHJvdW5kKEZFX1RPV0FSRFpFUk8pOyAvLyByb3VuZGwgaWdub3JlcyB0aGUgcm91bmRpbmcgbW9kZSBhbmQgYWx3YXlzIHJvdW5kcyBhd2F5IGZyb20gemVyby4KLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgcm91bmRsKDAuNSkpOwotICBBU1NFUlRfRkxPQVRfRVEoLTEuMCwgcm91bmRsKC0wLjUpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgcm91bmRsKDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoLTAuMCwgcm91bmRsKC0wLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjBMLCByb3VuZGwoMC41TCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC0xLjBMLCByb3VuZGwoLTAuNUwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCByb3VuZGwoMC4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC0wLjBMLCByb3VuZGwoLTAuMEwpKTsKICAgQVNTRVJUX1RSVUUoaXNuYW4ocm91bmRsKG5hbmwoIiIpKSkpOwotICBBU1NFUlRfRkxPQVRfRVEoSFVHRV9WQUxMLCByb3VuZGwoSFVHRV9WQUxMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoSFVHRV9WQUxMLCByb3VuZGwoSFVHRV9WQUxMKSk7CiB9CiAKIFRFU1QobWF0aCwgdHJ1bmMpIHsKICAgZmVzZXRyb3VuZChGRV9VUFdBUkQpOyAvLyB0cnVuYyBpZ25vcmVzIHRoZSByb3VuZGluZyBtb2RlIGFuZCBhbHdheXMgcm91bmRzIHRvd2FyZCB6ZXJvLgotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCB0cnVuYygxLjUpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKC0xLjAsIHRydW5jKC0xLjUpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgdHJ1bmMoMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtMC4wLCB0cnVuYygtMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wLCB0cnVuYygxLjUpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtMS4wLCB0cnVuYygtMS41KSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCB0cnVuYygwLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtMC4wLCB0cnVuYygtMC4wKSk7CiAgIEFTU0VSVF9UUlVFKGlzbmFuKHRydW5jKG5hbigiIikpKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUShIVUdFX1ZBTCwgdHJ1bmMoSFVHRV9WQUwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShIVUdFX1ZBTCwgdHJ1bmMoSFVHRV9WQUwpKTsKIH0KIAogVEVTVChtYXRoLCB0cnVuY2YpIHsKQEAgLTg5NCwxOCArOTg0LDE4IEBACiAKIFRFU1QobWF0aCwgdHJ1bmNsKSB7CiAgIGZlc2V0cm91bmQoRkVfVVBXQVJEKTsgLy8gdHJ1bmNsIGlnbm9yZXMgdGhlIHJvdW5kaW5nIG1vZGUgYW5kIGFsd2F5cyByb3VuZHMgdG93YXJkIHplcm8uCi0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIHRydW5jbCgxLjUpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKC0xLjAsIHRydW5jbCgtMS41KSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHRydW5jbCgwLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKC0wLjAsIHRydW5jbCgtMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4wTCwgdHJ1bmNsKDEuNUwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtMS4wTCwgdHJ1bmNsKC0xLjVMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgdHJ1bmNsKDAuMEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtMC4wTCwgdHJ1bmNsKC0wLjBMKSk7CiAgIEFTU0VSVF9UUlVFKGlzbmFuKHRydW5jbChuYW4oIiIpKSkpOwotICBBU1NFUlRfRkxPQVRfRVEoSFVHRV9WQUxMLCB0cnVuY2woSFVHRV9WQUxMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoSFVHRV9WQUxMLCB0cnVuY2woSFVHRV9WQUxMKSk7CiB9CiAKIFRFU1QobWF0aCwgbmV4dGFmdGVyKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIG5leHRhZnRlcigwLjAsIDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMS40MDEyOTg1ZS00NSwgbmV4dGFmdGVyKDAuMCwgMS4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIG5leHRhZnRlcigwLjAsIC0xLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIG5leHRhZnRlcigwLjAsIDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0LCBuZXh0YWZ0ZXIoMC4wLCAxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIG5leHRhZnRlcigwLjAsIC0xLjApKTsKIH0KIAogVEVTVChtYXRoLCBuZXh0YWZ0ZXJmKSB7CkBAIC05MTUsMjAgKzEwMDUsNDAgQEAKIH0KIAogVEVTVChtYXRoLCBuZXh0YWZ0ZXJsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIG5leHRhZnRlcmwoMC4wLCAwLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuNDAxMjk4NWUtNDUsIG5leHRhZnRlcmwoMC4wLCAxLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgbmV4dGFmdGVybCgwLjAsIC0xLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjBMLCBuZXh0YWZ0ZXJsKDAuMEwsIDAuMEwpKTsKKyAgLy8gVXNlIGEgcnVudGltZSB2YWx1ZSB0byBhY2NvbW9kYXRlIHRoZSBjYXNlIHdoZW4KKyAgLy8gc2l6ZW9mKGRvdWJsZSkgPT0gc2l6ZW9mKGxvbmcgZG91YmxlKQorICBsb25nIGRvdWJsZSBzbWFsbGVzdF9wb3NpdGl2ZSA9IGxkZXhwbCgxLjBMLCBMREJMX01JTl9FWFAgLSBMREJMX01BTlRfRElHKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShzbWFsbGVzdF9wb3NpdGl2ZSwgbmV4dGFmdGVybCgwLjBMLCAxLjBMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wTCwgbmV4dGFmdGVybCgwLjBMLCAtMS4wTCkpOwogfQogCi0vLyBUT0RPOiBuZXh0dG93YXJkCi0vLyBUT0RPOiBuZXh0dG93YXJkZgotLy8gVE9ETzogbmV4dHRvd2FyZGwKK1RFU1QobWF0aCwgbmV4dHRvd2FyZCkgeworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgbmV4dHRvd2FyZCgwLjAsIDAuMEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSg0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNCwgbmV4dHRvd2FyZCgwLjAsIDEuMEwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIG5leHR0b3dhcmQoMC4wLCAtMS4wTCkpOworfQorCitURVNUKG1hdGgsIG5leHR0b3dhcmRmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBuZXh0dG93YXJkZigwLjBmLCAwLjBMKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjQwMTI5ODVlLTQ1ZiwgbmV4dHRvd2FyZGYoMC4wZiwgMS4wTCkpOworICBBU1NFUlRfRkxPQVRfRVEoMC4wZiwgbmV4dHRvd2FyZGYoMC4wZiwgLTEuMEwpKTsKK30KKworVEVTVChtYXRoLCBuZXh0dG93YXJkbCkgeworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIG5leHR0b3dhcmRsKDAuMEwsIDAuMEwpKTsKKyAgLy8gVXNlIGEgcnVudGltZSB2YWx1ZSB0byBhY2NvbW9kYXRlIHRoZSBjYXNlIHdoZW4KKyAgLy8gc2l6ZW9mKGRvdWJsZSkgPT0gc2l6ZW9mKGxvbmcgZG91YmxlKQorICBsb25nIGRvdWJsZSBzbWFsbGVzdF9wb3NpdGl2ZSA9IGxkZXhwbCgxLjBMLCBMREJMX01JTl9FWFAgLSBMREJMX01BTlRfRElHKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShzbWFsbGVzdF9wb3NpdGl2ZSwgbmV4dHRvd2FyZGwoMC4wTCwgMS4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIG5leHR0b3dhcmRsKDAuMEwsIC0xLjBMKSk7Cit9CiAKIFRFU1QobWF0aCwgY29weXNpZ24pIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgY29weXNpZ24oMC4wLCAxLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKC0wLjAsIGNvcHlzaWduKDAuMCwgLTEuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMi4wLCBjb3B5c2lnbigyLjAsIDEuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoLTIuMCwgY29weXNpZ24oMi4wLCAtMS4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wLCBjb3B5c2lnbigwLjAsIDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC0wLjAsIGNvcHlzaWduKDAuMCwgLTEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDIuMCwgY29weXNpZ24oMi4wLCAxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgtMi4wLCBjb3B5c2lnbigyLjAsIC0xLjApKTsKIH0KIAogVEVTVChtYXRoLCBjb3B5c2lnbmYpIHsKQEAgLTkzOSwxNiArMTA0OSwxNiBAQAogfQogCiBURVNUKG1hdGgsIGNvcHlzaWdubCkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wZiwgY29weXNpZ25sKDAuMCwgMS4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtMC4wZiwgY29weXNpZ25sKDAuMCwgLTEuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMi4wZiwgY29weXNpZ25sKDIuMCwgMS4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtMi4wZiwgY29weXNpZ25sKDIuMCwgLTEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIGNvcHlzaWdubCgwLjBMLCAxLjBMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLTAuMEwsIGNvcHlzaWdubCgwLjBMLCAtMS4wTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDIuMEwsIGNvcHlzaWdubCgyLjBMLCAxLjBMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLTIuMEwsIGNvcHlzaWdubCgyLjBMLCAtMS4wTCkpOwogfQogCiBURVNUKG1hdGgsIHNpZ25pZmljYW5kKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHNpZ25pZmljYW5kKDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMS4yLCBzaWduaWZpY2FuZCgxLjIpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuNTM3NSwgc2lnbmlmaWNhbmQoMTIuMykpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgc2lnbmlmaWNhbmQoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4yLCBzaWduaWZpY2FuZCgxLjIpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjUzNzUsIHNpZ25pZmljYW5kKDEyLjMpKTsKIH0KIAogVEVTVChtYXRoLCBzaWduaWZpY2FuZGYpIHsKQEAgLTk1NywxNiArMTA2NywxNCBAQAogICBBU1NFUlRfRkxPQVRfRVEoMS41Mzc1Ziwgc2lnbmlmaWNhbmRmKDEyLjNmKSk7CiB9CiAKLWV4dGVybiAiQyIgbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsKGxvbmcgZG91YmxlKTsgLy8gQlNEJ3MgPG1hdGguaD4gZG9lc24ndCBkZWNsYXJlIHRoaXMuCi0KIFRFU1QobWF0aCwgc2lnbmlmaWNhbmRsKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHNpZ25pZmljYW5kbCgwLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMiwgc2lnbmlmaWNhbmRsKDEuMikpOwotICBBU1NFUlRfRkxPQVRfRVEoMS41Mzc1LCBzaWduaWZpY2FuZGwoMTIuMykpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMEwsIHNpZ25pZmljYW5kbCgwLjBMKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4yTCwgc2lnbmlmaWNhbmRsKDEuMkwpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjUzNzVMLCBzaWduaWZpY2FuZGwoMTIuM0wpKTsKIH0KIAogVEVTVChtYXRoLCBzY2FsYikgewotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgc2NhbGIoMy4wLCAyLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMi4wLCBzY2FsYigzLjAsIDIuMCkpOwogfQogCiBURVNUKG1hdGgsIHNjYWxiZikgewpAQCAtOTc0LDcgKzEwODIsNyBAQAogfQogCiBURVNUKG1hdGgsIHNjYWxibG4pIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIHNjYWxibG4oMy4wLCAyTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjAsIHNjYWxibG4oMy4wLCAyTCkpOwogfQogCiBURVNUKG1hdGgsIHNjYWxibG5mKSB7CkBAIC05ODIsMTEgKzEwOTAsMTEgQEAKIH0KIAogVEVTVChtYXRoLCBzY2FsYmxubCkgewotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgc2NhbGJsbmwoMy4wLCAyTCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjBMLCBzY2FsYmxubCgzLjBMLCAyTCkpOwogfQogCiBURVNUKG1hdGgsIHNjYWxibikgewotICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgc2NhbGJuKDMuMCwgMikpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjAsIHNjYWxibigzLjAsIDIpKTsKIH0KIAogVEVTVChtYXRoLCBzY2FsYm5mKSB7CkBAIC05OTQsMzUgKzExMDIsMzkgQEAKIH0KIAogVEVTVChtYXRoLCBzY2FsYm5sKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBzY2FsYm5sKDMuMCwgMikpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyLjBMLCBzY2FsYm5sKDMuMEwsIDIpKTsKIH0KIAogVEVTVChtYXRoLCBnYW1tYSkgewotICBBU1NFUlRfRkxPQVRfRVEobG9nKDI0LjApLCBnYW1tYSg1LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShsb2coMjQuMCksIGdhbW1hKDUuMCkpOwogfQogCiBURVNUKG1hdGgsIGdhbW1hZikgewogICBBU1NFUlRfRkxPQVRfRVEobG9nZigyNC4wZiksIGdhbW1hZig1LjBmKSk7CiB9CiAKLSNpZiBkZWZpbmVkKF9fQklPTklDX18pCiBURVNUKG1hdGgsIGdhbW1hX3IpIHsKLSAgaW50IHNpZ247Ci0gIEFTU0VSVF9GTE9BVF9FUShsb2coMjQuMCksIGdhbW1hX3IoNS4wLCAmc2lnbikpOwotICBBU1NFUlRfRVEoMSwgc2lnbik7Ci19Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgaW50IHNpZ247CisgIEFTU0VSVF9ET1VCTEVfRVEobG9nKDI0LjApLCBnYW1tYV9yKDUuMCwgJnNpZ24pKTsKKyAgQVNTRVJUX0VRKDEsIHNpZ24pOworI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCit9CisKIFRFU1QobWF0aCwgZ2FtbWFmX3IpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIGludCBzaWduOwogICBBU1NFUlRfRkxPQVRfRVEobG9nZigyNC4wZiksIGdhbW1hZl9yKDUuMGYsICZzaWduKSk7CiAgIEFTU0VSVF9FUSgxLCBzaWduKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKIFRFU1QobWF0aCwgbGdhbW1hKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUShsb2coMjQuMCksIGxnYW1tYSg1LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShsb2coMjQuMCksIGxnYW1tYSg1LjApKTsKIH0KIAogVEVTVChtYXRoLCBsZ2FtbWFmKSB7CkBAIC0xMDMwLDEyICsxMTQyLDEyIEBACiB9CiAKIFRFU1QobWF0aCwgbGdhbW1hbCkgewotICBBU1NFUlRfRkxPQVRfRVEobG9nbCgyNC4wKSwgbGdhbW1hbCg1LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShsb2dsKDI0LjBMKSwgbGdhbW1hbCg1LjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgbGdhbW1hX3IpIHsKICAgaW50IHNpZ247Ci0gIEFTU0VSVF9GTE9BVF9FUShsb2coMjQuMCksIGxnYW1tYV9yKDUuMCwgJnNpZ24pKTsKKyAgQVNTRVJUX0RPVUJMRV9FUShsb2coMjQuMCksIGxnYW1tYV9yKDUuMCwgJnNpZ24pKTsKICAgQVNTRVJUX0VRKDEsIHNpZ24pOwogfQogCkBAIC0xMDQ2LDcgKzExNTgsNyBAQAogfQogCiBURVNUKG1hdGgsIHRnYW1tYSkgewotICBBU1NFUlRfRkxPQVRfRVEoMjQuMCwgdGdhbW1hKDUuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDI0LjAsIHRnYW1tYSg1LjApKTsKIH0KIAogVEVTVChtYXRoLCB0Z2FtbWFmKSB7CkBAIC0xMDU0LDEyICsxMTY2LDEyIEBACiB9CiAKIFRFU1QobWF0aCwgdGdhbW1hbCkgewotICBBU1NFUlRfRkxPQVRfRVEoMjQuMCwgdGdhbW1hbCg1LjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgyNC4wTCwgdGdhbW1hbCg1LjBMKSk7CiB9CiAKIFRFU1QobWF0aCwgajApIHsKLSAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgajAoMC4wKSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjc2NTE5NzY5LCBqMCgxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjAsIGowKDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuNzY1MTk3Njg2NTU3OTY2NjEsIGowKDEuMCkpOwogfQogCiBURVNUKG1hdGgsIGowZikgewpAQCAtMTA2OCw4ICsxMTgwLDggQEAKIH0KIAogVEVTVChtYXRoLCBqMSkgewotICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBqMSgwLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuNDQwMDUwNTcsIGoxKDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMCwgajEoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC40NDAwNTA1ODU3NDQ5MzM1NSwgajEoMS4wKSk7CiB9CiAKIFRFU1QobWF0aCwgajFmKSB7CkBAIC0xMDc4LDggKzExOTAsOCBAQAogfQogCiBURVNUKG1hdGgsIGpuKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGpuKDQsIDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC4wMDI0NzY2Mzg5LCBqbig0LCAxLjApKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgwLjAsIGpuKDQsIDAuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDAuMDAyNDc2NjM4OTY0MTA5OTU1Mywgam4oNCwgMS4wKSk7CiB9CiAKIFRFU1QobWF0aCwgam5mKSB7CkBAIC0xMDg4LDggKzEyMDAsOCBAQAogfQogCiBURVNUKG1hdGgsIHkwKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtSFVHRV9WQUwsIHkwKDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoMC4wODgyNTY5NjMsIHkwKDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC1IVUdFX1ZBTCwgeTAoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC4wODgyNTY5NjQyMTU2NzY5NywgeTAoMS4wKSk7CiB9CiAKIFRFU1QobWF0aCwgeTBmKSB7CkBAIC0xMDk4LDggKzEyMTAsOCBAQAogfQogCiBURVNUKG1hdGgsIHkxKSB7Ci0gIEFTU0VSVF9GTE9BVF9FUSgtSFVHRV9WQUwsIHkxKDAuMCkpOwotICBBU1NFUlRfRkxPQVRfRVEoLTAuNzgxMjEyODEsIHkxKDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC1IVUdFX1ZBTCwgeTEoMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLTAuNzgxMjEyODIxMzAwMjg4NjgsIHkxKDEuMCkpOwogfQogCiBURVNUKG1hdGgsIHkxZikgewpAQCAtMTEwOCw4ICsxMjIwLDggQEAKIH0KIAogVEVTVChtYXRoLCB5bikgewotICBBU1NFUlRfRkxPQVRfRVEoLUhVR0VfVkFMLCB5big0LCAwLjApKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKC0zMy4yNzg0MjMsIHluKDQsIDEuMCkpOworICBBU1NFUlRfRE9VQkxFX0VRKC1IVUdFX1ZBTCwgeW4oNCwgMC4wKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoLTMzLjI3ODQyMzAyODk3MjExNCwgeW4oNCwgMS4wKSk7CiB9CiAKIFRFU1QobWF0aCwgeW5mKSB7CkBAIC0xMTIwLDcgKzEyMzIsNyBAQAogVEVTVChtYXRoLCBmcmV4cCkgewogICBpbnQgZXhwOwogICBkb3VibGUgZHIgPSBmcmV4cCgxMDI0LjAsICZleHApOwotICBBU1NFUlRfRkxPQVRfRVEoMTAyNC4wLCBzY2FsYm4oZHIsIGV4cCkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEwMjQuMCwgc2NhbGJuKGRyLCBleHApKTsKIH0KIAogVEVTVChtYXRoLCBmcmV4cGYpIHsKQEAgLTExMzEsMzYgKzEyNDMsMzYgQEAKIAogVEVTVChtYXRoLCBmcmV4cGwpIHsKICAgaW50IGV4cDsKLSAgbG9uZyBkb3VibGUgbGRyID0gZnJleHBsKDEwMjQuMCwgJmV4cCk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMDI0LjAsIHNjYWxibmwobGRyLCBleHApKTsKKyAgbG9uZyBkb3VibGUgbGRyID0gZnJleHBsKDEwMjQuMEwsICZleHApOworICBBU1NFUlRfRE9VQkxFX0VRKDEwMjQuMEwsIHNjYWxibmwobGRyLCBleHApKTsKIH0KIAogVEVTVChtYXRoLCBtb2RmKSB7CiAgIGRvdWJsZSBkaTsKLSAgZG91YmxlIGRmID0gbW9kZigxMjMuNDU2LCAmZGkpOwotICBBU1NFUlRfRkxPQVRfRVEoMTIzLjAsIGRpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuNDU2LCBkZik7CisgIGRvdWJsZSBkZiA9IG1vZGYoMTIzLjc1LCAmZGkpOworICBBU1NFUlRfRE9VQkxFX0VRKDEyMy4wLCBkaSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC43NSwgZGYpOwogfQogCiBURVNUKG1hdGgsIG1vZGZmKSB7CiAgIGZsb2F0IGZpOwotICBmbG9hdCBmZiA9IG1vZGZmKDEyMy40NTZmLCAmZmkpOworICBmbG9hdCBmZiA9IG1vZGZmKDEyMy43NWYsICZmaSk7CiAgIEFTU0VSVF9GTE9BVF9FUSgxMjMuMGYsIGZpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuNDU2MDAxMjhmLCBmZik7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjc1ZiwgZmYpOwogfQogCiBURVNUKG1hdGgsIG1vZGZsKSB7CiAgIGxvbmcgZG91YmxlIGxkaTsKLSAgbG9uZyBkb3VibGUgbGRmID0gbW9kZmwoMTIzLjQ1NiwgJmxkaSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxMjMuMCwgbGRpKTsKLSAgQVNTRVJUX0ZMT0FUX0VRKDAuNDU2LCBsZGYpOworICBsb25nIGRvdWJsZSBsZGYgPSBtb2RmbCgxMjMuNzVMLCAmbGRpKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxMjMuMEwsIGxkaSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoMC43NUwsIGxkZik7CiB9CiAKIFRFU1QobWF0aCwgcmVtcXVvKSB7CiAgIGludCBxOwogICBkb3VibGUgZCA9IHJlbXF1bygxMy4wLCA0LjAsICZxKTsKICAgQVNTRVJUX0VRKDMsIHEpOwotICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBkKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjAsIGQpOwogfQogCiBURVNUKG1hdGgsIHJlbXF1b2YpIHsKQEAgLTExNzIsOSArMTI4NCw5IEBACiAKIFRFU1QobWF0aCwgcmVtcXVvbCkgewogICBpbnQgcTsKLSAgbG9uZyBkb3VibGUgbGQgPSByZW1xdW9sKDEzLjAsIDQuMCwgJnEpOwotICBBU1NFUlRfRVEoMywgcSk7Ci0gIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGxkKTsKKyAgbG9uZyBkb3VibGUgbGQgPSByZW1xdW9sKDEzLjBMLCA0LjBMLCAmcSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoM0wsIHEpOworICBBU1NFUlRfRE9VQkxFX0VRKDEuMEwsIGxkKTsKIH0KIAogLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9NjY5NwpAQCAtMTE4MywzICsxMjk1LDE4IEBACiAgIGZsb2F0IGZyID0gZnJleHBmKDE0LjFmLCAmZXhwKTsKICAgQVNTRVJUX0ZMT0FUX0VRKDE0LjFmLCBzY2FsYm5mKGZyLCBleHApKTsKIH0KKworVEVTVChtYXRoLCBleHAyX1NUUklDVF9BTElHTl9PcGVuQlNEX2J1ZykgeworICAvLyBPcGVuQlNEL3g4NidzIGxpYm0gaGFkIGEgYnVnIGhlcmUsIGJ1dCBpdCB3YXMgYWxyZWFkeSBmaXhlZCBpbiBGcmVlQlNEOgorICAvLyBodHRwOi8vc3Zud2ViLkZyZWVCU0Qub3JnL2Jhc2UvaGVhZC9saWIvbXN1bi9zcmMvbWF0aF9wcml2YXRlLmg/cmV2aXNpb249MjQwODI3JnZpZXc9bWFya3VwCisgIEFTU0VSVF9ET1VCTEVfRVEoNS4wLCBleHAyKGxvZzIoNSkpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDUuMGYsIGV4cDJmKGxvZzJmKDUpKSk7CisgIEFTU0VSVF9ET1VCTEVfRVEoNS4wTCwgZXhwMmwobG9nMmwoNSkpKTsKK30KKworVEVTVChtYXRoLCBuZXh0YWZ0ZXJsX09wZW5CU0RfYnVnKSB7CisgIC8vIE9wZW5CU0QveDg2J3MgbGlibSBoYWQgYSBidWcgaGVyZS4KKyAgQVNTRVJUX1RSVUUobmV4dGFmdGVyKDEuMCwgMC4wKSAtIDEuMCA8IDAuMCk7CisgIEFTU0VSVF9UUlVFKG5leHRhZnRlcmYoMS4wZiwgMC4wZikgLSAxLjBmIDwgMC4wZik7CisgIEFTU0VSVF9UUlVFKG5leHRhZnRlcmwoMS4wTCwgMC4wTCkgLSAxLjBMIDwgMC4wTCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9tbnRlbnRfdGVzdC5jcHAgYi90ZXN0cy9tbnRlbnRfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3Y2I1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21udGVudF90ZXN0LmNwcApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxtbnRlbnQuaD4KKworVEVTVChtbnRlbnQsIG1udGVudF9zbW9rZSkgeworICBGSUxFKiBmcCA9IHNldG1udGVudCgiL25vL21udC90YWIvb24vYW5kcm9pZCIsICJyIik7CisgIEFTU0VSVF9UUlVFKGZwID09IE5VTEwpOworCisjaWYgX19CSU9OSUNfXyAvLyBnbGliYyBkb2Vzbid0IGxldCB5b3UgY2FsbCBnZXRtbnRlbnQvZ2V0bW50ZW50X3Igd2l0aCBhIE5VTEwgRklMRSouCisgIEFTU0VSVF9UUlVFKGdldG1udGVudChmcCkgPT0gTlVMTCk7CisKKyAgc3RydWN0IG1udGVudCBtYnVmOworICBjaGFyIGNidWZbMzJdOworICBBU1NFUlRfVFJVRShnZXRtbnRlbnRfcihmcCwgJm1idWYsIGNidWYsIHNpemVvZihjYnVmKSkgPT0gTlVMTCk7CisjZW5kaWYKKworICBBU1NFUlRfRVEoMSwgZW5kbW50ZW50KGZwKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9wdGhyZWFkX3Rlc3QuY3BwIGIvdGVzdHMvcHRocmVhZF90ZXN0LmNwcAppbmRleCAzMzMxN2Q5Li40YTdjNmJkIDEwMDY0NAotLS0gYS90ZXN0cy9wdGhyZWFkX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3B0aHJlYWRfdGVzdC5jcHAKQEAgLTE5LDEwICsxOSwxNyBAQAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAorI2luY2x1ZGUgInByaXZhdGUvU2NvcGVHdWFyZC5oIgorI2luY2x1ZGUgIlNjb3BlZFNpZ25hbEhhbmRsZXIuaCIKKwogVEVTVChwdGhyZWFkLCBwdGhyZWFkX2tleV9jcmVhdGUpIHsKICAgcHRocmVhZF9rZXlfdCBrZXk7CiAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2tleV9jcmVhdGUoJmtleSwgTlVMTCkpOwpAQCAtMzEsOCArMzgsOCBAQAogICBBU1NFUlRfRVEoRUlOVkFMLCBwdGhyZWFkX2tleV9kZWxldGUoa2V5KSk7CiB9CiAKLSNpZiAhZGVmaW5lZChfX0dMSUJDX18pIC8vIGdsaWJjIHVzZXMga2V5cyBpbnRlcm5hbGx5IHRoYXQgaXRzIHN5c2NvbmYgdmFsdWUgZG9lc24ndCBhY2NvdW50IGZvci4KIFRFU1QocHRocmVhZCwgcHRocmVhZF9rZXlfY3JlYXRlX2xvdHMpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pIC8vIGdsaWJjIHVzZXMga2V5cyBpbnRlcm5hbGx5IHRoYXQgaXRzIHN5c2NvbmYgdmFsdWUgZG9lc24ndCBhY2NvdW50IGZvci4KICAgLy8gUE9TSVggc2F5cyBQVEhSRUFEX0tFWVNfTUFYIHNob3VsZCBiZSBhdCBsZWFzdCAxMjguCiAgIEFTU0VSVF9HRShQVEhSRUFEX0tFWVNfTUFYLCAxMjgpOwogCkBAIC01OSw4ICs2Niw3NCBAQAogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKICAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9rZXlfZGVsZXRlKGtleXNbaV0pKTsKICAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX2tleV9kZWxldGUpIHsKKyAgdm9pZCogZXhwZWN0ZWQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigxMjM0KTsKKyAgcHRocmVhZF9rZXlfdCBrZXk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2tleV9jcmVhdGUoJmtleSwgTlVMTCkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9zZXRzcGVjaWZpYyhrZXksIGV4cGVjdGVkKSk7CisgIEFTU0VSVF9FUShleHBlY3RlZCwgcHRocmVhZF9nZXRzcGVjaWZpYyhrZXkpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpKTsKKyAgLy8gQWZ0ZXIgZGVsZXRpb24sIHB0aHJlYWRfZ2V0c3BlY2lmaWMgcmV0dXJucyBOVUxMLgorICBBU1NFUlRfRVEoTlVMTCwgcHRocmVhZF9nZXRzcGVjaWZpYyhrZXkpKTsKKyAgLy8gQW5kIHlvdSBjYW4ndCB1c2UgcHRocmVhZF9zZXRzcGVjaWZpYyB3aXRoIHRoZSBkZWxldGVkIGtleS4KKyAgQVNTRVJUX0VRKEVJTlZBTCwgcHRocmVhZF9zZXRzcGVjaWZpYyhrZXksIGV4cGVjdGVkKSk7Cit9CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9rZXlfZm9yaykgeworICB2b2lkKiBleHBlY3RlZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDEyMzQpOworICBwdGhyZWFkX2tleV90IGtleTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfa2V5X2NyZWF0ZSgma2V5LCBOVUxMKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3NldHNwZWNpZmljKGtleSwgZXhwZWN0ZWQpKTsKKyAgQVNTRVJUX0VRKGV4cGVjdGVkLCBwdGhyZWFkX2dldHNwZWNpZmljKGtleSkpOworCisgIHBpZF90IHBpZCA9IGZvcmsoKTsKKyAgQVNTRVJUX05FKC0xLCBwaWQpIDw8IHN0cmVycm9yKGVycm5vKTsKKworICBpZiAocGlkID09IDApIHsKKyAgICAvLyBUaGUgc3Vydml2aW5nIHRocmVhZCBpbmhlcml0cyBhbGwgdGhlIGZvcmtpbmcgdGhyZWFkJ3MgVExTIHZhbHVlcy4uLgorICAgIEFTU0VSVF9FUShleHBlY3RlZCwgcHRocmVhZF9nZXRzcGVjaWZpYyhrZXkpKTsKKyAgICBfZXhpdCg5OSk7CisgIH0KKworICBpbnQgc3RhdHVzOworICBBU1NFUlRfRVEocGlkLCB3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCkpOworICBBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7CisgIEFTU0VSVF9FUSg5OSwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisKKyAgQVNTRVJUX0VRKGV4cGVjdGVkLCBwdGhyZWFkX2dldHNwZWNpZmljKGtleSkpOworfQorCitzdGF0aWMgdm9pZCogRGlydHlLZXlGbih2b2lkKiBrZXkpIHsKKyAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMoKnJlaW50ZXJwcmV0X2Nhc3Q8cHRocmVhZF9rZXlfdCo+KGtleSkpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfa2V5X2RpcnR5KSB7CisgIHB0aHJlYWRfa2V5X3Qga2V5OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9rZXlfY3JlYXRlKCZrZXksIE5VTEwpKTsKKworICBzaXplX3Qgc3RhY2tfc2l6ZSA9IDEyOCAqIDEwMjQ7CisgIHZvaWQqIHN0YWNrID0gbW1hcChOVUxMLCBzdGFja19zaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgLTEsIDApOworICBBU1NFUlRfTkUoTUFQX0ZBSUxFRCwgc3RhY2spOworICBtZW1zZXQoc3RhY2ssIDB4ZmYsIHN0YWNrX3NpemUpOworCisgIHB0aHJlYWRfYXR0cl90IGF0dHI7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cikpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX3NldHN0YWNrKCZhdHRyLCBzdGFjaywgc3RhY2tfc2l6ZSkpOworCisgIHB0aHJlYWRfdCB0OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQsICZhdHRyLCBEaXJ0eUtleUZuLCAma2V5KSk7CisKKyAgdm9pZCogcmVzdWx0OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9qb2luKHQsICZyZXN1bHQpKTsKKyAgQVNTRVJUX0VRKG51bGxwdHIsIHJlc3VsdCk7IC8vIE5vdCB+MCEKKworICBBU1NFUlRfRVEoMCwgbXVubWFwKHN0YWNrLCBzdGFja19zaXplKSk7Cit9CiAKIHN0YXRpYyB2b2lkKiBJZEZuKHZvaWQqIGFyZykgewogICByZXR1cm4gYXJnOwpAQCAtMjQ5LDMxICszMjIsMjQgQEAKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfc2lnbWFzayhTSUdfU0VUTUFTSywgJm9yaWdpbmFsX3NldCwgTlVMTCkpOwogfQogCi0jaWYgX19CSU9OSUNfXwotZXh0ZXJuICJDIiBwaWRfdCBfX2Jpb25pY19jbG9uZShpbnQgZmxhZ3MsIHZvaWQqIGNoaWxkX3N0YWNrLCBwaWRfdCogcGFyZW50X3RpZCwgdm9pZCogdGxzLCBwaWRfdCogY2hpbGRfdGlkLCBpbnQgKCpmbikodm9pZCopLCB2b2lkKiBhcmcpOwotVEVTVChwdGhyZWFkLCBfX2Jpb25pY19jbG9uZSkgewotICAvLyBDaGVjayB0aGF0IG91ciBoYW5kLXdyaXR0ZW4gY2xvbmUgYXNzZW1ibGVyIHNldHMgZXJybm8gY29ycmVjdGx5IG9uIGZhaWx1cmUuCi0gIHVpbnRwdHJfdCBmYWtlX2NoaWxkX3N0YWNrWzE2XTsKLSAgZXJybm8gPSAwOwotICBBU1NFUlRfRVEoLTEsIF9fYmlvbmljX2Nsb25lKENMT05FX1RIUkVBRCwgJmZha2VfY2hpbGRfc3RhY2tbMTZdLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSk7Ci0gIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKLX0KLSNlbmRpZgotCi0jaWYgX19CSU9OSUNfXyAvLyBOb3QgYWxsIGJ1aWxkIHNlcnZlcnMgaGF2ZSBhIG5ldyBlbm91Z2ggZ2xpYmM/IFRPRE86IHJlbW92ZSB3aGVuIHRoZXkncmUgb24gZ3ByZWNpc2UuCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfc2V0bmFtZV9ucF9fdG9vX2xvbmcpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pIC8vIE5vdCBhbGwgYnVpbGQgc2VydmVycyBoYXZlIGEgbmV3IGVub3VnaCBnbGliYz8gVE9ETzogcmVtb3ZlIHdoZW4gdGhleSdyZSBvbiBncHJlY2lzZS4KICAgQVNTRVJUX0VRKEVSQU5HRSwgcHRocmVhZF9zZXRuYW1lX25wKHB0aHJlYWRfc2VsZigpLCAidGhpcyBuYW1lIGlzIGZhciB0b28gbG9uZyBmb3IgbGludXgiKSk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLSNlbmRpZgogCi0jaWYgX19CSU9OSUNfXyAvLyBOb3QgYWxsIGJ1aWxkIHNlcnZlcnMgaGF2ZSBhIG5ldyBlbm91Z2ggZ2xpYmM/IFRPRE86IHJlbW92ZSB3aGVuIHRoZXkncmUgb24gZ3ByZWNpc2UuCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfc2V0bmFtZV9ucF9fc2VsZikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gTm90IGFsbCBidWlsZCBzZXJ2ZXJzIGhhdmUgYSBuZXcgZW5vdWdoIGdsaWJjPyBUT0RPOiByZW1vdmUgd2hlbiB0aGV5J3JlIG9uIGdwcmVjaXNlLgogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9zZXRuYW1lX25wKHB0aHJlYWRfc2VsZigpLCAic2hvcnQgMSIpKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKLSNpZiBfX0JJT05JQ19fIC8vIE5vdCBhbGwgYnVpbGQgc2VydmVycyBoYXZlIGEgbmV3IGVub3VnaCBnbGliYz8gVE9ETzogcmVtb3ZlIHdoZW4gdGhleSdyZSBvbiBncHJlY2lzZS4KIFRFU1QocHRocmVhZCwgcHRocmVhZF9zZXRuYW1lX25wX19vdGhlcikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gTm90IGFsbCBidWlsZCBzZXJ2ZXJzIGhhdmUgYSBuZXcgZW5vdWdoIGdsaWJjPyBUT0RPOiByZW1vdmUgd2hlbiB0aGV5J3JlIG9uIGdwcmVjaXNlLgogICAvLyBFbXVsYXRvciBrZXJuZWxzIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHNldHRpbmcgdGhlIG5hbWUgb2Ygb3RoZXIgdGhyZWFkcy4KICAgY2hhciogZmlsZW5hbWUgPSBOVUxMOwogICBhc3ByaW50ZigmZmlsZW5hbWUsICIvcHJvYy9zZWxmL3Rhc2svJWQvY29tbSIsIGdldHRpZCgpKTsKQEAgLTI4OCwxOCArMzU0LDIyIEBACiAgIH0gZWxzZSB7CiAgICAgZnByaW50ZihzdGRlcnIsICJza2lwcGluZyB0ZXN0OiB0aGlzIGtlcm5lbCBkb2Vzbid0IGhhdmUgL3Byb2Mvc2VsZi90YXNrL3RpZC9jb21tIGZpbGVzIVxuIik7CiAgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKLSNpZiBfX0JJT05JQ19fIC8vIE5vdCBhbGwgYnVpbGQgc2VydmVycyBoYXZlIGEgbmV3IGVub3VnaCBnbGliYz8gVE9ETzogcmVtb3ZlIHdoZW4gdGhleSdyZSBvbiBncHJlY2lzZS4KIFRFU1QocHRocmVhZCwgcHRocmVhZF9zZXRuYW1lX25wX19ub19zdWNoX3RocmVhZCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gTm90IGFsbCBidWlsZCBzZXJ2ZXJzIGhhdmUgYSBuZXcgZW5vdWdoIGdsaWJjPyBUT0RPOiByZW1vdmUgd2hlbiB0aGV5J3JlIG9uIGdwcmVjaXNlLgogICBwdGhyZWFkX3QgZGVhZF90aHJlYWQ7CiAgIE1ha2VEZWFkVGhyZWFkKGRlYWRfdGhyZWFkKTsKIAogICAvLyBDYWxsIHB0aHJlYWRfc2V0bmFtZV9ucCBhZnRlciB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLgogICBBU1NFUlRfRVEoRVNSQ0gsIHB0aHJlYWRfc2V0bmFtZV9ucChkZWFkX3RocmVhZCwgInNob3J0IDMiKSk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KLSNlbmRpZgogCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfa2lsbF9fMCkgewogICAvLyBTaWduYWwgMCBqdXN0IHRlc3RzIHRoYXQgdGhlIHRocmVhZCBleGlzdHMsIHNvIGl0J3Mgc2FmZSB0byBjYWxsIG9uIG91cnNlbHZlcy4KQEAgLTMyMCwxNCArMzkwLDggQEAKIH0KIAogVEVTVChwdGhyZWFkLCBwdGhyZWFkX2tpbGxfX2luX3NpZ25hbF9oYW5kbGVyKSB7Ci0gIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotICBzdHJ1Y3Qgc2lnYWN0aW9uIG9yaWdpbmFsX2FjdGlvbjsKLSAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgYWN0aW9uLnNhX2ZsYWdzID0gMDsKLSAgYWN0aW9uLnNhX2hhbmRsZXIgPSBwdGhyZWFkX2tpbGxfX2luX3NpZ25hbF9oYW5kbGVyX2hlbHBlcjsKLSAgQVNTRVJUX0VRKDAsIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0aW9uLCAmb3JpZ2luYWxfYWN0aW9uKSk7CisgIFNjb3BlZFNpZ25hbEhhbmRsZXIgc3NoKFNJR0FMUk0sIHB0aHJlYWRfa2lsbF9faW5fc2lnbmFsX2hhbmRsZXJfaGVscGVyKTsKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfa2lsbChwdGhyZWFkX3NlbGYoKSwgU0lHQUxSTSkpOwotICBBU1NFUlRfRVEoMCwgc2lnYWN0aW9uKFNJR0FMUk0sICZvcmlnaW5hbF9hY3Rpb24sIE5VTEwpKTsKIH0KIAogVEVTVChwdGhyZWFkLCBwdGhyZWFkX2RldGFjaF9fbm9fc3VjaF90aHJlYWQpIHsKQEAgLTMzNyw2ICs0MDEsNDQgQEAKICAgQVNTRVJUX0VRKEVTUkNILCBwdGhyZWFkX2RldGFjaChkZWFkX3RocmVhZCkpOwogfQogCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfZGV0YWNoX19sZWFrKSB7CisgIHNpemVfdCBpbml0aWFsX2J5dGVzID0gMDsKKyAgLy8gUnVuIHRoaXMgbG9vcCBtb3JlIHRoYW4gb25jZSBzaW5jZSB0aGUgZmlyc3QgbG9vcCBjYXVzZXMgc29tZSBtZW1vcnkKKyAgLy8gdG8gYmUgYWxsb2NhdGVkIHBlcm1lbmFudGx5LiBSdW4gYW4gZXh0cmEgbG9vcCB0byBoZWxwIGNhdGNoIGFueSBzdWJ0bGUKKyAgLy8gbWVtb3J5IGxlYWtzLgorICBmb3IgKHNpemVfdCBsb29wID0gMDsgbG9vcCA8IDM7IGxvb3ArKykgeworICAgIC8vIFNldCB0aGUgaW5pdGlhbCBieXRlcyBvbiB0aGUgc2Vjb25kIGxvb3Agc2luY2UgdGhlIG1lbW9yeSBpbiB1c2UKKyAgICAvLyBzaG91bGQgaGF2ZSBzdGFiaWxpemVkLgorICAgIGlmIChsb29wID09IDEpIHsKKyAgICAgIGluaXRpYWxfYnl0ZXMgPSBtYWxsaW5mbygpLnVvcmRibGtzOworICAgIH0KKworICAgIHB0aHJlYWRfYXR0cl90IGF0dHI7CisgICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKSk7CisgICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSgmYXR0ciwgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUpKTsKKworICAgIHN0ZDo6dmVjdG9yPHB0aHJlYWRfdD4gdGhyZWFkczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDMyOyArK2kpIHsKKyAgICAgIHB0aHJlYWRfdCB0OworICAgICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY3JlYXRlKCZ0LCAmYXR0ciwgSWRGbiwgTlVMTCkpOworICAgICAgdGhyZWFkcy5wdXNoX2JhY2sodCk7CisgICAgfQorCisgICAgc2xlZXAoMSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDMyOyArK2kpIHsKKyAgICAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2RldGFjaCh0aHJlYWRzW2ldKSkgPDwgaTsKKyAgICB9CisgIH0KKworICBzaXplX3QgZmluYWxfYnl0ZXMgPSBtYWxsaW5mbygpLnVvcmRibGtzOworICBpbnQgbGVha2VkX2J5dGVzID0gKGZpbmFsX2J5dGVzIC0gaW5pdGlhbF9ieXRlcyk7CisKKyAgLy8gVXNlciBjb2RlIChsaWtlIHRoaXMgdGVzdCkgZG9lc24ndCBrbm93IGhvdyBsYXJnZSBwdGhyZWFkX2ludGVybmFsX3QgaXMuCisgIC8vIFdlIGNhbiBiZSBwcmV0dHkgc3VyZSBpdCdzIG1vcmUgdGhhbiAxMjggYnl0ZXMuCisgIEFTU0VSVF9MVChsZWFrZWRfYnl0ZXMsIDMyIC8qdGhyZWFkcyovICogMTI4IC8qYnl0ZXMqLyk7Cit9CisKIFRFU1QocHRocmVhZCwgcHRocmVhZF9nZXRjcHVjbG9ja2lkX19jbG9ja19nZXR0aW1lKSB7CiAgIHB0aHJlYWRfdCB0OwogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQsIE5VTEwsIFNsZWVwRm4sIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDUpKSk7CkBAIC01MTEsNDkgKzYxMywxMDYgQEAKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUoJmF0dHJpYnV0ZXMsIDMyKjEwMjQgKyAxKSk7CiAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplKCZhdHRyaWJ1dGVzLCAmc3RhY2tfc2l6ZSkpOwogICBBU1NFUlRfRVEoMzIqMTAyNFUgKyAxLCBzdGFja19zaXplKTsKLSNpZiBfX0JJT05JQ19fCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICAvLyBCaW9uaWMgcm91bmRzIHVwLCB3aGljaCBpcyB3aGF0IFBPU0lYIGFsbG93cy4KICAgQVNTRVJUX0VRKEdldEFjdHVhbFN0YWNrU2l6ZShhdHRyaWJ1dGVzKSwgKDMyICsgNCkqMTAyNFUpOwotI2Vsc2UKKyNlbHNlIC8vIF9fQklPTklDX18KICAgLy8gZ2xpYmMgcm91bmRzIGRvd24sIGluIHZpb2xhdGlvbiBvZiBQT1NJWC4gVGhleSBkb2N1bWVudCB0aGlzIGluIHRoZWlyIEJVR1Mgc2VjdGlvbi4KICAgQVNTRVJUX0VRKEdldEFjdHVhbFN0YWNrU2l6ZShhdHRyaWJ1dGVzKSwgMzIqMTAyNFUpOwotI2VuZGlmCisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiBURVNUKHB0aHJlYWQsIHB0aHJlYWRfcndsb2NrX3Ntb2tlKSB7CiAgIHB0aHJlYWRfcndsb2NrX3QgbDsKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX2luaXQoJmwsIE5VTEwpKTsKIAorICAvLyBTaW5nbGUgcmVhZCBsb2NrCiAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja19yZGxvY2soJmwpKTsKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3VubG9jaygmbCkpOwogCisgIC8vIE11bHRpcGxlIHJlYWQgbG9jaworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfcmRsb2NrKCZsKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja19yZGxvY2soJmwpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3VubG9jaygmbCkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZsKSk7CisKKyAgLy8gV3JpdGUgbG9jawogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfd3Jsb2NrKCZsKSk7CiAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja191bmxvY2soJmwpKTsKIAorICAvLyBUcnkgd3JpdGVyIGxvY2sKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3RyeXdybG9jaygmbCkpOworICBBU1NFUlRfRVEoRUJVU1ksIHB0aHJlYWRfcndsb2NrX3RyeXdybG9jaygmbCkpOworICBBU1NFUlRfRVEoRUJVU1ksIHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jaygmbCkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZsKSk7CisKKyAgLy8gVHJ5IHJlYWRlciBsb2NrCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2soJmwpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jaygmbCkpOworICBBU1NFUlRfRVEoRUJVU1ksIHB0aHJlYWRfcndsb2NrX3RyeXdybG9jaygmbCkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZsKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja191bmxvY2soJmwpKTsKKworICAvLyBUcnkgd3JpdGVyIGxvY2sgYWZ0ZXIgdW5sb2NrCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3J3bG9ja193cmxvY2soJmwpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3VubG9jaygmbCkpOworCisjaWZkZWYgX19CSU9OSUNfXworICAvLyBFREVBRExLIGluICJyZWFkIGFmdGVyIHdyaXRlIgorICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfd3Jsb2NrKCZsKSk7CisgIEFTU0VSVF9FUShFREVBRExLLCBwdGhyZWFkX3J3bG9ja19yZGxvY2soJmwpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3VubG9jaygmbCkpOworCisgIC8vIEVERUFETEsgaW4gIndyaXRlIGFmdGVyIHdyaXRlIgorICBBU1NFUlRfRVEoMCwgcHRocmVhZF9yd2xvY2tfd3Jsb2NrKCZsKSk7CisgIEFTU0VSVF9FUShFREVBRExLLCBwdGhyZWFkX3J3bG9ja193cmxvY2soJmwpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX3VubG9jaygmbCkpOworI2VuZGlmCisKICAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3koJmwpKTsKIH0KIAotc3RhdGljIGludCBnT25jZUZuQ2FsbENvdW50ID0gMDsKK3N0YXRpYyBpbnQgZ19vbmNlX2ZuX2NhbGxfY291bnQgPSAwOwogc3RhdGljIHZvaWQgT25jZUZuKCkgewotICArK2dPbmNlRm5DYWxsQ291bnQ7CisgICsrZ19vbmNlX2ZuX2NhbGxfY291bnQ7CiB9CiAKIFRFU1QocHRocmVhZCwgcHRocmVhZF9vbmNlX3Ntb2tlKSB7CiAgIHB0aHJlYWRfb25jZV90IG9uY2VfY29udHJvbCA9IFBUSFJFQURfT05DRV9JTklUOwogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9vbmNlKCZvbmNlX2NvbnRyb2wsIE9uY2VGbikpOwogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9vbmNlKCZvbmNlX2NvbnRyb2wsIE9uY2VGbikpOwotICBBU1NFUlRfRVEoMSwgZ09uY2VGbkNhbGxDb3VudCk7CisgIEFTU0VSVF9FUSgxLCBnX29uY2VfZm5fY2FsbF9jb3VudCk7CiB9CiAKLXN0YXRpYyBpbnQgZ0F0Rm9ya1ByZXBhcmVDYWxscyA9IDA7Ci1zdGF0aWMgdm9pZCBBdEZvcmtQcmVwYXJlMSgpIHsgZ0F0Rm9ya1ByZXBhcmVDYWxscyA9IChnQXRGb3JrUHJlcGFyZUNhbGxzIDw8IDQpIHwgMTsgfQotc3RhdGljIHZvaWQgQXRGb3JrUHJlcGFyZTIoKSB7IGdBdEZvcmtQcmVwYXJlQ2FsbHMgPSAoZ0F0Rm9ya1ByZXBhcmVDYWxscyA8PCA0KSB8IDI7IH0KLXN0YXRpYyBpbnQgZ0F0Rm9ya1BhcmVudENhbGxzID0gMDsKLXN0YXRpYyB2b2lkIEF0Rm9ya1BhcmVudDEoKSB7IGdBdEZvcmtQYXJlbnRDYWxscyA9IChnQXRGb3JrUGFyZW50Q2FsbHMgPDwgNCkgfCAxOyB9Ci1zdGF0aWMgdm9pZCBBdEZvcmtQYXJlbnQyKCkgeyBnQXRGb3JrUGFyZW50Q2FsbHMgPSAoZ0F0Rm9ya1BhcmVudENhbGxzIDw8IDQpIHwgMjsgfQotc3RhdGljIGludCBnQXRGb3JrQ2hpbGRDYWxscyA9IDA7Ci1zdGF0aWMgdm9pZCBBdEZvcmtDaGlsZDEoKSB7IGdBdEZvcmtDaGlsZENhbGxzID0gKGdBdEZvcmtDaGlsZENhbGxzIDw8IDQpIHwgMTsgfQotc3RhdGljIHZvaWQgQXRGb3JrQ2hpbGQyKCkgeyBnQXRGb3JrQ2hpbGRDYWxscyA9IChnQXRGb3JrQ2hpbGRDYWxscyA8PCA0KSB8IDI7IH0KK3N0YXRpYyBzdGQ6OnN0cmluZyBwdGhyZWFkX29uY2VfMTkzNDEyMl9yZXN1bHQgPSAiIjsKKworc3RhdGljIHZvaWQgUm91dGluZTIoKSB7CisgIHB0aHJlYWRfb25jZV8xOTM0MTIyX3Jlc3VsdCArPSAiMiI7Cit9CisKK3N0YXRpYyB2b2lkIFJvdXRpbmUxKCkgeworICBwdGhyZWFkX29uY2VfdCBvbmNlX2NvbnRyb2xfMiA9IFBUSFJFQURfT05DRV9JTklUOworICBwdGhyZWFkX29uY2VfMTkzNDEyMl9yZXN1bHQgKz0gIjEiOworICBwdGhyZWFkX29uY2UoJm9uY2VfY29udHJvbF8yLCAmUm91dGluZTIpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfb25jZV8xOTM0MTIyKSB7CisgIC8vIFZlcnkgb2xkIHZlcnNpb25zIG9mIEFuZHJvaWQgY291bGRuJ3QgY2FsbCBwdGhyZWFkX29uY2UgZnJvbSBhCisgIC8vIHB0aHJlYWRfb25jZSBpbml0IHJvdXRpbmUuIGh0dHA6Ly9iLzE5MzQxMjIuCisgIHB0aHJlYWRfb25jZV90IG9uY2VfY29udHJvbF8xID0gUFRIUkVBRF9PTkNFX0lOSVQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX29uY2UoJm9uY2VfY29udHJvbF8xLCAmUm91dGluZTEpKTsKKyAgQVNTRVJUX0VRKCIxMiIsIHB0aHJlYWRfb25jZV8xOTM0MTIyX3Jlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgZ19hdGZvcmtfcHJlcGFyZV9jYWxscyA9IDA7CitzdGF0aWMgdm9pZCBBdEZvcmtQcmVwYXJlMSgpIHsgZ19hdGZvcmtfcHJlcGFyZV9jYWxscyA9IChnX2F0Zm9ya19wcmVwYXJlX2NhbGxzIDw8IDQpIHwgMTsgfQorc3RhdGljIHZvaWQgQXRGb3JrUHJlcGFyZTIoKSB7IGdfYXRmb3JrX3ByZXBhcmVfY2FsbHMgPSAoZ19hdGZvcmtfcHJlcGFyZV9jYWxscyA8PCA0KSB8IDI7IH0KK3N0YXRpYyBpbnQgZ19hdGZvcmtfcGFyZW50X2NhbGxzID0gMDsKK3N0YXRpYyB2b2lkIEF0Rm9ya1BhcmVudDEoKSB7IGdfYXRmb3JrX3BhcmVudF9jYWxscyA9IChnX2F0Zm9ya19wYXJlbnRfY2FsbHMgPDwgNCkgfCAxOyB9CitzdGF0aWMgdm9pZCBBdEZvcmtQYXJlbnQyKCkgeyBnX2F0Zm9ya19wYXJlbnRfY2FsbHMgPSAoZ19hdGZvcmtfcGFyZW50X2NhbGxzIDw8IDQpIHwgMjsgfQorc3RhdGljIGludCBnX2F0Zm9ya19jaGlsZF9jYWxscyA9IDA7CitzdGF0aWMgdm9pZCBBdEZvcmtDaGlsZDEoKSB7IGdfYXRmb3JrX2NoaWxkX2NhbGxzID0gKGdfYXRmb3JrX2NoaWxkX2NhbGxzIDw8IDQpIHwgMTsgfQorc3RhdGljIHZvaWQgQXRGb3JrQ2hpbGQyKCkgeyBnX2F0Zm9ya19jaGlsZF9jYWxscyA9IChnX2F0Zm9ya19jaGlsZF9jYWxscyA8PCA0KSB8IDI7IH0KIAogVEVTVChwdGhyZWFkLCBwdGhyZWFkX2F0Zm9yaykgewogICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdGZvcmsoQXRGb3JrUHJlcGFyZTEsIEF0Rm9ya1BhcmVudDEsIEF0Rm9ya0NoaWxkMSkpOwpAQCAtNTY0LDEzICs3MjMsMTMgQEAKIAogICAvLyBDaGlsZCBhbmQgcGFyZW50IGNhbGxzIGFyZSBtYWRlIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgcmVnaXN0ZXJlZC4KICAgaWYgKHBpZCA9PSAwKSB7Ci0gICAgQVNTRVJUX0VRKDB4MTIsIGdBdEZvcmtDaGlsZENhbGxzKTsKKyAgICBBU1NFUlRfRVEoMHgxMiwgZ19hdGZvcmtfY2hpbGRfY2FsbHMpOwogICAgIF9leGl0KDApOwogICB9Ci0gIEFTU0VSVF9FUSgweDEyLCBnQXRGb3JrUGFyZW50Q2FsbHMpOworICBBU1NFUlRfRVEoMHgxMiwgZ19hdGZvcmtfcGFyZW50X2NhbGxzKTsKIAogICAvLyBQcmVwYXJlIGNhbGxzIGFyZSBtYWRlIGluIHRoZSByZXZlcnNlIG9yZGVyLgotICBBU1NFUlRfRVEoMHgyMSwgZ0F0Rm9ya1ByZXBhcmVDYWxscyk7CisgIEFTU0VSVF9FUSgweDIxLCBnX2F0Zm9ya19wcmVwYXJlX2NhbGxzKTsKIH0KIAogVEVTVChwdGhyZWFkLCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUpIHsKQEAgLTU4MSwzICs3NDAsMTcwIEBACiAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUoJmF0dHIsICZzY29wZSkpOwogICBBU1NFUlRfRVEoUFRIUkVBRF9TQ09QRV9TWVNURU0sIHNjb3BlKTsKIH0KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX2NvbmRhdHRyX2luaXQpIHsKKyAgcHRocmVhZF9jb25kYXR0cl90IGF0dHI7CisgIHB0aHJlYWRfY29uZGF0dHJfaW5pdCgmYXR0cik7CisKKyAgY2xvY2tpZF90IGNsb2NrOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jb25kYXR0cl9nZXRjbG9jaygmYXR0ciwgJmNsb2NrKSk7CisgIEFTU0VSVF9FUShDTE9DS19SRUFMVElNRSwgY2xvY2spOworCisgIGludCBwc2hhcmVkOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkKCZhdHRyLCAmcHNoYXJlZCkpOworICBBU1NFUlRfRVEoUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsIHBzaGFyZWQpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfY29uZGF0dHJfc2V0Y2xvY2spIHsKKyAgcHRocmVhZF9jb25kYXR0cl90IGF0dHI7CisgIHB0aHJlYWRfY29uZGF0dHJfaW5pdCgmYXR0cik7CisKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY29uZGF0dHJfc2V0Y2xvY2soJmF0dHIsIENMT0NLX1JFQUxUSU1FKSk7CisgIGNsb2NraWRfdCBjbG9jazsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY29uZGF0dHJfZ2V0Y2xvY2soJmF0dHIsICZjbG9jaykpOworICBBU1NFUlRfRVEoQ0xPQ0tfUkVBTFRJTUUsIGNsb2NrKTsKKworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jb25kYXR0cl9zZXRjbG9jaygmYXR0ciwgQ0xPQ0tfTU9OT1RPTklDKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NvbmRhdHRyX2dldGNsb2NrKCZhdHRyLCAmY2xvY2spKTsKKyAgQVNTRVJUX0VRKENMT0NLX01PTk9UT05JQywgY2xvY2spOworCisgIEFTU0VSVF9FUShFSU5WQUwsIHB0aHJlYWRfY29uZGF0dHJfc2V0Y2xvY2soJmF0dHIsIENMT0NLX1BST0NFU1NfQ1BVVElNRV9JRCkpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfY29uZF9icm9hZGNhc3RfX3ByZXNlcnZlc19jb25kYXR0cl9mbGFncykgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gVGhpcyB0ZXN0cyBhIGJpb25pYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisgIHB0aHJlYWRfY29uZGF0dHJfdCBhdHRyOworICBwdGhyZWFkX2NvbmRhdHRyX2luaXQoJmF0dHIpOworCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NvbmRhdHRyX3NldGNsb2NrKCZhdHRyLCBDTE9DS19NT05PVE9OSUMpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCgmYXR0ciwgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRCkpOworCisgIHB0aHJlYWRfY29uZF90IGNvbmRfdmFyOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jb25kX2luaXQoJmNvbmRfdmFyLCAmYXR0cikpOworCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NvbmRfc2lnbmFsKCZjb25kX3ZhcikpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmY29uZF92YXIpKTsKKworICBhdHRyID0gc3RhdGljX2Nhc3Q8cHRocmVhZF9jb25kYXR0cl90Pihjb25kX3Zhci52YWx1ZSk7CisgIGNsb2NraWRfdCBjbG9jazsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY29uZGF0dHJfZ2V0Y2xvY2soJmF0dHIsICZjbG9jaykpOworICBBU1NFUlRfRVEoQ0xPQ0tfTU9OT1RPTklDLCBjbG9jayk7CisgIGludCBwc2hhcmVkOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkKCZhdHRyLCAmcHNoYXJlZCkpOworICBBU1NFUlRfRVEoUFRIUkVBRF9QUk9DRVNTX1NIQVJFRCwgcHNoYXJlZCk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX211dGV4X3RpbWVkbG9jaykgeworICBwdGhyZWFkX211dGV4X3QgbTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfaW5pdCgmbSwgTlVMTCkpOworCisgIC8vIElmIHRoZSBtdXRleCBpcyBhbHJlYWR5IGxvY2tlZCwgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgc2hvdWxkIHRpbWUgb3V0LgorICBBU1NFUlRfRVEoMCwgcHRocmVhZF9tdXRleF9sb2NrKCZtKSk7CisKKyAgdGltZXNwZWMgdHM7CisgIEFTU0VSVF9FUSgwLCBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpKTsKKyAgdHMudHZfbnNlYyArPSAxOworICBBU1NFUlRfRVEoRVRJTUVET1VULCBwdGhyZWFkX211dGV4X3RpbWVkbG9jaygmbSwgJnRzKSk7CisKKyAgLy8gSWYgdGhlIG11dGV4IGlzIHVubG9ja2VkLCBwdGhyZWFkX211dGV4X3RpbWVkbG9jayBzaG91bGQgc3VjY2VlZC4KKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtKSk7CisKKyAgQVNTRVJUX0VRKDAsIGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cykpOworICB0cy50dl9uc2VjICs9IDE7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4X3RpbWVkbG9jaygmbSwgJnRzKSk7CisKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJm0pKTsKK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tfX21haW5fdGhyZWFkKSB7CisgIC8vIFRoaXMgdGVzdCBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIHRoZSBtYWluIHRocmVhZCwgc28gbWFrZSBzdXJlIHdlJ3JlIHJ1bm5pbmcgb24gaXQhCisgIEFTU0VSVF9FUShnZXRwaWQoKSwgc3lzY2FsbChfX05SX2dldHRpZCkpOworCisgIC8vIEdldCB0aGUgbWFpbiB0aHJlYWQncyBhdHRyaWJ1dGVzLgorICBwdGhyZWFkX2F0dHJfdCBhdHRyaWJ1dGVzOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9nZXRhdHRyX25wKHB0aHJlYWRfc2VsZigpLCAmYXR0cmlidXRlcykpOworCisgIC8vIENoZWNrIHRoYXQgd2UgY29ycmVjdGx5IHJlcG9ydCB0aGF0IHRoZSBtYWluIHRocmVhZCBoYXMgbm8gZ3VhcmQgcGFnZS4KKyAgc2l6ZV90IGd1YXJkX3NpemU7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplKCZhdHRyaWJ1dGVzLCAmZ3VhcmRfc2l6ZSkpOworICBBU1NFUlRfRVEoMFUsIGd1YXJkX3NpemUpOyAvLyBUaGUgbWFpbiB0aHJlYWQgaGFzIG5vIGd1YXJkIHBhZ2UuCisKKyAgLy8gR2V0IHRoZSBzdGFjayBiYXNlIGFuZCB0aGUgc3RhY2sgc2l6ZSAoYm90aCB3YXlzKS4KKyAgdm9pZCogc3RhY2tfYmFzZTsKKyAgc2l6ZV90IHN0YWNrX3NpemU7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2soJmF0dHJpYnV0ZXMsICZzdGFja19iYXNlLCAmc3RhY2tfc2l6ZSkpOworICBzaXplX3Qgc3RhY2tfc2l6ZTI7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplKCZhdHRyaWJ1dGVzLCAmc3RhY2tfc2l6ZTIpKTsKKworICAvLyBUaGUgdHdvIG1ldGhvZHMgb2YgYXNraW5nIGZvciB0aGUgc3RhY2sgc2l6ZSBzaG91bGQgYWdyZWUuCisgIEVYUEVDVF9FUShzdGFja19zaXplLCBzdGFja19zaXplMik7CisKKyAgLy8gV2hhdCBkb2VzIC9wcm9jL3NlbGYvbWFwcycgW3N0YWNrXSBsaW5lIHNheT8KKyAgdm9pZCogbWFwc19zdGFja19oaSA9IE5VTEw7CisgIEZJTEUqIGZwID0gZm9wZW4oIi9wcm9jL3NlbGYvbWFwcyIsICJyIik7CisgIEFTU0VSVF9UUlVFKGZwICE9IE5VTEwpOworICBjaGFyIGxpbmVbQlVGU0laXTsKKyAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApICE9IE5VTEwpIHsKKyAgICB1aW50cHRyX3QgbG8sIGhpOworICAgIGNoYXIgbmFtZVsxMF07CisgICAgc3NjYW5mKGxpbmUsICIlIiBQUkl4UFRSICItJSIgUFJJeFBUUiAiICUqNHMgJSp4ICUqeDolKnggJSpkICUxMHMiLCAmbG8sICZoaSwgbmFtZSk7CisgICAgaWYgKHN0cmNtcChuYW1lLCAiW3N0YWNrXSIpID09IDApIHsKKyAgICAgIG1hcHNfc3RhY2tfaGkgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihoaSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZmNsb3NlKGZwKTsKKworICAvLyBUaGUgc3RhY2sgc2l6ZSBzaG91bGQgY29ycmVzcG9uZCB0byBSTElNSVRfU1RBQ0suCisgIHJsaW1pdCBybDsKKyAgQVNTRVJUX0VRKDAsIGdldHJsaW1pdChSTElNSVRfU1RBQ0ssICZybCkpOworICB1aW50NjRfdCBvcmlnaW5hbF9ybGltX2N1ciA9IHJsLnJsaW1fY3VyOworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgaWYgKHJsLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkpIHsKKyAgICBybC5ybGltX2N1ciA9IDggKiAxMDI0ICogMTAyNDsgLy8gQmlvbmljIHJlcG9ydHMgdW5saW1pdGVkIHN0YWNrcyBhcyA4TWlCLgorICB9CisjZW5kaWYKKyAgRVhQRUNUX0VRKHJsLnJsaW1fY3VyLCBzdGFja19zaXplKTsKKworICBhdXRvIGd1YXJkID0gY3JlYXRlX3Njb3BlX2d1YXJkKFsmcmwsIG9yaWdpbmFsX3JsaW1fY3VyXSgpIHsKKyAgICBybC5ybGltX2N1ciA9IG9yaWdpbmFsX3JsaW1fY3VyOworICAgIEFTU0VSVF9FUSgwLCBzZXRybGltaXQoUkxJTUlUX1NUQUNLLCAmcmwpKTsKKyAgfSk7CisKKyAgLy8gVGhlIGhpZ2ggYWRkcmVzcyBvZiB0aGUgL3Byb2Mvc2VsZi9tYXBzIFtzdGFja10gcmVnaW9uIHNob3VsZCBlcXVhbCBzdGFja19iYXNlICsgc3RhY2tfc2l6ZS4KKyAgLy8gUmVtZW1iZXIgdGhhdCB0aGUgc3RhY2sgZ3Jvd3MgZG93biAoYW5kIGlzIG1hcHBlZCBpbiBvbiBkZW1hbmQpLCBzbyB0aGUgbG93IGFkZHJlc3Mgb2YgdGhlCisgIC8vIHJlZ2lvbiBpc24ndCB2ZXJ5IGludGVyZXN0aW5nLgorICBFWFBFQ1RfRVEobWFwc19zdGFja19oaSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc3RhY2tfYmFzZSkgKyBzdGFja19zaXplKTsKKworICAvLworICAvLyBXaGF0IGlmIFJMSU1JVF9TVEFDSyBpcyBzbWFsbGVyIHRoYW4gdGhlIHN0YWNrJ3MgY3VycmVudCBleHRlbnQ/CisgIC8vCisgIHJsLnJsaW1fY3VyID0gcmwucmxpbV9tYXggPSAxMDI0OyAvLyAxS2lCLiBXZSBrbm93IHRoZSBzdGFjayBtdXN0IGJlIGF0IGxlYXN0IGEgcGFnZSBhbHJlYWR5LgorICBybC5ybGltX21heCA9IFJMSU1fSU5GSU5JVFk7CisgIEFTU0VSVF9FUSgwLCBzZXRybGltaXQoUkxJTUlUX1NUQUNLLCAmcmwpKTsKKworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9nZXRhdHRyX25wKHB0aHJlYWRfc2VsZigpLCAmYXR0cmlidXRlcykpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX2dldHN0YWNrKCZhdHRyaWJ1dGVzLCAmc3RhY2tfYmFzZSwgJnN0YWNrX3NpemUpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUoJmF0dHJpYnV0ZXMsICZzdGFja19zaXplMikpOworCisgIEVYUEVDVF9FUShzdGFja19zaXplLCBzdGFja19zaXplMik7CisgIEFTU0VSVF9FUSgxMDI0VSwgc3RhY2tfc2l6ZSk7CisKKyAgLy8KKyAgLy8gV2hhdCBpZiBSTElNSVRfU1RBQ0sgaXNuJ3QgYSB3aG9sZSBudW1iZXIgb2YgcGFnZXM/CisgIC8vCisgIHJsLnJsaW1fY3VyID0gcmwucmxpbV9tYXggPSA2NjY2OyAvLyBOb3QgYSB3aG9sZSBudW1iZXIgb2YgcGFnZXMuCisgIHJsLnJsaW1fbWF4ID0gUkxJTV9JTkZJTklUWTsKKyAgQVNTRVJUX0VRKDAsIHNldHJsaW1pdChSTElNSVRfU1RBQ0ssICZybCkpOworCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2dldGF0dHJfbnAocHRocmVhZF9zZWxmKCksICZhdHRyaWJ1dGVzKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2soJmF0dHJpYnV0ZXMsICZzdGFja19iYXNlLCAmc3RhY2tfc2l6ZSkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSgmYXR0cmlidXRlcywgJnN0YWNrX3NpemUyKSk7CisKKyAgRVhQRUNUX0VRKHN0YWNrX3NpemUsIHN0YWNrX3NpemUyKTsKKyAgQVNTRVJUX0VRKDY2NjZVLCBzdGFja19zaXplKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3JlZ2V4X3Rlc3QuY3BwIGIvdGVzdHMvcmVnZXhfdGVzdC5jcHAKaW5kZXggNjU5ZDFkYi4uZDAyNjIyMSAxMDA2NDQKLS0tIGEvdGVzdHMvcmVnZXhfdGVzdC5jcHAKKysrIGIvdGVzdHMvcmVnZXhfdGVzdC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogICBjaGFyIGJ1Zls4MF07CiAgIHJlZ2Vycm9yKFJFR19OT01BVENILCAmcmUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotI2lmIF9fQklPTklDX18KKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIEFTU0VSVF9TVFJFUSgicmVnZXhlYygpIGZhaWxlZCB0byBtYXRjaCIsIGJ1Zik7CiAjZWxzZQogICBBU1NFUlRfU1RSRVEoIk5vIG1hdGNoIiwgYnVmKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3NjaGVkX3Rlc3QuY3BwIGIvdGVzdHMvc2NoZWRfdGVzdC5jcHAKaW5kZXggNDlmMTY0Mi4uY2FmNGM2NSAxMDA2NDQKLS0tIGEvdGVzdHMvc2NoZWRfdGVzdC5jcHAKKysrIGIvdGVzdHMvc2NoZWRfdGVzdC5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogCi0jaWZkZWYgX19CSU9OSUNfXworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKIHN0YXRpYyBpbnQgY2hpbGRfZm4odm9pZCogaV9wdHIpIHsKICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oaV9wdHIpID0gNDI7CiAgIHJldHVybiAxMjM7CkBAIC01MCwzICs1MCwyMTUgQEAKICAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CiB9CiAjZW5kaWYKKworVEVTVChzY2hlZCwgY2xvbmVfZXJybm8pIHsKKyAgLy8gQ2hlY2sgdGhhdCBvdXIgaGFuZC13cml0dGVuIGNsb25lIGFzc2VtYmxlciBzZXRzIGVycm5vIGNvcnJlY3RseSBvbiBmYWlsdXJlLgorICB1aW50cHRyX3QgZmFrZV9jaGlsZF9zdGFja1sxNl07CisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKC0xLCBjbG9uZShOVUxMLCAmZmFrZV9jaGlsZF9zdGFja1sxNl0sIENMT05FX1RIUkVBRCwgTlVMTCkpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7Cit9CisKK1RFU1Qoc2NoZWQsIGNwdV9zZXQpIHsKKyAgY3B1X3NldF90IHNldDsKKworICBDUFVfWkVSTygmc2V0KTsKKyAgQ1BVX1NFVCgwLCAmc2V0KTsKKyAgQ1BVX1NFVCgxNywgJnNldCk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgQ1BVX1NFVFNJWkU7IGkrKykgeworICAgIEFTU0VSVF9FUShpID09IDAgfHwgaSA9PSAxNywgQ1BVX0lTU0VUKGksICZzZXQpKTsKKyAgfQorCisgIC8vIFdlIHNob3VsZCBmYWlsIHNpbGVudGx5IGlmIHdlIHRyeSB0byBzZXQvdGVzdCBvdXRzaWRlIHRoZSByYW5nZS4KKyAgQ1BVX1NFVChDUFVfU0VUU0laRSwgJnNldCk7CisgIEFTU0VSVF9GQUxTRShDUFVfSVNTRVQoQ1BVX1NFVFNJWkUsICZzZXQpKTsKK30KKworVEVTVChzY2hlZCwgY3B1X2NvdW50KSB7CisgIGNwdV9zZXRfdCBzZXQ7CisKKyAgQ1BVX1pFUk8oJnNldCk7CisgIEFTU0VSVF9FUSgwLCBDUFVfQ09VTlQoJnNldCkpOworICBDUFVfU0VUKDIsICZzZXQpOworICBDUFVfU0VUKDEwLCAmc2V0KTsKKyAgQVNTRVJUX0VRKDIsIENQVV9DT1VOVCgmc2V0KSk7CisgIENQVV9DTFIoMTAsICZzZXQpOworICBBU1NFUlRfRVEoMSwgQ1BVX0NPVU5UKCZzZXQpKTsKK30KKworVEVTVChzY2hlZCwgY3B1X3plcm8pIHsKKyAgY3B1X3NldF90IHNldDsKKworICBDUFVfWkVSTygmc2V0KTsKKyAgQVNTRVJUX0VRKDAsIENQVV9DT1VOVCgmc2V0KSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgQ1BVX1NFVFNJWkU7IGkrKykgeworICAgIEFTU0VSVF9GQUxTRShDUFVfSVNTRVQoaSwgJnNldCkpOworICB9Cit9CisKK1RFU1Qoc2NoZWQsIGNwdV9jbHIpIHsKKyAgY3B1X3NldF90IHNldDsKKworICBDUFVfWkVSTygmc2V0KTsKKyAgQ1BVX1NFVCgwLCAmc2V0KTsKKyAgQ1BVX1NFVCgxLCAmc2V0KTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBDUFVfU0VUU0laRTsgaSsrKSB7CisgICAgQVNTRVJUX0VRKGkgPT0gMCB8fCBpID09IDEsIENQVV9JU1NFVChpLCAmc2V0KSk7CisgIH0KKyAgQ1BVX0NMUigxLCAmc2V0KTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBDUFVfU0VUU0laRTsgaSsrKSB7CisgICAgQVNTRVJUX0VRKGkgPT0gMCwgQ1BVX0lTU0VUKGksICZzZXQpKTsKKyAgfQorCisgIC8vIFdlIHNob3VsZCBmYWlsIHNpbGVudGx5IGlmIHdlIHRyeSB0byBjbGVhci90ZXN0IG91dHNpZGUgdGhlIHJhbmdlLgorICBDUFVfQ0xSKENQVV9TRVRTSVpFLCAmc2V0KTsKKyAgQVNTRVJUX0ZBTFNFKENQVV9JU1NFVChDUFVfU0VUU0laRSwgJnNldCkpOworfQorCitURVNUKHNjaGVkLCBjcHVfZXF1YWwpIHsKKyAgY3B1X3NldF90IHNldDE7CisgIGNwdV9zZXRfdCBzZXQyOworCisgIENQVV9aRVJPKCZzZXQxKTsKKyAgQ1BVX1pFUk8oJnNldDIpOworICBDUFVfU0VUKDEsICZzZXQxKTsKKyAgQVNTRVJUX0ZBTFNFKENQVV9FUVVBTCgmc2V0MSwgJnNldDIpKTsKKyAgQ1BVX1NFVCgxLCAmc2V0Mik7CisgIEFTU0VSVF9UUlVFKENQVV9FUVVBTCgmc2V0MSwgJnNldDIpKTsKK30KKworVEVTVChzY2hlZCwgY3B1X29wKSB7CisgIGNwdV9zZXRfdCBzZXQxOworICBjcHVfc2V0X3Qgc2V0MjsKKyAgY3B1X3NldF90IHNldDM7CisKKyAgQ1BVX1pFUk8oJnNldDEpOworICBDUFVfWkVSTygmc2V0Mik7CisgIENQVV9aRVJPKCZzZXQzKTsKKyAgQ1BVX1NFVCgwLCAmc2V0MSk7CisgIENQVV9TRVQoMCwgJnNldDIpOworICBDUFVfU0VUKDEsICZzZXQyKTsKKworICBDUFVfQU5EKCZzZXQzLCAmc2V0MSwgJnNldDIpOworICBmb3IgKGludCBpID0gMDsgaSA8IENQVV9TRVRTSVpFOyBpKyspIHsKKyAgICBBU1NFUlRfRVEoaSA9PSAwLCBDUFVfSVNTRVQoaSwgJnNldDMpKTsKKyAgfQorCisgIENQVV9YT1IoJnNldDMsICZzZXQxLCAmc2V0Mik7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgQ1BVX1NFVFNJWkU7IGkrKykgeworICAgIEFTU0VSVF9FUShpID09IDEsIENQVV9JU1NFVChpLCAmc2V0MykpOworICB9CisKKyAgQ1BVX09SKCZzZXQzLCAmc2V0MSwgJnNldDIpOworICBmb3IgKGludCBpID0gMDsgaSA8IENQVV9TRVRTSVpFOyBpKyspIHsKKyAgICBBU1NFUlRfRVEoaSA9PSAwIHx8IGkgPT0gMSwgQ1BVX0lTU0VUKGksICZzZXQzKSk7CisgIH0KK30KKworCitURVNUKHNjaGVkLCBjcHVfYWxsb2Nfc21hbGwpIHsKKyAgY3B1X3NldF90KiBzZXQgPSBDUFVfQUxMT0MoMTcpOworICBzaXplX3Qgc2l6ZSA9IENQVV9BTExPQ19TSVpFKDE3KTsKKworICBDUFVfWkVST19TKHNpemUsIHNldCk7CisgIEFTU0VSVF9FUSgwLCBDUFVfQ09VTlRfUyhzaXplLCBzZXQpKTsKKyAgQ1BVX1NFVF9TKDE2LCBzaXplLCBzZXQpOworICBBU1NFUlRfVFJVRShDUFVfSVNTRVRfUygxNiwgc2l6ZSwgc2V0KSk7CisKKyAgQ1BVX0ZSRUUoc2V0KTsKK30KKworVEVTVChzY2hlZCwgY3B1X2FsbG9jX2JpZykgeworICBjcHVfc2V0X3QqIHNldCA9IENQVV9BTExPQygxMCAqIENQVV9TRVRTSVpFKTsKKyAgc2l6ZV90IHNpemUgPSBDUFVfQUxMT0NfU0laRSgxMCAqIENQVV9TRVRTSVpFKTsKKworICBDUFVfWkVST19TKHNpemUsIHNldCk7CisgIEFTU0VSVF9FUSgwLCBDUFVfQ09VTlRfUyhzaXplLCBzZXQpKTsKKyAgQ1BVX1NFVF9TKENQVV9TRVRTSVpFLCBzaXplLCBzZXQpOworICBBU1NFUlRfVFJVRShDUFVfSVNTRVRfUyhDUFVfU0VUU0laRSwgc2l6ZSwgc2V0KSk7CisKKyAgQ1BVX0ZSRUUoc2V0KTsKK30KKworVEVTVChzY2hlZCwgY3B1X3NfbWFjcm9zKSB7CisgIGludCBzZXRfc2l6ZSA9IDY0OworICBzaXplX3Qgc2l6ZSA9IENQVV9BTExPQ19TSVpFKHNldF9zaXplKTsKKyAgY3B1X3NldF90KiBzZXQgPSBDUFVfQUxMT0Moc2V0X3NpemUpOworCisgIENQVV9aRVJPX1Moc2l6ZSwgc2V0KTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXRfc2l6ZTsgaSsrKSB7CisgICAgQVNTRVJUX0ZBTFNFKENQVV9JU1NFVF9TKGksIHNpemUsIHNldCkpOworICAgIENQVV9TRVRfUyhpLCBzaXplLCBzZXQpOworICAgIEFTU0VSVF9UUlVFKENQVV9JU1NFVF9TKGksIHNpemUsIHNldCkpOworICAgIEFTU0VSVF9FUShpICsgMSwgQ1BVX0NPVU5UX1Moc2l6ZSwgc2V0KSk7CisgIH0KKworICBmb3IgKGludCBpID0gMDsgaSA8IHNldF9zaXplOyBpKyspIHsKKyAgICBDUFVfQ0xSX1MoaSwgc2l6ZSwgc2V0KTsKKyAgICBBU1NFUlRfRkFMU0UoQ1BVX0lTU0VUX1MoaSwgc2l6ZSwgc2V0KSk7CisgICAgQVNTRVJUX0VRKHNldF9zaXplIC0gaSAtIDEsIENQVV9DT1VOVF9TKHNpemUsIHNldCkpOworICB9CisKKyAgQ1BVX0ZSRUUoc2V0KTsKK30KKworVEVTVChzY2hlZCwgY3B1X29wX3NfbWFjcm9zKSB7CisgIGludCBzZXRfc2l6ZTEgPSA2NDsKKyAgaW50IHNldF9zaXplMiA9IHNldF9zaXplMSAqIDI7CisgIGludCBzZXRfc2l6ZTMgPSBzZXRfc2l6ZTEgKiAzOworICBzaXplX3Qgc2l6ZTEgPSBDUFVfQUxMT0NfU0laRShzZXRfc2l6ZTEpOworICBzaXplX3Qgc2l6ZTIgPSBDUFVfQUxMT0NfU0laRShzZXRfc2l6ZTIpOworICBzaXplX3Qgc2l6ZTMgPSBDUFVfQUxMT0NfU0laRShzZXRfc2l6ZTMpOworCisgIGNwdV9zZXRfdCogc2V0MSA9IENQVV9BTExPQyhzZXRfc2l6ZTEpOworICBjcHVfc2V0X3QqIHNldDIgPSBDUFVfQUxMT0Moc2V0X3NpemUyKTsKKyAgY3B1X3NldF90KiBzZXQzID0gQ1BVX0FMTE9DKHNldF9zaXplMyk7CisgIENQVV9aRVJPX1Moc2l6ZTEsIHNldDEpOworICBDUFVfWkVST19TKHNpemUyLCBzZXQyKTsKKyAgQ1BVX1pFUk9fUyhzaXplMywgc2V0Myk7CisKKyAgQ1BVX1NFVF9TKDAsIHNpemUxLCBzZXQxKTsKKyAgQ1BVX1NFVF9TKDAsIHNpemUyLCBzZXQyKTsKKyAgQ1BVX1NFVF9TKDEsIHNpemUzLCBzZXQyKTsKKworICBDUFVfQU5EX1Moc2l6ZTEsIHNldDMsIHNldDEsIHNldDIpOworICBmb3IgKGludCBpID0gMDsgaSA8IHNldF9zaXplMzsgaSsrKSB7CisgICAgQVNTRVJUX0VRKGkgPT0gMCwgQ1BVX0lTU0VUX1MoaSwgc2l6ZTMsIHNldDMpKTsKKyAgfQorCisgIENQVV9PUl9TKHNpemUxLCBzZXQzLCBzZXQxLCBzZXQyKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXRfc2l6ZTM7IGkrKykgeworICAgIEFTU0VSVF9FUShpID09IDAgfHwgaSA9PSAxLCBDUFVfSVNTRVRfUyhpLCBzaXplMywgc2V0MykpOworICB9CisKKyAgQ1BVX1hPUl9TKHNpemUxLCBzZXQzLCBzZXQxLCBzZXQyKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXRfc2l6ZTM7IGkrKykgeworICAgIEFTU0VSVF9FUShpID09IDEsIENQVV9JU1NFVF9TKGksIHNpemUzLCBzZXQzKSk7CisgIH0KKworICBDUFVfRlJFRShzZXQxKTsKKyAgQ1BVX0ZSRUUoc2V0Mik7CisgIENQVV9GUkVFKHNldDMpOworfQorCitURVNUKHNjaGVkLCBjcHVfZXF1YWxfcykgeworICBpbnQgc2V0X3NpemUxID0gNjQ7CisgIGludCBzZXRfc2l6ZTIgPSBzZXRfc2l6ZTEgKiAyOworICBzaXplX3Qgc2l6ZTEgPSBDUFVfQUxMT0NfU0laRShzZXRfc2l6ZTEpOworICBzaXplX3Qgc2l6ZTIgPSBDUFVfQUxMT0NfU0laRShzZXRfc2l6ZTIpOworCisgIGNwdV9zZXRfdCogc2V0MSA9IENQVV9BTExPQyhzZXRfc2l6ZTEpOworICBjcHVfc2V0X3QqIHNldDIgPSBDUFVfQUxMT0Moc2V0X3NpemUyKTsKKworICBDUFVfWkVST19TKHNpemUxLCBzZXQxKTsKKyAgQ1BVX1pFUk9fUyhzaXplMiwgc2V0Mik7CisKKyAgQ1BVX1NFVF9TKDAsIHNpemUxLCBzZXQxKTsKKyAgQVNTRVJUX1RSVUUoQ1BVX0VRVUFMX1Moc2l6ZTEsIHNldDEsIHNldDEpKTsKKyAgQVNTRVJUX0ZBTFNFKENQVV9FUVVBTF9TKHNpemUxLCBzZXQxLCBzZXQyKSk7CisgIENQVV9TRVRfUygwLCBzaXplMiwgc2V0Mik7CisgIEFTU0VSVF9UUlVFKENQVV9FUVVBTF9TKHNpemUxLCBzZXQxLCBzZXQyKSk7CisKKyAgQ1BVX0ZSRUUoc2V0MSk7CisgIENQVV9GUkVFKHNldDIpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2VhcmNoX3Rlc3QuY3BwIGIvdGVzdHMvc2VhcmNoX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MDBjODkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zZWFyY2hfdGVzdC5jcHAKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPHNlYXJjaC5oPgorCitzdGF0aWMgaW50IGludF9jbXAoY29uc3Qgdm9pZCogbGhzLCBjb25zdCB2b2lkKiByaHMpIHsKKyAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IGludCo+KHJocykgLSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQqPihsaHMpOworfQorCitURVNUKHNlYXJjaCwgbGZpbmRfbHNlYXJjaCkgeworICBpbnQgeHNbMTBdOworICBtZW1zZXQoeHMsIDAsIHNpemVvZih4cykpOworICBzaXplX3QgeF9zaXplID0gMDsKKworICBpbnQgbmVlZGxlOworCisgIC8vIGxmaW5kKDMpIGNhbid0IGZpbmQgJzInIGluIHRoZSBlbXB0eSB0YWJsZS4KKyAgbmVlZGxlID0gMjsKKyAgQVNTRVJUX0VRKG51bGxwdHIsIGxmaW5kKCZuZWVkbGUsIHhzLCAmeF9zaXplLCBzaXplb2YoeHNbMF0pLCBpbnRfY21wKSk7CisgIEFTU0VSVF9FUSgwVSwgeF9zaXplKTsKKworICAvLyBsc2VhcmNoKDMpIHdpbGwgYWRkIGl0LgorICBBU1NFUlRfRVEoJnhzWzBdLCBsc2VhcmNoKCZuZWVkbGUsIHhzLCAmeF9zaXplLCBzaXplb2YoeHNbMF0pLCBpbnRfY21wKSk7CisgIEFTU0VSVF9FUSgyLCB4c1swXSk7CisgIEFTU0VSVF9FUSgxVSwgeF9zaXplKTsKKworICAvLyBBbmQgdGhlbiBsZmluZCgzKSBjYW4gZmluZCBpdC4KKyAgQVNTRVJUX0VRKCZ4c1swXSwgbGZpbmQoJm5lZWRsZSwgeHMsICZ4X3NpemUsIHNpemVvZih4c1swXSksIGludF9jbXApKTsKKyAgQVNTRVJUX0VRKDFVLCB4X3NpemUpOworCisgIC8vIEluc2VydGluZyBhIGR1cGxpY2F0ZSBkb2VzIG5vdGhpbmcgKGJ1dCByZXR1cm5zIHRoZSBleGlzdGluZyBlbGVtZW50KS4KKyAgQVNTRVJUX0VRKCZ4c1swXSwgbHNlYXJjaCgmbmVlZGxlLCB4cywgJnhfc2l6ZSwgc2l6ZW9mKHhzWzBdKSwgaW50X2NtcCkpOworICBBU1NFUlRfRVEoMVUsIHhfc2l6ZSk7Cit9CisKK3N0cnVjdCBub2RlIHsKKyAgbm9kZShjb25zdCBjaGFyKiBzKSA6IHMoc3RyZHVwKHMpKSB7fQorCisgIGNoYXIqIHM7Cit9OworCitzdGF0aWMgaW50IG5vZGVfY21wKGNvbnN0IHZvaWQqIGxocywgY29uc3Qgdm9pZCogcmhzKSB7CisgIHJldHVybiBzdHJjbXAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBub2RlKj4obGhzKS0+cywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBub2RlKj4ocmhzKS0+cyk7Cit9CisKK3N0YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZ19ub2RlczsKKworc3RhdGljIHZvaWQgbm9kZV93YWxrKGNvbnN0IHZvaWQqIHAsIFZJU0lUIG9yZGVyLCBpbnQpIHsKKyAgY29uc3Qgbm9kZSogbiA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IG5vZGUqIGNvbnN0Kj4ocCk7CisgIGlmIChvcmRlciA9PSBwb3N0b3JkZXIgfHwgb3JkZXIgPT0gbGVhZikgIHsKKyAgICBnX25vZGVzLnB1c2hfYmFjayhuLT5zKTsKKyAgfQorfQorCitzdGF0aWMgc2l6ZV90IGdfZnJlZV9jYWxsczsKKworc3RhdGljIHZvaWQgbm9kZV9mcmVlKHZvaWQqIHApIHsKKyAgbm9kZSogbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8bm9kZSo+KHApOworICBmcmVlKG4tPnMpOworICArK2dfZnJlZV9jYWxsczsKK30KKworVEVTVChzZWFyY2gsIHRmaW5kX3RzZWFyY2hfdHdhbGtfdGRlc3Ryb3kpIHsKKyAgdm9pZCogcm9vdCA9IG51bGxwdHI7CisKKyAgbm9kZSBuMSgieiIpOworICBub2RlIG4yKCJhIik7CisgIG5vZGUgbjMoIm0iKTsKKworICAvLyB0ZmluZCgzKSBjYW4ndCBmaW5kIGFueXRoaW5nIGluIHRoZSBlbXB0eSB0cmVlLgorICBBU1NFUlRfRVEobnVsbHB0ciwgdGZpbmQoJm4xLCAmcm9vdCwgbm9kZV9jbXApKTsKKyAgQVNTRVJUX0VRKG51bGxwdHIsIHRmaW5kKCZuMiwgJnJvb3QsIG5vZGVfY21wKSk7CisgIEFTU0VSVF9FUShudWxscHRyLCB0ZmluZCgmbjMsICZyb290LCBub2RlX2NtcCkpOworCisgIC8vIHRzZWFyY2goMykgaW5zZXJ0cyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXcgbm9kZS4KKyAgdm9pZCogaTEgPSB0c2VhcmNoKCZuMSwgJnJvb3QsIG5vZGVfY21wKTsKKyAgQVNTRVJUX05FKG51bGxwdHIsIGkxKTsKKworICAvLyAuLi53aGljaCB0ZmluZCgzKSB3aWxsIHRoZW4gcmV0dXJuLgorICBBU1NFUlRfRVEoaTEsIHRmaW5kKCZuMSwgJnJvb3QsIG5vZGVfY21wKSk7CisgIEFTU0VSVF9FUShudWxscHRyLCB0ZmluZCgmbjIsICZyb290LCBub2RlX2NtcCkpOworICBBU1NFUlRfRVEobnVsbHB0ciwgdGZpbmQoJm4zLCAmcm9vdCwgbm9kZV9jbXApKTsKKworICAvLyBBZGQgdGhlIG90aGVyIG5vZGVzLgorICBBU1NFUlRfTkUobnVsbHB0ciwgdHNlYXJjaCgmbjIsICZyb290LCBub2RlX2NtcCkpOworICBBU1NFUlRfTkUobnVsbHB0ciwgdHNlYXJjaCgmbjMsICZyb290LCBub2RlX2NtcCkpOworCisgIC8vIFVzZSB0d2FsaygzKSB0byBpdGVyYXRlIG92ZXIgdGhlIG5vZGVzLgorICBnX25vZGVzLmNsZWFyKCk7CisgIHR3YWxrKHJvb3QsIG5vZGVfd2Fsayk7CisgIEFTU0VSVF9FUSgzVSwgZ19ub2Rlcy5zaXplKCkpOworICBBU1NFUlRfRVEoImEiLCBnX25vZGVzWzBdKTsKKyAgQVNTRVJUX0VRKCJtIiwgZ19ub2Rlc1sxXSk7CisgIEFTU0VSVF9FUSgieiIsIGdfbm9kZXNbMl0pOworCisgIC8vIHRkZXN0cm95KDMpIHJlbW92ZXMgbm9kZXMgdW5kZXIgYSBub2RlLCBjYWxsaW5nIG91ciBjYWxsYmFjayB0byBkZXN0cm95IGVhY2ggb25lLgorICBnX2ZyZWVfY2FsbHMgPSAwOworICB0ZGVzdHJveShyb290LCBub2RlX2ZyZWUpOworICBBU1NFUlRfRVEoM1UsIGdfZnJlZV9jYWxscyk7Cit9CisKK3N0cnVjdCBwb2Rfbm9kZSB7CisgIHBvZF9ub2RlKGludCBpKSA6IGkoaSkge30KKyAgaW50IGk7Cit9OworCitzdGF0aWMgaW50IHBvZF9ub2RlX2NtcChjb25zdCB2b2lkKiBsaHMsIGNvbnN0IHZvaWQqIHJocykgeworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBwb2Rfbm9kZSo+KHJocyktPmkgLSByZWludGVycHJldF9jYXN0PGNvbnN0IHBvZF9ub2RlKj4obGhzKS0+aTsKK30KKworVEVTVChzZWFyY2gsIHRkZWxldGUpIHsKKyAgdm9pZCogcm9vdCA9IG51bGxwdHI7CisKKyAgcG9kX25vZGUgbjEoMTIzKTsKKyAgQVNTRVJUX05FKG51bGxwdHIsIHRzZWFyY2goJm4xLCAmcm9vdCwgcG9kX25vZGVfY21wKSk7CisKKyAgLy8gdGRlbGV0ZSgzKSBsZWFrcyBuMS4KKyAgcG9kX25vZGUgbm90X3RoZXJlKDQ1Nik7CisgIEFTU0VSVF9FUShudWxscHRyLCB0ZGVsZXRlKCZub3RfdGhlcmUsICZyb290LCBwb2Rfbm9kZV9jbXApKTsKKyAgQVNTRVJUX05FKG51bGxwdHIsIHRkZWxldGUoJm4xLCAmcm9vdCwgcG9kX25vZGVfY21wKSk7Cit9CisKK3N0cnVjdCBxX25vZGUgeworICBxX25vZGUoaW50IGkpIDogaShpKSB7fQorCisgIHFfbm9kZSogbmV4dDsKKyAgcV9ub2RlKiBwcmV2OworCisgIGludCBpOworfTsKKworVEVTVChzZWFyY2gsIGluc3F1ZV9yZW1xdWUpIHsKKyAgcV9ub2RlIHplcm8oMCk7CisgIHFfbm9kZSBvbmUoMSk7CisgIHFfbm9kZSB0d28oMik7CisKKyAgLy8gTGluZWFyIChub3QgY2lyY3VsYXIpLgorCisgIGluc3F1ZSgmemVybywgTlVMTCk7CisgIGluc3F1ZSgmb25lLCAmemVybyk7CisgIGluc3F1ZSgmdHdvLCAmb25lKTsKKworICBpbnQgZXhwZWN0ZWQgPSAwOworICBmb3IgKHFfbm9kZSogcSA9ICZ6ZXJvOyBxICE9IE5VTEw7IHEgPSBxLT5uZXh0KSB7CisgICAgQVNTRVJUX0VRKGV4cGVjdGVkLCBxLT5pKTsKKyAgICArK2V4cGVjdGVkOworICB9CisgIEFTU0VSVF9FUSgzLCBleHBlY3RlZCk7CisKKyAgZm9yIChxX25vZGUqIHEgPSAmdHdvOyBxICE9IE5VTEw7IHEgPSBxLT5wcmV2KSB7CisgICAgLS1leHBlY3RlZDsKKyAgICBBU1NFUlRfRVEoZXhwZWN0ZWQsIHEtPmkpOworICB9CisgIEFTU0VSVF9FUSgwLCBleHBlY3RlZCk7CisKKyAgcV9ub2RlKiBoZWFkID0gJnplcm87CisKKyAgcmVtcXVlKCZvbmUpOworICBBU1NFUlRfRVEoMCwgaGVhZC0+aSk7CisgIEFTU0VSVF9FUSgyLCBoZWFkLT5uZXh0LT5pKTsKKyAgQVNTRVJUX0VRKG51bGxwdHIsIGhlYWQtPm5leHQtPm5leHQpOworCisgIHJlbXF1ZSgmdHdvKTsKKyAgQVNTRVJUX0VRKDAsIGhlYWQtPmkpOworICBBU1NFUlRfRVEobnVsbHB0ciwgaGVhZC0+bmV4dCk7CisKKyAgcmVtcXVlKCZ6ZXJvKTsKKworICAvLyBDaXJjdWxhci4KKworICB6ZXJvLm5leHQgPSAmemVybzsKKyAgemVyby5wcmV2ID0gJnplcm87CisKKyAgaW5zcXVlKCZvbmUsICZ6ZXJvKTsKKyAgaW5zcXVlKCZ0d28sICZvbmUpOworCisgIEFTU0VSVF9FUSgwLCBoZWFkLT5pKTsKKyAgQVNTRVJUX0VRKDEsIGhlYWQtPm5leHQtPmkpOworICBBU1NFUlRfRVEoMiwgaGVhZC0+bmV4dC0+bmV4dC0+aSk7CisgIEFTU0VSVF9FUSgwLCBoZWFkLT5uZXh0LT5uZXh0LT5uZXh0LT5pKTsKKyAgQVNTRVJUX0VRKDEsIGhlYWQtPm5leHQtPm5leHQtPm5leHQtPm5leHQtPmkpOworICBBU1NFUlRfRVEoMiwgaGVhZC0+bmV4dC0+bmV4dC0+bmV4dC0+bmV4dC0+bmV4dC0+aSk7CisKKyAgcmVtcXVlKCZvbmUpOworICBBU1NFUlRfRVEoMCwgaGVhZC0+aSk7CisgIEFTU0VSVF9FUSgyLCBoZWFkLT5uZXh0LT5pKTsKKyAgQVNTRVJUX0VRKDAsIGhlYWQtPm5leHQtPm5leHQtPmkpOworICBBU1NFUlRfRVEoMiwgaGVhZC0+bmV4dC0+bmV4dC0+bmV4dC0+aSk7CisKKyAgcmVtcXVlKCZ0d28pOworICBBU1NFUlRfRVEoMCwgaGVhZC0+aSk7CisgIEFTU0VSVF9FUSgwLCBoZWFkLT5uZXh0LT5pKTsKKworICByZW1xdWUoJnplcm8pOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc2lnbmFsX3Rlc3QuY3BwIGIvdGVzdHMvc2lnbmFsX3Rlc3QuY3BwCmluZGV4IGE3ZTViOWEuLjg5YjgwODggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3NpZ25hbF90ZXN0LmNwcAorKysgYi90ZXN0cy9zaWduYWxfdGVzdC5jcHAKQEAgLTE0NiwxMCArMTQ2LDEwIEBACiAgIEFTU0VSVF9FUShTSUdBTFJNLCByZWNlaXZlZF9zaWduYWwpOwogfQogCi1zdGF0aWMgaW50IGdTaWdTdXNwZW5kVGVzdEhlbHBlckNhbGxDb3VudCA9IDA7CitzdGF0aWMgaW50IGdfc2lnc3VzcGVuZF90ZXN0X2hlbHBlcl9jYWxsX2NvdW50ID0gMDsKIAogc3RhdGljIHZvaWQgU2lnU3VzcGVuZFRlc3RIZWxwZXIoaW50KSB7Ci0gICsrZ1NpZ1N1c3BlbmRUZXN0SGVscGVyQ2FsbENvdW50OworICArK2dfc2lnc3VzcGVuZF90ZXN0X2hlbHBlcl9jYWxsX2NvdW50OwogfQogCiBURVNUKHNpZ25hbCwgc2lnc3VzcGVuZF9zaWdwZW5kaW5nKSB7CkBAIC0xNzIsNyArMTcyLDcgQEAKIAogICAvLyBSYWlzZSBTSUdBTFJNIGFuZCBjaGVjayBvdXIgc2lnbmFsIGhhbmRsZXIgd2Fzbid0IGNhbGxlZC4KICAgcmFpc2UoU0lHQUxSTSk7Ci0gIEFTU0VSVF9FUSgwLCBnU2lnU3VzcGVuZFRlc3RIZWxwZXJDYWxsQ291bnQpOworICBBU1NFUlRfRVEoMCwgZ19zaWdzdXNwZW5kX3Rlc3RfaGVscGVyX2NhbGxfY291bnQpOwogCiAgIC8vIFdlIHNob3VsZCBub3cgaGF2ZSBhIHBlbmRpbmcgU0lHQUxSTSBidXQgbm90aGluZyBlbHNlLgogICBzaWdlbXB0eXNldCgmcGVuZGluZyk7CkBAIC0xODgsNyArMTg4LDcgQEAKICAgQVNTRVJUX0VRKC0xLCBzaWdzdXNwZW5kKCZub3RfU0lHQUxSTSkpOwogICBBU1NFUlRfRVEoRUlOVFIsIGVycm5vKTsKICAgLy8gLi4uYW5kIGNoZWNrIHRoYXQgd2Ugbm93IHJlY2VpdmUgb3VyIHBlbmRpbmcgU0lHQUxSTS4KLSAgQVNTRVJUX0VRKDEsIGdTaWdTdXNwZW5kVGVzdEhlbHBlckNhbGxDb3VudCk7CisgIEFTU0VSVF9FUSgxLCBnX3NpZ3N1c3BlbmRfdGVzdF9oZWxwZXJfY2FsbF9jb3VudCk7CiAKICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgc2V0LgogICBBU1NFUlRfRVEoMCwgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvcmlnaW5hbF9zZXQsIE5VTEwpKTsKQEAgLTIzOCwzICsyMzgsMzUgQEAKICAgLy8gUHV0IGV2ZXJ5dGhpbmcgYmFjayBob3cgaXQgd2FzLgogICBBU1NFUlRfRVEoMCwgc2lnYWN0aW9uKFNJR0FMUk0sICZvcmlnaW5hbF9zYSwgTlVMTCkpOwogfQorCitURVNUKHNpZ25hbCwgc3lzX3NpZ25hbWUpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIEFTU0VSVF9UUlVFKHN5c19zaWduYW1lWzBdID09IE5VTEwpOworICBBU1NFUlRfU1RSRVEoIkhVUCIsIHN5c19zaWduYW1lW1NJR0hVUF0pOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYKK30KKworVEVTVChzaWduYWwsIHN5c19zaWdsaXN0KSB7CisgIEFTU0VSVF9UUlVFKHN5c19zaWdsaXN0WzBdID09IE5VTEwpOworICBBU1NFUlRfU1RSRVEoIkhhbmd1cCIsIHN5c19zaWdsaXN0W1NJR0hVUF0pOworfQorCitURVNUKHNpZ25hbCwgbGltaXRzKSB7CisgIC8vIFRoaXMgY29tZXMgZnJvbSB0aGUga2VybmVsLgorICBBU1NFUlRfRVEoMzIsIF9fU0lHUlRNSU4pOworCisgIC8vIFdlIHJlc2VydmUgYSBub24temVybyBudW1iZXIgYXQgdGhlIGJvdHRvbSBmb3Igb3Vyc2VsdmVzLgorICBBU1NFUlRfR1QoU0lHUlRNSU4sIF9fU0lHUlRNSU4pOworCisgIC8vIE1JUFMgaGFzIG1vcmUgc2lnbmFscyB0aGFuIGV2ZXJ5b25lIGVsc2UuCisjaWYgZGVmaW5lZChfX21pcHNfXykKKyAgQVNTRVJUX0VRKDEyOCwgX19TSUdSVE1BWCk7CisjZWxzZQorICBBU1NFUlRfRVEoNjQsIF9fU0lHUlRNQVgpOworI2VuZGlmCisKKyAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IHJlc2VydmUgYW55IGF0IHRoZSB0b3AuCisgIEFTU0VSVF9FUShTSUdSVE1BWCwgX19TSUdSVE1BWCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zc3RyZWFtX3Rlc3QuY3BwIGIvdGVzdHMvc3N0cmVhbV90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWY4Njk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3N0cmVhbV90ZXN0LmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8c3N0cmVhbT4KKworLy8gVE9ETzogbW92ZSB0aGlzIHRlc3QgdG8gbGliY3h4LgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIENoZWNrT3ZlcmZsb3coVCBleHBlY3RlZCwgY29uc3QgY2hhciogdmFsdWUsIGJvb2wgc2hvdWxkX292ZXJmbG93KSB7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHNzKHZhbHVlKTsKKyAgVCByZXN1bHQgPSBUKDApOworICBzcyA+PiByZXN1bHQ7CisgIEVYUEVDVF9GQUxTRShzcy5iYWQoKSkgPDwgdmFsdWUgPDwgJyAnIDw8IGludDY0X3QocmVzdWx0KTsKKyAgRVhQRUNUX0VRKHNob3VsZF9vdmVyZmxvdywgc3MuZmFpbCgpKSA8PCB2YWx1ZSA8PCAnICcgPDwgaW50NjRfdChyZXN1bHQpOworICBpZiAoIXNob3VsZF9vdmVyZmxvdykgeyAvLyBnbGliYyB3cml0ZXMgZ2FyYmFnZSBvbiBvdmVyZmxvdy4KKyAgICBBU1NFUlRfRVEoZXhwZWN0ZWQsIHJlc3VsdCkgPDwgdmFsdWU7CisgIH0KK30KKworVEVTVChzc3RyZWFtLCBfX2dldF9pbnRlZ2VyX292ZXJmbG93XzgpIHsKKyAgLy8gVGhlIHVzdWFsIGJ5dGUvY2hhciBjb25mdXNpb24gbWVhbnMgdGhhdCBvcGVyYXRvcj4+IG9uIDgtYml0IHR5cGVzIGlzIHVzZWQKKyAgLy8gZm9yIGNoYXJzLCBzbyB0aGVyZSdzIG5vIHBvc3NpYmlsaXR5IG9mIG92ZXJmbG93LgorfQorCitURVNUKHNzdHJlYW0sIF9fZ2V0X2ludGVnZXJfb3ZlcmZsb3dfMTYpIHsKKyAgQ2hlY2tPdmVyZmxvdzxpbnQxNl90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDE2X3Q+OjptaW4oKSwgIi0zMjc2OCIsIGZhbHNlKTsKKyAgQ2hlY2tPdmVyZmxvdzxpbnQxNl90PigwLCAiLTMyNzY5IiwgdHJ1ZSk7CisgIENoZWNrT3ZlcmZsb3c8aW50MTZfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQxNl90Pjo6bWF4KCksICIzMjc2NyIsIGZhbHNlKTsKKyAgQ2hlY2tPdmVyZmxvdzxpbnQxNl90PigwLCAiMzI3NjgiLCB0cnVlKTsKKworICBDaGVja092ZXJmbG93PHVpbnQxNl90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCksICI2NTUzNSIsIGZhbHNlKTsKKyAgQ2hlY2tPdmVyZmxvdzx1aW50MTZfdD4oMCwgIjY1NTM2IiwgdHJ1ZSk7Cit9CisKK1RFU1Qoc3N0cmVhbSwgX19nZXRfaW50ZWdlcl9vdmVyZmxvd18zMikgeworICBDaGVja092ZXJmbG93PGludDMyX3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpLCAiLTIxNDc0ODM2NDgiLCBmYWxzZSk7CisgIENoZWNrT3ZlcmZsb3c8aW50MzJfdD4oMCwgIi0yMTQ3NDgzNjQ5IiwgdHJ1ZSk7CisgIENoZWNrT3ZlcmZsb3c8aW50MzJfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCksICIyMTQ3NDgzNjQ3IiwgZmFsc2UpOworICBDaGVja092ZXJmbG93PGludDMyX3Q+KDAsICIyMTQ3NDgzNjQ4IiwgdHJ1ZSk7CisKKyAgQ2hlY2tPdmVyZmxvdzx1aW50MzJfdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLCAiNDI5NDk2NzI5NSIsIGZhbHNlKTsKKyAgQ2hlY2tPdmVyZmxvdzx1aW50MzJfdD4oMCwgIjQyOTQ5NjcyOTYiLCB0cnVlKTsKK30KKworVEVTVChzc3RyZWFtLCBfX2dldF9pbnRlZ2VyX292ZXJmbG93XzY0KSB7CisgIENoZWNrT3ZlcmZsb3c8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCksICItOTIyMzM3MjAzNjg1NDc3NTgwOCIsIGZhbHNlKTsKKyAgQ2hlY2tPdmVyZmxvdzxpbnQ2NF90PigwLCAiLTkyMjMzNzIwMzY4NTQ3NzU4MDkiLCB0cnVlKTsKKyAgQ2hlY2tPdmVyZmxvdzxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSwgIjkyMjMzNzIwMzY4NTQ3NzU4MDciLCBmYWxzZSk7CisgIENoZWNrT3ZlcmZsb3c8aW50NjRfdD4oMCwgIjkyMjMzNzIwMzY4NTQ3NzU4MDgiLCB0cnVlKTsKKworICBDaGVja092ZXJmbG93PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCksICIxODQ0Njc0NDA3MzcwOTU1MTYxNSIsIGZhbHNlKTsKKyAgQ2hlY2tPdmVyZmxvdzx1aW50NjRfdD4oMCwgIjE4NDQ2NzQ0MDczNzA5NTUxNjE2IiwgdHJ1ZSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zdGFja19wcm90ZWN0b3JfdGVzdC5jcHAgYi90ZXN0cy9zdGFja19wcm90ZWN0b3JfdGVzdC5jcHAKaW5kZXggMmJhOGE4Ny4uZmVhMjRkOCAxMDA2NDQKLS0tIGEvdGVzdHMvc3RhY2tfcHJvdGVjdG9yX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3N0YWNrX3Byb3RlY3Rvcl90ZXN0LmNwcApAQCAtMjcsMTcgKzI3LDEzIEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c2V0PgogCi0jaWZkZWYgX19HTElCQ19fCi0KKyNpZiBkZWZpbmVkKF9fR0xJQkNfXykKIC8vIGdsaWJjIGRvZXNuJ3QgZXhwb3NlIGdldHRpZCgyKS4KIHBpZF90IGdldHRpZCgpIHsgcmV0dXJuIHN5c2NhbGwoX19OUl9nZXR0aWQpOyB9Ci0KLSNlbmRpZgotCi0jaWZkZWYgX19pMzg2X18KKyNlbmRpZiAvLyBfX0dMSUJDX18KIAogLy8gRm9yIHg4NiwgYmlvbmljIGFuZCBnbGliYyBoYXZlIHBlci10aHJlYWQgc3RhY2sgZ3VhcmQgdmFsdWVzIChhbGwgaWRlbnRpY2FsKS4KLQorI2lmIGRlZmluZWQoX19pMzg2X18pCiBzdGF0aWMgdWludDMyX3QgR2V0R3VhcmRGcm9tVGxzKCkgewogICB1aW50MzJfdCBndWFyZDsKICAgYXNtICgibW92ICUlZ3M6MHgxNCwgJTAiOiAiPWQiIChndWFyZCkpOwpAQCAtNzEsOCArNjcsMTAgQEAKICAgY2hlY2tlci0+Q2hlY2soKTsKICAgcmV0dXJuIE5VTEw7CiB9CisjZW5kaWYgLy8gX19pMzg2X18KIAogVEVTVChzdGFja19wcm90ZWN0b3IsIHNhbWVfZ3VhcmRfcGVyX3RocmVhZCkgeworI2lmIGRlZmluZWQoX19pMzg2X18pCiAgIHN0YWNrX3Byb3RlY3Rvcl9jaGVja2VyIGNoZWNrZXI7CiAgIHNpemVfdCB0aHJlYWRfY291bnQgPSAxMDsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aHJlYWRfY291bnQ7ICsraSkgewpAQCAtODYsMjQgKzg0LDE5IEBACiAKICAgLy8gYmlvbmljIGFuZCBnbGliYyB1c2UgdGhlIHNhbWUgZ3VhcmQgZm9yIGV2ZXJ5IHRocmVhZC4KICAgQVNTRVJUX0VRKDFVLCBjaGVja2VyLmd1YXJkcy5zaXplKCkpOworI2Vsc2UgLy8gX19pMzg2X18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19pMzg2X18KIH0KIAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fQklPTklDX18pIHx8IGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX21pcHNfXykKLQogLy8gRm9yIEFSTSBhbmQgTUlQUywgZ2xpYmMgaGFzIGEgZ2xvYmFsIHN0YWNrIGNoZWNrIGd1YXJkIHZhbHVlLgorI2lmIGRlZmluZWQoX19CSU9OSUNfXykgfHwgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fbWlwc19fKQorI2RlZmluZSBURVNUX1NUQUNLX0NIS19HVUFSRAogCiAvLyBCaW9uaWMgaGFzIHRoZSBnbG9iYWwgZm9yIHg4NiB0b28sIHRvIHN1cHBvcnQgYmluYXJpZXMgdGhhdCBjYW4gcnVuIG9uCiAvLyBBbmRyb2lkIHJlbGVhc2VzIHRoYXQgZGlkbid0IGltcGxlbWVudCB0aGUgVExTIGd1YXJkIHZhbHVlLgotCiBleHRlcm4gIkMiIHVpbnRwdHJfdCBfX3N0YWNrX2Noa19ndWFyZDsKIAotVEVTVChzdGFja19wcm90ZWN0b3IsIGdsb2JhbF9ndWFyZCkgewotICBBU1NFUlRfTkUoMCwgZ2V0dGlkKCkpOwotICBBU1NFUlRfTkUoMFUsIF9fc3RhY2tfY2hrX2d1YXJkKTsKLX0KLQogLyoKICAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCB0aGUgc3RhY2sgY2FuYXJ5IHdpbGwgYmUgaW5jb25zaXN0ZW50CiAgKiB3aXRoIHRoZSBwcmV2aW91cyB2YWx1ZSwgd2hpY2ggd2lsbCBnZW5lcmF0ZSBhIGNhbGwgdG8gX19zdGFja19jaGtfZmFpbCgpLApAQCAtMTE2LDEwICsxMDksMjIgQEAKIHN0YXRpYyB2b2lkIGRvX21vZGlmeV9zdGFja19jaGtfZ3VhcmQoKSB7CiAgIF9fc3RhY2tfY2hrX2d1YXJkID0gMHgxMjM0NTY3ODsKIH0KKyNlbmRpZgogCi1URVNUKHN0YWNrX3Byb3RlY3Rvcl9EZWF0aFRlc3QsIG1vZGlmeV9zdGFja19wcm90ZWN0b3IpIHsKLSAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwotICBBU1NFUlRfRVhJVChkb19tb2RpZnlfc3RhY2tfY2hrX2d1YXJkKCksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CitURVNUKHN0YWNrX3Byb3RlY3RvciwgZ2xvYmFsX2d1YXJkKSB7CisjaWYgZGVmaW5lZChURVNUX1NUQUNLX0NIS19HVUFSRCkKKyAgQVNTRVJUX05FKDAsIGdldHRpZCgpKTsKKyAgQVNTRVJUX05FKDBVLCBfX3N0YWNrX2Noa19ndWFyZCk7CisjZWxzZSAvLyBURVNUX1NUQUNLX0NIS19HVUFSRAorICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBURVNUX1NUQUNLX0NIS19HVUFSRAogfQogCi0jZW5kaWYKK1RFU1Qoc3RhY2tfcHJvdGVjdG9yX0RlYXRoVGVzdCwgbW9kaWZ5X3N0YWNrX3Byb3RlY3RvcikgeworI2lmIGRlZmluZWQoVEVTVF9TVEFDS19DSEtfR1VBUkQpCisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgQVNTRVJUX0VYSVQoZG9fbW9kaWZ5X3N0YWNrX2Noa19ndWFyZCgpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworI2Vsc2UgLy8gVEVTVF9TVEFDS19DSEtfR1VBUkQKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gVEVTVF9TVEFDS19DSEtfR1VBUkQKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0YWNrX3Vud2luZGluZ190ZXN0LmNwcCBiL3Rlc3RzL3N0YWNrX3Vud2luZGluZ190ZXN0LmNwcAppbmRleCAzYjE4ZGFhLi4xMDI0ZjI4IDEwMDY0NAotLS0gYS90ZXN0cy9zdGFja191bndpbmRpbmdfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3RhY2tfdW53aW5kaW5nX3Rlc3QuY3BwCkBAIC0yMCw4ICsyMCw2IEBACiAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCi0jaWYgZGVmaW5lZChpMzg2KSAvLyBPbmx5IG91ciB4ODYgdW53aW5kaW5nIGlzIGdvb2QgZW5vdWdoLiBTd2l0Y2ggdG8gbGlidW53aW5kPwotCiBleHRlcm4gIkMiIHsKICAgdm9pZCBkb190ZXN0KCk7CiB9CkBAIC0yOSw4ICsyNywxMSBAQAogLy8gV2UgaGF2ZSB0byBzYXkgIkRlYXRoVGVzdCIgaGVyZSBzbyBndGVzdCBrbm93cyB0byBydW4gdGhpcyB0ZXN0ICh3aGljaCBleGl0cykKIC8vIGluIGl0cyBvd24gcHJvY2Vzcy4KIFRFU1Qoc3RhY2tfdW53aW5kaW5nX0RlYXRoVGVzdCwgdW53aW5kaW5nX3Rocm91Z2hfc2lnbmFsX2ZyYW1lKSB7CisvLyBPbmx5IG91ciB4ODYgdW53aW5kaW5nIGlzIGdvb2QgZW5vdWdoLiBTd2l0Y2ggdG8gbGlidW53aW5kPworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgJiYgZGVmaW5lZChfX2kzODZfXykKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBBU1NFUlRfRVhJVChkb190ZXN0KCksIDo6dGVzdGluZzo6RXhpdGVkV2l0aENvZGUoNDIpLCAiIik7CisjZWxzZSAvLyBfX2kzODZfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX2kzODZfXwogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3N0YXR2ZnNfdGVzdC5jcHAgYi90ZXN0cy9zdGF0dmZzX3Rlc3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWZiOWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL3N0YXR2ZnNfdGVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Ci0KLSNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotCi0jaW5jbHVkZSA8c3RyaW5nPgotCi1URVNUKHN0YXR2ZnMsIHN0YXR2ZnMpIHsKLSAgc3RydWN0IHN0YXR2ZnMgc2I7Ci0gIG1lbXNldCgmc2IsIDAsIHNpemVvZihzYikpOwotCi0gIEFTU0VSVF9FUSgwLCBzdGF0dmZzKCIvcHJvYyIsICZzYikpOwotCi0gIEVYUEVDVF9FUSg0MDk2VSwgc2IuZl9ic2l6ZSk7Ci0gIEVYUEVDVF9FUSgwVSwgc2IuZl9iZnJlZSk7Ci0gIEVYUEVDVF9FUSgwVSwgc2IuZl9mZnJlZSk7Ci0gIEVYUEVDVF9FUSgwVSwgc2IuZl9mc2lkKTsKLSAgRVhQRUNUX0VRKDI1NVUsIHNiLmZfbmFtZW1heCk7Ci19Ci0KLVRFU1Qoc3RhdHZmcywgZnN0YXR2ZnMpIHsKLSAgc3RydWN0IHN0YXR2ZnMgc2I7Ci0gIG1lbXNldCgmc2IsIDAsIHNpemVvZihzYikpOwotCi0gIGludCBmZCA9IG9wZW4oIi9wcm9jIiwgT19SRE9OTFkpOwotICBBU1NFUlRfRVEoMCwgZnN0YXR2ZnMoZmQsICZzYikpOwotICBjbG9zZShmZCk7Ci0KLSAgRVhQRUNUX0VRKDQwOTZVLCBzYi5mX2JzaXplKTsKLSAgRVhQRUNUX0VRKDBVLCBzYi5mX2JmcmVlKTsKLSAgRVhQRUNUX0VRKDBVLCBzYi5mX2ZmcmVlKTsKLSAgRVhQRUNUX0VRKDBVLCBzYi5mX2ZzaWQpOwotICBFWFBFQ1RfRVEoMjU1VSwgc2IuZl9uYW1lbWF4KTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0ZGF0b21pY190ZXN0LmNwcCBiL3Rlc3RzL3N0ZGF0b21pY190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2ZiMTliCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3RkYXRvbWljX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGF0b21pYy5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCitURVNUKHN0ZGF0b21pYywgTE9DS19GUkVFKSB7CisgIEFTU0VSVF9UUlVFKEFUT01JQ19CT09MX0xPQ0tfRlJFRSk7CisgIEFTU0VSVF9UUlVFKEFUT01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUpOworICBBU1NFUlRfVFJVRShBVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFKTsKKyAgQVNTRVJUX1RSVUUoQVRPTUlDX0NIQVJfTE9DS19GUkVFKTsKKyAgQVNTRVJUX1RSVUUoQVRPTUlDX0lOVF9MT0NLX0ZSRUUpOworICBBU1NFUlRfVFJVRShBVE9NSUNfTExPTkdfTE9DS19GUkVFKTsKKyAgQVNTRVJUX1RSVUUoQVRPTUlDX0xPTkdfTE9DS19GUkVFKTsKKyAgQVNTRVJUX1RSVUUoQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFKTsKKyAgQVNTRVJUX1RSVUUoQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRSk7CisgIEFTU0VSVF9UUlVFKEFUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRSk7Cit9CisKK1RFU1Qoc3RkYXRvbWljLCBpbml0KSB7CisgIGF0b21pY19pbnQgdiA9IEFUT01JQ19WQVJfSU5JVCgxMjMpOworICBBU1NFUlRfRVEoMTIzLCBhdG9taWNfbG9hZCgmdikpOworCisgIGF0b21pY19pbml0KCZ2LCA0NTYpOworICBBU1NFUlRfRVEoNDU2LCBhdG9taWNfbG9hZCgmdikpOworCisgIGF0b21pY19mbGFnIGYgPSBBVE9NSUNfRkxBR19JTklUOworICBBU1NFUlRfRkFMU0UoYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0KCZmKSk7Cit9CisKK1RFU1Qoc3RkYXRvbWljLCBhdG9taWNfdGhyZWFkX2ZlbmNlKSB7CisgIGF0b21pY190aHJlYWRfZmVuY2UobWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICBhdG9taWNfdGhyZWFkX2ZlbmNlKG1lbW9yeV9vcmRlcl9jb25zdW1lKTsKKyAgYXRvbWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgIGF0b21pY190aHJlYWRfZmVuY2UobWVtb3J5X29yZGVyX3JlbGVhc2UpOworICBhdG9taWNfdGhyZWFkX2ZlbmNlKG1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKyAgYXRvbWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXJfc2VxX2NzdCk7Cit9CisKK1RFU1Qoc3RkYXRvbWljLCBhdG9taWNfc2lnbmFsX2ZlbmNlKSB7CisgIGF0b21pY19zaWduYWxfZmVuY2UobWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICBhdG9taWNfc2lnbmFsX2ZlbmNlKG1lbW9yeV9vcmRlcl9jb25zdW1lKTsKKyAgYXRvbWljX3NpZ25hbF9mZW5jZShtZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgIGF0b21pY19zaWduYWxfZmVuY2UobWVtb3J5X29yZGVyX3JlbGVhc2UpOworICBhdG9taWNfc2lnbmFsX2ZlbmNlKG1lbW9yeV9vcmRlcl9hY3FfcmVsKTsKKyAgYXRvbWljX3NpZ25hbF9mZW5jZShtZW1vcnlfb3JkZXJfc2VxX2NzdCk7Cit9CisKK1RFU1Qoc3RkYXRvbWljLCBhdG9taWNfaXNfbG9ja19mcmVlKSB7CisgIGF0b21pY19jaGFyIHNtYWxsOworICBBU1NFUlRfVFJVRShhdG9taWNfaXNfbG9ja19mcmVlKCZzbWFsbCkpOworI2lmIGRlZmluZWQoX19jbGFuZ19fKSB8fCBfX0dOVUNfUFJFUkVRKDQsIDcpCisgIC8vIE90aGVyd2lzZSBzdGRhdG9taWMuaCBkb2Vzbid0IGhhbmRsZSB0aGlzLgorICBhdG9taWNfaW50bWF4X3QgYmlnOworICAvLyBhdG9taWNfaW50bWF4X3Qoc2l6ZSA9IDY0KSBpcyBub3QgbG9jayBmcmVlIG9uIG1pcHMzMi4KKyNpZiBkZWZpbmVkKF9fbWlwc19fKSAmJiAhZGVmaW5lZChfX0xQNjRfXykKKyAgQVNTRVJUX0ZBTFNFKGF0b21pY19pc19sb2NrX2ZyZWUoJmJpZykpOworI2Vsc2UKKyAgQVNTRVJUX1RSVUUoYXRvbWljX2lzX2xvY2tfZnJlZSgmYmlnKSk7CisjZW5kaWYKKyNlbmRpZgorfQorCitURVNUKHN0ZGF0b21pYywgYXRvbWljX2ZsYWcpIHsKKyAgYXRvbWljX2ZsYWcgZiA9IEFUT01JQ19GTEFHX0lOSVQ7CisgIEFTU0VSVF9GQUxTRShhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQoJmYpKTsKKyAgQVNTRVJUX1RSVUUoYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0KCZmKSk7CisKKyAgYXRvbWljX2ZsYWdfY2xlYXIoJmYpOworCisgIEFTU0VSVF9GQUxTRShhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhwbGljaXQoJmYsIG1lbW9yeV9vcmRlcl9yZWxheGVkKSk7CisgIEFTU0VSVF9UUlVFKGF0b21pY19mbGFnX3Rlc3RfYW5kX3NldF9leHBsaWNpdCgmZiwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpKTsKKworICBhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdCgmZiwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICBBU1NFUlRfRkFMU0UoYXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0X2V4cGxpY2l0KCZmLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkpOworfQorCitURVNUKHN0ZGF0b21pYywgYXRvbWljX3N0b3JlKSB7CisgIGF0b21pY19pbnQgaTsKKyAgYXRvbWljX3N0b3JlKCZpLCAxMjMpOworICBBU1NFUlRfRVEoMTIzLCBhdG9taWNfbG9hZCgmaSkpOworICBhdG9taWNfc3RvcmVfZXhwbGljaXQoJmksIDEyMywgbWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICBBU1NFUlRfRVEoMTIzLCBhdG9taWNfbG9hZF9leHBsaWNpdCgmaSwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpKTsKK30KKworVEVTVChzdGRhdG9taWMsIGF0b21pY19leGNoYW5nZSkgeworICBhdG9taWNfaW50IGk7CisgIGF0b21pY19zdG9yZSgmaSwgMTIzKTsKKyAgQVNTRVJUX0VRKDEyMywgYXRvbWljX2V4Y2hhbmdlKCZpLCA0NTYpKTsKKyAgQVNTRVJUX0VRKDQ1NiwgYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KCZpLCAxMjMsIG1lbW9yeV9vcmRlcl9yZWxheGVkKSk7Cit9CisKK1RFU1Qoc3RkYXRvbWljLCBhdG9taWNfY29tcGFyZV9leGNoYW5nZSkgeworICBhdG9taWNfaW50IGk7CisgIGludCBleHBlY3RlZDsKKworICBhdG9taWNfc3RvcmUoJmksIDEyMyk7CisgIGV4cGVjdGVkID0gMTIzOworICBBU1NFUlRfVFJVRShhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoJmksICZleHBlY3RlZCwgNDU2KSk7CisgIEFTU0VSVF9GQUxTRShhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoJmksICZleHBlY3RlZCwgNDU2KSk7CisgIEFTU0VSVF9FUSg0NTYsIGV4cGVjdGVkKTsKKworICBhdG9taWNfc3RvcmUoJmksIDEyMyk7CisgIGV4cGVjdGVkID0gMTIzOworICBBU1NFUlRfVFJVRShhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQoJmksICZleHBlY3RlZCwgNDU2LCBtZW1vcnlfb3JkZXJfcmVsYXhlZCwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpKTsKKyAgQVNTRVJUX0ZBTFNFKGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCgmaSwgJmV4cGVjdGVkLCA0NTYsIG1lbW9yeV9vcmRlcl9yZWxheGVkLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkpOworICBBU1NFUlRfRVEoNDU2LCBleHBlY3RlZCk7CisKKyAgYXRvbWljX3N0b3JlKCZpLCAxMjMpOworICBleHBlY3RlZCA9IDEyMzsKKyAgQVNTRVJUX1RSVUUoYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhaygmaSwgJmV4cGVjdGVkLCA0NTYpKTsKKyAgQVNTRVJUX0ZBTFNFKGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWsoJmksICZleHBlY3RlZCwgNDU2KSk7CisgIEFTU0VSVF9FUSg0NTYsIGV4cGVjdGVkKTsKKworICBhdG9taWNfc3RvcmUoJmksIDEyMyk7CisgIGV4cGVjdGVkID0gMTIzOworICBBU1NFUlRfVFJVRShhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KCZpLCAmZXhwZWN0ZWQsIDQ1NiwgbWVtb3J5X29yZGVyX3JlbGF4ZWQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKSk7CisgIEFTU0VSVF9GQUxTRShhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrX2V4cGxpY2l0KCZpLCAmZXhwZWN0ZWQsIDQ1NiwgbWVtb3J5X29yZGVyX3JlbGF4ZWQsIG1lbW9yeV9vcmRlcl9yZWxheGVkKSk7CisgIEFTU0VSVF9FUSg0NTYsIGV4cGVjdGVkKTsKK30KKworVEVTVChzdGRhdG9taWMsIGF0b21pY19mZXRjaF9hZGQpIHsKKyAgYXRvbWljX2ludCBpID0gQVRPTUlDX1ZBUl9JTklUKDEyMyk7CisgIEFTU0VSVF9FUSgxMjMsIGF0b21pY19mZXRjaF9hZGQoJmksIDEpKTsKKyAgQVNTRVJUX0VRKDEyNCwgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCgmaSwgMSwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpKTsKKyAgQVNTRVJUX0VRKDEyNSwgYXRvbWljX2xvYWQoJmkpKTsKK30KKworVEVTVChzdGRhdG9taWMsIGF0b21pY19mZXRjaF9zdWIpIHsKKyAgYXRvbWljX2ludCBpID0gQVRPTUlDX1ZBUl9JTklUKDEyMyk7CisgIEFTU0VSVF9FUSgxMjMsIGF0b21pY19mZXRjaF9zdWIoJmksIDEpKTsKKyAgQVNTRVJUX0VRKDEyMiwgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdCgmaSwgMSwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpKTsKKyAgQVNTRVJUX0VRKDEyMSwgYXRvbWljX2xvYWQoJmkpKTsKK30KKworVEVTVChzdGRhdG9taWMsIGF0b21pY19mZXRjaF9vcikgeworICBhdG9taWNfaW50IGkgPSBBVE9NSUNfVkFSX0lOSVQoMHgxMDApOworICBBU1NFUlRfRVEoMHgxMDAsIGF0b21pY19mZXRjaF9vcigmaSwgMHgwMjApKTsKKyAgQVNTRVJUX0VRKDB4MTIwLCBhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQoJmksIDB4MDAzLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkpOworICBBU1NFUlRfRVEoMHgxMjMsIGF0b21pY19sb2FkKCZpKSk7Cit9CisKK1RFU1Qoc3RkYXRvbWljLCBhdG9taWNfZmV0Y2hfeG9yKSB7CisgIGF0b21pY19pbnQgaSA9IEFUT01JQ19WQVJfSU5JVCgweDEwMCk7CisgIEFTU0VSVF9FUSgweDEwMCwgYXRvbWljX2ZldGNoX3hvcigmaSwgMHgxMjApKTsKKyAgQVNTRVJUX0VRKDB4MDIwLCBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KCZpLCAweDEwMywgbWVtb3J5X29yZGVyX3JlbGF4ZWQpKTsKKyAgQVNTRVJUX0VRKDB4MTIzLCBhdG9taWNfbG9hZCgmaSkpOworfQorCitURVNUKHN0ZGF0b21pYywgYXRvbWljX2ZldGNoX2FuZCkgeworICBhdG9taWNfaW50IGkgPSBBVE9NSUNfVkFSX0lOSVQoMHgxMjMpOworICBBU1NFUlRfRVEoMHgxMjMsIGF0b21pY19mZXRjaF9hbmQoJmksIDB4MDBmKSk7CisgIEFTU0VSVF9FUSgweDAwMywgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCgmaSwgMHgyLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCkpOworICBBU1NFUlRfRVEoMHgwMDIsIGF0b21pY19sb2FkKCZpKSk7Cit9CisKKy8vIEFuZCBhIHJ1ZGltZW50YXJ5IHRlc3Qgb2YgYWNxdWlyZS1yZWxlYXNlIG1lbW9yeSBvcmRlcmluZzoKKworY29uc3RleHByIHN0YXRpYyB1aW50X2xlYXN0MzJfdCBCSUcgPSAxMDAwMDAwMHVsOyAvLyBBc3N1bWVkIGV2ZW4gYmVsb3cuCisKK3N0cnVjdCB0aHJlZV9hdG9taWNzIHsKKyAgYXRvbWljX3VpbnRfbGVhc3QzMl90IHg7CisgIGNoYXIgYVsxMjNdOyAgLy8gRXZlcnl0aGluZyBpbiBkaWZmZXJlbnQgY2FjaGUgbGluZXMsCisgICAgICAgICAgICAgICAgLy8gaW5jcmVhc2UgY2hhbmNlIG9mIGNvbXBpbGVyIGdldHRpbmcgYWxpZ25tZW50IHdyb25nLgorICBhdG9taWNfdWludF9sZWFzdDMyX3QgeTsKKyAgY2hhciBiWzQwMTNdOworICBhdG9taWNfdWludF9sZWFzdDMyX3QgejsKK307CisKKy8vIFZlcnkgc2ltcGxlIGFjcXVpcmUvcmVsZWFzZSBtZW1vcnkgb3JkZXJpbmcgc2FuaXR5IGNoZWNrLgorc3RhdGljIHZvaWQqIHdyaXRlcih2b2lkKiBhcmcpIHsKKyAgdGhyZWVfYXRvbWljcyogYSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dGhyZWVfYXRvbWljcyo+KGFyZyk7CisgIGZvciAodWludF9sZWFzdDMyX3QgaSA9IDA7IGkgPD0gQklHOyBpKz0yKSB7CisgICAgYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZhLT54LCBpLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZhLT56LCBpLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZhLT55LCBpLCBtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZhLT54LCBpKzEsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICBhdG9taWNfc3RvcmVfZXhwbGljaXQoJmEtPnosIGkrMSwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIGF0b21pY19zdG9yZV9leHBsaWNpdCgmYS0+eSwgaSsxLCBtZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkKiByZWFkZXIodm9pZCogYXJnKSB7CisgIHRocmVlX2F0b21pY3MqIGEgPSByZWludGVycHJldF9jYXN0PHRocmVlX2F0b21pY3MqPihhcmcpOworICB1aW50X2xlYXN0MzJfdCB4dmFsID0gMCwgeXZhbCA9IDAsIHp2YWwgPSAwOworICBzaXplX3QgcmVwZWF0ID0gMDsKKyAgc2l6ZV90IHJlcGVhdF9saW1pdCA9IDEwMDA7CisgIHdoaWxlICh5dmFsICE9IEJJRyArIDEpIHsKKyAgICB5dmFsID0gYXRvbWljX2xvYWRfZXhwbGljaXQoJmEtPnksIG1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgICB6dmFsID0gYXRvbWljX2xvYWRfZXhwbGljaXQoJmEtPnosIG1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICB4dmFsID0gYXRvbWljX2xvYWRfZXhwbGljaXQoJmEtPngsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAvLyBJZiB3ZSBzZWUgYSBnaXZlbiB2YWx1ZSBvZiB5LCB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nCisgICAgLy8gc3RvcmVzIHRvIHogYW5kIHgsIG9yIGxhdGVyIG9uZXMsIHNob3VsZCBhbHNvIGJlIHZpc2libGUuCisgICAgaWYgKHp2YWwgPCB5dmFsKSB7CisgICAgICAvLyBDYW50IGp1c3QgQVNTRVJULCBzaW5jZSB3ZSBhcmUgaW4gYSBub24tdm9pZCBmdW5jdGlvbi4KKyAgICAgIEFERF9GQUlMVVJFKCkgPDwgImFjcXVpcmUtcmVsZWFzZSBvcmRlcmluZyB2aW9sYXRpb246ICIKKyAgICAgICAgICAgICAgICAgICAgPDwgenZhbCA8PCAiIDwgIiA8PCB5dmFsIDw8ICIsICIgPDwgeHZhbCA8PCAiXG4iOworICAgICAgcmV0dXJuIDA7IC8vIE9ubHkgcmVwb3J0IG9uY2UuCisgICAgfQorICAgIGlmICh4dmFsIDwgeXZhbCkgeworICAgICAgLy8gQ2FudCBqdXN0IEFTU0VSVCwgc2luY2Ugd2UgYXJlIGluIGEgbm9uLXZvaWQgZnVuY3Rpb24uCisgICAgICBBRERfRkFJTFVSRSgpIDw8ICJhY3F1aXJlLXJlbGVhc2Ugb3JkZXJpbmcgdmlvbGF0aW9uOiAiCisgICAgICAgICAgICAgICAgICAgIDw8IHh2YWwgPDwgIiA8ICIgPDwgeXZhbCA8PCAiLCAiIDw8IHp2YWwgPDwgICJcbiI7CisgICAgICByZXR1cm4gMDsgLy8gT25seSByZXBvcnQgb25jZS4KKyAgICB9CisgICAgaWYgKHJlcGVhdCA8IHJlcGVhdF9saW1pdCkgKytyZXBlYXQ7CisgIH0KKyAgLy8gVGhlIGZvbGxvd2luZyBhc3NlcnRpb24gaXMgbm90IHRlY2huaWNhbGx5IGd1YXJhbnRlZWQgdG8gaG9sZC4KKyAgLy8gQnV0IGlmIGl0IGZhaWxzIHRvIGhvbGQsIHRoaXMgdGVzdCB3YXMgdXNlbGVzcywgYW5kIHdlIGhhdmUgYQorICAvLyBzZXJpb3VzIHNjaGVkdWxpbmcgaXNzdWUgdGhhdCB3ZSBzaG91bGQgcHJvYmFibHkga25vdyBhYm91dC4KKyAgRVhQRUNUX0VRKHJlcGVhdCwgcmVwZWF0X2xpbWl0KTsKKyAgcmV0dXJuIDA7Cit9CisKK1RFU1Qoc3RkYXRvbWljLCBvcmRlcmluZykgeworICAvLyBSdW4gYSBtZW1vcnkgb3JkZXJpbmcgc2FuaXR5IHRlc3QuCisgIHZvaWQqIHJlc3VsdDsKKyAgdGhyZWVfYXRvbWljcyBhOworICBhdG9taWNfaW5pdCgmYS54LCAwdWwpOworICBhdG9taWNfaW5pdCgmYS55LCAwdWwpOworICBhdG9taWNfaW5pdCgmYS56LCAwdWwpOworICBwdGhyZWFkX3QgdDEsdDI7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NyZWF0ZSgmdDEsIDAsIHJlYWRlciwgJmEpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY3JlYXRlKCZ0MiwgMCwgd3JpdGVyLCAmYSkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9qb2luKHQxLCAmcmVzdWx0KSk7CisgIEVYUEVDVF9FUSgwLCByZXN1bHQpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9qb2luKHQyLCAmcmVzdWx0KSk7CisgIEVYUEVDVF9FUSgwLCByZXN1bHQpOworICBFWFBFQ1RfRVEoYXRvbWljX2xvYWRfZXhwbGljaXQoJmEueCwgbWVtb3J5X29yZGVyX2NvbnN1bWUpLCBCSUcgKyAxKTsKKyAgRVhQRUNUX0VRKGF0b21pY19sb2FkX2V4cGxpY2l0KCZhLnksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KSwgQklHICsgMSk7CisgIEVYUEVDVF9FUShhdG9taWNfbG9hZCgmYS56KSwgQklHICsgMSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zdGRpbnRfdGVzdC5jcHAgYi90ZXN0cy9zdGRpbnRfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRhZmVlMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N0ZGludF90ZXN0LmNwcApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworVEVTVChzdGRpbnRfdHlwZXMsIHR5cGVfc2l6ZXMpIHsKKyAgQVNTRVJUX0VRKDFVLCBzaXplb2YoaW50X2Zhc3Q4X3QpKTsKKyAgQVNTRVJUX0VRKDhVLCBzaXplb2YoaW50X2Zhc3Q2NF90KSk7CisgIEFTU0VSVF9FUSgxVSwgc2l6ZW9mKHVpbnRfZmFzdDhfdCkpOworICBBU1NFUlRfRVEoOFUsIHNpemVvZih1aW50X2Zhc3Q2NF90KSk7CisjaWYgZGVmaW5lZChfX0xQNjRfXykKKyAgQVNTRVJUX0VRKDhVLCBzaXplb2YoaW50X2Zhc3QxNl90KSk7CisgIEFTU0VSVF9FUSg4VSwgc2l6ZW9mKGludF9mYXN0MzJfdCkpOworICBBU1NFUlRfRVEoOFUsIHNpemVvZih1aW50X2Zhc3QxNl90KSk7CisgIEFTU0VSVF9FUSg4VSwgc2l6ZW9mKHVpbnRfZmFzdDMyX3QpKTsKKyNlbHNlCisgIEFTU0VSVF9FUSg0VSwgc2l6ZW9mKGludF9mYXN0MTZfdCkpOworICBBU1NFUlRfRVEoNFUsIHNpemVvZihpbnRfZmFzdDMyX3QpKTsKKyAgQVNTRVJUX0VRKDRVLCBzaXplb2YodWludF9mYXN0MTZfdCkpOworICBBU1NFUlRfRVEoNFUsIHNpemVvZih1aW50X2Zhc3QzMl90KSk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0ZGlvX3Rlc3QuY3BwIGIvdGVzdHMvc3RkaW9fdGVzdC5jcHAKaW5kZXggYmQzYzU0OC4uOGM4YzIzNSAxMDA2NDQKLS0tIGEvdGVzdHMvc3RkaW9fdGVzdC5jcHAKKysrIGIvdGVzdHMvc3RkaW9fdGVzdC5jcHAKQEAgLTE3LDExICsxNywxNyBAQAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCisjaW5jbHVkZSAiVGVtcG9yYXJ5RmlsZS5oIgogCiBURVNUKHN0ZGlvLCB0bXBmaWxlX2ZpbGVub19mcHJpbnRmX3Jld2luZF9mZ2V0cykgewogICBGSUxFKiBmcCA9IHRtcGZpbGUoKTsKQEAgLTQ4LDYgKzU0LDI0IEBACiAgIGZjbG9zZShmcCk7CiB9CiAKK1RFU1Qoc3RkaW8sIGRwcmludGYpIHsKKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKworICBpbnQgcmMgPSBkcHJpbnRmKHRmLmZkLCAiaGVsbG9cbiIpOworICBBU1NFUlRfRVEocmMsIDYpOworCisgIGxzZWVrKHRmLmZkLCBTRUVLX1NFVCwgMCk7CisgIEZJTEUqIHRmaWxlID0gZmRvcGVuKHRmLmZkLCAiciIpOworICBBU1NFUlRfVFJVRSh0ZmlsZSAhPSBOVUxMKTsKKworICBjaGFyIGJ1Zls3XTsKKyAgQVNTRVJUX0VRKGJ1ZiwgZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgdGZpbGUpKTsKKyAgQVNTRVJUX1NUUkVRKCJoZWxsb1xuIiwgYnVmKTsKKyAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzbid0IGFueXRoaW5nIGVsc2UgaW4gdGhlIGZpbGUuCisgIEFTU0VSVF9FUShOVUxMLCBmZ2V0cyhidWYsIHNpemVvZihidWYpLCB0ZmlsZSkpOworICBmY2xvc2UodGZpbGUpOworfQorCiBURVNUKHN0ZGlvLCBnZXRkZWxpbSkgewogICBGSUxFKiBmcCA9IHRtcGZpbGUoKTsKICAgQVNTRVJUX1RSVUUoZnAgIT0gTlVMTCk7CkBAIC0xMDAsMTQgKzEyNCwxMiBAQAogICBBU1NFUlRfRVEoZ2V0ZGVsaW0oJmJ1ZmZlciwgTlVMTCwgJyAnLCBmcCksIC0xKTsKICAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOwogCi0gIC8vIFRoZSBzdHJlYW0gY2FuJ3QgYmUgY2xvc2VkLgotICBmY2xvc2UoZnApOworICAvLyBUaGUgdW5kZXJseWluZyBmZCBjYW4ndCBiZSBjbG9zZWQuCisgIEFTU0VSVF9FUSgwLCBjbG9zZShmaWxlbm8oZnApKSk7CiAgIGVycm5vID0gMDsKICAgQVNTRVJUX0VRKGdldGRlbGltKCZidWZmZXIsICZidWZmZXJfbGVuZ3RoLCAnICcsIGZwKSwgLTEpOwotICAvLyBnbGliYyBzb21ldGltZXMgZG9lc24ndCBzZXQgZXJybm8gaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UuCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBBU1NFUlRfRVEoRUJBREYsIGVycm5vKTsKLSNlbmRpZgorICBmY2xvc2UoZnApOwogfQogCiBURVNUKHN0ZGlvLCBnZXRsaW5lKSB7CkBAIC0xNjksMTQgKzE5MSwxMiBAQAogICBBU1NFUlRfRVEoZ2V0bGluZSgmYnVmZmVyLCBOVUxMLCBmcCksIC0xKTsKICAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOwogCi0gIC8vIFRoZSBzdHJlYW0gY2FuJ3QgYmUgY2xvc2VkLgotICBmY2xvc2UoZnApOworICAvLyBUaGUgdW5kZXJseWluZyBmZCBjYW4ndCBiZSBjbG9zZWQuCisgIEFTU0VSVF9FUSgwLCBjbG9zZShmaWxlbm8oZnApKSk7CiAgIGVycm5vID0gMDsKICAgQVNTRVJUX0VRKGdldGxpbmUoJmJ1ZmZlciwgJmJ1ZmZlcl9sZW5ndGgsIGZwKSwgLTEpOwotICAvLyBnbGliYyBzb21ldGltZXMgZG9lc24ndCBzZXQgZXJybm8gaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UuCi0jaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICBBU1NFUlRfRVEoRUJBREYsIGVycm5vKTsKLSNlbmRpZgorICBmY2xvc2UoZnApOwogfQogCiBURVNUKHN0ZGlvLCBwcmludGZfc3NpemVfdCkgewpAQCAtMTkxLDE3ICsyMTEsNDQgQEAKICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV6ZCIsIHYpOwogfQogCi0jaWYgIWRlZmluZWQoX19HTElCQ19fKQotVEVTVChzdGRpbywgc25wcmludGZfbl9mb3JtYXRfc3BlY2lmaWVyX25vdF9pbXBsZW1lbnRlZCkgewotICBjaGFyIGJ1ZlszMl07Ci0gIGludCBpID0gMDsKLSAgLy8gV2UgZGVsaWJlcmF0ZWx5IGRvbid0IGltcGxlbWVudCAlbiwgc28gaXQncyB0cmVhdGVkIGxpa2UKLSAgLy8gYW55IG90aGVyIHVucmVjb2duaXplZCBmb3JtYXQgc3BlY2lmaWVyLgotICBFWFBFQ1RfRVEoNSwgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImEgJW4gYiIsICZpKSk7Ci0gIEVYUEVDVF9FUSgwLCBpKTsKLSAgRVhQRUNUX1NUUkVRKCJhIG4gYiIsIGJ1Zik7CisvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD02NDg4NgorVEVTVChzdGRpbywgc25wcmludGZfYSkgeworICBjaGFyIGJ1ZltCVUZTSVpdOworICBFWFBFQ1RfRVEoMjMsIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICI8JWE+IiwgOTk5MC4yMzUpKTsKKyAgRVhQRUNUX1NUUkVRKCI8MHgxLjM4MzFlMTQ3YWUxNDhwKzEzPiIsIGJ1Zik7CiB9CisKK1RFU1Qoc3RkaW8sIHNucHJpbnRmX2xjKSB7CisgIGNoYXIgYnVmW0JVRlNJWl07CisgIHdpbnRfdCB3YyA9IEwnYSc7CisgIEVYUEVDVF9FUSgzLCBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiPCVsYz4iLCB3YykpOworICBFWFBFQ1RfU1RSRVEoIjxhPiIsIGJ1Zik7Cit9CisKK1RFU1Qoc3RkaW8sIHNucHJpbnRmX2xzKSB7CisgIGNoYXIgYnVmW0JVRlNJWl07CisgIHdjaGFyX3QqIHdzID0gTlVMTDsKKyAgRVhQRUNUX0VRKDgsIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICI8JWxzPiIsIHdzKSk7CisgIEVYUEVDVF9TVFJFUSgiPChudWxsKT4iLCBidWYpOworCisgIHdjaGFyX3QgY2hhcnNbXSA9IHsgTCdoJywgTCdpJywgMCB9OworICB3cyA9IGNoYXJzOworICBFWFBFQ1RfRVEoNCwgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjwlbHM+Iiwgd3MpKTsKKyAgRVhQRUNUX1NUUkVRKCI8aGk+IiwgYnVmKTsKK30KKworVEVTVChzdGRpbywgc25wcmludGZfbikgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgLy8gaHR0cDovL2IvMTQ0OTIxMzUKKyAgY2hhciBidWZbMzJdOworICBpbnQgaSA9IDEyMzQ7CisgIEVYUEVDVF9FUSg1LCBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiYSAlbiBiIiwgJmkpKTsKKyAgRVhQRUNUX0VRKDEyMzQsIGkpOworICBFWFBFQ1RfU1RSRVEoImEgbiBiIiwgYnVmKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOwogI2VuZGlmCit9CiAKIFRFU1Qoc3RkaW8sIHNucHJpbnRmX3Ntb2tlKSB7CiAgIGNoYXIgYnVmW0JVRlNJWl07CkBAIC0yODMsOSArMzMwLDkgQEAKICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImElZCwlcHoiLCA1LCBwKTsKICNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgIEVYUEVDVF9TVFJFUSgiYTUsMHgweiIsIGJ1Zik7Ci0jZWxzZQorI2Vsc2UgLy8gX19CSU9OSUNfXwogICBFWFBFQ1RfU1RSRVEoImE1LChuaWwpeiIsIGJ1Zik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiAKICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImElbGxkLCVkLCVkLCVkeiIsIDB4MTAwMDAwMDAwMExMLCA2LCA3LCA4KTsKICAgRVhQRUNUX1NUUkVRKCJhNjg3MTk0NzY3MzYsNiw3LDh6IiwgYnVmKTsKQEAgLTI5NSw2ICszNDIsMjcgQEAKIAogICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiYV8lZ19iIiwgMy4xNCk7CiAgIEVYUEVDVF9TVFJFUSgiYV8zLjE0X2IiLCBidWYpOworCisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMSRzICUxJHMiLCAicHJpbnRfbWVfdHdpY2UiKTsKKyAgRVhQRUNUX1NUUkVRKCJwcmludF9tZV90d2ljZSBwcmludF9tZV90d2ljZSIsIGJ1Zik7Cit9CisKK1RFU1Qoc3RkaW8sIHNucHJpbnRmX2Zfc3BlY2lhbCkgeworICBjaGFyIGJ1ZltCVUZTSVpdOworICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWYiLCBuYW5mKCIiKSk7CisgIEVYUEVDVF9TVFJDQVNFRVEoIk5hTiIsIGJ1Zik7CisKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVmIiwgSFVHRV9WQUxGKTsKKyAgRVhQRUNUX1NUUkNBU0VFUSgiSW5mIiwgYnVmKTsKK30KKworVEVTVChzdGRpbywgc25wcmludGZfZ19zcGVjaWFsKSB7CisgIGNoYXIgYnVmW0JVRlNJWl07CisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZyIsIG5hbigiIikpOworICBFWFBFQ1RfU1RSQ0FTRUVRKCJOYU4iLCBidWYpOworCisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZyIsIEhVR0VfVkFMKTsKKyAgRVhQRUNUX1NUUkNBU0VFUSgiSW5mIiwgYnVmKTsKIH0KIAogVEVTVChzdGRpbywgc25wcmludGZfZF9JTlRfTUFYKSB7CkBAIC0zNDEsNiArNDA5LDcwIEBACiAgIEVYUEVDVF9TVFJFUSgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiLCBidWYpOwogfQogCitURVNUKHN0ZGlvLCBzbnByaW50Zl9lKSB7CisgIGNoYXIgYnVmW0JVRlNJWl07CisKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVlIiwgMS41KTsKKyAgRVhQRUNUX1NUUkVRKCIxLjUwMDAwMGUrMDAiLCBidWYpOworCisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlTGUiLCAxLjVsKTsKKyAgRVhQRUNUX1NUUkVRKCIxLjUwMDAwMGUrMDAiLCBidWYpOworfQorCitURVNUKHN0ZGlvLCBzbnByaW50Zl9uZWdhdGl2ZV96ZXJvXzUwODQyOTIpIHsKKyAgY2hhciBidWZbQlVGU0laXTsKKworICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWYiLCAtMC4wKTsKKyAgRVhQRUNUX1NUUkVRKCItMC4wMDAwMDAiLCBidWYpOworfQorCitURVNUKHN0ZGlvLCBzbnByaW50Zl91dGY4XzE1NDM5NTU0KSB7CisgIGxvY2FsZV90IGNsb2MgPSBuZXdsb2NhbGUoTENfQUxMLCAiQy5VVEYtOCIsIDApOworICBsb2NhbGVfdCBvbGRfbG9jYWxlID0gdXNlbG9jYWxlKGNsb2MpOworCisgIC8vIGh0dHA6Ly9iLzE1NDM5NTU0CisgIGNoYXIgYnVmW0JVRlNJWl07CisKKyAgLy8gMS1ieXRlIGNoYXJhY3Rlci4KKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkeCVkIiwgMSwgMik7CisgIEVYUEVDVF9TVFJFUSgiMXgyIiwgYnVmKTsKKyAgLy8gMi1ieXRlIGNoYXJhY3Rlci4KKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkXHhjMlx4YTIlZCIsIDEsIDIpOworICBFWFBFQ1RfU1RSRVEoIjHCojIiLCBidWYpOworICAvLyAzLWJ5dGUgY2hhcmFjdGVyLgorICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWRceGUyXHg4Mlx4YWMlZCIsIDEsIDIpOworICBFWFBFQ1RfU1RSRVEoIjHigqwyIiwgYnVmKTsKKyAgLy8gNC1ieXRlIGNoYXJhY3Rlci4KKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkXHhmMFx4YTRceGFkXHhhMiVkIiwgMSwgMik7CisgIEVYUEVDVF9TVFJFUSgiMfCkraIyIiwgYnVmKTsKKworICB1c2Vsb2NhbGUob2xkX2xvY2FsZSk7CisgIGZyZWVsb2NhbGUoY2xvYyk7Cit9CisKK1RFU1Qoc3RkaW8sIGZwcmludGZfZmFpbHVyZXNfNzIyOTUyMCkgeworICAvLyBodHRwOi8vYi83MjI5NTIwCisgIEZJTEUqIGZwOworCisgIC8vIFVuYnVmZmVyZWQgY2FzZSB3aGVyZSB0aGUgZnByaW50ZigzKSBpdHNlbGYgZmFpbHMuCisgIEFTU0VSVF9ORShudWxscHRyLCBmcCA9IHRtcGZpbGUoKSk7CisgIHNldGJ1ZihmcCwgTlVMTCk7CisgIEFTU0VSVF9FUSg0LCBmcHJpbnRmKGZwLCAiZXBpYyIpKTsKKyAgQVNTRVJUX0VRKDAsIGNsb3NlKGZpbGVubyhmcCkpKTsKKyAgQVNTRVJUX0VRKC0xLCBmcHJpbnRmKGZwLCAiZmFpbCIpKTsKKyAgQVNTRVJUX0VRKC0xLCBmY2xvc2UoZnApKTsKKworICAvLyBCdWZmZXJlZCBjYXNlIHdoZXJlIHdlIHdvbid0IG5vdGljZSB1bnRpbCB0aGUgZmNsb3NlKDMpLgorICAvLyBJdCdzIGxpa2VseSB0aGlzIGlzIHdoYXQgd2FzIGFjdHVhbGx5IHNlZW4gaW4gaHR0cDovL2IvNzIyOTUyMCwKKyAgLy8gYW5kIHRoYXQgZXhwZWN0aW5nIGZwcmludGYgdG8gZmFpbCBpcyBzZXR0aW5nIHlvdXJzZWxmIHVwIGZvcgorICAvLyBkaXNhcHBvaW50bWVudC4gUmVtZW1iZXIgdG8gY2hlY2sgZmNsb3NlKDMpJ3MgcmV0dXJuIHZhbHVlLCBraWRzIQorICBBU1NFUlRfTkUobnVsbHB0ciwgZnAgPSB0bXBmaWxlKCkpOworICBBU1NFUlRfRVEoNCwgZnByaW50ZihmcCwgImVwaWMiKSk7CisgIEFTU0VSVF9FUSgwLCBjbG9zZShmaWxlbm8oZnApKSk7CisgIEFTU0VSVF9FUSg0LCBmcHJpbnRmKGZwLCAiZmFpbCIpKTsKKyAgQVNTRVJUX0VRKC0xLCBmY2xvc2UoZnApKTsKK30KKwogVEVTVChzdGRpbywgcG9wZW4pIHsKICAgRklMRSogZnAgPSBwb3BlbigiY2F0IC9wcm9jL3ZlcnNpb24iLCAiciIpOwogICBBU1NFUlRfVFJVRShmcCAhPSBOVUxMKTsKQEAgLTM3MCwzICs1MDIsMTc4IEBACiAgIEFTU0VSVF9FUShFT0YsIHB1dGMoJ3gnLCBmcCkpOwogICBmY2xvc2UoZnApOwogfQorCitURVNUKHN0ZGlvLCBzc2NhbmYpIHsKKyAgY2hhciBzMVsxMjNdOworICBpbnQgaTE7CisgIGRvdWJsZSBkMTsKKyAgY2hhciBzMlsxMjNdOworICBBU1NFUlRfRVEoMywgc3NjYW5mKCIgIGhlbGxvIDEyMyAxLjIzICIsICIlcyAlaSAlbGYgJXMiLCBzMSwgJmkxLCAmZDEsIHMyKSk7CisgIEFTU0VSVF9TVFJFUSgiaGVsbG8iLCBzMSk7CisgIEFTU0VSVF9FUSgxMjMsIGkxKTsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjIzLCBkMSk7Cit9CisKK1RFU1Qoc3RkaW8sIGNhbnR3cml0ZV9FQkFERikgeworICAvLyBJZiB3ZSBvcGVuIGEgZmlsZSByZWFkLW9ubHkuLi4KKyAgRklMRSogZnAgPSBmb3BlbigiL3Byb2MvdmVyc2lvbiIsICJyIik7CisKKyAgLy8gLi4uYWxsIGF0dGVtcHRzIHRvIHdyaXRlIHRvIHRoYXQgZmlsZSBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCisKKyAgLy8gVGhleSBzaG91bGQgYWxzbyBzZXQgZXJybm8gdG8gRUJBREYuIFRoaXMgaXNuJ3QgUE9TSVgsIGJ1dCBpdCdzIHRyYWRpdGlvbmFsLgorICAvLyBnbGliYyBnZXRzIHRoZSB3aWRlLWNoYXJhY3RlciBmdW5jdGlvbnMgd3JvbmcuCisKKyAgZXJybm8gPSAwOworICBFWFBFQ1RfRVEoRU9GLCBwdXRjKCd4JywgZnApKTsKKyAgRVhQRUNUX0VRKEVCQURGLCBlcnJubyk7CisKKyAgZXJybm8gPSAwOworICBFWFBFQ1RfRVEoRU9GLCBmcHJpbnRmKGZwLCAiaGVsbG8iKSk7CisgIEVYUEVDVF9FUShFQkFERiwgZXJybm8pOworCisgIGVycm5vID0gMDsKKyAgRVhQRUNUX0VRKEVPRiwgZndwcmludGYoZnAsIEwiaGVsbG8iKSk7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBFWFBFQ1RfRVEoRUJBREYsIGVycm5vKTsKKyNlbmRpZgorCisgIGVycm5vID0gMDsKKyAgRVhQRUNUX0VRKDBVLCBmd3JpdGUoImhlbGxvIiwgMSwgMiwgZnApKTsKKyAgRVhQRUNUX0VRKEVCQURGLCBlcnJubyk7CisKKyAgZXJybm8gPSAwOworICBFWFBFQ1RfRVEoRU9GLCBmcHV0cygiaGVsbG8iLCBmcCkpOworICBFWFBFQ1RfRVEoRUJBREYsIGVycm5vKTsKKworICBlcnJubyA9IDA7CisgIEVYUEVDVF9FUShXRU9GLCBmcHV0d2MoTCd4JywgZnApKTsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIEVYUEVDVF9FUShFQkFERiwgZXJybm8pOworI2VuZGlmCit9CisKKy8vIFRlc3RzIHRoYXQgd2UgY2FuIG9ubHkgaGF2ZSBhIGNvbnNpc3RlbnQgYW5kIGNvcnJlY3QgZnBvc190IHdoZW4gdXNpbmcKKy8vIGYqcG9zIGZ1bmN0aW9ucyAoaS5lLiBmcG9zIGRvZXNuJ3QgZ2V0IGluc2lkZSBhIG11bHRpIGJ5dGUgY2hhcmFjdGVyKS4KK1RFU1Qoc3RkaW8sIGNvbnNpc3RlbnRfZnBvc190KSB7CisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICBGSUxFKiBmcCA9IHRtcGZpbGUoKTsKKyAgQVNTRVJUX1RSVUUoZnAgIT0gTlVMTCk7CisKKyAgd2NoYXJfdCBtYl9vbmVfYnl0ZXMgPSBMJ2gnOworICB3Y2hhcl90IG1iX3R3b19ieXRlcyA9IDB4MDBhMjsKKyAgd2NoYXJfdCBtYl90aHJlZV9ieXRlcyA9IDB4MjBhYzsKKyAgd2NoYXJfdCBtYl9mb3VyX2J5dGVzID0gMHgyNGI2MjsKKworICAvLyBXcml0ZSB0byBmaWxlLgorICBBU1NFUlRfRVEobWJfb25lX2J5dGVzLCBzdGF0aWNfY2FzdDx3Y2hhcl90PihmcHV0d2MobWJfb25lX2J5dGVzLCBmcCkpKTsKKyAgQVNTRVJUX0VRKG1iX3R3b19ieXRlcywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oZnB1dHdjKG1iX3R3b19ieXRlcywgZnApKSk7CisgIEFTU0VSVF9FUShtYl90aHJlZV9ieXRlcywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oZnB1dHdjKG1iX3RocmVlX2J5dGVzLCBmcCkpKTsKKyAgQVNTRVJUX0VRKG1iX2ZvdXJfYnl0ZXMsIHN0YXRpY19jYXN0PHdjaGFyX3Q+KGZwdXR3YyhtYl9mb3VyX2J5dGVzLCBmcCkpKTsKKworICByZXdpbmQoZnApOworCisgIC8vIFJlY29yZCBlYWNoIGNoYXJhY3RlciBwb3NpdGlvbi4KKyAgZnBvc190IHBvczE7CisgIGZwb3NfdCBwb3MyOworICBmcG9zX3QgcG9zMzsKKyAgZnBvc190IHBvczQ7CisgIGZwb3NfdCBwb3M1OworICBFWFBFQ1RfRVEoMCwgZmdldHBvcyhmcCwgJnBvczEpKTsKKyAgQVNTRVJUX0VRKG1iX29uZV9ieXRlcywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oZmdldHdjKGZwKSkpOworICBFWFBFQ1RfRVEoMCwgZmdldHBvcyhmcCwgJnBvczIpKTsKKyAgQVNTRVJUX0VRKG1iX3R3b19ieXRlcywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oZmdldHdjKGZwKSkpOworICBFWFBFQ1RfRVEoMCwgZmdldHBvcyhmcCwgJnBvczMpKTsKKyAgQVNTRVJUX0VRKG1iX3RocmVlX2J5dGVzLCBzdGF0aWNfY2FzdDx3Y2hhcl90PihmZ2V0d2MoZnApKSk7CisgIEVYUEVDVF9FUSgwLCBmZ2V0cG9zKGZwLCAmcG9zNCkpOworICBBU1NFUlRfRVEobWJfZm91cl9ieXRlcywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oZmdldHdjKGZwKSkpOworICBFWFBFQ1RfRVEoMCwgZmdldHBvcyhmcCwgJnBvczUpKTsKKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgLy8gQmlvbmljJ3MgZnBvc190IGlzIGp1c3QgYW4gYWxpYXMgZm9yIG9mZl90LiBUaGlzIGlzIGluaGVyaXRlZCBmcm9tIE9wZW5CU0QKKyAgLy8gdXBzdHJlYW0uIEdsaWJjIGRpZmZlcnMgYnkgc3RvcmluZyB0aGUgbWJzdGF0ZV90IGluc2lkZSBpdHMgZnBvc190LiBJbgorICAvLyBCaW9uaWMgKGFuZCB1cHN0cmVhbSBPcGVuQlNEKSB0aGUgbWJzdGF0ZV90IGlzIHN0b3JlZCBpbnNpZGUgdGhlIEZJTEUKKyAgLy8gc3RydWN0dXJlLgorICBBU1NFUlRfRVEoMCwgc3RhdGljX2Nhc3Q8b2ZmX3Q+KHBvczEpKTsKKyAgQVNTRVJUX0VRKDEsIHN0YXRpY19jYXN0PG9mZl90Pihwb3MyKSk7CisgIEFTU0VSVF9FUSgzLCBzdGF0aWNfY2FzdDxvZmZfdD4ocG9zMykpOworICBBU1NFUlRfRVEoNiwgc3RhdGljX2Nhc3Q8b2ZmX3Q+KHBvczQpKTsKKyAgQVNTRVJUX0VRKDEwLCBzdGF0aWNfY2FzdDxvZmZfdD4ocG9zNSkpOworI2VuZGlmCisKKyAgLy8gRXhlcmNpc2UgYmFjayBhbmQgZm9ydGggbW92ZW1lbnRzIG9mIHRoZSBwb3NpdGlvbi4KKyAgQVNTRVJUX0VRKDAsIGZzZXRwb3MoZnAsICZwb3MyKSk7CisgIEFTU0VSVF9FUShtYl90d29fYnl0ZXMsIHN0YXRpY19jYXN0PHdjaGFyX3Q+KGZnZXR3YyhmcCkpKTsKKyAgQVNTRVJUX0VRKDAsIGZzZXRwb3MoZnAsICZwb3MxKSk7CisgIEFTU0VSVF9FUShtYl9vbmVfYnl0ZXMsIHN0YXRpY19jYXN0PHdjaGFyX3Q+KGZnZXR3YyhmcCkpKTsKKyAgQVNTRVJUX0VRKDAsIGZzZXRwb3MoZnAsICZwb3M0KSk7CisgIEFTU0VSVF9FUShtYl9mb3VyX2J5dGVzLCBzdGF0aWNfY2FzdDx3Y2hhcl90PihmZ2V0d2MoZnApKSk7CisgIEFTU0VSVF9FUSgwLCBmc2V0cG9zKGZwLCAmcG9zMykpOworICBBU1NFUlRfRVEobWJfdGhyZWVfYnl0ZXMsIHN0YXRpY19jYXN0PHdjaGFyX3Q+KGZnZXR3YyhmcCkpKTsKKyAgQVNTRVJUX0VRKDAsIGZzZXRwb3MoZnAsICZwb3M1KSk7CisgIEFTU0VSVF9FUShXRU9GLCBmZ2V0d2MoZnApKTsKKworICBmY2xvc2UoZnApOworfQorCisvLyBFeGVyY2lzZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBmcG9zIGFuZCBzZWVrLgorVEVTVChzdGRpbywgZnBvc190X2FuZF9zZWVrKSB7CisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICAvLyBJbiBnbGliYy0yLjE2IGZzZWVrIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBpbiB3aWRlIG1vZGUKKyAgLy8gKGh0dHBzOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTE0NTQzKS4gT25lIHdvcmthcm91bmQgaXMKKyAgLy8gdG8gY2xvc2UgYW5kIHJlLW9wZW4gdGhlIGZpbGUuIFdlIGRvIGl0IGluIG9yZGVyIHRvIG1ha2UgdGhlIHRlc3QgcGFzcworICAvLyB3aXRoIGFsbCBnbGliY3MuCisKKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKyAgRklMRSogZnAgPSBmZG9wZW4odGYuZmQsICJ3KyIpOworICBBU1NFUlRfVFJVRShmcCAhPSBOVUxMKTsKKworICB3Y2hhcl90IG1iX3R3b19ieXRlcyA9IDB4MDBhMjsKKyAgd2NoYXJfdCBtYl90aHJlZV9ieXRlcyA9IDB4MjBhYzsKKyAgd2NoYXJfdCBtYl9mb3VyX2J5dGVzID0gMHgyNGI2MjsKKworICAvLyBXcml0ZSB0byBmaWxlLgorICBBU1NFUlRfRVEobWJfdHdvX2J5dGVzLCBzdGF0aWNfY2FzdDx3Y2hhcl90PihmcHV0d2MobWJfdHdvX2J5dGVzLCBmcCkpKTsKKyAgQVNTRVJUX0VRKG1iX3RocmVlX2J5dGVzLCBzdGF0aWNfY2FzdDx3Y2hhcl90PihmcHV0d2MobWJfdGhyZWVfYnl0ZXMsIGZwKSkpOworICBBU1NFUlRfRVEobWJfZm91cl9ieXRlcywgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oZnB1dHdjKG1iX2ZvdXJfYnl0ZXMsIGZwKSkpOworCisgIGZmbHVzaChmcCk7CisgIGZjbG9zZShmcCk7CisKKyAgZnAgPSBmb3Blbih0Zi5maWxlbmFtZSwgInIiKTsKKyAgQVNTRVJUX1RSVUUoZnAgIT0gTlVMTCk7CisKKyAgLy8gU3RvcmUgYSB2YWxpZCBwb3NpdGlvbi4KKyAgZnBvc190IG1iX3R3b19ieXRlc19wb3M7CisgIEFTU0VSVF9FUSgwLCBmZ2V0cG9zKGZwLCAmbWJfdHdvX2J5dGVzX3BvcykpOworCisgIC8vIE1vdmUgaW5zaWRlIG1iX2ZvdXJfYnl0ZXMgd2l0aCBmc2Vlay4KKyAgbG9uZyBvZmZzZXRfaW5zaWRlX21iID0gNjsKKyAgQVNTRVJUX0VRKDAsIGZzZWVrKGZwLCBvZmZzZXRfaW5zaWRlX21iLCBTRUVLX1NFVCkpOworCisgIC8vIFN0b3JlIHRoZSAiaW5zaWRlIG11bHRpIGJ5dGUiIHBvc2l0aW9uLgorICBmcG9zX3QgcG9zX2luc2lkZV9tYjsKKyAgQVNTRVJUX0VRKDAsIGZnZXRwb3MoZnAsICZwb3NfaW5zaWRlX21iKSk7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICBBU1NFUlRfRVEob2Zmc2V0X2luc2lkZV9tYiwgc3RhdGljX2Nhc3Q8b2ZmX3Q+KHBvc19pbnNpZGVfbWIpKTsKKyNlbmRpZgorCisgIC8vIFJlYWRpbmcgZnJvbSB3aXRoaW4gYSBieXRlIHNob3VsZCBwcm9kdWNlIGFuIGVycm9yLgorICBBU1NFUlRfRVEoV0VPRiwgZmdldHdjKGZwKSk7CisgIEFTU0VSVF9FUShFSUxTRVEsIGVycm5vKTsKKworICAvLyBSZXZlcnRpbmcgdG8gYSB2YWxpZCBwb3NpdGlvbiBzaG91bGQgd29yay4KKyAgQVNTRVJUX0VRKDAsIGZzZXRwb3MoZnAsICZtYl90d29fYnl0ZXNfcG9zKSk7CisgIEFTU0VSVF9FUShtYl90d29fYnl0ZXMsIHN0YXRpY19jYXN0PHdjaGFyX3Q+KGZnZXR3YyhmcCkpKTsKKworICAvLyBNb3Zpbmcgd2l0aGluZyBhIG11bHRpIGJ5dGUgd2l0aCBmc2V0cG9zIHNob3VsZCB3b3JrIGJ1dCByZWFkaW5nIHNob3VsZAorICAvLyBwcm9kdWNlIGFuIGVycm9yLgorICBBU1NFUlRfRVEoMCwgZnNldHBvcyhmcCwgJnBvc19pbnNpZGVfbWIpKTsKKyAgQVNTRVJUX0VRKFdFT0YsIGZnZXR3YyhmcCkpOworICBBU1NFUlRfRVEoRUlMU0VRLCBlcnJubyk7CisKKyAgZmNsb3NlKGZwKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0ZGxpYl90ZXN0LmNwcCBiL3Rlc3RzL3N0ZGxpYl90ZXN0LmNwcAppbmRleCBmYTU5YzQxLi41NTNmMDE4IDEwMDY0NAotLS0gYS90ZXN0cy9zdGRsaWJfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3RkbGliX3Rlc3QuY3BwCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSAiVGVtcG9yYXJ5RmlsZS5oIgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxsaWJnZW4uaD4KQEAgLTIyLDYgKzIzLDkgQEAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgogCiBURVNUKHN0ZGxpYiwgZHJhbmQ0OCkgewogICBzcmFuZDQ4KDB4MDEwMjAzMDQpOwpAQCAtMzEsMjggKzM1LDI4IEBACiAgIEVYUEVDVF9ET1VCTEVfRVEoMC4wNjE2Mzc3ODMwNDczOTUwODksIGRyYW5kNDgoKSk7CiB9CiAKLVRFU1Qoc3RkbGliLCBscmFuZDQ4X3JhbmRvbV9yYW5kKSB7CitURVNUKHN0ZGxpYiwgbHJhbmQ0OCkgewogICBzcmFuZDQ4KDB4MDEwMjAzMDQpOwogICBFWFBFQ1RfRVEoMTQwOTE2MzcyMCwgbHJhbmQ0OCgpKTsKICAgRVhQRUNUX0VRKDM5Nzc2OTc0NiwgbHJhbmQ0OCgpKTsKICAgRVhQRUNUX0VRKDkwMjI2NzEyNCwgbHJhbmQ0OCgpKTsKICAgRVhQRUNUX0VRKDEzMjM2NjEzMSwgbHJhbmQ0OCgpKTsKK30KIAotI2lmIF9fQklPTklDX18KLSAgLy8gT24gYmlvbmljLCByYW5kb20oMykgaXMgZXF1aXZhbGVudCB0byBscmFuZDQ4Li4uCitURVNUKHN0ZGxpYiwgcmFuZG9tKSB7CiAgIHNyYW5kb20oMHgwMTAyMDMwNCk7Ci0gIEVYUEVDVF9FUSgxNDA5MTYzNzIwLCByYW5kb20oKSk7Ci0gIEVYUEVDVF9FUSgzOTc3Njk3NDYsIHJhbmRvbSgpKTsKLSAgRVhQRUNUX0VRKDkwMjI2NzEyNCwgcmFuZG9tKCkpOwotICBFWFBFQ1RfRVEoMTMyMzY2MTMxLCByYW5kb20oKSk7CisgIEVYUEVDVF9FUSg1NTQzNjczNSwgcmFuZG9tKCkpOworICBFWFBFQ1RfRVEoMTM5OTg2NTExNywgcmFuZG9tKCkpOworICBFWFBFQ1RfRVEoMjAzMjY0MzI4MywgcmFuZG9tKCkpOworICBFWFBFQ1RfRVEoNTcxMzI5MjE2LCByYW5kb20oKSk7Cit9CiAKLSAgLy8gLi4uYW5kIHJhbmQoMykgaXMgdGhlIGJvdHRvbSAzMiBiaXRzLgorVEVTVChzdGRsaWIsIHJhbmQpIHsKICAgc3JhbmQoMHgwMTAyMDMwNCk7Ci0gIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxpbnQ+KDE0MDkxNjM3MjApLCByYW5kKCkpOwotICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PigzOTc3Njk3NDYpLCByYW5kKCkpOwotICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50Pig5MDIyNjcxMjQpLCByYW5kKCkpOwotICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PigxMzIzNjYxMzEpLCByYW5kKCkpOwotI2VuZGlmCisgIEVYUEVDVF9FUSg1NTQzNjczNSwgcmFuZCgpKTsKKyAgRVhQRUNUX0VRKDEzOTk4NjUxMTcsIHJhbmQoKSk7CisgIEVYUEVDVF9FUSgyMDMyNjQzMjgzLCByYW5kKCkpOworICBFWFBFQ1RfRVEoNTcxMzI5MjE2LCByYW5kKCkpOwogfQogCiBURVNUKHN0ZGxpYiwgbXJhbmQ0OCkgewpAQCAtMTU3LDMgKzE2MSwyMDMgQEAKICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOwogICBBU1NFUlRfRVhJVChUZXN0QnVnNTc0MjFfbWFpbigpLCA6OnRlc3Rpbmc6OkV4aXRlZFdpdGhDb2RlKDApLCAiIik7CiB9CisKK1RFU1Qoc3RkbGliLCBta3N0ZW1wKSB7CisgIFRlbXBvcmFyeUZpbGUgdGY7CisgIHN0cnVjdCBzdGF0IHNiOworICBBU1NFUlRfRVEoMCwgZnN0YXQodGYuZmQsICZzYikpOworfQorCitURVNUKHN0ZGxpYiwgbWtzdGVtcDY0KSB7CisgIEdlbmVyaWNUZW1wb3JhcnlGaWxlPG1rc3RlbXA2ND4gdGY7CisgIHN0cnVjdCBzdGF0NjQgc2I7CisgIEFTU0VSVF9FUSgwLCBmc3RhdDY0KHRmLmZkLCAmc2IpKTsKKyAgQVNTRVJUX0VRKE9fTEFSR0VGSUxFLCBmY250bCh0Zi5mZCwgRl9HRVRGTCkgJiBPX0xBUkdFRklMRSk7Cit9CisKK1RFU1Qoc3RkbGliLCBzeXN0ZW0pIHsKKyAgaW50IHN0YXR1czsKKworICBzdGF0dXMgPSBzeXN0ZW0oImV4aXQgMCIpOworICBBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7CisgIEFTU0VSVF9FUSgwLCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKKworICBzdGF0dXMgPSBzeXN0ZW0oImV4aXQgMSIpOworICBBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7CisgIEFTU0VSVF9FUSgxLCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKK30KKworVEVTVChzdGRsaWIsIGF0b2YpIHsKKyAgQVNTRVJUX0RPVUJMRV9FUSgxLjIzLCBhdG9mKCIxLjIzIikpOworfQorCitURVNUKHN0ZGxpYiwgc3RydG9kKSB7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4yMywgc3RydG9kKCIxLjIzIiwgTlVMTCkpOworfQorCitURVNUKHN0ZGxpYiwgc3RydG9mKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjIzLCBzdHJ0b2YoIjEuMjMiLCBOVUxMKSk7Cit9CisKK1RFU1Qoc3RkbGliLCBzdHJ0b2xkKSB7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4yMywgc3RydG9sZCgiMS4yMyIsIE5VTEwpKTsKK30KKworVEVTVChzdGRsaWIsIHF1aWNrX2V4aXQpIHsKKyAgcGlkX3QgcGlkID0gZm9yaygpOworICBBU1NFUlRfTkUoLTEsIHBpZCkgPDwgc3RyZXJyb3IoZXJybm8pOworCisgIGlmIChwaWQgPT0gMCkgeworICAgIHF1aWNrX2V4aXQoOTkpOworICB9CisKKyAgaW50IHN0YXR1czsKKyAgQVNTRVJUX0VRKHBpZCwgd2FpdHBpZChwaWQsICZzdGF0dXMsIDApKTsKKyAgQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOworICBBU1NFUlRfRVEoOTksIFdFWElUU1RBVFVTKHN0YXR1cykpOworfQorCitzdGF0aWMgaW50IHF1aWNrX2V4aXRfc3RhdHVzID0gMDsKKworc3RhdGljIHZvaWQgcXVpY2tfZXhpdF8xKHZvaWQpIHsKKyAgQVNTRVJUX0VRKHF1aWNrX2V4aXRfc3RhdHVzLCAwKTsKKyAgcXVpY2tfZXhpdF9zdGF0dXMgPSAxOworfQorCitzdGF0aWMgdm9pZCBxdWlja19leGl0XzIodm9pZCkgeworICBBU1NFUlRfRVEocXVpY2tfZXhpdF9zdGF0dXMsIDEpOworfQorCitzdGF0aWMgdm9pZCBub3RfcnVuKHZvaWQpIHsKKyAgRkFJTCgpOworfQorCitURVNUKHN0ZGxpYiwgYXRfcXVpY2tfZXhpdCkgeworICBwaWRfdCBwaWQgPSBmb3JrKCk7CisgIEFTU0VSVF9ORSgtMSwgcGlkKSA8PCBzdHJlcnJvcihlcnJubyk7CisKKyAgaWYgKHBpZCA9PSAwKSB7CisgICAgQVNTRVJUX0VRKGF0X3F1aWNrX2V4aXQocXVpY2tfZXhpdF8yKSwgMCk7CisgICAgQVNTRVJUX0VRKGF0X3F1aWNrX2V4aXQocXVpY2tfZXhpdF8xKSwgMCk7CisgICAgYXRleGl0KG5vdF9ydW4pOworICAgIHF1aWNrX2V4aXQoOTkpOworICB9CisKKyAgaW50IHN0YXR1czsKKyAgQVNTRVJUX0VRKHBpZCwgd2FpdHBpZChwaWQsICZzdGF0dXMsIDApKTsKKyAgQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOworICBBU1NFUlRfRVEoOTksIFdFWElUU1RBVFVTKHN0YXR1cykpOworfQorCitURVNUKHVuaXN0ZCwgX0V4aXQpIHsKKyAgaW50IHBpZCA9IGZvcmsoKTsKKyAgQVNTRVJUX05FKC0xLCBwaWQpIDw8IHN0cmVycm9yKGVycm5vKTsKKworICBpZiAocGlkID09IDApIHsKKyAgICBfRXhpdCg5OSk7CisgIH0KKworICBpbnQgc3RhdHVzOworICBBU1NFUlRfRVEocGlkLCB3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCkpOworICBBU1NFUlRfVFJVRShXSUZFWElURUQoc3RhdHVzKSk7CisgIEFTU0VSVF9FUSg5OSwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7Cit9CisKK1RFU1Qoc3RkbGliLCBwdHlfc21va2UpIHsKKyAgLy8gZ2V0cHQgcmV0dXJucyBhIHB0eSB3aXRoIE9fUkRXUnxPX05PQ1RUWS4KKyAgaW50IGZkID0gZ2V0cHQoKTsKKyAgQVNTRVJUX05FKC0xLCBmZCk7CisKKyAgLy8gZ3JhbnRwdCBpcyBhIG5vLW9wLgorICBBU1NFUlRfRVEoMCwgZ3JhbnRwdChmZCkpOworCisgIC8vIHB0c25hbWVfciBzaG91bGQgc3RhcnQgIi9kZXYvcHRzLyIuCisgIGNoYXIgbmFtZV9yWzEyOF07CisgIEFTU0VSVF9FUSgwLCBwdHNuYW1lX3IoZmQsIG5hbWVfciwgc2l6ZW9mKG5hbWVfcikpKTsKKyAgbmFtZV9yWzldID0gMDsKKyAgQVNTRVJUX1NUUkVRKCIvZGV2L3B0cy8iLCBuYW1lX3IpOworCisgIGNsb3NlKGZkKTsKK30KKworVEVTVChzdGRsaWIsIHBvc2l4X29wZW5wdCkgeworICBpbnQgZmQgPSBwb3NpeF9vcGVucHQoT19SRFdSfE9fTk9DVFRZfE9fQ0xPRVhFQyk7CisgIEFTU0VSVF9ORSgtMSwgZmQpOworICBjbG9zZShmZCk7Cit9CisKK1RFU1Qoc3RkbGliLCBwdHNuYW1lX3JfRU5PVFRZKSB7CisgIGVycm5vID0gMDsKKyAgY2hhciBidWZbMTI4XTsKKyAgQVNTRVJUX0VRKEVOT1RUWSwgcHRzbmFtZV9yKFNURE9VVF9GSUxFTk8sIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgQVNTRVJUX0VRKEVOT1RUWSwgZXJybm8pOworfQorCitURVNUKHN0ZGxpYiwgcHRzbmFtZV9yX0VJTlZBTCkgeworICBpbnQgZmQgPSBnZXRwdCgpOworICBBU1NFUlRfTkUoLTEsIGZkKTsKKyAgZXJybm8gPSAwOworICBjaGFyKiBidWYgPSBOVUxMOworICBBU1NFUlRfRVEoRUlOVkFMLCBwdHNuYW1lX3IoZmQsIGJ1ZiwgMTI4KSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgY2xvc2UoZmQpOworfQorCitURVNUKHN0ZGxpYiwgcHRzbmFtZV9yX0VSQU5HRSkgeworICBpbnQgZmQgPSBnZXRwdCgpOworICBBU1NFUlRfTkUoLTEsIGZkKTsKKyAgZXJybm8gPSAwOworICBjaGFyIGJ1ZlsxXTsKKyAgQVNTRVJUX0VRKEVSQU5HRSwgcHRzbmFtZV9yKGZkLCBidWYsIHNpemVvZihidWYpKSk7CisgIEFTU0VSVF9FUShFUkFOR0UsIGVycm5vKTsKKyAgY2xvc2UoZmQpOworfQorCitURVNUKHN0ZGxpYiwgdHR5bmFtZV9yKSB7CisgIGludCBmZCA9IGdldHB0KCk7CisgIEFTU0VSVF9ORSgtMSwgZmQpOworCisgIC8vIHR0eW5hbWVfciByZXR1cm5zICIvZGV2L3B0bXgiIGZvciBhIHB0eS4KKyAgY2hhciBuYW1lX3JbMTI4XTsKKyAgQVNTRVJUX0VRKDAsIHR0eW5hbWVfcihmZCwgbmFtZV9yLCBzaXplb2YobmFtZV9yKSkpOworICBBU1NFUlRfU1RSRVEoIi9kZXYvcHRteCIsIG5hbWVfcik7CisKKyAgY2xvc2UoZmQpOworfQorCitURVNUKHN0ZGxpYiwgdHR5bmFtZV9yX0VOT1RUWSkgeworICBpbnQgZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1dST05MWSk7CisgIGVycm5vID0gMDsKKyAgY2hhciBidWZbMTI4XTsKKyAgQVNTRVJUX0VRKEVOT1RUWSwgdHR5bmFtZV9yKGZkLCBidWYsIHNpemVvZihidWYpKSk7CisgIEFTU0VSVF9FUShFTk9UVFksIGVycm5vKTsKKyAgY2xvc2UoZmQpOworfQorCitURVNUKHN0ZGxpYiwgdHR5bmFtZV9yX0VJTlZBTCkgeworICBpbnQgZmQgPSBnZXRwdCgpOworICBBU1NFUlRfTkUoLTEsIGZkKTsKKyAgZXJybm8gPSAwOworICBjaGFyKiBidWYgPSBOVUxMOworICBBU1NFUlRfRVEoRUlOVkFMLCB0dHluYW1lX3IoZmQsIGJ1ZiwgMTI4KSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgY2xvc2UoZmQpOworfQorCitURVNUKHN0ZGxpYiwgdHR5bmFtZV9yX0VSQU5HRSkgeworICBpbnQgZmQgPSBnZXRwdCgpOworICBBU1NFUlRfTkUoLTEsIGZkKTsKKyAgZXJybm8gPSAwOworICBjaGFyIGJ1ZlsxXTsKKyAgQVNTRVJUX0VRKEVSQU5HRSwgdHR5bmFtZV9yKGZkLCBidWYsIHNpemVvZihidWYpKSk7CisgIEFTU0VSVF9FUShFUkFOR0UsIGVycm5vKTsKKyAgY2xvc2UoZmQpOworfQorCitURVNUKHN0ZGxpYiwgdW5sb2NrcHRfRU5PVFRZKSB7CisgIGludCBmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fV1JPTkxZKTsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoLTEsIHVubG9ja3B0KGZkKSk7CisgIEFTU0VSVF9FUShFTk9UVFksIGVycm5vKTsKKyAgY2xvc2UoZmQpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RyaW5nX3Rlc3QuY3BwIGIvdGVzdHMvc3RyaW5nX3Rlc3QuY3BwCmluZGV4IDFhN2UyN2QuLjczYzk0YzYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N0cmluZ190ZXN0LmNwcAorKysgYi90ZXN0cy9zdHJpbmdfdGVzdC5jcHAKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKQEAgLTQ2LDE0ICs0NywxNiBAQAogICBBU1NFUlRfU1RSRVEoIlVua25vd24gZXJyb3IgMTIzNCIsIHN0cmVycm9yKDEyMzQpKTsKIH0KIAotI2lmIF9fQklPTklDX18gLy8gZ2xpYmMncyBzdHJlcnJvciBpc24ndCB0aHJlYWQgc2FmZSwgb25seSBpdHMgc3Ryc2lnbmFsLgotCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogc3RhdGljIHZvaWQqIENvbmN1cnJlbnRTdHJFcnJvckZuKHZvaWQqKSB7CiAgIGJvb2wgZXF1YWwgPSAoc3RyY21wKCJVbmtub3duIGVycm9yIDIwMDIiLCBzdHJlcnJvcigyMDAyKSkgPT0gMCk7CiAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihlcXVhbCk7CiB9CisjZW5kaWYgLy8gX19CSU9OSUNfXwogCisvLyBnbGliYydzIHN0cmVycm9yIGlzbid0IHRocmVhZCBzYWZlLCBvbmx5IGl0cyBzdHJzaWduYWwuCiBURVNUKHN0cmluZywgc3RyZXJyb3JfY29uY3VycmVudCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgY29uc3QgY2hhciogc3RyZXJyb3IxMDAxID0gc3RyZXJyb3IoMTAwMSk7CiAgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBlcnJvciAxMDAxIiwgc3RyZXJyb3IxMDAxKTsKIApAQCAtNjQsMTIgKzY3LDEzIEBACiAgIEFTU0VSVF9UUlVFKHN0YXRpY19jYXN0PGJvb2w+KHJlc3VsdCkpOwogCiAgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBlcnJvciAxMDAxIiwgc3RyZXJyb3IxMDAxKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCi0jZW5kaWYKLQotI2lmIF9fQklPTklDX18gLy8gZ2xpYmMncyBzdHJlcnJvcl9yIGRvZXNuJ3QgZXZlbiBoYXZlIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyB0aGUgUE9TSVggb25lLgogVEVTVChzdHJpbmcsIHN0cmVycm9yX3IpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pIC8vIGdsaWJjJ3Mgc3RyZXJyb3JfciBkb2Vzbid0IGV2ZW4gaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhlIFBPU0lYIG9uZS4KICAgY2hhciBidWZbMjU2XTsKIAogICAvLyBWYWxpZC4KQEAgLTg3LDE5ICs5MSwxOSBAQAogICAvLyBCdWZmZXIgdG9vIHNtYWxsLgogICBBU1NFUlRfRVEoLTEsIHN0cmVycm9yX3IoMCwgYnVmLCAyKSk7CiAgIEFTU0VSVF9FUShFUkFOR0UsIGVycm5vKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKIFRFU1Qoc3RyaW5nLCBzdHJzaWduYWwpIHsKICAgLy8gQSByZWd1bGFyIHNpZ25hbC4KICAgQVNTRVJUX1NUUkVRKCJIYW5ndXAiLCBzdHJzaWduYWwoMSkpOwogCiAgIC8vIEEgcmVhbC10aW1lIHNpZ25hbC4KLSNpZmRlZiBfX0dMSUJDX18gLy8gZ2xpYmMgcmVzZXJ2ZXMgcmVhbC10aW1lIHNpZ25hbHMgZm9yIGludGVybmFsIHVzZSwgYW5kIGRvZXNuJ3QgY291bnQgdGhvc2UuCi0gIEFTU0VSVF9TVFJFUSgiUmVhbC10aW1lIHNpZ25hbCAxNCIsIHN0cnNpZ25hbCg0OCkpOwotI2Vsc2UKLSAgQVNTRVJUX1NUUkVRKCJSZWFsLXRpbWUgc2lnbmFsIDE2Iiwgc3Ryc2lnbmFsKDQ4KSk7Ci0jZW5kaWYKKyAgQVNTRVJUX1NUUkVRKCJSZWFsLXRpbWUgc2lnbmFsIDE0Iiwgc3Ryc2lnbmFsKFNJR1JUTUlOICsgMTQpKTsKKyAgLy8gT25lIG9mIHRoZSBzaWduYWxzIHRoZSBDIGxpYnJhcnkga2VlcHMgdG8gaXRzZWxmLgorICBBU1NFUlRfU1RSRVEoIlVua25vd24gc2lnbmFsIDMyIiwgc3Ryc2lnbmFsKF9fU0lHUlRNSU4pKTsKIAogICAvLyBFcnJvcnMuCiAgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBzaWduYWwgLTEiLCBzdHJzaWduYWwoLTEpKTsgLy8gVG9vIHNtYWxsLgpAQCAtMTQwLDkgKzE0NCw5IEBACiAgICAgaW50IG1heF9hbGlnbm1lbnQgPSA2NDsKIAogICAgIC8vIFRPRE86IGZpeCB0aGUgdGVzdHMgdG8gbm90IHNvbWV0aW1lcyB1c2UgdHdpY2UgdGhlaXIgc3BlY2lmaWVkICJNQVhfTEVOIi4KLSAgICBnbG9iX3B0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2hhcmFjdGVyKj4odmFsbG9jKDIgKiBzaXplb2YoQ2hhcmFjdGVyKSAqIE1BWF9MRU4gKyBtYXhfYWxpZ25tZW50KSk7Ci0gICAgZ2xvYl9wdHIxID0gcmVpbnRlcnByZXRfY2FzdDxDaGFyYWN0ZXIqPih2YWxsb2MoMiAqIHNpemVvZihDaGFyYWN0ZXIpICogTUFYX0xFTiArIG1heF9hbGlnbm1lbnQpKTsKLSAgICBnbG9iX3B0cjIgPSByZWludGVycHJldF9jYXN0PENoYXJhY3Rlcio+KHZhbGxvYygyICogc2l6ZW9mKENoYXJhY3RlcikgKiBNQVhfTEVOICsgbWF4X2FsaWdubWVudCkpOworICAgIGdsb2JfcHRyID0gcmVpbnRlcnByZXRfY2FzdDxDaGFyYWN0ZXIqPihtZW1hbGlnbihzeXNjb25mKF9TQ19QQUdFU0laRSksIDIgKiBzaXplb2YoQ2hhcmFjdGVyKSAqIE1BWF9MRU4gKyBtYXhfYWxpZ25tZW50KSk7CisgICAgZ2xvYl9wdHIxID0gcmVpbnRlcnByZXRfY2FzdDxDaGFyYWN0ZXIqPihtZW1hbGlnbihzeXNjb25mKF9TQ19QQUdFU0laRSksIDIgKiBzaXplb2YoQ2hhcmFjdGVyKSAqIE1BWF9MRU4gKyBtYXhfYWxpZ25tZW50KSk7CisgICAgZ2xvYl9wdHIyID0gcmVpbnRlcnByZXRfY2FzdDxDaGFyYWN0ZXIqPihtZW1hbGlnbihzeXNjb25mKF9TQ19QQUdFU0laRSksIDIgKiBzaXplb2YoQ2hhcmFjdGVyKSAqIE1BWF9MRU4gKyBtYXhfYWxpZ25tZW50KSk7CiAKICAgICBJbml0TGVuQXJyYXkoKTsKIApAQCAtMjE3LDcgKzIyMSw3IEBACiBURVNUKHN0cmluZywgc3RyY3B5MikgewogICBjaGFyIGJ1ZlsxXTsKICAgY2hhciogb3JpZyA9IHN0cmR1cCgiIik7Ci0gIHN0cmNweShidWYsIG9yaWcpOworICBBU1NFUlRfRVEoYnVmLCBzdHJjcHkoYnVmLCBvcmlnKSk7CiAgIEFTU0VSVF9FUSgnXDAnLCBidWZbMF0pOwogICBmcmVlKG9yaWcpOwogfQpAQCAtMjI3LDEzICsyMzEsOCBAQAogICBjaGFyIGJ1ZlsxMF07CiAgIGNoYXIqIG9yaWcgPSBzdHJkdXAoIjEyMzQ1Iik7CiAgIG1lbXNldChidWYsICdBJywgc2l6ZW9mKGJ1ZikpOwotICBzdHJjcHkoYnVmLCBvcmlnKTsKLSAgQVNTRVJUX0VRKCcxJywgIGJ1ZlswXSk7Ci0gIEFTU0VSVF9FUSgnMicsICBidWZbMV0pOwotICBBU1NFUlRfRVEoJzMnLCAgYnVmWzJdKTsKLSAgQVNTRVJUX0VRKCc0JywgIGJ1ZlszXSk7Ci0gIEFTU0VSVF9FUSgnNScsICBidWZbNF0pOwotICBBU1NFUlRfRVEoJ1wwJywgYnVmWzVdKTsKKyAgQVNTRVJUX0VRKGJ1Ziwgc3RyY3B5KGJ1Ziwgb3JpZykpOworICBBU1NFUlRfU1RSRVEoIjEyMzQ1IiwgYnVmKTsKICAgQVNTRVJUX0VRKCdBJywgIGJ1Zls2XSk7CiAgIEFTU0VSVF9FUSgnQScsICBidWZbN10pOwogICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzhdKTsKQEAgLTI0NiwxNyArMjQ1LDQxIEBACiAgIGNoYXIgYnVmWzEwXTsKICAgY2hhciogb3JpZyA9IHN0cmR1cCgiMTIzNDU2Nzg5Iik7CiAgIG1lbXNldChidWYsICdBJywgc2l6ZW9mKGJ1ZikpOwotICBzdHJjcHkoYnVmLCBvcmlnKTsKLSAgQVNTRVJUX0VRKCcxJywgIGJ1ZlswXSk7Ci0gIEFTU0VSVF9FUSgnMicsICBidWZbMV0pOwotICBBU1NFUlRfRVEoJzMnLCAgYnVmWzJdKTsKLSAgQVNTRVJUX0VRKCc0JywgIGJ1ZlszXSk7Ci0gIEFTU0VSVF9FUSgnNScsICBidWZbNF0pOwotICBBU1NFUlRfRVEoJzYnLCAgYnVmWzVdKTsKLSAgQVNTRVJUX0VRKCc3JywgIGJ1Zls2XSk7Ci0gIEFTU0VSVF9FUSgnOCcsICBidWZbN10pOwotICBBU1NFUlRfRVEoJzknLCAgYnVmWzhdKTsKLSAgQVNTRVJUX0VRKCdcMCcsIGJ1Zls5XSk7CisgIEFTU0VSVF9FUShidWYsIHN0cmNweShidWYsIG9yaWcpKTsKKyAgQVNTRVJUX1NUUkVRKCIxMjM0NTY3ODkiLCBidWYpOworICBmcmVlKG9yaWcpOworfQorCisvLyBvbmUgYnl0ZSB0YXJnZXQgd2l0aCAiXDAiIHNvdXJjZQorVEVTVChzdHJpbmcsIHN0cGNweTIpIHsKKyAgY2hhciBidWZbMV07CisgIGNoYXIqIG9yaWcgPSBzdHJkdXAoIiIpOworICBBU1NFUlRfRVEoYnVmLCBzdHBjcHkoYnVmLCBvcmlnKSk7CisgIEFTU0VSVF9FUSgnXDAnLCBidWZbMF0pOworICBmcmVlKG9yaWcpOworfQorCisvLyBtdWx0aWJ5dGUgdGFyZ2V0IHdoZXJlIHdlIHVuZGVyIGZpbGwgdGFyZ2V0CitURVNUKHN0cmluZywgc3RwY3B5MykgeworICBjaGFyIGJ1ZlsxMF07CisgIGNoYXIqIG9yaWcgPSBzdHJkdXAoIjEyMzQ1Iik7CisgIG1lbXNldChidWYsICdBJywgc2l6ZW9mKGJ1ZikpOworICBBU1NFUlRfRVEoYnVmK3N0cmxlbihvcmlnKSwgc3RwY3B5KGJ1Ziwgb3JpZykpOworICBBU1NFUlRfU1RSRVEoIjEyMzQ1IiwgYnVmKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls2XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbN10pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzhdKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls5XSk7CisgIGZyZWUob3JpZyk7Cit9CisKKy8vIG11bHRpYnl0ZSB0YXJnZXQgd2hlcmUgd2UgZmlsbCB0YXJnZXQgZXhhY3RseQorVEVTVChzdHJpbmcsIHN0cGNweTQpIHsKKyAgY2hhciBidWZbMTBdOworICBjaGFyKiBvcmlnID0gc3RyZHVwKCIxMjM0NTY3ODkiKTsKKyAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7CisgIEFTU0VSVF9FUShidWYrc3RybGVuKG9yaWcpLCBzdHBjcHkoYnVmLCBvcmlnKSk7CisgIEFTU0VSVF9TVFJFUSgiMTIzNDU2Nzg5IiwgYnVmKTsKICAgZnJlZShvcmlnKTsKIH0KIApAQCAtMjY3LDEzICsyOTAsNyBAQAogICBidWZbMV0gPSAnXDAnOwogICBjaGFyKiByZXMgPSBzdHJjYXQoYnVmLCAiMDEyMzQiKTsKICAgQVNTRVJUX0VRKGJ1ZiwgcmVzKTsKLSAgQVNTRVJUX0VRKCdhJywgIGJ1ZlswXSk7Ci0gIEFTU0VSVF9FUSgnMCcsICBidWZbMV0pOwotICBBU1NFUlRfRVEoJzEnLCAgYnVmWzJdKTsKLSAgQVNTRVJUX0VRKCcyJywgIGJ1ZlszXSk7Ci0gIEFTU0VSVF9FUSgnMycsICBidWZbNF0pOwotICBBU1NFUlRfRVEoJzQnLCAgYnVmWzVdKTsKLSAgQVNTRVJUX0VRKCdcMCcsIGJ1Zls2XSk7CisgIEFTU0VSVF9TVFJFUSgiYTAxMjM0IiwgYnVmKTsKICAgQVNTRVJUX0VRKCdBJywgIGJ1Zls3XSk7CiAgIEFTU0VSVF9FUSgnQScsICBidWZbOF0pOwogICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzldKTsKQEAgLTI4NiwxNiArMzAzLDcgQEAKICAgYnVmWzFdID0gJ1wwJzsKICAgY2hhciogcmVzID0gc3RyY2F0KGJ1ZiwgIjAxMjM0NTY3Iik7CiAgIEFTU0VSVF9FUShidWYsIHJlcyk7Ci0gIEFTU0VSVF9FUSgnYScsICBidWZbMF0pOwotICBBU1NFUlRfRVEoJzAnLCAgYnVmWzFdKTsKLSAgQVNTRVJUX0VRKCcxJywgIGJ1ZlsyXSk7Ci0gIEFTU0VSVF9FUSgnMicsICBidWZbM10pOwotICBBU1NFUlRfRVEoJzMnLCAgYnVmWzRdKTsKLSAgQVNTRVJUX0VRKCc0JywgIGJ1Zls1XSk7Ci0gIEFTU0VSVF9FUSgnNScsIGJ1Zls2XSk7Ci0gIEFTU0VSVF9FUSgnNicsICBidWZbN10pOwotICBBU1NFUlRfRVEoJzcnLCAgYnVmWzhdKTsKLSAgQVNTRVJUX0VRKCdcMCcsICBidWZbOV0pOworICBBU1NFUlRfU1RSRVEoImEwMTIzNDU2NyIsIGJ1Zik7CiB9CiAKIFRFU1Qoc3RyaW5nLCBzdHJuY2F0MikgewpAQCAtMzA1LDEzICszMTMsNyBAQAogICBidWZbMV0gPSAnXDAnOwogICBjaGFyKiByZXMgPSBzdHJuY2F0KGJ1ZiwgIjAxMjM0Iiwgc2l6ZW9mKGJ1ZikgLSBzdHJsZW4oYnVmKSAtIDEpOwogICBBU1NFUlRfRVEoYnVmLCByZXMpOwotICBBU1NFUlRfRVEoJ2EnLCAgYnVmWzBdKTsKLSAgQVNTRVJUX0VRKCcwJywgIGJ1ZlsxXSk7Ci0gIEFTU0VSVF9FUSgnMScsICBidWZbMl0pOwotICBBU1NFUlRfRVEoJzInLCAgYnVmWzNdKTsKLSAgQVNTRVJUX0VRKCczJywgIGJ1Zls0XSk7Ci0gIEFTU0VSVF9FUSgnNCcsICBidWZbNV0pOwotICBBU1NFUlRfRVEoJ1wwJywgYnVmWzZdKTsKKyAgQVNTRVJUX1NUUkVRKCJhMDEyMzQiLCBidWYpOwogICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzddKTsKICAgQVNTRVJUX0VRKCdBJywgIGJ1Zls4XSk7CiAgIEFTU0VSVF9FUSgnQScsICBidWZbOV0pOwpAQCAtMzI0LDEzICszMjYsNyBAQAogICBidWZbMV0gPSAnXDAnOwogICBjaGFyKiByZXMgPSBzdHJuY2F0KGJ1ZiwgIjAxMjM0NTY3ODkiLCA1KTsKICAgQVNTRVJUX0VRKGJ1ZiwgcmVzKTsKLSAgQVNTRVJUX0VRKCdhJywgIGJ1ZlswXSk7Ci0gIEFTU0VSVF9FUSgnMCcsICBidWZbMV0pOwotICBBU1NFUlRfRVEoJzEnLCAgYnVmWzJdKTsKLSAgQVNTRVJUX0VRKCcyJywgIGJ1ZlszXSk7Ci0gIEFTU0VSVF9FUSgnMycsICBidWZbNF0pOwotICBBU1NFUlRfRVEoJzQnLCAgYnVmWzVdKTsKLSAgQVNTRVJUX0VRKCdcMCcsIGJ1Zls2XSk7CisgIEFTU0VSVF9TVFJFUSgiYTAxMjM0IiwgYnVmKTsKICAgQVNTRVJUX0VRKCdBJywgIGJ1Zls3XSk7CiAgIEFTU0VSVF9FUSgnQScsICBidWZbOF0pOwogICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzldKTsKQEAgLTM0MywxNiArMzM5LDcgQEAKICAgYnVmWzFdID0gJ1wwJzsKICAgY2hhciogcmVzID0gc3RybmNhdChidWYsICIwMTIzNDU2NyIsIDgpOwogICBBU1NFUlRfRVEoYnVmLCByZXMpOwotICBBU1NFUlRfRVEoJ2EnLCAgYnVmWzBdKTsKLSAgQVNTRVJUX0VRKCcwJywgIGJ1ZlsxXSk7Ci0gIEFTU0VSVF9FUSgnMScsICBidWZbMl0pOwotICBBU1NFUlRfRVEoJzInLCAgYnVmWzNdKTsKLSAgQVNTRVJUX0VRKCczJywgIGJ1Zls0XSk7Ci0gIEFTU0VSVF9FUSgnNCcsICBidWZbNV0pOwotICBBU1NFUlRfRVEoJzUnLCBidWZbNl0pOwotICBBU1NFUlRfRVEoJzYnLCAgYnVmWzddKTsKLSAgQVNTRVJUX0VRKCc3JywgIGJ1Zls4XSk7Ci0gIEFTU0VSVF9FUSgnXDAnLCAgYnVmWzldKTsKKyAgQVNTRVJUX1NUUkVRKCJhMDEyMzQ1NjciLCBidWYpOwogfQogCiBURVNUKHN0cmluZywgc3RybmNhdDUpIHsKQEAgLTM2MiwxNiArMzQ5LDcgQEAKICAgYnVmWzFdID0gJ1wwJzsKICAgY2hhciogcmVzID0gc3RybmNhdChidWYsICIwMTIzNDU2NyIsIDkpOwogICBBU1NFUlRfRVEoYnVmLCByZXMpOwotICBBU1NFUlRfRVEoJ2EnLCAgYnVmWzBdKTsKLSAgQVNTRVJUX0VRKCcwJywgIGJ1ZlsxXSk7Ci0gIEFTU0VSVF9FUSgnMScsICBidWZbMl0pOwotICBBU1NFUlRfRVEoJzInLCAgYnVmWzNdKTsKLSAgQVNTRVJUX0VRKCczJywgIGJ1Zls0XSk7Ci0gIEFTU0VSVF9FUSgnNCcsICBidWZbNV0pOwotICBBU1NFUlRfRVEoJzUnLCBidWZbNl0pOwotICBBU1NFUlRfRVEoJzYnLCAgYnVmWzddKTsKLSAgQVNTRVJUX0VRKCc3JywgIGJ1Zls4XSk7Ci0gIEFTU0VSVF9FUSgnXDAnLCAgYnVmWzldKTsKKyAgQVNTRVJUX1NUUkVRKCJhMDEyMzQ1NjciLCBidWYpOwogfQogCiBURVNUKHN0cmluZywgc3RyY2hyX3dpdGhfMCkgewpAQCAtMzgxLDYgKzM1OSwyNCBAQAogICBFWFBFQ1RfVFJVRShzdHJjaHIoYnVmLCAnXDAnKSA9PSAoYnVmICsgc3RybGVuKHMpKSk7CiB9CiAKK1RFU1Qoc3RyaW5nLCBzdHJjaHJfbXVsdGlwbGUpIHsKKyAgY2hhciBzdHJbMTI4XTsKKyAgbWVtc2V0KHN0ciwgJ2EnLCBzaXplb2Yoc3RyKSAtIDEpOworICBzdHJbc2l6ZW9mKHN0ciktMV0gPSAnXDAnOworCisgIC8vIFZlcmlmeSB0aGF0IHN0cmNociBmaW5kcyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAnYScgaW4gYSBzdHJpbmcKKyAgLy8gZmlsbGVkIHdpdGggJ2EnIGNoYXJhY3RlcnMuIEl0ZXJhdGUgb3ZlciB0aGUgc3RyaW5nIHB1dHRpbmcKKyAgLy8gbm9uICdhJyBjaGFyYWN0ZXJzIGF0IHRoZSBmcm9udCBvZiB0aGUgc3RyaW5nIGR1cmluZyBlYWNoIGl0ZXJhdGlvbgorICAvLyBhbmQgY29udGludWUgdG8gdmVyaWZ5IHRoYXQgc3RyY2hyIGNhbiBmaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlCisgIC8vIHByb3Blcmx5LiBUaGUgaWRlYSBpcyB0byBjb3ZlciBhbGwgcG9zc2libGUgYWxpZ25tZW50cyBvZiB0aGUgbG9jYXRpb24KKyAgLy8gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlICdhJyBjaGFyYWN0ZXIgYW5kIHdoaWNoIGluY2x1ZGVzCisgIC8vIG90aGVyICdhJyBjaGFyYWN0ZXJzIGNsb3NlIGJ5LgorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihzdHIpIC0gMTsgaSsrKSB7CisgICAgRVhQRUNUX0VRKCZzdHJbaV0sIHN0cmNocihzdHIsICdhJykpOworICAgIHN0cltpXSA9ICdiJzsKKyAgfQorfQorCiBURVNUKHN0cmluZywgc3RyY2hyKSB7CiAgIGludCBzZWVrX2NoYXIgPSByYW5kb20oKSAmIDI1NTsKIApAQCAtNDUxLDYgKzQ0NywzMiBAQAogICB9CiB9CiAKK1RFU1Qoc3RyaW5nLCBzdHBjcHkpIHsKKyAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKKyAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7CisgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CisKKyAgICBzaXplX3QgcG9zID0gcmFuZG9tKCkgJSBzdGF0ZS5NQVhfTEVOOworCisgICAgbWVtc2V0KHN0YXRlLnB0cjEsICdcMicsIHBvcyk7CisgICAgc3RhdGUucHRyMVtwb3NdID0gJ1wwJzsKKyAgICBzdGF0ZS5wdHIxW3N0YXRlLk1BWF9MRU4gLSAxXSA9ICdcMCc7CisKKyAgICBtZW1jcHkoc3RhdGUucHRyLCBzdGF0ZS5wdHIxLCBzdGF0ZS5NQVhfTEVOKTsKKworICAgIG1lbXNldChzdGF0ZS5wdHIyLCAnXDEnLCBzdGF0ZS5NQVhfTEVOKTsKKyAgICBzdGF0ZS5wdHIyW3N0YXRlLk1BWF9MRU4gLSAxXSA9ICdcMCc7CisKKyAgICBtZW1zZXQoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgJ1wxJywgc3RhdGUuTUFYX0xFTik7CisgICAgbWVtY3B5KHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sIHN0YXRlLnB0cjEsIHBvcyArIDEpOworICAgIHN0YXRlLnB0clsyICogc3RhdGUuTUFYX0xFTiAtIDFdID0gJ1wwJzsKKworICAgIEFTU0VSVF9UUlVFKHN0cGNweShzdGF0ZS5wdHIyLCBzdGF0ZS5wdHIxKSA9PSBzdGF0ZS5wdHIyICsgc3RybGVuKHN0YXRlLnB0cjEpKTsKKyAgICBBU1NFUlRfRkFMU0UoKG1lbWNtcChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIsIHN0YXRlLk1BWF9MRU4pKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgIChtZW1jbXAoc3RhdGUucHRyMiwgc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgc3RhdGUuTUFYX0xFTikgIT0gMCkpOworICB9Cit9CisKIFRFU1Qoc3RyaW5nLCBzdHJjcHkpIHsKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7CkBAIC00NzcsOSArNDk5LDggQEAKICAgfQogfQogCi0KLSNpZiBfX0JJT05JQ19fCiBURVNUKHN0cmluZywgc3RybGNhdCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5uOyBpKyspIHsKICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKQEAgLTUwNCwxMSArNTI1LDEzIEBACiAgICAgICBBU1NFUlRfVFJVRShtZW1jbXAoc3RhdGUucHRyLCBzdGF0ZS5wdHIyLCBzdGF0ZS5NQVhfTEVOICsgc3RhdGUubGVuW2ldKSA9PSAwKTsKICAgICB9CiAgIH0KKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotI2VuZGlmCiAKLSNpZiBfX0JJT05JQ19fCiBURVNUKHN0cmluZywgc3RybGNweSkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7CiAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CkBAIC01MzksOCArNTYyLDEwIEBACiAgICAgQVNTRVJUX0ZBTFNFKChtZW1jbXAoc3RhdGUucHRyMSwgc3RhdGUucHRyLCBzdGF0ZS5NQVhfTEVOKSAhPSAwKSB8fAogICAgICAgICAgICAgICAgICAobWVtY21wKHN0YXRlLnB0cjIsIHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sIHN0YXRlLk1BWF9MRU4pICE9IDApKTsKICAgfQorI2Vsc2UgLy8gX19CSU9OSUNfXworICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9Ci0jZW5kaWYKIAogVEVTVChzdHJpbmcsIHN0cm5jYXQpIHsKICAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKQEAgLTYwNSwzMCArNjMwLDgxIEBACiAgIH0KIH0KIAorVEVTVChzdHJpbmcsIHN0cG5jcHkpIHsKKyAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKKyAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBJVEVSOyBqKyspIHsKKyAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKKworICAgIC8vIENob29zZSBhIHJhbmRvbSB2YWx1ZSB0byBmaWxsIHRoZSBzdHJpbmcsIGV4Y2VwdCBcMCAoc3RyaW5nIHRlcm1pbmF0b3IpLAorICAgIC8vIG9yIFwxIChndWFyYW50ZWVzIGl0J3MgZGlmZmVyZW50IGZyb20gYW55dGhpbmcgaW4gcHRyMikuCisgICAgbWVtc2V0KHN0YXRlLnB0cjEsIChyYW5kb20oKSAlIDI1NCkgKyAyLCBzdGF0ZS5NQVhfTEVOKTsKKyAgICAvLyBDaG9vc2UgYSByYW5kb20gc2l6ZSBmb3Igb3VyIHNyYyBidWZmZXIuCisgICAgc2l6ZV90IHB0cjFfbGVuID0gcmFuZG9tKCkgJSBzdGF0ZS5NQVhfTEVOOworICAgIHN0YXRlLnB0cjFbcHRyMV9sZW5dID0gJ1wwJzsKKyAgICAvLyBDb3B5IHB0cjEgaW50byBwdHIsIHVzZWQgdG8gdmVyaWZ5IHRoYXQgcHRyMSBkb2VzIG5vdCBnZXQgbW9kaWZpZWQuCisgICAgbWVtY3B5KHN0YXRlLnB0ciwgc3RhdGUucHRyMSwgc3RhdGUuTUFYX0xFTik7CisgICAgLy8gSW5pdCBwdHIyIHRvIGEgc2V0IHZhbHVlLgorICAgIG1lbXNldChzdGF0ZS5wdHIyLCAnXDEnLCBzdGF0ZS5NQVhfTEVOKTsKKworICAgIC8vIENob29zZSBhIHJhbmRvbSBhbW91bnQgb2YgZGF0YSB0byBjb3B5LgorICAgIHNpemVfdCBjb3B5X2xlbiA9IHJhbmRvbSgpICUgc3RhdGUuTUFYX0xFTjsKKworICAgIC8vIFNldCB0aGUgc2Vjb25kIGhhbGYgb2YgcHRyIHRvIHRoZSBleHBlY3RlZCBwYXR0ZXJuIGluIHB0cjIuCisgICAgbWVtc2V0KHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sICdcMScsIHN0YXRlLk1BWF9MRU4pOworICAgIG1lbWNweShzdGF0ZS5wdHIgKyBzdGF0ZS5NQVhfTEVOLCBzdGF0ZS5wdHIxLCBjb3B5X2xlbik7CisgICAgc2l6ZV90IGV4cGVjdGVkX2VuZDsKKyAgICBpZiAoY29weV9sZW4gPiBwdHIxX2xlbikgeworICAgICAgbWVtc2V0KHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4gKyBwdHIxX2xlbiwgJ1wwJywgY29weV9sZW4gLSBwdHIxX2xlbik7CisgICAgICBleHBlY3RlZF9lbmQgPSBwdHIxX2xlbjsKKyAgICB9IGVsc2UgeworICAgICAgZXhwZWN0ZWRfZW5kID0gY29weV9sZW47CisgICAgfQorCisgICAgQVNTRVJUX0VRKHN0YXRlLnB0cjIgKyBleHBlY3RlZF9lbmQsIHN0cG5jcHkoc3RhdGUucHRyMiwgc3RhdGUucHRyMSwgY29weV9sZW4pKTsKKworICAgIC8vIFZlcmlmeSBwdHIxIHdhcyBub3QgbW9kaWZpZWQuCisgICAgQVNTRVJUX0VRKDAsIG1lbWNtcChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIsIHN0YXRlLk1BWF9MRU4pKTsKKyAgICAvLyBWZXJpZnkgcHRyMiBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0YS4KKyAgICBBU1NFUlRfRVEoMCwgbWVtY21wKHN0YXRlLnB0cjIsIHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sIHN0YXRlLk1BWF9MRU4pKTsKKyAgfQorfQorCiBURVNUKHN0cmluZywgc3RybmNweSkgewogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOwogICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IElURVI7IGorKykgewogICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOwogCi0gICAgbWVtc2V0KHN0YXRlLnB0cjEsIHJhbmRvbSgpICYgMjU1LCBzdGF0ZS5NQVhfTEVOKTsKLSAgICBzdGF0ZS5wdHIxW3JhbmRvbSAoKSAlIHN0YXRlLk1BWF9MRU5dID0gJ1wwJzsKKyAgICAvLyBDaG9vc2UgYSByYW5kb20gdmFsdWUgdG8gZmlsbCB0aGUgc3RyaW5nLCBleGNlcHQgXDAgKHN0cmluZyB0ZXJtaW5hdG9yKSwKKyAgICAvLyBvciBcMSAoZ3VhcmFudGVlcyBpdCdzIGRpZmZlcmVudCBmcm9tIGFueXRoaW5nIGluIHB0cjIpLgorICAgIG1lbXNldChzdGF0ZS5wdHIxLCAocmFuZG9tKCkgJSAyNTQpICsgMiwgc3RhdGUuTUFYX0xFTik7CisgICAgLy8gQ2hvb3NlIGEgcmFuZG9tIHNpemUgZm9yIG91ciBzcmMgYnVmZmVyLgorICAgIHNpemVfdCBwdHIxX2xlbiA9IHJhbmRvbSgpICUgc3RhdGUuTUFYX0xFTjsKKyAgICBzdGF0ZS5wdHIxW3B0cjFfbGVuXSA9ICdcMCc7CisgICAgLy8gQ29weSBwdHIxIGludG8gcHRyLCB1c2VkIHRvIHZlcmlmeSB0aGF0IHB0cjEgZG9lcyBub3QgZ2V0IG1vZGlmaWVkLgogICAgIG1lbWNweShzdGF0ZS5wdHIsIHN0YXRlLnB0cjEsIHN0YXRlLk1BWF9MRU4pOwotCisgICAgLy8gSW5pdCBwdHIyIHRvIGEgc2V0IHZhbHVlLgogICAgIG1lbXNldChzdGF0ZS5wdHIyLCAnXDEnLCBzdGF0ZS5NQVhfTEVOKTsKIAotICAgIHNpemVfdCBwb3M7Ci0gICAgaWYgKG1lbWNocihzdGF0ZS5wdHIxLCAwLCBzdGF0ZS5NQVhfTEVOKSkgewotICAgICAgcG9zID0gc3RybGVuKHN0YXRlLnB0cjEpOworICAgIC8vIENob29zZSBhIHJhbmRvbSBhbW91bnQgb2YgZGF0YSB0byBjb3B5LgorICAgIHNpemVfdCBjb3B5X2xlbiA9IHJhbmRvbSgpICUgc3RhdGUuTUFYX0xFTjsKKworICAgIC8vIFNldCB0aGUgc2Vjb25kIGhhbGYgb2YgcHRyIHRvIHRoZSBleHBlY3RlZCBwYXR0ZXJuIGluIHB0cjIuCisgICAgbWVtc2V0KHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sICdcMScsIHN0YXRlLk1BWF9MRU4pOworICAgIG1lbWNweShzdGF0ZS5wdHIgKyBzdGF0ZS5NQVhfTEVOLCBzdGF0ZS5wdHIxLCBjb3B5X2xlbik7CisgICAgc2l6ZV90IGV4cGVjdGVkX2VuZDsKKyAgICBpZiAoY29weV9sZW4gPiBwdHIxX2xlbikgeworICAgICAgbWVtc2V0KHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4gKyBwdHIxX2xlbiwgJ1wwJywgY29weV9sZW4gLSBwdHIxX2xlbik7CisgICAgICBleHBlY3RlZF9lbmQgPSBwdHIxX2xlbjsKICAgICB9IGVsc2UgewotICAgICAgcG9zID0gc3RhdGUuTUFYX0xFTiAtIDE7CisgICAgICBleHBlY3RlZF9lbmQgPSBjb3B5X2xlbjsKICAgICB9CiAKLSAgICBtZW1zZXQoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgJ1wwJywgc3RhdGUuTUFYX0xFTik7Ci0gICAgbWVtY3B5KHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sIHN0YXRlLnB0cjEsIHBvcyArIDEpOworICAgIEFTU0VSVF9FUShzdGF0ZS5wdHIyICsgZXhwZWN0ZWRfZW5kLCBzdHBuY3B5KHN0YXRlLnB0cjIsIHN0YXRlLnB0cjEsIGNvcHlfbGVuKSk7CiAKLSAgICBBU1NFUlRfVFJVRShzdHJuY3B5KHN0YXRlLnB0cjIsIHN0YXRlLnB0cjEsIHN0YXRlLk1BWF9MRU4pID09IHN0YXRlLnB0cjIpOwotICAgIEFTU0VSVF9GQUxTRShtZW1jbXAoc3RhdGUucHRyMSwgc3RhdGUucHRyLCBzdGF0ZS5NQVhfTEVOKSAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgIG1lbWNtcChzdGF0ZS5wdHIyLCBzdGF0ZS5wdHIgKyBzdGF0ZS5NQVhfTEVOLCBzdGF0ZS5NQVhfTEVOKSAhPSAwKTsKKyAgICAvLyBWZXJpZnkgcHRyMSB3YXMgbm90IG1vZGlmaWVkLgorICAgIEFTU0VSVF9FUSgwLCBtZW1jbXAoc3RhdGUucHRyMSwgc3RhdGUucHRyLCBzdGF0ZS5NQVhfTEVOKSk7CisgICAgLy8gVmVyaWZ5IHB0cjIgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEuCisgICAgQVNTRVJUX0VRKDAsIG1lbWNtcChzdGF0ZS5wdHIyLCBzdGF0ZS5wdHIgKyBzdGF0ZS5NQVhfTEVOLCBzdGF0ZS5NQVhfTEVOKSk7CiAgIH0KIH0KIApAQCAtNjg3LDYgKzc2MywxNCBAQAogICB9CiB9CiAKK1RFU1Qoc3RyaW5nLCBtZW1jaHJfemVybykgeworICB1aW50OF90KiBidWZmZXI7CisgIEFTU0VSVF9FUSgwLCBwb3NpeF9tZW1hbGlnbihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJ1ZmZlciksIDY0LCA2NCkpOworICBtZW1zZXQoYnVmZmVyLCAxMCwgNjQpOworICBBU1NFUlRfVFJVRShOVUxMID09IG1lbWNocihidWZmZXIsIDUsIDApKTsKKyAgQVNTRVJUX1RSVUUoTlVMTCA9PSBtZW1jaHIoYnVmZmVyLCAxMCwgMCkpOworfQorCiBURVNUKHN0cmluZywgbWVtcmNocikgewogICBpbnQgc2Vla19jaGFyID0gcmFuZG9tKCkgJiAyNTU7CiAgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShTTUFMTCk7CkBAIC03MzIsMzUgKzgxNiw2IEBACiAgIH0KIH0KIAotI2lmIGRlZmluZWQoX19CSU9OSUNfXykKLWV4dGVybiAiQyIgaW50IF9fbWVtY21wMTYoY29uc3QgdW5zaWduZWQgc2hvcnQgKnB0cjEsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwdHIyLCBzaXplX3Qgbik7Ci0KLVRFU1Qoc3RyaW5nLCBfX21lbWNtcDE2KSB7Ci0gIFN0cmluZ1Rlc3RTdGF0ZTx1bnNpZ25lZCBzaG9ydD4gc3RhdGUoU01BTEwpOwotCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUubjsgaSsrKSB7Ci0gICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7Ci0gICAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKLQotICAgICAgdW5zaWduZWQgc2hvcnQgbWFzayA9IDB4ZmZmZjsKLSAgICAgIHVuc2lnbmVkIHNob3J0IGMxID0gcmFuZCgpICYgbWFzazsKLSAgICAgIHVuc2lnbmVkIHNob3J0IGMyID0gcmFuZCgpICYgbWFzazsKLQotICAgICAgc3RkOjpmaWxsKHN0YXRlLnB0cjEsIHN0YXRlLnB0cjEgKyBzdGF0ZS5NQVhfTEVOLCBjMSk7Ci0gICAgICBzdGQ6OmZpbGwoc3RhdGUucHRyMiwgc3RhdGUucHRyMiArIHN0YXRlLk1BWF9MRU4sIGMxKTsKLQotICAgICAgaW50IHBvcyA9IChzdGF0ZS5sZW5baV0gPT0gMCkgPyAwIDogKHJhbmRvbSgpICUgc3RhdGUubGVuW2ldKTsKLSAgICAgIHN0YXRlLnB0cjJbcG9zXSA9IGMyOwotCi0gICAgICBpbnQgZXhwZWN0ZWQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KGMxKSAtIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihjMikpOwotICAgICAgaW50IGFjdHVhbCA9IF9fbWVtY21wMTYoc3RhdGUucHRyMSwgc3RhdGUucHRyMiwgKHNpemVfdCkgc3RhdGUuTUFYX0xFTik7Ci0KLSAgICAgIEFTU0VSVF9FUShleHBlY3RlZCwgYWN0dWFsKTsKLSAgICB9Ci0gIH0KLX0KLSNlbmRpZgotCiBURVNUKHN0cmluZywgd21lbWNtcCkgewogICBTdHJpbmdUZXN0U3RhdGU8d2NoYXJfdD4gc3RhdGUoU01BTEwpOwogCkBAIC04NTAsNiArOTA1LDg1IEBACiAgIH0KIH0KIAorVEVTVChzdHJpbmcsIG1lbW1vdmVfY2FjaGVfc2l6ZSkgeworICBzaXplX3QgbGVuID0gNjAwMDAwOworICBpbnQgbWF4X2FsaWdubWVudCA9IDMxOworICBpbnQgYWxpZ25tZW50c1tdID0gezAsIDUsIDExLCAyOSwgMzB9OworICBjaGFyKiBwdHIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYWxsb2Moc2l6ZW9mKGNoYXIpICogbGVuKSk7CisgIGNoYXIqIHB0cjEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYWxsb2MoMiAqIHNpemVvZihjaGFyKSAqIGxlbikpOworICBjaGFyKiBnbG9iX3B0cjIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYWxsb2MoMiAqIHNpemVvZihjaGFyKSAqIGxlbiArIG1heF9hbGlnbm1lbnQpKTsKKyAgc2l6ZV90IHBvcyA9IDY0OworCisgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKTsKKyAgQVNTRVJUX1RSVUUocHRyMSAhPSBOVUxMKTsKKyAgQVNTRVJUX1RSVUUoZ2xvYl9wdHIyICE9IE5VTEwpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgY2hhciogcHRyMiA9IGdsb2JfcHRyMiArIGFsaWdubWVudHNbaV07CisgICAgbWVtc2V0KHB0cjEsIHJhbmRvbSgpICYgMjU1LCAyICogbGVuKTsKKyAgICBtZW1zZXQocHRyMSwgcmFuZG9tKCkgJiAyNTUsIGxlbik7CisgICAgbWVtY3B5KHB0cjIsIHB0cjEsIDIgKiBsZW4pOworICAgIG1lbWNweShwdHIsIHB0cjEsIGxlbik7CisgICAgbWVtY3B5KHB0cjEgKyBwb3MsIHB0ciwgbGVuKTsKKworICAgIEFTU0VSVF9UUlVFKG1lbW1vdmUocHRyMiArIHBvcywgcHRyLCBsZW4pID09IHB0cjIgKyBwb3MpOworICAgIEFTU0VSVF9FUSgwLCBtZW1jbXAocHRyMiwgcHRyMSwgMiAqIGxlbikpOworICB9CisgIGZyZWUocHRyKTsKKyAgZnJlZShwdHIxKTsKKyAgZnJlZShnbG9iX3B0cjIpOworfQorCitzdGF0aWMgdm9pZCB2ZXJpZnlfbWVtbW92ZShjaGFyKiBzcmNfY29weSwgY2hhciogZHN0LCBjaGFyKiBzcmMsIHNpemVfdCBzaXplKSB7CisgIG1lbXNldChkc3QsIDAsIHNpemUpOworICBtZW1jcHkoc3JjLCBzcmNfY29weSwgc2l6ZSk7CisgIEFTU0VSVF9FUShkc3QsIG1lbW1vdmUoZHN0LCBzcmMsIHNpemUpKTsKKyAgQVNTRVJUX0VRKDAsIG1lbWNtcChkc3QsIHNyY19jb3B5LCBzaXplKSk7Cit9CisKKyNkZWZpbmUgTUVNTU9WRV9EQVRBX1NJWkUgKDEwMjQqMTAyNCozKQorCitURVNUKHN0cmluZywgbWVtbW92ZV9jaGVjaykgeworICBjaGFyKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYWxsb2MoTUVNTU9WRV9EQVRBX1NJWkUpKTsKKyAgQVNTRVJUX1RSVUUoYnVmZmVyICE9IE5VTEwpOworCisgIGNoYXIqIHNyY19kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFsbG9jKE1FTU1PVkVfREFUQV9TSVpFKSk7CisgIEFTU0VSVF9UUlVFKHNyY19kYXRhICE9IE5VTEwpOworICAvLyBJbml0aWFsaXplIHRvIGEga25vd24gcGF0dGVybiB0byBjb3B5IGludG8gc3JjIGZvciBlYWNoIHRlc3QgYW5kCisgIC8vIHRvIGNvbXBhcmUgZHN0IGFnYWluc3QuCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTUVNTU9WRV9EQVRBX1NJWkU7IGkrKykgeworICAgIHNyY19kYXRhW2ldID0gKGkgKyAxKSAlIDI1NTsKKyAgfQorCisgIC8vIENoZWNrIGFsbCBkaWZmZXJlbnQgZHN0IG9mZnNldHMgYmV0d2VlbiAwIGFuZCAxMjcgaW5jbHVzaXZlLgorICBjaGFyKiBzcmMgPSBidWZmZXI7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTI3OyBpKyspIHsKKyAgICBjaGFyKiBkc3QgPSBidWZmZXIgKyAyNTYgKyBpOworICAgIC8vIFNtYWxsIGNvcHkuCisgICAgdmVyaWZ5X21lbW1vdmUoc3JjX2RhdGEsIGRzdCwgc3JjLCAxMDI0KTsKKworICAgIC8vIE1lZGl1bSBjb3B5LgorICAgIHZlcmlmeV9tZW1tb3ZlKHNyY19kYXRhLCBkc3QsIHNyYywgNjQgKiAxMDI0KTsKKworICAgIC8vIE1lZGl1bSBjb3B5LgorICAgIHZlcmlmeV9tZW1tb3ZlKHNyY19kYXRhLCBkc3QsIHNyYywgMTAyNCAqIDEwMjQgKyAxMjggKiAxMDI0KTsKKyAgfQorCisgIC8vIENoZWNrIGFsbCBsZWZ0b3ZlciBzaXplIG9mZnNldHMgYmV0d2VlbiAxIGFuZCAxMjcgaW5jbHVzaXZlLgorICBjaGFyKiBkc3QgPSBidWZmZXIgKyAyNTY7CisgIHNyYyA9IGJ1ZmZlcjsKKyAgZm9yIChzaXplX3Qgc2l6ZSA9IDE7IHNpemUgPCAxMjc7IHNpemUrKykgeworICAgIC8vIFNtYWxsIGNvcHkuCisgICAgdmVyaWZ5X21lbW1vdmUoc3JjX2RhdGEsIGRzdCwgc3JjLCAxMDI0KTsKKworICAgIC8vIE1lZGl1bSBjb3B5LgorICAgIHZlcmlmeV9tZW1tb3ZlKHNyY19kYXRhLCBkc3QsIHNyYywgNjQgKiAxMDI0KTsKKworICAgIC8vIExhcmdlIGNvcHkuCisgICAgdmVyaWZ5X21lbW1vdmUoc3JjX2RhdGEsIGRzdCwgc3JjLCAxMDI0ICogMTAyNCArIDEyOCAqIDEwMjQpOworICB9Cit9CisKIFRFU1Qoc3RyaW5nLCBiY29weSkgewogICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoTEFSR0UpOwogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLm47IGkrKykgewpAQCAtOTA1LDYgKzEwMzksMjIgQEAKICAgUnVuU3JjRHN0QnVmZmVyT3ZlcnJlYWRUZXN0KERvTWVtY3B5VGVzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIERvTWVtbW92ZVRlc3QodWludDhfdCogc3JjLCB1aW50OF90KiBkc3QsIHNpemVfdCBsZW4pIHsKKyAgbWVtc2V0KHNyYywgKGxlbiAlIDI1NSkgKyAxLCBsZW4pOworICBtZW1zZXQoZHN0LCAwLCBsZW4pOworCisgIEFTU0VSVF9FUShkc3QsIG1lbW1vdmUoZHN0LCBzcmMsIGxlbikpOworICBBU1NFUlRfVFJVRShtZW1jbXAoc3JjLCBkc3QsIGxlbikgPT0gMCk7Cit9CisKK1RFU1Qoc3RyaW5nLCBtZW1tb3ZlX2FsaWduKSB7CisgIFJ1blNyY0RzdEJ1ZmZlckFsaWduVGVzdChMQVJHRSwgRG9NZW1tb3ZlVGVzdCk7Cit9CisKK1RFU1Qoc3RyaW5nLCBtZW1tb3ZlX292ZXJyZWFkKSB7CisgIFJ1blNyY0RzdEJ1ZmZlck92ZXJyZWFkVGVzdChEb01lbW1vdmVUZXN0KTsKK30KKwogc3RhdGljIHZvaWQgRG9NZW1zZXRUZXN0KHVpbnQ4X3QqIGJ1Ziwgc2l6ZV90IGxlbikgewogICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgYnVmW2ldID0gMDsKQEAgLTk1NSw2ICsxMTA1LDI1IEBACiAgIFJ1blNyY0RzdEJ1ZmZlck92ZXJyZWFkVGVzdChEb1N0cmNweVRlc3QpOwogfQogCitzdGF0aWMgdm9pZCBEb1N0cGNweVRlc3QodWludDhfdCogc3JjLCB1aW50OF90KiBkc3QsIHNpemVfdCBsZW4pIHsKKyAgaWYgKGxlbiA+PSAxKSB7CisgICAgbWVtc2V0KHNyYywgKDMyICsgKGxlbiAlIDk2KSksIGxlbiAtIDEpOworICAgIHNyY1tsZW4tMV0gPSAnXDAnOworICAgIG1lbXNldChkc3QsIDAsIGxlbik7CisgICAgQVNTRVJUX0VRKGRzdCtsZW4tMSwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc3RwY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNyYykpKSk7CisgICAgQVNTRVJUX1RSVUUobWVtY21wKHNyYywgZHN0LCBsZW4pID09IDApOworICB9Cit9CisKK1RFU1Qoc3RyaW5nLCBzdHBjcHlfYWxpZ24pIHsKKyAgUnVuU3JjRHN0QnVmZmVyQWxpZ25UZXN0KExBUkdFLCBEb1N0cGNweVRlc3QpOworfQorCitURVNUKHN0cmluZywgc3RwY3B5X292ZXJyZWFkKSB7CisgIFJ1blNyY0RzdEJ1ZmZlck92ZXJyZWFkVGVzdChEb1N0cGNweVRlc3QpOworfQorCiAvLyBVc2Ugb3VyIG93biBpbmNyZW1lbnRlciB0byBjdXQgZG93biBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIGNhbGxzLgogc3RhdGljIHNpemVfdCBMYXJnZVNldEluY3JlbWVudChzaXplX3QgbGVuKSB7CiAgIGlmIChsZW4gPj0gNDA5NikgewpAQCAtMTA5MiwzICsxMjYxLDI5IEBACiBURVNUKHN0cmluZywgbWVtY21wX292ZXJyZWFkKSB7CiAgIFJ1bkNtcEJ1ZmZlck92ZXJyZWFkVGVzdChEb01lbWNtcFRlc3QsIERvTWVtY21wRmFpbFRlc3QpOwogfQorCitzdGF0aWMgdm9pZCBEb1N0cmNoclRlc3QodWludDhfdCogYnVmLCBzaXplX3QgbGVuKSB7CisgIGlmIChsZW4gPj0gMSkgeworICAgIGNoYXIgdmFsdWUgPSAzMiArIChsZW4gJSA5Nik7CisgICAgY2hhciBzZWFyY2hfdmFsdWUgPSAzMyArIChsZW4gJSA5Nik7CisgICAgbWVtc2V0KGJ1ZiwgdmFsdWUsIGxlbiAtIDEpOworICAgIGJ1ZltsZW4tMV0gPSAnXDAnOworICAgIEFTU0VSVF9FUShOVUxMLCBzdHJjaHIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmKSwgc2VhcmNoX3ZhbHVlKSk7CisgICAgQVNTRVJUX0VRKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZidWZbbGVuLTFdKSwgc3RyY2hyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZiksICdcMCcpKTsKKyAgICBpZiAobGVuID49IDIpIHsKKyAgICAgIGJ1ZlswXSA9IHNlYXJjaF92YWx1ZTsKKyAgICAgIEFTU0VSVF9FUShyZWludGVycHJldF9jYXN0PGNoYXIqPigmYnVmWzBdKSwgc3RyY2hyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZiksIHNlYXJjaF92YWx1ZSkpOworICAgICAgYnVmWzBdID0gdmFsdWU7CisgICAgICBidWZbbGVuLTJdID0gc2VhcmNoX3ZhbHVlOworICAgICAgQVNTRVJUX0VRKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZidWZbbGVuLTJdKSwgc3RyY2hyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZiksIHNlYXJjaF92YWx1ZSkpOworICAgIH0KKyAgfQorfQorCitURVNUKHN0cmluZywgc3RyY2hyX2FsaWduKSB7CisgIFJ1blNpbmdsZUJ1ZmZlckFsaWduVGVzdChNRURJVU0sIERvU3RyY2hyVGVzdCk7Cit9CisKK1RFU1Qoc3RyaW5nLCBzdHJjaHJfb3ZlcnJlYWQpIHsKKyAgUnVuU2luZ2xlQnVmZmVyT3ZlcnJlYWRUZXN0KERvU3RyY2hyVGVzdCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zdHVic190ZXN0LmNwcCBiL3Rlc3RzL3N0dWJzX3Rlc3QuY3BwCmluZGV4IDJlMWFjYzEuLjliMGMyMzEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N0dWJzX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3N0dWJzX3Rlc3QuY3BwCkBAIC0yMyw4ICsyMyw3IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNpZiBfX0JJT05JQ19fCi0KKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAjZGVmaW5lIENIRUNLX0dFVFBXTkFNX0ZPUih1c2VybmFtZSwgdWlkLCB1aWRfdHlwZSkgXAogICAgIFNDT1BFRF9UUkFDRSh1c2VybmFtZSk7IFwKICAgICBBU1NFUlRfTk9fRkFUQUxfRkFJTFVSRShjaGVja19nZXRwd25hbSh1c2VybmFtZSwgdWlkLCB1aWRfdHlwZSkpOwpAQCAtNDIsNiArNDEsMTAgQEAKICAgRVhQRUNUX1NUUkVRKHVzZXJuYW1lLCBwd2QtPnB3X25hbWUpOwogICBFWFBFQ1RfRVEodWlkLCBwd2QtPnB3X3VpZCk7CiAgIEVYUEVDVF9FUSh1aWQsIHB3ZC0+cHdfZ2lkKTsKKyAgQVNTRVJUX0VRKE5VTEwsIHB3ZC0+cHdfcGFzc3dkKTsKKyNpZmRlZiBfX0xQNjRfXworICBBU1NFUlRfRVEoTlVMTCwgcHdkLT5wd19nZWNvcyk7CisjZW5kaWYKIAogICBpZiAodWlkX3R5cGUgPT0gVFlQRV9TWVNURU0pIHsKICAgICBFWFBFQ1RfU1RSRVEoIi8iLCBwd2QtPnB3X2Rpcik7CkBAIC01MSw2ICs1NCwxMCBAQAogCiAgIEVYUEVDVF9TVFJFUSgiL3N5c3RlbS9iaW4vc2giLCBwd2QtPnB3X3NoZWxsKTsKIH0KKyNlbHNlCisjZGVmaW5lIENIRUNLX0dFVFBXTkFNX0ZPUih1c2VybmFtZSwgdWlkLCB1aWRfdHlwZSkgXAorICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZgogCiBURVNUKGdldHB3bmFtLCBzeXN0ZW1faWRfcm9vdCkgewogICBDSEVDS19HRVRQV05BTV9GT1IoInJvb3QiLCAwLCBUWVBFX1NZU1RFTSk7CkBAIC0xMDQsNSArMTExLDMgQEAKIFRFU1QoZ2V0cHduYW0sIGFwcF9pZF91MV9pMCkgewogICBDSEVDS19HRVRQV05BTV9GT1IoInUxX2kwIiwgMTk5MDAwLCBUWVBFX0FQUCk7CiB9Ci0KLSNlbmRpZiAvKiBfX0JJT05JQ19fICovCmRpZmYgLS1naXQgYS90ZXN0cy9zeXNfZXBvbGxfdGVzdC5jcHAgYi90ZXN0cy9zeXNfZXBvbGxfdGVzdC5jcHAKaW5kZXggZTRlMDQ3Yi4uNmU3YTgwNyAxMDA2NDQKLS0tIGEvdGVzdHMvc3lzX2Vwb2xsX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3N5c19lcG9sbF90ZXN0LmNwcApAQCAtMTcsNyArMTcsMTAgQEAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN5cy9lcG9sbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiBURVNUKHN5c19lcG9sbCwgc21va2UpIHsKICAgaW50IGVwb2xsX2ZkID0gZXBvbGxfY3JlYXRlKDEpOwpAQCAtMzYsMyArMzksMzAgQEAKICAgc2lnYWRkc2V0KCZzcywgU0lHUElQRSk7CiAgIEFTU0VSVF9FUSgwLCBlcG9sbF9wd2FpdChlcG9sbF9mZCwgZXZlbnRzLCAxLCAxLCAmc3MpKTsKIH0KKworVEVTVChzeXNfZXBvbGwsIGVwb2xsX2V2ZW50X2RhdGEpIHsKKyAgaW50IGVwb2xsX2ZkID0gZXBvbGxfY3JlYXRlKDEpOworICBBU1NFUlRfTkUoLTEsIGVwb2xsX2ZkKSA8PCBzdHJlcnJvcihlcnJubyk7CisKKyAgaW50IGZkc1syXTsKKyAgQVNTRVJUX05FKC0xLCBwaXBlKGZkcykpOworCisgIGNvbnN0IHVpbnQ2NF90IGV4cGVjdGVkID0gMHgxMjM0NTY3ODlhYmNkZWYwOworCisgIC8vIEdldCByZWFkeSB0byBwb2xsIG9uIHJlYWQgZW5kIG9mIHBpcGUuCisgIGVwb2xsX2V2ZW50IGV2OworICBldi5ldmVudHMgPSBFUE9MTElOOworICBldi5kYXRhLnU2NCA9IGV4cGVjdGVkOworICBBU1NFUlRfTkUoLTEsIGVwb2xsX2N0bChlcG9sbF9mZCwgRVBPTExfQ1RMX0FERCwgZmRzWzBdLCAmZXYpKTsKKworICAvLyBFbnN1cmUgdGhlcmUncyBzb21ldGhpbmcgaW4gdGhlIHBpcGUuCisgIEFTU0VSVF9FUSgxLCB3cml0ZShmZHNbMV0sICJcbiIsIDEpKTsKKworICAvLyBQb2xsLgorICBlcG9sbF9ldmVudCBldmVudHNbMV07CisgIEFTU0VSVF9FUSgxLCBlcG9sbF93YWl0KGVwb2xsX2ZkLCBldmVudHMsIDEsIDEpKTsKKyAgQVNTRVJUX0VRKGV4cGVjdGVkLCBldmVudHNbMF0uZGF0YS51NjQpOworCisgIGNsb3NlKGZkc1swXSk7CisgIGNsb3NlKGZkc1sxXSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zeXNfbW1hbl90ZXN0LmNwcCBiL3Rlc3RzL3N5c19tbWFuX3Rlc3QuY3BwCmluZGV4IDU3MDY3ZDcuLjc1Y2NmYTMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N5c19tbWFuX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3N5c19tbWFuX3Rlc3QuY3BwCkBAIC0xNywxNCArMTcsMTU4IEBACiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLVRFU1Qoc3lzX21tYW4sIG1tYXBfbmVnYXRpdmUpIHsKLSAgb2ZmX3Qgb2ZmID0gLXN5c2NvbmYoX1NDX1BBR0VTSVpFKTsgLy8gQWxpZ25lZCBidXQgbmVnYXRpdmUuCi0gIEFTU0VSVF9FUShNQVBfRkFJTEVELCBtbWFwKE5VTEwsIDQwOTYsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIG9mZikpOworI2luY2x1ZGUgIlRlbXBvcmFyeUZpbGUuaCIKKworVEVTVChzeXNfbW1hbiwgbW1hcF9zdGQpIHsKKyAgdm9pZCogbWFwID0gbW1hcChOVUxMLCA0MDk2LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfQU5PTiB8IE1BUF9QUklWQVRFLCAtMSwgMCk7CisgIEFTU0VSVF9ORShNQVBfRkFJTEVELCBtYXApOworICBBU1NFUlRfRVEoMCwgbXVubWFwKG1hcCwgNDA5NikpOwogfQogCi1URVNUKHN5c19tbWFuLCBtbWFwNjRfbmVnYXRpdmUpIHsKLSAgb2ZmNjRfdCBvZmY2NCA9IC1zeXNjb25mKF9TQ19QQUdFU0laRSk7IC8vIEFsaWduZWQgYnV0IG5lZ2F0aXZlLgotICBBU1NFUlRfRVEoTUFQX0ZBSUxFRCwgbW1hcDY0KE5VTEwsIDQwOTYsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIG9mZjY0KSk7CitURVNUKHN5c19tbWFuLCBtbWFwNjRfc3RkKSB7CisgIHZvaWQqIG1hcCA9IG1tYXA2NChOVUxMLCA0MDk2LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfQU5PTiB8IE1BUF9QUklWQVRFLCAtMSwgMCk7CisgIEFTU0VSVF9ORShNQVBfRkFJTEVELCBtYXApOworICBBU1NFUlRfRVEoMCwgbXVubWFwKG1hcCwgNDA5NikpOworfQorCitURVNUKHN5c19tbWFuLCBtbWFwX2ZpbGVfYmFkX29mZnNldCkgeworICBUZW1wb3JhcnlGaWxlIHRmOworCisgIHZvaWQqIG1hcCA9IG1tYXAoTlVMTCwgMTAwLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIHRmLmZkLCAxKTsKKyAgQVNTRVJUX0VRKE1BUF9GQUlMRUQsIG1hcCk7Cit9CisKK1RFU1Qoc3lzX21tYW4sIG1tYXA2NF9maWxlX2JhZF9vZmZzZXQpIHsKKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKworICB2b2lkKiBtYXAgPSBtbWFwNjQoTlVMTCwgMTAwLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIHRmLmZkLCAxKTsKKyAgQVNTRVJUX0VRKE1BUF9GQUlMRUQsIG1hcCk7Cit9CisKKyNkZWZpbmUgU1RSX1NTSVpFKHN0cikgc3RhdGljX2Nhc3Q8c3NpemVfdD4oc2l6ZW9mKHN0cikpCisKKyNkZWZpbmUgU1RSSU5HX01TRyAgIjAxMjM0NTY3OFxuYWJjZGVmZ2hcbiIKKyNkZWZpbmUgSU5JVElBTF9NU0cgIjAwMDAwMDAwMFxuMDAwMDAwMDBcbiIKKworVEVTVChzeXNfbW1hbiwgbW1hcF9maWxlX3JlYWQpIHsKKyAgVGVtcG9yYXJ5RmlsZSB0ZjsKKworICBBU1NFUlRfRVEoU1RSX1NTSVpFKFNUUklOR19NU0cpLCB3cml0ZSh0Zi5mZCwgU1RSSU5HX01TRywgc2l6ZW9mKFNUUklOR19NU0cpKSk7CisKKyAgdm9pZCogbWFwID0gbW1hcChOVUxMLCBzaXplb2YoU1RSSU5HX01TRyksIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgdGYuZmQsIDApOworICBBU1NFUlRfTkUoTUFQX0ZBSUxFRCwgbWFwKTsKKworICBjaGFyKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFwKTsKKyAgQVNTRVJUX1NUUkVRKFNUUklOR19NU0csIGRhdGEpOworCisgIEFTU0VSVF9FUSgwLCBtdW5tYXAobWFwLCBzaXplb2YoU1RSSU5HX01TRykpKTsKK30KKworVEVTVChzeXNfbW1hbiwgbW1hcF9maWxlX3dyaXRlKSB7CisgIFRlbXBvcmFyeUZpbGUgdGY7CisKKyAgQVNTRVJUX0VRKFNUUl9TU0laRShJTklUSUFMX01TRyksIHdyaXRlKHRmLmZkLCBJTklUSUFMX01TRywgc2l6ZW9mKElOSVRJQUxfTVNHKSkpOworICBsc2Vlayh0Zi5mZCwgMCwgU0VFS19TRVQpOworCisgIHZvaWQqIG1hcCA9IG1tYXAoTlVMTCwgc2l6ZW9mKFNUUklOR19NU0cpLCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCB0Zi5mZCwgMCk7CisgIEFTU0VSVF9ORShNQVBfRkFJTEVELCBtYXApOworICBjbG9zZSh0Zi5mZCk7CisKKyAgbWVtY3B5KG1hcCwgU1RSSU5HX01TRywgc2l6ZW9mKFNUUklOR19NU0cpKTsKKworICBBU1NFUlRfRVEoMCwgbXVubWFwKG1hcCwgc2l6ZW9mKFNUUklOR19NU0cpKSk7CisKKyAgdGYucmVvcGVuKCk7CisgIGNoYXIgYnVmW3NpemVvZihTVFJJTkdfTVNHKV07CisgIG1lbXNldChidWYsIDAsIHNpemVvZihTVFJJTkdfTVNHKSk7CisgIEFTU0VSVF9FUShTVFJfU1NJWkUoU1RSSU5HX01TRyksIHJlYWQodGYuZmQsIGJ1Ziwgc2l6ZW9mKFNUUklOR19NU0cpKSk7CisKKyAgQVNTRVJUX1NUUkVRKFNUUklOR19NU0csIGJ1Zik7Cit9CisKKyNkZWZpbmUgUEFHRTBfTVNHICIwMFBBR0UwMCIKKyNkZWZpbmUgUEFHRTFfTVNHICIxMTFQQUdFMTExIgorI2RlZmluZSBQQUdFMl9NU0cgIjIyMjJQQUdFMjIyMiIKKyNkZWZpbmUgRU5EX01TRyAiRSIKKworVEVTVChzeXNfbW1hbiwgbW1hcF9maWxlX3JlYWRfYXRfb2Zmc2V0KSB7CisgIFRlbXBvcmFyeUZpbGUgdGY7CisgIHNpemVfdCBwYWdlc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKworICAvLyBDcmVhdGUgdGhlIGZpbGUgd2l0aCB0aHJlZSBwYWdlcyB3b3J0aCBvZiBkYXRhLgorICBBU1NFUlRfRVEoU1RSX1NTSVpFKFBBR0UwX01TRyksIHdyaXRlKHRmLmZkLCBQQUdFMF9NU0csIHNpemVvZihQQUdFMF9NU0cpKSk7CisgIEFTU0VSVF9ORSgtMSwgbHNlZWsodGYuZmQsIHBhZ2VzaXplLCBTRUVLX1NFVCkpOworICBBU1NFUlRfRVEoU1RSX1NTSVpFKFBBR0UxX01TRyksIHdyaXRlKHRmLmZkLCBQQUdFMV9NU0csIHNpemVvZihQQUdFMV9NU0cpKSk7CisgIEFTU0VSVF9ORSgtMSwgbHNlZWsodGYuZmQsIDIgKiBwYWdlc2l6ZSwgU0VFS19TRVQpKTsKKyAgQVNTRVJUX0VRKFNUUl9TU0laRShQQUdFMl9NU0cpLCB3cml0ZSh0Zi5mZCwgUEFHRTJfTVNHLCBzaXplb2YoUEFHRTJfTVNHKSkpOworICBBU1NFUlRfTkUoLTEsIGxzZWVrKHRmLmZkLCAzICogcGFnZXNpemUgLSBzaXplb2YoRU5EX01TRyksIFNFRUtfU0VUKSk7CisgIEFTU0VSVF9FUShTVFJfU1NJWkUoRU5EX01TRyksIHdyaXRlKHRmLmZkLCBFTkRfTVNHLCBzaXplb2YoRU5EX01TRykpKTsKKworICBBU1NFUlRfTkUoLTEsIGxzZWVrKHRmLmZkLCAwLCBTRUVLX1NFVCkpOworCisgIHZvaWQqIG1hcCA9IG1tYXAoTlVMTCwgcGFnZXNpemUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgdGYuZmQsIHBhZ2VzaXplKTsKKyAgQVNTRVJUX05FKE1BUF9GQUlMRUQsIG1hcCk7CisKKyAgY2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcCk7CisgIEFTU0VSVF9TVFJFUShQQUdFMV9NU0csIGRhdGEpOworCisgIEFTU0VSVF9FUSgwLCBtdW5tYXAobWFwLCBwYWdlc2l6ZSkpOworCisgIG1hcCA9IG1tYXAoTlVMTCwgcGFnZXNpemUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgdGYuZmQsIDIgKiBwYWdlc2l6ZSk7CisgIEFTU0VSVF9ORShNQVBfRkFJTEVELCBtYXApOworCisgIGRhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtYXApOworICBBU1NFUlRfU1RSRVEoUEFHRTJfTVNHLCBkYXRhKTsKKyAgQVNTRVJUX1NUUkVRKEVORF9NU0csIGRhdGErcGFnZXNpemUtc2l6ZW9mKEVORF9NU0cpKTsKKworICBBU1NFUlRfRVEoMCwgbXVubWFwKG1hcCwgcGFnZXNpemUpKTsKK30KKworI2RlZmluZSBORVdQQUdFMV9NU0cgIjFORVcxUEFHRTEiCisjZGVmaW5lIE5FV1BBR0UyX01TRyAiMjJORVcyMlBBR0UyMiIKKworVEVTVChzeXNfbW1hbiwgbW1hcF9maWxlX3dyaXRlX2F0X29mZnNldCkgeworICBUZW1wb3JhcnlGaWxlIHRmOworICBzaXplX3QgcGFnZXNpemUgPSBzeXNjb25mKF9TQ19QQUdFU0laRSk7CisKKyAgLy8gQ3JlYXRlIHRoZSBmaWxlIHdpdGggdGhyZWUgcGFnZXMgd29ydGggb2YgZGF0YS4KKyAgQVNTRVJUX0VRKFNUUl9TU0laRShQQUdFMF9NU0cpLCB3cml0ZSh0Zi5mZCwgUEFHRTBfTVNHLCBzaXplb2YoUEFHRTBfTVNHKSkpOworICBBU1NFUlRfTkUoLTEsIGxzZWVrKHRmLmZkLCBwYWdlc2l6ZSwgU0VFS19TRVQpKTsKKyAgQVNTRVJUX0VRKFNUUl9TU0laRShQQUdFMV9NU0cpLCB3cml0ZSh0Zi5mZCwgUEFHRTFfTVNHLCBzaXplb2YoUEFHRTFfTVNHKSkpOworICBBU1NFUlRfTkUoLTEsIGxzZWVrKHRmLmZkLCAyICogcGFnZXNpemUsIFNFRUtfU0VUKSk7CisgIEFTU0VSVF9FUShTVFJfU1NJWkUoUEFHRTJfTVNHKSwgd3JpdGUodGYuZmQsIFBBR0UyX01TRywgc2l6ZW9mKFBBR0UyX01TRykpKTsKKyAgQVNTRVJUX05FKC0xLCBsc2Vlayh0Zi5mZCwgMyAqIHBhZ2VzaXplIC0gc2l6ZW9mKEVORF9NU0cpLCBTRUVLX1NFVCkpOworICBBU1NFUlRfRVEoU1RSX1NTSVpFKEVORF9NU0cpLCB3cml0ZSh0Zi5mZCwgRU5EX01TRywgc2l6ZW9mKEVORF9NU0cpKSk7CisKKyAgQVNTRVJUX05FKC0xLCBsc2Vlayh0Zi5mZCwgMCwgU0VFS19TRVQpKTsKKworICB2b2lkKiBtYXAgPSBtbWFwKE5VTEwsIHBhZ2VzaXplLCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCB0Zi5mZCwgcGFnZXNpemUpOworICBBU1NFUlRfTkUoTUFQX0ZBSUxFRCwgbWFwKTsKKyAgY2xvc2UodGYuZmQpOworCisgIG1lbWNweShtYXAsIE5FV1BBR0UxX01TRywgc2l6ZW9mKE5FV1BBR0UxX01TRykpOworICBBU1NFUlRfRVEoMCwgbXVubWFwKG1hcCwgcGFnZXNpemUpKTsKKworICB0Zi5yZW9wZW4oKTsKKyAgbWFwID0gbW1hcChOVUxMLCBwYWdlc2l6ZSwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgdGYuZmQsIDIgKiBwYWdlc2l6ZSk7CisgIEFTU0VSVF9ORShNQVBfRkFJTEVELCBtYXApOworICBjbG9zZSh0Zi5mZCk7CisKKyAgbWVtY3B5KG1hcCwgTkVXUEFHRTJfTVNHLCBzaXplb2YoTkVXUEFHRTJfTVNHKSk7CisgIEFTU0VSVF9FUSgwLCBtdW5tYXAobWFwLCBwYWdlc2l6ZSkpOworCisgIHRmLnJlb3BlbigpOworICBjaGFyIGJ1ZltwYWdlc2l6ZV07CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzc2l6ZV90PihwYWdlc2l6ZSksIHJlYWQodGYuZmQsIGJ1ZiwgcGFnZXNpemUpKTsKKyAgQVNTRVJUX1NUUkVRKFBBR0UwX01TRywgYnVmKTsKKyAgQVNTRVJUX05FKC0xLCBsc2Vlayh0Zi5mZCwgcGFnZXNpemUsIFNFRUtfU0VUKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzc2l6ZV90PihwYWdlc2l6ZSksIHJlYWQodGYuZmQsIGJ1ZiwgcGFnZXNpemUpKTsKKyAgQVNTRVJUX1NUUkVRKE5FV1BBR0UxX01TRywgYnVmKTsKKyAgQVNTRVJUX05FKC0xLCBsc2Vlayh0Zi5mZCwgMiAqIHBhZ2VzaXplLCBTRUVLX1NFVCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c3NpemVfdD4ocGFnZXNpemUpLCByZWFkKHRmLmZkLCBidWYsIHBhZ2VzaXplKSk7CisgIEFTU0VSVF9TVFJFUShORVdQQUdFMl9NU0csIGJ1Zik7CisgIEFTU0VSVF9TVFJFUShFTkRfTVNHLCBidWYrcGFnZXNpemUtc2l6ZW9mKEVORF9NU0cpKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c19yZXNvdXJjZV90ZXN0LmNwcCBiL3Rlc3RzL3N5c19yZXNvdXJjZV90ZXN0LmNwcAppbmRleCBiZDk3NGNiLi40ZTJkMGJhIDEwMDY0NAotLS0gYS90ZXN0cy9zeXNfcmVzb3VyY2VfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3lzX3Jlc291cmNlX3Rlc3QuY3BwCkBAIC0xNCwxMSArMTQsMTEgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCiAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiAKLSNpZiBfX0dMSUJDX18KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChfX0dMSUJDX18pCiAvKiBUaGUgaG9zdCBnbGliYyB3ZSdyZSBjdXJyZW50bHkgYnVpbGRpbmcgd2l0aCBkb2Vzbid0IGhhdmUgcHJsaW1pdDY0IHlldC4gKi8KIHN0YXRpYyBpbnQgcHJsaW1pdDY0KHBpZF90LCBpbnQgcmVzb3VyY2UsIGNvbnN0IHN0cnVjdCBybGltaXQ2NCogbmV3X2xpbWl0LCBzdHJ1Y3QgcmxpbWl0NjQqIG9sZF9saW1pdCkgewogICBpZiAobmV3X2xpbWl0ICE9IE5VTEwpIHsKQEAgLTI5LDU5ICsyOSw4MyBAQAogfQogI2VuZGlmCiAKLVRFU1Qoc3lzX3Jlc291cmNlLCBzbW9rZSkgewotI2lmIF9fTFA2NF9fIHx8IF9fR0xJQkNfXworVEVTVChzeXNfcmVzb3VyY2UsIHJsaW1pdF9zdHJ1Y3Rfc2l6ZSkgeworI2lmIGRlZmluZWQoX19MUDY0X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQogICBBU1NFUlRfRVEoc2l6ZW9mKHJsaW1pdCksIHNpemVvZihybGltaXQ2NCkpOwogICBBU1NFUlRfRVEoOFUsIHNpemVvZihybGltX3QpKTsKICNlbHNlCiAgIEFTU0VSVF9ORShzaXplb2YocmxpbWl0KSwgc2l6ZW9mKHJsaW1pdDY0KSk7CiAgIEFTU0VSVF9FUSg0VSwgc2l6ZW9mKHJsaW1fdCkpOwogI2VuZGlmCit9CiAKLSAgLy8gUmVhZCB3aXRoIGdldHJsaW1pdCwgZ2V0cmxpbWl0NjQsIGFuZCBwcmxpbWl0NjQuCi0gIC8vIChwcmxpbWl0IGlzIHBybGltaXQ2NCBvbiBMUDY0IGFuZCB1bmltcGxlbWVudGVkIG9uIDMyLWJpdC4pCi0gIHJsaW1pdCBsMzI7Ci0gIHJsaW1pdDY0IGw2NDsKLSAgcmxpbWl0NjQgcHJfbDY0OwotICBBU1NFUlRfRVEoMCwgZ2V0cmxpbWl0KFJMSU1JVF9DT1JFLCAmbDMyKSk7Ci0gIEFTU0VSVF9FUSgwLCBnZXRybGltaXQ2NChSTElNSVRfQ09SRSwgJmw2NCkpOwotICBBU1NFUlRfRVEoMCwgcHJsaW1pdDY0KDAsIFJMSU1JVF9DT1JFLCBOVUxMLCAmcHJfbDY0KSk7Ci0gIEFTU0VSVF9FUShsNjQucmxpbV9jdXIsIGwzMi5ybGltX2N1cik7Ci0gIEFTU0VSVF9FUShsNjQucmxpbV9jdXIsIHByX2w2NC5ybGltX2N1cik7Ci0gIEFTU0VSVF9FUShsNjQucmxpbV9tYXgsIHByX2w2NC5ybGltX21heCk7Ci0gIGlmIChsNjQucmxpbV9tYXggPT0gUkxJTTY0X0lORklOSVRZKSB7Ci0gICAgQVNTRVJUX0VRKFJMSU1fSU5GSU5JVFksIGwzMi5ybGltX21heCk7Ci0gIH0gZWxzZSB7Ci0gICAgQVNTRVJUX0VRKGw2NC5ybGltX21heCwgbDMyLnJsaW1fbWF4KTsKK2NsYXNzIFN5c1Jlc291cmNlVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgeworIHByb3RlY3RlZDoKKyAgdmlydHVhbCB2b2lkIFNldFVwKCkgeworICAgIEFTU0VSVF9FUSgwLCBnZXRybGltaXQoUkxJTUlUX0NPUkUsICZsMzJfKSk7CisgICAgQVNTRVJUX0VRKDAsIGdldHJsaW1pdDY0KFJMSU1JVF9DT1JFLCAmbDY0XykpOworICAgIEFTU0VSVF9FUSgwLCBwcmxpbWl0NjQoMCwgUkxJTUlUX0NPUkUsIE5VTEwsICZwcl9sNjRfKSk7CiAgIH0KIAotICAvLyBXcml0ZSB3aXRoIHNldHJsaW1pdCBhbmQgcmVhZCBiYWNrIHdpdGggZXZlcnl0aGluZy4KLSAgbDMyLnJsaW1fY3VyID0gMTIzOwotICBBU1NFUlRfRVEoMCwgc2V0cmxpbWl0KFJMSU1JVF9DT1JFLCAmbDMyKSk7Ci0gIEFTU0VSVF9FUSgwLCBnZXRybGltaXQoUkxJTUlUX0NPUkUsICZsMzIpKTsKLSAgQVNTRVJUX0VRKDAsIGdldHJsaW1pdDY0KFJMSU1JVF9DT1JFLCAmbDY0KSk7Ci0gIEFTU0VSVF9FUSgwLCBwcmxpbWl0NjQoMCwgUkxJTUlUX0NPUkUsIE5VTEwsICZwcl9sNjQpKTsKLSAgQVNTRVJUX0VRKDEyM1UsIGwzMi5ybGltX2N1cik7Ci0gIEFTU0VSVF9FUShsNjQucmxpbV9jdXIsIGwzMi5ybGltX2N1cik7Ci0gIEFTU0VSVF9FUShsNjQucmxpbV9jdXIsIHByX2w2NC5ybGltX2N1cik7CisgIHZvaWQgQ2hlY2tSZXNvdXJjZUxpbWl0cygpOwogCi0gIC8vIFdyaXRlIHdpdGggc2V0cmxpbWl0NjQgYW5kIHJlYWQgYmFjayB3aXRoIGV2ZXJ5dGhpbmcuCi0gIGw2NC5ybGltX2N1ciA9IDQ1NjsKLSAgQVNTRVJUX0VRKDAsIHNldHJsaW1pdDY0KFJMSU1JVF9DT1JFLCAmbDY0KSk7Ci0gIEFTU0VSVF9FUSgwLCBnZXRybGltaXQoUkxJTUlUX0NPUkUsICZsMzIpKTsKLSAgQVNTRVJUX0VRKDAsIGdldHJsaW1pdDY0KFJMSU1JVF9DT1JFLCAmbDY0KSk7Ci0gIEFTU0VSVF9FUSgwLCBwcmxpbWl0NjQoMCwgUkxJTUlUX0NPUkUsIE5VTEwsICZwcl9sNjQpKTsKLSAgQVNTRVJUX0VRKDQ1NlUsIGwzMi5ybGltX2N1cik7Ci0gIEFTU0VSVF9FUShsNjQucmxpbV9jdXIsIGwzMi5ybGltX2N1cik7Ci0gIEFTU0VSVF9FUShsNjQucmxpbV9jdXIsIHByX2w2NC5ybGltX2N1cik7CisgcHJvdGVjdGVkOgorICBybGltaXQgbDMyXzsKKyAgcmxpbWl0NjQgbDY0XzsKKyAgcmxpbWl0NjQgcHJfbDY0XzsKK307CiAKLSAgLy8gV3JpdGUgd2l0aCBwcmxpbWl0NjQgYW5kIHJlYWQgYmFjayB3aXRoIGV2ZXJ5dGhpbmcuCi0gIGw2NC5ybGltX2N1ciA9IDc4OTsKLSAgQVNTRVJUX0VRKDAsIHBybGltaXQ2NCgwLCBSTElNSVRfQ09SRSwgJmw2NCwgTlVMTCkpOwotICBBU1NFUlRfRVEoMCwgZ2V0cmxpbWl0KFJMSU1JVF9DT1JFLCAmbDMyKSk7Ci0gIEFTU0VSVF9FUSgwLCBnZXRybGltaXQ2NChSTElNSVRfQ09SRSwgJmw2NCkpOwotICBBU1NFUlRfRVEoMCwgcHJsaW1pdDY0KDAsIFJMSU1JVF9DT1JFLCBOVUxMLCAmcHJfbDY0KSk7Ci0gIEFTU0VSVF9FUSg3ODlVLCBsMzIucmxpbV9jdXIpOwotICBBU1NFUlRfRVEobDY0LnJsaW1fY3VyLCBsMzIucmxpbV9jdXIpOwotICBBU1NFUlRfRVEobDY0LnJsaW1fY3VyLCBwcl9sNjQucmxpbV9jdXIpOwordm9pZCBTeXNSZXNvdXJjZVRlc3Q6OkNoZWNrUmVzb3VyY2VMaW1pdHMoKSB7CisgIEFTU0VSVF9FUSgwLCBnZXRybGltaXQoUkxJTUlUX0NPUkUsICZsMzJfKSk7CisgIEFTU0VSVF9FUSgwLCBnZXRybGltaXQ2NChSTElNSVRfQ09SRSwgJmw2NF8pKTsKKyAgQVNTRVJUX0VRKDAsIHBybGltaXQ2NCgwLCBSTElNSVRfQ09SRSwgTlVMTCwgJnByX2w2NF8pKTsKKyAgQVNTRVJUX0VRKGw2NF8ucmxpbV9jdXIsIHByX2w2NF8ucmxpbV9jdXIpOworICBpZiAobDY0Xy5ybGltX2N1ciA9PSBSTElNNjRfSU5GSU5JVFkpIHsKKyAgICBBU1NFUlRfRVEoUkxJTV9JTkZJTklUWSwgbDMyXy5ybGltX2N1cik7CisgIH0gZWxzZSB7CisgICAgQVNTRVJUX0VRKGw2NF8ucmxpbV9jdXIsIGwzMl8ucmxpbV9jdXIpOworICB9CisKKyAgQVNTRVJUX0VRKGw2NF8ucmxpbV9tYXgsIHByX2w2NF8ucmxpbV9tYXgpOworICBpZiAobDY0Xy5ybGltX21heCA9PSBSTElNNjRfSU5GSU5JVFkpIHsKKyAgICBBU1NFUlRfRVEoUkxJTV9JTkZJTklUWSwgbDMyXy5ybGltX21heCk7CisgIH0gZWxzZSB7CisgICAgQVNTRVJUX0VRKGw2NF8ucmxpbV9tYXgsIGwzMl8ucmxpbV9tYXgpOworICB9Cit9CisKKy8vIEZvcmNlIHJsaW1fbWF4IHRvIGJlIGJpZ2dlciB0aGFuIGEgY29uc3RhbnQgc28gd2UgY2FuIGNvbnRpbnVlIGZvbGxvd2luZyB0ZXN0LgorLy8gQ2hhbmdlIHJlc291cmNlIGxpbWl0IHNldHRpbmcgd2l0aCAidWxpbWl0IC1IYyIgaW4gdGhlIHNoZWxsIGlmIHRoaXMgdGVzdCBmYWlscy4KK1RFU1RfRihTeXNSZXNvdXJjZVRlc3QsIFJMSU1JVF9DT1JFX3JsaW1fbWF4X25vdF96ZXJvKSB7CisgIEFTU0VSVF9UUlVFKGwzMl8ucmxpbV9tYXggPT0gUkxJTV9JTkZJTklUWSB8fCBsMzJfLnJsaW1fbWF4ID49IDQ1NlUpIDw8CisgICAgIlJMSU1JVF9DT1JFIHJsaW1fbWF4ID0gIiA8PCBsMzJfLnJsaW1fbWF4OworfQorCitURVNUX0YoU3lzUmVzb3VyY2VUZXN0LCBnZXRfcmVzb3VyY2VfbGltaXRfZXF1YWwpIHsKKyAgQ2hlY2tSZXNvdXJjZUxpbWl0cygpOworfQorCitURVNUX0YoU3lzUmVzb3VyY2VUZXN0LCBzZXRybGltaXQpIHsKKyAgbDMyXy5ybGltX2N1ciA9IDEyM1U7CisgIEFTU0VSVF9FUSgwLCBzZXRybGltaXQoUkxJTUlUX0NPUkUsICZsMzJfKSk7CisgIENoZWNrUmVzb3VyY2VMaW1pdHMoKTsKKyAgQVNTRVJUX0VRKDEyM1UsIGwzMl8ucmxpbV9jdXIpOworfQorCitURVNUX0YoU3lzUmVzb3VyY2VUZXN0LCBzZXRybGltaXQ2NCkgeworICBsNjRfLnJsaW1fY3VyID0gNDU2VTsKKyAgQVNTRVJUX0VRKDAsIHNldHJsaW1pdDY0KFJMSU1JVF9DT1JFLCAmbDY0XykpOworICBDaGVja1Jlc291cmNlTGltaXRzKCk7CisgIEFTU0VSVF9FUSg0NTZVLCBsNjRfLnJsaW1fY3VyKTsKK30KKworVEVTVF9GKFN5c1Jlc291cmNlVGVzdCwgcHJsaW1pdDY0KSB7CisgIHByX2w2NF8ucmxpbV9jdXIgPSBwcl9sNjRfLnJsaW1fbWF4OworICBBU1NFUlRfRVEoMCwgcHJsaW1pdDY0KDAsIFJMSU1JVF9DT1JFLCAmcHJfbDY0XywgTlVMTCkpOworICBDaGVja1Jlc291cmNlTGltaXRzKCk7CisgIEFTU0VSVF9FUShwcl9sNjRfLnJsaW1fbWF4LCBwcl9sNjRfLnJsaW1fY3VyKTsKK30KKworVEVTVF9GKFN5c1Jlc291cmNlVGVzdCwgcHJsaW1pdCkgeworICAvLyBwcmxpbWl0IGlzIHBybGltaXQ2NCBvbiBMUDY0IGFuZCB1bmltcGxlbWVudGVkIG9uIDMyLWJpdC4gU28gd2Ugb25seSB0ZXN0IHBybGltaXQ2NC4KIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c19zZWxlY3RfdGVzdC5jcHAgYi90ZXN0cy9zeXNfc2VsZWN0X3Rlc3QuY3BwCmluZGV4IDU3YWZjOWIuLmMxNzMyZWUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N5c19zZWxlY3RfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3lzX3NlbGVjdF90ZXN0LmNwcApAQCAtMTcsOCArMTcsMTEgQEAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KIAogVEVTVChzeXNfc2VsZWN0LCBmZF9zZXRfc21va2UpIHsKICAgZmRfc2V0IGZkczsKQEAgLTQyLDYgKzQ1LDMyIEBACiAgIEVYUEVDVF9GQUxTRShGRF9JU1NFVCgxLCAmZmRzKSk7CiB9CiAKKyNkZWZpbmUgREVMQVlfTVNHICIxMjM0IgorCitzdGF0aWMgdm9pZCBEZWxheWVkV3JpdGUoaW50KiBwaWQsIGludCogZmQpIHsKKyAgaW50IGZkc1syXTsKKyAgQVNTRVJUX0VRKDAsIHBpcGUoZmRzKSk7CisKKyAgaWYgKCgqcGlkID0gZm9yaygpKSA9PSAwKSB7CisgICAgY2xvc2UoZmRzWzBdKTsKKyAgICB1c2xlZXAoNTAwMCk7CisgICAgRVhQRUNUX0VRKDUsIHdyaXRlKGZkc1sxXSwgREVMQVlfTVNHLCBzaXplb2YoREVMQVlfTVNHKSkpOworICAgIGNsb3NlKGZkc1sxXSk7CisgICAgZXhpdCgwKTsKKyAgfQorICBBU1NFUlRfTFQoMCwgKnBpZCk7CisgIGNsb3NlKGZkc1sxXSk7CisKKyAgKmZkID0gZmRzWzBdOworfQorCitzdGF0aWMgdm9pZCBEZWxheWVkV3JpdGVDbGVhbnVwKGludCBwaWQsIGludCBmZCkgeworICBjaGFyIGJ1ZltzaXplb2YoREVMQVlfTVNHKV07CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzc2l6ZV90PihzaXplb2YoREVMQVlfTVNHKSksIHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKERFTEFZX01TRykpKTsKKyAgQVNTRVJUX1NUUkVRKERFTEFZX01TRywgYnVmKTsKKyAgQVNTRVJUX0VRKHBpZCwgd2FpdHBpZChwaWQsIE5VTEwsIDApKTsKK30KKwogVEVTVChzeXNfc2VsZWN0LCBzZWxlY3Rfc21va2UpIHsKICAgZmRfc2V0IHI7CiAgIEZEX1pFUk8oJnIpOwpAQCAtNzEsOCArMTAwLDE3IEBACiAKICAgLy8gVmFsaWQgdGltZW91dC4uLgogICB0di50dl9zZWMgPSAxOwotICBBU1NFUlRfRVEoMiwgc2VsZWN0KG1heCwgJnIsICZ3LCAmZSwgJnR2KSk7Ci0gIEFTU0VSVF9ORSgwLCB0di50dl91c2VjKTsgLy8gLi4ud2hpY2ggZ290IHVwZGF0ZWQuCisgIGludCBwaWQsIGZkOworICBEZWxheWVkV3JpdGUoJnBpZCwgJmZkKTsKKworICBGRF9aRVJPKCZyKTsKKyAgRkRfU0VUKGZkLCAmcik7CisgIEFTU0VSVF9FUSgxLCBzZWxlY3QoZmQrMSwgJnIsIE5VTEwsIE5VTEwsICZ0dikpOworICAvLyBCb3RoIHR2X3NlYyBhbmQgdHZfbnNlYyBzaG91bGQgaGF2ZSBiZWVuIHVwZGF0ZWQuCisgIEFTU0VSVF9FUSgwLCB0di50dl9zZWMpOworICBBU1NFUlRfTkUoMCwgdHYudHZfdXNlYyk7CisKKyAgRGVsYXllZFdyaXRlQ2xlYW51cChwaWQsIGZkKTsKIH0KIAogVEVTVChzeXNfc2VsZWN0LCBwc2VsZWN0X3Ntb2tlKSB7CkBAIC0xMDgsNiArMTQ2LDE1IEBACiAKICAgLy8gVmFsaWQgdGltZW91dC4uLgogICB0di50dl9zZWMgPSAxOwotICBBU1NFUlRfRVEoMiwgcHNlbGVjdChtYXgsICZyLCAmdywgJmUsICZ0diwgJnNzKSk7Ci0gIEFTU0VSVF9FUSgwLCB0di50dl9uc2VjKTsgLy8gLi4ud2hpY2ggZGlkIF9ub3RfIGdldCB1cGRhdGVkLgorICBpbnQgcGlkLCBmZDsKKyAgRGVsYXllZFdyaXRlKCZwaWQsICZmZCk7CisKKyAgRkRfWkVSTygmcik7CisgIEZEX1NFVChmZCwgJnIpOworICBBU1NFUlRfRVEoMSwgcHNlbGVjdChmZCsxLCAmciwgTlVMTCwgTlVMTCwgJnR2LCBOVUxMKSk7CisgIC8vIE5laXRoZXIgdHZfc2VjIG5vciB0dl9uc2VjIHNob3VsZCBoYXZlIGJlZW4gdXBkYXRlZC4KKyAgQVNTRVJUX0VRKDEsIHR2LnR2X3NlYyk7CisgIEFTU0VSVF9FUSgwLCB0di50dl9uc2VjKTsKKworICBEZWxheWVkV3JpdGVDbGVhbnVwKHBpZCwgZmQpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3lzX3NlbmRmaWxlX3Rlc3QuY3BwIGIvdGVzdHMvc3lzX3NlbmRmaWxlX3Rlc3QuY3BwCmluZGV4IGJmMjNkM2QuLjNkNmI1Y2MgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N5c19zZW5kZmlsZV90ZXN0LmNwcAorKysgYi90ZXN0cy9zeXNfc2VuZGZpbGVfdGVzdC5jcHAKQEAgLTQyLDcgKzQyLDYgQEAKICAgQVNTRVJUX1NUUkVRKCJsbCIsIGJ1Zik7CiB9CiAKLSNpZiBfX0JJT05JQ19fCiBURVNUKHN5c19zZW5kZmlsZSwgc2VuZGZpbGU2NCkgewogICBUZW1wb3JhcnlGaWxlIHNyY19maWxlOwogICBBU1NFUlRfRVEoNSwgVEVNUF9GQUlMVVJFX1JFVFJZKHdyaXRlKHNyY19maWxlLmZkLCAiaGVsbG8iLCA1KSkpOwpAQCAtNjEsNCArNjAsMyBAQAogICBBU1NFUlRfRVEoMiwgVEVNUF9GQUlMVVJFX1JFVFJZKHJlYWQoZHN0X2ZpbGUuZmQsICZidWYsIDIpKSk7CiAgIEFTU0VSVF9TVFJFUSgibGwiLCBidWYpOwogfQotI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy9zeXNfc29ja2V0X3Rlc3QuY3BwIGIvdGVzdHMvc3lzX3NvY2tldF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmRlMDI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3lzX3NvY2tldF90ZXN0LmNwcApAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgI2RlZmluZSBBQ0NFUFQ0X1NVUFBPUlRFRCAxCisgICNkZWZpbmUgUkVDVk1NU0dfU1VQUE9SVEVEIDEKKyAgI2RlZmluZSBTRU5ETU1TR19TVVBQT1JURUQgMQorI2VsaWYgZGVmaW5lZChfX0dMSUJDX1BSRVJFUSkKKyAgI2lmIF9fR0xJQkNfUFJFUkVRKDIsIDkpCisgICAgI2RlZmluZSBBQ0NFUFQ0X1NVUFBPUlRFRCAxCisgICNlbmRpZgorICAjaWYgX19HTElCQ19QUkVSRVEoMiwgMTIpCisgICAgI2RlZmluZSBSRUNWTU1TR19TVVBQT1JURUQgMQorICAjZW5kaWYKKyAgI2lmIF9fR0xJQkNfUFJFUkVRKDIsIDE0KQorICAgICNkZWZpbmUgU0VORE1NU0dfU1VQUE9SVEVEIDEKKyAgI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQUNDRVBUNF9TVVBQT1JURUQpIHx8IGRlZmluZWQoUkVDVk1NU0dfU1VQUE9SVEVEKSB8fCBkZWZpbmVkKFNFTkRNTVNHX1NVUFBPUlRFRCkKKworI2RlZmluZSBTT0NLX1BBVEggInRlc3QiCisKK3N0YXRpYyB2b2lkKiBDb25uZWN0Rm4odm9pZCogZGF0YSkgeworICBib29sICgqY2FsbGJhY2tfZm4pKGludCkgPSByZWludGVycHJldF9jYXN0PGJvb2wgKCopKGludCk+KGRhdGEpOworICB2b2lkKiByZXR1cm5fdmFsdWUgPSBOVUxMOworCisgIGludCBmZCA9IHNvY2tldChQRl9VTklYLCBTT0NLX1NFUVBBQ0tFVCB8IFNPQ0tfQ0xPRVhFQyB8IFNPQ0tfTk9OQkxPQ0ssIDApOworICBpZiAoZmQgPCAwKSB7CisgICAgR1RFU1RfTE9HXyhFUlJPUikgPDwgInNvY2tldCBjYWxsIGZhaWxlZDogIiA8PCBzdHJlcnJvcihlcnJubyk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKTsKKyAgfQorCisgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyOworICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisgIGFkZHIuc3VuX3BhdGhbMF0gPSAnXDAnOworICBzdHJjcHkoYWRkci5zdW5fcGF0aCArIDEsIFNPQ0tfUEFUSCk7CisKKyAgaWYgKGNvbm5lY3QoZmQsIHJlaW50ZXJwcmV0X2Nhc3Q8c3RydWN0IHNvY2thZGRyKj4oJmFkZHIpLCBzaXplb2YoYWRkcikpIDwgMCkgeworICAgIEdURVNUX0xPR18oRVJST1IpIDw8ICJjb25uZWN0IGNhbGwgZmFpbGVkOiAiIDw8IHN0cmVycm9yKGVycm5vKTsKKyAgICByZXR1cm5fdmFsdWUgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSk7CisgIH0KKyAgZWxzZSBpZiAoY2FsbGJhY2tfZm4gIT0gTlVMTCAmJiAhY2FsbGJhY2tfZm4oZmQpKSB7CisgICAgcmV0dXJuX3ZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpOworICB9CisKKyAgY2xvc2UoZmQpOworCisgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIFJ1blRlc3Qodm9pZCAoKnRlc3RfZm4pKHN0cnVjdCBzb2NrYWRkcl91biosIGludCksCisgICAgICAgICAgICAgICAgICAgIGJvb2wgKCpjYWxsYmFja19mbikoaW50IGZkKSkgeworICBpbnQgZmQgPSBzb2NrZXQoUEZfVU5JWCwgU09DS19TRVFQQUNLRVQsIDApOworICBBU1NFUlRfTkUoZmQsIC0xKSA8PCBzdHJlcnJvcihlcnJubyk7CisKKyAgc3RydWN0IHNvY2thZGRyX3VuIGFkZHI7CisgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgYWRkci5zdW5fcGF0aFswXSA9ICdcMCc7CisgIHN0cmNweShhZGRyLnN1bl9wYXRoICsgMSwgU09DS19QQVRIKTsKKworICBBU1NFUlRfTkUoLTEsIGJpbmQoZmQsIHJlaW50ZXJwcmV0X2Nhc3Q8c3RydWN0IHNvY2thZGRyKj4oJmFkZHIpLCBzaXplb2YoYWRkcikpKSA8PCBzdHJlcnJvcihlcnJubyk7CisKKyAgQVNTRVJUX05FKC0xLCBsaXN0ZW4oZmQsIDEpKSA8PCBzdHJlcnJvcihlcnJubyk7CisKKyAgcHRocmVhZF90IHRocmVhZDsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQsIE5VTEwsIENvbm5lY3RGbiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbGJhY2tfZm4pKSk7CisKKyAgZmRfc2V0IHJlYWRfc2V0OworICBGRF9aRVJPKCZyZWFkX3NldCk7CisgIEZEX1NFVChmZCwgJnJlYWRfc2V0KTsKKyAgdGltZXZhbCB0djsKKyAgdHYudHZfc2VjID0gNTsKKyAgdHYudHZfdXNlYyA9IDA7CisgIEFTU0VSVF9MVCgwLCBzZWxlY3QoZmQrMSwgJnJlYWRfc2V0LCBOVUxMLCBOVUxMLCAmdHYpKTsKKworICB0ZXN0X2ZuKCZhZGRyLCBmZCk7CisKKyAgdm9pZCogcmV0X3ZhbDsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfam9pbih0aHJlYWQsICZyZXRfdmFsKSk7CisgIEFTU0VSVF9FUShOVUxMLCByZXRfdmFsKTsKKworICBjbG9zZShmZCk7Cit9CisjZW5kaWYKKworVEVTVChzeXNfc29ja2V0LCBhY2NlcHQ0X2Vycm9yKSB7CisjaWYgZGVmaW5lZChBQ0NFUFQ0X1NVUFBPUlRFRCkKKyAgQVNTRVJUX0VRKC0xLCBhY2NlcHQ0KC0xLCBOVUxMLCBOVUxMLCAwKSk7CisgIEFTU0VSVF9FUShFQkFERiwgZXJybm8pOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoQUNDRVBUNF9TVVBQT1JURUQpCitzdGF0aWMgdm9pZCBUZXN0QWNjZXB0NChzdHJ1Y3Qgc29ja2FkZHJfdW4qIGFkZHIsIGludCBmZCkgeworICBzb2NrbGVuX3QgbGVuID0gc2l6ZW9mKCphZGRyKTsKKyAgaW50IGZkX2FjYyA9IGFjY2VwdDQoZmQsIHJlaW50ZXJwcmV0X2Nhc3Q8c3RydWN0IHNvY2thZGRyKj4oYWRkciksICZsZW4sIFNPQ0tfQ0xPRVhFQyk7CisgIEFTU0VSVF9ORShmZF9hY2MsIC0xKSA8PCBzdHJlcnJvcihlcnJubyk7CisKKyAgLy8gQ2hlY2sgdGhhdCB0aGUgZmxhZyB3YXMgc2V0IHByb3Blcmx5LgorICBBU1NFUlRfRVEoRkRfQ0xPRVhFQywgZmNudGwoZmRfYWNjLCBGX0dFVEZEKSAmIEZEX0NMT0VYRUMpOworCisgIGNsb3NlKGZkX2FjYyk7Cit9CisjZW5kaWYKKworVEVTVChzeXNfc29ja2V0LCBhY2NlcHQ0X3Ntb2tlKSB7CisjaWYgZGVmaW5lZChBQ0NFUFQ0X1NVUFBPUlRFRCkKKyAgUnVuVGVzdChUZXN0QWNjZXB0NCwgTlVMTCk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChSRUNWTU1TR19TVVBQT1JURUQpCitjb25zdCBjaGFyKiBnX1JlY3ZNc2dzW10gPSB7CisgICJSRUNWTU1TR19PTkUiLAorICAiUkVDVk1NU0dfVFdPIiwKKyAgIlJFQ1ZNTVNHX1RIUkVFIiwKK307CisjZGVmaW5lIE5VTV9SRUNWX01TR1MgKHNpemVvZihnX1JlY3ZNc2dzKS9zaXplb2YoY29uc3QgY2hhciopKQorCitzdGF0aWMgYm9vbCBTZW5kTXVsdGlwbGUoaW50IGZkKSB7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTlVNX1JFQ1ZfTVNHUzsgaSsrKSB7CisgICAgaWYgKHNlbmQoZmQsIGdfUmVjdk1zZ3NbaV0sIHN0cmxlbihnX1JlY3ZNc2dzW2ldKSArIDEsIDApIDwgMCkgeworICAgICAgR1RFU1RfTE9HXyhFUlJPUikgPDwgInNlbmQgY2FsbCBmYWlsZWQ6ICIgPDwgc3RyZXJyb3IoZXJybm8pOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBUZXN0UmVjdk1Nc2coc3RydWN0IHNvY2thZGRyX3VuICphZGRyLCBpbnQgZmQpIHsKKyAgc29ja2xlbl90IGxlbiA9IHNpemVvZigqYWRkcik7CisgIGludCBmZF9hY2MgPSBhY2NlcHQoZmQsIHJlaW50ZXJwcmV0X2Nhc3Q8c3RydWN0IHNvY2thZGRyKj4oYWRkciksICZsZW4pOworICBBU1NFUlRfTkUoZmRfYWNjLCAtMSkgPDwgc3RyZXJyb3IoZXJybm8pOworCisgIHN0cnVjdCBtbXNnaGRyIG1zZ3NbTlVNX1JFQ1ZfTVNHU107CisgIG1lbXNldChtc2dzLCAwLCBzaXplb2Yoc3RydWN0IG1tc2doZHIpKk5VTV9SRUNWX01TR1MpOworCisgIHN0cnVjdCBpb3ZlYyBpb1tOVU1fUkVDVl9NU0dTXTsKKyAgY2hhciBidWZzW05VTV9SRUNWX01TR1NdWzEwMF07CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTlVNX1JFQ1ZfTVNHUzsgaSsrKSB7CisgICAgaW9baV0uaW92X2Jhc2UgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihidWZzW2ldKTsKKyAgICBpb1tpXS5pb3ZfbGVuID0gc3RybGVuKGdfUmVjdk1zZ3NbaV0pICsgMTsKKworICAgIG1zZ3NbaV0ubXNnX2hkci5tc2dfaW92ID0gJmlvW2ldOworICAgIG1zZ3NbaV0ubXNnX2hkci5tc2dfaW92bGVuID0gMTsKKyAgICBtc2dzW2ldLm1zZ19sZW4gPSBzaXplb2Yoc3RydWN0IG1zZ2hkcik7CisgIH0KKworICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisgIG1lbXNldCgmdHMsIDAsIHNpemVvZih0cykpOworICB0cy50dl9zZWMgPSA1OworICB0cy50dl9uc2VjID0gMDsKKyAgQVNTRVJUX0VRKE5VTV9SRUNWX01TR1MsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlY3ZtbXNnKGZkX2FjYywgbXNncywgTlVNX1JFQ1ZfTVNHUywgMCwgJnRzKSkpCisgICAgICAgICAgIDw8IHN0cmVycm9yKGVycm5vKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBOVU1fUkVDVl9NU0dTOyBpKyspIHsKKyAgICBBU1NFUlRfU1RSRVEoZ19SZWN2TXNnc1tpXSwgYnVmc1tpXSk7CisgIH0KKworICBjbG9zZShmZF9hY2MpOworfQorI2VuZGlmCisKK1RFU1Qoc3lzX3NvY2tldCwgcmVjdm1tc2dfc21va2UpIHsKKyNpZiBkZWZpbmVkKFJFQ1ZNTVNHX1NVUFBPUlRFRCkKKyAgUnVuVGVzdChUZXN0UmVjdk1Nc2csIFNlbmRNdWx0aXBsZSk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHN5c19zb2NrZXQsIHJlY3ZtbXNnX2Vycm9yKSB7CisjaWYgZGVmaW5lZChSRUNWTU1TR19TVVBQT1JURUQpCisgIEFTU0VSVF9FUSgtMSwgcmVjdm1tc2coLTEsIE5VTEwsIDAsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKEVCQURGLCBlcnJubyk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChTRU5ETU1TR19TVVBQT1JURUQpCitjb25zdCBjaGFyKiBnX1NlbmRNc2dzW10gPSB7CisgICJNU0dfT05FIiwKKyAgIk1TR19UV08iLAorICAiTVNHX1RIUkVFIgorfTsKKyNkZWZpbmUgTlVNX1NFTkRfTVNHUyAoc2l6ZW9mKGdfU2VuZE1zZ3MpL3NpemVvZihjb25zdCBjaGFyKikpCisKK3N0YXRpYyBib29sIFNlbmRNTXNnKGludCBmZCkgeworICBzdHJ1Y3QgbW1zZ2hkciBtc2dzW05VTV9TRU5EX01TR1NdOworICBtZW1zZXQobXNncywgMCwgc2l6ZW9mKHN0cnVjdCBtbXNnaGRyKSpOVU1fU0VORF9NU0dTKTsKKyAgc3RydWN0IGlvdmVjIGlvW05VTV9TRU5EX01TR1NdOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE5VTV9TRU5EX01TR1M7IGkrKykgeworICAgIGlvW2ldLmlvdl9iYXNlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDxjaGFyKj4oZ19TZW5kTXNnc1tpXSkpOworICAgIGlvW2ldLmlvdl9sZW4gPSBzdHJsZW4oZ19TZW5kTXNnc1tpXSkgKyAxOworICAgIG1zZ3NbaV0ubXNnX2hkci5tc2dfaW92ID0gJmlvW2ldOworICAgIG1zZ3NbaV0ubXNnX2hkci5tc2dfaW92bGVuID0gMTsKKyAgICBtc2dzW2ldLm1zZ19sZW4gPSBzaXplb2Yoc3RydWN0IG1zZ2hkcik7CisgIH0KKworICBpZiAoc2VuZG1tc2coZmQsIG1zZ3MsIE5VTV9TRU5EX01TR1MsIDApIDwgMCkgeworICAgIEdURVNUX0xPR18oRVJST1IpIDw8ICJzZW5kbW1zZyBjYWxsIGZhaWxlZDogIiA8PCBzdHJlcnJvcihlcnJubyk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBUZXN0U2VuZE1Nc2coc3RydWN0IHNvY2thZGRyX3VuICphZGRyLCBpbnQgZmQpIHsKKyAgc29ja2xlbl90IGxlbiA9IHNpemVvZigqYWRkcik7CisgIGludCBmZF9hY2MgPSBhY2NlcHQoZmQsIHJlaW50ZXJwcmV0X2Nhc3Q8c3RydWN0IHNvY2thZGRyKj4oYWRkciksICZsZW4pOworICBBU1NFUlRfTkUoZmRfYWNjLCAtMSkgPDwgc3RyZXJyb3IoZXJybm8pOworCisgIGZkX3NldCByZWFkX3NldDsKKyAgRkRfWkVSTygmcmVhZF9zZXQpOworICBGRF9TRVQoZmRfYWNjLCAmcmVhZF9zZXQpOworCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTlVNX1NFTkRfTVNHUzsgaSsrKSB7CisgICAgdGltZXZhbCB0djsKKyAgICB0di50dl9zZWMgPSA1OworICAgIHR2LnR2X3VzZWMgPSAwOworICAgIEFTU0VSVF9MVCgwLCBzZWxlY3QoZmRfYWNjKzEsICZyZWFkX3NldCwgTlVMTCwgTlVMTCwgJnR2KSk7CisgICAgY2hhciBidWZmZXJbMTAwXTsKKyAgICBBU1NFUlRfRVEoc3RybGVuKGdfU2VuZE1zZ3NbaV0pICsgMSwKKyAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWN2KGZkX2FjYywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgMCkpKTsKKyAgICBBU1NFUlRfU1RSRVEoZ19TZW5kTXNnc1tpXSwgYnVmZmVyKTsKKyAgfQorCisgIGNsb3NlKGZkX2FjYyk7Cit9CisjZW5kaWYKKworVEVTVChzeXNfc29ja2V0LCBzZW5kbW1zZ19zbW9rZSkgeworI2lmIGRlZmluZWQoU0VORE1NU0dfU1VQUE9SVEVEKQorICBSdW5UZXN0KFRlc3RTZW5kTU1zZywgU2VuZE1Nc2cpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYKK30KKworVEVTVChzeXNfc29ja2V0LCBzZW5kbW1zZ19lcnJvcikgeworI2lmIGRlZmluZWQoU0VORE1NU0dfU1VQUE9SVEVEKQorICBBU1NFUlRfRVEoLTEsIHNlbmRtbXNnKC0xLCBOVUxMLCAwLCAwKSk7CisgIEFTU0VSVF9FUShFQkFERiwgZXJybm8pOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c19zdGF0X3Rlc3QuY3BwIGIvdGVzdHMvc3lzX3N0YXRfdGVzdC5jcHAKaW5kZXggMTc2ZDQ2Mi4uNjQwNDlhYiAxMDA2NDQKLS0tIGEvdGVzdHMvc3lzX3N0YXRfdGVzdC5jcHAKKysrIGIvdGVzdHMvc3lzX3N0YXRfdGVzdC5jcHAKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAKQEAgLTU1LDE2ICs1NiwyOSBAQAogfQogCiBURVNUKHN5c19zdGF0LCBta2ZpZm8pIHsKLSAgLy8gUmFjeSBidXQgcHJvYmFibHkgc3VmZmljaWVudCB3YXkgdG8gZ2V0IGEgc3VpdGFibGUgZmlsZW5hbWUuCi0gIHN0ZDo6c3RyaW5nIHBhdGg7Ci0gIHsKLSAgICBUZW1wb3JhcnlGaWxlIHRmOwotICAgIHBhdGggPSB0Zi5maWxlbmFtZTsKLSAgfQorICBpZiAoZ2V0dWlkKCkgPT0gMCkgeworICAgIC8vIFJhY3kgYnV0IHByb2JhYmx5IHN1ZmZpY2llbnQgd2F5IHRvIGdldCBhIHN1aXRhYmxlIGZpbGVuYW1lLgorICAgIHN0ZDo6c3RyaW5nIHBhdGg7CisgICAgeworICAgICAgVGVtcG9yYXJ5RmlsZSB0ZjsKKyAgICAgIHBhdGggPSB0Zi5maWxlbmFtZTsKKyAgICB9CiAKLSAgQVNTRVJUX0VRKDAsIG1rZmlmbyhwYXRoLmNfc3RyKCksIDA2NjYpKTsKLSAgc3RydWN0IHN0YXQgc2I7Ci0gIEFTU0VSVF9FUSgwLCBzdGF0KHBhdGguY19zdHIoKSwgJnNiKSk7Ci0gIEFTU0VSVF9UUlVFKFNfSVNGSUZPKHNiLnN0X21vZGUpKTsKLSAgdW5saW5rKHBhdGguY19zdHIoKSk7CisgICAgQVNTRVJUX0VRKDAsIG1rZmlmbyhwYXRoLmNfc3RyKCksIDA2NjYpKTsKKyAgICBzdHJ1Y3Qgc3RhdCBzYjsKKyAgICBBU1NFUlRfRVEoMCwgc3RhdChwYXRoLmNfc3RyKCksICZzYikpOworICAgIEFTU0VSVF9UUlVFKFNfSVNGSUZPKHNiLnN0X21vZGUpKTsKKyAgICB1bmxpbmsocGF0aC5jX3N0cigpKTsKKyAgfSBlbHNlIHsKKyAgICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3Qgb25seSBwZXJmb3JtcyBhIHRlc3Qgd2hlbiBydW4gYXMgcm9vdC4iOworICB9Cit9CisKK1RFU1Qoc3lzX3N0YXQsIHN0YXQ2NF9sc3RhdDY0X2ZzdGF0NjQpIHsKKyAgc3RydWN0IHN0YXQ2NCBzYjsKKyAgQVNTRVJUX0VRKDAsIHN0YXQ2NCgiL3Byb2MvdmVyc2lvbiIsICZzYikpOworICBBU1NFUlRfRVEoMCwgbHN0YXQ2NCgiL3Byb2MvdmVyc2lvbiIsICZzYikpOworICBpbnQgZmQgPSBvcGVuKCIvcHJvYy92ZXJzaW9uIiwgT19SRE9OTFkpOworICBBU1NFUlRfRVEoMCwgZnN0YXQ2NChmZCwgJnNiKSk7CisgIGNsb3NlKGZkKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N5c19zdGF0dmZzX3Rlc3QuY3BwIGIvdGVzdHMvc3lzX3N0YXR2ZnNfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxOWUxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N5c19zdGF0dmZzX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdGF0VmZzVD4gdm9pZCBDaGVjayhTdGF0VmZzVCYgc2IpIHsKKyAgRVhQRUNUX0VRKDQwOTZVLCBzYi5mX2JzaXplKTsKKyAgRVhQRUNUX0VRKDBVLCBzYi5mX2JmcmVlKTsKKyAgRVhQRUNUX0VRKDBVLCBzYi5mX2ZmcmVlKTsKKyAgRVhQRUNUX0VRKDBVLCBzYi5mX2ZzaWQpOworICBFWFBFQ1RfRVEoMjU1VSwgc2IuZl9uYW1lbWF4KTsKK30KKworVEVTVChzeXNfc3RhdHZmcywgc3RhdHZmcykgeworICBzdHJ1Y3Qgc3RhdHZmcyBzYjsKKyAgQVNTRVJUX0VRKDAsIHN0YXR2ZnMoIi9wcm9jIiwgJnNiKSk7CisgIENoZWNrKHNiKTsKK30KKworVEVTVChzeXNfc3RhdHZmcywgc3RhdHZmczY0KSB7CisgIHN0cnVjdCBzdGF0dmZzNjQgc2I7CisgIEFTU0VSVF9FUSgwLCBzdGF0dmZzNjQoIi9wcm9jIiwgJnNiKSk7CisgIENoZWNrKHNiKTsKK30KKworVEVTVChzeXNfc3RhdHZmcywgZnN0YXR2ZnMpIHsKKyAgc3RydWN0IHN0YXR2ZnMgc2I7CisgIGludCBmZCA9IG9wZW4oIi9wcm9jIiwgT19SRE9OTFkpOworICBBU1NFUlRfRVEoMCwgZnN0YXR2ZnMoZmQsICZzYikpOworICBjbG9zZShmZCk7CisgIENoZWNrKHNiKTsKK30KK1RFU1Qoc3lzX3N0YXR2ZnMsIGZzdGF0dmZzNjQpIHsKKyAgc3RydWN0IHN0YXR2ZnM2NCBzYjsKKyAgaW50IGZkID0gb3BlbigiL3Byb2MiLCBPX1JET05MWSk7CisgIEFTU0VSVF9FUSgwLCBmc3RhdHZmczY0KGZkLCAmc2IpKTsKKyAgY2xvc2UoZmQpOworICBDaGVjayhzYik7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zeXNfdGltZV90ZXN0LmNwcCBiL3Rlc3RzL3N5c190aW1lX3Rlc3QuY3BwCmluZGV4IDczMDk5MmYuLmJiMTQyYmMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3N5c190aW1lX3Rlc3QuY3BwCisrKyBiL3Rlc3RzL3N5c190aW1lX3Rlc3QuY3BwCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogCiAjaW5jbHVkZSAiVGVtcG9yYXJ5RmlsZS5oIgpAQCAtNDYsMyArNDcsMjMgQEAKICAgVGVtcG9yYXJ5RmlsZSB0ZjsKICAgQVNTRVJUX0VRKDAsIHV0aW1lcyh0Zi5maWxlbmFtZSwgTlVMTCkpOwogfQorCitURVNUKHN5c190aW1lLCBnZXR0aW1lb2ZkYXkpIHsKKyAgLy8gVHJ5IHRvIGVuc3VyZSB0aGF0IG91ciB2ZHNvIGdldHRpbWVvZmRheSBpcyB3b3JraW5nLgorICB0aW1ldmFsIHR2MTsKKyAgQVNTRVJUX0VRKDAsIGdldHRpbWVvZmRheSgmdHYxLCBOVUxMKSk7CisgIHRpbWV2YWwgdHYyOworICBBU1NFUlRfRVEoMCwgc3lzY2FsbChfX05SX2dldHRpbWVvZmRheSwgJnR2MiwgTlVMTCkpOworCisgIC8vIFdoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28/CisgIHR2Mi50dl9zZWMgLT0gdHYxLnR2X3NlYzsKKyAgdHYyLnR2X3VzZWMgLT0gdHYxLnR2X3VzZWM7CisgIGlmICh0djIudHZfdXNlYyA8IDApIHsKKyAgICAtLXR2Mi50dl9zZWM7CisgICAgdHYyLnR2X3VzZWMgKz0gMTAwMDAwMDsKKyAgfQorCisgIC8vIFNob3VsZCBiZSBsZXNzIHRoYW4gKGEgdmVyeSBnZW5lcm91cywgdG8gdHJ5IHRvIGF2b2lkIGZsYWtpbmVzcykgMTAwMHVzLgorICBBU1NFUlRfRVEoMCwgdHYyLnR2X3NlYyk7CisgIEFTU0VSVF9MVCh0djIudHZfdXNlYywgMTAwMCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zeXNfdmZzX3Rlc3QuY3BwIGIvdGVzdHMvc3lzX3Zmc190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjA1NjYwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3lzX3Zmc190ZXN0LmNwcApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxzeXMvdmZzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdGF0RnNUPiB2b2lkIENoZWNrKFN0YXRGc1QmIHNiKSB7CisgIEVYUEVDVF9FUSg0MDk2LCBzdGF0aWNfY2FzdDxpbnQ+KHNiLmZfYnNpemUpKTsKKyAgRVhQRUNUX0VRKDBVLCBzYi5mX2JmcmVlKTsKKyAgRVhQRUNUX0VRKDBVLCBzYi5mX2ZmcmVlKTsKKyAgRVhQRUNUX0VRKDAsIHNiLmZfZnNpZC5fX3ZhbFswXSk7CisgIEVYUEVDVF9FUSgwLCBzYi5mX2ZzaWQuX192YWxbMV0pOworICBFWFBFQ1RfRVEoMjU1LCBzdGF0aWNfY2FzdDxpbnQ+KHNiLmZfbmFtZWxlbikpOworfQorCitURVNUKHN5c192ZnMsIHN0YXRmcykgeworICBzdHJ1Y3Qgc3RhdGZzIHNiOworICBBU1NFUlRfRVEoMCwgc3RhdGZzKCIvcHJvYyIsICZzYikpOworICBDaGVjayhzYik7Cit9CisKK1RFU1Qoc3lzX3Zmcywgc3RhdGZzNjQpIHsKKyAgc3RydWN0IHN0YXRmczY0IHNiOworICBBU1NFUlRfRVEoMCwgc3RhdGZzNjQoIi9wcm9jIiwgJnNiKSk7CisgIENoZWNrKHNiKTsKK30KKworVEVTVChzeXNfdmZzLCBmc3RhdGZzKSB7CisgIHN0cnVjdCBzdGF0ZnMgc2I7CisgIGludCBmZCA9IG9wZW4oIi9wcm9jIiwgT19SRE9OTFkpOworICBBU1NFUlRfRVEoMCwgZnN0YXRmcyhmZCwgJnNiKSk7CisgIGNsb3NlKGZkKTsKKyAgQ2hlY2soc2IpOworfQorVEVTVChzeXNfdmZzLCBmc3RhdGZzNjQpIHsKKyAgc3RydWN0IHN0YXRmczY0IHNiOworICBpbnQgZmQgPSBvcGVuKCIvcHJvYyIsIE9fUkRPTkxZKTsKKyAgQVNTRVJUX0VRKDAsIGZzdGF0ZnM2NChmZCwgJnNiKSk7CisgIGNsb3NlKGZkKTsKKyAgQ2hlY2soc2IpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3lzdGVtX3Byb3BlcnRpZXNfdGVzdC5jcHAgYi90ZXN0cy9zeXN0ZW1fcHJvcGVydGllc190ZXN0LmNwcAppbmRleCA1MzY3OTcyLi5iZmQ1ODU0IDEwMDY0NAotLS0gYS90ZXN0cy9zeXN0ZW1fcHJvcGVydGllc190ZXN0LmNwcAorKysgYi90ZXN0cy9zeXN0ZW1fcHJvcGVydGllc190ZXN0LmNwcApAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0cmluZz4KIAotI2lmIF9fQklPTklDX18KKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAKICNkZWZpbmUgX1JFQUxMWV9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSF8KICNpbmNsdWRlIDxzeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmg+CkBAIC02OSw3ICs2OSw1NCBAQAogICAgIHZvaWQgKm9sZF9wYTsKIH07CiAKK3N0YXRpYyB2b2lkIGZvcmVhY2hfdGVzdF9jYWxsYmFjayhjb25zdCBwcm9wX2luZm8gKnBpLCB2b2lkKiBjb29raWUpIHsKKyAgICBzaXplX3QgKmNvdW50ID0gc3RhdGljX2Nhc3Q8c2l6ZV90ICo+KGNvb2tpZSk7CisKKyAgICBBU1NFUlRfTkUoKHByb3BfaW5mbyAqKU5VTEwsIHBpKTsKKyAgICAoKmNvdW50KSsrOworfQorCitzdGF0aWMgdm9pZCBoaWVyYXJjaGljYWxfdGVzdF9jYWxsYmFjayhjb25zdCBwcm9wX2luZm8gKnBpLCB2b2lkICpjb29raWUpIHsKKyAgICBib29sICgqb2spWzhdWzhdID0gc3RhdGljX2Nhc3Q8Ym9vbCAoKilbOF1bOF0+KGNvb2tpZSk7CisKKyAgICBjaGFyIG5hbWVbUFJPUF9OQU1FX01BWF07CisgICAgY2hhciB2YWx1ZVtQUk9QX1ZBTFVFX01BWF07CisKKyAgICBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKHBpLCBuYW1lLCB2YWx1ZSk7CisKKyAgICBpbnQgbmFtZV9pLCBuYW1lX2osIG5hbWVfazsKKyAgICBpbnQgdmFsdWVfaSwgdmFsdWVfaiwgdmFsdWVfazsKKyAgICBBU1NFUlRfRVEoMywgc3NjYW5mKG5hbWUsICJwcm9wZXJ0eV8lZC4lZC4lZCIsICZuYW1lX2ksICZuYW1lX2osICZuYW1lX2spKTsKKyAgICBBU1NFUlRfRVEoMywgc3NjYW5mKHZhbHVlLCAidmFsdWVfJWQuJWQuJWQiLCAmdmFsdWVfaSwgJnZhbHVlX2osICZ2YWx1ZV9rKSk7CisgICAgQVNTRVJUX0VRKG5hbWVfaSwgdmFsdWVfaSk7CisgICAgQVNTRVJUX0dFKG5hbWVfaSwgMCk7CisgICAgQVNTRVJUX0xUKG5hbWVfaSwgOCk7CisgICAgQVNTRVJUX0VRKG5hbWVfaiwgdmFsdWVfaik7CisgICAgQVNTRVJUX0dFKG5hbWVfaiwgMCk7CisgICAgQVNTRVJUX0xUKG5hbWVfaiwgOCk7CisgICAgQVNTRVJUX0VRKG5hbWVfaywgdmFsdWVfayk7CisgICAgQVNTRVJUX0dFKG5hbWVfaywgMCk7CisgICAgQVNTRVJUX0xUKG5hbWVfaywgOCk7CisKKyAgICBva1tuYW1lX2ldW25hbWVfal1bbmFtZV9rXSA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkICpQcm9wZXJ0eVdhaXRIZWxwZXJGbih2b2lkICphcmcpIHsKKyAgICBpbnQgKmZsYWcgPSAoaW50ICopYXJnOworICAgIHByb3BfaW5mbyAqcGk7CisgICAgcGkgPSAocHJvcF9pbmZvICopX19zeXN0ZW1fcHJvcGVydHlfZmluZCgicHJvcGVydHkiKTsKKyAgICB1c2xlZXAoMTAwMDAwKTsKKworICAgICpmbGFnID0gMTsKKyAgICBfX3N5c3RlbV9wcm9wZXJ0eV91cGRhdGUocGksICJ2YWx1ZTMiLCA2KTsKKworICAgIHJldHVybiBOVUxMOworfQorCisjZW5kaWYgLy8gX19CSU9OSUNfXworCiBURVNUKHByb3BlcnRpZXMsIGFkZCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhOwogICAgIEFTU0VSVF9UUlVFKHBhLnZhbGlkKTsKIApAQCAtODcsOSArMTM0LDEzIEBACiAKICAgICBBU1NFUlRfRVEoNiwgX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJwcm9wZXJ0eV9vdGhlciIsIHByb3B2YWx1ZSkpOwogICAgIEFTU0VSVF9TVFJFUShwcm9wdmFsdWUsICJ2YWx1ZTMiKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QocHJvcGVydGllcywgdXBkYXRlKSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICAgIExvY2FsUHJvcGVydHlUZXN0U3RhdGUgcGE7CiAgICAgQVNTRVJUX1RSVUUocGEudmFsaWQpOwogCkBAIC0xMjAsOSArMTcxLDEzIEBACiAKICAgICBBU1NFUlRfRVEoNiwgX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJwcm9wZXJ0eV9vdGhlciIsIHByb3B2YWx1ZSkpOwogICAgIEFTU0VSVF9TVFJFUShwcm9wdmFsdWUsICJ2YWx1ZTYiKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QocHJvcGVydGllcywgZmlsbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhOwogICAgIEFTU0VSVF9UUlVFKHBhLnZhbGlkKTsKICAgICBjaGFyIHByb3BfbmFtZVtQUk9QX05BTUVfTUFYXTsKQEAgLTE2MSwxNiArMjE2LDEzIEBACiAgICAgICAgIEFTU0VSVF9FUShQUk9QX1ZBTFVFX01BWCAtIDEsIF9fc3lzdGVtX3Byb3BlcnR5X2dldChwcm9wX25hbWUsIHByb3BfdmFsdWVfcmV0KSk7CiAgICAgICAgIEFTU0VSVF9FUSgwLCBtZW1jbXAocHJvcF92YWx1ZSwgcHJvcF92YWx1ZV9yZXQsIFBST1BfVkFMVUVfTUFYKSk7CiAgICAgfQotfQotCi1zdGF0aWMgdm9pZCBmb3JlYWNoX3Rlc3RfY2FsbGJhY2soY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCogY29va2llKSB7Ci0gICAgc2l6ZV90ICpjb3VudCA9IHN0YXRpY19jYXN0PHNpemVfdCAqPihjb29raWUpOwotCi0gICAgQVNTRVJUX05FKChwcm9wX2luZm8gKilOVUxMLCBwaSk7Ci0gICAgKCpjb3VudCkrKzsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QocHJvcGVydGllcywgZm9yZWFjaCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhOwogICAgIEFTU0VSVF9UUlVFKHBhLnZhbGlkKTsKICAgICBzaXplX3QgY291bnQgPSAwOwpAQCAtMTgxLDkgKzIzMywxMyBAQAogCiAgICAgQVNTRVJUX0VRKDAsIF9fc3lzdGVtX3Byb3BlcnR5X2ZvcmVhY2goZm9yZWFjaF90ZXN0X2NhbGxiYWNrLCAmY291bnQpKTsKICAgICBBU1NFUlRfRVEoM1UsIGNvdW50KTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QocHJvcGVydGllcywgZmluZF9udGgpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSBwYTsKICAgICBBU1NFUlRfVFJVRShwYS52YWxpZCk7CiAKQEAgLTIwMSwzNCArMjU3LDEzIEBACiAgICAgQVNTRVJUX0VRKChjb25zdCBwcm9wX2luZm8gKilOVUxMLCBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX250aCgxMDApKTsKICAgICBBU1NFUlRfRVEoKGNvbnN0IHByb3BfaW5mbyAqKU5VTEwsIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfbnRoKDIwMCkpOwogICAgIEFTU0VSVF9FUSgoY29uc3QgcHJvcF9pbmZvICopTlVMTCwgX19zeXN0ZW1fcHJvcGVydHlfZmluZF9udGgoMjQ3KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpZXJhcmNoaWNhbF90ZXN0X2NhbGxiYWNrKGNvbnN0IHByb3BfaW5mbyAqcGksIHZvaWQgKmNvb2tpZSkgewotICAgIGJvb2wgKCpvaylbOF1bOF0gPSBzdGF0aWNfY2FzdDxib29sICgqKVs4XVs4XT4oY29va2llKTsKLQotICAgIGNoYXIgbmFtZVtQUk9QX05BTUVfTUFYXTsKLSAgICBjaGFyIHZhbHVlW1BST1BfVkFMVUVfTUFYXTsKLQotICAgIF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQocGksIG5hbWUsIHZhbHVlKTsKLQotICAgIGludCBuYW1lX2ksIG5hbWVfaiwgbmFtZV9rOwotICAgIGludCB2YWx1ZV9pLCB2YWx1ZV9qLCB2YWx1ZV9rOwotICAgIEFTU0VSVF9FUSgzLCBzc2NhbmYobmFtZSwgInByb3BlcnR5XyVkLiVkLiVkIiwgJm5hbWVfaSwgJm5hbWVfaiwgJm5hbWVfaykpOwotICAgIEFTU0VSVF9FUSgzLCBzc2NhbmYodmFsdWUsICJ2YWx1ZV8lZC4lZC4lZCIsICZ2YWx1ZV9pLCAmdmFsdWVfaiwgJnZhbHVlX2spKTsKLSAgICBBU1NFUlRfRVEobmFtZV9pLCB2YWx1ZV9pKTsKLSAgICBBU1NFUlRfR0UobmFtZV9pLCAwKTsKLSAgICBBU1NFUlRfTFQobmFtZV9pLCA4KTsKLSAgICBBU1NFUlRfRVEobmFtZV9qLCB2YWx1ZV9qKTsKLSAgICBBU1NFUlRfR0UobmFtZV9qLCAwKTsKLSAgICBBU1NFUlRfTFQobmFtZV9qLCA4KTsKLSAgICBBU1NFUlRfRVEobmFtZV9rLCB2YWx1ZV9rKTsKLSAgICBBU1NFUlRfR0UobmFtZV9rLCAwKTsKLSAgICBBU1NFUlRfTFQobmFtZV9rLCA4KTsKLQotICAgIG9rW25hbWVfaV1bbmFtZV9qXVtuYW1lX2tdID0gdHJ1ZTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgICBHVEVTVF9MT0dfKElORk8pIDw8ICJUaGlzIHRlc3QgZG9lcyBub3RoaW5nLlxuIjsKKyNlbmRpZiAvLyBfX0JJT05JQ19fCiB9CiAKIFRFU1QocHJvcGVydGllcywgZmlsbF9oaWVyYXJjaGljYWwpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSBwYTsKICAgICBBU1NFUlRfVFJVRShwYS52YWxpZCk7CiAgICAgY2hhciBwcm9wX25hbWVbUFJPUF9OQU1FX01BWF07CkBAIC0yNzksOSArMzE0LDEzIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisjZWxzZSAvLyBfX0JJT05JQ19fCisgICAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiBURVNUKHByb3BlcnRpZXMsIGVycm9ycykgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhOwogICAgIEFTU0VSVF9UUlVFKHBhLnZhbGlkKTsKICAgICBjaGFyIHByb3BfdmFsdWVbUFJPUF9OQU1FX01BWF07CkBAIC0yOTYsOSArMzM1LDEzIEBACiAgICAgQVNTRVJUX0VRKC0xLCBfX3N5c3RlbV9wcm9wZXJ0eV9hZGQoIm5hbWUiLCBQUk9QX05BTUVfTUFYLCAidmFsdWUiLCA1KSk7CiAgICAgQVNTRVJUX0VRKC0xLCBfX3N5c3RlbV9wcm9wZXJ0eV9hZGQoIm5hbWUiLCA0LCAidmFsdWUiLCBQUk9QX1ZBTFVFX01BWCkpOwogICAgIEFTU0VSVF9FUSgtMSwgX19zeXN0ZW1fcHJvcGVydHlfdXBkYXRlKE5VTEwsICJ2YWx1ZSIsIFBST1BfVkFMVUVfTUFYKSk7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgICAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiBURVNUKHByb3BlcnRpZXMsIHNlcmlhbCkgeworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKICAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhOwogICAgIEFTU0VSVF9UUlVFKHBhLnZhbGlkKTsKICAgICBjb25zdCBwcm9wX2luZm8gKnBpOwpAQCAtMzA5LDIyICszNTIsMTMgQEAKICAgICBzZXJpYWwgPSBfX3N5c3RlbV9wcm9wZXJ0eV9zZXJpYWwocGkpOwogICAgIEFTU0VSVF9FUSgwLCBfX3N5c3RlbV9wcm9wZXJ0eV91cGRhdGUoKHByb3BfaW5mbyAqKXBpLCAidmFsdWUyIiwgNikpOwogICAgIEFTU0VSVF9ORShzZXJpYWwsIF9fc3lzdGVtX3Byb3BlcnR5X3NlcmlhbChwaSkpOwotfQotCi1zdGF0aWMgdm9pZCAqUHJvcGVydHlXYWl0SGVscGVyRm4odm9pZCAqYXJnKQotewotICAgIGludCAqZmxhZyA9IChpbnQgKilhcmc7Ci0gICAgcHJvcF9pbmZvICpwaTsKLSAgICBwaSA9IChwcm9wX2luZm8gKilfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKCJwcm9wZXJ0eSIpOwotICAgIHVzbGVlcCgxMDAwMDApOwotCi0gICAgKmZsYWcgPSAxOwotICAgIF9fc3lzdGVtX3Byb3BlcnR5X3VwZGF0ZShwaSwgInZhbHVlMyIsIDYpOwotCi0gICAgcmV0dXJuIE5VTEw7CisjZWxzZSAvLyBfX0JJT05JQ19fCisgICAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQogCiBURVNUKHByb3BlcnRpZXMsIHdhaXQpIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCiAgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSBwYTsKICAgICBBU1NFUlRfVFJVRShwYS52YWxpZCk7CiAgICAgdW5zaWduZWQgaW50IHNlcmlhbDsKQEAgLTM0Niw2ICszODAsOSBAQAogCiAgICAgdm9pZCogcmVzdWx0OwogICAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2pvaW4odCwgJnJlc3VsdCkpOworI2Vsc2UgLy8gX19CSU9OSUNfXworICAgIEdURVNUX0xPR18oSU5GTykgPDwgIlRoaXMgdGVzdCBkb2VzIG5vdGhpbmcuXG4iOworI2VuZGlmIC8vIF9fQklPTklDX18KIH0KIAogY2xhc3MgS2lsbGVkQnlGYXVsdCB7CkBAIC0zNjIsNiArMzk5LDcgQEAKIH0KIAogVEVTVChwcm9wZXJ0aWVzX0RlYXRoVGVzdCwgcmVhZF9vbmx5KSB7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQogICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CiAKICAgLy8gVGhpcyB0ZXN0IG9ubHkgbWFrZXMgc2Vuc2UgaWYgd2UncmUgdGFsa2luZyB0byB0aGUgcmVhbCBzeXN0ZW0gcHJvcGVydHkgc2VydmljZS4KQEAgLTM3MSw2ICs0MDksNyBAQAogICB9CiAKICAgQVNTRVJUX0VYSVQoX19zeXN0ZW1fcHJvcGVydHlfYWRkKCJwcm9wZXJ0eSIsIDgsICJ2YWx1ZSIsIDUpLCBLaWxsZWRCeUZhdWx0KCksICIiKTsKKyNlbHNlIC8vIF9fQklPTklDX18KKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IGRvZXMgbm90aGluZy5cbiI7CisjZW5kaWYgLy8gX19CSU9OSUNfXwogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3RpbWVfdGVzdC5jcHAgYi90ZXN0cy90aW1lX3Rlc3QuY3BwCmluZGV4IGZiNWE0YTcuLjI0MWM0YTAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3RpbWVfdGVzdC5jcHAKKysrIGIvdGVzdHMvdGltZV90ZXN0LmNwcApAQCAtMTQsMzQgKzE0LDE4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCiAjaW5jbHVkZSA8dGltZS5oPgogCi0jaWZkZWYgX19CSU9OSUNfXyAvLyBta3RpbWVfdHogaXMgYSBiaW9uaWMgZXh0ZW5zaW9uLgotI2luY2x1ZGUgPGxpYmMvcHJpdmF0ZS9iaW9uaWNfdGltZS5oPgotVEVTVCh0aW1lLCBta3RpbWVfdHopIHsKLSAgc3RydWN0IHRtIGVwb2NoOwotICBtZW1zZXQoJmVwb2NoLCAwLCBzaXplb2YodG0pKTsKLSAgZXBvY2gudG1feWVhciA9IDE5NzAgLSAxOTAwOwotICBlcG9jaC50bV9tb24gPSAxOwotICBlcG9jaC50bV9tZGF5ID0gMTsKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgogCi0gIC8vIEFscGhhYmV0aWNhbGx5IGZpcnN0LiBDb2luY2lkZW50YWxseSBlcXVpdmFsZW50IHRvIFVUQy4KLSAgQVNTRVJUX0VRKDI2Nzg0MDAsIG1rdGltZV90eigmZXBvY2gsICJBZnJpY2EvQWJpZGphbiIpKTsKLQotICAvLyBBbHBoYWJldGljYWxseSBsYXN0LiBDb2luY2lkZW50YWxseSBlcXVpdmFsZW50IHRvIFVUQy4KLSAgQVNTRVJUX0VRKDI2Nzg0MDAsIG1rdGltZV90eigmZXBvY2gsICJadWx1IikpOwotCi0gIC8vIFNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlLCBub3QgVVRDLgotICBBU1NFUlRfRVEoMjcwNzIwMCwgbWt0aW1lX3R6KCZlcG9jaCwgIkFtZXJpY2EvTG9zX0FuZ2VsZXMiKSk7Ci0KLSAgLy8gTWlzc2luZy4gRmFsbHMgYmFjayB0byBVVEMuCi0gIEFTU0VSVF9FUSgyNjc4NDAwLCBta3RpbWVfdHooJmVwb2NoLCAiUFNUIikpOwotfQotI2VuZGlmCisjaW5jbHVkZSAiU2NvcGVkU2lnbmFsSGFuZGxlci5oIgogCiBURVNUKHRpbWUsIGdtdGltZSkgewogICB0aW1lX3QgdCA9IDA7CkBAIC01NSw3ICszOSwzNyBAQAogICBBU1NFUlRfRVEoMTk3MCwgYnJva2VuX2Rvd24tPnRtX3llYXIgKyAxOTAwKTsKIH0KIAotI2lmIF9fQklPTklDX18KK3N0YXRpYyB2b2lkKiBnbXRpbWVfbm9fc3RhY2tfb3ZlcmZsb3dfMTQzMTM3MDNfZm4odm9pZCopIHsKKyAgY29uc3QgY2hhciogb3JpZ2luYWxfdHogPSBnZXRlbnYoIlRaIik7CisgIC8vIEVuc3VyZSB3ZSdsbCBhY3R1YWxseSBoYXZlIHRvIGVudGVyIHR6bG9hZCBieSB1c2luZyBhIHRpbWUgem9uZSB0aGF0IGRvZXNuJ3QgZXhpc3QuCisgIHNldGVudigiVFoiLCAiZ210aW1lX3N0YWNrX292ZXJmbG93XzE0MzEzNzAzIiwgMSk7CisgIHR6c2V0KCk7CisgIGlmIChvcmlnaW5hbF90eiAhPSBOVUxMKSB7CisgICAgc2V0ZW52KCJUWiIsIG9yaWdpbmFsX3R6LCAxKTsKKyAgfQorICB0enNldCgpOworICByZXR1cm4gTlVMTDsKK30KKworVEVTVCh0aW1lLCBnbXRpbWVfbm9fc3RhY2tfb3ZlcmZsb3dfMTQzMTM3MDMpIHsKKyAgLy8gSXMgaXQgc2FmZSB0byBjYWxsIHR6bG9hZCBvbiBhIHRocmVhZCB3aXRoIGEgc21hbGwgc3RhY2s/CisgIC8vIGh0dHA6Ly9iLzE0MzEzNzAzCisgIC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTYxMTMwCisgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZXM7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cmlidXRlcykpOworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUoJmF0dHJpYnV0ZXMsIFBUSFJFQURfU1RBQ0tfTUlOKSk7CisjZWxzZQorICAvLyBQVEhSRUFEX1NUQUNLX01JTiBub3QgY3VycmVudGx5IGluIHRoZSBob3N0IEdDQyBzeXNyb290LgorICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0cmlidXRlcywgNCAqIGdldHBhZ2VzaXplKCkpKTsKKyNlbmRpZgorCisgIHB0aHJlYWRfdCB0OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQsICZhdHRyaWJ1dGVzLCBnbXRpbWVfbm9fc3RhY2tfb3ZlcmZsb3dfMTQzMTM3MDNfZm4sIE5VTEwpKTsKKyAgdm9pZCogcmVzdWx0OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9qb2luKHQsICZyZXN1bHQpKTsKK30KKwogVEVTVCh0aW1lLCBta3RpbWVfMTAzMTA5MjkpIHsKICAgc3RydWN0IHRtIHQ7CiAgIG1lbXNldCgmdCwgMCwgc2l6ZW9mKHRtKSk7CkBAIC02Niw3ICs4MCw2IEBACiAjaWYgIWRlZmluZWQoX19MUDY0X18pCiAgIC8vIDMyLWJpdCBiaW9uaWMgc3R1cGlkbHkgaGFkIGEgc2lnbmVkIDMyLWJpdCB0aW1lX3QuCiAgIEFTU0VSVF9FUSgtMSwgbWt0aW1lKCZ0KSk7Ci0gIEFTU0VSVF9FUSgtMSwgbWt0aW1lX3R6KCZ0LCAiVVRDIikpOwogI2Vsc2UKICAgLy8gRXZlcnlvbmUgZWxzZSBzaG91bGQgYmUgdXNpbmcgYSBzaWduZWQgNjQtYml0IHRpbWVfdC4KICAgQVNTRVJUX0dFKHNpemVvZih0aW1lX3QpICogOCwgNjRVKTsKQEAgLTc0LDEyICs4NywzMTkgQEAKICAgc2V0ZW52KCJUWiIsICJBbWVyaWNhL0xvc19BbmdlbGVzIiwgMSk7CiAgIHR6c2V0KCk7CiAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx0aW1lX3Q+KDQxMDgzNDg4MDBVKSwgbWt0aW1lKCZ0KSk7Ci0gIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx0aW1lX3Q+KDQxMDgzMjAwMDBVKSwgbWt0aW1lX3R6KCZ0LCAiVVRDIikpOwogCiAgIHNldGVudigiVFoiLCAiVVRDIiwgMSk7CiAgIHR6c2V0KCk7CiAgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx0aW1lX3Q+KDQxMDgzMjAwMDBVKSwgbWt0aW1lKCZ0KSk7Ci0gIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx0aW1lX3Q+KDQxMDgzNDg4MDBVKSwgbWt0aW1lX3R6KCZ0LCAiQW1lcmljYS9Mb3NfQW5nZWxlcyIpKTsKICNlbmRpZgogfQorCitURVNUKHRpbWUsIHN0cmZ0aW1lKSB7CisgIHNldGVudigiVFoiLCAiVVRDIiwgMSk7CisKKyAgc3RydWN0IHRtIHQ7CisgIG1lbXNldCgmdCwgMCwgc2l6ZW9mKHRtKSk7CisgIHQudG1feWVhciA9IDIwMDsKKyAgdC50bV9tb24gPSAyOworICB0LnRtX21kYXkgPSAxMDsKKworICBjaGFyIGJ1Zls2NF07CisKKyAgLy8gU2Vjb25kcyBzaW5jZSB0aGUgZXBvY2guCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSB8fCBkZWZpbmVkKF9fTFA2NF9fKSAvLyBOb3QgMzItYml0IGdsaWJjLgorICBFWFBFQ1RfRVEoMTBVLCBzdHJmdGltZShidWYsIHNpemVvZihidWYpLCAiJXMiLCAmdCkpOworICBFWFBFQ1RfU1RSRVEoIjQxMDgzMjAwMDAiLCBidWYpOwogI2VuZGlmCisKKyAgLy8gRGF0ZSBhbmQgdGltZSBhcyB0ZXh0LgorICBFWFBFQ1RfRVEoMjRVLCBzdHJmdGltZShidWYsIHNpemVvZihidWYpLCAiJWMiLCAmdCkpOworICBFWFBFQ1RfU1RSRVEoIlN1biBNYXIgMTAgMDA6MDA6MDAgMjEwMCIsIGJ1Zik7Cit9CisKK1RFU1QodGltZSwgc3RycHRpbWUpIHsKKyAgc2V0ZW52KCJUWiIsICJVVEMiLCAxKTsKKworICBzdHJ1Y3QgdG0gdDsKKyAgY2hhciBidWZbNjRdOworCisgIG1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKKyAgc3RycHRpbWUoIjExOjE0IiwgIiVSIiwgJnQpOworICBzdHJmdGltZShidWYsIHNpemVvZihidWYpLCAiJUg6JU0iLCAmdCk7CisgIEVYUEVDVF9TVFJFUSgiMTE6MTQiLCBidWYpOworCisgIG1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKKyAgc3RycHRpbWUoIjA5OjQxOjUzIiwgIiVUIiwgJnQpOworICBzdHJmdGltZShidWYsIHNpemVvZihidWYpLCAiJUg6JU06JVMiLCAmdCk7CisgIEVYUEVDVF9TVFJFUSgiMDk6NDE6NTMiLCBidWYpOworfQorCit2b2lkIFNldFRpbWUodGltZXJfdCB0LCB0aW1lX3QgdmFsdWVfcywgdGltZV90IHZhbHVlX25zLCB0aW1lX3QgaW50ZXJ2YWxfcywgdGltZV90IGludGVydmFsX25zKSB7CisgIGl0aW1lcnNwZWMgdHM7CisgIHRzLml0X3ZhbHVlLnR2X3NlYyA9IHZhbHVlX3M7CisgIHRzLml0X3ZhbHVlLnR2X25zZWMgPSB2YWx1ZV9uczsKKyAgdHMuaXRfaW50ZXJ2YWwudHZfc2VjID0gaW50ZXJ2YWxfczsKKyAgdHMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9IGludGVydmFsX25zOworICBBU1NFUlRfRVEoMCwgdGltZXJfc2V0dGltZSh0LCBUSU1FUl9BQlNUSU1FLCAmdHMsIE5VTEwpKTsKK30KKworc3RhdGljIHZvaWQgTm9PcE5vdGlmeUZ1bmN0aW9uKHNpZ3ZhbF90KSB7Cit9CisKK1RFU1QodGltZSwgdGltZXJfY3JlYXRlKSB7CisgIHNpZ2V2ZW50X3Qgc2U7CisgIG1lbXNldCgmc2UsIDAsIHNpemVvZihzZSkpOworICBzZS5zaWdldl9ub3RpZnkgPSBTSUdFVl9USFJFQUQ7CisgIHNlLnNpZ2V2X25vdGlmeV9mdW5jdGlvbiA9IE5vT3BOb3RpZnlGdW5jdGlvbjsKKyAgdGltZXJfdCB0aW1lcl9pZDsKKyAgQVNTRVJUX0VRKDAsIHRpbWVyX2NyZWF0ZShDTE9DS19NT05PVE9OSUMsICZzZSwgJnRpbWVyX2lkKSk7CisKKyAgaW50IHBpZCA9IGZvcmsoKTsKKyAgQVNTRVJUX05FKC0xLCBwaWQpIDw8IHN0cmVycm9yKGVycm5vKTsKKworICBpZiAocGlkID09IDApIHsKKyAgICAvLyBUaW1lcnMgYXJlIG5vdCBpbmhlcml0ZWQgYnkgdGhlIGNoaWxkLgorICAgIEFTU0VSVF9FUSgtMSwgdGltZXJfZGVsZXRlKHRpbWVyX2lkKSk7CisgICAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworICAgIF9leGl0KDApOworICB9CisKKyAgaW50IHN0YXR1czsKKyAgQVNTRVJUX0VRKHBpZCwgd2FpdHBpZChwaWQsICZzdGF0dXMsIDApKTsKKyAgQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOworICBBU1NFUlRfRVEoMCwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisKKyAgQVNTRVJUX0VRKDAsIHRpbWVyX2RlbGV0ZSh0aW1lcl9pZCkpOworfQorCitzdGF0aWMgaW50IHRpbWVyX2NyZWF0ZV9TSUdFVl9TSUdOQUxfc2lnbmFsX2hhbmRsZXJfaW52b2NhdGlvbl9jb3VudCA9IDA7CitzdGF0aWMgdm9pZCB0aW1lcl9jcmVhdGVfU0lHRVZfU0lHTkFMX3NpZ25hbF9oYW5kbGVyKGludCBzaWduYWxfbnVtYmVyKSB7CisgICsrdGltZXJfY3JlYXRlX1NJR0VWX1NJR05BTF9zaWduYWxfaGFuZGxlcl9pbnZvY2F0aW9uX2NvdW50OworICBBU1NFUlRfRVEoU0lHVVNSMSwgc2lnbmFsX251bWJlcik7Cit9CisKK1RFU1QodGltZSwgdGltZXJfY3JlYXRlX1NJR0VWX1NJR05BTCkgeworICBzaWdldmVudF90IHNlOworICBtZW1zZXQoJnNlLCAwLCBzaXplb2Yoc2UpKTsKKyAgc2Uuc2lnZXZfbm90aWZ5ID0gU0lHRVZfU0lHTkFMOworICBzZS5zaWdldl9zaWdubyA9IFNJR1VTUjE7CisKKyAgdGltZXJfdCB0aW1lcl9pZDsKKyAgQVNTRVJUX0VRKDAsIHRpbWVyX2NyZWF0ZShDTE9DS19NT05PVE9OSUMsICZzZSwgJnRpbWVyX2lkKSk7CisKKyAgU2NvcGVkU2lnbmFsSGFuZGxlciBzc2goU0lHVVNSMSwgdGltZXJfY3JlYXRlX1NJR0VWX1NJR05BTF9zaWduYWxfaGFuZGxlcik7CisKKyAgQVNTRVJUX0VRKDAsIHRpbWVyX2NyZWF0ZV9TSUdFVl9TSUdOQUxfc2lnbmFsX2hhbmRsZXJfaW52b2NhdGlvbl9jb3VudCk7CisKKyAgaXRpbWVyc3BlYyB0czsKKyAgdHMuaXRfdmFsdWUudHZfc2VjID0gIDA7CisgIHRzLml0X3ZhbHVlLnR2X25zZWMgPSAxOworICB0cy5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOworICB0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gMDsKKyAgQVNTRVJUX0VRKDAsIHRpbWVyX3NldHRpbWUodGltZXJfaWQsIFRJTUVSX0FCU1RJTUUsICZ0cywgTlVMTCkpOworCisgIHVzbGVlcCg1MDAwMDApOworICBBU1NFUlRfRVEoMSwgdGltZXJfY3JlYXRlX1NJR0VWX1NJR05BTF9zaWduYWxfaGFuZGxlcl9pbnZvY2F0aW9uX2NvdW50KTsKK30KKworc3RydWN0IENvdW50ZXIgeworICB2b2xhdGlsZSBpbnQgdmFsdWU7CisgIHRpbWVyX3QgdGltZXJfaWQ7CisgIHNpZ2V2ZW50X3Qgc2U7CisKKyAgQ291bnRlcih2b2lkICgqZm4pKHNpZ3ZhbF90KSkgOiB2YWx1ZSgwKSB7CisgICAgbWVtc2V0KCZzZSwgMCwgc2l6ZW9mKHNlKSk7CisgICAgc2Uuc2lnZXZfbm90aWZ5ID0gU0lHRVZfVEhSRUFEOworICAgIHNlLnNpZ2V2X25vdGlmeV9mdW5jdGlvbiA9IGZuOworICAgIHNlLnNpZ2V2X3ZhbHVlLnNpdmFsX3B0ciA9IHRoaXM7CisgIH0KKworICB2b2lkIENyZWF0ZSgpIHsKKyAgICBBU1NFUlRfRVEoMCwgdGltZXJfY3JlYXRlKENMT0NLX1JFQUxUSU1FLCAmc2UsICZ0aW1lcl9pZCkpOworICB9CisKKyAgfkNvdW50ZXIoKSB7CisgICAgaWYgKHRpbWVyX2RlbGV0ZSh0aW1lcl9pZCkgIT0gMCkgeworICAgICAgYWJvcnQoKTsKKyAgICB9CisgIH0KKworICBzdGF0aWMgdm9pZCBDb3VudE5vdGlmeUZ1bmN0aW9uKHNpZ3ZhbF90IHZhbHVlKSB7CisgICAgQ291bnRlciogY2QgPSByZWludGVycHJldF9jYXN0PENvdW50ZXIqPih2YWx1ZS5zaXZhbF9wdHIpOworICAgICsrY2QtPnZhbHVlOworICB9CisKKyAgc3RhdGljIHZvaWQgQ291bnRBbmREaXNhcm1Ob3RpZnlGdW5jdGlvbihzaWd2YWxfdCB2YWx1ZSkgeworICAgIENvdW50ZXIqIGNkID0gcmVpbnRlcnByZXRfY2FzdDxDb3VudGVyKj4odmFsdWUuc2l2YWxfcHRyKTsKKyAgICArK2NkLT52YWx1ZTsKKworICAgIC8vIFNldHRpbmcgdGhlIGluaXRpYWwgZXhwaXJhdGlvbiB0aW1lIHRvIDAgZGlzYXJtcyB0aGUgdGltZXIuCisgICAgU2V0VGltZShjZC0+dGltZXJfaWQsIDAsIDAsIDEsIDApOworICB9Cit9OworCitURVNUKHRpbWUsIHRpbWVyX3NldHRpbWVfMCkgeworICBDb3VudGVyIGNvdW50ZXIoQ291bnRlcjo6Q291bnRBbmREaXNhcm1Ob3RpZnlGdW5jdGlvbik7CisgIGNvdW50ZXIuQ3JlYXRlKCk7CisKKyAgQVNTRVJUX0VRKDAsIGNvdW50ZXIudmFsdWUpOworCisgIFNldFRpbWUoY291bnRlci50aW1lcl9pZCwgMCwgMSwgMSwgMCk7CisgIHVzbGVlcCg1MDAwMDApOworCisgIC8vIFRoZSBjb3VudCBzaG91bGQganVzdCBiZSAxIGJlY2F1c2Ugd2UgZGlzYXJtZWQgdGhlIHRpbWVyIHRoZSBmaXJzdCB0aW1lIGl0IGZpcmVkLgorICBBU1NFUlRfRVEoMSwgY291bnRlci52YWx1ZSk7Cit9CisKK1RFU1QodGltZSwgdGltZXJfc2V0dGltZV9yZXBlYXRzKSB7CisgIENvdW50ZXIgY291bnRlcihDb3VudGVyOjpDb3VudE5vdGlmeUZ1bmN0aW9uKTsKKyAgY291bnRlci5DcmVhdGUoKTsKKworICBBU1NFUlRfRVEoMCwgY291bnRlci52YWx1ZSk7CisKKyAgU2V0VGltZShjb3VudGVyLnRpbWVyX2lkLCAwLCAxLCAwLCAxMCk7CisgIHVzbGVlcCg1MDAwMDApOworCisgIC8vIFRoZSBjb3VudCBzaG91bGQganVzdCBiZSA+IDEgYmVjYXVzZSB3ZSBsZXQgdGhlIHRpbWVyIHJlcGVhdC4KKyAgQVNTRVJUX0dUKGNvdW50ZXIudmFsdWUsIDEpOworfQorCitzdGF0aWMgaW50IHRpbWVyX2NyZWF0ZV9OVUxMX3NpZ25hbF9oYW5kbGVyX2ludm9jYXRpb25fY291bnQgPSAwOworc3RhdGljIHZvaWQgdGltZXJfY3JlYXRlX05VTExfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25hbF9udW1iZXIpIHsKKyAgKyt0aW1lcl9jcmVhdGVfTlVMTF9zaWduYWxfaGFuZGxlcl9pbnZvY2F0aW9uX2NvdW50OworICBBU1NFUlRfRVEoU0lHQUxSTSwgc2lnbmFsX251bWJlcik7Cit9CisKK1RFU1QodGltZSwgdGltZXJfY3JlYXRlX05VTEwpIHsKKyAgLy8gQSBOVUxMIHNpZ2V2ZW50KiBpcyBlcXVpdmFsZW50IHRvIGFza2luZyBmb3IgU0lHRVZfU0lHTkFMIGZvciBTSUdBTFJNLgorICB0aW1lcl90IHRpbWVyX2lkOworICBBU1NFUlRfRVEoMCwgdGltZXJfY3JlYXRlKENMT0NLX01PTk9UT05JQywgTlVMTCwgJnRpbWVyX2lkKSk7CisKKyAgU2NvcGVkU2lnbmFsSGFuZGxlciBzc2goU0lHQUxSTSwgdGltZXJfY3JlYXRlX05VTExfc2lnbmFsX2hhbmRsZXIpOworCisgIEFTU0VSVF9FUSgwLCB0aW1lcl9jcmVhdGVfTlVMTF9zaWduYWxfaGFuZGxlcl9pbnZvY2F0aW9uX2NvdW50KTsKKworICBTZXRUaW1lKHRpbWVyX2lkLCAwLCAxLCAwLCAwKTsKKyAgdXNsZWVwKDUwMDAwMCk7CisKKyAgQVNTRVJUX0VRKDEsIHRpbWVyX2NyZWF0ZV9OVUxMX3NpZ25hbF9oYW5kbGVyX2ludm9jYXRpb25fY291bnQpOworfQorCitURVNUKHRpbWUsIHRpbWVyX2NyZWF0ZV9FSU5WQUwpIHsKKyAgY2xvY2tpZF90IGludmFsaWRfY2xvY2sgPSAxNjsKKworICAvLyBBIFNJR0VWX1NJR05BTCB0aW1lciBpcyBlYXN5OyB0aGUga2VybmVsIGRvZXMgYWxsIHRoYXQuCisgIHRpbWVyX3QgdGltZXJfaWQ7CisgIEFTU0VSVF9FUSgtMSwgdGltZXJfY3JlYXRlKGludmFsaWRfY2xvY2ssIE5VTEwsICZ0aW1lcl9pZCkpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CisKKyAgLy8gQSBTSUdFVl9USFJFQUQgdGltZXIgaXMgbW9yZSBpbnRlcmVzdGluZyBiZWNhdXNlIHdlIGhhdmUgc3R1ZmYgdG8gY2xlYW4gdXAuCisgIHNpZ2V2ZW50X3Qgc2U7CisgIG1lbXNldCgmc2UsIDAsIHNpemVvZihzZSkpOworICBzZS5zaWdldl9ub3RpZnkgPSBTSUdFVl9USFJFQUQ7CisgIHNlLnNpZ2V2X25vdGlmeV9mdW5jdGlvbiA9IE5vT3BOb3RpZnlGdW5jdGlvbjsKKyAgQVNTRVJUX0VRKC0xLCB0aW1lcl9jcmVhdGUoaW52YWxpZF9jbG9jaywgJnNlLCAmdGltZXJfaWQpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKHRpbWUsIHRpbWVyX2RlbGV0ZV9tdWx0aXBsZSkgeworICB0aW1lcl90IHRpbWVyX2lkOworICBBU1NFUlRfRVEoMCwgdGltZXJfY3JlYXRlKENMT0NLX01PTk9UT05JQywgTlVMTCwgJnRpbWVyX2lkKSk7CisgIEFTU0VSVF9FUSgwLCB0aW1lcl9kZWxldGUodGltZXJfaWQpKTsKKyAgQVNTRVJUX0VRKC0xLCB0aW1lcl9kZWxldGUodGltZXJfaWQpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworCisgIHNpZ2V2ZW50X3Qgc2U7CisgIG1lbXNldCgmc2UsIDAsIHNpemVvZihzZSkpOworICBzZS5zaWdldl9ub3RpZnkgPSBTSUdFVl9USFJFQUQ7CisgIHNlLnNpZ2V2X25vdGlmeV9mdW5jdGlvbiA9IE5vT3BOb3RpZnlGdW5jdGlvbjsKKyAgQVNTRVJUX0VRKDAsIHRpbWVyX2NyZWF0ZShDTE9DS19NT05PVE9OSUMsICZzZSwgJnRpbWVyX2lkKSk7CisgIEFTU0VSVF9FUSgwLCB0aW1lcl9kZWxldGUodGltZXJfaWQpKTsKKyAgQVNTRVJUX0VRKC0xLCB0aW1lcl9kZWxldGUodGltZXJfaWQpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKHRpbWUsIHRpbWVyX2NyZWF0ZV9tdWx0aXBsZSkgeworICBDb3VudGVyIGNvdW50ZXIxKENvdW50ZXI6OkNvdW50Tm90aWZ5RnVuY3Rpb24pOworICBjb3VudGVyMS5DcmVhdGUoKTsKKyAgQ291bnRlciBjb3VudGVyMihDb3VudGVyOjpDb3VudE5vdGlmeUZ1bmN0aW9uKTsKKyAgY291bnRlcjIuQ3JlYXRlKCk7CisgIENvdW50ZXIgY291bnRlcjMoQ291bnRlcjo6Q291bnROb3RpZnlGdW5jdGlvbik7CisgIGNvdW50ZXIzLkNyZWF0ZSgpOworCisgIEFTU0VSVF9FUSgwLCBjb3VudGVyMS52YWx1ZSk7CisgIEFTU0VSVF9FUSgwLCBjb3VudGVyMi52YWx1ZSk7CisgIEFTU0VSVF9FUSgwLCBjb3VudGVyMy52YWx1ZSk7CisKKyAgU2V0VGltZShjb3VudGVyMi50aW1lcl9pZCwgMCwgMSwgMCwgMCk7CisgIHVzbGVlcCg1MDAwMDApOworCisgIEVYUEVDVF9FUSgwLCBjb3VudGVyMS52YWx1ZSk7CisgIEVYUEVDVF9FUSgxLCBjb3VudGVyMi52YWx1ZSk7CisgIEVYUEVDVF9FUSgwLCBjb3VudGVyMy52YWx1ZSk7Cit9CisKK3N0cnVjdCBUaW1lckRlbGV0ZURhdGEgeworICB0aW1lcl90IHRpbWVyX2lkOworICBwdGhyZWFkX3QgdGhyZWFkX2lkOworICB2b2xhdGlsZSBib29sIGNvbXBsZXRlOworfTsKKworc3RhdGljIHZvaWQgVGltZXJEZWxldGVDYWxsYmFjayhzaWd2YWxfdCB2YWx1ZSkgeworICBUaW1lckRlbGV0ZURhdGEqIHRkZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGltZXJEZWxldGVEYXRhKj4odmFsdWUuc2l2YWxfcHRyKTsKKworICB0ZGQtPnRocmVhZF9pZCA9IHB0aHJlYWRfc2VsZigpOworICB0aW1lcl9kZWxldGUodGRkLT50aW1lcl9pZCk7CisgIHRkZC0+Y29tcGxldGUgPSB0cnVlOworfQorCitURVNUKHRpbWUsIHRpbWVyX2RlbGV0ZV9mcm9tX3RpbWVyX3RocmVhZCkgeworICBUaW1lckRlbGV0ZURhdGEgdGRkOworICBzaWdldmVudF90IHNlOworCisgIG1lbXNldCgmc2UsIDAsIHNpemVvZihzZSkpOworICBzZS5zaWdldl9ub3RpZnkgPSBTSUdFVl9USFJFQUQ7CisgIHNlLnNpZ2V2X25vdGlmeV9mdW5jdGlvbiA9IFRpbWVyRGVsZXRlQ2FsbGJhY2s7CisgIHNlLnNpZ2V2X3ZhbHVlLnNpdmFsX3B0ciA9ICZ0ZGQ7CisKKyAgdGRkLmNvbXBsZXRlID0gZmFsc2U7CisgIEFTU0VSVF9FUSgwLCB0aW1lcl9jcmVhdGUoQ0xPQ0tfUkVBTFRJTUUsICZzZSwgJnRkZC50aW1lcl9pZCkpOworCisgIGl0aW1lcnNwZWMgdHM7CisgIHRzLml0X3ZhbHVlLnR2X3NlYyA9IDA7CisgIHRzLml0X3ZhbHVlLnR2X25zZWMgPSAxMDA7CisgIHRzLml0X2ludGVydmFsLnR2X3NlYyA9IDA7CisgIHRzLml0X2ludGVydmFsLnR2X25zZWMgPSAwOworICBBU1NFUlRfRVEoMCwgdGltZXJfc2V0dGltZSh0ZGQudGltZXJfaWQsIFRJTUVSX0FCU1RJTUUsICZ0cywgTlVMTCkpOworCisgIHRpbWVfdCBjdXJfdGltZSA9IHRpbWUoTlVMTCk7CisgIHdoaWxlICghdGRkLmNvbXBsZXRlICYmICh0aW1lKE5VTEwpIC0gY3VyX3RpbWUpIDwgNSk7CisgIEFTU0VSVF9UUlVFKHRkZC5jb21wbGV0ZSk7CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgIC8vIFNpbmNlIGJpb25pYyB0aW1lcnMgYXJlIGltcGxlbWVudGVkIGJ5IGNyZWF0aW5nIGEgdGhyZWFkIHRvIGhhbmRsZSB0aGUKKyAgLy8gY2FsbGJhY2ssIHZlcmlmeSB0aGF0IHRoZSB0aHJlYWQgYWN0dWFsbHkgY29tcGxldGVzLgorICBjdXJfdGltZSA9IHRpbWUoTlVMTCk7CisgIHdoaWxlIChwdGhyZWFkX2RldGFjaCh0ZGQudGhyZWFkX2lkKSAhPSBFU1JDSCAmJiAodGltZShOVUxMKSAtIGN1cl90aW1lKSA8IDUpOworICBBU1NFUlRfRVEoRVNSQ0gsIHB0aHJlYWRfZGV0YWNoKHRkZC50aHJlYWRfaWQpKTsKKyNlbmRpZgorfQorCitURVNUKHRpbWUsIGNsb2NrX2dldHRpbWUpIHsKKyAgLy8gVHJ5IHRvIGVuc3VyZSB0aGF0IG91ciB2ZHNvIGNsb2NrX2dldHRpbWUgaXMgd29ya2luZy4KKyAgdGltZXNwZWMgdHMxOworICBBU1NFUlRfRVEoMCwgY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0czEpKTsKKyAgdGltZXNwZWMgdHMyOworICBBU1NFUlRfRVEoMCwgc3lzY2FsbChfX05SX2Nsb2NrX2dldHRpbWUsIENMT0NLX01PTk9UT05JQywgJnRzMikpOworCisgIC8vIFdoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28/CisgIHRzMi50dl9zZWMgLT0gdHMxLnR2X3NlYzsKKyAgdHMyLnR2X25zZWMgLT0gdHMxLnR2X25zZWM7CisgIGlmICh0czIudHZfbnNlYyA8IDApIHsKKyAgICAtLXRzMi50dl9zZWM7CisgICAgdHMyLnR2X25zZWMgKz0gMTAwMDAwMDAwMDsKKyAgfQorCisgIC8vIFNob3VsZCBiZSBsZXNzIHRoYW4gKGEgdmVyeSBnZW5lcm91cywgdG8gdHJ5IHRvIGF2b2lkIGZsYWtpbmVzcykgMTAwMDAwMG5zLgorICBBU1NFUlRfRVEoMCwgdHMyLnR2X3NlYyk7CisgIEFTU0VSVF9MVCh0czIudHZfbnNlYywgMTAwMDAwMCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy91Y2hhcl90ZXN0LmNwcCBiL3Rlc3RzL3VjaGFyX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTNjNWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91Y2hhcl90ZXN0LmNwcApAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyNkZWZpbmUgSEFWRV9VQ0hBUiAxCisjZWxpZiBkZWZpbmVkKF9fR0xJQkNfXykKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2RlZmluZSBIQVZFX1VDSEFSIF9fR0xJQkNfUFJFUkVRKDIsIDE2KQorI2VuZGlmCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmIEhBVkVfVUNIQVIKKyNpbmNsdWRlIDx1Y2hhci5oPgorI2VuZGlmCisKK1RFU1QodWNoYXIsIHNpemVvZl91Y2hhcl90KSB7CisjaWYgSEFWRV9VQ0hBUgorICBFWFBFQ1RfRVEoMlUsIHNpemVvZihjaGFyMTZfdCkpOworICBFWFBFQ1RfRVEoNFUsIHNpemVvZihjaGFyMzJfdCkpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAidWNoYXIuaCBpcyB1bmF2YWlsYWJsZS5cbiI7CisjZW5kaWYKK30KKworVEVTVCh1Y2hhciwgc3RhcnRfc3RhdGUpIHsKKyNpZiBIQVZFX1VDSEFSCisgIGNoYXIgb3V0W01CX0xFTl9NQVhdOworICBtYnN0YXRlX3QgcHM7CisKKyAgLy8gQW55IG5vbi1pbml0aWFsIHN0YXRlIGlzIGludmFsaWQgd2hlbiBjYWxsaW5nIGMzMnJ0b21iLgorICBtZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b2MzMihOVUxMLCAiXHhjMiIsIDEsICZwcykpOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIGMzMnJ0b21iKG91dCwgMHgwMGEyLCAmcHMpKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworCisgIC8vIElmIHRoZSBmaXJzdCBhcmd1bWVudCB0byBjMzJydG9tYiBpcyBOVUxMIG9yIHRoZSBzZWNvbmQgaXMgTCdcMCcgdGhlIHNoaWZ0CisgIC8vIHN0YXRlIHNob3VsZCBiZSByZXNldC4KKyAgbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG9jMzIoTlVMTCwgIlx4YzIiLCAxLCAmcHMpKTsKKyAgRVhQRUNUX0VRKDFVLCBjMzJydG9tYihOVUxMLCAweDAwYTIsICZwcykpOworICBFWFBFQ1RfVFJVRShtYnNpbml0KCZwcykpOworCisgIG1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvYzMyKE5VTEwsICJceGYwXHhhNCIsIDEsICZwcykpOworICBFWFBFQ1RfRVEoMVUsIGMzMnJ0b21iKG91dCwgTCdcMCcsICZwcykpOworICBFWFBFQ1RfVFJVRShtYnNpbml0KCZwcykpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAidWNoYXIuaCBpcyB1bmF2YWlsYWJsZS5cbiI7CisjZW5kaWYKK30KKworVEVTVCh1Y2hhciwgYzE2cnRvbWJfbnVsbF9vdXQpIHsKKyNpZiBIQVZFX1VDSEFSCisgIEVYUEVDVF9FUSgxVSwgYzE2cnRvbWIoTlVMTCwgTCdcMCcsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKDFVLCBjMTZydG9tYihOVUxMLCBMJ2gnLCBOVUxMKSk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHVjaGFyLCBjMTZydG9tYl9udWxsX2NoYXIpIHsKKyNpZiBIQVZFX1VDSEFSCisgIGNoYXIgYnl0ZXNbTUJfTEVOX01BWF07CisgIEVYUEVDVF9FUSgxVSwgYzE2cnRvbWIoYnl0ZXMsIEwnXDAnLCBOVUxMKSk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHVjaGFyLCBjMTZydG9tYikgeworI2lmIEhBVkVfVUNIQVIKKyAgY2hhciBieXRlc1tNQl9MRU5fTUFYXTsKKworICBtZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoMVUsIGMxNnJ0b21iKGJ5dGVzLCBMJ2gnLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgnaCcsIGJ5dGVzWzBdKTsKKworICBBU1NFUlRfU1RSRVEoIkMuVVRGLTgiLCBzZXRsb2NhbGUoTENfQ1RZUEUsICJDLlVURi04IikpOworICB1c2Vsb2NhbGUoTENfR0xPQkFMX0xPQ0FMRSk7CisKKyAgLy8gMS1ieXRlIFVURi04LgorICBtZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoMVUsIGMxNnJ0b21iKGJ5dGVzLCBMJ2gnLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgnaCcsIGJ5dGVzWzBdKTsKKyAgLy8gMi1ieXRlIFVURi04LgorICBtZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoMlUsIGMxNnJ0b21iKGJ5dGVzLCAweDAwYTIsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdceGMyJywgYnl0ZXNbMF0pOworICBFWFBFQ1RfRVEoJ1x4YTInLCBieXRlc1sxXSk7CisgIC8vIDMtYnl0ZSBVVEYtOC4KKyAgbWVtc2V0KGJ5dGVzLCAwLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKDNVLCBjMTZydG9tYihieXRlcywgMHgyMGFjLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgnXHhlMicsIGJ5dGVzWzBdKTsKKyAgRVhQRUNUX0VRKCdceDgyJywgYnl0ZXNbMV0pOworICBFWFBFQ1RfRVEoJ1x4YWMnLCBieXRlc1syXSk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHVjaGFyLCBjMTZydG9tYl9zdXJyb2dhdGUpIHsKKyNpZiBIQVZFX1VDSEFSCisgIGNoYXIgYnl0ZXNbTUJfTEVOX01BWF07CisKKyAgbWVtc2V0KGJ5dGVzLCAwLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKDBVLCBjMTZydG9tYihieXRlcywgMHhkYmVhLCBOVUxMKSk7CisgIEVYUEVDVF9FUSg0VSwgYzE2cnRvbWIoYnl0ZXMsIDB4ZGZjZCwgTlVMTCkpOworICBFWFBFQ1RfRVEoJ1x4ZjQnLCBieXRlc1swXSk7CisgIEVYUEVDVF9FUSgnXHg4YScsIGJ5dGVzWzFdKTsKKyAgRVhQRUNUX0VRKCdceGFmJywgYnl0ZXNbMl0pOworICBFWFBFQ1RfRVEoJ1x4OGQnLCBieXRlc1szXSk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHVjaGFyLCBjMTZydG9tYl9pbnZhbGlkKSB7CisjaWYgSEFWRV9VQ0hBUgorICBjaGFyIGJ5dGVzW01CX0xFTl9NQVhdOworCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgYzE2cnRvbWIoYnl0ZXMsIDB4ZGZjZCwgTlVMTCkpOworCisgIEVYUEVDVF9FUSgwVSwgYzE2cnRvbWIoYnl0ZXMsIDB4ZGJlYSwgTlVMTCkpOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIGMxNnJ0b21iKGJ5dGVzLCAweGRiZWEsIE5VTEwpKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgInVjaGFyLmggaXMgdW5hdmFpbGFibGUuXG4iOworI2VuZGlmCit9CisKK1RFU1QodWNoYXIsIG1icnRvYzE2X251bGwpIHsKKyNpZiBIQVZFX1VDSEFSCisgIEFTU0VSVF9FUSgwVSwgbWJydG9jMTYoTlVMTCwgTlVMTCwgMCwgTlVMTCkpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAidWNoYXIuaCBpcyB1bmF2YWlsYWJsZS5cbiI7CisjZW5kaWYKK30KKworVEVTVCh1Y2hhciwgbWJydG9jMTZfemVyb19sZW4pIHsKKyNpZiBIQVZFX1VDSEFSCisgIGNoYXIxNl90IG91dDsKKworICBvdXQgPSBMJ3gnOworICBBU1NFUlRfRVEoMFUsIG1icnRvYzE2KCZvdXQsICJoZWxsbyIsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKEwneCcsIG91dCk7CisKKyAgQVNTRVJUX0VRKDBVLCBtYnJ0b2MxNigmb3V0LCAiaGVsbG8iLCAwLCBOVUxMKSk7CisgIEFTU0VSVF9FUSgwVSwgbWJydG9jMTYoJm91dCwgIiIsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDFVLCBtYnJ0b2MxNigmb3V0LCAiaGVsbG8iLCAxLCBOVUxMKSk7CisgIEFTU0VSVF9FUShMJ2gnLCBvdXQpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAidWNoYXIuaCBpcyB1bmF2YWlsYWJsZS5cbiI7CisjZW5kaWYKK30KKworVEVTVCh1Y2hhciwgbWJydG9jMTYpIHsKKyNpZiBIQVZFX1VDSEFSCisgIGNoYXIxNl90IG91dDsKKworICBBU1NFUlRfU1RSRVEoIkMuVVRGLTgiLCBzZXRsb2NhbGUoTENfQ1RZUEUsICJDLlVURi04IikpOworICB1c2Vsb2NhbGUoTENfR0xPQkFMX0xPQ0FMRSk7CisKKyAgLy8gMS1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoMVUsIG1icnRvYzE2KCZvdXQsICJhYmNkZWYiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShMJ2EnLCBvdXQpOworICAvLyAyLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUSgyVSwgbWJydG9jMTYoJm91dCwgIlx4YzJceGEyIiAiY2RlZiIsIDYsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIxNl90PigweDAwYTIpLCBvdXQpOworICAvLyAzLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUSgzVSwgbWJydG9jMTYoJm91dCwgIlx4ZTJceDgyXHhhYyIgImRlZiIsIDYsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIxNl90PigweDIwYWMpLCBvdXQpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAidWNoYXIuaCBpcyB1bmF2YWlsYWJsZS5cbiI7CisjZW5kaWYKK30KKworVEVTVCh1Y2hhciwgbWJydG9jMTZfc3Vycm9nYXRlKSB7CisjaWYgSEFWRV9VQ0hBUgorICBjaGFyMTZfdCBvdXQ7CisKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTMpLAorICAgICAgICAgICAgbWJydG9jMTYoJm91dCwgIlx4ZjRceDhhXHhhZlx4OGQiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxjaGFyMTZfdD4oMHhkYmVhKSwgb3V0KTsKKyAgQVNTRVJUX0VRKDRVLCBtYnJ0b2MxNigmb3V0LCAiXHhmNFx4OGFceGFmXHg4ZCIgImVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjE2X3Q+KDB4ZGZjZCksIG91dCk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCitURVNUKHVjaGFyLCBtYnJ0b2MxNl9yZXNlcnZlZF9yYW5nZSkgeworI2lmIEhBVkVfVUNIQVIKKyAgY2hhcjE2X3Qgb3V0OworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksCisgICAgICAgICAgICBtYnJ0b2MxNigmb3V0LCAiXHhmMFx4ODBceGJmXHhiZiIsIDYsIE5VTEwpKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgInVjaGFyLmggaXMgdW5hdmFpbGFibGUuXG4iOworI2VuZGlmCit9CisKK1RFU1QodWNoYXIsIG1icnRvYzE2X2JleW9uZF9yYW5nZSkgeworI2lmIEhBVkVfVUNIQVIKKyAgY2hhcjE2X3Qgb3V0OworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksCisgICAgICAgICAgICBtYnJ0b2MxNigmb3V0LCAiXHhmNVx4ODBceDgwXHg4MCIsIDYsIE5VTEwpKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgInVjaGFyLmggaXMgdW5hdmFpbGFibGUuXG4iOworI2VuZGlmCit9CisKKyNpZiBIQVZFX1VDSEFSCit2b2lkIHRlc3RfbWJydG9jMTZfaW5jb21wbGV0ZShtYnN0YXRlX3QqIHBzKSB7CisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICBjaGFyMTZfdCBvdXQ7CisgIC8vIDItYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b2MxNigmb3V0LCAiXHhjMiIsIDEsIHBzKSk7CisgIEFTU0VSVF9FUSgxVSwgbWJydG9jMTYoJm91dCwgIlx4YTIiICJjZGVmIiwgNSwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIxNl90PigweDAwYTIpLCBvdXQpOworICBBU1NFUlRfVFJVRShtYnNpbml0KHBzKSk7CisgIC8vIDMtYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b2MxNigmb3V0LCAiXHhlMiIsIDEsIHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG9jMTYoJm91dCwgIlx4ODIiLCAxLCBwcykpOworICBBU1NFUlRfRVEoMVUsIG1icnRvYzE2KCZvdXQsICJceGFjIiAiZGVmIiwgNCwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIxNl90PigweDIwYWMpLCBvdXQpOworICBBU1NFUlRfVFJVRShtYnNpbml0KHBzKSk7CisgIC8vIDQtYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b2MxNigmb3V0LCAiXHhmNCIsIDEsIHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG9jMTYoJm91dCwgIlx4OGFceGFmIiwgMiwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTMpLCBtYnJ0b2MxNigmb3V0LCAiXHg4ZCIgImVmIiwgMywgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIxNl90PigweGRiZWEpLCBvdXQpOworICBBU1NFUlRfRVEoMVUsIG1icnRvYzE2KCZvdXQsICJceDgwIiAiZWYiLCAzLCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjE2X3Q+KDB4ZGZjZCksIG91dCk7CisgIEFTU0VSVF9UUlVFKG1ic2luaXQocHMpKTsKKworICAvLyBJbnZhbGlkIDItYnl0ZQorICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvYzE2KCZvdXQsICJceGMyIiwgMSwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCBtYnJ0b2MxNigmb3V0LCAiXHgyMCIgImNkZWYiLCA1LCBwcykpOworICBBU1NFUlRfRVEoRUlMU0VRLCBlcnJubyk7Cit9CisjZW5kaWYKKworVEVTVCh1Y2hhciwgbWJydG9jMTZfaW5jb21wbGV0ZSkgeworI2lmIEhBVkVfVUNIQVIKKyAgbWJzdGF0ZV90IHBzOworICBtZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKKworICB0ZXN0X21icnRvYzE2X2luY29tcGxldGUoJnBzKTsKKyAgdGVzdF9tYnJ0b2MxNl9pbmNvbXBsZXRlKE5VTEwpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAidWNoYXIuaCBpcyB1bmF2YWlsYWJsZS5cbiI7CisjZW5kaWYKK30KKworVEVTVCh1Y2hhciwgYzMycnRvbWIpIHsKKyNpZiBIQVZFX1VDSEFSCisgIEVYUEVDVF9FUSgxVSwgYzMycnRvbWIoTlVMTCwgTCdcMCcsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKDFVLCBjMzJydG9tYihOVUxMLCBMJ2gnLCBOVUxMKSk7CisKKyAgY2hhciBieXRlc1tNQl9MRU5fTUFYXTsKKworICBFWFBFQ1RfRVEoMVUsIGMzMnJ0b21iKGJ5dGVzLCBMJ1wwJywgTlVMTCkpOworCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgxVSwgYzMycnRvbWIoYnl0ZXMsIEwnaCcsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdoJywgYnl0ZXNbMF0pOworCisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICAvLyAxLWJ5dGUgVVRGLTguCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgxVSwgYzMycnRvbWIoYnl0ZXMsIEwnaCcsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdoJywgYnl0ZXNbMF0pOworICAvLyAyLWJ5dGUgVVRGLTguCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgyVSwgYzMycnRvbWIoYnl0ZXMsIDB4MDBhMiwgTlVMTCkpOworICBFWFBFQ1RfRVEoJ1x4YzInLCBieXRlc1swXSk7CisgIEVYUEVDVF9FUSgnXHhhMicsIGJ5dGVzWzFdKTsKKyAgLy8gMy1ieXRlIFVURi04LgorICBtZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoM1UsIGMzMnJ0b21iKGJ5dGVzLCAweDIwYWMsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdceGUyJywgYnl0ZXNbMF0pOworICBFWFBFQ1RfRVEoJ1x4ODInLCBieXRlc1sxXSk7CisgIEVYUEVDVF9FUSgnXHhhYycsIGJ5dGVzWzJdKTsKKyAgLy8gNC1ieXRlIFVURi04LgorICBtZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoNFUsIGMzMnJ0b21iKGJ5dGVzLCAweDI0YjYyLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgnXHhmMCcsIGJ5dGVzWzBdKTsKKyAgRVhQRUNUX0VRKCdceGE0JywgYnl0ZXNbMV0pOworICBFWFBFQ1RfRVEoJ1x4YWQnLCBieXRlc1syXSk7CisgIEVYUEVDVF9FUSgnXHhhMicsIGJ5dGVzWzNdKTsKKyAgLy8gSW52YWxpZCBjb2RlIHBvaW50LgorICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIGMzMnJ0b21iKGJ5dGVzLCAweGZmZmZmZmZmLCBOVUxMKSk7CisgIEVYUEVDVF9FUShFSUxTRVEsIGVycm5vKTsKKyNlbHNlCisgIEdURVNUX0xPR18oSU5GTykgPDwgInVjaGFyLmggaXMgdW5hdmFpbGFibGUuXG4iOworI2VuZGlmCit9CisKK1RFU1QodWNoYXIsIG1icnRvYzMyKSB7CisjaWYgSEFWRV9VQ0hBUgorICBjaGFyMzJfdCBvdXRbOF07CisKKyAgb3V0WzBdID0gTCd4JzsKKyAgQVNTRVJUX0VRKDBVLCBtYnJ0b2MzMihvdXQsICJoZWxsbyIsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIzMl90PihMJ3gnKSwgb3V0WzBdKTsKKworICBBU1NFUlRfRVEoMFUsIG1icnRvYzMyKG91dCwgImhlbGxvIiwgMCwgTlVMTCkpOworICBBU1NFUlRfRVEoMFUsIG1icnRvYzMyKG91dCwgIiIsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDFVLCBtYnJ0b2MzMihvdXQsICJoZWxsbyIsIDEsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIzMl90PihMJ2gnKSwgb3V0WzBdKTsKKworICBBU1NFUlRfRVEoMFUsIG1icnRvYzMyKE5VTEwsICJoZWxsbyIsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDBVLCBtYnJ0b2MzMihOVUxMLCAiIiwgMCwgTlVMTCkpOworICBBU1NFUlRfRVEoMVUsIG1icnRvYzMyKE5VTEwsICJoZWxsbyIsIDEsIE5VTEwpKTsKKworICBBU1NFUlRfRVEoMFUsIG1icnRvYzMyKE5VTEwsIE5VTEwsIDAsIE5VTEwpKTsKKworICBBU1NFUlRfU1RSRVEoIkMuVVRGLTgiLCBzZXRsb2NhbGUoTENfQ1RZUEUsICJDLlVURi04IikpOworICB1c2Vsb2NhbGUoTENfR0xPQkFMX0xPQ0FMRSk7CisKKyAgLy8gMS1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoMVUsIG1icnRvYzMyKG91dCwgImFiY2RlZiIsIDYsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIzMl90PihMJ2EnKSwgb3V0WzBdKTsKKyAgLy8gMi1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoMlUsIG1icnRvYzMyKG91dCwgIlx4YzJceGEyIiAiY2RlZiIsIDYsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PGNoYXIzMl90PigweDAwYTIpLCBvdXRbMF0pOworICAvLyAzLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUSgzVSwgbWJydG9jMzIob3V0LCAiXHhlMlx4ODJceGFjIiAiZGVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8Y2hhcjMyX3Q+KDB4MjBhYyksIG91dFswXSk7CisgIC8vIDQtYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKDRVLCBtYnJ0b2MzMihvdXQsICJceGYwXHhhNFx4YWRceGEyIiAiZWYiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxjaGFyMzJfdD4oMHgyNGI2MiksIG91dFswXSk7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSAvLyBnbGliYyBhbGxvd3MgdGhpcy4KKyAgLy8gSWxsZWdhbCA1LWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgbWJydG9jMzIob3V0LCAiXHhmOFx4YTFceGEyXHhhM1x4YTQiICJmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoRUlMU0VRLCBlcnJubyk7CisjZW5kaWYKKyAgLy8gSWxsZWdhbCBvdmVyLWxvbmcgc2VxdWVuY2UuCisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgbWJydG9jMzIob3V0LCAiXHhmMFx4ODJceDgyXHhhYyIgImVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoRUlMU0VRLCBlcnJubyk7CisjZWxzZQorICBHVEVTVF9MT0dfKElORk8pIDw8ICJ1Y2hhci5oIGlzIHVuYXZhaWxhYmxlLlxuIjsKKyNlbmRpZgorfQorCisjaWYgSEFWRV9VQ0hBUgordm9pZCB0ZXN0X21icnRvYzMyX2luY29tcGxldGUobWJzdGF0ZV90KiBwcykgeworICBBU1NFUlRfU1RSRVEoIkMuVVRGLTgiLCBzZXRsb2NhbGUoTENfQ1RZUEUsICJDLlVURi04IikpOworICB1c2Vsb2NhbGUoTENfR0xPQkFMX0xPQ0FMRSk7CisKKyAgY2hhcjMyX3Qgb3V0OworICAvLyAyLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG9jMzIoJm91dCwgIlx4YzIiLCAxLCBwcykpOworICBBU1NFUlRfRVEoMVUsIG1icnRvYzMyKCZvdXQsICJceGEyIiAiY2RlZiIsIDUsIHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxjaGFyMzJfdD4oMHgwMGEyKSwgb3V0KTsKKyAgQVNTRVJUX1RSVUUobWJzaW5pdChwcykpOworICAvLyAzLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG9jMzIoJm91dCwgIlx4ZTIiLCAxLCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvYzMyKCZvdXQsICJceDgyIiwgMSwgcHMpKTsKKyAgQVNTRVJUX0VRKDFVLCBtYnJ0b2MzMigmb3V0LCAiXHhhYyIgImRlZiIsIDQsIHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxjaGFyMzJfdD4oMHgyMGFjKSwgb3V0KTsKKyAgQVNTRVJUX1RSVUUobWJzaW5pdChwcykpOworICAvLyA0LWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG9jMzIoJm91dCwgIlx4ZjAiLCAxLCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvYzMyKCZvdXQsICJceGE0XHhhZCIsIDIsIHBzKSk7CisgIEFTU0VSVF9FUSgxVSwgbWJydG9jMzIoJm91dCwgIlx4YTIiICJlZiIsIDMsIHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxjaGFyMzJfdD4oMHgyNGI2MiksIG91dCk7CisgIEFTU0VSVF9UUlVFKG1ic2luaXQocHMpKTsKKworICAvLyBJbnZhbGlkIDItYnl0ZQorICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvYzMyKCZvdXQsICJceGMyIiwgMSwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCBtYnJ0b2MzMigmb3V0LCAiXHgyMCIgImNkZWYiLCA1LCBwcykpOworICBBU1NFUlRfRVEoRUlMU0VRLCBlcnJubyk7Cit9CisjZW5kaWYKKworVEVTVCh1Y2hhciwgbWJydG9jMzJfaW5jb21wbGV0ZSkgeworI2lmIEhBVkVfVUNIQVIKKyAgbWJzdGF0ZV90IHBzOworICBtZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKKworICB0ZXN0X21icnRvYzMyX2luY29tcGxldGUoJnBzKTsKKyAgdGVzdF9tYnJ0b2MzMl9pbmNvbXBsZXRlKE5VTEwpOworI2Vsc2UKKyAgR1RFU1RfTE9HXyhJTkZPKSA8PCAidWNoYXIuaCBpcyB1bmF2YWlsYWJsZS5cbiI7CisjZW5kaWYKK30KKwpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pc3RkX3Rlc3QuY3BwIGIvdGVzdHMvdW5pc3RkX3Rlc3QuY3BwCmluZGV4IDIzMDhhZDkuLjgxOTVlYTggMTAwNjQ0Ci0tLSBhL3Rlc3RzL3VuaXN0ZF90ZXN0LmNwcAorKysgYi90ZXN0cy91bmlzdGRfdGVzdC5jcHAKQEAgLTE4LDIxICsxOCwxMjMgQEAKICNpbmNsdWRlICJTY29wZWRTaWduYWxIYW5kbGVyLmgiCiAjaW5jbHVkZSAiVGVtcG9yYXJ5RmlsZS5oIgogCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KIAogVEVTVCh1bmlzdGQsIHN5c2NvbmZfU0NfTU9OT1RPTklDX0NMT0NLKSB7CiAgIEFTU0VSVF9HVChzeXNjb25mKF9TQ19NT05PVE9OSUNfQ0xPQ0spLCAwKTsKIH0KIAotVEVTVCh1bmlzdGQsIHNicmspIHsKLSAgdm9pZCogaW5pdGlhbF9icmVhayA9IHNicmsoMCk7CitzdGF0aWMgdm9pZCogZ2V0X2JyaygpIHsKKyAgcmV0dXJuIHNicmsoMCk7Cit9CiAKLSAgdm9pZCogbmV3X2JyZWFrID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGluaXRpYWxfYnJlYWspICsgMjAwMCk7CitzdGF0aWMgdm9pZCogcGFnZV9hbGlnbih1aW50cHRyX3QgYWRkcikgeworICB1aW50cHRyX3QgbWFzayA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSkgLSAxOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGFkZHIgKyBtYXNrKSAmIH5tYXNrKTsKK30KKworVEVTVCh1bmlzdGQsIGJyaykgeworICB2b2lkKiBpbml0aWFsX2JyZWFrID0gZ2V0X2JyaygpOworCisgIC8vIFRoZSBrZXJuZWwgYWxpZ25zIHRoZSBicmVhayB0byBhIHBhZ2UuCisgIHZvaWQqIG5ld19icmVhayA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihpbml0aWFsX2JyZWFrKSArIDEpOwogICBBU1NFUlRfRVEoMCwgYnJrKG5ld19icmVhaykpOworICBBU1NFUlRfR0UoZ2V0X2JyaygpLCBuZXdfYnJlYWspOwogCi0gIHZvaWQqIGZpbmFsX2JyZWFrID0gc2JyaygwKTsKLSAgQVNTRVJUX0VRKGZpbmFsX2JyZWFrLCBuZXdfYnJlYWspOworICBuZXdfYnJlYWsgPSBwYWdlX2FsaWduKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihpbml0aWFsX2JyZWFrKSArIHN5c2NvbmYoX1NDX1BBR0VfU0laRSkpOworICBBU1NFUlRfRVEoMCwgYnJrKG5ld19icmVhaykpOworICBBU1NFUlRfRVEoZ2V0X2JyaygpLCBuZXdfYnJlYWspOworfQorCitURVNUKHVuaXN0ZCwgYnJrX0VOT01FTSkgeworICBBU1NFUlRfRVEoLTEsIGJyayhyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKKyAgQVNTRVJUX0VRKEVOT01FTSwgZXJybm8pOworfQorCisjaWYgZGVmaW5lZChfX0dMSUJDX18pCisjZGVmaW5lIFNCUktfTUlOIElOVFBUUl9NSU4KKyNkZWZpbmUgU0JSS19NQVggSU5UUFRSX01BWAorI2Vsc2UKKyNkZWZpbmUgU0JSS19NSU4gUFRSRElGRl9NSU4KKyNkZWZpbmUgU0JSS19NQVggUFRSRElGRl9NQVgKKyNlbmRpZgorCitURVNUKHVuaXN0ZCwgc2Jya19FTk9NRU0pIHsKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pICYmICFkZWZpbmVkKF9fTFA2NF9fKQorICAvLyBUaGVyZSBpcyBubyB3YXkgdG8gZ3VhcmFudGVlIHRoYXQgYWxsIG92ZXJmbG93IGNvbmRpdGlvbnMgY2FuIGJlIHRlc3RlZAorICAvLyB3aXRob3V0IG1hbmlwdWxhdGluZyB0aGUgdW5kZXJseWluZyB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgYnJlYWsuCisgIGV4dGVybiB2b2lkKiBfX2Jpb25pY19icms7CisKKyAgY2xhc3MgU2NvcGVkQnJrIHsKKyAgcHVibGljOgorICAgIFNjb3BlZEJyaygpIDogc2F2ZWRfYnJrXyhfX2Jpb25pY19icmspIHt9CisgICAgdmlydHVhbCB+U2NvcGVkQnJrKCkgeyBfX2Jpb25pY19icmsgPSBzYXZlZF9icmtfOyB9CisKKyAgcHJpdmF0ZToKKyAgICB2b2lkKiBzYXZlZF9icmtfOworICB9OworCisgIFNjb3BlZEJyayBzY29wZV9icms7CisKKyAgLy8gU2V0IHRoZSBjdXJyZW50IGJyZWFrIHRvIGEgcG9pbnQgdGhhdCB3aWxsIGNhdXNlIGFuIG92ZXJmbG93LgorICBfX2Jpb25pY19icmsgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KFBUUkRJRkZfTUFYKSArIDIpOworCisgIC8vIENhbid0IGluY3JlYXNlIGJ5IHNvIG11Y2ggdGhhdCB3ZSdkIG92ZXJmbG93LgorICBBU1NFUlRfRVEocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpLCBzYnJrKFBUUkRJRkZfTUFYKSk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKKworICAvLyBTZXQgdGhlIGN1cnJlbnQgYnJlYWsgdG8gYSBwb2ludCB0aGF0IHdpbGwgY2F1c2UgYW4gb3ZlcmZsb3cuCisgIF9fYmlvbmljX2JyayA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oUFRSRElGRl9NQVgpKTsKKworICBBU1NFUlRfRVEocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpLCBzYnJrKFBUUkRJRkZfTUlOKSk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKKworICBfX2Jpb25pY19icmsgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KFBUUkRJRkZfTUFYKSAtIDEpOworCisgIEFTU0VSVF9FUShyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSksIHNicmsoUFRSRElGRl9NSU4gKyAxKSk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKKyNlbHNlCisgIGNsYXNzIFNjb3BlZEJyayB7CisgIHB1YmxpYzoKKyAgICBTY29wZWRCcmsoKSA6IHNhdmVkX2Jya18oZ2V0X2JyaygpKSB7fQorICAgIHZpcnR1YWwgflNjb3BlZEJyaygpIHsgYnJrKHNhdmVkX2Jya18pOyB9CisKKyAgcHJpdmF0ZToKKyAgICB2b2lkKiBzYXZlZF9icmtfOworICB9OworCisgIFNjb3BlZEJyayBzY29wZV9icms7CisKKyAgdWludHB0cl90IGN1cl9icmsgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZ2V0X2JyaygpKTsKKyAgaWYgKGN1cl9icmsgPCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KC0oU0JSS19NSU4rMSkpKSB7CisgICAgLy8gRG8gdGhlIG92ZXJmbG93IHRlc3QgZm9yIGEgbWF4IG5lZ2F0aXZlIGluY3JlbWVudC4KKyAgICBBU1NFUlRfRVEocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpLCBzYnJrKFNCUktfTUlOKSk7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorICAgIC8vIEdMSUJDIGRvZXMgbm90IHNldCBlcnJubyBpbiBvdmVyZmxvdyBjYXNlLgorICAgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKKyNlbmRpZgorICB9CisKKyAgdWludHB0cl90IG92ZXJmbG93X2JyayA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oU0JSS19NQVgpICsgMjsKKyAgaWYgKGN1cl9icmsgPCBvdmVyZmxvd19icmspIHsKKyAgICAvLyBUcnkgYW5kIG1vdmUgdGhlIHZhbHVlIHRvIFBUUkRJRkZfTUFYICsgMi4KKyAgICBjdXJfYnJrID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHNicmsob3ZlcmZsb3dfYnJrKSk7CisgIH0KKyAgaWYgKGN1cl9icmsgPj0gb3ZlcmZsb3dfYnJrKSB7CisgICAgQVNTRVJUX0VRKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSwgc2JyayhTQlJLX01BWCkpOworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKyAgICAvLyBHTElCQyBkb2VzIG5vdCBzZXQgZXJybm8gaW4gb3ZlcmZsb3cgY2FzZS4KKyAgICBBU1NFUlRfRVEoRU5PTUVNLCBlcnJubyk7CisjZW5kaWYKKyAgfQorI2VuZGlmCiB9CiAKIFRFU1QodW5pc3RkLCB0cnVuY2F0ZSkgewpAQCAtNzUsMTYgKzE3NywyODggQEAKICAgQVNTRVJUX0VRKDEyMywgc2Iuc3Rfc2l6ZSk7CiB9CiAKLXN0YXRpYyBib29sIGdQYXVzZVRlc3RGbGFnID0gZmFsc2U7CitzdGF0aWMgYm9vbCBnX3BhdXNlX3Rlc3RfZmxhZyA9IGZhbHNlOwogc3RhdGljIHZvaWQgUGF1c2VUZXN0U2lnbmFsSGFuZGxlcihpbnQpIHsKLSAgZ1BhdXNlVGVzdEZsYWcgPSB0cnVlOworICBnX3BhdXNlX3Rlc3RfZmxhZyA9IHRydWU7CiB9CiAKIFRFU1QodW5pc3RkLCBwYXVzZSkgewogICBTY29wZWRTaWduYWxIYW5kbGVyIGhhbmRsZXIoU0lHQUxSTSwgUGF1c2VUZXN0U2lnbmFsSGFuZGxlcik7CiAKICAgYWxhcm0oMSk7Ci0gIEFTU0VSVF9GQUxTRShnUGF1c2VUZXN0RmxhZyk7CisgIEFTU0VSVF9GQUxTRShnX3BhdXNlX3Rlc3RfZmxhZyk7CiAgIEFTU0VSVF9FUSgtMSwgcGF1c2UoKSk7Ci0gIEFTU0VSVF9UUlVFKGdQYXVzZVRlc3RGbGFnKTsKKyAgQVNTRVJUX1RSVUUoZ19wYXVzZV90ZXN0X2ZsYWcpOworfQorCitURVNUKHVuaXN0ZCwgcmVhZCkgeworICBpbnQgZmQgPSBvcGVuKCIvcHJvYy92ZXJzaW9uIiwgT19SRE9OTFkpOworICBBU1NFUlRfVFJVRShmZCAhPSAtMSk7CisKKyAgY2hhciBidWZbNV07CisgIEFTU0VSVF9FUSg1LCByZWFkKGZkLCBidWYsIDUpKTsKKyAgQVNTRVJUX0VRKGJ1ZlswXSwgJ0wnKTsKKyAgQVNTRVJUX0VRKGJ1ZlsxXSwgJ2knKTsKKyAgQVNTRVJUX0VRKGJ1ZlsyXSwgJ24nKTsKKyAgQVNTRVJUX0VRKGJ1ZlszXSwgJ3UnKTsKKyAgQVNTRVJUX0VRKGJ1Zls0XSwgJ3gnKTsKKyAgY2xvc2UoZmQpOworfQorCitURVNUKHVuaXN0ZCwgcmVhZF9FQkFERikgeworICAvLyByZWFkIHJldHVybnMgc3NpemVfdCB3aGljaCBpcyA2NC1iaXRzIG9uIExQNjQsIHNvIGl0J3Mgd29ydGggZXhwbGljaXRseSBjaGVja2luZyB0aGF0CisgIC8vIG91ciBzeXNjYWxsIHN0dWJzIGNvcnJlY3RseSByZXR1cm4gYSA2NC1iaXQgLTEuCisgIGNoYXIgYnVmWzFdOworICBBU1NFUlRfRVEoLTEsIHJlYWQoLTEsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgQVNTRVJUX0VRKEVCQURGLCBlcnJubyk7Cit9CisKK1RFU1QodW5pc3RkLCBzeXNjYWxsX2xvbmcpIHsKKyAgLy8gQ2hlY2sgdGhhdCBzeXNjYWxsKDMpIGNvcnJlY3RseSByZXR1cm5zIGxvbmcgcmVzdWx0cy4KKyAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9NzM5NTIKKyAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIGJyZWFrIGlzID4gNEdpQiwgYnV0IHRoaXMgaXMgcG90ZW50aWFsbHkgZmxha3kuCisgIHVpbnRwdHJfdCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHNicmsoMCkpOworICBBU1NFUlRfRVEocCwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihzeXNjYWxsKF9fTlJfYnJrLCAwKSkpOworfQorCitURVNUKHVuaXN0ZCwgYWxhcm0pIHsKKyAgQVNTRVJUX0VRKDBVLCBhbGFybSgwKSk7Cit9CisKK1RFU1QodW5pc3RkLCBfZXhpdCkgeworICBpbnQgcGlkID0gZm9yaygpOworICBBU1NFUlRfTkUoLTEsIHBpZCkgPDwgc3RyZXJyb3IoZXJybm8pOworCisgIGlmIChwaWQgPT0gMCkgeworICAgIF9leGl0KDk5KTsKKyAgfQorCisgIGludCBzdGF0dXM7CisgIEFTU0VSVF9FUShwaWQsIHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSk7CisgIEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTsKKyAgQVNTRVJUX0VRKDk5LCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKK30KKworVEVTVCh1bmlzdGQsIGdldGVudl91bnNldGVudikgeworICBBU1NFUlRfRVEoMCwgc2V0ZW52KCJ0ZXN0LXZhcmlhYmxlIiwgImhlbGxvIiwgMSkpOworICBBU1NFUlRfU1RSRVEoImhlbGxvIiwgZ2V0ZW52KCJ0ZXN0LXZhcmlhYmxlIikpOworICBBU1NFUlRfRVEoMCwgdW5zZXRlbnYoInRlc3QtdmFyaWFibGUiKSk7CisgIEFTU0VSVF9UUlVFKGdldGVudigidGVzdC12YXJpYWJsZSIpID09IE5VTEwpOworfQorCitURVNUKHVuaXN0ZCwgdW5zZXRlbnZfRUlOVkFMKSB7CisgIEVYUEVDVF9FUSgtMSwgdW5zZXRlbnYoTlVMTCkpOworICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7CisgIEVYUEVDVF9FUSgtMSwgdW5zZXRlbnYoIiIpKTsKKyAgRVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pOworICBFWFBFQ1RfRVEoLTEsIHVuc2V0ZW52KCJhPWIiKSk7CisgIEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKTsKK30KKworVEVTVCh1bmlzdGQsIHNldGVudl9FSU5WQUwpIHsKKyAgRVhQRUNUX0VRKC0xLCBzZXRlbnYoTlVMTCwgInZhbHVlIiwgMCkpOworICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7CisgIEVYUEVDVF9FUSgtMSwgc2V0ZW52KE5VTEwsICJ2YWx1ZSIsIDEpKTsKKyAgRVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pOworICBFWFBFQ1RfRVEoLTEsIHNldGVudigiIiwgInZhbHVlIiwgMCkpOworICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7CisgIEVYUEVDVF9FUSgtMSwgc2V0ZW52KCIiLCAidmFsdWUiLCAxKSk7CisgIEVYUEVDVF9FUShFSU5WQUwsIGVycm5vKTsKKyAgRVhQRUNUX0VRKC0xLCBzZXRlbnYoImE9YiIsICJ2YWx1ZSIsIDApKTsKKyAgRVhQRUNUX0VRKEVJTlZBTCwgZXJybm8pOworICBFWFBFQ1RfRVEoLTEsIHNldGVudigiYT1iIiwgInZhbHVlIiwgMSkpOworICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7Cit9CisKK1RFU1QodW5pc3RkLCBzZXRlbnYpIHsKKyAgQVNTRVJUX0VRKDAsIHVuc2V0ZW52KCJ0ZXN0LXZhcmlhYmxlIikpOworCisgIGNoYXIgYVtdID0gImEiOworICBjaGFyIGJbXSA9ICJiIjsKKyAgY2hhciBjW10gPSAiYyI7CisKKyAgLy8gTmV3IHZhbHVlLgorICBFWFBFQ1RfRVEoMCwgc2V0ZW52KCJ0ZXN0LXZhcmlhYmxlIiwgYSwgMCkpOworICBFWFBFQ1RfU1RSRVEoYSwgZ2V0ZW52KCJ0ZXN0LXZhcmlhYmxlIikpOworCisgIC8vIEV4aXN0aW5nIHZhbHVlLCBubyBvdmVyd3JpdGUuCisgIEVYUEVDVF9FUSgwLCBzZXRlbnYoInRlc3QtdmFyaWFibGUiLCBiLCAwKSk7CisgIEVYUEVDVF9TVFJFUShhLCBnZXRlbnYoInRlc3QtdmFyaWFibGUiKSk7CisKKyAgLy8gRXhpc3RpbmcgdmFsdWUsIG92ZXJ3cml0ZS4KKyAgRVhQRUNUX0VRKDAsIHNldGVudigidGVzdC12YXJpYWJsZSIsIGMsIDEpKTsKKyAgRVhQRUNUX1NUUkVRKGMsIGdldGVudigidGVzdC12YXJpYWJsZSIpKTsKKyAgLy8gQnV0IHRoZSBhcnJheXMgYmFja2luZyB0aGUgdmFsdWVzIGFyZSB1bmNoYW5nZWQuCisgIEVYUEVDVF9FUSgnYScsIGFbMF0pOworICBFWFBFQ1RfRVEoJ2InLCBiWzBdKTsKKyAgRVhQRUNUX0VRKCdjJywgY1swXSk7CisKKyAgQVNTRVJUX0VRKDAsIHVuc2V0ZW52KCJ0ZXN0LXZhcmlhYmxlIikpOworfQorCitURVNUKHVuaXN0ZCwgcHV0ZW52KSB7CisgIEFTU0VSVF9FUSgwLCB1bnNldGVudigiYSIpKTsKKworICBjaGFyKiBzMSA9IHN0cmR1cCgiYT1iIik7CisgIEFTU0VSVF9FUSgwLCBwdXRlbnYoczEpKTsKKworICBBU1NFUlRfU1RSRVEoImIiLCBnZXRlbnYoImEiKSk7CisgIHMxWzJdID0gJ2MnOworICBBU1NFUlRfU1RSRVEoImMiLCBnZXRlbnYoImEiKSk7CisKKyAgY2hhciogczIgPSBzdHJkdXAoImE9YiIpOworICBBU1NFUlRfRVEoMCwgcHV0ZW52KHMyKSk7CisKKyAgQVNTRVJUX1NUUkVRKCJiIiwgZ2V0ZW52KCJhIikpOworICBBU1NFUlRfRVEoJ2MnLCBzMVsyXSk7CisKKyAgQVNTRVJUX0VRKDAsIHVuc2V0ZW52KCJhIikpOworICBmcmVlKHMxKTsKKyAgZnJlZShzMik7Cit9CisKK1RFU1QodW5pc3RkLCBjbGVhcmVudikgeworICBleHRlcm4gY2hhcioqIGVudmlyb247CisKKyAgLy8gR3VhcmFudGVlIHRoYXQgZW52aXJvbiBpcyBub3QgaW5pdGlhbGx5IGVtcHR5Li4uCisgIEFTU0VSVF9FUSgwLCBzZXRlbnYoInRlc3QtdmFyaWFibGUiLCAiYSIsIDEpKTsKKworICAvLyBTdGFzaCBhIGNvcHkuCisgIHN0ZDo6dmVjdG9yPGNoYXIqPiBvbGRfZW52aXJvbjsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGVudmlyb25baV0gIT0gTlVMTDsgKytpKSB7CisgICAgb2xkX2Vudmlyb24ucHVzaF9iYWNrKHN0cmR1cChlbnZpcm9uW2ldKSk7CisgIH0KKworICBBU1NFUlRfRVEoMCwgY2xlYXJlbnYoKSk7CisKKyAgRVhQRUNUX1RSVUUoZW52aXJvbiA9PSBOVUxMIHx8IGVudmlyb25bMF0gPT0gTlVMTCk7CisgIEVYUEVDVF9FUShOVUxMLCBnZXRlbnYoInRlc3QtdmFyaWFibGUiKSk7CisgIEVYUEVDVF9FUSgwLCBzZXRlbnYoInRlc3QtdmFyaWFibGUiLCAicG9zdC1jbGVhciIsIDEpKTsKKyAgRVhQRUNUX1NUUkVRKCJwb3N0LWNsZWFyIiwgZ2V0ZW52KCJ0ZXN0LXZhcmlhYmxlIikpOworCisgIC8vIFB1dCB0aGUgb2xkIGVudmlyb25tZW50IGJhY2suCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkX2Vudmlyb24uc2l6ZSgpOyArK2kpIHsKKyAgICBFWFBFQ1RfRVEoMCwgcHV0ZW52KG9sZF9lbnZpcm9uW2ldKSk7CisgIH0KKworICAvLyBDaGVjayBpdCB3YXNuJ3Qgb3ZlcndyaXR0ZW4uCisgIEVYUEVDVF9TVFJFUSgiYSIsIGdldGVudigidGVzdC12YXJpYWJsZSIpKTsKKworICBFWFBFQ1RfRVEoMCwgdW5zZXRlbnYoInRlc3QtdmFyaWFibGUiKSk7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RGc3luY0Z1bmN0aW9uKGludCAoKmZuKShpbnQpKSB7CisgIGludCBmZDsKKworICAvLyBDYW4ndCBzeW5jIGFuIGludmFsaWQgZmQuCisgIGVycm5vID0gMDsKKyAgRVhQRUNUX0VRKC0xLCBmbigtMSkpOworICBFWFBFQ1RfRVEoRUJBREYsIGVycm5vKTsKKworICAvLyBJdCBkb2Vzbid0IG1hdHRlciB3aGV0aGVyIHlvdSd2ZSBvcGVuZWQgYSBmaWxlIGZvciB3cml0ZSBvciBub3QuCisgIFRlbXBvcmFyeUZpbGUgdGY7CisgIEFTU0VSVF9ORSgtMSwgdGYuZmQpOworCisgIEVYUEVDVF9FUSgwLCBmbih0Zi5mZCkpOworCisgIEFTU0VSVF9ORSgtMSwgZmQgPSBvcGVuKHRmLmZpbGVuYW1lLCBPX1JET05MWSkpOworICBFWFBFQ1RfRVEoMCwgZm4oZmQpKTsKKyAgY2xvc2UoZmQpOworCisgIEFTU0VSVF9ORSgtMSwgZmQgPSBvcGVuKHRmLmZpbGVuYW1lLCBPX1JEV1IpKTsKKyAgRVhQRUNUX0VRKDAsIGZuKGZkKSk7CisgIGNsb3NlKGZkKTsKKworICAvLyBUaGUgZmQgY2FuIGV2ZW4gYmUgYSBkaXJlY3RvcnkuCisgIEFTU0VSVF9ORSgtMSwgZmQgPSBvcGVuKCIvIiwgT19SRE9OTFkpKTsKKyAgRVhQRUNUX0VRKDAsIGZuKGZkKSk7CisgIGNsb3NlKGZkKTsKKworICAvLyBCdXQgc29tZSBmaWxlIHN5c3RlbXMgbWF5IGNob29zZSB0byBiZSBmdXNzeS4uLgorICBlcnJubyA9IDA7CisgIEFTU0VSVF9ORSgtMSwgZmQgPSBvcGVuKCIvcHJvYy92ZXJzaW9uIiwgT19SRE9OTFkpKTsKKyAgRVhQRUNUX0VRKC0xLCBmbihmZCkpOworICBFWFBFQ1RfRVEoRUlOVkFMLCBlcnJubyk7CisgIGNsb3NlKGZkKTsKK30KKworVEVTVCh1bmlzdGQsIGZkYXRhc3luYykgeworICBUZXN0RnN5bmNGdW5jdGlvbihmZGF0YXN5bmMpOworfQorCitURVNUKHVuaXN0ZCwgZnN5bmMpIHsKKyAgVGVzdEZzeW5jRnVuY3Rpb24oZnN5bmMpOworfQorCitzdGF0aWMgdm9pZCBBc3NlcnRHZXRQaWRDb3JyZWN0KCkgeworICAvLyBUaGUgbG9vcCBpcyBqdXN0IHRvIG1ha2UgbWFudWFsIHRlc3RpbmcvZGVidWdnaW5nIHdpdGggc3RyYWNlIGVhc2llci4KKyAgcGlkX3QgZ2V0cGlkX3N5c2NhbGxfcmVzdWx0ID0gc3lzY2FsbChfX05SX2dldHBpZCk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTI4OyArK2kpIHsKKyAgICBBU1NFUlRfRVEoZ2V0cGlkX3N5c2NhbGxfcmVzdWx0LCBnZXRwaWQoKSk7CisgIH0KK30KKworVEVTVCh1bmlzdGQsIGdldHBpZF9jYWNoaW5nX2FuZF9mb3JrKSB7CisgIHBpZF90IHBhcmVudF9waWQgPSBnZXRwaWQoKTsKKyAgQVNTRVJUX0VRKHN5c2NhbGwoX19OUl9nZXRwaWQpLCBwYXJlbnRfcGlkKTsKKworICBwaWRfdCBmb3JrX3Jlc3VsdCA9IGZvcmsoKTsKKyAgQVNTRVJUX05FKGZvcmtfcmVzdWx0LCAtMSk7CisgIGlmIChmb3JrX3Jlc3VsdCA9PSAwKSB7CisgICAgLy8gV2UncmUgdGhlIGNoaWxkLgorICAgIEFzc2VydEdldFBpZENvcnJlY3QoKTsKKyAgICBBU1NFUlRfRVEocGFyZW50X3BpZCwgZ2V0cHBpZCgpKTsKKyAgICBfZXhpdCgxMjMpOworICB9IGVsc2UgeworICAgIC8vIFdlJ3JlIHRoZSBwYXJlbnQuCisgICAgQVNTRVJUX0VRKHBhcmVudF9waWQsIGdldHBpZCgpKTsKKworICAgIGludCBzdGF0dXM7CisgICAgQVNTRVJUX0VRKGZvcmtfcmVzdWx0LCB3YWl0cGlkKGZvcmtfcmVzdWx0LCAmc3RhdHVzLCAwKSk7CisgICAgQVNTRVJUX1RSVUUoV0lGRVhJVEVEKHN0YXR1cykpOworICAgIEFTU0VSVF9FUSgxMjMsIFdFWElUU1RBVFVTKHN0YXR1cykpOworICB9Cit9CisKK3N0YXRpYyBpbnQgR2V0UGlkQ2FjaGluZ0Nsb25lU3RhcnRSb3V0aW5lKHZvaWQqKSB7CisgIEFzc2VydEdldFBpZENvcnJlY3QoKTsKKyAgcmV0dXJuIDEyMzsKK30KKworVEVTVCh1bmlzdGQsIGdldHBpZF9jYWNoaW5nX2FuZF9jbG9uZSkgeworICBwaWRfdCBwYXJlbnRfcGlkID0gZ2V0cGlkKCk7CisgIEFTU0VSVF9FUShzeXNjYWxsKF9fTlJfZ2V0cGlkKSwgcGFyZW50X3BpZCk7CisKKyAgdm9pZCogY2hpbGRfc3RhY2tbMTAyNF07CisgIGludCBjbG9uZV9yZXN1bHQgPSBjbG9uZShHZXRQaWRDYWNoaW5nQ2xvbmVTdGFydFJvdXRpbmUsICZjaGlsZF9zdGFja1sxMDI0XSwgQ0xPTkVfTkVXTlMgfCBTSUdDSExELCBOVUxMKTsKKyAgaWYgKGNsb25lX3Jlc3VsdCA9PSAtMSAmJiBlcnJubyA9PSBFUEVSTSAmJiBnZXR1aWQoKSAhPSAwKSB7CisgICAgR1RFU1RfTE9HXyhJTkZPKSA8PCAiVGhpcyB0ZXN0IG9ubHkgd29ya3MgaWYgeW91IGhhdmUgcGVybWlzc2lvbiB0byBDTE9ORV9ORVdOUzsgdHJ5IHJ1bm5pbmcgYXMgcm9vdC5cbiI7CisgICAgcmV0dXJuOworICB9CisgIEFTU0VSVF9ORShjbG9uZV9yZXN1bHQsIC0xKTsKKworICBBU1NFUlRfRVEocGFyZW50X3BpZCwgZ2V0cGlkKCkpOworCisgIGludCBzdGF0dXM7CisgIEFTU0VSVF9FUShjbG9uZV9yZXN1bHQsIHdhaXRwaWQoY2xvbmVfcmVzdWx0LCAmc3RhdHVzLCAwKSk7CisgIEFTU0VSVF9UUlVFKFdJRkVYSVRFRChzdGF0dXMpKTsKKyAgQVNTRVJUX0VRKDEyMywgV0VYSVRTVEFUVVMoc3RhdHVzKSk7Cit9CisKK3N0YXRpYyB2b2lkKiBHZXRQaWRDYWNoaW5nUHRocmVhZFN0YXJ0Um91dGluZSh2b2lkKikgeworICBBc3NlcnRHZXRQaWRDb3JyZWN0KCk7CisgIHJldHVybiBOVUxMOworfQorCitURVNUKHVuaXN0ZCwgZ2V0cGlkX2NhY2hpbmdfYW5kX3B0aHJlYWRfY3JlYXRlKSB7CisgIHBpZF90IHBhcmVudF9waWQgPSBnZXRwaWQoKTsKKworICBwdGhyZWFkX3QgdDsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY3JlYXRlKCZ0LCBOVUxMLCBHZXRQaWRDYWNoaW5nUHRocmVhZFN0YXJ0Um91dGluZSwgTlVMTCkpOworCisgIEFTU0VSVF9FUShwYXJlbnRfcGlkLCBnZXRwaWQoKSk7CisKKyAgdm9pZCogcmVzdWx0OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9qb2luKHQsICZyZXN1bHQpKTsKKyAgQVNTRVJUX0VRKE5VTEwsIHJlc3VsdCk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cy93Y2hhcl90ZXN0LmNwcCBiL3Rlc3RzL3djaGFyX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMmM0YmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy93Y2hhcl90ZXN0LmNwcApAQCAtMCwwICsxLDQ5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3Y2hhci5oPgorCitURVNUKHdjaGFyLCBzaXplb2Zfd2NoYXJfdCkgeworICBFWFBFQ1RfRVEoNFUsIHNpemVvZih3Y2hhcl90KSk7CisgIEVYUEVDVF9FUSg0VSwgc2l6ZW9mKHdpbnRfdCkpOworfQorCitURVNUKHdjaGFyLCBtYnJsZW4pIHsKKyAgY2hhciBieXRlc1tdID0geyAnaCcsICdlJywgJ2wnLCAnbCcsICdvJywgJ1wwJyB9OworICBFWFBFQ1RfRVEoMFUsIG1icmxlbigmYnl0ZXNbMF0sIDAsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKDFVLCBtYnJsZW4oJmJ5dGVzWzBdLCAxLCBOVUxMKSk7CisKKyAgRVhQRUNUX0VRKDFVLCBtYnJsZW4oJmJ5dGVzWzRdLCAxLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgwVSwgbWJybGVuKCZieXRlc1s1XSwgMSwgTlVMTCkpOworfQorCitURVNUKHdjaGFyLCB3Y3RvbWJfd2NydG9tYikgeworICAvLyB3Y3RvbWIgYW5kIHdjcnRvbWIgYmVoYXZlIGRpZmZlcmVudGx5IHdoZW4gcyA9PSBOVUxMLgorICBFWFBFQ1RfRVEoMCwgd2N0b21iKE5VTEwsIEwnaCcpKTsKKyAgRVhQRUNUX0VRKDAsIHdjdG9tYihOVUxMLCBMJ1wwJykpOworICBFWFBFQ1RfRVEoMVUsIHdjcnRvbWIoTlVMTCwgTCdcMCcsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKDFVLCB3Y3J0b21iKE5VTEwsIEwnaCcsIE5VTEwpKTsKKworICBjaGFyIGJ5dGVzW01CX0xFTl9NQVhdOworCisgIC8vIHdjdG9tYiBhbmQgd2NydG9tYiBiZWhhdmUgc2ltaWxhcmx5IGZvciB0aGUgbnVsbCB3aWRlIGNoYXJhY3Rlci4KKyAgRVhQRUNUX0VRKDEsIHdjdG9tYihieXRlcywgTCdcMCcpKTsKKyAgRVhQRUNUX0VRKDFVLCB3Y3J0b21iKGJ5dGVzLCBMJ1wwJywgTlVMTCkpOworCisgIC8vIC4uLmFuZCBmb3IgcmVndWxhciBjaGFyYWN0ZXJzLgorICBtZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoMSwgd2N0b21iKGJ5dGVzLCBMJ2gnKSk7CisgIEVYUEVDVF9FUSgnaCcsIGJ5dGVzWzBdKTsKKyAgbWVtc2V0KGJ5dGVzLCAwLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKDFVLCB3Y3J0b21iKGJ5dGVzLCBMJ2gnLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgnaCcsIGJ5dGVzWzBdKTsKKworICBBU1NFUlRfU1RSRVEoIkMuVVRGLTgiLCBzZXRsb2NhbGUoTENfQ1RZUEUsICJDLlVURi04IikpOworICB1c2Vsb2NhbGUoTENfR0xPQkFMX0xPQ0FMRSk7CisKKyAgLy8gMS1ieXRlIFVURi04LgorICBtZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoMVUsIHdjcnRvbWIoYnl0ZXMsIEwnaCcsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCdoJywgYnl0ZXNbMF0pOworICAvLyAyLWJ5dGUgVVRGLTguCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgyVSwgd2NydG9tYihieXRlcywgMHgwMGEyLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgnXHhjMicsIGJ5dGVzWzBdKTsKKyAgRVhQRUNUX0VRKCdceGEyJywgYnl0ZXNbMV0pOworICAvLyAzLWJ5dGUgVVRGLTguCisgIG1lbXNldChieXRlcywgMCwgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSgzVSwgd2NydG9tYihieXRlcywgMHgyMGFjLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgnXHhlMicsIGJ5dGVzWzBdKTsKKyAgRVhQRUNUX0VRKCdceDgyJywgYnl0ZXNbMV0pOworICBFWFBFQ1RfRVEoJ1x4YWMnLCBieXRlc1syXSk7CisgIC8vIDQtYnl0ZSBVVEYtOC4KKyAgbWVtc2V0KGJ5dGVzLCAwLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKDRVLCB3Y3J0b21iKGJ5dGVzLCAweDI0YjYyLCBOVUxMKSk7CisgIEVYUEVDVF9FUSgnXHhmMCcsIGJ5dGVzWzBdKTsKKyAgRVhQRUNUX0VRKCdceGE0JywgYnl0ZXNbMV0pOworICBFWFBFQ1RfRVEoJ1x4YWQnLCBieXRlc1syXSk7CisgIEVYUEVDVF9FUSgnXHhhMicsIGJ5dGVzWzNdKTsKKyAgLy8gSW52YWxpZCBjb2RlIHBvaW50LgorICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIHdjcnRvbWIoYnl0ZXMsIDB4ZmZmZmZmZmYsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworfQorCitURVNUKHdjaGFyLCB3Y3J0b21iX3N0YXJ0X3N0YXRlKSB7CisgIGNoYXIgb3V0W01CX0xFTl9NQVhdOworICBtYnN0YXRlX3QgcHM7CisKKyAgLy8gQW55IG5vbi1pbml0aWFsIHN0YXRlIGlzIGludmFsaWQgd2hlbiBjYWxsaW5nIHdjcnRvbWIuCisgIG1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvd2MoTlVMTCwgIlx4YzIiLCAxLCAmcHMpKTsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCB3Y3J0b21iKG91dCwgMHgwMGEyLCAmcHMpKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworCisgIC8vIElmIHRoZSBmaXJzdCBhcmd1bWVudCB0byB3Y3J0b21iIGlzIE5VTEwgb3IgdGhlIHNlY29uZCBpcyBMJ1wwJyB0aGUgc2hpZnQKKyAgLy8gc3RhdGUgc2hvdWxkIGJlIHJlc2V0LgorICBtZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b3djKE5VTEwsICJceGMyIiwgMSwgJnBzKSk7CisgIEVYUEVDVF9FUSgxVSwgd2NydG9tYihOVUxMLCAweDAwYTIsICZwcykpOworICBFWFBFQ1RfVFJVRShtYnNpbml0KCZwcykpOworCisgIG1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvd2MoTlVMTCwgIlx4ZjBceGE0IiwgMSwgJnBzKSk7CisgIEVYUEVDVF9FUSgxVSwgd2NydG9tYihvdXQsIEwnXDAnLCAmcHMpKTsKKyAgRVhQRUNUX1RSVUUobWJzaW5pdCgmcHMpKTsKK30KKworVEVTVCh3Y2hhciwgd2NzdG9tYnNfd2NydG9tYnMpIHsKKyAgY29uc3Qgd2NoYXJfdCBjaGFyc1tdID0geyBMJ2gnLCBMJ2UnLCBMJ2wnLCBMJ2wnLCBMJ28nLCAwIH07CisgIGNvbnN0IHdjaGFyX3QgYmFkX2NoYXJzW10gPSB7IEwnaCcsIEwnaScsIHN0YXRpY19jYXN0PHdjaGFyX3Q+KDB4ZmZmZmZmZmYpLCAwIH07CisgIGNvbnN0IHdjaGFyX3QqIHNyYzsKKyAgY2hhciBieXRlc1tCVUZTSVpdOworCisgIC8vIEdpdmVuIGEgTlVMTCBkZXN0aW5hdGlvbiwgdGhlc2UgZnVuY3Rpb25zIGNvdW50IHZhbGlkIGNoYXJhY3RlcnMuCisgIEVYUEVDVF9FUSg1VSwgd2NzdG9tYnMoTlVMTCwgY2hhcnMsIDApKTsKKyAgRVhQRUNUX0VRKDVVLCB3Y3N0b21icyhOVUxMLCBjaGFycywgNCkpOworICBFWFBFQ1RfRVEoNVUsIHdjc3RvbWJzKE5VTEwsIGNoYXJzLCAyNTYpKTsKKyAgc3JjID0gY2hhcnM7CisgIEVYUEVDVF9FUSg1VSwgd2NzcnRvbWJzKE5VTEwsICZzcmMsIDAsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCZjaGFyc1swXSwgc3JjKTsKKyAgc3JjID0gY2hhcnM7CisgIEVYUEVDVF9FUSg1VSwgd2NzcnRvbWJzKE5VTEwsICZzcmMsIDQsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKCZjaGFyc1swXSwgc3JjKTsKKyAgc3JjID0gY2hhcnM7CisgIEVYUEVDVF9FUSg1VSwgd2NzcnRvbWJzKE5VTEwsICZzcmMsIDI1NiwgTlVMTCkpOworICBFWFBFQ1RfRVEoJmNoYXJzWzBdLCBzcmMpOworCisgIC8vIEFuIHVucmVwcmVzZW50YWJsZSBjaGFyIGp1c3QgcmV0dXJucyBhbiBlcnJvciBmcm9tIHdjc3RvbWJzLi4uCisgIGVycm5vID0gMDsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCB3Y3N0b21icyhOVUxMLCBiYWRfY2hhcnMsIDApKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworICBlcnJubyA9IDA7CisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgd2NzdG9tYnMoTlVMTCwgYmFkX2NoYXJzLCAyNTYpKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworCisgIC8vIEFuZCB3Y3NydG9tYnMgZG9lc24ndCB0ZWxsIHVzIHdoZXJlIGl0IGdvdCBzdHVjayBiZWNhdXNlIHdlIGRpZG4ndCBhc2sgaXQKKyAgLy8gdG8gYWN0dWFsbHkgY29udmVydCBhbnl0aGluZy4uLgorICBlcnJubyA9IDA7CisgIHNyYyA9IGJhZF9jaGFyczsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCB3Y3NydG9tYnMoTlVMTCwgJnNyYywgMCwgTlVMTCkpOworICBFWFBFQ1RfRVEoJmJhZF9jaGFyc1swXSwgc3JjKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworICBlcnJubyA9IDA7CisgIHNyYyA9IGJhZF9jaGFyczsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCB3Y3NydG9tYnMoTlVMTCwgJnNyYywgMjU2LCBOVUxMKSk7CisgIEVYUEVDVF9FUSgmYmFkX2NoYXJzWzBdLCBzcmMpOworICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7CisKKyAgLy8gT2theSwgbm93IGxldCdzIHRlc3QgYWN0dWFsbHkgY29udmVydGluZyBzb21ldGhpbmcuLi4KKyAgbWVtc2V0KGJ5dGVzLCAneCcsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoMFUsIHdjc3RvbWJzKGJ5dGVzLCBjaGFycywgMCkpOworICBtZW1zZXQoYnl0ZXMsICd4Jywgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUSg0VSwgd2NzdG9tYnMoYnl0ZXMsIGNoYXJzLCA0KSk7CisgIGJ5dGVzWzVdID0gMDsKKyAgRVhQRUNUX1NUUkVRKCJoZWxseCIsIGJ5dGVzKTsKKyAgbWVtc2V0KGJ5dGVzLCAneCcsIHNpemVvZihieXRlcykpOworICBFWFBFQ1RfRVEoNVUsIHdjc3RvbWJzKGJ5dGVzLCBjaGFycywgMjU2KSk7CisgIEVYUEVDVF9TVFJFUSgiaGVsbG8iLCBieXRlcyk7CisgIG1lbXNldChieXRlcywgJ3gnLCBzaXplb2YoYnl0ZXMpKTsKKyAgRVhQRUNUX0VRKDVVLCB3Y3N0b21icyhieXRlcywgY2hhcnMsIDYpKTsKKyAgRVhQRUNUX1NUUkVRKCJoZWxsbyIsIGJ5dGVzKTsKKyAgZXJybm8gPSAwOworICBtZW1zZXQoYnl0ZXMsICd4Jywgc2l6ZW9mKGJ5dGVzKSk7CisgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgd2NzdG9tYnMoYnl0ZXMsIGJhZF9jaGFycywgMjU2KSk7CisgIEVYUEVDVF9FUShFSUxTRVEsIGVycm5vKTsKKyAgYnl0ZXNbM10gPSAwOworICBFWFBFQ1RfU1RSRVEoImhpeCIsIGJ5dGVzKTsKKworICAvLyB3Y3NydG9tYnMgaXMgYSBiaXQgbW9yZSBpbmZvcm1hdGl2ZS4uLgorICBtZW1zZXQoYnl0ZXMsICd4Jywgc2l6ZW9mKGJ5dGVzKSk7CisgIHNyYyA9IGNoYXJzOworICBFWFBFQ1RfRVEoMFUsIHdjc3J0b21icyhieXRlcywgJnNyYywgMCwgTlVMTCkpOworICBFWFBFQ1RfRVEoJmNoYXJzWzBdLCBzcmMpOyAvLyBObyBpbnB1dCBjb25zdW1lZC4KKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworCisgIG1lbXNldChieXRlcywgJ3gnLCBzaXplb2YoYnl0ZXMpKTsKKyAgc3JjID0gY2hhcnM7CisgIEVYUEVDVF9FUSg0VSwgd2NzcnRvbWJzKGJ5dGVzLCAmc3JjLCA0LCBOVUxMKSk7CisgIEVYUEVDVF9FUSgmY2hhcnNbNF0sIHNyYyk7IC8vIFNvbWUgaW5wdXQgY29uc3VtZWQuCisgIEVYUEVDVF9FUShFSUxTRVEsIGVycm5vKTsKKyAgYnl0ZXNbNV0gPSAwOworICBFWFBFQ1RfU1RSRVEoImhlbGx4IiwgYnl0ZXMpOworCisgIG1lbXNldChieXRlcywgJ3gnLCBzaXplb2YoYnl0ZXMpKTsKKyAgc3JjID0gY2hhcnM7CisgIEVYUEVDVF9FUSg1VSwgd2NzcnRvbWJzKGJ5dGVzLCAmc3JjLCAyNTYsIE5VTEwpKTsKKyAgRVhQRUNUX0VRKE5VTEwsIHNyYyk7IC8vIEFsbCBpbnB1dCBjb25zdW1lZCEKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworICBFWFBFQ1RfU1RSRVEoImhlbGxvIiwgYnl0ZXMpOworCisgIG1lbXNldChieXRlcywgJ3gnLCBzaXplb2YoYnl0ZXMpKTsKKyAgc3JjID0gY2hhcnM7CisgIEVYUEVDVF9FUSg1VSwgd2NzcnRvbWJzKGJ5dGVzLCAmc3JjLCA2LCBOVUxMKSk7CisgIEVYUEVDVF9FUShOVUxMLCBzcmMpOyAvLyBBbGwgaW5wdXQgY29uc3VtZWQuCisgIEVYUEVDVF9FUShFSUxTRVEsIGVycm5vKTsKKyAgRVhQRUNUX1NUUkVRKCJoZWxsbyIsIGJ5dGVzKTsKKworICBtZW1zZXQoYnl0ZXMsICd4Jywgc2l6ZW9mKGJ5dGVzKSk7CisgIHNyYyA9IGJhZF9jaGFyczsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCB3Y3NydG9tYnMoYnl0ZXMsICZzcmMsIDI1NiwgTlVMTCkpOworICBFWFBFQ1RfRVEoJmJhZF9jaGFyc1syXSwgc3JjKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworICBieXRlc1szXSA9IDA7CisgIEVYUEVDVF9TVFJFUSgiaGl4IiwgYnl0ZXMpOworCisgIC8vIEFueSBub24taW5pdGlhbCBzdGF0ZSBpcyBpbnZhbGlkIHdoZW4gY2FsbGluZyB3Y3NydG9tYnMuCisgIG1ic3RhdGVfdCBwczsKKyAgc3JjID0gY2hhcnM7CisgIG1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMiksIG1icnRvd2MoTlVMTCwgIlx4YzIiLCAxLCAmcHMpKTsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCB3Y3NydG9tYnMoTlVMTCwgJnNyYywgMCwgJnBzKSk7CisgIEVYUEVDVF9FUShFSUxTRVEsIGVycm5vKTsKK30KKworVEVTVCh3Y2hhciwgbGltaXRzKSB7CisgIEFTU0VSVF9MVChXQ0hBUl9NSU4sIFdDSEFSX01BWCk7Cit9CisKK1RFU1Qod2NoYXIsIHdjc3N0cikgeworICBjb25zdCB3Y2hhcl90KiBoYXlzdGFjayA9IEwibWF0Y2hlcyBoZWxsbyB3b3JsZCwgbm90IHRoZSBzZWNvbmQgaGVsbG8gd29ybGQiOworICBjb25zdCB3Y2hhcl90KiBlbXB0eV9uZWVkbGUgPSBMIiI7CisgIGNvbnN0IHdjaGFyX3QqIGdvb2RfbmVlZGxlID0gTCJsbCI7CisgIGNvbnN0IHdjaGFyX3QqIGJhZF9uZWVkbGUgPSBMIndvcnQiOworCisgIEFTU0VSVF9FUShoYXlzdGFjaywgd2Nzc3RyKGhheXN0YWNrLCBlbXB0eV9uZWVkbGUpKTsKKyAgQVNTRVJUX0VRKCZoYXlzdGFja1sxMF0sIHdjc3N0cihoYXlzdGFjaywgZ29vZF9uZWVkbGUpKTsKKyAgQVNTRVJUX0VRKE5VTEwsIHdjc3N0cihoYXlzdGFjaywgYmFkX25lZWRsZSkpOworfQorCitURVNUKHdjaGFyLCBtYnRvd2MpIHsKKyAgd2NoYXJfdCBvdXRbOF07CisKKyAgb3V0WzBdID0gJ3gnOworICBBU1NFUlRfRVEoMCwgbWJ0b3djKG91dCwgImhlbGxvIiwgMCkpOworICBBU1NFUlRfRVEoJ3gnLCBvdXRbMF0pOworCisgIEFTU0VSVF9FUSgwLCBtYnRvd2Mob3V0LCAiaGVsbG8iLCAwKSk7CisgIEFTU0VSVF9FUSgwLCBtYnRvd2Mob3V0LCAiIiwgMCkpOworICBBU1NFUlRfRVEoMSwgbWJ0b3djKG91dCwgImhlbGxvIiwgMSkpOworICBBU1NFUlRfRVEoTCdoJywgb3V0WzBdKTsKKworICBBU1NFUlRfRVEoMCwgbWJ0b3djKE5VTEwsICJoZWxsbyIsIDApKTsKKyAgQVNTRVJUX0VRKDAsIG1idG93YyhOVUxMLCAiIiwgMCkpOworICBBU1NFUlRfRVEoMSwgbWJ0b3djKE5VTEwsICJoZWxsbyIsIDEpKTsKKworICBBU1NFUlRfRVEoMCwgbWJ0b3djKE5VTEwsIE5VTEwsIDApKTsKK30KKworVEVTVCh3Y2hhciwgbWJydG93YykgeworICB3Y2hhcl90IG91dFs4XTsKKworICBvdXRbMF0gPSAneCc7CisgIEFTU0VSVF9FUSgwVSwgbWJydG93YyhvdXQsICJoZWxsbyIsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKCd4Jywgb3V0WzBdKTsKKworICBBU1NFUlRfRVEoMFUsIG1icnRvd2Mob3V0LCAiaGVsbG8iLCAwLCBOVUxMKSk7CisgIEFTU0VSVF9FUSgwVSwgbWJydG93YyhvdXQsICIiLCAwLCBOVUxMKSk7CisgIEFTU0VSVF9FUSgxVSwgbWJydG93YyhvdXQsICJoZWxsbyIsIDEsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKEwnaCcsIG91dFswXSk7CisKKyAgQVNTRVJUX0VRKDBVLCBtYnJ0b3djKE5VTEwsICJoZWxsbyIsIDAsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDBVLCBtYnJ0b3djKE5VTEwsICIiLCAwLCBOVUxMKSk7CisgIEFTU0VSVF9FUSgxVSwgbWJydG93YyhOVUxMLCAiaGVsbG8iLCAxLCBOVUxMKSk7CisKKyAgQVNTRVJUX0VRKDBVLCBtYnJ0b3djKE5VTEwsIE5VTEwsIDAsIE5VTEwpKTsKKworICBBU1NFUlRfU1RSRVEoIkMuVVRGLTgiLCBzZXRsb2NhbGUoTENfQ1RZUEUsICJDLlVURi04IikpOworICB1c2Vsb2NhbGUoTENfR0xPQkFMX0xPQ0FMRSk7CisKKyAgLy8gMS1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoMVUsIG1icnRvd2Mob3V0LCAiYWJjZGVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoTCdhJywgb3V0WzBdKTsKKyAgLy8gMi1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoMlUsIG1icnRvd2Mob3V0LCAiXHhjMlx4YTIiICJjZGVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8d2NoYXJfdD4oMHgwMGEyKSwgb3V0WzBdKTsKKyAgLy8gMy1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoM1UsIG1icnRvd2Mob3V0LCAiXHhlMlx4ODJceGFjIiAiZGVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8d2NoYXJfdD4oMHgyMGFjKSwgb3V0WzBdKTsKKyAgLy8gNC1ieXRlIFVURi04LgorICBBU1NFUlRfRVEoNFUsIG1icnRvd2Mob3V0LCAiXHhmMFx4YTRceGFkXHhhMiIgImVmIiwgNiwgTlVMTCkpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8d2NoYXJfdD4oMHgyNGI2MiksIG91dFswXSk7CisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSAvLyBnbGliYyBhbGxvd3MgdGhpcy4KKyAgLy8gSWxsZWdhbCA1LWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgbWJydG93YyhvdXQsICJceGY4XHhhMVx4YTJceGEzXHhhNCIgImYiLCA2LCBOVUxMKSk7CisgIEFTU0VSVF9FUShFSUxTRVEsIGVycm5vKTsKKyNlbmRpZgorICAvLyBJbGxlZ2FsIG92ZXItbG9uZyBzZXF1ZW5jZS4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCBtYnJ0b3djKG91dCwgIlx4ZjBceDgyXHg4Mlx4YWMiICJlZiIsIDYsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKEVJTFNFUSwgZXJybm8pOworfQorCit2b2lkIHRlc3RfbWJydG93Y19pbmNvbXBsZXRlKG1ic3RhdGVfdCogcHMpIHsKKyAgQVNTRVJUX1NUUkVRKCJDLlVURi04Iiwgc2V0bG9jYWxlKExDX0NUWVBFLCAiQy5VVEYtOCIpKTsKKyAgdXNlbG9jYWxlKExDX0dMT0JBTF9MT0NBTEUpOworCisgIHdjaGFyX3Qgb3V0OworICAvLyAyLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG93Yygmb3V0LCAiXHhjMiIsIDEsIHBzKSk7CisgIEFTU0VSVF9FUSgxVSwgbWJydG93Yygmb3V0LCAiXHhhMiIgImNkZWYiLCA1LCBwcykpOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8d2NoYXJfdD4oMHgwMGEyKSwgb3V0KTsKKyAgQVNTRVJUX1RSVUUobWJzaW5pdChwcykpOworICAvLyAzLWJ5dGUgVVRGLTguCisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG93Yygmb3V0LCAiXHhlMiIsIDEsIHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSwgbWJydG93Yygmb3V0LCAiXHg4MiIsIDEsIHBzKSk7CisgIEFTU0VSVF9FUSgxVSwgbWJydG93Yygmb3V0LCAiXHhhYyIgImRlZiIsIDQsIHBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx3Y2hhcl90PigweDIwYWMpLCBvdXQpOworICBBU1NFUlRfVFJVRShtYnNpbml0KHBzKSk7CisgIC8vIDQtYnl0ZSBVVEYtOC4KKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b3djKCZvdXQsICJceGYwIiwgMSwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b3djKCZvdXQsICJceGE0XHhhZCIsIDIsIHBzKSk7CisgIEFTU0VSVF9FUSgxVSwgbWJydG93Yygmb3V0LCAiXHhhMiIgImVmIiwgMywgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHdjaGFyX3Q+KDB4MjRiNjIpLCBvdXQpOworICBBU1NFUlRfVFJVRShtYnNpbml0KHBzKSk7CisKKyAgLy8gSW52YWxpZCAyLWJ5dGUKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b3djKCZvdXQsICJceGMyIiwgMSwgcHMpKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpLCBtYnJ0b3djKCZvdXQsICJceDIwIiAiY2RlZiIsIDUsIHBzKSk7CisgIEFTU0VSVF9FUShFSUxTRVEsIGVycm5vKTsKK30KKworVEVTVCh3Y2hhciwgbWJydG93Y19pbmNvbXBsZXRlKSB7CisgIG1ic3RhdGVfdCBwczsKKyAgbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisKKyAgdGVzdF9tYnJ0b3djX2luY29tcGxldGUoJnBzKTsKKyAgdGVzdF9tYnJ0b3djX2luY29tcGxldGUoTlVMTCk7Cit9CisKK3ZvaWQgdGVzdF9tYnNydG93Y3MobWJzdGF0ZV90KiBwcykgeworICB3Y2hhcl90IG91dFs0XTsKKworICBjb25zdCBjaGFyKiB2YWxpZCA9ICJBIiAiXHhjMlx4YTIiICJceGUyXHg4Mlx4YWMiICJceGYwXHhhNFx4YWRceGEyIiAiZWYiOworICBBU1NFUlRfRVEoNFUsIG1ic3J0b3djcyhvdXQsICZ2YWxpZCwgNCwgcHMpKTsKKyAgQVNTRVJUX0VRKEwnQScsIG91dFswXSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDx3Y2hhcl90PigweDAwYTIpLCBvdXRbMV0pOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8d2NoYXJfdD4oMHgyMGFjKSwgb3V0WzJdKTsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHdjaGFyX3Q+KDB4MjRiNjIpLCBvdXRbM10pOworICAvLyBDaGVjayB0aGF0IHZhbGlkIGhhcyBhZHZhbmNlZCB0byB0aGUgbmV4dCB1bnJlYWQgY2hhcmFjdGVyLgorICBBU1NFUlRfRVEoJ2UnLCAqdmFsaWQpOworCisgIHdtZW1zZXQob3V0LCBMJ3gnLCBzaXplb2Yob3V0KSAvIHNpemVvZih3Y2hhcl90KSk7CisgIEFTU0VSVF9FUSgyVSwgbWJzcnRvd2NzKG91dCwgJnZhbGlkLCA0LCBwcykpOworICBBU1NFUlRfRVEoTCdlJywgb3V0WzBdKTsKKyAgQVNTRVJUX0VRKEwnZicsIG91dFsxXSk7CisgIEFTU0VSVF9FUShMJ1wwJywgb3V0WzJdKTsKKyAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgY2xvYmJlciB0aGUgcmVzdCBvZiBvdXQuCisgIEFTU0VSVF9FUShMJ3gnLCBvdXRbM10pOworICAvLyBDaGVjayB0aGF0IHZhbGlkIGhhcyBhZHZhbmNlZCB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCisgIEFTU0VSVF9FUShudWxscHRyLCB2YWxpZCk7CisKKyAgY29uc3QgY2hhciogaW52YWxpZCA9ICJBIiAiXHhjMlx4MjAiICJlZiI7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgbWJzcnRvd2NzKG91dCwgJmludmFsaWQsIDQsIHBzKSk7CisgIEVYUEVDVF9FUShFSUxTRVEsIGVycm5vKTsKKyAgQVNTRVJUX0VRKCdceGMyJywgKmludmFsaWQpOworCisgIGNvbnN0IGNoYXIqIGluY29tcGxldGUgPSAiQSIgIlx4YzIiOworICBBU1NFUlRfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSksIG1ic3J0b3djcyhvdXQsICZpbmNvbXBsZXRlLCAyLCBwcykpOworICBFWFBFQ1RfRVEoRUlMU0VRLCBlcnJubyk7CisgIEFTU0VSVF9FUSgnXHhjMicsICppbmNvbXBsZXRlKTsKK30KKworVEVTVCh3Y2hhciwgbWJzcnRvd2NzKSB7CisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICBtYnN0YXRlX3QgcHM7CisgIG1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOworICB0ZXN0X21ic3J0b3djcygmcHMpOworICB0ZXN0X21ic3J0b3djcyhOVUxMKTsKKworICAvLyBJbnZhbGlkIG11bHRpIGJ5dGUgY29udGludWF0aW9uLgorICBjb25zdCBjaGFyKiBpbnZhbGlkID0gIlx4MjAiOworICB3Y2hhcl90IG91dDsKKyAgQVNTRVJUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oLTIpLCBtYnJ0b3djKCZvdXQsICJceGMyIiwgMSwgJnBzKSk7CisgIEFTU0VSVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSwgbWJzcnRvd2NzKCZvdXQsICZpbnZhbGlkLCAxLCAmcHMpKTsKKyAgRVhQRUNUX0VRKEVJTFNFUSwgZXJybm8pOworICBBU1NFUlRfRVEoJ1x4MjAnLCAqaW52YWxpZCk7Cit9CisKK1RFU1Qod2NoYXIsIHdjc3RvZCkgeworICBBU1NFUlRfRE9VQkxFX0VRKDEuMjMsIHdjc3RvZChMIjEuMjMiLCBOVUxMKSk7Cit9CisKK1RFU1Qod2NoYXIsIHdjc3RvZikgeworICBBU1NFUlRfRkxPQVRfRVEoMS4yM2YsIHdjc3RvZihMIjEuMjMiLCBOVUxMKSk7Cit9CisKK1RFU1Qod2NoYXIsIHdjc3RvbCkgeworICBBU1NFUlRfRVEoMTIzTCwgd2NzdG9sKEwiMTIzIiwgTlVMTCwgMCkpOworfQorCitURVNUKHdjaGFyLCB3Y3N0b2xsKSB7CisgIEFTU0VSVF9FUSgxMjNMTCwgd2NzdG9sKEwiMTIzIiwgTlVMTCwgMCkpOworfQorCitURVNUKHdjaGFyLCB3Y3N0b2xkKSB7CisgIEFTU0VSVF9ET1VCTEVfRVEoMS4yM0wsIHdjc3RvbGQoTCIxLjIzIiwgTlVMTCkpOworfQorCitURVNUKHdjaGFyLCB3Y3N0b3VsKSB7CisgIEFTU0VSVF9FUSgxMjNVTCwgd2NzdG91bChMIjEyMyIsIE5VTEwsIDApKTsKK30KKworVEVTVCh3Y2hhciwgd2NzdG91bGwpIHsKKyAgQVNTRVJUX0VRKDEyM1VMTCwgd2NzdG91bChMIjEyMyIsIE5VTEwsIDApKTsKK30KKworVEVTVCh3Y2hhciwgbWJzbnJ0b3djcykgeworICB3Y2hhcl90IGRzdFsxMjhdOworICBjb25zdCBjaGFyKiBzID0gImhlbGxvLCB3b3JsZCEiOworICBjb25zdCBjaGFyKiBzcmM7CisKKyAgbWVtc2V0KGRzdCwgMCwgc2l6ZW9mKGRzdCkpOworICBzcmMgPSBzOworICBBU1NFUlRfRVEoMFUsIG1ic25ydG93Y3MoZHN0LCAmc3JjLCAwLCAwLCBOVUxMKSk7CisKKyAgbWVtc2V0KGRzdCwgMCwgc2l6ZW9mKGRzdCkpOworICBzcmMgPSBzOworICBBU1NFUlRfRVEoMlUsIG1ic25ydG93Y3MoZHN0LCAmc3JjLCAyLCAxMjMsIE5VTEwpKTsgLy8gZ2xpYmMgY2hva2VzIG9uIFNJWkVfTUFYIGhlcmUuCisgIEFTU0VSVF9FUShMJ2gnLCBkc3RbMF0pOworICBBU1NFUlRfRVEoTCdlJywgZHN0WzFdKTsKKyAgQVNTRVJUX0VRKCZzWzJdLCBzcmMpOworCisgIG1lbXNldChkc3QsIDAsIHNpemVvZihkc3QpKTsKKyAgc3JjID0gczsKKyAgQVNTRVJUX0VRKDNVLCBtYnNucnRvd2NzKGRzdCwgJnNyYywgU0laRV9NQVgsIDMsIE5VTEwpKTsKKyAgQVNTRVJUX0VRKEwnaCcsIGRzdFswXSk7CisgIEFTU0VSVF9FUShMJ2UnLCBkc3RbMV0pOworICBBU1NFUlRfRVEoTCdsJywgZHN0WzJdKTsKKyAgQVNTRVJUX0VRKCZzWzNdLCBzcmMpOworfQorCitURVNUKHdjaGFyLCB3Y3NmdGltZSkgeworICBzZXRlbnYoIlRaIiwgIlVUQyIsIDEpOworCisgIHN0cnVjdCB0bSB0OworICBtZW1zZXQoJnQsIDAsIHNpemVvZih0bSkpOworICB0LnRtX3llYXIgPSAyMDA7CisgIHQudG1fbW9uID0gMjsKKyAgdC50bV9tZGF5ID0gMTA7CisKKyAgd2NoYXJfdCBidWZbNjRdOworCisgIEVYUEVDVF9FUSgyNFUsIHdjc2Z0aW1lKGJ1Ziwgc2l6ZW9mKGJ1ZiksIEwiJWMiLCAmdCkpOworICBFWFBFQ1RfU1RSRVEoTCJTdW4gTWFyIDEwIDAwOjAwOjAwIDIxMDAiLCBidWYpOworfQorCitURVNUKHdjaGFyLCB3bWVtbW92ZSkgeworICBjb25zdCB3Y2hhcl90IGNvbnN0X3dzdHJbXSA9IEwiVGhpcyBpcyBhIHRlc3Qgb2Ygc29tZXRoaW5nIG9yIG90aGVyLi4uLi4iOworICB3Y2hhcl90KiB3c3RyID0gbmV3IHdjaGFyX3Rbc2l6ZW9mKGNvbnN0X3dzdHIpXTsKKworICB3bWVtbW92ZSh3c3RyLCBjb25zdF93c3RyLCBzaXplb2YoY29uc3Rfd3N0cikvc2l6ZW9mKHdjaGFyX3QpKTsKKyAgRVhQRUNUX1NUUkVRKGNvbnN0X3dzdHIsIHdzdHIpOworCisgIHdtZW1tb3ZlKHdzdHIrNSwgd3N0ciwgc2l6ZW9mKGNvbnN0X3dzdHIpL3NpemVvZih3Y2hhcl90KSAtIDYpOworICBFWFBFQ1RfU1RSRVEoTCJUaGlzIFRoaXMgaXMgYSB0ZXN0IG9mIHNvbWV0aGluZyBvciBvdGhlciIsIHdzdHIpOworfQorCitURVNUKHdjaGFyLCBtYnJ0b3djXzE1NDM5NTU0KSB7CisgIC8vIGh0dHA6Ly9iLzE1NDM5NTU0CisgIEFTU0VSVF9TVFJFUSgiQy5VVEYtOCIsIHNldGxvY2FsZShMQ19DVFlQRSwgIkMuVVRGLTgiKSk7CisgIHVzZWxvY2FsZShMQ19HTE9CQUxfTE9DQUxFKTsKKworICBBU1NFUlRfR0Uoc3RhdGljX2Nhc3Q8c2l6ZV90PihNQl9MRU5fTUFYKSwgTUJfQ1VSX01BWCk7CisgIEFTU0VSVF9HRShNQl9DVVJfTUFYLCA0VSk7CisKKyAgd2NoYXJfdCB3YzsKKyAgc2l6ZV90IG47CisKKyAgLy8gMS1ieXRlIGNoYXJhY3Rlci4KKyAgbiA9IG1icnRvd2MoJndjLCAieCIsIE1CX0NVUl9NQVgsIE5VTEwpOworICBFWFBFQ1RfRVEoMVUsIG4pOworICBFWFBFQ1RfRVEoTCd4Jywgd2MpOworICAvLyAyLWJ5dGUgY2hhcmFjdGVyLgorICBuID0gbWJydG93Yygmd2MsICJceGMyXHhhMiIsIE1CX0NVUl9NQVgsIE5VTEwpOworICBFWFBFQ1RfRVEoMlUsIG4pOworICBFWFBFQ1RfRVEoTCfCoicsIHdjKTsKKyAgLy8gMy1ieXRlIGNoYXJhY3Rlci4KKyAgbiA9IG1icnRvd2MoJndjLCAiXHhlMlx4ODJceGFjIiwgTUJfQ1VSX01BWCwgTlVMTCk7CisgIEVYUEVDVF9FUSgzVSwgbik7CisgIEVYUEVDVF9FUShMJ+KCrCcsIHdjKTsKKyAgLy8gNC1ieXRlIGNoYXJhY3Rlci4KKyAgbiA9IG1icnRvd2MoJndjLCAiXHhmMFx4YTRceGFkXHhhMiIsIE1CX0NVUl9NQVgsIE5VTEwpOworICBFWFBFQ1RfRVEoNFUsIG4pOworICBFWFBFQ1RfRVEoTCfwpK2iJywgd2MpOworfQo=